개요
인터넷에 연결된 모든 장치는 서로 통신하기 위해 고유한 주소를 가지고 있습니다. 우리가 일상에서 웹사이트에 접속하거나, 서버와 데이터를 주고받을 수 있는 이유가 바로 IP(Internet Protocol) 주소 덕분입니다. IP 주소는 네트워크 상에서 각 장치를 식별하고, 데이터가 어디로 가야하는지를 알려주는 역할을 합니다. 쉽게 말해, 인터넷 기반의 "집주소"라고 생각하면 됩니다. IP 주소는 크게 IPv4와 IPv6 두 가지 형식으로 나뉘며, 각각의 형식과 특징은 뒤에서 자세히 살펴보겠습니다. 또한, IP 주소의 중요 개념인 클래스, 서브넷, 공인 IP와 사설 IP, NAT 등을 함께 다뤄보도록 하겠습니다.
IPv4 주소 체계
IPv4(Internet Protocol version 4)는 현재 인터넷에서 가장 보편적으로 사용되는 IP 주소 체계로, 32비트(4바이트)로 구성됩니다. 이 4바이트 주소에서 각각의 바이트(8비트)를 옥텟(Octet)이라고 표현하며, 각 옥텟은 0~255까지의 10진수로 표현됩니다. 예를 들어, 32비트의 IPv4 주소 이진수와 십진수로 표현하면 아래와 같습니다.
11000000.10101000.00000000.00000001
192.168.0.1
IP(IPv4) 주소는 인터넷 세상에서의 집 주소와 같습니다. 예를 들어, 우리가 사는 실제 주소를 보면 아래와 같이 나뉘는데, 이 주소에서 "서울특별시 강남구 선릉로 204-5"는 건물이나 단지를 나타내는 네트워크 영역이고, "105동 1204호"는 그 안에 있는 개별 세대를 나타내는 호스트 영역으로 비유할 수 있습니다.
서울특별시 강남구 선릉로 204-5, 105동 1204호
IP 주소도 이와 같은 구조를 가지고 있습니다. 하나의 IP주소는 네트워크 영역과 호스트 영역으로 나누어집니다. 예를 들어, 아래와 같은 IP주소가 있다면 "192.168.1"은 네트워크 주소(건물)를 나타내고 "15"는 호스트 주소(건물)을 나타낸다고 볼 수 있습니다. 이처럼 IP 주소는 각 장치의 고유한 위치를 지정해주며, 인터넷상에서 정확한 목적지를 찾아 데이터를 전달할 수 있게 해줍니다.
192.168.1.15
클래스와 서브넷 마스크
앞서 살펴본 것처럼 IP 주소는 네트워크 영역과 호스트 영역으로 나뉘어야 합니다. 이때, 어디까지가 네트워크 영역이고 호스트 영역인지를 식별할 수 있도록 정해놓은 것이 클래스(Class)와 서브넷 마크스(Subnet Mask)입니다. 클래스는 IP 주소의 앞부분을 기준으로 네트워크의 크기를 나누는 방식입니다. 초기 인터넷에서는 아래와 같이 네트워크의 규모에 따라 IP 주소를 세 가지 주요 클래스(A, B, C)로 구분해서 할당했습니다.
각 클래스는 IP 주소의 앞부분이 어떤 숫자로 시작하느냐에 따라 구분되며, 기본적으로 네트워크 영역과 호스트 영역이 고정되어 있습니다. 예를 들어, A 클래스는 대형 건물(대기업, 국가 기관용), B 클래스는 중형 건물(중견 기업, 기관용), C 클래스는 소형 건물(가정, 소규모 네트워크용)이라고 볼 수 있습니다. 이처럼 초기의 IP 주소는 클래스가 정해져 있었기 때문에 IP 주소의 범위를 보고 네트워크 영역과 호스트 영역을 구분할 수 있었습니다.
클래스가 IP 주소의 범위를 기준으로 네트워크 영역과 호스트 영역을 구분했다면, 서브넷 마스크는 4개의 옥텟(32비트)을 이용해 IP 주소에서 네트워크 영역과 호스트 영역을 명확히 구분할 수 있도록 해주는 마커입니다. 네트워크 영역을 1로, 호스트 영역을 0으로 표현합니다. 쉽게 말해, 클래스는 "C 클래스니까 네트워크 영역은 앞 3개의 옥텟"처럼 주소 대역에 따라 대략적인 규칙을 정한 것이고, 서브넷 마스크는 IP 주소마다 정확히 어디까지가 네트워크 영역이고 호스트 영역인지를 표시해주는 마커입니다. 예를 들어 아래 IP 주소에서, 서브넷 마스크는 "192.168.1"이 네트워크 영역, 마지막 "15"가 호스트 영역임을 나타냅니다.
IP 주소: 192.168.1.15
서브넷 마스크: 255.255.255.0
이해를 돕기 위해 이진수로 표현해보면 아래와 같습니다. 서브넷 마스크를 보면 앞의 3개 옥텟(3바이트)는 전부 1이므로 네트워크 영역임을 명시한 것이고 마지막 모두 0으로 표현된 옥텟은 호스트 영역임을 나타냅니다. 서브넷 마스크가 "192.168.1"이라는 네트워크 안에 "15"번 장치가 있다는 것을 알려주는 것입니다.
IP 주소 (10진수): 192.168.1.15
IP 주소 (2진수): 11000000.10101000.00000001.00001111
서브넷 마스크 (10진수): 255.255.255.0
서브넷 마스크 (2진수): 11111111.11111111.11111111.00000000
서브네팅과 서브넷 네트워크
인터넷에 연결된 네트워크는 각각 고유한 IP 주소 대역을 가집니다. 그러나, 이 대역을 하나의 네트워크로만 사용하는 것은 비효율적입니다. 이런 비효율을 개선하기 위해 등장한 개념이 서브네팅(Subnetting)입니다. 서브네팅은 하나의 네트워크를 여러 개의 작은 네트워크로 나누는 작업을 의미합니다. 그리고 이렇게 나눈 작은 네트워크들을 서브넷(Subnet)이라고 부릅니다. 예를 들어 사무실에 300명의 직원이 근무한다고 할때, 부서별로 네트워크를 나눠 트래픽을 분리하고 싶을 수 있습니다. 이때, 네트워크를 그대로 쓰는 대신 부서 단위로 네트워크를 잘게 나눠 사용하는 것이 더 효율적일 것입니다. 이처럼 IP 대역을 용도에 맞게 나누는 것이 서브네팅입니다. 앞서 다뤘던 클래스도 용도를 기준으로 네트워크를 나눈 것이기 때문에 큰 범위에서의 서브네팅이라고 볼 수 있습니다.