When I look at the protocol, I see that DHCP
Request and Acknowledgement are both broadcast in the link layer. However at that point, both sides actually know each other's MAC
addresses. Why do they not unicast the messages if so?
1 Answer
From RFC 2131 "Dynamic Host Configuration Protocol"
Remembering that there can be multiple DHCP servers, the DHCPREQUEST is broadcast because:
Those servers not selected by the DHCPREQUEST message use the message as notification that the client has declined that server's offer. [p16]
Those other servers potentially reserved an address in their pool for this client, and it can be marked as unused if the server knows that the client doesn't want it.
The DHCPACK is broadcast if the client asks for it (because it's in a partially configured state, or just for its convenience):
To work around some clients that cannot accept IP unicast datagrams before the TCP/IP software is configured [there is] the BROADCAST (B) flag. [p11]
If the broadcast bit is not set and [various conditions] then the server unicasts DHCPOFFER and DHCPACK [...] If [other conditions] then the server broadcasts DHCPOFFER and DHCPACK messages [p23]
-
DHCP Request IP destination address is broadcast as well. Both MAC and IP addresses are broadcasted in the Request, then, is there something in the payload that tells certain DHCP server that it has been chosen and others that they have not been chosen? Commented Aug 18, 2018 at 15:13
-
2In the DHCPREQUEST, a non-chosen server sees a requested IP address that it didn't offer, for the given client identifier. Commented Aug 18, 2018 at 15:21