使用wireshark學習TCP


TCP標志位:

在TCP傳輸中,標志位用於表示特定的連接狀態或提供額外信息。每個標志位占用1比特。常用的TCP標志位包含以下幾種:

  • SYN

    Synchronous,TCP三次握手建立連接的第一步,主動建立連接的一方發送SYN到被動建立連接一方。在下圖中可以看到,發送方的SYN被置為1

 

 

  • ACK Acknowledgement,用於表示成功收到一個包

  • PUSH Push,告訴接收方處理接受到的數據包而不是緩沖它們

  • FIN Finish,表示發送方將不再發送數據,通常用於表示發送方發送的最后一個包

  • RST Reset,當數據包被發送到預期之外的特定主機時,從接收方發送到發送方

  • URG Urgent,該標志為用於通知接收方優先處理當前包

除此之外還有ECE、ECE、NS等。

Sequence number && Acknowledgment number

建立連接時,發送方的Seq值是隨機的,wireshark工具默認會使用相對值,可以在編輯->首選項->協議一欄選擇TCP,進行開啟/關閉相對seq值:

 

Seq的值等於發送方的Ack,對於Ack的值,分以下三種情況:

  • 三次握手建立連接期間,Ack的值是發送方的Seq值+1;

  • 連接建立后,Ack的值等於發送方的Len值加上Seq值;


     

     

  • 斷開連接時,Ack的值等於發送方的Seq值+1;

 

 

四次握手斷開連接

 

 

以上,圖片來自跟着動畫來學習TCP三次握手和四次揮手

但使用wireshark捕獲到的斷開連接過程和上面略有差異,只有三次通訊,將被動關閉一方的兩次請求合並為一次:

 

 

2MSL

TCP協議規定,從主動斷開連接一方進入TIME_WAIT狀態到真正關閉TCP連接釋放Socket資源,最大需要等待2MSL(Max Segment Lifetime),即4分鍾。這樣可以確保新的連接不會收到上個連接遺留的數據包。但對於不同的實現,這個時長略有差異。

TCP/IP模型

TCP位於傳輸層,提供字節流服務(Byte Streaam Service),即將大塊數據分割為以報文段(segment)為單位的數據包進行管理。在網絡通訊中,數據包(package)是最小的傳輸單位,網絡層負責處理數據包。

 

 

 

以上,圖片來自報文段、數據報、數據包和幀一文,

小結

因為想要看Redis客戶端與服務器通訊的細節,而Redis通訊協議基於TCP,所以就有了這篇筆記。本文對於TCP做了簡要介紹,能夠滿足了解Redis通訊的需要。至於更多的TCP知識,若以后需要用到再行補充。

推薦閱讀

跟着動畫來學習TCP三次握手和四次揮手
理解TCP序列號(Sequence Number)和確認號(Acknowledgment Number)
TCP的三次握手、四次揮手--非常詳細講解
TCP Flags
報文段、數據報、數據包和幀


免責聲明!

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



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