위 그림은 1층짜리 하나의 건물이고, 디스트리뷰션 계층을 이중화 한 상태이다.
가운데 좌,우 스위치 두개를 연결하면 백업 루트가 생겨 가용성이 좋아집니다.
하지만 이렇게 백업 루트가 만들어지도록 스위치를 동그랗게 연결했을 때, switching loop이 일어납니다.
스위치는 브로드캐스트를 차단하지 못하기 때문에 브로드캐스트 프레임은 좌, 우로 모두 순환하게 됩니다.
유니캐스트의 목적지 주소가 스위칭 테이블에 존재하지 않는다면 스위치는 모든 포트로 프레임을 플러딩하기 때문에 유니캐스트도 순환할 수 있습니다.
-->순환하는 프레임의 속도는 밴드위스, CPU, 메모리와 같은 네트워크를 모두 고갈시킬 정도로 빨라서 결국 네트워크가 다운됩니다.
스위칭 룹 환경에서 발생하는 브로드캐스트나 유니캐스트의 빠른 회전 문제를 해결하는 것이 STP입니다. STP는 BPDU 프레임을 교환해 특정 포트를 차단함으로써 브로드캐스트나 유니캐스트 프레임의 순환을 막습니다.
실습 환경에서 아래 주황색으로 뜨는이유는 STP가 동작해서 포트를 차단해 순환 문제를 해결 했기 때문으로 볼 수 있습니다.
먼저 루트 스위치를 선정합니다.
스위치 ID의 구성:
스위치 ID는 2바이트의 Priority + 6바이트의 MAC주소로 구성되는데, default-priority는 32768입니다.
STP의 기준 스위치를 root switch라고 부릅니다.
STP는 낮은 숫자를 좋아하는 프로토콜이라서 스위치 ID가 제일 낮은 스위치가 루트 스위치가 됩니다.(Priority가 동일한 스위치가 여러 개 있으면, MAC 주소를 보고 낮은 애가 root switch가 됩니다.)
1.스위치들을 연결하고 동시에 전원을 키면, 처음에는 루트 스위치를 선정하지 못한 상태입니다. 이때 모든 스위치는 자신이 루트 스위치라고 생각합니다. 원래는 루트 스위치만이 2초마다 모든 포트로 BPDU를 내보내는데 이때는 모든 스위치가 모든 포트로 2초마다 BPDU를 내보냅니다. 즉, BPDU의 루트 스위치 ID필드에 자신의 ID를 입력해 보냅니다.
2.BPDU를 수신했을 때, 자신보다 낮은 ID를 발견한 스위치는 이제 자신이 더 이상 루트 스위치가 아니라는 것을 알게 됩니다. 따라서 BPDU를 출발시키는 대신, 루트 스위치가 보낸 BPDU를 모든 포트로 전달합니다.
이런식으로 루트 스위치를 선정하는 데는 약 2초정도가 걸립니다.BPDU를 보내는 주기가 2초이기 떄문에 2초 정도가 지나면 모든 스위치들이 BPDU를 교환할 수 있습니다.
2.루트 포트(root port)를 찾습니다.
1번 과정을 통해 루트 스위치를 찾았습니다.
STP는 낮은 숫자를 좋아하므로, 코스트가 낮을 수록 Bandwidth는 우수합니다.
위의 두 사진은 루트 스위치 선정 과정과 cost를 나타낸 그림입니다.
Switch ID가 sw1이 제일 작아서,sw1이 루트 스위치인 상황입니다.
루트 포트를 찾기 위해서는 BPDU에 들어가는 내용인 아래 3가지를 순서대로 비교해서 결정합니다.
BPDU가 항상 포함하는 내용,==루트 포트 선정 기준
1. 패스트 코스트(past cost)
2. (BPDU가 방금 통과한) 스위치 ID
3. (BPDU가 방금 통과한) 스위치의 포트 ID(번호)
sw2에서는 어떤 것이 루트 포트일까요?
루트 포트를 선정할때 가장 먼저 1.path cost를 비교합니다.
path cost는 루트 스위치가 보낸 BPDU들이 sw2의 각 포트들로 들어올 수 있는데, (2,2+4,2+19+19)중에 sw1에서 직접적으로 오는 sw1-sw2를 연결하는 sw2의 0/1포트가 루트 포트가 됩니다.
sw3에서는 어떤 것이 루트 포트일까요?
루트 스위치에서 오는 BPDU들 중 cost(2,2+4,2+19+19)중 sw1->sw3로 직접적으로 오느넥 past cost가 가장 적습니다. 그래서 sw1-sw3직접적으로 연결된 sw3의 0/1포트가 sw3에서 루트 포트가 됩니다.
sw4에서는 어떤 것이 루트 포트일까요?
sw4에서는 sw1->sw2->sw4, sw1->sw3->sw4로 오는 BPDU들의 path cost는 (2+19)로 동일합니다.
그러면 비교조건 2번.(BPDU가 방금 통과한) 스위치 ID를 비교해봅니다.
즉,sw4에 도착하기 전인, sw2,sw3의 스위치 ID를 비교해보면, sw2(8192)가 sw3(32768)보다 낮기 때문에 sw4의 0/1포트가 루트 포트가 됩니다.
sw5에서는 어떤 것이 루트 포트일까요?
sw5에서는 1,2번 조건이 모두 동일하므로, 3번 조건으로 비교를 합니다.sw5는 sw4의 0/3, 0/4번 포트를 비교해서 포트 번호가 낮은 0/3을 가진쪽의 포트로부터 온 sw5의 0/1포트를 선택하게 되고, 이것이 루트 포트가 됩니다.
선정한 루트 표시들을 별표로 표시했습니다. 루트 포트를 표함하는 링크들은 사용하는 링크, 루트 포트를 포함하지 않는 링크는 사용하지 않는 링크가 됩니다.
위의 사진에서 사용하지 않는 링크를 연결하는 두 포트 중 한 쪽만 블로킹하면 됩니다. 이 블로킹 포트를 Non-designated port라고 합니다.
Non-designated port 선정 기준은 루트 포트를 선택할 때와 동일합니다.
사용하지 않는, sw2와 sw3를 연결하는 두 포트 중에 어떤 포트가 Non-designated port일까?
사용하지 않는, sw3와 sw4를 연결하는 두 포트 중에 어떤 포트가 Non-designated port일까?
사용하지 않는, sw4와 sw5를 연결하는 두 포트 중에 어떤 포트가 Non-designated port일까?
1.SW4의 0/4와 sw5의 0/2포트의 path cost를 비교해보면 sw4의 0/4가 작다. 그러므로 sw5의 0/2포트가 Non-designated port가 되고 블록 된다.
root port, Non-designated port를 모두 선정하고 나면, 나머지 포트들은 모두 Designated port가 된다. 아래의 사진과 같습니다.
root port는 각각의 Non-root switch에서 제일 좋은 포트이고, Designated port는 각각의 링크에서 가장 좋은 포트 입니다.
여기서 가장 좋은 포트란, 기준 스위치인 루트 스위치에서 가장 가까운 포트를 의미합니다.
지금까지의 내용을 바탕으로 사진에서 루트 스위치를 골라 보세요
먼저 왼쪽의 사진에서 루트 스위치는 왼쪽 위입니다.
오른쪽 사진에서는 왼쪽 아래입니다.
더하여, switch에서 포트마다 root port, Non-designated port, port를 확인할 수 있습니다.
명령어: show spanning-tree
Bridge ID는 스위치를 달리 부르는 말입니다.
root switch의 ID와 Bridge ID가 같습니다.(priority +MAC 주소) 즉, 이 스위치는 root switch입니다.
root switch는 모든 포트가 Designated port입니다.
STP의 약점: STP는 switching loop환경에서 브로드캐스트나 유니캐스트 프레임이 회전하는 것을 방지하기 위해 특정 포트를 블로킹한다. 그런데 이 브로킹 포트 때문에 사용할 수 없는 링크가 생긴다.
솔루션:
1. MST(표준 프로토콜)와 PVST(시스코 프로토콜)이다.
두 프로토콜은 VLAN 그룹별로 독립된 STP를 돌린다.
즉, SW1은 VLAN 10에 대해 루트 스위치로 설정하고, SW2는 VLAN 20에 대해 루트 스위치로 설정하면, VLAN 10에 대해서는 검은색 포트가 블로킹되므로 VLAN 10에 속한 트래픽은 검은색 경로로 다닙니다. VLAN 20에 대해서는 회색 포트가 브로킹되므로 VLAN 20에 속한 트래픽은 회색 경로로 다닙니다.
sw1을 vlan 10에 대한 루트 스위치로 설정하는 명령어: spanning-tree vlan 10 priority 4096
설정을 안해준 나머지 스위치에 대해서는 vlan 10에 대해 default priority가 (32768+10)이다.
즉, PVST를 설정하면 브로킹 포트 때문에 사용할 수 없는 링크가 없어진다.