第二章 抽象语法表示ASN
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的宏定义
⑴模块定义
·
BEGIN
EXPORTS
IMPORTS
AssignmentList
END
其中的modulereference是模块名,可以跟随对应的对象标识符。EXPORTS构造指明该模块可以出口的部分,而IMPORTS构造指明该模块需要引用的其它类型和值。
AssignmentList部分包含模块定义的所有类型、值和宏定义。
⑵宏表示
·
BEGIN
TYPE NOTATION::=
VALUE NOTATION::=< new-type-syntax>
END
其中的macroname是宏名,必须全部大写。宏定义由类型表示(TYPE NOTATION)、值表示(VALUE NOTATION)和支持产生式(supporting-productions)3部分组成,而最后一部分是任选的。
⑶宏定义的例子 P37—38
·当用一个具体的值代替宏定义中的变量或参数时就产生了宏实例,它表示一个实际的ASN.1类型