才子佳人博客

我的故事我讲述

详解CRC校验原理
 
来源:xjh  编辑:xjh  2017-10-31

CRC校验根本思想就是先在要发送的帧序列后面附加一个二进制序列(这个就是用来校验的校验码,用模2除法生成),生成一个新帧发送给接收端。

到达接收端后,再把接收到的数据帧除以同样的除数,所得结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

【说明】

“模2除法”与“算术除法”类似,但它加法不进位,减法不借位。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-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除法”方式除以上面这个除数,所得到的k-1位余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。

(3)再把这个校验码附加在原数据帧(就是m位的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端;最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。

说明:CRC的校验是用硬件逻辑电路来完成,处理很迅速,并不会延误数据的传输。

CRC校验码的计算示例:

下面以一个例子来具体说明整个过程。现假设选择的CRC生成多项式为G(X) = X^4 + X^3 + 1,要求出二进制序列1011 0011的CRC校验码。下面是具体的计算过程:

(1)首先把生成多项式转换成二进制数,由G(X) = X^4 + X^3 + 1可以知道,作为除数的二进制比特串为11001。

(2)因为生成多项式的位数为5,根据前面的介绍,得知CRC校验码的位数为4(校验码的位数比生成多项式的位数少1)。因为原数据帧1011 0011,在它后面再加4个0,得到1011 0011 0000,然后把这个数以“模2除法”方式除以生成多项式,得到的余数(即CRC码)为0100,如图所示。注意参考前面介绍的“模2除法”运算法则。

(3)把上步计算得到的CRC校验0100替换原始帧1011 0011 0000后面的四个“0”,得到新帧1011 0011 0100。再把这个新帧发送到接收端。

(4)当以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数11001以“模2除法”方式去除,验证余数是否为0,如果为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。


分类:网络日志| 查看评论
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: