为什么同一个socket会多次处于TIME_WAIT状态?

为什么同一个socket会多次处于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

答案1

TCP 连接不是仅通过本地端口号来标识的,而是由本地 IP 地址、本地端口号、远程 IP 地址和远程端口号组成的三元组来标识。

由于远程端口号不同,因此它们是不同的连接。

套接字 API 每个连接都有一个套接字,另加一个用于接受传入连接的监听套接字。

相关内容