基于 SNMP 网络管理系统的设计与实现
摘要:随着计算机网络的发展,企业的计算机网络变得更加复杂。网络管理系统
是十分必要的管理企业网络。本文介绍了 SNMP 简要介绍。然后设计并实现了一
个网络管理系统基于 SNMP 用 VC++和 SNMP++ API。该系统由设备性能管理模块,
网络故障管理模块,和网络拓扑检测模块。它直观地显示网络设备的运行状态,
并通知网络管理系统管理员的故障,使网络管理员可以处理故障的时间。
关键词:网络管理; SNMP;Trap;管理信息库;网络拓扑;SNMP + +
1 介绍
现代企业已经部署了复杂和强大的计算机网络。在公司这是一个基本工具用
来处理大量的信息和通信。网络上检测设备使其发挥最佳性能,及时地维修错误,
使网络结构更加合理,这是企业的基本要求的。因此,监控和保护网络实时地,
使通过网络管理系统稳定,高效的是非常重要的。目前流行的网络管理软件,如
HP 的 OpenView,IBM 的 NetView,思科的思科等。
2 SNMP 的概述
SNMP 是广泛使用的基于 TCP/ IP 协议的互联网络应用层管理协议。到目前
为止,它已经开发 SNMPv3 的,和它一直是事实上的行业标准。
基于 SNMP 的网络管理系统通常由 SNMP 代理,网络管理系统,SMI(管理信
息结构),MIB(管理信息库)[1]组成。代理接收请求,网络管理系统发送,响
应和发送 Trap 消息。网络管理系统通过 SNMP 管理代理的控制实体。MIB 是一
个数据库中的事实。这是一个通过 SNMP 管理的对象的集合,它提供了相应的
代理信息。代理(管理对象)是由树状结构。每个对象都有一个特定的对象类型
的对象标志,该对象标志唯一标志了一个对象值,由一串整数构成。SNMP 管理
程序(网络站)和代理进程(设备)之间的通信协议,使用 UDP 端口 161/162。
SNMP 支持轮询和事件驱动。它的 PDU 的支持至少 5 种类型,在表 1 中示出。
SNMP++是由 HP 公司基于 SNMP 的网络管理软件编程接口。它为开发人员提供
了一系列关于 SNMP 服务的 C ++类。SNMP++显示在图 Fig1 的参考模型。
SNMP++开发工具包具有以下优点。
(1)
底层的 SNMP 内部结构封装起来,如 ASN.1 语法和 BER 编码,降低开发
的难度。
(2)
(3)
具有良好的程序的安全性,并管理 SNMP++和会话的资源,以避免内存
泄漏。此外,开发人员并不需要关注传输层的可靠性,因为 SNMP++提
供错误检查和自动重传超时机制。
它是跨平台的,便于携带。通过隐藏内部工作机制,在不同的平台上
SNMP++提供了一个统一的应用程序编程接口(API)。
3 系统设计与完成
系统的目的是,以通过网络管理确保网络的稳定性和高的效率。SNMP 的网络
管理系统的设计与实现是基于 VC++开发平台和 SNMP++ API,整体分为三个模块:
设备的性能管理模块,网络故障管理模块,网络拓扑结构检测模块。
然后它通过网络管理程序安装网络管理工作站来收集设备数据以及 SNMP 代
理程序安装在代理。数据收集过程如下:
(1)设置 SNMP 包的数据项,比如包标签,SNMP 版本、社区的名字,PDU 标
签,RequestID(用于匹配请求和响应,SNMP 给每个请求分配全局唯一的 ID),OID
(对象标示符)列表,并初始化 SNMP 库。
(2)根据误码率,SNMP 包编码成 ASN.1 格式。然后创建和打开 SNMP 会话和创
建 PDU,定义一个变量,接收响应包管理设备进行沟通代理。
(3)发送请求数据包,然后接收响应包,系统接收数据,由返回代理。
最后,它处理收集到的数据和显示通过图形。
图 2 显示了系统级的监控模块。
Fig2 System-level of monitor module(系统级的监控模块)
图 3 显示了结果的监控目标主机在局域网。
Fig3 the result of monitoring a host(监视主机的结果)
图 3(a)显示了 CPU 的利用率。这个水平轴代表时间,垂直轴代表利用率。图
3(b)显示了内存利用率。水平轴代表时间,纵轴代表了内存利用的大小。图 3 显
示了流程利用率(c)。
3.2 网络故障管理模块
该模块监控网络故障,和及时发现故障。然后它及时通知网络管理员故障信
息。
故障收集使用 Trap 结合 ping。Trap 是由代理进程启动。它向管理进程报告
代理流程的网络设备的故障信息。它采用异步模式,并监听 162 端口。但 ping
采用轮询。它设置一个计时器,可以探测网络设备在同一时间间隔。如果管理过
程在延迟时间之后没有收到响应它可能是一个网络故障。如果检测几次之后总是
不成功 (探测号由网络管理器给定),会报告错误给管理进程。
然后,分析和处理故障数据。提取Trap故障包从故障池,和解码Trap包基于误码
率。解码过程可以简单描述如下。虽然(解码完成)
{
提取的下一个字节的内容;
通过字节的内容确定数据类型;
提取的下一个字节的内容;
通过字节的内容,计算字节的数据;
提取的字节的内容,其量是从上述计算数量得来的;
解释这些内容对应的数据类型; }
这些内容在误码率解码后将通过一系列的类进行分析。这些类继承父类命名
陷阱规则。陷阱规则定义了一个公共方法以解析。所有的孩子类继承陷阱规则覆
盖方法的解析。
3.3 网络拓扑探测模块
该模块主要获得相关信息关于网络拓扑通过 SNMP。MIB-II (RFC1213)是标
准的 SNMP MIB。它由许多不同的组组成。本文采用组包括系统组、接口组和 IP
组。
事实上,网络拓扑算法从 MIB 对象提取在 IpRouteTable,采用宽度优先遍历
算法来自动实现网络拓扑。
首先,选择一个路由器作为起始点拓扑探测,并将它添加到路由器队列。接下
来, 从路由器队列选择一个路由器作为当前路由器。通过 SNMP 阅读当前数据库
的 MIB,并从 MIB 数据库获取路由器的地址表。记录路由器的每个端口和 IP 地址,
并将它添加到路由器端口队列。然后, 从 MIB 数据库遍历路由器表的每个记录。
遍历一个记录的过程一样如下。
// direct connect
if (ipRouteType == 3) {
if (ipRouteMask is 255.255.255.255){
add connection information into connection queue;
}
else{ // connect with subnet(连接子网)
// “and” operation, obtain subnet IP address
(“与”操作得到子网的 IP 地址)
ipSubnet=ipRouteDest & ipRouteMask;
(IP 子网地址=IP 路由目的地地址&IP 路由网络掩码)
add subnet information and connection information into subnet queue
and connection queue;
(添加子网信息和连接信息到子网队列和连接信息;)
}
if (ipRouterNextHop isn’t found)
(如果没有找到 IP 路由器的下一跳){
add router into router queue;
add router’s port into port queue;
添加路由器到路由器队列;
添加路由器的端口到端口队列;
}
}
// indirect connect, connect with a router
if (ipRouteType==4) {
if (ipRouterNextHop isn’t found){
add router into router queue;
add router’s port into port queue;
}
}
然后, 从路由器队列选择一个路由器作为当前的路由器,检测了网络的结构
拓扑直到路由器队列是空的。
由于路由器是多个端口,即多个 IP 地址,遍历必须避免多个 IP 地址的问题。
本文使用一个队列来解决它。当遍历路由器时,如果 IP 当前路由器的端口是在端
口队列,该端口已经遍历。否则,添加 IP 到端口队列,并遍历它。图 4 显示了网络
拓扑探测的结果。初始的 IP 地址是 202.118.19.254。
4 结论
图 4 网络拓扑检测的结果
SNMP 是被广泛使用,已经成为了行业标准。随着互联网的发展企业网络越
来越复杂。所以网络管理系统监测网络设备是非常重要的。
本文简要介绍了 SNMP 协议,设计并实现了一个基于 SNMP 监视 CPU,内存,网
络设备的进程(如服务器、路由器等) 和检测网络拓扑结构的网络管理系统。它
可以帮助网络管理员知道网络设备的运行状态和网络拓扑结构。当一个设备故
障,网络管理系统可以及时找到故障,警报和通知网络管理员。