1.引言
基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管的网络单元(也叫被管设备)。被管的设备种类繁多,例如:路由器、X终端、终端服务器和打印机等。这些被管设备的共同点就是都运行TCP/IP协议。被管设备端和关联相关的软件叫做代理程序(agent)或代理进程。管理站一般都是带有色彩监视器的工作站,可以显示所有被管理设备的状态(例如连接是否掉线、各种连接上的流量状况等)。
管理进程和代理进程之间的通信可以有两种方式。一种是管理进程向代理进程发出请求,询问一个具体的参数值(例如:你产生了多少个不可达的ICMP端口?)。另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生(例如:一个连接口掉线了)。当然,管理进程除了可以向代理进程询问某些参数值以外,它还可以按要求改变代理进程的参数值(例如:把默认的IP TTL值改为64)。
基于TCP/IP的网络管理包含3个组成部分:
1)一个管理信息库MIB(Management Information Base)。管理信息库包含所有代理进程的所有可被查询和修改的参数。RFC 1213 [McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II。
2)关于MIB的一套共用的结构和表示符号。叫做管理信息结构SMI(Structure of Management Information)。这个在RFC 1155[Rose and McCloghrie]中定义。例如:SMI定义计数器是一个非负整数,它的计数范围是0~4 294 967 295,当达到最大值时,又从0开始计数。
3)管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple Network Management Protocol)。在RFC 1157[Case et a1. 1990]中定义。SNMP包括数据报交换的格式等。尽管可以在运输层采用各种各样的协议,但是在SNMP中,用的最多的协议还是UDP。
上面提到的RFC所定义的SNMP叫做SNMP v1,或者就叫做SNMP。到1993年为止,又有一些新的关于SNMP的RFC发表。在这些RFC中定义的SNMP叫做第二版SNMP(SNMP v2)。
2.协议
关于管理进程和代理进程之间的交互信息,SNMP定义了5种报文:
1)get-request操作:从代理进程处提取一个或多个参数值。
2)get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值 (关于"下一个(next)"的含义将在后面介绍)。
3)set-request操作:设置代理进程的一个或多个参数值。
4)get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5)trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
前面的3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的(为简化起见,前面3个操作今后叫做get、get-next和set操作)。图1描述了这5种操作。
图1
这些操作中的前4种操作是简单的请求应答方式,而且在SNMP中往往使用UDP协议,所以可能发生管理进程和代理进程之间数据包丢失的情况。因此一定要有超时和重传机制。
管理进程发出的前面3种操作采用UDP的161端口。代理进程发出Trap操作采用UDP的162端口。由于收发采用了不同的端口号,所以一个系统可以同时为管理进程和代理进程
图2是封装成UDP数据报的5种操作的SNMP报文格式。
图2 SNMP报文的格式
在图中,我们仅仅对IP和UDP的首部长度进行了标注。这是由于:SNMP报文的编码采用了ASN.1和BER,这就使得报文的长度取决于变量的类型和值。关于ASN.1和BER的内容将在后面介绍。在这里介绍各个字段的内容和作用。
图3显示各种PDU对应的值(PDU即协议数据单元,也就是分组)。
图3 SNMP报文中的PDU类型
共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认的值是public。
对于get、get-next和set操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。这种类型的字段我们在其他UDP应用中曾经见过。这个字段的作用是使客户进程(在目前情况下是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。这个字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的众多应答中进行分类。
差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。图4是参数值、名称和描述之间的对应关系。
图4 SNMP差错状态的值
差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。它是由代理进程标注的,并且只有在发生noSuchName、readOnly和badValue差错时才进行标注。
在get、get-next和set的请求数据报中,包含变量名称和变量值的一张表。对于get和get-next操作,变量值部分被忽略,也就是不需要填写。
对于trap操作符(PDU类型是4),SNMP报文格式有所变化。
3.管理信息结构
SNMP中,数据类型并不多。在本节,我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。