锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

ASN.1探索 - 3 编码规则与传输语法(3 - PER)

时间:2023-03-04 09:30:00 xv2p继电器777503

本章主要介绍BERPER两种编码规则及其衍生规则。

3.3PER

BER编码因其大小成本过高而受到批评。与真实编码数据相比,平均需要增加50%额外数据。正式这个原因推动了PERPacked Encoding Rules)诞生。同样的协议,PER编码与BER相比在大小上至少有40%60%改进。所以在VoIP、视频电话、多媒体、3G广泛应用于需要高速数据传输的领域。

3.3.1基本规则

PER编码规则的黄金定律是:obtain the most compact encoding using encoding rules as simple as possible”。

BER三元组用于中递归TLV不同,PER的格式为:’[P][L][V]’ ,这里PLV每个域不再是八位组串,而是比特串。

因为Length可以省略(甚至Value也可以省略),所以不能从编码中知道边界,所以解码器必须知道抽象描述才能正确解码。PER编码中没有Tag域,因此PER扩展符必须在描述中明确添加,不再缺乏省份支持扩展。

只有当长度没有时SIZE当固定或数据长度非常重要时,它是正确的Length编码;对SEQUENCE或者SET当类型值编码时,在总结前添加一个bitmap识别可选成员是否出现;同样,在编码中CHOICE在选择成员之前,将添加一个序号来指示其位置。

BER相比,PER使编解码器处理时间相对较少(但处理速度不到两倍),传输速度更快。

3.3.2  四种变形

PER编码规则可以分为基本的(Basic)和规范的(Canonical)两类,每一类又可以分为对齐(Aligned)和不对齐(Unaligned)两种。规范形式的优势在CERDER中已经讨论过了,主要用在中继接力系统和安全系统等使用数字签名的场合。在基本形式中,一个抽象值可能有多个PER编码。但是,在有限测试后,我们知道基本形式编码器要比规范形式编码器速度更快。

对齐方式下,为了保持八位组对齐,可以增加值为0的比特。不对齐方式则编码更为紧凑,但是在编解码时需要花费更多的处理时间。不对齐方式下,不会检查八位组的对齐情况,只在整个数据编码结束后,才进行补位。

注意对齐和不对齐两种方式不能互通,即只能用同种的解码器解码同种编码器编码后的码流。在四种变形中,基本不对齐方式编码是最紧凑的。按照紧凑性降低的顺序,后续依次为:规范不对齐方式,基本对齐方式和规范对齐方式。

在表示层传输上下文协商中,我们需要用Object Identifier指明具体采用的是哪种变形。具体值,请参考第二章中Object Identifier注册树。

3.3.3  PER可见子类型约束

为了最大限度的压缩编码,PER需要依赖ASN.1描述中的子类型约束。约束增加的越具体,PER越能得到更优化的编码。而且PER会使用到的约束都是经常使用的约束,这样也使得PER编译器容易实现。此外,这些约束都是编译器在编译过程中“静态”使用的,不会增加实际编解码过程处理时间。

我们称这类约束为PER可见约束(PER-Visible Constraints),它们只包含下表所列:

Table 3-3 PER可见约束

类型

PER可见约束

BOOLEAN

NULL

INTEGER

单值约束、值域约束、类型包含约束、约束组合、约束扩展

ENUMERATED

REAL

BIT STRINGOCTET STRING

SIZE约束、约束组合、约束扩展

OBJECT IDENTIFIER

NumericStringPrintableStringVisibleStringISO646String

IA5StringUniversalString

BMPString

FROM约束、SIZE约束、类型包含约束、约束组合、SIZE约束中的扩展

not-known-multiplier character

string types

GeneralizedTimeUTCTimeObjectDescriptor

open types

SEQUENCESET

SEQUENCE OFSET OF

SIZE、约束组合、约束扩展

CHOICE

EXTERNAL

EMBEDDED PDVCHARACTER STRING

WITH COMPONENTS

open types指引用到一个类型域、一个可变类型的值域、或者一个可变类型值集合域。即引用到信息对象类中的类型。

 

不在上表中的,都不是PER可见约束, PER编译器也就不做相应优化。

3.3.4  数的编码

我们考察一个非负数的四种形式的编码,因为自然数常出现在长度域Lbitmap的大小、CHOICE中的序号以及INTEGER类型边界中。

对于INTEGER类型,PER可见约束之一是值域约束。对于有值域约束(bmin..bmax)的值n,如果下边界bmin足够大,PER编码n- bmin的代价就更小。如下:

Figure 3-26 有约束自然数的基本编码规则

I. 有约束数编码

有约束指值域的上、下边界都有限。如果d=1,即只有一个值,则收、发双方都知道,那么就没有编码的必要。

在对齐方式下:

l           2d255n- bmin的编码占用log2d个比特。这些比特添加在待发送比特域之后,不进行八位组对齐,不编码L

l           d=256n- bmin的编码占用一个八位组,不编码L

l           257d65,536n- bmin的编码占用两个八位组,不编码L

l           65,537dn- bmin的编码占用log256d个八位组,并且在前面增加L的编码。

在不对齐方式下:

n- bmin的编码占用log2d个比特,不编码L

II. 半约束数编码

半约束指值域没有上边界(上边界为+)。

n- bmin的编码占用log256d个八位组,并且在前面增加L的编码。

III. 无约束数编码

无约束指值域没有下边界(即使存在上边界)。

按照BER中整数的编码方式编码,并且在前面增加L的编码。

IV. 常见小自然数编码

这种情况经常出现在对表征SEQUENCESET类型可选成员的Bitmap长度进行编码时;或者CHOICE类型序号编码时。这种长度相当小,但是却没有一种限定。

l           0n63时,n6个比特编码,并且在前面增加一个0比特(八位组不对齐):

l           64n时,n以半约束数方式编码,下边界为0,并且在前面增加一个1比特:

3.3.5  长度域编码

BER中长度域表征编码的八位组数不同,在PER的长度域出现下,如果编码为比特串则表征比特位数;如果编码为八位组串(OCTET STRINGopen类型)则表征八位组个数;如果编码为known-multiplier character string则表征字符数;如果是SEQUENCE OF或者SET OF则表征成员个数。

每当ASN.1描述中 对类型通过(SIZE(lmin..lmax))做大小限定时(lmax可以是+),长度l的值要按照3.3.4  中的规则编码。作为特例,当lmin =lmax65,535时,长度不需要发送,因为解码器知道该长度。

对齐方式下:

l           l是一个bitmap的长度,l-1作为常见小自然数编码;

l           lmax65,535l作为有约束的数编码(约束为(lmin..lmax));

l           65,535lmax,或者lmax是无穷大:

 l127l以一个八位组编码(八位组对齐),最高比特位为0

128l16,383l以两个八位组编码(八位组对齐),最高两个比特位为10

-当16,384l,整个编码以f*16K为单位分割(f取值为123或者4)。除最后的片段外,其余每段,长度都以一个八位组编码,最高两个比特位为11。如果编码恰好时16K的整倍数,则在最后补充一个全空的八位组;否则最后一个片段按照前两条进行编码。例如占147,457个单元的编码可以为:

 

不对齐方式下:

l           l是一个bitmap的长度,l-1作为常见小自然数编码;

l           lmax65,535l-lmin以占用log2(lmin-lmax+1)个比特编码;

l           65,534lmax-lmin,或者上边界为无穷大:

-当l127l以八比特编码,最高比特位为0

128l16,383l以十六比特编码,最高两个比特位为10

-当16,384l,编码方式域对齐类似,但是不是八位组对齐的。

 

当类型有可扩展的SIZE约束,并且待发送值不在该约束扩展的根部分,则长度l作为半约束数编码(即lmin=0 lmax =+)。

3.3.6  各类型编码

I. BOOLEAN

以一个比特编码,1TRUE0FLASE

直接编码,不编码长度,也不做八位组对齐。

II. NULL

不编码。

如果NULL是作为CHOICE的一个选项或者SEQUENCESET可选成员值出现,则已经有bitmap能表征。

III. INTEGER

假设INTEGER类型拥有有效的值域范围(bmin..bmax),当描述中INTEGER类型有至少一个可扩展的PER可见约束(PER-Visible Constraint),在编码时会在前面增加一个前导(Preamble)比特(不考虑八位组是否对齐)。当

相关文章