我已经阅读了有关 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 每个连接都有一个套接字,另加一个用于接受传入连接的监听套接字。