ASN.1抽象语法标识
ASN.1概述
抽象语法表示(标记) ASN.1(Abstract Syntax Notation One )一种数据定义语言,描述了对数据进行表示、编码、传输和解码的数据格式。网络管理系统中的管理信息库(MIB)、应用程序的数据结构、协议数据单元(PDU)都是用ASN.1定义的。
ASN.1优点:
通过如下的独立:
⑴ 独立于机器;
⑵独立于程序语言;
⑶独立于应用程序的内部表示,用一种统一的方式来描述数据结构。
解决如下的不同:
⑴ 程序语言之间数据类型不同
⑵ 不同机器平台之间数据的存储方式不同
⑶不同种类的计算机内部数据表示不同
比如:IBM为EBCDIC,其它为ASCⅡ;Intel的芯片从右到左计数字节数,而Motorola的芯片则从左到计数字节数。
在任何需要以数字方式发送信息的地方,都可使用ASN.1发送各种形式信息。包括音频、视频、图片、数据等。由于各种系统对数据的定义并不完全相同, 这自然给利用其它系统的数据造成了障碍。表示层就担负了消除这种障碍的任务。表示层如同应用程序和网络之间的翻译官:主要解决用户信息的语法表示问题,即提供统一的、格式化的表示和转换数据服务。数据的压缩、解压、加密、解密都在该层完成。
ASN.1的基本概念
ASN.1文本的书写规则(文本约定):
(1) 多个空格和空行等效于一个空格;
(2) 用于表示值和字段的标识符、类型指针(类型名)和模块 名由大小写字母、数字和短线组成;
(3) 标识符以小写字母开头;
(4) 类型指针和模块名以大写字母开头;
(5) ASN.1定义的内部类型全部用大写字母表示;
(6) 关键字(保留字)全部用大写字母表示; (7) 注释以一对短线(- -)开始,以一对短线或行尾结束。
在ASN.1中的符号定义
如下表所示
符号 含义
∷= 定义为,或赋值
| 或、选择、列表选项
- 标签号
-- 符号后跟随注释
{ } 列表的开始和结束
[ ] 标签(TAG)的开始和结束
( ) 子类型的开始和结束
.. 范围
抽象数据类型
ASN.1定义的数据类型有20多种,如表2.1所示。这些数据类型可分为4大类。● 简单类型:由单一成分构成的原子类型;
● 构造类型:由两种以上元素构成的数据类型;
● 标签类型:由已知类型定义的新类型;
● 其他类型:包括CHOICE和ANY两种类型。
表2.1 ASN.1定义的通用类型
标签 类型 值集合
UNIVERSAL 1 BOOLEAN TRUE, FALSE
UNIVERSAL 2 INTEGER 正数、负数和零
UNIVERSAL 3 BIT STRING 0或者多个比特组成的序列
UNIVERSAL 4 OCTET STRING 0或者多个字节组成的序列
UNIVERSAL 5 NULL 空类型
UNIVERSAL 6 OBJECT IDENTIFIER 对象标识符
UNIVERSAL 7 OBJECT DESCRIPTOR 对象描述符
UNIVERSAL 8 EXTERNAL 外部文件定义的类型
UNIVERSAL 9 REAL 所有实数
UNIVERSAL 10 ENUMERATED 整数值的表,每个整数有一个名字
UNIVERSAL 11~15 为ISO8824保留
UNIVERSAL 16 SEQUENCE, SEQUENCE OF 序列
UNIVERSAL 17 SET, SET OF 集合
UNIVERSAL 18 NumericString 数字0~9和空格串
UNIVERSAL 19 PrintableString 可打印字符串
UNIVERSAL 20 TeletexString 由CCITT T.61建议定义的字符集
UNIVERSAL 21 VideotexString 由CCITT T.100/T.101建议定义的字符集
UNIVERSAL 22 IA5String 国际标准字符集(相当于ASCII码)
UNIVERSAL 23 UTCTime 时间码
UNIVERSAL 24 GeneralizedTime 时间码
UNIVERSAL 25 GraphicString 由ISO8824定义的字符集
UNIVERSAL 26 VisibleString 由ISO646定义的字符集
UNIVERSAL 27 GeneralString 通用字符集
UNIVERSAL 28-- 为ISO8824保留
1. 简单类型
表2.1中除了UNIVERSAL16和UNIVERSAL17之外都是简单类型。可以用这些类型构造新的数据类型。简单类型分为4组。第一组包括:BOOLEAN 布尔类型
INTEGER 整型
BIT STRING 0 个或多个比特组成的字符串类型
OCTET STRING 0个或多个字节组成的字符串类型
REAL 实数
ENUMERATED 枚举