Search
Duplicate

스위치: 2계층 장비

목차

0. Previous

이전챕터 네트워크 연결과 구성요소 챕터의 스위치에서 간단히 설명했듯이 스위치는 2계층 장비이며 2계층 주소인 MAC 주소를 기반으로 동작한다.
이번 챕터에서는 이 스위치에 대해 좀 더 자세히 알아보며 스위치가 MAC 주소를 어떻게 이해하고 활용하는지에 대해 알아본다.

특징

스위치는 네트워크 중간에서 패킷을 받아 필요한 곳에만 보내주는 네트워크의 중재자 역할을 한다.
아무 설정 없이 네트워크에 연결해도 MAC 주소를 기반으로 패킷을 전달하는 기본 동작 수행이 가능하다.
논리적으로 네트워크를 분리할 수 있는 VLAN기능을 제공한다.
네트워크의 루프를 방지하는 스패닝 트리 프로토콜(STP)과 같은 기능을 가지고 있다.
스위치는 2계층으로 통신한다.

참고: 패킷은 무엇이고 프레임은 무엇인고?

PDU(Protocol Data Unit) : 계층별로 헤더와 데이터를 합친 부분을 일컫는 단어.
각 계층마다 이 PDU를 부르는 이름이 다르며 다음과 같다.
1계층: 비트(Bits)
3계층: 패킷(Packet)
2계층: 프레임(Frame)
4계층: 세그먼트(Segment)
그밖에 애플리케이션에 속하는 3개 계층(5,6,7)은 데이터(Data)라 부른다.

1. 스위치 장비 동작

스위치는 동시에 여러 장비가 서로 간섭없이 통신하도록 도와준다.
여러 단말이 한번에 통신할 수 있어 통신하기위해 기다리거나 충돌 때문에 대기하는 문제가 해결되고 네트워크 전체 효율이 높아진다.
스위치는 전송하려는 패킷의 헤더 안에 있는 2계층 목적지 주소를 확인 후 MAC 주소 테이블에서 해당 주소가 어느 포트에 있는지 확인 후 그 포트로만 패킷을 전송한다.
테이블에 없는 도착지 주소를 가진 패킷이 들어오면 스위치는 전체 포트로 패킷을 전송한다.
핵심은, 스위치가 누가 어디에 있는지 파악하고 실제 통신이 시작되면 자신이 알고있는 위치로 패킷을 정확히 보내는 것이다.
스위치는 어떻게 정확한 위치를 파악하고 전송할 수 있을까? 스위치가 MAC주소와 단말이 위치하는 인터페이스 정보를 매핑한 MAC주소 테이블을 가지고 있기 때문이다.
MAC 주소 테이블
위와 같은 동작 방식들을 정리하면 다음 3가지로 정리할 수 있는데 이에 대해 더 자세히 알아보자.

1.1 플러딩(Flooding)

스위치를 부팅하면 그 시점에는 네트워크 관련 정보는 아무것도 없다.
그래서 이 시점의 스위치의 네트워크 통신은 자신의 역할을 할 수 없고 허브처럼 동작하는데, 이는 패킷이 들어온 포트를 제외한 모든 포트에 패킷을 전달함을 말한다.
이처럼 스위치가 허브와 같이 모든 포트로 패킷을 흘리는 동작 방식을 플러딩(Flooding)이라 한다.
부팅 후의 스위치, MAC 주소 관련 정보를 가지고 있지 않다.
이렇게 모든 포트로 패킷을 흘리는건 스위치가 LAN환경에서 동작하기에 현재는 정보가 없지만 어딘가에 장비가 있을 수 있다고 가정하고 동작하는 것이다.
MAC 주소 테이블이 비어있는 경우 모든 포트로 패킷을 보낸다(Flooding)
하지만, 계속 이렇게 플러딩을 한다면 이는 스위치의 역할을 제대로 수행한다고 볼 수 없다.
스위치가 제 역할을 수행하기 위해서는 MAC 주소 테이블을 만들 필요가 있다.
그래서 스위치는 패킷이 들어올 경우 해당 패킷 정보의 MAC 주소를 보고 이를 토대로 MAC 주소 테이블을 만들어낸다.

1.2 어드레스 러닝(Address Learning)

MAC 주소 테이블을 만들고 유지하는 과정을 어드레스 러닝이라 한다.
스위치가 제역할을 하기 위해서는 패킷의 도착지 MAC주소를 확인 후 정확한 도착지 포트로 포워딩해줄 수 있어야 한다. 그말인즉슨 스위치는 MAC 주소에 매칭되는 포트를 알고 있어야 한다는 말이다. 이러한 정보는 하늘에서 뚝 떨어지는게 아니라 스위치가 직접 테이블을 만들고 유지해야하는데, 이러한 과정들을 어드레스 러닝이라 한다.
그럼 어떻게 학습을 하며 MAC 주소 테이블을 만드는 것일까?
어드레스 러닝은 패킷의 출발지 MAC 주소 정보를 이용하는데, 패킷이 특정 포트에 들어오면 스위치는 해당 패킷의 출발지 MAC 주소와 포트 번호를 MAC 주소 테이블에 기록한다.
위 그림을 보자. 예를들어 1번 포트에서 들어온 패킷의 출발지 MAC주소가 AA일 경우 우리는 자연스럽게 Eth 1 포트에 AA주소를 가진 장비가 있다고 추론할 수 있다. 그래서 이런 방법으로 주소 정보를 학습해 테이블을 작성한다.
,어드레스 러닝은 출발지의 MAC 주소 정보를 사용하기에 브로드캐스트나 멀티캐스트에 대한 MAC 주소를 학습할 순 없다. 두 가지 모두 목적지 MAC주소 필드에서만 사용하기 때문.

1.3 포워딩/필터링(Forwarding/Filtering)

포워딩(Forwarding): 패킷이 스위치에 들어왔을 때 도착지 MAC 주소를 확인 후 MAC 테이블과 비교해 맞는 정보가 있으면 해당 포트로 패킷을 넘겨주는 것.
필터링(Filtering): 포워딩 도중 다른 포트로는 해당 패킷을 보내지 않는 것.
스위치에서는 포워딩과 필터랑 작업이 여러 포트에서 동시에 수행될 수 있다. 이렇게 동시에 수행될 수 있는 이유는 통신이 다른 포트에 영향을 주지 않기 때문이다.
스위치는 보통 유니캐스트에 대해서만 포워딩/필터링 작업을 수행한다.
BUM 트래픽(브로드캐스트, 언노은 유니캐스트, 멀티캐스트)은 출발지 MAC 주소로 브로드캐스트나 멀티캐스트 모두 출발지가 사용되지 않기에 이런 트래픽은 모두 플러딩한다.

참고: LAN에서의 ARP - 스위치 동작

이더넷 - TCP/IP 네트워크에서는 패킷을 만들기 전 통신해야 하는 단말의 MAC 주소를 알아내기 위해 ARP 브로드캐스트가 먼저 수행되야 한다. 그래서 이 ARP를 이용한 MAC 주소 습득과정에서 스위치는 출발지와 목적지의 주소를 습득할 수 있고, 실제로 유니캐스트 통신이 시작되면 이미 만들어진 MAC 주소 테이블로 패킷을 포워딩/필터링한다.
ARP, MAC 테이블은 일정 시간 지워지지 않는 시간이 있는데 이를 에이징 타임(Aging Time)이라 부른다. 그리고 일반적으로는 MAC 테이블의 에이징 타임이 단말의 ARP 에이징 타임보다 길기 때문에 이더넷 네트워크를 플러딩없이 효율적으로 운영할 수 있다.

2. VLAN

Virtual Local Area Network 하나의 물리 스위치에서 여러 개의 네트워크를 사용할 수 있는 가상화 기술

2.1 개요

하나의 스위치를 여러 개의 VLAN으로 분할할 수 있으며 각각 별도의 스위치처럼 동작한다.
VLAN은 물리적 배치와 상관없이 LAN을 논리적으로 분할 및 구성하는 기술
하나의 장비를 서로 다른 네트워크를 갖도록 논리적으로 분할한 것이기에 유니캐스트, 브로드캐스트 둘 다 VLAN간에 통신할 수 없다.
각각의 VLAN간에 통신을 하기 위해서는 다른 네트워크 간의 통신이기에 3계층 장비가 필요하다.
VLAN을 사용해 물리적으로 다른 층에 있는 단말을 하나의 VLAN을 사용해 동일한 네트워크로 묶을 수도 있다. (마치 스프링에서 횡단관심사(AOP)와 유사)
같은 층에서 부서별로 네트워크 분리, PC, IP전화기, 무선 단말과 같이 서비스나 단말의 성격에 따라 네트워크를 분리할 수 있으며, 이 경우 3계층 장비를 통해 단말 간 통신을 한다.
물리적으로 다른 층에 있는 단말끼리 네트워크로 묶을 수 있다.

