版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录课程设计目的..............................5课程设计要求.............................5相关知识..................................5课程设计分析..............................8相关扩展.................................10程序代码..................................14运行结果与分析............................16参考文献..................................171课程设计目的帧是在数据链路层中进行数据传输的根本单位。熟悉帧结构对于理解网络协议的概念、网络层次结构与协议执行过程具有重要的意义。本课程设计的主要目的是通过封装Ethernet帧,了解Ethernet帧中各个字段的含义与用途。2课程设计要求根据后面介绍的IEEE802.3帧结构,编写程序将指定数据封装为Ethernet帧。1〕以命令行形式运行:EncapFrameinput_fileoutput_file其中,EncapFrame为程序名,input_file为输入数据文件,output_file为输出文件。2)输出内容:Ethernet帧的各字段内容。相关知识1.帧术语“帧〞来源于串行线路上的通信。其中,发送者在发送数据的前后分别添加特殊的字符,使它们成为一个帧。Ethernet从某种程度上可以被看做是机器之间的数据链路层连接。首先我们来认识一下帧结构,EthernerV2.0标准和IEEE802.3标准中的Ethernet帧结构有一些差异,这里我们按802.3标准的帧结构进行讨论。图为帧结构图前导码帧前定界符目的地址源地址长度字段数据字段校验字段〔7B〕〔1B〕〔2/6B〕〔2/6B〕〔2B〕〔长度可变〕〔4B〕图1.帧结构图如上图所示,802.3标准的Ethernet帧结构由7局部组成。前导码与帧前定界符字段前导码由56位〔7B〕的10101010…10101010位序列组成。帧前定界符可以视为前导码的延续。1B的帧前定界符结构为10101011.如果将前导码与帧前定界符一起看,那么在62位101010…1010位序列之后出现11。在11之后是Ethernet帧的目的地址字段。前导码与帧前定界符主要是保证接收同步,这8B接收后不需要保存,也不记入帧头长度中。目的地址和源地址目的地址〔DA〕与源地址〔SA〕分别表示帧的接收结点地址与发送结点的硬件地址。在Ethernet帧中,目的地址和源地址字段长度可以是2B或6B。目前的Ethernet都使用6B长度的地址。Ethernet帧的目的地址可以是单播地址、多播地址与播送地址,目的地址的第一位为0表示单播地址,为1表示多播地址,目的地址为全1那么表示播送地址。长度字段Ethernet帧用2B定义数据字段包含的字节数。协议规定,帧数据的最小长度为46B,最大长度为1500B。设置最小帧长度的目的是使每个接收结点能够有足够时间检测到冲突。数据字段帧数据字段的最小长度为46B。如果帧的LLC数据少于46B,那么应将数据字段填充只46B。填充字符是任意的,不计入长度字段值中。校验字段帧校验字段〔FCS〕采用32位的CRC校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC数据字段。此处,为了简便起见,采用8位的CRC校验。CRC校验的生成多项式为:G(X)=X^8+X^2+X+1某些帧结构中还会包括帧类型字段,用来识别此帧所承载的数据的类型。当一个帧到达指定的计算机时,操作系统根据帧类型决定用哪个协议软件模块对它进行处理。自识别帧的主要优点是,可以在同一物理网络中使用多个协议而互不干扰。2.CRC校验循环冗余编码的编码方式。过程:在发送端,根据要传送的k位二进制码序列,以一定的规那么产生一个校验用的r位监督码,附在原始信息的后边,构成一个新的二进制码序列,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规那么进行检验,以确定传送中是否出错。CRC编码的代数学原理将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。设编码前的原始信息多项式为P〔x〕,P〔x〕最高次幂加1等于k;生成多项式为G(x),它的最高次幂等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。发送方编码的方法是:P(x)乘以x^r,再除以G(x),得余式即为R(x)。接收方得解码方法是:将T(x)除以G(x),如果余数为0,那么说明传输中无错误发生,否那么说明传输有错误。CRC的根本实现以CRC-8〔X^8+X^2+X^1为例,它由多个移位存放器和加法器组成。编码、解码前将各存放器初始化为0,输入位作为最右边异或操作的输入之一。三个存放器上的移位操作同时进行,均为左移一位,左边的存放器的最左一位作为三个异或操作的输入之一。每次移位时,最右边的存放器内容作为中间异或操作的输入之一,中间的存放器的内容作为最左边异或操作输入之一,各个异或操作的结果作为与它左边那个存放器的移入位。重复以上步骤,每输入一位就做一次移位操作,直到输入了所有要计算的数据为止。这时,这个存放器组中的数据就是CRC-8的结果。CRC的工作原理是:CRC在发送端编码和接收端校验时,都可以利用事先约定的生成多项式G(x)来得到,K位要发送的信息位可对应于一个(k-1)次多项式K(x),r位冗余位对应于一个〔r-1〕次多项式R(x),由r位冗余位组成的n=k+r位码对应于一个(n-1)次多项式T(x)=X^r*K(x)+R(x)。循环冗余校验码的特点CRC校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误.CRC校验码具有以下的检错能力:CRC校验码可检测出所有单个错误,所有奇数位错误,所有双位的错误,所有小于、等于校验位长度的突发错误。课程设计分析1.填充帧头部字段要完成一次帧封装的过程,首先要完成的是帧头部的装入,这一过程只要将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。有以下两种方式来获得长度字段的值。方法一:While(!in.eof()){in.get(a);buf[j]=a;j++;}方法二:infile.open(argv[1],ios::binary);infile.seekg(0,ios::end);shortlength=(short)infile.tellg();file.put(char(length/256));file.put(char(length%256));2.填充数据字段在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准中规定了帧数据字段的最小长度为46B,最大长度为1500B。如果数据缺乏46B,那么需要通过填充0来补足;假设数据长度超过1500B,那么将超过局部封装入下一个帧进行发送。由于帧头局部应该包括6B目的地址、6B源地址、2B长度字段以及4B帧校验字段,因此帧头局部长度为18B。前导码与帧前定界符不计入帧头长度中。那么,Ethernet帧的最小长度为64B,最大长度为1518B。填充数据字段的代码如下:if(len==1500){…len=0;}if(len<46){for(i=len;i<46;i++)fr.data[i]=0x00;}data_len=len;3.CRC校验帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。CRC编码实际上就是一个循环移位的模二运算。流程描述为:把CRC中的值置为0在原始数据input后添加8个0while(数据未处理完)beginif〔crc首位是1〕crc=crcXOR100000111把crc中的值左移一位,从input中读取一位新的数据并置于crc的0位crc中的后8位就是经过CRC-8校验的余数。这样,我们只需要看后8位即可,因此上面流程可以简化。构造一个8位的存放器crc,初始值为0,数据依次移入crc的0位,同时crc的7位移出。当移出的数据为1时,crc才和00000111进行XOR运算;移出数据为0时,不做运算。每次crc中数据位为1时还需要对crc0位进行处理伪代码:while(数据未处理完)beginif(crc的首位是1)crc左移1位crc=crcXOR00000111elsecrc左移1位if〔从input中读入的新的数据为1〕将crc0位置1end相关扩展1.比特型运算法定义一个存放器组,初始化为全1.依照电路图,每输入一个信息位,相当于一个时钟脉冲到来,从高到低依次移位。移位前信息位与bit0相加产生临时位,其中bit15移入临时位,bit10、bit3还要加上临时位。当全部信息位输入完成后,从存放器组取出它们的值,这就是CRC码。该算法的代码如下:typedefunion{u16val;struct{u16bit0:1;u16bit1:1;…}bits;}CRCREGSCRCRESGSregs;voidcrcInitRegisters(){regs.val=0xffff;}voidcrcInputBit(bitin){bita;a=regs.bits.bit0^in;regs.bits.bit0=regs.bits.bit1;regs.bits.bit1=regs.bits.bit2;regs.bits.bit2=regs.bits.bit3;regs.bits.bit3=regs.bits.bit4^a;regs.bits.bit4=regs.bits.bit5;regs.bits.bit5=regs.bits.bit6;regs.bits.bit6=regs.bits.bit7;regs.bits.bit7=regs.bits.bit8;regs.bits.bit8=regs.bits.bit9;regs.bits.bit9=regs.bits.bit10;regs.bits.bit10=regs.bits.bit11^a;regs.bits.bit11=regs.bits.bit12;regs.bits.bit12=regs.bits.bit13;regs.bits.bit13=regs.bits.bit14;regs.bits.bit14=regs.bits.bit15;regs.bits.bit15=a;}u16crcGetRegisters(){returnregs.val;}crcInputBit(bitin){bita;a=regs.bits.bit0^in;regs.val>>1;if(a)regs.val^=0x8408;}2.字节型算法数字通信系统一般是对一帧数据进行CRC校验,而字节是帧的根本单位。最常用的是一种按字节查表的快速算法。该算法基于这样一个事实:计算本字节后的CRC码,等于上一字节CRC右移8位和本字节之和再与上一字节余式CRC码的低8位左移8位相加后所求得的CRC码。如果我们把8位二进制序列数的CRC全部计算出来,放在一个表里,那么编码时只要从表中查找对应的值进行处理即可。算法如下:存放器组初始化为全1。存放器组向右移动一个字节。刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。将索引所指的表值与存放器组做异或运算。数据指针加1,如果数据没有全部处理完,那么重复步骤2.存放器组取反,得到CRC,附加在数据之后。验证算法:存放器组初始化为全1.存放器组向右移动一个字节。刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。将索引所指的表值与存放器组做异或运算。数据指针加1,如果数据没有全部处理完,那么重复步骤2.判断存放器组的值是否等于“MagicValue〞,假设相等那么通过,否那么失败。图2程序流程图:图3.CRC计算流程图程序代码#include<iostream.h>#include<fstream.h>voidmain(intargc,char*argv[]){ if(argc!=3) { cout<<"请按以下格式输入命令行:framerinputfileoutputfile"<<endl; return; } fstreamfile; file.open(argv[2],ios::in|ios::out|ios::binary|ios::trunc); for(inti=0;i<7;i++)file.put(char(0xaa)); file.put(char(0xab)); longpCrcs=file.tellp(); chardst_addr[6]={char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6),char(0x65)}; file.write(dst_addr,sizeof(dst_addr)); ifstreaminfile; infile.open(argv[1],ios::binary); infile.seekg(0,ios::end); shortlength=(short)infile.tellg(); file.put(char(length/256)); file.put(char(length%256)); char*data=newchar[length]; infile.seekg(0,ios::beg); infile.read(data,length); infile.close(); deletedata; if(length<46)for(inti=0;i<46-length;i++);file.put(char(0x00)); longpCrc=file.tellp(); file.put(char(0x00)); shorttotal=short(file.tellp())-(short)pCrcs;file.seekg(pCrcs,ios::be
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省福州第二医院心理综合楼暖通空调工程设计
- 2022年水暖工高级证考试历年真题+模拟题附全答案
- 2026年关于林业安全生产测试题及答案
- 2024年电工电子专业自考本科统考核心题库及答案
- 2026年安永网申测试题及答案
- 2021年云南本土大数据企业招聘笔试题及标准答案
- 带编入伍协议书版本
- 上市公司资产出售协议书
- 狼性文化与团队精神
- 骨折康复训练流程培训
- 2026年教案合集2026年春人教版八年级下册英语Unit 1~Unit 8全册教案新版
- 学堂在线 雨课堂 学堂云 网球技术动作入门 章节测试答案
- 2026广东惠州市自然资源局招聘编外人员4人笔试参考题库及答案解析
- 养生食膳行业分析报告
- 2026中国中原对外工程有限公司校园招聘笔试历年难易错考点试卷带答案解析
- DB42∕T 2523-2026 党政机关办公用房面积核定工作规范
- 2026南京六合科技创业投资发展有限公司招聘9人笔试备考试题及答案解析
- 2026济南市第七人民医院公开招聘派遣制工作人员(2名)考试参考试题及答案解析
- 2026年安徽师范大学专职辅导员招聘30人考试参考试题及答案解析
- 成都合资公司管理手册模板
- 二类医疗器械零售经营备案质量管理制度
评论
0/150
提交评论