《精通SNMP》——第2章 抽象语法标记2.1 概述

第2章 抽象语法标记

抽象语法标记(ASN.1)是一种数据对象描述标准,包括两部分内容,数据描述语言(CCITT X.208)和数据编码规则(CCITT X.209)。SNMP标准中使用ASN.1定义数据,理解它是深入理解SNMP的基础。

本章和第3章将分别讲述ASN.1的数据描述语言和基本编码规则(Basic Encoding Rules,BER)的内容。

2.1 概述

系统,都有各自独立的一套数据定义和存储格式,因此在处理异种系统之间的通信时,使用哪种数据格式是一件很麻烦的事情。对于这个问题,最有效率的解决方式是,使用一套独立于任何平台和编程语言的数据类型。ASN.1就是专门用来描述这种数据类型的标准语言。

2.1.1 异种系统通信问题
任何一种计算机语言,在描述数据类型时都有一套特定的语法规范。例如,C语言中定义一个整型变量x的语法为:

int x;

在做上述定义时需要遵守C语言定义整型变量的语法,否则编译时会产生语法错误。另外,系统在处理时,需要为变量x分配一块物理内存,用来存储x的值,以便今后对变量x的值可以进行读取或更改等操作。

像这类用计算机语言描述数据类型的语法,它所定义的数据真实存在,我们称其为具体语法(concrete syntax)。

因为每种语言的具体语法不同,因此由该语法定义的数据类型是不适合异种系统之间通信使用的。如果相互通信的系统只有两种,则可以选择某一种系统的数据类型作为双方的交换数据类型,另一种系统将自己的数据类型做转换就可以了。但现实环境中往往有多种不同系统需要相互通信,这种情况下如果做类型转换处理会很复杂。

ASN.1可以“凭空”定义不依赖任何平台的数据类型。任何两种不同系统之间要进行信息交换,可以预先使用ASN.1定义的标准的数据类型,并约定参与通信的各方均使用这种数据类型进行通信。由于ASN.1定义的数据类型主要用于信息交换,因此数据类型都定义了传输编码格式,其中,基本编码规则BER是最常用的一种。参与通信的一方,在数据交换之前,首先对自己的数据进行格式转换、编码处理,然后再发送;相应地,接收方在接收数据后要先进行解码处理。整个通信过程如图2-1所示。

由此可见,ASN.1定义的数据类型在一个系统中物理上是不存在的。它只是一种数据格式,只有在传输时才有意义;它以BER编码格式存在于通信线路中,接收方一旦接收,即刻就将其转换为具体语法定义的数据类型。

正是由于这种数据类型的“抽象”特性,所以描述它的语法在OSI术语中被称为抽象语法(abstract syntax)。抽象语法定义的数据类型,在传输时遵循的数据编码规则,称为传输语法(transfer syntax)。一种ASN.1数据类型对应的传输语法可以有多种,但只能使用其中的一种。

2.1.2 巴柯斯范式
在计算机科学中,巴柯斯范式(Backus Normal Form,BNF)专门用来定义计算机语言。ASN.1标准也是由一系列巴柯斯范式定义的,关于它的所有产生式可参阅附录一。

语法符号定义由一系列的产生式组成,产生式的基本形式如下:

symbol ::= alternative1 | alternative2 …

注意:

产生式中的符号“::=”也可以是符号“→”。
符号“::=”可以解释为“被定义为”,右边的符号可以代替左边的符号,用做替代的符号可以有多个可选项,使用“|”分隔。产生式右边用引号引起来的替代符号为终结符,终结符是出现在语言中的最终符号,不能再被其他符号替换。

产生式中所使用的符号含义如表2-1所示。

使用巴柯斯范式定义的语言,由一系列简单和复杂的产生式组成。运用这些产生式可以生成语言中所有的符号元素。在某种语言中,凡是能够应用该语言的产生式推导出的符号,就是合法符号,否则就是非法字符。

例如,使用下面的产生式生成的S表示所有数字,包括小数、整数和负数。

S ::= '-'FN | FN
FN ::= DL | DL'.'DL
DL ::= D | D DL
D ::='0'| '1'| '2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'

对于第一个产生式来说,如果要产生一个正数,则用选项FN开始,依次使用后面的生成式右端替换,直到全部替换成终结符为止;如果要产生一个负数,则用选项‘-’FN开始,进行一系列替换,直至所有符号变成终结符。

例如,如果要产生数字序列1918,可以通过下列步骤生成:

S ::= FN       // 开始;
S ::= DL       // DL替换FN;
S ::= D DL      // D DL 替换DL; 
S ::= D D DL     // D DL 替换DL;
S ::= D D D DL    // D DL 替换DL;
S ::= D D D D     // D 替换DL;
S ::= 1 D D D    // 终结符1 替换D;
S ::= 1 9 D D     // 终结符9 替换D;
S ::= 1 9 1 D    // 终结符1 替换D;
S ::= 1 9 1 8    // 终结符8 替换D;

形如DL ::= D | D DL的产生式会经常遇到,其最终结果经常是DDD……即终结符的一个无穷序列。同样的,产生式DL::= D | D'.'DL的最终结果是D.D.D……注意可选项出现的顺序对结果无影响。

ASN.1中定义的基本类型符号、值符号都有对应的产生式,且很多最终的符号形式不止一种。但无论符号形式如何变化,必须能利用对应的产生式经过一系列替换操作推导出来。

