TCP學習(3)--TCP釋放連接的過程(四次揮手)

一.TCP釋放連接的過程(四次揮手)

   TCP釋放連接的過程如下圖所示。


   現在假設客戶端A和服務器端B都處於數據傳送狀態。TCP連接斷開的步驟如下:
1.客戶端A發送FIN=1的連接釋放報文給服務器B,並進入FIN-WAIT1狀態;
2.服務器B收到A發送的連接釋放報文段之後,發出確認報文段,並進入關閉等待狀態;客戶端A在收到確認狀態之後,進入FIN-WAIT2狀態,此時,客戶端A不再向服務器端發送數據,但是,服務器端B仍然可以向A發送數據;
3.在服務器B發送完數據之後,發送一遍FIN=1的連接釋放報文段,表明自己發送數據完畢,準備斷開連接,並進入LAST-ACK狀態;
4.客戶端A在收到服務器端的連接釋放報文段,給服務器端發送確認報文段,並進入TIME-WAIT狀態,在等待了2MSL時間後進入CLOSED狀態;而服務器端B在收到客戶端發送的應答報文段之後,就進入CLOSED狀態。
   時間MSL叫做最長報文段壽命,建議時間爲2分鐘。
  上述的TCP釋放連接的過程是四次握手,但是也可以看做是兩個二次握手



二.爲什麼客戶端A在TIME-WAIT狀態之後必須等待2MSL的時間呢?

    1.爲了保證A發送的最後一個ACK報文段能夠到達B。這個ACK報文段有可能丟失,因而使處在LAST-ACK狀態的B收不到對已發送的FIN+ACK報文段的確認。B會超時重傳這個FIN-ACK報文段,而A就能在2MSL時間內收到這個重傳的FIN+ACK報文段。接着A重傳一次確認,重新啓動2MSL計時器。最後,A和B都正常進入到CLOSED狀態。如果A在TIME-WAIT狀態不等待一段時間,而是在發送完ACK報文段後立即釋放連接,那麼就無法收到B重傳的FIN+ACK報文段,因而也不會再發送一次確認報文段。這樣,B就無法按照正常步驟進入CLOSED狀態。
    2.爲了防止已失效的連接請求報文段出現在本連接中。A在發送完最後一個ACK報文段後,再經過時間2MSL,就可以使得本連接持續時間內說產生的所有報文段都從網絡中消失。這樣就可以使下一個新的連接中不會出現這種舊的連接請求報文段。




三.保活計時器

    除了時間等待計時器外,TCP還設有一個保活計時器。服務器每收到一次客戶的數據,就重新設置保活計時器,時間的設置通常是兩個小時。若兩個小時沒有收到客戶的數據,服務器就發送一個探測報文段,以後則每隔75分鐘發送一次,若一連發送10個探測報文段後仍無客戶的響應,服務器就認爲客戶端出了故障,接着就關閉這個連接。保活計時器是爲了防止連接建立之後,客戶端突然出現故障而沒有出現響應,導致服務器一直出了連接狀態而設置的。








參考文獻
謝希仁, 計算機網絡(第五版): 電子工業出版社, 2007.



版權所有,歡迎轉載,轉載請註明出處,謝謝微笑



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