SNMPv2 MIB 中的 Integer8、Unsigned8、Integer16 值

问题描述 投票:0回答:2

我想定义一个包含整数值 OID 的 MIB,这些 OID 的长度为 1 或 2 个八位字节,以减少 TRAP 消息的大小 - 它们通过移动数据网络传输,因此我们按字节付费,传输时间会增加也有更大的数据类型。

SNMPv2-SMI 仅定义 Integer32 和 Unsigned32,SNMPv2-TC 不会将它们扩展到更小的封装尺寸。 Unsigned8、Integer16 等已经有标准定义了吗? 如果有的话,在哪里?

或者,如果我将对象类型定义为“Integer32(-1..99)”之类的内容,MIB 编译器等会做正确的事情并将值打包到单个字节中吗? 我们在代理上使用 SNMP4J,在管理器上使用 Net-SNMP。

如果你还没有猜到我在这方面有点菜鸟,所以如果这是一个愚蠢的问题,请宽容:-)

snmp net-snmp snmp4j
2个回答
0
投票

我对 SNMP 使用的编码规则进行了一些挖掘(请参阅 en.wikipedia.org/wiki/X.690),如果打包 PDU 的代码具有一定的智能性,那么看起来我的问题是无关紧要的。 SNMP 使用的基本编码规则将整数值记录为三重“标记长度值”,其中“标记”标识数据类型),长度给出保存该值的字节数,并且该值是价值。因此,如果应用程序从 32 位整数发送值“1”,则无需将其编码为 32 位,只需将其编码为 0x02 0x01 0x01。

所以这取决于打包库是否有那个智能。


0
投票

查看 SNMP4J javadoc for OctetString 例如1 或 2 个字节...

  OCTET STRING (SIZE(1)) 
  OCTET STRING (SIZE(2)) 

引用 snmpsharpnet 文档:

Octet String 是一种 SMI 数据类型,用于处理 Byte 数组 价值观。与名称所暗示的不同,这种数据类型不受限制 为字符串值,但可以存储任何基于字节的数据类型(包括 二进制数据)。

© www.soinside.com 2019 - 2024. All rights reserved.