STP (Spanning Tree Protocol)이란
STP (Spanning Tree Protocol)
트랜스패런트 브리징의 Flooding 특성으로 인해서 발생하는 스위치 Looping
현상과 Looping을 차단하기 위해 사용되는 IEEE 802.1D에 정의되어 있는 또 다른 기능인 STP(Spanning Tree Protocol)에 대해서 간단히 살펴 보도록 하겠습니다.

Looping
스위치에서 브로드캐스트(Boardcast) 프레임은 수신 port를 제외한 다른 모든 port로 전송이 됩니다. ARP Request 프레임이 브로드캐스트 프레임이기 때문에 스위치에서는 브로드캐스트 프레임이 수신될 수 밖에 없습니다. 그러나 스위치에서 브로드캐스트 프레임을Flooding하는 특성으로 인해서 스위치간 연결 시 아래 그림의 예들과 같이 closed loop가 형성 되면, 브로드캐스트 프레임이 끊임없이 무한루프를 도는 Looping 현상이 발생하게 됩니다.

스위치 연결에 위와 같은 폐루프(closed loop) 연결이 형성될 경우, ARP request packet이 들어 올 경우 어떻게 될까요? Broadcast 프레임은 수신 port를 제외한 다른 모든 port로 전송이 됩니다. 따라서 처음 broadcast 프레임을 수신한 스위치에서는 2개의 스위치 포트 각각으로 전송을 합니다. 다른 스위치들에서는 broadcast 프레임이 수신된 port를 제외하고 나머지 다른 port로 전송을 합니다. 즉, 왼쪽으로 전송된 브로드캐스트 프레임은 왼쪽 방향으로 계속 돌게 되고, 오른쪽으로 전송된 브로드캐스트 프레임은 오른쪽으로 계속 돌게 됩니다. 2개의 브로드캐스트 프레임이 아래 그림과 같이 서로 반대 방향으로 무한루프를 돌게 됩니다.
브로드캐스트 프레임의 무한루프가 발생하면, 브로드캐스트 프레임의 특성상 스위치의 각 포트에 연결된 모든 호스트 장비들에게도 브로드캐스트 프레임이 전송되게 됩니다. Link의 speed가 빠르면 빠를수록 더 빠르게 돌게 됩니다. 워낙 빠르게 돌게 되기때문에, ARP request 프레임이 점점 늘어나게 되면 이 브로드캐스트 트래픽을 처리하느라 CPU 부하가 계속해서 올라가게 됩니다. 결국에는 CPU 부하가 100%가 되면서 LAN에 연결된 장비들이 뻗어 버리게 됩니다.
스패닝트리 프로토콜(Spanning Tree Protocol)
STP(Spanning Tree Protocol)는 트랜스패런트 브리징과 함께 IEEE 802.1D에 표준으로 정의가 되어 있는 프로토콜입니다. 위에 말씀드린 스위치 네트워크에서의 Looping 현상을 방지하기 위해 만들어진 프로토콜입니다. 원리는 간단합니다. Closed loop가 형성되지 못하도록 특정 port를 차단해서 루프를 끊어 버리는 겁니다. 그림 3에서 각 그림에서 주황색으로 표시된 곳이 있습니다. 초록색으로 된 것은 link up 상태임을 의미하고, 주황색은 link down을 의미합니다. STP가 동작해서 Looping이 발생하지 않도록 해당 port들을 block 시킨 것입니다. 한곳의 link를 blocking 함으로써 물리적으로 cable을 뺀 것은 아니지만, 논리적으로는 아래의 그림과 같이 loop를 끊어 버린 모양과 같이 동작합니다.

