您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文档 > 第二章抽象语法表示ASN1
抽象语法表示ASN.1◦AbstractSyntaxNotation(ASN.1)是一种形式语言◦提供统一的网络数据表示,用于定义应用数据的抽象语法和应用协议数据单元的结构。◦OSI或SNMP管理信息库,都是用ASN.1定义的。基本编码规则BER◦BasicEncodingRule(BER)是一种编码规则◦用ASN.1定义的应用数据在传送过程中按照BER变换成比特串。数据具有语法和语义两个方面◦语法:指数据的表示形式,或者说构成数据的规则。◦语义:指数据的内容及其含义。同样的语义有不同的语法表示确定要表示信息的数据类型。对于不同类型的数据定义不同的操作。任何类型的数据最终都将被表示成为比特序列。比特序列不能说明它自身表示哪一种类型的数据,它所代表的意义会因计算机体系结构、程序设计语言等因素的不同而不同。网络中不同类型的计算机交互通信时,采用的“语法”不同,这种差异决定了同一数据对象在不同计算机中被表示为不同的比特序列。test.x=258;test.code=‘a’a0000000100000011a0000001100000001test.codetest.xtest.codetest.xhost1formathost2format为了保证同一数据对象在不同计算机中语义的正确性,实现在不同应用系统之间的信息交换。对于网络中n个异体的节点能互通,我们需要为每个节点编写(n-1)个编解码程序,即需要总数为n*(n-1)个编解码程序。ASN.1的作用是提供统一的网络数据表示在互相通信的端系统中至少有一个应用实体(如SNMP、TELNET、FTP等)和一个表示实体(即ASN.1)。表示实体定义了应用数据的抽象语法。应用协议按照预先定义的抽象语法构造协议数据单元,用于交换信息。表示实体则对应用层数据进行编码,将其转换成二进制的比特串进行传送。图2-1关于信息表示的通信系统模型实际语法(ConcreteSyntax):本地的,并且定义本地系统的数据表示方法。抽象语法(AbstractSyntax):定义了数据的常用结构(包括不同的数据类型),独立于任何编码技术的,只与应用有关。传输语法(TransferSyntax):提供从抽象语法表示的数据到比特序列,以及其相反操作的方法。编码规则(EncodingRule):提供了如何将抽象语法映射为传输语法。语法三元组:实际语法、抽象语法、传输语法抽象语法独立于任何编码技术,要满足应用的需要,能够定义应用需要的数据类型和表示这些类型的值。同等表示实体之间通信时对用户信息的描述和编码规则称为传输语法。ASN.1规范抽象语法表示应用一种编码规则BER(基本编码规则)CER(规范编码规则)传输语法多对多关系ASN.1已经应用到的通信协议与科学领域包括:◦通信领域,包括3GPP、4G移动通信◦智能交通系统ITS◦网络语音通信技术VoIP◦多媒体传输的标准◦安全相关系统,包括智能卡,电子商务中的身份确认卡等◦嵌入式系统的通信应用◦空中交通管制◦以及近年其他领域很多的应用。ASN.1是由原CCITT和ISO共同开发的标准语◦由ISO8824/ITU-TX.208定义◦一种数据类型描述语言◦独立于计算机架构和语言◦可容易地映射成C或C++或Java的数据结构◦与多个标准化编码规则相关ASN.1数据类型定义库发送数据结构ASN.1数据结构ASN.1数据标识编码语法规则:数据结构、类型、顺序的描述编码规则:将语法部分的描述的数据进行编码,编为二进制数据流,以便在网络上传输或解码。◦基本编码规则(BasicEncodingRules,BER)ASN.1的两个根本问题?ASN.1的文本约定◦(1)多个空格和空行等效于一个空格。◦(2)所有的标识符、参考、关键字都要以一个字母开头,后接字母(大、小写都可以)、数字或者连字符“-”(但不能以连字符“-”结尾,也不能连续出现两个连字符),不能出现下划线“_”。合法的:INTEGERv1515No-final-dashMY-CLASS不合法的:Final-dashdouble--underscore15153MASN.1的文本约定◦(3)关键字一般都是全部大写的,除了一些字符串类型,如PrintableString,UTF8String,等,因为这些都是由原类型OCTETSTRING衍生出来的。◦(4)在标识符中,只有类型和模块名字是以大写字母开头的,其它标识符都是以小写字母开头的。◦(5)注释以一对短线(--)开始,以一对短线或行尾结束。在ASN.1中,每一个数据类型都有一个标签(tag)标签有类型和值,数据类型由标签的类型和值唯一确定。数据类型标签(tag)值(tag)P23表2-3标签的类型分为以下4种:◦通用标签:UNIVERSAL表示,由标准定义的。◦应用标签:APPLICATION表示,是由某个具体应用定义的类型。◦上下文专用标签:Context-Specific表示,这种标签在一定范围)中适用。◦私有标签:PRIVATE表示,用户定义的标签。ANSI.1定义的数据类型有20多种,标签类型都是UNIVERSAL,如表2-3所示。可分为4大类。◦简单类型:由单一成分构成的原子类型,包括INTEGER,BOOLEAN,...◦构造类型:由两种以上成分构成的构造类型,包括SEQUENCE,SEQUENCEOF,...◦标签类型:由已知类型定义的新类型。◦其他类型:包括CHOICE和ANY两种类型。新类型的名字::=类型描述◦其中:◦新类型的名字是一个以大写字母开头的标识符;◦类型描述是基于内建类型或在其它地方定义的类型。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:类型名关键字新的值的名字该值的类型::=值描述◦其中:◦新的值的名字是以小写字母开头的标识符;◦该值的类型可以是一个类型的名字,也可以是类型描述;◦值描述是基于整数、字符串、标识符的组合。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:marriedMarried=FALSEageAge::=20pitcurePicture::=‘01101’B标识符类型名值1.简单类型◦(1)INTERGER:ASN.1中没有限制整数的位数,即它可以是任意大小的整数。例子:ColorType::=INTEGERcolorAColorType::=1这里说明了一个ColorType类型的变量colorA,并将值赋为1。1.简单类型◦(2)BOOLEAN:布尔型,取值为TRUE或FALSE。所有可归结为二值形式的问题回答都可以表示为布尔型。例子:1.简单类型◦(3)实数类型,对精度没有限制,可以表示为科学计数法:M×BE,其中尾数M和指数E可以取任何正或负整数值,基数B可以取2或10。如:3.14*105{M,B,E}{314,10,3}例如:1.简单类型◦(4)ENUMERATED,枚举类型,实际上是一组个数有限的整数值。可以给每个整型值赋予不同的意义。例2.3Week::=ENUMERATED{Monday(1),Tuesday(2),Wednesday(3),Thursday(4),Friday(5),Saturday(6),Sunday(7)}weekWeek::=Monday◦例2.4对于SNMP的MIB中,在获取响应信息中的错误状态如下所示。ErrorStatus::=ENUMERATED{noError(0),tooBig(1),noSuchname(2),badValues(3),readOnly(4),genError(5)}(5)BITSTRING,位串类型,由0个或多个比特组成的有序位串。位串的值可以由对应的二进制或十六进制串表示。单引号引用的二进制串后加大写字母B:‘01101’B单引号引用的十六进制串后加大写字H:‘0123456789ABCDEF’H例如:Occupation::=BITSTRINGjackOccupation::=‘0110’B(6)OCTETSTRING,八位位组串,由0个或多个8位位组组成的有序串。和位串类型一样,八位位组串也可以用对应的二进制或十六进制串表示。例如:◦NumbericString:包含数字0到9及空格。◦PrintableString:包含所有大小字母、数字、标点、以及空格◦IA5String:由取自IA5(5号国际字母表)的字母组成,它和ASCII基本相同。◦VisibleString:由取自IA5的图形字符组成,不含控制字符集。◦GeneralString:包含所有的标准字符。NumString::=NumericStringstr1NumString::=“1234567890”Surname::=PrintableStringpersonSurname1Surname::=“John”例如:◦(7)OBJECTIDENTIFIER,对象标识符,从对象树派生出的一系列点分数字串的形式,用来唯一标识对象。在ASN.1中对象集合按照树形结构组织,树的每个分支被赋予一个整数标识。对象标识符是从根节点开始到对象节点路径上边标识的顺序连接,它是对象的唯一标识。例如:internetOBJECTINDETIFIER::={iso(1)org(3)dod(6)1}名字形式:iso.org.dod.1数字形式:1.3.6.1◦(8)NULL,空值类型,它仅包含一个值—NULL,主要用于位置的填充。如果某个时刻无法得知数据的准确值,简单的方法就是将这一数据定义为NULL类型。还可以用NULL表示序列中可能缺省的某个元素。2.构造类型构造类型有序列和集合两种:序列SEQUENCESEQUENCEOF(元素类型必须相同)集合SETSETOF(元素类型必须相同)(元素有序)(元素无序)类似:C语言中的结构体类似:C语言中的数组2.构造类型◦(1)SEQUENCE,序列类型,是包含0个或多个组成元素的有序列表。每个元素由元素名和元素类型组成,元素类型可以是简单类型,也可以是定义的其他构造类型。序列类型序列类型的一个值2.构造类型◦(1)SEQUENCE,元素类型标识符后可以跟如下3个关键字。OPTIONAL:元素项可选。DEFAULT:具有默认值。COMPONENTSOF表示它包含了给定序列中的所有组成元素。例2.6AirlineFlight::=SEQUENCE{airlineIA5STRING,flightIA5STRING,seatsSEQUENCE{maximumINTEGER,occupiedINTEGER,vacantINTEGER,},airportSEQUENCE{originIA5STRING,stop[0]IA5STRINGOPTIONAL,stop[1]IA5STRINGOPTIONAL,destinationIA5STRING},crewsizeENUMERTAED{six(6),eight(8),ten(10)},cancelBOOLEANDEFAULTFALSE}序列类型可选默认值它的一个实例是airplane1AirlineFlight::={airlinechina,flightC3416,seats{320,280,40},airport{originalQingdao,stop[0]TaiYuan,destinationWuLuMuQi},crewsize10}或airplane1::={china,C3416,{320,280,40},{originalQingdao,stop[0]TaiYuan,destinationWuLuMuQi},10}2.构造类型◦(1)COMPONENTSOF表示它包含了给定序列中的所有
本文标题:第二章抽象语法表示ASN1
链接地址:https://www.777doc.com/doc-2126886 .html