서브넷 마스크(Subnet Mask)
요약
IPv4 주소 체계의 핵심인 서브넷 마스크의 원리와 역할을 설명합니다. 서브넷 마스크를 이용해 네트워크에서 사용 가능한 IP 주소 개수를 계산하고, 주어진 호스트 주소로부터 네트워크 주소(AND 연산)와 브로드캐스트 주소(NOT → OR 연산)를 거쳐 장치에 할당 가능한 IP 범위까지 구하는 방법을 /22처럼 셋째 자리가 바뀌는 예시와 함께 상세히 다룹니다. 서브넷 마스크 계산 문제를 통해 학습 내용을 점검할 수 있습니다.
헷갈리기 쉬운 용어 요약
| 용어 | 설명 |
|---|---|
| 서브넷 마스크 | 네트워크 주소 구하는데 사용 |
| 서브네팅(FLSM) | 서브넷 구하는데 사용 |
IP 주소의 기본 개념(IPv4/IPv6, 네트워크/호스트/브로드캐스트 주소)은 IP 주소에서 확인하세요.
서브넷 마스크
서브넷 마스크 문제는 IPv4 주소 문제만 나옵니다.(IPv6일 경우 너무 길어짐)
IPv4 주소는 32비트로 구성되어 있으며, 8비트씩 4개로 나눕니다. 각 8비트는 0~255 범위의 10진수로 표현되어 IP주소는 0.0.0.0 ~ 255.255.255.255 까지 표현할 수 있습니다.
서브넷 마스크를 쓰는 이유
IPv4에 의한 IP 주소 총량은 정해져있습니다. (대략 43억개 정도입니다.)
2011년 이미 IPv4 주소는 모두 소진되었습니다.
현재 IP 주소 할당 방법
이로 인해 신규 서비스, 모바일의 경우 IPv6가 할당되거나 기존 할당한 IPv4 주소가 중고 거래되고 있습니다. 또한 NAT 기술이 적용되어 공유 아이피가 사설 IP 주소(192.168.x.x)를 사용할 수 있게 되어 IPv4 주소를 절약할 수 있게 되었습니다.
이렇게 빠르게 IPv4가 소진된 이유는 PC, 스마트폰 등 기기들의 급속한 증가 때문이기도 하지만 IPv4를 임대하는 기존 방식도 문제였습니다.
기존 방식인 클래스 할당 방식은 국가, 초대형 기업에 한 번에 많은 IP 주소(약 1650만개)를 임대하는 방식이었습니다.

서브넷 마스크는 IPv4 주소를 더 잘게 나누어서 임대할 수 있도록 해줍니다.
IP 주소를 임대해보자
제가 192.168.1.0 ~ 192.168.255.255 까지의 IP 주소를 갖고 있다고 가정해보겠습니다.
A기업에 256개의 IP 주소를 임대해주고 싶습니다. 192.168.1.0 ~ 192.168.1.255 까지의 IP 주소를 임대해주면 될겁니다.
이 때 이렇게 임대해주면 됩니다.
"A기업은 192.168.1.0 네트워크 주소를 사용하세요. 서브넷 마스크는 255.255.255.0 입니다."

IP 주소 종류
IP 주소는 네트워크 주소, 호스트 주소, 브로드캐스트 주소로 나눌 수 있습니다. (자세히 보기)
"A기업은 192.168.1.0 네트워크 주소를 사용하세요."
이 문장을 통해 A기업은 192.168.1.0 이 내가 할당받은 네트워크의 대표 주소임을 알게 됩니다.

그렇다면 "서브넷 마스크는 255.255.255.0 입니다." 라는 문장은 무엇을 의미할까요?
서브넷 마스크는 임대받은 기업이 사용할 수 있는 주소의 범위를 결정한다
255.255.255.0 은 2진수로 11111111.11111111.11111111.00000000 이 됩니다.
뒤의 0의 개수가 사용할 수 있는 주소의 범위를 결정합니다. 2진수로 00000000 에서 11111111 까지의 모든 조합을 IP주소로 사용할 수 있는 것이죠.

