zoukankan      html  css  js  c++  java
  • 【转】 CRC循环冗余校验码

    1、CRC

    CRC循环冗余校验码是数据通信中的一种查错校验码。

    循环冗余检查对数据进行多项式计算,将计算结果附加在帧后面,接收数据的设备执行模2运算,保证数据传输的正确性和完整性。

    2.模2除法

    ①不向上借位,只要除数和被除数的位数相同就可进行计算,不比较它们的大小;

    ②模2运算中用到了模2减法,与逻辑异或相似: 
    1-1=0, 1-0=1, 0-1=1 , 0-0=0,

    ③例子: 
    这里写图片描述

    3.CRC校验的步骤

    (1)选择一个生成多项式,作为对接收的帧进行除法运算时的除数,生成多项式可以写为二进制形式;

    • 生成多项式的要求: 
      ①最高位和最低位必须为1; 
      ②当CRC码的任何一位发生错误时,新帧除生成多项式后余数不为0; 
      ③不同位发生错误时,余数应该是不同的;

    • 生成多项式转化为二进制形式: 
      如x5+x3+x2+1,写为二进制:101101

    (2)计算CRC校验码位数k=生成多项式位数-1,在要发送的数据帧后加k个0,除第一步用生成多项式转化的二进制数(使用模2除法),得到的余数即为CRC校验码;

    • 模2除时,余数的位数必须只比除数少一位,不能省略0

    (3)把得到的校验码CRC加到原数据帧后,构成一个新数据帧发送到接收端,接收端将新帧除以之前选择的除数(模2除法),如果没有余数,则表明该数据帧在传输过程中没有出错,否则出错;

    4.CRC校验例子:

    假设CRC生成多项式G(X)=X5+X4+X+1,要发送的二进制数据帧为100101110,求CRC校验码:

    ①把生成多项式转换为二进制数:110011;

    ②由生成多项式的位数为6可知,CRC校验码的位数为5,所以在数据帧后加5个0,变为10010111000000,将这个数使用模2除法除以生成多项式110011,得到余数即CRC校验码11010; 
    这里写图片描述 
    ③用得到的CRC校验码替换掉数据帧中的5个0,形成新的帧10010111011010,将这个新帧发送给接收端;

    ④接收端收到新帧后,用新帧除以上面的多项式110011(模2除法),如果余数为0,该数据帧在传输过程中没有出错,否则出错;(经验证余数为0)

    来源

  • 相关阅读:
    如何判断两个IP是否在同一网段
    http://blog.csdn.net/a9529lty/article/details/6454156
    http://blog.csdn.net/a9529lty/article/details/6454145
    tomcat下配置https环境(windows环境)
    hosts文件配置及主要作用
    函数y=sin(1/x)曲线
    求证:a^4+b^4 ≧a^3*b+a*b^3
    三种双二次曲线
    已知m和n是两个整数,并且m^2+mn+n^2能被9整除,试证m,n都能被3整除。
    x为正变数,求y=x^3/(x^4+4)的最大值
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8342109.html
Copyright © 2011-2022 走看看