English 中文(简体)
时间等待在环回接口上
原标题:
  • 时间:2008-11-21 19:01:07
  •  标签:

为什么针对环回接口的TCP连接最终会进入TIME_WAIT状态(使用设置了SO_DONTLINGER的套接字关闭),但对于不同主机的相同连接则不会进入TIME_WAIT(它们会立即被重置/销毁)?

这里有一些情景来说明:

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

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

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

为什么存在差异?

最佳回答

TIME_WAIT状态仅发生在连接的一端--先关闭的一端。对于回环接口,两端都在同一台机器上,因此您始终会看到TIME_WAIT。

在你的另一个案例中,请尝试查看另一台机器。我认为你会在那里看到TIME_WAIT套接字。

问题回答

暂无回答




相关问题
热门标签