1、无线传感器网络摘 要 随着协议在通信等领域的广泛应用,对协议的研究越来越重要。人们需要借助一定的平台来模拟通信协议。OMNeT+就是近年来在科学和工业领域里逐渐流行的一种优秀的网络仿真平台,它作为离散事件仿真器,具备强大完善的图形界面接口和可嵌入式仿真内核,可运行于多个操作系统平台,可以简便定义网络拓扑结构,具备编程,调试和跟踪支持等功能。OMNeT+主要用于通信网络和分布式系统的仿真。Gossiping协议是对Flooding协议的改进,节点将产生或收到的数据随机转发,避免了内爆,但增加了时延 本文系统介绍了Flooding协议和Gossiping协议的仿真过程。Flooding协议和Gos
2、siping协议是两个传统的网络路由协议,网络中的节点把收到的数据包发送给它的所有邻居节点或者随机选择一个进行转发,这个过程一直重复直到该分组到达sink 节点或者该分组的生命到期。本文从如何设计模块开始,进而详细讲述了模块功能的实现,以及配置文件的编写。最后比较了这两个协议的通信流量,性能,时间效率。该仿真采用C+语言编程实现。关键词:C+ ;OMNeT+ ;Gossiping;仿真.Abstract With the wide use of protocol in the communications, research for protocol becomes more and more
3、 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 discrete event simulator, it has a complete and powerful graphical interface and
4、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 communication networks and distributed systems simulation. Gossiping protocol d
5、evelops 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 and Gossiping protocol . Flooding and gossiping protocol are the traditional net
6、work 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 starts from the design of the module, and then introduces the realization of t
7、he 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.Keywords: C + +; OMNeT + +; Gossiping; simulation目 录1绪 论12开发工具的介绍-OMNET+和VC6.032.1
8、 OMNeT+框架32.1.1OMNeT+组成32.1.2OMNeT+结构42.2 OMNet+的安装42.3 NED语言6 2.3.1 NED总概述6 2.3.2 NED描述的组件62.4 仿真过程92.5 配置文件omnetpp.ini92.6 VC开发环境的介绍103FLOODING协议的仿真123.1 泛洪法(FLOODING)的介绍123.2 经典算法的OMNET仿真133.3 系统设计134GOSSIPING协议的仿真194.1 Gossiping协议的介绍194.2 系统规划与设计204.2.1算法设计204.2.2模块设计20 4.2.2.1 application模块的设计2
9、1 4.2.2.2 layer0模块的设计22 4.2.2.3 Manager模块的设计245两个协议的仿真结果及比较测试255.1 FLOODING协议的仿真结果及测试255.2 GOSSIPING协议的仿真结果及测试295.3 两个协议的对比分析33总 结36致 谢37参考文献38附录:部分源程序39 1. 绪论 无线传感器网络(Wireless Sensor Network,WSN)是由部署在监测区域内大量的微型传感器节点组成,通过随机自组织无线通信方式形成的网络系统。WSN在军事国防、环境监测、智能家居、生物医疗、危险区域远程控制等诸多领域有着广泛的科研价值和应用前景。然而,传感器节点
10、有限的处理能力、存储能力、通信能力以及能量问题,决定了无线传感器网络在真实环境大规模部署前,必须对其性能、运行稳定性等因素进行测试,通过整合网络资源以使网络最优化。此外,WSN新的协议算法在应用实施前也需要进行验证和分析。通过构建WSN仿真模拟环境,能够根据需要设计网络模型,模拟大规模节点网络,在一个可控的环境中研究WSN的各个运行环节,达到用相对较少的时间和费用获得网络在不同条件下的性能,因此无线传感器网络仿真模拟技术受到越来越广泛的重视。网络仿真是使用计算机技术构造拓扑结构,模拟网络协议的工作过程。它能设定网络特性参数,模拟网络流量在网络中的传输过程,对网络性能进行研究和分析。网络是一个庞
11、杂系统,用复杂系统理论来研究网络是近几年才出现的。而OMNeT+网络仿真平台的出现为用复杂系统理论研究和开发网络提供了一个用力的工具,用基于多智能体的概念和可计算理论来考察网络的运行,会对传统基于统计概念的网络运行机制带来新的挑战。本文以工作在OSI的七层模型中添加一个洪泛层,并以应用层和洪泛层为研究对象,借助OMNET+仿真平台,基于复杂系统的概念、思想、方法,用人工实验进行分析,并对信息随机性、突发性等引发系统堵塞的量化进行研究。 OMNeT+的用户接口用于实现仿真程序的人机交互,OMNeT+允许模型内部机制对用户可视化,也允许用户启动和终止仿真,并更改模型内部的变量。OMNeT+中的图形
12、化接口是一个用户工具,可方便用户了解模型内部的运行机制。用户接口和仿真内核的交互是通过一个已定义的接口实现的。无需改变仿真内核,就可以实现不同类型的用户接口。同样无需更改模型文件,仿真模型可在不同接口下运行。用户可以在强大图形化用户接口下测试和调试仿真程序,并最后可在简单快速的用户接口中运行,而且该接口支持批处理。Flooding协议和Gossiping协议.这是两个最为经典和简单的传统网络路由协议,可应用到WSNs中。这两种算法也是传统网络中最基本的路由方式,不需要知道网络拓扑结构和使用任何路由算法。每个传感器节点把自己接收到的packet 发送给所有它的邻居节点或者随机选择一个进行转发,这
13、个过程一直重复直到该数据包到达sink 节点或者该数据包的TTL值为零( TTL 是指在传感器网络里数据包能被转发的最大跳数) 。Gossiping 算法改进了Flooding 过程,每个传感器节点只把自己接收到的packet 随机发送给它的某个邻居节点,其他不变。这种方式虽然实现简单,但是并不实用于相关应用程序,而且还很容易带来内爆(implosion) 和交叠(overlap) 问题。在无线网络中,通过Flooding协议或Gossiping协议就可以找到一条路由,把数据包转发到目的节点。 Flooding协议算法的实现是在MAC协议层和应用层之间建立一个泛洪算法层。应用层与泛洪算法层之间
14、有2个操作:应用层发起广播;FA层递交FAM。FA层与MAC层也有2个操作:FA层发送FAM;FA层接收FAM,判断其是继续发送还是丢弃。整个模块中有3种子模块,application模块、layer0 模块和manager模块。其中application模块代表的是应用层,layer0模块代表的是FA层,manager模块代表的是调度节点模块,每个模块都有自己的功能。 Gossiping协议的仿真过程跟Flooding的仿真过程很类型,结构模块都是一样的额,只是在选择节点进行转发时,有所区别。该毕业设计对这两个无线网络协议进行了仿真,验证了这两个协议的可行性。通过对结果的分析,对比了它们在转
15、发数据包时所产生的流量、传输时间、效率以及性能。所以,本次毕业设计就是使用NED语言来描述网络的拓扑结构,用C+语言来实现各模块的功能。使用了开源的协议仿真开发工具OMNeT+,来部署和发布Gossiping协议的仿真环境。本文将重点论述该协议仿真拓扑结构的设计。如何设计网络中节点的结构成为设计的一个难点。而如何使用C+编码实现模块的功能是另外一个难点。在编写拓扑结构文件时,必须按照NED特有的语法。因此,本文将介绍协议仿真平台-OMNeT+的使用。OMNeT +是一个开源平台,主要用于编写文件,使用OMNeT+平台就可以实现Flooding协议和Gossiping协议的仿真。2. 开发工具的
16、介绍-OMNeT+和VC6.02.1 OMNeT+框架2.1.1 OMNeT+组成 OMNeT+主要由六个部分组成:仿真内核库(simulation kernel library,简称Sim),网络描述语言的编译器(network description compiler, nedc),图形化的网络编辑器(graphical network description editor,GNED),仿真程序的图形化用户接口Tkenv,仿真程序的命令行用户接口Cmdenv,图形化的输出工具Plove和Scalar。 Sim是仿真内核和类库,用户编写的仿真程序要同Sim连接,Sim在OMNeT+中占据最为
17、核心重要的地位。下面详细介绍的另外两重要组成部分。 (1)网络描述(NED)语言NED是模块化的网络描述语言。网络描述包括大量的对组件的描述,如通道,简单和复合模块的类型。这些组件描述可用于各种不同的网络描述中。NED语言用来定义模型中的网络拓扑结构,较为简单的网络拓扑可以使用GNED,但复杂网络的拓扑描述还应该用NED源文件方式书写。 (2)用户接口 OMNeT+的用户接口用于实现仿真程序的人机交互,OMNeT+允许模型内部机制对用户可视化,也允许用户启动和终止仿真,并更改模型内部的变量。OMNeT+中的图形化接口是一个用户工具,可方便用户了解模型内部的运行机制。 用户接口和仿真内核的交互是
18、通过一个已定义的接口实现的。无需改变仿真内核,就可以实现不同类型的用户接口。同样无需更改模型文件,仿真模型可在不同接口下运行。用户以在强大图形化用户接口下测试和调试仿真程序,并最后可在简单快速的用户接口中运行,而且该接口支持批处理。目前OMNeT+支持两种用户接口,即Tkenv和Cmdenv。对仿真进行的测试和调试可以在Tkenv接口下进行,Tkenv是一个简便易用的图形窗口化的用户接口,Tkenv支持跟踪,调试和执行仿真的功能。它在执行仿真过程中的任意时刻都能够提供详细的状态信息。Tkenv的主要特征有:各模块的文本输出有其独立的窗口,仿真过程中可以在Tkenv窗口中看到自传消息,支持仿真动
19、画,标记断点,具有检查窗口,可以检查和改变模型中的变量,执行过程中仿真结果的图形化显示并且结果可以用柱状图和时间序列图显示,仿真可重新进行,快照文件用于显示模型的详细信息。 Cmdenv接口用于实际的仿真实验,因为Cmdenv支持批处理。Cmdenv是一个简便的小型命令行接口,执行速度快。它可以在所有操作系统平台上运行。Cmdenv可以一次批处理配置文件中所有的仿真。2.1.2 OMNeT+结构 OMNeT+具有模块化的结构,图2.1是OMNeT+仿真的高层体系结构。 CMDENV 或 TKENV ENVIR Sim可执行模型模型组件 库 图2.1 OMNeT+仿真程序的体系结构图2.1的箭头
20、表示两组件之间的交互,图中共有5个箭头,表示了组件间的5种关系。 (1)执行模型和Sim:仿真内核管理将来的事件,当有事件发生时,仿真内核就调用执行模型中的模块。执行模型的模块存储在Sim的main对象中。执行模型依次调用仿真内核的函数并使用Sim库中的类。 (2)Sim和模型组件库:当仿真开始运行创建了仿真模型的时候,仿真内核就实例化简单模块和其它的组件。当创建动态模块时,仿真内核也要引用组件库。实现在模型组件库中注册和查寻组件也是Sim的功能。 (3)执行模型和Envir:ev对象作为Envir的一部分,是面向执行模型的用户接口。仿真模型使用ev对象来记录调试信息。 (4)Sim和Envi
21、r:由Envir决定创建何种模型,Envir包含主要的仿真循环,并调用仿真内核以实现必须的功能。Envir捕捉并处理执行过程中发生在仿真内核和或类库中的错误和异常。 (5)Envir和Tkenv,Cmdenv:Envir定义了表示用户接口的TOmnetApp基类,Tkenv和Cmdenv都是TOmnetApp的派生类。main()函数是Envir的一部分,为仿真决定选用合适的用户接口类,创建用户接口类的实例并执行。Sim和模型对ev对象的调用通过实例化TOmnetApp类进行。Envir通过TOmnetApp和其它类的方法实现Tkenv和Cmdenv的框架和基本功能。2.2 OMNet+的安装
22、一、安装前准备在进行安装之前,需要具备以下的软件环境:1、MSVC 6.0.SP1(也就是说在机器中必须安装有VC+6.0开发环境,最好是英文版的). 如果没有SP1,AddNedFile may crash IDE due to bugs in the Visual Studio Scripting Host。2、Ghostscript的下载地址为:3、OMNeT+的下载地址为:http:/omnetpp.org/download/release/omnetpp-3.3-win32.exe4、如果你想在VS2005中进行编译,那么OMNeT+3.3版本需要下载一个库文件,地址为:http:/
23、omnetpp.org/download/release/omnetpp-3.3-win32-vc80libs.zip二、安装步骤软件具备后,下面开始进行安装,安装步骤如下:1、首先安装VC+6.0开发环境,最好英文版。在安装过程中,注意勾选注册环境变量。2、安装Ghostscript,一定要记住其安装目录,在进行OMNeT+的过程中需要选择.gsgs8.64bin下的 gswin32.exe文件3、现在才开始安装OMNeT+3.3,安装过程比较简单,就是在安装过程中注意选择VC的编译环境,本文选的是VC6.0 Release,还有注意选择上面gswin32.exe的所在目录。其他的步骤直接默
24、认就可以进行安装了。安装后桌面会出现6个新的文件,三个手册型的 文件(OMNeT+ API、OMNeT+ Manual、OMNeT+ Tutorial用户在学习之前可以先看这三个文件,可以很好的帮助你入门),三个快捷方式(OMNeT+ GNED、OMNeT+ Scalars、OMNeT+ Plove),这样就说明已经安装成功了。三、VC环境下集成1、OMNeT+提供了两个宏:- addMSGFileToProject: adds blank .msg file with opp_msgc invocation asCustom Build Step, and corresponding _m.
25、cpp/h file - addNEDFileToProject: adds blank .ned file with nedtool invocation asCustom Build Step, and corresponding _n.cpp file2、安装这两个宏的过程:(1) 打开VC6.0 IDE,在菜单中选择Tools-Customize-Add-ins and Macro Files标签-勾选omnetpp(2) 在Tools-Customize-Command标签-Category下多个了Macro项-选择后在右边会显示出 addMSGFileToProject和addNE
26、DFileToProject,分别将两个拖动到VC+6.0开发环境的工具栏上面,点击确认即 可。(3)新建VC+项目,即可在过程中进行OMNeT+的操作。至此,Windows下安装OMNeT+的过程全部结束。后面的工作主要是详细的看OMNeT+提供的文档,以及自带的15个例子。通过不断的修改OMNeT+提供 的例子,会更快的进行OMNeT+学习轨迹。2.3 NED语言OMNET+是面向对象的离散事件模拟工具,为基于进程式和事件驱动两种方式的仿真提供了支持。 OMNET+采用混合式的建模方式,同时使用了OMNET+特有的ned(Network Discription,网络描述)语言和C+进行建模
27、。OMNET+的主要模型拓扑描述语言NED,采用它可以完成一个网络模型的描述。 网络描述包括下列组件:输入申明、信道定义、网络定义、简单模块和复合模块定义。使用NED描述网络,产生NED文件,该文件不能直接被C+编译器使用,需要首先采用OMNET+提供的编译工具NEDC将.NED文件编译成.cpp文件。最后,使用C+编译器将这些文件与用户和自己设计的简单模块程序连接成可执行程序。2.3.1 NED总概述NED语言用来刻画定义模型的拓扑结构,方便对一个网络的模型化描述,这意味着一个网络的描述可以包括一组元件的描述(通道,简单/复杂模型),这些组件的描述可以在其他网络描述中得以重用。包含网络描述的
28、文件带有.Ned的后缀,.Ned文件动态地载入到模拟程序,或者用Ned编译器或C+代码链接到模拟器执行。NED文件可以使用任何文本编辑器或GNED图形编辑器来编写。2.3.2 Ned描述的组件一个NED描述包括以下的组件(按任意次序排列)(1)输入指示:用于引进其它网络描述文件,引进一个网络描述后,可以使用它所包含的模块通道等组件,当一个文件被引进,只有声明信息是可用的,并且引进一个D文件并不会使该NED文件被编译,当父文件被NED编译时,例如,你可以编译所有并连接所有的网络描述文件你可以用文件名(用NED扩展名也可),同样可以在文件包括一条路径或者用NED编译器的明星行选项名引进文件的路径。
29、如:import ethernet; / imports ethernet.ned(2)信道定义:说明一个链接类型的特征,在信道申明中包含三个属性,它们都是可选项的:delay(每仿真秒的传输延时),error(比特错误率),datarate(信道带宽)。且三者出现的先后顺序没有限制。如: channel LeasedLinedelay 0.0018 / secerror 1e-8datarate 128000 / bit/secendchannel(3)简单模块和复合模块定义:简单模块:它是复合模块的基本构建成分,它通过申明它的参数和门来定义。语法如下:simple SimpleModule
30、Nameparameters:/.gates:/.endsimple复合模块:它由一个或多个子模块组成。不管是简单模块还是复合模块都可以用做子模块。它们也都能有门和参数,在简单模块能够使用的任何地方复合模块都能使用。相对于简单模块,它还有两个部分:子模块和链接。语法如下:module CompoundModuleparameters:/.gates:/.submodules:/. connections:/. endmodule其中任意部分(参数,门,子模块,链接)都是可选项。(4) 网络定义:模块声明只定义了模块类型,要确实地获得一个仿真器能运行的模块,需要书写网络定义,网络定义将前面定义的
31、模块类型声明为一个仿真模块实例,尽管可以将一个模块作为自包含的简单模块并实例为一个网络,你可能更想使用复合模块类型。在NED文件中可以有几个网络定义仿真程序,使用NED文件可运行其中任何一个,你可以在配置文件时选择最想使用的那个,网络定义的语法如下:network wirelessLAN: WirelessLANparameters:httpTraffic=true,distanceFromHub=truncnormal(100,60);endnetworkwirelessLAN是前面定义好的复合模块的名称,它应该包含关于wirelessHost,wirelessHub等类型进一步的复合模块的
32、定义。自然地,只有模块类型可以使用在网络定义中,与子模块定义一样,不需要对它所有的指针赋值。系统模块复合模块复合模块简单模块简单模块简单模块简单模块简单模 块简单模 块表示简单模块之间的通信 图2.2 OMNeT中的简单模块和复合模块2.4 仿真过程仿真执行文件是一个独立的程序,因此它可以运行在其他没有OMNET+或现存模型文件的机器上。当程序被启动,它就开始读配置文件(omnetpp.ini)。这个文件包含一些设置控制仿真程序怎样执行,模型参数值等等。配置文件也能够规定一些仿真运行;最简单的情况下,它们一个接一个地被仿真程序执行。仿真输出被写进数据文件中:vector矢量文件,scalar标
33、量文件,和用户输出文件。OMNET提供了一个名为Plove的GUI工具来观察和绘制vector输出文件的内容。不期望人们单独地使用OMNET对结果文件进行处理:输出文件是一种能被读进像Matlab或Octave的数学包格式的文本文件,或被输入像OpenOffice Calc,Gnumeric 或MS Excel的电子数据表。所有这些外部程序为统计分析和清晰可见提供了丰富的功能性。图2.3 仿真执行过程仿真编译过程如下: nedtool *.ned 将ned文件编译成_n.cc文件。 opp_msgc *.msg将*.msg文件编译成_m.h和_m.cc文件。 opp_nmakemake -f
34、-e cc(cpp) 对目录下的所有cc(cpp)文件进行编译,cc或cpp决定于你目录下的文件。若都有,必须都进行编译。之后生成Makefile.vc文件。 nmake -f Makefile.vc生成可执行文件2.5 配置文件omnetpp.ini 该文件使得模拟程序得知将要仿真的网络,并通过该配置文件传递一些参数。 可分为以下几部分: 【General】包含适应于所有模拟运行的常规设置和所有用户界面。 【Run 1】,【Run 2】,.包含每一运行设置。这些部分可能包含任意在其他部分中被承认的实体。 【Cmdenv】包含Cmdenv专门设置。 【Tkenv】包含Tkenv专门设置。 【p
35、arameters】包含在NED文件中没有赋值的模块参数值。 【OutVectors】输出矢量的配置记录。你可以通过矢量名称和模拟时间来指定过滤。OMNeT+这个优秀的网络仿真平台,它主要用于离散事件的模拟。OMNeT+相对其它网络模拟器来说,使用是较为简单,但其使用方法仍然有其特殊性和复杂性。本章详细介绍了如何使用OMNeT+,对其体系结构,编程语法以及建模过程都作了详细介绍与深入剖析。 OMNeT+作为传感器网络的仿真平台具有显著的优势,具体包括:OMNeT+支持用户组件库,实现了模块类型的灵活重用。OMNeT+的面向对象特性,允许仿真内核提供基类的灵活扩展。OMNeT+提供了图形化的网络
36、编辑器和网络、数据流查看工具。OMNeT+提供仿真类库和用户界面,支持输入/输出、仿真数据的图形化显示、随机数生成器、消息结构等。通过用户界面,可以跟踪调试仿真过程。仿真环境采用C+语言开发,并采用自定义的配置文件omnetpp.ini进行配置定义。 OMNeT+在仿真802.11的MAC和Directed Diffusion协议时,比其他的网络仿真工具要快。2.6 VC开发环境的介绍 Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。 虽然微
37、软公司推出了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,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Stud
38、io的组件集成为和谐的开发环境。 Visual C+它大概可以分成三个主要的部分: 1Developer Studio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其
39、他同胞兄弟。所以不要把Developer Studio当成Visual C+, 它充其量只是Visual C+的一个壳子而已。这一点请切记! 2MFC。从理论上来讲,MFC也不是专用于Visual C+,Borland C+,C+Builder和Symantec C+同样可以处理MFC。同时,用Visual C+编写代码也并不意味着一定要用MFC,只要愿意,用Visual C+来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C+本来就是为MFC打造的,Visual C+中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C+而不用MFC就等于抛弃了Vis
40、ual C+中很大的一部分功能。但是,Visual C+也不等于MFC。 3Platform SDK。这才是Visual C+和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C+编译器为核心(不是Visual C+,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。在VC+中,我们可以编写代码实现协议的仿真
41、。3. Flooding协议的仿真3.1 泛洪法(Flooding)的介绍 泛洪法是一种传统的网络路由协议,如图3.1所示。节点S希望发送数据给节点D,首先通过网络将数据副本传给它的每一邻居节点,每一个邻居节点又将其传输给各自的邻居节点,如此继续下去,直到将数据传到目标节点D为止,或者为该数据所设定的生存时间变为零或者所有节点都拥有此数据副本为止。优点是实现简单,不需要为保持网络拓扑信息和实现复杂的路由发现算法而消耗计算资源;适用于健壮性要求高的场合。缺点是存在信息爆炸问题,即出现一个节点可能得到一个数据多个副本的现象; 会出现部分重叠现象,如果处于同一观测环境的两个相邻同类传感器同时对一个事
42、件做出反应,二者采集的数据性质相同,数值相近,那么,这两个节点周围的邻居节点将收到双份数据副本;造成盲目使用资源,即扩散法不考虑各节点能量可用状况,因而无法做出相应的自适应路由选择。S数据数据数据数据数据FECBA数据数据数据数据数据D 图3.1 扩散法泛洪法是基于广播的路由协议,当某个节点完成广播消息的初始化后,就把这条消息发送给它的所有邻居节点。邻居节点是指处于该节点的传输范围内的节点。当某个节点第一次接收到FAM(flooding algorithm message)时,它就接着广播给自己的邻居节点,如已收到过就丢弃该FAM,最终实现整个网络的每个节点都收到过FAM。3.2 经典算法的O
43、MNET仿真 sensor_nodesm_applicationsm_layer0sm_cordinatorsm_energy图3.2 OMNET 仿真框架图用OMNET仿真路由算法的模块图如图3.2所示,传感器节点由四个模块构成,sm_application主要是应用层模块的程序,sm_cordinator模块是一个协调模块,协调各部分的模块工作,sm_layer0模块负责节点间的数据包的传送,以及路由的选择,sm_energy模块是能量模块。所以,整个仿真过程就是设计这些模块,并用C+代码实现相应的功能即可。 3.3 系统设计本系统是基于OMNeT+的协议仿真,因此从技术要求上系统设计的基
44、本框架如下:泛洪算法的实现是在MAC协议层和应用层之间建立一个泛洪算法层。应用层与泛洪算法层之间有2个操作:应用层发起广播;FA层递交FAM。FA层与MAC层也有2个操作:FA层发送FAM;FA层接收FAM,判断其是继续发送还是丢弃。如果3.3所示: 应用层交付Deliver() 发起广播 泛洪层接收Receive()发送Send()MAC层 物理层图3.3 仿真网络实体的体系结构在仿真中,所有的FAM直接发往MAC地址,MAC层接收FAM后直接送到FA层处理,不再需要传输层协议和路由层。Flooding算法的程序实现相当简单,具体如下:节点i初始化FA发送(AP层)initiate(i);
45、初始化send(); 发送FAM,FA层一MAC层deliver(); 递交FAM,FA层一AP层FA层收到FAM后处理(FA层)if(receive()= true) 判断是否第一次收到该FAMdeliver();递交FAM,FA层一AP层send(); 转发FAM,FA层一MAC层 else discard();丢弃FAMOMNET中的模块如下图3.4:ApplicationLayer0NodeManager节点模块网络模块图3.4 网络各模块整个模块中有3种子模块,application模块、layer0模块和manager模块。其中application模块代表的是应用层,layer0模块代表的是FA层,manager模块代表的是调度节点模块,每个模块都有自己的功能。 从图中我们可以看到,Manager是整个系统的控制中心,它负责对网络模块的控制。对初始化参数进行检查,随机生成节点的位置,判断哪些节点在传输范围内,将它们连接,并构成相应的连接矩阵。还负责接收一些更新消息。主要就是协调application模块、layer0模块、manager模块之间的通信以实现仿真过程。 所以,整个系统分成两个大模块有两个