基于SNMP的网络性能实时测量技术的实现方法分析

描述

1.引言

近年来,随着网络应用和规模的不断增加,网络管理工作越来越繁重.由于缺乏必要的网络监控手段,有时甚至无法及时发现网络故障的发生.而网络管理的目标是最大限度的保证网络运行的稳定性,提高网络设备的利用率.网络性能.服务质量和安全性.因此,先进的网络管理手段对于保持良好的网络运行状态显得尤为重要.目前多数网络设备都支持SNMP(Simple Network ManagementProtocol,简单网络管理协议),所以可以通过SNMP协议,对网络设备及参数进行实时测量,及时了解网络设备的性能及带宽使用情况,以便实时了解网络当前的运行状态.

2.SNMP

SNMP的前身是简单网关监控协议(SGMP),用来对通信线路进行管理.随后, 人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB,改进后的协议就是着名的SNMP.基于TCP/IP的SNMP网络管理框架是工业上的现行标准,由3个主要部分组成,分别是管理信息结构SMI(Structure ofManagement Information).管理信息库MIB和管理协议SNMP.SMI定义了SNMP框架所用信息的组织和标识,为MIB定义管理对象及使用管理对象提供模板;MIB定义了可以通过SNMP进行访问的管理对象的集合;SNMP协议是应用层协议,定义了网络管理者如何对代理进程的MIB对象进行读写操作.SNMP中的MIB是一种树状数据库,MIB管理的对象,就是树的端节点,每个节点都有唯一位置和唯一名字.IETF规定管理信息库对象识别符(O I D,O b j e c tIdentifier)唯一指定,其命名规则就是父节点的名字作为子节点名字的前缀.

根据OSI网络协议参考模型,SNMP属于应用层协议,在运输层使用UDP协议进行封装.

由于UDP只提供无连接的服务,因此SNMP不需要在代理和管理器之间保持联接.SNMP实体发送消息后不需等待应答,仍然可以继续发送其他消息.SNMP并不要求消息传输的可靠性,消息可能被下层的传输服务丢失,因此可靠性的实现应由SNMP发送实体根据消息的重要性自行决定.

3.SNMP++开发包

3.1 SNMP++开发包简介

SNMP++是一套C++类的集合,为网络管理应用的开发者提供了SNMP服务.SNMP++并非是现有的SNMP引擎的扩充或者封装,它通过提供强大灵活的功能,降低管理和执行的复杂性,把面向对象的优点带到了网络编程中.SNMP++开发包源代码公开,免费提供,具有如下特点:

(1)内存管理方面.在创建或销毁一个对象时,SNMP++类负责该对象使用资源的申请和释放.SNMP++的对象可以静态或动态创建,程序员不用担心由于使用SNMP++对象而引起资源或内存泄漏问题.

(2)可移植性强.除了SNMP类的实现随操作系统不同有所区别,SNMP++中所有的类都是由可移植性极强的C++代码编写的,因此使用SNMP++软件包编写的网络管理程序具有很好的可移植性.

(3)提供超时和重传机制.SNMP++在Target类中提供了超时和重传服务,程序员只需要设置参数就可以实现超时和重传功能,而不必去费力编写超时和重传功能的代码.对于不同的Target,可以很容易地实现不同的超时和重传机制.

(4)阻塞模式与非阻塞模式的网络请求.

SNMP++提供了两种模式的网络请求:阻塞与非阻塞模式.阻塞模式是一个请求发出后,程序等候回应包的到来,直到超时.非阻塞模式则是在请求发出后,控制返回继续执行,等回应包到来后,再去做处理.非阻塞模式的实现要复杂一些,但较为灵活.

(5)支持Trap的发送和接收.使用SNMP++,可以很方便地实现Trap的发送与接收功能,并且可以调整Trap发送与接收时所使用的UDP端口.

3.2 SNMP++软件包的相关类

SNMP++使用C++语言编写,充分利用了面向对象的编程技术,SNMP编程涉及的所有数据结构,全部被封装在相应的类中.所有的底层操作细节,对使用者来说是完全透明的,使用者只需要设置好相应的参数,调用对象的方法,就可以完成各种SNMP操作.

