基于EXata 的半实物仿真功能设计与实现
2022-12-17卢毅水宜水郭建飞
[卢毅 水宜水 郭建飞]
1 引言
网络仿真是一种通过虚拟网络测试真实应用程序性能的技术。这与应用流量、网络模型、通道和协议的虚拟模型的网络模拟不同,目的是评估性能、预测变化的影响或以其他方式优化技术决策,它以系统理论、形式化理论、随机过程和统计学理论、优化理论为基础。在设计阶段,仿真方法可提供一个虚拟模型来预测并比较各种方案的性能;运行阶段,通过对不同环境和工作负荷的分析和比较,来优化系统的性能。在某些情况下,仿真是唯一可行的方法和技术。仿真方法的抽象化程度比数学分析方法低,耗费的时间比测量技术少,其低成本和有效性是其他传统方法不可替代的。随着网络新技术的不断出现和数据网络的日趋复杂,对网络仿真技术的需求必将越来越迫切,网络仿真的应用也将越来越广泛,网络仿真技术已成为研究、规划、设计网络不可缺少的工具。
半实物仿真作为仿真技术的一个分支,成为通信领域的一种重要仿真技术,半实物仿真就是在计算机仿真回路中加入实物设备或系统进行仿真,计算机仿真提供了实装系统不具备的应用规模,实物设备或系统为计算机仿真提供必要的检验和验证,能够有效地提高计算机仿真的真实性和可靠性,半实物仿真具有实时性要求高、可扩展性好、置信度高[1]等特点。
EXata作为一款通信行业内重要的网络仿真软件平台,目前已有众多学者或技术人员将其应用于工程设计、学术研究或教学领域。大部分应用还是基于EXata 的原生功能进行仿真,其中有学者对航空数据链进行了半实物仿真[2],基于EXata 开展了通信教学平台设计[3],对战术互联网进行半实物仿真[4],但对EXata 的半实物仿真功能开发并不多见。本文在对EXata 半实物仿真平台的原生功能进行剖析的基础上,结合现有仿真业务需求,对EXata 进行了二次开发,使得其功能设计更加贴合实际的应用需要。
2 EXata 半实物仿真概述
2.1 EXata 平台简介
EXata 是一套用来仿真大型有线网络和无线网络的完整平台,EXata 创建的“虚拟网络”完全可以与真实物理网络中的所有组件互相通信和交换数据,例如:各种网络应用、网络设备、网络使用者、和网络管理工具等,在通信网络的研究、开发、评估、模拟训练等环节的卓越表现,帮助用户缩短研发周期,提高效率。
EXata 功能架构如图1 所示。
图1 EXata 功能架构
EXata 与网络仿真平台QualNet 出自同一个网络仿真开发公司,它们具有相同的仿真内核,共用相同的协议模块,支持TCP/IP 协议栈的标准层间接口,用户无需自己开发这种类型(绝大多数的协议都满足,包括大量军方数据通信联网设备)的层间接口;同时支持非标准协议栈的开发。EXata 采用先进的并行算法,可以仿真上千个节点的大型无线网络,特别适合集群式计算系统的复杂网络仿真项目。
EXata 采用了基于事件驱动的仿真机制,利用消息来表征事件。消息类型分为两种,一是数据消息,用于表示网络传输和处理的报文;二是时间消息,用于驱动时间同步、延迟发送等网络中各类时间相关行为。消息发送方通过在各层增加消息头,接收方在对应层去除消息头实现数据消息在网络中的模拟传输。与数据消息不同,时间消息不进行层间传递。若协议或应用需要对未来某一事件做出规划,在对应层生成时间消息,并将其送出,由该层程序通过对收到的时间消息类型进行判断,完成相应处理即可。
2.2 半实物仿真机制
EXata 的仿真内核在模拟内核功能的基础上,采用实时的事件调度机制,提供高精度、实时的接口连接虚拟网络和外部实际应用设备,通过建立外部实物与EXata 虚拟网络中节点映射关系及接口配置,实现外部实物与EXata的数据交互。
EXata 在仿真内核下实现半实物仿真时,一般将运行EXata 仿真软件的计算机作为仿真服务器,对实际通信网络进行模拟,构建相应的虚拟网络;对实际各通信设备进行模拟,作为虚拟网络的部分仿真节点;构建半实物仿真接口,外部接入设备作为外部终端,并与虚拟网络中的某个仿真节点进行映射,实现实物操作,将实物数据流引入虚拟网络或将虚拟网络数据输出到实物主机。
为实现EXata 半实物仿真,需要进行网络配置和连接配置。网络配置保证真实网络与虚拟网络通信可达,连接配置保证数据的成功交互。连接配置利用EXata 的连接管理器对需要接入仿真网络的真实设备进行连接管理。使用连接管理器配置时,连接管理器应用程序运行在外部终端上,负责管理外部终端的网络连接配置,建立外部终端与服务器之间的连接;当外部终端不能安装或执行连接管理器时(无计算平台的路由器、无标准操作系统环境的实时系统等),只能手动配置连接到仿真服务器,此时必须配置外部设备映射参数,如IP、网关等。
半实物仿真连接示意图如图2 所示。
图2 EXata 半实物仿真连接示意图
EXata 仿真中的虚拟节点可映射为外部的外部终端,此时终端主机上运行的全部应用程序相当于运行在仿真节点中,连接至虚拟网络的多台外部终端可与运行EXata 的服务器工作在同一网段或不同网段,当运行于不同网段时,需要配置EXata 服务器具备多个IP 网段地址。
如今,在张家界“白天看美景,晚上看大戏”已成为一种新的旅游文化体验消费模式。张家界只有不断借鉴成功经验,立足本土文化特色,创新旅游演艺产品,顺应文旅2.0时代的发展,才能扩大张家界旅游演艺品牌的知名度和美誉度,成为“演艺之都”。
3 功能设计
3.1 需求分析
EXata 通过IP 映射将实物节点与虚拟节点进行互联,当实物节点向虚拟网络中的目的虚拟节点发送业务时,数据包首先发送至与实物节点相映射的虚拟节点,由该虚拟节点进一步发送至目的虚拟节点,若该业务数据不在EXata 业务模型中,则目的虚拟节点仅实现IP 层接收行为,数据包并不能交付至应用层。
为实现将业务传递至目的端业务层,使得实物与虚拟节点能够进行业务互通,并实时监测目的虚拟节点收到的业务数据,需要将实物节点业务添加至EXata 协议栈中,并且通过设计外部接口打通外部程序与EXata 软件平台的数据壁垒,实时获取EXata 网络节点中的通信数据。
3.2 设计思路
针对EXata 仿真平台的模型代码开源特点,结合功能需求,从协议模型库、外部接口两方面对EXata 进行新增功能设计。遵循客户端-服务器业务运行机制,添加实物节点业务类型至EXata 原生模型库中,并对前端GUI 设置进行修改以匹配新业务;基于UDP 协议设计外部接口函数,使得外部程序可以实时获取虚拟网络节点中的数据包信息,且可在前端GUI 进行UDP 接口参数配置。功能设计框架如图3 所示。
4 开发过程
4.1 业务新增
遵循EXata 模型代码框架,业务新增主要分为以下几个开发步骤:
图3 功能设计框架
(1)创建业务头文件与源文件;
(2)修改application.cpp 代码,使其包含新增业务的头文件;
(3)将业务添加至应用层协议列表中;
(4)定义业务模型的数据结构,如图4 所示;
图4 业务数据结构代码
(6)修改应用层事件分发器使其包含对新增业务的事件处理调用;
(7)编写客户端与服务器事件分发代码;
(8)编写仿真结果统计代码;
(9)在应用层终止化函数中添加对业务客户端、服务器的终止化函数代码;
(10)在编译文件Makefile-common中包含业务的源文件,如图5 所示;
(11)修改GUI 设置文件以匹配新增业务,如图6所示。
当完成业务新增功能开发后,创建相应图标文件,将在EXata 运行界面工具箱的最右端显示新增业务“EMU”,如图7 所示。
图5 编译文件修改
图6 业务GUI 配置文件
图7 新增业务显示界面
4.2 外部接口开发
EXata 提供的外部接口开发框架如图8 所示。
图8 EXata 外部接口开发框架
通过开发外部接口,可以使得外部程序与外部接口进行通信,进而通过外部接口API 访问EXata 仿真网络,实现外部程序与仿真网络的数据交互。
外部接口开发主要包含初始化、接收、转发、终止等函数的编写,在外部接口函数中调用API 中的接口注册函数、公用函数达到与EXata 虚拟网络节点的数据互联。
初始化函数代码片段如图9 所示。
图9 初始化函数代码片段
接收函数代码片段如图10 所示。
图10 接收函数代码片段
转发函数代码片段如图11 所示。
图11 转发函数代码片段
终止函数代码片段如图12 所示。
图12 终止函数代码片段
在外部接口功能开发后,修改GUI 设置文件将UDP接口显示在EXata运行界面中,方便对UDP参数进行配置。外部接口参数界面如图13 所示。
图13 外部接口参数界面
5 仿真试验
搭建仿真场景对半实物仿真新增功能进行试验验证,在EXata 中设置一多层级网络,包含100 个以上的通信节点,分布于不同的区域,并加载地形数据。
以功能验证为例,将其中1 个节点(ID 号为105)与实物节点进行映射,并配置映射节点向另一目的虚拟节点(ID 号为113)每隔2 秒发送一次“EMU”业务数据包,内容为“emulation data…”,同时通过UDP 测试工具每隔2 秒向EXata 发送命令获取目的虚拟节点的“EMU”业务数据包信息。仿真场景如图14 所示。
图14 仿真场景界面
仿真结果分析界面如图15 所示。
图15 仿真结果分析界面
业务数据包获取界面如图16 所示。
图16 业务数据包获取界面
由以上仿真试验结果可以看出,目的节点可以收到实物节点发送的业务数据包,新增的业务类型“EMU”可以被EXata 仿真网络识别,且业务接收情况已经被正确统计,同时,数据包内容可以通过外部程序向EXata 网络发送获取命令的方式进行获取,验证了新增功能的设计有效性。
6 总结
本文基于对EXata 平台半实物仿真功能机制的深入剖析,梳理出不属于原生业务模型库情形下的仿真功能需求,对新增业务的识别与节点数据外部获取进行了功能设计,详细阐述了EXata 业务模型与外部接口的开发流程,最后搭建了半实物仿真场景进行功能验证,该功能设计可为EXata 的应用提供新的仿真思路,同时基于通用业务功能开发原理,可以此进一步针对不同业务设计相应的数据格式与交互机制,从而应用于多个外部实物节点同时与EXata 虚拟网络之间开展不同业务互通的半实物通信仿真场景。