第二章 抽象语法表示ASN

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章抽象语法表示ASN.1

抽象愈发表示ASN.1是一种形式语言

1.网络数据表示

●表示层的功能是提供统一的网络数据表示。

●在互联通信的端系统中至少有一个应用实体(FTP,TELNET,SNMP)和一个表示实体

(ASN.1)。

●应用实体:应用实体定义了应用数据的抽象语法;应用协议按照预先定义的抽象语法构

造协议数据单元,用于和对等系统的应用实体交换信息(FTP、TELNET,SNMP等)。

●表示实体:表示实体对应用层数据进行编码,变成二进制的比特串(ASN.1)。

2.ASN.1的基本概念

⑴抽象数据类型

●在ASN.1中,每一个数据类型都有一个标签(tag),标签有类型和值,数据类型是由标

签的类型和值唯一决定的。

●各种标签的用法

·通用标签:用关键字UNIVERSAL表示,带有这种标签的数据类型是由标准定义的,适用于任何应用。

·应用标签:用关键字APPLICATION表示,是由某个具体应用定义的类型。

·上下文专用标签:这种标签在本文的一定范围(例如,一个结构)中适用。

·私有标签:用关键字PRIVATE表示,这是用户定义的标签。

●数据类型:

·简单类型:由单一成分构成的原子类型。

·构造类型:由两种以上成分构成的构造类型。

·标签类型:由已知类型定义的新类型。

·其它类型:包括CHOICE和ANY两种类型。

●ASN.1定义的通用类型图 P25

●简单类型:

·第一组:BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和EMUNERATED等。

这一组可以叫做基本类型。

·对整数可以进行算数运算,但对枚举类型却不能进行任何算数运算。

·第二种包括各种字符串类型,标签为UNIVERSAL18-22和UNIVERSAL25-27,这些类型都可以看做是OCTET STRING类型的子集,它们都是采纳其它标准的类型。

·第三组包括OBJECT IDENTIFIER和Object Descriptor两种类型。OBJECT IDENTIFIER类型的值是一个对象标识符,由一个整数序列组成,它唯一地标识一个对象。对象描述符(Object Descriptor)则以人工可读的形式描述信息对象的语义。

·第四组包含四种类型。NULL是空类型,它没有值,只占用结构中的一个位置,该位置可能出现或不出现数据。EXTERNAL是外部类型,即标准之外的文档定义的类型。

UTCTime和GeneralizedTime是两种有关的时间的类型,其区别是表示时间的形式不同。

●构造类型:

构造类型有序列和集合两种,分别用SEQUENCE和SEQUENCE OF表示不同类型和相同类型元素的序列,分别用SET和SET OF表示不同类型和相同类型元素的集合。

具体分析只能见书。

●标签类型

·在通用类型的基础上加一个标签

·两种情况需要给一个现有的类型加标签,P27—28

●其他类型

CHOICE和ANY是两个没有标签的类型。

⑵子类型

●构造子类型的方法

·单个值:列出子类型可取的各个值。

·包含子类型:这里要用到关键字INCLUDES,说明定义的类型包含了已有类型的所有值。·值区间:这种方法只能用于整数和实数类型,指出子类型可取值的区间。

·可用字符:这种方法只能用于字符串类型,限制可使用的字符集。

·限制大小:对五种类型数据限制其大小,限制比特串、字节串或字符串的长度,限制构成序列或集合的元素个数。

·内部子类型:可用于序列、集合和CHOICE类型。

⑶数据结构的例子。P31—32

3.基本编码规则

⑴简单编码

·基本编码规则的结构,用TLV规则表示简单类型的方法。图P32 详见P32—34

⑵字段扩充

·有两种字段需要扩充,一是当标签值大于30时类型字节需要扩充;二是当值部分大于一个字节的表示范围时长度字节需要扩充。对标签值的扩充方法如下:我们用五位表示0-30的编码,当标签值大于等于31时这位置全一,作为转义符,实际的标签值编码表示在后续字节中。后续字节的左边第一位表示是否为最后一个扩充字节,只有最后一个扩充字节的左边第一位置0,其余扩充字节的左边第一位置1.这样每个扩充字节只用了7位表示标签值的编码可表示为下面形式:

X X X0000

…………. 表示标签值0-30

X X X11110

X X X11111 用后续字节表示标签值

对长度字节的扩充方法是:小于127的数用长度字节的右边7位表示,最左边的一位置

0.大于等于127的数用后续若干字节表示,原来的长度字节第一位置1,其余7位指明

后续用于表示长度的字节数。见p34

4.ASN.1的宏定义

⑴模块定义

·DEFINITIONS::=

BEGIN

EXPORTS

IMPORTS

AssignmentList

END

其中的modulereference是模块名,可以跟随对应的对象标识符。EXPORTS构造指明该模块可以出口的部分,而IMPORTS构造指明该模块需要引用的其它类型和值。

AssignmentList部分包含模块定义的所有类型、值和宏定义。

⑵宏表示

·MACRO::=

BEGIN

TYPE NOTATION::=

VALUE NOTATION::=< new-type-syntax>

END

其中的macroname是宏名,必须全部大写。宏定义由类型表示(TYPE NOTATION)、值表示(VALUE NOTATION)和支持产生式(supporting-productions)3部分组成,而最后一部分是任选的。

⑶宏定义的例子 P37—38

·当用一个具体的值代替宏定义中的变量或参数时就产生了宏实例,它表示一个实际的ASN.1类型

相关文档
最新文档