IP分片實例分析

IP分片實例分析

引言       

        最近公司要研發一款用於鏈路通信加密的設備,使用祖沖之算法對OSI七層中的數據鏈路層數據進行流式加密,在設計技術方案時,發現一個問題,就是廣域網上傳輸的數據包都是有最大長度限制的,對TCP數據包是MSS(最大分段長度), 對UDP數據包是MTU(最大傳輸單元),而對於我們的項目,TCP的分段不用特殊處理,而IP分片需要在加密設備端主動分片,並且滿足IP的包格式。UDP不會分段,就由IP分片;TCP會分段,就不用IP分片。

IP分片

      下面我們就具體說說IP分片,當UDP包長度大於MTU(1500)時,進行IP分片,即一個IP包分成多個:

      1.在IP包頭部分,分片後的包和原始包對比,FLAGS 和 FRAGMENT OFFSET兩個字段的內容要發生變化----詳見下面 IP報文格式 IP分片實例分析

      2.分片後的數據包中,只有第一包是帶UDP包首部,其餘包只有IP包首部,到了終端後在進行重組。

IP報文格式

上面是IP的報文格式,接下來我們先說明各個字段的意義。然後,用Etheral軟件轉包分析IP的報文格式。

1.版本:ip報文中,版本佔了4位,用來表示該協議採用的是那一個版本的ip,相同版本的ip才能進行通信。一般此處的值爲4,表示ipv4。

2.頭長度:該字段用四位表示,表示整個ip包頭的長度,其中數的單位是4字節。即二進制數0000-1111(十進制數0-15),其中一個最小長度爲0字節,最大長度爲60字節。一般來說此處的值爲0101,表示頭長度爲20字節。

3.Tos服務字段:該字段用8位表示。該字段一般情況下不使用。

4..總長度:該字段表示整個ip報文的長度,單位是1字節。能表示的最大字節爲2^16-1=65535字節。不過由於鏈路層的MTU限制。超過1480字節後就會被分片(以太幀MTU爲1500的情況下,除去20字節的包頭)

5.標識:該字段是ip軟件實現的時候自動產生的,該字段的目的不是爲了接受方的按序接受而設置的,而是在ip分片以後,用來標識同一片分片的。方便ip分片的重組。

6.標誌:該字段是與ip分片有關的。其中有三位,但只有兩位是有效的,分別爲MF,DF,MF。MF標識後面是否還有分片,爲1時,表示後面還有分片。DF標識是否能分片,爲0表示可以分片。

7.片偏移:該字段是與ip分片後,相應的ip片在總的ip片的位置。該字段的單位是8字節。比如,一個長度爲4000字節的ip報文,到達路由器。這是超過了鏈路層的MTU,需要進行分片,4000字節中,20字節爲包頭,3980字節爲數據,需要分成3個ip片(鏈路層MTU爲1500),那麼第一個分片的片偏移就是0,表示該分片在3980的第0位開始,第1479位結束。第二個ip片的片偏移爲185(1480/8),表示該分片開始的位置在原來ip的第1480位,結束在2959。第三片的片偏移爲370(2960/8),表示開始的時候是2960位,結束的時候在3979位。

8.TTL:該片表示生存週期,該值佔8位。ip分片每經過一個路由器該值減一,它的出現是爲了防止路由環路,浪費帶寬的問題。比如,該ip在R1路由器發送到R2路由器。R2路由器又發給R1路由器。防止這種循環。window系統默認爲128.

9.協議:該值標識上層的協議。佔8位。其中1,標識ICMP、2標識IGMP、6標識TCP、17標識UDP、89標識OSPF。

10校驗和:該值是對整個數據包的包頭進行的校驗。佔16位。

11.源地址和目的地址。標識發送ip片的源和目的ip,32位

12.接下來是可選的部分,一般一些特殊的要求會加在這個部分。

13:數據

IP分片實例分析

下面是我在實際測試中的抓包截圖和分析,抓包工具用的IPtool,對其進行了過濾設置,所以只會看到分片後的幾個包:

1. 上圖分爲三塊,最上面的是0--3共四個數據包,是分片後的數據包,可以看到包類型,包長度,以及源地址,目的地址,源端口,目的端口(端口號爲什麼是雜亂無章的哪?????文中有答案,仔細閱讀哦);

2. 上圖左下區域爲 報文解析,大家可以對照 IP報文格式 進行學習,注意上圖是IP分片的第0包,所以FRAGMENT OFFSET 值爲0,那麼第1包是185,第2包是370,第3包是555,FLAGS字段 最後一包和其他包的值不一致,可以與下面的截圖進行對比;

3.上圖右下區域爲報文完整內容。

附件:四個分片的完整截圖

 

 

重要的事情強調三遍:

分片後的數據包中,只有第一包是帶UDP包首部,其他包的都是數據;FRAGMENT OFFSET 該字段的單位是8字節.

分片後的數據包中,只有第一包是帶UDP包首部,其他包的都是數據;FRAGMENT OFFSET 該字段的單位是8字節.

分片後的數據包中,只有第一包是帶UDP包首部,其他包的都是數據;FRAGMENT OFFSET 該字段的單位是8字節.

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