1. 개요# 서브넷 (subnet)은 IP 주소의 앞부분이 같은 주소들의 묶음이다. 어디까지가 앞부분(네트워크)인지는 마스크 가 정한다. 192.168.0.112/24 라면 앞 24비트 192.168.0 이 네트워크이고, 뒤 8비트 .112 가 그 안의 기기 번호다.
주소 2진수 마스크 192 11000000 11111111 168 10101000 11111111 0 00000000 11111111 112 01110000 00000000 네트워크 부분 · 앞 24비트 · 192.168.0 호스트 · .112 마스크의 1 이 있는 자리까지가 네트워크(동네 이름), 0 인 자리가 그 안의 기기 번호다 /24 는 32비트 중 앞 24비트가 네트워크라는 뜻이다
서브넷은 물리적인 것이 아니라 주소로 정한 약속이다. 기기는 보낼 때마다 “이 주소가 내 서브넷 안인가” 를 판단해서, 안이면 직접 보내고 밖이면 게이트웨이(공유기)에게 맡긴다.
2. 마스크 표기# 같은 마스크를 세 가지로 쓴다. 마스크는 1 이 앞에서부터 이어지기만 하니, 1 의 개수만 적은 /24 가 가장 짧다.
255.255.255.0 10진수 · 서브넷 마스크 = 0xffffff00 16진수 · macOS ifconfig = /24 접두 길이 · CIDR 표기 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 셋 다 같은 말이다 — 1 이 앞에서부터 24개 이어진다 마스크는 1 이 앞에서부터 이어지기만 하니, 1 의 개수(/24)만 적어도 충분하다
3. 크기# 접두 길이가 클수록 서브넷은 작아진다. 1 늘 때마다 절반이 된다.
막대 길이 = 기기 번호에 쓰는 비트 수 (32 − 접두 길이) /8 16,777,216 칸 대형 사설망 (10.0.0.0/8) /16 65,536 칸 쿠버네티스 Pod 전체 대역 /24 256 칸 · 기기 254대 집, 사무실 한 층 /26 64 칸 · 기기 62대 작은 서브넷 /30 4 칸 · 기기 2대 예전 라우터 사이 링크 /31 2 칸 · 기기 2대 라우터 사이 링크 (예외) /32 1 칸 주소 하나 · 칸 수 = 2^(32 − 접두 길이). 기기는 양 끝(네트워크 주소, 브로드캐스트) 두 칸을 빼고 붙인다 · /31 은 둘만 잇는 링크라 양 끝을 비울 필요가 없고(RFC 3021), /32 는 주소 하나를 가리킬 때 쓴다 접두 길이가 1 늘 때마다 서브넷 크기는 절반이 된다
3.1. 주소 범위의 쓰임# .0 네트워크 주소 .1 공유기 (관례) .2 ~ .254 기기들에게 나눠 주는 범위 .255 브로드캐스트 192.168.0.0/24 의 256칸 · .0 은 서브넷 자체의 이름이라 기기에 주지 않는다 · .255 는 서브넷 전체에 한 번에 보내는 브로드캐스트 주소다 · 공유기를 .1 에 두는 건 규칙이 아니라 관례다 (.254 를 쓰는 장비도 있다) 256칸 중 양 끝 두 칸은 이름과 브로드캐스트에 쓰여서, 기기는 254대까지 붙는다
4. 같은 서브넷 판단# 기기는 자기 IP 와 도착 IP 를 같은 마스크로 잘라서(AND 계산) 앞부분이 같은지 본다. 이 판단이 ARP 로 누구의 MAC 을 찾을지를 정한다.
주소 AND 마스크 네트워크 부분 내 IP 192.168.0.112 /24 192.168.0.0 기준 (내 서브넷) 도착 IP ① 192.168.0.77 /24 192.168.0.0 같다 → 직접 (ARP) 도착 IP ② 142.250.1.1 /24 142.250.1.0 다르다 → 게이트웨이 AND 는 마스크가 1 인 자리만 남기고 0 인 자리를 지우는 계산이다 — 결국 앞 24비트만 비교하는 것과 같다 내 주소와 도착 주소를 같은 마스크로 잘라서 앞부분이 같으면 같은 서브넷이다
중요한 점 하나. 마스크는 패킷에 실리지 않는다. IP 헤더의 주소 칸은 출발과 도착 둘뿐이다. 마스크는 각 기기가 혼자 들고 있는 설정이고, 그래서 한 기기만 마스크가 틀려도 패킷에는 흔적이 남지 않는다.
5. 사설 대역# 인터넷에서 쓰지 않고 내부에서만 쓰도록 남겨 둔 대역이 있다. 서로 만나지 않는 곳끼리는 같은 숫자를 써도 된다. 밖으로 나갈 때는 NAT 로 공인 주소로 바뀐다.
10.0.0.0/8
약 1,677만 개. 회사망, 클라우드 VPC, 쿠버네티스 Pod 대역(10.244.x 등)에 많이 쓴다
172.16.0.0/12
약 104만 개 (172.16 ~ 172.31). 도커 기본 브리지가 172.17.0.0/16 이다
192.168.0.0/16
65,536개. 집 공유기 대부분이 여기서 /24 하나를 고른다
100.64.0.0/10
통신사 CGNAT 용 공유 대역 (RFC 6598). 공유기 WAN 이 이 주소를 받으면 통신사가 NAT 를 한 번 더 한다
127.0.0.0/8
루프백. 자기 자신에게 보내는 주소 (127.0.0.1)
169.254.0.0/16
링크 로컬. DHCP 를 못 받았을 때 기기가 스스로 붙이는 주소
6. LAN 과의 관계# 서브넷은 주소가 정하는 범위이고, LAN 은 선이 정하는 범위다. 보통 LAN 하나에 서브넷 하나를 짝지어서 둘이 같은 범위가 된다. 이 짝을 자동으로 맞춰 주는 게 DHCP 다.
스위치 · AP 노트북 192.168.0.112 폰 192.168.0.77 공유기 192.168.0.1 LAN — 선이 정한 범위 (L2) 서브넷 192.168.0.0/24 (L3) 아래 판 (주황): 선이 이어진 범위 MAC 으로 프레임이 오간다 IP 가 없어도 오간다 (DHCP 요청) ARP 브로드캐스트가 닿는 곳 위 판 (파랑): 주소로 정한 범위 직접 보낼지 공유기에 맡길지 판단 공유기가 DHCP 로 나눠 준다 점선: 같은 기기의 몸과 주소 두 판이 겹쳐야 같은 서브넷 = 같은 LAN 같은 기기가 아래 판(선)에서는 몸으로, 위 판(주소)에서는 IP 로 존재한다 짝이 맞아야 기기의 판단이 실제 선 연결과 맞는다. 어긋나면 이렇게 된다.
짝이 맞을 때 정상 같은 서브넷, 다른 LAN 실패 다른 서브넷, 같은 LAN 돌아감 LAN (스위치·와이파이) 노트북 .112 폰 .77 192.168.0.0/24 공유기 같은 서브넷 → 직접 보낸다 다른 서브넷 → 공유기로 LAN 1 LAN 2 A .1.10 B .1.20 둘 다 192.168.1.0/24 라우터 A 가 직접 보내려 ARP 를 외침 브로드캐스트가 LAN 2 에 닿지 않는다 LAN (스위치 하나) A .1.10 B .2.20 …1.0/24 …2.0/24 공유기 바로 옆인데 공유기로 돌아감 설정에 따라 실패하기도 점선 상자는 선이 정하는 LAN, 색 띠는 주소가 정하는 서브넷 — 둘이 겹쳐야 노트북의 판단이 맞는다
7. 대역이 겹칠 때# 사설 대역은 서로 만나지 않는다는 전제로 겹쳐 써도 되는 주소다. VPN 처럼 두 네트워크를 한 기기 위에서 만나게 하면 그 전제가 깨진다. 공유기 기본값이 대개 192.168.0.x 나 192.168.1.x 라서 자주 생긴다.
노트북 라우팅 테이블 192.168.1.0/24 → en0 (와이파이) 192.168.1.0/24 → utun (VPN) 같은 대역 · 같은 길이 → OS 가 하나만 고른다 집 와이파이 LAN · 192.168.1.0/24 프린터 192.168.1.20 VPN 터널 → 회사 · 192.168.1.0/24 회사 서버 192.168.1.20 en0 이 이기면: 회사로 갈 패킷이 집으로 샌다 utun 이 이기면: 집 프린터와 공유기가 안 된다 · 공인 IP 로 부를 땐 문제없다 — VPN 처럼 사설 IP 를 직접 부를 때만 겹친다 · 확인: route -n get 192.168.1.20 → interface 가 en0 이면 집으로 새는 중 노트북은 192.168.1.20 이 어느 쪽인지 서브넷으로 구분하지 못한다 — 집 서브넷을 흔하지 않은 대역으로 바꾸면 피할 수 있다
8. 쿠버네티스의 대역# 쿠버네티스 클러스터가 쓰는 세 대역 노드 네트워크 192.168.10.0/24 · 회사망 Pod 대역 10.244.0.0/16 Service 대역 10.96.0.0/12 노드 1 10.244.1.0/24 노드 2 10.244.2.0/24 실제 서버 주소 노드끼리 통신 가상 주소 · 기기에 안 붙음 노드 커널이 Pod IP 로 바꿈 Pod 대역은 노드마다 /24 씩 잘라서 나눠 준다 (CNI) 세 대역은 서로 겹치면 안 되고, 회사망이나 VPN 대역과도 겹치면 안 된다 겹치면 노드가 Pod 주소를 회사 서버 주소로 착각한다 — 클러스터를 만들 때 정하고 나중에 바꾸기 어렵다 쿠버네티스도 서브넷 규칙을 그대로 쓴다 — 큰 대역을 정하고, 노드마다 잘라 나눈다
9. 확인 명령# # macOS
ifconfig en0 | grep "inet " # 내 주소와 마스크 (netmask 0xffffff00 = /24)
netstat -rn -f inet # 라우팅 테이블의 서브넷 줄
route -n get 192.168.0.77 # 이 주소가 직접인지 게이트웨이인지
# Linux
ip -4 addr show # 192.168.0.112/24 처럼 바로 CIDR 로 보인다
ip route get 192.168.0.77 # 같은 서브넷이면 via 없이 dev 만 나온다
ipcalc 192.168.0.112/24 # 네트워크 주소, 브로드캐스트, 범위 계산 (설치 필요)
10. 관련 문서# 11. 출처# 사설 대역은 RFC 1918 에, CIDR 와 가장 길게 맞는 줄 규칙은 RFC 4632 에, 통신사 공유 대역은 RFC 6598 에, /31 링크는 RFC 3021 에 근거한다.
“The Internet Assigned Numbers Authority (IANA) has reserved the following three blocks of the IP address space for private internets”
“Forwarding in the Internet is done on a longest-match basis.”
“The Shared Address Space address range is 100.64.0.0/10.”