IP数据报文字段详解

详细解析IP数据报文的各个字段含义及其作用

IP数据报文概述

IP(Internet Protocol)数据报文是互联网协议中最基础的数据传输单元。每个IP数据报都包含了确保数据能够正确传输所需的各种信息。本文将详细介绍IP数据报文的各个字段及其作用。

IP数据报文结构

IP数据报文主要由首部和数据两部分组成。其中首部包含了控制信息,而数据部分包含了上层协议的数据。

首部字段详解

  1. 版本(Version)- 4位

    • 用于标识IP协议的版本
    • IPv4的值为4,IPv6的值为6
  2. 首部长度(IHL,Internet Header Length)- 4位

    • 标识IP首部的长度
    • 以32位(4字节)为单位
    • 最小值为5(表示20字节),最大值为15(表示60字节)
  3. 服务类型(Type of Service)- 8位

    • 用于指定服务质量
    • 包含优先级和服务类型信息
    • 现代网络中常用于区分服务(DiffServ)
  4. 总长度(Total Length)- 16位

    • 标识整个IP数据报的长度
    • 包括首部和数据部分
    • 最大值为65535字节
  5. 标识(Identification)- 16位

    • 用于分片重组
    • 同一数据报的所有分片具有相同的标识值
  6. 标志(Flags)- 3位

    • 控制数据报分片
    • 包括:
      • DF(Don’t Fragment):禁止分片
      • MF(More Fragments):后面还有分片
  7. 片偏移(Fragment Offset)- 13位

    • 指示分片在原始数据报中的位置
    • 以8字节为单位
  8. 生存时间(TTL,Time To Live)- 8位

    • 防止数据报无限循环
    • 每经过一个路由器减1
    • 当值为0时,数据报被丢弃
  9. 协议(Protocol)- 8位

    • 指示上层协议类型
    • 常见值:
      • 1 = ICMP
      • 6 = TCP
      • 17 = UDP
  10. 首部校验和(Header Checksum)- 16位

    • 用于检验首部的完整性
    • 不包括数据部分的校验
  11. 源IP地址(Source Address)- 32位

    • 发送方的IP地址
  12. 目的IP地址(Destination Address)- 32位

    • 接收方的IP地址
  13. 选项(Options)- 可变长度

    • 可选字段
    • 包含特殊处理信息
    • 很少使用

IP数据报文分片

当IP数据报文大小超过网络的MTU(最大传输单元)时,需要进行分片处理:

  1. 分片规则

    • 每个分片都必须是8字节的整数倍
    • 除最后一个分片外,其他分片的大小应该相等
    • 所有分片都保持相同的标识字段值
  2. 分片重组

    • 目的主机负责重组
    • 根据标识字段和片偏移进行重组
    • MF标志位用于判断是否为最后一个分片

实际应用举例

  1. MTU发现
1
ping -D -s 1472 8.8.8.8  # 测试最大MTU
  1. 查看IP报文结构
1
tcpdump -xx -i eth0  # 抓取并显示完整的IP报文

IP数据报文结构图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
比特   0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   0 |版本号(4)    |首部长度(4) |     服务类型(8)                    |                   总长度(16)                                    |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  32 |                   标识(16)                                    |标志(3)|                片偏移(13)                               |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  64 |    生存时间(8)           |    协议(8)            |                   首部校验和(16)                                            |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  96 |                                                    源IP地址(32)                                                                |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 128 |                                                    目的IP地址(32)                                                              |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 160 |                                                 选项 + 填充(可变长度)                                                          |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |                                                    数据部分(可变长度)                                                           |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

服务类型(ToS)字段详细结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|  优先级   | D | T | R | C |未用|
+---+---+---+---+---+---+---+---+
    其中:
    - 优先级(0-2位):指定数据包的优先级
    - D(3位):延迟,0=普通,1=低延迟
    - T(4位):吞吐量,0=普通,1=高吞吐量
    - R(5位):可靠性,0=普通,1=高可靠性
    - C(6位):成本,0=普通,1=最小成本
    - 未用(7位):保留位

首部结构说明

  1. 固定部分(20字节)

    • 版本号到首部校验和的部分
    • 每个IP数据报必须包含的内容
    • 长度固定不变
  2. 可变部分(最多40字节)

    • 选项字段
    • 填充字段
    • 长度可变,必须是32位的整数倍
  3. 数据部分

    • 可变长度
    • 承载上层协议的数据
    • 受MTU限制

IP首部结构表

基本结构(按字节分布)

字节位置0123
0-3版本(4位)+首部长度(4位)服务类型(8位)总长度(16位)
4-7标识符(16位)标志(3位)+片偏移(13位)
8-11生存时间(8位)协议(8位)首部校验和(16位)
12-15源IP地址(32位)
16-19目的IP地址(32位)
20+选项+填充(如果有,0-40字节)

按位分布详解

第0行(0-3字节):

1
2
3
4
5
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|版本|  首部长度 |    服务类型    |            总长度             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

第1行(4-7字节):

1
2
3
4
5
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             标识符            |标志|         片偏移            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

第2行(8-11字节):

1
2
3
4
5
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    生存时间    |     协议      |          首部校验和           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

第3-4行(12-19字节):

1
2
3
4
5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           源IP地址                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          目的IP地址                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

第5行及以后(20+字节,如果有):

1
2
3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   选项 + 填充(如果有)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明

  1. 第0-3字节字段

    • 版本:4位,IPv4为4,IPv6为6
    • 首部长度:4位,以4字节为单位(最小值5,最大值15)
    • 服务类型:8位,指定服务质量
    • 总长度:16位,首部+数据的总字节数(最大值65535)
  2. 第4-7字节字段

    • 标识符:16位,用于分片重组
    • 标志:3位(保留位、DF位、MF位)
    • 片偏移:13位,以8字节为单位
  3. 第8-11字节字段

    • 生存时间:8位,经过路由器减1,为0时丢弃
    • 协议:8位,上层协议类型
    • 首部校验和:16位,只检验首部
  4. 第12-19字节字段

    • 源IP地址:32位
    • 目的IP地址:32位
  5. 第20+字节字段(如果有)

    • 选项:可变长度,0-40字节
    • 填充:确保首部是4字节的整数倍

协议字段值对照表

协议值协议名称说明
1ICMPInternet控制报文协议,用于发送错误消息
2IGMPInternet组管理协议,用于多播
6TCP传输控制协议,面向连接的可靠传输
17UDP用户数据报协议,无连接的不可靠传输
47GRE通用路由封装,用于VPN
50ESPIPSec加密安全载荷,提供加密和认证
51AHIPSec认证头,提供数据完整性
89OSPF开放最短路径优先,内部网关路由协议

服务类型(ToS)字段详解

位置名称含义
0-2优先级000常规
001优先
010立即
011闪电
100覆盖
101关键
110网间控制
111网络控制
3延迟0正常延迟
1低延迟
4吞吐量0正常吞吐量
1高吞吐量
5可靠性0正常可靠性
1高可靠性
6成本0正常成本
1最小成本
7保留0保留未用

标志字段说明表

名称含义
0保留0必须为0
1DF0允许分片
1不允许分片
2MF0最后的分片
1还有分片

总结

IP数据报文的字段设计非常精巧,每个字段都有其特定的用途,共同保证了网络通信的可靠性和效率。理解这些字段的含义对于:

  • 网络故障排查
  • 性能优化
  • 安全防护

都有重要意义。

本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处