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

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

◦ (7)OBJECT IDENTIFIER,对象标识符,从对象树派生 出的一系列点分数字串的形式,用来唯一标识对象。 在ASN.1中对象集合按照树形结构组织,树的每个分支被 赋予一个整数标识。 对象标识符是从根节点开始到对象节点路径上边标识的 顺序连接,它是对象的唯一标识。
例如: internet OBJECT INDETIFIER ::={iso(1)org(3)dod(6)1}
图2-1 关于信息表示的通信系统模型

实际语法(Concrete Syntax ):
本地的,并且定义本地系统的数据表示方法。

抽象语法(Abstract Syntax ) :
定义了数据的常用结构(包括不同的数据类型),独立于任 何编码技术的,只与应用有关。

传输语法(Transfer Syntax):
<新的值的名字> <该值的类型> ::= <值描述>
◦ ◦ ◦ ◦ 其中: <新的值的名字>是以小写字母开头的标识符; <该值的类型>可以是一个类型的名字,也可以是类型描述; <值描述>是基于整数、字符串、标识符的组合。
如: Married ::= BOOLEAN Age ::= INTEGER Picture ::= BIT STRING married Married=FALSE age Age ::= 20 pitcure Picture ::=„01101‟B
合法的: INTEGER v1515 No-final-dash MY-CLASS 不合法的: Final-dashdouble-under score 1515 3M

ASN.1的文本约定
◦ (3)关键字一般都是全部大写的,除了一些字符串类型,如 PrintableString,UTF8String,等,因为这些都是由原类 型OCTET STRING衍生出来的。 ◦ (4)在标识符中,只有类型和模块名字是以大写字母开头的 ,其它标识符都是以小写字母开头的。 ◦ (5)注释以一对短线(--)开始,以一对短线或行尾结束。
标识符 类型名 值

1.简单类型
◦ (1)INTERGER:ASN.1中没有限制整数的位数,即它 可以是任意大小的整数。 例子: ColorType ::=INTEGER colorA ColorType ::=1 这里说明了一个ColorType 类型的变量colorA ,并将 值赋为1。

1.简单类型
名字形式:iso.org.dod.1 数字形式:1.3.6.1
◦ (8)NULL,空值类型,它仅包含一个值—NULL,主 要用于位置的填充。如果某个时刻无法得知数据的准确 值,简单的方法就是将这一数据定义为NULL类型。还 可以用NULL表示序列中可能缺省的某个元素。
2.构造类型 构造类型有序列和集合两种:
序列类型
序列类型的一个值

2.构造类型
◦ (1)SEQUENCE,元素类型标识符后可以跟如下3
个关键字。
OPTIONAL:元素项可选。
DEFAULT:具有默认值。
COMPONENTS OF表示它包含了给定序列中的所有组 成元素。

