(本文绝大部分内容来自于Gary.Wrighth和W.Richard Stevens的《TCP/IP详解,卷1:协议》,从中节选这些内容主要是为了方便查阅)
一、协议
基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager)和被管的网络单元(也叫被管设备) 。被管设备种类繁多,例如:路由器、X终端、终端服务器和打印机等。这些被管设备的共同点就是都运行TCP/IP协议。被管设备端和管理相关的软件叫做代理程序(agent)或代理进程。管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP(Simple Network Management Protocol) 。在RFC1157 [Case et al. 1990]中定义。SNMP包括数据报交换的格式等。尽管可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。关于管理进程和代理进程之间的交互信息,SNMP定义了5种报文:
1) get-request操作:从代理进程处提取一个或多个参数值。
2) get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
3) set-request操作:设置代理进程的一个或多个参数值。
4) get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5) trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
前面的3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的(为简化起见,前面3个操作今后叫做get、get-next和set操作)。图1描述了这5种操作。
图1 SNMP的5种操作
图2是封装成U D P数据报的5种操作的SNMP报文格式。
图2 SNMP的报文格式
在图中,我们仅仅对IP和UDP的首部长度进行了标注。这是由于: SNMP报文的编码采用了ASN.1和BER,这就使得报文的长度取决于变量的类型和值。关于ASN.1和BER的内容将在后面介绍。在这里介绍各个字段的内容和作用。
版本字段是0。该字段的值是通过SNMP版本号减去1得到的。显然0代表SNMP v1。
图3显示各种PDU对应的值(PDU即协议数据单元,也就是分组)。
共同体字段是一个字符串。这是管理进程和代理进程之间的口令,是明文格式。默认的值是public。
对于get、get-next和set操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。这这个字段的作用是使客户进程(在目前情况下是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。这个SNMP代理进程SNMP管理进程字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的众多应答中进行分类。
差错状态字段是一个整数,它是由代理进程标注的,指明有差错发生。图4是参数值、名称和描述之间的对应关系。
差错索引字段是一个整数偏移量,指明当有差错发生时,差错发生在哪个参数。它是由代理进程标注的,并且只有在发生noSuchName、readOnly和badValue差错时才进行标注。
在get、get-next和set的请求数据报中,包含变量名称和变量值的一张表。对于get和get-next操作,变量值部分被忽略,也就是不需要填写。
对于trap操作符(PDU类型是4),SNMP报文格式有所变化,在后文介绍。
图3 SNMP报文中的PDU类型 图4 SNMP差错状态的值
二、对象标识符
对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以 root表示(这和Unix中文件系统的树遍历方向非常类似)。树上的每个结点同时还有一个文字名。例如标识1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。这主要是为了人们阅读方便。
三、管理信息库(MIB)
MIB是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。我们在前面已经提到了在RFC 1213 [McColghrie 和Rose 1991]中定义的MIB-II。MIB被划分为若干个组,如system、interfaces、at(地址转换)和ip组等。(具体的数据结构和成员变量比较复杂,不再罗列于此)
四、Trap、ASN.1和BER
本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2011/09/19/2181381.html,如需转载请自行联系原作者