【網絡】TIME_WAIT狀態原理

通信雙方建立TCP連接後,主動關閉連接的一方就會進入TIME_WAIT狀態。

客戶端主動關閉連接時,會發送最後一個ack後,然後會進入TIME_WAIT狀態,再停留2個MSL時間(後有MSL的解釋),進入CLOSED狀態。

下圖是以客戶端主動關閉連接爲例,說明這一過程的。


TIME_WAIT狀態存在的理由

----------------------------

TCP/IP協議就是這樣設計的,是不可避免的。主要有兩個原因:

1)可靠地實現TCP全雙工連接的終止

TCP協議在關閉連接的四次握手過程中,最終的ACK是由主動關閉連接的一端(後面統稱A端)發出的,如果這個ACK丟失,對方(後面統稱B端)將重發出最終的FIN,因此A端必須維護狀態信息(TIME_WAIT)允許它重發最終的ACK。如果A端不維持TIME_WAIT狀態,而是處於CLOSED 狀態,那麼A端將響應RST分節,B端收到後將此分節解釋成一個錯誤(在java中會拋出connection reset的SocketException)。

因而,要實現TCP全雙工連接的正常終止,必須處理終止過程中四個分節任何一個分節的丟失情況,主動關閉連接的A端必須維持TIME_WAIT狀態 。

 

2)允許老的重複分節在網絡中消逝 

TCP分節可能由於路由器異常而“迷途”,在迷途期間,TCP發送端可能因確認超時而重發這個分節,迷途的分節在路由器修復後也會被送到最終目的地,這個遲到的迷途分節到達時可能會引起問題。在關閉“前一個連接”之後,馬上又重新建立起一個相同的IP和端口之間的“新連接”,“前一個連接”的迷途重複分組在“前一個連接”終止後到達,而被“新連接”收到了。爲了避免這個情況,TCP協議不允許處於TIME_WAIT狀態的連接啓動一個新的可用連接,因爲TIME_WAIT狀態持續2MSL,就可以保證當成功建立一個新TCP連接的時候,來自舊連接重複分組已經在網絡中消逝。


MSL時間

----------------------------

MSL就是maximum segment lifetime(最大分節生命期),這是一個IP數據包能在互聯網上生存的最長時間,超過這個時間IP數據包將在網絡中消失 。MSL在RFC 1122上建議是2分鐘,而源自berkeley的TCP實現傳統上使用30秒。

 

TIME_WAIT狀態維持時間

----------------------------

TIME_WAIT狀態維持時間是兩個MSL時間長度,也就是在1-4分鐘。Windows操作系統就是4分鐘。



另外引一篇博客:

http://www.cnblogs.com/sunxucool/p/3449068.html

有具體場景,寫的比較深入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章