计算校验和1计算机网络课程设计.docx

上传人:啊飒飒 文档编号:11750783 上传时间:2021-09-03 格式:DOCX 页数:17 大小:158.63KB
返回 下载 相关 举报
计算校验和1计算机网络课程设计.docx_第1页
第1页 / 共17页
计算校验和1计算机网络课程设计.docx_第2页
第2页 / 共17页
计算校验和1计算机网络课程设计.docx_第3页
第3页 / 共17页
计算校验和1计算机网络课程设计.docx_第4页
第4页 / 共17页
计算校验和1计算机网络课程设计.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《计算校验和1计算机网络课程设计.docx》由会员分享,可在线阅读,更多相关《计算校验和1计算机网络课程设计.docx(17页珍藏版)》请在三一文库上搜索。

1、 沈阳理工大学课程设计专用纸 No14成 绩 评 定 表学生姓名班级学号专 业计算机科学与技术课程设计题目 计算校验和评语组长签字:成绩日期 2012 年 12 月3日课程设计任务书学 院专 业学生姓名班级学号课程设计题目计算校验和实践教学要求与任务:1本课程以教师教授和学生自学同步的方式,学校可提供上机操作,提高实际操作,设计能力。主要功能为布置不同的题目设计程序,实现程序。2 在完成基本技巧的讲解后,学号尾号相同的同学自行分成一组,学生独立完成。3 教师面对面当场检查学生掌握程序的情况,根据学生的学习情况,及题目的完成情况给相应的成绩。工作计划与进度安排:第15周星期一:设计任务分析和总体

2、设计星期二:软件算法和流程设计星期三:软件编码实现星期四:软件总体调试星期五:交课程设计报告、答辩、验收程序指导教师: 2012 年12月 日专业负责人:2012 年 12 月 日学院教学副院长:2012 年 12月 日目 录摘 要1课程设计目的12课程设计要求13相关知识14课程设计分析45程序代码86运行结果与分析117参考文献128 收获13沈阳理工大学1 课程设计目的校验和是用于验证数据传输正确性的一种方法。在网络体系结构的各层协议中,很多网络协议都利用校验和来实现差错控制功能。本课程设计的主要目的是通过完成一个简单例子,了解网络协议中的校验和的计算过程。2 课程设计要求根据后面介绍的

3、校验和算法,编写程序为给定程序计算校验和。1) 以命令和形式运行:Main 1-file其中main为程序名,1-file为输入数据文件名。2)输出内容:数据文件的校验和。3 相关知识1. 校验和的概念 网络上的数据最终都是通过物理传输线路进行传输,如果高层没有采用差错控制,那么物理层传输的数据可能有差错。为了保证传输的数据的正确性,在物理层的基础上设计了数据链路层。设计链路层的目的就是在原始的有差错的物理传输线路的基础上,采用差错检测差错控制与流量控制等方法,将有错的物理线路改进成逻辑上无差错的数据链路,以向网络层提供高质量的服务。目前,进行差错检测和控制的主要方法是:发送方在需要发送的数据

4、后面增加一定的冗余信息,这些冗余信息通常是通过对发送的数据进行某种算法计算而得到的。接收方对接收数据进行同样的计算,然后与数据后面附加的冗余信息进行比较,如果比较结果不同就说明在传输中出现了差错,并要求发送方重新传送该数据,以此达到确保数据准确性的目的。在普遍使用的网络协议(例如IP ICMP IGMP UDP与TCP等)中,通常都设置了校验和字段以保存这些冗余信息。计算这些校验和的算法成为网络校验和算法,就是将被校验的数据按16位进行累加,然后去取反碼,如果数据字节长度为奇数,则数据尾部补一个字节的0以凑成偶数。关于计算校验和算法的详细信息请参考RFC1071.2. 关于计算校验和有很多数学

5、方法可以用来提高校验和的计算速度,下面我们将就此展开讨论。(1) 交换性与结合性因为校验和主要考虑被校验数据中所包含字节的数量是奇数还是偶数,所以校验和的计算可以任意进行,甚至可以把数据进行分组后再计算。例如用A,B,C,D,Y , Z分别表示一系列八位组,用【a,b】这样的形式的字样组来表示a*256+b的整数,那么16位校验和就可以通过以下形式给出:【A,B】+【C,D】+【Y,Z】【A,B】+【C,D】+【Z,0】在这里,+代表1补救加法,即将前面的16位校验和按位取反。【1】 可以以(【A,B】+【C,D】+【J,O】+【O,K】+【Y,Z】)的形式进行计算。(2)字节顺序的自主性打破

