IP數(shù)據(jù)報的分片與重組分析
在IP協(xié)議的報頭中,除了TTL字段,還有幾個字段是非常重要的,這就是我們今天要討論的標識符、標志位以及偏移量,這3個字段在IP數(shù)據(jù)報的分片與重組中,是非常重要的字段。
我們都知道,不同類型的網(wǎng)絡(luò),其MTU(最大傳輸單元)各不相同,如以太網(wǎng)中,最大的傳輸幀為1518字節(jié),F(xiàn)DDI為4500字節(jié),令牌環(huán)幀在4500字節(jié)到17800字節(jié)之間,而IP協(xié)議的一個重要功能,就是能夠?qū)鬏數(shù)臄?shù)據(jù)大于硬件接口的MTU時,對其進行分段傳輸。即大于MTU的數(shù)據(jù)報將被分為2個或多個的合適的大小被傳輸。一個分片在到達接收主機的路徑中,還可能被繼續(xù)分片,因此,分片的IP數(shù)據(jù)報可能會以不同的路徑傳輸?shù)浇邮罩鳈C,接收主機通過一系列的重組,將其還原為一個完整的IP數(shù)據(jù)報,再提交給上層協(xié)議處理。
IP標識符
IP標識符、標志、偏移量3個字段在IP報頭中的位置如下圖1所示:
本文引用地址:http://butianyuan.cn/article/201706/353701.htm
在發(fā)送數(shù)據(jù)報前,發(fā)送主機給每個數(shù)據(jù)報一個ID值,放在16位的標識符字段中。此ID用于標識唯一的數(shù)據(jù)報或數(shù)據(jù)流。接收主機利用此ID對收到的數(shù)據(jù)報進行重組。正如前面所說,當分片的IP數(shù)據(jù)報從源地址發(fā)送到目的地址的時候,由于網(wǎng)絡(luò)延遲或者不同的傳輸路徑的關(guān)系,在到達目的主機時,這些分片數(shù)據(jù)報并不總是有序的排列,而是處于一種無序狀態(tài),因此,接收主機便用此ID判斷接收的這些分片數(shù)據(jù)報是否屬于同一個數(shù)據(jù)流,然后再進行重組(重組將在偏移量中討論)。
標志
標志字段在IP報頭中占3位,第1位作為保留,置0;第2位,分段,有兩個不同的取值:該位置0,表示可以分段;該位置1,表示不能分段;第3位,更多分段,同樣有兩個取值:該位置0,表示這是數(shù)據(jù)流中的最后一個分段,該位置1,表示數(shù)據(jù)流未完,后續(xù)還有分段,當一個數(shù)據(jù)報沒有分段時,則該位置0,表示這是唯一的一個分段。見下圖2:
當目的主機接收到一個IP數(shù)據(jù)報時,會首先查看該數(shù)據(jù)報的標識符,并且檢查標志位的第3位是置0或置1,以確定是否還有更多的分段,如果還有后續(xù)報文,接收主機則將接收到的報文放在緩存直到接收完所有具有相同標識符的數(shù)據(jù)報,然后再進行重組。
更多分段位能夠讓接收主機判斷分片的數(shù)據(jù)報是否發(fā)送完畢;而分段位除了能夠?qū)?shù)據(jù)報分段,而且還能夠?qū)崿F(xiàn)另一個用途,在某些情況下,可以利用分段位動態(tài)的找到網(wǎng)絡(luò)端到端的MTU大小。如果路由器配置時,置此位為0,則當主機嘗試發(fā)送一個比傳輸路徑上的數(shù)據(jù)報大的幀時,路由器不轉(zhuǎn)發(fā)該幀,而是丟棄,并給源主機發(fā)送ICMP報文,說明該數(shù)據(jù)報太大,源主機利用此信息調(diào)整數(shù)據(jù)報大小,再重新發(fā)送。
偏移量
13位的偏移量字段用來表示分段的數(shù)據(jù)報在整個數(shù)據(jù)流中的位置,即相當于分片數(shù)據(jù)報的順序號。發(fā)送主機對第一個數(shù)據(jù)報的偏移量置為0,而后續(xù)的分片數(shù)據(jù)報的偏移量則以網(wǎng)絡(luò)的MTU大小賦值。偏移量對于接收方進行數(shù)據(jù)重組的時候,這是一個關(guān)鍵的字段。對于分片的數(shù)據(jù)段(單位:字節(jié))必須為8的整數(shù)倍,否則IP無法表達其偏移量。如下圖3所示:
以太網(wǎng)中,源主機如果需要通過UDP傳送3000字節(jié)的數(shù)據(jù)到目的主機,這時的分段情況如下圖4所示(在同一網(wǎng)段):
此處需要注意的是對于分片1的報頭,相對于其他兩個分片的報頭而言,要多出8個字節(jié)UDP協(xié)議的報頭開銷,因此,在計算實際傳輸?shù)臄?shù)據(jù)凈載荷時,分片1要多減去8字節(jié)UDP報頭。最后,接收主機通過此偏移值將數(shù)據(jù)重組成完整的數(shù)據(jù)報。
總結(jié)
IP協(xié)議雖然是我們司空見慣的一個協(xié)議,但是,對于其報頭結(jié)構(gòu),報頭中每個字段的含義,還是需要我們不斷學(xué)習(xí),才能真正理解IP協(xié)議的精髓。
評論