실습
# IEEE 802.1D Spanning-Tree Protocol
- Switch 개념으로 비교 조건 할때는 낮은 값을 우선적으로 생각한다
- Router 개념으로 비교 조건 할때는 높은 값을 우선적으로 생각한다
1. Router Bridge 선정 (Root Bridge에는 절대 Block된 포트가 존재하지 않는다)
1) Bridge-ID Priority 값이 가장 낮은게 우선 (Default : 32768 + VLAN Number)
Priority 값 변경 방법 : (config)# span vlan 1 priority [0~65535]
2) Bridge-ID Mac Address 값이 가장 낮은게 우선
2. Designated port와 Root Port 선정
- Designated Port (DP) : BPDU를 송신하는 포트
- Root Port (RP) : Designated Port 에서 나오는 BPDU를 수신하느 포트
- BPDU (Bridge Protocol Data Unit) : 1) IEEE 802.1d STP를 지원하는 Switch들은 매 2초 주기를 가지고 전송
2) 멀티케스트 전송방식
3) Root Bridge 선정
(BPDU : Root-ID, Cost, Bridge-ID, MAX age time, Hello Time...)
4) Loop의 위치 결정
5) Loop 방지를 위한 blocking
6) 변경사항을 network에 알림
7) Spanning tree 의 상태를 monitoring
8) Root Bridge가 선정 되면 Root Bridge에서 BPDU를 송신
- Non-Root Bridge들은 Root Bridge로부터 Root Port를 통해서 BPDU를 수신한다
- Non-Root Bridge들은 Root Bridge로 향하는 BPDU를 보내지 않는다
- Non-Root Bridge가 Topology변경을 알리기위해 TCN(Topology Change Notification) BPDU를 Root Port에 보낸다
- Root Bridge는 Network내의 Topology변경 Event를 알고 TC(Topology Change) bit를 set하여 BPDU를 보낸다
- Network 내의 모든 Bridge는 TC bit set하여 이 BPDU를 relay하여 모든 Single Bridge는 Topology Change위치를 알수 있다
3. Block Port(Non-Designated Port)선정
- Root Bridge 기준에서 Loop가 x개가 생긴다면, Block Port도 x개가 있어야 한다
- Root Bridge는 오로지 한개지만, Non-Root Bridge는 Loop의 위치에 따라 여러개가 생길수 있다
1) 세그먼트 구간 Cost
10M : Cost 100
100M : Cost 19
1G : Cost 4
10G : Cost 2
2) Sender Bridge-ID : Root Bridge와 연결된 Switch들의 Bridge-ID
3) Port-ID : 128.x (x는 Port 번호)
4. Non-Root Bridge 선정
1) Block 된 Port를 갖고 있는 Switch를 Non-Root Bridge로 선정한다
2) Block 된 Port를 갖고 있기 때문에 어떠한 경우에도 Root Bridge가 될수 없다
3) Block 된 Port는 오로지 Root Bridge에서 송신하는 BPDU만 수신 가능하다
4) Root Bridge로 향하는 BPDU는 보내지 않는다
a. 만약, Topology 변경시, Topology 변경을 알리기 위해 TCN(Topology Change Notification) BPDU를 Root Port에 내보낸다 (당연, Block port로는 내보내지 않는다)
b. Root bridge는 Network내의 Topology변경 Event를 알고 TC(Topology Change) bit를 set하여 BPDU를 보낸다
c. Network 내의 모든 bridge는 TC bit set하여 이 BPDU를 Relay하여 모든 Single Bridge는 Topology Change위치를 알수있다
STP 관련 Command
1. Spanning-Tree enable 및 disable
Switch(config)# spanning-tree vlan x
Switch(config)# no spanning-tree vlan x
2. Bridge-ID Priority 설정
Switch(config)# spanning-tree vlan x priority [0~61440, 4096의 배수로 증가]
3. Cost 설정
Switch(config)# int fa 0/x
Switch(config-if)# spanning-tree vlan x cost [1-200000000]
4. Port-ID priority 설정
Switch(config)# int fa 0/x
Switch(config-if)# spanning-tree vlan x port-priority [0~240, 16의 배수로 증가]
5. Max Age Time 설정
Switch(config)# spanning-tree vlan x max-age [6~40]
6. Forward Delay Time 설정
Switch(config)# spanning-tree vlan x forward-time [4~30]
7. Bridge-ID를 설정하지 않으면서 Vlan x에 대해서 Root Bridge 설정
Switch(config)# spanning-tree vlan x root primary
8. 정보 확인
# show spanning-tree
# show spanning-tree vlan [VLAN Number]
# debug spanning-tree event
# show spanning-tree root
# show spanning-tree bridge
# show spanning-tree detail
# show spanning-tree summary
[출처] IEEE 802.1d|작성자 다야
PVST(Per-Vlan Spanning Tree)
시스코에서 만든 시스코 전용 프로토콜
STP에서 Per-Vlan 기능이 추가( 각 vlan마다 다른 스패닝 트리 인스턴스 구성 가능)
isl 트렁킹을 지원
포트패스트, 업링크패스트, 백본패스트 기술을 지원
포트 패스트 : 포트 활성화시 바로 전송상태가 되는 기능
업링크 패스트 : 직접 연결된 링크가 다운 되었을 때 차단 상태에 있는 포트를 즉시 전송상태로 변경
백본 패스트 : 간접링크가 차단되었을 때 차단상태의 멕스에이지를 생략하고 청취상태로 변경
-----------------------------------------------------------------------------------------------
PVST+(Per-Vlan Spanning-Tree plus)
역시 vlan마다 다른 stp 인스턴스를 가지며 isl 트렁킹과 802.1q 트렁킹을 제공.
BPDU가드와 루트가드 기능이 추가되었고 로드밸런싱이 가능함
(BPDU가드 : 포트또는 인터페이스가 BPDU를 수신할 경우 포트패스트로 설정된 포트를 비활성화 시키는 기능 - 포트를 통해서 BPDU를 수신했을 때 해당 포트를 자동으로 다운시키는 기능으로 종단장치가 접속된 포트가 BPDU를 수신하는 것은 읿나 사용자들이 무단으로 스위치에 개인의 스위치나 허브를 접속했거나, STP 관련 해킹 공격을 받고 있음을 의미하는 경우가 많으며 PC나 서버 등 접속된 포트가 BPDU를 수신했을 때 해당포트를 차단함)
spanning-tree portfast bpduguard default 명령으로 설정 가능
-----------------------------------------------------------------------------------------
RSTP(Rapid-Spanning Tree Protocol)
stp의 진화된 표준
stp와의 호환성을 유지하여 거의 같은 파라미터 값들을 사용하며 루트 브리지를 선정하는 방법도 같음
추가적으로 stp와 BPDU 구성도 같으며 flag 필드의 8비트를 모두 사용함
+rstp에서 추가된 특징으로는 이웃과 제안/동의과정을 가지며 수렴시간이 빠르고 stp와 다른 포트상태와 역할을 정의하고 stp에서 사용되는 타이머는 사용하지 않음.
------------------------------------------------------------------------------------------
MSTP(Multiple Spanning Tree Protocol)
vlan들을 instance로 묶어 스위치의 부하를 줄이고, 네트워크 관리를 용이하게 하는 프로토콜.
( 스위치에서 vlan 개수가 1000개라면 stp나 rstp로인해 전송되는 BPDU 갯수도 1000개가 2초마다 전송되어 지면 스위치 동작에 부하가 있을 수 밖에 없음. 그래서 나온게MSTP)
1) MSTP는 복수개의 VLAN을 하나의 Instance 그룹에 묶어 stp는 하나만 동작하게 하는 것
2) mstp는 영역을 구분해 동작함
ex. 영역a와 영역b가 있다면 영역a는 vlan 101-300까지 사용한다고 가정했을때 vlan 100-200은 instance 그룹1, vlan 201-300까지는 instance 그룹 2로 구분시켜 로드밸런싱이 가능함.
- 영역 b는 만약 vlan101-200만 사용할 경우 로드밸런싱을 위해 vlan 번호, instance번호를 다시 매핑해야함.
(영역 b에 대해서 vlan 102-150을 다시 instance 그룹1, 151-200을 instance 그룹2로 해야 할 시 영역 b에 대해 따로 맵핑해야 한다는것임)
3) MSTP는 2가지 Spanning-Tree가 사용된다.
(1) CIST(Common and Internal Spanning Tree)
- 전체 스위치 네트워크를 loop 없이 연결시키기 위해 사용
- 전체 네트워크에서 하나의 CIST Root스위치 선정 후, 각 영역별로 CIST 영역 Root스위치를 또 선정
(2) MSTI(Multiple Spanning Tree Instance)
- 각 영역내에서 instance별 동작하기 위해
- 각 영역내에서 MST Instance별로 하나의 root스위치 설정
MSTP는 실장비가 필요해서 실습을 못함... !
출처 및 참조 :
http://blog.naver.com/c_18/10189200278
http://blog.naver.com/nacw412/220113001393
外 본문 참조