STP(Spanning Tree Protocol) 개념 및 동작, STP 상태, BPDU 프레임

반응형

1. STP(Spanning Tree Protocol) 개념

  • STP(Spanning Tree Protocol)이란?
    • 이더넷 프레임을 주고 받는 2계층 프로토콜로, *루프(Loop)*가 발생하는 구조에서 스위치의 특정 포트를 논리적으로 차단(Block)시켜 루프가 발생하지 않도록 한다. 동작 중인 스위치의 포트가 Down이 되면, 차단(Block) 상태였던 포트를 다시 전송 상태로 바꾸어 통신이 끊기지 않도록 한다.
    • 루프를 방지하기 위한 경로를 구성하는 프레임을 *BPDU(Bridge Protocol Data Unit)*라 한다.
    • 루프가 발생할 수 밖에 없는 구조에서는 반드시 STP를 활성화 시켜야 함

 

이렇게만 써놓으면 STP를 처음 접하는 사람들에겐 다소 어렵게 느껴지고 도대체 무슨말인지 전혀 와닿지 않을 것이라 생각한다. 그래서 STP가 등장하게 된 배경을 이야기하면서 왜 STP를 사용하는지, 어떤식으로 동작하는지 구체적으로 작성해보겠다.

 

2. STP를 사용하는 이유와 배경

먼저 위에서 언급한 루프(보통 룹이라고 칭함)에 대해 알아보자.

  • 룹 / 루프(Loop)
    • loop 현상은 아래의 그림처럼 원, 사각형, 삼각형 등의 닫힌 회로의 모양으로 네트워크를 구성했을 때 이더넷 프레임이 해당 네트워크 상을 끊임없이 도는 현상을 말한다. 보통 스위치 이중화 구성을 위해 이러한 네트워크 구조가 설계되고, 스위치 특성상 룹이 발생하게 된다.
    • 위와 같은 구조에서 루프를 해결하기 위한 것이 STP(Spanning Tree Protocol)이다.
    • L3 계층에서 사용하는 IP 패킷 헤더에는 TTL(Time to Live) Field가 있어 몇번 돌다보면 라우터나 스위치가 패킷을 알아서 폐기하기 때문에 loop이 발생하지 않는다.

 

그렇다면 스위치의 이중화 구조는 어떤식으로 하게되고, 어떻게 해서 룹이 도는 걸까? 룹 현상은 아래와 같은 상황일 때 발생하게 된다.

    • 브로드캐스트 폭풍
    • MAC Flapping
    • 유니캐스트 프레임 복제

보통 스위치와 스위치, 스위치와 사용자 간 사이의 장애가 발생했을 때 서비스를 지속적으로 제공하기 위해 위 그림처럼 이중화 링크를 구성할 수 있다.

  • VPC4의 입장에서 SW4로 가는 경로는 SW1-SW3-SW4와 SW1-SW2-SW4 이렇게 두 가지 방법이 있을 것이다.
  • VPC4 -> VPC5로 ping을 때렸다고 가정하면, SW1의 gi0/1번 gi0/2번 포트로 패킷이 나가게 된다.
  • 그럼 SW2와 SW3은 각각 자신이 수신한 포트를 제외하고 나머지 포트로 수신한 패킷을 또 플러딩한다.
  • 이러한 현상이 반복되면 각 SW는 브로드캐스트 패킷 처리로 인해 cpu 부하가 증가하게 된다.
  • loop을 임의로 발생시켜보거나, 실제 운영 상황에서 loop이 도는 경우 스위치가 먹통이되고, 사용자는 네트워크 사용을 할 수 없게된다. (포트 셧다운을 통해 해결 가능)
  • 위 과정 중 브로드캐스트 패킷이 끊임없이 돌아다니는 현상을 1) 브로드캐스트 폭풍이라고 한다.
    • 1) 호스트가 전송하는 브로드캐스트 트래픽을 스위치가 이중화 링크를 통해 지속적으로 플러딩하면서 네트워크 상의 기능이 현저히 떨어지는 현상

  • 스위치는 수신한 프레임의 출발지 MAC 주소가 자신의 MAC 테이블에 학습되지 않았다면, 출발지 MAC 주소와 프레임을 수신한 포트 번호를 MAC 테이블에 등록한다. 만약, 특정 포트로 MAC 주소가 학습되어 에이징 타이머가 동작 중일 때, 출발지 MAC 주소가 동일한 프레임을 다른 포트로 학습된다면, MAC주소가 충돌 되는 MAC 플래핑 현상이 발생한다. 그렇기 때문에 MAC 주소 학습에 대한 일관성이 사라지며, MAC 주소 테이블을 불안정하게 운영하게 된다.
  • Unknown Unicast 프레임을 수신하면, 모든 스위치 포트로 프레임을 플러딩 하기 때문에 연결된 스위치 포트 개수만큼 유니캐스트 프레임을 복제한다. 이때, 호스트 입장에서도 동일한 유니캐스트 프레임을 수신하게 되는 이더넷 프레임 루프가 발생한다.

 

3. STP 동작 과정

  • Root Bridge 선출
    • Bridge ID 값이 가장 낮은 것이 Root Bridge로 선출되며, 만약 우선 순위가 동일하면 MAC주소 값이 가장 낮은 스위치가 Root Bridge로 선출된다.
    • Bridge ID는 2Byte Priority(우선순위) + 6Byte MAC Address로 구성됨 / Priority 범위는 0~65535 / 값이 낮을수록 우선 순위가 높음
  • 루트 포트(RP : Root Port)와 지정 포트(DP : Designated Port) 선정
    • 루트 브리지가 선출되면, 루트 브리지에서 설정 BPDU를 생성하여 전송한다. 이때, BPDU와 데이터를 송신하는 포트가 *지정 포트(Designated Port)*로 선정되고, BPDU를 수신하는 포트*루트 포트(Root Port)*로 선정된다. 그렇기 때문에 루트 브리지의 모든 포트는 지정 포트(DP)로 선정되며, 루트 브리지에서 송신하는 BPDU를 가장 작은 Cost 값에서 수신할 수 있는 포트를 루트 포트(RP)로 선정한다.
    • Root Port 선출 - 루트 브리지 이외의 모든 스위치는 BPDU를 수신하는 루트 포트를 한 개 씩 선출한다.
      1. 가장 작은 경로 값을 가지는 포트
      2. 인접 스위치의 Bridge ID가 가장 낮은 포트
      3. 인접 스위치의 Port ID가 가장 낮은 포트
      4. Cost는 Bandwidth 별로 미리 정해 놓은 값으로, 속도가 빠를수록 Cost 값이 낮다.
    • Designated Port 선출
      1. 가장 작은 경로 값을 가지는 포트
      2. 스위치의 브릿지 ID가 가장 낮은 포트
      3. 스위치의 포트 ID가 가장 낮은 포트루트 포트도 지정 포트도 아닌 포트는 대체(블락) 포트가 된다.
  • 대체 포트(Alternate Port)로 선정
    • 루트 포트(Root Port)와 지정 포트(Designated Port)가 아닌 포트를 대체 포트(Alternate Port)로 선정하여 논리적으로 차단(Block) 상태를 유지
    • 차단된 Alternate Port는 BPDU를 제외한 모든 트래픽은 송수신 하지 않음으로써 루프를 방지
    • Root Port에 대한 Alternate Port이다.

4. BPDU

  • 스위치는 BPDU 프레임를 멀티캐스트로 교환하여 스위치들 간에 물리적인 연결 상태와 내부 토폴로지 변경 사항 및 루프의 위치를 결정하여 최종적으로 스위치 포트를 차단한다.
    • 설정 BPDU(Configuration BPDU): 스위치 간 우선 순위를 확인하고 루트 스위치와 루트 포트를 선정하는 데 사용되는 BPDU
    • TCN BPDU(Topology Change Notification BPDU) : 스위치 장애 혹은 스위치 간 링크 장애 발생으로 인해 네트워크에 변화가 생기면 루트 스위치에게 보고하기 위해 사용되는 BPDU
  • 스위치는 Configuration BPDU를 2초 마다 전송하여 Root Switch를 선출하고, 스위치 Port의 역할을 결정하여 해당 BPDU를 인접 스위치로 중계한다.
  • Hello / Forward Delay / Max Age
    • Hello - 스위치가 BPDU를 전송하는 주기. Default 값은 2초이며 1-10초까지 설정 가능
    • Forward Delay - 블락 상태의 포트가 청취 상태, 청취 상태에서 학습 상태로 변화하기까지 걸리는 시간. Default 값은 15초이며 4-30초까지 설정 가능
    • Max Age - BPDU는 생성된 후 일정 시간 이후 사라지게 됨. Default 값은 20초이며 6-40초까지 설정 가능. 스위치 한 대를 지날 때 마다 1초 씩 증가 된다.
  • BPDU 프레임 - Protocol Identifier 프로토콜 아이디이며, 0으로 설정된다
BPDU 프레임 내용
Protocol Identifier 프로토콜 아이디로 0으로 설정된다.
Protocol Version Identifier STP 버전
'0' = IEEE 802.1d original STP
'2' = IEEE 802.1w RSTP
'3' = IEEE 802.1s MST
BPDU Type BPDU 타입
‘0x00’ = Config BPDU
'0x80' = TCN BPDU
'0x02' = 802.1w/s Config BPDU
RSTP 이후 버전에서는 TCN BPDU가 존재하지 않는다
BPDU flags 토폴로지 변화를 알리는 BPDU 플래그
‘0x01’ = TC
‘0x80’ = TCA
Root Identifier 루트 브리지로 선출된 스위치의 브리지 아이디
Root Path Cost 루트 브리지까지의 Cost 값을 의미
포트에 적용된 Bandwidth 별로 값이 정해져 있음
Bridege Identifier 루트 브리지로 가는 경로 직전에 있는 스위치의 브리지 아이디
Port identifier 포트 아이디이며, BPDU를 전송한 해당 스위치의 포트 번호이다.
기본값은 ‘128.포트 번호’를 사용
Message Age 최초 BPDU가 발생한 시점으로부터 얼마의 시간이 지났는지 나타낸다
Max Age - 수신한 BPDU 정보를 보관하는 최대 시간을 의미
- 기본값은 20초
- 최대 시간과 동일해지면 메시지가 사라진다
Hello Time BPDU를 전송하는 주기를 의미(기본값 2초)
Forward Delay - 스위치 포트가 포워딩까지 전환되는데 걸리는 시간을 의미
- STP Listen 단계와 Learning 단계에서 사용된다. (기본값 15초)

 

5. STP 상태(Status)

차단(BLK, Blocking)

  • 데이터 프레임을 송수신하지 않고, BPDU만 수신한다.
  • 차단 상태는 대기 시간 없이 바로 차단 상태로 변경된다. (루프 방지를 위해)
  • MAC 주소 학습 X
  • 데이터 전송 X

청취(LIS, Listening)

  • 스위치가 켜지고 다른 스위치와 연결되어 포트가 활성화되면 가장 처음 진입하는 단계
  • 15초가 지나면 학습(Learning) 상태로 변하는데, 이 시간을 Forward Delay(전송 지연) 단계라고 한다.
  • BPDU 송/수신 O
  • MAC 주소 학습 X
  • 데이터 전송 X

학습(LRN, Learning)

  • 청취 상태에서 전송 상태로 가기 전 거치는 단계
  • 15초의 학습 상태 후, 전송 상태로 변경된다.
  • BPDU 송/수신 O
  • MAC 주소 학습 O
  • 데이터 전송 X

전송(FRW, Forwarding)

  • 데이터 전송이 가능한 단계. 루트 포트/지정 포트의 역할을 할 수 있는 단계
  • BPDU 송/수신 O
  • MAC 주소 학습 O
  • 데이터 전송 O

비활성(Disabled)

  • 포트가 고장난 상태 혹은 포트의 Shutdown 상태, 케이블이 연결돼있지 않은 상태

 

 


 

다음 편에선 STP 종류와 함께 EVE-NG를 통한 STP 실습 포스팅을 올려보겠습니다.

읽어주셔서 감사합니다~!

반응형