반응형

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

스패닝 트리 프로토콜은 '출발지에서 목적지까지 두 개 이상의 경로가 있는 스위치(브리지) 네트워크에서 한 개의 경로를 제외하고 나머지는 모두 막는다' 라는 첫 번째 과제와 '사용하던 경로에 문제가 생기면 막았던 나머지 경로 중 하나를 열어준다'라는 두 번째 과제가 있었다. 지금까지 우리는 첫 번째 과제를 수행한 것이다. 그렇다면 네트워크에 변화가 생기면 스패닝 트리는 어떻게 바뀌는지 또한 얼마만에 바뀌는지 알아보겠다.

그림에서 보는 것처럼 이제 루트 브리지, 루트 포트, 데지그네이티드 포트 선정이 잘 끝났고 스위치A와 스위치B 사이의 링크와 스위치A와 스위치C 사이의 링크는 포워딩 상태가 되었습니다. 또 스위치 B와 스위치 C사이는 블로킹 상태가 되어 스패닝 트리에 평화가 찾아왔습니다. 이때 루트 브리지는 매 2초마다 헬로(Hello) BPDU를 Non Root Bridge로 전송하고, 이 헬로 BPDU를 받은 Non Root Bridge들은 이것을 자신의 데지그네이티드 포트를 통해 다시 전달한다.(여기서 2초는 디폴트 헬로타임)

여기서 Non Root Bridge들은 매 2초마다 들어오는 루트 브리지의 헬로패킷을 보면서 '아, 루트 브리지까지 가는 길이 살아있구나!' 라는 걸 알게 된다. 그 길을 따라서 헬로패킷이 왔을 테니까.

이때 만약 Non Root Bridge들이 지정된 시간 동안 헬로패킷을 받지 못하면 중간 경로에 뭔가 문제가 발생했다고 생각하고, 드디어 스패닝 트리를 재편성하는 모드로 들어가게 된다.

  • Hello Time(헬로타임) 루트 브리지가 얼마 만에 한 번씩 헬로 BPDU를 보내는지에 대한 시간이다. 즉 루트 브리지는 자신에게 연결된 브리지들에게 헬로 BPDU를 헬로타임마다 한 번씩 보내게 되는데, 디폴트 헬로타임은 2초이다.

  • Max Age(맥스 에이지) 브리지들이 루트 브리지로부터 헬로패킷을 받지 못하면 맥스 에이지 시간 동안 기다린 후 스패닝 트리 구조 변경을 시작한다. 즉 맥스 에이지란, 브리지들이 루트 브리지로부터 얼마동안 헬로패킷을 받지 못했을 때 루트 브리지가 죽었다고 생각하고 새로운 스패닝 트리를 만들기 시작하는가에 대한 시간이다.

  • Forwarding Delay(포워딩 딜레이) 브리지 포트가 블로킹 상태에서 포워딩 상태로 넘어갈 때까지 기다리는 시간이다. 여기서 중요한 점은 블로킹 포트에서 리스닝 상태로 넘어간 포트는 포워딩 딜레이 시간 동안 기다린 후 러닝 상태로 넘어가고, 러닝 상태에서 다시 포워딩 딜레이 시간 동안 기다린 후 포워딩 상태로 넘어가기 때문에 사실 블로킹에서 포워딩으로 넘어가는데 걸리는 시간은 포워딩 딜레이 시간의 두 배가 된다.

이번에는 브리지에 문제가 생겼을 때 어떻게 브리지가 새로운 스패닝 트리를 만들어 나가는지 알아보겠다. 루트 브리지는 자기와 연결된 나머지 브리지들에게 헬로패킷을 매2초마다 뿌리고, 이 패킷을 받은 브리지는 자기와 연결된 나머지 브리지들에게 헬로패킷을 매 2초마다 뿌리고, 이 패킷을 받은 브리지들은 자신으 데지그네이티드 포트로 다시 그 헬로패킷을 전달합니다.

이때 갑자기 스위치A와 스위치C간의 링크에 문제가 생겨 링크가 끊어졌다.

이렇게 되면 이제 스위치 C는 루트 브리지로부터의 헬로패킷을 받지 못한다. 헬로패킷을 2초에 한 번씩 받아야 하는 스위치 C에 2초 후 헬로패킷이 들어오지 않으면 어떤 일이 일어날까?

정답은 '아무 일도 일어나지 않는다'이다. 스위치 C가 2초에 한 번씩 루트 브리지로부터 받아야 하는 헬로패킷을 받지 못하더라도 아직은 아무 일도 일어나지 않는다. 왜냐하면 아직 맥스 에이지(MAX Age) 시간이 지나지 않기 때문이다. 스위치에서 맥스 에이지 시간은 디폴트로 20초이다. 따라서 헬로패킷을 받지 못하더라도 스위치 c는 20초 간 루트 브리지로부터 연락을 기다린다. 그런데 20초가 지나도록 아무 연락이 없다면 드디어 스패닝 트리의 변경을 시작하게 된다.

20초동안 기다려도 루트 브리지로부터의 연락이 없자 스위치 C는 E0 포트를 통해서 들어오던 헬로패킷을 받기를 포기한다. 하지만 이 시간에도 스위치 B는 계속 루트 브리지로부터 헬로패킷을 받고있다. 따라서 스위치 B가 루트 포트(스위치B의 E0포트)를 통해 받은 헬로패킷을 다시 데지그네이티드 포트(스위치 B의 E1포트)를 통해 뿌리고 그 BPDU를 스위치 C의 E1포트를 통해 받게 된다.

비록 스위치 C의 E1포트가 블로킹 상태이지만 BPDU는 받을 수 있는 것을 아는가?

이제 스위치 C는 E1포트를 루트 포트로 정하게 된다. 루트 포트로 선정된 E1포트는 곧 포워딩 상태로 넘어가고 E0 포트는 블로킹 상태로 넘어간다. 그런데 이때 스위치 C의 E1포트는 블로킹에서 바로 포워딩으로 넘어가지 않습니다. 이미 고 계신 대로 블로킹에서 리스닝을 거치고, 러닝을 거쳐 포딩 상태로 넘어가기 때문에 디폴트 포워딩 딜레이 타임의의 2배인 30초가 추가로 필하게 된다.

아래 그림은 새로 바뀐 스패닝 트리이다.

정리하면,

  1. 맨 처음 루트 브리지로부터 헬로패킷을 2초마다 받던 스위치 C에 갑자기 헬로패킷이 들어오지 않게 된다.
  2. 참을성 많은 스위치 C는 자신의 맥스 에이지 시간인 20초 동안 루트 브리지로부터의 헬로패킷을 기다려보지만, 20초가 지나도 헬로패킷은 E0 포트를 통해 들어오지 않는다.
  3. 이렇게 되자 스위치C는 스위치B에서 전달해 준 헬로 패킷을 자신의 E1포트로 받아들여 E1포트를 루트 포트로 세팅하게 된다.
  4. 물론 Non Designated 포트로 블로킹 상태에 있던 스위치 C의 E1포트를 루트 포트로 선정했다고 해서 바로 포워딩 상태로 넘어가는 건 아니다. 디폴트 포워딩 딜레이 시간인 15초를 먼저 리스닝 상태에서 기다리고, 다시 한 번 러닝 상태에서 15초를 추가로 기다린 후 드디어 데이터 전송이 가능한 포워딩 상태로 넘어가게 된다. 이때 기존의 루트 포트로 포워딩 상태였던 스위치 C의 E0포트는 블로킹이 된다.

여기서 알 수 있는 것 처럼 한 링크가 끊어졌을 때 스패닝 트리 프로토콜을 이용해 다른 경로를 살리는 데 걸리는 시간이 대략 50초(20초 + 15초 + 15초)정도 소요된다. 즉 우리 생각처럼 하나의 링크가 끊어진다고 바로 다음 링크가 살아나는 것이 아니다. 그래서 스패닝 트리 프로토콜을 개선할 많은 기법이 소개되고 있다. 대표적인 해결책으로 RSTP(Rapid Spanning Tree Protocol)가 있고, 그밖에 Port Fast, Up-link Fast, Backbone Fast 등이 있다.

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

반응형

+ Recent posts