大家好,欢迎来到IT知识分享网。
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
比如:
原始数据为:,校验数据位数为3;则左移3位,形成新的数据:_000
4. 计算CRC校验数据
用除数,对移位后数据做模2除法运算,得到的余数即为CRC校验数据;
比如:
原始数据: ,
移位后数据:_000
多项式为G(x)=X^3+X^2+1
模2除法运算,实际是异或运算,得到余数为:0101,实际要求余数位数为3bit,所以校验数据为101
5. 组成新的数据包
新的数据包为: 原始数据+校验数据(余数),即为:_101
接收端接收到数据包后,理论上该数据包已经加上了余数,所以正常情况下应该能够被除数整除而余数为0,所以接收端需要做的事情就是用协商的多项式(G(x)=X^3+X^2+1)对接收到的数据(_101)进行异或运算,余数为0则说明数据传输无误。
CRC还可以实现对数据的纠错功能,以及CRC深入的原理,这个还没学会,学会了再分享。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/86529.html