術語
術語 | 解釋 |
SNMP (Simple Network Management Protocol) | 簡單網絡管理協議 |
NMS(Network Management System) | snmp網絡管理系統 |
Agent | snmp代理服務 |
MIB | 管理信息庫 |
SMI(Structure of management information) | 管理信息結構,是一種語言 |
USM |
基於用戶安全模型 |
VACM | 基於視圖訪問控制模型 |
一、什么是snmp
SNMP(Simple Network Management Protocol,簡單網絡管理協議)的前身是簡單網關監控協議(SGMP),用來對通信線路進行管理。隨后,人們對SGMP進行了很大的修改,特別是加入了符合Internet定義的SMI和MIB體系結構,改進后的協議就是著名的SNMP。SNMP主要用於網絡設備的管理。由於SNMP協議簡單可靠 ,受到了眾多廠商的歡迎,成為了目前最為廣泛的網管協議。
SNMP協議主要由兩大部分構成:SNMP管理站和SNMP代理。SNMP管理站是一個中心節點,負責收集維護各個SNMP元素的信息,並對這些信息進行處理,最后反饋給網絡管理員;而SNMP代理是運行在各個被管理的網絡節點之上,負責統計該節點的各項信息,並且負責與SNMP管理站交互,接收並執行管理站的命令,上傳各種本地的網絡信息。
SNMP管理站和SNMP代理之間是松散耦合。他們之間的通信是通過UDP協議完成的。一般情況下,SNMP管理站通過UDP協議向SNMP代理發送各種命令,當SNMP代理收到命令后,返回SNMP管理站需要的參數。但是當SNMP代理檢測到網絡元素異常的時候,也可以主動向SNMP管理站發送消息,通告當前異常狀況。
SNMP的基本思想:為不同種類的設備、不同廠家生產的設備、不同型號的設備,定義為一個統一的接口和協議,使得管理員可以是使用統一的外觀面對這些需要管理的網絡設備進行管理。通過網絡,管理員可以管理位於不同物理空間的設備,從而大大提高網絡管理的效率,簡化網絡管理員的工作。
SNMP的工作方式:管理員需要向設備獲取數據,所以SNMP提供了【GET】操作;管理員需要向設備執行設置操作,所以SNMP提供了【SET】操作;設備需要在重要狀況改變的時候,向管理員通報事件的發生,所以SNMP提供了【Trap】操作。
二、SNMP 和 UDP
SNMP采用UDP協議在管理端和agent之間傳輸信息。 SNMP采用UDP 161端口接收和發送請求,162端口接收trap。SNMP消息全部通過UDP端口161接收,只有Trap信息采用UDP端口162。
三、snmp的實現結構
在具體實現上,SNMP為管理員提供了一個網管平台(NMS),又稱為【管理站】,負責網管命令的發出、數據存儲、及數據分析。【被】監管的設備上運行一個SNMP代理(Agent)),代理實現設備與管理站的SNMP通信。
管理站指的是運行了可以執行網絡管理任務軟件的服務器,通常被稱作為網絡管理工作站(NMS),NMS負責采樣網絡中代理(Agent)的信息,並接收代理(Agent)的trap。代理(Agent)是實際網絡設備中用來實現SNMP功能的部分。代理(Agent)在UDP的161端口接收管理站(NMS)的讀寫請求消息,管理站(NMS)在UDP的162端口接收代理(Agent)的事件通告消息。所以一旦獲取設備的訪問權限(community,默認為public),就可以訪問設備信息、改寫和配置設備參數。由於采用UDP協議,不需要在代理(Agent)和管理站(NMS)之間保持連接。
管理站(NMS)與代理端(Agent)通過MIB進行接口統一,MIB定義了設備中的被管理對象。管理站(NMS)和代理(Agent)都實現了相應的MIB對象,使得雙方可以識別對方的數據,實現通信。管理站(NMS)向代理(Agent)申請MIB中定義的數據,代理(Agent)識別后,將管理設備提供的相關狀態或參數等數據轉換為MIB定義的格式,應答給管理站(NMS),完成一次管理操作。
SNMP協議之所以易於使用,這是因為它對外提供了三種用於控制MIB對象的基本操作命令。它們是:Get、Set 和 Trap。
- Get:管理站(NMS)讀取代理(Agent)處對象的值。它是SNMP協議中使用率最高的一個命令,因為該命令是從網絡設備中獲得管理信息的基本方式。
- Set:管理站(NMS)設置代理者(Agent)處對象的值。它是一個特權命令,因為可以通過它來改動設備的配置或控制設備的運轉狀態。它可以設置設備的名稱,關掉一個端口或清除一個地址解析表中的項等。
- Trap: 代理(Agent)主動向管理站(NMS)通報重要事件。它的功能就是在網絡管理系統沒有明確要求的前提下,由代理(Agent)通知網絡管理系統(NMS)有一些特別的情況或問題發生了。如果發生意外情況,客戶會向服務器的162端口發送一個消息,告知服務器指定的變量值發生了變化。Trap 消息可以用來通知管理站線路的故障、連接的終端和恢復、認證失敗等消息。管理站(NMS)可相應的作出處理。
四、snmp版本
SNMP目前共有v1,v2c,v3這三個版本
SNMPv1
SNMPv1 是 SNMP 協議的最初版本,提供最小限度的網絡管理功能。SNMPv1 的 SMI 和 MIB 都比較簡單,且存在較多安全缺陷。SNMPv1 采用團體名認證。團體名的作用類似於密碼,用來限制NMS對Agent 的訪問。如果 SNMP 報文攜帶的團體名沒有得到 NMS/Agent 的認可,該報文將被丟棄。SNMPV1 是一種簡單的請求/響應協議。網絡管理系統發出一個請求,snmp代理則返回一個響應。這一行為的實現是通過使用四種協議操作中的其中任一種完成的。這四種操作分別是 GET、GETNEXT、SET 和 TRAP。
NMS 通過 GET 操作,從 SNMP 代理處得到一個或更多的對象(實例)值。如果代理處不能提供請求列表中所有的對象(實例)值,它也就不提供任何值。
NMS 使用 GETNEXT 操作,請求代理從請求列表或對象列表中取出下一 個對象實例值。
NMS 通過 SET 操作向 SNMP 代理發送命令,要求對對象值重新配置。
SNMP 代理通過 TRAP 操作不定時的通知 NMS 所發生的特定事件
SNMPV2
SNMPV2 中還定了兩種新操作,即 GET BULK 和 INFORM。NMS 通過 GET BULK 操作能有效地獲取大塊數據,如對象列表中的多行。請求多少數據 GETBULK 返回一個包含盡可能多的請求數據的應答消息。INFORM 操作使一個NMS 能發送 TRAP 給另一個 NMS 並收到回復。SNMPV2中,如果回復 GET BULK 操作的 SNMP 代理不能提供請求表中所有變量值,那么SNMP代理只提供部分結果。
SNMPV3
SNMPv3主要在安全性方面進行了增強,它采用了 USM(基於用戶的安全控制模型)和 VACM(基於視圖的訪問控制模型) 技術。USM 提供了認證和加密功能,VACM 確定用戶是否被允許訪問特定的 MIB 對象以及訪問方式。
SNMPV3 中增加了安全管理方式及遠程控制。SNMPV3 結構引入了基於用戶的安全模型(USM)用於保證消息安全,基於視圖的訪問控制模型(VACM)用於訪問控制。
SNMPV3 使用 SNMP SET 命令配置MIB對象,使之能動態配置SNMP代理。這種動態配置方式支持本地或遠程地配置實體的添加、刪除及修改。
五、管理信息庫MIB
任何一個被管理的資源都表示成一個對象,稱為被管理的對象。MIB是被管理對象的集合。它定義了被管理對象的一系列屬性:對象的名稱、對象的訪問權限和對象的數據類型等。每個SNMP設備(Agent)都有自己的MIB。MIB也可以看作是NMS和Agent之間的溝通橋梁。它們之間的關系如圖所示。
MIB Tree
MIB數據對象以一種樹狀分層結構進行組織,這個樹狀結構中的每個分枝都有一個專用的名字和一個數字形式的標識符。上圖表示的是標准MIB的組織體系,列出了從MIB結構樹的樹根到各層樹枝的全部內容。結構樹的分枝實際表示的是數據對象的邏輯分組。而樹葉,有時候也叫節點(node),代表了各個數據對象。在結構樹中使用子樹表示增加的中間分枝和增加的樹葉。
使用這個樹狀分層結構,MIB瀏覽器能夠以一種方便而且簡潔的方式訪問整個MIB數據庫。MIB瀏覽器是這樣一種工具,他能夠遍歷整棵MIB結構樹,通常以圖像顯示的形式來表示各個分枝和樹葉對象。能夠通過其數字標識符來查找MIB中的數據對象,這個數字標識符號從結構樹的頂部(或根部)開始,直到各個葉子節點(即數據對象)為止。這種訪問方式和文檔系統的組織方式一致。兩者的主要區別在於文檔系統中的路徑名能夠以絕對也能夠以相對方式表示,而MIB數據對象只能以絕對方式表示,不能使用相對方式。例如,在圖中,有三個頂級對象,即ISO、ITU-T和這兩個組織的聯合體。iso(1)位於結構樹的最上方,而sysDescr(1)處在葉子節點的位置,現在看不到。通常用帶點的符號來表示數據對象的標識符。要訪問數據對象sysDescr(1),其完整的標識符應該是這樣的:iso.org.dod.internet.mgmt.mib-2.system.sysDescr(這個標識符應該從左向右讀)。數據對象也能夠以另一種更短的格式表示,即用數字形式標識符代替分枝名形式的表示形式。這樣,上面的那種形式的標識符iso.org.dod.internet.mgmt.mib-2.system.sysDescr 還能夠用 1.3.6.1.2.1.1.1 來表示。這兩種表達格式的作用是一致的,都表示同一個MIB數據對象。dod指Department of Defense美國國防部,mgmt表示管理,以前用mib表示管理信息庫,現在改名為mib-2,system表示主機或路由器的操作系統這一類的信息。
當網絡管理協議在報文中使用MIB變量時,每個變量名后還要加一個后綴,以作為該變量的一個實例。如sysName的實例數字表示為:1.3.6.1.2.1.1.5.0
OID(Object Identifier):每個管理對象都有自己的OID(Object Identifier),管理對象通過樹狀結構進行組織,OID由樹上的一系列整數組成,整數之間用點( . )分隔開,樹的葉子節點才是真正能夠被管理的對象。
六、管理信息結構(SMI)
SMI定義了SNMP框架所用信息的組織、組成和標識,它還為描述MIB對象和描述協議怎樣交換信息奠定了基礎。
SMI定義的數據類型:
◆ 簡單類型(simple)
INTEGER:整型是-232-1~232的有符號整數
OCTER STRING: 字符串是0~65535個字節的有序序列
DisplayString:0~多個8bit字節,每個字節必須是ASCII碼,相當於字符串
OBJECT IDENTIFIER: 來自按照ASN.1規則分配的對象標識符集
◆ 簡單結構類型(simple-constructed)
SEQUENCE :用於列表。這一數據類型與大多數程序設計語言中的“structure”類似。一個SEQUENCE包括0個或更多元素,每一個元素又是另一個ASN.1數據類型
SEQUENCE OF :用於表格。這一數據類型與大多數程序設計語言中的“array”類似。一個表格包括0個或更多元素,每一個元素又是另一個ASN.1數據類型。
◆ 應用類型(application-wide)
IpAddress: 以網絡序表示的IP地址。因為它是一個32位的值,所以定義為4個字節;
Counter:計數器是一個非負的整數,它遞增至最大值,而后回零。在SNMPv1中定義的計數器是32位的,即最大值為4294967295;
Gauge :也是一個非負整數,它可以遞增或遞減,但達到最大值時保持在最大值,最大值為232-1;
Time ticks:是一個時間單位,表示以0.01秒為單位計算的時間;
七、SNMP的消息構成
SNMP協議定義了數據包的格式,及網絡管理員和管理代理之間的信息交換,它還控制着管理代理的MIB數據對象。因此,可用於處理管理代理定義的各種任務。
一條SNMP消息由"版本號"、"SNMP共同體名"和"協議數據單元(PDU)"構成,數據包的長度不是固定的。
- 版本識別符(version identifier):用於說明現在使用的是哪個版本的SNMP協議,確保SNMP代理使用相同的協議,每個SNMP代理都直接拋棄與自己協議版本不同的數據報。
- 團體名(Community Name):團體(community)是基本的安全機制,用於實現SNMP網絡管理員訪問SNMP管理代理時的身份驗證。類似於密碼,默認值為 public。團體名(Community name)是管理代理的口令,管理員被允許訪問數據對象的前提就是網絡管理員知道網絡代理的口令。如果把配置管理代理成可以執行Trap命令,當網絡管理 員用一個錯誤的分區名查詢管理代理時,系統就發送一個autenticationFailure trap報文。
- 協議數據單元(PDU):PDU (協議數據單元)是SNMP消息中的數據區, 即Snmp通信時報文數據的載體。PDU指明了SNMP的消息類型及其相關參數。
1 、SNMP的5種協議數據單元
SNMP中定義了五種消息類型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
(1)Get-Request 、Get-Next-Request與Get-Response
SNMP 管理站用Get-Request消息從擁有SNMP代理的網絡設備中檢索信息,而SNMP代理則用Get-Response消息響應。Get-Next- Request用於和Get-Request組合起來查詢特定的表對象中的列元素。
(2)Set-Request
SNMP管理站用Set-Request 可以對網絡設備進行遠程配置(包括設備名、設備屬性、刪除設備或使某一個設備屬性有效/無效等)。
(3)Trap
SNMP代理使用Trap向SNMP管理站發送非請求消息,一般用於描述某一事件的發生,如接口UP/DOWN,IP地址更改等。
上面五種消息中Get-Request、Get-Next-Request和Set-Request是由管理站發送到代理側的161端口的;后面兩種Get-Response和Trap 是由代理進程發給管理進程的,其中Trap消息被發送到管理進程的162端口,所有數據都是走UDP封裝。SNMP工作流程如圖:
下圖是封裝成UDP數據報的5種操作的SNMP報文格式。可見一個SNMP報文共有三個部分組成,即公共SNMP首部、get/set首部、trap首部、變量綁定。
(1)公共SNMP首部
共三個字段:
- 版本 :寫入版本字段的是版本號減1,對於SNMP(即SNMPV1)則應寫入0。
- 共同體(community):共同體就是一個字符串,作為管理進程和代理進程之間的明文口令,常用的是6個字符“public”。
- PDU類型:根據PDU的類型,填入0~4中的一個數字,其對應關系如表所示。
PDU類型 | 名稱 |
0 | get-request |
1 | get-next-request |
2 | get-response |
3 | set-request |
4 | trap |
(2)get/set首部
- 請求標識符(request ID):這是由管理進程設置的一個整數值。代理進程在發送get-response報文時也要返回此請求標識符。管理進程可同時向許多代理發出get報文,這些報文都使用UDP傳送,先發送的有可能后到達。設置了請求標識符可使管理進程能夠識別返回的響應報文對於哪一個請求報文
- 差錯狀態(error status):由代理進程回答時填入0~5中的一個數字,見如下表的描述
差錯狀態描述 | ||
差錯狀態 | 名稱 | 說明 |
0 | noError | 一切正常 |
1 | tooBig | 代理無法將回答裝入一個SNMP報文之中 |
2 | noSuchName | 操作指明了一個不存在的變量 |
3 | badValue | 一個set操作指明了一個無效值或無效語法 |
4 | readOnly | 管理進程試圖修改一個只讀變量 |
5 | genErr | 其他的差錯 |
差錯索引(error index)
當出現noSuchName、badValue或readOnly的差錯時,由代理進程在回答時設置的一個整數,它指明有差錯的變量在變量列表中的偏移。
(3)trap首部
trap報文格式如下:
- 企業(enterprise):填入trap報文的網絡設備的對象標識符。此對象標識符肯定是在圖3的對象命名樹上的enterprise結點{1.3.6.1.4.1}下面的一棵子樹上。
- 代理地址:即代理進程所在系統的地址。
- trap類型:此字段正式的名稱是generic-trap,共分為表4中的7種。
trap類型 | 名字 | 說明 |
0 | coldStart | 代理進行了初始化 |
1 | warmStart | 代理重新進行了初始化 |
2 | linkDown | 一個接口從工作狀態變為故障狀態 |
3 | linkUp | 一個接口從故障狀態變為工作狀態 |
4 | authenticationFailure | 從SNMP管理進程收到無效共同體的報文 |
5 | egpNeighborLoss | 一個EGP相鄰路由器變為故障狀態 |
6 | enterpriseSpecific | 代理自定義的事件,需要用后面的"特定代碼"來指明 |
當使用上述類型2、3、5時,在報文后面變量部分的第一個變量應標識響應的接口。
- 特定代碼:特定代碼僅僅在trap類型為6時有效,否則都置為0,他是廠家自定義的事件代碼。
- 時間戳(timestamp):指明自代理進程初始化到trap報告的事件發生所經歷的時間,單位為10ms。例如時間戳為1908表明在代理初始化后1908ms發生了該時間。
(4)變量綁定(variable-bindings)
指明一個或多個變量的名和對應的值。在get或get-next報文中,變量的值應忽略。
參考地址