CRC循环冗余检验

来源:互联网 发布:ipad软件删不掉怎么办 编辑:程序博客网 时间:2024/05/17 23:27

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

CRC循环冗余检验:是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

以上CRC的概念来自百度百科。

CRC的具体操作如下:

在发送端,在数据M后面添加供差错检测的N位冗余码,然后构成一个帧发送出去。

在接收端,把接收的数据以帧为单位进行CRC校验,即把收到的每一个帧都除以同样的除数P,然后检查余数R

(1)如果得到的余数R=0,则判定这个帧没有差错,就接受;

(2)如果余数R != 0,则判定这个帧有差错,就丢弃。


下面重点是N位冗余码怎么获得。

用二进制的模2运算(进行加法时不进位)进行2的N次方乘M的运算,这相当于在M后面添加N个0。得到的(K+N)位的数除以收发双方事先商定的长度为(N+1)位的除数P,得到商Q而余数是R。

公式:


例如:M=101001,假如除数P=1101,经过模2除法运算后的结果是:Q=110101,余数P=001,R要拼接在M的后面发送出去,即发送的帧为101001001。

如图:


接受到帧之后进行同样的操作,然后进行上面说过的余数R判断。



如此CRC就完成了,此外还要强调一点:

在数据链路层若仅仅使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受(因为错的被丢弃的了,所有认为收到的帧都是无差错的)。

0 0
原创粉丝点击