본문 바로가기

NETWORK

서브넷이란?

 

출처: https://www.youtube.com/watch?v=-iMFsDdfoeI   (이게 설명와따임)
참고: https://www.youtube.com/watch?v=px0HDON5Wa4

옥텟, 사설 IP, 공용IP의 개념:  https://blog.naver.com/mylinuxer/130173171275

서브넷에 대하여 좋은 설명: https://code-lab1.tistory.com/34

설명에 들어가기 전 기본 개념: 옥텟(Octet)이란? 이진수 8자리 마다 점을 찍고 이 8개의 이진수를 한 옥텟이라고 부름. 즉 IPv4는 32bit로 구성되어 있다. 따라서  IPv4의 주소는 4개의 옥텟으로 이루어져 있는 것이다.

==============================================

11111111 ==>   128+64+32+16+8+4+2+1=255
01111111 ==>   64+32+16+8+4+2+1=127
01111110 ==> 64+32+16+8+4+2=126

2^8=256

2^7=128
2^6=64
2^5=32

==============================================

네트워크 주소=네트워크ID

IP주소=네트워크 ID(네트워크 주소)+호스트 ID

여기서 서브넷 구분비트라고 불리는게 서브넷이다.

왜 서브넷을 쓸까? (기본적으로 서브넷은 비트연산(AND, OR, NOT)을 알아야함)

서브네팅(Subnetting)이란? IP주소를 효휼적으로 나누어 사용하기 위한 방법. (클래스 범위에 있는) IP주소를 좀더 효율적으로 사용하기 위해 사용하고자 하는 만큼 나누어 사용하는 방법(원본 네트워크를 여러개의 네트워크로 분리하는 과정).

서브넷 구분비트는 항상 호스트 ID의 왼쪽부터 시작된다.

A Class의 경우 첫번째 옥텟만을 네트워크 ID 비트로 사용하고 2,3,4번째 옥텟을 호스트 ID비트로 사용하기 때문에 HOST ID의 갯수는 약 1670만개이다. 그림에서와 같이 C클래스의 경우 처음부터 3개의 옥텟을 네트워크 ID비트로 사용하기 때문에 오직 마지막 옥텟만을 호스트 ID비트로 사용하게 되어 호스트 ID의 갯수는 256개에 불과하다.

호스트 ID의 갯수가 바로 각각의 컴퓨터가 부여받는 IP주소이다(각각의 클래스가 자유로이 부여할 수 있는 IP)!!!즉 서로다른 컴퓨터가 네트워크 ID는 같을 수 있어도 호스트ID는 달라야 한다.

Class: IP주소를 효율적으로 관리하기 위해 특정범위로 나누어 놓은 것. 

A Class: 네트워크 주소 범위라는 것이 네트워크 ID로 사용할 수 있는 옥텟과도 관련됨(네트워크 주소=네트워크ID). 예를들어 A클래스는 네트워크 ID로 사용할 수 있는 옥텟이 4개의 옥텟중 첫번째 옥텟만을 네트워크 ID를 위한 비트로 사용할 수 있다. 그렇다면 아래 그림에서 A Class의 경우 네트워크 ID의 주소 범위가 1.0.0.0 ~126.0.0.0 이라는 것은 무언인가? 우선 A Class의 경우는  네트워크 주소에 관해서는 첫번째 옥텟만이 관련있다. 그런데 A Class는 IP주소를 바이너리로 표시할 때 맨 앞자리수가 항상 0이다(규칙). 즉 첫번째 옥텟이 00000000~01111111(십진수로는127)인 0.0.0.0 ~ 127.255.255.255 까지 를 A클래스라 하는 것이다. 다만 A클래스의 네트워크 주소는 아래와 같이 1.0.0.0126.0.0.0까지로 규정되어 있다. 이러한 규정은 A클래스 뿐만이 아닌 모든 클래스에 있다. 따라서 네트워크 주소(네트워크 ID)파악에 힘쓰지 말고 HOST ID에 방점을 두자.

