计算机网络课程设计_模拟以太网帧封装.docx_第1页
计算机网络课程设计_模拟以太网帧封装.docx_第2页
计算机网络课程设计_模拟以太网帧封装.docx_第3页
计算机网络课程设计_模拟以太网帧封装.docx_第4页
计算机网络课程设计_模拟以太网帧封装.docx_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

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

文档简介

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.3计

2、算填充 CRC432 流程图43.2.1程序流程图 .43.2.2CRC计算流程图54程序源码65运行结果86总结体会1111. 设计任务和要求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. 长度字段2用于 IEEE802.3 的两字节长度字段定义了数据字段包含的字节数。从前序到 FCS字段的帧长度最小必须是64 字节。基于最小帧长为64 字节和使用六字节地址字段的要求,意味着每个数据字段的最小长度为46 字节。如果传输数据少于 46 个字节,应将数据字段填充至 46 字节。不过,填充字符的个数不包括在长度字段值中,数据字段的最大长度为 1500 字节。6. 数据字段数据字段的最小长度必须为 46 字节以保证帧长至少为 64

5、字节,这意味着传输一字节信息也必须使用 46 字节的数据字段: 如果填入该该字段的信息少于 46 字节,该字段的其余部分也必须进行填充零。 数据字段的最大长度为 1500 字节。7. 校验序列字段将计算出的 CRC填入 32 位的 FCS校验字段。帧校验序列字段提供了一种错误检测机制,包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。2.2 CRC 的基本实现利用 CRC进行检错的过程可简单描述如下: 在发送端根据要传送的 k 位二进制码序列,以一定的规则产生一个校验用的 r 位监督码 (CRC码) ,附在原始信息的后边,构成一个新的二进制码序列 ( 共 k+r 位) ,然后发送出

6、去。在接收端,根据信息码和 CRC码之间所遵循的规则进行检验, 以确定传送中是否出错。 这个规则在差错控制理论中称为“生成多项式” 。3. 设计实现3.1 设计思路3.1.1填充帧头部字段在这一部分需要向输出文件写入前导码、 帧前定界符、 目的地址、源地址和长度字段。写入前四个部分相对简单, 而写入长度字段时需要计算输入文件的长度。所以计算输入文件长度的方法如下:ioBuffer.put(head);ioBuffer.put(Common.getLocalMac(127.0.0.1);ioBuffer.put(Common.UMAC);ioBuffer.put(Common.TYPE);3.1

7、.2填充数据字段在程序中是用以下方法实现的:ioBuffer.putString(s,charsetEncoder); 3.1.3计算填充 CRC3帧封装的最后一步就是对数据进行校验, 并将校验结果记入帧校验字段。 本程序中实现的是 CRC32校验算法,方法如下所示:ioBuffer.put(Common.getCRC32(s.getBytes();ioBuffer.flip();3.2 程序流程图3.2.1程序流程图43.2.2 CRC 计算流程图4. 程序源代码 ( 主要代码)主要函数public void update(byte b, int off, int len) if (b =

8、null) throw new NullPointerException();5if (off 0 | len b.length - len) throw new ArrayIndexOutOfBoundsException();crc = updateBytes(crc, b, off, len);/计算 CRCpublic static final byte getCRC32(byte data) CRC32 crc32 = new CRC32();crc32.update(data);return long2Byte(crc32.getV alue();/用于计算CRC 的类public

9、 class CRC32 implements Checksum private int crc;/* Creates a new CRC32 object.*/public 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 ne

10、w NullPointerException();if (off 0 | len b.length - len) throw new ArrayIndexOutOfBoundsException();crc = updateBytes(crc, b, off, len);6/* 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,

11、 b.length);/* Resets CRC-32 to initial value.*/public void reset() 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设计界面,打开文件,

12、将数据封装成一个或若干个帧,显示帧的各个字段(数据段可不显示)。2通过网络通信或串口通信,将帧发送到另一台计算机。3接收方对帧进行解析,显示帧的各个字段。4将数据存储到文件中,并与发送方的文件进行比较,检验通信的正确性。首先,网络传输使用 mina 框架。Apache MinaServer 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP 协议栈的通信框架(然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina的异步 IO默认使用的是 JAVA NIO

13、作为底层支持) 操作的编程模型。 Mina主要有 1.x和 2.x 两个分支,这里我们讲解最新版本 2.0 ,如果你使用的是 Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要7你已掌握 JAVA IO、JAVA NIO、 JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。 Mina同时提供了网络通信的Server端、Client 端的封装,无论是哪端, Mina 在整个网通通信结构中都处于如下的位置:1 选择要发送的文件89( 2)源文件如下:( 3)封装后通过网络传输到另一边再解码106. 总结与体会本次课程设计项目学习了帧封

14、装。 在查阅了很多帧的封装的知识后, 对帧及其封装的方法有了一定程度的了解和掌握。在对帧的学习后,有了很大的收获,并且使帧的封装得以实现。我们成功的利用 Java 语言编出了一个带有可视化界面的窗体程序, 实现了对以太网帧的封装后通过网络传输。以太网数据帧由七部11分组成:前导码,帧前界定符,目的 MAC地址,源 MAC地址,数据长度字段,数据和校验字段。在设计中实现了帧的封装, 主要是将帧的七个部分 - 前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,按顺序封装的,最后形成一个完整的帧结构。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。 为了正确的实现这些函数,

温馨提示

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

评论

0/150

提交评论