DHCP로 IP 주소를 할당할 때, DHCP 클라이언트와 DHCP 서버는 UDP(User Datagram Protocol) 패킷으로 4가지 메시지를 주고 받습니다. DHCP 서버와 DHCP 클라이언트는 각각 UDP 포트 67과 68로 패킷을 수신합니다. PC를 네트워크에 연결하면 PC에서 실행 중인 DHCP 클라이언트는 DHCP-DISCOVER를 제일 먼저 보내서 DHCP 서버에 IP 주소 할당을 요청한다.
| 메시지 이름 | 보낸 곳 | 설명 |
|---|---|---|
| DHCP-DISCOVER | 클라이언트 | DHCP 서버를 찾아서 IP 주소 할당을 요청 |
| DHCP-OFFER | 서버 | 할당 후보 IP 주소를 제시 |
| DHCP-REQUEST | 클라이언트 | 후보로 제시된 IP 주소 사용을 요청, 혹은 IP 주소의 유효 기한 연장을 요청 |
| DHCP-ACK | 서버 | 클라이언트의 요청을 받아들임 |
서브넷1의 PC가 IP 주소 ‘192.168.1.2’인 DHCP 서버와 패킷을 주고 받는다고 생각해보자. 일반적으로 UPD 통신 패킷에는 헤더 부분에 ‘출발지/목적지 MAC 주소’ ‘출발지/목적지 IP 주소’ ‘출발지/목적지 포트 번호’ 정보가 부가된다. DHCP 클라이언트와 DHCP 서버의 MAC 주소는 각각 ‘0000.0000.1111’ 및 ‘0000.0000.2222’로 되어 있다.
DHCP-DISCOVER의 헤더 정보를 보면, 아주 재미있는 내용을 알 수 있다. 우선, 출발지인 DHCP 클라이언트는 아직 IP 주소를 가지고 있지 않으므로, 출발지 IP 주소에는 편의상 ‘0.0.0.0’이 들어간다. 그리고 목적지 MAC 주소와 목적지 IP 주소에는 ‘FFFF.FFFF.FFFF’와 ‘255.255.255.255’가 설정되어 있다. 이들은 모두 ‘브로드캐스트 주소’로 불립니다.
일반적으로 같은 서브넷의 기기는 스위치 허브 등 ’L2 스위치’에 연결된다. L2 스위치의 사양은 목적지 MAC 주소가 브로드캐스트 주소인 패킷은 모든 포트에서 같은 패킷을 내보내서, 서브넷 내의 모든 기기에 패킷이 도달하게 되어 있다. L2 스위치로부터 패킷을 전달받은 기기는 목적지 IP 주소를 자신의 주소와 비교해서 자신에게 온 패킷만 받아들인다.
하지만, 이번에는 목적지 IP 주소도 브로드캐스트 주소로 되어 있어, 실제 IP 주소와는 관계없이 모든 기기가 수신하기로 약속되어 있다. 결과적으로 DHCP-DISCOVER 패킷은 같은 서브넷의 모든 기기가 수신한다. 단, 목적지 포트 번호 ‘67’에서 UDP 패킷을 기다리는 것은 DHCP 서버뿐이므로 실제로 패킷을 받아 처리하는 것은 DHCP 서버이다.
DHCP 클라이언트는 DHCP 서버의 IP 주소를 모르지만, 브로드캐스트 주소를 이용해서 DHCP 서버에 요청을 보내는데 성공했습니다. DHCP-DISCOVER 메시지 본문에는 누구의 요청인지 알 수 있도록 DHCP 클라이언트의 MAC 주소가 들어 있다.
계속해서 DHCP 서버는 사진의 ‘IP 주소 관리대장’에서 미사용 IP 주소를 찾아 그중 하나를 ‘할당 후보 IP 주소’로 DHCP 클라이언트에 돌려보낸다. 이 메시지가 DHCP-OFFER가 된다. 여기서는 예를 들면 ‘192.168.1.101’을 돌려보낸 거로 하겠다. DHCP-OFFER 메시지 본문 안에는 서브넷 마스크와 디폴트 게이트웨이 정보, DHCP 서버 자신의 IP주소 등도 포함된다.
DHCP-OFFER의 목적지 MAC 주소에는 DHCP-DISCOVER에 포함되어 있던 DHCP 클라이언트의 MAC 주소가 지정되어 있다. 따라서, 이 패킷은 L2 스위치에 의해 DHCP 클라이언트에만 전달된다. 이런 패킷은 앞서 나온 브로드캐스트와 대조해 유니캐스트로 불린다. 이때 목적지 IP 주소에는 DHCP 서버가 후보로 선택한 IP 주소는 무시하고 이 패킷을 받아들인다.
덧붙여, IP 전화기 등 DHCP 클라이언트로 동작하는 기기 중에는 IP 주소가 설정되지 않은 상태에서 유니캐스트 패킷을 받아들일 수 없는 것도 있습니다. 그런 DHCP 클라이언트는 DHCP-REQUEST를 보낸 때 회신 패킷도 브로드캐스트로 보내도록 DHCP 서버에 요청한다. DHCP에서 브로드캐스트와 유니캐스트의 용도는 RFC-2131에 기술되어 있다.
이것으로 DHCP 클라이언트는 자신이 사용할 수 있는 IP 주소 후보를 손에 넣다. 단, 이 ‘IP 주소를 사용하기 전에 미리 DHCP 서버에 이 IP 주소를 사용할 거라고 선언한다.
DHCP 클라이언트는 다시 브로드캐스트 주소를 이용하여 DHCP-REQUEST를 DHCP 서버에 보낸다. DHCP-REQUEST의 메시지 본문에는 후보로 받은 IP 주소와 DHCP 서버에 보낸다. DHCP-REQUEST의 메시지 본문에는 후보로 받은 IP 주소와 DHCP 서버의 IP 주소가 포함되어 있고, ‘DHCP 서버에게 이 IP 주소를 사용한다’고 선언하는 의미가 된다. 이 메시지를 받은 DHCP 서버는 수신 확인을 나타내는 DHCP-ACK를 조금 전처럼 유니캐스트 패킷으로 회신한다.