TCP建立連接和釋放的過程,及TCP狀態變遷圖


一、TCP報文格式

下面是TCP報文格式圖:

重要字段介紹:

(1)序號:Seq序號,占32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。

(2)確認序號:Ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,Ack=Seq+1。

(3)標志位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:

(A)URG:緊急指針(urgent pointer)有效。
(B)ACK:確認序號有效。
(C)PSH:接收方應該盡快將這個報文交給應用層。
(D)RST:重置連接。
(E)SYN:發起一個新連接。
(F)FIN:釋放一個連接。

二、TCP三次握手

  所謂三次握手(Three-Way Handshake)即建立TCP連接,就是指建立一個TCP連接時,需要客戶端和服務端總共發送3個包以確認連接的建立。在socket編程中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示:

1) 請求端(通常稱為客戶)發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號。這個SYN段為報文段J。
2) 服務器發回包含服務器的初始序號的SYN報文段(報文段2)作為應答。同時,將確認序號設置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個S Y N將占用一個序號。
3) 客戶必須將確認序號設置為服務器的ISN加1以對服務器的SYN報文段進行確認(報文段3)。

三、TCP四次揮手

  四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程如下圖所示:

四、TCP 狀態變遷圖

  TCP的完整狀態變遷圖如下:

重點說明TIME WAIT狀態:

TIME WAIT狀態也稱為2 MSL等待狀態。每個具體TCP實現必須選擇一個報文段最大生存時間MSL(Maximum Segment Lifetime)。它是任何報文段被丟棄前在網絡內的最長時間。我們知道這個時間是有限的,因為TCP報文段以IP數據報在網絡內傳輸,而IP數據報則有限制其生存時間的TTL字段。

為什么需要TIME WAIT 狀態,原因有二:

1、保證TCP協議的全雙工連接能夠可靠關閉(防止最后FIN的ACK在網絡中丟失,如果最后發送FIN的那段,在規定時間內沒有收到FIN的ACK,就會重發FIN,由於有2MSL的等待時間,那么另一端就可以再次收到FIN,再次發送一個ACK)
2、保證這次連接的迷途數據段從網絡中消失(防止立即建立這個連接的替身,如果沒有2 MSL等待迷途數據消失,那么有可能上一個連接的數據被當作當前連接的數據)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM