我想定义一个包含整数值 OID 的 MIB,这些 OID 的长度为 1 或 2 个八位字节,以减少 TRAP 消息的大小 - 它们通过移动数据网络传输,因此我们按字节付费,传输时间会增加也有更大的数据类型。
SNMPv2-SMI 仅定义 Integer32 和 Unsigned32,SNMPv2-TC 不会将它们扩展到更小的封装尺寸。 Unsigned8、Integer16 等已经有标准定义了吗? 如果有的话,在哪里?
或者,如果我将对象类型定义为“Integer32(-1..99)”之类的内容,MIB 编译器等会做正确的事情并将值打包到单个字节中吗? 我们在代理上使用 SNMP4J,在管理器上使用 Net-SNMP。
如果你还没有猜到我在这方面有点菜鸟,所以如果这是一个愚蠢的问题,请宽容:-)
我对 SNMP 使用的编码规则进行了一些挖掘(请参阅 en.wikipedia.org/wiki/X.690),如果打包 PDU 的代码具有一定的智能性,那么看起来我的问题是无关紧要的。 SNMP 使用的基本编码规则将整数值记录为三重“标记长度值”,其中“标记”标识数据类型),长度给出保存该值的字节数,并且该值是价值。因此,如果应用程序从 32 位整数发送值“1”,则无需将其编码为 32 位,只需将其编码为 0x02 0x01 0x01。
所以这取决于打包库是否有那个智能。
查看 SNMP4J javadoc for OctetString 例如1 或 2 个字节...
OCTET STRING (SIZE(1))
OCTET STRING (SIZE(2))
引用 snmpsharpnet 文档:
Octet String 是一种 SMI 数据类型,用于处理 Byte 数组 价值观。与名称所暗示的不同,这种数据类型不受限制 为字符串值,但可以存储任何基于字节的数据类型(包括 二进制数据)。