一套完整的SNMP系統主要包括管理信息庫(MIB)、管理信息結構(SMI)及SNMP報文協議。
(1)管理信息庫MIB:任何一個被管理的資源都表示成一個對象,稱為被管理的對象。MIB是被管理對象的集合。它定義了被管理對象的一系列屬性:對象的名稱、對象的訪問權限和對象的數據類型等。每個SNMP設備(Agent)都有自己的MIB。MIB也可以看作是NMS(網管系統)和Agent之間的溝通橋梁。它們之間的關系如圖1所示。

圖1 NMS Agent和MIB的關系
MIB文件中的變量使用的名字取自ISO和ITU管理的對象標識符(object identifier)名字空間。它是一種分級樹的結構。如圖2所示,第一級有三個節點:ccitt、iso、iso-ccitt。低級的對象ID分別由相關組織分配。一個特定對象的標識符可通過由根到該對象的路徑獲得。一般網絡設備取iso節點下的對象內容。如名字空間ip結點下一個名字為ipInReceives的MIB變量被指派數字值3,因而該變量的名字為:
iso.org.dod.internet.mgmt.mib.ip.ipInReceives
相應的數字表示(對象標識符OID,唯一標識一個MIB對象)為:
1.3.6.1.2.1.4.3
圖2 MIB樹結構
當網絡管理協議在報文中使用MIB變量時,每個變量名后還要加一個后綴,以作為該變量的一個實例。如ipInReceives的實例數字表示為:1.3.6.1.2.1.4.3.0.
需要注意的是,MIB中的管理對象的OID有些需要動態確定,如IP路由表,為了指明地址202.120.86.71的下一站路由(next hop),我們可以引用這樣的實例:
iso.org.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.202.120.86.71, 相應的數字表示為:1.3.6.1.2.1.4.21.1.7.202.120.86.71
對於這種動態對象標識的實例,由於無法轉換為預先指定的Readkey名稱,與飛鄰的產品架構沖突(需要動態生成可變Readkey),暫不考慮支持。
(2)管理信息結構(SMI)
SMI定義了SNMP框架所用信息的組織、組成和標識,它還為描述MIB對象和描述協議怎樣交換信息奠定了基礎。
SMI定義的數據類型:
◆ 簡單類型(simple)
Integer:整型是-2,147,483,648~2,147,483,647的有符號整數
octet string: 字符串是0~65535個字節的有序序列
OBJECT IDENTIFIER: 來自按照ASN.1規則分配的對象標識符集
◆ 簡單結構類型(simple-constructed)
SEQUENCE 用於列表。這一數據類型與大多數程序設計語言中的“structure”類似。一個SEQUENCE包括0個或更多元素,每一個元素又是另一個ASN.1數據類型
SEQUENCE OF type 用於表格。這一數據類型與大多數程序設計語言中的“array”類似。一個表格包括0個或更多元素,每一個元素又是另一個ASN.1數據類型。
◆ 應用類型(application-wide)
IpAddress: 以網絡序表示的IP地址。因為它是一個32位的值,所以定義為4個字節;
counter:計數器是一個非負的整數,它遞增至最大值,而后回零。在SNMPv1中定義的計數器是32位的,即最大值為4,294,967,295;
Gauge :也是一個非負整數,它可以遞增或遞減,但達到最大值時保持在最大值,最大值為232-1;
time ticks:是一個時間單位,表示以0.01秒為單位計算的時間;
(3)SNMP報文協議
SNMP定義了以下五種操作:
1. get-request 從一個指明的變量讀取值
2. set-request 將一個值存到一個指明的變量中
3. get-next-request 遍歷表格變量的值
4. get-response 對一個讀取操作的回答
5. trap 由一個事件觸發的回答
本設計相關的操作包括1/3/4.
一個SNMP報文由三個主要部分組成:一個協議版本(version),一個SNMP共同體(community)標識符,和一個數據區。數據區分成若干個協議數據單元PDU(Protocol Data Unit),每個PDU包括一個請求(由管理系統發送)或一個響應(由管理代理發送)。
· PDU Type:指明PDU類型(GetRequest、GetNextRequest、SetRequest、Trap);
· Request ID:SNMP請求標識;
· Error Status:表示錯誤和錯誤類型,只有響應操作才設置該字段,其他操作將該字段設為0;
· Error Index:錯誤索引號,與特定對象實例的錯誤相關,只有響應操作才設置該字段,其他操作將該字段設為0;
· Variable Bindings:SNMPv1 PDU的數據字段,攜帶特定對象實例的當前值(Get and GetNext請求的該字段被忽略,因為無須攜帶值)。
