[네트워크] 스위치

공부중인 개발자·2021년 9월 27일
0

네트워크

목록 보기
4/10
post-thumbnail
post-custom-banner
초보개발자입니다. 틀린내용이 있다면 언제든지 알려주시면 감사합니다!

스위치

스위치는 2계층 주소인 MAC 주소를 기반으로 동작, 네트워크의 중간에서 패킷을 받아 필요한 곳에 보내주는 네트워크의 중재자 역할

스위치가 패킷을 전송하기 위해 필요한 MAC주소와 단말이 위치하는 인터페이스 정보를 매핑한 MAC 주소 테이블을 가지고 있기 때문에 스위치가 알고 있는 위치로 패킷을 전송 할 수 있음

패킷의 목적지 MAC 주소를 확인하고 MAC주소에 해당하는 포트로만 패킷을 전송

스위치의 동작 방식 3가지

  • 플러딩(Flooding)

스위치 부팅 시 네트워크 관련 정보는 없다 -> MAC 주소 테이블을 채워 넣어줘야한다.

최초에는 허브처럼 동작

이 상황에서 패킷이 들어오게 되면 MAC주소 테이블에 아무것도 없기 때문에 출발지를 제외한 스위치의 모든 포트에 같은 내용의 패킷을 전송(+ 들어온 패킷의 출발 MAC 주소는 MAC주소 테이블에 저장)
(자신이 MAC주소에 대한 정보를 가지고 있지 않더라도 어딘가에 장비가 있을 수 있다고 가정)

참고
이더넷-TCP/IP 네트워크에서는 ARP 브로드캐스트를 통해 MAC 주소의 교환 후 데이터가 전달되므로 실제 데이터 전달 시 스위치가 패킷을 플러딩하지 않음(필요한 곳에만 포워딩 하기 때문에 보안에 도움)
그럼에도 스위치가 플러딩하게 된다면 그 이유는 스위치에게 엉뚱한 MAC주소 테이블을 만들거나 MAC주소 테이블을 꽉 채워 스위치의 플러딩 동작을 유도
MAC 플러딩

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

  • 어드레스 러닝(Address Learning)

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

위에 작성한 것처럼 들어온 패킷의 출발 MAC주소와 포트번호를 MAC주소 테이블에 기록하는 것

어드레스 러닝은 출발지 MAC 주소를 사용하기 때문에 브로드캐스트나 멀티캐스트에 대한 MAC 주소를 학습할 수 없다. 두가지 모두 목적지 MAC 주소 필드에서만 사용하기 때문이다.

참고
어드레스 러닝으로 MAC주소를 학습하는 것 외에 사전에 정의된 MAC 주소 정보를 가지고 있다. 대부분 스위치 간 통신을 위해 사용되는 주소
스위치에서 자체 처리되는 주소는 특정 포트로 내보내는 것이 아니라 스위치에서 자체 처리하므로 인접 포트정보가 없거나 CPU 혹은 관리 모듈을 지칭하는 용어로 표기

  • 포워딩/필터링(Fowarding/Filtering)

패킷이 스위치에 들어오면 도착지 MAC 주소를 확인하고 MAC주소 테이블과 비교해 맞는 정보의 포트로 패킷을 포워딩한다.
이 때 해당 포트를 제외한 다른 포트로는 패킷을 전송하지 않는데 이것을 필터링이라고 한다.
스위치는 이런 포워딩과 필터링을 통해 목적지로만 패킷이 전달되도록 동작하며 포워딩과 필터링 작업이 여러포트에서 동시에 수행될 수 있음.
통신이 다른 포트에 영향을 미치지 않으므로 다른 포트에서 독립적으로 동작 가능

일반적으로 유니캐스트에 대해서만 포워딩 필터링 작업을 수행
브로드캐스트나 멀티캐스트의 경우는 필터링 작업 없이 모두 플러딩 언노운 유니캐스트도 브로드캐스트와 동일하게 플러딩 사용

VLAN

VLAN은 물리적 배치와 상관없이 LAN을 논리적으로 분할, 구성하는 기술

네트워크에 전화기, 복합기, PC등 다양한 다수의 단말이 네트워크와 연결되기 때문에 네트워크 분할이 더욱 중요해짐. 과도한 브로드캐스트로 인한 단말들의 성능 저하 및 보안향상을 위한 차단용도, 서비스 성격에 따른 정책적용같은 이유로 네트워크가 분리되어야함

VLAN은 한 스위치에서 서로 다른 네트워크를 갖게 분할 한것이며 스위치끼리도 VLAN을 만들 수 있음
VLAN은 하나의 네트워크를 새롭게 만든 것이므로 같은 스위치에 있더라도 유니캐스트나 브로드캐스트로 통신 할 수 없이 3계층 장비를 이용해야함.

종류와 특징

포트 기반의 VLAN과 MAC주소 기반의 VLAN 두가지로 나뉨.

대부분은 포트기반의 VLAN인데 스위치 포트에 VLAN을 할당하면 어떤 단말이 접속하든지 그 포트는 할당된 VLAN에 속하게 됨

MAC주소 기반 VLAN의 경우 포트와 다르게 MAC주소를 기반으로 VLAN이 속하게 됨 MAC주소 테이블에 해당 VLAN에 대한 정보가 들어있고 단말이 어떠한 포트를 사용하더라도 MAC주소 테이블에 할당되어있는 VLAN에 속하게 됨, 단말에 따라 VLAN 정보가 바뀔 수 있어 다이나믹 VLAN이라고도 불림

동작 방식

포트 기반 VLAN은 같은 스위치이지만 다른 VLAN이라면 다른 스위치에 있는것으로 판단해서 통신하기 위해서 3계층 장비를 사용해야함.

다수의 스위치간의 VLAN이 연결해야하는 경우는 스위치간 통신을 위한 포트가 필요한데 각 VLAN 마다 한개의 포트가 필요하다. 위의 사진의 경우 스위치들은 VLAN이 3개이고 각 스위치를 연결하기 위한 포트가 3개 필요하게 된다. 하지만 VLAN이 많아질수록 스위치에 연결을 위한 포트가 많아지고 포트 낭비로 이어지므로 이 문제를 해결하기 위한 기능이 태그 기능이다.

  • 태그 기능

태그 기능은 한개의 포트에 여러개의 VLAN을 함께 전송 할 수 있게 해줌. 태그 포트로 패킷을 보낼 때 VLAN ID를 붙여서 보내고 받을 때 VLAN ID를 확인하고 해당 VLAN에 패킷을 넣어주면서 VLAN ID를 제거하게 된다.

태그포트 기능을 통해 MAC주소 테이블에는 VLAN을 지정하는 필드가 추가되고 스위치에서 VLAN을 이용해 네트워크를 분리하면 VLAN 별로 MAC주소 테이블이 존재하는 것처럼 동작

일반적인 포트(단말 - 스위치)를 언태그 또는 엑세스 포트라고 하며 태그 VLAN이 한꺼번에 통신하도록 하는 포트(스위치 - 스위치)를 태그포트 또는 트렁크 포트라고 부름.

언태그 포트의 경우 패킷이 들어오면 같은 VLAN으로만 패킷을 전송하고 태그 포트의 경우 태그를 제거하면서 태그에서 확인된 VLAN으로 패킷을 전송

VMware ESXi 와 같은 가상화 서버가 연결될 때는 언태그 포트가 아닌 태그로 설정해야함 가상화 서버 내부에 가상 스위치가 존재하기 때문에 스위치간의 연결이기 때문에 태그 포트를 이용해서 연결

STP

STP란 스패닝 트리 프로토콜의 약자로 루프를 확인하고 포트를 사용하지 못하게 만들어 루프를 예방하는 매커니즘

STP를 알기 전 루프에 대해서 알기 위해선 먼저 SPoF(단일 장애점)로 인한 장애를 해결하고자 하는 과정에 대해서 알아야함.

하나의 네트워크에 패킷이 전송되기 위해선 각 계층에 장비가 필요한데 네트워크를 스위치 하나로 구성했을 때 스위치에 장애가 발생하게 되면 전체 네트워크에 장애가 발생하게됨.

이런 장애를 피하기 위해 스위치를 두 대 이상으로 네트워크를 디자인하지만 패킷이 네트워크를 따라 계속 전달하기 때문에 네트워크가 마비될 수 있음

이러한 루프를 예방하기위한 매커니즘이 STP이다.

STP보다 먼저 루프가 일어나는 이유에 대해서 알아보겠다.
루프가 일어나는 이유는 크게 3가지가 있다.

  • 브로드캐스트 스톰

루프 구조에서 단말이 브로드캐스트를 발생시키면 스위치는 유입된 포트를 제외한 모든 포트로 플러딩하고 다른 스위치에서 플러딩받은 패킷을 유입되지 않은 다른 포트로 다시 플러딩하게 된다.

