为什么到环回接口的TCP连接最终在TIME_WAIT(套接字以SO_DONTLINGER设置关闭),但与不同主机的相同连接不会以<=>结尾(它们被重置/销毁)立即)?

以下是用于说明的方案:

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

假设连接非常是短暂的,因此客户端应用程序每秒都会建立并销毁大量连接。最终结果是套接字最终以<=>结束,客户端最终耗尽其最大套接字数量(在Windows上,默认情况下为~3900,我们假设在注册表中不会更改此值)

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

为何出现差异?

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top