Addresses, Subnets and Gateways
Why Classes Disappeared
한국어 원문으로 표시합니다.
한 줄 요약
A·B·C 클래스는 1981년의 주소 배분 방식이고 1993년에 CIDR 로 대체됐다. 지금도 이름이 남아 있는 이유는 사설 대역을 설명할 때 편해서일 뿐, 라우터는 클래스를 보지 않는다.
왜 이게 필요했나
초기 인터넷은 주소의 앞 몇 비트로 네트워크 크기를 고정했다.
| 클래스 | 첫 옥텟 | 네트워크 부분 | 호스트 개수 |
|---|---|---|---|
| A | 1~126 | 8비트 | 약 1,678만 |
| B | 128~191 | 16비트 | 약 6만 5천 |
| C | 192~223 | 24비트 | 254 |
문제는 크기가 셋뿐이라는 것이었다. 호스트 300대가 필요한 조직에 C(254개)는 모자라고 B(65,534개)는 65,000개를 낭비한다. 1990년대 초 이 낭비 때문에 IPv4 주소가 곧 고갈될 것이 확실해졌다.
CIDR(Classless Inter-Domain Routing)은 그 고정 경계를 없앴다. 네트워크 부분의 길이를 비트 단위로 정한다. /23 은 호스트 510개, /26 은 62개다. 필요한 만큼만 준다.
어떻게 동작하나
192.168.1.0/24 는 "앞 24비트가 네트워크, 나머지 8비트가 호스트" 라는 뜻이다.
주소 192.168.1.130 = 11000000.10101000.00000001.10000010
마스크 /24 = 11111111.11111111.11111111.00000000
네트워크 192.168.1.0
브로드캐스트 192.168.1.255
쓸 수 있는 주소 192.168.1.1 ~ 192.168.1.254 (254개)
호스트 개수는 2^(32-프리픽스) - 2 다. 2를 빼는 이유는 네트워크 주소(전부 0)와 브로드캐스트 주소(전부 1)를 호스트에 줄 수 없기 때문이다.
/31 과 /32 는 예외다. /31 은 라우터끼리 잇는 링크 전용으로 2개를 다 쓰고(RFC 3021), /32 는 주소 하나를 가리킨다.
흔한 착각
"192.168 로 시작하면 C 클래스" — 사설 대역과 클래스는 다른 이야기다. RFC 1918 이 정한 사설 대역은 셋이다.
| 대역 | CIDR | 크기 |
|---|---|---|
| 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 |
1,678만 |
| 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 |
172.16.0.0/12 를 172.16.0.0/16 으로 착각해 172.20.x.x 를 공인 주소로 오해하는 실수가 흔하다. /12 는 172.16 부터 172.31 까지다.
서브넷을 손으로 계산하기
프리픽스 길이만 알면 나머지는 산수입니다.
/24 → 호스트 비트 8개 → 2^8 = 256 주소 → 쓸 수 있는 것 254
/25 → 7개 → 128 → 126
/26 → 6개 → 64 → 62
/27 → 5개 → 32 → 30
/28 → 4개 → 16 → 14
/30 → 2개 → 4 → 2 (라우터 사이 링크에 쓴다)
/31 → 1개 → 2 → 2 (RFC 3021 — 점대점 링크)
전체에서 2를 빼는 이유 는 첫 주소가 네트워크 주소, 마지막이 브로드캐스트 주소이기 때문입니다. 쿠버네티스나 클라우드에서는 여기에 몇 개를 더 뺍니다 — AWS 는 서브넷마다 5개를 예약합니다(네트워크, 라우터, DNS, 예비, 브로드캐스트).
경계를 찾는 법은 이렇습니다.
10.0.5.130/26 이 속한 대역은?
/26 → 블록 크기 64
0, 64, 128, 192 중 130 이 들어가는 것은 128
→ 10.0.5.128 ~ 10.0.5.191, 쓸 수 있는 것은 .129 ~ .190
대역을 겹치지 않게 설계하기
이것이 실무에서 가장 비싼 실수입니다. 한 번 겹치면 나중에 못 잇습니다.
❌ 흔한 사고
사무실 VPN 192.168.0.0/24
클라우드 VPC 192.168.0.0/24 ← 같은 대역. VPN 으로 못 잇는다
쿠버네티스 파드 10.244.0.0/16
도커 기본 브리지 172.17.0.0/16 ← 사내망이 172.17 이면 컨테이너가 못 나간다
✅ 처음에 표를 만든다
본사 10.10.0.0/16
지사 10.20.0.0/16
클라우드 A 10.100.0.0/16
클라우드 B 10.200.0.0/16
쿠버네티스 파드 10.244.0.0/16, 서비스 10.96.0.0/12
사설 대역은 세 개뿐입니다(RFC 1918). 10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16. 10 대역이 가장 넓으니 조직이 크면 여기서 나눕니다.
도커의 기본 브리지가 172.17.0.0/16 이라는 것을 기억해 두면 좋습니다.
사내망이 그 대역을 쓰면 컨테이너에서 사내 서버로 못 갑니다. daemon.json 의
default-address-pools 로 바꿉니다.
CIDR 로 라우팅이 접힌다
클래스가 사라진 실질적 이유가 이것입니다. 인접한 대역을 하나로 합쳐(supernetting) 라우팅 테이블을 줄입니다.
10.1.0.0/24, 10.1.1.0/24, 10.1.2.0/24, 10.1.3.0/24
→ 10.1.0.0/22 하나로 광고할 수 있다
그래서 대역을 나눌 때 연속으로 배치 하는 것이 나중에 이득입니다. 무작위로 흩어 놓으면 합칠 수 없어 경로가 그만큼 늘어납니다.
실무에서 진짜 중요한 것
쿠버네티스는 이 계산 위에 서 있다. 파드 CIDR, 서비스 CIDR, 노드 CIDR 세 개가 겹치면 클러스터가 이상하게 동작하는데, 원인을 못 찾고 며칠을 태우기 쉽다. 겹치는지 확인하는 것은 결국 이 비트 계산이다.
또 하나 — 100.64.0.0/10 은 사설도 공인도 아닌 CGNAT 대역(RFC 6598)이다. 통신사가 가입자에게 나눠 주는 주소라, 이 대역을 사내망에 쓰면 통신사 망과 충돌한다. 실습 환경의 네트워크 정책이 이 대역을 따로 막는 것도 그래서다.