Netstat 输出包含多个具有相同 IP 和端口的连接

Netstat 输出包含多个具有相同 IP 和端口的连接

Netstat 输出(netstat -an)包含多个具有相同外部(客户端)ip 和端口的连接,例如:

TCP    server_ip:49421     client_ip:4000     TIME_WAIT
TCP    server_ip:52772     client_ip:4000     TIME_WAIT
TCP    server_ip:56807     client_ip:4000     TIME_WAIT
TCP    server_ip:61969     client_ip:4000     TIME_WAIT

并且这种情况在注册表中减少TcpTimedWaitDelay参数后重复出现。这是否意味着服务器或客户端错误地关闭了套接字,或者这是正常情况?

答案1

TL;DR:TIME_WAIT这是预期的正常套接字状态,当已建立 TCP 连接的本地端要求先关闭连接时,就会出现这种情况。如果远程端先要求,则不会有本地,TIME_WAIT而远程端会保留一个TIME_WAIT。本身来说,大量的连接并没有错TIME_WAIT,只是意味着最近关闭了大量连接。这取决于您决定这对您的应用程序和工作流程是否正常。

TIME_WAIT目标是防止立即重用相同的连接localip:localport - remoteip:remoteport,在最大段生命周期:如果互联网上前一个连接的游荡/重复数据包恰好具有匹配的序列号,则它们可能会迟到并被视为新连接的一部分。今天很可能有其他措施可以防止这种情况发生,而在 1981 年发布 TCP 规范时还不存在这些措施。

参考:RFC 793:传输控制协议从 1981 年开始,参见3.5. 关闭连接图 13.

另引自3.3. 序列号

知道何时保持沉默

为了确保 TCP 不会创建带有
可能与网络中剩余的旧段重复的序列号的段,TCP 必须
在启动或
从崩溃中恢复时保持静默,在分配任何序列号之前保持静默,崩溃会导致正在使用的序列号的内存丢失。对于此规范,MSL 取为 2 分钟。这是一个工程选择,如果经验表明这样做是可取的,则可以更改。请注意,如果 TCP 在某种意义上重新初始化,但仍保留其正在使用的序列号的内存,则它根本不需要等待;它只需确保使用 比最近使用的
序列号更大的序列号。

我理解,在此引文中“TCP”的意思是localip:localport - remoteip:remoteport保持安静是由 强制执行的TIME_WAIT

相关内容