什么是 SNMP?
简单网络管理协议 (SNMP) 是一种互联网标准协议,用于监控和管理通过 IP 连接的网络设备。例如路由器、交换机、防火墙、负载均衡器、服务器等。SNMP 收集、整理并发送来自各种设备的数据,用于网络监控,协助识别和隔离故障。受监控端点和监控系统都依赖 SNMP 实现无缝通信。SNMP 中主要有两种类型的设备:受管设备(使用 SNMP 进行管理的设备)和网络管理站 (NMS), NMS 可以是管理受管设备的一个或多个设备,也可以被视为 SNMP 服务器。
SNMP协议
SNMP 是一个应用层的协议,其定义标准为 RFC1155 和 RFC1157。SNMP 主要用于网络管理,目前有三个主要版本(SNMPv1、SNMPv2c 和 SNMPv3)。SNMP 代理通过 UDP 端口 161 接收请求/响应,并通过端口 162 接收通知。
什么是 SNMP 端口和端口号?
SNMP 端口是用于标识 SNMP 数据传输的 SNMP 通信端点。SNMP 操作主要使用 UDP 协议。161 和 162 端口默认都是 UDP。TCP 的使用 (较少见),虽然非常规,但某些实现或特定场景(如需要可靠传输的 Inform 操作)可能配置为使用 TCP 端口 161 和 162。这不是标准做法,绝大多数网络设备和管理系统默认使用 UDP。SNMP Trap 目标端口: 当代理发送 Trap 或 Inform 时,它总是发送到管理站上的 UDP 162 端口(或极少数情况下配置的 TCP 162)。
SNMP核心组件是什么?
SNMP由多个关键组件协同工作,实现对网络设备的监控与管理。其主要组成部分包括:被管理设备
被管理设备指需要监控的路由器、交换机和打印机等网络设备。这些设备内置SNMP代理程序(Agent),负责采集并存储可通过SNMP访问的数据。SNMP代理是嵌入在被管理设备中的软件模块。SNMP管理器
SNMP管理器(常称为网络管理系统NMS)负责向被管理设备发起SNMP请求。它收集分析数据、设置配置参数,并根据代理程序反馈的信息生成通知。MIB(管理信息库)
MIB是组织网络设备信息的层级数据库,定义了通过SNMP访问的数据结构与属性。这个关键组件确保被管理设备与SNMP管理器能相互理解各自功能。
SNMP 如何工作?
SNMP通过 Manager-Agent 架构监控网络设备。
Manager负责发送请求(Get/Set)到 Agent(运行在设备上);Agent 响应数据(如CPU负载、接口状态),存储在 MIB(管理信息库)中;Trap 机制允许Agent主动上报异常(如链路断开)。SNMP管理器向一个或多个代理发送请求。被管理设备根据管理器的请求进行响应。代理还可以使用SNMP trap,根据预定义的条件将某些事件通知管理器。SNMP 使用 UDP 端口 161发送请求和响应消息类型,使用 UDP 端口 162 发送trap和inform。
SNMP消息类型
SNMP 定义了七种网络消息类型,也称为“协议数据单元”。它们是:
SNMP管理器发送Get、Set、GetNext、GetBulk和PDU。代理返回Response PDU。
Trap PDU是一种可供代理发送未经请求的警报的方法,而管理器则发送 Inform 协议数据单元来确认 Trap 消息。Trap 命令是 SNMP 最显著的功能之一,这或许也是该协议在网络行业如此广泛应用的原因。Trap 命令会捕获管理器定期发送的 Get 请求可能遗漏的事件。
Get消息类型是 SNMP 管理器用来从服务代理请求特定对象标识符信息的主要方法。
GetNext 消息类型允许 SNMP 管理器根据标准 MIB 层次结构处理有序的 OID 列表。
因此,SNMP 层次结构会从层次结构中的特定点开始发出 Get 请求,然后通过一系列 GetNext 请求逐个处理这些点。
GetBulk 消息烈性请求作为 GetNext 请求序列实现,允许 SNMP 管理器从设备代理查询 MIB 层次结构的大部分。
set消息类型是 SNMP 管理器用来指示代理更改其监控的设备上设置的方法。
reponse消息类型由设备代理使用。它充当请求信息的传递机制。在不需要返回任何信息的情况下(例如 Set PDU),响应充当确认。
Trap消息类型使设备代理能够向 SNMP 管理器发送警报。这些 Trap 消息与受监控网络设备的故障、维护问题以及其他意外情况有关。
Inform消息类型是 SNMP 管理器的响应版本。它仅用于回复 Trap 消息。这充当确认,设备代理将持续重新发送其 Trap 消息,直到收到管理器返回的 Inform 。
什么是SNMP OID 和 MIB
SNMP OID 是由点分隔的数字串组成的。对象标识符 (OID) 采用数字格式,以句点分隔,例如“1.3.6.1.2.1.1.3.0”。设备上可能有数千个 OID,每个 OID 都是特定信息的唯一标识符。例如,如果使用 OID 1.3.6.1.2.1.1.3.0 向设备查询信息,将获得系统正常运行时间作为答案。而使用“1.3.6.1.2.1.1.1”(sysDescr),将获得系统描述。 下面是一个示例,说明如何使用 Net-SNMP 工具从任何启用 SNMP 的设备获取系统描述。
SNMP获取系统描述 MIB 按层次结构组织OID,以树形结构表示,每个 OID都有单独的变量标识符。此树形结构包含其中排列的所有产品的所有可管理功能。此树的每个分支都有一个编号和一个名称,并且每个点都以通向该点的完整路径(从树的顶部向下)命名。 SNMP MIB结构
上图中sysDescr的OID是.1.3.6.1.2.1.1.1,沿着绿点的路径从ROOT到sysDescr就可以找到:
- ISO 为 .1
- 组织为 .3
- DOD 为 .6
- 互联网是.1
- MGMNT 为 .2
- MIB-2 为 .1
- SYSTEM 为 .1
- sysDescr 为 .1
SNMP 版本
最常用的三个版本是 SNMPv1、SNMPv2c 和 SNMPv3。每个版本对社区字符串的处理方式略有不同。SNMPv1 是第一个发布的 SNMP 版本,它使用社区字符串来限制访问。SNMPv1 使用了读写和只读社区字符串,但传输的数据未加密。这意味着它容易受到攻击和利用。SNMPv2c 也提供数据加密,但它使用 SNMPv1 中不存在的数据类型(例如 64 位计数器)。因此,它比 SNMPv1 略安全,但不如 SNMPv3 安全。SNMPv2c 使用两种类型的社区字符串:读写和只读。只读社区字符串允许以只读方式访问管理信息库 (MIB) 对象。SNMPv3 是 SNMP 最安全的版本,允许用户完全加密传输,因此外部攻击者无法访问或利用。总而言之,SNMPv1 和 SNMPv2c 使用了之前易受泄露的未加密社区字符串。SNMPv1 和 SNMPv2c 上市时,其默认社区字符串被设置为“public”,并以易于阅读且极不安全的纯文本形式传输。
发表回复