DHCP IP 할당 과정

Halim Kim·2021년 5월 31일
1

CS기초 - Network

목록 보기
1/3

IP 할당이 어떻게 일어나는지 알고 있느냐는 질문에 DHCP가 생각이 났지만, 제대로 설명을 하지 못했다. 분명히 DHCP란 것이 IP 주소가 부족하기 때문에 동적으로 IP 주소를 할당해주고 그 IP 주소를 DHCP 서버로부터 가져오는 것이라고 대충은 알고 있었는데, 그 세부적인 동작 과정을 설명하지 못할 것 같아서 잘 모른다는 답변을 했다.

머리속에만 떠오르고 다른 사람들에게 설명하지 못하면 그것은 모르는 것이나 마찬가지라고 생각한다. 그래서 이번 글을 써보면서 DHCP가 무엇인지 다시 정리해보기로 했다.

DHCP란?

일단 DHCP는 Dynamic Host Configuration Protocol로 프로토콜의 한 종류이다. 프로토콜의 하나의 종류로, 호스트들의 IP를 자동으로 할당해주는 역할을 한다.

호스트들의 IP를 자동으로 할당해주는 역할을 왜 해야하는지 생각을 해보았다.

첫번째로 생각나는 것은 이 세상에는 수 많은 컴퓨터가 존재하는데, 그 컴퓨터마다 일일이 IP 주소를 직접 설정해주는 것은 굉장히 번거로운 일이라고 생각을 했다.

두번째로는 컴퓨터를 사용할 때, 가정에서 사용하는 PC 같은 경우는 켜져 있는 시간도 있지만 사용하지 않는 시간대도 분명히 있을 것이다. 이 때, 켜져있지도 않은 PC를 위해 IP 주소를 할당해놓는 것은 낭비일 것이라는 생각을 했다. 그래서 차라리 컴퓨터가 켜질 때, IP 주소를 할당받는게 좋지 않을까 하는 생각이다.

세번째는 첫번째 이유와 비슷한데, 만약에 사람이 직접 IP 주소를 할당받도록 한다면, 실수로 동시에 여러 Host에서 IP를 같이 써서 충돌이 일어날 수도 있겠다는 생각을 했다.

스스로 생각해본 DHCP를 사용하는 이유는 위와 같다. 실제로 인터넷에서도 확인해본 결과 비슷한 이유를 설명하고 있었다.

DHCP 동작 과정

조금만 더 생각해보면 DHCP 동작 과정도 기억해낼 수 있었을 것 같아 아쉬움이 남는다.

중요한 것은 IP 주소도 할당받지 못한 Host는 DHCP 서버가 어디에 있는지 알 수가 없다. 그렇기 때문에 Host가 속한 Subnet에 브로드캐스팅을 해야 한다.

참고 : IP를 할당받지 않았으니 IP를 이용하는 것이 아니고 물리적 주소인 MAC 주소를 사용하여 브로드캐스팅을 한다. (브로드캐스팅용 MAC 주소 : FF:FF:FF:FF:FF:FF)

연결 대상이 어디에 있는지 알 수가 없기 때문에 브로드 캐스팅을 하는 것을 생각해보면, TCP나 UDP 중 UDP가 적합한 것을 쉽게 유추할 수 있다. TCP는 연결을 한 뒤에 통신을 하지만 UDP는 연결 과정이 없기 때문에 더 빠르다.

다시 정리를 해보면 DHCP를 통해 IP를 할당받는 과정은 총 4단계로 설명할 수 있다.

1. DHCP Discover

Host가 DHCP 서버가 어디에 있는지 찾고 IP 할당을 요청하는 과정이다. 위에서 말했던대로 IP 할당 요청을 브로드캐스팅해서 DHCP 서버로 보낸다.

2. DHCP Offer

DHCP 서버가 발견되고 IP 할당 요청이 잘 도착하면 DHCP 서버에서는 Host에게 요청한 IP와 Host의 MAC 주소를 같이 보낸다.(DHCP Offer도 브로드캐스팅을 하기 때문에 MAC 주소도 같이 보내는 것으로 예상된다.)

3. DHCP Request

DHCP Offer를 통해서 IP를 할당받으면 그 IP를 사용하겠다고 DHCP 서버에 확정 메세지를 보내야 한다. 그것이 DHCP Request이다.

4. DHCP Ack

DHCP 서버에서 DHCP Request를 받으면 다시 ACK를 보내주어야 마무리가 된다. 이 때 ACK는 브로드캐스팅을 할 수도 있고 유니캐스트를 할 수도 있는데, 왜 굳이 브로드캐스팅까지 가능하게 했는지는 한번 고민을 해봐야 할 것 같다.

Stackoverflow에 비슷한 질문을 한 사람이 있어서 답변을 살펴보았고 아래의 RFC를 볼 수 있었다.

RFC2131 : https://www.ietf.org/rfc/rfc2131.txt

Normally, DHCP servers and BOOTP relay agents attempt to deliver
DHCPOFFER, DHCPACK and DHCPNAK messages directly to the client using
uicast delivery. The IP destination address (in the IP header) is
set to the DHCP 'yiaddr' address and the link-layer destination
address is set to the DHCP 'chaddr' address. Unfortunately, some
client implementations are unable to receive such unicast IP
datagrams until the implementation has been configured with a valid
IP address (leading to a deadlock in which the client's IP address
cannot be delivered until the client has been configured with an IP
address).
A client that cannot receive unicast IP datagrams until its protocol
software has been configured with an IP address SHOULD set the
BROADCAST bit in the 'flags' field to 1 in any DHCPDISCOVER or
DHCPREQUEST messages that client sends. The BROADCAST bit will
provide a hint to the DHCP server and BOOTP relay agent to broadcast
any messages to the client on the client's subnet. A client that can
receive unicast IP datagrams before its protocol software has been
configured SHOULD clear the BROADCAST bit to 0. The BOOTP
clarifications document discusses the ramifications of the use of the
BROADCAST bit

해석을 해보자면 몇몇의 Client는 IP 주소를 제대로 받기 전에 Unicast된 IP datagram을 받을 수 있도록 구현되지 않았기 때문이라고 할 수 있다.

그래서 이런 Client는 DHCP Discover와 Request 메세지를 보낼 때, DHCP Server가 미리 Client의 상태를 알고 브로드캐스팅할 수 있도록 flag bit를 1로 만들고 보낸다고 한다.

profile
나는 하림

0개의 댓글