2.2 종류와 특징

VLAN의 할당 방식은 다음과 같다.
포트 기반
:과거 VLAN 도입 초기시점에는 스위치가 고가의 장비였기에 하나의 스위치를 분할해 여러 네트워크에서 사용하는게 VLAN을 적용하는 목적이였다. 그리고 이처럼 위치를 논리적으로 분할해 사용하는 목적을 가진 VLAN을 포트 기반 VLAN(Port Based VLAN)이라 한다.
현재 대부분의 VLAN이 이 포트 기반 VLAN을 말하며 어떤 단말이 접속하던 스위치의 특정 포트에 VLAN을 할당하면 할당된 VLAN에 속하게 된다.
MAC 주소 기반
: 사용자들의 자리 이동이 많아지면서 나온 VLAN(Mac Based VLAN)
스위치의 고정 포트에 VLAN을 할당하는게 아니라 스위치에 연결되는 단말의 MAC주소를 기반으로 VLAN을 할당한다.
단말에 따라 VLAN정보가 바뀔수 있기에 다이나믹 VLAN(Dynamic VLAN)이라고도 한다.
포트 기반 VLAN과 MAC 기반 VLAN
이 두가지 방식의 가장 큰 차이점은 포트 기반 VLAN이 하나의 단말 PC로 1번 포트에 접속하면 VLAN10에 속하고 4번 포트에 연결하면 VLAN20에 속하면서 VLAN이 변경된다면, MAC 기반 VLAN에서는 VLAN할당의 기준이 포트가 아닌 PC의 MAC 주소이기때문에 해당 PC는 어느 포트에 접속하더라도 동일한 VLAN이 할당된다.

추세

데이터 센터에서 스위치 VLAN은 포트 기반 VLAN으로 구성하는게 일반적이지만, 최근 사용자의 이동성을 요구하는 최근 스마트 오피스들의 요구로 MAC 기반 VLAN 구성이 점차 증가하는 추세다.
하지만, 아직은 포트기반 VLAN으로 내용을 다루겠다.

2.3VLAN 모드(Trunk/Access) 동작 방식

고가의 스위치 하나를 최대한 잘 써먹기 위해서 여러 포트를 그룹핑해 VLAN으로 만든다고 얘기를 했다. 그리고 이 VLAN간의 통신은 물리적으로 같은 장비니까 로컬 네트워크처럼 될 꺼라는 생각을 할 수 있지만 그렇지 않다. VLAN이 다르면 별도의 스위치에 연결된 것과 같기에 3계층 장비를 사용해서 통신을 해야한다.
하나의 스위치에 다음과 같이 VLAN을 사용해 네트워크를 분리했다고 하자.
3개의 VLAN으로 네트워크가 분리되어 있다.
이 상황에서 스위치를 서로 연결해야 하는 경우 각 VLAN끼리 통신하려면 VLAN 갯수만큼 포트를 연결해야 한다. VLAN으로 분할된 스위치는 물리적인 별도의 스위치처럼 취급된다.
위 그림을 보면 3개의 VLAN이 있기에 스위치를 서로 연결할 때도 3개의 포트를 연결해야 한다.
그럼 VLAN이 3개가아니라 수십 수백개가 있다면 어떨까? 그럼 VLAN별로 포트를 연결하는 것만으로도 포트의 낭비가 심해지게 된다. 그래서 이 문제를 해결하기위해 VLAN 태그 기능이 생겼다.

VLAN태그 기능?

