一、网络数据表示
抽象语法表示ASN.1
属于表示层
表示层功能:
提供统一的网络数据表示
互相通信的端系统中至少有一个应用实体(如SNMP、FTP等)和一个表示实体(即ASN.1)。
四个步骤:
- 表示实体定义应用数据的抽象语法。
- 应用协议按照预先定义的抽象语法构造协议数据单元,和对等系统的应用实体交换信息。
- 表示实体则对应用层数据进行编码,将其转换成二进制的比特串。
- 比特串由下层的传输实体在网络中传送。
二、ASN.1语法
巴科斯-诺尔范式(Backus-Nauer Form, BNF)定义。
文本约定(书写规则):
- 书写的布局是无效的,多个空格和空行等效于一个空格。
- 用于表示值和字段的标识符、类型指针和模块名由大小写字母、数字和短线组成。
- 标识符以小写字母开头。
- 类型指针和模块名以大写字母开头。
- ASN.l定义的内部类型全部用大写字母表示。
- 关键字全部用大写字母表示。
- 注释以一对短线(–)开始,以一对短线或行尾结束。
标签
ASN.l对每一个数据类型都赋予一个标签(tag)。
便于在传送数据时进行编码,有类型和值,数据类型编码后的值由标签的类型和值惟一确定。
四种标签类型:
- 通用标签:用关键字UNIVERSAL表示
- 应用标签:用关键字APPLICATION表示
- 上下文专用标签:用关键字Context-Specific表示
- 私有标签:用关键字PRIVATE表示
通用标签 UNIVERSAL
20多种
这些数据类型可分为4大类:
-
简单类型:由单一成分构成的原子类型
INTEGER,BOOLEAN,REAL,ENUMERATED,BIT STRING,OCTET STRING,NULL,OBJECT IDENTIFIER,CHARACTER STRING -
构造类型:由两种以上成分构成的构造类型
SEQUENCE,SEQUENCE OF,SET和SET OF -
标签类型:由已知类型定义的新类型
-
其他类型: 包括CHOICE和ANY两种
三、基本编码规则(BER编码)
对于SNMP来说,数据首先经过BER编码,再经由传输层协议(一般是UDP)发送给接收方,接收方在SNMP端口收到PDU,经过BER解码后,得到具体的SNMP操作数据。
BER编码后生成的结构为类型-长度-值三元组,简称TLV(Type, Length, Value)。
值部分还可以递归地再编码为TLV结构。
四、ASN.1宏定义
宏定义由类型表示、值表示和支持产生式三部分组成,而最后部分是任选的,是关于宏定义体中类型的详细语法说明。
宏实例的定义首先是对象名,然后是宏定义的名字,最后是宏定义规定的宏体部分。
ipInAddrErrors OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
::= { ip 5 }
- 宏表示:ASN.1提供的一种表示机制,用于定义宏。
- 宏定义:用宏表示定义的一个宏,代表一个宏实例的集合。
- 宏实例:用具体的值代替宏定义中的变量而产生的实例,代表一种具体的类型。
五、例题
1、用基本编码规则对不同长度字段L编码:L = 18,L = 180,L = 1044。
(1)L=18: 00010010
(2)L=180: 10000001 10110100
(3)L=1044: 10000010 00000100 00010100
2、假如某数据的标签值为1011001010,长度为255,试对其T和L进行编码。
T: XXX11111 10000101 01001010
L:10000001 11111111
3、对OBJECT IDENTIFIER system进行编码。
00000110 00000110 00101011 00000110 00000001
00000010 00000001 00000001