반응형

[광고 누르면 오늘의 행운 상승!!]

스위치나 브리지에서 발생할 수 있는 루핑을 미리 막기 위해 두 개의 이상의 경로가 발생하면 하나를 제외하고 나머지 경로를 자동으로 막아 두었다가 기존 경로에 문제가 생기면 막아놓은 경로를 풀어서 데이터를 전송하는 알고리즘이다.

스패닝 트리 알고리즘에 의해서 현재의 링크가 끊어졌을 때 대기하고 있던 다른 링크가 다시 살아나서 연결을 해 주는데 걸리는 시간은 약 1분 이상이 소요가 된다. 그러니까 사용자들은 1분 이상을 네트워크가 끊어진 상태로 기다려야만 한다. 따라서 요즘의 스위치들은 여러 가지 다양한 기능을 가지고서 이러한 전통적인 스패닝 트리 알고리즘의 약점을 보완하고 있다. 예를 들어 시스코의 이더 채널(Ether Channel) 기술은 여러 개의 링크가 마치 하나의 링크처럼 인식되게 하는 기술이다.

따라서 게임방 주인이 이더 채널이 지원되는 스위치를 구매했다면, 평소에도 두 배의 속도를 낼 뿐만이 아니라 하나의 링크가 끊어져도 기다리는 시간이 전혀 없이 링크가 유지되는 장점이 있다.

이러한 이더 채널은 속도에 따라서 패스트 이더 채널(Fasterher Channel, 100메가로 연결된 포트들을 묶는 기술이다.)과 기가 이더 채널(Giga Ether Channel, 기가 비트 이더넷, 즉 1,000 메가로 연결된 포트들을 묶는 기술이다.) 등이 있고 최대 8개의 링크를 묶어서 만들 수 있게 되어있다. 또 업링크 패스트(Uplink Fast)라는 기술은 전통적인 스패닝 트리에서 링크의 복구 시간이 1분 이상 걸리는 점에 착안해서 이 복구 시간을 약 2~3초 안에 가능하도록 만든 기술이다.

이와 같이 요즘은 다양한스위칭 기술이 많기 때문에 이제는 전통적인 스패닝 트리 알고리즘으로 생각할 수 없었던 많은 기능이 제공되고 있다.

  1. 네트워크 당 하나의 루트 브리지(Root Bridge)를 갖는다 네트워크는 스위치나 브리지로 구성된 하나의 네트워크이다. 따라서 라우터에 의해 나누어지는 브로드캐스트 도메인이 하나의 네트워크라고 한다. 즉 하나의 브로드캐스트 도메인에 하나씩의 루트 브리지가 있는 것이다.

그렇다면 루트 브리지(Root Bridge)는 무엇일까? 한마디로 대장 브리지이다. 즉 스패닝 트리 프로토콜을 수행할 때 기준이 되는 브리지(스위치)이다.

  1. 루트 브리지가 아닌 나머지 모든 브리지(Non Root Bridge)는 무조건 하나씩의 루트 포트(Root Port)를 갖는다 루트 브리지가 아닌 나머지 모든 브리지를 Non Root Bridge라고 하는데, 이 Non Root Bridge당 하나씩의 루트 포트(Root Port)를 가져아 한다. 여기서 루트 포트란, 루트 브리지에 가장 빨리 갈 수 있는 포트를 말한다. 즉 루트 브리지 쪽에 가장 가까운 포트라고 볼 수 있다. 네트워크당 하나씩으 루트 브리지가 있으므로 루트 브리지를 제외한 나머지 모든 브리지는 자동으로 Non Root Bridge가 된다. 따라서 나머지 브리지들은 루트 브리지 쪽으로 가장 가까이 있는 루트 포트를 하나씩 지정해 주어야 한다.

  2. 세그먼트(Segment)당 하나씩의 데지그네이티드 포트(Designated Port)를 갖는다. 세 번쨰, 세그먼트당 하나씩의 Designated Port(우리말로는 '지정 포트'정도로 해석되고 '데지그네이티드 포트'라고 읽는다.)를 갖는다. 여기서 세그먼트란 쉽게 생각해서 브리지 또는 스위치 간에 서로 연결된 링크라고 보면 된다. 즉 브리지나 스위치가 서로 연결되어 있을 때 이 세그먼트에서 반드시 한 포트는 Designated Port로 선출되어야 한다는 것이다.

스패닝 트리 프로토콜에서 루트 포트나 제니그네이티드 포트가 아닌 나머지 모든 포트는 다 막아버린다 스패닝 트리 프로토콜에서 루트 포트나 데지그네이티드 포트를 뽑는 목적은 어떤 포트를 살릴지 결정하기 위함이다.

루트 브리지가 될지를 정하고 루트 포트나 데지그네이티드 포트가 될지를 정하려면 어떤 순서가 필요하다. 다음과 같은 4단계를 통해서 순서를 정한다.

  1. 누가 더 작은 Root BID를 가졌는가?
  2. 루트 브리지까지 Path Cost 값은 누가 더 작은가?
  3. 누구의 BID(Sender BID)가 더 낮은가?
  4. 누구의 포트 ID가 더 낮은가?

스패닝 트리 정보를 주고받기 위해서 특수한 프레임을 사용하는데 BPDU(Bridge Protocol Data Unit)이라고 부른다. 브리지의 Root BID, 루트 브리지까지 가는 경로값인 Root Path Cost, 보내는 브리지의 BID인 Sender BID, 그리고 어떤 포트에서 보냈는지를 알게 해주는 Port ID 정보 등이 실려있다.

브리지나 스위치가 부팅을 하면 이들은 각각의 포트로 BPDU를 매 2초마다 내보내면서 서로의 스패닝 트리 정보를 주고받게 된다. 즉 브리지는 이 BPDU를 서로 주고받으면서 누가 루트 브리지이고 어떤 포트가 루트 포트가 될지, 그리고 어떤 포트가 데지그네이티드 포트가 될지를 결정하게 된다. 그러니 BPDU는 스패닝 트리 프로토콜에서 우체부 아저씨같은 역할을 한다.

위 그림처럼 네트워크에 3대의 스위치가 있다. BID는 전체 64비트로 구성되어 있고 가장 앞의 16비트에는 브리지 우선순위가, 뒤에 오는 48비트에는 브리지 또는 스위치의 맥 어드레스가 위치한다. 이때 만약 디폴트 구성이라면 맨 앞에 오는 Bridge Priority는 32768이 된다.

Root Bridge를 뽑아보겠다. 루트 브리지를 뽑는 조건은 무조건 낮은 BID를 가진 녀석이 대장이 되는 것이다. 그림에서 우선 B와 C 스위치가 부팅을 시작했다고 가정하겠다.

그럼 이제 B와 C는 서로 BPDU(Bridge Protocol Data Unit)을 주고받게 된다. 지난 번에 배운 대로 BPDU는 스패닝 트리에 대한 여러 가지 정보를 담고 있으면서 매 2초에 한 번 뿌려지는 프레임이다. 이렇게 서로 BPDU를 주고받는 건 이미 배운 대로 서로의 스패닝 트리 정보를 주고받아 스패닝 트리를 완성시키기 위함이다.

브리지가 맨 처음 부팅하고 나서 내보내는 BPDU에는 Sender BID정보는 물론 자기 자신의 BID를 넣게 된다. 루트 브리지의 BID 역시 자기 자신의 BID를 넣게 된다. 왜냐하면 이 브리지는 이제 막 부팅이 끝나 다른 BPDU를 한 번도 받지 못했기 때문에 일단 이 네트워크에는 자기 혼자 있다고 생각하는 것이다. 브리지가 혼자 있는 네트워크라면 당연히 자기가 루트 브리지가 된다.

이렇게 스위치 B와 C는 루트 브리지 BID를 자기 자신의 BID로 세팅해서 BPDU를 서로 주고받았다. 위치 B와 C는 모두 각자의 BID를 루트 브리지 BID로 세세팅해서 BPDU를 보내고 있다.

먼저 B의 상황이다. 스위치 B가 BPDU를 내보내고 얼마 지나지 않아 스위치 C로부터 BPDU가 도착했다. 열어보니 여기에는 루트 브리지의 BID가 32768.3333.3333.3333으로 되어있다. 그럼 스위치 B는 자기가 알고 있던 정보 즉 루트 브리지의 BID가 32768.2222.2222.2222라는 정보와 방금 스위치 C로부터 받은 정보를 비교하게 된다.

따라서 BID가 낮은 브리지가 루트 브리지로 된다. 따라서 루트 브리지는 32768.2222.2222.2222가 되고 C에서 받은 BPDU를 무시해버린다.

