简单网络管理协议(SNMP)学习理解

简单网络管理协议snmp 学习理解

1.SNMP 网络管理协议综述

SNMP (Simple Network Management Protocol)是被广泛接受并投入使用的工业标准,它是由SGMP 即简单网关监控协议发展以来的。它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。它采用轮询机制,提供最基本的功能集。最适合小型、快速、低价格的环境使用。它只要求无证实的传输层协议UDP ,受到许多产品的广泛支持。

2.1 管理信息

经由SNMP 协议传输的所有管理倍息都表现为非聚集的对象类型。这些对象类型被收集到一个或多个管理信息库[MIB]中并且对象类型按照管理信息结构和标识(SMI)定义。简单网络管理协议策l 版的sM[于1990年5月定义在一篇题为《基于因特网的了TCP /IP 管理信息结构和标识》的RFC 中。这一RFC 要求所有的管理信息库数据和信息必须根据ISO 8824标准《抽象句法表示法1规范》(ASN.1) 编码。按照ASN .1表示所有信息和对象的目的在于方便向OSI 的网络管理协议迁移而无需重新定义现已存在的所有对象和MIB 。

SMI 为每一对象类型定义以下成分:

①名字;

②句法;

②编码说明。

注意:一个对象类型的名字明确地代表一个对象,称为对象标识符。不得分配标识符0给对象类型作为其名字的一部分。为便于阅读,在标准文档中对象标识符旁边包含对这一对象的描述。对象标识符是按照在OSI MIB树中建立的严格分层空间构造的,对象标识符总是一个唯一的从树根开始描述MIB 树的整数序列。对象标识符和它的文字描述的组合称为标号。

2.1.1 管理树

SMI 明确要求所有被管理的信息和数据都要由管理树来标识。这棵管理树来源于

OSI 的定义,它具有从很开始的严格分层化结构。管理拷的分支和叶子是用数字和字母两种方式显示的。数字化编码是机器可读的,字母显示则更适合于人的眼睛并帮助用户寻找穿过错综复杂分支的路径。在树中通向一个节点或叶子的路径是用对象标识符表示的。

树的各个分支是用数值表示的,因此对象标识符就构成了一个整数序列。管理树纳根下有3个直接后继者IB 际电报电话咨询委员会ccnT 分支、国际标准化组织Iso 分支和J 。int —Iso —CCITT(上述的联合) 分文。下图为因特网子数(1.3.6.1)

中所包含的是与因特网有关的所有管理对象。

2.2 名字和语法

句法定义了对象的数据类型。AsN .1的部分结构用来形式化地描述这种数据类型。ASN .1编码只使用基本编码规则(BER)。

SMI 定义了3种数据类型:原语类型、结构类型和自定义的类型。

1) 原语类型(Primitive types)

原语ASN .1类型有Integer(整数) 、Octet(字节) 、String(字符串) 、object Identifier(对象标识符) 和NuLL(空) 几种类型。再没有其他原语类型。

2) 结构类型(Constructor types)

结构类型是一种用于汇集列表和表格的复合类型。出于这种目的,SNMP 使用sequence 和sequence of。结构类型Sequence 允许使用简单类型的列表,在sequence 定义中,SNMP 协议不提供缺省或可选值。Sequence 的句法构造如下:

SEQUENCE{<typel >,.., <typeN >}

表格是对一些元家组成的舶数据结构的显示。用entry 表示列表名,sequcence of的句法结构如下:

SEQUENCE <entry >

3) 自定义的类型(Defined types)

借助于列表和结构类型,其他类型可以从基本类型(已经定义过的类型)(1nteger、 NULL 、object Identifier和Octet String)派生。为此,SMI 定义了6种复合类型:

(1)NetworkAddress(网络地址)

NetworkAddress 允许使用各种格式化的网络地址。当前,SMI 只支持因持网协议

(2)IPAddress(因特网地址)

定义32位IP 地址的格式。

(3)Counter(计数器)

32位非负值计数器。这个计数器从o 计到2的32次幂减l(十进制的4294967295) ,—超出最大值,计数器从零重新计数。

(4)Gauge(量规)

32位非负整数计算器,可做增1计数和减1计数。Gauge 不能超出最大值(2的32次幂减l ,十进制4294967295) ,如超出,将从零重新启动。

(5)TimeTicks(时间标记)

非负的32位的整数。该整数按1/100s 计算时间

(6)Opaque(模糊)

引入这一伪数据类型,以绕过在有限的SMI 定义中所固有的任何限制。它允许任意的ASN .1结构。在网管站和代理进程间就Opaque 数据的解释达成一致是非常必要的。

4) 被管对象

管理信息的结构和标识没有定义各自的被管对象,而定义了它们的形式化结构和内容。每个对象类型由5个字段构成:对象名、句法、定义、访问方式和状态。

