课程设计报告
评语:
课程名
称:
计算机网络课程设计
题 目: 循环冗余校验 ( CRC )
算法的实 现
专 业: 数字媒体技术
学生姓
名:
余友华
学 号:
1500460230
指导老
师:
胡清钟
成 绩:
目录
目录
一、 设计任务 .......................................................................................................................................................... 1
1. 设计要求 ............................................................................................................................................................... 1
2. 课程设计报告内容 ............................................................................................................................................... 1
二、 需求分析 .......................................................................................................................................................... 1
三、 总体设计 .......................................................................................................................................................... 1
1. 软件及编程语言 ................................................................................................................................................... 1
2. 方案设计 ............................................................................................................................................................... 2
2.1
循环冗余检验的原理 ........................................................................................................................................ 2
2.2 CRC
编码规则 ................................................................................................................................................. 2
2.3 CRC
码的生成步骤 ......................................................................................................................................... 2
2.4 CRC
码校验过程 .............................................................................................................................................. 3
四、 详细设计(相应地给出关键的代码) .......................................................................................................... 4
1. 第一部分 .............................................................................................................................................................. 4
2. 第二部分 .............................................................................................................................................................. 6
4. 第四部分 ............................................................................................................................................................ 11
五、 设计总结(评价 / 遇到的问题 / 体会 / 建议等) ............................................................................................ 13
六、 使用说明 ........................................................................................................................................................ 14
七、 参考文献 ........................................................................................................................................................ 18
1
桂林电子科技大学课程设计报告
一、设计任务
1.设计要求
(1)利用结构体或数组模拟网络数据包结构。
(2)编码实现 CRC 算法,并将得到的校验位附加到网络数据包相应的位置。
(3)根据数据包的长度,随机生成一个数据包产生突变的位置,并对该位置的 bit 位模拟突变的
产生。
(4)重新利用 CRC 算法校验该数据包,并指出产生的结果。
(5)CRC 能够检出所有的错误吗?如果不能,你能构造出无法检错的实例吗?
2.课程设计报告内容
(1) 给出程序的流程图;
(2) 给出程序源码;
(3) 给出程序的测试结果。
二、需求分析
在数据通信与网络中,为了尽可能地降低通信的误码率,提高数字通信的可靠性,通常采用一种循
环冗余校验码 CRC(Cyclic Redundancy Check),简称循环码或 CRC 码。
循环冗余校验码是数据通信领域中最常用的一种差错校验码,其特征是可以任意选定信息字段
和校验字段的长度。CRC 码是由两部分组成,前半部分是信息码,就是需要检验的信息,后半部
分是检验码,它采用的是一种多项式的编码方法。循环码和码字多项式是 CRC 中的两个基本概念。
CRC 码校验的基本思想是利用线性编码理论,在发送端根据要传送的 k 位二进制码序列,以一定
的规则以产生一个校验用的监督码(CRC 校验码)n 位附在信息后边,构成一个新的二进制码序列
数共(k+n)位,最后再将之发送出去。在接收端,则根据信息码和 CRC 码之间所遵循的规则进行
检验,以确定传送中是否出错。
循环冗余校验码 CRC 是一种高效率且相对可靠的方法,由线性分组码分支而来。它是一种通过
多项式除法检测错误的很不寻常而又巧妙的方法,一方面它有很强的检测能力,另一方面它的编码器
电路及错误检测器电路都很容易实现,它的这些优点使它在通信系统中得到了广泛的应用。现实的
通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1 可能会变成 0,而 0 也
可能变成 1。这就叫做比特差错。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,
必须采用各种差错检测措施。目前在数据链路层广泛使用了循环冗余检验 CRC 的检错技术。
三、总体设计
1.软件及编程语言
2
桂林电子科技大学课程设计报告
课程设计采用 MyEclipse 软件,使用 Java 作为编程语言。Java 语言是一种跨平台,适合于分
布式计算环境的面向对象编程语言。具体来说,它具有这些特性: 简单性、面向对象、分布式、解
释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
除了以上特性之外 Java 语言还去除了 c++中难以理解,容易混淆的特性(如 c++中的多继
承,头文件,指针,结构,单元,运算符重载,虚拟基础类),使得程序更加严谨,整洁;此外
Java 的强类型机制,垃圾回收器,异常处理,安全检查机制使得 Java 语言编写的程序有更好的健
壮性和鲁棒性。
本次课设采用数组模拟网络数据包结构,采用 MyEclipse 软件操作简单,结果明了,故用 Java 程
序语言实现 CRC 校验的程序设计。
2.方案设计
2.1 循环冗余检验的原理
在发送端产生一个循环冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发
送端形成循环冗余码以同样的算法进行校验,若有错,则重发。它在发送端编码和接收端校验时,
都可以利用事先约定的生成多项式 G(X)来得到,k 位要发送的信息位可对应于一个(k-1)次多项
式 K(X),r 位冗余码则对应于一个(r-1)次多项式 R(X),由 r 位冗余码组成的 n=k+r 位码字则对应
于一个(n-1)次多项式 T(X)=Xr×K(X)+R(X)。
2.2 CRC 编码规则
CRC 码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果
CRC 码共长 n 个 bit,信息码长 k 个 bit,就称为(n,k)码。它的编码规则是:
(1)移位
将原信息码(kbit)左移 r 位(k+r=n)。
(2)相除
运用一个生成多项式 g(x)(也可看成二进制数)用模 2 除上面的式子,得到的余数就是校验
码。
非常简单,要说明的是,模 2 除就是在除的过程中用模 2 加,模 2 加实际上就是我们熟悉的异或运
算,就是加法不考虑进位,公式是: 0+0=1+1=0,1+0=0+1=1,即‘异’则真,‘非异’则假。
由此得到定理:a+b+b=a,也就是‘模 2 减’和‘模 2 加’真值表完全相同。有了加减法就可以用
来定义模 2 除法,于是就可以用生成多项式 g(x)生成 CRC 校验码。
2.3CRC 码的生成步骤
第一步:在数据单元(k 位)的末尾加上 n 个 0。n 是一个比预定除数的比特位数(n+1)少
1 的数。
第二步:采用二进制除法将新的加长的数据单元(k+n 位)除以除数。由此除法产生的余数
就是循环冗余码校验码。
3
桂林电子科技大学课程设计报告
第三步:用从第二步得到的 n 个比特的 CRC 码替换数据单元末尾附加的 n 个 0。如果余数位
数小于 n,最左的缺省位数为 0。如果除法过程根本未产生余数(也就是说,原始的数据单元本身
就可以被除数整除)那么以 n 个 0 作为 CRC 码替换余数所在的位置。产生的比特模式正好能被除
数整除。
如图 1 实例所示。
图 1
2.4CRC 码校验过程
将接受码字与生成多项式进行模二运算,余数为 0,码字正确。如图 2 所示。
图 2
四、详细设计(相应地给出关键的代码)