← 返回题目列表

TCP 校验和为什么要包含伪首部?它能防止哪些错误?

中等 第 29 / 30 题 更新于 2026/08/01
TCP校验和伪首部差错检测

简化版

TCP 校验和用于检测 TCP 首部、数据以及部分 IP 层关键信息是否在传输中出错。它不仅覆盖 TCP 报文段本身,还覆盖一个“伪首部”,其中包含源 IP、目的 IP、协议号和 TCP 长度。伪首部不真正发送在 TCP 首部里,但参与校验,能帮助发现报文被投递到错误地址或协议的问题。

详细版

TCP 校验和覆盖范围:

伪首部:源 IP、目的 IP、协议号、TCP 长度
TCP 首部
TCP 数据

接收方用同样范围重新计算校验和。如果结果不正确,说明报文可能损坏,通常丢弃。校验和是差错检测,不是加密认证,不能防恶意篡改。

完整版教学

一、校验和解决什么问题

网络传输中比特可能因为链路、设备、内存或驱动问题出错。TCP 校验和用于让接收端发现数据损坏。

发送端计算 checksum
接收端重新计算 checksum
不匹配则丢弃报文

它保证的是“尽量发现错误”,不是修复错误。

二、TCP 校验和覆盖哪些内容

TCP 校验和不仅覆盖 TCP 首部和数据,还覆盖 IP 层的一小段伪首部。

内容是否真实属于 TCP 报文是否参与校验
TCP 首部
TCP 数据
源 IP
目的 IP
协议号
TCP 长度

关键点:伪首部不随 TCP 单独传输,它来自 IP 首部,但会参与 TCP 校验和计算。

三、为什么需要伪首部

如果只校验 TCP 首部和数据,某些投递错误可能不容易被 TCP 层发现。伪首部把源/目的 IP、协议号、长度纳入校验,能增强端到端一致性检查。

例如目的 IP 错误、协议号错误、长度不一致,都可能导致校验失败。

四、它是不是安全机制

不是。TCP 校验和是简单的差错检测机制,不能抵御恶意攻击者。

随机错误:有较大概率被检测
恶意篡改:攻击者可重新计算校验和

安全认证需要 TLS、IPsec、MAC 或数字签名等机制。

五、和链路层 CRC 的区别

链路层通常也有 CRC,用于检测单跳链路上的错误。TCP 校验和是端到端的,跨越整个路径。

链路层 CRC:每一跳检查
TCP checksum:端到端检查

两者层次不同,可以互相补充。

六、IPv4 和 IPv6 中的注意点

IPv4 首部有自己的首部校验和,但不覆盖数据;TCP 校验和覆盖 TCP 数据。IPv6 去掉了 IP 首部校验和,因此传输层校验更重要。

对 UDP 来说,IPv4 中 UDP 校验和可选,IPv6 中通常是必需的;TCP 校验和一直是 TCP 的基本字段。

七、常见误区与追问

  • 误区:伪首部会作为 TCP 首部发送。 它只是参与计算,不是 TCP 报文的一部分。
  • 误区:校验和能防黑客篡改。 它不是密码学认证,攻击者可重算。
  • 误区:有链路层 CRC 就不需要 TCP 校验和。 一个是单跳,一个是端到端,层次不同。
  • 追问:伪首部包含什么? 源 IP、目的 IP、协议号、TCP 长度等。
  • 追问:校验失败会怎样? 接收方通常丢弃报文,依赖 TCP 重传恢复。
  • 追问:为什么 IPv6 下传输层校验更重要? IPv6 没有 IP 首部校验和。

八、加强记忆

TCP 校验和要记住“三块”:伪首部、TCP 首部、TCP 数据。伪首部来自 IP 层但不真正属于 TCP,它让 TCP 校验能覆盖地址和协议上下文。它防随机错误,不防恶意篡改。