SNMP
SNMP (Simple Network Management Protocol,简单网络管理协议) 用以监测连接到网络上的设备是否有任何引起管理上关注的情况。SNMP 采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且 SNMP 以 UDP 报文为承载,因而受到绝大多数设备的支持,同时保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查。
SNMP 组件
NMS
NMS (Network-management systems,网络管理系统) 是一个采用 SNMP 协议对网络设备进行管理/监视的系统,运行在 NMS 服务器上
- NMS 可以向设备上的 Agent 发出请求,查询或修改一个或多个具体的参数值
- NMS 可以接收设备上的 Agent 主动发送的 Trap 信息,以获知被管理设备当前的状态
Agent
Agent 是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自 NMS 的请求,把管理数据汇报给发送请求的 NMS
- Agent 接收到 NMS 的请求信息后,通过 MIB 表完成相应指令后,并把操作结果响应给 NMS
- 当设备发生故障或者其它事件时,设备会通过 Agent 主动发送信息给 NMS,向 NMS 报告设备当前的状态变化
MIB
MIB (management information base,管理信息库) 指明了被管理设备所维护的变量,是能够被 Agent 查询和设置的信息。MIB 中定义了被管理设备的属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等
MIB 采用树型结构,它的根在最上面,根没有名字。每个对象标识符 OID (object identifier) 对应于树中的一个管理对象,该树的每个分支都有一个数字和一个名称,并且每个点都以从该树的顶部到该点的完整路径命名
Managed Object
Managed Object 指被管理对象。每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件,也可以是在硬件、软件 (如路由选择协议) 上配置的参数集合
OID
OID (object identifier,对象标识符) 对应于树中的一个管理对象,该树的每个分支都有一个数字和一个名称,并且每个点都以从该树的顶部到该点的完整路径命名,如下图 system 的 OID 为1.3.6.1.2.1.1,mgmt 对象可以标识为 1.3.6.1.2
SNMP 报文
- SNMPv1/v2c
- Version : 版本号,标示 SNMP 版本
- Community : 团体名,用于在 Agent 与 NMS 之间完成认证,字符串形式,常用的是 6 个字符 “public”。团体名包括”可读”和”可写”两种,执行 Get、GetNext 操作时,采用”可读团体名”进行认证;执行 Set 操作时,则采用”可写团体名”认证
- SNMP PDU : 包含 PDU 类型、请求标识符、变量绑定列表等信息
- PDU Type : 协议数据单元的类型
- GetRequest-PDU
- GetNextRequest-PDU
- GetResponse-PDU
- SetRequest-PDU
- Trap-PDU
- GetBulk [SNMPv2c 新增]
- Inform [SNMPv2c 新增]
- Request ID : 请求标示字段,唯一的标示一个请求报文
- Error Status : 错误状态标示字段
- Error Index : 错误索引字段
- Variable Bindings : 变量绑定字段
- PDU Type : 协议数据单元的类型
- SNMPv3
- Version : 版本号,标示 SNMP 版本
- MSG : 报头数据。主要包含消息发送者所能支持的最大消息尺寸、消息是否进行加密/认证、采用的安全模式等描述内容
- Authentication : 认证信息。包含用户名、密钥、加密参数等安全信息
- SNMPv3 PDU : 包含 PDU 类型、请求标识符、变量绑定列表等信息
- Context Egine ID : SNMP 唯一标识符,和 PDU 类型一起决定应该发往那个应用程序
- Context Name : 指明上下文之间的关系,由应用程序决定
- Data : 报文的数据内容
版本 | 说明 |
SNMPv1 | SNMP 的第一个版本,它提供了一种监控和管理计算机网络的系统方法,它基于团体名认证,安全性较差,且返回报文的错误码也较少 |
SNMPv2c | 引入了 GetBulk 和 Inform 操作,支持更多的标准错误码信息,支持更多的数据类型 |
SNMPv3 | 支持基于 USM (User Security Module) 的认证加密和基于 VACM (View-based Access Control Model) 的访问控制,是迄今为止最安全的版本 |
SNMP Traps
SNMP Traps 是指 Agent 主动将设备产生的告警或事件上报给 NMS,以便网络管理员及时了解设备当前运行的状态。Agent 上报 SNMP Traps 有两种方式 : Trap 和 Inform。Trap 和 Inform 的区别在于,Agent 通过 Inform 向 NMS 发送告警或事件后,NMS 需要回复 InformResponse 进行确认
Trap 操作工作原理
Trap 不属于 NMS 对被管理设备的基本操作,它是被管理设备的自发行为。当被管理设备达到告警的触发条件时,会通过 Agent 向 NMS 发送 Trap 消息,告知设备侧出现的异常情况,便于网络管理人员及时处理。例如被管理设备热启动后,Agent 会向 NMS 发送 warmStart 的 Trap
这种 Trap 信息是受限制的。只有在设备端的模块达到模块预定义的告警触发条件时,Agent 才会向管理进程报告。这种方法的好处是仅在严重事件发生时才发送 Trap 信息,减少报文交互产生的流量
Inform 操作工作原理
Inform 操作也是被管理设备向 NMS 主动发送告警。不同的是,被管理设备发送 Inform 告警后,需要 NMS 进行接收确认。如果被管理设备没有收到确认信息则:
- 将告警或事件暂时保存在 Inform 缓存中
- 重复发送该告警或事件,直到 NMS 确认收到该告警或者发送次数达到最大重传次数
- 被管设备上会生成相应的告警或事件日志