本篇博客主要记载了我对数据校验过程以及奇偶校验的理解。

1.数据校验过程

由于数据传输距离的因素影响,计算机和受控设备间的通信数据就常常出现不可预知的错误。为了防止这些错误所带来的影响,一般在通信时采取数据校验方法,而奇偶校验和循环冗余码校验就是其中最常用的校验算法。串行数据在传输过程中,由于干扰可能引起信息的错误,出现“误码”。我们把如何发现传输中的错误,叫“检码”;发现错误后,如何进行修订,叫“检错”。
之前,就有过提示,为了保证数据在传输过程中不会出错,每个数据包后面一般都会加上校验字节。
校验过程是发送端(TX端)和接收端(RX端)共同完成的过程。如上图所示,首先,TX端按照用户层协议(数据包格式)将数据根据校验算法计算出TX校验字节,并将TX校验字节按照协议放在数据包的指定位置。RX端接收到数据包后,在指定位置取出TX校验字节,同时,再将接收到的数据按规定方式计算出RX校验字节,如果RX校验字节与接收到的TX校验字节相等,则说明数据包是有效的,否则就应该放弃该数据包。

2.简单粗暴地奇偶校验

最简单粗暴的方法就是“奇偶校验”了,即在传输字符的各位之外,再传送一位奇/偶校验位。可采用的策略分为奇校验和偶校验。

2.1 奇校验

所有传送的位数(含字符的个数位和校验位)中,“1”的个数为奇数,如1 0110,0101;0 0110,0001

2.2 偶校验

所有传送的位数(含字符的各位数和检验位)中,“1”的个数为偶数,如1 0100,0101;0 0100,0001
奇偶校验能够检测出信息传输过程中的部分错误的数据(一位错误的代码能够检出,两位及以上的错误代码不能检出)。奇偶检验有一个劣势,就是他只能发现错误,而不能纠正错误;一旦发现错误,那么没办法,只能重发。但是由于奇偶校验使用起来非常简单,仍然被广泛使用。但是仍存在一些良好的矫正错误数据的方法,并具有自动訆错能力,如循环冗余码(CRC)检错等。

3.异或校验

异或校验方法也是非常简单,而且非常通用,虽然使用该方法校验后仍存在出错的可能,但是因为异或算法非常简单,编程毫不费力,一般新手都用这种方法。
之前介绍过的NMEA-0183无线通信协议是在异或算法基础之上进行了一定的改进。能够理解异或运算,并使用好异或校验算法,会使得数据处理编程变得轻松容易。

4.CRC循环冗余码校验

循环冗余码校验(Cyclical Redundancy Check, CRC)是利用除法和余数的原理来做错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置RX,RX对收到的数据重新计算CR并与收到的CRC值相比较,若两个CRC值不同,则说明数据通信出现了错误,该数据包应该舍弃不用。
在远距离数据通讯中,为确保高效而无差错的传送数据,必须对数据进行校验控制,而CRC是对一个传送数据块进行校验,是一种非常高效的差错控制方法。目前,主流的CRC可以分为以下几个标准:CRC-12码;CRC-16码;CRC-CCITT码;CRC-32码。
CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码用途有限。
在数据存储和数据通信领域,CRC无处不在:著名的通信协议X.25的FCS(帧检错序列)采用的是CRC/CCITT,ARJ/LHA等压缩工具软件采用的是CRC32,磁盘驱动器读写采用的日式CRC16,通常用到的图像存储格式GIF/TIFF等也是采用CRC作为检错手段的。

4.1 CRC-16的生成过程

CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高位向低位进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移除CRC寄存器)如果是1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,就无需进行进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个8-bit数据似的8次移位。所有的字符处理完成后CRC寄存器的值即为最终的CRC值。
下面为CRC的计算过程:
(1)设置CRC寄存器,并给其赋值FFFF(hex);
(2)将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器;
(3)CRC寄存器向右移一位,MSB补零,移出并检查LSB;
(4)如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或;
(5)重复第3与第4步直到8次移位全部完成。此时,一个8-bit数据处理完毕;
(6)重复第2至第5步直到所有数据全部处理完成;
(7)最终CRC寄存器的内容即为CRC值。

4.2 如何理解CRC码?

CRC校验是一种多项式除法:将需要发送的数据包当做一个很大的二进制数,用它来除以一个固定的二进制数,所得到的余数即是所求得的CRC校验码。

