rocky linux 9.5(net.ipv4.tcp_tw_reuse = 2解释)
Rocky Linux 9.5(对应 RHEL9 内核系列,大概是 5.14.x 的长期支持内核),而且我看到:
1 | net.ipv4.tcp_tw_reuse = 2 |
解释为什么会出现 2
在标准 Linux upstream 内核 (5.14 主线) 里,tcp_tw_reuse 只有 0/1 两种取值。
0→ 禁用1→ 启用(仅对 主动发起连接的 TIME_WAIT socket 允许复用)
但 RHEL 9 / CentOS Stream 9 / Rocky 9 内核里,Red Hat 打过一个 增强补丁,支持 “2” 模式。
👉 值 2 的语义(来自 Red Hat 文档 / 内核 patch 注释):
2= 在所有场景(包括服务端接受连接)也允许 TIME_WAIT socket 被复用。- 等同于过去被移除的
tcp_tw_recycle的“弱化替代”,更激进,可能在 NAT/负载均衡环境下导致 连接错乱 / RST 激增。
nat环境弊端
风险
- 如果你的 upstream 服务器处于 SLB / NAT / 多客户端并发环境,那么
tcp_tw_reuse=2会非常危险,因为不同客户端可能被错误复用 socket,导致连接被异常重置。 - 这可能正好对应你抓包看到的现象:“同端口新会话 + 上一个会话没完整收尾 + RST”。
在SLB/NAT场景下推荐做法
回退到安全值 1
1
2sysctl -w net.ipv4.tcp_tw_reuse=1
echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.d/99-sysctl.conf保证仅在主动发起连接场景生效,避免对服务端 TIME_WAIT 套接字做不安全复用。
保持 timestamps=1(复用逻辑依赖 TCP 时间戳校验,确保安全性)。
监控变化
- 切换后再观察 Nginx
upstream prematurely closed connection是否明显下降。 - 用
ss -ant state time-wait | wc -l观察 TIME_WAIT 数量变化。
- 切换后再观察 Nginx