一、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-hant/n/199585.html