1. 程式人生 > >IP資料包的格式及分片

IP資料包的格式及分片

一、IP資料包的報文格式  

 首先我們需要了解資料報的格式:

spacer.gif


1-1.版本4位,表示版本號,目前最廣泛的是4=B1000,即常說的IPv4;相信IPv6以後會廣泛應用,它能給世界上每個鈕釦都分配

       一個IP地址。

1-2.頭長4位,資料包頭部長度。它表示資料包頭部包括多少個32位長整型,也就是多少個4位元組的資料。無選項則為5(紅色部分)。

1-3.服務型別,包括8個二進位制位,每個位的意義如下:

       過程欄位:3位,設定了資料包的重要性,取值越大資料越重要,取值範圍為:0(正常)~ 7(網路控制)

       延遲欄位:1位,取值:0(正常)、1(期特低的延遲)

       流量欄位:1位,取值:0(正常)、1(期特高的流量)

       可靠性欄位:1位,取值:0(正常)、1(期特高的可靠性)

       成本欄位:1位,取值:0(正常)、1(期特最小成本)

       保留欄位:1位 ,未使用

1-4.包裹總長16位,當前資料包的總長度,單位是位元組。當然最大隻能是65535,及64KB。

2-1.重組標識16位,傳送主機賦予的標識,以便接收方進行分片重組。

2-2.標誌3位,他們各自的意義如下:

       保留段位(2):1位,未使用

       不分段位(1):1位,取值:0(允許資料報分段)、1(資料報不能分段)

       更多段位(0):1位,取值:0(資料包後面沒有包,該包為最後的包)、1(資料包後面有更多的包)

2-3.段偏移量13位,與更多段位組合,幫助接收方組合分段的報文,以位元組為單位。

3-1.生存時間8位,經常ping命令看到的TTL(Time To Live)就是這個,每經過一個路由器,該值就減一,到零丟棄。

3-2.協議程式碼8位,表明使用該包裹的上層協議,如TCP=6,ICMP=1,UDP=17等。

3-3.頭檢驗和16位,是IPv4資料包頭部的校驗和。

4-1.源始地址,32位4位元組,我們常看到的IP是將每個位元組用點(.)分開,如此而已。

5-1.目的地址,32位,同上。

6-1.可選選項,主要是給一些特殊的情況使用,往往安全路由會當作攻擊而過濾掉,普聯(TP_LINK)的TL-ER5110路由就能這麼做。

7-1.使用者資料。

二、分片

分片是分組交換的思想體現,也是IP協議解決的兩個主要問題之一。在IP協議中的分片演算法主要解決不同物理網路最大傳輸單元(MTU) 的不同造成的傳輸問題。但是分組在傳輸過程中不斷地分片和重組會帶來很大的工作量還會增加一些不安全的因素。我們將在這篇小論文中討論IP分片的原因、原理、實現以及引起的安全問題。

1、什麼是IP分片

IP分片是網路上傳輸IP報文的一種技術手段。IP協議在傳輸資料包時,將資料報文分為若干分片進行傳輸,並在目標系統中進行重組。這一過程稱為分片(fragmentation)。

2、為什麼要進行IP分片

每一種物理網路都會規定鏈路層資料幀的最大長度,稱為鏈路層MTU(Maximum Transmission Unit).IP協議在傳輸資料包時,若IP資料報加上資料幀頭部後長度大於MTU,則將資料報文分為若干分片進行傳輸,並在目標系統中進行重組。比如說,在乙太網環境中可傳輸最大IP報文大小(MTU)為1500位元組。如果要傳輸的資料幀大小超過1500位元組,即IP資料報長度大於1472(1500-20-8=1472,普通資料報)位元組,則需要分片之後進行傳輸。

3、IP分片原理及分析

分片和重新組裝的過程對傳輸層是透明的,其原因是當IP資料報進行分片之後,只有當它到達目的站時,才可進行重新組裝,且它是由目的端的IP層來完成的。分片之後的資料報根據需要也可以再次進行分片。

