SNMP'的含义是什么;IF-MIB::ifTable中的s IF-MIB::ifIndex?
我想知道:我有一个设备有以下SNMP MIB条目:SNMP'的含义是什么;IF-MIB::ifTable中的s IF-MIB::ifIndex?,snmp,mib,network-interface,Snmp,Mib,Network Interface,我想知道:我有一个设备有以下SNMP MIB条目: IF-MIB::ifNumber.0 = INTEGER: 46 IF-MIB::ifIndex.805306369 = INTEGER: 805306369 IF-MIB::ifIndex.805306370 = INTEGER: 805306370 .... IF-MIB::ifIndex.1073741861 = INTEGER: 1073741861 IF-MIB::ifIndex.1073741862 = INTEGER: 10737
IF-MIB::ifNumber.0 = INTEGER: 46
IF-MIB::ifIndex.805306369 = INTEGER: 805306369
IF-MIB::ifIndex.805306370 = INTEGER: 805306370
....
IF-MIB::ifIndex.1073741861 = INTEGER: 1073741861
IF-MIB::ifIndex.1073741862 = INTEGER: 1073741862
IF-MIB::ifIndex.1073741863 = INTEGER: 1073741863
snmptranslate-IR-Td iIndex
表示:
IF-MIB::ifIndex
ifIndex OBJECT-TYPE
-- FROM IF-MIB
-- TEXTUAL CONVENTION InterfaceIndex
SYNTAX Integer32 (1..2147483647)
DISPLAY-HINT "d"
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A unique value, greater than zero, for each interface. It
is recommended that values are assigned contiguously
starting from 1. The value for each interface sub-layer
must remain constant at least from one re-initialization of
the entity's network management system to the next re-
initialization."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1) 1 }
但是我真的不明白F-MIB::ifIndex.805306369=INTEGER:805306369的含义是什么。我的期望是第一个数字应该从1开始,将一个逻辑数字映射到某个物理数字
我的猜测是,一些实现者也不明白它应该做什么;-)
阅读RFC 2863(或RFC 2233),情况变得更加混乱:
“其值范围在1和ifNumber的值之间。(…)
“本备忘录中采用的解决方案只是删除该要求
ifIndex的值必须小于ifNumber的值,
并保留ifNumber及其当前定义。”
此解决方案还可能导致在管道中出现“孔洞”
ifTable,即ifTable中概念行的ifIndex值
不一定是连续的,但SNMP的GetNext(和GetBulk)
操作很容易处理此类漏洞。”
“在重新初始化之间,对数据一致性的要求。”
接口的ifIndex值通过在接口之后要求
动态删除,则其ifIndex值不会被
不同的动态添加接口,直到以下
重新初始化网络管理系统。这避免了
需要(提前)为所有可能的项目分配ifIndex值
可以动态添加的接口。”
我认为部分混淆源于“ifIndex的值”,其中不清楚它是指左侧还是右侧(IMHO它是右侧)。左边是索引表的唯一主键,右边只是任意的伪值,还是什么?可能主要的设计缺陷是,接口数据应该通过唯一的接口名称来访问,而不是通过可能不时更改的索引来访问(该索引仍然可以用于枚举可用的名称)。ifIndex的语义没有限制,尤其是它应该对人有意义,否则,它们将在RFC中明确说明。请注意,它表示“推荐”,而不是“必需”
一些SNMP代理直接将逻辑网络接口(VLAN、隧道等)与实例号映射,而这些实例号对人类来说毫无意义。这只是意味着您的管理软件必须处理非连续索引。ifIndex的语义没有任何限制,尤其是它对人类来说应该是有意义的,否则它们将在RFC中明确说明。请注意,它表示“推荐”,而不是“必需”
一些SNMP代理直接将逻辑网络接口(VLAN、隧道等)与实例号映射,而这些实例号对人类来说毫无意义。这只是意味着您的管理软件必须处理非连续索引。
iIndex
只是一个任意但唯一的数字,它在任何表中通过(索引为)iIndex标识接口,从而将一个接口与另一个接口区分开来。如何分配它们取决于实施
通常情况下,当您有一个可读的索引对象时(MAX-ACCESS是一个非不可访问的值
),该对象的值(您在问题中提到的“右侧”)等于编码到实例标识符中的值(左侧)。也就是说,iIndex.X=X
,因为iIndex
是iIndex
本身的索引(X
=iIndex
的值)。对于任何对象X都是如此,其中X是X的索引。因此,SMIv2声明索引对象将具有MAX-ACCESS不可访问
,除非表中没有其他可读(可访问)列:它们的值始终可以从实例标识符中获得,因此让该列可读是多余的
SMIv1没有此规则,这就是为什么有时在SMIv1模块中会看到可读索引,或者在ifIndex中,在最初编写为SMIv1模块的SMIv2模块中会看到可读索引,如果将索引更改为
不可访问
,则会破坏兼容性,并破坏IETF允许对标准MIB进行修改的规则。ifIndex
只是一个任意但唯一的数字,它在任何表中通过(索引为)标识接口,从而将一个接口与另一个接口区分开来iIndex
。如何分配它们取决于实施
通常情况下,当您有一个可读的索引对象时(MAX-ACCESS是一个非不可访问的值
),该对象的值(您在问题中提到的“右侧”)等于编码到实例标识符中的值(左侧)。也就是说,iIndex.X=X
,因为iIndex
是iIndex
本身的索引(X
=iIndex
的值)。对于任何对象X都是如此,其中X是X的索引。因此,SMIv2声明索引对象将具有MAX-ACCESS不可访问
,除非表中没有其他可读(可访问)列:它们的值始终可以从实例标识符中获得,因此让该列可读是多余的
SMIv1没有此规则,这就是为什么有时在SMIv1模块中会看到可读索引,或者在ifIndex中,在最初编写为SMIv1模块的SMIv2模块中会看到可读索引,如果将索引更改为
不可访问
,将破坏兼容性并破坏IETF允许修改标准MIB的规则。我的问题是它有什么目的,而不是它没有什么目的。我的问题是它有什么目的,而不是它没有什么目的。