網路層(九)IP資料報的格式
IP資料報概貌
完整的IP資料報由 首部 和 資料 兩部分組成。首部 第一部分20位元組 ,是所有IP資料報必須具有的;首部 第二部分是可選欄位 ,其長度是可變的。其各欄位如下圖所示:

首部固定部分各欄位含義
固定部分第一行
- 版本: 佔4位,指 IP的協議版本 。通訊雙方使用的IP協議的版本必須一致,目前廣泛使用的IP協議的版本號為4(即IPv4),欄位內填充為0100
- 首部長度: 佔4位, 表示首部欄位長度 。其 單位為4位元組,通常情況下預設值為0101 (十進位制5),代表首部固定長度20位元組。最大為1111(十進位制15),即60位元組。當IP分組首部長度不是4位元組整數倍,需利用最後欄位填充
- 區分服務: 佔8位, 用來獲得更好的服務 。利用DS(Differentiated Services)欄位的不同數值,提供不同等級的服務。 一般情況下不使用
- 總長度: 佔16位, 指首部和資料之和的長度 。單位為位元組,總長度欄位為16位,因此資料報的最大長度為216 - 1 = 65535位元組。實際上傳送這樣長的資料報在現實中是很少的
我們知道,在IP層下面的每一種資料鏈路層協議都規定了一個 資料幀的資料欄位的最大長度 ,這稱為最大傳送單元MTU(Maximun Transfer Unit)。當一個IP資料報封裝成鏈路層的幀時,此 資料報的總長度 (即首部加上資料部分),如果 大於資料鏈路層規定的MTU值 ,就必須把過長的資料報進行那個分片處理。
IP協議規定,在因特網上的主機和路由器,必須能夠接收長度不超過576位元組的資料報。這是假定上層交下來的資料長度有512位元組(合理長度),加上最長的IP首部60位元組(15 * 4),再加上4位元組的富裕量
固定部分第二行
- 標識: 佔16位。IP軟體在儲存器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識欄位。當資料報由於長度超過網路的MTU值而必須分片時,這個標識欄位的值就被複制進所有資料報片的標識欄位中, 相同的標識欄位的值,使分片後各資料報片最後能正確地重灌為原來的資料片
- 標誌: 佔3位,最低位記 為MF(More Fragment) 。 MF = 1 表示後面還有分片資料報, MF = 0 表示這是若干資料報分片中的最後一個。標誌欄位中間一位記為DF(Don’t Fragment),意思是不能分片,只有 DF = 0才允許分片 。標誌最高位,目前沒使用
- 片偏移: 佔13位,片偏移指出: 較長的分組在分片後,某片在原分組中的相對位置。 也就是說,相對於使用者資料欄位的七點,該片從何處開始。片偏移 以8個位元組為偏移單位
固定部分第三行
- 生存時間: 佔8位,其縮寫為TTL(Time to live), 表明資料報在網路中的壽命 。由發出資料報原點設定這個欄位,其 目的是防止無法交付的資料報無限制在因特網中兜圈子 。路由器在轉發資料報之前將TTL數值減1,若TTL數值減為0,則丟棄這個資料報
- 協議: 佔8位,協議欄位指出此 資料報攜帶的資料是使用何種協議 ,以便使目的主機的IP層知道將資料部分上交給哪個程序處理。常用的一些協議和相應的協議欄位值如下:
- 首部校驗和: 佔16位,這個欄位只檢驗資料報的首部,不包含資料部分。這是因為每經過一個路由器,路由器都重新計算一下首部檢驗和(生存時間、標誌、片偏移等可能發生變化)
舉一個簡單的例子,假如在傳送端檢驗和為11010011 11001100,其取反碼寫入檢驗和欄位的值為00101100 00110011,若在傳輸過程沒有差錯,則接收端(除檢驗和)依舊為11010011 11001100,與校驗和相加為11111111 11111111, 取反碼為00000000 00000000。需要注意的是在傳送端,反碼算數運算求和,初始化檢驗和欄位為全0,接收端檢驗和欄位參與運算,判定資料在傳輸過程中是否出現差錯
固定部分第四五行
- 源地址: 佔32位,是源主機IP地址
- 目的地址: 佔32位,是目的主機IP地址
首部可變部分
IP首部的可選部分就是一個選項欄位,用來支援排錯、測量以及安全等措施。這些選項連線起來,中間不需要有分割符,最後使用全0的填充欄位補齊成為4位元組的整數倍。
增加首部的可變部分是為了 增加IP資料報的功能 ,但這同時也使得IP資料報的首部長度成為可變的。 增加了每一個路由器處理資料報的開銷 ,實際上這些選項 很少使用 。很多路由器都不考慮IP首部的選項欄位,因此新的IP版本 IPv6就把IP資料報的首部長度做成固定的