为什么TIME_WAIT中的同一个套接字多次?

时间:2015-08-19 22:37:35

标签: sockets tcp time-wait

我在TIME_WAIT中读过有关套接字的其他线程,但我显然仍然遗漏了一些内容。

以下是“netstat -an”的几行。它怎么会陷入这种情况?如果我理解了我发现的描述,我们不应该有多个套接字63444的实例...但是在列为“LISTEN”的那个之后,大约有50个单独的套接字连接,其中一端在63444,全部在“TIME_WAIT”中。怎么会发生这种情况,我该如何解决呢?

tcp 0 0 0.0.0.0:63444 0.0.0.0:* LISTEN
tcp 0 0 169.254.7.228:63444 169.254.66.84:35391 TIME_WAIT
tcp 0 0 169.254.7.228:63444 169.254.66.84:35283 TIME_WAIT
tcp 0 0 169.254.7.228:63444 169.254.66.84:35352 TIME_WAIT
tcp 0 0 169.254.7.228:63444 169.254.66.84:35431 TIME_WAIT

3 个答案:

答案 0 :(得分:2)

我不确定你发现了什么描述,但那是胡说八道。 Web服务器可能有几十个连接到端口80同时处于活动状态,而许多其他连接在关闭过程中。它们都具有相同的本地端点。

这些TIME_WAIT行中的每一行代表与正在关闭的端口63444的不同连接。 169.254.66.84的机器与这台机器建立了一系列连接,其中有几台现在处于TIME_WAIT状态。这没什么不寻常的。

答案 1 :(得分:1)

连接由源端口,源地址,目标端口和目标地址唯一(通常)标识。如果其中任何一个不同,则它是不同的连接。在您显示的每一行中,"其他"所以每个人都是不同的联系。

答案 2 :(得分:1)

  

为什么TIME_WAIT中的同一个套接字多次?

它不是同一个套接字。看看远程地址。它每次都是相同的本地IP地址和端口,但远程地址都不同。

  

我在TIME_WAIT中读过有关套接字的其他线程,但我显然仍然遗漏了一些东西。以下是来自" netstat -an"的几行。怎么会陷入这种情况呢?

服务器接受了一些连接,后来关闭了它们。

  

如果我理解我发现的描述,我们不应该有多个套接字63444的实例......

无论你在哪里阅读,都是胡说八道。否则TCP服务器根本无法工作。

  

但在列出" LISTEN"大约有50个单独的套接字连接,一端在63444,全部在" TIME_WAIT"。怎么会发生这种情况,我该如何解决呢?

这是完全正常的。这里没有什么需要修复。

当接受连接时,将创建一个具有相同本地IP地址和端口的新套接字,并且源IP地址:端口设置为客户端的端口。当服务器关闭此套接字时,它会在关闭握手进行时转换为各种状态,以TIME_WAIT结束两分钟,然后消失。