IP 서브넷 계산은 모든 개발자와 시스템 관리자가 결국 이해해야 하는 주제입니다. AWS에서 VPC를 구성하거나, 회사 네트워크를 분할하거나, 두 호스트가 서로 통신하지 못하는 이유를 디버깅할 때 서브넷 계산이 항상 필요합니다. 이 가이드는 CIDR 표기법, 서브넷 마스크, 네트워크 파라미터 계산 방법을 설명하고 온라인 도구로 간편하게 계산하는 방법을 알려드립니다.
서브넷 분할이란?
서브넷(서브네트워크)은 IP 네트워크를 논리적으로 분할한 것입니다. 큰 IP 주소 블록을 더 작고 관리하기 쉬운 세그먼트로 나누는 장점:
- 격리 — 서브넷 내 트래픽은 로컬에 머물고, 서브넷 간 트래픽은 게이트웨이를 통해 라우팅
- 보안 — 방화벽과 ACL로 서브넷 경계에 규칙 적용
- 효율성 — 작은 브로드캐스트 도메인으로 불필요한 트래픽 감소
- 주소 관리 — 각 세그먼트에 필요한 만큼만 주소 할당
CIDR 표기법 설명
CIDR(클래스 없는 도메인 간 라우팅)은 IP 주소와 라우팅 프리픽스를 함께 표현합니다:
192.168.1.0/24
│ │
└─ 네트워크 └─ 프리픽스 길이 (비트)
주소
/24는 첫 번째 24비트가 네트워크 부분임을 의미합니다. 나머지 8비트는 호스트 부분입니다. 이것이 서브넷에 존재할 수 있는 호스트 수를 결정합니다.
프리픽스 길이와 호스트 수 대응표
| CIDR | 서브넷 마스크 | 사용 가능 호스트 수 | 일반적인 용도 |
|---|---|---|---|
/8 | 255.0.0.0 | 16,777,214 | 대형 ISP 블록 |
/16 | 255.255.0.0 | 65,534 | 기업 네트워크 |
/24 | 255.255.255.0 | 254 | 일반적인 사무실 LAN |
/25 | 255.255.255.128 | 126 | /24를 반으로 분할 |
/26 | 255.255.255.192 | 62 | 소규모 세그먼트 |
/27 | 255.255.255.224 | 30 | VLAN 세그먼트 |
/28 | 255.255.255.240 | 14 | 소규모 팀 |
/29 | 255.255.255.248 | 6 | 포인트-투-포인트 링크 |
/30 | 255.255.255.252 | 2 | 라우터 간 연결 |
/31 | 255.255.255.254 | 0 (특수) | 포인트-투-포인트 (RFC 3021) |
/32 | 255.255.255.255 | 1 | 호스트 라우트 |
사용 가능 호스트 수 = 2^(32 - 프리픽스 길이) - 2 (네트워크와 브로드캐스트 주소 제외)
주요 서브넷 파라미터
192.168.10.64/26을 예로 들면:
| 파라미터 | 값 | 계산 방법 |
|---|---|---|
| 네트워크 주소 | 192.168.10.64 | IP AND 서브넷 마스크 |
| 서브넷 마스크 | 255.255.255.192 | 26개의 1, 6개의 0 (2진수) |
| 브로드캐스트 주소 | 192.168.10.127 | 호스트 비트 모두 1로 설정 |
| 첫 번째 사용 가능 호스트 | 192.168.10.65 | 네트워크 주소 + 1 |
| 마지막 사용 가능 호스트 | 192.168.10.126 | 브로드캐스트 주소 - 1 |
| 사용 가능 호스트 수 | 62 | 2^6 - 2 |
| 와일드카드 마스크 | 0.0.0.63 | 서브넷 마스크 반전 |
2진수 분석
IP: 11000000.10101000.00001010.01000000 (192.168.10.64)
마스크: 11111111.11111111.11111111.11000000 (255.255.255.192)
네트워크: 11000000.10101000.00001010.01000000 (192.168.10.64)
브로드캐스트: 11000000.10101000.00001010.01111111 (192.168.10.127)
첫 번째 26비트는 고정(네트워크 부분), 마지막 6비트가 가변(호스트 공간)입니다.
실전 서브넷 설계
AWS VPC 설계
AWS는 각 VPC와 서브넷에 CIDR 블록을 지정해야 합니다. 일반적인 3계층 구성:
VPC: 10.0.0.0/16 (65,536개 주소)
├─ 퍼블릭: 10.0.1.0/24 (254개 사용 가능 — 인터넷 향)
├─ 프라이빗: 10.0.2.0/24 (254개 사용 가능 — 앱 계층)
└─ 데이터베이스: 10.0.3.0/24 (254개 사용 가능 — RDS 격리)
AWS는 서브넷당 5개 주소를 예약합니다(처음 4개 + 브로드캐스트). /24당 실제 사용 가능한 주소는 251개입니다.
Kubernetes Pod CIDR
K8s 클러스터는 노드, Pod, 서비스에 겹치지 않는 CIDR이 필요합니다:
# kubeadm 설정 스니펫
networking:
podSubnet: 10.244.0.0/16 # Pod IP
serviceSubnet: 10.96.0.0/12 # ClusterIP 서비스
이것들이 노드 네트워크나 VPC CIDR과 겹치지 않도록 확인하세요.
Docker 커스텀 네트워크
# 커스텀 브리지 네트워크 생성
docker network create \
--driver bridge \
--subnet 172.20.0.0/24 \
--gateway 172.20.0.1 \
my-network
docker network ls와 ip route를 사용하여 기존 네트워크와의 겹침을 확인하세요.
코드로 서브넷 계산하기
Python (ipaddress 모듈)
Python의 표준 라이브러리가 모든 서브넷 계산을 처리합니다:
import ipaddress
net = ipaddress.IPv4Network('192.168.10.64/26', strict=False)
print(net.network_address) # 192.168.10.64
print(net.broadcast_address) # 192.168.10.127
print(net.netmask) # 255.255.255.192
print(net.num_addresses) # 64
print(list(net.hosts())[:3]) # [192.168.10.65, .66, .67]
# IP가 서브넷에 있는지 확인
ip = ipaddress.IPv4Address('192.168.10.80')
print(ip in net) # True
# /28 서브넷으로 분할
for subnet in net.subnets(new_prefix=28):
print(subnet)
# 192.168.10.64/28
# 192.168.10.80/28
# 192.168.10.96/28
# 192.168.10.112/28
Go net 패키지
import "net"
_, ipNet, err := net.ParseCIDR("192.168.10.64/26")
if err != nil {
panic(err)
}
fmt.Println(ipNet.IP) // 192.168.10.64 (네트워크 주소)
fmt.Println(ipNet.Mask) // ffffffc0 (16진 마스크)
// 포함 여부 확인
testIP := net.ParseIP("192.168.10.80")
fmt.Println(ipNet.Contains(testIP)) // true
프라이빗 IP 주소 범위
이 범위는 내부 사용을 위해 예약되어 있습니다(RFC 1918):
| 범위 | CIDR | 크기 |
|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 약 1,677만 주소 |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 약 104만 주소 |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 65,536 주소 |
내부 인프라에는 항상 프라이빗 범위를 사용하세요. 퍼블릭 IP는 인터넷에서 라우팅되지만 프라이빗 IP는 라우팅되지 않습니다.
흔한 서브넷 계산 실수
예약 주소 잊기: 모든 서브넷은 네트워크 주소와 브로드캐스트 주소 2개를 잃습니다. /29는 총 8개 주소이지만 사용 가능한 것은 6개뿐입니다.
서브넷 겹침: 10.0.1.0/24와 10.0.0.0/16은 겹칩니다. /24의 모든 주소는 /16에도 포함되어 라우팅 모호성을 유발합니다.
호스트 범위 오프바이원: 첫 번째 사용 가능 호스트는 네트워크+1, 마지막은 브로드캐스트-1입니다. /24의 호스트는 .1부터 .254까지이며 .0부터 .255가 아닙니다.
CIDR 정렬: 서브넷은 프리픽스 길이에 맞게 정렬된 경계에서 시작해야 합니다. 10.0.0.1/24는 유효한 CIDR이 아닙니다(호스트 비트가 설정됨). 올바른 형태는 10.0.0.0/24입니다.
온라인 서브넷 계산기 사용법
임의의 IPv4 주소와 CIDR 표기를 입력하여 즉시 얻을 수 있는 정보:
- 네트워크 주소와 브로드캐스트 주소
- 서브넷 마스크와 와일드카드 마스크
- 첫 번째와 마지막 사용 가능 호스트
- 총 호스트 수와 사용 가능 호스트 수
- 모든 필드의 2진수 표현
가입 불필요, 광고 없음, 브라우저에서 실행. VPC 계획의 빠른 확인, 네트워크 디버깅, 아키텍처 리뷰 중 서브넷 할당에 유용합니다.