IP UDP包頭詳解
各字段功能:
1、版本號(Version):長度 4 bit 。標識目前采用的 IP 協議的版本號。一般的值為 0100(IPv4),0110(IPv6)
版本號 | 版本 |
---|---|
0 | 保留 |
1~3 | 未分配 |
4 | Internet 協議版本 4(IPv4) |
5 | ST 數據報(Datagram) |
6 | 簡單 Internet 協議(SIP) |
6 | IPv6 |
7 | TP / IX |
8 | P Internet 協議(PIP) |
9 | 使用更大地址的 TCP 和 UDP(TUBA) |
10~14 | 未分配 |
15 | 保留 |
2、IP 報頭長度(Header Length):長度 4 bit 。這個字段的作用是為了描述 IP 報頭的長度,因為在 IP 報頭中有變長的可選部分。該部分占 4 個 bit,長度單位為 4 個字節,即本區域值 = IP 頭部長度(單位為字節)/ 長度單位(4 個字節)。因此,一個 IP 報頭的長度最長為 “ 1111 ”,即 15 x 4 個字節 = 60 個字節。IP 報頭最小長度為 20 字節。
Header Length | Header Length 所代表的實際的 IP 報頭長度 |
---|---|
0101 | 20 字節 |
0110 | 24 字節 |
0111 | 28 字節 |
… | … |
1101 | 52 字節 |
1110 | 56 字節 |
1111 | 60 字節 |
3、服務類型(Type of Service):長度 8 bit 。8 位按位被如下定義:PPP DTRC0
**TOS只表示用戶的請求,不具有強制性,實際應用中很少用,路由器通常忽略TOS字段。**
- PPP:(Precedence)前 3 位,定義包的優先級,取值越大數據越重要。優先級主要用於QoS,表示從0(普通級別)到7(網絡控制分組)的優先級。
- 000 普通(Routine) - 001 優先的(Priority) - 010 立即的發送(Immediate) - 011 閃電式的(Flash) - 100 比閃電還閃電式的(Flash Override) - 101 CRI / TIC / ECP(找不到這個詞的翻譯) - 110 網間控制(Internetwork Control) - 111 網絡控制(Network Control)
- DTRCO:後 5 位
- D (Delay更低的時延)時延:0:普通,1:延遲盡量小 - T (Throughput 更高的吞吐量)吞吐量:0:普通,1:流量盡量大 - R(Reliability更高的可靠性) 可靠性:0:普通,1:可靠性盡量大 - C (Cost 更低費用的路由)傳輸成本:0:普通,1:成本盡量小 - 0 最後一位被保留,恒定為 0
4、IP 包總長度(Total Length):長度 16 bit 。以字節為單位計算的 IP 包的長度(包括頭部和數據),所以 IP 包最大長度 65 535 字節。所以,數據包有效載荷的大小 = IP 包總長度(Total Length)- IP 報頭長度(Header Length)。
5、標識符(Identifier):長度 16 bit 。該字段和 Flags 和 Fragment Offest 字段聯合使用,對較大的上層數據包進行分段(fragment)操作。路由器將一個包拆分後,所有拆分開的小包被標記相同的值,以便目的端設備能夠區分哪個包屬於被拆分開的包的一部分。
6、標記(Flags):長度 3 bit 。
- 該字段第一位不使用。
- 第二位是 DF(Don’t Fragment)位,DF 位設為 1 時表明路由器不能對該上層數據包分段。如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包並返回一個錯誤信息。
- 第三位是 MF(More Fragments)位,當路由器對一個上層數據包分段,則路由器會在除了最後一個分段的 IP 包的報頭中將 MF 位設為 1 。
7、片偏移(Fragment Offset):長度 13 bit,以 8 個八位組為單位。表示該 IP 包在該組分片包中位置,接收端靠此來組裝還原 IP 包。
8、生存時間(TTL):長度 8 bit,設計之初是以秒(s)為單位的,但實際以跳數為單位,建議的缺省值為 64 。當 IP 包進行傳送時,先會對該字段賦予某個特定的值。當 IP 包經過每一個沿途的路由器的時候,每個沿途的路由器會將 IP 包的 TTL 值減少 1 。如果 TTL 減少為 0,則該 IP 包會被丟棄。這個字段可以防止由於路由環路而導致 IP 包在網絡中不停被轉發。
9、協議(Protocol):長度 8 bit 。標識了上層所使用的協議。以下是比較常用的協議號:1 ICMP;2 IGMP;6 TCP;17 UDP;88 IGRP;89 OSPF 。
10、頭部校驗(Header Checksum):長度 16 bit 。用來做 IP 頭部的正確性檢測,但不包含數據部分。 因為每個路由器要改變 TTL 的值,所以路由器會為每個通過的數據包重新計算這個值。
11、起源和目標地址(Source and Destination Addresses):這兩個地址都是 32 bit 。標識了這個 IP 包的起源和目標地址。要註意除非使用 NAT,否則整個傳輸的過程中,這兩個地址不會改變。
12、可選項(Options):這是一個可變長的字段。該字段屬於可選項,主要用於測試,由起源設備根據需要改寫。可選項目包含以下內容:
- 松散源路由(Loose source routing):給出一連串路由器接口的 IP 地址。IP 包必須沿著這些 IP 地址傳送,但是允許在相繼的兩個 IP 地址之間跳過多個路由器。
- 嚴格源路由(Strict source routing):給出一連串路由器接口的 IP 地址。IP 包必須沿著這些 IP 地址傳送,如果下一跳不在 IP 地址表中則表示發生錯誤。
- 路由記錄(Record route):當 IP 包離開每個路由器的時候記錄路由器的出站接口的 IP 地址。
- 時間戳(Timestamps):當 IP 包離開每個路由器的時候記錄時間。
- 填充(Padding):因為 IP 報頭長度(Header Length)部分的單位為 32 bit,所以 IP 報頭的長度必須為 32 bit 的整數倍。因此,在可選項後面,IP 協議會填充若幹個 0,以達到 32 bit 的整數倍。
字段 | 長度 | 含義 |
---|---|---|
版本 | 4比特 | IP協議的版本號,分為IPv4和IPv6協議。 |
首部長度 | 4比特 | IPv4的首部長度。 |
區分服務 | 8比特 | 用來獲得更好的服務。只有在使用區分服務時,這個字段才起作用。 |
總長度 | 16比特 | 指首部和數據之和的長度。 |
標識 | 16比特 | IPv4軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識字段。 |
標誌 | 3比特 | 目前只有兩位有意義。最低位為1表示後面“還有分片”的數據報,為0表示這已經是最後一個數據片;中間一位為1表示“不能分片”,為0才允許分片。 |
片位移 | 13比特 | 指出較長的分組在分片後,該片在原分組中的相對位置。 |
生存時間TTL(Time To Live) | 8比特 | 表示數據報在網絡中的壽命,功能是“跳數限制”。 |
協議 | 8比特 | 指出此數據報攜帶的數據是使用何種協議。 |
首部檢驗和 | 16比特 | 數據報每經過一個設備,設備都要重新計算一下首部檢驗和,若首部未發生變化,則此結果必為0,於是就保留這個數據報。這個字段只檢驗數據報的首部,但不包括數據部分。 |
源地址 | 32比特 | 報文發送方的IPv4地址。 |
目的地址 | 32比特 | 報文接收方的IPv4地址。 |
選項字段 | 0~40字節(長度可變) | 用來支持排錯、測量以及安全等措施。在必要的時候插入值為0的填充字節。 |
數據部分 | 可變 | 用來填充報文。 |
UDP
IP UDP包頭詳解