TCP/IP 協定與 Internet 網路:第十六章 SNMP 網路管理協定 上一頁 下一頁
16-3 SNMP 協定
16-3-1 SNMP 協定堆疊
圖 16-2 為 SNMP 網路管理的通訊協定堆疊,在傳輸層使用非連接方式的『使用者電報傳輸』(User Datagram Protocol, UDP),連接到 UDP 161 埠口上,也就是說,SNMP Manager 和 SNMP Agent 之間是透過 UDP 161 埠口通訊。但 SNMP Manager 是利用 UDP 162 埠口來接收 Agent 所傳送過來的 Trap 訊息。資料表現層為管理物件資料的表示法,SNMP 使用標準化的『抽象語意表示法』(Abstract Syntax Notation - One, ASN-1)來編碼,使不同廠商之間的網路設備可以互相管理,亦是,在 SNMP Manager 和 SNMP Agent 之間所傳遞的訊息都以 ASN-1 格式包裝(請參考 16-4 節),才能達到異質電腦設備之間的網路管理。
圖 16-2 SNMP 通訊協定之堆疊架構
16-3-2 SNMP 協定資料單元
圖 16-3 顯示 SNMPv1 與 SNMP v2 協定資料單元的格式,基本上,SMNP 訊息是透過 UDP 封包包裝,而以 IP 封包傳送,兩個版本在訊息標頭(SNMP Header)上都是一樣,但兩個版本的 SNMP PDU(Protocol Data Unit)會依照各種命令而不相同。一般在 SNMPv2 的環境裡無法直接使用 SNMPv1 的訊息格式,以及從事於管理工作,必須透過一個管理代理者的處理,這在 RFC 2089 中有詳細規範。以下說明各訊息欄位之功能:
(A) 訊息標頭(Message Header)
訊息標頭包含兩個欄位(圖 16-3 (a)):
● 版本(Version):表示該 SNMP 封包的版本,0 表示 SNMPv1;1 表示 SNMPv2。
● 共同體(Community):表示某一管理群組織的共同體名稱,一般內定值為 Public。
(B) SNMPv1 一般協定資料單元
SNMPv1 的一般『協定資料單元』(Protocol Data Unit, PDU)包含有:Get、GetNext、Response 與 Set PDU 格式,它們的 PDU 格式都是相同,如圖 16-3 (b) 所示,各欄位功能如下:
▼ PDU Type:表示本 PDU 的命令型態:
0 → Get-Request
1 → Get-Next-Request
2 → Set Request
3 → Get-Response
▼ Request ID:當 SNMP Manager 下達某一命令,都會針對每一命令編碼一個 Request ID(隨機變數),SNMP Agent 回應時,再針對哪一個 Request ID 回應訊息。
▼ Error Status:Set-Response PDU存放發生錯誤訊息。如果 SNMP Manager 所下達的命令無法達成時,便依照錯誤狀態回應給 SNMP Manager。其它命令(Set、Get、GetNext)沒有使用此欄位。
▼ Error Index:Set-Response PDU 存放錯誤發生的索引位置,表示錯誤是發生在後面可變連結(Variable Bindings)上哪一位置上的管理物件。
▼ 管理物件:每一管理物件以《物件名稱,數值》(Object-n, Value-n)來表示,可串接不定長度(依照 UDP 封包長度而定)。如果是 Get 與 GetNext 命令將不理會物件的數值(Value),如果是 Set 命令表示設定物件的數值,而 Response 表示回應物件的數值內容。
圖 16-3 SNMPv1 與 SNMPv2 訊息格式
(C) SNMPv1 Trap 協定資料單元
圖 16-3 (c) 顯示 SNMPv1 Trap PDU 格式,其中 PDU Type = 4,管理物件的表示也和一般 PDU 相同,其餘各欄位功能如下:
▼ Enterprise:標示所產生 Trap 的管理物件型態。
▼ Agent Address:提供 Trap 管理物件的 SNMP Agent 位址。
▼ Generic Trap Type:一般 Trap 型態。
▼ Specific Trap Code:在 Trap 型態中的一個特殊編碼。
▼ Time Stamp:表示所發生 Trap 的時間戳記。
(D) SNMPv2 一般協定資料單元
圖 16-3 (d) 顯示 SNMPv2 一般資料協定單元(PDU)的訊息格式,它可能是 Get、GetNext、Set、Response、Inform或 Trap 命令,其中除了 PDU Type 欄位和 SNMPv1 不同外,其它欄位都相同,PDU Type 表示如下:
0 → Get-Request
1 → Get-Next-Request
2 → Set Request
3 → Get-Response
4 → 不使用(為了避開 SNMPv1)
5 → Get-Bulk-Request(不同的 PDU 格式)
6 → Inform-Request
7 → SNMPv2 Trap
(E) Get-Bulk-Request 協定資料單元
圖 16-3 (d) 為 GetBulk 的 PDU 格式,其中 PDU Type = 5,其它各欄位功能如下:
● Request ID:一個隨機變數的號碼,表示本訊息的編號,SNMP Agent 回應時,可標明依照哪一個要求回應訊訊息。
● Non-repeaters:描述本要求訊息中後面可變連結(Variable Binding)中物件事項(Object Instances)不要超過一次擷取資料的數量。
● Max-repetitions:定義最大可以重複擷取的次數,而這些管理物件未在 Non-repeater 上被註明不可重複擷取。
在 SNMPv1 協定只有定義五種錯誤訊息(Error Status),到了 SNMPv2 增加了 13 種錯誤訊息,主要是由 Response PDU 回應要求時,顯示管理訊息存取錯誤的狀態,我們由訊息名稱大略可以了解它的功能:
▲ noError(0):正常動作,沒有錯誤。
▲ tooBig(1):給變數的數值太長。
▲ noSuchName(2):沒有此變數名稱。(與 Proxy 相容)
▲ badValue(3):給變數數值錯誤。(與 Proxy 相容)
▲ readOnly(4):該變數只能讀取不可寫入。(與 Proxy 相容)
▲ GenErr(5):一般性的錯誤。
▲ noAccess(6):表示該變數是不可存取的。
▲ wrongLength(8):長度錯誤。
▲ wrongEncoding(9):編碼錯誤。
▲ wrongValue(9):給變數的數值錯誤。
▲ noCreation(11):該變數是不可開啟的。
▲ inconsistentValue(12):數值資料型態不一致性錯誤。
▲ resourceUnavailabe(13):資源無效。
▲ commitFailed(14):確認失敗。
▲ undoFailed(15):重複執行失敗。
▲ authorizationError(16):認證錯誤。
▲ notWritable(17):該變數不可寫入。
▲ inconsistentName(18):名稱不一制性的錯誤。