[네트워크/Network] IPv4 주소 체계와 DHCP

kindof

·

2021. 10. 13. 17:48

1. 용어 정리

지난 포스팅에서는 IPv4 데이터그램의 포맷과 단편화에 대한 공부를 했고, 이번 시간에는 IPv4 주소체계에 대해서 공부를 해보려고 합니다.

 

본격적인 논의를 하기에 앞서, 호스트와 라우터가 인터넷에 연결되는 방식에 관한 몇 가지 단어를 정의해보려고 하는데요.

 

호스트는 일반적으로 네트워크와 연결되는 하나의 링크를 가집니다. 호스트 IP는 이 링크를 통해 데이터그램을 보내게 되며, 이 때 호스트와 물리적 링크 사이의 경계를 "인터페이스"라고 합니다.

 

한편, 라우터의 작업은 한 링크로부터 데이터그램을 수신하여 다른 링크로 전달하는 것이므로 라우터는 2개 이상의 연결된 링크가 필요합니다. 라우터와 이런 링크 사이의 경계 또한 인터페이스라고 하며 각 링크마다 하나의 인터페이스를 가지고 하나의 라우터는 여러 개의 인터페이스를 가질 수 있습니다. 아래 그림을 볼까요?

 

인터넷 주소와 인터페이스, 서브넷

 

위 그림에서 3개의 인터페이스를 갖는 하나의 라우터는 7개의 호스트를 연결합니다.

 

호스트와 라우터 인터페이스에 할당된 IP 주소를 살펴볼까요?

 

왼쪽 3개의 호스트와 연결된 라우터 인터페이스는 모두 223.1.1.xxx 형식의 IP주소를 갖고 있습니다. 즉, 동일한 왼쪽 24비트를 사용하죠. IP 용어로 세 호스트들이 인터페이스들과 하나의 라우터 인터페이스로 연결된 네트워크를 "서브넷"을 구성한다고 합니다. IP 주소체계는 이 서브넷에 223.1.1.0/24 라는 주소를 할당하는데, 여기서 "/24"를 서브넷 마스크(Subnet Mask)라고 하며 32비트 주소의 왼쪽 24비트가 서브넷 주소라는 것을 말합니다.

 

한편, 각 IP 주소는 32비트 길이를 가집니다. 따라서 IPv4의 주소로는 2^32개의 주소가 사용 가능한데요. 이 주소는 일반적으로 주소의 각 바이트를 십진수로 표현하고 주소의 다른 바이트와 점(.)으로 구분하는 십진 표기법을 사용합니다. 예를 들어, IP 주소가 193.32.216.9라면 해당 IP 주소는 11000001 00100000 11011000 00001001이 되는 것이죠.

 


 

다시 돌아와서, 서브넷 223.1.1.0/24는 세 호스트 인터페이스(223.1.1.1, 223.1.1.2, 223.1.1.3)와 하나의 라우터 인터페이스(223.1.1.4)를 구성합니다. 만약 네트워크 223.1.1.0/24에 새로운 호스트가 배정된다면, 그 호스트는 223.1.1.xxx형식의 주소가 필요하겠죠?

 

한편, 서브넷 IP 정의는 여러 호스트를 라우터 인터페이스에 연결하는 이더넷 세그먼트만을 의미하는 것은 아닙니다.

 

6개의 서브넷을 연결하는 3개의 라우터

위 그림에서 세 개의 라우터는 점대점 링크로 연결되어 있는데요. 각 라우터는 각 점대점 링크를 위한 두 개의 인터페이스와 두 호스트를 직접 연결하는 브로드캐스트 링크를 위한 한 개의 인터페이스, 총 3 개의 인터페이스를 갖습니다.

 

따라서 이 그림에서는 223.1.1.0/24, 223.1.2.0/24, 223.1.3.0/24 서브넷과 더불어 223.1.9.0/24, 223.1.8.0/24, 223.1.7.0/24가 추가로 존재하게 됩니다.

 

