首页 SNMP协议基础

SNMP协议基础

举报
开通vip

SNMP协议基础SNMP协议基础 21 SNMP协议及网络管理介绍 21.1什么是SNMP? 31.1.1 SNMP 版本 31.1.2 管理端和agent 41.1.3 SMI和MIBs 42 SNMP V1和SNMP V2 52.1 SNMP 和 UDP 52.2 SNMP community 52.3 管理信息结构 62.3.1 OID命名 72.3.2 OID的描述 132.4 V2版本中的SMI扩展 152.5进一步了解MIB-II 172.6 SNMP 操作 ...

SNMP协议基础
SNMP协议基础 21 SNMP协议及网络管理介绍 21.1什么是SNMP? 31.1.1 SNMP 版本 31.1.2 管理端和agent 41.1.3 SMI和MIBs 42 SNMP V1和SNMP V2 52.1 SNMP 和 UDP 52.2 SNMP community 52.3 管理信息结构 62.3.1 OID命名 72.3.2 OID的描述 132.4 V2版本中的SMI扩展 152.5进一步了解MIB-II 172.6 SNMP 操作 172.6.1 get 202.6.2 getnext 232.6.3 getbulk 252.6.4 set操作 262.6.5 get, getnext, getbulk, 以及set 错误响应 272.6.6 SNMP trap 292.6.8 SNMP inform 292.6.9 SNMP report 292.7 RMON 303 SNMP V3 303.1 SNMPv3的变化 313.1.1 SNMPv3引擎 313.1.2 SNMPv3 应用程序 323.2 USM 343.3. VACM 1 SNMP协议及网络管理介绍 当今由路由器、交换机、服务器组成的复杂的网络,确保所有的设备正常运行且处于最佳状态确实是一件非常令人胆怯的事情。简单网络管理协议(SNMP)可以帮助解决这个问题。随着人们对IP设备管理标准的需求日益增长,SNMP协议在1988年正式推出,利用SNMP只需一些“简单”的操作便可实现对网络设备的远程管理。接下来内容将会介绍SNMP是如何工作的,结合一些实例进行讲解。 本节主要介绍SNMP和网络管理。虽然SNMP是本文的重点,加强对网络管理概念的理解,对于使用SNMP管理网络也非常有帮助。 1.1什么是SNMP? SNMP的核心是帮助管理员简化对一些支持SNMP设备设置的操作(也包括这些信息的收集)。例如,使用SNMP可以关闭路由器的一个端口,也可以查看以太网端口的工作速率。SNMP还可以监控交换机的温度,在出现过高现象进行报警。SNMP通常和管理路由器相关联,实际上SNMP可以用于管理很多类型的设备。 SNMP的前身是间单网关管理协议(SGMP),SGMP是为了管理互联网络上的路由器开发的。远程网络监控(RMON)是为了帮助我们理解网络自身是如何工作的,以及单台设备是如何对整个网络产生影响的,RMON不仅可用于监控局域网的流量,也可以用于广域网接口。我们将在第2节详细阐述RMON. 1.1.1 SNMP 版本 IETF负责定义互联网流量监管的标准,这里面包括SNMP。IETF发行的RFCs,对IP领域中的众多协议进行了详细的阐述,最初提交的文档是标准的提案,然后进入草案状态。当最后的草案被认可后,这个草案被赋予标准状态,虽然极少有完全被认同的标准。另外还有2个成为标准过程中的文档状态:历史文档和试验文档,分别指被更新的RFC取代的文档和还未最终成为标准的文档。下面列举了一些当前的SNMP版本以及相应的IETF状态信息。 1)SNMP V1是SNMP协议的最初版本。在RFC 1157种进行定义。SNMP V1的安全性通过和密码没有什么区别的community,SNMP应用程序知道community便可获得访问设备管理信息的权限。有三种community:只读、读写以及trap。需要注意的是虽然SNMP V1是早期版本,不过依然是众多厂家实现SNMP基本方式。 2)SNMP V2通常被指是基于community的SNMP V2,基于community的SNMPv2从技术上成为SNMPv2c,不过全文中,我们都称作为SNMPv2。SNMPv2由RFC 3416, RFC 3417, 以及RFC 3418进行定义。 3)SNMP version 3 (SNMPv3 ) 是最新版本的SNMP. 它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持。在2002年,最终由草案变成完全标准。以下的RFC定义了SNMPv3标准: RFC 3410, RFC 3411, RFC 3412, RFC 3413, RFC 3414, RFC 3415, RFC 3416, RFC 3417, RFC 3418, 以及RFC 2576.SNMPv3将在第3章进行详细对待。 1.1.2 管理端和agent 前面曾模糊地提到支持SNMP的设备和网络管理工作站。接下来看看它们到底是怎么回事。SNMP有2个主体:管理端和agent。管理端指的是运行了可以执行网络管理任务软件的服务器,通常被称作为网络管理工作站(NMS),NMS负责采样网络中agent的信息,并接受agent的trap。采样,顾名思义,就是查询agent(路由器、交换机、Unix服务器等等)中的信息。借助于这些信息,系统可以判断是否出现了某种故障。Trap就是agent主动告诉NMS发生了的事情。Trap的传送属于实时的,不是NMS查询的响应。 NMS会对收到的信息会进行判断,有必要的话在做出相应的动作。例如,当网络出口的Internet线路断掉,路由器将会发送Trap信息给NMS,NMS收到可以进行一些动作,比如以告警的方式通知管理员。注意:这个动作作必须NMS支持,而且要提前定义好。 Agent是运行在可网络设备上的软件。可以是一个独立的程序(在Unix中叫守护进程),也可以是已经整合到操作系统中(比如:锐捷路由器的RGNOS,或者UPS中的底层操作系统)。如今,大多数IP设备都植入了SNMP agent,目的是为系统管理员管理设备提供方便。 Agent可以通过不同的方式为NMS提供管理信息。例如:路由器上的agent可以跟踪每个接口的状态,哪个端口是UP的,哪个是down的等等。NMS可以查询每个接口的状态,一旦出现down掉,便可以立刻采取行动。Agent在出现异常情况时,可以发送trap给NMS。 1.1.3 SMI和MIBs 管理信息结构(SMI)定义了管理对象以及管理对象的表现形式。 Agent具有一份可跟踪对象的列表。路由器接口具备一些不同状态标志(例如:up,down)。基本管理信息(MIB)可以理解成为agent维护的管理对象数据库,MIB中定义的大部分管理对象的状态和统计信息都可以被NMS访问。SMI提供一种定义(采用SMI格式)管理对象的方式,而MIB用于定义对象自身。 MIB给管理对象起了一个名字,并且做出具体的解释。第2章会对MIB和SMI进行详细的描述。所有的Agent都使用被称作为MIB-II的MIB(RFC1213进行定义)。这个标准定义了端口统计(接口速率,MTU,发送的字节数,接收的字节数等等)信息以及系统自身描述信息(系统位置,联系方式,等等)。MIB-II的主要目的是为TCP/IP提供通用管理信息,并不包含厂家自身定义的信息。注意:MIB-I是MIB的早期版本,已被升级版MIB-II所取代。 MIB-II定义的是为TCP/IP服务的,那么其它类型的信息应该如何被定义的呢? 首先,有很多草案或者提议标准已经开发出来,用于管理帧中继、ATM、FDDI及一些服务(邮件、DNS等等)。以下列举了一些相关的RFC: ATM MIB (RFC 2515) Frame Relay DTE Interface Type MIB (RFC 2115) BGP Version 4 MIB (RFC 1657) RDBMS MIB (RFC 1697) RADIUS Authentication Server MIB (RFC 2619) Mail Monitoring MIB (RFC 2789) DNS Server MIB (RFC 1611) 其次,只有这些MIB是远远不够的,因为这个原因,厂商或者个人可以定义私有的MIB。例如,厂商新推出一款路由器,这款路由器可能具备一些非常重要的新特性,非常值得监控,但标准的MIB中并不存在。因此,厂商只能开发出相对应的的私有MIB。 2 SNMP V1和SNMP V2 本节将对SNMP进行详细地描述,特别是针对SNMPv1和SNMPv2的特性(对SNMPv3只会简略地提到,SNMPv3将在第3节进行详细描述)。学习完这节后,你将懂得SNMP是如何发送和接收信息的,什么是SNMP community,如何阅读MIB文件,我们还会对第1节中提到的MIB-II、和RMON进行详细的描述。 2.1 SNMP 和 UDP SNMP采用UDP协议在管理端和agent之间传输信息。 SNMP采用UDP 161端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口,有些厂商允许更改agent的缺省配置,如果缺省的配置被更改,必须通知NMS服务器以便能够及时更改,从而可以正确对设备进行查询。 图2-1:SNMP的TCP/IP通信模型 发往NMS162端口的trap NMS发往agent161端口的请求 agent发往NMS161端口的请求响应 2.2 SNMP community SNMPv1和SNMPv2采用community字段在管理者和agent之间建立信任关系。Community实质上就是密码。很多厂商在设备上都配有缺省的community字段,通常只读的是public,可读写的是private。注意:要在设备网络上运行之前更改这些缺省community。 2.3 管理信息结构 前面我们曾经粗略提到过管理信息。懂得SNMP的内容是如何表示的,是理解网管设备可提供的信息类型的前提。管理对象是如何命名的、管理对象的数据类型,SMIv1(RFC1155定义)进行了详细的描述。SMIv2是为SNMPv2使用的升级版,首先来看一下SMIv1,下一节再讨论SMIv2。 管理对象的定义可以分为三个属性: 1) 名称 名称,或者是OID,对管理对象进行唯一的标识,一般以两种形式出现:数字和“方便人们阅读的”,这两方法不但长而且不方便,在SNMP的应用程序中,做了很多弱化命名带来的不便的努力。 2)类型和格式 管理对象的数据类型在ASN.1的子集进行了定义。ASN.1的好处是和设备没有关系。 3)编码 BER(Basic Encoding Rules)规则是管理对象编码成八位字符的唯一方式。BER定了对象是如何进行编码和解码的,从而对象可以在例如以太网这样的戒介质上进行传输。 2.3.1 OID命名 管理对象通过树状结构进行组织,是SNMP命名的基础。OID由树上的一系列整数组成,整数之间用点( . )分隔开。用名称的形式进行表示更加友好,这种形式也只是在名字之间用点( . )进行隔开,每个名称代表树中的一个节点。图2-2我们可以看到树的部分顶部(删除了这里并不关心的分支)。 图2-2:SMI对象树 树中,最顶部的节点被称作为根节点,所有具备下一级对象的称作子树。图2-2的根,树的起点被称作为Root-Node.它的子树由ccitt(0), iso(1), 以及joint(2)构成,上图只有iso(1)具备子树,其他两个没有子树。ccitt(0) 和joint(2)和SNMP没有关系,本文不做论述。 本文接下来的部分,集中在 iso(1).org(3).dod(6).internet(1)子树,每个管理对象都有自己的OID。directory分枝目前还没有用到; management分枝(mgmt)定义一系列互联网管理标准; experimental分枝保留给测试和研究使用; private分枝只进行了部分定义,其他部分由个人或者组织进行定义。 下面是internet子树的定义: internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 } directory OBJECT IDENTIFIER ::= { internet 1 } mgmt OBJECT IDENTIFIER ::= { internet 2 } experimental OBJECT IDENTIFIER ::= { internet 3 } private OBJECT IDENTIFIER ::= { internet 4 } 第一行定义internet为1.3.6.1,作为iso.org.dod或者1.3.6的子树(::=是一个定义的操作符),后面四个类似,都是internet的分枝。从{ internet 1 }可以知道,directory 是internet的一个子树,OID是1.3.6.1,mgmt的OID是1.3.6.1.2,依次类推。 Private子树使得软硬件的厂商们可以私有对象。SMI的定义如下enterprises OBJECT IDENTIFIER ::= { private 1 }。目前由IANA管理分配给个人、机构、组织、公司等等号码。可以在http://www.iana.org/assignments/enterprise-numbers.上查询到。 例如,可以查到锐捷网络的代号: 4881 Start Network Technology Co., Ltd. Qiu Gensheng qiugs&term.star.com.cn 2.3.2 OID的描述 SYNTAX属性通过一系列的ASN.1定义管理对象,SMIv1定了好多种对于网络设备来说非常重的数据类型,这些数据通过一种简单的方式定义管理对象包含哪些信息,记住它们极为重要。我们即将讨论的数据类型有点像C语言中所提到的。表2-1列出了SMIv1支持的数据类型。 数据类型 描述 INTEGER 32位的数字,指定某个可以数字表示的管理对象内容。例如路由器接口的状态可能是up、down、或者test,用数据的方式表示,1表示up,2表示down,3表示testing,根据RFC1153种提到的,0不能用作数值类型。 OCTET STRING 表示文本字符串,0个或者更多的字节。经常被用作表示无力地址 Counter 32位数字,0~232 - 1 (4,294,967,295). 当达到最大值后,又从0开始计数。一般用于端口上发送/接收的字节数,或者端口上看到的错误数、丢弃数。计数值是一直往上增长的。当agent重启,所有的计数清0。 OBJECT IDENTIFIER 跟有点的十进制值组成的符号,代表对象树上的某个管理对性。 例如1.3.6.1.4.1.4881 代表锐捷网络private enterprise OID. NULL SNMP中目前还没有用到 SEQUENCE 定义包含0或者更多其他的ASN.1数据类型 SEQUENCE OF ASN.1类型,作为由SEQUENCE定义对象的组成部分。 IpAddress 代表32位的IPv4地址.SMIv1和SMIv2都没有对128位的IPv6地址的描述。 NetworkAddress 类似于IP地址类型,但可以代表不同的网络地址类型 Gauge 在 0 ~ 232 - 1 (4,294,967,295)之间的32位数值. 和Counter不一样 Gauge可以增也可以减, 但不能超过最大值,端口的数率就是Gauge类型 TimeTicks 在 0 ~~ 232 - 1之间的32位数值 (4,294,967,295).以0.01秒的粒度计算TimeTicks。设备的Uptime就是TimeTicks类型 Opaque 允许其他所有的ASN.1编码到一个8位字符中 懂得如何读取和理解MIB文件非常重要,下面的例子是MIB-II的简化版(跟在‘--’之后的为注释) RFC1213-MIB DEFINITIONS ::= BEGIN IMPORTS mgmt, NetworkAddress, IpAddress, Counter, Gauge, TimeTicks FROM RFC1155-SMI OBJECT-TYPE FROM RFC 1212; mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } -- groups in MIB-II system OBJECT IDENTIFIER ::= { mib-2 1 } interfaces OBJECT IDENTIFIER ::= { mib-2 2 } at OBJECT IDENTIFIER ::= { mib-2 3 } ip OBJECT IDENTIFIER ::= { mib-2 4 } icmp OBJECT IDENTIFIER ::= { mib-2 5 } tcp OBJECT IDENTIFIER ::= { mib-2 6 } udp OBJECT IDENTIFIER ::= { mib-2 7 } egp OBJECT IDENTIFIER ::= { mib-2 8 } transmission OBJECT IDENTIFIER ::= { mib-2 10 } snmp OBJECT IDENTIFIER ::= { mib-2 11 } -- the Interfaces table -- The Interfaces table contains information on the entity's -- interfaces. Each interface is thought of as being -- attached to a 'subnetwork.' Note that this term should -- not be confused with 'subnet,' which refers to an -- addressing-partitioning scheme used in the Internet -- suite of protocols. ifTable OBJECT-TYPE SYNTAX SEQUENCE OF IfEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "A list of interface entries. The number of entries is given by the value of ifNumber." ::= { interfaces 2 } ifEntry OBJECT-TYPE SYNTAX IfEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "An interface entry containing objects at the subnetwork layer and below for a particular interface." INDEX { ifIndex } ::= { ifTable 1 } IfEntry ::= SEQUENCE { ifIndex INTEGER, ifDescr DisplayString, ifType INTEGER, ifMtu INTEGER, ifSpeed Gauge, ifPhysAddress PhysAddress, ifAdminStatus INTEGER, ifOperStatus INTEGER, ifLastChange TimeTicks, ifInOctets Counter, ifInUcastPkts Counter, ifInNUcastPkts Counter, ifInDiscards Counter, ifInErrors Counter, ifInUnknownProtos Counter, ifOutOctets Counter, ifOutUcastPkts Counter, ifOutNUcastPkts Counter, ifOutDiscards Counter, ifOutErrors Counter, ifOutQLen Gauge, ifSpecific OBJECT IDENTIFIER } ifIndex OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "A unique value for each interface. Its value ranges between 1 and the value of ifNumber. The value for each interface must remain constant at least from one reinitialization of the entity's network management system to the next reinitialization." ::= { ifEntry 1 } ifDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) ACCESS read-only STATUS mandatory DESCRIPTION "A textual string containing information about the interface. This string should include the name of the manufacturer, the product name, and the version of the hardware interface." ::= { ifEntry 2 } END 第一行定义了MIB的名字,RFC1213-MIB(RFC-1213定义了MIB-II)中定义的格式是固定的。这个MIB的IMPORTS部分通常指链接的内容。使用IMPORTS语句可以从其他的MIB文件中链接OID的数据类型。这个MIB从RFC1155-SMI链接了以下内容: 1) mgmt 2) NetworkAddress 3) IpAddress 4) Counter 5) Gauge 6) TimeTicks OBJECT-TYPE是从RFC1212中链接的, RFC1212定义了MIB文件如何编写。链接的的条目都通过FROM语句判断来自何处。前面我们看到mgmt是1.3.6.1.2。因此,mib-2就可以写成1.3.6.1.2.1,同样的,mib-2下面的interface组可以定义成为{mib-2 2}或者1.3.6.1.2.1.2,对管理对象命名后,接下来描述一下具体对象,所有的对象按照以下的格式进行描述: OBJECT-TYPE SYNTAX ACCESS STATUS DESCRIPTION "Textual description describing this particular managed object." ::= { } 在MIB-II中首先描述的是ifTable,表示网管设备网络接口列表(注意对象名称采用大小写混合的模式定义,第一个字母用小写),以下是采用ASN.1格式的定义: ifTable OBJECT-TYPE SYNTAX SEQUENCE OF IfEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "A list of interface entries. The number of entries is given by the value of ifNumber." ::= { interfaces 2 } ifTable的格式是SEQUENCE OF IfEntry. ifTalbe是一张表,包含由IfEntry定义的列,这个对象不可访问,表示agent不提供对该对象的查询。 Mandatory,表示agent必须支持该对象以保证兼容MIB-II标准。 DESCRIPTION 描述该对象一些具体情况。ifTable的OID是1.3.6.1.2.1.2.2。 接下来我们看一下前一部分MIB文件中,SEQUENCE部分的定义: IfEntry ::= SEQUENCE { ifIndex INTEGER, ifDescr DisplayString, ifType INTEGER, ifMtu INTEGER, . . . ifSpecific OBJECT IDENTIFIER } 注意到sequence(IfEntry)的名称也是大小写混用,但是第一个字母是大写, Sequence定义了一个包含的属性列表,比如ifIndex, ifDescr, ifType等等,这张表可以容纳很多表项,表项的管理由agent负责,NMS能够在表中增加表项,在随后章节“set 操作”部分会讲到这个内容。IfEntry指定了表中包含的表项。 接下来再来看看ifEntry(表中实际的表项)的定义。 ifEntry OBJECT-TYPE SYNTAX IfEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "An interface entry containing objects at the subnetwork layer and below for a particular interface." INDEX { ifIndex } ::= { ifTable 1 } ifEntry是ifTable中的表项,它的定义方法和ifTalbe几乎相同,除了增加了一个新的语句,INDEX。index是ifTable表项的关键字。Agent要确保表中index的唯一性。如果路由器有6个端口,那么ifTable中将会有6列。ifEntry的OID是1.3.6.1.2.1.2.2.1 fEntry的index是ifIndex,定义如下: ifIndex OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "A unique value for each interface. Its value ranges between 1 and the value of ifNumber. The value for each interface must remain constant at least from one reinitialization of the entity's network management system to the next reinitialization." ::= { ifEntry 1 } ifIndex对象只读,意味着我们能够察看,但不能修改。这段MIB中最后定义的对象是ifDescr,ifTable的一列,用于对端口进行描述。这个MIB示例以END语句结束,END用于标识MIB的结束,在实际的MIB-II文件中,每个列在IfEntry 的sequence都有相应的对象定义,鉴于课程篇幅,这里指列举其中的2个。 2.4 V2版本中的SMI扩展 SMIV2通过在internet子树中增加snmpV2的分支扩展SMI对象,增加了好几种数据类型,并且有了很多其他的变化,新分支的OID为1.3.6.1.6.3.1.1。 SMIv2定义一些新的数据类型,详见表2-2 表2-2:带有SNMPv2的树 数据类型 描述 Integer32 和INTEGER一样 Counter32 和Counter一样 Gauge32 和Gauge一样 Unsigned32 0~232 – 1之间的十进制值, Counter64 类似于Counter32,但最大值是18,446,744,073,709,551,615(264-1),用于Counter32在短时间就循环的情况下。 BITS An enumeration of nonnegative named bits. 相比于SMIv1,SMIv2中对对象的定义也有了一些变化,增加了一些可选的字段,对象的访问提供更多控制;表增加了更多的列;并且可以进行更加详细的描述。以下是SMIv2的定义,粗体字为变化的部分: OBJECT-TYPE SYNTAX UnitsParts MAX-ACCESS STATUS DESCRIPTION "Textual description describing this particular managed object." AUGMENTS { } ::= { } 2.5进一步了解MIB-II MIB-II是一个非常重要的管理组,支持SNMP的设备必须支持MIB-II。我们不打算对MIB中每个对象进行仔细描述,只简描述了一下子树的定义,RFC-1213-MIN采用以下的方式对MIB-II子树中基本的OID进行定义: mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } system OBJECT IDENTIFIER ::= { mib-2 1 } interfaces OBJECT IDENTIFIER ::= { mib-2 2 } at OBJECT IDENTIFIER ::= { mib-2 3 } ip OBJECT IDENTIFIER ::= { mib-2 4 } icmp OBJECT IDENTIFIER ::= { mib-2 5 } tcp OBJECT IDENTIFIER ::= { mib-2 6 } udp OBJECT IDENTIFIER ::= { mib-2 7 } egp OBJECT IDENTIFIER ::= { mib-2 8 } transmission OBJECT IDENTIFIER ::= { mib-2 10 } snmp OBJECT IDENTIFIER ::= { mib-2 11 } mib-2亦即iso.org.dod.internet.mgmt.1或者1.3.6.1.2.1。从上面我们可以看到system组是{mib-2 1},或者1.3.6.1.2.1.1。图2-4 显示的是mgmt分支的MIB-II子树 图2-4:MIB-II子树 表2-5对MIB-II中的每个管理组进行简要的描述,详细的内容可以从RFC1213中找到。 子树名 OID 描述 system 1.3.6.1.2.1.1 定义了属于诸如系统uptime,系统联系方式,系统名等属于系统操作的内容 interfaces 1.3.6.1.2.1.2 跟踪管理单元的每一个接口,监控接口组中接口的up或者down、发送/接收的字节数、错误和丢弃等等 at 1.3.6.1.2.1.3 地址转换组主要为了向后兼容而提供的,不建议使用。 ip 1.3.6.1.2.1.4 跟踪IP,包括IP路由的相关信息 icmp 1.3.6.1.2.1.5 跟踪ICMP错误、丢弃等信息 tcp 1.3.6.1.2.1.6 跟踪TCP连接状态(例如:关闭、侦听、同步等),也跟踪TCP相关的信息 udp 1.3.6.1.2.1.7 跟踪UDP的统计、出入报文等信息 Egp 1.3.6.1.2.1.8 跟踪EGP及EGP保持邻居表的诸多统计信息 transmission 1.3.6.1.2.1.10 这个组没有具体的对象,不过和介质相关的MIB通过这个子树进行定义。 Snmp 1.3.6.1.2.1.11 管理单元上SNMP的运行情况,跟踪类似于SNMP报文进出数量的信息。 2.6 SNMP 操作 我们已经讨论了SNMP是如何组织信息的,但没有描述如何收集这些管理信息的,接下我们将揭开SNMP这方面的面纱。 PDU是管理端和agent用于发送和接收信息的消息,以下SNMP操作都包含标准的PUD格式: 1) get 2) getnext 3) getbulk (SNMPv2 and SNMPv3) 4) set 5) getresponse 6) trap 7) notification (SNMPv2 and SNMPv3) 8) inform (SNMPv2 and SNMPv3) 9) report (SNMPv2 and SNMPv3) 2.6.1 get Get request由NMS发往agent,agent收到请求后将会进行处理。在过载的情况下,比如说路由器,在无法响应请求的情况下不得不丢弃这个报文,如果agent成功收集了NMS请求的信息,会发送get response给NMS,这个过程参见图2-5。 图2-5:get request过程 Agent是如何知道NMS要找什么呢?实际上就是通过请求报文中的OID来进行发放现的。图2-6列出了相应的动作: 图2-6:通过MIB-Browser查看交换机的System name。 在这个示例中,进行了好几件事情。 首先,通过MIB-Browser发送命令,在程序上只要要进行三个设置:只读community(public),OID(1.3.6.1.2.1.1.5.0)。.5是希望查询的MIB变量,它的英文名称是systemName。.0又是做什么用的呢?SNMP中,MIB对象通过x.y的形式表示,x是实际上管理对象OID(这个例子中,1.3.6.1.2.1.1.5),y是实例标识号,对于标量对象(也就是没有表项的对象)y始终是0,在有表的情况下,实例ID确保可以选取表中的某一表项。1代表第2项,2代表第2项,一次类推。 例如,查询交换机F0/2端口的ifDescr,在MIB-Browser中填入的OID值为1.3.6.1.2.1.2.2.2.2。 一次只需查询一个MIB对象的信息的情况下,get非常有用。但是如果采用这种方式查询多个对象的信息,将是一件非常浪费时间的事情。后文会提到相应的解决办法。 接下来,看看查询systemName的request报文情况。(使用sniffer捕获的) Get request Get response 以上是在V1模式下捕获的报文,换成V2的情况如下: Get request Get response 2.6.2 getnext getnext 操作允许你调用一些命令去查询MIB的一组值。getnext命令以类似于查词典的顺序查阅字树。 图2-8:getnext依次查询到system组的路径 操作举例: 上图设置好了以后,第一个要搜索的对象是1.3.6.1.2.1.3.0(system.uptime)点击start后,返回的事system.Contact值。 查看捕获的报文: Get response 2.6.3 getbulk SNMPv2定义了getbulk操作,管理程序通过这个命令可以一次性查询到很多信息,标准的get操作有可能试图一次查询很多MIB对象的信息,但信息agent的信息容量有限,如果无法响应所有的请求,将会返回不包含任何信息的错误消息。Getbulk操作,能够让agent尽可能返回更多的信息。调用getbulk命的时候,有2个字段必须设置:nonrepeaters和max-repetitions。 Nonrepeaters 指前N个对象可以通过简单的getnext命令查询。max-repetitions 指在N之后最大只能通过getnext命令查询M个对象。 例: Getbulk: 2.6.4 set操作 该命令用于修改管理单元的值,或者在表中增加新的表项。NMS可以同时修改多个对象。 例: Set Get response 2.6.5 get, getnext, getbulk, 以及set 错误响应 错误回应有助于判断查询或者设置是否成功。get, getnext, getbulk,以及set 的相关错误在表2-6列出. 错误状态位在()中: SNMPv1错误消息 描述 noError(0) 没有错误 tooBig(1) 请求的响应无法在一个响应中容纳 noSuchName(2) 查询或者设置的OID没有找到 badValue(3) 设置了一个不匹配的值。 readOnly(4) 这个错误一般不用,noSuchName错误和这个一样。 genErr(5) 除以上之外的错误 SNMPv2错误消息 描述 noAccess(6) 访问不允许访问的对象。 wrongType(7) 设置成错误的类型,例如要把INTEGER类型的值设置成string类型的值。 wrongLength(8) 设置错误,例如:设置字符对象的值超过允许的最大长度 wrongEncoding(9) 设置的编码错误。 wrongValue(10) 要设置一个MIB不存在的变量类型 noCreation(11) 设置或者创建MIB中不存在的变量 inconsistentValue 不匹配任何设置的请求 resourceUnavailable(13) 资源不足,无法set commitFailed(14) 设置操作的其他错误 undoFailed(15) 直到该错误出现,agent便可实现回滚 authorizationError(16) 验证错误 notWritable(17) 即便有全权限,变也不接受set操作。 inconsistentName(18) 设置一个处于比匹配状态的变量 2.6.6 SNMP trap Trap由agent发往目的,需要在agent上进行配置。Trap的目的一般是NMS的IP。NMS不会发出接受到trap的确认信息,因此agent无法知道trap是否到达NMS,由于SNMP使用UDP报文,trap容易出现丢失的现象,不过即便trap存在可能丢失的情况,却并没有影响到它的作用。一个 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 很好的网络环境,需要有一个完整的网络 管理系统 工资管理系统慧云智能化管理系统免费考勤管理系统员工工资计算excel病人信息管理系统 ,及时对出现的异常做出通知。即便消息有可能丢失,也远远强于放弃设置这样的功能去猜测可能出现的情况。以下列举了一些情况下可能产生的trap: 1) 设备的端口状态变为down 2) 设备的端口状态变为up 3) 进入Modem池的呼叫无法和modem接通 4) 交换机或者路由器的风扇出现故障 NMS收到trap后,需要懂得如何去识别,也就是说要知道如何读取trap中包含的信息,trap首先通过trap定义,有7种trap号(0-6),其中6号trap是企业自定义的trap,定义的方法为enterprise-id.specific-trap-number.参见表2-8。 表2-8:常见的trap trap名称及编号 描述 coldStart (0) 表示agent重启,所有的管理变量将被重新设置。Counters和Gauges将被清0。 warmStart (1) 自行启动,所有的管理变量不会初始化 linkDown (2) 设备的接口变成down的状态,和端口对应的编号用于标示具体端口。 linkUp (3) 当接口变成UP状态的时候,和端口对应的编号用于标示具体端口。 authenticationFailure (4) 如果有人试图用一个错误的community查询agent,将会触发该trap egpNeighborLoss (5) 表示EGP的邻居状态变为down enterpriseSpecific (6) 企业自定义的trap,SNMP的厂商和用户可以在私有的enterprise分支下定义其自身的trap,为了确保可以正确处理这类trap,NMS必须能够识别响应的trap编号 SNMPv1的trap,以上可以看到192.168.2.111的16端口down掉了 2.6.7 SNMP Notification 为了对SNMPv1 trap进行标准化(SNMPv1的trap的PDU格式和get/set不同),SNMPv2定义了NOTIFICAION-TYPE,它的PDU格式和get/set一样,RFC2863中linkDown的notification格式如下: linkDown NOTIFICATION-TYPE OBJECTS { ifIndex, ifAdminStatus, ifOperStatus } STATUS current DESCRIPTION "A linkDown trap sign
本文档为【SNMP协议基础】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_154174
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:35
分类:互联网
上传时间:2013-04-12
浏览量:44