我正在学习 SNMP,并使用它编写一些应用程序。我有一些关于协议的基本问题:
- 代理是否将其状态存储在设备本身上?
- 如果在代理上设置了陷阱,您能否对相同的 OID 进行轮询以获取相同的信息?
- 在不使用 mib 文件的情况下,有没有办法一次查询设备的所有信息?如果不是,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?
- 如果您要设置代理进行报告,通常有办法控制它发送陷阱的频率吗?还是它通常会在满足某些条件时发送陷阱?
我正在学习 SNMP,并使用它编写一些应用程序。我有一些关于协议的基本问题:
代理是否将其状态存储在设备本身上?
在最常见的情况下,SNMP 代理在监控的设备上运行。在这种情况下,代理没有其他选择,任何状态信息都必须存储在设备上。SNMP 代理只是读取或设置这些信息。
如果在代理上设置了陷阱,您能否对相同的 OID 进行轮询以获取相同的信息?
我认为您应该能够做到这一点 - 例如 SNMPv2 陷阱 IF-MIB::linkDown 包含三个 varbind - IF-MIB::ifIndex、IF-MIB::ifAdminStatus 和 IF-MIB::ifOperStatus。在这种特殊情况下,ifIndex 指定 ifTable 中的行,并且可以轮询其他两个。
在不使用 mib 文件的情况下,有没有办法一次查询设备的所有信息?
是snmp-walk
的,使用 net-snmp 包或任何其他可以使用 get-next 轮询数据的 snmp 工具。
如果不是,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?
您确实需要知道设备 MIB 包含什么 - 如果没有此类信息,您只能获得数字 OID 和值,这对开发人员和用户都没有意义。对于更复杂的 MIB,您需要了解有关受管设备的大量详细信息。MIB 文件几乎没有包含足够的信息。
代理是否将其状态存储在设备本身上?
您可以在设备上或设备外存储数据。两者都是可能的,并且都已完成。代理存储(缓存)有关远程设备的状态信息的问题在于,管理系统永远不会真正知道代理中的(缓存)数据是否是可接受的最新数据。如果您不能指望它,您将需要使用管理器来触发同步或轮询远程设备的状态和/或代理与远程设备之间的通信链接。一旦你进入那个游戏,通常最好在远程设备上放置一个子代理,并使用标准的 SNMP 协议来获取信息。
如果在代理上设置了陷阱,您能否对相同的 OID 进行轮询以获取相同的信息?
大多数精心设计的 MIB 实际上将更改后的 MIB 对象放入陷阱中。这样,您的 SNMP 管理器就不必为了确定而轮询代理。
话虽如此,Entity-MIB 上的陷阱没有任何状态变量。但是,该 MIB 用于描述物理库存,例如机架、卡和端口,并且仅当物理配置发生更改时才会引发陷阱。在这种情况下,您应该让您的 SNMP 管理器再次遍历 Entity-MIB 以获得完整的新物理配置。
在不使用 mib 文件的情况下,有没有办法一次查询设备的所有信息?
是的。滚动您自己的自定义 MIB 并将您想要的任何内容放入其中。您可以将整个设备配置放入一个 MIB 对象中。不利的一面是,您必须在 SNMP 管理器上编写解析器来解析结构,如果结构发生变化,您需要弄清楚当前值与先前值之间差异的含义. 即,您将重新发明一些 SNMP MIB。但是,对于非常小的 MIB,这可能是值得的。
您最好使用 SNMP GET-BULK,或者只是通过连续调用 SNMP-GET-NEXT 进行 MIB 遍历,直到不再返回对象。
如果不是,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?
如果你想让你的“定制管理器”简单,你必须事先了解结构。如果您想要灵活性,您将需要结构描述语言来对您的结构进行编码,并且您的经理需要能够从代理数据中解码并填充经理,并从经理那里获取数据并将其编码此格式将其发送给代理。即,您将重新发明 SNMP/SMI、CMIP/CMISE、CIM 以及许多其他已部署的管理系统和协议。
如果您要设置代理进行报告,通常有办法控制它发送陷阱的频率吗?还是它通常会在满足某些条件时发送陷阱?
This is a good question, because you often get a trap storm congesting your network precisely when you need your network the most. That makes it hard to predict how much network to provision.
Use traps judiciously. For example, the Entity-MIB only has one trap, and that one is worth using because it reports on physical structure changes. The Interfaces-MIB has potentially many traps per port. For this MIB, it is best just to enable traps for the interface bound to a physical port, and not for interfaces stacked on top of lower layer interfaces. For a large network, it is often best just to use a combination of polling plus traps for physical equipment and physical interfaces. That way, you can predict how much of your network will be used for management traffic whether during normal operation or during a network disaster.
Some standard MIBs specify how often or when you can throw a trap. If you are OK with that, then use it. You can always roll your own Enterprise MIB with configuration MIB objects that let your manager throttle particular traps.
代理是否将其状态存储在设备本身上?
这取决于设备和应用程序;一些设备将其存储在本地其他设备使用代理。
如果在代理上设置了陷阱,您能否对相同的 OID 进行轮询以获取相同的信息?
是的,但通常最好在陷阱中包含信息,这样管理站就不必对设备进行多次“往返”。例如,如果您捕获属性值更改,最好在陷阱中发送旧值和新值。
在不使用 mib 文件的情况下,有没有办法一次查询设备的所有信息?如果不是,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?
一般不会... SNMP Get-next 原语就是为这种情况而设计的。
如果您要设置代理进行报告,通常有办法控制它发送陷阱的频率吗?还是它通常会在满足某些条件时发送陷阱?
是的,何时发送陷阱取决于代理。
如果您正在开发自己的代理,我强烈建议您查看 Net-SNMP。即使您选择使用其他产品,Net-SNMP 代码也经过精心设计和实施。此外,它还有许多附加功能可以帮助开发和测试代理(和管理系统)。