龙空技术网

CRC(Cyclic Redundancy Check)-循环冗余校验 学习笔记

二少爷在炕头画板子 252

前言:

此时咱们对“crc校验的概念”大约比较注重,姐妹们都需要剖析一些“crc校验的概念”的相关文章。那么小编也在网摘上收集了一些对于“crc校验的概念””的相关内容,希望姐妹们能喜欢,各位老铁们一起来了解一下吧!

CRC 是对数据包或者保存文件的一种数据校验和数据纠错算法;是利用除法和余数原理,计算获取校验数据,并组成新的数据包。数据发送端通过CRC计算得到冗余数据,并打包形成新的数据包发送;数据接收端对接收数据包进行CRC校验,余数为0则证明传输数据无误。

如下图为CRC数据处理示意图,即在原始数据(K bit)后面再增加校验数据(R bit),构成新的数据包((K+R) bit);而校验数据是原始数据做除法运算后的余数。

发送端数据CRC主要包括下述5个过程:

1. 确认CRC对应的多项式

既然是基于除法运算,就肯定有除数;而除数也是基于二进制的方式实现的,采用模2除法;

二进制除数与多项式之间存在对应关系,比如:

二进制除数为: 1101.

对应的多项式为: G(x)=X^3+X^2+1

多项式一般是由接收端和发送端协商确认,标准的CRC算法的多项式如下表所示:

因此,确认了CRC标准后,也就得知了CRC对应的除数。

2. 确认CRC校验数据的位数

校验数据实际是除法运算后的余数,所以需要确认余数的位数;

而多项式与余数位数的对应关系为: 多项式的最高次幂为对应的余数位数;

比如多项式G(x)=X^3+X^2+1 最高为3次幂,所以余数位数为3,即校验数据的位数为3。

3. 移位,补充校验位

将原始数据左移R bit,低位补0

比如:

原始数据为:10011010,校验数据位数为3;则左移3位,形成新的数据:10011010_000

4. 计算CRC校验数据

用除数,对移位后数据做模2除法运算,得到的余数即为CRC校验数据;

比如:

原始数据: 10011010,

移位后数据:10011010_000

多项式为G(x)=X^3+X^2+1

模2除法运算,实际是异或运算,得到余数为:0101,实际要求余数位数为3bit,所以校验数据为101

5. 组成新的数据包

新的数据包为: 原始数据+校验数据(余数),即为:10011010_101

接收端接收到数据包后,理论上该数据包已经加上了余数,所以正常情况下应该能够被除数整除而余数为0,所以接收端需要做的事情就是用协商的多项式(G(x)=X^3+X^2+1)对接收到的数据(10011010_101)进行异或运算,余数为0则说明数据传输无误。

CRC还可以实现对数据的纠错功能,以及CRC深入的原理,这个还没学会,学会了再分享。

标签: #crc校验的概念 #模2除法计算 #crc校验c #模二除法 #crc校验运算公式