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

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

前言

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

模二运算

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

1.模二加减运算

0 ± 0 = 0 0±0=00±0=0

0 ± 1 = 1 0±1=10±1=1

1 ± 0 = 1 1±0=11±0=1

1 ± 1 = 0 1±1=01±1=0


2.模二乘法运算

    1101
×    101
——————————
    1101
   0000
  1101
——————————
  111001

3.模二除法运算

            110101(商)
         _____________
(除数)1101 |  101001000(被除数)
            1101
            ————
            01110
             1101
             ————
             001110
               1101
               ————
               001100
                 1101
                 ————
                  001 (余数,位数为除数位数-1)        

循环冗余检验

帧检验序列(FCS):模二除法运算所得的余数,例如上面模二除法运算所得的余数是 001 在循环冗余校验中就叫做帧检验序列。

生成多项式:用多项式表示循环冗余检验中的被除数与除数,例如上面模二除法运算的除数 1101 就可以表示成image.png

样例

发送的数据(被除数):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,则这个帧没有差错,否则有错(但是无法判断哪里错了)。

举例说明

image.png

            1101010(商)
         _____________
       11001 |  10110011010
            11001
            —————
            011110
             11001
             —————
             001111
              00000
              —————
               11111
               11001
               —————
               001100
                00000     
                —————
                 11001
                 11001
                 —————
                 000000
                 000000
                  —————
                      0

④ 判断:结果为 0,没有出错


image.png

            100001(商)
         _____________
       11001 |  1100110000
            11001
            —————
            0000010000(简便运算:该步骤后面从被除数中拉下来4位,则直接在商里补4个零即可)
                 11001
                 —————
                  1001

image.png

            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,出现差错

目录
相关文章
|
1月前
|
C#
C# CRC8
C# CRC8
28 0
|
4月前
CRC与FCS的区别和联系
CRC与FCS的区别和联系
123 0
|
4月前
|
算法
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum
739 1
|
10月前
位操作(异或骚操作)
位操作(异或骚操作)
36 0
|
11月前
CRC循环冗余码计算
CRC循环冗余码计算
102 0
|
算法 C语言
5.1.3_无符号整数的表示和运算
计算机组成原理之无符号整数的表示和运算
646 0
5.1.3_无符号整数的表示和运算
|
存储 算法 编译器
CRC循环校验码的系统仿真及其应用
CRC循环校验码的系统仿真及其应用
626 0
CRC循环校验码的系统仿真及其应用
|
人工智能 Windows
CF617E XOR and Favorite Number(异或前缀和+莫队)
CF617E XOR and Favorite Number(异或前缀和+莫队)
63 0