ASN.1声明中的应用程序标签

时间:2014-02-15 20:22:20

标签: snmp asn.1 mib

使用抽象语法表示法声明IpAddress:

IpAddress ::= [APPLICATION 1] INTEGER (0..4294967295)

[APPLICATION 1]在此代码中的含义是什么?!

2 个答案:

答案 0 :(得分:2)

注意:此问题标记为SNMP,但这不是SNMP的IpAddress类型的正确声明。这实际上是Counter32类型:

IpAddress :: =     [应用0]         隐含的十字架(SIZE(4))

Counter32 :: =     [申请1]         IMPLICIT INTEGER(0..4294967295)

RFC 2578

然而;

ASN.1类型具有表示法和线上编码。可以基于内置类型定义新类型。在您的问题中,新类型“IpAddress”被定义为内置“INTEGER”类型的有限范围(0..4294967295)派生,它没有内置范围限制。

ASN.1编码由三部分组成:指示数据类型的单字节标记,内容的长度和内容(值)本身。如果没有[方括号]中的部分,新类型的编码将与基本类型相同 - 在本例中为INTEGER,其标记值为0x02(十六进制)。 [APPLICATION 1]表示该值将使用不同的标记进行编码,以便您可以将其编码与INTEGER区分开来。

[括号]中的这一部分由一个标签类和一个数字组成。类可以是UNIVERSAL(仅用于内置ASN.1类型),APPLICATION(这意味着特定于应用程序,即[APPLICATION 1]到SNMP可能意味着与另一个协议中的[APPLICATION 1]完全不同),PRIVATE用于企业 - 特定的,或者可以省略(在这种情况下,它是特定于上下文的。)

标签类和数字本质上是位标志,它们组合在一起以形成编码中的标签值。 APPLICATION = 0x40,因此[APPLICATION 1]表示您的问题中定义的值使用0x41的标记字节进行编码。

但是,正如我上面提到的,这实际上会被SNMP视为Counter32值,而不是IpAddress。 0x40将是一个IpAddress,内容将被编码为OCTET STRING而不是INTEGER。

答案 1 :(得分:1)

它只是意味着“应用范围”。这些类型在ASN.1中不可用,但在SNMP(ASN.1的应用程序)中可用。

http://tools.ietf.org/html/rfc1155

第3.2.3节提供了更多相关信息。

APPLICATION背后的值最终用于数据编码,以区分彼此的类型。

您实际输入的内容有误,因为IpAddress应使用值0,而不是1。