刘存才,梁 禹,袁 舒
(1.中国电子科技集团公司第五十四研究所,河北 石家庄 050081;2.中国人民解放军32180部队,北京 100072)
在数字通信领域中,信息与通信网络发挥着重要的作用。随着信息战的快速发展,数字通信网的组成越来越复杂,对网络类复杂系统的依赖性越来越大,时延精度要求越来越高[1]。然而,一般实验室里的通信环境缺少对实际通信拓扑的模拟,而且实装通信设备对实时性要求非常高,因此亟需一种通信系统模拟器[2]来对数字通信网进行合理的模拟,在不改变实装通信设备的设计基础上,提供高精度的时延服务[3]。
目前,大部分针对数字通信系统的模拟器都是同实装通信设备一起研制[4],在需求上统一进行分析论证,或多或少都需要在实装通信设备中进行相关设计[5],而且同实装通信绑定的模拟器往往局限于特定的适用场景,很难扩展到其他领域[6]。因此需要设计一种通用的适用于定型之后的通信设备且对实装通信设备无感的通信系统模拟器。
本文针对数字通信系统设计了一种数字模拟器,能够模拟数字通信基础网的能力,为网络信息体系各通信设备节点之间通过不同介质、不同带宽和不同背景流量情况下传输信息提供时间延迟等通信效果支持,模拟通信传输全流程,支撑数字通信网络信息体系全数字仿真。同时提出了一种基于HOOK[7]SOCKET[8]的设计,不对实装通信设备进行任何更改,使得通信设备间进行无感操作,提供通信设备间按需按时的业务传输服务。
通信系统数字模拟器包括主机和端机两部分,其中,主机指通信系统数字模拟器的主体软件部分,部署在独立的服务器上,用于提供通信网络模拟服务。端机指分布在各模拟通信节点上的通信模拟代理软件,主要用于为实装通信设备间的信息传输提供通信延迟。通信模拟器主机、端机以及模拟通信节点之间的连接关系如图1所示。
通信系统数字模拟器系统运行在由交换机、路由器等构成的综合试验床网络环境中,其中主机通过试验网络与所有模拟通信节点相连,端机软件嵌入到每个模拟通信节点设备中。
图1 通信系统数字模拟器系统组成
通信系统数字模拟器功能组成如图2所示。
图2 通信系统数字模拟器功能组成
1.2.1 模拟器主机
模拟器主机用于模拟数字通信网络,为模拟通信节点之间的信息传输提供通信延迟、界面显示以及数据统计。主要包括:配置与初始化、业务生成、通信路由、时延计算、资源管理、数据处理、统计评估和通信[9]。
配置与初始化模块:基于想定和模拟通信节点的部署情况,配置通信网络[10],包括骨干网拓扑、模拟通信节点接入点与接入方式等;设置各种参数[11],包括位置、带宽、背景流量、节点地址、模拟通信节点接入时延、用于离线工作方式时的业务流量矩阵和业务分布等参数等初始化操作。
业务生成模块:该模块用于离线工作方式,在离线工作方式时,模拟器的业务生成模块按想定生成模拟通信节点之间的通信业务,驱动通信模拟器运行[12],模拟结果存入数据库;而在在线工作方式时,模拟通信节点实时发送待传信息的摘要信息完成业务驱动,模拟结果实时反馈给目的端机。
通信路由模块:基于SPF路由算法[13]对每个节点产生到所有其他节点的初始化备选路由[14],同时基于当前数据包的源和目的地址、链路资源状态等,动态计算出通信路由[15]。
时延计算模块:基于通信业务信息和通信路由,模拟产生通信延迟τ,该通信延迟涵盖排队时延、传输时延、传播时延和处理时延[16]。
通信资源管理模块:实现网络资源的占用与释放等动态变化与记录,主要为节点队列资源管理[17]。
数据处理模块:完成数据存储功能,对通过通信系统数字模拟器主机的信息交互内容按格式进行记录并保存,包括业务摘要、主机发送消息及返回消息;匹配端机返回的时间信息,判断时序关系并分支处理。
统计评估模块:统计各种数据,包括业务传输成功率、时序判断和平均通信时延等等,进行通信评估。
通信显示模块:提供可视化的通信网模拟界面功能,显示网络拓扑、路由信息、状态输出信息、业务信息以及统计评估数据等信息。
1.2.2 模拟器端机
模拟器端机用于为模拟通信节点之间的信息传输提供通信效果加载。主要包括参数管理、收发代理、消息映射以及时序处理模块。
参数管理模块:负责端机软件部分的诸如主机/端机IP地址、端口号和在线离线工作方式等参数配置。
收发代理模块:实现模拟通信节点的真实信息的收发和信息缓存处理。即在信源端,模拟通信节点生成真实数据时,将提取并产生的摘要信息传给通信模拟器主机;在信宿端,接收信源模拟通信节点发送的真实数据包并进行缓存。
消息映射模块:接收到主机发送的通信时延值时,根据主机传递的通信信息与缓存数据进行匹配,实现该时延值与某缓存数据包的映射。
时序处理模块:根据映射结果,判断时序关系并进行分支处理。时序正常时,在相应时间点将真实数据包递交给模拟通信节点;时序关系不满足时,立即递交真实数据包给目的通信节点,并且记录异常时序信息。
通信系统数字模拟器系统流程主要分为试验准备、试验执行以及结果展示与分析3个阶段,由模拟通信节点、模拟器主机以及端机共同完成全流程,如图3所示。
图3 通信系统数字模拟器系统流程
1.3.1 试验准备阶段
在试验准备阶段,通信系统数字模拟器系统中的主机和端机分别进行相应的初始化工作。主机按照初始化配置文件中的试验想定内容完成通信网络想定编辑(包括网络拓扑、模拟通信节点部署与接入等),并进行相关属性配置(包括带宽、背景流量、路由协议、接入时延和地址信息等各种参数和属性),端机通过读取试验运控台下发的初始化配置文件完成地址设置等初始化工作。
1.3.2 试验执行阶段
待系统初始化运行后进行业务驱动,各模拟通信节点开始进行各自数据的发送与接收,模拟通信节点在发送数据的同时将摘要信息发送给通信系统数字模拟器主机。
通信系统数字模拟器主机接收到待传输信息的摘要信息后,映射到逻辑拓扑的源和目的并作为一条逻辑业务驱动通信网模拟运行,自动寻找通信路由,结合需传输信息情况、路由、当前背景流量和信道特性等,计算得出该信息传输所需要的延时,并将时延消息打包发送给目的通信节点的端机软件。同时,在该业务驱动过程中管理网络节点、链路等通信资源的占用与释放,最后通信系统数字模拟器主机将相关资源信息进行存储。
模拟目的通信节点的端机软件收到模拟源通信节点发送的业务信息后首先进行缓存,待收到主机发送的通信时延消息后,与缓存的业务信息进行映射,找到与之匹配的业务信息,进行时序判断与处理,等满足延时要求后将该业务信息递交给目的模拟通信节点。
1.3.3 结果展示与分析
根据存储的试验运行资源数据信息,一方面,能够进行数据展示和通信显示;另一方面,能够对相关信息进行统计、分析与评估,得到本次试验任务的分析评估结果。
实验室里的模拟通信节点大部分为实装通信设备,这些设备经过试验定型后是不能够对其代码设计进行任何的更改,为了达到目的通信设备在相应的延时值收到业务信息,需要将发出的业务进行截取以及缓存,而HOOK(挂钩)能够做到通信设备间的无感操作,能够有效地截取源通信设备发出的业务包。
截取发送业务包的关键在于钩取SOCKET信息,由于WINDOWS预设的消息类型中没有直接有关SOCKET的钩子定义,因此,需要对SOCKET的HOOK进行相应的设计。一种可行的思想是将socket api的函数入口与所要截取处理的函数入口进行替换,即系统检测到发送socket消息时,首先进入自己的处理函数中,等待处理完毕后,再调用真正的底层socket api的函数发送该消息。
HOOK程序需要放到动态链接库中进行执行,在动态链接库DLL[18]的DLL_PROCESS_ATTACH初始化中,需要将socket api的函数入口与自处理程序入口进行替换。
以UDP[19]的发送消息为例,需要执行函数hookapi(“ws2_32.dll”,“sendto”,(DWORD)MySendto,&sendtoapi)。其中,hookapi函数以及MySendto函数为自定义函数,调用系统GetProcAddress、OpenProcess以及WriteProcessMemory等函数将“ws2_32.dll”中的“sendto”函数入口替换为MySendto函数入口。这样一旦系统检测到调用sendto函数时,就会首先跳转到自定义的MySendto函数中进行处理。
只有当用户手动选择开启钩子时,才会对发送的业务进行截取,此时调用系统函数g_hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)Hook,g_hinstDll,0),开始安装SOCKET钩子。其中g_hHook为钩子过程的句柄;WH_GETMESSAGE表示安装一个钩子过程对发送到消息队列的消息进行监视;HOOK为自定义的钩子过程,在该过程中只需要调用系统函数CallNextHookEx(g_hHook,nCode,wParam,lParam)直接将钩子信息传递给钩子链中下一个等待接收的信息即可[20];g_hinstDll为指向钩子过程所在的DLL句柄,该值在DLL初始化时赋值为安装钩子过程的代码所在的DLL的句柄;由于要截取所有进程发送的业务消息,因此,需要将该钩子程序设置为全局钩子,即将指定与钩子过程相关的线程标识设置为0。
只有调用SetWindowsHookEx函数安装钩子后,系统才会开始监视所有的队列消息,而且只有当该队列消息为SOCKET发送消息时,才会进行函数入口替换处理,开始进行HOOK操作。
每当系统调用sendto函数时,由于进行了函数入口转换,业务截取会首先在自定义函数MySendto函数中进行操作。对钩住的业务包进行分析,如果符合相关的解包协议,那么进行下一步的业务解析,否则直接调用底层真正的sendto api直接发送该原始业务消息。
针对本文的通信系统模拟器来说,如果截取的业务包符合相关解包协议,那么会对该业务包进行两部分的处理:① 直接将该业务包发送至目的端机缓存起来;② 抽取该业务包的摘要信息发送给主机。对原始业务包进行相关操作后,统一调用底层真正的sendto api发送函数。
由于对系统sendto函数进行了函数入口替换,为了防止在调用底层api发送函数时出现死循环,需要在解析该业务包前进行判断。如果该业务包为本钩子DLL发送或者目的接收通信设备同本钩子DLL部署在同一台计算机上,那么不执行后续的解包操作,直接调用底层真正的sendto api函数发送该业务包。
在退出钩子程序前,需要将sendto函数的入口还原为ws2_32.dll中sendto api函数的真正入口,然后调用系统函数UnhookWindowsHookEx将已经安装的钩子进行移除。在关闭钩子程序后,系统将不会对socket函数进行监测。
为了更好地说明基于HOOK的通信系统数字模拟器的信息流程,特定义术语:
τ0: 节点接入时延值,该值为可设置的固定值;
τ: 通信模拟器主机计算出的逻辑通信时延值(包括了两端通信节点的接入时延值);
T0:源模拟通信节点发送数据的时刻;
T1:目的端机接收完原始业务数据的时刻;
T2:目的端机得知τ(即接收到主机发送的τ)的时刻;
t3:该数据的最大可接受延迟值。
由于端机与模拟通信节点配置在同一台计算机上,所以端机可以HOOK住这台机子里系统发出的所有消息,包括模拟通信节点发送的SOCKET消息。在端机中设置相应的钩子程序,每当源模拟通信节点向目的节点发送信息时,在SOCKET消息发送出去之前,端机就可以HOOK该信息,通过相关协议解析该业务,封装新的业务发送目的地址为目的模拟通信节点处的端机,同时抽取出相关摘要信息发送给主机。目的端机接收到信息后进行缓存,当接收到主机发送的时延消息后,通过源和业务序列号进行匹配,进行时序处理之后将原业务信息按时发送给目的通信节点。基于HOOK的通信信息流程如图4所示。
由源模拟通信节点经由端机和主机发送业务信息至目的模拟通信节点的详细流程步骤如下:
① 源模拟通信节点向目的模拟通信节点发送真实业务信息;
② 部署于源模拟通信节点的端机使用HOOK截取该真实业务信息,并且对该业务信息进行封装与抽取处理,生成封装以及摘要两条业务信息;
③ 部署于源模拟通信节点的端机将封装有原始业务信息的包发送给部署于目的模拟通信节点的端机,由目的端机将该业务包进行缓存;
④ 部署于源模拟通信节点的端机同时向主机发送待传输信息的摘要信息,包括信息源、信息目的、待传信息大小、业务序列号、待传信息时间发送时间T0和最迟可接受延时t3等;
⑤ 主机根据摘要信息自动寻找通信路由,结合需传输信息情况、当前背景流量、信道特性等,计算得出该信息传输所需要的通信延时τ;
⑥ 主机将τ,T0,t3值等时延信息包发送给部署于目的模拟通信节点的端机;
⑦ 目的端机将业务信息与时延信息进行映射并且判断时间关系,当T1≤T0+τ且T2≤T0+τ且τ≤t3时,目的端机等待到T0+τ时刻将真实业务信息递交给目的模拟通信节点;当时间关系不满足以上要求时,在目的端机收到主机发来的时延信息时立即将真实业务数据递交给目的模拟通信节点,并且记录该异常时序信息[21];
⑧ 目的端机将映射信息反馈给主机,主机同步判断时间关系,当满足T1≤T0+τ且T2≤T0+τ且τ≤t3时,主机正常记录并且显示该业务的传输信息,当不满足上述时间关系时,主机记录该异常时序信息。
图4 基于HOOK的通信信息流程
基于HOOK的通信系统数字模拟器设计,本文研发了一款通信模拟器软件,其软件界面示意如图5所示。
模拟器主机采用MAPX[22]插件展示通信以及通信设备节点拓扑信息,能够进行地图的缩放、移动、拖拽和单击双击等操作。每当模拟通信节点发送一条信息时,在地图上动态显示该业务信息的传输路径,在业务信息输出窗口显示该业务信息的摘要信息、时延、路由以及传输成功与否等信息,在左侧的统计评估窗口显示链路利用率、传输成功率和通信时延等相关统计信息。
模拟器端机利用HOOK机制截取以及缓存相关业务信息,在相应的时刻值将业务信息递交给目的模拟通信节点。
图5 通信系统数字模拟器界面示意图
针对实验室里的局域网缺少实际的数字通信网络拓扑以及实装通信设备在不能更改设计的前提下,需要高可靠延迟传输的要求,本文提出了一种基于HOOK SOCKET的通信系统数字模拟器设计,能够模拟按需的数字通信网络,提供业务生成、通信路由、时延计算、资源管理、数据处理、统计评估和通信显示等功能设计,能够使通信设备间进行无感操作,为传输信息提供时间延迟等通信效果支持,能够较好地支撑数字通信网络全数字仿真。
本文基于数字通信系统中特定协议应用,按照文中的设计思想,研制通信模拟器并在试验床上经过全面验证,能够可靠有效地满足数字通信网络业务传输的要求。本文提出的通信系统数字模拟器设计方法对进一步研究数字网络信息体系提供了一定的思路。由于数字通信系统是非常复杂的系统,全面合理、高可信的全系统仿真还存在着许多困难,还有许多工作需继续深入地研究。