Limetime's TimeLine
article thumbnail
반응형

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

  • 스위치(STP 알고리즘 사용!)나 브릿지에서 발생하는 루핑을 막아주는 프로토콜이다.
  • 스위치나 브릿지 구성에서 출발지부터 목적지까지의 경로가 2개 이상 존재할 때, 1개의 경로만 남겨두고 나머지 모두 끊었다가 사용하던 경로에 문제 발생 시, 끊어 두었던 경로를 하나씩 살린다.

 

브릿지 우선순위 (Bridge Priority)

  • 16비트, 0 ~ 2^16 - 1 (0 ~ 65535)
  • 디폴트 값 : 32768
  • 낮은 값이 더 높은 우선순위!

 

Path Cost

  • 브릿지가 얼마나 가까이, 얼마나 빠른 링크로 되어 있는지 알아내기 위한 값
  • 링크의 속도(대역폭)가 빠를 수록 더 작은 값
  • IEEE 802.10(STP 정의 표준)에서 Path Cost 구하는 공식
1,000Mbps / (두 장비 사이의 링크 대역폭)
ex) 100Mbps로 연결된 링크 => 1,000 / 100 => 10 (Path Cost)
  • 위 공식의 문제 <기가 비트(1,000Mbps)와 ATM의 출현)
    • 기가 비트의 Path Cost : 1,000 / 1,000 = 1
    • 10기가 비트의 Path Cost : 1,000 / 10,000 = 0.1
    • ATM(OC-48, 2.4Gbps)의 Path Cost : 1,000 / 2,400 = 0.42
    • 해결책! : IEEE에서 각 속도마다 Path Cost를 정의
BandWidth(대역폭) 4Mbps 10Mbps 16Mbps 45Mbps 100Mbps 155Mbps 622Mbps 1Gbps 10Gbps
STP Cost(Path Cost) 250 100 62 39 19 14 6 4 2

 

STP의 3가지 과정

① 네트워크 당 하나의 루트 브릿지를 선정한다.

② Non Root Bridge 당 하나의 루트 포트를 선정한다.

③ 세그먼트 당 하나의 데지그네이티드(Designated, 지정된) 포트를 선정한다.

 

루트 브릿지 (Root Bridge)

  • 스패닝 트리 프로토콜을 수행할 때, 기준 브릿지 (스위치)

Non Root Bridge

  • 루트 브릿지가 아닌 나머지 브릿지
  • Non Root Bridge 당 하나씩의 루트 포트(Root Port)를 가져야 한다.

루트 포트 (Root Port)

  • 루트 브릿지로 가장 빨리갈 수 있는 포트 (= 루트 브릿지와 가장 가까운 포트)

지정 포트 (Designated Port)

  • 세그먼트 당 하나씩의 Designated Port를 가져야 한다. (세그먼트 = 브릿지, 스위치 간 서로 연결된 링크)
  • 즉, 브릿지나 스위치가 서로 연결되어 있을 때, 이 세그먼트에서 반드시 한 포트는 Designated Port로 선출되어야 한다.

 

BPDU (Bridge Protocol Data Unit)

  • Root BID(루트 브릿지의 BID), Root Path Cost(루트 브릿지까지의 경로 값), Sender BID(보내는 브릿지의 BID), Port ID(어떤  포트에서 보냈는지) 등을 담고 있다.
  • 브릿지나 스위치가 부팅하면 각각의 포트로 매 2초마다 BPDU를 내보내면서 서로의 스패닝 트리 정보를 주고 받는다.

 

루트 브릿지 및 데지그네이티드 포트와 루트 선출 단계

① 누가 더 작은 Root BID를 가졌는가?

② 루트 브릿지까지의 Path Cost 값이 누가 더 작은가?

③ 누구의 BID(Sender BID)가 더 낮은가?

④ 누구의 포트 ID가 더 낮은가?

 

Root Bridge 선출하기

<1번 시나리오>

① B와 C는 부팅을 시작하고 서로의 BPDU를 주고 받게된다. 이 때, BPDU에 자신의 BID를 Root BID와 Sender BID에 각각 넣는다. (이제 막 부팅해서 다른 BPDU를 한 번도 못 받았기 때문이다.)

② 각 스위치는 주고받은 BPDU를 뜯어 자신의 BID와 비교한다.

  • B의 상황 : 내 BID 값이 더 작으니까, 내가 Root 브릿지이고 C의 BPDU는 무시
  • C의 상황 : B의 BID 값이 더 작으니까, 내 BPDU의 Root BID를 B의 BID로 바꾸고 B를 Root 브릿지로 인정.

 

<2번 시나리오>

① A가 부팅되는 상황. A는 자신의 BID를 담은 BPDU를 B와 C로 전송 (첫 부팅이기 때문에 Sender BID와 Root BID는 자신의 BID) B와 C도 BPDU를 A로 전송한다.

② BPDU를 받아 Root BID를 비교했을 때.

  • A의 상황 : 내가 BID값이 낮으니 내가 Root 브릿지이고 B와 C의 BPDU 무시
  • B와 C의 상황 : 기존의 Root BID 값보다 A의 BID 값이 작으니 A를 Root BID로 수정하고 Root 브릿지로 인정

∴ 결론 

  • 스위치는 부팅할 때, BPDU를 2초마다 전송하고 그 안의 Root BID, Sender BID는 자기 자신의 BID 값을 넣는다.
  • BID 값을 비교해 낮은 BID를 가진 스위치가 Root 브릿지가 된다.
  • 임의로 Root 브릿지를 지정하려면 Priority 값을 작게 주면 된다.
SW (config)# spanning-tree vlan 1 priority 100
SW # show spanning-tree

 

Non Root Bridge에서 Root Port 선출하기

※ 각 회선은 Fast Ethernet(100Mbps) => Path Cost : 19

① A는 루트 브릿지이다. 때문에 모든 포트의 Root Path Cost는 0이다. 즉, 모두 Root Port

② B와 C의 각 E0 포트는 루트인 A와 Fast Ethernet으로 연결되어 있고, 그 Path Cost는 19이다.

③ B와 C의 각 E1 포트는 서로 Fast Ethernet 으로 연결되어 있고, Root Bridge까지의 거리는 19+19=38이다.

②+③ 결론은 B와 C의 E0 포트가 Root Port로 선출된다.

결론

  • 루트 브릿지의 모든 포트는 Root Path Cost가 0이기 때문에 Root Port
  • Non Root Bridge에는 반드시 한 개의 루트 포트를 가진다.

 

데지그네이티드(Designated) 포트 선출하기

※ 데지그네이티드(Designated) 포트 = 활성 포트

① 세그먼트-1, 2의 A는 Root Bridge이고, E0, E1 포트의 Root Path Cost가 0이기 때문에, 당연히 데지그네이티드 포트는 A의 E0, E1 포트가 된다.

② 세그먼트-3의 B와 C의 각 E1 포트는 Root Path Cost가 19로 동일하므로 Sender BID 비교를 한다. B는 C보다 BID 값이 작기 때문에 B의 E1포트가 데지그네이티드 포트가 된다. C의 E1포트는 Non Designated Port(=Blocking Port)로 지정.

결론

  • 루트 브릿지는 모든 포트가 데지그네이티드 포트가 될 수 있다.
  • 세그먼트 당 한 개의 데지그네이티드 포트를 선출해야 한다.
  • Non Designated Port : Root Port나 Designated Port가 아닌 나머지 포트

 

STP의 5가지 상태변화

Disable

  • 포트가 고장나서 사용불가, 네트워크 관리자에 의한 Shutdown

Blocking

  • 스위치 부팅 시, Shutdown 포트를 활성화 했을 때
  • BPDU 송ㆍ수신 (루트 브릿지, 루트 포트, 데지그네이티드 포트, Non-Designated 포트 선출)

Listening

  • 루트 포트나 데지그네이티드 포트로 선정되면 리스닝 상태가 된다.
  • BPDU 송ㆍ수신 (새로운 스위치 접속, 브릿지나 스위치 구성값이 바뀌면 루트 포트나 데지그네이티드 포트에서 Non-Designated 포트로 변할 수 있다.)

Learning

  • 리스닝 상태에서 있던 스위치 포트가 Forwarding Delay 디폴트 시간인 15초 동안 그 상태를 유지하면 러닝 상태로 넘어 간다.
  • BPDU 송ㆍ수신
  • MAC Address 학습 (MAC Address Table 생성)

Forwarding

  • 러닝 상태에서 있던 스위치 포트가 Forwarding Delay 디폴트 시간인 15초 동안 그 상태를 유지(루트 포트나 데지그네이티드 포트에서 Non-Designated 포트로 바뀌지 않았다는 뜻)하면 포워딩 상태로 넘어 간다.
  • 데이터 전송 가능 (데이터 프레임 송ㆍ수신 가능)
  • MAC Address 학습
  • BPDU 송ㆍ수신
  • 블로킹 상태에서 포워딩 상태로 변화하기까지 총 30초 소요.

 

STP 시나리오 1

※ 모든 회선은 100Mbps

① 모든 스위치는 부팅 시, Blocking 상태이며, BPDU를 주고 받는다.

② C의 루트 브릿지 선정 : BID 값이 제일 낮음

③ 루트 포트와 데지그네이티드 포트 선정 : Root Path Cost가 가장 작은 포트는 Root Port가 되고, Root Path Cost가 동일한 경우 BID를 비교하여 데지그네이티드 포트를 선정한다.

선정된 루트포트와 데지그네이티드 포트는 리스닝, 러닝을 거쳐 포워딩 상태가 된다.

④ Non-Designated 포트는 Blocking 상태이며 링크가 끊어진다.

 

STP 시나리오2

※ 100Mbps → 19, 1Gbps → 4

① A의 루트 브릿지 선정 : BID 값이 제일 낮음

② 루트 포트 선정 : Root Path Cost가 가장 작은 포트, 데지그네이티드 포트 선정 : Root Path Cost가 동일한 경우 BID가 가장 작은 포트 → 포워딩 상태

③ Non-Designated 포트는 Blocking 상태

 

스패닝 트리 변화

Hello Time 

  • 루트 브릿지가 얼마 만에 한 번씩 Hello BPDU를 보내는지에 대한 시간
  • 디폴트 타임 : 2초

Max Age

  • 브릿지들이 루트 브릿지로부터 얼마 동안 Hello Packet을 받지 못했을 때, 루트 브릿지가 죽었다고 생각하고 새로운 스패닝 트리를 만들기 시작하는가에 대한 시간
  • 디폴트 타임 : 20초

Forwarding Delay

  • 브릿지 포트가 Blocking 상태에서 Forwarding 상태로 넘어갈 때까지 걸리는 시간
  • 블로킹→리스닝(15초)→러닝(15초)→포워딩
  • Blocking에서 Forwarding으로 넘어갈 때, 걸리는 시간은 Forwarding Delay의 두 배.
  • 디폴트 타임 : 15초

 

① 루트 브릿지 A는 Non Root Bridge인 B와 C에게 Hello BPDU를 2초 마다 보낸다.

  • Non Root Bridge는 받은 Hello BPDU를 자신의 데지그네이티드 포트로 다시 전달한다.

 

② A와 C간 링크 절단! C는 Hello Packet을 Max Age인 20초 동안 못 받을 시 스패닝 트리 변경!

③ B는 평상 시에도 E1으로 Hello BPDU를 뿌리고 있었으므로, C의 E1 포트는 루트 포트로 전환된다. (Blocking일 때, BPDU 송ㆍ수신 가능) Blocking → Forwarding 30초

  • C의 E0 포트는 Blocking(Non-Designated) 상태로 전환된다.

 

결론

  • 한 링크가 끊어졌을 때, STP를 이용해 다른 경로를 살리는데 걸리는 시간 : 50초
  • (Max Age : 20s + Forwarding Delay : 15s + Forwarding Delay : 15s) => Convergence Time
반응형
profile

Limetime's TimeLine

@Limetime

포스팅이 좋았다면 "공감❤️" 또는 "구독👍🏻" 해주세요!