我一直在阅读一个自定义的低速通信协议,它计算一个CRC的全部有效载荷。此有效载荷可分成多个数据包。自定义协议运行在现有总线协议之上,该协议允许每个数据包CRCs可选。
所以可能发生的是:
Pkt 0: s_ Pkt Hdr Seq=0 _~_
Pkt 1: s_ Pkt Hdr Seq=1 _x有效载荷续用_
Pkt 2: s_s_ Pkt Hdr Seq=2 \\E.有效载荷的结束
分组的开始;包的E端;分组的序列号
为什么一个协议会在它通过的有效负载上有它自己的CRC,当已经有一个数据包级别的CRC时?有效载荷已经受到保护。协议设计者知道CRC数据包级选项。
我能想到的唯一原因是:
1,2,&3不适用于这种情况。所以我唯一的“好”理由是。
发布于 2013-08-14 22:58:37
1,4,也许3。
在协议栈中,层之间相互独立通常是很重要的。层通常有它们提供的基本服务,并且可以提供额外的功能。例如:在ISO/OSI 7层,您可以编写一个通过套接字进行通信的应用程序。如果将校验和添加到您自己的应用程序级协议层,则不必依赖下面TCP或UDP层的错误检查。
因此,在目前的情况下,您可能知道协议运行在某个现有的总线协议上。但也许在未来(比如说5年后),那辆公共汽车会被换成别的东西。某种I2C谁知道呢。现在,通常较新的协议可能提供更好的错误检查,但您不必依赖未知。
您可以在ISO/OSI层中观察到这一点,更多的层有各种错误检查。这似乎是多余的,但层技术是可交换的。
发布于 2013-08-14 21:50:43
在从源到目的地时,包可以多次(下层)跳。在目的地验证校验和确保我们没有在任何中间跳中遇到任何位错误。因此,即使我们将一个数据包分割成多个较小的数据包,它也是执行分段的源,也是重新组合碎片的目的地。这就是为什么,从校验和的角度来看,它使senese将每个片段作为一个单独的包来处理。事实上,这正是在IP网络中进行分割和校验和的方式。如果要发送的数据包大于MTU,则发送方将分组分割为多个较小的数据包,并计算每个数据包的校验和。一旦目标接收到这些片段,它就会在重新组装之前验证每个片段的校验和。所以,我也将选择4!
https://stackoverflow.com/questions/18242223
复制相似问题