STP, BPDUs
· 약 9분
STP (Spanning Tree Protocol, 스패닝 트리 프로토콜, 신장 트리 프로토콜)
- 래디아 펄먼(Radia Perlman)이 고안한 알고리즘에 기반
- OSI 2계층 프로토콜
- 브리지 랜에서 루프 발생을 방지하기 위해 사용
- 신장 트리 프로토콜은 IEEE 802.1D에서 정의
- 2계층 브리지(이더넷 스위치)를 통해 연결된 매시 네트워크 내에서 신장 트리를 생성
STP가 필요한 이유
- 두 노드 사이에 활성된 경로가 두 개 이상 존재할 경우 브리지 루프가 발생할 수 있음
- 브리지 루프 문제점
- 동일 MAC 주소(즉, 동일 호스트)가 여러 포트에서 보이게 되어, 브리지에서 사용하는 MAC 주소 테이블(스위칭 포워딩 테이블)이 실패할 수 있음
- 브로드캐스트 스톰(broadcast storm)이 발생
- 브로드캐스트 패킷들이 스위치 사이를 무한히 돌게 됨
- 브로드캐스트 스톰은 CPU 리소스와 대역폭을 극심히 소모
- STP(신장 트리)는 자동 백업을 지원하는 여분의 링크를 제공하면서 브리지 루프를 방지
동작 방식
1. 루트 브리지의 선출
- 신장 트리의 루트 브리지는 가장 낮은 브리지 ID를 갖는 브리지
- 각각의 브리지는 유일한 ID와 설정가능한 우선순위 번호를 갖음
- 브리지 ID는 이 두 가지를 모두 포함
- 두 브리지 ID를 비교할 때, 우선 순위를 먼저 비교
- 이 값이 같을 경우 MAC 주소를 비교
- 망 관리 자는 우선 순위 값을 설정하여 특정 브리지를 루트로 삼음
2. 루트 브리지로의 최소 비용 경로 결정
- 신장 트리가 계산되면 망내 장비는 최소 비용으로 루트로의 메시지 전송이 가능
- 경로의 비용은 경로 상의 네트워크 세그먼트의 비용의 합
- 네트워크 세그먼트의 비용은 각기 다르게 설정될 수 있음
- 메시지는 항상 최소 비용으로 루트까지 전달
3. 각 브리지에서의 최소 비용 경로
- 각각의 브리지는 루트에서 자신으로 연결되는 각각의 경로에 대한 비용을 결정
- 그 중 최소 비용의 경로를 선택
- 선택된 경로로 연결된 포트가 이 브리지의 루트포트(root port)
4. 각 네트워크 세그먼트에서의 최소 비용 경로
- 네트워크 세그먼트 상의 브리지들은 해당 네트워크 세그먼트에서 루트로의 최소 비용 경로를 갖는 브리지를 결정
- 이 브리지와 해당 네트워크 세그먼트를 연결한 포트가 해당 세그먼트의 지명 포트(designated port)
5. 나머지 경로들의 삭제.
- 루트 포트 혹은 지명 포트를 제외한 모든 포트를 막기
BPDUs (Bridge Protocol Data Units)
- 위의 규칙에 따라 신장 트리를 만들기 위해서는 전체 네트워크에 대한 정보를 알아야 함
- 브리지들은 루트 브리지를 결정하고 포트의 역할(루트, 지명, 비사용)을 결정하는 데에 오직 자신이 가지고 있는 정보만을 사용
- 각각의 브리지가 충분한 정보를 가질 수 있도록 하기 위해 브리지들은 BPDU라 불리는 특별한 데이터 프레임을 사용
- 브리지 ID와 루트 경로 비용에 대한 정보를 교환
- 브리지는 포트의 발신지 주소로 포트의 MAC 주소를 사용
- 목적지 주소로는 STP 멀티캐스트 주소 01:80:C2:00:00:00
BPDU 세 가지 형태
- CBPDU (Configuration BPDU)
- 신장 트리 계산에 사용
- TCN (Topology Change Notification)
- BPDU, 망 토폴로지 변경을 알리기 위해 사용
- TCA (Topology Change Notification Acknowledgement)
- BPDU는 정기적으로(기본적으로 2초마다) 교환되어 망 변화 감지 및 포트의 포워딩 동작을 제어
- 어느 장비가 스위치 포트에 최초 연결되면 이 장비는 바로 데이터를 전송하지 않음
- 대신 BPDU가 처리되고 망 토폴로지가 결정될때까지 많은 수의 상태를 넘나듦
- 컴퓨터, 프린터 또는 서버와 같은 호스트는 비록 상태 정보를 알기까지 30초의 지연이 있지만 항상 포워딩 상태로 감
- 상태 정보를 듣고 알기까지의 시간은 포워드 지연(기본적으로 루트 브리지에서 15초로 설정)에 의해 결정 됨
- 만일 또다른 스위치가 연결되고 이로 인해 망내에 루프가 발생할 경우 이 포트는 막힘
- Topology Change Notification(TCN) BPDU는 포트의 변화를 알리기 위해 사용됨
- TCN은 루트 스위치 이외의 스위치에 의해 망에 퍼지며 루트로 전달됨
- TCN을 수신하면 루트 스위치는 일반 BPDU내에 Topology Change 플래그를 설정
- 이 플래그는 다른 모든 스위치로 빠르게 전달되어 다른 스위치의 포워딩 테이블 엔트리를 오래된 것으로 만듦
BPDU 필드
- 브리지 ID 또는 BID가 BPDU 패킷의 하나의 필드로 들어가며 8바이트
- 최초 2바이트는 브리지 우선순위이며 0-65535의 unsigned integer(비부호 정수)
- 뒤의 6바이트는 스위치에서 제공한 MAC 주소
- MAC 주소 축약(MAC Address Reduction)이 사용될 경우 앞의 2바이트 다르게 사용
- 앞의 4비트는 우선순위로 사용
- 뒤의 12비트는 VLAN ID나 MSTP 인스턴스 번호의 전달에 사용
STP 스위치 포트 상태
- Disable
- STP에 의한 것이 아닌, 망 관리자에 의해서 특정 포트는 사용을 금지당할 수 있음
- Blocking
- 스위치 루프를 일으키는 포트
- 어떠한 사용자 데이터를 송수신할 수 없음
- 단, 다른 링크가 사용불가가 되고 신장 트리 알고리즘에 의해 포워딩 상태가 되면 동작
- BPDU 데이터는 blocking 상태에서도 여전히 받을 수 있음
- Listening
- 해당 스위치는 BPDU를 처리하고 blocking 상태로 전환케 할 수 있는 정보에 대해 수신을 기다림
- Learning
- 해당 포트가 프레임을 전달할 수 없는 동안 프레임들의 발신자 주소를 얻어 필터링 DB(스위칭 DB)에 저장
- Forwarding
- 해당 포트에서 필터링 DB에 저장된 발신자 주소를 기반으로 프레임을 전달하는 상태