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選項說明報文的最大段長度。