1. 程式人生 > >關於四次揮手的TIME_WAIT狀態

關於四次揮手的TIME_WAIT狀態

如圖能夠很好的說明這個問題:

       當客戶端最後一次傳送訊息時並沒有直接進入close狀態而是進入TIME_WAIT狀態,這是因為TCP是面向連線的協議每一次傳送都需要確認對方是否收到訊息。客戶端最後一次傳送訊息時可能會由於網路等其他原因導致伺服器收不到訊息,伺服器就會選擇從新給客戶端傳送一個FIN的包,如果客戶端處於關閉狀態將永遠也收不到伺服器發給它的訊息了。至於這個時間要等多久才能確認對方收到了訊息呢

        報文在網路中有一個最大生存時間MSL超過這個時間就會被丟棄並通知源主機。TIME_WAIT 要等待 2MSL 才會進入 CLOSED 狀態。ACK 包到達伺服器需要 MSL 時間,伺服器重傳 FIN 包也需要 MSL 時間,2MSL 是資料包往返的最大時間,如果 2MSL 後還未收到伺服器重傳的 FIN 包,就說明伺服器已經收到了 ACK 包