《2022年2022年计算机网络课设,计算校验和 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机网络课设,计算校验和 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、沈阳理工大学课程设计专用纸Noi 沈阳理工大学目录摘 要1 课程设计目的 . 1 2 课程设计要求 . 1 3 相关知识 . 1 4 课程设计分析 . 3 5 程序代码 . 4 6 运行结果与分析. 7 7 参考文献 . 10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No1 沈阳理工大学1 课程设计目的校验和是用于验证数据传输正确性的一种方法。在网络体系结构的各层协议中,很多网络协议都利用校验
2、和来实现差错控制功能。本课程设计主要目的是通过完成一个简单例子,了解网络协议中的校验和计算过程。2 课程设计要求根据校验和的算法,编写程序为给定数据计算校验和1)以命令行形式运行: Checksum input_file 其中 Checksum为程序名, input_file为输入数据文件名2) 输出内容:数据文件的校验和3相关知识1 校验和的概念网络上的数据最终都是通过物理传输线路进行传输的,如果高层没有采用差错控制,那么物理层传输的线路可能有差错。为了保证传输数据的正确性,在物理层的基础上设计了数据链路层。设计数据链路层的主要目的就是在原始的,有差错的物理传输线路的基础上,采用差错检测,差
3、错控制和流量控制等方法。目前,进行差错检测和控制的主要方法是:发送方在需要发送的数据后面增加一定的冗余信息,这些冗余信息通常是通过对发送的数据进行某种算法计算而得到的。接收方对接收数据进行同样的计算,然后与数据后面附加的冗余信息进行比较,如果比较结果不同就说明在传输中出现了差错,并要求发送方重新传送该数据,以此达到确保数据准确性的目的。在普遍使用的网络协议中,通常都设置了校验和字段以保存这些冗余信息,计算这些校验和的算法,就是将被校验的数据按16 位进行累加,然后取反码,如果数据字节长度为奇数,则数据尾部补一个字节的0 以凑成偶数。关于计算校验和算法的详细信息请参考RFC1071. 2 计算校
4、验和有很多数学方法可以提高校验和的速度。1)交换性和结合性因为校验和主要考虑被校验数据中所包含字节的数量是奇数还是偶数,所以校验和的计算可以以任意顺序进行,甚至可以把数据进行分组后再计算。例如,用A,B,C,D ,, ,Y,Z 分别表示一系列八位组,用a,b这样的字节来表示a*256+b 的整数,那么 16 位校验和就可以通过以下形式给出:A,B+ C,D+ ,+ Y,Z 1 A,B+ C,D+ ,+ Z,0 2 在这里 + 代表 1 补数加法,即将前面的16 位校验和和按位取反。1 可以以A,B+ C,D+ ,+ J,0+ (0,K+ ,+ Y,Z) 3 的形式进行计算。名师资料总结 - -
5、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No2 沈阳理工大学2)字节顺序的自主性打破被校验数据中的字节顺序仍可以计算正确的16 位校验和。例如,我们交换字节组中两字节的顺序,得到B,A+ D,C+ ,+ Z,Y 所得到的结构与1 式是相同的(当然结果也是要进行一次反转的)。为什么会是这样呢?我们发现两种顺序获得的进位是相同的,都是从第15 位到第 0 位进位以及从第7 位到第 8 位进位。这也就是说,交换字节位置
6、只是改变高低位字节的排列顺序但并没有改变他们的内在联系。因此无论底层的硬件设置中对字节的接收顺序如何,校 验 和 都 可 以 被 准 确 地 校 验 出 来 。例如,假设校验和是以主机序(高位字节在前低位字节在后)计算的数据帧,但以网络序(低位字节在前高位字节在后)存放在内存中。每一个16 位的字中的字节在传送过程中都交换了顺序,在计算校验和之后仍会先交换位置再存入内存,这样就与接受到的原本以网络序存储的数据帧中的校验和项保持一致了。3)并行计算某些机器的字处理长度是16 位的倍数,这样可以提高他的计算速度。由于加法所具有的结合性, 我们没有必要按照顺序对每个字节进行累加。相反, 我们可以利用
7、这一特点对他们进行并行累加。并行地计算校验和只是增加了每次累加信息的长度,例如,在一个32 位的机器上,我们可以一次增加 4 个字节,即【A, B,C,D】+.。计算结束后再把累加和“折叠”起来,把一个32 位的数值变成 16 位,这样产生的新的进位也要循环累加起来。此外, 在此仍不需要考虑字节顺序问题,通过交换 16 位校验和中的字节序来得到正确的值。这些改变顺序的方法都是为了所有的偶数字节进入一个校验和字节,所有的奇数字节进入一个校验和字节。3 一些编码技术可以提高校验和的计算速度1)延迟进位法这种方法在主要的累加循环结束之后再把进位累加进和值。其实现方式就是用32 位的累加器获得16 位
8、校验和,这样溢出就产生在高16 位上。这种方法避免了累加器中进位传感器机构的设置,但是它要求的容量是原来的累加器容量的两倍,因此它更多地依赖于硬件条件。2)反向循环法这种方法可以减少由循环而产生的负荷,有效地展开内部的累加循环,把循环过程中的一系列加法命令复制下来。这种技术通常可以节省大量的时间,但是程序的逻辑设计会比较复杂。3)合并数据拷贝法计算校验和以及读入数据都需要将数据从内存的一个位置转移到另一个位置,这样会占用内存总线的带宽,而内存总线的传输效率是提高校验和计算速度的瓶颈,尤其是对于某些机器(如一些简单的慢速的微型机)来说,这一问题尤为严重。为了解决这个问题,可以把数据读入的过程与校
9、验的过程合二为一,也就是在读入数据的同时计算校验和,这样就可以省去一次数据移动的过程,从而提高校验和的计算速度。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No3 沈阳理工大学4课程设计分析校验和的计算过程主要分为三个步骤:数据文件的输入、校验和的计算和校验结果的输出。其中,主要的是输入和校验和的计算。数据输入的方式输入数据可能是由字符型式存储的,而校验和的计算则要采取数据形式,所以在文件读取数据
10、时,都要进行字符到数据的相互转换。将读入的ASCII 码转化为相应的整型变量。if(ch= 0 &ch= a &ch= A &ch0 xff|lowbyte0 xff)/高 8 位或低 8位中的任何一方产生溢出(进位) Lowbyte+=(highbyte8);/低字节加上高字节超过8 位的进位Highbyte=highbyte&0 xff:/清除高字节进位highbyte+=(lowbyte8);/ 高字节加上来自低字节的进位lowbyte=lowbyte&0 xff;/清除低字节的进位 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
11、 - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No4 沈阳理工大学程序流程图是否图 4-1 图 4-2 5程序代码/*发送端 */#include#include#include#include/打开文件操作using std:string; using std:cin; using std:cout; using std:endl; using std:fstream; int sum(int &ans, int& p, string str);/声明计算校验和函数void main() cout
12、请输入数据 in; int ans = 0, p = 0; sum(ans, p, in); ans = 65535 - ans; /计算校验和,取反码开始请输入数据计算校验和,取反码将数据存入文件结束开始将文件中数据取出数据有误,丢弃输出数据检验校验和是否为零结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No5 沈阳理工大学cout 校验和为 ans endl; /将数据输出到文件fstrea
13、m file(g:/file.txt , std:ios:binary|std:ios:out); if (!file) cout 打开文件失败 endl; return; file in endlans; file.close(); cout 数据已存入文件中! endl; int sum(int &ans, int& p, string str)/定义计算校验和函数 int deal;/记录单次计算结果int t1, t2; if (p = str.size() return ans; t1 = str+p; t1 = t1 65536) ans -= 65536; return sum(
14、ans, p, str); /*接收端 */#include#include#include#include名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No6 沈阳理工大学using std:string; using std:cin; using std:cout; using std:endl; using std:fstream; int cal(int &ans, int& p, stri
15、ng str); void main() string in; int check; fstream file(g:/file.txt , std:ios:binary | std:ios:in); if (!file) cout 打开文件失败 incheck; file.close(); int ans = 0, p = 0; cal(ans,p,in); ans += check; ans = 65535 - ans; /校验和为 0,则没有错误;反之,则有if (ans) cout 数据有误,丢弃! endl; return; else cout 数据为: endl; cout in e
16、ndl; int cal(int &ans, int& p, string str) int deal; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No7 沈阳理工大学int temp1, temp2; if (p = str.size()/如果该次递归没有字符 return ans; temp1 = str+p; temp1 = temp1 65536)/如果发生进位,则溢位ans -= 65
17、536; return cal(ans, p, str); 6运行结果与分析发送端:输入数据图 6-1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No8 沈阳理工大学将输入的数据存入文件图 6-2 图 6-3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - -
18、 - - - - - - - 沈阳理工大学课程设计专用纸No9 沈阳理工大学接收端:输出数据图 6-4 图 6-5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 沈阳理工大学课程设计专用纸No10 沈阳理工大学数据丢失图 6-6 7参考文献1 谢希仁编著 . 计算机网络(第 5 版).北京:电子工业出版社,20082 吴宜功吴英编著. 计算机网络课程设计(第 2 版) . 北京 : 机械工业出版社,2012 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -