IPv4報文分片


1:為什么需要分片

每個數據鏈路層協議都有自己的幀格式,在這個格式中有一個字段是"數據字段最大長度"(MTU,最大傳輸單元),當數據報被封裝成幀時,數據報的總長度必須小於這個最大長度.

它是由網絡使用的硬件和軟件帶阿里的限制確定的.

IPv4數據報的最大長度2^16(65535)字節,如果MTU>=2^16,那么什么也不用做,直接把IPv4的數據報塞到幀的數據段中就行了,但是對於MTU<2^16的數據鏈路層協議,那就應該把

數據報分成很多份,這個步驟就是分片.

2.怎么分片

當數據報被分片時

1:每一個數據報文都有自己的首部,大部分的字段是重復的

2:選項可以復制也可以不復制.只有數據報中的數據是分片的

3:檢驗和必須重新計算,因為檢驗和只包含頭部,然而頭部最少有三個字段(標識,標志,分片偏移量)改變了

4:如果分片后的數據遇到更小的MTU,需要再次分片

使用IPv4協議中 標識,標志,分片偏移來進行數據報分片.

 

標識:頭部中16位的字段,標志了從源主機發出的一個數據報,當數據報離開源主機后,此標識與源IP地址的組合必須唯一確定這個數據報.

   進行分片時,這個字段必須復制到所有的分片中,這樣目的主機收到所有被分片的報文后,才知道把那些分片組裝起來

 

標志:頭部中3位的字段,

   1:第一保留未用

   2:第二位稱為不分片位,如果是1,這個數據報不能進行分片,如果不分片過不了網絡,只能丟棄,然后發送一個ICMP差錯報文回去.如果是0,那就可以分片

   3:第三位是還有分片位,若這個值是1,則表示這個數據報不是最后的分片,如果是0,表示是最后一個分片

 

分片偏移:頭部中13位的字段

  1:這個字段表示的是分片在整個數據報中的相對位置,看后面的計算過程

  2:8字節為度量,為什么?而這個字段只有13位,它不能表示超過8191個字節,如果以8字節為度量單位,那么可以表示65528字節,

     超過IPv4中數據段的最大值(2^16-1-20)=65515

  3:第一個分片的字節數量必須能夠被8除盡

 

具體分片過程

 

             IPv4數據報首部格式

 

Ip協議版本4位

首部長度4位

服務類型8位

總長度16位

標識16位

 

標志3位

 

分片偏移量13位

 

生存時間8位

協議8位

頭部檢驗和16位

 

源IP地址  32位

 

目的IP地址 32位

 

選項+填充

 

 

 

          未分片的數據報:首部長度是20,數據長度是5000

 

 

 

5020

123

 

0

0

0

 

 

 

 

 

 

 

          假設我們一個分片大小是2000

            第一個分片如下

 

 

 

2000+20=2020

123

 

0

1

0   (0/8=0)

 

 

 

 

 

0-1999字節(為了便於觀看加上的內容)

 

            第二個分片

 

 

 

2000+20=2020

123

 

0

1

250  (2000/8=250)

 

 

 

 

 

2000-3999字節

 

            第三個分片

 

 

 

1000+20=1020

123

 

0

0

500  (4000/8=500)

 

 

 

 

 

4000-4999字節

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM