如果路由器上发生数据包错误,谁会检测错误,IP 校验和或 TCP 校验和?我知道 IPv4 校验和仅检测 IP 标头内的错误,而 TCP 校验和检测所有段内的错误以及 IP 地址上发生的错误,但我不明白哪些错误是由谁检测到的。
IP校验和和TCP校验的区别
网络工程
ip
ipv4
通讯协议
网络
校验和
2021-07-20 06:20:21
3个回答
当您的数据沿网络堆栈向上传输时,可能会在堆栈的每一层进行错误检测。
例如,以太网具有用于其帧的 FCS(其他数据链路协议可能有自己的检测帧错误的方法)。任何未通过 FCS 测试的帧都会被丢弃,有效载荷永远不会到达网络层。
IPv4 有一个报头校验和来检测第 3 层 IPv4 数据包报头中的错误,它丢弃任何与报头校验和不匹配的数据包,有效载荷永远不会到达传输层。IPv6 消除了对其第 3 层数据包的任何错误检测。请记住,一开始甚至不应该将错误的地址传送给主机。
传输协议可能会或可能不会对第 3 层数据包有效载荷(第 4 层段或数据报)进行错误检测。TCP 有一个校验和,涵盖 TCP 伪标头和有效负载。它对于 IPv4 上的 UDP 是可选的,但对于 IPv6 上的 UDP 是强制性的。其他传输协议可能具有错误检测功能,而其他传输协议可能没有。如果传输协议没有错误检测,则由应用程序来检查错误。
路由器只检查 IPv4 报头校验和。如果报头损坏,则丢弃数据包。此处未检测到有效负载或更高层错误。IPv6 甚至丢弃报头校验和并将其留给上层。
TCP 在 IP(伪)标头、TCP 标头和 TCP 负载之间运行校验和。最初,此校验和仅由最终目的地检查。但是,某些设备(尤其是 NAT 路由器)会更改标头字段并需要重新计算校验和 - 在它们这样做之前,它们会检查接收到的校验和。许多防火墙还会对当前的校验和进行检查。
此外,较低层可能会运行自己的校验和。最值得注意的是,以太网跨链路层网络使用帧校验和 (FCS)。一些高速以太网物理层变体增加了前向纠错 (FEC),可以检测甚至纠正较小的错误。
IPv4 校验和仅检查 IP 标头中的损坏。
TCP 校验和检查两个有效负载 TCP 标头中的损坏。