SNMP相關基本概念

簡單闡述瞭如下幾個方面:
1. 網絡管理的概念
2. SNMP相關概念
3. SNMP通訊方式
4. SNMP安全性
5. SNMP操作
6. SNMP中的報文格式

[@more@]

一、 網絡管理的概念

狹義的網絡管理僅僅指網絡的通信量管理,而廣義的網絡管理指網絡的系統管理。網絡管理功能可概括爲OAMP,即網絡的運行(Operation)、處理(Administration)、維護(Maintenance)、服務提供(Provisioning)等所需要的各種活動。有時也考慮前三種,即把網絡管理功能歸結爲OAM

網絡管理通常用到以下術語:

l 網絡元素(network element

網絡中具體的通信設備或邏輯實體,又稱網元。

l 對象(object

通信和信息處理範疇裏可標識的切擁有一定信息特性的資源。但應注意,這裏所用的“對象”與面向對象系統中所定義的對象並不完全一樣。

l 被管理對象(managed object

被管理對象指可使用管理協議進行管理和控制的網絡資源的抽象表示。例如,一個層的實體或一個連接。

l 管理信息庫MIB

MIB是網絡管理系統中的重要構件,它有一個系統內的許多被管對象及其屬性組成。MIB這個概念實際上就是一個虛擬數據庫。這個數據庫提供有關被管理網絡元素的信息,而這些信息由管理進程和各個代理進程共享。MIB由管理進程和各個代理進程共同使用。

l 綜合網絡管理INM

用統一的方法在一個異構網絡中管理多廠商生產的計算機硬件和軟件資源。這也稱爲一體化網絡管理。

二、 SNMP相關概念

SNMP的基本功能包括監視網絡性能、檢測分析網絡差錯和配置網絡設備等。在網絡正常工作時,SNMP可實現統計、配置和測試等功能。當網絡出故障時,可實現各種差錯檢測和恢復功能。

SNMP中的幾個重要概念:

l 管理進程NMS

管理進程可以向代理進程詢問某些參數值以外,它還可以按要求改變代理進程的參數值。負責發送請求和接收代理進程發過來的trap信息。

l 委託代理(proxy agent

爲沒有SNMP服務的設備提供資源信息,委託代理能提供如協議轉換和過濾操作的彙集功能。然後委託代理來對管理對象進行管理。

l 代理進程Agent

被管設備端和管理相關的軟件叫做代理程序(agent)或代理進程。管理進程和代理進程之間的通信可以有兩種方式。一種是管理進程向代理進程發出請求,詢問一個具體的參數值。另外一種方式是代理進程主動向管理進程報告有某些重要的事件發生。

l community (共同體)

共同體實際上就是用來實現管理應用實體之間身份鑑別的,可以把它理解爲一個帶有權限的登陸賬戶,這是訪問網絡設備的重要憑據。假如communitypublic,其權限是隻讀的,那你一 以此用戶登陸就可以查看有關記錄的數據。如果其權限是讀寫的,你就有權修改其中的一些設置,如封鎖某一個交換機的端口。大部分默認情況下,以public作爲只讀community,以private作爲讀寫community

l MIBManagement Information Base

稱爲管理信息庫,包含所有代理進程的所有可被查詢和修改的參數。

l SMIStructure of Management Information

叫做管理信息結構,是MIB的一套公用的結構和表示符號。SMI定義了一個設備維護的規則集,用於對被管理對象進行命名和編碼。

l OID(對象標誌符)

是以SMI(Structure of Management Information)管理信息結構爲基礎的一系列點分符號,這些點分符號在任何網絡設備中都唯一標識某一個數據參數。他們的集合我們稱爲MIB(Management Information Base)管理信息庫。

三、 SNMP通訊方式

 

SNMP代理和管理站通過SNMP協議中的標準消息進行通信,每個消息都是一個單獨的數據報。SNMP使用UDP(用戶數據報協議)作爲第四層協議(傳輸協議),進行無連接操作。 SNMP規定了5種協議消息(也就是SNMP報文),用來在管理進程和代理之間的交換。

整個系統必須有一個管理站(management station),它實際上是網控中心。在管理站內運行管理進程。在每個被管對象中一定要有代理進程。管理進程和代理進程利用SNMP報文進行通信,而SNMP報文又使用UDP來傳送。管理進程和代理進程之間的通信可以有兩種方式。一種是管理進程向代理進程發出請求,詢問或設置一個具體的參數值,稱爲Polling;而另一種則是代理進程主動向管理進程報告某些重要事件發生,成爲TrapSNMP中默認的agent接聽端口是161,而接收trap的端口爲162

圖中有兩個主機和一個路由器。這些協議棧中帶有陰影的部分是原來這些主機和路由器所具有的,而沒有陰影的部分是爲實現網絡管理而增加的。

有時網絡管理協議無法控制某些網絡元素,例如該網絡元素使用的是另一種網絡管理協議。這時可使用委託代理(proxy agent)。

四、 SNMP安全性

SNMPv1採用了“共同體”的字段作爲管理進程和代理進程的鑑別密碼,只有具有相應的“共同體名”,纔有訪問權限,這種方式只是簡單的明文交換方式;SNMPv2 的安全機制沒有本質的改進;SNMPv3提出了新的安全機制,同時還有一套專門的網絡安全和訪問控制規則。

有三種共同體名稱:read-only, read-write, trap。在默認情況下,public獲取只讀,private獲得讀寫權限。

五、 SNMP操作

SNMP協議主要有五種報文getget-nextsetget-responsetrap

l get-request操作:從代理進程處提取一個或多個參數值

l get-next-request操作:從代理進程處提取緊跟當前參數值的下一個參數值

l set-request操作:設置代理進程的一個或多個參數值

l get-response操作:返回的一個或多個參數值。這個操作是由代理進程發出的,它是前面三種操作的響應操作。

l trap操作:代理進程主動發出的報文,通知管理進程有某些事情發生。

其中前三種報文是管理進程發出的;後兩種是代理進程發出的。在代理進程端是用熟知端口161倆接收getset報文,而在管理進程端是用熟知端口162來接收trap報文。

下面具體講解5種SNMP操作。

(1) get-request操作

管理站需要主動向agent讀取管理對象的值,以獲得設備或網絡的運行數據和管理信息,進而規劃網絡管理。SNMP不支持一次讀取一張表或表中一行數據。但是當需要讀取多個數據,如果分多次讀取則會提高網絡負擔,所以,Get-Request支持一次提交多個對象標識(OID),以便一次獲取他們的值,提高網絡利用率。

(2) get-next-request操作

SNMP不支持一次讀取一張表或表中一行數據的讀取,Get-Next-Request提供了一種簡單的方法。對一個OID進行Get-Next-Request操作,將會收到一個下一個可讀取的對象的實例標識,接着對他Get-Next-Request將會得到再下一個實例標識,不斷執行下去,將可以讀取完整張表。一方面Get-Next-Request實現很簡單,但是在讀取表中數據的時候卻不可避免地有一個大麻煩。表中的數據是以行爲單位,每一行又由若干列組成,如果讀取一行數據,應該讀取這一行的每一列,但是SNMPGet-Next-Request表時是先列後行,就是說先把第一列中所有行數據讀取完,再讀取下一列所有行。這樣,客戶端就需要做很多工作。另一方面,這樣顯然傳遞了很多不必要的數據,浪費了帶寬。跟Get-Request一樣,Get-Next-Request可以在PDU裏綁定多個OID或實例標識,以提高效率。同樣的,綁定多個OID情況下,相應的Get-ResponsePDU同樣會返回每一個OID的下一個可用實例標識標識符或相應錯誤。利用綁定多個OID可以比單個執行Get-Next-Request有效率。

(3) set-request操作

網絡管理中,有時需要對設備的一些參數、配置、狀態進行重新配置。需要一種遠程的管理機制,Set-Request就是這樣的操作。set操作可以對MIB中權限爲:write-onlyread-write的對象進行set操作。

儘管set操作爲改變配置提供了一種比較方便的方法,但是SNMP並沒有直接提供操作遠程設備的操作。但這不代表SNMP沒有這種能力,我們可以藉助於Set-Request操作間接地實現這一性能。設備通過MIB定義一個操作的對象,類型爲write-onlyread-write,約定操作取值,NMS可以對這個對象進行設置,設備以自己的方式得知此對象的值改變後,可以按照對象取值的含義執行操作,從而實現遠程控制。

set操作也允許一次提供幾個set的對象和值,以便在一個PDU裏操作多個對象。set操作的成功應答包裏包含設置的對象的最新取值(也就是設置的值)。

(4) get-response操作

GetResponsegetsetgetNext進行應答,由agent被動地產生併發出。當操作成功地被執行時,GetResponsePDU裏包含操作中請求操作的對象oid和他們的值。前面提到,前三種操作都支持在一個PDU裏綁定多個對象,相應的GetResponse應答也包含相應變量的值。對於失敗的操作,GetResponse需要在PDU裏標註相應的錯誤代碼。GetResponse對請求數據包裏的request-id域不操作,原數返回,以使請求端能將應答包和請求包準確匹配,同時也可以作爲請求和接收方校驗重複數據包的依據。

當操作成功時,error-status值爲noErrorerror-index0variablebindings中的變量的value域填上相應值。

當操作失敗時,error-status爲相應的錯誤代碼,如果錯誤由variablebindings組中某個對象引起,則error-index爲該對象在variablebindings中的索引。

(5) trap操作

SNMP的前三種操作是NMS主動發起的操作,網絡中存在大量的設備,NMS輪循一次需要一段時間,如果設備發生了重要的狀態改變,等到下一次輪循到來,可能已經失去實時性,NMS不能及時掌握設備數據或狀態的變化。另一方面,考慮到對網絡的佔用,又不可能以很小的間隔去輪循設備。所以,需要一種機制讓設備能夠自主地發出警報,通知狀態或配置的改變和其它一些重要事件。Trap就是由agent主動發出的警報PDU,通知NMS重要的改變。

RFC 1157中定義了5種常見類型的Trap,用於這些常見網絡狀態的報警。另外提供了一個自定義的類型,並提供一個PDU單元提供自定義Trap的子代碼,用於SNMP的實現者定義和發送自己的Trap

另一方面,但Trap也有一些問題,因爲SNMP使用的是UDP,無連接的數據報,Trap有可能不能傳遞到NMS,另一方面agent不知道NMS是否收到Trap。另外,發送Trap一般都是由重要的狀態引起的,某些情況下,系統發生了災難性的故障,導致Trap也無法發出,比如系統崩潰、網絡故障等。所以,一個網絡管理系統要綜合使用這些操作,互爲補充,才能建立一個可靠的管理系統。單獨依靠每一種操作都有片面性。

RFC裏沒有提到如何判斷SNMP是否丟失,但按照TCP/IP協議特徵可以做常識性的判斷,比如GetRequestGetNextRequest,如果在設定的時間內沒有收到agentGetResponse應答包,就可以認爲GetRequestGetNextRequestGetResponse丟失,可以嘗試下一次請求,直至有結果或無應答放棄。對SetRequest而言,執行SetRequest以後,可以發送一個GetRequest查詢是否set成功。 Trap由於是單向的數據報,沒有應答,沒有辦法判斷是否成功發送到目的地,需要由NMS的主動輪循來檢測。

v2和v3版本中,對SNMP的操作做了一些修改,加入了別的操作,增強了安全性。如:SNMP v2-Trap的PDU結構跟GetRequest、GetNextRequest、SetRequest、InformRequest相同,而不是v1中擁有自己特殊的格式。InformRequest:管理站向另一個管理站報告通報的消息。InformRequest是SNMP v2引入的新的操作,由管理站發起,向另一個管理站報告狀態或數據,與Trap不同,InformRequest需要得到接收方的應答。GetBulkRequest:管理站向代理讀取表中若干行的操作。六、SNMP中的報文格式

5種操作的SNMP報文是封裝成UDP數據報格式。可見一個SNMP報文共有三個部分組成,即公共SNMP首部、get/set首部trap首部、變量綁定。

1)公共SNMP首部

共三個字段:

l 版本

整型,寫入版本字段的是版本號減1,故:第1版取值爲0,第二版取值爲1,第三版取值爲2。默認取值爲0,即第一版。

l 共同體(community)

共同體就是一個字符串,作爲管理進程和代理進程之間的明文口令,常用的是6個字符“public”。

l PDU類型

根據PDU的類型,填入0~4中的一個數字,其對應關係如表2所示意圖。

 

2 PDU類型

PDU類型

名稱

0

get-request

1

get-next-request

2

get-response

3

set-request

4

trap

2)get/set首部

l 請求標識符(request ID)

這是由管理進程設置的一個整數值。代理進程在發送get-response報文時也要返回此請求標識符。管理進程可同時向許多代理髮出get報文,這些報文都使用UDP傳送,先發送的有可能後到達。設置了請求標識符可使管理進程能夠識別返回的響應報文對於哪一個請求報文。

l 差錯狀態(error status)

由代理進程回答時填入0~5中的一個數字,見表3的描述。

3 差錯狀態描述

差錯狀態

名字

說明

0

noError

一切正常

1

tooBig

代理無法將回答裝入到一個SNMP報文之中

2

noSuchName

操作指明瞭一個不存在的變量

3

badValue

一個set操作指明瞭一個無效值或無效語法

4

readOnly

管理進程試圖修改一個只讀變量

5

genErr

某些其他的差錯

l 差錯索引(error index)

當出現noSuchName、badValue或readOnly的差錯時,由代理進程在回答時設置的一個整數,它指明有差錯的變量在變量列表中的偏移。

3trap首部

l 企業(enterprise)

填入trap報文的網絡設備的對象標識符。此對象標識符肯定是在圖3的對象命名樹上的enterprise結點{1.3.6.1.4.1}下面的一棵子樹上。

l trap類型

此字段正式的名稱是generic-trap,共分爲表4中的7種。

4 trap類型描述

trap類型

名字

說明

0

coldStart

代理進行了初始化

1

warmStart

代理進行了重新初始化

2

linkDown

一個接口從工作狀態變爲故障狀態

3

linkUp

一個接口從故障狀態變爲工作狀態

4

authenticationFailure

SNMP管理進程接收到具有一個無效共同體的報文

5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章