网络基础 — CRC校验的认识以及校验原理

CRC校验





在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏

(出 现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据

之前需 要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因

特网校验 和循环冗余校验等. 我们今天来着重来认识CRC以及了解它的原理.


CRC即循环冗余校验码是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检

(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证

数据 传输的正确性和完整性。


CRC校验原理



CRC 校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想

就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新

帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,

这里不是直接采用二进制除法,而是采用一种称之为“ 2除法 ”)。到达接收端后,再把接收到的新帧除以(同样采用“ 2

”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果

应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。


模2算法=>


“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即

可。模2加法运算为:1+1=00+1=10+0=0,无进位,也无借位;2减法运算为:1-1=00-1=11-0=10-0=0,也无进位,无借

位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110

结果得到商为11,余数为1.   11×11=101,请看右图.




                


CRC校验的几个步骤


(1)先选择(可以随机选择,也可按标准选择,具体在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数

(是二进制比较串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式”)。


(2)看所选定的除数二进制位数(假设为k位),然后 在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1

个“0“的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC

验码 ,也称之为FCS(帧校验序列)。但要注意的是, 余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为

0(附带好整除时)也都不能省略


(3)再把这个校验码附加在原数据帧(就是m位的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端;最

后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差

错。



从上面可以看出,CRC校验中有两个关键点:一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串(或多项式);二

是把原始帧与上面选定的除进行二进制除法运算,计算出FCS。前者可以随机选择,也可按国际上通行的标准选择,但 最高位和最低

位必须均为“1” ,如在IBM的SDLC(同步数据链路控制)规程中使用的CRC-16(也就是这个除数一共是17位)生成多项式g(x)

x 16  +  x 15  +  x 2  +1(对应二进制比特串为:11000000000000101);而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、

X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)=  x 16  +  x 15  +  x 5  +1(对应二进制比特串为:11000000000100001)


举个例子,求GX = X4 + X3 + 1的二进制串,首先该多项式的最高项为4次,所以二进制串为4+1位(位数为二项式最高次+1),

然后它的第4 第3 第0位均为1(注意每个项头上的位次,1就是0次幂),剩下的为0,所以多项式转为二进制串为:11001


实际计算CRC校验码例题=》


由以上分析可知,既然除数是随机,或者按标准选定的,所以CRC校验的关键是如何求出余数,也就是校验码(CRC校验码)。


例题:假设CRC生成多项式为GX = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少?


1.开始解决这个问题,我们发现就按照上面我说到的方法步骤解出CRC校验码,首先我们看到这个多项式GX= X5 + X4 +X+1变成


进制串,这里我们生产的二进制串的位数为5+1,再然后它的第5 4 1 0位为1,剩下的为0,所以多项式转换为二进制串为:110011


2.再然后我们确定CRC校验码的位数为多项式二进制串减一位,所以为5位.然后我们给要发送的二进制序列上补充5位->


10010111000000,现在开始演示模2算法求出CRC校验码,我们可以看到余数为11010,





3.然后我们把我们求出来的CRC校验码替换掉原来帧后面加上的5个0,10010111000000 -> 10010111011010,然后将这个新帧重新发

送到接收端.


4.当以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数110011以“模2除法”方式去除,验证余数是否为0,如果为

0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错.


5.完美收官.


CRC校验的原理其实就是这么容易,我们原来可能不够理解但是现在我相信大家顺着这个过程捋一遍,自己认真算完例题,我相信你

们很清晰透彻的明白.



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值