SNMP技術白皮書

關鍵詞:SNMPMIBOIDAgentNMS

  要:網絡技術飛速發展,網絡設備數量越來越多,設備類型也多種多樣。如何有效的管理這些設備呢?我們可以通過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

協議數據單元

 



概述

1.1  產生背景

如今,網絡與人們的生活和工作聯係越來越緊密,但隨著網絡的普及引發了兩大問題:

l              網絡規模逐漸增大,網絡設備的數量成級數增加,網絡管理員很難及時監控所有設備的狀態、發現並修複故障。

l              網絡設備可能來自不同的廠商,如果每個廠商都提供一套獨立的管理接口(比如命令行),將使網絡管理變得越來越複雜。

為解決以上兩大問題,一套覆蓋服務、協議和管理信息庫的標準(SNMP)孕育而生。

1.2  技術優點

SNMP是管理進程(NMS)和代理進程(Agent)之間的通信協議。它規定了在網絡環境中對設備進行監視和管理的標準化管理框架、通信的公共語言、相應的安全和訪問控製機製。網絡管理員使用SNMP功能可以查詢設備信息、修改設備的參數值、監控設備狀態、自動發現網絡故障、生成報告等。

SNMP具有以下技術優點:

l              基於TCP/IP互聯網的標準協議,傳輸層協議一般采用UDP

l              自動化網絡管理。網絡管理員可以利用SNMP平台在網絡上的節點檢索信息、修改信息、發現故障、完成故障診斷、進行容量規劃和生成報告。

l              屏蔽不同設備的物理差異,實現對不同廠商產品的自動化管理。SNMP隻提供最基本的功能集,使得管理任務與被管設備的物理特性和實際網絡類型相對獨立,從而實現對不同廠商設備的管理。

l              簡單的請求—應答方式和主動通告方式相結合,並有超時和重傳機製。

l              報文種類少,報文格式簡單,方便解析,易於實現。

l              SNMPv3版本提供了認證和加密安全機製,以及基於用戶和視圖的訪問控製功能,增強了安全性。

特性介紹

2.1  SNMP網絡架構

SNMP網絡架構由三部分組成:NMSAgentMIB

2.1.1  NMS簡介

NMS是網絡中的管理者,是一個利用SNMP協議對網絡設備進行管理和監視的係統。NMS既可以指一台專門用來進行網絡管理的服務器,也可以指某個設備中執行管理功能的一個應用程序。

NMS可以向Agent發出請求,查詢或修改一個或多個具體的參數值。同時,NMS可以接收Agent主動發送的Trap信息,以獲知被管理設備當前的狀態。

2.1.2  Agent簡介

Agent是網絡設備中的一個應用模塊,用於維護被管理設備的信息數據並響應NMS的請求,把管理數據彙報給發送請求的NMS

Agent接收到NMS的請求信息後,完成查詢或修改操作,並把操作結果發送給NMS,完成響應。同時,當設備發生故障或者其他事件的時候,Agent會主動發送Trap信息給NMS,通知設備當前的狀態變化。

2.1.3  MIB簡介

1. MIB

任何一個被管理的資源都表示成一個對象,稱為被管理的對象。MIB是被管理對象的集合。它定義了被管理對象的一係列屬性:對象的名稱、對象的訪問權限和對象的數據類型等。每個Agent都有自己的MIBMIB也可以看作是NMSAgent之間的一個接口,通過這個接口,NMS可以對Agent中的每一個被管理對象進行讀/寫操作,從而達到管理和監控設備的目的。NMSAgentMIB之間的關係如1所示。

圖1 NMSAgentMIB關係圖

2. MIB視圖

MIB視圖是MIB的子集合,配置Agent時用戶可以將團體名/用戶名與MIB視圖綁定,從而限製NMS能夠訪問的MIB對象。用戶可以配置MIB視圖內的對象為excludedincludedexcluded表示當前視圖不包括該MIB子樹的所有節點;included表示當前視圖包括該MIB子樹的所有節點。

3. OID和子樹

