앞서 클래스를 나누어 IP를 할당하는 IPv4 주소 체계를 알아보았다. 하지만 이 방식은 비효율적이다. 왜냐하면 네트워크의 크기가 작은 경우, 큰 네트워크를 필요로 하는 조직은 여러 개를 확보해야 하고 작은 네트워크가 필요한 조직의 경우 너무 많은 IP를 가져가므로 IP가 낭비된다.
이러한 비효율성을 해결하기 위해 네트워크 장치들의 수
에 따라 효율적으로 사용할 수 있는 서브넷(subnet)
이 등장하게 되었다.
서브넷
은 IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크를 뜻한다. 이러한 서브넷을 만들 때 사용되는 것이 바로 서브넷 마스크
이다. 즉, 서브넷 마스크
는 IP 주소 체계의 Network ID와 Host ID를 분리하는 역할을 한다.
예를 들어 C 클래스에서 앞의 24비트는 Network ID, 뒤의 8비트는 Host ID를 나타낸다. 이때 서브넷 마스크를 이용하면 원본 네트워크를 여러 개의 네트워크로 분리할 수 있는데, 이러한 과정을 서브넷팅(subneting)
이라고 한다.
서브넷팅을 자세히 알아보기 전에 기본 서브넷 마스크(Default Subnet mask)
에 대해 알아보자.
각 클래스마다 기본 서브넷 마스크는 위 표와 같다(D, E클래스는 사용하지 않음). 이러한 기본 서브넷 마스크를 이용하면 IP 주소의 Network ID와 Host ID를 구분할 수 있다. IP주소에 서브넷 마스크를 AND 연산하면 Network ID가 된다.
예를 들어 C클래스인 192.168.32.0 이라는 IP주소가 있다고 하자. C클래스의 기본 서브넷 마스크는 255.255.255.0 이므로 AND연산을 하면 192.168.32.0이 나오고 이것이 바로 Network ID이다. 이때 서브넷 마스크의 Network ID부분은 1이 연속적으로 있어야 하고 Host ID부분은 0이 연속적으로 있어야 한다.
예시의 IP주소를 보면 192.168.32.0/24 처럼 /24 같은 표시가 붙어있는 것을 확인할 수 있다. 이것은 서브넷 마스크의 bit 수(왼쪽에서부터 1의 개수)를 나타낸다. 즉 /24는 해당 IP의 서브넷 마스크의 왼쪽에서부터 24개가 1이라는 것을 의미한다.
그런데 애초에 IP클래스들은 Network ID를 나타내는 부분과 Host ID를 나타내는 부분이 이미 구분되어 있는데 굳이 서브넷 마스크가 필요한 이유가 무엇일까? 위에서도 설명했지만 서브넷팅을 하여 효율적인 네트워크의 사용을 위해서다.
서브넷팅
은 IP 주소 낭비를 방지하기 위해 원본 네트워크를 여러개의 서브넷으로 분리하는 과정을 뜻한다. 서브넷팅은 서브넷 마스크의 bit 수를 증가시키는 것
이라고 생각하면 이해가 편하다. 서브넷마스크의 bit수를 1씩 증가시키면 할당할 수 있는 네트워크가 2배수로 증가하고 호스트 수는 2배수로 감소한다.
예를 들어 C클래스인 192.168.32.0/24를 서브넷 마스크의 bit수를 1 증가시켜서 192.168.32.0/25로 변경한다고 하자.
192.168.32.0/24는 원래 하나의 네트워크였다. 이때 할당 가능한 host의 수는 2^8-2=254개이다.
이 때 서브넷 마스크의 bit 수를 1증가시켜서(서브넷팅) 192.168.32.0/25로 변경하게 되면 Network ID부분을 나타내는 부분이 24비트에서 25비트로 증가하고 Host ID를 나타내는 부분이 8개 비트에서 7개 비트로 줄어든다. 즉, 할당 가능한 네트워크 수가 2개로 증가하고 각 네트워크(서브넷)당 할당가능한 호스트수는 2^7-2 = 126개로 줄어든다. 또한 서브넷 마스크가 255.255.255.128로 변한 것을 확인할 수 있다.