| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- DI
- Javascript
- 자바스크립트
- TypeScript
- 강남아파트
- PR꿀팁
- 추천
- HTTP란
- enum
- 실천방법
- Flux
- frontend
- 이벤트드리븐
- TCP/IP
- GC
- 타입스크립트
- webpack
- EKS네트워크
- 고동시성
- 카프카실무
- MSA
- 인생꿀팁
- 의존성주입
- kafka
- vue store
- springboot
- 백엔드개발
- 자기계발
- ECMAScript
- Vue+Typescript
- Today
- Total
끄적끄적
서브넷마스크 계산, 이제 공식 없이 비트로 읽는다 — 네트워크 정리 (AWS VPC 설계 포함) 본문
서브넷마스크 계산, 이제 공식 없이 비트로 읽는다 — 네트워크 정리 (AWS VPC 설계 포함)
mashko 2026. 2. 27. 20:27서브넷마스크, 이제 계산 없이
"눈으로 바로 읽는 법을 알려드립니다"
IP 클래스 · CIDR · 서브네팅 계산법 · AWS/k8s VPC 설계까지 — 실무 백엔드 개발자 관점
📋 목차
- 들어가며 — VPC 설계에서 서브넷을 잘못 잡았던 경험
- IP 주소와 서브넷마스크 — 이진수로 이해하기
- CIDR 표기법 — /24가 뭔지 이제 직관적으로 읽기
- 네트워크 주소 · 브로드캐스트 · 호스트 범위 계산
- IP 클래스와 사설 IP 대역
- 서브네팅 — 하나의 네트워크를 쪼개는 법
- 실무 적용 — AWS VPC / k8s 서브넷 설계
- 실무 트러블슈팅 BEST 3
들어가며 — VPC 설계에서 서브넷을 잘못 잡았던 경험
AWS에서 새 서비스를 구성할 때 VPC CIDR을 /24로 잡았습니다. "256개면 충분하겠지"라고 생각했는데, 나중에 EKS 파드가 IP를 엄청나게 잡아먹는다는 걸 알게 됐고, 서브넷이 모자라서 VPC를 처음부터 다시 만들어야 했습니다.
서브넷마스크를 대충 알면 이런 실수를 합니다. 이 글은 "서브넷마스크를 코딩하듯 정확히 이해하는 법"을 정리한 것입니다. 수학 공식이 아니라 비트 구조로 이해하면 절대 헷갈리지 않습니다.
① AWS VPC, 서브넷, 보안그룹 설계할 때
② k8s 클러스터 네트워크(Pod CIDR, Service CIDR) 설정할 때
③ 방화벽 규칙에서 IP 허용 범위 지정할 때
④ 서버 간 통신이 안 될 때 네트워크 범위 확인할 때
IP 주소와 서브넷마스크 — 이진수로 이해하기
IPv4 주소는 32비트 숫자를 8비트(옥텟) 4개로 나눠 표현한 것입니다. 우리가 보는 192.168.1.100은 사람이 읽기 편한 10진수 표현일 뿐이에요.
IP 주소를 "네트워크 부분"과 "호스트 부분"으로 나누는 경계선입니다.
마스크의 1인 비트 위치 = 네트워크 주소 (모두 같아야 같은 네트워크)
마스크의 0인 비트 위치 = 호스트 주소 (이 부분이 달라도 같은 네트워크)
CIDR 표기법 — /24가 뭔지 직관적으로 읽기
CIDR(Classless Inter-Domain Routing) 표기법은 IP주소/프리픽스길이 형태로, 슬래시 뒤 숫자는 "앞에서 몇 비트가 네트워크 부분인지"를 나타냅니다.
| CIDR | 서브넷마스크 | 호스트 비트 | 총 IP 수 | 실제 사용 가능 IP | 용도 |
|---|---|---|---|---|---|
/32 |
255.255.255.255 | 0비트 | 1 | 1 (단일 호스트) | 특정 IP 지정 |
/30 |
255.255.255.252 | 2비트 | 4 | 2 | P2P 링크 |
/28 |
255.255.255.240 | 4비트 | 16 | 14 | 소규모 서브넷 |
/24 |
255.255.255.0 | 8비트 | 256 | 254 | 일반 LAN |
/22 |
255.255.252.0 | 10비트 | 1,024 | 1,022 | 중규모 서브넷 |
/20 |
255.255.240.0 | 12비트 | 4,096 | 4,094 | AWS VPC 서브넷 |
/16 |
255.255.0.0 | 16비트 | 65,536 | 65,534 | 대규모 VPC |
호스트 비트 수 = 32 - 프리픽스 길이
총 IP 수 = 2^(호스트 비트 수)
사용 가능 IP = 총 IP - 2 (네트워크 주소 + 브로드캐스트 주소 제외)
예: /26 → 호스트 비트 = 32-26 = 6 → 총 IP = 2^6 = 64 → 사용 가능 = 62개
네트워크 주소 · 브로드캐스트 · 호스트 범위 계산
192.168.10.130/26 을 예시로 실제 계산 과정을 따라가 봅시다.
네트워크 주소: 192.168.10.128 | 브로드캐스트: 192.168.10.191
사용 가능 IP: 192.168.10.129 ~ 192.168.10.190 (62개)
빠른 계산법 — 블록 크기로 네트워크 주소 찾기
블록 크기 = 2^(호스트 비트 수). /26이면 블록 크기 = 2^6 = 64.
마지막 옥텟(130)을 블록 크기(64)로 나누면: 130 ÷ 64 = 2 (몫).
네트워크 주소 = 64 × 2 = 128 → 192.168.10.128
브로드캐스트 = 128 + 64 - 1 = 191 → 192.168.10.191
IP 클래스와 사설 IP 대역
| 클래스 | 범위 | 기본 마스크 | 사설 IP 대역 | 실무 사용 |
|---|---|---|---|---|
| 🔴 Class A | 1.0.0.0 ~ 126.255.255.255 | /8 |
10.0.0.0/8 | AWS VPC 대규모 |
| 🟡 Class B | 128.0.0.0 ~ 191.255.255.255 | /16 |
172.16.0.0/12 | 사내 네트워크 |
| 🟢 Class C | 192.0.0.0 ~ 223.255.255.255 | /24 |
192.168.0.0/16 | 가정/소규모 |
| 🔵 특수 | 127.0.0.1 | — | Loopback | localhost |
🔴 10.0.0.0/8 — 10.x.x.x 전체 (1677만개 IP) → AWS 대규모 VPC 추천
🟡 172.16.0.0/12 — 172.16.x.x ~ 172.31.x.x (104만개 IP)
🟢 192.168.0.0/16 — 192.168.x.x 전체 (6만5천개 IP) → 공유기/로컬 환경
이 대역들은 인터넷에서 라우팅되지 않는 내부 전용 IP입니다.
서브네팅 — 하나의 네트워크를 쪼개는 법
서브네팅은 큰 네트워크 1개를 작은 네트워크 여러 개로 나누는 것입니다. 예를 들어 192.168.1.0/24 (256개 IP)를 4개의 서브넷으로 나눠 보겠습니다.
# /24 → /26으로 2비트 추가 → 2^2 = 4개 서브넷 생성
# 각 서브넷 크기: 256 / 4 = 64개 IP (사용 가능: 62개)
서브넷 1: 192.168.1.0/26
네트워크: 192.168.1.0
게이트웨이: 192.168.1.1
호스트 범위: 192.168.1.1 ~ 192.168.1.62
브로드캐스트: 192.168.1.63
서브넷 2: 192.168.1.64/26
네트워크: 192.168.1.64
호스트 범위: 192.168.1.65 ~ 192.168.1.126
브로드캐스트: 192.168.1.127
서브넷 3: 192.168.1.128/26
네트워크: 192.168.1.128
호스트 범위: 192.168.1.129 ~ 192.168.1.190
브로드캐스트: 192.168.1.191
서브넷 4: 192.168.1.192/26
네트워크: 192.168.1.192
호스트 범위: 192.168.1.193 ~ 192.168.1.254
브로드캐스트: 192.168.1.255
실무 적용 — AWS VPC / k8s 서브넷 설계
Public 진입점
Private → Internet
10.0.1.0/24 (AZ-a)
ALB, Bastion
10.0.2.0/24 (AZ-b)
ALB, Bastion
10.0.3.0/24 (AZ-c)
ALB, Bastion
10.0.11.0/24 (AZ-a)
App Server, EKS Node
10.0.12.0/24 (AZ-b)
App Server, EKS Node
10.0.13.0/24 (AZ-c)
App Server, EKS Node
10.0.21.0/24 (AZ-a)
RDS, ElastiCache
10.0.22.0/24 (AZ-b)
RDS, ElastiCache
10.0.23.0/24 (AZ-c)
RDS, ElastiCache
EKS에서 파드는 노드 IP와 별도로 각각 IP를 1개씩 점유합니다 (AWS VPC CNI 기준).
노드 1대(t3.medium)에서 최대 파드 17개 → IP 17개 소모.
노드 10대 × 17개 = 170개 IP → /24(254개)면 금방 찹니다!
EKS 클러스터가 있다면 서브넷은 /22 이상을 강력 권장합니다.
# VPC: 10.0.0.0/16
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
}
# Public 서브넷 — ALB, Bastion
resource "aws_subnet" "public" {
count = 3
vpc_id = aws_vpc.main.id
cidr_block = "10.0.${count.index + 1}.0/24"
availability_zone = data.aws_availability_zones.available.names[count.index]
map_public_ip_on_launch = true
}
# Private 서브넷 — App / EKS Node (/22로 여유 확보)
resource "aws_subnet" "private_app" {
count = 3
vpc_id = aws_vpc.main.id
# /22 = 1024 IP → EKS 파드 IP 여유 충분
cidr_block = "10.0.${(count.index * 4) + 10}.0/22"
availability_zone = data.aws_availability_zones.available.names[count.index]
}
실무 트러블슈팅 BEST 3
Case 1 — 같은 VPC인데 서버 간 통신이 안 됨
1) 보안 그룹(Security Group) 인바운드 규칙 확인 — 출발지 IP 또는 CIDR 허용 여부
2) NACL(Network ACL) 인바운드/아웃바운드 규칙 확인 (Stateless이므로 양방향 모두 확인)
3) 라우팅 테이블에 대상 서브넷으로의 경로 존재 여부 확인
Case 2 — EKS 파드에 IP 할당 실패
즉시 대응: 새 서브넷(/22) 생성 후 node group을 새 서브넷으로 마이그레이션
근본 해결: VPC 설계 단계에서 EKS용 서브넷은 /22 이상으로 충분히 확보
Case 3 — VPC Peering 후 라우팅 안 됨
1) VPC A 라우팅 테이블: 10.1.0.0/16 → Peering Connection 추가
2) VPC B 라우팅 테이블: 10.0.0.0/16 → Peering Connection 추가
3) 양쪽 보안 그룹에서 상대방 CIDR 허용 추가
⚠️ 두 VPC의 CIDR이 겹치면(Overlapping) Peering 자체가 불가합니다. 설계 단계에서 반드시 CIDR을 분리하세요!
🌐 "서브넷마스크 = IP를 네트워크와 호스트로 나누는 경계선"
이 한 문장만 기억하면 됩니다.
CIDR의 /숫자 = 네트워크 비트 수, 나머지 = 호스트 비트 수.
2^(호스트 비트) = 총 IP 수, 여기서 2를 빼면 사용 가능한 IP 수.
AWS/k8s 설계 전에 이 계산 한 번만 해보는 습관이 나중에 큰 장애를 막습니다 💪
'Computer Science > Network' 카테고리의 다른 글
| [네트워크] Rest API란? (0) | 2021.05.17 |
|---|---|
| [네트워크] keep-alive에 대해서 알아보자 (0) | 2020.06.14 |
| [네트워크] TCP/IP 3way HandShake & 4way HandShake (0) | 2019.07.11 |
| [네트워크] HTTP - 히스토리 및 버전 알아보기 (0) | 2019.06.23 |
| [네트워크] HTTP - 기초 및 개념 이해 (0) | 2019.06.22 |
