论文部分内容阅读
摘 要 本文介绍了对SNMP MIB变量进行编译和浏览的一组计算机网络管理的底层工具,包括一个MIB编译器、一个MIB浏览器和MIB树的通用数据库实现。该组MIB工具的特点在于简单实用,并在某些方面具有特色与创新。
关键词 计算机网络管理;SNMP;MIB编译器;MIB浏览器
中图分类号:TP393 文獻标识码:A 文章编号:1671—7597(2013)051-109-01
管理信息库(MIB)是SNMP标准的重要组成部分,它是由许多MIB变量组成的一个树型结构,定义了网络设备可以被管理的内容。除了SNMP标准定义的MIB变量以外,设备厂家为了更好地管理自己的设备,常常需要定义大量扩充的MIB变量。设备厂家一般提供给用户若干正文形式的MIB文件,这些文件中按照ASN.1的文法给出了该设备支持的所有MIB变量,包括SNMP标准定义的和厂家扩充的。因此,要想管理一个网络设备,首先必须了解该设备支持哪些MIB变量。
1 MIB编译器
MIB编译器接受按ASN.1语法编写的MIB文本文件(包括标准RFC和厂家扩充的),识别MIB文件中定义的对象,包括其类型、对象标识符(OID)、访问权限、状态、缺省值等属性,检查文件中的语法和语义错误,如果没发现错误就生成网络管理平台可以使用的MIB树内部结构。
MIB编译器的外部接口主要功能包括:对输入的MIB文本文件进行词法、语法和语义分析,产生MIB树内部结构;为上层网管应用程序提供MIB树内部结构的调用接口;通过转换器将MIB树内部结构转换为通用数据库实现。
MIB编译器的功能结构可以分成词法分析、语法分析、MIB树构造和错误处理四个部分。词法分析:对输入的MIB文本文件进行预处理,去掉注释和空白字符;识别输入文件中的一个个单词,构造相应的属性字序列。语法分析:对属性字序列进行上下文分析,检查是否符合SMIv1和SMIv2语法规则,识别出一个个的结点对象及其属性。MIB树的构造:对输入的MIB结点序列进行处理,根据结点的OID,识别每个结点的父结点、子结点和兄弟结点,设置结点相应指针以形成一个二叉树结构。
MIB文件经过编译,其中定义的MIB变量就被加入到MIB树内部结构中。当某个MIB文件/模块过期了(一个MIB文件中可能定义了多个MIB模块),需要用更新的MIB模块来替代时,需要将原先编译的MIB文件/模块从MIB树内部结构中卸载下来。
2 MIB浏览器
MIB浏览器一般提供给高级网络管理人员使用,主要完成两件工作:1)查看已经编译的MIB对象的定义信息。2)直接利用SNMP协议机读/写被管设备所支持的MIB对象的当前值。
2.1 查看MIB变量的定义信息
MIB浏览器首先读入存储在数据库中的、由MIB编译器编译生成的MIB定义信息,根据MIB变量的OID确定变量之间的父子关系,生成一棵完整的MIB树并显示在界面上。
用户通过鼠标点击可以浏览这棵MIB树,选择需要查看的MIB变量。另外,用户也可以直接输入需要查看的MIB变量的OID,后一种方法适合于用户已知MIB变量的OID或者查看一个尚未编译的MIB变量的当前值的情况。
为了查看一个MIB变量的定义信息,如变量的名字、OID、定义宏、数据类型、存取控制和描述信息等,MIB浏览器根据选中MIB变量的OID,在MIB数据库的第一级表中查找对应的记录。根据记录中定义宏字段的值,在相应的数据库表格中查找对应的记录,取得MIB变量的各种定义信息。
2.2 读写MIB变量的当前值
通过指定设备的IP地址、MIB变量实例以及读或写Community,调用SNMP协议引擎提供的API函数,采用SNMPv1协议的Get、GetNext、Set以及SNMPv2的GetBulk操作与设备上的SNMP代理交互,读写设备所支持的MIB变量的当前值。可以同时读写多个MIB变量实例。
2.3 遍历Agent实现的MIB对象树
方法如下:对于GetNext操作返回的下一个变量实例的标识符,从后向前进行分析。首先看整个标识符是否代表一个已识别的MIB变量,如果不能认识,就去掉标识符最后一个分量再重复上述过程,直到得到一个能够认识的标识符为止。按照这种方法,如果GetNext操作返回的标识符代表一个已识别的MIB变量的实例,那么能够认识的标识符就是该MIB变量的OID,去掉的分量拼接起来就是该变量实例的索引。如果GetNext操作返回的标识符代表一个尚未认识的MIB变量实例,那么识别出来的标识符就是实际MIB变量的祖先变量的OID,并不影响下一次的GetNext操作。
3 MIB树的数据库实现
SNMP有关RFC定义的和厂家扩充的MIB文本文件需要经过MIB编译器的编译才能为网管平台和SNMP代理所用。MIB编译器产生的输出一般有两种:C源程序和文本文件,C源程序可以直接为SNMP代理所用,文本文件一般提供给网管平台使用。这个文本文件虽然经过了编译分析,但由于SNMPv2提供了9种ASN.1 MACRO类型,大多数的MACRO定义都比较复杂,所以MIB编译器产生的文本文件一般都对原始的MIB定义文件进行了较大的简化,丢失了相当多的信息。另外,网管平台还不能直接使用这个文本文件,还需要开发一个程序来读入和理解它。
采用通用的关系型数据库来实现SNMP MIB定义信息的存储具有诸多好处,包括可以将一个复杂的MACRO定义分解成多个数据库表格,在这些表格之间建立关联信息;可以利用数据库系统提供的关键字特征来保证MIB变量OID的唯一性;MIB数据库实现对上层的网管应用程序提供统一的数据库表格接口,不限制这些应用程序采用的语言以及与MIB数据库的连接方式。
MIB树数据库的表结构主要分成三级,不同级别的表之间通过OID相关联,三级表格构成一棵完整的MIB树。
第一级表MIBTREE中包含了所有MIB结点的OID、名字、定义结点的MIB模块名、以及结点之间的父子和兄弟关系。
第二级表包括了Object Type、Notification Type和Object Identity等8张表格,每张表格中包含了一个特定ASN.1 MACRO的一些特殊的属性。Object Identifier类型的MIB结点的属性已经包括在MIBTREE表格中,所以第二级表格中没有出现Object Identifier。
第三级表包括了Object Type Index和Notification Type Object等14张表,这些表格反映了某个特定MACRO中定义的一些包含了不定数目对象的属性。
除了这个完整的MIB树外,SNMPv1还定义了一些Trap,SNMP v2还定义了一些Textual Convention,这些Trap和Textual Convention都没有OID,因此游离于MIB树之外。
参考文献
[1]张君枫.基于主动网络技术的网络管理[J].网络安全技术与应用,2011(08).
[2]王雁博.基于SNMP协议的网络流量管理[J].西安文理学院学报(自然科学版),2011(03).
关键词 计算机网络管理;SNMP;MIB编译器;MIB浏览器
中图分类号:TP393 文獻标识码:A 文章编号:1671—7597(2013)051-109-01
管理信息库(MIB)是SNMP标准的重要组成部分,它是由许多MIB变量组成的一个树型结构,定义了网络设备可以被管理的内容。除了SNMP标准定义的MIB变量以外,设备厂家为了更好地管理自己的设备,常常需要定义大量扩充的MIB变量。设备厂家一般提供给用户若干正文形式的MIB文件,这些文件中按照ASN.1的文法给出了该设备支持的所有MIB变量,包括SNMP标准定义的和厂家扩充的。因此,要想管理一个网络设备,首先必须了解该设备支持哪些MIB变量。
1 MIB编译器
MIB编译器接受按ASN.1语法编写的MIB文本文件(包括标准RFC和厂家扩充的),识别MIB文件中定义的对象,包括其类型、对象标识符(OID)、访问权限、状态、缺省值等属性,检查文件中的语法和语义错误,如果没发现错误就生成网络管理平台可以使用的MIB树内部结构。
MIB编译器的外部接口主要功能包括:对输入的MIB文本文件进行词法、语法和语义分析,产生MIB树内部结构;为上层网管应用程序提供MIB树内部结构的调用接口;通过转换器将MIB树内部结构转换为通用数据库实现。
MIB编译器的功能结构可以分成词法分析、语法分析、MIB树构造和错误处理四个部分。词法分析:对输入的MIB文本文件进行预处理,去掉注释和空白字符;识别输入文件中的一个个单词,构造相应的属性字序列。语法分析:对属性字序列进行上下文分析,检查是否符合SMIv1和SMIv2语法规则,识别出一个个的结点对象及其属性。MIB树的构造:对输入的MIB结点序列进行处理,根据结点的OID,识别每个结点的父结点、子结点和兄弟结点,设置结点相应指针以形成一个二叉树结构。
MIB文件经过编译,其中定义的MIB变量就被加入到MIB树内部结构中。当某个MIB文件/模块过期了(一个MIB文件中可能定义了多个MIB模块),需要用更新的MIB模块来替代时,需要将原先编译的MIB文件/模块从MIB树内部结构中卸载下来。
2 MIB浏览器
MIB浏览器一般提供给高级网络管理人员使用,主要完成两件工作:1)查看已经编译的MIB对象的定义信息。2)直接利用SNMP协议机读/写被管设备所支持的MIB对象的当前值。
2.1 查看MIB变量的定义信息
MIB浏览器首先读入存储在数据库中的、由MIB编译器编译生成的MIB定义信息,根据MIB变量的OID确定变量之间的父子关系,生成一棵完整的MIB树并显示在界面上。
用户通过鼠标点击可以浏览这棵MIB树,选择需要查看的MIB变量。另外,用户也可以直接输入需要查看的MIB变量的OID,后一种方法适合于用户已知MIB变量的OID或者查看一个尚未编译的MIB变量的当前值的情况。
为了查看一个MIB变量的定义信息,如变量的名字、OID、定义宏、数据类型、存取控制和描述信息等,MIB浏览器根据选中MIB变量的OID,在MIB数据库的第一级表中查找对应的记录。根据记录中定义宏字段的值,在相应的数据库表格中查找对应的记录,取得MIB变量的各种定义信息。
2.2 读写MIB变量的当前值
通过指定设备的IP地址、MIB变量实例以及读或写Community,调用SNMP协议引擎提供的API函数,采用SNMPv1协议的Get、GetNext、Set以及SNMPv2的GetBulk操作与设备上的SNMP代理交互,读写设备所支持的MIB变量的当前值。可以同时读写多个MIB变量实例。
2.3 遍历Agent实现的MIB对象树
方法如下:对于GetNext操作返回的下一个变量实例的标识符,从后向前进行分析。首先看整个标识符是否代表一个已识别的MIB变量,如果不能认识,就去掉标识符最后一个分量再重复上述过程,直到得到一个能够认识的标识符为止。按照这种方法,如果GetNext操作返回的标识符代表一个已识别的MIB变量的实例,那么能够认识的标识符就是该MIB变量的OID,去掉的分量拼接起来就是该变量实例的索引。如果GetNext操作返回的标识符代表一个尚未认识的MIB变量实例,那么识别出来的标识符就是实际MIB变量的祖先变量的OID,并不影响下一次的GetNext操作。
3 MIB树的数据库实现
SNMP有关RFC定义的和厂家扩充的MIB文本文件需要经过MIB编译器的编译才能为网管平台和SNMP代理所用。MIB编译器产生的输出一般有两种:C源程序和文本文件,C源程序可以直接为SNMP代理所用,文本文件一般提供给网管平台使用。这个文本文件虽然经过了编译分析,但由于SNMPv2提供了9种ASN.1 MACRO类型,大多数的MACRO定义都比较复杂,所以MIB编译器产生的文本文件一般都对原始的MIB定义文件进行了较大的简化,丢失了相当多的信息。另外,网管平台还不能直接使用这个文本文件,还需要开发一个程序来读入和理解它。
采用通用的关系型数据库来实现SNMP MIB定义信息的存储具有诸多好处,包括可以将一个复杂的MACRO定义分解成多个数据库表格,在这些表格之间建立关联信息;可以利用数据库系统提供的关键字特征来保证MIB变量OID的唯一性;MIB数据库实现对上层的网管应用程序提供统一的数据库表格接口,不限制这些应用程序采用的语言以及与MIB数据库的连接方式。
MIB树数据库的表结构主要分成三级,不同级别的表之间通过OID相关联,三级表格构成一棵完整的MIB树。
第一级表MIBTREE中包含了所有MIB结点的OID、名字、定义结点的MIB模块名、以及结点之间的父子和兄弟关系。
第二级表包括了Object Type、Notification Type和Object Identity等8张表格,每张表格中包含了一个特定ASN.1 MACRO的一些特殊的属性。Object Identifier类型的MIB结点的属性已经包括在MIBTREE表格中,所以第二级表格中没有出现Object Identifier。
第三级表包括了Object Type Index和Notification Type Object等14张表,这些表格反映了某个特定MACRO中定义的一些包含了不定数目对象的属性。
除了这个完整的MIB树外,SNMPv1还定义了一些Trap,SNMP v2还定义了一些Textual Convention,这些Trap和Textual Convention都没有OID,因此游离于MIB树之外。
参考文献
[1]张君枫.基于主动网络技术的网络管理[J].网络安全技术与应用,2011(08).
[2]王雁博.基于SNMP协议的网络流量管理[J].西安文理学院学报(自然科学版),2011(03).