본문 바로가기
computer science/네트워크

[네트워크] 서브넷 마스크와 서브네팅

by 박연호의 개발 블로그 2020. 1. 31.

 

이번 시간에는 서브넷 마스크와 서브네팅, 브로드 캐스트 주소에 대해 공부해 보겠습니다.

 

저는 네트워크 관리자를 공부하는 입장은 아니지만 이쪽(?)부분을 공부하니 좀 흥미롭더라구요. "공부를 하면서 네트워크가 이렇게 구성되구나~" 어느정도 감을 잡을 수 있었습니다. 사실상 네트워크에 대해 아예 모르는 상태라면 내용을 이해하기 힘들 수 있겠지만 최대한 예를 들어가며 쉽게 설명해 보겠습니다.


서브넷(Sub Network)

앞에 sub라는 말은 "~부분"이라는 의미로 많이 사용되죠 ?서브넷이란 말은 하나의 큰 네트워크를 논리적으로 분리하여  만든 부분 네트워크를 의미 합니다. 결국 이번시간에 공부할 내용을 "왜 네트워크를 분리해야 하고, 어떻게 분리하냐? 입니다. 사실 분리해야 하는 이유는 많습니다.

 

1. 예를 들어, A기업이 xxx.xxx.xxx.0 이라는 IP를 가지고 있다고 생각해 봅시다. 그렇다면 이 기업은 xxx.xxx.xxx.0 ~ xxx.xxx.xxx.255 ,총 256개의 IP를 사용할 수 있습니다(0부터 세었기 때문에 256개)

근데 만약에 A기업은 100개만 필요하다고 하면 나머지 156개는 낭비가 되는 거죠. IP가 부족한 마당에 낭비가 되면 안되죠.

 

2. 먼저 브로드 캐스트는 같은 네트워크에 속해 있는 모든 컴퓨터(장비)를 대상으로 패킷을 전송하는 1:N 통신방식 입니다. 예를 들어 A네트워크에 A-1 컴퓨터가 패킷을 보내면(통신을 하면) 모든 컴퓨터가 이 패킷을 받아야 하죠. 만약 A네트워크에 수많은 컴퓨터가 있고 각각 패킷을 보낸다면 네트워크가 복잡해 지겠죠 ? 한편으론 내가 받을 필요없는 패킷까지 받아야 하는 경우도 생기게 됩니다.

 

사실 네트워크를 분리해야 하는 경우를 위의 2가지의 예시 말고도 다양합니다.

 

1. 지역적인 한계성이 있을 경우

2. 네트워크 환경을 구성하려는 물리적인 하부 구조에 제한 있을 경우

3. 케이블 길이 등의 제한이 있을 경우

4. 특정 지역에 한정된 트래픽으로 제한하고자 할 경우

5. 보안상의 이유로 서로 공유할 수 없을 경우

 


서브넷 마스크(Subnet Mask)

위에서 우리는 하나의 네트워크를 여러개의 네트워크로 분리한다고 하였습니다. 그렇다면 어떻게 A IP와 B IP가 같은 네트워크에 있는지 알 수 있을까요 ? 바로 서브넷 마스크를 사용하여 알 수 있습니다.

사실 서브넷 마스크는 정확히 IP를 어디까지 네트워크 주소고 어디부터 호스트 주소인지 판단하기 위해 사용합니다. 기본적으로 A 클래스는 255.0.0.0, B클래스는 255.255.0.0, C클래스는 255.255.255.0을 사용합니다.

 

먼저 내 컴퓨터의 IP주소가 201.132.120.10이고, 서브넷 마스크가 255.255.255.0이라고 가정해 봅시다.

이를 bit단위로 표혀하면

201.132.120.10 -> 11001001 10000100 01111000 01100100

255.255.255.0 -> 11111111 11111111 11111111 00000000

 

1. 네트워크 주소 : IP와 서브넷 마스크를 논리곱합니다.

11001001 10000100 01111000 01100100

11111111 11111111 11111111 00000000

-----------------------------------

11001001 10000100 01111000 00000000  -> 201.132.120.0, 이 값이 네트워크 주소 입니다. 

 

