版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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:TimeslotNumber::= INTEGER(0..14)上面例子中TimeslotNumber为整型,范畴是0~14共15个数,由于23<15<24,故编码为4bit,若取值为7,则编码为0111。例2:MaxAllowedUL-TX-Power::= INTEGER(-50..33)同理,MaxAllowedUL-TX-Power为整型,范畴是-50~33共84个数,26<84<27编码长度为7bit,若取值为0,则编0索引值50(-50索引值为0),因而编码为:0110010。3.2BOOLEAN布尔逻辑型编码只须1bit。用“1”表达TRUE,“0”表达FALSE。例:DL-TM-RLC-Mode::= SEQUENCE{ segmentationIndication BOOLEAN}上面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(23<10<24).,因而此种类型串编码是每个数字编为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::= ENUMERATED{mod-QPSK,mod-8PSK}上面是一种Modulation是枚举类型,编码时,一方面看枚举项个数为2,21=2,因而编码为1bit,当选mod-QPSK调制模式时编码为0,选mod-8PSK调制模式时编码为1。3.8CHOICE选取型编码类似于整型,以至少比特来描述选取体内各成员索引值。值范畴从0开始。与枚举不同是,编完CHOICE索引值,紧接着就应编码索引值相应单元。而枚举型将索引值编完后就结束。下面将以一种例子对这种类型编码进行阐明:例:NumberOfTransportBlocks::= CHOICE{ zero NULL, one NULL, small INTEGER(2..17), large 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{ timeslotNumber INTEGER(1..15)OPTIONAL, tfci-Existence BOOLEAN, midambleShiftAndBurstType MidambleShiftAndBurstType-LCROPTIONAL, modulation ENUMERATED{mod-QPSK,mod-8PSK}, ss-TPC-Symbols NULL, additionalSS-TPC-Symbols INTEGER(1..15) OPTIONAL}上面是一种SEQUENCE构造编码时咱们分两步进行:拟定其前导位图.该构造中有3个可选项,故可拟定位图长度为3bit。咱们依照需要选取其中项,若某项选取了编码位图为1,否则为0。假设咱们选取了timeslotNumber而其他项都不选话,则在对构造内部编码之前应编码为:100依照SEQUENCE构造内部项,从上到下依次编码。TimeslotNumber取值为6,则编码为0101;tfci-Existence存在TFCI批示,则编码为1;modulation选取mod-QPSK,编码为0;ss-TPC-Symbols为空类型,不用编码综上可得:该构造编码为1000101103.10SEQUENCE(SIZE(ib..ub))OFcomponentSEQUENCEOF在ASN.1描述中用作循环。循环次数由SIZE拟定。SEQUENCEOF前导比特为SIZE中数范畴,编码规则与整数型相似。紧跟在前导比特之后是循环体成员component编码,component可以是构造也可以是一种整型参数。各成员编码后顺序放置,每两个成员之间编码值不需分隔符,该类型相应于C语言中数组。下面将以一种例子来阐明:MNC::= SEQUENCE(SIZE(2..3))OFDigitDigit::= INTEGER(0..9)上面MNC移动网络码,在上面循环中咱们将分几步阐明:①一方面拟定其循环次数,由SIZE(2..3)可知其循环次数为2~3次,普通咱们选取2次,则编码为0。②第一次对Digit进行编码为:0010(取值为2)。③第二次对Digit进行编码为:0011(取值为3)。综上,对该循环编码为:000100011。四、PER编码实例分析下面我将以手机释放流程中RRCCONNECTIONRELEASE消息为例讲述PER编译码过程:手机释放合同流程分CC层释放、RRC释放等2个阶段。其详细合同流程如图1所示。UEUE通话过程DISCONNECTRELEASERELEASECOMPLETERRCCONNECTIONRELEASERRCCONNECTIONRELEASECOMPLETENETWORK图1手机释放合同流程上面合同流程是通话完毕后终结UE和网络连接过程,涉及两个某些,前一种某些是完毕呼喊终结过程,背面一某些是信令链路释放过程,涉及释放UE和UTRAN之间所有无线承载和释放所有建立信令连接。这里我将在下行公共控制信道上消息RRCCONNECTIONRELEASE为例来阐明这条消息编码:DL-CCCH-Message::=SEQUENCE{ integrityCheckInfo IntegrityCheckInfo OPTIONAL, message DL-CCCH-MessageType}编码:0。上面SEQUENCE构造有一种可选项,要编一种1bit位图,该项选取编码为1,否则为0。DL-CCCH-MessageType::=CHOICE{ cellUpdateConfirm CellUpdateConfirm-CCCH, rrcConnectionReject RRCConnectionReject, rrcConnectionRelease RRCConnectionRelease-CCCH, rrcConnectionSetup RRCConnectionSetup, uraUpdateConfirm URAUpdateConfirm-CCCH, spare3 NULL, spare2 NULL, spare1 NULL}编码:010。CHOICE构造编码办法是:一方面对选取项索引值进行编码,然后对选取项进行编码,每次只能选取一项。这里010是对索引值编码,由于供选取项共有8项,23=8编3bit,而索引值是从0开始,因此这里第三项编码值为2。RRCConnectionRelease-CCCH::=CHOICE{r3 SEQUENCE{ rrcConnectionRelease-CCCH-r3 RRCConnectionRelease-CCCH-r3-IEs,rrcConnectionRelease-CCCH-r3-add-ext BITSTRINGOPTIONAL },later-than-r3 SEQUENCE{ u-RNTI U-RNTI, rrc-TransactionIdentifier RRC-TransactionIdentifier,}}③编码为:00。一方面上面是一种CHOICE构造,共有两项编1bit,咱们选取第一项编码为0;r3 为一种SEQUENCE构造,有一种可选项,此处不选,编码为0。RRCConnectionRelease-CCCH-r3-Ies::=SEQUENCE{ u-RNTI U-RNTI, rrcConnectionRelease RRCConnectionRelease-r3-IEs}U-RNTI::= SEQUENCE{ srnc-Identity SRNC-Identity, s-RNTI S-RNTI}SRNC-Identity::= BITSTRING(SIZE(12))S-RNTI::= BITSTRING(SIZE(20))④编码为000000000001;00000000000000000001。RRCConnectionRelease-CCCH-r3-IEs为SEQUENCE构造,没有可选项,因而两项都要编码。第一项SRNC-Identity是定长比特串类型,编码时直接给出12bit长串。同理第二项为20bit长串。RRCConnectionRelease-r3-IEs::=SEQUENCE{ rrc-TransactionIdentifier RRC-TransactionIdentifier, n-308 N-308 OPTIONAL, releaseCause ReleaseCause, rplmn-information Rplmn-Information OPTIONAL}⑤编码:10。RRCConnectionRelease-r3-IEs为一种SEQUENCE构造上面有2个可选项,位图长度为2bit,第一项编码,第二项不编码,因而位图为10。RRC-TransactionIdentifier::= INTEGER(0..3)N-308::= INTEGER(1..8)⑥编码:00;001。整型RRC-TransactionIdentifier范畴为0~3。共4个取值,编码为2bit,这里取值0编码为00。同理整型N-308编码长度应为3bit,取值为2,编码为001(注意是对索引值编码)。ReleaseCause::= ENUMERATED{ normalEvent, unspecified, pre-emptiveRelease, congestion, re-establishmentReject, directedsignallingconnectionre-establishment, userInactivity, spare}⑦编码:000。ReleaseCause为枚举类型,枚举类型编码只是对选项索引值编码,释放过程属于正常事件,故选第一项,编码为000。由于上面编码是在空中(UU)接口上传播,为了尽量少传播比特,编码是采用是PER编码非对齐方式,在这种方式下,上面每一步生成编码依次叠加直到编码结束,然后以八个比特为单位构成八位组,若不够则在编码末尾添零。上面编码后构成串为:001000000000011000001000提成八位组为:001000000000000001000000000000000000011000001000正好构成六个八位组,因而不用添零。转换成十六进制编码为:200040000608。五、PER手工编译码总结PER编码中,对齐方式编码,添加0前提是前面编码不能构成一种或者各种八位组,而背面编码长度是一种或各种八位组长度,在这种状况下需要添加0。否则,就在前面码背面继续叠加,最后再以八个位一组提成各种八位组。因而,编码过程中,每到下一种编码长度是一种或各种八位组时,就得把前面码提成一种或各种字节,并也许会添加0,添0个数为0到7个。而非对齐方式则始终叠加到编码编完后,再提成各种八位组。在编码最后若剩余是0到7比特,这种状况下再添加0,因而非对齐方式最多添7个0,而对齐方式是每次最多添7个0,但次数不不大于或等于1次。例如:XX::=SEQUENCE{ r-TransactionIdentifier R-TransactionIdentifier, releaseIdentifier ReleaseIdentifier, rplmn-information Rplmn-Information }RRC-TransactionIdentifier::= INTEGER(0..3)ReleaseIdentifier::=INTEGER(0..255)Rplmn-Information ::=BITSTRING(SIZE(7))设RRC-TransactionIdentifier取值为2,则编码为11。ReleaseIdentifier取值为80,则编码为01010000。Rplmn-Information取比特为“1011101在对齐方式下编码为:110000000101000010111010在非对齐方式下编码为:110101000010111010000000PER译码过程与PER编码过程相反,与PER编码不同是,在译码之前并不懂得程序树型构造,只有依照编码和3GPP文档在译码过程中才干将程序提取出来,若在此过程中出错普通不能立即检查出来,在后续译码中可以逐渐验证,因而译码过程也必要认真谨慎,否则会走诸多弯路。总之,通信合同PER编译码是以3GPP合同文档为基本,在掌握其编译码规则之后,还规定认真、细心编译合同,这样才可以对的完毕编译码。六、软件编译码对于软件编码,还是以上面手机释放过程RRCCONNECTIONRELEASE消息为例来阐明:软件编码原理与上面编码原理同样,但机器在编码之前必要懂得3GPP原则合同25.331程序构造,并且有相应参数赋值,这样机器才可以将参数赋在固定合同构造中并编出唯一对的码,由于该流程中所有消息ASN描述都在文档25.331里面,因而咱们只需在将25.331整个文档当成原则ASN合同,然后给所要编码那条消息赋值后,控制软件输出相应消息编码即可。下面将分环节阐明软件编码过程:1.给所要编码消息RRCCONNECTIONRELEASE赋值,并将其加在将要运营ASN程序背面,在程序结束符END之前。下面是对RRC释放赋值(赋值每个参数就是上面手工编码时所选取参数):myRRCConnectionReleaseDL-CCCH-Message::={messagerrcConnectionRelease:r3:{rrcConnectionRelease-CCCH-r3{u-RNTI{srnc-Identity'000000000001'B,s-RNTI'00000000000000000001'B},rrcConnectionRelease-r3{rrc-TransactionIdentifier0,n-3082,releaseCausenormalEvent}}}}2.打开OSS软件运营界面。3.按下键,找到赋了值ASN文献,然后点Add键,将该文献添加到运营栏中。4.按下键,在Output.cFile中设立文献输出格式,由于该消息是在空中传送,为了尽量减少冗余比特,合同规定了选取PER非对齐编码方式。因而选取UNALIGENDPERencode/decode项。5.按下键,若程序运营无误,ASN文献了生成.C和.H文献到OSS软件output文献夹中。6.将生成.C和.H文献放入编码文献夹中使用NMAKE命令生成编码。在编码文献夹中包具有:lib、bin、include三个文献夹,这三个文献夹是从下载OSS软件中剪切过来;五个应用扩展程序ossdmem.dll、cstrain.dll、ossapi.dll、soedper.dll、soedapi.dll;一种MS-DOS批解决文献switch.to.spartan.dlls;Makefile文献;common.mak文献;encode.c文献;ASN文献和它在OSS软件中生成.c和.h文献。其中makefile文献规定了ASN编码整个过程中一系列规则,涉及需要用到哪些链接文献,存储于哪个文献夹中,运用了哪些隐含规则等等,encode.c文献则控制消息编码范畴。事实上咱们下载OSS软件中有阐明软件以及编译码实例,依照它所给文献修改其中一某些就可以在DOS界面下运营NMAKE命令实现软件编码。7.输出编码成果DL-CCCH-MessageSEQUENCE[fieldcount(notencoded)=1]messageDL-CCCH-MessageTypeCHOICE[index=2]rrcConnectionReleaseRRCConnectionRelease-CCCHCHOICE[index=0]r3SEQUENCE[fieldcount(notencoded)=1]rrcConnectionRelease-CCCH-r3RRC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度LED屏幕亮度调节与节能改造合同
- 2024年度知识产权保护合同:MLB棒球帽正品知识分享
- 2024年度物业服务合同标的及安全生产责任书
- 2024年多功能空调维修合作协议
- 2024装修合同该如何写范文
- 2024办公家具购买合同
- 2024年城市基础设施建设合同 with 工程质量与投资预算
- 2024年出版发行代理合同
- 【初中生物】脊椎动物(第2课时两栖动物和爬行动物) 2024-2025学年七年级生物上学期(人教版2024)
- 2024加工贸易合同
- PVC热稳定剂常见测试方法解析
- 多功能会议室系统建设配置清单及预算
- DB63∕T 1996-2021 自然保护地 特许经营
- Module 4 外研版英语九(上)模块主题写作详解与训练
- 高大模板安全专项施工方案(专家论证)
- 个人晋升述职报告PPT课件(带内容)
- 商业发票模板(INVOICE)
- 医院绩效考核分配方案及实施细则
- 水工环地质调查技术标准手册
- 血液科常用化疗方案(1)
- 7上unit2reading
评论
0/150
提交评论