# Dynamic Host Configuration Protocol

Dynamic Host Configuration Protocol (DHCP) is een computerprotocol dat beschrijft hoe een computer dynamisch zijn netwerkinstelling van een DHCP-server kan verkrijgen. Het DHCP-protocol is gebaseerd op het Internet Protocol IP en werkt met UDP-pakketten.

## Introductie

Bij DHCP is het principe dat toestellen in een IP-netwerk geen vast geconfigureerd IP-adres hebben, maar hun IP-adres dynamisch verkrijgen van een centraal beheerde DHCP-server. De server, die zelf een vast IP-adres heeft, beheert hiertoe een "pool" van beschikbare IP-adressen, veelal in de private address space volgens RFC 1918. Na opstarten van de DHCP-server zijn die adressen vrij en kunnen ze aangevraagd worden door de toestellen op het netwerk. Door de aanvragen worden de IP-adressen toebedeeld, uiteraard in aantal beperkt tot de grootte van de pool.
Toestellen die op het netwerk komen, kunnen via een aanvraagsequentie een IP-adres verkrijgen dat beperkt geldig is, voor de ingestelde geldigheidsduur, de "lease time". Toestellen die het netwerk verlaten, dienen hun adres vrij te geven. Dit gebeurt uiteraard niet in alle gevallen. Het adres komt echter uiteindelijk toch weer vrij door het verlopen van de geldigheidsduur.
DHCP-servers kunnen voor bepaalde toestellen een vast uit te reiken IP-adres geconfigureerd hebben. Zo kan het bv. zijn dat binnen een bedrijf alle netwerkprinters een vast IP-adres krijgen, dit terwijl andere toestellen een willekeurig adres uit de pool toebedeeld krijgen.

## Oorsprong en classificatie

DHCP vindt zijn oorsprong in het BootP-protocol, dat oorspronkelijk ontworpen was om computers hun besturingssysteem vanaf het netwerk te laten laden. Tegenwoordig bevindt BootP zich net als DHCP in de TCP/IP-suite, om precies te zijn in de internet-laag. Men kan deze laag vergelijken met de netwerklaag in het OSI-model, ofwel laag 3.

## Voordelen

Gebruik van DHCP heeft belangrijke voordelen voor het netwerkbeheer:
* Men hoeft niet op elk toestel afzonderlijk een IP-configuratie te maken, maar kan de configuratie voor alle toestellen centraal beheren.
* Bij wijzigingen van de netwerkconfiguratie, bv. het gebruiken van andere subnetten, hoeft men alleen centraal een aanpassing te doen.
* Bij verplaatsing van een toestel, bv. naar een andere afdeling met een ander subnet, hoeft men op het toestel geen wijzigingen door te voeren.
* Met DHCP kan men bepaalde regels, "policies", realiseren, bv. door een toestel slechts gedurende een bepaalde tijd een IP-adres te geven. Ook kan men het toegewezen adres regelmatig wijzigen, om de veiligheid te bevorderen. Hier staat echter wel tegenover dat er geen vaste een-op-eenrelatie meer bestaat tussen MAC-adres en IP-adres, wat de traceerbaarheid en daardoor de veiligheid dan weer negatief kan beïnvloeden.
* Men kan efficiënter omgaan met IP-adressen. Stel dat er in een afdeling 1000 mobiele toestellen zijn, maar er maximaal slechts 200 tegelijk aanwezig kunnen zijn. Bij statische allocatie zou men 1000 adressen moeten gebruiken. Bij dynamische allocatie kan men daarentegen gebruikmaken van een "pool" van 200 adressen. Met name voor dienstenaanbieders die publieke IP-adressen aan gebruikers moeten geven, is dit traditioneel zeer belangrijk. Wel neemt het belang in zekere zin af doordat veel toestellen continu of quasi-continu verbonden zijn. Aan de andere kant is het aantal IP-adressen waarover een aanbieder beschikt beperkt en zijn er ook kosten aan verbonden, waardoor het van groot belang blijft hier efficiënt mee om te gaan.

## Protocol

