RSTP(Rapid STP)는 다음과 같은 알고리즘을 통해 루프 없는 토폴로지를 운영합니다.
- 루트 스위치 (Root Switch) 선택
- 루트가 아닌 다른 모든 스위치(Non-Root Switch)나 지정되지 않은(Non-Designated) 브릿지 스위치의 루트 포트(RP) 선택
- 각 스위치간 연결된 링크의 지정된 포트(DP) 선택
- 다른 포트들은 루프(Loop)를 방지하기 위해 차단 상태로 동작
루트 스위치 (Root Switch) 선택
STP(802.1d)와 RSTP(802.1w) 표준 모두, 루트 스위치의 선택은 브릿지 ID (BID)를 기반으로 가장 낮은 값이 우선합니다. 두 부분으로 나눠져 있는 BID는 32,768이라는 기본값(Default)을 갖고 있는 우선 순위(Priority)와 고유한 MAC주소로 구성되어 있습니다.
이 기본 값을 그대로 사용할 수도 있지만, 예상치 않은 동작이 나올 수 있기 때문에 권장되지 않습니다. 네트워크 토폴로지상의 엣지(Edge)단에 위치한 액세스 스위치가 루트 스위치가 될 수 있기 때문입니다. 이럴 경우에는 좀 더 덜 최적화된 구성을 갖게 되고 그만큼 복원력이나 안정성면에서 떨어지게 됩니다.
아래 표와 같이 Priority가 기본값인 32768으로 되어 있다면, Access-2 스위치가 루트 스위치로 될 것입니다.
그래서 그림과 같이 중앙에 위치한 Core-1 스위치를 루트 스위치가 되도록 하고자 합니다.
Core-1 스위치가 루트 스위치가 된다면 더 강력하고 탄력적이고 최적의 경로를 갖는 트리 구조를 갖추게 됩니다. 이렇게 만들기 위해서는 Core-1 스위치의 Priority를 낮춰주면 됩니다. Core-1 스위치의 Priority를 4096과 같이 확 낮춰주면 Core-1 스위치의 BID가 가장 낮기 때문에 루트 스위치가 됩니다. 그런데, Core-1 스위치의 문제가 생겼을 경우에는 여전히 Access-2 스위치가 백업의 루트 스위치가 될 것입니다. 이를 막기 위해서 Core-2 스위치의 Priority 값도 함께 낮춰줘야 합니다. (Core-1 스위치보다는 높게)
※ 우선 순위 값(Priority)은 4096 단위로 설정해야만 합니다.
루트 아닌 스위치(Non-Root Switch)의 루트 포트 선택
루트가 아닌 스위치(Non-Root Switch) 또는 지정되지 않은 브릿지(Non-Designated Bridge)는 루트 포트 (최적 경로에 연결된 포트)를 선택하여 루트 스위치에 대한 최적의 경로를 선택해야 합니다. 루트 포트 선택 기준은 다음과 같습니다.
- Lowest root bridge ID (가장 낮은 루트 브릿지 ID)
- Lowest path cost to the root bridge (루트 브릿지로 가는 가장 낮은 경로 값)
- Lowest sender bridge ID (가장 낮은 발신자 브릿지 ID)
- Lowest port priority (가장 낮은 포트 우선 순위)
- Lowest port ID (가장 낮은 포트 ID)
위 그림에서 Core-2 스위치는 1, 2, 43, 44포트에서 BPDU를 수신합니다. Core-2 스위치는 어떤 포트가 가장 적합한지 확인해야 합니다. 아래 내용을 통해 한 번 살펴볼까요?
Lowest root bridge ID (가장 낮은 루트 브릿지 ID)
앞선 우선 순위 값 조정에 따라 우리는 Core-1 스위치가 가장 낮은 BID를 갖고, 이에 따라 루트 스위치라는 것에 동의합니다. 이 기준은 최상의 경로를 선택하는 것에 도움이 되지 않습니다.
Lowest path cost to the root bridge (루트 브릿지로 가는 가장 낮은 경로 값)
모든 링크의 속도가 동일하다면 Core-2 스위치의 Port 1번과 2번은 간접 경로로 Cost가 높게 됩니다. 따라서 이 경로는 버려지게(Discarding) 됩니다. 그리고 Port 43번과 44는 Cost가 동일하기 때문에 다음 기준을 살펴야 합니다.
Lowest sender bridge ID (가장 낮은 발신자 브릿지 ID)
Port 43번과 44번에서 수신되는 BPDU는 동일한 Core-1 스위치로부터 오는 것이기 때문에 이 역시 도움이 되지 않아 다음 기준을 살펴봐야 합니다.
Lowest port priority (가장 낮은 포트 우선 순위)
발신자(Core-1)는 광고(advertisement)에 포트 우선 순위(Port Priority)를 포함합니다. 포트 우선 순위는 0부터 240사이의 값으로 이루어져 있으며, AOS-CX 스위치의 기본 값은 128입니다. 스위치는 이 우선 순위 값이 낮을 수록 우선 순위가 높다고 인식합니다. 별다른 스위치 기본 값을 건들지 않았다면, 이 역시 두 포트(43번, 44번) 값이 동일하므로 다음 기준을 통해 결정해야 할 듯 합니다.
Lowest port ID (가장 낮은 포트 ID)
최종 결정은 포트 ID 값에 따라 정해집니다. Core-1 스위치의 포트 중 43번 포트가 더 낮기 때문에 이 포트와 연결된 Core-2 스위치의 포트 43번이 루트 포트(RP)가 됩니다.
Access-1 스위치도 위와 같은 기준과 순서대로 루트 포트를 정하게 됩니다.
Core-2 스위치와 마찬가지로 가장 낮은 루트 브릿지 ID의 기준은 최적의 경로 선택에 도움이 되지 않습니다. 하지만, 모든 링크가 동일한 속도라면 포트 21번이 포트 22번보다 루트 스위치로 가는 경로 값이 더 낮습니다. 포트 22번의 경우 간접 경로(indirect path)이기 때문에 경로 값(Cost)가 높기 때문입니다.
따라서, 포트 21번이 루트 포트(RP)가 됩니다.
Access-2 스위치 역시 포트 21번과 22번에 BPDU를 수신하고, 이 중 Cost가 더 낮은 포트 21번이 루트 포트(RP)가 됩니다.
이렇게 RSTP 토폴로지에서 루트 스위치와 루트 포트를 선정하는 로직을 알아보았습니다.
자, 그럼 지정된 포트(DP)를 선택하는 방법을 알아보겠습니다.
지정된 포트(Designated Port, DP) 선택
지정된 포트를 선택하는 기준은 루트 포트와 동일합니다.
- Lowest root bridge ID (가장 낮은 루트 브릿지 ID)
- Lowest path cost to the root bridge (가장 낮은 루트 브릿지까지의 경로 비용)
- Lowest sender bridge ID (가장 낮은 발신자 브릿지 ID)
- Lowest port priority (가장 낮은 포트 우선 순위)
- Lowest port ID (가장 낮은 포트 ID)
다음은 위 그림의 토폴로지에서 각 스위치별로 지정된 포트(Designated Port, DP)를 어떻게 지정하는지 보여줍니다.
Core-1 스위치
Core-1 스위치는 루트 스위치(Root Switch)이기 때문에 모든 포트가 루트 브릿지(Root Bridge)에 가깝게 됩니다. 즉, 모든 포트가 DP가 됩니다.
Core-2 스위치
Core-2 스위치는 루트 포트(RP)인 포트 43번을 제외하고 살펴보겠습니다.
1번 포트
Core-2 스위치는 1번 포트가 루트와 가장 가까운지 확인합니다. 이 확인하는 프로세스는 Access-1로부터 받은 BPDU 신호와 비교하여 진행합니다. 앞서 언급한 기준에 따라 진행해보겠습니다.
- Lowest root bridge ID (가장 낮은 루트 브릿지 ID): 토폴로지의 모든 장치는 Core-1 스위치가 루트라는 것에 동의합니다. 즉, 이 값은 모든 장치에게 동일합니다.
- Lowest path cost to the root bridge (가장 낮은 루트 브릿지까지의 경로 비용): Access-1 스위치와 Core-2 스위치 모두 동일한 값(Cost)를 갖습니다. 두 스위치 모두 1 hop 떨어져 있기 때문입니다.
- Lowest sender bridge ID (가장 낮은 발신자 브릿지 ID): Core-2 스위치의 BID 값이 더 낮기 때문에 두 스위치간 연결된 링크에서 Core-2 스위치의 1번 포트가 DP가 됩니다.
2번 포트
Core-2 스위치는 다시 이 포트가 루트에 가장 가까운지 확인합니다. 1번 포트에서 확인했던 것과 마찬가지로 Access-2 스위치로부터 받은 BPDU를 비교하여 확인합니다.
- Lowest root bridge ID (가장 낮은 루트 브릿지 ID): 토폴로지의 모든 장치는 Core-1 스위치가 루트라는 것에 동의합니다. 즉, 1번 포트와 마찬가지로 동일합니다.
- Lowest path cost to the root bridge (가장 낮은 루트 브릿지까지의 경로 비용): 각 스위치간 링크의 속도가 같기 때문에 1 hop씩 떨어져 있는 두 스위치 모두 동일한 값(Cost)를 갖습니다.
- Lowest sender bridge ID (가장 낮은 발신자 브릿지 ID): Core-2 스위치의 BID 값이 더 낮기 때문에 두 스위치간 연결된 링크에서 Core-2 스위치의 2번 포트가 DP가 됩니다.
44번 포트
두 스위치 링크 중 다른 쪽(Core-1 스위치)의 포트가 루트와 가장 가깝기 때문에 DP를 지정할 수 없습니다.
Access-1 스위치
1번 포트
이 포트는 연결된 링크에서 유일한 RSTP 스피커입니다. 즉, 다른 스위치와 연결되어 있지 않습니다. 따라서 이 포트는 DP가 됩니다.
22번 포트
이 포트에 연결된 링크의 다른 쪽(Core-1 스위치) 포트가 루트와 가장 가깝기 때문에 DP를 지정할 수 없습니다.
Access-2 스위치
Access-1 스위치와 동일하게 1번 포트가 DP가 되고 22번 포트는 DP가 될 수 없습니다.
위 그림에서 Layer 1 Hub가 없는 토폴로지 구성입니다. 따라서 Backup 포트는 없고, 오직 Alternative 포트만 존재하게 됩니다. DP(지정 포트)나 RP(루트 포트)로 선택되지 않은 모든 포트는 ALT 포트가 되고, Discarding 상태가 됩니다. 그림에서는 Core-2 스위치의 44번 포트, Access-1과 Access-2 스위치의 22번 포트가 ALT 포트가 된 것을 확인할 수 있습니다.
RSTP Edge Port & Link Type
엣지 포트(Edge Port)는 엔드 포인트에 연결되므로 BPDU를 수신하지 않습니다. 엔드 포인트 단말은 루프를 발생 시킬 수 없기 때문에 Spanning Tree 알고리즘에 참여할 필요가 없습니다. 즉, “Leaf on the Spanning Tree”입니다. 루프를 생성 할 수 없기 때문에 중간 과정 없이 빠르게 전달 상태(Forwarding State)로 전환 할 수 있습니다.
만약, 엣지 포트에서 BPDU가 수신 되면, 포트는 일반 스패닝 트리 포트로 작동하고 Layer 2 루프를 방지하기 위해 알고리즘에 참여합니다. 따라서 아래와 같이 엣지 포트를 수동으로 구성해야 합니다.
Switch(config)# interface 1/1/1
Switch(config-if)# spanning-tree port-type admin-edge
admin-edge 옵션의 대안으로 AOS-CX 관리 네트워크 옵션이 있습니다. 이 옵션을 사용하면 포트는 링크가 작동 된 후 처음 3 초 동안 BPDU를 찾습니다. BPDU가 수신 되지 않으면 포트는 엣지 포트가 되어 즉시 프레임을 전달합니다. BPDU가 감지되면 포트는 비 엣지 포트가 됩니다. 정상적인 STP 작업에 참여합니다.
Switch(config)# interface 1/1/1
Switch(config-if)# spanning-tree port-type admin-network
RSTP 토폴로지 변경 메커니즘
RSTP에서는 Non-Edge 포트가 다른 상태로 변경되거나 BPDU 값을 더 이상 받지 않을 때, 토폴로지 변화가 일어납니다. 스위치는 이러한 토폴로지 변화를 탐지하고, 토폴로지 변경된 네트워크 내 스위치들에게 알려줍니다. BPDU에 TC(Toplogy Change) 비트를 설정하고 이러한 BPDU를 전송하여 모든 Non-Edge 포트와 관련된 MAC 주소 테이블 항목을 플러시합니다.
다른 스위치들은 주변으로부터 TC (Topology Change) 비트가 설정된 BPDU를 수신합니다. 스위치들은 TC BPDU의 수신 포트를 제외한 모든 포트에서 확인된 MAC 주소 테이블 항목을 지웁니다. 그리고 이 스위치들은 차례로 TC가 설정된 BPDU를 전송합니다.
참고: 원래 802.1d 표준에서 모든 스위치는 TC BPDU를 전송하여 다른 스위치에게 알릴 수 있지만 MAC 주소 테이블을 지우라는 명령은 항상 루트 스위치에서 제공 되어야 합니다. 이 2 단계 프로세스는 완료하는 데 더 많은 시간이 걸리게 됩니다.
이번 포스팅은 다소 길었습니다. Spanning Tree는 복잡해지는 네트워크 환경에서 굉장히 중요한 기술입니다. 루프가 발생할 경우 네트워크 전체적으로 큰 문제가 발생하기 때문에 이 부분은 반드시 제대로 숙지해야 할 것입니다.
다음 포스팅에서 MSTP(Multiple Spanning Tree Protocol)을 살펴보겠습니다.