인터넷 계층의 IP 프로토콜은 IP 주소를 사용하여 호스트나 네트워크 장비를 식별합니다. 인터넷에 접속한 컴퓨터와 라우터에 고유한 IP 주소를 할당하고, 그 IP 주소를 사용해서 컴퓨터를 특정하거나 통신 상대방으로 지정합니다.
따라서 인터넷에 연결된 모든 컴퓨터나 라우터의 IP 주소는 유일해야 합니다.
현재 IP 프로토콜에서는 IPv4의 주소 쳬계를 사용하고 있고
향후에는 모든 IP 주소가 IPv6로 대체될 것으로 보고 있습니다.
IPv4의 IP 주소는 32비트 이진 수 32자리로 구성되어 있습니다.
8비트를 십진수로 변환하면 0~255 사이의 값을 갖기 때문에 IPv4에서는 256 이상의 값을 갖는 IP 주소는 존재하지 않습니다. IPv4로 할당할 수 있는 IP주소의 개수는 2의 32승인 약43억 개 입니다.
참고로 IPv6는 128비트로 구성되어 2의 128승, 약 304간 개의 IP주소를 사용할 수 있습니다.
IP 주소는 어느 네트워크의 어느 호스트라는 것을 식별하는 주소입니다. 따라서 IP 주소는 호스트가 속한 네트워크 주소인 네트워크 부와 호스트 주소인 호스트 부 로 구성됩니다. 즉, 네트워크 부는 어떤 네트워크 인지를 나타내 다른 네트워크와 구분하는 역할을 하고, 호스트 부는 해당 네트워크의 어느 호스트인지를 나타내 다른 호스트와 구분하는 역할을 합니다. 여기서 호스트는 컴퓨터뿐만이 아니라 IP 주소가 할당되는 라우터를 포함합니다.
IP 주소의 클래스는 클래스 A, 클래스 B, 클래스 C 3가지로 나눌 수 있습니다.
A 클래스는 IP 주소 32비트 중 앞 8비트를 네트워크 부로, 다음 24비트를 호스트 부로 나눈 것입니다. 네트워크 부의 첫 비트는 클래스 A 식별 비트인 '0'이 할당되기 때문에 00000000 ~ 01111111 의 번호가 네트워크 부로 사용됩니다. 이를 십진수로 표기하면 클래스 A의 네트워크 부는 0 ~ 127의 번호가 할당됩니다.
B 클래스는 IP주소 32비트 중 앞 16비트를 네트워크 부로, 다음 16비트를 호스트 부로 나눈 것입니다. 네트워크 부의 맨 앞 2비트는 클래스 B의 식별 비트인 '10'으로 할당되기 때문에 10000000 ~ 10111111의 번호가 네트워크 부의 첫 8비트로 사용됩니다. 네트워크 부 16비트를 십진수로 표기하면 클래스 B의 네트워크 부는 128.0 ~ 191.255 번호가 할당됩니다.
C 클래스는 IP 주소 32비트 중 앞 24비트를 네트워크 부로, 다음 8비트를 호스트 부로 나눈 것입니다. 네트워크 부의 맨 앞 3비트는 클래스 C의 식별 비트인 '110'으로 할당되기 때문에 11000000 ~ 11011111의 번호가 네트워크 부의 첫 8비트로 사용됩니다. 네트워크 부 24비트를 십진수로 표기하면 클래스 C의 네트워크 부는 192.0.0 ~ 223.255.255 번호가 할당됩니다.
예를들어 IP 주소 203.179.33.13는 첫 8비트의 십진수 값이 203이므로 클래스 C에 속합니다. 따라서 203.19.33이 네트워크 부, 13이 호스트부가 됩니다.
C클래스 기준으로 우리는 1 ~ 254까지의 호스트를 사용할 수 있는데 이는
클래스를 불문하고 IP 주소 중 호스트 부의 모든 비트가 0인 번호는 네트워크 주소로, 모든 비트가 1인 번호는 브로드캐스트 주소라는 특수 목적으로 사용하기 때문에 호스트와 라우터에는 할당하지 않습니다.
네트워크 주소는 전체 네트워크에서 작은 네트워크를 식별할 때 사용되고, 호스트 부가 십진수로 0이면 그 네트워크를 대표하는 주소가 됩니다.
브로드캐스트 주소는 하나의 네트워크에 있는 모든 호스트에 동시에 데이터를 보낼 때 사용되는 전용 IP 주소를 의미합니다.
서브넷 마스크가 등장하게 된 이유를 알려면 먼저 서브넷팅과 서브넷을 알아야 합니다. 클래스 A를 사용할 경우 한 개의 네트워크 당 약 1,677만 대의 호스트를 연결할 수 있고 클래스 B를 사용할 경우 한 개의 네트워크 당 약 6만 5천대의 호스트를 연결할 수 있습니다. 하지만 실제로 이렇게 많은 호스트를 하나의 네트워크에 연결하는 경우는 거의 없기 때문에 전체 IP주소의 75%를 차지하는 클래스 A와 클래스 B에서 많은 수의 IP 주소가 사용되지 않고 낭비됩니다.
IP 주소를 효율적으로 활용하기 위해서 클래스 A와 B 같은 대규모 네트워크를 좀 더 작은 네트워크로 분할하는 것을 서브넷팅이라 하고, 분할된 네트워크를 서브넷이라고 합니다.
즉 부족한 IP 주소를 확장해서 사용하기 위해 서브넷팅을 합니다. 서브넷팅을 통해 호스트 부가 서브넷 부로 변경이되고 네트워크 부가 확장됩니다. 따라서 클래스 A의 IP 주소를 서브넷팅하면 네트워크 부가 변경 변경되는데 IP주소만으로 변경된 네트워크 부가 어디까지인지 알 수가 없습니다. 아래와 같이 서브넷팅을 한다고해서 IP 주소가 변경되지 않기 때문입니다.
IP 주소만으로 네트워크 부와 호스트 부의 경계를 알 수 있도록 만든 클래스가 서브넷팅으로 인해 그 의미를 잃게 된 것입니다.
따라서 IP 주소를 서브넷팅하는 경우 IP 주소와 별도로 어디까지가 네트워크 부이고 어디까지가 호스트 부인지 구별할 수 있는 식별자가 필요한데, 이 식별자를 서브넷 마스크라고 합니다.
서브넷 마스크는 IP 주소의 네트워크 부와 호스트 부의 경계를 식별하기 위해 만든 숫자입니다. 서브넷 마스크는 IP 주소의 32비트에 대응한 32비트로 구성되어 있습니다. 즉, 서브넷 마스크는 IP 주소처럼 32개의 0 또는 1로 구성된 값입니다.
IP 주소의 비트가 네트워크 부이면 이 비트에 대응하는 서브넷 마스크의 비트는 1이 되고, IP 주소의 비트가 호스트 부이면 서브넷 마스크의 비트는 0이 됩니다. 이러한 방법으로 클래스에 구애받지 않고 IP 주소의 네트워크부를 식별할 수 있습니다.
IP 주소 0.255.0.1 를 예시로 들어보겠습니다. 먼저 네트워크 부의 첫번째 수가 0 이므로 0 ~ 127의 번호가 할당되는 A 클래스 입니다.
하지만 0.255.0.1 A 클래스인 이 주소가 서브넷팅을 했는지 안했는지 여부는 확인 할 수 없습니다. 이때 서브넷마스크를 확인하면 됩니다.
서브넷팅을 안했다면 서브넷 마스크가 255.0.0.0 일 것이고
서브넷팅을 했다면 서브넷 마스크가 255.255.0.0 일 것입니다.
즉 먼저 IP 주소를 보고 클래스를 파악하고 해당 주소가 서브넷팅을 했는지 여부는 서브넷 마스크로 확인하면 됩니다.