본문 바로가기

Network/L3

서브넷 마스크 쉽게 이해하기

 

이번 문서에서는 컴퓨터 네트워크를 공부할 때 빠지지 않고 등장하는 개념인 서브넷 마스크에 대해 알아보겠습니다.

 

Subnet Mask

서브넷 마스크는 IP 주소와 비슷한 방식으로 접두어의 길이를 표시하는 방법이다. 즉 32비트 길이의 접두어 길이만큼의 1로 시작해서, 나머지는 0으로 채우는 것이고, 4개의 숫자 형태로 표현하는 것이다.

- 출처 : 위키백과 -

 

개념 한 줄 요약을 위해 위키백과의 설명을 빌려봤습니다만, 많이 생략되어 있어 처음 보는 사람은 이해가 어렵습니다.

저는 어떤 개념이나 기술을 공부할 때 등장한 배경, 이유, 사용 사례 등을 찾아서 공부하는 편인데요, 서브넷 마스크는 어떤 이유로 등장했고, 어디에 사용되는지 알아보겠습니다.

 

그러기 위해서는 IP 주소에 대한 이해가 필요합니다.

IP Address

IP 주소(영어: Internet Protocol address, IP address, 표준어: 인터넷 규약주소)는 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다.

- 출처 : 위키백과 -

 

서브넷 마스크는 처음 들어보시는 분이라도 IP 주소는 한 번쯤 들어보셨을 겁니다.

가정집의 와이파이 공유기 비밀번호를 설정하기 위해서 웹 브라우저 주소창에 192.168.0.1 이라는 IP 주소를 입력해 보신 경험이 있으신가요? 이때 입력한 192.168.0.1이라는 숫자가 바로 IP 주소입니다. 인터넷에서 컴퓨터들이 서로를 식별하기 위한 고유한 숫자이죠.

 

IPv4 주소 체계

IPv4 의 주소 체계는 위 사진과 같습니다.

4개의 구간으로 나누어져 있으며, 각 구간을 . 문자로 구분합니다. 이렇게 구분한 각 구간을 옥텟(Octet) 이라고 부릅니다. 

2진수 비트 8개가 모여있기 때문입니다.

(참고로 Octet은 숫자 8을 의미하는 라틴어 octo 에서 유래되었습니다. 10월을 영어로 표기한 October, 다리 8개 달린 문어 Octopus도 같은 맥락입니다.)

표기할때는 각 옥텟의 2진수들을 10진수로 변환해 표기합니다. 따라서 각 옥텟은 2^8까지의 값만 가질 수 있죠. 즉 0~255까지의 값만 가질 수 있습니다.

 

이 IPv4주소는 네트워크 주소호스트 주소가 나뉘어져 있습니다. 

가락마을 아파트

제가 사는 아파트의 동이 1501동, 호수가 103호라고 치면, 1501동이 네트워크 주소, 103호가 호스트 주소인 셈이지요.

1501동에는 여러 세대가 살고 있는 것 처럼, 한 네트워크에도 여러 호스트들이 속할 수 있습니다.

 

 

그런데 이 IPv4 주소는 유한합니다.

각 옥텟 당 8비트, 4옥텟이니 총 32비트로 구성되어있는데 그렇게 되면 최대 2^32개, 즉 약 43억개의 주소만 가질 수 있습니다.

 

IPv4 주소 체계가 제정될 당시인 1980년대에는 당장 사용할 주소가 고갈되진 않았겠지만, 곧 고갈 될 예정임은 불 보듯 뻔했습니다.

그래서 국제 인터넷 표준화 기구인 IETF 는 IPv4 주소 고갈 사태를 막기 위한 해결책을 강구했습니다.

 

 

클래스풀 네트워크와 클래스리스 네트워크

초기에 IPv4 주소는 클래스풀 방식으로 할당했습니다.

클래스풀 네트워크, 출처 : https://zigispace.net/m/1255

클래스풀 네트워크는 IPv4 주소를 규격화된 크기로 나누어 구분해 할당했습니다.

그래서 숫자만 보고 어느 클래스의 IP주소인지 알 수 있었지요. 하지만 이렇게 하다 보니 할당받은 IP를 사용하지 않아 IP 주소가 낭비되는 문제가 생겼습니다. 반대로 IP 주소가 필요한데, 다른 곳에서 사용하고 있는 IP 주소라 사용하지 못하는 상황도 생겼습니다.

 

이해하기 쉽게 실생활의 예시를 들어보겠습니다.

제가 위에서 1501동 103호에 살고 있다고 언급했습니다. 다른 건설사에서 아파트를 지으려고 하는데, 그 아파트에는 1501동을 지을 수 없습니다. 이미 제가 살고있는 아파트에서 1501 이라는 숫자를 사용하고 있기 때문입니다. 둘은 전혀 다른 별개의 아파트인데도 말이죠.

 

이런 IPv4 주소 고갈 사태를 예방하기 위해 3가지의 보존/전환 전략이 생겼습니다.

첫번째는 CIDR(Classless Inter-Domain Routing) 기반의 주소 체계, 두 번째는 NAT와 사설 IP 주소, 세 번째는 IPv6 입니다.  

본 글은 서브넷마스크를 이해하기 위해 쓰였으므로, 두 번째와 세 번째 대책은 추후 문서에서 알아보겠습니다.

 

CIDR(Classless Inter-Domain Routing)

기존 클래스풀 네트워크의 한계를 극복하기 위해 클래스리스 기반의 주소 체계가 도입되었습니다.

말 그대로 , 클래스 없이(less) IP주소를 할당하는 방식입니다. 

클래스풀 네트워크에서는 클래스별로 네트워크 주소와 호스트 주소의 범위가 고정되어 있었지만, 클래스리스 네트워크에서는 그 범위가 고정되어 있지 않습니다. 

따라서 IP주소 상의 네트워크 부분과 호스트 부분을 구분하는 구분자가 필요한데, 이게 바로 본 글의 핵심인 서브넷 마스크(Subnet Mask) 입니다.

 

도로명주소 이정표

 



쉬운 이해를 위해 도로명 주소 이정표를 예시로 들어보겠습니다. 

어느 기관에 서류를 제출하기 위해 주소를 작성하는데, 과정로 1627 과 같이 작성한다면 읽는 사람은 어떻게 생각할까요?

16번길은 도로명이고, 27은 건물 번호를 의미하지만, 읽는 사람은 그대로 이해하지 못할 것 입니다.

 

그래서 어디까지가 도로명이고 어디까지가 건물 번호인지를 번길 이라는 단어로 구분하고 있죠.

서브넷 마스크도 이와 마찬가지로, IP 주소 사이의 네트워크 부분과 호스트 부분을 구분하는 구분자 입니다.

 

Subnet Mask 구성

서브넷 마스크의 2진수 숫자 1은 네트워크 주소, 0은 호스트 주소로 표시됩니다. 

보통은 사람이 이해하기 편하게 10진수를 사용해 255.255.255.0 과 같이 표기합니다. 

8비트의 2진수 11111111을 10진수로 변환하면 255가 되고, 255는 네트워크 부분, 0 은 호스트 부분으로 구분됩니다.

네트워크 주소 구하기

 

위와 같이 호스트 주소와 서브넷 마스크를 각각 2진수로 변환하여 서로 AND 연산을 수행하면 해당 호스트가 속해있는 네트워크의 주소를 구할 수 있습니다.

서브넷 마스크를 표현할때는 크게 두가지의 방법을 사용합니다. 비트 단위로 표현하는 방법과, 10진수로 표현하는 방법입니다.

 

비트 단위 표현법은 서브넷 마스크의 1부분이 연속되어있는 횟수 만큼을 표기하는 방법입니다.

위 예제의 경우 서브넷마스크의 1이 24번 연속됩니다. 따라서 표기할때는 /24 로 표기합니다. 이는 클래스풀 네트워크의 C 클래스에 해당하는 범위이며,  이 네트워크에는 254개의 호스트가 할당될 수 있습니다.

 

네트워크 매니저는 서브넷의 범위를 최적으로 설정해야 합니다. 그러기 위해서는 네트워크에 호스트가 얼마나 할당될 수 있는지 계산할 수 있어야 합니다.

 

유효 IP 범위 구하기

IPv4 주소는 32비트로 구성되어 있습니다. 서브넷 마스크가 /24라면 네트워크 부분이 24비트이고 호스트 부분은 나머지 8비트라는 의미이므로, 32(전체 비트 수) - 24(네트워크 부분) = 8(호스트 부분) 입니다.

따라서 호스트 주소의 개수는 2^8 = 256 개 이고, 0~255 개의 IP가 할당될 수 있습니다.

 

즉, 192.168.0.0 ~ 192.168.0.255 까지의 범위입니다.

여기서 192.168.0.0 은 네트워크 주소, 192.168.0.255 는 해당 네트워크의 브로드캐스트 주소를 의미하므로 이 2개를 뺀 192.168.0.1 ~ 192.168.0.254 가 이 네트워크의 유효 IP 범위입니다.

 

 

본 글에서는 IP 주소와 클래스리스 네트워크, 서브넷 마스크를 통해 IPv4 주소 고갈 해결책의 초기 대책을 알아봤습니다.

다음 글에서는 중기 대책인 NAT와 DHCP, 이후에는 IPv6 에 대해 알아보겠습니다.

 

'Network > L3' 카테고리의 다른 글

MTU, 진짜 1500 Byte 일까?  (0) 2024.08.14
L3 단의 부하분산, ECMP와 UCMP  (0) 2024.08.11