我也聊聊串口通信协议:数据包校验与常用校验算法相关推荐

  1. 我也聊聊串口通信协议:用户层通信协议的编制

    1.闲话闲聊 最重要的写在前面:用户层通信协议就是数据包格式!!! 没有进行串口通讯实践的朋友可能会想:为什么要编制用户通信协议呢?通信过程中为什么要进行数据处理呢?在设计中编过串口通信程序的读者应该 ...

  2. arduino串口接收数据包_Arduino 串口接收转发十六进制数据,软串口收不到数据

    我是Arduino初学者,今日尝试用Arduino nano 收串口发来16进制数据,再由软串口转发给下级设备,下级设备返回16进制数据.首先简单测试代码如下: #include SoftwareSe ...

  3. TCP聊天室02 通信协议数据包的设计

    //Msg.h #pragma once #include <windows.h>#pragma comment(lib,"Ws2_32.lib") //******* ...

  4. 一个数据包大小是多少k_算法交流: 6046 数据包的调度机制 【2.6基本算法之动态规划】...

    [题目描述] 6046 数据包的调度机制 By OIer14wa随着 Internet的迅猛发展,多媒体技术和电子商务应用日益广泛,Internet上的服务质量 (QoS,Qualityof Serv ...

  5. 大数据建模步骤 以及常用的算法

    1.数据建模的基本流程是什么?只需要做好六步 2.基本概念-回归.分类.聚类_测试狗一枚的博客-CSDN博客_分类 回归 聚类

  6. NS2中数据包Packet的分析 (转帖)

    1. NS2中数据包packet类结构图: packet类中的access函数如下: inline unsigned char* access(int off) const {      if (of ...

  7. 30、IP数据包结构

    本节来学习IP数据包的结构,前面我们一直在说数据包,IP数据包是网络层的PDU.PDU的概念我们在本专栏第2节的内容中谈到过,忘记了就赶快去复习.数据包也被称为"IP数据报"或者& ...

  8. 重生之我是赏金猎人(二)-逆向app破解数据包sign值实现任意数据重放添加

    0x00 项目背景 该系列旨在分享自己和团队在SRC.项目实战漏洞测试过程中的有趣案例,如果读者能从本项目习得一些有用的知识,那么笔者将非常荣幸. 该系列首发github:https://github ...

  9. 重生之我是赏金猎人-SRC漏洞挖掘(二)-逆向app破解数据包sign值实现任意数据重放添加

    0x00前言 本期登场的目标虽不是SRC,但是整个漏洞的利用手法很有学习意义.目前在很多大厂的http数据包中都会添加sign值对数据包是否被篡改进行校验,而sign算法的破解往往是我们漏洞测试的关键 ...

最新文章

  1. Access中复制表
  2. “===” 也有不靠谱的时候
  3. 纯真IP地址数据库qqwry.dat解析
  4. 【数理知识】《积分变换与场论》王振老师-第3章-矢量与矢量空间
  5. Spring Boot 入门(五):集成 AOP 进行日志管理
  6. python pprint_如何美观地打印 Python 对象?这个标准库可以简单实现
  7. 虚拟实验工场大学计算机实验报告答案,虚拟实验实验报告 - 实验报告 - 书业网.doc...
  8. 【转】10.Qt编程涉及的术语和名词
  9. linux内核丢包分析工具,Linux模拟网络丢包与延迟的方法
  10. JS 实现两表格里的数据来回 转移
  11. 编译fastdfs报错Makefile:59: recipe for target 'fdfs_monitor' failed
  12. 隐藏窗体关闭按钮_VB编程(五)按钮和窗体
  13. java day43【Filter:过滤器 、Listener:监听器】
  14. 福建师范网络教育应用计算机,福建师范大学网络教育计算机应用基础课程期末考核答案.docx...
  15. 细丝菲涅尔衍射MATLAB,任意孔型菲涅尔衍射matlab仿真.docx
  16. mysql用户主机设置密码_MySQL用户账号管理(添加、删除、限制、设置密码、远程访问)...
  17. STM8在STVD下开发所需的中断向量表模版
  18. 天云大数据_【案例分享】天云大数据最佳实践系列之——信用评分模型
  19. 华为MateBook E 12.6英寸 win11 16g+512g 轻评测
  20. 上传artifacts到maven仓库

热门文章

  1. 将Asp.Net页面输出到EXCEL里去
  2. 不可不知的C#基础 1. -- Extension 扩展方法
  3. vc--少林72般绝技
  4. poj 2777(线段树+区间染色)
  5. BNU 34974 MATLAB大法好
  6. Ubuntu16.04怎样安装Python3.6
  7. Vue计算属性的使用
  8. android设置系统横屏方案
  9. [JSOI2007]文本生成器
  10. Spring中Bean的配置方式之通过全类名(反射)