计算机网络管理(雷震甲)第2章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 抽象语法表示ASN.1
2.2 ASN.1的基本概念
作为一种形式语言,ASN.1有严格的BNF定义。我们不想全 面研究它的BNF定义,而是自底向上地解释ASN.1基本概念,然 后给出一个抽象数据类型的例子。下面列出ASN.1文本的书写规 则,这些规则叫做文本约定(Lexical Conventions): (1) 书写的布局是无效的,多个空格和空行等效于一个空 格; (2) 用于表示值和字段的标识符、类型指针(类型名)和模块 名由大小写字母、数字和短线(Hyphen)组成;
第2章 抽象语法表示ASN.1
(3) 标识符以小写字母开头; (4) 类型指针和模块名以大写字母开头; (5) ASN.1定义的内部类型全部用大写字母表示;
(6) 关键字全部用大写字母表示; (7) 注释以一对短线(- -)开始,以一对短线或行尾结束。
第2章 抽象语法表示ASN.1 2.2.1 抽象数据类型
LanSimpleCounterLimits::=SEQUENCE {ethernetCounter1 tokenRingCounter1 EthernetCollisionsCounter, TokenRingTokensLost}
第2章 抽象语法表示ASN.1 定义SET和SET OF的语法是类似的: SetType::=SET {ElementTypeList}| SET {} SetOfType::=SET OF Type | SET
第2章 抽象语法表示ASN.1
第2章 抽象语法表示ASN.1
2.1 网络数据表示 2.2 ASN.1的基本概念 2.3 基本编码规则 2.4 ASN.1宏定义 习题
第2章 抽象语法表示ASN.1
2.1 网络数据表示
表示层的功能是提供统一的网络数据表示。在互相通信的 端系统中至少有一个应用实体(例如FTP、TELNET、SNMP等) 和一个表示实体(即ASN.1)。表示实体定义了应用数据的抽象语 法,这种抽象语法类似于通常程序设计语言定义的抽象数据类 型。应用协议按照预先定义的抽象语法构造协议数据单元,用 于和对等系统的应用实体交换信息。表示实体则对应用层数据 进行编码,将其转换成二进制的比特串,例如把十进制数变成 二进制数、把字符变成ASCII码等。比特串由下面的传输实体在 网络中传送。把抽象数据变换成比特串的编码规则叫做传输语 法。在各个端系统内部,应用数据被映像成本地的特殊形式, 存储在磁盘上或显示在用户终端上,如图2.1所示。
第2章 抽象语法表示ASN.1 在这个表达式中,NamedType是一个类型指针。序列的每 一成分类型可能跟随关键字OPTIONAL(表示任选)或DEFAULT(表 示默认值)。COMPONENTS OF子句用于指示另外一个被包含的类 型。定义SEQUENCE OF类型的语法如下: SequenceOfType::=SEQUENCE OF Type | SEQUENCE
第2章 抽象语法表示ASN.1 第三组包括OBJECT IDENTIFIER和Object Descriptor两种 类型。我们用对象类型泛指网络中传输的任何信息对象,例如 标准文档、抽象语法和传输语法、数据结构和管理对象等都可 以归入信息对象范畴。OBJECT IDENTIFIER类型的值是一个 对象标识符,由一个整数序列组成,它惟一地标识一个对象。 对象描述符(Object Descriptor)则以人工可读的形式描述信息对 象的语义。
第2章 抽象语法表示ASN.1 下面是定义序列类型的例子: EthernetCollisionsCounter::=SEQUENCE {highValue INTRGER, lowValue {highValue lowValue INTEGER} INTRGER, INTEGER} COMPONENTS OF COMPONENTS OF TokenRingTokensLost::=SEQUENCE OF
第2章 抽象语法表示ASN.1 在ASN.1中,用符号::=表示产生式,读做“定义为”。显 然,EthernetNumberCollisions Range类型的变量只能取两个 整数值:0和1000。 第二组包括各种字符串类型,标签为UNIVERSAL 18~22 和UNIVERSAL 25~27,这些类型都可以看作是OCTET STRING类型的子集,它们都是采纳其他标准的类型。
第2章 抽象语法表示ASN.1 表2.1 ASN.1定义的通用类型
标 签 UNIVERSAL 1 UNIVERSAL 2 UNIVERSAL 3 UNIVERSAL 4 U源自文库IVERSAL 5 UNIVERSAL 6 UNIVERSAL 7 UNIVERSAL 8 UNIVERSAL 9 UNIVERSAL 10 UNIVERSAL 11~15 类 型 值 集 合
第2章 抽象语法表示ASN.1 ● 私有标签:用关键字PRIVATE表示,这是用户定义的标 签。 ASN.1定义的数据类型有20多种,标签类型都是UNIVERSAL, 如表2.1所示。这些数据类型可分为4大类。 ● 简单类型:由单一成分构成的原子类型; ● 构造类型:由两种以上成分构成的构造类型; ● 标签类型:由已知类型定义的新类型; ● 其他类型:包括CHOICE和ANY两种类型。
第2章 抽象语法表示ASN.1
端系统A 用户 端系统B 用户
用户表示映像 本地存储 本地映像 应用实体 抽象语法 ASN.1
用户表示映像 本地存储 应用实体 本地映像
编码规则
编码规则
表示实体
传输语法 BER
表示实体
图2.1 关于信息表示的通信系统模型
第2章 抽象语法表示ASN.1 特别需要指出的是,这里提到的抽象语法是独立于任何编 码技术的,只与应用有关。抽象语法要能满足应用的需要,能 够定义应用需要的数据类型和表示这些类型的值。ASN.1是根 据当前网络应用的需求制定的标准(CCITT X.208和ISO 8824), 也许随着网络应用的发展,还会开发出新的表示层标准。另外 值得一提的是,对应一种抽象语法可以选择不止一种传输语法。 对传输语法的基本要求是支持对应的抽象语法,另外还可以有 其他一些属性,例如支持数据加密或压缩,或者两者都支持。
第2章 抽象语法表示ASN.1 第四组包含4种类型。NULL是空类型,它没有值,只占用 结构中的一个位置,该位置可能出现或不出现数据。 EXTERNAL是外部类型,即标准之外的文档定义的类型。 UTCTime和GeneralizedTime是两种有关时间的类型,其区别是 表示时间的形式不同。前者(世界通用时)分别用两位数字表示年、 月和日(即YYMMDD),然后是时、分和秒(即hhmmss),最后可 以说明是否为本地时间;而后者用4位数字表示年,用两位数字 表示月和日,最后也可以说明是否为本地时间。例如 20000721182053.7是GeneralizedTime类型的一个值,表示2000年 7月21日,当地时间18点20分53.7秒。而值20000721182053.7Z表 示同样的时间,但是加了符号Z,则表示UTC时间。如果写为 20000721182053.7+0800则除了表示同样的当地时间外,还说明 了加8小时可以得到UTC时间。
第2章 抽象语法表示ASN.1 1. 简单类型 表2.1中除了UNIVERSAL 16和UNIVERSAL 17之外都是简 单类型。 这些类型的共同特点是可以直接定义它们的值的集合, 可以把这些类型作为原子类型构造新的数据类型。简单类型还 可以分为4组。第一组包括BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和ENUMERATED等。这一 组可以叫做基本类型,它们的值已经在表2.1中列出了。需要说 明的是,实数可以表示为科学计数法:
BOOLEAN INTEGER BIT STRING OCTET STRING NULL OBJECT IDENTIFIER Object Descriptor EXTERNAL REAL ENUM ERATED 保留
TRUE, FALSE 正数、负数和零 0 个或多个比特组成的序列 0 个或多个字节组成的序列 空类型 对象标识符 对象描述符 外部文件定义的类型 所有实数 整数值的表,每个整数有一个名字 为 ISO 8824 保留
在ASN.1中,每一个数据类型都有一个标签(Tag),标签有 类型和值(见表2.1),数据类型是由标签的类型和值惟一决定 的,这种机制在数据编码时有用。标签的类型分为以下4种: ● 通用标签:用关键字UNIVERSAL表示,带有这种标签的 数据类型是由标准定义的,适用于任何应用; ● 应用标签:用关键字APPLICATION表示,是由某个具体 应用定义的类型; ● 上下文专用标签:这种标签在文本的一定范围(例如一 个结构)中适用;
第2章 抽象语法表示ASN.1
SequenceType::=SEQUENCE{ElementTypeList}| SEQUENCE {} ElementTypeList::= ElementType | ElementTypeList, ElementType ElementType::= NamedType NamedType OPTIONAL NamedType DEFAULT Value| COMPONENTS OF Type | |
M × BE
第2章 抽象语法表示ASN.1 其中尾数M和指数E可以取任何正/负整数值, 基数B可取2 或10。 枚举类型ENUMERATED是一个整数的表,每一个整数有一 个名字。与此类似的是,对于某些整数类型的值也可以定义一 个名字,但这两种类型是有区别的。对整数可以进行算术运算, 但对枚举类型却不能进行任何算术运算,也就是说,枚举类型 的值只是用整数表示的一个符号,而不具有整数的性质。下面 是定义枚举类型和定义整数类型的例子: EthernetAdapterStatus::=ENUMERATED{normal(0),degraded(1 ), offline(2),failed(3)} EthernetNumberCollisionsRange::=INTEGER{minimum(0),maxim um(1000)}
第2章 抽象语法表示ASN.1 2. 构造类型 构造类型有序列和集合两种,分别用SEQUENCE和SEQUENCE OF表示不同类型和相同类型元素的序列,分别用SET和SET OF 表示不同类型和相同类型元素的集合。序列和集合的区别是前 者的元素是有序的,而后者是无序的。 我们可以定义任何已知类型的序列,定义序列的语法是:
第2章 抽象语法表示ASN.1 表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 保留