天天看點

IP資料報 格式參數詳解

IP協定提供不可靠無連接配接的資料報傳輸服務,IP層提供的服務是通過IP層對資料報的封裝與拆封來實作的。IP資料報的格式分為報頭區和資料區兩大部分,其中報頭區是為了正确傳輸高層資料而加的各種控制資訊,資料區包括高層協定需要傳輸的資料。

IP資料報的格式如下:

IP資料報 格式參數詳解

注意,上圖表示的資料,最高位在左邊,記為0位;最低位在右邊,記為31位。在網絡中傳輸資料時,先傳輸0~7位,其次是8~15位,然後傳輸16~23位,最後傳輸24~31位。由于TCP/IP協定頭部中所有的二進制數在網絡中傳輸時都要求以這種順序進行,是以把它稱為網絡位元組順序。在實際程式設計中,以其他形式存儲的二進制數必須在傳輸資料前使用網絡程式設計API相應的函數把頭部轉換成網絡位元組順序。

IP資料報各字段功能如下:

1)版本号:占用4位二進制數,表示該IP資料報使用的IP協定版本。目前Internet中使用的主要是TCP/IP協定族中版本号為4的IP協定。

2)頭長度:占用4位二進制位,此域指出整個報頭的長度(包括選項),該長度是以32位二進制數為一個計數機關的,接收端通過此域可以計算出報頭在何處結束及從何處開始讀資料。普通IP資料報(沒有任何選項)該字段的值是5(即20個位元組的長度)。

3)服務類型(TOS、type of service):占用8位二進制位,用于規定本資料報的處理方式。服務類型字段的8位分成了5個子域:

IP資料報 格式參數詳解

(1)—優先權(0-7)數越大,表示該資料報優先權越高。網絡中路由器可以使用優先權進行擁塞控制,如當網絡發生擁塞時可以根據資料報的優先權來決定資料報的取舍。

(2)—短延遲位D(Delay):該位置1時,資料報請求以短延遲信道傳輸,0表示正常延時。

(3)—高吞吐量位T(Throughput):該位置1時,資料報請求以高吞吐量信道傳輸,0表示普通。

(4)—高可靠位R(Reliability):該位置1時,資料報請求以高可靠性信道傳輸,0表示普通。

(5)—保留位。

目前在Internet中使用的TCP/IP協定大多數情況下網絡并未對TOS進行處理,但在實際程式設計時,有專門的函數來設定該字段的各域。一些重要的網際應用協定中都設定了建議使用的TOS值:

IP資料報 格式參數詳解

從上表可以看出,對于與使用者直接互動的應用,一般使用短延時;對于有大量資料需要進行傳輸的應用,一般選用高吞吐量;對于資料報要傳輸控制資訊的應用,一般選用高可靠性。在資料報的生存期内不支援TOS的,TOS字段就設定為0x00。

4)總長度:占用16位二進制位,總長度字段是指整個IP資料報的長度(報頭區+資料區),以位元組為機關。利用頭部長度字段和總長度字段就可以計算出IP資料報中資料内容的起始位置和長度。由于該字段長度為16位二進制數,是以理論上IP資料報最長可達65536個位元組(事實上受實體網絡的限制,要比這個數值小很多)。

5)生存時間(TTL,time to live):占用8位二進制位,它指定了資料報可以在網絡中傳輸的最長時間。實際應用中把生存時間字段設定成了資料報可以經過的最大路由器數。TTL的初始值由源主機設定(通常為32、64、128或256),一旦經過一個處理它的路由器,它的值就減1。當該字段為0時,資料報就丢棄,并發送ICMP封包通知源主機,是以可以防止進入一個循環回路時,資料報無休止地傳輸下去。

6)上層協定辨別:占用8位二進制位,IP協定可以承載各種上層協定,目标端根據協定辨別就可以把收到的IP資料報送到TCP或UDP等處理此封包的上層協定了。

常用網際協定編号:

IP資料報 格式參數詳解

7)校驗和:占用16位二進制數,用于協定頭資料有效性的校驗,可以保證IP報頭區在傳輸時的正确性和完整性。頭部檢驗和字段是根據IP協定頭計算出的檢驗和,它不對頭部後面的資料進行計算。

原理:發送端首先将檢驗和字段置0,然後對頭部中每16位二進制數進行反碼求和的運算,并将結果存在校驗和字段中。 由于接收方在計算過程中包含了發送方放在頭部的校驗和,是以,如果頭部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該是全1。

8)源位址:占用32位二進制數,表示發送端IP位址。

9)目的位址:占用32位二進制數,表述目的端IP位址。

======================IP資料報分片和重組======================

最大傳輸單元:

IP資料報在網際網路上傳輸時,可能要經過多個實體網絡才能從源端傳輸到目的端。不同的網絡由于鍊路層和媒體的實體特性不同,是以在進行資料傳輸時,對資料幀的最大長度都有一個限制,這個限制值即最大傳輸單元MTU(Maximum Transmission Unit).

同一個網絡上的兩台主機之間通信時,該網絡的MTU值是确定的,不存在分片問題。分片問題一般隻存在于具有不同MTU值的網際網路中。由于現在網際網路主要使用路由器進行網絡連接配接,是以分片工作通常由路由器負責。

當兩台主機之間的通信要通過多個具有不同MTU值的網絡時,MTU的瓶頸是通信路徑上最小的MTU值,它被稱為路徑MTU。由于路由選擇不一定是對稱的(從A到B的路由可能與從B到A的路由不同),是以,路徑MTU在兩個方向上不一定是一緻的,下表是幾種常用網絡的MTU值:

IP資料報 格式參數詳解

分片:

把一個資料報為了适合網絡傳輸而分成多個資料報的過程稱為分片,被分片後的各個IP資料報可能經過不同的路徑到達目标主機。

一個IP資料報在傳輸過程中可能被分片,也可能不被分片。如果被分片,分片後的IP資料報和原來沒有分片的IP資料報結構是相同的,即也是由IP頭部和IP資料區兩個部分組成:

IP資料報 格式參數詳解

分片後的IP資料報,資料區是原IP資料報資料區的一個連續部分,頭部是原IP資料報頭部的複制,但與原來未分片的IP資料報頭部有兩點主要不同:标志和片偏移:

(1)—标志:在IP資料報頭部有一個叫“标志”的字段,用3位二進制數表示:

IP資料報 格式參數詳解

不分片DF(Do not Fragment)标志如果被置1,則資料報在傳輸過程中不能被分片,如網絡連通性測試指令ping就可以用-F參數設定為在資料傳輸時不分片,但這樣當資料不能通過MTU較小的網絡時,将産生資料不可達的錯誤。

片未完MF(More Fragment)标志如果被置1,說明該資料報不是分片後的最後一個資料報,最後一個資料報的該位被置0。

(2)—片偏移:IP資料報被分片後,各片資料區在原來IP資料區中的位置用13位片偏移來表示。上圖中分片1的偏移為0;分片2的偏移為600;分片3的偏移為1200實際在IP位址中,由于偏移是以8個位元組為機關進行計算的,因而在IP資料報中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。

重組:

當分了片的IP資料報到達最終目标主機時,目标主機對各分片進行組裝,恢複成源主機發送時的IP資料報,這個過程叫做IP資料報的重組。

在IP資料報頭部中,辨別用16位二進制數表示,它唯一地辨別主機發送的每一份資料報。在一個資料報被分片時,每個分片僅把資料報“辨別”字段的值原樣複制一份,是以一個資料報的所有分片具有相同的辨別。

目标端主機重組資料報的原理是:

(1)—根據“辨別”字段可以确定收到的分片屬于原來哪個IP資料報;

(2)—根據“标志”字段的“片未完MF”子字段可以确定分片是不是最後一個分片;

