udp - 为什么 SNMP 通常在 UDP 上运行而不是 TCP/IP 上?

标签 udp snmp

今天早上,工作中出现了大问题,因为 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/

相关文章:

tcp - SMTP 是基于 TCP 还是 UDP?

python - 从 Python 绑定(bind)重置 net-snmp 库的所有全局内部状态

linux - 如何接收 SNMP MIB 转储数据?

windows - 如何获得计算机的平均 CPU/处理器使用率?

javascript - 通过 Node.js 数据报在 Electron 中发送 UDP 数据包

python listen 2端口相同的文件

java - 为什么使用netty循环writeAndFlush发送DatagramPacket必须让线程 hibernate 一段时间?

linux - 当我尝试使用 Net::SNMP 连接到我的设备时,为什么会收到错误 "Received usmStatsUnknownUserNames.0 Report-PDU with value 1"?

delphi - 在 Delphi 中使用 SNMP

linux - SMP 系统中的 linux 内核是否保证将从网络按顺序到达的 UDP 数据包按顺序从套接字读取?