- 1 TL;DR
- 2 About the TIME-WAIT state
- 2.1 TCP state diagram
- 2.2 Purpose
- 3 Problems
- 4 Other solutions
- 5 Another
- 6 总结
本文为摘录,原文为: https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux#summary
1 TL;DR
- 不用启用
net.ipv4.tcp_tw_recycle
, 该选项已在 Linux4.12 废弃 - 多数情况下,
TIME-WAIT
状态的 socket 无害
2 About the TIME-WAIT state
2.1 TCP state diagram
http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm
- 只有主动关闭连接一端会进入
TIME-WAIT
状态 - 另外一端通常会走另外一条路径,快速关闭连接
- 可以通过命令
ss -tan
来查看状态$ ss -tan | head -5 LISTEN 0 511 *:80 *:* SYN-RECV 0 0 192.0.2.145:80 203.0.113.5:35449 SYN-RECV 0 0 192.0.2.145:80 203.0.113.27:53599 ESTAB 0 0 192.0.2.145:80 203.0.113.27:33605 TIME-WAIT 0 0 192.0.2.145:80 203.0.113.47:50685
2.2 Purpose
3 Problems
4 Other solutions
4.1 net.ipv4.tcp_tw_reuse
5 Another
6 总结
在某些场景下,60 秒的等待销毁时间确实是难以接受的,例如:高并发的压力测试。当我们通过并发请 求测试远程服务的吞吐量和延迟时,本地就可能产生大量处于 TIME_WAIT 状态的 TCP 连接,在 macOS 上可以使用如下所示的命令查看活跃的连接: