1.3個標誌位是哪3位?
目前只有兩位有意義
<1>標誌位中的最低位記爲MF(More Fragment)。MF=1即表示後面"還有分片"的數據報。MF=0表示這已是若干數據報片中的最後一個。
<2>標誌字段中間的以爲記爲DF(Don't Fragment)。意思是"不能分片"的數據報。只有當DF=0是才允許分片。
2.描述數據報的分片和組裝過程
分片和重新組裝的過程對傳輸層是透明的,其原因是當IP 數據報進行分片之後,只有當它到達下一站時,纔可以進行重新組裝,
且它是由目的端的IP 來完成的。分片之後的數據報根據需要也可以再次進行分片。
IP分片的原理:
IP分片和完整IP報文差不多擁有相同的IP頭,ID域對於每個分片都是一致的,這樣才能在重新組裝的時候識別出來自同一個IP報文
的分片。在IP頭裏面,16位識別號位移記錄了一個IP報文的分片。在IP頭裏面,16位識別號唯一記錄了一個IP報文的ID
,具有同一個ID的IP分片將會重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表中間的3位標誌位,則標誌着該分片後面是否還有新的分片,這三個域就組成了IP分片的所有信息,接受方就可以利用這些信息對IP數據進行重新組織
IP分片的步驟:
一個未分片的數據報的分片信息字段全爲0,即多個分片標誌位爲0;即多個分片標誌位爲0;且偏移量爲0.分片一個數據報,需執行以下幾個步驟:
(1) 檢查DF標誌位,查明是否允許分片,如果DF=1,則將該數據報丟棄,並將一個ICMP錯誤返回給源端。
(2) 基於MTU值,把數據字段分成兩個部分或者多個部分。除了最後的數據部分外,所有新建數據選項的長度必須爲8的倍數。
(3) 每個數據部分被放入一個IP數據報,這些數據報的報文頭略微修改了原來的報文頭。除了最後的數據報分片外,所有分片都設置了多個分片標誌位。
每個分片中的片偏移量字段設爲這個數據部分在原來數據報中所佔的位置,這個位置相對於原來未分片數據報中的開頭處。
(4) 設置新數據報的報文頭字段及總長度字段。
(5) 重新計算報文頭部校驗和字段。
IP報文的重組:
爲了重組數據報分片,接收主機在第一個分片到達時分配一個存儲緩衝區。這個主機還將啓動一個計時器。當數據報的後續分片到達時,數據被複制到緩衝區存儲器中片偏移量字段指出的位置。當所有分片都到達時,完整的未分片的原始數據報就被恢復了。處理如同未分片數據報一樣繼續進行。
如果計時器超時並且分片保持尚未認可狀態,則數據報被丟棄。這個計時器的初始值稱爲IP數據報的生存期值。它是依賴於實現的。一些實現允許對它進行配置。在某些IP主機上可以使用netstat命令列出分片的細節。如TCP/IP for OS/2中的netstat-i命令。
在接收方,一個由發送方發出的原始IP數據報,其所有分片將被重新組合,然後才能提交到上層協議。每一個將被重組的IP 數據報都用了一個ipq結構實例來表示,因此先來看看ipq這個非常重要的結構。
爲了能高效地組裝分片,用於保存分片的數據結構要有一下幾點:
1. 快速定位屬於某一個數據報的一組分組。
2. 在屬於某一個數據報的一組分片中快速插入新的分片
3. 有效地判斷一個數據報的所有分片是否已經全部接收
4. 具有組裝超時機制,如果在重組完成之前定時器溢出,則刪除該數據報的所有內容