SNMP的工作原理&軟件開發


  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、編譯運行。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM