SNMP
SNMP协议概述
-
- 简单网络管理协议(SNMP:Simple Network Management Protocol)
-
- 主要用于网络设备的管理,利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。
SNMP版本
SNMP协议的版本包括:SNMPv1、SNMPv2c、SNMPv3。
- SNMP v1是SNMP协议的最初版本,不过依然是众多厂家实现SNMP基本方式。
- SNMP v2通常被指是基于community的SNMP V2。Community实质上就是密码。
- SNMP v3 是最新版本的SNMP。它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持。
SNMP管理框架
- SNMP包括三个网络元素:SNMP管理者(SNMP Manager),SNMP代理(SNMP Agent),MIB库(Management Information Base,管理信息库)
-
- SNMP管理者:运行在SNMP客户端程序的工作站,提供了非常友好的人机交互页面,方便网络管理员完成绝大多数的网络设备管理工作。
-
- SNMP-AGENT代理:驻留在被管理设备上的一个进程,负责接受、处理来自SNMP管理者的请求报文。在一些紧急情况下,SNMP代理也会通知SNMP管理者事件的变化。
-
- MIB库:被管理对象的集合。它定义了被管理对象的一系列的属性:对象的名字、对象的访问权限和对象的数据类型等。每个SNMP代理都有自己的MIB。SNMP管理者根据权限可以对MIB中的对象进行读/写操作。
SNMP的报文类型
- SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
- 监视网络状态的有三种类型 Get-Request、Get-Response Get-Next-Request
- 修改网络设备配置 Set-Request
- 接收网络事件警告 Trap
-
- 监视网络状态的三种类型
SNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。
- 监视网络状态的三种类型
-
- 修改网络设备配置
SNMP 管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。
- 修改网络设备配置
-
- 接收网络事件警告
SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。
- 接收网络事件警告
- SNMP 工作流程如图
- 各种报文的操作如下:
-
- get-request:从代理进程处提取一个或多个参数值。
-
- get-next-request:从代理进程处提取紧跟当前参数值的下一个参数值。
-
- set-request:设置代理进程的一个或多个参数值。
-
- get-response:返回的一个或多个参数值。这个操作是由代理进程发出的,它是对前面3种操作的响应。
-
- trap:代理进程主动发出的报文,通知管理进程有某些事件发生。
- 注意点
- 上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理端的161端口的
- 后面两种Get-Response和Trap是由代理端进程发给管理端进程的,其中Trap消息被发送到管理进程的162端口
- 所有数据都是走UDP封装。
SNMP报文格式
- 查询报文 设置报文报文格式
- 报文中的主要字段如下:
-
- 版本:表示SNMP的版本,如果是SNMPv1报文则对应字段值为0,SNMPv2c则为1。
-
- 团体名:用于在SNMP Agent与NMS之间完成认证,字符串形式,用户可自行定义。团体名包括“read”和“write”两种,执行SNMP查询操作时,采用“read”团体名进行认证;执行SNMP设置操作时,则采用“write”团体名进行认证。
-
- Request ID:用于匹配请求和响应,SNMP给每个请求分配全局唯一的ID。
-
- Non repeaters/Max repetitions:GetBulk操作基于GetNext操作实现,相当于多次执行GetNext操作,这两个参数用于设置执行GetNext操作次数。
-
- Error status:用于表示在处理请求时出现的状况。
-
- Error index:差错索引。当出现异常情况时,提供变量绑定列表(Variable bindings)中导致异常的变量的信息。
-
- Variable bindings:变量绑定列表,由变量名和变量值对组成。
-
- 简单的说,一条SNMP消息由"版本号"、"SNMP共同体名"和"协议数据单元(PDU)"构成,数据包的长度不是固定的。
-
- 版本,团体名上面已经说过;
-
- PDU(协议数据单元)是SNMP消息中的数据区, 即Snmp通信时报文数据的载体.
SNMP报文处理过程
- Agent通过UDP端口161接收来自NMS的Request报文。
- Agent接收到报文后,其基本处理过程如下:
-
- 解码:依据ASN.1基本编码规则,生成用内部数据结构表示的报文。如果此过程出现错误导致解码失败,则丢弃该报文,不做进一步处理。
-
- 比较SNMP版本号:将报文中的版本号取出,与本Agent支持的SNMP版本号比较。如果不一致,则丢弃该报文,不做进一步处理。
-
- 团体名验证:将报文中的团体名取出,此团体名由发出请求的网管站填写。如与Agent所在设备认可的团体名不符,则丢弃该报文,不做进一步处理,同时产生一个Trap报文。SNMPv1提供较弱的安全措施,在版本3中这一功能被加强。
-
- 提取PDU:从通过验证的ASN.1对象中提出协议数据单元PDU。如果失败,丢弃报文,不做进一步处理。
-
- 处理PDU:根据不同的PDU,SNMP协议实体进行不同的处理。得到管理变量在MIB树中对应的节点,从相应的模块中得到管理变量的值,形成Response报文,编码发回网管站。
-
- 网管站得到响应报文后,经过同样的处理,最终显示结果。
MIB介绍
- MIB(管理信息库)
- MIB是一个被管理对象的集合,它定义被管理对象的一系列属性,包括
- 对象的名字
- 对象的访问权限
- 对象的数据类型
MIB树结构
- MIB以树状结构进行存储,树的叶子节点表示管理对象,它可以通过从根节点开始的一条惟一路径来识别,这也就是OID(Object Identifier)。
- OID是由一些系列非负整数组成,用于唯一标识管理对象在MIB树中的位置。由SMI来保证OID不会冲突。
- MIB文件一旦发布,OID就和被定义的对象绑定,不能修改。MIB节点不能被删除,只能将它的状态置为“obsolete”,表明该节点已经被废除。
- 在图1的树形结构中,mgmt对象可以标识为:{ iso(1) org(3) dod(6) internet(1) mgmt(2) },简单标记为:1.3.6.1.2,这种标识就叫做OID。
- NMS通过OID引用Agent中的对象。