找回密码
 注册
查看: 391|回复: 1

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-9-8 15:56:13 | 显示全部楼层 |阅读模式
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle : No such file or directory( l1 W0 A4 G* S
' ^7 ?; m6 P* ]3 \7 |

9 r( t' z2 I8 p: B0 I  y最近发现一个奇怪的问题,一台服务器上部署的网站,用外网访问是正常的,但是使用公司内网访问就访问不上,不仅网站访问不上,连服务器有时候都连接不上。( g# N. _6 r# E9 h6 T
原因是在内核优化时启用了net.ipv4.tcp_tw_recycle参数
' u) Y% g; N5 ]: ~! ^这个参数是默认关闭的,之所以打开是由于这个参数开启后,可以使TCP连接中TIME-WAIT sockets的快速回收,但是在NAT网络下,导致大量的TCP连接建立错误、
- F. E2 H+ Y* h/ @所以在公司内部有时候能访问,有时候访问不上
6 f/ n6 G$ o/ ~& ^! b& I1.先确定参数
% m5 O6 N0 z! `( ?0 h# a依次执行如下命令,查看当前内核配置,确认该参数值为“1”。
7 M& b0 U/ o8 |. [' o$ k1 T# f7 i6 V# Q+ {# k) j/ j2 G8 ]
cat /proc/sys/net/ipv4/tcp_tw_recycle! D" \8 _! J, u2 z
cat /proc/sys/net/ipv4/tcp_timestamps
, F( h6 i. L% C/ R% a( e' ?7 Z6 E* v  e/ k
2.在/etc/sysctl.conf配置文件添加如下内容。" z) Y" h: E2 Y: G. F; \
# v4 h5 B) _+ `: A6 g
net.ipv4.tcp_tw_recycle=0
" {! H! s4 e% t2 W) i6 Snet.ipv4.tcp_timestamps=07 Z1 p. J! ^8 n* |  F1 `
8 m* T# K2 b  @5 ^8 |# J
3.执行如下命令,使配置生效。
' a( c" y1 o' j0 o
4 q) E7 i9 |& `8 d: b0 o2 Tsysctl -p6 t+ f$ M) x) {
2 X1 ]& f  E( W4 Y- I8 X: H- u
修改完成后,在公司中访问就正常了
2 ^+ b5 B6 m, F; K记录下,对于网上提供的调优参数还是要多注意
8 E+ ]9 w: i0 s! t5 e% Y+ R) G2 [  `& h5 X* @, n2 S
6 ^) Q9 H& A; Y  n+ @7 C9 {& e

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-9-8 15:57:43 | 显示全部楼层
同事反馈从公司连接线上一台服务器有时候会失败,经过抓包发现,TCP握手过程失败。查了相关资料,发现是跟net.ipv4.tcp_tw_recycle和net.ipv4.tcp_timestamps两个参数有关,将net.ipv4.tcp_tw_recycle改为0,问题解决。
; i( j0 e5 C; K7 l  Y' O
6 F2 |. [: q9 R- P; W# r排查过程
& I& W2 x+ h! g5 G2 z2 w5 O在PC上通过wireshark抓包发现,失败的时候,TCP syn包是一直在重传的。在server端通过tcpdump抓包发现,PC侧发的syn包是已经到达,所以基本排除网络问题。tcpdump抓包中确实看不到server端响应的syn-ack,所以基本判定问题出在server段,接下来就是分析为啥server端不响应。
7 ^. ]3 L$ |+ d' Y: {$ I5 z% L当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不被响应。
7 h) _- M  x8 W& `  i# P2 w' B& \linux服务器上可以通过netstat -s查看是否存在该问题。如果多次执行下面的命令,发现数字再增加,说明存在该问题,而且现在还在发生。% Q) S+ u: u# M; u1 i$ ~6 k
$ D! _+ {& o1 P8 H4 S
[root@anonymous ~]# netstat -s | grep "connections rejected because of time stamp"26 passive connections rejected because of time stamp
2 F7 R0 d( }& D[root@anonymous ~]#& b9 w' [) v% {) j. h$ h
关于PAWS的检查机制,是对于处于TIME_WAIT状态的tcp连接的对端IP,为了防止来自同一IP的延迟数据的干扰,需要在60秒(#define TCP_PAWS_MSL 60)内新来的syn报文TCP options中的timestamp是递增的。详细解释可以参考RFC1323。
) D' m0 m; _; \! E
+ v0 [6 X; R! u6 Y& f注意) o# [8 `7 i, J1 @; I
排查过程中发现,windows系统和linux系统TCP syn options中timestamp是单调递增的,所以刚才描述的问题通常在多个PC经过NAT访问同一server的时候才容易复现。而测试中发现Mac系统本身syn报文options中的timestamp波动比较大,所以此问题很容易用Mac复现,只需要对着开启recycle和tcp_timestamps的server连续发起几次请求就可以。, u' k* f5 j- I1 S6 N: q- W
Mac上的timestamp变化  @# o- H! b% Y* e% E
3 Z5 i% h; Z- K" ~* |
总结
5 u) t: R  D% 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版本的测试了下,确实不支持该配置了。/ G' w. K" v) j6 W3 L4 p
. W9 ~6 e6 O4 i9 u% y
[root@test ~]# sysctl -p
0 w4 q; G7 E9 p8 n/ b( Jsysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory% [% L  l2 y6 }3 c  R6 z
[root@test ~]#
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:49 , Processed in 0.016873 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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