时间: 2024-10-02 05:22:25

《精通SNMP》——第2章 抽象语法标记2.1 概述的相关文章

《精通SNMP》——导读

https://yqfile.alicdn.com/18cc747bdb20e409afad5d83dd531e6b870f24aa.png" > 前言随着计算机网络的诞生和发展,网络管理也经历了一个从无到有.从初级到高级的发展过程.SNMP简单网络管理协议,是网络管理人员提高网络管理水平和工作效率必须熟练掌握的知识. 初次接触SNMP的人,很容易被它的名字所迷惑,大体上会感觉它是个很简单的协议.介绍网络技术的书中很少提及它,即使有也很简短.但如果真的想深入学习一下,会发现它远不是你所想象

《精通SNMP》——1.2 SNMP概述

1.2 SNMP概述 作为一种标准的网络管理协议,从功能上,SNMP的组成可以分为两大部分:管理信息的定义与标识和SNMP实体之间的通信协议. 管理信息的定义与标识的核心内容是管理信息结构与标识(Structure and Identification of Management Information,SMI)和许多的管理信息库(Management Information Base,MIB).SMI目前有SMIv1和SMIv2两个版本,它规定如何定义.标识管理信息.MIB遵循SMI规范,定义

《精通SNMP》——2.5 对象标识符类型

2.5 对象标识符类型 对象标识符类型是ASN.1的基本数据类型,用来唯一标识一个信息对象是SNMP中使用最多的一种数据类型.这种类型的取值必须遵循特定的规则. 很多人对这种类型感到迷惑.其实,ASN.1只不过是将用来标识信息对象的符号做了特定的定义而已.这种类型的实例(值),可以用来标识特定的信息实体.当它用来标识一个可变值时,作用类似于高级程序语言中的变量名. 这里所说的信息实体可以是一种抽象语法定义的数据类型.一个ASN.1模块或其他任意需要唯一识别的和通信领域有关的信息实体,甚至可以是一

《企业级ios应用开发实战》一第3章 Objective-C 语法简介

第3章 Objective-C 语法简介 本书不是一本关于Objective-C编程语言的专著,但仍然会介绍一些Objective-C语言的语法基础和有趣特性.这对于刚刚接触到iPhone编程的人来说,会是一个很好的开始. Objective-C兼具C语言和面向对象语言的特性.因此本章会从两个方面来介绍Objective-C(简称O-C). 首先,由于Objective-C具有C语言背景(它仍然是一种C),它从C语言中继承了一些C语言特性,例如:Objective-C全面支持C的数据类型(包括简

v8世界探险(3) - v8的抽象语法树结构

v8世界探险(3) - v8的抽象语法树结构 AST的结构 首先,我们还是先来看一下地图: 基于Zone的内存分配 AST对象都是基于Zone进行内存管理的,Zone是多次分配临时块对象,然后可以一次性释放掉. 我们看一下Zone的定义,在src/zone.h中: // The Zone supports very fast allocation of small chunks of // memory. The chunks cannot be deallocated individually

《HTML5和CSS3快速参考》——第2章 HTML语法2.1HTML文档

第2章 HTML语法 2.1HTML文档 基本概念 通常情况下,HTML文档指的是一份独立的HTML文件. HTML文档是一份由一定的元素和文本组成的代码文件. HTML文件的基本构件是元素(element).它们以HTML标签的形式呈现. 这些元素构成了一个层次分明的嵌套结构. 元素与标签 通常情况下,元素是由一个开标签(opening tag,如本例中的 )和一个闭标签(closing tag,如)组成的,但有时候闭标签不是必须的. 元素与标签之间的不同在于,元素是HTML标签所要表述的概念

第3章 抽象工厂模式(Abstract Factory)

原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

《C++覆辙录》——第2章 语法问题2.1:数组定义和值初始化的语法形式混淆

第2章 语法问题 C++覆辙录C++语言的语法和词法结构博大精深.此复杂性的一部分是从C语言那里继承而来的,另一部分则是为支撑某些特定的语言特性所要求的. 本章中我们将考察一组语法相关的头疼问题.其中有些属于常见的手误,但是错误的代码仍然能够通过编译,只不过会以出人意料的方式运行罢了.另外一些则是由于一段代码的语法结构及它们的运行期行为不再互为表里.其余的部分,我们主要研究语法层面的灵活余地带来的问题:明明是一字不差的代码,不同的软件工程师能从中得出大相径庭的结论来. 2.1:数组定义和值初始化

《精通CFD动网格工程仿真与案例实战》——第 2 章 动态网格理论基础 2.1 概述

第 2 章 动态网格理论基础 2.1 概述 精通CFD动网格工程仿真与案例实战在流体工程中有大量的问题是边界运动与变形的,这都需要用到动态网格技术来模拟.比如航空航天工业中,飞机襟.副翼的运动,飞机外挂物分离投放过程,弹射救生过程,导弹井下发射过程,火箭级间分离.整流罩分离.尾罩分离过程等:内燃机中活塞和气门的运动等:流体机械中阀门的开启与关闭过程,偏心泵转动等:隧道与机车工程中机车穿越隧道的过程:生物医学中动脉血管的膨胀与收缩,肺的吸气与呼气过程等:生物仿生学中鸟扇动翅膀飞行.鱼摆动尾巴游动等