关于CRC
循环冗余检验码即为CRC,所求冗余码为FCS。循环冗余检验是数据链路层进行差错检测的一个方法。即检验发送的一串二进制数据到接收时里面是否产生误码。基本思路是:通过计算生成校验码,检错时将数据带上校验码进行运算,根据所得余数判断是否产生误码。
如何计算
M为二进制的原始数据,k位,p为除数,n为冗余码位数,p位数=n+1
- 在M后面加n个0
- 用(k+n)位数除(n+1)位的除数P,得到商Q和余数R(余数取n位)
进行除法时,上下数之间运算不是减法,而是每位进行异或
- n位的余数为冗余码
如何检错
发送数据时,经过计算后生成校验码,置于发送数据末尾。接受数据时进行判断,如果未产生误码,则 M与R构成的二进制数/P 余数一定为0,若产生误码,则余数不为0。
例题
- 现在k=6,M=101001,假定P=1101,求冗余码和发送的数据。
解:n=p的位数-1=3
- 发送方准备发送的信息位为1101011011,采用CRC 校验算法,生成多项式为G(x)=x4+x+1,那么发出的校验位应该为()。
解:G(x)=x4+x+1,将2代入x,为24+21+20
即为二进制数10011
1101011011/10011得到余数1110,即为校验码