简单网络管理协议(SNMP,Simple Network Management Protocol)构成了互联网工程工作小组(IETF,Internet Engineering Task Force)定义的Internet协议族的一部分。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。它由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模式(database schema),和一组数据对象。
在典型的SNMP用法中,有许多系统被管理,而且是有一或多个系统在管理它们。每一个被管理的系统上有运行一个叫做代理者(agent)的软件组件,且透过SNMP对管理系统报告信息。
基本上,SNMP代理者以变量呈现管理数据。管理系统透过GET,GETNEXT和GETBULK协议指令取回信息,或是代理者在没有被询问的情况下,使用TRAP或INFORM发送数据。管理系统也可以发送配置更新或控制的请求,透过SET协议指令达到主动管理系统的目的。配置和控制指令只有当网络基本结构需要改变的时候使用,而监控指令则通常是常态性的工作。
可透过SNMP访问的变量以层次结构的方式结合。这些分层和其他元数据(例如变量的类型和描述)以管理信息库(MIB(英语:Management information base)s)的方式描述。
一个SNMP管理的网络由下列三个关键组件组成:
一个网络管理系统运行应用程序,以该应用程序监视并控制被管理的设备。也称为管理实体(managing entity),网络管理员在这儿与网络设备进行交互。网络管理系统提供网络管理需要的大量运算和记忆资源。一个被管理的网络可能存在一个以上的网络管理系统。
一个被管理的设备是一个网络节点,它包含一个存在于被管理的网络中的SNMP代理者。被管理的设备透过管理信息库(MIB)收集并存储管理信息,并且让网络管理系统能够透过SNMP代理者获取这项信息。
代理者是一种存在于被管理的设备中的网络管理软件模块。代理者控制本地机器的管理信息,以和SNMP兼容的格式发送这项信息。
从体系结构上来讲,SNMP框架由主代理、子代理和管理站组成。
主代理是一个在可执行SNMP的网络组件上运作的软件,可回应从管理站发出的SNMP要求。它的角色类似客户端/服务器结构(Client/Server)术语中的服务器。主代理依赖子代理提供有关特定功能的管理信息。
如果系统当前拥有多个可管理的子系统,主代理就会传递它从一个或多个子代理处收到的请求。这些子代理在一个子系统以及对那个子系统进行监测和管理操作的接口内为关心的对象建模。主代理和子代理的角色可以合并,在这种情况下我们可以简单的称之为代理(agent)。
子代理是一个在可执行SNMP的网络组件上运作的软件,运行在特定子系统的特定管理信息库(MIB,Management Information Base)中定义的信息和管理功能。子代理的一些能力有:
对协议和管理信息结构的良好分离使得使用SNMP来监测和管理同一网络内上百的不同子系统非常简单。MIB模型运行管理OSI参考模型的所有层,并可以扩展至诸如数据库,电子邮件以及J2EE参考模型之类的应用。
管理者或者管理站提供第三个组件。它和一个客户端/服务器结构下的客户端一样工作。它根据一个管理员或应用程序的行为发出管理操作的请求,也接收从代理处获得的TRAP。
SNMP第一版SMI指定许多SMI规格的数据类型,它们被分为两大类:
SNMP第二版SMI在RFC 2578之中描述,它在SNMP第一版的SMI规格数据类型上进行增加和强化,例如位串(bit strings)、网络地址(network addresses)和计数器(counters)。
SNMP协议在OSI模型的应用层(第七层)运作,在第一版中指定五种核心PDU:
其他PDU在SNMP第二版加入,包含:
SNMP第二版SMI也指定了信息模块来详细说明一群相关连的定义。有三种SMI信息模块:MIB模块、回应状态、能力状态。
SNMP第三版由RFC 3411-RFC 3418定义,主要增加SNMP在安全性和远程配置方面的强化。
SNMP第三版提供重要的安全性功能:
SNMP的第一个RFC系列出现在1988年:
这些协议被废除经由:
SNMP协议工作在OSI模型的应用层(第七层)。它(在第一版中)指定了四种核心协议数据单元(PDU):
典型的,SNMP为代理使用UDP端口161,为管理站使用UDP端口162。
第一版因为其脆弱的安全性而备受争议。客户端的认证使用明码发送。在80年代,SNMP第一版被设计出来的时期,互联网标准的认证/安全并不被主要的协议设计团体所重视。
SNMP第二版(RFC 1441–RFC 1452)修订了第一版并且包含了在性能、安全、机密性和管理者之间通信这些领域的改进。它引入了GETBULK以取代反复的GETNEXT,藉以在单个请求中获取大量的管理数据。然而,SNMP第二版的新安全系统被认为过于复杂,而不被广泛接受。
SNMP v2c(基于社群的SNMP第二版)定义于RFC 1901–RFC 1908,一开始也非正式的被称为SNMP第1.5版。SNMPv2c包含SNMP第二版除了受争议的新SNMP第二版安全模型以外的部分,并以SNMP第一版的简单的基于社群的安全性方案取而代之。
SNMP v2u(基于用户的SNMP第二版)定义于RFC 1909–RFC 1910。这是一个SNMP第一版和SNMP第二版的折衷方案,试图提供比SNMP第一版更好的安全性,又不遭遇SNMP第二版的高复杂度。这产生一个被商业化的变种,称为SNMP v2*,而且它的机制最后被SNMP第三版的两个安全性框架之一采用。
在目前的指定中,SNMP第二版和SNMP第一版在两个关键领域不兼容:消息格式和协议操作。SNMPv2c消息使用和SNMP第一版不同的标头和协议数据单元(PDU)格式。SNMPv2c也使用两个没有在SNMP第一版指定的协议操作。此外,RFC 1908定义两个可能的SNMP第一版/第二版共存策略:代理服务器代理(proxy agents)和双语网络管理系统(bilingual network-management systems)。
Internet工程工作小组(IETF)把在RFC3411-RFC3418(STD0062)中定义的SNMP第三版作为2004年的标准版本。IETF将先前的版本定为“Obsolete”或“Historical”。
实际上,SNMP实现通常支持多个版本:典型的SNMPv1、SNMPv2c以及SNMPv3。参见RFC3584“Internet标准网络管理框架第一、二、三版间的共存”。
SNMP第三版提供三项重要的服务:认证、隐私和访问控制。
下面的输出作为在一个路由器上的snmpwalk的例子展示了设备的基本信息:
snmpwalk -c public punch system SNMPv2-MIB::sysDescr.0 = STRING: Cisco Internetwork Operating System Software IOS (tm) C2600 Software (C2600-IO3-M), Version 12.2(15)T5, RELEASE SOFTWARE (fc1) TAC Support: http://www.cisco.com/tac Copyright (c) 1986-2003 by cisco Systems, Inc. Compiled Thu 12-Jun-03 15:49 by eaarm SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.187 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (835747999) 96 days, 17:31:19.99 SNMPv2-MIB::sysContact.0 = STRING: wikiuser SNMPv2-MIB::sysName.0 = STRING: punch SNMPv2-MIB::sysLocation.0 = STRING: test SNMPv2-MIB::sysServices.0 = INTEGER: 78 SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00