CRC原理总结
CRC常用于判断文件在传输过程中文件内容是否被更改以及其他的一些加密算法,在Java中,CRC32 工具类提供给我们使用。
1.CRC校验具体原理如下:
在要发送的数据帧后面附加一个数(这个就是用来校验的验证码,都为二进制序列),生成一个新帧发送给接受端。当然这个附加的数不能是随意的,它要使所生成的新帧与
发送端和接收端共同选定某个数整除(注意:这里不是使用的二进制除法,而是一种称为:模2除法)。生成的新帧到达接收端后,再用这个新帧除以(同上)这个选定的数。
因为在发送之前就已经附加了一个数,做了”去余“处理。也就能够整除了。所以结果应该没有余数。如果有余数则表示在传输过程中出了差错。
说明:
”模2除法“ 与算术除法类似,但它既不向上借位,也不比较除数与被除数的相同位数值大小,只要以相同位数进行相除就可以了。模2加法运算为:1+1=0;1+0=1;0+1=1;0+0=0
2.模2减法运算为:1-1=0;1-0=1;0-1=1;0-0=0。相当于二进制中逻辑异或运算(相同为1,不同为0)。如100101除以1110,结果得到商为11,余数为1.如11*11=101

3.CRC具体执行步骤:
1.先选择一个用于在接收端进行校验时,对接收的帧进行除法运算的除数
2.看所选择的除数二进制数(假设k位),然后在要发送的数据帧(假设m位)后面加上k-1位”0“,然后以这个加了k-1个"0"的新帧(一共是m+k-1位)以”模2除法“方式除以上面这个除数,所得到的余数(也就是二进制字符串)就是该帧的CRC校验码,也称为:FCS(帧校验序列)。但一定要注意:余数的位数一定要是比除数位数只能少一位,哪怕前面一位是0,甚至全为0,也都不能省略。
3.再把这个校验码附在原数据帧(也就是m位的帧,注意不是在后面形成的m+k-1为的帧)后面,构建一个新帧发送给接收端。最后把这个接收端以”模2除法“方式除以前面选择的除数,如果没有了余数,则表明该帧在传输过程中没有出现差错。
4.总结
从上面可以看出:CRC有2个关键的点。一是要选择一个发送端和接收端都用来作为除数的二进制比特串(或多项式)。二是用原始帧与上面选择的进行二进制除法运算,计算出FCS。前者可以随机选择,也可以按照国际通用标准进行选择,但最高为与最低为都必须为1,CRC16=X^16+X^15+X^2+X(对应二进制:11000000000000101)
5.案例
选择CRC生成多项式G(X)=X^4+X^3+1,要求求出二进制序列10110011的CRC校验码。

参考:https://wenku.baidu.com/view/34ba49149b89680202d82513.htmlram=1
http://www.repairfaq.org/filipg/LINK/F_crc_v31.html
CRC原理总结的更多相关文章
- crc循环冗余检验
CRC(Cyclic Redundancy Check):循环冗余检验.在链路层被广泛使用的检错技术. CRC原理: 1.发送端 1.1.在发送端先将数据分组,每组k个数据.假定要传送的数据是M. 1 ...
- 基于MODBUS的CRC
%ws WCHAR wszName CRC原理 设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k:生成多项式为G(x),G(x)的最高幂次等于r:CRC多项式为R(x):编码后的带 ...
- C# 实现CRC16校验
前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...
- CRC32为例详细解析(菜鸟至老鸟进阶)
CRC-知识解析 cyclic redundancy check 写在前面的话: 之前在做学校项目的时候用到了CRC 原理,但在网上查找的过程中,发现讲解CRC知识的资源很多,但是对新手比较友好的.讲 ...
- layer2-1 二层
一 概述 一层的相关介绍 CSMA/CD 网桥和交换机的区别 冲突 共享 端口密度 性能 功能 交换机的三种主流转发方式 存储转发 完整的收到 ...
- 在Visual C++中使用内联汇编
一.内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便.内联汇编主 ...
- 墙裂推荐!2020Android阿里&腾讯&百度&字节&美团校招面试汇总
基本情况 2021届硕士生,Android开发岗 此文主要是2020年年初春招实习的面试和正式校招面试经验汇总,最终校招拿到了腾讯,百度,美团等offer 主要包括阿里4面,腾讯实习4面和校招4面,字 ...
- 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer
基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...
- CRC、反码求和校验 原理分析
3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...
随机推荐
- There are two different types of export, named and default
export - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statemen ...
- Gin Web框架简单介绍
翻译自: https://github.com/gin-gonic/gin/blob/develop/README.md Gin Web框架 branch=master"> Gin是用 ...
- 一起来学linux:网络配置
上网首先需要网卡的支持.在linux中默认的网卡为eth0, 第二张网卡为eth1.如果是用的无线网卡则是wlan0.这个可以通过ifconfig查看到.结果如下.其中lo代表本地端口.root@zh ...
- 各种python 函数參数定义和解析
python 中的函数參数是赋值式的传递的,函数的使用中要注意两个方面:1.函数參数的定义过程,2.函数參数在调用过程中是怎样解析的. 首先说一下在python 中的函数调用过程是分四种方式的.这里且 ...
- (转)CentOS 5.5 64bit 编译安装Adobe FlashMediaServer 3.5
http://download.macromedia.com/pub/flashmediaserver/updates/4_0_2/Linux_32bit/FlashMediaServer4.tar. ...
- 开发的第一个PHP扩展
下载php源码php-5.4.23.tar.gz,解压,进入/home/hubo/php-5.4.23/ext/扩展目录 wget http://cn2.php.net/get/php-5.4.23. ...
- css 样式(checkbox开关、css按钮)
checkbox开关 css .iosCheck { /* Blue edition */ } .iosCheck input { display: none; } .iosCheck i { dis ...
- ZOJ - 4016 Mergeable Stack 【LIST】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 题意 模拟栈的三种操作 第一种 push 将指定元素压入指 ...
- B. Two Buttons
这是Codeforces Round #295 (Div. 2) 的B 题,题意为: 给出n, m, 有两种操作,n 减一 和 n 乘以 2,问最少要多少次操作才能把n 变成 m. Sample te ...
- 5.1 《锋利的jQuery》jQuery对表单的操作
获取焦点和失去焦点改变样式 改变文本框/滚动条高度 复选框应用 下拉框应用 表单验证 tip1: 注意使用<label>的for标签,对应input的id.(for 属性规定 label ...