封装Ethernet帧课程设计

上传人:B**** 文档编号:107832677 上传时间:2022-06-15 格式:DOCX 页数:14 大小:114.63KB
返回 下载 相关 举报
封装Ethernet帧课程设计_第1页
第1页 / 共14页
封装Ethernet帧课程设计_第2页
第2页 / 共14页
封装Ethernet帧课程设计_第3页
第3页 / 共14页
点击查看更多>>
资源描述
沈阳理工大学课程设计专用纸目录1课程设计目的.52课程设计要求.53相关知识 .54课程设计分析.85相关扩展.106程序代码 .147运行结果与分析.168参考文献 .17No1沈阳理工大学沈阳理工大学课程设计专用纸1 课程设计目的No2帧是在数据链路层中进行数据传输的基本单位。熟悉帧结构对于理解网络协议的概念、网络层次结构与协议执行过程具有重要的意义。本课程设计的主要目的是通过封装Ethernet 帧,了解 Ethernet帧中各个字段的含义与用途。2 课程设计要求根据后面介绍的IEEE802.3 帧结构,编写程序将指定数据封装为Ethernet帧。1)以命令行形式运行:EncapFrame input_file output_file其中, EncapFrame为程序名, input_file 为输入数据文件, output_file 为输出文件。2) 输出内容: Ethernet 帧的各字段内容。3 相关知识1.帧术语“帧”来源于串行线路上的通信。其中,发送者在发送数据的前后分别添加特殊的字符,使它们成为一个帧。 Ethernet 从某种程度上可以被看做是机器之间的数据链路层连接。首先我们来认识一下帧结构, EthernerV2.0 规范和 IEEE802.3 标准中的 Ethernet 帧结构有一些差别,这里我们按 802.3 标准的帧结构进行讨论。图为帧结构图前导码帧前定界目的地址源地址长度字段数 据 字校验字段符段(7B)(1B)(2/6B)(2/6B)(2B)( 长 度(4B)可变)图 1.帧结构图沈阳理工大学沈阳理工大学课程设计专用纸如上图所示, 802.3 标准的 Ethernet 帧结构由 7 部分组成。( 1) 前导码与帧前定界符字段No3前导码由 56 位( 7B)的 1010101010101010 位序列组成。帧前定界符可以视为前导码的延续。 1B 的帧前定界符结构为10101011.如果将前导码与帧前定界符一起看,那么在62 位 1010101010 位序列之后出现11。在 11 之后是 Ethernet 帧的目的地址字段。前导码与帧前定界符主要是保证接收同步,这8B 接收后不需要保留,也不记入帧头长度中。(2)目的地址和源地址目的地址( DA )与源地址( SA)分别表示帧的接收结点地址与发送结点的硬件地址。在 Ethernet帧中,目的地址和源地址字段长度可以是2B 或 6B。目前的 Ethernet 都使用 6B 长度的地址。Ethernet 帧的目的地址可以是单播地址、 多播地址与广播地址, 目的地址的第一位为 0 表示单播地址,为 1 表示多播地址,目的地址为全 1 则表示广播地址。(3)长度字段Ethernet 帧用 2B 定义数据字段包含的字节数。协议规定,帧数据的最小长度为46B,最大长度为 1500B。设置最小帧长度的目的是使每个接收结点能够有足够时间检测到冲突。(4)数据字段帧数据字段的最小长度为46B。如果帧的 LLC 数据少于 46B,则应将数据字段填充只46B。填充字符是任意的,不计入长度字段值中。(5)校验字段帧校验字段( FCS)采用 32 位的 CRC 校验。校验的范围包括目的地址字段、源地址字段、长度字段、 LLC 数据字段。此处,为了简便起见,采用8 位的 CRC 校验。 CRC 校验的生成多项式为:G(X)=X8+X2+X+1某些帧结构中还会包括帧类型字段,用来识别此帧所承载的数据的类型。当一个帧到达指定的计算机时,操作系统根据帧类型决定用哪个协议软件模块对它进行处理。自识别帧的主要优点是,可以在同一物理网络中使用多个协议而互不干扰。2.CRC 校验沈阳理工大学沈阳理工大学课程设计专用纸循环冗余编码的编码方式。No4过程:在发送端,根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的 r 位监督码,附在原始信息的后边,构成一个新的二进制码序列,然后发送出去。在接收端,根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。(1)CRC 编码的代数学原理将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。设编码前的原始信息多项式为 P(x),P(x)最高次幂加 1 等于 k;生成多项式为 G(x), 它的最高次幂等于r;CRC 多项式为 R(x) ;编码后的带 CRC 的信息多项式为 T(x) 。发送方编码的方法是: P(x)乘以 xr ,再除以 G(x),得余式即为 R(x) 。接收方得解码方法是:将T(x) 除以 G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有错误。( 2)CRC 的基本实现以 CRC-8( X8+X2+X1 为例,它由多个移位寄存器和加法器组成。编码、解码前将各寄存器初始化为 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)=Xr*K(x)+R(x)。(3)循环冗余校验码的特点CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误 .CRC 校验码具有以下的检错能力:CRC 校验码可检测出所有单个错误,所有奇数位错误,所有双位的错误,所有小于、等于校验位长度的突发错误。沈阳理工大学沈阳理工大学课程设计专用纸4 课程设计分析No51.填充帧头部字段要完成一次帧封装的过程,首先要完成的是帧头部的装入,这一过程只要将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。有以下两种方式来获得长度字段的值。方法一:While(!in.eof()in.get(a);bufj=a;j+;方法二:infile.open(argv1,ios:binary);infile.seekg(0,ios:end);short length=(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(len46)for(i=len;i1;if(a) regs.val=0x8408;No82.字节型算法数字通信系统一般是对一帧数据进行CRC 校验,而字节是帧的基本单位。最常用的是一种按字节查表的快速算法。 该算法基于这样一个事实: 计算本字节后的 CRC 码,等于上一字节 CRC 右移 8 位和本字节之和再与上一字节余式CRC 码的低 8 位左移 8位相加后所求得的CRC 码。如果我们把8 位二进制序列数的CRC 全部计算出来,放在一个表里,那么编码时只要从表中查找对应的值进行处理即可。算法如下:1) 寄存器组初始化为全1。2) 寄存器组向右移动一个字节。3) 刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。4) 将索引所指的表值与寄存器组做异或运算。5) 数据指针加 1,如果数据没有全部处理完,则重复步骤2.6) 寄存器组取反,得到CRC,附加在数据之后。验证算法:1) 寄存器组初始化为全1.2) 寄存器组向右移动一个字节。3) 刚移出的那个字节与数据字节进行异或运算,得出一个指向值表的索引。4) 将索引所指的表值与寄存器组做异或运算。5) 数据指针加 1,如果数据没有全部处理完,则重复步骤2.6) 判断寄存器组的值是否等于“Magic Value 若”,相等则通过,7) 否则失败。沈阳理工大学沈阳理工大学课程设计专用纸No9图 2 程序流程图:开始以二进制、可读写方式打开输出文件写入前导码和这界定符获取当前文件指针写入目的地址和源地址打开输入数据文件、获得稳健长度length,并将长度值写入输出文件将输入数据文件的内容填入数据字段数据字段长度=46BN填充(46-length)字节0 Y关闭输入数据文件添加1 字节0 ,用于CRC计算计算CRC值,填充校验字段风转完成,关闭输出文件结束沈阳理工大学沈阳理工大学课程设计专用纸No10图 3.CRC计算流程图沈阳理工大学沈阳理工大学课程设计专用纸6 程序代码#include#includevoid main(int argc,char*argv)if(argc!=3)cout请按以下格式输入命令行 : framer inputfile outputfileendl; return;fstream file;file.open(argv2,ios:in|ios:out|ios:binary|ios:trunc);for(int i=0;i7;i+) file.put(char(0xaa);file.put(char(0xab);No11long pCrcs=file.tellp();char dst_addr6=char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6),char(0x65); file.write(dst_addr,sizeof(dst_addr);ifstream infile;infile.open(argv1,ios:binary);infile.seekg(0,ios:end);short length=(short)infile.tellg();file.put(char(length/256);file.put(char(length%256);char*data=new charlength;infile.seekg(0,ios:beg);infile.read(data,length);infile.close();delete data;if(length46) for(int i=0; i0;i=1)if(crc&0x80)crc=1;if(temp&i) crc=0x01;crc=0x07;elsecrc=1;if(temp&i) crc=0x01;file.seekg(pCrc,ios:beg);file.put(crc);while(!file.eof()unsigned char temp;file.get(temp);couthex(short)tempendl;cout 帧文件 argv2 封装完成 endl;No12沈阳理工大学沈阳理工大学课程设计专用纸7 运行结果与分析图 4. 运行结果图 1No13图 5. 运行结果图 2实验小结:实现帧的封装,主要是将帧的七个部分 - 前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,一个一个按顺序封装的,最后使得一个帧的封装得以完成。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。沈阳理工大学沈阳理工大学课程设计专用纸8 参考文献No141 谢希仁 编著 . 计算机网络 (第 6 版) . 北京:电子工业出版社, 20122 吴宜功吴英 编著 .计算机网络课程设计(第 2 版).北京 :机械工业出版社, 2012沈阳理工大学
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿件


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!