【问题标题】:Basic questions about SNMP关于 SNMP 的基本问题
【发布时间】:2010-03-19 02:38:00
【问题描述】:

我正在学习 SNMP,并使用它编写一些应用程序。我有一些关于协议的基本问题:

  1. 代理是否将其状态存储在设备本身上?
  2. 如果在代理上设置了陷阱,您能否对相同的 OID 进行轮询以获取相同的信息?
  3. 在不使用 mib 文件的情况下,是否可以一次查询设备的所有信息?如果没有,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?
  4. 如果您要设置代理进行报告,通常是否有办法控制它发送陷阱的频率?还是它通常会在满足某些条件时发送陷阱?

【问题讨论】:

    标签: network-protocols snmp


    【解决方案1】:

    代理是否将其状态存储在设备本身上?

    在最常见的情况下,SNMP 代理在监控的设备上运行。在这种情况下,代理没有其他选择,任何状态信息都必须存储在设备上。 SNMP 代理只是读取或设置这些信息。

    如果在代理上设置了陷阱, 你能对同一个 OID 进行投票吗? 得到相同的信息?

    我认为您应该能够做到这一点 - 例如 SNMPv2 陷阱 IF-MIB::linkDown 包含三个 varbind - IF-MIB::ifIndex、IF-MIB::ifAdminStatus 和 IF-MIB::ifOperStatus。在这种特殊情况下,ifIndex 指定 ifTable 中的行,并且可以轮询其他两个。

    如果不使用 mib 文件,是否有 查询设备的所有方法 一次获取信息?

    是的,使用 net-snmp 包中的snmp-walk 或任何其他可以使用 get-next 轮询数据的 snmp 工具。

    如果不是,那么您正在编写自己的 定制经理,你有吗? 了解报告内容的结构 提前?

    您确实需要知道设备 MIB 包含什么 - 没有这些信息,您只能获得数字 OID 和值,这对开发人员和用户都没有意义。对于更复杂的 MIB,您需要了解有关受管设备的大量详细信息。 MIB 文件几乎没有包含足够的信息。

    【讨论】:

    • 同意。事实上 SNMP 协议并没有涵盖 David 询问的所有方面。许多细节(例如状态存储)取决于实现。 MIB 文档打开了一扇门,让您可以查询有关设备的信息,但其供应商总是更了解如何使用这些对象,因为 MIB 文档通常不会涵盖所有细节。
    【解决方案2】:

    代理是否将其状态存储在设备本身上?

    您可以在设备上或设备外存储数据。两者都是可能的,并且都已完成。代理存储(缓存)有关远程设备的状态信息的问题在于,管理系统永远不会真正知道代理中的(缓存)数据是否是可接受的最新数据。如果您不能指望它,您将需要使用管理器来触发同步或轮询远程设备的状态和/或代理与远程设备之间的通信链接。一旦你进入那个游戏,通常最好在远程设备上放置一个子代理,并使用标准的 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 以及许多其他已部署的管理系统和协议。

    如果您要设置代理进行报告,通常有办法控制它发送陷阱的频率吗?还是它通常会在满足某些条件时发送陷阱?

    这是一个很好的问题,因为当您最需要您的网络时,您经常会遇到使您的网络拥塞的陷阱风暴。这使得很难预测要配置多少网络。

    明智地使用陷阱。例如,Entity-MIB 只有一个陷阱,并且值得使用,因为它报告物理结构的变化。 Interfaces-MIB 每个端口可能有许多陷阱。对于此 MIB,最好只为绑定到物理端口的接口启用陷阱,而不是为堆叠在较低层接口顶部的接口启用陷阱。对于大型网络,通常最好对物理设备和物理接口使用轮询和陷阱的组合。这样,无论是在正常操作期间还是在网络灾难期间,您都可以预测有多少网络将用于管理流量。

    一些标准 MIB 会指定您可以抛出陷阱的频率或时间。如果您对此感到满意,请使用它。您始终可以使用配置 MIB 对象滚动您自己的企业 MIB,让您的经理限制特定陷阱。

    【讨论】:

      【解决方案3】:

      代理是否将其状态存储在设备本身上?

      这取决于设备和应用程序;一些设备将其存储在本地其他设备使用代理。

      如果在代理上设置了陷阱,是否可以对同一 OID 进行轮询以获取相同的信息?

      是的,但通常最好在陷阱中包含信息,这样管理站就不必对设备进行多次“往返”。例如,如果您捕获属性值更改,最好在陷阱中发送旧值和新值。

      在不使用 mib 文件的情况下,有没有一种方法可以一次查询设备的所有信息?如果没有,并且您正在编写自己的自定义管理器,您是否必须知道它预先报告的结构?

      一般不会... SNMP Get-next 原语就是为这种情况而设计的。

      如果您要设置代理进行报告,通常有办法控制它发送陷阱的频率吗?还是它通常会在满足某些条件时发送陷阱?

      是的,由代理决定何时发送陷阱。

      如果您正在开发自己的代理,我高度建议您查看 Net-SNMP。即使您选择使用其他产品,Net-SNMP 代码也经过精心设计和实施。此外,它还有许多额外功能可帮助开发和测试代理(和管理系统)。

      【讨论】:

      • 复制和粘贴? -1 因为其他人使用了相同的答案
      • 堆栈溢出新手错误。关于 NetSNMP 的评论应该仍然有效和有用。
      猜你喜欢
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多