IP分片重組

2021-05-10 01:50:37 字數 1540 閱讀 7437

libnids ip重組 收藏

1、 ip分片

任何ip層接收到乙份要傳送的ip資料報時,它要判斷向本地哪個介面傳送資料,並查詢該介面的mtu。ip把mtu與資料報的長度進行比較,如果需要則進行分片。分片可以發生在原始傳送端主機上,也可以傳送在中間路由器上。ip資料報分片後,只有到達目的主機後才進行重灌。

ip首部與分片有關的字段:

(1)對於每份ip資料報來說,都有乙個標識字段,該值在分片時被複製到每個片中。

(2)標誌欄位用其中乙個bit表示「更多的片」,除最後一片外,其他每個分片都要設定為1。

(3)片偏移欄位指的是該片偏移原始資料報開始處的位置。

(4)資料報被分片後,每個片的總長度要改為該片的長度值。

(5)標誌欄位中有乙個bit表示「不分片」,如果該位1,ip將不對資料報進行分片。

ip報即使丟失一片資料報也要重傳整個資料報。為什麼呢?因為ip層沒有超時重傳的機制,必須由更高層負責超時重傳。

總結:三個字段

標識字段(ip_id):標識特定資料報的分片

標誌字段(ip_off的3個高位位元)

偏移字段(ip_off的13個低位位元)

幾個區別

普通ip包:ip_off、mf 為 0

最後乙個分片包: ip_off > 0、mf 為 0

其它分片包:ip_off ≥ 0、mf 為 1

2、 資料結構設計

鍊錶_frag

結點結構ipfrag,儲存乙個分片

作用:儲存同屬於乙個ip包的所有分片資料

鍊錶中各結點按ip_off由小到大排序

鍊錶_ipq

結點結構ipq,作為_frag的頭結點,描述屬於同乙個ip包的所有分片資料的共同特徵

作用:將目的位址相同的分片組織到一起

鍊錶_hostfrag

結點結構hostfrags,作為_ipq的頭結點

作用:將目的位址不同但hash值相同的分片資料組織到地起

hash表fragtable

實現:struct hostfrags **fragtable

作用: fragtable[index]為_hostfrag的頭結點

hash表及三個鍊錶之間的關係圖

3、 分片重組流程

4、 **及相關注釋

5、 幾個細節

5.1 step 14:在_frag鍊錶中插入的位置

**:if (next->offset >= offset)

break;

當prev和next結點都存在時滿足的條件

offset∊ ( prev->offset,next->offset]

隱含意思:當前分片與prev之前的結點無重疊,與prev可能有重疊

5.2 step 15:和prev有重疊,調整當前分片

調整前圖

調整後圖

step 15:和prev有重疊,調整當前分片後沒有判斷當前資料的長度,之後會建立乙個無用結點!

IP分片與重組

物理網路層一般要限制每次傳送的資料幀的最大長度,當ip層接收到乙份要傳送的ip資料報時,它要判斷向本地哪個介面傳送資料,並查詢該介面獲得其mtu。ip把mtu與資料報長度進行比較,如果資料報大於mtu則進行分片。分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。mtu指定了網路中可傳輸資料報...

分片報文的最後一片 IP分片(碎片)重組簡單概念

鏈路層具有最大傳輸單元mtu這個特性,它限制了資料幀的最大長度,不同的網路型別都有乙個上限值。乙太網的mtu是1500,可以用 netstat i 命令檢視這個值。如果ip層有資料報要傳,而且資料報的長度超過了mtu,那麼ip層就要對資料報進行分片 fragmentation 操作,使每一片的長度都...

IP分片原理

ip 分片原理 ip分片是網路上傳輸 ip報文的一種技術手段。ip協議在傳輸資料報時,將資料報文分為若干分片進行傳輸,並在目標系統中進行重組。不同的鏈路型別規定有不同最大長度的鏈路層資料幀,稱為鏈路層 mtu 最大傳輸單元 常見乙太網的 mtu為 1500 若ip 協議在傳輸資料報時,ip報文長度大...