1

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

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

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

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。

4

1 回答 1

5

您的链接是城市神话。的实际功能net.ipv4.tcp_fin_timeout如下

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

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

这里给出了减少 TIME_WAIT 状态的正确方法。

于 2017-09-06T03:32:46.150 回答