安工大网管技术第二章PPT课件.ppt

上传人:sccc 文档编号:5935684 上传时间:2023-09-06 格式:PPT 页数:86 大小:766.54KB
返回 下载 相关 举报
安工大网管技术第二章PPT课件.ppt_第1页
第1页 / 共86页
安工大网管技术第二章PPT课件.ppt_第2页
第2页 / 共86页
安工大网管技术第二章PPT课件.ppt_第3页
第3页 / 共86页
安工大网管技术第二章PPT课件.ppt_第4页
第4页 / 共86页
安工大网管技术第二章PPT课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《安工大网管技术第二章PPT课件.ppt》由会员分享,可在线阅读,更多相关《安工大网管技术第二章PPT课件.ppt(86页珍藏版)》请在三一办公上搜索。

1、第二章 抽象语法表示ASN.1,2.1 网络 数据表示?2.2 ASN.1的基本概念 2.3 基本编码规则 2.4 ASN.1宏定义,1.网络系统的发展,怎么进行 异种(异构)?信息间的通信?2.为什么用ASN.1?现有的数据结构表达方式不可以吗?3.传输语法与BER.,2.1 网络数据表示,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 体现什么思想?和SNMP协议、数据类型是什么关系?,ASN.1描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。,

2、ASN.1是什么?,在任何需要以数字方式发送信息的地方,ASN.1 都可以发送各种形式的信息(声频、视频、数据等等)。ASN.1 和特定的 ASN.1 编码规则推进了结构化数据的传输,尤其是网络中应用程序之间的结构化数据传输,它以一种独立于计算机架构和语言的方式来描述数据结构。,ASN.1 取得成功的一个主要原因是它与几个标准化编码规则相关,如基本编码规则(BER)-X.209、规范编码规则(CER)、识别名编码规则(DER)、压缩编码规则(PER)和 XER 编码规则(XER)。这些编码规则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而不管计算机、编程语言或它在应用程序中如

3、何表示等因素。,1.在互相通信的端系统中至少有一个应用实体和一个表示实体。2.把抽象数据变换成比特串的编码规则叫做传输语法。如图2.1所示。,网络数据表示,图2.1 关于信息表示的通信系统模型,name value,Get-request 报文?协议?ASN.1 编码?,V01 03 06 01 02 01 01 01 00,L09,TOBJECT IDENTIFIER,TNULL,L00,L01,TSEQUENCE?,L0C,L0E,L04,TINTEGER,L01,request-id,error-status,error-index,variable-bindings,TINTEGER,

4、V05 AE 56 02,V00,TSEQUENCE OF?,TINTEGER,V00,VarBind,TA0,L1D,GetRequest-PDU,request-ID,1.3.6.1.2.1.7.1.0,GetRequest-PDU,和七层协议的关系?,ASN.1表示数据例子,例如:数据类型特点?Report:=SEQUENCE author OCTET STRING,title OCTET STRING,body OCTET STRING,biblio Bibliography,在这个例子中,Report是由名字类型的信息组成的,而SEQUENCE表示消息是许多数据单元构成的,前三个数据

5、单元的类型是OCTET STRING,而最后一个数据类型则下面的ASN.1语法表示它的意义:Bibliography:=SEQUENCE author OCTET STRING title OCTET STRINGpublisher OCTET STRINGyear OCTET STRING,2.2 ASN.1的基本概念,ASN.1文本的书写规则,这些规则叫做文本约定:(1)书写的布局是无效的,多个空格和空行等效于一个空格;(2)用于表示值和字段的标识符、类型指针(类型名)和模块名由大小写字母、数字和短线组成;,(3)标识符以小写字母开头;(4)类型指针和模块名以大写字母开头;(5)ASN.1

