TCP/IP 協定與 Internet 網路:第十六章 SNMP 網路管理協定 上一頁 下一頁
16-4 SNMP 運作程序
基本上,SNMP 是屬於『要求/回應』(Request-Response)的管理模式,但在某些情況下,也允許觸發性(Trap)的傳遞資料。SNMP 的管理模式是,首先由 SNMP Manager 下達命令(Set、Get Request)給 SNMP Agent,SNMP Agent 依照命令收集網路訊息後,再回應(Response)給 SNMP Manager(利用 UDP 161 埠口)。在正常情況之下,SNMP Agent 並不主動要求傳遞訊息給 SNMP Manager,除非有某些異常現象,再由 SNMP Agent 下觸發訊號(Trap)給 SNMP Manager(利用 UDP 162 傳輸埠口),各種命令的運作情形如圖 16-4 所示。我們以在 SNMPv2 的運作程序來介紹各個命令的運作情形,至於 SNMPv1 除了沒有Get-Bulk與 Inform 命令外,其餘運作程序也相同。
圖 16-4 SNMP 命令運作程序
(A) Get-Request 命令
SNMP Manager 發出要求 Get-Request 查詢網路設備的情況,SNMP Agent 收到訊息後,依照訊息內所詢問物件名稱(如圖 16-3 (b))填入該物件的數值(Value)後,以 Get-Response回應給 SNMP Manager。例如,SNMP Manager 要求詢問網路設備上 TCP 連線有幾條,則下達 Get-Request (tcpCurrEstab.0) 給 SNMP Agent。SNMP Agent 由設備上取得訊息後以 Get-Response(tcpCurrEstab.0 = 5) 給 SNMP Manager,表示目前已建立之連線有五條鏈路。如果 SNMP Agent 無法完成 Get-Request 命令時,則會以 Get-Response 回應錯誤訊息。
(B) Get-Response 命令
在 SNMP 通訊協定裡,SNMP Agent 除了 Trap 命令外都是以 Get-Response 命令回應所接收命令的處理結果給 SNMP Manager。如果 SNMP Manager 所下達命令無法達成時,SNMP Agent 會將錯誤訊息填入 Get-Response PDU 內(如圖 16-3 (b)),以告知 SNMP Manager 發生錯誤的原因,並以 Error-index 指明擷取哪一個變數(或物件)發生錯誤。
(C) Get-Next-Request 命令
Get-Next-Request 和 Get-Request 命令非常類似,但在運作上有很大不同點。Get-Request 表示要索取某一管理物件的數值,一般來講這些管理物件都是以 MIB 的樹狀結構表示。Get-Next-Request 是使用在 MIB 樹狀結構不明確的情況下,探索某一管理物件的分支上的物件的數值。尤其在許多情況下,網路設備製造商會將管理物件依照自有的 MIB 結構排列(如 Private 物件),它的樹狀結構也可能不是標準化,此情況下就可以利用 Get-Next-Request 來追蹤管理物件。SNMP Agent 也是以 Get-Response 來回應 SNMP-Manager 的查詢,但如果無法再追蹤下去時,則會回應該物件的值為 endOfMibView。
(D) Set-Request 命令
由 SNMP Manager 下達 Set-Request 命令,來更改 SNMP Agent 之網路設備的組態(Configuration),例如,該改 IP 位址,或啟動/停止某一連接埠口。如在執行上沒有問題,SNMP Agent 會以 Get-Response 回應原 Set-Request 的值。如果 Set-Request PDU 中所指定的物件無法設定改變時,會在 Get-Response PDU 的訊息欄位中指定錯誤原因(如 noAccess),並在索引欄位中指示出哪一個物件設定時發生錯誤。但一般廠商為了顧及安全性的問題,大多不提供 Set 命令功能。
(E) Trap 命令
Trap 是由 SNMP Agent 主動傳送訊息給 SNMP Manager,目的是通知已發生異常事件。在 SNMP 標準規格定義有七項異常狀況:冷啟動(coldStart)、溫啟動(warmStart)、介面斷線(linkDown)、介面恢復(linkUp)、驗證失敗(authenticationFailure)、企業專屬事件(enterpriseSpecific)。
(F) GetBulk-Request 命令(SNMPv2)
GetBulk-Request 是使用於一次要求大量資料。尤其,針對 MIB 的表格描述之物件,如使用 SNMPv1 方式,必須連續下幾次 Get-Next 才能取得整個表格的訊息,而使用 GetBulk 一次就能取得整個表格的訊息。如果 SNMP Agent 無法回應整個系列訊息,可以只回應某些訊息(Get-Response)。
(G) Inform-Request 命令(SNMPv2)
SNMPv2 允許同一個網路下有多個網路管理系統,每一網路管理系統上都有一個 SNMP Manager。這些 SNMP Manager 之間就用 Inform-Request 來互相傳遞訊息,當對方 SNMP Manager 接收訊息時,還是以 Get-Response 回應。