SNMP的体系结构及工作原理

网管系统软件是由以下部分组成的
 
Manager:
管理员使用的工作站,通过网管软件查看和分析网管数据。
Agent
网管代理。网管代理一般分为两个功能模块和一个公用模块MIB库
查询/设置模块
此模块接受来自Manager的查询和设置指令,并根据指令处理相关数据,如将被查询的数据返回给Manager,或使设置的数据对相关Device生效。
对于SNMP Agent,此模块至少需要实现以下协议接口:
       get-request
       set-request
       get-next-request
       get-reponse
告警模块
告警模块将设备产生的告警发送给Manager。对于SNMP Agent.此模块至少需要实现Trap协议接口。
MIB库
MIB(管理信息库)保存被管理设备的相关管理信息。在SNMP Agent里, MIB通常用文本文件格式保存。
 
一个MIB描述了包含在数据库中的对象或表项。每一个对象或表项都有以下四个属性:
       对象类型(Object Type)
      语法(Syntax)
       存取(Access)
      状态(Status)
在SNMP规范之一的管理信息结构与标识(SMI;RFC 1155/1065)规范中定义了这些属性。SMI对于MIB来说就相当于模式对于数据库。
Device
被管理设备,可以是一台一个进程,计算机,或者分布式的系统。这些设备负责产生和收集诸如配置,性能和业务数据以及告警,是网管数据的来源,同时负责原始数据的整理和统计。Device和Agent之间的交互协议可以不受SNMP协议限制,可以采用任何一种协议交换数据。
Agent设计
可见Agent在网管系统结构的位置相当于管理器和被管设备之间的网关和协议转换器。对Agent的功能需求的范围应该为:
       协议转换。将SNMP协议和被管设备之间的协议互相转换
       转发请求。包括向被管设备转发查询,设置请求。向Manager转发设备产生的告警
      通过MIB库维护被管设备的信息结构
      对Manager提供一个统一的网管接口,无论被管设备有多复杂,对Manager来说只需要和Agent交互就可以获得所有被管设备的网管信息
      不需要牵涉诸如轮巡,告警策略等网管业务逻辑。也不参与被管设备本身对网管数据的处理流程。这些由被管设备的网管业务逻辑层自行处理。
      不需要对数据进行统计分析
       不需要保存历史或实时网管数据
可见对于网管系统来说,Agent功能明确,结构相对简单,虽然必不可少但并非核心部件,并且SNMP Agent已经是事实上的工业标准,有大量的开发包帮助开发人员快速的实现Agent,可以让开发人员将精力投入到网管业务逻辑上。
 
什么是 SNMP?
SNMP是一系列协议组和规范,其提供了一种从网络中的设备中收集网络管理信息的方 法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。其网络管理主 要分为四部分被管理节点(设备)、代理、网络管理工作站、网络管理协议。
 
SNMP主要部分
 被管理节点(设备)网络管理协议  被监控设备
 代理  用来跟踪被管理设备状态的特殊软件或固件
 网络管理工作站  与在不同的被管理节点中的代理通信,并且显示这些代理状态的中心设备
 网络管理协议  被网络管理工作站和代理用来交换信息的协议
 
代理的概念及所提供的服务
管理代理(agent)是一种特殊的软件(或固件),它包含了关于一个特殊设备及该设备所处环境的信息。
其提供的服务:
网络管理工作站可以从代理中获得相关设备的信息。
网络管理工作站可以修改、增加或者删除代理中的相关表项。
网络管理工作站可以为一个特定的自陷设置阈值。
代理可以向网络管理工作站发送自陷。
MIB概念
MIB被称为管理信息库,一个MIB描述了包含在数据库中的对象或表项。
简单网络管理协议
SNMP请求/响应报文
简单网络管理协议允许网络管理工作站软件与被管理设备中的代理进行通信。这种通信可以包括来自管理工作站的询问消息、来自代理的应答消息或者来自代理给管理工作站的自陷消息。
SNMPv1实现起来很简单,其包含5个请求/响应原语:
get-request
set-request
get-next-request
get-response
trap
报文格式
IP首部 UDP首部 版本 共同体  PDU类型(0-3) 请求标识  差错状态(0-5) 差错索引 名称  值 名称  值  ...
 PDU类型4  企业  代理地址  Trap类型(0-6)  特定代码  时间戳  名称  值  ...
 PDU类型  名称
 0  Get-request
 1  Get-next-request
 2  Get-response
 3  Set-request
 4  Trap
