作为 netstat 中的状态值,LAST_ACK 是什么意思?

作为 netstat 中的状态值,LAST_ACK 是什么意思?

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

答案1

last_ack 状态(如果我没记错的话,我的 TCP 堆栈)是当您收到邻居发送的 FIN 消息以关闭连接时的状态,但您仍需要刷新并关闭连接。您自己发送最后的 FIN 并等待 ACK。

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

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

答案2

LAST_ACK 表示您的终端已收到对端的 FIN,发送了 ACK,发送了 FIN,并且正在等待对端的最终 ACK。此时应用程序无法再执行任何操作:套接字已关闭。应用程序甚至可能已退出。从这里开始,由 TCP 重新发送 FIN,直到收到最终 ACK 或超时。作为管理员,您除了调查网络之外无能为力。

答案3

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

答案4

我认为@lmo 说它是“关闭 TCP 连接之前的最后状态”是正确的,但除此之外,根据我对维基百科页面的阅读,值得注意的是,这不是“主动关闭”机制的一部分(据我理解)它是大多数表现良好的连接的结束,而是“被动关闭”序列的一部分,这可能与坏事发生有关。

(请注意,我是研究语言的,不是研究网络的。我很乐意听取网络人员的澄清。)

相关内容