Beim Polling von SNMP-Objekten (Simple Network Management Protocol) müssen Sie manchmal genau wissen, was abgefragt wird. Um dies vollständig zu verstehen, müssen Sie wissen, wie Sie das Objekt, das abgefragt wird, mit dem korrelieren, was Sie abfragen möchten. In diesem Dokument werden die Grundlagen für die Verwendung von Indizes in SNMP zum Gruppieren von Objekten in Tabellen beschrieben.
Die Leser dieses Dokuments sollten folgende Themen kennen:
Allgemeine Kenntnisse über SNMP
Software für die Abfrage von Cisco Geräten über SNMP
Die Informationen in diesem Dokument basieren auf den folgenden Software- und Hardwareversionen:
UCD-SNMP Version 4.2
Cisco Catalyst 5509 mit Cisco IOS® Softwareversion 5.5(7)
Die Informationen in diesem Dokument wurden von den Geräten in einer bestimmten Laborumgebung erstellt. Alle in diesem Dokument verwendeten Geräte haben mit einer leeren (Standard-)Konfiguration begonnen. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die potenziellen Auswirkungen eines Befehls verstehen.
Weitere Informationen zu Dokumentkonventionen finden Sie in den Cisco Technical Tips Conventions.
Eine der ersten Lerninhalte bei SNMP ist ifIndex. Dies ist ein Primärschlüssel aller Objekte. Stellen Sie sich vor, dass alle Schnittstellen (physisch und logisch) zerlegt und mit einem Wert versehen werden. Dieser Wert wird beim Hochfahren eines Geräts zugewiesen und kann nicht geändert werden. Wenn Informationen für diese Schnittstelle abgefragt werden müssen, muss dieser zugewiesene Wert verwendet werden.
IfIndex wird in der IF-MIB (RFC 1213 ) folgendermaßen definiert:
InterfaceIndex ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "A unique value, greater than zero, for each interface or interface sub-layer in the managed system. 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." SYNTAX Integer32 (1..2147483647)
Für jede MIB können Sie schnell feststellen, welche Indexorganisation eine Tabelle organisiert, indem Sie den Tabelleneintrag betrachten:
ifEntry OBJECT-TYPE SYNTAX IfEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry containing management information applicable to a particular interface." INDEX { ifIndex } ::= { ifTable 1 }
Mithilfe einer MIB und eines Tabelleneintrags können Sie festlegen, wie die Tabelle indiziert wird. Der nächste Abschnitt enthält Beispiele für ifIndex.
Wenn Sie den Befehl snmpwalk ausgeben, um ein ifIndex-basiertes Objekt (ifName) für Port 7/4 am Switch abzufragen, erhalten Sie folgende Ausgabe:
sj-cse-568: snmpwalk 172.16.99.60 public ifname ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.1 = sc0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.2 = sl0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.3 = VLAN-1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.4 = VLAN-1002 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.5 = VLAN-1004 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.6 = VLAN-1005 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.7 = VLAN-1003 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.8 = 7/1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.9 = 7/2 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.10 = 7/3 !--- This is the relevant line: ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.11 = 7/4 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.12 = 7/5 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.13 = 7/6 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.14 = 7/7 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.15 = 7/8 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.16 = 7/9 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.17 = 7/10 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.18 = 7/11 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.19 = 7/12 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.20 = ATM8/0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.22 = /A ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.23 = /B ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.24 = Nu0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.25 = LEC/ATM8/0.10 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.532 = 3/1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.533 = 3/2 !--- Output suppressed.
In der Ausgabe einer Abfrage von ifName (ifDescr auf Routern) wird nach ifName an jede Zeile eine Zahl angefügt. Dies ist der ifIndex, der der tatsächlichen Schnittstelle in derselben Zeile zugewiesen wird. Dies bedeutet, dass der zweiten Zeile der Abfrage, Port 7/4, der ifIndex 11 zugewiesen wird. Wenn Sie Informationen zu Port 7/4 von einem ifIndexed-Objekt erhalten möchten, verwenden Sie einen Index von 11. Dies bedeutet, dass am Ende eines MIB-Objektbezeichners (OID) eine .11 hinzugefügt wird, um die Instanz dieses Objekts abzurufen, die den gleichen ifIndex-Werten entspricht.
Manchmal werden Tabellen nicht durch ifIndex indiziert, z. B. mit BRIDGE-MIB. In dieser Ausgabe wird die Indizierung untersucht:
dot1dBasePortEntry OBJECT-TYPE SYNTAX Dot1dBasePortEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "A list of information for each port of the bridge." REFERENCE "IEEE 802.1D-1990: Section 6.4.2, 6.6.1" INDEX { dot1dBasePort } ::= { dot1dBasePortTable 1 }
Diese Ausgabe zeigt, dass dot1dBasePortEntry durch dot1dBasePort indiziert wird. Wie wird das zurück zu ifIndex? BRIDGE-MIB greift auf ein Objekt mit dem Namen dot1dBasePortIfIndex zu. Das Objekt wird folgendermaßen definiert:
dot1dBasePortIfIndex OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "The value of the instance of the ifIndex object, defined in MIB-II, for the interface corresponding to this port." ::= { dot1dBasePortEntry 2 }
Diese Ausgabe zeigt die Korrelation von BRIDGE-MIB zu IF-MIB. Das nächste Beispiel zeigt, wie alles zusammenpasst.
Hinweis: BRIDGE-MIB wird pro VLAN erstellt, daher muss Community "public@vlan-id" für Nicht-VLAN1-Umgebungen verwendet werden.
Wenn Sie einen Snapwalk auf der BRIDGE-MIB ausgeben, erhalten Sie die nächste Beispielausgabe für einen Index. Verwenden Sie dot1dBasePortIfIndex (.1.3.6.1.2.1.17.1.4.1.2), um ifIndex wieder zuzuordnen. Wenn Sie den ifIndex haben, können Sie mithilfe dieser Methode andere Objekte auf der Grundlage von ifIndex abfragen.
sj-cse-568: snmpwalk 172.16.99.60 public .1.3.6.1.2.1.17.1.4.1.2 17.1.4.1.2.203 = 671 17.1.4.1.2.204 = 672 17.1.4.1.2.205 = 673 17.1.4.1.2.206 = 674 17.1.4.1.2.207 = 675 17.1.4.1.2.208 = 676 17.1.4.1.2.209 = 677 17.1.4.1.2.210 = 678 17.1.4.1.2.211 = 679 17.1.4.1.2.212 = 680 17.1.4.1.2.213 = 681 17.1.4.1.2.214 = 682 17.1.4.1.2.215 = 683 17.1.4.1.2.216 = 684 17.1.4.1.2.257 = 581 17.1.4.1.2.385 = 8 17.1.4.1.2.386 = 9 17.1.4.1.2.387 = 10 17.1.4.1.2.388 = 11 17.1.4.1.2.389 = 12 17.1.4.1.2.390 = 13 17.1.4.1.2.391 = 14 17.1.4.1.2.392 = 15 17.1.4.1.2.393 = 16 17.1.4.1.2.394 = 17 17.1.4.1.2.395 = 18 17.1.4.1.2.396 = 19 17.1.4.1.2.449 = 22
Die fettgedruckte Textzeile (17.1.4.1.2.388 = 11) zeigt, dass .388 ein Index ist. Da Sie das dot1dBasePortIfIndex-Objekt von BRIDGE-MIB abgeblendet haben, ist .388 der dot1dBasePortIfIndex. Die 11 in der Ausgabelinie ist tatsächlich der ifIndex. Wenn Sie die Informationen aus dieser Umfrage und aus der vorherigen Umfrage sammeln, können Sie feststellen, dass Port 7/4 einen ifIndex von 11 und einen dot1dBasePortIfIndex (Index für BRIDGE-MIB) von 0,388 aufweist.