CRC校验

来源:互联网 发布:js获取input选中的值 编辑:程序博客网 时间:2024/05/19 11:49

1. 定义

        CRC  即循环冗余校验码:是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。在链路层被广泛使用的检错技术。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似算法,以保证数据传输的正确性和完整性。 

2. 原理

        在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC  的检错技术。在发送端,先把数据划分为组(帧)。假定每组 k  个比特。在每组后面,添加供差错检测用的 n 位冗余码一起发送。即:实际发送长度为:k+n  比特,发送前双方协商 n+1 位的除数 P。

3. 冗余码的计算

         2^n*M (发送数据),这相当于在 M 后面添加 n 个 0,长度成为 k + n;

        得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P;

        除法采用模 2 减法(无借位减,等价于异或);

        得出商是 Q 而余数是 R,余数 R 比除数 P 少1 位,即 R 是 n 位。

        在接收端对接收到的每一帧进行 CRC 检验后,若余数 R 为 0,则表示这个帧没有错,接受。若 R 不为 0,则表示这个帧出错,丢弃。

4. 冗余码的计算举例

        现在 k = 6, M =101001。

        设 n= 3,除数P= 1101,被除数是 2^n*M = 101001000。

        模 2 运算的结果是:商 Q= 110101,余数 R = 001。

        把余数 R 作为冗余码添加在数据 M 的后面发送出去。

        发送的数据是: 2^n*M + R。即:101001001,共 (k + n)  位。


余数不为 0,检测到此帧出错,丢弃。


原创粉丝点击