深入浅出SNMP及其应用实例分析

一、SNMP协议简介

SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是简单网络管理协议SNMP是目前最常用的环境管理协议。SNMP被设计成与协议无关,所以它可以在IPIPXAppleTalkOSI以及其他用到的传输协议上被使用。SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。
   

目前,几乎所有的网络设备生产厂家都实现了对SNMP的支持。领导潮流的SNMP是一个从网络上的设备收集管理信息的公用通信协议。设备的管理者收集这些信息并记录在管理信息库(MIB)中。这些信息报告设备的特性、数据吞吐量、通信超载和错误等。MIB有公共的格式,所以来自多个厂商的SNMP管理工具可以收集MIB信息,在管理控制台上呈现给系统管理员。

 

在实际网络管理过程中,网络管理具有的功能非常广泛,包括了很多方面。在OSI网络管理标准中定义了网络管理的五大功能:①故障管理;②配置管理;③性能管理;④安全管理;⑤计费管理,这五大功能是网络管理最基本的功能。事实上,网络管理还应该包括其他一些功能,比如网络规划、网络操作人员的管理等。网络管理系统的五大功能域之间既相对独立,又存在着联系。

 

SNMP 管理模型中有三个基本组成部分:管理者(Manager, 代理(Agent)和管理信息库(MIB)。


 深入浅出SNMP及其应用实例分析_第1张图片


1. 管理者是实施网络管理的处理实体,驻留在管理工作站上。它是整个网络系统的核心,完成复杂网络管理的各个功能。

SNMP管理代理指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。实际上,SNMP的管理任务是移交给管理代理来执行的。代理翻译来自管理站的请求,验证操作的可执行性,通过直接与相应的功能实体通信来执行信息处理任务,同时向管理站返回相应信息。

  

2. 管理代理是配合网络管理的处理实体,驻留在被管对象上。管理代理监测所在网络部件的工作状况,收集有关网络信息。  

SNMP管理代理指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。实际上,SNMP的管理任务是移交给管理代理来执行的。代理翻译来自管理站的请求,验证操作的可执行性,通过直接与相应的功能实体通信来执行信息处理任务,同时向管理站返回相应信息。

 

3. 管理信息库存储在被管对象的存储器中,它是一个动态刷新的数据库,包括设备特有的信息、配置信息、统计信息等。这些信息被动态得送往管理器,形成网络管理系统的数据来源。  

SNMP MIBMIB 信息为网管中被管资源,而网络管理中的资源是以对象表示的,每个对象表示被管资源的某方面属性,这些对象形成了MIB库。每个MIB变量记录了每个相连网络的状态、通信量统计数据、发生差错的次数以及内部数据结构的当前内容等。网络管理者通过对MIB库的存取访问,来实现五大管理功能。

 

 

二、SNMP 报文操作

由于SNMP 是工作在UDP 上的协议,即无连接的报文通信方式,它不保证报文是否正确到达。与其他网络管理协议不同的是,SNMP使用一种称作“取—存”的范例来实现各种操作。主要有以下3种信息:


(1) Get :由管理站去获取代理管理信息库的值,通过发送Get - Request , Get - NextRequest两种消息来实现。管理站通过发送Get - Request报文从拥有SNMP管理代理的网络设备中获取指定对象的信息,而管理代理用Get - Response报文来响应Get - Request报文。Get - Next - Request是获取一个表中指定对象的下一个对象,因此通常用它来获取一个表中的所有对象信息。

(2) Set :由管理站设置代理的管理信息库的对象值,通过发送Set - request来实现,它可以对一个网络设备进行远程参数配置。

(3) Trap :使得代理能够向管理站通告重要事件,是属于非请求的消息,这些消息通知管理站发生了特定事件。Trap消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。


深入浅出SNMP及其应用实例分析_第2张图片


一个SNMP 实体在接收SNMP报文时,一般要进行基本的语法检查、版本号的验证、认证(若成功就以ASN. 1 的形式返回一个PDU)、对返回的PDU再进行语法检查。当所有的验证和语法解析成功以后,实体就选择适当的访问策略,对该PDU进行相应的处理。管理系统工作时,管理站周期性地发送Get - Request/ Get-Next-Request报文来轮询各个代理,获取各个MIB中的管理信息,同时,管理站也接收代理发来的Trap报文,并记录在一个数据库中。网络管理员可以通过专用的应用软件从管理站上查看每个代理提供的管理信息。各个节点的代理程序驻留在工作站内存中,负责收集被管对象的网络状态信息。当代理接收到管理站的Get报文后,代理将根据请求的内容从本地MIB中提取所需信息,并以Get - Response报文方式将结果回送给管理站。代理一方面在161端口上(SNMP的默认端口)循环侦听来自管理站的Get-Request/ Get-Next-Request报文,并做出相应的响应,读取或修改MIB中的变量值,将结果返回给管理站,另一方面,它也不断地检查本地的状态,适当地发送Trap报文。

 

 

三、MIB访问流程及原理

首先根据自变量接收一个要访问的被管理对象主机名,并接收要查询的对象标识符的简略定义形式。过程首先生成SNMP报文,一旦报文生成,再把报文简单反转过来,发送出去。这其中要将请求标识符段内容及标识符长度保存起来,留待以后进行匹配检查。生成SNMP报文后,建立代理地址,创建套接字连接,以便代理能将响应发回。然后,启动警告信号处理器,将SNMP请求报文发给代理,等待一个响应的到来。因为SNMP是工作在UDP之上的,所以在SNMP应用实体间通信时,无需先建立连接,这样虽降低了系统开销,UDP传输是不可靠的,为此,网络管理站采取了相应的超时和重发策略。


本系统在发出请求报文之后,启动超时计数器,等待响应的到来,并设置重发次数为3。若3次之后仍没有收到响应,则关闭套接字,并返回一个“接收失败”错误代码。反之,若确定收到一个响应,则调用一过程来把响应转换成为内部表示形式,即对SNMP报文进行译码。再用已保存的Request-id与响应Request-id段进行比较,来验证这个报文是否是刚才发出的请求报文的响应。若是,就调用另一个过程,把每段对象标识符的ASN.1表示形式转换成自己的内部形式,并显示其值。由于SNMP报文对各个段都使用可变长度编码,这就使得即便是从SNMP报文中提取一简单整数段,也要进行许多计算,因而,所开发的系统原码程序中包含了一个语言较长、结构复杂的特殊句法分析程序,用于提取报文的各个段并进行译码,此句法分析软件必须把一指针移遍报文中所有各段,以找出各段长度并提取其数值。

 

 

四、数据库设计

    在设计网络管理系统,采集的数据按照采集方式以及保存方式有以下三种:


1)系统初始化时,采集到的数据,直接存入数据库,称为原始数据。包括需要管理的网段、网络节点以及设置的监视项等等。这类信息一般认为除非管理员手动删除,否则将一直留在数据库中。  