6、被校验数据中的字节顺序仍可以计算出正确的16位校验和。例如,我们交换字节组中两字节的顺序,得到【B,A】+【D,C】+【Z,Y】所得到的得结构与1式是相同的(当然结果也是要进行一次反转的)。为什么会这样呢?我们发现两种顺序获得的进位是相同的,都是从第15位到第0位进位以及从第7位到第8位进位。这也就是说,交换字节位置只是改变高低位字节的排列顺序,但并没有改变它们的内在联系。因此,无论底层的硬件设置中对字节的接收顺序如何,校验和都可以被准确地校验出来。例如,假设校验和是以主机序(高位字节在前低位字节在后)计算的数据帧,但以网络序(低位字节在前高位字节在后)存放在内存中。每一个16位的字中的字节在

7、传送过程中都交换了顺序,在计算校验和之后仍会先交换位置再存入内存,这样就与接受到的原本以网络序存储的数据帧中的校验和项保持一致了。(2) 并进行计算某些机器的字处理长度是16位的倍数,这样可以提高它的计算速度。由于加法所具有的结合性,我们没有必要按照顺序对每个字节进行累加。相反,我们可以利用这一特点对它们进行并行累加。并行地计算校验和只是增加了每次累加的信息长度。例如,在一个32位的机器上,我们可以一次增加4个字节,即A,B,C,D+。计算结束后再把累加和“折叠”起来,把一个32位的数值变为16位,这样产生的新的进位也要循环累积起来。此外,在此仍不考虑字节顺序的问题,我们可以用D,C,B,A+

8、或B,A,D,C+这样的顺序来计算校验和,最终再通过交换16位校验和中的字节序来得到正确的值。这些改变顺序的方法都是为了让所有的偶数字节进入一个校验和字节,所有的奇数字节进入一个校验和字节。3示例下面将通过一个简单的例子来演示通过上述的几种方法所得到的校验和的情况。16位按字节累加“正常”顺序交换顺序字节0/1:00 0100010100字节2/3:f2 03F20303f2字节4/5:f4 f5f4f5f5f4字节6/7:f6 f7f6f7f7f6合计1:2dc 1f02ddf01f2dcdc f0ddf0f2dc进位:1 221合计2:dd f2ddf2f2dd最终结果:dd f2ddf2

9、dd f232位按字节累加“正常”顺序交换顺序字节0/1/2/3:0001f203010003f203f20100字节4/5/6/7:f4f5f6f7f5f4f7f6f7 f6 f5f4合计1:0f4f7e8fa0f6f4fbe80fbe8f6f4进位:000前半段:f4f7f6f4fbe8后半段:e8fafbe8f6f4合计2:1ddf11f2dc1f2dcddf1f2dcf2dc进位:111合计3:ddf2f2ddf2dd最终结果:ddf2ddf2ddf2还有一个例子是把计算工作分为两组,第二组是以奇数边界起始的。按字节累加“正常”顺序字节0/1:00 010001字节2/:f2 (00)

10、f200合计:f2 01f201字节4/5:03 f403f4字节6/7:f5 f6f5f6字节8/:f7 (00)f700合计2:1f0ea合计2:f0ea进位:1合计3:f0eb合计1:f201合计3(交换字节序):ebf0合计41ddf1合计4ddf1进位:1合计5:ddf24一些编码技术可以提高校验和的计算速度(1) 延迟进位法这种方法在主要的累加循环结束之后再把进位累加进和值。其实现方式就是用32位的累加器获得16位校验和,这样溢出就产生在高16位上。这种方法避免了累加器中进位传感器机构的设置,但是它要求的容量是原来的累加器容量的两倍,因此它更多地依这种方法在主要的累加循环结束之后再

