孫 為
[摘要]首先論述簡單網(wǎng)絡(luò)管理協(xié)議SNMP的產(chǎn)生、發(fā)展及其管理機(jī)制,然后提出在SNMPv3的框架結(jié)構(gòu)上實(shí)現(xiàn)代理進(jìn)程的一種方案。
[關(guān)鍵詞]SNMP協(xié)議 管理模型 代理
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0310046-02
一、SNMP的產(chǎn)生
隨著現(xiàn)代網(wǎng)絡(luò)規(guī)模擴(kuò)大化,結(jié)構(gòu)的復(fù)雜化,早期網(wǎng)絡(luò)時代的人力管理已經(jīng)無法勝任這一工作了,自動網(wǎng)絡(luò)管理工具由此而產(chǎn)生。
要有效地管理由不同廠家的產(chǎn)品構(gòu)成的網(wǎng)絡(luò)系統(tǒng),就要求各個網(wǎng)絡(luò)產(chǎn)品提供統(tǒng)一的管理接口,即遵循標(biāo)準(zhǔn)的網(wǎng)絡(luò)管理協(xié)議。目前國際上標(biāo)準(zhǔn)的網(wǎng)絡(luò)管理協(xié)議有兩個,一個是ISO于70年代末提出的CMIP,一個是IAB 80年代末提出SNMP。CMIP(公共管理信息協(xié)議)建立在OSI基礎(chǔ)上,它的協(xié)議大而全,需兼顧各個方面的要求,十分復(fù)雜,實(shí)現(xiàn)起來很困難,所以目前對其僅停留在研究階段。SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)是IAB為管理基于TCP/IP的網(wǎng)絡(luò)而制定的網(wǎng)絡(luò)管理協(xié)議,于1990年4月被確定為Internet標(biāo)準(zhǔn)。它可以管理和監(jiān)控任何形式的網(wǎng)絡(luò)設(shè)備,它的主要特點(diǎn)是簡單、實(shí)用、易擴(kuò)展。目前絕大多數(shù)廠家都支持和應(yīng)用SNMP,SNMP已成為事實(shí)上的網(wǎng)絡(luò)管理工業(yè)標(biāo)準(zhǔn)。
二、SNMP的發(fā)展
SNMP一共發(fā)展了3個主版本,分別為SNMPv1,SNMPv2和SNMPv3。SNMPv2又分為若干個子版本,其中SNMPv2c應(yīng)用最為廣泛。
1990年5月,RFC1157出版,定義了SNMPv1。SNMPv1在90年代初得到了迅猛發(fā)展,但同時也暴露了明顯的不足,如在功能上難以實(shí)現(xiàn)大量的數(shù)據(jù)傳輸,在安全方面缺少身份鑒別和加密機(jī)制。
1993年發(fā)布的SNMPv2比SNMPv1有較大的進(jìn)步,表現(xiàn)在支持分布式網(wǎng)絡(luò)管理、擴(kuò)展了數(shù)據(jù)類型、可以實(shí)現(xiàn)大量數(shù)據(jù)的同時傳輸、增加了表的處理能力、加強(qiáng)了數(shù)據(jù)定義語言。
但是,SNMPv2并沒有完全實(shí)現(xiàn)預(yù)期的目標(biāo),尤其是安全性能沒有得到提高。1996年發(fā)布的SNMPv2c是SNMPv2的修改版本,功能有很大增強(qiáng),但是安全性能仍沒有得到改善,繼續(xù)使用SNMPv1的基于共同體名的身份鑒別方式。
IETF SNMPv3工作組于1998年1月提出RFC2271-2275,正式形成SNMPv3。這一系列文件定義了包含SNMPv1、SNMPv2所有功能在內(nèi)的體系框架和包含鑒別服務(wù)和加密服務(wù)在內(nèi)的全新的安全特性,同時還規(guī)定了網(wǎng)絡(luò)安全和訪問控制規(guī)則。
三、SNMP的通訊機(jī)制
SNMP代理和管理站通過標(biāo)準(zhǔn)的SNMP協(xié)議報文進(jìn)行異步通信,這些報文都是單個包。由此,SNMP使用UDP作為底層傳輸協(xié)議。UDP使用無連接服務(wù),所以SNMP不需要在代理和管理站之間保持連接來傳輸消息。
(一)SNMP的通訊原語
SNMPv1中定義了五種通訊原語:GetRequest、GetResponse、GetNextRequest、SetRequest和Trap。SNMP管理站使用GetRequst請求被管設(shè)備的代理從設(shè)備中取特定OID的管理信息比如系統(tǒng)的名字,系統(tǒng)中網(wǎng)絡(luò)接口數(shù),端口的流量等等。SNMP代理用GetResponse來響應(yīng)管理站的請求。管理站用GetNextResponse指示讀取指定的OID所表示的被管理對象在MIB樹中按照字典順序的下一個被管理對象的管理信息的值,與GetResponse結(jié)合起來可以檢索表中的數(shù)據(jù),瀏覽MIB樹。管理站用SetRequest通過代理來改變設(shè)備中的配置,用于配置管理的實(shí)現(xiàn)。Trap是SNMP代理發(fā)送給管理站的非請求消息,通知管理站發(fā)生了一個特殊事件[6]。例如:代理重啟、線路連接失敗或消息認(rèn)證失敗等等。
SNMPv2中增加了GetBulkRequest的通訊原語,GetBulkRequest與GetNextResponse有相同的操作原則,也就是說,所選擇的總是按字典序的下一個對象實(shí)例。不同之處在于,使用GetBulkRequest可以指定選擇多個字典順序后繼。這樣,可使檢索大批管理信息所需的協(xié)議交換次數(shù)最少化。SNMPv2還增加了InformRequest通訊原語,此通訊原語用來負(fù)責(zé)管理者與管理者之間的通訊。
(二)SNMP報文格式
SNMP報文格式主要有兩部分構(gòu)成,協(xié)議頭和SNMP協(xié)議數(shù)據(jù)單元。在不同的版本中協(xié)議頭不同。
1.SNMPv1的報文格式。
SNMPv1報文的協(xié)議頭由版本域和共同體域組成。其中版本域?yàn)関ersion-1(0),共同體域是為增加系統(tǒng)的安全性而引入的,它的作用相當(dāng)于口令(password)。agent可以要求manager在其發(fā)來的報文中填寫這一項(xiàng),以驗(yàn)證manager是否有權(quán)訪問它上面的MIB信息。community的缺點(diǎn)是沒有加密功能,由于是明碼傳送的,所以很容易被監(jiān)聽者竊取。SNMPv2中改進(jìn)了這一點(diǎn)。
SNMP協(xié)議數(shù)據(jù)單元是實(shí)際要傳送的數(shù)據(jù),SNMPv1中有5種PDU,即對應(yīng)5種協(xié)議操作,如圖2所示。其中GetRequest、GetNextRequest和SetRequest
的PDU的格式是一樣的,包括PDU類型,請求標(biāo)識,錯誤狀態(tài),差錯索引,變量綁定列表域(由多個變量綁定組成,每個變量綁定由對象標(biāo)識符和對象得值組成),而Trap的PDU格式比較特殊,它由于包含的信息不同,結(jié)構(gòu)上有所差別。
2.SNMPv2c的報文格式。
SNMPv2c在協(xié)議報文和PDU格式方面和SNMPv1大體一樣。不同的是SNMPv2的Trap報文和其他報文格式統(tǒng)一了,而且比v1版本增加了Inform、GetBulkRequest報文。這兩種報文除了GetBulkRequest報文中錯誤狀態(tài)和差錯索引處分別由Non-Repeaters(不重復(fù)個數(shù))和Max-Repetitions(最大重復(fù)次數(shù))所代替,其余部分和SNMPV1的報文一樣。SNMPV2的報文格式更加一致,這樣簡化了接收者的處理任務(wù)。
3.SNMPv3的報文格式。
SNMPv3在SNMPv2基礎(chǔ)之上增加了安全和管理機(jī)制,SNMPv3定義了一種全新的報文格式,協(xié)議頭增加了很多SNMPv3的安全參數(shù),如圖3所示。
(三)SNMP報文的發(fā)送
一個SNMP實(shí)體按照以下步驟來傳送SNMP的5種報文的一種到另一個SNMP實(shí)體:
1.根據(jù)RFC1157中定義的ASN.1結(jié)構(gòu),構(gòu)造SNMP的PDU;
2.將PDU連同源地址,目標(biāo)地址,共同體名傳至鑒別服務(wù),等待它進(jìn)行加密,簽名等操作后的返回結(jié)果*;
3.在*前面加上協(xié)議頭,形成SNMP報文;
4.按照BER規(guī)范對3所形成的SNMP報文進(jìn)行編碼,并傳遞給傳輸服務(wù)。
其中,step2只在SNMPV3版本中存在。
(四)SNMP報文的接收
一般,一個SNMP實(shí)體經(jīng)過以下步驟接收一個SNMP報文:[3]
1.從傳輸層接收到報文編碼的字節(jié)流,按照BER規(guī)范進(jìn)行解碼;
2.對該消息的基本句法進(jìn)行檢查,如果報文沒有通過分析,就丟棄該報文;
3.檢查版本號,如果版本不兼容就丟棄該報文;
4.協(xié)議實(shí)體將安全參數(shù),報文的PDU部分、以及源與目的傳輸?shù)刂穫鬟f給鑒別服務(wù):如果認(rèn)證成功,鑒別服務(wù)將按照ASN.1標(biāo)準(zhǔn)構(gòu)造PDU返回給SNMP協(xié)議實(shí)體;如果鑒別失敗,鑒別服務(wù)觸發(fā)鑒別失敗的事件,SNMP協(xié)議實(shí)體產(chǎn)生鑒別失敗的Trap,并丟棄該報文;
5.協(xié)議實(shí)體將對鑒別成功的PDU進(jìn)行ASN.1的句法檢查,如果失敗則丟棄此PDU。否則,按照版本號進(jìn)行SNMP訪問控制檢查,若通過則對PDU進(jìn)行相應(yīng)處理,否則丟棄報文。
四、SNMP協(xié)議中代理進(jìn)程的實(shí)現(xiàn)
為兼容SNMP的3個版本,按照SNMPv3的框架來實(shí)現(xiàn)代理進(jìn)程,如圖4所示。
(一)代理進(jìn)程的框架結(jié)構(gòu)
SNMPv3中代理和管理者都稱作SNMP實(shí)體,每一個實(shí)體主要有兩個組件:SNMP引擎和一個或多個應(yīng)用程序。
引擎與實(shí)體是一一對應(yīng)關(guān)系,它包含四個組件:發(fā)送器、消息處理子系統(tǒng)、安全子系統(tǒng)和訪問控制子系統(tǒng)。其中發(fā)送器支持多個版本的SNMP消息同時存在,它的功能包括:發(fā)送和接受網(wǎng)絡(luò)中的SNMP消息;決定SNMP消息的版本并和符合相應(yīng)版本的消息處理模型交互;和命令發(fā)生器應(yīng)用程序進(jìn)行PDU的交互。消息處理子系統(tǒng)是為傳輸和從接受到的消息中提取相關(guān)信息參數(shù)的準(zhǔn)備模塊,它其中按照處理的消息的版本格式的不同分成了不同的子模塊。安全子系統(tǒng)提供了安全服務(wù),其中包括加密和驗(yàn)證。訪問控制子系統(tǒng)提供授權(quán)服務(wù),它也可以有多個訪問控制模型。
代理實(shí)體中的應(yīng)用程序有命令產(chǎn)生器應(yīng)用程序,通知產(chǎn)生器應(yīng)用程序等。
(二)代理進(jìn)程的流程
代理進(jìn)程的主要工作是響應(yīng)管理者的請求,對設(shè)備的管理數(shù)據(jù)進(jìn)行讀寫操作,然后把取得的信息以SNMP報文的形式反饋給管理者。代理進(jìn)程的另一個工作就是當(dāng)出現(xiàn)特殊事件的時候,向特定的管理端發(fā)送Trap。代理進(jìn)程主要可由3個獨(dú)立的線程來實(shí)現(xiàn):
1.代理主線程SnmpAgent,此線程用于啟動,運(yùn)行,關(guān)閉代理進(jìn)程。該線程啟動后,首先初始化系統(tǒng)配置,導(dǎo)入mib文件和xml文件(對象實(shí)例數(shù)據(jù)文件),并啟動以下其他兩個線程,讓其獨(dú)立運(yùn)行。然后啟動發(fā)送器,從端口等待接收管理者發(fā)送過來的報文編碼字節(jié)流,然后解碼成Snmp的報文,并進(jìn)行版本兼容的檢驗(yàn)(不兼容直接丟棄),調(diào)用安全子系統(tǒng),進(jìn)行PDU的驗(yàn)證加密(不成功丟棄報文,并發(fā)認(rèn)證失敗的Trap),將獲得的可繼續(xù)處理的請求報文返回給主線程。主線程調(diào)用請求響應(yīng)模塊,并將獲得的請求報文傳給它,請求響應(yīng)模塊將對請求做出正確的響應(yīng)過程,取得必要的管理信息,返回給主線程。主線程把取得的管理信息交給消息處理模塊,該模塊根據(jù)將信息封裝PDU并把響應(yīng)PDU傳給命令產(chǎn)生器,最終封裝成響應(yīng)報文,返回主線程。[7]主線程最后將響應(yīng)報文傳給發(fā)送器發(fā)送給管理者。
2.Trap服務(wù)線程SnmpTrapService,此線程負(fù)責(zé)接收觸發(fā)Trap的事件,獲取封裝Trap報文的參數(shù)信息,然后將信息交給消息處理模塊。
3.?dāng)?shù)據(jù)收集線程SnmpDataCollect,此線程一方面要定時從設(shè)備接口程序中收集管理數(shù)據(jù),并從內(nèi)存更新到xml文件(xml文件在SnmpAgent線程啟動時已被導(dǎo)入到內(nèi)存中的一棵樹),這樣,請求響應(yīng)模塊在響應(yīng)get或getNext操作時,直接從內(nèi)存的xml樹中讀取所要求的對象實(shí)例的值。當(dāng)處理set操作時,如果xml文件更新成功,則要發(fā)出通知給設(shè)備接口程序,以改變設(shè)備中的配置。
五、結(jié)束語
SNMP具有很多的優(yōu)點(diǎn),因此得到較廣泛的應(yīng)用。但它安全性、多協(xié)議支持等,需要在今后版本中加以解決。隨著SNMP的新發(fā)展,在協(xié)議實(shí)現(xiàn)過程中,軟件的結(jié)構(gòu)必須要利于各個版本的共存。
參考文獻(xiàn):
[1]Mani Subramanian.Network Management:Principles and Practice,1st edition Copyright 2000.
[2]Mark A.Miller,用SNMP管理互聯(lián)網(wǎng)絡(luò)(第二版),中國水利水電出版社,2001.7.
[3]岑賢道、安常青,網(wǎng)絡(luò)管理協(xié)議及應(yīng)用開發(fā),清華大學(xué)出版社,1998.7.
[4]William Stallings,SNMP網(wǎng)絡(luò)管理(第一版),中國電力出版,2001.9.
[5]杜荔等,一種基于SNMP實(shí)現(xiàn)MIB庫多變量訪問的方法,東北大學(xué)學(xué)報(自然科學(xué)版),1998.8.
[6]高宏等,Internet網(wǎng)絡(luò)管理協(xié)議簡單網(wǎng)絡(luò)管理協(xié)議(SNMP),數(shù)據(jù)通信,1999.1.
[7]蔡皖東,SNMP網(wǎng)絡(luò)管理機(jī)制及其實(shí)現(xiàn),微電子學(xué)與計算機(jī),1999.1.
作者簡介:
孫為,男,助教,主要研究方向:網(wǎng)絡(luò)管理、協(xié)議工程學(xué)。