Een toestel dat een IP-adres wenst te verkrijgen, dient daartoe een sequentie van aanvraag te starten. Bij een correcte configuratie van het netwerk zal ten minste één DHCP-server op de aanvraag moeten reageren. Het aanvragende toestel kan vervolgens de finale aanvraag doen, waarop de aanbiedende server normaal bevestigend zal antwoorden. Vanaf dat moment maakt het aanvragende toestel deel uit van het netwerk ook op de internetlaag en kan het op IP-pakketten gebaseerde communicatie uitvoeren. Het is mogelijk dat er zich meer dan één DHCP-server op het netwerk bevindt, voor verschillende subnetten.
Het volledige proces ter verkrijging van de netwerkinstellingen bestaat uit een sequentie van vier aanvragen en reacties. Dit proces staat bekend onder de afkorting DORA. Discover Offer Request Acknowledge.
Hieronder het verloop van een succesvolle aanvraag, met vermelding van de naam van de boodschap binnen het DHCP-protocol tussen haakjes:
* DHCP discovery (DHCPDISCOVER): het aanvragende toestel, de client, stuurt een netwerkpakket gericht aan alle computers binnen het eigen Ethernet-segment door het gebruik van broadcast. Hiervoor gebruikt de aanvrager ofwel het globale broadcastadres 255.255.255.255, dan wel het broadcastadres van het netwerksegment waarop het zich bevindt. Alle toestellen in het betreffende netwerksegment ontvangen dit DHCPDISCOVER-pakket.
* DHCP offer (DHCPOFFER): uitsluitend de DHCP-server of eventueel DHCP-servers in het netwerk behoort/behoren te reageren op het DHCPDISCOVER-pakket. Elke DHCP-server die wenst te antwoorden reserveert een nog vrij IP-adres en stuurt een DHCPOFFER pakket terug naar het MAC-adres van de aanvrager, met vermelding van het aangeboden IP-adres.
* DHCP request (DHCPREQUEST): het aanvragende toestel weet nu van welke server of servers deze het IP-adres kan verkrijgen. Het toestel gebruikt DHCPREQUEST om daadwerkelijk de aanvraag te doen bij de eerst reagerende DHCP-server en mogelijke overige DHCP-servers te laten weten dat het een IP-adres heeft verkregen via een andere DHCP-server. Dit gebeurt dientengevolge net als bij DHCPDISCOVER met een broadcast-pakket, dat door alle DHCP-servers wordt ontvangen.
* DHCP acknowledgement (DHCPACK): de DHCP-server bevestigt hiermee de aanvraag. Het verzonden DHCPACK-pakket bevat nog eens alle informatie met de netwerkinstellingen. Het toestel dat het nieuwe IP-adres heeft ontvangen, zou op dit punt een test moeten uitvoeren om zeker te stellen dat er toch geen andere toestellen hetzelfde IP-adres in bezit hebben.
De client gebruikt dus de gegevens van de eerste DHCP-server waarvan hij antwoord krijgt en gebruikt deze gegevens om zijn netwerkverbinding in te stellen. De betreffende computer heeft nu een uniek IP-adres en kan derhalve vervolgens communiceren met andere toestellen.
Uiteraard is het ook mogelijk dat de aanvraag niet slaagt, door een fout of een reeds bestaande allocatie. Hiertoe dienen de volgende DHCP-berichten:
* DHCP negative acknowledgement (DHCPNAK): bij een fout zal de DHCP-server antwoorden met een DHCP-NAK-pakket.
* DHCP decline (DHCPDECLINE): het clienttoestel rapporteert terug naar de DHCP-server dat het netwerkadres reeds in gebruik is.
Een clienttoestel kan het in gebruik zijnde IP-adres ook weer vrijgeven:
* DHCP release (DHCPRELEASE): het clienttoestel rapporteert terug naar de DHCP-server dat het netwerkadres vrijgegeven mag worden en annuleert hierdoor de huidige leasetime.
Gegevens die onder meer (kunnen) worden doorgestuurd zijn:
* Een uniek netwerknummer (IP-adres);
* Welk(e) adres(sen) in het netwerk een gateway is/zijn, waarmee er verbinding is met een ander netwerk, zoals het internet (niet noodzakelijk);
* Wat de naamserver(s) (DNS-servers) is/zijn (niet noodzakelijk);
* Hoe groot het netwerk is, dus onder welke omstandigheden de doelcomputer binnen het netwerk ligt of via de gateway benaderd moet worden. Dit wordt de netmask genoemd.
* De geldigheidsduur (leasetime of looptijd)

## Handmatig

