- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《计算机网络》校验和_文档
目录
1、题目概述 3
1.1 题目: 3
1.2 题目要求 3
2、开发的基础知识 3
2.1 计算校验和 3
2.2 一些编码技术可以提高校验和的计算速度 4
3、设计思路 5
3.1 数据的输入方式 5
3.2 校验和的计算 5
4、程序流程图 7
5、程序源代码 8
6、开发过程 11
7、程序运行情况 11
8、总结 12
8.1林泽涛的心得体会 12
8.2郭建勋的心得体会 12
1、题目概述
1.1 题目:
校验和的计算过程分为三个步骤:数据文件的输入,校验和的计算以及效验结果的输出。
计算校验和应用最为普遍的是端循环进位法:将数据按一定数位进行累加,最高位的进位则循环加入最低位。待教研的数据按16位为一个单位相加,采用端循环进位,最后对所得16位的数据取反码。因为待教研的数据是以字节方式分隔的,所以为了方便,将16位的数据分成高8位和低8位分别处理。该算法的代码如下:
endaroundcarry(int highbyte, int lowbyte)
{
while(highbyte0xff||lowbyte0xff)
{
lowbyte+=(highbyte8);
highbyte=highbyte0xff);
highbyte+=(lowbyte8);
lowbyte=lowbyte0xff);
}
}
1.2 题目要求
课程设计要求:
根据上面介绍的算法,编制程序为给定数据计算校验和。
1)以命令行形式运行:check_sum infile
其中check_sum为程序名,infile为输入数据文件名。
2)输出:数据文件的校验和。
2、开发的基础知识
2.1 计算校验和
有很多数学方法可以用来提高校验和的计算速度,下面我们将就此展开讨论。
2.1.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]
的形式进行计算。
2.1.2 字节顺序的自主性
打破被校验数据中的字节顺序仍可以计算出正确的16位校验和。
例如,我们交换字节组中两字节的顺序,得到
[B,A]+’[D,C]+’……+’[Z,Y] [4]
所得到的得结构与[1]式是相同的(当然结果也是要进行一次反转的)。为什么会是这样呢?我们发现两种顺序获得的进位是相同的,都是从第15位到第0位进位以及从第7位到第8位进位。这也就是说,交换字节位置只是改变高低位字节的排列顺序,但并没有改变它们的内在联系。
因此,无论底层的硬件设置中对字节的接收顺序如何,校验和都可以被准确地校验出来。例如,假设校验和是以主机序(高位字节在前低位字节在后)计算的数据帧,但以网络序(低位字节在前高位字节在后)存放在内存中。每一个16位的字中的字节在传送过程中都交换了顺序,在计算校验和之后仍会先交换位置再存入内存,这样就与接受到的原本以网络序存储的数据帧中的校验和项保持一致了。
2.1.3 并进行计算
某些机器的字处理长度是16位的倍数,这样可以提高它的计算速度。由于加法所具有的结合性,我们没有必要按照顺序对每个字节进行累加。相反,我们可以利用这一特点对它们进行并行累加。
并行地计算校验和只是增加了每次累加的信息长度。例如,在一个323位的机器上,我们可以一次增加4个字节,即[A,B,C,D]+’……。计算结束后再把累加和“折叠”起来,把一个32位的数值变为16位,这样产生的新的进位也要循环累积起来。
此外,在此仍不考虑字节顺序的问题,我们可以用’[D,C,B,A]+’……或[B,A,D,C]+;……这样的顺序来计算校验和,最终再通过交换16位校验和中的字节序来得到正确的值。这些改变顺序的方法都是为了让所有的偶数字节进入一个校验和字节,所有的奇数字节进入一个校验和字节。
2.2
文档评论(0)