Wireshark協議分析之IPv4協議

一:前言

如果網絡中的所有設備都是使用集線器或者交換機進行連接,那麼這個網絡稱爲局域網(LAN)。如果將兩個局域網連接起來,那麼需要路由器。複雜的網絡中,可能包含了成千上萬的局域網,而這些局域網是由成千上萬的路由器連接起來的。

互聯網本身是由無數局域網和路由器組成的一個集合

二:IPv4頭(固定長度20字節)

版本(version):IP所使用的版本

首部長度(Header Length):IP頭的長度

服務類型(Type of Service):優先級標誌位和服務類型標誌位,被路由器用來進行流量的優先排序

總長度(Total Length):IP頭與數據包中數據的長度

標識符(Identification):一個唯一的標識數字,用來識別一個數據包或者被分片數據包的次序

標誌(FLags):用來識別一個數據包是否是一組分片數據包的一部分

片偏移(Fragment Offset):一個數據包是一個分片,這個域中的值就會被用來將數據包以正確的順序重新組裝

生存時間(Time to Live):用來定義數據包的生存週期,以經過路由器的跳數/秒數進行描述

        死循環會引發各種問題,導致程序或者os的崩潰。當收到ttl爲1,則不會進行轉發。

協議(Protocol):用來識別在數據包序列中上層協議數據包的類型

首部校驗和(Header Checksum):一個錯誤檢測機制,用來確認IP頭的內容沒有被損壞或者篡改

源地址(Source IP Address):發出數據包的主機的IP地址

目的地址(Destination IP  Address):數據包目的地的IP地址

選項(Options):保留作額外的IP選項。包含這源站選路和時間戳的一些選項

數據(Data):使用IP傳遞的實際數據

可以看出IPv4協議的頭部佔20字節,Total length爲60,故數據部分的長度爲40字節

三:IP分片

數據包分片將一個數據流分爲更小的片段,它是IP用於解決跨越不同類型網絡時可靠傳輸的一個特性。

一個數據包的分片主要基於第2層數據鏈路協議所使用的最大傳輸單元(MTU)的大小,以及使用這些第2層協議的設備配置情況。在多數情況下,第2層所使用的數據鏈路協議是以太網。

以太網默認的MTU是1500,也就是說以太網上所能傳輸的最大報文大小是1500字節(並不包括14字節的以太網頭本身)

當一個設備準備傳輸一個IP數據包時,它將會比較這個數據包的大小,以及MTU,用來決定是否需要將這個數據包分片。如果數據包大小大於MTU,那麼這個數據包就會被分片,分片步驟如下

  1. 設備將數據分爲若干個將要接下來進行傳輸的數據包
  2. 每個IP頭的總長度字段會被設置成每個分片的片段長度
  3. 除了最後一個分片數據包外,之前所有分片數據包的標誌位都被標識爲1
  4. IP頭中分片部分的分片偏移將會被設置
  5. 數據包被髮送出去

看上圖地址10.10.0.3向一個地址爲192.168.0.128的設備發送ping請求,由於請求包太大,被分爲3部分傳輸

第一個數據包

根據More fagements 和Fragement offset可以判定這個數據包是分片數據包中的一部分

 

第二個數據包

第二個 數據包的IP頭,同樣被設定了標誌位,但是這裏的分片偏移值是185(以8個字節爲單位:140),意味着1500字節的MTU,減去了IP頭部的20字節

 

第三個數據包

這個數據包並沒有設定爲更多的分片標誌位,意外着是最後一個分片,其片偏移值設置爲370(實際爲2960)

雖然網絡上被分片的數據包不怎麼常見,但是明白數據包爲什麼會分片是有用的,當遇到時,可以診斷問題所在或認出丟失的分片

關於IP數據包分片的計算問題,可以看https://blog.csdn.net/qq_39112646/article/details/86763757

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章