~ / posts / developer
smith@lab:~/posts$ cat developer/subnet-cidr-calculation.md

서브넷 마스크·CIDR 계산법, /24 /26 호스트 수와 나누기 예제

192.168.10.77/26을 보고 "이 서버랑 192.168.10.130은 같은 네트워크인가?"에 바로 답할 수 있나요? 클라우드에서 VPC를 만들거나, 방화벽 규칙을 쓰거나, 도커 네트워크가 사내 VPN과 겹칠 때마다 서브넷 계산이 필요하더라고요. 결론부터 말하면 CIDR 표기의 /26은 32비트 IP 중 앞 26비트가 네트워크 부분이라는 뜻이고, 남은 6비트로 2^6 = 64개 주소를 만들 수 있으며, 그중 첫 주소(네트워크 주소)와 마지막 주소(브로드캐스트)를 빼면 호스트에 쓸 수 있는 건 62개예요. 192.168.10.77/26은 192.168.10.64~192.168.10.127 범위라서 .130과는 다른 서브넷이고요.

이 글에서는 서브넷 마스크와 CIDR의 관계를 2진수로 풀어 보고, 네트워크·브로드캐스트 주소를 손으로 구하는 법, /31과 /32 같은 예외, 사설 IP 대역, 실제 서브넷 나누기 예제, 그리고 AWS 같은 클라우드에서 계산이 5개씩 어긋나는 이유까지 파이썬 ipaddress로 검증한 숫자로 정리했어요.

핵심 요약

/n은 앞 n비트가 네트워크라는 뜻이에요. 주소 수는 2^(32-n), 일반 서브넷에서 쓸 수 있는 호스트는 2^(32-n) - 2개예요.

네트워크 주소는 IP와 서브넷 마스크를 비트 AND, 브로드캐스트 주소는 호스트 비트를 모두 1로 채운 주소예요.

/31은 점대점 링크용으로 두 주소를 모두 쓰고(RFC 3021), /32는 주소 한 개를 뜻해요.

AWS와 Azure는 서브넷마다 5개, GCP는 4개를 예약해서 /24에서 실제로 쓸 수 있는 건 251개(AWS)예요.

서브넷 마스크와 CIDR, 같은 걸 두 가지로 쓴 것

IPv4 주소는 32비트 숫자를 8비트씩 끊어 10진수 네 개로 적은 거예요. 그리고 이 32비트는 네트워크 부분(어느 동네인지)과 호스트 부분(그 동네의 몇 번지인지)으로 나뉘어요. 어디서 나뉘는지를 알려 주는 방법이 두 가지 있습니다.

255.255.255.192를 2진수로 쓰면 11111111.11111111.11111111.11000000이고, 1이 26개라서 /26과 같아요. 마스크의 마지막 옥텟에 올 수 있는 값은 1이 왼쪽부터 채워지는 경우뿐이라 0, 128, 192, 224, 240, 248, 252, 254, 255 아홉 개밖에 없어요. 이 숫자들만 외워 두면 마스크 ↔ CIDR 변환은 금방 됩니다. 2진수 변환이 낯설면 2진수·16진수 변환 원리를 먼저 보고 오세요.

CIDR서브넷 마스크주소 수사용 가능 호스트흔한 용도
/16255.255.0.065,53665,534클라우드 VPC 전체
/20255.255.240.04,0964,094큰 프라이빗 서브넷
/22255.255.252.01,0241,022중간 규모 서브넷
/24255.255.255.0256254사무실·가정 LAN
/25255.255.255.128128126/24를 반으로
/26255.255.255.1926462부서·용도별 서브넷
/27255.255.255.2243230작은 서버 그룹
/28255.255.255.2401614AWS 최소 서브넷
/29255.255.255.24886고정 IP 블록
/30255.255.255.25242라우터 간 링크(전통 방식)
/31255.255.255.25422 (예외)점대점 링크
/32255.255.255.25511 (단일 호스트)방화벽 규칙의 IP 하나

CIDR이 하나 커질 때마다(예: /24 → /25) 주소 수가 정확히 절반이 돼요. 호스트 비트가 하나 줄어서 2^n의 n이 1 줄기 때문이에요.

CIDR별 사용 가능한 호스트 수 (2^n - 2)
/24/24 · 254개254개/25/25 · 126개126개/26/26 · 62개62개/27/27 · 30개30개/28/28 · 14개14개/29/29 · 6개6개/30/30 · 2개2개

프리픽스가 1 늘 때마다 주소 수가 절반으로 줄어요

단위: 개 · 자료: 파이썬 ipaddress 모듈로 직접 계산
표로 보기
구분호스트 수
/24254
/25126
/2662
/2730
/2814
/296
/302

네트워크 주소와 브로드캐스트 주소 계산법

192.168.10.77/26의 범위를 손으로 구해 볼게요. 앞의 세 옥텟은 마스크가 255라 그대로 두고, 마지막 옥텟만 보면 됩니다.

  1. IP 마지막 옥텟 77을 2진수로: 01001101
  2. 마스크 마지막 옥텟 192를 2진수로: 11000000
  3. 비트 AND(둘 다 1인 자리만 1): 01000000 = 64 → 네트워크 주소 192.168.10.64
  4. 호스트 비트(뒤 6자리)를 모두 1로: 01111111 = 127 → 브로드캐스트 주소 192.168.10.127
  5. 그 사이 .65~.126이 호스트에 쓸 수 있는 62개 주소
IP 192.168.10.77과 서브넷 마스크 255.255.255.192의 마지막 옥텟을 2진수로 비트 AND해 네트워크 주소 .64를 구하고, 호스트 비트 6자리를 1로 채워 브로드캐스트 주소 .127을 구하는 계산 과정
비트 AND로 네트워크 주소, 호스트 비트를 1로 채워 브로드캐스트

2진수 없이 빠르게 구하는 법

매번 2진수로 바꾸기 번거로우면 블록 크기를 쓰면 돼요. 블록 크기는 256에서 마스크의 마지막 옥텟(255가 아닌 옥텟)을 뺀 값이에요.

같은 IP라도 프리픽스가 바뀌면 범위가 달라져요. 192.168.10.77/27이면 블록 크기 32라서 .64~.95, /24면 .0~.255예요. 처음 질문으로 돌아가면, .130은 /26 기준 .128~.191 블록이라 .77과 같은 서브넷이 아니에요. 같은 서브넷이 아니면 둘 사이 통신은 라우터(게이트웨이)를 거쳐야 하고, 라우팅이나 보안 그룹 설정이 없으면 막힙니다.

마스크가 세 번째 옥텟에서 끊기는 경우(/17~/23)도 원리는 같아요. 10.0.37.5/20이라면 세 번째 옥텟 마스크가 240이고 블록 크기는 16이라, 37이 속한 블록은 32~47이에요. 그래서 범위는 10.0.32.0~10.0.47.255가 됩니다.

사용 가능한 호스트 수: 2^n - 2와 /31·/32 예외

호스트 비트가 n개면 주소는 2^n개고, 여기서 두 개를 빼요.

그래서 /24는 256 - 2 = 254개, /26은 64 - 2 = 62개예요. 실무에서는 여기서 게이트웨이(보통 .1)도 하나 빠지니, 서버에 줄 수 있는 건 하나 더 적다고 생각하면 편해요.

예외가 두 개 있어요.

사설 IP 대역: 10/8, 172.16/12, 192.168/16

인터넷에서 라우팅되지 않고 내부망에서 마음대로 쓸 수 있는 대역은 RFC 1918이 정한 세 개예요.

대역CIDR범위주소 수흔한 곳
10.0.0.0/8/810.0.0.0 ~ 10.255.255.25516,777,216기업망, 클라우드 VPC
172.16.0.0/12/12172.16.0.0 ~ 172.31.255.2551,048,576도커, AWS 기본 VPC
192.168.0.0/16/16192.168.0.0 ~ 192.168.255.25565,536가정용 공유기

