IP分片(IP Fragment)


為什么要分片

       不同的鏈路類型能夠支持的最大傳輸單元值(MTU: Maxitum Transmission Unit)主要是由相關RFC文檔規定的,常見的以太網鏈路的MTU值為1500,如果需要轉發的IP報文超出其轉發接口的MTU值,則在轉發該報文之前,需要將其分片,分為多個適合於該鏈路類型傳輸的報文,這些分片報文在到達接收方的時候,由接收方完成重組。

       各種常見鏈路類型的MTU值如下圖所示: 

點擊查看原圖


報文的分片和重組

       我們先來看一下分片的過程,為了簡單起見,我就用《TCPIP詳解卷一》第11章《UDP:用戶數據報協議》中關於IP分片的案例,應用進程將1473字節應用字段交給UDP處理,UDP加上8字節的UDP報頭之后,交給IP層處理,IP層在轉發之前,發現該報文長度超出轉發接口的MTU,因此需要分片,分為兩個IP分組,如下圖所示: 

點擊查看原圖


       從上圖可以看出原始的IP報文經過分片后,只有第一個分片報文是帶有四層信息的,后續報文均不帶四層信息,為做直觀展示,我找了一個實際環境下抓取的分片報文,如下圖所示: 

點擊查看原圖

       這是分片的第一個報文,我們可以看到該報文IP層封裝的上層協議為ICMP協議,這是一個ping報文(上層協議信息),我們再來看一下后續分片報文的解碼:

點擊查看原圖

       這是分片后續報文,我們能看到封裝的是ICMP協議,但是封裝的上層協議的具體信息就無法看到了。

       IP數據報被分片之后,所有分片報文的IP報頭中的源IP、目的IP、IP標識、上層協議等信息都是一樣的(TTL不一定是一樣的,因為不同的分片報文可能會經過不同的路由路徑達到目的端),不同的地方在於分片標志位和分片偏移量,而接收方正是根據接收到的分片報文的源IP、目的IP、 IP標識、分片標志位、分片偏移量來對接收到的分片報文進行重組

       接收方根據報文的源IP、目的IP、IP標識將接收到的分片報文歸為不同原始IP數據報的分片分組;分片標志中的MF位(More Fragment)標識了是否是最后一個分片報文,如果是最后一個分片報文,則根據分片偏移量計算出各個分片報文在原始IP數據報中的位置,重組為分片前的原始IP報文。如果不是最后一個分片報文,則等待最后一個分片報文達到后完成重組。

分片帶來的問題

1, 分片帶來的性能消耗

       分片和重組會消耗發送方、接收方一定的CPU等資源,如果存在大量的分片報文的話,可能會造成較為嚴重的資源消耗;
       分片對接收方內存資源的消耗較多,因為接收方要為接收到的每個分片報文分配內存空間,以便於最后一個分片報文到達后完成重組。

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

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

3, 分片攻擊

       黑客構造的分片報文,但是不向接收方發送最后一個分片報文,導致接收方要為所有的分片報文分配內存空間,可由於最后一個分片報文永遠不會達到,接收方的內存得不到及時的釋放(接收方會啟動一個分片重組的定時器,在一定時間內如果無法完成重組,將向發送方發送ICMP重組超時差錯報文,關於ICMP重組超時差錯,請大家參考本博客《ICMP重組超時》一文),只要這種攻擊的分片報文發送的足夠多、足夠快,很容易占滿接收方內存,讓接收方無內存資源處理正常的業務,從而達到DOS的攻擊效果。

4, 安全隱患

       由於分片只有第一個分片報文具有四層信息而其他分片沒有,這給路由器、防火牆等中間設備在做訪問控制策略匹配的時候帶來了麻煩。
       如果路由器、防火牆等中間設備不對分片報文進行安全策略的匹配檢測而直接放行IP分片報文,則有可能給接收方帶來安全隱患和威脅,因為黑客可以利用這個特性,繞過路由器、防火牆的安全策略檢查對接收方實施攻擊;
       如果路由器、防火牆等中間設備對這些分片報文進行重組后在匹配其安全策略,那么又會對這些中間設備的資源帶來極大的消耗,特別是在遇到分片攻擊的時候,這些中間設備會在第一時間內消耗完其所有內存資源,從而導致全網中斷的嚴重后果。

       基於以上原因,很多應用程序都盡量避免分片的產生,其通過將IP報文的分片標志中的DF位(Don’t Fragment)置一來實現,而這可能給應用帶來一些難以預料的麻煩。下一篇我將介紹端系統如何處理這種狀況,請大家關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM