什么是SNMP?
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于TCP/IP网络的网络管理标准协议。
它允许网络管理员收集并监控网络设备的各种状态信息,例如设备的配置、性能数据、错误状态等。
通过SNMP,网络管理员可以远程监控网络的状态,并在必要时采取相应的管理操作。它采用客户机-服务器模式进行通信,其中SNMP Manager(即客户机)负责收集和管理网络设备的信息,而SNMP Agent(即服务器)驻留在被管理的设备上,负责响应来自Manager的请求并提供所需的信息。
SNMP的组件
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的历史版本
SNMP有多个版本,成为标准的版本包括SNMPv1、SNMPv2c和SNMPv3,每个版本都在前一版本的基础上进行了一些增强和改进,主要是在安全性和隐私方面。
- SNMPv1
- 第一个发布的版本,也是最基础的一个。
- 提供基本的网络管理功能,如读取设备状态和修改配置。
- 使用基于明文的社区字符串进行简单的身份验证。
- 没有加密能力,因此安全性较低。现在基本不再使用。
- 使用Trap报文来通知网络管理者有关异常情况的发生。
- SNMPv2c
- 对SNMPv1进行了改进,但没有解决其安全问题。
- 增加了一些新的PDU类型(如GetBulk),提高了效率。
- 同样依赖明文社区字符串进行身份验证。
- 继续沿用了Trap报文的概念。
- SNMPv2u
这是一个实验性的版本,尝试解决一些安全问题,最后未得到广泛应用和支持。
- SNMPv2
这也是一个为了解决安全性问题的实验版本。增加了包括SNMPv2p(基于视图)、SNMPv2t(基于模板)、SNMPv2m(基于架构)等变体。最后这些版本也没有能够成为正式的标准。
- SNMPv3
- 当前最新且最安全的SNMP版本。
- 引入了用户安全模型(USM),提供更强的身份验证和加密。
- 支持基于用户的访问控制策略。
- 替换了Trap报文,引入Inform报文,确保报文能够到达目的地。
- 允许同时运行多个安全模型和视图,以便更好地适应不同的环境需求。
目前,大多数现代网络设备都支持SNMPv2c和SNMPv3,SNMPv1由于其安全性问题虽然很多设备支持,但是实际上已经很少被单独使用。
大多数场景还是会选择使用SNMPv2c,具备一定的安全性,又简单易用,而对于需要更高安全级别的网络环境,通常建议使用SNMPv3。
SNMP端口
SNMP端口是SNMP通信端点,SNMP消息传输通过UDP进行,通常使用UDP端口号161/162。有时也使用传输层安全性(TLS)或数据报传输层安全性(DTLS)协议,端口使用情况如下表所示。
过程 |
协议 |
端口号 |
代理进程接收请求信息 |
UDP协议 |
161 |
NMS与代理进程之间的通信 |
UDP协议 |
161 |
NMS接收通知信息 |
UDP协议 |
162 |
代理进程生成通知信息 |
- |
任何可用的端口 |
接收请求信息 |
TLS/DTLS |
10161 |
接收通知信息 |
TLS/DTLS |
10162 |
SNMP配置案例
我们以monitor一台网络设备的流量作为SNMP配置案例:
- 网络设备配置启用SNMP
以下是以Cisco 设备配置参考:
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
- NMS添加被监控设备
NMS增加sensor,选择方式为SNMP
在选项中,我们选择SNMP Traffic
在basic sensor settings中,我们可以看到Tags为bandwidthsensor和snmptrafficsensor
在base sensor settings配置中,我们也可以增加其他sensor类型,在NMS管理软件中,会集成主流的一些厂商设备的sensor集。
我们可以针对traffic的方向,接口数据的包类型进行monitor。也可以监控错误包、单播、组播包的统计等等。
因为SNMP轮询模式,还可以配置轮询时间。默认是60 seconds,可以根据设备负载和网络负载,以及实际监控需求调整轮询的时间间隔。最短时间可以设定到30 seconds,最长可以设定为24hours。
完成sensor的添加后,就可以通过SNMP形成一个可视化的监控,实现对网络设备的健康、流量、是否在线等状态进行监控。
接口流量监控截图:
网络监控还可以根据监控对象,配置基于各种状态、阈值的告警通知。
SNMP工作原理
SNMP(Simple Network Management Protocol)是一种应用层协议,用于在网络上监视和控制设备。
它采用客户机-服务器模式进行通信,其中SNMP Manager(即客户机)负责收集和管理网络设备的信息,而SNMP Agent(即服务器)驻留在被管理的设备上,负责响应来自Manager的请求并提供所需的信息。
SNMP的基本工作原理
- 网络设备初始化
网络设备启动时加载SNMP Agent软件。
Agent从本地存储或默认值加载其配置参数。
- MIB注册
SNMP Agent将管理信息库(MIB)注册到本地系统。
MIB定义了一系列可管理的对象及其属性,这些对象代表了设备的配置、统计和其他相关信息。
- NMS初始化
网络管理系统(NMS)启动并加载SNMP Manager软件。
Manager具有一个或多个已知设备列表,或者它可以主动搜索网络以发现新的可管理设备。
- Manager-Agent通信
SNMP Manager向SNMP Agent发送请求,要求获取或修改特定MIB对象的值。
请求封装在一个称为Protocol Data Unit (PDU) 的消息中,并由Agent处理。
- 数据采集
SNMP Agent从本地系统检索请求的信息,并将其封装在一个回应PDU中。
如果请求涉及写操作(如设置一个新的配置值),Agent会更新本地系统中的相应值。
- 响应
SNMP Agent将回应PDU发送回SNMP Manager。
Manager解析PDU的内容,并将结果显示给网络管理员或其他应用程序。
- Trap与Notification
当设备发生重要状态变更或遇到异常情况时,SNMP Agent可以主动发送Trap PDU到预先配置的NMS。
Trap PDU包含了关于触发事件的相关信息,使网络管理员能够及时得知并处理这些问题。
- 定期轮询
SNMP Manager可以定期轮询SNMP Agent,获取设备的状态更新。
轮询间隔可以根据实际需求进行调整,以平衡网络负载和实时性要求。
SNMP的操作类型
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 Traps是指SNMP Agent主动将设备产生的告警或事件上报给NMS,以便网络管理员及时了解设备当前运行的状态。
SNMP Agent上报SNMP Traps有两种方式:Trap和Inform。Trap和Inform的区别在于,SNMP Agent通过Inform向NMS发送告警或事件后,NMS需要回复InformResponse进行确认。
Trap操作的工作原理如下:
- Trap消息生成
当网络设备遇到某些预定义的条件或事件时,SNMP Agent会生成一个Trap消息。
Trap消息包含有关引发该事件的设备、时间戳以及事件的具体描述等信息。
- Trap消息封装
生成的Trap消息会被封装成SNMP协议数据单元(PDU),其中包含了Trap类型、源IP地址、Trap OID以及其他相关参数。
在SNMPv1和SNMPv2c中,Trap消息使用固定的“默认”端口162进行传输。而在SNMPv3中,Trap消息可以使用任意端口进行传输。
- Trap消息发送
SNMP Agent将封装好的Trap消息发送到预先配置的SNMP Manager的IP地址。
这个过程不需要Manager先发送请求,因为Trap是Agent主动发出的通知。
- Trap消息接收
SNMP Manager接收到Trap消息后,会检查消息中的源IP地址和Trap OID以确定事件的来源和性质。
Manager可能会根据Trap内容执行一些自动化操作,如记录日志、发送电子邮件警报、更新显示界面等。
- 响应处理
根据具体的Trap内容和配置,SNMP Manager可以选择忽略某些Trap消息或采取适当的措施来应对。
在某些情况下,Manager可能会向Agent发送一个Get或Set请求以获取更多信息或更新设备配置。
SNMP Trap并不保证消息一定能送达Manager,因为它们是不可靠的单播消息。
为了提高可靠性,可以使用SNMP Inform消息代替Trap消息,因为Inform消息采用了确认机制,可以确保消息被正确接收。然而,Inform消息比Trap消息稍微复杂一些,并且需要更多的网络资源。
SNMP Inform
SNMP Inform是一种可靠的异步通信机制,它结合了Trap操作的优点(Agent主动发送事件通知)和Get/Response操作的优点(确认机制)。
Inform操作的工作原理如下:
- Inform消息生成
当网络设备遇到某些预定义的条件或事件时,SNMP Agent会生成一个Inform消息。
Inform消息包含有关引发该事件的设备、时间戳以及事件的具体描述等信息。
- Inform消息封装
生成的Inform消息会被封装成SNMP协议数据单元(PDU),其中包含了Inform类型、源IP地址、Inform OID以及其他相关参数。
在SNMPv1和SNMPv2c中,Inform消息不支持;而在SNMPv3中,Inform消息使用任意端口进行传输。
- Inform消息发送
SNMP Agent将封装好的Inform消息发送到预先配置的SNMP Manager的IP地址。
这个过程不需要Manager先发送请求,因为Inform是Agent主动发出的通知。
- Inform消息接收
SNMP Manager接收到Inform消息后,会检查消息中的源IP地址和Inform OID以确定事件的来源和性质。
Manager会对Inform消息做出响应,发送一个带有确认码的Response消息给Agent。
- 响应等待
SNMP Agent接收到Response消息后,检查确认码是否正确。如果确认码正确,则说明Manager成功接收到并处理了Inform消息。
如果在指定时间内没有收到正确的Response消息,则Agent可能会重新发送Inform消息。
- 响应处理
根据具体的Inform内容和配置,SNMP Manager会选择忽略某些Inform消息或采取适当的措施来应对。
在某些情况下,Manager可能会向Agent发送一个Get或Set请求以获取更多信息或更新设备配置。
由于Inform消息具有确认机制,因此相比于Trap消息,它更加可靠,可以确保Manager接收到并且处理了消息。然而,这也意味着Inform消息的处理开销更大,并可能导致更高的网络延迟。因此,在选择使用Inform还是Trap时,需要权衡可靠性和性能的需求。
SNMP的应用场景
SNMP的应用场景很多、很广,但是常见和应用最多的是如下几种:
- 网络设备监控
监控路由器、交换机、防火墙等网络设备的运行状态,包括CPU利用率、内存使用率、接口流量、错误计数等。
通过自动发现机制,发现并跟踪网络中的新增设备。
- 故障告警
接收来自网络设备的Trap或Inform消息,以便及时发现和诊断故障。
设置阈值报警,当达到某个预设条件时自动触发告警。
- 性能分析与优化
收集历史性能数据,分析网络趋势和瓶颈,帮助识别潜在问题。
通过调整设备配置参数优化网络性能。
- 资产管理
记录网络设备的详细信息,包括型号、序列号、软件版本等。
管理资产生命周期,包括购买、部署、升级和退役等阶段。
- 服务质量(QoS)管理
监控网络服务质量,确保关键业务应用获得足够的带宽和优先级。根据监控到的服务质量,调整QoS设置,满足不断变化的业务需求。
- 自动化运维
自动化日常运维任务,减少人工干预的时间和成本。通过脚本或工具集成,实现跨多个系统的联动操作。
- 报表生成与数据分析
从多个设备收集数据,汇总形成详细的网络报表。使用数据分析工具对大量数据进行挖掘,提取有价值的信息。
- 远程维护与故障排除
利用SNMP实现远程登录和控制设备,方便技术人员进行远程维护和故障排除。