(1)对象名

在“object ”下,数值化的对象标识符是与对象的正文描述成对出现的 例子:atIndex {at Entryl}

(2)句法

使用A5N .1句法类型描述上述内容

(3)定义

描述被管对象的正文存储于这个字段中

(4)访问方式

定义对象的访问字段为只读、只写、读写或不可访问

(5)状态

对象状态字段包含着有关它的至要性的信息。状态字段可以有以下值 ①必备(Mandatory),在每一个实现中必须存在;

②可选(Ophtional),这一对象的集成是每个实现可选的;

③作废(0bsolete),这个对象不再使用。

2.3抽象句法表示法(ASN.1)

1)ASN .1规则

ASN .1定义了一些规则,这些规则对于理解SNMP 是极其重要的: ①标准描述了许多已定义的ASN .1类型;

②ASN .1类型名总是用大写字母打头;

③一律用大写字母显示某些保留字。这些保留字在标准中是有专门含义的;

④某些名字用小写保留字开头。这些名字仅为增强ASN .1表示法的易读而引入。

2) 模版

SMI 把被管对象的所有属性定义为一组数据(模板) 。这些模板由5个部分构成:对象描述、句法、定义、访问方式和对象的状态。对象棋板句法定义对象的ASN .L 编码(Integer、 Object String、NULI 、NetworkAddress 、IP Address、Counter 、Gauge 、TimeTicks 、opaque) 。

2.4 编码

SNMP 协议的所有对象类型是根据Iso 8824标准,即《抽象句法表示法1的基本编码规则规范》编码的。正如在基本编码规则BEE 中定义的,AsN .1数据总是用传入数据网的最有效位即最高位,作为第一个值。如下左图中所示,位8—1总是按从左到右的顺序传送到下一最低协议层。位8是最高位,位l 是最低位。相应地,这一协议消息的接收者将按顺序的数据流传输位8—1。所有其他位序,例如,以字节右边为最高位(位1) 是非法的。

不同于TcP /四协议,sNMP 消息没有固定格式的头。根据ASN .1的基本编码规则(BER),SNMP 把每一数据类型划分成3个字段:标识字段、长度字段和数据字段(见下右图)

1) 标识字段

标识字段定义朋N .1类型。对于所有的sNMP 协议类型,标识字段都

划分为元素类字段、格式化位和标识号字段几部分。

(1)类

标识字段中前两个最高佐(位8和7) 描述了标识值的类型。

(2)格式化位

标识字段中的位6称为格式位(F_bit)。F_bit用以区分下面的标识数值的原语和复合编码。对于前者,F_bit被置成0;对于后者,F_bit置成l 。

(3)标识号字段

标识号字段(位5—1) 按二进制数显示标识数值Tag Numbers。该字段总是从左到右编码,从最有效位5开始往下到最低有效位1(位1) 。由于用这5个位只能表示0一3l 的数值而且保留二进制值11111为较大的标识值所用,故实际上只能表示0一30的值。所有更大标识号值用接下来的数据字节代替(如图) 。在这种情况下,最有效的位(位8) 总是置为0值。

2) 长度字段

在ASN .1中,信息按两种不同类型的长度字段传输,分别称为“确定的形式”和“不确定的形式”。简单网络管理协议只提供确定形式,即用一个或多个字节定义在随后的信息字段中数据字节数。长度字段的第一个字节的高位作用在于区别长度字段中有一个字节还是多个字节。

(1)单字节长度字段

如果在倍息字段(位1—7) 中的信息长度为0一127个字节之间,则数据字节的个数可以用1个字节的长度字段定义。长度字段首字节中高位置为0以指明是一个短格式。

(2)多字节长度宁段

如果在信息字段中的数据字节数超过127,需要用若干字节表示长度。多字节数据字段也称为长格式。此时,长度字段的第一个字节的高位总是置成1以表明长格式。在第一个字节中所有其他位(位l 一7) 按二进制形式定义为后随字节长度的个数。因为IP 协议最多只能处理6E535个字节的数据报,所以SNMP 协议多字节长度字段限制为最大3个字节。

3) 数据字段

ASN .1的独立功能在数据字段中进行编码。SNMP 协议只提供以下原语类型:Integer 、Null 、Object Identifier、Octet string、Sequence 和Sequence of。

2.5管理信息库

被管对象的总和称为管理信息库(MIB)。当若干年前定义sNMP 时,sNMP 协议作者的意图是最大程度地实现简单性和可移植性。这一概念促使sNMP 协议成为网络管理的市场标准。在SNMP 协议早期,管理信息库(MIB)就已经是一个基本

