SNMP技术白皮书

关键词:SNMPMIBOIDAgentNMS

  要:网络技术飞速发展,网络设备数量越来越多,设备类型也多种多样。如何有效的管理这些设备呢?我们可以通过SNMP功能来实现这一目标。本文将重点介绍SNMP的基本概念、工作原理以及主要应用。

缩略语:

缩略语

英文全名

中文解释

MIB

Management Information Base

管理信息库

NMS

Network Management Station

网络管理站

OID

Object Identifier

对象标识符

SNMP

Simple Network Management Protocol

简单网络管理协议

SMI

Structure of Management Information

管理信息结构

USM

User-based Security Model

基于用户的安全模型

VACM

View-based Access Control Model

基于视图的访问控制模型

PDU

protocol data unit

协议数据单元

 



概述

1.1  产生背景

如今,网络与人们的生活和工作联系越来越紧密,但随着网络的普及引发了两大问题:

l              网络规模逐渐增大,网络设备的数量成级数增加,网络管理员很难及时监控所有设备的状态、发现并修复故障。

l              网络设备可能来自不同的厂商,如果每个厂商都提供一套独立的管理接口(比如命令行),将使网络管理变得越来越复杂。

为解决以上两大问题,一套覆盖服务、协议和管理信息库的标准(SNMP)孕育而生。

1.2  技术优点

SNMP是管理进程(NMS)和代理进程(Agent)之间的通信协议。它规定了在网络环境中对设备进行监视和管理的标准化管理框架、通信的公共语言、相应的安全和访问控制机制。网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。

SNMP具有以下技术优点:

l              基于TCP/IP互联网的标准协议,传输层协议一般采用UDP

l              自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告。

l              屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本的功能集,使得管理任务与被管设备的物理特性和实际网络类型相对独立,从而实现对不同厂商设备的管理。

l              简单的请求—应答方式和主动通告方式相结合,并有超时和重传机制。

l              报文种类少,报文格式简单,方便解析,易于实现。

l              SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性。

特性介绍

2.1  SNMP网络架构

SNMP网络架构由三部分组成:NMSAgentMIB

2.1.1  NMS简介

NMS是网络中的管理者,是一个利用SNMP协议对网络设备进行管理和监视的系统。NMS既可以指一台专门用来进行网络管理的服务器,也可以指某个设备中执行管理功能的一个应用程序。

NMS可以向Agent发出请求,查询或修改一个或多个具体的参数值。同时,NMS可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态。

2.1.2  Agent简介

Agent是网络设备中的一个应用模块,用于维护被管理设备的信息数据并响应NMS的请求,把管理数据汇报给发送请求的NMS

Agent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。

2.1.3  MIB简介

1. MIB

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIBMIB也可以看作是NMSAgent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的。NMSAgentMIB之间的关系如1所示。

图1 NMSAgentMIB关系图

2. MIB视图

MIB视图是MIB的子集合,配置Agent时用户可以将团体名/用户名与MIB视图绑定,从而限制NMS能够访问的MIB对象。用户可以配置MIB视图内的对象为excludedincludedexcluded表示当前视图不包括该MIB子树的所有节点;included表示当前视图包括该MIB子树的所有节点。

3. OID和子树

MIB是以树状结构进行存储的。树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就称为OID)。如2所示。管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一标识,这串数字就是systemOID

子树可以用该子树根节点的OID来标识。如以private为根节点的子树的OIDprivateOID——{1.3.6.1.4}

图2 MIB树结构示意图

4. 子树掩码

子树掩码可以和子树OID共同来确定一个视图的范围。子树掩码用十六进制格式表示,转化成二进制后,每个比特位对应OID中的一个小节,其中,

l              1表示精确匹配,即要访问的节点OIDMIB对象子树OID对应小节的值必须相等;

l              0表示通配,即要访问的节点OIDMIB对象子树OID对应小节的值可以不相等。

