第二章抽象语法表示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章 抽象语法表示 ASN.1
主要内容:
2.1 网络数据表示 2.2 ASN.1的基本概念 2.3 基本编码规则 2.4 ASN.1宏定义
数据的表示

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

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

REAL:实型,ASN.1对实数的精度也没有 限制,它可以表示任意的实数。每个实数 均可以表示为M*BE,用三元组(M,B,E)的形 式。
例如:
{3141592653589793238462643383 279,10,-30}
ASN.1的数据类型

ENUMERATED:枚举类型,是一个整数的表, 但它不能进行任何算术运算,因为 ENUMERATED类型的值只是用整数表示的 一个符号,而不具有整数的性质。
定义了数据的常用结构(包括不同的数据类型),独立 于任何编码技术的,只与应用有关。
传输语法(Transfer Syntax):
提供从抽象语法表示的数据到比特序列,以及其相反操 作的方法。
编码规则(Encoding Rule):
提供了如何将抽象语法映射为传输语法。
抽象语法 & 传输语法
抽象语法与传输语法

抽象语法与传输语法的对应关系
一个抽象语法可以选择多个传输语法来表示; 一个传输语法也可以用来表示多个抽象语法。

表示上下文
抽象语法/传输语法组合被称为表示上下文 (Presentation Context)。通常,应用实体 间会用多个抽象语法/传输语法的组合关系。
抽象语法标记ASN.1
Abstract 由ISO



GeneralString:包含所有的标准字符。
ASN.1的数据类型

简单类型之第二组
例子:
NumString::=NumericString str1 NumString::=“1234567890” Surname ::=PrintableString personSurname1 Surname ::=“John”

构造类型 修饰关键字 OPTIONAL、DEFAULT、 COMPONENTS OF - 元素类型标识符后面使用OPTIONAL表示在构造 类型的赋值过程中,该元素可以出现,也可以不出 现。 - 元素类型标识符后面使用DEFAULT表示在构造类 型的赋值过程中,该元素没有指定值时的缺省值。 - 在类型定义中,可以使用COMPONENTS OF将另 一个类型的成员插入到当前类型中。
test.code test.x a 00000001 00000011 test.code a
test.x = 258; test.code=„a‟
test.x
00000011 00000001
host 2 format
host 1 format
需要统一的网络数据表示格式
● 为了保证同一数据对象在不同计算机中语义的正确性,实
ASN.1的数据类型

OCTET STRING:由0个或多个八位位组组成的 有序串.
ASN.1的数据类型

简单类型之第二组

NumbericString:包含数字0到9及空格。 PrintableString:包含所有大小字母、数字、标点、 以及空格。 IA5String:由取自IA5(5号国际字母表)的字母组成, 它和ASCII基本相同。 VisibleString:由取自IA5的图形字符组成,不含控制 字符集。

ASN.1的数据类型

构造类型 SEQUENCE 序列类型,使包含0个或多个组成元素的有序列表, 列表的不同元素可以分属于不同的数据类型。每个 元素由元素名称和元素类型组成。
ASN.1的数据类型

构造类型 SEQUENCE 例子1:
一个常见的SEQUENCE声明如: Description ::= SEQUENCE { surname IA5String, first-name IA5String, age INTEGER }
airport SEQUENCE
{
origin IA5String, stop1 [0] stop2 [1] destination IA5String IA5String IA5String OPTIONAL, OPTIONAL, },
crewsize ENUMERATED { six (6),
eight(8),
ten(10) },
cancel BOOLEAN DEFAULT FALSE }
该类型的一个实例是: { airline “China”, flight “1106”, seats {maximum 320, occupied 107, vacant 213}, airport {origin “Shanghai”, destination “Beijing” }, crewsize 10 } 或者 { }
该类型的一个值为: johnny Description ::= { surname "Smith", first-name "John", age 40 }
ASN.1的数据类型

