在网络的几乎每一层检查错误的目的是什么?
例如,鉴于 CRC 已经在较低层进行了检查,我看不到在 TCP 中使用校验和的目的。或者在应用层检查 md5sum,因为 TCP 有它自己的校验和技术。是不是效率低下?
在网络的几乎每一层检查错误的目的是什么?
例如,鉴于 CRC 已经在较低层进行了检查,我看不到在 TCP 中使用校验和的目的。或者在应用层检查 md5sum,因为 TCP 有它自己的校验和技术。是不是效率低下?
如果数据包在线路上损坏,则以太网 FCS 应该捕获该数据包。但是,许多交换机和路由器将剥离 FCS,路由数据包,然后计算新的 FCS。如果数据包在交换机内部乱序时损坏(偶尔发生),那么您最终将得到一个具有有效以太网 FCS 的损坏数据包。这就是在多个级别执行错误检测的原因。在更高级别执行检查也很常见 - 例如,检查大型下载文件的哈希值,以防万一有关传输的其他问题被搞砸(数据包损坏导致 tcp 错过错误,或者服务器发送错误首先将数据发送到 tcp 堆栈,或者从磁盘或服务器读取数据时数据已损坏'
请记住,每一层都是独立于其他每一层的,一个层中每个协议的原始设计是我的层不能依赖你的层做任何错误检测,或者我的层需要的错误检测。此外,如果您有一个数据报以特定层为目的地(例如第 2 层的 ARP,或第 3 层的 ICMP),则数据报的目的地层希望确保数据报在接收时有效,并且它没有在层之间错位。
就您而言,IPv6 实际上已经放弃了对数据包的错误检测,因为它假设它上面和下面的层将执行错误检测。
您没有指定在您的案例中运行的协议或媒体 TCP,但假设是 IP,由发送方计算并由接收方检查的校验和仅验证数据包标头,而不是有效负载。
正如其他人所指出的,TCP 可以运行在其他可能不提供数据完整性的协议和媒体上,但 TCP 根据RFC793必须保证数据完整性,因此它会对数据本身进行检查。
正如丹尼尔所说:
更高级别的校验和检查更高级别的错误。不这样做会假设从通道开始的所有处理都是 100% 无错误的,这也不一定是正确的。
这几乎总结了它。由于没有数据线是无噪声的,多级错误检查还将捕获在层间传输过程中发生的错误。