目录

  • 2020课程设计 Week1 Asn.1格式的学习
  • 一、简介
  • 二、ASN.1的基本语法规则
  • 三、ASN.1中的类型
  • 1.基本类型
  • 2.构造类型
  • 2.1SEQUENCE
  • 2.2SEQUENCE OF
  • 2.3SET
  • 2.4SET OF
  • 2.5使用ASN.1编写一个数据结构
  • 3.其他关键字

2020课程设计 Week1 Asn.1格式的学习

一、简介

  • ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。是定义抽象数据类型形式的标准,是用于描述数据表示、表示、传输、编码的记法。
  • ASN.1只包含信息结构,不处理具体业务数据,它不是一个编程语言
  • ASN.1没有限定编码方法,各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达),常见的编码规则有:基本编码规则(BER),规范编码规则(CER,CanonicalEncoding Rules)唯一编码规则(DER,DistinguishedEncoding Rules)压缩编码规则(PER,PackedEncoding Rules)和XML编码规则(XER,XMLEncoding Rules)。这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码。
  • ASN.1在OSI的ISO8824/ITU X.208(说明语法)ISO8825/ITU X.209(说明基本编码规则)规范。
  • 几个概念:
  • 实际语法:指诸如C、ObjectiveCaml等这样实际编程语言;
  • 抽象语法(AbstractSyntax):指ASN.1,是协议采用ASN.1规范描述的描述文本。描绘了与任何表示数据的编码技术无关的通用数据结构。抽象语法使得人们能够定义数据类型,并指明这些类型的值。抽象语法只描述数据的结构形式,与具体的编码格式无关,同时也不涉及这些数据结构在计算机内如何存放。
  • 传输语法(TransferSyntax):指表示层交换数据的表示方法,是实际通讯系统间的码流。当数据在两个表示层实体之间传输时,这些数据的实际比特模式表示方法就是传送语法。
  • 编码:指将抽象语言法转换成实际通讯系统间比特流;
  • 编码规则:将抽象语言法转换成实际通讯系统间比特流所遵循的语法规则;

二、ASN.1的基本语法规则

  • ASN.1使用巴科斯范式(BNF):
  • 在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。
  • 在双引号外的字(有可能有下划线)代表着语法部分。
  • 尖括号(< > )内包含的为必选项。
  • 方括号([ ] )内包含的为可选项。
  • 大括号({ } )内包含的为可重复0至无数次的项。
  • 竖线(| )表示在其左右两边任选一项,相当于"OR"的意思。
  • ::=是“被定义为”的意思。
  • 在ASN.1中,符号的定义没有先后次序:只要能够找到该符号的定义即可。
  • 所有的标识符、参考、关键字都要以一个字母开头,后接字母(大、小写都可以)、数字或者连字符“-”(但不能以连字符“-”结尾,也不能连续出现两个连字符),不能出现下划线“_”。注释以--开头,以--或行尾结束。
  • 关键字一般都是全部大写。
  • 在标识符中,只有类型和模块名字是以大写字母开头的,其它标识符都是以小写字母开头。
  • ASN.1中实数实际定义为三个整数:尾数、基数和指数。没有小数表示方式。
  • ASN.1不对空格、制表符、换行符和注释做翻译。但是在定义符号(或者分配符号Assignment)“::=”中不能有分隔符。

三、ASN.1中的类型

类型是一个非空的值的集合,可以被编码后传输。相比与高级语言中复杂的数据结构,ASN.1中的类型主要是为了数据的传输。

ASN.1中的类型分为基本类型(内建数据类型)和组合类型,组合类型由一个或多个基本类型构成。

1.基本类型

类型

含义

BIT STRING

比特串

BOOLEAN

布尔型

INTEGER

整数

NULL

空值

OBJECT IDENTIFIER

对象标识符

OCTET STRING

字节串

PrintableString

可打印字符串

UTCTime

“协调世界时”

GeneralizedTime

通用时间

2.构造类型

  • 复杂事物可以视为简单的事物集合或序列。
  • 集合是顺序无关的,而序列是顺序有关的。
  • 构造类型被用来描述复杂的事物,包括若干字段(简单类型或其他构造类型)。
  • ASN.1定义了四种构造方式,描述有序和无序的各种情况。

2.1SEQUENCE

  • 表示1个或多个字段组成的有序序列,例如:
ReportEntry ::= SEQUENCE { 
   author OCTET STRING, 
   title OCTET STRING, 
   body OCTET STRING, 
   biblioBook Bibliography 
   }
  • 用户定义的类型名和标识符大小写规定
    类型名 首字母为大写的驼峰式,如“ReportEntry”
    标识符 首字母为小写的驼峰式,如“biblioBook”

2.2SEQUENCE OF

  • 表示0个或多个特定类型字段的有序序列,例如:
Report ::= SEQUENCE SIZE (100) OF ReportEntry
 Report ::= SEQUENCE SIZE (MAX) OF ReportEntry

2.3SET

  • 表示1个或多个字段组成的无序集合,例如:
Menu ::=SET{
 	sandwich Food,
 	coke Beverage
 }

2.4SET OF

  • 表示0个或多个特定类型字段的无序集合,例如:
Class ::= SET SIZE (50) OF Student

2.5使用ASN.1编写一个数据结构

  • 基于各种构造方式,将基本数据类型经过层次嵌套,最终构造出能描述任何抽象事物的数据结构。
  • 例如:
Bibliography ::= SEQUENCE { 
   	author OCTET STRING 
   	title OCTET STRING 
   	publisher OCTET STRING 
   	year OCTET STRING 
   }

3.其他关键字

  • CHOICE:从若干类型中选择其一即可
  • ANY:构造类型中的某字段依赖于 其他字段的值 (ANY DIFINED BY)
  • OPTIONAL:构造类型中某字段可选
  • DEFAULT:指定构造类型中某字段的缺省值