INTEGER
,OCTET
STRING
,OBJECT IDENTIFIER
和NULL
。IpAdrress
是IMPLICIT OCTET STRING (SIZE (4))
。NetworkAddress
是IpAddress
。agent-addr
是NetworkAddress
,IpAddress
ASN.1 BER表示OCTET STRING
为0x04
。 TRAP-PDU值agent-addr
的数据类型是0x40(在Wireshark中可以看到)。
为什么agent-addr
的数据类型不是IMPLICIT OCTET STRING (SIZE (4))
?
答案 0 :(得分:3)
四种ASN.1基本类型INTEGER,OCTET STRING,OBJECT IDENTIFIER和NULL
他们说他们从ASN.1类型系统中选择了这些类型。这些是内置的标量ASN.1数据类型。在BER序列化方面,这些类型在线路上有不同的ID(AKA标签)。
IpAdrress是一个隐含的OCTET STRING(SIZE(4))
ASN.1允许您通过更改标记和(可选)对值范围施加其他约束来从任何其他类型创建新类型。有两种方法可以更改标记:
IMPLICIT
标记)因此,他们通过在OCTET STRING
名称空间中使用标记#0
替换其标记来对APPLICATION
类型进行子类型化。算术上,这个新标签将成为0 | 0x40
。
此外,它们会对值范围强制执行大小限制 - SIZE (4)
,例如值必须有四个八位字节。
NetworkAddress是一个IpAddress。 agent-addr是一个NetworkAddress,它是一个IpAddress
嗯,是的,不是。 ; - )
ASN.1有一个CHOICE
伪类型,它在线上是不可见的(默认情况下没有自己的标签)但是在线上它可以变成其中一种类型"嵌入&# 34 ;.设计人员可能计划在将来支持更多不同的网络地址,以便IpAddress
容器包裹NetworkAddress
。
ASN.1 BER表示OCTET STRING为0x04。 TRAP-PDU值agent-addr的数据类型是0x40(见Wireshark)。
这是正确的:您看到OCTET STRING
的子类型IMPLICIT APPLICATION 0
标记为0x40 | 0
。
BTW,使用IMPLICIT
标记时,该类型的原始标记会丢失,因此不会在网络上看到任何基本OCTET STRING
类型的残余。
为什么agent-addr的数据类型不是IMPLICIT OCTET STRING(SIZE(4))?
实际上是!希望上面的解释使它不那么模糊。 ; - )