3계층 헤더에는 패킷의 수명(TTL)이 있지만 2계층 헤더의 경우 이런 메커니즘이 없기 때문에 무한하게 루트구조를 돌게 되고 네트워크에 연결된 모든 단말이 브로드캐스트를 처리하기 위해 리소스를 사용하게 되면서 단말의 속도 뿐만아니라 네트워크 접속속도 모든것이 느려지거나 멈추게 된다.

  • 스위치 MAC 러닝 중복 문제

루프 구조상 브로드캐스트외에도 유니캐스트에서도 문제가 나타난다.
스위치는 출발지 MAC주소에 대해 어드레스 러닝을 통해 학습하는데 직접 전달되는 패킷과 스위치를 돌아 도착지로 들어간 패킷 간의 포트가 달라 MAC 주소를 정상적으로 학습할 수 없다. 또한, 스위치 MAC 주소 테이블에서는 하나의 MAC 주소에 대해 하나의 포트만 학습할 수 있는데 동일한 MAC주소가 여러 포트에서 학습되면 MAC 테이블이 반복 갱신되어 정상적으로 동작할 수 없게 되고 이러한 현상을 MAC 어드레스 플래필이라고 부른다.

위 그림 처럼 C에서 A,B로 각각 패킷을 전달하고 스위치A에서 다시 B로 패킷을 전달하게 되면 스위치B의 MAC주소 테이블에는 같은 MAC주소지만 포트가 변경되게 되고 계속해서 테이블의 포트가 변경되면서 스위치가 정상적으로 동작하지못하고 플러딩하게 된다.

이러한 현상을 예방하는 방법은 두가지다.

1. 스위치 설정에 따라 관리자에게 경고메세지 전송
2. 수시로 일어나는 플래핑 현상을 학습하지 않도록 자동 조치
  • 이중 프레임 수신

루프가 반복되어 동일한 브로드캐스트 프레임을 여러개 수신하게 되는 경우


위의 세가지 이유로 인해 루프가 발생되게 되고 루프 가 발생하지 않도록 루프 구성중 한개를 차단함으로써 루프를 끊어낼 수 있다.

하지만 차단하기가 어렵고 차단하더라도 네트워크에 장애가 생기면 다시 차단한것을 복구해야하는 불편함이 있기 때문에 사용자의 개입으로 네트워크 장애에 대응할 수 없습니다.

이렇기 때문에 루프를 자동 감지해 포트를 차단하다가 장애 시 차단된 포트를 스스로 풀어주는 STP가 개발 되었다.


STP란

STP를 통해 루프를 예방하기 위해선 먼저 전체 스위치가 어떻게 연결되는지 확인해야한다. 스위치는 BPDU라는 프로토콜을 통해 스위치 간의 정보를 전달하고 수집된 정보를 이용해 전체 네트워크 트리를 만들어 루프구간을 확인 할 수 있다.

  1. 프로토콜 아이디
    예전 L2 기술에서 사용할 수 있는 공통적인 프로토콜을 정의하려 할 때 나온게 BPDU다.
    그리고 이 때 STP에서 BPDU를 쓰기로 하고 Protocol ID 0x0000을 가져가게 된다.
    (현재까지 STP외에 사용하는 곳이 없어 다른 아이디가 존재하지 않는다. )
  2. 프로토콜 버전
    STP가 하나만 있는게아니라 발전하면서 새로운 표준들이 나오게되는데 이를 구분하기 위한 필드다. 최초의 STP뿐아니라 RSTP, MST까지 나오면서 이를 구분한다.
  3. BPDU 종류
    BPDU Type은 크게 2가지가 있다. Configuration BPDU(이하 Config BPDU)라는 루트만이 만들어서 2초마다 전송할 수 있는 BPDU가 있고, TCN(Topology Change Notification) BPDU라고 내 (fwd 상태인) 인터페이스 중에서 다운되거나 문제가 발생하면 Topology Change를 다른 모든 곳에 알려주기 위해서 Spanning Tree를 다시 계산해야 하기에 보내는 BPDU가 있다.
  4. 플래그
    이 BPDU가 어떤 역할을 하는 BPDU인지와 현재 스위치의 상태를 알려주기위한 정보를 담고있는 필드이다. RSTP의 여러 가지 상태 메세지를 교환할 때 사용한다.
  5. 루트 브리지 ID
  6. 경로비용
    루트브리지로부터 거쳐온 경로비용의 합
  7. 송출 브리지 ID
  8. 송출 포트 ID
  9. Message Age
    BPDU가 만들어지고 얼마나 시간이 지났는가에 대한 정보
  10. Max Age
    BPDU의 수명 (기본값 20초)
  11. Hello Timer
    Config BPDU를 보내는 주기를 정하는 정보(기본값 2초)
  12. Forwarding Delay
    스위치 포트의 상태가 다음 단계로 넘어갈 때 그 시간을 지정하는 정보(기본 값 15초)