즉, 서브넷을 결정하기 위해서는 먼저 호스트와 라우터에서 각 인터페이스를 분리하고 고립된 네트워크를 만들어야 합니다. 그리고 고립된 네트워크의 종단점은 인터페이스의 끝이 되고 이렇게 고립된 네트워크 각각을 서브넷이라고 부르게 되는 것이죠.

 

 

2. CIDR

CIDR(Classless Interdomain Routing)서브넷 주소체계 표기를 일반화 한 인터넷 주소 할당 방식입니다. CIDR에서는 32비트 IP주소를 두 부분으로 나누고, 이것을 다시 점으로 된 십진수 형태의 a.b.c.d/x로 표기합니다. 여기서 x는 주소 첫 부분의 비트 수입니다.

 

그리고 a.b.c.d/x 형식 주소에서 최상위 비트(MSB)를 의미하는 x는 IP 주소의 네트워크 부분을 구성합니다. 이를 해당 주소의 프리픽스(Prefix)라고 합니다. 한 기관은 통상 연속적인 주소의 블록을 할당받습니다. 이 경우 기관 장비들의 IP 주소는 공통 프리픽스를 공유하게 됩니다.

 

주소의 나머지 32-x 비트들은 기관 내부에 같은 네트워크 프리픽스를 갖는 모든 장비들을 구별한다고 보면 됩니다. 이 비트들은 기관 내부의 라우터에서 패킷을 전달할 때 사용되겠죠? 

 

지금까지 얘기한 내용을 예로 들어보겠습니다. CIDR식 주소 a.b.c.d/21의 첫 21비트들은 기관의 네트워크 프리픽스를 나타내고, 이 관의 모든 장비의 IP 주소 공통부분입니다. 그리고 나머지 11비트들은 기관 내부의 특정 호스트들을 식별할 수 있게 하죠.

 

CIDR이 채택되기 전에는 IP 주소의 네트워크 부분을 8, 16, 24 비트로 제한해버렸고 8, 16, 24비트 서브넷 주소를 갖는 서브넷을 각각 A, B, C 클래스 네트워크로 분류했기 때문에 이러한 주소체계를 클래스 주소체계(Classful Addressing)라고 했습니다.

 

그러나 IP 주소의 서브넷 부분이 정확히 1, 2, 3 바이트여야 하는 요구사항은 중소형 크기의 망으로 급속히 증가하는 기관의 수를 지원하기엔 문제가 있었죠. 클래스(/24) 서브넷은 약 256개의 호스트만을 제공해서 너무 적었고, B 클래스(/16)은 65,634개의 호스트를 제공해서 너무 컸던 것입니다.

 


 

자, 이제 IP 주소 체계에 대해 살펴봤으니 호스트와 서브넷이 처음에 어떻게 자신의 주소를 인식하는지를 살펴보겠습니다. 

 

 

 

3. 주소 블록 획득

기관의 서브넷에서 사용하기 위한 IP 주소 블록을 얻기 위해서는 이미 큰 블록의 주소를 할당받은 ISP에게 부분 블록에 대한 할당을 요청해야 합니다.

 

예를 들어, ISP가 주소 블록 200.23.16.0/20을 할당받았다고 하면 ISP는 이 주소 블록을 다음처럼 같은 크기의 작은 주소 블록 8개로 나누고, 이것으로 8개 조직을 지원하게 되는 것이죠.

 

ISP의 블록: 200.23.16.0/20    11001000 00010111 00010000 00000000
조직 0      : 200.23.16.0/23     11001000 00010111 00010000 00000000
조직 1       : 200.23.18.0/23     11001000 00010111 00010010 00000000
조직 2      : 200.23.20.0/23     11001000 00010111 00010100 00000000
...
조직 7      : 200.23.30.0/23     11001000 00010111 000111110 00000000

 

* ISP: 인터넷 서비스 제공자는 인터넷에 접속하는 수단을 제공하는 주체

 

 

 

4. 호스트 주소 획득: 동적 호스트 구성 프로토콜(DHCP)