2)后台轮询服务启动时,采集到的数据,称为性能参数数据。这类数据,一般是反映系统的某个性能的,有些需要通过一定的计算公式才存入到数据库中。这类数据在数据库中的存储是有一个存储周期的。后台轮询程序设置了一个时间阈值,每隔一段时间就会到数据库中进行数据的删除,防止数据库过于庞大。

3)实际应用中,在数据走向中,还有一类信息,是实时采集的,比如在节点更新时,就会到代理上获取最新的信息,例如:CPU利用率、内存利用率、硬盘使用率(存在硬盘的)等信息,而这些信息是不用插入到数据库中的,只需从代理上获得,通过计算返回给上层,在浏览器中呈现给用户。这样避免了数据库过于庞大。


针对以上的数据分析,系统设计的数据表主要有以下两种:  


(1)原始数据表:表中存储的数据存储的是发现过程中写入数据库的,在发现结束后,并且在一段时间内仍将保留在数据库中的,以管理员的删除为准。例如:tb_net表,在发现初始化配置时,存入数据库中,代表网络管理员想要管理到的网段,它会长期驻留在数据表中直到管理员删除它为止。  

 (2)轮询表:表中存储的数据是会随着时间的变化而发生变化的。网络管理的一个重要功能就是能够实时反映现实设备在使用过程中出现的故障,以一定的方式告知网络管理员,并且希望在将来能够以查看历史报表的方式重现该故障,因此这就需要用到轮询机制,系统设置一个阈值,每隔一个阈值的时间段就到代理中进行新的轮询,更新历史数据。当后台轮询启动时,按照某种策略删除陈旧信息,并通过一些相关计算来更新数据表。

 

 

    五、SNMP实战分析

