收藏 分享(赏)

计算机网络课程设计_模拟以太网帧封装.doc

上传人:精品资料 文档编号:10038091 上传时间:2019-09-30 格式:DOC 页数:13 大小:430KB
下载 相关 举报
计算机网络课程设计_模拟以太网帧封装.doc_第1页
第1页 / 共13页
计算机网络课程设计_模拟以太网帧封装.doc_第2页
第2页 / 共13页
计算机网络课程设计_模拟以太网帧封装.doc_第3页
第3页 / 共13页
计算机网络课程设计_模拟以太网帧封装.doc_第4页
第4页 / 共13页
计算机网络课程设计_模拟以太网帧封装.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

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

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

3、台计算机的通信,把帧从一台计算机传输到另一台计算机。 2.设计原理2.1 802.3 标准帧结构以太网 Ethernet 帧格式:前序(P) 目的地址(SD) 源地址(SA) 长度 数据 FCS8 B 6B 6B 2B 461500B 4B1. 前序字段前序字段由 7 个字节的交替出现的 1 和 0 组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。2.帧起始定界符字段它可以被看作前序字段的延续。实际上,该字段的组成方式继续使用前序字段中的格式,这个一个字节的字段的前 6 个比特位置由交替出现的 1 和 0 构成。该字段的最后两个比特位置是 11,这两位中断了同步模

4、式并提醒接收后面跟随的是帧数据。3.目的地址字段目的地址字段确定帧的接收者。6 个字节的源地址和目的地址字段是局域网中的所有工作站必须使用同样的地址结构。4.源地址字段源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。5.长度字段3用于 IEEE802.3 的两字节长度字段定义了数据字段包含的字节数。从前序 到 FCS 字段的帧长度最小必须是 64 字节。基于最小帧长为 64 字节和使用六字节地址字段的要求,意味着每个数据字段的最小长度为 46 字节。如果传输数据少于 46 个字节,应将数据字段填充至 46 字节。不过,填充字符的个数不包括在长度字段值中,数据字段的最

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

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

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

8、id update(byte b, int off, int len) if (b = null) throw new NullPointerException();if (off 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(

9、crc32.getValue();/用于计算 CRC 的类public 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 o

10、ff, int len) if (b = null) throw new NullPointerException();if (off b.length - len) throw new ArrayIndexOutOfBoundsException();7crc = 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) c

11、rc = updateBytes(crc, b, 0, b.length);/* Resets CRC-32 to initial value.*/public void reset() crc = 0;/* Returns CRC-32 value.*/public long getValue() return (long)crc private native static int update(int crc, int b);private native static int updateBytes(int crc, byte b, int off, int len); 5.运行结果1、功

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

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

14、总结与体会本次课程设计项目学习了帧封装。在查阅了很多帧的封装的知识后,对帧及其封装的方法有了一定程度的了解和掌握。在对帧的学习后,有了很大的收获,并且使帧的封装得以实现。我们成功的利用 Java 语言编出了一个带有可视化界面的窗体程序,实现了对以太网帧的封装后通过网络传输。以太网数据帧12由七部分组成:前导码,帧前界定符,目的 MAC 地址,源 MAC 地址,数据长度字段,数据和校验字段。在设计中实现了帧的封装,主要是将帧的七个部分-前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,按顺序封装的,最后形成一个完整的帧结构。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。为了正确的实现这些函数,我们查阅了很多相关的资料,从中获得了大量的有用的信息,收获也颇丰富。近两周的课程项目中,我们 5 个人的动手能力得到了很大的提高,而且将这学期所学的网络的知识和以前所学的编程的知识充分的联系起来,对这门课的认识又提高了一层。除此之外,在做课程设计的时候也遇到了很多的问题,最后通过查资料和在别人的帮助下正确的解决了。从最开始的遇到问题到最后的正确解决问题,我们懂得了正确处理问题的方法,也知道了自己的不足之处,收获颇多。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报