MIB是以樹狀結構進行存儲的。樹的節點表示被管理對象,它可以用從根開始的一條路徑唯一地識別,這條路徑就稱為OID)。如2所示。管理對象system可以用一串數字{1.3.6.1.2.1.1}唯一標識,這串數字就是systemOID

子樹可以用該子樹根節點的OID來標識。如以private為根節點的子樹的OIDprivateOID——{1.3.6.1.4}

圖2 MIB樹結構示意圖

4. 子樹掩碼

子樹掩碼可以和子樹OID共同來確定一個視圖的範圍。子樹掩碼用十六進製格式表示,轉化成二進製後,每個比特位對應OID中的一個小節,其中,

l              1表示精確匹配,即要訪問的節點OIDMIB對象子樹OID對應小節的值必須相等;

l              0表示通配,即要訪問的節點OIDMIB對象子樹OID對應小節的值可以不相等。

例如:子樹掩碼為0xDB(二進製格式為11011011),子樹OID1.3.6.1.6.1.2.1,則對應關係如3所示,所確定的視圖就包括子樹OID1.3.*.1.6.*.2.1*表示可為任意數字)的子樹下的所有節點。

圖3 子樹OID與子樹掩碼對應關係圖

&  說明:

l      若子樹掩碼的bit數目大於子樹OID的小節數,則匹配時,子樹掩碼的第一位與子樹OID的第一小節對齊,第二位與第二小節對齊,以此類推,子樹掩碼中多出的bit位將被忽略

l      若子樹掩碼的bit數目小於子樹OID的小節數,則匹配時,子樹掩碼的第一位與子樹OID的第一小節對齊,第二位與第二小節對齊,以此類推,子樹掩碼中不足的bit位將自動設置為1

l      如果沒有指定子樹掩碼,則使用缺省子樹掩碼(全1)。

 

2.2  SNMP版本

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

2.2.1  SNMPv1

SNMPv1SNMP協議的最初版本,提供最小限度的網絡管理功能。SNMPv1SMIMIB都比較簡單,且存在較多安全缺陷。

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

2.2.2  SNMPv2c

SNMPv2c也采用團體名認證。在兼容SNMPv1的同時又擴充了SNMPv1的功能:它提供了更多的操作類型(GetBulk操作等);支持更多的數據類型(Counter32等);提供了更豐富的錯誤代碼,能夠更細致地區分錯誤。

2.2.3  SNMPv3

SNMPv3主要在安全性方麵進行了增強,它采用了USMVACM技術。USM提供了認證和加密功能,VACM確定用戶是否允許訪問特定的MIB對象以及訪問方式。

1. USM(基於用戶的安全模型)

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

2. VACM(基於視圖的訪問控製模型)

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

2.3  SNMP操作

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端口發送報文。由於收發采用了不同的端口號,所以一台設備可以同時作為AgentNMS

2.4  SNMP報文

根據SNMP的不同版本和不同操作,定義了以下報文格式:

2.4.1  SNMPv1報文

圖4 SNMPv1報文格式

從圖4可以看出,SNMP消息主要由VersionCommunitySNMP PDU幾部分構成。其中,報文中的主要字段定義如下:

l              VersionSNMP版本。

l              Community:團體名,用於AgentNMS之間的認證。團體名有可讀和可寫兩種,如果是執行GetGetNext操作,則采用可讀團體名進行認證;如果是執行Set操作,則采用可寫團體名進行認證。

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

l              Error status:用於表示在處理請求時出現的狀況,包括noErrortooBignoSuchNamebadValuereadOnlygenErr

l              Error index:差錯索引。當出現異常情況時,提供變量綁定列表(Variable bindings)中導致異常的變量的信息。

l              Variable bindings:變量綁定列表,由變量名和變量值對組成。

l              enterpriseTrap源(生成Trap信息的設備)的類型。

l              Agent addrTrap源的地址。

l              Generic trap:通用Trap類型,包括coldStartwarmStartlinkDownlinkUpauthenticationFailureegpNeighborLossenterpriseSpecific

l              Specific trap:企業私有Trap信息。

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

