IT·테크/인프라

MSTP — VLAN을 인스턴스로 묶어 스패닝 트리 개수를 줄이기

레루루 2026. 8. 9. 15:05
반응형

이 글은 2021년 11월 기준 기록입니다.

 

STP와 RSTP는 하나의 VLAN당(per-vlan spanning-tree) 하나씩의 스패닝 트리가 동작합니다. VLAN이 몇 개일 때는 문제가 없지만, 1000개의 VLAN이 존재하는 경우 설정 BPDU가 2초에 천 개씩 전송됩니다. 스위치가 처리해야 할 양이 VLAN 수에 그대로 비례하는 구조입니다.

스패닝 트리를 VLAN이 아니라 그룹 단위로 돌린다

MSTP는 VLAN을 그룹으로 묶어서 그룹당 하나의 BPDU를 전송하는 방식으로 이 문제를 해결합니다. VLAN 1000개를 인스턴스 2개로 묶으면 스패닝 트리도 2개만 돌아갑니다.

 

여기서 두 가지 용어가 나옵니다. 영역(region) 은 VLAN 정보가 달라지는 구간이고, 인스턴스(instance) 는 하나의 스패닝 트리로 작동하는 VLAN들입니다. 인스턴스 매핑이 다른 경우 영역 번호를 달리하여 설정합니다.

 

즉 인스턴스는 VLAN을 묶는 단위이고, 영역은 그 묶는 방식이 같은 스위치들의 범위입니다.

CIST는 전체를, MSTI는 영역 안을 맡는다

영역이 여러 개면 그 사이를 이어 줄 무언가가 필요합니다. 그 역할이 CIST입니다.

 

CIST는 전체 스위치 네트워크를 루프 없이 연결합니다. MSTI는 각 영역 내에서 인스턴스별로 동작합니다.

 

루트 선출도 층으로 나뉩니다. CIST는 전체 네트워크에서 하나의 CIST 루트 스위치를 선택하고, 각 영역별로는 CIST 영역 루트 스위치를 선택합니다. MSTI는 각 영역별 인스턴스마다 루트 스위치를 선택합니다.

트렁크와 VLAN을 먼저 갖춘다

MSTP를 설정하기 전에 스위치 간 트렁크를 잡습니다. SW2와 SW3의 e1/0-1에는 지나갈 VLAN을 제한해 둡니다.

SW1(config)#int range e0/0-1
SW1(config-if-range)#sw tr enc dot
SW1(config-if-range)#sw mo tr
SW1(config-if-range)#end

SW2(config)#int range e0/0-1,e1/0-1
SW2(config-if-range)#sw tr enc dot
SW2(config-if-range)#sw mo tr
SW2(config-if-range)#int range e1/0-1
SW2(config-if-range)#sw tr al vlan 101-102
SW2(config-if-range)#end

SW3(config)#int range e0/0-1,e1/0-1
SW3(config-if-range)#sw tr enc dot
SW3(config-if-range)#sw mo tr
SW3(config-if-range)#int range e1/0-1
SW3(config-if-range)#sw tr al vlan 101-102
SW3(config-if-range)#end

SW4(config)#int range e0/0-1
SW4(config-if-range)#sw tr enc dot
SW4(config-if-range)#sw mo tr
SW4(config-if-range)#end

VTP 도메인을 둘로 나눕니다. SW1·SW2는 VTP_A, SW3·SW4는 VTP_B입니다.

SW1(config)#vtp domain VTP_A
SW2(config)#vtp domain VTP_A
SW3(config)#vtp do VTP_B
SW4(config)#vtp domain VTP_B

SW1(config)#do sh vtp status

각 도메인의 서버에서 VLAN을 만듭니다.

SW1(config)#vlan 101
SW1(config-vlan)#vlan 102
SW1(config-vlan)#vlan 201
SW1(config-vlan)#vlan 202
SW1(config-vlan)#exit

SW3(config)#vlan 101
SW3(config-vlan)#vlan 102
SW3(config-vlan)#exit

영역 이름·인스턴스 매핑·설정 번호가 세 쌍둥이여야 한다

MSTP 설정은 모드를 바꾸고 전용 설정 모드에 들어가 세 가지를 정하는 순서입니다.

// MSTP 설정
// STP 모드를 MSTP로 작동
SW1(config)#spanning-tree mode mst

// MSTP 설정모드 진입
SW1(config)#spanning-tree mst configuration
// 영역 이름 설정
SW1(config-mst)#name A
// 인스턴스 매핑(인스턴스 번호에 vlan 번호 연결)
SW1(config-mst)#instance 1 vlan 101-102
SW1(config-mst)#instance 2 vlan 201-202
// 설정 번호 지정
SW1(config-mst)#revision 1
SW1(config-mst)#exit

// 영역 이름, 인스턴스 매핑, 설정 번호가 동일하면 하나의 MSTP로 작동
SW2(config)#spanning-tree mode mst
SW2(config)#spanning-tree mst configuration
SW2(config-mst)#name A
SW2(config-mst)#instance 1 vlan 101-102
SW2(config-mst)#instance 2 vlan 201-202
SW2(config-mst)#revision 1
SW2(config-mst)#exit

SW3(config)#spanning-tree mode mst
SW3(config)#spanning-tree mst configuration
SW3(config-mst)#name B
SW3(config-mst)#instance 1 vlan 101
SW3(config-mst)#instance 2 vlan 102
SW3(config-mst)#revision 1
SW3(config-mst)#exit

SW4(config)#spanning-tree mode mst
SW4(config)#spanning-tree mst configuration
SW4(config-mst)#name B
SW4(config-mst)#instance 1 vlan 101
SW4(config-mst)#inst 2 vlan 102
SW4(config-mst)#rev 1
SW4(config-mst)#exit

영역 이름, 인스턴스 매핑, 설정 번호가 동일하면 하나의 MSTP로 작동합니다. 셋 중 하나라도 다르면 다른 영역이 됩니다. 위 설정에서 SW1·SW2는 영역 A로, SW3·SW4는 영역 B로 묶입니다. 이름만 다른 것이 아니라 인스턴스 매핑 자체가 다릅니다. 영역 A는 인스턴스 1에 VLAN 101과 102를 함께 넣었고, 영역 B는 인스턴스 1에 101만, 인스턴스 2에 102를 넣었습니다.

 

설정이 어떻게 들어갔는지 확인합니다.

// mstp 설정 정보 확인
SW1(config)#do sh spanning-tree mst configuration

Name      [A]
Revision  1     Instances configured 3
Instance  Vlans mapped
0 1-100,103-200,203-4094
1 101-102
2 201-202

인스턴스를 두 개만 만들었는데 Instances configured는 3입니다. 매핑하지 않은 나머지 VLAN이 전부 인스턴스 0에 들어가 있기 때문입니다. 인스턴스 0이 곧 CIST입니다.

인스턴스 번호가 같아도 영역이 다르면 다른 트리다

인스턴스별로 루트 스위치를 정합니다.

// 인스턴스 1에 대해 SW2의 우선순위를 설정
// MSTI 루트 스위치가 됨
SW2(config)#spanning-tree mst 1 priority 0

// 영역이 다르므로 인스턴스 번호는 같지만 SW2와는 다른 인스턴스
SW4(config)#spanning-tree mst 1 priority 0

두 명령 모두 mst 1을 대상으로 하지만 SW2는 영역 A의 인스턴스 1, SW4는 영역 B의 인스턴스 1입니다. 서로 다른 스패닝 트리이므로 각자 루트가 될 수 있습니다.

CIST 루트와 영역 루트는 다르다

인스턴스 0, 즉 CIST의 정보를 봅니다.

// 인스턴스 0의 mstp 정보 확인(CIST)
SW1(config)#do sh spanning-tree mst 0

// MST0에서 SW1이 루트스위치인 것을 확인 가능(CIST 루트)
MST0 vlans mapped: 1-100,103-200,203-4094
Bridge        address aabb.cc00.0600  priority      0     (0 sysid 0)
Root          this switch for the CIST

// SW3에서 mst 0 정보 확인
SW3(config)#do sh span mst 0
MST0 vlans mapped: 1-100,103-4094
Bridge        address aabb.cc00.0800  priority      32768 (32768 sysid 0)
Root          address aabb.cc00.0600  priority      0     (0 sysid 0)
port    Et1/0           path cost     2000000
// 영역 루트 스위치가 SW3인 것을 확인할 수 있음
// 영역 루트 스위치는 해당 영역에서 CIST 루트 스위치까지 경로값이 가장 작은 스위치
Regional Root this switch

SW1에서는 Root this switch for the CIST로 자신이 전체 네트워크의 CIST 루트임을 보여 줍니다. SW3에서는 Root가 SW1을 가리키지만 Regional Root this switch가 붙어 있습니다. 영역 루트 스위치는 해당 영역에서 CIST 루트 스위치까지 경로값이 가장 작은 스위치입니다. 영역 B가 바깥과 통하는 창구가 SW3이라는 뜻입니다.

 

두 출력에서 MST0 vlans mapped 값이 서로 다른 점도 눈여겨볼 만합니다. 영역마다 인스턴스에 넣은 VLAN이 다르므로, 남아서 인스턴스 0으로 떨어지는 VLAN도 달라집니다.

 

MSTP가 하는 일은 결국 스패닝 트리의 개수를 VLAN 수에서 떼어 내는 것입니다. VLAN이 몇 개든 인스턴스만큼만 돌아갑니다.

반응형