例2.6 AirlineFlight ::=SEQUENCE { airline IA5STRING, flight IA5STRING, seats SEQUENCE { maximum INTEGER, occupied INTEGER, vacant INTEGER, }, airport SEQUENCE { origin IA5STRING, stop[0] IA5STRING OPTIONAL, stop[1] IA5STRING OPTIONAL, destination IA5STRING

SEQUENCE 序列 (元素有序)
类似:C语言中的结构体
SEQUENCE OF(元素类型必须相同)
类似:C语言中的数组
SET 集合 (元素无序) SET OF(元素类型必须相同)

2.构造类型
◦ (1)SEQUENCE,序列类型,是包含0个或多个组成元 素的有序列表。 每个元素由元素名和元素类型组成,元素类型可以是 简单类型,也可以是定义的其他构造类型。

抽象语法表示ASN.1
◦ Abstract Syntax Notation(ASN.1)是一种形式语言 ◦ 提供统一的网络数据表示,用于定义应用数据的抽象语 法和应用协议数据单元的结构。 ◦ OSI或SNMP管理信息库,都是用ASN.1定义的。

基本编码规则BER
◦ Basic Encoding Rule(BER)是一种编码规则 ◦ 用ASN.1定义的应用数据在传送过程中按照BER变换成 比特串。

在ASN.1中,每一个数据类型都有一个标签(tag) 标签有类型和值,数据类型由标签的类型和值唯 一确定。
标签(tag) 数据类型 值(tag) P23 表2-3

标签的类型分为以下4种:
◦ 通用标签:UNIVERSAL表示,由标准定义的。 ◦ 应用标签:APPLICATION表示,是由某个具体应用定 义的类型。 ◦ 上下文专用标签:Context-Specific表示,这种标签在 一定范围)中适用。 ◦ 私有标签:PRIVATE表示,用户定义的标签。

ASN.1是由原CCITT和ISO共同开发的标准语 ◦ 由ISO 8824/ITU-T X.208定义 ◦ 一种数据类型描述语言 ◦ 独立于计算机架构和语言 ◦ 可容易地映射成C或C++或Java的数据结构
◦ 与多个标准化编码规则相关

ASN.1数据类型定义
发 送 数 据 结 构
Fra Baidu bibliotek
ASN.1数据结构 ASN.1数据标识
编码
ASN.1的两个根本问题?

语法规则:数据结构、类型、顺序的描述 编码规则:将语法部分的描述的数据进行编码, 编为二进制数据流,以便在网络上传输或解码。
◦ 基本编码规则(Basic Encoding Rules ,BER)

ASN.1的文本约定
◦ (1)多个空格和空行等效于一个空格。 ◦ (2)所有的标识符、参考、关键字都要以一个字母开头, 后接字母(大、小写都可以)、数字或者连字符‚-‛(但不 能以连字符‚-‛结尾,也不能连续出现两个连字符),不 能出现下划线‚_‛。


ANSI.1定义的数据类型有20多种,标签类型都是 UNIVERSAL,如表2-3所示。 可分为4大类。
◦ 简单类型:由单一成分构成的原子类型,包括INTEGER ,BOOLEAN,... ◦ 构造类型:由两种以上成分构成的构造类型,包括 SEQUENCE,SEQUENCE OF,... ◦ 标签类型:由已知类型定义的新类型。 ◦ 其他类型:包括CHOICE和ANY两种类型。
(6)OCTET STRING,八位位组串,由0个或多个8位位 组组成的有序串。和位串类型一样,八位位组串也可以 用对应的二进制或十六进制串表示。
例如:
◦ NumbericString:包含数字0到9及空格。 ◦ PrintableString:包含所有大小字母、数字、标点、以及空格
◦ IA5String:由取自IA5(5号国际字母表)的字母组成,它和ASCII 基本相同。
◦ (2)BOOLEAN:布尔型,取值为TRUE或FALSE。所 有可归结为二值形式的问题回答都可以表示为布尔型。 例子:

1.简单类型
◦ (3)实数类型,对精度没有限制,可以表示为科学计 数法:M×BE,其中尾数M和指数E可以取任何正或负整 数值,基数B可以取2或10。
如:3.14*105 {M,B,E}{314,10,3} 例如:

1.简单类型
◦ (4) ENUMERATED,枚举类型,实际上是一组个数 有限的整数值。可以给每个整型值赋予不同的意义。
例2.3 Week ::=ENUMERATED { Monday (1), Tuesday (2), Wednesday (3), Thursday (4), Friday (5), Saturday (6), Sunday (7) } week Week : : =Monday
网络中不同类型的计算机交互通信时,采用的 ‚语法‛不同,这种差异决定了同一数据对象在不 同计算机中被表示为不同的比特序列。
test.x = 258; test.code=„a‟ test.code test.x a 00000001 00000011 test.code test.x a
00000011 00000001
(5)BIT STRING,位串类型,由0个或多个比特组成 的有序位串。位串的值可以由对应的二进制或十六进 制串表示。
单引号引用的二进制串后加大写字母B: ‘01101‟B 单引号引用的十六进制串后加大写字 H:‘0123456789ABCDEF‟H
例如: Occupation ::= BIT STRING jack Occupation::=‘0110’B
◦ 例2.4 对于SNMP的MIB中,在获取响应信息中的错误 状态如下所示。 ErrorStatus::= ENUMERATED { noError (0), tooBig (1), noSuchname (2), badValues (3), readOnly (4), genError (5) }

数据具有语法和语义两个方面
◦ 语法:指数据的表示形式,或者说构成数据的 规则。 ◦ 语义:指数据的内容及其含义。

同样的语义有不同的语法表示

确定要表示信息的数据类型。 对于不同类型的数据定义不同的操作。 任何类型的数据最终都将被表示成为比特序列。
比特序列不能说明它自身表示哪一种 类型的数据,它所代表的意义会因计 算机体系结构、程序设计语言等因素 的不同而不同。
host 1 format
host 2 format


为了保证同一数据对象在不同计算机中语义的正确 性,实现在不同应用系统之间的信息交换。 对于网络中n个异体的节点能互通,我们需要为每 个节点编写(n-1)个编解码程序,即需要总数为 n*(n-1)个编解码程序。



ASN.1的作用是提供统一的网络数据表示 在互相通信的端系统中至少有一个应用实体(如 SNMP、TELNET、FTP等)和一个表示实体(即 ASN.1)。 表示实体定义了应用数据的抽象语法。 应用协议按照预先定义的抽象语法构造协议数据 单元,用于交换信息。 表示实体则对应用层数据进行编码,将其转换成 二进制的比特串进行传送。

<新类型的名字> ::= <类型描述>
◦ 其中: ◦ <新类型的名字>是一个以大写字母开头的标识符; ◦ <类型描述>是基于内建类型或在其它地方定义的类型。
如: Married ::= BOOLEAN Age ::= INTEGER Picture ::= BIT STRING 类型名 关键字

提供从抽象语法表示的数据到比特序列,以及其相反操作的 方法。

编码规则(Encoding Rule):
提供了如何将抽象语法映射为传输语法。


抽象语法独立于任何编码技术,要满足应用的需要,能够 定义应用需要的数据类型和表示这些类型的值。 同等表示实体之间通信时对用户信息的描述和编码规则称 为传输语法。
◦ VisibleString:由取自IA5的图形字符组成,不含控制字符集。
◦ GeneralString:包含所有的标准字符。
例如:
NumString::=NumericString str1 NumString::=“1234567890” Surname ::=PrintableString personSurname1 Surname ::=“John”
语法三元组:实际语法、抽象语法、传输语法
ASN.1规范
抽象语法表示
多 对 多 关 系
应用一种编码规则
BER(基本编码规则) CER(规范编码规则)
传输语法

ASN.1已经应用到的通信协议与科学领域包括:
◦ ◦ ◦ ◦ ◦ ◦ ◦ ◦ 通信领域,包括3GPP、4G移动通信 智能交通系统ITS 网络语音通信技术VoIP 多媒体传输的标准 安全相关系统,包括智能卡,电子商务中的身份确认卡等 嵌入式系统的通信应用 空中交通管制 以及近年其他领域很多的应用。
相关文档
最新文档