轻松学习SNMP协议之入门篇


1. SNMP治理模型
1.1. 什么是SNMP
SNMP(Simple Network Management Protocol)是被广泛接受并投入使用的工业标准 , 它的目标是保证治理信息在任意两点中传送 , 便于网络治理员在网络上的任何节点检索信息 , 进行修改 , 寻找故障;完成故障诊断 , 容量规划和报告生成 。它采用轮询机制 , 提供最基本的功能集 。最适合小型、快速、低价格的环境使用 。它只要求无证实的传输层协议UDP , 受到许多产品的广泛支持 。SNMP在TCP/IP协议族中的地位如下图:
 
1.2. SNMP的基本操作:
 
SNMP以GET-SET方式替代了复杂的命令集 , 利用基本操作演绎出全部操作 。用户可以采用治理信息库标准或按标准的方式来定义自己的治理信息库(MIB) 。这样做的好处是:通过降低占网管系统中大多数的代理部件的成本来降低整个网管系统的成本 。
1.3. 网管站和代理
网管站(NMS)对网络设备发送各种查询报文 , 并接收来自被管设备的响应及陷阱(trap)报文 , 将结果显示出来 。代理(agent)是驻留在被管设备上的一个进程 , 负责接受、处理来自网管站的请求报文 , 然后从设备上其他协议模块中取得治理变量的数值 , 形成响应报文 , 反送给NMS 。在一些紧急情况下 , 如接口状态发生改变 , 呼叫成功等时候 , 主动通知NMS(发送陷阱TRAP报文) 。
他们的关系如下图:
 
SNMP就是用来规定NMS和Agent之间是如何传递治理信息的应用层协议 。
1.4. ASN.1和SMI
SNMP是应用层协议 , 它要求两端的协议实体交换各种报文 , 而低层要求用户数据都是BYTE序列 , 这就产生了一个问题: SNMP协议实体如何从接受到的一个BYTE序列中识别出报文又如何把一个用内部数据结构表示的报文转换成一个可供发送的BYTE序列 , 也就是编解码问题 。
解决这个问题 , 就需要一个定义从实际的软件数据结构中抽象出来的数据类型的表示方法 , 称为抽象句法 。
ASN.1就是用来描述抽象记法的语言 , 事实上可应用与任何协议层 , 在它的基础上 , 通过规定编码规则 , 就可以确定数据在传送中的八比特组的值 。
SMI(StrUCt of Management Imformation) , 通过定义一个宏OBJECT-TYPE , 规定了治理对象的表示方法 , 从这个意义上说 , 它是ASN.1的一个子集 。另外它还定义了几个SNMP常用的基本类型和值 。
MIB (Management Imformation Base), 是所监控网络设备的标准变量定义的集合 。SNMP用层次结构命名方案来识别治理对象 , 就象一棵树 , 树的节点表示治理对象 , 它可以用从根开始的一条路径来无二义的识别 。见下图:
 
治理对象B可以用一串数字唯一确定{1.2.1.1} 这串数字是治理对象的object identifier(客体标识符) 。通过object identifier可确定从根到 B的一条路径 。
治理对象 A 的object identifier 是{1.2.1.1.5} , 或{B 5},后一种表示方法表明A是B的第5棵孩子 。
在agent中这棵树是用较复杂的数据结构来实现的 , 幸运的是 , 建树这个工作可由MIB编译器完成 。在树的叶节点中 , 存放有访问函数的指针 , Agent就是通过调用这些函数来从相关模块取得治理变量的值的 。
1.5. SNMP报文
SNMP报文结构如下:(编码之前)
 
SNMP共有5中报文 , 所以其PDU也有5中 , 仅以GetRequest-PDU为例
 
2.治理变量的表示
治理变量表示治理对象类型在某一时刻的值(或称该类型的实例) , SNMP以治理变量作为操作对象 。
治理变量的表示方法是这样规定的:形如x.y , 其中x是治理对象的object identifer 。y是能唯一确定对象类型值的一组数字 , 在非表型变量中为0 , 在表型变量中是这个表的索引 , 比如接口表中的接口号 , 或路由表中的目的网络地址等等。如:在MIB文件里定义了ipAdEntNetMask这一治理对象 , 其object identifier为1.3.6.1.1.5.6.1.3它是个路由表中的一项 , 它的一个实例就是路由表中某一行的子网掩码 , 假如这行的索引、目的网络地址为129.102.1.0 。则这个变量名是:1.3.6.1.1.5.6.1.3.129.102.1.0 。在以后的说明中 , 为了方便 , 把唯一确定治理变量的一组数字 , 也就是x.y中的y称作实例 。

推荐阅读