张 远 冯 楠
(中国人民解放军92941部队 葫芦岛 125001)
导弹舰面设备仿真在武器系统试验和训练等任务中广泛应用,是提高试验及训练质量、效益重要的技术手段。导弹舰面设备有多个分系统,每个分系统内部又含多个设备子节点,各分系统功能、性能、界面差异较大,因此各分系统需要进行独立仿真。目前舰载导弹发射系统基本上都是多发射单元发射系统(以下简称发射系统),是舰面设备子节点最多的分系统,这些单元节点功能、性能和数据交互基本相同,只是在装载导弹资源配置方面根据任务需要配置不同。基于Windows 进行发射单元多节点1:1 独立仿真实现,存在仿真设备成本高、操作人员多和后续应用、维护、管理不便等问题,迫切需要以最少设备实现实际多节点装备的仿真。
Windows 系统网络交互集成了网络通信路由,UDP 网络通信接口及IP 接口由Windows 集成通信路由自主决定,基于Windows平台的仿真软件无法通过应用层软件实现多IP 和网卡特殊处理,需要对多节点进行独立仿真实现。基于Windows 平台的Winpcap(Windows packet capture)网络底层访问组件易于部署,通过底层网络控制技术,能够为系统应用提供数据包底层存取手段[1],通过单节点多IP与网卡关联绑定,实现发射系统多发射单元仿真中单节点设备对多节点网络通信仿真。
WinPcap 为Windows 平台下网络访问组件,提供平台外底层网络访问功能,独立于主机协议(TCP/IP协议)以不阻塞、过滤和控制其它应用程序数据包发送和接收的方式,接收和发送原始网络数据包[2]。WinPcap 含三个模块:一是运行于操作系统内核级的模块,形式为以DDK 写成的SYS 驱动文件,完成与NIC Driver 的交互,从网卡捕获原始数据包或者向网卡发送数据包,含1 个网络数据包过滤器NPF(Netgroup Packet Filter)[3],捕获数据包首先送入Kernel Receiving Buffer,然后通过用户对packet.dll 函数调用,送入User Buffer 处理;二是用户级packet.dll 模块,提供与运行于内核级模块packet.sys或者npf.sys的接口,屏蔽不同Windows平台内核级模块的差异,给用户级应用程序提供统一、能用来直接访问BPF(Berkeley Packet Filter)驱动程序的API 访问接口,执行获取适配器名称、主机掩码及动态驱动器加载等低级操作;三是用户级高级Wpcap.dll模块,对packet.dll进一步封装,输出与UNIX 或者Linux 平台Libpcap 兼容的接口函数,使用户级应用程序可不依赖于特定的网络硬件或者操作系统,提供一种更简单、直接、方便的方法来更好地利用编程环境,包括捕获数据包、创建数据包过滤装置或将监听到的数据包转存到某个文件等,wpcap.dll提供更加安全的实现方法[4]。
发射系统仿真需要对多个发射单元节点的功能及性能进行仿真,配合舰面设备实装或其它仿真系统实现不同型导弹作战过程的网络通信仿真。受Windows平台集成以太网通信路由功能限制,基于Windows 仿真无法通过应用层软件指定IP 和网卡绑定发送,实现一台仿真计算机通过扩展多网络接口,模拟多节点发射单元以太网通信仿真。单节点仿真设备为实现多个发射单元的作战信息交互的模拟,需要在以太网上模拟多个以太网通信节点,同时仿真软件识别并绑定特定IP 地址的多个以太网通信接口进行仿真通信,模拟多个通用发射单元与其它系统进行作战信息交互。
采用WinPcap 通过绑定特定网卡进行以太网通信数据包捕获、数据存储和协议数据发送,直接控制以太网底层进行网络通信,利用Wincap 提供的以太网通信开发工具包API函数,可满足基于单节点的发射系统多节点仿真需求。基于单节点的多节点以太网通信仿真通信架构如图1所示。
图1 多节点以太网通信仿真通信架构
单节点计算机中部署配置多个网络适配器,实现与实装物理接口的一一对应,通过对网络设备资源进行打开识别、选择和设置,发射系统仿真中指定端口进行数据包捕获和发送。发射系统仿真程序首先获取本地网络驱动器的网卡列表,然后设定捕获网络数据的端口。基于WinPcap 的应用程序中设定捕获端口时,一种方式为网络端口被用户通过编写专门的程序段判断命令行的参数进行命令行指定,另一方式为网络端口被WinPcap引擎查询并进行设定,即调用WinPcap 的API 函数pcap_findalldevs_ex()设定,发射系统仿真采用后者。该函数被调用后返回一个指向pcap_if 结构的链表,其中的每一结点都包含着一个己经绑定的网卡的全部信息,其中相应设备的名称和描述被分别存放于name和description这两个变量中[5]。
调用函数pcap_findalldevs()可获取网络驱动器静态高级信息,函数返回的每个pcap_if()结构体中包含pcap_addr结构列表,包括一个地址列表、一个掩码列表、一个广播地址列表和一个目的地址列表。发射系统仿真网卡绑定模块根据数据包捕获需求,调用WinPcap的API函数pcap_open_live()绑定打开网卡,函数参数包括已绑定捕获设备接口、设定能捕获的网络数据包的最大数目、指定device接口工作模式、指定数据时超时控制等参数,其工作模式设置为promiseous mode混杂模式,捕获满足所设置条件的网络数据[6]。
发射系统仿真中接入发射系统内部以太网和舰面设备以太网,网络交互信息量大,而网络数据包捕获模块只需监控特定的通信端口。采用Win-Pcap 数据流过滤引擎,通过设置数据流过滤规则(Filter),实现对特定作战交互信息的捕获。数据包过滤规则的编译和设置处理中,需将仿真软件的过滤规则和捕获机制相集成,调用pcap_setfilter()和pcap_compile()函数,通过WinPcap 的数据流过滤引擎实现高效而实用的网络数据流中特定数据包捕获[7]。核心驱动的捕获进程中调用函数pcap_setfilter()绑定一个过滤器,所设定的过滤器对网络中传输的所有数据包进行过滤[8];仿真程序中调用函数pcap_compile()编译一个过滤设备,使用高层布尔(boolean)型变量和字串进行过滤控制,产生能够被底层驱动所解释的一系列二进制编码,符合条件数据包被发送给进行捕获的应用程序加以应用。
发射系统多节点仿真中,仿真的每个节点都需要捕获本节点需要的特定数据包,根据任务需要经过仿真处理后,形成对应反馈数据包发送给相应其它节点,完成完整工作流程仿真。数据包捕获实现中首先捕获一个数据包,通过构造重复捕获一个数据包的循环过程,实现数据包循环捕获。WinPcap进行数据包捕获方式包括获取返回式和回调式两种,回调式方法需要回调函数与捕获函数配合使用[8],发射系统仿真软件采用前者。WinPcap 函数pcap_next()依赖pcap_dispatch(),效率相对较低;发射系统仿真中调用pcap_next_ex()函数接收数据包,数据包到达后返回指向pcap_if 结构数据缓冲区信息,获取包含刚捕获的含数据链路层数据头最原始数据包[9]。
通过WinPcap 获取的原始数据为包括以太网数据帧、IP/ICMP 数据帧和UDP/TCP 等不同层帧格式的原始数据包,解析获取应用层用户数据必须正确逐层解析原始数据包格式[10],如TCP/IP 帧格式采用的IEEE802.3标准。通过WinPcap发送的是原始数据包,待发送的用户应用层数据以原始格式进行封装,首先封装成UDP/TCP 数据帧,然后封装成IP 数据帧,最后封装成以太网数据帧,调用Pcap_sendpacket()函数,通过设定数据包MAC 地址进行指定数据的可控网络通信仿真[11]。
发射系统多发射单元的多节点网络通信仿真实现中,单节点硬件设备进行了小型集成一体化设计,卫星时统卡、独立网卡等设备封装在标准机箱中,采用接近实装的计算机板卡提供仿真软件运行所需近似实装的硬件配置环境。仿真系统设备利用实装环境中舰船时统信号或自身时统授时模块的北斗卫星授时信号,实现仿真设备与实装设备的时间统一;配置多网卡,实现8 个发射单元网络通信仿真;选配双核CPU、大内存,使主频、内存不对WinPcap 性能产生影响,充分保证底层数据处理运行效率[12]。
软件开发环境采用WindowsXP+VisualStudio+WinPcap 平台,基于WinPcap 进行底层网络通信控制,支撑发射系统多节点仿真中高层以太网通信,实现在一台仿真计算机平台上对8 个发射单元的作战信息交互仿真。发射系统多发射单元通信仿真中主要设计了四个主要线程,发射系统多发射单元的多节点以太网通信仿真主线程流程如图2所示。
图2 多节点以太网通信仿真主线程流程图
发射系统仿真系统成功实现了基于单节点实现多发射单元节点网络通信仿真,在舰船实装环境下武器系统试验、发射系统鉴定试验及研练中进行了大量的实际应用,通过实现单节点对多个单元几十枚各型导弹资源的连射、混射、故障处理等多种模式下作战使用情况的仿真模拟,为相关武备功能性能鉴定、作战使用训练等任务提供了有效支撑手段,极大提高了试验鉴定和训练水平。
基于WinPcap 底层网络通信控制技术应用于单节点实现多节点网络通信仿真,具有应用程序界面友好、功能强大、维护及扩展性好、开发成本低、网络开发技术成熟和仿真置信度高等优点,采用该方法研制完成的仿真系统互联方便、运行可靠和便于便携使用,满足发射系统多节点网络通信仿真中对降低设备数量及确保仿真置信度的需求,解决原有多节点独立仿真带来的设备成本高、使用管理不便等问题。该方法同样适用于其它基于以太网通信的多节点复杂系统网络通信仿真,仿真系统扩展能力强,能有效减少硬件规模,降低研制升级成本,确保仿真置信度,具有积极推广借鉴作用。