IPV4資料報頭部格式

2021-07-31 22:34:18 字數 3606 閱讀 6586

摘自:《深入理解計算機網路》 王達著 機械工業出版社

來自:

來自:傳送端的網路層在收到它的上一層——傳輸層發來的資料段時,需要通過網路層協議將其封裝成資料報,也就是加上網路層ip協議(在此僅以ip協議為例進行介紹)頭部。ip協議頭部主要是源和目的網路的ip位址,以便可以資料分段傳輸到目的網路中。然後資料報向下傳輸,到了資料鏈路層後又要封裝成資料幀。

與在資料幀格式中包括幀頭和資料部分類似,乙個ip資料報也包括報頭和資料這兩個部分,如上圖所示。其中資料部分就是來自傳輸層的完整資料段,而報頭部分是為了正確傳輸資料報而增加的網路層ipv4/ipv6協議資訊。

版本字段指定了ip資料報中使用的ip協議版本,佔四位。如過協議是ipv4,則值為0100。

頭部長度字段指示ip資料報頭部的總長度,ip資料報頭部的總長度以4位元組為單位,該字段佔4位。當報頭中無選項欄位時,報頭的總長度為5,也就是5×

4=20 位元組(此時,報頭長度的值為0101)。這就是說ip資料報頭部固定部分長度為20位元組。當ip頭部長度為1111時,頭部的固定長度為15×

4=60 位元組。但報頭長度必須是32位(四位元組)的整數倍,如果不是,需要在選項欄位的填充(pad)欄位中補0湊齊。

最開始ip資料報的這個欄位為優先順序和服務型別字段,又稱為服務型別(tos)字段,用於表示資料報的優先順序和服務型別,佔八位。它包括乙個3位長度的優先順序、4位長度的標誌位。標誌位分別是d(delay延遲)、t(throughput吞吐量)、r(reliability可靠性)和c(cost開銷),分別表示延遲、吞吐量、可靠性和開銷值,用來獲得更好的服務。最高1位未用。

2023年ietf在rfc2474中把ip資料報中tos欄位改名為服務字段,同樣為8位,前6位構成dscp(different services code point,區分服務碼點),是ip優先順序和服務型別欄位的組合,定義了0~63共64個優先順序。最後兩位未使用。無論是哪種版本,該欄位只有在使用區分服務時才起作用,如果沒有區分服務,則該字段值為0。

總長度字段標識整個ip資料報的總長度,包括報頭和資料部分,整個ip資料報的總長度以位元組為單位,該字段佔16位。由此可得出,ipv4資料報的最大長度為216

−1位元組即65535位元組(64kb)。

說明:在網路層下面的每一種資料鏈路層都有自己的格式,其中包括表示資料字段的最大長度,這稱為最大傳送單元(maximum transfer unit,mtu)。當乙個資料報封裝成鏈路層的幀時,此資料報的總長度(包括報頭和資料部分)一定不能超過下面的資料鏈路層的mtu值

標識字段用於表示ip資料報的識別符號,佔16位,每個ip資料報有乙個唯一的識別符號。ip軟體在儲存器中維持乙個計數器,每產生乙個資料報,計數器就加1,並將此值賦給整個標識字段。但整個標識並不是序號,因為ip是無連線服務,資料報不存在按序接受的問題。當資料報由於長度超過下面資料鏈路層的mtu(最大傳輸單元)值而必須分段的時候,這個識別符號的值就被複製到所有的資料報分段的標識欄位中。相同的標識欄位的值分段後的各資料報分段最後能正確地組裝成原來的資料報。

標誌字段用以指出該ip資料報後面是否還有分段,也就是這個字段時分段標誌,佔3位。目前只有前兩位有意義:最低以為記為mf(more fragment),如果mf=1,則表示後面還有分段,如果mf=0表示這已是某個資料報的最後乙個分段;中間一位記為df(don』t fragment),當df=1時表示不允許分段,df=0表示允許分段;最高1位沒有使用。

段偏移字段用以指出該分段在資料報中的相對位置,也就是說,相對於使用者資料字段的起點,該分段從何處開始,佔13位。若有分段,段偏移以8位元組為偏移單位,即每個分段的長度一定是8位元組(64位)的整數倍。第乙個分段偏移值就是0 0000 0000 0000,如果第乙個分段一共是64位元組,則0 0000 0000 1001,相當於10進製數的9,因為從第9個「8位元組」資料塊開始的。如果沒有分段,則該字段值為0。

生存時間字段用來標識ip資料報在網路中傳輸的有效期,以秒來計數,佔8位。最初的設計是以秒為單位,沒經過乙個路由器時,就在ttl(time to live)中減去資料報在路由器消耗掉的一段時間。若資料報在路由器消耗的時間小於1s,就把ttl值減1。ttl的建議值是32s,最長是28

