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비트는 네트워크 부분(어느 동네인지)과 호스트 부분(그 동네의 몇 번지인지)으로 나뉘어요. 어디서 나뉘는지를 알려 주는 방법이 두 가지 있습니다.
- 서브넷 마스크: 네트워크 부분을 1, 호스트 부분을 0으로 채운 32비트를 IP처럼 적은 것.
255.255.255.192 - CIDR 표기: 앞에서부터 1이 몇 개인지만 적은 것.
/26
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 | 서브넷 마스크 | 주소 수 | 사용 가능 호스트 | 흔한 용도 |
|---|---|---|---|---|
| /16 | 255.255.0.0 | 65,536 | 65,534 | 클라우드 VPC 전체 |
| /20 | 255.255.240.0 | 4,096 | 4,094 | 큰 프라이빗 서브넷 |
| /22 | 255.255.252.0 | 1,024 | 1,022 | 중간 규모 서브넷 |
| /24 | 255.255.255.0 | 256 | 254 | 사무실·가정 LAN |
| /25 | 255.255.255.128 | 128 | 126 | /24를 반으로 |
| /26 | 255.255.255.192 | 64 | 62 | 부서·용도별 서브넷 |
| /27 | 255.255.255.224 | 32 | 30 | 작은 서버 그룹 |
| /28 | 255.255.255.240 | 16 | 14 | AWS 최소 서브넷 |
| /29 | 255.255.255.248 | 8 | 6 | 고정 IP 블록 |
| /30 | 255.255.255.252 | 4 | 2 | 라우터 간 링크(전통 방식) |
| /31 | 255.255.255.254 | 2 | 2 (예외) | 점대점 링크 |
| /32 | 255.255.255.255 | 1 | 1 (단일 호스트) | 방화벽 규칙의 IP 하나 |
CIDR이 하나 커질 때마다(예: /24 → /25) 주소 수가 정확히 절반이 돼요. 호스트 비트가 하나 줄어서 2^n의 n이 1 줄기 때문이에요.
네트워크 주소와 브로드캐스트 주소 계산법
192.168.10.77/26의 범위를 손으로 구해 볼게요. 앞의 세 옥텟은 마스크가 255라 그대로 두고, 마지막 옥텟만 보면 됩니다.
- IP 마지막 옥텟 77을 2진수로:
01001101 - 마스크 마지막 옥텟 192를 2진수로:
11000000 - 비트 AND(둘 다 1인 자리만 1):
01000000= 64 → 네트워크 주소192.168.10.64 - 호스트 비트(뒤 6자리)를 모두 1로:
01111111= 127 → 브로드캐스트 주소192.168.10.127 - 그 사이
.65~.126이 호스트에 쓸 수 있는 62개 주소
2진수 없이 빠르게 구하는 법
매번 2진수로 바꾸기 번거로우면 블록 크기를 쓰면 돼요. 블록 크기는 256에서 마스크의 마지막 옥텟(255가 아닌 옥텟)을 뺀 값이에요.
- /26 → 256 - 192 = 64. 서브넷은 0, 64, 128, 192에서 시작해요.
- 77은 64와 128 사이니까 네트워크 주소는
.64, 브로드캐스트는 다음 블록 시작 직전인.127.
같은 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개고, 여기서 두 개를 빼요.
- 네트워크 주소(호스트 비트가 전부 0): 서브넷 자체를 가리키는 이름이라 장비에 할당하지 않아요.
- 브로드캐스트 주소(호스트 비트가 전부 1): "이 서브넷의 모두에게" 보내는 주소예요.
그래서 /24는 256 - 2 = 254개, /26은 64 - 2 = 62개예요. 실무에서는 여기서 게이트웨이(보통 .1)도 하나 빠지니, 서버에 줄 수 있는 건 하나 더 적다고 생각하면 편해요.
예외가 두 개 있어요.
- /31: 주소가 2개뿐이라 2 - 2 = 0이 되는데, 라우터 두 대를 잇는 점대점 링크에는 브로드캐스트가 필요 없잖아요. 그래서 RFC 3021이 /31에서는 두 주소를 모두 호스트로 쓰도록 정했어요. 예전에는 링크마다 /30(4개 중 2개 사용)을 썼는데, /31을 쓰면 주소를 절반만 씁니다. 파이썬
ipaddress도10.0.0.0/31의 호스트를10.0.0.0,10.0.0.1두 개로 돌려줘요. - /32: 주소 하나 그 자체예요. 서브넷이라기보다 "이 IP 딱 하나"를 가리킬 때 써요. 방화벽 허용 목록의
203.0.113.7/32, 루프백 인터페이스, 라우팅 테이블의 호스트 경로가 대표적이에요.
사설 IP 대역: 10/8, 172.16/12, 192.168/16
인터넷에서 라우팅되지 않고 내부망에서 마음대로 쓸 수 있는 대역은 RFC 1918이 정한 세 개예요.
| 대역 | CIDR | 범위 | 주소 수 | 흔한 곳 |
|---|---|---|---|---|
| 10.0.0.0/8 | /8 | 10.0.0.0 ~ 10.255.255.255 | 16,777,216 | 기업망, 클라우드 VPC |
| 172.16.0.0/12 | /12 | 172.16.0.0 ~ 172.31.255.255 | 1,048,576 | 도커, AWS 기본 VPC |
| 192.168.0.0/16 | /16 | 192.168.0.0 ~ 192.168.255.255 | 65,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 공격의 단골 표적이기도 하고요.
서브넷 나누기 예제: /24를 부서별로 쪼개기 (VLSM)
192.168.10.0/24 하나를 받아서 이렇게 나눠야 한다고 해 볼게요.
- 개발팀 100대, 영업팀 50대, 회의실 20대, 라우터 간 링크 1개(2대)
요령은 큰 것부터 배치하는 거예요. 작은 것부터 넣으면 큰 블록이 들어갈 경계가 어긋나서 공간이 남아도 못 쓰게 돼요. 필요한 호스트 수보다 큰 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/28 | 28개 주소 | — |
각 서브넷의 시작 주소가 자기 블록 크기의 배수(0, 128, 192, 224)인 걸 보세요. 서브넷은 반드시 이렇게 크기의 배수 경계에서 시작해야 해요. 192.168.10.100/26 같은 서브넷은 존재하지 않고, 계산기에 넣으면 .64/26으로 정규화됩니다(파이썬은 strict=True면 에러를 내요).
같은 크기로 균등하게 나눌 때는 더 간단해요. /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.1 | VPC 라우터 |
| 10.0.1.2 | DNS 서버용 (VPC 기본 주소 + 2) |
| 10.0.1.3 | 향후 사용을 위해 예약 |
| 10.0.1.255 | 브로드캐스트 주소 (VPC는 브로드캐스트를 지원하지 않지만 예약) |
Azure도 서브넷마다 5개(네트워크, 기본 게이트웨이, DNS용 2개, 브로드캐스트)를, GCP는 4개를 예약해요. 클라우드마다 다르니 콘솔에 표시되는 "사용 가능 IP"를 기준으로 잡으세요. 정책은 바뀔 수 있으니 설계 전에 각 클라우드 공식 문서를 한 번 확인하는 게 좋아요.
VPC를 설계할 때 실수가 많은 부분을 정리하면 이래요.
- 처음부터 넉넉하게: AWS VPC와 서브넷은 /16 ~ /28 사이에서 고를 수 있어요. 한번 만든 서브넷은 크기를 바꿀 수 없으니, VPC는 /16, 서브넷은 /20~/24로 여유 있게 잡는 게 무난해요.
- 쿠버네티스는 IP를 많이 먹어요: EKS의 기본 VPC CNI는 파드마다 VPC IP를 하나씩 줘요. 노드 수십 대에 파드 수천 개면 /24 서브넷은 금방 바닥나니, 파드가 뜰 서브넷은 /20 이상을 고려하세요.
- 대역이 겹치지 않게: VPC 피어링, 트랜짓 게이트웨이, 사내망 VPN은 CIDR이 겹치면 연결할 수 없어요. 개발·스테이징·운영 VPC를 전부
10.0.0.0/16으로 만들면 나중에 못 붙입니다. 환경마다10.0,10.1,10.2처럼 나눠 두세요. - 도커 기본 대역 충돌: 도커 기본 브리지는
172.17.0.0/16을 쓰고, 새 네트워크를 만들 때마다 172.18, 172.19… 순서로 잡아요. 사내망이나 VPN이 172.16~172.31 대역이면 겹쳐서 특정 서버만 접속이 안 되는 일이 생기니daemon.json의default-address-pools로 대역을 바꿔 두세요. - AZ별로 짝 맞추기: 퍼블릭·프라이빗 서브넷을 가용 영역마다 같은 크기로 하나씩 만들면 규칙이 단순해져요. 예:
10.0.0.0/24·10.0.1.0/24(퍼블릭),10.0.16.0/20·10.0.32.0/20(프라이빗, 각 4,091개 사용 가능).
자주 묻는 질문
/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를 직접 따라가 보려면 진법 변환기를 써 보세요.