新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計應(yīng)用 > IP數(shù)據(jù)報的分片與重組分析

IP數(shù)據(jù)報的分片與重組分析

作者: 時間:2017-06-12 來源:網(wǎng)絡(luò) 收藏
前言

  在IP協(xié)議的報頭中,除了字段,還有幾個字段是非常重要的,這就是我們今天要討論的標(biāo)識符、標(biāo)志位以及偏移量,這3個字段在的分片與重組中,是非常重要的字段。

  我們都知道,不同類型的網(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時,對其進(jìn)行分段傳輸。即大于MTU的數(shù)據(jù)報將被分為2個或多個的合適的大小被傳輸。一個分片在到達(dá)接收主機(jī)的路徑中,還可能被繼續(xù)分片,因此,分片的可能會以不同的路徑傳輸?shù)浇邮罩鳈C(jī),接收主機(jī)通過一系列的重組,將其還原為一個完整的,再提交給上層協(xié)議處理。

  IP標(biāo)識符

  IP標(biāo)識符、標(biāo)志、偏移量3個字段在IP報頭中的位置如下圖1所示:

本文引用地址:http://butianyuan.cn/article/201706/353701.htm
  在發(fā)送數(shù)據(jù)報前,發(fā)送主機(jī)給每個數(shù)據(jù)報一個ID值,放在16位的標(biāo)識符字段中。此ID用于標(biāo)識唯一的數(shù)據(jù)報或數(shù)據(jù)流。接收主機(jī)利用此ID對收到的數(shù)據(jù)報進(jìn)行重組。正如前面所說,當(dāng)分片的IP數(shù)據(jù)報從源地址發(fā)送到目的地址的時候,由于網(wǎng)絡(luò)延遲或者不同的傳輸路徑的關(guān)系,在到達(dá)目的主機(jī)時,這些分片數(shù)據(jù)報并不總是有序的排列,而是處于一種無序狀態(tài),因此,接收主機(jī)便用此ID判斷接收的這些分片數(shù)據(jù)報是否屬于同一個數(shù)據(jù)流,然后再進(jìn)行重組(重組將在偏移量中討論)。

標(biāo)志

  標(biāo)志字段在IP報頭中占3位,第1位作為保留,置0;第2位,分段,有兩個不同的取值:該位置0,表示可以分段;該位置1,表示不能分段;第3位,更多分段,同樣有兩個取值:該位置0,表示這是數(shù)據(jù)流中的最后一個分段,該位置1,表示數(shù)據(jù)流未完,后續(xù)還有分段,當(dāng)一個數(shù)據(jù)報沒有分段時,則該位置0,表示這是唯一的一個分段。見下圖2:


  當(dāng)目的主機(jī)接收到一個IP數(shù)據(jù)報時,會首先查看該數(shù)據(jù)報的標(biāo)識符,并且檢查標(biāo)志位的第3位是置0或置1,以確定是否還有更多的分段,如果還有后續(xù)報文,接收主機(jī)則將接收到的報文放在緩存直到接收完所有具有相同標(biāo)識符的數(shù)據(jù)報,然后再進(jìn)行重組。



  更多分段位能夠讓接收主機(jī)判斷分片的數(shù)據(jù)報是否發(fā)送完畢;而分段位除了能夠?qū)?shù)據(jù)報分段,而且還能夠?qū)崿F(xiàn)另一個用途,在某些情況下,可以利用分段位動態(tài)的找到網(wǎng)絡(luò)端到端的MTU大小。如果路由器配置時,置此位為0,則當(dāng)主機(jī)嘗試發(fā)送一個比傳輸路徑上的數(shù)據(jù)報大的幀時,路由器不轉(zhuǎn)發(fā)該幀,而是丟棄,并給源主機(jī)發(fā)送ICMP報文,說明該數(shù)據(jù)報太大,源主機(jī)利用此信息調(diào)整數(shù)據(jù)報大小,再重新發(fā)送。

  偏移量

  13位的偏移量字段用來表示分段的數(shù)據(jù)報在整個數(shù)據(jù)流中的位置,即相當(dāng)于分片數(shù)據(jù)報的順序號。發(fā)送主機(jī)對第一個數(shù)據(jù)報的偏移量置為0,而后續(xù)的分片數(shù)據(jù)報的偏移量則以網(wǎng)絡(luò)的MTU大小賦值。偏移量對于接收方進(jìn)行數(shù)據(jù)重組的時候,這是一個關(guān)鍵的字段。對于分片的數(shù)據(jù)段(單位:字節(jié))必須為8的整數(shù)倍,否則IP無法表達(dá)其偏移量。如下圖3所示:



  以太網(wǎng)中,源主機(jī)如果需要通過UDP傳送3000字節(jié)的數(shù)據(jù)到目的主機(jī),這時的分段情況如下圖4所示(在同一網(wǎng)段):



  此處需要注意的是對于分片1的報頭,相對于其他兩個分片的報頭而言,要多出8個字節(jié)的報頭開銷,因此,在計算實際傳輸?shù)臄?shù)據(jù)凈載荷時,分片1要多減去8字節(jié)UDP報頭。最后,接收主機(jī)通過此偏移值將數(shù)據(jù)重組成完整的數(shù)據(jù)報。

  總結(jié)

  IP協(xié)議雖然是我們司空見慣的一個協(xié)議,但是,對于其報頭結(jié)構(gòu),報頭中每個字段的含義,還是需要我們不斷學(xué)習(xí),才能真正理解IP協(xié)議的精髓。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