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