( https://catsbi.oopy.io/f565e8c1-34c6-4b61-be61-e1ab04fc51fb )

 

처음 클래스를 설계할 당시에는 인터넷이 이만큼 확산될지를 예상하지 못하였음. 그래서 단순히 A,B,C로 구분해 놓으면 사용되는 IP주소보다 버려지는 IP주소가 많다는 결함이 생겼고 이를 해결하기 위해 IP주소를 더 효율적으로 나누어 사용하기 위해 서브네팅이 사용된다.

기본적으로 IP주소는 32비트로 이루어진 4개의 숫자를 사용한다(ex) 192.168.0.1 ). 4개의 숫자는 각각 8비트를 차지 한다. (4*8bit=32bit). C클래스의 경우 앞의 3개의 숫자(24bit)를 Network ID(네트워크 주소)라고 하고 뒤의 1개의 숫자를 호스트ID로 사용한다(아래그림에서는 192.168.0 이 네트워크 아이디, 뒤의 10이호스트 아이디).

참고로 마지막에 오는 호스트의 숫자인 8비트의 구성이 모두 0이거나 1인 아래의 경우는 주소로 사용할 수 없다. 왜냐하면 모두 0인 것은 아무것도 지칭하지 않는 다는 의미(네트워크 주소)이고 모두 1인 것은 브로드케스트 값(브로드 캐스트 주소)으로 쓰이기 때문이다.

호스트 ID로 쓸 수 없는 2개의 숫자.

즉, 호스트 ID로는 256 - 2 로 254가지의 주소만 호스트 ID로 쓰일 수 있다. 

위와 같이 총 50대의 컴퓨터에 IP를 각각 할당해야 하는 상황에서 C클래스 IP주소로 192.168.10.0 /24라는 IP주소를 사용한다면 마지막 한 옥텟만을 HOST ID에 쓸수 있으므로 총 HOST ID의 갯수는 256개를 사용할 수 있을것이다. 하지만 컴퓨터가 50대뿐이므로 이는 자원의 낭비로 이어지고 이러한 상황에서 Subneting을 사용할 수 있는것이다. 256을 절반으로 두번 나누어 64개의 IP만을 사용하고 남는 IP주소는 다른 네트워크에 할당해 좀더 효율적으로 IP주소를 사용하도록 만드는 것이 바로 서브네팅(Subneting)입니다.

 

한편 IP주소 자원의 낭비를 막기 위해 C클래스를 사용한다 하더라도 IP주소의 낭비가 있을수 있음. 그래서 이것을 더 잘게 자른것이 서브넷팅이다(C class는 254개의 주소를 쓸수 있음. 물론 서브넷팅을 C클래스만 하는 것이 아닌 A, B클래스도 하지만 가장 많이 하는 것은C클래스입니다).

 

 

혼동하지 말아야 할것이 서브넷 구분 비트는 네트워크 ID에 들어간다고 하여 IP주소를 계산할 때 서브넷 구분 비트를 네트워크 ID쪽에 넣고 숫자를 계산하면 안된다는 것이다. 네트워크 ID에 속하지만 계산될때는 호스트 ID로 나머지 호스트 ID와 함께 계산해 준다.

Subneting방법: 256을 두개의 128로 나누기 위해 서브넷 구분 비트를 지정해 주어야 함. 서브넷 구분 비트는 항상 호스트 ID에서 가장 왼쪽에 있는 비트부터 서브넷 구분 비트로 결정됨. 두개로 나누기만 하면 되므로 우선은 한개의 비트만 서브넷 구분 비트로 주면된다. 호스트 ID비트에서 서브넷 구분 비트를 제외한 비트가 모두 0이거나 1인비트는 모두 네트워크 주소 혹은 브로드 캐스트 주소이므로 이는 호스트 ID가 될수 없다(서브넷 구분 비트는 호스트 ID비트가 아닌 네트워크 ID비트에 속함을 잊지 말자). 네트워크주소와 브로드 캐스트 주소는 실제 장비에 할당할 수 없는 주소이다!! 따라서 실제 장비에 할당할 수 있는 호스트 ID는 1~126 그리고 129~254이다.

서브네팅한 주소의 서브넷 마스크를 구해보자!