构造类型 SEQUENCE
例子2:
AirlineFlight ::= SEQUENCE{ airline IA5String, flight NumericString, seats SEQUENCE { maximum INTEGER, occupied INTEGER, vacant INTEGER },
OSI 应用层 表示层 会话层 传输层 OSI 应用层 表示层 会话层 传输层
网络层
数据链路层 物理层
为应用层提供统一 的网络数据表示。
网络层
数据链路层 物理层
表示层的基本概念
实际语法(Concrete Syntax ):
本地的,并且定义本地系统的数据表示方法。
抽象语法(Abstract Syntax ) :

简单类型之第三组
OBJECT IDENTIFIER:对象标识符,从对象树派生 出的一些列点分数字串的形式来标识对象。对象可 以是国际标准,管理对象,甚至可以是抽象语法和 传输语法本身。对象标识符是根节点到对象节点路 径上边标识的顺序连接,它是对象的唯一标识。
例如:
internet OBJECT INDETIFIER ::={iso(1)org(3)dod(6)1}
“China”,“1106”,{320,107,213}, { “Shanghai”, “Beijing” },10
ASN.1的数据类型

构造类型 SEQUENCE OF 单纯序列类型,使包含0个或多个组成元素的有序 列表,列表的各元素属于同一数据类型。 例子: Seats ::= SEQUENCE OF INTEGER
colorA ColorType ::=1
这里说明了一个ColorType 类型的变量colorA ,并将值赋为 blue。
ASN.1的数据类型

BOOLEAN:布尔型,取值为TRUE或FALSE。 所有可归结为二值形式的问题回答都可以表示 为布尔型。
例子:
Employed::=BOOLEAN
ASN.1的数据类型
ASN.1的数据类型

简单类型 之第四组
NULL是空类型,EXTERNAL是外部类型, UTCTime和GeneralizedTime是两种有关时间的类型, 其区别是表示时间的形式不同。
ASN.1的数据类型

构造类型
构造类型有序列和集合两种:
- 分别用SEQUENCE和SEQUENCE OF表示不同 类型和相同类型元素的序列。 - 分别用SET和SET OF表示不同类型和相同类型元 素的集合。 序列和集合的区别是前者的元素是有序的,而后 者是无序的。

确定要表示信息的数据类型。 对于不同类型的数据定义不同的操作。 任何类型的数据最终都将被表示成为比特序列。
比特序列不能说明它自身表示哪一种 类型的数据,它所代表的意义会因计 算机体系结构、程序设计语言等因素 的不同而不同。
不同计算机系统的数据表示
网络中不同类型的计算机交互通信时,采用的 “语法”不同,这种差异决定了同一数据对象在不 同计算机中被表示为不同的比特序列。
ASN.1规范
抽象类型值
抽象语法表示
ASN.1 编码规则
ASN.1 编码规则 比特模式
应用一种编码规则
比特模式
传输语法表示
ASN.1的两个根本问题
数据类型 编码规则

基本编码规则(Basic Encoding Rules ,BER)
struct Student //声明一个结构体类型Student { int num; char name[20]; char sex; int age; float score; char address[30]; }; 学生的学号、姓名、性别、年龄、成绩、家庭地址 Student ::= SEQUENCE { num INTEGER , name OCTET STRING , age INTEGER, score REAL , address OCTET STRING ,
Syntax Notation One
8824/ITU-T X.208定义
一种数据类型描述语言 有严格的BNF定义 独立于计算机架构和语言 可容易地映射成C或C++或Java的数据结构 与多个标准化编码规则相关
抽象语法标记ASN.1的作用
本地数据表示
实际语法表示
一个抽象类型定义(被其他类型定义所 支持)。这个抽象类型的所有可能值。
例如:
Month ::=ENUMERATED{january(1),
february(2),
march(3)}
ASN.1的数据类型

BIT STRING:位串类型,由零个或多个比特
组成的有序串,可以由对应的二进制或者十 六进制串表示。

例如:
Occupation ::= BIT STRING jack Occupation::=0110

ASN.1的数据类型
简单类型
第一组是基本类型
BOOLEAN,INTEGER, BIT STRING,OCTET STRING REAL和ENUMERATED
ASN.1的数据类型

INTERGER:ASN.1中没有限制整数的位数, 即它可以是任意大小的整数。
例子:
ColorType ::=INTEGER{ red(0),blue(1),green(2)};
ASN.1的数据类型

简单类型 之第三组
对象类型,包括OBJECT IDENTIFIER和 Object Descriptor两种类型。 OBJECT IDENTIFIER类型的值是一个对象标 识符。唯一标识一个对象。
Object Descriptor对象描述符:描述对象的语义。
ASN.1的数据类型
ASN.1的数据类型

构造类型 SET 集合类型,使包含0个或多个组成元素的无序集合, 集合中的各元素可以属于不同数据类型。 例子: {“Mike”,4,TRUE} Person ::= SET { {4,“Mike”, TRUE} name IA5String, {TRUE, “Mike”,4} age INTEGER, 它们属于person的 female BOOLEAN 同一个实例。 }
}
C语言的数据类型
基本类型 整型 字符型 实型(浮点型) 单精度型 双精度型 空类型 数组类型 结构体类型 共用体类型 枚举类型
C数据类型
Βιβλιοθήκη Baidu
构造类型 指针类型
ASN.1的数据类型

ASN.1定义的数据类型
简单类型:由单一成份构成的原子类型。 构造类型:由两种以上成分构成的构造类 型。 标签类型:由已知类型定义的新类型。 其他类型:包括CHOICE和ANY两种类型。
ASN.1的数据类型

构造类型 SET OF 单纯集合类型,使包含0个或多个组成元素的无序 集合,集合中的各元素属于同一数据类型。 例子: VipSeats ::= SET OF INTEGER vipseatset VipSeats ::={ 330,331,332}
2.2 ASN.1的基本概念
现在不同应用系统之间的信息交换。
● 对于网络中n个异体的节点能互通,我们需要为每个节点编
写(n-1)个编解码程序,即需要总数为n*(n-1)个编解码程序。
表示层的作用
●为了保证同一数据对象在不同计算机中语义的正确性,实现 在不同应用系统之间的信息交换。两个系统在传输数据前需 要协商共用的编码方式。表示层负责在两个应用系统间进行 编码协商和实际信息编码。
相关文档
最新文档