我一直在阅读自定义低速通信协议,该协议计算完整有效负载的 CRC。该有效载荷可以分成多个数据包。自定义协议在现有总线协议之上运行,该协议允许可选的每个数据包 CRC。
所以可能发生的是:
包装 0:S| Pkt Hdr Seq=0 | 有效载荷的开始 | PKT CRC |E
包装 1:S| Pkt Hdr Seq=1 | 有效载荷续 | PKT CRC |E
包装 2:S| Pkt Hdr Seq=2 | 有效载荷结束 | 有效载荷 CRC | PKT CRC |E
S - 数据包的开始;E - 数据包结束;Seq - 数据包的序列号
当已经存在数据包级 CRC 时,为什么协议会在其传递的有效负载上具有自己的 CRC?有效载荷已受到保护。协议设计者知道 CRC 数据包级选项。
我能想到的唯一原因是:
- 将有效载荷向下传递到较低协议层的层不一定知道较低层是否已经具有CRC
- 传递有效载荷的层不知道较低协议层的配置是否启用了 CRC。
- 将有效载荷向下传递的层正在有效载荷上使用高级错误检查或纠正技术。
- 将有效载荷向下传递的层正在保护有效载荷免受潜在的不良/脆弱的较低层/硬件的影响。
1、2 和 3 不适用于这种情况。所以 4 我唯一的“好”理由。