前言
详解计算机网络基础中的循环冗余检验(CRC),从模二运算入手,举例说明,层层深入,一举拿下循环冗余算法。
模二运算
简单来说就是:异或运算 (相同为0,相异为1)
- 模二加减运算
0 ± 0 = 0 0±0=0 0±0=0
0 ± 1 = 1 0±1=1 0±1=1
1 ± 0 = 1 1±0=1 1±0=1
1 ± 1 = 0 1±1=0 1±1=0
- 模二乘法运算
1101
× 101
——————————
1101
0000
1101
——————————
111001
- 模二除法运算
110101(商)
_____________
(除数)1101 | 101001000(被除数)
1101
————
01110
1101
————
001110
1101
————
001100
1101
————
001 (余数,位数为除数位数-1)
循环冗余检验
帧检验序列(FCS):模二除法运算所得的余数,例如上面模二除法运算所得的余数是 001 在循环冗余校验中就叫做帧检验序列。
生成多项式:用多项式表示循环冗余检验中的被除数与除数,例如上面模二除法运算的除数 1101 就可以表示成 P ( X ) = X 3 + X 2 + 1 P(X)=X^3+X^2+1 P(X)=X3+X2+1。
样例
发送的数据(被除数):M = 101001(k = 6)
除数:P = 1101(n = 3)
① 补零:在数据(被除数)后面补 n 个零,n 是除数的位数 -1,在这里补 3 个零(补零这个步骤是为了求 FCS,进而得到接收方接收到的序列)
② 运用模二除法运算得:
110101(商)
_____________
1101 | 101001000(被除数,后面三个0是补的)
1101
————
01110
1101
————
001110
1101
————
001100
1101
————
001 (余数,位数 n 为除数位数-1)
即商 Q = 110101(没用),余数 R1 = 001(帧检验序列FCS)
③ 所以发送的帧为 101001 001,即接收方接收到的帧为 101001 001。
④ 用接收方接收到的帧作为被除数,再与除数进行模二运算,得到新的余数R2。
⑤ 判断,若R2 = 0,则这个帧没有差错,否则有错(但是无法判断哪里错了)。
举例说明
- 在数据传输过程中,若接收方收到的信息为 10110011010,生成多项式为 G ( X ) = x 4 + x 3 + 1 G(X)=x^4+x^3+1 G(X)=x4+x3+1,请验证传输过程是否出错。
① 分析:“接收方接收到的信息” 说明发送方发送的信息已经加上了FCS → 直接进行模二运算求余数
② 除数: G ( x ) = x 4 + x 3 + 1 G(x)=x^4+x^3+1 G(x)=x4+x3+1 → 11001
③ 模二除法运算:
1101010(商)
_____________
11001 | 10110011010
11001
—————
011110
11001
—————
001111
00000
—————
11111
11001
—————
001100
00000
—————
11001
11001
—————
000000
000000
—————
0
④ 判断:结果为 0,没有出错
- 在数据传输过程中,若发送方发送的信息为 110011,生成多项式为 G ( x ) = x 4 + x 3 + 1 G(x)=x^4+x^3+1 G(x)=x4+x3+1,接收方能正确接收的信息为多少?
① 分析:已知发送方发送的信息,求接收方接收的信息,即求FCS,再将发送方发送的信息加上FCS即可
② 除数: G ( x ) = x 4 + x 3 + 1 G(x)=x^4+x^3+1 G(x)=x4+x3+1 → 11001
③ 补零:除数有 5 个零,被除数补 4 个零 → 110011 0000
④ 模二运算:
100001(商)
_____________
11001 | 1100110000
11001
—————
0000010000(简便运算:该步骤后面从被除数中拉下来4位,则直接在商里补4个零即可)
11001
—————
1001
⑤ FCS 为 1001,接收方接收的信息为:110011 1001。
- 要发送的数据为 1101011011,采用 CRC 的生成多项式是 P ( x ) = x 4 + x + 1 P(x)=x^4+x+1 P(x)=x4+x+1。
试求应添加在数据后面的余数。数据在传输过程中最后一个 1 变成了 0,问接收端能否发现?若数据在传输过程中最后两个 1 都变成了 0,问接收端能否发现?
1.先求 FCS
① 除数: P ( x ) = x 4 + x + 1 P(x)=x^4+x+1 P(x)=x4+x+1 → 10011
② 补零:除数有 5 位,被除数补 4 个零 → 1101011011 0000
③ 模二除法:
1100001010(商)
__________________
10011 | 11010110110000
10011
—————
010011
10011
—————
0000010110
10011
—————
0010100
10011
—————
01110(超出4位,从后往前取4位,得到R=1110)
④ 传输的数据为: 1101 0110 11 1110
2.最后一个1变成了0 → 1101 0110 11 1100
① 直接进行模二除法运算:
1100001010(商)
__________________
10011 | 11010110111100
10011
—————
010011
10011
—————
0000010111
10011
—————
0010010
10011
—————
0010 (从后往前保留4位)
② 判断:R不为0,出现差错
3.最后两个1变成了0 → 1101 0110 11 1000
① 直接进行模二除法运算:
1100001010(商)
__________________
10011 | 11010110111000
10011
—————
010011
10011
—————
0000010111
10011
—————
0010000
10011
—————
0110 (从后往前保留4位)
② 判断:R不为0,出现差错