网络是计算机通信网的重要组成部分,它通过互连和协同工作来构成大范围的信息处理系统。网络管理指通过监督,组织,控制网络通信服务和信息处理等活动,确保计算机网络的持续正常运行,并在运行出现异常时及时响应和排除故障。如何有效的进行区域内网络的管理是计算机网络能够有效,可靠,安全,经济的提供服务的重要保障。
认识SNMP协议
意义价值:SNMP协议可以为不同厂家,不同类型,不同型号的设备,定义一个统一的接口和协议,使得管理员可以通过网络,使用通用的规则管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
SNMP协议处于OSI七层模型中的应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本。目前大部分的网络设备如交换机,路由器等都支持SNMP协议规范,SNMP协议已经成为了网络管理领域中的工业标准。
一套完整的SNMP网络设备监控系统系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报文协议,管理工作站利用SNMP进行远程监控管理网络上的所有支持这种协议的设备(如计算机工作站、终端、路由器、Hub、网络打印机等),主要负责监视设备状态、修改设备配置、接受事件警告等。
SNMP消息
在OSI模型中,传输层的数据单元也称为数据包(packets)。SNMP采用的是UDP(用户数据报协议)作为其传输层协议,并为SNMP提供网络服务,UDP协议的数据单元称为数据报(datagrams)。因为UDP是一种不可靠的数据报服务,所以并不能保证UDP数据报一定能达到目的,但是掉包问题并不对网络管理产生大的影响。SNMP消息包含两个部分:SNMP报头和协议数据单元PDU(Protocol Data Unit),其中SNMP报头包括SNMP版本号和团体名。SNMP版本号目前有三种:Version1、Version2、Version3。团体标识可以作为SNMP消息的口令,缺省值为"public"。查看SNMP版本联系和区别(http://blog.csdn.net/zyboy2000/article/details/7221687)
Get_Request:Manager端向Agent端发送读取信息的请求;
Get_ Next_Request:Manager端向Agent端 发送Get-Request组合起来查询特定的表对象中的列元素。
Get_Response:Agent端对Manager端请求的响应;(被动响应)
Set_Request:Manager端向Agent端发送设备设置信息,Agent端可根据设置信息来改变设备状态(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等);
Trap:当Agent端发生某些事件时,Agent端主动向Manager端发送陷阱信息,如关机事件。
SNMP4J简介
SNMP4J 是一个企业级的免费开源的SNMP API for Java的类库。基于JAVASE 1.4及以上。官网位于http://www.snmp4j.org/,提供相关JavaDoc和wiki。
Java Demo(实现对某一网络主机获取主机名称)
SNMPTest.getRequest的Console:
OID: 1.3.6.1.2.1.1.5.0
Value: com-router
SNMP4J 重要的类和接口
Snmp:该包中的核心类,它提供发送和接受SNMP PDU的方法。拥有同步和异步的两种方式。Snmp和传输协议无关。支持添加特定TransportMapping实例通过调用addTransportMapping(TransportMapping TransportMapping)方法或使用非默认的构造函数创建一个Snmp实例与相应的传输映射。传输映射用于传入和传出消息。
TransportMapping:该接口代表了SNMP4J所使用的传输层协议。这也是SNMP4J一大特色的地方。按照RFC的规定,SNMP是只使用UDP作为传输层协议的。而SNMP4J支持管理端和代理端使用UDP或者TCP进行传输。该接口有两个子接口。
PDU:PDU类代表一个SNMP协议数据单元。PDU(针对Snmpv2c)、PDUv1(针对Snmpv1)、ScopedPDU(针对Snmpv3),但三个类除各自特别的一些参数外,都基本相同。PDU作为基类,往往足够提供大部分的特性。
Target*:一个Target接口定义了远程SNMP实体的抽象表示。带有一个地址对象,以及协议参数,比如重试次数和超时时间等。对于SNMPv1和SNMPv2c,适用CommunityTarget的实现。SNMPv3,适用UserTarget。
SNMP4J API调用流程
创建协议。一般可以使用DefaultUdpTransportMapping实例,作为传输层协议。
创建SNMP对象。填充TransportMapping作为构造参数。
开启监听。
构造目标。设置Address,版本号,重试次数,超时时间等参数。
创建报文(PDU)。设置请求方式,查询的OID。
发送报文。同步方式:调用snmp.send 方法;异步方式:需要设置监听器。
获取ResponseEvent。同步方式阻塞返回,异步方式在监听线程中的回调函数中获得。ResponseEvent.getResponse(),获取回复报文。
释放资源。Snmp.close()。
SNMP网络管理系统
一个SNMP管理的网络包含三个主要部分:被管理设备、代理和网络管理系统(NMS)。被管理设备就是处于被管理的网络中的多个设备,负责收集和存储管理信息;代理是安装在被管理设备中的软件程序(如大部分交换机自带SNMP代理程序,仅需开启即可);网络管理系统就是用于监控被管理设备执行状态的软件系统。SNMP进行网络管理时,一般采用Manager/Agent结构集中式管理信息的方式,管理工作站为Manager端,网络中的各个设备为Agent端。
SMI管理消息结构
管理信息结构SMI是SNMP的基础部分,定义了SNMP框架所使用的信息的组成,结构和表示,为描述MIB对象和协议如何交换信息奠定了基础。
MIB管理消息库
在复杂的网络环境中,网络设备的类型各式各样,所以设备的信息也因设备类型不同而不同,为了将这些信息能通过网络管理系统进行管理,必须采用一套标准来描述这些设备的信息,所以SNMP定义了MIB(Management Information Base)。MIB分为标准MIB和私有MIB,标准MIB适用于所有网络设备,而私有的MIB则由设备厂家向有关机构申请后自行定义。MIB采用树状结构,每个节点每个结点分配了一个字符串和一个小整数作为标号,即OID(Object Identifier)。
MIB结构树中任一对象的名字就是从根到对象结点的路径上各个节点的标号序列,标号之间用点分隔。如被管理设备中每个网络接口的IP地址信息表示为:iso.org.dod.internet.mgmt.mid.ip,它的数字表示为:1.3.6.1.2.1.4。
标准MIB的基本OID以为1.3.6.1.2.1前缀,而私有的MIB的基本OID以为1.3.6.1.4.1前缀。如果在某一节点下有多个信息,则以列表方式存在,比如IP地址信息中包括子网掩码、网关地址等。
网络环境拓扑图
系统设计图
系统案例和效果
基于SNMP网络管理系统的实现,完美解决了跨设备,跨物理位置的网络设备的监控和管理。实时监控当前设备的状态,网络流入流出速率,cpu/内存的使用状况 等必要信息。
如比当天的流量实时监控:
网络管理员可以对设备集中的进行监控和管理,并且直观的从界面中获取实时流量数据,分析当前网络设备的当前状态,即时相应处理和维护。
原文地址:http://blog.51cto.com/13031991/2108118