它是用于管理IP网络设备的因特网标准协议。主要是用于网络管理系统中监视网络相关设备。主要包括三部分:一个应用层协议,一个数据库模式,一组数字对象

 在典型SNMP应用中,一个或者多个叫做管理器(manager)的管理计算机来监视或者管理一组主机或者设备。每个被管理的系统一直执行代理(agent)的软件部分,把信息通过SNMP协议传送到管理器

 本质上,SNMP代理把管理数据作为变量显示到管理系统上。该协议也允许主动管理任务,比如通过远程修改这些变量达到修改和应用新的配置。这些通过SNMP访问的变量分层次组织起来。这些层次和其他的元数据(比如变量的类型和描述),通常在管理信息数据库(MIB)中描述。

 一个SNMP管理网络主要包括三个重要部分:

 被管理的设备

 代理-在被管理的设备上运行的软件

 网络管理系统(NMS-在管理器上运行的软件

一个被管理的设备就是一个执行SNMP端口的网络节点,允许单向(只读)或者双向访问特定节点信息被管理设备通过NMS交换节点相关信息。有时候叫做网络单元,被管理的设备可以是任何类型的设备,包括但不限于路由器,访问服务器,交换机,网桥,集线器,IP电话,IP摄像头,主机和打印机。

  代理就是在被管理设备上运行的一个网络管理软件模块。代理知道本地管理信息,会把信息转换成SNMP形式。

 网络管理系统运行监控和控制被管理设备的应用。NMS提供了网络管理需要的处理能力和内存。

 管理信息库(MIB

  SNMP本身没有定义被管理系统需要提供哪些信息(变量)。SNMP而是用了一个控制设置,可用信息都是在管理信息库中定义。MIB描述了一个设备子系统管理数据的结构,它们使用了一个等级命名空间,包括了对象标识符(OID)。每个对象标识符标识了一个通过SNMP可以读或者设置的变量。MIB使用了ASN.1中的符号。

 协议详细情况

  SNMPOSI模型第七层-应用层运行。SNMP代理在UDP161端口接收请求。管理器可以从任何可用源端口发送请求到代理的161端口。代理的回应会发回到管理器源端口。管理器在端口162接收通知(trapsInformRequests。代理可以从任何端口传输通知。

  SNMPv1规定了五个核心协议数据单元(PDU)。两个其它的PDUGetBulkRequestInformRequest添加到SNMPv2并且带到了SNMPv3

所有的SNMP PDU结构如下:

IP header

UDP header

version

community

PDU-type

request-id

error-status

error-index

variable bindings

七个SNMP协议数据单元如下:

  GetRequest

一个管理器到代理的请求,用于获取一个变量或者一系列变量的值。用来获取的变量定义在不同的绑定)中。一个带着当前值的Response会返回。

  SetRequest

一个管理器到代理的请求,用于设置一个变量或者一系列变量的值。带着当前(新值)值的Response会返回。

  GetNextRequest

 一个管理器到代理的请求,用来发现可用变量和对应的值。返回一个带着变量绑定的Response,用于安装MIB顺序的下一个变量。代理的整个MIB可以通过重复应用GetNextRequest,从OID 0开始。一个表的行数可以通过指定请求变量绑定中的列OID读取。

  GetBulkRequest

  GetNextRequest的优化版。一个管理器到代理的多个GetNextRequest重复。返回带多个绑定的请求ResponsePDU中的non-repeatersmax-repetitions字段就是用来控制response行为。从SNMPv2才开始有。

  Response

代理返回GetRequest, SetRequest, GetNextRequest, GetBulkRequest and InformRequest变量绑定和确认到管理器。错误报告由error-statuserror-index字段提供。尽管用了做getsetresponse,但是在SNMPv1中仍然叫Get-Response

  Trap

代理到管理器的异步通知。包括当前的sysUpTime值,一个OID标识trap类型和可选变量绑定。Trap的目的地址通过MIB中的trap配置变量决定。Trap消息在SNMPv2中修改了格式,叫做SNMPv2-Trap

  InformRequest

管理器到管理器的确认异步通知。PDUSNMPv2-Trap格式一样。因为SNMP使用UDP传输,可靠性难免打折,因此使用InformRequest,可以收到后,发回一个确认。