스위치 3부작의 마지막이다!
스위치의 기능
오늘은 마지막 STP에 대해 배워볼 거당!
STP(Spanning Tree Protocol) : 루프를 확인하고 적절히 포트를 사용하지 못하게 해 루프를 예방하는 메커니즘 👉🏻 루프가 생기지 않도록 유지하는게 목적
루프? 그게 뭔데?
알아볼 게 많으니 우선 SPoF에 대해 간단히 살펴보고 루프, 그리고 STP에 대해 차례로 알아보도록 하자.
SPoF(Single Point of Failure: 단일 장애점)은 하나의 요소 때문에 장애가 발생할 경우, 전체 시스템에 장애가 발생하는 지점을 말한다.
즉, 하나의 시스템이나 구성 요소에서 고장이 발생했을 때 전체 시스템의 작동이멈추는 요소
그림처럼 네트워크를 스위치 하나로 구성 👉🏻 스위치에 장애 발생 👉🏻 전체 네트워크에 장애 발생
그래서 SPoF를 피하기 위해 스위치 두 대로 네트워크를 디자인한다.
그런데 두 대 이상의 스위치로 디자인하면 패킷이 네트워크를 따라 계속 전송되므로 네트워크를 마비시킬 수 있는 또 다른 문제가 발생한다.
이런 상황을 네트워크 루프(Loop)라고 하며, 이를 예방하기 위해 STP가 필요한 것이다.
1. 루프란?
루프(Loop) : 말 그대로 네트워크에 연결된 모양이 고리처럼 되돌아오는 형태로 구성된 상황
이렇게 루프 상황이 발생하면 네트워크가 마비되고 통신이 불가능해진다.
루프로 문제가 발생하는 원인부터 알아보자.
1.1 브로드캐스트 스톰(Storm)
네트워크가 루프 구조로 연결되어 있을 때,
- 단말에서 발생한 브로드캐스트 패킷 → 스위치를 통해 다른 모든 포트로 플러딩(확산)
- 이 플러딩된 패킷은 또 다른 스위치로 보내짐
- 받은 스위치에서도 동일한 과정을 반복
👉🏻 이런 과정이 루프 구조 때문에 계속해서 반복되면 이를 '브로드캐스트 스톰'이라고 부른다.
- 또한 2계층 헤더에는 패킷의 생명주기를 나타내는 TTL(Time to Live)*과 같은 메커니즘이 없다.
- 그래서 패킷이 무한히 살아남아 전체 네트워크 대역폭을 차지하게 된다.
* 참고 : 루프가 없는(Loop Free)3계층 - TTL(Time To Live)
정리하자면, 브로드캐스트 스톰은
- 네트워크의 전체 대역폭을 차지
- 모든 단말이 브로드캐스트 처리를 위해 시스템 리소스를 사용
- 결과적으로 스위치와 네트워크에 연결된 단말 간의 통신이 거의 불가능한 상태가 됨
1.2 스위치 MAC 러닝 중복 문제
루프 구조 상태에서는 유니캐스트도 문제를 일으킨다.
- 스위치는 출발지 MAC 주소를 통해 Addres Learning을 한다.
- 직접 전달되는 패킷과 스위치를 돌아 도착지로 들어간 패킷 간의 포트가 다름
- MAC 주소를 정상적으로 학습할 수 없다.
- 스위치의 MAC 주소 테이블은 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있음
- 동일한 MAC 주소가 여러 포트에서 학습되면 MAC 테이블이 계속해서 갱신
- 제대로 동작할 수 없다.
👉🏻 이렇게 MAC 테이블이 제대로 만들어지지 않는 현상을 MAC 어드레스 플래핑(MAC Address Flapping)이라 한다.
그림처럼
- AA에서 출발한 패킷이 스위치 C를 통해 스위치 A와 B로 전달
- 스위치 A가 이 패킷을 다시 포워딩하여 스위치 B로 전달
- 스위치 B는 동일한 출발지 AA를 가진 패킷을 스위치 C와 A를 통해 각각 다른 포트로 전달 받게 됨
- 이로 인해 스위치 B에서는 eth1 포트와 eth2 포트에서 AA 주소를 반복적으로 습득
👉🏻 MAC 어드레스 플래핑 현상이 발생
스위치에서 학습된 주소의 포트가 계속 변경 👉🏻 스위치가 정상적으로 동작하지 못하고 패킷을 플러딩
네트워크에 루프가 발생할 경우 네트워크가 정상적으로 동작하지 않으므로 루프가 생기지 않도록 미리 예방해야 한다.
루프 구성 포트 중 하나의 포트만 사용하지 못하도록 셧다운(Shutdown)되어 있으면 루프를 예방할 수 있다.
하지만 네트워크의 SPOF를 예방하기 위해 스위치를 두 개 이상 디자인했는데, 다시 수동으로 루프를 찾아 강제로 사용하지 못하게 하는 방법은 바람직하지 않다.
찾기도 힘들뿐더러 다시 사용을 해야하는 상황이 오면 또 수동으로 처리해줘야 하기 때문
그래서 루프를 자동 감지해 포트를 차단하고 장애 때문에 우회로가 없을 경우 차단된 포트를 스위치 스스로 풀어주는 STP(Spanning Tree Protocol)이 개발되었다.
2. STP란?
스패닝 트리 프로토콜(Spanning Tree Protocol) : 루프를 확인하고 적절히 포트를 사용하지 못하게 만들어 루프를 예방하는 메커니즘
그래서 어떻게 하는데?
우선 전체 스위치가 어떻게 연결되는지 알아야 한다.
전체적인 스위치 연결 상황을 파악하려면 스위치 간에 정보를 전달하는 방법이 필요한데, 이를 위해 스위치는 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 사용한다.
BPDU로 스위치 간에 정보를 전달하고 수집해 전체 네트워크 트리를 만들어 루프 구간을 확인한다.
이렇게 정보들이 스위치 간에 서로 교환되면서 루프 파악이 가능하고, 이 지점을 데이터 트래픽이 통과하지 못하도록 차단해 루프를 예방한다.
2.1 스위치 포트의 상태 및 변경 과정
STP가 동작 중인 스위치가 루프를 막는 방법
- 스위치 포트에 신규 스위치가 연결되면 바로 트래픽이 흐르지 않도록 차단
- 해당 포트로 트래픽이 흘러도 되는지 확인하기 위해 BPDU를 기다려 학습하고 구조를 파악
- 정상 : 트래픽을 흘림 / 루프 구조 : 차단 상태 유지
차단 상태에서 트래픽이 흐를 때까지 스위치 포트의 상태는 다음 4가지로 구분할 수 있다.
- Blocking
- 패킷 데이터를 차단한 상태로 상대방이 보내는 BPDU를 기다린다.
- Max Age(총 20초) 기간 동안 상대방 스위치에서 BPDU를 받지 못했거나, 후순위 BPDU를 받았을 때 포트는 리스닝 상태로 변경
- BPDU 기본 교환 주기는 2초 / 10번의 BPDU를 기다린다.
- Listening
- 해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계
- 이 상태부터는 자신의 BPDU 정보를 상대방에게 전송하기 시작한다.
- 총 15초 동안 대기
- Learning
- 이미 해당 포트를 포워딩하기로 결정 - 실제로 패킷 포워딩이 일어날 때 스위치가 곧바로 동작하도록 MAC 주소를 러닝(Address Learning)하는 단계
- 총 15초 동안 대기
- Forwarding
- 패킷을 포워딩하는 단계
- 정상적인 통신이 가능
👉🏻 스위치에 신규로 장비를 붙이면 통신하는 데 50초 정도가 소요된다.
스위치는 루프를 예방하기 위해 매우 방어적으로 동작하는데, 새로 연결된 단말이 스위치일 가능성이 있어 BPDU를 일정 시간 이상 기다려 스위치 여부를 파악한다.
이로 인해 스위치를 연결하는 경우뿐만 아니라 일반단말을 연결하더라도 동일한 시간이 필요하다.
- 다운된 링크가 자신의 인터페이스인 경우에는 30초
- 토폴로지가 변했음을 직접 감지 가능
- Max Age를 거치지 않고 리스닝부터 STP 상태 변화가 즉시 이루어짐
STP가 활성화된 경우 스위치 포트는 곧바로 포워딩 상태가 되지 않는다.
이로 인해 다양한 장애가 발생하거나 스위치 이상으로 생각되는 경우가 많다.
특히 부팅 시간이 매우 빠른 OS가 DHCP 네트워크에 접속할 때
부팅 단계에서 IP를 요청하지만 스위치 포트가 포워딩 상태가 되지않아 IP를 정상적으로 할당받지 못하는 경우가 많다.
2.2 STP 동작 방식
스패닝 트리 프로토콜은 루프를 예방하기 위해 다음과 같이 동작한다.
- 하나의 루트(Root) 스위치 선정
- 전체 네트워크에 하나의 루트 스위치를 선정
- 자신을 전체 네트워크의 대표 스위치로 적은 BPDU를옆 스위치로 전달
- 루트가 아닌 스위치 중 하나의 루트 포트를 선정
- 루트 브릿지로 가는 경로가 가장 짧은 포트가 루트 포트
- 루트 브릿지에서 보낸 BPDU를 받는 포트이다.
- 하나의 세그먼트에 하나의 지정(Designated) 포트를 선정
- 스위치와 스위치가 연결되는 포트는 하나의 지정 포트(Designated Port)를 선정
- 스위치 간의 연결에서 이미 루트 포트로 선정된 경우
- 반대쪽이 지정 포트로 선정되어 양쪽 모두 포워딩 상태
- 스위치 간의 연결에서 아무도 루트 포트가 아닐 경우
- 한쪽은 지정 포트로 선정되고 다른 한쪽은 대체 포트(Alternate, Non-designated)가 되어 차단 상태
- BPDU가 전달되는 포트
3. 향상된 STP(RSTP, MST)
STP(Spanning Tree Protocol)을 활성화한 스위치의 상태 변화는 4단계로 새로운 스위치가 포워딩 상태가 될 때까지 30~50초가 소요된다.
통신에 가장 많이 쓰이는 TCP 기반 애플리케이션이 네트워크가 끊겼을 때 30초를 기다리지 못하다보니 STP 기반 네트워크에 장애가 생기면 통신이 끊길 수 있다.
또한, 스위치에 여러 개의 VLAN이 있으면 각 VLAN 별로 STP를 계산하면서 부하가 발생하기도 한다.
이 문제를 해결하기 위해 RSTP를 사용한다.
3.1 RSTP(Rapid Spanning Tree Protocol)
- 문제가 발생한 경우 백업 경로를 활성화하는데 30~50초가 걸리는 기존 STP의 문제를 해결하기 위해 나온 향상된 STP 방식
- 절체 시간이 2~3초로 짧아서 일반적인 TCP 기반 애플리케이션에서 세션을 유지할 수 있게 된다.
- 기본적인 구성과 동작 방식은 STP와 같지만 BPDU 메시지 형식이 다양해져 여러 가지 상태 메시지를 교환할 수 있다.
- STP는 일반 토폴로지 변경과 관련된 두 가지 메시지(TCN, TCABPDU)만 있지만
- RSTP는 8개 비트를 모두 활용해 다양한 정보를 주위 스위치와 주고받을 수 있다.
- 기존 STP
- 토폴로지 변경 시 말단 스위치에서 루트 브릿지까지 변경 보고
- 루트 브릿지가 그에 대한 연산을 다시 완료
- 이후 변경된 토폴로지 정보를 말단 스위치까지 보내는 과정
- 이런 정보가 네트워크에 있는 모든 스위치까지 전파되는 예비시간까지 고려 → 해야 하므로 정보를 확정하는 데 시간이 오래 걸린다.
- RSTP
- 토폴로지 변경이 일어난 스위치 자신이 모든 네트워크에 토폴로지 변경을 직접 전파
→ 루트 브릿지에 보고하고 전파되는 형식이 아니라 터미널 스위치가 토폴로지 변화를 다른 브릿지에게 직접 알려준다.
- 2~3초 안에 장애 복구가 가능
- 장애가 발생해 경로가 절체되더라도 애플리케이션 세션이 끊기지 않음
- 보다 안정적으로 네트워크를 운영 가능
3.2 MST(Multiple Spanning Tree)
: CST와 PVST의 단점을 보완하기위해 개발된 STP
PVST???
일반 스패닝 트리 프로토콜(Common Spanning Tree, CST)의 또 다른 문제는 멀리 돌아 통신해야 할 경우가 생긴다는 것
- VLAN이 많더라도 스패닝 트리는 한 개만 동작 → 스위치의 관리 부하가 적음
- 하지만 루프가 생기는 토폴로지에서도 한 개의 포트와 회선만 활성화 → 자원을 효율적으로 활용할 수 없다.
- 또한 VLAN마다 최적의 경로가 다를 수 있음 → 포트 하나만 사용할 수 있다보니 멀리 돌아 통신해야 할 경우도 생김
- 이 문제를 해결하기 위해 PVST(Per Vlan Spanning Tree)가 개발
- VLAN마다 다른 스패닝 트리 프로세스가 동작 → 각각 별도의 경로와 트리를 만들 수 있음
- 최적의 경로를 디자인하고 VLAN마다 별도의 블록 포트를 지정
- 네트워크 로드를 셰어링하도록 구성 가능
하지만 STP 자체가 스위치에 많은 부담을 주는 프로토콜(2초마다 교환)인데,
PVST는 모든 VLAN마다 별도의 스패닝 트리를 유지해야 하므로 더 많은 부담이 되었다.
이런 CST와 PVST의 단점을 보완하기 위해 MST(Multiple Spanning Tree)가 개발됨.
MST???
- 여러 개의 VLAN을 그룹으로 묶고 그 그룹마다 별도의 스패닝 트리가 동작
- PVST보다 훨씬 적은 스패닝 트리 프로토콜 프로세스
- PVST의 장점인 로드 셰어링 기능도 함께 사용 가능
- 일반적으로 대체 경로의 개수나 용도에 따라 MST의 프로세스 개수를 정의
- 리전 개념이 도입되어 여러 개의 VLAN을 하나의 리전으로 묶을 수 있다.
- 리전 하나가 스패닝 트리 하나
- ex) 11~50번 VLAN과 101~150번 VLAN
- 11~50번을 하나의 리전
- 51~100번을 하나의 리전
- 두 개의 스패닝 트리로 100개의 VLAN을 관리 가능
참고
⌜IT 엔지니어를 위한 네트워크 입문⌟ 길벗, 2023
[4장] 스위치: 2계층 장비 | 4.3 STP (p.144~158)
* 책을 참고해 필요한 내용을 정리한 것이므로, 책의 내용과 다를 수 있습니다.
GitHub 댓글