SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。因为SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为普遍的网管协议。
SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,而且负责与SNMP管理站交互,接收并执行管理站的命令,上传各类本地的网络信息。
SNMP管理站和SNMP代理之间是松散耦合。他们之间的通讯是经过UDP协议完成的。通常状况下,SNMP管理站经过UDP协议向SNMP代理发送各类命令,当SNMP代理收到命令后,返回SNMP管理站须要的参数。可是当SNMP代理检测到网络元素异常的时候,也能够主动向SNMP管理站发送消息,通告当前异常情况。
SNMP的基本思想:为不一样种类的设备、不一样厂家生产的设备、不一样型号的设备,定义为一个统一的接口和协议,使得管理员能够是使用统一的外观面对这些须要管理的网络设备进行管理。经过网络,管理员能够管理位于不一样物理空间的设备,从而大大提升网络管理的效率,简化网络管理员的工做。
SNMP的工做方式:管理员须要向设备获取数据,因此SNMP提供了【读】操做;
管理员须要向设备执行设置操做,因此SNMP提供了【写】操做;
设备须要在重要情况改变的时候,向管理员通报事件的发生,因此SNMP提供了【Trap】操做。
2.2 SNMP 和 UDP
SNMP采用UDP协议在管理端和agent之间传输信息。 SNMP采用UDP 161端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口。
2.3 Snmp版本
SNMP目前共有v1,v2,v3这三个版本:
- SNMP v1是SNMP协议的最第一版本,不过依然是众多厂家实现SNMP基本方式。
- SNMP v2一般被指是基于community的SNMP V2。Community实质上就是密码。
- SNMP v3 是最新版本的SNMP。它对网络管理最大的贡献在于其安全性。增长了对认证和密文传输的支持。
2.4 Snmp的实现结构
-
被管理的设备:
-
SNMP代理 : 【被】监管的设备上运行一个SNMP代理(Agent)),代理实现设备与管理站的SNMP通讯。
-
网络管理系统(NMS): 负责网管命令的发出、数据存储、及数据分析。又称为【管理站】
-
网络中被管理的每个设备都存在一个管理信息库(MIB)用于收集并储存管理信息。
经过SNMP协议,NMS能获取这些信息。被管理设备,又称为网络单元或网络节点,能够是支持SNMP协议的路由器、交换机、服务器或者主机等等。 -
SNMP代理是被管理设备上的一个网络管理软件模块,拥有本地设备的相关管理信息,并用于将它们转换成与SNMP兼容的格式,传递给NMS。
-
NMS运行应用程序来实现监控被管理设备的功能。另外,NMS还为网络管理提供大量的处理程序及必须的储存资源。
(1)管理信息库MIB
MIB文件中的变量使用的名字取自ISO和ITU管理的对象标识符(object identifier)名字空间。它是一种分级树的结构。
OID(Object Identifier):
每一个管理对象都有本身的OID(Object Identifier),管理对象经过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点( . )分隔开,树的叶子节点才是真正可以被管理的对象。
以下图所示,第一级有三个节点:ccitt、iso、iso-ccitt。低级的对象ID分别由相关组织分配。一个特定对象的标识符可经过由根到该对象的路径得到。通常网络设备取iso节点下的对象内容。
如名字空间ip结点下一个名字为ipInReceives的MIB变量被指派数字值3,于是该变量的名字为: iso.org.dod.internet.mgmt.mib.ip.ipInReceives ,,对应的对象标识符OID为: 1.3.6.1.2.1.4.3
当网络管理协议在报文中使用MIB变量时,每一个变量名后还要加一个后缀,以做为该变量的一个实例。如ipInReceives的实例数字表示为:1.3.6.1.2.1.4.3.0. 须要注意的是,MIB中的管理对象的OID有些须要动态确 定:如IP路由表,为了指明地址172.18.20.220的下一站路由(next hop),咱们能够引用这样的实例:
iso.org.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.172.18.20.220, 相应的数字表示为:1.3.6.1.2.1.4.21.1.7.172.18.20.220
(2)管理信息结构(SMI)
SMI定义了SNMP框架所用信息的组织、组成和标识,它还为描述MIB对象和描述协议怎样交换信息奠基了基础。SMI定义的数据类型:
◆ 简单类型(simple)
- Integer:整型是-2,147,483,648~2,147,483,647的有符号整数
- octet string: 字符串是0~65535个字节的有序序列
- OBJECT IDENTIFIER: 来自按照ASN.1规则分配的对象标识符集
◆ 简单结构类型(simple-constructed)
- SEQUENCE 用于列表。这一数据类型与大多数程序设计语言中的“structure”相似。一个SEQUENCE包括0个或更多元素,每个元素又是另外一个ASN.1数据类型
- SEQUENCE OF type 用于表格。这一数据类型与大多数程序设计语言中的“array”相似。一个表格包括0个或更多元素,每个元素又是另外一个ASN.1数据类型。
◆ 应用类型(application-wide)
- IpAddress: 以网络序表示的IP地址。由于它是一个32位的值,因此定义为4个字节;
- counter:计数器是一个非负的整数,它递增至最大值,然后回零。在SNMPv1中定义的计数器是32位的,即最大值为4,294,967,295;
- Gauge :也是一个非负整数,它能够递增或递减,但达到最大值时保持在最大值,最大值为232-1;
- time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;
(3)SNMP报文
SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
- get-request操做:从代理进程处提取一个或多个参数值。Get-Request是由管理站发送到代理侧的161端口的;
- get-next-request操做:从代理进程处提取一个或多个参数的下一个参数值。Get-Next-Request是由管理站发送到代理侧的161端口的;
- set-request操做:设置代理进程的一个或多个参数值。Set-Request是由管理站发送到代理侧的161端口的;
- response操做:返回的一个或多个参数值。这个操做是由代理进程发出的。它是前面3中操做的响应操做。
- trap操做:代理进程主动发出的报文,通知管理进程有某些事情发生。Trap 是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,全部数据都是走UDP封装。
2.5 SNMP报文格式
(1)公共SNMP首部 共三个字段:
- 版本 该字段的值是经过SNMP版本号减1获得的,因此:
XX=0 对应SNMPv1
XX=1 对应SNMPv2c
XX=2 对应SNMPv2
XX=3 对应SNMPv3
- 共同体(community)共同体就是一个字符串,做为管理进程和代理进程之间的明文口令,经常使用的是6个字符“public”。
- PDU类型: 以下图:
(2)get/set首部
- 请求标识符(request ID) : 这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可以使管理进程可以识别返回的响应报文对于哪个请求报文
- 差错状态(error status):由代理进程回答时填入0~5中的一个数字,以下:
- 差错索引(error index): 当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
(3)trap首部
- 企业(enterprise):填入trap报文的网络设备的对象标识符。此对象标识符确定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
- trap类型 :此字段正式的名称是generic-trap,共分为7种:
当使用上述类型二、三、5时,在报文后面变量部分的第一个变量应标识响应的接口。
- 特定代码(specific-code) : 指明代理自定义的时间(若trap类型为6),不然为0。
- 时间戳(timestamp) : 指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908代表在代理初始化后1908ms发生了该时间。
(4)变量绑定(variable-bindings) 指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。
2.6 代理和管理站的模型
Snmp分2种角色:SNMP管理站和SNMP代理(agent)。
- 管理站指的是运行了能够执行网络管理任务软件的服务器,一般被称做为网络管理工做站(NMS),NMS负责采样网络中agent的信息,并接受agent的trap。
- 代理是实际网络设备中用来实现SNMP功能的部分。
代理在UDP的161端口接收NMS的读写请求消息,管理站在UDP的162端口接收代理的事件通告消息。
因此,一旦获取设备的访问权限(community,默认为public),就能够访问设备信息、改写和配置设备参数。因为采用UDP协议,不须要在代理和管理站之间保持链接。
2.7 SNMP的操做命令
SNMP协议之因此易于使用,这是由于它对外提供了三种用于控制MIB对象的基本操做命令。它们是:Get、Set 和 Trap。
- Get:管理站读取代理者处对象的值。它是SNMP协议中使用率最高的一个命令,由于该命令是从网络设备中得到管理信息的基本方式。
- Set:管理站设置代理者处对象的值。它是一个特权命令,由于能够经过它来改动设备的配置或控制设备的运转状态。它能够设置设备的名称,关掉一个端口或清除一个地址解析表中的项等。
- Trap: 代理者主动向管理站通报重要事件。它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的状况或问题 发生了。若是发生意外状况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。一般由服务器请求而得到的数据由服务器的161 端口接收。Trap 消息能够用来通知管理站线路的故障、链接的终端和恢复、认证失败等消息。管理站可相应的做出处理。
2.8 SNMP的消息构成
SNMP协议定义了数据包的格式,及网络管理员和管理代理之间的信息交换,它还控制着管理代理的MIB数据对象。所以,可用于处理管理代理定义的各类任务。
一条SNMP消息由"版本号"、"SNMP共同体名"和"协议数据单元(PDU)"构成,数据包的长度不是固定的。
- 版本识别符(version identifier):用于说明如今使用的是哪一个版本的SNMP协议,确保SNMP代理使用相同的协议,每一个SNMP代理都直接抛弃与本身协议版本不一样的数据报。
- 团体名(Community Name):团体(community)是基本的安全机制,用于实现SNMP网络管理员访问SNMP管理代理时的身份验证。相似于密码,默认值为 public。团体名(Community name)是管理代理的口令,管理员被容许访问数据对象的前提就是网络管理员知道网络代理的口令。若是把配置管理代理成能够执行Trap命令,当网络管理 员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。
- 协议数据单元(PDU):PDU (协议数据单元)是SNMP消息中的数据区, 即Snmp通讯时报文数据的载体。PDU指明了SNMP的消息类型及其相关参数。