TCP連接狀態轉換

什麼是TCP

TCP是面向連接的可靠的數據包傳遞。針對不穩定的網絡層做完全彌補,藉助回執,丟包重傳。

TCP三次握手
  1. 主動建立請求連接(客戶端),發送SYN標誌位,攜帶序號n
  2. 被動接受連接請求端(服務器),接收SYN標誌位,回發ACK攜帶確認序號n+1。同時發送SYN標誌位M。
  3. 主動建立請求連接(客戶端),接收SYN標誌位,回發ACK確認序號M+1

標誌3次握手完成,對應應用層
客戶端:Dial()
服務器:Accept()

TCP數據通信

發送端發送數據同時,攜帶序號。接收端,收到數據後需要給發送端發送ACK應答以及確認信號
確保TCP通信模式下,數據可靠的傳輸。

四次揮手

主動斷開連接請求端(客戶端),發送FIN標誌位,攜帶序號。
被動斷開連接請求端(服務器),接收FIN標誌位,回發ACK應答。攜帶確認序號。
半關閉(半關閉後,客戶端不發數據,發tcp包頭)
主動斷開連接請求端(服務器),發送FIN標誌位,攜帶序號。
主動斷開連接請求端(客戶端),接收FIN標誌位,回發ACK應答。攜帶確認序號。
關閉

TCP狀態轉換圖:

主動連接端:
CLOSED->發送SYN->SYN_SENT->接收ACK、SYN,發送ACK->ESTABLISHED->數據通信
主動關閉端:
ESTABLISHED->發送FIN->FIN_WAIT_1->接收ACK->FIN_WAIT_2(半關閉)->接收FIN,發送ACK
->TIME_WAIT->等待2MSL時長->CLOSED

2MSL:爲了確保tcp通信過程中的最後一個ACK能被對端收到,等待的一個時長(約40s在ubuntu,不同系統不一樣)

FIN_WAIT_1、FIN_WAIT_2、 TIME_WAIT、 2MSL 只出現在主動端

被動連接端(服務器):
CLOSED->LISTEN->接收SYN,發送ACK,SYN->SYN_RCVD->接收ACK->ESTABLISHED->數據通信
被動關閉端(服務器):
ESTABLISHED->接收FIN,發送ACK->CLOSED_WAIT(對應主動端的FIN_WAIT_2)->發送FIN->
LAST_ACK->接收ACK->CLOSED
在這裏插入圖片描述

小結

tcp:三次握手、建立鏈接、4次揮手。

三次握手:syn , ack syn, ack

4次揮手:fin, ack, fin, ack

主動方:想關閉fin_wait1,發fin收ack fin_wait2,收fin發ack time_wait,2msl,關閉

fin_wait2是半關閉狀態,只能收不能發數據

被動方:收fin發ack close_wait(對應fin_wait2) 發送

tcp是面向鏈接,使用的是流式傳輸,保證數據準確性,保證數據的順序,通信成本相對較高

udp是面向無連接,使用數據包傳輸,通信成本相對較低。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章