广东财经大学学报

协议家族的新成员

 

在当前国内高校的网络管理中, SNMP一直是被普遍接受的通用网络管理协议标准和工业标准。但是随着各高校网络设备数量越来越多和复杂,需管理监控的数据日益增多,使SNMP网络管理协议更高效地工作,成为了保障高校网络安全运维的重要条件。上海财经大学网络中心对此问题做了专门研究,设计出两种新的SNMP服务,并利用现有的SNMP4J开源库,在其总体框架上进行扩展,有效地提高了网络设备的管理效率。

校园网络设备管理现状

上海财经大学现有网络设备1000多台,需管理的设备型号复杂多样, 尤其是核心层设备上的管理数据量非常大,使用传统的SNMP管理协议来监控和管理效率比较低。对于学校的网络管理系统来说,如设备告警和性能等许多业务数据,是通过管理信息库MIB表来获取的。由于SNMP标准报文GET,GETNEXT报文的限制,如要获取相关的业务数据信息,必须将整个MIB表中告警和性能节点的数据全部获取下来,然后再进行过滤筛选。当整个MIB表非常庞大时,这种做法耗时较长且会消耗较多的带宽。

图1

SNMP新成员构思方案

针对以上问题,我们在上海财经大学网络管理系统中设计了新的解决方案,提出两种新的SNMP服务,getAlm和getPm。

首先在新SNMP服务中需对过滤条件进行设置,封装在SNMP的GET报文中,有选择的获取MIB对象值。新服务沿袭了SNMP协议内容简单的特点,只需对PDU报文的get-request进行扩充(get-Alm-request和get-Pm-request),response报文结构维持不变,但需要在返回的PDU数据包中,增加对新服务的异常状态处理。

对于get-Alm-request,默认设置的过滤选项:cardtype板卡类型,severity严重级别,alarmtype告警类型,alarmtime告警产生时间。而对于get-Pm-request,默认选项包括:pfmtime性能产生时间 ,pfminterval性能监控间隔(包含15分钟或24小时), cardtype板卡类型,pfmparameters性能监控参数。上述这些选项可在SNMP管理端进行设置,SNMP的Agent端支持按上述选项过滤输出结果。

对SNMP协议数据单元做如下新的定义:

从上表可以看出,在使用ASN.1描述SNMP的Protocol Data Unit(协议数据单元简称PDU)定义中,在choice可供选择的类型中新增了“20”和“21”两种新类型。

对于这两种新PDU的定义,在下面的ASN.1中给出了具体描述。

上述PDU设计了最多八个逻辑表达式的条件,现在假设这个过滤条件数为n,这n个条件将出现在VarBindList变量表中。对于varbindlist的变量名和值,这里的变量名指的是上述cardtype, severity等过滤选项所对应的目标Object Identifiers(简称OID)值。而变量值罗列出了这些目标对象可能的取值范围。在逻辑条件表达式中,需要逻辑运算符来把变量名和值联系起来。因此设计了在目标对象名中用固定的整数值来表示相应的逻辑运算符:0表示“=”,1表示“<”, 2表示“>”, 3表示“<=”,4表示“>=”, 5表示“!=”。

这样varbindlist变量表中的名和值键值就可以联系起来了。下面给出varbindlist的定义。

(出现在response报文中可能返回的异常结果。)

这里设置的endOfAlmTable和endOfPmTable标签,是因为考虑到设置的返回记录数大于实际数目时可以提前跳出。varbindlist变量表中的字段包括了两个条目:过滤条件和请求字段。其中的前x个varbind表示过滤条件,x的值就是number-of-logic字段值,其中每个varbind由变量名和值组成;而其余的varbind表示请求字段,其中的varbind只包含了所取的变量名。

另外两个PDU中的max-returnrecords字段表示了根据条件,AGENT端所返回的最大记录行数。如果该值设置成了n,则只会返回所有结果集中的前n条记录数据。如果max-return-records设置成了-1,那么AGENT就会返回所有的记录结果。

当AGENT在处理get-Alm-request 和get-Pm-request请求报文的过程中,可能会出现各种异常情况,因此也需要对response报文作相应的修改。

下面给出它的定义。

上述定义中,20-23是针对getAlm和getPm请求报文的响应。numberOfLogicError指的是逻辑条件数错误,由于目前设计的最大条件数为8,因此取值范围为1到8。maxReturnRecords应为最大返回的记录数,如取值异常,maxReturnRecordsError就会显示错误。myObjectNameWrong指的是由于myObjectName后的数值取值异常而引起的错误。正常情况下,myObjectName后的数值只能在0到5之间取整数值。最后的conditionWrong指的是在getAlm和getPm请求中使用了错误的过滤条件,所取数值超过了取值范围,将会返回conditionWrong状态的错误。