(3)—根據“偏移量”字段可以确定分片在原資料報中的位置。

========================IP資料報選項========================

IP資料報“選項”主要有兩大功能:

1)用來實作對資料報傳輸過程中的控制,如規定資料報要經過的路由;

2)進行網絡測試,如一個資料報傳輸過程中經過了哪些路由器。

IP“選項“域共分為四大類,每類分為若幹個選項,每個選項有确定的編号:

IP資料報 格式參數詳解

IP資料報“選項”由三個部分組成:選項碼、選項長度和選項資料。選項碼和選項長度各占一個位元組,中,選項長度用于确定整個選項部分的長度;選項碼又分為複制、選項類和選項号:

IP資料報 格式參數詳解

複制:占一位,用來控制一個帶有選項的IP資料報被分片後對選項的處理方式。該位置1時将選項複制到所有分片中;置0時将選項僅複制到第一個分片中。

選項類和選項号用于确定該選項是哪類選項中的哪個選項,其實就是确定該選項的功能。

1)源路由選擇:是指IP資料報在網際網路中傳輸時,所經過的路由是由發出IP資料報的源主機指定的,以差別于資料報在網際網路中傳輸時由路由器的IP層自動尋徑所得到的路由。

通過設定源路由選擇選項,可以測試網絡中指定路由的連通性,以使資料報繞開出錯的網絡,也可用于測試特定網絡的吞吐量。源路由選擇可分為兩類:嚴格源路由選擇和寬松源路由選擇。

(1)—嚴格源路由選擇有發送端規定IP資料報必須經過的路徑上的每一個路由器,相鄰路由器之間不得有中間路由器,并且所經過的路由器的順序不可更改。如果一個路由器發送源路由所指定的下一個路由器不在其直接連接配接的網絡上,那麼它就傳回一個“源路由失敗”的ICMP差錯封包。嚴格源路由選擇選項格式如下:

IP資料報 格式參數詳解

選項碼字段為100 01001(0x89),即為0類9号選項。選項長度最大為39,可存放9個IP位址。因為IP頭部長度字段隻有4位二進制數,是以整個IP頭部最長隻能包括15(<24)個32位長的字(即60個位元組)。由于IP頭部固定長度為20位元組,選項碼、選項長度和指針共用去3個位元組,是以剩下60-20-3=37個位元組來存放IP位址清單,因而隻能存放9個IP位址。

(2)—寬松源路由選擇:由發送方指明一個資料報經過的IP位址清單,但是在資料報傳輸的路徑上,在選項中指定的兩個IP位址之間可以有其他IP位址的路由器。格式與嚴格的相同,隻是選項碼字段值為0x83。

2)記錄路由:通過設定記錄路由選項,IP資料報就可以記錄資料報從源主機傳輸到目标主機時,所經過路徑上的各個路由器的IP位址。記錄路由選項的資料格式和嚴格源路由選擇格式相同,但選項碼字段值為0x87,指針初值為4,指向存放第一個IP位址的位置。每個路由器的IP位址存入選項的資料區中,指針字段的值也随着增加(從4開始到8,12,16,最大到36),它始終指向下一個存放IP位址的位置。當記錄了9個IP位址後,指針字段的值為40,表示資料區已滿。

3)記錄時間戳:就是IP資料報每經過一個路由器都記下它的IP位址和時間。時間戳中的時間以ms為機關,時間戳取值一般為格林威治時間(UT,Universal Time)自午夜開始計時的毫秒數時間戳選項格式如下:

IP資料報 格式參數詳解

時間戳選項的選項碼是0x44。選項長度表示選項的總長度(一般為36或40),指針指向下一個可用空間的指針(值為5、9、13等)。

“溢出OF”字段表示因時間戳選項資料區空間不夠而未能記錄下來的時間戳個數;

“标志FL”字段用于控制時間戳選項的格式,取值如下:

IP資料報 格式參數詳解

繼續閱讀