SNMP 是专门设计用于在 IP 网络中管理网络节点(服务器、工作站、路由器、交换机及 HUB 等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。
目前 SNMP 有 3 种版本 SNMPV1 、 SNMPV2 、 SNMPV3 。本篇将介绍 SNMPV1 信息。
SNMPV1 是一种简单的请求 / 响应协议。网络管理系统发出一个请求,管理器则返回一个响应。这一行为的实现是通过使用四种协议操作中的其中任一种完成的。这四种操作分别是 GET 、 GETNEXT 、 SET 和 TRAP 。 NMS 通过 GET 操作,从 SNMP 代理处得到一个或更多的对象(实例)值。如果代理处不能提供请求列表中所有的对象(实例)值,它也就不提供任何值。 NMS 使用 GETNEXT 操作请求代理从请求列表或对象列表中取出下一个对象实例值。 NMS 通过 SET 操作向 SNMP 代理发送命令,要求对对象值重新配置。 SNMP 代理通过 TRAP 操作不定时的通知 NMS 所发生的特定事件。
有关 SNMP 、 SNMPV2 及 SNMPV3 的相关信息,请查阅对应章节。
协议结构
SNMP 是一种应用程序协议,封装在 UDP 中。各种版本的 SNMP 信息通用格式如下所示:
Version Community PDU
* Version:SNMP 版本号。管理器和代理器必须使用相同版本的 SNMP。需要删除具有不同版本号的信息,并不对它们作进一步的处理。
* Community:团体名称,用于在访问代理器之前认证管理器。
* PDU(SNMPv1):具有五种不同类型的 PDU:GetRequest、GetNextRequest、GetResponse、SetRequest 和 Trap。有关每部分的详细介绍请参见以下部分:
GetRequest、GetNext Request、GetResponse 和 SetRequest PDUs 格式如下所示:
PDU Type Request ID Error Status Error Index Object 1,Value 1 Object 2,Value 2 …
* PDU Type:指定传输的 PDU 类型:0 GetRequest;1 GetNextRequest;2 GetResponse;3 SetRequest。
* Request ID:连接 SNMP 请求和响应。
* Error Status:指出一个错误及错误类型。只有响应操作可以设置该字段,其它操作设置该字段为0。
* Error Index:连接一个错误和一个特殊的对象实例。只有响应操作可以设置该字段,其它操作设置该字段为0。
* Variable Bindings:用作 SNMPv1 PDU 的数据字段。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例
Trap PDU 格式如下所示:
PDU Type Enterp Agent Addr Gen Trap Spec Trap Time Stamp Obj 1,Val 1 Obj 1,Val 1 …
* PDU Type:指定传输的 PDU 类型(Trap=4)。
* Enterprise:识别管理企业,在其注册权下定义 Trap。
* Agent Address:代理器的 IP 地址,用于进一步的识别。
* Generic Trap Type:描述事件报告字段,以下定义了7个值。
* Specific Trap Type:当通用 Trap 成为企业指定类型时,用于识别非通用 Trap。
* Timestamp:SysUpTime 对象值,表示最后一次设置初值和产生对应 Trap 间的时间数量。
SNMPV2 由 SNMPV1 演化而来。 SNMPV1 中的 GET 、 GETNEXT 及 SET 操作同样适用于 SNMPV2 ,只是 SNMPV2 添加和增强了有关协议操作。例如 SNMPV2 中的 TRAP 操作,不但具备 SNMPV1 中 TRAP 的相同功能,而且它采用了一种不同的消息格式,它用于替换 SNMPV1 中的 TRAP 。
SNMPV2 中还定了两种新操作,即 GET BULK 和 INFORM 。 NMS 通过 GET BULK 操作能有效地获取大块数据,如对象列表中的多行。请求多少数据 GETBULK 返回一个包含尽可能多的请求数据的应答消息。 INFORM 操作使的一个 NMS 能发送 TRAP 给另一个 NMS 并能收到回复。 SNMPV2 中,如果回复 GET BULK 操作的 SNMP 代理不能提供请求表中所有变量值,那么 SNMP 代理只提供部分结果。
有关 SNMP 、 SNMPV1 及 SNMPV3 的相关信息,请查阅对应章节。
协议结构
SNMP 是一种应用程序协议,封装在 UDP 中。各种版本的 SNMP 信息通用格式如下所示:
Version Community PDU
* Version:SNMP 版本号。管理器和代理器必须使用相同版本的 SNMP。需要删除具有不同版本号的信息,并不对它们作进一步的处理。
* Community:团体名称,用于在访问代理器之前认证管理器。
* PDU(协议数据单元):SNMPv1、v2 和 v3 中的 PDU 类型和格式将在对应文件中作具体介绍。
在 SNMPv2 中,Get、GetNext、Inform、Response、Set 和 Trap PDUs 具有以下格式:
PDU Type Request ID Error Status Error Index Object 1,value 1 Object 2,value 2 …
* PDU Type:识别传输的 PDU 类型(Get、GetNext、Inform、Response、Set 或 Trap)。
* Request ID:连接 SNMP 请求和响应。
* Error Status:指出一个错误及错误类型。只有响应操作可以设置该字段,其它操作设置该字段为0。
* Error Index:连接一个错误和一个特殊的对象实例。只有响应操作可以设置该字段,其它操作设置该字段为0。
* Variable Bindings:用作 SNMPv2 PDU 的数据字段(值1,值2…)。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例。
SNMPv2 GetBulk PDU格式如下:
PDU Type Request ID Non Repeaters Max Repetitions Obj 1, Val 1 Obj 1, Val 1 …
* PDU Type:识别 PDU 为 GetBulk 操作。
* Request ID:连接 SNMP 请求和响应。
* Non Repeaters:指定变量绑定字段中的对象实例号,并从请求开始多次进行检索。当实例是只有一个变量的标量对象时,使用该字段。
* Max Repetitions:定义除 Non Repeaters 字段指定的变量以外的变量检索次数最大值。
* Variable Bindings:用作 SNMPv2 PDU 数据字段(对象1,对象2……)。每个变量绑定在当前值(除 Get 和 GetNext 请求之外,它们中值忽略不计)下都对应一个特殊对象实例。
与前两种版本相比, SNMPV3 中增加了安全管理方式及远程控制。 SNMPV3 结构引入了基于用户的安全模型用于保证消息安全及基于视图的访问控制模型用于访问控制(USM)。这种安全管理方式支持不同安全性,访问控制及消息处理等模式的并发使用,其具体说明如下:
* 安全性
* 认证和隐私
* 授权和访问控制
* 管理框架
* 实体命名
* 人员和政策
* 用户名及密钥管理
* 通知目标文件
* 代理关系
* SNMP 中的远程配置
SNMPV3 使用 SNMP SET 命令配置 MIB 对象,使之能动态配置 SNMP 代理。这种动态配置方式支持本地或远程地配置实体的添加、删除及修改。
有关 SNMP 、 SNMPV1 及 SNMPV2 的相关信息,请查阅对应章节。
协议结构
SNMPv3 信息格式:
Msg Processed by MPM (Msg Processing Model)
Version ID Msg Size Msg Flag Security Model
Msg Processed by USM (User Security Module)
Authoritative Engin ID Authoritative Boots Authoritative Engine Time User name Authentication parameters Privacy Parameter
Scoped PDU
Context engine ID Context name PDU
* Version:SNMPv3(3)。
* ID:用作两个 SNMP 实体间的唯一标识,以调整请求和响应信息。
* Msg Size:信息发送端所支持的八位信息最大值
* Msg Flags:八位的串,包含三个最不重要的标记位:ReportableFlag、PrivFlag、AuthFlag。
* Security Model:标识发送端使用的安全模式,接收端使用该安全模式处理该信息。
* AuthoritativeEngineID:SNMP 的 SnmpEngineID 值包括信息交换。因此,该值涉及 Trap 资源、响应或报告,通过 Get、GetNext、GetBulk、Set 或 Inform 发送至目的地。
* AuthoritativeEngineBoots:SNMP 的 snmpEngineBoots 值包括信息交换。
* AuthoritativeEngineTime:SNMP 的 SnmpEngineTime 值包括信息交换。
* User Name:发生信息交换的用户。
* AuthenticationParameters:如果交换没有被认证,则为空。否则它就是一个认证参数。
* PrivacyParameters:不允许私有交换,则为空。否则它就是一个私有参数。
* PDU(Protocol Data Unit):SNMPv3 中的 PDU 类型与 SNMPv2 中的相同。