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

目录
相关文章
|
前端开发 Shell 芯片
【芯片前端】保持代码手感——跨异步DMUX
【芯片前端】保持代码手感——跨异步DMUX
311 0
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(上)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
830 0
|
Ubuntu 开发工具 虚拟化
Jetson 学习笔记(十六):使用SDK Manager烧录Jetson Nano
这篇博客介绍了如何使用Nvidia SDK Manager烧录Jetson Nano。首先,需要在Ubuntu系统中安装VMware虚拟机和Nvidia SDK Manager。然后,通过连接Jetson Nano并进行一系列设置,包括FC_REC脚接GND,连接HDMI、鼠标键盘和电源线。在Ubuntu上通过lsusb确认设备连接后,使用SDK Manager进行烧录,选择Manual Setup-Jetson Nano,设置用户名和密码,然后点击flash完成安装。完成后,可以断开连接并启动Jetson Nano,进入Ubuntu安装界面。
1409 2
Jetson 学习笔记(十六):使用SDK Manager烧录Jetson Nano
|
安全 区块链 数据安全/隐私保护
密码学承诺之原理和应用 - Kate多项式承诺
【10月更文挑战第11天】多项式承诺是密码学工具,使证明者向验证者承诺并证明多项式的性质,广泛应用于区块链和密码学协议。Kate多项式承诺是一种知名方案,基于离散对数假设,确保安全性。在区块链中,可用于零知识证明和可验证计算;在密码学协议中,支持多方计算和身份认证,增强安全与隐私。
208 3
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
CRC循环冗余码计算
CRC循环冗余码计算
894 0
|
机器学习/深度学习 人工智能 Java
Java和Python区别
Java和Python区别
603 1
Java和Python区别
|
机器学习/深度学习 设计模式 API
深入浅出:使用Python构建微服务架构
在当今快速发展的软件开发领域,微服务架构因其高度的灵活性和可扩展性而受到广泛关注。本文将探讨如何使用Python语言构建微服务架构,从概念理解到实际应用,逐步揭示微服务的核心原理及其在Python环境下的实现方法。通过具体案例,读者将学习到如何利用Python的强大功能,创建独立、轻量级的服务单元,以支持复杂应用系统的高效运行。不同于传统摘要的简单概述,本文摘要旨在激发读者对微服务架构深度学习的兴趣,并提供一种创新的视角来理解如何将这一架构策略与Python语言结合起来,开发出响应迅速、易于维护的应用程序。
482 2
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
544 0
|
监控 项目管理 计算机视觉
系统集成项目管理工程师挣值分析笔记大全
系统集成项目管理工程师挣值分析笔记大全

热门文章

最新文章