IP分片中偏移單位為8B的解釋


最近遇到一個問題:為什么IP中的偏移單位是8B而不是4或16等其他字節?上網查了一下,發現回答往往是RFC的規定,IP的規定,並沒有做出實質性的解釋。

再仔細研究一下IP頭中每個字段的含義,終於發現偏移單位定為8B是有其原因的。它是由IP頭部格式中的“總長度(16bit)”和“偏移(13bit)”兩個字段所決定的。總長度定義了IP包的最大長度為2^16=64KB,偏移說明了IP分片時它最多能表示2^13個偏移單位,這樣偏移單位就是2^16/2^13=2^3,即為8B了。如果偏移單位不是8B,如選4B,則13bit的"偏移"就不能表示出IP的最大長度了,而如果選16B,只需要12bit的"偏移"就能表示出IP的最大長度了,即偏移單位小於8B時,“偏移”不能夠表示出IP的最大長,偏移單位大於8時,“偏移”不會被完全利用。以8B做為偏移單位正好合適。

轉自:http://ilinger.blog.hexun.com/26152266_d.html

由於鏈路MTU(maxiun transmit unit)大小的約束,ip報文要分片。

IP首部包含了分片和重組所需的信息:

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  | Identification |R|DF|MF| Fragment Offset |

  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  |<-------------16-------------->|<--3-->|<---------13---------->|

  Identification:發送端發送的IP數據包標識字段都是一個唯一值,該值在分片時被復制到每個片中。

  R:保留未用。

  DF:Don't Fragment,“不分片”位,如果將這一比特置1 ,IP層將不對數據報進行分片。

  MF:More Fragment,“更多的片”,除了最后一片外,其他每個組成數據報的片都要把該比特置1。

  Fragment Offset:該片偏移原始數據包開始處的位置。偏移的字節數是該值乘以8。

  另外,當數據報被分片后,每個片的總長度值要改為該片的長度值


免責聲明!

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



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