摘要

  • IPv4 的 16 位校验和只覆盖报头,用来检查处理和转发数据报所需的信息。
  • 报头字段会在传输中改变,因此每个报头处理点都必须验证并重新计算校验和。

保护转发所依赖的部分

RFC 791 将校验和定义为报头所有 16 位字的一补码和的反码。计算时,校验和字段本身按零处理,结果写回报头。

目的地址、长度、分片状态、生存时间和协议标识都会影响数据报的处理。RFC 791 因而说明,校验和验证的是处理信息,而数据本身仍可能出错。检测到报头校验失败时,检测实体必须立即丢弃数据报。

这不是端到端的数据完整性服务。IPv4 校验和不覆盖载荷;仅凭它无法知道载荷是否受到其他机制保护。

报头会合法地变化

路由器处理数据报时会减少 TTL。分片、地址变化或选项变化也可能改写报头。RFC 791 要求在每个报头处理点进行验证和重新计算。

实现可以完整重算,也可以只根据旧值和变化字段进行增量更新。RFC 1624 强调,增量路径必须与完整计算产生完全相同的结果。

零的两种表示

一补码算术有正零和负零两种零表示。RFC 1141 的早期增量公式在特殊情况下可能得到与完整计算不同的表示。RFC 1624 修正了公式,但没有改变线上的字段宽度或报头专属范围。

来源