部件,在RFCl066中,公布了第一组被管对象,为《基于TCP /IP 的因特网的网络管理的管理信息库》的文档。这个管理信息库被认为是MIBI 。MIBI 包含了8个对象组,约100个对象。在1990年5月,MIB H(RFCll58)取代了MIBI 。MIB II 引入了3个新的对象组并引入很多新的对象从而扩展了MIBI 已有的对象组。 MIBII 划分为以下子组:系统(Sys)、接口(if)、地址转换(AT)、因待网协议(IP)、因持网控制报文协议〔ICMP 〕、传输控制协议(TCP)、用户数据报协议(uDP)、外部网关协议(EGP)、在TcP /IP 上实现的公共管理信息协议(CMOT)、传输(Trans)和简单网络管理协议(SNMP)。

下图为MIB 的分层结构

2.6 SNMP 报文

SNMP PD结构如下:(编码之前)V1 中有5中报文;V2 增加了Get BulkRequest 和InformRequest PDU。

下图为SNMP V1的GetRequst PDU形式:

2.7. SNMP的运行过程

驻留在被管设备上的AGENT 从UDP 端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB 树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果。

下面根据RFC1157详细介绍Agent 接受到报文后采取的动作:

首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。 第二步:将报文中的版本号取出,如果与本Agent 支持的SNMP 版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP 版本1。

第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。 第四步:从通过验证的ASN.1对象中提出协议数据单元PDU ,如果失败,丢弃报文,不做进一不处理。否则处理PDU ,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。

根据不同的PDU ,SNMP 协议实体将做不同的处理:

1) 、GetRequest PDU:

第一种情况:如果PDU 中的变量名在本地维护的MIB 树中不存在, 则接受到这个PDU 的协议实体将向发出者发送一个GetResponse 报文,其中的PDU 与源PDU 只有一点不同:将ERROR-STATUS 置为noSuchName, 并在ERROR-INDEX 中指出产生该变量在变量LIST 中的位置。

第二种情况:如果本地协议实体将产生的响应报文的长度大于本地长度限制,将向该PDU 的发出者发送一个GetResponse 报文,该PDU 除了

ERROR-STATUS 置为tooBig ,ERROR-INDEX 置为0以外,与源PDU 相同。 第三种情况:如果本地协议实体因为其他原因不能产生正确的响应报文,将向该PDU 的发出者发送一个GetResponse 报文,该PDU 除了ERROR-STATUS 置为genErr ,ERROR-INDEX 置为出错变量在变量LIST 中的位置,其余与源PDU 相同。

第四中情况:如果上面的情况都没有发生,则本地协议实体向该PDU 的发出者发送一个GetResponse 报文,该PDU 中将包含变量名和相应值的对偶表,ERROR-STATUS 为noError,ERROR-INDEX 为0,request-id 域的值应与收到PDU 的request-id 相同。

2) 、GetNextRequest PDU

GetNextRequest

PDU 的最重要的功能是表的遍历,这种操作受到了前面所说的管理变量的表示方法的支持,从而可以访问一组相关的变量,就好象他们在一个表内。 下面通过一个例子解释表遍历的过程:

被管设备维护如下路由表:

Destination NextHop Metric

10.0.0.99 89.1.1.42 5

9.1.2.3 99.0.0.3 3

10.0.0.51 89.1.1.42 5

假设网管站欲取得这张路由表的信息,该表的索引是目的网络地址。 网管站向被管设备发送一个GetNextRequest PDU,其中的受管对象的标识如下

GetNextRequest ( ipRouteDest, ipRouteNextHop, ipRouteMetric1 ) SNMP agent响应如下GetResponse PDU:

GetResponse (( ipRouteDest.9.1.2.3 = "9.1.2.3" ),

( ipRouteNextHop.9.1.2.3 = "99.0.0.3" ),

( ipRouteMetric1.9.1.2.3 = 3 ))

网管站继续:

GetNextRequest ( ipRouteDest.9.1.2.3,

ipRouteNextHop.9.1.2.3,

ipRouteMetric1.9.1.2.3 )

agent 响应:

GetResponse (( ipRouteDest.10.0.0.51 = "10.0.0.51" ),

( ipRouteNextHop.10.0.0.51 = "89.1.1.42" ),

( ipRouteMetric1.10.0.0.51 = 5 ))

值得注意的是agent 必须能够确定下一个管理变量名,以保证所有变量能被取到且只被取到一次。

网管站继续:

GetNextRequest ( ipRouteDest.10.0.0.51,

ipRouteNextHop.10.0.0.51,

ipRouteMetric1.10.0.0.51 )

agent 响应:

GetResponse (( ipRouteDest.10.0.0.99 = "10.0.0.99" ),

( ipRouteNextHop.10.0.0.99 = "89.1.1.42" ),

( ipRouteMetric1.10.0.0.99 = 5 ))

网管站继续

GetNextRequest ( ipRouteDest.10.0.0.99,

ipRouteNextHop.10.0.0.99,

ipRouteMetric1.10.0.0.99 )