이는 하나의 포트에 여러 VLAN을 함께 전송할 수 있게 해주는 기능으로 이 포트를 태그(Tagged)포트 또는 트렁크(Trunk)포트라 한다.
그럼 어떻게 이게 가능한걸까? 정답은 VLAN ID 다. 각 계층에서 MAC주소, IP주소를 통해 특정 장비에게 정확히 패킷을 전달할 수 있듯이 VLAN ID 필드를 이더넷 프레임 중간에 끼워넣어서 원하는 VLAN으로 전송하면 수신측에서는 이 VLAN ID를 제거 후 해당하는 VLAN으로 패킷을 보낼 수 있다.
기존 이더넷 프레임은 다음과 같이 구성되어 있다.
그리고 이제 여기에 VLAN ID 필드를 끼워넣으면 된다.
이렇게 VLAN ID가 추가되면서 이제는 하나의 태그 포트로 유연하게 네트워크를 디자인 할 수 있다.
그리고 여기서 한 가지 더 추가된 것이 있는데, 바로 MAC 테이블에 VLAN 필드가 추가되었다는 것이다. 지금까지 기존에는 MAC주소와 Port정보를 담아뒀던 MAC 테이블에 VLAN 필드가 추가되어 다른 VLAN끼리 통신하지 못하게 되었다.
이젠 VLAN별로 MAC주소 테이블이 존재하는 것처럼 동작한다.

정리

지금까지 말한 내용들을 정리해보면 다음과 같다.
VLAN은 물리적으로 상관없이 논리적으로 네트워크를 분리하는 기술이다.
VLAN간의 통신은 별도의 스위치로 취급하기에 L3 라우터 장비가 있어야 한다.
VLAN을 이용해 다른 층에 있는 장비들을 하나의 VLAN으로 묶을 수 있다(유사 AOP)
VLAN 의 종류는 포트 기반, MAC 주소 기반 두가지이며 포트 기반이 많이 쓰인다.
VLAN 태그 기능을 이용해 하나의 태그 포트(Tagged Port)로 여러 VLAN으로 전송이 가능하다.
VLAN 태그 기능을 사용하기 위해 일반 이더넷 프레임 중간에 VLAN ID를 끼워넣어 전송한다.
⇒ 태그포트로 패킷이 들어오면 태그를 벗겨내며 태그된 VLAN으로 패킷을 전송한다.
MAC 테이블에 VLAN을 지정하는 필드가 추가된다.

3. STP

STP(Spanning Tree Protocol)은 루프를 확인하고 적절히 포트를 사용하지 못하게 만들어 루프를예방하는 메커니즘이며 루프가 생기지 않도록 유지하는게 STP의 목적이다.
그럼 루프란 무엇이기에 루프가 생기는걸 막고 그 상태를 유지하려 하는걸까? STP에 대해 학습하기전에 우선 루프가 무엇이고 어째서 문제인지 알아보자.

3.1 SPoF(Single Point Of Failure: 단일 장애점)

SPoF는 하나의 시스템이나 구성요소에서 고장이 발생했을 때 전체 시스템 작동이 멈추는 요소를 말한다. 우측 그림은 하나의 장비나 구성 요소로 전체 네트워크에 장애가 발생하는 상황이다.
만약 네트워크를 스위치 하나로 구성했다고 했을때 스위치에 장애가 발생하면 전체 네트워크는 장애가 발생할 것이다.

스위치를 두 대 이상으로 네트워크를 디자인하면 되지 않을까?

이렇게 생각할 수 있다. 한 대라서 문제가 발생한 것이니 두 대 이상의 스위치로 디자인을 하면 하나가 고장나도 하나가 살아있으니 괜찮지 않을까? 괜찮지 않다.
다수의 스위치로 네트워크를 디자인하면 패킷이 네트워크를 따라 계속 전송되기에 네트워크를 마비시킬 수 있다. 이런 상황을 네트워크 루프 (Loop)라 하는데, 이런 루프를 예방하기 위해서 STP가 필요한 것이다. 우선 루프에 대해 조금 더 알아보자.

3.2 루프(Loop)란?

