이번 글에서는 루핑과 스패닝 트리 알고리즘에 대해 다루겠습니다. 결론부터 말하면, 루핑을 해결하기 위해 스패닝 트리 알고리즘이 도입되었습니다. 둘을 알고 가기 전에 우선 간단히 네트워크 용어 두개를 알아보고 가겠습니다.
폴트 톨러런트란 네트워크 상에 어떤 문제가 발생할 때를 대비하여 미리 장애 대비를 해놓는 것을 의미합니다.
예를 들어 피시방의 모든 컴퓨터가 하나의 라우터와 연결되어 있는데, 이 라우터가 고장나게 되면 모든 컴퓨터가 인터넷에 접속할 수 없게 됩니다. 따라서 라우터를 미리 두 대로 네트워크를 구성한 후 한 대가 죽었을 때 자동으로 다른 라우터가 기존의 라우터 역할을 수행하는 것입니다. 이렇듯 폴트 톨러런트란 대부분 이중 구조를 의미하고 전체 네트워크가 하나의 지점의 장애로 영향을 받는것을 방지하기 위한 대책입니다.
길을 분산시키는 작업입니다. 인터넷 회선 하나보다 인터넷 회선 두 개를 사용해 데이터들이 두 라인 중 하나를 선택해서 이용하게끔 하는 방법입니다. 그러다가 회선 하나가 끊어지면 다른 회선으로 이전할 수 있게 되는데, 이럴 경우 로드 밸런싱과 폴트 톨러런트를 겸하게 됩니다,
루핑은 같은 네트워크 안에서 하나의 호스트가 다른 호스트 까지 이동하는 데 있어 경로가 두 가지 이상 있다면 발생하는 현상입니다.
이때 이 현상의 근본 원인은 브리지/스위치에 목적지까지의 경로가 두 개 이상 존재하면 반드시 루핑이 발생하기 때문입니다. (이더넷의 기본 성격이 붙어있는 모든 장치들에게 프레임을 전달하는 것이고, 브리지/스위치는 필터링과 플로딩의 기능이 있기 때문이죠)
두 호스트 사이에 브리지/스위치가 두 개 이상 생기게 되면 브리지/스위치는 두 호스트간의 통신에 있어 목적지 까지의 경로가 두 개 이상 존재하게 되는 것이죠 ( 같은 네트워크 상이므로 두 브리지/스위치도 서로 연결되어 있기 때문입니다. ) 보통 이런 경우는 로드 밸런싱 처럼 두 개의 경로를 이용하다가 하나의 경로가 끊어져도 다른 경로로 통신이 가능하게(또한 이는 폴트 톨러런트) 하기 위한 과정인데, 아무런 대안이 없는 상황이라면 무조건 루핑이라는 것이 발생하게 됩니다.
좀 더 들어가자면 이 루핑은 스위치/브리지가 두가지 경로 이상으로 연결되어 있으면 발생한다고 보시면 됩니다. (건너 건너 연결되어 있는 방식 포함입니다.) -> 이더넷의 쉐어드 방식 때문
그럼 이 폴트 톨러런트와 로드 밸런싱을 가능케 할 수 있는 그 루핑의 대안이 바로 스패닝 트리 알고리즘 입니다. 스패닝 트리 알고리즘은 자동으로 루핑을 검색해서 루핑이 발생할 수 있는 상황을 미리 막아주는 역할을 합니다. 그 뜻이 과연 무슨뜻일까요? 바로 경로가 여러개라면 하나로 줄이는 것이겠죠? 맞습니다. 스패닝 트리 알고리즘은 스위치/브리지에서 발생할 수 있는 루핑을 미리 막기 위해 두 개 이상의 경로가 발생하면 하나를 제외하고 나머지 경로를 자동으로 막아두었다가 만약 기존 경로에 문제가 생기면 막아놓은 경로를 풀어서 데이터를 전송하는 알고리즘입니다.
이 때, 한 개의 링크가 끊어져서 다른 링크가 다시 살아나서 연결을 해주는데 걸리는 시간은 약 1분 이상입니다. 그러므로 사용자들이 1분 이상을 네트워크가 끊어진 상태로 기다려야만 하는 문제가 생깁니다. 이 점을 보완하기 위해 만들어진 기술이 있는데 바로 업링크 패스트(Uplink Fast) 라는 기술입니다, 이는 링크의 복구 시간이 1분 이상 걸리는 것을 2~3초 안에 가능하도록 만든 기술입니다.
또한 시스코의 이더 채널(Ether-Channel) 기술은 여러 개의 링크가 마치 하나의 링크처럼 인식되게 하여 스패닝 트리의 시간적 단점을 보완합니다. 요즘의 스위치들은 이런 기능들을 가지고 스패닝 트리 알고리즘의 약점들을 보완하고 있습니다.
출처 - '후니의 쉽게 쓴 네트워킹'