1、 1 设计报告 课 程 计算机网络 设计名称 帧封装 专业班级 同组人姓名 同组人学号 实验日期 2011-6-9 指导教师 成 绩 2011 年 6 月 9 日 2 一、设计目的和要求一、设计目的和要求 1 1、实验目的、实验目的 帧是在数据链路层数据进行传输与交换的基本单位。 构造帧对于理解网 络协议的概念、协议执行过程以及网络问题处理的一般方法具有重要的意 义。本次课程设计的目的是应用数据链路层与介质访问控制层的知识,根 据数据链路层的基本原理,通过构造一个具体的 Ethernet 帧,从而深入理 解网络协议的基本概念与网络问题处理的一般方法。 2 2、实验要求、实验要求 本程序的功能是
2、进行帧封装。 以命令行形式运行:framer inputfile outputfile 其中 framer 为程 序名;inputfile 为输入文件;outputfile 为输出文件;成功封装后显示 “帧文件 outputfile 封装完成”。 二、设计说明二、设计说明(包括设计分析,系统运行环境,设计中的重点和难点, 输入和输出条件等) 程序共分三个部分:填充帧头部字段,填充数据字段,计算 CRC 校验码 并填充。 1. 1. 填充帧头部字段填充帧头部字段 在这一部分需要向输出文件写入前导码、帧前定界符、目的地址、源地 址和长度字段。写入前四个部分十分简单,而写入长度字段时需要计算输 入文
3、件的长度。所以计算输入文件长度的方法如下所示: int length=0; infile.seekg(0,ios:end);/将读指针移到文件末尾。 length=infile.tellg();/计算指针偏移量,即为输入文件的长度。 unsigned char* data=new unsigned charlength;/创建字符指针并根据文件长 度初始化。 infile.seekg(0,ios:beg);/将读指针移到文件开始。 infile.read(data,length);/将文件数据读入到字符指针 data 中。 file.put(char(length8); file.put(ch
4、ar(length/将文件长度值按照逆序写入到输出文件的长度 字段中。 file.write(data,length);/将 data 内容写入到输出文件中。 这种方法采用的是使用文件流相关函数的办法,简单明了,可以先获 得文件数据长度,再申请相同大小的空间,不会造成空间上的浪费。 3 2. 2. 填充数据字段填充数据字段 在数据字段中, 数据字段的最小长度为46B。 如果帧的LLC数据少于46B, 则应将数据字段填充至 46B。填充字符是任意的,不计入长度字段值中。 在程序中是用一下方法实现的: /如果输入文件长度不足 B,则用补足 B if(length7);/将输入数据相应位的值递补到余
5、数末位。 ch=ch8); file.put(char(length/将文件长度值按照逆序写入到输出文 件的长度字段中。 file.write(data,length);/将 data 内容写入到输出文件中。 /如果输入文件长度不足 B,则用补足 B。 if(length7);/将输入数据相应位的值递补到余数末位。 ch=ch1;/读到的字符左移位,使数据下一位作为输入位。 file.clear(); file.seekp(-1,ios:end);/将写指针移到输出文件的最后。 file.put(crc);/写入 crc 码。 file.close(); infile.close();/关闭输
6、入文件和输出文件。 coutendl“数据帧文件“argv2“ 封装完成“endl; 五、实验数据、结果分析五、实验数据、结果分析 运行结果运行结果 运行结果如下所示: 9 执行 framer.exe 文件的结果如下所示: 六、总结六、总结 在此次的课程设计中, 我做的题目是帧封装。 在最开始两天收集资料的 过程中,我查阅了很多帧的封装的知识,对帧及其封装的方法有了一定程 度的了解和掌握。从最开始对帧的一个模糊的印象到对帧的结构的七个部 分的完全掌握,有了很大的收获,并且使帧的封装得以实现。 本次的课程设计为了实现帧的封装, 主要是将帧的七个部分-前导码、 帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,一个 一个按顺序封装的,最后使得一个帧的封装得以完成。同时,在编写程序 的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的 运行出来。