SNMP(Simple Network Management Protocol) 객체를 폴링할 때 폴링되는 대상을 정확하게 알아야 합니다.이를 완전히 이해하려면 폴링되는 객체와 폴링할 객체의 상관 관계를 파악하는 방법을 알아야 합니다.이 문서에서는 SNMP에서 인덱스를 사용하여 개체를 테이블로 그룹화하는 방법에 대한 기본 정보를 다룹니다.
이 문서의 독자는 다음 주제에 대해 알고 있어야 합니다.
SNMP에 대한 일반적인 지식
SNMP를 통해 Cisco 디바이스를 쿼리하는 데 사용되는 소프트웨어
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
UCD SNMP 버전 4.2
Cisco Catalyst 5509 with Cisco IOS® Software 릴리스 5.5(7)
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다.이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다.현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참조하십시오.
SNMP를 다룰 때 가장 먼저 알아야 할 것 중 하나는 ifIndex입니다.이는 모든 개체의 기본 키입니다.모든 인터페이스(물리적 및 논리적)가 분리되어 값을 할당하는 방법을 고려하십시오.이 값은 디바이스를 부팅하는 동안 할당되며 변경되지 않을 수 있습니다.특정 인터페이스에 대해 폴링해야 할 정보가 있으면 할당된 값을 사용해야 합니다.
IfIndex가 IF-MIB(RFC 1213 )에서 다음과 같은 방식으로 정의된 경우:
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)
모든 MIB의 경우 테이블을 구성하는 인덱스를 빠르게 확인할 수 있는 방법은 테이블 항목을 보는 것입니다.
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 }
MIB 및 테이블 항목이 주어진 경우 테이블이 인덱싱되는 방식을 결정할 수 있습니다.다음 섹션에서는 ifIndex의 예를 제공합니다.
스위치의 포트 7/4에 대해 ifIndex 기반 객체(ifName)를 폴링하기 위해 snmpwalk 명령을 실행하면 다음 출력이 표시됩니다.
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.
ifName(ifDescr on router) 폴링의 해당 출력에서 ifName 뒤에 각 행에 번호가 연결되어 있음을 확인합니다.동일한 행의 실제 인터페이스에 할당된 ifIndex입니다.즉, 폴링의 두 번째 행인 포트 7/4에 ifIndex 11이 할당됩니다. ifIndexed 객체에서 포트 7/4에 대한 정보를 원하는 경우 인덱스 11을 사용합니다. 즉, MIB 객체 식별자(OID)의 끝에 .11을 추가하여 동일한 ifIndex 값에 해당하는 객체의 인스턴스를 검색합니다.
때때로 테이블은 BRIDGE-MIB와 같은 ifIndex로 인덱싱되지 않습니다.이 출력은 색인화된 방식을 검사합니다.
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 }
이 출력은 dot1dBasePortEntry가 dot1dBasePort에 의해 인덱싱되었음을 보여줍니다.그러면 ifIndex로 어떻게 변환됩니까?BRIDGE-MIB는 dot1dBasePortIfIndex라는 개체에 액세스합니다.객체는 다음과 같은 방식으로 정의됩니다.
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 }
이 출력은 BRIDGE-MIB에서 IF-MIB로의 상관관계를 분석하는 방법을 보여줍니다.다음 예는 이 모든 것이 어떻게 일치하는지를 보여줍니다.
참고: BRIDGE-MIB는 VLAN별로 구축되므로 커뮤니티 "public@vlan-id"는 비VLAN1 환경에 사용해야 합니다.
BRIDGE-MIB에서 snmpwalk를 실행하면 인덱스에 대한 다음 샘플 출력이 표시됩니다.dot1dBasePortIfIndex(.1.3.6.1.2.1.17.1.4.1.2)을 사용하여 ifIndex에 다시 매핑합니다.ifIndex가 있으면 ifIndex를 기반으로 다른 객체를 폴링하는 데 사용합니다.
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
굵게 표시된 텍스트 줄(17.1.4.1.2.388 = 11)은 .388이 인덱스임을 나타냅니다.BRIDGE-MIB에서 dot1dBasePortIfIndex 개체를 폴링했으므로 .388은 dot1dBasePortIfIndex입니다.출력 선의 11은 실제로 ifIndex입니다.이 폴링과 이전 폴링에서 정보를 수집하는 경우 포트 7/4에 ifIndex가 11이고 dot1dBasePortIfIndex(Index for BRIDGE-MIB)가 .388인지 확인할 수 있습니다.