循环冗余校验检错方案(CRC)

2023-11-05 03:38

本文主要是介绍循环冗余校验检错方案(CRC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

循环冗余校验检错方案(CRC)

1、crc校验原理
crc校验的根本思想就是在要发送的帧后面附加一个二进制序列,生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使生成的新帧能与发送端和接收端共同选定的某个特定数整除,需要注意的是,这里不是采用的二进制除法,而是采用“模2除法”。到达接收端后,再把接收到的新帧除以(模2除)这个选定的除数。因为在发送端已经通过附加一个数做了去余处理,故得出的结果应该没有余数。如果出现了余数,则说明在传输的过程中出现了差错。
【说明】“模2除法”和“算数除法”类似,但它既不向上借位,也不比较除数与被除数相同位的数的大小,只要以相同的位数整除即可。模2加法运算:1+1=0, 1+0=1, 0+0=0,无进位,也无借位。模2减法运算:1-1=0, 1-0=1, 0-1=1, 0-0=0,无进位,也无借位。这两种运算相当于逻辑运算中的异或运算。如 100101除以1110,结果得到商为110,余数为1。
具体来说,crc校验主要分为一下几个步骤:
1)先选择(可以随机选择,也可以按照标准选择)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比特串,通常以多项式表达,所以crc又称多项式编码方法,这个多项式也称为“生成多项式”)。
2)假定所选的数据帧为k位,然后在要发送的数据帧(假定m位)的后面补上k-1位“0”,然后用这个新帧(一共m+k-1位)以“模2除法”的方式除以上面这个除数,所得到的余数(也是二进制比特序列)就是该帧的crc校验码,也称之为FCS(帧校验序列)。 但要注意的是,余数的位数一定要只比除数的位数少一位,哪怕前面位是0,甚至全位0时都不能省略。
3)再把这个校验码附在原数据帧(就是m位的帧,不是生成的m+k-1位的帧)的后面,构建一个新帧发送给接收端;最后再在接收端再把这个新帧以“模2除法”的方式除以前面选择的除数,如果没有余数,则表明该帧在传输的过程中没有出错,否则出现了差错。
从上面可以看出,CRC校验中有两个关键点:一是要确定一个发送端可以接收端都用来作为除数的二进制比特串(或多项式),二是把原始帧与上面选定的除数进行二进制“模2除法”运算,计算出FCS,前者可以随机选择,也可以按照国际上通行的标准选择,但是 最高位和最低位必须均为“1”。如在IBM的SDLC(同步数据链路控制)规程中是用的CRC-16生成多项式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、crc校验码的计算示例
现假设选择CRC生成多项式位g(x) =  x^4 + x^3 + 1,要求求出二进制序列 10110011的CRC校验码。
1)根据生成多项式可以得到二进制比特序列除数位 11001
2)因为生成多项式的位数为5,得知CRC校验码的位数为4,所以在原始帧后面添加4个0,得到 10110011 0000,然后把这个数以“模2除法”的方式除以生成多项式,得到余数(CRC校验码)位 0100,计算过程如下:



3)把上面计算出来的校验码0100替换帧 101100110000后面的四个0,得到新帧 10110011 0100,再把这个帧发送给接收端。
4)当接收端收到这个新帧后,会以“模2除法”的方式除以上面选定的除数 11001,验证余数是否为0,如果为0,则说明上述帧在传输的过程中没有发生差错,否则出现了差错。

这篇关于循环冗余校验检错方案(CRC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347161

相关文章

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了