写在前面:接触SNMP协议相关的告警已经有些年头了,一直没有搞清楚SNMP消息有哪些?实现原理是什么?如果你也在研究,请不吝赐教!
SNMP介绍
SNMP(simple network management protocol)是因特网架构委员会IAB定义的一个应用层协议。SNMP广泛用于管理和监控网络设备,大多数专业的网络设备都有SNMP agent代理,这些代理被激活和配置后用于和SNMP管理 NMS(network management system)网络管理系统通信。
SNMP作为TCP/IP协议一部分,SNMP消息被封装为UDP(user datagram protocol)并在IP协议中封装和传输,传输过程如下:
UDP协议是无连接的传输协议。
注意:如果抓包分析SNMP消息内容,需要在Wireshark中将SNMP消息转换为UDP消息。
SNMP共有3个版本:v1,v2和v3。v1,v2有很多共同的特征,v3 在先前的版本基础上增加了安全和远程配置能力 。为了解决不同版本的兼容性问题,RFC3584定义了共存策略。
SNMP架构
SNMP协议采用C/S架构,定义了三种角色:SNMP管理,SNMP代理agent和代理proxy服务器。SNMP管理作为客户端,agent和proxy作为服务端。
SNMP管理用于get查询下级agent或proxy的消息,set设置agent或proxy参数和接收trap上报的消息。
SNMP agent用于接收SNMP管理的请求并去网络设备上查询所需数据后做出合适响应和trap上报网络设备上新产生的告警等消息给对应的SNMP管理。
SNMP proxy用于不能直接使用SNMP协议场景,如异构网络(非IP网络)或者不同版本SNMP代理的网络设备。Proxy做了异种网络或不同版本代理和相应SNMP数据请求的转换工作。
问题反思:
1. SNMP管理用于get查询下级agent或proxy的消息,如果查到的信息已经存在尚未恢复,SNMP管理是如何判重的呢?
2. 在网络设备上有新产生的告警等消息,SNMP agent就trap上报消息给对应的SNMP管理,历史消息不会重复上报的,有自己是否上报的判断机制,但是如果trap上报失败如何处理呢?
一套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议。
1)管理信息库MIB—SNMP管理和Agent的沟通桥梁:MIB是资源和对象标识符oid(object identifier)之间唯一对应关系的数据库。任何一个被管理的资源都可以用oid来对应。每个SNMP设备(Agent)都有自己的MIB,SNMP agent必须查询MIB库,才能识别SNMP管理的请求。
iso.org.dod.internet.mgmt.mib.ip.ipInReceives对应的数字表示为:1.3.6.1.2.1.4.3。比如,设置或获取系统正确运行时间的oid为1.3.6.1.2.1.1.3,更多请查看SNMP oid列表。
2) SMI:管理信息结构。主要作用是:(1)定义了对象命名的规则;(2)定义了类型规则。(3)定义了编码方法。
SNMP请求和响应
SNMP的请求和响应是基于UDP协议的异步消息,不需要等待响应。
1) Get-request操作:SNMP管理从SNMP Agent提取一个或多个参数值。
2) Get-next-request操作:SNMP管理从SNMP Agent提取一个或多个参数的下一个参数值。
3) Get-bulk操作:SNMP管理从Agent提取批量的参数值;
4) inform-request操作:允许一个SNMP管理a发送inform消息给其他的SNMP管理b,SNMP管理b再响应ackknowledgement给SNMP管理a。后来并没有局限于SNMP管理,SNMP agent也可以发送inform消息,比trap又多了一层确认收到消息的保护机制。否则没有收到可以再发送trap消息。
5) Set-request操作:SNMP管理设置SNMP Agent的一个或多个参数值。节点有可写属性
6) Get-response操作:SNMP Agent返回的一个或多个参数值,是SNMP Agent对SNMP管理前面4个操作的响应。
7) Trap操作:SNMP Agent主动发出的报文,通知SNMP管理所发生的事情。
SNMPv1 :在RFC1157中定义,包含5个请求/响应:1),2),5),6),7)。
SNMPv2 :V2其中一个变种V2C是基于共同体(Community),在RFC1901中定义的一个实验性协议。包含7个请求/响应:1),2),3),4),5),6),7)。
SNMPv3 :基于安全(security),包含7个请求/响应:1),2),3),4),5),6),7)。
V2的Get,GetNext和Set操作相同于v1的,此外V2还加强了一些协议操作,如果get-request需要多个请求参数,如果有一个不存在,请求会被正常执行,但在v1中会响应一个错误消息。v1版本在trap消息和其他get/set操作消息的PDU不同,v2版本简化了trap消息,使get/set/trap消息的pdu相同。
SNMP查询上报通知流程
SNMP管理查询的SNMP agent的端口是161,接收SNMP agent上报或通知的SNMP管理的端口上162,SNMP管理和agent之间的通讯过程如下:
SNMP管理的查询和设置流程,结合SNMP请求和响应:a. 1)或2)或3)或5)请求资源场景,通过资源在mib找到oid,分别组装UDP协议报文传输给SNMP agent。b. agent根据请求中的oid去mib 中找到对应的资源:如果oid是查询某个消息(含批量的),然后去设备上查找资源信息;如果oid是设置agent的参数,则设置agent参数。c. SNMP agent查询到数据或设置参数成功则做出响应6),组装UDP协议返回给SNMP管理。
SNMP agent上报流程,结合SNMP请求和响应:a. SNMP agent检测到设备上有资源消息产生,根据资源消息,到mib中找到对应oid,通过7)trap上报,封装为UDP协议消息上报给SNMP管理。b. SNMP管理收到上报信息后查询和agent一样的mib库,通过oid找到资源消息。
SNMP inform流程,结合SNMP请求和响应:a. SNMP agent检测到设备上有资源消息产生,根据资源消息,到mib中找到对应oid,通过4)inform上报,封装为UDP协议消息上报给SNMP管理。b. SNMP管理收到上报信息后查询和agent一样的mib库,通过oid找到资源消息,然后响应给SNMP agent消息acknowledgement以确认收到消息,否则可以再次发送inform消息。这是比trap实现相比的优势。SNMP管理之间发送inform消息也是相同的流程。
SNMP协议之安全
V1,V2均采用明文传送,V3采用加密传送,即SNMPV1,V2用抓包工具能在数据包中直接看到团体名。
v1只使用一种安全策略,团体名(和密码相似)。Agent能够被设置回答哪些团体名(SNMP管理)的查询,很容易让人截取得到团体名或密码。
v2增加了不少额外的安全。首先所有的包信息除了目的地址,其他都被加密(含团体名和源IP地址)。Agent 能够解开加密包获取团体名和源IP地址使请求有效。
v2在安全策略演变时存在多个变种,实际存在多个消息格式。各个v2变种之间的PDU有相同的格式,而总的消息格式又不同。
v3提供三重的安全机制:最高层是认证和私密,中间层提供认证而没有私密,底层没有任何的认证机制和私密。
v3 在前面的版本上增加了安全能力和远程配置能力,v3为消息安全和VACM(View-based Access Control Model)引入了USM(User-based Security Model),该结构支持同时使用不同的安全机制,接入控制,消息处理模型。有三个可能的安全级别: noAuthNoPriv, authNoPriv, 和 authPriv。noAuthNoPriv 级别指明了没有认证或私密性被执行。authNoPriv 级别指明了认证被执行但没有私密性被执行。authPriv 级别指明了认证和私密性都被执行。auth---认证 支持MD5 or SHA;priv---加密 支持DES or RSA;
通用的v3消息格式遵循相同的消息封装格式包含一个头和一个被封装PDU。 头部区域,被分成两个部分,一部分处理安全,和另外一部份与安全无关的部分。与安全无关部分在所有的SNMPv3中是相同的,而使用安全相关部分被设计成各种的SNMPv3安全模型,被SNMP内的安全模型处理。
了解完理论,又到了要实践的时候了!
it is SNMP show time!!
下期预播:SNMP相关工具!
有心的朋友,可能看到SNMP报文内容怎么没有介绍!这部分会在实践后再进行介绍!
参考资料: