理解TCP中的三次握手

TCP三次握手

TCP(Transmission Control Protocol) 傳輸控制協議

TCP是端到端的傳輸控制協議,提供可靠的連接服務,採用三次握手方式來建立連接。

要理解三次握手流程,需要先了解TCP協議格式,因爲在三次握手過程中,發送的都是沒有數據,只有報頭信息的TCP報文,通過報頭中某些字段值的不同含義從而實現連接的建立。TCP報文格式如下:

       clip_p_w_picpath001

上述的TCP報文格式中每個字段意義已經描述得很清楚,現針對三次握手中要用到的字段再做簡單描述,

TCP報文格式中有6位的tcp標誌位,每個標誌位對應着TCP連接的不同狀態,完整的6個標誌位組成了TCP連接的完整狀態。

具體每個標誌位的含義如下:

    1. URG (urgent 緊急 =1時表示Urgent Pointer字段值有效)
    2. ACK (acknowledgement 確認 =1表示Acknowledgement number字段值有效)
    3. PSH (push =1時表示傳送數據)
    4. RST (reset =1時表示連接需要復位)
    5. SYN( synchronous =1時表示建立連接,序號同步)
    6. FIN (finish 結束 =1時表示終止連接)

 

三次連接具體過程描述:

          clip_p_w_picpath002

第一次握手:Client端發送標誌位SYN=1,隨機產生Seq number=8000的SYN包到Server,此時Client進入SYN_SEND狀態。Server根據SYN=1知道Client要求建立TCP連接

第二次握手:Server收到SYN請求後如果允許建立連接,就向Client發送Ack number=8001 (Client的Seq Number+1),隨機產生Seq Number=15000,狀態標誌位,SYN=1,ACK=1的SYN+ACK包,此時Server進入SYN_RECV狀態。

第三次握手:Client收到SYN+ACK包後檢查Ack number是否正確,是否等於第一次握手中發送的Seq number+1,同時檢查標誌位ACK是否爲1,若兩項檢查都正確,Client會再次發送Ack number=15001(Server的Seq Number+1),ACK=1的ACK包,Server收到後檢查Ack number值與ACK=1無誤後則連接建立成功, 此時Client和Server均進入ESTABLISHED狀態。

完成三次握手後Client與Server開始傳送數據。

 

三次握手過程中報頭信息的變化

第一次握手

     SYN包沒有攜帶任何數據,使用了報頭中SYN標誌位和Seq number字段,其中SYN=1標誌請求建立一個連接

第二次握手

     SYN+ACK包也沒有攜帶任何數據,使用了報頭中的SYN和ACK標誌位,以及Seq Number 和 Ack Number字段,

     其中SYN=1標誌Server端同步初始順序號,以便Server向Client發送信息。

     ACK=1標誌已確認收到SYN包,同時給出期望從Client端收到的下一個序號。

     需要注意的是在第二次握手中還定義了動態窗口大小。

第三次握手

     ACK包沒有攜帶任何數據,使用標誌位ACK=1以及Seq Number和Ack Number字段。

 

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