STP
IT 위키
더 많은 작업
Spanning Tree Protocol, 스패닝 트리 프로토콜
- OSI 모델 데이터링크 계층의 스위치 장비에서 사용되는 프로토콜로, 2개 이상의 스위치가 여러 경로로 연결될 때 무한 루프 현상을 막기 위해 우선순위에 따라 1개의 경로로만 통신하도록 하는 프로토콜
스위치를 여러 경로로 연결하면 한 링크가 끊겨도 다른 경로로 통신할 수 있어 가용성이 높아진다. 그러나 이더넷 프레임에는 IP의 TTL 같은 수명 값이 없어서, 브로드캐스트 프레임이 고리(루프)를 따라 끝없이 돌며 늘어나는 브로드캐스트 폭주가 생기고, 같은 MAC 주소가 여러 포트에서 번갈아 학습되어 주소 테이블이 불안정해진다. STP는 일부 포트를 논리적으로 막아 물리적으로는 고리가 있어도 논리적으로는 나무(tree) 모양이 되게 만들고, 사용 중인 링크가 끊기면 막아 둔 포트를 다시 열어 우회 경로를 만든다. 원래 IEEE 802.1D에 정의되었다.
- 루트 브리지(root bridge)를 하나 선출한다.
- 루트 브리지가 아닌 스위치마다 루트 브리지로 가는 가장 좋은 포트 하나를 루트 포트로 정한다.
- 링크(세그먼트)마다 루트 브리지 쪽으로 프레임을 보낼 지정 포트를 하나 정한다.
- 루트 포트도 지정 포트도 아닌 포트는 차단(blocking)해 루프를 끊는다.
- 모든 스위치는 브리지 ID를 갖는다. 브리지 ID는 브리지 우선순위(priority)와 스위치의 MAC 주소를 이어 붙인 값이다.
- 브리지 ID가 가장 작은 스위치가 루트 브리지가 된다. 먼저 우선순위를 비교하고, 같으면 MAC 주소가 작은 쪽이 이긴다.
- 우선순위 기본값은 32768이다. 모든 스위치가 기본값이면 MAC 주소가 가장 작은(대개 가장 오래된) 스위치가 루트가 되므로, 실무에서는 성능이 좋은 중심 스위치의 우선순위를 낮춰 루트로 지정한다.
| 역할 | 위치 | 설명 |
|---|---|---|
| 루트 포트(Root Port) | 루트가 아닌 스위치마다 1개 | 루트 브리지까지 경로 비용 합계가 가장 작은 포트. 같으면 상대 브리지 ID, 상대 포트 ID 순으로 비교한다. |
| 지정 포트(Designated Port) | 세그먼트마다 1개 | 그 세그먼트에서 루트 브리지 쪽으로 가장 가까운 스위치의 포트. 루트 브리지의 포트는 모두 지정 포트다. |
| 차단 포트(Blocking, 비지정 포트) | 나머지 | 데이터 프레임을 전달하지 않아 루프를 끊는다. BPDU 수신은 계속한다. |
- 경로 비용(path cost)은 포트의 링크 속도에 따라 정해지는 값으로, 빠른 링크일수록 작다.
- 루트 경로 비용(root path cost)은 루트 브리지까지 거치는 포트 비용의 합이다. 루트 포트와 지정 포트는 이 값이 작은 쪽으로 정해진다.
- 링크 속도가 높아지면서 IEEE 802.1D 개정판에서 비용 값의 범위가 넓어졌다. 장비마다 기본값 체계가 다를 수 있으므로 값 자체보다 "속도가 빠를수록 비용이 낮다"는 원리를 기억한다.
| 상태 | 데이터 프레임 전달 | MAC 주소 학습 | BPDU 처리 | 설명 |
|---|---|---|---|---|
| Blocking(차단) | X | X | 수신 | 루프 방지를 위해 막아 둔 상태 |
| Listening(청취) | X | X | 송수신 | 포트 역할을 정하는 중 |
| Learning(학습) | X | O | 송수신 | 프레임은 전달하지 않고 MAC 주소 테이블만 채운다 |
| Forwarding(전달) | O | O | 송수신 | 정상 통신 상태 |
| Disabled(비활성) | X | X | X | 관리자가 끄거나 링크가 내려간 상태 |
- 차단 포트가 전달 상태가 되려면 Blocking → Listening → Learning → Forwarding 순서를 거친다.
- BPDU(Bridge Protocol Data Unit)는 스위치끼리 STP 정보를 주고받는 제어 프레임이다.
- 구성 BPDU에는 루트 브리지 ID, 루트 경로 비용, 보내는 브리지 ID, 포트 ID와 타이머 값이 들어 있다.
- 루트 브리지는 Hello 시간마다 BPDU를 보내고, 다른 스위치는 이를 받아 전달한다. 일정 시간(Max Age) 동안 BPDU를 받지 못하면 토폴로지가 바뀐 것으로 보고 다시 계산한다.
- 토폴로지 변경을 알리는 TCN(Topology Change Notification) BPDU도 있다.
기존 STP는 기본 타이머(Hello 2초, Max Age 20초, Forward Delay 15초)를 따르면 링크 장애 후 다시 전달 상태가 될 때까지 30초~50초가 걸린다. 이 시간 동안 해당 경로로는 통신할 수 없다. 이를 줄이려고 개선 규격이 나왔다.
| 규격 | IEEE 문서 | 특징 |
|---|---|---|
| STP | IEEE 802.1D | 원래의 스패닝 트리. 수렴에 수십 초가 걸린다. |
| RSTP(Rapid STP) | IEEE 802.1w | 포트 상태를 Discarding, Learning, Forwarding 세 가지로 줄이고, 대체 포트(Alternate)·백업 포트(Backup) 역할을 두어 장애 시 빠르게 전환한다. 타이머를 기다리지 않고 이웃 스위치와 직접 합의(proposal/agreement)해 수렴이 빠르다. 이후 IEEE 802.1D-2004에 통합되었다. |
| MSTP(Multiple STP) | IEEE 802.1s | 여러 VLAN을 몇 개의 인스턴스로 묶어 인스턴스마다 다른 스패닝 트리를 만든다. VLAN별로 다른 링크를 쓰게 해 부하를 나눌 수 있다. 이후 IEEE 802.1Q에 통합되었다. |
- STP의 목적(스위치 루프와 브로드캐스트 폭주 방지)과 동작 계층(데이터 링크 계층)을 묻는다.
- 루트 브리지는 브리지 ID(우선순위 + MAC 주소)가 가장 작은 스위치이고, 기본 우선순위가 32768이라는 점을 묻는다.
- 포트 상태 순서(Blocking → Listening → Learning → Forwarding)와 Learning 상태에서 MAC 주소만 학습한다는 점을 구분할 수 있어야 한다.
- RSTP(802.1w)와 MSTP(802.1s)가 각각 무엇을 개선했는지 묻는다.