原文转载自:https://blog.csdn.net/hm108106/article/details/73332465

1.CRC

CRC循环冗余校验码是数据通信中的一种查错校验码。

循环冗余检查对数据进行多项式计算,将计算结果附加在帧后面,接收数据的设备执行模2运算,保证数据传输的正确性和完整性。  

2.模2除法      

①不向上借位,只要除数和被除数的位数相同就可进行计算,不比较它们的大小;

②模2运算中用到了模2减法,与逻辑异或相似: 
1-1=0, 1-0=1, 0-1=1 , 0-0=0,

③例子: 

3.CRC校验的步骤

(1)选择一个生成多项式,作为对接收的帧进行除法运算时的除数,生成多项式可以写为二进制形式;

  • 生成多项式的要求: 
    ①最高位和最低位必须为1; 
    ②当CRC码的任何一位发生错误时,新帧除生成多项式后余数不为0; 
    ③不同位发生错误时,余数应该是不同的;

  • 生成多项式转化为二进制形式: 
    如x5+x3+x2+1,写为二进制:101101

(2)计算CRC校验码位数k=生成多项式位数-1,在要发送的数据帧后加k个0,除第一步用生成多项式转化的二进制数(使用模2除法),得到的余数即为CRC校验码;

  • 模2除时,余数的位数必须只比除数少一位,不能省略0

(3)把得到的校验码CRC加到原数据帧后,构成一个新数据帧发送到接收端,接收端将新帧除以之前选择的除数(模2除法),如果没有余数,则表明该数据帧在传输过程中没有出错,否则出错;

4.CRC校验例子:

假设CRC生成多项式G(X)=X5+X4+X+1,要发送的二进制数据帧为100101110,求CRC校验码:

①把生成多项式转换为二进制数:110011;

②由生成多项式的位数为6可知,CRC校验码的位数为5,所以在数据帧后加5个0,变为10010111000000,将这个数使用模2除法除以生成多项式110011,得到余数即CRC校验码11010; 
 
③用得到的CRC校验码替换掉数据帧中的5个0,形成新的帧10010111011010,将这个新帧发送给接收端;

④接收端收到新帧后,用新帧除以上面的多项式110011(模2除法),如果余数为0,该数据帧在传输过程中没有出错,否则出错;(经验证余数为0)

最新文章

  1. Jexus 服务器部署导航
  2. eclipse绘制activiti无法生成图形
  3. Geometry关系高级操作
  4. 解决由OpenShift自带的APC加速器造成的代码无法及时生效的问题
  5. document对象(二)
  6. Object中的一些方法
  7. Java 数组在内存中的结构
  8. Struts(九):值栈(OGNL)
  9. springMVC源码分析--HandlerMapping(一)
  10. jenkins 构建到最后报权限的问题
  11. vue 中跨组件的表单验证
  12. pyqt5 -——介绍及和pycharm的环境搭建
  13. Node post请求 通常配合ajax
  14. MVC 上传下载
  15. while、for循环控制之if、else
  16. pygame系列_箭刺Elephant游戏_源码下载
  17. 【Hibernate一】概述及入门
  18. ballerina 学习四 如何进行项目结构规划
  19. css loading 效果
  20. Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

热门文章

  1. Java实现 蓝桥杯VIP 算法训练 判定数字
  2. Vue入门 — Vue + vuetifyjs应用实践
  3. 自动网络搜索(NAS)在语义分割上的应用(一)
  4. spring cloud 集成分布式配置中心 apollo(单机部署apollo)
  5. 基于Python3.7的robotframework环境搭建步骤
  6. TensorFlow从0到1之TensorFlow Keras及其用法(25)
  7. SpringMVC框架搭建流程(完整详细版)
  8. fiddler修改请求参数
  9. Spring Cloud 系列之 Alibaba Nacos 配置中心
  10. 小师妹学JVM之:JDK14中JVM的性能优化