자주 틀리는 게 172 대역이에요. /12라서 172.16 ~ 172.31까지만 사설이고, 172.32.0.1은 공인 IP예요(파이썬 ipaddress의 is_private도 172.31.x는 True, 172.32.x는 False). "172로 시작하면 사설"이라고 방화벽 규칙을 쓰면 안 돼요.

그 밖에 알아 두면 좋은 특수 대역도 있어요. 100.64.0.0/10은 통신사 CGNAT용 공유 주소(RFC 6598), 169.254.0.0/16은 DHCP를 못 받았을 때 자동으로 붙는 링크 로컬 주소예요. 클라우드에서 169.254.169.254는 인스턴스 메타데이터 주소로 쓰여서 SSRF 공격의 단골 표적이기도 하고요.

사설 IP 대역별 주소 수 (만 개)
05001,0001,5002,00010.0.0.0/8 · 주소 수 1,678만 개1,67810.0.0.0/8172.16.0.0/12 · 주소 수 105만 개105172.16.0.0/12192.168.0.0/16 · 주소 수 6.6만 개6.6192.168.0.0/16

/8은 /16보다 256배 커요

단위: 만 개 · 자료: 2^(32-n)으로 직접 계산 (16,777,216 / 1,048,576 / 65,536개)
표로 보기
구분주소 수
10.0.0.0/81,678
172.16.0.0/12105
192.168.0.0/166.6

서브넷 나누기 예제: /24를 부서별로 쪼개기 (VLSM)

192.168.10.0/24 하나를 받아서 이렇게 나눠야 한다고 해 볼게요.

요령은 큰 것부터 배치하는 거예요. 작은 것부터 넣으면 큰 블록이 들어갈 경계가 어긋나서 공간이 남아도 못 쓰게 돼요. 필요한 호스트 수보다 큰 2^n - 2 중 가장 작은 걸 고르면 됩니다.

용도필요고른 크기서브넷호스트 범위브로드캐스트
개발팀100/25 (126)192.168.10.0/25.1 ~ .126.127
영업팀50/26 (62)192.168.10.128/26.129 ~ .190.191
회의실20/27 (30)192.168.10.192/27.193 ~ .222.223
라우터 링크2/30 (2)192.168.10.224/30.225 ~ .226.227
남는 공간——.228/30, .232/29, .240/2828개 주소—

각 서브넷의 시작 주소가 자기 블록 크기의 배수(0, 128, 192, 224)인 걸 보세요. 서브넷은 반드시 이렇게 크기의 배수 경계에서 시작해야 해요. 192.168.10.100/26 같은 서브넷은 존재하지 않고, 계산기에 넣으면 .64/26으로 정규화됩니다(파이썬은 strict=True면 에러를 내요).

192.168.10.0/24 주소 256개를 개발팀 /25(128개), 영업팀 /26(64개), 회의실 /27(32개), 라우터 링크 /30(4개), 남는 공간 28개로 나눈 막대 배치도
큰 블록부터 배치하면 경계가 깔끔하게 맞아요

같은 크기로 균등하게 나눌 때는 더 간단해요. /24를 /26 네 개로 나누면 .0/26, .64/26, .128/26, .192/26이고, 프리픽스를 k만큼 늘리면 서브넷이 2^k개 생겨요. 10.0.0.0/16을 /20으로 나누면 2^4 = 16개, /24로 나누면 2^8 = 256개예요.

클라우드 VPC 실무 팁: AWS가 서브넷마다 5개를 예약하는 이유

AWS VPC에서 /24 서브넷을 만들면 사용 가능한 IP가 254가 아니라 251로 나와요. AWS가 서브넷마다 다섯 개를 예약하기 때문이에요. 10.0.1.0/24라면 이렇게 빠집니다.

주소용도
10.0.1.0네트워크 주소
10.0.1.1VPC 라우터
10.0.1.2DNS 서버용 (VPC 기본 주소 + 2)
10.0.1.3향후 사용을 위해 예약
10.0.1.255브로드캐스트 주소 (VPC는 브로드캐스트를 지원하지 않지만 예약)
일반 계산(2^n - 2)과 AWS 서브넷 실제 사용 가능 IP
일반 계산AWS 사용 가능
01,0002,0003,0004,0005,000/20 · 일반 계산 4,094개/20 · AWS 사용 가능 4,091개/20/24 · 일반 계산 254개/24 · AWS 사용 가능 251개/24/26 · 일반 계산 62개/26 · AWS 사용 가능 59개/26/28 · 일반 계산 14개/28 · AWS 사용 가능 11개/28

