SNMP(Simple Network Management Protocol)——简单网络管理协议
目錄
一、SNMP簡介
1.背景
2.SNMP管理的網絡架構
二、SNMP MIB
1.SNMP MIB簡介
2.MIB分類
(1)公有MIB
(2)私有MIB
3.被管理設備的基本屬性
(1)對象表示符
(2)對象的狀態
(3)對象的訪問權限
(4)對象的數據類型
三、SNMPv1工作原理
1.SNMPv1操作類型
2.SNMPv1報文格式
(1)Version
(2)Community
(3)SNMP PDU
(4)PDU Type
(5)Request ID
(6)Error Status
(7)Error Index
(8)Variable Bindings
(9)Enterprise
(10)Agent Addr
(11)Generic Trap
(12)Specific Trap
(13)Time Stamp
四、SNMPv2c工作原理
1.SNMPv2c報文格式
(1)Get-Request、Get-Next-Requset、Set-Request、Response和Inform PDU的格式
(2)SNMPv2c Trap PDU格式
(3)Get-Bulk-Request PDU格式
五、SNMPv3工作原理
1.SNMPv3操作類型
2.SNMPv3報文格式
一、SNMP簡介
1.背景
SNMP是廣泛應用于TCP/IP網絡的一種通用網絡管理協議,可以實現對全網中所有設備的集中管理,遠比CLI和Web管理方式更加高效。而且,因為SNMP是國際通用協議,所以各大品牌設備都支持。一套SNMP的網絡管理系統可以對不同種類和不同廠商的設備進行統一管理,從而提升網絡的管理效率。
2.SNMP管理的網絡架構
在SNMP中有兩類重要的實體,一類是采用SNMP對網絡設備進行監控、管理的應用層軟件,在一套主機上運行著網絡管理進程,使用UDP 162端口,可以被看成是SNMP客戶端,每個被管理設備在配置了SNMP功能后,使用UDP 161端口和運行代理(Agent)進程,可以被看成是SNMP服務器,代理進程負責維護被管理設備的信息數據,并響應來自NMS的請求,把管理數據匯報給發送請求的NMS。
基于SNMP管理的網絡架構
二、SNMP MIB
1.SNMP MIB簡介
表面上就看,NMS管理的是設備,事實上管理的是設備商的一個個被管理對象,每臺設備可能包括多個被管理對象,可以是設備中的某個硬件(如某個設備接口),也可以是在硬件、軟件上配置的參數集合。SNMP通過MIB描述被管理設備商的各個對象。
被管設備上的代理進程收到NMS的請求信息,通過MIB完成響應的指令后,并把操作結果響應給NMS,當系統發聲故障或者發生其他事件時,設備也會通過代理進程主動發從Trap信息給NMS,報告設備當前的狀態變化。
SNMP中的MIB是一個分層結構,我們稱為對象命名樹,或對象標識符(OID)樹
SNMP MIB對象命名樹
在MIB對象命名樹中,每一個節點代表一類對象。每類對象既有一個名稱,又有一個節點標識,就是小括號中的數字。節點標識只要求在樹中同層次節點間唯一,分支中各節點標識以小圓點(.)分隔,由上至下串行連接起來就形成了OID,每個對象的OID在整個對象命名樹中時唯一的。
MIB對象命名樹的頂級對象有三個,即ITU-T的ccitt(0),IOS的ios(1)和ITU-T、IOS兩個組織的聯合體join-ios-ccitt(2),形成了3個子樹,這3個頂級對象旁邊的數字代表了它們對應的標識,分別是0、1、2。
2.MIB分類
(1)公有MIB
一般由RFC定義,主要用來對各種公有協議(IP、ICMP、TCP、UDP等)進行結構化設計和接口標準化處理。大多數的設備制造商都需要按照RFC的定義來提供SNMP接口,這部分對應的MIB是對象命名樹中的mib節點下面的對象。
(2)私有MIB
是公有MIB的必要補充。公司自行研發的私有協議或者特有功能時,可以利用私有MIB來完善SNMP接口的管理功能,同時對第三方網絡管理軟件管理存在私有協議或特有功能的設備提供支持,這部分對應的MIB是在internet(1)-private(4)-enterprise(1)節點下面的對象。
3.被管理設備的基本屬性
(1)對象表示符
就是由對象所在分支中各節點對象的節點表示,自上而下以小圓點分隔組成的一串數字,如mib對象的OID為1.3.6.1.2.3.
(2)對象的狀態
包括current(當前可用)、mandatory(必備)、optional(可選)、obsolete(禁用)、deprecate(已廢棄)等,不同的SNMP版本支持的狀態類型不完全一樣。
(3)對象的訪問權限
包括read-only(只讀)、read-write(讀寫、可以讀寫、修改配置信息)、read-create(可以讀取信息,修改配置,新增配置和刪除配置)和no-accessible(不可存取、無法進行任何操作),不同的SNMP版本支持權限完全不一樣。
(4)對象的數據類型
包括integer32、octetsring、object identifier、bull、ipaddress、counter32、counter64、gauge32、unsigned32、timeticks、opaque、BIT STRING等,不同的SNMP版本支持的數據類型完全不一樣。
三、SNMPv1工作原理
SNMPv1采用團體名(類似于共享密碼)認證,用來限制NMS對代理進程的訪問,如果SNMP報文攜帶的團體名沒有通過認證,則該SNMP報文將被丟棄。
1.SNMPv1操作類型
SNMPv1定義了5種操作類型
(1)Get-Request:NMS從代理進程的MIB中提取一個或多個參數值
(2)Get-Next-Request:NMS從代理進程的MIB中按照排序提取下一個參數值。
(3)Set-Request:NMS請求設置代理進程的MIB中的一個或多個參數請求。
(4)Response:代理進程返回一個或多個參數值,是對前3種請求操作的響應
(5)Trap:代理進程主動向NMS發送報文,告知設備上發生的緊急或重要事件。(如CPU使用率過高),但SNMPv1中的Trap報文無須NMS進行響應。
SNMPv1各種操作的交互方式
上面的5種操作,Get-Request,Get-Next-Request,Set-Request這3種請求操作與Response響應操作采用的是拉(pull)的方式,必須是先有請求,后有應答,即應答是非主動。而Trap操作是推(push)的方式,是由代理進程主動向NMS發送的,無須NMS請求。
2.SNMPv1報文格式
以上5種SNMPv1操作均有對應的SNMP報文,稱為PDU(協議數據單元),采用相同的SNMP頭部,基本格式如下:
SNMPv1報文格式
(1)Version
SNMP版本,是對應的版本號-1,如SNMPv1的本字段值為0。
(2)Community
團體名,用于代理進程與NMS之間的認證,有可讀和可寫兩種,如果是執行Get,GetNext操作,則采用可讀團體名進程認證,如果是執行Set操作,則采用可寫團體名進行認證,這樣可對不同管理人員的權限進行區分。
(3)SNMP PDU
是SNMPv1中的5種操作的消息內容,下面是各字段的具體介紹
SNMPv1的5中PDU格式
(4)PDU Type
代表PDU類型,Get-Request,Get-Next-Request,Response,Set-Request和Trap PDU的取值分別為0到4。
(5)Request ID
請求PDU ID,Response PDU的Request ID要與對應的Get-Requset、Get-Next-Request和Set-Request請求PDU中的Request ID一致。
(6)Error Status
表示在處理請求PDU時出現的粗偶狀態,如noError(無錯誤)、tooBig(響應內容太多,無法封裝在PDU中)、noSuchName(請求操作了一個不存在的變量)、badValue(Set操作使用了一個無效值或語法錯誤值)、readOnly(set操作試圖修改一個只讀屬性的變量)、genErr(其他通用錯誤)。SNMPv1支持的錯誤類型比較少,沒有細分,不便于故障分析。
(7)Error Index
差錯索引,當出現異常情況時,提供變量綁定列表中導致異常的變量的信息。
(8)Variable Bindings
變量綁定列表,由變量名和對應變量值組成,一個變量綁定列表中可以包括多變量。
(9)Enterprise
生成Trap信息的設備類型,以OID表示
(10)Agent Addr
Trap源(代理進程)的IP地址
(11)Generic Trap
通用Trap類型,以具體的ID值表示,包括coldStart(發生了冷啟動事件,取值為0)、warmStart(發生了熱啟動事件,取值為1)、linkDown(發生了鏈路關閉事件,取值為2)、Linkup(發生了激活鏈路事件,取值為3)、authenticationFailure(發生了認證失敗事件,取值為4)、egpNeighborLoss(發生了EGP鄰居丟失事件,取值為5)、enterpriseSpecific(發生了廠商自定義事件,取值為6)。
(12)Specific Trap
企業自定義的私有Trap信息。
(13)Time Stamp
自上次重新初始化網絡實體開始,到產生Trap消息時已持續的時間,即sysUpTime對象的取值。
四、SNMPv2c工作原理
SNMPv2c兩種新操作的交互方式
1.SNMPv2c報文格式
以上7種SNMP報文均使用如圖所示的SNMP報頭,但SNMPv2c的版本號為1。
(1)Get-Request、Get-Next-Requset、Set-Request、Response和Inform PDU的格式
Get-Request、Get-Next-Requset、Set-Request、Response四種PDU格式與SNMPv1對應的PDU格式一樣,Inform PDU格式與SNMPv1 Get-Request、Get-Next-Requset和Set-Request這3種PDU格式一樣。Get-Request、Get-Next-Requset、Set-Request、Response四種PDU的PDU Type字段值仍分別為0到3,但是Get-Bulk-Request、Inform和Trap PDU的PDU Type字段分別為5到7。
在SNMPv2c版本Response PDU的Error Status字段增加了更多錯誤類型,具體如下:
①wrongValue:進行set操作時候把變量修改為一個無效的值。
②wrongEncoding:錯誤的編碼字段值。
③wrongType:進行set操作時候把變量修改為一個無效的類型。
④wrongLength:進行set操作時候把一個變量值設置成與它長度不一致的值。
⑤wrongValue:把一個變量設置為當前情況下無效的值。
⑥inconsistentValue:把一個變量設置為當前情況下無效的值。
⑦noAccess:試圖設置一個不可訪問的值。
⑧notWritable:視圖修改一個存在,但不能修改的值。
⑨noCreation:試圖修改一個存在,但不能創建的值。
⑩inconsistentName:試圖設置一個當前不存在且不能創建的變量。
?commitFailed:set操作失敗
?undoFailed:進行set操作失敗,有些賦值無法回復
?genErr:除以上錯誤外的其他錯誤。
(2)SNMPv2c Trap PDU格式
它的格式與SNMPv1中的Trap PDU格式有所不同,它采用了SNMPv1的Get/Get-Next/Set PDU的請求PDU格式,但其PDU Type字段值為7,并將sysUpTime和snmpTrapOID作為Variable Bindings中的變量來構造報文。
(3)Get-Bulk-Request PDU格式
Get-Bulk-Request PDU的PDU Type字段值為5,格式與其他PDU格式有所不同,具體如下:
SNMPv2c Get-Bulk-Request PDU
①Non repeaters:指出在變量綁定列表中每次只返回一個后繼變量(每次返回只包含一個變量)的變量數,告訴Get-Bulk命令可以通過簡單的Get-Next操作檢索前N個對象。
②Max repetitions:指出在變量綁定列表中除Non repeaters字段指定范圍的變量外,其他變量可以返回的最大的后繼變量數(每次可以返回多個變量)告訴Get-Bulk命令嘗試使用M次Get-Next操作來檢索變量綁定表中其余的變量。
假設一個Get-Bulk變量綁定為列表中有1到10號共10個變量。如果在Get-Bulk操作中Non repeaters字段值設為3,Max repetitions字段值設為4,則一次請求后將發聲以下多次應答。
①因為Non repeaters字段值為3,所變量綁定列表中1到3號3個變量相當于對每個變量執行一次Get-Next操作,每次只請求返回后面的一個變量的值,這樣一來,第一次Response報文中只返回第一個變量的值,第二次的Response報文中返回第二個變量的值,第三次的Response報文中返回第三個變量的值,這些Responsen報文中每個只包含一個變量對應的值。
②變量綁定表中前3個變量的值返回后,要對其余變量進行請求,因為Non repeaters字段值為4,所以每次最多可返回4個變量的值,第一次(總共請求是4次)的Response報文中返回4到7號共4個變量的值,第二次(總共是第五次)的Response報文中返回8到10號共3個變量的值(因為變量列表中沒有其余變量了,所以本次僅返回3個變量的值)。
五、SNMPv3工作原理
SNMPv3是在SNMPv2c基礎之上增加了完全機制,完善了管理機制,提供了USM的認證加密和VACM的訪問控制,包括多個RFC。
1.SNMPv3操作類型
SNMPv3操作類型SNMPv2c基本是一致的,包括Get-Request、Get-Next-Requset、Set-Request、Response、Get-Bulk-Request、Inform、Trap7種(包括一個未定義具體的操作ReportPDU)
USM(基于用戶安全模型)引入了用戶名和組的概念,可以設置認證和加密功能。認證用于驗證報文發送方的合法性,避免非法用戶的訪問:加密則是對NMS和Agent之間傳輸的報文進行加密,以免被竊聽。通過有無認證和無加密等功能組合,可以為NMS何Agent之間的通信提供更高的安全保障。
VACM(基于視圖的訪問控制)技術定義了組、安全等級、上下文、MIB視圖、訪問策略5個元素。這些元素同時決定用戶是否具有訪問的權限,只有具有了訪問權限的用戶才能管理操作對象。同一個SNMP實體上可以定義不同的組,組與MIB視圖綁定,組內又可以定義多個用戶。當使用某個用戶名進行訪問的時候,只能訪問對應的MIB視圖定義對象。
SNMPv3的操作交互流程
交互流程如下:
(1)NMS向代理進程發送不帶安全參數、認證、加密標志位均置0的Get-Request消息,以獲取參數信息,主要從Agent獲取AuthoritativeEngineID(標識一個SNMP實體)信息。
(2)代理進程發送不帶安全參數,認證、加密標志位置0的Response消息響應NMS的請求,恢復NMS所請求側參數。
(3)NMS向代理進程發送帶安全的參數,認證、加密標志位置1的Get-Request消息,請求AuthoritativeEngineBoots和AuthoritativeEngineTime信息。
(4)代理進程對NMS發送的Get-Request消息進行認證,認證通過后對消息進行解密,認證標志位置1、加密標志位均置0,向NMS發送加密的Response消息,回復SNMP所請求的AuthoritativeEngineBoots和AuthoritativeEngineTime消息。
2.SNMPv3報文格式
①Version:SNMP版本號
②Msg ID:消息序列號(與v1和v2中的Request ID字段意義類似)響應報文中的Msg ID和請求報文中的值相同。
③Msg Max size:消息發送這支持的最大的消息尺寸,同時表明了發送者能夠接收到的最大字節數。
④Msg Sec Model:指明了發送方采用的安全模式,取值為0到3,0表示任何模型,1表示采用SNMPv1安全模型,2表示采用SNMPv2安全模型,3表示SNMPv3安全模型。
⑤Msg Flag:請求報文指定是否要求回應report消息,消息是否進行了加密和認證。
⑥Security Parameters:包括了用戶名、密鑰、加密參數等安全信息。
⑦Context Engine ID:上下文引擎ID,SNMP實體唯一標識符,對于接收消息,該字段確定消息該如何處理,對于發送消息,該字段在發送一個消息請求時由應用提供。
⑧Contex Name:上下文名稱,唯一標識在相關聯的上下文引擎范圍內部特定的上下文
⑨Data:數據內容。
總結
以上是生活随笔為你收集整理的SNMP(Simple Network Management Protocol)——简单网络管理协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序中使用icon
- 下一篇: linux远程调试程序,嵌入式Linux