네트워크 루프라는 단어를 들으면 무엇이 떠오르는가?
단어 그대로 네트워크에 연결된 모양이 고리처럼 순회하는 형태로 구성된 상황을 말한다. 패킷이 특정 도달점에 도착하고 사라지는게 아니라 여러 스위치를 순회하며 계속 루프를 도는 것을 말하는데, 이는 곧 불필요한 네트워크 비용낭비로 네트워크가 마비되고 통신이 안 될 수 있다. 그럼 루프가 발생하는 이유는 무엇일까?
3가지 큰 이유가 있는데 대부분은 브로드캐스트 스톰으로 인한 문제다.
Loop.png
브로드캐스트 스톰부터 루프가 발생하는 3가지 이유에 대해 조금 더 자세히 알아보자.

브로드캐스트 스톰(Storm)

네트워크가 루프 구조인 상태에서 단말에서 브로드캐스트를 발생시키면 스위치는 이 패킷을 패킷이 유입된 포트를 제외한 모든 포트로 플러딩을 하는데, 루프 구조로 된 네트워크 구조에서는 스위치간에 무한으로 플러딩이 되면서 브로드캐스트 스톰이 발생을 한다.
심지어 2계층 헤더에는 3계층의 TTL(Time to Live)과 같은 패킷 수명조차 없기에 루프가 발생하면 패킷이 죽지않고 계속 살아남기에 패킷 하나가 전체 네트워크 대역폭을 차지할 수 있다.
브로드캐스트 스톰이 발생하는 루프 구조

스위치 MAC 러닝 중복 문제

루프 구조 상태에서는 유니캐스트도 문제를 일으킨다.
스위치는 출발지 MAC 주소를 통해 Addres Learning을 하는데 직접 전달되는 패킷과 스위치를 돌아 도착지로 들어간 패킷 간의 포트가 달라 MAC 주소를 정상적으로 학습할 수 없다. 또한, 스위치 MAC 주소 테이블에서는 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있는데 동일한 MAC주소가 여러 포트에서 학습되면 MAC 테이블이 반복 갱신되어 정상적으로 동작할 수 없다.
이러한 현상으르 MAC 어드레스 플래핑(MAC Address Flapping)이라 부른다.
위 그림을 보면 AA라는 동일한 MAC 주소에 포트가 Eth1과 Eth2로 변경된다. 이런 경우 스위치가 정상적으로 동작하지 못하고 패킷을 플러딩한다.
스위치에서는 이런 문제를 예방하기 위해 스위치 설정으로 다음과 같이 처리할 수 있다.
경고 메세지를 관리자에게 알려준다.
수시로 일어나는 플래핑 현상을 학습하지 않도록 자동으로 조치한다.

예방책 - 그래서 다시 STP로 !

네트워크에 루프가 발생하면 네트워크가 정상적으로 동작하지 않기 때문에 루프가 발생하고 대처하는것은 너무 늦다. 그래서 미리 예방책을 실행해서 루프가 발생하지 않도록 해야한다.
루프 구성 포트중에 하나의 포트만 사용하지 못하도록 셧다운(shutdown)해도 루프를 예방할 수 있는데 이를 수동으로 하는건 좋지 않다. 찾기도 힘들뿐더러 다시 사용을 해야하는 상황이 오면 또 수동으로 동작해야 한다.
그래서 루프를 자동 감지해 포트를 차단하고 장애 때문에 우회로가 없을 경우 차단된 포트를 스위치 스스로 풀어주는 STP(Spanning Tree Protocol)이 개발되었다.

3.3 STP

그럼 어떻게 STP를 이용해 루프를 예방할까?
우선, 전체 스위치가 어떻게 연결되어있는지 알아야 한다. 이를 알기 위해서는 스위치 간 정보를 전달하는 방법이 필요한데 이를 위해 스위치는 BPDU(Bridge Protocol Data Unit)라는 프로토콜을 통해 스위치 간 정보를 전달하고 수집된 정보로 전체 네트워크 트리를 만들어 루프 구간을 확인한다.

BPDU Format