2. 브로드 캐스트 주소 : 얻어진 네트워크 주소에서 서브넷 마스크의 0으로 된 비트자리를 모두 1로 바꾸어 줍니다.

11001001 10000100 01111000 00000000 -> 네트워크 주소, 마지막 8개 비트(서브넷에서 0에 해당하는 위치)를 1로 바꿉니다.

11001001 10000100 01111000 11111111 -> 이것이 브로드 캐스트 주소, 201.132.120.255

 

※ 여기서 중요한 점은, 네트워크 주소와 브로드 캐스트 주소는 컴퓨터가 자신의 IP로 사용할 수 없습니다.

 

그리고  201.132.120.10/24 처럼 IP주소 뒤에 /24 이 붙어있는 경우는 Prefix(접두어)로 서브넷 마스크 1의 bit수를 의미합니다.

그러므로 /24인 경우는 11111111 11111111 11111111 00000000이 됩니다.


서브네팅(Sub Netting)

사실 위에서 배운 개념 모두 서브네팅을 공부하기 위한 사전 과정입니다. 이제부터 하나의 네트워크를 여러개의 네트워크로 분리해 봅시다. 

 

먼저 위의 사진을 이해해야 하는데요, 우리는 201.132.120.0 라는 IP를 받았고, 서브넷 마스크는 255.255.255.0 입니다. 여기서 호스트 주소와 네트워크 주소를 구해보겠습니다.

 

201.132.120.0 -> 11001001 10000100 01111000 00000000

 

1001001 10000100 01111000 00000000

11111111 11111111 11111111 00000000

------------------------------------------------------

1001001 10000100 01111000 00000000 -> 201.132.120.0 입니다.

 

201.132.120.0

 

파란색 부분이 네트워크 주소고 빨간색 부분이 호스트 주소 입니다. 이를 다시 설명하면 IP에서 201.132.120.x인 값은 모두 같은 네트워크에 있다는 의미 입니다. 그리고 호스트 주소인 빨간 부분은 네트워크주소(201.132.120.0)와 브로드 캐스트 주소(201.132.120.255)를 제외한 그 사이 값이 됩니다. 총 254개가 되겠네요.

 

 

1. 그렇다면 만약 서브넷 마스크가 /25인 경우는 어떨까요 ?

 

1001001 10000100 01111000 00000000

11111111 11111111 11111111 10000000

------------------------------------------

1001001 10000100 01111000 10000000 -> 201.132.120.128, 네트워크 주소를 가질 것입니다(subNet Numver에는 0과 1모두 들어갈 수 있습니다.)

 

그렇다면 여기서 기존의 호스트 주소(00000000)에서 왼쪽 가장 첫번째 bit를 네트워크 주소에서 가져 갔습니다(subnet Number)

그렇다면 호스트 주소를 표현할 수 있는 방법은 2^7으로 128가지가 되겠네요. 과연 그럴까요 ?사실 그렇지 않습니다.

 

위의 subnet Number가 0일때 1을때를 나눠서 생각해야 하고, 각각의 경우 호스트 주소가 128개씩 나오는 것입니다.

subnet Number 0인 경우 : 00000000 ~ 011111111 -> 0 ~ 127 : 128가지 

subnet Number 1인 경우  : 10000000 ~ 11111111    -> 128 ~ 255 : 128가지

 

결국에는 호스트 주소에 부여할 수 있는 IP는 [0~127] , [128 ~ 255] 두가지 경우가 생겼고, 네트워크 주소는 다음과 같이 두가지로 분리되었네요.

 

201.132.120.0(1001001 10000100 01111000 0xxxxxxx)  -> 201.132.120.0 ~ 201.132.120.127

201.132.120.128(1001001 10000100 01111000 1xxxxxxx ) -> 201.132.120.128 ~ 201.132.120.255 

 

-> 2개의 네트워크, 각 네트워크에는 128개의 IP할당 가능

 

2. 다른 예로 서브넷 마스크가 /26인 경우는 어떨까요 ?

 

생성된 네트워크가 각각의 네트워크에 부여할 수 있는 호스트 주소를 계산해보면 다음과 같습니다.

 

1001001 10000100 01111000 00xxxxxx -> 201.132.120.1 ~ 201.132.120.63