IP分片和完整IP報文差不多擁有相同的IP頭,ID域對於每個分片都是一致的,這樣才能在重新組裝的時候識別出來自同一個IP報文的分片。在IP頭裡面,16位識別號唯一記錄了一個IP包的ID,具有同一個ID的IP分片將會重新組裝;而13位片偏移則記錄了某IP片相對整個包的位置;而這兩個表中間的3位標誌則標誌著該分片後面是否還有新的分片。這三個標誌就組成了IP分片的所有資訊(將在後面介紹),接受方就可以利用這些資訊對IP資料進行重新組織。

1)標誌欄位的作用

標誌欄位在分片資料報中起了很大作用,在資料報分片時把它的值複製到每片中的標誌欄位的其中一個位元稱作“不分片”位,用其中一個位元來表示“更多的片”。除了最後一片外,其他每個組成資料報的片都要把該位元置1。片偏移欄位指的是該片偏移原始資料報開始處的位置。另外,當資料報被分片後,每個片的總長度值要改為該片的長度值。如果將標誌欄位的位元置1,則IP將不對資料報進行分片,若在某個中間路由器上需要對其分片,則僅僅把資料報丟棄併發送一個ICMP不可達差錯報文給源主機。如果不是特殊需要,則不應該置1;最右位元置1表示該報文不是最後一個IP分片。故意傳送部分IP分片而不是全部,則會導致目標主機總是等待分片消耗並佔用系統資源。某些分片風暴攻擊就是這種原理。這裡以乙太網為例,由於乙太網傳輸電氣方面的限制,每個乙太網幀都有最小的大小64bytes最大不能超過1518bytes,拋去乙太網幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗部分4Bytes,那麼剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes,這就是前面所說的MTU的值。這個也是網路層協議非常關心的地方,因為網路層的IP協議會根據這個值來決定是否把上層傳達下來的資料進行分片。就好比一個盒子沒法裝下一大塊麵包,我們需要把麵包切成片,裝在多個盒子裡面一樣的道理。

下面是標誌位在IP首部中的格式以及各個標誌的意義:

Identification

R

DF

MF

Fragment Offset

R:保留未用;DF:Don’t Fragment,“不分片”位,如果將這一位元置1,IP 層將不對資料報進行分片;MF:More Fragment,“更多的片”,除了最後一片外,其它每個組成資料報的片都要把位元置1;Fragment Offset:該片偏移原始資料包開始處的位置。偏移的位元組數是該值乘以8。

2)MTU原理

  當兩臺遠端PC需要通訊的時候,它們的資料需要穿過很多的路由器和各種各樣的網路媒介才能到達對端,網路中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細的水管組成(MTU不同)通過這段水管最大水量就要由中間最細的水管決定。

對於網路層的上層協議而言(這裡以TCP/IP協議族為例)它們對“水管”粗細不在意,它們認為這個是網路層的事情。網路層IP協議會檢查每個從上層協議下來的資料包的大 小,並根據本機MTU的大小決定是否作“分片”處理。分片最大的壞處就是降低了傳輸效能,本來一次可以搞定的事情,分成多次搞定,所以在網路層更高一層(就是傳輸層) 的實現中往往會對此加以注意!有些高層因為某些原因就會要求我這個麵包不能切片,我要完整地面包,所以會在IP資料包包頭裡面加上一個標籤:DF(Don‘t Fragment)。這樣當這個IP資料包在一大段網路(水管裡面)傳輸的時候,如果遇到MTU小於IP資料包的情況,轉發裝置就會根據要求丟棄這個資料包。然後返回一個錯誤資訊給傳送者。這樣往往會造成某些通訊上的問題,不過幸運的是大部分網路鏈路MTU都是1500或者大於1500(僅X.25網路的576和點對點網路的296小於1500)。

對於UDP協議而言,這個協議本身是無連線的協議,對資料包的到達順序以及是否正確到達並不關心,所以一般UDP應用對分片沒有特殊要求。

