본문 바로가기

네트워크

STP, Spanning Tree Protocol, 스패닝트리

반응형

STP, IEEE 802.1D 스패닝 트리 프로토콜이란 스위치에서 발생하는 루핑을 막아주는 역할을 한다고 알려져 있습니다. 보통 스위치 경로를 구성할 때 하나의 경로가 문제가 생길 경우를 대비해 예비 경로를 마련합니다. 이때 STP 가 없다면 루핑에 빠지게 되는데 우선 어떻게 루핑에 빠지는지를 살펴보겠습니다. 

 

1. R1이 R2에게 ping 을 보내려 하는데 해당 아이피의 맥주소를 모르기 때문에 이를 알아내기 위해 ARP broadcast를 보내게 됩니다.

 

 

2. e0/0 을 통해 ARP broadcast 프레임을 주고받은 SW1 은 e0/0 포트를 제외한 모든 포트에 이 프레임을 플러딩 합니다. 

3. SW2는 e0/1 과 e0/2를 통해 ARP broadcast 프레임을 받았습니다. 2번 과정처럼 수신받은 포트를 제외한 모든 포트에 이 프레임을 플러딩 합니다.  e0/1로 수신받은 프레임은 e0/1을 제외한 e0/0과 e0/1로 플러딩 하며 

 

e0/2로 수신 받은 프레임을 e0/1과  e0/0으로 송신한다. 

 

4. SW1의 e0/1 과 e0/2는 ARP broadcast 프레임을 수신받았다. 다시 수신받은 포트를 제외한 나머지 포트에 이를 플러딩 한다. 

5. 2~4번 과정이 계속 반복된다. 

 

이런 식으로 무한 루핑이 돌게 되며 이렇게 스위치가 루핑에 빠지게 되면 CPU 사용량이 지나치게 높게 올라가며(거의 99%) 다운돼버립니다. 

이 경우 스위칭이 불가능해지고 네트워크 전체가 다운되버리고 관리자가 입력하는 명령어에 스위치가 응답하지 못할 수도 있습니다. 

 

R1에서 R2로 ping 을 보낼 때 CPU가 100%가 되는 것을 확인할 수 있습니다. 

 

 

 

이제 STP가 어떻게 루핑을 방지하는지 알아보겠습니다. 그전에 STP의 특징 몇 가지를 먼저 언급하려 합니다. 

 

1. STP 는 Broadcast Domain 당 하나의 Root Bridge를 가진다.

2. Root Bridge 가 아닌 모든 브릿지는 반드시 하나씩의 Root Port 를 가진다. Root Port 란 Root Bridge에서 가장 가까운 포트를 말한다.

3. Segment 당 하나씩의 Designated Port 를 가진다. Segment는 스위치 간 서로 연결된 링크입니다. 즉 SW1와 SW 2간 e0/1 - e0/1과 e0/2 - e0/2 두 개의 Segment 가 존재하며 각 Segment 당 하나의 Designated Port 가 존재합니다. 

 

 

우선 SW1을 Root Bridge로 만들기 위해 Bridge ID 값을 조정하겠습니다. 

SW1(config)#spanning-tree vlan 1 priority 0 

SW2(config)#spanning-tree vlan 1 priority 4096

 

SW1 과 SW2 간 BPDU (Bridge Protocol Data Unit)를 주고받으며 누가 Root Bridge 가 될지를 정하게 됩니다. 바로 위에서 SW1의 Bridge Priority를 0으로 조절했기 때문에 SW1이 Root Bridge 가 됩니다. (다음 글에서 스위치 간 Root Bridge를 정하기 위해 주고받는  BPDU에 대해 다룰 것이라 여기서는 설명하지 않겠습니다.)

 

루트 브릿지의 포트들은 Designated Port 가 됩니다. 

DP(Designated Port) 와 인접한 포트들은 Root Port 가 됩니다. 하지만 Non-Root Bridge 인 SW2 에는 오직 하나의 Root Port 가 필요합니다. e0/1과 e0/2가 모두 Root Port 가 된다면 STP 가 아니라 다시 루핑에 빠지게 될 것입니다. e0/1과 e0/2 중 누가 Root Port 가 될지를 정해야 합니다. 

 

SW2의 e0/1과 e0/2중 Port ID 가 낮은 e0/1 이 Root Port 가 되고 e0/2 가 Blocked Port 가 되어 STP 가 완성되었습니다. 

이제 위쪽 경로는 아랫쪽 경로가 문제가 생겨 작동하지 않을 때를 대비한 대체 경로로서 평상시에는 비활성화되어있습니다.

 

 show spanning-tree를 통해 포트들의 상태를 확인하겠습니다.

Root Bridge 인 SW1의 모든 포트들은 Designated Port입니다. 

 

SW2의 경우 e0/1 이 Root Port로 지정되어 이 경로를 통해 통신을 하게 됩니다. 

 

 

마지막으로 STP의 5가지 Status에 대해 알아보겠습니다. 

 Disabled : 포트가 고장 나 사용할 수 없거나 shutdown 상태 (아무것도 송수신할 수 없다)

 Blocking : 스위치를 처음 켜거나 disabled 되어 있는 포트를 관리자가 다시 살렸을 때 (BPDU 송수신 가능) 

 Listening : Blocking 되어 있는 스위치 포트가 Root Port 나 Desginated Port로 선정될 때 (BPDU 송수신 가능)

 Learning : Listening 상태에 있던 포트가 Forwarding 딜레이 시간 15초 동안 그 상태를 유지하면 Learning 상태가 된다 (맥 주소 학습 가능, BPDU 송수신 가능)

 Forwarding : Learning 상태에서 다른 상태로 넘어가지 않고 15초 동안 유지하면 Forwarding 상태가 된다 (프레임 전송, 맥 주소 학습 가능, BPDU 송수신 가능) 

 

이 상태에서 SW2의 e0/1 포트를 shutdown 시켜 보겠습니다. SW2 의 e0/1 포트가 disabled 가 되면서 Blocking 상태였던 e0/2 포트가 Root port로 선정되어 Listening 상태가 됩니다. 이때 Blocking 상태의 포트는 20초 동안 BPDU를 받지 못하게 될 때 장애가 발생했다는 사실을 알게 됩니다. 

 

15초가 지난 뒤 Listening 상태이던 e0/2 포트가 Learning 상태로 변하게 됩니다. 

 

 

다시 15초가 지난 뒤 e0/2 포트는 Forwarding 상태가 되어 정상적으로 통신이 가능하게 되었습니다. 

 

 

Blocking 이였던 e0/2 포트가 정상적으로 통신이 가능하게 되는 시간이 15초 + 15초 = 30초가 소모되었습니다. 

 

결과적으로 Blocking -> Listening -> Learning -> Forwarding까지 최대 50초가 소모되게 됩니다. 50초라는 오랜 시간 동안 통신이 두절된다는 것은 기업 입장에서는 엄청난 악영향을 끼칠 수 있을 것입니다. 이러한 STP의 느린 Convergence를 보완한 Rapid Spanning Tree Protocol IEEE 802.1w가 도입되었습니다.

 

이번 글에서는 스위치 간 회선 장애를 대비한 보조 경로때문에 루핑에 빠지지 않게 하기 위한 STP 에 대해 알아봤습니다. 다음 글에서는 스위치간 Root Bridge, BP, RP 등을 선정하기 위해 주고받는 BPDU에 대해 알아보겠습니다. 

반응형