相关文章推荐
帅气的跑步鞋  ·  ASN.1探索 - 3 ...·  2 月前    · 
聪明的消防车  ·  公共化AI·  9 月前    · 
干练的西装  ·  泗门镇·  9 月前    · 
没有腹肌的西瓜  ·  看见·  1 年前    · 

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

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 可见约束

NumericString PrintableString VisibleString ISO646String

IA5String UniversalString

BMPString

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

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

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

3.3.4 数的编码

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

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

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

I. 有约束数编码

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

在对齐方式下:

l 2 d 255 n- b min 的编码占用 log 2 d 个比特。这些比特添加在待发送比特域之后,不进行八位组对齐,不编码 L

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

l 257 d 65,536 n- b min 的编码占用两个八位组,不编码 L

l 65,537 d n- b min 的编码占用 log 256 d 个八位组,并且在前面增加 L 的编码。

在不对齐方式下:

n- b min 的编码占用 log 2 d 个比特,不编码 L

II. 半约束数编码

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

n- b min 的编码占用 log 256 d 个八位组,并且在前面增加 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(l min ..l max )) 做大小限定时( l max 可以是 + ),长度 l 的值要按照 3.3.4 中的规则编码。作为特例,当 l min =l max 65,535 时,长度不需要发送,因为解码器知道该长度。

对齐方式下:

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

l l max 65,535 l 作为有约束的数编码(约束为 (l min ..l max ) );

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

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 l max 65,535 l-l min 以占用 log 2 (l min -l max +1) 个比特编码;

l 65,534 l max -l min ,或者上边界为无穷大:

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

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

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

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

3.3.6 各类型编码

I. BOOLEAN

以一个比特编码, 1 TRUE 0 FLASE

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

II. NULL

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

III. INTEGER

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

在编码 n- b min 过程中,如果需要编码 L (前面讨论过),则增加长度域 L 的编码。长度 L 的约束为 (1..l max ) ,其中 l max =log 2 b max

如果待发送值 n 属于约束的扩展部分,则长度按照无约束自然数方式编码,如值:

v INTEGER (3..6, ..., 8..10) ::= 8

的对齐方式编码为:

IV. ENUMERATED

如果该 ENUMERATED 类型不是可扩展的,则先按照数值大小做升序排列,然后以 0 为起点,步长为 1 给每个成员编上序号。对该类型的值编码时,只将序号以值域约束 (0..Index max ) 编码。如:

v ENUMERATED {orange(56), green(-2), red(2476)} ::= orange

PER 编码为“ 01 ”(因为此时为 Index max 2 ,需要两个比特)。

如果该 ENUMERATED 类型是可扩展的,那么要在编码前增加一个前导( Preamble )比特。当值在扩展的根部分时,该比特为 0 ;否则该比特为 1 。同时对扩展部分的成员重新进行编号,起点仍为 0 ,步长为 1 。编码时对值在根部分的情况,就和该类型是不可扩展时一样;值在扩展部分的情况,对序号按照自然数方式编码。如:

v1 ENUMERATED {orange(56), green(-2), red(2476), …, yellow}

::= orange

PER 编码仍然为“ 01 ”;而

v2 ENUMERATED {orange(56), green(-2), red(2476), …, yellow, purple}

::= yellow

PER 编码则为“ 1 0 000000 ”。

V. REAL

对值的编码规则和 CER 或者 DER 相同(而且是八位组对齐的),并且在前面增加长度域 L 的编码。这里 L 表征的是八位组数。

VI. BIT STRING

如果该 BIT STRING 类型有可扩展的 PER 可见大小约束( PER-Visible Size Constraint ),那么要在编码前增加一个前导( Preamble )比特。当值在扩展的根部分时,该比特为 0 ;否则该比特为 1

对于有大小约束 (SIZE(l min ..l max )) BIT STRING 类型:

l l min l max 16 比特,不发送长度,直接编码(不是八位组对齐的);