對於TCP協議而言就不一樣了,這個協議是面向連線的協議,對於TCP協議而言它非常在意資料包的到達順序以及是否傳輸中有錯誤發生。所以有些TCP應用對分片有要求---不能分片(DF)。

3)MSS的原理

MSS(Maxmum Sigmentation Size)就是TCP資料包每次能夠傳輸的最大資料分段。為了達到最佳的傳輸效能TCP協議在建立連線的時候通常要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP資料包包頭的大小20位元組和TCP資料段的包頭20位元組)所以往往MSS為1460。通訊雙方會根據雙方提供的MSS值的最小值確定為這次連線的最大MSS值。

當IP資料報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當資料報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的資訊讓接收端能正確組裝這些資料報片。

    儘管IP分片過程看起來是透明的,但有一點讓人不想使用它:即使只丟失一片資料也要重傳整個資料報。因為IP層本身沒有超時重傳的機制——由更高層來負責超時和重傳(TCP有超時和重傳機制,但UDP沒有。一些UDP應用程式本身也執行超時和重傳)。當來自TCP報文段的某一片丟失後,TCP在超時後會重發整個TCP報文段,該報文段對應於一份IP資料報。沒有辦法只重傳資料報中的一個數據報片。事實上,如果對資料報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道資料報是如何被分片的。就這個原因,經常需要避免分片。

4、IP分片演算法的原理

分片重組是IP層一個最重要的工作,其處理的主要思想:當資料包從一個網路A進入另一個網路B時,若原網路的資料包大於另一個網路或者介面的MTU長度,則需要進行分片(若設定DF為1,則丟棄,並回送ICMP不可達差錯報文)。因而在IP資料包的報頭有若干標識域註明分片包的共同標識號、分片的偏移量、是否最後一片及是否允許分片。傳輸途中的閘道器利用這些標識域進可能的再行分片,目有主機把收到的分片進行重組以恢重資料。因此,分片包在經過網路監測裝置、安全裝置、系統管理裝置時,為了獲取資訊、處理資料,都必須完成資料包的分片或重組。

5、IP分片步驟

    一個未分片的資料報的分片資訊欄位全為0,即多個分片標誌位為 0,並且偏移量為0,分片一個數據報需要經過一下步驟

(1)檢查DF標誌位,檢視是否允許分片,如果設定了該位,則資料報將被丟棄 ,並將ICMP錯誤返回給源端

(2)基於MTU值,把資料欄位分成兩個或對個部分,除了最後的資料 部分外,所有新建的資料選項 長度必須為8位元組的倍數

(3)每個資料被放入一個IP資料報,這些資料報的包頭略微改了原先的報文頭

(4)除了最後的資料報分片外,所有的分片都設定了多個分片標誌位

(5)每個分片中的片偏移量欄位設為這個資料部分在原來資料報中所佔的位置,這個位置相對於原來未分片資料報中的開頭處。
(6)如果在原來的資料報中包括了選項,則選項型別位元組的高位位元組決定了這個資訊是被複制到所有分片資料報,還是隻複製到第一個資料報。
(7)設定新資料報的報文頭欄位及總長度欄位。
(8)重新計算報文頭部校驗和欄位。

此時這些分片資料報如一個完整的IP資料報一樣被轉發,IP獨立的處理每個資料報分片,資料報分片能夠通過不同的路由 ,到達目的,如果他們通過了那些規定了更小的MTU路由,還能夠進一步對他們進行分片

在目的主機上,資料被 重新組合成原來的資料報 ,傳送主機設定的標示欄位與資料報中的袁IP地址和目的IP地址一起使用,分片過程不改變這個欄位

