IPv4數據報的分段與重組

文章摘自書籍《深入理解計算機網絡 王達 機械工業出版社》
IPv4數據報頭格式請點擊此處
IPv4數據報的封裝與解封裝請點擊此處

IPv4數據報的分段與重組

在網絡層中還涉及一個分段的問題,那就是因爲不同網絡線路上可以傳輸的數據報大小是有限制的,且可能是不同的,也就是我們通常所說的MTU(最大傳輸單元),所以如果一個網絡中收到的數據報太大,不能在目的網絡中一次傳輸的話,就要對原來的包進行拆分,分成一個個小的數據報再進行傳輸,這就是本次要介紹的IP數據報分段。在發送端進行了分段,在接收端自然就要把發送來的一個個分段重新按順序組合,恢復成原始的大數據報。
當一個IPv4數據報封裝成數據鏈路層的幀時,此數據報的總長度(即包頭加上數據部分)一定不能超過下圖所列的不同網絡的數據鏈路層的MTU值。因此,一個IP數據報的長度只有小於或者等於一個網絡的MTU時才能在這個網絡中進行傳輸。當原來的IP數據報長度大於對應網絡鏈路的MTU時,就必須對這個大的IP數據包進行拆分,分成多個符合對應網絡鏈路MTU要求的小的數據分段。


不同網絡數據鏈路層協議的MTU值

在互聯網中,包含了各種各樣的異構網絡,一個路由器可以連接具有不同MTU值的多個網絡,從一個網絡上接受的IP數據報並不一定能在另一個網絡上發送該數據報。如下圖所示,從一個網絡上接受的IP數據報並不一定能在另一個網絡上發送該數據報。一個路由器連接兩個網絡,其中一個網絡是以以太網傳輸,根據上圖得知其MTU的值爲1500字節,另一個爲X.25網絡,根據上圖得知其MTU的值爲576字節。
假設主句A連接着MTU值爲1500字節的以太網絡,這樣在以太網絡上鏈路層傳輸的幀中數據部分,也就是IP數據報長度不得超過1500字節,而主機B連接着MTU值爲576字節的X.25網絡,這樣在X.25網絡鏈路層的幀中的數據部分,也就是IP數據報長度不得超過576字節,即兩個網絡中鏈路上傳輸的MTU值是不一樣的。這是如果主機A要把一個1450字節的數據報發送給主機B,路由器可以接受到主機A發送的數據報,但卻不能再X.25網絡上轉發它,因爲它超過了X.25網絡鏈路上MTU的限制。


不同網絡數據鏈路層協議的MTU值

爲了解決這個問題,就需要在路由器上對接收到的主機A發來的IP數據報進行分段,然後再將每個分段獨立地進行發送,可以像正常的IP數據報一樣經過獨立的路由選擇等處理過程,最終到達目的主機。最後,還需要在目的主機上對這些分段進行重組,恢復原始的大IP數據報。
這時就涉及一個問題,IP數據報分段後是否在每個分段中加上對應的IP包頭信息。答案是肯定的。因爲分段後的每個IP包分段都需要進行單獨的路由,所以必須要有相應的IP包頭信息。這時就得把原來IP數據報中的包頭部分複製到所有由同一個IP數據報拆分的分段上。另外,還需要在每個分段的包頭部分對標誌字段和段偏移字段值進行修改。
如果是第一個分段,則標誌字段的第一位(最低位)置1(表示後面還有分段),中間一位置0(表示允許分段),段偏移字段值爲0000 0000 0000 0;如果是中間分段,則標誌字段的第一位(最低位)置1,中間位置0,段偏移字段值爲相應的偏移值(以8個字節爲單位);如果是最後一個分段,則“標誌”字段的第一位(最低位)置0,中間一位置0(表示此分段是最後一個分段),段偏移字段值也爲相應的偏移值。包頭的其他部分與原始的IP數據報一樣。
在路由器或主機上對IP數據報進行了拆分後,在最終的目的主機上要將接收到的所有分段進行重新組裝,這就是IP數據報分段的重組過程。IP數據分段的重組是根據數據報的標識符(由同一個IP數據報拆分的各分段標識符字段時相同的)、段偏移、標誌等字段進行的,按照原來的拆分拼接起來,但拼接時只保留第一個分段的報頭信息,分段的報頭被去掉,同時修改第一個分段報頭信息,不設置標誌字段和段偏移字段。

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