目录
一、SNMP框架组成
1.物理实体角度
2.协议角度
二、SNMP的功能
SNMP的功能
5种操作
三、BER编码
四、报文解析
五、SNMP实现版本
一、SNMP框架组成
1.物理实体角度
使用SNMP对网络进行管理应该包含:至少一台管理工作站(NMS,Network Management Station)或主机,一个或多个代理(Agent)设备,或者其中还包括代理服务器(Proxy) 。
NMS:该实体能够产生协议命令、接收通告消息;位于管理系统的顶层。在实际的网络管理中至少包含一个这样的SNMP实体。
Agent:该实体能够响应管理节点的请求、主动产生通告消息;位于管理系统的底层。在实际的网络管理中可以存在一个或多个这样的实体。
Proxy Agent:某些情况下,如不同(子)网络间,不同版本间的通信,还存在一种特殊的代理。它用于实现SNMP请求和告警信息的转发,不同版本协议间的转换、翻译等功能。在这些情况下,Proxy对NMS是透明的,它位于管理系统的中间层。
2.协议角度
SMI(Structure of Management Information,管理信息结构):是ASN.1(Abstract Syntax Notation One,抽象语法标记)的一个子集,SMI规定了SNMP中可使用ASN.1中的元素、自定义的数据类型和宏等,由这些元素、数据类型、宏及其相关的语法可定义SNMP中的MIB。
MIB:管理信息库是Agent中对被管理对象的抽象描述,不是SNMP中特有的协议内容。在SNMP中,MIB是以树形结构组织进行查看的。树中每个节点称为OID(Object identifier,对象标识),以类似于网址域名的方式组织,以整数表示各个节点,如1.3.6.4。
简单来说:
ASN.1:一个语法
SMI:根据该语法规定的一种结构
MIB:根据该结构编写的描述被管对象的静态数据库
NMS、Agent、Proxy都认可该数据库,在此基础上通过SNMP进行通信
二、SNMP的功能
SNMP的功能:
①掌握Agent设备当前的状态、参数信息及配置情况;
②定义的重要事件发生变化时,Agent设备能主动“认错”。
具体实现操作有5种,可分为3类:
读取类命令:Get系列命令,即NMS发出请求,获取Agent的管理信息。
设置类命令:Set命令,即NMS将报文中携带的数据写入Agent中。
告警功能:Trap系列,Agent主动向NMS发出告警/事件报文的信息。
5种操作:
(1)Get操作:NMS主动发起的操作,获取特定对象的值。报文携带Get请求标志、待请求的OID名称和值对。一次Get操作只能获取一个管理对象。
(2)Get-Next操作:获取按字典顺序的下一个对象的值。
(3)Set操作:对具有可写权限的OID进行参数的设置,以实现对设备的参数管理。报文携带Set请求标志、待设置的OID名称和值对以及待设置的值。
(4)Get-Response操作:是代理对NMS发出的Get和Set两类命令的响应,根据命令的不同和命令中的参数不同,相应的返回变量绑定的信息以及错误状态信息(代表命令执行成功或失败)等。
(5)Trap操作:Trap是Agent向NMS主动报告重要事件的机制。对于这种报告,NMS无需对Agent进行响应。
Trap信息中的内容主要表明以下4个部分:
地点:发送Trap的Agent端的标识信息,主要是IP地址和系统类型;
时间:系统启动时间;
事件:以一个标识符标识事件;
其他信息:用于传送更多的附加信息,如当发送流量过高的Trap时,附带占用流量前3位的IP地址信息。
三、BER编码
在具体系统中,需要用具体的编码规则将ASN.1语法表示的抽象数据转换成具体的比特流。
SNMP中NMS和Agent有统一的编码规则: BER(Basic Encoding Rule,基本编码规则)
其数据都由三个域构成: 标识域(tag)-长度域(length)-值域(value)
标识域:指明数据的类型,占用1个字节;
长度域:指明数据的长度,不定长,一般为1-3字节;
值域:保存数据的实际编码
四、报文解析
版本:0=SNMPv1、1=SNMPv2c、3=SNMPv3。编码格式:02 01 版本号(0,1,3)
共同体:一个明文字符串,用于鉴权。编码格式:04 L V
例:常用的、也是默认的共同体:
public: 04 06 70 75 62 6c 69 63
private:04 07 70 72 69 76 61 74 65
PDU类型:指明SNMP的请求类型。
0-4分别表示get/get-next/get-response/set/trap
请求标识:为NMS标识该报文的唯一、随机的数字,整型。
差错状态:表示Agent对命令的响应错误状态。
差错状态 | 名字 | 说明 |
0 | noError | 一切正常 |
1 | tooBig | 代理无法将回答装入到一个SNMP报文之中 |
2 | noSuchName | 操作指明了一个不存在的变量 |
3 | badValue | 一个set操作指明了一个无效值或无效语法 |
4 | readOnly | 管理进程试图修改一个只读变量 |
5 | genErr | 其他差错 |
错误索引:指示第一个引起错误的位置
变量绑定列表:OID和值对
五、SNMP实现版本
语言 | 软件 | 开源? | 特点 |
C | Net-SNMP | √ | 功能强大、接口众多、可移植性强 |
C++ | SNMP++ | √ | 高效、可移植、灵活、可扩展的面向对象的开发库 |
Java | jSNMP Enterprises | × | 支持灵活扩展,可减少网络流量、易于管理和有效的Trap处理机制 |
iReasoning Java SNMP API | √ | 高性能、跨平台、线程安全和多线程环境优化 | |
SNMP4J | √ | 企业级开发库、面向对象 | |
AdventNet SNMP API | √ | 可开发独立的基于Web和分布式的跨平台的管理应用程序,可视化IDE,自动代码生成功能 | |
Python | PySNMP | √ | 提供了非常简单的开发接口,需要依赖第三方Python库 |
更多推荐
SNMP框架组成等
发布评论