INTEGER、OCTET STRING、OBJECT IDENTIFIER和NULL。IpAdrress是IMPLICIT OCTET STRING (SIZE (4))。NetworkAddress是IpAddress。agent-addr是一个NetworkAddress,它是一个IpAddress误码率将OCTET STRING表示为0x04。陷阱-PDU值agent-addr的数据类型为0x40 (在Wireshark中见)。
为什么agent-addr的数据类型不是IMPLICIT OCTET STRING (SIZE (4))
发布于 2017-07-29 06:57:11
四种ASN.1原语类型整数、八进制字符串、对象标识符和NULL
他们说他们只是从ASN.1类型系统中选择了这些类型。这些是内置的标量ASN.1数据类型.当涉及到BER序列化时,这些类型在连线上有不同的it (AKA标记)。
IpAdrress是一个隐式八进制字符串(大小(4))
ASN.1允许您通过更改标记和(可选)对值范围施加附加约束,从任何其他类型创建新类型。有两种方法可以更改标记:
IMPLICIT标记)因此,在这里,他们通过在OCTET STRING名称空间中用标记#0替换它的标记来子类型APPLICATION类型。从算术上讲,这个新标签将成为0 | 0x40。
此外,它们对值范围强制执行大小约束--例如,SIZE (4)值必须有四个八位数。
NetworkAddress是IpAddress。代理-addr是一个NetworkAddress,它是一个IpAddress。
好吧,是和不是。;-)
ASN.1有一个CHOICE伪类型,它在连线上是不可见的(默认情况下没有自己的标记),但是在连线上它可以变成它“嵌入”的类型之一。设计人员可能计划在未来支持更多不同的网络地址,因此他们将IpAddress封装在NetworkAddress容器中。
ASN.1 BER将八进制字符串表示为0x04。陷阱-PDU值代理-addr的数据类型为0x40 (在Wireshark中见)。
这是正确的:您可以看到OCTET STRING的一个子类型,它具有IMPLICIT APPLICATION 0标记,即0x40 | 0。
顺便说一句,使用IMPLICIT标记时,类型的原始标记丢失了,因此在连线上看不到基本OCTET STRING类型的任何残留物。
为什么代理-addr的数据类型不是隐式八进制字符串(大小(4))?
实际上是的!希望上面的解释能让它少一点模糊。;-)
https://stackoverflow.com/questions/45383106
复制相似问题