사전 스위치
개념

스위치

gabury1고친 사람 github-actions[bot]

스위치는 같은 망에 붙은 장비들을 이어 줍니다. 받은 데이터는 받을 장비에게만 넘깁니다. 겉면에 적힌 받는 쪽 주소를 읽어 그 장비가 꽂힌 선으로만 내보냅니다. 같은 이름을 쓰는 다른 것들은 이 편 끝에서 따로 갈라 둡니다.

쉽고 빠른 이해

스위치는 여러 장비를 한 망으로 묶어 주는 장비입니다. 사무실의 컴퓨터와 프린터가 저마다 선 하나로 이 상자에 꽂힙니다. 선이 꽂히는 구멍 하나를 포트라고 합니다.

선 하나를 여럿이 나눠 쓰면 두 장비가 동시에 말할 때 신호가 겹쳐 깨집니다. 남에게 갈 데이터도 모두가 받아 보게 됩니다. 스위치는 받을 장비에게만 넘겨 이 둘을 없앱니다.

  1. 데이터가 들어오면 보낸 쪽 주소와 들어온 포트를 표에 적어 둡니다
  2. 받는 쪽 주소를 그 표에서 찾습니다
  3. 찾으면 그 포트로만, 못 찾으면 들어온 포트만 빼고 모든 포트로 내보냅니다

대가는 한 망에 장비가 늘수록 모두에게 가는 데이터가 늘어난다는 것입니다. 이런 데이터는 스위치가 막지 않고 그대로 지나보냅니다.

상세

사무실 문 앞에서 우편물을 받아 나눠 주는 사람을 떠올려 봅시다. 이 사람은 봉투 겉면의 이름을 읽고 그 사람 책상에만 봉투를 올려 둡니다. 누가 어느 책상에 앉는지는 봉투가 오갈 때마다 눈에 익혀 외워 둡니다.

스위치가 하는 일이 이와 같습니다. 스위치는 같은 망에 붙은 장비들을 이어 주는 장비입니다. 받은 프레임의 받는 쪽 주소를 읽어 그 장비가 꽂힌 포트로만 내보냅니다.

포트는 선을 꽂는 구멍 하나입니다. 장비 하나가 포트 하나를 씁니다. 스위치는 여러 대를 이어 쓸 수 있습니다. 한 대의 포트가 모자라면 다른 스위치를 포트 하나에 물려 넓힙니다.

프레임은 데이터를 겉면으로 감싼 한 덩어리입니다. 선 한 가닥을 건너는 동안 쓰는 포장이라고 보면 됩니다. 겉면에는 이 덩어리를 어디로 보낼지가 적힙니다. 속에는 보내려는 데이터가 들어 있습니다.

겉면에 적히는 것이 보내는 쪽과 받는 쪽의 MAC 주소(Media Access Control address, 매체 접근 제어 주소)입니다. MAC 주소는 같은 망 안에서 서로를 가리키는 번호입니다. 장비가 망에 꽂히는 부품인 네트워크 인터페이스 카드마다 하나씩 붙어 있습니다.

허브와 무엇이 다른가

스위치 앞에는 허브가 있었습니다. 허브는 한쪽 포트로 들어온 신호를 나머지 포트 전부로 그대로 흘려보냅니다. 받는 쪽 주소를 읽지 않으므로 누구에게 가는 것인지 모릅니다. 판단할 것이 없어 값이 싼 장비였습니다.

이 방식에는 대가가 따릅니다. 남에게 갈 데이터가 모든 장비에 닿습니다. 두 장비가 동시에 말하면 신호가 겹쳐 깨집니다.

이 겹침이 충돌입니다. 겹침이 일어나는 범위를 충돌 도메인이라고 합니다.

허브 스위치
들어온 신호를 어디로 나머지 포트 전부 받는 쪽이 꽂힌 포트 하나
겉면의 주소를 안 읽는다 읽는다
두 장비가 동시에 말하면 신호가 겹친다 각자 자기 선을 쓰므로 안 겹친다

표의 마지막 줄이 스위치가 준 것입니다. 장비마다 자기 선을 하나씩 가지므로 두 쌍이 서로 다른 짝과 같은 때에 주고받을 수 있습니다.

한 선 안에서도 보내는 방향과 받는 방향이 따로 있어 양쪽이 동시에 말할 수 있습니다. 이것이 전이중입니다. 아래는 스위치 한 대에 장비 넷이 붙은 모습입니다. 두 쌍이 서로를 방해하지 않고 같은 때에 오갑니다.

flowchart TD
    D1["장비 가"] --- P1
    D2["장비 나"] --- P2
    D3["장비 다"] --- P3
    D4["장비 라"] --- P4
    subgraph SW["스위치 한 대"]
        P1["1번 포트"]
        P2["2번 포트"]
        P3["3번 포트"]
        P4["4번 포트"]
    end
    P1 -- "가 → 나" --> P2
    P2 -- "나 → 가 · 같은 선으로 되돌아온다" --> P1
    P3 -- "다 → 라 · 위 한 쌍과 같은 때에 오간다" --> P4

받는 쪽을 찾는 표

스위치는 어느 포트에 어느 주소가 물려 있는지를 표 하나에 적어 둡니다. 이 표가 MAC 주소 테이블입니다.

포트 물려 있는 주소
1번 포트 회계팀 노트북의 주소
2번 포트 프린터의 주소
3번 포트 옆 스위치에 달린 장비들의 주소 여럿

표를 사람이 채우지는 않습니다. 스위치는 프레임이 들어올 때마다 그 프레임의 보내는 쪽 주소를 읽어 「이 주소는 이 포트에 있다」를 한 줄 적습니다. 오가는 프레임을 보는 것만으로 표가 채워집니다. 이렇게 채우는 것이 학습입니다.

flowchart TD
    A["프레임이 들어온다"] --> B["보내는 쪽 주소를 들어온 포트와 함께 표에 적는다"]
    B --> C{"받는 쪽 주소를 표에서 찾았나"}
    C -->|찾았다| D["그 포트로만 내보낸다"]
    C -->|못 찾았다| E["들어온 포트만 빼고 모든 포트로 내보낸다"]
    C -->|모두에게 가는 주소다| E

못 찾았을 때의 갈래가 처음 보는 장비에게 보낼 때 타는 길입니다. 아직 어느 포트에 있는지 모르니 모든 포트로 한 번 뿌려 봅니다. 답이 돌아오면 그때 그 장비의 포트를 알게 됩니다. 이렇게 뿌리는 것이 플러딩입니다.

모두에게 가는 주소일 때의 갈래는 받는 쪽이 특정 장비가 아니라 망의 모두를 가리킬 때 탑니다. 이 주소가 브로드캐스트 주소입니다. 상대의 주소를 아직 모를 때 「이 주소 쓰는 사람 있나요」를 망 전체에 묻는 데 씁니다.

표의 줄은 한 번 적히면 남아 있지 않습니다. 한동안 그 주소로 보내는 프레임이 안 오면 스위치가 그 줄을 지웁니다. 이 지움을 에이징이라고 합니다. 덕분에 장비를 다른 포트로 옮겨 꽂아도 표가 저절로 따라옵니다.

스위치와 라우터의 경계

스위치는 프레임 겉면만 읽습니다. 안에 든 것은 들여다보지 않습니다.

프레임 안에는 대개 패킷이 들어 있습니다. 패킷은 망을 건너다닐 때 쓰는 덩어리입니다. 겉면에는 IP 주소(Internet Protocol address, 인터넷 프로토콜 주소)가 적혀 있습니다.

겹이 둘입니다. 어느 겹까지 읽느냐가 스위치와 라우터를 가릅니다.

flowchart TD
    subgraph FRAME["프레임 — 스위치는 이 겉면만 읽는다"]
        FH["겉면 · 보내는 MAC 주소 · 받는 MAC 주소"]
        subgraph PACKET["패킷 — 라우터는 여기까지 벗겨 본다"]
            PH["겉면 · 보내는 IP 주소 · 받는 IP 주소"]
            DATA["보내려는 데이터"]
        end
    end

라우터는 그 안쪽을 봅니다. 프레임을 벗기고 패킷의 IP 주소를 읽어 어느 망으로 넘길지 고릅니다. 고른 뒤에는 새 프레임에 다시 싸서 내보냅니다.

그래서 스위치는 한 망 안에서 일합니다. 라우터는 망과 망 사이에서 일합니다. 같은 망의 장비들을 이을 때 쓰는 것이 스위치입니다. 다른 망으로 나가는 길은 스위치를 아무리 늘려도 생기지 않습니다.

한 대를 여럿처럼 가르기

스위치를 여러 대 이어도 망은 여전히 하나입니다. 모두에게 가는 프레임이 스위치를 다 지나가기 때문입니다. 이 프레임이 닿는 범위가 브로드캐스트 도메인입니다. 이 범위를 끊는 장비가 라우터입니다.

그런데 스위치 한 대 안에서도 범위를 가를 수 있습니다. 같은 스위치에 꽂혀 있어도 서로 안 통하게 나누는 것입니다. 포트들을 묶음으로 갈라 두면 스위치가 다른 묶음으로는 프레임을 안 내보냅니다. 이 묶음을 VLAN(Virtual Local Area Network, 가상 근거리 통신망)이라고 합니다.

묶음을 가르면 브로드캐스트 도메인도 같이 갈립니다. 한 묶음에서 모두에게 뿌린 프레임이 다른 묶음에는 안 닿습니다. 묶음을 건너 주고받으려면 라우터를 거쳐야 합니다. 그 길목에서 어느 묶음이 어느 묶음과 통할지를 정할 수 있습니다.

스위치 두 대를 잇는 선은 하나뿐입니다. 그 선으로 날라야 할 묶음은 여럿입니다. 그래서 그 선으로 보내는 프레임에는 어느 묶음의 것인지를 적은 딱지를 덧붙입니다. 이 딱지 붙이기가 태깅입니다.

