SNMP協議詳解

SELF_IMPR小灰發表於2013-10-29

上一篇文章講解了SNMP的基本架構,本篇文章將重點分析SNMP報文,並對不同版本(SNMPv1、v2c、v3)進行區別!

四、SNMP協議資料單元

在SNMP管理中,管理站(NMS)和代理(Agent)之間交換的管理資訊構成了SNMP報文,報文的基本格式如下圖1:

                                                              圖 1

SNMP主要有SNMPv1SNMPV2cSNMPv3幾種最常用的版本。

1、SNMPv1

SNMPv1是SNMP協議的最初版本,提供最小限度的網路管理功能。SNMPv1的SMI和MIB都比較簡單,且存在較多安全缺陷。

SNMPv1採用團體名認證。團體名的作用類似於密碼,用來限制NMS對Agent的訪問。如果SNMP報文攜帶的團體名沒有得到NMS/Agent的認可,該報文將被丟棄。

報文格式如下圖2:

                                                                 圖 2

從上圖可以看出,SNMP訊息主要由Version、Community、SNMP PDU幾部分構成。其中,報文中的主要欄位定義如下:

Version:SNMP版本

Community:團體名,用於Agent與NMS之間的認證。團體名有可讀和可寫兩種,如果是執行Get、GetNext操作,則採用可讀團體名進行認證;如果是執行Set操作,則採用可寫團體名進行認證。

Request ID:用於匹配請求和響應,SNMP給每個請求分配全域性唯一的ID。

Error status:用於表示在處理請求時出現的狀況,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。

Error index:差錯索引。當出現異常情況時,提供變數繫結列表(Variable bindings)中導致異常的變數的資訊。

Variable bindings:變數繫結列表,由變數名和變數值對組成。

enterprise:Trap源(生成Trap資訊的裝置)的型別。

Agent addr:Trap源的地址。

Generic trap:通用Trap型別,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。

Specific trap:企業私有Trap資訊。

Time stamp:上次重新初始化網路實體和產生Trap之間所持續的時間,即sysUpTime物件的取值。

用Wireshark抓取的SNMPv1版本的報文格式如下圖3:

                                                                                                      圖 3

192.168.2.1是Agent的ip地址,192.168.2.110是NMS的ip地址

從上圖可以看到,SNMPv1版本的安全性不太好,可以抓取到community也即是團體名;tarp操作只有傳送報文沒有響應報文


2、SNMPv2c

SNMPv2c也採用團體名認證。在相容SNMPv1的同時又擴充了SNMPv1的功能:它提供了更多的操作型別(GetBulk和inform操作);支援更多的資料型別(Counter32等);提供了更豐富的錯誤程式碼,能夠更細緻地區分錯誤。

在v1版本中只有資料型別的錯誤碼,而v2c版本中增加了不少,如下圖4:

                                             圖 4

SNMPv2報文格式如下圖5:

                                                               圖 5

比較SNMPv1而言,SNMPv2c新增了GetBulk操作報文和inform操作報文。GetBulk操作所對應的基本操作型別是GetNext操作,通過對Non repeaters和Max repetitions引數的設定,高效率地從Agent獲取大量管理物件資料。而inform操作也就是相當於Trap的升級操作,但是二者又有什麼不同之處呢?Trap報文發出去之後不會收到響應報文,而inform報文在發出報文之後能收到響應報文。

抓取的報文格式如下:

(1)GetBulk操作,批量獲取資料,如下圖6:

                                                                                               圖 6

(2)inform操作,可以看到它與trap操作的區別,有個響應報文,如下圖7:

                                                                                              圖 7


SNMPv2c修改了Trap報文格式。SNMPv2c Trap PUD採用SNMPv1 Get/GetNext/Set PDU的格式,並將sysUpTime和snmpTrapOID作為Variable bindings中的變數來構造報文(可參照上圖3的get-next的response和下圖9SNMPv2的trap進行對比),報文格式如下:

(1)SNMPv1版本的tarp報文格式如下圖8:

                                                                                           圖 8

(2)SNMPv2的trap報文格式如下圖9:

                                                                                           圖 9

3、SNMPv3

SNMPv3主要在安全性方面進行了增強,它採用了USM和VACM技術。USM提供了認證和加密功能,VACM確定使用者是否允許訪問特定的MIB物件以及訪問方式。

USM(基於使用者的安全模型)

USM引入了使用者名稱和組的概念,可以設定認證和加密功能。認證用於驗證報文傳送方的合法性,避免非法使用者的訪問;加密則是對NMS和Agent之間傳輸的報文進行加密,以免被竊聽。通過有無認證和有無加密等功能組合,可以為NMS和Agent之間的通訊提供更高的安全性。

VACM(基於檢視的訪問控制模型)

VACM技術定義了組、安全等級、上下文、MIB檢視、訪問策略五個元素,這些元素同時決定使用者是否具有訪問的許可權,只有具有了訪問許可權的使用者才能管理操作物件。在同一個SNMP實體上可以定義不同的組,組與MIB檢視繫結,組內又可以定義多個使用者。當使用某個使用者名稱進行訪問的時候,只能訪問對應的MIB檢視定義的物件。

由於v3版本的增加了不少內容,所以決定在下一篇文章中再詳細的講解SNMPv3。



相關文章