2.4.2  SNMPv2c報文

圖5 SNMPv2c報文格式

比較SNMPv1而言,SNMPv2c新增了GetBulk操作報文。GetBulk操作所對應的基本操作類型是GetNext操作,通過對Non repeatersMax repetitions參數的設定,高效率地從Agent獲取大量管理對象數據。

SNMPv2c修改了Trap報文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,並將sysUpTimesnmpTrapOID作為Variable bindings中的變量來構造報文。

2.4.3  SNMPv3報文

SNMPv3修改了消息的格式,但是PDU部分的格式同SNMPv2c是保持一致的。6隻列出消息格式。

圖6 SNMPv3消息格式

其中,整個SNMPv3消息可以使用認證機製,並對EngineIDContextNamePDU消息體部分進行加密。RequestIDMaxSizeFlagsSecurityModelSecurityParameters構成SNMPv3消息頭。

報文中的主要字段定義如下:

l              RequestID:請求報文的序列號。

l              MaxSize:消息發送者所能夠容納的消息最大字節,同時也表明了發送者能夠接收到的最大字節數。

l              Flags:消息標識位,占一個字節,隻有最低的三個比特位有效,比如0x0表示不認證不加密,0x1表示認證不加密,0x3表示認證加密,0x4表示發送report PDU標誌等。

l              SecurityModel:消息的安全模型值,取值為030表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2c安全模型,3表示采用SNMPv3安全模型。

l              ContextEngineID:唯一識別一個SNMP實體。對於接收消息,該字段確定消息該如何處理;對於發送消息,該字段在發送一個消息請求時由應用提供。

l              ContextName:唯一識別在相關聯的上下文引擎範圍內部特定的上下文。

SecurityParameters又包括以下主要字段:

l              AuthoritativeEngineID:消息交換中權威SNMPsnmpEngineID,用於SNMP實體的識別、認證和加密。該取值在TrapResponseReport中是源端的snmpEngineID,對GetGetNextGetBulkSet中是目的端的snmpEngineID

l              AuthoritativeEngineBoots:消息交換中權威SNMPsnmpEngineBoots。表示從初次配置時開始,SNMP引擎已經初始化或重新初始化的次數。

l              AuthoritativeEngineTime:消息交換中權威SNMPsnmpEngineTime,用於時間窗判斷。

l              UserName:用戶名,消息代表其正在交換。NMSAgent配置的用戶名必須保持一致。

l              AuthenticationParameters:認證參數,認證運算時所需的密鑰。如果沒有使用認證則為空。

l              PrivacyParameters:加密參數,加密運算時所用到的參數,比如DES CBC算法中形成初值IV所用到的取值。如果沒有使用加密則為空。

2.5  SNMP協議原理

2.5.1  SNMPv1SNMPv2c實現機製

SNMPv1/SNMPv2c實現機製基本一致,SNMPv2c豐富了錯誤碼,新增了GetBulk操作。下麵以在SNMPv1版本環境執行GetGetNextSet操作為例來描述SNMPv1/SNMPv2c的實現機製。

1. Get操作

NMS想要獲取被管理設備MIB節點sysName的值(sysName對象在允許訪問視圖內),使用public為可讀團體名,過程如下:

(1)        NMSAgent發送Get請求,請求報文主要字段將被設置為:Version字段的值為1Community字段的值為publicPDUVariable bindingsName1字段的值為sysName.0

(2)        AgentNMS發送Get響應,說明是否獲取成功。如果成功,則Response PDUVariable bindingsValue1字段的值為設備的名字(比如Agent010-H3C);如果獲取失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。

圖7 Get操作

2. GetNext操作

NMS想要獲取被管理設備MIB節點sysName的下一個節點sysLocation的值(sysNamesysLocation對象都在允許訪問視圖內),使用public為可讀團體名,過程如下:

(1)        NMSAgent發送GetNext請求,請求報文主要字段將被設置為:Version字段的值為1Community字段的值為publicPDUVariable bindingsName1字段的值為sysName.0

