CRC校验算法

基本概念

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
在网络通信中很多的帧或数据包中都采用CRC校验,其实CRC校验非常简单,我们通过这篇博客可以让你非常容易的学会。

工作原理

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x^6+x^4+x^2+x+1,而多项式为x^5+x^3+x^2+x+1对应的代码101111。

举例说明

在网络中的发送端,先把数据划分为为组,假定每组k个比特。现假定待发送的数据M=101001(k=6).CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。
现有生成多项式P(x)=x^3+x^2+x。->对应的代码为:1101。(4位)
其次,我们要在M后面加n个0,n比P少一位,此时应该在M后面加3个0。
我们想要的冗余码=(M+3个0)/P—->得到的余数,即为所求冗余码。
我们最后要发送的CRC校验数据位M+余数
注意:其中做出发时实际上是模2运算,简单理解就是运算时不借位,不进位。
计算
这里写图片描述
最后发送的数据为M+余数—> 101001001

接收检测

接收端也要进行CRC校验:把收到的数据都除以相同的除数( P),然后检查得到的余数R,如果在传输过程中无差错,那么经过CRC校验后得出的余数R肯定是0。若R不为0,那么传输过程中肯定出现了差错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值