抽象语法表示ASN.1

一、网络数据表示

抽象语法表示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

猜你喜欢

转载自blog.csdn.net/weixin_44366125/article/details/106196255