TCP三次握手和四次揮手通俗理解


一、TCP報文格式

 

 

 

 

 

 

 

 

    在了解三次握手和四次揮手之前,先知道TCP報文內部包含了哪些東西。

  1. TCP報頭中的源端口號和目的端口號同IP數據報中的源IP與目的IP唯一確定一條TCP連接。TCP在發送數據前必須在彼此間建立連接,這里連接意思是:雙方需要內保存對方信息(例如:IP,Port…)

  2. 報文主要段的意思

    序號:表示發送的數據字節流,確保TCP傳輸有序,對每個字節編號

    確認序號:發送方期待接收的下一序列號,接收成功后的數據字節序列號加 1。只有ACK=1時才有效。

    ACK:確認序號的標志,ACK=1表示確認號有效,ACK=0表示報文不含確認序號信息

    SYN:連接請求序號標志,用於建立連接,SYN=1表示請求連接

    FIN:結束標志,用於釋放連接,為1表示關閉本方數據流

二、“三次握手”

2.1 三次握手過程

建立TCP連接時,需要客戶端和服務器共發送3個包。

  • 第一次:客戶端發送初始序號x和syn=1請求標志

  • 第二次:服務器發送請求標志syn,發送確認標志ACK,發送自己的序號seq=y,發送客戶端的確認序號ack=x+1

  • 第三次:客戶端發送ACK確認號,發送自己的序號seq=x+1,發送對方的確認號ack=y+1

 

 

 2.2 三次握手過程分析:

  • 第一次:客戶端發送請求到服務器,服務器知道客戶端發送,自己接收正常。SYN=1,seq=x
  • 第二次:服務器發給客戶端,客戶端知道自己發送、接收正常,服務器接收、發送正常。ACK=1,ack=x+1,SYN=1,seq=y
  • 第三次:客戶端發給服務器:服務器知道客戶端發送,接收正常,自己接收,發送也正常.seq=x+1,ACK=1,ack=y+1

上面分析過程可以看出,握手兩次達不到讓雙方都得出自己、對方的接收、發送能力都正常的結論的。

 

三、 “四次揮手”

 3.1 四次揮手過程

  • 第一次揮手:客戶端發出釋放FIN=1,自己序列號seq=u,進入FIN-WAIT-1狀態
  • 第二次揮手:服務器收到客戶端的后,發出ACK=1確認標志和客戶端的確認號ack=u+1,自己的序列號seq=v,進入CLOSE-WAIT狀態
  • 第三次揮手:客戶端收到服務器確認結果后,進入FIN-WAIT-2狀態。此時服務器發送釋放FIN=1信號,確認標志ACK=1,確認序號ack=u+1,自己序號seq=w,服務器進入LAST-ACK(最后確認態)
  • 第四次揮手:客戶端收到回復后,發送確認ACK=1,ack=w+1,自己的seq=u+1,客戶端進入TIME-WAIT(時間等待)。客戶端經過2個最長報文段壽命后,客戶端CLOSE;服務器收到確認后,立刻進入CLOSE狀態。

3.2四次揮手過程分析

  • 第一次:客戶端請求斷開FIN,seq=u
  • 第二次:服務器確認客戶端的斷開請求ACK,ack=u+1,seq=v
  • 第三次:服務器請求斷開FIN,seq=w,ACK,ack=u+1
  • 第四次:客戶端確認服務器的斷開ACK,ack=w+1,seq=u+1

四、其他問題

 4.1為什么三次握手和四次揮手?

  • 三次握手時,服務器同時把ACK和SYN放在一起發送到了客戶端那里
  • 四次揮手時,當收到對方的 FIN 報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方是否現在關閉發送數據通道,需要上層應用來決定,因此,己方 ACK 和 FIN 一般都會分開發送。

4.2為什么客戶端最后還要等待2MSL?

  • 客戶端需要保證最后一次發送的ACK報文到服務器,如果服務器未收到,可以請求客戶端重發,這樣客戶端還有時間再發,重啟2MSL計時。

 

補充

 

參考:https://blog.csdn.net/u010918487/article/details/87207531

 


免責聲明!

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



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