爲何要分片安全
不一樣的鏈路類型可以支持的最大傳輸單元值(MTU: Maxitum Transmission Unit)主要是由相關RFC文檔規定的,常見的以太網鏈路的MTU值爲1500,若是須要轉發的IP報文超出其轉發接口的MTU值,則在轉發該報文以前,須要將其分片,分爲多個適合於該鏈路類型傳輸的報文,這些分片報文在到達接收方的時候,由接收方完成重組。網絡
各類常見鏈路類型的MTU值以下圖所示: post
報文的分片和重組性能
咱們先來看一下分片的過程,爲了簡單起見,我就用《TCPIP詳解卷一》第11章《UDP:用戶數據報協議》中關於IP分片的案例,應用進程將1473字節應用字段交給UDP處理,UDP加上8字節的UDP報頭以後,交給IP層處理,IP層在轉發以前,發現該報文長度超出轉發接口的MTU,所以須要分片,分爲兩個IP分組,以下圖所示: spa
從上圖能夠看出原始的IP報文通過分片後,只有第一個分片報文是帶有四層信息的,後續報文均不帶四層信息,爲作直觀展現,我找了一個實際環境下抓取的分片報文,以下圖所示: 3d
這是分片的第一個報文,咱們能夠看到該報文IP層封裝的上層協議爲ICMP協議,這是一個ping報文(上層協議信息),咱們再來看一下後續分片報文的解碼:blog
這是分片後續報文,咱們能看到封裝的是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)置一來實現,而這可能給應用帶來一些難以預料的麻煩。下一篇我將介紹端系統如何處理這種情況,請你們關注。