第04章计算校验和1_第1页
第04章计算校验和1_第2页
第04章计算校验和1_第3页
第04章计算校验和1_第4页
第04章计算校验和1_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计计算机硬件基算机硬件基础教学础教学中心中心Copyright by NUPT All rights reserved.1Technology of Network Programming网络编程技术网络编程技术网络编程技术网络编程技术2 为保证网络上数据传输的可靠性,在为保证网络上数据传输的可靠性,在IP、ICMP、IGMP、UDP和和TCP等协议中都等协议中都设置了校验和项,实际中使用的校验和算设置了校验和项,实际中使用的校验和算法是法是网际校验和算法网际校验和算法网络编程技术网络编程技术3 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计

2、分析 扩展与提高扩展与提高网络编程技术网络编程技术4 掌握在给定的数据报格式条件下构造数据掌握在给定的数据报格式条件下构造数据报并计算数据报的校验和的方法,加深对报并计算数据报的校验和的方法,加深对网络差错校验技术的理解网络差错校验技术的理解 掌握网际校验和算法原理与软件实现方法掌握网际校验和算法原理与软件实现方法 熟悉计算网际校验和的增量式计算法熟悉计算网际校验和的增量式计算法网络编程技术网络编程技术5 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术6 编写程序,计算自定义格式数据报的网际校

3、验和编写程序,计算自定义格式数据报的网际校验和: 自定义的格式如下:自定义的格式如下: 程序要求以命令行方式运行:程序要求以命令行方式运行: Checksum inputfile outputfile 其中,其中,Checksum是程序名;是程序名;inputfile是输入文件,该是输入文件,该文件包含数据字段的内容;文件包含数据字段的内容;outputfile为输出文件,该为输出文件,该文件保存封装完毕后的数据报文件保存封装完毕后的数据报 报文类型报文类型(8 8位,位,指定为指定为0 xab0 xab)长度长度(8 8位)位)校验和(校验和(1616位)位)数据字段数据字段 网络编程技术网

4、络编程技术7程序运行的参考界面程序运行的参考界面 网络编程技术网络编程技术8程序运行的结果程序运行的结果输入文件的十六进制数,输入文件的十六进制数,报文类型:报文类型:ABAB数据长度:数据长度:08 08 校验和校验和 :C3 61C3 61实际数据:实际数据:61 62 63 64 65 66 67 6861 62 63 64 65 66 67 68输出文件的十六进制数,采用输出文件的十六进制数,采用UltraeditUltraedit查看:查看:0000000h: AB 08 0000000h: AB 08 C3 61C3 61 61 62 63 64 65 66 67 68 61 62

5、 63 64 65 66 67 68计算过程计算过程AB08 0000 6162 6364 6566 6768AB08 0000 6162 6364 6566 6768相加后得到:相加后得到:3C9E3C9E取反后得到:取反后得到:C361C361网络编程技术网络编程技术9 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术10网际校验和算法网际校验和算法 把检验和字段置把检验和字段置0,把所有需要被校验的,把所有需要被校验的数据划分为数据划分为16 位一组的比特序列,然后位一组的比特序列,然后对

6、每对每16位的反码求和,结果取反,便得位的反码求和,结果取反,便得到校验和到校验和 为了验证校验和的正确性,对所有的数为了验证校验和的正确性,对所有的数据求反码和,如果结果全据求反码和,如果结果全1,则表示校验,则表示校验结果正确结果正确 网络编程技术网络编程技术11网际校验和算法特性网际校验和算法特性l交换律和结合律交换律和结合律 l字节顺序独立字节顺序独立l并行计算并行计算l可以提高校验和计算速度的技术可以提高校验和计算速度的技术延迟进位延迟进位 循环展开循环展开 数据读入与校验合二为一数据读入与校验合二为一 增量式更新增量式更新 网络编程技术网络编程技术12 编程训练目的编程训练目的 编

