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 字节

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

字段值速算速查

把"字段位数 / 单位 / 极值 / 常考动作"全部串起来,整道选择题就能在 30 秒内秒杀。

字段位数单位最小 → 最大常考动作
版本44(IPv4)/ 6(IPv6)直接看值判 IP 版本
首部长度 IHL44 B5 × 4 = 20 B → 15 × 4 = 60 B已知 IHL = n → 实际首部 = 4n 字节
总长度161 B0 → 65535 B数据部分长度 = 总长 − 4 × IHL
标识160 → 65535同一原报文的所有分片共享同一标识
标志 DF/MF1+10 / 1DF=1 不分片;MF=1 后面还有分片
片偏移138 B0 → (2¹³−1)×8 = 65528 B片偏移值 × 8 = 在原报文中的字节起点
TTL80 → 255每跳路由器减 1,到 0 丢弃并发 ICMP 超时
协议8见下TCP=6 / UDP=17 / ICMP=1 / OSPF=89
首部校验和16每跳重算(TTL 变了)
源/目的 IP各 320.0.0.0 → 255.255.255.255端到端不变(NAT 例外)

分片速算公式(高频)

给定 IP 数据报总长 L、首部长 H、链路 MTU M,分片数 n 与各片细节:

  • 每片可装数据 = (M − H) 向下取整到 8 的倍数(片偏移单位 8 B 决定)
  • 分片数 n=(LH)/每片可装数据
  • k 片(k 从 0 起)的片偏移字段值 = k×每片数据/8
  • 除最后一片外 MF = 1;最后一片 MF = 0
  • 所有分片标识字段相同

经典坑:MTU = 1500 时,IP 头 20 B → 可装数据空间 1480 B,而 1480 恰好是 8 的倍数,所以多数考题没暴露"向下取整到 8"这步。一旦链路是 PPP 链路 MTU = 1006 这类 8 ≠ 整除的数字,必须先把 (M − H) 向下取整到 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 后面还有分片

真题练习

相关真题(11题)

2023Q39选择题2分

子网地址范围计算:根据子网掩码确定网络号和可分配范围

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2023Q40选择题2分

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

IPv4 分组与地址IPv6
2022Q35选择题2分

IP 地址与子网掩码按位与运算求网络地址

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2021Q36选择题2分

IP 分片:总长度、MF 标志和片偏移的计算

IPv4 分组与地址
2019Q37选择题2分

CSMA/CA 帧间间隔:DIFS > PIFS > SIFS 的优先级关系

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2018Q47综合题7分

IP 分片与子网综合题:MTU 限制下的分片计算与广播地址

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2017Q36选择题2分

0.0.0.0 只能作为源地址,表示本机尚未获得 IP 地址

IPv4 分组与地址ARP / DHCP / ICMP
2017Q38选择题2分

/16 划分 128 个子网得 /23,每子网可分配 2⁹-2=510 个地址

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2011Q38选择题2分

/30 子网广播地址分析:.3 是广播地址,所有主机都能收到

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT
2011Q47综合题9分

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

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NATARP / DHCP / ICMP
2010Q37选择题2分

/24 用 /29 子网掩码划分:32 个子网,每子网 6 个可用地址

IPv4 分组与地址子网划分 / 子网掩码 / CIDR / NAT