一种实时控制的EXata 移动模型设计与实现
2016-03-04刘鹏飞张磊王海董超李智敏
刘鹏飞 张磊 王海 董超 李智敏
摘要:近年来,EXata仿真软件在无线网络仿真领域得到了越来越多的重视,除了独立进行网络仿真之外,它还可以与其他软件配合进行大系统的仿真实验。节点移动是影响无线网络性能的重要因素,EXata支持多种移动模型,但这些模型都是在仿真开始前依据预定的规则产生节点移动轨迹,无法对节点的移动进行实时控制,影响了其在大系统仿真实验中的应用。该文设计并实现了一种EXata实时控制移动的模型,可以利用UDP通信实时接收移动指令并控制仿真节点的移动,同时提出原地踏步策略解决了EXata软件位置管理模块未开放所导致的节点必须连续运动的问题。仿真结果表明,所提移动模型可以实时控制中大规模无线网络中仿真节点的准确移动。
关键词:EXata;网络仿真;外部指令;实时
中图分类号:TN929 文献标识码:A 文章编号:1009-3044(2015)36-0013-04
Abstract: In recent years,increasingly importance has been attached to EXata simulation software in the field of wireless network simulation. In addition to conducting network simulation independently, it also can cooperate with other softwares to conduct the stimulation experiment of the larger systems. Movement pattern is an important element that affecting the performance of wireless network. EXata supports multiple mobility models which can only produce trajectorys of nodes moving according to predetermined rules before the simulation beginning. This induces that the node movement can not be controlled in real time and the application of EXata in the large system simulation is limited. This paper designed and implemented an Extra mobility model that can control node movement in real time. With UDP communication, it can receive the movement instruction which can be used to control node movement. Meanwhile, due to the position management module is not opened in Exata, the simulation nodes must continuously move. To address this issue, we proposed the strategy of marching on the spot The simulation results show that the proposed mobility model can control accurate nodes movement in real-time in the median and large scale wireless network stimulation.
Key words: EXata; network simulation; mobility model;real time
1 概述
在进行产品开发或者新技术推广时,仿真是降低难度和成本的重要手段,由于可以兼顾成本与仿真的真实性,半实物仿真近些年得到了越来越多的重视。EXata是基于Qualnet仿真内核的一种半实物仿真软件,其创建的“虚拟网络”完全可以与真实物理网络中的所有组件互相通信和交换数据。另外,由于EXata的协议层次较为简单,层间耦合较松,其产品开发和测试周期短。同时,EXata协议实体对平台资源需求较少,后期的移植较为简单,产品实用化速度较快。由于以上优点,EXata已经成为无线网络半实物仿真的主流软件。
除独立进行网络仿真之外,EXata还可与其他模块配合进行大系统仿真实验,如图1所示。
图1中的系统共包括3个模块,可以看到,仿真模块需要实时接收并响应来自外部主控模块的指令,其中比较重要的就是节点的移动信息,这由仿真软件的移动模型来控制。目前,EXata中的移动模型有4种,分别是FILE、GROUP、PEDESTRIAN-MOBILITY、RANDOM-WAYPOINT,它们都是在仿真开始之前就设置好仿真节点的移动轨迹,比如FILE模型是将节点的移动位置事先写在文地文件并在仿真过程中去读取,再比如RANDOM-WAYPOINT(随机游走)模型是根据规则事先产生节点在仿真过程中的所有移动位置。因此,目前EXata仿真软件中的几种移动模型都无法支持节点移动位置的实时控制,从而影响了EXata仿真软件在大系统实验中的应用。
本文设计并实现了一种EXata实时控制移动模型。首先,必须要解决节点移动信息的实时接收问题,我们定义了节点位置消息的格式并在Exata源代码中添加了UDP服务器的程序来实现此功能,这么做的好处是可以接收任何UDP客户程序产生的符合格式要求的节点位置信息,从而提高本文所提移动模型的适用性;其次,由于EXata仿真软件的位置管理模块并未开源,我们无法直接对节点的移动轨迹进行控制,只能通过添加事件的方式来实时增加新的移动位置;最后,由于位置管理模块未开源,导致节点静止下来之后,我们无法使其再次移动,为避免此问题发生,我们在节点即将静止之前插入原地踏步的移动事件,使得节点继续“移动”但并不会改变位置,因而不会影响仿真结果。
本文首先介绍了EXata仿真模块自带的几种移动模型并分析说明这几种移动模型均不能实现对外部主控模块位置移动指令的响应,然后分析介绍了EXata仿真模块的位置管理机制并点明本文工作的难点,进而引出本文构建的移动模型:可以接收实时移动指令的EXata移动模型ONLINE_MOBILITY的设计与实现,并且对此移动模型的核心思想:原地踏步事件进行了详细说明。最后介绍了基于此模型的半实物反正案例设计及分析。对ONLINE_MOBILITY的性能进行了实验验证。
2 EXata移动模型
移动模型模拟节点或一组节点移动情况,EXata自带4种移动模型,分别是FILE、GROUP、PEDESTRIAN-MOBILITY和RANDOM-WAYPOINT。下面分别对这4种移动模型进行介绍。
1) FILE:基于文件的移动模型。
在仿真进行过程中,节点不同时刻的位置信息来自本地配置文件。位置信息在仿真开始前设置好,无法实时添加。在这种移动模式下,节点沿直线以恒定速度从一个位置移动到另一个位置。
2) GROUP:基于组播的移动模型。
同属一组的节点一起移动,移动轨迹和移动方式遵循RANDOM-WAYPOINT移动模型规则,即每个节点在组范围内按照RANDOM-WAYPOINT移动模型规则来移动。
3) PEDESTRIAN-MOBILITY:行人移动模型。
节点移动轨迹在仿真开始时刻计算好,节点模拟人移动特点,或沿街道行走,或走向诸如公园和车站这些地方,也或在这些地方范围内行走。
4) RANDOM-WAYPOINT:随机游走移动模型。
节点移动轨迹在仿真开始时刻计算好,节点随机选择下一个需要移动到达的位置,每次移动都在规定范围内随机选择一个固定的速度,沿直线移动到目的节点,然后暂停在新的位置上等待下一次的移动。
通过以上介绍可以发现,这几种EXata自带移动模型,或按照某种固定的方式移动,或随机移动,且移动路径在仿真开始时刻就计算好,因此不管是哪一种移动模型都不能实时地接收和响应外部指令并进行相应的位置移动。为了解决这一问题,本文深入了解EXata位置管理机制,在此基础上设计了一种实时控制的EXata移动模型。
3 EXata位置管理机制
EXata是一款商用网络仿真软件,并未开放全部源码,很多模块只对外提供接口函数,其中就包括位置管理模块。因此,无法直接对节点位置移动进行操作,只能在系统调用MOBILITY_ProcessEvent函数时获得控制权向仿真模块插入新的位置事件。 MOBILITY_ProcessEvent函数的作用是接收到新的事件时,决策移动模型的行为。此函数主要调用了MOBILITY_AddANewDestination函数,MOBILITY_AddANewDestination函数是用来向EXata仿真模块插入当前控制节点的下一时刻位置。位置事件的格式如下所示:
Time(SECOND) nodeId d1 d2 d3
Time(SECOND) nodeId d1 d2 d3
Time(SECOND) nodeId d1 d2 d3
然而,MOBILITY_ProcessEvent函数只能由系统来调用,且调用时机有限制,即节点必须在静止之前获取新的移动位置,也就是说MOBILITY_ProcessEvent函数的调用机制是:在前一个事件节点进行处理时插入新的位置事件。例如,假设要求某节点在仿真时间30s时刻到达(A,B),在50s到达(C,D),50s时刻事件不是在50s时插入仿真模块,而是在前一个时间节点插入,因此,系统会在30s时调用一次MOBILITY_ProcessEvent函数,插入50s时对应位置事件。接下来:
如果(A,B)=(C,D),则在50s时,系统再次调用MOBILITY_ProcessEvent函数,插入50s之后的一个事件位置数据,并且更新当前位置。
如果(A,B)=!(C,D),则系统在节点从(A,B)移向(C,D)过程中,每移动一个step都调用一次MOBILITY_ProcessEvent函数,并且更新当前位置。step粒度很小,由系统设定。
4 ONLINE_MOBILITY移动模型的设计与实现
4.1 模型设计
本文在仿真模块中添加新的移动模型,名称为ONLINE_MOBILITY,该移动模型可以接收外部提供的位置信息,然后插入到位置事件队列,进而实现对仿真节点移动的控制。
4.1.1 外部指令接收模块设计
仿真模块利用UDP 通信从主控模块实时接收位置信息。在TCP/IP协议层次模型中,UDP位于IP层之上。IP层的报头指明了源主机和目的主机地址,而UDP层的报头指明了主机上的源端口和目的端口。UDP提供的是无连接通信,且不对传送数据包进行可靠性保证,正因如此,UDP通信在数据传输过程中延迟小、数据传输效率高。UDP通信适合一次传输少量数据,而本文中仿真模块从主控模块接收到的位置信息就是小报文。UDP传输可靠性由应用层负责。
4.1.2外部指令响应模块设计
EXata仿真模块接收到实时位置消息后,其处理流程如图2所示:
仿真模块接收到位置消息之后,将消息中节点ID转换为该节点在EXata仿真软件中的节点ID(EXata),同时将消息中表示经纬度的度、分和秒统一转换为度;转换结束后,软件获取当前仿真时间,并在此基础上加N秒,产生新的移动事件,使节点在新时刻(当前仿真时间+N秒)移动到位置消息所指定的位置。N取值越大,则移动时延越大;N取值越小,则仿真软件负荷越大。N的取值根据系统运行状况和移动时延可接受范围来确定。
4.1.3 “原地踏步事件”设计
当事件列表无可执行位置事件时,转而执行“原地踏步事件”。所谓“原地踏步事件”是指每隔多少时间节点从当前位置再运动到当前位置。之所以插入“原地踏步事件”是因为EXata仿真模块的位置管理模块对外不开放,我们不能主动调用MOBILITY_ProcessEvent函数,只能在前一事件执行时由系统调用MOBILITY_ProcessEvent函数,并插入下一位置移动事件,因此,若不加入“原地踏步事件”,当主控模块有新的位置事件命令发来时,即使仿真模块接收了移动位置事件,节点也不能做出相应的移动。加入“原地踏步事件”有效保持仿真模块能够在没有新事件时仍可不断的调用MOBILITY_ProcessEvent函数,使得仿真模块可以随时接收主控模块的位置事件命令并执行相应的移动。
4.2 模型实现
EXata仿真软件通过UDP socket来与主控模块进行通信,仿真模块上运行Server程序,主控模块上运行Client程序,仿真模块实时接收来自主控模块的位置移动命令。在本文设计中,新添加一个cpp文件,即mobility_online.cpp用来存储UDP socket接收相关的函数,在Fun函数中完成socket数据的接收。由于主控模块发出的数据往往并不都是位置信息数据,我们需要从发来的所有信息中过滤出我们所需要的,然后转换成仿真模块能够识别的位置数据格式,即如图3所示格式:
EXata仿真模块中,场景地形可以用笛卡尔坐标系和大地坐标系来描述,对于笛卡尔坐标系,上图中的信息分别代表节点ID、X坐标、Y坐标和高度,如果是大地坐标则分别是节点ID 、纬度、经度和高度。位置数据格式转换完成之后送入位置数据队列,等待仿真模块的读取。
仿真模块位置数据处理函数在mobility.cpp文件下的MOBILITY_ProcessEvent函数中。对函数MOBILITY_ProcessEvent进行修改,在函数中加入对位置队列mQueue信息的读取操作,读取完成之后,相关位置数据从位置队列中删除。就位置移动而言仿真模块有两种可执行事件:主控模块传入的位置事件和“原地踏步事件”。当位置队列中有位置事件,即DeMobilityQueue(此函数实现的功能是:从位置队列中取出位置事件,返回值为布尔类型,如果返回值为true,则表明存在位置事件且读取成功;如果返回false,则表示位置队列已空或读取失败)函数返回为真则执行位置事件;当位置队列中无可执行的位置事件时执行“原地踏步事件”。对于位置事件执行的时机我们选择数据接收成功后两毫秒执行,这样做是为了让仿真模块有足够的时间来处理和执行相应的位置事件,而且这个时间间隔用户几乎察觉不到;对于“原地踏步事件”的执行间隔是每4秒执行一次原地踏步事件。这个时间间隔的设置不能太小,设置的太小,将会加重仿真模块的运行负担。
5 实验评估
5.1 实验场景
本文构建的实验场景如图4所示,在4300m*1800m的范围内分布48个节点,前16个节点连接到同一子网,并且排布成一个圆,其余32个节点连接到另一个子网上,排布成一个三角形。修改每个节点的移动模型为ONLINE-MOBILITY,仿真时间(仿真时间不同于现实时间,当仿真业务量很少时,仿真时间会超前现实时间)设置为5小时。其他设置选择默认设置即可。由于本文只需验证节点能否按照接收到的指令进行相应移动,因此,在各节点上没有添加任何业务。
外部主控模块运行socket客户端程序,向仿真模块发送移动位置信息。外部主控模块分两次向仿真模块发送位置信息。第一次发送的位置信息控制仿真场景中前16个节点的移动,第二次发送的位置信息控制仿真场景中其余节点移动。两次之间的时间间隔不发送位置信息,仿真模块执行“原地踏步事件”。主控模块发来的位置消息格式如下所示:
mdata.id=i;
mdata.x=100*(i-i/16*16)+1250*i/16;
mdata.y=100*(i-i/16*16);
其中mdata.id、mdata.x、mdata.y分别代表节点id、x坐标、y坐标,也就是说,主控模块发出的命令是:当前节点需要马上移动到(x,y)处。分析可知,如果仿真模块成功执行了来自主控模块的位置命令,且两次执行的间隔中仿真模块成功执行了“原地踏步事件”,则最后拓扑应该变成三条平行的斜线。
5.2 仿真测试
将外部主控模块和EXata仿真主机用网线相连,IP地址设置为同一网段,使两个部分网络互通。外部主控机上用来运行socket客户端程序,用来向EXata仿真模块发送位置移动命令。运行EXata仿真模块后,外部主控模块开始发送移动位置数据,仿真模块中节点进行相应移动。仿真时间为10min时,场景拓扑变化如图5所示情况。
当仿真模块运行到15min时,场景节点分布如图6所示。
此时主控模块不再给仿真软件发送位置消息,则场景中节点的分布保持图6中情况。相隔10min后,当仿真时间为25min时,外部主控继续向仿真软件发送其余节点的位置移动消息。仿真软件运行到50min时,场景中节点再次停止移动,如图7所示。
5.3仿真结果分析
仿真过程中,当外部主控发送位置移动数据时,仿真模块能够快速做出相应移动。当主控程序停止位置消息发送时,EXata仿真软件中节点不再移动。而当主控模块再次发送移动消息时,节点又开始移动,说明在主控模块两次发送位置消息的间隔中仿真模块执行了“原地踏步事件”。因为如果没有执行“原地踏步事件”,后面的位置事件由于EXata自身限制将不会执行。仿真结束后所有节点排成三条直线,且三条直线相互平行,和仿真前进行的预测相同,说明仿真模块实现了对外部主控模块发来的位置移动信息的实时响应和正确的位置移动。
6 结论
支持实时控制的移动模型解决了EXata不能对外部位置信息进行实时接收并处理的问题,填补了EXata在这一应用领域的盲区。本文介绍了EXata仿真软件的位置移动机制,列举了当前EXata仿真模块中的几个移动模型,并且解释说明这几种移动模型均不能实现实时接收并响应外部主控模块发出的位置事件。文章构建了一种全新的移动模型 ONLINE_MOBILITY,创新性的提出“原地踏步事件”,解决了节点停止后不能接收位置事件的限制,实现了对外部主控模块位置信息的实时响应。仿真验证了实时控制的EXata移动模型能够接收外部主控的移动位置信息,并作出正确的位置移动。
参考文献:
[1] Scalable Network Technologies,Inc.EXata 2.1 User,s Guide[EB/OL].www.scalable-networks.com.
[2] Scalable Network Technologies,Inc.EXata 2.1 Programmer,s Gudie[EB/OL].www.scalable-networs.com.
[3] 童超, 牛建伟, 龙翔, 等. 移动模型研究综述[J]. 计算机科学, 2009, 36(10): 5-10.
[4] 徐以标, 王兴建, 尹建月. 基于 Exata 的网络通信协议仿真[J]. 计算机与数字工程, 2014, 42(11): 2212-2216.