计算机网络课程设计_模拟以太网帧封装_第1页
计算机网络课程设计_模拟以太网帧封装_第2页
计算机网络课程设计_模拟以太网帧封装_第3页
计算机网络课程设计_模拟以太网帧封装_第4页
计算机网络课程设计_模拟以太网帧封装_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机通信网络报告以太网帧封装模拟学 生1:叶 健 12122268 贡献比:20%学 生2:赵思晨12121461 贡献比:20%学 生3:刘 赟 12122549 贡献比:20%学 生4:王晨浩 12122090 贡献比:20%学 生5:游赛夫 12160006 贡献比:20%组 长: 赵思晨 组长电话:指导老师: 冯玉田 完成时间: 2015年10月 目 录1设计任务和要求211 课程设计任务212 课程设计要求22设计原理221 802.3标准帧结构222 CRC的基本实现33设计实现331 设计思路33.1.1 填充帧头部字段33.1.2填充数据字段33.1

2、.3 计算填充CRC432 流程图43.2.1 程序流程图43.2.2 CRC计算流程图54程序源码65运行结果86总结体会111.设计任务和要求1.1课程设计任务帧是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。本项目设计软件,实现以太网帧的封装、传输、解析。1.2设计要求1编写程序,从文件中读取数据;2将数据组装成IEEE802.3格式的帧;3通过两台计算机的通信,把帧从一台计算机传输到另一台计算机。 2.设计原理 2.1 802.3标准帧结构以

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

4、构。4.源地址字段源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。5.长度字段用于IEEE802.3的两字节长度字段定义了数据字段包含的字节数。从前序 到FCS字段的帧长度最小必须是64字节。基于最小帧长为64字节和使用六字节地址字段的要求,意味着每个数据字段的最小长度为46字节。如果传输数据少于46个字节,应将数据字段填充至46字节。不过,填充字符的个数不包括在长度字段值中,数据字段的最大长度为1500字节。6.数据字段数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段:如果填入该该字段的信息少于46字节,

5、该字段的其余部分也必须进行填充零。数据字段的最大长度为1500字节。7. 校验序列字段将计算出的CRC填入32位的FCS校验字段。帧校验序列字段提供了一种错误检测机制,包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。2.2 CRC的基本实现利用CRC进行检错的过程可简单描述如下:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息的后边,构成一个新的二进制码序列(共k+r位),然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。3.设计实现3.1设

6、计思路3.1.1 填充帧头部字段在这一部分需要向输出文件写入前导码、帧前定界符、目的地址、源地址和长度字段。写入前四个部分相对简单,而写入长度字段时需要计算输入文件的长度。所以计算输入文件长度的方法如下:ioBuffer.put(head);ioBuffer.put(Common.getLocalMac(127.0.0.1);ioBuffer.put(Common.UMAC);ioBuffer.put(Common.TYPE); 3.1.2 填充数据字段在程序中是用以下方法实现的:ioBuffer.putString(s,charsetEncoder); 3.1.3计算填充CRC 帧封装的最后

7、一步就是对数据进行校验,并将校验结果记入帧校验字段。本程序中实现的是CRC32校验算法,方法如下所示:ioBuffer.put(Common.getCRC32(s.getBytes();ioBuffer.flip(); 3.2程序流程图3.2.1程序流程图 3.2.2 CRC计算流程图4.程序源代码(主要代码)主要函数public void update(byte b, int off, int len) if (b = null) throw new NullPointerException(); if (off 0 | len b.length - len) throw new Array

8、IndexOutOfBoundsException();crc = updateBytes(crc, b, off, len); /计算CRCpublic static final byte getCRC32(byte data) CRC32 crc32 = new CRC32();crc32.update(data);return long2Byte(crc32.getValue();/用于计算CRC的类public class CRC32 implements Checksum private int crc; /* * Creates a new CRC32 object. */ pub

9、lic CRC32() /* * Updates CRC-32 with specified byte. */ public void update(int b) crc = update(crc, b); /* * Updates CRC-32 with specified array of bytes. */ public void update(byte b, int off, int len) if (b = null) throw new NullPointerException(); if (off 0 | len b.length - len) throw new ArrayIn

10、dexOutOfBoundsException();crc = updateBytes(crc, b, off, len); /* * Updates checksum with specified array of bytes. * * param b the array of bytes to update the checksum with */ public void update(byte b) crc = updateBytes(crc, b, 0, b.length); /* * Resets CRC-32 to initial value. */ public void res

11、et() crc = 0; /* * Returns CRC-32 value. */ public long getValue() return (long)crc & 0xffffffffL; private native static int update(int crc, int b); private native static int updateBytes(int crc, byte b, int off, int len); 5.运行结果1、功能:1设计界面,打开文件,将数据封装成一个或若干个帧,显示帧的各个字段(数据段可不显示)。2通过网络通信或串口通信,将帧发送到另一台计算

12、机。3接收方对帧进行解析,显示帧的各个字段。4将数据存储到文件中,并与发送方的文件进行比较,检验通信的正确性。 首先,网络传输使用mina框架。ApacheMinaServer是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA对象的序列化服务、虚拟机管道通信服务等),Mina可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina提供了事件驱动、异步(Mina的异步IO默认使用的是JAVANIO作为底层支持)操作的编程模型。Mina主要有1.x和2.x两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina1.x,那么可能

13、会有一些功能并不适用。学习本文档,需要你已掌握JAVAIO、JAVANIO、JAVASocket、JAVA线程及并发库(java.util.concurrent.*)的知识。Mina同时提供了网络通信的Server端、Client端的封装,无论是哪端,Mina在整个网通通信结构中都处于如下的位置:1选择要发送的文件 (2)源文件如下:(3)封装后通过网络传输到另一边再解码6.总结与体会本次课程设计项目学习了帧封装。在查阅了很多帧的封装的知识后,对帧及其封装的方法有了一定程度的了解和掌握。在对帧的学习后,有了很大的收获,并且使帧的封装得以实现。我们成功的利用Java语言编出了一个带有可视化界面的窗体程序,实现了对以太网帧的封装后通过网络传输。以太网数据帧由七部分组成:前导码,帧前界定符,目的MAC地址,源MAC地址,数据长度字段,数据和校验字段。在设计中实现了帧的封装,主要是将帧的七个部分-前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,按顺序封装的,最后形成一个完整的帧结构。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。为了正确的实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论