스패닝 트리로 가는 첫 번째 관문 두 가지



- 스패닝 트리 알고리즘이란 스위치나 브리지에서 발생하는 루핑(‘뺑뺑이’)을 막아주기 위한 프로토콜이다.

- 스위치나 브리지 구성에서 출발지로부터 목적지까지의 경로가 두 개 이상 존재할 때 한 개의 경로만을 남겨 두고 나머지는 모두 끊어 두었다가 사용하던 경로에 문제가 발생하면 그때 끊어 두었던 경로를 하나씩 살린다.

- 스패닝 트리 프로토콜은 첫 번째로 브리지 ID(Bridge ID)있고, 두 번째는 Path Cost가 있다.


브리지 ID (Bridge ID)

- 브리지 ID 브리지나 스위치들이 통신할 때 서로를 확인하기 위해 하나씩 가지고 있는 번호이다.

 

<------------------- 8바이트(64비트) ------------------>

Bridge Priority

맥 어드레스(MAC Address)

<-- 2바이트(16비트) --><-------- 6바이트(48비트)--------->

 

- 브리지 ID는 16비트의 브리지 우선 순위(Bridge Priority)48비트의 맥 어드레스로 만들어진다. 맨 앞의 ‘Bridge Priority'가 오고, 그 뒤에 바로 ’MAC Address'가 오는 것이 바로 Bridge ID이다.

- 브리지 우선순위(Bridge Priority)16비트로 만들어지기 때문에 올 수 있는 수는 0부터 216-1까지가 된다. 따라서 Bridge Priority에 올 수 있는 수는 0~65535까지가 된다.

- Bridge Priority 뒤에 오는 맥 어드레스는 이미 배운 대로 스위치에 고정되어 있는 값이다. 즉 자신의 고유 맥 어드레스가 Bridge Priority 뒤에 붙게 된다.

- Bridge ID는 스패닝 트리 프로토콜을 수행할 때 아주 중요한 값으로 사용된다.



Path Cost

- Path Cost Path=, Cost=비용이므로 길을 가는데 드는 비용정도로 이해하면 된다.

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

- 원래 스패닝 프로토콜을 정의하고 있는 IEEE 802.1D에서는 이 Cost 값을 계산할 때 1000Mbps를 두 장비 사이의 링크 대역폭으로 나눈 값을 사용했다(예:10Mps = 연결, 장비사이의 링크 대역폭 = 1000Mbps 나눈값 1000/10 = 100)

- 하지만 다양한 속도가 나오면서 그동안 사용해 오던 계산법에는 소수점이 나오는 문제가 생겼다. 그래서 IEEE에서는 소수점이 나오지 않도록 하기 위해 각 속도마다 Path Cost값을 정의하게 되었다.


Path Cost 정의값


Bandwidth(대역폭)

STP Cost(Path Cost)

4 Mbps

250

10 Mbps

100

16 Mbps

62

45 Mbps

39

100 Mbps

19

155 Mbps

14

622 Mbps

6

1 Gbps

4

10 Gbps

2



※ 후니의 Cisco 네트워킹 캡처 자료


스위치 A와 스위치 B10메가로 연결되있다. 스위치 B에서 스위치 A로 가는 Path Cost값은 100이 된다.

스위치 A와 스위치 C100메가로 연결되어 있다. 스위치 C에서 스위치 A로 가는 Path Cost19가 된다.

스위치 D는 스위치 A로 가는 Path Cost 스위치 D에서 스위치 C로 가는 Path Cost 19와 다시 스위치 C에서 스위치 A로 가는 Path Cost 19를 더한 값인 38이 된다.



요약 정리


- Bridge ID는 모든 브리지나 스위치들이 꼭 하나씩 가지고 있는 ID로 스패닝 트리 계산에서 사용된다. 전체 바이트 8바이트(64비트) 이루어져 있고 앞에 2바이트(16비트)Birdge Priority, 그리고 뒤에 6바이트(48비트)는 맥 어드레스로 구성된다.

- Path Cost는 한 스위치에서 다른 스위치로 가는데 드는 비용으로 Path Cost속도가 빠를수록 값이 작다. 예전에는 1000을 자기 속도로 나눈 값을 썼지만 다양한 속도들이 나오면서 소수점 값이 나오게 되었고, 이를 막기 위해 IEEE는 정수값으로 Path Cost값을 지정했다.



스패닝 트리를 잘하려면 세 가지만 기억하세요!


스패닝 트리 프로토콜의 기본 세 가지

