首页 封装Ethernet帧

封装Ethernet帧

举报
开通vip

封装Ethernet帧封装Ethernet帧 沈阳理工大学课程设计专用纸 Noi 目 录 1 课程设计目的....................................................................1 2 课程设计要求 .................................................................. 1 3 相关知识 ...............................................................

封装Ethernet帧
封装Ethernet帧 沈阳理工大学课程设计专用纸 Noi 目 录 1 课程设计目的....................................................................1 2 课程设计要求 .................................................................. 1 3 相关知识 .......................................................................... 1 4 课程设计分析 ......................................................... 1——5 5 程序代码 ................................................................. 5——7 6 运行结果与分析...................................................... 7——8 7 参考文献 .......................................................................... 8 沈阳理工大学 沈阳理工大学课程设计专用纸 No1 1 课程设计目的 帧是在数据链路层中进行数据传输的基本单位。熟悉帧结构对于理解网络协议的概念?网络层次 结构与协议执行过程具有重要意义。本课程设计的主要目的是通过封装Ethernet帧,了解Ethernet帧中各字段的含义及用途。 2 课程设计要求 根据后面介绍的IEEE802.3帧结构,编写程序将指定数据封装为Ethernet帧。 (1) 以命令形式运行: Encapframe input_file output_file 其中,Encapframe为程序名,input_file为输入数据文件,output_file为输出数据文件。 (2) 输入内容:Ethernet帧的各字段内容。 3 相关知识 1 . 帧:在发送数据的前后分别特殊的字符使它们成为帧 帧有两种结构:EthernetV2.0 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 和IEEE802.3 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 中的Ethernet帧。我们按802.3标准进行讨论。 a. 前导码与帧前序列:前导码由56位的10序列组成,帧前定界符可以视为前导码的延续。1B的帧前定界符为10101011。 b. 目的地址和源地址:分别表示帧接受结点地址与发送结点的硬件地址。分别为6B字段长度。目的地址第一位为0表示单播地址,为1表示多播地址,为全1表示为广播地址。 c. 长度字段:帧数据最小长度为46B,最大长度为1500B d. 数据字段::帧数据字段最小长度为46B,若帧的LLC数据少于46B,则应将数据字段填充至46B。 e. 校验字段:帧校验字段采用32位CRC校验。校验范围包括目的地址字段,源地址字段,长度字段,LLC数字字段。 2 CRC校验: a. CRC编码的代数原理:在代数编码理论中,将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。 b. CRC的硬件电路实现。 c. CRC的基本实现:CRC在发送端编码和接收端校验时,都可以用事先约定的多项式来得到。 d. 循环冗余校验码的特点:检错能力很强。 4 课程设计分析 1填充帧头部字段 沈阳理工大学 沈阳理工大学课程设计专用纸 No2 要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这个过程很简单,只要将前导码、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。我们可以通过以下两种方式获得长度字段的值。 a 方法一 While(! In.eof()) { In.get(a); buf[j]=a; j++; } b 方法二 infile.open(argv[1],ios::binary); Infile.seekg(0,ios::end); short length=(short)infile.tellg(); file.put(char(length/256)); file.put(char(length%256)); 上面程序的最后二行是把读到的数据长度值按逆序填到长度字段。这就涉及到网络字节序的问题。 *计算机有两种字节序: 低位字节优先序:低位字节存储在起始地址。 高位字节优先序:高位字节存储在起始地址。 Internet上的数据以高位字节优先顺序在网上传播,所以对于在机器内部以低位字节优先方式存储数据来说,在Internet上传输数据时就需要转换,否则就会出现数据不一致。 *几个字节顺序转换函数: Htonl():把32位值从主机字节序转换成网络字节序。 Htonl():把16位值从主机字节序转换成网络字节序。 ntohl():把32位值从网络字节序转换成主机字节序。 ntohl():把16位值从网络字节序转换成主机字节序。 2 填充数据字段 要注意数据字段长度。802.3标准规定帧数据字段最小长度46B,最大长度1500B,若数据不足46B,则用0来填充;若超过1500B,则将超过部分封装到下个帧进行发送。 沈阳理工大学 沈阳理工大学课程设计专用纸 No3 Ethernet帧最小长度64B,最大长度1518B。 填充代码如下: if(len==1500) { ........ Len=0; } 如果数据长度小于46 if( len<46) { for{i=len;i<46;i++) Fr.data[i]=0x00; } data_len=len; 3 CRC校验 帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段,而CRC编码实际上是一个循环位移的模2运算。 a. CRC编码的代数原理:在代数编码理论中,将一个码组表示为一个多项式,码组中的各码元作为多项式的系数。 b. CRC的硬件电路实现。 c. CRC的基本实现:CRC在发送端编码和接收端校验时,都可以用事先约定的多项式来得到。 CRC编码实际上是一个循环的模二运算,假设有一个9位存储器,其流程描述如下: while(数据未处理完) begin if(crc首位是1) crc=crc XOR 10000011 一个8位寄存器,伪代码如下: while(数据未处理完) begin if(crc首位是1) crc左移一位 crc=crc XOR 10000011 else crc左移一位 if(从input中读入的数据为1) 将crc 0位置1 End 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). 循环冗余码校验特点: CRC校验码得检错能力强,不仅能检验出离散错误,还能检验出突发错误。 沈阳理工大学 沈阳理工大学课程设计专用纸 No4 开始 4.程序流程图 以二进制、可读写方式添加文件 写入前导码和帧前定界 符 获取当前文件指针 写入当前目的地址和源地址 打开输入数据文件,获得文件长度length,并将其写入输 并将长度值写入输出文件 将输入数据文件的内容填入数据字段 入文件 数据长度大于等于 N 46B 填充(46-length)字节0 Y 关闭输入数据文件 添加1字节0,用于CRC计算 计算CRC值,填充校验字段 封装完成,关闭输入程序 结束 沈阳理工大学 沈阳理工大学课程设计专用纸 No5 *相关知识 除了以上的方法之外,还有其他一些算法可以完成CRC校验。例如:多项式除法可以用除法电路来实现。除法电路的主体由一组移位寄存器和模2加法器组成。以CRC-ITU为例,它由16级移位寄存器和3个加法寄存器组成。编码、解码前将个寄存器初始化为“1”,信息位按照时钟周期依次移入。当信息位全部输入后,从寄存器组输出CRC结果。 1. 比特型算法 上面的CRC-ITU除法可以用软件来模拟。定义一个寄存器组,初始化全为1。 2. 字节型算法 比特型算法逐位进行运算,效率比较低,不适用高速通信的场合。数字通信系统一般是对一帧数进行CRC校验,而字节是帧的基本单位。通常用的是一种按字节查表的快速算法。该算法基于这样一个事实:计算本字节后的CRC码,等于上一字节CRC右移8位和本字节之和再与上一字节余式CRC码的低8位左移8位相加后所求得CRC码。如果我们把8位二进制序列数的CRC全部计算出来,放在一个表里,那么编码时只要从表中查找对应的值进行处理即可。 CRC-ITU算法如下: 1. 寄存器组初始化全为1(0XFFFF)。 2. 寄存器组向右移动一个字节。 3. 刚移出的那个字节进行异或运算,得出一个指向值表的引索。 4. 将引索所指的值表与寄存器组做异或运算。 5. 数据指针加1,如果数据没有完全处理完,则重复步骤2。 6. 寄存器组取反,得到CRC,附加在数据之后。 而CRC-ITU的验证算法同算法的前5步,而第六步是判断寄存器组的值是否等于“Magic Value” (0XF0B8),若相同则通过,否则失败。 5.运行代码 #include #include void main(int argc,char* argv[]) { //检查输入命令格式 if(argc!=3) { cout<<"Please input command: Encapframe input_file output_file"<0;i>>=1) { //当前余数最高位为1,需要做除法运算 if(crc&0x80) { crc<<=1; //将输入数据相应位的值递补到余数末位 if(temp&i) crc^=0x01; crc^=0x07; } else { crc<<=1; if(temp&i) crc^=0x01; } } } //写入crc码 file.seekp(pCrc,ios::beg); file.put(crc); //输出写入文件的内容 file.seekg(0,ios::beg); cout<<"Content of ethernet frame:"<
本文档为【封装Ethernet帧】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_212655
暂无简介~
格式:doc
大小:52KB
软件:Word
页数:13
分类:工学
上传时间:2017-09-20
浏览量:55