简单网络管理协议SNMP
一、概述
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。为不同种类的设备、不同厂家生产的设备、不同型号的设备定义一个统一的接口和协议,使得管理员可以使用统一的外观对这些需要管理的网络设备进行管理。SNMP使用的管理信息结构(SMI)和管理信息库(MIB)提供了一组监控网络元素的最小的,但功能强大的工具。它的结构十分简单,能够简单快速地实现。因而SNMP在网络管理领域得到了广泛的接受,已经成为事实上的国际标准。
SNMP目前包括三个版本:SNMPv1、SNMPv2、SNMPv3。
二、网络管理协议结构
SNMP使用UDP作为传输层协议. UDP只提供无连接的服务, 因此SNMP不需要在代理和管理者之间保持联接. SNMP实体发送消息后不需等待应答, 可以继续发送其它消息或进行其它动作. SNMP并不要求消息的可靠性, 消息可能被底层的传输服务丢失,因此可靠性的实现应由SNMP发送实体根据消息的重要性自行决定。SNMP的网络管理由三部分组成,即管理信息库MIB、管理信息结构SMI以及SNMP本身。
三、管理信息结构SMI
所谓管理信息结构(Manage Information Structure)SMI,就是使用ASN.1来描述管理对象的方法和组织形式。
四、管理信息库MIB
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图是管理信息库的一部分,它又称为对象命名(object naming tree)。
root
iso(1)joint-iso-ccitt(2)
dod(6)
Internet SMI
五、SNMP的五种协议数据单元
●get-request操作:从代理进程处提取一个或多个参数值
●get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值
●set-request操作:设置代理进程的一个或多个参数值
●get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,
它是前面三种操作的响应操作。
●trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
六、SNMP TRAP的报文格式
SNMP报文格式
TRAP PDU
1.enterprise:产生该Trap的网络管理子系统,基于SysObjectID。如果是企业
自定义的Trap,此值为企业在enterprise子树下的注册子树。
2.agent-addr:产生Trap的被管理设备的网络地址(IP地址)。
3.generictrap:正数类型。用于标识其他Trap的类型。意义的解释如下:
●coldStart Trap(0):设备冷启动时发送的Trap,表明系统经过初始化,
代理的配置或协议实体的配置有可能被改变。
●warmStart Trap(1):热启动,代理的配置或协议实体的配置都没有被改
变。
●linkDown Trap(2):表明系统探测到本系统中有一个通信链路失败。
●linkup Trap(3):表明系统探测到本系统中有一个通信链路恢复。
●authenticationFailure Trap(4):授权失败,表明一个代理遇到一个授权失
败的SNMP消息。实现SNMP协议必须实现该Trap的功能,但同时也
必须实现选择组织该Trap发送的机制。
●egpNeighborLoss Trap(5):EGP邻居丢失。EGP是外部网关协议,通过
建立邻居关系维持通信。
●enterpriseSpecific Trap(6):代理发现一个非上述事件的敏感事件,即扩
展的Trap。该Trap具体的意义由specific-trap码解释。
4.specifictrap:和generictrap一起标识扩展的Trap。
5.timestamp:时间戳。系统从上次启动到系统产生该Trap的时间。
6.variablebindings:变量绑定。为管理工作站提供更加详细的事件描述信息。
七、TRAP定义语法
IMPORTS
ObjectName
FROM RFC1155-SMI;
TRAP-TYPE MACRO::= BEGIN
TYPE NOTATION::=“ENTERPRISE”value (enterprise OBJECT
IDENTIFIER)
VarPart
DescrPart
ReferPart
V ALUE NOTATION::= “value(V ALUE INTEGER)”
VarPart::=“V ARIABLES”“{”Vartypes“}”| empty
VarTypes::=VarType | VarTypes“,”VarType
VarType::= value(vartype ObjectName)
DescrPart::=“DESCRIPTION”value(description DisplayingString)| empty ReferPart::=“REFERENCE”value(reference DisplayingString)| empty END