C의 상황은 제일 처음 부팅한 후 자신의 BID를 루트 브리지 BID라고 해서 세팅한 BPDU를 내보내고 얼마 되지 않아 스위치 B로부터 BPDU를 받았다. 이 BPDU에는 루트 브리지 BID가 32768.2222.2222.2222로 되어있고 자신이 보낸 BID보다 낮은 BID이기 때문에 스위치 C는 자신의 BPDU에 있는 루트 브리지 BID를 스위치 B의 BID로 바꾸어 다른 곳으로 전송하게 된다.

이제 A스위치가 부팅을 시작한다. A는 다른 스위치와 마찬가지로 맨 처음 부팅했을 때는 누가 루트 브리지인지 알지 못한다. 아직 어느 누구에게도 BPDU를 받지 못했기 떄문이다. 부팅을 마친 스위치 A는 자신의 BPDU에 루트 브리지의 BID를 자기 BID인 32768.1111.1111.1111로 실어서 양쪽의 스위치 B와 스위치 C에 보냅니다

이때 벌써 스위치 B와 스위치C에서 역시 BPDU가 스위치 A쪽으로 날아오고 있다. 스위치 B와 스위치 C쪽에서 보낸 BPDU에는 루트 브리지가 어떻게 세팅되어 있을까? 이 BPDU에 들어있는 루트 브리지 BID필드에는 스위치 B의 BID인 32768.2222.2222.2222 값이 들어있다.

32768.1111.1111.1111이 더 낮은 값이기 때문에 A가 루트 브리가 된다.

만약 내가 네트워크 관리자인데 스위치 C를 꼭 루트 브리지로 만들고 싶다면 어떻게 해야할까? 그건바로 C의 BID를 스위치 A의 BID보다 낮은 값으로 만드는 것이다. 어떻게 하면 될까? 그래서 Bridge Priority 필드가 있는 것이다. 예제에서는 Bridge Priority값이 디폴트 값인 32768이었지만 이 값을 이보다 작은 수로 만든다면 그 스위치가 가장 낮은 BID를 갖게 된다. 따라서 현재 루트 브리지인 A스위치보다 더 낮은 수가 되어서 C가 루트 브리지가 되는 것이다.

Non Root Bridge의 루트 포트 선출기

모든 Non Root Bridge는 반드시 한 개의 루트 포트를 갖는다. 는 규칙을 만족시켜야 한다. 루트 포트는 루트 브리지에 가장 가까이 있는 포트를 말한다. 갖아 가까이 있다는 건 어떤 뜻일까? Path Cost가 가장 적게 드는 포트가 가장 가까이 있다는 걸 말한다.

위 그림에서 스위치B와 C에서 각각 한 개의 루트 포트를 뽑아야 한다. 루트 포트를 뽑으려면 우선 Root Path Cost는 쉽게 루트 브리지까지의 Path Cost라고 생각하면 된다. 따라서 맨 처음 루트 브리지 스위치A를 출발할 때으 Root Path Cost는 0이다.

그림에서 각 스위치들은 패스트 이더넷(100Mbps)으로 연결되어 있다고 가정하겠다. 이 경우 Path Cost는 앞에서 배운 대로 19가 된다. 따라서 스위치 B의 E0 포트에서는 Root Path Cost 값이 다음과 같다.

0 + 19 = 19

이 값은 스위치 B의 E1포트로 전달되고 다시 아래쪽 링크를 통해서 스위치 C의 E1포트 쪽으로 전달된다. 스위치 B와 스위치 C간에도 역시 100메가 통신을 하고 있다고 가정했기 때문에 스위치 C의 E1 포트에서 Root Path Cost 값은 다음과 같이 계산된다.

0 + 19 + 19 = 38

마찬가지로 스위치 C의 E0 포트의 Root Path Cost 값은 19가 된다.

일단 Root Path Cost를 계산했으니 이제 루트 포트를 선정할 차례다. (사실 이런 값을 계산 하지 않아도 대충 루트 포트를 찾을 수 있다. 어차피 루트 브리지에서 가장 가까운 포트는 눈으로 봐도 보이니까) 어쨋든 지금까지 계산한 Root Path Cost값이 낮은 스위치 B의 E0포트와 스위치 C의 E0포트가 루트 포트로 선정되었습니다.

이렇게 3가지 규칙 중 두 번째인 '모든 Non Root Bridge는 반드시 한 개의 루트 포트(Root Port)를 갖는다가 해결되었다.

출처 : 후니의 쉽게 쓴 시스코 네트워킹

반응형

+ Recent posts