【问题标题】:TIME_WAIT on Loopback Interface环回接口上的 TIME_WAIT
【发布时间】:2010-09-23 12:20:03
【问题描述】:

为什么到环回接口的 TCP 连接以TIME_WAIT 结束(使用SO_DONTLINGER 设置关闭的套接字),但到不同主机的相同连接不会以TIME_WAIT 结束(它们被重置/销毁立即)?

以下是用于说明的场景:

(A) 两个应用程序,一个客户端和一个服务器,都在同一台 Windows 机器上运行。客户端通过服务器的loopback接口(127.0.0.1,端口xxxx)连接服务器,发送数据,接收数据,关闭socket(设置SO_DONTLINGER)。

假设连接是非常短暂的,因此客户端应用程序每秒都在建立和销毁大量连接。最终结果是套接字最终位于TIME_WAIT,并且客户端最终耗尽了它的最大套接字数(在 Windows 上,默认情况下约为 3900,我们假设此值不会在注册表中更改) .

(B) 与场景 (A) 相同的两个应用程序,但服务器位于不同的主机上(客户端仍在 Windows 上运行)。这些连接在各方面都是相同的,只是它们的目的地不是 127.0.0.1,而是其他一些 IP。这里客户端机器上的连接不会进入TIME_WAIT,客户端应用程序可以无限期地继续建立连接。

为什么会出现差异?

【问题讨论】:

    标签: windows networking tcp loopback time-wait


    【解决方案1】:

    TIME_WAIT 状态只发生在连接的一端——首先关闭的一端。对于环回接口,两端位于同一台机器上,因此您将始终看到 TIME_WAIT。

    在您的其他情况下,请尝试查看另一台机器。我想你会在那里看到 TIME_WAIT 套接字。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      相关资源
      最近更新 更多