抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

目錄

  • 抓包過程
  • 以太網幀(也叫MAC幀)首部分析
  • IP數據包首部分析


抓包過程

使用了 Wireshark 進行抓包,用兩個最常用的 curl 和 ping 命令來演示抓包情況,開啟抓包。

<code> 
 

curl

https://zengzhiqin.kuaizhan.com ping https://zengzhiqin.kuaizhan.com /<code>

Wireshark根據 ping 命令得到的地址進行條件過濾,得到上面兩個命令所得到的包,主要有 TCP(https基於tcp協議)協議和 ICMP(ping命令是基於 ICMP 協議)協議的包,如下圖所示:

抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

抓包分析

以太網幀(也叫MAC幀)首部分析

抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

MAC幀 = 6字節源mac地址 + 6字節目標mac地址 + 2字節類型 + 4字節幀檢驗序列FCS + 數據長度(46~1500字節)

MAC幀長度是需要在64~1518字節之間的,太長或者太短都是無效的幀。

IP數據包過來了,MAC 層會給分別使用6個字節為其加上“源mac地址”和“目標mac地址”,並且花2個字節為其指明是哪種類型的IP數據報(目前有IPV4,IPV6兩種類型),4字節“FCS幀檢驗序列” 負責檢驗幀是否有效,然後就是46~1500字節之間的IP數據報長度。

抓包裡面的mac幀內容如下,選取了ping的reply類型包信息進行查看分析:

抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

以太網幀

小補充:幀檢驗序列即FCS(frame check sequence), 讓接收幀的網卡或接口判斷是否發生了錯誤。

判斷過程如下:發送網卡利用多項式計算,稱循環冗餘校驗(CRC),將計算結果寫入FCS字段,接收方收到這個幀,對其做相同的CRC計算。如果計算結果與接收的FCS字段相同,則幀沒有發生錯誤。如果不同,接收方就相信幀肯定發生了錯誤,並丟棄這個幀。

IP數據包首部分析

抓包得到的頭部對應關係如下所示(1~31表示的bit,8bit=1byte):

抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

IP數據包頭部

抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

頭部每個內容如下:

  • 版本: TCP/IP 協議版本,是ipv4,還是ipv6;
  • 首部長度:告訴數據包,首部長度有多長,因為首部有變長部分(如圖中可變部分,試想一下如果當初沒有設計這個可變長度,是不需要設計這個“首部長度”的);
  • 服務類型:網絡中的數據包有著急的,有不著急的,比如你和別人聊微信,這個包就比較著急了,如果你是在發郵件,那麼點擊了發送讓他慢慢溜達過去也是沒問題的。就相當於火車站排隊,軍屬優先,殘疾人優先,讓列寧同志先走的意思;
  • 總長度:首部+數據 的長度,總長度最大是2的16次方-1,即65535字節(上面講到的數據鏈路層數據大小最大1500字節別忘了,除去IP首部的20個字節,數據鏈路層能接受的IP數據大小是1480字節,正因為這兩貨大小不一樣,如果一個數據包大於了1480字節,網絡層要把包送給數據鏈路層傳輸,才需要後面的分片)
  • 標識:用途就是數據包分片之後可以根據標識的編號,將分片的包重新組裝為一個完整數據包
抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

分片

  • 標誌:3bit表示標誌,計算機收到了一個包,那他咋知道這是一個完整的數據包,還只是一個分片呢,標誌說看我的
抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

此處單獨截圖抓包分析的標誌內容,Reserved bit為保留了一位,沒有進行設置;Don't fragement為1表示他是一個完整的數據包,不是一個片;More fragements為0表示這是最後一個分片,為1表示後面還有分片;

我curl的我的站點首頁,內容是不多的,沒有大於1500字節,所以不需要分片,如果我開啟迅雷下載了一個很大的東西,那這個地方是需要分片的。

  • 片偏移:偏移量,標識數據包的第一個字節是整個數據包的第幾個偏移量,此處抓包的片偏移量是0,因為他沒有分片
抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

片偏移

  • 生存時間ttl:Linux給數據包的默認ttl是64,Windows系統是128,Unix系統是255,每次過一個路由器那麼ttl-1,每次經過一個路由器就要減1,ttl耗盡了那麼這個包就自動消失了,防止路由裡面出現了環路死循環了,包永不消失。
  • 協議:標識這個包要交給誰來處理,如果是 tcp 或者 udp 那麼就需要交給傳輸層處理,如果是ICMP,IGMP,OSPF那麼就交給網絡層來處理這個包。此處是tcp協議,協議號是6.
抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

image

  • 首部檢驗和
抓包分析以太網幀和IP數據包,頭部那麼多東東用來幹啥的,掃盲篇

校驗過程

  • 源地址和目標地址無需多說了
  • 可選字段,填充:ipv6已經將這個可選的去掉了,因為可變就要可控,就要增大處理時間,這裡是為了增大IP數據包的功能,但是實際上很少用到。

網絡裡面時時刻刻有那麼多的包,設計者們秉著絕不浪費一個 bit 的精神,每一個標誌的設計都是精心設計的,這個時候包的首部就要絕對的精簡了。這兩個內容寫完就很多了,下一篇我會寫一個姊妹篇,抓包分析傳輸層的tcp三次牽手四次分手過程~~感謝觀看。


分享到:


相關文章: