_ASN_PER编码规范

合集下载

ASN编码规则详解最

ASN编码规则详解最
1.2 ISO 简介
国际标准组织(ISO – International Organization for Standardization)于 1946 年 在美国成立,其负责制定众多领域的国际标准;但除电气、电子和电子工艺领域外,这些主要是 IEC(International Electrotechnical Commission)负责。
些组织可以参加讨论,提出议案,但不能参加投票。
Figure 1-5 ISO 组织结构 如 Figure 1-5 所示,ISO 共分为 172 个技术委员会 Technical Committee (TC)负责相应 标准化领域。 所有议题都在子委员会 SubCommittees 中共享,Subcommittee 又分为工作组 Working Groups(WG)。 到 1987 年,著名的 OSI 标准就是 TC97 的成果,称之为“Telecommunications and Information Exchange Between Systems”。在 1987 年,ISO 和 IEC 两个标准化组织一致认为都应当关注信 息技术 Information Technology,因此成立了一个联合技术委员会称为 JTC1。JTC1 的秘书处由 ANSI 负责。
UNIVERSAL 8 外部类型和类型实例 UNIVERSAL 9 实数类型 UNIVERSAL 10 枚举类型 UNIVERSAL 11 嵌入的 pdv 类型 UNIVERSAL 12 UTF8 字符串类型 UNIVERSAL 13 相关对象标识符 类型 UNIVERSAL 14-15 保留给本建议的以后版本和国际标准使用 UNIVERSAL 16 序列和类型序列 UNIVERSAL 17 集合和类型的集合 UNIVERSAL 18-22, 25-30 字符串 类型 UNIVERSAL 23-24 时间 类型 UNIVERSAL 31-... 保留给本建议以外的类型和国际标准使用 ASN.1 还能够定义如下的数据结构类型: 结构 ( SEQUENCE ), 列表 ( SEQUENCE OF ), 类型选择 ( CHOICE ), 等等

ASN.1笔记——语法规则与类型概述

ASN.1笔记——语法规则与类型概述

ASN.1笔记——语法规则与类型概述⼀.简介ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。

是定义抽象数据类型形式的标准,是⽤于描述数据表⽰、表⽰、传输、编码的记法。

ASN.1只包含信息结构,不处理具体业务数据,它不是⼀个编程语⾔。

ASN.1没有限定编码⽅法,各种ASN.1编码规则提供了由ASN.1描述其抽象句法的数据的值的传送语法(具体表达),常见的编码规则有:基本编码规则(BER),规范编码规则(CER,CanonicalEncoding Rules)、唯⼀编码规则(DER,DistinguishedEncoding Rules)、压缩编码规则(PER,PackedEncoding Rules)和XML编码规则(XER,XMLEncoding Rules)。

这些编码规则描述了如何将定义在ASN.1中的值译成适合传输的电码。

ASN.1在OSI的ISO8824/ITU X.208(说明语法)和ISO8825/ITU X.209(说明基本编码规则)规范。

⼏个概念:(1)实际语法指诸如C、ObjectiveCaml等这样实际编程语⾔;(2)抽象语法(AbstractSyntax)指ASN.1,是协议采⽤ASN.1规范描述的描述⽂本。

描绘了与任何表⽰数据的编码技术⽆关的通⽤数据结构。

抽象语法使得⼈们能够定义数据类型,并指明这些类型的值。

抽象语法只描述数据的结构形式,与具体的编码格式⽆关,同时也不涉及这些数据结构在计算机内如何存放。

(3)传输语法(TransferSyntax)指表⽰层交换数据的表⽰⽅法,是实际通讯系统间的码流。

当数据在两个表⽰层实体之间传输时,这些数据的实际⽐特模式表⽰⽅法就是传送语法。

(4)编码指将抽象语⾔法转换成实际通讯系统间⽐特流;(5)编码规则将抽象语⾔法转换成实际通讯系统间⽐特流所遵循的语法规则;⼆.相关背景知识1.为了顺利完成应⽤⾳的通讯,需使⽤以下概念:(1)抽象语法:定义了数据的常⽤结构(包括不同的数据类型),并且建⽴了和应⽤层对话所⽤的构架。

_ASN PER编码规范

_ASN PER编码规范

ASN.1编码规范及实现方式一、A SN.1语言概述ASN.1(Abstract Syntax Notation Number One),抽象语法描述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-T X.691中的PER (Packed Encoding Rules)规则,因此这里讲的ASN编译码规则也就是ASN编码中的PER 编译码规则。

asn.1

asn.1
+-------------------------------|
| most significant byte | octet 1
+-------------------------------|
. .
+-------------------------------|
| least significant byte | octet n
位8位7代表数据的类型标记(Universal-00, Application-01, Context-Specific-10, Private-11);
位6代表该数据单元是否原子式的(Primitive-0, Construct-1);
位5到位1代表类号(Number of tag)。
如下图所示:
1.2 话单基本编码规则说明
1.2.1 ASN.1(BER)编码规则
ASN.1 是 ‘Abstract Syntax Notation One’的缩写。
ASN.1可以被看作一种高层协议描述语言,由于它可以用来清晰的描述复杂的数据结构,因而被广泛的作为应用层协议语法的标准。
ASN.1给协议设计者提供了一些简单类型,如整型(Integer)、布尔型(Boolean)以及字节串(Octet string)等,以这些简单类型为基础,协议的设计者就可以构造出更复杂的数据类型。
+-------------------------------+
...
+-------------------------------|
n+1| L L L L L L L L |
内容 (contents octets);

ASN编码规则详解最

ASN编码规则详解最

ASN编码规则详解最
ASN编码(Advanced Ship Notice)是物流行业中最重要的编码标准,它用于标识和描述货物的信息。

ASN编码被广泛应用于企业的货物物流管
理中,它能有效地跟踪货物的流动情况,保证整个物流运输的有效管理。

ASN编码通常有三部分组成:第一部分是货物编号,它用于表示一批
货物的货物编号;第二部分是物流编号,它用于表示货物运输的载体,以
及物流公司的协调编号,以及货物运输的相关信息;第三部分是货物信息
编号,它用于表示货物的数量、货物的质量、以及货物的运输方式等信息。

ASN编码有助于企业有效地管理物流运输系统,提升物流运输效率。

ASN编码可以帮助企业实现货物流转过程的智能化,减少物流运输中的人
为错误,提升物流运输的成本效率。

ASN编码能够准确定位货物的位置,
有效地跟踪货物的流转情况,进而保证货物的安全运输。

此外,ASN编码还能够有效地追踪货物的质量,及时发现任何异常情况。

ASN编码能够提供全面的物流信息,使物流运输的安全性得以保障,
以确保企业在物流运输中的有效管控。

ASN PER编译码规则技术总结

ASN PER编译码规则技术总结

ASN.1 PER编译码规则技术总结1. ASN.1语言简介ASN.1(Abstract Syntax Notation One)是一种类型描述语言具有类似于面向对象程序设计语言中所提供的类型机制,它可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。

标准包括:ISO 8824-1| ITU-T X.680: Specification of basic notationISO 8824-2| ITU-T X.681: Information object specificationISO 8824-3| ITU-T X.682: Constraint specificationISO 8824-4| ITU-T X.683: Parameterization of ASN.1ASN.1 特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构。

ASN.1 可分为两个部分:语法规则:从数据类型、内容顺序或结构方面来描述消息的内容。

编译码规则:如何编译码实际消息的数据。

特点:表达简单和复杂类型的能力;类型根据大小或数值进行约束;大写开头表示类型名,小写开头的表示变量名/字段名;字段可以标记为OPTIONAL,便于扩展。

2.PER 编码简介3GPP的规范中,由ASN.1到传输码的转换统一使用定义在ITU-T X.691中的PER (Packed Encoding Rules)规则,因此这里讲的ASN编译码规则也就是ASN编码中的PER编译码规则。

PER 有两个变体:对齐方式和非对齐方。

对齐方式用于:Iub、Iur、Iu 接口的ASN.1的传输编码。

非对齐方式:仅用于空中(UU)接口的ASN.1转换,两者的编码过程基本相同。