BPDU 프로토콜 헤더와 Bridge ID정보
1.
Protocol Identifier
: Always 0x0000
예전 L2 기술에서 사용할 수 있는 공통적인 프로토콜을 정의하려 할 때 나온게 BPDU다. 그리고 이 때 STP에서 BPDU를 쓰기로 하고 Protocol ID 0x0000을 가져가게 된다. (현재까지 STP외에 사용하는 곳이 없어 다른 아이디가 존재하지 않는다. )
2.
Protocol Version
:STP가 하나만 있는게아니라 발전하면서 새로운 표준들이 나오게되는데 이를 구분하기 위한 필드다. 최초의 STP뿐아니라 RSTP, MST까지 나오면서 이를 구분한다.
3.
BPDU Type
:BPDU Type은 크게 2가지가 있다. Configuration BPDU(이하 Config BPDU)라는 루트만이 만들어서 2초마다 전송할 수 있는 BPDU가 있고, TCN(Topology Change Notification) BPDU라고 내 (fwd 상태인) 인터페이스 중에서 다운되거나 문제가 발생하면 Topology Change를 다른 모든 곳에 알려주기 위해서 Spanning Tree를 다시 계산해야 하기에 보내는 BPDU가 있다.
But, RSTP가 나오면서 TCN BPDU에 문제가 있다는 점을 알게되면서, TCN 역할도 Config BPDU로 보내면 되지 않겠나해서? Config BPDU에 보내게 되며 이는 0x02 라는 value를 사용하게 된다.
정리하면
일반 STP는 Config BPDU, TCN BPDU가 있다.
개선된 RSTP부터는 Config BPDU(0x02)만 사용한다.
4.
Flags
:이 BPDU가 어떤 역할을 하는 BPDU인지와 현재 스위치의 상태를 알려주기위한 정보를 담고있는 필드이다. 0번(Topology Change Ack)과 7번(Topology Change)는 BPDU Type의 TCN BPDU와는 다르다.
5.
Root Bridge ID
6.
Root Path Cost
7.
Sending Bridge ID
8.
Sending Port ID
9.
Message Age
: BPDU가 만들어지고 얼마나 시간이 지났는가에 대한 정보
10.
Max Age
: BPDU의 수명으로 최대 얼만큼 살아남을 수 있는지에 대한 정보 (default 20초)
11.
Hello Time
: Config BPDU를 보내는 주기를 정하는 정보(default 2초)
12.
Forwarding Delay
: 스위치 포트의 상태가 다음 단계로 넘어갈 때 그 시간을 지정하는 정보(default 15초)
이 BPDU에 스위치의 정보와 식별자가 들어가고 이런 정보들이 스위치 간에 서로 교환되면서 루프파악이 가능해지는데, 이렇게 확인된 루프 지점을 데이터 트래픽이 통과하지 못하게 차단해서 루프를 예방한다.

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

STP(Spanning Tree Protocol)가 동작중인 스위치에선 루프를 막기위해 스위치 포트에 신규스위치가 연결되면 바로 트래픽이 흐르지 않게 차단한다.
그리고 이 포트로 트래픽이 흘러드 되는지(루프 구조가 아닌지) 파악하기 위해 BPDU를 기다려 학습 후에 구조를 파악 후 트래픽을 흘리거나 루프 구조인인 경우 차단을 유지한다.
이런 스위치 포트의 상태와 변경 과정은 다음 4가지로 구분할 수 있다.
Blocking
패킷 데이터를 차단한 상태로 상대방이 보내는 BPDU를 기다린다.
총 20초인 Max Age 기간 동안 상대방 스위치에서 BPDU를 받지 못했거나 후순위 BPDU를 받았을 때 포트는 리스닝 상태로변경된다.
BPDU 기본 교환 주기는 2초이고 10번의 BPDU를 기다린다.
Listening
해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계
자신의 BPDU 정보를 상대방에게 전송하기 시작한다.
총 15초 동안 대기한다.
Learning
해당 포트를 포워딩하기로 결정하고 실제로 패킷 포워딩이 일어날 때 스위치가 동작할 수 있게 Address Learning하는 단계
15초 동안 대기한다.
Forwarding
패킷을 포워딩하는 단계로 정상적인 통신이 가능한 단계다.
스위치에 신규 장비가 연결되었을때 정상적으로 통신이 되기까지 50초 정도 가량이 소요된다.
이는 스위치 뿐 아니라 일반 단말을 연결하더라도 동일하다.
기본 STP 상태 변화
여기서 한 가지 예외를 빼고는 모두 위와같이 50초 가량이 소요되는데, 만약 다운된 링크가 자신의 인터페이스인 경우 토폴로지가 변했음을 직접 감시할 수 있기 때문에 Max Age(20초)를 거치지 않고 Listening부터 STP 상태 변화가 이뤄진다.
이처럼 STP가 활성화 되있을 경우 루프 방지를 위해 상당히 방어적으로 동작을 하는데, 이 때문에 장애가 발생하거나 스위치 이상으로 생각되는 경우가 많다. 예를 들어 부팅 시간이 빠른 OS가 DHCP 네트워크에 접속할 때 부팅 단계에서 IP를 요청하지만 스위치 포트가 포워딩 상태가 되지 않아 IP를 정상적으로 할당받지 못하는 경우가 많다.