1)分布式服务器监控系统

SNMP协议在设备监控领域有着很广泛的应用,尤其是现在很火的分布式服务器领域,也是如此。分布式服务器监控系统可以分为以下三个模块:采集模块、数据库模块、显示模块。本系统根据服务器的不同网段(一般而言,同一业务的服务器组成一个集群,有着相同的网段)划分服务器群,每个服务器群均带有一个数据采集模块,好比是SNMP的设备代理,与传统代理不同的是,数据采集模块管理的是多台服务器(一个服务器群)。各个数据采集模块将设备数据采集好之后通过网络传送到数据库服务器进行数据的写入和存储。数据库服务器(MIB)和显示模块(manager)之间有一个应用服务器,主要负责与前端显示模块的连接工作,分担了数据库服务器的工作量,大大提高整体工作性能。

分布式部署模型:

 深入浅出SNMP及其应用实例分析_第3张图片

 

 

 

数据采集、存储、显示模块的相互配合相互协调,才能发挥系统的最佳性能,系统各部分的联动如下图所示:

 深入浅出SNMP及其应用实例分析_第4张图片

 

 

(2)CMTSDPOE混合系统

     这是一个比较复杂的SNMP在企业的应用实例,与其他SNMP管理系统不一样的是,该系统采取了多个agent来组成整个管理系统,以多个agent相互配合来达到提高系统性能的效果。


一般系统的层次结构图如下:

 深入浅出SNMP及其应用实例分析_第5张图片

 

 

CMTSDPOE混合系统就是基于以上模型的继承和改进。

在该系统中,每个agent职责都不一样,这取决于它们所处的设备和要求。


下图是CMTSDPOE混合系统的模型图,SMM卡是系统的主控板卡,管理系统中的PONQAM两块业务卡;PON卡负责DPOE业务,连接终端的ONUQAM卡负责CMTS业务,连接终端的CMManager是直接与SMM卡打交道的,Manager需要做SET或者GET操作,都是通知SMM卡上的两个SNMP agent进程来实现的。


 深入浅出SNMP及其应用实例分析_第6张图片

 

比如manager需要获取设备信息,那工作流程是怎样的呢?


首先,SMM卡上的SNMP agentSNMP dpoe agent会接收到来自管理员的信息,进行下一步操作:判断要获取的数据是否实时数据(比如流量)。

1、如果所需的数据只是非实时数据(比如版本信息,板卡信息等)就从中央database中获取,因为这些非实时数据系统会周期性更新,不需要再另辟途径去获取,这样,agent获取到数据就返回数据给manager

2、如果所需的数据是实时数据,那就不能从中央database里获取了,因为里面的数据可能是很久没更新了,所以agent就必须通过DDM(一个进程,用于设备管理,在SMM卡上)向PON agentQAM agent发起远程调用(RPC通信),将PONMIB或者是QAMMIB的实时数据返回来并写入中央database(这一步值得商榷,在架构设计时可以写入也可不写入,不写入的话可以避免数据库的过于庞大以致难以控制,写入的话就有利于管理员查询历史数据)中,最后agent把数据整理好发送给manager

 

你可能感兴趣的:(计算机网络的自我总结)