1001001 10000100 01111000 01xxxxxx -> 201.132.120.64 ~ 201.132.120.127

1001001 10000100 01111000 10xxxxxx -> 201.132.120.128 ~ 201.132.120.191

1001001 10000100 01111000 11xxxxxx  -> 201.132.120.192 ~ 201.132.120.255

 

-> 4개의 네트워크, 각 네트워크에는 64개의 IP할당 가능

 

※ 주의할 점은 각각의 호스트에서 첫번째 IP와 마지막 IP는 각각 네트워크 주소, 브로드캐스트 주소로 사용되기 떄문에 실질적으로 장치에 사용할 수 없는 IP입니다.

 

근데 각 서브네팅을 하면서 생성된 네트워크가 네트워크에 부여할 수 있는 IP를 보면 뭔가 규칙성을 가집니다.

 

/25 : 2개의 네트워크, 각 네트워크에는 128개의 IP할당 가능

/26 : 4개의 네트워크, 각 네트워크에는 64개의 IP할당 가능

 

-> 결과적으로 서브네팅을 하기위해 호스트 주소의 bit를 하나씩 가져올 때 마다 네트워크는 2배로 증가하고 각 네트워크의 호스트 주소는 2배로 감소하게 됩니다. 

 

/25와 /26인 경우를 보면 각 126, 62로 되어있는데 저는 128, 64개로 하였습니다. 표에서는 실제 "Usable Hosts"로 표현하였기 때문에 차이가 있습니다. 가지고 있는 IP는 128, 64가 맞지만 첫번쨰 IP와 마지막 IP는 사용하지 않기 때문에 -2값을 해주었습니다.

 

현재 도서관에서 JBNU와이파이를 사용하고 있는 저의 컴퓨터의 정보입니다.

IP는 10.00.32.19 이고 서브넷 마스크는 0xffffff00인데 10진수로 표현하면 255.255.255.0이 되겠네요.

IP의 첫번째 옥텟값이 1~127 사이이기 때문에 서브넷 마스크가 A클래스의 기본 값인 255.0.0.0으로 생각했습니다. 근데 255.255.255.0 이더군요. 그래서 오픈톡방에 물어보니, 바뀔수도 있다 하더라구요 왜 저 값인지는 모르겠지만 어떤 의미가 있겠죠. 

 

일단 현재 저의 노트북이 속해있는(?) 네트워크 주소는 10.99.32.0입니다. 그리고 서브넷 마스크의 마지막 0이기 때문에 별다른 서브네팅을 하지 않은 것 같습니다. 때문에 브로드캐스트 주소값은 255가 되겠습니다. 


브로드 캐스트 주소

먼저 브로드 캐스트란 같은 네트워크 상의 모든 장치에게 데이터를 전송한다. 그렇기 때문에 받기 싫더라도 무조건 데이터를 받아야 한다. 또한 수신한 데이터는 CPU에게 보내게 되므로 CPU사용량이 증가하게 된다. 

 여기서 브로드 캐스트 주소는 브로드 캐스트를 하고 싶을 때 사용되는 전용 IP주소이다. 그렇기 때문에 전체 네트워크에 데이터를 전송할 때는 호스트 주소에 255를 설정하면 된다. 이렇게 하면 모든 장치에게 데이터를 전송하게 된다.

 앞에서 각 호스트의 가장 큰 값(호스트 주소가 모두 1로 채워진 값)은 장치의 IP로 사용할 수 없는데 이런 이유때문이다.


 

 

위의 경우를 한번 생각해 봅시다. 서브넷 마스크는 /26이며 따라서 4개의 네트워크가 생겼습니다. 같은 네트워크 상에서 통신을 하기 위해서는 스위치를 거치면 되지만 다른 네트워크에 있는 장치와 통신을 하기 위해서는 라우터를 거쳐야 합니다.

 

예를 들어 192.168.1.12와 192.168.1.15 장치가 통신을 하려면 서로 같은 네트워크 안에 있기 때문에 스위치를 통해 통신할 수 있지만 만약 192.168.1.12와 192.169.1.165 처럼 서로 다른 네트워크에 있는 경우라면 라우터를 통해 통신을 해야 한다.