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?
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]