CRC检验--循环冗余检验

来源:互联网 发布:淘宝主图怎么做 编辑:程序博客网 时间:2024/05/14 16:00

一、什么是CRC循环冗余校验?

要想了解什么是CRC,需要先了解一下下面几个概念。。

比特差错:现实中的 通信链路是不理想的,这也就是说在传输过程中可能会产生差错,1也许会变成0,0或许也会变成1。这就是比特差错。

CRC循环冗余校验则是为了解决数据链路层中存在的比特差错问题。

CRC循环冗余校验原理:

大多数书上基本上是以二进制的多项式形式来说明的。其实它最根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

FCS是添加在数据后面的冗余码。

【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。“模2加减”则为无进位,无退位。


那么FCS冗余码该怎样求出。我们可以采用以下方法。

2的n阶次方乘运输数据,得到的(k+n)位的数除以手法双方实现商定的长度为(n+1)位的除数P,得到的商为Q,而余数为R(n位,比P少一位);则R就为FCS(循环校验冗余码)。

现在目前使用比较广泛的方法是用多项式来表示循环冗余检验过程。 现在目前使用较为广泛的生成多项式的P(X)有以下几种:

二、用CRC校验检错例子

假定传输一个M=101001;CRC校验就是在数据M的后面添加检测用的n位冗余码,然后构成一个数据帧发送出去。

n位冗余码的计算:


在接收端的检验:接收到的数据以帧为单位进行检验,把收到的每一个帧都除以同样的除数P,然后检查得到的余数R。如果在传输过程中,如果没有出现差错,那么经过CRC检验后得到的余数肯定为0。

总之在接收端只有两种情况:

1>若得出的余数R=0,则判定这个帧没有差错,就接受。

2>若得到的余数R不等于0,则判定这个帧有错误(但无法判断究竟是哪几位出现了差错),就丢弃。

原创粉丝点击