这时因为路由表中所有的行都被取遍,agent 因返回路由表对象的下一字典后继即该管理对象在MIB 树中的后序遍历的直接后继。这里应是

nettoMediaIndex ,管理对象的OBJECT

IDENTIFIER 。这个响应通知网管站对表的遍历已经完成。

3) 、GetResponse PDU

GetResponse PDU只有当受到getRequest GetNextRequest

SetRequest 才由协议实体产生,网管站收到这个PDU 后,应显示其结果。

4) 、SetRequest PDU

SetRequest PDU除了PDU 类型标识以外,和GetRequest 相同,当需要对被管变量进行写操作时,网管站侧的协议实体将生成该PDU 。

对SetRequest 的响应将根据下面情况分别处理:

(1). 如果是关于一个只读变量的设置请求,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error

status 为noSuchName, error index的值是错误变量在变量list 中的位置。

(2).

如果被管设备上的协议实体收到的PDU 中的变量对偶中的值,类型、长度不符和要求,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status 为badValue, error index的值是错误变量在变量list 中的位置。

(3). 如果需要产生的GetReponse 报文长度超过了本地限制,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status为tooBig, error index的值是0。

(4). 如果是其他原因导致SET 失败,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status为genErr,

error index的值是错误变量在变量list 中的位置。

如果不符合上面任何情况,则agent 将把管理变量设置收到的PDU 中的相应值,这往往可以改变被管设备的运行状态。同时产生一个GetResponse PDU ,其中error status置为noError,error index的值为0。

4) 、Trap PDU

V1中的Trap PDU,它与V1中其他类型的PDU 的形式并不一致。

V2中的Trap PDU,它与V2中其他类型的PDU 的形式是一样的。

Trap 是被管设备遇到紧急情况时主动向网管站发送的消息。网管站收到trap PDU后要将起变量对偶表中的内容显示出来。一些常用的trap 类型有冷、热启动,链路状态发生变化等。

5. SNMP在数据通信产品中的实现

目前数据通信产品(如路由器、接入服务器、ATM )对于SNMP agent一侧的实现是以PSOS SNMP Version 1函数库为基础,以

Epilogue MIB 编译器为辅助工具。AGENT 与协议模块以函数接口。并以协议软件TCP/IP

作为下层支持。以路由器为例:Agent 以一个独立的任务出现,经初始化后阻塞在UDP

161端口,一旦有来自网管站的请求报文,agent 将进行解码、分析、并通过一个socket 调用ioctl(int, int, char

*),与其他协议模块接口。其他模块根据该函数第二个参数(为一个命令字),将管理变量当前的值填入char

*所指向的数据结构。再经agent 编码,发送给网管站。后者往往是一台具有网管平台如netview 的工作站。

简单网络管理协议snmp 学习理解

1.SNMP 网络管理协议综述

SNMP (Simple Network Management Protocol)是被广泛接受并投入使用的工业标准,它是由SGMP 即简单网关监控协议发展以来的。它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。它采用轮询机制,提供最基本的功能集。最适合小型、快速、低价格的环境使用。它只要求无证实的传输层协议UDP ,受到许多产品的广泛支持。

2.1 管理信息

经由SNMP 协议传输的所有管理倍息都表现为非聚集的对象类型。这些对象类型被收集到一个或多个管理信息库[MIB]中并且对象类型按照管理信息结构和标识(SMI)定义。简单网络管理协议策l 版的sM[于1990年5月定义在一篇题为《基于因特网的了TCP /IP 管理信息结构和标识》的RFC 中。这一RFC 要求所有的管理信息库数据和信息必须根据ISO 8824标准《抽象句法表示法1规范》(ASN.1) 编码。按照ASN .1表示所有信息和对象的目的在于方便向OSI 的网络管理协议迁移而无需重新定义现已存在的所有对象和MIB 。

SMI 为每一对象类型定义以下成分:

①名字;

②句法;

②编码说明。

注意:一个对象类型的名字明确地代表一个对象,称为对象标识符。不得分配标识符0给对象类型作为其名字的一部分。为便于阅读,在标准文档中对象标识符旁边包含对这一对象的描述。对象标识符是按照在OSI MIB树中建立的严格分层空间构造的,对象标识符总是一个唯一的从树根开始描述MIB 树的整数序列。对象标识符和它的文字描述的组合称为标号。

2.1.1 管理树

SMI 明确要求所有被管理的信息和数据都要由管理树来标识。这棵管理树来源于

OSI 的定义,它具有从很开始的严格分层化结构。管理拷的分支和叶子是用数字和字母两种方式显示的。数字化编码是机器可读的,字母显示则更适合于人的眼睛并帮助用户寻找穿过错综复杂分支的路径。在树中通向一个节点或叶子的路径是用对象标识符表示的。

树的各个分支是用数值表示的,因此对象标识符就构成了一个整数序列。管理树纳根下有3个直接后继者IB 际电报电话咨询委员会ccnT 分支、国际标准化组织Iso 分支和J 。int —Iso —CCITT(上述的联合) 分文。下图为因特网子数(1.3.6.1)

中所包含的是与因特网有关的所有管理对象。

2.2 名字和语法

句法定义了对象的数据类型。AsN .1的部分结构用来形式化地描述这种数据类型。ASN .1编码只使用基本编码规则(BER)。

SMI 定义了3种数据类型:原语类型、结构类型和自定义的类型。

1) 原语类型(Primitive types)

