← 返回学习笔记

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 基本计算思想

发送方通常按以下步骤计算:

  1. 把检验和字段暂置 0。
  2. 按 16 位字进行反码加法。
  3. 最高位产生的进位回卷,加到最低位。
  4. 对最终和逐位取反,写入检验和字段。

接收方把所有 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 解题步骤

  1. 先确定是哪一层的检验和:IPv4 只看首部,UDP/TCP 看伪首部、首部和数据。
  2. 长度字段题先写单位:总长度 1 B、IHL/Data Offset 4 B、片偏移 8 B。
  3. 分片时用 $\lfloor(MTU-IHL)/8\rfloor\times8$ 求非末片最大数据长度。
  4. 传输效率的分母要加入每层实际出现的首部和尾部,并检查以太网是否需要填充。
  5. 伪首部记住“源 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。