1. 程式人生 > 其它 >wireshark抓包分析

wireshark抓包分析

wireshark抓包分析

TCP協議概述

面向連線的,可靠的,基於位元組流的傳輸層通訊協議。

TCP連線的3個階段

  • 3次握手
  • 資料傳輸
  • 4次揮手

基本概念

  • Seq(Sequence Number),標識在某個連線上傳輸的位元組數;注意,syn和fin報文會佔用一個序號。
  • Ack ,標識在某個連線上接收到的位元組數;注意,ack的值等於傳送方下一個報文的seq的值。

wireshark相關知識

  1. Wireshark的資料包詳情視窗,如果是用中括號[]括起來的,表示註釋,在資料包中不佔位元組。
  2. 在二進位制視窗中,如“DD 3D”,表示兩個位元組,一個位元組8位。
  3. TCP資料包中,seq表示這個包的序號,注意,這個序號不是按1遞增的,而是按tcp包內資料位元組長度加上
    ,如包內資料是21位元組,而當前IP1發到IP2的包的seq是10的話,那下個IP1發到IP2的包的seq就是10+21=31。
  4. 注意我們分析tcp包時,要以一個會話做為一個完整物件,即通訊只發生在兩個IP之間,兩個固定的埠之間,如果埠變化了,那連結就不是同一條了,不同的連結之間的seq是沒有關聯的。
  5. tcp包分為包頭的內容,tcp的包頭長度是32位元組,整個資料包的包頭是66位元組(不一定的),如果整個資料包是66位元組的話,那內容長度就是0。
  6. 每個tcp包都帶有win、ack,這些是告訴對方,我還可以接收資料的滑動視窗是多少,如果A發到B的包的win為0,就是A告訴B說我現在滑動視窗為0了,飽了,你不要再發給我了,就說明A端環境有壓力(如頻寬滿了等)。
  7. ack可以理解為應答。A發給B的ack是告訴B,我已收到你發的資料包,收到ack號這裡了,你下次要發seq為ack號的給我。
  8. 在網路不堵即滑動視窗一點都不堵的情況下,第一個包的ack號就是第二個包的seq號,如果堵了,由於是滑動視窗快取處理佇列,所以這個值會錯開
  9. 如果A發到B連續幾個包,seq號不變,ack號一直在變大,說明A一直在收B的資料,一直在給B應答。
  10. 如果A發到B連續幾個包,seq號一直變大,ack號一直沒變,說明A一直在向B發資料,不用給B應答,而是在等B的應答。
  11. 可以接收多個數據包後,一次性給一個應答,不用每個資料包一一對應給應答。
  12. 發了一個包,很久沒有收到應答後,會重發包,在Wireshark抓包工具提示“[TCP Retransmission]”,在資料包詳情視窗點開可以看到是對哪個資料包的重傳。
  13. [TCP Dup ACK ?#?],表示應答包的重傳。
  14. 如果出現這個錯誤“[TCP Previous segment not captured]”,說明亂序了,前一個包沒有收到,收到後面的包了,這時也會重傳包。

注意

  1. wireshark 中,我們看第一個包的seq和ack都是0,這是wireshark為了方便閱讀將序號重0開始計算(沒有改變實際值),我們看到有欄位裡有兩個帶RAW的欄位,它們才是序號真實的值。
  2. wireshark 中,四次揮手一般表現為3個報文,[FIN,ACK] - [FIN,ACK] - [ACK],因為第二個報文結合了FIN和ACK兩個步驟。