在对齐的方式下,若前面所有单元的信息经编码后得到的比特流长度不是一个八位组的倍数,而后一个信息又是以八位组为单位的(字符串),那么就需要在前面生成的比特流后面补“0”,使其长度为8的倍数。

ans.1-PER编码

ans.1-PER编码

ASN.1(Abstract Syntax Notation One, 抽象语法符号1)是ITU-T的一个标准集,它用来编码及表示通用数据类型,这些数据类型有可打印串值,八位位组串值,位串值,整数值以及用可移值方式组合而成的其他类型序列值.简单的说,ASN.1指定了以何种方式对非平凡的数据类型进行编码,以便其他任何平台及第三方工具都能够解释其内容.比如,字母a在一些平台以ASCII编码为十进制数值97,而在其他非ASCII平台上,可能会是另外的编码.而ASN.1指定了一种编码方式,在任何平台上,字母a的编码都是统一的.ASN.1语法.ASN.1语法遵循传统的巴科斯范式BNF风格.最基本的表达式如:Name ::= type . 表示为定义某个名称为Name的元素,它的类型为type.例如:MyName ::= IA5String . 表示为定义了一个名为MyName的元素或变量,其类型为ASN.1类型IA5String (类似于ASCII字符串).类型BER简单定长方法结构化定长方法和非定长方法DERDER是BER的子集,它定义了使用一个octet string来表示任何ASN.1值的编码方法。

DER 用于需要使用唯一的octet string编码的应用程序,例如根据一个ASN.1编码来计算数字签名。

DER在X.509的第8.7节定义。

DER在第3节给出的规则基础上增加了如下限制:1. 如果长度在0-127之间,必须使用短型长度表示法。

2. 如果长度大于等于128,必须使用长型长度表示法。

并且长度必须使用尽可能少的字节表示。

3. 对于简单string类型和在其基础上使用隐式标签生成的类型,必须使用简单定长编码方法。

4. 对于结构化类型和在其基础上使用隐式标签生成的类型、及在任何类型基础上使用显式标签生成的类型,必须使用结构化定长编码方法。

对于特殊类型(如BIT STRING、SEQUENCE、SET和SET OF)的其他限制见第5节。

asn.1的per编码例子

asn.1的per编码例子

asn.1的per编码例子
ASN.1(Abstract Syntax Notation One)是一种抽象语法标记语言,用于表示数据结构,而PER(Packed Encoding Rules)是ASN.1的一种编码方式。

以下是一个简单的PER编码例子:
假设我们有一个OID(Object Identifier)表示一个字符串:"1.2.3.4.5"。

1. 首先,根据ASN.1的规定,我们将OID分为两部分:
-第一部分:1(类别标识)
-第二部分:2.3.4.5(数值标识)
2. 接下来,我们将第一部分和第二部分分别进行PER编码。

-类别标识(1)编码为:00000001(1字节)
-数值标识(2.3.4.5)编码为:00100010 00100011 00100100 00100101(4字节)
3. 最后,将两部分编码后的结果连接在一起,得到完整的编码:00000001 00100010 00100011 00100100 00100101。

这个例子展示了如何将一个OID进行PER编码。

在实际应用中,ASN.1
编码还包括其他类型,如INTEGER、BOOLEAN、SEQUENCE等,编码方式类似,只是遵循不同的规则。

