스패닝트리프로토콜
스패닝 트리 프로토콜(Spannign Tree Protocol)
STP(Spanning Tree Protocol) IEEE 802.1d
토폴로지 이중화
대체 토폴로지
스위치간 이중 경로를 구성하여 네트워크 장애가 발생하였을 경우 대체 경로를 이용하여 네트워크 장애를 대비하는 것이다.
대체 스위치드 토폴로지
여분의 스위치로 이중 경로를 구성하여 스위치 고장에 의한 네트워크 장애를 대비하는 것이다.
브로트캐스트 폭풍(Broadcast Storm)
브로드캐스트와 멀티캐스트에 의해 루프를 따라 트래픽을 복사하여 스위치의 장애를 유발시켜서 네트워크가 다운되거나 극단적으로 느려지는 현상이다.
다중 프레임 전송
유니캐스트 전송시 복수의 경로를 통해 프레임의 사본이 수신되는 현상이다.
불안정한 MAC 데이터베이스
스위치가 복수의 경로로 인해 잘못된 포트에 일치하지 않는 MAC 주소를 학습하는 현상이다.
스패닝 트리
스패닝 트리 알고리즘
- STP는 루트 브리지를 선출한다. 루트 브리지는 가장 낮은 BID를 갖는 브리지가 된다. STP는 루트 브리지에서 사용 중인 모든 인터페이스를 지정 포트(DP; Designated Port)가 되고 전달(forward) 상태로 둔다.
- 비 루트 브리지를 대상으로 루트 포트(RP; Root Port)가 된다. 루트 포트는 각 브리지와 루트 브리지 사이에 최소 관리 비용이 부여된 인터페이스이며 전달 상태로 둔다.
- 이더넷 세그먼트 당 하나의 지정 포트가 되며, 지정 포트는 가장 작은 루트 도달 비용을 갖는 인터페이스로 브리지 사이에 전달되는 BPDU의 필드 값 중 루트 도달 비용을 보고 결정한다.
- 루트 포트도 아니고 지정 포트도 아닌 포트는 차단(block)된다.
STP Bridge ID와 Hello BPDU
스패닝 트리 알고리즘은 가장 먼저 루트 브리지를 선출한다. 루트 브리지를 선출하기 위해 각 브리지는 8byte 길이의 브리지ID(BID; Bridge ID)를 가지며 BID는 2byte 길이의 우선 순위 필드(priority)와 6byte 길이의 시스템 ID 필드로 구성되어 있다. 우선 순위는 0 ~ 65535사이에서 4096의 배수 값을 가질 수 있으며, 기본값은 32768이다. 시스템 ID는 각 브리지의 MAC 주소를 기반으로 한다.
STP는 BPDU(Bridge Protocol Data Unit)이라는 메시지를 정의하며, 브리지는 서로 BPDU를 사용하여 정보를 교환한다. 그중 Hello BPDU는 송신 브리지의 BID와 현재 루트 브리지의 BID 등 정보를 보여준다.
필드 | 설명 |
---|---|
루트 브리지의 BID | 현재 Hello BPDU 송신 브리지가 루트 브리지라고 믿는 브리의 BID |
송신 브리지의 BID | Hello BPDU를 전송하는 브리지의 BID |
루트 도달 비용 | 현재 브리지와 루트 브리지 사이의 STP 경로 비용(Path cost) |
루트 브리지의 타이머 값들 | Hello Timer(디폴트 2초), Max Age Timer(디폴트 20초), Forward Delay Timer(디폴트 15초) |
경로 비용
포트의 속도별로 지정된 값을 말한다.
속도/대역폭(bandwidth) | 경로 비용 (Path cost) |
---|---|
10Mbps (Ethernet) | 100 |
100Mbps (FastEhernet) | 19 |
1Gbps (GigabitEthernet) | 4 |
10Gbps (10GigabitEthernet) | 2 |
포트 ID
BPDU를 전송하는 스위치의 포트 우선순위와 포트 번호로 구성되어 있다. 포트 우선 순위의 기본값은 128이고 포트 번호가 붙어서 128.25와 같은 형식으로 표시된다.
스패닝 트리 만들기
루트 브리지 선출
브리지는 BPDU의 BID를 기반으로 루트 브리지를 선출한다. BID의 값이 가장 낮은 브리지가 루트 브리지가 된다. 대개 우선 순위 필드는 32768로 동일하며 브리지의 MAC 주소로 결정되는데 필요에 의해 우선 순위 값을 변경함으로써 루트 브리지의 선출에 영향을 줄 수 있다. 보통 스패닝 트리의 루트 브리지에 대부분의 트래픽이 전달되므로 좀 더 고성능의 스위치가 루트 브리지로 선출되록 하기 위함이다.
루트 브리치의 선출은 모든 스위치가 Hello BPDU를 보내어 가장 낮은 BID를 갖는 스위치를 루트 브리치로 선출하고 비 루트 브리치들은 루트 브리치의 BID와 루트 경로 비용, 자신의 BID를 알린다.
각 스위치의 루트 포트(RP; Root Port) 선택
각 스위치는 포트 별로 루트 스위치에 도달하기 위한 경로 비용을 계산하여 가자 낮은 비용의 포트를 루트 포트로 선택한다. 경로 비용의 계산을 위해 수신한 Hello BPDU의 Path cost에 수신한 포트의 경로 비용을 더한다.
각 LAN 세그먼트에서 지정 포트 선택(DP; Designated Port) 선택
LAN 세그먼트에서 가장 낮는 경로 비용을 Hello BPDU에 담아 광고하는 포트가 지정 포트로 선택된다. Hello BPDU에는 송신한 스위치의 경로 비용이 담겨 있으며 세그먼트 내의 스위치 포트들은 경로 비용을 서로 비교한다.
차단 포트 선택
루트 포트나 지정 포트로 선택받지 못한 나머지 포트들은 차단(Blocking) 상태가 된다.
STP 포트의 상태 변화
비활성(Disabled)
스위치가 꺼져 있거나, 관리자가 shutdown 시킨 상태.
차단 상태(Blocking)
데이터 프레임 송수신 없음. BPDU 수신. 상대측 스위치로부터 Max Age동안 BPDU를 수신하지 못하거나 상대측 스위치로부터 열등 BPDU(기존 루트 브리지의 BID보다의 BID보다 높은 루트 브리지의 BID를 포함한 BPDU)를 수신할 경우 청취 상태로 변경된다.
청취 상태(Listening)
루프 발생을 방지하기 위해 BPDU 전송. 데이터 프레임 송수신 없음. 상대측 포트로부터 전송 지연 시간(기본 15초)동안 BPDU를 수신하지 못하거나 열등 BPDU를 수신하면 학습 상태로 변경된다.
학습 상태(Learning)
데이터 프레임 송수신 없음. MAC 주소 학습 개시. 전송 지연 시간내에 상대 포트로부터 BPDU 수신 받지 못하거나 열등 BPDU를 수신하는 경우 전송 상태가 된다.
전송 상태(Forwarding)
데이터 프레임 송수신. MAC 주소 학습.
BPDU와 토폴로지 변화
BPDU는 설정(configuration) BPDU와 TCN(Topology Change Notification) BPDU 두 종류가 있다. 스위치는 설정 BPDU를 이용하여 루트 브리치를 선출하고, 스위치 포트의 역할을 지정한다. 설정 BPDU는 항상 루트 브리치가 만들며, 다른 스위치들은 이 설정 BPDU를 다음 스위치에게 중계한다. 설정 BPDU는 Hello BPDU라고도 한다. 랜 토플로지에 변화가 발생하면 이것을 감지한 스위치는 TCN BPDU를 루트 포트를 통해 인접 스위치에게 전송하고 TCN BPDU를 수신한 스위치는 Flag 필드의 값을 TCA(Topology Change Acknowledgement)로 변경하여 TCN BPDU를 송신한 스위치에게 설정 BPDU를 전송하여 TCN BPDU 수신 확인을 알린다. 그리고 역시 루트 포트로 인접 스위치에게 TCN BPDU를 전송한다. 이렇게 전송된 TCN BPDU는 최종적으로 루트 브리치에게 전송되고, 루트 브리지는 설정 BPDU의 Flag 필드를 TC(Topology Change)로 변경하여 지정 포트를 통하여 변화를 알린다. 설정 BPDU를 수신한 스위치는 자신의 MAC 주소 테이블에 있는 MAC 주소를 삭제하고 다시 지정 포트를 통하여 TC가 설정된 설정 BPDU를 전송한다. 결과적으로 변경된 토폴로지에 따라 MAC 주소 테이블이 다시 만들어지게 된다.
필드 | 크기 |
내용 |
---|---|---|
Protocol ID | 2 | 항상 0값을 가짐. |
Version | 1 | BPDU의 버전. STP: 0, RSTP: 2, MST: 3 |
Type | 1 | BPDU의 종류. 기본값 0x00: 설정 BPDU |
Flag | 1 | 토플로지 변화 표시. 0x01: TC, 0x80: TCA |
Root Bridge ID | 8 | 루트 스위치의 BID. |
Path cost | 4 | 루트 스위치까지의 경로 값. |
Bridge ID | 8 | 루트 스위치로 가는 경로상 직전 스위치의 BID. |
Port ID | 2 | 포트 ID. |
Message Age | 2 | 루트 스위치가 현 BPDU를 만들고 경과된 시간. |
Max Age | 2 | BPDU 정보의 유효 시간. 디폴트 20초. |
Hello time | 2 | BPDU 전송 주기. 디폴트 2초. |
Forward Delay | 2 | Listening(정취) 상태와 Learning(학습) 상태 유지 시간. 디폴트 15초. |
필드 | 크기 (byte) |
내용 |
---|---|---|
Protocol ID | 2 | 항상 0값을 가짐. |
Version | 1 | BPDU의 버전. STP: 0, RSTP: 2, MST: 3 |
Type | 1 | BPDU의 종류. 기본값 0x80: TCN BPDU |
컨버전스(수렴) 시간 조정
일반적으로 스위치를 켜면 포트가 전송 상태가 되기까지 청취 상태와 학습 상태를 거치므로 30초가량의 수렴시간이 요구된다. 또한 복수의 경로 존재시 한 경로가 다운되면 STP에 의해 복구되기까지 차단 상태, 청취 상태, 학습 상태를 거치쳐서 전송 상태가 되므로 50초 가량의 수렴시간이 필요하게 된다. 이렇게 비교적 장시간이 요구되는 수렴 시간을 줄이기 위해 시스코에서는 포트 패스트(portfast), 업링크 패스트(uplinkfast), 백본 패스트(backbonefast)라는 기술을 제공한다. 그리고 컨버전스 시간에 영향을 미치는 Hello time, Max Age, 전송 지영 시간을 직접 조정하는 방법이 있다. IEEE 표준은 RSTP(Rapid STP)와 MSTP(Multiple STP)를 제공하여 컨버젼스 시간을 획기적으로 단축할 수 있다.
포트 패스트
PC 등과 같이 스위칭을 하지 않는 종단 장비와 연결된 포트는 스위치 부팅시 바로 전송 모드로 지정하는 방법이다. 글로벌 설정 모드에서 spanning-tree portfast default 명령을 사용하거나 인터페이스 설정 모드에서 개별 인터페이스 별로 spanning-tree portfast 명령을 사용한다.
업링크 패스트
직접 연결된 링크의 장애 발생시 차단 상태에 있는 포트를 바로 전송 상태로 변경시키는 방법이다. 글로벌 설정 모드에서 spanning-tree uplinkfast 명령을 사용한다.
백본 패스트
직전 연결되지 않는 간접 링크의 다운시 차단 상태를 Max Age(기본 20초)를 생략하고 바로 청취 상태로 변경시킨다. 모든 스위치에 대해 글로벌 설정 모드에서 spanning-tree backbonefast 명령을 사용한다.