产生背景
ASN.1形式的协议数据单元(PDU)用于OSI面向应用的层,并基于数据类型,具有十分复杂的数据结构。例如,在涉及商业数据的电子交换应用中,APDU必须以适合于解释和处理的形式来表示发票的内容,并必须包括有关发票接收者或其拷贝方面的说明。又如,航空管制系统中,有些数据结构用于预订机票,修改班次或取消机票,又有些数据结构专门用于航务管理,还有的用于飞机检修、备件等管理。总之不管哪一种应用,都有与之相适应的数据结构。这表明使用比特串形式的APDU难以适应多种应用下要求的多种数据结构,因而产生了ASN.1。2
简述ASN.1是由CCITT和ISO共同开发的正规语言,它与应用层一起使用,可在系统间进行数据的传输。作为一种形式语言,ASN.1有严格的BNF定义。3
ASN.1规范的基本组成单元是模块。ASN.1是一种可以用于定义数据结构的语言。结构的定义是以命名模块的形式来进行的。模块的名称可以用于指代结构。模块名可以用作抽象语法名,而且应用程序可以将该名称传递给表示服务来指定自己希望与对等的应用程序实体进行交换的PDU的抽象语法。4
基本思想ASN.1的基本思想是确定各种应用所需要的所有数据结构,即数据类型,将其存入一个模块或库中。当某种应用需要发送一种数据结构(一种APDU)时,便将此数据结构及其ASN.1的名字传递给表示层。表示层依据该ASN.1的定义,便可了解各字段的类型、长度,并能了解如何进行编码才能进行发送。2
词法约定ASN.1的结构、类型和值的表示法类似于编程语言的表示法。它们遵循以下的词法约定:
①布局不并重要——多个空格和空白行都认为是单个空格。
②注释使用一对位于注释开始和结束处的连字符( - )来定界。
③标识符(值和字段的名称)、类型引用(类型的名称)以及模块名由大小写字母、数字和连字符组成。
④标识符以小写字母开头。
⑤类型引用和模块名以小写字母开头。
⑥内置类型全部由大写字母组成。内置类型通常用于提供了标准表示法的类型。4
语言结构ASN.1定义下面内建的原语语言结构:
BOOLEAN用来表示逻辑数据(即真或假)
INTEGER用来表示数值数据
BITSTRING用来表示二进制数据(即0和1序列)。
OCTET STRING用来表示文本数据或任何其它类型的数据,这些数据一般以字节序列表示。
NULL用来表示零值,实质上是一个位置保持符。
SEQUENCE用来表示一个有序的数据集合。
SET用来表示无序的数据集合。
TAGGED用来表示语义上有标识的标记数据。
CHOICE用来将数据构成模型,数据的类型可从列出的集合进行选择。
ANY用来表示无限定的数据类型(即它能用来表示任何类型)。2
应用领域ASN.1产生于20世纪80年代早期的OSI(Open System Interconnection,开放系统互连)网络模型,尽管OSI模型后来没有得到广泛的应用,但ASN.1标准却不断发展完善,应用到了很多领域。
(1)VoIP(Voice over IP,IP话音):在通过Internet传送语音数据的VolP应用中,H.323就是基于ASN.1并且使用分组编码规则的一个主要协议标准,它可以获取理想的数据传输速率。
(2)3G移动系统:在第三代移动通信系统中,使用ASN.1作为数据交换标准。
(3)网络管理:在正式的SNMP(Simple Network Management Protocol,简单网络管理协议)规范中都采用ASN.1语法,SNMP报文中的所有字段都采用ASN.1描述。
(4)安全应用:在Internet安全授权中也大量使用ASN.1,一些安全领域的常用标准,如PKIX(Public Key Infi'astructure Services,公开密钥基础设施服务)和PKCS(Public KeyCryptography Standards,公钥密码系统标准)都是基于ASN.1的。
(5)传统电信网络:包括SS7(Signaling System 7,7号信令系统)和ISDN(IntegratedServices Digital Network,综合业务数字网)在内的大多数传统电信网络应用,都使用ASN.1进行信息的交换和传输。
(6)军事和空间应用:大量的军事和空间应用广泛使用ASN.1。5