计算机网络--CRC校验

什么叫CRC

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

CRC是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,用来保证数据传输的正确性和完整性。

 

CRC基本原理?

CRC检验原理实际上是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;

附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。

如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系会被破坏。

所以,通过检查这一关系,可以实现对数据正确性的检验。

 

如何进行CRC校验?CRC校验几个基本概念

    1、帧检验序列FCS(Frame Check Sequence):为了进行差错检验而添加的冗余码。

 

    2、多项式模2运行:实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也是不考虑进位、借位的二进制加减运算。如:10011011 + 11001010 = 01010001。

 

    3、生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的位与位必须是1。

 

CRC校验码如何计算?

设信息字段为K位,校验字段为R位,则码字长度为N(N=K+R)。设双方事先约定了一个R次多项式g(x),则CRC码:

 

    V(x)=A(x)g(x)=xRm(x)+r(x)

    其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式。

    这里r(x)对应的代码即为冗余码,加在原信息字段后即形成CRC码。

    r(x)的计算方法为:在K位信息字段的后面添加R个0,再除以g(x)对应的代码序列,得到的余数即为r(x)对应的代码(应为R-1位;若不足,而在高位补0)。

 

例:

现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码?

(1)             首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道(,它一共是5位(总位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个二进制的第4位、第3位、第0位的二进制均为1,其它位均为0)很快就可得到它的二进制比特串为11001。

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

计算机网络--CRC校验_第1张图片

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

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

 

PS:    “模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。

计算机网络--CRC校验_第2张图片

你可能感兴趣的:(计算机网络,网络,计算机,CRC,校验码)