分享、傳播有價值的知識
阿龍希望每一個讀者去認識、學習一個新的東西的時候,能帶著這樣疑問句句式去學習新技術。xxx是什麼鬼東西?為什麼會有它的出現?why?
SNMP是什麼鬼東西?為什麼會有它的出現?
早期,網絡可能比較單一、設備的數量也較少,那時如果要去管理、查看設備上的信息就一臺一臺登錄到設備上,逐個查看。但是網絡發展到今天,企業的業務利用網絡越來越豐富了,設備數量急劇增加,如果再一臺臺去登錄管理,那麼企業的管理員工作量就非常大了。so,SNMP就出現了。有了這個協議,企業就部署一臺snmp伺服器,來它為管理員做一部分工作。snmp伺服器可以定期去採集設備的信息,例如,看看設備的內存還剩多少啊?看看設備當前的CPU溫度多高啊? 我舉個例子吧!這種工作模式,就有點像生活中的醫院,在醫院每層樓都有個服務臺,和許多病房(這病房裡的病人就好比設備。)護士,會定期去測量病人體溫(好比SNMP定期去採集設備的溫度)。護士,把所有病人的體溫統一收集到服務臺,一般服務臺有個信息欄,xxx病房 xxx病人 體溫為xxx。這樣,醫生只要在服務臺查看,就能了解病人的狀態了。無需到每個人病人去測體溫。醫生的工作量也就減少了。
SNMP還有個trap功能,這個功能就好比病人如果突然感到不適了,或者輸液藥水輸完了,只需按一下床頭的按鈕,就可以呼叫護士了。 設備也是這樣的,如果設備出現異常,就會主動通過trap報文告知snmp伺服器。snmp伺服器上可以設置簡訊告警,然後管理員就可以通過收到簡訊獲悉了。
來看看,官方的定義是如何解釋的?
定義簡單網絡管理協議SNMP(Simple Network Management Protocol)是廣泛應用於TCP/IP網絡的網絡管理標準協議。SNMP提供了一種通過運行網絡管理軟體的中心計算機(即網絡管理工作站)來管理設備的方法。SNMP的特點如下:
目的隨著網絡技術的飛速發展,在網絡不斷普及的同時也給網絡管理帶來了一些問題:
在這種背景下,SNMP應運而生。通過「利用網絡管理網絡」的方式,SNMP實現了對網絡設備的高效和批量的管理;同時,SNMP協議也屏蔽了不同產品之間的差異,實現了不同種類和廠商的網絡設備之間的統一管理。
版本演進1990年5月,RFC 1157定義了SNMP的第一個版本SNMPv1。RFC 1157提供了一種監控和管理計算機網絡的系統方法。SNMPv1基於團體名認證,安全性較差,且返回報文的錯誤碼也較少。
後來,IETF頒布了SNMPv2c。SNMPv2c中引入了GetBulk和Inform操作,支持更多的標準錯誤碼信息,支持更多的數據類型(Counter64、Counter32)。
鑑於SNMPv2c在安全性方面沒有得到改善,IETF又頒布了SNMPv3的版本,提供了基於USM(User Security Module)的認證加密和基於VACM(View-based Access Control Model)的訪問控制。
受益網絡管理員可以利用SNMP平臺在網絡上的任意節點完成信息查詢、信息修改和故障排查等工作,工作效率得以提高。
屏蔽了設備間的物理差異,SNMP僅提供最基本的功能集,使得管理任務與被管理設備的物理特性、網絡類型相互獨立,因而可以實現對不同設備的統一管理,管理成本低。
設計簡單、運行代價低,SNMP採用「儘可能簡單」的設計思想,其在設備上添加的軟體/硬體、報文的種類和報文的格式都力求簡單,因而運行SNMP給設備造成的影響和代價都被最小化。
想要學好SNMP,一定要記住四個組件。把這4個組件記牢了,帶著這四個組件去學習,相信,聰明的你,很快就能掌握SNMP了。
SNMP系統包括網絡管理系統NMS(Network Management System)、代理進程Agent、被管對象Management object和管理信息庫MIB(Management Information Base)四部分組成。
NMS作為整個網絡的網管中心,對設備進行管理。
每個被管理設備中都包含駐留在設備上的Agent進程、MIB和多個被管對象。NMS通過與運行在被管理設備上的Agent交互,由Agent通過對設備端的MIB的操作,完成NMS的指令。
網絡管理模型如圖1所示。
圖1 SNMP管理模型
下面介紹網絡管理系統中各主要元素:
NMS
NMS在網絡中扮演管理者角色,是一個採用SNMP協議對網絡設備進行管理/監視的系統,運行在NMS伺服器上。
Agent
Agent是被管理設備中的一個代理進程,用於維護被管理設備的信息數據並響應來自NMS的請求,把管理數據匯報給發送請求的NMS。
Management object
Management object指被管理對象。每一個設備可能包含多個被管理對象,被管理對象可以是設備中的某個硬體,也可以是在硬體、軟體(如路由選擇協議)上配置的參數集合。
MIB
MIB是一個資料庫,指明了被管理設備所維護的變量(即能夠被Agent查詢和設置的信息)。MIB在資料庫中定義了被管理設備的一系列屬性:對象的名稱、對象的狀態、對象的訪問權限和對象的數據類型等。
通過MIB,可以完成以下功能:
SNMP的管理信息庫採用和域名系統DNS相似的樹型結構,它的根在最上面,根沒有名字。如圖2所示的是管理信息庫的一部分,它又稱為對象命名樹。每個OID(object identifier,對象標識符)對應於樹中的一個管理對象,如system的OID為1.3.6.1.2.1.1, interfaces的OID為1.3.6.1.2.1.2。
通過OID樹,可以高效且方便地管理其中所存儲的管理信息,同時也方便了對其中的信息進行批量查詢。
特別地,當用戶在配置Agent時,可以通過MIB視圖來限制NMS能夠訪問的MIB對象。MIB視圖實際上是MIB的子集合。
圖2 OID樹結構
了解了四大組件後,再去研究SNMP不用版本之間差異,那snmp基本也學得差不多了。
NMPv1/SNMPv2c報文結構如圖1所示,SNMPv1/SNMPv2c報文主要由版本、團體名、SNMP PDU三部分構成。
圖1 SNMPv1/SNMPv2c報文結構
報文中的主要欄位定義如下:
版本:表示SNMP的版本,如果是SNMPv1報文則對應欄位值為0,SNMPv2c則為1。
團體名:用於在Agent與NMS之間完成認證,字符串形式,用戶可自行定義。團體名包括「可讀」和「可寫」兩種,執行GetRequest、GetNextRequest操作時,採用「可讀團體名」進行認證;執行Set操作時,則採用「可寫團體名」認證。
SNMPv1/SNMPv2c PDU:包含PDU類型、請求標識符、變量綁定列表等信息。其中SNMPv1 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU和Trap PDU幾種類型,SNMPv2c PDU在SNMPv1的基礎上新增了GetBulkRequest PDU。
為了簡化起見,SNMP操作今後叫做Get、GetNext、Set、Response、Trap和GetBulk操作。
SNMPv1/SNMPv2c操作類型如表1所示,SNMPv1/SNMPv2c規定了6種操作類型,用來完成NMS和Agent之間的信息交換。
表1 SNMPv1/SNMPv2c中涉及的操作操作
描述
Get
Get操作可以從Agent中提取一個或多個參數值。
GetNext
GetNext操作可以從Agent中按照字典序提取下一個參數值。
Set
Set操作可以設置Agent的一個或多個參數值。
Response
Response操作可以返回一個或多個參數值。這個操作是由Agent發出的,它是GetRequest、GetNextRequest、SetRequest和GetBulkRequest四種操作的響應操作。Agent接收到來自NMS的Get/Set指令後,通過MIB完成相應的查詢/修改操作,然後利用Response操作將信息回應給NMS。
Trap
Trap信息是Agent主動向NMS發出的信息,告知管理進程設備端出現的情況。
GetBulk
GetBulk操作實現了NMS對被管理設備的信息群查詢。
SNMPv1/SNMPv2c工作原理SNMPv1和SNMPv2c的工作原理基本一致。SNMPv1/SNMPv2c的工作原理如圖2所示。
圖2 基本操作類型
NMS:向Agent發送Get請求報文。報文中各欄位的設置如下:版本號為所使用的SNMP版本;團體名為public;PDU中PDU類型為Get類型,綁定變量填入MIB節點名sysContact。
Agent:首先對報文中攜帶版本號和團體名進行認證,認證成功後,Agent根據請求查詢MIB中的sysContact節點,得到sysContact的值並將其封裝到Response報文中的PDU,向NMS發送響應;如果查詢不成功,Agent會向NMS發送出錯響應。
GetNext操作
假定NMS想要獲取被管理設備MIB節點sysContact的下一個節點sysName值,使用可讀團體名為public,過程如下所示:
NMS:向Agent發送GetNext請求報文。報文中各欄位的設置如下:版本號為所使用的SNMP版本;團體名為public;PDU中PDU類型為GetNext類型,綁定變量填入MIB節點名sysContact。
Agent:首先對報文中攜帶版本號和團體名進行認證,認證成功後,Agent根據請求查詢MIB中的sysContact的下一個節點sysName,得到sysName的值並將其封裝到Response報文中的PDU,向NMS發送響應;如果查詢不成功,Agent會向NMS發送出錯響應。
Set操作
假定NMS想要設置被管理設備MIB節點sysName的值為HUAWEI,使用可寫團體名為private,過程如下所示:
NMS:向Agent發送Set請求報文。報文中各欄位的設置如下:版本號為所使用的SNMP版本;團體名為private;PDU中PDU類型為Set類型,綁定變量填入MIB節點名sysContact和需要設置的值HUAWEI。
Agent:首先對報文中攜帶版本號和團體名進行認證,認證成功後,Agent根據請求設置管理變量在管理信息庫MIB中對應的節點,設置成功後向NMS發送響應;如果設置不成功,Agent會向NMS發送出錯響應。
Trap操作
Trap不屬於NMS對被管理設備的基本操作,它是被管理設備的自發行為。當被管理設備達到告警的觸發條件時,會通過Agent向NMS發送Trap消息,告知設備側出現的異常情況,便於網絡管理人員及時處理。例如被管理設備熱啟動後,Agent會向NMS發送warmStart的Trap。
這種Trap信息是受限制的。只有在設備端的模塊達到模塊預定義的告警觸發條件時,Agent才會向管理進程報告。這種方法有其好處是僅在嚴重事件發生時才發送Trap信息,減少報文交互產生的流量。
SNMPv2c新增的操作如圖3所示。
圖3 SNMPv2c新增操作
SNMPv3定義了新的報文格式,其報文結構如圖1所示。
圖1 SNMPv3報文結構
SNMP報文中的主要欄位定義如下:
版本:表示SNMP的版本,SNMPv3報文則對應欄位值為2。
報頭數據:主要包含消息發送者所能支持的最大消息尺寸、消息採用的安全模式等描述內容。
安全參數:包含SNMP實體引擎的相關信息、用戶名、認證參數、加密參數等安全信息。
Context EgineID:SNMP唯一標識符,和PDU類型一起決定應該發往哪個應用程式。
Context Name:用於確定Context EgineID對被管理設備的MIB視圖。
SNMPv3 PDU:包含PDU類型、請求標識符、變量綁定列表等信息。其中SNMPv3 PDU包括GetRequest PDU、GetNextRequest PDU、SetRequest PDU、Response PDU、Trap PDU和GetBulkRequest PDU。
SNMPv3的體系結構SNMPv3提出了一個新的SNMP體系結構,這個體系結構為各種基於SNMP的NMS提供了一個通用的實現模型,即SNMPv3實體。SNMPv3實體可以分為SNMPv3引擎(SNMPv3 Engine)和SNMPv3應用程式(SNMPv3 Application),引擎與應用程式均由多個小模塊組成。
SNMPv3實體這種模塊化的結構有以下優點:
適應性強:適用於多種操作環境,既可以管理最簡單的網絡,又能夠滿足複雜網絡的管理需求。
方便管理:SNMP框架體系由多個功能相對獨立的子系統或應用程式集合而成,因而可以很方便地對其進行管理。例如,若系統發生了故障,可以根據發生故障的功能類型,定位到相應的子系統。
擴展性好:通過SNMP實體,可以很方便地進行系統擴展。比如,為了應用新的安全協議,就可以在安全子系統中為其定義單獨的模塊,從而在SNMP中支持該協議。
SNMPv3由於採用了用戶安全模塊USM(User Security Model)和基於視圖的訪問控制模塊VACM(View-based Access Control Model),在安全性上得到了提升。
SNMPv3的工作原理SNMPv3的實現原理和SNMPv1/SNMPv2c基本一致,唯一的區別是SNMPv3增加了身份驗證和加密處理。下面以Get操作為例介紹下SNMPv3的工作原理。
假定NMS想要獲取被管理設備MIB節點sysContact的值,使用認證加密方式,過程如圖2所示:
圖2 SNMPv3的Get操作
NMS:向Agent發送不帶安全參數的Get請求報文,向Agent獲取Context EgineID、Context Name和安全參數(SNMP實體引擎的相關信息)。
Agent:響應NMS的請求,並向NMS反饋請求的參數。
NMS:再次向Agent發送Get請求報文,報文中各欄位的設置如下:
Agent:首先對消息進行認證,認證通過後對PDU進行解密。解密成功後,Agent根據請求查詢MIB中的sysContact節點,得到sysContact的值並將其封裝到Response報文中的PDU,並對PDU進行加密,向NMS發送響應。如果查詢不成功或認證、解密失敗,Agent會向NMS發送出錯響應。
讀而思網絡工程師阿龍
感謝您的關注。讓攻城獅們一起不斷成長!
宗旨:本公眾號唯一的宗旨就是分享價值,分享知識,分享經驗,共同參與討論,共同成長!三人行,必有我師焉!致力於幫助網絡工程師的疑難解答,讓這裡成為網絡工程師智慧互相碰撞的聚集地。