以太网数据包中使用的校验和不能 100% 检测到错误。如果是这种情况,我如何确保我从一台计算机传输到另一台计算机的某些文件未损坏?
谢谢
以太网数据包中使用的校验和不能 100% 检测到错误。如果是这种情况,我如何确保我从一台计算机传输到另一台计算机的某些文件未损坏?
谢谢
以太网 FCS 的目的是检测相当简单的错误并尽快丢弃损坏的帧(即不转发损坏的帧)。它不能保证 100% 的完整性(实际上,没有什么能真正做到这一点)。但是,由于 FCS 会在每个交换跳上检查,因此错误不会堆积起来,而且比听起来更有效。此外,以太网帧被限制为 1500 字节的有效负载,并且多个错误相互抵消的机会非常低。
当需要更好的完整性时,需要更高层的协议来做到这一点。他们也经常为他们的 PDU 使用校验和,例如 TCP 或(可选的)UDP。当然,应用程序甚至可以对应用层协议或传输对象本身进行完整性检查。另一种选择是通过侧通道传输良好的校验和(例如 SHA256) - 将其放在网页上或数据文件之外的额外文件中,以便接收器可以验证完整性。
如果错误通过以太网校验和,则它可能被 TCP/UDP 校验和检测到。以太网校验和是 32 位,而 TCP/UDP 校验和是 16 位,因此如果校验和是理想且独立的随机预言机,则损坏数据包通过两者的机会将为 2 48中的 1
不幸的是,以太网和 IP 中使用的校验和远非理想的随机预言。此外,并非所有网络路径都受到校验和的保护。以太网校验和被剥离并在每个路由器跃点重新生成。TCP 校验和在老式 IP 网络中是端到端的,但必须由 NAT 设备修改。
在数据量小且数据包损坏的可靠网络上,保护可能足够好,用户不太可能注意到问题,但随着数据量的增长或应用程序在有问题的网络上运行,可能损坏的数据变得更加真实。
从数学上讲,没有校验和可以检测到 100% 的错误,但有可能足够接近以至于它实际上并不重要。
根据经验,如果一种保护方法足以防止恶意修改,那么它足以防止任何合理的意外修改。通常,最简单的解决方案是使用 TLS 之类的东西,它可以防止意外和恶意修改。