最近做网管系统的维护,涉及到SNMP的相关东东,发现大学学的东西很多已经印象模糊...下面的这些资料感觉蛮有用,做了个整理。
---------------------
·SNMP&MIB基本知识
---------------------
最近要做一些服务器和设备的监控, 自带的cacti模板已不能满足需求, 经过一天调试, 目前已实现了bind9 mysql bind等数据流量的分析(其实也就是用脚本取数据,最后用rrdtool画图出来), 但学习的过程中, 发现不大了解MIB概念, google了一下,下面的文章应该能解答一部分与我有同样问题的朋友们(我简单进行了排版整理)
简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。 虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。
1. SNMP基本原理
SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图10是NMS公司网络产品中SNMP协议的实现模型。
SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图
版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。
团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息
协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。
SNMP共有5种报文,如图:
PDU报文类型 | |
PDU类型 | 名称 |
0 | get-request |
1 | get-next-request |
2 | get-response |
3 | set-request |
4 | trap |
PDU报文格式(Trap报文比较特殊):
这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。
![](https://i-blog.csdnimg.cn/blog_migrate/f8e4b7a35143fe7659bec0aecc5a3575.jpeg)
当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
■企业(enterprise)
填入trap报文的网络设备的对象标识符。此对象标识符肯定是在对象命名树上的enterprise结点{1.3.6.1.4.1}下面的trap类型树上。
■trap类型
此字段正式的名称是generic-trap,共分为下表中的7种。
类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。
■特定代码(specific-code)
指明代理自定义编号(若trap类型为6),否则为0。
■ 时间戳(timestamp)
指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为ms。例如时间戳为1908表明在代理初始化后1908ms发生了该事件。
【变量绑定(variable-bindings)】
指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。
SNMP安全性
SNMPv1只能通过消息头部的社区名进行简单的认证,容易遭受安全性攻击。安全性威胁包括 :伪装、信息篡改、消息失序和定时的修改、泄露等。
· 伪装是未经授权的组织伪装成获得授权的管理组织,试图进行管理操作的行为;
· 信息篡改是未经授权的组织试图篡改一个由合法组织发出的消息,导致非法管理操作;
· 当未经授权的组织把消息重排序、拦截或复制时将导致消息的失序和定时被修改;
· 当未经授权的组织窃取了存在管理对象中的值,或从管理站和代理的信息交换中获知了某事件的发生,称为信息泄露。
由于SNMPv1安全性受限,许多厂商只好不支持或仅部分支持Set操作,从而降低了SNMP的功能,使其只能起到一个监视网络的作用。
SNMPv2在安全性上较SNMPv1有了很大的改善。它采用MD5报文摘要算法防止信息被篡改和改序;并对报文的指定部分采用对称加密算法(DES标准加密算法)进行加密。
2. 管理信息库MIB
IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。
下图给出了NMS系统中SNMP可访问网络设备的对象识别树(OID:Object Identifier)结构。
下图给出了对一个DS1线路状态进行查询的OID设置例子。
3. SNMP的五种消息类型
SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap
(1)Get-Request 、Get-Next-Request与Get-Response
SNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。如:首先通过下面的原语获得所要查询的设备的接口数:
{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifNumber(2)}
后再通过下面的原语,进行查询(其中第一次用Get-Request,其后用Get-Next-Request):
{iso org(3) dod(6) internet(1) mgmt(2) mib(1) interfaces(2) ifTable(2)}
(2)Set-Request
SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。
(3)Trap
SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生。
SNMP管理信息库MIB
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。下图画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。
管理信息库的对象命名举例
对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的饿一个(标号3)是被标识的组织。在其下面有 一个美国国防部(Department of Defense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子 树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。 在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB- II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1) .2.1}。这种标识为对象标识符。
最初的结点mib将其所管理的信息分为8个类别,见表1。现在de mib-2所包含的信息类别已超过40个。
表1 最初的结点mib管理的信息类别
应当指出,MIB的定义与具体的网络管理协议无关,这对于厂商和用户都有利。厂商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB 项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本的MIB的多个路由器。当然,一个没有新的MIB项目的路由器不能提供这些项目的信息。
这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为 11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公 司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。
SNMP常用术语
术语
|
术语描述
|
SNMP
|
Simple Network Management Protocol(
简单网络管理协议
)
|
是一个标准的用于管理基于
IP
网络上设备的协议
| |
MIB
|
Management Information Base(
管理信息库
)
|
定义代理进程中所有可被查询和修改的参数
| |
SMI
|
Structure of Management Information(
管理信息结构
)
|
SMI
定义了
SNMP
中使用到的
ASN.1
类型、语法,并定义了
SNMP
中使用到的类型、宏、符号等。
SMI
用于后续协议的描述和
MIB
的定义。每个版本的
SNMP
都可能定义自己的
SMI
| |
ASN.1
|
Abstract Syntax Notation One(
抽象语法定义
)
|
用于定义语法的正式语言,在
SNMP
中定义
SNMP
的协议数据单元
PDU
和管理对象
MIB
的格式。
SNMP
只使用了
ASN.1
中的一部分,而且使用
ASN.1
的语言特性定义了一些自定义类型和类型宏
,这些组成了
SMI
| |
PDU
|
Protocol Data Unit(
协议数据单元
)
|
它是网络中传送的数据包。每一种
SNMP
操作,物理上都对应一个
PDU
| |
NMS
|
Network Management System
网络管理系统,又名网络管理站,简称
“
管理站
”
|
它是
SNMP
的总控机,提供统一的用户界面访问支持
SNMP
的设备,一般提供
UI
界面,并有统计、分析等功能,是网管系统的总控制台。
NMS
是网络管理操作的发起者
| |
BER
|
Basic Encoding Rule,
基本编码规格
|
描述如何将
ASN.1
类型的值编码为字符串的方法。它是
ASN.1
标准的一部分。
BER
编码将数据分成
TLV
三部分,
T
为
Tag
的缩写,是类型标识;
L
为
Length
的缩写,标识类型的长度;
V
为
Value
的缩写,标识数据内容。按照
TLV
的顺序对数据进行编码,生成字节流。
SNMP
使用
BER
将
SNMP
的操作请求和应答编码后进行传输,并用于接收端进行解码
| |
Agent
|
是
SNMP
的访问代理,简称
“
代理
”
,为设备提供
SNMP
能力,负责设备与
NMS
的通信
|
Proxy
|
代理服务器。对实现不同协议的设备进行协议转换,使非
IP
协议的设备也能被管理
|
Trap
|
是由设备主动发出的报警数据,用于提示重要的状态的改变
|