当我在Windows机器上执行netstat -a时,会得到具有四个状态之一的端口列表:

- LISTENING
- CLOSE_WAIT
- TIME_WAIT
- ESTABLISHED


CLOSE_WAITTIME_WAIT是什么意思/表示什么?

评论

参见webmasters.stackexchange.com/q/22946

参见“ man netstat”,向下滚动至状态部分:linux.die.net/man/8/netstat

无耻的插件可以解决我们的姊妹站点服务器故障。

跨站点欺骗:askubuntu.com/questions/538443/…

#1 楼

由于TCP / IP的工作方式,无法立即关闭连接。数据包可能会无序到达或在连接关闭后重新传输。


CLOSE_WAIT指示远程端点(连接的另一端)已关闭连接。

TIME_WAIT指示本地端点(此侧)已关闭连接。

连接保持不变,因此任何延迟的数据包都可以与该连接匹配并得到适当处理。连接在四分钟内超时将被删除。有关更多详细信息,请参见http://en.wikipedia.org/wiki/Transmission_Control_Protocol。

评论


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

–MonsterMMORPG
17 Mar 20 '17在15:58

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

–BillThor
17 Mar 22 '17 at 2:58

@BillThor:Apache的ServerLimit或MaxRequestWorkers是否包括所有这些状态?

–mahmood
20年7月8日在9:43

@mahmood处于TIME_WAUT状态的连接是Apache已关闭的连接。处于CLOSE_WAIT状态的连接将由Apache处理,直到被读取为止,这几乎应该在连接关闭后立即进行。这些连接将不包含在ServerLibm或MaxRequestWorkers中。要验证,请运行命令“ netstat -antp | grep WAIT”。

–BillThor
20年7月16日在15:39

@BillThor:谢谢。老实说,这些年来我一直没期待得到答案。我想确保当前连接低于ServerLimit。我仍然不知道必须计算哪些州。我应该只检查已建立吗?还是其他诸如SYN_RECV?

–mahmood
20/07/17在10:20



#2 楼

基本上,“ WAIT”状态表示一侧已关闭连接,但最终确认尚未完成。
请参见例如有关详细信息,请参见以下TCP状态图:
https://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed.svg

评论


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

–克里斯·斯莫顿(Chris Smowton)
2014年4月10日在12:11

@ChrisSmowton,那么谁在使用正确的术语?该图还是netstat? (比较)

–起搏器
16年1月23日在3:38

@Pacerier我认为它们匹配-您认为它们在哪里不一致?

–克里斯·斯莫顿(Chris Smowton)
16年1月1日在16:42

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

–MonsterMMORPG
17 Mar 20 '17在16:00



可能但非常不可能,因为序列号将需要匹配以使应用程序看到流氓数据包被拼接到流中,或者接收器将需要缓存明显乱序的数据包,直到正确的序列号出现为止。我对实际的实现还不够了解,无法告诉您后者是否在实践中完成。

–克里斯·斯莫顿(Chris Smowton)
17年3月20日在21:12

#3 楼

TIME_WAIT表示等待足够的时间以确保远程TCP接收到其FIN请求的ACK。请参见
en.wikipedia.org/wiki/Transmission_Control_Protocol(以及RFC 793)

评论


这会增加现有答案提供的信息吗?

–fixer1234
16年5月20日在16:59

添加对RFC 793的引用

– Denio Mariz
17-10-4在14:42