例如:子树掩码为0xDB(二进制格式为11011011),子树OID1.3.6.1.6.1.2.1,则对应关系如3所示,所确定的视图就包括子树OID1.3.*.1.6.*.2.1*表示可为任意数字)的子树下的所有节点。

图3 子树OID与子树掩码对应关系图

&  说明:

l      若子树掩码的bit数目大于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中多出的bit位将被忽略

l      若子树掩码的bit数目小于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中不足的bit位将自动设置为1

l      如果没有指定子树掩码,则使用缺省子树掩码(全1)。

 

2.2  SNMP版本

SNMP主要有SNMPv1SNMPV2cSNMPv3几种最常用的版本。

2.2.1  SNMPv1

SNMPv1SNMP协议的最初版本,提供最小限度的网络管理功能。SNMPv1SMIMIB都比较简单,且存在较多安全缺陷。

SNMPv1采用团体名认证。团体名的作用类似于密码,用来限制NMSAgent的访问。如果SNMP报文携带的团体名没有得到NMS/Agent的认可,该报文将被丢弃。

2.2.2  SNMPv2c

SNMPv2c也采用团体名认证。在兼容SNMPv1的同时又扩充了SNMPv1的功能:它提供了更多的操作类型(GetBulk操作等);支持更多的数据类型(Counter32等);提供了更丰富的错误代码,能够更细致地区分错误。

2.2.3  SNMPv3

SNMPv3主要在安全性方面进行了增强,它采用了USMVACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。

1. USM(基于用户的安全模型)

USM引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMSAgent之间传输的报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为NMSAgent之间的通信提供更高的安全性。

2. VACM(基于视图的访问控制模型)

VACM技术定义了组、安全等级、上下文、MIB视图、访问策略五个元素,这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。在同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义的对象。

2.3  SNMP操作

SNMP支持多种操作,主要为以下几种基本操作:

l              Get操作:NMS使用该操作从Agent获取一个或多个参数值。

l              GetNext操作:NMS使用该操作从Agent获取一个或多个参数的下一个参数值。

l              Set操作:NMS使用该操作设置Agent一个或多个参数值。

l              Response操作:Agent返回一个或多个参数值。该操作是前面三种操作的响应。

l              Trap操作:Agent主动发出的操作,通知NMS有某些事情发生。

执行前四种操作时设备使用UDP协议采用161端口发送报文,执行Trap操作时设备使用UDP协议采用162端口发送报文。由于收发采用了不同的端口号,所以一台设备可以同时作为AgentNMS

2.4  SNMP报文

根据SNMP的不同版本和不同操作,定义了以下报文格式:

2.4.1  SNMPv1报文

图4 SNMPv1报文格式

从图4可以看出,SNMP消息主要由VersionCommunitySNMP PDU几部分构成。其中,报文中的主要字段定义如下:

l              VersionSNMP版本。

l              Community:团体名,用于AgentNMS之间的认证。团体名有可读和可写两种,如果是执行GetGetNext操作,则采用可读团体名进行认证;如果是执行Set操作,则采用可写团体名进行认证。

l              Request ID:用于匹配请求和响应,SNMP给每个请求分配全局唯一的ID

l              Error status:用于表示在处理请求时出现的状况,包括noErrortooBignoSuchNamebadValuereadOnlygenErr

l              Error index:差错索引。当出现异常情况时,提供变量绑定列表(Variable bindings)中导致异常的变量的信息。

l              Variable bindings:变量绑定列表,由变量名和变量值对组成。

l              enterpriseTrap源(生成Trap信息的设备)的类型。

l              Agent addrTrap源的地址。

l              Generic trap:通用Trap类型,包括coldStartwarmStartlinkDownlinkUpauthenticationFailureegpNeighborLossenterpriseSpecific

l              Specific trap:企业私有Trap信息。

