APP下载

SNMP协议管理机制及其代理进程的实现

2009-04-09

新媒体研究 2009年5期
关键词:代理

孙 为

[摘要]首先论述简单网络管理协议SNMP的产生、发展及其管理机制,然后提出在SNMPv3的框架结构上实现代理进程的一种方案。

[关键词]SNMP协议 管理模型 代理

中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0310046-02

一、SNMP的产生

随着现代网络规模扩大化,结构的复杂化,早期网络时代的人力管理已经无法胜任这一工作了,自动网络管理工具由此而产生。

要有效地管理由不同厂家的产品构成的网络系统,就要求各个网络产品提供统一的管理接口,即遵循标准的网络管理协议。目前国际上标准的网络管理协议有两个,一个是ISO于70年代末提出的CMIP,一个是IAB 80年代末提出SNMP。CMIP(公共管理信息协议)建立在OSI基础上,它的协议大而全,需兼顾各个方面的要求,十分复杂,实现起来很困难,所以目前对其仅停留在研究阶段。SNMP(简单网络管理协议)是IAB为管理基于TCP/IP的网络而制定的网络管理协议,于1990年4月被确定为Internet标准。它可以管理和监控任何形式的网络设备,它的主要特点是简单、实用、易扩展。目前绝大多数厂家都支持和应用SNMP,SNMP已成为事实上的网络管理工业标准。

二、SNMP的发展

SNMP一共发展了3个主版本,分别为SNMPv1,SNMPv2和SNMPv3。SNMPv2又分为若干个子版本,其中SNMPv2c应用最为广泛。

1990年5月,RFC1157出版,定义了SNMPv1。SNMPv1在90年代初得到了迅猛发展,但同时也暴露了明显的不足,如在功能上难以实现大量的数据传输,在安全方面缺少身份鉴别和加密机制。

1993年发布的SNMPv2比SNMPv1有较大的进步,表现在支持分布式网络管理、扩展了数据类型、可以实现大量数据的同时传输、增加了表的处理能力、加强了数据定义语言。

但是,SNMPv2并没有完全实现预期的目标,尤其是安全性能没有得到提高。1996年发布的SNMPv2c是SNMPv2的修改版本,功能有很大增强,但是安全性能仍没有得到改善,继续使用SNMPv1的基于共同体名的身份鉴别方式。

IETF SNMPv3工作组于1998年1月提出RFC2271-2275,正式形成SNMPv3。这一系列文件定义了包含SNMPv1、SNMPv2所有功能在内的体系框架和包含鉴别服务和加密服务在内的全新的安全特性,同时还规定了网络安全和访问控制规则。

三、SNMP的通讯机制

SNMP代理和管理站通过标准的SNMP协议报文进行异步通信,这些报文都是单个包。由此,SNMP使用UDP作为底层传输协议。UDP使用无连接服务,所以SNMP不需要在代理和管理站之间保持连接来传输消息。

(一)SNMP的通讯原语

SNMPv1中定义了五种通讯原语:GetRequest、GetResponse、GetNextRequest、SetRequest和Trap。SNMP管理站使用GetRequst请求被管设备的代理从设备中取特定OID的管理信息比如系统的名字,系统中网络接口数,端口的流量等等。SNMP代理用GetResponse来响应管理站的请求。管理站用GetNextResponse指示读取指定的OID所表示的被管理对象在MIB树中按照字典顺序的下一个被管理对象的管理信息的值,与GetResponse结合起来可以检索表中的数据,浏览MIB树。管理站用SetRequest通过代理来改变设备中的配置,用于配置管理的实现。Trap是SNMP代理发送给管理站的非请求消息,通知管理站发生了一个特殊事件[6]。例如:代理重启、线路连接失败或消息认证失败等等。

