TIME_WAIT簡介

在TCP斷開的過程中會有四個狀態變化過程,如下圖所示:

在連接撤銷過程中,有如下過程:                                          

1.HOST1上的應用程序關閉己方的連接導致TCP發送一個FIN消息給HOST2。

2.HOST2發送一個確認消息給HOST1,並且HOST2把FIN作爲EOF遞交給HOST2上的應用程序。

3.一段時間過後,HOST2上的應用程序關閉它那邊的連接,引發一個FIN消息給HOST1。

4.HOST1給HOST2發送一個確認消息,然後HOST2關閉連接並釋放資源,然而,HOST1卻沒有關閉連接,而是進入了TIME_WAIT狀態,併爲兩個最大段生存時間(2MSL)保留在此狀態.

 

爲什麼需要TIME_WAIT?

1.因爲在第四步的時候,HOST1發送的ACK可能丟失並導致HOST2重新發送FIN消息,TIME_WAIT維護連接狀態.

  如果執行主動關閉的一方HOST1 不進入到TIME_WAIT狀態就關閉連接那會發生什麼呢?當重傳的FIN消息到達時,因爲TCP已經不再有連接的信息了,所以就用RST(重新啓動)消息應答,導致HOST2進入錯誤的狀態而不是有序終止狀態,如果發送最後ACK消息的一方處於TIME_WAIT狀態並仍然記錄着連接的信息,它就可以正確的響應對等方HOST2的FIN消息了.

2.TIME_WAIT爲連接中”離羣的段”提供從網絡中消失的時間.

  考慮一下,如果延遲或者重傳段在連接關閉後到達時會發生什麼呢?通常情況下,因爲TCP僅僅丟棄該數據並響應RST消息,所以這不會造成任何問題。當RST消息到達發出延時段的主機時,因爲該主機也沒有記錄連接的任何信息,所以它也丟棄該段。然而,如果兩個相同主機之間又建立了一個具有相同端口號的新連接,那麼離羣的段就可能被看成是新連接的,如果離羣的段中數據的任何序列號恰恰在新連接的當前接收窗口中,數據就會被重新接收,其結果就是破壞新連接

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