首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SNMP的IF-MIB::ifIndex在IF-MIB::ifTable中的含义是什么?

SNMP的IF-MIB::ifIndex在IF-MIB::ifTable中的含义是什么?
EN

Stack Overflow用户
提问于 2017-04-19 14:01:09
回答 2查看 3.3K关注 0票数 0

我想知道:我有一个设备具有以下SNMP MIB条目:

代码语言:javascript
运行
复制
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 ifIndex说:

代码语言:javascript
运行
复制
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的含义。我的期望是,第一个数字应该从一个开始,将一个逻辑数字映射到某个物理数字。

我猜想一些实施者也不知道它应该做什么;-)

阅读RFC 2863 (或RFC 2233),情况变得更加混乱:“其值介于1和ifNumber的值之间。(.)”

“本备忘录中采用的解决方案是删除ifIndex值必须小于ifNumber值的要求,并保留ifNumber的当前定义。”

此解决方案还可能在ifTable中出现“漏洞”,即ifTable中概念性行的ifIndex值不一定是连续的,但是SNMP的GetNext (和GetBulk)操作很容易处理这些漏洞。

“在接口的ifIndex值被动态删除之后,在网络管理系统重新初始化之后,它的ifIndex值才会被不同的动态添加接口重新使用。这就避免了(预先)为所有可能动态添加的接口分配ifIndex值的需要。”

我认为混淆的部分原因是“ifIndex的价值”,不清楚它是指左侧还是右侧(IMHO是右侧)。左边是索引表的唯一主键,右边是任意的虚拟值,还是什么?可能主要的设计缺陷是,接口数据应该由唯一的接口名访问,而不是通过可能不时更改的索引访问(索引仍然可以用于枚举可用的名称)。

EN

回答 2

Stack Overflow用户

发布于 2017-04-19 14:36:08

ifIndex的语义没有任何限制,特别是它应该对人类有意义,否则它们将在RFC中得到解释。注意,它写的是“推荐”,而不是“必需”。

一些SNMP代理直接将逻辑网络接口(VLAN、隧道等)映射为对人类毫无意义的实例号。这只是意味着你的管理软件必须处理非连续指数。

票数 1
EN

Stack Overflow用户

发布于 2017-08-08 12:06:49

ifIndex只是一个任意但唯一的数字,它将一个接口和另一个接口区别开来,该表通过(索引为) ifIndex来标识接口。如何分配它们取决于实现。

通常情况是,当您有一个可读的索引对象(MAX-ACCESS是not-accessible以外的一个值)时,对象的值(正如您在问题中所说的“右侧”)等于编码到实例标识符中的值(左侧)。也就是说,ifIndex.X = X,总是这样,因为ifIndex本身就是ifIndex的索引(X =ifIndex的值)。对于任何对象X,如果X是X的索引,则这是正确的。因此,SMIv2声明索引对象将具有MAX-ACCESS not-accessible,除非表中没有其他可读(可访问)的列:它们的值总是可以从实例标识符中获得,因此使列具有可读性是多余的。

SMIv1没有这条规则,这就是为什么您有时会在SMIv1模块中看到可读的索引,或者像在ifIndex的例子中一样,最初作为SMIv1模块编写的SMIv2模块,在这些模块中,将索引更改为not-accessible会破坏兼容性,并且违反了IETF允许对标准MIB进行修改的规则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43497966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档