版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程设计题目: 模拟以太网帧封装专 业:信息工程班 级:1122301姓 名:学 号:指导教师: 2013年 12 月20日目 录1设计任务和目的211 课程设计任务212 课程设计目的22设计原理221 802.3标准帧结构222 CRC的基本实现33设计实现431 设计思路43.1.1 填充帧头部字段43.1.2填充数据字段43.1.3 计算填充CRC432 流程图53.2.1 程序流程图63.2.2 CRC计算流程图74程序源码85运行结果106总结体会111.设计任务和目的1.1课程设计任务根据给出的原始数据,组装一个IEEE802.3格式的帧。默认的输入文件为二进制原始数
2、据。封装得到的帧输出到二进制数据文件中。1.2课程设计目的(1)使学生掌握网络通信协议的基本工作原理;(2)培养学生基本掌握网络编程的基本思路和方法;(3)能提高学生对所学计算机网络理论知识的理解能力;(4)能提高学生对所学知识的实际应用能力和创新能力;(5)提高学生的科技论文写作能力。 2.设计原理 2.1 802.3标准帧结构以太网Ethernet帧格式:前序(P)目的地址(SD)源地址(SA)长度数据FCS8 B6B6B2B461500B4B 1. 前序字段前序字段由7个字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。2.帧起
3、始定界符字段它可以被看作前序字段的延续。实际上,该字段的组成方式继续使用前序字段中的格式,这个一个字节的字段的前6个比特位置由交替出现的1和0构成。该字段的最后两个比特位置是11,这两位中断了同步模式并提醒接收后面跟随的是帧数据。3.目的地址字段目的地址字段确定帧的接收者。6个字节的源地址和目的地址字段是局域网中的所有工作站必须使用同样的地址结构。4.源地址字段源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。5.长度字段用于IEEE802.3的两字节长度字段定义了数据字段包含的字节数。从前序 到FCS字段的帧长度最小必须是64字节。基于最小帧长为64字节和使用六字节
4、地址字段的要求,意味着每个数据字段的最小长度为46字节。如果传输数据少于46个字节,应将数据字段填充至46字节。不过,填充字符的个数不包括在长度字段值中,数据字段的最大长度为1500字节。6.数据字段数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段:如果填入该该字段的信息少于46字节,该字段的其余部分也必须进行填充零。数据字段的最大长度为1500字节。7. 校验序列字段将计算出的CRC填入32位的FCS校验字段。帧校验序列字段提供了一种错误检测机制,包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。2.2 CRC的基本实现
5、利用CRC进行检错的过程可简单描述如下:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息的后边,构成一个新的二进制码序列(共k+r位),然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。3.设计实现3.1设计思路3.1.1 填充帧头部字段在这一部分需要向输出文件写入前导码、帧前定界符、目的地址、源地址和长度字段。写入前四个部分相对简单,而写入长度字段时需要计算输入文件的长度。所以计算输入文件长度的方法如下:int length=0;infile.seekg
6、(0,ios:end);/将读指针移到文件末尾。/计算指针偏移量,即为输入文件的长度length=infile.tellg();/创建字符指针并根据文件长度初始化unsigned char* data=new unsigned charlength; infile.seekg(0,ios:beg);/将读指针移到文件开始。/将文件数据读入到字符指针data中infile.read(data,length); /将data内容写入到输出文件中file.write(data,length);3.1.2 填充数据字段在数据字段中,数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将数据字
7、段填充至46B。填充字符是任意的,不计入长度字段值中。在程序中是用一下方法实现的:/如果输入文件长度不足46B,则用补足46Bif(length<46) for(int j=length;j<46;j+) file.put(char(0x00); 3.1.3计算填充CRC 帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。本程序中实现的是CRC-8校验算法,即多项式G(x)=x8+x2+x+1,方法如下所示:file.put(char(0x00);/数据后补1B的0,用于crc计算 file.seekg(8,ios:beg);/将读指针指向目的地址字段,从此处开始CR
8、C计算 unsigned char ch;/ch用来保存读入的字符。 unsigned char crc=char(0x00);/余数初始值为。unsigned char crc=0;/初始余数为0 while(total-) unsigned char temp; file.get(temp);/读1B的数据/多项式G(x)=x8+x2+x+1即以下模拟数据除以100000111的二进制除法过程for(unsigned char i=(unsigned char)0x80;i>0;i>>=1) if(crc&0x80) crc<<=1; if(temp&
9、amp;i) crc=0x01;/将输入数据相应位的值递补到余数末位crc=0x07;/进行除法运算(即减去除数的低8位:00000111) else crc<<=1; if(temp&i) crc=0x01;/将输入数据相应位的值递补到余数末位 3.2程序流程图3.2.1程序流程图 3.2.2 CRC计算流程图4.程序源代码(主要代码)CString str;void CEx3Dlg:OnButton2() CString filter;filter="文本文件(*.txt)|*.txt|c+文件(*.h,*.cpp)|*.h,*.cpp|"CFile
10、Dialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);if(dlg.DoModal()=IDOK)str=dlg.GetPathName();/AfxMessageBox(str);MessageBox("文件选择成功");/int nIndex=m_edit.AddString(str);/m_edit.SetItemDataPtr(nIndex,0);void CEx3Dlg:OnButton1() fstream file;/打开指定输出文件,读写方式为以二进制方式可读可写,如文件存在则清除其内容file.open(&q
11、uot;D:out.txt",ios:in|ios:out|ios:binary|ios:trunc);for(int i=0;i<7;i+) file.put(char(0xaa);/写入7B前导码file.put(char(0xab);/写入1B帧前界定符long pCrcs=file.tellp();/获得当前文件指定指针位置,计算CRC时从这里开始char dst_addr6=char(0xff),char(0xff),char(0xe4),char(0x86),char(0x30), char(0xd0);file.write(dst_addr,sizeof(dst_
12、addr);/写入6B目的地址char src_addr6=char(0xff),char(0xff),char(0x80),char(0x1a),char(0xe6), char(0x09); file.write(src_addr,sizeof(src_addr);/写入6B源地址ifstream infile;infile.open(str,ios:binary); infile.seekg(0,ios:end);/将文件读指针移到末尾short length=(short)infile.tellg();/获得位置偏移量,即为输入文件长度file.put(char(length/256)
13、;/将该长度写入数据长度字段(2B)file.put(char(length%256); char* data=new charlength; infile.seekg(0,ios:beg); infile.read(data,length);/从输入文件中读出所有数据至data中file.write(data,length);/将data中数据写入输出文件infile.close();delete data;if(length<46) for(int i=0;i<46-length;i+) file.put(char(0x00);/数据字段不足46B的部分用0填充long pCr
14、c=file.tellp();/获得当前位置,计算后的CRC码将写到这个位置file.put(char(0x00);/数据后补1B的0,用于crc计算short total=short(file.tellp()-(short)pCrcs;/需要进行计算的数据长度file.seekg(pCrcs,ios:beg);/将读指针指向目的地址字段,从这里开始crc计算unsigned char crc=0;/初始余数为0 while(total-) unsigned char temp; file.get(temp);/读1B的数据/多项式G(x)=x8+x2+x+1即以下模拟数据除以10000011
15、1的二进制除法过程for(unsigned char i=(unsigned char)0x80;i>0;i>>=1) if(crc&0x80) crc<<=1; if(temp&i) crc=0x01;/将输入数据相应位的值递补到余数末位crc=0x07;/进行除法运算(即减去除数的低8位:00000111) else crc<<=1; if(temp&i) crc=0x01;/将输入数据相应位的值递补到余数末位 file.seekp(pCrc,ios:beg); length=sizeof(crc); switch(leng
16、th) /若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); break; MessageBox("帧文件封装完成,封装后文件为D:out.txt");file.close(); 5.运行结果(1)输入数据和帧封装:(2)源文件如下:(3)被封装后的文件如下:6.总结与体会本次课程设计重点学习了帧封装。在查阅了很多帧的封装的知识后,对帧及其封装的方法有了一定程度的了解和掌握。在对帧的学习后,有了很大的收获,并且使帧的封装得以实现。在设计中实现了帧的封装,主要是将帧的七个部分-前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,按顺序封装的,最后形成一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021一建考试《建设工程项目管理》题库试卷考点题库及参考答案解析五
- 酒店礼仪培训课件
- 小学生校园文化建设制度
- 《企业人才绩效管理》课件
- 2021年卫生系统招聘(临床)考试题库(含各题型)
- 消防培训课件资料
- 二年级数学计算题专项练习集锦
- 2021年二级建造师《建设工程法规》试题
- JCC培训课件教学课件
- 2021年度田径试题库答案
- 《网络安全等级保护条例》
- 儿童福利机构服务与管理规范
- 《工装夹具设计》课程标准
- 宜昌市夷陵区2023-2024学年八年级上学期期末数学评估卷(含答案)
- 企划品宣部人员架构及职责
- 2023年7月黑龙江高中学业水平合格性考试历史试卷真题(含答案详解)
- 2024年血透管路行业技术趋势分析
- 高效复习+期末动员+高二上学期考前动员主题班会
- 美术年终总结汇报
- 铅锌矿资源的勘查与储量评估
- 数字孪生技术与MES系统的融合
评论
0/150
提交评论