CRC校验原理

CRC校验其根本思想
a.发送端和接收端约定一个整数 b
b.发送端在原始数据帧后面附加一个数 k ,产生一个新的数据帧
c.接收端接收到数据帧后,对接收的数据帧和整数 b 进行位异或操作,如果异或的结果是 0 ,表明数据完整,否则数据丢失

关键点1:整数 b 的选择
整数 b 随机选择,也可按国际上通行的标准选择,但最高位和最低位必须均为“1”,
如在IBM的SDLC(同步数据链路控制)规程中使用的CRC-16(也就是这个除数一共是17位)生成多项式g(x)= x^16 + x^15 + x^2 + 1(对应二进制比特串为:11000000000000101);
而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)= x^16 + x^15 + x^5 + 1(对应二进制比特串为:11000000000100001)。

关键点2:附加数 k 计算
假设选定的除数b二进制位数(假设为m位),然后在要发送的数据帧(假设为n位)后面加上m-1位 0 ,新的数据帧使用 "模2除法(模2除法就是n次循环移位异或运算异或运算,并非数学除法)" 除以上面这个除数
,所得到的余数 k(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列),强调余数 k 的位数一定要是比除数 b 位数只能少一位,哪怕前面位是0,
甚至是全为0(附带好整除时)也都不能省略。

示例:
现假设选择的CRC生成多项式为G(X) = X^4 + X^3 + 1,要求出二进制序列1001010110011的CRC校验码。下面是具体的计算过程:
a.计算整数 b ,根据多项式,得出 b = 11001,推断出附加数 k 是4位
b.原始数据帧末尾补位 k 个0,得出新数据 10101100110000 ,对新数据进行 模2除法

c.计算出余数 k 的值是 100,不满足4位,补0,计算出的k的最终值是 0100
d.把上步计算得到的CRC校验0100替换原始帧101100110000后面的四个 0 ,得到新帧101100110100。再把这个新帧发送到接收端。
e.以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数 11001 以 "模2除法" 方式去除,验证余数是否为0,如果为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。

常用标准
CRC-16 (x^16 + x^15 + x^2 + 1 ) 1,1000,0000,0000,0101
CRC-32 (x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1) 1,0000,0100,1100,0001,0001,1101,1011,0111

Sword CRC算法原理的更多相关文章

  1. 循环冗余检验 (CRC) 算法原理

    Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误. 算法原理 假设数据传输过程中需要发送15位的二进制信息g=10100 ...

  2. CRC算法及C实现

    一.CRC算法原理   CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校 验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数 ...

  3. [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码

    1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...

  4. CRC 校验原理及步骤

    什么是 CRC 校验? CRC 即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计 ...

  5. CRC校验原理及步骤

    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并 ...

  6. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  7. RSA算法原理

    一直以来对linux中的ssh认证.SSL.TLS这些安全认证似懂非懂的.看到阮一峰博客中对RSA算法的原理做了非常详细的解释,看完之后茅塞顿开,关于RSA的相关文章如下 RSA算法原理(一) RSA ...

  8. LruCache算法原理及实现

    LruCache算法原理及实现 LruCache算法原理 LRU为Least Recently Used的缩写,意思也就是近期最少使用算法.LruCache将LinkedHashMap的顺序设置为LR ...

  9. MySQL索引背后的数据结构及算法原理【转】

    本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...

随机推荐

  1. U盘启动安装CentOS 7出现 -dracut initqueue timeout

    使用U盘启动安装CentOS7出现 Warning: dracut-initqueue timeout - starting timeout scripts 的解决办法 原因: ISO下,在/isol ...

  2. 类型转换的时候,.valueOf()和.parseX(),.Xvalue()的区别

    .valueOf()返回的是包装类(Wrapper Class)中的一些类型:而.parseX()返回的是基本数据类型,如int,char,double等.其参数应该是String类型. .Xvalu ...

  3. java多线程的几种实现方式

    java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...

  4. selenium-1-python

    python selenium from selenium import webdriver from selenium.webdriver.common.action_chains import A ...

  5. 《团队名称》第八次团队作业:Alpha冲刺day5

    项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...

  6. iwlist/iwconfig/iw命令

    1.iwlist 命令:用于对/proc/net/wireless文件进行分析,得出无线网卡相关信息 # iwlist wlan0 scanning 搜索当前无线网络 # iwlist wlan0 f ...

  7. Photon介绍与安装

    Photon光子引擎是一款实时的Socket服务器和开发框架,快速.使用方便.容易扩展. 服务端架构在windows系统平台上,采用C#语言编写. 客户端SDK提供了多种平台的开发API,包括DotN ...

  8. day006-python函数

    一.定义函数 def 函数名(): 函数体代码 例: #定义函数 def email(): print('send email') #调用执行函数 email() 二.函数的返回值 def email ...

  9. Linglong combination

    Graphic calculator usually refers to a kind of hand-held calculator that can draw function images, s ...

  10. java 面向对象2

    1.  类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体. 玩具模型是类: 玩具是对象: ★局部变量和成员变量的区别: 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或 ...