[네트워크] Spanning Tree Protocol(STP) 개념과 실제 컨피그
📌 요약 · STP(Spanning Tree Protocol)는 네트워크에 여러 경로가 있을 때 발생하는 루프(Loop) 현상을 막아주는 L2 프로토콜입니다. 이 글에서는 STP가 왜 필요한지, 어떤 원리로 동작하는지, 그리고 시스코 스위치에서 실제로 어떻게 설정하는지까지 초보자 눈높이로 정리합니다.
📑 목차
STP가 필요한 이유 — 네트워크 루프 문제
네트워크 안정성을 높이려면 보통 스위치 간에 이중 경로(redundant link)를 만듭니다. 한 회선이 끊어져도 다른 회선으로 통신이 유지되도록 하기 위함입니다. 그런데 이중 경로를 그냥 두면 큰 문제가 생깁니다. 바로 루프(Loop)입니다.
스위치는 목적지를 모르는 브로드캐스트 프레임을 모든 포트로 뿌립니다. 만약 스위치 A → B → C → A처럼 경로가 둥글게 이어져 있다면, 한 번 들어온 프레임이 영원히 돌고 또 돕니다. 결국 네트워크가 마비됩니다. 이걸 브로드캐스트 스톰(broadcast storm)이라고 부릅니다.
💡 비유로 이해하기 — 회전문에 갇힌 사람
회전문에 한 사람이 들어가 빙글빙글 돌고 있다고 상상해 보세요. 출구가 있어야 사람이 빠져나가는데, 출구가 막히면 안에서 계속 도는 셈입니다. 네트워크 루프도 똑같습니다. STP는 의도적으로 회전문의 한 문을 잠가서(차단해서) 패킷이 한 방향으로만 흐르게 만듭니다.
STP(Spanning Tree Protocol, IEEE 802.1D)는 이 루프 문제를 해결하기 위해 1990년 IEEE가 표준으로 만든 프로토콜입니다. 스위치끼리 정보를 주고받아 가장 좋은 경로 하나만 남기고 나머지 경로는 차단합니다. 그러다 메인 경로에 장애가 생기면 차단해뒀던 경로를 깨워서 다시 통신을 이어줍니다.
STP의 핵심 개념 — 루트 브리지와 BPDU
STP를 이해하려면 두 가지 용어부터 잡고 가야 합니다.
| 용어 | 설명 |
|---|---|
| 루트 브리지 (Root Bridge) | 네트워크에서 단 하나뿐인 '기준 스위치'. 모든 경로 계산은 이 스위치를 출발점으로 합니다. |
| BPDU (Bridge PDU) | 스위치끼리 STP 정보를 교환할 때 쓰는 작은 메시지. 2초마다 한 번씩 주고받습니다. |
학교 운동회를 떠올려 보면 쉽습니다. 본부석(루트 브리지)이 한 곳 있고, 본부석에서 각 반으로 안내 방송(BPDU)을 보냅니다. 각 반은 안내 방송을 듣고 본부석으로 가는 가장 빠른 길을 결정합니다. 다른 더 먼 길은 일단 막아둡니다(차단 상태). 만약 빠른 길이 막히면 그제서야 막아뒀던 길을 엽니다.
루트 브리지는 어떻게 뽑힐까
루트 브리지는 브리지 ID(Bridge ID)가 가장 작은 스위치가 자동으로 선출됩니다. 브리지 ID는 두 부분으로 이루어집니다.
Bridge ID = [ Priority (2 byte) ] + [ MAC Address (6 byte) ] 기본값 Priority : 32768 ※ Priority가 같으면 MAC 주소가 작은 스위치가 루트로 선출됨
Priority(우선순위)는 0부터 61440까지 4096 단위로 설정할 수 있습니다. 숫자가 작을수록 우선순위가 높습니다. 그래서 의도적으로 루트 브리지를 만들고 싶은 스위치의 Priority를 낮춰주는 것이 STP 설계의 첫 단계입니다.
⚠️ 왜 루트를 수동으로 지정해야 할까
설정을 하지 않으면 우선순위가 모두 같은 32768이라, MAC 주소가 가장 작은(=가장 오래된) 스위치가 루트로 뽑힙니다. 보통 오래된 스위치는 성능이 떨어지는 액세스 스위치인 경우가 많아 효율이 나쁩니다. 그래서 성능 좋은 코어/디스트리뷰션 스위치를 루트로 강제 지정하는 게 일반적입니다.
포트의 역할과 5가지 상태
STP가 동작하면 모든 스위치 포트는 다음 세 가지 역할 중 하나를 받습니다.
| 포트 역할 | 설명 |
|---|---|
| Root Port (RP) | 루트 브리지까지 가는 가장 빠른 길에 있는 포트. 각 비루트 스위치마다 단 하나씩만 존재. |
| Designated Port (DP) | 각 LAN 세그먼트에서 루트 브리지 쪽으로 BPDU를 전달하는 대표 포트. |
| Alternate Port (Blocked Port) | 루프 방지를 위해 의도적으로 차단된 포트. 메인 경로 장애 시 백업으로 깨어남. |
그리고 STP 포트는 다음 5가지 상태를 거쳐 동작합니다.
| 상태 | 소요 시간 | 하는 일 |
|---|---|---|
| Disabled | — | 포트가 꺼져 있음 (shutdown) |
| Blocking | 최대 20초 | BPDU만 수신. 데이터 프레임은 폐기 |
| Listening | 15초 | BPDU 교환해 포트 역할 결정. 데이터는 못 보냄 |
| Learning | 15초 | MAC 주소 학습. 데이터는 못 보냄 |
| Forwarding | — | 정상 통신. 데이터 송수신 가능 |
차단된 포트가 통신을 시작하려면 최대 50초(20+15+15)가 걸립니다. 이게 바로 클래식 STP의 큰 단점이고, 뒤에 나오는 RSTP가 이 시간을 1~2초로 줄였습니다.
경로 비용(Cost) 계산
루트 포트와 지정 포트를 정할 때 기준이 되는 것이 경로 비용(Path Cost)입니다. 회선 속도가 빠를수록 비용이 작습니다. 즉 비용이 작은 경로 = 빠른 경로입니다.
| 대역폭 | STP Cost |
|---|---|
| 10 Mbps (Ethernet) | 100 |
| 100 Mbps (FastEthernet) | 19 |
| 1 Gbps (GigaEthernet) | 4 |
| 10 Gbps | 2 |
예를 들어 SW1(루트) → SW2가 100Mbps로 직접 연결되면 비용은 19, SW1 → SW2 → SW3로 거쳐 가면 비용은 19+19=38이 됩니다. SW3 입장에서는 SW1과 직접 연결되는 길이 있다면 그쪽이 더 낮은 비용이라 루트 포트가 됩니다.
시스코 실제 컨피그 예제
시스코 IOS에서 사용하는 대표 명령어를 실제 사용 순서대로 정리했습니다.
① STP 모드 확인 및 변경
SW1# show spanning-tree summary ! 현재 STP 모드 확인 SW1(config)# spanning-tree mode rapid-pvst ! RSTP+PVST 모드로 변경
② 루트 브리지 수동 지정
방법 1 — Priority 직접 설정 (가장 명확하고 추천하는 방법)
SW2(config)# spanning-tree vlan 1 priority 4096 ! 메인 루트로 지정 SW3(config)# spanning-tree vlan 1 priority 8192 ! 백업 루트로 지정
방법 2 — root 키워드로 자동 조정 (시스코 전용 간편 명령)
SW2(config)# spanning-tree vlan 1 root primary ! 자동으로 priority 24576 SW3(config)# spanning-tree vlan 1 root secondary ! 자동으로 priority 28672
③ STP 정보 확인
SW2# show spanning-tree vlan 1 VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 4097 Address 0030.A383.1759 This bridge is the root ← 본인이 루트 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Interface Role Sts Cost Prio.Nbr Type --------------- ----- ---- ------ --------- ---- Fa0/22 Desg FWD 19 128.22 P2p Fa0/24 Desg FWD 19 128.24 P2p
④ 엣지 포트(PortFast) 설정
PC가 직접 연결되는 액세스 포트에 적용하면 50초의 STP 컨버전스 시간을 건너뛰고 즉시 Forwarding으로 갑니다.
SW1(config)# interface fastEthernet 0/1 SW1(config-if)# spanning-tree portfast ! 엔드포인트용 SW1(config-if)# spanning-tree bpduguard enable ! BPDU 받으면 차단
⚠️ PortFast는 PC용 포트에만
PortFast가 켜진 포트에 실수로 다른 스위치를 연결하면 루프가 즉시 만들어집니다. 그래서 항상 BPDU Guard를 함께 켜는 게 표준입니다. PortFast 포트에 BPDU가 들어오면 자동으로 errdisable로 차단됩니다.
STP·RSTP·MSTP 차이
| 표준 | 컨버전스 시간 | 특징 |
|---|---|---|
| STP (802.1D) | 30~50초 | 최초 표준. 느리지만 단순. 현재는 거의 안 씀 |
| RSTP (802.1w) | 1~2초 | 빠른 컨버전스. 현재 대부분 환경의 기본값 |
| MSTP (802.1s) | 1~2초 | 여러 VLAN을 그룹으로 묶어 효율 관리. 대규모 환경에서 사용 |
시스코는 여기에 PVST+(VLAN마다 별도 STP)와 Rapid PVST+(RSTP + PVST)를 추가로 지원합니다. 시스코 환경에서는 spanning-tree mode rapid-pvst가 가장 흔한 선택입니다.
자주 묻는 질문
Q. STP를 꺼도 되나요?
A. 절대 안 됩니다. 모든 회선이 정확하게 일자로만 연결돼 있어도, 누군가 실수로 케이블 두 개를 꽂아 루프가 만들어지는 순간 네트워크 전체가 마비됩니다. STP는 그 마지막 방어선이라 항상 켜두는 것이 원칙입니다.
Q. Priority 값을 왜 꼭 4096의 배수로 해야 하나요?
A. 브리지 ID의 16비트 중 상위 4비트만 Priority로 쓰고, 나머지 12비트는 VLAN ID(Sys-ID-Ext)로 쓰기 때문입니다. 그래서 Priority는 2¹² = 4096 단위로만 설정할 수 있습니다.
Q. 차단 포트인데 케이블을 뽑으면 다른 경로가 바로 살아나나요?
A. 클래식 STP는 최대 50초가 걸리지만, RSTP는 1~2초 안에 자동 전환됩니다. 요즘 장비는 대부분 RSTP나 그 이상을 쓰고 있어 큰 지연 없이 백업 경로가 활성화됩니다.
Q. show spanning-tree 출력에서 "This bridge is the root" 라고 나오는데 의미가 뭔가요?
A. 해당 스위치 자신이 현재 루트 브리지라는 뜻입니다. 의도한 코어 스위치에서 이 메시지가 나오면 설계대로 동작하는 것입니다. 의도치 않은 액세스 스위치에서 이 메시지가 나오면 Priority 설계가 잘못된 것이니 점검해야 합니다.
Q. BPDU Guard와 BPDU Filter는 어떻게 다른가요?
A. BPDU Guard는 PortFast 포트에 BPDU가 들어오면 포트를 차단합니다. BPDU Filter는 BPDU 자체를 송수신하지 않게 합니다. 안전성 면에서는 BPDU Guard가 권장됩니다. Filter는 STP를 사실상 꺼버리는 효과라 매우 신중하게 써야 합니다.
#STP #SpanningTree #RSTP #네트워크기초 #L2스위치 #시스코컨피그 #BPDU #루트브리지 #PortFast #네트워크엔지니어 #도담인사이트
댓글
댓글 쓰기