ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:134.82KB ,
资源ID:5350568      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5350568.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《计算机网络》计算校验和课程设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、计算机网络计算校验和课程设计目 录一.课程设计的目的和意义 11.1课程设计的目的 12.2课程设计的意义 1二.程设计的内容和要求 22.1课程设计的内容 22.2课程设计的要求 2三、课程设计的相关技术 23.1 计算校验和 23.1.1 交换性与结合性 23.1.2 字节顺序的自主性 33.1.3 并进行计算 33.2 一些编码技术可以提高校验和的计算速度 43.2.1延迟进位法 43.2.2反向循环法 43.2.3合并数据拷贝法 4四.课程设计过程 54.1 数据的输入方式 54.2 校验和的计算 54.3 程序流程图 7五.相关扩展 85.1 主要的实现过程 85.2 程序流程图 9

2、六.编程实现 106.1 程序源代码 10七.程序的调试及分析 13八.课设计小结 14九.参考文献 15一.课程设计的目的和意义1.1课程设计的目的网络上的信号最终都是通过物理传输线路进行传输的,如果高层没有采用差错控制,那么物理层传输的数据信号是可能有差错的。为了保证数据的正确性,在物理层的基础上设计了数据链路层。设计数据链路层的主要作用就是在原始的、有差错的物理传输线路的基础上,采用差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以向网络层提供高质量的服务。本课程设计主要通过一个简单例子使学生了解网络协议中校验和的计算过程,以及设置校验和的作用。目前,

3、进行差错检测和差错控制的主要方法是:在需要传输ude数据分组后面加上一定的冗余信息,这样的冗余信息通常都是通过对所发送的数据应用某种算法进行计算而得到的。数据的接收方在接收到数据后进行同样的计算再与收到的冗余信息进行比较,如果结果不同就说明出现了差错,此时可以要求发送方重传该组数据,以此达到保证数据准确性的目的。在普遍使用的网络协议中都设置了校验和项以保存这些冗余信息,例如Ipv4、ICMPv4、IGMPV4、UDP和TCP等等。2.2课程设计的意义计算机网络课程设计是计算机网络课程的一个延续,是计算机网络工程专业的一门专业实践课,其主要内容是使用C+实现理论课讲授的网络技术,如校验和法的验证

4、等。课程设计所涉及的工作过程主要包括熟悉网络知识的原理,逻辑设计,使用C+编码实现,调试和分析等。通过本课程设计,使学生全面了解和掌握计算机网络课程上讲述的相关原理,并提高使用C+解决相关问题的能力。该课程设计能够提高学生网络工程的应用能力,可以提高分析问题和解决问题的能力和团队协作的能力。二.程设计的内容和要求2.1课程设计的内容计算校验和的算法称为网际校验和算法,简单来说,就是把被校验的数据按16位进行累加,然后取反码。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。关于计算校验和算法更详细的信息请参考RFC 1071。2.2课程设计的要求根据前面介绍的算法,编制程序为给定数据

5、计算校验和。(1)以命令行形式运行:check_sum infile其中check_sum为程序名,infile为输入数据文件名。(2)输出:数据文件的校验和。三、课程设计的相关技术3.1 计算校验和有很多数学方法可以用来提高校验和的计算速度,下面我们将就此展开讨论。3.1.1 交换性与结合性因为校验和主要考虑被校验数据中所包含字节数量的是奇数还是偶数,所以校验和的计算可以以任意顺序进行,甚至可以把数据进行分组后再计算。例如,用A、B、C、D,Y,Z分别表示一系列八位组,用a,b这样形式的字节来表示a*256+b的整数,那么16位校验和就可以通过以下形式给出:A,B+C,D+Y,Z 1A,B+

6、C,D+Z,0 2在这里,+代表1补数加法,即将前面的16位校验和按位取反。1可以以(A,B+C,D+J,0+(0,K+Y,Z) 3的形式进行计算。3.1.2 字节顺序的自主性打破被校验数据中的字节顺序仍可以计算出正确的16位校验和。例如,我们交换字节组中两字节的顺序,得到B,A+D,C+Z,Y 4所得到的得结构与1式是相同的(当然结果也是要进行一次反转的)。为什么会是这样呢?我们发现两种顺序获得的进位是相同的,都是从第15位到第0位进位以及从第7位到第8位进位。这也就是说,交换字节位置只是改变高低位字节的排列顺序,但并没有改变它们的内在联系。因此,无论底层的硬件设置中对字节的接收顺序如何,校

7、验和都可以被准确地校验出来。例如,假设校验和是以主机序(高位字节在前低位字节在后)计算的数据帧,但以网络序(低位字节在前高位字节在后)存放在内存中。每一个16位的字中的字节在传送过程中都交换了顺序,在计算校验和之后仍会先交换位置再存入内存,这样就与接受到的原本以网络序存储的数据帧中的校验和项保持一致了。3.1.3 并进行计算某些机器的字处理长度是16位的倍数,这样可以提高它的计算速度。由于加法所具有的结合性,我们没有必要按照顺序对每个字节进行累加。相反,我们可以利用这一特点对它们进行并行累加。并行地计算校验和只是增加了每次累加的信息长度。例如,在一个323位的机器上,我们可以一次增加4个字节,

8、即A,B,C,D+。计算结束后再把累加和“折叠”起来,把一个32位的数值变为16位,这样产生的新的进位也要循环累积起来。此外,在此仍不考虑字节顺序的问题,我们可以用D,C,B,A+或B,A,D,C+;这样的顺序来计算校验和,最终再通过交换16位校验和中的字节序来得到正确的值。这些改变顺序的方法都是为了让所有的偶数字节进入一个校验和字节,所有的奇数字节进入一个校验和字节。3.2 一些编码技术可以提高校验和的计算速度3.2.1延迟进位法这种方法在主要的累加循环结束之后再把进位累加进和值。其实现方式就是用32位的累加器获得16位校验和,这样溢出就产生在高16位上。这种方法避免了累加器中进位传感器机构

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

10、省去一次数据移动的过程,从而提高校验和的计算速度。四.课程设计过程校验和的计算过程主要分为三个步骤:数据文件的输入,校验和的计算和校验结果的输出。其中,主要的是数据的输入和校验和的计算过程。4.1 数据的输入方式输入数据可能是以字符形式存储的,而校验和的计算则要采用数据形式,所以在从文件读取数据时,都要进行字符到数据的相互转换。1) 将读入的ASCII码转化为相应的整型变量。if(ch=0&=a&ch=A&ch0xff|lowbyte0xff)0 /高8位或低8位中的任何一方产生了溢出(进位) lowbyte+=(highbyte8); /低字节加上高字节超过8位的进位 highbyte=hi