l              Time stamp:上次重新初始化网络实体和产生Trap之间所持续的时间,即sysUpTime对象的取值。

2.4.2  SNMPv2c报文

图5 SNMPv2c报文格式

比较SNMPv1而言,SNMPv2c新增了GetBulk操作报文。GetBulk操作所对应的基本操作类型是GetNext操作,通过对Non repeatersMax repetitions参数的设定,高效率地从Agent获取大量管理对象数据。

SNMPv2c修改了Trap报文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,并将sysUpTimesnmpTrapOID作为Variable bindings中的变量来构造报文。

2.4.3  SNMPv3报文

SNMPv3修改了消息的格式,但是PDU部分的格式同SNMPv2c是保持一致的。6只列出消息格式。

图6 SNMPv3消息格式

其中,整个SNMPv3消息可以使用认证机制,并对EngineIDContextNamePDU消息体部分进行加密。RequestIDMaxSizeFlagsSecurityModelSecurityParameters构成SNMPv3消息头。

报文中的主要字段定义如下:

l              RequestID:请求报文的序列号。

l              MaxSize:消息发送者所能够容纳的消息最大字节,同时也表明了发送者能够接收到的最大字节数。

l              Flags:消息标识位,占一个字节,只有最低的三个比特位有效,比如0x0表示不认证不加密,0x1表示认证不加密,0x3表示认证加密,0x4表示发送report PDU标志等。

l              SecurityModel:消息的安全模型值,取值为030表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2c安全模型,3表示采用SNMPv3安全模型。

l              ContextEngineID:唯一识别一个SNMP实体。对于接收消息,该字段确定消息该如何处理;对于发送消息,该字段在发送一个消息请求时由应用提供。

l              ContextName:唯一识别在相关联的上下文引擎范围内部特定的上下文。

SecurityParameters又包括以下主要字段:

l              AuthoritativeEngineID:消息交换中权威SNMPsnmpEngineID,用于SNMP实体的识别、认证和加密。该取值在TrapResponseReport中是源端的snmpEngineID,对GetGetNextGetBulkSet中是目的端的snmpEngineID

l              AuthoritativeEngineBoots:消息交换中权威SNMPsnmpEngineBoots。表示从初次配置时开始,SNMP引擎已经初始化或重新初始化的次数。

l              AuthoritativeEngineTime:消息交换中权威SNMPsnmpEngineTime,用于时间窗判断。

l              UserName:用户名,消息代表其正在交换。NMSAgent配置的用户名必须保持一致。

l              AuthenticationParameters:认证参数,认证运算时所需的密钥。如果没有使用认证则为空。

l              PrivacyParameters:加密参数,加密运算时所用到的参数,比如DES CBC算法中形成初值IV所用到的取值。如果没有使用加密则为空。

2.5  SNMP协议原理

2.5.1  SNMPv1SNMPv2c实现机制

SNMPv1/SNMPv2c实现机制基本一致,SNMPv2c丰富了错误码,新增了GetBulk操作。下面以在SNMPv1版本环境执行GetGetNextSet操作为例来描述SNMPv1/SNMPv2c的实现机制。

1. Get操作

NMS想要获取被管理设备MIB节点sysName的值(sysName对象在允许访问视图内),使用public为可读团体名,过程如下:

(1)        NMSAgent发送Get请求,请求报文主要字段将被设置为:Version字段的值为1Community字段的值为publicPDUVariable bindingsName1字段的值为sysName.0

(2)        AgentNMS发送Get响应,说明是否获取成功。如果成功,则Response PDUVariable bindingsValue1字段的值为设备的名字(比如Agent010-H3C);如果获取失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。

图7 Get操作

2. GetNext操作

NMS想要获取被管理设备MIB节点sysName的下一个节点sysLocation的值(sysNamesysLocation对象都在允许访问视图内),使用public为可读团体名,过程如下:

