通信設(shè)備需要相互傳輸數(shù)據(jù),但是設(shè)備可能是由不同廠家生產(chǎn)的,其硬件體系結(jié)構(gòu)、程序語(yǔ)言的語(yǔ)法定義和程序功能實(shí)現(xiàn)一般是不相同的。例如,在一臺(tái)設(shè)備中,整形數(shù)據(jù)類型是16位表示,而在另一臺(tái)則可能用32位表示。這些差異導(dǎo)致了同一數(shù)據(jù)對(duì)象在不同的設(shè)備上被表示為不同的符號(hào)串。為了解決以上問(wèn)題,ISO組織推出了抽象語(yǔ)法表符號(hào)1(ASN.1,Abstract Syntax Notation One)。ASN.1通過(guò)定義若干簡(jiǎn)單類型和復(fù)合類型,使得各個(gè)設(shè)備對(duì)其間交換消息的數(shù)據(jù)類型有了一致的認(rèn)識(shí)。系統(tǒng)的消息發(fā)送方采用編碼規(guī)則(BER、PER)將ASN.1描述的消息編碼成二進(jìn)制字節(jié)流;消息接受方對(duì)收到的字節(jié)流進(jìn)行解碼,再轉(zhuǎn)化為符合其自身語(yǔ)法的消息格式。這樣,經(jīng)過(guò)ASN.1處理的消息獨(dú)立于應(yīng)用環(huán)境,就不會(huì)因?yàn)橄到y(tǒng)終端的區(qū)別而產(chǎn)生歧義?;?/span>H.323協(xié)議的視頻會(huì)議系統(tǒng)的信令消息就是采用ASN.1來(lái)表示的。
80年代初,當(dāng)時(shí)的國(guó)際電報(bào)電話咨詢委員會(huì)(CCITT)將應(yīng)用于E-mail MHS協(xié)議的基本記法和解碼格式進(jìn)行了標(biāo)準(zhǔn)化,形成了X.409方案,這是ASN.1的前身。該標(biāo)準(zhǔn)后來(lái)被ISO組織采用并將其分為抽象語(yǔ)法記法和傳輸語(yǔ)法,形成了ISO/IEC 8824和ISO/IEC 8825兩個(gè)系列標(biāo)準(zhǔn),且版本在不斷更新之中(目前是2015年版本)。CCITT于1989年相應(yīng)地發(fā)布了X.208(ASN.1)和X.209(BER)取代了X.409。但后來(lái)由國(guó)際電信聯(lián)盟(ITU)在1994年頒布的數(shù)據(jù)結(jié)構(gòu)基本描述X.680(Specification of basic notation)、信息對(duì)象描述X.681(Information object specification)、約束描述X.682(Constraint specification)和規(guī)范的參數(shù)化X.683(Parameters of ASN.1 specification)等系列標(biāo)準(zhǔn)代替了X.208;X.209也被ITU在1994年的X.690~ X.696所代替。X.680系列和X.690系列又分別于1997年、2002年和2015年更新了版本。ITU-T的X.680系列和X.690系列分別與ISO的8824系列和8825系列相對(duì)應(yīng);我國(guó)從1996年開(kāi)始也陸續(xù)頒布了相應(yīng)的國(guó)家標(biāo)準(zhǔn)。
欲進(jìn)一步了解我國(guó)關(guān)于ASN.1的相關(guān)標(biāo)準(zhǔn)索引的請(qǐng)進(jìn)入。
根據(jù)標(biāo)準(zhǔn)X.680,ASN.1定義的數(shù)據(jù)結(jié)構(gòu)類型分為簡(jiǎn)單類型和復(fù)合類型?;绢愋褪?/span>ASN.1描述數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ);復(fù)合類型是通過(guò)基本類型的組合而形成的較復(fù)雜的類型。
基本類型包括BOOL、INTEGER、REAL、BIT STRING、OCTET STRING、ENUMERATED、OBJECT IDENTIFIER、NULL等。這些類型的注釋詳見(jiàn)下表1。ASN.1里定義的每個(gè)基本對(duì)象都有一個(gè)對(duì)應(yīng)的數(shù)字標(biāo)識(shí)Tag,在進(jìn)行二進(jìn)制編碼的時(shí)候需要使用該標(biāo)志。ASN.1定義的部分基本數(shù)據(jù)類型,其各字段的含義、標(biāo)識(shí)Tag詳見(jiàn)下表2。
表1:基本類型的注釋
表2:ASN.1定義的基本數(shù)據(jù)類型
復(fù)合類型有SEQENCE、SET,CHOICE、SEQUENCE OF、SET OF等。其中SEQUENCE和SET類型可表示一組不同數(shù)據(jù)類型的集合,相當(dāng)于C語(yǔ)言中的struct結(jié)構(gòu)體;CHOICE類型是表示選擇一組數(shù)據(jù)類型中的一個(gè),相當(dāng)于C語(yǔ)言中的union聯(lián)合體;SEQUENCE OF 和SET OF類型定義了同一數(shù)據(jù)類型元素的集合,相當(dāng)于C語(yǔ)言中的數(shù)組。兩者的差別是:SEQUENCE OF內(nèi)各項(xiàng)元素是有序的,而SET OF結(jié)構(gòu)中各項(xiàng)元素的順序是任意的。
ASN.1 取得成功的一個(gè)主要原因是它與幾個(gè)標(biāo)準(zhǔn)化編碼規(guī)則相關(guān),如基本編碼規(guī)則(BER)、規(guī)范編碼規(guī)則(CER)、識(shí)別名編碼規(guī)則(DER)、壓縮編碼規(guī)則(PER)和 XER 編碼規(guī)則(XER)。這些編碼規(guī)則(分別由X.690系列所規(guī)范)描述了如何對(duì) ASN.1 中定義的數(shù)值進(jìn)行編碼,以便用于傳輸,而不管計(jì)算機(jī)、編程語(yǔ)言或它在應(yīng)用程序中如何表示等因素。ASN.1的編碼方法比許多與之相競(jìng)爭(zhēng)的標(biāo)記系統(tǒng)更先進(jìn),它支持可擴(kuò)展信息快速可靠的傳輸--在無(wú)線寬帶中,這是一種優(yōu)勢(shì)。1984年,ASN.1就已經(jīng)成為了一種國(guó)際標(biāo)準(zhǔn),它的編碼規(guī)則已經(jīng)成熟并在可靠性和兼容性方面擁有更豐富的歷程。
簡(jiǎn)潔的二進(jìn)制編碼規(guī)則(BER、CER、DER、PER,但不包括 XER)可當(dāng)作更現(xiàn)代XML的替代。然而,ASN.1支持對(duì)數(shù)據(jù)的語(yǔ)義進(jìn)行描述,所以它是比XML更為高級(jí)的語(yǔ)言。