摘要
本文描述了 SNMP协议,MIB库和它们在Cisco 路由器上的实现以及Cisco路由器对SNMPv3和SNMP over IPv6的支持状况。
了解SNMP管理框架
SNMP(Simple Network Management Protocol,简单 网络管理协议)是一个应用层协议,提供了SNMP管理者和SNMP代理间报文格式的消息通信。它规定了在网络环境中对设备进行监视和管理的标准化管理框架,通信的公共语言和相对应的安全控制机制。
SNMP管理框架包含有四个组成部分:
SNMP管理者;
SNMP代理;
一个用于在SNMP实体间传输管理信息的管理协议;
MIB库(Management Information Base,管理信息库)。
SNMP管理者是一个利用SNMP协议对网络节点进行控制和监视的系统。其中网络环境中最常见的SNMP管理者被称为网络管理系统(NMS,Network Management System)。网络管理系统既可以指一台专门用来进行网络管理的 服务器,也可以指某个网络设备中执行管理功能的一个应用程序。现在市场上有众多软硬件厂商提供有支持SNMP协议的网络管理系统,如Cisco公司的CiscoWorks系列网络管理软件产品。
SNMP代理是被管理设备中的一个软件模块,用来维护被管理设备的管理信息数据并可在需要时把管理数据汇报给一个SNMP管理系统。SNMP代理和相关的MIB库存在于网络设备中(如Cisco路由器, 交换机,接入服务器等等)。
MIB库是一个保存网络管理信息的虚拟数据存储空间,由多组被管理对象组成。在设备MIB库中有由多个MIB模块定义的多组各自相关联的对象。每个MIB模块都是利用标准的SNMP MIB模块语言撰写的,具体遵循的标准定义在IETF(Internet Engineering Task Force,一个 国际标准化组织) STD58,RFC2579和RFC2580文档中(请参见本文“MIB和RFC”一节了解STD文档和RFC文档的解释)。需要注意的是,每一个单独的MIB模块有时也会被称为一个MIB,如设备接口组MIB(IF-MIB)就是设备MIB库中的一个MIB模块。
SNMP代理中保存有MIB对象变量,变量的数值可以被SNMP管理者通过Get或Set操作进行读取和修改。一个SNMP管理者可以从SNMP代理中读取一个变量的数值或把一个数值存储到SNMP代理的一个变量中。SNMP代理从代表设备参数和网络运行数据的MIB库中采集数据,且可以对SNMP管理者的Get和Set操作进行应答。
下图勾画出了SNMP管理者和SNMP代理间的通信关系。一个SNMP管理者可以向SNMP代理发送请求,读取(Get)或设置(Set)一个或多个MIB变量数值。SNMP代理可以应答这些请求。除了这种交互式通信方式,SNMP代理还可以主动向SNMP管理者发送通知(Trap或Inform Request)以提示管理者一个设备或网络状态。
图一
SNMP通知
SNMP协议的一个重要特性是SNMP代理具有产生通知的能力。通知不需要SNMP管理者请求就会主动发送,发送采用异步方式,形式可分为Trap和Inform Request(简称Inform)两种。Trap是发送给SNMP管理者的通知网络状况的警告消息,而Inform是需要SNMP管理者确认接收的Trap。SNMP通知可以用于指示网络中出现的不正确用户授权,重启,连接关闭,设备通信中断或其它异常事件。
与Inform相比较,Trap通知方式为不可靠传输,因为接收者在收到一条Trap通知后无需回复任何确认信息,发送者无法知道Trap通知是否已经被正确接收。与此相对应,当SNMP管理者收到一条Inform通知后它需要向发送者回复一条确认信息,使用的是SNMP应答数据包( PDU)。如果SNMP管理者没有接收到Inform通知,它将不会发送任何应答,所以当发送者无法接受到期望的应答时,它将再次发送一条Inform通知给SNMP管理者。这种方式保证了Inform通知方式可以较有保证地把通知发送到期望的目的地。
图二
图三
然而在多数情况下,Trap通知方式被较多采用,因为Inform方式将会耗用更多的网络和设备资源。与Trap通知方式不同的是,被管理设备不能在发送后立即把一条Inform通知丢弃,它需要把通知信息保存在系统内存中直到收到相应的确认应答或设备规定的计时器超时。由此可见一条Trap通知只会被发送一次,而Inform通知可能会被重复发送多次。这种重复发送将会增加网络流量,造成网络额外开销的上升。
管理员在选择Trap或Inform通知形式时需要根据可靠性要求和系统资源状况统筹考虑:如果SNMP管理者需要确保收到每条通知,应该采用Inform通知方式;如果更关心减少网络流量和网络设备的资源消耗且并不需要每条通知都需要接收,则应该采用Trap通知方式。
MIB和RFC
MIB模块通常在提交给IETF的RFC(Requests for Comments,征求意见)文档中定义。由 互联网团体中个人或组织撰写的RFC文档主要目的是起草一个推荐的互联网标准(Internet Standard)。在确定每个RFC文档地位前,文档会以互联网草案(Internet Draft,I-D)形式先行发表。如果RFC文档最终被批准为推荐标准,则此文档将被标注为标准(STD)文档。个人可以通过访问IETF组织的官方网站[url]http://www.ietf.org[/url] 来了解其标准制定流程和当前的工作进度,也可以在网站中查寻所有RFC文档,I-D文档和STD文档的全文。
Cisco公司在其路由器SNMP协议实现中支持定义在STD17/RFC1213文档中的MIB-II变量组和定义在RFC1215文档中的SNMP Trap功能。
除了支持标准MIB模块外,Cisco公司还在其路由器中提供了私有MIB扩展。Cisco企业私有MIB(Enterprise MIB)模块符合相关RFC文档中定义的规范。用户可以在下列网址中查找到所有Cisco设备支持的私有MIB模块的定义和每种Cisco设备平台支持的MIB清单。
[url]http://www.cisco.com/public/sw-center/netmgmt/cmtk/mibs.shtml[/url]
SNMP版本
Cisco IOS支持SNMP协议的下列版本:
SNMPv1 ?C 简单网络管理协议:一个完全的互联网标准,定义在STD15/RFC1157(RFC1157文档替代了早期的RFC1098和RFC1067文档)和STD16/RFC1155,RFC1212文档中。安全机制采用基于团体字符串(Community String)认证方式。
SNMPv2c ?C 基于团体字符串认证管理框架的简单网络管理协议版本2。SNMPv2c(c代表Community)是一个互联网实验标准,具体技术规范定义在RFC1901,RFC1905和RFC1906文档。SNMPv2c在SNMPv2p(SNMPv2 Classic)基础上定义了协议操作和数据类型的更新,安全机制延续了SNMPv1的基于团体字符串认证方式。
SNMPv3 ?C 简单网络管理协议版本3,2002年3月被IESG(Internet Engineering Steering Group)批准为完全的互联网标准。SNMPv3是一个具有互操作性的标准协议,核心规范定义在STD62/RFC3411到RFC3418文档中。SNMPv3提供了设备安全访问机制,是由认证和网络传输中数据包加密的组合方式实现的。
SNMPv3提供的安全特性包括:
报文完整性 确保数据包在传输过程中没有被篡改。
认证 确定报文是由正确信息源发送来的。
加密 对报文内容进行加密,防止其被未经授权的读取。
SNMPv1和SNMPv2c都利用了基于“团体(Community)”形式的安全认证机制。能够访问SNMP代理MIB数据的管理者“团体”通过一个 IP地址访问控制列表和口令进行定义。
SNMPv2c还增加了对大批量数据读取机制的支持和向管理工作站更加详细的错误消息汇报机制。支持对大批量数据的读取机制能够用来对整个MIB数据表格和大量的信息进行快速读取,减少请求/应答的往复数量。SNMPv2c增强的错误处理机制包括扩展的错误代码,用于区别不同的错误状况。错误返回代码现在将包括错误类型。
SNMPv3重点强调增强协议的安全认证/加密,授权/访问控制以及远程配置管理等功能,而在其它方面沿用了部分SNMPv2原有的技术规范。
SNMPv3提供了一个安全模型。这个安全模型中可以为用户/用户组定义不同的安全认证策略;而安全级别是指SNMPv3安全模型中被允许的安全等级。安全模型和安全等级的组合将会决定在处理一个SNMP数据包时采用的安全机制。下表列出了在SNMPv3中可以定义的安全级别。
SNMP安全模型和级别
如果想了解SNMPv3的额外信息,可以参阅RFC3410文档《Introduction and Applicability Statements for Internet Standard Management Framework》
管理员需要配置SNMP代理使用管理工作站支持的SNMP版本。一个SNMP代理可以和多个SNMP管理者同时通信;因此你可以配置Cisco IOS软件与一个管理工作站通过SNMPv1通信,与第二个管理工作站通过SNMPv2c通信,同时与第三个管理工作站通过SNMPv3通信。
注:Cisco公司从IOS 11.2版本后已经停止支持SNMPv2p(即SNMPv2 Classic)协议,而代之以支持采用团体字符串认证方式的SNMPv2c协议。
Cisco设备的SNMP配置流程
在Cisco设备中没有单独的命令启动设备的SNMP代理,管理员配置的第一条snmp-server配置命令将自动启动设备中的SNMP代理。
下面列出了在Cisco设备上配置SNMP参数的任务描述,每条任务都被标注了是必选项还是可选项。
创建或修改对SNMP Community的访问控制(必选);
创建或修改一个SNMP View的纪录(可选);
指定一个SNMP-Server的引擎名称(ID)(可选);
指定一个SNMP-Server的组名(可选);
配置SNMP-Server Host(必选);
配置SNMP-Server User (可选);
激活SNMP代理Shutdown机制(可选);
设置Contact,Location和SNMP代理的Serial Name(可选);
定义SNMP代理数据包大小的最大值(可选);
限制利用SNMP使用的TFTP服务器数量(可选);
监视SNMP的工作状态(可选);
禁止SNMP代理(可选);
配置SNMP通知(必选);
配置路由器为SNMP管理者(可选)。
Cisco IOS与SNMPv3
从IOS 12.0.(3)T版本起Cisco公司的路由器设备开始全面支持完整的SNMPv3协议,现在所有能运行任何基于IOS 12.0(3)T的后续IOS版本的Cisco设备也都支持SNMPv3协议。
Cisco IOS与SNMP over IPv6和IPv6 MIB
除支持利用 IPv4传输协议进行SNMP管理信息的传送外,Cisco设备从12.0(27)S开始也支持利用IPv6传输协议进行SNMP管理信息的传送,即SNMP over IPv6。主要特性包括:
支持通过IPv6协议接收和处理SNMP Get/Set请求以及通过IPv6协议发送应答。
具有发送SNMP通知给IPv6主机的能力。
支持利用IPv6协议的SNMP Proxy转发功能,以及更新相关MIB,使其支持IPv6地址。
通过对SNMP over IPv6的支持,实现了Cisco路由器可以在一个Native IPv6网络中由管理服务器通过SNMP协议对其进行监视和管理。
同时为了进一步增强对设备IPv6传输协议相关的运行状态进行管理,Cisco IOS操作系统还分别从12.0(22)S、12.2(15)T和12.2(14)S版本开始支持标准的IPv6 MIB,包括CISCO-IETF-IP-FORWARD-MIB和CISCO-IETF-IP-MIB。这些IPv6 MIB可以供SNMP管理服务器查询Cisco路由器设备IPv6协议相关的管理信息。