본문 바로가기
IT공부방

[네트워크관리사] 2.2 서브넷 마스크 및 CIDR

by TechDayNote 2025. 6. 22.

2025.06.20 - [IT공부방] - [네트워크관리사] 2.1 IPv4 주소 체계: 클래스, 특별한 주소, 공인/사설 IP

 

IP 주소의 세계는 마치 새로운 도시를 여행하는 것처럼 처음엔 낯설게 느껴질 수 있습니다. 192.168.0.10 같은 IP 뒤에 따라오는 255.255.255.0 서브넷 마스크나 /24 같은 CIDR 표기법을 보고 막막했던 경험이 있으신가요? 😅 하지만 천천히 풀어보면 서브넷 마스크와 CIDR에는 네트워크 주소 체계의 논리적인 아름다움이 숨어 있습니다. 이번 포스트에서는 네트워크관리사 1급 시험에서도 중요한 개념인 서브넷 마스크와 CIDR에 대해, 비전공자도 이해할 수 있도록 쉬운 비유와 예시를 통해 감성적으로 알아보겠습니다.

2.2.1 서브넷 마스크

먼저 **서브넷 마스크(Subnet Mask)**부터 살펴보겠습니다. 서브넷 마스크는 말 그대로 IP 주소에 씌우는 마스크(가면) 역할을 합니다. 이 가면을 통해 하나의 IP 주소를 네트워크 부분호스트 부분으로 분리해주는데요. 예를 들어 어떤 장치의 IP가 192.168.100.50이고 서브넷 마스크가 255.255.255.0이라면, 마스크는 이 IP의 앞 세 자리 192.168.100은 네트워크 주소로, 마지막 자리 50은 호스트 주소로 가려내 줍니다. 비유하자면, 서울시 ○○아파트 102동 201호라는 주소에서 서울시 ○○아파트 102동이 네트워크 주소에 해당하고 201호가 호스트 주소에 해당하는 것과 비슷합니다. 즉, 서브넷 마스크는 네트워크상의 **“동네 주소”**와 **“집 번호”**를 나누는 기준이라고 할 수 있죠.

서브넷 마스크는 IP 주소의 네트워크와 호스트 영역을 구분하는 필터입니다. 위 그림은 예시로 IP 주소 103.9.32.146에 서브넷 마스크 255.255.255.0을 적용해 네트워크/호스트 부분을 보여주고 있습니다. 이진수로 나타낸 마스크에서 보라색으로 표시된 **연속된 1 부분(앞 24비트)**이 네트워크 영역이며, 해당되는 IP 부분이 103.9.32로 네트워크 주소입니다. 이어지는 마스크의 **0 부분(마지막 8비트)**은 호스트 영역을 나타내며, 이 예시에서는 그에 해당하는 IP 뒷자리 146이 호스트 주소(녹색 부분)입니다. 장비들은 서브넷 마스크를 이용해 들어온 패킷의 IP를 비트 AND 연산으로 네트워크 주소만 추려내 비교합니다. 마치 마스크로 주소의 공통 부분만 가려보는 것처럼, 받은 패킷의 네트워크 주소가 자기 네트워크와 같으면 로컬로 수용하고, 다르면 외부로 보냅니다. 이렇게 서브넷 마스크는 같은 네트워크 대역에 있는지 아닌지를 구별하여 효율적인 통신이 이뤄지도록 돕는 역할을 합니다.

2.2.1.1 서브넷 마스크 역할

서브넷 마스크의 가장 큰 역할은 앞서 설명한 대로 IP 주소를 두 부분으로 나누는 것입니다. 이를 통해 각 IP 주소가 어느 네트워크에 속하는지 판단할 수 있게 됩니다. 예를 들어 우리의 컴퓨터 IP가 10.0.5.20이고 마스크가 255.255.0.0이라면, 마스크 덕분에 10.0.x.x 대역이 우리 **네트워크(네트워크 ID)**이고 .5.20 부분은 해당 네트워크 안에서의 호스트 ID임을 알 수 있습니다. 이처럼 서브넷 마스크는 네트워크 경계선을 표시해 주는 셈인데, 덕분에 라우터나 컴퓨터는 같은 마스크를 공유하는 IP들끼리 한 네트워크임을 바로 알아챕니다. 우리가 일상에서 우편번호를 보고 같은 동네인지 파악하듯이, 서브넷 마스크를 보면 IP 주소 몇 자리까지가 같은 네트워크인지 알 수 있는 것이죠.

그리고 서브넷 마스크는 IP 주소 낭비를 막는 열쇠이기도 합니다. 필요한 만큼만 호스트 IP를 네트워크에 할당하도록 네트워크를 쪼개 사용할 수 있게 해주거든요. 거대한 네트워크 하나에 수천 대를 몰아넣는 대신, 서브넷 마스크로 여러 작은 네트워크로 나누면 필요한 곳에 IP를 적절히 배분할 수 있습니다. 요컨대 서브넷 마스크는 주소 자원을 효율적으로 분배하는 도구 역할도 하는데요, 이는 뒤에서 살펴볼 CIDR 개념과 맞물려 현대 IP 환경에서 매우 중요한 개념입니다.

