今天早上,工作中出现了大问题,因为 SNMP 陷阱没有“通过”,因为 SNMP 是通过 UDP 运行的。我记得在大学网络课上,UDP 不能像 TCP/IP 那样保证传输。维基百科说 SNMP 可以在 TCP/IP 上运行,但 UDP 更常见。
我了解到 UDP 相对于 TCP/IP 的一些优点是速度、广播和多播。但在我看来,对于网络监控来说,保证交付比广播能力更重要。特别是当存在严重的高安全性需求时。我的一位同事告诉我,当流量过大时,UDP 数据包首先被丢弃。这是在网络监控 (IMO) 中更喜欢 TCP/IP 而不是 UDP 的另一个原因。
那么为什么SNMP使用UDP呢?我无法弄清楚,也无法在 Google 上找到充分的理由。
最佳答案
实际上,在有损网络(或拥塞网络)中,UDP 预计比 TCP 工作得更好。 TCP 在传输大量数据方面要好得多,但当网络出现故障时,UDP 更有可能通过。 (事实上,我最近做了一项研究对此进行了测试,结果发现,当 UDP 超时设置正确时,在有损网络中,基于 UDP 的 SNMP 比基于 TCP 的 SNMP 成功得多)。一般来说,TCP 在丢包率约为 5% 时开始表现不佳,在丢包率达到 33%(左右)时变得完全无用,而 UDP 仍然会成功(最终)。
因此,一如既往,正确的做法是为正确的工作选择正确的工具。如果您要对大量数据进行例行监控,您可能会考虑 TCP。但请准备好使用 UDP 来解决问题。如今大多数堆栈实际上可以同时使用 TCP 和 UDP。
至于发送 TRAP,是的,TRAP 是不可靠的,因为它们没有被确认。然而,SNMP INFORM 是 SNMP TRAP 的公认版本。因此,如果您想知道通知接收者是否收到了消息,请使用 INFORM。请注意,TCP 不能解决此问题,因为它仅提供已收到消息的第 3 层通知。无法保证通知接收者确实收到了通知。 SNMP INFORM 进行应用程序级确认,并且比假设 TCP 确认表明它们已收到更值得信赖。
关于udp - 为什么 SNMP 通常在 UDP 上运行而不是 TCP/IP 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565975/