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):名稱不一制性的錯誤。

 

 

<GOTOP>