ASN.1 编码规则详解
1 简介
注释:
本章的内容主要翻译自《ASN.1 Communication between Heterogeneous Systems》和
《ASN.1 Complete》。
ASN.1 – Abstract Syntax Notation dot one,抽象记法 1。数字 1 被 ISO 加在 ASN 的后边,
是为了保持 ASN 的开放性,可以让以后功能更加强大的 ASN 被命名为 ASN.2 等,但至今也没有出
现。
不同体系的系统,不同编程语言之间,都存在通讯障碍。如 Figure 1-1a)所示极端情况下,
为了保证网络中 n 个异体的节点能互通,我们需要为每个节点编写(n-1)个编解码程序,即需要
总数为 n*(n-1)个编解码程序。在 b)所示极端情况下,为了保证互通,需要为每个节点编写 1
个编码和 1 个解码程序,即总数为 2n 个编解码程序。
Figure 1-1 两种类型的通讯方式
对于给定的记法描述,ASN.1 编译器能执行并产生如 Figure 1-2 图中虚线部分,这样我
们以有限的代价就能完成相当多数量系统之间的互连。
Figure 1-2 语法三元组:实际语法、抽象语法和传输语法
图中实际语法(Concrete Syntax)是指诸如 C、Objective Caml 等这样实际编程语言,抽
象语法(Abstract Syntax)指 ASN.1,传输语法(Transfer Syntax)指表示层交换数据的表示
方法。从抽象语法到传输语法,由 ASN.1 编译器按照编解码规则实现。通俗来讲,抽象语法就是
协议采用 ASN.1 规范描述的描述文本;传输语法就是实际通讯系统间的码流。
Figure 1-3 抽象语法与传输语法
其实在早期的一些标准如 ASCII,它们既定义了抽象语法(比如字母 A),又定义了传输语
法(0x41)。ASN.1 分离了这两种概念,以便可以选择一种适合要求的编解码方法。系统可以选
择编码方法以使信息传送时效率很高,或者具有很高的可靠性,等等。另一方面,定义好的编码
规则也会很大地节约应用协议开发人员的时间,特别是当牵涉到的数据结构很复杂的时候。当使
用 ASN.1 的项目较多时,这种节约更加明显,因为编解码程序可以只开发一次但很多应用程序都
可以用它。
我们可以看出,可以将通信编解码设计与开发工作转嫁给 ASN.1 编译器完成。从而不必在
手工编写编解码器。一方面大量减少了缺陷引入,另一方面更是大大加快了系统开发速度(不用
编写编解码器,也不同详细调试,维护代价也很小)。
Figure 1-4 转嫁编解码器工作给 ASN.1 编译器
讨论 ASN.1 就不得不先提到标准组织 ISO 和 ITU。
1.2 ISO 简介
国际标准组织(ISO – International Organization for Standardization)于 1946 年在美
国成立,其负责制定众多领域的国际标准;但除电气、电子和电子工艺领域外,这些主要是 IEC
(International Electrotechnical Commission)负责。
ISO 汇集了一百多个代表其自己国家的标准委员会(称之为 NB – National Body),ANSI
(American National Standard Institute)代表美国,AFNOR (Association Francaise de
NORmalisation)代表法国,BSI(British Standard Institute)代表英联邦,等等。其它一些
组织可以参加讨论,提出议案,但不能参加投票。
Figure 1-5 ISO 组织结构
如 Figure 1-5 所示,ISO 共分为 172 个技术委员会 Technical Committee (TC)负责相应
标准化领域。 所有议题都在子委员会 SubCommittees 中共享,Subcommittee 又分为工作组
Working Groups(WG)。
到 1987 年,著名的 OSI 标准就是 TC97 的成果,称之为“Telecommunications and
Information Exchange Between Systems”。在 1987 年,ISO 和 IEC 两个标准化组织一致认为都
应当关注信息技术 Information Technology,因此成立了一个联合技术委员会称为 JTC1。JTC1
的秘书处由 ANSI 负责。
Figure 1-6 JTC1 组织结构示意图
在 ASN.1 标准刚刚受到关注时,基于历史原因,ASN.1 主要来自于 CCITT 的成果,有很多提
案来自 CCITT。在 80 年代,ISO 在 1990 年左右成为主角前,两个委员会的确有过合作。
1.3 ITU 简介
国际电信联盟 ITU(International Telecommunication Union)总部位于日内瓦,于 1947
年成为联合国的专设机构,其前身为成立于 1865 年的国际电报联盟(International Telegraph
Union)。ITU 汇集了 188 个代表其国家的公共电信运营商和大约 450 个来自私有部门称之为
RPOA(Registered Private Operating Authorities)的成员(如 AT&T, Bell 电话等)。来自
其它组织的运营商也被接收,但不具有投票权利。
ITU 的目标是:“to promote and to offer technical assistance to developing countries
in the field of telecommunications, and also to promote the mobilization of the material
and financial resources needed for implementation, and to promote the extension of the
benefits of the new telecommunication technologies to all the world's inhabitants”。
ITU 有 5 个常设组织,其中一个为 CCITT(Consultative Committee on International
Telephony and Telegraphy)负责电信网络,如有线传输语音,数据和电视。在 1992 年 ITU 重组
后,CCITT 成为了 ITU-T(ITU-Telecommunication Standardization Sector)。
ITU-T 发布的建议都是以一个字母开头(每个领域一个字母编号)和一个数字作为参考号。
我们通常关注的有:
F: Non-Telephone Telecommunications Services;
H: Audiovisual and Multimedia Systems;
Q: Switching and Signalling;
T: Terminals for Telematic Services;
V: Data Communications Over the Telephone Network;
X: Data Networks and Open System Communications;
Z: Programming Languages.
到 1992 年,所有 CCITT 已经通过其委员会多次论证后的建议每四年发布一次(即使某
些部分还未完成),其封面用不同的颜色(即黄皮书、红皮书、兰皮书和白皮书):黄色
代表 1976-1980,红色代表 1980-1984,蓝色代表 1984-1988,白色代表 1988-1992。
ITU-T 现在是当某个标准稳定后单独发布。此外,自 1994 年开始,为了防止出现不一
致,ISO/IEC 和 ITU-T 都是联合发布标准文本(各用不同的参考号)。 不一致的情况在
ASN.1 中出现过。
ITU-T 分为研究组 SG(Study Group),其中:
SG VII,“Data Networks and Open System Communications”,课题广
泛,包括互连(比如 ASN.1),X.25 网络标准,X.400 Email 姓名地址录标准,网络安
全和网络管理等。
SG VIII,“Terminals for Telematic Services”负责 Teletex,Videotex 和
字符集等。
每个 SG 的工作又被划分为问题 Question:其中一些相当有名,比如涉及 OSI 模型的
Q24/7;另外一些则是对以发布标准的更为精确的更新。每个问题最终结束于一个新标准或者一
个现有标准的补充。
1.4 ASN.1 历史
开始于 1982 年夏天,许多开发应用层标准的人意识到他们面临同一个问题:数据结构变得
越来越复杂,难以用预定的规程来编解码比特或者字节(在 1978 年,OSI 中术语 Open 是至关重
要的)。如同编译器取代了汇编器,通常认为编码器应当从描述 Specification 自动产生,这样
使得描述也等效为一种计算机程序。
1.4.1 诞生