CRC 循环冗余检测

目录

  • 一、基础知识
    • 1.异或运算xor
    • 2.模2算术
      • (1)模2加法和减法
      • (2)模2乘法
      • (3)模2除法
  • 二、CRC循环冗余检测
    • 1.背景
    • 2.原理
    • 3.求R

一、基础知识

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。具体计算如下图。
CRC 循环冗余检测_第1张图片

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

你可能感兴趣的:(计算机网络,网络,计算机网络)