서브넷 마스크는 앞부분이 1, 뒷부분이 0으로 구성됩니다.
여기서 헷갈리기 쉬운 점이 있습니다. 네트워크 부분과 호스트 부분으로 나뉘는 것은 마스크가 아니라 IP 주소입니다. 서브넷 마스크는 IP 주소에서 "여기까지가 네트워크 부분이고, 나머지는 호스트 부분입니다"라는 경계를 표시해주는 자(ruler)입니다. 주소를 자르는 도구가 아니라, 주소 옆에 나란히 대보고 눈금을 읽는 도구입니다.

마스크의 1이 놓인 자리가 IP 주소의 네트워크 부분(같은 그룹 내 모든 장치가 동일), 0이 놓인 자리가 호스트 부분(각 장치에 할당하는 부분)입니다. 따라서 0의 개수가 곧 사용 가능한 주소의 범위를 결정합니다.
1개 비트(2진수) 당 2가지 경우의 수(0 아니면 1)가 있죠.
위 서브넷 마스크 11111111.11111111.11111111.00000000에서 호스트 부분의 0이 8개이므로, 8개의 비트를 사용할 수 있습니다. 따라서 개의 IP 주소를 임대해줄 수 있습니다.
다른 예시를 들어볼까요? 만약 서브넷 마스크가 255.255.255.224 라면 어떨까요?
255.255.255.224 를 2진수로 바꾸면 11111111.11111111.11111111.11100000 이 됩니다.
뒤의 0의 개수가 5개 이므로 IP주소를 결정하는데 사용할 수 있는 비트는 5개 입니다.
따라서 개의 IP 주소를 사용할 수 있습니다.
문제 - 서브넷에 포함된 전체 IP 주소 개수 구하기
B기업이 사용하는 네트워크 주소 구하기
이번에는 B기업에게 IP 주소를 임대해주면서 이렇게 이야기했다고 해봅시다.
"B기업은 192.168.1.123이 포함된 IP주소를 사용하세요. 서브넷 마스크는 255.255.255.192 입니다."
이 때 B기업이 사용하는 네트워크 주소는 뭘까요?
네트워크 주소는 호스트 부분이 모두 0인 주소입니다. 따라서 호스트 부분을 모두 0으로 만들어주면 네트워크 주소를 구할 수 있습니다.
서브넷 마스크는 네트워크 부분 자리가 1, 호스트 부분 자리가 0으로 구성되어 있습니다. 이 값을 IP 주소와 AND 연산하면 호스트 부분이 모두 0이 되므로 네트워크 주소가 됩니다.
IP 주소 192.168.1.123과 서브넷 마스크 255.255.255.192를 2진수로 바꿔 AND 연산하면 다음과 같습니다.
|는 서브넷 마스크의 1과 0의 경계, 즉 네트워크 부분과 호스트 부분의 경계를 표시합니다. | 왼쪽(네트워크 부분)은 IP 주소의 원래 값이 유지되고, | 오른쪽(호스트 부분)은 모두 0이 된 것을 볼 수 있습니다.

이 2진수 11000000.10101000.00000001.01000000를 10진수로 바꾸면 192.168.1.64가 됩니다.
따라서 B기업이 사용하는 네트워크 주소는 192.168.1.64 입니다.
추가로 B기업이 임대받은 전체 IP 주소의 개수는 64개입니다. 문제 - 서브넷에 포함된 전체 IP 주소 개수 구하기와 서브넷 마스크가 동일하니, 임대받은 전체 IP 주소의 개수도 같습니다. 전체 주소 범위는 192.168.1.64 ~ 192.168.1.127입니다. 이때 192.168.1.64는 네트워크 주소이고 192.168.1.127은 브로드캐스트 주소이므로 실제 장치에 할당하지 않습니다. 따라서 장치에 할당할 수 있는 호스트 주소는 192.168.1.65 ~ 192.168.1.126까지 총 62개입니다. 이 계산 순서는 할당 가능 범위 구하기에서 한 번에 정리합니다.
호스트 주소와 서브넷 마스크로 네트워크 주소 구하기
방금은 그냥 IP 주소로 192.168.1.123을 이야기했는데 이건 결국 호스트 주소입니다.(네트워크 주소, 브로드캐스트 주소가 아니라면 호스트 주소니까요. 헷갈리면 여기로)
호스트 주소와 서브넷 마스크가 있다면 방금처럼 네트워크 주소를 유추해낼 수 있습니다.
문제 - 호스트 주소와 서브넷 마스크로 네트워크 주소 구하기
네트워크 주소와 서브넷 마스크로 브로드캐스트 주소 구하기
브로드캐스트 주소는 호스트 부분이 모두 1인 주소입니다. 따라서 호스트 부분을 모두 1로 채워주면 브로드캐스트 주소를 구할 수 있습니다.
서브넷 마스크를 반전(NOT)시키면 호스트 부분만 1인 마스크가 됩니다. 이 값을 OR 연산하면 호스트 부분이 모두 1로 채워지므로 브로드캐스트 주소가 됩니다.
서브넷 마스크(11111111.11111111.11111111.11000000)를 반전시키면 00000000.00000000.00000000.00111111이 됩니다.
이 반전된 서브넷 마스크를 네트워크 주소와 OR 연산하면:
| 오른쪽(호스트 부분)이 모두 1로 채워진 것을 볼 수 있습니다.

호스트 주소와 OR 연산해도 동일한 결과가 나옵니다:
두 경우 모두 10진수로 223.13.234.191이 됩니다.
왜 네트워크 주소든 호스트 주소든 결과가 같을까?
반전된 서브넷 마스크는 호스트 부분이 모두 1입니다. OR 연산에서 1과 연산하면 상대 값이 무엇이든 결과는 항상 1이 됩니다.
즉, 호스트 부분은 네트워크 주소(모두 0)든 호스트 주소(어떤 값이든)든 상관없이 OR 연산 후 모두 1로 채워집니다.
반대로 네트워크 부분은 반전된 서브넷 마스크가 모두 0이므로, OR 연산 결과는 원래 값이 그대로 남습니다. 네트워크 주소와 호스트 주소의 네트워크 부분은 동일하기 때문에 결과도 같습니다.
문제 - 호스트 주소와 서브넷 마스크로 네트워크 주소 구하기의 상황을 가져와서 브로드캐스트 주소를 구해봅시다.
문제 - 호스트 주소와 서브넷 마스크로 브로드캐스트 주소 구하기
할당 가능 범위 구하기
네트워크 주소와 브로드캐스트 주소를 구했다면 마지막 한 단계가 남습니다. 실제 장치(PC, 스마트폰 등)에 나눠줄 수 있는 할당 가능 범위입니다.
네트워크 주소와 브로드캐스트 주소는 장치에 할당할 수 없으므로 두 주소 사이에 있는 주소만 할당할 수 있습니다.

