【问题标题】:Unable to reduce TIME_WAIT无法减少 TIME_WAIT
【发布时间】:2017-09-06 02:53:38
【问题描述】:

我试图通过设置详细的 tcp_fin_timeout here 来减少连接处于 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。

【问题讨论】:

    标签: tcp time-wait


    【解决方案1】:

    您的链接是都市神话。 net.ipv4.tcp_fin_timeout的实际作用是as follows:

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

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

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

    【讨论】:

    • 如何找到当前正在使用的 TIME_WAIT 的值?我找不到有关链接答案的信息。谢谢。
    • 它是 2*MSL。这是 2 或 4 分钟,我忘记了。一些操作系统可能会提供一种调整它的方法,但这样做不是答案。扭转谁进入状态就是答案。
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多