你能解释一下类型可扩展性在PER中是如何工作的吗

电子说

1.3w人已加入

描述

  16、在类型定义和信息对象集中使用扩展标记有什么区别?扩展标记是否不可见?

扩展标记就类型定义而言是不可见的,但就简单表约束和组件关系约束而言并非不可见。

类型本身是可扩展的,与限制它是可扩展的对象集之间是有区别的。在类型是可扩展的情况下,它天生可以采用可扩展约束允许的任何值。例如,

INTEGER(1..8, ...)

可以随时假设任何有效值。将此与使用简单表约束进行约束的 INTEGER类型进行对比,在这种类型中,此类类型只能假定在该类型被编码/解码时恰好包含在信息对象集中的那些值。随着程序的运行,这可能会随着时间的推移而变化,因为可扩展信息对象集中的对象集可能会在运行时发生变化。

在BER、DER和 CER的情况下,这种区别不太重要,其中类型的可扩展性在其编码方式中不发挥作用,但在PER 中起主要作用。在 PER 中,使用扩展标记“...”定义的类型的值使用1 位前缀进行编码,当设置为0 时,意味着后面的值在扩展根中,因此以优化的形式编码。(例如,上面示例中的值 1-8 将被编码为3 位)。但是,当设置为 1 时,意味着后面的值以更通用的形式编码。(例如,上例中不在 1-8 范围内的值占用16 位或更多位)。

17、你能解释一下类型可扩展性在PER 中是如何工作的吗?

考虑以下两个ASN.1 语法定义:

A::= SEQUENCE { --defined in v1

f1BOOLEAN,

f2BOOLEAN,

...,

}

A::= SEQUENCE { --defined in v2

f1BOOLEAN,

f2BOOLEAN,

...,

e1BOOLEAN OPTIONAL,

e2BOOLEAN

}

类型可扩展性背后的目的是允许不理解新字段的V1 应用程序接收具有它无法识别的字段的V2 消息,并将它们视为由V1 应用程序发送,同样,对于V2 应用程序来说接收缺少字段的 V1 消息。如果 V2 应用程序收到缺少强制扩展添加的消息,它可以安全地假定该消息是由V1 应用程序发起的。

只有在扩展附加位图中有一个位表示存在/不存在哪些扩展附加值时,才必须对扩展标记之后的强制字段进行编码。因此,在强制扩展附加 y 之后定义了扩展附加x,并且 x的值存在于编码中,那么y 的值必须存在。此外,如果强制扩展附加 y 是SEQUENCE 中的最后一个组件,并且在扩展附加位图中存在一个位,则该位必须设置为1,因为该位的存在表明消息的发起者知道这个扩展添加,因此它的存在是强制性的。只有当消息是从未定义强制扩展添加的早期版本的消息定义中继时,才可以省略它(在这种情况下,扩展添加位图中将没有位)。ITU-T 建议X.680(2008) 25.15 注2 中指出了这一点:

作为扩展添加但不包含在“ExtensionAdditionGroup”中的“ComponentType”如果未标记为OPTIONAL 或DEFAULT,则应始终对其进行编码,除非抽象值是从使用较早版本抽象语法的发送者中继的其中未定义“ComponentType”。

换句话说,PER将标记为 OPTIONAL的扩展添加与非 OPTIONAL的扩展添加完全相同。



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分