SNMP(Simple Network Management Protocol,简单网络管理协议)首先是由IETF的研究小组为了解决Internet上的路由器管理问题而提出的。SNMP的设计原则是简单 性和扩展性。简单性是通过信息类型限制、请求响应或协议而取得。扩展性是通过将管理信息模型与协议、被管理对象的详细规定(MIB)分离而实现的。

  

  网络管理体系结构

  

  SNMP的网络管理模型包括以下关键元素:管理站、代理者、管理信息库、网络管理协议。管理站一般是一个分立的设备,也可以利用共享系统实现。管理站作为网络管理员与网络管理系统的接口,它的基本构成为:一组具有分析数据、发现故障等功能的管理程序; 一个用于网络管理员监控网络的接口; 将网络管理员的要求转变为对远程网络元素的实际监控的能力; 一个从所有被管网络实体的MIB中抽取信息的数据库。

  

  网络管理系统中另一个重要元素是代理者。装备了SNMP的平台,如主机、网桥、路由器及集线器均可作为代理者工作。代理者对来自管理站的信息请求和动作请求进行应答,并随机地为管理站报告一些重要的意外事件。

  

  网络资源被抽象为对象进行管理。但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库(MIB)。MIB作为设在代理者处的管理站访问点的集合,管理站通过读取MIB中对象的值来进行网络监控。管理站可以在代理者处产生动作,也可以通过修改变量值改变代理者处的配置。

  

  管理站和代理者之间通过网络管理协议通信,SNMP通信协议主要包括以下能力。

  

  Get:管理站读取代理者处对象的值。

  

  Set:管理站设置代理者处对象的值。

  

  Trap:代理者向管理站通报重要事件。

  

  在标准中,没有特别指出管理站的数量及管理站与代理者的比例。一般地,应至少要有两个系统能够完成管理站功能,以提供冗余度,防止故障。

  

  网络管理协议环境

  

  SNMP为应用层协议,是TCP/IP协议族的一部分。它通过用户数据报协议(UDP)来操作。在分立的管理站中,管理者进程对位于管理站中心的MIB的访问进行控制,并提供网络管理员接口。管理者进程通过SNMP完成网络管理。SNMP在UDP、IP及有关的特殊网络协议(如Ethernet、FDDI、X.25)之上实现。

  

  每个代理者也必须实现SNMP、UDP和IP。另外,有一个解释SNMP的消息和控制代理者MIB的代理者进程。
  
  图1描述了SNMP的协议环境。从管理站发出3类与管理应用有关的SNMP的消息GetRequest、GetNextRequest、SetRequest。3类消息都由代理者用GetResponse消息应答,该消息被上交给管理应用。另外,代理者可以发出Trap消息,向管理者报告有关MIB及管理资源的事件。

  

  共同体和安全控制

  

  网络管理是一种分布式的应用。与其他分布式的应用相同,网络管理中包含有一个应用协议支持的多个应用实体的相互作用。在SNMP网络管理中,这些应用实体就是采用SNMP的管理站应用实体和被管理站的应用实体。

  

  SNMP网络管理具有一些不同于其他分布式应用的特性,它包含一个管理站和多个被管理站之间一对多的关系。

  

  反过来,我们也要看到SNMP网络管理中还包含另外一种一对多的关系,即一个被管理站和多个管理站之间的关系。每个被管理站控制着自己的本地MIB,同时必须能够控制多个管理站对这个本地MIB的访问。这里所说的控制有以下三个方面:认证服务将对MIB的访问限定在授权的管理站的范围内;访问策略对不同的管理站给予不同的访问权限;代管服务提的是一个被管理站可以作为其他一些被管理站(托管站)的代管,这就要求在这个代管系统中实现为托管站服务的认证服务和访问权限。

  

  以上这些控制都是为了被管系统保护它们的MIB不被非法地访问。SNMP通过共同体(community)的概念提供了初步和有限的安全能力。

  

  SNMP用共同体来定义一个代理者和一组管理者之间的认证、访问控制和代管的关系。共同体是一个在被管系统中定义的本地概念。被管系统为每组可选的认证、访问控制和代管特性建立一个共同体。每个共同体被赋予一个在被管系统内部唯一的共同体名,该共同体名要提供给共同体内的所有管理站,以便它们在get和set操作中应用。代理者可以与多个管理站建立多个共同体,同一个管理站可以出现在不同的共同体中。

  

由于共同体是在代理者处本地定义的,因此不同的代理者处可能会定义相同的共同体名。共同体名相同并不意味者共同体有什么相似之处,因此,管理站必须将共同体名与代理者联系起来加以应用。

网管系统软件

Manager:

管理员使用的工作站,通过网管软件查看和分析网管数据。

Agent

网管代理。网管代理一般分为两个功能模块和一个公用模块MIB库

查询/设置模块

此模块接受来自Manager的查询和设置指令,并根据指令处理相关数据,如将被查询的数据返回给Manager,或使设置的数据对相关Device生效。

对于SNMP Agent,此模块至少需要实现以下协议接口:

n  get-request

n  set-request

n  get-next-request

n  get-reponse

告警模块

告警模块将设备产生的告警发送给Manager。对于SNMP Agent.此模块至少需要实现Trap协议接口。

MIB库

MIB(管理信息库)保存被管理设备的相关管理信息。在SNMP Agent里, MIB通常用文本文件格式保存。

一个MIB描述了包含在数据库中的对象或表项。每一个对象或表项都有以下四个属性:

n  对象类型(Object
Type)

n  语法(Syntax)

n  存取(Access)

n  状态(Status)

在SNMP规范之一的管理信息结构与标识(SMI;RFC 1155/1065)规范中定义了这些属性。SMI对于MIB来说就相当于模式对于数据库。

Device

被管理设备,可以是一台一个进程,计算机,或者分布式的系统。这些设备负责产生和收集诸如配置,性能和业务数据以及告警,是网管数据的来源,同时负责原始数据的整理和统计。Device和Agent之间的交互协议可以不受SNMP协议限制,可以采用任何一种协议交换数据。

Agent设计

可见Agent在网管系统结构的位置相当于管理器和被管设备之间的网关和协议转换器。对Agent的功能需求的范围应该为:

n  协议转换。将SNMP协议和被管设备之间的协议互相转换

n  转发请求。包括向被管设备转发查询,设置请求。向Manager转发设备产生的告警

通过MIB库维护被管设备的信息结构

对Manager提供一个统一的网管接口,无论被管设备有多复杂,对Manager来说只需要和Agent交互就可以获得所有被管设备的网管信息

不需要牵涉诸如轮巡,告警策略等网管业务逻辑。也不参与被管设备本身对网管数据的处理流程。这些由被管设备的网管业务逻辑层自行处理。

不需要对数据进行统计分析

不需要保存历史或实时网管数据

可见对于网管系统来说,Agent功能明确,结构相对简单,虽然必不可少但并非核心部件,并且SNMP Agent已经是事实上的工业标准,有大量的开发包帮助开发人员快速的实现Agent,可以让开发人员将精力投入到网管业务逻辑上。

什么是 SNMP?
SNMP是一系列协议组和规范,其提供了一种从网络中的设备中收集网络管理信息的方 法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。其网络管理主 要分为四部分被管理节点(设备)、代理、网络管理工作站、网络管理协议。

SNMP主要部分

被管理节点(设备)网络管理协议

被监控设备

代理

用来跟踪被管理设备状态的特殊软件或固件

网络管理工作站

与在不同的被管理节点中的代理通信,并且显示这些代理状态的中心设备

网络管理协议

被网络管理工作站和代理用来交换信息的协议

代理的概念及所提供的服务
管理代理(agent)是一种特殊的软件(或固件),它包含了关于一个特殊设备及该设备所处环境的信息。
其提供的服务:

l  网络管理工作站可以从代理中获得相关设备的信息。

l  网络管理工作站可以修改、增加或者删除代理中的相关表项。

l  网络管理工作站可以为一个特定的自陷设置阈值。

l  代理可以向网络管理工作站发送自陷。

MIB概念
MIB被称为管理信息库,一个MIB描述了包含在数据库中的对象或表项。

简单网络管理协议

SNMP请求/响应报文

简单网络管理协议允许网络管理工作站软件与被管理设备中的代理进行通信。这种通信可以包括来自管理工作站的询问消息、来自代理的应答消息或者来自代理给管理工作站的自陷消息。

SNMPv1实现起来很简单,其包含5个请求/响应原语:

l  get-request

l  set-request

l  get-next-request

l  get-response

l  trap

报文格式

IP首部

UDP首部

版本

共同体

PDU类型(0-3)

请求标识

差错状态(0-5)

差错索引

名称

名称

...

PDU类型4

企业

代理地址

Trap类型(0-6)

特定代码

时间戳

名称

...

PDU类型

名称

0

Get-request

1

Get-next-request

2

Get-response

3

Set-request

4

Trap

SNMP开发工具

开发工具的使用

AdventNet所提供的的开发工具包,支持多种平台。

  1. Agent++
  2. SNMP++

Microsoft
Virtual Studio 6.0,Windows下c++语言的开发包。MS自身提供一组称为WinSNMP的API(在MSDN中提供详细文档),而且MS提供基于Agent Service的SNMP Extension Agent开发。

ucd-snm(net-snmp)p是Linux平台下著名的C语言SNMP开发包,公开源码,是最常用的开发Agent的软件包。

辅助工具的使用

AdventNet所提供的对mib开发一系列开发工具包,包括:

  • Mib Browser
  • Mib Editor
  • Mib Compiler

熟悉SNMP的开发过程

SNMP开发流程

Mib的创建和源码生成

首先第一步是Mib设计,开始Mib设计的时候要确定将被管理的对象纳入管理信息库,最终实现asn.1的文档,在此可以使用AdventNet所提供的Mib Editor来实现。通过Mib编译器将asn.1的文档编译成c文件和头文件,可以使用Mib Compiler编译。

Agent的开发

Agent++支持多种平台,主要有solaris, hp unix,
windows等。使用方法稍有不同,但原理一致,即生成库文件,进行开发应用时使用头文件及库文件即可。
 unix下直接进行make,如果有问题对makefile中的一些宏/变量进行调整。在solaris下基本没有问题。Ø
 windows下vc6编译请参考附录Ø

Snmpapp的开发

snmp++支持多种平台,主要有solaris, hp
unix, windows等。使用方法稍有不同,但原理一致,即生成库文件,进行开发应用时使用头文件及库文件即可。

  1. unix下直接进行make,如果有问题对makefile中的一些宏/变量进行调整。在solaris下基本没有问题。新版本支持snmpv3,需要用到libdes或其他加解密库。
  2. windows下vc6编译请参考附录

附录:windows下vc6编译
创建项目,加入所有的源文件和头文件后。
要在PROJECT的SETTING中设置如下项:
1 在C++页,/I 项加入AGENT++的INCLUDE和SNMP++的INCLUDE 目录
2、设置成MTd 多线程DEBUG模式。
3、 编译运行。

以上用来编译AGENT++库。
对于AGENT++的例子,要在PROJECT的SETTING中设置如下项:
1、创建WIN32的控制台程序;
2、加入程序代码;
3、加入SNMP++.LIB和AGENT++.LIB;
4、 在C++页,/I 项加入AGENT++的INCLUDE和SNMP++的INCLUDE 目录
5、设置成MTd 多线程DEBUG模式。
6、在LINK页,加入Ws2_32.lib
7、加入/nodefaultlib:"libcmtd.lib"
8、编译运行。

SNMP的工作原理&软件开发的更多相关文章

  1. 一文看懂汽车电子ECU bootloader工作原理及开发要点

    随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大.消费者对于汽车节能(经济和法规对排放的要求)型.舒适性.互联性.安全性(功能安全和信息安全)的要求越来 ...

  2. FPGA组成、工作原理和开发流程

    FPGA组成.工作原理和开发流程 原创 2012年01月07日 09:11:52 9402 0 4 ********************************LoongEmbedded***** ...

  3. ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记

    原文链接 http://sparkyuan.me/ 转载请注明出处 View的绘制流程是从ViewRoot的performTraversals方法開始的.它经过measure.layout和draw三 ...

  4. Ajax|看这一篇就够了!详解Ajax工作原理及开发步骤

    传统开发的缺点,是对于浏览器的页面,全部都是全局刷新的体验.如果我们只是想取得或是更新页面中的部分信息那么就必须要应用到局部刷新的技术. 局部刷新也是有效提升用户体验的一种非常重要的方式. Ajax技 ...

  5. FPAG结构 组成 工作原理 开发流程(转)

    FPGA组成.工作原理和开发流程 备注:下面的描述基于ALTERA系列的FPGA芯片,而且是第一次学习FPGA,其中的一部分内容是参考一些资料总结的,个人独特的分析和见解还偏少. 1. FPGA概述 ...

  6. DTU的工作原理和流程

    DTU是无线数据传输模块,采用2G,3G,4G网络,将本地串口数据经DTU打包成TCP或者UDP数据进行远程传输的设备.使用方便.已经在各行业远程数据传输,设备监控等领域大量应用.如智能仪器仪表.智能 ...

  7. Hadoop周边生态软件和简要工作原理(二)

    转自: http://www.it165.net/admin/html/201307/1532.html Sqoop: sqoop在hadoop生态系统中也是应用率比较高的软件,主要是用来做ETL工具 ...

  8. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  9. C#微信开发小白成长教程一(公众平台的工作原理与调试环境部署,附视频)

    黑夜给了我黑色的眼睛,我决定录视频到天明.半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班.不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职 ...

随机推荐

  1. CSS3—三角形

    话不多说看效果:演示效果,runjs 1.加了宽高和border,边用不同颜色显示,每条边都是一个梯形 2.去掉宽高,每条边都是三角形 3.只显示其中一条边就是不同的三角形了,是不是很简单,改变bor ...

  2. 基本STRUTS标签-学习笔记-Logic标签

    BEAN标签(name 是从别处得来的:id是自己的,相当于变量:property相当于变量的值) 前提: String str=request.getParameter("param&qu ...

  3. Java Concurrency - Lock

    Lock 是 Java API 提供的另一种线程同步机制,它提供了比 synchronized 关键字更为灵活.强大的锁定操作. 锁是控制多个线程对共享资源进行访问的工具.通常,所提供了对共享资源的独 ...

  4. Linux 命令 - w: 显示登录的用户及其当前执行的任务

    命令格式 w - [husfV] [user] 命令参数 -h 不打印头部信息 -u 当列出当前进程和 CPU 时间时忽略用户名,这主要是用于执行su命令后的情况. -s 使用简短的格式化,不打印 L ...

  5. Android 线程Thread的2种实现方法

    在讲解之前有以下三点要说明: 1.在Android中有两种实现线程Thread的方法: ①扩展java.long.Thread类: ②实现Runnable()接口: 2.Thread类是线程类,它有两 ...

  6. 删除mssqlserver表数据,使id从0开始

    ********************************* 注意备份好数据! *************************** 1.删除表数据 delete 表名 2.执行 dbcc c ...

  7. C# 日期减法

    public class DateExample { public static void Main() { DateTime dt1 = new DateTime(2012, 7, 16); Dat ...

  8. 【SQLServer】将Job运行结果发送电子邮件通知用户

    SQLServer2005/2008数据库邮件功能: 1. 启用数据库邮件功能:打开SQL Server 2005 外围应用配置器,选择“功能的外围应用配置器”,选择“数据库邮件”,勾选“启用数据库邮 ...

  9. iOS开发--UIKit控件之UISearchBar(搜索栏)

    今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...

  10. signal信号类型列表

    Linux支持的信号列表如下.很多信号是与机器的体系结构相关的 信号值 默认处理动作 发出信号的原因 SIGHUP 1 A 终端挂起或者控制进程终止 SIGINT 2 A 键盘中断(如break键被按 ...