CRC循环校验

CRC循环校验,第1张

对101110,在末尾添加所给多项式的最高次阶个0,如本题为x^3,则添加3个0,变为:101110000。

由多项式x^3+1,得其阶数为1的二进制编码为:1001。

101110000对1001进行模二除法,所得到的余数即为校验码,把校验码添加在原数据尾部即为所求的编码,则实际发送的数据序列为101110011。

一、什么是CRC校验

这里要介绍一下数据链路层的三个基本问题:

1.封装成帧

这里写图片描述

加上首部和尾部,尾部包含FCS冗余校验码(专门为了检错而添加的帧验证序列)。

说明:CRC和FCS,没有关系,添加的FCS码既可以用CRC校验,也可以用其他方法校验。

2.透明传输

这里的透明传输是指任何东西否可以封装成帧来传输,就是透明传输。

3.差错校验

数据链路层广泛采用CRC校验。

循环冗余校验(Cyclic Redundancy Check),简称CRC校验。是IOS网络结构中,数据链路层的一种差错校验的技术。

二、CRC校验出现的原因

数据在传输的过程中,比特位可能发生错乱,1可能变成0,0可以变成1。

传输中错误的比特位占总数的比例称为误码率BER(Bit Error Rate)。数据传输不管怎么样,误码率都存在,因此,为了保证数据传输的可靠性,在数据链路层广泛使用CRC校验。

三、CRC校验的原理

举例: 现在有一段待发送的数据M=101001,k个比特位(这里k=6)。CRC运算就是在数据M后面加上n位冗余码。然后构成一个帧发送出去。

n为冗余码这么获得呢?

二进制模2运算乘M得到被除数:2n∗M

,被除数是双方商定好的(n+1位)P=1101。

用被除数除以除数可以得到 n位的余数。

101001000%1101=001

把得到的余数加到M后面就是发送的FCS:101001001。这个数除以P,余数为0。

每段帧在CRC校验后两种情况:

<1>.若得出余数为0,那么这个帧没有出错,接受。

<2>.要是得到余数≠0,那么出错,丢弃。

一种更方便的方法来标示循环冗余校验过程。

P(X)=X3+X2+1

,根据X的次方对应得到(P=1101)。

总结:在数据链路层,发送端检验校验序列FCS的生成和接收端CRC校验都是硬件完成,不会影响到数据传输的效率,在数据链路层仅用CRC校验,只能对帧做到无差错接受,(因为只有不出错才接受),所以凡是接收端收到了链路层的帧,那么认为这些帧的传输过程中没有产生差错。

ISO的观点是让数据链路向上提供可靠传输,因此在CRC校验的基础上,加入了帧编号,确认,重传机制。

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

简介

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

工作原理

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


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

原文地址: https://outofmemory.cn/bake/11917733.html

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

发表评论

登录后才能评论

评论列表(0条)

保存