SNMP協議詳解

SELF_IMPR小灰發表於2013-10-29
簡單網路管理協議(SNMP)是TCP/IP協議簇的一個應用層協議。在1988年被制定,並被Internet體系結構委員會(IAB)採納作為一個短期的網路管理解決方案;由於SNMP的簡單性,在Internet時代得到了蓬勃的發展,1992年釋出了SNMPv2版本,以增強SNMPv1的安全性和功能。現在,已經有了SNMPv3版本。

一套完整的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請求的該欄位被忽略,因為無須攜帶值)。

相關文章