【问题标题】:Integer8, Unsigned8, Integer16 values in SNMPv2 MIBSNMPv2 MIB 中的 Integer8、Unsigned8、Integer16 值
【发布时间】:2014-10-31 10:14:33
【问题描述】:

我想定义一个 MIB,其中包含 1 或 2 个八位字节长的整数值 OID,以减小我的 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。
  • 恭喜您获胜! =) 请随意用上述内容回答您自己的问题,以便其他人更清楚您的问题已解决。
  • 我会先测试我的建议,然后再将其作为答案发布 - 但我需要先让我的应用程序正常工作,然后再担心提高性能:)
  • 两年后,可能值得花时间写下答案并标记它。 (我很想回答这个问题,以免我费心先阅读所有的 cmets。);-)

标签: snmp net-snmp snmp4j


【解决方案1】:

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

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

引用http://www.snmpsharpnet.com/?page_id=66

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

【讨论】:

  • 谢谢,但我一直在寻找与整数具有相同语义但没有大小开销的解决方案。使用您的解决方案,我必须自己使用 htons/ntohs 在任一端打包和解压缩 16 位值,而不是让 snmp 库通过 ASN.1 定义为我完成。
【解决方案2】:

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

所以就看打包库有没有那个智能了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多