TIME_WAIT狀態存在的原因 ---- 《Linux高性能服務器編程》讀書筆記

客戶端在接受到服務器的結束報文(FIN)後,不會直接進入CLOSE狀態,而是轉移到TIME_WAIT狀態。這個狀態客戶端連接要等待一段長爲2MSL時間,才能完全關閉。MSL是TCP報文段在網絡中的最大生存時間,RFC文檔建議2min。

TIME_WAIT狀態存在的原因有2點:

1)可靠地終止TCP連接。

2)保證讓遲來的TCP報文段有足夠的時間被識別並丟棄。

第一點很好理解,2端關閉過程都有發起(FIN)和收到應答(ACK)。

對於第二點,反過來思考,如果不存在TIME_WAIT狀態,應用程序能夠立即建立一個和剛關閉的連接相似的連接(四元組相同),新連接可以稱爲原連接的化身。化身連接有可能收到屬於原連接的遲到報文。顯然,這些數據屬於髒數據,不應該收到。

堅持2MSL時間TIME_WAIT狀態能夠確保網絡上兩個傳輸方向上尚未被接收到的、延遲的TCP報文完都消失(被路由器丟失)。

發佈了20 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章