6、定义的内部类型全部用大写字母表示;(6)关键字全部用大写字母表示;(7)注释以一对短线(-)开始,以一对短线或行尾结束。ASN.1的特点?,2.2.1 抽象数据类型在ASN.1中,每一个数据类型都有一个标签(Tag)?,标签有类型和值(见表2.1),数据类型是由标签的类型和值惟一决定的,这种机制在数据编码时有用。标签的类型分为以下4种:通用标签 应用标签 上下文专用标签 私有标签,ASN.1定义的数据类型有20多种,标签类型都是UNIVERSAL,如表2.1所示。这些数据类型可分为4大类。简单类型(?)构造类型 标签类型 其他类型(CHOICE、ANY),表2.1 ASN.1定义的通用类型,?

7、,表2.1 ASN.1定义的通用类型,?,第一组BOOLEAN、INTEGER、BIT STRING、OCTET STRING、REAL、ENUMERATED.枚举类型的值只是用整数表示的一个符号,而不具有整数的性质。下面是定义枚举类型的例子:EthernetAdapterStatus:=ENUMERATEDnormal(0),degraded(1),offline(2),failed(3),1.简单类型,第二组包括各种字符串类型,标签为UNIVERSAL 1822和UNIVERSAL 2527(表示字符类型 为何如此多的类型?),第三组包括OBJECT IDENTIFIER和Object D

8、escriptor两种类型。,第四组包含4种类型。NULL是空类型,EXTERNAL是外部类型,UTCTime和GeneralizedTime是两种有关时间的类型,其区别是表示时间的形式不同。,例如 20000721182053.7是GeneralizedTime类型的一个值,表示2000年7月21日,当地时间18点20分53.7秒。20000721182053.7Z表示同样的时间,但是加了符号Z,则表示UTC时间。,2.构造类型构造类型有序列和集合两种,分别用SEQUENCE和SEQUENCE OF表示不同类型和相同类型元素的序列,分别用SET和SET OF表示不同类型和相同类型元素的集合。

9、他们的区别是什么?,下面是定义序列类型的例子:EthernetCollisionsCounter:=SEQUENCE highValue INTEGER,lowValueINTEGER TokenRingTokensLost:=SEQUENCE highValueINTRGER,lowValueINTEGER LanSimpleCounterLimits:=SEQUENCE ethernetCounter1 COMPONENTS OF EthernetCollisionsCounter,tokenRingCounter1COMPONENTS OF TokenRingTokensLost,下面是

