SNMP GETBULK 和 GET 操作有什么区别

What is the difference between SNMP GETBULK and GET operations

背景

我正在尝试创建一个 SNMP 网站项目以获取有关网络设备的信息。我使用了 LeXtudio 创建的 SNMP 库 - sharpsnmp。

问题

我创建了两种方法,一种使用 Getbulk,另一种使用 Get。两者都接受 OID 列表。两者都照常工作,没有问题。我遇到的唯一问题是在很远的网络设备上。他们每个人都需要完全相同的时间。就在 2 分钟。我觉得这是一个非常漫长的等待时间。尽管在靠近的设备上它非常快并且不到 5 秒。

问题

我想知道 Getbulk 不会一次询问所有信息,然后返回所有信息。还是一次一个地询问列表中的每个 OID。和Get一样吗?

有没有一种方法可以一次调用设备获得我需要的所有信息,或者只是我可以多次调用设备?

我还有其他选择吗?

如果您处理标量 OID 或精确的 table 对象实例,通常您应该使用 GET 请求。

否则,如果代理支持 SNMPv2C,您应该使用 GETNEXT 甚至 GETBULK。

通常您应该使用 GETNEXT 来获取 table 或整个 table 的选定列。在这种情况下,您需要递归执行 GET-NEXT 请求,直到结果超出树分支范围。

如果代理启用了 SNMPv2C,您应该使用 GETBULK。它是 GETNEXT 请求的优化。所以基本上你不必执行多个 GET-NEXT 请求来获取多个实例。相反,您可以只发送单个 GETBULK 请求并将 Max-Repetitions 参数设置为 10,您将从请求中指定的 OID 开始获得接下来的 10 个结果变量。