使用wireshark學習TCP

TCP標誌位:

在TCP傳輸中,標誌位用於表示特定的鏈接狀態或提供額外信息。每一個標誌位佔用1比特。經常使用的TCP標誌位包含如下幾種:html

  • SYN服務器

    Synchronous,TCP三次握手創建鏈接的第一步,主動創建鏈接的一方發送SYN到被動創建鏈接一方。在下圖中能夠看到,發送方的SYN被置爲1網絡

 

 

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

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

  • FIN Finish,表示發送方將再也不發送數據,一般用於表示發送方發送的最後一個包post

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

  • URG Urgent,該標誌爲用於通知接收方優先處理當前包動畫

除此以外還有ECE、ECE、NS等。spa

Sequence number && Acknowledgment number

創建鏈接時,發送方的Seq值是隨機的,wireshark工具默認會使用相對值,能夠在編輯->首選項->協議一欄選擇TCP,進行開啓/關閉相對seq值:.net

 

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
報文段、數據報、數據包和幀

相關文章
相關標籤/搜索