IP주소의 네트워크 ID비트는 1로 표기하고 호스트 ID비트는 0으로 표기하면 그것이 서브넷 마스크 비트이다. 이를 10진수로 변환한것이 아래 그림의 255.255.255.128이다.

서브넷 구분 비트를 한개 주었으니 프리픽스가 1개 늘어서 25가 되었다. 4번째 옥텟을 보면 확인할 수 있듯이 서브넷 구분 비트가 네트워크ID비트에 속해도 계산할 때는 호스트 ID비트로 계산한다.

이상으로 지금까지 호스트 ID가 256개인 C클래스 주소 192.168.10.0 /24를 2개의 주소인 192.168.10.0~192.168.10.127 그리고 192.168.10.128~192.168.10.255로 나누어 보았고 서브넷팅된 주소(2진수 주소)로부터 서브마스크(S/M)주소(2진수 주소)를 구하고 그 주소의 10진수 주소와 프리픽스도 확인해 본것이다!

 

 

경우 2) 이번에는 위와 같이 50대의 컴퓨터에 IP를 각각 할당해야 하는 상황에서 마찬가지로 C클래스 IP주소로 192.168.10.0 /24라는 IP주소를 사용한다고 똑같이 가정하고 다만 주워진 HOST IP의 갯수인 256개를 4개로 나눈다고 가정하고 시작해 보자. 또한 대표 네트워크 주소를 관찰해 보면 모두 짝수인것을 알수 있고 브로드 캐스트 주소를 관찰해 보면 모두 홀수인것을 확일할 수 있다.

가장 먼저 할것으로 주워진 IP주소를 2진수로 표현한다. 4개로 나누어야 하므로 서브넷 구분 비트로 2개의 비트를 준다. 2개의 비트를 서브넷 구분 비트로 주면 4개의 경우인 00, 01, 10, 11인 경우가 생기고 각각의 경우에 네트워크주소와 브로드 캐스트 주소를 제거해 준다. 그러면 남아있는, IP주소로써 사용할 수 있는 주소는 아래 그림과 같다. 

실제 서버나 PC, 라우터, 스위치와 같은 장비에 사용할 수 있는 주소는 네트워크 주소와 브로드케스트 주소를 제외한 위와 같은 범위의 주소들이 사용된다. 이제 위와 같이 64개씩 4개의 주소로 서브네팅된 주소의 서브넷 마스크를 구해보자. 결과는 아래와 같다.

 

실제 내가 할수 있어야 하는 서브네팅은 아래 두가지이다!

1. 주소를 나눌때는 항상 크기가 큰 것부터 해야 합니다. 위의 예제에서는 100이 가장 크므로 100부터 처리한다. 호스트 ID비트는 몇비트나 주어야 적당한다? 1층에서 100개의 PC가 있으므로 적어도 100개 이상의 IP주소는 생성되어야 하므로 2^7=128이므로 7비트가 적어도 필요하다.

여기서부터 IP주소의 범위를 구한다. 호스트 ID비트가 모두 0인 경우부터 모두 1인 경우까지에서 2를 빼면(모두 0인 경우와 1인경우)된다.

전체256개의 HOST ID중 절반을 차지하고 이것을 1층에 할당하게 됨

 

다음으로 2층에 IP주소를 할당해 주어야 하는데 여기서 주의할 것이 1층에 할당된 IP를 다시 할당하면 안되므로 주의한다. 2층에는 50개의 PC가 있으므로 호스트 ID비트로 6개의 비트가 필요하다(2^6=64). 즉, 2개의 서브넷 구분비트를 사용할 수 있고 00과 01은 1층에서 사용하였으므로 10부터시작한다.

 

마찬가지의 과정을 거쳐 3층도 IP를 할당해 준다.

 

주어진 네트워크 주소에서 HOST ID의 범위 구하기

마지막 오타임 192가아니라 224 여야함.

 

또다른 방법도 있지만 이방법을 권장함

 

마지막으로 정리하면 IP주소는 무한한 자원이 아닌 46억개로 유한한 자원이다. 이러한 유한한 IP자원을 효율적으로 사용하고자 실제로 서브네팅한 주소를 사용합니다.