6、重組

    為了重新組合這些資料報分片,接受主機在第一個分片到達時分配一個儲存緩衝區。這個主機還將啟動一個計時器。當資料報的後續分片到達時,資料被複制到緩衝區儲存器中片偏移量指定的位置,當所有分片都到達時,完整的未分片的原始資料報就被恢復了。

    如果計時器超時並且分片保持尚未認可狀態,則資料將被丟棄。這個計時器的初始值為IP資料報的生存期值,它依賴於實現的,一些實現允許對他進行配置。

重組步驟

在接受方,一個由傳送方發出的原始資料IP報,將所有的分片重新組合,才能夠提交到上一層協議,每一個將被重組的IP資料報都用一個ipq結構來表示

為了能夠有效提高組裝分片,用於儲存分片的結構必須做到以下幾點

(1)快速定位某一個數據報的一組分組

(2)在屬於某一個數據報的一組分片中快速插入新的分片

(3)有效的判斷一個數據報的所有分片是否已經被全部接收

(4)具有重組超時機制,如果在重組完成之前超時溢位,則刪除該資料報的所有內容

相關推薦

DNS資料格式內容詳解

1 域名解析過程 域名解析總體可分為兩大步驟,第一個步驟是本機向本地域名伺服器發出一個DNS請求報文,報文裡攜帶需要查詢的域名;第二個步驟是本地域名伺服器向本機迴應一個DNS響應報文,裡面包含域名對應的IP地址或者別名等。從下面對jocent.me進行域名解析的報文中可明顯看出這兩大步驟。注意:

IP資料格式如何判斷報文型別

1. IP資料報 TCP/IP協議定義了一個在因特網上傳輸的包,稱為IP資料包。IP資料報(IP Datagram) 由首部和資料兩部分組成,首部的前一部分是固定長度,共20位元組,是所有IP資料報必須具有的。在首部的固定部分的後面是一些可選欄位,其長度是可變

IP資料格式

版本:佔4位,指IP協議的版本.通訊雙方使用的IP協議版本必須一致.日前廣泛使用的 IP協議版本號為 4 (即 IPv4).IPv6 目前還處於起步階段.首部長度:佔 4 位,可表示的最大十進位制數值是15.請注意,這個欄位所表示數的單位是32位字 (1個32位字長是4 位元組),因此,當 IP 的首部長度為

IP資料格式分片

一、IP資料包的報文格式    首先我們需要了解資料報的格式: 1-1.版本4位,表示版本號,目前最廣泛的是4=B1000,即常說的IPv4;相信IPv6以後會廣泛應用,它能給世界上每個鈕釦都分配        一個IP地址。 1-2.頭長4位,資料包頭

IP協議IP資料詳解

回憶一下網路層的主要功能:通過TCP或者UDP協議繪製網路地圖,資料包選取合適的路徑進行傳輸(網路層基本單位 : 資料包 Package) (1)編址(目標端的IP地址),資料傳輸的過程當中就必須表明

OSI七層模型對應的資料格式

我接觸網路協議也比較久了,不過一直都只懂個皮毛,最近比較深入研究之後終於有點豁然開朗的感覺。也因為網路上各種協議的資料太多但是都比較分散雜亂,所以在這裡做點總結,給大家提供一些資料也備自己以後查閱。  鑑於有些朋友沒有耐心完全看完整篇文章,所以我先給大家一個相當權威網站

計算機網路IP資料的3個標誌位以及IP資料報的分片和重組過程

