스위치 사이의 백업 루트를 만들었을 경우 스위치가 동그랗게 연결되고
이는 Switch Loop
이 일어나게 된다.
스위치는 브로드캐스트를 차단하지 못하기 때문에 만약 Switch Loop 상태에서
브로드캐스트를 보낼 경우 브로드캐스트는 계속 순환하며 스위치의 밴드위스, CPU, 메모리
와 같은 네트워크 자원을 모두 고갈할 것이고 이는 결국 네트워크 다운으로 이어진다.
⇒ Broadcast Storm
(유니캐스트의 목적지 주소가 스위칭 테이블에 존재하지 않아 플러딩일 때도 마찬가지)
이를 해결하기 위한 방법이 STP
이다.
STP 는 BPDU 프레임을 교환해 특정 포트를 차단함으로써 브로드캐스트나 유니캐스트의
순환을 막게 된다.
그럼 어떤 포트를 막을지 어떻게 정할 수 있을까?
우선 STP 의 기준 스위치인 루트 스위치
를 선정한다.
스위치 ID 가 낮은
스위치가 루트 스위치가 되며 스위치 ID 는
Priorty (2바이트) . MAC 주소 (6바이트) 로 이루어져 있다.
우선 가장 낮은 Priority 가 낮은 것부터 찾고 만약 갔다면 더 작은 MAC 주소를 가진
스위치를 루트로 스위치로 선정한다.
그럼 서로 어떻게 루트 스위치를 선정하냐?
스위치를 연결하고 모두 동시에 전원을 키게 되면 루트 스위치는 선정되지 못한 상태이므로
모든 스위치는 자신이 루트 스위치라고 판단하여 루트 스위치만
2초 단위로 보내는 BPDU
를 모든 스위치가 보내게 된다.
이때 BPUD 의 루트 스위치 ID 필드에 자신의 ID 를 입력해 보내며 각각 비교하며
루트 스위치를 선정하게 된다.
비교는 다음과 같은 순서로 이루어진다.
- 기본적으로 모든 스위치는 모든 포트로 2차마다 BPDU를 보낸다.
- 자신에게 도착한 BPDU 안의 Priority 를 먼저 비교한다.
Priority 가 작은 스위치가 루트 스위치가 된다.
- 만약 Priority 가 같다면 MAC 주소가 더 작은 스위치가 루트 스위치가 된다.
- 본인이 루트 스위치로 선정된다면 BPDU 를 계속 보내게 되며
도착한 BPDU 가 루트 스위치로 선정된다면 해당 스위치의 ID를 모든 포트로 전달하고
더이상 BPDU 를 출발시키지 않는다.
그래서 루트 스위치를 선정하는 시간은 BPDU 를 보내는 주기인 약 2초 정도가 소요된다.
그럼 이제 루트 스위치를 선정하였고 포트들을 정의할 수 있다.
포트에 대한 정의는 3가지로 이루어질 수 있다.
Root port
는 루트 스위치를 제외한 스위치 (Non-root 스위치) 에서 루트 스위치에 대한
베스트 루트를 제공하는 포트이다.
Non designated port
는 사용하지 않는 링크를 연결하는 두 포트 중 블로킹 되는 포트이다.
Designated port
는 각각의 링크에서 루트 스위치와 가장 가까운 포트이다.
링크의 Bandwidth 가 모두 달라 각자 다른 Path Cost 를 가진다고 가정하자.
그리고 이전에 정의했던 스위치 ID 와 스위치 포트 ID 는 비교할 수 있는 대상이다.
따라서 위의 3가지를 통해 포트에 대한 정의가 이루어진다.
- Path Cost
- BPDU 가 방금 통과한 스위치 ID
- BPDU 가 방금 통과한 스위치의 포트 ID
STP 의 동작 방식을 위해 위와 같은 상황이 있다고 가졍해보자!
파란색 블록 : SW ID 의 Priority
회색 블록 : 링크의 Path Cost
STP 가 동작하지 않는다면 위의 그림처럼 3개의 Swtich Loop
가 생긴다.
가장 스위치 ID 가 작은 스위치가 루트 스위치이기 때문에
가장 작은 SW1 이 루트 스위치가 된다.
루트 포트를 구하기 위해서는 각 스위치에서 루트 스위치로 향하는 가장 좋은 루트를 찾으면 되며
이는 위에서 정의한 포트 정의 3가지 요인에 의해 결정된다.
SW2 에서 루트 스위치로 가는 가장 좋은 경로는 가장 Path Cost 가 적은 0/1 포트이다.
SW3 에서 루트 스위치로 가는 가장 좋은 경로는 가장 Path Cost 가 적은 0/1 포트이다.
SW4 에서는 0/1 포트와 0/2 포트에서의 루트 스위치에 대한 Path Cost 가 같다.
그러므로 다음 비교인 방금 통과한 스위치 ID 를 비교하는데 SW2 의 스위치 ID가 더 작으므로
0/1 포트가 루트 포트가 된다.
SW5 에서는 0/1 포트와 0/2 포트에서의 루트 스위치에 대한 Path Cost 가 같다.
그러므로 다음 비교인 방금 통과한 스위치 ID 를 비교하는데 이 또한 같은 SW4 로 같다.
그러면 다음 비교는 포트 번호가 되며 0/1 포트 번호가 0/2 포트 보다 작으므로
0/1 포트가 루트 포트가 된다.
이렇게 모든 Non-root 스위치들의 루트 포트가 선정되면 사용하는 링크와 사용하지 않는 링크를
구할 수 있게 된다.
Non designated port 선정을 위해서는 사용하지 않는 링크를 연결하는 두 포트 중 하나를
선정하면 되며 이때도 마찬가지로 위의 3가지 요소를 이용해 판단한다.
두 스위치 사이의 사용하지 않는 링크에 대한 포트는 SW2 의 0/2, SW3 의 0/2 포트인데
우선 두 포트에 대한 Path Cost 2로 같다.
그럼 그 다음으로 방금 통과한 스위치 ID 를 비교해야 하는데 SW2의 Prority 가 더 작으므로
SW3 의 0/2 포트가 Non designated port가 된다.
두 스위치 사이의 사용하지 않는 링크에 대한 포트는 SW3 의 0/3, SW4 의 0/2 포트인데
SW3 0/3 의 Path Cost 는 2, SW4 0/2 의 Path Cost는 21 로
SW4 의 0/2 포트가 Non designated port가 된다.
두 스위치 사이의 사용하지 않는 링크에 대한 포트는 SW4 의 0/4, SW5 의 0/2 포트인데
SW4 0/4 의 Path Cost 는 21, SW5 0/2 의 Path Cost는 121 로
SW5 의 0/2 포트가 Non designated port가 된다.
Designated port는 각각의 링크에서 가장 좋은 포트로 위와 마찬가지로 3요소에 의해 판단한다.
그러나 위에서 루트 포트, Non designated port를 선정했기 때문에 남는 포트가
Designated port 가 된다.
이렇게 루트 스위치 선정과 포트 정의가 끝나면서 STP 가 동작하게 되며
Non designated port 는 블로킹 되어 Switch Loop
를 막아
Broadcast Storm 을 막을 수 있게 된다.
STP 는 특정 포트를 블로킹 함으로써 브로드캐스트와 유니캐스트의 순환을 막게 되는데
이 블로킹으로 사용할 수 없는 링크가 생기게 된다. (==노는 링크가 생긴다.)
이를 해결하는 방법은 표준인 MST
와 시스코 프로토콜인 PVST
가 존재하고
두 프로토콜 모두 VLAN 그룹 별로 독립된 STP 를 돌릴 수 있게 한다.
STP 동작으로 위와와 같은 상황이 발생한 경우 사용할 수 없는 링크가 발생하며
이를 해결하기 위해 VLAN 별로 독립된 STP를 동작하고자 VLAN 에 대한 루트 스위치를 지정하게 된다.
spanning-tree vlan "vlan 그룹 숫자" priority "Priority 숫자"
위와 같이 VLAN 10 과 VLAN 20 에 대한 각각의 루트 스위치를 지정할 경우
STP 는 VLAN 그룹 별로 동작하여 각 VLAN 에 대한 블로킹 포트만 지정되며
사용할 수 없는 링크는 없어지게 된다.