1. 개요

서브넷(subnet)은 IP 주소의 앞부분이 같은 주소들의 묶음이다. 어디까지가 앞부분(네트워크)인지는 마스크가 정한다. 192.168.0.112/24 라면 앞 24비트 192.168.0 이 네트워크이고, 뒤 8비트 .112 가 그 안의 기기 번호다.

주소2진수마스크19211000000111111111681010100011111111000000000111111111120111000000000000네트워크 부분 · 앞 24비트 · 192.168.0호스트 · .112마스크의 1 이 있는 자리까지가 네트워크(동네 이름), 0 인 자리가 그 안의 기기 번호다
/24 는 32비트 중 앞 24비트가 네트워크라는 뜻이다

서브넷은 물리적인 것이 아니라 주소로 정한 약속이다. 기기는 보낼 때마다 “이 주소가 내 서브넷 안인가” 를 판단해서, 안이면 직접 보내고 밖이면 게이트웨이(공유기)에게 맡긴다.

2. 마스크 표기

같은 마스크를 세 가지로 쓴다. 마스크는 1 이 앞에서부터 이어지기만 하니, 1 의 개수만 적은 /24 가 가장 짧다.

255.255.255.010진수 · 서브넷 마스크=0xffffff0016진수 · macOS ifconfig=/24접두 길이 · CIDR 표기11111111111111111111111100000000셋 다 같은 말이다 — 1 이 앞에서부터 24개 이어진다
마스크는 1 이 앞에서부터 이어지기만 하니, 1 의 개수(/24)만 적어도 충분하다

3. 크기

접두 길이가 클수록 서브넷은 작아진다. 1 늘 때마다 절반이 된다.

막대 길이 = 기기 번호에 쓰는 비트 수 (32 − 접두 길이)/816,777,216 칸대형 사설망 (10.0.0.0/8)/1665,536 칸쿠버네티스 Pod 전체 대역/24256 칸 · 기기 254대집, 사무실 한 층/2664 칸 · 기기 62대작은 서브넷/304 칸 · 기기 2대예전 라우터 사이 링크/312 칸 · 기기 2대라우터 사이 링크 (예외)/321 칸주소 하나· 칸 수 = 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 마스크네트워크 부분내 IP192.168.0.112/24192.168.0.0기준 (내 서브넷)도착 IP ①192.168.0.77/24192.168.0.0같다 → 직접 (ARP)도착 IP ②142.250.1.1/24142.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.1LAN — 선이 정한 범위 (L2)서브넷 192.168.0.0/24 (L3)아래 판 (주황): 선이 이어진 범위MAC 으로 프레임이 오간다IP 가 없어도 오간다 (DHCP 요청)ARP 브로드캐스트가 닿는 곳위 판 (파랑): 주소로 정한 범위직접 보낼지 공유기에 맡길지 판단공유기가 DHCP 로 나눠 준다점선: 같은 기기의 몸과 주소두 판이 겹쳐야같은 서브넷 = 같은 LAN같은 기기가 아래 판(선)에서는 몸으로, 위 판(주소)에서는 IP 로 존재한다

짝이 맞아야 기기의 판단이 실제 선 연결과 맞는다. 어긋나면 이렇게 된다.

짝이 맞을 때정상같은 서브넷, 다른 LAN실패다른 서브넷, 같은 LAN돌아감LAN (스위치·와이파이)노트북.112폰.77192.168.0.0/24공유기같은 서브넷 → 직접 보낸다다른 서브넷 → 공유기로LAN 1LAN 2A.1.10B.1.20둘 다 192.168.1.0/24라우터A 가 직접 보내려 ARP 를 외침브로드캐스트가 LAN 2 에 닿지 않는다LAN (스위치 하나)A.1.10B.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.20VPN 터널 → 회사 · 192.168.1.0/24회사 서버 192.168.1.20en0 이 이기면: 회사로 갈 패킷이 집으로 샌다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/16Service 대역10.96.0.0/12노드 110.244.1.0/24노드 210.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. 관련 문서

  • DHCP — 서브넷 주소와 마스크를 기기에 나눠 준다
  • ARP — 같은 서브넷이면 상대의 MAC 을, 아니면 게이트웨이의 MAC 을 찾는다
  • BGP — 서브넷 단위로 대역을 인터넷에 광고한다
  • LAN — 선이 정하는 범위. 브로드캐스트가 닿는 곳
  • Network & K8s.01-2 Across the Network — 마스크가 패킷에 없다는 것, 라우팅 테이블의 가장 긴 줄

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.”