ASN.1编码规则详解(最全最经典)-(1)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ASN.1编码规则详解1简介注释:本章的内容主要翻译自《ASN.1CommunicationbetweenHeterogeneousSystems》和《ASN.1Complete》。1.1ASN.1简介ASN.1(AbstractSyntaxNotationdotone),抽象记法1。数字1被ISO加在ASN的后边,是为了保持ASN的开放性,可以让以后功能更加强大的ASN被命名为ASN.2等,但至今也没有出现。ASN.1是定义抽象数据类型规格形式的标准。是用于描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则,以描述独立于特定计算机硬件的对象结构。ASN.1是通信协议中描述数据传输的正式标记(notation),它与语言实现和物理表示无关,与应用的复杂度无关。ASN.1特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构。ASN.1发送任何形式(音频、视频、数据等等)的信息都必须用数字传送。ASN.1只能包含信息的结构方面(没有已经定义的或考虑到的处理数据值的操作)。它不是一个编程语言。ASN.1本身只定义了表示信息的抽象句法,但是没有限定其编码的方法。各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达)。标准的ASN.1编码规则有基本编码规则(BER,BasicEncodingRules)、规范编码规则(CER,CanonicalEncodingRules)、唯一编码规则(DER,DistinguishedEncodingRules)、压缩编码规则(PER,PackedEncodingRules)和XML编码规则(XER,XMLEncodingRules)。ASN.1成功的一个主要理由是它采用了一些如BER(BasicEncodingRules)或新制定的PER(PackedEncodingRules)这样的标准化的编码规则,它对受带宽限制的应用程序很有用。这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码(例如:他们可以被转化为可传输的字节,或反向转化),其与机器、编程语言或者在应用程序中的表示无关。ASN.1的编码方式比很多竞争者更先进,能够快速并可靠的传输可扩展信息--这是无线带宽的一个优势。由于从1982年以后ASN.1已经成为一个国际标准,所以它的编码规则是成熟的并且它有长期的可靠性和互用性的跟踪记录。一个的ASN.1源文件可以非常容易地(由预处理器)映射为C或C++或Java数据结构,可用于通过应用程序代码,和支持的运行时库提供的编码和解码的申述或者一个XML或限值的格式,或非常紧凑的压缩编码格式。几乎所有操作系统上的工具都支持ASN.1,ASN.1支持如java,c和c++这样流行的编程语言,和包括COBOL这样的较老的编程语言。ASN.1的广泛性的一个例子是,有很多工具已经支持超过150种不同的计算机平台。有大量经过检验的ASN.1工具已经被长期使用。ASN.1是一种ISO/ITU-T标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序—不论是非常复杂的,还是非常简单的。在任何需要以数字方式发送信息的地方,ASN.1都可以发送各种形式的信息(声频、视频、数据等等)。ASN.1和特定的ASN.1编码规则推进了结构化数据的传输,尤其是网络中应用程序之间的结构化数据传输,它以一种独立于计算机架构和语言的方式来描述数据结构。ISO协议套中的应用层协议使用了ASN.1来描述它们所传输的PDU,这些协议包括:用于传输电子邮件的X.400、用于目录服务的X.500、用于VoIP的H.323和SNMP。它的应用还可以扩展到通用移动通信系统(UMTS)中的接入和非接入层。简洁的二进制编码规则(BER、CER、DER、PER,但不包括XER)可当作更现代XML的替代。然而,ASN.1支持对数据的语义进行描述,所以它是比XML更为高级的语言。ASN.1的描述可以容易地映被射成C或C++或Java的数据结构,并可以被应用程序代码使用,并得到运行时程序库的支持,进而能够对编码和解码XML或TLV格式的,或一种非常紧凑的压缩编码格式的描述。同时,ASN.1是一种用于描述结构化客体的结构和内容的语言。抽象语法定义:ASN.1是描述在网络上传输信息格式的标准方法。它有两部分:一部分描述信息内数据,数据类型及序列格式;另一部分描述如何将各部分组成消息。它原来是作为X.409的一部分而开发的,后来才自己独立成为一个标准。ASN.1在OSI的ISO8824/ITUX.208(说明语法)和ISO8825/ITUX.209(说明基本编码规则)规范。例如:Report::=SEQUENCE{authorOCTETSTRING,titleOCTETSTRING,bodyOCTETSTRING,biblioBibliography}在这个例子中,Report是由名字类型的信息组成的,而SEQUENCE表示消息是许多数据单元构成的,前三个数据单元的类型是OCTETSTRING,而最后一个数据类型则下面的ASN.1语法表示它的意义:Bibliography::=SEQUENCE{authorOCTETSTRINGtitleOCTETSTRINGpublisherOCTETSTRINGyearOCTETSTRING}ASN.1提供了一些基本的预定义数据类型:UNIVERSAL0保留给编码规则使用UNIVERSAL1布尔类型UNIVERSAL2整型UNIVERSAL3二进制字符串类型UNIVERSAL4八进制字符串类型UNIVERSAL5空类型UNIVERSAL6对象标识符类型UNIVERSAL7对象描述符类型UNIVERSAL8外部类型和类型实例UNIVERSAL9实数类型UNIVERSAL10枚举类型UNIVERSAL11嵌入的pdv类型UNIVERSAL12UTF8字符串类型UNIVERSAL13相关对象标识符类型UNIVERSAL14-15保留给本建议的以后版本和国际标准使用UNIVERSAL16序列和类型序列UNIVERSAL17集合和类型的集合UNIVERSAL18-22,25-30字符串类型UNIVERSAL23-24时间类型UNIVERSAL31-...保留给本建议以外的类型和国际标准使用ASN.1还能够定义如下的数据结构类型:结构(SEQUENCE),列表(SEQUENCEOF),类型选择(CHOICE),等等不同体系的系统,不同编程语言之间,都存在通讯障碍。如Figure1-1a)所示极端情况下,为了保证网络中n个异体的节点能互通,我们需要为每个节点编写(n-1)个编解码程序,即需要总数为n*(n-1)个编解码程序。在b)所示极端情况下,为了保证互通,需要为每个节点编写1个编码和1个解码程序,即总数为2n个编解码程序。Figure1-1两种类型的通讯方式对于给定的记法描述,ASN.1编译器能执行并产生如Figure1-2图中虚线部分,这样我们以有限的代价就能完成相当多数量系统之间的互连。Figure1-2语法三元组:实际语法、抽象语法和传输语法(1)实际语法(ConcreteSyntax)指诸如C、ObjectiveCaml等这样实际编程语言;(2)抽象语法(AbstractSyntax)指ASN.1,是协议采用ASN.1规范描述的描述文本。描绘了与任何表示数据的编码技术无关的通用数据结构。抽象语法使得人们能够定义数据类型,并指明这些类型的值。抽象语法只描述数据的结构形式,与具体的编码格式无关,同时也不涉及这些数据结构在计算机内如何存放。(3)传输语法(TransferSyntax)指表示层交换数据的表示方法,是实际通讯系统间的码流。当数据在两个表示层实体之间传输时,这些数据的实际比特模式表示方法就是传送语法。(4)编码指用来表示数据值的完整的八位组序列。(5)编码规则从一个语法到另一个语法的映射规约。具体地说,编码规则从算法上定义了任何一组由抽象语法定义的数据值在传送语法中的表示。下图以两个端系统通过网络交换数据为例来说明上述的一些概念。运输实体所看到的数据是应用实体交下来的、根据一定的编码规则进行编码的二进制代码。应用实体看到的则是一个用户观点的数据,通常是结构化的信息,如文本文档或可显示的图象信息。用户主要关心的是数据的语义。因此应用实体必须提供数据的表示方法,使得这些数据能够转换为二进制值。也就是说,应用实体必须考虑到数据的语法。从抽象语法到传输语法,由ASN.1编译器按照编解码规则实现。Figure1-3抽象语法与传输语法其实早期的一些标准,如ASCII,它们既定义了抽象语法(比如字母A),又定义了传输语法(0x41)。ASN.1分离了这两种概念,以便可以选择一种适合要求的编解码方法。系统可以选择编码方法以使信息传送时效率很高,或者具有很高的可靠性等等。另一方面,定义好的编码规则也会很大地节约应用协议开发人员的时间,特别是当牵涉到的数据结构很复杂的时候。当使用ASN.1的项目较多时,这种节约更加明显,因为编解码程序可以只开发一次但很多应用程序都可以用它。我们可以看出,能将通信编解码设计与开发工作转嫁给ASN.1编译器完成。从而不必手工编写编解码器。一方面大量减少了缺陷引入,另一方面更是大大加快了系统开发速度(不用编写编解码器,也不用详细调试,维护代价也很小)。Figure1-4转嫁编解码器工作给ASN.1编译器讨论ASN.1就不得不先提到标准组织ISO和ITU。1.2ISO简介国际标准组织(ISO–InternationalOrganizationforStandardization)于1946年在美国成立,其负责制定众多领域的国际标准;但除电气、电子和电子工艺领域外,这些主要是IEC(InternationalElectrotechnicalCommission)负责。ISO汇集了一百多个代表其自己国家的标准委员会(称之为NB–NationalBody),ANSI(AmericanNationalStandardInstitute)代表美国,AFNOR(AssociationFrancaisedeNORmalisation)代表法国,BSI(BritishStandardInstitute)代表英联邦,等等。其它一些组织可以参加讨论,提出议案,但不能参加投票。Figure1-5ISO组织结构如Figure1-5所示,ISO共分为172个技术委员会TechnicalCommittee(TC)负责相应标准化领域。所有议题都在子委员会SubCommittees中共享,Subcommittee又分为工作组WorkingGroups(WG)。到1987年,著名的OSI标准就是TC97的成果,称之为“TelecommunicationsandInformationExchangeBetweenSystems”。在1987年,ISO和IEC两个标准化组织一致认为都应当关注信息技术InformationTechnology,因此成立了一个联合技术委员会称为JTC1。JTC1的秘书处由ANSI负责。Figure1-6JTC1组织结构示意图在ASN.1标准刚刚受到关注时,基于历史原因,ASN.1主要来自于CCITT的成果,有很多提案来自CCITT。在80年代,ISO在1990年左右成为主角前,两个委员会的确有过合作。1.3ITU简介国际电信联盟ITU(InternationalTelecommunicationUnion)总部位于日内瓦,于1947年成为联合国的专设机构,其前身为成立于1865年的国际电报联盟(InternationalTelegraphUnion)。ITU汇集了188个代表其国家的公共电信运营商和大约450个来自私有部门称之为RPOA(RegisteredPrivateOperatingAuthorit

1 / 108
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功