模二运算、循环冗余检验(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,出现差错

目录
相关文章
|
算法 网络虚拟化 内存技术
408王道计算机组成原理强化——存储系统大题
408王道计算机组成原理强化——存储系统大题(下)
4082 3
408王道计算机组成原理强化——存储系统大题
|
8月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
998 0
|
计算机视觉 索引
OpenCv实时设置摄像头参数/获得摄像头参数值的方法论
这篇文章提供了一个OpenCV的实例教程,展示了如何使用`createTrackbar()`函数实时设置和获取摄像头参数值,如饱和度、Gamma和亮度,并通过回调函数在程序中连续修改这些参数。
|
算法
海明码详解
本文详细介绍了海明码(Hamming Code)的概念、原理和应用,包括信息位与校验位的关系、校验位的计算方法、错误检测与纠正过程,并通过实例展示了如何使用海明码进行编码,突出了海明码在提高数据传输可靠性方面的重要性。
2328 0
海明码详解
|
Shell 网络安全 开发工具
git与gitee结合使用,提交代码,文件到远程仓库
本文介绍了如何将Git与Gitee结合使用来提交代码文件到远程仓库。内容涵盖了Git的安装和环境变量配置、SSH公钥的生成和配置、在Gitee上创建仓库、设置Git的全局用户信息、初始化本地仓库、添加远程仓库地址、提交文件和推送到远程仓库的步骤。此外,还提供了如何克隆远程仓库到本地的命令。
git与gitee结合使用,提交代码,文件到远程仓库
|
安全 网络安全 网络虚拟化
什么是划分子网?网络工程师划分子网有啥技巧?
在网络工程中,划分子网是将大网络分割成多个小子网的技术,旨在优化网络性能、提升安全性和管理效率。本文介绍了子网的基本概念、划分子网的方法与步骤、网络工程师的技巧及实际应用案例,强调了合理规划的重要性。
1183 4
CRC循环冗余码计算
CRC循环冗余码计算
1176 0
|
Java Windows Spring
Spring Boot CMD 运行日志输出中文乱码
Spring Boot CMD 运行日志输出中文乱码
827 0
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
742 0