포스트

[Network] 서브넷 & 서브넷 마스크란? (feat. 슈퍼네팅)

Computer Science / Network

서브넷과 서브넷 마스크에 대한 개념 정리 및 슈퍼네팅에 대한 정리

해당 게시글에서 등장하는 IP 클래스의 경우, #IP 클래스란? 게시글을 참고

서브넷(Subnet)이란?

#IP 기초 개념 정리 게시글에서 설명한 IPv4는 초기에 부족한 IP 주소를 해결하기 위해 IP 클래스로 나누어서 할당하는 방법을 택했다.

  • Class A
    네트워크 주소 범위
    • 1.0.0.0 ~ 127.255.255.255
    호스트 ID 개수
    • $2^{24} - 2 = 16,777,214$개
  • Class B
    네트워크 주소 범위
    • 128.0.0.0 ~ 191.255.255.255
    호스트 ID 개수
    • $2^{16} - 2 = 65,534$개
  • Class C
    네트워크 주소 범위
    • 192.0.0.0 ~ 223.255.255.255
    호스트 ID 개수
    • $2^{8} - 2 = 254$개

하지만, 사용해보니 이 방식은 오히려 비효율적인 방식인 것을 알아채게 된다.

Class B($2^{16}$, 65,536개)를 어느 기업체에게 할당했을 경우, 만일 그 기업이 65,000여개의 아이피를 다 쓰는 것이 아닌 10,000개 정도만 쓴다고 가정해보면, 나머지 50,000여개의 IP는 쓰이지 않은 채로 이 기업체는 Class B의 하나를 점유하고 있는 상태가 되어 버린다.

그렇다고 이 기업체에게 Class C($2^{8}$, 256개)를 할당하자니 IP 자원이 너무 부족한 문제가 생긴다.

즉, 호스트 수에 맞게 IP를 클래스 별로 나누어 놓았지만, 사용하지 않는 낭비되는 IP 주소가 생기면서 안하느니만 못한 현상이 발생한 것이다.

부족한 IP 주소를 낭비없이 사용하기 위해 나눴더니 오히려 낭비가 심해지면서 IP 주소가 부족한 현상이 생긴 꼴

이러한 문제를 해결하기 위해 IP를 사용하는 네트워크 장치 수에 따라 효율적으로 사용할 수 있는 서브넷(Subnet) 개념이 등장하게 되었다.

용어 정리

  • 서브넷 (Subnet)
    하나의 네트워크가 분할되어 나눠진 작은 네트워크이다.
  • 서브네팅 (Subnetting)👇
    서브넷을 만들기 위해 네트워크를 분할하는 것이다.
    • 서브네팅을 하면 IP 할당 범위를 더 작은 단위로 쪼갤 수 있게 된다.
    • 만일 IP가 100개만 필요하다면, Class C($2^{8}$, 256개)를 더 쪼개서 줄 수 있다.
  • 서브넷 마스크 (Subnet Mask)👇
    위의 서브네팅을 서브넷 마스크를 통해 계산되어 수행된다.

서브넷 마스크(Subnet Mask)이란?

서브넷 마스크(Subnet Mask)는 IP 주소에서 네트워크 ID와 호스트 ID로 구분하기 위한 목적으로 만들어졌다.

물론 IP 클래스마다 주소 범위가 정해져 있어서 앞자리만 보고도 어느 클래스인지 판별할 수는 있긴 하지만, 보다 쉽게 구분하기 위해서 고유의 표기법으로 구분한다고 이해하면 된다.

서브넷 마스크(Subnet Mask) 표현

서브넷 마스크는 IP 주소와 똑같은 32비트 2진수(xxxx xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx)로 표현된다.

255.255.255.0

여기서 IP와 표현이 다른 점은 서브넷 마스크는 연속된 1과 연속된 0으로 구성되어있다는 것이다.

즉, 1001 1111.1101 1111.1111 0011.0000 0000와 같이 1 중간에 0이 들어오는 값은 가질 수 없고,

1111 1111.1111 1111.1111 1100.0000 0000처럼 1이 연속되거나 0이 연속되는 형태만을 가질 수 있다.

앞서 설명한 것과 같이, 서브넷 마스크는 네트워크 ID와 호스트 ID를 보다 편하게 구분하기 위해 사용된다.

1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 = 255.255.255.0 (서브넷 마스크)

위의 예시로 원리를 설명하자면,

서브넷 마스크 옥텟1(1바이트)가 255면 네트워크 아이디를 가리키게 되는 것이다.

그래서 아주 간단하게 IP 주소와 서브넷 마스크를 이용해서 이 IP가 어느 클래스인지 알 수 있다.

