IP分區技術概述(轉自zkheartboy’s Linux life)

來源:互聯網
上載者:User

 在應用程式中,必須關心IP資料的長度。如果它超過網路的MTU,那麼就要對IP資料報進行分區。如果需要,源目的端之間的每個網路都要進行分區,並不只是發送端主機串連第一個網路才這樣做。在此文中,將討論IP分區的一些原理及其在分區中所需要的幾個元素(此文只討論MTU最大傳輸單位和MSS最大資料分段),本文對乙太網路的例子作了初略的分解。 關鍵字:IP分區,MTU,MSS 引言 分區是封包交換的思想體現,也是IP 協議解決的兩個主 要問題之一。在IP 協議中的分區演算法主要解決異種網最大 傳輸單元(MTU) 的不同.但是分組在傳輸過程中不斷地分區和重組會帶來很大的工作量還會增加一些不安全的因素。 本文: 一、什麼是IP分區 IP分區是網路上傳輸IP報文的一種技術手段。IP協議在傳輸資料包時,將資料報文分為若干分區進行傳輸,並在目標系統中進行重組。這一過程稱為分區( fragmentation)。 二、為什麼要進行IP分區 通常要傳輸的IP報文的大小超過最大傳輸單位MTU(Maximum Transmission Unit)時就會產生IP分區情況。IP分區通常發生在網路環境中。比如說,在乙太網路(Ethernet)環境中可傳輸最大IP報文大小(MTU)為1500位元組。而傳輸的報文大小要比1500位元組大,這個時候就需要利用到分區技術,經分區後才能傳輸此報文。另外,使用UDP很容易導致IP分區,而很難強迫TCP發送一個需要進行分區的報文。 三、IP分區原理及分析 分區和重新組裝的過程對傳輸層是透明的,其原因是當IP資料報進行分區之後,只有當它到達下一站時,才可進行重新組裝,且它是由目的端的IP層來完成的。分區之後的資料報根據需要也可以再次進行分區。 IP分區和完整IP報文差不多擁有相同的IP頭,ID域對於每個分區都是一致的,這樣才能在重新組裝的時候識別出來自同一個IP報文的分區。在IP頭裡面,16位識別號唯一記錄了一個IP包的ID,具有同一個ID的IP分區將會重新組裝;而13位片位移則記錄了某IP片相對整個包的位置;而這兩個表中間的3位標誌則標誌著該分區後面是否還有新的分區。這三個標誌就組成了IP分區的所有資訊,接受方就可以利用這些資訊對IP資料進行重新組織。 1、標誌欄位的作用 標誌欄位在分區資料報中起了很大作用,在資料報分區時把它的值複製到每片中。標誌欄位的其中一個位元稱作“不分區”位,用其中一個位元來表示“更多的片”。除了最後一片外,其他每個組成資料報的片都要把該位元置1。片位移欄位指的是該片位移未經處理資料報開始處的位置。另外,當資料報被分區後,每個片的總長度值要改為該片的長度值。如果將標誌欄位的位元置1,則IP將不對資料報進行分區。相反把資料報丟棄並發送一個I C M P差錯報文並通知源主機廢棄的原因。如果不是特殊需要,則不應該置1;最右位元置1表示該報文不是最後一個IP分區。 故意發送部分IP分區而不是全部,則會導致目標主機總是等待分區消耗並佔用系統資源。某些分區風暴攻擊就是這種原理。 這裡以乙太網路為例,由於乙太網路傳輸電氣方面的限制,每個乙太網路幀都有最小的大小64bytes最大不能超過1518bytes, 拋去乙太網路幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校正部分4Bytes,那麼剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes,這就是前面所說的MTU的值。這個也是網路層協議非常關心的地方,因為網路層的IP協議會根據這個值來決定是否把上層傳達下來的資料進行分區。就好比一個盒子沒法裝下一大塊麵包,我們需要把麵包切成片,裝在多個盒子裡面一樣的道理。 2、MTU原理  當兩台遠程PC互聯的時候,它們的資料需要穿過很多的路由器和各種各樣的網路媒介才能到達對端,網路中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細的水管決定。  對於網路層的上層協議而言(這裡以TCP/IP協議族為例)它們對水管粗細不在意它們認為這個是網路層的事情。網路層IP協議會檢查每個從上層協議下來的資料包的大小,並根據本機MTU的大小決定是否作“分區”處理。分區最大的壞處就是降低了傳輸效能,本來一次可以搞定的事情,分成多次搞定,所以在網路層更高一層(就是傳輸層)的實現中往往會對此加以注意!有些高層因為某些原因就會要求我這個麵包不能切片,我要完整地麵包,所以會在IP資料包包頭裡面加上一個標籤:DF(Donot Fragment)。這樣當這個IP資料包在一大段網路(水管裡面)傳輸的時候,如果遇到MTU小於IP資料包的情況,轉寄裝置就會根據要求丟棄這個資料包。然後返回一個錯誤資訊給寄件者。這樣往往會造成某些通訊上的問題,不過幸運的是大部分網路鏈路MTU都是1500或者大於1500。   對於UDP協議而言,這個協議本身是不需連線的協議,對資料包的到達順序以及是否正確到達不甚關心,所以一般UDP應用對分區沒有特殊要求。   對於TCP協議而言就不一樣了,這個協議是連線導向的協議,對於TCP協議而言它非常在意資料包的到達順序以及是否傳輸中有錯誤發生。所以有些TCP應用對分區有要求---不能分區(DF)。 3、MSS的原理   MSS就是TCP資料包每次能夠傳輸的最大資料分段。為了達到最佳的傳輸效能TCP協議在建立串連的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP資料包包頭的大小20Bytes和TCP資料區段的包頭20Bytes)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值得最小值確定為這次串連的最大MSS值。 當IP資料報被分區後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當資料報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的資訊讓接收端能正確組裝這些資料報片。 儘管IP分區過程看起來是透明的,但有一點讓人不想使用它:即使只丟失一片資料也要重傳整個資料報。因為IP層本身沒有逾時重傳的機制——由更高層來負責逾時和重傳(T C P有逾時和重傳機制,但UDP沒有。一些UDP應用程式本身也執行逾時和重傳)。當來自T C P報文段的某一片丟失後,T C P在逾時後會重發整個T C P報文段,該報文段對應於一份IP資料報。沒有辦法只重傳資料報中的一個資料報片。事實上,如果對資料報分區的是中間路由器,而不是開始端點系統,那麼開始端點系統就無法知道資料報是如何被分區的。就這個原因,經常要避免分區。 五、IP分區演算法的原理 分區重組是IP層一個最重要的工作,其處理的主要思想:當資料包從一個網路A進入另一個網路B時,若原網路的資料包大於另一個網路的最大資料包的長度,必須進行分區。因而在IP資料包的前序有若干標識域註明分區包的共同標識號、分區的位移量、是否最後一片及是否允許分區。傳輸途中的網關利用這些標識域進行分區,目有主機把收到的分區進行重組以恢重資料。因此,分區包在經過網路監測裝置、安全裝置、系統管理裝置時,為了擷取資訊、處理資料,都必須完成資料包的分區或重組。 Identification R DF MF Fragment Offset R:保留未用;DF:Don’t Fragment,“不分區”位,如果將這一位元置1,IP 層將不對資料報進行分區;MF:More Fragment,“更多的片”,除了最後一片外,其它每個組成資料報的片都要把位元置1;Fragment Offset:該片位移未經處理資料包開始處的位置。位移的位元組數是該值乘以8。 六、總結此論文闡述了什麼是IP分區,並舉例說明了IP的分區現像及其特點。簡單論述了IP分區的原理。並加以重點分析了MTU,闡述了MTU在IP分區技術中所起的作用,簡略討論了ICMP不可達差錯,利用UDP觀察路徑MTU發現過程。簡述了MSS的作用以及其值是怎樣得來的。本文只是對IP分區作了一個小小的論述。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.