管理信息庫(kù):MIB
我們要擴(kuò)展mib首先必須清楚mib是如何定義的,用的什么語(yǔ)言,有哪些約定,遵循哪些規(guī)則等等。這些基本東西掌握過(guò)后,我們就可以很輕松的來(lái)寫自己的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ǔ)法、類型、宏、數(shù)據(jù)格式等。
本節(jié)知識(shí)相對(duì)來(lái)說(shuō)有些枯燥,但是沒辦法,如果你要看懂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開發(fā)的前提。在SNMP開發(fā)中,不但要用ASN.1編寫MIB文件,還要使用ASN.1中的BER進(jìn)行編解碼。
ASN.1 可分為兩個(gè)部分:
1)語(yǔ)法規(guī)則:從數(shù)據(jù)類型、內(nèi)容順序或結(jié)構(gòu)等方面來(lái)描述消息的內(nèi)容
2)編碼規(guī)則:如何編碼、解碼實(shí)際消息中的數(shù)據(jù)
語(yǔ)法部分用于對(duì)數(shù)據(jù)結(jié)構(gòu)、類型、順序進(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)、類型和取值的表示方法和編程語(yǔ)言的表示法相似:
1)多個(gè)空格和空行都看作是一個(gè)空格。
2) 注釋用成對(duì)的連字符(--)在注釋的每行開始處表示,或者將一對(duì)連字符用在注釋的開始處和注釋行結(jié)束的結(jié)尾處。
3)標(biāo)識(shí)符(取值和字段的名稱)、類型引用(類型的名稱)和模塊名稱由大寫字母、小寫字母、數(shù)字和連字符組成。
4)標(biāo)識(shí)符、類型引用或模塊名以由大寫字母開始。
5) 內(nèi)建類型都由大寫字母組成。內(nèi)建類型一般用作標(biāo)準(zhǔn)表示法提供的類型。
6)Octet(字節(jié))表示一個(gè)8bit的無(wú)符號(hào)整數(shù)。bit8表示最高位,bit1標(biāo)識(shí)最低位。下列元語(yǔ)用于定義ASN.1符號(hào):
BIT 類型和值用等寬字體表示。它通暢表示一個(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ù)類型和值
2、數(shù)據(jù)類型(Data Type)
值的集合,可以是簡(jiǎn)單類型或結(jié)構(gòu)類型可以對(duì)數(shù)據(jù)類型命名
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è)模塊中將定義類型分配、值分配及宏定義。
三、ASN.1數(shù)據(jù)類型
1、基本類型:
ASN.1語(yǔ)法中有六種基本類型,分別如下,基本已經(jīng)做到見名知意了:
BOOLEAN,INTEGER,ENUMERATED,REAL,BIT STRING,OCTET STRING
2、字符串類型(ISO10646-1的子集):
3、對(duì)象類型:
OBJECT IDENTIFIER
ObjectDescriptor:一個(gè)任意長(zhǎng)的非負(fù)整數(shù)序列,用于標(biāo)記對(duì)象(如算法等)
4、其它類型:
NULL 空值
UTCTime: yymmdd hhmm[ss]
GeneralizedTime:yyyymmdd hhmm[ss] ,強(qiáng)制始于2050年
四、ASN.1類型定義
ASN.1靈活之處在于,除了它內(nèi)置的一些數(shù)據(jù)類型外,用戶還可以自定義自己想要的任何類型,一般都是通過(guò)現(xiàn)有類型來(lái)組合來(lái)實(shí)現(xiàn)。
上面的定義過(guò)程中,INTEGER太常見了,就用Counter來(lái)作為它的一種別名,注意是一種,以后就可以用Counter來(lái)定義新變量了。同理,IpAddress就是OCTE STRING類型一種別名。
五、ASN.1子類型定義
子類型是在類型的定義基礎(chǔ)上增加更明確限制條件,如設(shè)定新類型的取值范圍,缺省值等等。
這樣定義過(guò)后,以后用Counter定義的任何變量都被限定大于0小于65536。IpAddress定義變量長(zhǎng)度都是4字節(jié),等等。
六、ASN.1賦值
賦值在MIB庫(kù)文件中的定義是最常見的一部分。
七、ASN.1的結(jié)構(gòu)體類型
八、ANS.1標(biāo)簽類型
標(biāo)簽用于區(qū)分不同的類型,并且在結(jié)構(gòu)類型SEQUENCE和SET中,組件類型可能引起混淆,可以為它們的組件(分量)指定Context-specific標(biāo)簽,清晰指示組件的類型。除了CHOICE和ANY外,每種ASN.1類型都有一個(gè)標(biāo)簽,由一個(gè)類和一個(gè)非負(fù)的標(biāo)簽數(shù)組成。標(biāo)簽值可以唯一區(qū)分ASN.1類型。也就是說(shuō),ASN.1類型的名字并不影響它的抽象含義,只有標(biāo)簽才有這個(gè)作用。
標(biāo)簽用在編碼中,可以唯一地標(biāo)示類型,便于編碼。ASN.1提供了4中標(biāo)簽:
1)Universal:標(biāo)識(shí)ISO和ITU定義的類型,ASN.1定義的類型均有Universal值,該值在所有的程序里都一致。
2)Application:應(yīng)用程序自定義類型。本標(biāo)識(shí)可以唯一地標(biāo)識(shí)自定義類型。類型名在ASN.1中可以相同,所以Application就成為唯一標(biāo)識(shí)自定義類型的方法。類型的含義由制定者自己定義。例如:
Private:該類型的含義根據(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:專用于結(jié)構(gòu)類型中。該類型的含義根據(jù)給定的結(jié)構(gòu)類型而不同。對(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)器作為父類,從父類處繼承屬性。使用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)論