« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9690886 建立时间:2004年12月20日 |

| |
[UTM]tcp状态处于 time_wait的解决 原创空间, 软件技术, 电脑与网络
邢红瑞 发表于 2009/3/29 15:09:47 |
最近使用 netstat -an 命令发现 apache 转到 rein的 tcp状态处于 time_wait 的有上千个,都是是等待释放的端口。修改 net.ipv4.tcp_tw_recycle 属性,加快回收之后, time_wait time_wait的数量少了很多。sysctl -a|grep net.ipv4.tcp_twnet.ipv4.tcp_tw_reuse = 0net.ipv4.tcp_tw_recycle = 0改为vi /etc/sysctl.conf增加或修改net.ipv4.tcp_tw值:net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1
使内核参数生效:sysctl -p查看sysctl -a|grep net.ipv4.tcp_twnet.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1 reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接, recyse是加速TIME-WAIT sockets回收可以设置time和wait的值
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
TIME_WAIT状态的意义
客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口状态为TIME_WAIT
是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?
主动关闭的一方在发送最后一个 ack 后就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间这个是TCP/IP必不可少的,也就是“解决”不了的。
也就是TCP/IP设计者本来是这么设计的主要有两个原因1。防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)2。可靠的关闭TCP连接在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。
TIME_WAIT 并不会占用很大资源的,除非受到攻击。
还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态 |
|
回复:tcp状态处于 time_wait的解决 原创空间, 软件技术, 电脑与网络
dennis(游客)发表评论于2009/3/30 18:13:59 |
设置socket的SO_LINGER选项是有可能避免进入TIME_WAIT状态直接硬关闭的,但是一般不建议这样搞。 |
|
» 1 »
|