Development of the DHCP Protocol
The Dynamic Host Configuration Protocol (DHCP) was first defined as a standards-track protocol in RFC 1531 in October 1993, as an extension to the Bootstrap Protocol (BOOTP), a network protocol used by a network client to obtain an IP address from a configuration server. The motivation for extending BOOTP was that BOOTP required manual intervention to add configuration information for each client, and did not provide a mechanism for reclaiming used IP addresses. Many worked to clarify the protocol as it gained popularity, and in 1997 RFC 2131 was released, and remains the standard for IPv4 networks. To support the IPv6 protocol, DHCPv6 was introduced and documented in RFC 3315.
DHCPv6 is not just DHCPv4 but for IPv6 addresses. DHCPv6 is a significantly different protocol. For example, the primary client identifer in DHCPv4 is the MAC address: in DHCPv6 the primary identifier is DUID. In DHCPv4 there is an assumption that every device will have exactly one address. DHCPv6 devices can request multiple addresses. RFC 3633 added a DHCPv6 mechanism for prefix delegation, a powerful feature that has no equivalent in DHCPv4. DHCPv6 was further extended to provide configuration information to clients configured using stateless address auto-configuration in RFC 3736.
Currently there are close to 140 DHCPv6 options defined, with many more undergoing the standardization process. To see a list of approved options and message types, please visit IANA’s website.
ISC Activities in the IETF
ISC has participated vigorously in the IETF specification process for DHCP over the years. A number of the major RFCs for the DHCP protocol were authored by current and former ISC staff, including several DHCPv6 failover drafts, both the DS-Lite and DHCP 4o6 transition drafts, and the massive RFC 8415, a DHCPv6 “bis” specification document that took eight authors four years to complete (https://www.isc.org/rfcs/). Tomek Mrugalski was co-chair of the DHC working group in the IETF for many years, before stepping down in 2020.
ISC’s DHCP Implementations
ISC currently maintains two major DHCP software systems. The ISC DHCP software system was originally written for Internet Software Consortium (later renamed Internet Systems Consortium) by Ted Lemon and Vixie Enterprises as a reference implementation for the new DHC protocol. The ISC DHCP distribution includes a client, relay, and server. Kea is a completely new DHCP implementation from ISC that is intended to eventually replace the aging ISC DHCP. Both implementations adhere faithfully to the IETF standards for the protocol and both are open source.
ISC DHCP, aka dhcpd
ISC DHCP 1.0 was released in June 1998 and was followed a year later with 2.0. Version 3.0 was posted in 2001 and not replaced with 4.0 until 2007. The Version 3.x branch added support for the IETF failover standard and asynchronous DDNS updates; version 4.0 added IPv6 support. All versions prior to 4 are now EOL. ISC is still supporting 4.1.x because it is a smaller footprint than the more recent versions, and is useful where a small codebase is important, but most users are advised to use the much newer 4.4 version. The project switched from the ISC license to the MPL2.0 license with version 4.4.1. The Wikipedia article on ISC DHCP provides a good description of the software’s key features.
Since 2004, a dedicated ISC engineering team has been maintaining and developing ISC DHCP. Former ISC employees Ted Lemon and Shawn Routhier made significant contributions to ISC DHCP’s development over many years. Thomas Markwalder has been the principal maintainer since 2016; Francis Dupont has been a significant contributor to ISC DHCP since 2007 and still participates in ISC DHCP’s maintenance. In addition to these core team members, community contributors have contributed an LDAP lease backend and a script for displaying leases. Several of the operating system packagers of ISC DHCP actively contributed issue reports and patches over the years. ISC DHCP has been widely embedded in other products, including home gateways, routers (relay implementation), and IPAMS. Many of the *nix operating system DHCP clients are believed to be based on the ISC DHCP client code, although they have diverged from the ISC open source distribution over the years. ISC hosts a community support mailing list, dhcp-users@lists.isc.org, where experienced users provide free advice and support.
In 2019, ISC released a Kea Migration utility, essentially a modified version of ISC DHCP written by Francis Dupont, that helps users migrate a configuration file from ISC DHCP to Kea by translating the common elements to Kea configuration syntax.
The Kea DHCP server
The BIND 10 application framework was designed originally to support multiple applications, specifically DNS and DHCP. When ISC ended active work on the DNS portion of BIND 10 in 2014, the DHCP application development continued. The first release after the DNS portion of the project was discontinued was known internally as the “BIND10-ectomy” release, in which elements of the application framework that were deemed excessive for a single application were removed or downsized. Since then the Kea DHCP server has been in active development at ISC. Kea was originally written by Tomek Mrugalski and Marcin Siodelski, but the core team has grown since then. The principal maintainers and contributors are listed in the project’s authors file here: https://gitlab.isc.org/isc-projects/kea/-/blob/master/AUTHORS.
Perhaps the most significant difference between Kea and ISC DHCP was the committment of the Kea developers to a modern REST management API. Kea was also designed to be modular, with separate DHCPv4, DHCPv6, and Dynamic DNS (DDNS) daemons, and separate optional libraries to extend the core DHCP server with extra features. ISC DHCP is comparatively monolithic. Unlike ISC DHCP, the Kea distribution includes only a DHCP server; there is no accompanying client or relay. ISC intends the Kea DHCP server to eventually replace ISC DHCP, which is no longer under active development.
DS-Lite and AFTR
In 2010 ISC published the “AFTR” open source, for a component of a DS-Lite architecture specified in RFC 6333. AFTR is/was a proof-of-concept implementation and is unmaintained, but the source is still available at https://downloads.isc.org/isc/aftr/. You may find our blog post interesting.
perfdhcp
perfdhcp
is a DHCP benchmarking tool distributed as part of the Kea DHCP sources.
perfdhcp
provides a way to measure the performance of DHCP servers by generating large amounts of traffic from multiple simulated clients. It can be used to test both IPv4 and IPv6 servers, and provides statistics on response times and the number of requests that are dropped.
By default, tests are run using the full four-packet exchange sequence (DORA for DHCPv4, SARR for DHCPv6). There are variations on this normal traffic scenario. Another scenario simulates an overwhelming flood of traffic, with a high proportion of retries, such as might occur when re-initializing a CMTS or recovering from a power outage. When running a performance test, perfdhcp
exchanges packets with the server under test as fast as possible, unless the -r parameter is used to limit the request rate. The length of the test can be limited by setting a threshold on any or all of the requests made by perfdhcp
, the elapsed time, or the number of requests dropped by the server. By default, if there is no response received within one second, a response is considered lost and perfdhcp
continues with other transactions.
Anterius was an ISC Google Summer of Code project that demonstrated the opportunity to develop a lightweight management dashboard for Kea. This project, developed by Jerin John, was based on a graphical dashboard developed for ISC DHCP (GLASS, https://github.com/Akkadius/glass-isc-dhcp, by Chris Miles). Anterius is not maintained, but the original source code remains available on Github.
Stork
Stork is a new (its first development release came in 2020) ISC management dashboard that provides the functionality of Anterius in a more solid, extensible web application framework. Stork is under active development at ISC in ISC’s GitLab repository: https://gitlab.isc.org/isc-projects/stork. Stork integrates with the popular Prometheus time-series database and the Grafana data visualization tool.