抽象语法表示ASN.1 填空题.doc
如有侵权,请联系网站删除,仅供学习与交流抽象语法表示ASN.1 填空题【精品文档】第 9 页第二章 抽象语法表示ASN.1填空选择题一、网络数据表示P231、ASN.1(抽象语法表示):一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。P232、表示层的功能:提供统一的网络数据表示。P233、表示实体定义了应用数据的抽象语法。4、传输语法:把抽象数据变换成比特串的编码规则。P235、抽象语法用于定义应用数据,它类似程序设计语言定义的抽象数据类型。P23二、ASN.1的基本概念P24-311、作为一种形式语言,ASN.1有严格的BNF定义。P242、在ASN.1中,每一个数据类型都有一个标签(tag),标签有类型和值。P243、ASN.1标签的类型分为4种,分别是:通用标签、应用标签、上下文专用标签和私有标签。P24l 通用标签UNIVERSAL:由标准定义,适用于任何应用;l 应用标签APPLICATION:是由某个具体应用定义的类型;l 上下文专用标签CONTEXT SPECIFIC:这种标签在文本的一定范围(例如,一个结构struct)中适用;l 私有标签PRIVATE:用户定义的标签。4、ASN.1定义的数据类型可分为4类:分别为简单类型、构造类型、标签类型、其他类型。这些数据类型的标签值均为通用标签Universal,有20多种。P24 简单类型:由单一成分构成的原子类型;ASN.1定义的数据类型中除了序列SEQUENCE和集合SET两种类型不属于简单类型外,其他10多种均属于简单类型。P25 构造类型:由两种以上成分构成的构造类型,如序列SEQUENCE、集合SET类型。 标签类型:由已知类型定义的新类型; 其他类型:包括CHOICE和ANY两种类型。 以下是ASN.1标签和类型关系图:6、枚举类型ENUMERATED:是一个整数的表,每一个整数有一个名字。枚举类型与整数类型区别在于整数类型可以进行算术运算而枚举类型不能进行任何算术运算,也即枚举类型的值只是用证书表示的一个符号,而不具有整数的性质。P267、对象类型OBJECT IDENTIFIER:泛指网络中传输的任何信息对象,其值是一个对象标识符,由一个整数序列组成,它惟一地标识一个对象。P268、NULL类型:是空类型、没有值、只占用结构的一个位置。P269、时间类型:有GeneralizedTime类型和UTC类型两种:P261)GeneralizedTime时间类型格式:如值20000721182053.7,表示2007年7月21日,当地时间18点20分53.7秒;2)UTC时间类型格式:如值20000721182053.7Z,表示同样的时间。10、构造类型:有序列和集合两种,序列和集合的区别是:序列是有序的,而集合是无序的。P261)序列:用SEQUENCE表示不同类型元素的序列,用SEQUENCE OF表示相同类型元素的序列。2)集合:用SET表示不同类型的集合,用SET OF表示相同类型元素的集合。11、标签类型:指应用或用户加在某个类型上的标签,也即由已知类型定义的新类型。P2712、在一个结构(序列或集合)类型中,可用上下文专用标签如1、2、3类似来区分类型相同的元素。例如,Parentage:=SET P28SubjectName1 IMPLICIT IA5String,MotherName2 IMPLICIT IA5String OPTIONAL,FatherName3 IMLICIT IA5String OPTIONAL 在结构类型Parentage中,为这三个元素SubjectName、MotherName、FatherName使用的标签1、2、3就是上下文专用标签(简称上下文标签)。13、关键字IMPLICIT(隐含)和EXPLICIT(明示):标签类型可以是隐含的或明示的,两者区别:P281)隐含标签的语义是用新标签替换老标签,编码时只编码新标签。 2)明示标签类型是把基类型作为惟一元素的构造类型,在编码时,新老标签都要编码。14、其他类型:CHOICE和ANY类型是两个没有标签的类型,因为它们的值是未定的,而且类型也是未定的。(从而得知在ASN.1中,并不是每个数据类型(包括CHOICE和ANY)都有标签)当这种类型的变量被赋值时,它们的类型和标签才确定,可以说标签是运行时间确定的。P281)CHOICE是可选类型的一个表,仅其中一个类型可以被采用,产生一个值,这些成分类型是已知的,但是在定义时尚未确定。2)ANY类型:表示任意类型的任意值,与CHOICE类型不同之处在于实际出现的类型也是未知的,15、子类型:是由限制父类型的值集合而导出的类型,所以子类型的值集合是父类型的子集。产生子类型的方法有单个值、包含子类型、值区间、可用字符、限制大小和内部子类型6种方法。其中 P28-301)值区间方法只能应用于整数和实数类型,指出子类型可取值的区间。2)可用字符方法只能用于字符串类型,限制可使用的字符集。3)限制大小方法可对5种类型(比特串类型、字节串类型、字符串类型、序列和集合类型)限制其规模大小(如限制比特串、字节串、字符串的长度,限制序列或集合的元素个数)。4)内部子类型方法可用于序列、集合和CHOICE类型。简答、论述题集三、基本编码规则P32-341、基本编码规则BER:把ASN.1表示的抽象类型值编码为字节串。这种字节串的结构为类型长度值,简称TLV(Type-Length-Value),而值部分value可递归地再编码为TLV结构,如图所示:P321)第一个字节(8位)为类型TYPE,用来表示ASN.1类型或用户定义的类型。这个字节的前两位用来区分4种标签(00为通用标签、01为应用标签,10位上下文专用标签、11为私有标签);第三位用0或1来区分简单类型还是构造类型;剩余5位用来表示标签值,如果标签的值大于30,则这5位为全1,标签值表示在后续字节中2)第二个字节(8位)为长度length,是指描述值部分value所占用的字节个数。3) 第三个字节(8位)为值value,表示该数据本身大小,也即数据大小的二进制表示。2、编码实例:P32-34(1)布尔类型有两个值FALSE和TRUE,FALSE编码为 01 01 00;TRUE编码为01 01 FF(2)十进制数256的编码为 02 02 01 00(3)NULL类型编码:05 00(4)字节串ACE可编码为 :04 02 AC E0 ,比特串10101可编码为03 02 03 A8(5)序列类型SEQUENCEmadeofwood BOOLEAN,length INTEGER的值 madeof-wood TRUE,length 62编码为为 30 06 01 01 FF 02 01 3E(6)Password:=APPLICATION 27OCTET STRING的值“Sesame”编码为7B 08 04 06 53 65 73 61 6D 65(7)Password:=APPLICATION 27IMPLICIT OCTET STRING的值“Sesame”编码为5B 06 53 65 73 61 6D 65 四、ASN.1宏定义P35-381、ASN.1提供了宏定义设施,可用于扩充语法,定义新的类型和值。P352、ASN.1中的模块类似C语言中的结构,用于定义一个抽象数据类型。P353、宏表示:ASN.1提供的一种表示机制,用于定义宏。P364、宏定义:用宏表示定义的一个宏,代表一个宏实例的集合。P365、宏实例:用具体的值代替宏定义中变量而产生的实例,代表一中具体的类型。P366、宏定义由类型表示(TYPE NOTATION)、值表示(VALUE NOTATION)和支持产生式3部分组成。P377、宏定义的主要作用:宏定义可以看做是类型的类型,或者说是超类型,也可以把宏定看做是类型的模板。P37简答题:第二章抽象与法表示ASN.11、什么是ASN.1?P23抽象语法表示ASN.1是一种形式语言,它提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。在网络管理中,无论是OSI的管理信息结构,或是SNMP管理信息库,都是用ASN.1定义的。2、 表示层的功能是什么?抽象语法和传输语法各有什么作用?P23答:表示层的功能:提供统一的网络数据表示。抽象语法是一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。传输语法是一种编码规则,作用是把抽象数据变换成比特串在网络中传送。3、产生子类型的方法P28-301) 单个值:这种方法就是列出子类型可取的各个值。2)包含子类型:使用关键字INCLUDES说明被定义的类型包含已有类型的所有值。3)值区间:这种方法只能应用于整数和实数类型,指出子类型可取值的区间。4)可用字符:这种方法只能用于字符串类型,限制可使用的字符集。5)限制大小:可以对5种类型限制其规模大小,例如限制比特串、字节串或字符串的长度,限制构成序列或集合的元素(同类型)个数等。6)内部子类型:这种方法可用于序列、集合和CHOICE类型。这是一种很复杂的子类型关系4、简述ASN.1的基本编码规则P32基本编码规则BER:把ASN.1表示的抽象类型值编码为字节串。这种字节串的结构为类型长度值,简称TLV(Type-Length-Value)。编成的第一个字节(8位)为类型TYPE,用来表示ASN.1类型或用户定义的类型。这个字节的前两位用来区分4种标签;第三位区分简单类型还是构造类型;剩余5位用来表示标签值,如果标签的值大于30,则这5位为全1,标签值表示在后续字节中。5、基本编码规则中哪两种字段需要扩充?其扩充的方法是什么?P34(2007年1月)答:一是当标签值大于30时类型字节需要扩充,二是当值部分大于一个字节的表示范围时长度字节需要扩充。对标签值的扩充方法为:用5位表示030的编码,当标签值大于等于30时,这5位为全1,作为转义符,实际的标签值编码表示在后续字节中,后续字节的左边第一位表示是否为最后一个扩充字节,只有最后一个扩充自己的左边第一位置0,其余扩充字节左边第一位置1。对长度字节的扩充方为:小于127的数用长度字节的右边7位表示,最左边的一位置0,大于等于127的数用后续若干字节表示,原来的长度字节第一位置1,其余7位知名后续用于求长度的字节数。6、宏定义有哪些部分组成?这些部分都由什么范式说明?宏定义的主要用处是什么?P37宏定义由3个部分组成:(2) 类型表示(TYPE NOTATION) (3) 值表示(VALUE NOTATION)(4) 支持产生式。这三个部分都由Backs-Naur范式说明。宏定义的主要作用是:宏定义可以看做是类型的类型,或者说是超类型,也可以把宏定看做是类型的模板,可以用这种模板制造出形式相似,语义相关的多种数据类型。 7、为什么要用宏定义?怎样用宏定义得到宏实例?P37ASN.1宏提供了创建“模板”的功能,这也是引入ASN.1宏的原因。ASN.1宏使得ASN.1语言具有良好的扩充性。 当用一个具体的值代替宏定义中的变量或参数时就产生了宏实例,它表示一个实际的ASN.1类型(称为返回的类型),并且规定了该类型可取的值的集合(称为返回的值)。可见宏定义可以看做是类型的类型,或者说是超类型。综合题:第二章抽象语法表示ASN.11、用ASN.1的基本编码规则对下面的数据进行编码。P32-34(2009年1月、2008年1月)(1)布尔类型的两个值FALSE (0x00),TRUE (0xFF);(2)比特串10101;(3)NULL类型;(4)序列类型SEQUENCEmadeofwood BOOLEAN,length INTEGER的值 madeof-wood TRUE,length 62;(5)Password:=APPLICATION 27OCTET STRING的值“Sesame”;(6)Password:=APPLICATION 48INTEGER的值为十进制256;相应的类型及标签为:BOOLEAN:UNIVERSAL 1; INTEGER:UNIVERSAL 2; OCTETSTRING:UNIVERSAL 4; NULL:UNIVERSAL 5; “Sesame”的ASCII值(十六进制)为:53 65 73 61 6D 65。答: 1) FALSE编码:01 01 00, TRUE编码为:01 01 FF 2) 比特串10101编码为:03 02 03 A8 3)NULL类型编码:05 00 4)可编码为 30 06 01 01 FF 02 01 3E按照序列的结构可展开如下:Seq Len Val30 06 Bool Len Val 01 01 FF Int Len Val 02 01 3E 5)编码为:7B 08 04 06 53 65 73 61 6D 65展开后为: App Len Val 7B 08 Oct Len Val 04 06 53 65 73 61 6D 65 S e s a m e6)可编码为7F 30 05 02 02 01 00 00 分析对于integer 256 数值可编码为02 02 01 00 00(与本题第二问题)但APPLICATION 48是属于应用标签并且标签值为48(因为48>30,需要对标签值需要扩充,所以第一字节类型TYPE编码位7F 30 ),展开后为:App Len Val7F 30 05 Int Len Val 02 02 01 00 00即对应的二进制表示形式为:01111111 00110000 00000101 00000010 00000010 00000001 00000000 000000002、用基本编码规则对长度字段L编码:L = 18,L = 180,L = 1044。P38解答 L = 18,二进制形式的编码: 00010010 L = 180,二进制形式编码:10000001 10110100 L = 1044,二进制形式编码: 10000010 00000100 00010100解析 对于长度字节的扩充方法是:小于127的数用长度字节的右边7位表示,最左边的一位置0。大于等于127的数用后续若干字节来表示,原来的长度字节第一位置1,其余7位指明后续用于表示长度 的字节数,即采用下面的形式 :00000000 (0126)01111111 1xxxxxxx (xxxxxxx指明后续用于表示长度的字节数)如255 可表示为 10000001 11111111。3、用基本编码对数据编码:标签值 = 1011001010,长度 = 255。P38解答二进制形式的编码: 00011111 10000101 01001010 10000001 11111111解析当标签号不大于30时,Tag只在一个八位组中编码;当Tag大于30时,则Tag在多个八位组中编码。在多个八位组中编码时,第一个八位组后5位全部为1,其余的后继八位组最高位为1表示后续还有,最后一个八位组最高位为0表示Tag结束。采用下面的规则使用不同的类型编码:(1)若编码是简单类型,则使用确定格式。短格式:长度字段仅一个八位位组,最高位为0。长格式:长度字段包含多个八位位组,第1个字节最高位为1,其余7位表示后面有多少字节来表示值字段的长度。例如,25510可表示为10000001 11111111。 历年真题题集一、选择题1、计算机网络管理中提供统一的网络数据表示的形式语言是( ) P23(2008年1月、2006年10月)A.ASN.1 B.Java C.C语言 D.ASP2、ASN1中每一个数据类型都有一个标签,标签的类型有( )P24(2006年10月)A性能标签B简单标签 C构造标签 D私有标签3、在下面集合中有三个元素,一个是本人名字,一个是父亲名字,另一个是母亲名字。Parentage:=SETSubjectName1 IMPLICIT IA5String,MotherName2 IMPLICIT IA5String OPTIONAL,FatherName3 IMLICIT IA5String OPTIONAL 为这三个元素使用的标签123是( ) P28(2007年10月)A.通用标签 B.应用标签 C.上下文标签 D.私有标签4.在ASN.1的数据类型分类中由已知类型定义的新类型是( ) P24(2009年1月、2008年1月)A.简单类型 B.构造类型 C.标签类型 D.其它类型5、以下对ASN.1的数据类型描述正确的是 ( )P24-28(2010年1月、2008年10月)A.每个数据类型(包括CHOICE和ANY)都有标签B.分别用SEQUENCE和SEQUENCE OF表示相同类型和不同类型元素的序列C.分别用SET和SET OF表示不同类型和相同类型元素的集合D.隐含标签的语义是在一个基本类型上加上新标签,从而导出一个新类型。6、 以下对ASN.1的简单数据类型的描述正确的是( )P24-28(2008年1月)A.简单类型就是BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL和ENUMERATED这些基本类型。B.枚举类型ENUMERATED也能进行任何算术运算。C.20000721182053.7是UTCTime类型的一个值,表示2000年7月21日,当地时间18点20分53.7秒。D.20000721182053.7是GeneralizedTime类型的一个值,表示2000年7月21日,当地时间18点20分53.7秒。7、若“2007年8月15日,当地时间21点57分43.5秒”用GeneralizedTime类型可表示为( ),用UTC时间类型可表示为( )P26(2009年10月),A.070815215743.5B.070815215743.5ZC.20070815215743.5D.20070815215743.5Zl “2006年8月1日,当地时间21点57分43.5秒”用GeneralizedTime类型可表示为( )P26(2007年1月)A.060801215743.5B.060801215743.5ZC.20060801215743.5D.20060801215743.5Z8、在ASN.1子类型的描述中,值区间这种方法只能应用于( ),可用字符这种方法只能应用于( ),内部子类型可用于( )P29(2008年1月)A.整数和实数类型B.布尔类型 C.字符串类型D.CHOICE类型9、基本编码规则中的第一个字节表示ASN1标签类型或用户定义的数据类型,用于表示用户定义的数据类型的二进制位是( )P32(2006年10月)A第1位 B第2位 C第3位D第4、5、6、7、8位10、十进制数256的编码为 ( )P32(2010年1月)A.02 02 01 00 B.02 01 01 00 C.01 02 01 00 D.02 02 11 11补:在ASN.1宏定义中,ASN.1中的模块类似C语言中的( ) P35(2007年10月)A.变量 B.数据类型 C.结构D.关键字二、填空题1、表示实体定义了应用数据的 语法。P23(2010年1月)2、把抽象数据变换成比特串的编码规则叫做 。P23(2008年1月)3、ASN.1标签的类型分为4种,分别是:通用标签、应用标签、 和私有标签。P24(2010年1月、2008年10月)4、ASN.1定义的数据类型包括:简单类型、 、标签类型、其他类型。P245、在ASN.1的定义里,构造类型有 和 两种,SEQUENCE是 。P266、在ASN.1种,每个数据类型都有一个 。P247、基本编码规则把ASN1表示的抽象类型值编码为字节串,这种字节串的结构为 。P32(2006年10月)8、基本编码规则可将字节串值ACE编码为 。P32(2007年1月)三、简答题1、在ASN.1中产生子类型的方法有哪些?P28-30(2010年1月)产生子类型的方法有以下几种:1) 单个值:这种方法就是列出子类型可取的各个值。2)包含子类型:关键字INCLUDES: 说明被定义的类型包含了已有类型的所有的值。3)值区间:这种方法只能应用于整数和实数类型,指出子类型可取值的区间。4)可用字符:这种方法只能用于字符串类型,限制可使用的字符集。5)限制大小:可以对5种类型限制其规模大小,例如限制比特串、字节串或字符串的长度,限制构成序列或集合的元素(同类型)个数等。6)内部子类型:这种方法可用于序列、集合和CHOICE类型。这是一种很复杂的子类型关系2、表示层的功能是什么?抽象语法和传输语法各有什么作用?P23表示层的功能:提供统一的网络数据表示。抽象语法是一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。传输语法是一种编码规则,作用是把抽象数据变换成比特串在网络中传送。3、基本编码规则中哪两种字段需要扩充?其扩充的方法是什么?P34(2007年1月)答:一是当标签值大于30时类型字节需要扩充,二是当值部分大于一个字节的表示范围时长度字节需要扩充。对标签值的扩充方法为:用5位表示030的编码,当标签值大于等于30时,这5位为全1,作为转义符,实际的标签值编码表示在后续字节中,后续字节的左边第一位表示是否为最后一个扩充字节,只有最后一个扩充自己的左边第一位置0,其余扩充字节左边第一位置1。对长度字节的扩充方为:小于127的数用长度字节的右边7位表示,最左边的一位置0,大于等于127的数用后续若干字节表示,原来的长度字节第一位置1,其余7位知名后续用于求长度的字节数。四、综合题1、用ASN.1的基本编码规则对下面的数据进行编码。P32-34(2009年1月、2008年1月)(1)布尔类型的两个值FALSE (0x00),TRUE (0xFF);(2)比特串10101;(3)NULL类型;(4)序列类型SEQUENCEmadeofwood BOOLEAN,length INTEGER的值 madeof-wood TRUE,length 62;(5)Password:=APPLICATION 27OCTET STRING的值“Sesame”;(6)Password:=APPLICATION 48INTEGER的值为十进制256;相应的类型及标签为:BOOLEAN:UNIVERSAL 1; INTEGER:UNIVERSAL 2; OCTETSTRING:UNIVERSAL 4; NULL:UNIVERSAL 5; “Sesame”的ASCII值(十六进制)为:53 65 73 61 6D 65。分析对于integer 256 数值可编码为02 02 01 00 00(与本题第二问题)但APPLICATION 48是属于应用标签并且标签值为48(因为48>30,需要对标签值需要扩充,所以第一字节类型TYPE编码位7F 30 ),展开后为:App Len Val7F 30 05 Int Len Val 02 02 01 00 00即对应的二进制表示形式为:01111111 00110000 00000101 00000010 00000010 00000001 00000000 000000002、用基本编码规则对长度字段L编码:L = 18,L = 180,L = 1044。P38解析 对于长度字节的扩充方法是:小于127的数用长度字节的右边7位表示,最左边的一位置0。大于等于127的数用后续若干字节来表示,原来的长度字节第一位置1,其余7位指明后续用于表示长度 的字节数,即采用下面的形式 :00000000 (0126)01111111 1xxxxxxx (xxxxxxx指明后续用于表示长度的字节数)如255 可表示为 10000001 11111111。3、用基本编码对数据编码:标签值 = 1011001010,长度 = 255。P38