| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- docker
- tucker의 go 언어 프로그래밍
- SRE
- 바이브코딩
- Rag
- 공부
- Kubernetes
- 코틀린 코루틴의 정석
- kotlin
- 기록으로 실력을 쌓자
- golang
- Claude
- aws
- 티스토리챌린지
- CloudWatch
- go
- Network
- PETERICA
- CKA 기출문제
- AI
- kotlin coroutine
- CKA
- LLM
- MySQL
- AWS EKS
- 정보처리기사 실기 기출문제
- minikube
- 오블완
- Java
- Spring
- Today
- Total
피터의 개발이야기
[Network] 05. 한 건물을 여러 동네로 나눌 수 있을까? 본문

TCP/IP를 우편 시스템으로 이해하기 — Part 1. 모두가 하나의 길을 함께 쓰려면
ㅁ 들어가며
스위치는 MAC 주소를 학습해 이미 아는 목적지의 프레임을 필요한 포트로만 보낸다.
STP는 스위치 사이의 순환 경로를 막아 브로드캐스트 프레임이 끝없이 복제되지 않게 한다.
이제 하나의 L2 네트워크를 안전하게 운영할 수 있을 것처럼 보인다.
그런데 회사가 커져 한 스위치에 개발팀, 인사팀, 방문객용 장비가 함께 연결되면 어떻게 될까?
개발팀에서 보낸 브로드캐스트가 인사팀과 방문객에게도 전달된다. 조직과 목적이 다르지만 스위치 입장에서는 모두 같은 동네의 주민이다.
각 조직을 나누기 위해 스위치를 따로 구매할 수도 있다.
개발팀 ─ 개발팀 전용 스위치
인사팀 ─ 인사팀 전용 스위치
방문객 ─ 방문객 전용 스위치
하지만 부서가 생기거나 자리를 옮길 때마다 장비와 배선을 다시 구성해야 한다. 포트가 남아 있어도 다른 조직은 사용할 수 없다.
물리적인 스위치 한 대를 사용하면서도 서로 다른 동네처럼 나눌 수는 없을까?
이번 글에서는 Broadcast Domain, VLAN, Access Port, Trunk, IEEE 802.1Q Tag가 이 문제를 어떻게 해결하는지 살펴본다.
ㅁ 같은 방송을 듣는 범위가 하나의 동네다
앞의 글에서 브로드캐스트 프레임의 목적지 MAC 주소는 다음과 같다고 했다.
FF:FF:FF:FF:FF:FF
스위치는 이 프레임을 들어온 포트를 제외한 같은 L2 영역의 다른 포트로 전달한다.
브로드캐스트 프레임이 도달할 수 있는 범위를 Broadcast Domain이라고 한다.
개발자 PC ─┐
인사팀 PC ─┼─ Switch ─ 같은 Broadcast Domain
방문객 PC ─┘
이 구조에서 개발자 PC가 브로드캐스트를 보내면 인사팀 PC와 방문객 PC가 연결된 방향으로도 전달된다.
장비 수가 적을 때는 큰 문제가 아닐 수 있다. 하지만 하나의 Broadcast Domain이 커지면 다음 문제가 생긴다.
- 브로드캐스트를 확인해야 하는 장비가 늘어난다.
- 장애나 잘못된 트래픽의 영향 범위가 커진다.
- 서로 다른 조직과 용도의 장비가 같은 L2 영역을 공유한다.
- 주소 정책과 접근 정책을 조직별로 나누기 어려워진다.
스위치가 유니캐스트 전달을 효율화해도 브로드캐스트의 목적은 모두에게 전달하는 것이다.
MAC 주소 학습만으로는 이 범위를 줄일 수 없다.
따라서 네트워크에는 어디까지를 같은 동네로 볼 것인가를 정하는 새로운 경계가 필요하다.
ㅁ 건물은 하나지만 출입 구역은 나눌 수 있다
하나의 큰 건물에 여러 회사가 입주해 있다고 생각해 보자.
건물과 엘리베이터는 함께 사용하지만 각 회사의 사무실과 우편함은 분리되어 있다.
물리적인 건물 한 채
├─ 10번 구역: 개발팀
├─ 20번 구역: 인사팀
└─ 30번 구역: 방문객
10번 구역의 공지는 10번 구역 안에서만 전달된다. 20번과 30번 구역에는 들리지 않는다.
스위치에서도 이와 같은 논리적인 구역을 만들 수 있다.
이를 VLAN(Virtual Local Area Network)이라고 한다.
Port 1 ─ 개발자 PC ─ VLAN 10
Port 2 ─ 개발자 PC ─ VLAN 10
Port 3 ─ 인사팀 PC ─ VLAN 20
Port 4 ─ 방문객 PC ─ VLAN 30
물리적으로는 같은 스위치에 연결되어 있지만 논리적으로는 서로 다른 세 개의 L2 네트워크다.
VLAN 10에서 발생한 브로드캐스트는 VLAN 10에 속한 포트로만 전달된다. VLAN 20과 VLAN 30은 별도의 Broadcast Domain이므로 같은 프레임을 받지 않는다.
VLAN이 만드는 가장 중요한 변화는 다음과 같다.
물리적인 연결 위치와 논리적인 네트워크의 경계를 분리한다.
조직이 다른 층으로 이동해도 포트가 속한 VLAN을 바꾸면 같은 논리적 네트워크를 유지할 수 있다.
하나의 스위치 자원을 여러 조직이 나누어 쓰면서도 브로드캐스트 범위는 분리할 수 있다.
ㅁ 일반 컴퓨터는 VLAN 번호를 알아야 할까?
개발자 PC가 연결된 포트가 VLAN 10에 속한다고 하자.
일반적인 PC는 자신이 VLAN 10에 연결되었다는 사실을 알 필요가 없다.
평소처럼 태그가 없는 이더넷 프레임을 보낸다.
스위치는 프레임이 들어온 포트의 설정을 보고 VLAN 10의 프레임으로 분류한다.
PC가 보낸 Untagged Frame
↓
VLAN 10으로 설정된 스위치 포트
↓
스위치 내부에서 VLAN 10 소속으로 처리
이처럼 보통 하나의 VLAN에 속한 단말을 연결하는 포트를 Access Port라고 한다.
Access Port의 기본 역할은 다음과 같다.
- 단말에서 들어온 태그 없는 프레임을 지정된 VLAN에 소속시킨다.
- 같은 VLAN에서 단말로 나가는 프레임을 일반적으로 태그 없이 전달한다.
- 단말이 802.1Q 태그를 직접 처리하지 않아도 VLAN을 사용할 수 있게 한다.
우편 비유로 보면 각 출입문에 구역 번호가 정해져 있는 것과 같다.
방문자가 번호표를 붙이지 않아도 어느 출입문으로 들어왔는지 보고 구역을 정한다.
장비와 설정 방식에 따라 Access VLAN, Port VLAN ID, PVID 같은 표현을 볼 수 있다.
세부 동작과 용어는 장비마다 차이가 있지만, 태그 없는 입력 프레임을 어느 VLAN에 넣을 것인가를 결정한다는 기본 목적은 같다.
ㅁ 스위치가 두 대라면 구역마다 선이 필요할까?
한 층에 있는 Switch A와 다른 층의 Switch B에 개발팀과 인사팀 장비가 나뉘어 연결되어 있다고 하자.
개발팀 A ─ VLAN 10 ─ Switch A
인사팀 A ─ VLAN 20 ─ Switch A
개발팀 B ─ VLAN 10 ─ Switch B
인사팀 B ─ VLAN 20 ─ Switch B
두 스위치의 VLAN 10끼리 연결하고 VLAN 20끼리도 연결하려면 VLAN마다 별도의 물리적 링크를 둘 수 있다.
Switch A ══ VLAN 10 전용 링크 ══ Switch B
Switch A ══ VLAN 20 전용 링크 ══ Switch B
VLAN이 늘어날 때마다 스위치 사이의 선도 늘어난다면 물리적 자원을 아끼기 위해 VLAN을 만든 의미가 줄어든다.
그래서 여러 VLAN의 프레임을 하나의 링크로 운반하는 방법이 필요하다.
이 역할을 하는 포트를 Trunk Port라고 한다.
VLAN 10, 20, 30
Switch A ═══════ Trunk ═══════ Switch B
하나의 트렁크 링크에는 서로 다른 VLAN의 프레임이 함께 지나간다.
그렇다면 Switch B는 도착한 프레임이 VLAN 10의 것인지 VLAN 20의 것인지 어떻게 구분할까?
프레임에 VLAN 번호가 적힌 꼬리표를 붙인다.
ㅁ 802.1Q 태그는 봉투에 붙인 구역 번호다
이더넷 프레임에 VLAN 정보를 표시하는 표준이 IEEE 802.1Q다.
스위치는 트렁크로 프레임을 보낼 때 이더넷 헤더에 4바이트의 802.1Q Tag를 추가할 수 있다.
일반 Ethernet Frame
[Destination MAC][Source MAC][EtherType][Payload][FCS]
802.1Q Tagged Frame
[Destination MAC][Source MAC][802.1Q Tag][EtherType][Payload][FCS]
태그 안에는 어떤 VLAN의 프레임인지 나타내는 VLAN ID(VID)가 들어 있다.
VLAN 10 Frame → Tag: VID 10
VLAN 20 Frame → Tag: VID 20
Switch B는 태그의 VLAN ID를 읽고 프레임을 해당 VLAN 안에서만 처리한다.
VLAN 10의 브로드캐스트 프레임이 트렁크를 지나더라도 Switch B의 VLAN 10 포트로만 전달된다.
VLAN 20 포트에는 전달되지 않는다.
802.1Q 태그의 주요 필드는 다음과 같다.
| 필드 | 크기 | 역할 |
| TPID | 16비트 | 802.1Q 태그가 있음을 표시하며 일반적으로 0x8100 사용 |
| PCP | 3비트 | 프레임 우선순위를 표현하는 데 사용 |
| DEI | 1비트 | 혼잡 시 폐기 가능성을 표시하는 데 사용 |
| VLAN ID | 12비트 | 프레임이 속한 VLAN을 식별 |
VLAN ID는 12비트이므로 0부터 4095까지 표현할 수 있다.
이 가운데 0과 4095는 특별한 용도로 예약되어 일반적인 VLAN 식별에는 보통 1~4094를 사용한다.
입문 단계에서 모든 비트를 외울 필요는 없다.
핵심은 다음 한 문장이다.
트렁크에서는 여러 VLAN의 프레임이 같은 선을 사용하므로, 802.1Q 태그로 소속을 구분한다.
ㅁ 프레임 한 장의 이동을 따라가 보자
VLAN 10의 PC A가 다른 스위치에 연결된 VLAN 10의 PC B에게 프레임을 보낸다고 하자.
PC A ─ Access VLAN 10 ─ Switch A
║
802.1Q Trunk
║
PC B ─ Access VLAN 10 ─ Switch B
프레임은 다음 순서로 이동한다.
ㅇ 1단계: PC A가 태그 없는 프레임을 보낸다
일반 단말인 PC A는 평소처럼 Untagged Frame을 보낸다.
ㅇ 2단계: Switch A가 VLAN 10으로 분류한다.
프레임이 들어온 Access Port가 VLAN 10으로 설정되어 있으므로 스위치는 이 프레임을 VLAN 10에 소속시킨다.
MAC 주소 학습도 VLAN의 범위 안에서 이루어진다.
같은 MAC 주소라도 VLAN이 다르면 별개의 논리적 영역으로 다룰 수 있다.
ㅇ 3단계: 트렁크에서 VLAN 10 태그를 붙인다
Switch A는 프레임을 트렁크로 보내면서 VLAN ID 10을 나타내는 802.1Q Tag를 추가한다.
ㅇ 4단계: Switch B가 태그를 읽는다
Switch B는 VLAN ID 10을 확인하고 프레임을 자신의 VLAN 10 영역에서 처리한다.
ㅇ 5단계: PC B에는 태그 없이 전달한다
PC B가 연결된 Access Port로 프레임을 내보낼 때 스위치는 일반적으로 802.1Q Tag를 제거한다.
PC B는 태그 없는 원래 형태의 이더넷 프레임을 받는다.
Untagged → VLAN 10으로 분류 → Tagged VID 10 → VLAN 10 확인 → Untagged
Access Port와 Trunk Port가 서로 다른 역할을 맡기 때문에 단말은 VLAN 태그를 몰라도 되고,
스위치 사이는 여러 VLAN을 하나의 링크로 운반할 수 있다.
ㅁ Native VLAN은 무엇일까?
802.1Q 트렁크에서는 특정 VLAN의 프레임을 태그 없이 운반하도록 구성할 수 있다.
이런 VLAN을 흔히 Native VLAN이라고 한다.
한쪽 스위치는 태그 없는 프레임을 VLAN 10으로 해석하고,
반대쪽 스위치는 VLAN 20으로 해석한다면 같은 프레임을 서로 다른 구역의 것으로 판단할 수 있다.
이를 Native VLAN Mismatch라고 부른다.
Native VLAN의 기본값과 처리 방식은 장비 및 설정에 따라 다를 수 있다.
따라서 트렁크 양쪽의 태그 정책과 허용 VLAN 목록을 명확히 맞춰야 한다.
기초 원리는 간단하다.
- Tagged Frame은 VLAN ID로 소속을 판단한다.
- Untagged Frame을 어느 VLAN으로 볼지는 포트 설정에 달려 있다.
ㅁ VLAN이 다르면 스위치로 통신할 수 있을까?
VLAN 10과 VLAN 20은 서로 다른 Broadcast Domain이다.
스위치는 같은 VLAN 안에서 MAC 주소를 기준으로 프레임을 전달하지만, VLAN의 경계를 넘어 프레임을 그대로 전달하지 않는다.
VLAN 10 ─X─ VLAN 20
L2 경계
서로 다른 VLAN 사이에서 통신하려면 IP 주소를 기준으로 두 네트워크 사이를 중계하는 L3 Routing이 필요하다.
라우터의 물리 인터페이스를 사용하거나 L3 스위치의 SVI(Switched Virtual Interface)를 게이트웨이로 구성할 수 있다. 이를 Inter-VLAN Routing이라고 한다.
VLAN 10 ─ Gateway / Routing ─ VLAN 20
VLAN은 네트워크를 분리하지만 그 자체가 완전한 보안 정책은 아니다. 라우팅을 허용한 뒤 어느 통신을 통과시킬지는 방화벽이나 ACL 같은 별도의 정책으로 결정해야 한다.
따라서 다음 두 문장을 구분해야 한다.
- VLAN은 L2 Broadcast Domain을 나눈다.
- 보안 정책은 나뉜 영역 사이에 어떤 통신을 허용할지 정한다.
ㅁ 우편 비유를 네트워크 용어로 바꾸면
지금까지의 장면을 실제 네트워크 용어와 연결하면 다음과 같다.
| 우편 시스템의 모습 | 네트워크 용어 | 의미 |
| 같은 공지를 받는 동네 | Broadcast Domain | 하나의 브로드캐스트 프레임이 도달하는 L2 범위 |
| 건물 안의 논리적인 구역 | VLAN | 하나의 물리 네트워크를 나눈 논리적 L2 네트워크 |
| 한 구역의 일반 출입문 | Access Port | 보통 하나의 VLAN에 단말을 연결하는 포트 |
| 여러 구역이 함께 쓰는 통로 | Trunk Port | 여러 VLAN의 프레임을 하나의 링크로 운반하는 포트 |
| 봉투에 붙인 구역 번호 | 802.1Q Tag | 트렁크에서 프레임의 VLAN 소속을 표시하는 정보 |
| 구역 번호 | VLAN ID | VLAN을 식별하는 12비트 값 |
| 번호표가 붙은 봉투 | Tagged Frame | 802.1Q VLAN 정보가 포함된 프레임 |
| 번호표가 없는 봉투 | Untagged Frame | 802.1Q VLAN 정보가 없는 프레임 |
| 다른 구역으로 넘기는 우체국 | Inter-VLAN Routing | 서로 다른 VLAN 사이의 L3 통신 |
VLAN의 전체 동작은 다음처럼 정리할 수 있다.
Access Port : 태그 없는 단말 프레임을 특정 VLAN에 소속시킨다.
Switch 내부 : VLAN마다 학습과 전달 범위를 구분한다.
Trunk Port : 802.1Q 태그로 여러 VLAN을 한 링크에 실어 보낸다.
L3 Gateway : 서로 다른 VLAN 사이의 통신을 라우팅한다.
ㅁ 직접 확인해 보기
다음 구조에서 브로드캐스트 프레임이 어디까지 전달되는지 생각해 보자.
PC A ─ Access VLAN 10 ─ Switch A
PC C ─ Access VLAN 20 ─ Switch A
║ Trunk: VLAN 10, 20 허용
PC B ─ Access VLAN 10 ─ Switch B
PC D ─ Access VLAN 20 ─ Switch B
PC A가 브로드캐스트를 보내면 다음과 같이 동작한다.
1. Switch A는 프레임을 VLAN 10으로 분류한다.
2. VLAN 10을 허용하는 트렁크에 VID 10 태그를 붙여 전달한다.
3. Switch B는 VLAN 10 프레임으로 처리해 PC B 방향으로 전달한다.
4. VLAN 20에 속한 PC C와 PC D에는 전달하지 않는다.
Linux 브리지가 VLAN 필터링을 사용하는 환경에서는 다음 명령으로 포트별 VLAN 정보를 확인할 수 있다.
bridge vlan show
VLAN 인터페이스가 구성되어 있다면 다음 명령으로 VLAN ID와 부모 인터페이스를 볼 수 있다.
ip -details link show type vlan
출력에서 vlan id, PVID, Egress Untagged 같은 항목을 찾아보자. 표시 내용은 실제 구성과 iproute2 버전에 따라 다르며, VLAN이나 브리지가 구성되지 않은 일반 호스트에서는 결과가 비어 있을 수 있다.
운영 중인 스위치의 VLAN 설정을 관찰 목적만으로 변경하면 네트워크가 즉시 단절될 수 있으므로 읽기 명령으로 현재 상태만 확인한다.
ㅁ 핵심 정리
- Broadcast Domain은 하나의 브로드캐스트 프레임이 도달하는 L2 범위다.
- VLAN은 하나의 물리적인 스위치를 여러 논리적 Broadcast Domain으로 나눈다.
- Access Port는 일반적으로 하나의 VLAN에 단말을 연결하며 태그 없는 프레임을 처리한다.
- Trunk Port는 여러 VLAN의 프레임을 하나의 물리 링크로 운반한다.
- IEEE 802.1Q Tag의 VLAN ID가 트렁크에서 프레임의 소속을 구분한다.
- Native VLAN과 Untagged Frame 처리 정책은 트렁크 양쪽에서 일치해야 한다.
- 서로 다른 VLAN 사이의 통신에는 Inter-VLAN Routing이 필요하다.
- VLAN 분리와 접근 제어 정책은 같은 개념이 아니다.
핵심 용어: Broadcast Domain, VLAN, Access Port, Trunk Port, IEEE 802.1Q, VLAN ID, Tagged Frame, Untagged Frame, PVID, Native VLAN, Inter-VLAN Routing, SVI
VLAN은 스위치를 물리적으로 나누지 않고도, 브로드캐스트가 머무는 논리적인 동네의 경계를 만든다.
ㅁ 다음 이야기
VLAN을 사용하면 하나의 건물 안에 여러 동네를 만들 수 있다.
이제 VLAN 10 안의 PC A가 같은 동네에 있는 PC B에게 데이터를 보내려고 한다.
PC A는 애플리케이션이 알려 준 B의 IP 주소를 알고 있다.
하지만 스위치가 실제 프레임을 전달할 때 확인하는 것은 IP 주소가 아니라 목적지 MAC 주소다.
IP 주소는 아는데 MAC 주소를 모르면 첫 프레임은 누구에게 보내야 할까?
다음 글에서는 「IP 주소만 알면 바로 편지를 건넬 수 있을까?」라는 질문을 통해 IP Address와 MAC Address의 역할, ARP Request, ARP Reply, ARP Cache를 살펴본다.
'DevOps > Network' 카테고리의 다른 글
| [Network] 07. 같은 동네와 다른 동네는 누가 판단할까? (0) | 2026.07.15 |
|---|---|
| [Network] 06. IP 주소만 알면 바로 편지를 건넬 수 있을까? (0) | 2026.07.15 |
| [Network] 04.길이 원을 그리면 편지는 왜 끝없이 늘어날까? (0) | 2026.07.15 |
| [Network] 03. 스위치는 어떻게 편지가 갈 길을 기억할까? (0) | 2026.07.15 |
| [Network] 02. 모두가 동시에 말하면 누가 들을 수 있을까? (0) | 2026.07.15 |