한 기관은 ISP로부터 주소 블록을 획득하여 개별 IP 주소를 기관 내부의 호스트와 라우터 인터페이스에 할당합니다. 호스트에 IP 주소를 할당하는 것은 수동으로 구성이 가능하지만 일반적으로 동적 호스트 구성 프로토콜(Dynamic Host Configuration Protocol, DHCP)을 많이 사용하는데요.

 

DHCP를 통한 IP 주소 할당은 “임대”라는 개념을 가지고 있는데 이는 DHCP 서버가 IP 주소를 영구적으로 단말에 할당하는 것이 아니고 임대기간(IP Lease Time)을 명시하여 그 기간 동안만 단말이 IP 주소를 사용하도록 하는 것입니다. 단말은 임대기간 이후에도 계속 해당 IP 주소를 사용하고자 한다면 IP 주소 임대기간 연장(IP Address Renewal)을 DHCP 서버에 요청해야 하고 또한 단말은 임대 받은 IP 주소가 더 이상 필요치 않게 되면 IP 주소 반납 절차(IP Address Release)를 수행하게 됩니다.

 

한편, DHCP는 클라이언트/서버 프로토콜입니다. IP 주소를 얻고자 하는 쪽이 클라이언트이며, 각 서브넷은 DHCP 서버를 가질 수 있죠. 아래 그림을 보면서 클라이언트가 DHCP 서버로부터 IP주소를 할당받는 절차에 대해 살펴보겠습니다.

 

DHCP 클라이언트/서버 동작

 

1) DHCP Discover

클라이언트가 DHCP 서버를 찾기 위한 메시지입니다. 클라이언트는 동일 서브넷 상에다가 브로드캐스팅을 하여 "거기 혹시 DHCP 서버 계신가요?"라고 외칩니다. 그런데 만약 호스트가 자신이 접속할 네트워크의 IP 주소를 알지 못하고 해당 네트워크의 DHCP 서버 주소도 모른다면, 메시지 내의 목적지 IP 주소를 브로드캐스팅 IP 주소(255.255.255.255)로 설정하고, 출발지 IP 주소는 0.0.0.0으로 설정합니다.

 

2) DHCP Offer

DHCP 서버가 "저 여기 있어요~"라고 응답하는 메시지입니다. 단순히 DHCP 서버의 존재만을 알리지 않고, 클라이언트에 할당할 IP 주소 정보를 포함한 다양한 "네트워크 정보"를 함께 실어서 단말에 전달합니다.

 

3) DHCP Request

클라이언트는 DHCP 서버(들)의 존재를 알았고, DHCP 서버가 클라이언트에 제공할 네트워크 정보(IP 주소, subnet mask, default gateway등)를 알았습니다. 이제 클라이언트는 DHCP Request 메시지를 통해 하나의 DHCP 서버를 선택하고 해당 서버에게 "클라이언트가 사용할 네트워크 정보"를 요청합니다.

 

4) DHCP Ack

DHCP 절차의 마지막 메시지로, DHCP 서버가 클라이언트에게 "네트워크 정보"를 전달해 주는 메시지입니다. 앞서 설명드린 DHCP Offer의 '네트워크 정보"와 동일한 파라미터가 포함됩니다.

 

이렇게 DHCP Ack를 수신한 단말은 이제 IP 주소를 포함한 네트워크 정보를 획득(임대)하였고, 이제 인터넷 사용이 가능하게 됩니다.

 

 


5. 나가면서

이번 시간에는 어렵기도 하고, 좀 많은 내용을 정리해봤는데요.

 

인터페이스란 무엇인지, 서브넷이란 무엇인지에 대해 정의해보고 호스트가 IPv4 주소를 획득하는 방법도 살펴봤습니다.

 

하나 하나 들어가면 더 복잡한 내용이 많아서 최대한 필요한(?) 내용 위주로 정리해봤는데, 우선 이 내용부터 잘 이해를 하면 좋을 것 같습니다.

 

감사합니다.