当我使用以下命令时
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
意思是,我已经关闭了应用程序内的连接,并且正在等待一段时间以确保客户端已成功关闭连接。如果我错了,请纠正我。
我的问题与保持活动请求有关。我预计看到的绝大多数流量应该是保持活动的。
- 保活连接什么时候进入这个
TIME_WAIT
阶段? - 保持连接可以从
TIME_WAIT
到 吗ESTABLISHED
?如果可以,条件是什么?
答案1
无论任一方是否启用或禁用保持活动机制:连接永远不会从 TIME_WAIT 变为 ESTABLISHED。TIME_WAIT 是最近关闭的连接的套接字对的状态,该连接暂时不使用。
当本地端成功发起连接断开(“主动关闭”)并收到来自远端也想要关闭连接的信号后,连接将进入 TIME_WAIT 状态。然后,操作系统将保留套接字对,等待两个麦斯劳s,然后再将其释放以用于另一个新连接。这样可以确保旧连接中的任何段都不会干扰任何新创建的连接,而新创建的连接恰好会重用旧连接的套接字对。
这真的有效吗?为什么只要主动关闭端的套接字对进入 TIME_WAIT 就足够了?因为一端的套接字对重用意味着另一端的套接字对重用。如果主动关闭端恰好在两个 MSL 内崩溃并重新启动怎么办?那么它将进入安静的时光,在此期间它根本没有建立任何连接。