SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于TCP/IP网络的网络管理标准协议。
它允许网络管理员收集并监控网络设备的各种状态信息,例如设备的配置、性能数据、错误状态等。
通过SNMP,网络管理员可以远程监控网络的状态,并在必要时采取相应的管理操作。它采用客户机-服务器模式进行通信,其中SNMP Manager(即客户机)负责收集和管理网络设备的信息,而SNMP Agent(即服务器)驻留在被管理的设备上,负责响应来自Manager的请求并提供所需的信息。
SNMP由如下关键组件构成,它们共同协作以实现网络设备的管理和监控:
SNMP Manager(也称为网络管理系统或NMS)
SNMP Manager是网络管理系统的主体,通常是一个运行在计算机上的软件应用程序。
它主动发起请求,收集网络设备的状态信息,执行管理任务,如对网络设备进行配置更改和性能监控。
SNMP Agent
SNMP Agent是运行在网络设备上的软件实体,通常是操作系统的一部分。
它被动地响应来自SNMP Manager的请求,并根据需要向Manager报告事件和状态变化。
Management Information Base (MIB)
MIB也叫管理信息库,它是一个数据库,定义了可管理对象及其属性,这些对象对应于网络设备中的各种配置和状态参数,比如CPU利用率,端口流量,电源状态等。
MIB用ASN.1(Abstract Syntax Notation One)语言编写,并以文本文件形式提供,如.mib文件。
MIB结构类似于目录树,提供了一种标准化的方式来组织和访问网络设备的信息。通过MIB,可以完成以下功能:
Agent通过查询MIB,可以获知设备当前的状态信息。
Agent通过修改MIB,可以设置设备的状态参数。
SNMP的MIB采用树型结构,它的根在最上面,根没有名字。每个对象标识符OID(object identifier)对应于树中的一个管理对象,该树的每个分支都有一个数字和一个名称,并且每个点都以从该树的顶部到该点的完整路径命名,如system的OID为1.3.6.1.2.1.1,interfaces的OID为1.3.6.1.2.1.2。
SNMP PDU(协议数据单元)
SNMP PDU是在SNMP Manager和Agent之间传输的消息格式。
不同类型的PDU对应不同的SNMP操作,如GET、GETNEXT、SET、TRAP和INFORM。
Community Strings(在SNMPv1和SNMPv2c中使用)
社区字符串充当简单的身份验证机制,用于控制SNMP Manager对SNMP Agent的访问权限。
在SNMPv3中,社区字符串被更强大的用户身份验证和授权机制所取代。
SNMP Engine
SNMP Engine是SNMP协议的核心部分,负责处理SNMP消息和与SNMP Manager和Agent之间的通信。
引擎包含调度程序、消息处理子系统和访问控制子系统。
Dispatcher
在SNMP Engine内部,调度程序负责接收和转发SNMP消息到相应的消息处理模块。
Security Subsystem(在SNMPv3中引入)
安全子系统提供了身份验证、加密和访问控制功能,相比community strings增强了SNMP的安全性。
SNMP有多个版本,成为标准的版本包括SNMPv1、SNMPv2c和SNMPv3,每个版本都在前一版本的基础上进行了一些增强和改进,主要是在安全性和隐私方面。
目前,大多数现代网络设备都支持SNMPv2c和SNMPv3,SNMPv1由于其安全性问题虽然很多设备支持,但是实际上已经很少被单独使用。
大多数场景还是会选择使用SNMPv2c,具备一定的安全性,又简单易用,而对于需要更高安全级别的网络环境,通常建议使用SNMPv3。
SNMP端口是SNMP通信端点,SNMP消息传输通过UDP进行,通常使用UDP端口号161/162。有时也使用传输层安全性(TLS)或数据报传输层安全性(DTLS)协议,端口使用情况如下表所示。
过程 | 协议 | 端口号 |
---|---|---|
代理进程接收请求信息 | UDP协议 | 161 |
NMS与代理进程之间的通信 | UDP协议 | 161 |
NMS接收通知信息 | UDP协议 | 162 |
代理进程生成通知信息 | - | 任何可用的端口 |
接收请求信息 | TLS/DTLS | 10161 |
接收通知信息 | TLS/DTLS | 10162 |
我们以monitor一台网络设备的流量作为SNMP配置案例:
snmp-server community string@123 RO
snmp-server host 192.168.1.1 informs version 2c string@123
snmp-server host 192.168.1.1 version 2c string@123
我们可以针对traffic的方向,接口数据的包类型进行monitor。也可以监控错误包、单播、组播包的统计等等。
因为SNMP轮询模式,还可以配置轮询时间。默认是60 seconds,可以根据设备负载和网络负载,以及实际监控需求调整轮询的时间间隔。最短时间可以设定到30 seconds,最长可以设定为24hours。
完成sensor的添加后,就可以通过SNMP形成一个可视化的监控,实现对网络设备的健康、流量、是否在线等状态进行监控。
接口流量监控截图:
网络监控还可以根据监控对象,配置基于各种状态、阈值的告警通知。
SNMP(Simple Network Management Protocol)是一种应用层协议,用于在网络上监视和控制设备。
它采用客户机-服务器模式进行通信,其中SNMP Manager(即客户机)负责收集和管理网络设备的信息,而SNMP Agent(即服务器)驻留在被管理的设备上,负责响应来自Manager的请求并提供所需的信息。
SNMP规定了几个操作类型来完成各组件之间的信息交换,如下表所示:
操作类型 | 描述 | 备注 |
---|---|---|
Get | Get操作可以从Agent中提取一个或多个参数值。 | - |
GetNext | GetNext操作可以从Agent中按照字典序提取下一个参数值。 | - |
Set | Set操作可以设置Agent的一个或多个参数值。 | - |
Response | Response操作可以返回一个或多个参数值。这个操作是由Agent发出的,它是GetRequest、GetNextRequest、SetRequest和GetBulkRequest四种操作的响应操作。Agent接收到来自NMS的Get/Set指令后,通过MIB完成相应的查询/修改操作,然后利用Response操作将信息回应给NMS。 | - |
Trap | Trap信息是Agent主动向NMS发出的信息,告知管理进程设备端出现的情况。 | - |
GetBulk | GetBulk操作实现了NMS对被管理设备的信息群查询。 | SNMPv1版本不支持GetBulk操作 |
Inform | InformRequest也是被管理设备向NMS主动发送告警。与Trap告警不同的是,被管理设备发送Inform告警后,需要NMS回复InformResponse来进行确认。 | SNMPv1版本不支持Inform操作 |
SNMP Traps是指SNMP Agent主动将设备产生的告警或事件上报给NMS,以便网络管理员及时了解设备当前运行的状态。
SNMP Agent上报SNMP Traps有两种方式:Trap和Inform。Trap和Inform的区别在于,SNMP Agent通过Inform向NMS发送告警或事件后,NMS需要回复InformResponse进行确认。
Trap操作的工作原理如下:
SNMP Trap并不保证消息一定能送达Manager,因为它们是不可靠的单播消息。
为了提高可靠性,可以使用SNMP Inform消息代替Trap消息,因为Inform消息采用了确认机制,可以确保消息被正确接收。然而,Inform消息比Trap消息稍微复杂一些,并且需要更多的网络资源。
SNMP Inform是一种可靠的异步通信机制,它结合了Trap操作的优点(Agent主动发送事件通知)和Get/Response操作的优点(确认机制)。
Inform操作的工作原理如下:
由于Inform消息具有确认机制,因此相比于Trap消息,它更加可靠,可以确保Manager接收到并且处理了消息。然而,这也意味着Inform消息的处理开销更大,并可能导致更高的网络延迟。因此,在选择使用Inform还是Trap时,需要权衡可靠性和性能的需求。
SNMP的应用场景很多、很广,但是常见和应用最多的是如下几种:
网络设备监控
监控路由器、交换机、防火墙等网络设备的运行状态,包括CPU利用率、内存使用率、接口流量、错误计数等。
通过自动发现机制,发现并跟踪网络中的新增设备。
故障告警
接收来自网络设备的Trap或Inform消息,以便及时发现和诊断故障。
设置阈值报警,当达到某个预设条件时自动触发告警。
性能分析与优化
收集历史性能数据,分析网络趋势和瓶颈,帮助识别潜在问题。
通过调整设备配置参数优化网络性能。
资产管理
记录网络设备的详细信息,包括型号、序列号、软件版本等。
管理资产生命周期,包括购买、部署、升级和退役等阶段。
服务质量(QoS)管理
监控网络服务质量,确保关键业务应用获得足够的带宽和优先级。根据监控到的服务质量,调整QoS设置,满足不断变化的业务需求。
自动化运维
自动化日常运维任务,减少人工干预的时间和成本。通过脚本或工具集成,实现跨多个系统的联动操作。
报表生成与数据分析
从多个设备收集数据,汇总形成详细的网络报表。使用数据分析工具对大量数据进行挖掘,提取有价值的信息。
远程维护与故障排除
利用SNMP实现远程登录和控制设备,方便技术人员进行远程维护和故障排除。