上一篇文章講解了SNMP的基本架構,本篇文章將重點分析SNMP報文,並對不同版本(SNMPv1、v2c、v3)進行區別!
四、SNMP協議數據單元
在SNMP管理中,管理站(NMS)和代理(Agent)之間交換的管理信息構成了SNMP報文,報文的基本格式如下圖1:
圖 1
SNMP主要有SNMPv1、SNMPV2c、SNMPv3幾種最常用的版本。
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。