原语ASN .1类型有Integer(整数) 、Octet(字节) 、String(字符串) 、object Identifier(对象标识符) 和NuLL(空) 几种类型。再没有其他原语类型。

2) 结构类型(Constructor types)

结构类型是一种用于汇集列表和表格的复合类型。出于这种目的,SNMP 使用sequence 和sequence of。结构类型Sequence 允许使用简单类型的列表,在sequence 定义中,SNMP 协议不提供缺省或可选值。Sequence 的句法构造如下:

SEQUENCE{<typel >,.., <typeN >}

表格是对一些元家组成的舶数据结构的显示。用entry 表示列表名,sequcence of的句法结构如下:

SEQUENCE <entry >

3) 自定义的类型(Defined types)

借助于列表和结构类型,其他类型可以从基本类型(已经定义过的类型)(1nteger、 NULL 、object Identifier和Octet String)派生。为此,SMI 定义了6种复合类型:

(1)NetworkAddress(网络地址)

NetworkAddress 允许使用各种格式化的网络地址。当前,SMI 只支持因持网协议

(2)IPAddress(因特网地址)

定义32位IP 地址的格式。

(3)Counter(计数器)

32位非负值计数器。这个计数器从o 计到2的32次幂减l(十进制的4294967295) ,—超出最大值,计数器从零重新计数。

(4)Gauge(量规)

32位非负整数计算器,可做增1计数和减1计数。Gauge 不能超出最大值(2的32次幂减l ,十进制4294967295) ,如超出,将从零重新启动。

(5)TimeTicks(时间标记)

非负的32位的整数。该整数按1/100s 计算时间

(6)Opaque(模糊)

引入这一伪数据类型,以绕过在有限的SMI 定义中所固有的任何限制。它允许任意的ASN .1结构。在网管站和代理进程间就Opaque 数据的解释达成一致是非常必要的。

4) 被管对象

管理信息的结构和标识没有定义各自的被管对象,而定义了它们的形式化结构和内容。每个对象类型由5个字段构成:对象名、句法、定义、访问方式和状态。

(1)对象名

在“object ”下,数值化的对象标识符是与对象的正文描述成对出现的 例子:atIndex {at Entryl}

(2)句法

使用A5N .1句法类型描述上述内容

(3)定义

描述被管对象的正文存储于这个字段中

(4)访问方式

定义对象的访问字段为只读、只写、读写或不可访问

(5)状态

对象状态字段包含着有关它的至要性的信息。状态字段可以有以下值 ①必备(Mandatory),在每一个实现中必须存在;

②可选(Ophtional),这一对象的集成是每个实现可选的;

③作废(0bsolete),这个对象不再使用。

2.3抽象句法表示法(ASN.1)

1)ASN .1规则

ASN .1定义了一些规则,这些规则对于理解SNMP 是极其重要的: ①标准描述了许多已定义的ASN .1类型;

②ASN .1类型名总是用大写字母打头;

③一律用大写字母显示某些保留字。这些保留字在标准中是有专门含义的;

④某些名字用小写保留字开头。这些名字仅为增强ASN .1表示法的易读而引入。

2) 模版

SMI 把被管对象的所有属性定义为一组数据(模板) 。这些模板由5个部分构成:对象描述、句法、定义、访问方式和对象的状态。对象棋板句法定义对象的ASN .L 编码(Integer、 Object String、NULI 、NetworkAddress 、IP Address、Counter 、Gauge 、TimeTicks 、opaque) 。

2.4 编码

SNMP 协议的所有对象类型是根据Iso 8824标准,即《抽象句法表示法1的基本编码规则规范》编码的。正如在基本编码规则BEE 中定义的,AsN .1数据总是用传入数据网的最有效位即最高位,作为第一个值。如下左图中所示,位8—1总是按从左到右的顺序传送到下一最低协议层。位8是最高位,位l 是最低位。相应地,这一协议消息的接收者将按顺序的数据流传输位8—1。所有其他位序,例如,以字节右边为最高位(位1) 是非法的。

不同于TcP /四协议,sNMP 消息没有固定格式的头。根据ASN .1的基本编码规则(BER),SNMP 把每一数据类型划分成3个字段:标识字段、长度字段和数据字段(见下右图)