1.3個標誌位是哪3位? 目前只有兩位有意義 <1>標誌位中的最低位記為MF(More Fragment)。MF=1即表示後面"還有分片"的資料報。MF=0表示這已是若干資料報片中的最後一個。 <2>標誌欄位中間的以為記為DF(Don't Fragm

分析IP協議資料格式

目的 (1)掌握IP協議的作用和格式; (2)理解IP資料包首部各欄位的含義; (3)掌握IP資料包首部校驗和的計算方法。 工具 (1)軟體工具:抓包分析工具(wireshark); (2)作業系統:Windows7 Dos ;  (3)區域網環境。 原理 (1)IP

ip資料格式ip資料分片

IPv4資料報格式:上圖表示的資料,最高位在左邊,記為0位;最低位在右邊,記為31位。在網路中傳輸資料時,先傳輸0~7位,其次是8~15位,然後傳輸16~23位,最後傳輸24~31位。由於TCP/IP協議頭部中所有的二進位制數在網路中傳輸時都要求以這種順序進行,因此把它稱為網

Linux核心bug引起Mesos、Kubernetes、Docker的TCP/IP資料失效

最近發現Linux核心bug,會造成使用veth裝置進行路由的容器(例如Docker on IPv6、Kubernetes、Google Container Engine和Mesos)不檢查TCP校驗碼(checksum),這會造成應用在某些場合下,例如壞的網路裝置,接收錯誤資料。這個bug

BLE 資料格式

轉自: https://blog.csdn.net/Life_Maze/article/details/79634097 廣播態: LSB MSB 鏈路層幀(10-47 Octet)

IP資料格式

IP協議提供不可靠無連線的資料報傳輸服務,IP層提供的服務是通過IP層對資料報的封裝與拆封來實現的。IP資料報的格式分為報頭區和資料區兩大部分,其中報頭區是為了正確傳輸高層資料而加的各種控制資訊,資料區包括高層協議需要傳輸的資料。 IP資料報的格式如下: 注意,上圖表示的資料,最高位在

本機發送IP資料

本地傳送IP資料包是指資料包包括:傳輸層產生的資料包、裸IP、SCTP、IGMP,TCP和網路層的介面函式是ip_queue_xmit,UDP和網路層介面函式是ip_push_pending_frames,資料包對外發送在核心要做以下幾件事情。 a、查詢下一個站點 IP層需要知道完成資料包輸

ip資料經由路由轉發的時候源ip MAC,目的ip 目的MAC是否改變

轉載自https://blog.csdn.net/yiluyangguang1234/article/details/56666109 ip資料包經由路由轉發的時候源ip,目的ip是否改變? 最近面試網路方面的經常問到這個問題,答案是不能改變的,*除非做了nat轉換才能改變。 不過mac

乙太網幀格式IP資料格式、TCP段格式+UDP段格式 詳解

1、ISO開放系統有以下幾層: 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網路層 2 資料鏈路層 1 物理層 2、TCP/IP 網路協議棧分為應用層(Application)、傳輸層(Transport)、網

Wireshark 認識捕獲的分析資料各個分層協議的介紹)

綜述:認識Wireshark捕獲資料包 當我們對Wireshark主視窗各部分作用瞭解了,學會捕獲資料了,接下來就該去認識這些捕獲的資料包了。Wireshark將從網路中捕獲到的二進位制資料按照不同的協議包結構規範,顯示在Packet Details面板中。為了幫助使用者能

使用Wireshark捕獲資料幀和IP資料教程

About Wireshark   Wireshark is one of the world's foremost network protocol analyzers, and is the standard in many parts of the in

【 TCP/IP 】乙太網(RFC 894)幀格式、 ARP資料格式IP資料格式

乙太網(RFC 894)幀格式乙太網的幀格式如下所示:其中的源地址和目的地址是指網絡卡的硬體地址(也叫MAC地址),長度是48位,是在網絡卡出廠時固化的。用ifconfig命令看一下,“HWaddr 00:15:F2:14:9E:3F”部分就是硬體地址。協議欄位有三種值,分別

python+pypcap+dpkt抓取IP資料

1.簡介 pypcap庫是一款基於libpcap封裝的為python語言提供介面的抓包庫。 dpkt則是用來解析資料包的庫。 pip install pypcap pip install dpkt 2. #coding:utf-8 import pc

IP資料頭部,TCP頭部,偽TCP頭部結構定義

我自己整理出來的彙編版本 ;;IP資料包頭部結構定義 ip_head struct      h_lenver db ? ;4位IP版本號+4位首部長度      TOS db ? ;8位服務型別      tcp_len dw ? ;16位TCP資料包總長度     ident dw ? ;16位標識