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 端也可能存在某种配置选项,允许您禁用此行为。
我已经使用以下 CommandResponder
:
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 端也可能存在某种配置选项,允许您禁用此行为。