使用抽象语法表示法声明IpAddress:
IpAddress ::= [APPLICATION 1] INTEGER (0..4294967295)
[APPLICATION 1]在此代码中的含义是什么?!
答案 0 :(得分:2)
注意:此问题标记为SNMP,但这不是SNMP的IpAddress类型的正确声明。这实际上是Counter32类型:
IpAddress :: = [应用0] 隐含的十字架(SIZE(4))
Counter32 :: = [申请1] IMPLICIT INTEGER(0..4294967295)
然而;
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。