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ā)工具包,支持多種平臺。
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、編譯運行。