当前位置: 代码迷 >> 综合 >> SNMP: 简单网络管理协议
  详细解决方案

SNMP: 简单网络管理协议

热度:45   发布时间:2023-12-05 23:30:41.0

本文摘自:http://blog.csdn.net/chinayaosir/article/details/3048501

1 引言
随着网络技术的飞速发展,网络的数量也越来越多。
而网络中的设备来自各个不同的厂家,如何管理这些设备就变得十分重要。
本章的内容就是介绍管理这些设备的标准。
基于TCP/IP的网络管理包含两个部分:
1.网络管理站,也叫管理进程.
2.和被管的网络单元,也叫被管设备。(例如:路由器、X 终端、终端服务器和打印机等),
被管设备端和管理相关的软件叫做代理程序( agent )或代理进程。

这些被管设备的共同点就是都运行TCP/IP协议。
管理站一般都是带有彩色监视器的工作站,可以显示所有被管设备的状态(例如连接是否掉线、各种连接上的流量状况等)。
管理进程和代理进程之间的通信可以有两种方式。
一种是管理进程向代理进程发出请求,询问一个具体的参数值(例如:你产生了多少个不可达的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 ofManagement Information)。
这个在RFC 1155 [Rose and McCloghrie 1990] 中定义。
例如:SMI定义计数器是一个非负整数,它的计数范围是0~4 294 967 295,
当达到最大值时,又从0开始计数。
3) 管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple NetworkManagement Protocol)。
在RFC 1157 [Case et al. 1990]中定义。
SNMP包括数据报交换的格式等。
尽管可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。
上面提到的RFC所定义的SNMP叫做SNMP v1,或者就叫做SNMP,这也是本章的主要内容。
到1 9 9 3年为止,又有一些新的关于SNMP的RFC发表。
在这些RFC中定义的SNMP叫做第二版SNMP(SNMP v2),这将在2 5 . 1 2章节中讨论。
本章首先介绍管理进程和代理进程之间的协议,然后讨论参数的数据类型。
在本章中将用到前面已经出现过的名词,如: IP、UDP和TCP等。
我们在叙述中将举一些例子来帮助读者理解,这些例子和前面的某些章节相关。
25.2 协议
关于管理进程和代理进程之间的交互信息, SNMP定义了5种报文:
1) get - request操作:从代理进程处提取一个或多个参数值。
2) get - next - request操作:
从代理进程处提取一个或多个参数的下一个参数值。
3) set - request操作:设置代理进程的一个或多个参数值。
4) get - response操作:返回的一个或多个参数值。
这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5) trap 操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
前面的3个操作是由管理进程向代理进程发出的。
后面两个是代理进程发给管理进程的(为简化起见,前面3个操作今后叫做get、get - next,set操作)
既然这些操作中的前4种操作是简单的请求-应答方式(也就是管理进程发出请求,代理进程应答响应),
而且在SNMP中往往使用UDP协议,所以可能发生管理进程和代理进程之间数据报丢失的情况。
因此一定要有超时和重传机制。
管理进程发出的前面3种操作采用UDP的1 6 1端口。
代理进程发出的trap操作采用UDP的1 6 2端口。
由于收发采用了不同的端口号,所以一个系统可以同时为管理进程和代理进程(参见习题2 5 . 1)。
UDP数据报的5种操作的SNMP报文格式。
我们仅仅对IP和UDP的首部长度进行了标注。
这是由于: SNMP报文的编码采用了ASN . 1和B E R,这就使得报文的长度取决于变量的类型和值。
关于ASN . 1和B E R的内容将在后面介绍。在这里介绍各个字段的内容和作用。
版本字段是0。该字段的值是通过SNMP版本号减去1得到的。
显然0代表SNMP v1。图2 5 - 3显示各种PDU对应的值( PDU即协议数据单元,也就是分组)。
共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。
默认的值是public。
对于get、get - next和set操作,请求标识由管理进程设置,然后由代理进程在get -response中返回。
这种类型的字段我们在其他UDP应用中曾经见过。
这个字段的作用是使客户进程(在目前情况下是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。
这个字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的众多应答中进行分类。

差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。
图2 5 - 4是参数值、名称和描述之间的对应关系。
差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。
它是由代理进程标注的,并且只有在发生noSuch Name、readOnly和badValue差错时才进行标注。
在get、get - next和set的请求数据报中,包含变量名称和变量值的一张表。
对于get和get - next操作,变量值部分被忽略,也就是不需要填写。
对于trap操作符( PDU类型是4),SNMP报文格式有所变化。
我们将在2 5 . 1 0节中当讨论到trap时再详细讨论。
25.3 管理信息结构SNMP中,数据类型并不多。
在本节,我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。
? INTEGER。一个变量虽然定义为整型,但也有多种形式。
有些整型变量没有范围限制,有些整型变量定义为特定的数值,
有些整型变量定义为一个特定的范围(例如,UDP和TCP的端口号就从0到6 5 5 3 5)。
? OCTER STRING。0或多个8 bit字节,每个字节值在0 ~ 2 5 5之间。
对于这种数据类型和下一种数据类型的B E R编码,字符串的字节个数要超过字符串本身的长度。
这些字符串不是以NULL结尾的字符串。
? DisplayString。0或多个8 bit字节,但是每个字节必须是ASCII码。
在MIB - II中,所有该类型的变量不能超过2 5 5个字符(0个字符是可以的)。
? OBJECT IDENTIFIE。R将在下一节中介绍。
? NULL。代表相关的变量没有值。
例如,在get或get - next操作中,变量的值就是NULL,因为这些值还有待到代理进程处去取。
? IP Address。4字节长度的OCTER STRING,以网络序表示的IP地址。
每个字节代表IP地址的一个字段。
? P h y s Address。
OCTER STRING类型,代表物理地址(例如以太网物理地址为6个字节长度)。
? C o u n t e r。非负的整数,可从0递增到23 2-1(4 294 976 295)。达到最大值后归0。
? G a u g e。非负的整数,取值范围为从0到4 294 976 295(或增或减)。
达到最大值后锁定,直到复位。例如, MIB中的TCP C u r r E s t a b就是这种类型的变量的一个例子,
它代表目前在E S TA B L I S H E D或C L O S E _ WA I T状态的TCP连接数。
? T i m e T i c k s。时间计数器, 以0 . 0 1秒为单位递增,但是不同的变量可以有不同的递增幅度。
所以在定义这种类型的变量的时候,必须指定递增幅度。
例如, MIB 中的s y s U p T i m e变量就是这种类型的变量,
代表代理进程从启动开始的时间长度,以多少个百分之一秒的数目来表示。
? SEQUENCE。这一数据类型与C程序设计语言中的“ s t r u c t u r e”类似。
一个SEQUENCE包括0个或多个元素,每一个元素又是另一个ASN . 1数据类型。
例如, MIB中的UDP E n t r y就是这种类型的变量。
它代表在代理进程侧目前“激活”的UDP数量(“激活”表示目前被应用程序所用)。
在这个变量中包含两个元素:
1) IP Address类型中的UDP L o c a l Address,表示IP地址。
2) I N T E G E R类型中的UDP L o c a l P o r t,从0到6 5 5 3 5,表示端口号。
? SEQUENDE OF。这是一个向量的定义,其所有元素具有相同的类型。
如果每一个元素都具有简单的数据类型,例如是整数类型,那么我们就得到一个简单的向量。
但是我们将看到, SNMP在使用这个数据类型时,其向量中的每一个元素是一个SEQUENCE(结构)。
因而可以将它看成为一个二维数组或表。
例如,名为UDP T a b l e的UDP监听表( l i s t e n e r )就是这种类型的变量。
它是一个二元的SEQUENCE变量。每个二元组就是一个UDP E n t r y。
在SNMP中,对于这种类型的表格并没有标注它的列数。
但在2 5 . 7节中,我们将看到get - next操作是如何判断已经操作到最后一列的情况。
同时,在2 5 . 6节中,我们还将介绍管理进程如何表示它对某一行数据进行get或set操作。

25.12 SNMPv2
在1 9 9 3年,发表了定义新版本SNMP的11个RFC。
RFC 1441 [Case et al. 1993]是其中的第一个,它系统地介绍了SNMP v 2。
同样,有两本书[Stallings 1993; Rose 1994]也对SNMP v 2进行了介绍。
现在已经有两个SNMP v 2的基本模型,但是厂家的实现到1 9 9 4年才能广泛使用。
在本节中,我们主要介绍SNMP v 1和SNMP v 2之间的重要区别。
1) 在SNMP v 2中定义了一个新的分组类型get - b u l k - request,它高效率地从代理进程读取大块数据。
2) 另的一个新的分组类型是i n f o r m - request,它使一个管理进程可以向另一个管理进程发送信息。
3) 定义了两个新的MIB,它们是:SNMPv2 MIB和SNMPv2-M2M MIB(管理进程到管理进程的MIB)。
4) SNMPv2的安全性比SNMP v 1大有提高。在SNMP v 1中,
从管理进程到代理进程的共同体名称是以明文方式传送的。而SNMP v2可以提供鉴别和加密。
厂家提供的设备支持SNMP v 2的会越来越多,管理站将对两个版本的SNMP代理进程进行管理。
[Routhier 1993]中描述了如何将SNMP v 1的实现扩展到支持SNMP v 2。

25.13 小结
SNMP是一种简单的、SNMP管理进程和SNMP代理进程之间的请求-应答协议。
MIB定义了所有代理进程所包含的、能够被管理进程查询和设置的变量,这些变量的数据类型并不多。
所有这些变量都以对象标识符进行标识,这些对象标识符构成了一个层次命名结构,
由一长串的数字组成,但通常缩写成人们阅读方便的简单名字。
一个变量的特定实例可以用附加在这个对象标识符后面的一个实例来标识。
很多SNMP变量是以表格形式体现的。它们有固定的栏目,但有多少条记录并不固定。
对于SNMP来讲,重要的是对表格中的每一行如何进行标识
(尤其当我们不知道表格中有多少条记录时)以及如何按字典方式进行排序(“先列后行”的次序)。
SNMP的get - next操作符对任何SNMP管理进程来讲都是最基本的操作。
然后我们介绍了下列的SNMP变量组:s y s t e m、i n t e r f a c e、address translation、IP、ICMP、TCP和UDP。
接着是两个例子,一个介绍如何确定一个接口的MTU,另外一个介绍如何获取路由器的路由信息。
在本章的后面介绍了SNMP的trap操作,它是当代理进程发生了某些重大事件后主动向管理进程报告的。
最后我们简单介绍了ASN . 1和B E R,这两个概念比较繁琐,
但所幸的是,它对我们了解SNMP并不十分重要,仅仅在实现SNMP的时候才要用到。

习题
25.1 我们说过采用两个不同的UDP端口(1 6 1和1 6 2)
可以使得一个系统既可以是管理进程,也可以是代理进程。如果对管理进程和代理进程采用一个同样的端口,会出现什么情况?
25.2 用get - next操作,如何列出一张路由表的完整信息?