SNMP是英文"Simple Network Management Protocol"的縮寫,中文意思是"簡單網絡管理協議"。SNMP是一種簡單網絡管理協議,它屬於TCP/IP五層協議中的應用層協議,用於網絡管理的協議。SNMP主要用於網絡設備的管理。因爲SNMP協議簡單可靠 ,受到了衆多廠商的歡迎,成爲了目前最爲普遍的網管協議。
SNMP協議主要由兩大部分構成:SNMP管理站和SNMP代理。SNMP管理站是一箇中心節點,負責收集維護各個SNMP元素的信息,並對這些信息進行處理,最後反饋給網絡管理員;而SNMP代理是運行在各個被管理的網絡節點之上,負責統計該節點的各項信息,而且負責與SNMP管理站交互,接收並執行管理站的命令,上傳各類本地的網絡信息。
SNMP管理站和SNMP代理之間是鬆散耦合。他們之間的通訊是經過UDP協議完成的。通常狀況下,SNMP管理站經過UDP協議向SNMP代理髮送各類命令,當SNMP代理收到命令後,返回SNMP管理站須要的參數。可是當SNMP代理檢測到網絡元素異常的時候,也能夠主動向SNMP管理站發送消息,通告當前異常情況。
SNMP的基本思想:爲不一樣種類的設備、不一樣廠家生產的設備、不一樣型號的設備,定義爲一個統一的接口和協議,使得管理員能夠是使用統一的外觀面對這些須要管理的網絡設備進行管理。經過網絡,管理員能夠管理位於不一樣物理空間的設備,從而大大提升網絡管理的效率,簡化網絡管理員的工做。
SNMP的工做方式:管理員須要向設備獲取數據,因此SNMP提供了【讀】操做;
管理員須要向設備執行設置操做,因此SNMP提供了【寫】操做;
設備須要在重要情況改變的時候,向管理員通報事件的發生,因此SNMP提供了【Trap】操做。
2.2 SNMP 和 UDP
SNMP採用UDP協議在管理端和agent之間傳輸信息。 SNMP採用UDP 161端口接收和發送請求,162端口接收trap,執行SNMP的設備缺省都必須採用這些端口。
2.3 Snmp版本
SNMP目前共有v1,v2,v3這三個版本:
- SNMP v1是SNMP協議的最第一版本,不過依然是衆多廠家實現SNMP基本方式。
- SNMP v2一般被指是基於community的SNMP V2。Community實質上就是密碼。
- SNMP v3 是最新版本的SNMP。它對網絡管理最大的貢獻在於其安全性。增長了對認證和密文傳輸的支持。
2.4 Snmp的實現結構
-
被管理的設備:
-
SNMP代理 : 【被】監管的設備上運行一個SNMP代理(Agent)),代理實現設備與管理站的SNMP通訊。
-
網絡管理系統(NMS): 負責網管命令的發出、數據存儲、及數據分析。又稱爲【管理站】
-
網絡中被管理的每個設備都存在一個管理信息庫(MIB)用於收集並儲存管理信息。
經過SNMP協議,NMS能獲取這些信息。被管理設備,又稱爲網絡單元或網絡節點,能夠是支持SNMP協議的路由器、交換機、服務器或者主機等等。 -
SNMP代理是被管理設備上的一個網絡管理軟件模塊,擁有本地設備的相關管理信息,並用於將它們轉換成與SNMP兼容的格式,傳遞給NMS。
-
NMS運行應用程序來實現監控被管理設備的功能。另外,NMS還爲網絡管理提供大量的處理程序及必須的儲存資源。
(1)管理信息庫MIB
MIB文件中的變量使用的名字取自ISO和ITU管理的對象標識符(object identifier)名字空間。它是一種分級樹的結構。
OID(Object Identifier):
每一個管理對象都有本身的OID(Object Identifier),管理對象經過樹狀結構進行組織,OID由樹上的一系列整數組成,整數之間用點( . )分隔開,樹的葉子節點纔是真正可以被管理的對象。
以下圖所示,第一級有三個節點:ccitt、iso、iso-ccitt。低級的對象ID分別由相關組織分配。一個特定對象的標識符可經過由根到該對象的路徑得到。通常網絡設備取iso節點下的對象內容。
如名字空間ip結點下一個名字爲ipInReceives的MIB變量被指派數字值3,於是該變量的名字爲: iso.org.dod.internet.mgmt.mib.ip.ipInReceives ,,對應的對象標識符OID爲: 1.3.6.1.2.1.4.3
當網絡管理協議在報文中使用MIB變量時,每一個變量名後還要加一個後綴,以做爲該變量的一個實例。如ipInReceives的實例數字表示爲:1.3.6.1.2.1.4.3.0. 須要注意的是,MIB中的管理對象的OID有些須要動態確 定:如IP路由表,爲了指明地址172.18.20.220的下一站路由(next hop),咱們能夠引用這樣的實例:
iso.org.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.172.18.20.220, 相應的數字表示爲:1.3.6.1.2.1.4.21.1.7.172.18.20.220
(2)管理信息結構(SMI)
SMI定義了SNMP框架所用信息的組織、組成和標識,它還爲描述MIB對象和描述協議怎樣交換信息奠基了基礎。SMI定義的數據類型:
◆ 簡單類型(simple)
- Integer:整型是-2,147,483,648~2,147,483,647的有符號整數
- octet string: 字符串是0~65535個字節的有序序列
- OBJECT IDENTIFIER: 來自按照ASN.1規則分配的對象標識符集
◆ 簡單結構類型(simple-constructed)
- SEQUENCE 用於列表。這一數據類型與大多數程序設計語言中的「structure」相似。一個SEQUENCE包括0個或更多元素,每個元素又是另外一個ASN.1數據類型
- SEQUENCE OF type 用於表格。這一數據類型與大多數程序設計語言中的「array」相似。一個表格包括0個或更多元素,每個元素又是另外一個ASN.1數據類型。
◆ 應用類型(application-wide)
- IpAddress: 以網絡序表示的IP地址。由於它是一個32位的值,因此定義爲4個字節;
- counter:計數器是一個非負的整數,它遞增至最大值,然後回零。在SNMPv1中定義的計數器是32位的,即最大值爲4,294,967,295;
- Gauge :也是一個非負整數,它能夠遞增或遞減,但達到最大值時保持在最大值,最大值爲232-1;
- time ticks:是一個時間單位,表示以0.01秒爲單位計算的時間;
(3)SNMP報文
SNMP中定義了五種消息類型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
- get-request操做:從代理進程處提取一個或多個參數值。Get-Request是由管理站發送到代理側的161端口的;
- get-next-request操做:從代理進程處提取一個或多個參數的下一個參數值。Get-Next-Request是由管理站發送到代理側的161端口的;
- set-request操做:設置代理進程的一個或多個參數值。Set-Request是由管理站發送到代理側的161端口的;
- response操做:返回的一個或多個參數值。這個操做是由代理進程發出的。它是前面3中操做的響應操做。
- trap操做:代理進程主動發出的報文,通知管理進程有某些事情發生。Trap 是由代理進程發給管理進程的,其中Trap消息被髮送到管理進程的162端口,全部數據都是走UDP封裝。
2.5 SNMP報文格式
(1)公共SNMP首部 共三個字段:
- 版本 該字段的值是經過SNMP版本號減1獲得的,因此:
XX=0 對應SNMPv1
XX=1 對應SNMPv2c
XX=2 對應SNMPv2
XX=3 對應SNMPv3
- 共同體(community)共同體就是一個字符串,做爲管理進程和代理進程之間的明文口令,經常使用的是6個字符「public」。
- PDU類型: 以下圖:
(2)get/set首部
- 請求標識符(request ID) : 這是由管理進程設置的一個整數值。代理進程在發送get-response報文時也要返回此請求標識符。管理進程可同時向許多代理髮出get報文,這些報文都使用UDP傳送,先發送的有可能後到達。設置了請求標識符可以使管理進程可以識別返回的響應報文對於哪個請求報文
- 差錯狀態(error status):由代理進程回答時填入0~5中的一個數字,以下:
- 差錯索引(error index): 當出現noSuchName、badValue或readOnly的差錯時,由代理進程在回答時設置的一個整數,它指明有差錯的變量在變量列表中的偏移。
(3)trap首部
- 企業(enterprise):填入trap報文的網絡設備的對象標識符。此對象標識符確定是在圖3的對象命名樹上的enterprise結點{1.3.6.1.4.1}下面的一棵子樹上。
- trap類型 :此字段正式的名稱是generic-trap,共分爲7種:
當使用上述類型二、三、5時,在報文後面變量部分的第一個變量應標識響應的接口。
- 特定代碼(specific-code) : 指明代理自定義的時間(若trap類型爲6),不然爲0。
- 時間戳(timestamp) : 指明自代理進程初始化到trap報告的事件發生所經歷的時間,單位爲10ms。例如時間戳爲1908代表在代理初始化後1908ms發生了該時間。
(4)變量綁定(variable-bindings) 指明一個或多個變量的名和對應的值。在get或get-next報文中,變量的值應忽略。
2.6 代理和管理站的模型
Snmp分2種角色:SNMP管理站和SNMP代理(agent)。
- 管理站指的是運行了能夠執行網絡管理任務軟件的服務器,一般被稱做爲網絡管理工做站(NMS),NMS負責採樣網絡中agent的信息,並接受agent的trap。
- 代理是實際網絡設備中用來實現SNMP功能的部分。
代理在UDP的161端口接收NMS的讀寫請求消息,管理站在UDP的162端口接收代理的事件通告消息。
因此,一旦獲取設備的訪問權限(community,默認爲public),就能夠訪問設備信息、改寫和配置設備參數。因爲採用UDP協議,不須要在代理和管理站之間保持鏈接。
2.7 SNMP的操做命令
SNMP協議之因此易於使用,這是由於它對外提供了三種用於控制MIB對象的基本操做命令。它們是:Get、Set 和 Trap。
- Get:管理站讀取代理者處對象的值。它是SNMP協議中使用率最高的一個命令,由於該命令是從網絡設備中得到管理信息的基本方式。
- Set:管理站設置代理者處對象的值。它是一個特權命令,由於能夠經過它來改動設備的配置或控制設備的運轉狀態。它能夠設置設備的名稱,關掉一個端口或清除一個地址解析表中的項等。
- Trap: 代理者主動向管理站通報重要事件。它的功能就是在網絡管理系統沒有明確要求的前提下,由管理代理通知網絡管理系統有一些特別的狀況或問題 發生了。若是發生意外狀況,客戶會向服務器的162端口發送一個消息,告知服務器指定的變量值發生了變化。一般由服務器請求而得到的數據由服務器的161 端口接收。Trap 消息能夠用來通知管理站線路的故障、鏈接的終端和恢復、認證失敗等消息。管理站可相應的做出處理。
2.8 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的消息類型及其相關參數。