STP 동작 방식

스위치간의 루프를 예방하기위한 STP는 루프를 예방하기위해 다음과 같이 동작한다.
1.
하나의 루트(Root) 스위치 선정
a.
전체 네트워크에서 하나의 루트 스위치 선정
b.
자신을 전체 네트워크의 대표 스위치로 적은 BPDU를 옆 스위치로 전달
2.
루트가 아닌 스위치 중 하나의 루트 포트를 선정
a.
루트 브릿지로 가는 경로가 가장 짧은 포트를 루트 포트라 한다.
b.
루트 브릿지에서 보낸 BPDU를 받는 포트다.
3.
하나의 세그먼트에 하나의 지정(Designated)포트를 선정한다.
a.
스위치와 스위치가 연결되는 포트는 하나의 지정 포트(Designated Port)를 선정한다.
b.
스위치 간 연결에서 이미 루트 포트로 선정된 경우 반대쪽이 지정포트로 선정되어 양쪽 모두 포워딩 상태가 된다.
c.
스위치 간 연결에서 루트 포트가 없을 경우 한 쪽은 지정포트 한쪽은 대체 포트(Alternate, Non-designated)가 되어 차단 상태가 된다.
루트 포트와 지정 포트의 관계. BPDU가 지정 포트에서 나와 루트 포트로 들어간다.

향상된 STP - RSTP, MST

STP(Spanning Tree Protocol)을 활성화한 스위치의 상태 변화는 4단계(Blocking, Listening, Learning, Forwarding)로 새로운 스위치가 포워딩 상태가 될 때까지 30~50초가 소요된다.
결코 적은 시간이 아니다보니 TCP 기반 애플리케이션에서 네트워크가 끊겼을 때 30초를 기다리지 못해 STP 장애가 생기면서 통신이 끊길 수 있다. 또한, VLAN 환경에서 각 VLAN별로 STP를 계산하면서 부하가 발생할 수 있다. 그래서 이러한 문제를 개선하기 위해 향상된 STP가 나왔는데 이는 다음과 같다.

RSTP(Rapid Spanning Tree Protocol)

이름부터 Rapid가 붙었기에 우리는 이 STP 방식이 기존 STP에 비교해서 속도부분에서 개선되었다는걸 어렵지않게 추측할 수 있다.
RSTP는 기존 STP에서 스위치중 하나가 문제가 발생해서 백업 경로를 활성화하는데 30~50초가 걸리는 문제를 해결하기 위해 나온 향상된 STP 방식으로 절체 시간이 2~3초로 짧아서 일반적인 TCP 기반 애플리케이션에서 세션을 유지할 수 있게 된다.
그럼 어떻게 30~50초가 걸리는 시간이 2~3초로 짧아질 수 있는 것일까?
이는 BPDU 의 포맷중 Flags 필드는 8비트인데 기존 STP는 토폴로지 변경과 관련된 두 가지 메세지(TCN, TCA BPDU)만 있지만 RSTP는 8비트 전부를 활용해서 다양한 정보를 주고받는다.
BPDU Flags 다양한 정보를 공유한다.
다음 그림은 기존 STP에서 말단 스위치가 토폴로지 변경이 발생했을 경우 어떻게 루트 브릿지까지 변경보고를 보내고 루트에서 연산 이후 변경된 토폴로지 정보를 알리는 과정이다.
일반 STP 토폴로지 변경 시 과정
토폴로지 변경시 말단 스위치부터 루트까지 올라갔다가 다시 재연산 후 다시 말단 스위치까지 보내는 과정을 매번 하는것은 모든 스위치까지 전파되는 예비시간도 고려해야 하기 때문에 정보를 확정하는데 시간이 오래걸린다.
하지만, RSTP에서는 토폴로지 변경이 일어난 스위치 자신이 모든 네트워크에 토폴로지 변경을 직접 전파할 수 있다.
RSTP의 토폴로지 변화 과정
실제로 RSTP는 불과 2~3초 안에 장애 복구가 가능해 장애가 발생해 경로가 절체되더라도 애플리케이션 세션이 끊기지 않아 보다 안정적으로 네트우어크를 운영할 수 있다.

