LAST_ACK作为netstat中的State值是什么意思?


15

如果Windows服务器有数千个处于打开LAST_ACK状态的端口(如netstat所示),这意味着什么?是因为一个端点在等待另一个端点响应吗?

Answers:


10

last_ack状态(如果我能正确地调用TCP堆栈,则是您收到FIN消息以关闭邻居的连接时的状态),但是您仍然需要刷新和关闭连接。您自己发送最终的FIN并等待ACK。

通常挂在last_ack中意味着即使另一端完成了数据发送,您的应用程序仍保持套接字打开。发生这种情况有多种原因。可能有防火墙或其他负载平衡器丢失了来自客户端的最后一个ACK,并使您陷入了last_ack状态。如果几分钟(大约10分钟)后连接仍未超时,则可能是错误。

http://tangentsoft.net/wskfaq/articles/debugging-tcp.html上查看状态图


4
不正确。您正在描述CLOSE_WAIT。
user207421 2014年

4

LAST_ACK是关闭TCP连接之前的最后一个状态。


1
谢谢,什么会导致端口在这种状态下挂起?
尼克·博尔顿

这是您正在其上看到的IIS Web服务器(或其他服务),还是您自己的应用程序?
Imo 2010年

该应用程序实现了“ Cook Computing” XML-RPC客户端(来自Asp.Net,通过IIS运行),并且正在与Java XML-RPC服务器通信。
尼克·博尔顿

1
这是与客户端进行TCP对话的最后阶段。您的软件希望关闭()TCP会话,并向客户端发送LAST_ACK。然后,客户端应发回确认已收到LAST_ACK的确认。我同意pehrs的观点,即客户端(可能是防火墙)可能尚未确认它,或者数据包可能已丢失……这是两种最可能的情况。
Imo 2010年

1
它不会“向客户端发送LAST_ACK”。它已经发送了FIN,并且已经发送了ACK,并且正在发送FIN,并且正在等待ACK。这是关闭连接的最后状态。
user207421 2014年

2

LAST_ACK表示您的一端已从对等方收到FIN,已发送ACK,已发送FIN,并且正在等待对等方发出的最终ACK。此时,应用程序无法做进一步的事情:套接字已关闭。该应用程序甚至可能已退出。从这里开始,由TCP重新发送FIN,直到获得最终的ACK,否则超时。除了调查网络外,您作为管理员可以执行的工作不多。


0

我相信@lmo的正确说法是“关闭TCP连接之前的最后一个状态”,但是除此之外,根据我对Wikipedia页面的阅读,值得注意的是,这不是“ “主动关闭”机制(据我理解)是大多数行为良好的连接的结尾,而是“被动关闭”序列的一部分,“被动关闭”序列可能与发生问题的情况有关。

(FWIW,我是语言,而不是网络。对于网络人员的澄清,我很高兴。)


他这样说是不对的,被动关闭也没有什么坏处。这只是意味着同行先于您关闭。
user207421 '19
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.