2017-09-06 60 views
0

我试图通过设置tcp_fin_timeout详细here减少连接处于TIME_WAIT状态的时间量:无法减少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。

回答

0

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

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

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

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