基于TCP/IP的網(wǎng)絡(luò)管理包含3個(gè)組成部分:
1) 一個(gè)管理信息庫(kù)MIB(Management Information Base)。管理信息庫(kù)包含所有代理進(jìn)程的所有可被查詢和修改的參數(shù)。RFC 1213[McCloghrie and Rose 1991]定義了第二版的MIB,叫做MIB-II。
2) 關(guān)于MIB的一套公用的結(jié)構(gòu)和表示符號(hào)。叫做管理信息結(jié)構(gòu)SMI(Structure of Management Information)。這個(gè)在RFC 1155 [Rose and McCloghrie 1990] 中定義。例如:SMI定義計(jì)數(shù)器是一個(gè)非負(fù)整數(shù),它的計(jì)數(shù)范圍是 0~4294967295,當(dāng)達(dá)到最大值時(shí),又從0開(kāi)始計(jì)數(shù)。
3) 管理進(jìn)程和代理進(jìn)程之間的通信協(xié)議,叫做簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Network Management Protocol)。在RFC 1157 [Case et al. 1990]中定義。SNMP包括數(shù)據(jù)報(bào)交換的格式等。盡管可以在傳輸層采用各種各樣的協(xié)議,但是在SNMP中,用得最多的協(xié)議還是UDP。
一、SNMP協(xié)議概述
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP:Simple Network Management Protocol)是由互聯(lián)網(wǎng)工程任務(wù)組(IETF:Internet Engineering Task Force )定義的一套網(wǎng)絡(luò)管理協(xié)議。該協(xié)議基于簡(jiǎn)單網(wǎng)關(guān)監(jiān)視協(xié)議(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一個(gè)管理工作站可以遠(yuǎn)程管理所有支持這種協(xié)議的網(wǎng)絡(luò)設(shè)備,包括監(jiān)視網(wǎng)絡(luò)狀態(tài)、修改網(wǎng)絡(luò)設(shè)備配置、接收網(wǎng)絡(luò)事件警告等。 雖然SNMP開(kāi)始是面向基于IP的網(wǎng)絡(luò)管理,但作為一個(gè)工業(yè)標(biāo)準(zhǔn)也被成功用于電話網(wǎng)絡(luò)管理。
二、SNMP的發(fā)展史
SNMP經(jīng)過(guò)了一個(gè)相對(duì)較長(zhǎng)的發(fā)展過(guò)程,到目前為止一共經(jīng)歷了三個(gè)版本。當(dāng)下使用最廣泛是SNMPv2。
1989年發(fā)布了第一個(gè)版本的SNMP,稱為SNMPv1。
1991年發(fā)布SNMP的一個(gè)補(bǔ)充---RMON(Remote Network Monitoring,遠(yuǎn)程網(wǎng)絡(luò)監(jiān)視)。RMON擴(kuò)充了SNMP的功能,包括對(duì)LAN的管理以及對(duì)依附于這些網(wǎng)絡(luò)設(shè)備的管理。注:RMON沒(méi)有修改和增加SNMP協(xié)議本身以及SMI,只是增加了SNMP監(jiān)視子網(wǎng)的能力,把整個(gè)子網(wǎng)當(dāng)成一個(gè)個(gè)體來(lái)監(jiān)視,提供了新的MIB庫(kù)及相關(guān)的MIB行為。
1993年SNMPv1的升級(jí)版被提出,SNMPv2。
1995年SNMPv2正式發(fā)布,v2增加了SNMPv1的功能,并規(guī)定了如何在基于OSI的網(wǎng)絡(luò)中使用SNMP。同時(shí)RMON于本年度擴(kuò)展為RMONv2
? ?1998年SNMPv3發(fā)布,一系列文檔定義了SNMP的安全性,并定義了將來(lái)改進(jìn)的總體結(jié)構(gòu)。SNMPv3可以和v2、v1一起使用。
三、SNMP的工作原理
SNMP采用特殊的客戶機(jī)/服務(wù)器模式,即代理/管理站模型。對(duì)網(wǎng)絡(luò)的管理與維護(hù)是通過(guò)管理工作站與SNMP代理間的交互工作完成的。每個(gè)SNMP從代理負(fù)責(zé)回答SNMP管理工作站(主代理)關(guān)于MIB定義信息的各種查詢。
SNMP的應(yīng)用場(chǎng)景如圖1所示:
管理站和代理端使用MIB進(jìn)行接口統(tǒng)一,MIB定義了設(shè)備中的被管理對(duì)象。管理站和代理都實(shí)現(xiàn)相應(yīng)的MIB對(duì)象,使得雙方可以識(shí)別對(duì)方的數(shù)據(jù),實(shí)現(xiàn)通信。管理站向代理請(qǐng)求MIB中定義的數(shù)據(jù),代理端識(shí)別后,將管理設(shè)備提供的相關(guān)狀態(tài)或參數(shù)等數(shù)據(jù)轉(zhuǎn)換成MIB定義的格式,最后將該信息返回給管理站,完成一次管理操作。
四、SNMP的報(bào)文類(lèi)型
SNMP中定義了五種消息類(lèi)型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
(1)Get-Request 、Get-Next-Request與Get-Response
SNMP 管理站用Get-Request消息從擁有SNMP代理的網(wǎng)絡(luò)設(shè)備中檢索信息,而SNMP代理則用Get-Response消息響應(yīng)。Get-Next- Request用于和Get-Request組合起來(lái)查詢特定的表對(duì)象中的列元素。
?。?)Set-Request
SNMP管理站用Set-Request 可以對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行遠(yuǎn)程配置(包括設(shè)備名、設(shè)備屬性、刪除設(shè)備或使某一個(gè)設(shè)備屬性有效/無(wú)效等)。
?。?)Trap
SNMP代理使用Trap向SNMP管理站發(fā)送非請(qǐng)求消息,一般用于描述某一事件的發(fā)生,如接口UP/DOWN,IP地址更改等。
上面五種消息中Get-Request、Get-Next-Request和Set-Request是由管理站發(fā)送到代理側(cè)的161端口的;后面兩種Get-Response和Trap 是由代理進(jìn)程發(fā)給管理進(jìn)程的,其中Trap消息被發(fā)送到管理進(jìn)程的162端口,所有數(shù)據(jù)都是走UDP封裝。SNMP工作流程如圖2:
五、SNMP的報(bào)文格式
SNMP代理和管理站通過(guò)SNMP協(xié)議中的標(biāo)準(zhǔn)消息進(jìn)行通信,每個(gè)消息都是一個(gè)單獨(dú)的數(shù)據(jù)報(bào)。SNMP使用UDP(用戶數(shù)據(jù)報(bào)協(xié)議)作為第四層協(xié)議(傳輸協(xié)議),進(jìn)行無(wú)連接操作。SNMP消息報(bào)文包含兩個(gè)部分:SNMP報(bào)頭和協(xié)議數(shù)據(jù)單元PDU。
在實(shí)際網(wǎng)絡(luò)傳輸環(huán)境下,SNMP報(bào)文的長(zhǎng)度取決于其所采用的編碼方式。SNMP統(tǒng)一采用BER(Basic Encoding Rule)的編碼規(guī)則,同時(shí)在正式SNMP規(guī)范中使用的是ASN.1語(yǔ)法,Abastract Syntax Notation v1,即抽象語(yǔ)法描述語(yǔ)言。這兩個(gè)概念在后面實(shí)踐環(huán)節(jié)再做進(jìn)一步介紹,這里只要稍微了解一下即可,不妨礙我們對(duì)協(xié)議本身的分析。這里我們簡(jiǎn)單解釋一下BER編碼規(guī)則:
BER作為ANS.1的基本編碼規(guī)則,描述具體的ANS.1對(duì)象如何編碼為比特流在網(wǎng)絡(luò)上進(jìn)行傳輸。BER編碼規(guī)則由三部分組成:
SNMP中定義了幾種基本的數(shù)據(jù)類(lèi)型,其中v1和v2版有些改動(dòng),具體參見(jiàn)相應(yīng)的RFC文檔。這里我們只介紹幾種最常見(jiàn)的類(lèi)型:
l INTEGER:一個(gè)整數(shù)
l OCTER STRING: 0或多個(gè)8bit字節(jié),每個(gè)字節(jié)在0~255之間取值
l DisplayString:0或多個(gè)8bit字節(jié),每個(gè)字節(jié)必須是ASCII碼。在MIB-II中,所有該類(lèi)型變量不能超過(guò)255個(gè)字符(0個(gè)字符可以)
l NULL:代表相關(guān)的變量沒(méi)有值
l IpAddress:4字節(jié)長(zhǎng)的OCTER STRING,以網(wǎng)絡(luò)字節(jié)序表示IP地址
l PhyAddress:6字節(jié)長(zhǎng)的OCTER STRING,代表物理地址
l Counter:非負(fù)整數(shù),可以從0遞增到232-1()。達(dá)到最大值后歸0
l TimeTicks:時(shí)間計(jì)數(shù)器,以0.01秒為單位遞增,不同的變量可以有不同的遞增幅度。所以在定義這種類(lèi)型的變量時(shí)需要制定遞增幅度
l SEQUENCE:與C語(yǔ)言中的結(jié)構(gòu)體類(lèi)似
l SEQUENCE OF:一個(gè)向量,參見(jiàn)后面ANS.1語(yǔ)法詳細(xì)介紹章節(jié)
SNMP報(bào)文在傳輸層是封裝在UDP報(bào)文中的,而UDP又是基于IP網(wǎng)絡(luò)的,因此,我們可以得到完整的報(bào)文描述結(jié)構(gòu),如下圖所示:
PDU類(lèi)型其實(shí)包含兩個(gè)字節(jié),第一個(gè)字節(jié)表示真實(shí)的PDU的類(lèi)型;第二個(gè)字節(jié)表示后面報(bào)文所占的字節(jié)總數(shù)。針對(duì)SNMPv1,這個(gè)字段取值如下:
表1 PDU類(lèi)型
PDU類(lèi)型 名稱代理進(jìn)程對(duì)自己初始化
1warmStart一個(gè)接口已從工作狀態(tài)變?yōu)楣收蠣顟B(tài)(報(bào)文中的第一個(gè)變量標(biāo)識(shí)此接口)
3linkUp從SNMP管理進(jìn)程收到無(wú)效共同體的報(bào)文
5egpNeighborLoss地址)
6enterpriseSpecific《span times=“” new=“” roman“;=”“ mso-hansi-font-family:”times=“” roman“;mso-bidi-font-family:”times=“” mso-font-kerning:0pt“=”“ style=”word-wrap: break-word; font-size: 9pt; font-family: 宋體;“》在這個(gè)特定的代碼段中查找trap信息
通過(guò)wireshark抓包工具,捕獲一條如下的SNMP報(bào)文,接下來(lái)對(duì)其進(jìn)行仔細(xì)分析。
其余部分都為SNMP報(bào)文,接下來(lái)我們對(duì)照前面的報(bào)文結(jié)構(gòu)體來(lái)逐個(gè)分析一下。
SNMPv2 Trap報(bào)文
SNMPv2的Trap報(bào)文格式如圖8所示:
同樣的,這里除了trap類(lèi)型和報(bào)文長(zhǎng)度是標(biāo)準(zhǔn)網(wǎng)絡(luò)字節(jié)序之外,其余協(xié)議字段也均為BER編碼方式??梢钥吹絭2版的trap報(bào)文正在向統(tǒng)一的報(bào)文格式發(fā)展,已經(jīng)非常類(lèi)似普通的SNMP請(qǐng)求、響應(yīng)報(bào)文了。
SNMPv2原始報(bào)文內(nèi)容:
余下部分全為SNMP報(bào)文內(nèi)容,這里我們做一下簡(jiǎn)單的約定:
xx 標(biāo)注類(lèi)型;xx 標(biāo)注長(zhǎng)度;xx 標(biāo)注真正的數(shù)據(jù)。
這樣一來(lái)上面這串原始數(shù)據(jù)就好分析多了J
管理信息庫(kù):MIB
我們要擴(kuò)展mib首先必須清楚mib是如何定義的,用的什么語(yǔ)言,有哪些約定,遵循哪些規(guī)則等等。這些基本東西掌握過(guò)后,我們就可以很輕松的來(lái)寫(xiě)自己的mib文件了。
所謂管理信息庫(kù),或者M(jìn)IB,就是所有代理進(jìn)程包含的、并且能夠被管理進(jìn)程進(jìn)行查詢和設(shè)置的信息的集合,或者叫管理對(duì)象的集合,在RFC 1213 [McColghrie 和Rose 1991]中定義了MIB-II,即第二版的MIB庫(kù)。MIB是采用SMI(RFC 1155)來(lái)定義的。SMI全稱為Structure Management Information,管理信息結(jié)構(gòu)。SMI規(guī)范定義了一個(gè)基本框架,使用框架內(nèi)的規(guī)范可以定義MIB,而SMI同時(shí)又是ASN.1的一個(gè)子集,它主要約定了使用到的語(yǔ)法、類(lèi)型、宏、數(shù)據(jù)格式等。
本節(jié)知識(shí)相對(duì)來(lái)說(shuō)有些枯燥,但是沒(méi)辦法,如果你要看懂mib的定義文件,并且能很靈活自如的對(duì)其進(jìn)行擴(kuò)展,那么這些基礎(chǔ)是必須夯實(shí)的。俗話說(shuō)“磨刀不誤砍柴工”。
ASN.1語(yǔ)法
ASN.1(Abstract Syntax Notification 1),抽象語(yǔ)法描述語(yǔ)言,是一種獨(dú)立于機(jī)器的描述語(yǔ)言,用于描述在網(wǎng)絡(luò)上傳遞的消息。在SNMP中ANS.1主要用于MIB的定義,另一方面也用于協(xié)議的定義。所以理解ASN.1是理解協(xié)議、讀懂SNMP國(guó)際規(guī)范RFC、進(jìn)行SNMP開(kāi)發(fā)的前提。在SNMP開(kāi)發(fā)中,不但要用ASN.1編寫(xiě)MIB文件,還要使用ASN.1中的BER進(jìn)行編解碼。
ASN.1 可分為兩個(gè)部分:
1)語(yǔ)法規(guī)則:從數(shù)據(jù)類(lèi)型、內(nèi)容順序或結(jié)構(gòu)等方面來(lái)描述消息的內(nèi)容
2)編碼規(guī)則:如何編碼、解碼實(shí)際消息中的數(shù)據(jù)
語(yǔ)法部分用于對(duì)數(shù)據(jù)結(jié)構(gòu)、類(lèi)型、順序進(jìn)行描述。編碼則將語(yǔ)法部分描述的數(shù)據(jù)進(jìn)行編碼,變?yōu)槎M(jìn)制比特流,以便在網(wǎng)絡(luò)上傳輸,或反方向地將接收到的數(shù)據(jù)流進(jìn)行解碼。這使得編碼流可以跨平臺(tái)、跨設(shè)備進(jìn)行傳輸。
ASN.1的記法規(guī)則,ASN.1的結(jié)構(gòu)、類(lèi)型和取值的表示方法和編程語(yǔ)言的表示法相似:
1)多個(gè)空格和空行都看作是一個(gè)空格。
2) 注釋用成對(duì)的連字符(--)在注釋的每行開(kāi)始處表示,或者將一對(duì)連字符用在注釋的開(kāi)始處和注釋行結(jié)束的結(jié)尾處。
3)標(biāo)識(shí)符(取值和字段的名稱)、類(lèi)型引用(類(lèi)型的名稱)和模塊名稱由大寫(xiě)字母、小寫(xiě)字母、數(shù)字和連字符組成。
4)標(biāo)識(shí)符、類(lèi)型引用或模塊名以由大寫(xiě)字母開(kāi)始。
5) 內(nèi)建類(lèi)型都由大寫(xiě)字母組成。內(nèi)建類(lèi)型一般用作標(biāo)準(zhǔn)表示法提供的類(lèi)型。
6)Octet(字節(jié))表示一個(gè)8bit的無(wú)符號(hào)整數(shù)。bit8表示最高位,bit1標(biāo)識(shí)最低位。下列元語(yǔ)用于定義ASN.1符號(hào):
BIT 類(lèi)型和值用等寬字體表示。它通暢表示一個(gè)十六進(jìn)制的字節(jié)值。
n1 粗斜體表示變量
?。郏?粗的方括號(hào)標(biāo)示該值為可選項(xiàng)
{} 粗的大括號(hào)表示一組相關(guān)項(xiàng)。
| 粗體豎杠表示一組之中的內(nèi)容可任選其一。
… 粗體省略號(hào)表示重復(fù)出現(xiàn)
= 粗體等號(hào),用一個(gè)子項(xiàng)表示該項(xiàng)
一、ASN.1術(shù)語(yǔ)
1、抽象語(yǔ)法(Abstract Syntax)
2)描述通用數(shù)據(jù)結(jié)構(gòu)
允許定義數(shù)據(jù)類(lèi)型和值
2、數(shù)據(jù)類(lèi)型(Data Type)
值的集合,可以是簡(jiǎn)單類(lèi)型或結(jié)構(gòu)類(lèi)型可以對(duì)數(shù)據(jù)類(lèi)型命名
3)編碼(Encoding)
用于表示數(shù)據(jù)值的字節(jié)序列
4、編碼規(guī)則(Encoding Rules)
給出從一種語(yǔ)法到另一種的映射方法
5、傳輸語(yǔ)法(Transfer Syntax)
位模式(Bits pattern):描述數(shù)據(jù)是在傳輸時(shí)是如何表示的
二、ASN.1模塊定義
模塊(module)是ASN.1規(guī)范中的基本構(gòu)造塊,定義一個(gè)名為modulereference的模塊,其格式如下:
其中:EXPORTS 這個(gè)模塊中的定義可能被其他模塊引入,用的比較少;IMPORTS 定義將要由其他模塊引入的對(duì)象或子模塊;AssignmentList 這個(gè)模塊中將定義類(lèi)型分配、值分配及宏定義。
三、ASN.1數(shù)據(jù)類(lèi)型
1、基本類(lèi)型:
ASN.1語(yǔ)法中有六種基本類(lèi)型,分別如下,基本已經(jīng)做到見(jiàn)名知意了:
BOOLEAN,INTEGER,ENUMERATED,REAL,BIT STRING,OCTET STRING
2、字符串類(lèi)型(ISO10646-1的子集):
3、對(duì)象類(lèi)型:
OBJECT IDENTIFIER
ObjectDescriptor:一個(gè)任意長(zhǎng)的非負(fù)整數(shù)序列,用于標(biāo)記對(duì)象(如算法等)
4、其它類(lèi)型:
NULL 空值
UTCTime: yymmdd hhmm[ss]
GeneralizedTime:yyyymmdd hhmm[ss] ,強(qiáng)制始于2050年
四、ASN.1類(lèi)型定義
ASN.1靈活之處在于,除了它內(nèi)置的一些數(shù)據(jù)類(lèi)型外,用戶還可以自定義自己想要的任何類(lèi)型,一般都是通過(guò)現(xiàn)有類(lèi)型來(lái)組合來(lái)實(shí)現(xiàn)。
上面的定義過(guò)程中,INTEGER太常見(jiàn)了,就用Counter來(lái)作為它的一種別名,注意是一種,以后就可以用Counter來(lái)定義新變量了。同理,IpAddress就是OCTE STRING類(lèi)型一種別名。
五、ASN.1子類(lèi)型定義
子類(lèi)型是在類(lèi)型的定義基礎(chǔ)上增加更明確限制條件,如設(shè)定新類(lèi)型的取值范圍,缺省值等等。
這樣定義過(guò)后,以后用Counter定義的任何變量都被限定大于0小于65536。IpAddress定義變量長(zhǎng)度都是4字節(jié),等等。
六、ASN.1賦值
賦值在MIB庫(kù)文件中的定義是最常見(jiàn)的一部分。
七、ASN.1的結(jié)構(gòu)體類(lèi)型
八、ANS.1標(biāo)簽類(lèi)型
標(biāo)簽用于區(qū)分不同的類(lèi)型,并且在結(jié)構(gòu)類(lèi)型SEQUENCE和SET中,組件類(lèi)型可能引起混淆,可以為它們的組件(分量)指定Context-specific標(biāo)簽,清晰指示組件的類(lèi)型。除了CHOICE和ANY外,每種ASN.1類(lèi)型都有一個(gè)標(biāo)簽,由一個(gè)類(lèi)和一個(gè)非負(fù)的標(biāo)簽數(shù)組成。標(biāo)簽值可以唯一區(qū)分ASN.1類(lèi)型。也就是說(shuō),ASN.1類(lèi)型的名字并不影響它的抽象含義,只有標(biāo)簽才有這個(gè)作用。
標(biāo)簽用在編碼中,可以唯一地標(biāo)示類(lèi)型,便于編碼。ASN.1提供了4中標(biāo)簽:
1)Universal:標(biāo)識(shí)ISO和ITU定義的類(lèi)型,ASN.1定義的類(lèi)型均有Universal值,該值在所有的程序里都一致。
2)Application:應(yīng)用程序自定義類(lèi)型。本標(biāo)識(shí)可以唯一地標(biāo)識(shí)自定義類(lèi)型。類(lèi)型名在ASN.1中可以相同,所以Application就成為唯一標(biāo)識(shí)自定義類(lèi)型的方法。類(lèi)型的含義由制定者自己定義。例如:
Private:該類(lèi)型的含義根據(jù)具體的企業(yè)而不同。Private標(biāo)識(shí)不會(huì)被用在國(guó)際規(guī)范中。企業(yè)提供的程序一般經(jīng)常使用application和context-specific標(biāo)識(shí)。在特殊場(chǎng)合下,一個(gè)企業(yè)的技術(shù)規(guī)范想要擴(kuò)展成為一個(gè)國(guó)際規(guī)范時(shí),使用private標(biāo)識(shí)在企業(yè)規(guī)范成為國(guó)際規(guī)范的過(guò)程中可以較好地保護(hù)該企業(yè)的規(guī)范。例如:
CompanyNumber ::=[PRIVATE 2] INTEGER
companyNumber CompanyNumber ::=5651
Context-specific:專(zhuān)用于結(jié)構(gòu)類(lèi)型中。該類(lèi)型的含義根據(jù)給定的結(jié)構(gòu)類(lèi)型而不同。對(duì)于SET和SEQUENCE,為了避免里面的組件混淆,一般情況下給予不同的Context-specific標(biāo)簽。如:
九、宏定義
ASN.1提供一種用戶可以將符號(hào)擴(kuò)展為自己使用的或別人使用的符號(hào)的機(jī)制,這就允許設(shè)計(jì)者去擴(kuò)展語(yǔ)言定義一個(gè)“對(duì)象”,比如定義一個(gè)調(diào)制解調(diào)器或定義一個(gè)交換機(jī)。這些對(duì)象有普通的ASN.1屬性和條件屬性,比如父母和物理位置等。例如一個(gè)一部的調(diào)制解調(diào)器可以以普通調(diào)制解調(diào)器作為父類(lèi),從父類(lèi)處繼承屬性。使用ASN.1可以定義為:
PS:宏在1994年從ASN.1中移除,取而代之的是Information Object Class。2002年X.680和X.690系列標(biāo)準(zhǔn)中已經(jīng)使用Information Object Class代替。SNMPv1在1990年發(fā)布,所以SNMPv1中使用ASN.1宏。而SNMPv2 SMI的RFC中明確指出,SNMPv2中使用1998版ASN.1,所以SNMPv2還是使用ASN.1中的宏定義管理對(duì)象和通告。
評(píng)論
查看更多