SNMP开发工具
开发工具的使用
AdventNet所提供的的开发工具包,支持多种平台。
Agent++
SNMP++
Microsoft Virtual Studio 6.0,Windows下c++语言的开发包。MS自身提供一组称为WinSNMP的API(在MSDN中提供详细文档),而且MS提供基于Agent Service的SNMP Extension Agent开发。
ucd-snm(net-snmp)p是Linux平台下著名的C语言SNMP开发包,公开源码,是最常用的开发Agent的软件包。
辅助工具的使用
AdventNet所提供的对mib开发一系列开发工具包,包括:
Mib Browser
Mib Editor
Mib Compiler
熟悉SNMP的开发过程
SNMP开发流程
 
Mib的创建和源码生成
首先第一步是Mib设计,开始Mib设计的时候要确定将被管理的对象纳入管理信息库,最终实现asn.1的文档,在此可以使用AdventNet所提供的Mib Editor来实现。通过Mib编译器将asn.1的文档编译成c文件和头文件,可以使用Mib Compiler编译。
Agent的开发
Agent++支持多种平台,主要有solaris, hp unix, windows等。使用方法稍有不同,但原理一致,即生成库文件,进行开发应用时使用头文件及库文件即可。
? unix下直接进行make,如果有问题对makefile中的一些宏/变量进行调整。在solaris下基本没有问题。
? windows下vc6编译请参考附录
Snmpapp的开发
snmp++支持多种平台,主要有solaris, hp unix, windows等。使用方法稍有不同,但原理一致,即生成库文件,进行开发应用时使用头文件及库文件即可。
unix下直接进行make,如果有问题对makefile中的一些宏/变量进行调整。在solaris下基本没有问题。新版本支持snmpv3,需要用到libdes或其他加解密库。
windows下vc6编译请参考附录
附录:windows下vc6编译
创建项目,加入所有的源文件和头文件后。
要在PROJECT的SETTING中设置如下项:
1 在C++页,/I 项加入AGENT++的INCLUDE和SNMP++的INCLUDE 目录
2、设置成MTd 多线程DEBUG模式。
3、 编译运行。
以上用来编译AGENT++库。
对于AGENT++的例子,要在PROJECT的SETTING中设置如下项:
1、创建WIN32的控制台程序;
2、加入程序代码;
3、加入SNMP++.LIB和AGENT++.LIB;
4、 在C++页,/I 项加入AGENT++的INCLUDE和SNMP++的INCLUDE 目录
5、设置成MTd 多线程DEBUG模式。
6、在LINK页,加入Ws2_32.lib
7、加入/nodefaultlib:"libcmtd.lib"
8、编译运行。
 
相关参考
 
SNMP FAQ
        ftp://rtfm.mit.edu/pub/usenet/news.answers/snmp-faq/part1
        ftp://rtfm.mit.edu/pub/usenet/news.answers/snmp-faq/part2
SNMP WEB
        http://netman.cit.buffalo.edu/index.html
        http://snmp.cs.utwente.nl
        http://www.onramp.net/~cwk/net-manage.cgi
SNMP MAIL LIST
        snmp-request@psi.com
        snmpv2-request@tis.com
        snmpv3-request@tis.com
SNMP NEWS GROUP
        comp.protocols.snmp
        info.snmp
        comp.dcom.net-management
文章出处:DIY部落( http://www.diybl.com/course/3_program/c/c_js/20090303/157335.html)