Het is niet noodzakelijk om DHCP te gebruiken. Een computer kan ook handmatig van de correcte instellingen worden voorzien. In de praktijk echter vinden veel systeembeheerders DHCP eenvoudiger, omdat zij dan niet zelf alle computers in het netwerk handmatig hoeven te configureren. Ook als er zich wijzigingen in het netwerk voordoen, hoeft alleen de DHCP-server van de nieuwe instellingen te worden voorzien.
In veel grote netwerken wordt juist wél gewerkt met vaste IP-nummers (en dus geen DHCP), om op die wijze voor tienduizenden PC's de instellingen eenmalig handmatig te verrichten. Daarmee kunnen ook eenvoudiger routes van het ene netwerkapparaat (PC) naar het andere (een printer bijvoorbeeld) worden opgegeven, op basis van het IP-adres. Een van de grootste netwerken in Nederland (Defensie MULAN) is op deze wijze ingericht. Bijkomend voordeel op gebied van beveiliging is dat IP-pakketten van onbekende MAC-adressen meteen kunnen worden gedetecteerd.

### ISP's

Internet Service Providers maken ook graag gebruik van DHCP. Zo konden ze het aantal benodigde IP-adressen beperken, omdat niet al hun abonnees tegelijkertijd verbinding maken, en daarnaast de configuratie van de gebruikersapparatuur eenvoudig houden, wat zorgt voor flexibiliteit bij de inrichting van het netwerk. Bij tijdelijke verbindingen zoals inbelverbindingen zijn niet meer IP-adressen nodig dan er modems dat bij de ISP aanwezig zijn. Dit is door de landelijke uitrol van ADSL en kabelinternet achterhaald. Doordat veel computers met ADSL-, glasvezel- of kabelinternet continu op het internet aangesloten zijn (als het modem thuis aan blijft staan), hebben ze in de praktijk vaak lang hetzelfde IP-adres, ook als daar door de ISP geen garanties voor worden gegeven.

## Looptijd

Aan de DHCP-gegevens is een bepaalde leasetime of looptijd gekoppeld, variërend van enkele minuten tot enkele weken. In die tijd is het IP-adres voor deze specifieke computer gereserveerd. Voordat de leasetijd verlopen is moet de computer opnieuw een aanvraag indienen, en krijgt dan eventueel een ander IP-adres (maar meestal hetzelfde IP-adres). Als een computer, of netwerkverbinding, herstart tijdens de looptijd van een lease voorziet het protocol in een voortzetting van het reeds verkregen IP-nummer zodat de eerste stap (initiële aanvraag) overgeslagen wordt en een verlenging gebruikt wordt. Voor het opnieuw uitgeven van IP-adressen gebruikt de DHCP-server een groep adressen ('pool'). Met de standaardinstellingen van consumentenapparatuur heeft die pool een omvang die varieert van enkele tientallen tot enkele honderden adressen.

## Breedband

In het geval van breedband-internetverbindingen, zoals kabelinternet en ADSL, wordt vaak ook met DHCP gewerkt, hoewel een aantal providers ook vaste adressen uitdeelt. Mensen met een dynamisch IP-adres zullen iets meer moeite moeten doen als zij een server willen draaien. Hoewel hun IP-adres over het algemeen hetzelfde zal blijven (toegewezen op basis van hun MAC-adres), kan het zijn dat het toch verandert. Dit gebeurt bijvoorbeeld als de host langere tijd offline is geweest (en het IP-adres is vrijgegeven of zelfs al toegewezen aan iemand anders), of als er bijvoorbeeld een andere netwerkkaart wordt geplaatst. De ISP herkent dan het MAC-adres van de host niet meer. Eventuele DNS-instellingen moeten dan worden aangepast. Dit kan handmatig of automatisch door middel van een script (zoals DynDNS) gebeuren.

## Problemen bij DHCP

Wanneer de computer niet als zodanig is ingesteld dat deze zelf aan de DHCP-server verlenging van de looptijd vraagt, of er is langere tijd geen DHCP-server beschikbaar, wordt de verbinding met een regelmaat van een half uur tot een dag tijdelijk verbroken. Dit kan bij applicaties als IRC hinderlijk zijn. Ook het onjuist instellen van de DHCP-server en/of de overige netwerkapparatuur kan problemen geven: indien een netwerkgebruiker een IP-adres gebruikt dat binnen de pool van de DHCP-server ligt, dan zijn er op een gegeven moment twee netwerkapparaten met hetzelfde IP-adres. Hierdoor ontstaan op ethernetverbindingen veel collisions en haperende apparatuur. Het reserveren van adresgebieden is van groot belang. Indien de client geen DHCP server kan bereiken (of niet tijdig kan bereiken) gaat de client gebruikmaken van APIPA.

