无法减少TIME_WAIT

时间:2017-09-06 02:53:39

标签: tcp time-wait

我试图通过设置tcp_fin_timeout详细here来减少连接处于TIME_WAIT状态的时间:

root:~# sysctl -w net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_fin_timeout = 30

但是,此设置似乎不会影响任何内容。当我查看机器的netstat时,连接仍然等待默认的60秒:

root:~# watch netstat -nato
tcp        0      0 127.0.0.1:34185         127.0.0.1:11209         TIME_WAIT   timewait (59.14/0/0)
tcp        0      0 127.0.0.1:34190         127.0.0.1:11209         TIME_WAIT   timewait (59.14/0/0)

有什么我想念的吗?该机器正在运行Ubuntu 14.04.1。

1 个答案:

答案 0 :(得分:2)

您的链接是都市神话。 net.ipv4.tcp_fin_timeout的实际功能是as follows

  

指定在强制关闭套接字之前等待最终FIN数据包的秒数。这严格违反了TCP规范,但需要防止拒绝服务攻击。在Linux 2.2中,默认值为180。

这与TIME_WAIT没有任何关系。它为FIN_WAIT_1中的套接字建立超时,之后重置连接(完全绕过TIME_WAIT)。如上所述,这是DOS测量,并且永远不应出现在正确编写的客户端 - 服务器应用程序中。您不希望将其设置得太低以至于重置普通连接:您将丢失数据。实际上,你根本不想弄乱它。

减少TIME_WAIT状态的正确方法是here