(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf_第1页
(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf_第2页
(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf_第3页
(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf_第4页
(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf_第5页
已阅读5页,还剩54页未读 继续免费阅读

(计算机软件与理论专业论文)通用asn1应用模型研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 a s n 1 提供了丰富的数据类型,灵活的扩展机制和高效的编解码规则,适合 用来描述复杂的协议,是目前电信、多媒体信息传输、数据加密等领域描述协议 的主要手段。但是通过大量实践发现a s n 1 在大型分布式系统中表现出一些不足, 代码大量增长,开发维护成本随之不断提高。 本文对a s n 1 的应用场景进行分析,提出并实现了一种通用的a s n 1 应用模 型,改进了传统模型中的不足。通用应用模型中,用p d u 参数容器替代编译出来 的a s n 1 源代码文件,不必针对不同协议结构分别产生源代码,大大减少了代码 量。由于不需要再产生a s n 1 源代码,a s n 1 文件编译器可以被省去,以降低开 发成本。使用x m l 来描述协议中p 叫的结构,x m l 与平台和语言无关,因此使 用不同平台、不同编程语言的各个通信端可以共享一份x m l 描述。最后,本文以 一个简单的示例对基于通用应用模型的应用系统开发过程进行说明,并对运行结 果进行了分析 关键字:a s n 1d e r 通用应用模型x m lp d u 参数容器 a b s t r a c t a b s t r a c t a s n 1p r o v i d 髓al o to fd a t at y p c s ,n e x i b l e 弧t e n s i m c c h 趾i s m s ,e 砸c i e n t 曲c o d i n g 柚dd c c o d j n gn i l 龉n j st h cp r i m a r ) ra p c hf b rp m t o o o ld e s c r i p t i 缸 t e l e m ,m u l t i m e d i a 咖m 岫i c a t i o 璐,d a t a 唧t i 帆袖do t h 盯石e l 凼,a p 硼c a b l ct o d e s c r i b ec o m p l e xp i m o c o l s h o w e v e r an u m b 盯o fi n d u s t r i a l 印一i c a t i o 船i n d i c a t et h a t t h e i ce x i s tm 卸yl i m i t a t i o n sw h 曲a s n 1i sa p p l i c di nl a r g c s c a l ed i s 啊b u t e ds y s t 锄s , e0 fw h i c hi st h ec o s to fd e v d o p 柚dm a i n t 衄a n c ci n c i e a s 鼯掣t l yw i mq u 锄t i t yo f c o d e 掣o w s i nt h cu n i v e r s a la s n 1a p p l i t i m o d e l ,p d up 踟e t c fc o n t a i n e rc 碰 辄b s t i t i i t e 蕾o rs o u r c o d c sp r o d u c e db yt h ca s n 1o 啪p i l e r h e n c es y s t e m ,s0 0 d el i n 髂 c a nb c 砖d u c c dg r e a t l y s i n c ea p p l i c a t i o l 略l g c f 舱e dt op r o d u c cc o d eb y 伽p i l j n ga s n 1s y n 墩f i l e s ,d c v e l o p c 塔咖tn c c dt ob u yo rd c v e l o p 柚a s n 1 伽p i l e f a sx m l i si n d e p c n d c n to f 叩e m t i n gs y s t c m sa n dp r 0 孕锄m i n g1 柚g u a g 鼯, w e u i t t od e s c r i b e t h e 蜘1 i c t i l t eo f p d u 觚d h e t e m g c n u ss y s t c m s c 锄s h 盯c 伽e c o p yo f x m l d e s 商p t i o 船a t t l l ee n do f t h i sp a p c r as i m p l e 懿a m p l e i sp 崩跳脚t 0 s h o wh o wt 0u t h eu n i v e 酬a p p l i c a t i o nm o d e l 柚da n a l y t h cm 蛐l t k 哪o r d s :a s n 1 d e ru n h s a l a s n 1a p p l i c a t i 叽m o d d 咀一 p d up a 瑚m e t e rc 蛐协i n 盯 创新性声明 本人声明所里交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或 其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:碰! ! 垫鉴日期2 1 翌:! :竺 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生 在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业 离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。学 校有权保留送交论文的复印件,允许查阅和借阅论文 学校可以公布论文的全部 或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密的论文在 解密后遵守此规定) 本学位论文属于保密在一年解密后适用本授权书。 日期翌圣! :竺 日期丑:! :竺 蹬 名名 签签 人师本导 第一章绪论 第一章绪论 1 1 引言 随着计算机设备的快速普及与网络技术的日益发展,使得数据通讯和数据传输 在各个领域得到了广泛的应用,但是网络设备间,操作系统问,应用软件间的数 据表示却一直没有得到广泛的统一。不论是在客户机与服务器之间或是广域网、 局域网之间进行的数据传输中,不同的操作系统对同种数据类型的解释不同,单 纯的结构或文件传输就不可避免地出现数据丢失或数据出错的问题,从而给异构 系统间的通信造成了很大的障碍。因此为了使相异设备之间的通信成为可能,用 一种标准而与具体设备无关的方式来定义对象是十分必要的,同时还需要标准的 方式来编解码,使它们用于网络传输。 为了使多个制造商设备之间,不同的应用系统之间进行有效无误的数据传输, 就必须引人传送数据的语法,它是一种标准的,与具体的网络环境无关的语法格 式。删- t 组织制定的a s n 1 ( 觚t r a ds v n t 觚n o t a t i 伽o n e ) 标准【1 】,提供了丰富的 数据类型和高效多样的编解码规则,适合描述复杂的通信协议。a s n 1 定义的编码 规则( 如m ,p e r ) 1 2 】1 3 湘当于从局部语法到传送语法之间的转换规则。将a s n 1 描述的数据转换成二进制数据流,通信双方在交互信息之前,对要传输的数据进 行a s n 1 数据类型的抽象描述,按照编码规则将数据转换成字节流,接收方将接收 到的数据按照相应的解码规则转换成原始数据,由于编码规则可以保证数据的正 确解释,这样双方尽管是不同的操作系统,但只要按照相同的规则和同一种语法 描述作数据解析就可以保证数据的正确性。 a s n 1 对于大多数人来讲似乎很陌生,然而事实上它被广泛应用在我们的日常 生活中。目前北美、欧洲和日本等地使用的移动电话,都是基于础消息协议的。 t c a p 消息协议中的消息是采用a s n 1 描述的,使用了b e r 编码规则( b 勰i c e n c o d i n g r u l e s ) ,共同实现了移动电话的呼叫。可以说,在一部移动电话与另外一 部电话之间通讯时,是a s n 1 协助实现了两部话机之间的呼叫。最新制订的有关地 对空和地对地等通讯协议都是使用a s n 1 描述,并采用p e r ( p a c k c de n c o d i n g r u l e s ) 1 4 】编码规则做编码。除此之外,a s n 1 和编码规则还被联邦快递用于大量地 传输信息,还有许多大公司如h p i b m ,s u n 等,使用a s n 1 描述它们新一代打印机 打印作业管理的标准接口1 5 】。 1 2 业界主流a s n 1 应用模型 a s n 1 过去只用于撰写国际通用标准,然而近些年随着a s n 1 工具软件的出 现,它已经被用于生成应用程序编程语言代码,成为各种消息系统应用的核心。 2 通用a s n fl 应用模型研究与实现 a s n 1 作为一种通信标准和方法实现的形式多样,但是目前国内外主流的 a s n 1 工具开发商或著名的开源软件,如0 b i 哪i v cs y s t c m s ,o s sn o k a l v a ,d s e t , s n a ,都采用相同的a s n 1 应用模型。他们提供的a s n 1 开发工具主要包含两 部分;首先要有a s n 1 编译模块,用来将标准a s n 1 句法转化成应用程序实现语 言对应的源代码,另外一部分就是基本类型和构造类型的编解码a p i ,提供给使 用该工具的应用系统完成复杂协议消息结构的编解码。 以构建一个大型网络管理系统为例,网管系统的客户端和服务器端可能采用 不同的编程语言实现,运行于不同的操作系统上,从而对数据的表示方法也相异, 因此采用a s n 1 标准作为数据信息的统一表示。使用的a s n 1 工具的应用模型也 是目前业界主流的应用方式: 1 ) 首先定义客户端和服务器端之间通信协议对应的a s n 1 语法描述; 2 ) 然后用a s n 1 编译工具将语法描述文件编译成指定语言对应的源代码, 比如用a s n 1 的j 钾a 编译工具可以将a s n 1 句法编译成j a y a 类,如果是c 语言 的编译工具,则可以编译出c 语言中的h 文件和c 文件,这些类和结构本文中称 为a s n 1 源代码文件,每个协议消息对应的类或结构实现了自我编解码,其他语 言也类似; 3 ) 最后应用程序将使用这些编译出来的类或结构来承载协议消息数据,并 调用它们的编解码方法获得标准的a s n 1 比特流,发送到目的端。 1 3 本文研究目标和主要工作 上面介绍的主流应用模型在通信协议简单,协议消息种类少且消息结构基本 不变的情况下能够良好工作。但是像网管系统这样的大型的分布式系统,需要对 种类繁多的网络设备进行管理,而且网络设备的型号变化快速,新设备不断被研 制出来,导致网管系统和服务器端的通信协议需随之增加,频繁修改。通信协议 的持续增加导致应用系统消息结构和系统代码量随之不断增多,开发周期和维护 成本不断增长而运行效率却不断降低。协议的频繁更改使得所有相关的端系统必 须把应用系统消息结构全部重新编译,并替换,只要某一端没有完全替换就会导 致通信失败,给开发、调试带来很多不便,系统稳定性受到很大影响。系统使用 时间越长,这些弊端的负面影响也将成倍扩大。 鉴于应用模型表现出的上述诸多缺陷,本文将提出一种改进模型,要达到如 下目标: 1 ) 协议的消息结构不必生成对应的应用程序源代码,减少系统代码量: 2 ) 提高编解码和消息结构的数据填充自动化程度,提高系统开发效率; 3 ) 省去a s n 1 工具中的编译模块,降低工具的开发难度,省去第三方工具 第一章绪论 3 的购买; 钔开发的a s n 1 模块做到一次开发普遍适用,不同协议可以使用同一套代 码,提高代码复用。 本文做的工作: 1 ) 使用x m l 文件来描述协议消息,描述内容包括协议消息结构和a s n 1 的 编解码信息,比如数据类型,是否可选,是否有扩展标记等,用此x m l 描述代 替a s n 1 的语法描述; 用j a v a 语言设计并实现一个通用的p d u ( p m t o l d a t a u n i t ) 参数容器, 采用树形结构组织消息内的数据,该容器能适用于任何协议消息结构,装载数据, 对应用程序提供接口实现消息数据的存储,提取和编解码; 3 ) 用j 跏语言设计并实现一个结构良好,代码复用率高,容易扩展和维护 的基本数据类型d e r ( d i s t i n g i l i s h c de n c o d j n gr u l e s ) 编解码函数库。 1 4 论文各章节安排 本文剩余章节安排如下: 第二章首先介绍了a s n 1 的基本概念和发展过程,然后介绍了a s n 1 标准 的语法,最后介绍了a s n 1d e r 编码规则。 、 第三章首先分析了目前业界传统的编译器方式的a s n 1 应用模型,然后针对 传统模型的缺陷提出了通用a s n 1 应用模型的总体架构,描述了总体架构内部各 个模块的关系,最后对比了传统模型和通用模型之间结构上的异同。 第四章对a s n 1 通用模型架构做了详细设计和实现,确定了模块接口及核心 算法。先后设计了基本类型d e r 编解码库,) 咖l 数据管理器,j p c 通用p d u 参 数容器,最后举了一个简单的例子来说明基于通用a s n 1 应用模型的系统开发方 法,并分析了运行结果。 第五章对全文进行总结并展望下一步的工作。 第二章a s n 1 抽象语法和d e r 编解码规则 5 第二章a s n 1 抽象语法与d e r 编解码规则 2 1 1a s n 1 简介 2 1a s n 1 背景知识 i s o 组织为解决不同类型终端或开放系统之间应用数据信息的交换,推出了 a s n 1 ( a b s t m ds y n t 积肿t a t i 衄伽c ) ,加在a s n 名字的后面的“1 ”用来区别将来 可能产生的更高版本的抽象语法记法【6 l 。a s n 1 已经形成了一系列国际标准,被 广泛应用在通信协议的描述上,它是一种标准的对象定义语言和编码规则。它定 义了线路上的位编码规则,使得一个3 2 位的以二的补码按小端方式编码的管理站 就可以明确地与一个1 6 位的以二的反码按大端方式编码的c p u 上的代理进行通 信m 。 a s n 1 标准可分成两部分,一部分是抽象语法,一部分是传送语法。数据类 型的a s n 1 描述称为抽象语法,网络中对等实体之间通信时对用户信息的描述规 则称为传输语法。a s n 1 的编码规则定义了它的传送语法,不同的编码规则定义 不同的传送语法。为抽象语法指定一种编码规则便构成一种传输语法。在表示层 中,可用这种方法定义多种传输语法。传输语法与抽象语法之间是多对多对应关 系,即一种传输语法可用于多种抽象语法的数据传输,而一种抽象语法的数据值 也可用多种传输语法来传输。每个应用层协议中的抽象语法与一个能对其进行编 码的传输语法的组合,就构成一个表示上下文( p r c n t a t i o nc t e x t ) 。表示上下文 可以在表示连接建立时协商确定,也可以在通信过程中重新定义嘲。 在a s n 1 之前,对通信协议中传输数据的描述要说明数据在传输时的具体位 或字节的含义,就像程序员一样,在高级语言出现之前,不得不处理位和字节的 存储方式,这样在极端情况下如图2 1 ( a ) 所示,为了保证网络中n 个异构节点能 互通,我们需要为每个节点编写叫一l m 、编解码程序,即需要总数为n ( n 1 个 编解码程序,利用a s n 1 ,如图2 1 ( b ) 所示极端情况下,为了保证互通,只需要 为每个节点编写1 个编解码程序,总共n 个程序。在早期的一些标准如a s c , 它们既定义了抽象语法( 比如字母a ) ,又定义了传输语法( 0 】【4 1 ) 。a s n 1 分 离了这两种概念,以便可以选择一种适合要求的编解码方法。系统可以选择适合 应用环境的编码方法以使信息传送时效率很高,例如可以选择编解码速度快的, 也可以选择编解码压缩比高的等。另一方面,定义良好的编码规则也能很大地节 约应用协议开发人员的时间,当牵涉到的数据结构非常复杂时更是如此。当使用 a s n 1 的项目较多时,这种节约更加明显,因为编解码程序可以只开发一次但很 多应用程序都可以用它,协议设计人员业可以在一个较高的层次上描述和观察相 6 通用 s n 1 应用模型研究与实现 关的信息及其结构,而不必过分关心信息在传输时的实现细节。 图2 1 两种不同的通信模型 2 1 2a s n 1b e w d e r c e r 编码规则 目前,a s n 1 标准有许多种编码规则,但最初只有一种,即基本编码规则b e r 镐ce n c o d i n gr u l e s ) ,它是伴随a s n 1 而出现的1 9 】。 b e r 编码中存在大量的选择,规则不是很严格,从而使得对协议的一致性测 试耗费了许多资源,由于编码规则中的每种选择在实际应用环境中都有需求,因 此人们迫切需要设计新的编码规则来去掉b e r 中的大量选择,特别是对于中继系 统中与数字签名相关的应用来说,显得更为重要,1 9 9 4 年推出的规范编码规则 伍r ( c 柚o n i c a le n c o d i n gr u l e s ) 和区别编码规则d e r ( d i s t i n g u j s h c de n c o d i n gr u l 神 通过对b e r 规则特殊化满足了这些要求,它们是b e r 规则的子集,继承了b e r 中的大多数编码规则,只是在数据定义中存在多重选择域的时候,a 琅对构造类 型编码采用长度非确定形式,而d e r 采用长度确定形式,它们都生成唯一可能的 编码。使用b e r 规则的编解码器能处理c e r 和d e r 的流,反之就不能。 a m 特别适合于消息内容长,传送数据量大的应用,例如办公文档系统 ( o d a ) 。实际上如果编码器编码时没有足够的空间可用,它可以在对数据进行完 全编码之前开始发送,因为c e r 用非确定形式处理构造类型值的长度。 d e r 是为保障数据安全传送而设计的,特别适用于数字签名的应用,因此, d e r 在h i t c m c t 的电子商务领域有着广泛的应用前景。d e r 也适用于需要传输长 度均匀,短小的数据的应用。由于d e r 采用长度确定的编码形式,所以应用需要 足够的空间进行编码,但当接收方需要忽略部分位流时,这种长度确定形式的编 码又有其优点,因为每个数据片段前都有长度域( l 域) ,所以很容易确定舍弃 的字节数。 第二章a s m l 抽象语法和d 腿编解码规则 7 2 2 1a s n 1 数据类型 2 2a s n 1 抽象语法 a s n 1 的抽象语法是用来描述应用层协议p d u 及其它数据结构的文法。相比 与高级语言中复杂的数据结构,a s n 1 中的类型主要是为了数据的传输。严格地 说,a s n 1 是一种形式语言,其精确的和形式的记法使它在表示和含义中去掉了 任何可能的二义性,它提供了用嵌套和递归来对复杂数据结构进行统一表示的能 力。a s n 1 将现有的数据类型抽象描述成近二十种数据类型,一个类型就是一个 值的集合,比如布尔类型的值的集合是t r u e 和f a ls e 。一个给定的a s n 1 类 型的值是该类型集合里的一个元素。这些数据类型主要分为两大类:简单类型和 结构类型。简单类型是组成各种构造类型和复杂类型的基础。a s n 1 中定义的基 本类型和构造类型及其说明如表2 1 和表2 2 所示: 表2 1 常见a s n 1 基本类型 类型 含义 n u l 工只包含一个值n u u 。用于传送一个报告或者 作为c h o l c e 类型中某些值 b o o u e a n布尔类型,在t r u e 和邮e 中取值 d 兀e g e r全部整数( 包括正数和负数) r e a l 实数,表示浮点数 e n u h r a l e d 标识符的枚举 b r r 弧矾g比特串 o c 唧s n u n g 字节串 o b i e c r 日岍兀 f i e l 乙 一个实体的标识符,它在一个全世界范围树状 r e i a t i v e 旬i d 结构中注册 表2 2 常见a s n 1 结构类型 l 类型含义 l c h o l c e 在类型中选择( 类似c 语言中的联合体) 8 通用 s n 1 应用模型研究与实现 s e q u d q c e由不同类型的值组成的一个有序的结构 s e r 由不同类型的值组成的一个无序的结构 s e o u 眯c eo f由相同类型的值组成的一个有序的结构 s e r o f由相同类型的值组成的一个无序的结构 2 2 2a s n 1 类型定义、值定义和模块定义 a s n 1 的类型定义即自定义一种类型,语法为:新类型名 := , 其中新类型的名称是一个以大写字母开头的标识符,类型描述是基于内建类型或 在其它地方定义的类型。如: 定义一个布尔类型变量:m a r r i e d :- b o o l e a n 定义一个整型变量:a g c := 矾1 e g e r 定义一个由o ,1 组成的字符串:p i c t l 鹏:= b r r 踊t 矾g 定义一个q u e n c c 结构类型:f o m l := s e q u e n c e n 锄c p r i n t a b i e s t 血g a g ea g c , m a r i i e dm a i i i e d m a r r i a g c - c e n i f i t e p i c t i l r c0 p 1 1 0 n a l ) 可选类型定义:p a y m e n t m e t l l o d := 傩o l c e c h e c kc h e c k - n u m b e l 口c d i t r ds e q u e n c b n u m b 盯c a r d - n 啪b t 鼠 懿p i r y - d a t c d a t e 。 ) 在s e q u e n c e 和s e t 等定义中,最后一个成员结尾没有逗号。为了接收方 能正确解码,发送方为每个值的类型附加一个数,称为切喀,在描述中以“【】”标 识。缺省情况下,编码器会使用u n i v e r s a l 的t a g 。很多时候,缺省情况不能消除 所有的模糊性,有必要明确指出各成员的t a g ,例如: 第二章a s n 1 抽象语法和d e r 编解码规则 9 c i f d i n a t 嚣:= s e r x 【1 】灯卫g e k y 【2 】n 町e g e z 【3 】m e g e ro 阿o n a l a s n 1 允许递归式的类型赋值( a s s i 伊m e n t ) ,但我们应当保证其中包含至 少一个非递归的值,因为编码规则无法处理无限的值。当然,绝大多数结构类型 的成员最终都可以分解成简单类型。如上面定义的傩o i s e 类型的 p a y m 锄t - m e t h o d 结构中又递归定义了一个名为c r c d i t - r d 的s e q u e n c e 结构类 型。 应用系统因为版本升级,对使用的协议可能会有所更改,a s n 1 的描述也要 作对应修改,在新的描述中,出现新的成员被加入到s e q u 】巳n c e 、s e t 或者 c h o l c e 或者在上述类型基础上添加约束而衍生的子类型时,两个连接的机器( 特 别是在开放网络中) 不一定使用的是相同版本描述而生成的编解码器。为了防止 一方因收到过多或者过少数据而出现错误,a s n 1 中用符号“”来标记可能以 后是其它类型的地方。这样即使是旧的编解码器就不会因为描述扩充而导致编解 码错误。如: t y p c :- s e q u e n c e c o m p o n e m l 叮e r g e r m p o n c n t 2b o o 【且气n , - v e r s i 彻1 以后新的版本中,描述可能为: 聊c := s e q u e n c e 湖p e n t l 盯e r g e r c o m p i o n 朋t 2 b o o l e a n , 【c 0 i n p 0 n t 3 砒i 叫】, 一v e r s i 咖2 新加入的类型成员要嵌套在“【】”中。 a s n 1 的值定义即给某类型的变量赋值,语法为: ( 该值的类 1 0 通用a s n 1 应用模型研究与实现 型 := ,其中: 是以小写字母开头的标识符, 可以是一个类型的名字,也可以是类型描述, 是基于整数、字符 串、标识符的组合如: u n t e rl 0 n e 驴蛐m b 盯:= 4 5 s e x t l l p l cl o t t e r y - d r 8 w :- 7 1 2 ,2 3 ,3 1 ,3 3 ,4 1 ) p a i r ( 加r d i n a t e s := x 5 ,y - 3 s c h o i a 脏墙:- d e s r t :”p m 丘t 啪u 瞎。 d a t cd a t c :- ”2 0 舢2 4 。 在a s n 1 的应用中,绝大多数的值都是动态获得的,但是可以指定某些值特别是 在约束型子类型中,提高描述的可读性。如: u p p e 山u n d 哪g e r := 1 2 h t e r v a l := 玳1 r i 弼e r ( o 。u p p c r 舶u n d ) d e f a u l t v a l u eh l t e n ,a l := o p a i r := s e q u e n 晓 , 6 i s t 【0 m t e a ld e f a u l t d e f a u l t v a l u c s c o 咖d 【1 】i n t e r v a ld e f a u l t d e f a u l t - v a l ) 一般协议由一个或者多个模块组成,模块用来收集数据结构定义。x 6 8 0 标 准中的模块定义语法为: ( 模块名字 d e f 玳m 0 n s 缺省t a 眇:- b e g i n e ) 口o i u s i m p o r l r s e n d 模块名字必须以大写字母开头。模块可以一种。全局指针”i v c 体a lp o i n t c r ) 的 方式来引用,称为对象标识符( o b j e di d 跖t i f i c r ) ,用花括号标识在名字之后。 如: m 0 d u l e 2 i s 0m e m b c r _ b o d y ( 2 ) f ( 2 5 0 ) t y p e 删g ( 1 ) f l ( 1 6 ) 勰n 1 一b o o k ( 9 ) c h a p t c r 5 ( 0 ) m o d u l e 2 ( 1 ) ) d e f i n r n 0 n sa u t o “哪ct a g s := b e g 叮 e x p o i h st y p e 2 ; i m p o i u 瞎t y p c l ,v a l u ef r o mm 0 d u l e l i m 咖b e r - b o d y ( 2 ) 第二章a s n 1 抽象语法和d e r 编解码规则 1 l f ( 2 5 0 ) t y p c _ 0 r g ( 1 ) f t ( 1 6 ) 啪1 b 峨9 ) c h a p t e r 5 日0 ) m o d u l e l ( o ) ; t y p e 2 := s e q u e n c eo f a l o i c h o i c c := c h o i c e a 刑1 1 g e r ( 0 。v a l u e ) , b t y p c l e n d 如果a u t o m 棚ct a g s 或者缺省,则说明不关注模块的t a g 而交给编译器 自己自动处理。如果需指明具体的t a g 值,则需要用1 】”来标识。此外t a g 的模 式还可以是e ,u c r r t a g s 和i m p u c r r t a g s 。还可以使用e ) m n s m i i y i m p u e d 来使模块中所有s e q u e n c e 、s e t 、c h o i c e 和e n u m e i 认d 类型 可扩展。条目i h l p o i 汀s 和e ) 口o i u s ( 不是必须的) 定义模块的接口。其中 i m p o r t s 声明在其它模块定义但在本模块会用到的类型或者值;e ) 四0 r t 声明 在本模块之外可以访问的类型或者值。 2 2 3 常见子类型约束 最简单的子类型约束就是单值约束,即把一个类型限制为一个值,以圆括号 将该值列在类型声明之后即可,如: t w o :冀叮e g e r ( 2 ) d a y := e n u m e 凡气t e d m d a y ( 0 ) ,t i l c s d a y ( 1 ) ,w e d n e s d a y ( 2 ) ,t l l u r s d a y ( 3 ) ,抽d a y ( 4 ) ,轴t l l r d a y ( 5 ) , s u n d a y ( 6 ) w c d m s d a y := d a y ( w c d n e s d a y ) 如果该值的选择可以是多个中的一个,则可以用“l ”将被选值列出,如: w e e k e l l d :_ d a y 细t l l r d a y i s 恤d a y ) p u s h b u n o n d i a l := i a 5 s t r i l l g ( ”o ”r 1 ”r 2 ”i ”3 ”i ”4 ”i ”5 ”r 6 ”| 1 1 7 ”r 8 ”r 9 ”r ”i ”撑”) 。 对于数学中的整数和实数,可以用区间来约束。在a s n 1 中使用。”来表 示区间,“ ”用来限定边界,如; n u m b 盱:= d n e g e r f r o m 3 t o l 5 := n u i i 慨r ( 3 。1 5 ) 通用a s n 1 应用模型研究与实现 i r o m 3 既d u d c d t b l 5 懿d u d c d := n 岫b c r ( 3 。1 r i 每个域都是一系列八位组,对于结构类型的数据,其中v 还可以是1 r i 三元组1 1 0 j ,如图2 2 所示。b e r 传输语法是基于八位组( 为了避免 不同系统上的混淆,没有采用b y t e 为单位) 的自定界编码,因为其中l 明确界定 了八位组的长度。b e r 是大端编码的,其八位组的高位比特在左手边。 图2 2a s n 1b e r 编码规则字节组格式 三元组中的1 a g 部分为类型标识符,用来说明每个收到的数据的类型,我们 就对a s n 1 中定义的各数据类型进行编号并且要使每种类型的t a g 是唯一的。1 a g 是一个八位组,根据玎u - t 的x 6 9 0 标准定义,各个位的含义如图2 3 所示: 比特位 87654321 图2 3 t a g 字节各个b i t 位具体含义 第二章a s n 1 抽象语法和d 职编解码规则 其中t a g 朋m b 盱是分配给某种数据类型的标签值,且是唯一的。t a g 字节中的低 5 位表示t a g 曲m b c r 。第六位标识了该数据是简单类型还是结构类型,若是简单 类型则第六位是o ,否则是1 。高两位表示使用的标签类型,t a 韶徊gd a 鹞有四种 如表2 3 所示。这种方式实际提供了不同的1 a g 空间。在一个上下文中,如果 t a 黯i n ga a 鹞不同,则相同1 a gn 啪b e r 的两个数据的类型可能也是不同的。 表2 3 四种1 矩d a 镕的定义 t a 路i n g a a b n 8 b i t 7 u n i 、门巳r s a l00 c 慨t - s p e c i 6 c ol a p p u c 1 1 c i n1 0 p r a ,i el1 u 1 叮e r s a l 的t a g 是a s n 1 标准定义的,在描述中不能修改,列举部分常 见类型的t a g n 啪b c r 如表2 4 下: 表2 4 常见类型的t a 黯j n g d a 镕值 1 a g n m b c r 类型 t a g m m b c r 类型 0b e r 保留9r e a l 1b o o i e a n1 0e n u m 匝r a i e d 2d 兀e g e r1 2 i r r f 8 s t r i n g 3b r r s 砌g1 6 s e o u e n c e ( o f ) 4o c 唧s 1 1 u n g 1 7 s e t ( o f ) 5n u i 工1 8 n u m c r i c s t r i n g 60 b j e c ri d e l 订1 l 强r2 2 l a 5 s t r i n g c o n t t - s p c c i f i c 的t a g 是对s e q u e n c e 、s e t 和c h o i c e 及其成员使用的, 可以在描述中自己定义,只要不产生歧义,相同数值可以在不同结构中反复 使用。如: a - p o 锚i b l e t y p c := s e t i i l t e g e r1 0 】c h o i c e a 【0 】帆g 正i l b f 1 】矾t e g e r , b 0 0 l e 翘【1 】c h o i c e 1 4 通用a s n 1 应用模型研究与实现 a b 【o 】b o o u 认n , 【1 1b 0 0 i e a n ) a p p u c 枷o n 的t a g 是为了把应用中分散的但是经常使用的类型作统一的 定义,在a p p u c a n o n 作用域内,其t a g 也是唯一的。如: o r d e f - 帅m b c f := 【a p p u 伽o n0 】n u m e r i c s t r i i i g ( s i z e ( 1 2 ) ) 但是因为使用i m p o r l r s 等方式下,很难保证唯一性,所以这种t a g 类已经不 推荐使用了。 p r a t e 的t a g 是用来定义某些特殊应用或企业中自己使用的类别,这种 1 a g 也已经不再推荐使用了。 在一个应用中t a g 对于区分类型十分有用,t a g 通常也用于在一个结构类型中 区分组件类型。例如,s e t 或s e q u e n c e 类型的可选组件一般都给予不同的 咖t e x t - s p c c i f i c 标签以避免混淆。有两种方法可以标记一个类型:隐式( i m p l i c m y ) 和显式( e x p l i c i t l y ) 。 隐式标签类型是在其它类型基础上通过改变其下层类型的标签生成的。隐式 标签使用a s n 1 关键词【d a 鹞眦m b 叫l m p u c r r 表示。显式标签是在其它类型基 础上通过在其下层类型的标签之外添加一个外层标签生成的。从效果上看,显式 标签类型是包含一个组件的结构类型,该组件即下层类型。显式标签由a s n 1 关 键词【d a 鹞加m b c r 】e ,u c r r 表示。只有关键词【d a 辐仰m b c r 】与使用显式标签相 同,除非该模块的a s n 1 类型默认定义为隐式标签。 从编码的角度看,隐式标签类型可视为与下层类型相同,除非标签不同。显 式标签类型可视为有一个组件的结构类型,该组件即为下层类型。隐式标签可以 使编码较短,但是如果下层类型是不确定的,显式标签必须避免含糊不清( 例如下 层类型是c h o i c e 或a n y l 。 2 3 2 长度字节组的编码规则 b e r 编码中k n g c l l 表示v a l u c 部分所占八位组的个数,分两大类:定长方式 ( d e f i n 沁f o m ) 和不定长方式( h d e f i n i t ef o 瑚) ,d e r 编码规定所有值都必须 是定长方式。在定长方式中,按照k n 舀h 所占的八位组是一个或多个分为短型和 长型两种,只占一个八位组的称为短型,超过一个八位组的称长型。短型方式的 字节组最高位必须为o ,其余7 位表示内容长度,如图2 4 所示,因此它只能表示 内容字节数在1 2 7 以内的消息。 长型方式下l c n g t h 字节组由两部分组成,一个初始八位组和一个或多个后继 第二章a s n 1 抽象语法和d e r 编解码规则 八位组,根据删t 的x 6 9 0 标准,初始八位组必须遵守以下规则: 最高位第8 位必须为1 ; 其余的7 位代表的无符号整数表示h g t l l 部分后继八位组的个数; 初始八位组的全一形式:1 1 1 11 1 1 1 2 被保留作扩展,不能使用。 内容长度 - - - - - - - - - - - 斗 e 匡至互卫 k n g i h 八位组长度 - - - - - - - - + 匹立互卫 内容长度 - - - - - - - - - - - - - - - - - - - - - - - - - - - i 圈圈 图2 4 k n g i h 部分编码规则 2 3 3 常见类型的d e r 编码 b o o u 强n 类型只有两个值,t r u e 或f _ 址s e ,用十进制的o 表示m e , b e r 规定只要非零数值都可以表示t r u e ,但d e r 规定用2 5 5 表示t r u e ,编码 后得到如图2 5 所示比特串: tlv 觚e 编码: 圆圆回 tlv 陬编码臣亟口臣亟口回 图2 5b o o u 执n 类型数据的编码 空类型只有一个值n u u ,。作为一种结果,空类型常用来表示传输报告和响 应的典型情况,如a c k :- m i j ,它也在时间信息中使用,表示传送时间没有赋 值,还可以表示链表结束时候节点的空指针空类型的内容八位组为空,即编码 后只有t 和l 两个八位组,如图2 6 所示: ti ,v n u u ,编码: 回回口 图2 - 6 n u l l 类型数据的编码 玳t e g e r 类型,可以是正整数也可以是负整数,取值范围在协议中没有界 定。所以必须由编解码器提前确定好整数的范围,分配必要的内存空间来处理。 通用 s n 1 应用模型研究与实现 编、解码两个过程分正数、负数两种情况来讨论。编码过程: 对于正数,如果最高比特位为o 则直接编码;如果为1 ,则在最高比特位之前 增加一个全0 的八位组; 对于负数,先取绝对值,再取反,最后加l 。 基于上述规则,整数编码示例如图2 7 所示: tlv 7 2 编码: 1 2 8 编码: 1 2 8 编码: 围困回 回回囤 回回叵亟圃 图2 7 矾1 e g e r 类型数据的编码 解码为编码的逆过程,过程类似。 e n u m 即衄e d 类型参照整数值的规则编码,它和矾t e g e r 类型的区别在 于: 取值是受限制的,没有列出的数值不能使用; 数值是不能被操作,只能用于编码; 不用明确指定数值,a s n 1 可以自动计算相应的数值( 从0 开始) ; 可以使用扩展,保证同新版本的编码兼容; 是数值关联( 显式或隐式) 到标识符,而n 盯e g e r 中则是标识符显式 关联到数值。 按照a s n 1 的定义,b r rs t r g 长度可以为o ,也可以非常长。它可以是 原始的比特流形式,也可以是布尔向量模型。比特流形式: p i d e c i m a l sb 玎s t r g := 啪1 0 0 1 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1 b p i d e c i m a l sb i ts t r i n g := 。2 4 3 f 6 a 8 8 8 5 a 3 0 8 d 3 1 3 1 9 8 a 2 e 0 3 7 0 h b e r 编码规则规定b i t s t r 玳g 可以用p r i r n i t i v c 方式编码或者c 0 璐t m c t c d 方式编 码,但是d e r 规定只能采用采用p r i m i t i v e 方式,b s 1 限玳g 的内容八位组分成 两部分:初始字节和后继字节,第一个八位组是初始字节,标识出最后一个字节 的填充字节个数,后继字节是b 丌s t r 矾g 的实际内容。d e r 方式对 1 0 1 1 0 1 1 1 0 1 0 1 1 t b 的编码规则如图2 8 所示: 第二章a s n i 抽象语法和d e r 编解码规则 b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论