基于OMNeT++平台Gossiping协议的仿真实现_3_第1页
基于OMNeT++平台Gossiping协议的仿真实现_3_第2页
基于OMNeT++平台Gossiping协议的仿真实现_3_第3页
基于OMNeT++平台Gossiping协议的仿真实现_3_第4页
基于OMNeT++平台Gossiping协议的仿真实现_3_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、基于OMNeT+平台Gossiping协议的仿真实现论文导读:是由部署在监测区域内大量的微型传感器节点组成。通过构建WSN仿真模拟环境。协议和Gossiping协议。仿真,基于OMNeT+平台Gossiping协议的仿真实现。关键词:WSN,OMNeT+,Gossiping,仿真1引言无线传感器网络(Wireless Sensor Network,WSN)是由部署在监测区域内大量的微型传感器节点组成,通过随机自组织无线通信方式形成的网络系统。WSN在军事国防、环境监测、生物医疗、危险区域远程控制等诸多领域有着广泛的科研价值和应用前景。然而,传感器节点有限的处理能力、存储能力、通信能力以及能量问

2、题,决定了无线传感器网络在真实环境大规模部署前,必须对其性能、运行稳定性等因素进行测试,通过整合网络资源以使网络最优化。此外,WSN新的协议算法在应用实施前也需要进行验证和分析。通过构建WSN仿真模拟环境,能够根据需要设计网络模型,模拟大规模节点网络,在一个可控的环境中研究WSN的各个运行环节,达到用相对较少的时间和费用获得网络在不同条件下的性能,因此无线传感器网络仿真模拟技术受到越来越广泛的重视。2Gossiping协议仿真的架构2.1 Flooding协议和Gossiping协议的介绍Flooding协议和Gossiping协议,这是两个最为经典和简单的传统网络路由协议,可应用到WSN中。

3、在Flooding协议中,节点产生或收到数据后向所有邻节点广播,数据包直到过期或到达目的地才停止传播。该协议具有严重缺陷:内爆(节点几乎同时从邻节点收到多份相同数据)、交叠(节点先后收到监控同一区域的多个节点发送的几乎相同的数据)、资源利用盲目(节点不考虑自身资源限制,在任何情况下都转发数据)。Gossiping协议是对Flooding协议的改进,节点将产生或收到的数据随机转发,避免了内爆,但增加了时延。这两个协议不需要维护路由信息,也不需要任何算法,简单但扩展性很差。Flooding协议和Gossiping协议很类似,所以他们的仿真模型设计差不多。Flooding协议是基于广播的路由协议,当

4、某个节点完成广播消息的初始化后,就把这条消息发送给它的所有邻居节点。邻居节点是指处于该节点的传输范围内的节点。当某个节点第一次接收到FAM(flooding algorithm message)时,它就接着广播给自己的邻居节点,如已收到过就丢弃该FAM,最终实现整个网络的每个节点都收到过FAM1。Gossiping协议是在泛洪协议的基础上进行改进而提出的。它传播信息的途径是通过随机的选择一个邻居节点,获得信息的邻居节点以同样的方式随机的选择 下一个节点进行信息的传递。毕业论文,仿真。这种方式避免了以广播形式进行信息传播的能量消耗,但其代价是延长了信息的传递时间。虽然Gossiping协议在一定

5、程度上 解决了信息的内爆,但是仍然存在信息的重叠现象。Gossiping协议,又称RumorMongering协议,因为消息在网络 中的传播与流行病在易感人群中传播的方式相似,传播的下一跳是随机的,故又称流行病协议(Epidemiological Protocol)。2.2 Gossiping协议的OMNET+仿真本系统是基于OMNeT+的协议仿真,因此从技术要求上系统设计的基本框架如下:图2.1 基本框架用整个模块中有3种子模块,application模块、layer0模块和manager模块。其中application模块代表的是应用层,layer0模块代表的是FA层,manager模块代

6、表的是调度节点模块,每个模块都有自己的功能。从图中我们可以看到,Manager是整个系统的控制中心,它负责对网络模块的控制。对初始化参数进行检查,随机生成节点的位置,判断哪些节点在传输范围内,将它们连接,并构成相应的连接矩阵。毕业论文,仿真。还负责接收一些更新消息2。毕业论文,仿真。主要就是协调application模块、layer0模块、manager模块之间的通信以实现仿真过程。3算法设计3.1 application模块的设计Application模块的功能是设置一些参数和通过用户接口接收源节点和目的节点,并在源节点产生消息以待转发。处理两类消息M_LOWHIGH和M_SELF。它主要实

7、现从cSimpleModule类继承的三个虚函数以及用户自定义函数processGossip:voidinitialize()voidhandleMessage(cMessage *msg)voidfinish()voidprocessGossip(cMessage *msg)还有以下成员变量:intmsgcount; / 产生或转发的消息个数intTTL; /消息的生存时间int first; /表示前一节点intsrc; /源节点intdest; /目的节点以及一个全局变量extern int totalmsg ; /用来记录仿真过程中总共产生的消息数在initialize()中初始化一些

