题目名称:CRC-32校验通信软件设计
一、设计目标
环境要求:Windows;信息交换内容为文本文件;WinSock通信
编码要求:用模2除法计算CRC码,生成多项式为CRC-32
功能要求:能在两台计算机机上运行程序,一台产生CRC码,另一台校验。
二、设计原理和方法
1.CRC简介及原理
CRC,即循环冗余校验法是一种功能较强的检测技术。循环冗余校验法是将所传输的数据除以一个预先设定的除数,所得的余数作为冗余比特,附加在要发送数据的末尾,被称为循环冗余校验码(CRC码),这样,实际传输的数据就能够被预先设定的除数整除。当整个数据传送到接收方后,接收方就利用同一个除数去除接收到的数据,如果余数为0,即表明数据传输正确,否则意味着数据传输出现了差错。
确定循环冗余校验码的关键在于二进制序列的除法计算上。其规则是:加法、减法运算都是进行异或(XOR)运算,加法不进位,减法不借位。计算方法如下:
在数据的末尾加上n个0,n等于除数的位数减1;
采用二进制除法规则(模2除法),计算加长的数据除以预先设定的除数,得到的余数即为循环冗余校验码;
将循环冗余校验码替换数据末尾的n个0,即得出整个传输的数据。
CRC-32是CRC的校验标准之一,其除数,即生成多项式为:g(x)= x32+x26+x23+x22+x16+
x12+x11+x10+x8+x7+x5+x4+x2+x+1,其对应校验二进制为 1 0000 0100 1100 0001 0001 1101 1011 0111,16进制记为104C11DB7。按上述规则先将要发送的二进制序列数左移32位后,再除以多项式g(x),最后得到的余数即是CRC-32码。将CRC-32码替换发送数据末尾的32个0,得到整个传输数据。接在收端收到整个传输数据,将数据除以多项式g(x),若余数为0,则传输正确,去掉后32位即得到需要的数据;若信道有干扰,除以多项式g(x)后余数不为0,则传输失败,等待重传。
2.模2除法计算CRC码的方法
通常的CRC算法是模仿硬件的算法,在计算一个数据段的CRC值时,其CRC值是由求解每个数值的CRC值的和对CRC寄存器的值反复更新而得到的。
假设待测数据是1101011011,生成项是10011,假设有一个4 bits的寄存器,通过反复的移位和进行CRC的除法,最终该寄存器中的值就是我们所要求的余数。
3 2 1 0 Bits
+---+---+---+---+
Pop <-- | | | | | <----- Augmented message(已加0扩张的原始数据)
+---+---+---+---+
1 0 0 1 1 = The Poly 生成项
依据这个模型,我们得到了一个最最简单的算法:
把register中的值置0. 把原始的数据后添加w个0. While (还有剩余没有处理的数据) Begin
把register中的值左移一位,读入一个新的数据并置于register最低位的位置。
If (如果上一步的左移操作中的移出的一位是1) register = register XOR Poly. End
实际上就是模拟XOR除法的过程,即被测数据一位一位放到寄存器中来做除法。比如生成项是10011,则生成的余数是4位XXXX,所以寄存器是4位。待测数据是1101 0110 11,后面加上0000,即扩张4位,以容纳余数。只要与生成项的0011做XOR就好了,最高位经过XOR肯定出0,可不用最高位。
3.Winsock通信的原理
套接字(Socket)是网络通信的基本构件。套接字是可以被命名的通信端点,应用程序通过它在网络上发送和接收数据。每个套接字都有其类型,并有一个与之相连的进程。TCP/IP提供3种类型套接字:流式套接字(SOCK—STREAM)、数据包套接字(SOCK—DGRAM)、原始式套接字(SOCK—RAW)。
流式套接字(SOCK—STREAM)提供一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。 内设流量控制,避免数据流超限;数据被看作字节流,无长度限制。流式套接字提供了一种可靠的面向连接的数
中南大学通信电子专业通信网原理课程设计
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)