7、程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术13核心程序设计思路及实现核心程序设计思路及实现读入数据文件并构造数据报读入数据文件并构造数据报创建输入流,直接使用创建输入流,直接使用2进制的方式打开输入文件进制的方式打开输入文件构造数据报缓冲区,给数据报赋值构造数据报缓冲区,给数据报赋值 ifstream fInfile; / 创建输入文件流创建输入文件流fInfile.open(argv1, ios:in|ios:binary); /打开指定的输入文件打开指定的输入文件/*定义数据报缓冲区,缓冲区大小为定义数据报缓冲区

8、,缓冲区大小为4+wLen ,其中,其中4为数据报类型字段、长度字段为数据报类型字段、长度字段及校验和字段的长度和,及校验和字段的长度和,wLen为数据字段长度为数据字段长度*/unsigned char * pBuf = new unsigned char4+wLen; pBuf0 = unsigned char(0 xab); / 给数据报类型字段赋值给数据报类型字段赋值pBuf1 = unsigned char(wLen); / 给数据报长度字段赋值给数据报长度字段赋值*(unsigned short *)(pBuf+2) = 0;/ 计算校验和之前,计算校验和之前,校验和字段先置为校验

9、和字段先置为0fInfile.read(pBuf+4, wLen); / 根据输入文件填充数据报的数据字段根据输入文件填充数据报的数据字段fInfile.open(argv1, ios:in|ios:binary); /打开指定的输入文件打开指定的输入文件/ 计算校验和并把结果填入到数据报的校验和字段计算校验和并把结果填入到数据报的校验和字段*(unsigned short *)(pBuf+2) = checksum_calculating(unsigned short *)pBuf, 4+wLen); 网络编程技术网络编程技术14核心程序设计思路及实现(续)核心程序设计思路及实现(续)计算校

10、验和计算校验和延迟进位法延迟进位法算法思想是:算法思想是:将进位累加的过程延迟到整个将进位累加的过程延迟到整个累加循环结束之后进行累加循环结束之后进行,从而提高计算速度,从而提高计算速度实现:在实现:在32位的计算机上,把需要校验的数位的计算机上,把需要校验的数据按据按16位一组进行累加,结果存放在位一组进行累加,结果存放在32位的位的累加器中,这样累加器中,这样溢出位就保存在高溢出位就保存在高16位上位上。全部累加结束后再把全部累加结束后再把32位累加器中高位累加器中高16位累位累加到低加到低16位上,那么低位上,那么低16位值的反码即为最位值的反码即为最终的校验和终的校验和网络编程技术网络

11、编程技术15核心程序设计思路及实现(续)核心程序设计思路及实现(续)unsigned short checksum_calculating(unsigned short *pBuffer, int nSize)unsigned long dwCksum = 0;/ 32位累加和位累加和while(nSize 1) / 以以两字节为单位两字节为单位反复累加反复累加dwCksum += *pBuffer+; /每次加每次加2字节字节nSize -= sizeof(unsigned short);if (nSize) / 如果如果总字节数为奇数总字节数为奇数则加上最后一个字节则加上最后一个字节dwC

12、ksum += *(unsigned char*) pBuffer;/ 将将32位累加和的高位累加和的高16位与低位与低16位第一次相加位第一次相加dwCksum = (dwCksum 16) + (dwCksum & 0 xffff);/ 将上一步可能产生的高将上一步可能产生的高16位位进位进位再次与低再次与低16位累加位累加dwCksum += (dwCksum 16);/ 返回返回16位校验和位校验和return (unsigned short) (dwCksum);网络编程技术网络编程技术16核心程序设计思路及实现(续)核心程序设计思路及实现(续)输出完整数据报输出完整数据报创建输出流

13、,使用创建输出流,使用2进制的方式打开输出文件进制的方式打开输出文件 通过通过write()函数将存储在缓冲区的数据报一次性函数将存储在缓冲区的数据报一次性写入到输出文件写入到输出文件 fstream fOutfile; / 创建输出文件流创建输出文件流/ 以以2进制方式打开输出文件进制方式打开输出文件fOutfile.open(argv2,ios:in|ios:out|ios:binary|ios:trunc);/ 将将pBuf中的数据报写入输出文件中的数据报写入输出文件fOutfile.write(char *)pBuf, 4+wLen); 网络编程技术网络编程技术17 编程训练目的编程训练目的 编程训练要求编程训练要求 相关知识介绍相关知识介绍 程序设计分析程序设计分析 扩展与提高扩展与提高网络编程技术网络编程技术18HC 修改前的头部校验和修改前的头部校验和C 修改前的反码和修改前的反码和HC 修改后的头部校验和修改后的头部校验和C 修改后的反码和修改后的反码和m 修改前的修改前的16位数值位数值m 修改

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论