【发布时间】: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。);-)