CRC 循环冗余检测

一、基础知识

1.异或运算xor

异或,顾名思义,只有当两个数不同时结果才为1
如0xor0=0,0xor1=1,1xor0=1,1xor1=0

2.模2算术

模2算术的规则为:加法不进位,减法不借位

(1)模2加法和减法

加减相对来说比较容易,加法不进位,减法不借位,相当于异或运算

0+0=0   0+1=1  1+0=1   1+1=0

0-0=0   0-1=1   1-0=1   1-1=0

(2)模2乘法

模2乘法表面上与十进制乘法相似,0与任何数相乘都等于0,如下。

0×0=0   0×1=0   1×0=0   1×1=1

模2乘法与寻常乘法不同之处在于在进行列竖式计算过程中,加法为模2加法,即不进位,或者说是异或运算。
例:

      	1 0 1 1
×  	 	  1 0 1
———————————————————			
        1 0 1 1
      0 0 0 0
+   1 0 1 1
———————————————————		
    1 0 0 1 1 1

(3)模2除法

被除数位数足够,即位数 ≥ 除数位数,则商对应写1,不够则商对应写0。

具体例子可以参照CRC求R过程

二、CRC循环冗余检测

1.背景

数据在传输过程中可能会有比特损失和替换,所以接收方要检测收到的数据是否无差错。

2.原理

假设发送方要发送d比特的数据D。
为了差错检验,发送方要在d比特数据的右边加上r比特的数据R,形成d+r比特的数据D+R。
发送方和接收方协商一个生成多项式G(r+1比特),当d+r比特用模2算术(可视作异或)恰好能被G整除时(即余数为0),则数据正确,否则出现了差错。

3.求R

问题:已知要发送的数据D和生成多项式G,如何求R?

原理:由原理可知 D ⋅ 2 r D·2^r D2r XOR R=nG
所以 D ⋅ 2 r D·2^r D2r =nG XOR R
即 R 为 G除以 D ⋅ 2 r D·2^r D2r的余数

例:
若已知D为101110,G为1001,则由于G有4为,对应到多项式最高次数为3,即r=3,所以应在D后面补3个0。具体计算如下图。
模2运算举例

参考资料:
[1] https://blog.csdn.net/m0_51487301/article/details/124270017
[2]《计算机网络自顶向下方法》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云霄星乖乖的果冻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值