⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.
지난 글에서 IP datagram의 구조에 대해서 알아보았고 이번 글에서는 IP 주소가 어떻게 할당 및 관리되는지에 대하여 다루어 본다.
IP 주소(IP address)란 각각의 라우터 또는 호스트의
인터페이스 interface
를 식별하기 위한 32비트의 식별자이다.
인터페이스(Interface)란 호스트 및 라우터와 물리적 링크 간의 연결을 의미한다.
흔히들 IP 주소라고 하면 컴퓨터 등 디바이스를 식별할 수 있다고 생각하는데, 엄밀히 말하자면 인터페이스의 주소이다. 한 컴퓨터에 랜카드를 여러 개 꽂으면 IP 주소를 여러 개 가질 수 있다.
32비트의 숫자를 8비트씩 4개로 끊어서 네 개의 숫자로 표현한다.
IP 주소는 네트워크 부분과 호스트 부분으로 나뉜다.
그리고 클래스라는 개념이 존재하는데, 이 개념을 알아야지만 이 IP 주소에서 어디까지가 네트워크 주소이고 어디까지가 호스트 주소인지
를 알 수 있다.
IP 클래스는 A, B, C, D, E로 총 5개의 클래스가 있지만 D, E 클래스는 멀티캐스트, 그리고 연구/개발용으로 사용되므로 일반적으로 사용되지 않는다. 따라서 보통 A, B, C만 알고 있으면 된다.
각각의 클래스는 IP 주소의 첫 번째 자릿수를 보고 식별 가능하다.
A class는 첫 번째 자릿수가
0
으로 시작한다. 그리고 A 클래스는24비트
를 호스트 영역으로 사용한다.
즉 A 클래스에 속하는 네트워크는 0~127까지이며 각각의 네트워크마다 2^24개의 호스트를 가질 수 있다.
B class는 첫 번째 자릿수가
10
으로 시작한다. 그리고 B 클래스는16비트
를 호스트 영역으로 사용한다.
B 클래스에 속하는 네트워크는 128~191까지이며 각각의 네트워크마다 2^16개의 호스트를 가질 수 있다.
C class는 첫 번째 자릿수가
110
으로 시작한다. 그리고 C 클래스는8비트
를 호스트 영역으로 사용한다.
C 클래스에 속하는 네트워크는 192~223까지이며 각각의 네트워크마다 2^8개의 호스트를 가질 수 있다.
클래스별로 수용 가능한 호스트의 개수가 다르다. 즉 A 클래스는 대규모 네트워크가 주로 사용하고, B, C 클래스는 중, 소규모 네트워크가 주로 사용한다.
만약 어떤 IP 주소가 155.230.90.15
라면, 첫 번째 주소 155
를 보고 B 클래스의 네트워크임을 알 수 있고, 따라서 155.230
이 네트워크 부분, 90.15
가 호스트 부분임을 알 수 있다.
서브네트워크, 혹은 서브넷은 IP 네트워크의 논리적인 분할이다. 그리고 네트워크를 두 개 이상의 네트워크로 나누는 것을 서브네팅이라고 한다. (위키피디아)
B 클래스는 2^16-2 = 65,534개의 호스트를 수용할 수 있고,
C 클래스는 2^8-2 = 254개의 호스트를 수용할 수 있다.
예컨대 어떤 네트워크에서 20,000개 정도의 호스트를 수용해야 한다고 가정해 보자. B 클래스를 사용하기엔 낭비되는 IP주소가 너무 많고, C 클래스를 사용하기엔 많은 네트워크를 할당받아야 한다.
서브넷은 클래스 개념에서 나아가 내가 필요한 호스트 개수만큼 적절히 네트워크 부분과 호스트 부분을 나누어 사용하기 위해
고안되었다.
서브넷의 구현은 서브넷 마스크 subnet mask
를 통해 가능하다.
서브넷 마스크는 IP 주소를 네트워크 및 호스트 주소와 분리한다. 이를 통해 어디까지가 네트워크 주소인지 명시적으로 나타내 줄 수 있다.
서브넷 마스크는 IP 주소 뒤에 슬래시(/)와 숫자를 통해 나타낸다. 예컨대 /24
라고 함은 이 주소의 상위 24비트가 네트워크 주소이다
라는 뜻이다. 또는 네트워크 부분을 1, 호스트 주소를 0으로 마킹함으로써 표현할 수도 있다. 예컨대 /24
표기와 255.255.255.0
은 서로 같은 서브넷 마스크를 나타낸다.
이처럼 클래스에 구애받지 않고 네트워크 부분을 유동적으로 설정하는 것을
CIDR (Classless InterDomain Routing)
이라고 한다.
C 클래스는 기본적으로 /24
서브넷 마스크를 가지고 있다. 2^8=256개의 호스트를 가질 수 있는 이 네트워크를 128, 128개의 호스트를 가지는 네트워크 두 개로 나누고 싶다면 한 비트만큼을 네트워크 부분으로 옮기면 된다. 그러면 서브넷 마스크는 /25
가 된다. 이렇게 나누어진 각각의 네트워크를 서브넷
이라고 한다.
분할을 많이 하게 되면 그만큼 하나의 서브넷에서 수용할 수 있는 호스트의 수가 줄어들게 되므로, 네트워크의 규모에 따라 서브넷 마스크를 적절히 설정하는 것이 필요하다.
앞서 언급했듯 클래스 개념만을 사용한다면 호스트의 낭비가 발생할 수 있다. 큰 네트워크를 작게 분할하여 필요한 규모에 맞게 사용함으로써 낭비되는 IP 주소를 줄이기 위해
사용한다. 더 세세하게 네트워크를 나누게 되면 네트워크 라우터의 수는 많아질지언정 관리하는 호스트의 수가 줄어들기 때문에 관리하기 용이해지는 장점
도 있다.
이와 비슷한 맥락으로, 네트워크에 속하는 모든 호스트에게 메시지를 보내는 브로드캐스팅
시에도 메시지를 보내는 호스트의 개수를 적절하게 줄임으로써 성능의 저하를 막을 수 있다.
다음 글에서는 호스트가 어떻게 네트워크 내에서 IP 주소를 할당받는지, 그리고 네트워크가 어떻게 자신의 네트워크 주소를 할당받는지에 대하여 알아본다!