[네트워크] 4-4. IP Addressing, subnet

kkado·2023년 5월 31일
0

네트워크

목록 보기
22/49

⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.


지난 글에서 IP datagram의 구조에 대해서 알아보았고 이번 글에서는 IP 주소가 어떻게 할당 및 관리되는지에 대하여 다루어 본다.

IP addressing

IP 주소(IP address)란 각각의 라우터 또는 호스트의 인터페이스 interface를 식별하기 위한 32비트의 식별자이다.

인터페이스(Interface)란 호스트 및 라우터와 물리적 링크 간의 연결을 의미한다.

흔히들 IP 주소라고 하면 컴퓨터 등 디바이스를 식별할 수 있다고 생각하는데, 엄밀히 말하자면 인터페이스의 주소이다. 한 컴퓨터에 랜카드를 여러 개 꽂으면 IP 주소를 여러 개 가질 수 있다.

32비트의 숫자를 8비트씩 4개로 끊어서 네 개의 숫자로 표현한다.

network ID, host ID와 클래스

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가 호스트 부분임을 알 수 있다.


Subnet

서브네트워크, 혹은 서브넷은 IP 네트워크의 논리적인 분할이다. 그리고 네트워크를 두 개 이상의 네트워크로 나누는 것을 서브네팅이라고 한다. (위키피디아)

B 클래스는 2^16-2 = 65,534개의 호스트를 수용할 수 있고,
C 클래스는 2^8-2 = 254개의 호스트를 수용할 수 있다.

예컨대 어떤 네트워크에서 20,000개 정도의 호스트를 수용해야 한다고 가정해 보자. B 클래스를 사용하기엔 낭비되는 IP주소가 너무 많고, C 클래스를 사용하기엔 많은 네트워크를 할당받아야 한다.

서브넷은 클래스 개념에서 나아가 내가 필요한 호스트 개수만큼 적절히 네트워크 부분과 호스트 부분을 나누어 사용하기 위해 고안되었다.

Subnet mask

서브넷의 구현은 서브넷 마스크 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 가 된다. 이렇게 나누어진 각각의 네트워크를 서브넷 이라고 한다.

분할을 많이 하게 되면 그만큼 하나의 서브넷에서 수용할 수 있는 호스트의 수가 줄어들게 되므로, 네트워크의 규모에 따라 서브넷 마스크를 적절히 설정하는 것이 필요하다.

subnet이 필요한 이유?

앞서 언급했듯 클래스 개념만을 사용한다면 호스트의 낭비가 발생할 수 있다. 큰 네트워크를 작게 분할하여 필요한 규모에 맞게 사용함으로써 낭비되는 IP 주소를 줄이기 위해 사용한다. 더 세세하게 네트워크를 나누게 되면 네트워크 라우터의 수는 많아질지언정 관리하는 호스트의 수가 줄어들기 때문에 관리하기 용이해지는 장점도 있다.

이와 비슷한 맥락으로, 네트워크에 속하는 모든 호스트에게 메시지를 보내는 브로드캐스팅 시에도 메시지를 보내는 호스트의 개수를 적절하게 줄임으로써 성능의 저하를 막을 수 있다.


다음 글에서는 호스트가 어떻게 네트워크 내에서 IP 주소를 할당받는지, 그리고 네트워크가 어떻게 자신의 네트워크 주소를 할당받는지에 대하여 알아본다!

profile
베이비 게임 개발자

0개의 댓글