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