1. 程式人生 > >Wireshark抓包分析TCP.IP.UDP.ICMP報文格式

Wireshark抓包分析TCP.IP.UDP.ICMP報文格式

TCP 報文格式分析:

TCP 報文段的報頭有 10 個必需的欄位和 1 個可選欄位。報頭至少為 20 位元組。

1)源埠(16位):標識傳送報文的計算機埠或程序。一個 TCP 報文段必須包括源埠號,使目的主機知道應該向何處傳送確認報文。

2)目的埠(16位):標識接收報文的目的主機的埠或程序。

 

由抓包資料可得源埠號為12762,目的埠號為30

3) 序號(也叫序列號)(32位):用於標識每個報文段,使目的主機可確認已收到指定報文段中的資料。當源主機用於多個報文段傳送一個報文時,即使這些報文到達目的主機的順序不一樣,序列號也可以使目的主機按順序排列它們。在建立連線時傳送的第一個報文段中,雙方都提供一個初始序列號。TCP 標準推薦使用以 4ms 間隔遞增 1 的計數器值作為這個初始序列號的值。使用計數器可以防止連線關閉再重新連線時出現相同的序列號。序列號表達達到2^32 - 1後又從0開始, 當建立一個新的連線時,SYN標誌為1,系列號將由主機隨機選擇一個順序號

由圖可得現序列號為25e4d8a8

4)確認號(32位):目的主機返回確認號,使源主機知道某個或幾個報文段已被接收。如果 ACK 控制位被設定為 1,則該欄位有效。確認號等於順序接收到的最後一個報文段的序號加 1,這也是目的主機希望下次接收的報文段的序號值。返回確認號後,計算機認為已接收到小於該確認號的所有資料。

由圖可得現確認號為59eafa0c

5) 資料偏移(首部長度)(4位)

TCP 報文段的資料起始處距離 TCP 報文段的起始處有多遠,即首部長度。 由於 TCP 報頭的長度隨 TCP 選項欄位內容的不同而變化,因此報頭中包含一個指定報頭欄位的欄位。該欄位以 32 位元為單位,所以報頭長度一定是 32 位元的整數倍,有時需要在報頭末尾補 0 。由抓包圖有偏移量在0x50中,佔4bit,0x50轉化為二進位制數0101 0000 所以偏移量是 0101=5,所以TCP報文首部長度為5* 4 = 20位元組。

6)保留位(6位):由跟在資料偏移欄位後的 6 位構成

 

7)視窗(16位)

此欄位用來進行流量控制,這個值是本機期望一次接收的位元組數,即傳送資料的視窗大小。告訴對方在不等待確認的情況下,可以發來多大的資料。

8)校驗和(16位):源主機和目的主機根據 TCP 報文段以及偽報頭的內容計算校驗和。在偽報頭中存放著來自 IP 報頭以及 TCP 報文段長度資訊。與 UDP 一樣,偽報頭並不在網路中傳輸,並且在校驗和中包含偽報頭的目的是為了防止目的主機錯誤地接收存在路由的錯誤資料報

9)緊急指標(16位):僅在 URG = 1 時才有意義,它指出本報文段中的緊急資料的位元組數(緊急資料結束後就是普通資料),即指出了緊急資料的末尾在報文中的位置,注意:即使視窗為零時也可傳送緊急資料。

UDP報文格式分析:

由圖可知源埠號為4242,目的埠號為4242,使用者資料報長度為283位元,校驗和為0xb4c6,資料大小為275bytes。

IP 報文格式分析:

版本:IP協議的版本,目前的IP協議版本號為4。

首部長度:IP報頭的長度。固定部分的長度(20位元組)和可變部分的長度之和。共佔4位。最大為1111,即10進位制的15,代表IP報頭的最大長度可以為15個32bits(4位元組),也就是最長可為15*4=60位元組,除去固定部分的長度20位元組,可變部分的長度最大為40位元組。

