C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索
查看: 5680|回复: 0

PER编码规则 [复制链接]

军衔等级:

亚星游戏官网-yaxin222  四级通信军士

注册:2009-8-21
发表于 2009-11-24 10:10:12 |显示全部楼层
3.3  PER

BER编码因其在大小上的开销过大而受人诟病,和真实编码数据相比,平均需要增加50%的额外数据。正式这个原因推动了PER(Packed 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<Tag, Length, Value>不同,PER的格式为:’[P][L][V]’ <optional Preamble, optional Length, optional Value>,这里PLV中每个域都不再是八位组串而是比特串。
因为Length可以省略(甚至Value也可以省略),那么就不能从编码中得知边界,所以解码器必须知道抽象描述才能正确解码。PER编码中没有Tag域,因此PER不再缺省支撑扩展,必须明确在描述中添加扩展符。
只有当长度没有被SIZE固定或者数据长度很重要的情况下,才对Length进行编码;对SEQUENCE或者SET类型的值编码时,汇总前面增加个bitmap来标识可选成员是否出现;同样,在编码CHOICE的被选择成员前,会增加一个序号指示其位置。
和BER相比,PER使得编解码器处理时间相对要少(但达不到两倍的处理速度),传输速度更快。
3.3.2  四种变形

PER编码规则可以分为基本的(Basic)和规范的(Canonical)两类,每一类又可以分为对齐(Aligned)和不对齐(Unaligned)两种。规范形式的优势在CER和DER中已经讨论过了,主要用在中继接力系统和安全系统等使用数字签名的场合。在基本形式中,一个抽象值可能有多个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 STRING、OCTET STRING
SIZE约束、约束组合、约束扩展
OBJECT IDENTIFIER

NumericString、PrintableString、VisibleString、ISO646String、
IA5String、UniversalString、
BMPString
FROM约束、SIZE约束、类型包含约束、约束组合、SIZE约束中的扩展
not-known-multiplier character
string types

GeneralizedTime、UTCTime、ObjectDescriptor

open types

SEQUENCE、SET

SEQUENCE OF、SET OF
SIZE、约束组合、约束扩展
CHOICE

EXTERNAL

EMBEDDED PDV、CHARACTER STRING
WITH COMPONENTS

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

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

大家考察一个非负数的四种形式的编码,因为自然数常出现在长度域L、bitmap的大小、CHOICE中的序号以及INTEGER类型边界中。
对于INTEGER类型,PER可见约束之一是值域约束。对于有值域约束(bmin..bmax)的值n,如果下边界bmin足够大,PER编码n- bmin的代价就更小。如下:
Figure 3-26 有约束自然数的基本编码规则
I. 有约束数编码

有约束指值域的上、下边界都有限。如果d=1,即只有一个值,则收、发双方都知道,那么就没有编码的必要。
在对齐方式下:∞
l           当2≤d≤255,n- bmin的编码占用log2d个比特。这些比特添加在待发送比特域之后,不进行八位组对齐,不编码L;
l           当d=256,n- bmin的编码占用一个八位组,不编码L;
l           当257≤d≤65,536,n- bmin的编码占用两个八位组,不编码L;
l           当65,537≤d,n- bmin的编码占用log256d个八位组,并且在前面增加L的编码。
在不对齐方式下:
n- bmin的编码占用log2d个比特,不编码L。
II. 半约束数编码

半约束指值域没有上边界(上边界为+∞)。
n- bmin的编码占用log256d个八位组,并且在前面增加L的编码。
III. 无约束数编码

无约束指值域没有下边界(即使存在上边界)。
按照BER中整数的编码方式编码,并且在前面增加L的编码。
IV. 常见小自然数编码

这种情况经常出现在对表征SEQUENCE、SET类型可选成员的Bitmap长度进行编码时;或者CHOICE类型序号编码时。这种长度相当小,但是却没有一种限定。
l           当0≤n≤63时,n以6个比特编码,并且在前面增加一个0比特(八位组不对齐):
l           当64≤n时,n以半约束数方式编码,下边界为0,并且在前面增加一个1比特:
3.3.5  长度域编码

与BER中长度域表征编码的八位组数不同,在PER的长度域出现下,如果编码为比特串则表征比特位数;如果编码为八位组串(OCTET STRING和open类型)则表征八位组个数;如果编码为known-multiplier character string则表征字符数;如果是SEQUENCE OF或者SET OF则表征成员个数。
每当ASN.1描述中对类型通过(SIZE(lmin..lmax))做大小限定时(lmax可以是+∞),长度l的值要按照3.3.4  中的规则编码。作为特例,当lmin =lmax≤65,535时,长度不需要发送,因为解码器知道该长度。
对齐方式下:
l           当l是一个bitmap的长度,l-1作为常见小自然数编码;
l           当lmax≤65,535,l作为有约束的数编码(约束为(lmin..lmax));
l           当65,535≤lmax,或者lmax是无穷大:
-当l≤127,l以一个八位组编码(八位组对齐),最高比特位为0;
-当128≤l≤16,383,l以两个八位组编码(八位组对齐),最高两个比特位为10;
-当16,384≤l,整个编码以f*16K为单位分割(f取值为1,2,3或者4)。除最后的片段外,其余每段,长度都以一个八位组编码,最高两个比特位为11。如果编码恰好时16K的整倍数,则在最后补充一个全空的八位组;否则最后一个片段按照前两条进行编码。例如占147,457个单元的编码可以为:

不对齐方式下:
l           当l是一个bitmap的长度,l-1作为常见小自然数编码;
l           当lmax≤65,535,l-lmin以占用log2(lmin-lmax+1)个比特编码;
l           当65,534≤lmax-lmin,或者上边界为无穷大:
-当l≤127,l以八比特编码,最高比特位为0;
-当128≤l≤16,383,l以十六比特编码,最高两个比特位为10;
-当16,384≤l,编码方式域对齐类似,但是不是八位组对齐的。

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

举报本楼

您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-28 08:43 , Processed in 0.273155 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图