BPDU 프로토콜 헤더이며 이 BPDU에 스위치가 가지고 있는 ID와 같은 고유한 값이 들어가고 이런 정보들이 스위치 간에 교환되면서 루프 파악이 가능하고 확인된 루프지점을 데이터 트래픽이 통과하지 못하도록 차단해 루프를 예방한다.

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

STP가 동작 중인 스위치에서 신규 스위치가 연결되면 트래픽이 흐리지 않도록 차단한다. 그리고 해당 포트로 트래픽이 흘러도 되는지 확인하기 위해 BPDU를 학습하고 구조를 파악한 뒤에 루프 구조가 아닌 경우 트래픽을 흘리고 루프구조라면 차단을 유지한다.
차단 상태에서 트래픽이 흐를 때까지의 스위치 포트의 상태와 변경은 다음과 같다.

  • Blocking
    • 패킷 데이터를 차단하고 상대방의 BPDU를 기다린다.
    • 총 20초인 Max Age 기간동안 BPDU를 받지 못하거나 후순위 BPDU를 받았다면 포트는 리스닝 상태로 변경
    • BPDU 기본 교환 주기는 2초라서 10번의 BPDU를 기다림.
  • Listening
    • 해당 포트가 전송 상태로 변경되는 것을 결정하고 준비하는 단계
    • 자신의 BPDU 정보를 상대방에게 전송하기 시작
    • 15초간 대기
  • Learning
    • 해당 포트를 포워딩하기로 결정하고 실제로 패킷 포워딩이 일어날 때 스위치가 동작하도록 MAC주소를 러닝하는 단계
    • 15초간 대기
  • Forwarding
    • 패킷을 포워딩하는 단계 정상 통신 가능

스위치는 루프를 예방하기 위해 방어적으로 동작하는데 새로 연결된 단말이 스위치일 가능성이 있어서 BPDU를 기다려서 스위치 여부를 파악한다. 이로인해 스위치외의 일반 단말 역시 동일한 시간이 필요하게 된다.

스위치 장비의 장애로 인해 링크 전환의 경우도 마찬가지의 시간이 소모 되지만 다운된 링크가 자신의 인터페이스일 경우는 Max Age를 거치지 않고 30초만에 교체가 이뤄진다.

STP가 활성화 된 경우 스위치 포트는 바로 포워딩 상태가 되지 않기 때문에 다양한 장애가 발생하기도 한다.
부팅 시간이 빠른 OS가 DHCP 네트워크에 접속할 때 부팅 단계에서 IP를 요청하지만 스위치 포트가 포워딩 상태가 되지 않아 IP를 정상적으로 할당받지 못하는 경우도 많다.

STP 동작 방식

STP는 루프를 없애기 위해 뿌리에서 가지가 뻗어나가는 것처럼 망을 구성함.
네트워크 상에서 뿌리가 되는 스위치를 선출하는데 이것을 루트 스위치라고 하며 이 스위치를 통해 모든 BPDU가 교환되도록함.
모든 스위치는 처음에는 자신이 루트 스위치처럼 동작하지만 새로운 스위치로 부터 교환된 BPDU의 브릿지 ID값을 비교해서 값이 더 적은 스위치를 루트 스위치로 선정하게 됨.

STP는 루프를 예방하기 위해 다음과 같이 동작한다.

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

BPDU가 지정 포트에서 나와 루트 포트로 들어간다.

참고
STP가 동작함에따라 스위치가 아닌 일반PC나 서버가 연결되는 포트 역시 네트워크 연결까지 시간이 지연되는 문제가 있다. 이런 경우 해당 포트를 포트 패스트로 설정하게 되면 BPDU 대기, 습득 과정 없이 바로 포워딩 상태로 포트를 사용할 수 있다.
포트 패스트를 설정한 포트에 스위치가 접속되면 루프가 생길 수 있어 해당 포트에 BPDU가 들어오자마자 포트를 차단하는 기술이 함께 사용되야함.

향상된 STP(RSTP,MST)

RSTP

이중화된 스위치 경로 중 백업 경로를 활성화하는데 30~50초의 시간이 걸리는 문제를 해결하기 위해 만들어진 것이 RSTP
-> 2~3초로 절체 시간이 짧아서 일반적인 TCP 기반 애플리케이션이 세션을 유지할 수 있다.

기본적인 구성과 동작 방식은 STP와 동일하지만 BPDU 메세지 형식이 다양해져서 여러 가지 상태 메세지를 교환할 수 있다.
BPDU 의 포맷중 Flags 필드는 8비트인데 기존 STP는 토폴로지 변경과 관련된 두 가지 메세지(TCN, TCA BPDU)만 있지만 RSTP는 8비트 전부를 활용해서 다양한 정보를 주고받는다.

BPDU의 플래그 형식

기존 STP에서는 망이 변경되면 발단 스위치에서 루트 브릿지까지 변경 보고를 보내고 루트 브릿지가 그에 대한 연산을 완료한 이후 변경되는 망정보를 말든 스위치까지 보내는 과정을 거침

RSTP의 경우 망 변경이 일어난 스위치 자신이 모든 네트워크에 망변경을 직접 전파할 수 있음

다양한 BPDU 메세지, 대체 포트 개념, 망 변경 전달 방식의 변화로 일반 STP보다 빠른 시간 내에 망 변경을 감지, 복구 할 수 있어서 애플리케이션 세션이 끊기지 않아 안정적인 네트워크를 운영할 수 있다.

MST

MST는 CST 와 PVST의 단점을 보완하기 위해 개발됨.

CST는 기존의 STP방식을 뜻하는 말로 VLAN 개수와 상관없이 스패닝 트리를 한개만 동작함.
그렇기 때문에 스위치의 관리 부하가 적다. 하지만 CST는 루프가 생기는 망에서 한개의 포트와 회산만 활성화 되므로 자원의 효율적 활용이 힘들다. 또한 VLAN 마다 최적의 경로가 다를 수 있는데 포트 하나만 사용할 수 있다보니 부분최적화 현상이 생기게 된다.

이러한 문제를 해결하기 위하여 PVST가 개발되었고 VLAN마다 다른 스패닝 트리 프로세스가 동작하게 됐고 그로 인해 최적의 경로를 디자인 하고 VLAN마다 별도의 블록 포트를 지정해서 네트워크 로드를 셰어링하도록 구성할 수 있게 됨.
VLAN 10 과 VLAN 20의 최적의 경로가 각각
A-B-C 와 A-D-C 일 경우 CST는 VLAN의 10의 최적의 경로만 사용하게 되지만 PVST의 경우 각각의 최적의 경로로 패킷이 전송됨.

하지만 스패닝 트리 프로토콜 자체가 스위치에 많은 부담을 주는데 PVST의 경우 VLAN마다 각각의 스패닝 트리가 존재해서 스위치에 더 많은 부담이 생기게 됐다.

MST는 이러한 문제를 해결하기 위해 만들어졌으며 여러개의 VLAN을 그룹으로 묶고 그룹마다 별도의 스패닝 트리가 동작,
예를 들어 PVST를 이용하여 100개의 VLAN에 100개의 스패닝 트리가 존재해야하지만
MST의 경우 100개의 VLAN 중 1~50번 VLAN을 하나의 리전으로 묶고 51~100번 VLAN을 하나의 리전으로 묶으면 2개의 스패닝 트리로 100개의 VLAN을 관리할 수 있음.


느낀점

스위치가 동작하는 방법에 대해서 보다 자세하게 알 수 있었다.
전 장에서 이름만 알고 넘어간 브로드캐스트 스톰같은 내용에 대해서도 새롭게 알 수 있었고 공부할수록 어려워진다는것을 느꼈다.
그리고 읽어봐도 이해를 못하는 부분이 많아서 몇번 더 읽어봐야할 것 같다.

참고자료
https://catsbi.oopy.io/315731e3-1730-4690-ad8f-663e0af7621b#0753bb81-7df5-4219-af06-b4973b578759
https://www.cisco.com/c/ko_kr/support/docs/lan-switching/8021q/17056-741-4.html
https://www.networkacademy.io/ccna/ethernet/an-switching-redundant-links
http://www.ktword.co.kr/word/abbr_view.php?m_temp1=2403

profile
열심히 공부하자
post-custom-banner

0개의 댓글