개발 일기

[Computer Network] 서브넷, 서브넷 마스크, 서브네팅 본문

Computer Science/Computer Network

[Computer Network] 서브넷, 서브넷 마스크, 서브네팅

개발 일기장 주인 2024. 6. 28. 17:12

서브넷(Subnet)

IPv4는 용도에 따라서 3개의 클래스로 분리했다.

 

 

하지만 사용해보니 이 방식은 오히려 비효율적 인 것이었다.

 

클래스 B를 어느 중소기업체에게 할당했을 경우 만일 그 기업이 65000여개의 아이피를 다 쓰는 것이 아닌 10000개 정도만 쓴다고 가정해보자.

그럼 나머지 50000여개의 IP는 쓰이지 않은 채 이 기업체는 클래스 B의 하나를 점유하고 있는 상태가 되어 버린다.

그렇다고 이 기업체에게 C 클래스 IP(256개)를 할당하자니 IP자원이 너무 부족하게 되어 버린다.

 

즉, 호스트 수에 맞게 IP를 클래스별로 나누어 놓았더니만 안하만도 못한 현상이 발생한 것이다.

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

  • 서브넷(Subnet) 이라는 것은 하나의 네트워크가 분할되어 나눠진 작은 네트워크이다.
  • 서브넷을 만들기위해 네트워크를 분할하는 것을 서브네팅(Subnettin)이라고 한다.
    서브네팅을 하면 IP 할당 범위를 더 작은 단위로 쪼갤수 있게 된다.
    그래서 만일 ip가 100개만 필요하다면 C클래스(256개)를 더 쪼개서 줄 수 있다.
  • 그리고 이 서브네팅을 서브넷 마스크(Subnet Mask)를 통하여 계산되어 수행된다.

세가지 용어에 대해서 명확히 정리가 되어졌다.

그럼 이제 서브넷 마스크로 서브네팅을 하는 방법을 알아보도록 하자.


서브넷 마스크 (Subnet Mask)

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

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

 

서브넷 마스크 표현

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


255.255.255.0

 

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

즉, 10011111.11011111.11110011.00000000 와 같이 1 중간에 0 이 들어오는 값은 가질 수 없고,

11111111.11111111.11111100.00000000의 1이 연속되거나 아닌 형태만 가질 수 있다는 말이다.

 

앞서, 서브넷 마스크는 네트워크 아이디와 호스트 아이디를 보다 편하게 구분하기 위해 사용된다라고 했었다.

다음 사진을 보면 그 원리를 쉽게 이해할 수 있을 것이다.

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

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

 

 

CLASS 대역 디폴트 서브넷 마스크
A 1.0.0.0 ~ 127.255.255.255 255.0.0.0
B 128.0.0.0 ~ 191.255.255.255 255.255.0.0
C 192.0.0.0 ~ 223.255.255.255 255.255.255.0

 

 

 

 

Prefix 표현

서브넷 마스크를 위보다 더욱 간소화해서 표현할 수도 있다.
바로 비트를 이용한 방법인데, IP 주소가 192.168.0.1/24 라면 뒤에 /24가 서브넷 마스크를 표현한 것이다.


/24 라는 뜻은 32비트 중 앞에서부터 차례대로 1의 개수가 24개라는 의미이다. 나머지 32-24=8은 0으로 채워주면 서브넷 마스크 숫자가 되는 것이다.

 

/24  →  11111111.11111111.11111111.00000000

 

기존의 서브넷을 나타내는 방법 255.255.255.0 을 /24 즉, 네트워크에 해당하는 비트의 수로 표시하는 방식을 말한다고 보면 된다.
이렇게 하면 IP 주소를 입력할 때 192.168.1.17 255.255.255.0 192.168.1.17/24로 간략히 줄일 수 있게 된다.
서브넷 정보를 알려주기 위해 기존에는 4B가 필요했지만 6bit만 있으면 해당 정보를 전달할 수 있어서 네트워크 리소스를 절약할 수 있다.

  • 10.10.10.10/8 → A클래스
  • 172.16.1.10/16 → B클래스
  • 192.168.100.10/24 → C클래스

 

 

IP주소에는 네트워크 주소와 브로드캐스트 주소가 있다.
네트워크 주소는 호스트 ID가 10진수로 0인 주소가 되고, - 192.168.1.0
브로드 캐스트 주소는 호스트 ID가 10진수로 255인 주소이다. - 192.168.1.255

네트워크 주소는 전체 네트워크에서 작은 네트워크를 식별하는데 사용 된다.따라서, 호스트 ID가 0이면 그 네트워크 전체를 대표하는 주소가 된다.
만약 192.168.1.1 ~ 192.169.1.6의 IP 주소를 가진 컴퓨터들은192.169.1.0의 주소를 가진 네트워크에 있다고 할 수 있다.

브로드 캐스트 주소는 네트워크에 있는 컴퓨터나 장비 모두에게 한번에 데이터를 전송하는 데 사용되는 전용 IP주소이다.
전체 네트워크에 데이터를 전송하려면 호스트 ID에 255인 주소로 데이터를 전송하면 네트워크 안에 있는 모든 컴퓨터가 데이터를 받게 된다. 따라서 위에서 예로 들었던, 192.168.1.1 ~ 192.169.1.6 범위의 네트워크에서 192.168.1.255 주소가 블로드 캐스트 주소가 된다.

위와 같이 네트워크상에 네트워크 주소, 브로드 캐스트 주소가 있기 때문에 네트워크상에개별 컴퓨터들은 네트워크 주소와 브로드 캐스트 주소를 할당해선 안된다.

그래서 실제로 쓸 수 있는 IP 주소 값은 2^8 -2 해서 254가지 이다.

서브네팅 (Subnetting)

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

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

서브넷팅을 하면 IP 할당 범위를 더 작은 단위로 나눌 수 있게 된다. (자신의 네트워크 주소를 더 작은 서브 네트워크로 2의 배수로 나누는 과정)

 

아래 사진과 같이,

만일 호스트를 50개만 사용하는 기업이 192.168.10.0/24 아이피 주소를 사용한다면 가정하면, C클래스이니까 총 256개의 주소를 할당하게 되는데,

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

 

 

 


서브네팅 계산

 

 

 

주소범위를 절반으로 나누기 (2등분)

예를들어, 100개의 아이피를 사용하는 회사가 있다고 가정하자.

이 회사에게 아이피 대역을 할당할 예정이다.

100개 밖에 사용안하니 가장 작은 C클래스 대역을 줄 예정인데(192.168.10.0/24) 그래도 256개를 전부 주기에는 낭비가 있어 보인다.

 

/24 라는 뜻은 1이 24개라는 뜻이다.

그러면 24비트까지가 네트워크 ID(3옥텟), 25번째 부터는 호스트 ID(1옥텟)이 된다.

  • 1100000.10101000.00001010.0000000

호스트ID가 8비트이니까 즉, 할당가능한 호스트 갯수는 2^8=256개가 된다.

하지만 회사는 100개의 호스트만 사용한다고 하니 256개를 전부 주는 것은 낭비이다. 256개의 주소를 절반으로 나누는 작업을 시행해보자.

 

 

 

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

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

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

 

즉, 호스트ID의 맨 왼쪽을 서브넷 구분 비트로 지정하게 되면, 0과 1로 구분되어지는데,

범위가 2진수로 다음과 같이 나뉘게 된다

 

.00000000 ~ .01111111 (0 ~ 127)

.10000000 ~ .11111111 (128 ~ 255)

 

즉, 호스트ID 맨왼쪽 비트가 0이냐 1이냐에 따라 서브넷이 두개로 분리되게 된다.

따라서 서브넷 구분 비트 2^7승 128값 기준으로 서브넷 주소 범위가 두개로 나뉘어진다.

 

 

 

 

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

 

 

 

 

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

 

이때 위에서 유의했듯이 어느 한 네트워크 범위의 가장 첫번째 주소(0) 과 마지막 주소는 네트워크/브로드캐스트 주소로서 제외하여야 한다고 하였다.

 

 

 

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

 

192.168.10.1 ~ 192.168.10.126

192.168.10.129 ~ 192.168.10.254

 

로 되게 된다.

 

 

주소범위를 4등분 나누기

이번엔 50개 호스트만 사용하는 회사가 있다고 하자.

이 역시 반으로 쪼개어도 128개를 통째로 주기에는 주소 낭비가 심하다. 따라서 같은 원리로 절반으로 또 쪼개 64개로 만들고 할당해주면 된다.

 

앞에서 했듯이 192.168.10.0/24 는 C클래스로서 사용가능한 호스트 갯수는 256개이다.

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

 

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

 

 

 

 

그러면 서브넷 구분비트는 00, 01, 10, 11 로 총 4개로 구분되어질 수 있고, 이를 적용해보면

 

00000000 ~ 00111111

01000000 ~ 01111111

10000000 ~ 10111111

11000000 ~ 11111111

 

로 범위가 4등분되어 나뉘어 줄수 있다.

이 범위를 아이피 주소로 표현하자면 다음과 같이 된다.

 

 

 

여기서 네트워크 주소와 브로드 캐스트 주소의 특징을 볼수 있는데,

네트워크 주소는 항상 짝수로 나온다는 특징과 브로드 캐스트 주소는 항상 홀수로 나온다는 특징이 있다.

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

 

 

 

 

어쨋든 간에 256개의 호스트 주소를 4개로 나뉘었고 이를 범위로 표현하면 다음과 같이 된다.

이중 서브넷 하나를 회사에게 할당해주면 끝난다.

 

 

 

 

 

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

이번에는 3층 건물이 있고 각 층마다 회사가 들어섰는데, 1층은 100개의 주소, 2층은 50개, 3층은 30개만 사용한다고 가정하자.

 

 

주소를 원하는 크기만큼 나눌때는 반드시 크기가 큰 것 부터 나눠야 한다.

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

 

1층의 호스트 100대의 아이피주소를 할당하기위해서는 7개의 호스트 ID 비트가 필요하다.

왜냐하면 2^7으로서 128개가 되니까 100개를 충분히 할당 할 수 있기 때문이다.

그러면 25비트가 네트워크 ID 그리고 나머지 7비트가 호스트 ID가 됨으로서 다음 그림과 같이 표현된다.

 

 

 

 

이제 이 호스트 ID를 처음과 끝을 구해준다.

호스트ID의 아이피 주소의 범위는 .00000000 ~ .01111111 (0 ~ 127) 이 되니까,

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

 

 

 


 

 

 

이번에는 2층의 50대의 호스트를 할당하기 위해선 6개의 비트만 호스트 ID만 있으면 된다.

왜냐하면 2^6 (64)개만 할당해주면 되기 때문이다.

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

 

위에서 1층에 호스트를 할당하기 위해 256개를 절반으로 나누었는데

  • 192.168.10.0 ~ 192.168.10.127
  • 192.168.10.128 ~ 192.168.10.256

그중 192.168.10.0 ~ 192.168.10.127 는 이미 1층에 할당헀으니,

나머지 192.168.10.128 ~ 192.168.10.256 범위에서 쪼개어 나누면 된다는 말이다.

 

호스트 ID 비트는 6개이므로 이를 2진수로 표현해서 처음과 끝을 구해보면

  • .10000000 ~ 10111111 (128 ~ 191)

가 되고 이 범위(64개)를 2층에 할당해주면 된다.

 

 

 


원래 아이피 주소 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개) 할당해 주면 된다.

3층은 30개만 사용하니 2^5(32)만 필요해 호스트 ID는 5비트가 되고, 이를 범위를 구하게 되면

  • .11000000 ~ .11011111 (192 ~ 223)

가 되서 즉, 192.168.10.192 ~ 192.168.10.223 범위의 서브넷을 할당해주면 끝난다.

 

 

 


슈퍼넷팅 (Supernetting)

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

네트워크를 합치는 것을 슈퍼넷팅이라고 한다.

 

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

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

 

C클래스의 모든 대역폭으로는 갯수가 부족하니까 B클래스 대역폭을 통째로 주어야 할까?

여기서 슈퍼네팅이 힘을 발휘하는데, 바로바로 C클래스 2개를 합쳐서 하나의 네트워크로 구성하여 사용할 수 있다.

 

방법은 간단하다. 서브넷 마스크를 이동시키면 된다.

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

prefix 숫자가 감소시킨다는 것은 곧 호스트ID 갯수가 늘어난다는 뜻과 같다

 

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

  • 아이피 : 11000000.10101000.00001010.00000000 (192.168.10.0)
  • 서브넷 마스크 : 11111111.11111111.11111110.00000000 (255.255.254.0)

즉, 서브넷 마스크의 1의 갯수가 23개가 되니 호스트 ID의 비트수는 9개가 되고, 2^9=512 니까

192.168.10.0 ~ 192.168.11.255 의 범위를 가지게 된다.

그러면 C클래스 두개를 합쳐 256 X 2 = 512 - 2(특수목적 IP) = 510 개의 호스트를 가질 수 있는 네트워크가 완성되어 진다.

출처: https://inpa.tistory.com/entry/WEB-IP-클래스-서브넷-마스크-서브넷팅-총정리#서브넷_/_서브넷_마스크_/_서브네팅_총정리 [Inpa Dev 👨‍💻:티스토리]