我正在尝试找出 SNMP 索引的含义。我在 wiki 上读到以下声明:
SNMP 设备实例的索引分配可能会因轮询而发生变化,这主要是由于系统管理员发起的更改
我的理解是,系统管理员正在使用轮询 SNMP 设备,他的程序会显示带有一些序列号(我们称之为索引)的 SNMP 设备。因此,每次他轮询 SNMP 设备时,程序都会显示带有不同索引的设备。
我的理解正确吗? SNMP 索引到底是什么意思?在这种情况下它意味着什么?
答案1
我找到了以下信息这里。
snmp_index 模块为 SNMP 表的 SNMP 索引结构实现了抽象数据类型 (ADT)。它被实现为 ordered_set 数据类型的 ets 表,这意味着所有操作都是 O(log n)。表中的键是 ASN.1 对象标识符。
此索引用于将 SNMP 排序的实现与表的实际实现分开。SNMP 排序(即 GET NEXT 的实现)在此模块中实现。
例如,假设有一个 SNMP 表,在 Erlang 中最好将其实现为每 SNMP 表行一个进程。进一步假设 SNMP 表中的索引是 OCTET STRING。索引结构将按以下方式创建:
snmp_index:new(string)
对于我们创建的每个新进程,我们都会在 snmp_index 结构中插入一个项目:
new_process(Name, SnmpIndex) -> Pid = start_process(), NewSnmpIndex = snmp_index:insert(SnmpIndex, Name, Pid), <...>
通过这种结构,我们现在可以将 OBJECT IDENTIFIER(例如 GET NEXT 请求)映射到正确的进程:
get_next_pid(Oid, SnmpIndex) -> {ok, {_, Pid}} = snmp_index:get_next(SnmpIndex, Oid), Pid.
总之,根据我所知道的信息和前面引文中提供的信息,我认为不应该更改 SNMP 索引,因为这会违背索引的目的(如果我错了,请纠正我)。
更新:在我看来,SNMP 索引类似于数据库索引,但它索引网络设备以供参考。此索引唯一应该更改的时间是硬件被移除或添加时。您不希望数据库索引在现有记录上发生变化,因为这可能会导致重复或其他问题。也许有人可以通过另一个答案或评论来阐明这个问题。我对网络了解很多,但我从未听说过 SNMP 索引会发生变化。我在 Google 上搜索了大约一个小时,除了已经提到的网页和维基页面。
答案2
So each time he polls the SNMP devices the program shows those devices with different indices.
事实并非如此,索引用于在插入新设备时获取有关它们的信息(想想热插拔 RAID/RAM/CPU/虚拟接口...),这样您就可以在插入设备后在下一次轮询时立即跟踪设备。它们不应该(如在 RFC 中)改变,但我不知道这是否真的是标准化的。