1、第 1 页 共 10 页 用模用模 2 2 除法计算除法计算 CRCCRC 码的码的 CRCCRC 校验软件设计校验软件设计 一、一、设计目标设计目标 1)掌握用模二除法实现 CRC 码的计算方法; 2)掌握用 C 语言计算 CRC 码的算法; 3)熟练并掌握 C 语言在通信网络中的编程实现方式及功能; 4) 学会用 C 语言实现文件之间的读取和写入,实现共享传送功能; 5)熟悉 VC6.0 的运行环境,熟练掌握在其中运行编译的各个步骤。 二、二、设计原理和方法设计原理和方法 1 1、CRCCRC 简介及原理:简介及原理: CRC 码为循环冗余校验码,基本表示方式为(n,k),其中 n 为数据
2、位数,k 为校 验码位数。CRC 码校验的基本思想是利用线性编码理论,在发送端根据要传送的(n,k) 位二进制码序列,以一定的规则产生一个校验用的监督码(既 CRC 码)r 位,并附在 信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根 据信息码和 CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。采用 CRC 校验时,发送方和接收方用同一个生成多项式 g(x),并且 g(x)的首位和最后一 位的系数必须为 1。CRC 的处理方法是:发送方以 g(x)去除 t(x) ,得到余数作为 CRC 校验码。校验时,以计算的校正结果是否为 0 为据,判断数据帧是否出
3、错。CRC 校验可以 100地检测出所有奇数个随机错误和长度小于等于 k (k 为 g (x) 的阶数) 的突发错误。所以 CRC 的生成多项式的阶数越高,那么误判的概率就越小。CCITT 建议: 2048 kbit/s 的 PCM 基群设备采用 CRC-4 方案, 使用的 CRC 校验采用 16 位 CRC 校验。在 IBM 的同步数据链路控制规程 SDLC 的帧校验序列 FCS 中,使用 CRC-16。 CRC 的本质是模-2 除法的余数,采用的除数不同,CRC 的类型也就不一样。通常, CRC 的除数用生成多项式来表示。最常用的 CRC 码的生成多项式有 CRC16,CRC32. 32
4、位 CRC 码的产生的规则是先将要发送的二进制序列数左移32 位后,再除以一 个多项式(生成多项式 G(x)),最后得到的余数既是 CRC 码,如式(2-1)式所示, 其中 C(X)表示(n-k)位的二进制序列数,G(X)为多项式,Q(X)为商(整数) ,R(X)是 余数(既 CRC 码) 。 (2-1) 求 CRC 码所采用模 2 加减运算法则,既是不带进位和借位的按位加减,这种加减 运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数 式的乘除法运算是一样,符合同样的规律。 本课程设计中使用的生成多项式是由欧洲 CRC32,即: g(x)= x32+x26+x23+x2
5、2+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 接收方将接收到的二进制序列数 (包括信息码和 CRC 码) 除以多项式,如果余数 为 0,则说明传输中无错误发生,否则说明传输有误。用软件计算 CRC 码时,接收方可 以根据接收到的信息码求 CRC 码,比较结果和接收到的 CRC 码是否相同。 例如信息位是“11011011” 、多项式 g(x)=1001,用模二除法生成 CRC 码的过程如下 所示: 在信息位“11011011”后面增加 3 个“0” ,即“11011011000” 用“11011011000”模二除 g(x)=1001,r(x)=011; 第 2 页
6、 共 10 页 得到的余数“011”即为“11011011”的 CRC 校验码;将其加在原数据后面,即 “11011011011” ,通过发送端发送,在接收端收到数据再除以多项式 g(x),若余数 为 0,则传输正确,去掉后三位即得到需要的数据“11011011” ;若信道有干扰,使 接收到的数据不是“11011011” ,除以多项式 g(x)后余数不为 0,则传输失败,等待 重传。 2 2、模二除法实现、模二除法实现 CRCCRC 校验的基本原理校验的基本原理 用计算机编程实现CRC校验码,采用寄存器移位的方法。 假设待测数据是1101 0110 11,生成项是10011,假设有一个4 bits的寄存器, 通过反复的移位和进行CRC的除法,最终该寄存器中的值就是我们所要求的余数。 3 2 1 0 Bits +-+-+-+-+ Pop crcbitnumber ) regi crcbitnumber ) /做最后一次 XOR printf(“crc=%xn“,regi); crc=regi; data_temp= 0; -