|
SNMPv2的管理信息结构是在总结SNMP应用经验的基础上对SNMPv1 SMI进行了扩充,提供了更精致、更严格的规范,规定了新的管理对象和MIB的文档,可以说是SNMPv1 SMI的超集。SNMPv2 SMI引入了4个关键的概念。
|
|
|
|
|
|
|
|
对象的定义是使用对象语法来描述的。在每一个MIB内部的对象都有一个正式的定义,它规定了对象的数据类型、允许的形式、取值范围以及与其他MIB内部对象之间的关系。使用ASN.1符号定义了每一个对象,而且也定义了整个MIB的结构。为了保持对象的简单性,只是使用了ASN.1元素和特性的一个有限子集。其中对象的数据类型通常是UNIVERSAL,但是在MIB-Ⅱ中只有下列数据类型可用于MIB对象的定义。
|
|
|
|
.octetstring(UNIVERSAL 4)。
|
|
|
|
.object identifier(UNIVERSAL 6)。
|
|
|
.sequence、sequence-of(UNIVERSAL 16)。
|
|
|
其中,前面4种是基本类型,是组成其他对象类型的基本块。sequence和sequence-of用来构建表。
|
|
|
在MIB-2中,每个应用程序都定义了自己的APPLICATION数据类型。这里APPLICATION类型是ASN.1的APPLICATION类,它由与特定应用程序相关的数据类型组成。RFC1155中定义的一些应用程序范围类型如下。
|
|
|
.networkaddress:使用CHOICE结构来定义,允许从许多协议组中选择一种地址格式。
|
|
|
|
|
|
.timeticks:计算从某一个时刻开始时间的非负整数,以0.01s为单位进行计算。
|
|
|
|
与SNMPv1一样,SNMPv2也是用ASN.1宏定义OBJECT-TYPE表示管理对象的语法和语义,但是SNMPv2的OBJECT-TYPE增加了新的内容,如下图所示。
|
|
|
|
|
|
.UnitsPart:在SNMPv2的OBJECT-TYPE宏定义中增加了UNITS子句。这个子句用文字说明与对象有关的度量单位。当管理对象表示一种度量手段(如时间)时,这个子句是有用的。
|
|
|
.MAX-ACCESS子句:类似于SNMPv1的ACCESS子句,说明最大的访问级别,与授权策略无关。SNMPv2定义的访问类型中去掉了write-only类,增加了一个与概念行有关的访问类型read-create,表示可读、可写、可生成。还增加了accessible-for-notify访问类,这种访问方式与陷入有关。
|
|
|
.STATUS子句:这个子句是必要的,也就是说必须指明对象的状态。新标准去掉了SNMPv1中的optional和mandatory,只有3个可选的状态。如果说明管理对象的状态是current,则表示在当前的标准中是有效的。如果管理对象的状态是obsolete,表示不必实现这种对象。状态deprecated表示对象已经过时了,但是为了与旧的实现互操作,实现时还要支持这种对象。
|
|
|
|
|
由于SMI只支持简单的二维标量表这一种数据结构,因此,与SNMPv1一样,SNMPv2的管理操作只能作用于标量对象,复杂的信息要用表来表示。按照SNMPv2规范,表是行的序列,而行是列对象的序列。SNMPv2把表分为两类。
|
|
|
(1)禁止删除和生成行的表。这种表的最高访问级别是read-write。在很多情况下这种表由代理控制,表中只包含read-only型的对象。
|
|
|
(2)允许删除和生成行的表。这种表开始时可能没有行,由管理站生成和删除行。行数可由管理站或代理改变。
|
|
|
在SNMPv2表的定义中必须含有INDEX或AUGUMENTS子句,但是只能有一个。INDEX子句定义了一个基本概念行,而INDEX子句中的索引对象确定了一个概念行实例。与SNMPv1不同,SNMPv2的INDEX子句中增加了任选的IMPLIED修饰符。假定一个对象的标识符为y,索引对象为i1,i2,…,iN,则对象y的一个实例标识符为y.(i1).(i2).…(iN)。
|
|
|
SMI中表的定义不允许嵌套,也就是说,不允许表中的元素又是另外一个表,这限制了SMI的性能和灵活性。
|
|
|
|
SNMPv2允许生成和删除行的表必须有一个列对象,其SYNTAX子句的值为RowStatus, MAX-ACCESS子句的值为read-write,这种列称为概念行的状态列。状态列可取6种值。
|
|
|
.active(可读写):被管理设备可以使用概念行。
|
|
|
.notInService(可读写):概念行存在,但由于其他原因(下面解释)而不能使用。
|
|
|
.notReady(只读):概念行存在,但因没有信息而不能使用。
|
|
|
.createAndGo(只写不读):管理站生成一个概念行实例时先设置成这种状态,生成过程结束时自动变为active,被管理设备就可以使用了。
|
|
|
.createAndWait(只写不读):管理站生成一个概念行实例时先设置成这种状态,但不会自动变成active。
|
|
|
.destroy(只写不读):管理站需删除所有的概念行实例时设置成这种状态。
|
|
|
这6种状态中除notReady外的5种状态是管理站可以用set操作设置的状态,前3种可以是响应管理站的查询而返回的状态。
|
|
|
表中概念行的生成可以使用两种不同的方法,分成4个步骤。
|
|
|
(1)选择实例标识符。针对不同的索引对象可考虑用不同的方法选择实例标识符。
|
|
|
(2)a管理站通过事务处理产生和激活概念行。b管理站与代理协商生成概念行。
|
|
|
(3)初始化非默认值对象。管理站用get命令查询所有列,以确定是否能够或需要设置列对象的值。
|
|
|
|
概念行的挂起:当概念行处于active状态时,如果管理站希望概念行脱离服务,以便进行修改,则可以发出set命令,把状态列由active置为notInService。
|
|
|
概念行的删除:管理站发出set命令,把状态列置为destroy,如果这个操作成功,概念行立即被删除。
|
|
|
|
SNMPv2提供了通知类型的宏定义NOTIFICATION-TYPE,用于定义异常条件出现时SNMPv2实体发送的信息。
|
|
|
SNMPv2还引入了信息模块的概念,用于说明一组有关的定义。共有以下3种信息模块。
|
|
|
|
.MIB的依从性声明模块:使用MODULE-COMPLIANCE和OBJECT-GROUP宏说明有关管理对象实现方面的最小要求。
|
|
|
.代理能力说明模块:用AGENT-CAPABILITIES宏说明代理实体应该实现的能力。
|
|
|