작은 서브넷일수록 예약 비율이 커서 /28은 16개 중 11개만 써요

단위: 개 · 자료: AWS VPC 문서의 서브넷당 예약 5개 기준으로 직접 계산
표로 보기
구분일반 계산AWS 사용 가능
/204,0944,091
/24254251
/266259
/281411

Azure도 서브넷마다 5개(네트워크, 기본 게이트웨이, DNS용 2개, 브로드캐스트)를, GCP는 4개를 예약해요. 클라우드마다 다르니 콘솔에 표시되는 "사용 가능 IP"를 기준으로 잡으세요. 정책은 바뀔 수 있으니 설계 전에 각 클라우드 공식 문서를 한 번 확인하는 게 좋아요.

VPC를 설계할 때 실수가 많은 부분을 정리하면 이래요.

자주 묻는 질문

/24와 255.255.255.0은 같은 건가요?

네, 같은 걸 다르게 쓴 거예요. 255.255.255.0을 2진수로 쓰면 1이 24개라서 CIDR로는 /24예요. 주소 256개 중 254개를 호스트에 쓸 수 있어요.

같은 서브넷인지 어떻게 빨리 확인하나요?

두 IP를 각각 서브넷 마스크와 비트 AND해서 네트워크 주소가 같으면 같은 서브넷이에요. 블록 크기(256 - 마스크 마지막 옥텟)의 배수로 범위를 잡아서 두 IP가 같은 범위에 있는지 봐도 됩니다.

호스트 수에서 왜 2를 빼나요?

호스트 비트가 모두 0인 주소는 네트워크 자체를, 모두 1인 주소는 브로드캐스트를 뜻해서 장비에 줄 수 없기 때문이에요. 단 점대점 링크용 /31은 두 주소를 모두 쓰고, /32는 주소 하나를 가리키는 예외예요.

AWS 서브넷의 사용 가능 IP가 계산보다 적어요.

AWS는 서브넷마다 첫 주소 4개(네트워크, VPC 라우터, DNS, 예약)와 마지막 주소 1개를 예약해서 2^n - 5개만 쓸 수 있어요. /24면 251개, /28이면 11개예요.

172.20.x.x도 사설 IP인가요?

네, 172.16.0.0/12는 172.16.0.0부터 172.31.255.255까지라서 172.20은 사설 대역이에요. 하지만 172.32.0.0 이상은 공인 IP라 "172로 시작하면 사설"이라고 판단하면 안 돼요.

정리

서브넷 계산은 결국 "앞 n비트는 네트워크, 나머지는 호스트" 한 줄이에요. 주소 수는 2^(32-n), 호스트는 거기서 2를 빼고(/31·/32 예외), 네트워크 주소는 비트 AND, 브로드캐스트는 호스트 비트를 1로 채우면 돼요. 손 계산이 귀찮으면 블록 크기(256 - 마스크 옥텟)로 범위를 잡으세요. 클라우드에서는 예약 주소(AWS·Azure 5개, GCP 4개)와 CIDR 중복을 같이 챙겨야 나중에 VPC를 다시 만드는 일이 없어요.

IP와 프리픽스를 넣어 범위·마스크·호스트 수를 바로 확인하려면 서브넷 계산기를, 옥텟을 2진수로 바꿔 비트 AND를 직접 따라가 보려면 진법 변환기를 써 보세요.

#서브넷 마스크 계산#CIDR 계산#서브넷 나누기#네트워크 주소 브로드캐스트 주소#사용 가능한 호스트 수#사설 IP 대역#AWS VPC 서브넷#/24 /26 차이
← 이전 글리눅스 chmod 755 644 의미, rwx 권한 숫자 계산법 총정리

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →