본문 바로가기

네트워크

[네트워크] 7. 스패닝 트리 프로토콜 STP

이 게시물은 후니의 쉽게 쓴 CISCO 네트워킹 4판을 공부한 내용을 바탕으로 작성됨.

 


스패닝 트리 프로토콜 STP - 맛보기

 

앞서 L2 장비인 스위치와 브리지에 대해서 알아보았다. 스위치와 브리지를 이용하여 네트워크를 구성할 때, 프레임이 전송되는 경로가 원형을 이룬다면 looping이 발생하여 네트워크가 망가진다.

 

이것을 방지하기 위해 스위치와 브리지에서는 스패닝 트리 프로토콜 STP를 반드시 적용하여 사용한다.

 

STP를 이해하기 위해 먼저 브리지 ID, Path cost를 이해해보자.

 

 

Spanning Tree Protocol – Part 3: Bridge ID, Priority, System ID Extension & Root Bridge Election Process (firewall.cx)

 

Bridge ID는 위처럼 총 8 Bytes 길이이며 맨 앞 16bits는 Bridge Priority, 뒤 48bits는 MAC address로 구성된다.

 

MAC address에다가 2Byte짜리 Bridge Priority 갖다 붙인것이 Bridge ID라고 생각하면 된다.

 

  • Bridge Priority - 총 16bits이므로 0부터 $2^{16}-1$ (65535)까지의 값을 가질 수 있다. 디폴트값은 중앙값인 32786이다. 따라서 아무 설정도 해주지 않으면 스위치나 브리지에서 Bridge Priority는 32786이다. 이 값이 작을수록 순위가 높은 것이다.
  • MAC address - 개별 장비마다 부여되는 고유 주소값으로 이미 설정되어 있는 값.

 

 

 

 

 

Path Cost?

 

Path cost에서 path란, 장비와 장비 사이의 길을 의미한다. 따라서 Path cost는 각 장비가 얼마나 빠른 링크로 연결되어 있는지 파악하기 위해 도입되었다. 

 

STP를 정의하고 있는 표준인 IEEE 802.1D에서는 Path cost를 계산할 때 1,000Mbps를 두 장비 사이의 링크 대역폭으로 나눈 값을 사용했다. (1,000Mbps를 장비 간 데이터 전송속도로 나눈 것)

 

예를 들어 두 스위치가 10Mbps로 연결되어 있다면 Path cost = 1,000/10 = 100이 된다.

 

어떤 링크의 전송속도가 100Mbps라면 → 1,000/100 = 10

 

시간이 지남에 따라 링크의 데이터 전송속도가 1,000Mbps를 초과하게 되었고, 그에 따라 Path cost는 소숫점을 가지게 되었다. 그리하여 IEEE는 Path cost가 소숫점으로 나오는 것을 방지하기 위하여 링크의 전송속도 (BW)마다의 STP cost를 지정해두었다. (아래서 보다시피 BW 속도가 계속 증가하면서 STP cost에도 변화를 준다.)

 

 

Spanning Tree Protocol (STP)- What It Is and How It Works? 2023 (nwkings.com)

 

 

 

 

 

이제 STP 알고리즘에 대해 알아보자

 

STP의 기본 룰은 다음과 같다.

 

  1. 네트워크 하나 당 하나의 루트 브리지 (Root Bridge)를 갖는다.
  2. 루트 브리지가 아닌 나머지 모든 브리지(Non Root Bridge)는 무조건 하나씩의 루트 포트(Root Port)를 갖는다.
  3. 세그먼트당 하나씩의 Designated Port를 갖는다.

 

 

 

한 네트워크에 위처럼 3대의 스위치가 있다고 하자. 이때 각 스위치는 자신의 Bridge ID; BID를 갖는다. BID의 맨 처음 옥텟은 Bridge Priority이고, 나머지 옥텟은 장비마다의 고유 주소인 MAC address이다. Bridge Priority의 디폴트 값은 32768인데, 위 예제에서는 32769를 사용했다. 신경쓰지 않겠다.

 

 

 

 

