《第二章 抽象语法表示》由会员分享,可在线阅读,更多相关《第二章 抽象语法表示(70页珍藏版)》请在金锄头文库上搜索。
1、第二章 抽象语法表示,抽象语法表示ASN.1 Abstract Syntax Notation(ASN.1)是一种形式语言 提供统一的网络数据表示,用于定义应用数据的抽象语法和应用协议数据单元的结构。 OSI或SNMP管理信息库,都是用ASN.1定义的。 基本编码规则BER Basic Encoding Rule(BER)是一种编码规则 用ASN.1定义的应用数据在传送过程中按照BER变换成比特串。,本章内容,表示层的功能是提供统一的网络数据表示 在互相通信的端系统中至少有一个应用实体(如SNMP、TELNET、FTP等)和一个表示实体(即ASN.1)。 表示实体定义了应用数据的抽象语法。 应
2、用协议按照预先定义的抽象语法构造协议数据单元,用于交换信息。 表示实体则对应用层数据进行编码,将其转换成二进制的比特串进行传送。,2.1 网络数据表示,2.1 网络数据表示,图2-1 关于信息表示的通信系统模型,抽象语法独立于任何编码技术。 抽象语法要满足应用的需要,能够定义应用需要的数据类型和表示这些类型的值。 ASN.1是根据当前网络应用的需求制定的标准。 同等表示实体之间通信时对用户信息的描述和编码规则称为传输语法。 传输语法与抽象语法之间是多-多对应关系。 对传输语法的要求是支持对应的抽象语法。,2.1 网络数据表示,ASN.1是由原CCITT和ISO共同开发的标准语言,可在系统间进行
3、数据的传输。 在ASN.1中定义所需的数据结构类型,并将它们组成库。 表示层可以实现从通信线路上所用的外部数据格式到接收计算机所用的内部数据格式的转换。,2.2 ASN.1语法,当一个应用想发送一个数据结构时,可以将数据结构与其对应的ASN.1标识一起传给表示层。 以ASN.1定义作为索引,表示层便知道数据结构的域的类型及大小,从而对它们编码传输。 在另一端,接收表示层查看此数据结构的ASN.1 标识,从而了解数据结构的域的类型及大小。 抽象语法与一个能对其进行编码的传输语法的组合,就构成一个表示上下文。 表示上下文可以在连接建立时协商确定,也可以在通信过程中重新定义。,2.2 ASN.1语法
4、,ASN.1的文本约定 (1)多个空格和空行等效于一个空格。 (2)用于表示值和字段的标识符、类型指针和模块名由大小写字母、数字和短线组成。 (3)标识符以小写字母开头。 (4)类型指针和模块名以大写字母开头。 (5)ASN.1定义的内部类型全部用大写字母表示。 (6)关键字全部用大写字母表示。 (7)注释以一对短线(-)开始,以一对短线或行尾结束。,2.2 ASN.1语法,2.2 ASN.1语法,2.2 ASN.1语法,2.2.1 抽象数据类型,在ASN.1中,每一个数据类型都有一个标签(tag) 标签有类型和值,数据类型由标签的类型和值唯一确定。 标签的类型分为以下4种: 通用标签:UNI
5、VERSAL表示,由标准定义的。 应用标签:APPLICATION表示,是由某个具体应用定义的类型。 上下文专用标签:Context-Specific表示,这种标签在一定范围)中适用。 私有标签:PRIVATE表示,用户定义的标签。,2.2.1 抽象数据类型,ANSI.1定义的数据类型有20多种,标签类型都是UNIVERSAL,如表2-3所示。 可分为4大类。 简单类型:由单一成分构成的原子类型,包括INTEGER,BOOLEAN,. 构造类型:由两种以上成分构成的构造类型,包括SEQUENCE,SEQUENCE OF,. 标签类型:由已知类型定义的新类型。 其他类型:包括CHOICE和ANY
6、两种类型。,2.2.1 抽象数据类型,2.2.1 抽象数据类型,2.2.1 抽象数据类型,1简单类型 (1)INTEGER。 例2.1 Number :=INTEGER (2)BOOLEAN。 例2.2 Married :=BOOLEAN (3)REAL,实数类型,对精度没有限制,可以表示为科学计数法:MBE,其中尾数M和指数E可以取任何正或负整数值,基数B可以取2或10。 (4)ENUMERATED,枚举类型,实际上是一组个数有限的整数值。可以给每个整型值赋予不同的意义。,2.2.1 抽象数据类型,例2.3 Week :=ENUMERATED Monday (1), Tuesday (2),
7、 Wednesday (3), Thursday (4), Friday (5), Saturday (6), Sunday (7) ,2.2.1 抽象数据类型,例2.4 对于SNMP的MIB中,在获取响应信息中的错误状态如下所示。 ErrorStatus:= ENUMERATED noError (0), tooBig (1), noSuchname (2), badValues (3), readOnly (4), genError (5) ,2.2.1 抽象数据类型,(5)BIT STRING,位串类型,由0个或多个比特组成的有序位串。位串的值可以由对应的二进制或十六进制串表示。例如,1
8、0100010B或A2H都是位串类型的有效数值。 (6)OCTET STRING,八位位组串,由0个或多个8位位组组成的有序串。和位串类型一样,八位位组串也可以用对应的二进制或十六进制串表示。,2.2.1 抽象数据类型,(7)OBJECT IDENTIFIER,对象标识符,从对象树派生出的一系列点分数字串的形式,用来标识对象。 在ASN.1中对象集合按照树形结构组织,树的每个分支被赋予一个整数标识。 对象标识符是从根节点开始到对象节点路径上边标识的顺序连接,它是对象的唯一标识。 根节点以下有3个节点,分别是ccitt(0),iso(1),joint-iso-ccitt(2),它们向下又可细分,
9、如iso的子节点包括standard(0),registration-authority(1),member-body(2),org(3)。 其中org(3)下面的子节点internet就定义了最常使用的管理对象。,2.2.1 抽象数据类型,例2.5 internet OBJECT IDENTIFIER := iso(1) org(3) dod(6) 1 对象标识符的值是1.3.6.1 iso.org.dod.1,2.2.1 抽象数据类型,(8)NULL,空值类型,它仅包含一个值NULL,主要用于位置的填充。如果某个时刻无法得知数据的准确值,简单的方法就是将这一数据定义为NULL类型。还可以用
10、NULL表示序列中可能缺省的某个元素。 (9)CHARACTER STRING,字符串类型。ASN.1中定义了一些字符集不完全相同的CHARACTER STRING类型,不同类型包含的字符集不同。标准ASCII字符可以分为G集(图形符号集,ASCII字符编号范围是33126)和C集(控制符号集,ASCII字符编号范围是031)。空格符(编号32)和删除符(编号127)同时属于两个符号集。,2.2.1 抽象数据类型,2构造类型 (1)SEQUENCE,序列类型,是包含0个或多个组成元素的有序列表。 列表的不同元素可以分属于不同的数据类型。每个元素由元素名和元素类型组成,元素类型可以是简单类型,也
11、可以是定义的其他构造类型。 元素类型标识符后可以跟OPTIONAL或DEFAULT。 OPTIONAL示在序列类型的实例中该元素项可选。 DEFAULT表示序列类型的实例中该元素具有事先指定的默认值。 COMPONENTS OF表示它包含了给定序列中的所有组成元素。,2.2.1 抽象数据类型,例2.6 AirlineFlight :=SEQUENCE airline IA5STRING, flight IA5STRING, seats SEQUENCE maximum INTEGER, occupied INTEGER, vacant INTEGER, , airport SEQUENCE o
12、rigin IA5STRING, stop0 IA5STRING OPTIONAL, stop1 IA5STRING OPTIONAL, destination IA5STRING , crewsize ENUMERTAED six (6), eight (8), ten (10), cancel BOOLEAN DEFAULT FALSE ,2.2.1 抽象数据类型,它的一个实例是 airplane1 AirlineFlight := airline “china“, flight “C3416“, seats 320 ,280,40, airport original “Qingdao“,
13、stop0 “TaiYuan“,destination “WuLuMuQi“, crewsize 10 或airplane1 :=“china“, “C3416“, 320 ,280,40, original “Qingdao“,stop0 “TaiYuan“,destination “WuLuMuQi“,10,2.2.1 抽象数据类型,(2)SEQUENCE OF,单纯序列(数组)类型,即序列中的各项都属于同一类型,可以看作是SEQUENCE类型的特例。例2.7定义了座位号类型Seats,因为座位号都是整数,所以可以使用单纯序列类型。 例2.7 Seats :=SEQUENCE OF INT
14、EGER (3)SET,集合类型,是包含0个或多个组成元素的无序集合。这些元素的顺序无任何意义,但是它们之间必须是不相同的,组成元素的类型可以为不同的ASN.1类型。,2.2.1 抽象数据类型,例2.8 Student :=SET number INTEGER, name IA5STRING, age INTEGER, gender ENUMBERTED male(0), female( 1), major IA5STRING 20040320,“LiYong“,19,0,“Network Engine“, 20040720,“WangHua“,20,1,“Computer Applicati
15、on“,它们都属于Student类型的同一个实例。,2.2.1 抽象数据类型,(4)SET OF,单纯集合类型,是包含0个或多个组成元素的无序集合,同单纯序列类型类似,这些组成元素必须为相同的ASN.1类型。 例2.9 VipSeats :=SET OF INTEGER vipseats VipSeats :=60,80,120,2.2.1 抽象数据类型,3标签类型 标签类型由一个标签类(class)和一个标签号(class number)组成。 标签类型有4种:通用类(UNIVERSAL),应用类(APPLICATION),私有类(PRIVATE)和上下文无关类(CONTEX-SPECIFI
16、C)。,2.2.1 抽象数据类型,3标签类型 通用类标签是ASN.1标准定义的,除了CHOICE和ANY类型之外,所有的简单类型和结构类型都具有统一分配的唯一标签。 加标签后的类型实质上是一个新的类型,它和原来的类型在结构上是一样的,但是是不同的类型,举例如下。 例2.10 Number := UNIVERSAL 2INTEGER valA Number:=200603,2.2.1 抽象数据类型,4其他类型 CHOICE和ANY是两个没有标签的类型,因为它们的值是未定的,而且类型也是未定的。当这种类型的变量被赋值时,它们的类型和标签才能确定。 (1)CHOICE,选择类型,包含一个可供选择的数据类型列表。CHOICE类型的每个值都是其中某一数据类型的值。数据可能在不同情况下取不同的值,若这些可能的类型能够在事先都知道,那么就可