10、定义集合类型的例子:LanWorkstationSerialNumbers:=OCTET STRING(SIZE(32)LanSegment:=SET OF LanWorkstationSerialNumbersMacAddresses:=OCTET STRING(SIZE(6)EthernetNetworks:=SET OF MacAddressesTokenRingNetworks:=SET OF LanSegmentLanNetwork:=SET etherNet 0 IMPLICIT EthernetNetworks,tokenNet 1 IMPLICIT TokenRingNetwo

11、rks,3.标签类型 Exuniv:=UNIVERSAL 2 INTEGER Exappl:=APPLICATION 0 INTEGER Expriv:=PRIVATE 1 INTEGER 标签由一个 标签类 和 一个 标签号 组成。指应用或用户加在某个类型上的标签。加上一个标签后就是一个新的类型。标签类型作用?例如集合中有3个同样类型的元素,一个指本人的名字,一个指父亲的名字,另一个指母亲的名字,分别为其指定不同的上下文专用标签1、2和3以示区别,参见下例:,Parentage:=SETSubjectName1 IMPLICIT IA5String,MotherName 2 IMPLICIT

12、 IA5String OPTIONAL,FatherName 3 IMPLICIT IA5String OPTIONAL 在编码中注意:Expriv:=PRIVATE 1 IMPLICIT INTEGER Expriv:=PRIVATE 1(EXPLICIT)INTEGER 新老标签编码?,4.其他类型(他们类型的作用?)CHOICE和ANY是两个没有标签的类型,下面是定义CHOICE类型的例子:EthernetAdapterNumber:=CHOICENULL,OCTET STRING,ANY类型表示任意类型的任意值例1,我们可以定义SoftwareVersion:=ANY 例2,TextB

13、ook:=SEQUENCE author IA5String,reference ANY,实例,author“sfssfs”,reference IA5String“42342sf”author“sfssfs”,reference INTEGER 1988,2.2.2 子类型子类型是由限制父类型的值集合而导出的类型,因此子类型的值集合是父类型的子集。子类型还可以再产生子类型。(面向对象),1.单个值这种方法就是列出子类型可取的各个值。例如,我们可以定义小素数为整数类型的子集:SmallPrime:=INTEGER(2|3|5|7|11|13|15|17|19|23|29)另外,如果定义Mont

14、hs为枚举类型:Months:=ENUMERATEDjanuary(1),february(2),march(3),april(4),may(5),june(6),july(7),august(8),september(9),october(10),november(11),december(12),则可以定义First-quarter和Second-quarter为Months的子类型:First-quarter:=Months(january,february,march)Second-quarter:=Months(april,may,june),2.包含子类型(与前者的区别?)这里要用

15、到关键字INCLUDES,说明被定义的类型包含了已有类型的所有的值。例如下面的定义:First-half:=Months(INCLUDES First-quarter|I NCLUDES Second-quarter),3.值区间(?)这种方法只能应用于整数和类型,指出子类型可取值实数的区间。在下面的定义中PLUS-INFINITY和MINUS-INFINITY分别表示正、负最大值,MAX和MIN分别表示父类型可允许的最大值和最小值,区间可以是闭区间或开区间。如果是开区间,则加上符号“”。因此下面4个定义是等价的:PositiveInteger:=INTEGER(0.PLUS-INFINITY

16、)PositiveInteger:=INTEGER(1.PLUS-INFINITY)PositiveInteger:=INTEGER(0.MAX)PositiveInteger:=INTEGER(1.MAX),同理,下面4个定义也是等价的:NegativeInteger:=INTEGER(MINUS-INFINITY.0)NegativeInteger:=INTEGER(MINUS-INFINITY.-1)NegativeInteger:=INTEGER(MIN.0)NegativeInteger:=INTEGER(MIN.-1),4.可用字符(与单个值?区别?)这种方法只能用于字符串类型,限

17、制可使用的字符集。下面是两个限制可用字符的例子:TouchToneButtons:=IA5String(FROM(0|1|2|3|4|5|6|8|9|*|#)DigitString:=IA5String(FROM(0|1|2|3|4|5|6|8|9),5.限制大小可以限制其规模大小,例如限制比特串、字节串或字符串的长度,限制构成序列或集合的元素(同类型)个数等。例如公共数据网的地址由514个数字组成,这个规定可用下面的定义表示:It1DataNumber:=DigitString(SIZE(5.14),6.内部子类型(约束)这种方法可用于序列、集合和CHOICE类型。这是一种很复杂的子类型关系

18、,下面用例子说明。假定有一种协议数据单元:PDU:=SETalpha0 INTEGER,beta 1 IA5String OPTIONAL,gamma2 SEQUENCE OF Parameter,delta 3 BOOLEAN,下面定义的子类型测试协议数据单元要求布尔值必须是FALSE,整数值必须是负的:TestPDU:=PDU(WITH COMPONENTS.delta(FALSE),alpha(MIN.0)FurtherTestPDU:=TestPDU(WITH COMPONENTS.beta(SIZE 5|12)PRESENT)?,FurtherTestPDU:=TestPDU(WIT

19、H COMPONENTS.beta(SIZE 5|12)PRESENT)另外一个测试子类型要求beta参数必须出现,其值为5或12个字符组成的串:,2.2.3 数据结构示例下面是一个数据结构示例。图2.2(a)是关于个人记录的非形式描述,其中包括姓名、头衔、雇员编号、雇佣日期、配偶姓名和子女数等6项信息,而且对每个子女也要给出姓名和出生日期。图2.2(b)是用ASN.1描述个人记录的抽象语法?(c)个人记录的一个值,图2.2 ASN.1表示的抽象语法(a)个人记录;(c)个人记录的一个值,图2.2(b)是用ASN.1描述个人记录的抽象语法,2.3 基本编码规则,2.3.1 简单编码基本编码规则

20、(Basic Encoding Rule)把ASN.1表示的抽象类型值编码为字节串,这种字节串的结构为类型-长度-值,简称TLV(Type-Length-Value),而且值部分还可以递归地再编码为TLV结构。,用 TLV 方法进行编码,把各种数据元素表示为以下三个字段组成的八位位组序列:(1)T 字段,即标识符八位位组(identifier octet),用于标识标记。(2)L 字段,即长度用八位位组(length octet),用于标识后面 V 字段的长度。(3)V 字段,即内容八位位组(content octet),用于标识数据元素的值。,TLV 中的 T 字段定义数据的类型,字节 1

21、可变 可变,标记 T 长度 L 值 V,类 别 格 式 编 号,位 2 1 5,数据元素,图2.3 传输语法的第一个字节,编码的第一个字节表示ASN.1类型或用户定义的类型,其结构如图2.3所示。前两位用于区分4种标签;第三位用于区分简单类型和构造类型;其余5位表示标签的值,如果标签的值大于30,则这5位为全1,标签值表示在后续字节中。,例2.1 布尔类型有两个值FALSE和TRUE,都用一个字节表示,FALSE是00,TRUE是FF。布尔类型是简单类型,标签为UNIVERSAL 1,因此FALSE编码为 01 01 00而TRUE编码为 01 01 FF其中第二个字节指明值部分的长度为1个字

22、节。,例2.2 十进制数256的编码为?,例2.2 十进制数256的编码为 02 02 01 00最后两个字节表示十进制值256。,例2.3 比特串10101的值在传输时要占用一个字节,5个比特靠左存放,右边3位未用,因此在比特串编码时要用一个字节说明未使用的比特数。于是对10101的编码为 03 02 03 A8第一个字节03表示类型为简单类型的比特串,02表示值部分为两个字节长,第三个字节03说明值部分的最后3个比特未用,最后的A8是值部分。,例2.4 字节串ACE可编码为,04 02 AC E0,由于字节串总是占用整数个字节,因而不必说明未占用的比特数。没有说明值的位都认为是0,故最后一

23、个字节写为E0,可见字节串类型也遵循靠左存放的原则。,例2.5 NULL类型只有一个值,也写做NULL,其标签是UNIVERSAL 5。由于这个类型是空类型,无需存储或传送它的值,因而编码为 05 00第二个字节00表示值长度为0。此种类型以前在哪见过?图?为何有此类型?在该图中是何意义?,例2.6,IPAddress 192.1.2.3,其 T 字段是 40 改标签也属于Universal类型,V 字段需要 4 字节表示,因此得出 IPAddress 192.1.2.3 的 TLV 编码是 40 04 C0 01 02 03。,例2.7 序列类型SEQUENCEmadeofwood BOOL

24、EAN,length INTEGER的值 madeofwood TRUE,length 62可编码为 30 06 01 01 FF 02 01 3E按照序列的结构可展开如下:30?,Seq Len Val30 06?Bool Len Val 01 01 FF Int Len Val 02 01 3E,例2.8 集合类型SETbreadth INTEGER,bent BOOLEAN的值breadth 7,bent FALSE可编码为?,例2.8 集合类型SETbreadth INTEGER,bent BOOLEAN的值breadth 7,bent FALSE可编码为 31 06 02 01 07

25、 01 01 00编码 31 06 02 01 07 01 01 00,例2.8 这个例子说明应用标签的使用。假设我们设计一个安全协议,在这个应用中我们定义了一个口令字类型?,并赋予应用标签27:Password:=APPLICATION 27 OCTET STRING对于这个类型的一个值“Sesame”,可得到如下编码:7B 08 04 06 53 65 73 61 6D 65展开后为(App)Tag Len Val 7B?7B 08 Tag Len Val 04 06 53 65 73 61 6D 65 S e s a m e,为了减少编码中的冗余信息,可使用隐含标签,重新定义如下:Pas

26、sword:=APPLICATION 27 IMPLICIT OCTET STRING则相应的编码为 5B?5B 06 53 65 73 61 6D 65从第一个字节看出它变为简单类型了,因为只有一种新类型信息。,2.3.2 字段扩充 有两种字段需要扩充,一是当标签值大于30时类型字节需要扩充,二是当值部分大于一个字节的表示范围时长度字节需要扩充。,1.对标签值的扩充方法如下:我们用5位表示030的编码,当标签值大于等于31时这5位置全1,作为转义符,实际的标签值编码表示在后续字节中。后续字节的左边第一位表示是否为最后一个扩充字节,只有最后一个扩充字节的左边第一位置0,其余扩充字节的左边第一位

27、置1。这样,每个扩充字节只用了7位表示标签值的编码,可表示为下面的形式:?(如何解释意思?),例如,标签值10110010101111001可编码为 0000101 1001010 1111001 11111 10000101 11001010 01111001,2.对长度字节的扩充方法是:小于127的数用长度字节的右边7位表示,最左边的一位置0。大于等于127的数用后续若干字节表示,原来的长度字节第一位置1,其余7位指明后续用于表示长度的字节数,即采用下面的形式:,例如,L长度为(255)10可表示为 L=10000001 11111111 T L V那么256长度 要用几个字节表示长度?可

28、表示为多少?,那么256 要用几个字节表示长度?可表示为多少?,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,指出 V 字段长度=256 字节,指出后续字节数=2,后续字节数=2,L,标志位,标志位:长度:长度值,TLV 中的 L 字段定义 V 字段的长度,指出 V 字段长度=2 字节,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0,单字节的 L 字段,指出 V 字段长度=262 字节,多字节的 L 字段,指出后续字节数=2,后续字节数=2,263呢?简单的计算方法

29、?,name value,Get-request 报文 ASN.1 编码?,V01 03 06 01 02 01 01 01 00,L09,TOBJECT IDENTIFIER,TNULL,L00,L01,TSEQUENCE,L0D,L0F,L04,TINTEGER,L01,request-id,error-status,error-index,variable-bindings,TINTEGER,V05 AE 56 02,V00,TSEQUENCE OF,TINTEGER,V00,VarBind,TA0,L1D,GetRequest-PDU,request-ID,1.3.6.1.2.1.7.

30、1.0,GetRequest-PDU,十六进制编码,A0 1D/A0编码?02 04 05 AE 56 02/request-id 02 01 00/error-status 02 01 00/error-index 30 0F/SEQUENCE OF 30 0D/SEQUENCE 06 09 01 03 06 01 02 01 07 01 00/OBJECT IDENTIFIER 05 00/NULL 请问各个长度(L)之间有什么关系?如何用ASN.1定义该结构?,层次关系?,SequenceSequence Of?,Get-request 报文的ASN.1定义形式,Get-request-

31、PDU:=0IMPLICIT SEQUENCE Request-id INTEGERError-status INTEGER018Error-index INTEGER0max-bindingsVariable-bindings VarBindListVarBindList:=SEQUENCE OF VarBindVarBind:=SEQUENCE name OBJECT INDETIFIER value NULL/SEQUENCE OF 和SEQUENCE 两种结构的区别?,标签值?,2.4 ASN.1宏定义,2.4.1 模块定义模块定义的基本形式为 DEFINITIONS:=BEGIN E

32、XPORTS IMPORTS AssignmentList END,意义何在?,一个模块定义的例子:?,LanNetworkModuleiso org dod internet private enterprises Xenterprises 95DEFINITIONS EXPLICIT TAGS:=BEGIN EXPORTS LanNetworkName:=SEQUENCE OF RelativeDistinguishedName-End of EXPORTS IMPORTS,RelativeDistinguishedName FROM InformationFrameworkioint-i

33、so-ccitt Ds(5)modules(1)informationFramework(1)-End of IMPORTS MacAddresses:=OCTET STRING(SIZE(6)LanWorkstationSerialNumbers:=OCTET STRING(SIZE(32)LanSegment:=SET OF LanWorkstationSerialNumbers EthernetNetworks:=SET OF MacAddresses TokenRingNetworks:=SET OF LanSegment LanNetwork:=SET etherNet 0 IMPL

34、ICIT EthernetNetworks,tokenNet 1 IMPLICIT TokenRingNetworks END,2.4.2 宏表示 宏表示:ASN.1提供的一种表示机制,用于定义宏;宏定义:用宏表示定义的一个宏,代表一个宏实例的集合;宏实例:用具体的值代替宏定义中的变量而产生的实例,代表一种具体的类型。模块定义和上面哪种 定义有关系?有什么关系?,宏定义的一般形式如下:MACRO:=BEGIN TYPE NOTATION:=VALUE NOTATION:=END,下面是取自RFC 1155的关于对象类型的宏定义,包含两个支持产生式子。OBJECT-TYPE MACRO:=BEG

35、IN TYPE NOTATION:=Syntax type(TYPE ObjectSyntax)ACCESS Access STATUS Status VALUE NOTATION:=value(VALUE ObjectName)Access:=read-only|read-write|write-only|not-accessible Status:=mandatory|optional|obsolete END,2.4.3 宏定义示例关于为什么要用宏定义?假设我们经常需要使用整数对,于是我们定义一个ASN.1类型:Pair-integers:=SEQUENCE(INTEGER,INTEGE

36、R)如果我们还需要使用字节串对,也可以定义相应的类型:Pair-octet-string:=SEQUENCE(OCTET STRING,OCTET STRING),简化类型定义的方法是使用宏定义。我们定义一个宏PAIR,它是一个类型对:PAIR TYPE-X=type TYPE-Y=type,对应的值表示采用下面的形式:(X=value,Y=value)T0:=PAIR TYPE-X=INTEGER TYPE-Y=INTEGER用一个已有的类型代替其中的变量type,可得到宏实例,即新的类型:T1:=PAIR TYPE-X=INTEGER TYPE-Y=BOOLEANT2:=PAIR TYPE

37、-X=VisibleString TYPE-Y=T1则下面的值属于T1类型:(X=3,Y=TRUE),下面的值是T2类型:(X=Name,Y=(X=4,Y=FALSE)显然,只要用已知的类型代替关键字type,就可以得到需要的数对类型。图2.5给出了PAIR的宏定义,图2.5 宏定义示例,习 题,一.简答题 1.抽象语法和传输语法各有什么作用?2.ASN.1定义的数据类型分为哪几类?二.选择题 1.ASN.1是一种A.通信协议 B.形式语言C.操作系统 D.网络管理标准,2.下列不属于简单类型的是A.INTEGER B.NULLC.SEQUECE D.OCTET STRING3.下列选项和Po

38、sitiveInteger:=INTEGER(1.PLUS-INFINITY)等价的是A.PositiveInteger:=INTEGER(3.PLUS-INFINITY),B.PositiveInteger:=INTEGER(2.PLUS-INFINITY)C.PositiveInteger:=INTEGER(1.MAX)D.PositiveInteger:=INTEGER(2.MAX)4.OCTET STRING类型对应的值集合是A.0或多个字节组成的序列 B.0或多个比特组成的序列C.国际标准字符集5 D.通用字符集,5.在ASN.1中,每一个数据类型都有一个标签,通用标签的关键字是A.

39、UNIVERSAL B.ALLICATIONC.PRIVATE D.DEFAULT,三、解答题1.根据BER,布尔类型的FALSE的编码为(十六进制数表示)?2.根据BER,十进制数257的编码为(十六进制数表示)?,3.根据BER,比特串10100的编码为(十六进制数表示)?4.根据BER,序列类型SEQUENCEmadeofwood BOOLEAN,length INTEGER的值 madeofwood FALSE,length 61可编码为?5.根据BER,标签值10110011100010101可编码为xxx11111.(二进制数表示)?6.在ASN.1中,IP地址(IPAddress)=131.21.14.2,试求ASN.1编码。,7.用ASN.1描述Get-request-PDU的数据结构。8.对长度字节的扩充方法中若value的长度Length达到263,请问怎么对Length字段进行编码,写出二进制表示。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号