保持活动、ESTABLISHED 和 TIME_WAIT 语义

保持活动、ESTABLISHED 和 TIME_WAIT 语义

当我使用以下命令时

netstat -ant | grep :9111 | awk '{print $6}' | sort | uniq -c | sort -n

我得到以下

   1 LAST_ACK
   1 LISTEN
   2 SYN_RECV
   7 FIN_WAIT1
  51 ESTABLISHED
  71 FIN_WAIT2
8779 TIME_WAIT

我相信我理解的TIME_WAIT意思是,我已经关闭了应用程序内的连接,并且正在等待一段时间以确保客户端已成功关闭连接。如果我错了,请纠正我。

我的问题与保持活动请求有关。我预计看到的绝大多数流量应该是保持活动的。

  1. 保活连接什么时候进入这个TIME_WAIT阶段?
  2. 保持连接可以从TIME_WAIT到 吗ESTABLISHED?如果可以,条件是什么?

答案1

无论任一方是否启用或禁用保持活动机制:连接永远不会从 TIME_WAIT 变为 ESTABLISHED。TIME_WAIT 是最近关闭的连接的套接字对的状态,该连接暂时不使用。

当本地端成功发起连接断开(“主动关闭”)并收到来自远端也想要关闭连接的信号后,连接将进入 TIME_WAIT 状态。然后,操作系统将保留套接字对,等待两个麦斯劳s,然后再将其释放以用于另一个新连接。这样可以确保旧连接中的任何段都不会干扰任何新创建的连接,而新创建的连接恰好会重用旧连接的套接字对。

这真的有效吗?为什么只要主动关闭端的套接字对进入 TIME_WAIT 就足够了?因为一端的套接字对重用意味着另一端的套接字对重用。如果主动关闭端恰好在两个 MSL 内崩溃并重新启动怎么办?那么它将进入安静的时光,在此期间它根本没有建立任何连接。

TCP 状态机

相关内容