#数据链路层##差错检验##循环冗余检验#
·什么是循环冗余检验(Cyclic Redundancy Check, CRC)?
循环冗余检验是一种基于模2运算建立的编码规则,在磁存储和计算机通信方面应用广泛
·首先介绍一下什么是模2运算。模2运算包括模2加减法运算,模2乘法运算,模2除法运算。
模2加减法:简单来说就是两个二进制数的异或运算(0±0=0, 0±1=1, 1±0=1, 1±1=0)
模2乘法运算:即根据模2加法运算求部分积之和,中间不考虑进位。
模2除法运算:即根据模2减法求部分余数。上商原则:
①部分首位为1时,商上1,按模2运算减除数
②部分余数首位为0时,商上0,减0;
③部分余数位数小于除数位数时,该余数为最后余数
最后介绍完模2运算,我们进入今天的正题——CRC循环冗余校验
·CRC编码规则
1.(n,k)码
假设CRC码长度n位,其中原始数据含k位,校验位为r位且n=k+r<=2^r。则我们称它为(n,k)码,在CRC中表示n位CRC码中含有k位数据位。
2.编码规则:
1)对于给定的(n,k)码,假设待发送的k位二进制数据用信息多项式M(x)表示,有:
2)将M(x)左移r位,可表示成M(x)·2^r。右侧空出的r位用来放置校验位
3)选择一个r+1位的生成多项式P(x),其最高次幂等于r。例如P(x)=X^4+X+1。就对应一个校验码10011.
4)将第二步得到的数M(x)·2^r,按模2运算规则除以生成多项式P(x)所得的余数作为校验码.即
这里的运算均为异或运算。R(x)异或运算R(x)=0。
CRC的编码规则即第四步表明CRC码一定能被生成多项式G(x)整除。
CRC的解码规则即是运用上述编码规则的特性。在接收端,把接收端的数据以帧为单位除以同样的除数P(x)。如果余数为0.则这个数据没有错误。如果余数不为0,即不能被整除。则判定这个帧有错误将其丢弃。因此在数据链路层仅使用CRC差错检测技术,则只能做到无差错接受。即“凡是接收数据链路层的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有出现差错”。即无差错传输。