이제 대장 스위치 Root Bridge를 뽑는 과정에 대해 살펴보자.

 

  1. SW1,2,3이 전부 부팅되었다. 그러면 1,2,3은 서로 BPDU를 주고받는다.
  2. 스위치가 맨 처음 부팅되고 나서 전송하는 BPDU의 Sender BID와 Root BID에 자신의 BID를 넣는다. (아직 아무에게도 BPDU를 받지 못했으므로 네트워크에 자기 혼자만 있다고 생각한다. 그럼 당연히 자기가 대장임. Sender BID는 자신이 Sender이니까 당연히 자신의 BID를 넣는다.)
  3. BPDU를 다 교환한 스위치들은 누구의 BID가 가장 작은값인지 확인한다. → 이때 SW1이 가장 작은 BID를 가졌으므로 SW1을 Root Bridge로 선출!

 

→ 걍 간단하게 한 네트워크 상에 있는 스위치, 브리지끼리 BPDU를 전부 교환한 후, BID가 가장 작은 장비를 대장으로 선출한다.

→ 만약 SW3을 반드시 Root Bridge로 선출해야한다면? : 3의 Bridge Priority를 1보다 낮추면 된다.

 

 

 

 

 

 

Root Port 선출

Selecting STP root port (study-ccna.com)

 

Root port는 Non Root Bridge가 가진 Port들 중에서 Root path cost가 가장 작은 하나의 Port를 뽑는 과정이다. 이때 Root Path Cost는 해당 port에서 시작하여 Root Bridge까지 가는 데 걸리는 cost를 의미한다.

 

각 스위치들이 fast ethernet (100Mbps)로 연결되어 있다면 각 Path cost는 전부 19가 된다.

 

1. Non Root Bridge 2,3의 왼쪽 port들에서 Root Bridge 1로 향하는 cost는 각각 19이다.

2. Non Root Bridge 2,3의 오른쪽 port들에서 같은 계산을 하면 각각 19+19 = 38이다.

 

따라서 SW2, SW3 각각 왼쪽 port가 Root port로 지정된다.

 

 

 

 

 

 

Designated Port 선출

Selecting STP designated port (DP) (study-ccna.com)

 

SW1, 2, 3 각각을 이어주는 경로를 segment라고 한다. 하나의 segment는 두 개의 port (양 꼭지점)을 갖는데, 이때 Root path cost를 비교하여 작은 것을 Designated port로 지정한다.

 

"세그먼트당 반드시 하나의 Designated Port를 갖는다"

 

위 규칙을 기억하면 쉽다.

 

  1. Root Bridge (SW1)의 두 port는 Root path cost가 0이다. → Root Bridge의 port는 반드시 Designated port
  2. SW2, SW3을 잇는 segment의 두 port를 비교해본다. 이때 SW3의 오른쪽 port → Root는 cost 4이고, SW2는 cost 19이므로 SW3의 오른쪽 port가 designated port로 선정된다.

 

 

 

 

 

만약 SW2 → Root / SW3 → Root 두 경로의 cost가 같은 경우는? 다음 step에 따라 결정한다.

  1. 누가 더 작은 Root BID를 가졌는가? → 이 경우 서로 같은 Root를 가진다.
  2. 루트 브리지까지의 Path Cost 값은 누가 더 작은가? → Path cost가 같다고 가정했다.
  3. 누구의 BID (Sender BID)가 더 낮은가? → SW2, SW3의 BID를 비교하여 작은것으로 결정한다. 끝.
  4. 누구의 포트 ID가 더 낮은가?

 

 

 

❗진짜 심플하게 이해하면 : 네트워크의 Looping을 막기 위해 어느 경로 하나를 끊어줘야 하는데, cost가 가장 큰 것을 끊어서 최대한 성능을 확보하는 것이 STP이다.

 

 


 

스패닝 트리 프로토콜 STP - 5가지 상태변화

 

 

 

브리지, 스위치는 STP를 수행하기 위해 다음과 같은 5가지 상태를 통해 동작한다.

 

 

  • Disabled : Port가 고장났거나 네트워크 관리자가 port를 일부러 shut down 시켜놓은 상태.
    • 데이터 전송 : 아직 불가
    • MAC address : 아직 학습 불가
    • BPDU : 가능~

 

 

  • Blocking : 스위치를 부팅하거나 Disabled 상태인 port를 관리자가 다시 복구시켜 놓으면 port는 blocking 상태가 된다. 이때 스위치끼리 BPDU를 교환할 수 있으며, 앞에서 배운 Root bridge 뽑고 root port 뽑고... STP 과정이 전부 blocking 단계에서 수행된다.
    • 데이터 전송 : 아직 불가
    • MAC address : 아직 학습 불가
    • BPDU : 가능~

 

 

  • Listening : Blocking 상태에 있던 스위치의 port가 root port 혹은 designated port로 선정되면 port는 바로 listening 상태가 된다. 이때 새로운 스위치가 접속하거나 스위치의 구성값이 바뀌면 port가 Non designated port로 변할 수도 있는데, 그러면 다시 blocking 상태로 들어간다. 즉, 환경이 변화함에 따라서 Listening, blocking, listening ... 계속 변할 수 있는 것이다.
    • 데이터 전송 : 아직 불가
    • MAC address : 아직 학습 불가
    • BPDU : 가능~

 

 

  • Learning : Listening 상태에 있던 port가 Forwarding delay (디폴트 15초) 시간 동안 listening 상태를 계속 유지하면 listening 상태에서 learning 상태로 들어간다. 이때 드디어 MAC address를 학습할 수 있다.
    • 데이터 전송 : 아직 불가
    • MAC address : 드디어 배우기 시작함
    • BPDU : 가능~

 

 

  • Forwarding : Learning 상태의 port가 또 Forwarding delay 시간동안 버텨내면 Forwarding 상태로 넘어간다. 스위치는 이제 드디어 데이터 프레임을 전송할 수 있게 된다.
    • 데이터 전송 : 가능
    • MAC address : 계속 학습하며 bridge table 작성
    • BPDU : 가능~

 

 

→ Blocking 상태에 있던 port가 Listening, forwarding 상태를 견뎌내야만 (디폴트로 15초 x2 = 30초) 데이터 프레임을 전송할 수 있게 된다.

 

 

Computer Network 04. 스패닝 트리 알고리즘(Spanning Tree Algorithm) (2) (velog.io)

 

 

👉 Blocking 상태를 견뎌내서 Listening, Learning, Forwarding 상태가 되었다 해도 상태 변화에 따라 언제든 Blocking 상태로 돌아갈 수 있다.

 

👉 네트워크 관리자가 해당 port에 shut down을 때리거나 해당 port가 고장나면 언제든 disabled 상태가 될 수 있다.

 

 

 

 

 


스패닝 트리 프로토콜 STP - 트리 재편성

 

스패닝 트리 재편성을 배우기 위해 몇 가지 용어를 먼저 알아야 한다.

 

  • Hello Time (헬로타임) : 디폴트 2초. Root Bridge가 자신에게 연결된 Bridge들에게 Hello BPDU를 헬로타임마다 전송한다. Non Root Bridge들은 지정된 시간동안 Hello BPDU를 받지 못하면 Root에 문제가 생겼다고 생각하고 트리를 재편성한다.
  • Max age : 디폴트 20초. Root에 연결된 Bridge들이 Max age동안 Hello time을 받지 못하면 Root bridge가 죽었다고 생각하고 새로운 트리를 만들기 시작한다.
  • Forwarding delay : Bridge port가 blocking에서 listening, 그리고 forwarding 상태로 넘어가기 위해 걸리는 시간이다. port는 blocking → listening → forwarding 상태로 진행되기 때문에 blocking → forwarding에 걸리는 시간은 blocking → listening 혹은 listening → forwarding에 걸리는 시간보다 2배가 걸린다.

 

 

 

Computer Network 04. 스패닝 트리 알고리즘(Spanning Tree Algorithm) (2) (velog.io)

 

 

트리 재편성 시나리오를 하나 보도록 한다.

  1. A (Root)와 C를 연결하는 링크가 절단된다. → C는 Max age가 넘도록 A로부터 Hello BPDU를 받지 못한다.
  2. B가 E1 port를 통해 C의 E1 port로 BPDU를 전송한다. (C의 E1은 Blocking 상태인데, blocking 상태에서는 데이터 프레임 전송이 불가능한 것일 뿐 BPDU 교환은 가능하다.)
  3. C는 E0을 버리고 E1을 Root port로 선정한다. → C의 E0은 Blocking 상태가 된다.
  4. C의 E1은 learning, listening, forwarding을 과정을 거친 후 (30초 소요) 데이터 프레임을 전송할 수 있는 상태가 된다.

 

👉 한 링크가 끊어졌을 때 다른 링크로 갈아타기 위해서 Max age (20초) + Forwarding delay x 2 (30초) = 총 50초가 걸리는 것을 알 수 있다.

 

👉 따라서 STP를 개선할 방법으로 이더채널, RSTP(Rapid Spanning Tree Protocol), Port Fast, Up-link Fast, Backbone Fast 등이 소개되고 있다.