서브넷 계산기
IPv4/IPv6 네트워크 주소, 브로드캐스트, 마스크, 호스트 범위, CIDR을 브라우저에서 모두 계산합니다.
서브넷 계산기란?
서브넷 계산기는 IP 주소와 CIDR 프리픽스 또는 서브넷 마스크를 입력받아 네트워크의 구조적 속성, 즉 네트워크 주소, 브로드캐스트 주소, 사용 가능한 호스트 범위, 전체 호스트 수, 그리고 네트워크 비트와 호스트 비트 사이의 이진 경계를 도출하는 도구입니다. 네트워크 엔지니어, 시스템 관리자, 개발자는 VLSM 할당을 계획하거나 방화벽 규칙을 작성할 때, "왜 이 호스트들이 서로 통신하지 못하는가"를 진단할 때, 또는 라우팅 테이블을 구성할 때마다 이 도구를 찾습니다. 계산 자체는 마스크에 대한 비트 단위 AND/OR 연산으로, 원리는 단순하지만 실제로는 오류가 발생하기 쉽습니다. 특히 IPv4와 IPv6의 주소가 각각 32비트와 128비트로 길이가 다른 두 체계를 동시에 다룰 때 더욱 그렇습니다. 본 계산기는 BigInt 산술을 사용하여 브라우저 내에서 완전히 동작하므로 정밀도 손실 없이 IPv6 전체 범위(/0부터 /128까지)를 처리하며, 입력하신 주소를 어떤 서버로도 전송하지 않습니다.
사용 방법
사용 단계
- 상단 토글에서 IPv4 또는 IPv6를 선택합니다.
- 입력란에 IP 주소를 입력합니다. 예를 들어 10.0.0.42 또는 2001:db8::1과 같이 입력합니다.
- 숫자 입력란이나 슬라이더로 프리픽스 길이를 조정하면 결과가 즉시 갱신됩니다.
- 결과 타일을 클릭하면 해당 값이 클립보드에 복사됩니다.
- IPv4의 경우 더 긴 대상 프리픽스를 지정하여 네트워크를 더 작은 서브넷으로 분할할 수 있습니다.
흔한 함정
- /31 네트워크는 결함이 있는 것이 아닙니다. RFC 3021은 점대점 링크에서 두 주소를 모두 사용할 수 있도록 명시적으로 허용합니다.
- /32는 빈 네트워크가 아니라 단일 호스트(호스트 경로)를 의미합니다. IPv6의 /128도 마찬가지입니다.
- "브로드캐스트 주소" 개념은 IPv6에 존재하지 않습니다. 해당 필드는 프리픽스의 마지막 주소를 표시하며, 범위 검사에서는 동일한 역할을 수행합니다.
- 와일드카드 마스크(Cisco ACL에서 사용)는 단순히 서브넷 마스크의 비트 단위 NOT 연산입니다. 0.0.0.255는 255.255.255.0의 와일드카드입니다.
사용 시나리오
기술 원리
IPv4 주소는 32비트, IPv6 주소는 128비트입니다. CIDR 표기법(RFC 4632, 2006년 8월)은 주소에 프리픽스 길이 /n을 부착하여 좌측 n비트를 네트워크 식별자로, 나머지 비트를 호스트 식별자로 선언합니다. 서브넷 마스크는 연속된 n개의 1 뒤에 32−n개(또는 128−n개)의 0이 이어지는 비트 패턴입니다. /24의 경우 11111111.11111111.11111111.00000000, 즉 점-십진 표기로 255.255.255.0입니다. CIDR은 RFC 791의 옛 클래스풀 주소 체계(0.0.0.0–127.255.255.255는 암묵적 /8을 가진 클래스 A였으며, 그 중 0.0.0.0/8은 '이 네트워크'로, 127.0.0.0/8은 루프백으로 예약되었습니다; 128.0.0.0–191.255.255.255는 /16의 클래스 B; 192.0.0.0–223.255.255.255는 /24의 클래스 C)를 대체했습니다. 클래스풀 체계는 주소를 심각하게 낭비했습니다. 1,000명 규모 회사가 클래스 B를 할당받으면 1,000개가 필요한데도 65,534개의 호스트를 받게 되어 IPv4 공간을 파편화했습니다. CIDR은 임의의 프리픽스 길이를 허용하여 VLSM(가변 길이 서브넷 마스크, 처음 1985년 RFC 950에서 공식화되었습니다)과 라우트 집계("슈퍼넷팅")를 가능하게 합니다. 핵심 연산은 비트 단위입니다. 네트워크 = 주소 AND 마스크; 브로드캐스트 = 네트워크 OR (NOT 마스크) = 네트워크 OR 와일드카드. 192.168.1.100/24의 경우, 주소 0xC0A80164를 0xFFFFFF00과 AND 연산하면 0xC0A80100(192.168.1.0)이 되고, 0x000000FF와 OR 연산하면 0xC0A801FF(192.168.1.255)가 됩니다. IPv4의 사용 가능한 호스트 수는 2^(32−n) − 2입니다(네트워크와 브로드캐스트를 차감). −2는 /31에서는 사라지며(RFC 3021은 점대점 링크에서 양 끝단을 모두 사용 가능하도록 회수), /32에서도 사라집니다(단일 호스트 경로). IPv6는 브로드캐스트 주소가 없습니다. 멀티캐스트와 애니캐스트가 그 역할을 대체했으므로 "마지막 주소"는 단순히 프리픽스 범위의 상한입니다. JavaScript의 네이티브 비트 연산자는 32비트 부호 있는 정수이므로 IPv4의 0xFFFFFFFF에 대해 오버플로(−1로 변환)되며 IPv6는 아예 표현할 수 없습니다. 본 계산기는 두 경우 모두 BigInt를 사용하여 버전 간 동일한 정확성을 보장합니다. 사설 주소 공간은 IPv4의 경우 RFC 1918에 정의됩니다. 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. IPv6는 fc00::/7의 ULA(고유 로컬 주소, RFC 4193), 그리고 SLAAC와 온링크 통신을 위한 fe80::/10 링크 로컬을 사용합니다. 본 계산기는 이러한 범위를 표시하여 사설 범위를 실수로 공용 BGP에 게시하지 않도록 합니다. 본 도구가 방지하는 흔한 실수: (1) 192.168.1.100/255.255.255.0과 /24 입력 혼동 — 계산기는 프리픽스 형식을 받아 점-십진 마스크를 표시; (2) /30과 /29의 호스트 수용량 오산(2개 vs 6개); (3) /24를 8개의 /27로 분할할 때 네 번째 서브넷 시작점 오산(192.168.1.97이 아니라 192.168.1.96); (4) Cisco ACL 문법에서 와일드카드 0.0.0.255와 마스크 255.255.255.0 혼동. 네트워크 비트가 강조 표시된 이진 시각화는 이 모든 오류를 사라지게 하는 경계를 가장 빠르게 체득하는 방법입니다.
- RFC 4632(2006년 8월)는 CIDR(Classless Inter-Domain Routing)을 정의하며, RFC 791의 클래스풀 A/B/C 체계를 대체합니다. /n 표기법은 네트워크 프리픽스 길이를 선언하며 나머지 비트는 호스트 부분입니다. CIDR은 VLSM(처음 1985년 RFC 950에서 공식화되었습니다)과 라우트 집계를 가능하게 하며, 둘 다 IPv4 주소 절약과 현대 BGP 테이블에 필수적입니다.
- 네트워크 주소 = IP AND 마스크; 브로드캐스트 = 네트워크 OR 와일드카드 (와일드카드 = NOT 마스크). /24의 경우 마스크 0xFFFFFF00, 와일드카드 0x000000FF. 사용 가능한 호스트 = 2^(32−n) − 2이며, 예외는 /31(RFC 3021, 점대점 링크에서 두 주소 모두 사용 가능)과 /32(단일 호스트 경로)입니다.
- IPv6(128비트)에는 브로드캐스트가 없습니다. 멀티캐스트(ff00::/8)와 애니캐스트가 이를 대체했습니다. 관례적인 최소 프리픽스는 /64입니다(SLAAC를 위해, 서브넷당 1.8경 개 주소); 사이트당 /56 또는 /48; ISP당 /32. IPv6 주소 공간은 절약보다 라우팅 집계를 우선시합니다.
- RFC 1918을 넘어서는 예약 범위: 127.0.0.0/8은 루프백, 169.254.0.0/16은 IPv4 링크 로컬(자동 IP / APIPA), 224.0.0.0/4는 멀티캐스트, 240.0.0.0/4는 실험적 사용을 위해 예약되어 있습니다. IPv6 또한 fe80::/10을 링크 로컬 SLAAC용으로, ff00::/8을 멀티캐스트용으로, ::1/128을 루프백용으로 예약합니다. 본 계산기는 사설 범위와 공인 범위를 구분하여, 입력하신 주소가 공용 인터넷에서 라우팅 가능한지 한눈에 알 수 있도록 합니다.
- JavaScript 비트 연산자는 32비트 부호 있는 정수입니다. (0xFFFFFFFF & 0xFFFFFF00)은 0xFFFFFF00이 아닌 −256을 반환합니다. 본 계산기는 전 과정에서 BigInt를 사용하여 IPv4 전체 범위와 128비트 IPv6를 정밀도 손실 없이 처리합니다. 동일한 코드 경로가 두 버전을 모두 계산하며, 마스크 폭만 다를 뿐입니다.
- Cisco/Juniper의 흔한 함정: ACL 문법은 서브넷 마스크(255.255.255.0)가 아닌 와일드카드 마스크(0.0.0.255)를 받습니다. EIGRP와 OSPF의 "network" 구문도 와일드카드를 사용합니다. 반전된 마스크는 의도한 네트워크의 보수와 일치합니다. 라우팅 프로토콜에서는 조용히 실패하고(인접 관계 미형성), ACL에서는 악용 가능하게 실패합니다(잘못된 트래픽 허용).
- VLSM 예시: /24를 동일한 4개의 서브넷으로 분할하면 4 × /26(각 64개 주소)이 되며, 서브넷당 사용 가능한 호스트는 62개입니다. 인접한 /26은 0, 64, 128, 192 오프셋에서 시작합니다 — 0, 63, 127, 191이 아닙니다. 계산기의 분할 도구는 이러한 경계를 자동으로 생성하므로 머릿속으로 변환할 필요가 없습니다.
예시
표준 /24 (가장 흔한 LAN)
입력: 192.168.1.100/24
네트워크: 192.168.1.0
브로드캐스트:192.168.1.255
마스크: 255.255.255.0
와일드카드: 0.0.0.255
호스트: 192.168.1.1 - 192.168.1.254 (사용 가능 254개)
클래스: C, 사설 (RFC 1918)
이진: 11000000.10101000.00000001.01100100 (네트워크 비트 = 왼쪽 24; 호스트 비트 = 오른쪽 8)점대점 /31 (RFC 3021)
입력: 10.0.0.1/31
네트워크: 10.0.0.0
브로드캐스트: 10.0.0.1
마스크: 255.255.255.254
호스트: 10.0.0.0 - 10.0.0.1 (사용 가능 2개, 링크의 양 끝단)
RFC 3021 이전에는 /31이 "사용 불가능"했습니다. 2 - 2 = 0이었기 때문입니다.
현대 라우터는 점대점 링크에서 두 주소를 모두 허용하여,
트랜짓 세그먼트가 소비하는 주소 공간의 절반을 절약합니다.VLSM 분할: /24를 4개의 /26으로
입력: 192.168.1.0/24, /26으로 분할
서브넷 1: 192.168.1.0/26 호스트 .1 - .62
서브넷 2: 192.168.1.64/26 호스트 .65 - .126
서브넷 3: 192.168.1.128/26 호스트 .129 - .190
서브넷 4: 192.168.1.192/26 호스트 .193 - .254
경계에 주목하세요: 0, 64, 128, 192 — 각 /26은 64개 주소를
포함합니다(사용 가능 62개). 흔한 실수는 서브넷 2를 .63
(서브넷 1의 브로드캐스트 +1)에서 시작하는 것이지만, .63은
브로드캐스트 자체이며 다음 서브넷은 .64에서 시작합니다.IPv6 /64 (표준 리프 네트워크)
입력: 2001:db8:1234:5678::1/64
네트워크: 2001:db8:1234:5678::
마지막: 2001:db8:1234:5678:ffff:ffff:ffff:ffff
마스크: ffff:ffff:ffff:ffff::
호스트: 18,446,744,073,709,551,616 (2^64)
단일 /64는 IPv4 전체 주소를 제곱한 것보다 많은 주소를
포함합니다. SLAAC는 /64를 요구합니다. 하위 64비트가
인터페이스 식별자(EUI-64 또는 RFC 7217의 무작위 값)를
인코딩하기 때문입니다.자주 묻는 질문
왜 /24의 사용 가능한 호스트가 256개가 아닌 254개인가요?
/24 서브넷은 2^8 = 256개의 주소를 가지지만 그중 두 개가 예약되어 있습니다. 네트워크 주소(192.168.1.0)는 라우팅 테이블에서 서브넷 자체를 식별하고, 브로드캐스트 주소(192.168.1.255)는 서브넷 내 모든 호스트로 향하는 메시지에 사용됩니다. 둘 다 호스트 IP로 사용할 수 없으므로 할당 가능한 주소는 254개가 남습니다. 동일한 −2 규칙은 /1부터 /30까지의 모든 IPv4 프리픽스에 적용됩니다. 예외: /31은 사용 가능한 주소가 2개(RFC 3021, 점대점), /32는 1개(단일 호스트 경로)입니다.
서브넷 마스크와 와일드카드 마스크의 차이는 무엇인가요?
서브넷 마스크는 네트워크 부분에는 1, 호스트 부분에는 0을 가집니다. /24의 경우 255.255.255.0입니다. 와일드카드 마스크는 비트 단위 NOT 연산 결과로, /24의 경우 0.0.0.255입니다. Cisco IOS access-list, EIGRP, OSPF는 와일드카드를 사용하는데, 원래 ACL 구현이 "don't care" 모델(와일드카드의 1 비트는 "이 비트는 일치할 필요가 없다"를 의미)을 사용했기 때문입니다. 다른 벤더와 대부분의 현대 Cisco 문법은 서브넷 마스크 형식도 받지만, 인계받은 레거시 구성에서는 와일드카드가 사용됩니다.
IPv6에는 브로드캐스트 주소가 있나요?
아니요. IPv6는 브로드캐스트를 의도적으로 제거하고 멀티캐스트(ff00::/8)와 애니캐스트로 대체했습니다. "all-nodes" 스코프는 ff02::1로, IPv4의 링크 로컬 브로드캐스트처럼 동작하지만 해당 멀티캐스트 그룹에 가입한 노드에만 도달합니다. 그래서 본 계산기는 IPv6에서 이 값을 '브로드캐스트'가 아닌 '마지막 주소' 필드로 표시합니다. IPv4의 255.255.255.255처럼 패킷을 보낼 수는 없습니다. 모든 호스트로 패킷을 전달하는 프로토콜 수준의 개념이 존재하지 않기 때문입니다.
옛 공식으로 "사용 가능한 호스트가 없는" /31이 왜 유용한가요?
2000년 이전 교과서는 /31의 사용 가능한 호스트가 2^1 − 2 = 0개이므로 무효라고 했습니다. RFC 3021(2000년 12월)은 점대점 링크용으로 /31을 재정의했습니다. 정확히 두 엔드포인트만 존재하고 별도의 브로드캐스트가 필요 없는 환경(링크 자체가 브로드캐스트 스코프를 정의)이기 때문입니다. 현대 라우터(IOS 12.2 이상, Junos, FRR, Linux)는 모두 /31을 지원합니다. 트랜짓 링크에서 /30 대신 /31을 사용하면 코어 네트워크 인프라가 소비하는 주소 공간이 절반으로 줄어들며, 대규모 네트워크에서는 수천 개의 링크에 걸쳐 누적되는 효과가 큽니다.
왜 모든 IPv6 서브넷이 /64인 것 같나요?
관례적으로 리프 네트워크에 할당되는 IPv6의 최소 단위가 /64입니다. 하위 64비트는 인터페이스 식별자용으로 예약되어 있으며, SLAAC(RFC 4862)는 이를 MAC 주소(EUI-64), 네트워크 프리픽스와 호스트별 비밀에 기반한 안정적 해시(RFC 7217), 또는 단기 임의값(RFC 4941 프라이버시 확장)으로부터 생성합니다. 점대점 링크에 /126이나 /127을 사용하는 것은 정적 구성에서는 기술적으로 동작하지만 SLAAC와 여러 자동 기능을 망가뜨립니다. 엔드 스테이션을 호스팅하는 모든 서브넷에는 /64가 권장되며, /127은 완전히 통제 가능한 라우터 간 링크에서만 사용됩니다.
이 도구가 제 IP 주소를 서버로 전송하나요?
아니요. 모든 계산은 브라우저 내에서 JavaScript BigInt 산술로 클라이언트 측에서 실행됩니다. 어떤 주소, 프리픽스, 계산 결과도 백엔드로 전송되지 않습니다. 브라우저 개발자 도구의 네트워크 탭을 열어 직접 확인하실 수 있습니다. 계산 중 외부 요청은 발생하지 않습니다. 이는 모든 ToolAct 브라우저 기반 유틸리티의 프라이버시 원칙과 일치합니다.
/24와 255.255.255.0의 차이는 무엇인가요?
기능적으로는 차이가 없습니다. 동일한 마스크의 두 가지 표기법일 뿐입니다. /24(CIDR 표기법, RFC 4632)는 선행 1 비트의 개수를 세는 것이고, 255.255.255.0(점-십진 마스크)은 그 비트들을 4옥텟 숫자로 풀어 쓴 것입니다. 대부분의 현대 OS와 라우터 구성은 두 형식을 모두 받습니다. 본 계산기는 입력한 모든 프리픽스에 대해 두 형식을 모두 표시하므로 대상 시스템이 요구하는 형식을 그대로 복사·붙여 넣으실 수 있습니다.
왜 이 계산기는 010.0.0.1 같은 입력을 거부하나요?
선행 0(010, 04, 0001)은 거부됩니다. 동일한 문자열이 IP 파서마다 다르게 해석되기 때문입니다. glibc의 inet_aton은 역사적으로 선행 0이 붙은 옥텟을 8진수로 해석했지만(010 = 8), 현대 Python(3.9.5 이상)과 JavaScript 런타임은 이를 10진수로 처리합니다(010 = 10). 이러한 스택 간 불일치는 실제 SSRF 우회 취약점(CVE-2021-29921 및 관련 사례)을 야기했습니다. 어떤 서비스가 허용 목록 검사에서 010.0.0.1을 8.0.0.1로 처리하는 동안, 다운스트림 라이브러리는 10.0.0.1로 연결해 버린 것입니다. 특정 해석을 암시하지 않기 위해 본 계산기는 선행 0이 붙은 모든 옥텟을 거부합니다. 붙여 넣기 전에 0을 제거하시기 바랍니다(010 → 10).