Skip to content

IPv4 数据报格式

考情分析

IP 数据报格式是网络层的基础知识点,选择题中经常围绕某个具体字段出题,比如问 TTL 的作用、首部长度的单位、片偏移的单位等。偶尔也会在大题中结合分片一起考。

考频:★★★

IP 数据报的整体结构

一个 IP 数据报由首部数据部分组成。首部又分为两部分:

  • 固定部分:20 字节,每个 IP 数据报都有
  • 可选部分:0~40 字节,长度可变

数据部分承载的是上层协议(TCP/UDP)的报文段。

+-----------------------------+
|       IP 首部(20~60B)      |
+-----------------------------+
|       数据部分               |
|   (TCP/UDP报文段等)         |
+-----------------------------+

首部字段逐一解析

IP 首部固定部分共 20 字节,按 4 字节一行来看,共 5 行。

第 1 行(字节 0~3)

字段位数说明
版本(Version)4 bitIPv4 填 4,IPv6 填 6
首部长度(IHL)4 bit单位是 4 字节。最小值 5(即 20B),最大值 15(即 60B)
区分服务(TOS)8 bit指示期望的服务质量,一般不考
总长度(Total Length)16 bit整个数据报的长度,单位是字节。最大 2161=65535 字节

首部长度字段是个容易出错的地方:它的值乘以 4 才是实际的首部字节数。如果首部长度字段值为 5,说明首部长 5×4=20 字节,没有可选部分。

第 2 行(字节 4~7)

字段位数说明
标识(Identification)16 bit同一个数据报的所有分片使用相同的标识值
标志(Flags)3 bit见下方详解
片偏移(Fragment Offset)13 bit单位是 8 字节。表示该分片在原始数据报中的相对位置

标志字段的 3 个 bit:

名称含义
第 1 位保留置 0
第 2 位DF(Don't Fragment)1 = 不允许分片
第 3 位MF(More Fragments)1 = 后面还有分片,0 = 这是最后一个分片

第 3 行(字节 8~11)

字段位数说明
生存时间(TTL)8 bit每经过一个路由器减 1,减到 0 就丢弃。防止数据报在网络中无限循环
协议(Protocol)8 bit指示数据部分使用的上层协议。TCP=6,UDP=17,ICMP=1,OSPF=89
首部校验和(Header Checksum)16 bit只校验首部,不校验数据部分

TTL 的最大值是 255(8 bit 无符号整数)。常见操作系统的默认 TTL 值:Linux 为 64,Windows 为 128。

第 4~5 行(字节 12~19)

字段位数说明
源 IP 地址32 bit发送方的 IP 地址
目的 IP 地址32 bit接收方的 IP 地址

可选部分(字节 20~59)

可选部分长度可变,用于支持安全、源路由、记录路由、时间戳等功能。408 考试很少涉及可选部分的具体内容,但要注意:如果有可选部分,需要用 0 填充对齐到 4 字节的整数倍。

首部校验和的计算

IP 首部校验和只保护首部,不保护数据部分(这和 TCP/UDP 不同,它们的校验和覆盖了伪首部+首部+数据)。

计算步骤:

  1. 将首部校验和字段置为 0
  2. 把首部视为若干个 16 位的字,逐个相加
  3. 如果有进位,将进位加到低位(反码求和)
  4. 对结果取反码,填入校验和字段

验证时,接收方对整个首部(包含校验和字段)做同样的反码求和运算,如果结果全为 1(即 0xFFFF),则校验通过。

为什么只校验首部?因为 IP 层认为数据部分的校验应该由上层协议(TCP/UDP)负责,这样可以减少路由器的计算负担——每经过一个路由器,TTL 减 1,首部校验和都要重新计算。

几个容易混淆的"单位"

字段单位
首部长度4 字节
总长度1 字节
片偏移8 字节

这三个单位不一样,做题时千万看清楚。

交互可视化

加载可视化中...

易错点

1. 首部长度的单位不是字节

首部长度字段的单位是 4 字节。如果看到首部长度字段值为 7,说明首部长度是 7×4=28 字节,其中 8 字节是可选部分。

2. 总长度 vs 数据链路层的长度限制

IP 数据报最大可以 65535 字节,但受限于数据链路层的 MTU(最大传输单元,以太网为 1500 字节),超过 MTU 的数据报必须分片。总长度指的是 IP 层看到的长度,不是物理帧的长度。

3. 首部校验和每跳都要重新计算

因为 TTL 每经过路由器减 1,所以首部内容变了,校验和也必须重新计算。这是 IPv4 的一个效率痛点,IPv6 直接取消了首部校验和。

4. 协议字段的常考数值

TCP=6,UDP=17,ICMP=1。这几个值选择题里偶尔直接考。

高频考点清单

  • 首部长度字段的单位是 4 字节,最小值 5,最大值 15
  • 总长度字段的单位是字节,包含首部 + 数据
  • 片偏移字段的单位是 8 字节
  • TTL 的作用及每跳减 1 的机制
  • 首部校验和只覆盖首部,且每跳重新计算
  • 协议字段标识上层协议(TCP=6, UDP=17, ICMP=1)
  • DF=1 不允许分片,MF=1 后面还有分片

真题练习

相关真题(6题)

2023Q40选择题2分

IPv6 vs IPv4:双栈和隧道过渡技术,Hop Limit 等价于 TTL

2020Q47综合题9分

子网划分与 NAT 综合题:地址规划、NAT 转换表与路由转发

2016Q38选择题2分

NAT 转换后的 IP 地址:源地址替换为公网地址,目的地址不变

2012Q37选择题2分

IP 路由器的核心功能:运行路由协议、隔离广播域、转发分组、可运行 DHCP

2012Q47综合题9分

TCP/IP 综合题:IP 首部字段、路由转发与 TCP 数据传输

2011Q47综合题9分

Web 访问全过程综合题:ARP/MAC/HTTP/路由器协同工作