關鍵詞:SNMP、MIB、OID、Agent、NMS
摘 要:網絡技術飛速發展,網絡設備數量越來越多,設備類型也多種多樣。如何有效的管理這些設備呢?我們可以通過SNMP功能來實現這一目標。本文將重點介紹SNMP的基本概念、工作原理以及主要應用。
縮略語:
縮略語 | 英文全名 | 中文解釋 |
MIB | Management Information Base | 管理信息庫 |
NMS | Network Management Station | 網絡管理站 |
OID | Object Identifier | 對象標識符 |
SNMP | Simple Network Management Protocol | 簡單網絡管理協議 |
SMI | Structure of Management Information | 管理信息結構 |
USM | User-based Security Model | 基於用戶的安全模型 |
VACM | View-based Access Control Model | 基於視圖的訪問控製模型 |
PDU | protocol data unit | 協議數據單元 |
如今,網絡與人們的生活和工作聯係越來越緊密,但隨著網絡的普及引發了兩大問題:
l 網絡規模逐漸增大,網絡設備的數量成級數增加,網絡管理員很難及時監控所有設備的狀態、發現並修複故障。
l 網絡設備可能來自不同的廠商,如果每個廠商都提供一套獨立的管理接口(比如命令行),將使網絡管理變得越來越複雜。
為解決以上兩大問題,一套覆蓋服務、協議和管理信息庫的標準(SNMP)孕育而生。
SNMP是管理進程(NMS)和代理進程(Agent)之間的通信協議。它規定了在網絡環境中對設備進行監視和管理的標準化管理框架、通信的公共語言、相應的安全和訪問控製機製。網絡管理員使用SNMP功能可以查詢設備信息、修改設備的參數值、監控設備狀態、自動發現網絡故障、生成報告等。
SNMP具有以下技術優點:
l 基於TCP/IP互聯網的標準協議,傳輸層協議一般采用UDP。
l 自動化網絡管理。網絡管理員可以利用SNMP平台在網絡上的節點檢索信息、修改信息、發現故障、完成故障診斷、進行容量規劃和生成報告。
l 屏蔽不同設備的物理差異,實現對不同廠商產品的自動化管理。SNMP隻提供最基本的功能集,使得管理任務與被管設備的物理特性和實際網絡類型相對獨立,從而實現對不同廠商設備的管理。
l 簡單的請求—應答方式和主動通告方式相結合,並有超時和重傳機製。
l 報文種類少,報文格式簡單,方便解析,易於實現。
l SNMPv3版本提供了認證和加密安全機製,以及基於用戶和視圖的訪問控製功能,增強了安全性。
SNMP網絡架構由三部分組成:NMS、Agent和MIB。
NMS是網絡中的管理者,是一個利用SNMP協議對網絡設備進行管理和監視的係統。NMS既可以指一台專門用來進行網絡管理的服務器,也可以指某個設備中執行管理功能的一個應用程序。
NMS可以向Agent發出請求,查詢或修改一個或多個具體的參數值。同時,NMS可以接收Agent主動發送的Trap信息,以獲知被管理設備當前的狀態。
Agent是網絡設備中的一個應用模塊,用於維護被管理設備的信息數據並響應NMS的請求,把管理數據彙報給發送請求的NMS。
Agent接收到NMS的請求信息後,完成查詢或修改操作,並把操作結果發送給NMS,完成響應。同時,當設備發生故障或者其他事件的時候,Agent會主動發送Trap信息給NMS,通知設備當前的狀態變化。
任何一個被管理的資源都表示成一個對象,稱為被管理的對象。MIB是被管理對象的集合。它定義了被管理對象的一係列屬性:對象的名稱、對象的訪問權限和對象的數據類型等。每個Agent都有自己的MIB。MIB也可以看作是NMS和Agent之間的一個接口,通過這個接口,NMS可以對Agent中的每一個被管理對象進行讀/寫操作,從而達到管理和監控設備的目的。NMS、Agent和MIB之間的關係如圖1所示。
圖1 NMS、Agent和MIB關係圖
MIB視圖是MIB的子集合,配置Agent時用戶可以將團體名/用戶名與MIB視圖綁定,從而限製NMS能夠訪問的MIB對象。用戶可以配置MIB視圖內的對象為excluded或included。excluded表示當前視圖不包括該MIB子樹的所有節點;included表示當前視圖包括該MIB子樹的所有節點。
MIB是以樹狀結構進行存儲的。樹的節點表示被管理對象,它可以用從根開始的一條路徑唯一地識別,這條路徑就稱為OID)。如圖2所示。管理對象system可以用一串數字{1.3.6.1.2.1.1}唯一標識,這串數字就是system的OID。
子樹可以用該子樹根節點的OID來標識。如以private為根節點的子樹的OID為private的OID——{1.3.6.1.4}。
圖2 MIB樹結構示意圖
子樹掩碼可以和子樹OID共同來確定一個視圖的範圍。子樹掩碼用十六進製格式表示,轉化成二進製後,每個比特位對應OID中的一個小節,其中,
l 1表示精確匹配,即要訪問的節點OID與MIB對象子樹OID對應小節的值必須相等;
l 0表示通配,即要訪問的節點OID與MIB對象子樹OID對應小節的值可以不相等。
例如:子樹掩碼為0xDB(二進製格式為11011011),子樹OID為1.3.6.1.6.1.2.1,則對應關係如圖3所示,所確定的視圖就包括子樹OID為1.3.*.1.6.*.2.1(*表示可為任意數字)的子樹下的所有節點。
圖3 子樹OID與子樹掩碼對應關係圖
& 說明:
l 若子樹掩碼的bit數目大於子樹OID的小節數,則匹配時,子樹掩碼的第一位與子樹OID的第一小節對齊,第二位與第二小節對齊,以此類推,子樹掩碼中多出的bit位將被忽略
l 若子樹掩碼的bit數目小於子樹OID的小節數,則匹配時,子樹掩碼的第一位與子樹OID的第一小節對齊,第二位與第二小節對齊,以此類推,子樹掩碼中不足的bit位將自動設置為1;
l 如果沒有指定子樹掩碼,則使用缺省子樹掩碼(全1)。
SNMP主要有SNMPv1、SNMPV2c、SNMPv3幾種最常用的版本。
SNMPv1是SNMP協議的最初版本,提供最小限度的網絡管理功能。SNMPv1的SMI和MIB都比較簡單,且存在較多安全缺陷。
SNMPv1采用團體名認證。團體名的作用類似於密碼,用來限製NMS對Agent的訪問。如果SNMP報文攜帶的團體名沒有得到NMS/Agent的認可,該報文將被丟棄。
SNMPv2c也采用團體名認證。在兼容SNMPv1的同時又擴充了SNMPv1的功能:它提供了更多的操作類型(GetBulk操作等);支持更多的數據類型(Counter32等);提供了更豐富的錯誤代碼,能夠更細致地區分錯誤。
SNMPv3主要在安全性方麵進行了增強,它采用了USM和VACM技術。USM提供了認證和加密功能,VACM確定用戶是否允許訪問特定的MIB對象以及訪問方式。
USM引入了用戶名和組的概念,可以設置認證和加密功能。認證用於驗證報文發送方的合法性,避免非法用戶的訪問;加密則是對NMS和Agent之間傳輸的報文進行加密,以免被竊聽。通過有無認證和有無加密等功能組合,可以為NMS和Agent之間的通信提供更高的安全性。
VACM技術定義了組、安全等級、上下文、MIB視圖、訪問策略五個元素,這些元素同時決定用戶是否具有訪問的權限,隻有具有了訪問權限的用戶才能管理操作對象。在同一個SNMP實體上可以定義不同的組,組與MIB視圖綁定,組內又可以定義多個用戶。當使用某個用戶名進行訪問的時候,隻能訪問對應的MIB視圖定義的對象。
SNMP支持多種操作,主要為以下幾種基本操作:
l Get操作:NMS使用該操作從Agent獲取一個或多個參數值。
l GetNext操作:NMS使用該操作從Agent獲取一個或多個參數的下一個參數值。
l Set操作:NMS使用該操作設置Agent一個或多個參數值。
l Response操作:Agent返回一個或多個參數值。該操作是前麵三種操作的響應。
l Trap操作:Agent主動發出的操作,通知NMS有某些事情發生。
執行前四種操作時設備使用UDP協議采用161端口發送報文,執行Trap操作時設備使用UDP協議采用162端口發送報文。由於收發采用了不同的端口號,所以一台設備可以同時作為Agent和NMS。
根據SNMP的不同版本和不同操作,定義了以下報文格式:
圖4 SNMPv1報文格式
從圖4可以看出,SNMP消息主要由Version、Community、SNMP PDU幾部分構成。其中,報文中的主要字段定義如下:
l Version:SNMP版本。
l Community:團體名,用於Agent與NMS之間的認證。團體名有可讀和可寫兩種,如果是執行Get、GetNext操作,則采用可讀團體名進行認證;如果是執行Set操作,則采用可寫團體名進行認證。
l Request ID:用於匹配請求和響應,SNMP給每個請求分配全局唯一的ID。
l Error status:用於表示在處理請求時出現的狀況,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。
l Error index:差錯索引。當出現異常情況時,提供變量綁定列表(Variable bindings)中導致異常的變量的信息。
l Variable bindings:變量綁定列表,由變量名和變量值對組成。
l enterprise:Trap源(生成Trap信息的設備)的類型。
l Agent addr:Trap源的地址。
l Generic trap:通用Trap類型,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。
l Specific trap:企業私有Trap信息。
l Time stamp:上次重新初始化網絡實體和產生Trap之間所持續的時間,即sysUpTime對象的取值。
圖5 SNMPv2c報文格式
比較SNMPv1而言,SNMPv2c新增了GetBulk操作報文。GetBulk操作所對應的基本操作類型是GetNext操作,通過對Non repeaters和Max repetitions參數的設定,高效率地從Agent獲取大量管理對象數據。
SNMPv2c修改了Trap報文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,並將sysUpTime和snmpTrapOID作為Variable bindings中的變量來構造報文。
SNMPv3修改了消息的格式,但是PDU部分的格式同SNMPv2c是保持一致的。圖6隻列出消息格式。
圖6 SNMPv3消息格式
其中,整個SNMPv3消息可以使用認證機製,並對EngineID、ContextName、PDU消息體部分進行加密。RequestID、MaxSize、Flags、SecurityModel、SecurityParameters構成SNMPv3消息頭。
報文中的主要字段定義如下:
l RequestID:請求報文的序列號。
l MaxSize:消息發送者所能夠容納的消息最大字節,同時也表明了發送者能夠接收到的最大字節數。
l Flags:消息標識位,占一個字節,隻有最低的三個比特位有效,比如0x0表示不認證不加密,0x1表示認證不加密,0x3表示認證加密,0x4表示發送report PDU標誌等。
l SecurityModel:消息的安全模型值,取值為0~3。0表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2c安全模型,3表示采用SNMPv3安全模型。
l ContextEngineID:唯一識別一個SNMP實體。對於接收消息,該字段確定消息該如何處理;對於發送消息,該字段在發送一個消息請求時由應用提供。
l ContextName:唯一識別在相關聯的上下文引擎範圍內部特定的上下文。
SecurityParameters又包括以下主要字段:
l AuthoritativeEngineID:消息交換中權威SNMP的snmpEngineID,用於SNMP實體的識別、認證和加密。該取值在Trap、Response、Report中是源端的snmpEngineID,對Get、GetNext、GetBulk、Set中是目的端的snmpEngineID。
l AuthoritativeEngineBoots:消息交換中權威SNMP的snmpEngineBoots。表示從初次配置時開始,SNMP引擎已經初始化或重新初始化的次數。
l AuthoritativeEngineTime:消息交換中權威SNMP的snmpEngineTime,用於時間窗判斷。
l UserName:用戶名,消息代表其正在交換。NMS和Agent配置的用戶名必須保持一致。
l AuthenticationParameters:認證參數,認證運算時所需的密鑰。如果沒有使用認證則為空。
l PrivacyParameters:加密參數,加密運算時所用到的參數,比如DES CBC算法中形成初值IV所用到的取值。如果沒有使用加密則為空。
SNMPv1/SNMPv2c實現機製基本一致,SNMPv2c豐富了錯誤碼,新增了GetBulk操作。下麵以在SNMPv1版本環境執行Get、GetNext和Set操作為例來描述SNMPv1/SNMPv2c的實現機製。
NMS想要獲取被管理設備MIB節點sysName的值(sysName對象在允許訪問視圖內),使用public為可讀團體名,過程如下:
(1) NMS給Agent發送Get請求,請求報文主要字段將被設置為:Version字段的值為1,Community字段的值為public,PDU裏Variable bindings中Name1字段的值為sysName.0。
(2) Agent給NMS發送Get響應,說明是否獲取成功。如果成功,則Response PDU裏Variable bindings中Value1字段的值為設備的名字(比如Agent010-H3C);如果獲取失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。
圖7 Get操作
NMS想要獲取被管理設備MIB節點sysName的下一個節點sysLocation的值(sysName和sysLocation對象都在允許訪問視圖內),使用public為可讀團體名,過程如下:
(1) NMS給Agent發送GetNext請求,請求報文主要字段將被設置為:Version字段的值為1,Community字段的值為public,PDU裏Variable bindings中Name1字段的值為sysName.0。
(2) Agent給NMS發送GetNext響應。如果成功,則Response PDU裏Variable bindings中Name1字段值為sysName.0的下一個節點sysLocation.0, Value1字段的值為(比如Beijing China);如果獲取失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。
圖8 GetNext操作
NMS想要設置被管理設備MIB節點sysName的值為Device01,使用private為可寫團體名,過程如下:
(1) NMS給Agent發送Set請求,請求報文主要字段將被設置為:Version字段的值為1,Community字段的值為private,PDU裏Variable bindings中Name1字段的值為sysName.0,Value1字段的值填為Device01。
(2) Agent給NMS發送Set響應,說明是否設置成功。如果成功,則Response PDU裏Variable bindings中Value1字段的值填為設備的新名字(比如Device01);如果設置失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。
圖9 Set操作
當設備發生某些異常需要通知NMS時,Agent會主動發出Trap報文。例如:設備某端口網線被拔出,Agent發送linkDown的Trap消息給NMS。Version字段的值為1,Community字段的值為public,PDU中enterprise字段為sysObjectID.0的取值(比如為enterprises.25506),Generic trap字段值為linkDown,Variable bindings字段攜帶接口相關信息。
圖10 Trap操作
SNMPv3各操作的實現機製同SNMPv1和SNMPv2c基本一樣,其主要區別在於SNMPv3新增加了認證和加密、解密的處理。下麵以SNMPv3使用認證和加密方式執行get操作為例來描述其實現機製,過程如下:
(1) NMS首先發送不帶任何認證和加密參數的Get請求,Flags字段設置為0x4,以獲取contextEngineID、contextName、AuthoritativeEngineID、AuthoritativeEngineBoots、AuthoritativeEngineTime等相關參數的值。
(2) Agent解析消息,發送report報文,並攜帶上述相關參數的值。
(3) NMS再次給Agent發送Get請求,請求報文主要字段將被設置為:Version字段的值為3,將(2)獲取到的參數值填入相應字段,PDU裏Variable bindings中Name1字段的值為sysName.0,並且根據配置的認證算法計算出AuthenticationParameters,使用配置的加密算法計算出PrivacyParameters,並使用配置的加密算法對PDU數據進行加密。
(4) Agent首先對消息進行認證,認證通過後對PDU報文進行解密。解密成功後,則獲取sysName.0對象的值,並將Response PDU裏Variable bindings中Value1字段的值填為設備的名字(比如Agent010)。如果認證、解密失敗或者獲取參數值失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。最後對PDU進行加密,設置contextEngineID、contextName、AuthoritativeEngineID、AuthoritativeEngineBoots、AuthoritativeEngineTime、AuthenticationParameters、PrivacyParameters等參數,發送響應報文。
圖11 SNMPv3 Get操作
H3C設備支持SNMPv1、SNMPv2c、SNMPv3三個版本,為了兼容SNMPv3,SNMPv1和SNMPv2c版本也可以配置組、用戶和視圖,這時,隻需要將NMS側的團體名參數設置為設備上配置的用戶名即可。用戶可以同時使能多個版本,但需要和NMS側的版本一致。
圖12 SNMP典型組網圖
網絡中的設備生產廠商不同,設備型號也不一致,需要對網絡和設備的運行進行監控和管理。
l RFC1155
l RFC2578
l RFC2579
l RFC3411
l RFC3412
l RFC3414
l RFC3415
l “係統分冊”中的“SNMP配置”
l “係統分冊”中的“SNMP命令”
Copyright ©2008 杭州華三通信技術有限公司 版權所有,保留一切權利。
非經本公司書麵許可,任何單位和個人不得擅自摘抄、複製本文檔內容的部分或全部,並不得以任何形式傳播。
本文檔中的信息可能變動,恕不另行通知。