您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > ASNPER编码标准规范
ASN.1编码规范及实现方式一、ASN.1语言概述ASN.1(AbstractSyntaxNotationNumberOne),抽象语法描述1,是一种ISO/ITU-T原则。该语言描述了一种对数据进行表达、编码、传播和解码数据格式,它提供一整套正规格式用于描述对象构造,具备类似于面向对象程序设计语言中所提供类型机制,可定义任意复杂构造数据类型,而不同数据类型之间还可以有继承关系。因而,ASN.1是以一种独立于计算机架构和语言方式来描述数据构造。同步,ASN.1描述可以容易地映被射成C、C++或Java数据构造,直接作为应用程序代码使用,并得到运营程序库支持。ASN.1作为一种数据表达原则产生于20世纪80年代初期开放系统互联(OSI)网络模型,虽然OSI模型并没有得到广泛应用,但是ASN.1原则在继续进化。今天已有大量实际应用,这些应用涉及:3G移动系统、IP语音、安全应用、老式电信网络、军事和空间应用等许多方面。此外,ASN.1有各种原则化编码规则:如基本编码规则(BER)、规范编码规则(CER)、辨认名编码规则(DER)、压缩编码规则(PER)和XER编码规则(XER)。这些编码规则描述了如何对ASN.1中定义数值进行编码,以便用于传播,而与计算机、编程语言或它在应用程序中如何表达等因素无关。同步,该编码具备先进标记系统、信息扩展性、支持迅速可靠传播等特点,这在无线传播中是一种优势。因而,ASN.1不但适合表达当代通信应用中那些复杂、变化及可扩展数据构造,并且尚有适合合同编码方式。同步,3GPP原则ASN.1文档中也包括了完整、详细数据单元(PDU)合同。这些都为3G移动系统中ASN.1应用打下了基本。3G合同ASN编码跟普通编码相比具备高效性、严谨性以及规范性等特点。二、PER编码简介3GPP规范中,由ASN.1到传播码转换统一使用定义在ITU-TX.691中PER(PackedEncodingRules)规则,因而这里讲ASN编译码规则也就是ASN编码中PER编译码规则。PER有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu接口ASN.1传播编码。非对齐方式:仅用于空中(UU)接口ASN.1转换,两者编码过程基本相似。在对齐方式下,若前面所有单元信息经编码后得到比特流长度不是一种八位组倍数,而后一种信息又是以八位组为单位(字符串),那么就需要在前面生成比特流背面补“0,”使其长度为8倍数。因此普通补位数为0~7bit。而非对齐方式无此限制。所有信息单元按编码规则生成比特数据将按其被编码顺序首尾相连,中间不需要任何填充。按ITU-TX.691规定,若最后编码结束后。所得编码不是8倍数,信息编码结束后填充由RRC负责。此外,PER编译码必要依赖于3GPP原则文档,也就是说,收发双方也必要懂得层3消息详细构造,这样编码和译码才干被编译和辨认。三、PER编码规则PER编码规则定义了各种数据类型,简朴地可分为两大类。第一类是构造类,如CHOICE、SEQUENCE、ENUMERATED等。另一类是简朴类,如INTEGER、REALL、BOOLEAN等。下面将对如下惯用类型编码规则做一种总结:3.1INTEGER整型是合同规范中用得最多一种数据类型。对这种数据类型编码之前,一方面要拟定其取值范畴,即上下界之间数个数。而编码长度是依照数范畴来拟定。当2m<范畴≤2m+1时,对该整数取值用m+1位二进制表达。但对范畴内数编码不是对其实值而是对其索引值进行编码,编码索引值是从0开始。例1:TimeslotNumber::=INTEGER(0..14)上面例子中TimeslotNumber为整型,范畴是0~14共15个数,由于231524,故编码为4bit,若取值为7,则编码为0111。例2:MaxAllowedUL-TX-Power::=INTEGER(-50..33)同理,MaxAllowedUL-TX-Power为整型,范畴是-50~33共84个数,268427编码长度为7bit,若取值为0,则编0索引值50(-50索引值为0),因而编码为:0110010。3.2BOOLEAN布尔逻辑型编码只须1bit。用“1”表达TRUE,“0”表达FALSE。例:DL-TM-RLC-Mode::={SEQUENCEsegmentationIndicationBOOLEAN}上面segmentationIndication是一种BOOLEAN型,意思是段批示。当咱们需要这种批示时编码为1,不需要时编码为0。3.3BITSTRING比特串编码提成两种状况:长度固定:直接将比特串与前面比特流叠加即可;长度可变:按前述整型编码规则,以描述长度范畴至少比特原则在比特串前面加上用于描述长度所需比特,然后将待编码比特串加在后边。例1:RoutingParameter::=BITSTRING(SIZE(10))上面RoutingParameter是一种定长,且长度为10比特串,编码时直接给出10位二制数,例如编码为:‘’。例2:SIB-Data-variable::=BITSTRING(SIZE(1..214))SIB-Data-variable是一种变长比特串,编码之前一方面编长度,由于长度范畴为1~214共需要编8比特,因而若SIB-Data-variable是一种5位比特串时则编码为:0000010011111(前面8位是比特串长度编码,背面5位是该比特串值)。3.4OCTETSTRING八位组串编码原则与比特串相似。提成长度可变八位串和长度不可变八位串两种。与比特串编码不同是编码值是八位串而不是比特串。例:VALUE::=OCTETSTRING(SIZE(1..8))若VALUE值是长度为3八位串,则编码为:010,背面跟着3个由于长度区间为八,因此长度编码L为3位,而3-bmin=2。因而编码为010。背面则跟着3个八位组如:000000001111111100000000。3.5CHARACTERSTRINGS字符串编码方式有各种状况编码方式与BITSTRING和OCTETSTRING编码方式类似,只是对不同类型字符串有不同编码办法,下面将着重阐明CHARACTERSTRINGS中惯用NumricString、PrintableString、NameString编码办法:①NumricString类型中成员为0~9,共十个数。因而在编码时长度可定为4bit(231024).,因而此种类型串编码是每个数字编为4比特。同理,PrintableString中包括字符为:“a..z”、“A..Z”、“0..9”、“space”、“,”、“(”、“)”,“+”、“、”、“-”、“/”、“.”、“=”、“?”、“:”共74个字符,每个字母应编码为7比特。NameString共52个大小写字母,每个字母编码则为6bit。②NumricString123编码为:000100100011。NameString“cat”编码为:011100011010100010,上面每个字母编6比特,每个字母值是其在NameString中索引值。3.6NULLNULL类型不用编码。3.7ENUMERATED枚举型编码类似于整型,也是以描述枚举内全体成员所需比特数至少原则进行编码。其值范畴从0开始。枚举类型编码时,只对其项索引值编码。例:Modulation::={mod-QPSK,mod-8PSK}ENUMERATED上面是一种Modulation是枚举类型,编码时,一方面看枚举项个数为2,21=2,因而编码为1bit,当选mod-QPSK调制模式时编码为0,选mod-8PSK调制模式时编码为1。3.8CHOICE选取型编码类似于整型,以至少比特来描述选取体内各成员索引值。值范畴从0开始。与枚举不同是,编完CHOICE索引值,紧接着就应编码索引值相应单元。而枚举型将索引值编完后就结束。下面将以一种例子对这种类型编码进行阐明:例:NumberOfTransportBlocks::=CHOICE{zeroonesmalllargeNULL,NULL,INTEGER(2..17),INTEGER(18..512)}NumberOfTransportBlocks是一种选取类型,若信息传播块个数为16,则应当选取CHOICEsmall项,然后在对该项值进行编码。一方面CHOICE里有4项,编码为2bit,small为第3项编码值为2,选取项编码为:10。然后再对small项编码,由于取值为16,索引值为14,整数范畴是2~17共16个数,要编4比特,因而要对索引值14编4比特,即编码为:1110。3.9SEQUENCE普通说来,序列编码后都会产生一种前导位图,用以批示序列中可选项或缺省项与否存在。每以可选项(或缺省项)用1bit来批示,“1”表达存在,“0”表达不存在。若一种序列型中包括n个标注为可选(或缺省)成员,那么,前导位图长度就是nbit。位图中比特顺序与序列中各可选(或缺省)成员排列一致。然后再对SEQUENCE中各成员进行编码,这种类型相应于C语言中构造。下面将以实例来阐明:IndividualTimeslotInfo-LCR::=SEQUENCE{timeslotNumbertfci-ExistencemidambleShiftAndBurstTypemodulationss-TPC-SymbolsadditionalSS-TPC-SymbolsINTEGER(1..15)OPTIONAL,BOOLEAN,MidambleShiftAndBurstType-LCROPTIONAL,ENUMERATED{mod-QPSK,mod-8PSK},NULL,INTEGER(1..15)OPTIONAL}上面是一种SEQUENCE构造编码时咱们分两步进行:①拟定其前导位图.该构造中有3个可选项,故可拟定位图长度为3bit。咱们依照需要选取其中项,若某项选取了编码位图为1,否则为0。假设咱们选取了timeslotNumber而其他项都不选话,则在对构造内部编码之前应编码为:100②依照SEQUENCE构造内部项,从上到下依次编码。TimeslotNumber取值为6,则编码为0101;tfci-Existence存在TFCI批示,则编码为1;UENETWORK通话过程DISCONNECTRELEASERELEASECOMPLETEmodulation选取mod-QPSK,编码为0;ss-TPC-Symbols为空类型,不用编码综上可得:该构造编码为1000101103.10SEQUENCE(SIZE(ib..ub))OFcomponentSEQUENCEOF在ASN.1描述中用作循环。循环次数由SIZE拟定。SEQUENCEOF前导比特为SIZE中数范畴,编码规则与整数型相似。紧跟在前导比特之后是循环体成员component编码,component可以是构造也可以是一种整型参数。各成员编码后顺序放置,每两个成员之间编码值不需分隔符,该类型相应于C语言中数组。下面将以一种例子来阐明:MNC::=Digit::=SEQUENCE(SIZE(2..3))OFDigitINTEGER(0..9)上面MNC移动网络码,在上面循环中咱们将分几步阐明:①一方面拟定其循环次数,由SIZE(2..3)可知其循环次数为2~3次,普通咱们选取2次,则编码为0。②第一次对Digit进行编码为:0010(取值为2)。③第二次对Digit进行编码为:0011(取值为3)。综上,对该循环编码为:000100011。四、PER编码实例分析下面我将以手机释放流程中RRCCONNECTIONRELEASE消息为例讲述PER编译码过程:手机释放合同流程分CC层释放、RRC释放等2个阶段。其详细合同流程如图1所示。上面合同流程是通话完毕后终结UE和网络连接过程,涉及两个某些,前一种某些是完毕呼喊终结过程,背面一某些是信令链路释放过程,涉及释放UE和UTRAN之间所有无线承载和释放所
本文标题:ASNPER编码标准规范
链接地址:https://www.777doc.com/doc-8762497 .html