0
点赞
收藏
分享

微信扫一扫

运维-关于tcp_tw_recycle参数的设置问题

忍禁 2024-09-20 阅读 43

一次处理问题的时候,发下从容器访问服务器动不动就超时,timeout,后来发现服务器内存参数,net.ipv4.tcp_tw_recycle = 1,被开启,调整为net.ipv4.tcp_tw_recycle = 0后问题解决。

tcp_tw_recycle 是 Linux 内核中的一个 TCP 参数,用于控制 TIME_WAIT 状态的连接的回收行为。TIME_WAIT 是 TCP 连接关闭过程中的一个状态,当一个连接被关闭时,它会进入 TIME_WAIT 状态,以确保所有在网络中滞留的数据包都被处理完毕,从而防止数据包乱序或重复。

tcp_tw_recycle 的主要目的是减少处于 TIME_WAIT 状态的连接数量,从而释放更多的端口资源。启用 tcp_tw_recycle 后,内核会尝试更快地回收这些连接,而不是等待它们自然超时(默认是 2 倍的 MSL,即最大段生存时间)

# 查看当前的 tcp_tw_recycle 设置
sysctl net.ipv4.tcp_tw_recycle

# 临时启用 tcp_tw_recycle
sysctl -w net.ipv4.tcp_tw_recycle=1

# 永久启用 tcp_tw_recycle(需要编辑 /etc/sysctl.conf 文件)
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
sysctl -p

tcp_tw_recycle 可以减少 TIME_WAIT 状态的连接数量,但它也有一些潜在的问题和限制:

NAT 网络问题:在 NAT(网络地址转换)环境下,tcp_tw_recycle 可能会导致连接问题。因为 NAT 会修改数据包的时间戳,这会导致内核错误地认为某些数据包是旧的,并拒绝接受它们。

安全性问题:tcp_tw_recycle 可能会被利用来进行一些问题,例如 PAWS (Protect Against Wrapped Sequence numbers) 问题。

兼容性问题:由于上述问题,tcp_tw_recycle 在较新的 Linux 内核版本中已经被弃用。从 Linux 4.12 开始,这个参数已经被移除。

举报

相关推荐

0 条评论