CRC校验算法[通俗易懂]

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

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

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.net/125611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ajax怎么解决报414,关于c#:HTTP错误414。请求URL太长。 asp.net

    ajax怎么解决报414,关于c#:HTTP错误414。请求URL太长。 asp.net我收到错误”HTTP错误414。请求URL太长”。从下面的文章中,我了解到这是由于查询字符串很长所致:在web.config中,我有maxQueryStringLength=”2097151″。这是最大值吗?为了解决此问题,我应该在web.config中设置maxUrl吗?如果是这样,支持的最大值是多少?我该怎么办才能解决此错误?是否可以将URL中的某些长字符串替换为整数或Guid?如果…

    2022年6月3日
    43
  • Fragment 点击返回键 做返回操作

    Fragment 点击返回键 做返回操作

    2021年3月12日
    180
  • log4j pattern详解_log4j不同的类输出到不同文件中

    log4j pattern详解_log4j不同的类输出到不同文件中spring使用log4j,可以有2种方法。1、在web.xml里不做任何配置。log4j.properties放在classpath根目录下,这时候生成的日志文件就没有相对路径,如果写相对路径,则会生成在安装tomcat的根路径下。2、在web.xml设置。          log4jConfigLocation          WEB-INF/classes/log4j.propert

    2022年8月22日
    4
  • 魔兽世界 | 宏命令教程

    魔兽世界 | 宏命令教程前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是宏命令有了宏命令,可以很大程度的解放双手,开启懒人脸滚键盘模式,本篇文章就简单讲解一下基本宏指令,并尝试完成一套一件输出宏二、基本宏速查表#showtooltip多用于宏命令的开头,让按钮显示技能的说明和技能的图标/castxxx施放技能,如/

    2025年8月3日
    4
  • matlab wavedec2 函数,python小波变换 wavedec2函数 各个返回值详解

    matlab wavedec2 函数,python小波变换 wavedec2函数 各个返回值详解python小波变换wavedec2函数各个返回值详解python小波变换wavedec2函数各个返回值详解网上找了好多文章都没有提到这个东西,没有说明wavedec2函数各个返回值究竟是什么意思我们先看看wavedec2函数的大概形式,pywt.wavedec2(data,wavelet,mode=’symmetric’,level=None,axes=(-2,-1))…

    2022年6月29日
    42
  • Unbound classpath container: 'JRE System Library [jdk17060]' in project ***

    Unbound classpath container: 'JRE System Library [jdk17060]' in project ***

    2022年1月14日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号