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

上传人:laozhun 文档编号:2401495 上传时间:2023-02-17 格式:DOC 页数:13 大小:410KB
返回 下载 相关 举报
计算机网络课程设计模拟以太网帧封装.doc_第1页
第1页 / 共13页
计算机网络课程设计模拟以太网帧封装.doc_第2页
第2页 / 共13页
计算机网络课程设计模拟以太网帧封装.doc_第3页
第3页 / 共13页
计算机网络课程设计模拟以太网帧封装.doc_第4页
第4页 / 共13页
计算机网络课程设计模拟以太网帧封装.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《计算机网络课程设计模拟以太网帧封装.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计模拟以太网帧封装.doc(13页珍藏版)》请在三一办公上搜索。

1、计算机通信网络报告以太网帧封装模拟学 生1:组 长: 组长电话: 指导老师: 完成时间: 2015年10月 目 录1设计任务和要求211 课程设计任务212 课程设计要求22设计原理221 802.3标准帧结构222 CRC的基本实现33设计实现331 设计思路33.1.1 填充帧头部字段33.1.2填充数据字段33.1.3 计算填充CRC432 流程图43.2.1 程序流程图43.2.2 CRC计算流程图54程序源码65运行结果86总结体会111.设计任务和要求1.1课程设计任务帧是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步

2、信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包。本项目设计软件,实现以太网帧的封装、传输、解析。1.2设计要求1编写程序,从文件中读取数据;2将数据组装成IEEE802.3格式的帧;3通过两台计算机的通信,把帧从一台计算机传输到另一台计算机。 2.设计原理 2.1 802.3标准帧结构以太网Ethernet帧格式:前序(P)目的地址(SD)源地址(SA)长度数据FCS8 B6B6B2B461500B4B1. 前序字段前序字段由7个字节的交替出现的1和0组成,设置该字段的目的是指示帧的开始并便于网络中的所有接收器均能与到达帧同步。2.帧起始定界符字段它可以被看作

3、前序字段的延续。实际上,该字段的组成方式继续使用前序字段中的格式,这个一个字节的字段的前6个比特位置由交替出现的1和0构成。该字段的最后两个比特位置是11,这两位中断了同步模式并提醒接收后面跟随的是帧数据。3.目的地址字段目的地址字段确定帧的接收者。6个字节的源地址和目的地址字段是局域网中的所有工作站必须使用同样的地址结构。4.源地址字段源地址字段标识发送帧的工作站。和目前地址字段类似,源地址字段的长度六个字节。5.长度字段用于IEEE802.3的两字节长度字段定义了数据字段包含的字节数。从前序 到FCS字段的帧长度最小必须是64字节。基于最小帧长为64字节和使用六字节地址字段的要求,意味着每

4、个数据字段的最小长度为46字节。如果传输数据少于46个字节,应将数据字段填充至46字节。不过,填充字符的个数不包括在长度字段值中,数据字段的最大长度为1500字节。6.数据字段数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段:如果填入该该字段的信息少于46字节,该字段的其余部分也必须进行填充零。数据字段的最大长度为1500字节。7. 校验序列字段将计算出的CRC填入32位的FCS校验字段。帧校验序列字段提供了一种错误检测机制,包括了地址字段、长度字段和数据字段的循环冗余校验(CRC)码。2.2 CRC的基本实现利用CRC进行检错的过程

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

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

7、算流程图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 ArrayIndexOutOfBoundsException();crc = updateBytes(crc, b, off, len); /计算CRCpublic static final byte getCRC32(byte data) CRC32 crc32 = new CRC32

8、();crc32.update(data);return long2Byte(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

9、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 ArrayIndexOutOfBoundsException();crc = updateBytes(crc, b, off, len); /* * Updates checksum with specified array of bytes. * * param b the array o

10、f 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 reset() crc = 0; /* * Returns CRC-32 value. */ public long getValue() return (long)crc & 0xffffffffL; private native static int update(int crc

11、, int b); private native static int updateBytes(int crc, byte b, int off, int len); 5.运行结果1、功能:1设计界面,打开文件,将数据封装成一个或若干个帧,显示帧的各个字段(数据段可不显示)。2通过网络通信或串口通信,将帧发送到另一台计算机。3接收方对帧进行解析,显示帧的各个字段。4将数据存储到文件中,并与发送方的文件进行比较,检验通信的正确性。 首先,网络传输使用mina框架。ApacheMinaServer是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以

12、提供JAVA对象的序列化服务、虚拟机管道通信服务等),Mina可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina提供了事件驱动、异步(Mina的异步IO默认使用的是JAVANIO作为底层支持)操作的编程模型。Mina主要有1.x和2.x两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握JAVAIO、JAVANIO、JAVASocket、JAVA线程及并发库(java.util.concurrent.*)的知识。Mina同时提供了网络通信的Server端、Client端的封装,无论是哪端,Mina在整个网通通信结构

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

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号