한양과학기술고등학교

에듀테크 프로젝트 대시보드

서브넷 마스크와 CIDR

서브넷 마스크와 CIDR

IPv4 주소는 32비트 숫자 하나일 뿐이다. 이 32비트를 앞쪽 네트워크 부분과 뒤쪽 호스트 부분으로 자르는 경계선이 바로 서브넷 마스크이고, 그 경계를 /24 처럼 간단히 쓰는 표기법이 CIDR다. 슬라이더를 움직여 경계선이 이동할 때 네트워크 주소·브로드캐스트·호스트 개수가 어떻게 달라지는지 확인해 보자.

1. 비트로 보는 IP 주소 & 프리픽스

. . .
/24
IP
서브넷 마스크
네트워크 주소
(IP AND 마스크)
브로드캐스트
(호스트 비트=1)
네트워크 비트 (고정) 호스트 비트 (변동) ┃ 주황선 = 서브넷 경계

2. 하나의 네트워크를 여러 서브넷으로 쪼개기

회사가 192.168.10.0/24 (호스트 254개) 하나를 받았다. 부서별로 나누려면 호스트 비트 일부를 빌려 서브넷 비트로 쓴다. 비트를 n개 빌리면 2n개의 작은 네트워크가 생기고, 각 네트워크의 호스트 수는 그만큼 줄어든다.

빌리는 비트 수: 2 →

3. 코드로 계산하기 (Python)

# 비트 연산만으로 네트워크 정보를 구한다 def subnet_info(ip: str, prefix: int): octets = [int(x) for x in ip.split(".")] addr = (octets[0]<<24) | (octets[1]<<16) | (octets[2]<<8) | octets[3] mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF # 앞 prefix개만 1 network = addr & mask # AND → 호스트 비트 제거 broadcast = network | (~mask & 0xFFFFFFFF) # OR → 호스트 비트 전부 1 hosts = max((1 << (32 - prefix)) - 2, 0) return { "network": _fmt(network), "broadcast": _fmt(broadcast), "first_host": _fmt(network + 1), "last_host": _fmt(broadcast - 1), "usable_hosts": hosts, } # 파이썬 표준 라이브러리를 쓰면 한 줄: import ipaddress net = ipaddress.ip_network("192.168.10.130/24", strict=False) print(net.network_address, net.broadcast_address, net.num_addresses) # 192.168.10.0 192.168.10.255 256
핵심 3가지
① AND / OR 연산 — 네트워크 주소는 IP AND 마스크, 브로드캐스트는 네트워크 OR (마스크 반전). 서브넷 계산은 결국 비트 연산이다.
② 프리픽스가 커질수록 네트워크는 잘게 쪼개지고 호스트 수는 절반씩 줄어든다. /24=254대, /25=126대, /26=62대. (첫 주소=네트워크, 끝 주소=브로드캐스트 2개는 호스트로 못 씀)
③ CIDR 덕분에 /8 /16 /24 같은 옛 A·B·C 클래스 고정 경계에서 벗어나 필요한 크기만큼 유연하게 나눌 수 있다.