지금까지 배운 계산을 순서대로 이어 붙이면 다음과 같습니다.
| 순서 | 계산 | 결과 |
|---|---|---|
| 1 | IP 주소 AND 서브넷 마스크 | 네트워크 주소 |
| 2 | 네트워크 주소 OR 반전(NOT)된 서브넷 마스크 | 브로드캐스트 주소 |
| 3 | 네트워크 주소 + 1 ~ 브로드캐스트 주소 - 1 | 할당 가능 범위 |
예시 - 서브넷 마스크 255.255.255.192
앞에서 구한 C기업의 결과를 그대로 이어 보겠습니다. 호스트 주소는 223.13.234.132, 서브넷 마스크는 255.255.255.192였습니다.
| 구하는 것 | 결과 |
|---|---|
| 네트워크 주소 | 223.13.234.128 |
| 브로드캐스트 주소 | 223.13.234.191 |
| 할당 가능 범위 | 223.13.234.129 ~ 223.13.234.190 |
전체 주소 64개 중 네트워크 주소와 브로드캐스트 주소 2개를 뺀 62개를 장치에 할당할 수 있습니다.
서브넷 마스크가 255.255.255.0이면 더 단순합니다. 호스트 부분이 마지막 자리 8비트 전체라서 네트워크 주소의 마지막 자리는 0, 브로드캐스트 주소의 마지막 자리는 255가 됩니다. 예를 들어 호스트 주소가 192.168.35.3이면 할당 가능 범위는 192.168.35.1 ~ 192.168.35.254입니다.
두 예시 모두 앞의 세 자리(223.13.234, 192.168.35)는 그대로이고 마지막 자리만 계산하면 됩니다.
예시 - 서브넷 마스크 255.255.252.0
이번에는 서브넷 마스크의 셋째 자리가 255가 아닌 경우입니다. 호스트 부분이 셋째 자리까지 들어오기 때문에 셋째 자리도 계산해야 합니다. 계산 순서는 똑같습니다.
호스트 주소 129.200.10.16, 서브넷 마스크 255.255.252.0인 경우를 구해봅시다. CIDR 표기법으로는 129.200.10.16/22라고 쓰며, /22는 서브넷 마스크의 1이 22개라는 뜻입니다.
서브넷 마스크 255.255.252.0을 2진수로 바꾸면 11111111.11111111.11111100.00000000입니다. 0이 10개이므로 셋째 자리의 뒤 2비트와 넷째 자리 8비트 전체가 호스트 부분입니다.
1단계 - 네트워크 주소 (AND 연산)
셋째 자리 00001010(10)의 뒤 2비트가 0이 되어 00001000(8)으로 바뀝니다. 네트워크 주소는 129.200.8.0입니다.
마지막 자리만 0으로 바꾼 129.200.10.0은 네트워크 주소가 아닙니다. 셋째 자리에도 호스트 부분이 2비트 들어 있기 때문입니다.
2단계 - 브로드캐스트 주소 (NOT → OR 연산)
서브넷 마스크를 반전(NOT)하면 00000000.00000000.00000011.11111111입니다. 이 값을 네트워크 주소와 OR 연산합니다.
셋째 자리의 뒤 2비트까지 1로 채워져 00001011(11)이 되고, 넷째 자리는 11111111(255)이 됩니다. 브로드캐스트 주소는 129.200.11.255입니다.
3단계 - 할당 가능 범위
- 시작: 네트워크 주소
129.200.8.0에 1을 더한129.200.8.1 - 끝: 브로드캐스트 주소
129.200.11.255에서 1을 뺀129.200.11.254
할당 가능 범위는 129.200.8.1 ~ 129.200.11.254 입니다. 호스트 비트가 10개이므로 전체 주소는 개이고, 이 중 2개를 뺀 1022개를 할당할 수 있습니다.
이 네트워크는 129.200.8.0부터 129.200.11.255까지 1024개 주소가 하나로 이어진 범위입니다. 그래서 할당할 수 없는 주소는 이 범위의 맨 처음(129.200.8.0)과 맨 끝(129.200.11.255) 두 개뿐입니다. 중간에 끼어 있는 129.200.8.255나 129.200.9.0은 끝자리가 255, 0이어도 평범한 주소입니다.

2진수로 확인해 보면, 호스트 부분 10비트가 모두 0(네트워크 주소)이거나 모두 1(브로드캐스트 주소)인 주소는 맨 처음과 맨 끝뿐입니다.
| 주소 | 호스트 부분 (10비트) | 할당 여부 |
|---|---|---|
| 129.200.8.0 | 00.00000000 (모두 0) | 불가 (네트워크 주소) |
| 129.200.8.255 | 00.11111111 | 가능 |
| 129.200.9.0 | 01.00000000 | 가능 |
| 129.200.11.255 | 11.11111111 (모두 1) | 불가 (브로드캐스트 주소) |
AND/OR 연산 대신 시험장에서 빠르게 푸는 단축 기법은 서브넷 마스크 블록 크기(Block Size)에서 이어집니다.
댓글