请问一个循环冗余检测(CRC)问题

student2007 2009-01-04 06:54:36
1在《计算机网络自顶向下方法与Internet特色》page285第5行有这样一段话
"D·2r(r为2的指数)=nG XOR R 这个等式告诉我们,如果我们用G来除D·2r,余数值刚好为R.换句话说我们可以这样计算R:
R=余数(D·2r)/G"其中D为被发送数据比特,长度为d,R为CRC比特长度为r,XOR是异或。
请问在这段话中"如果我们用G来除D·2r,余数值刚好为R"这个结果是如何的来的?两边除以G的话,那么不是n XOR R吗?为何说余数值为R,余数值在这里如何理解?
2在该书的page284有这样一句话“考虑d比特的数据D,发送节点要把数据D发送给接收节点。发送方和接收方首先必须协商一个r+1比特模式,称为生成多项式,表示为G"
为何G是r+1比特模式?这样规定的理由什么?如何理解这个生成多项式G? G是确定的吗?为何8,12,16,32比特生成多项式有确定的国际标准?他们分别是多少?为什么是他们?
因为该书并没有对crc有详细的解释,所以看的一头雾水?无法理解?请各位大侠指点帮助?
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonywangm 2009-01-22
  • 打赏
  • 举报
回复
问题不清楚
yanghehong 2009-01-09
  • 打赏
  • 举报
回复
student2007,

1.
对模2运算来说,加减都跟异或(XOR)一样,所以:
nG XOR R = nG + R 。那么nG XOR 除以G余数为R。

2. G是r+1比特模式, 那么被除数是r+1位的,得到的余数(也就是你要的CRC)才是r位的啊。(你事先要求每一帧中用r位放CRC,r = 16或32等等)

G在某一应用环境中肯定要确定的啊。要标准规定好,这样接受方才能用同样的方法算出这个r比特的CRC,才能对比算出的和接收到的,然后确定数据是否完整。所以需要国际标准规定好。当然了,如果是你私有协议,不需要和其他设备沟通,那么你可以规定你自己的CRC算法。

各种协议 会选择 认为效率比较高,比较容易发现数据错误的 G(当然不一定是最高效)。制定的时候,或许根据数学属性(比如说选可约多项式还是不可约多项式)和工程实践来考虑。至于他们是什么,你查你使用的各个协议的标准文档,就可以找到。


- 千里孤行

student2007 2009-01-08
  • 打赏
  • 举报
回复
有谁知道吗?请指点一下,谢谢
noenoughmemory 2009-01-04
  • 打赏
  • 举报
回复
不懂,帮顶

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