IP分片與重組詳解



大家對IP數據包頭,應該不陌生吧

分片便是與圖中圈出來的兩個地址有關,本文也是將主要圍繞他們展開。

那我們先來了解他們的概念。

 

標志
一個三比特字段遵循與用於控制或識別片段。他們是(按順序,從高分以低位):
0:保留; 必須為零。
1位:不分段(DF)
2位:更多片段(MF)
如果DF標志被設置,並且分片需要來路由分組,則該分組被丟棄。這可以發送分組到不具有足夠的資源來處理破碎的宿主時,可以使用。它也可用於路徑MTU發現由主機IP軟件,可以自動或使用診斷工具例如手動平或跟蹤路由。對於未分段的數據包,對MF標志被清除。對於分片包,除了最后的所有片段具有MF標志設置。最后片段具有一個非零片偏移量字段,從一個未分段的分組區分它。


分片偏移
片段偏移字段以8字節塊為單位進行測量。它是13位長,並指定特定相對於原始未分段的IP數據報的開始的片段的偏移量。零第一片段已偏移。這允許最多(2偏移13(次方)  - 1)×8 =字節65,528,這將超過65,535字節的最大IP報文長度與包括報頭長度(+ 65,528 20 = 65548字節)。

 

為什么要分片呢?

互聯網協議使網絡互相通信。設計要迎合不同物理性質的網絡; 它是獨立於鏈路層使用的基礎傳輸技術。具有不同硬件的網絡通常會發生變化,不僅在傳輸速度,而且在最大傳輸單元(MTU)。當一個網絡要的數據報發送到具有較小MTU的一個網絡,它可能片段的數據報。在IPv4中,這個功能被放置在因特網層,並且在IPv4路由器,這因此只需要這個層作為最高的一個在其設計中實現的處理。
與此相反,IPv6的,下一代互聯網協議的,不允許的路由器來執行分片; 發送數據包之前,主機必須確定路徑MTU。


分片
當路由器收到一個數據包時,它會檢查目的地址,並確定出接口使用,並且該接口的MTU。如果分組的大小是比MTU大,並且在該分組的頭中的不分段(DF)位被設置為0,則路由器可分段的數據包。
路由器將所述分組成片段。每個片段的最大尺寸是MTU減去IP包頭的大小(20字節最低; 60個字節的最大值)。路由器會在每個片段到其自己的數據包,有以下改變每個分片報文:
該總長度字段是片段大小。
所述多個片段(MF)標志被設置為除了最后一個,這被設置為0的所有片段。
該片段的偏移字段被設置的基礎上,在原來的數據有效載荷的片段的偏移量。這是在8字節塊為單位進行測量。
該頭校驗域被重新計算。

例如,對於1500字節的MTU和20個字節的報頭大小,該片段的偏移將是(1500年至1520年)/ 8 = 185。這些倍數倍數0,185,370,555,740,...


它有可能為一包在一個路由器進行分段,並在另一路由器進行分段的片段。例如,考慮4500個字節,沒有選項大小和20字節的IP報頭大小傳輸層段。因此IP分組大小為4,520字節。

 


重組
接收機知道一個分組是片段,如果滿足下列條件中的至少一個為真:

“更多碎片”標志設置。(這是除最后所有片段真)。
在“片段偏移”字段是零。(這是為除第一所有片段真)

接收器標識匹配使用外國和當地的互聯網地址,協議號,和識別領域的片段。接收器將重組從片段數據與同時使用的片段偏移和多個片段標志相同的ID。當接收機接收的最后一個片段(其具有的“更多片段”標志設置為0),它可以通過乘以最后一個片段的八個偏移,並加入最后一個片段的數據的大小來計算的原始數據有效載荷的長度,。在上面的例子中,這一計算是495 * 8 + 540 = 4500字節。


當接收機具有所有的片段,它可以把它們在正確的順序,通過使用他們的偏移。然后,它可以通過他們的數據的堆棧作進一步處理。


免責聲明!

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



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