Snmp 对RFC 1155、RFC 1157和ASN.1感到困惑 -第3.2.1节,p。7:四个ASN.1基本类型 整数,八位字节字符串,对象标识符和空 RFC 1155-第6节,第页。18:IpAdrress是一个隐式八位字节字符串(大小(4)) RFC 1155-第6节,第页。18:NetworkAddress是一个IpAddress -第4.1.6节,第。26:aagent addr是一个NetworkAddress,它是一个IpAddress

Snmp 对RFC 1155、RFC 1157和ASN.1感到困惑 -第3.2.1节,p。7:四个ASN.1基本类型 整数,八位字节字符串,对象标识符和空 RFC 1155-第6节,第页。18:IpAdrress是一个隐式八位字节字符串(大小(4)) RFC 1155-第6节,第页。18:NetworkAddress是一个IpAddress -第4.1.6节,第。26:aagent addr是一个NetworkAddress,它是一个IpAddress,snmp,net-snmp,asn.1,Snmp,Net Snmp,Asn.1,ASN.1 BER表示八位字节字符串as0x04。TRAP-PDU值agent addr的数据类型为0x40(见Wireshark) 为什么代理addr的数据类型不是隐式八位字节字符串(大小(4)) 四种ASN.1基元类型整数、八位字符串、对象标识符和NULL 他们说他们只是从ASN.1类型系统中选择了这些类型。这些是内置的标量ASN.1数据类型。谈到BER序列化,这些类型在线路上有不同的ID(也称为标记) iPadRess是一个隐式八位字符串(大小(4)) ASN.1允许您通过更改标记和(可选

ASN.1 BER表示八位字节字符串as
0x04
。TRAP-PDU值
agent addr
的数据类型为0x40(见Wireshark)

为什么
代理addr
的数据类型不是
隐式八位字节字符串(大小(4))

四种ASN.1基元类型整数、八位字符串、对象标识符和NULL

他们说他们只是从ASN.1类型系统中选择了这些类型。这些是内置的标量ASN.1数据类型。谈到BER序列化,这些类型在线路上有不同的ID(也称为标记)

iPadRess是一个隐式八位字符串(大小(4))

ASN.1允许您通过更改标记和(可选)对值范围施加附加约束,从任何其他类型创建新类型。有两种方法可以更改标记:

  • 通过重写基类型的标记(AKA
    IMPLICIT
    tagging)
  • 通过将新标记附加到基类型的现有标记(也称为显式标记)
因此,在这里,他们通过在
应用程序
名称空间中用tag
#0
替换它的tag来对
八位字符串
类型进行子类型化。从算术上讲,这个新标记将变成
0 | 0x40

此外,它们对值范围实施大小约束--
size(4)
例如,值必须有四个八位字节

NetworkAddress是一个IP地址。 代理地址是一个网络地址,它是一个IP地址

嗯,是和否;-)

ASN.1有一个
选项
伪类型,它在导线上不可见(默认情况下没有自己的标记),但在导线上它可以变成它“嵌入”的类型之一。设计者可能计划在将来支持更多不同的网络地址,因此他们使用
NetworkAddress
容器包装
IpAddress

ASN.1 BER将八位字节字符串表示为0x04。TRAP-PDU值代理addr的数据类型为0x40(见Wireshark)

这是正确的:您看到一个子类型
octetstring
具有
隐式应用程序0
标记,即
0x40 | 0

顺便说一句,使用
隐式
标记时,该类型的原始标记丢失,因此在导线上看不到基本
八位字节字符串
类型的任何残余

为什么代理addr的数据类型不是隐式八位字符串(大小(4))

事实上是这样!希望上面的解释能让它不那么晦涩

“隐式”并不意味着
agent addr
应该是
OCTET字符串
<代码>IP地址,
计数器
仪表
时间刻度
不透明
都有自己的数据类型值。