11、ghbutr&0xff; /清除高字节的进位 highbyte+=(lowbyte8); /高字节加上来自低字节的进位 lowbyte=lowbyte&0xff; /清除低字节的进位 4.3 程序流程图图4-1给出了一个流程的参考方案。图4-1 程序流程图五.相关扩展前面我们提到,校验和还有其他一些计算方法,下面我们就来简要介绍以下利用延迟进位法进行计算的方法。延迟进位法的算法描述:将进位累加的过程延迟到整个累加循环结束之后进行,这样可以提高计算速度。5.1 主要的实现过程while(!infile.eof() /判断文件是否结束,若否则对被校验的16位数据进行累加 int h, 1; /分别

12、表示16位数据的高8位和低8位 infilehexh; /从文件中读入一个16进制表示的数据,作为高8位 if(infile.eof() l=0; /若后面没有其他数据,将0作为低8位 else infilehex1; /若后面还有数据,读入下一个作为低8位 sum+=(h*256+l); /将组合好的16位数据累加到sum中infile.close(); /关闭文件check_sum=short(sum&0xffff)+(sum16); /将32位累加和转换为16位数据/若累加过程中有向高16位的进位,则要将进位部分加到低16位上check_sum=-check_sum; /对累加和取反码5

13、.2 程序流程图图4-2给出了一个相关扩展的流程图。图4-2 相关扩展的流程图六.编程实现6.1 程序源代码/在E盘新建一个文本文档,命名为1.txt(这一步非常重要)#include#includevoid main(int argc,char *argv)/ FILE *fp; char ch; unsigned char chrl,chrh; unsigned int count=0,checksum=0,chr=0; unsigned long int sum=0; if(fp=fopen(E:1.txt,r)=NULL) printf(nn File cant be opened);

14、 exit(1); printf(nnthe type of output:data-sumnn); while(1) if(ch=fgetc(fp)!=EOF) count+; if(ch!= ) if(count%12=0) printf(n); if(ch=0&ch=a&ch=A&ch=F) ch=ch-A+10; if(count%2=1) chrh=ch4; else chrl=ch&0x0f; chr=chrh|chrl; if(count%4=2) sum+=chr16) checksum=(long(sum16)+long(sum&0x0000ffff); checksum=c

15、hecksum&0x0000ffff; printf(nnsum:%1x-checksum:%x,sum,checksum); printf(nnsource:argc=%d,targv=%sn,argc,argv1); fclose(fp);七.程序的调试及分析程序运行结果如下:图7-1运行结果示意图在E盘下建立的1.txt文档的内容如下:图7-2 1.txt遇到的问题:在调试程序的过程中,我遇到了不少的问题,比如在E盘没有新建一个文本文档时,这时系统会提示“内存不能为read”,而在E盘新建了一个文件夹后,就会显示上图所示的结果。由于该程序比较短,所以实现的结果就比较简单。后来还发现计算c

16、hecksum时出了一点点小错误,但是经过改正得到了解决。解决办法:通过向同学询问请教,自己查阅相关的资料以及上网XX,解决了该问题。八.课设计小结本次计算机网络课程设计维持了一周的时间,通过这次的课程设计,使我对网络协议中校验和的设置与计算有了很好的理解与掌握,拓宽了我网络方面的知识,同时也加强了我程序设计的能力,不得不说这次的课程设计让我收获很大。本次课程设计主要是完成校验和的计算,由于之前对这方面的知识了解不是很多,所以在课设刚开始的我们都不知道从何入手,随后我结合老师发给我们的资料对校验和做了进一步的了解,才对校验和的知识有了一定的掌握,并且知道了设置校验和的作用。计算校验和的算法其实

17、就是把被校验的数据按16位进行累加,然后取反码。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。有了思路,程序的设计就变得容易许多,加上一些关键代码的提示,很快我就把整个程序的基本代码都完成了。当然在调试的过程中还是出现了一点问题,不过在老师和同学的耐心帮助下最后我还是把程序给调试出来了。一周的课程设计使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助过我的同学。同时,让我知道课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次课程设计使我明白了自己原来知识还比较欠缺。自己要

18、学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次课程设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。 在整个设计中我懂得了许多东西,也培养了我独立学习工作的能力,树立了对自己学习工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的并不是最好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。九.参考文献1 谢希仁计算机网络(第5版)电子工业出版社,2008年01月2 叶树华,高志红网络编程实用教程人民邮电出版社,2006年10月3 白涛网络工程实施技术与方案大全电子工业出版社,2008年06月4 乔正洪,葛武滇计算机网络技术与应用清华大学出版社,2008年01月5 张国清网络设备配置与调试项目实训电子工业出版社,2008年05月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1