SNMP协议详解.docx
《SNMP协议详解.docx》由会员分享,可在线阅读,更多相关《SNMP协议详解.docx(12页珍藏版)》请在冰豆网上搜索。
![SNMP协议详解.docx](https://file1.bdocx.com/fileroot1/2022-10/12/54f9a52b-942d-4a7c-a3a6-a44e9e74f850/54f9a52b-942d-4a7c-a3a6-a44e9e74f8501.gif)
SNMP协议详解
SNMP协议详解
一SNMP协议概述2
1什么是SNMP协议2
2SNMP版本3
3SNMP的基本操作4
4网管站和代理4
5ASN.1和SMI5
6SNMP报文6
6.1SNMP的5种协议数据单元6
7管理变量的表示9
8SNMP的运行过程10
8.1GetRequestPDU10
8.2GetNextRequestPDU11
8.3GetResponsePDU12
8.4SetRequestPDU12
8.5TrapPDU13
一SNMP协议概述
1什么是SNMP协议
SNMP(SimpleNetworkManagementProtocol)是被广泛接受并投入使用的工业标准,它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息,进行修改,寻找故障;完成故障诊断,容量规划和报告生成。
它采用轮询机制,提供最基本的功能集。
最适合小型、快速、低价格的环境使用。
它只要求无证实的传输层协议UDP,受到许多产品的广泛支持。
SNMP在TCP/IP协议族中的地位如下图:
SNMP(用到ASN.1抽象语法记法)
UDP
IP
链路层协议
硬件
2SNMP版本
SNMPv1:
简单网络管理协议,是第一个正式协议版本,在RFC1157中定义;
SNMPv2C:
基于共同体(Community-based)的SNMPv2管理架构,在RFC1901中定义的一个实验性协议;
SNMPv3:
通过对数据进行鉴别和加密,提供了以下的安全特性:
1)确保数据在传输过程中不被篡改;
2)确保数据从合法的数据源发出;
3)加密报文,确保数据的机密性;
SNMPv1和SNMPv2C都采用基于共同体(Community-based)的安全架构。
通过定义主机地址以及认证名(Commumitystring)来限定能够对代理的MIB进行操作的管理者。
SNMPv2C包含GetBulk的机制并且能够对管理工作站返回更加详细的错误信息类型。
GetBulk能够一次性的获取表格中的所有信息或者获取大批量的数据,从而减少请求-响应的次数。
SNMPv2C错误处理能力的提高包括扩充错误代码以区分不同类型的错误,在SNMPv1中这些错误仅有一种错误代码。
现在通过错误代码可以区分错误类型。
由于网络上可能同时存在支持SNMPv1和SNMPv2C的管理工作站,因此SNMP代理必须能够识别SNMPv1和SNMPv2C报文,并且能返回相应版本的报文。
在SNMPv2的基础上,SNMPv3通过安全模型以及安全级别来确定对数据采用哪种安全机制进行处理;目前可用的安全模型有三种类别:
SNMPv1,SNMPv2C,SNMPv3。
下表为目前可用的安全模型以及安全级别
安全模型
安全级别
鉴别
加密
说明
SNMPv1
noAuthNoPriv
认证名
无
通过认证名确认数据的合法性
SNMPv2c
noAuthNoPriv
认证名
无
通过认证名确认数据的合法性
SNMPv3
noAuthNoPriv
用户名
无
通过用户名确认数据的合法性
SNMPv3
authNoPriv
MD5或者SHA
无
提供基于HMAC-MD5或者HMAC-SHA的数据鉴别机制
SNMPv3
authPriv
MD5或者SHA
DES
提供基于HMAC-MD5或者HMAC-SHA的数据鉴别机制
提供基于CBC-DES的数据加密机制
3SNMP的基本操作
操作
操作含义
Get-request
从某变量中取值
Get-next-request
在表格中取下一项值
Get-response
响应取操作
Set-request
把一数值存入具体变量
trap
报告事件信息
SNMP以GET-SET方式替代了复杂的命令集,利用基本操作演绎出全部操作。
用户可以采用管理信息库标准或按标准的方式来定义自己的管理信息库(MIB)。
这样做的好处是:
通过降低占网管系统中大多数的代理部件的成本来降低整个网管系统的成本。
4网管站和代理
网管站(NMS)对网络设备发送各种查询报文,并接收来自被管设备的响应及陷阱(trap)报文,将结果显示出来。
代理(agent)是驻留在被管设备上的一个进程,负责接受、处理来自网管站的请求报文,然后从设备上其他协议模块中取得管理变量的数值,形成响应报文,反送给NMS。
在一些紧急情况下,如接口状态发生改变,呼叫成功等时候,主动通知NMS(发送陷阱TRAP报文)。
他们的关系如下图:
SNMP就是用来规定NMS和Agent之间是如何传递管理信息的应用层协议。
5ASN.1和SMI
SNMP是应用层协议,它要求两端的协议实体交换各种报文,而低层要求用户数据都是BYTE序列,这就产生了一个问题:
SNMP协议实体如何从接受到的一个BYTE序列中识别出报文又如何把一个用内部数据结构表示的报文转换成一个可供发送的BYTE序列,也就是编解码问题。
解决这个问题,就需要一个定义从实际的软件数据结构中抽象出来的数据类型的表示方法,称为抽象句法。
ASN.1就是用来描述抽象记法的语言,事实上可应用与任何协议层,在它的基础上,通过规定编码规则,就可以确定数据在传送中的八比特组的值。
SMI(StructofManagementImformation),通过定义一个宏OBJECT-TYPE,规定了管理对象的表示方法,从这个意义上说,它是ASN.1的一个子集。
另外它还定义了几个SNMP常用的基本类型和值。
MIB(ManagementImformationBase),是所监控网络设备的标准变量定义的集合。
SNMP用层次结构命名方案来识别管理对象,就象一棵树,树的节点表示管理对象,它可以用从根开始的一条路径来无二义的识别。
见下图:
管理对象B可以用一串数字唯一确定{1.2.1.1}这串数字是管理对象的objectidentifier(客体标识符)。
通过objectidentifier可确定从根到B的一条路径。
管理对象A的objectidentifier是{1.2.1.1.5},或{B5},后一种表示方法表明A是B的第5棵孩子。
在agent中这棵树是用较复杂的数据结构来实现的,幸运的是,建树这个工作可由MIB编译器完成。
在树的叶节点中,存放有访问函数的指针,Agent就是通过调用这些函数来从相关模块取得管理变量的值的。
6SNMP报文
SNMP报文结构如下:
(编码之前)
版本号
团体名
协议数据单元PDU
SNMP共有5种报文,所以其PDU也有5中,第七点会详细介绍SNMP的5种协议数据单元。
6.1SNMP的5种协议数据单元
SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。
get-request操作:
从代理进程处提取一个或多个参数值。
get-next-request操作:
从代理进程处提取紧跟当前参数值的下一个参数值。
set-request操作:
设置代理进程的一个或多个参数值。
get-response操作:
返回的一个或多个参数值。
这个操作是由代理进程发出的,它是前面三种操作的响应操作。
trap操作:
代理进程主动发出的报文,通知管理进程有某些事情发生。
前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,为了简化起见,前面3个操作今后叫做get、get-next和set操作。
图1描述了SNMP的这5种报文操作。
请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。
图1SNMP的5种报文操作
图2是封装成UDP数据报的5种操作的SNMP报文格式。
可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部、trap首部、变量绑定。
(1)公共SNMP首部
共三个字段:
版本
写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0。
共同体(community)
共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。
PDU类型
根据PDU的类型,填入0~4中的一个数字,其对应关系如表2所示意图。
表2PDU类型
PDU类型
名称
0
get-request
1
get-next-request
2
get-response
3
set-request
4
trap
(2)get/set首部
请求标识符(requestID)
这是由管理进程设置的一个整数值。
代理进程在发送get-response报文时也要返回此请求标识符。
管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。
设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文
差错状态(errorstatus)
由代理进程回答时填入0~5中的一个数字,见表3的描述
表3差错状态描述
差错状态
名字
说明
0
noError
一切正常
1
tooBig
代理无法将回答装入到一个SNMP报文之中
2
noSuchName
操作指明了一个不存在的变量
3
badValue
一个set操作指明了一个无效值或无效语法
4
readOnly
管理进程试图修改一个只读变量
5
genErr
某些其他的差错
差错索引(errorindex)
当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
(3)trap首部
企业(enterprise)
填入trap报文的网络设备的对象标识符。
此对象标识符肯定是在图3的对象命名树上的enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
trap类型
此字段正式的名称是generic-trap,共分为表4中的7种。
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发生了该时间。
(4)变量绑定(variable-bindings)
指明一个或多个变量的名和对应的值。
在get或get-next报文中,变量的值应忽略。
7管理变量的表示
管理变量表示管理对象类型在某一时刻的值(或称该类型的实例),SNMP以管理变量作为操作对象。
管理变量的表示方法是这样规定的:
形如x.y,其中x是管理对象的objectiden