지식
Network
서브네팅 완전 이해
IP 주소를 효율적으로 분할하는 서브네팅 원리, 서브넷 마스크 계산, VLSM, 네트워크·브로드캐스트 주소 도출 방법을 설명합니다.
지난 글에서 IPv4 주소 고갈 문제와 IPv6를 살펴봤습니다. 하지만 여전히 대부분의 기업 내부 네트워크는 IPv4를 사용하며, 주어진 IP 주소 블록을 효율적으로 나눠 쓰는 기술인 서브네팅(Subnetting) 이 필수입니다. 서브네팅은 큰 네트워크를 여러 개의 작은 네트워크로 분할해 보안 격리, 트래픽 제어, 주소 효율을 높이는 기법입니다.
왜 서브네팅이 필요한가
문제 상황: 192.168.1.0/24 네트워크에 영업팀(50명), 개발팀(30명)이 있음
서브네팅 없을 때:
→ 모든 장치가 같은 브로드캐스트 도메인
→ 영업팀 브로드캐스트가 개발팀 장치에도 전달
→ 보안 경계 없음 — 영업 PC에서 개발 서버 접근 가능
서브네팅 후:
→ 영업팀: 192.168.1.0/26 (62 호스트)
→ 개발팀: 192.168.1.64/26 (62 호스트)
→ 서로 다른 브로드캐스트 도메인 — 라우터를 통해야만 통신
서브넷 마스크 이해
서브넷 마스크는 IP 주소에서 어디까지가 네트워크, 어디서부터가 호스트인지를 나타내는 32비트 값입니다.
/24 마스크:
비트: 11111111.11111111.11111111.00000000
10진수: 255.255.255.0
/26 마스크:
비트: 11111111.11111111.11111111.11000000
10진수: 255.255.255.192
네트워크 26비트 / 호스트 6비트
서브넷 계산 방법
핵심 공식
서브넷 수 = 2^(빌린 비트 수)
호스트 수 = 2^(호스트 비트 수) - 2 (-2: 네트워크·브로드캐스트 제외)
블록 크기 = 256 - 마스크의 마지막 유효 옥텟값
/26 계산 예제
원본: 192.168.1.0/24
목표: /26으로 분할 (24비트 → 26비트, 2비트 빌림)
서브넷 수 = 2^2 = 4개
호스트 수 = 2^6 - 2 = 62개
블록 크기 = 256 - 192 = 64
서브넷 1: 192.168.1.0 ~ 192.168.1.63
네트워크: 192.168.1.0
브로드캐스트: 192.168.1.63
사용 가능: 192.168.1.1 ~ 192.168.1.62
서브넷 2: 192.168.1.64 ~ 192.168.1.127
서브넷 3: 192.168.1.128 ~ 192.168.1.191
서브넷 4: 192.168.1.192 ~ 192.168.1.255
자주 쓰는 서브넷 치트시트
| CIDR | 마스크 | 호스트 수 | 사용 예 |
|---|---|---|---|
| /30 | 255.255.255.252 | 2 | P2P 링크 |
| /29 | 255.255.255.248 | 6 | 소규모 세그먼트 |
| /28 | 255.255.255.240 | 14 | 소형 오피스 |
| /27 | 255.255.255.224 | 30 | 중소 부서 |
| /26 | 255.255.255.192 | 62 | 중형 부서 |
| /25 | 255.255.255.128 | 126 | 대형 부서 |
| /24 | 255.255.255.0 | 254 | 일반 LAN |
| /16 | 255.255.0.0 | 65534 | 대형 기업 내부 |
VLSM — 가변 길이 서브넷 마스크
고정 크기 서브넷은 주소를 낭비합니다. VLSM(Variable Length Subnet Mask) 은 각 서브넷에 필요한 크기만큼만 할당합니다.
10.0.0.0/24 를 세 팀에 배분:
영업팀 (100명 필요): /25 할당 (126 호스트)
→ 10.0.0.0/25 (10.0.0.0 ~ 10.0.0.127)
개발팀 (50명 필요): /26 할당 (62 호스트)
→ 10.0.0.128/26 (10.0.0.128 ~ 10.0.0.191)
관리팀 (20명 필요): /27 할당 (30 호스트)
→ 10.0.0.192/27 (10.0.0.192 ~ 10.0.0.223)
남은 블록: 10.0.0.224/27 (미사용)
실습: Python으로 서브넷 계산
import ipaddress
network = ipaddress.IPv4Network("192.168.1.0/24")
# /26으로 분할
subnets = list(network.subnets(new_prefix=26))
for i, subnet in enumerate(subnets, 1):
hosts = list(subnet.hosts())
print(f"서브넷 {i}: {subnet}")
print(f" 네트워크: {subnet.network_address}")
print(f" 브로드캐스트: {subnet.broadcast_address}")
print(f" 호스트: {hosts[0]} ~ {hosts[-1]} ({len(hosts)}개)")
서브네팅 오류 사례
실수 1: 네트워크/브로드캐스트 주소를 호스트에 할당
192.168.1.0/26 네트워크에서
× 192.168.1.0 → 네트워크 주소, 할당 불가
× 192.168.1.63 → 브로드캐스트, 할당 불가
실수 2: 겹치는 서브넷 설계
10.0.0.0/24 와 10.0.0.128/24 동시 사용
→ /24 범위가 같으므로 10.0.0.128 이 두 네트워크에 속함
실수 3: /30 게이트웨이 링크 오설정
점대점 링크에 /24 할당 → 252개 주소 낭비
→ P2P 링크는 /30 (2 호스트) 또는 /31 (RFC 3021)
서브네팅은 네트워크 설계의 핵심 기술입니다. CIDR과 함께 사용하면 인터넷 라우팅 테이블도 효율적으로 집약(Aggregation)할 수 있습니다. 다음 시리즈에서는 CIDR, 라우팅, NAT 등 네트워크 심화 주제를 이어서 다룹니다.
지난 글: IPv4 vs IPv6 완전 비교
읽어주셔서 감사합니다. 😊