易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 389|回复: 1
收起左侧

sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle : No such file or director

[复制链接]
发表于 2023-9-8 15:56:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle : No such file or directory& W9 ?7 j  R+ h

: }; P5 c' Z% ~& i1 q
! F% p4 o9 P5 R$ N/ E$ Y最近发现一个奇怪的问题,一台服务器上部署的网站,用外网访问是正常的,但是使用公司内网访问就访问不上,不仅网站访问不上,连服务器有时候都连接不上。
2 K4 s$ J/ L3 }' @3 Q9 g原因是在内核优化时启用了net.ipv4.tcp_tw_recycle参数
6 b; \- ~- D0 p2 c8 A+ m: `  j这个参数是默认关闭的,之所以打开是由于这个参数开启后,可以使TCP连接中TIME-WAIT sockets的快速回收,但是在NAT网络下,导致大量的TCP连接建立错误、
& K+ F5 E& Y# g- r# f9 u所以在公司内部有时候能访问,有时候访问不上
& j3 I- U" ~8 x; |' t  k2 G1.先确定参数: s- S7 ]1 d: |" B9 ]5 S
依次执行如下命令,查看当前内核配置,确认该参数值为“1”。0 F% |+ ^9 |9 B3 w2 }
* D- b' F3 p. f7 b& D, M
cat /proc/sys/net/ipv4/tcp_tw_recycle
& n7 w1 c- D' L. i2 r6 rcat /proc/sys/net/ipv4/tcp_timestamps& o4 l" Z4 O, c. {& R7 F. x% ]* @

, `' G9 |/ A" Q+ ]( a2.在/etc/sysctl.conf配置文件添加如下内容。
7 {1 n/ s: E: ?2 q, ?( o0 p8 Y
( I6 d; N# d5 q1 s# Ynet.ipv4.tcp_tw_recycle=01 p% L, L- J8 f% f% l! s9 s
net.ipv4.tcp_timestamps=0
" ]; v0 H2 h# o5 K2 z" |1 ^5 S* P1 P) J! j: X! \
3.执行如下命令,使配置生效。0 M# P" P; [- Y$ Q
' a, C4 _/ P  S% q, l; q
sysctl -p( m: g9 H8 w) H
, M1 T4 M  K: a- l" b. S& w  R
修改完成后,在公司中访问就正常了
4 Z# d* u  v. f/ M$ H7 ~# L" _9 l( J记录下,对于网上提供的调优参数还是要多注意
6 d% L# b8 l) Q: z: z: O. H# N1 z! n/ d4 _# m) w: R- O

% h4 R1 W4 o: [6 ^0 `7 s$ q* [
 楼主| 发表于 2023-9-8 15:57:43 | 显示全部楼层
同事反馈从公司连接线上一台服务器有时候会失败,经过抓包发现,TCP握手过程失败。查了相关资料,发现是跟net.ipv4.tcp_tw_recycle和net.ipv4.tcp_timestamps两个参数有关,将net.ipv4.tcp_tw_recycle改为0,问题解决。
0 U' k# c3 P5 C0 L9 S, i4 w8 a" N, H5 m2 N" ^
排查过程! Q$ R9 h5 F: ?* I7 P# J
在PC上通过wireshark抓包发现,失败的时候,TCP syn包是一直在重传的。在server端通过tcpdump抓包发现,PC侧发的syn包是已经到达,所以基本排除网络问题。tcpdump抓包中确实看不到server端响应的syn-ack,所以基本判定问题出在server段,接下来就是分析为啥server端不响应。. k  a# E6 N# v7 W; r& D3 `+ ]
当net.ipv4.tcp_tw_recycle = 1和net.ipv4.tcp_timestamps = 1同时间开启,当多个PC经过NAT设备访问同一server的时候,受TCP PAWS(Protect Against Wrapped Sequence Numbers)影响,后发起连接的PC可能因为tcp options中的timestamp比前面PC的timestamp小,而导致syn不被响应。. ?4 E6 S6 t/ v  P( y. L2 X  \
linux服务器上可以通过netstat -s查看是否存在该问题。如果多次执行下面的命令,发现数字再增加,说明存在该问题,而且现在还在发生。4 G( o2 R0 K4 v: @( Q, K

, ]8 B# K5 w# Z2 \8 n$ G! q/ N[root@anonymous ~]# netstat -s | grep "connections rejected because of time stamp"26 passive connections rejected because of time stamp
5 e0 T) k$ r' }/ S5 h# ^6 [[root@anonymous ~]#8 t3 U* n) o7 s; n: [# f7 i0 I
关于PAWS的检查机制,是对于处于TIME_WAIT状态的tcp连接的对端IP,为了防止来自同一IP的延迟数据的干扰,需要在60秒(#define TCP_PAWS_MSL 60)内新来的syn报文TCP options中的timestamp是递增的。详细解释可以参考RFC1323。
* X/ y5 v. a5 S1 T8 u$ r+ Z7 t! d. Q) {7 K. x6 P% q
注意. `: _8 a/ F: r$ \
排查过程中发现,windows系统和linux系统TCP syn options中timestamp是单调递增的,所以刚才描述的问题通常在多个PC经过NAT访问同一server的时候才容易复现。而测试中发现Mac系统本身syn报文options中的timestamp波动比较大,所以此问题很容易用Mac复现,只需要对着开启recycle和tcp_timestamps的server连续发起几次请求就可以。
/ B0 t) t" Q  j! EMac上的timestamp变化7 r- V  }( k* o2 s

- I3 B4 Z& a" n4 i总结
: B, |9 a) q! H6 r3 t1 g% F该问题将net.ipv4.tcp_tw_recycle或net.ipv4.tcp_timestamps改为0都可以解决,不建议将net.ipv4.tcp_timestamps改为0,因为它对精准计算RTT(Round-Trip Time))有用。此外,tcp_tw_recycle从4.12版本内核开始被移除了。我找了一个5.14版本的测试了下,确实不支持该配置了。/ @: X* t7 X! b5 F, K
! z" T, _2 Z+ K5 D; I  {% T8 z
[root@test ~]# sysctl -p3 T6 x( m5 ~, [9 i" a
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory
3 y# n* h7 l& M+ L& ?[root@test ~]#
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:41 , Processed in 0.047316 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表