第二章抽象语法表示ASN.1[填空选择题]1:一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。
P232、表示层的功能:提供统一的网络数据表示。
P235、抽象语法用于定义应用数据,它类似程序设计语言定义的抽象数据类型。
P23二、ASN.1的基本概念P24-311、作为一种形式语言,ASN.1有严格的BNF定义。
P24P24●通用标签UNIVERSAL:由标准定义,适用于任何应用;●应用标签APPLICATION:是由某个具体应用定义的类型;●上下文专用标签CONTEXT SPECIFIC:这种标签在文本的一定范围(例如,一个结构struct)中适用;●私有标签PRIVATE:用户定义的标签。
4型。
这些数据类型的标签值均为通用标签Universal,有20多种。
P24●由单一成分构成的原子类型;ASN.1定义的数据类型中除了序列SEQUENCE和集合SET两种类型不属于简单类型外,其他10多种均属于简单类型。
P25●标签类型:由已知类型定义的新类型;包括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,表示同样的时间。
1011指应用或用户加在某个类型上的标签,也即由已知类型定义的新类型。
P27 12、在一个结构(序列或集合)类型中,可用上下文专用标签如[1]、[2]、[3]类似来区分类型相同的元素。
例如,Parentage::=SET{ P28SubjectName[1]IMPLICIT IA5String,MotherName[2]IMPLICIT IA5String OPTIONAL,FatherName[3]IMLICIT IA5String OPTIONAL }在结构类型Parentage中,为这三个元素SubjectName、MotherName、FatherName13、关键字IMPLICIT(隐含)和EXPLICIT(明示):标签类型可以是隐含的或明示的,两者区别:P281)隐含标签的语义是用新标签替换老标签,编码时只编码新标签。
2)明示标签类型是把基类型作为惟一元素的构造类型,在编码时,新老标签都要编码。
14、其他类型而且类型也是未定的。
(从而得知在ASN.1中,并不是每个数据类型(包括CHOICE和ANY)都有标签)当这种类型的变量被赋值时,它们的类型和标签才确定,可以说标签是运行时间确定的。
P281)CHOICE是可选类型的一个表,仅其中一个类型可以被采用,产生一个值,这些成分类型是已知的,但是在定义时尚未确定。
2)ANY类型:表示任意类型的任意值,与CHOICE类型不同之处在于实际出现的类型也是未知的,15、子类型:是由限制父类型的值集合而导出的类型,所以子类型的值集合是父类型的子集。
产生子类型的方法有单个值、包含子类型、值区间、可用字符、限制大小和内部子类型6种方法。
其中P28-30。
2。
3)限制大小方法可对5种类型(比特串类型、字节串类型、字符串类型、序列和集合类型)限制其规模大小(如限制比特串、字节串、字符串的长度,限制序列或集合的元素个数)。
4)内部子类型方法可用于序列、集合和CHOICE类型。
三、基本编码规则P32-34value可递归地再编码为TLV 结构,如图所示:P321)第一个字节(8位)为类型TYPE,用来表示ASN.1类型或用户定义的类型。
这个字节的前两位用来区分4种标签(00为通用标签、01为应用标签,10位上下文专用标签、115位用来表示标签值,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,比特串10101可编码为03 02 03 A8(5)序列类型SEQUENCE{madeofwood BOOLEAN,length INTEGER}的值{ madeof-wood TRUE,length 62}编码为为30 06 01 01 FF 02 01 3E(6)Password::=[APPLICATION 27]OCTET STRING的值“Sesame”编码为7B 08 04 06 53 65 73 61 6D 65(7)Password::=[APPLICATION 27]IMPLICIT OCTET STRING的值“Sesame”编码为5B 06 53 65 73 61 6D 65四、ASN.1宏定义P35-381、ASN.1提供了宏定义设施,可用于扩充语法,定义新的类型和值。
P352、ASN.1中的模块类似C语言中的结构,用于定义一个抽象数据类型。
P353、宏表示:ASN.1提供的一种表示机制,用于定义宏。
P36456部分组成。
P377、宏定义的主要作用:宏定义可以看做是类型的类型,或者说是超类型,也可以把宏定看做是类型的模板。
P37[简答题:第二章抽象与法表示ASN.1]1、什么是ASN.1?P23抽象语法表示ASN.1是一种形式语言,它提供统一的网络数据表示,通常用于定义应用无论是OSI的管理信息2、表示层的功能是什么?抽象语法和传输语法各有什么作用?P23答:表示层的功能:提供统一的网络数据表示。
抽象语法是一种形式语言,提供统一的网络数据表示,通常用于定义应用数据的抽象语法和应用层协议数据单元的结构。
传输语法是一种编码规则,作用是把抽象数据变换成比特串在网络中传送。
3、产生子类型的方法P28-301)单个值:这种方法就是列出子类型可取的各个值。
2)包含子类型:使用关键字INCLUDES说明被定义的类型包含已有类型的所有值。
3)值区间:这种方法只能应用于整数和实数类型,指出子类型可取值的区间。
4)可用字符:这种方法只能用于字符串类型,限制可使用的字符集。
5)限制大小:可以对5种类型限制其规模大小,例如限制比特串、字节串或字符串的长度,限制构成序列或集合的元素(同类型)个数等。
6)内部子类型:这种方法可用于序列、集合和CHOICE类型。
这是一种很复杂的子类型关系4、简述ASN.1的基本编码规则P32用来表示ASN.1类型或用户定义的类型。
这个字节的5(2007年1月)答:一是当标签值大于30时类型字节需要扩充,二是当值部分大于一个字节的表示范围时长度字节需要扩充。
对标签值的扩充方法为:用5位表示0~30的编码,当标签值大于等于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.1](2009年1月、2008年1月)(1)布尔类型的两个值FALSE (0x00),TRUE (0xFF);(2)比特串10101;(3)NULL类型;(4)序列类型SEQUENCE{madeofwood BOOLEAN,length INTEGER}的值{ madeof-wood TRUE,length 62};(5)Password::=[APPLICATION 27]OCTET STRING的值“Sesame”;(6)Password::=[APPLICATION 48]INTEGER的值为十进制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 FF2) 比特串10101编码为:03 02 03 A83)NULL类型编码:05 004)可编码为30 06 01 01 FF 02 01 3E按照序列的结构可展开如下:Seq Len Val30 06 Bool Len Val01 01 FFInt Len Val02 01 3E5)编码为:7B 08 04 06 53 65 73 61 6D 65展开后为:App Len Val7B 08 Oct Len Val04 06 53 65 73 61 6D 65S 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 Val02 02 01 00 00即对应的二进制表示形式为:01111111 00110000 00000101 00000010 00000010 00000001 00000000 000000002、用基本编码规则对长度字段L编码:L = 18,L = 180,L = 1044。