wireshark抓包分析
阿新 • • 發佈:2022-05-23
wireshark抓包分析
TCP協議概述
面向連線的,可靠的,基於位元組流的傳輸層通訊協議。
TCP連線的3個階段
- 3次握手
- 資料傳輸
- 4次揮手
基本概念
- Seq(Sequence Number),標識在某個連線上傳輸的位元組數;注意,syn和fin報文會佔用一個序號。
- Ack ,標識在某個連線上接收到的位元組數;注意,ack的值等於傳送方下一個報文的seq的值。
wireshark相關知識
- Wireshark的資料包詳情視窗,如果是用中括號[]括起來的,表示註釋,在資料包中不佔位元組。
- 在二進位制視窗中,如“DD 3D”,表示兩個位元組,一個位元組8位。
- TCP資料包中,seq表示這個包的序號,注意,這個序號不是按1遞增的,而是按tcp包內資料位元組長度加上
- 注意我們分析tcp包時,要以一個會話做為一個完整物件,即通訊只發生在兩個IP之間,兩個固定的埠之間,如果埠變化了,那連結就不是同一條了,不同的連結之間的seq是沒有關聯的。
- tcp包分為包頭的內容,tcp的包頭長度是32位元組,整個資料包的包頭是66位元組(不一定的),如果整個資料包是66位元組的話,那內容長度就是0。
- 每個tcp包都帶有win、ack,這些是告訴對方,我還可以接收資料的滑動視窗是多少,如果A發到B的包的win為0,就是A告訴B說我現在滑動視窗為0了,飽了,你不要再發給我了,就說明A端環境有壓力(如頻寬滿了等)。
- ack可以理解為應答。A發給B的ack是告訴B,我已收到你發的資料包,收到ack號這裡了,你下次要發seq為ack號的給我。
- 在網路不堵即滑動視窗一點都不堵的情況下,第一個包的ack號就是第二個包的seq號,如果堵了,由於是滑動視窗快取處理佇列,所以這個值會錯開
- 如果A發到B連續幾個包,seq號不變,ack號一直在變大,說明A一直在收B的資料,一直在給B應答。
- 如果A發到B連續幾個包,seq號一直變大,ack號一直沒變,說明A一直在向B發資料,不用給B應答,而是在等B的應答。
- 可以接收多個數據包後,一次性給一個應答,不用每個資料包一一對應給應答。
- 發了一個包,很久沒有收到應答後,會重發包,在Wireshark抓包工具提示“[TCP Retransmission]”,在資料包詳情視窗點開可以看到是對哪個資料包的重傳。
-
[TCP Dup ACK ?#?]
,表示應答包的重傳。 - 如果出現這個錯誤“[TCP Previous segment not captured]”,說明亂序了,前一個包沒有收到,收到後面的包了,這時也會重傳包。
注意
- 在 wireshark 中,我們看第一個包的seq和ack都是0,這是wireshark為了方便閱讀將序號重0開始計算(沒有改變實際值),我們看到有欄位裡有兩個帶RAW的欄位,它們才是序號真實的值。
- 在 wireshark 中,四次揮手一般表現為3個報文,
[FIN,ACK] - [FIN,ACK] - [ACK]
,因為第二個報文結合了FIN和ACK兩個步驟。