SNMP協議詳解


簡單網絡管理協議(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請求的該字段被忽略,因為無須攜帶值)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM