易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 388|回复: 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
  V% ?1 T- Z1 e9 `0 ^/ [: e
2 b9 Y9 B+ D6 ?; e3 g
9 [) h( y9 D- m最近发现一个奇怪的问题,一台服务器上部署的网站,用外网访问是正常的,但是使用公司内网访问就访问不上,不仅网站访问不上,连服务器有时候都连接不上。$ ?* x/ V& m" ]% h6 U  M3 L
原因是在内核优化时启用了net.ipv4.tcp_tw_recycle参数. ^1 Z- a; [/ {- \7 A
这个参数是默认关闭的,之所以打开是由于这个参数开启后,可以使TCP连接中TIME-WAIT sockets的快速回收,但是在NAT网络下,导致大量的TCP连接建立错误、5 f* @1 }/ T; @/ l7 G  u/ F& F
所以在公司内部有时候能访问,有时候访问不上
$ i' b1 N! o5 H! s9 a8 [5 o1.先确定参数
' y% E) V9 ]7 V' j+ s依次执行如下命令,查看当前内核配置,确认该参数值为“1”。
* N4 M  ^( g7 _/ `" {: s' T/ w2 ]* J3 e2 D9 U3 K0 _
cat /proc/sys/net/ipv4/tcp_tw_recycle7 q6 T) X* X/ H! G0 d$ Q& W1 C
cat /proc/sys/net/ipv4/tcp_timestamps. \: Z/ k& J2 u. f
2 R5 A0 ]9 u: J8 |  |
2.在/etc/sysctl.conf配置文件添加如下内容。  D; V5 J" q9 V7 S/ s/ d

% Z6 Y2 X: u# J2 \net.ipv4.tcp_tw_recycle=01 \, r; l# Q- U3 ~% A$ D
net.ipv4.tcp_timestamps=0
5 K" A  R& w* ^% z: t
( c9 T1 U2 D2 C! t# d6 F6 I7 |+ R3.执行如下命令,使配置生效。& W! P) Z, U6 @; q& r
# M$ ], A, N% h# O1 y. W1 `+ Z/ _3 T
sysctl -p
% c* [3 I2 l/ y* ~" F- x; }' J0 e* _, C0 ^
修改完成后,在公司中访问就正常了6 p( ~+ \+ W1 R
记录下,对于网上提供的调优参数还是要多注意
& n: X: K( T5 v3 ^. Z7 u8 |" Z4 M7 h2 X- A& j) }6 A6 L5 q
/ B2 w! M" ~2 \& z" w
 楼主| 发表于 2023-9-8 15:57:43 | 显示全部楼层
同事反馈从公司连接线上一台服务器有时候会失败,经过抓包发现,TCP握手过程失败。查了相关资料,发现是跟net.ipv4.tcp_tw_recycle和net.ipv4.tcp_timestamps两个参数有关,将net.ipv4.tcp_tw_recycle改为0,问题解决。
9 I# ^6 r8 P5 x
8 W: q0 }$ k1 z! Z: E1 e排查过程* t9 _! T( U, A$ p4 R0 H7 z
在PC上通过wireshark抓包发现,失败的时候,TCP syn包是一直在重传的。在server端通过tcpdump抓包发现,PC侧发的syn包是已经到达,所以基本排除网络问题。tcpdump抓包中确实看不到server端响应的syn-ack,所以基本判定问题出在server段,接下来就是分析为啥server端不响应。& t! M% u" g* a
当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不被响应。9 H* T3 w" @' j7 v& F
linux服务器上可以通过netstat -s查看是否存在该问题。如果多次执行下面的命令,发现数字再增加,说明存在该问题,而且现在还在发生。: X; g6 W9 C0 W( I# {$ m4 P; i- U
; b& }/ w0 ~+ d  L! _' ]$ @
[root@anonymous ~]# netstat -s | grep "connections rejected because of time stamp"26 passive connections rejected because of time stamp1 G% u) a- J' X
[root@anonymous ~]#4 x- Y; w' c: a. H. Y0 B
关于PAWS的检查机制,是对于处于TIME_WAIT状态的tcp连接的对端IP,为了防止来自同一IP的延迟数据的干扰,需要在60秒(#define TCP_PAWS_MSL 60)内新来的syn报文TCP options中的timestamp是递增的。详细解释可以参考RFC1323。/ P# ?+ c. d( J* K: F# v

( a0 ?2 ^) V7 V; e, X: e$ T1 ?注意
* I% x+ W6 A% v; S1 z排查过程中发现,windows系统和linux系统TCP syn options中timestamp是单调递增的,所以刚才描述的问题通常在多个PC经过NAT访问同一server的时候才容易复现。而测试中发现Mac系统本身syn报文options中的timestamp波动比较大,所以此问题很容易用Mac复现,只需要对着开启recycle和tcp_timestamps的server连续发起几次请求就可以。" y9 H* q8 N$ Y5 V1 D
Mac上的timestamp变化8 F' z* ]) G& U# ?- v% t3 Z  \: Z

  c7 `3 H* z8 I, ^5 h总结0 ?3 B! D3 N8 Q* @$ _
该问题将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- M; T* N0 P( r+ b  O2 M3 d
+ c- b8 @6 D" Z5 n
[root@test ~]# sysctl -p
! x; v( t8 C1 r! F) d5 fsysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory
! Z8 W% C& J8 i  J5 b1 Q, l[root@test ~]#
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

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

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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