The Dynamic Host Configuration Protocol (DHCP) is widely used, and yet poorly understood. There are, in fact, a large number of options in DHCP—but before we get to these, let’s do a quick review of basic off-segment operation.
When the client, which has no IP address, sends out a request for configuration information, what happens? The Router, A, if it is configured to be a DHCP helper, will receive the packet and forward it to the DHCP server, which is presumably located someplace else in the network. The router generally knows what address to send the request to because of manual configuration—but how does the server know how to get the packet back to the original requester?
The helper—Router A in this case—inserts the IP address of the interface on which the request was received into the giaddr field of the DHCP packet. As boring as this might seem, this is where things actually get pretty interesting. It’s possible, of course, for a router to have an logical layer three interface that sits on a bridge group (or perhaps an IRB interface). The router obviously needs to be able to put more information in the DHCP request to handle this sort of situation. Or perhaps the DHCP server needs information beyond a simple IP address to assign an IP address correctly—something like the topological location of the requesting host.
A number of additional DHCP fields have been proposed, standardized, and implemented to cover these situations. Until recently, though, you’ve always needed to go dig up each case and extension individually, because there was no single, up to date, reference anyplace.
Now there is.
This last week, an IETF draft called Customizing DHCP Configuration on the Basis of Network Topology passed through last call on its way to informational status (so it will soon have an RFC number, rather than just a draft name). This draft describes the documentation for, and use of DHCP options, including a relay agent running on a host, cascaded relays, regional configurations, and multiple subnets on the same link.