TIME_WAIT 状态原理
通信双方建立 TCP 连接后,主动关闭连接的一方就会进入 TIME_WAIT 状态。
客户端主动关闭连接时,会发送最后一个 ack 后,然后会进入 TIME_WAIT 状态,再停留 2 个 MSL 时间 (后有 MSL 的解释),进入 CLOSED 状态
下图就是著名的三次握手四次分手
如果 TIME_WAIT 状态过多会出现访问慢, 连接占用内存的情况
解决方法就是更改内核文件
使用命令:vi /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1(某些情况下该参数已启用)net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl - p 让参数生效。net.ipv4.tcp_syncookies = 1 表示开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭;net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;net.ipv4.tcp_tw_recycle = 1 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭。net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间
可以看到优化后的效果非常好。
本文整理与互联资源
站长 QQ:1500698928