版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章抽象语法表示抽象语法表示ASN.1AbstractSyntaxNotation(ASN.1)是一种形式语言提供统一的网络数据表示,用于定义应用数据的抽象语法和应用协议数据单元的结构。OSI或SNMP管理信息库,都是用ASN.1定义的。基本编码规则BERBasicEncodingRule(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网络数据表示2.1网络数据表示图2-1关于信息表示的通信系统模型表示层的基本概念实际语法(ConcreteSyntax):本地的,并且定义本地系统的数据表示方法。抽象语法(AbstractSyntax):定义了数据的常用结构(包括不同的数据类型),独立于任何编码技术的,只与应用有关。传输语法(TransferSyntax):提供从抽象语法表示的数据到比特序列,以及其相反操作的方法。编码规则(EncodingRule):提供了如何将抽象语法映射为传输语法。语法三元组:实际语法、抽象语法、传输语法抽象语法独立于任何编码技术,要满足应用的需要,能够定义应用需要的数据类型和表示这些类型的值。同等表示实体之间通信时对用户信息的描述和编码规则称为传输语法。抽象语法标记ASN.1的作用ASN.1规范抽象语法表示应用一种编码规则BER(基本编码规则)CER(规范编码规则)传输语法多对多关系ASN.1用于领域ASN.1已经应用到的通信协议与科学领域包括:通信领域,包括3GPP、4G移动通信智能交通系统ITS网络语音通信技术VoIP多媒体传输的标准安全相关系统,包括智能卡,电子商务中的身份确认卡等嵌入式系统的通信应用空中交通管制以及近年其他领域很多的应用。ASN.1是由原CCITT和ISO共同开发的标准语由ISO8824/ITU-TX.208定义一种数据类型描述语言独立于计算机架构和语言可容易地映射成C或C++或Java的数据结构与多个标准化编码规则相关2.2
ASN.1语法2.2
ASN.1语法ASN.1数据类型定义库发送数据结构ASN.1数据结构ASN.1数据标识编码语法规则:数据结构、类型、顺序的描述编码规则:将语法部分的描述的数据进行编码,编为二进制数据流,以便在网络上传输或解码。基本编码规则(BasicEncodingRules,BER)2.2
ASN.1语法ASN.1的两个根本问题?ASN.1的文本约定(1)多个空格和空行等效于一个空格。(2)所有的标识符、参考、关键字都要以一个字母开头,后接字母(大、小写都可以)、数字或者连字符“-”(但不能以连字符“-”结尾,也不能连续出现两个连字符),不能出现下划线“_”。2.2
ASN.1语法合法的:INTEGERv1515No-final-dashMY-CLASS不合法的:Final-dashdouble--underscore15153MASN.1的文本约定(3)关键字一般都是全部大写的,除了一些字符串类型,如PrintableString,UTF8String,等,因为这些都是由原类型OCTETSTRING衍生出来的。(4)在标识符中,只有类型和模块名字是以大写字母开头的,其它标识符都是以小写字母开头的。(5)注释以一对短线(--)开始,以一对短线或行尾结束。2.2
ASN.1语法2.2
ASN.1语法2.2.1抽象数据类型在ASN.1中,每一个数据类型都有一个标签(tag)标签有类型和值,数据类型由标签的类型和值唯一确定。数据类型标签(tag)值(tag)P23表2-32.2.1抽象数据类型标签的类型分为以下4种:通用标签:UNIVERSAL表示,由标准定义的。应用标签:APPLICATION表示,是由某个具体应用定义的类型。上下文专用标签:Context-Specific表示,这种标签在一定范围)中适用。私有标签:PRIVATE表示,用户定义的标签。2.2.1抽象数据类型ANSI.1定义的数据类型有20多种,标签类型都是UNIVERSAL,如表2-3所示。可分为4大类。简单类型:由单一成分构成的原子类型,包括INTEGER,BOOLEAN,...构造类型:由两种以上成分构成的构造类型,包括SEQUENCE,SEQUENCEOF,...标签类型:由已知类型定义的新类型。其他类型:包括CHOICE和ANY两种类型。ASN.1类型定义的方法<新类型的名字>::=<类型描述>
其中:<新类型的名字>是一个以大写字母开头的标识符;<类型描述>是基于内建类型或在其它地方定义的类型。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:类型名关键字ASN.1值定义的方法<新的值的名字><该值的类型>::=<值描述>
其中:<新的值的名字>是以小写字母开头的标识符;<该值的类型>可以是一个类型的名字,也可以是类型描述;<值描述>是基于整数、字符串、标识符的组合。Married::=BOOLEANAge::=INTEGERPicture::=BITSTRING如:marriedMarried=FALSEageAge::=20pitcurePicture::=‘01101’B标识符类型名值2.2.1抽象数据类型1.简单类型(1)INTERGER:ASN.1中没有限制整数的位数,即它可以是任意大小的整数。例子:
ColorType::=INTEGER colorAColorType::=1
这里说明了一个ColorType类型的变量colorA,并将值赋为1。2.2.1抽象数据类型1.简单类型(2)BOOLEAN:布尔型,取值为TRUE或FALSE。所有可归结为二值形式的问题回答都可以表示为布尔型。例子:
2.2.1抽象数据类型1.简单类型(3)实数类型,对精度没有限制,可以表示为科学计数法:M×BE,其中尾数M和指数E可以取任何正或负整数值,基数B可以取2或10。如:3.14*105
{M,B,E}{314,10,3}例如:2.2.1抽象数据类型1.简单类型(4)ENUMERATED,枚举类型,实际上是一组个数有限的整数值。可以给每个整型值赋予不同的意义。2.2.1抽象数据类型例2.3
Week::=ENUMERATED{Monday(1),
Tuesday(2),
Wednesday(3),
Thursday(4),
Friday(5),
Saturday(6),
Sunday(7)}weekWeek::=Monday2.2.1抽象数据类型例2.4对于SNMP的MIB中,在获取响应信息中的错误状态如下所示。ErrorStatus::=ENUMERATED{noError(0),
tooBig(1),
noSuchname(2),
badValues(3),
readOnly(4),
genError(5)}2.2.1抽象数据类型(5)BITSTRING,位串类型,由0个或多个比特组成的有序位串。位串的值可以由对应的二进制或十六进制串表示。单引号引用的二进制串后加大写字母B:‘01101’B单引号引用的十六进制串后加大写字H:‘0123456789ABCDEF’H例如:Occupation::=BITSTRINGjackOccupation::=‘0110’B2.2.1抽象数据类型(6)OCTETSTRING,八位位组串,由0个或多个8位位组组成的有序串。和位串类型一样,八位位组串也可以用对应的二进制或十六进制串表示。例如:2.2.1抽象数据类型NumbericString:包含数字0到9及空格。PrintableString:包含所有大小字母、数字、标点、以及空格IA5String:由取自IA5(5号国际字母表)的字母组成,它和ASCII基本相同。VisibleString:由取自IA5的图形字符组成,不含控制字符集。GeneralString:包含所有的标准字符。NumString::=NumericStringstr1NumString::=“1234567890”Surname::=PrintableStringpersonSurname1Surname::=“John”例如:2.2.1抽象数据类型(7)OBJECTIDENTIFIER,对象标识符,从对象树派生出的一系列点分数字串的形式,用来唯一标识对象。在ASN.1中对象集合按照树形结构组织,树的每个分支被赋予一个整数标识。对象标识符是从根节点开始到对象节点路径上边标识的顺序连接,它是对象的唯一标识。例如:
internetOBJECTINDETIFIER::={iso(1)org(3)dod(6)1}名字形式:.dod.1数字形式:2.2.1抽象数据类型(8)NULL,空值类型,它仅包含一个值—NULL,主要用于位置的填充。如果某个时刻无法得知数据的准确值,简单的方法就是将这一数据定义为NULL类型。还可以用NULL表示序列中可能缺省的某个元素。2.2.1抽象数据类型2.构造类型构造类型有序列和集合两种:
序列SEQUENCESEQUENCEOF(元素类型必须相同)集合SETSETOF(元素类型必须相同)(元素有序)(元素无序)类似:C语言中的结构体类似:C语言中的数组2.2.1抽象数据类型2.构造类型(1)SEQUENCE,序列类型,是包含0个或多个组成元素的有序列表。每个元素由元素名和元素类型组成,元素类型可以是简单类型,也可以是定义的其他构造类型。序列类型序列类型的一个值2.2.1抽象数据类型2.构造类型(1)SEQUENCE,元素类型标识符后可以跟如下3个关键字。OPTIONAL:元素项可选。DEFAULT:具有默认值。COMPONENTSOF表示它包含了给定序列中的所有组成元素。2.2.1抽象数据类型例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}序列类型可选默认值2.2.1抽象数据类型它的一个实例是airplane1AirlineFlight::={airline"china",
flight"C3416",
seats{320,280,40},
airport{original"Qingdao",stop[0]"TaiYuan",destination"WuLuMuQi"},
crewsize10}或airplane1::={"china","C3416",{320,280,40},{original"Qingdao",stop[0]"TaiYuan",destination"WuLuMuQi"},10}2.2.1抽象数据类型2.构造类型(1)COMPONENTSOF表示它包含了给定序列中的所有组成元素。TypeCompOfSet::=SEQUENCE{oBITSTRING,tNULL,iPrimtableString,aBOOLEAN,bINTEGERDEFAULT0,cREALOPTIONAL}TypeSet::=SEQUENCE{aBOOLEAN,bINTEGERDEFAULT0,cREALOPTIONAL}TypeCompOfSet::=SET{oBITSTRING,tNULL,iPrimtableString,COMPONENTSOFTypeSet}2.2.1抽象数据类型(2)SEQUENCEOF,单纯序列(数组)类型,即序列中的各项都属于同一类型,可以看作是SEQUENCE类型的特例。例2.7定义了座位号类型Seats,因为座位号都是整数,所以可以使用单纯序列类型。例2.7
Seats::=SEQUENCEOFINTEGER2.2.1抽象数据类型(3)SET,集合类型,是包含0个或多个组成元素的无序集合。例2.8Student::=SET{numberINTEGER,
nameIA5STRING,
ageINTEGER,
genderENUMBERTED{male(0),female(1),
majorIA5STRING}
{20040320,"LiYong",19,{0},"NetworkEngine"},
{20040720,“WangHua”,20,{1},“ComputerApplication”},。Student类型的实例:2.2.1抽象数据类型(4)SETOF,单纯集合类型,是包含0个或多个组成同类型的元素的无序集合。例2.9VipSeats::=SETOFINTEGERvipseatsVipSeats::={60,80,120}2.2.1抽象数据类型3.标签类型所谓标签类型是指应用或用户加在某个类型上的Tag
。总结,有两种情况需要给一个现有的类型加上Tag:首先是一个类型可以有多个类型名;另外,在一个结构(序列或集合)中,可以用CONTEXT-SPECIFIC标签区分类型相同的元素。2.2.1抽象数据类型3.标签类型例子:
Exuniv::=[UNIVERSAL2]INTEGER valAExuniv::=9 Exappl::=[APPLICATION0]INTEGER valBExappl::=10 Expriv::=[PRIVATE1]INTEGER valCExpriv::=11 Excont::=SET{type1[0]INTEGEROPTIONALtype2[1]INTEGEROPTIONAL}新的类型2.2.1抽象数据类型3.标签类型标签声明模式
可以声明标签类型是隐含的或显式的,分别用关键字
IMPLICIT和EXPLICIT(可省略)表示。隐含标签的语义是用新标签替换原标签,所以编码时只编码新标签。显式标签的语义是在一个基类型上加上新标签,从而导出一个新类型。2.2.1抽象数据类型3.标签类型标签声明模式
例子:Expriv::=[PRIVATE1]INTEGER(显式的)在传输Expriv类型的数据时,要传输INTEGER本身的标签[UNIVERSAL2],以及新标签[PRIVATE1]
。
Expriv::=[PRIVATE1]IMPLICITINTEGER在传输Expriv类型的数据时,只传新标签[PRIVATE1]。2.2.1抽象数据类型4.其他类型CHOICE和ANY是两个没有标签的类型,因为它们的值是未定的,而且类型也是未定的。当这种类型的变量被赋值时,它们的类型和标签才能确定。CHOICE:选一ANY:未定2.2.1抽象数据类型4.其他类型 (1)CHOICE,选择类型,包含一个可供选择的数据类型列表。数据可能在不同情况下取不同的值。例2.11Prize::=CHOICE{carIA5STRING,
cashINTEGER,
nothingBOOLEAN}prize1Prize::=car:”2500“Prize2Prize::=nothing:TRUE选择类型选择类型值2.2.1抽象数据类型(2)ANY,定义数据时不能确定数据的类型,可以使用ANY类型。例2.12Book::=SEQUENCE{authorIA5STRING,
referenceANY}{author"Martin",referenceIA5STRING"ISBN007895“}{author"Martin",referenceINTEGER1998}2.2.2子类型子类型是由限制父类型的值集合而导出的类型,所以子类型的值集合是父类型的子集。子类型还可以产生子类型,产生子类型的方法有以下6种。1.单个值(SingleValue)列出子类型可取的各个值。例如,TestResule::=INTEGER(0|1|2)表示TestResult可以取0、1或2中的一个值。2.2.2子类型2.值区间(ValueRange)这种方法只能用于整数和实数,指出子类型可取的区间。例如,EmployeeNumber::=INTEGER(1000..20000)表示该变量取整数值,范围为1000~20000。2.2.2子类型3.允许字符(PermittedAlphabet)允许字符只能用于字符串类型,限制字符集的取值范围例如:HouseSize::=IA5STRING(FROM(“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”))Morse::=PrintableString(FROM("."|"-"|""))IDCardNumber::=NumericString(FROM("0".."9"))TouchToneButtons::=IA5String(FROM("0".."9"|"*"|"#"))
2.2.2子类型4.限制大小(SizeConstrained)可以限制5种类型(BITSTRING,OCTETSTRING,CHARACTERSTRING,SEQUENCEOF,SETOF)的规模大小。例如,WorkstationNumber::=OCTETSTRING(SIZE(32))表示该变量的值为32个字节的串。StringOf31BitsAtTheMost::=BITSTRING(SIZE(0..31))(可变)2.2.2子类型5.包含子类型(ContainedSubtype)从已有的子类型定义新的子类型,新子类型包含原子类型的全部可能的值。用关键字INCLUDES,说明被定义的类型包含了已有类型的所有的值。例如,Months::=ENUMERATED{January(1),February(2),March(3),April(4),May(5),June(6),July(6),August(8),September(9),October(10),November(11),December(12)}First-quarter::=Months(January,February,March)Second-quarter::=Months(April,May,June)First-half::=Months(INCLUDES
First-quarter|INCLUDESSecond-quarter)2.2.2子类型6.内部子类型(InnerSubtype)可用于序列、集合、CHOICE类型。是一种复杂的子类型关系。
-对于SEQUENCEOF和SETOF使用WITHCOMPONENT来添加约束。
例子1:TextBlock::=SEQUENCEOFVisibleString子类型:AddressBlock::=TextBlock(WITHCOMPONENT(SIZE(1..32)))这个定义相当于:AddressBlock::=SEQUENCEOFVisibleString(SIZE(1..32))2.2.2子类型6.内部子类型(InnerSubtype)对于SEQUENCE和SET使用WITHCOMPONENTS来添加约束,注意关键字结尾有S,因为SEQUENCE和SET成员是不同类型的。例子2:Quadruple::=SEQUENCE{alpha ENUMERATED{state1,state2,state3},beta IA5StringOPTIONAL,gamma SEQUENCEOFINTEGER,delta BOOLEANDEFAULTTRUE}子类型:Quadruple1::=Quadruple(WITHCOMPONENTS
{...,alpha(state1),gamma(SIZE(5))})(符号“…”指示只对显式声明的成员进行约束,其它成员保留。注意对SEQUENCE类型,声明约束时仍然要保持成员的顺序。)2.2.3应用类型ASN.1中的应用类型与特定的应用有关。对于SNMP,RFC1155定义了以下应用类型。1.NetWorkAddress::=CHOICE{internetIpAddress}这种类型用ASN.1的CHOICE构造定义,可以从各种网络地址中选择一种。目前只有Internet地址,即IP地址。2.IpAddress::=[APPLICATION0]IMPLICITOCTETSTRING(SIZE(4))以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节。2.2.3应用类型3.Counter::=[APPLICATION1]IMPLICITINTEGER(0..4294977295)计数器类型是一个非负整数,其值可增加,但不能减少,达到最大值232−1后回零,再从头开始增加。计数器可用于计算收到的分组数或字节数。4.Gauge::=[APPLICATION2]INTEGER(0..4294977295)计量器类型是一个非负整数,其值可增加,也可减少。最大值为232−1,与计数器不同的是计量器达到最大值后不回零,而是锁定在232−1,直到复位,计量器可用于表示存储在缓冲队列中的分组数。2.2.3应用类型5.TimeTicks::=[APPLICATION3]INTEGER(0..4294977295)时钟类型是非负整数,从1~232−1,时钟单位以0.01s递增,可表示从某个事件(如设备启动)开始到目前经过的时间。6.Opaque::=[APPLICATION4]OCTETSTRING不透明类型即未知数据类型,或者说可以表示任意类型。这种数据编码时按照OCTETSTRING处理,管理站和代理能解释这种类型。2.3ASN.1基本编码规则BER用ASN.1表示的变量必须转换为串行的字节流才能在网络中传输。基本编码规则(BasicEncodingRules,BER):转换文本ASN.1语法到机读代码的算法ASN.1用BER来描述传输过程中内容BER在ISO8825/X标准中进行了定义。2.3.1BER编码结构BER传输语法的格式是TLV三元组<标签Tag,长度Length,值Value>。标签(Tag)字段是关于标签类别和编码格式的信息;长度(Length)字段表示值(Value)字段的数据长度值(Value)字段包含实际的数据。图2-2BER编码的结构2.3.1BER编码结构BER传输语法是基于八位组(由8比特组成,是编码的基本单位)大端编码的其八位组中的二进制编号从8到1,高8位在左,约定第8位是最高有效位,第1位是最低有效位。图2-3BER编码的结构2.3.1BER编码结构2.3.1BER编码结构图2-5标签字段8752.3.1BER编码结构2.长度字段BER编码中Length表示Value部分所占八位组的个数格式主要有两大类:(1)确定格式:短、长两种格式。(2)不确定格式2.长度字段(1)确定格式
若L>127若L<=127表示Length长度表示长度VLAUE2.长度字段(2)不确定格式
0X80LV0x000x002.3.1BER编码结构编码规则:(1)若编码是简单类型,则使用确定格式。(2)若编码是构造类型,并且编码立即可用,则既可以使用确定格式,也可以使用非确定格式,由发送者选择。(3)若编码是构造类型,但编码不是立即可用,则使用非确定格式。2.3.1BER编码结构3.值字段内容字段由0个或多个八位组组成,并根据不同类型数据值的不同规定对它们进行编码。2.3.2编码举例以UNIVERSALTag和短型Value为例,介绍各种类型的BER编码,重点关注Value部分。1.BOOLEAN布尔值的编码是简单类型,其值由1个八位组组成。FlASE编码000000010000000100000000通用标签简单类型标签号2.3.2编码举例以UNIVERSALTag和短型Value为例,介绍各种类型的BER编码,重点关注Value部分。1.BOOLEAN布尔值的编码是简单类型,其值由1个八位组组成。TRUE编码非0即为真2.3.2编码举例2.NULL空值的编码是简单类型。不需要使用值八位组,相应的长度值0。空值的标签是UNIVERSAL5,所以编码为0500H2.3.2编码举例3.INTEGER整数值的编码是简单类型,其值由1个或多个八位组组成。整数值采用二进制补码形式编码。对于正数,如果最高比特位为0则直接编码;如果为1,则在最高比特位之前增加一个全0的八位组;对于负数,先取绝对值,再取反,最后加1。2.3.2编码举例例如,127的编码02017F。其中第一个字节表示整数类型的标签(UNIVERSAL2),第二个字节表示值部分的长度为1个字节。256的编码02020100H。−129的编码0202FF7FH。2.3.2编码举例4.REAL实数值的编码是简单类型,其值由1个或多个八位位组组成。2.3.2编码举例4.REAL(1)字符编码(2)二进制编码字符编码形式TLV每一位串表示字符的ASCII码(2)二进制编码TLVS表示正负号B表示基数(2,8,16)F比例因子(0,1,2,3)LE表示指数位的长度S*M*BE*2FFF2.3.2编码举例5.BITSTRING位串值的编码可以是简单类型,也可以是构造类型。BITSTRING:需要增加表征补充位个数的八位组位串编码:0A3B5F291CD0H补了4位2.3.2编码举例5.BITSTRING采用构造编码则为:23
800303000A3B 0305045F291CD0
将位串值拆为(0A3B)和(5F291CD)两部分,如图2-10所示。位串编码:0A3B5F291CD2.3.2编码举例6.OCTETSTRING字节串值的编码与BITSTRING类似,但是不需要增加表征补充位个数的八位组。OCTETSTRING类型值‘0123456789abcdef’H的编码:04
080123456789abcdefOCTETSTRING类型值‘ACE’H的编码:04
02ACE02.3.2编码举例7.OBJECTIDENTIFIER标识符形式{136100}编码后的第一个标识符的值:(X*40)+Y。{1*40+36100}因此,编码子标识符数比实际对象全部字标识符数少1。06H长度…10N个子标识符该标识符最后一个8位组其余8位组2.3.2编码举例7.OBJECTIDENTIFIER对象标识符{joint-iso-ccitt1003},即{21003},计算得到2×40+100=180,因此按照{1803}编码为:0603813403H。1801011010010000001001101000000001181340310000001
001101002.3.2编码举例8.SEQUENCE序列值的编码是构造类型。值八位组由序列类型ASN.1定义中列出的每个类型的一个数据值得完整编码组成,除非该类型带有关键字“OPTIONAL”或“DEFAULT”,否则这些值的编码可以不出现。30H2.3.2编码举例8.SEQUENCE例如,序列类型{nameIA5StringokBOOLEAN},值{name“john”,okTRUE},可以编码为:300A1605736D6974680101FF。按照序列结构可以展开为00110000构造类型标签号162.3.2编码举例9.SET与SEQUENCE类似,但是由于集合类型的元素是无序的,故有多种编码,成员顺序由发送者决定。例如,SET{breadthINTEGER,bentBOOLEAN}的值{breadth7,bentFALSE}的编码为:31
06
020107
010100;也可以是31
06
010100
020107。成员的顺序可以改变。SMNP抓包举例2.4宏定义1.模块定义ASN.1的基本单位是模块,类似于C语言中的结构,用于定义一个抽象数据类型ASN.1模块实际上是由一组类型定义和值定义组成。类型定义就是说明类型的名称和类型的格式。值定义则是规定将什么样的具体值赋给某一类型的变量。可以用名字引用一个已定义的模块。模块定义<modulereference>DEFINITIONS::=BEGINEXPORTSIMPORTSAssignmentListEND
其中的modulereference是模块名,第一个字母大写。
EXPORTS构造用于定义可供其他模块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 污水深度处理再回用项目可行性实施报告
- 保安服务管理制度汇编
- 废旧橡胶轮胎综合利用深加工技改项目可行性研究报告
- 2024年七年级下册语文教学工作总结篇
- 三方协议收款合同模板
- 山东省高校毕业生就业协议书模板
- 销售人员月度工作个人总结5篇
- 铣刨道路面层施工
- 行政经理年度述职报告
- 地下通信管道挖机租赁合同协议书
- YY∕T 1782-2021 骨科外固定支架力学性能测试方法(高清最新版)
- 西亚教学设计与反思
- 乙酸乙酯的反应器设计流程图
- EM277的DP通讯使用详解
- 耐压绝缘测试报告
- 野兽派 beast 花店 调研 设计-文档资料
- 水泵房每日巡视检查表
- 杭州市区汽车客运站临时加班管理规定
- 垫片冲压模具设计毕业设计论文
- 冷库工程特点施工难点分析及对策
- Python-Django开发实战
评论
0/150
提交评论