Class대역디폴트 서브넷 마스크예시 (네트워크 ID.호스트 ID)
A1.0.0.0 ~ 127.255.255.255255.0.0.010.10.10.10
B128.0.0.0 ~ 191.255.255.255255.255.0.0172.16.1.10
C192.0.0.0 ~ 223.255.255.255255.255.255.0192.168.10.100

Prefix 표현

서브넷 마스크를 위보다 더욱 간소화해서 표현할 수도 있다.

바로 비트를 이용한 방법인데, IP 주소가 192.168.0.1/24라면, 뒤의 /24가 서브넷 마스크를 표현한 것이다.

/24라는 뜻은 32비트 중, 앞에서 부터 차례대로 1의 개수가 24개라는 의미이다.

나머지 $32-24=8$은 0으로 채워주면 서브넷 마스크 숫자가 되는 것이다.

/241111 1111.1111 1111.1111 1111.0000 0000

기존의 서브넷을 나타내는 방법인 255.255.255.0/24로, 즉 네트워크에 해당하는 비트의 수로 표시하는 방식을 말한다고 보면 된다.

이렇게 하면 IP 주소를 입력할 때, 192.168.1.17 255.255.255.0에서 192.168.1.17/24로 간략히 줄일 수 있게 된다.

서브넷 정보를 알려주기 위해 기존에는 4바이트가 필요했지만, 6비트만 있으면 해당 정보를 전달할 수 있어서 네트워크 리소스를 절약할 수 있다.

10.10.10.10/8Class A

172.16.1.10/16Class B

192.168.100.10/24Class C

IP 주소디폴트 서브넷 마스크예시 (네트워크 ID.호스트 ID/Prefix)
10.10.10.10255.0.0.010.10.10.10/8
172.16.1.10255.255.0.0172.16.1.10/16
192.168.10.10255.255.255.0192.168.10.100/24

서브네팅(Subnetting)이란?

서브네팅(Subnetting)이란 간단하게 말하자면, IP 주소를 효율적으로 나누어 사용하기 위한 방법을 일컫는다.

네트워크 성능 보장, 자원을 효율적으로 분배하기 위해 네트워크 영역과 호스트 영역을 쪼개는 작엽을 행한다.

서브넷팅을 하면 IP 할당 범위를 더 작은 단위로 나눌 수 있게 된다.

자신의 네트워크 주소를 더 작은 서브 네트워크로 2의 배수로 나누는 과정

subnet_2

위의 이미지와 같이 만일 호스트를 50개만 사용하는 기업이 192.168.10.0/24 IP 주소를 사용한다고 가정하면, Class C로써 총 256개의 주소를 할당하게 되는데,

256개를 전부 주기에는 낭비이기 때문에, 이 256개를 절반(128개)로 나누고 또 절반(64갸)으로 나눈 주소를 기업에게 할당하고 남는 네트워크 주소는 다른 사용처로 할당하는 효율적은 작업이 바로 서브네팅의 원리이다.

서브네팅 계산법

subnet_3

주소 범위를 2등분으로 나누기

예를 들어, 100개의 IP를 사용하는 회사가 있다고 가정하고 이 회사에게 IP 대역을 할당할 예정이다.

100개만을 사용하기 때문에 가장 작은 대역인 Class C를 할당해 줄 예정인데(192.168.10.0/24), 그래도 256개를 전부 주기에는 낭비가 있어 보인다.

/24라는 뜻은 124개라는 뜻이며, 24비트까지가 네트워크 ID(3옥텟), 24번째 부터는 호스트 ID (1옥텟)이 된다.

1100 0000.1010 1000.0000 1010.0000 0000

호스트 ID가 8비트이므로, 할당 가능한 호스트의 개수는 $2^8 = 256$개가 된다.

하지만 회사는 100개의 호스트만 사용한다고 하니, 256개의 주소를 2등분으로 나눠 낭비를 최소화해야 한다.

subnet_4

128개씩 두 개로 나누기 위해 서브넷 구분 비트라는 것을 지정해줘야 한다.

서브넷 구분 비트는 이름 그대로 네트워크 주소를 어느 기준으로 쪼개서 서브넷(분할된 네트워크)을 만들어 구분할지 정하는 비트라 이해하면 된다.

서브넷 구분 비트는 항상 호스트 ID에서 왼쪽부터 결정이 되어야 한다는 특징이 있다.

즉, 호스트 ID의 맨 왼쪽을 서브넷 구분 비트로 지정하게 되면, 01로 구분되는데. 범위가 2진수로 다음과 같이 나뉘게 된다.

.0000 0000 ~ .0111 1111 (0 ~ 127)

.1000 0000 ~ .1111 1111 (128 ~ 255)

subnet_5

위와 같이 호스트 ID의 맨 왼쪽의 비트가 0이냐 1이냐에 따라 서브넷이 두 개로 분리되며, 따라서 서브넷 구분 비트 $2^7 = 128$개로 서브넷 주소 범위가 두 개로 나뉜다.

나눠진 서브넷을 10진수 IP 전체 주소 범위를 표현하여 둘로 나누면 아래와 같이 나눠진다.

subnet_6

이렇게 절반으로 나눈 한 서브넷 부분을 이제 회사에게 할당하고 나머지도 필요한 곳에 분배해서 할당하면 된다.

subnet_7

여기서 유의할 점은 모든 네트워크의 가장 첫 번째 주소(0)과 마지막 주소는 네트워크/브로드캐스트 주소로, 사용 가능한 주소에서 제외해야 한다.

따라서 사용이 가능한 호스트는,

  • 192.168.10.1 ~ 192.168.10.126
    192.168.10.0 - 네트워크 주소
    192.168.10.127 - 브로드캐스트 주소
  • 192.168.10.129 ~ 192.168.10.254
    192.168.10.128 - 네트워크 주소
    192.168.10.255 - 브로드캐스트 주소

위와 같이 정리할 수 있다.

주소 범위를 4등분으로 나누기

그렇다면, 만약에 100개도 사용하지 않고 50개만 사용한다면?

이 역시도 반으로 쪼개진 128개를 통째로 주기에는 주소 낭비가 심하다.

따라서 위와 같은 2등분으로 나눠진 호스트를 다시 절반으로 쪼개 64개로 만들고 할당해주면 된다.

앞서 설명했듯, 192.168.10.0/24Class C로서 사용 가능한 호스트 개수는 256개이다.

이를 4등분해서 64개의 호스트를 가진 서브넷 4개로 나누는 것이다.

subnet_8

위와 같이 4등분해서 64개의 호스트를 가진 서브넷 4개로 나누는 것이다.

4등분을 하기 위해서는 서브넷 구분 비트를 왼쪽에서 2비트로 지정한다.

그렇면 서브넷 구분 비트는 00, 01, 10, 11로 총 4개로 구분되고, 이를 적용한다면,

0000 0000 ~ 0011 1111

0100 0000 ~ 0111 1111

1000 0000 ~ 1011 1111

1100 0000 ~ 1111 1111

위와 같이 범위가 4등분되어 나눠줄 수 있다.

subnet_9

이 범위를 IP 주소로 표현하자면 위의 이미지와 같이 된다.

subnet_10

여기서 네트워크 주소와 브로드캐스트 주소의 특징을 볼 수 있는데, 네트워크 주소는 항상 짝수로 나온다는 특징과 브로트캐스트 주소는 항상 홀수로 나온다는 특징이 있다.

따라서 브로드캐스트 주소를 구했는데 짝수가 나온다면 잘못 계산한 것으로 보면 된다.

subnet_11

정리하자면, 50개의 호스트만 사용하는 회사에게는 위와 같이 4등분을 통해 나눠진 서브넷 중 하나를 할당해주면 된다.

주소 범위를 복합적으로 나누기

subnet_12

그렇다면, 이번에는 위와 같이 3층짜리 건물이 있고 각 층마다 회사가 들어섰다.

1층은 100개의 주소를, 2층은 50개, 3층은 30개의 주소만을 사용한다고 가정한다.

주소의 범위를 원하는 크기만큼 복합적으로 나눌때는 반드시 크기가 큰 것부터 나눠야한다.

즉, 1층의 100개부터 나눠 할당해줘야 한다는 것이다.

subnet_13

위의 이미지처럼 1층의 호스트 100대의 IP 주소를 할당하기 위해서는 호스트 ID 7비트가 필요하다.

$2^7 = 128$개이므로 100개를 충분히 할당할 수 있는 수이다.

그러면 위와 같이 25비트가 네트워크 ID, 7비트가 호스트 ID가 된다.

다음으로 이 호스트 ID의 처음과 끝을 구하게 되면, 호스트 ID의 IP 주소의 범위는 .0000 0000 ~ .0111 1111(0 ~ 127)이 된다.

subnet_14

10진수로 표현하면 192.168.10.0 ~ 192.168.10.127이 되고, 이 IP 범위 서브넷을 1층에 할당해주면 된다.

subnet_15

2층의 경우 50대의 호스트를 할당하기 위해서는 호스트 ID 6비트만 있으면 된다.

$2^6 = 64$개이므로 50개를 할당하기에 충분한 수이다.

단, 여기서 유의할 점은 이 64개는 처음에 1층에 할당하고 남은 나머지 128개의 호스트 주소 범위를 쪼개 나눠서 할당해야 한다.

192.168.10.0 ~ 192.168.10.127

192.168.10.128 ~ 192.168.10.256

위의 1층에서는 호스트를 할당하기 위해 위와 같이 256개를 절반으로 나누었지만,

그 중에서 192.168.10.0 ~ 192.168.10.127 범위는 이미 1층에 할당했으니, 나머지 192.168.10.128 ~ 192.168.10.256 범위를 쪼개어 나누면 된다는 뜻이다.

subnet_16

호스트 ID 비트는 6개이므로, 이를 2진수로 표현해서 처음과 끝을 표현하면, .1000 0000 ~ .1011 1111(128 ~ 191)이 되고, 이 범위(64개)를 2층에 할당해주면 된다.

지금까지 나눠진 IP 주소 범위를 이미지로 표현하자면 아래와 같다.

subnet_18

위와 같이 원래 IP 주소 192.168.10.0 ~ 192.168.10.255에서

192.168.10.0 ~ 192.168.10.127 주소 범위는 1층에 할당했고, 192.168.10.128 ~ 192.168.10.191 주소 범위는 2층에 할당했다.

이제 나머지 192.168.10.192 ~ 192.168.10.255에서 3층에 같은 방식으로 나머지 범위에서 반으로 쪼개어(32개) 할당해주면 된다.

subnet_17

3층은 30개만 사용할 예정이기 때문에 $2^5 = 32$개만 필요하다.

이는 호스트 ID 5비트가 필요하며, 이를 범위로 표현하면 .1100 0000 ~ .1101 1111(128 ~ 191)가 된다.

즉, 192.168.10.192 ~ 192.168.10.223 범위의 서브넷을 할당해주면 된다.

위와 같이 복합적으로 쪼개어 나눠진 서브넷은 아래의 이미지로 정리할 수 있다.

subnet_19

슈퍼네팅(Supernetting)이란?

서브넷팅이 네트워크를 분할하는 것이었다면, 슈퍼네팅은 반대의 개념이다.

다시 말해서, 네트워크를 합치는 것을 슈퍼네팅(Supernetting)이라고 한다.

예를 들어 192.168.10.0/24를 사용하면 192.168.10.0 ~ 192.168.10.255 범위에서 254(내트워크, 브로드캐스트 주소 제외)개의 호스트를 가질 수 있게 된다.

그런데, 만일 이 네트워크에 몇 명이 추가로 들어와서 500개 분의 더 많은 호스트를 필요하게 된다면 어떻게 할 것인가?

Class C의 모든 대역폭으로는 수가 부족하니까 Class B 대역폭을 통째로 줘야 하는가?

여기서 슈퍼네팅을 활용할 수 있는데, 바로 Class C 2개를 합쳐서 하나의 네트워크로 구성하여 사용할 수 있다.

방법은 아즈 간단한데, 서브넷 마스크를 이동시키면 된다.

192.168.10.0/24에서 192.168.10.0/23으로 Prefix 숫자를 감소시킨다.

Prefix 숫자가 감소한다는 것은 곧 호스트 ID 개수가 늘어난다는 뜻과 같다.

자세하게 설명을 해보자면 아래와 같다.

192.168.10.0/23 주소를 서브넷 마스크와 2진수로 표현해보면 다음과 같다.

  • IP
    1100 0000.1010 1000.0000 1010.0000 0000, (192.168.10.0)
  • 서브넷 마스크
    1111 1111.1111 1111.1111 1110.0000 0000, (255.255.254.0)

즉, 서브넷 마스크의 1의 개수가 23개가 되니, 호스트 ID의 비트 수는 9개가 되고, $2^9 = 512$개가 되기 떄문에 192.168.10.0 ~ 192.168.11.255의 범위를 가지게 된다.

결과적으로 Class C 두 개를 합쳐 $256 \times 2 = 512 - 2 = 510$(여기서 2는 특수 목적 IP)개의 호스트를 가질 수 있는 네트워크가 완성된다.

참고 사이트

Inpa Dev - 🌐 IP 클래스 · 서브넷 마스크 · 서브넷팅 계산법 💯 총정리

Cloudflare - 서브넷이란? | 서브넷의 작동 방식


  1. 컴퓨팅과 전기 통신에서 8개의 비트가 한데 모인 것을 말하며, “정확하게 8비트”임을 명시해야 하는 경우에 사용하는 용어이다. (Byte와 같은 용어로 취급) ↩︎

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.