王晓东,杨学海
(中国西南电子技术研究所, 成都610036)
现有的航天地面测控系统中,监控系统通过采用C/S架构的方式基本实现了远程中心对各套地面站设备的远程监控管理。远程客户端通过本地服务端对地面站设备运行状态与参数进行监视与控制,本地服务端将采集到的设备状态参数信息传送到远程客户端进行相应显示,远程客户端则向用户提供良好的人机操作界面,并且发送各种操控命令到本地服务端,通过本地服务端对本地设备或数据库进行相应的操控。但是,由于远程客户端和本地服务端之间的信息传输没有一套标准、统一的应用层协议,致使远程中心的监控效率受到一定的影响,给用户的使用带来不便。
本文提出选择简单网络管理协议(SNMP)作为远程客户端与本地服务端之间进行网络通信的应用层协议,并以此为基础构建C/S(Client/Server)模式下的远程监控管理系统。通过原型系统的设计及实现,以及仿真试验的验证,从而研究并探讨了SNMP在远程监控中的应用。
简单网络管理协议(Simple Network Management Protocol, SNMP)是一系列协议组和规范的集合, 20世纪80年代末期由IETF开发后,开始被广泛应用在各类网络设备中,成为一种网管的工业标准,它被设计成为一种应用层协议,规定了网络信息传输的方法、格式等,具有简单、灵活、扩展性好等优点,适合于管理员对不同种类的设备、不同厂家生产的设备、不同型号的设备、不同物理空间的设备进行统一的管理,是一种从网络设备中收集网络管理信息的有效简便的方法。
SNMP采用管理者(manager)/代理(agent)模型。管理者(一般是运行网络管理系统的计算机)通过向代理(一般是包含SNMP管理信息的设备)发送相应的命令获得代理中指定的信息,代理负责响应管理者发出的各种信息,或者以主动上报的方式向管理者提供必要的信息,从而实现管理者与代理之间的信息通信。
SNMP通常由管理信息结构(SMI)、管理信息库(MIB)和管理协议(SNMP)[1]等几个部分组成。
SMI是一套描述 SNMP如何访问信息的标准[2],定义了SNMP框架所用信息的组织和标识,其中,被管理对象的定义要用抽象语句定义ASN.1来描述。SMI约束了抽象语句定义ASN.1的范围,用于描述SNMP协议数据报和管理信息库(MIB)。
MIB用来贮存管理信息,定义了可以通过网络管理协议进行访问的管理对象的集合,也即代理进程中所有可被查询和修改的参数。MIB是一个树形结构的数据库, MIB中的每个被管理资源都由一个对象来表示,每一个对象信息都是管理信息树下的一个节点,拥有唯一的对象标识。管理者与代理之间都使用同一个MIB作为接口结构,可实现相互信息的理解与管理。
SNMP协议是管理者和代理之间的异步请求和响应协议,定义了管理者如何对代理进程的MIB对象进行读写操作,定义了所使用的传输层协议、支持的操作、操作相关的PDU结构等。网络管理信息的数据由SNMP从MIB库中获取,再经过网络管理系统应用程序进行过滤、分析、加工等处理。 SNMP通常使用无连接的UDP进行通信,使用命令的方式来访问MIB数据库,每个SNMP命令称为协议数据单元(PDU)。典型的PDU包括GetRequest、GetNextRequest、SetRequest、Trap、Response等几种类型。
目前,航天地面测控系统中,通过采用C/S模式构建的远程监控管理系统,部署在远程中心的远程客户端已可基本实现对各个地面测控站设备进行远程操控。地面站的本地服务端采集本地设备所有的参数、状态信息,并将信息上报至远程客户端;远程客户端向用户提供人机操作界面,同时将远程控制命令发送到本地服务端,再由本地服务端对设备进行统一的分发控制。基于SNMP构建C/S模式的远程监控管理系统,并未改变既有远程监控的框架,只是采用了SNMP作为远程客户端与服务端之间的网络信息交互的基础。远程监控管理系统模型如图1所示。
图1 远程监控管理系统模型Fig.1 Remotemonitoring and controlmanagementsystem model
监控服务端可被看作是SNMP中的代理角色,远程客户端可被看作是SNMP中的管理者角色,这时的远程中心客户端软件同地面站的本地服务端软件之间的网络信息交互即是采用SNMP的方式来实现。
在采用SNMP进行C/S模式远程监控管理系统的构建中,重要的一个工作是远程监控MIB库的设计,以使得在管理者与代理之间使用同一个MIB作为网络信息传输的基础。图2是远程监控MIB库的对象标识命名树结构示意图,可按路径寻找到设备DC的对象标识(OID)为1.3.6.1.4.1.100000.1,或者也可表示为iso.org.dod.internet.private.enterprises.station.dc。
图2 对象标识命名树示例Fig.2 Named tree of objects identificationmodel
SNMP版本2中提供了多种命令类型的PDU操作,在远程监控软件中实际用到最多的是Trap操作与SetRequest操作两种。在应用程序运行时,所有的Trap操作都在程序的某一个入口处接收数据,所有的SetRequest操作又在程序的另一个入口处接收数据。而在同一个 PDU操作命令中(例如 SetRequest操作)划分出具体是远程监控命令或数据的哪一种,则需要应用程序本身提供一种处理机制来进行解析。一种方式是,可以将收到的数据进行全MIB库元素的遍历,直至找到对应的元素,其缺点为进行遍历操作将要消耗大量的资源,尤其在秒定时及大数据量传输时表现更为明显。为了解决此问题,在进行远程监控MIB库设计时,将同一条命令或返回响应的数据集合在一个对象节点下,在节点内的第1个元素设计为本节点的名称,通过查找第1个元素标识即可识别这一节点内的数据具体是哪一个设备的什么类型的数据或者是哪一类型的命令操作等。程序数据接收入口处收到响应或命令时,首先将收到的第1个元素解出,得到此识别标识后,再根据标识调用对应的处理方法即可对其后的MIB元素数据进行处理,不再需要对MIB库对象进行全部遍历操作。
在进行远程监控的MIB库设计时,以DC设备为例,总共需要进行控制的元素为两项,包括dcDNLFreq、dcNCAttenLevel;需要设备上报的参数与状态元素为8项,包括控制参数两项以及状态参数(dc-MonMode、 dcLO1Status、 dcLO2Status、 dcPower1Ind、dcPower2Ind、dcPower3Ind)6 项。所有参数定义为Integer32型, DC的MIB库设计如图3所示。
图3 MIB库中设备DC的定义Fig.3 The difinition fo DC in MIB
设备DC的节点名称定义为“dc”,节点下定义的第1个元素dcNameID为此设备的String类型的元素,在发送控制命令或上报参数状态时,填入一个相应的识别字符串,例如,对于设备DC状态与参数的返回填入“DCStatus”,避免应用程序在对接收数据进行处理时对全MIB库进行遍历操作。在接收到服务端Trap上报的数据时,解出第1个元素对象,如设备DC上报“DCStatus”时,即可知道Trap的数据为设备DC的参数状态,直接调用相应的处理过程即可,节省全MIB遍历所需的处理时间和资源。
MIB中对所有设备监控、业务管理和数据库操作的设计均采用同样的方式。
远程监控管理系统设计主要体现在监控软件的设计上,监控软件分为两部分:一部分为监控服务端软件,它实现对所有需要管理的设备进行参数的采集,将采集到的参数实时上报到远程监控客户端软件,或者接收远程客户端软件发出的控制命令,对设备进行控制操作以及对数据库数据的操作;另一部分为远程监控客户端软件,提供一个良好的人机图形界面供用户操作控制设备。
SNMPv2提供了GetRequest、GetNextRequest、SetRequest、Trap、Response、InformRequest、GetBulkRequest等7种命令类型的PDU操作,结合远程监控软件的功能特点以及所传送数据的特点,将使用到GetRequest、SetRequest和Trap等3种操作方式,其中,又主要会大量的使用到SetRequest和Trap这两种操作方式。监控服务端采用Trap操作方式定时(如每秒)将采集的数据上报至客户端进行显示;监控客户端对监控服务端采用SetRequest操作方式进行监控命令的下达,对部分需要获得少量返回参数的监控命令使用GetRequest操作方式进行下达。监控信息流程如图4所示。
图4 监控信息流程图Fig.4 The flow chart of information onmonitoring&control
根据实际远程监控管理的功能需求,主要包括设备参数与状态的监视、设备参数控制、数据库操作、用户信息管理、图像传输等几个部分。对监控软件实现上述功能的操作将根据各自的功能特点采用不同方式进行实现。
在本原型系统的实现过程中, SNMP的开发平台采用AdventNet API,编程语言采用C#。
3.3.1 设备参数与状态监视
监控服务端创建单独的一个线程,以每秒主动发送Trap的方式将设备参数与状态上报至监控客户端。在Trap的PDU中将所有的参数、状态进行一次性绑定并发送。服务端与客户端使用相同的MIB库文件,在接收的时候只需将收到的Trap包中数据的OID对应至MIB库文件中的相应部分,即可解析出所需元素的数值,填入已经定义好的数据结构中以便监控客户端使用。发送设备参数与状态线程部分程序示例如下:
3.3.2 设备参数控制
获得监控客户端界面中需要更改的参数并将其填入对应的控制数据结构中,发送命令方式采用SetRequest操作。设备参数控制命令类型依靠所定义的不同的命令代码表示,将所需控制的命令代码与所需要传送的命令参数,绑定在SetRequest操作的PDU中进行发送。监控服务端在收到SetRequest命令后,首先将命令类型数据解出,判断出具体是哪一条命令,再由具体对应的命令解码方法解出余下的命令参数并控制到设备或进行相应的操作。
3.3.3 数据库操作
在设定的数据库中,主要记录设备的参数状态,因此对于监控客户端来说,操作数据库实际上更多的是对数据库内容的浏览与删除两项操作。对数据库操作,监控客户端采用SetRequest方式将查询或删除数据库命令发出,在发出的命令中绑定了两个日期参数,监控服务端收到命令后,在处理删除数据库命令时,直接将两个日期之间的所有数据记录删除。处理查询命令时需要将数据记录读出后全部返回到监控客户端。因一条记录可能包含有多个参数状态,因此在返回查询数据记录时,采用Trap方式上报,一次返回一条记录的方式进行。监控服务端单独创建一个线程用于循环返回数据记录,一次返回发送50条记录到监控客户端进行显示。如查询的数据记录大于50条,则可在监控客户端进行翻页操作,每点击一次翻页事件,查询下面50条记录并返回,以解决数据记录过多可能造成的获取与显示问题。
3.3.4 用户信息管理
对用户信息的增加、删除操作采用SetRequest方式发送到监控服务端即可,已登录用户实时信息绑定在设备参数与状态获取的Trap包中一并返回,不需要进行单独的处理。在用户信息中最重要的处理为汉字的传输,对于用户信息,使用汉字进行描述,而使用的AdventNet API无法支持String型传输汉字,因此处理汉字时需要在绑定至PDU上之前将汉字进行编码转换,转换为能够正常传输的编码再绑定到PDU上发送,监控客户端收到汉字后需要进行一次逆转换,转换为正常的汉字编码再进行显示。
3.3.5 图像传输
监控软件中对图像传输的要求主要为波形图像,用于设备频谱仪图像的实时监视。图像传输标志置为开始后一直进行传送,因此监控服务端单独创建传输线程,并使用Trap方式进行图像数据的传输。频谱仪图像采用每秒600点的采样率进行波形采集,对每点的数据存储方式为N[X][ Y],即把X与Y轴位置进行存储,发送到监控客户端后进行相应的还原、重绘以恢复图像显示。由于SNMP在对数据的传输时,需要将对象的OID与对象数据一起绑定,若单独设定一个对象OID对应一个点的方式进行绑定,按图像数据每秒更新一次计算,即每秒需要进行600 个点的数据传输,在MIB库中,对图像的传输就要设定600个元素,这样导致MIB过于冗长,因此这里采用在MIB中只设定6个String型元素对象,每100 个点转换为一个String型数据进行传输,一秒内传输6个String型(分为6个数据包)即可完成。在监控客户端收到数据后进行一个循环依次解包,待6个数据包全部接收完毕并解码完成后,即可对图像进行重绘显示。
采用基于SNMP协议的方式实现客户端和服务端之间的网络信息传输,可以规范统一各地面站对外的信息接口,提高接口的可扩展性,有利于远程监控中心收集、处理分布在异地的各地面站的各种设备监控信息。
通过原型系统的设计及试验验证,采用SNMP的方式可以实现远程监控管理的设备参数与状态的监视、设备参数控制、数据库操作、用户信息管理、图像获取等几个主要功能。其中,控制命令发出后设备或数据返回的响应时间均小于2.5 s,并且响应时间可通过对程序内部数据处理逻辑的优化进行缩减;监控软件模拟实际系统运行情况,进行操作测试,在600 s内统计对24种不同设备的共870个元素进行监视,并进行30次不同设备的控制操作,总共产生9 487 500 byte数据量,监控客户端与监控服务端之间的网络信息传输的平均占用带宽为9 487 500/600=126.5 kbit/s。
采用SNMP方式构建的C/S模式远程监控管理系统中,对设备的参数与状态的监视、对设备的参数控制以及自动化测试等功能均能得到良好的实现。但在进行数据库操作与图像传输时,由于数据本身的信息含量很大,网络传输的时效性将受到一定的影响。特别是在进行数据库浏览、查询时,数据量超过规定带宽(例如256 kbit)时,将会出现传输延迟现象,根据数据量的多少,完全传输一张表的内容需要几秒至几十秒不等。
基于SNMP构建C/S模式远程监控管理系统具有一定的可行性,虽然在数据库操作、图像传输等几个特殊方面表现有所欠佳,但这主要还是由于其功能本身的特点以及网络传输带宽等因素所决定的。
本文提出了将SNMP协议与基于C/S结构的远程监控管理系统进行融合,实现了监控服务端与监控客户端之间的网络传输采用标准的SNMP协议进行通信,构建C/S模式的远程监控管理方式。同时,提出了远程监控主要功能在SNMP协议下的实现方式以及MIB中相应的功能与设备的对象元素的设计方式,通过试验验证监控服务端与监控客户端之间采用SNMP协议实现远程监控功能的可行性、占用带宽及性能等。在SNMP协议下,客户端与服务端之间的网络通信为点对点方式,因此,我们在对多远程客户端自由接入服务端的功能支持上并不完善,这将是后续研究的主要方向。
[ 1] 曾凡锋.基于SNMP的网络流量统计分析系统[ J].北方工业大学学报, 2003, 15(1):17-20.
ZENG Fan-feng.The Netflow Statistical and Analytical System Based on SNMP[J].Journal of North China University of Technology, 2003, 15(1):17 -20.(in Chinese)
[ 2] 刘翔, 沈明玉.基于 SNMP与Web的服务监控系统[ J] .合肥工业大学学报, 2008, 31(1):44-47.
LIU Xiang, SHEN Ming-yu.Design of a server monitoring system based on the SNMP and Web[J].Journal of Hefei University of Technology, 2008, 31(1):44-47.(in Chinese)