SNMP'的含义是什么;IF-MIB::ifTable中的s IF-MIB::ifIndex?

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

我想知道:我有一个设备有以下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: 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的规则。

我的问题是它有什么目的,而不是它没有什么目的。我的问题是它有什么目的,而不是它没有什么目的。