CRC 循环冗余检验【计网必考】
创始人
2024-03-23 19:58:18
0

CRC 循环冗余检验作为一个重点,也是数据链路层必考的一个考点,所以我把差错检测单独拿出来分析一起看一下。总结不易,一个简单的攒,Thanks♪(・ω・)ノ

目录

一、介绍及工作原理

二、校验计算过程


一、介绍及工作原理

循环冗余校验 CRC 是数据链路层的一种差错控制技术。在数据的传输过程中可能会产生比特错误(1 可能变成 0,0 可能变成 1),为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用相应的差错检测机制。

在数据链路层传送的帧中,广泛使用了 CRC 技术。

在发送端,先把数据划分为组,假定每组 k 个比特;假设待传送的一组数据 M = 101001(现在 k = 6),我们在 M 后面再添加 n 位供差错检验用的冗余码一起发送。

大致计算流程如下:

① 用 2 进制的模 2 运算进行 2 ^ n 乘 M 的运算,这相当于在 M 后面添加了 n 个 0,我们设它为 M2;

② 求冗余码,用得到的 M2 除以事先选定好的长度为(n + 1)位的 P,得出的余数为 R,R 取 n 位;

③ 最后用 R 替换 M2 中最后 n 个 0 的位置,即可得出最终应传送的数据。

二、校验计算过程

已知多项式为 x^6 + x^4 + x^2 + x +1,待传送的数据串为 M = 1101011011。在 M 后面添加供差错检测用的 n 位冗余码一起发送。

第一步,确定除数 P。关于多项式,只要是 CRC 算法就离不开多项式算术,使用多项式算术是为了在二进制计算时无需考虑进位问题,CRC 校验中,多项式可以表示为,ax^5 + bx^4 + cx^3 + dx^2 + ex + 1*x^0,而 CRC 用到的除数 P,正是由多项式的各项系数组成。

展开多项式,5 次方和 3 次方系数都为 0,则 CRC 除数为 1010111。

所以为了得到除数,我们只需要观察简写式列出的项即可,为了避免出错,可以从右往左写,这个看个人习惯。

第二步,得到 M2。我们要在原数据串末端加 0,0 的数量由多项式决定,具体来说,多项式的阶数是多少就加几个 0。

例如多项式 x^6 + x^4 + x^2 + x +1,该多项式的最高次项为 6 次项,所以在已知的原数据串末端加 6 个 0,即被除数 1101011011000000 。

第三步,接下来就可以计算校验和了。

① 将数据串的第一个 1 与除数左对齐,按位进行异或操作

注:此过程中的计算,均不产生进位,采用相同得 0,相异的 1 的规则。

② 将未处理的数据搬下来作为新的数据串,重复操作

 

 注:切记将数据串的第一个 1 与除数左对齐,头部的 0 直接跳过。

一直重复以上操作,直到所有的数据都处理过为止。所得到的结果即是校验和,也就是冗余码,111011(长度为除数-1)

第四步,将校验和加在数据项之后,便是带有 CRC 校验的数据,即最终的结果,1101011011111011。

有一处需要注意的地方是,当最后结果的有效位数较少时,最后拼接校验和的时候,不要漏掉前面的 0 ,具体来讲,所拼接的校验和的长度应与之前加 0 的个数相等。 

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...