2.2.1.2 기본 서브넷 마스크

과거 IPv4 주소체계에서는 IP를 몇 가지 **클래스(Class)**로 구분하여 고정된 크기의 네트워크로 썼습니다. 각 클래스마다 디폴트(기본) 서브넷 마스크와 가용한 IP 수가 정해져 있었는데요. 대표적으로 다음과 같습니다:

  • A 클래스: 첫 옥텟 범위 1~126, 기본 서브넷 마스크 255.0.0.0 (/8) – 약 1,600만 개 IP 주소 할당 가능
  • B 클래스: 첫 옥텟 128~191, 기본 서브넷 마스크 255.255.0.0 (/16) – 약 65,000여 개 IP 주소 할당 가능
  • C 클래스: 첫 옥텟 192~223, 기본 서브넷 마스크 255.255.255.0 (/24) – 약 250개 남짓 IP 주소 할당 가능

위와 같이 클래스 A는 네트워크 부분이 8비트라 하나의 네트워크 안에 수백만 대 호스트를 수용하고, C 클래스는 24비트가 네트워크라 한 네트워크에 약 254대(256-2)만 수용하는 등 규모 차이가 큼을 알 수 있습니다. 문제는, 실제 네트워크 환경에서는 딱 저 크기에 맞게 호스트 수가 떨어지는 경우가 드물다는 점이에요. 예를 들어 300대 정도의 컴퓨터를 연결하려면 Class C의 254개로는 부족하고 그렇다고 Class B를 받자니 65천 개 주소 중 대부분이 남는 식입니다. 이렇게 클래스 단위로만 나누다 보면 IP 주소가 낭비되는 경우가 많았고, 인터넷이 폭발적으로 성장하면서 금세 주소 부족 문제에 직면하게 되었죠.

이 한계를 해결하기 위해 등장한 개념이 바로 CIDR입니다. 클래스별로 뚝 잘라 쓰던 방식에서 벗어나, 더 유연하게 IP 주소를 나누는 방법인데요. 이제 CIDR에 대해 자세히 알아볼까요? 😊

2.2.2 CIDR (클래스 없는 도메인 간 라우팅)

**CIDR(Classless Inter-Domain Routing)**는 말 그대로 “클래스 구분 없는” IP 주소 할당 기법입니다. 기존의 A/B/C 클래스에 구애받지 않고, 필요한 만큼 네트워크 주소 길이를 가변적으로 사용할 수 있게 해주죠. CIDR에서는 서브넷 마스크를 간편하게 **“슬래시(/) 표기법”**으로 표시하는데, IP 주소 뒤에 / 기호와 함께 네트워크 부분 비트의 개수를 쓰는 방식입니다. 예를 들어 192.168.1.0/24라고 하면 이것은 서브넷 마스크 255.255.255.0과 같으며, 네트워크 부분이 24비트(연속된 1이 24개)임을 의미합니다. 이런 표기 덕분에 굳이 255 숫자 네 개를 쓰지 않아도 네트워크와 호스트 경계가 어딘지 한눈에 알 수 있어요.

CIDR의 가장 큰 장점은 IP 주소를 필요한 만큼만 할당하여 낭비를 줄인다는 것입니다. 예를 들어 앞서 Class C는 254개 호스트로는 모자라고 Class B는 너무 남는다 했죠. CIDR에서는 /23 같이 중간 크기의 네트워크를 쓸 수 있습니다. 203.0.113.0/23은 512개(510 usable) 주소 정도를 커버하니 300대 정도 네트워크에 딱 맞출 수도 있습니다. 또 다른 예로, 192.168.10.0/24 네트워크를 두 개로 나누고 싶다면 서브넷팅을 하면 됩니다. 서브넷팅이란 말 그대로 서브넷을 쪼개는 건데요. 마스크 비트를 두 칸 늘린 /26으로 쪼개면 한 네트워크를 4개로 나눌 수도 있고, 한 칸 늘린 /25로 쪼개면 정확히 반으로 나눌 수 있습니다. 가령 192.168.10.0/25와 192.168.10.128/25 두 네트워크로 나누면 각 네트워크에 약 126대씩 호스트를 수용할 수 있습니다. 원래 하나의 /24에 254대 붙일 수 있었던 것을, 둘로 나눠 각기 126대씩 쓰게 최적화한 것이죠. 이렇게 CIDR을 활용하면 네트워크를 잘게 쪼개거나(Subnetting) 반대로 여러 네트워크를 큰 하나로 합치는 **슈퍼네팅(Supernetting)**도 자유롭게 할 수 있습니다. 유연해진 만큼 IP 주소 공간을 알뜰하게 활용할 수 있게 된 것입니다.

CIDR의 또 다른 이점은 라우팅 테이블을 효율적으로 줄일 수 있다는 점인데, 이는 고급 주제이므로 여기서는 깊게 다루지 않겠습니다. 😉 핵심은, CIDR 도입 이후로 우리가 IP를 바라보는 방식이 클래스 개념에서 “프리픽스(prefix) 길이” 개념으로 바뀌었다는 거예요. 이제 네트워크를 식별할 때 **“몇 비트짜리 네트워크인가”**가 중요해졌고, 서브넷 마스크의 1비트들은 항상 그 비트 길이만큼 왼쪽부터 연속되어 나타나게 되었습니다. 다음으로 이러한 연속성 개념과, 이와 대비되는 비연속 서브넷에 대해 알아보겠습니다.

2.2.2.1 연속 서브넷

연속 서브넷이란 서브넷 마스크의 1들이 한 줄로 연달아 나오는 형태의 정상적인 서브넷을 말합니다. 우리가 일반적으로 쓰는 모든 서브넷은 이 범주에 속해요. 쉽게 말하면 서브넷 마스크를 2진수로 나타냈을 때 111...000 형태로 1이 몰아서 나오고 나머지는 모두 0인 형태입니다. 예를 들어 /25의 마스크는 이진수로 11111111.11111111.11111111.10000000이며 1이 25개 연속된 후 나머지 0이 7개입니다. 이런 마스크를 쓰면 나오는 네트워크 주소 범위도 0부터 127, 128부터 255처럼 딱 끊어진 연속된 IP 블록으로 나뉘죠. 앞서 예로 든 192.168.10.0/25의 경우 192.168.10.0–192.168.10.127이 첫 번째 서브넷, 192.168.10.128–192.168.10.255가 두 번째 서브넷으로 각각 연속된 주소 범위를 가집니다. 연속 서브넷에서는 이렇게 한 서브넷이 차지하는 IP 대역이 끊기지 않고 연달아 이어지기 때문에, 라우터 등이 이 범위를 하나의 네트워크로 쉽게 취급할 수 있습니다. 규칙도 단순합니다. 서브넷 마스크의 연속된 1의 개수만 알면 네트워크 크기를 알 수 있으니까요. 실제로 모든 표준 IPv4 서브넷 마스크는 이러한 연속된 형태여야만 합니다. 덕분에 네트워크 엔지니어들은 복잡한 계산 없이도 “/23이면 대략 512개 주소 한 블록이구나” 직관적으로 파악할 수 있게 되었답니다.

2.2.2.2 비연속 서브넷

그렇다면 비연속 서브넷은 무엇일까요? 말 그대로 서브넷 마스크의 1과 0 비트가 뒤섞여 연속적이지 않은 경우를 뜻합니다. 예를 들어 극단적으로 가정해서 서브넷 마스크가 11110101 같은 식이라면(1이 몇 개 찍히다가 0이 나오고 다시 1이 나오는 형태) 도대체 어디까지가 네트워크 부분이고 어디부터 호스트 부분인지 경계가 모호해집니다. 전체 32비트 마스크로 예를 들면 255.0.255.0이라는 마스크를 생각해볼 수 있어요. 이 값을 이진수로 쓰면 11111111.00000000.11111111.00000000인데, 보시는 것처럼 1들이 한 곳에 몰려 있지 않고 중간에 0이 섞여 끊어져 버렸죠. 이런 경우 네트워크 주소를 계산하기가 애매해질 뿐 아니라, 라우팅을 하는 장비 입장에서도 한 네트워크 대역이 여러 조각으로 갈라진 것인지 혼란스럽게 됩니다. 사실 과거에 이론상으로는 저런 비연속 패턴의 마스크를 허용한 적도 있었지만(오래된 RFC 문서에서 11111000이 아닌 11110101 같은 예시를 언급한 경우가 있습니다), 현대 IP **표준에서는 “마스크의 1비트는 반드시 왼쪽에 연속되어야 한다”**고 못박고 있습니다. 거의 모든 네트워크 장비와 운영체제도 비연속 마스크 입력은 오류로 간주해 받아들이지 않아요. 요컨대 비연속 서브넷은 이론적으로만 존재할 뿐 현실에서는 쓰이지 않는 개념이므로 너무 걱정하지 않으셔도 됩니다. 😌 우리는 모든 서브넷 마스크의 1은 차례로 연속된다는 원칙만 기억하면 돼요.

지금까지 서브넷 마스크의 역할부터 CIDR을 통한 유연한 서브넷팅, 그리고 연속/비연속 서브넷에 대해 살펴보았습니다. 처음엔 복잡해 보였던 개념들이지만, 알고 보면 우편번호처럼 체계적인 주소 체계를 만들기 위한 장치들이었죠. 부디 이 글이 초보자 분들께 IP 주소 세계의 지도를 그리는 데 작은 이정표가 되었길 바랍니다. 읽어주셔서 감사해요! 🌷

서브넷마스크 CIDR