總長度:IP報文的總長度。報頭的長度和資料部分的長度之和。

標識:唯一的標識主機發送的每一分資料報。通常每傳送一個報文,它的值加一。當IP報文長度超過傳輸網路的MTU(最大傳輸單元)時必須分片,這個標識欄位的值被複制到所有資料分片的標識欄位中,使得這些分片在達到最終目的地時可以依照標識欄位的內容重新組成原先的資料。由圖得出這是第18958個分片。

標誌:共3位。R、DF、MF三位。目前只有後兩位有效,DF位:為1表示不分片,為0表示分片。MF:為1表示“更多的片”,為0表示這是最後一片。

片位移:

生存時間:IP報文所允許通過的路由器的最大數量。每經過一個路由器,TTL減1,當為0時,路由器將該資料報丟棄。TTL 欄位是由傳送端初始設定一個 8 bit欄位.推薦的初始值由分配數字 RFC 指定,當前值為 64。傳送 ICMP 回顯應答時經常把 TTL 設為最大值 255。

協議:指出IP報文攜帶的資料使用的是那種協議,以便目的主機的IP層能知道要將資料報上交到哪個程序(不同的協議有專門不同的程序處理)。和埠號類似,此處採用協議號,TCP的協議號為6,UDP的協議號為17。ICMP的協議號為1,IGMP的協議號為2.

首部校驗和:計算IP頭部的校驗和,檢查IP報頭的完整性。

源IP地址:標識IP資料報的源端裝置。

目的IP地址:標識IP資料報的目的地址。

ICMP 報文格式分析:

  • 型別:佔一位元組,標識ICMP報文的型別,目前已定義了14種,從型別值來看ICMP報文可以分為兩大類。第一類是取值為1~127的差錯報文,第2類是取值128以上的資訊報文。
  • 程式碼:佔一位元組,標識對應ICMP報文的程式碼。它與型別欄位一起共同標識了ICMP報文的詳細型別。
  • 校驗和:這是對包括ICMP報文資料部分在內的整個ICMP資料報的校驗和,以檢驗報文在傳輸過程中是否出現了差錯。其計算方法與在我們介紹IP報頭中的校驗和計算方法是一樣的。
  • 標識:佔兩位元組,用於標識本ICMP程序,但僅適用於回顯請求和應答ICMP報文,對於目標不可達ICMP報文和超時ICMP報文等,該欄位的值為0。

TCP協議的連線管理

第一次握手:客戶端向伺服器端傳送連線請求包SYN(syn=j),等待伺服器迴應;

第二次握手:伺服器端收到客戶端連線請求包SYN(syn=j)後,將客戶端的請求包SYN(syn=j)放入到自己的未連線佇列,此時伺服器需要傳送兩個包給客戶端;

  (1)向客戶端傳送確認自己收到其連線請求的確認包ACK(ack=j+1),向客戶端表明已知道了其連線請求

  (2)向客戶端傳送連線詢問請求包SYN(syn=k),詢問客戶端是否已經準備好建立連線,進行資料通訊;

  即在第二次握手時伺服器向客戶端傳送ACK(ack=j+1)和SYN(syn=k)包,此時伺服器進入SYN_RECV狀態。

第三次握手:客戶端收到伺服器的ACK(ack=j+1)和SYN(syn=k)包後,知道了伺服器同意建立連線,此時需要傳送連線已建立的訊息給伺服器;

  向伺服器傳送連線建立的確認包ACK(ack=k+1),迴應伺服器的SYN(syn=k)告訴伺服器,我們之間已經建立了連線,可以進行資料通訊。

  ACK(ack=k+1)包傳送完畢,伺服器收到後,此時伺服器與客戶端進入ESTABLISHED狀態,開始進行資料傳送。

總結:通過利用wireshark工具對網際網路進行抓包分析,我們小組對網際網路的連線有了更進一步的瞭解和認識,對課本上學的基礎知識也有更深一步 的理解。