첫째. 네트워크당 하나의 루트 브리지(Root Bridge)를 갖는다.

- 첫 번째로 네트워크당 하나의 루트 브리지를 갖는다. 여기서 네트워크는 스위치나 브리지로 구성된 하나의 네트워크이다.

- 라우터에 의해 나누어지는 브로드캐스트 도메인이 하나의 네트워크로 생각하면 된다.

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

 

둘째. 루트 브리지가 아닌 나머지 모든 브리지(Non Root Bridge)는 무조껀 하나씩의 루트 포트(Root Port)를 갖는다.

- 두 번째로 루트 브리지가 아닌 나머지 모든 브리지를 Non Root Bridge라고 하는데 이 Non Root Bridge당 하나씩의 루트 포트(Root Port)를 가져야 한다.

- 루트 포트란 루트 브리지에 가장 빠르게 갈 수 있는 포트를 뜻한다.

- 네트워크당 하나씩의 루트 브리지가 있으므로 루트 브리지를 제외한 나머지 모든 브리지는 자동으로 Non Root Bridge가 된다.

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

 

셋째. 세그먼트(Segment)당 하나씩의 데지그네이티드 포트(Designated Port)를 갖는다.

- 세 번째로 세그먼트당 하나씩의 Designated Port(‘지정포트정도로 해석된다)를 갖는다. 세그먼트란 쉽게 생각해 브리지 또는 스위치 간에 서로 연결된 링크로 생각하면 된다. 브리지나 스위치가 서로 연결되어 있을 때 이 세그먼트에서 반드시 한 포트는 Designated Port로 선출되어야 한다.



스위치 A, 스위치 B, 스위치 C로 이루어진 스위치 네트워크가 있다.


※ 후니의 Cisco 네트워킹 캡처 자료


- 첫 번째 규칙 네트워크당 하나의 루트 브리지를 지정한다.

  •  여기서 스위치 A라는 스위치가 루트 브리지로 선정된다.

- 두 번째 규칙 나머지 모든 브리지 Non Root Bridge들은 루트 브리지쪽에 가장 가까운 루트 포트를 하나씩 선정한다.

  •  그림에서 Non Root Bridge는 스위치 B와 스위치 C이기 때문에 각각의 스위치에서 하나씩의 루트 포트(Root Port)를 선정

- 세 번째 규칙 세그먼트는 브리지 또는 스위치간의 연결 링크로 세그먼트 1에서 스위치 AE0 포트와 스위치 BE0 포트 중에서 하나는 데그지네이티드 포트로 선정한다.

- 스패닝 트리 프로토콜은 세 가지 규칙을 적용해서 어느 쪽 링크를 살려두고 어느 쪽 링크를 끊을지 결정하는 과정이다.

 

요약 정리

첫째. 네트워크당 하나의 루트 브리지를 선정한다.

둘째. Non Root Bridge하나의 루트 포트를 선정한다.

셋째. 세그먼트당 하나의 데지그네이티드 포트(지정포트)를 선정한다.



스위치에서 루트 브리지 뽑기


- 3대의 스위치는 그림과 같이 서로 연결되어 있다.

- 3대의 스위치는 BID(Bridge ID)를 갖는다.


※ 후니의 Cisco 네트워킹 캡처 자료


루트 브리지(Root Bridge)를 뽑는 과정


- 루트 브리지를 뽑는 과정은 무조건 낮은 BID를 갖는 스위치가 된다.

우선 스위치 B와 스위치 C 두 대의 스위치가 부팅(전원이 켜지고 스위치 작동 시작을 의미)을 시작했다.

스위치 B와 스위치 C는 서로 BPDU(Bridge Protocol Date Unit)를 주고받는다.

브리지가 맨 처음 부팅하고 나서 내보내는 BPDU에는 Sender BID 정보는 물론 자기 자신의 BID를 넣게 된다. 루트 브리지의 BID 역시 자기 자신의 BID를 넣게 된다. 왜냐면 이 브리지는 이제 막 부팅이 끝나 다른 BPDU를 한 번도 받지 못했기 때문이다. 즉 네트워크에 자기 혼자 있다고 생각하는 것이다.

스위치 B와 스위치 C루트 브리지 BID를 자기 자신의 BID로 세팅해서 BPDU를 서로 주고받는다. 이때 스위치 B와 스위치 C는 각자의 BID를 루트 브리지를 세팅해서 BPDU를 보낸다.


 스위치 B의 상황

스위치 BBPDU를 보내고 난 후 스위치 C로부터 BPDU가 도착했다. 여기에는 루트 브리지 BID32768.3333.3333.3333으로 되있다. 그럼 스위치 B는 자신의 정보, 즉 루트 브리지의 BID32768.2222.2222.2222라는 정보와 방금 스위치 C로부터 받은 정보를 비교한다. 이때 낮은 32768.2222.2222.2222BID가 루트 브리지로 된다. 스위치 B는 방금 스위치 C에서 받은 BPDU를 무시해 버린다.


 스위치 C의 상황

스위치 C 역시 제일 처음 부팅하고 나서 자신의 BID를 루트 브리지 BID라고 해서 세팅한 BPDU를 내보내고 얼마 되지 않아 스위치 B로부터 BPDU를 받았다. BPDU에는 루트 브리지 BID32768.2222.2222.2222로 되어 있다. 이 값과 자신이 방금 보낸 BPDU에 있는 루트 브리지 ID 32768.3333.3333.3333을 비교해 보니 방금 스위치 B로부터 받은 BPDU에 더 높은 루트 브리지 ID가 있었다. 이제 스위치 C는 자신의 BPDU에 있는 루트 브리지 BID를 스위치 BBID로 바꾸어 다른 곳으로 전송하게 된다.


 스위치 A의 상황

스위치 A는 다른 스위치와 마찬가지로 맨 처음 부팅했을 때는 누가 루트 브리지인지 알지 못한다. 아직 BPDU를 받지 못했기 때문이다. 스위치 A는 자신의 BPDU에 루트 브리지 BID를 자기 BID32768.1111.1111.1111로 실어서 양쪽의 스위치 B와 스위치 C에게 보낸다. 이때 스위치 B와 스위치 C쪽에서 보낸 BPDU에는 스위치 B의 루트 브리지 BID32768.2222.2222.2222 이 들어있다. 이때 둘 중 낮은 32768.1111.1111.1111BID로 갖는 스위치 A가 루트 브리지가 된다.

 

요약


- BID가 가장 낮은 값을 가지고 있는 브리지가 루트 브리지가 된다.

- 만약 스위치 C를 꼭 루트 브리지로 만들고 싶다면 스위치 CBID를 스위치 ABID보다 낮은 값으로 만들면 된다.

  • Bridge Priority 값이 디폴트 값인 32768이었지만 이 값을 만약 작은 수로 만든다면 그 스위치가 가장 낮은 BID를 가질 수 있다. 스위치 CBridge Priority100으로 바꾼다면 BID100.3333.3333.3333이 된다. 이때 루트 브리지의 BID32768.1111.1111.1111보다 낮은 수가 되어 스위치 C가 루트 브리지가 된다.

- 시스코 스위치 Catalyst 2950에서 브리지 Priority 값을 변경하는 명령

 SW-3 (config) #spanning-tree vlan 1 priority 100



졸병 브리지(Non Root Bridge)의 루트 포트 선출기


- 루트 브리지의 선출이 끝나면 바로 스위치들의 루트 포트 선출이 시작된다.

- 모든 Non Root Bridge는 반드시 한 개의 루트 포트(Root Port)를 갖는다라는 규칙이 적용된다.

- 루트 포트는 루트 브리지에 가장 가까이 있는 포트를 말한다.

- 가장 가까이 있다는 것은 Path Cost가 가장 적게 드는 포트가 가장 가까이 있다는 걸 말한다.


※ 후니의 Cisco 네트워킹 캡처 자료


- 스위치 B와 스위치 C에서 루트 포트를 뽑으려면 우선 Root Path Cost를 알아야 한다.

- Root Path Cost루트 브리지까지의 Path Cost라고 생각하면 된다.

- 따라서 맨 처음 루트 브리지 스위치 A를 출발할 때의 Root Path Cost0이다.

 

그림 해석

- 각 스위치들은 패스트 이더넷(100Mbps)으로 연결되어 있다고 가정한다면 이 경우 Path Cost19가 된다. 따라서 스위치 BE0 포트에서는 Root Cost 값은 ‘0+19=19’가 된다. 이 값은 스위치 BE1 포트로 전달되고 다시 아래쪽 링크를 통해 스위치 CE1 포트 쪽으로 전달된다.

- 스위치 B와 스위치 C간에도 역시 100메가 통신을 하고 있다고 가정했기 때문에 스위치 CE1 포트에서 Root Path Cost 값은 ‘0+19+19=38’이 된다. 마찬가지로 스위치 CE0 포트의 Root Path Cost 값은 19가 된다.

