1 题型 - IP、UDP、TCP报文段
408 学习笔记:1 题型 - IP、UDP、TCP报文段。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。
本页目录
描述:本题型综合考查 IPv4、UDP、TCP 的首部长度和字段单位、因特网检验和、IP 分片、协议封装效率与运输层伪首部。关键是分清“IPv4 只校验首部”和“UDP/TCP 校验首部与数据”。
TIP · 章节导航:返回第五章:运输层总纲
1.1 三种首部快速对比
| 项目 | IPv4 数据报 | UDP 用户数据报 | TCP 报文段 |
|---|---|---|---|
| 最小/固定首部 | 20 B | 8 B | 20 B |
| 最大首部 | 60 B | 固定 8 B | 60 B |
| 长度相关单位 | 总长度 1 B;IHL 4 B;片偏移 8 B | Length 以 B 计,含首部与数据 | Data Offset 以 4 B 为单位 |
| 检验范围 | 只校验 IPv4 首部 | 伪首部 + UDP 首部 + 数据 | 伪首部 + TCP 首部 + 数据 |
| 地址/端口 | 源、目的 IPv4 地址各 4 B | 源、目的端口各 2 B | 源、目的端口各 2 B |
1.2 UDP 用户数据报
UDP 首部固定为 8 B,由 4 个 2 B 字段组成:
| 字段 | 长度 | 含义 |
|---|---|---|
| 源端口 | 2 B | 发送进程端口 |
| 目的端口 | 2 B | 接收进程端口 |
| 长度 | 2 B | UDP 首部与数据的总长度 |
| 检验和 | 2 B | 覆盖伪首部、UDP 首部与数据 |
- IPv4 中 UDP 检验和可以不使用,此时字段全 0。
- IPv6 中普通 UDP 报文默认必须计算检验和;特定 UDP 隧道的外层封装报文才允许按协议要求启用零检验和模式,这不是普通 UDP 通信的可选开关。
NOTE · 教材补充:IPv6 UDP 的例外边界 408 基础题按“IPv6 UDP 检验和必须使用”判断即可;更完整的协议规定见 RFC 6935:满足其限制条件的 UDP 隧道可为指定端口启用零检验和模式,默认模式的报文仍须计算检验和。
- UDP 长度最小为 8 B,因为长度包含首部自身。
1.3 TCP 报文段
- TCP 固定首部为 20 B,带选项时最大为 60 B。
- 源端口、目的端口各 2 B。
- 序号与确认号各 4 B。
- **教材补充与纠错:**不含 SYN 的数据段,其
seq是数据首字节序号;若设置 SYN,seq是 SYN 的初始序号,同段数据的首字节序号为seq+1。FIN 位于数据之后并占 1 个序号;无数据且无 SYN/FIN 的纯 ACK 不占序号。详见 RFC 9293 的序号定义。 - 确认号表示期望收到对方的下一个序号;在普通数据阶段,它通常就是下一个数据字节的序号,确认 SYN/FIN 时还须计入它们各占的 1 个序号。
- 数据偏移 Data Offset 表示 TCP 首部长度,单位为 4 B。
- 窗口字段表示允许对方继续发送的数据量,用于流量控制。
- TCP 检验和覆盖伪首部、TCP 首部与数据,IPv4 和 IPv6 中都使用。
1.4 IPv4 首部与字段单位
1.4.1 长度与地址
- IPv4 固定首部为 20 B,最大 60 B。
- 首部长度 IHL 的单位是 4 B。
- 总长度字段的单位是 1 B,值包含首部和数据。
- 片偏移字段的单位是 8 B。
- 源地址、目的地址各占 4 B。
可用口诀记住三个单位:
总长度:1 B
片偏移:8 B
首部长度:4 B
1.4.2 DF、MF 与 TTL
- DF=1:不允许分片。
- DF=0:允许分片。
- MF=1:后面还有分片。
- MF=0:这是最后一片;未分片数据报的 MF 也为 0。
- 每经过一个路由器,TTL 减 1;减到 0 时丢弃,通常向源端发送 ICMP 时间超过报文。但若原分组为广播/多播、非首片分片,或原分组本身为 ICMP 差错报文等,按 ICMP 差错报文的禁止回复规则不发送。
1.4.3 首部检验和
IPv4 检验和只覆盖首部,所以也称首部检验和。路由器转发时 TTL 会改变,必须重新计算首部检验和。
1.5 因特网检验和
1.5.1 基本计算思想
发送方通常按以下步骤计算:
- 把检验和字段暂置 0。
- 按 16 位字进行反码加法。
- 最高位产生的进位回卷,加到最低位。
- 对最终和逐位取反,写入检验和字段。
接收方把所有 16 位字连同检验和一起求反码和,正确结果应为全 1。
这种算法简单、适合路由器频繁更新 IPv4 首部,但检错能力弱于 CRC。
1.5.2 三种协议的校验范围
| 协议 | 校验范围 |
|---|---|
| IPv4 | 仅 IPv4 首部,不含数据载荷 |
| UDP | 伪首部、UDP 首部、UDP 数据 |
| TCP | 伪首部、TCP 首部、TCP 数据 |
IPv6 取消的是 IPv6 基本首部中的首部检验和字段,不是取消整个协议栈中的 UDP/TCP 检验和。
1.5.3 首部误码与 ICMP
- 路由器若通过 IPv4 首部检验和发现首部误码,默认静默丢弃数据报,不向源主机发送 ICMP 差错报告。
- ICMP 参数问题表示必需首部字段缺失,或某些字段值在语义上不正确;这可能来自实现错误或恶意构造,不等同于“检验和查出比特误码”。
- 检测到参数问题时,路由器丢弃数据报,并可向源主机发送 ICMP 参数问题报文。
1.6 模拟题一:检验和叙述
四项叙述的判断:
| 编号 | 判断 | 原因 |
|---|---|---|
| I | 错误 | IPv4 只校验首部,UDP/TCP 的校验范围还包含数据 |
| II | 正确 | 因特网检验和的检错能力弱于 CRC |
| III | 错误 | IPv6 基本首部无校验和,但 UDP/TCP 仍使用检验和 |
| IV | 错误 | 首部检验和发现误码时默认静默丢弃,不发送 ICMP 参数问题 |
只有 II 正确。
答案:A,仅 II。
1.7 IPv4 分片计算
题图给出:原 IPv4 数据报总长度 1500 B,首部 20 B,链路 MTU 为 800 B。
原数据长度:
$$ 1500-20=1480\ \mathrm{B} $$
每片可放的数据既不能超过 $800-20=780$ B,又必须是 8 B 的整数倍:
$$ \left\lfloor\frac{780}{8}\right\rfloor\times 8 =97\times 8 =776\ \mathrm{B} $$
剩余数据:
$$ 1480-776=704\ \mathrm{B} $$
分片结果:
| 分片 | 首部 | 数据 | 总长度 | 片偏移 | DF | MF |
|---|---|---|---|---|---|---|
| 第 1 片 | 20 B | 776 B | 796 B | 0 | 0 | 1 |
| 第 2 片 | 20 B | 704 B | 724 B | $776/8=97$ | 0 | 0 |
最后一片的数据长度可以不是 8 B 的整数倍;本题恰好是。片偏移表示本片数据在原始数据部分中的起始位置,不包含任何 IP 首部。
1.8 模拟题二:HTTP 报文传输效率
HTTP 请求报文为 222 B;TCP 和 IPv4 都采用 20 B 固定首部;以太网帧头 14 B、FCS 4 B;不考虑物理层前导码。
封装后的总长度:
$$ 222+20+20+14+4=280\ \mathrm{B} $$
有效载荷效率:
$$ \eta=\frac{222}{280}\times100% \approx79.3% $$
本题网络层载荷为 $222+20=242$ B,大于以太网最小数据字段 46 B,不需要额外填充。
答案:约 79.3%。
1.9 模拟题三:UDP/TCP 伪首部
1.9.1 IPv4 伪首部结构
UDP 和 TCP 计算检验和时,在运输层报文段前临时添加伪首部:
| 字段 | 长度 | TCP 值 | UDP 值 |
|---|---|---|---|
| 源 IPv4 地址 | 4 B | 源 IP | 源 IP |
| 目的 IPv4 地址 | 4 B | 目的 IP | 目的 IP |
| 保留 | 1 B | 0 | 0 |
| 协议 | 1 B | 6 | 17 |
| 运输层长度 | 2 B | TCP 报文段长度 | UDP 用户数据报长度 |
伪首部只参与检验和计算,不作为运输层报文的一部分传输。
1.9.2 选项判断
题目问伪首部除全 0 保留字节外,还包含 IPv4 首部中的哪些字段:
I. 源 IP 地址
II. 目的 IP 地址
III. 生存时间 TTL
IV. 协议
伪首部包含 I、II、IV,不包含 TTL。
答案:D,仅 I、II、IV。
1.10 解题步骤
- 先确定是哪一层的检验和:IPv4 只看首部,UDP/TCP 看伪首部、首部和数据。
- 长度字段题先写单位:总长度 1 B、IHL/Data Offset 4 B、片偏移 8 B。
- 分片时用 $\lfloor(MTU-IHL)/8\rfloor\times8$ 求非末片最大数据长度。
- 传输效率的分母要加入每层实际出现的首部和尾部,并检查以太网是否需要填充。
- 伪首部记住“源 IP、目的 IP、0、协议、长度”,不含 TTL。
1.11 易错点
- IPv4 首部检验和不保护数据载荷。
- IPv6 取消自身基本首部校验和,但 UDP/TCP 检验和仍然存在;普通 IPv6 UDP 默认不能省略检验和,特定隧道外层封装是受限例外。
- UDP 长度包含 8 B 首部,TCP 确认号表示期望收到的下一个字节序号。
- IP 片偏移以 8 B 为单位,TCP/IPv4 首部长度字段以 4 B 为单位。
- 非最后分片的数据长度必须是 8 B 的整数倍;最后一片可以不是。
- 首部校验和发现误码时是静默丢弃,不要误判为 ICMP 参数问题。
- 伪首部参与校验但不传输,也不含 TTL。
相关知识
- 科目导航:计算机网络导航
- 阅读顺序:上一篇:运输层思维导图 · 下一篇:连接控制
- 关联专题:运输层总纲
1.12 本节复盘
- UDP 首部固定 8 B;TCP 和 IPv4 首部均最小 20 B、最大 60 B。
- IPv4 只校验首部,UDP/TCP 校验伪首部、首部和数据;因特网检验和弱于 CRC。
- IPv6 取消基本首部校验和,不影响 UDP/TCP 继续使用检验和。
- 1500 B 数据报经过 MTU 800 B 链路时分为 776 B 与 704 B 数据,两片偏移为 0、97。
- 222 B HTTP 报文经 TCP、IPv4、以太网封装后的效率约为 79.3%。
- IPv4 运输层伪首部包含源 IP、目的 IP、0、协议和运输层长度,不含 TTL;模拟题三答案 D。