crc是什么意思

crc是什么意思,第1张

CRC是循环冗余校验(CyclicRedundancyCheck)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

简介

在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的)。发送方计算机使用某公式计算出被传送数据所含信息的一个值,并将此值附在被传送数据后,接收方计算机则对同一数据进行相同的计算,应该得到相同的结果。如果这两个CRC结果不一致,则说明发送中出现了差错,接收方计算机可要求发送方计算机重新发送该数据。

工作原理

循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,FrameCheckSequence,FCS)F形成n比特的传输帧T,再将其发送出去。

物理层只管传输比特流,无法控制是否出错,所以数据链路层负责起“差错监测”的工作,检测比特流传输是否有出现错误。

在比特流尾部添加一位比特位来检查比特率传输完成后是否有出差。

假设需要传输 00110010 这个8位的比特流,使用奇偶校验码时,则在这个 00110010 后增加一位比特位 1 ,当接收端接收到这个比特流之后,就会根据最后一个比特位来检测该比特流是否有出错。

那么怎么决定添加的这个校验码是 1 还是 0 呢?

其实是通过技术需要传输的比特流之和的奇偶来决定的。

如:

当传输比特流 00110010 时, 0 + 0 + 1 + 1 + 0 + 0 + 1 + 0 = 3 ,3为奇数,所以添加的校验码为 1

当传输比特流 00111010 时, 0 + 0 + 1 + 1 + 1 + 0 + 1 + 0 = 4 ,4为偶数,所以添加的校验码为 0

但是这个检测方法有个明显的缺陷,如果比特流在传输过程中 出错两位,奇偶校验码就校测不到错误 。因此有了CRC方法。

◆ 一种根据传输或保存的数据而产生固定位数校验码的方法

◆ 检测数据传输或者保存后可能出现的错误

◆ 生成的数字计算出来并且附加到数据后面

0 xor 0 = 0

0 xor 1 = 1

1 xor 0 = 1

1 xor 1 = 0

◆ 模“2”除法是二进制下的除法

◆ 与算术除法类似,但除法不借位,实际是“异或” *** 作

步骤:

例子1:使用CRC计算101001的可校验位串

第一步:

假设选定的多项式 G(x) 为:

展开后为:

可得:二进制位串为1101、最高阶为3。

所以 在数据尾部添加r个0 中的 r 为 3。

第二步:

将添加 3 个0后的数据 101001000 ,使用模“2”除法除以多项式的位串 1101

得到余数 001

第三步:

将得到的余数 001 填充在原数据 3 个0的位置,即得到可校验的位串 101001001

最后得到的可校验的位串 101001001 就是需要发送的比特流。

这个三个步骤都是在发送端完成的,发送端在计算出这个可校验位串之后 101001001 ,就可以把这个比特流发送给接收端 。接收端在接收到该比特流后,就可以进行校验来判断该比特流是否是正确的,接收端怎么判断呢?

接收端接收的数据除以双方约定好的 G(x) 的串位,根据余数是否为0来判断,余数为0则接收的数据没有错误。

例子2:使用CRC计算10110011的可校验位串

第一步:

第二、三步:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11397658.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存