一、IP報文格式概述
互聯網協議(IP)是實現互聯網通信的基礎協議之一,它定義了如何在網路中傳輸數據。IP報文是在TCP、UDP等協議之上的數據單元,也是網路層的數據單元。一個IP報文的基本格式如下:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options (if IHL > 5 and Total Length > 20) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下面我們將從各個方面對IP報文格式做詳細的闡述。
二、IP報文格式解析
1. 版本欄位
版本欄位的作用是標識IP協議的版本。目前有IPv4和IPv6兩個版本,IPv4的版本號為4,IPv6的版本號為6。
2. IHL欄位
Internet頭部長度(IHL)指的是IP頭部的長度,以4位元組為單位。這個欄位的最小值為5,最大值為15。IHL乘以4就是IP頭部的位元組數,最小值為20位元組,最大值為60位元組。
3. Type of Service欄位
服務類型(Type of Service,TOS)欄位用來對IP報文進行分類和處理。TOS欄位包含3個子欄位:優先方式(Precedence)、延遲(Delay)、吞吐量(Throughput)和可靠性(Reliability)。
4. Total Length欄位
總長度欄位指的是整個IP報文的長度,包括頭部以及數據部分,以位元組為單位。最大值為65535位元組。
5. Identification、Flags、Fragment Offset欄位
IP協議的分片機制是將一個大的IP報文分成若干個小的IP報文,然後分別發送。Identification欄位記錄了原始IP報文的標識,Flags欄位代表分片後的IP報文,Fragment Offset欄位表示當前分片的偏移量。
6. TTL欄位
TTL(Time to Live)欄位用來限制IP數據包轉發的最大次數,一般情況下初始值為64或者128。這個欄位是為了防止數據包在網路中陷入無限循環。
7. Protocol欄位
協議欄位代表著IP報文頭部的協議類型,如TCP、UDP等。協議欄位在傳送層旁邊,表示傳送層要使用的協議類型。
8. Header Checksum欄位
頭部檢驗和欄位是一個16位的校驗和欄位,用來檢測IP報文頭部的數據是否出錯,一般情況下都是由系統自動計算的。
9. Source Address、Destination Address欄位
源地址和目標地址是指分別向數據包發送者和接收者的IP地址,也就是發送端和接收端的IP地址。
10. Options欄位
選項欄位是可選的,用來填充IP頭部的額外參數。例如,某些選項可以用來指示嚴格的源路由和時間戳。
三、IP報文格式示例代碼
struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:4, version:4; #elif defined (__BIG_ENDIAN_BITFIELD) __u8 version:4, ihl:4; #else #error "Please fix " #endif __u8 tos; __u16 tot_len; __u16 id; __u16 frag_off; __u8 ttl; __u8 protocol; __u16 check; __u32 saddr; __u32 daddr; /*The options start here. */ };
四、總結
IP協議是互聯網通信的基礎協議之一,IP報文是網路層的數據單元。一個IP報文的基本格式包括版本、IHL、Type of Service、Total Length、Identification、Flags、Fragment Offset、TTL、Protocol、Header Checksum、Source Address、Destination Address和Options欄位。我們需要了解IP報文格式的各個欄位來正確處理網路數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199585.html