[네트워크] STP

2022. 5. 23. 23:07TIL💡/Algorithms

STP란

스패닝 트리 프로토콜(Spanning Tree Protocol)은 루프를 확인하고 적절히 포트를 사용하지 못하게 만들어 루프를 예방하는 매커니즘이다. 용어 그대로 잘 뻗은 나무처럼 뿌리부터 가지까지 루프가 생기지 않도록 유지하는 것이 스패닝 트리 프로토콜의 목적이다.

 

스패닝 트리 프로토콜을 이용해 루프를 예방하려면 전체 스위치가 어떻게 연결되는지 알아야 한다. 전체적인 스위치 연결 상황을 파악하려면 스위치 간에 정보를 전달하는 방법이 필요하다. 이를 위해 스위치는 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 통해 스위치 간에 정보를 전달하고 이렇게 수집된 정보를 이용해 전체 네트워크 트리를 만들어 루프 구간을 확인한다.

 

좌측이 일반적인 BPDU 프로토콜의 헤더

 

✨ 왜 루프를 확인해야하는가

대부분 브로드캐스트 스톰(패킷이 안 죽고 계속 돌아감)으로 인해 루프가 발생한다.

 

참고) 3계층 헤더에는 TTL(Time to Live)라는 패킷 수명이 있어서 별도의 프로토콜이 불필요하다.

하지만 2계층에는 이러한 라이프타임 매커니즘이 없어서 루프가 발생하면 패킷이 죽지 않고 계속 살아남아 패킷 하나가 전체 네트워크 대역폭을 차지할 수 있다.

 

루프 구조에서는 브로드캐스트 뿐만 아니라 유니캐스트도 문제를 일으킨다. 같은 패킷이 루프를 돌아 도착지 쪽에서 중복 수신되는 혼란을 일으키기도 하지만 중간에 있는 스위치에서도 MAC 러닝 문제가 발생한다. 스위치는 출발지 MAC 주소를 학습하는데 직접 전달되는 패킷과 스위치를 돌아 들어간 패킷 간의 포트가 달라 MAC 주소를 정상적으로 학습할 수 없다. 스위치 MAC 주소 테이블에서는 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있으므로 동일한 MAC 주소가 여러 포트에서 학습되면 MAC 테이블이 반복 갱신되어 정상적으로 동작하지 않는다. 이 현상을 MAC 어드레스 플래핑(MAC Address Flapping)이라고 부른다.

 

 

스위치 포트의 상태 및 변경 과정

스패닝 트리 프로토콜이 동작 중인 스위치에서는 루프를 막기 위해 스위치 포트에 신규 스위치가 연결되면 바로 트래픽이 흐르지 않도록 차단한다. 그리고 해당 포트로 트래픽이 흘러도 되는지 확인하기 위해 BPDU를 기다려 학습하고 구조를 파악한 후 트래픽을 흘리거나 루프 구조인 경우, 차단 상태를 유지한다.

 

📌 Blocking

✔︎ 패킷 데이터를 차단한 상태로 상대방이 보내는 BPDU를 기다린다.

✔︎ 총 20초인 Max Age 기간 동안 상대방 스위치에서 BPDU를 받지 못했거나 후순위 BPDU를 받았을 때 포트는 리스닝 상태로 변경된다.

✔︎ BPDU 기본 교환 주기는 2초이고 10번의 BPDU를 기다린다.

 

📌 Listening

✔︎ 리스닝 상태는 해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계이다. 이 상태부터는 자신의 BPDU 정보를 상대방에게 전송하기 시작한다.

✔︎ 총 15초 동안 대기한다.

 

📌 Learning

✔︎ 러닝 상태는 이미 해당 포트를 포워딩하기로 결정하고 실제로 패킷 포워딩이 일어날 때 스위치가 곧바로 동작하도록 MAC 주소를 러닝하는 단계이다.

✔︎ 총 15초 동안 대기한다.

 

📌 Forwarding

✔︎ 패킷을 포워딩하는 단계이다. 정상적인 통신이 가능하다.