−1=255

s。現在通常認為這個ttl是指資料報允許經過的路由器數,每經過乙個路由器,則ttl減1,當ttl值為0時,就丟棄這個資料報。設定生存時間是為了防止資料報在網路中無限制地迴圈**。

協議字段用來標識此ip資料報在傳輸層所採用的協議型別(如tcp、udp或icmp等等),以便使目的主機的ip層直到應將資料部分上交給哪個處理過程,佔8位。如tcp的協議號是6,等於二進位制的0000 1010,udp的協議號是17,等於二進位制的0001 0001。

校驗和字段用來檢驗ip資料報的報頭部分(不包過「資料」部分)在傳輸到接收端後是否發生了變化,佔16位。這是因為資料報每經過乙個路由器,路由器都要重新計算一下報頭檢驗和(因為一些字段,如生存時間、標識、段偏移等都可能發生變化),不檢驗資料部分可減少計算的工作量。

檢驗和的計算方法

利用校檢和字段檢驗報頭部分資料正確性的基本原理是:現在傳送端校檢和字段中填上乙個特定的值,然後再接收端把包括校檢和字段在內的報頭部分進行二進位制反碼求和,再取反,如果結果為0,則表示報頭部分在傳輸過程中沒有發生變化,否則表示在傳輸過程中出現了差錯。從以上可以看出,這裡最關鍵的是在傳送端計算出這個校檢和的值。步驟如下:

1. 把ip資料報報頭中的校檢和字段置0。

2. 把頭部看成由16位(2位元組)位單位得數字組成,對每16位的二進位制反碼進行求和。如報頭長度不是16位的整數倍數,則用0填充到16位的整數倍數。若此時校驗和字段值為0,可以不計,因為0的反碼仍為0。

3. 以上得到的結果就是我們要求的校驗和字段值,系統自動將其填入ip資料報報頭的檢驗和字段中。

4. 在接收端中,同樣按照以16位為單位,對ip資料報報頭部分進行二進位制反碼求和,再取反,如果結果為0,表示報頭部分在傳輸過程中沒有發生變化,否則表示發生了差錯。但要注意,此時因位校驗和字段已不再是0了,而是等於除了檢驗和字段外的其他欄位的反碼之和。現在在對校驗碼和字段值取反求和,再與其他欄位的反碼之和(相當於原來「校驗和」欄位的值)相加,結果肯定是全為1,因為這兩個值互為反碼;再取反後,結果肯定為0。這就是校驗和的基本原理。

例子假設有3個數(為了簡便,在此均用4位表示):2(0010)、3(0011)、c(代表校驗和字段值),計算c,即求2和3的反碼之和,得到9(1001)。現在假設把這3個數(2,3,c)傳送到接收端。在接收端也要對這3個數進行反碼求和。因為2和3這兩個的反碼之和我們在計算c時已經計算過了,就是9(1001),現在只需要對c(校驗和字段值)進行求反,得到6(0110)。把1001和0110相加,得到15(1111)。再取反,得到0(0000)。這就是這3個數在傳輸過程中沒有出現差錯的情況下得到的,這就是校驗和的校驗原理。

選項字段支援各種選項,提供擴充套件餘地。根據選項的不同,該字段時可變長,從1位元組到40位元組。用來支援拍錯、測量以及安全等措施。作為選項,使用者可以使用,也可以不使用它們。但作為ip協議的組成部分,所有實現ip協議的裝置都必須能處理ip選項。在使用選項的過程中,如果造成了ip資料報的報頭不是32位的整數倍,這時需要後面的填充字段湊齊。如果恰好是整數倍,則不需要填充字段。

IPv4資料報結構

目錄 一 ip包頭 1 涵義詳解 1 ip大小範圍 2 第一行 32bit 3 第二行 32bit 4 第三行 5 第四行 6 第五行 7 第六行 二 tcp報頭 三 udp報頭 當options 0時,1行是4位元組 共4 5 20位元組 當ihl 1111 15 時,15 4 60位元組 所以i...

ipv4和tcp報頭資料格式

ipv4 internel協議 頭部 iphdr version 版本 4位 目前的協議版本號是4,因此ip有時也稱作ipv4。iphdr ihl 首部長度 4位 首部長度指的是ip層頭部佔32 bit字的數目 也就是ip層頭部包含多少個4位元組 32位 包括任何選項。由於它是乙個4位元字段,因此首...

IPv4與IPv6資料報格式詳解

摘要 本文給出ipv4與ipv6資料報格式示意圖,並整理了各個字段含義,最後對比ipv4與ipv6資料報格式的區別。一 ipv4資料報 圖1 ipv4資料報格式 版本號 version 不同的ip協議版本使用不同的資料報格式。首部長度 hl,internet head length 確定ip資料報中...