11、把进位累加进和值。(2) 反向循环法 这种方法可以减少由循环而产生的负荷,有效地展开内部的累加循环,把循环过程中的一系列加法命令复制下来。这种技术通常可以节省大量的时间,但是程序的逻辑设计会比较复杂。(3) 合并数据拷贝法计算校验和以及读入数据都需要将数据从内存的一个位置转移到另一个位置,这样会占用内存总线的带宽,而内存总线的传输效率是提高校验和计算速度的瓶颈,尤其是对于某些机器(如一些简单的慢速的微型机)来说,这一问题尤为严重。为了解决这个问题,可以把数据读入的过程与校验的过程合二为一,也就是在读入数据的同时计算校验和,这样就可以省去一次数据移动的过程,从而提高校验和的计算速度。4课程设计的

12、分析校验和的计算过程主要分为三个步骤:数据文件的输入,校验和的计算和校验结果的输出。其中,主要的是数据的输入和校验和的计算。1 数据的输入方式输入数据可能是以字符形式存储的,而校验和的计算则要采用数据形式,所以在从文件读取数据时,都要进行字符到数据的相互转换。1)将读入的ASCII码转化为相应的整型变量。if(ch=0&=a&ch=A&choxff|lowbyteoxff)lowbyte+=(highbyte8);Highbyte=highbyte&oxff;Highbyte+=(lowbyte8);Lowbyte=lowbyte&0xff;程序开始,初始化 ch,count,sum,chec

13、ksum 从文件读取一个字符 Ch=EOF? Ch= Ch转换为相应的8位数据,count+ Count偶数? Ch低4位送入chr低四位 Ch低4位送入chr高4位得到chr 值 将32位sum折叠到16位 求sum反码并输出 结束 (count/2)%2=1? 得到sum Chr和sum低8位相加 Chr和sum高8位相加 Y Y Y Y N N N N 程序流程图5程序代码#include #include int main(int argc,char *argv) FILE *fp; char ch; unsigned char chr1,chrh; unsigned int coun

14、t=0,checksum=0,chr=0; unsigned long sum=0; if(argc!=2) printf (please input command:jiaoyan 1-file); return 0; if(fp=fopen(argv1,r)=NULL) printf(File cannot be opened!); return 0; printf(output type:data-sum/n); while(1) if(ch=fgetc(fp)!=EOF) count+; if(ch!= ) if(ch=0&ch=a&ch=A&ch=F) ch=ch-A+10; if(

15、count%2=1) chrh=ch4; else chr1=ch&0x0f; chr=chrh|chr1; if(count%4=2) sum+=chr16)checksum=(long(sum16)+long(sum&0x0000ffff);checksum=checksum&0x0000ffff;printf(nChecksum: %x,checksum);fclose(fp);6运行结果与分析(运行结果是否正确,课程设计过程中出现的问题及其解决方案,可扩充的功能及设计等。)开始 命令行输入正确? 创建输入文件流,打开指定输入文件, 32位累加器sum置0 文件结束? 读入下一个字节数据

16、作为高8位 后面还有数据? 读入下一个字节数据作为低8位 将组合好的16位数据加到sum中欧 输出格式提示 退出 关闭文件 取sum的低16位sum&oxffff Sum高16位为0? 将sum高16位数据sum16加到低16位上 对所得数据取反,即为check_sum 输出check_sum 结束 Y 低8位置0N N N Y Y N 7参考文献1谢希仁 编著. 计算机网络 (第5版) .北京:电子工业出版社,20082吴宜功 吴英 编著. 计算机网络课程设计 (第2版). 北京: 机械工业出版社,20123 白涛网络工程实施技术与方案大全电子工业出版社,2008年06月4 乔正洪,葛武滇计

17、算机网络技术与应用清华大学出版社,2008年01月8 收获 通过这次课设我学到了不少从前从未接触过的新知识,经过了一星期的艰苦奋斗,终于把程序的错误改正过来了,但接下来的就是运行,本以为程序没有错了应该就可以顺利的运行,结果却让我纠结了好久,在coodblock的运行环境下根本不出结果,这让我很伤脑筋,捉摸了很久终于还是没弄明白,于是请教了老师,老师很耐心的讲解之后,才发现自己其实问题挺简单的,只是在命令提示符上运行结果,事先得在记事本之类的文件上存一些数据,然后在命令提示符内输入你的coodblock程序的存储地址和函数名还有存数据的文件名,这是最关键的一步,突破了这一步,就没什么难点了,真是山重水复疑无路,柳暗花明又一村,这也正是编程的魅力所在,但是这么坎坷追其原因终究是自己编程编的少,不会融会贯通,所以易这次放寒假我一定要努力,在动手编程上多下功夫,多动手多实践。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1