zoukankan      html  css  js  c++  java
  • 2020课程设计 Week1 Asn.1格式的学习

    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:指定构造类型中某字段的缺省值
  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/Brass/p/12711196.html
Copyright © 2011-2022 走看看