Skip to main content

스패닝 트리 프로토콜을 사용하는 이유

개요

예를 들어 서로 다른 스위치 2개의 각각 연결되어 있는 컴퓨터들끼리 통신하기 위해서 서로 다른 스위치끼리 직접적으로 연결을 하거나 스위치 뒷단에 백본 스위치를 두어서 통신하게 되는데 만약 백본 스위치와 스위치 사이에 연결되어 있는 링크 중 하나가 다운되면 다운된 링크와 연결된 스위치 아래 컴퓨터는 통신이 불가능하게 됩니다. 따라서 백본스위치를 2개를 두어 이중화를 구성하게 되며 이때 스위치끼리의 링크는 만들지 않습니다.

Redundant 네트워크에서의 무한 루프

하지만 이때 스위칭 루프가 발생하게 되며 서로 다른 스위치에 연결되어 있는 A 컴퓨터와 B 컴퓨터가 있다고 가정할 때 A 컴퓨터에서 B 컴퓨터와 통신하기 위해서 아이피 주소를 알고 있다고 하더라도 해당 계층(L2)에서 이더넷 헤더를 붙이기 위해 상대방의 MAC 주소를 알아야 하며 이를 위해 브로드캐스트로 ARP 통신을 하게 됩니다. 이때 BUM (Broadcast + Unknown_unicast + Multicast) 트래픽이 발생합니다. 스위치는 해당 요청이 MAC 어드레스 테이블에 등록되어 있지 않으므로 들어오는 인터페이스를 제외하고 나머지 포트로 플러딩을 하게 됩니다. 스위치는 자신의 맥 주소를 보고 포워딩할 것인지 또는 플러딩할 것인지만 결정하기 때문에 BUM 트래픽을 받은 백본 스위치나 다른 스위치는 다시 브로드캐스트로 BUM 트래픽을 발생시킵니다.

여기서 스위치는 소스 MAC 주소를 보고 MAC 주소 테이블을 학습하기 때문에 1번 포트에 컴퓨터와 연결되어 있다고 가정하고 3번 포트로 나가고 2번 포트로 BUM 트래픽이 들어올 때 나중에 온 정보를 보고서 오버라이드하기 때문에 MAC 주소 정보가 1번 포트가 아닌 2번 포트로 옮겨간 것으로 바뀌게 되어버립니다. 이러한 루프가 계속해서 발생하며 동일한 소스 MAC 주소가 여러 포트로 옮기는 현상이 반복됩니다. 아이피 헤더에는 TTL 필드가 존재하여 L3 장비를 거칠때마다 TTL 값이 감소하고 0일 될때 패킷이 드랍되어 무한 루프를 막게 되지만 L2 헤더에는 TTL 필드가 없기 때문에 한번 루프가 발생하면 해당 프레임은 계속 플러딩이 되게 됩니다.

여기서 포트가 바뀌기 때문에 MAC 주소 테이블이 계속하여 갱신되고 이러한 작업은 스위치 CPU에 부하를 일으켜 장비가 다운되어 버립니다.

무한 루프를 막는 대안, Spanning Tree Protocol

이러한 루프를 막는 목적으로 Spanning Tree Protocol이 설계되었습니다. Block 포트는 업상태로 링크는 살아있지만 다른 포트에서 들어온 트래픽을 Block 포트로 내보내지 않고 Block 포트로 들어온 트래픽을 다른 포트로 내보내지 않습니다. 그렇다면 여러 스위치 중에서 Block 포트는 어디에 만들어야 할까요? 나무 뿌리 모양을 거꾸로 돌려보면 가장 맨위에 기준점이라고 할 수 있는 Reference Point (Root)가 있습니다.

그러면 루트를 어디에 두어야 할까요? 이를 위해서 브릿지 아이디를 만들었고 브릿지 아이디가 가장 낮은 값을 루트로 결정합니다. 모든 스위치는 각자 유니크한 값을 갖도록 합니다. 이것이 바로 48비트의 System MAC이라고 불리는 값입니다. 하지만 이렇게 될 경우 나중에 연결되는 스위치가 제일 낮은 System MAC 주소를 갖게 되므로 항상 나중에 연결되는 스위치가 Reference Point가 됩니다. 이러한 동작을 방지하기 위해서 사람이 직접 관리할 수 있도록 앞 16비트에 Priority를 두게 되었습니다. 브릿지 아이디는 Priority 16비트와 System MAC 48비트를 합쳐 64비트로 구성됩니다.

이 Priority의 기본값은 네트워크 장비 벤더사마다 다르기 때문에 항상 확인하여 원하는 스위치 장비가 루트에 오도록 관리해야 하며 Cisco 장비의 경우 기본값으로 32768을 갖습니다. 예외적인 경우를 제외하고 일반적인 경우에 L2 레이어에서는 값이 낮을수록 우선순위를 갖고 L3 레이어에서는 값이 높을수록 더 높은 우선순위를 갖습니다.

서로 다른 스위치끼리만 브릿지 아이디를 공유하게 될 경우 트리 구조대로 통신이 불가능하므로 모든 스위치가 네트워크를 구성하는 모든 스위치들의 브릿지 아이디를 알고 있어야만 합니다. 그래서 모든 스위치간에는 BPDUs(Bridge Protocol Data Units)를 사용합니다. BPDUs에 대해서는 다음장에서 학습합니다.

요약

본 장의 내용을 요약하면 네트워크에서 가장 중요한 기능은 STP(Spanning Tree Protocol)과 Routing Protocol이며 네트워크 디자인 시 안정성을 확보하기 위해 장비를 이중화로 구성하게 되지만 이중화는 루프 발생 가능성이 커지며 이로 인해 전체 네트워크 다운되는 증상이 발생하므로 루프 방지를 위해 STP를 설정하며 STP의 기본 개념은 이중화된 링크의 한 구간을 논리적으로 끊어 이를 통해 루프를 방지합니다. 만약 다른 쪽 링크에 문제가 생기면 논리적으로 끊어 놓은 링크를 자동으로 활성화시켜 활성화된 곳으로 통신이 이루어지게 합니다. 하지만 장비 복구 시간이 오래 걸리는 점과 링크 한쪽을 끊는 것이기 때문에 비효율적 회선 사용이 이루어지게 된다는 단점이 있습니다.


참고자료