基于 SNMP 网络管理系统的实现

2016-06-12 15:42:40 +08:00
 Androilly
个推作为国内最专业的第三方消息推送技术解决方案的服务商接入 SDK 用户数高达 80 亿,日活跃用户达 6.5 亿。日分发消息 23 亿。在实际的运维环境中,需要时刻对网络设备进行监控和管理,并包含了各种网络设备,包括交换机,路由器,服务器等等。

网络是计算机通信网的重要组成部分,它通过互连和协同工作来构成大范围的信息处理系统。网络管理指通过监督,组织,控制网络通信服务和信息处理等活动,确保计算机网络的持续正常运行,并在运行出现异常时及时响应和排除故障。如何有效的进行区域内网络的管理是计算机网络能够有效,可靠,安全,经济的提供服务的重要保障。

认识 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)

1. Get_Request : Manager 端向 Agent 端发送读取信息的请求;
2. Get_ Next_Request : Manager 端向 Agent 端 发送 Get-Request 组合起来查询特定的表对象中的列元素。
3. Get_Response : Agent 端对 Manager 端请求的响应;(被动响应)
4. Set_Request : Manager 端向 Agent 端发送设备设置信息, Agent 端可根据设置信息来改变设备状态(包括设备名、设备属性、删除设备或使某一个设备属性有效 /无效等);
5. Trap :当 Agent 端发生某些事件时, Agent 端主动向 Manager 端发送陷阱信息,如关机事件。

SNMP4J 简介
SNMP4J 是一个企业级的免费开源的 SNMP API for Java 的类库。基于 JAVASE 1.4 及以上。官网位于[http://www.snmp4j.org/]( 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 调用流程

1. 创建协议。一般可以使用 DefaultUdpTransportMapping 实例,作为传输层协议。
2. 创建 SNMP 对象。填充 TransportMapping 作为构造参数。
3. 开启监听。
4. 构造目标。设置 Address ,版本号,重试次数,超时时间等参数。
5. 创建报文( PDU )。设置请求方式,查询的 OID 。
6. 发送报文。同步方式:调用 snmp.send 方法;异步方式:需要设置监听器。
7. 获取 ResponseEvent 。同步方式阻塞返回,异步方式在监听线程中的回调函数中获得。 ResponseEvent.getResponse(),获取回复报文。
8. 释放资源。 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/内存的使用状况 等必要信息。
如比当天的流量实时监控:


网络管理员可以对设备集中的进行监控和管理,并且直观的从界面中获取实时流量数据,分析当前网络设备的当前状态,即时相应处理和维护。
3274 次点击
所在节点    Java
2 条回复
GeekGao
2016-06-12 20:17:15 +08:00
很多年以前我的毕业设计就是这玩意… 为了统计更多数据 Windows 直接用 WMI 了
thisisvoa
2016-06-13 10:01:20 +08:00
网元管理就是用这个协议,交换机厂商一般用私有协议,但是这个是必须开放的协议之一。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/285126

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX