1. 程式人生 > >Wireshark抓包-TCP協議包

Wireshark抓包-TCP協議包

TCP首部格式

  

  源埠號、目的埠號:用於尋找發端和收端應用程序。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連線,在網路程式設計中,一般一個IP地址和一個埠號組合稱為一個套接字(socket)。 
  序號:用來標識從TCP發端向TCP收端傳送的資料位元組流,它表示在這個報文段中的的第一個資料位元組。在tcp中tcp用序號對每個位元組進行計數
  確認序號:包含傳送確認的一端所期望收到的下一個序號。確認序號=序號+資料位元組數+ 1
  首部長度:用於記錄tcp資料報首部的長度,一般為20位元組,實際值為首部長度除以4。 
  URG: 緊急指標( urgent pointer)有效。 
  ACK: 確認序號有效。 
  PSH: 接收方應該儘快將這個報文段交給應用層。 
  RST: 重建連線。 
  SYN: 同步序號用來發起一個連線。 
  FIN: 發端完成傳送任務。 
  視窗大小:用於流量控制。 
  檢驗和:檢驗和覆蓋了整個的 TCP報文段: TCP首部和TCP資料,與udp相似需要計算偽首部。

Wireshark抓包分析TCP結構

  利用wireshark抓取一個tcp資料包,檢視其具體資料結構和實際的資料:

這裡寫圖片描述

這裡寫圖片描述

Wireshark抓包分析TCP3次握手

下面通過利用http應用層連線一個網路,實現tcp的3次握手和簡單的資料交換過程,下面通過抓包來實際觀察這個過程。
  這裡寫圖片描述

  從第一行的tcp往下看,前面3個tcp包為3次握手的過程,接著http包說明成功建立連線,主機向伺服器傳送一個http應用請求,伺服器收到請求後,返回一個tcp確認幀,接著傳送一個http應答給主機,主機收到伺服器的http應答資料後,又傳送一個tcp確認幀,確認收到了資料。這樣圖中的前7個包實現了主機和伺服器建立連線,並實現一次簡單的資料請求應答過程。即下圖所示的互動按鍵回顯過程:

這裡寫圖片描述

接下來是按照順序的7個數據幀的資料結構。資料幀順序分別為: 
  1. 主機發起一個tcp連線請求(tcp), 
  2. 伺服器響應連線請求(tcp), 
  3. 主機返回ACK完成3次握手成功建立連線(tcp), 
  4. 主機發送一個http網頁請求(http), 
  5. 伺服器收到請求返回一個ACK幀(tcp), 
  6. 伺服器根據請求傳送資料到主機(http), 
  7. 主機收到伺服器資料返回一個ACK幀(tcp),具體幀細節見下圖:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

下面通過wireshark抓包瞭解具體的釋放連線過程,通過斷開一個連線,抓取到4個TCP幀,幀順序依次為: 

  1. 主動關閉放傳送一個FIN幀給被動方 
  2. 被動方收到關閉資訊返回一個確認ACK幀 
  3. 被動方傳送一個FIN幀給主動方 
  4. 主動方收到被動方的FIN關閉資訊返回一個ACK幀,連線釋放

下面為按照順序的幀資料結構詳細資訊:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

TCP的最大報文段長度
  最大報文段長度(MSS)表示TCP傳往另一端的最大塊資料的長度。當一個連線建立時,連線的雙方都要通告各自的MSS。一般來說,MSS越大越好,因為報文段越大允許每個報文段傳送的資料就越多,相對IP和TCP首部有更高的網路利用率。 
  MSS選項只能出現在SYN報文段中,所以只能在SYN=1的幀中才會有MSS選項說明報文的最大段長度。