SNMP4J 重试策略

SNMP4J retry policy

我已经使用以下 CommandResponder:

实现了简单的 SNMP 陷阱收集器
new CommandResponder() {

    @Override
    public void processPdu(CommandResponderEvent event) {
        PDU pdu = event.getPDU();
        Trap receivedTrap = snmpHelper.toTrap(pdu);
        trapStorage.offer(receivedTrap);
    }
};

当我在发送器中使用以下 Target 设置向收集器发送一些陷阱时:

target.setRetries(2);
target.setTimeout(500);

SNMP 收集器收到 3 次陷阱。 为什么?我是否应该从收集器向发送者发回一些响应以防止重新发送陷阱?

SNMP 通知分为三种类型(按 PDU 类型):

  • Trapv1
  • Trapv2(自 SNMPv2)
  • 通知(自 SNMPv2 起)

TRAP 的最大问题是它们未被确认,因此 SNMP 代理实际上不知道 SNMP 管理器是否收到它。 SNMPv2 PDU 通过引入 INFORM 的概念解决了这个问题,它只不过是一个公认的 TRAP。所以我相信与您打交道的代理会发送同一个陷阱三次,以确保它能够送达。

为防止出现此问题,如果代理支持 INFORM,您应该考虑使用它们。 agent/device 端也可能存在某种配置选项,允许您禁用此行为。