IP分片原理

2021-07-04 09:07:35 字數 2867 閱讀 3448

**ip

分片原理

ip分片是網路上傳輸

ip報文的一種技術手段。

ip協議在傳輸資料報時,將資料報文分為若干分片進行傳輸,並在目標系統中進行重組。

不同的鏈路型別規定有不同最大長度的鏈路層資料幀,稱為鏈路層

mtu(最大傳輸單元)。常見乙太網的

mtu為

1500

,若ip

協議在傳輸資料報時,

ip報文長度大於**介面的

mtu,則將資料報文分為若干分片進行傳輸,分片報文到達接收方時,由接收方完成重組。

對於不同的傳輸層協議,在

ip層上,需不需要進行分片是不同的:

對於tcp

來說,它是盡量避免分片的。因為當在

ip層進行了分片後,如果其中的某片資料丟失,則需對整個資料報進行重傳。因為

ip層本身沒有超時重傳機制,當來自

tcp報文段的某一片丟失後,

tcp在超時後重發整個

tcp報文段,該報文段對應於乙份

ip資料報,沒有辦法只重傳資料報中的乙個資料報片。而且如果對資料報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道資料報是如何被分片的,因此基於這種原因,

tcp是經常要避免分片的。

那麼tcp

層是如何避免

ip層的分片呢?首先,

tcp在建立連線時會進行

3次握手,而在這

3次握手中,客戶端和服務端通常會協商乙個值,那就是

mss(最長報文大小),用來表示本段所能接收的最大長度的報文段。

mss=mtu-tcp

首部大小

-ip首部大小,

mtu值通過查詢鏈路層得知。

當兩端確認好

mss後進行通訊,

tcp層往

ip層傳輸資料時,如果

tcp層緩衝區的大小大於

mss,那麼

tcp層都會將其中的資料

分組進行傳輸,這樣就避免了在

ip層進行分片。

對於udp

而言,由於

udp是不需要保證可靠性的,沒有超時和重傳機制,這使得

udp很容易導致

ip分片。

那麼資料報被分片後是怎樣的呢,又是以何種演算法進行分片呢?首先我們回憶

ip首部:

對於每份

ip資料報來說,其

16位標識欄位都包含乙個唯一值。在資料報被分片時,這個值同時被複製到每個片中。在ip

首部中,我們看到有乙個佔了

3位的標誌字段,其中第

1位作為保留字段;第

2位分段用來表示乙個資料報是否允許在

ip層被分片;而第

3位更多分片字段,則是當資料報被分片時,讓接收端知道在什麼時候完成所有的分片組裝,除了最後一片外,其他每個組成資料報的片都要把該位元置1。

而如果將其中的分段標誌位元位置

1,表示不允許

ip層對資料報進行分片。例如當路由器收到乙份需要分片的資料報,而在

ip首部又設定了不分片(

df)的標誌位元,路由器會丟棄資料報並傳送乙個

icmp

差錯報文(「需要進行分片但設定了不分片位元」)。

ip首部中

13位的偏移量字段表示

ip分片在整個資料流中的位置,第乙個資料報分片的偏移量置為

0,而後續的分片偏移量則是根據網路的

mtu大小設定,且必須為

8的整數倍。

需要注意的是,任何傳輸層的首部只出現在第一片資料中,後續報文均不帶傳輸層資訊。

這是ip

分片的第乙個資料分片,可以看出其

ip的上層協議為

icmp

協議,而在後續的分片報文中卻無法看到上層協議的具體資訊。

接收方在收到經過

ip層分片的資料報文後,首先根據分片標誌中的更多分段位判斷是否是最後乙個分片報文,如果是,則根據分片偏移量計算各個分片報文在原始資料報中的位置,進行重組。如果不是最後乙個分片,則需等待所有分片到達後再完成重組。

分片帶來的問題:

1.分片帶來的效能消耗

分片和重組會消耗傳送方、接收方一定的

cpu等資源,如果存在大量的分片報文的話,可能會造成較為嚴重的資源消耗;

分片對接收方記憶體資源的消耗較多,因為接收方要為接收到的每個分片報文分配記憶體空間,以便於最後乙個分片報文到達後完成重組。

2.分片丟包導致的重傳問題

如果某個分片報文在網路傳輸過程中丟失,那麼接收方將無法完成重組,如果應用程序要求重傳的話,傳送方必須重傳所有分片報文而不是僅重傳被丟棄的那個分片報文,這種效率低下的重傳行為會給端系統和網路資源帶來額外的消耗。

3.分片攻擊

黑客構造的分片報文,但是不向接收方傳送最後乙個分片報文,導致接收方要為所有的分片報文分配記憶體空間,可由於最後乙個分片報文永遠不會達到,接收方的記憶體得不到及時的釋放

(接收方會啟動乙個分片重組的定時器,在一定時間內如果無法完成重組,將向傳送方傳送

icmp

重組超時差錯報文,

,只要這種攻擊的分片報文傳送的足夠多、足夠快,很容易佔滿接收方記憶體,讓接收方無記憶體資源處理正常的業務,從而達到

dos的攻擊效果。

4.安全隱患

由於分片只有第乙個分片報文具有四層資訊而其他分片沒有,這給路由器、防火牆等中間裝置在做訪問控制策略匹配的時候帶來了麻煩。

如果路由器、防火牆等中間裝置不對分片報文進行安全策略的匹配檢測而直接放行

ip分片報文,則有可能給接收方帶來安全隱患和威脅,因為黑客可以利用這個特性,繞過路由器、防火牆的安全策略檢查對接收方實施攻擊;

如果路由器、防火牆等中間裝置對這些分片報文進行重組後在匹配其安全策略,那麼又會對這些中間裝置的資源帶來極大的消耗,特別是在遇到分片攻擊的時候,這些中間裝置會在第一時間內消耗完其所有記憶體資源,從而導致全網中斷的嚴重後果。

IP分片重組

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

IP分片和TCP分片的區別

前段時間要做乙個關於網路嗅探的程式,裡面要重組ip分片,tcp分片.但做的時候忽視了乙個很重要的東西 ip分片與tcp分片弄混淆了.首先宣告 tcp分片應該稱為tcp分段.區別 1.ip分片產生的原因是網路層的mtu tcp分段產生原因是mss.2.ip分片由網路層完成,也在網路層進行重組 tcp分...

IP分片與TCP分片的考慮

剛剛終於想明白了關於tcp分片後,為什麼抓包是從來沒看到過ip分片,而在pingicmp報文的時候,很容易就出現ip分片。之前考慮問題只考慮了一方面 作為接收方,tcp的mss欄位和ip的mtu欄位,在tcp連線的前兩次握手時,溝通好了,以小的值為最大傳輸位元組。一般情況下mtu 40 mss。具體...