什么是CLOSE_WAIT和TIME_WAIT状态?


165

当我netstat -a在Windows机器上运行时,我会获得四种状态之一的端口列表:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED

做什么CLOSE_WAITTIME_WAIT意味着什么?



看'man netstat',向下滚动到州部分:linux.die.net/man/8/netstat
MaQleod 2014年

1
无耻地插入我们姐妹服务器故障的答案。
Hennes 2015年

Answers:


178

由于TCP / IP的工作方式,无法立即关闭连接。在连接关闭后,数据包可能无序到达或重新传输。CLOSE_WAIT表示远程端点(连接的另一端)已关闭连接。TIME_WAIT表示本地端点(此端)已关闭连接。保持连接,以便任何延迟的数据包可以与连接匹配并进行适当处理。连接将在四分钟内超时时被删除。有关详细信息,请参阅http://en.wikipedia.org/wiki/Transmission_Control_Protocol


但这是不是意味着,即使数据包在函数返回后到达,它们仍会被应用程序丢弃?
MonsterMMORPG 2017年

@MonsterMMORPG连接关闭后无序到达的数据包将由网络堆栈处理。这些通常可以根据正常的重复数据包规则安全地丢弃。通常会丢弃看似与未知活动连接相关的数据包,并生成响应。WAIT状态可以防止此流量。
BillThor

29

基本上,“等待”状态意味着一方关闭了连接,但最终确认收盘正在等待中。

有关详细信息,请参阅此TCP状态图:

http://www.jxos.org/Projects/TCP/tcpstate.html


14
这准确地描述了CLOSE_WAIT但不是TIME_WAIT。TIME_WAIT表示本地应用程序关闭了连接,另一方确认并发送了自己的FIN。我们现在正在等待任何可能会扰乱同一端口的新用户的杂散重复数据包。
Chris Smowton 2014年

1
@ChrisSmowton,那么谁使用正确的术语?图表还是netstat?(比照
Pacerier 2016年

@Pacerier我认为他们匹配 - 你认为他们在哪里不一致?
Chris Smowton

@ChrisSmowton所以这意味着下一个端口所有者可能会获得额外的字节,如果我们设置TIME_WAIT = 0,可能会破坏响应?
MonsterMMORPG 2017年

可能但非常不可能,因为序列号需要匹配应用程序以查看拼接到流中的恶意数据包,或者接收器需要缓冲明显无序数据包,直到出现正确的序列号。我不太了解实际实现,告诉你后者是否在实践中完成。
Chris Smowton

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.