网络管理:管理信息库
TCP/IP 网络管理框架
SNMP 管理 TCP/IP 协议的运行,与 TCP/IP 协议运行有关的信息按照 SNMP 定义的管理信息结构存储在管理信息库中。Internet 中的网络管理信息存储在管理信息库 MIB(Management Information Base)中。SNMP 总体架构由两部分组成:一部分是管理信息库结构的定义,另一部分是访问管理信息库的协议规范。
第一部分是 MIB 树,各个代理中的管理数据由树叶上的对象组成,树的中间节点的作用是对管理对象进行分类。例如,与某一协议实体有关的全部信息位于指定的子树上。树结构为每个叶子节点指定唯一的路径标识符,这个标识符是从树根开始把各个数字串连起来形成的。
另一部分是 SNMP 协议支持的服务原语,这些原语用于管理站和代理之间的通信,以便查询和改变管理信息库中的内容。Get 操作用于检索数据,Set 操作用于改变数据,GetNext 操作提供扫描MIB树和连续检索数据的方法,而 Trap 操作则提供从代理进程到管理站的异步报告机制。为了使管理站能够及时而有效地对被管理设备进行监控,同时又不过分增加网络的通信负载,必须使用陷入(Trap)制导的轮询过程。过程为管理站启动时,或每隔一定时间用 Get 操作轮询一遍所有代理获取某些关键的信息。得到基本数据后管理站就停止轮询,转而由代理进程负责在必要时向管理站报告异常事件。
Internet 最初的网络管理框架由四个文件定义,RFC1155 定义了管理信息结构(SMI),规定了管理对象的语法和语义。RFC1212 说明了定义 MIB 模块的方法,RFC1213 定义了 MIB-2 管理对象的核心集合,RFC1157 是 SNMPv1 协议的规范文件。
SNMP 协议体系结构
SNMP 为应用层协议,SNMP 实体向管理应用程序提供服务,它的作用是把管理应用程序的服务调用变成对应的 SNMP 协议数据单元,并利用 UDP 数据报发送出去。选择 UDP 协议而不是 TCP 协议,是因为UDP 效率较高,这样实现网络管理不会太多地增加网络负载。但由于 UDP 不可靠,所以 SNMP 报文容易丢失,因此对每个管理信息要装配成单独的数据报独立发送,而且报文应短些。
每个代理进程与某些管理站建立团体(Community)关系,团体名作为团体的全局标识符进行身份认证。一般来说代理进程不接受没有通过团体名验证的报文,这样可以防止未授权的管理命令。
对于非标准设备不能直接用 SNMP 进行管理,需要使用委托代理的进行管理,并代表这些设备接收管理站的查询。委托代理起到了协议转换的作用,和管理站之间按 SNMP 协议通信,与被管理设备之间则按专用的协议通信。
MIB 管理信息库
MIB 结构
所谓“管理信息”就是指在互联网的网管框架中被管对象的集合。被管对象必须维持可供管理程序读写的若干控制和状态信息。这些被管对象构成了一个虚拟的信息存储器,所以才称为管理信息库 MIB。管理程序就使用 MIB 中这些信息的值对网络进行管理(如读取或重新设置这些值),只有在 MIB 中的对象才是 SNMP 所能够管理的。MIB 层次树有 3 个作用:
- 表示管理和控制关系;
- 提供了结构化的信息组织技术;
- 提供了对象命名机制。
对象命名树的根没有名字,它的下面有三个顶级对象,都是世界上著名的标准制定单位,即 ITU-T(过去叫做 CCITT),ISO,以及这两个组织的联合体,它们的标号分别是 0 到 2。对象名习惯上用英文小写表示,在 ISO 的下面的一个标号为 3 的节点是ISO认同的的组织成员 org。在其下面有一个美国国防部 dod(Department of Defense)的子树(标号为 6),再下面就是 internet(标号为 1)在只讨论 internet 中的对象时,可只画出 internet 以下的子树,并在 internet 节点旁边写上对象标识符
1.3.6.1 即可。在 internet 节点下面的标号为 2 的节点是 mgmt(管理)。再下面只有一个节点,即管理信息库 mib-2,其对象标识符为 1.3.6.1.2.1。在 mib-2 下面包含了所有被 SNMP 管理的对象。
MIB 中的数据类型
MIB 中存储的数据叫做对象,每个对象属于一定的对象类型,并且有一个值。对象实例是对象类型的具体实现,只有实例才可以绑定到特定的值。MIB 对象的定义说明了被管理对象的类型、组成和值的范围,以及与其他对象的关系。MIB 中使用了 ASN.1 的 5 种通用类型:
类型名 | 值集合 | 解释 |
---|---|---|
整数 | 包括正负整数和 0 | INTEGER |
OCTET STRING | 位组串 | 由 8 位组构成的串 |
NULL | NULL | 不代表任何类型 |
OBJECT IDENTIFIER | 对象标识符 | MIB树中的节点用分层的编号表示 |
SEQUENCE (OF) | 序列 | 任何类型组成的序列 |
同时 RFC1155 文件还根据网络管理的需要定义了下列 6 种应用类型:
类型定义 | 解释 |
---|---|
NetworkAddress :=CHOICE(internet IpAddress} | 从各种网络地址中选择一种 |
IpAddress =[APPLICATION O] IMPLICIT OCTET STRING(SIZE(4)) | 32 位的 IP 地址定义为 OCTET STRING 类型 |
Counter …=[APPLICATION 1]IMPLICIT INTRGER(0..4 294 967 295) | 计数器类型,非负整数,其值可增加不能减少,达到最大值 2^32-1 后回零 |
Gauge ::=[APPLICATION 2] INTEGER(0.4 294 967 295) | 计量器类型,非负整数,值可增加也可减少,达到最大值 2^32 - 1 后不回零 |
Time Ticks :=[APPLICATION 3] INTEGER(0..4 294 967 295) | 时钟类型,非负整数,单位是百万分之一秒,从某个事件开始到目前经过的时间 |
Opaque ::=[APPLICATION 4]OCTET STRING - arbitrary ASN.1 value | 未知数据类型,编码时按 OCTET STRING 处理 |
管理信息结构定义
MIB 中包含各种各样的被管理对象,这些被管理对象的语法、语义、访问方法、实现约束都要进行详细说明。RFC1155 文件给出了对象类型的宏定义,后经 RFC1212 进行了扩充,形成了 MIB-2 的对象类型定义如下:
OBJECT-TYPE MACRO::=
BEGIN
TYPE NOTATION::="SYNTAX"type(TYPE ObjectSyntax)
"ACCESS"Access
"STATUS" Status
DescrPart
ReferPart
IndexPart
DefValPart
VALUE NOTATION::=value (VALUE ObjectName)
对被管理对象定义的关键成分如下,其中对于 ACCESS,MIB 树中的非叶子节点不能访问。对于 STATUS 为过时表示老标准支持而新标准不支持的类型,可取消表示在将来的标准中可能被取消。
成分 | 解释 |
---|---|
SYNTAX | 表示对象类型的抽象语法,为 5 种通用类型或者 6 种应用类型之一 |
ACCESS | 定义对象的访问方式,可选择的访问方式有只读、读写、只写和不可访问 4 种 |
STATUS | 说明实现是否支持这种对象,有必要的和任选的两种支持程度 |
DesctPart | 任选,用文字说明对象类型的含义 |
ReferPart | 任选,用文字说明可参考在其他 MIB 模块中定义的对象 |
IndexPart | 定义表对象的索引项 |
DefValPart | 任选,定义对象实例的默认值 |
VALUENOTATION | 指明对象的访问名 |
当用一个具体的值代替宏定义中的变量或参数时就产生了宏实例,表示一个实际的 ASN.1 类型,并且规定了该类型可取的值的集合。如下是一个对象定义的例子,表示“TCP 最大连接数”,这是一个整数,访问方式为“只读”,它是必须实现的,是 tcp 子树中的第 4 个节点。
tcpMaxConn OB.JECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The limit on the total number of TCP connection the entity can support."
::={tcp 4}
标量对象和表对象
对象实例的标识
SMI 只存储标量对象和表对象,标量对象是简单对象和列对象,而表对象是一个二维数组,表的定义要用到 ASN.1 的序列类型和对象类型宏定义中的索引部分。对象是由对象标识符(OBJECTIDENTIFIER)表示的,一个对象可以有各种值的实例。标量对象只有一个实例,在标量对象后的 oid 需要 .0 才能访问实例。接下来解释下表对象,是一个 TCP 联结表实例:
TCP 连接表的索引由 4 个元素组成,这 4 个元素(即本地地址、本地端口、远程地址和远程端口)的组合唯一地区分表中的一行。取到第 1 行,也就是第一个行对象的方式是在表对象后面给出行号:
1.3.6.1.2.1.6.13.1
表中的标量对象叫做列对象,列对象有唯一的对象标识符,这对每一行都是一样的。取到第 2 列,也就是第 2 个列对象的方式是在表对象后面给出行号和列号。注意此时有 3 个实例,他们的标识符都是 “1.3.6.1.2.1.6.13.1.2”。
1.3.6.1.2.1.6.13.1.2
设行号为 x,列号为 i,则一个列对象可以表示为 x.i,该对象所在的表有 N 个索引对象ii、i2、…、iN,则它的某一行的实例标识符为:
x.i.(i1).(i2).….(iN)
索引对象的值用于区分表中的行,把列对象的对象标识符与索引对象的值组合起来就说明了列对象的一个实例。例如对于 0.0.0.0 列对象,在后面加上这一行的索引对象的标识符连在一起,就是一个实例标识符。通过加上索引对象,这样就能够区分开“1.3.6.1.2.1.6.13.1.2”表示的 3 个列对象,从而实现确定一个具体的列对象的目的。
1.3.6.1.2.1.6.13.1.2.0.0.0.0.99.0.0.0.0.0
词典顺序
使用上述的标识符的好处在于,可以用词典顺序进行遍历 MIB 的树进行遍历。对象标识符是整数序列,这种序列反映了该对象在 MIB 中的逻辑位置,同时表示了一种词典顺序,我们只要按照一定的方式(例如中序)遍历MIB树,就可以排出所有对象及其实例的词典顺序。
例如如图是一个简化的IP路由表,该表只有 3 项。
ipRouteDest | ipRouteMetricl | ipRouteNextHop |
---|---|---|
9.1.2.3 | 3 | 99.0.0.3 |
10.0.0.51 | 5 | 89.1.1.42 |
10.0.0.99 | 5 | 89.1.1.42 |
这个路由表的对象及其实例的子树如图所示,就可以得到用于遍历的词典顺序:
MIB-2 功能组
RFC1213 定义了管理信息库第二版(MIB-2),这个文件包含 11 个功能组,共 171 个对象。MIB-2 只包括那些被认为是必要的对象,不包括任选的对象。这些功能组分别是:
功能组 | 解释 |
---|---|
系统组 | 提供了系统的一般信息 |
接口组 | 包含关于主机接口的配置信息和统计信息 |
地址转换组 | 表示网络地址到接口的物理地址的映像关系 |
IP 组 | 提供了与 IP 协议有关的信息 |
ICMP 组 | 包含有关 ICMP 实现和操作的有关信息 |
TCP 组 | 包含与 TCP 协议的实现和操作有关的信息 |
UDP 组 | 提供关于 UDP 数据报和本地接收端点的详细信息 |
EGP 组 | 提供关于 EGP 路由器发送和接收的 EGP 报文的信息,以及关于 EGP 邻居的详细信息等 |
传输组 | 针对各种传输介质提供详细的管理信息 |
SNMP 组 | 包含的信息关系到 SNMP 协议的实现和操作 |
对象的分组方便了管理实体的实现。一般来说,制造商如果认为某个功能组是有用的,则必须实现该组的所有对象。例如一个设备实现 TCP 协议,则它必须实现 TCP 组所有对象,当然网桥或路由器就不必实现 TCP 组。其中 MIB-2 中地址转换组的对象已被收编到各个网络协议组中,保留地址转换组仅仅是为了与 MIB-1 兼容。
参考资料
《计算机网络管理(第三版)》雷震甲 编著,西安电子科技大学出版社
《计算机网络(第七版)》 谢希仁 著,电子工业出版社