一、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报文格式的各个字段来正确处理网络数据。