[Network 용어] 스위치 스패닝 트리 프로토콜 (STP)

2020. 6. 25. 00:25Computer Science/Network

https://twitter.com/SpanningTreeDC/photo

 

Overview

 

 

스위치(브릿지)에 관한 지난 포스팅 에서 스위치의 정의와 특징에 대해 살펴보았습니다. (스위치와 브릿지는 거의 같은 기능을 수행하므로 편의상 이 글에서는 스위치로 통일하겠습니다.) 스위치는 서로 다른 네트워크 장비들을 연결해주는 허브와 같은 기능을 합니다. 다만, 콜리전 도메인을 나누어 주지 못하는 허브와는 다르게 스위치는 서로 다른 네트워크 장비들의 콜리전 도메인을 나누어서, 서로 다른 포트에 연결된 네트워크들 끼리 딜레이 없이 통신이 가능하도록 도와줍니다. (스위치는 브로드캐스트 도메인은 나누어주지 못합니다. 이 기능은 라우터가 수행합니다.)

 

 

Network Looping 

 

 

스위치를 통해 네트워크를 설계할 때 가장 주의 해야 할 사항중의 하나가 바로 루핑(Looping)입니다. 루핑이란, 네트워크 안에서 프레임이 무한정 뱅뱅 돌기 때문에 생기는 현상입니다. 이더넷 네트워크는 하나의 프레임이 전송중일 때에는 다른 네트워크 장비에서 프레임을 전송할 수 없기 때문에, 한 프레임이 이렇게 루핑 상태에 빠지게 되면, 네트워크 전체가 마비되는 결과를 가져오게 됩니다. 

 

 

루핑은 하나의 네트워크 장비(이를 앞으로 호스트라고 하겠습니다.)에서 다른 하나의 호스트로 가는 경로가 2가지 이상일 때 발생합니다. 아래 그림은 루핑을 설명할 때 자주 나오는 예제인데, A와 B 2개의 호스트가 네트워크 안에 2개의 경로로 연결되어 있습니다. 보통 이렇게 연결하는 이유는 하나의 경로를 어떤 이유로 사용할 수 없게 되었을 때, 다른 경로를 사용할 수 있도록 해서 네트워크 전반적인 안정성을 높이기 위함입니다. 하지만 의도와는 다르게 이는 제대로 작동할 수 없습니다. 이유는 다음과 같습니다.

 

 

https://linkhub.tistory.com/114

 

 

네트워크에서 A가 B에게 프레임을 전송해야 하는 상황이 있다고 가정하겠습니다. A는 B의 위치를 알 수 없으므로 우선 B의 맥 주소를 기입해서 브로드캐스트를 시도합니다. 스위치로 연결된 네트워크는 하나의 브로드캐스트 도메인에 속하기 때문에 A가 보낸 브로드캐스트 프레임은 스위치를 거치지 않고 B에게 하나, A와 가까운 스위치에게 하나 , A와 먼 스위치에게 하나 도착하게 됩니다.

 

 

스위치는 브로드캐스트 프레임이 들어온 경우에 무조건 다른 모든 포트로 이 프레임을 뿌려주는 Flooding을 하게됩니다. (Flooding에 대한 자세한 내용은 이전 포스팅을 참고해주세요) 따라서 이 프레임은 다른 스위치에 도착하게 되고, 그 스위치도 마찬가지로 브로드캐스트 프레임을 받았기 때문에 또 다시 다른 스위치로 이 프레임을 Flooding하게 됩니다. 이렇게 스위치에서 스위치로 브로드캐스팅 프레임이 계속 전송되면서 정상적인 프레임이 전송되는 것을 막아버리고 네트워크를 마비시키게 되는 것입니다.

 

 

Spanning Tree Algorithm (SPA)

 

이런 문제를 막기 위해서 고안된 것이 Spanning Tree Protocol입니다. 스패닝 트리에 대한 자세한 설명과 여러 알고리즘들은 추후에 따로 다루겠지만, 이 알고리즘의 핵심은 한 호스트에서 다른 호스트로 가는 경로가 오직 하나가 되도록 구성하는 것입니다. 실제로 스위치에는 수많은 포트들이 있고, 하나의 네트워크에는 수많은 스위치들이 있어서 호스트와 호스트를 연결하는 경우의 수가 굉장히 많지만,  스위치는 소프트웨어 적으로 스패닝 트리를 적용해서 호스트-호스트간 연결 경로를 하나로 제한하고, 나머지 포트들은 비활성화 시켜주는 것입니다. 이를 통해 네트워크 상에서 발생할 수 있는 루핑(looping)을 막아줍니다. 

 

 

 

 

 

 

 

 

Switch Spanning Tree Structure

 

 

하나의 네트워크를 구성하는 여러 스위치들이 있고, 각 스위치는 호스트와 연결된 여러 포트들이 있을 것입니다. 이 네트워크가 어떻게 스패닝 트리 프로토콜을 통해 루핑을 막는지를 살펴보도록 하겠습니다.

 

 

1. 각각의 스위치에는 BID라는 것이 있습니다. BID는 Bridge ID의 약자로, 16비트에는 스위치의 우선순위를 지정하는 정보(Bridge Priority), 나머지 48비트에는 스위치의 맥 어드레스가 저장됩니다.(총 64비트) 이 BID는 각각의 스위치를 고유하게 식별하며, 네트워크에서 루트 스위치 (연결의 중심이 되는 스위치)를 선정하는 기준이 됩니다. 네트워크에서 BID가 가장 작은 스위치가 루트 스위치가 됩니다.

 

 

2. 네트워크에서 스위치들끼리는 BPDU(Bridge Protocol Data Unit)을 주고 받습니다. 이 BPDU에는 자신의 BID, 루트 BID(처음에는 자기 자신의 BID)등 스패닝 트리에 대한 여러 가지 정보를 담고 있습니다. 네트워크가 켜지면, 스위치들은 서로 이 BPDU를 보내고 값을 갱신하면서 가장 작은 BID를 루트 스위치로 지정하고, 그 외의 여러 정보들을 세팅합니다.

 

 

3. 루트 스위치를 선정한 이후에는 각각의 스위치에서 루트 포트를 선정합니다. 루트포트는 네트워크에서 실제로 사용될 포트를 의미합니다. (루트 포트와 이후에 설명할 데지그네이티드 포트로 선정되지 않은 포트들은 이후에 네트워크 루핑을 방지하기 위해 스패닝 트리 프로토콜에 의해 비활성화 됩니다.) 루트 포트는 각각의 포트에서 루트 스위치까지의 거리 (전송속도, 물리적 거리를 모두 고려한 값) 가 가장 가까운 포트로 선정됩니다.

 

 

4. 루트 포트를 선정한 후에는 데지그네이티드 포트(Designated Port)를 선정합니다. 데지그데이티드 포트는 각각의 세그먼트(스위치와 스위치를 연결하는 단위)중에, 루트 브리지까지의 경로가 더 가까운 포트로 선정됩니다. 스패닝 트리 프로토콜에 의해서 데지그네이티드 포트와 루트 포트가 아닌 포트들은 모두 막히기 때문에 이 두 종류의 포트를 선정하는 것은 굉장히 중요합니다.

 

 

5. 이 과정을 통해 스위치로 구성된 네트워크는 각각의 호스트로 가는 경로가 유일한, 즉 스패닝 트리를 만족하게 됩니다.

 

 

 

반응형