SNMP(简单网络管理协议)是什么?基础概念解析

管理员如何在一个屏幕上同时掌握几十甚至几百台网络设备的状态,答案就是SNMP。

什么是SNMP

在企业或数据中心这种需要管理几十甚至几百台网络设备的环境中,逐一登录每台设备查看状态并不现实。SNMP(简单网络管理协议)是一种历史悠久的网络管理标准,它让设备用统一的方式上报自身状态信息(流量、温度、错误次数等),使管理员能在一个界面上汇总查看所有设备的情况。

管理站-代理架构

负责发起查询的管理软件称为"管理站"(Manager),运行在每台设备上负责提供信息的软件称为"代理"(Agent),两者配对工作。当监控服务器(管理站)向路由器或交换机(代理)查询"这个端口现在的流量是多少"时,代理会读取自己保存的数值并回应。一个管理站可以同时向众多代理发起查询并汇总结果,从而构建出能一眼掌握整个网络状态的仪表盘。

MIB和OID:指向具体数值的编址体系

设备能够提供的所有信息项的清单称为MIB(管理信息库),其中每一项则由一个用点号分隔的数字编号——OID(对象标识符)——来唯一标识。查询某个OID可能得到设备的运行时长,查询另一个OID则可能得到某端口的接收字节数;管理员只要知道所需信息对应的OID,无论设备来自哪个厂商,都能用同样的方式读取到数值。

SNMPv1、v2c的社区字符串

早期版本的SNMP仅依靠一个类似密码的"社区字符串"来控制访问权限,按惯例读取权限常用"public"、写入权限常用"private"。由于这个字符串以明文形式在网络上传输,很容易被窃听,这一直是被广泛指出的重大弱点。尽管如此,一些老旧设备或封闭的内部网络仍然因为其简单性而继续使用SNMPv1、v2c。

SNMPv3:增强的身份验证与加密

SNMPv3引入了基于用户的身份验证,并可以对查询和响应内容本身进行加密,弥补了旧版本依赖社区字符串所带来的安全弱点。在安全性要求较高的环境中,建议尽可能使用SNMPv3而非v1、v2c,如今大多数新设备也都同时支持这三个版本,可以按需选择。

所用端口与陷阱(Trap)

管理站向代理发起的查询使用UDP 161端口,而代理主动上报异常情况的陷阱(Trap)则使用UDP 162端口。通常情况下,管理站会按固定周期向代理请求数值(轮询);但如果在两次轮询之间发生设备宕机、端口故障等紧急情况,代理可以不等管理站询问,直接主动发送陷阱通知。轮询和陷阱两种方式结合,既能覆盖常规的状态检查,又能对突发情况做出快速响应。

基于SNMP构建的监控软件

许多开源和商用的网络监控工具都以SNMP作为主要的数据采集方式,把设备状态转化为图表和仪表盘。管理员通常只需在这类工具中登记每台设备的IP地址和社区字符串(或SNMPv3的认证信息),就能自动持续采集流量走势、设备温度、错误率等数值并绘制成图表,还可以设置超过阈值时向管理员发出告警,从而在故障扩大之前及时应对。

SNMP在网络体系中处于什么位置

SNMP是一种应用层协议,和网页浏览器、邮件客户端一样运行在底层网络协议之上,但它是专门为设备与设备之间的管理通信而设计,而非面向人类用户。它使用UDP而非TCP进行通信,更看重轻量、快速的交互而非可靠送达保证,这正好契合它频繁重复轮询的使用场景。

SNMP的基本安全防护要点

如果把社区字符串保留为默认的"public"、"private",同时又把SNMP端口暴露在公网上,任何人都可以查询甚至在最坏情况下修改设备的配置。至少应该修改默认字符串、把SNMP访问限制在特定的管理IP地址范围内,并在设备支持的前提下尽量使用具备真正身份验证和加密能力的SNMPv3。

常见问题

家庭网络中也会用到SNMP吗?

部分高端路由器和NAS设备也支持SNMP监控功能,但它在需要管理大量设备的企业和数据中心环境中应用要广泛得多。

社区字符串保持默认值会有风险吗?

会。如果把"public"、"private"这类默认值原样保留,同时把SNMP端口暴露在互联网上,任何人都可能查询到设备信息,最坏情况下甚至能修改设备配置,因此务必修改默认值,并把访问权限限制在特定的可信IP地址范围内。