IT 환경에서는 SPoF로 인한 장애를 피하기 위해 노력한다.
SPoF는 Single Point of Failure , 단일 장애점이라는 뜻으로 하나의 요소 때문에 전체 시스템에 장애가 발생하는 지점을 말한다.
네트워크에서도 하나의 장비 고장으로 전체 네트워크가 마비되는 것을 막기 위해 이중화, 다중화된 네트워크를 디자인하고 구성한다.
네트워크를 다음과 같이 라우터 하나로 구성했을 때 해당 라우터에 장애가 발생하면 전체 네트워크에 장애가 발생한다.
이런 SPoF를 피하기 위해 여러 장비로 네트워크를 디자인하지만 이는 네트워크 루프를 발생시킬 수 있다.
루프는 네트워크에 연결된 모양이 고리처럼 되돌아오는 형태로 구성된 상황을 말한다.
이는 인지하기 힘들지만 루프 상황이 발생했을 때 네트워크가 마비되고 통신이 안 되는 상황이 발생한다.
큰 이유들이 있지만 대부분 브로드캐스트 스톰으로 인한 문제일 수 있다.
루프 구조로 네트워크가 연결된 상태에서 단말에서 브로드캐스트를 발생시키면 스위치는 이 패킷을 패킷이 유입된 포트를 제외한 모든 포트로 플러딩 한다.
이렇게 플러딩 된 패킷은 다른 스위치로도 보내지고, 다른 스위치도 또 플러딩 한다. 루프 구조 상태에서는 이 패킷이 지속적으로 돌아가게 되는데, 이걸 브로드캐스트 스톰이라고 한다.
3 계층에서는 TTL이라는 패킷이 수명을 가지고 있지만 스위치가 확인하는 2 계층 헤더에는 TTL과 같은 라이프타임 메커니즘이 없어 루프가 발생하면 패킷이 죽지 않고 계속해서 돌기 때문에 네트워크 대역폭이 점차 줄어 장애가 발생할 수 있다.
패킷을 처리하는 데도 서버는 메모리와 CPU를 사용한다.
브로드캐스트 스톰상황이 발생하면 우선 모든 네트워크에 접속된 단말의 속도가 느려진다. 그리고 브로드캐스트를 처리하기 위해 CPU 사용률이 높아진다. 메모리에도 차곡차곡 데이터가 저장된다. 그러다가 네트워크 대역폭이 마비가 되었기 때문에 네트워크 접속 속도가 매우 느려진다.
그렇다면 수동으로 루프를 찾아 강제로 사용하지 못하게 해야 할까?
복잡한 케이블 연결을 이용해 루프를 찾아내는 것이 매우 힘들다, 또한 장애가 발생하면 해당 포트를 다시 수동으로 사용하도록 해야 한다. 사람이 개입하는 방법으로는 네트워크 장애에 대응할 수 없다.
이러한 이유로 루프를 자동으로 감지해 포트를 차단하고 장애 때문에 우회로가 없을 때 차단된 포트를 스위치 스스로 다시 풀어주는 스패닝 트리 프로토콜이 개발되었다.
STP
SPanning Tree Protocol의 약자인 STP는 스패닝 트리 프로토콜을 의미한다. 이는 루프를 확인하면 적절히 포트를 사용하지 못하게 만들어 루프를 예방한다.
이를 위해선 스위치가 전체적인 스위치 연결 상황을 파악해야 하는데, 이때 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 사용해 스위치 간에 정보를 전달하고 이렇게 수집된 정보를 이용해 전체 네트워크 트리를 만들어 루프 구간을 확인한다.
BPDU는 스위치 간 고유 식별자가 들어가고 이런 정보들이 스위치 간에 서로 교환되면서 루프 파악이 가능해진다.
스패닝 트리 프로토콜이 동작 중인 스위치에서는 루프를 막기 위해 스위치 포트에 신규 스위치가 연결되면 바로 트래픽이 흐르지 않도록 차단한다..
그리고 해당 포트로 트래픽이 흘러도 되는지 확인하기 위해 BPDU을 통해 학습하고 토폴로지를 확인한 이후 트래픽을 흘리거나 루프 구조라면 차단을 유지한다.
차단 상태에서 트래픽이 흐를 때까지 스위치 포트의 상태는 다음 4가지로 구분된다.
- Blocking
(20s) - Listening
(15s) - Learning
(15s) - Forwarding
따라서 스위치에 신규로 장비를 붙이면 통신하는 데까지 50여 초가 소요된다. 이는 스위치를 연결하는 경우뿐만 아니라 일반 단말을 연결하더라도 동일한 시간이 필요하다.
이때 혼란이 올 수 있는 상황은 부팅이 빠른 OS가 DHCP 네트워크에 접속할 때 부팅 단계에서 IP할당을 요청하지만 스위치 포트가 포워딩 상태가 되지 않아 IP를 정상적으로 할당받지 못하는 경우가 있다.
STP 동작방식
모든 스위치는 처음에 자신을 루트 스위치로 인식해 동작한다. BPDU를 통해 2초마다 자신이 루트 스위칭임을 광고하는데 새로운 스위치가 들어오면 서로 교환된 BPDU에 들어 있는 브리지 ID 값을 비교한다.
이때 브릿지 ID 값이 더 적은 스위치를 루트 스위치로 선정하고 루트 스위치로 선정된 스위치가 BPUD를 다른 스위치 쪽으로 보낸다.
RSTP, MST
스패닝 트리 프로토콜은 루프를 예방하기 위해 같은 네트워크에 속한 모든 스위치까지 BPDU가 전달되는 시간을 고려한다. 그렇기 때문에 블로킹 포트가 포워딩 상태로 변경될 때까지 30~50초가 소요된다.
통신에 가장 많이 사용되는 TCP 기반 애플리케이션이 네트워크가 끊겼을 때 30초를 기다리지 못하다보니 STP 기반 네트워크에 장애가 생기면 통신이 끊길 수 있다.
RSTP(Rapid Spanning Tree Protocol)은 2~3초 정도로 절체 시간이 짧아 일반적인 TCP 기반 애플리케이션이 세션을 유지할 수 있게 된다.
기본적인 구성과 동작 방식은 STP와 동일하지만 BPDU 메시지 형식이 다양해져 여러 가지 상태 메시지를 교환할 수 있습니다.
기존 STP에서는 토폴로지가 변경되면 말단 스위치에서 루트 브릿지까지 변경 보고를 보내고 루트 브리지가 그에 대한 연산을 다시 완료하고 이후 변경된 토폴로지 정보를 말단 스위치까지 보내는 과정을 거칩니다.
추가로 이런 정보가 네트워크에 있는 모든 스위치까지 전파되는 예비시간까지 고려해야 하므로 정보를 확정하는데 오랜 시간이 걸렸습니다.
하지만 RSTP는 기존 STP가 루트 스위치가 모든 네트워크에 변경된 토폴로지를 전파하는 것이 아닌 변경이 일어난 스위치 자신이 모든 네트워크에 토폴로지 변경을 직접 전파할 수 있습니다.
이는 2~3초 안에 장애 복구가 가능하므로 장애가 발생해 경로가 절체되더라도 애플리케이션 세션이 끊기지 않아 보다 안정적으로 네트워크를 운영하는 데 도움이 됩니다.
MST(Multiple Spanning Tree)의 기본 아이디어는 매우 단순하다.
여러 개의 VLAN을 그룹으로 묶고 그 그룹마다 별도의 스패닝 트리가 동작합니다.
MST는 리전 개념이 도입되어 여러 개의 VLAN을 하나의 리전으로 묶을 수 있습니다. 리전 하나가 스패닝 트리 하나가 됩니다.
예를 들어 11~50번의 VLAN과 101~150번의 VLAN이 있다면 각 각을 하나의 리전으로 묶으면 단 두 개의 스패닝 트리로 100개의 VLAN을 관리할 수 있습니다.
이전에 사용되던 CST(Common Spanning Tree)는 VLAN 개수와 상관없이 스패닝 트리 한 개만 동작했는데, 이는 루프가 생기는 토폴로지에서 한 개의 포트와 회선만 활성화되므로 자원을 효율적으로 사용할 수 없고 VLAN마다 최적의 경로가 다를 수 있어 통신을 멀리 돌아서해야 하는 경우도 있습니다.
CST를 해결하기 위해 PVST(Per Vlan Spanning Tree)가 개발되었는데, 이는 VLAN마다 다른 스패닝 트리 프로세스가 동작하므로 VLAN마다 별도의 경로와 트리를 만들 수 있었습니다. 그 덕분에 최적의 경로를 디자인하고 VLAN마다 별도의 블록 포트를 지정해 네트워크 로드를 셰어링 하도록 구성할 수 있었지만 이는 모든 VLAN마다 별도의 스패닝 트리를 유지해야 하므로 더 많은 부담이 생겼습니다.
결국 이러한 단점을 보완하기 위해나온것이 MST입니다.
'느리게 변하는 지식 > Network' 카테고리의 다른 글
FTP Active, Passive (0) | 2023.02.11 |
---|---|
라우팅, 스위칭 (0) | 2023.02.09 |
VLAN (0) | 2023.01.12 |
MAC 주소 (0) | 2023.01.10 |
커넥터와 트랜시버 (0) | 2023.01.10 |
댓글