SNMP的體繫結構及工作原理
什麼是 SNMP?
SNMP是一系列協議組和規範,其提供了一種從網路中的裝置中收集網路管理資訊的方 法。SNMP也為裝置向網路管理工作站報告問題和錯誤提供了一種方法。其網路管理主 要分為四部分被管理節點(裝置)、代理、網路管理工作站、網路管理協議。
SNMP主要部分
| 被管理節點(裝置)網路管理協議 |
被監控裝置 |
| 代理 |
用來跟蹤被管理裝置狀態的特殊軟體或韌體 |
| 網路管理工作站 |
與在不同的被管理節點中的代理通訊,並且顯示這些代理程式狀態的中心裝置 |
| 網路管理協議 |
被網路管理工作站和代理用來交換資訊的協議 |
從被管理裝置中收集資料所遵循的原則及採用的方式
設計和構造網路管理的基礎結構時,需要遵守下列兩條網路管理的原則:
- 由於管理資訊而帶來的通訊量不應明顯的增加網路的通訊量。
- 被管理裝置上的協議代理不應明顯得增加系統處理的額外開銷,以致於該裝置 的主要功能都被削弱了。
因此從被管理裝置中收集資料重要有兩種方法:一種是只輪詢(polling-only)的方法, 另一種是基於中斷(interrupt-based)的方法。
面向自陷的輪詢方法(trap-directed polling)是網路管理採用較有效方式。網路管理工作站輪詢在被管理裝置中的代理來收集所需的資料,並且在控制平台上使用數字或圖形的方式來顯示所收集的資料,同時被管理裝置中的代理可以在任何時候向網路管理工作站報告錯誤情況,如預製定閾值越界程度等,即所謂的SNMP自陷(trap)。
代理的概念及所提供的服務
管理代理程式(agent)是一種特殊的軟體(或韌體),它包含了關於一個特殊裝置及該裝置所處環境的資訊。
其提供的服務:
- 網路管理工作站可以從代理中獲得相關裝置的資訊。
- 網路管理工作站可以修改、增加或者刪除代理中的相關表項。
- 網路管理工作站可以為一個特定的自陷設定閾值。
- 代理可以向網路管理工作站發送自陷。
MIB概念
MIB被稱為管理資訊庫,一個MIB描述了包含在資料庫中的對象或表項。
簡易網路管理通訊協定
SNMP請求/響應報文
簡易網路管理通訊協定允許網路管理工作站軟體與被管理裝置中的代理進行通訊。這種通訊可以包括來自管理工作站的詢問訊息、來自代理的應答訊息或者來自代理給管理工作站的自陷訊息。
SNMPv1實現起來很簡單,其包含5個請求/響應原語:
- get-request
- set-request
- get-next-request
- get-response
- trap
報文格式
| IP首部 |
UDP首部 |
版本 |
共同體 |
PDU類型(0-3) |
請求標識 |
差錯狀態(0-5) |
差錯索引 |
名稱 |
值 |
名稱 |
值 |
... |
| PDU類型4 |
企業 |
Proxy 位址 |
Trap類型(0-6) |
特定代碼 |
時間戳記 |
名稱 |
值 |
... |
| PDU類型 |
名稱 |
| 0 |
Get-request |
| 1 |
Get-next-request |
| 2 |
Get-response |
| 3 |
Set-request |
| 4 |
Trap |
SNMP開發工具
開發工具的使用
AdventNet所提供的的開發套件,支援多種平台。
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等。使用方法稍有不同,但原理一致,即產生庫檔案,進行開發應用時使用標頭檔及庫檔案即可。
- unix下直接進行make,如果有問題對makefile中的一些宏/變數進行調整。在solaris下基本沒有問題。新版本支援snmpv3,需要用到libdes或其他加解密庫。
- 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、編譯運行。