- 이제 루트 포트를 선정할 차례이다. 지금까지 계산한 Root Path Cost 값은 낮은 스위치 BE0 포트와 스위치 CE0 포트가 루트 포트로 선정되었다.

- 이렇게 모든 Non Root Bridge는 반드시 한 개의 루트 포트(Root Port)를 갖는다가 해결되었다.



스패닝 트리의 마지막 단계 데지그네이티드 포트(Designated Port) 뽑기


※ 후니의 Cisco 네트워킹 캡처 자료


- 데지그네이티드 포트를 뽑는 일은 스패닝 트리의 세 번째 단계로 가장 중요한 단계이다.

- 데지그네이티드 포트를 뽑아야 스패닝 트리에서 어떤 포트를 풀어주고 어떤 포트는 막을지가 결정되기 때문이다.

- 스패닝 트리 세 번째 규칙 세그먼트당 하나씩의 데지그네이티드 포트를 갖는다 즉 브리지 네트워크에서 브리지와 브리지로 연결된(스위치와 스위치로 연결된 것 포함) 세그먼트당 각각 한 개의 데지그네이티드 포트를 뽑아야 한다는 것이다.

- 그럼 무엇으로 데지그네이티드 포트를 뽑을까? 루트 브리지까지의 Path Cost, 즉 세그먼트상에서 Root Path Cost를 서로 비교해서 더 작은 Root Path Cost를 가진 포트가 데지그네이티드 포트로 선출된다.


※ 후니의 Cisco 네트워킹 캡처 자료


위의 그림에서는 이미 루트 브리지와 루트 포트는 찾았다.(R로 표시된 것이 루트 포트) 마지막으로 데지그네이티드 포트를 찾기 위해 각 포트별로 Root Path Cost를 구했다.

먼저 세그먼트 1을 보면 스위치 AE0와 스위치 BE0100Mbps로 연결되어 있다. 이때 스위치 AE0는 자기가 루트 브리지이기 때문에 당연히 Root Path Cost0이 된다. 또한 스위치 BE0 포트는 100Mbps로 루트 브리지와 연결되어 있기 때문에 19가 된다. 따라서 세그먼트 1에서는 스위치 AE0 포트가 데지그네이티드 포트로 선출됬다.

마찬가지로 계산해보면 세그먼트 2에서 역시 스위치 AE1 포트가 데지그네이티드 포트로 선정됬다.

이 결과를 보면 루트 브리지의 모든 포트들은 언제나 데지그네이티드 포트로 선정된다는 사실을 알 수 있다.

세그먼트 3에서는 서로 연결된 두 포트의 Root Path Cost가 같다. 이렇게 동점이 생겼을 땐 STP에서의 우선순위를 따른다.

 

1단계: 누가 더 작은 BID를 가졌는가?

- 여기서는 스위치 B나 스위치 C 둘 다 똑같은 루트 BID를 갖고 있기 때문에 우선순위를 가릴 수 없다. 두 스위치 모두 32768.1111.1111.1111이라는 똑같은 루트 BID를 가졌기 때문이다.

 

2단계: 루트 브리지까지의 Path Cost 값은 누가 더 작은가?

- 여기서도 마찬가지로 둘다 Root Path Cost 값이 같기 때문에 우선순위를 가릴수 없다.

 

3단계: 누구의 BID(Sender BID)가 더 낮은가?

- 여기서는 Sender BIDBPDU에 스패닝 트리 정보를 실어 보낼 때 발신자의 주소를 넣은 것과 같다. 즉 자기 자신의 BID를 말하는 것이다. 따라서 스위치 BSender BID32768.2222.2222.2222이고, 스위치 CSender BID32768.3333.3333.3333이기 때문에 우선순위는 스위치 B가 높게 된다. 스위치 BE1포트가 결국 데지그네이티드 포트로 선정된다.

 

4단계: 누구의 포트 ID가 더 낮은가?

- 만약 위의 3단계에서도 우선순위를 가리지 못했다면 마지막 4단계로 포트 ID까지 비교해 판단을 내리게 된다.



※ 후니의 Cisco 네트워킹 캡처 자료


- 이렇게 마지막으로 모든 포트 선정이 끝났다 여기서 ND‘Non Designated Port’를 말한다. 즉 루트 포트나 데지그네이티드 포트가 아닌 나머지 포트를 말한다.



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


- 스패닝 트리 프로토콜을 구현해 나가는 과정에서 모든 스위치나 브리지의 포트들은 언제나 5가지 상태가 변한다.

 

Disabled : 이 상태는 포트가 고장나서 사용할 수 없거나 네트워크 관리자가 포트를 일부러 ShutDown시켜 놓은 상태.

  • 데이터 전송? 불가능
  • 맥 어드레스를 배울 수 있는가? 불가능
  • BPDU를 주고받는가? 불가능

Blocking : 스위치를 맨 처음 켜거나 Disabled되어 있는 포트를 관리자가 다시 살렸을 때 그 포트는 블로킹 상태로 들어간다. 데이터 전송은 되지 않고 오직 BPDU만 주고받을 수 있다.

  • 데이터 전송? 불가능
  • 맥 어드레스를 배울 수 있는가? 불가능
  • BPDU를 주고받는가? 가능 

Listening : 블로킹 상태에서 있던 스위치 포트가 루트 포트나 데지그네이티드 포트로 선정되면 포트는 바로 리스닝 상태로 넘어간다. 리스닝 상태에 있던 포트도 네트워크에 새로운 스위치가 접속했거나 브리지나 스위치의 구성값들이 바뀌면 루트 포트나 데지그네이티드 포트에서 Non Designated 포트로 상황이 변할 수도 있다. 그렇게 되면 다시 블로킹 상태로 돌아가게 된다.

  • 데이터 전송? 불가능
  • 맥 어드레스를 배울 수 있는가? 불가능
  • BPDU를 주고받는가? 가능 

Learning : 리스닝 상태에 있던 스위치 포트가 포워딩 딜레이(Fowarding Delay) 디폴트 시간인 15초동안 그 상태를 계속 유지하면 리스닝 상태는 러닝 상태로 넘어간다. 러닝 상태에서 비로소 맥 어드레스를 배워 맥 어드레스 테이블을 만든다.

  • 데이터 전송? 불가능
  • 맥 어드레스를 배울 수 있는가? 가능
  • BPDU를 주고받는가? 가능 

Fowarding : 스위치 포트가 러닝 상태에서 다른 상태로 넘어가지 않고(루트 포트나 데지그네이티드 포트에서 Non Designated 포트로 바뀌지 않았다는 뜻) 다시 포워딩 딜레이(Fowarding Delay) 디폴트 시간인 15초 동안 그 상태를 계속 유지하면 러닝 상태에서 포워딩 상태로 넘어간다. 포워딩 상태가 되어야 스위치 포트는 데이터 프레임을 주고 받을 수 있게 된다. 즉 블로킹 상태에 있던 포트가 리스닝과 러닝을 거쳐 포워딩 상태로 오려면 디폴트 포워딩 딜레이인 15초가 두 번 지난 30초가 소요된다.

  • 데이터 전송? 가능
  • 맥 어드레스를 배울 수 있는가? 가능
  • BPDU를 주고받는가? 가능 

- 스위치나 브리지는 링크를 막기도 하고 열기도 하면서 스패닝 트리를 만든다. 스패닝 프로토콜이라는 것이 사실은 다른 곳으로 가는 경로가 여러 개일 때 한 개의 경로만을 남겨두고 다 끊었다가 그 경로에 문제가 생겼을 때 경로를 하나하나 살리는 것으로 포트의 변화를 통해서 일어나게 된다.


※ 후니의 Cisco 네트워킹 캡처 자료


그림 해석


- 리스닝, 러닝, 포워딩 상태에서 다시 블로킹 상태로 화살표가 있는 것은 리스닝, 러닝, 포워딩 상태에 있던 포트도 루트 포트나 데지그네이티드 포트에서 탈락되면 바로 블로킹 상태로 넘어갈 수 있다는 뜻이다.

- 모든 포트에서 Disable 상태쪽으로 화살표가 있는 것포트가 어떤 상태에 있든지 사용자에 의한 Shut Down 명령이나 포트의 고장으로 인해 언제라도 Disable 상태로 변할 수 있다는 뜻이다.


'Network books > 후니의 Cisco 네트워킹' 카테고리의 다른 글

5-1. 스패닝 트리 활용  (0) 2018.11.10
4-3. 서브넷 마스크  (0) 2018.10.30
4-2. Looping(뺑뺑이)  (0) 2018.10.29
4-1. 스위치/브리지 기능  (0) 2018.10.29
4-0. 스위치의 시작과 브리지  (0) 2018.10.29
복사했습니다!