CRC循环冗余校验的原理

之前学习计算机网络时一直不明白循环冗余校验的原理,今天仔细看了谢希仁的《计算机网络》总算是搞明白了。CRC是数据链路层检验比特差错的校验方法,所谓比特差错,是指在传输过程中1变成0,0变成1的错误。假如在发送端有一组数据M=1010001110010101,这组数据有k=16位,我设置冗余码为n=4位,那么在发送的时候要将n为冗余码添加在原数据M之后形成M+n位发送,然后接收端对收到的数据进行校验。

校验码的生成

在数据M后添加n个0,即M的2^n倍,用这个M+n位的数除以一个n+1位除数P,得到n位的余数R,这个余数就是冗余码。除数P是收发双方约定好的。下面计算M=1010001110010101的冗余码,假设除数P=11001,CRC计算过程如下:

由于不会在电脑上输入竖式,所以在本上手写的。在做减法时,1-1=0,1-0=1,0-0=0,0-1=1,不借位。如在上面的计算过程中第1次的减法中10100-11001=1101。因此,只要被减数是5位(最高位是1)就商1,而无论是否被减数大于减数,在前面的减法中按理说10100<11001,但还是商1。最后算得余数R=110,但我们需要的是4位的冗余码,所以在R的前面添一个0,则冗余码为0110。那么发送端发送的数据就是10100011100101010110。

数据的检验

接收方对接收到的数据要进行CRC校验,检验的方式是用收到的M+n位数据除以同样的除数P,做除法的方式与之前计算冗余码的方式相同,如果得到余数是0那么就判断接收到的数据没有出现差错,否则就认为出现了差错,就丢弃。由于在出现差错的情况下余数为0 的可能是极小的,所以用CRC进行误码判断是可行的。

常用的除数P有1011,1101,11101,111010001等。

 

 

 

 

 

 

 

 

 

 

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值