~/network/stp
스위칭

STP

Spanning Tree Protocol

L2 네트워크에서 발생할 수 있는 Bridging Loop를 방지하기 위한 프로토콜이다. IEEE 802.1D 표준에 정의되어 있으며, 스위치가 여러 대 연결되어 물리적으로 이중화된 경로가 존재할 때 일부 포트를 논리적으로 차단하여 트리 구조의 단일 경로만 사용하도록 만든다.

L2 루프로 발생하는 문제

L2 스위치는 트랜스패런트 브리징 방식으로 동작하기 때문에 목적지 MAC 주소를 모르거나 브로드캐스트 프레임을 받으면 수신 포트를 제외한 모든 포트로 플러딩한다. 이때 이중화 링크를 구현한 환경에서는 스위치 간에 루프가 형성되어 다음과 같은 문제가 발생한다.

  • 브로드캐스트 스톰(Broadcast Storm): 플러딩된 프레임이 루프를 따라 무한히 순환하면서 네트워크 기능을 악화시키는 현상이다. 스위치 CPU 소모는 99%까지 증가하며, 대역폭 고갈 문제와 시스템 과부하 현상이 발생한다.
  • MAC Address Table 불안정(Mac Flapping): 같은 MAC 주소가 여러 포트에서 학습되어 테이블이 계속 갱신되며, 정상적인 프레임 전달이 어려워진다.
  • 유니캐스트 프레임 복제: Unknown 유니캐스트 프레임을 수신하면, 모든 스위치 포트로 프레임을 플러딩하기 때문에 연결된 스위치 포트 개수만큼 유니캐스트 프레임을 복제한다. 이때, 유니캐스트가 여러 개로 복제된다는 것은 유니캐스트 철학에 맞지 않으며, 호스트 입장에서도 동일한 유니캐스트 프레임을 수신하게 되는 이더넷 프레임 루프가 발생한다.

L3에는 IP 헤더의 TTL 필드가 있어 루프가 생겨도 일정 시간 후 패킷이 폐기되지만, 이더넷 프레임에는 TTL과 같은 장치가 없기 때문에 한번 루프가 발생하면 자동으로 종료되지 않는다. 이를 막기 위해 STP가 필요하다.

동작 과정

STP는 다음과 같은 순서로 루프 없는 트리 구조를 만든다.

  1. Root Bridge 선출: 네트워크 전체에서 Bridge ID의 우선순위 값이 가장 낮은 스위치를 Root Bridge로 선정한다. 만약 우선 순위가 동일하면 MAC 주소 값이 가장 낮은 스위치가 Root Bridge로 선출된다.
  2. Root Port(RP) 선정: Root Bridge가 아닌 각 스위치에서 Root Bridge로 가는 가장 짧은 경로(Path Cost가 가장 낮은 포트)를 Root Port로 지정한다.
  3. Designated Port(DP) 선정: 각 네트워크 세그먼트마다 Root Bridge와 가장 가까운(Path Cost가 가장 낮은) 포트 하나를 Designated Port로 지정한다. Root Bridge 자신의 모든 포트는 비용이 0이므로 항상 Designated Port가 된다.
  4. 나머지 포트 차단: Root Port도 Designated Port도 아닌 포트는 Blocking 상태로 두어 프레임을 전달하지 않는다.

이 과정을 통해 모든 스위치가 Root Bridge를 정점으로 하는 트리 구조에 포함되며, 루프를 형성하던 경로는 차단된다.

Root Port 선출 우선순위

각 스위치는 Root Port를 결정할 때 다음 네 가지 기준을 위에서부터 순차적으로 적용한다.

  1. Path Cost — Root Bridge까지의 누적 비용이 가장 낮은 포트가 우선이다.
  2. Sender Bridge ID — Path Cost가 같다면, BPDU를 보낸 상대 스위치의 Bridge ID가 낮은 쪽이 우선이다. 동일한 Path Cost를 가지는 두 경로가 서로 다른 상위 스위치를 거쳐가는 경우에 적용된다.
  3. Sender Port ID — 위 둘이 같다면, 상대 스위치 포트의 Port ID가 낮은 쪽이 우선이다. 같은 상위 스위치(예: Root Bridge)에 이중화 링크로 직접 연결된 경우에 적용된다.
  4. Local Port ID — 위까지 모두 같다면, 수신 측(자기 자신) Port ID가 낮은 포트가 우선이다.

이 우선순위에서 밀려난 포트가 결국 Blocking 상태로 떨어지며, 차단되는 포트의 위치도 이 순서에 따라 결정된다. Designated Port 선출 역시 같은 비교 체계를 따르되, 비교 범위가 세그먼트 내 모든 포트가 된다는 점만 다르다.

1. Path Cost

Path Cost는 Root Bridge로 가는 경로의 비용으로, Bandwidth가 높을수록 Cost 값이 작다. IEEE에서 권장하는 기본값은 다음과 같다.

링크 속도Path Cost
10 Mbps (Ethernet)100
100 Mbps (FastEthernet)19
1 Gbps (GigaEthernet)4
10 Gbps (10 GigaEthernet)2

각 스위치는 Root Bridge에 도달하기까지 거치는 모든 링크의 Path Cost를 합산해 가장 작은 값을 가지는 포트를 Root Port로 선택한다.

Cost 값은 브리징 루프를 방지하기 위해 포트를 차단하는 첫번째 요소이다. 이중화 링크를 구현한 환경에서 루트 브리지와의 Cost 값이 서로 다른 경우에는 Cost 값이 높은 구간 포트를 차단하여 브리징 루프를 방지한다.

2. Bridge ID

Bridge ID는 STP가 Root Bridge를 선출할 때 사용하는 식별자로, 다음과 같이 구성된다.

  • Bridge Priority (16bit): 기본값은 32768이다. 관리자가 값을 낮게 설정한 스위치를 Root로 만들 수 있다.
  • MAC Address (48bit): 스위치의 MAC 주소가 사용된다.

Bridge Priority가 같다면 MAC 주소가 더 낮은 스위치가 Root Bridge가 된다. 운영 환경에서는 보통 안정적이고 성능이 좋은 코어 스위치의 Priority를 낮게 설정해 의도적으로 Root로 지정한다.

3. Port ID

Port ID는 스위치의 각 포트를 식별하는 값으로, 다음과 같이 구성된다.

  • Port Priority (8bit): 기본값은 128이다. 관리자가 값을 낮춰 특정 포트의 우선순위를 높일 수 있다.
  • Port Number (8bit): 포트 번호. 같은 스위치 안에서 고유하게 부여된다.

Cost 값이 동일한 이중화 링크가 존재할 때 동작하는 tiebreaker가 Port ID이다. 다음과 같은 상황을 가정해 보자.

  • 한 스위치가 Root Bridge에 두 개의 링크로 이중화되어 있다.
  • 두 경로의 Path Cost가 같다.
  • BPDU의 출발지인 Sender Bridge ID(= Root Bridge ID)도 같다.

위와 같은 상황에선 Root Bridge의 포트 번호가 낮은 쪽으로 이어진 링크가 활성 경로가 되고, 포트 번호가 높은 쪽으로 이어진 반대편 스위치의 포트가 차단된다.

BPDU

BPDU(Bridge Protocol Data Unit)는 스위치들이 STP 정보를 주고받기 위해 사용하는 프레임이다. STP는 스위치간에 BPDU를 전송하여 루프가 없는 경로를 구성하며 네트워크 토폴로지에 대한 모니터링을 실시한다. BPDU는 기본적으로 2초마다 Root Bridge에서 생성되어 모든 스위치로 전파된다. 두 가지 종류가 있다.

  • Configuration BPDU: Root Bridge 정보, Bridge ID, Path Cost 등 트리 구조를 결정하기 위한 정보를 담는다.
  • TCN(Topology Change Notification) BPDU: 토폴로지 변경이 감지되면 Root Bridge에 알리기 위해 사용된다. Root Bridge는 이를 받으면 모든 스위치에 변경 사실을 전파해 MAC Address Table 갱신을 유도한다.

포트 상태

STP가 동작하는 포트는 다음 다섯 가지 상태를 거친다.

  • Disable(DIS): 포트가 동작하지 않는 상태. shutdown 상태이거나 케이블 연결이 없는 경우 또는 BPDU Guard, Port-Security에 의해 포트가 비활성화된 경우
  • Blocking(BLK): 브리징 루프를 방지하기 위해 포트가 논리적으로 차단된 상태. BPDU만 수신하고(송신은 불가) 데이터 프레임은 송수신하지 않는다.
  • Listening(LIS): 토폴로지가 변경되어 포트 역할을 선정하기 위한 STP 컨버전스 단계. BPDU를 송수신하며 Root Bridge와 포트 역할을 결정한다. 데이터 프레임은 처리하지 않는다.
  • Learning(LRN): 스위치 포트 상태를 Forwarding 상태로 이전하는 직전 단계로써 프레임을 송수신하기 위한 MAC 주소를 학습
  • Forwarding(FWD): 프레임 송수신이 가능한 상태. 일반적으로 RP와 DP가 Forwarding 상태로 동작한다.
STP 포트 상태 전이 및 상태별 동작 비교

포트가 활성화되면 Blocking에서 시작하여 Max Age(최대 20초) 후 Listening으로, Forward Delay(15초) 후 Learning으로, 다시 Forward Delay(15초) 후 Forwarding 상태가 된다. 따라서 Blocking에서 Forwarding까지 도달하려면 최대 약 50초의 컨버전스 시간이 필요하다. 이 지연을 줄이기 위해 RSTP, MSTP 같은 개선된 프로토콜이 등장했다.

STP의 종류

오리지널 STP는 컨버전스 속도가 느리고 VLAN 환경에 유연하게 대응하지 못하는 한계가 있어 여러 변형이 등장했다.

종류표준특징
STPIEEE 802.1D최초의 표준. 컨버전스에 30~50초 소요
RSTPIEEE 802.1wRapid STP. Alternate / Backup Port 도입으로 수 초 내 컨버전스 가능
MSTPIEEE 802.1s여러 VLAN을 묶어 인스턴스 단위로 STP 운용
PVST+Cisco 독자VLAN별로 독립적인 STP 인스턴스 운용
RPVST+Cisco 독자PVST+에 RSTP의 빠른 컨버전스를 적용

현재 운영 환경에서는 RSTP나 MSTP, RPVST+가 주로 사용되며, 오리지널 STP를 그대로 쓰는 경우는 드물다.

정리

STP는 이중화된 L2 경로에서 루프를 방지하기 위한 프로토콜이다. Root Bridge를 중심으로 트리 구조를 형성하고 일부 포트를 차단하는 방식으로 동작한다. 다만 컨버전스가 느린 단점이 있어, 현재는 RSTP나 MSTP 같은 개선된 변형이 주로 사용된다.