计算循环冗余码(CRC)

目录

  • 题目给出*两个已知条件* :
  • 求 *(一般求这两种)*:
  • 例:
    • 需发送数据1101011011,采用CRC校验,生成多项式G(x)=x^4+x+1,求最终发送的数据。
      • 第一步:在信息序列后加0
      • 第二步:用加完0后的数 去 除 多项式对应的二进制数(模二除法:【异或】“同0异1”)
      • 第三步:将模二运算的余数(这个余数就是“附加冗余码”)添加在原始报文后,成为循环冗余码。
  • 理论补充:
  • 解惑
    • 1. 关于已知的多项式如何转换为二进制数
    • 2. 关于余数的位数(官方称作“冗余位”)
    • 3. 所以说,还能求别的未知信息
    • 4. 关于模二除法
    • 5. 关于余数前补0
  • 请注意

题目给出两个已知条件

  1. 原始报文 or 信息序列(一串二进制数)

例:110101

  1. 商定多项式 or 多项式的代数关系 or 该多项式对应的二进制数

例:G(x)=x^3+x+1 or 1011

(一般求这两种)

  1. 最终发送的报文 or 编码后的报文 or 循环冗余码(都是同一个东西)
  2. 附加冗余码

例:

需发送数据1101011011,采用CRC校验,生成多项式G(x)=x^4+x+1,求最终发送的数据。

第一步:在信息序列后加0

​ 0的个数为:方法一:多项式最高次项的次数…4

​ 方法二:多项式二进制数的位数-1…5-1=4

结果:11010110110000

第二步:用加完0后的数 去 除 多项式对应的二进制数(模二除法:【异或】“同0异1”)

计算循环冗余码(CRC)_第1张图片

第三步:将模二运算的余数(这个余数就是“附加冗余码”)添加在原始报文后,成为循环冗余码。

最终结果: 11010110111110

理论补充:

将最终数据发送给接收端,再进行一系列运算:

若余数为0–>说明无差错,若余数不为0–>直接丢弃

解惑

1. 关于已知的多项式如何转换为二进制数

​ 首先确定最高次项次数…4

​ 然后从这个数字降序写到0:4 3 2 1 0

​ 对比多项式:G(x)= x^4 + x + 1…(主要看指数)

​ 我们观察到有4 1 0(多项式中的数字1是x的0次方,所以也算进去)

​ 最后在出现了的数字下面写1,没有出现的下面写0:

​ 4 3 2 1 0

​ 1 0 0 1 1

最后得到的就是我们第二步要求出来的二进制数:10011

2. 关于余数的位数(官方称作“冗余位”)

冗余位就是我们第一步要求的0的个数,两种方法(前面已介绍)

3. 所以说,还能求别的未知信息

  1. 冗余位
  2. 商定多项式转成二进制数

4. 关于模二除法

只要满足冗余位的个数就可以进行一次模二运算,直到上面掉落的数字无法满足位数为止。

5. 关于余数前补0

有时候模二除法最后算出来的数字比冗余位少,这个时候就要在附加冗余码前补0来满足位数,从而才能进行下一步。

请注意

我写的是1 2 3个步骤,是根据我自己的理解写的应该基本上都能看懂的计算步骤,不是规范的可以写到试卷上去的格式,考试拿分还是看你们老师怎么要求的。

你可能感兴趣的:(crc,计算机网络)