版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、安徽工业大学 毕业设计(论文)说明书 第 页 装 订 线 摘 要 随着协议在通信等领域的广泛应用,对协议的研究越来越重要。人们需要借助 一定的平台来模拟通信协议。OMNeT+就是近年来在科学和工业领域里逐渐流行的一 种优秀的网络仿真平台,它作为离散事件仿真器,具备强大完善的图形界面接口和 可嵌入式仿真内核,可运行于多个操作系统平台,可以简便定义网络拓扑结构,具 备编程,调试和跟踪支持等功能。OMNeT+主要用于通信网络和分布式系统的仿真。 Gossiping 协议是对 Flooding 协议的改进,节点将产生或收到的数据随机转发,避 免了内爆,但增加了时延 本文系统介绍了 Flooding 协
2、议和 Gossiping 协议的仿真过程。Flooding 协议 和 Gossiping 协议是两个传统的网络路由协议,网络中的节点把收到的数据包发送 给它的所有邻居节点或者随机选择一个进行转发,这个过程一直重复直到该分组到 达 sink 节点或者该分组的生命到期。本文从如何设计模块开始,进而详细讲述了 模块功能的实现,以及配置文件的编写。最后比较了这两个协议的通信流量,性能, 时间效率。该仿真采用 C+语言编程实现。 关键词:C+ ;OMNeT+ ;Gossiping;仿真 . 安徽工业大学 毕业设计(论文)说明书 第 I 页 装 订 线 Abstract With the wide use
3、 of protocol in the communications, research for protocol becomes more and more important. People need the help of some platforms to simulate the communication protocol. OMNeT + + is an excellent network simulation platform which is popular in scientific and industrial field in recent years. As a di
4、screte event simulator, it has a complete and powerful graphical interface and has an embedded simulation kernel. It can also run on multiple operating system platforms and can define the network topology easily with programming, debugging and tracing support functions. OMNeT + + is mainly used for
5、communication networks and distributed systems simulation. Gossiping protocol develops from Flooding protocol. The node will forward messages randomly which are generated or received .It can avoid the implosion, but will increase the delay. This paper introduces the simulation of Flooding protocol a
6、nd Gossiping protocol . Flooding and gossiping protocol are the traditional network routing protocols.The network node will send received packets to all of its neighbors or randomly select a node to forward . The process is repeated until the packet reaches the sink node or TTL expires. This article
7、 starts from the design of the module, and then introduces the realization of the module function in detail and the way of writing the configuration file. Finally, we compare the two protocols in communication flows, performance and time efficiency. The simulation was programmed with c+ language. Ke
8、ywords: C + +; OMNeT + +; Gossiping; simulation 安徽工业大学 毕业设计(论文)说明书 第 II 页 装 订 线 目 录 1绪 论 .1 2开发工具的介绍-OMNET+和 VC6.0.3 2.1 OMNET+框架 .3 2.1.1 OMNeT+组成.3 2.1.2 OMNeT+结构.4 2.2 OMNET+的安装 .4 2.3 NED 语言 .6 2.3.1 NED 总概述 .6 2.3.2 NED 描述的组件 .6 2.4 仿真过程.9 2.5 配置文件OMNETPP.INI.9 2.6 VC 开发环境的介绍 .10 3FLOODING 协议的仿
9、真.12 3.1 泛洪法(FLOODING)的介绍.12 3.2 经典算法的 OMNET 仿真.13 3.3 系统设计.13 4GOSSIPING 协议的仿真.19 4.1 GOSSIPING协议的介绍 .19 4.2 系统规划与设计.20 4.2.1 算法设计.20 4.2.2 模块设计.20 application 模块的设计 .21 layer0 模块的设计 .22 Manager 模块的设计 .24 5两个协议的仿真结果及比较测试 .25 5.1 FLOODING 协议的仿真结果及测试.25 5.2 GOSSIPING 协议的仿真结果及测
10、试.29 5.3 两个协议的对比分析 .33 总 结.36 致 谢.37 参考文献.38 附录:部分源程序.39 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 0 页 装 订 线 1. 绪论 无线传感器网络(Wireless Sensor Network,WSN)是由部署在监测区域内大量 的微型传感器节点组成,通过随机自组织无线通信方式形成的网络系统。WSN 在军 事国防、环境监测、智能家居、生物医疗、危险区域远程控制等诸多领域有着广泛 的科研价值和应用前景。然而,传感器节点有限的处理能力、存储能力、通信能力 以及能量问题,决定了无线传感器网络在真实环境大规模部署前,必须对其性能、
11、运行稳定性等因素进行测试,通过整合网络资源以使网络最优化。此外,WSN 新的 协议算法在应用实施前也需要进行验证和分析。通过构建 WSN 仿真模拟环境,能够 根据需要设计网络模型,模拟大规模节点网络,在一个可控的环境中研究 WSN 的各 个运行环节,达到用相对较少的时间和费用获得网络在不同条件下的性能,因此无 线传感器网络仿真模拟技术受到越来越广泛的重视。 网络仿真是使用计算机技术构造拓扑结构,模拟网络协议的工作过程。它能设 定网络特性参数,模拟网络流量在网络中的传输过程,对网络性能进行研究和分析。 网络是一个庞杂系统,用复杂系统理论来研究网络是近几年才出现的。而 OMNeT+ 网络仿真平台的
12、出现为用复杂系统理论研究和开发网络提供了一个用力的工具,用 基于多智能体的概念和可计算理论来考察网络的运行,会对传统基于统计概念的网 络运行机制带来新的挑战。本文以工作在 OSI 的七层模型中添加一个洪泛层,并以 应用层和洪泛层为研究对象,借助 OMNET+仿真平台,基于复杂系统的概念、思想、 方法,用人工实验进行分析,并对信息随机性、突发性等引发系统堵塞的量化进行 研究。 OMNeT+的用户接口用于实现仿真程序的人机交互,OMNeT+允许模型内部机制 对用户可视化,也允许用户启动和终止仿真,并更改模型内部的变量。OMNeT+中的 图形化接口是一个用户工具,可方便用户了解模型内部的运行机制。
13、用户接口和仿真内核的交互是通过一个已定义的接口实现的。无需改变仿真内 核,就可以实现不同类型的用户接口。同样无需更改模型文件,仿真模型可在不同 接口下运行。用户可以在强大图形化用户接口下测试和调试仿真程序,并最后可在 简单快速的用户接口中运行,而且该接口支持批处理。 Flooding 协议和 Gossiping 协议.这是两个最为经典和简单的传统网络路由协 议,可应用到 WSNs 中。这两种算法也是传统网络中最基本的路由方式,不需要知道网 络拓扑结构和使用任何路由算法。每个传感器节点把自己接收到的 packet 发送给 所有它的邻居节点或者随机选择一个进行转发,这个过程一直重复直到该数据包到达
14、 sink 节点或者该数据包的 TTL 值为零( TTL 是指在传感器网络里数据包能被转发的 最大跳数) 。Gossiping 算法改进了 Flooding 过程,每个传感器节点只把自己接收 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 1 页 装 订 线 到的 packet 随机发送给它的某个邻居节点,其他不变。这种方式虽然实现简单,但 是并不实用于相关应用程序,而且还很容易带来内爆(implosion) 和交叠(overlap) 问题。在无线网络中,通过 Flooding 协议或 Gossiping 协议就可以找到一条路由, 把数据包转发到目的节点。 Flooding 协议算法的
15、实现是在 MAC 协议层和应用层之间建立一个泛洪算法层。 应用层与泛洪算法层之间有 2 个操作:应用层发起广播;FA 层递交 FAM。FA 层与 MAC 层也有 2 个操作:FA 层发送 FAM;FA 层接收 FAM,判断其是继续发送还是丢弃。 整个模块中有 3 种子模块,application 模块、layer0 模块和 manager 模块。其中 application 模块代表的是应用层,layer0 模块代表的是 FA 层,manager 模块代表 的是调度节点模块,每个模块都有自己的功能。 Gossiping 协议的仿真过程跟 Flooding 的仿真过程很类型,结构模块都是一样 的
16、额,只是在选择节点进行转发时,有所区别。该毕业设计对这两个无线网络协议 进行了仿真,验证了这两个协议的可行性。通过对结果的分析,对比了它们在转发 数据包时所产生的流量、传输时间、效率以及性能。 所以,本次毕业设计就是使用 NED 语言来描述网络的拓扑结构,用 C+语言来 实现各模块的功能。使用了开源的协议仿真开发工具OMNeT+,来部署和发布 Gossiping 协议的仿真环境。 本文将重点论述该协议仿真拓扑结构的设计。如何设计网络中节点的结构成为 设计的一个难点。而如何使用 C+编码实现模块的功能是另外一个难点。在编写拓 扑结构文件时,必须按照 NED 特有的语法。因此,本文将介绍协议仿真平
17、台- OMNeT+的使用。OMNeT +是一个开源平台,主要用于编写文件,使用 OMNeT+平台就可以实现 Flooding 协议和 Gossiping 协议的仿真。 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 2 页 装 订 线 2. 开发工具的介绍-OMNeT+和 VC6.0 2.1 OMNeT+框架 2.1.1 OMNeT+组成 OMNeT+主要由六个部分组成:仿真内核库(simulation kernel library,简 称 Sim) ,网络描述语言的编译器(network description compiler, nedc) ,图形 化的网络编辑器(graphica
18、l network description editor,GNED) ,仿真程序的图 形化用户接口Tkenv,仿真程序的命令行用户接口Cmdenv,图形化的输出工具 Plove 和 Scalar。 Sim 是仿真内核和类库,用户编写的仿真程序要同 Sim 连接, Sim 在 OMNeT+中占据最为核心重要的地位。下面详细介绍的另外两重要组成部分。 (1)网络描述(NED)语言 NED 是模块化的网络描述语言。网络描述包括大量的对组件的描述,如通道, 简单和复合模块的类型。这些组件描述可用于各种不同的网络描述中。NED 语言用 来定义模型中的网络拓扑结构,较为简单的网络拓扑可以使用 GNED,但
19、复杂网络的 拓扑描述还应该用 NED 源文件方式书写。 (2)用户接口 OMNeT+的用户接口用于实现仿真程序的人机交互,OMNeT+允许模型内部机制 对用户可视化,也允许用户启动和终止仿真,并更改模型内部的变量。OMNeT+中的 图形化接口是一个用户工具,可方便用户了解模型内部的运行机制。 用户接口和仿真内核的交互是通过一个已定义的接口实现的。无需改变仿真内 核,就可以实现不同类型的用户接口。同样无需更改模型文件,仿真模型可在不同 接口下运行。用户以在强大图形化用户接口下测试和调试仿真程序,并最后可在简 单快速的用户接口中运行,而且该接口支持批处理。 目前 OMNeT+支持两种用户接口,即
20、Tkenv 和 Cmdenv。对仿真进行的测试和调 试可以在 Tkenv 接口下进行,Tkenv 是一个简便易用的图形窗口化的用户接口, Tkenv 支持跟踪,调试和执行仿真的功能。它在执行仿真过程中的任意时刻都能够 提供详细的状态信息。Tkenv 的主要特征有:各模块的文本输出有其独立的窗口, 仿真过程中可以在 Tkenv 窗口中看到自传消息,支持仿真动画,标记断点,具有检 查窗口,可以检查和改变模型中的变量,执行过程中仿真结果的图形化显示并且结 果可以用柱状图和时间序列图显示,仿真可重新进行,快照文件用于显示模型的详 细信息。 Cmdenv 接口用于实际的仿真实验,因为 Cmdenv 支持
21、批处理。Cmdenv 是一个简 便的小型命令行接口,执行速度快。它可以在所有操作系统平台上运行。Cmdenv 可 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 3 页 装 订 线 以一次批处理配置文件中所有的仿真。 2.1.2 OMNeT+结构 OMNeT+具有模块化的结构,图 2.1 是 OMNeT+仿真的高层体系结构。 图 2.1 OMNeT+仿真程序的体系结构 图 2.1 的箭头表示两组件之间的交互,图中共有 5 个箭头,表示了组件间的 5 种关系。 (1)执行模型和 Sim:仿真内核管理将来的事件,当有事件发生时,仿真内核就 调用执行模型中的模块。执行模型的模块存储在 Sim
22、 的 main 对象中。执行模型依次 调用仿真内核的函数并使用 Sim 库中的类。 (2)Sim 和模型组件库:当仿真开始运行创建了仿真模型的时候,仿真内核就实 例化简单模块和其它的组件。当创建动态模块时,仿真内核也要引用组件库。实现 在模型组件库中注册和查寻组件也是 Sim 的功能。 (3)执行模型和 Envir:ev 对象作为 Envir 的一部分,是面向执行模型的用户接 口。仿真模型使用 ev 对象来记录调试信息。 (4)Sim 和 Envir:由 Envir 决定创建何种模型,Envir 包含主要的仿真循环,并 调用仿真内核以实现必须的功能。Envir 捕捉并处理执行过程中发生在仿真内
23、核和 或类库中的错误和异常。 (5)Envir 和 Tkenv,Cmdenv:Envir 定义了表示用户接口的 TOmnetApp 基类, Tkenv 和 Cmdenv 都是 TOmnetApp 的派生类。main()函数是 Envir 的一部分,为仿真 决定选用合适的用户接口类,创建用户接口类的实例并执行。Sim 和模型对 ev 对象 的调用通过实例化 TOmnetApp 类进行。Envir 通过 TOmnetApp 和其它类的方法实现 Tkenv 和 Cmdenv 的框架和基本功能。 可执行模型 Sim ENVIR CMDENV 或 TKENV 模型组件 库 安徽工业大学 毕业设计(论文)
24、说明书 共 55 页 第 4 页 装 订 线 2.2 OMNet+的安装 一、安装前准备 在进行安装之前,需要具备以下的软件环境: 1、MSVC 6.0.SP1(也就是说在机器中必须安装有 VC+6.0开发环境,最好是英文版的). 如果没有 SP1,AddNedFile may crash IDE due to bugs in the Visual Studio Scripting Host。 2、Ghostscript 的下载地址为: http:/ 3、OMNeT+的下载地址为:/download/release/omnetpp-3.3- win32.exe
25、 4、如果你想在 VS2005中进行编译,那么 OMNeT+3.3版本需要下载一个库文件,地 址为:/download/release/omnetpp-3.3-win32-vc80libs.zip 二、安装步骤 软件具备后,下面开始进行安装,安装步骤如下: 1、首先安装 VC+6.0开发环境,最好英文版。在安装过程中,注意勾选注册环境变 量。 2、安装 Ghostscript,一定要记住其安装目录,在进行 OMNeT+的过程中需要选 择.gsgs8.64bin下的 gswin32.exe 文件 3、现在才开始安装 OMNeT+3.3,安装过程比较简单,就是在安
26、装过程中注意选择 VC 的编译环境,本文选的是 VC6.0 Release,还有注意选择上面 gswin32.exe 的所 在目录。其他的步骤直接默认就可以进行安装了。安装后桌面会出现6个新的文件, 三个手册型的 文件(OMNeT+ API、OMNeT+ Manual、OMNeT+ Tutorial 用户在学 习之前可以先看这三个文件,可以很好的帮助你入门),三个快捷方式(OMNeT+ GNED、OMNeT+ Scalars、OMNeT+ Plove),这样就说明已经安装成功了。 三、VC 环境下集成 1、OMNeT+提供了两个宏: 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 5
27、页 装 订 线 - addMSGFileToProject: adds blank .msg file with opp_msgc invocation as Custom Build Step, and corresponding _m.cpp/h file - addNEDFileToProject: adds blank .ned file with nedtool invocation as Custom Build Step, and corresponding _n.cpp file 2、安装这两个宏的过程: (1) 打开 VC6.0 IDE,在菜单中选择 Tools-Custom
28、ize-Add-ins and Macro Files 标签-勾选 omnetpp (2) 在 Tools-Customize-Command 标签-Category 下多个了 Macro 项-选择后在 右边会显示出 addMSGFileToProject 和 addNEDFileToProject,分别将两个拖动到 VC+6.0开发环境的工具栏上面,点击确认即 可。 (3)新建 VC+项目,即可在过程中进行 OMNeT+的操作。 至此,Windows 下安装 OMNeT+的过程全部结束。后面的工作主要是详细的看 OMNeT+提供的文档,以及自带的15个例子。通过不断的修改 OMNeT+提供
29、的例子, 会更快的进行 OMNeT+学习轨迹。 2.3 NED 语言 OMNET+是面向对象的离散事件模拟工具,为基于进程式和事件驱动两种方式的 仿真提供了支持。 OMNET+采用混合式的建模方式,同时使用了 OMNET+特有的 ned(Network Discription,网络描述)语言和 C+进行建模。OMNET+的主要模型拓 扑描述语言 NED,采用它可以完成一个网络模型的描述。 网络描述包括下列组件:输 入申明、信道定义、网络定义、简单模块和复合模块定义。使用 NED 描述网络,产 生 NED 文件,该文件不能直接被 C+编译器使用,需要首先采用 OMNET+提供的编译 工具 NED
30、C 将.NED 文件编译成.cpp 文件。最后,使用 C+编译器将这些文件与用户和 自己设计的简单模块程序连接成可执行程序。 2.3.1 NED 总概述 NED 语言用来刻画定义模型的拓扑结构,方便对一个网络的模型化描述,这意 味着一个网络的描述可以包括一组元件的描述(通道,简单/复杂模型) ,这些组件 的描述可以在其他网络描述中得以重用。包含网络描述的文件带有.Ned 的后缀, .Ned 文件动态地载入到模拟程序,或者用 Ned 编译器或 C+代码链接到模拟器执行。 NED 文件可以使用任何文本编辑器或 GNED 图形编辑器来编写。 2.3.2 Ned 描述的组件 安徽工业大学 毕业设计(论
31、文)说明书 共 55 页 第 6 页 装 订 线 一个 NED 描述包括以下的组件(按任意次序排列) (1)输入指示:用于引进其它网络描述文件,引进一个网络描述后,可以使用它 所包含的模块通道等组件,当一个文件被引进,只有声明信息是可用的,并且引进 一个 D 文件并不会使该 NED 文件被编译,当父文件被 NED 编译时,例如,你可以编 译所有并连接所有的网络描述文件你可以用文件名(用 NED 扩展名也可) ,同样可以 在文件包括一条路径或者用 NED 编译器的明星行选项名引进文件的路径。 如:import ethernet; / imports ethernet.ned (2)信道定义:说明
32、一个链接类型的特征,在信道申明中包含三个属性,它们都 是可选项的:delay(每仿真秒的传输延时) ,error(比特错误率) ,datarate(信 道带宽) 。且三者出现的先后顺序没有限制。 如: channelchannel LeasedLine delaydelay 0.0018 / sec errorerror 1e-8 dataratedatarate 128000 / bit/sec endchannelendchannel (3)简单模块和复合模块定义: 简单模块:它是复合模块的基本构建成分,它通过申明它的参数和门来定义。 语法如下: simplesimple SimpleMo
33、duleName parametersparameters: /. gatesgates: /. endsimpleendsimple 复合模块:它由一个或多个子模块组成。不管是简单模块还是复合模块都可以 用做子模块。它们也都能有门和参数,在简单模块能够使用的任何地方复合模块都 能使用。相对于简单模块,它还有两个部分:子模块和链接。语法如下: modulemodule CompoundModule parametersparameters: 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 7 页 装 订 线 /. gatesgates: /. submodulessubmodules:
34、 /. connectionsconnections: /. endmoduleendmodule 其中任意部分(参数,门,子模块,链接)都是可选项。 (4) 网络定义:模块声明只定义了模块类型,要确实地获得一个仿真器能运行 的模块,需要书写网络定义,网络定义将前面定义的模块类型声明为一个仿真模块 实例,尽管可以将一个模块作为自包含的简单模块并实例为一个网络,你可能更想 使用复合模块类型。在NED文件中可以有几个网络定义仿真程序,使用NED文件可运 行其中任何一个,你可以在配置文件时选择最想使用的那个,网络定义的语法如下: networknetwork wirelessLAN: Wireles
35、sLAN parametersparameters: httpTraffic=true, distanceFromHub=truncnormal(100,60); endnetworkendnetwork wirelessLAN 是前面定义好的复合模块的名称,它应该包含关于 wirelessHost,wirelessHub 等类型进一步的复合模块的定义。自然地,只 有模块类型可以使用在网络定义中,与子模块定义一样,不需要对它所有的 指针赋值。 系统模块 复合模块复合模块 简单 模块 简单 模块 简单 模块 简单 模 块 简单 模块 简单 模 块 表示简单模块之间的通信 安徽工业大学 毕业设计(
36、论文)说明书 共 55 页 第 8 页 装 订 线 图 2.2 OMNeT中的简单模块和复合模块 2.4 仿真过程 仿真执行文件是一个独立的程序,因此它可以运行在其他没有 OMNET+或现存 模型文件的机器上。当程序被启动,它就开始读配置文件(omnetpp.ini) 。这个文 件包含一些设置控制仿真程序怎样执行,模型参数值等等。配置文件也能够规 定一些仿真运行;最简单的情况下,它们一个接一个地被仿真程序执行。 仿真输出被写进数据文件中:vector 矢量文件,scalar 标量文件,和用户输出文件。 OMNET 提供了一个名为 Plove 的 GUI 工具来观察和绘制 vector 输出文件
37、的内容。不 期望人们单独地使用 OMNET对结果文件进行处理:输出文件是一种能被读进像 Matlab 或 Octave 的数学包格式的文本文件,或被输入像 OpenOffice Calc,Gnumeric 或 MS Excel 的电子数据表。所有这些外部程序为统计分析和清晰 可见提供了丰富的功能性。 图 2.3 仿真执行过程 仿真编译过程如下: nedtool *.ned 将 ned 文件编译成_n.cc 文件。 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 9 页 装 订 线 opp_msgc *.msg将*.msg 文件编译成_m.h 和_m.cc 文件。 opp_nmakema
38、ke -f -e cc(cpp) 对目录下的所有 cc(cpp)文件进行编译, cc 或 cpp 决定于你目录下的文件。若都有,必须都进行编译。之后生成 Makefile.vc 文件。 nmake -f Makefile.vc 生成可执行文件 2.5 配置文件 omnetpp.ini 该文件使得模拟程序得知将要仿真的网络,并通过该配置文件传递一些参数。 可分为以下几部分: 【General】包含适应于所有模拟运行的常规设置和所有用户界面。 【Run 1】,【Run 2】 ,.包含每一运行设置。这些部分可能包含任意在其 他部分中被承认的实体。 【Cmdenv】包含Cmdenv专门设置。 【Tke
39、nv】包含Tkenv专门设置。 【parameters】包含在NED文件中没有赋值的模块参数值。 【OutVectors】输出矢量的配置记录。你可以通过矢量名称和模拟时间来指 定过滤。 OMNeT+这个优秀的网络仿真平台,它主要用于离散事件的模拟。OMNeT+相对 其它网络模拟器来说,使用是较为简单,但其使用方法仍然有其特殊性和复杂性。 本章详细介绍了如何使用 OMNeT+,对其体系结构,编程语法以及建模过程都作了 详细介绍与深入剖析。 OMNeT+作为传感器网络的仿真平台具有显著的优势,具体包括: OMNeT+支持用户组件库,实现了模块类型的灵活重用。 OMNeT+的面向对象特性,允许仿真内
40、核提供基类的灵活扩展。 OMNeT+提供了图形化的网络编辑器和网络、数据流查看工具。 OMNeT+提供仿真类库和用户界面,支持输入/输出、仿真数据的图形化显示、随机 数生成器、消息结构等。通过用户界面,可以跟踪调试仿真过程。 仿真环境采用 C+语言开发,并采用自定义的配置文件 omnetpp.ini 进行配置定义。 OMNeT+在仿真 802.11 的 MAC 和 Directed Diffusion 协议时,比其他的网络仿 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 10 页 装 订 线 真工具要快。 2.6 VC 开发环境的介绍 Visual C+是一个功能强大的可视化软件开发
41、工具。自1993年 Microsoft 公司 推出 Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员 进行软件开发的首选工具。 虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用的很大的 局限性,只适用于 Windows 2000,Windows XP 和 Windows NT4.0。所以实际中,更 多的是以 Visual C+6.0为平台。 Visual C+6.0不仅是一个 C+编译器,而且是一个基于 Windows 操作系统的可 视化集成开发环境(integrated development environment
42、,IDE) 。Visual C+6.0 由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。 这些组件通过一个名为 Developer Studio 的组件集成为和谐 的开发环境。 Visual C+它大概可以分成三个主要的部分: 1Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它 上面完成的,再加上它的标题赫然写着“Microsoft Visual C+” ,所以很多人理所 当然的认为,那就是 Visual C+了。其实不然,虽然 Developer Studio 提供了一 个很好的编辑器和很多
43、 Wizard,但实际上它没有任何编译和链接程序的功能,真正 完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio 并不是专门 用于 VC 的,它也同样用于 VB,VJ,VID 等 Visual Studio 家族的其他同胞兄弟。所 以不要把 Developer Studio 当成 Visual C+, 它充其量只是 Visual C+的一个壳 子而已。这一点请切记! 2MFC。从理论上来讲,MFC 也不是专用于 Visual C+,Borland C+,C+Builder 和 Symantec C+同样可以处理 MFC。同时,用 Visual C+编写代 码也并不意
44、味着一定要用 MFC,只要愿意,用 Visual C+来编写 SDK 程序,或者使 用 STL,ATL,一样没有限制。不过,Visual C+本来就是为 MFC 打造的,Visual C+中的许多特征和语言扩展也是为 MFC 而设计的,所以用 Visual C+而不用 MFC 就等于抛弃了 Visual C+中很大的一部分功能。但是,Visual C+也不等于 MFC。 3Platform SDK。这才是 Visual C+和整个 Visual Studio 的精华和灵魂, 虽然我们很少能直接接触到它。大致说来,Platform SDK 是以 Microsoft C/C+编 译器为核心(不是
45、Visual C+,看清楚了) ,配合 MASM,辅以其他一些工具和文档 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 11 页 装 订 线 资料。上面说到 Developer Studio 没有编译程序的功能,那么这项工作是由谁来完 成的呢?是 CL,是 NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才 是构成 Visual Studio 的基石。 在 VC+中,我们可以编写代码实现协议的仿真。 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 12 页 装 订 线 3. Flooding 协议的仿真 3.1 泛洪法(Flooding)的介绍 泛洪法是一种传统的网
46、络路由协议,如图3.1所示。节点S希望发送数据给节点 D,首先通过网络将数据副本传给它的每一邻居节点,每一个邻居节点又将其传输 给各自的邻居节点,如此继续下去,直到将数据传到目标节点D为止,或者为该数 据所设定的生存时间变为零或者所有节点都拥有此数据副本为止。优点是实现简单, 不需要为保持网络拓扑信息和实现复杂的路由发现算法而消耗计算资源;适用于健 壮性要求高的场合。缺点是存在信息爆炸问题,即出现一个节点可能得到一个数 据多个副本的现象; 会出现部分重叠现象,如果处于同一观测环境的两个相邻同 类传感器同时对一个事件做出反应,二者采集的数据性质相同,数值相近,那么, 这两个节点周围的邻居节点将收
47、到双份数据副本;造成盲目使用资源,即扩散法 不考虑各节点能量可用状况,因而无法做出相应的自适应路由选择。 图3.1 扩散法 泛洪法是基于广播的路由协议,当某个节点完成广播消息的初始化后,就把这 条消息发送给它的所有邻居节点。邻居节点是指处于该节点的传输范围内的节点。 当某个节点第一次接收到FAM(flooding algorithm message)时,它就接着广播给 自己的邻居节点,如已收到过就丢弃该FAM,最终实现整个网络的每个节点都收到过 FAM。 S A B C D E F 数据 数据 数据 数据 数据 数据 数据 数据数据 数据 安徽工业大学 毕业设计(论文)说明书 共 55 页 第
48、 13 页 装 订 线 3.2 经典算法的 OMNET 仿真 图 3.2 OMNET 仿真框架图 用 OMNET 仿真路由算法的模块图如图 3.2 所示,传感器节点由四个模块构成, sm_application 主要是应用层模块的程序,sm_cordinator 模块是一个协调模块, 协调各部分的模块工作,sm_layer0 模块负责节点间的数据包的传送,以及路由的 选择,sm_energy 模块是能量模块。 所以,整个仿真过程就是设计这些模块,并用 C+代码实现相应的功能即可。 3.3 系统设计 本系统是基于 OMNeT+的协议仿真,因此从技术要求上系统设计的基本框架如 下: 泛洪算法的实现
49、是在 MAC 协议层和应用层之间建立一个泛洪算法层。应用层与 泛洪算法层之间有 2 个操作:应用层发起广播;FA 层递交 FAM。FA 层与 MAC 层也有 2 个操作:FA 层发送 FAM;FA 层接收 FAM,判断其是继续发送还是丢弃。 sensor_node sm_application sm_cordinator sm_layer0 sm_energy 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 14 页 装 订 线 如果 3.3 所示: 图 3.3 仿真网络实体的体系结构 在仿真中,所有的 FAM 直接发往 MAC 地址,MAC 层接收 FAM 后直接送到 FA 层处 理
50、,不再需要传输层协议和路由层。 Flooding 算法的程序实现相当简单,具体如下: 节点 i 初始化 FA 发送(AP 层) initiate(i); 初始化 send(); 发送 FAM,FA 层一 MAC 层 deliver(); 递交 FAM,FA 层一 AP 层 FA 层收到 FAM 后处理(FA 层) if(receive()= true) 判断是否第一次收到该 FAM deliver();递交 FAM,FA 层一 AP 层 send(); 转发 FAM,FA 层一 MAC 层 else discard();丢弃 FAM 应用层 物理层 泛洪层 MAC 层 发起广播 发送 Send
51、( ) 交付 Deliver() 接收 Receive( ) 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 15 页 装 订 线 OMNET 中的模块如下图 3.4: Application Layer0 Node Manage r 节点模块 网络模块 图 3.4 网络各模块 整个模块中有3种子模块,application模块、layer0模块和manager模块。其中 application模块代表的是应用层,layer0模块代表的是FA层,manager模块代表的 是调度节点模块,每个模块都有自己的功能。 从图中我们可以看到,Manager 是整个系统的控制中心,它负责对网络模块
52、的 控制。对初始化参数进行检查,随机生成节点的位置,判断哪些节点在传输范围内, 将它们连接,并构成相应的连接矩阵。还负责接收一些更新消息。主要就是协调 application 模块、layer0 模块、manager 模块之间的通信以实现仿真过程。 所以,整个系统分成两个大模块有两个:Manager 和其他两个模块。Manager 是 控制器,其他两个模块主要针对收到不同的消息进行不同的处理。整个开发步骤也 是分为两步: 第一,两个简单模块的设计。主要是根据不同的功能设计出简单模块,并用 C+代码实现相应的功能。 第二,Manger 模块的设计。 application 模块、layer0 模
53、块则完成各自相应的功能。 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 16 页 装 订 线 application 模块主要实现从 cSimpleModule 类继承的三个虚函数以及用户自定义 函数 processFlood( ): void initialize() void handleMessage(cMessage *msg) void finish() void processGossip(cMessage *msg) 在 initialize()中初始化一些变量 last_seen_id ,msgcount,如果是节点 0 则每隔 10s 产生一个自消息。 在 hand
54、leMessage(cMessage *msg)中对接收到的消息进行处理: 如果收到的消息类型为 M_LOWHIGH,则用 processFlood()函数进行处理。 如果收到的消息类型为 M_SELF,产生一个新消息-flood 进行相关设置后,通 过 lowergate_out 发送出去并重新设置计时器。如果收到其他类型的消息则报错, 并结束仿真。 在 finish()函数中只是简单的输出该节点转发或者产生了多少个信息。 在用户自定义函数 processFlood()中,主要实现的功能是: 判断当前节点是否为源节点,若是则删除消息 msg,(因为源点只产生消息, 不转发消息)如不是则: 设
55、置消息类型为 M_HIGHLOW 经过一定延时后通过 lowergate_out 转发出去,更新颜色,更新计数器,更新 last_seen_id 的值。 Application 模块的结构如图 3.5 所示: 启动 发送自消息 判断收到 消息类型 调用 process() 函数处理 产生名为 Flood 的消息 出错,结束仿真 M_LOWHIGH 其他类型 M_SELF 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 17 页 装 订 线 图 3.5 application 模块的功能 Layer0 模块主要实现从 cSimpleModule 类继承的两个虚函数 initialize(
56、)和 activity()。 Initialize()为空函数,以后可以在这里面添加想要初始化的变量。 Activity()函数为 Layer0 模块的核心函数,整个功能都在此实现。 Activity 函数中有个 while(1)循环,一直用 receive()接收消息,然后开 始判断。 如果消息类型为 M_NODE:将消息设置为 M_LOWHIGH,通过 uppergate_out 转发出 去;如果消息类型为 M_HIGHLOW: 首先将消息类型设置为 M_NODE 然后产生通过所有已连接的门进行转发,如果该 门所连接的节点已经收到过信息,则不发送。当所有的节点都已收到过消息,则终 止仿真。
57、Layer0 模块的结构如图 3.6 所示: 图 3.6 layer0 模块的功能 Manager 模块主要实现从 cSimpleModule 类继承的两个虚函数 initialize() 启动 接收消息 设为 M_NODE 并 转发 设为 M_LOWHIGH 并 转发 出错,终止仿真 判断消 息类型 M_HIGHLOW M_NODE 其他类型 安徽工业大学 毕业设计(论文)说明书 共 55 页 第 18 页 装 订 线 和 activity()。 在 initialize()中,实现以下功能:检查在.h 文件中初始化的参数和在.ini 中初始化的是否相同,初始化连接矩阵,一开始全设为 fal
58、se,随机产生节点的位置 并显示, 判断传输范围内有哪些节点,并将这些节点连接,更新连接矩阵, 更新 每一节点的数据结构,在 activity()函数中,有一个 while(1)循环接收消息并判断 是否为更新信号强度的消息,如果是则更新,不是则报错,并结束仿真。 Manager 模块的结构如图 3.7 所示: 图 3.7 manger 模块的功能图 manager 模块主要功能是协调各模块之间的通信,并初始化节点的位置。 启动 接收消息 判断消 息类型 用 updateSignalStrength( msg)处理 出错,结束仿真 M_UPDSSTR ENGTH 其他类型 安徽工业大学 毕业设计
59、(论文)说明书 共 55 页 第 19 页 装 订 线 4. Gossiping 协议 4.1 Gossiping 协议的介绍 Gossiping 协议是在泛洪协议的基础上进行改进而提出的。它传播信息的途径 是通过随机的选择一个邻居节点,获得信息的邻居节点以同样的方式随机的选择 下 一个节点进行信息的传递。这种方式避免了以广播形式进行信息传播的能量消耗, 但其代价是延长了信息的传递时间。虽然 Gossiping 协议在一定程度上 解决了信息 的内爆,但是仍然存在信息的重叠现象。 Gossiping 协议,又称 Rumor Mongering 协议,因为消息在网络 中的传播与流 行病在易感人群中
60、传播的方式相似,传播的下一跳是随机的,故又称流行病协议 (Epidemiological Protocol) 。 Rumor Mongering 协议的简单描述如下: 节点 n 通过 将消息 m 发送给随机选择的 B 个邻居 来完成本次消息的传播; When (node p receives a message m from node q) If(p has received m no more than F times) p sends m to B uniformly randomlychosen neighbors that p knows have not yet seen m. 其中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部门工作计划范文5篇
- 初中老师工作计划
- 建团100周年团员活动学习心得10篇
- 2022幼师下半年工作计划
- 2022年上半年应急管理工作总结-应急管理工作总结报告范文五篇
- 2024年度能源管理系统软件项目承包合同3篇
- 四年级语文说课稿15篇
- 高中自我鉴定6篇
- 冀教版小学数学三年级数学《认识周长》 课件
- 第15课《十月革命与苏联社会主义建设》中职高一下学期高教版(2023)世界历史全一册
- (完整版)政府工程项目代建管理方案(范本)
- 车辆维修服务投标方案
- 和与积的奇偶性
- 第13讲醛酮(教师版)-高二化学讲义(人教版2019选择性必修3)
- 大全高压电工安全培训课件
- 临沂球迷协会筹备申请书
- 消防控制室值班记录样本
- 大学生职业生涯规划与就业创业指导知到章节答案智慧树2023年四川水利职业技术学院
- 刑事诉讼法学重点概念
- 网络创业智慧树知到答案章节测试2023年海南经贸职业技术学院
- 高中英语新课标新增词汇汇总1
评论
0/150
提交评论