8、变量TTL,msgcount,提示用户输入源节点和目标节点来初始化src和dest。如果当前节点是src,则产生一个为“M_SELF”类型的消息,并发给自己。在handleMessage(cMessage *msg)中对接收到的消息进行处理:如果收到的消息类型为M_LOWHIGH,则用processGossip()函数进行处理;如果收到的消息类型为M_SELF,产生一个新消息-gossip进行相关设置。将消息类型设置为M_HIGHLOW,向新产生的消息内添加一个TTL参数,初始化为132;向新产生的消息内添加一个source参数,初始化为src;向新产生的消息内添加一个destination参

9、数,初始化为dest;向新产生的消息内添加一个sendtime参数,初始化为simTime(),记录产生消息的时间;向新产生的消息内添加一个first参数,表示路径中的第一个节点即源节点。通过lowergate_out发送出去并更新此节点的颜色、msgcount、totalmsg的值,如果收到其他类型的消息则报错,并结束仿真3。在finish()函数中只是简单的输出每个节点在仿真过程中总共转发或者产生了多少个信息。在用户自定义函数processGossip()中,主要实现的功能是:设置消息类型为M_HIGHLOW,经过一定的延时后通过lowergate_gate发送出去,并改变节点的颜色、更新

10、msgcount和totalmsg的值。3.2 layer0模块的设计Layer0模块的功能是与manager通信,递交(deliver)消息给传输范围内的节点。layer0主要处理两种类型的消息:M_NODE和M_HIGHLOW4。它实现从cSimpleModule类继承的三个虚函数以及用户自定义函数processGossip:它主要实现从cSimpleModule类继承的一个虚函数以及三个用户自定义函数hasReceived()、arrlength()和createPara():voidactivity() / 主循环boolhasReceived(cGate *gate,cMessage

11、 *msg); /判断是否收到过消息int arrlength(cArray arr); /得到数组的长度intcreatePara(char ch,int test); /对不同的节点可以创建不同的变量名在activity中有一个while(1)主循环,一直接收信息并对其进行处理;如果收到的消息类型为M_NODE即来自另一个节点的消息,则将其的消息类型设置为M_LOWHIGH,并从uppergate_out发送出去,即发给application层;如果收到的消息类型为M_HIGHLOW即application层交付下来的消息,处理此类消息是整个仿真的重点和难点,主要进行以下处理: 将收到消息

12、里的目的节点给提取出来,并与当前节点比较,如果当前节点就是目的节点,则输出传输延时,转发路径和转发过程中总过产生了多少个消息,至此仿真顺利结束;如果当前节点不是目的节点,则进行以下处理:首先,将TTL减一,如果TTL=0,则由于消息的生存时间到期,而被迫终止仿真。如果不为0,则设置消息类型为M_NODE,随机选择一个节点进行转发,如果产生节点已经收到过消息,则重新选择一个直到被选的节点之前没有收到过消息,才进行转发,并将当前节点添加到已经收到过消息的列表中。如果所有的节点都已经收到过消息,则消息转发失败,即消息不能被转发到目的节点,被迫结束仿真过程。毕业论文,仿真。3.3Manager模块的设

13、计manager模块是中心模块,协调传感器节点的信息交换。它主要负责初始化并存储所有节点的位置信息,管理节点间的通信,创建节点间的链路5。它实现从cSimpleModule类继承的三个虚函数以及用户自定义函数distance()和updateSignalStrength():voidinitialize( ) / 初始化函数voidactivity() / 主循环voidfinish( ) /结束函数intdistance(int sstrength) /返回传输范围的函数voidupdateSignalStrength()还有一个连接矩阵boolcmNNODESNNODES /表示两个节点是

14、否连接在initialize() 中,首先检查在.h文件和.ini文件中初始化的参数是否相同,不相同会结束仿真。接着初始化节点的坐标位置,即随机生成节点的X、Y坐标,将节点图标显示出来。然后开始判断任何两个节点之间的距离是否小于传输范围,若是就把它们连接起来,并把cmNNODESNNODES的标志位置为true。在activity()中,有一个主循环while(1),接收消息进行判断:如果是M_UPDSSTRENGTH类型,则调用updateSignalStrength(msg)函数进行更新。收到其他类型的消息则报错终止仿真。毕业论文,仿真。毕业论文,仿真。在finish()中,只是简单输出在整个仿真过程的流量,用转发了多少个消息来表示。在intdistance(int sstrength)中,根据强度返回可以传输的距离。在voidupdateSignalStrength(cMessage*msg)中,就是简单的增加消息的-TTL,以提高强度。4结束语Gossiping协议是在泛洪协议的基础上进行

温馨提示

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

评论

0/150

提交评论