병훈's Blog

스패닝 트리 프로토콜(Spanning Tree Protocol) 본문

Computer/Network

스패닝 트리 프로토콜(Spanning Tree Protocol)

thdqudgns 2023. 12. 7. 11:43

스패닝 트리 프로토콜(Spanning Tree Protocol), STP에 대해서 알아보자.

STP는 브리지나 스위치에서 발생하는 루핑을 막아주기 위한 프로토콜이다.

출발지에서 목적지까지의 경로가 2개 이상 존재 할 때 1개의 경로만을 남겨두고 나머지는 모두 끊었다가,

사용하던 경로에 문제가 생기면 그때 끊어두었던 경로를 하나씩 살린다.

 

STP를 이해하기 위해서는 2가지 개념을 이해해야 한다. 브리지 IDPath Cost다.

브리지 ID란, 브리지나 스위치들이 통신할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호라고 생각하면 된다.

스위치도 ID를 사용하지만, 스위치 ID라고 하지 않고 브리지 ID라고 부른다. 이상하지만 그렇다고 한다.

 

브리지 ID는 2Byte의 Bridge Priority와 6Byte의 MAC Address로 구성되어, 총 8Byte 크기다.

 

 

Bridge Priority는 16bit(2Byte)로 만들어지기 때문에 올 수 있는 수는 0부터 2^16 - 1(65535) 가 된다.

Bridge Priority의 Default값은 중간값인 32768이다.

MAC Address는 스위치에 고정되어 있는 값이다. (대형 스위치의 경우 약간 차이가 난다)

이렇게 만들어진 Bridge ID는 나중에 STP를 수행할 때 아주 중요한 값으로 사용된다.

 

Past Cost는 말 그대로 '길을 가는 데 드는 비용'이다.

네트워크 분야에서 길이란, 장비와 장비가 연결되어 있는 링크를 말한다.

즉 Path Cost란, 브리지가 얼마나 가까이, 그리고 빠른 링크로 연결되어 있는지를 알아내기 위한 값이다.

속도가 빠를수록 Path Cost 비용은 감소한다.

 

원래 STP를 정의하고 있는 IEEE802.1D에서는 이 Cost 값을 계산할 때

1000Mbps를 두 장비 사이의 링크 대역폭으로 나눈 값을 사용했다. (1000 ÷ N)

그러나 Gbps 단위까지 대역폭이 증가하면서 1000/2400 = 0.42 처럼 소수점이 나오는 문제가 발생했다.

그래서 IEEE에서는 소수점이 나오지 않도록 하기 위해 각 속도마다 정수의 Path Cost를 정의했다.

 

새로 정의된 Path Cost

 

만약 출발지와 도착지의 링크가 여러 장비를 거쳐서 연결된다면

각각 링크의 Path Cost를 더하면 된다.

 

Past Cost 계산

 


 

STP는 3가지 기본 동작만 이해하면 아주 단순하다.

 

  • 첫째, 네트워크당 하나의 루트 브리지(Root Bridge)를 갖는다.
  • 둘째, 루트 브리지가 아닌 나머지 모든 브리지(Non Root Bridge)는 무조건 하나씩의 루트 포트(Root Port)를 갖는다.
  • 셋째, 세그먼트(Segment)당 하나씩의 데지그네이티드 포트(Designated Port)를 갖는다.

첫 번째로 여기서 말하는 네트워크는 라우터에 의해 나누어지는 브로드캐스트 도메인이라고 생각하면 된다.

즉 하나의 브로드캐스트 도메인에 하나씩의 루트 브리지가 있는 것이다.

루트 브리지는 대장 브리지다. STP를 수행할 때 기준이 되는 브리지(스위치)다.

 

두 번째, 루트 브리지가 아닌 나머지 모든 브리지를 Non Root Bridge라고 하는데,

이 Non Root Bridge 당 무조건 하나씩의 루트 포트(Root Port)를 갖는다.

루트 포트란, 루트 브리지에 가장 빨리 갈 수 있는 포트를 말한다.

즉 루트 브리지를 제외한 나머지 모든 브리지는 자동으로 Non Root Bridge가 되므로

이 브리지들은 루트 브리지 쪽으로 가장 가까이 있는 루트 포트를 하나씩 지정해 주어야 한다.

 

세 번째, 세그먼트당 하나씩의 Designated Port(우리말로는 지정 포트)를 갖는다.

여기서 세그먼트란, 브리지 또는 스위치 사이에 서로 연결된 링크라고 보면 된다.

즉 브리지나 스위치가 서로 연결되어 있을 때,

세그먼트(링크)에서 반드시 한 포트는 데지그네이티드 포트로 선출되어야 한다.

 

 

그림처럼 스위치 A, B, C로 이루어진 네트워크가 있다고 가정해보자.

 

  • 먼저 스위치 A가 루트 브리지로 선정되었다. (우선 이유는 생각하지 않기로 한다)
  • 나머지 Non Root Bridge는 스위치 B, C이기 때문에 각각의 스위치에서 하나씩의 루트 포트를 선정했다.
    E0 포트가 루트 브리지와 더 가까이 있어서 루트 포트로 선정되었다.
  • 마지막 세번째 규칙을 적용하기 전에, 세그먼트가 무엇인지 보면 브리지 또는 스위치 간의 연결 링크라고 생각하면 된다. 그림에서 세그먼트-1은 스위치 A와 스위치 B 간의 링크가 된다. 이때 각 세그먼트별로 하나씩의 데지그네이티드 포트를 지정해야 한다고 했으므로 세그먼트-1에서 스위치 A의 E0 포트와 스위치 B의 E0 포트 중에서 하나는 데지그네이티드 포트로 선정해야 한다. 누가 데지그네이티드 포트로 선정되는지는 나중에 더 설명하겠다.

결국 STP는 지금 배운 3가지 규칙을 적용해서 어느 링크를 살려두고, 어느 링크를 끊을지 결정하는 과정이다.

기억해둬야 하는 것은 STP에서 루트 포트나 데지그네이티드 포트가 아닌 나머지 모든 포트는 다 막아버린다는 사실이다.

즉 루트 포트와 데지그네이티드 포트를 뽑는 목적은 어떤 포트를 살릴지 결정하기 위한 것이다.

 


 

STP에서 위 동작이 일어날 때, 누가 루트 브리지가 되고, 누가 루트 포트나 데지그네이티드 포트가 될지를 정하려면

어떤 순서가 필요하다. 그래서 다음과 같은 4단계를 통해서 순서를 정하게 된다.

 

  • 1단계: 누가 더 작은 Root BID(루트 브리지 ID)를 가졌는가?
  • 2단계: 루트 브리지까지의 Path Cost 값은 누가 더 작은가?
  • 3단계: 누구의 BID(Sender BID, 보내는 브리지의 ID)가 더 낮은가?
  • 4단계: 누구의 포트 ID가 더 낮은가?

이 4단계는 이후 글에서 예제를 보고 설명하겠다.

우선은 '이런 것이 있다'는 정도로만 알아두자.

 


 

브리지(스위치도 마찬가지)는 스패닝 트리 정보를 자기들끼리 주고받기 위해서 특수한 프레임을 사용한다. 이를 BPDU (Bridge Protocol Data Unit)라고 한다. BPDU에는 Root BID, Root Path Cost, Sender BID, Port ID 정보 등이 실려있다.

 

브리지나 스위치가 부팅을 하면 이들을 각각의 포트로 BPDU를 매 2초마다 내보내면서 서로의 스패닝 트리 정보를 주고받게 된다. 즉 브리지는 이 BPDU를 서로 주고받으면서 누가 루트 브리지이고 어떤 포트가 루트 포트가 될지, 그리고 어떤 포트가 데지그네이티드 포트가 될지를 결정하게 된다. 그러니 BPDU는 STP에서 우체부 아저씨와 같은 아주 중요한 역할을 한다.

 

이 역할에 대해서는 다음 글에서 다루기로 하고, 여기서는 브리지나 스위치가 스패닝 트리 정보를 서로 주고받기 위해서 BPDU란 우체부를 사용한다. 이때 어떤 BPDU가 가장 좋은 BPDU인가를 결정하기 위해 4단계의 순서 정하기를 사용한다고 이해하면 된다.

 


참고: 후니의 쉽게 쓴 Cisco 네트워킹

 

 

728x90
728x90