SNMP的體系結(jié)構(gòu)及工作原理

什么是 SNMP?
SNMP是一系列協(xié)議組和規(guī)范,其提供了一種從網(wǎng)絡(luò)中的設(shè)備中收集網(wǎng)絡(luò)管理信息的方 法。SNMP也為設(shè)備向網(wǎng)絡(luò)管理工作站報告問題和錯誤提供了一種方法。其網(wǎng)絡(luò)管理主 要分為四部分被管理節(jié)點(設(shè)備)、代理、網(wǎng)絡(luò)管理工作站、網(wǎng)絡(luò)管理協(xié)議。

SNMP主要部分
 被管理節(jié)點(設(shè)備)網(wǎng)絡(luò)管理協(xié)議  被監(jiān)控設(shè)備
 代理  用來跟蹤被管理設(shè)備狀態(tài)的特殊軟件或固件
 網(wǎng)絡(luò)管理工作站  與在不同的被管理節(jié)點中的代理通信,并且顯示這些代理狀態(tài)的中心設(shè)備
 網(wǎng)絡(luò)管理協(xié)議  被網(wǎng)絡(luò)管理工作站和代理用來交換信息的協(xié)議

從被管理設(shè)備中收集數(shù)據(jù)所遵循的原則及采用的方式
設(shè)計和構(gòu)造網(wǎng)絡(luò)管理的基礎(chǔ)結(jié)構(gòu)時,需要遵守下列兩條網(wǎng)絡(luò)管理的原則:

  • 由于管理信息而帶來的通信量不應(yīng)明顯的增加網(wǎng)絡(luò)的通信量。
  • 被管理設(shè)備上的協(xié)議代理不應(yīng)明顯得增加系統(tǒng)處理的額外開銷,以致于該設(shè)備 的主要功能都被削弱了。
    因此從被管理設(shè)備中收集數(shù)據(jù)重要有兩種方法:一種是只輪詢(polling-only)的方法, 另一種是基于中斷(interrupt-based)的方法。

面向自陷的輪詢方法(trap-directed polling)是網(wǎng)絡(luò)管理采用較有效的方式。網(wǎng)絡(luò)管理工作站輪詢在被管理設(shè)備中的代理來收集所需的數(shù)據(jù),并且在控制平臺上使用數(shù)字或圖形的方式來顯示所收集的數(shù)據(jù),同時被管理設(shè)備中的代理可以在任何時候向網(wǎng)絡(luò)管理工作站報告錯誤情況,如預(yù)制定閾值越界程度等,即所謂的SNMP自陷(trap)。

代理的概念及所提供的服務(wù)
管理代理(agent)是一種特殊的軟件(或固件),它包含了關(guān)于一個特殊設(shè)備及該設(shè)備所處環(huán)境的信息。
其提供的服務(wù):

  • 網(wǎng)絡(luò)管理工作站可以從代理中獲得相關(guān)設(shè)備的信息。
  • 網(wǎng)絡(luò)管理工作站可以修改、增加或者刪除代理中的相關(guān)表項。
  • 網(wǎng)絡(luò)管理工作站可以為一個特定的自陷設(shè)置閾值。
  • 代理可以向網(wǎng)絡(luò)管理工作站發(fā)送自陷

MIB概念
MIB被稱為管理信息庫,一個MIB描述了包含在數(shù)據(jù)庫中的對象或表項。

簡單網(wǎng)絡(luò)管理協(xié)議

SNMP請求/響應(yīng)報文
簡單網(wǎng)絡(luò)管理協(xié)議允許網(wǎng)絡(luò)管理工作站軟件與被管理設(shè)備中的代理進行通信。這種通信可以包括來自管理工作站的詢問消息、來自代理的應(yīng)答消息或者來自代理給管理工作站的自陷消息。
SNMPv1實現(xiàn)起來很簡單,其包含5個請求/響應(yīng)原語:

  • get-request
  • set-request
  • get-next-request
  • get-response
  • trap

報文格式

IP首部 UDP首部 版本 共同體  PDU類型(0-3) 請求標識  差錯狀態(tài)(0-5) 差錯索引 名稱  值 名稱  值  ...

 PDU類型4  企業(yè)  代理地址  Trap類型(0-6)  特定代碼  時間戳  名稱  值  ...

 PDU類型  名稱
 0  Get-request
 1  Get-next-request
 2  Get-response
 3  Set-request
 4  Trap

SNMP開發(fā)工具

開發(fā)工具的使用
AdventNet所提供的的開發(fā)工具包,支持多種平臺。

  • Agent++
  • SNMP++

Microsoft Virtual Studio 6.0,Windows下c++語言的開發(fā)包。MS自身提供一組稱為WinSNMP的API(在MSDN中提供詳細文檔),而且MS提供基于Agent Service的SNMP Extension Agent開發(fā)。

ucd-snm(net-snmp)p是Linux平臺下著名的C語言SNMP開發(fā)包,公開源碼,是最常用的開發(fā)Agent的軟件包。

輔助工具的使用
AdventNet所提供的對mib開發(fā)一系列開發(fā)工具包,包括:

  • Mib Browser
  • Mib Editor
  • Mib Compiler

熟悉SNMP的開發(fā)過程
SNMP開發(fā)流程

Mib的創(chuàng)建和源碼生成
首先第一步是Mib設(shè)計,開始Mib設(shè)計的時候要確定將被管理的對象納入管理信息庫,最終實現(xiàn)asn.1的文檔,在此可以使用AdventNet所提供的Mib Editor來實現(xiàn)。通過Mib編譯器將asn.1的文檔編譯成c文件和頭文件,可以使用Mib Compiler編譯。

Agent的開發(fā)
Agent++支持多種平臺,主要有solaris, hp unix, windows等。使用方法稍有不同,但原理一致,即生成庫文件,進行開發(fā)應(yīng)用時使用頭文件及庫文件即可。
? unix下直接進行make,如果有問題對makefile中的一些宏/變量進行調(diào)整。在solaris下基本沒有問題。
? windows下vc6編譯請參考附錄

Snmpapp的開發(fā)
snmp++支持多種平臺,主要有solaris, hp unix, windows等。使用方法稍有不同,但原理一致,即生成庫文件,進行開發(fā)應(yīng)用時使用頭文件及庫文件即可。

  • unix下直接進行make,如果有問題對makefile中的一些宏/變量進行調(diào)整。在solaris下基本沒有問題。新版本支持snmpv3,需要用到libdes或其他加解密庫。
  • windows下vc6編譯請參考附錄

附錄:windows下vc6編譯
創(chuàng)建項目,加入所有的源文件和頭文件后。
要在PROJECT的SETTING中設(shè)置如下項:
1 在C++頁,/I 項加入AGENT++的INCLUDE和SNMP++的INCLUDE 目錄
2、設(shè)置成MTd 多線程DEBUG模式。
3、 編譯運行。

以上用來編譯AGENT++庫。
對于AGENT++的例子,要在PROJECT的SETTING中設(shè)置如下項:
1、創(chuàng)建WIN32的控制臺程序;
2、加入程序代碼;
3、加入SNMP++.LIB和AGENT++.LIB;
4、 在C++頁,/I 項加入AGENT++的INCLUDE和SNMP++的INCLUDE 目錄
5、設(shè)置成MTd 多線程DEBUG模式。
6、在LINK頁,加入Ws2_32.lib
7、加入/nodefaultlib:"libcmtd.lib"
8、編譯運行。