RFC 2460, Internet Protocol, Version 6 (IPv6) Specification, Section 8.1 Upper-Layer Checksums指出 UDP 校验和是强制性的,任何 IPv6 接收器都必须丢弃包含零校验和的 UDP 数据包,而 IPv4 是可选的。
谁放弃它,在什么水平?
硬件会丢弃它还是堆栈中的某些层会丢弃它?
RFC 2460, Internet Protocol, Version 6 (IPv6) Specification, Section 8.1 Upper-Layer Checksums指出 UDP 校验和是强制性的,任何 IPv6 接收器都必须丢弃包含零校验和的 UDP 数据包,而 IPv4 是可选的。
谁放弃它,在什么水平?
硬件会丢弃它还是堆栈中的某些层会丢弃它?
以太网有自己的校验和,它与 IP、TCP 或 UDP 无关。TCP 和 IPv6 都与 UDP 校验和无关。源上的 UDP 将创建校验和,目标上的 UDP 将验证校验和。
我认为您并不真正了解网络堆栈层。
第 2 层协议,例如以太网、Wi-Fi 等,可以使用校验和。通常,第 2 层协议将丢弃任何具有错误校验和的第 2 层帧,沿第 2 层路径的任何位置。例如,交换机将丢弃校验和错误的以太网帧。第 2 层协议不关心在其帧中携带哪些第 3 层或第 4 层协议,它们也不知道任何第 3 层或第 4 层校验和。
在第 3 层,IPv4 有一个报头校验和,第 3 层设备(例如路由器或主机)将检查以验证 IPv4 报头的完整性,丢弃任何报头校验和错误的第 3 层数据包。IPv6 已经取消了 IPv4 标头校验和。第 3 层协议不关心哪个第 2 层协议承载它们的第 3 层数据包,也不关心它们承载哪些第 4 层协议。他们也不知道任何第 2 层或第 4 层校验和。
第 4 层协议(例如 TCP、UDP 等)可能具有校验和。在 IPv4 中,UDP 校验和是可选的,但对于 IPv6 是强制性的。第 4 层协议将检查它自己的校验和,并将丢弃任何具有错误第 4 层校验和的数据报。第 4 层协议不知道任何第 2 层或第 3 层校验和。
硬件会丢弃它还是堆栈中的某些层会丢弃它?
这取决于。
传统上,NIC 只关心以太网级别的东西。因此它将验证“帧校验序列”并检查目标 MAC 地址,但更高级别的校验和将留给操作系统。
然而,现代 NIC 通常可以选择至少部分处理更高级别的协议栈,以减少主 CPU 的负载。