l 17 l min l max 65,536 比特,不发送长度,直接编码(在八位组对齐方式下是八位组对齐的);

l 65,53 7 l min l max ,长度按照 3.3.5 中约定编码;而值按照需要进行分段;

l l min l max (或者没有有效的大小约束),长度按照 3.3.5 中约定编码;而值按照需要进行分段。

如果 BIT STRING 类型包含一个命名位置列表,所有结尾的 0 比特都被去掉;此外,为了满足大小约束,可以增加或者删除结尾 0 比特来达到最小的长度。

VII. OCTET STRING

BIT STRING 规则相同,不过长度域 L 表征的是八位组的个数而不是比特数。

VIII. OBJECT IDENTIFIER

值的编码规则与 BER 相同,前面需要增加长度域 L 的编码。

IX. RELATIVE-OID

值的编码规则与 BER 相同,前面需要增加长度域 L 的编码。

X. 字符串与日期

首先描述 known-multiplier 字符串类型,如果这种类型是受约束的,带了一个形如( SIZE( l min , l max ) )的有效的 size 约束和一个形如( FROM(" c 1 "|"c 2 "|...|"c n ") )的有效的字符约束。如果 FROM 约束是可扩展的,则有效的字符约束就包括了父类型包含的所有的字符。

如果 SIZE 约束是可扩展的,则在 bit-field 上加一个比特。如果串长属于扩展根的范围内,则该比特等于 0 ,否则该比特等于 1 。记住,如果 FROM 约束中包含了可扩展的符号,则该约束对于 PER 不可见,即不会改变扩展比特的取值。

PER 压缩 known-multiplier 字符串类是基于有效的字符约束的。假设 n 是有效字符约束中字符的个数, b [log 2 n], c = [log 2 b], 则每个字符在 aligned 变体中被编码成 B = 2 c 个比特(大于 b 的最小的 2 的次方),而在 unaligned 变体中被编码成 B = b 个比特 v min v max 分别是 (" c 1 "|"c 2 "|...|"c n ") 对应的最小和最大的字符值。

如果 v max 2 B -1 , 即所有的系列里的 (" c 1 "|"c 2 "|...|"c n ") 都可以用 B 个比特来编码,串中的每个字符都可以作为在区间 ( v min .. v max ) 之间的一个整数来编码。这就避免了给字符重新排序赋值。否则,字符序列 (" c 1 "|"c 2 "|...|"c n ") 按照标准 [ISO646] [ISO10646-1] 中定义的顺序加索引,索引从 0 开始,每次加 1 。这个新的索引号以 B 个比特来编码和发送。

如果字符串的长度是固定的 ( l min = l max ) 并且小于 64K ,则长度字段 L 就不需要了,在 aligned 变体情况下,只有当 B × l max 17 时才需要 octet - aligned .

如果字符串的长度不固定或者长度虽然固定但大于 64K ,则长度字段按照章节 3.2 编码,然后附着到码流中(在在 aligned 变体情况下,只有当 B × l max 17 时才需 octet - aligned )。

例如,字符串

v IA5String (FROM ("ACGT")^SIZE(3)) ::= "TAG"

被编码成 11 00 10 。而字符串

v IA5String ::= "TAG"

unaligned 变体情况下被编成(注: IA5String v min v max 分别为 0 127 ):

aligned 变体情况下被编成(下面的方框表示从整数个字节开始)

日期类型 GerneralizedTime UTCTime 的编码方式在 basic PER 情况下与 BER 相同,在 canonical PER 情况下与 DER 相同。

对于不属于 known-multiplier 的字符串类型,所有的约束对 PER 都是不可见的。它们的编码方式在 basic PER 情况下与 BER 相同,在 canonical PER 情况下与 DER 相同。长度字段 L 作为一个无约束整数加在前面。

对于 known-multiplier 字符串类型在定义中最小和最大的字符值请参考下表:

Table 3-4 known-multiplier 字符串的最小最大字符值

XI. Open 类型

一个 open 类型的值实际上是一个任意类型的值,这个类型对于发送方和接收方而言都是已知的。因此这个值就被编成它的有效类型而没有类型的指示。通常情况下,这个值的类型已经在前面发送过了,解码器会存储类型到关联表中,而后在收到 open 类型能够的值后根据关联表就可以查询到对应的类型进行解码。

相应的值编码后,不是整数个字节的情况补充值为 '0' 的比特位以便使该码流为整数个字节(假设为 n )。并在头部加上长度字段 L 表示字节数 n L 作为无约束整数进行编码。

XII. SEQUENCE

首先,如果有 COMPONENTS OF 语句,则由相应的类型进行替换。

如果 SEQUENCE 类型是可扩展的,则在编码的头部加上一个比特的 bit-field ,如果 SEQUENCE 的取值中有属于扩展附加部分的成员,则该比特等于 1 ,否则等于 0

如果 SEQUENCE 的定义中在扩展根部( extension root )有 "n" 个成员被置为 OPTIONAL DEFAULT ,则在编码头部再添加 "n" 个比特的 bit-field ,该 bit-field 从第一个 bit 开始,依次指示被标记为 OPTIONAL DEFAULT 的成员是否出现。如果为 1 ,则该成员出现,否则没有出现。如果“ n ”小于 64K ,则这个 bit-field 应该直接添到码流中。如果 "n" 大于等于 64K 按照前面提到的处理方法把“ n ”个 bit bit-field 分段并添加到域序列中,前面的长度字段 L 就作为一个有约束的整数编码,而约束的上限和下限都等于 n

以上为导言( preamble )部分,导言之后是各成员类型的编码,依次出现。

canonical PER 中,对于标记有 DEFAULT 的成员,如果要编码的值就是缺省值,那么这个成员的编码省略;在 basic PER 中,如果序列中标记为 DEFAULT 的成员是一个简单类型,当它的值为缺省值时,它的编码应省略。而对于结构化的成员 (SEQUENCE, SET, SEQUENCE OF, SET OF, CHOICE) ,即使它的取值是缺省值时,是否被编码是由发送方来决定的。

如果类型是可扩展的但取值中没有出现扩展附加部分,则该 SEQUENCE 的值的编码已经结束。

如果类型是可扩展的并且取值中有 p 个扩展附加部分(双重方括号内的所有成员只当作一个附加扩展部分),则添加一个 p 个比特的 bit-map ,对应的比特取值为 1 则表示该扩展附加部分出现,否则就没有出现。为长度 " p " bit-map 增加一个长度指示,编码方式为一个通常的小的非负整数的编码。

以后,依次出现的是各扩展附加部分的编码值

扩展附加部分的编码方式如下:

l 如果该扩展附加部分是单个的成员,则作为 open 类型来编码,即包括长度字段和整数个字节的值字段。

l 如果该扩展附加部分是由双重方括号内的所有成员组成的,则该扩展附加部分的值作为 open 类型来编码。与上面不同的是:双重方括号内的所有成员的值被当成一个 SEQUENCE 类型的取值来编码,编码方式参见本节上段。

注意在 SEQUENCE 类型的值没有包括长度字段,因为根据扩展根部的可选成员对应的 bit-map 和扩展附加部分对应的 bit-map 使解码器推断出成员是否存在。

XIII. SET

SET 类型的扩展根部( extension root )的成员是按照 canonical order 来排序的,具体法则如下:

1) 首先按标签类型排序,按照 UNIVERSAL APPLICATION context-specific PRIVATE 四种类型依次排序, UNIVERSAL 标签类型的元素在最前, PRIVATE 标签类型的元素在最后;

2) 在标签类型内部,按照标签值的大小排序,小的在前,大的在后。

在排序过程中如果发现某个成员是没有标签的 CHOICE 类型,则该 CHOICE 类型的标签值就会等于其所有选项中标签的最小值。在 CHOICE 类型嵌套的情况下亦是如此。

如果 SET 类型是可扩展的且 SET 类型的值中有扩展附加部分,则扩展附加部分的排序按照其协议定义时的顺序,不做改动(因为在新增扩展附加部分时对应的标签必须符合 canonical order )。

经过上述的排序后, SET 类型的编码就按照 SEQUENCE 类型的编码。

XIV. SEQUENCE OF

显式 PER 限制仅仅对 SEQUENCE OF 类型的成员个数有效。

假设成员数目的上限为 "ub" ,下限为 "lb" 。如果没有上限或者上限值 ub 大于等于 64K ,就认为 ub 不确定;如果没有下限, "lb" 置为 0 。假设实际的 SEQUENCE OF 的成员数量为“ n ”,编码按如下规则进行:

1) 如果有 size 约束且该约束可扩展,则在码流上添加一个 1 比特的 bit-field (不需要 octet-aligned )。 如果元素的个数属于约束的根部则这个比特等于 0 ,反之该比特等于 1 。在前一种情况下,调用节 3.2 为生成的编码增加一个半约束数的长度指示,长度值等于 n

2) 如果成员值的数目固定且小于 64K ,则没有长度指示, SEQUENCE OF 的各成员的值的编码依次填充到生成的编码中去。

3) 其它情况,增加长度指示成员值的数目。如果 "ub" 存在,则长度指示作为约束数编码,否则作为半约束数类型的整数编码。

需要注意的是在给每个成员编码时,在 aligned 变体情况下需要 octet-aligned

XV. SET OF

basic variant 情况下,把每个 SET 类型的元素按顺序编码即可,而不需要调换顺序。而在 canonical variant 情况下需要先把各 SET 中的元素按 canonical order 进行排序再编码,并在必要的时候需要做一些调整,如加上一些 '0' bit 以形成整数个字节,或加上值为 0 的字节以使短部分和长的部分长度一致。

XVI. CHOICE

先给 CHOICE 的各个选项标上索引( index ),过程如下:

1) 对于 CHOICE 类型的根部( root )的选项,先按照 canonical order 对各选项进行排序,然后给排序后的选项标上索引,第一个选择项索引为 0 ,第二个为 1 ,直至根部的最后一个。 如果嵌套了没有标签的 CHOICE 类型,则该类型的标签是其择项中的最小的那个标签。

2) 如果 CHOICE 类型是可扩展的,并且有扩展附加选项,则给扩展附加选项也分别标上索引,第一个扩展附加选项的索引为 0 ,第二个为 1 ,直至扩展部分的最后一个。(标索引之前不需要对这些选项进行排序,是因为在新增扩展附加选项时对应的标签必须符合 canonical order )。

在索引标完后,就可以对 CHOICE 类型的值进行编码,过程如下:

1) 如果仅有一个选择项,如果选择了该选择项的话,不要对索引进行编码。

2) 如果 CHOICE 类型是可扩展的,则在码流上加一个比特的 bit-field (不需要 octet-aligned )。如果该值属于扩展附加选项,则 该比特等于 1 ,否则等于 0

3) 如果没有扩展标记,或者有扩展标记但选项在 CHOICE 类型的根部,则选项的索引值就作为一个 INTEGER 来编码(约束为 0..n ,假设 n 为根部的最大索引值),然后是选项的值的编码。

4) 如果有扩展标记且选项是 CHOICE 类型的扩展附加选项,则该索引被当作一个通常的小的非负整数进行编码,其 "lb" 置为 0 。把选项的值当作 open 类型进行编码。

XVII. Tagged Type

因为 PER 不是隐式支持 Tag 的,所以一个有 Tag 类型的值按照该类型的编码规则进行编码。在 ASN.1 模块内,特定 Tag 上的限制要遵守;建议在模块头的声明中增加 AUTOMATIC TAGS ,这不会影响已有的限制。

XVIII. EXTERNAL

XIX. INSTANCE OF

一个 INSTANCE OF 类型的值按照其等效 SEQUENCE 类型值进行编码。

XX. EMBEDDED PDV 或者 CHARACTER STRING

如果 EMBEDDED PDV 或者 CHARACTER STRING 类型有 WITH COMPONENTS 约束,该约束限制可选项 syntaxes 是两个预定义 object identifier 的序列(即对收、发双方抽象语法、传输语法都明确);或者限制成员 identification 选项为 fixed ,则 PER 编码中嵌入数据作为 OCTET STRING 类型编码。

如果成员 identification 没有按照前面两种方式之一约束,则这两种类型的值需要按照等效的 SEQUENCE 类型值进行编码。

XXI. Value Set

编码一个有值域 Value Set 约束类型的值时,值域被当作有该值域约束的类型看待。如值域:

Set1 INTEGER(1..20) ::= {1 | 5 | 7}

被等同作:

Set1 ::= INTEGER(1..20)(1|5|7)

XXII. Information Objects Information Object Sets

信息对象和信息对象集合不编码。传输其中信息的方式,是在类型或者值中引用信息对象或者信息对象集合。编码时,按照所在值的编码规则进行编码。

3.3.7 一个完整例子

还是以 BER 中的例子,来看其对应的 PER 编码。

ASN.1 描述:

MyHTTP DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

GetRequest ::= SEQUENCE

header-only BOOLEAN,

lock BOOLEAN,

accept-types AcceptTypes,

url Url,

AcceptTypes ::= SET

standards BIT STRING {html(0), plain-text(1), gif(2),

jpeg(3)} (SIZE (4)) OPTIONAL,

others SEQUENCE OF VisibleString (SIZE (4))

OPTIONAL

Url ::= VisibleString (FROM ("a".."z"|"A".."Z"|"0".."9"|"./-_~%#"))

v GetRequest ::=

header-only TRUE,

lock FALSE,

accept-types { standards {html,plain-text} },

url "www.asn1.com"

相应对齐方式的 PER 编码结果为:

不对齐方式的 PER 编码结果为:

3.4 其它编码规则

3.4.1 LWER

Light Weight Encoding Rules (LWER) 1985 年有德国发起, 1988 年由法国继续推进。其目的是为了在 BER 基础上构造处更为轻量级编码规则,随着 PER 的出现和成熟,于 1997 年放弃。

3.4.2 BACnet

BACnet Building Automation and Control Network )是由美国加热、冷冻、空调工程师协会( ASHRAE American Society of Heating, Refrigerating and Air-conditioning Engineers )设计。用于在 Internet 上传输从分布在各地,监控集中加热、通风、空调或者烟雾报警器的控制设备来的数据。

现在 BACnet 编码规则,结合 ECN X.692, Encoding Control Rule ),使得可以使用一个通用的工具来生成编解码规程。

BACnet 编解码规则具体细节,可以访问网站:

http://www.bacnet.org

ftp://ftp.bacnet.org/Encoding.doc

3.4.3 OER

应用很少,略。

具体信息可以访问: http://www.viggen.com/ntcip/documents/oer.rtf

3.4.4 SER

SER Signaling specific Encoding Rules )是由法电研发部( France Telecom R&D )和诺基亚( Nokia )联合开发的。其主要目的是想通过合适的编译器,为原本不是用 ASN.1 描述的协议,通过重新描述能自动生成编解码器。这类协议主要是在 ASN.1 出现之前就有的,如七号信令的协议, GSM 接入协议等。

据悉,国内电信设备商 H ,基于同样目的也设计了类似编码规则。但和上述的工作原理有差异。

因专利保护关系,这些规则的详细内容不得而知。

此外,自 1999 年后, ASN.1 中引入了 XML 。相应的有了 XER XML Encoding Rules )。