簡單網絡管理協議(SNMP:Simple Network Management Protocol)是一套網絡管理協議,注意,SNMP是一個強大的網絡管理協議,而不是"簡單"的。利用SNMP,一個管理工作站可以遠程管理所有支持這種協議的網絡設備,包括監視網絡狀態、修改網絡設備配置、接收網絡事件警告等。
TCP/IP網絡管理由3部分組成:
- 一個管理信息庫M I B( Management Information Base)。管理信息庫包含所有代理進程的所有可被查詢和修改的參數。
- 關於 M I B的一套公用的結構和表示符號。叫做管理信息結構 S M I( Structure ofManagement Information)。這個在RFC 1155 [Rose and McCloghrie 1990] 中定義。例如: S M I定義計數器是一個非負整數,它的計數范圍是 0~4 294 967 295,當達到最大值時,又從 0開始計數。
- 管理進程和代理進程之間的通信協議,叫做簡單網絡管理協議 S N M P( Simple NetworkManagement Protocol)。在RFC 1157 [Case et al. 1990]中定義。 S N M P包括數據報交換的格式等。盡管可以在運輸層采用各種各樣的協議,但是在 S N M P中,用得最多的協議還是 U D P。
SNMP版本到目前為止有3個版本,分別是v1、v2、v3。
SNMP協議
SNMP管理進程與代理進程之前為了交互信息,定義了5種報文:
- g e t - r e q u e s t操作:從代理進程處提取一個或多個參數值。
- g e t - n e x t - r e q u e s t操作:從代理進程處提取一個或多個參數的下一個參數值。
- s e t - r e q u e s t操作:設置代理進程的一個或多個參數值。
- g e t - r e s p o n s e操作:返回的一個或多個參數值。這個操作是由代理進程發出的。
- t r a p 操作:代理進程主動發出的報文,通知管理進程有某些事情發生。
以上3個操作是由管理進程向代理進程發出的,后面2個是由代理進程發給管理進程的。管理進程發出的前面 3種操作采用 U D P的1 6 1端口。代理進程發出的 Tr a p操作采用 U D P的1 6 2端口。由於收發采用了不同的端口號,所以一個系統可以同時為管理進程和代理進程。
SNMP報文格式
PDU類型的取值范圍是0-4,正好表示5種SNMP消息。差錯狀態字段是一個整數,它是由代理進程標注的,指明有差錯發生。
MIB-管理信息庫
所謂管理信息庫,或者M I B,就是所有代理進程包含的、並且能夠被管理進程進行查詢和設置的信息的集合。MIB是基於對象標識樹的,對象標識是一個整數序列,中間以"."分割,這些整數構成一個樹型結構,類似於 D N S或U n i x的文件系統。
M I B被划分為若干個組,如s y s t e m、 i n t e r f a c e s、 a t(地址轉換)和i p組等。i s o . o r g . d o d . i n t e r n e t .p r i v a t e . e n t e r p r i s e s( 1 . 3 . 6 . 1 . 4 . 1)這個標識,是給廠家自定義而預留的,比如華為的為1.3.6.1.4.1.2011,華三的為1.3.6.1.4.1.25506。
當對MIB變量進行操作,如查詢和設置變量的值時,必須對M I B的每個變量進行標識。注意,只有葉子結點是可操作的,上圖中的m i b、 u d p等節點就不是葉子節點。
MIB表格都至少有一個索引,對於UDP監聽表來說,M I B定義了包含兩個變量的聯合索引,這兩個變量是: u d p L o c a l A d d r e s s,它是一個I P地址; u d p L o c a l P o r t,它是一個整數。下圖是一個UDP監聽表的索引示例:
M I B表格是根據其對象標識按照字典的順序進行排序的。如果表格有2個索引的話,首先根據第一索引來進行排序,如果第一索引相同,則根據第二索引來排序。下圖是一個UDP監聽表的字典序排列:
在上面的表格中,如果對udpLocalAddress.0.0.0.100進行get操作,則直接返回為空;如果對udpLocalAddress.0.0.0.100進行get next操作,因為udpLocalAddress.0.0.0.100是介於udpLocalAddress.0.0.0.67和udpLocalAddress.0.0.0.161之間,所以應該返回udpLocalAddress.0.0.0.161對應的數據值。
在表格中,一個給定變量(在這里指 u d p L o c a l A d d r e s s)的所有實例都在下個變量(這里指 u d p L o c a l P o r t)的所有實例之前顯示。這暗示表格的操作順序是“先列后行”的次序。這是由於對對象標識進行字典式排序所得到的,而不是按照人們的閱讀習慣而排列的。
用MIB瀏覽器可以與網絡設備進行通信,比如我們以sysDescr的最后一項數據為輸入條件進行get next操作,則會返回sysUpTime的第一項數據。
MIB瀏覽器與設備通信完整流程
SNMP(或者說MIB)開發中,使用MIB瀏覽器進行測試是必不可少的,它可以直觀的顯示和配置設備相關的數據。比如在MIB瀏覽器對UDP監聽表進行walk操作(walk操作其實是get next操作,直到遍歷完UDP監聽表中全部數據為止),第一次進行get next操作,因為沒有輸入任何數據,所以一級索引和二級索引都為默認值,也就是非法值。然后設置SNMP協議類型為get next,通過網絡將數據包發送到設備。
設備首先要運行SNMP程序,這里就暫時稱為snmpd守護進程,當守護進程接收到數據包時,進行解析,發現是get next操作,並且一級索引和二級索引都是默認值,則表示需要獲取UDP監聽表中的第一項數據,在守護進程獲取第一項數據完畢后,就把該數據封裝到SNMP的get response數據包中,通過網絡返回給MIB瀏覽器,這里注意數據的字節序問題。
在MIB瀏覽器中收到返回的數據包時,進行解析並顯示出來。然后記錄下返回的兩個索引值,接着將這兩個索引值作為數據數據進行下一次的get next操作,此時一級索引和二級索引都是有效值了。那什么時候結束呢,當守護進程返回END_OF_TABLE標志時表示整個UDP表數據都遍歷完了。
參考:
1、《TCP/IP詳解 卷一》