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 | 企業 | 代理地址 | Trap類型(0-6) | 特定代碼 | 時間戳 | 名稱 | 值 | ... |
PDU類型 | 名稱 |
0 | Get-request |
1 | Get-next-request |
2 | Get-response |
3 | Set-request |
4 | Trap |
SNMP開發工具
開發工具的使用
AdventNet所提供的的開發工具包,支持多種平台。
- Agent++
- 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等。使用方法稍有不同,但原理一致,即生成庫文件,進行開發應用時使用頭文件及庫文件即可。
- 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、編譯運行。