您的位置:

IP报文格式详解

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