校验就是在通讯数据的后面附加一些信息,通过这些附加的信息来判断接收到的数据是否和发送出去的数据相同,数据是否准确无误的发送到接收端。常见的校验方式有奇偶校验,累加校验,CRC校验(多项式校验)。
奇偶校验
通过传输数据(二进制)中“1”的个数是奇数还是偶数作为判断依据,分为奇校验和偶校验。
- 奇校验:如果以传输数据中1的个数是奇数为依据,则是奇校验;
- 偶校验:如果以传输数据中1的个数是偶数为依据,则是偶校验;
例:a.若发送数据为8b’0000_0011时,数据中有两个1,则校验位为1,实际发送数据为8’b0000_0011_1,保证发送数据中1的个数为奇数;b.若发送数据为8’b0000_0111时,数据中有3个1,则校验位为0,实际发送数据不变,8’b0000_0111_0;偶校验与奇校验类似。
局限性:奇偶校验能检测传输数据中奇数位错误,不能检测偶数位错误。奇偶校验只能检测出误,无法确定错误发生具体是哪一位。
累加校验
累加和校验的实现方式有多重,最常用的一种是在一次通讯数据包的最后加入一个字节的校验数据。这个字节内容为数据包中全部数据的忽略进位的按字节累加和。
比如要传输的数据为:1,2,3;
加上校验和后的数据为:1,2,3,6
6为前三个字节的校验和,接收方收到全部数据后对前三个数据进行同样的累加计算,如果累加后与最后一个字节相同的话就认为传输数据无误。
局限性:累加和校验实现简单,被广泛应用。这种方式的检错能力一般,对单字节校验和有约1/256的误判率。
CRC校验
CRC校验即循环冗余校验(Cyclic Redundancy Check),是一种基于数据计算的校验码。发送数据被看做是一个多项式的系数,假设发送数据为bn-1bn-2…b1b0(其中bi为0或1),则其对于的多项式为:bn-1Xn-1+bn-2Xn-2+…b1X+b0。例如数据1101对应多项式为X3+X2+1。CRC校验为在k位信息码后再拼接r位的校验码,报文长度为n位,因此这种编码又叫作(n,k)码。
CRC校验码过程
1.要发送的k位数据对应一个k-1次的多项式K(x)。
2.发送方和接收方约定一个生成多项式G(x),设该生产多项式的最高次幂为r(多项式的最高次幂比多项式位数少1)。
3.在发送数据的末尾添加r个0,则其对应的多项式M(x)=XrK(x)(发送数据左移r位)。
4.用M(x)除以G(x),采用模2除法*,得到商Q(x),余式R(x),则M(x)=Q(x)*G(x)+R(x)。
5.令T(x)=M(x)+R(x),T(x)所对应的数据是在原数据块的末尾加上余式对应的数据。
6.发送端发送T(x)。
7.接收端收到数据T(x),将T’(x)除以G(x),若余式为0,则认为传输过程中没有发生错误,接收到的数据与发送的数据相同。反之,则数据发送过程中出现错误。
CRC校验原理
对于一个给定的(n,k)码,可以证明,存在一个最高次幂为n=k+r的多项式M(x),存在且仅存在一个r次多项式G(x),使得M(x)=xr*K(x)+G(x)。(即对于指定长度的信息码和CRC校验码,生成码G(x)具有唯一性)。发送方通过指定G(x)产生r位的CRC校验码,接收方则通过该G(x)来验证收到的报文码的CRC校验码是否为0。假设发送信息的多项式C(x)表示,将C(x)左移r位,则可以表示为C(x)*2r,这样C(x)的右边就会空出r位校验码的位置,做模2除,C(x)*2r/G(x),得到的余数R就是校验码,发送数据的CRC编码是C(x)*2r+R,验证接收到的报文编码是否正确,依然是使用模2除法,C(x)*2r+R/G(x)。
模2减法
相对于普通的算术减法,主要区别在模2减法不做错位处理。即:0-0=0;0-1=1;1-0=1;1-1=0;可以看出模2减法与相同位异或进行运算结果相同。补:模2加法结果同样是相应位异或运算。
模2除法
相对于普通的算法除法,主要区别在于模2除法即不向上位错位,也不比较除数和被除数相同为数值的大小,只要以相同位数进行相除即可。可参考下面例子。
CRC生成多项式满足条件
1.生成多项式的最高位和最低位必须为1。
2.当被传输信息(CRC码)任何一位发送错误时,被生成多项式做模2除后,应该使余数不为0。
3.不同位发送错误时,应该使余数不同。
常见的生成多项式:
CRC-12(城域网):G(x)=X12+X11+X3+X2+X+1
CRC-16(广域网):G(x)=X16+X15+X2+1
CRC-CCITT: G(x)=X16+X12+X5+1
CRC-32(局域网):G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
CRC校验检错能力/应用
检错能力:全部单个bit错误,全部离散的二位错,全部奇数个错误,全部长度小于或等于K的突发错。(K为生成多项式的最高幂次)
以1-(1/2)K-1的概率检出长度为K+1位的突发错。
应用:因CRC检错能力强,开销小,易于用编码器及检测电路实现,从性能和开销上考虑均优奇偶校验和累加校验。在数据存储和数据通讯领域,多用CRC校验。
参考资料:
计算机网络——循环冗余校验码_何处秋风悲画扇的博客-CSDN博客_crc校验码