我无法在整个网络上找到这个问题的正确答案。Wikipedia 声明FCS 值是作为受保护 MAC 帧字段的函数计算的:源和目标地址、长度/类型字段、MAC 客户端数据和填充(即除 FCS 之外的所有字段) 帧的源/目标地址每一跳都有变化。此外,IP 标头 TTL 会被路由路由器修改。发生了如此多的变化,主发送方如何设置 FCS,而最终接收方如何根据 CRC/FCS 故障丢弃最终帧?
那么,回到我最初的问题:以太网报头中的 FCS 是以太网帧(以及上面的层)中所有字段的函数?
我无法在整个网络上找到这个问题的正确答案。Wikipedia 声明FCS 值是作为受保护 MAC 帧字段的函数计算的:源和目标地址、长度/类型字段、MAC 客户端数据和填充(即除 FCS 之外的所有字段) 帧的源/目标地址每一跳都有变化。此外,IP 标头 TTL 会被路由路由器修改。发生了如此多的变化,主发送方如何设置 FCS,而最终接收方如何根据 CRC/FCS 故障丢弃最终帧?
那么,回到我最初的问题:以太网报头中的 FCS 是以太网帧(以及上面的层)中所有字段的函数?
封装数据包的帧仅用于本地 LAN。帧头和 FCS 从数据包中剥离并被路由器丢弃。然后路由器会将数据包切换到下一个接口,路由器将为下一个接口构建一个新帧。下一个接口可能使用完全不同的数据链路协议。并非所有的数据链路协议都使用 MAC 寻址(甚至任何寻址),并且不同的数据链路协议可以有不同的方法来计算错误检测字段,甚至可能没有这样的字段。
例如,Wi-Fi 上的主机可以将帧发送到 WAP,WAP 是一个转换桥,将 Wi-Fi 帧转换为以太网帧并将该帧发送到路由器。路由器从数据包中删除并丢弃帧,然后将数据包切换到使用 PPPoA 的 WAN 连接 (DSL)。PPP 具有与以太网或 Wi-Fi 截然不同的帧,并且它不使用寻址,因为只有链路的另一端。使用的每种框架类型的 FCS 与使用的其他类型框架的 FCS 无关。
帧上的 FCS 仅用于帧发起的 LAN 上的源和目标(它也被 LAN 上的中间设备使用,例如交换机/网桥)。FCS 也被丢弃,因为帧头在被路由器接收时被丢弃,并且为下一个路由器接口创建新的帧头和 FCS(假设下一个数据链路协议使用 FCS)。
以太网帧尾部中的 FCS/CRC 是根据哪些字段计算的?
检查 IEEE 802.3 条款 3.2.9:
该值是作为 MAC 帧受保护字段内容的函数计算的:目标地址、源地址、长度/类型字段、MAC 客户端数据和填充(即除 FCS 之外的所有字段)。
帧的源/目标地址在每一跳发生变化。
帧(包括 MAC 源地址和目标地址)不会在 L2 跃点之间发生变化。对于 L3 跃点(路由器),包含 MAC 地址的帧不会在跃点中存活。相反,路由器解封装包含的 L3/IP 数据包,做出转发决定,并(如有必要)将数据包重新封装在为出口段构建的新帧中。
此外,IP 标头 TTL 会被路由路由器修改。
确实如此。但是请注意,IP 标头是 L3 数据包的一部分。
发生了如此多的变化,主发送方如何设置 FCS,而最终接收方如何根据 CRC/FCS 故障丢弃最终帧?
主要发送者构建 IP 数据包,包括标头校验和(对于 IPv4)。对于以太网,IP 数据包被封装在一个以太网帧中,其中包括计算出的 FCS。在到达第一个路由器之前,帧不会在其路径上的交换机上发生变化,帧被丢弃。
最终 IP 目的地从其本地网关构建的帧中检查 FCS,提取 IP 数据包,检查其标头校验和(对于 v4)并提取其有效负载,通常使用自己的校验和。
由于 IPv4 标头校验和几乎是多余的,并且持续的 TTL 更改和校验和重新计算给路由器带来了负载,因此 IPv6 的校验和已被删除。