【问题标题】:The reason for tagging of a non-OPTIONAL field in ASN.1在 ASN.1 中标记非可选字段的原因
【发布时间】:2017-08-11 12:09:13
【问题描述】:

查看 3GPP MAP (http://www.3gpp.org/ftp/specs/archive/29_series/29.002/ASN.1/) 的 ASN.1 模块,我对第一个字段 (imsi) 使用 [0] 标记感到困惑。由于它不是 OPTIONAL 字段,而且它的类型也是已知的(OCTET STRING),这里标记的目的是什么?

sendAuthenticationInfo 操作 ::= { 参数序列 { imsi [0] 隐式八位字节字符串(大小(3 .. 8)), numberOfRequestedVectors INTEGER ( 1 .. 5 ), 分段禁止 NULL 可选, immediateResponsePreferred [1] 隐式 NULL 可选, - ETC。 -

需要注意的一点是,imsi 字段不直接解释为八位字节字符串,但它以半八位字节编码(如 BCD)保存 IMSI 的数字。这可能是该字段被标记的原因吗?

【问题讨论】:

  • 鉴于字段的位置已知,我不明白为什么字段类型对其内容解释可能很重要...
  • 会不会与全局标记模式有关(例如模块级别,在 DEFINITION 子句中设置)?
  • 我在模块标题中看不到任何子句。所以我认为它应该是默认值。
  • 默认值为 EXPLICIT,因此隐式标记此类型作为替代是有意义的。但它仍然没有解释为什么需要标记 - 为什么它不能只是一个基本的八位字节字符串......?我可以为您提供的另一个想法是,此标记字段允许您将来在 imsi 字段前面添加另一个可选的基本 OCTET STRING 字段。
  • 我会保留这个问题。不仅最终可能会出现更有知识的人,而且问题本身也提出了一个有趣的观点。

标签: asn.1


【解决方案1】:

在这种特殊情况下,3GPP MAP 协议指定 BER 是要使用的编码规则,这意味着标签包含在编码中。这意味着虽然在这种情况下,由于没有歧义,因此在这种情况下没有必要更改非可选字段的默认八位字节字符串标记,但很可能出于文档目的而这样做,表明该字段的内容是不仅仅是一个八位字节字符串。

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多