SNMPv2中增加了GetBulkRequest的通讯原语,GetBulkRequest与GetNextResponse有相同的操作原则,也就是说,所选择的总是按字典序的下一个对象实例。不同之处在于,使用GetBulkRequest可以指定选择多个字典顺序后继。这样,可使检索大批管理信息所需的协议交换次数最少化。SNMPv2还增加了InformRequest通讯原语,此通讯原语用来负责管理者与管理者之间的通讯。

(二)SNMP报文格式

SNMP报文格式主要有两部分构成,协议头和SNMP协议数据单元。在不同的版本中协议头不同。

1.SNMPv1的报文格式。

SNMPv1报文的协议头由版本域和共同体域组成。其中版本域为version-1(0),共同体域是为增加系统的安全性而引入的,它的作用相当于口令(password)。agent可以要求manager在其发来的报文中填写这一项,以验证manager是否有权访问它上面的MIB信息。community的缺点是没有加密功能,由于是明码传送的,所以很容易被监听者窃取。SNMPv2中改进了这一点。

SNMP协议数据单元是实际要传送的数据,SNMPv1中有5种PDU,即对应5种协议操作,如图2所示。其中GetRequest、GetNextRequest和SetRequest

的PDU的格式是一样的,包括PDU类型,请求标识,错误状态,差错索引,变量绑定列表域(由多个变量绑定组成,每个变量绑定由对象标识符和对象得值组成),而Trap的PDU格式比较特殊,它由于包含的信息不同,结构上有所差别。

2.SNMPv2c的报文格式。

SNMPv2c在协议报文和PDU格式方面和SNMPv1大体一样。不同的是SNMPv2的Trap报文和其他报文格式统一了,而且比v1版本增加了Inform、GetBulkRequest报文。这两种报文除了GetBulkRequest报文中错误状态和差错索引处分别由Non-Repeaters(不重复个数)和Max-Repetitions(最大重复次数)所代替,其余部分和SNMPV1的报文一样。SNMPV2的报文格式更加一致,这样简化了接收者的处理任务。

3.SNMPv3的报文格式。

SNMPv3在SNMPv2基础之上增加了安全和管理机制,SNMPv3定义了一种全新的报文格式,协议头增加了很多SNMPv3的安全参数,如图3所示。

(三)SNMP报文的发送

一个SNMP实体按照以下步骤来传送SNMP的5种报文的一种到另一个SNMP实体:

1.根据RFC1157中定义的ASN.1结构,构造SNMP的PDU;

2.将PDU连同源地址,目标地址,共同体名传至鉴别服务,等待它进行加密,签名等操作后的返回结果*;

3.在*前面加上协议头,形成SNMP报文;

4.按照BER规范对3所形成的SNMP报文进行编码,并传递给传输服务。

其中,step2只在SNMPV3版本中存在。

(四)SNMP报文的接收

一般,一个SNMP实体经过以下步骤接收一个SNMP报文:[3]

1.从传输层接收到报文编码的字节流,按照BER规范进行解码;

2.对该消息的基本句法进行检查,如果报文没有通过分析,就丢弃该报文;

3.检查版本号,如果版本不兼容就丢弃该报文;

4.协议实体将安全参数,报文的PDU部分、以及源与目的传输地址传递给鉴别服务:如果认证成功,鉴别服务将按照ASN.1标准构造PDU返回给SNMP协议实体;如果鉴别失败,鉴别服务触发鉴别失败的事件,SNMP协议实体产生鉴别失败的Trap,并丢弃该报文;

5.协议实体将对鉴别成功的PDU进行ASN.1的句法检查,如果失败则丢弃此PDU。否则,按照版本号进行SNMP访问控制检查,若通过则对PDU进行相应处理,否则丢弃报文。

四、SNMP协议中代理进程的实现

为兼容SNMP的3个版本,按照SNMPv3的框架来实现代理进程,如图4所示。

(一)代理进程的框架结构

SNMPv3中代理和管理者都称作SNMP实体,每一个实体主要有两个组件:SNMP引擎和一个或多个应用程序。

引擎与实体是一一对应关系,它包含四个组件:发送器、消息处理子系统、安全子系统和访问控制子系统。其中发送器支持多个版本的SNMP消息同时存在,它的功能包括:发送和接受网络中的SNMP消息;决定SNMP消息的版本并和符合相应版本的消息处理模型交互;和命令发生器应用程序进行PDU的交互。消息处理子系统是为传输和从接受到的消息中提取相关信息参数的准备模块,它其中按照处理的消息的版本格式的不同分成了不同的子模块。安全子系统提供了安全服务,其中包括加密和验证。访问控制子系统提供授权服务,它也可以有多个访问控制模型。

代理实体中的应用程序有命令产生器应用程序,通知产生器应用程序等。

(二)代理进程的流程

代理进程的主要工作是响应管理者的请求,对设备的管理数据进行读写操作,然后把取得的信息以SNMP报文的形式反馈给管理者。代理进程的另一个工作就是当出现特殊事件的时候,向特定的管理端发送Trap。代理进程主要可由3个独立的线程来实现:

1.代理主线程SnmpAgent,此线程用于启动,运行,关闭代理进程。该线程启动后,首先初始化系统配置,导入mib文件和xml文件(对象实例数据文件),并启动以下其他两个线程,让其独立运行。然后启动发送器,从端口等待接收管理者发送过来的报文编码字节流,然后解码成Snmp的报文,并进行版本兼容的检验(不兼容直接丢弃),调用安全子系统,进行PDU的验证加密(不成功丢弃报文,并发认证失败的Trap),将获得的可继续处理的请求报文返回给主线程。主线程调用请求响应模块,并将获得的请求报文传给它,请求响应模块将对请求做出正确的响应过程,取得必要的管理信息,返回给主线程。主线程把取得的管理信息交给消息处理模块,该模块根据将信息封装PDU并把响应PDU传给命令产生器,最终封装成响应报文,返回主线程。[7]主线程最后将响应报文传给发送器发送给管理者。

2.Trap服务线程SnmpTrapService,此线程负责接收触发Trap的事件,获取封装Trap报文的参数信息,然后将信息交给消息处理模块。

3.数据收集线程SnmpDataCollect,此线程一方面要定时从设备接口程序中收集管理数据,并从内存更新到xml文件(xml文件在SnmpAgent线程启动时已被导入到内存中的一棵树),这样,请求响应模块在响应get或getNext操作时,直接从内存的xml树中读取所要求的对象实例的值。当处理set操作时,如果xml文件更新成功,则要发出通知给设备接口程序,以改变设备中的配置。

五、结束语

SNMP具有很多的优点,因此得到较广泛的应用。但它安全性、多协议支持等,需要在今后版本中加以解决。随着SNMP的新发展,在协议实现过程中,软件的结构必须要利于各个版本的共存。

参考文献:

[1]Mani Subramanian.Network Management:Principles and Practice,1st edition Copyright 2000.

[2]Mark A.Miller,用SNMP管理互联网络(第二版),中国水利水电出版社,2001.7.

[3]岑贤道、安常青,网络管理协议及应用开发,清华大学出版社,1998.7.

[4]William Stallings,SNMP网络管理(第一版),中国电力出版,2001.9.

[5]杜荔等,一种基于SNMP实现MIB库多变量访问的方法,东北大学学报(自然科学版),1998.8.

[6]高宏等,Internet网络管理协议简单网络管理协议(SNMP),数据通信,1999.1.

[7]蔡皖东,SNMP网络管理机制及其实现,微电子学与计算机,1999.1.

作者简介:

孙为,男,助教,主要研究方向:网络管理、协议工程学。

猜你喜欢

代理
1号异星球餐馆·不可思议的代理老板
《航空模型》团体代理招募
澳航货运代理有限公司船期表
澳航货运代理有限公司船期表
澳航货运代理有限公司船期表
刊评调查
澳航货运代理有限公司船期表
澳航货运代理有限公司船期表
澳航货运代理有限公司船期表
复仇代理乌龟君