SNMP++包括了大约70个类,大致可分为:

数据类型类,主要封装了SMI中定义的ASN.1,数据类型以及SNMP中定义的数据类型;变量绑定类,封装了SNMP消息中的变量绑定数据结构;PDU类,封装了SNMP消息中的PDU部分;Target类,封装了构成一个SNMP消息所需要的全部信息;SNMP类,主要用来完成建立网络连接.发送消息.接收Trap等操作;另外还有用于支持上述类功能的支持类以及SNMPv3消息加密.用户认证类等.

4.一种实时网络运行状态的轮询及改进方法

4.1 实时网络运行状态的轮询方法

在SNMP中,有很多MIB对象提供了大量的网络信息.可以通过SNMP轮询(polling)的方式,从主机或网络设备中来定期获取MIB信息并进行统计分析,从而获知网络的实时性能状态.然而受网络规模.代理数量.管理终端的处理速度.网络阻塞状况等因素的影响,轮询的频率较难确定.为简化问题,假定网络管理工作站(NMS)一次只处理一个代理(即只有当一个代理处理完,其他代理才可以工作).

轮询周期Td必须满足条件T chN d ≥ Δ@ ,其中Δ 是NMS从代理成功获得响应消息的最小需求时间,N是代理的总数量.

另外还需要考虑网络流量的影响,此时轮训周期可表示为:

C++

其中Si是每次轮询的网络流量,而W是分配的网络带宽.

要达到实时的监控代理的管理信息,NMS选择的轮询周期应符合奈奎斯特条件:

C++

所以轮询周期的上下限为:

C++

这种SNMP轮询可扩展性较差,因为当设备数量或数据量很大.会导致较大延迟且占用大量带宽资源,容易导致通信拥塞,实时性较差.

4.2 轮询方法的改进

在改进的实时监控方法中,每个代理以自身的周期发送管理信息,无需NMS的参与.

该方法的一个优点是在网络监控中没有请求的周期性轮询.首先,NMS发送默认的报告周期变量,代理则发送相关周期变量值,并提取每个数据类型的频率部分.每个代理根据管理信息中的时间变化来计算自己的监控周期AMP(Agent Monitoring Periods).如果代理要改变报告周期,可以发送包含AMP的消息给NMS,NMS收到AMP后并进行调整,该周期表示为MMP(Manager Monitoring Periods).NMS将MMP值通知给相关的代理,然后代理根据MMP发送信息.当一个代理发送管理信息时,如果使用的周期不同于收到的MMP,将向NMS报告新的AMP,NMS继续从代理处接收新的AMP,并为每一个代理重新计算合适的MMP.如果一个新计算的MMP和先前的MMP不同,此时NMS会将该MMP通知给相关代理.该方法也要对相应的协议数据单元(PDU)做出修改.不管是SNMP的PDU还是NMS的PDU,前面部分都是固定的,只是后面的变量部分加入相应的AMP和MMP即可.

在传送过程中,如果新的AMP不需要发送,则相应值域设置为0.

5.实验分析

实验环境为8台PC机使用一台交换机组成的小型局域网.图1显示了使用一般轮询和改进轮询的方法时,网络内TCP报文接收率的比较.从图中可以看出,改进的轮询方法可使网络内的协议开销减少24.7%.

C++

在用Visual C++ 6.0结合SNMP++软件开发包实现的实时监控程序中,通过输入该交换机设备的IP地址.SNMP通信字符串.设备类型和采样时间间隔,就可以进行扫描探测.通过管理信息,可以获得任意两个相互通信的主机的带宽情况,程序打开一个未使用端口,等待网络监控程序连接,得到相关数据.比如一个代理和一个主机之间测试的带宽情况以及带宽历史记录等,以便对网络实时状态进行探测,实现网络的实时监控.

6.结束语

本文基于目前应用较广泛的网络管理协议SNMP,对网络实时监控的实现方法进行了研究,并设计了具有较小协议开销的轮询方法.

程序采用HP公司提供的SNMP++类库和编程工具Visual C++ 6.0进行实现,并在简单局域网环境下进行了实验,证明该方法能够在较低的网络开销下,实现对网络性能的实时监控.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分