📌3. 예제
스패닝 트리 알고리즘을 적용하는 예제이다.
스위치 A, B, C는 모두 디폴트 구성이다.
![](https://velog.velcdn.com/images/victoriapasta/post/ee2c35dd-03b6-4b2e-a8e7-f0acb48cdfce/image.PNG)
3.1 루트 브리지 선정
3.1.1 B와 C의 경우
루트 브리지 : 가장 낮은 BID를 가진다.
스위치 B와 C는 서로 BPDU를 주고받는다.
-
브리지가 맨 처음 부팅하고 나서 내보내는 BPDU에는 Sender BID에 자신의 BID를 넣고, 루트 브리지의 BID도 자신의 BID를 넣는다.
👉방금 부팅한 브리지는 다른 BPDU를 한 번도 받지 못했기 때문에 이 네트워크에는 자신만 있다고 생각한다.
👉자신만 있는 네트워크에서는 자신이 루트 브리지이기 때문에 결국 자신이 루트 브리지라고 생각한다.
-
스위치 B와 C는 루트 브리지 BID를 자신의 BID로 세팅해서 BPDU를 서로 주고 받는다.
![](https://velog.velcdn.com/images/victoriapasta/post/07b020bb-a809-4bb4-ba50-9b4cdade5fc1/image.PNG)
스위치 B의 입장에서 곧 스위치 C가 보낸 BPDU가 도착한다.
- 스위치 B는 자신이 알고 있던 정보, 즉 루트 브리지 BID가 2222(이하생략)으로 되어있는 정보와 방금 스위치 C로부터 받은 정보를 비교한다.
- 더 낮은 BID가 루트 브리지가 되기때문에 C가 보낸 BPDU는 무시한다.
스위치 C의 입장에서 B가 보낸 BPDU가 도착한다.
- B와 같이 자신이 알고있던 정보와 방금 스위치 B로부터 받은 정보를 비교한다.
- 더 낮은 BID가 루트 브리지가 되기 때문에 자신의 BPDU의루트 브리지 BID를 B의 BID로 수정한다.
결과
![](https://velog.velcdn.com/images/victoriapasta/post/8a6b4127-6a3b-4e12-a603-54d802de27bc/image.PNG)
A는 아직도 자고있다..
3.1.2 A가 부팅될때
처음 부팅되면 무조건 BPDU부터 보낸다.
스위치 A는 자신의 BPDU에 루트 브리지의 BID를 자신의 BID로 설정해서 양쪽의 스위치에 모두 보낸다.
👉스위치 B와 C도 A쪽으로 BPDU를 보낸다.
이때, A의 BID가 가장 낮으므로, 모든 스위치의 BPDU에 루트 브리지 BID는 A의 BID로 설정된다.
![](https://velog.velcdn.com/images/victoriapasta/post/0de79be2-042e-424f-9f86-0492fafb6126/image.PNG)
3.1.3 루트 브리지를 변경하고 싶을 때
만약 스위치 C를 루트 브리지로 변경하고 싶다면
- 스위치 C의 BID가 가장 낮은 값을 가져야 한다.
- Bridge Priority값을 낮은 값으로 변경한다.
3.2 데지그네이티드 포트 선정
선정 기준 : 세그먼트 상에서 Root Path Cost를 서로 비교하여 더 작은 Root Path Cost를 가진 포트를 데지그네이티드 포트로 선정한다.
- 루트 브리지의 모든 포트들은 항상 데지그네이티드 포트로 선정된다.
👉세그먼트 1, 2는 자동으로 정해진다.
![](https://velog.velcdn.com/images/victoriapasta/post/1ba1d7bb-a7f9-4746-b754-fb2f9d045781/image.PNG)
세그먼트3 에서 두 포트의 Root Path Cost가 동일하기 때문에 다음과 같은 규칙을 적용한다.
- 1단계 : 누가 더 작은 Root BID를 가졌는가 ?
👉B와 C 모두 동일한 루트 BID를 가진다.( 2단계로 넘어간다. )
- 2단계 : 루트 브리지까지 Path Cost 값은 누가 더 작은가 ?
👉19로 동일하다.( 3단계로 넘어간다. )
- 3단계 : 누구의 BID(Sender BID)가 더 작은가 ?
👉 스위치 B가 2222(생략)으로 더 낮다. 스위치 B의 포트 E1이 데지그네이티드 포트로 선정된다.
- 4단계 : 누구의 포트 ID가 더 낮은가 ?
최종결과
![](https://velog.velcdn.com/images/victoriapasta/post/0d11619b-0f0a-4806-b427-b252ddd78f1b/image.PNG)
- D : 데지그네이티드 포트
- R : 루트 포트
- ND : 논 데지그네이티드 포트(Non-Designated Port)
📌4. 스위치 포트의 상태 변화
스패닝 트리 프로토콜을 구현해 나가는 과정에서 모든 스위치나 브리지의 포트들은 언제나 5가지 상태 중 하나에 속한다.
4.1 Disabled
포트가 고장나서 사용할 수 없거나 네트워크 관리자가 포트를 일부러 Shut Down 시킨 상태
- 데이터 전송이 불가능하다.
- 맥 주소를 배울 수 없다.
- BPDU의 송수신이 불가능하다.
4.2 Blocking
스위치를 맨 처음 켜거나 Disabled 된 포트를 관리자가 다시 살렸을 때 그 포트는 블로킹 상태가 된다.
- 데이터 전송은 되지 않고 오직 BPDU만 주고받을 수 있다.
- 맥 주소를 배울 수 없다.
- 위에서 배운 루트 브리지, 루트 포트, 데지그네이티드 포트 선정 과정이 이 블로킹 단계에서 일어난다.
4.3 Listening
블로킹 상태에 있던 스위치 포트가 루트 포트나 데지그네이티드 포트로 선정되면 포트는 바로 리스닝 상태로 넘어간다.
- 리스닝 상태에 있던 포트도 네트워크에 새로운 스위치가 접속했거나 브리지나 스위치의 구성값이 바뀌면 다시
포트 선정
을 해야한다.
👉이 경우에는 다시 블로킹 상태로 돌아간다.
- 데이터 전송이 불가능하다.
- 맥 주소를 배울 수 없다.
- BPDU를 주고 받을 수 있다.
4.4 Learning
리스닝 상태에 있던 스위치 포트가 포워딩 딜레이(Forwarding Delay) 디폴트 시간인 15초동안 그 상태를 유지하면 (블로킹 상태로 돌아가지 않으면) 러닝 상태로 넘어간다.
- 맥 주소를 배워 맥 주소 테이블을 만든다.
- 데이터 전송이 불가능하다.
- BPDU를 주고 받는다.
4.5 Forwarding
러닝 상태에 있던 스위치 포트가 다른 상태로 넘어가지 않고 또 포워딩 딜레이 디폴트 시간동안 그 상태를 유지하면 포워딩 상태로 넘어간다.
- 데이터 프레임을 주고받을 수 있게 된다.
- 블로킹 상태에 있던 포트는 리스닝과 러닝을 거쳐서 포워딩 상태가 된다.
👉디폴트 포워딩 딜레이 15초가 2번 지나 30초가 소요된다.
- 데이터 전송이 가능하다.
- 맥 주소를 배워서 브리지 테이블을 만들 수 있다.
- BPDU를 주고 받는다.
4.6 상태 변화
5가지 상태 변화를 통해 스위치나 브리지는 링크를 막기도 하고 열기도 하면서 스패닝 트리를 구성한다.
👉스패닝 트리 알고리즘은 여러 개의 경로 중 한 개의 경로만 남기고 다 끊었다가 그 경로에 문제가 생겼을 때 경로를 하나하나 살리는 알고리즘인데, 이 행위가 포트의 상태변화를 통해서 일어난다.
![](https://velog.velcdn.com/images/victoriapasta/post/f74db28c-8f17-4c52-882c-00151482a739/image.PNG)
언제든 사용자에 의해 Shut Down 될 수 있다.
📌5. 스패닝 트리 완성하기
- 루트 포트와 데지그네이티드 포트는 포워딩 상태로 만들고, 논 데지그네이티드 포트는 블로킹 상태로 만든다.
- 포워딩은 데이터 전송이 일어나는 상태이고, 블로킹은 BPDU 통신만 하는 상태이다.
- 스패닝 트리 규칙에 따라 리스닝과 러닝을 거쳐서 포워딩 상태가 된다.
![](https://velog.velcdn.com/images/victoriapasta/post/295af9d1-dc29-49f9-98c6-bf303f64b7ff/image.PNG)
- 블로킹(B)표시를 한 포트는 통신이 불가능하기 때문에 스위치 B와 스위치 C 사이의 링크는 끊어진다.
👉이 링크는 스위치 A와 B 또는 C사이의 링크에 문제가 발생하면 다시 살아나게 된다. (Fault Tolorance)
최종 스패닝 트리 결과
![](https://velog.velcdn.com/images/victoriapasta/post/4b50ba3d-3315-43c6-aeac-f4f20968403e/image.PNG)
5.1 용어정리
- 헬로 타임 (Hello Time) : 루트 브리지가 헬로 BPDU를 보내는 주기
👉디폴트 : 2초
- 맥스 에이지 (Max Age) : 브리지들이 루트 브리지로부터 헬로 패킷을 받지 못하면 맥스 에이지 동안 기다린 후 스패닝 트리 구조 변경을 시작한다. (디폴트 : 20초)
👉맥스 에이지란 브리지들이 루트 브리지로부터 얼마 동안 헬로 패킷을 받지 못했을 때 루트 브리지가 죽었다고 생각하고 새로운 스패닝 트리를 만들기 시작하는지에 대한 시간이다.
- 포워딩 딜레이(Forwarding delay) : 브리지 포트가 블로킹 상태에서 포워딩 상태로 넘어갈 때 까지 걸리는 시간이다.
👉블로킹 상태에서 리스닝 상태로 넘어가고, 그 후 포워딩 딜레이 후에 러닝 상태로 넘어가고, 또 포워딩 딜레이 후에 포워딩 상태가 된다.
👉블로킹에서 포워딩으로 넘어가는데 걸리는 시간은 포워딩 딜레이의 두 배 걸린다.
5.2 스패닝 트리의 재편성
루트 브리지는 매 2초마다 헬로 BPDU
를 나머지 브리지로 전송한다.
- 헬로 BPDU를 받은 브리지들은 자신의 데지그네이티드 포트를 통해서 다시 전달한다.
- Non 루트 브리지들은 매 2초마다 들어오는 헬로 패킷을 보면서 루트 브리지 까지의 길이 문제가 없음을 알게 된다.
- 만약
맥스 에이지
동안 헬로 패킷을 받지 못하면, 스패닝 트리를 재편성한다.
![](https://velog.velcdn.com/images/victoriapasta/post/e90d53ea-5259-48fb-b678-61ed5a103330/image.PNG)
만약 스위치 C가 맥스에이지
동안 헬로 패킷을 받지 못한 경우
- 스위치 C는 E0 포트를 통해서 들어오던 헬로 패킷 받기를 포기한다.
- 스위치 B는 문제 없이 헬로 패킷을 받고 있다
- 스위치 B는 데지그네이티드 포트로 헬로 패킷을 다시 뿌리고 스위치 C는 E1포트를 통해 패킷을 받게 된다.
👉스위치 C의 E1포트는 블로킹 상태지만, BPDU는 송수신 가능하기 때문에 받을 수 있다.
- 스위치 C는 E1포트를 루트 포트로 선정한다.
- 루트 포트로 선정된 E1포트는 리스닝과 러닝을 거쳐 포워딩 상태로 넘어간다.
- E0 포트는 블로킹 상태로 넘어간다.
스패닝 트리 알고리즘이 다른 경로를 살리는데 걸리는 시간
👉컨비전스 타임
20초(맥스 에이지) + 15초(포워딩 딜레이) + 15초(포워딩 딜레이) = 50초