MST(Multiple Spanning Tree)

MST(Multiple Spanning Tree)는 CST와 PVST의 단점을 보완하기위해 개발된 STP이다.
그럼 CST는 무엇이고 PVST는 무엇일까? 그리고 이 두 키워드의 단점은 무엇일까?
우선 CST는 Common Spanning Tree의 약어로 우리가 알고 있는 그 기존의 STP방식을 뜻한다.
CST는 VLAN 갯수가 몇개든 하나의 스패닝 트리만 동작하는데, 그 덕에 관리 부하는 적다. 하지만, 루프가 생기는 토폴로지에서 한 개의 포트와 회선만 활성화되기에 효율적인 자원 활용이 힘든편이다.
그리고 가장 큰 문제는 VLAN마다 모두 최적의 경로가 다를 수 있다는 점이다.
VLAN 10 은 A, B, C, D스위치가 있다고 할 때 A - C - D가 가장 빠르다고 할 때 VLAN 20A - B - D가 최단 경로일 수 있다. 하지만 CST에서는 이런 경로를 모두 고려하지 않기에 VLAN 20도 최단 경로가 아닌 A - C - D 경로를 이용해야 한다
이러한 문제를 해결하기 위해 나온게 PVST(Per Vlan Spanning Tree)인데 VLAN마다 다른 스패닝 트리 프로세스가 동작하게끔 해 VLAN마다 별도의 경로와 트리를 만들수 있게 해준다.
그래서 VLAN10A-C-D경로를 사용하고 VLAN20A-B-D 경로를 사용할 수 있게 해주는 것이다.
이는 VLAN마다 별도의 블록 포트를 지정해 네트워크 로드를 셰어링 하도록 구성함으로써 가능하다.
VLAN마다 별도 STP가 동작하는 PVST. VLAN마다 다른 경로를 이용할 수 있어 로드 셰어링이 가능하다.
하지만 STP는 스위치에 많은 부담을 주기 때문에(2초마다 교환하기 때문) PVST는 VLAN마다 STP를 별도로 유지해야한다는건 더 큰 부담이 된다.
이런이유로 MST(Multiple Spanning Tree)가 개발되었다.
MST는 여러 VLAN을 그룹으로 묶어서 그룹별로 별도의 STP가 동작한다.
예를 들면 100개의 VLAN이 있다고 할 때 기존 PVST가 100개의 STP를 유지해야 한다면 MST는 25개 정도로 그룹을 묶어 1~25번, 26~50번, 51~75번, 76~100번까지 4개의 그룹에 4개의 STP를 운영하는 것으로 PVST보다 훨씬 적은 STP를 유지하면서도 로드셰어링 기능도 같이 사용할 수 있게된다.
일반적으로 대체 경로의 개수나 용도에 따라 MST의 STP 프로세스 갯수를 정의한다.
MST에서는 리전 개념이 도입되어 여러 개의 VLAN을 하나의 리전으로 묶을 수 있다.
리전 하나가 스패닝 트리가 된다.

참고 - 스위치의 구조와 스위치에 IP주소가 할당된 이유

스위치의 구조는 다음과 같이 크게 2가지로 나뉜다.
스위치 관리용 컨트롤 플레인(Control Plane)
패킷을 포워딩하는 데이터 플레인(Data Plane)
STP, Telnet, SSH, Web과 같은 서비스는 컨트롤 플레인에서 수행된다.
스위치는 2계층에서 동작하는 장비여서 MAC주소만 이해할 수 있기에 스위치의 동작 자체로는 IP가 필요 없다. 하지만, 일정 규모 이상 네트워크에서 운영되는 스위치는 관리 목적의 IP주소가 할당된다.
스위치는 컨트롤 플레인과 데이터 플레인으로 나뉜다.

다음 챕터로

이전 챕터로