第2章 抽象语法表示 ASN.1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASN.1定义的通用类型
• 简单类型:由单一成分构成的原子类型
• 构造类型:由两种或两种以上成分构成的 类型 • 标签类型:由已知类型定义的新类型 • 其他类型:CHOICE和ANY
ASN.1定义类型的方法
• <新类型的名字> ::= <类型描述>
– <新类型的名字>是一个以大写字母开头的标识 符; – <类型描述>是基于内建类型或在其它地方定义 的类型。
为什么要这么做?
• 应为不同的系统,数据表达方式各不相同
端系统A 用户
端系统B 用户
用户表示映像 本地存储 本地映像 应用实体 抽象语法 ASN.1
用户表示映像 本地存储 应用实体 本地映像
编码规则
编码规则
表示实体
传输语法 BER
表示实体
图2.1 关于信息表示的通信系统模型
信息表示的通信系统模型
• 如:
Married ::= BOOLEAN Age ::= INTEGER Picture ::= BIT STRING
ASN.1值定义的方法
• <新的值的名字> <该值的类型> ::= <值描述>
– <新的值的名字>是以小写字母开头的标识符; – <该值的类型>可以是一个类型的名字,也可以是类 型描述; – <值描述>是基于整数、字符串、标识符的组合。 –
• 如: counter Lottery-number ::= 45 sextuple Lottery-draw ::= { 7, 12, 23, 31, 33, 41 } pair Coordinates ::= { x 5, y -3 } son-choice Afters ::= dessert:"profiterolles" date Date ::= "20150509"
ASN.1的基本概念
• 作为一种形式语言,ASN.1有严格的BNF定 义。 • 解释ASN.1基本概念 • 给出一个抽象数据类型的例子。
ASN.1的文本约定
• Lexical Conventions 1. 书写的布局是无效的,多个空格和空行等效于一个空 格 2. 用于表示值和字段的标识符、类型指针(类型名)和 模块名由大小写字母、数字和短线(减号)组成 3. 标识符以小写字母开头 4. 类型指针和模块名以大写字母开头 5. ASN.1定义的内部类型全部由大写字母表示 6. 关键字全部用大写字母表示 7. 注释以两个短线(减号)开始,以两个短线或行尾结 束
• 时序
– 对事件实现顺序的详细说明
ASN.1的作用
• BNF:Backus-Naur Form • 提供统一的网络数据表示 • 用来定义应用数据的抽象语法和应用层协 议数据单元的结构 • 其中的BER(基本编码规则)部分用来把应 用数据变换成比特串
抽象语法
• 类似于通常程序设计语言定义的抽象数据 类型
• 这一组可以叫做基本类型,它们的值已经 在表2.1中列出了。
枚举类型
• 枚举类型ENUMERATED是一个整数的表,每 一个整数有一个名字。 • 与此类似的是,对于某些整数类型的值也 可以定义一个名字,但这两种类型是有区 别的。 • 对整数可以进行算术运算,但对枚举类型 却不能进行任何算术运算, • 枚举类型的值只是用整数表示的一个符号, 而不具有整数的性质。
简单类型的第二组
• 包括各种字符串类型,标签为UNIVERSAL 18~22和UNIVERSAL 25~27 • 这些类型都可以看作是OCTET STRING类型的 子集, • 都是采纳其他标准的类型。
简单类型的第三组
• 包括OBJECT IDENTIFIER和Object Descriptor两种 类型。 • 对象类型泛指网络中传输的任何信息对象 • 例如标准文档、抽象语法和传输语法、数据结 构和管理对象等都可以归入信息对象范畴。 • OBJECT IDENTIFIER类型的值是一个对象标识符, 由一个整数序列组成,它惟一地标识一个对象。 • 对象描述符(Object Descriptor)则以人工可读的 形式描述信息对象的语义。
简单类型
• 表2-1中除UNIVERSAL 16和UNIVERSAL 17之 外的都是简单类型 • 可以直接定义它们的值的集合,可以把这 些类型作为原子类型构造新的数据类型
简单类型的第一组
• 简单类型分为4组。 • 第一组包括BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和 ENUMERATED等
定义枚举类型和定义整数类型的例 子
• EthernetAdapterStatus::=
ENUMERATED{normal(0),
offline(2), failed(3)}
degraded(1),
• EthernetNumberCollisionsRange::=
INTEGER{minimum(0), maximum(1000)}
第二章 抽象语法表示ASN.1
钱松荣 复旦大学
ASN的中文含义
• • • • 英文:Abstract Syntax Notation ISO 8824 ASN.1 ISO 8825 BER ITU X.208
网络协议的基本元素
• 语法
– 通信数据的结构、格式、编码等
• 语义
– 对具体事件应发出何种控制信息,完成何种动 作以及做出何种应答
• 表示层的功能是提供统一的网络数据表示。 • 在互相通信的端系统中至少有一个应用实体(例如FTP、 TELNET、SNMP等)和一个表示实体(即ASN.1)。 • 表示实体定义了应用数据的抽象语法,这种抽象语法类 似于通常程序设计语言定义的抽象数据类型。 • 表示实体则对应用层数据进行编码,将其转换成二进制 的比特串,例如把十进制数变成二进制数、把字符变成 ASCII码等。 • 应用协议按照预先定义的抽象语法构造协议数据单元, 用于和对等系统的应用实体交换信息。 • 比特串由下面的传输实体在网络中传送。把抽象数据变 换成比特串的编码规则叫做传输语法。 • 在各个端系统内部,应用数据被映像成本地的特殊形式, 存储在磁盘上或显示在用户终端上
传输语法
• 表示实体则对应用层数据进行编码,将其 转换成二进制的比特串,例如把十进制数 变成二进制数、把字符变成ASCII码等。 • 应用协议按照预先定义的抽象语法构造协 议数据单元,用于和对等系统的应用实体 交换信息。 • 比特串由下面的传输实体在网络中传送。 把抽象数据变换成比特串的编码规则叫做 传输语法。
பைடு நூலகம்OOLEAN类型
• • • • • 是两个值的集合:TRUE,FALSE。如下: RoundResult ::= BOOLEAN ok RoundResult ::= TRUE ko RoundResult ::= FALSE 该类型的UNIVERSAL Tag值为1。
NULL类型
• 空类型,只有一个值NULL。作为一种结果,空类型是传输报告 和响应的典型情况。 • Ack ::= NULL • 该类型的UNIVERSAL Tag值为5。 • 它经常在时间信息中使用,表示传送时间没有赋值,如: • Clock ::= CHOICE • { • time UTCTime, • out-of-order NULL • } • 当时钟电池没有电时,值为: • battery-down Clock ::= out-of-order:NULL
INTEGER类型
• UNIVERSAL的Tag值为2。 • 整数可以是正整数也可以是负整数,取值范围在协议中没有界 定。所以必须由编解码器提前确定好整数的范围,分配必要的 内存空间来处理。可以通过在描述中增加一个值声明来判断:
类 型 BOOLEAN INTEGER BIT STRING OCTET STRING NULL OBJECT IDENTIFIER Object Descriptor EXTERNAL REAL ENUM ERATED 保留
值 集 合 TRUE, FALSE 正数、负数和零 0 个或多个比特组成的序列 0 个或多个字节组成的序列 空类型 对象标识符 对象描述符 外部文件定义的类型 所有实数 整数值的表,每个整数有一个名字 为 ISO 8824 保留
抽象数据类型的标签
• 每个抽象数据类型都有一个标签(Tag) • 标签有类型和值,数据类型是由标签的类 型和值惟一决定的 • 标签的类型
– 通用UNIVERSAL:ASN.1中定义的标准类型 – 应用APPLICATION:某个具体应用定义的类型 – 上下文专用CONTEXT:在文本的一定范围中适 用的 – 私有PRIVATE:用户定义的类型
表2.1 ASN.1定义的通用类型
UNIVERSAL 16 UNIVERSAL 17 UNIVERSAL 18 UNIVERSAL 19 UNIVERSAL 20 UNIVERSAL 21 UNIVERSAL 22 UNIVERSAL 23 UNIVERSAL 24 UNIVERSAL 25 UNIVERSAL 26 UNIVERSAL 27 UNIVERSAL 28 以后 SEQUENCE, SEQUENCE OF SET, SET OF NumericString PrintableString TeletexString VideotexString IA5String UTCTime GeneralizedTime GraphicString VisibleString GeneralString 保留 序列 集合 数字 0~9 和空格 可打印字符串 由 CCITT T.61 建议定义的字符集 由 CCITT T.100 和 T.101 建议定义的字符集 国际标准字符集 5(相当于 ASCII 码) 时间 时间 由 ISO 8824 定义的字符集 由 ISO 646 定义的字符集 通用字符集 为 ISO 8824 保留
简单类型的第四组
• 包含4种类型:
– NULL是空类型,它没有值,只占用结构中的一个位置,该位 置可能出现或不出现数据。 – EXTERNAL是外部类型,即标准之外的文档定义的类型。 – UTCTime: (世界通用时)分别用两位数字表示年、月和日(即 YYMMDD),然后是时、分和秒(即hhmmss),最后可以说明 是否为本地时间 – GeneralizedTime:用4位数字表示年,用两位数字表示月和 日,最后也可以说明是否为本地时间。 – 值20000721182053.7是GeneralizedTime类型的一个值,表示 2000年7月21日,当地时间18点20分53.7秒。 – 值20000721182053.7Z表示同样的时间,但是加了符号Z,则 表示UTC时间。 – 如果写为20000721182053.7+0800则除了表示同样的当地时 间外,还说明了加8小时可以得到UTC时间。
抽象语法和传输语法
• 抽象语法是独立于任何编码技术的,只与应用 有关。 • 抽象语法要能满足应用的需要,能够定义应用 需要的数据类型和表示这些类型的值。 • ASN.1是根据当前网络应用的需求制定的标准 (CCITT X.208和ISO 8824),是抽象语法的一种。 • 对应一种抽象语法可以选择不止一种传输语法 (编码规则)。 • 对传输语法的基本要求:支持对应的抽象语法, 另外还可以有其他一些属性,例如支持数据加 密或压缩,或者两者都支持。
NULL类型(续)
• • • • • • • • • • • • • • • NULL也可以用在表示链表结束的空接点,如: LinkedList ::= SEQUENCE { data Data, next CHOICE { linked-list LinkedList, end NULL } } 当然,可以使用SEQUENCE OF来达到类似目的: LinkedList ::= SEQUENCE OF Data { … }
表2.1 ASN.1定义的通用类型
标 签 UNIVERSAL 1 UNIVERSAL 2 UNIVERSAL 3 UNIVERSAL 4 UNIVERSAL 5 UNIVERSAL 6 UNIVERSAL 7 UNIVERSAL 8 UNIVERSAL 9 UNIVERSAL 10 UNIVERSAL 11~15