crc校验mysql_CRC循环冗余校验,经典例子讲解~

平凡也就两个字: 懒和惰;

成功也就两个字: 苦和勤;

优秀也就两个字: 你和我。

跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!

关注微信公众号【 IT特靠谱】,每天都会分享技术心得~

CRC循环冗余校验

1 CRC校验简介

1.1 CRC校验简介与原理?

CRC校验是一种常用检错校验方式。接收方用与发送方相同的模2除法的除数,并通过CRC校验来辨别数据再传输过程中是否出现的错误。注意CRC校验只能检错,不能纠错!

CRC校验原理:其根本思想就是先在要发送的数据帧后面附加一个CRC校验码(CRC校验码是通过发送端和接收端共同选定的某个特定除数通过模2除法计算出来的),生成一个新帧后发送给接收端。新帧到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)特定的除数,看是否能整除(由于在发送端发送的新帧末尾携带了CRC校验码,因此新帧是能整除以特定除数的(也就是模2除法计算后余数为0)),如果余数为0,则表示传输数据正确;如果余数不为0,则表示数据传输过程出现错误!

具体来说,CRC校验原理就是以下几个步骤:

(1)先选定一个特定的模2除数(二进制形式的除数,通常以多项式表示,所以CRC又称为多项式编码方法)。

(2)假设所选定的模2除数的二进制位数为k位,假设原数据帧位数为m位。然后在原数据帧后面加上k-1位个“0”(CRC占位值),然后以这个加了k-1个“0“的新数据帧(m+k-1位)以"模2除法"方式除以模2除数,所得到的余数就是该帧的CRC校验码,注意:余数的位数一定要是比除数位数只能少一位,也就是说余数长度为k-1位,不足则前面补0)。

(3)再把CRC校验码替换原数据帧末尾的CRC占位值,形成一个新数据帧,然后将新数据帧发送到接收端;

(4)最后在接收端再把这个新帧以“模2除法”方式除以前面选定的模2除数,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。

1.2 模2除法

"模2除法"与"算术除法"类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。相当于二进制中的逻辑异或运算(二进制位相同异或值为0,二进制位不同异或运算值为1)!

模2加法位运算为:1+1=0,0+1=1,1+0=1,0+0=0,无进位,也无借位;

模2减法位运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。

模2除法示例:

fca5308ae9daa071ba6ec1f9d3c98061.png

2 CRC校验码计算

从上面的分析可以知道要计算出CRC校验码需要如下两个关键步骤:

(1)选定模2除数;

(2)通过模2除法计算CRC校验码

下面用一个例子来演示CRC校验码的计算。

题:假设选择的CRC生成多项式为G(x) = x^4 + x^3 + 1,求出二进制序列10110011的CRC校验码? 最终的发送数据帧是多少?

解:

(1)首先把生成多项式转换成二进制数(模2除数),由G(x) = x^4 + x^3 + 1可以知道(模2除数一共是5位,位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个模2除数二进制的第4位、第3位和第0位的二进制均为1,其它位均为0),这样我们就到模2除数的二进制比特串为11001;

(2)模2除数位数为5位,根据前面的介绍可得知CRC校验码的位数为4位(校验码的位数比生成多项式的位数少1);

(3)原数据帧为10110011,在它末尾加4个0(CRC占位值),得到101100110000,然后把这个数通过"模2除法"方式除以模2除数,得到的余数(即CRC码)为0100;

4b729d2b016eced5f100e44fae2dcfa4.png

(4)把上步计算得到的CRC校验0100替换原始帧101100110000后面的四个“0”(CRC占位值),得到带CRC校验码的新数据帧101100110100。再把这个新数据帧发送到接收端;

(5)当新数据帧到达接收端后,接收端会把这个新数据帧再用相同的模2除数11001以"模2除法"方式计算余数,验证余数是否为0,如果余数为0,则表明该帧在传输过程中没出错;如果余数不为0,则表示数据传输过程出现了错误。

16786b57df57b0fe93cca1cc199d5c70.png

以上详细讲解了CRC校验码的计算方式,并得到了携带CRC校验码的新数据帧。你get到了吗?

如果你有疑问或需要技术支持,关注公众号联系我吧~

fb23e169f9a7316178259e1fd239ef17.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值