1) 标识字段

标识字段定义朋N .1类型。对于所有的sNMP 协议类型,标识字段都

划分为元素类字段、格式化位和标识号字段几部分。

(1)类

标识字段中前两个最高佐(位8和7) 描述了标识值的类型。

(2)格式化位

标识字段中的位6称为格式位(F_bit)。F_bit用以区分下面的标识数值的原语和复合编码。对于前者,F_bit被置成0;对于后者,F_bit置成l 。

(3)标识号字段

标识号字段(位5—1) 按二进制数显示标识数值Tag Numbers。该字段总是从左到右编码,从最有效位5开始往下到最低有效位1(位1) 。由于用这5个位只能表示0一3l 的数值而且保留二进制值11111为较大的标识值所用,故实际上只能表示0一30的值。所有更大标识号值用接下来的数据字节代替(如图) 。在这种情况下,最有效的位(位8) 总是置为0值。

2) 长度字段

在ASN .1中,信息按两种不同类型的长度字段传输,分别称为“确定的形式”和“不确定的形式”。简单网络管理协议只提供确定形式,即用一个或多个字节定义在随后的信息字段中数据字节数。长度字段的第一个字节的高位作用在于区别长度字段中有一个字节还是多个字节。

(1)单字节长度字段

如果在倍息字段(位1—7) 中的信息长度为0一127个字节之间,则数据字节的个数可以用1个字节的长度字段定义。长度字段首字节中高位置为0以指明是一个短格式。

(2)多字节长度宁段

如果在信息字段中的数据字节数超过127,需要用若干字节表示长度。多字节数据字段也称为长格式。此时,长度字段的第一个字节的高位总是置成1以表明长格式。在第一个字节中所有其他位(位l 一7) 按二进制形式定义为后随字节长度的个数。因为IP 协议最多只能处理6E535个字节的数据报,所以SNMP 协议多字节长度字段限制为最大3个字节。

3) 数据字段

ASN .1的独立功能在数据字段中进行编码。SNMP 协议只提供以下原语类型:Integer 、Null 、Object Identifier、Octet string、Sequence 和Sequence of。

2.5管理信息库

被管对象的总和称为管理信息库(MIB)。当若干年前定义sNMP 时,sNMP 协议作者的意图是最大程度地实现简单性和可移植性。这一概念促使sNMP 协议成为网络管理的市场标准。在SNMP 协议早期,管理信息库(MIB)就已经是一个基本

部件,在RFCl066中,公布了第一组被管对象,为《基于TCP /IP 的因特网的网络管理的管理信息库》的文档。这个管理信息库被认为是MIBI 。MIBI 包含了8个对象组,约100个对象。在1990年5月,MIB H(RFCll58)取代了MIBI 。MIB II 引入了3个新的对象组并引入很多新的对象从而扩展了MIBI 已有的对象组。 MIBII 划分为以下子组:系统(Sys)、接口(if)、地址转换(AT)、因待网协议(IP)、因持网控制报文协议〔ICMP 〕、传输控制协议(TCP)、用户数据报协议(uDP)、外部网关协议(EGP)、在TcP /IP 上实现的公共管理信息协议(CMOT)、传输(Trans)和简单网络管理协议(SNMP)。

下图为MIB 的分层结构

2.6 SNMP 报文

SNMP PD结构如下:(编码之前)V1 中有5中报文;V2 增加了Get BulkRequest 和InformRequest PDU。

下图为SNMP V1的GetRequst PDU形式:

2.7. SNMP的运行过程

驻留在被管设备上的AGENT 从UDP 端口161接受来自网管站的串行化报文,经解码、团体名验证、分析得到管理变量在MIB 树中对应的节点,从相应的模块中得到管理变量的值,再形成响应报文,编码发送回网管站。网管站得到响应报文后,再经同样的处理,最终显示结果。

下面根据RFC1157详细介绍Agent 接受到报文后采取的动作:

首先解码生成用内部数据结构表示的报文,解码依据ASN.1的基本编码规则,如果在此过程中出现错误导致解码失败则丢弃该报文,不做进一步处理。 第二步:将报文中的版本号取出,如果与本Agent 支持的SNMP 版本不一致,则丢弃该报文,不做进一步处理。当前北研的数据通信产品只支持SNMP 版本1。

第三步:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与本设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个陷阱报文。SNMPv1只提供了较弱的安全措施,在版本3中这一功能将大大加强。 第四步:从通过验证的ASN.1对象中提出协议数据单元PDU ,如果失败,丢弃报文,不做进一不处理。否则处理PDU ,结果将产生一个报文,该报文的发送目的地址应同收到报文的源地址一致。

根据不同的PDU ,SNMP 协议实体将做不同的处理:

1) 、GetRequest PDU:

第一种情况:如果PDU 中的变量名在本地维护的MIB 树中不存在, 则接受到这个PDU 的协议实体将向发出者发送一个GetResponse 报文,其中的PDU 与源PDU 只有一点不同:将ERROR-STATUS 置为noSuchName, 并在ERROR-INDEX 中指出产生该变量在变量LIST 中的位置。

第二种情况:如果本地协议实体将产生的响应报文的长度大于本地长度限制,将向该PDU 的发出者发送一个GetResponse 报文,该PDU 除了

ERROR-STATUS 置为tooBig ,ERROR-INDEX 置为0以外,与源PDU 相同。 第三种情况:如果本地协议实体因为其他原因不能产生正确的响应报文,将向该PDU 的发出者发送一个GetResponse 报文,该PDU 除了ERROR-STATUS 置为genErr ,ERROR-INDEX 置为出错变量在变量LIST 中的位置,其余与源PDU 相同。

第四中情况:如果上面的情况都没有发生,则本地协议实体向该PDU 的发出者发送一个GetResponse 报文,该PDU 中将包含变量名和相应值的对偶表,ERROR-STATUS 为noError,ERROR-INDEX 为0,request-id 域的值应与收到PDU 的request-id 相同。

2) 、GetNextRequest PDU

GetNextRequest

PDU 的最重要的功能是表的遍历,这种操作受到了前面所说的管理变量的表示方法的支持,从而可以访问一组相关的变量,就好象他们在一个表内。 下面通过一个例子解释表遍历的过程:

被管设备维护如下路由表:

Destination NextHop Metric

10.0.0.99 89.1.1.42 5

9.1.2.3 99.0.0.3 3

10.0.0.51 89.1.1.42 5

假设网管站欲取得这张路由表的信息,该表的索引是目的网络地址。 网管站向被管设备发送一个GetNextRequest PDU,其中的受管对象的标识如下

GetNextRequest ( ipRouteDest, ipRouteNextHop, ipRouteMetric1 ) SNMP agent响应如下GetResponse PDU:

GetResponse (( ipRouteDest.9.1.2.3 = "9.1.2.3" ),

( ipRouteNextHop.9.1.2.3 = "99.0.0.3" ),

( ipRouteMetric1.9.1.2.3 = 3 ))

网管站继续:

GetNextRequest ( ipRouteDest.9.1.2.3,

ipRouteNextHop.9.1.2.3,

ipRouteMetric1.9.1.2.3 )

agent 响应:

GetResponse (( ipRouteDest.10.0.0.51 = "10.0.0.51" ),

( ipRouteNextHop.10.0.0.51 = "89.1.1.42" ),

( ipRouteMetric1.10.0.0.51 = 5 ))

值得注意的是agent 必须能够确定下一个管理变量名,以保证所有变量能被取到且只被取到一次。

网管站继续:

GetNextRequest ( ipRouteDest.10.0.0.51,

ipRouteNextHop.10.0.0.51,

ipRouteMetric1.10.0.0.51 )

agent 响应:

GetResponse (( ipRouteDest.10.0.0.99 = "10.0.0.99" ),

( ipRouteNextHop.10.0.0.99 = "89.1.1.42" ),

( ipRouteMetric1.10.0.0.99 = 5 ))

网管站继续

GetNextRequest ( ipRouteDest.10.0.0.99,

ipRouteNextHop.10.0.0.99,

ipRouteMetric1.10.0.0.99 )

这时因为路由表中所有的行都被取遍,agent 因返回路由表对象的下一字典后继即该管理对象在MIB 树中的后序遍历的直接后继。这里应是

nettoMediaIndex ,管理对象的OBJECT

IDENTIFIER 。这个响应通知网管站对表的遍历已经完成。

3) 、GetResponse PDU

GetResponse PDU只有当受到getRequest GetNextRequest

SetRequest 才由协议实体产生,网管站收到这个PDU 后,应显示其结果。

4) 、SetRequest PDU

SetRequest PDU除了PDU 类型标识以外,和GetRequest 相同,当需要对被管变量进行写操作时,网管站侧的协议实体将生成该PDU 。

对SetRequest 的响应将根据下面情况分别处理:

(1). 如果是关于一个只读变量的设置请求,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error

status 为noSuchName, error index的值是错误变量在变量list 中的位置。

(2).

如果被管设备上的协议实体收到的PDU 中的变量对偶中的值,类型、长度不符和要求,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status 为badValue, error index的值是错误变量在变量list 中的位置。

(3). 如果需要产生的GetReponse 报文长度超过了本地限制,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status为tooBig, error index的值是0。

(4). 如果是其他原因导致SET 失败,则收到该PDU 的协议实体产生一个GetReponse 报文,并置error status为genErr,

error index的值是错误变量在变量list 中的位置。

