네트워크 기초 다지기 - IP 주소, 서브넷마스크, CIDR, 공인/사설 IP 한 번에 정리
📗 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/