CRC循环冗余检测

目的:接收端通过检测码检测收到的的数据是否有差错,如果有差错,丢弃帧,没有差错,接受帧。

一、例:发送一个数据为1101011011,采用CRC生成多项***式P(X)=x^4+x+1。试求应添加在数据后的余数。

解释:
发送的帧=数据位M(X)+冗余位R(X)

本例子中:

1.数据位为:1101011011
2.冗余位为: R(X)余数位,为检测序列。

位数 = 选取的除数(CRC生产多项式)的最高次数
通过: X^rM(X)/G(X)=Q(X)商+R(X)余数* 计算

① X^r:这里的X取2,因为为2进制数据,整体含义为,M(X)/G(X)用 :模2除法
模二除法与普通除法

数据链路层CRC循环冗余检测实例

普通除法:
1.需要比较除数与被除数相关位数大小。 被除数前3位101与除数110比较。
2.管第二位的0位向第一位1借了1,第1位要减了1变成0
模2除法:
1.不需要比较除数与被除数相关位数大小。 被除数前3位101与除数110不需要比较。只要被除数首位是1就可以。
2. 第二位的0位向第一位1借了1,第1位要不用减1,还是1。1-0为1,0-1为1,1-1=0,0-0=0

G(X)除数:
为CRC生成多项式P(X)=x^4+x+1,1为x的0次,
次数代表位数-1,x代表1
原式=10011

④此例中生成多项式最高次数为4,所以余数位保留四位

此题目中:
X^rM(X)/G(X)=Q(X)商+R(X)余数
除数数据位1101011011,摸二除以被除数CRC循环多项式转换的二进制数字10011=1100001010+1110,CRC多项式最高次为4,余数保留4位1110
数据链路层CRC循环冗余检测实例

3. 发送的帧=数据位M(X)+冗余位R(X)=1101011011+1110=11010110111110

二、数据在传输过程中最后一个1变成了0,问接收端能否发现?

接受端收到数据,通过检测码检测
如果余数为0,收到数据为发送数据
如果余数不是0,收到数据余数不是0

1.数据在传输过程中最后一个1为:1101011010
2.接受数据+检测码(余数):1101011010+1110
3.用步骤2除以除数,P(X)=x^4+x+1,10011
数据链路层CRC循环冗余检测实例
4.余数为0011,不为0.,可以检测出不是原数据,所以丢弃收到的帧

相关文章: