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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机网络课程设计数据帧的封装.docx

1、计算机网络课程设计数据帧的封装东华理工大学课程设报告题 目 以太网帧的封装设计 课 程 名 称 计算机网络 院(系、部、中心) 信息工程学院 专 业 通信工程 班 级 学 生 姓 名 学 号 指 导 教 师 1设计目的和任务 211 课程设计目的 212 课程设计任务 22设计原理 221 802.3标准帧结构 222 CRC的基本实现 33设计实现 431 设计思路 43.1.1 填充帧头部字段 43.1.2填充数据字段 43.1.3 计算填充CRC 532 流程图 63.2.1 程序流程图 63.2.2 CRC计算流程图 74程序源码 841 数据输入代码 842 帧封装代码 85运行结果

2、 116总结体会 127参考文献 121.设计目的和任务1.1课程设计目的(1)使学生掌握网络通信协议的基本工作原理;(2)培养学生基本掌握网络编程的基本思路和方法;(3)能提高学生对所学计算机网络理论知识的理解能力;(4)能提高学生对所学知识的实际应用能力和创新能力;(5)提高学生的科技论文写作能力。1.2课程设计任务根据IEEE802.3格式的以太网帧格式,编写程序将原始数据封装成一个或多个帧,并将这些帧的各个字段值写入输出文件。原始数据从输入文件中获取,默认为二进制数据文件。太网帧中填写数据容,校验字段通过CRC校验获得,数据字段的最大长度设置为100字节实现封装。 2.设计原理 2.1

3、 802.3标准帧结构以太网Ethernet帧格式:前序(P)目的地址(SD)源地址(SA)长度数据FCS8 B6B6B2B461500B4B1. 前序字段前序字段由7个字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。2.帧起始定界符字段它可以被看作前序字段的延续。实际上,该字段的组成方式继续使用前序字段中的格式,这个一个字节的字段的前6个比特位置由交替出现的1和0构成。该字段的最后两个比特位置是11,这两位中断了同步模式并提醒接收后面跟随的是帧数据。3.目的地址字段目的地址字段确定帧的接收者。6个字节的源地址和目的地址字段是局域网中的所有工

4、作站必须使用同样的地址结构。目前,几乎所有的802.3网络使用6字节寻址。4.源地址字段源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。当使用六个字节的源地址字段时,前三个字节表示由IEEE分配给厂商的地址,将烧录在每一块网络接口卡的ROM中。而制造商通常为其每一网络接口卡分配后字节。5.长度字段用于IEEE802.3的两字节长度字段定义了数据字段包含的字节数。从前序 到FCS字段的帧长度最小必须是64字节。基于最小帧长为64字节和使用六字节地址字段的要求,意味着每个数据字段的最小长度为46字节。如果传输数据少于46个字节,应将数据字段填充至46字节。不过,填充字符

5、的个数不包括在长度字段值中,数据字段的最大长度为1500字节。6.数据字段数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段:如果填入该该字段的信息少于46字节,该字段的其余部分也必须进行填充零。数据字段的最大长度为1500字节。7. 校验序列字段帧校验序列字段提供了一种错误检测机制,每一个发送器均计算一个包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。发送器于是将计算出的CRC填入4字节的FCS字段。2.2 CRC的基本实现循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在

6、通信领域广泛地用于实现差错控制。CRC校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。利用CRC进行检错的过程可简单描述如下:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息的后边,构成一个新的二进制码序列(共k+r位),然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。循环冗余校验码的特点:(1)CRC校验码可检测出所有单个错误。(2)CRC校验码可检测出所有奇数位错误。(3)CRC校验码可检测出所有双位的错误(4)CRC校验码可检测出所

7、有小于、等于校验位长度的突发错误。(5)CRC校验码可以的概率检测出长度为(K+1)位的突发错误3.设计实现3.1设计思路3.1.1 填充帧头部字段在这一部分需要向输出文件写入前导码、帧前定界符、目的地址、源地址和长度字段。写入前四个部分十分简单,而写入长度字段时需要计算输入文件的长度。所以计算输入文件长度的方法如下所示:int length=0;infile.seekg(0,ios:end);/将读指针移到文件末尾。/*计算指针偏移量,即为输入文件的长度*/length=infile.tellg();/*创建字符指针并根据文件长度初始化*/unsigned char* data=new un

8、signed charlength; infile.seekg(0,ios:beg);/将读指针移到文件开始。/*将文件数据读入到字符指针data中*/infile.read(data,length); file.put(char(length8);/*将文件长度值按照逆序写入到输出文件的长度字段中*/file.put(char(length&0xff); /*将data容写入到输出文件中*/file.write(data,length);这种方法采用的是使用文件流相关函数的办法,简单明了,可以先获得文件数据长度,再申请相同大小的空间,不会造成空间上的浪费。3.1.2 填充数据字段在数据字段中

9、,数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将数据字段填充至46B。填充字符是任意的,不计入长度字段值中。在程序中是用一下方法实现的:/如果输入文件长度不足46B,则用补足46Bif(length46) for(int j=length;j46;j+) file.put(char(0x00); 3.1.3计算填充CRC 帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。本程序中实现的是CRC-8校验算法,方法如下所示:file.put(char(0x00);/将数据字段后添加个 file.seekg(8,ios:beg);/将读指针指向目的地址字段,从此处开始

10、CRC计算 unsigned char ch;/ch用来保存读入的字符。 unsigned char crc=char(0x00);/余数初始值为。while(1)/进行CRC计算 file.get(ch);/*判断是否到了文件结尾,如果是,则退出循环*/ if(ch=0xff) break;/*对入读入的字符的位分别处理*/ for(i=0;i8;i+) /*当前余数最高位为,需要进行除法运算*/ if(0x80=(crc&(0x80) crc=(crc7); /*进行除法运算,即与除数的低位相异或*/ crc=crc(0x07); /*当前余数的最高位为,不需要进行除法运算*/ else

11、crc=(crc7); /*读到的字符左移位,使数据下一位作为输入位*/ ch=ch1; 3.2程序流程图3.2.1程序流程图 3.2.2 CRC计算流程图4.程序源代码4.1数据输入代码#include#includeusing namespace std;int main() ofstream outfile; outfile.open(E:kcsjtest2in.txt,ios:binary|ios:trunc); unsigned int ch; cout请输入要进行封装的数据,数字“0”代表输入结束ch; while(ch != 0) outfile.write(char*)(&ch

12、),sizeof(char); cinch; outfile.close(); return 0;4.2帧封装的代码#include#includevoid main (int argc,char* argv) fstream file;/创建文件流 /打开指定输出文件,读写方式为以二进制方式可读可写,如文件存在则清除其容 file.open(outcrc.txt,ios:in|ios:out|ios:binary|ios:trunc); /写入7B前导码 for(int i=0;i7;i+) file.put(char(0xaa); /写入1B帧前界定符 file.put(char(0xab

13、); /获得当前文件指定指针位置,计算CRC时从这里开始 long pCrcs=file.tellp(); char /写入6B目的地址 dst_addr6=char(0x00),char(0x00),char(0xe4),char(0x86),char(0x3a), char(0xdc); file.write(dst_addr,sizeof(dst_addr); char /写入6B源地址 src_addr6=char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6), char(0x65); file.write(src_addr,siz

14、eof(src_addr); ifstream infile;/创建输入文件流 infile.open(in.txt,ios:binary); infile.seekg(0,ios:end);/将文件读指针移到末尾 short length=(short)infile.tellg();/获得位置偏移量,即为输入文件长度 file.put(char(length/256);/将该长度写入数据长度字段(2B) file.put(char(length%256); char* data=new charlength; infile.seekg(0,ios:beg); infile.read(data

15、,length);/从输入文件中读出所有数据至data中 file.write(data,length);/将data中数据写入输出文件 infile.close();/关闭输入文件 delete data;/回收data /数据字段不足46B的部分用0填充 if(length46) for(int i=0;i0;i=1) if(crc&0x80) crc=1; if(temp&i) crc=0x01;/将输入数据相应位的值递补到余数末位 crc=0x07;/进行除法运算(即减去除数的低8位:00000111) else crc=1; if(temp&i) crc=0x01;/将输入数据相应位

16、的值递补到余数末位 file.seekp(pCrc,ios:beg); length=sizeof(crc); switch(length) /若CRC不足4B,将CRC补位至4B case 1: file.put(char(0x00); file.put(char(0x00); file.put(char(0x00); file.put(crc); break; case 2: file.put(char(0x00); file.put(char(0x00); file.put(crc); break; case 3: file.put(char(0x00); file.put(crc);

17、break; cout帧文件outcrc.txt封装完成endl; file.close(); /关闭文件5.运行结果(1)输入数据和帧封装:(2)outcrc.txt文件中的容:6.总结与体会本次课程设计重点学习了帧封装。在查阅了很多帧的封装的知识后,对帧及其封装的方法有了一定程度的了解和掌握。在对帧的学习后,有了很大的收获,并且使帧的封装得以实现。在设计中实现了帧的封装,主要是将帧的七个部分-前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,按顺序封装的,最后形成一个完整的帧结构。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。为了正确的实现这些函数,我查阅了很多相关的资料,从中获得了大量的有用的信息,收获也颇丰富。近一周的课程设计中,我的动手能力得到了很大的提高,而且将这学期所学的网络的知识和以前所学的编程的知识充分的联系起来,对这门课的认识又提高了一层。除此之外,在做课程设计的时候也遇到了很多的问题,最后在同学的帮助下正确的解决了。从最开始的遇到问题到最后的正确解决问题,我懂得了正确出来问题的方法,也知道了自己的不足之处,收获颇多。7.参考文献1化君 计算机网络与通信 M.高等教育,20092吴功宜 计算机网络课程设计 M.机械工业,20053陆魁军 计算机网络基础实践教程 M.清华大学 2005

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

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