好文档 - 专业文书写作范文服务资料分享网站

中南大学通信电子专业通信网原理课程设计

天下 分享 时间: 加入收藏 我要投稿 点赞

题目名称: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)提供一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。 内设流量控制,避免数据流超限;数据被看作字节流,无长度限制。流式套接字提供了一种可靠的面向连接的数

12jmj6rxxx47le14lopx1jxus0hl5300vu0
领取福利

微信扫码领取福利

微信扫码分享