(1)        NMSAgent发送GetNext请求,请求报文主要字段将被设置为:Version字段的值为1Community字段的值为publicPDUVariable bindingsName1字段的值为sysName.0

(2)        AgentNMS发送GetNext响应。如果成功,则Response PDUVariable bindingsName1字段值为sysName.0的下一个节点sysLocation.0 Value1字段的值为(比如Beijing China);如果获取失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。

图8 GetNext操作

3. Set操作

NMS想要设置被管理设备MIB节点sysName的值为Device01,使用private为可写团体名,过程如下:

(1)        NMSAgent发送Set请求,请求报文主要字段将被设置为:Version字段的值为1Community字段的值为privatePDUVariable bindingsName1字段的值为sysName.0Value1字段的值填为Device01

(2)        AgentNMS发送Set响应,说明是否设置成功。如果成功,则Response PDUVariable bindingsValue1字段的值填为设备的新名字(比如Device01);如果设置失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。

图9 Set操作

4. Trap操作

当设备发生某些异常需要通知NMS时,Agent会主动发出Trap报文。例如:设备某端口网线被拔出,Agent发送linkDownTrap消息给NMSVersion字段的值为1Community字段的值为publicPDUenterprise字段为sysObjectID.0的取值(比如为enterprises.25506),Generic trap字段值为linkDownVariable bindings字段携带接口相关信息。

图10 Trap操作

2.5.2  SNMPv3实现机制

SNMPv3各操作的实现机制同SNMPv1SNMPv2c基本一样,其主要区别在于SNMPv3新增加了认证和加密、解密的处理。下面以SNMPv3使用认证和加密方式执行get操作为例来描述其实现机制,过程如下:

(1)        NMS首先发送不带任何认证和加密参数的Get请求,Flags字段设置为0x4,以获取contextEngineIDcontextNameAuthoritativeEngineIDAuthoritativeEngineBootsAuthoritativeEngineTime等相关参数的值。

(2)        Agent解析消息,发送report报文,并携带上述相关参数的值。

(3)        NMS再次给Agent发送Get请求,请求报文主要字段将被设置为:Version字段的值为3,将(2)获取到的参数值填入相应字段,PDUVariable bindingsName1字段的值为sysName.0,并且根据配置的认证算法计算出AuthenticationParameters,使用配置的加密算法计算出PrivacyParameters,并使用配置的加密算法对PDU数据进行加密。

(4)        Agent首先对消息进行认证,认证通过后对PDU报文进行解密。解密成功后,则获取sysName.0对象的值,并将Response PDUVariable bindingsValue1字段的值填为设备的名字(比如Agent010)。如果认证、解密失败或者获取参数值失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。最后对PDU进行加密,设置contextEngineIDcontextNameAuthoritativeEngineIDAuthoritativeEngineBootsAuthoritativeEngineTimeAuthenticationParametersPrivacyParameters等参数,发送响应报文。

图11 SNMPv3 Get操作

H3C实现的技术特色

H3C设备支持SNMPv1SNMPv2cSNMPv3三个版本,为了兼容SNMPv3SNMPv1SNMPv2c版本也可以配置组、用户和视图,这时,只需要将NMS侧的团体名参数设置为设备上配置的用户名即可。用户可以同时使能多个版本,但需要和NMS侧的版本一致。

典型组网案例

4.1  组网图

图12 SNMP典型组网图

4.2  组网环境

网络中的设备生产厂商不同,设备型号也不一致,需要对网络和设备的运行进行监控和管理。

附录

5.1  相关协议

l              RFC1155

l              RFC2578

l              RFC2579

l              RFC3411

l              RFC3412

l              RFC3414

l              RFC3415

5.2  参考文献

l              “系统分册”中的“SNMP配置”

l              “系统分册”中的“SNMP命令”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright ©2008 杭州华三通信技术有限公司 版权所有,保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

本文档中的信息可能变动,恕不另行通知。

附件下载

联系我们