SNMP的工做原理&軟件開發

  SNMP(Simple Network Management Protocol,簡單網絡管理協議)首先是由IETF的研究小組爲了解決Internet上的路由器管理問題而提出的。SNMP的設計原則是簡單 性和擴展性。簡單性是經過信息類型限制、請求響應或協議而取得。擴展性是經過將管理信息模型與協議、被管理對象的詳細規定(MIB)分離而實現的。

  

  網絡管理體系結構node

  

  SNMP的網絡管理模型包括如下關鍵元素:管理站、代理者、管理信息庫、網絡管理協議。管理站通常是一個分立的設備,也能夠利用共享系統實現。管理站做爲網絡管理員與網絡管理系統的接口,它的基本構成爲:一組具備分析數據、發現故障等功能的管理程序; 一個用於網絡管理員監控網絡的接口; 將網絡管理員的要求轉變爲對遠程網絡元素的實際監控的能力; 一個從全部被管網絡實體的MIB中抽取信息的數據庫。c++

  

  網絡管理系統中另外一個重要元素是代理者。裝備了SNMP的平臺,如主機、網橋、路由器及集線器都可做爲代理者工做。代理者對來自管理站的信息請求和動做請求進行應答,並隨機地爲管理站報告一些重要的意外事件。數據庫

  

  網絡資源被抽象爲對象進行管理。但SNMP中的對象是表示被管資源某一方面的數據變量。對象被標準化爲跨系統的類,對象的集合被組織爲管理信息庫(MIB)。MIB做爲設在代理者處的管理站訪問點的集合,管理站經過讀取MIB中對象的值來進行網絡監控。管理站能夠在代理者處產生動做,也能夠經過修改變量值改變代理者處的配置。windows

  

  管理站和代理者之間經過網絡管理協議通訊,SNMP通訊協議主要包括如下能力。安全

  

  Get:管理站讀取代理者處對象的值。網絡

  

  Set:管理站設置代理者處對象的值。多線程

  

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

  

  在標準中,沒有特別指出管理站的數量及管理站與代理者的比例。通常地,應至少要有兩個系統可以完成管理站功能,以提供冗餘度,防止故障。分佈式

  

  網絡管理協議環境工具

  

  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 目錄
二、設置成MTd 多線程DEBUG模式。
三、 編譯運行。

 

以上用來編譯AGENT++庫。 對於AGENT++的例子,要在PROJECT的SETTING中設置以下項: 一、建立WIN32的控制檯程序; 二、加入程序代碼; 三、加入SNMP++.LIB和AGENT++.LIB; 四、 在C++頁,/I 項加入AGENT++的INCLUDE和SNMP++的INCLUDE 目錄 五、設置成MTd 多線程DEBUG模式。 六、在LINK頁,加入Ws2_32.lib 七、加入/nodefaultlib:"libcmtd.lib" 八、編譯運行。

相關文章
相關標籤/搜索