在一段时间里面,我发现自己的阿里云服务器总是出现异常不能连接的问题。起初我以为是 ngx_waf 引起的问题,后面经过排查发现防火墙日志以及系统访问均没有问题。
连接异常现象表现为偶发服务器断连,不仅是 https 服务断连,连 ssh 等协议也无法正常连接。
经过一段时间的研究发现,是因为内核参数导致的这个问题,在系统配置中关闭即可
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_recycle
是 Linux 操作系统中的一个 TCP 参数,用于控制 TIME-WAIT 状态的 TCP 连接的回收机制。TIME-WAIT 状态是 TCP 连接关闭后的状态,用于确保在网络中的延迟数据包到达时可以正确处理它们,而不会与新的连接混淆。
该参数的含义和作用如下:
- net.ipv4.tcp_tw_recycle:这是一个布尔型参数,可以设置为 0(禁用)或 1(启用)。
- 启用 :如果将该参数设置为 1,操作系统会尝试使用 TCP 连接的时间戳来区分不同的 TIME-WAIT 状态连接,从而更快地回收这些连接。这意味着在短时间内使用相同本地和远程 IP 地址以及端口的连接会被认为是相同的连接,时间戳必须不同。这可以减少 TIME-WAIT 状态连接的数量,节省资源。
- 禁用 :如果将该参数设置为 0,操作系统不会使用时间戳来区分 TIME-WAIT 连接,而是仅使用 4 元组(本地 IP、本地端口、远程 IP、远程端口)来识别连接。这可能会导致某些情况下连接无法正确回收,因为它无法区分不同的连接。
注意事项 :
- 在某些情况下,启用
tcp_tw_recycle
可能导致连接问题,特别是在具有复杂网络拓扑或使用非标准配置的网络中。因此,建议谨慎使用并在启用之前测试其对你的系统的影响。 - 如果你在系统中启用了
tcp_tw_recycle
,请确保所有涉及的系统都已配置为支持这个参数,否则可能会导致连接问题。
为了更好地了解是否需要启用 net.ipv4.tcp_tw_recycle
参数,你应该考虑你的网络和应用程序的特定要求,并在进行更改之前测试其对性能和稳定性的影响。