TIME_WAIT的意義

上圖爲TCP連接釋放過程,在服務器A收到服務器B發送的FIN+ACK後,會向B發送ACK,進入到TIME_WAIT階段,等待2MSL(MSL:Max Segment Lifetime,最長報文段壽命,報文段在網絡中能夠存活的最長時間)。

TIME_WAIT的意義

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

爲了保證A發送的最後一個ACK報文段能夠到達B。

A給B發送的ACK可能會丟失,B收不到A發送的確認,B會超時重傳FIN+ACK報文段,此時A處於2MSL時間內,就可以收到B重傳的FIN+ACK報文段,接着A重傳一次確認,重啓2MSL計時器。最後,A和B都能夠正常進入到CLOSED狀態。

如果A在發完ACK後直接立即釋放連接,而不等待一段時間,就無法收到B重傳的FIN+ACK報文段,也就不會再次發送確認報文段,這樣,B就無法按照正常步驟進入CLOSED狀態。

(2)允許舊的報文段在網絡中消逝  

A發送確認後,該確認報文段可能因爲路由器異常在網絡中發生“迷途”,並沒有到達B,該確認報文段可以稱爲舊的報文段。A在超時後進行重傳, 發送新的報文段,B在收到新的報文段後進入CLOSED狀態。在這之後,發生迷途的舊報文段可能到達了B,通常情況下,該報文段會被丟棄,不會造成任何的影響。但是如果兩個相同主機A和B之間又建立了一個具有相同端口號的新連接,那麼舊的報文段可能會被看成是新連接的報文段,如果舊的報文段中數據的任何序列號恰恰在新連接的當前接收窗口中,數據就會被重新接收,對連接造成破壞。爲了避免這種情況,TCP不允許處於TIME_WAIT狀態的連接啓動一個新的連接,因爲TIME_WAIT狀態持續2MSL,就可以保證當再次成功建立一個TCP連接的時,來自之前連接的舊的報文段已經在網絡中消逝,不會再出現在新的連接中。

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