[CS] 네트워크 4. 서브네팅

최민길(Gale)·2023년 8월 16일
1

CS 탐구

목록 보기
13/13

안녕하세요 이번 시간에는 서브네팅에 대해 포스팅해보도록 하겠습니다.

우선 서브넷이 나타나게 된 IP 주소에 대해 먼저 알아보겠습니다. IP 주소란 컴퓨터 네트워크에서 장치들이 서로 통신하기 위해 노드를 식별하기 위한 특수한 번호입니다. 발신지와 송신지를 명시하고 데이터를 네트워크 상 원하는 곳으로 전달할 수 있습니다.

IP 주소를 할당받기 위해 DHCP 프로토콜을 사용합니다. DHCP란 네트워크 기기가 IP 주소, 서브넷 마스크 등과 같은 네트워크 구성 정보를 자동으로 할당받을 수 있는 프로토콜을 의미합니다. DHCP를 이용하여 자동으로 IP 주소를 할당하는 방식을 동적 할당 방식이라고 하며 네트워크 장치가 네트워크에 연결되면 DHCP 서버가 사용 가능한 IP 주소 풀에서 IP 주소를 동적으로 할당합니다. 반면 DHCP를 사용하지 않고 수동으로 장치에 IP 주소를 고정적으로 할당하는 방식을 고정 할당 방식이라고 합니다.

사람이 일일히 IP 주소를 입력하는 것은 어렵기 때문에 도메인 네임을 이용하여 숫자로 구성한 IP 주소를 사람이 기억하기 쉽도록 이름을 부여합니다. 이 때 DNS라는 호스트의 도메인 네임을 IP 주소로 변환해주는 시스템을 사용하여 DNS 서버에 도메인 네임을 요청하면 IP 주소를 반환합니다.

IP 주소는 여러 클래스를 가지고 있습니다. 첫 번째 바이트 중 첫 번째 비트가 0으로 시작하는 주소를 A 클래스, 앞선 두 비트가 10으로 시작하는 주소를 B 클래스, 이런 식으로 앞선 비트에 1이 추가되는 수에 따라 클래스가 나뉘게 됩니다. 즉 A 클래스의 경우 1.0.0.0 ~ 127.255.255.255 가 가질 수 있는 네트워크의 범위입니다. (예약된 IP 주소 제외)

서브넷이란 호스트 주소 중 일부를 서브넷의 네트워크 주소로 사용하여 네트워크를 분할하는 기법입니다. 브로드캐스트의 크기를 작게 하고 주소를 절약하며 라우팅 정보의 크기를 감소하기 위해 사용합니다.

서브넷 마스크란 IP 주소를 네트워크 주소와 호스트 주소로 분리하는데 사용되며 서브넷 마스크와 IP 주소를 AND 연산하여 네트워크 주소를 분리합니다. 서브넷 마스크는 IP 주소의 클래스에 따라 다른 값이 할당됩니다. A 클래스의 경우 255.x.x.x, B 클래스의 경우 255.255.x.x, C 클래스의 경우 255.255.255.x의 형태로 나타납니다.

서브넷과 서브넷 마스크는 비트 단위로 연산을 처리합니다. 서브넷 개수는 서브넷 마스크를 2진수로 했을 때 변경 가능한 블록의 1의 개수입니다. 서브넷 마스크의 맨 뒤 블록의 1의 개수는 앞에서부터 연속적으로 채워지기 때문에 이 값이 곧 서브넷 개수입니다. 호스트 주소는 서브넷 마스크를 2진수로 했을 때 변경 가능한 블록의 0에 해당하는 부분이며, 호스트 개수는 서브넷 마스크를 2진수로 했을 때 변경 가능한 블록의 0의 개수를 지수로 하는 2의 거듭제곱입니다.

문제에 따라 서브넷 마스크를 구하는 방식은 다음과 같습니다.

먼저 나누고자 하는 서브넷 수를 아는 경우입니다.
1. 나누고자 하는 서브넷 수를 안다. (예 : 6개로 나누고 싶다)
2. 2의 거듭제곱 중에서 나누고자 하는 서브넷 수의 범위를 구한다 (6개는 4와 8 사이이기 때문에 최소 8개가 필요)
3. IP 주소의 클래스에 따라 서브넷 마스크의 고정되지 않은 부분의 앞부분부터 구한 범위의 2의 거듭제곱의 지수만큼을 1로 고정한다. (예 : C 클래스의 경우 255.255.255.x의 서브넷 마스크에서 8의 지수가 3이기 때문에 255.255.255.111000000으로 설정)
4. 2진수를 10진수로 변환한다. (255.255.255.224)

다음으로 호스트 수가 주어졌을 때 분할할 수 있는 최대 서브넷 수를 구하는 경우입니다.
1. 호스트 수가 곧 나누고자 하는 서브넷 수이기 때문에 나누고자 하는 서브넷 수를 아는 경우와 같은 방식으로 풀이합니다.
2. 이 때 구한 이진수의 1의 개수가 최대 서브넷 수가 됩니다.

다음으로 각 서브넷이 적어도 몇 개의 호스트를 필요로 할 때의 서브넷 마스크를 구하는 경우입니다.
1. 호스트 수를 이진수로 변환한다. (예 : 40 --> 101000)
2. 변환한 이진수의 자릿수를 체크한다. (예 : 40의 경우 6자리)
3. 위에서 얻은 숫자만큼 변경 가능한 블록의 서브넷 마스크를 뒤에서부터 0으로 채운다. (예 : C 클래스의 경우 255.255.255.x의 서브넷 마스크에서 6자리만큼 뒤에 0을 추가한 255.255.255.11000000)
4. 얻은 숫자를 10진수로 변환한다. (255.255.255.192)

다음으로 최대 사용 가능한 호스트 수를 구하는 경우입니다.
1. 서브넷 마스크의 변경 가능한 블록의 1의 개수를 구한다. (예 : 255.255.255.240의 경우 11110000, 즉 4개)
2. 변경 가능한 블록의 0의 개수만큼 지수로 2의 거듭제곱을 진행한다. (예 : 11110000의 경우 2^4 = 26)
3. 따라서 최대 16개가 가능하며, 이보다 작은 값 중 최댓값을 고른다.

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

2개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글 감사합니다.

1개의 답글