SNMP快速学习文档.docx
《SNMP快速学习文档.docx》由会员分享,可在线阅读,更多相关《SNMP快速学习文档.docx(14页珍藏版)》请在冰豆网上搜索。
SNMP快速学习文档
SNMP快速学习文档
SNMP快速学习文档
软件部学习文档
2007-11-09
1.1Snmp简介
1.1.1名词解释
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。
1.1.2版本号
共三个版本1990SNMPv1,1993SNMPv2,1998SNMPv3。
1.1.3基本功能
SNMP的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。
●在网络正常工作时,SNMP可实现统计、配置和测试等功能。
●当网络出故障时,可实现各种差错检测和恢复功能。
1.1.4典型配置
图1是使用SNMP的典型配置。
整个系统必须有一个管理站(managementstation),它实际上是网控中心。
在每个被管对象中一定要有代理进程。
管理进程和代理继承利用SNMP报文进行通信,而SNMP报文又使用UDP来传送。
这些协议栈中带有阴影的部分是这些主机和路由器所具有的,而没有阴影的部分是为实现网络管理而增加的。
1.1.5委托代理配置
有时网络管理协议无法控制某些网络元素,例如该网络元素使用的是另一种网络管理协议。
这是可使用委托代理(proxyagent)。
委托代理能提供如协议转换和过滤操作的汇集功能。
然后委托代理来对管理对象进行管理。
图2表示委托管理的配置情况。
2网络管理(核心)
SNMP的网络管理由三部分组成,即管理信息库MIB、(协议数据单元PDU)SNMP本身以及管理信息结构SMI。
2.1管理信息库MIB
管理信息库MIB指明了网络元素所包含的变量(即能够被管理进程查询和设置的信息)。
MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。
SNMP的管理信息库采用和域名系统DNS相似的树型结构。
图3画的是管理信息库的一部分,它又称为对象命名。
最顶层为根,没有名字。
对象命名树的顶级对象有三个,即ISO(标号1)、ITU-T(标号0)和这两个组织的联合体(标号2)。
ISO的下面有4个结点,其中的一个(标号3)是被标识的组织。
在其下面有一个美国国防部(DepartmentofDefense)的子树(标号是6).
再下面就是Internet(标号是1)。
讨论Internet中的对象时,只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。
在Internet结点下面的第二个结点是mgmt(管理),标号是2。
再下面是管理信息库mib-2,其标识为{1.3.6.1.2.1},或{Internet
(1).2.1}。
这种标识为对象标识符。
mib将其所管理的信息分为8个类别见表1。
现在mib-2所包含的信息类别超过40个。
表1最初的结点mib管理的信息类别
类别
标号
所包含的信息
system
interfaces
addresstranslation
ip
icmp
tcp
udp
egp
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
主机或路由器的操作系统
各种网络接口及它们的测定通信量
地址转换(例如ARP映射)
Internet软件(IP分组统计)
ICMP软件(已收到ICMP消息的统计)
TCP软件(算法、参数和统计)
UDP软件(UDP通信量统计)
EGP软件(外部网关协议通信量统计)
MIB的定义与具体的网络管理协议无关。
MIB中的对象{1.3.6.1.4.1}是全球唯一的。
例如IBM为{1.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。
世界上任何一个公司、学校只要用电子邮件发往****************进行申请即可获得一个结点名。
这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。
2.2协议数据单元PDU
SNMPv1规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。
管理进程向代理进程发出的get、get-next和set操作:
●get-request操作:
从代理进程处提取一个或多个参数值
●get-next-request操作:
从代理进程处提取紧跟当前参数值的下一个参数值
●set-request操作:
设置代理进程的一个或多个参数值
代理进程发给管理进程的:
●get-response操作:
返回的一个或多个参数值。
这个操作是由代理进程发出的,它是前面三种操作的响应操作。
●trap操作:
代理进程主动发出的报文,通知管理进程有某些事情发生。
图4描述了SNMP的这5种报文操作
SNMPv2添加了几种PDU:
Get-bulk操作(NMS高效检索大的数据块,如一个表中的多行),Inform操作(允许一个NMS向另一个发送trap,并检索它的响应)
图5是封装成UDP数据报的5种操作的SNMP报文格式。
一个SNMP报文三个部分组成,即公共SNMP首部、get/set首部trap首部、变量绑定。
2.2.1公共SNMP首部
共三个字段:
●版本(vesion)写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0。
●共同体(community)作为管理进程和代理进程之间的明文口令,常用“public”。
●PDU类型:
根据PDU的类型,填入0~4中的一个数字,其对应关系如表2所示。
表2
PDU类型
名称
0
get-request
1
get-next-request
2
set-request
3
get-response
4
trap
Get-bulk
Inform
2.2.2get/set首部
●请求标识符(requestID)
管理进程设置的一个整数值。
代理进程在发送get-response报文时也要返回此请求标识符。
管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送。
设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。
●差错状态(errorstatus)
由代理进程回答时填入0~5中的一个数字,见表3的描述。
差错状态
名字
说明
0
noError
一切正常
1
tooBig
代理无法将回答装入到一个SNMP报文之中
2
noSuchName
操作指明了一个不存在的变量
3
badValue
一个set操作指明了一个无效值或无效语法
4
readOnly
管理进程试图修改一个只读变量
5
genErr
某些其他的差错
●差错索引(errorindex)
当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
2.2.3trap首部
●对象标识符:
企业(enterprise)填入trap报文的网络设备的对象标识符{1.3.6.1.4.1.11}。
肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
●trap类型:
此字段正式的名称是generic-trap,共分为表4中的7种。
表4trap类型描述
trap类型
名字
说明
0
coldStart
代理进行了初始化
1
warmStart
代理进行了重新初始化
2
linkDown
一个接口从工作状态变为故障状态
3
linkUp
一个接口从故障状态变为工作状态
4
authenticationFailure
从SNMP管理进程接收到具有一个无效共同体的报文
5
egpNeighborLoss
一个EGP相邻路由器变为故障状态
6
enterpriseSpecific
代理自定义的事件,需要用后面的“特定代码”来指明
当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。
●特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。
●时间戳(timestamp)
指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。
例如时间戳为1908表明在代理初始化后1908ms发生了该时间。
2.2.4变量绑定(variable-bindings)
指明一个或多个变量的名和对应的值。
在get或get-next报文中,变量的值应忽略。
2.3管理信息结构SMI
SNMP中的数据类型:
●INTEGER
●OCTERSTRING
●DisplayString
●OBJECTIDENTIFIER
●NULL
●IpAddress
●PhysAddress
●Counter
●Gauge
●TimeTicks
●SEQUENCE
●SEQUENDEOF
具体的含义请看参考:
SNMP中的数据类型详解
3AdventNetSNMPAPI学习
3.1概述
AdventNetSNMPAPI为基于SNMP的网络管理应用提供开发工具包。
3.2特征
多语言支持:
完全支持SNMPv1、SNMPv2c和SNMPv3
稳健的SMIv1和SMIv2MIB解析器:
无缝解析任何OEM供应商的MIB定义。
MIB加载:
可以选择从预编译文件、串行文件或数据库加载MIB文件以增强性能。
IPv6(InternetProtocolVersion6):
提供与基于IPv6和IPv4的设备之间的连通性。
SNMP广播:
面向网络广播SNMP数据包,从而自动发现网络中的SNMP设备。
数据库支持:
通过将MIB定义和SNMPv3配置数据存储到任何关系数据库(如MySQL和Oracle)增强了可伸缩性。
MIBBrowser:
它是用于网络和系统组件管理的工具,既可以作为独立的应用程序运行,又可以从Web浏览器调用。
命令行工具:
在远程代理上执行SNMP操作,如SNMPGET、SNMPGETNEXT、SNMPSET、SNMPBULK和SNMPWALK。
3.3使用心得
4SNMP编程流程
AdventNetSNMPAPI按照SNMP协议封装了各种操作,包括PDU、VarBindList以及协议操作的各项函数。
按照SNMP协议的描述,调用AdventNetSNMP相关函数,完成一次完整的SNMP。
现在总结描述AdventNetSNMP的一般编程模式。
4.1发送请求消息
AdventNetSNMP发送请求消息的过程可以分为四个部分,主要有:
AdventNetSNMP的初始化、PDUs的创建、发送信息以及资源的释放。
4.1.1AdventNetSNMP的初始化
(1)调用SnmpStartup函数启动AdventNetSNMP。
(2)调用SnmpCreateSession函数创建一个会话session。
(3)调用SnmpSetRetransmitMode函数设置重传模式。
(4)调用SnmpSetRetry函数设置重传次数。
(5)调用SnmpSetTimeout函数设置超时时间。
4.1.2创建协议数据单元(PDUs)
在创建PDU之前,我们必须先创建变量绑定表(varbindlists)。
(1)调用SnmpStrToOid函数创建读取对象的OID,例如,我们创建MIB变量ipInReceives(一个实例的OID为1.3.6.1.2.1.4.3.0),代码:
LPCSTRname="1