參考 <The TCP/IP Guide> http://tcpipguide.com
文章目錄
IPv4 數據報的一般格式
Version
用於標識生成該數據報的 IP 版本。對於 IPv4 這裏的值爲 4。
IHL (Internet Header Length)
以 32 比特爲一個單位指出 IP 頭的長度,包括選項和填補部分,當沒有選項時這個值爲 5。
TOS (Type Of Service)
攜帶 IP 數據報的服務質量特徵信息,如優先傳遞,其含義後來被重新定義以供稱爲差異化服務 (Differentiated Services, DS) 的技術使用。
子字段 | 長度 (bits) | 描述 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Precedence | 3 | 指示數據報的優先級,下面有八個定義的值,從最低到最高
| ||||||||||||||||||
D | 1 | 如果需要低延遲傳輸則設爲 1,否則爲 0 | ||||||||||||||||||
T | 1 | 如果需要更高吞吐量傳輸則設爲 1,否則爲 0 | ||||||||||||||||||
R | 1 | 如果需要更可靠的傳輸則設爲 1,否則爲 0 | ||||||||||||||||||
Reserved | 2 | 保留 |
TL (Total Length)
以字節 (byte) 爲單位指出 IP 數據報的總長度。因爲這個字段只有 16 bits 所以 IP 數據報的最大長度爲 65,535 Bytes,實際上大多數都遠小於這個上限。
Identification
這個字段的值對於屬於同一數據報的碎片是相同的,這樣接收方在重組時才能分辨哪些碎片是屬於一個數據報的。
Flags
用來管理碎片。
子字段名稱 | 長度 (bits) | 描述 |
---|---|---|
Reserved | 1 | 保留 |
DF | 1 | 值爲 1 時表示該數據報不能被分片,因爲分片操作對更高層的協議不可見,所以很多時候不會設置這個值。但也不是沒用,常用與測試最大 MTU |
MF | 1 | 值爲 0 時表示該數據報爲最後一塊碎片;值爲 1 時表示後面還有若干數據報碎片。 |
Fragment Offset
當數據報被分片時,這個字段指出當前碎片在原數據報中的偏移量或位置,以 8 Bytes 爲一個單位,第一個碎片的偏移量爲 0。
TTL (Time To Live)
指出數據報允許在互聯網中存活的時間,沒經過一個路由器,路由器就會將這個值減 1,當這個值爲 0 時路由器將丟棄該數據報不再轉發。這其實是指出數據報的最多跳數而非時間。
Protocol
指出數據報中攜帶的更高層協議。
值(16 進制) | 值(10 進制) | 協議 |
---|---|---|
00 | 0 | 保留 |
01 | 1 | ICMP |
02 | 2 | IGMP |
03 | 3 | GGP |
04 | 4 | IP-in-IP Encapsulation |
06 | 6 | TCP |
08 | 8 | EGP |
11 | 17 | UDP |
32 | 50 | Encapsulating Security Payload (ESP) Extension Header |
33 | 51 | Authentication Header (AH) Extension Header |
Header Checksum
僅計算報頭的校驗和,以提供對傳輸中的損壞的基本保護,不對數據進行校驗和。
Source Address & Destination Address
源地址和目標地址。
Options
每個 IP 選項都有自己的 子字段格式,下圖和表表示通用選項格式:
子字段名稱 | 長度 (Bytes) | 描述 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Option Type | 1 | 這 8 bits 被分成如下三個子子字段
| ||||||||||||
Option Length | 0 or 1 | 以 Byte 爲單位指出變長選項的長度,包括這裏所說的三個子字段。 | ||||||||||||
Option Data | 0 or Variable | 爲變長選項提供,包含選項要發送的數據。 |
Option Class | Option Number | Length (Bytes) | Option Name | Description |
---|---|---|---|---|
0 | 0 | 1 | End Of Options List | 只含有一個 0 Byte 的選項,用來標記選項列表的結尾。 |
0 | 1 | 1 | No Operation | 虛擬選項,用於內部填充,用於一些需要 32-bit 對齊的選項。 |
0 | 2 | 11 | Security | 爲軍方提供的選項,用於指示 IP 數據報的安全分類。 |
0 | 3 | Variable | Loose Source Route | 包含一個 IP 地址列表,用來指定數據報必須準確、按順序使用所給 IP 地址列表的路由器到達終點,途中可以使用列表外的路由器做中間跳轉。 |
0 | 7 | Variable | Record Route | 如果數據報含有這個選項,那麼處理這個數據報的路由器會將自己的 IP 地址添加到這個選項中,這樣接收方就可以提取地址列表查看數據報採用的路由。 因爲這個選項的長度是由發送該數據報的設備設置的,它不會在路由途中增大,所以,如果在到達目的之前該選項已經填滿,那麼將只記錄了部分路由。 |
0 | 9 | Variable | Strict Source Route | 和 Loose Source Route 選項類似,但是不允許列表外的路由器做中間跳轉。 |
2 | 4 | Variable | Timestamp | 和 Record Route 選項類似,不同的是處理該數據報的路由器往選項裏添加的是時間戳,這樣接收方就可以知道數據報在各個路由器之間傳輸所用的時間。途中同樣不能修改該選項的長度。 |
2 | 18 | 12 | Traceroute | 用於 traceroute 程序的增強。 |
Padding
如果有選項,使得報頭長度不爲 32 bits 的倍數,就用 0 去填補,使得報頭長度始終爲 32 bits 的倍數。
Data
要傳送的數據。