论文网

银行招聘

校园招聘

教师资格证

公务员考试

我要自学网

教师招聘试题

CAD教程

医院招聘

教育局

兼职招聘

工作总结

招工信息

实习生招聘

卫生人才网

您当前的位置:首页 > 毕业论文 > 计算机毕业论文
| 行政管理毕业论文 | 工商管理毕业论文 | 护理毕业论文 | 会计专业毕业论文 | 英语专业毕业论文 | 大学毕业论文 | 硕士毕业论文 | 计算机毕业论文 | 市场营销毕业论文 | 物流管理毕业论文 | 法学毕业论文 |

基于OMNeT++平台Gossiping协议的仿真实现

来源网络

论文导读:是由部署在监测区域内大量的微型传感器节点组成。通过构建WSN仿真模拟环境。协议和Gossiping协议。仿真,基于OMNeT++平台Gossiping协议的仿真实现。
关键词:WSN,OMNeT++,Gossiping,仿真

  1.引言
  无线传感器网络(Wireless Sensor Network,WSN)是由部署在监测区域内大量的微型传感器节点组成,通过随机自组织无线通信方式形成的网络系统。WSN在军事国防、环境监测、生物医疗、危险区域远程控制等诸多领域有着广泛的科研价值和应用前景。然而,传感器节点有限的处理能力、存储能力、通信能力以及能量问题,决定了无线传感器网络在真实环境大规模部署前,必须对其性能、运行稳定性等因素进行测试,通过整合网络资源以使网络最优化。此外,WSN新的协议算法在应用实施前也需要进行验证和分析。通过构建WSN仿真模拟环境,能够根据需要设计网络模型,模拟大规模节点网络,在一个可控的环境中研究WSN的各个运行环节,达到用相对较少的时间和费用获得网络在不同条件下的性能,因此无线传感器网络仿真模拟技术受到越来越广泛的重视。
  2.Gossiping协议仿真的架构
  2.1 Flooding协议和Gossiping协议的介绍
  Flooding协议和Gossiping协议,这是两个最为经典和简单的传统网络路由协议,可应用到WSN中。在Flooding协议中,节点产生或收到数据后向所有邻节点广播,数据包直到过期或到达目的地才停止传播。该协议具有严重缺陷:内爆(节点几乎同时从邻节点收到多份相同数据)、交叠(节点先后收到监控同一区域的多个节点发送的几乎相同的数据)、资源利用盲目(节点不考虑自身资源限制,在任何情况下都转发数据)。Gossiping协议是对Flooding协议的改进,节点将产生或收到的数据随机转发,避免了内爆,但增加了时延。这两个协议不需要维护路由信息,也不需要任何算法,简单但扩展性很差。Flooding协议和Gossiping协议很类似,所以他们的仿真模型设计差不多。
  Flooding协议是基于广播的路由协议,当某个节点完成广播消息的初始化后,就把这条消息发送给它的所有邻居节点。邻居节点是指处于该节点的传输范围内的节点。当某个节点第一次接收到FAM(flooding algorithm message)时,它就接着广播给自己的邻居节点,如已收到过就丢弃该FAM,最终实现整个网络的每个节点都收到过FAM[1]。
  Gossiping协议是在泛洪协议的基础上进行改进而提出的。它传播信息的途径是通过随机的选择一个邻居节点,获得信息的邻居节点以同样的方式随机的选择 下一个节点进行信息的传递。毕业论文,仿真。这种方式避免了以广播形式进行信息传播的能量消耗,但其代价是延长了信息的传递时间。虽然Gossiping协议在一定程度上 解决了信息的内爆,但是仍然存在信息的重叠现象。
  Gossiping协议,又称RumorMongering协议,因为消息在网络 中的传播与流行病在易感人群中传播的方式相似,传播的下一跳是随机的,故又称流行病协议(Epidemiological Protocol)。
  2.2 Gossiping协议的OMNET++仿真
  本系统是基于OMNeT++的协议仿真,因此从技术要求上系统设计的基本框架如下:
  图2.1 基本框架
  用整个模块中有3种子模块,application模块、layer0模块和manager模块。其中application模块代表的是应用层,layer0模块代表的是FA层,manager模块代表的是调度节点模块,每个模块都有自己的功能。
  从图中我们可以看到,Manager是整个系统的控制中心,它负责对网络模块的控制。对初始化参数进行检查,随机生成节点的位置,判断哪些节点在传输范围内,将它们连接,并构成相应的连接矩阵。毕业论文,仿真。还负责接收一些更新消息[2]。毕业论文,仿真。主要就是协调application模块、layer0模块、manager模块之间的通信以实现仿真过程。
  3算法设计
  3.1 application模块的设计
  Application模块的功能是设置一些参数和通过用户接口接收源节点和目的节点,并在源节点产生消息以待转发。处理两类消息M_LOWHIGH和M_SELF。它主要实现从cSimpleModule类继承的三个虚函数以及用户自定义函数processGossip:
  voidinitialize()
  voidhandleMessage(cMessage *msg)
  voidfinish()
  voidprocessGossip(cMessage *msg)
  还有以下成员变量:
   intmsgcount; // 产生或转发的消息个数
   intTTL; //消息的生存时间
  int first; //表示前一节点
   intsrc; //源节点
   intdest; //目的节点
  以及一个全局变量extern int totalmsg ; //用来记录仿真过程中总共产生的消息数
  在initialize()中初始化一些变量TTL,msgcount,提示用户输入源节点和目标节点来初始化src和dest。如果当前节点是src,则产生一个为“M_SELF”类型的消息,并发给自己。
  在handleMessage(cMessage *msg)中对接收到的消息进行处理:
  如果收到的消息类型为M_LOWHIGH,则用processGossip()函数进行处理;如果收到的消息类型为M_SELF,产生一个新消息---gossip进行相关设置。将消息类型设置为M_HIGHLOW,向新产生的消息内添加一个TTL参数,初始化为132;向新产生的消息内添加一个source参数,初始化为src;向新产生的消息内添加一个destination参数,初始化为dest;向新产生的消息内添加一个sendtime参数,初始化为simTime(),记录产生消息的时间;向新产生的消息内添加一个first参数,表示路径中的第一个节点即源节点。通过lowergate_out发送出去并更新此节点的颜色、msgcount、totalmsg的值,如果收到其他类型的消息则报错,并结束仿真[3]。
  在finish()函数中只是简单的输出每个节点在仿真过程中总共转发或者产生了多少个信息。在用户自定义函数processGossip()中,主要实现的功能是:设置消息类型为M_HIGHLOW,经过一定的延时后通过lowergate_gate发送出去,并改变节点的颜色、更新msgcount和totalmsg的值。
  3.2 layer0模块的设计
  Layer0模块的功能是与manager通信,递交(deliver)消息给传输范围内的节点。layer0主要处理两种类型的消息:M_NODE和M_HIGHLOW[4]。它实现从cSimpleModule类继承的三个虚函数以及用户自定义函数processGossip:
  它主要实现从cSimpleModule类继承的一个虚函数以及三个用户自定义函数hasReceived()、arrlength()和createPara():
  voidactivity() // 主循环
  boolhasReceived(cGate *gate,cMessage *msg); //判断是否收到过消息
  int arrlength(cArray arr); //得到数组的长度
  intcreatePara(char ch[],int test); //对不同的节点可以创建不同的变量名
  在activity中有一个while(1)主循环,一直接收信息并对其进行处理;如果收到的消息类型为M_NODE即来自另一个节点的消息,则将其的消息类型设置为M_LOWHIGH,并从uppergate_out发送出去,即发给application层;如果收到的消息类型为M_HIGHLOW即application层交付下来的消息,处理此类消息是整个仿真的重点和难点,主要进行以下处理: 将收到消息里的目的节点给提取出来,并与当前节点比较,如果当前节点就是目的节点,则输出传输延时,转发路径和转发过程中总过产生了多少个消息,至此仿真顺利结束;如果当前节点不是目的节点,则进行以下处理:首先,将TTL减一,如果TTL==0,则由于消息的生存时间到期,而被迫终止仿真。如果不为0,则设置消息类型为M_NODE,随机选择一个节点进行转发,如果产生节点已经收到过消息,则重新选择一个直到被选的节点之前没有收到过消息,才进行转发,并将当前节点添加到已经收到过消息的列表中。如果所有的节点都已经收到过消息,则消息转发失败,即消息不能被转发到目的节点,被迫结束仿真过程。毕业论文,仿真。
  3.3Manager模块的设计
  manager模块是中心模块,协调传感器节点的信息交换。它主要负责初始化并存储所有节点的位置信息,管理节点间的通信,创建节点间的链路[5]。它实现从cSimpleModule类继承的三个虚函数以及用户自定义函数distance()和updateSignalStrength():
  voidinitialize( ) // 初始化函数
  voidactivity() // 主循环
  voidfinish( ) //结束函数
  intdistance(int sstrength) //返回传输范围的函数
  voidupdateSignalStrength()
  还有一个连接矩阵
  boolcm[NNODES][NNODES] //表示两个节点是否连接
  在initialize() 中,首先检查在.h文件和.ini文件中初始化的参数是否相同,不相同会结束仿真。接着初始化节点的坐标位置,即随机生成节点的X、Y坐标,将节点图标显示出来。然后开始判断任何两个节点之间的距离是否小于传输范围,若是就把它们连接起来,并把cm[NNODES][NNODES]的标志位置为true。
  在activity()中,有一个主循环while(1),接收消息进行判断:如果是M_UPDSSTRENGTH类型,则调用updateSignalStrength(msg)函数进行更新。收到其他类型的消息则报错终止仿真。毕业论文,仿真。毕业论文,仿真。
  在finish()中,只是简单输出在整个仿真过程的流量,用转发了多少个消息来表示。
  在intdistance(int sstrength)中,根据强度返回可以传输的距离。
  在voidupdateSignalStrength(cMessage*msg)中,就是简单的增加消息的-TTL,以提高强度。
  4结束语
  Gossiping协议是在泛洪协议的基础上进行改进而提出的。这种方式避免了以广播形式进行信息传播的能量消耗,但其代价是延长了信息的传递时间。虽然在一定程度上解决了信息的内爆,但是仍然存在信息的重叠现象。所以要根据实际的应用场合选择合适的网络协议。

参考文献:
[1]Haas ZJ, Halpern JY, Li L. Gossip-Based ad hocrouting. In: Proc. of the IEEE
INFOCOM.NewYork:IEEECommunicationsSociety,2002.
 


视频监控系统软件现状与技术分析
基于Java的模拟手机系统的设计与实现
来顶一下
返回首页
返回首页
 
相关文章
    无相关信息
栏目更新
栏目热门