네트워크 기초 다지기 - IP 주소, 서브넷마스크, CIDR, 공인/사설 IP 한 번에 정리
💡 [참고] Network 관련 시리즈 포스트입니다. 순서대로 읽어보시길 권장합니다.
1. 들어가며
개발하다 보면 네트워크 설정을 피할 수가 없다. Docker 컨테이너 간 통신, 클라우드 VPC 설계, nginx 리버스 프록시 설정, IP 기반 접근 제어까지. 정작 이 개념들을 제대로 정리한 적이 없어서 필요할 때마다 검색하기를 반복했는데, 이번에 확실히 정리해두기로 했다.
2. IP 주소의 구조
IPv4 주소는 32비트(4바이트) 숫자로, 점(.)으로 구분된 4개의 옥텟(octet)으로 표기한다.
모든 IP 주소는 네트워크 부분과 호스트 부분으로 나뉜다. 어디까지가 네트워크인지, 어디서부터 호스트인지를 구분하는 것이 서브넷 마스크다.
1
2
3
4
5
192 . 168 . 1 . 100
│ │ │ └─ 4번째 옥텟 (8비트, 0~255)
│ │ └────── 3번째 옥텟
│ └────────── 2번째 옥텟
└──────────────── 1번째 옥텟
3. 클래스 기반 주소 체계 (Classful Addressing)
⚠️ 현재는 거의 사용되지 않는 개념이지만, 서브넷팅과 CIDR의 출발점이 되기 때문에 이해가 필요하다.
초기 인터넷은 IP의 첫 번째 옥텟만 보고 클래스를 결정하는 방식을 사용했다. 클래스에 따라 기본 서브넷 마스크와 호스트 수가 고정이었다.
| 클래스 | 첫 옥텟 범위 | 기본 서브넷 마스크 | 네트워크 비트 | 호스트 비트 | 기본 호스트 수 |
|---|---|---|---|---|---|
| A | 1 ~ 126 | 255.0.0.0 (/8) | 8비트 | 24비트 | 2²⁴ - 2 = 16,777,214개 |
| B | 128 ~ 191 | 255.255.0.0 (/16) | 16비트 | 16비트 | 2¹⁶ - 2 = 65,534개 |
| C | 192 ~ 223 | 255.255.255.0 (/24) | 24비트 | 8비트 | 2⁸ - 2 = 254개 |
| D | 224 ~ 239 | — | 멀티캐스트 전용 | — | — |
| E | 240 ~ 255 | — | 연구/예약 | — | — |
📌 호스트 수에서 왜 2를 빼는가
어떤 서브넷이든 두 개의 주소는 호스트로 사용할 수 없다.
1
2
3
4
네트워크 주소 → 호스트 비트가 전부 0 (예: 192.168.1.0)
브로드캐스트 → 호스트 비트가 전부 1 (예: 192.168.1.255)
사용 가능 호스트 수 = 2^(호스트 비트 수) - 2
📌 클래스 A 범위 주의
클래스 A의 첫 옥텟 상한은 126이다. 127.x.x.x는 루프백(Loopback) 주소로 예약되어 있어 실제 할당이 불가능하다. 127.0.0.1이 바로 localhost다.
4. 서브넷 마스크와 네트워크 주소 계산
📌 서브넷 마스크란
서브넷 마스크는 32비트 숫자로, 1로 채워진 부분 = 네트워크, 0으로 채워진 부분 = 호스트를 나타낸다.
1
2
3
4
5
/24의 서브넷 마스크:
11111111.11111111.11111111.00000000
= 255.255.255.0
└─────────────────────┘└────────┘
네트워크 (24비트) 호스트(8비트)
📌 네트워크 주소 구하기: IP AND 서브넷마스크
네트워크 주소를 구하려면 IP 주소와 서브넷 마스크를 비트 AND 연산하면 된다.
AND 연산 규칙: 1 AND 1 = 1, 1 AND 0 = 0, 0 AND 0 = 0
핵심 원리는 단순하다. 마스크가 1인 자리는 원래 IP를 그대로 남기고, 마스크가 0인 자리는 전부 0으로 만든다.
📌 브로드캐스트 주소 구하기
브로드캐스트 주소는 네트워크 주소에서 호스트 비트를 전부 1로 채운 것이다.
1
2
3
4
5
6
네트워크 주소: 192.168.1.0
11000000.10101000.00000001.00000000
↓ 호스트 비트(8비트)를 전부 1로
11000000.10101000.00000001.11111111
→ 브로드캐스트 = 192.168.1.255
5. CIDR 표기법과 사용 가능한 IP 계산
CIDR(Classless Inter-Domain Routing)은 프리픽스 길이를 슬래시(/)로 표기하는 방식이다.
1
2
3
4
192.168.1.0 / 24
└────────────┘ └┘
네트워크 주소 프리픽스 길이
(서브넷마스크에서 1의 개수 = 네트워크 비트 수)
📌 사용 가능한 IP 수 계산 공식
1
2
전체 IP 수 = 2 ^ (32 - 프리픽스 길이)
사용 가능한 IP 수 = 전체 IP 수 - 2
📌 프리픽스별 계산표
| CIDR | 호스트 비트 | 전체 IP 수 | 사용 가능 IP | 서브넷 마스크 | 주 용도 |
|---|---|---|---|---|---|
| /8 | 24비트 | 16,777,216 | 16,777,214 | 255.0.0.0 | 대기업 사설망 전체 |
| /16 | 16비트 | 65,536 | 65,534 | 255.255.0.0 | 중대형 사설망 |
| /24 | 8비트 | 256 | 254 | 255.255.255.0 | 부서 단위 서브넷 |
| /25 | 7비트 | 128 | 126 | 255.255.255.128 | 소규모 부서 |
| /26 | 6비트 | 64 | 62 | 255.255.255.192 | 소규모 부서 |
| /27 | 5비트 | 32 | 30 | 255.255.255.224 | DMZ·소팀 |
| /28 | 4비트 | 16 | 14 | 255.255.255.240 | 소형 서버 그룹 |
| /29 | 3비트 | 8 | 6 | 255.255.255.248 | 소규모 서버 |
| /30 | 2비트 | 4 | 2 | 255.255.255.252 | 라우터 간 링크 |
💡
/30은 딱 2개의 호스트 IP만 제공하므로, 라우터와 라우터 사이 포인트-투-포인트 링크에 정확히 맞는 크기다.
📌 실전 예시: 123.143.101.0/24
1
2
3
4
5
6
7
8
프리픽스: /24
호스트 비트: 32 - 24 = 8비트
전체 IP 수: 2⁸ = 256개
사용 가능 IP: 256 - 2 = 254개
네트워크 주소: 123.143.101.0 (호스트 비트 전부 0)
브로드캐스트: 123.143.101.255 (호스트 비트 전부 1)
사용 가능 범위: 123.143.101.1 ~ 123.143.101.254
6. 서브넷팅 (Subnetting)
서브넷팅이란 하나의 큰 네트워크를 더 작은 여러 개의 서브넷으로 나누는 기법이다. 호스트 비트의 앞쪽 일부를 추가 네트워크 비트로 빌려서 사용하는 원리다.
📌 클래스별 서브넷팅 예시
클래스 C (/24 → /26): 4개 서브넷, 각 62호스트
블록 크기 = 2⁶ = 64이므로 각 서브넷이 64 간격으로 시작한다.
| 서브넷 | 네트워크 주소 | 사용 가능 IP 범위 | 브로드캐스트 |
|---|---|---|---|
| 1번 | 192.168.1.0/26 | .1 ~ .62 | .63 |
| 2번 | 192.168.1.64/26 | .65 ~ .126 | .127 |
| 3번 | 192.168.1.128/26 | .129 ~ .190 | .191 |
| 4번 | 192.168.1.192/26 | .193 ~ .254 | .255 |
클래스 B (/16 → /24): 256개 서브넷, 각 254호스트
1
2
3
4
5
172.16.0.0/16 → /24로 쪼개면 256개 부서 서브넷
172.16.0.0/24 → .0.1 ~ .0.254
172.16.1.0/24 → .1.1 ~ .1.254
...
172.16.255.0/24 → .255.1 ~ .255.254
클래스 A (/8 → /16): 256개 서브넷, 각 65,534호스트
1
2
3
4
5
10.0.0.0/8 → /16으로 쪼개면 256개 대형 서브넷
10.0.0.0/16 → 10.0.0.1 ~ 10.0.255.254
10.1.0.0/16 → 10.1.0.1 ~ 10.1.255.254
...
10.255.0.0/16 → 10.255.0.1 ~ 10.255.255.254
📌 서브넷팅 공식 정리
| 항목 | 공식 |
|---|---|
| 빌린 비트 수 | 새 프리픽스 - 원래 프리픽스 |
| 서브넷 수 | 2^(빌린 비트 수) |
| 호스트 비트 수 | 32 - 새 프리픽스 |
| 서브넷당 호스트 수 | 2^(호스트 비트 수) - 2 |
| 서브넷 블록 크기(간격) | 2^(호스트 비트 수) |
7. 공인 IP vs 사설 IP
📌 공인 IP
인터넷에서 직접 통신 가능한 전 세계 유일한 주소다. IANA → 각국 RIR → ISP → 사용자 순으로 계층적으로 할당된다. 사설 IP 대역을 제외한 나머지가 모두 공인 IP다.
📌 사설 IP (RFC 1918)
IANA가 내부 네트워크 전용으로 예약한 주소 대역으로, 인터넷에서 라우팅되지 않는다. 전 세계 어느 조직이든 중복 사용이 가능하다.
| 대역 | CIDR | 범위 | 원래 클래스 |
|---|---|---|---|
10.0.0.0 | /8 | 10.0.0.0 ~ 10.255.255.255 | Class A |
172.16.0.0 | /12 | 172.16.0.0 ~ 172.31.255.255 | Class B 16개 |
192.168.0.0 | /16 | 192.168.0.0 ~ 192.168.255.255 | Class C 256개 |
⚠️
172.16.0.0의 사설 대역은/12다.172.16.x.x만이 아니라172.31.x.x까지 전부 사설 IP다. 이 부분을 자주 혼동한다.
8. 특수 목적 IP 주소 대역
| 주소 대역 | 목적 |
|---|---|
0.0.0.0/8 | 현재 네트워크 (라우팅 불가) |
127.0.0.0/8 | 루프백(Loopback) — 127.0.0.1 = localhost |
169.254.0.0/16 | APIPA — DHCP 실패 시 OS 자동 할당 (링크-로컬) |
100.64.0.0/10 | Carrier-Grade NAT (CGNAT, RFC 6598) |
224.0.0.0/4 | 멀티캐스트 (Class D) |
240.0.0.0/4 | 연구/예약 (Class E) |
255.255.255.255 | 제한 브로드캐스트 |
💡
169.254.x.x대역 IP가 PC에 잡혀 있으면 DHCP 서버에서 IP를 받아오지 못한 상태다. 공유기 연결이나 네트워크 설정을 점검해야 한다.
9. 전체 개념 흐름 정리
10. 자주 하는 혼동 정리
| 혼동 포인트 | 올바른 이해 |
|---|---|
| “클래스 A이면 사설 IP” | NO. 10.0.0.0/8이 사설인 건 RFC 1918 때문이지 클래스 A라서가 아님 |
| “172.16.x.x만 사설 IP” | NO. 172.16.0.0 ~ 172.31.255.255 전체(/12)가 사설 IP |
| “클래스 C는 무조건 /24” | NO. CIDR로 /25, /26 등 자유롭게 지정 가능 |
| “클래스 A 범위가 1~127” | NO. 127.x.x.x는 루프백 예약. 클래스 A 할당 범위는 1~126 |
| “사설 IP는 전 세계에 하나” | NO. 사설 IP는 조직마다 중복 사용 가능 (인터넷에서 라우팅 안 됨) |
| “서브넷팅은 클래스 쪼개기” | NO. CIDR 기반 서브넷팅은 클래스 경계와 무관 |
| “/30은 작아서 쓸모없다” | NO. 라우터 간 포인트-투-포인트 링크에 정확히 맞는 크기 |
참고
- RFC 1918 (IETF, 1996) — 사설 IP 주소 할당 표준: https://datatracker.ietf.org/doc/html/rfc1918
- RFC 1519 (IETF, 1993) — CIDR 표준: https://datatracker.ietf.org/doc/html/rfc1519
- ARIN — IPv4 사설 주소 공간: https://www.arin.net/reference/research/statistics/address_filters/