一个基于SNMP-AGENT的分布式方案

摘要:本文在简要介绍SNMP协议的起源和发展之后,总结了SNMP的网络管理模型,并提出了三种SNMP Agent的设计模式,最后讨论了在分布式网管系统中的SNMPAgent的实现。
关键词: SNMP、MIB、代理进程、AgentX、SNMP++、Agent++

1 引言
    简 单网络管理协议SNMP是IETF的研究小组为了解决在Internet上的路由器管理问题提出的,现在它已经用于管理所有的网络设备,包括路由器、 UNIX工作站和PC机等。它能支持代理进程的处理能力并能在当今各种网络协议上运行,如IPX、OSI、AppleTalk以及其它传输协议等。近年 来,SNMP得到了广泛的应用,并且已经成为网络管理事实上的标准。自1990年IETF出台第一个版本SNMP V1以来,目前已经发展到了第三版SNMP V3。

2 SNMP网络管理模型
    SNMP网络管理模型由四部分组成:
    1) 网络管理站
    2) 被管设备
    3) 管理信息库(MIB)
    4) 管理协议(SNMP)
    在 SNMP中一般采用管理者-代理的管理模型,如图1所示。管理者可以是工作站、PC机等,它负责发出管理操作的指令,并接收来自代理的信息。代理则位于被 管理的设备内部,把来自管理者的命令或信息请求转换为本设备特有指令,完成管理者的指示,或返回它所在设备的信息。而一般情况下,代理不主动发出消息,而 仅仅响应消息。陷阱消息是唯一由代理发起的 SNMP 通讯。陷阱是代理警报触发的事件,例如系统重新启动或非法访问,它提供增强的安全性。管理者和代理之间的通信遵从SNMP及相关协议。


    每 个代理进程均维护着一个管理信息库,构成特定代理之管理信息库的MIB组是决定于该设备的功能和所要管理的资源。MIB的每一项包含一种信息:对象类型、 语法、访问及状态等。MIB的项通常由协议规定,并且严格遵守ASN.1的格式。MIB中的数据对象以一种树状分层结构进行组织,每个MIB对象都有唯一 的位置,因此也具有唯一的名字和对象标识符。MIB中的被管理对象是被管理设备的一个特定性征,它由一个或多个对象实例组成,对象实例实际上就是变量。
SNMP 网络管理协议作为管理进程(Manager)和代理进程(Agent)之间的通信协议,它定义了命令和响应的报文格式,也描绘了高层管理框架所需的授权和 鉴别机制。SNMP协议已有v1、v2c、v3等版本,其中SNMPv1仅包含较为简单的五种(Get、GetNext、GetResponse、 Set、Trap)操作;SNMPv2c在第一版的基础上增加了三种(GetBulk、Inform、Report)操作;而SNMPv3版在增强和完善 命令操作的同时,增加了基于USM(用户安全模式)和VACM(查看的访问控制模式)的安全机制。

3 SNMP代理的设计模式
    代理是驻留于网络被管理设备中的处理实体。它对来自网络管理站的SNMP报文进行解码,把它们从ASN.1格式转换到便于处理的内部格式。然后,它要传送响应、处理差错,并在必要时发送陷阱PDU。

    代理进程的MIB包括能为特定网络设备提供管理信息的所有管理对象。如果一组MIB对象对应于这个设备所支持的服务、协议和部件,那么它们应当是代理进程MIB的一部分,这个代理进程就要实现他们。

3.1 单一Agent模式
    单 一代理是指被管设备上只有一个代理进程。代理既要与网络管理站通讯,进行SNMP协议的操作和转换;也要对本设备进行管理,搜集设备信息和监控设备。这个 代理进程要实现本设备所需要支持的所有MIB对象。这种单一代理模式比较简单,早期的代理多数是使用这一代理模式的。其缺点就是MIB对象的扩展比较困 难,当被管设备有新的MIB对象实例需要管理时,代理需要重新开发。

3.2 委托Agent模式
    委托代理是一个中介,它使标准网络管理系统能够管理本来不能管理的网络元素。用SNMP的说法,委托代理实现了对不受标准SNMP代理进程直接控制或不直接支持UDP/IP协议栈的网络对象的管理。委托代理是对管理能力的强有力扩展。


    图2给出了委托代理在网络管理站与需要管理的对象之间所起的作用。这种代理需要解析管理信息并能将其MIB化,还要能够向网络管理站发送正确的响应。同时还需要将本地协议转换成SNMP/UDP/IP协议以便与网络管理站进行通信。

3.3 Master-SubAgent模式
    为 了解决Agent的可扩展性,IETF早期提出了SMUX(SNMP多重协议),后来发现存在缺陷。在1998年IETF提出了AgentX(Agent Extensibility)协议标准。AgentX是包含一个主代理和多个子代理进程的一种体系结构,多个子代理进程可以驻留在同一个设备或者相互连接 的不同设备中。它们之间通过标准接口进行通信。主代理进程处理SNMP协议,每个子代理进程负责一个特定的MIB视图。当主代理进程在运行并负责与网络管 理站通信时,单一的子代理进程API实现子代理进程的动态注册与注销。可扩展代理的优点在于,它能够在网络设备运行时动态增加和删除MIB实例。可扩展代 理的体系结构如图3所示。


    AgentX 协议允许多个子代理来负责处理MIB信息,该过程对于SNMP管理应用程序是透明的。AgentX协议为代理的扩展提供了一个标准的解决方法,使得各子代 理将它们的职责信息通告给主代理。每个符合AgentX的子代理运行在各自的进程空间里,因此比采用单个完整的SNMP代理具有更好的稳定性。另外,通过 AgentX协议能够访问它们的内部状态,进而管理站随后也能通过SNMP访问到它们。随着服务器进程和应用程序处理的日益复杂,最后一点尤其重要。通过 AgentX技术,我们可以利用标准的SNMP管理工具来管理大型软件系统。

4 SNMP代理的实现
    对于 分布式的网管系统,SNMP 代理可以采用Master-SubAgent的实现模式。在编写SNMP网络管理软件和代理端程序时,C和C++语言是最常用的。由HP公司开发的 SNMP++、Agent++等标准API的采用,能够使SNMP的实现更加高效,程序的错误更少。

    Snmp++是为网络管理应 用程序开发者提供的具有SNMP服务的一套C++类的集合。它具有基于面向对象模型建立的SNMP应用程序接口,在最小化的范围内使用已经存在的SNMP 库,保证了程序的高效和可移植性。对于使用TCP/IP协议的Internet来说,Snmp++封装了底层的Socket操作提供了简单的API供开发 者使用。

    Agent++扩展了SNMP++的基本概念,它是用来支持SNMP代理开发的一套C++类的集合。它提供了完整的协 议引擎和调度表支持,继承了Snmp++的优点,封装了绝大部分的SNMP的标准操作,并且利用面向对象的特性,使开发者能够通过派生的子类,重载其中的 虚函数,根据应用程序的需要灵活控制程序。另外,它还提供了对委托代理和发送通知消息的C++类支持。

    AgentX++是基于 Agent++扩展的C++类API,主要对AgentX协议的支持。它需要结合SNMP++/Agent++ API的使用来创建支持AgentX协议的SNMPAgent。它支持Master和SubAgent的代理开发模式。它允许SubAgent的独立开发 并向位于本地或网络上的Master进行注册。

5 结束语
    本文详细介绍了SNMP代理的设计模式,分析了基于AgentX协议的分布式Master-SubAgent的实现。该系统优点在于框架结构设计,支持动态加载MIB管理模块,开发流程简单易懂,具有很强的实用性,已广泛应用在商用网管代理开发平台上。

参考资料:
[1] Sean Harnedy,简单网络管理协议教程,电子工业出版社
[2] Frank Fonk,The AgentX Protocol implementation For AGENT++
[3] M.Daniele, B.Wijnen, M.Ellison, D.Francisco, RFC2741,Agent Extensibility (AgentX) Protocol
[4] D.Harrington,R.Presuhn,B.Wijnen,RFC2573,An Architecture for Describing SNMP Management Frameworks
[5] M.Rose, RFC1227,SNMP MUX Protocol and MIB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值