需要注意的是,这个例子中的编码结果是符合PER编码规则的,但在实际应用中,ASN.1编码可能还会受到其他因素(如压缩、填充等)的影响,从而使编码结果有所不同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
所以长度编码 L 为 3 位,而 3-bmin=2。因此编码为 010。后面则跟着 3 个八位组如:00000000 11111111 00000000 。
3.5 CHARACTER STRINGS 字符串的编码方式有多种情况的编码方式与 BITSTRING 和 OCTETSTRING 的编码方
式类似,只是对不同类型的字符串有不同的编码方法,下面将着重说明 CHARACTER STRINGS 中常用的 NumricString、PrintableString、NameString 的编码方法:
modulation 选择mod-QPSK,编码为0;
ss-TPC-Symbols 为空类型,不用编码
综上可得:该结构编码为100 0101 1 0
3.10 SEQUENCE(SIZE(ib..ub))OF component SEQUENCE OF 在 ASN.1 描述中用作循环。循环次数由 SIZE 确定。SEQUENCE OF 的前 导比特为 SIZE 中数的范围,编码规则与整数型相同。紧跟在前导比特之后的是循环体成员 component 的编码,component 可以是结构也可以是一个整型的参数。各成员编码后顺序放 置,每两个成员之间编码值不需分隔符,该类型对应于 C 语言中的数组。下面将以一个例 子来说明:
为第 3 项编码值为 2,选择项编码为:10。然后再对 small 项编码,因为取值为 16,索引值 为 14,整数范围是 2~17 共 16 个数,要编 4 比特,因此要对索引值 14 编 4 比特,即编码 为:1110。
3.9 SEQUENCE
一般说来,序列编码后都会产生一个前导位图,用以指示序列中的可选项或缺省项是否
例1:
RoutingParameter ::= BIT STRING (SIZE (10)) 上面的 RoutingParameter 是一个定长,且长度为 10 的比特串,编码时直接给出 10 位二 制数,例如编码为:‘1111100000’。 例 2:
SIB-Data-variable ::= BIT STRING (SIZE (1..214)) SIB-Data-variable 是一个变长的比特串,编码之前首先编长度,因为长度的范围为 1~ 214 共需要编 8 比特,因此若 SIB-Data-variable 是一个 5 位的比特串时则编码为:00000100 11111(前面 8 位是比特串长度的编码,后面 5 位是该比特串的值)。
ASN.1 编码规范及实现方式
一、ASN.1 语言概述
ASN.1(Abstract Syntax Notation Number One),抽象语法描述 1,是一种 ISO/ITU-T 标准。该语言描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供的一整套 正规的格式用于描述对象的结构,具有类似于面向对象程序设计语言中所提供的类型机制, 可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。因此,ASN.1 是以一种独立于计算机架构和语言的方式来描述数据结构的。同时,ASN.1 的描述可以容 易地映被射成 C 、C++ 或 Java 的数据结构,直接作为应用程序代码使用,并得到运行程 序库的支持。
modulation
ENUMERATED { mod-QPSK, mod-8PSK },
ss-TPC-Symbols
NULL ,
additionalSS-TPC-Symbols
INTEGER(1..15)
OPTIONAL
}
上面是一个SEQUENCE结构编码时我们分两步进行:
① 确定其前导位图.
该结构中有3个可选项,故可确定位图长度为3bit。我们根据需要选择其中的项,若某
3.4 OCTETSTRING 八位组串编码的原则与比特串相同。分成长度可变的八位串和长度不可变的八位串两
种。与比特串编码不同的是编码的值是八位串而不是比特串。 例: VALUE ::= OCTETSTRING(SIZE(1..8)) 若 VALUE 值是长度为 3 的八位串,则编码为:010,后面跟着 3 个因为长度区间为八,
ASN.1 作为一种数据表示标准产生于 20 世纪 80 年代早期的开放系统互联(OSI)网络模 型,虽然 OSI 模型并没有得到广泛的应用,但是 ASN.1 标准在继续进化。今天已有大量的 实际应用,这些应用包括:3G 移动系统、IP 语音、安全应用、传统电信网络、军事和空间 应用等许多方面。
另外,ASN.1 有多种标准化编码规则:如基本编码规则(BER)、规范编码规则(CER)、 识别名编码规则(DER)、压缩编码规则(PER)和 XER 编码规则(XER)。这些编码规 则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而与计算机、编程语言或 它在应用程序中如何表示等因素无关。同时,该编码具有先进的标识系统、信息扩展性、支 持快速可靠传输等特点,这在无线传输中是一种优势。
另外,PER 编译码必须依赖于 3GPP 的标准文档,也就是说,收发双方也必须知道层 3 消息的具体结构,这样编码和译码的才能被编译和识别。
三、PER 的编码规则
PER 的编码规则定义了多种数据类型,简单的地可分为两大类。第一类是结构类,如 CHOICE、 SEQUENCE 、ENUMERATED 等。另一类是简单类,如 INTEGER、 REALL 、 BOOLEAN 等。下面将对以下常用的类型的编码规则做一个总结: 3.1 INTEGER
BOOLEAN
} 上面的 segmentationIndication 是一个 BOOLEAN 型,意思是段的指示。当我们需要这
种指示时编码为 1,不需要时编码为 0。
3.3 BITSTRING 比特串的编码分成两种情况:长度固定:直接将比特串与前面的比特流叠加即可;长度
可变:按前述整型编码的规则,以描述长度范围最少比特的原则在比特串前面加上用于描述 长度所需的比特,然后将待编码的比特串加在后边。
整型是协议规范中用得最多的一种数据类型。对这种数据类型编码之前,首先要确定其 取值范围,即上下界之间的数的个数。而编码的长度是根据数的范围来确定的。当 2m<范 围≤2m+1 时,对该整数取值用 m+1 位二进制表示。但对范围内的数的编码不是对其实值而是 对其索引值进行编码,编码的索引值是从 0 开始的。
存在。每以可选项(或缺省项)用 1bit 来指示,“1”表示存在,“0”表示不存在。若一
个序列型中包含 n 个标注为可选(或缺省)的成员,那么,前导位图的长度就是 n bit。位
图中的比特顺序与序列中各可选(或缺省)的成员排列一致。然后再对 SEQUENCE 中的各
成员进行编码,这种类型对应于 C 语言中的结构。下面将以实例来说明:
IndividualTimeslotInfo-LCR::= SEQUENCE
{
timeslotNumberINTEGER(1..15)
OPTIONAL,
tfci-Existence
BOOLEAN,
midambleShiftAndBurstType
MidambleShiftAndBurstType-LCR OPTIONAL,
因此,ASN.1 不但适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构, 而且还有适合的协议编码方式。同时,3GPP 标准 ASN.1 文档中也包含了完整、详细的数据 单元(PDU)协议。这些都为 3G 移动系统中 ASN.1 的应用打下了基础。3G 协议的 ASN 编 码跟一般的编码相比具有高效性、严谨性以及规范性等特点。
项选择了编码位图为1,否则为0。假设我们选择了timeslotNumber而其它项都不选的话,则
在对结构内部编码之前应编码为:100
② 根据SEQUENCE结构内部的项,从上到下依次编码。
TimeslotNumber 取值为6,则编码为0101;
tfci-Existence 存在TFCI指示,则编码为1;
码。其值的范围从 0 开始。枚举类型编码时,只对其项的索引值编码。 例: Modulation ::= ENUMERATED { mod-QPSK , mod-8PSK } 上面是一个 Modulation 是枚举类型,编码时,首先看枚举项的个数为 2,21=2,因此
编码为 1bit,当选 mod-QPSK 调制模式时编码为 0,选 mod-8PSK 调制模式时编码为 1。
3.8 CHOICE 选择型的编码类似于整型,以最少的比特来描述选择体内各成员的索引值。值的范围从
0 开始。与枚举不同的是,编完 CHOICE 的索引值,紧接着就应编码索引值对应的单元。而 枚举型将索引值编完后就结束。下面将以一个例子对这种类型的编码进行说明:
例:
NumberOfTransportBlocks::= CHOICE
① NumricString 类型中成员为 0~9,共十个数。因此在编码时长度可定为 4bit(23<10<24).,因此此种类型的串编码是每个数字编为 4 比特。
同理,PrintableString 中包含的字符为:“a..z”、“A..Z”、 “0..9”、“space”、“,”、“(”、 “)”,“+”、“、”、“-”、“/”、“.”、“=”、“?”、“:”共 74 个字符,每个字母应编码为 7 比 特。NameString 共 52 个大小写字母,每个字母编码则为 6bit。
② NumricString 123 的编码为: 0001 0010 0011。 NameString “cat”编码为: 011100 011010 100010,上面每个字母编 6 比特,每 个字母的值是其在 NameString 中的索引值。
3.6 NULL NULL 类型不用编码。
3.7 ENUMERATED 枚举型的编码类似于整型,也是以描述枚举内全体成员所需比特数最少的原则进行编
相关文档
最新文档