(2)        AgentNMS發送GetNext響應。如果成功,則Response PDUVariable bindingsName1字段值為sysName.0的下一個節點sysLocation.0 Value1字段的值為(比如Beijing China);如果獲取失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。

圖8 GetNext操作

3. Set操作

NMS想要設置被管理設備MIB節點sysName的值為Device01,使用private為可寫團體名,過程如下:

(1)        NMSAgent發送Set請求,請求報文主要字段將被設置為:Version字段的值為1Community字段的值為privatePDUVariable bindingsName1字段的值為sysName.0Value1字段的值填為Device01

(2)        AgentNMS發送Set響應,說明是否設置成功。如果成功,則Response PDUVariable bindingsValue1字段的值填為設備的新名字(比如Device01);如果設置失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。

圖9 Set操作

4. Trap操作

當設備發生某些異常需要通知NMS時,Agent會主動發出Trap報文。例如:設備某端口網線被拔出,Agent發送linkDownTrap消息給NMSVersion字段的值為1Community字段的值為publicPDUenterprise字段為sysObjectID.0的取值(比如為enterprises.25506),Generic trap字段值為linkDownVariable bindings字段攜帶接口相關信息。

圖10 Trap操作

2.5.2  SNMPv3實現機製

SNMPv3各操作的實現機製同SNMPv1SNMPv2c基本一樣,其主要區別在於SNMPv3新增加了認證和加密、解密的處理。下麵以SNMPv3使用認證和加密方式執行get操作為例來描述其實現機製,過程如下:

(1)        NMS首先發送不帶任何認證和加密參數的Get請求,Flags字段設置為0x4,以獲取contextEngineIDcontextNameAuthoritativeEngineIDAuthoritativeEngineBootsAuthoritativeEngineTime等相關參數的值。

(2)        Agent解析消息,發送report報文,並攜帶上述相關參數的值。

(3)        NMS再次給Agent發送Get請求,請求報文主要字段將被設置為:Version字段的值為3,將(2)獲取到的參數值填入相應字段,PDUVariable bindingsName1字段的值為sysName.0,並且根據配置的認證算法計算出AuthenticationParameters,使用配置的加密算法計算出PrivacyParameters,並使用配置的加密算法對PDU數據進行加密。

(4)        Agent首先對消息進行認證,認證通過後對PDU報文進行解密。解密成功後,則獲取sysName.0對象的值,並將Response PDUVariable bindingsValue1字段的值填為設備的名字(比如Agent010)。如果認證、解密失敗或者獲取參數值失敗,則在Error status字段填上出錯的原因,在Error index填上出錯的位置信息。最後對PDU進行加密,設置contextEngineIDcontextNameAuthoritativeEngineIDAuthoritativeEngineBootsAuthoritativeEngineTimeAuthenticationParametersPrivacyParameters等參數,發送響應報文。

圖11 SNMPv3 Get操作

H3C實現的技術特色

H3C設備支持SNMPv1SNMPv2cSNMPv3三個版本,為了兼容SNMPv3SNMPv1SNMPv2c版本也可以配置組、用戶和視圖,這時,隻需要將NMS側的團體名參數設置為設備上配置的用戶名即可。用戶可以同時使能多個版本,但需要和NMS側的版本一致。

典型組網案例

4.1  組網圖

圖12 SNMP典型組網圖

4.2  組網環境

網絡中的設備生產廠商不同,設備型號也不一致,需要對網絡和設備的運行進行監控和管理。

附錄

5.1  相關協議

l              RFC1155

l              RFC2578

l              RFC2579

l              RFC3411

l              RFC3412

l              RFC3414

l              RFC3415

5.2  參考文獻

l              “係統分冊”中的“SNMP配置”

l              “係統分冊”中的“SNMP命令”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Copyright ©2008 杭州華三通信技術有限公司 版權所有,保留一切權利。

非經本公司書麵許可,任何單位和個人不得擅自摘抄、複製本文檔內容的部分或全部,並不得以任何形式傳播。

本文檔中的信息可能變動,恕不另行通知。

附件下載

聯係我們