[Network] 스위치 알아보기

영근·2024년 10월 24일
0

Network

목록 보기
7/9
post-thumbnail

<IT엔지니어를 위한 네트워크 입문> 책을 함께 읽는 스터디를 진행하며 올리는 포스팅입니다.
스터디 repository

Intro

1장을 공부하며 OSI 2계층, 데이터 링크 계층에서는 MAC 주소 체계를 이용해 정확한 주소로 통신이 되도록 한다는 목적이 있다는 것을 공부했습니다.

2계층에서 사용하는 장비 중 스위치는 MAC 주소를 보고 통신해야 할 포트를 지정해 내보내는 역할을 합니다.

뿐만 아니라, 한 대의 장비에서 논리적으로 네트워크를 분리할 수 있는 VLAN 기능과, 네트워크 루프를 방지하는 스패닝 트리 프로토콜(STP)과 같은 기능을 수행하기도 합니다.

이번 포스팅에서는 2계층 장비인 스위치에 대해 자세히 알아보겠습니다.


동작

허브와 달리, 스위치는 2계층 헤더 속 MAC 주소 정보를 통해 필요한 곳에만 패킷을 보내줍니다. 따라서 스위치로 인해 여러 장비가 서로 간섭 없이 통신할 수 있게 되었습니다.

이는 스위치가 MAC 주소 테이블을 가지고 있기 때문에 가능합니다.

MAC 주소 테이블

MAC 주소 테이블은 단말의 주소인 MAC 주소와, 단말이 위치하는 인터페이스 정보를 매핑한 테이블입니다.

스위치는 MAC 주소 테이블을 참고해, 해당 주소가 어느 포트에 있는지 확인 후 해당 패킷을 그 포트로만 전송합니다. 이 때, 테이블에 없는 도착지 주소를 가진 패킷이 들어오면 스위치는 전체 포트로 패킷을 전송합니다.

이더넷-TCP/IP 네트워크에서는 ARP 브로드캐스트를 통해 이미 MAC 주소 테이블이 만들어진 상태로 통신이 시작됩니다. 이 때 ARP와 MAC 테이블은 일정시간 동안 지워지지 않는데, 이 시간을 에이징 타임이라 합니다.

일반적으로 MAC 테이블의 에이징 타임이 ARP 에이징 타임보다 길어, 이더넷 네트워크를 플러딩 없이 효율적으로 운영할 수 있습니다.

플러딩

스위치가 허브와 같이 모든 포트로 패킷을 전달하는 동작 방식을 플러딩이라 합니다.

스위치는 LAN에서 동작하기 때문에, 정보를 갖고 있지 않아도 어딘가에 장비가 있을 수 있다고 가정하여 이러한 플러딩 작업을 수행합니다.

이더넷-TCP/IP 네트워크에서는 ARP 브로드캐스트를 미리 주고받은 후 데이터가 전달 되므로, 실제로 데이터를 주고 받을 때는 스위치가 패킷을 플러딩할 일이 없습니다.

따라서 스위치가 패킷을 플러딩한다는 것은 스위치가 정상적으로 동작하지 않거나, 공격이 수행되는 상황임을 의미합니다.

이러한 공격들은 스위치에게 엉뚱한 MAC 주소를 습득시키거나, 스위치의 MAC 테이블을 꽉 차게 해 플러딩 동작을 유도하여 패킷을 도청하는 방식으로 이루어집니다.

이 외에도, ARP 포이즈닝 기법을 이용해 모니터링해야 할 IP의 MAC 주소가 공격자 자신인 것처럼 속여 원하는 통신을 받는 방법을 사용하기도 합니다.


어드레스 러닝

MAC 주소 테이블을 만들고 유지하는 과정을 어드레스 러닝이라고 합니다.

패킷이 특정 포트에 들어오면, 스위치는 해당 패킷의 출발지 MAC 주소와 포트 번호를 MAC 주소 테이블에 기록합니다. 어드레스 러닝은 출발지의 MAC 주소 정보를 사용하므로, 브로드캐스트나 멀티 캐스트에 대한 MAC 주소를 학습할 수 없습니다.

포워딩/필터링

스위치는 패킷이 들어오면 자신이 가진 MAC 테이블과 비교해 매치되는 해당 포트로 패킷을 포워딩합니다. 이때 다른 포트로는 해당 패킷을 보내지 않는데, 이를 필터링이라고 합니다.

포워딩/필터링 작업은 여러 포트에서 동시에 수행될 수 있으며, 통신이 다른 포트에 영향을 미치지 않습니다. 또한, 일반적인 유니캐스트에 대해서만 수행되며 BUM 트래픽(브로드캐스트, 언노운 유니캐스트, 멀티캐스트)은 모두 출발지가 사용되지 않으므로 모두 플러딩합니다.


VLAN

VLAN(Virtual Local Area Network)은 물리적 배치와 상관없이 LAN을 논리적으로 분할, 구성하는 기술입니다.

최근 많은 단말이 네트워크에 연결되는 점, 과도한 브로드캐스트로 인한 단말 성능 저하 방지, 보안을 위한 차단 용도 등으로 인해 네트워크 분리의 필요성이 생겨났습니다.

VLAN은 하나의 장비에서 작동하지만, 서로 다른 네트워크를 갖도록 논리적으로 분할한 것이르모 VLAN 간 통신은 3계층 장비 없이 불가능합니다.

종류

VLAN 할당 방식에는 포트 기반의 VLANMAC 주소 기반의 VLAN이 있습니다.

포트 기반의 VLAN

  • 어떤 단말이 접속하든지 스위치의 특정 포트에 VLAN을 할당하면 할당된 VLAN에 속하게 됩니다.

MAC 기반의 VLAN

  • 스위치에 연결되는 단말의 MAC 주소를 기반으로 VLAN을 할당하는 방법입니다.
  • 어떤 포트에 접속하더라도 동일한 VLAN이 할당됩니다.

VLAN 모드 동작 방식

스위치 포트에 VLAN을 설정해 네트워크를 분리하면 효율적으로 장비를 사용할 수 있습니다.

여러 개의 VLAN이 존재하며 서로 스위치를 연결해야 하는 경우 각 VLAN 개수만큼 포트를 연결해야 합니다. 따라서 VLAN의 개수가 많아질 수록 VLAN 별로 포트를 연결하면 많은 포트가 낭비됩니다.

이를 해결하기 위해 VLAN 태그 기능이 등장했습니다. 이를 통해 하나의 포트에 여러 개의 VLAN을 함께 전송할 수 있습니다. 이 포트를 태그(Tagged) 포트 또는 트렁크(Trunk) 포트라 합니다. 이와 반대로 일반적인 포트를 언태그(Untagged) 포트 또는 액세스(Access) 포트라 합니다.

  • 태그 포트 : 여러 네트워크를 하나의 물리적 포트로 전달하는 데 사용
  • 언태그 포트 : 하나의 VLAN에 속한 경우에만 사용

태그 포트는 통신 시 이더넷 프레임 중간에 VLAN ID 필드를 끼워넣고, 수신 측에서는 이 VLAN ID를 제거하면서 VLAN ID의 VLAN으로 패킷을 보냅니다.

태그 포트 기능이 생기면서 스위치의 MAC 주소 테이블에도 VLAN을 지정하는 필드가 추가되었습니다. 따라서 하나의 스위치에서도 VLAN별 MAC 주소 테이블이 존재하는 것처럼 동작합니다.


STP

SPoF(Single Point of Failure)란, 하나의 시스템이나 구성 요소에서 고장이 발생했을 때 전체 시스템의 작동이 멈추는 요소를 말합니다. 이를 방지하기 위해 네트워크는 이중화, 다중화 방식을 사용합니다.

SPoF를 피하기 위해 스위치 두 대를 사용해 네트워크를 디자인하지만, 이러한 디자인으로 인해 네트워크 루프가 발생할 수 있습니다.

루프

루프(Loop)란, 네트워크에 연결된 모양이 고리처름 되돌아오는 형태로 구성된 상황을 말합니다.

루프 상황이 발생하는 이유에는 아래의 두 가지가 있습니다.

  • 브로드캐스트 스톰
  • 스위치 MAC 러닝 중복

브로드캐스트 스톰

루프 구조의 네트워크에서 브로드캐스트를 발생시키면, 스위치는 이 패킷을 유입된 포트를 제외한 모든 포트에 플러딩합니다. 이를 받은 다른 스위치가 또 다시 이 패킷을 플러딩하면서 패킷이 계속 돌아가는 상황을 브로드캐스트 스톰이라고 합니다.

스위치가 확인하는 2계층 헤더에는 3계층의 TTL같은 라이프타임 매커니즘이 없어, 브로드캐스트 스톰이 발생하면 패킷 하나가 전체 네트워크 대역폭을 차지할 수 있습니다.

이 상황에서는 케이블을 제거하기 전까지 네트워크가 마비된 것 같은 상태가 지속됩니다.

MAC 어드레스 플래핑

루프 구조 상태에서는 직접 전달되는 패킷과 스위치를 돌아 들어간 패킷 간 포트가 달라, MAC 주소를 정상적으로 학습할 수 없습니다.

스위치의 MAC 주소 테이블에서는 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있습니다. 따라서 하나의 MAC 주소가 여러 포트에서 학습되면 MAC 테이블이 반복 갱신되어 정상적으로 동작하지 않습니다. 이를 MAC 어드레스 플래핑이라고 부릅니다.

이 현상이 발생하면 스위치가 정상적으로 동작하지 못하고 패킷을 플러딩하게 됩니다.

따라서, 이러한 루프 현상을 자동 감지해 포트를 차단하고, 장애 때문에 우회로가 없을 때 차단된 포트를 스위치 스스로 다시 풀어주는 스패닝 트리 프로토콜이 개발되었습니다.

STP

스패닝 트리 프로토콜(Spanning Tree Protocol)루프를 확인하고, 적절히 포트를 사용하지 못하게 만들어 루프를 예방하는 매커니즘입니다.

STP를 사용하기 위해서는 전체 스위치가 어떻게 연결되는지를 파악해야 합니다. 따라서 스위치는 BPDU(Bridge Protocol Data Unit)를 통해 스위치 간에 정보를 전달하여 전체 네트워크 트리를 만들어 루프를 확인합니다.

BPDU에는 스위치가 갖고 있는 고유 값 등의 정보가 담겨있는데, 이 정보들이 스위치 간 서로 교환되면서 루프를 파악합니다. 루프가 파악되면 그 지점을 차단해 루프를 예방하는 방식입니다.

스위치 포트의 상태

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

차단 상태에서 트래픽이 흐를 때까지 스위치 포트의 상태는 다음의 4가지로 구분됩니다.

  • Blocking

    • 패킷 데이터를 차단한 상태로 상대방이 보내는 BPDU를 기다립니다.
    • 20초의 Max Age 기간 동안 상대방 스위치에서 BPDU를 받지 못했거나 후순위 BPDU를 받았을 때 리스닝 상태로 변경됩니다.
    • 기본 교환 주기는 2초이고, 10번의 BPDU를 기다립니다.
  • Listening

    • 해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계입니다.
    • 자신의 BPDU 정보를 상대방에게 전송하기 시작합니다.
    • 15초 동안 대기합니다.
  • Learning

    • 이미 해당 포트를 포워딩하기로 결정하고, 실제로 패킷 포워딩이 일어날 때 스위치가 곧바로 동작하도록 MAC 주소를 러닝합니다.
    • 15초 동안 대기합니다.
  • Forwarding

    • 패킷을 포워딩하는 단계입니다.
    • 정상적인 통신이 가능합니다.

이러한 단계를 거쳐야 하기 때문에, 스위치에 장비를 새로 붙이면 통신하는 데 50여 초가 소요됩니다. 새로 연결된 단말이 스위치일 가능성이 있기 때문입니다.

특정 링크가 다운되어서 차단된 포트가 포워딩될 때도, 20초의 Max Age를 거쳐 총 50초 후 포워딩 상태로 변경됩니다.
이때 다운된 링크가 자신의 인터페이스일 경우, 토폴로지가 변했음을 직접 감지할 수 있어 리스닝부터 상태 변화가 이루어집니다. 따라서 30초가 소요됩니다.

이렇게 STP가 활성화될 경우 포트가 포워딩 상태가 되는 데에 오랜 시간이 걸리게 됩니다.

이때, 일반 PC나 서버가 연결되는 포트라면 좀 더 빠르게 포워딩 상태로 변경되어야 하기 때문에 해당 포트를 포트 패스트(Port Fast) 상태로 설정합니다. 포트 패스트 상태로 설정된 포트는 BPDU 대기, 습득 과정 없이 곧바로 포워딩 상태로 포트를 사용할 있습니다.

포트 패스트를 설정한 포트에 스위치가 접속되면 루프가 생길 수 있기 때문에, 별도로 해당 포트에 BPDU가 들어오자마자 차단하는 BPDU 가드 등의 기술이 함께 사용되어야 합니다.

STP 동작 방식

STP는 네트워크 상에서 뿌리 역할을 하는 가장 높은 스위치를 선출하고, 그 스위치를 통해 모든 BPDU가 교환되도록 하는데, 그 스위치를 루트 스위치라고 합니다.

BPDU를 교환하는 과정에서 BPDU에 들어있는 브릿지 ID값을 비교하고, 이 값이 더 적은 스위치를 루트 스위치로 선정합니다. 그리고 루트 스위치로 선정된 스위치가 BPDU를 다른 스위치 쪽으로 보냅니다.