如果不符合上面任何情况,则agent 将把管理变量设置收到的PDU 中的相应值,这往往可以改变被管设备的运行状态。同时产生一个GetResponse PDU ,其中error status置为noError,error index的值为0。

4) 、Trap PDU

V1中的Trap PDU,它与V1中其他类型的PDU 的形式并不一致。

V2中的Trap PDU,它与V2中其他类型的PDU 的形式是一样的。

Trap 是被管设备遇到紧急情况时主动向网管站发送的消息。网管站收到trap PDU后要将起变量对偶表中的内容显示出来。一些常用的trap 类型有冷、热启动,链路状态发生变化等。

5. SNMP在数据通信产品中的实现

目前数据通信产品(如路由器、接入服务器、ATM )对于SNMP agent一侧的实现是以PSOS SNMP Version 1函数库为基础,以

Epilogue MIB 编译器为辅助工具。AGENT 与协议模块以函数接口。并以协议软件TCP/IP

作为下层支持。以路由器为例:Agent 以一个独立的任务出现,经初始化后阻塞在UDP

161端口,一旦有来自网管站的请求报文,agent 将进行解码、分析、并通过一个socket 调用ioctl(int, int, char

*),与其他协议模块接口。其他模块根据该函数第二个参数(为一个命令字),将管理变量当前的值填入char

*所指向的数据结构。再经agent 编码,发送给网管站。后者往往是一台具有网管平台如netview 的工作站。


相关内容

  • 网络安全常用名词详解
  • ------------------------------------------------------------------------------------------- 安防快线:www.sec520.com :原创动画多,精品软件更新快 论坛地址:bbs.sec520.com : 分 ...

  • 2010网络工程[网络管理与维护]教学大纲1
  • <网络管理与维护>课程教学大纲 (Network Management and Maintenance) 适用专业:网络工程 课程学时:64 课程学分:4 课程代码: 先修课程:计算机组成原理,操作系统,计算机网络基础 一.课程的性质与任务 1.课程性质:<网络管理与维护>课 ...

  • 关于计算机网络管理技术的认识1
  • 论文关键字:计算机网络 管理 问题 前景和趋势 论文摘要:当前计算机网络的发展特点规模不断夸大,复杂性不断增加,异构性越来越高.如果不能高效的对网络系统进行管理,就很难保证提供一个令人满意的服务.网络管理是网络发展中一个很重要的内容,其重要性已在各个方面得到体现.首先是对网络管理就发展现状.网络协议 ...

  • 以太网协议报文格式
  • TCP/IP协议族 IP/TCP Telnet 和R login.FTP 以及SMTP IP/UDP DNS .TFTP .BOOTP .SNMP ICMP 是IP 协议的附属协议.IGMP 是Internet 组管理协议 ARP (地址解析协议)和RARP (逆地址解析协议)是某些网络接口(如以太 ...

  • 网络管理,是指网络管理员通过网络
  • 网络管理,是指网络管理员通过网络管理程序对网络上的资源进行集中化管理的操作,包括配置管理.性能和记账管理.问题管理.操作管理和变化管理等.一台设备所支持的管理程度反映了该设备的可管理性及可操作性. 而交换机的管理功能是指交换机如何控制用户访问交换机,以及用户对交换机的可视程度如何.通常,交换机厂商都 ...

  • 网络管理复习资料
  • 网络管理复习资料 一.填空题 1. 管理者和代理见的信息交换是通过进行的. 2. OSI模型将网络通信按功能划分为七个层次并定义了各层的功能,其中最底层为_____物理层_______,最顶层为_____应用层______. 3. 4. 计算机网络最基本的功能是____数据通信_____和____共 ...

  • [网络协议分析]教学大纲
  • <网络协议分析>课程教学大纲 课程代码: 课程名称:网络协议分析 英文名称:The network protocol analysis 课程类型:必修课 总 学 时: 48学时 讲课学时:32 学 分:3 适用对象:计算机科学与技术.网络工程.软件工程.信息管理与信息系统等专业 先修课程 ...

  • 计算机网络全部知识点
  • 第1章 概述 1.1 计算机网络在信息时代中的作用 因特网(Internet)的发展 因特网的意义 计算机网络向用户提供的最重要的功能:连通性.共享 1.2 因特网概述 1.2.1 网络的网络 请注意名词"结点" 网络与因特网 1.2.2 因特网发展的三个阶段 Internet ...

  • 第9章应用层d
  • 第9章 应用层d.txt熬夜,是因为没有勇气结束这一天:赖床,是因为没有勇气开始这一天.朋友,就是将你看透了还能喜欢你的人.第9章 应 用 层 本章基本要求: 理解TCP/IP的应用层的主要应用: 理解OSI应用层的功能与作用. 第9章 应 用 层 9.1 应用层功能概述 9.2 TCP/IP的应用 ...