模二运算、循环冗余检验(CRC)

前言

详解计算机网络基础中的循环冗余检验(CRC),从模二运算入手,举例说明,层层深入,一举拿下循环冗余算法。

模二运算

简单来说就是:异或运算 (相同为0,相异为1)

  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

  1. 模二乘法运算
    1101
×    101
——————————
    1101
   0000
  1101
——————————
  111001
  1. 模二除法运算
		        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,进而得到接收方接收到的序列)

② 运用模二除法运算得:

扫描二维码关注公众号,回复: 15162709 查看本文章
		        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,则这个帧没有差错,否则有错(但是无法判断哪里错了)。

举例说明

  1. 在数据传输过程中,若接收方收到的信息为 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,没有出错

  1. 在数据传输过程中,若发送方发送的信息为 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。

  1. 要发送的数据为 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,出现差错

猜你喜欢

转载自blog.csdn.net/m0_68111267/article/details/130902631