1. 개요
VLAN(Virtual LAN)은 스위치 설정만으로 하나의 LAN 을 여러 LAN 으로 나누는 기술이다. 포트마다 VLAN 번호를 정하면 같은 번호의 포트끼리만 하나의 LAN 이 된다. 선은 그대로인데 브로드캐스트가 닿는 범위가 나뉜다.
나뉜 VLAN 은 서로 완전히 다른 LAN 이다. VLAN 10 의 기기가 VLAN 20 의 기기와 통신하려면 라우터를 거쳐야 한다.
2. VLAN 태그
스위치는 프레임이 어느 VLAN 소속인지 알아야 한다. 이를 위해 Ethernet 헤더의 보내는 MAC 과 EtherType 사이에 4바이트 태그를 끼운다. 규격 이름을 따 802.1Q 태그라고도 부른다.
태그를 끼우면 프레임이 4바이트 길어진다. Ethernet 프레임의 최대 크기가 1518바이트에서 1522바이트로 늘어나는 이유다. 스위치끼리는 이 크기를 받아 주도록 맞춰져 있다.
3. access 포트와 trunk 포트
스위치 포트는 태그를 어떻게 다루는지에 따라 둘로 나뉜다.
스위치는 access 포트로 들어온 프레임에 그 포트의 VLAN 번호로 태그를 붙여 trunk 로 보내고, 반대편 스위치는 태그를 보고 같은 VLAN 의 access 포트로 내보내면서 태그를 뗀다.
4. native VLAN
trunk 포트에 태그 없는 프레임이 들어오면 스위치는 그 프레임을 native VLAN 소속으로 본다. native VLAN 은 trunk 마다 하나씩 정하며, 기본값은 보통 VLAN 1 이다. 반대로 native VLAN 의 프레임은 trunk 로 나갈 때 태그를 붙이지 않는다.
trunk 양쪽의 native VLAN 이 다르면, 한쪽에서 VLAN 10 으로 보낸 태그 없는 프레임이 반대쪽에서 VLAN 20 으로 들어간다. 두 VLAN 이 섞이는 설정 실수라 양쪽을 같게 맞춘다.
5. VLAN 사이 통신
VLAN 이 다르면 같은 스위치에 꽂혀 있어도 서로의 MAC 에 프레임이 닿지 않는다. VLAN 마다 서브넷을 따로 두고, 그 사이를 라우터가 잇는다. 기기 입장에서는 “다른 서브넷이니 게이트웨이로 보낸다” 는 평소의 판단과 같다.
라우터 하나를 trunk 로 스위치에 연결해 여러 VLAN 의 게이트웨이를 겸하게 하기도 한다(router on a stick). 라우터 기능이 들어간 L3 스위치가 이 역할을 스위치 안에서 하기도 한다.
6. 개수 제한
VLAN 번호(VID)는 12비트다. 0 과 4095 는 예약이라 실제로 쓰는 번호는 1~4094, 약 4천 개다. 집이나 회사망에는 충분하지만, 고객마다 망을 나눠 줘야 하는 데이터센터에서는 모자랐다. 이 한계를 넘으려고 24비트 번호를 쓰는 VXLAN 이 나왔다.
7. 리눅스의 VLAN 인터페이스
리눅스에서는 실제 인터페이스 위에 VLAN 인터페이스를 만들어, 그 인터페이스로 나가는 프레임에 태그를 붙인다.
ip link add link eth0 name eth0.10 type vlan id 10 # eth0 위에 VLAN 10 인터페이스
ip addr add 192.168.10.5/24 dev eth0.10
ip link set eth0.10 up
ip -d link show eth0.10 # vlan protocol 802.1Q id 10
# 태그가 실제로 붙는지 보기
tcpdump -i eth0 -e -n vlan # 출력에 "vlan 10" 이 보인다
쿠버네티스의 일반적인 CNI 는 VLAN 을 직접 쓰지 않는다. 노드 사이를 잇는 데는 VXLAN 이나 라우팅을 쓴다.
8. 관련 문서
- LAN — VLAN 이 나누는 대상. 브로드캐스트가 닿는 범위
- VXLAN — VLAN 의 4094 개 한계를 넘고, 떨어진 LAN 을 잇는다
- Subnet — VLAN 마다 하나씩 짝지어 두는 주소 범위
- ARP — VLAN 안에서만 퍼지는 브로드캐스트의 대표
9. 출처
VLAN 태그 형식은 IEEE 802.1Q 가 정의한다. VXLAN 을 정의한 RFC 7348 이 VLAN 의 역할과 4094 개 한계를 이렇게 정리한다.
“A key characteristic of Layer 2 data center networks is their use of Virtual LANs (VLANs) to provide broadcast isolation. A 12-bit VLAN ID is used in the Ethernet data frames to divide the larger Layer 2 network into multiple broadcast domains. This has served well for many data centers that require fewer than 4094 VLANs.”