目录
- 一、基础知识
- 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 D⋅2r XOR R=nG
所以 D ⋅ 2 r D·2^r D⋅2r =nG XOR R
即 R 为 G除以 D ⋅ 2 r D·2^r D⋅2r的余数
例:
若已知D为101110,G为1001,则由于G有4为,对应到多项式最高次数为3,即r=3,所以应在D后面补3个0。具体计算如下图。
参考资料:
[1] https://blog.csdn.net/m0_51487301/article/details/124270017
[2]《计算机网络自顶向下方法》