前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CRC校验算法[通俗易懂]

CRC校验算法[通俗易懂]

作者头像
全栈程序员站长
发布2022-08-02 08:48:58
3.8K1
发布2022-08-02 08:48:58
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

CRC(Cyclic Redundancy Check):循环冗余检验。在链路层被广泛使用的检错技术。 CRC原理: 1、发送端 1.1、在发送端先将数据分组,每组k个数据。假定要传送的数据是M。 1.2、在数据M后面添加供差错检测的n位冗余码,然后构成一帧发送出去,一共发送(k+n)位。 虽然添加n位冗余码增大了数据传送的开销,但是可以进行差错检测,当传输可能出现差错时,付出这种代价是值得的。

1.3、冗余码可以用下面的方法得出: 3.1、用二进制模2运算进行2^n*M(相当于M左移n位)的运算。意思就是在M后面补n个0。现在M就变成了k+n位。 1.3.2、用M除以收发双方事先商定的长度为n+1的除数P。 1.3.3、得到的余数R,这个R就是FCS(帧检验序列)。将这个FCS序列加到M上然后发出去。

2、接受端 2.1、在接受端把接受到的数据以帧为单位进行CRC校验 2.2、把收到的每一个帧都除以同样的除数P,然后检查余数R。 2.3、如果余数R为0,如果在传输过程中没有差错。 2.4、如果出现误码,那么余数R为零的概率是非常小的。

总结:在接收端对接收到的每一帧进行CRC检验后,若余数R为,则表示这个帧没有错,就接受。若R不为0,则判定这个帧出错,就丢弃。

例:M=101001,P=1101,n=3。 在发送端: 1、M=(2^n*M); 则:M=101001000 2、用M除以P

这里写图片描述
这里写图片描述

3、得到余数R也就是FCS,将FCS加到M上,就得到了要发送的帧。 M=101001000+FCS=101001001

在接收端: 接收到的每一帧都要进行差错检验,假设收到101001001,P=1101。

这里写图片描述
这里写图片描述

最后余数R=0,则判定这个帧没有出错。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125611.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档