选择ASN.1 的原因是什么?使用可扩展性是否有任何权衡?

电子说

1.3w人已加入

描述

1、选择ASN.1 的原因是什么?

选择ASN.1 的一些原因是:

ASN.1 允许实现者选择最适合他们的任何编程语言,并在该语言中选择最适合其应用程序的数据类型的绑定。例如,如果 ASN.1将类型定义为项目的集合,您可以自由地将其表示为链表、数组等,这取决于最适合您的语言/应用程序的方式。

ASN.1允许您以这样一种方式定义消息,即如果将来向消息中添加新字段,您不理解新字段的旧应用程序将继续与理解新字段的新应用程序一起正常工作。这样您就不必同时将所有实现切换到消息的新版本。对于此类消息,较旧的实现意识到他们应该期望并忽略消息中的新字段。

ASN.1 允许您对消息中的字段施加约束。例如,您可以指示整数类型应该只携带值1、2、7-10,或者字符串的长度应该在20-30 个字节之间。

ASN.1 允许您表达消息字段之间的关系。例如,您可以指示如果给定字段包含 7,则必须存在另一个字段。

ASN.1 允许您定义OPTIONAL 字段,如果没有数据,则传输很少或不传输数据。

ASN.1 允许消息规范的作者(例如,标准编写者)以清晰简洁的方式向实现者明确指出消息中字段的性质。

ASN.1 让协议设计人员能够自由地描述消息的布局,而无需深入研究在两台机器之间传输的数据的位和字节细节,从而提高了生产力。

通过使用正式的、可编译的符号ASN.1 定义消息,可以通过使用将使用ASN.1 描述的消息转换为C、C++或 Java等语言的工具以及编码器/解码器来提高生产力,以最小化或无需弄清楚如何序列化数据以进行传输。

2、使用可扩展性是否有任何权衡?

如果您希望中继接收到的值(即,如果您希望解码器将意外值返回给您,而不是被解码器忽略),则使用可扩展性将导致生成稍微复杂的头文件。在大多数情况下,它足以满足“旧”版本忽略从“新”版本收到的扩展值,因为它通常不知道如何处理它们。

就您的应用程序代码而言,通常它不会导致更大或更复杂的代码。

如果您使用PER,如果您使用类型可扩展性,则编码会稍大一些。类型可扩展性对 BER 编码的大小没有影响。

除非您提前知道永远不需要扩展给定类型,否则您应该将其定义为可扩展的。

3、标记会影响PER 中的编码数据吗?

一般来说,无论标签是什么,编码数据看起来都是一样的。

唯一的例外是选择类型的编码。在 PER 中,选择类型的每个备选方案都由索引标识。这些索引以取决于每个备选方案的标签的顺序分配给备选方案。当使用自动标记时,索引确实对应于备选方案的定义顺序。

4、PER中的开放类型值是如何编码的?

在PER中开放类型的编码与无约束的OCTETSTRING类型的值相同。这意味着长度可以是一个或两个字节,或者如果长度是>16K字节,则编码会被分割开来,等等。



审核编辑:刘清

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

全部0条评论

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

×
20
完善资料,
赚取积分