報文內容示意圖
![]() |
![]() |
報文內容詳解
1. version(版本號)
標識采用的 IP 協議的版本號,一般的值為 0100(IPv4),0110(IPv6)
2. IHL(Internet Header Length IP表頭的長度)
這一部分占用 4bit ,標識整個IP表頭的長度,4bit最大的范圍為 0~15,單位是4個字節(32bit或者可以直觀的看作是一層),所以IP報頭最大長度為 15 * 4 = 60字節。
因為IP報頭的固定部分(必須項)占用了 20 字節的大小,所以可選項與填充項可以占用0~40個字節。
3. Type of Service / Differentiated Services (區分服務)
4. Total Length(總長度)
標識這個 IP 封包的總容量,包括表頭與內容 (Data) 部分。
占用16bit 的位置,范圍是(0~65535),因為其單位是 8bit 。所以最大可達 65535 個字節。
5. Identification (標識)
數據包的一個ID編號,用於識別標識數據包。占用16bit 的位置。特別用於數據包分段技術。
網絡中轉發的IP報文的長度可以不同,但如果報文長度超過了數據鏈路所支持的最大長度,則報文就需要分割成若干個小的片段才能在鏈路上傳輸。
將報文分割成多個片段的過程叫做分片,主機將數據報分片后,在發送前,會給每一個分片數據報一個ID值,放在16位的標識符字段中。
6. Flag (分段標志)
分段標志字段在IP報頭中占 3bit,
- 第1位,稱作保留位,置0;
- 第2位,稱作分段位,有兩個不同的取值:該位置0,表示可以分片;該位置1,表示不能分片;
- 第3位,更多分段位,同樣有兩個取值:該位置0,表示這是數據流中的最后一個分段,該位置1,表示數據流未完,后續還有其他分段;
當目的主機接收到一個IP數據報時,會首先查看該數據報的標識符,並且檢查標志位的第3位是置0或置1,以確定是否還有更多的分段。如果還有后續報文,接收主機則將接收到的報文放在緩存直到接收完所有具有相同標識符的數據報,然后再進行重組。
7. Fragment Offset(分段偏移)
用於標識分片報文相對於原始報文起始位置的偏移量。占用13bit位置,單位是8bit.
因為各個IP分片數據報在發送到目的主機時可能是無序的,所以就需要“偏移量”字段來指明“該分片在原數據報中的位置順序”。
接收端靠此來組裝還原 IP 包。
8. Time To Live(生存周期)
該位置被占用8bit位置(0~255)。是初始數據包的時候會設置的一個值.
發送方在初始發送時設定某個值(建議為64,、128或255),每台路由器再轉發時都將其減一,當字段達到0時,該數據報被丟棄,並使用一個ICMP消息通知發送方。
該字段可以說是設置一個“數據報可經過的路由器數量”的上限,也被稱為“跳數”。
解決的問題:報文在網段間轉發時,如果網絡數設備上的路由規划不合理,就可能出現環路,導致報文在網絡中無線循環,無法到達目的端。環路發生后,所有發往這個目的地的報文都會被循環轉發,網絡將發生擁塞。因此使用生存周期之后,轉發一定次數之后數據報就會被丟棄,避免擁塞。
9. Protocol(協議號)
該字段用於標識網絡層之上使用了哪種封裝協議。 占用 8bit , 常用的協議號有:TCP=6,UDP=17,ICMP=1
10. Header Checksum(報頭校驗和)
該字段用於檢查報頭的正確性,防止IP報頭數據錯亂。占用16bit位置。
checksum這種校驗非常弱,規則都是透明的,所以不要相信這個校驗和可以幫你防止惡意篡改,它僅僅用來應對網絡傳輸中的干擾信號。
首先將該字段設置為0。然后對報頭(整個報頭是一個16位的“序列”)計算16位二進制反碼和。該值被存儲在首部校驗和字段中。當接收方接收到數據報后,也對其首部進行校驗計算,如果結果與“首部校驗和”的值不同,就丟棄收到的數據報。
11. Source Address(源IP)
源IP地址,指的是公網地址 32bit 4字節
12. Destination Adress(目的IP)
目標IP地址,指的也是公網地址 32bit 4字節
13. Options (其他參數)
這個是額外的功能,提供包括安全處理機制、路由紀錄、時間戳、嚴格與寬松之來源路由等。
14. Padding(補齊項目)
Options和Padding一共有32位,由於Options字段不是固定的,所以需要Padding 字段來加以補齊