If you have installed a large number of workstations
at your site, 
setting up the initial and minimum configuration for
each by hand, 
you must have wondered if there were not a better and
more efficient 
way to do it. Once the setup is complete, most configuration
can be 
done through automated procedures, such as rdist(1),
but it 
would be nice to automate that initial phase also. And
there is in 
fact an easier way on the way. The Internet Engineering
Task Force 
(IETF) has come up with an RFC, to be implemented soon
by several 
vendors, which can do some of this work. The new method
is based on 
an extension to the older BOOTP protocol and is known
as the Dynamic 
Host Configuration Protocol, or DHCP. This protocol
provides a means 
of sending network configuration information accross
the network, 
from a DHCP server to a client, typically a new workstation.
In "manual allocation mode" the IP address
of 
the client is explicitly assigned by the system administrator,
and 
the DHCP role here is only to forward that address through
the same 
communication method used with the previous two methods.
The system administrator can configure the server to
use these three 
methods in any combination, in accordance with local
site policies. 
If the administrator uses the dynamic allocation method,
then any 
assigned address can be "recycled" and used
again at a later 
time, after that host no longer needs the address. The
RFC which decribes 
this protocol suggests that this method is useful where
IPs are to 
be assigned to machines that will be in use only temporarily,
or where 
there are a limited number of IP addresses available
on the network. 
My own experience inlcudes an instance where an automatic,
but temporary, 
assignment of IP addresses would have been useful. In
that particular 
case, machines were brought up on the network for a
few days while 
they were installed and configured and then they were
disconnected 
and rolled out the door to be shipped to customers.
Even though the 
production people had an assigned set of IP addresses,
they were constantly 
able to find new ways to use duplicate addresses. DHCP
would have 
been a blessing there.
Since the DHCP protocol and message format is based
on the older BOOTP 
protocol, a brief look at how BOOTP operates will serve
as a good 
introduction to the world of DHCP.
The BOOTP Protocol
BOOTP is a bootstrap protocol (using UDP) which allows
a diskless 
client machine to find out which IP address it should
use, the IP 
address of the boot server, and which file it should
load into memory 
and executed. This bootstrap operation is done in two
steps. The BOOTP 
protocol handles the first step, which consists of finding
the relevant 
IP addresses and determining what file should be transferred
from 
the boot server. The second step, which consists of
loading the bootstrap 
program into memory, is typically done with TFTP, but
could be performed 
with another file transfer protocol, such as FTP.
Although the format of the protocol package is of little
interest 
to system administrators, but in order to understand
the protocol, 
it's necessary to venture a little into this area. The
BOOTP protocol 
uses the same package format for both requests and replies.
Each package 
is 328 bytes long, the first 20 bytes are occupied by
the IP header, 
and the following 8 bytes are used by the UDP header.
The remaining 
300 bytes are used by the BOOTP protocol.
BOOTP presents a problem for the server of the chicken
and egg variety. 
How can the server send a response to the client, if
the client does 
not yet know its own address? The client cannot respond
to Address 
Resolution Protocol (ARP) requests until it has learned
its own address. 
In UNIX, the server will often solve this problem by
cheating. If 
the server uses the ioctl system call to enter the client
into the ARP cache, then the server's ARP module will
have the client's 
IP address in the cache.
If the client already knows its IP address from some
other source, 
then the server can respond in the normal manner.
The Design of DHCP
The goal of the DHCP protocol is to provide a method
of configuring 
a client that has no implicit policies embedded. The
intention is 
to give the local system administrator full control
over configuration 
issues. This is an important feature: too many system
administration 
tools implement implicit policies that may or may not
be appropriate 
for a given site.
Another useful feature of DHCP is that it does not necessarily
require 
manual configuration. Each client is able to discover
everything it 
needs to know without user or system administrator intervention,
and 
is able to enter this information into its own configuration.
DHCP allows the server to be anywhere on the local network
(i.e., 
it does not require the server to be on the local subnet).
Because 
the clients are required to choose one of several replies,
it is possible 
to have multiple servers to increase availability and
reliability.
Finally, DHCP has been designed to co-exist with hosts
that were configured 
the old-fashioned way -- that is, by the system administrator
editing 
the configuration files. This backward compatibility
means you can 
start using DHCP without having to reconfigure your
existing hosts.
Overview of the Protocol
As mentioned above, DHCP is essentially a number of
extensions to 
the BOOTP protocol. DHCP servers are thus able to interact
with clients 
that can speak BOOTP (though, such clients cannot take
advantage of 
the DHCP extensions). There are two main differences
between BOOTP 
and DHCP. First, DHCP is capable of assigning an IP
address to a client 
for a limited amount of time (the RFC calls this a lease),
allowing 
the address to be recycled when no longer needed. Second,
DHCP has 
a mechanism in place that allows the client to obtain
all the IP-related 
information it needs to be able to operate on the network.
DHCP does show some small differences from BOOTP (the
RFC calls these 
"clarifications"). The vendor extension field
in the 
BOOTP protocol becomes the options field in DHCP, and
this 
field now has a minimum size 0f 312 bytes (larger packet
sizes can 
be negotiated through the "maximum DHCP message
size" option). 
New with DHCP is a "client identifier" option
which is used 
to pass an explicit client identifier to a DHCP server.
This change 
eliminates the overloading of the chaddr field in BOOTP
messages, where chaddr is used both as a hardware address
for transmission of BOOTP reply messages and as a client
identifier. 
The package format for DHCP is shown in Figure 1. The
fields of a 
DHCP message are shown to Figure 2.
DHCP also provides for vendor specific extensions, through
the "vendor 
specific information" option. The intent here is
to allow vendors 
to implement extensions to the protocol, yet still be
able to communicate 
with servers or clients from other vendors. In fact,
the RFC states: 
"Options encapsulated as 'vendor specific information'
must be carefully defined and documented so as to allow
for interoperability 
between clients and servers from diferent vendors."
The RFC goes 
on to specify a number of guidelines vendors must adhere
to in order 
to use this option.
The Dynamic Allocation of IP Addresses
One of the services provided by DHCP is the assignment
of IP addresses 
to clients, whether on a temporary or a permanent basis.
The method 
employed is simple. When a client requests an IP address,
it will 
specify how long the address will be needed. The server(s)
will not 
reallocate that address within the requested amount
of time, which 
is the amount of time the "lease" of the address
is valid. 
The client can extend its lease, or it may give the
address back to 
the server if the address is no longer needed. A lease
can be anywhere 
from one hour (the minimum) to about 100 years; it can
also be a permanent 
lease (a lease of infinite length), as the maximum value
for the lease 
is infinite.
The server can reuse addresses for which the lease has
expired. The 
RFC assigns both the server and the client the responsibility
for 
ensuring that such an addresses is indeed free, but
under some circumstances 
duplicate IP addresses may still occur. It is also possible
for the 
lease on the IP address to expire while the client is
up and active. 
According to the RFC, this should not happen with well-behaved
and 
well-implemented servers and clients, but I think this
feature falls 
in the category of "if you don't absolutely need
it, you don't 
want it!"
A DHCP Example
The following steps represent a small example of how
DHCP assigns 
an IP address to a client. The example refers to various
DHCP messages 
(see Figure 3 for a description of DHCP messages).
Figure
4 gives 
a graphical timeline of the interaction.
1. The client broadcasts a DHCPDISCOVER message to 
tell the world it needs to know its own IP address.
2. Each server that receives the message responds 
with a DHCPOFFER message that includes an IP address
in the yiaddr 
field. The server can also return other kinds of configuration
information 
as DHCP options.
3. Based on the configuration parameters offered 
in the DHCPOFFER messages sent by the servers, the client
chooses 
one server from which to request configuration parameters.
It broadcasts 
a DHCPREQUEST message that identifies which server it
has chosen to 
be configured from.
4. The servers not selected by the client use the 
message as notification that the client has chosen to
use another 
server. The server selected by the client responds with
a DHCPACK 
message, which contains the configuration parameters
for the client.
If the selected server is unable to satisfy the DHCPREQUEST
message, it sends a DHCPNAK message (although in this
case one wonders 
why the server responded in the first place).
5. Upon receiving the DHCPACK message containing 
its configuration parameters, the client performs a
check on those 
parameters (e.g., by sending an ARP for allocated network
address), 
and notes how long it will be allowed to use the address
(that is, 
how long the lease is). Unless the client finds a problem,
it is now 
configured. If the client does find a problem, it notifies
the server 
with a DHCPDECLINE message, and then must start the
configuration 
process over again.
6. If the client at some point finds that it no longer
needs the IP address it has been assigned, it can return
that address 
by sending a DHCPRELEASE message to the server. The
server is then 
free to to assign the address to another client.
If the client already knows what IP address it wants
to use, it does 
not need to go through as many steps as in the previous
example. Instead, 
it will follow the process shown in Figure 5 and outlined
below:
1. The client broadcasts a DHCPREQUEST.
2. If the request is valid, the servers that know 
the client's configuration respond with a DHCPACK message.
For invalid 
requests, the servers send a DHCPNAK message.
3. When the client receives the DHCPACK message with
its configuration parameters, it performs a check on
those parameters 
in the same manner as in the example above.
How the Lease Works
The concept of the lease of an IP address is new, and
a look at how 
DHCP implements this is worthwhile.
When a server sends configuration data to a client (via
a DHCPACK 
message), it must specifiy how long the client can use
the IP address 
it is assigning. This is done by in one of the following
three methods:
Parameters with non-default values on the client's subnet.
If all these conditions are met, the server inserts
the xid 
field from the DHCPDISCOVER message into the xid field
of 
the DHCPOFFER message and sends the DHCPOFFER message
to the requesting 
client.
Security Considerations
DHCP is built directly on UDP and IP, which are still
inherently insecure. 
Furthermore, DHCP is generally intended to make maintenance
of remote 
and/or diskless hosts easier. While perhaps not impossible,
configuring 
such hosts with passwords or keys may be difficult and
inconvenient. 
Therefore, DHCP in its current form is quite insecure.
Unauthorized DHCP servers can be set up easily. Such
servers can then 
send false and potentially disruptive information to
clients, such 
as incorrect or duplicate IP addresses, incorrect routing
information 
(including spoof routers, etc.), incorrect domain nameserver
addresses 
(such as spoof nameservers), and so on. Once this seed
information 
is in place, an attacker can further compromise affected
systems.
Malicious DHCP clients could masquerade as legitimate
clients and 
retrieve information intended for those legitimate clients.
Where 
dynamic allocation of resources is used, a malicious
client could 
claim all resources for itself, thereby denying resources
to legitimate 
clients.
A host should not act as a DHCP server unless explicitly
configured 
to do so by a system administrator. The diversity of
hardware and 
protocol implementations in the Internet would preclude
reliable operation 
if random hosts were allowed to respond to DHCP requests.
For example, 
IP requires the setting of many parameters within the
protocol implementation 
software. Because IP can be used on many dissimilar
kinds of network 
hardware, values for those parameters cannot be guessed,
nor can they 
be assumed to have correct defaults. Also, distributed
address allocation 
schemes depend on a polling/defense mechanism for discovery
of addresses 
that are already in use. IP hosts may not always be
able to defend 
their network addresses, so such a distributed address
allocation 
scheme cannot be guaranteed to avoid allocation of duplicate
network 
addresses.
Conclusion
Much of the information in this article has been taken
from RFC 1541, 
which is freely available from ftp.internic.net and
many other 
ftp servers. BOOTP is described in RFC 951.
Several vendors (see Figure 6) are working on providing
servers and 
clients for DHCP, and we should have a multitude to
choose from in 
the near future. The one implementation I have had the
opportunity 
to work with is from Competive Automation, one of the
first companies 
to ship a commercial version of this product. As of
this writing they 
are also the only company I know of that is committed
to addressing 
some of the security problems in the protocol, although
I hope other 
companies will soon follow suit.
DHCP has the promise of enabling system administrators
to make the 
configuration process fully automated, but the unresolved
security 
issues raise a cautionary red flag. A university or
the engineering 
arm of a commercial organization should be able to reap
the benefits, 
while a financial organization will probably want to
wait for good 
vendor extensions or, even better, security amendments
to the protocol 
from the IETF. 
About the Author
Bjorn Satdeva is the president of /sys/admin, inc.,
a consulting 
firm which specializes in large installation system
administration. 
Bjorn is also co-founder and former president of Bay-LISA,
a San Francisco 
Bay Area user's group for system administrators of large
sites. Bjorn 
can be contacted at /sys/admin, inc., 2787 Moorpark
Ave., San Jose, 
CA 95128; electronically at bjorn@sysadmin.com; or by
phone 
at (408) 241-3111.