ASN.1编码规则详解.pdf
ASN.1 编码规则详解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),又定义了传输语 法(0 x41)。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 ? 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 诞生诞生 James White 和 Douglas Steedman 分别提出一个基本的记法和算法,这套记法能定义 Email 消息控制系统协议 MHS(Message Handling System)的编码比特格式。这种记法和编码规则是 机器无关的,能表述复杂的数据结构。 James White 当时是 CCITT X.400 (MHS)建议系列的起草人,并且为施乐公司(Xerox Corporation)设计了 Courier 记法,这种记法能翻译 XNS(Xerox Network Services)的 RPC (Remote Procedure Call)传送的数据。Courier 作为第一种外部的数据记法而闻名。同时它 对后来的 XDR(来自 Sun Microsystems Inc.)和 NDR(来自 Apollo Computer Inc.)都产生了 积极的影响。 1984 年,CCITT 将这种记法标准化,参考号为 X.409(红皮书)。X.409 建议成为:Message Handing Systems: Presentation Transfer Syntax And Notation。它的目标和范围为:“the presentation transfer syntax used by application layer protocols in message handling systems and by the document interchange protocol for the telematic services. In the architecture of open systems interconnection (OSI), a presentation transfer syntax is used to represent information exchanged between application entities” X.409 记法和 MHS 系统是完全独立的,部分原因是 Email 协议处理的对象是十分复杂的,没 有大小限制,多种字符串类型,链接的结构,为数众多的选项等。结果,许多 OSI 应用标准化工 作组发现这种记法对他们也有用。 1.4.2 1989 和和 1990 版本版本 如前所述,1987 年 ISO 和 IEC 成立了 JTC 1。 1989 年 CCITT 发布了两个文档 X.208(ASN.1)和 X.209(BER)来替代 X.409 建议。其中 很多新特性是由 JTC 1 引入的: subtypes, floats (REAL type), pointers (ANY DEFINED BY type) and the default tagging modes (IMPLICIT TAGS and EXPLICIT TAGS)。他们这套 X.200 系列 称为“General OSI Infrastructure”,表示 ASN.1 成为应用层一种独立的描述语言。 1990 年 ISO 发布了新的 ISO 8824 和 ISO8825 标准,和 X.208 相比,有三处地方相悖。具体 问题请参考 1.6.1 CCITT 1989 版本和 ISO 1990 版本的冲突。 自 1998 年开始,ISO 和 ITU-T 联合发布他们的标准文本,避免再次出现标准间的冲突。 1.4.3 1994 版本版本 新的版本(实际是 1994 年完成草案) ASN.1 :1994 于 1995 年被 ISO 通过,成为正式标准。 为了阐述数目众多的条件和介绍新概念,该标准分为四个部分: 1) ITU-T Rec. X.680 (1994) | ISO/IEC 8824-1:199518: Specification of Basic Notation, 2) ITU-T Rec. X.681 (1994) | ISO/IEC 8824-2:1995: Information Object Specification, 3) ITU-T Rec. X.682 (1994) | ISO/IEC 8824-3:1995: Constraint Specification, 4) ITU-T Rec. X.683 (1994) | ISO/IEC 8824-4:1995: Parameterization of ASN.1 Specifications, 几个月之后,发布了两个补充和一个技术勘误表: ? ITU-T Rec. X.680/Amd.1 (1995) | ISO/IEC 8824-1:1995/Amd.1: Rules of Extensibility, ? ITU-T Rec. X.680/Corr.1 (1995) | ISO/IEC 8824-1:1995/Corr.1: Technical Corrigendum 1, ? ITU-T Rec. X.681/Amd.1 (1995) | ISO/IEC 8824-2:1995/Amd.1: Rules of Extensibility. 编码规则部分被分成了两个部分(和一个技术勘误表): ? ITU-T Rec. X.690 (1994) | ISO/IEC 8825-1:1995: ASN.1 Encoding Rules: Specification of Basic Encoding Rules, Canonical Encoding Rules, and Distinguished Encoding Rules, ? ITU-T Rec. X.690/Corr.1 (1995) | ISO/IEC 8825-1:1995: Technical Corrigendum 1, ? ITU-T Rec. X.691 (1995) | ISO/IEC 8825-2:1995: ASN.1 Encoding Rules: Specification of Packed Encoding Rules 这些标准给出了官方正式编码规则,这对诸如传输加密数据情况来说是必需的。 1994 版本和以前版本相比的差异和新特性,请参考 1.6.2 错误!未找到引用源。错误!未找到引用源。 1.4.4 1997 版本版本 语义模型分为三个补充文件: ? ITU-T Rec. X.680 (1997)/Amd.2 (1999) | ISO/IEC 8824-1:1998/Amd.2 ? ITU-T Rec. X.681 (1997)/Amd.1 (1999) | ISO/IEC 8824-2:1998/Amd.1 ? ITU-T Rec. X.683 (1997)/Amd.1 (1999) | ISO/IEC 8824-4:1998/Amd.1 相关对象标识符新的 RELATIVE-OID 类型说明在三个补充文件: ? ITU-T Rec. X.680 (1997)/Amd.1 (1999) | ISO/IEC 8824-1:1998/Amd.1 ? ITU-T Rec. X.690 (1997)/Amd.1 (1999) | ISO/IEC 8825-1:1998/Amd.1 ? ITU-T Rec. X.691 (1997)/Amd.1 (1999) | ISO/IEC 8825-2:1998/Amd.1 新增四个技术勘误表: ? ITU-T Rec. X.680 (1997)/Corr.1 (1999) | ISO/IEC 8824-1:1998/Corr.1 ? ITU-T Rec. X.681 (1997)/Corr.1 (1999) | ISO/IEC 8824-2:1998/Corr.1 ? ITU-T Rec. X.690 (1997)/Corr.1 (1999) | ISO/IEC 8825-1:1998/Corr.1 ? ITU-T Rec. X.691 (1997)/Corr.1 (1999) | ISO/IEC 8825-2:1998/Corr.1 1994 版本和以前版本相比的差异和新特性,请参考 1.6.3 1997 版本新特性和 1.6.4 错误!未找到引用源。错误!未找到引用源。 1.4.5 最新版本最新版本 目前最新版本的协议为: ? ITU-T X.680 (ISO/IEC 8824-1) - Abstract Syntax Notation One (ASN.1): Specification of Basic Notation ? ITU-T X.681 (ISO/IEC 8824-2) - Abstract Syntax Notation One (ASN.1): Information Object Specification ? ITU-T X.682 (ISO/IEC 8824-3) - Abstract Syntax Notation One (ASN.1): Constraint Specification ? ITU-T X.683 (ISO/IEC 8824-4) - Abstract Syntax Notation One (ASN.1): Parameterization of ASN.1 Specifications ? ITU-T X.690 (ISO/IEC 8825-1) - ASN.1 Encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER) ? ITU-T X.691 (ISO/IEC 8825-2) - ASN.1 Encoding Rules: Specification of Packed Encoding Rules (PER) ? ITU-T X.692 (ISO/IEC 8825-3) - ASN.1 Encoding Rules: Specification of Encoding Control Notation (ECN) ? ITU-T X.693 (ISO/IEC 8825-4) - ASN.1 Encoding Rules: Specification of XML Encoding Rules (XER). ? ITU-T X.694 (ISO/IEC 8825-5) - ASN.1 Encoding Rules: Mapping W3C XML schema definitions into ASN.1. 1.5 ASN.1 应用情况应用情况 ? Accredited Standards Committee X9 - Financial Services ? Manufacturing Message Specification (MMS) ? Molecular Biology Standards ? Request For Comments (RFC) ? RSA Public-Key Cryptography Standards ? Standard Security Label for Information Transfer ? Secure Electronic Transaction (SET) ASN.1 ? T.120 Series Standards ? Telecommunications Management Network (TMN) ? Unicode Worldwide Character Standard ? X.400 Standards - Message Handling Systems ? X.500 Standards - The Directory ? H.323 ? H.248 ? 3G on UMTS 等等。 现在一些协议,标准组织在给出协议文本时往往也同时给出了ASN.1 的描述。 2 基础知识基础知识 ? 注释:注释: 本章的内容主要翻译自ASN.1 Communication between Heterogeneous Systems。 2.1 相关背景知识相关背景知识 2.1.1 OSI参考模型参考模型 1st layer 2nd layer 3rd layer 4th layer 5th layer 6th layer 7th layer Bit Frame Packets TPDV SPDV PPDV APDV7th layer protocol 6th layer protocol Interface between the 6th and 7th layers Figure 2-1 OSI 七层参考模型 虽然 ASN.1 和 OSI 密切相关,但实际上它也应用在很多非 OSI 模型的情况下。 II. 表示层表示层 Presentation Layer 两个系统在传输数据前需要协商共用的编码方式。表示层负责在两个应用系统间进 行编码协商和实际信息编码。为了达到这个目的,表示层需使用以下概念: 1) 抽象语法:定义了数据的常用结构(包括不同的数据类型),并且建立 了和应用层对话所依赖的框架。 2) 实际语法:本地的,并且定义本地系统的数据表示方法。 3) 传输语法:定义两个系统间基于各自会话层的表示层间交换数据的表示 方法。 4) 编码规则:提供从本地实际语法到传输语法和其相反操作的方法。 应用这些记法,表示层能够提供应用层这些服务: ? 传输语法的协商(在会话开始前挑选一种传输语法的方法,改变传输语 法的方法); ? 确定传输语法的集合(抽象语法的多种表示方式); ? 用实际语法(内部表示方式)的编码、解码规则来翻译为传输语法(外 部表示方式)或者做相反操作; ? 把一个协商后的传输语法和应用内部采用的抽象语法进行关联; ? 访问会话层服务。 Figure 2-2 表示层上下文协商 在表示层上下文协商中, 详细描述了这样一个过Figure 2-2 表示层上下文协商 程: 1) 应用 A 发送一个 P-CONNECT.request 原语给自己的表示层,并且声 明操作这个传输的相关抽象语法名字为(AS1,AS2)。每个抽象语法的名字 实际是一串成为对象标识符(Object Identifier,在 ASN.1 中是 OBJECT IDENTIFIER 类型的值)的数字,它能唯一的标识抽象语法:的确,我们应当 注意到这是一个开放式的架构,能适应各种机器,各种抽象语法,各种传输语 法。 2) 表示层为每个抽象语法关联传输语法,并且为会话层编码表示协议数据 值 PPDV(Presentation Protocol Data Value),这些数据会被送往对方 系统的表示层。PPDV 中包含着可用的抽象语法。 3) 表示层 B 收到这个 PPDV 数据后,向自己的应用层回送 P-CONNECT.indication 原语,指示应用 A 的抽象语法可用。 4) 应用 B 以 P-CONNECT.response 原语应答,指示在这个传输中可用 的抽象语法的名字(这里只指示 AS2)。 5) 会话层 B 接收到原语后,发送 PPDV 指明传输语法,这个语法应当是已 经协商中的一个(如上图中是 T2、T3 中的 T2)。 6) 最后,表示层 A 收到 PPDV 后,检查对方推荐的传输语法,如果接受它 则发送 P-CONNECT.confirm 原语给应用 A。 应当注意,表示层没有参与到应用间可用抽象语法的确定过程中。通常,会用多个 抽象语法/传输语法的组合关系。 一个抽象语法可以用多个传输语法来表示; 一个传 输语法也可以用来表示多个抽象语法。 抽象语法/传输语法组合的协商结果被成为表 示上下文(Presentation Context) 。上下文用整数来标识,为了防止重新分配时出现 覆盖,一般让一个实体采用偶数而另一个实体采用奇数。其它上下文可以在通讯过 程中动态协商。 在初始协商的最后,系统在它的配置中有了一套表示上下文,在任何时候,系统都 能从中选出合适的上下文进行交换操作。 来自应用层的数据会被根据相关的表示上下文进行编码。当只有一个上下文被指定 时,他们将被直接编码(简单编码 Simple Encoding) ;否则应用数据包括嵌入数据 (embedded data)都要在前面加上正确的上下文标识符(完整编码 Complete Encoding) 。 III. 应用层应用层 Application Layer 采用 OSI 模型时,我们称一个应用的一个通讯方面为一个应用实体;通讯实体用通 讯协议和表示业务来共享信息。 在 ASN.1 中, 各个应用的数据结构作为应用协议数据值 APDV (Application Protocol Data Value)发送。每当它要传输数据时,应用实体都会在给出 APDV 的同时,告 知表示层自己的 ASN.1 名字。通过参考 ASN.1 的定义,表示层可以得知数据单元 的类型和长度,以及传输时应当采用的编码方法。在连接的另一端,表示层分析收 到数据结构中的 ASN.1 标识符,就能得知第一个数据单元有多少比特,第二个有多 少,等等。有了这些信息,表示层按照接收方内部格式对数据做必要的转换。 自从 ISO 要求所有的应用层和表示层数据交换都要用 ASN.1 抽象语法描述后, ASN.1 在 OSI 中只作为表示方法用。随着 OSI 模型的广泛应用,ASN.1 主要用在高 层中(部分因为在 ASN.1 出现前,许多低层已经存在了) ,但是这不是一种限制。 如果 ASN.1 能广泛应用在低层中,就能充分影响编码过程,阻止数据在不同层上反 复出现。 2.1.2 边界对齐边界对齐 对于同样一条消息,在计算机内存中是以字节为单位存储的,在链路上则是以比特 为单位传送的,对于其中每个信元(IE:Information Element) ,当从比特流映射到字 节流的时候,就涉及到边界对齐的问题,如果一个信元的第一个比特也恰好是字节 流中某字节的开始比特,我们称之为开始于边界对齐的,同样,如果信元的最后一 个比特也恰好是字节流中某字节的最后一个比特,则可以称之为结束于边界对齐 的。 对于不是结束于边界对齐的情况,一般要进行补位。有两种方式: 1) 对信元的结束立即进行补位,保证下一个信元是开始于边界对齐的; 2) 从信元结束的位置开始新的信元,到消息结束,再进行补位操作。 通常第一个种方式用在对消息大小要求不苛刻的编码过程中和通常的解码过程中; 第二种方式用在对消息大小要求苛刻的编码过程中(如无线通讯系统的空中接口消 息编码中) 。 当把边界对齐问题和大小端问题放在一起时,常常会造成理解上的困难。某些协议 中为了明确表示位域跨字节情况下的排列,用 MSB、LSB 标识最高、最低比特位 置所在。 2.1.3 大小端(大小端(Bid Endian vs. Little Endian) 来源于 Swift 的小说 Gullivers Travels 中一个故事:两个国家连年征战,起因在于 吃煮鸡蛋时到底是从比较尖的一端开始,还是从比较圆的一端开始。 不幸的是类似事情在计算机中也存在如下情况: ? 大端方式Motorola 的 PPC 系列,IP 协议中(MSDN 中说的网络序) ? 小端方式VAX 计算机,Intel 的 x86 系列(MSDN 中说的主机序) 字段内部的比特高低次序相同(左高右低) ,而字段之间的高低次序相反。 在 32 位系统中我们分以下这些情况来一一说明: 1) Byte 类型(8bits) 在只有一个字节的情况下,大端方式和小端方式没有分别。如:0 x34 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Bid Endian 0 0 1 1 0 1 0 0 0 x34 Little Endian 0 0 1 1 0 1 0 0 0 x34 2) Short 类型(16bits) 大小端方式之间有差别。如:0 x1234 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Bid Endian (0) 0 0 0 1 0 0 1 0 0 x12 Bid Endian (1) 0 0 1 1 0 1 0 0 0 x34 Little Endian (0) 0 0 1 1 0 1 0 0 0 x34 Little Endian (1) 0 0 0 1 0 0 1 0 0 x12 3) Long 类型(32bits) 大小端方式之间有差别。如:0 x12345678 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Bid Endian (0) 0 0 0 1 0 0 1 0 0 x12 Bid Endian (1) 0 0 1 1 0 1 0 0 0 x34 Bid Endian (2) 0 1 0 1 0 1 1 0 0 x56 Bid Endian (3) 0 1 1 1 1 0 0 0 0 x78 Little Endian (0) 0 1 1 1 1 0 0 0 0 x78 Little Endian (1) 0 1 0 1 0 1 1 0 0 x56 Little Endian (2) 0 0 1 1 0 1 0 0 0 x34 Little Endian (3) 0 0 0 1 0 0 1 0 0 x12 4) 位域的情况: 大小端方式之间有明显的差别。 在一个字节内,如 3-4-1 结构下的4, 15, 0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Bid Endian 1 0 0 1 1 1 1 0 0 x9E Little Endian 0 1 1 1 1 1 0 0 0 x7C 跨字节,边界不对齐,如 5-4-7 结构下的2, 15, 0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 Bid Endian (0) 0 0 0 1 0 1 1 1 0 x17 Bid Endian (1) 1 0 0 0 0 0 0 0 0 x80 Little Endian (0) 0 0 0 0 0 0 0 1 0 x01 Little Endian (1) 1 1 1 0 0 0 1 0 0 xE2 2.2 基本语法规则基本语法规则 到目前为止,ASN.1 记法仍然主要是 BNF(Backus-Naur Form)形式的。 1) 在 ASN.1 中,符号的定义没有先后次序:只要能够找到该符号的定义 即可,而不必关心在使用它之前是否被定义过。如: employeeNumber EmployeeNumber := 12345 EmployeeNumber := APPLICATION 2 INTEGER 2) 所有的标识符、参考、关键字都要以一个字母开头,后接字母(大、小 写都可以)、数字或者连字符“-”。不能出现下划线“_”。不能以连字符“-” 结尾,不能出现两个连字符(注释格式)。 合法的: INTEGER v1515 No-final-dash MY-CLASS 不合法的: Final-dashdouble- dash under score 1515 3M 3) 关键字一般都是全部大写的,除了一些字符串类型(如 PrintableString, UTF8String, 等。 因为这些都是由原类型 OCTET STRING 衍生出来的)。 4) 在标识符中,只有类型和模块名字是以大写字母开头的,其它标识符都 是以小写字母开头的。 5) 字符串有三种形式: ? 用引号引用的字符串 “This is a string” ? 单引号引用的二进制串后加大写字母 B 01101B ? 单引号引用的十六进制串后加大写字母 H 0123456789ABCDEFH 6) 带小数点的小数形式不能在 ASN.1 中直接使用, 在 ASN.1 中实数实际 定义为三个整数:尾数、基数和指数。 7) 注释以两个连字符“-”开始,结束于行的结尾或者该行中另一个双连 字符。 8) 如同大多数计算机语言,ASN.1 不对空格、制表符、换行符和注释做翻 译。但是在定义符号(或者分配符号 Assignment) “:=”中不能有分隔符, 否则不能正确处理。 2.3 类型与类型定义类型与类型定义 2.3.1 ASN.1 中的类型中的类型 ASN.1 中的一个重要概念就是类型。类型是一个非空的值的集合,可以被编码后传 输。 相比与高级语言中复杂的数据结构, ASN.1 中的类型主要是为了数据的传输 (比 如为 SEQUENCE 和 SET定义了 OPTIONAL 条目) 。 而 BIT STRING 和 EMBEDDED PDV 则是为了通讯专门设计的。 ASN.1 中的基本类型如 Table 2-1 中所示,更为复杂的类型可以由基本类型通过如 Table 2-2 中的组合类型构造得到。 Table 2-1 内建数据类型 类型类型 含义含义 NULL 只包含一个值 NULL,用于传送一个报告或者作 为 CHOICE 类型中某些值 INTEGER 全部整数(包括正数和负数) REAL 实数,表示浮点数 ENUMERATED 标识符的枚举(实例状态机的状态) BIT STRING 比特串 OCTET STRING 字节串 OBJECT IDENTIFIER, RELATIVE-OID 一个实体的标识符,它在一个全世界范围树状结 构中注册 EXTERNAL, EMBEDDED PDV 表示层上下文交换类型 String 各种字符串,有 NumericString、 PrintableString、VisibleStirng、 ISO64String、IA5String、TeletexStirng、 T61String、 VideotexString、 Graph