flowchart TD
    subgraph SW1["스위치 하나"]
        subgraph V1A["묶음 가"]
            P1["1번 포트"]
        end
        subgraph V1B["묶음 나"]
            P2["2번 포트"]
        end
    end
    subgraph SW2["스위치 둘"]
        subgraph V2A["묶음 가"]
            P3["3번 포트"]
        end
        subgraph V2B["묶음 나"]
            P4["4번 포트"]
        end
    end
    SW1 -- "선 한 가닥 · 어느 묶음의 것인지 딱지를 붙여 보낸다" --> SW2

받는 스위치는 딱지를 떼어 냅니다. 그리고 딱지가 가리킨 묶음의 포트로만 내보냅니다. 이렇게 여러 묶음을 한 가닥으로 나르는 선이 트렁크입니다.

선이 고리를 이루면

스위치 두 대를 선 두 가닥으로 잇거나 세 대를 삼각형으로 이으면 한 가닥이 끊겨도 망이 살아 있습니다. 대신 선이 고리를 이룹니다. 고리는 모두에게 가는 프레임에 문제가 됩니다.

프레임에는 남은 걸음 수를 적는 칸이 없습니다. 스스로 사라지지 않는다는 뜻입니다.

모두에게 가는 프레임 하나가 고리에 들어가면 스위치들이 서로에게 되풀이해 넘깁니다. 넘길 때마다 복사본이 늘어 회선이 이것으로 찹니다. 이 상태를 브로드캐스트 스톰이라고 합니다.

표도 함께 망가집니다. 같은 주소가 이 포트에서도 저 포트에서도 보이니 스위치가 줄을 계속 고쳐 쓰게 됩니다.

아래 그림은 문제와 해법을 한 장에 담았습니다. 실선이 복사본이 도는 길입니다. 점선이 해법입니다.

flowchart TD
    S1["스위치 가"] -- "복사본 1" --> S2["스위치 나"]
    S2 -- "복사본 2" --> S3["스위치 다"]
    S3 -. "복사본 4 · 이 포트를 막아 두면 여기서 끊긴다" .-> S1

스위치들은 서로에게 말을 걸어 고리가 있는지 알아봅니다. 그리고 고리를 끊을 포트 하나를 골라 막아 둡니다. 막힌 포트는 선이 꽂혀 있어도 프레임을 안 흘려보냅니다. 이렇게 고리를 끊는 규칙이 스패닝 트리 프로토콜입니다.

막아 둔 선은 놀고 있는 것처럼 보이지만 예비입니다. 쓰던 선이 끊기면 스위치들이 다시 알아봅니다. 그리고 막아 둔 포트를 엽니다.

이름이 같은 다른 것들

스위치는 갈아타거나 골라 보낸다는 뜻의 낱말입니다. 여러 분야가 저마다 가져다 씁니다. 망 장비와 헷갈리기 쉬운 것이 셋 있습니다.

프로그래밍 언어의 switch 문은 값 하나를 여러 갈래와 맞춰 보고 맞는 갈래로 뛰는 문법입니다. 조건을 여러 번 묻는 대신 값 하나로 한 번에 고릅니다. 이런 갈라짐을 통틀어 조건 분기라고 합니다.

컨텍스트 스위치는 프로세서가 하던 일을 잠시 멈추고 다른 일로 갈아타는 것입니다. 멈춘 일의 상태를 어딘가에 넣어 두었다가 나중에 꺼내 이어서 합니다.

피처 토글은 기능 스위치라고도 부릅니다. 코드를 새로 배포하지 않고 설정값 하나로 기능을 켜고 끄는 방식입니다.

관련 항목

스위치가 나르는 데이터 단위와 주소 형식

프레임 · MAC 주소 · 브로드캐스트 주소 · 멀티캐스트 주소 · 유니캐스트 · 패킷 · 페이로드

스위치가 받는 쪽을 고를 때 보는 구성 요소

MAC 주소 테이블 · 포트 · 플러딩 · 에이징 · 포워딩 · 저장 후 전달

스위치와 같은 구간에 서는 다른 장비

허브 · 브리지 · 리피터 · 라우터 · 공유기 · 무선 액세스 포인트 · 방화벽 · 로드 밸런서

스위치가 속한 계층과 그 위아래 개념

링크 계층 · 물리 계층 · 네트워크 계층 · 이더넷 · OSI 모형 · 네트워크 인터페이스 카드

망을 논리로 가르는 데 쓰는 개념

VLAN · 태깅 · 트렁크 · 브로드캐스트 도메인 · 충돌 도메인 · 서브넷

스위치를 여러 대 이을 때 도는 프로토콜

스패닝 트리 프로토콜 · 링크 애그리게이션 · LLDP · SNMP · 포트 미러링

스위치 둘레에서 생기는 장애

브로드캐스트 스톰 · 스위칭 루프 · MAC 주소 테이블 넘침 · 패킷 손실 · 혼잡 · 큐잉 지연

스위치가 쓰는 회선과 연결 방식

이더넷 케이블 · 광 모듈 · 전이중 · 반이중 · 자동 협상 · 링크 상태

이름이 겹치는 다른 분야의 스위치

switch 문 · 조건 분기 · 컨텍스트 스위치 · 피처 토글 · KVM 스위치

다른 이름: switch · 네트워크 스위치 · 스위칭 허브 · L2 스위치