Subnetting, Subnet Mask에 대해 알아보자
subnet에 대해 자세히 알아보기 전에 먼저 IPv4 주소에 대해 알아보자
- IPv4는 32Bits 길이의 주소 체계
- 실제 IP Address는 2진수로 표기되나 사람이 이해하기 어려워 10진수로 나타내는 표기법을 사용한다.
- 8 bits 가 전부 1이라고 가정하였을 때 255라는 숫자가 나오므로, IP Address는 하나의 octet 당 0~255까지의 숫자 범위를 가진다.
- 네트워크의 주소를 표현하기 위한 network bits + 디바이스들을 표현하기 위한 host bits로 구분된다.
- 네트워크 주소와 호스트 주소를 구분하기 위해 5가지의 클래스로 나뉘는데 대표적으로 밑의 그림과 같은 A,B,C 클래스를 쓴다.
- 아래에서 더 자세히 설명하겠지만, 이렇게 IP의 클래스를 나눈 것도 subnet mask를 사용한 것이다. (Default Subnet Mask)
이제 대규모 전산실을 운영하고 있는 회사에서 하나의 네트워크에 하나의 라우터를 가지고 있다고 가정해보자.
IP Address를 이용하여 네트워크 내의 하나의 컴퓨터가 다른 컴퓨터에 데이터를 보내려고 한다.
그림에서 보는 것 처럼 타겟하는 곳에 데이터를 보내려면 디바이스 전체에 브로드캐스팅 하게 되고, 이는 네트워크 속도를 저하시키고, 데이터의 전송이 느려진다. 이를 개선하기 위해, 네트워크를 아래의 그림 처럼 여러 개로 쪼개는 것을 Subnetting 이라고 한다.
그렇다면 Subnetting은 각 Subnet의 주소가 구분이 되어있어야 원활히 작동할텐데 어떤 방식으로 나누는 것일까?
이를 이해하기 위해서 먼저 Subnet Mask를 알아보자.
Subnet Mask는 필요한 네트워크 주소만 호스트 IP로 할당할 수 있게 나누어 네트워크 낭비를 방지하기 위한 것으로,
IP 주소와 같은 형식으로 표현되지만 결국에는 IP 주소와 AND 연산을 위한 용도로 활용된다.
서브넷 마스크는 1과 0으로 이루어져 있으며 network ID 부분은 1, host ID 부분은 0이 연속적으로 있어야 한다.
위에서 언급했듯이 IP Address의 class 구분도 default subnet mask를 사용한 것이다. subnet mask를 표현할 때는 2가지 방법이 있는데,
1) 십진법 표기법: 198.162.30.2/255.255.255.0
2) CIDR(classes inter-domain routing) 표기법: 198.162.30.2/24
CIDR 표기법에서 24는 network ID에 쓰이는 총 bits의 개수를 말한다. class c 의 경우는 network ID를 위해 11111111.11111111.11111111 총 24의 bits가 쓰이고, 나머지 00000000 8개의 bits는 host ID를 위해 쓰인다.
이제 network를 subnet으로 쪼개는 방법을 알아보자.
subnetting을 하기 위해서는 host ID 부분의 bits를 활용해야 한다.
예를 들어보자. 어떤 회사에는 class C를 적용한 네트워크 IP 주소 205.150.65.0/24 를 가지고 있다.
그런데 회사가 커지고 컴퓨터가 늘어나면서 네트워크의 속도가 느려지기 시작했다. 회사는 subnetting을 하기로 하고,
필요한 subnet의 개수는 10개로 정하였다. 그렇다면 각각의 subnet IP 주소와 host IP 주소는 어떻게 될까?
1) 일단 Host ID에 쓰인 8개의 bits를 쪼개서 subnet ID 와 host ID로 나누어야 한다.
사용 가능한 subnet의 개수는 2^n (n은 subnet을 위해 할당된 bit의 개수)로 계산하기 때문에,
subnet 10개를 만들기 위해서는 2^4=16 즉 bit 4개가 필요하다.
따라서, network ID에 쓰이는 bits의 개수는 24 + 4 = 28bits가 된다.
이를 CIDR 표기법으로 표현해 보면, 205.150.65.0/28이 된다.
십진수로 표기된 subnet mask는 255.255.255.240(=2^7+2^6+2^5+2^4)이 되고,
이진수로 표기된 subnet mask는 11111111.11111111.11111111.11110000 이 된다.
2) 이제 subnetting을 거친 첫번째 Network ID를 구해보자.
이는 오리지널 network IP인 205.150.65.0 의 이진수인 11001101.10010110.01000001.00000000 과
이진수로 표기된 subnet mask인 11111111.11111111.11111111.11110000 의 AND 연산으로 구할 수 있다.
구해진 연산의 값을 이진수로 표기하면 11001101.10010110.01000001.00000000, 십진수로 표기하면 205.150.65.0이 된다. 결론적으로 subnetting을 적용한 network ID의 첫번째 주소는 205.150.65.0이 된다.
3) 그렇다면 하나의 subnet에 할당 가능한 host IP의 개수는 몇 개이고, 그 범위는 어떻게 될까?
하나의 subnet 당 host의 개수는 2^n (n은 host를 위해 할당된 bit의 개수) - 2 로 계산한다.
이때 -2를 하는 이유는 broadcast IP (IP의 맨 마지막 수, subnet 안의 모든 디바이스에 통신을 보낼 수 있는 IP) 와 network IP (IP의 맨 첫번째 수)를 빼주어야 하기 때문이다.
여기서는 subnet을 위한 4개의 bits를 제외하면 4개가 남기 때문에, 2^4=16-2=14개가 host IP로 사용 가능하다.
4) 자, 이제 16개의 subnet IP와 그에 할당된 host IP를 구해보자
Network IP | First Usable Host IP | Last Usable Host IP | Broadcast IP | |
1 | 205.150.65.0 | 205.150.65.1 | 205.150.65.14 | 205.150.65.15 |
2 | 205.150.65.16 | 205.150.65.17 | 205.150.65.30 | 205.150.65.31 |
... | ... | ... | ... | ... |
15 | 205.150.65.224 | 205.150.65.225 | 205.150.65.238 | 205.150.65.239 |
16 | 205.150.65.240 | 205.150.65.241 | 205.150.65.254 | 205.150.65.255 |
5) 회사는 16개의 subnet 중에 10개를 사용하면 문제는 해결된다~!
참고 자료) https://www.softwaretestinghelp.com/subnet-mask-and-network-classes/
참고 영상) https://www.youtube.com/watch?v=qulRjRFavJI
https://www.youtube.com/watch?v=s_Ntt6eTn94