## DHCP Authentication

Om DHCP veiliger te maken werd in juni 2001 authenticatie voor DHCP-berichten bedacht. DHCP Authentication is beschreven in RFC 3118 en is een verbetering in de beveiliging die de normale DHCP-berichten met geverifieerde servers/clients vervangt. Clients en servers controleren de afkomst van de bron met verificatie-informatie en berichten. Indien ongeldig zal de bron geweigerd worden. Een DHCP Authentication-server kan tevens overweg met clients die alleen het standaard DHCP-protocol ondersteunen (backwards compatible).

## DHCP Relay Agent

In grotere, typisch hiërarchisch georganiseerde netwerkomgevingen met vele subnetten en verschillende IP-reeksen is het niet efficiënt om één DHCP-server per LAN/subnet op te zetten en te onderhouden. Voor dergelijke netwerken zal men er daarom de voorkeur aan geven om te werken met een of meer centrale DHCP-servers die IP-adressen kunnen toewijzen voor verschillende LANs/subnetten. Dit betekent echter dat DHCP-verkeer tussen de verschillende LANs en de DHCP-server mogelijk moet zijn, waarbij er toestellen op hogere lagen dan de datalinklaag, zoals routers, moeten worden gepasseerd. Om dit toe te laten kan men werken met DHCP-relay-agents.
Een DHCP-relay-agent communiceert met een DHCP-server in een ander IP-netwerk (segment) en fungeert als een proxy voor DHCP-broadcastberichten die moeten worden gerouteerd naar dat andere IP-netwerk. Hierdoor verloopt het DHCP-verkeer, in verschillende netwerken, transparanter.
Om de DHCP-relay-agent goed DHCP-verkeer te laten uitwisselen is het essentieel om zowel een DHCP-server als een DHCP-relay-agent te hebben in de andere IP-netwerken. De DHCP-relay-agent wordt geïnstalleerd op een geschikt apparaat (router, modem of server) dat het protocol ondersteunt.
Het gebruik van een DHCP-relay-agent compliceert op zich de opzet en is daardoor doorgaans alleen geëigend voor grote, complexe netwerkomgevingen met vele subnetten, waar centralisatie meer voordelen biedt dan het behouden van eenvoud op het niveau van de individuele netwerksegmenten.

## DHCP MAC Binding

DHCP wijst een willekeurig IP-adres toe aan elk apparaat in het netwerk. Om te voorkomen dat een apparaat steeds een ander IP-adres krijgt bestaat er MAC-binding (Bind IP to MAC). In feite doet MAC-binding niets anders dan dit: Een MAC-adres met een vast IP-adres reserveren in het netwerk met een leasetime die nooit verloopt. Het grote voordeel hiervan is dat er een betere controle is op de apparaten binnen een netwerk en het beheer met DHCP doeltreffender is. MAC-binding kent twee mogelijkheden:
* Normal mode: Het apparaat met MAC-adres krijgt steeds hetzelfde IP-adres en zal niet verlopen.
* Strict mode: Het apparaat met MAC-adres krijgt steeds hetzelfde IP-adres en zal niet verlopen. Niet geautoriseerde apparaten krijgen wel een tijdelijk IP-adres maar kunnen niet de router/server bereiken waarop MAC Binding werkt. Toegang tot internet wordt tevens geblokkeerd.

## Voorbeeld bij ADSL

Een mogelijke instelling zoals bij ADSL gebruikt kan worden: 10.0.0.0
10.0.0.1 standaard gateway (ADSL-modem)
10.0.0.150 - 10.0.0.200 pool van uit te geven IP-adressen
10.0.0.255 broadcastadres (bericht aan alle netwerkstations in dit segment)
Apparatuur die via DHCP werkt, krijgt van de DHCP-server op aanvraag een adres uit de adressen-pool. Overige apparatuur op het netwerk dat niet met DHCP werkt (dus handmatig of fabrieksmatig is ingesteld) moeten buiten dit adressen-gebied blijven. Een mogelijke indeling zou kunnen zijn:
10.0.0.10 - 10.0.0.50 netwerkopslagapparatuur (NAS) en netwerkprinters
10.0.0.51 - 10.0.0.100 PC's op vaste adressen