关键词:SNMP、MIB、OID、Agent、NMS
摘 要:网络技术飞速发展,网络设备数量越来越多,设备类型也多种多样。如何有效的管理这些设备呢?我们可以通过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 | 协议数据单元 |
如今,网络与人们的生活和工作联系越来越紧密,但随着网络的普及引发了两大问题:
l 网络规模逐渐增大,网络设备的数量成级数增加,网络管理员很难及时监控所有设备的状态、发现并修复故障。
l 网络设备可能来自不同的厂商,如果每个厂商都提供一套独立的管理接口(比如命令行),将使网络管理变得越来越复杂。
为解决以上两大问题,一套覆盖服务、协议和管理信息库的标准(SNMP)孕育而生。
SNMP是管理进程(NMS)和代理进程(Agent)之间的通信协议。它规定了在网络环境中对设备进行监视和管理的标准化管理框架、通信的公共语言、相应的安全和访问控制机制。网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。
SNMP具有以下技术优点:
l 基于TCP/IP互联网的标准协议,传输层协议一般采用UDP。
l 自动化网络管理。网络管理员可以利用SNMP平台在网络上的节点检索信息、修改信息、发现故障、完成故障诊断、进行容量规划和生成报告。
l 屏蔽不同设备的物理差异,实现对不同厂商产品的自动化管理。SNMP只提供最基本的功能集,使得管理任务与被管设备的物理特性和实际网络类型相对独立,从而实现对不同厂商设备的管理。
l 简单的请求—应答方式和主动通告方式相结合,并有超时和重传机制。
l 报文种类少,报文格式简单,方便解析,易于实现。
l SNMPv3版本提供了认证和加密安全机制,以及基于用户和视图的访问控制功能,增强了安全性。
SNMP网络架构由三部分组成:NMS、Agent和MIB。
NMS是网络中的管理者,是一个利用SNMP协议对网络设备进行管理和监视的系统。NMS既可以指一台专门用来进行网络管理的服务器,也可以指某个设备中执行管理功能的一个应用程序。
NMS可以向Agent发出请求,查询或修改一个或多个具体的参数值。同时,NMS可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态。
Agent是网络设备中的一个应用模块,用于维护被管理设备的信息数据并响应NMS的请求,把管理数据汇报给发送请求的NMS。
Agent接收到NMS的请求信息后,完成查询或修改操作,并把操作结果发送给NMS,完成响应。同时,当设备发生故障或者其他事件的时候,Agent会主动发送Trap信息给NMS,通知设备当前的状态变化。
任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIB。MIB也可以看作是NMS和Agent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目的。NMS、Agent和MIB之间的关系如图1所示。
图1 NMS、Agent和MIB关系图
MIB视图是MIB的子集合,配置Agent时用户可以将团体名/用户名与MIB视图绑定,从而限制NMS能够访问的MIB对象。用户可以配置MIB视图内的对象为excluded或included。excluded表示当前视图不包括该MIB子树的所有节点;included表示当前视图包括该MIB子树的所有节点。
MIB是以树状结构进行存储的。树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就称为OID)。如图2所示。管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一标识,这串数字就是system的OID。
子树可以用该子树根节点的OID来标识。如以private为根节点的子树的OID为private的OID——{1.3.6.1.4}。
图2 MIB树结构示意图
子树掩码可以和子树OID共同来确定一个视图的范围。子树掩码用十六进制格式表示,转化成二进制后,每个比特位对应OID中的一个小节,其中,
l 1表示精确匹配,即要访问的节点OID与MIB对象子树OID对应小节的值必须相等;
l 0表示通配,即要访问的节点OID与MIB对象子树OID对应小节的值可以不相等。
例如:子树掩码为0xDB(二进制格式为11011011),子树OID为1.3.6.1.6.1.2.1,则对应关系如图3所示,所确定的视图就包括子树OID为1.3.*.1.6.*.2.1(*表示可为任意数字)的子树下的所有节点。
图3 子树OID与子树掩码对应关系图
& 说明:
l 若子树掩码的bit数目大于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中多出的bit位将被忽略
l 若子树掩码的bit数目小于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中不足的bit位将自动设置为1;
l 如果没有指定子树掩码,则使用缺省子树掩码(全1)。
SNMP主要有SNMPv1、SNMPV2c、SNMPv3几种最常用的版本。
SNMPv1是SNMP协议的最初版本,提供最小限度的网络管理功能。SNMPv1的SMI和MIB都比较简单,且存在较多安全缺陷。
SNMPv1采用团体名认证。团体名的作用类似于密码,用来限制NMS对Agent的访问。如果SNMP报文携带的团体名没有得到NMS/Agent的认可,该报文将被丢弃。
SNMPv2c也采用团体名认证。在兼容SNMPv1的同时又扩充了SNMPv1的功能:它提供了更多的操作类型(GetBulk操作等);支持更多的数据类型(Counter32等);提供了更丰富的错误代码,能够更细致地区分错误。
SNMPv3主要在安全性方面进行了增强,它采用了USM和VACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。
USM引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMS和Agent之间传输的报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为NMS和Agent之间的通信提供更高的安全性。
VACM技术定义了组、安全等级、上下文、MIB视图、访问策略五个元素,这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。在同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义的对象。
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端口发送报文。由于收发采用了不同的端口号,所以一台设备可以同时作为Agent和NMS。
根据SNMP的不同版本和不同操作,定义了以下报文格式:
图4 SNMPv1报文格式
从图4可以看出,SNMP消息主要由Version、Community、SNMP PDU几部分构成。其中,报文中的主要字段定义如下:
l Version:SNMP版本。
l Community:团体名,用于Agent与NMS之间的认证。团体名有可读和可写两种,如果是执行Get、GetNext操作,则采用可读团体名进行认证;如果是执行Set操作,则采用可写团体名进行认证。
l Request ID:用于匹配请求和响应,SNMP给每个请求分配全局唯一的ID。
l Error status:用于表示在处理请求时出现的状况,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。
l Error index:差错索引。当出现异常情况时,提供变量绑定列表(Variable bindings)中导致异常的变量的信息。
l Variable bindings:变量绑定列表,由变量名和变量值对组成。
l enterprise:Trap源(生成Trap信息的设备)的类型。
l Agent addr:Trap源的地址。
l Generic trap:通用Trap类型,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。
l Specific trap:企业私有Trap信息。
l Time stamp:上次重新初始化网络实体和产生Trap之间所持续的时间,即sysUpTime对象的取值。
图5 SNMPv2c报文格式
比较SNMPv1而言,SNMPv2c新增了GetBulk操作报文。GetBulk操作所对应的基本操作类型是GetNext操作,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据。
SNMPv2c修改了Trap报文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,并将sysUpTime和snmpTrapOID作为Variable bindings中的变量来构造报文。
SNMPv3修改了消息的格式,但是PDU部分的格式同SNMPv2c是保持一致的。图6只列出消息格式。
图6 SNMPv3消息格式
其中,整个SNMPv3消息可以使用认证机制,并对EngineID、ContextName、PDU消息体部分进行加密。RequestID、MaxSize、Flags、SecurityModel、SecurityParameters构成SNMPv3消息头。
报文中的主要字段定义如下:
l RequestID:请求报文的序列号。
l MaxSize:消息发送者所能够容纳的消息最大字节,同时也表明了发送者能够接收到的最大字节数。
l Flags:消息标识位,占一个字节,只有最低的三个比特位有效,比如0x0表示不认证不加密,0x1表示认证不加密,0x3表示认证加密,0x4表示发送report PDU标志等。
l SecurityModel:消息的安全模型值,取值为0~3。0表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2c安全模型,3表示采用SNMPv3安全模型。
l ContextEngineID:唯一识别一个SNMP实体。对于接收消息,该字段确定消息该如何处理;对于发送消息,该字段在发送一个消息请求时由应用提供。
l ContextName:唯一识别在相关联的上下文引擎范围内部特定的上下文。
SecurityParameters又包括以下主要字段:
l AuthoritativeEngineID:消息交换中权威SNMP的snmpEngineID,用于SNMP实体的识别、认证和加密。该取值在Trap、Response、Report中是源端的snmpEngineID,对Get、GetNext、GetBulk、Set中是目的端的snmpEngineID。
l AuthoritativeEngineBoots:消息交换中权威SNMP的snmpEngineBoots。表示从初次配置时开始,SNMP引擎已经初始化或重新初始化的次数。
l AuthoritativeEngineTime:消息交换中权威SNMP的snmpEngineTime,用于时间窗判断。
l UserName:用户名,消息代表其正在交换。NMS和Agent配置的用户名必须保持一致。
l AuthenticationParameters:认证参数,认证运算时所需的密钥。如果没有使用认证则为空。
l PrivacyParameters:加密参数,加密运算时所用到的参数,比如DES CBC算法中形成初值IV所用到的取值。如果没有使用加密则为空。
SNMPv1/SNMPv2c实现机制基本一致,SNMPv2c丰富了错误码,新增了GetBulk操作。下面以在SNMPv1版本环境执行Get、GetNext和Set操作为例来描述SNMPv1/SNMPv2c的实现机制。
NMS想要获取被管理设备MIB节点sysName的值(sysName对象在允许访问视图内),使用public为可读团体名,过程如下:
(1) NMS给Agent发送Get请求,请求报文主要字段将被设置为:Version字段的值为1,Community字段的值为public,PDU里Variable bindings中Name1字段的值为sysName.0。
(2) Agent给NMS发送Get响应,说明是否获取成功。如果成功,则Response PDU里Variable bindings中Value1字段的值为设备的名字(比如Agent010-H3C);如果获取失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。
图7 Get操作
NMS想要获取被管理设备MIB节点sysName的下一个节点sysLocation的值(sysName和sysLocation对象都在允许访问视图内),使用public为可读团体名,过程如下:
(1) NMS给Agent发送GetNext请求,请求报文主要字段将被设置为:Version字段的值为1,Community字段的值为public,PDU里Variable bindings中Name1字段的值为sysName.0。
(2) Agent给NMS发送GetNext响应。如果成功,则Response PDU里Variable bindings中Name1字段值为sysName.0的下一个节点sysLocation.0, Value1字段的值为(比如Beijing China);如果获取失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。
图8 GetNext操作
NMS想要设置被管理设备MIB节点sysName的值为Device01,使用private为可写团体名,过程如下:
(1) NMS给Agent发送Set请求,请求报文主要字段将被设置为:Version字段的值为1,Community字段的值为private,PDU里Variable bindings中Name1字段的值为sysName.0,Value1字段的值填为Device01。
(2) Agent给NMS发送Set响应,说明是否设置成功。如果成功,则Response PDU里Variable bindings中Value1字段的值填为设备的新名字(比如Device01);如果设置失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。
图9 Set操作
当设备发生某些异常需要通知NMS时,Agent会主动发出Trap报文。例如:设备某端口网线被拔出,Agent发送linkDown的Trap消息给NMS。Version字段的值为1,Community字段的值为public,PDU中enterprise字段为sysObjectID.0的取值(比如为enterprises.25506),Generic trap字段值为linkDown,Variable bindings字段携带接口相关信息。
图10 Trap操作
SNMPv3各操作的实现机制同SNMPv1和SNMPv2c基本一样,其主要区别在于SNMPv3新增加了认证和加密、解密的处理。下面以SNMPv3使用认证和加密方式执行get操作为例来描述其实现机制,过程如下:
(1) NMS首先发送不带任何认证和加密参数的Get请求,Flags字段设置为0x4,以获取contextEngineID、contextName、AuthoritativeEngineID、AuthoritativeEngineBoots、AuthoritativeEngineTime等相关参数的值。
(2) Agent解析消息,发送report报文,并携带上述相关参数的值。
(3) NMS再次给Agent发送Get请求,请求报文主要字段将被设置为:Version字段的值为3,将(2)获取到的参数值填入相应字段,PDU里Variable bindings中Name1字段的值为sysName.0,并且根据配置的认证算法计算出AuthenticationParameters,使用配置的加密算法计算出PrivacyParameters,并使用配置的加密算法对PDU数据进行加密。
(4) Agent首先对消息进行认证,认证通过后对PDU报文进行解密。解密成功后,则获取sysName.0对象的值,并将Response PDU里Variable bindings中Value1字段的值填为设备的名字(比如Agent010)。如果认证、解密失败或者获取参数值失败,则在Error status字段填上出错的原因,在Error index填上出错的位置信息。最后对PDU进行加密,设置contextEngineID、contextName、AuthoritativeEngineID、AuthoritativeEngineBoots、AuthoritativeEngineTime、AuthenticationParameters、PrivacyParameters等参数,发送响应报文。
图11 SNMPv3 Get操作
H3C设备支持SNMPv1、SNMPv2c、SNMPv3三个版本,为了兼容SNMPv3,SNMPv1和SNMPv2c版本也可以配置组、用户和视图,这时,只需要将NMS侧的团体名参数设置为设备上配置的用户名即可。用户可以同时使能多个版本,但需要和NMS侧的版本一致。
图12 SNMP典型组网图
网络中的设备生产厂商不同,设备型号也不一致,需要对网络和设备的运行进行监控和管理。
l RFC1155
l RFC2578
l RFC2579
l RFC3411
l RFC3412
l RFC3414
l RFC3415
l “系统分册”中的“SNMP配置”
l “系统分册”中的“SNMP命令”
Copyright ©2008 杭州华三通信技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
本文档中的信息可能变动,恕不另行通知。