STP는 아래와 같이 동작합니다.

  • 하나의 루트 스위치를 선정합니다.
    • 전체 네트워크에 하나의 루트 스위치를 선정합니다.
    • 자신을 전체 네트워크의 대표 스위치로 적은 BPDU를 옆 스위치로 전달합니다.
  • 루트가 아닌 스위치 중 하나의 루트 포트를 선정합니다.
    • 루트 브릿지로 가는, 경로가 가장 짧은 포트를 루트 포트라 합니다.
    • 루트 브릿지에서 보낸 BPDU를 받는 포트입니다.
  • 하나의 세그먼트에 하나의 지정(Designated) 포트를 선정합니다.
    • 스위치와 스위치가 연결되는 포트는 하나의 지정 포트를 선정합니다.
    • 스위치간 연결에서 이미 루트 포트로 선정된 경우, 반대쪽이 지정 포트로 선정되어 양쪽 모두 포워딩 상태가 됩니다.
    • 스위치 간의 연결에서 아무도 루트 포트가 아닐 경우, 한 쪽은 지정 포트로 선정되고 다른 한쪽은 대체 포트가 되어 차단 상태가 됩니다.
    • BPDU가 전달되는 포트입니다.

향상된 STP

TCP 기반 애플리케이션이 네트워크가 끊겼을 때 30초를 기다리지 못해, STP 기반 네트워크에 장애가 생기면 통신이 끊길 수 있습니다. 또한 스위치에 여러 개의 VLAN이 있으면 각 VLAN 별로 STP를 계산하여 부하가 발생할 수 있습니다. 이 문제를 해결하기 위해 여러 향상된 STP가 등장했습니다.

RSTP

이중화된 스위치 경로 중 정상적인 경로에 문제가 생기면, 백업 경로를 활성화하는 데 30~50초가 소요됩니다. 이렇게 오랜 시간이 소요되는 문제를 해결하기 위해 RSTP(Rapid Spanning Tree Protocol)이 개발되었습니다.

RSTP에서는 BPDU 메시지 형식이 다양해져 여러 가지 상태 메시지를 교환할 수 있습니다.

  • STP : 일반 토폴로지 변경과 관련된 두 가지 메시지(TCN, TCA BPDU)
  • RSTP : 8개 비트를 모두 활용해 다양한 정보

기존 STP에서는 토폴로지가 변경되면 말단 스위치에서 루트 브릿지까지 변경 보고를 보내고, 루트 브릿지가 연산 완료 후 변경된 토폴로지 정보를 말단 스위치까지 보내는 과정을 거쳤습니다.

하지만 RSTP에서는 토폴로지 변경이 일어난 스위치 자신이 모든 네트워크에 토폴로지 변경을 직접 전파할 수 있습니다.

이로 인해 RSTP는 2~3초 안에 장애 복구가 가능하여, 장애 발생 시 애플리케이션 세션이 끊기지 않아 보다 안정적으로 네트워크를 운영할 수 있게 해줍니다.

MST

일반 스패닝 트리 프로토콜(CST, Common Spanning Tree)은 VLAN 개수와 상관없이 스패닝 트리 하나만 동작합니다. 따라서 VLAN 개수가 많아도 스패닝 트리가 한 개만 동작하여 스위치의 부하가 적습니다.

하지만 루프가 생기는 토폴로지에서 한 개의 포트와 회선만 활성화되므로 자원을 효율적으로 활용할 수 없고, 최적의 경로로 통신하지 못할 수 있습니다.

이 문제를 해결하기 위해 PVST(Per Vlan Spanning Tree)가 개발되었습니다.

PVST에서는 VLAN마다 다른 스패닝 트리 프로세스가 동작하므로, VLAN마다 별도의 경로와 트리를 만들 수 있게 되었습니다. 하지만 이로 인해 스위치에 더 많은 부담을 주는 문제가 있었습니다. 따라서 CST와 PVST의 단점을 보완하기 위해 MST(Multiple Spanning Tree)가 개발되었습니다.

MST는 여러 개의 VLAN을 그룹으로 묶고, 그 그룹마다 별도의 스패닝 트리가 동작하는 방식입니다. 따라서 적은 스패닝 트리 프로토콜 프로세스가 돌게 되고, PVST의 장점인 로드 셰어링 기능도 함께 사용할 수 있습니다.

MST에서는 리전 개념이 도입되어 여러 개의 VLAN을 하나의 리전으로 묶을 수 있습니다. 이때 리전 하나가 스패닝 트리 하나가 됩니다.



Reference, 이미지 출처

profile
Undefined JS developer

0개의 댓글