DNS als het telefoonboek van het internet
Het internet kent veel termen die menig mens de wenkbrauwen doet optrekken. Daarom maken we op ons blog een start met de Internet Academy, een tag waar je terechtkan voor het verhaal achter bepaalde internettermen. Met deze keer in de spotlights, het Domain Name System (DNS).
DNS is een in 1983 bedacht systeem om de communicatie tussen computers gemakkelijker te maken voor mensen. Een van de belangrijkste taken van het DNS is het koppelen van een meercijferig IP-adres aan de domeinnaam van een computer, waarvan bijvoorbeeld een website wordt geserveerd. Dankzij DNS hoef je daarom nooit een IP-adres tijdens het browsen te typen, maar alleen de domeinnaam. Dit maakt DNS vergelijkbaar met het telefoonboek op je mobiel. Zonder telefoonboek zou je alle telefoonnummers van je vrienden moeten onthouden om ze te kunnen bellen.
Hosts File
Toen het internet nog in zijn kinderschoenen stond, maakte elke computer gebruik van een hosts file. Dit is een op je computer opgeslagen tekstbestand waarin domeinnamen en hun bijhorende IP-adressen staan. Bij wijzigingen of aanvullingen moest een hosts file handmatig geüpdatet worden. Naarmate het internet groeide, was dit moeilijk vol te houden. Het zou namelijk een dagtaak worden om je hosts file up-to-date te houden. Op zoek naar een praktischer systeem dus. DNS was geboren.
Een vrij toegankelijk systeem met een verdeelde administratie
DNS heeft gezorgd voor een actueel systeem (de DNS namespace) waartoe iedereen toegang heeft om onder andere het IP-adres dat schuilt achter een domeinnaam op te sporen. Een centrale administratie achter dit systeem ontbreekt. Gelukkig, want net zoals het onmogelijk is om een hosts file up-to-date te houden, is het voor één organisatie onuitvoerbaar om de DNS namespace up-to-date te houden. Dat zou betekenen dat deze organisatie miljarden wijzigingen of aanvullingen per dag moet verwerken en veel macht over het internet krijgt.
Om dit te voorkomen, is de namespace verdeeld over talloze DNS nameservers, in beheer bij verschillende entiteiten. Ze nemen allemaal de verantwoordelijkheid over een klein deel van het grote geheel. Welke nameserver welk gedeelte van de DNS namespace voor zijn rekening moet nemen, wordt bepaald door de DNS-hiërarchie.
Hiërarchie binnen de DNS namespace
In plaats van een platte database (zoals de hosts file) werkt de DNS namespace met een gedistribueerde database, onderverdeeld in meerdere zones. Om de hiërarchie tussen deze zones te begrijpen is de term fully qualified domain name belangrijk. Dit is een voluit geschreven domeinnaam, zoals:
www.transip.nl.
Deze domeinnaam bestaat uit een aantal door punten gescheiden delen, genaamd labels. Elk label staat gelijk aan een niveau binnen de DNS namespace. De hiërarchie snap je het beste wanneer je een domeinnaam van rechts naar links ontleedt.
Achter de laatste punt in een domeinnaam, die door vrijwel niemand geschreven wordt, schuilt het hoogste niveau, ook wel de root genoemd. De root heeft geen domeinnaam, vandaar dat je alleen een punt op het einde ziet met niets erachter. De nameservers die dit niveau onderhouden, worden rootservers genoemd en zijn in beheer bij verschillende grote partijen.
Het eerste niveau domeinnamen dat zich direct onder de root bevindt, bevat de Top Level Domains (TLD). Denk hierbij aan gTLD’s als .com en .shop of ccTLD’s voor landen zoals .nl. SIDN heeft het beheer gekregen over de TLD-nameservers van het nl-domein.
Het tweede niveau domeinnamen dat zich onder de root bevindt, bevat domeinen die vrij te verzinnen zijn en vaak de naam van een organisatie of bedrijf dragen. Denk hierbij aan albertheijn.nl, nu.nl of transip.nl. De nameservers verantwoordelijk voor deze domeinnamen zijn vaak in beheer bij hostingproviders zoals TransIP en dus indirect bij de klanten van hostingproviders.
Het meest linkerlabel is ook vrij te verzinnen, maar wordt vaak www genoemd. Soms zie je ook domeinnamen met nog meer labels, zoals de nieuwswebsite van de BBC: www.bbc.co.uk.
De zoektocht naar een IP-adres
De werking van DNS is makkelijker te begrijpen aan de hand van een praktijkvoorbeeld. Nadat je in je browser www.transip.nl hebt ingetypt, kijkt jouw computer of het IP-adres dat bij deze domeinnaam hoort bekend is in zijn eigen DNS cache of de hosts file.
Als dit niet zo is, dan moet je computer op zoek naar een nameserver die het antwoord wel weet, de authoritative nameserver. Deze zoektocht wordt ook wel name resolution genoemd. Zonder doordacht plan is het zoeken naar een speld in een hooiberg. Daarom schakelt jouw computer hulp in om slim gebruik te maken van de hiervoor besproken DNS-hiërarchie.
Jouw computer, tijdens de name resolution ook wel een DNS client genoemd, zoekt contact op met een DNS resolver. Deze server is meestal in beheer bij je internetprovider, zoals KPN. Aan de resolver stelt je computer de vraag welk IP-adres hoort bij de domeinnaam www.transip.nl. Deze vraag wordt een forward lookup genoemd. Hiernaast geeft hij de opdracht aan de resolver om deze vraag ook aan andere servers te stellen, in het geval de resolver het niet zelf weet. Zo’n opdracht heet een recursive query.
Source: blog.catchpoint.com
DNS resolver
De resolver gaat meteen aan de slag en kijkt eerst in zijn eigen cache om een antwoord te vinden. Als hij niets vindt, is het tijd om de nameservers behorend tot de DNS namespace te raadplegen. Een gestructureerde aanpak is om te beginnen bij het hoogste niveau, de rootservers. Op elke DNS resolver staat een bestand (root hints) waarin de IP-adressen van alle rootservers staan. Via deze adressen wordt contact gemaakt met een rootserver aan wie opnieuw de vraag wordt gesteld welk IP-adres bij de domeinnaam www.transip.nl hoort. Het enige verschil is dat de rootserver niet de opdracht krijgt om verder te vragen, maar alleen om te antwoorden. Zo’n opdracht heet een iterative query.
Rootserver
Aangezien elke nameserver maar een klein deel van de DNS namespace voor zijn rekening neemt, weten we nu al dat het antwoord van de rootserver niet 100% compleet is. Een rootserver kent namelijk alleen IP-adressen binnen zijn eigen DNS zone: die van zichzelf en alle nameservers die zich één niveau lager bevinden, de Top Level Domains. Het antwoord luidt dan ook: ‘Ik weet niet welk IP-adres hoort bij die volledige domeinnaam, maar wel het IP-adres van de nameservers verantwoordelijk voor het nl-domein.’
Er is hier sprake van een delegatie van verantwoordelijkheden naar een lager niveau. De nl-nameserver moet de zoektocht naar het IP-adres achter www.transip.nl voortzetten. Deze delegatie maakt de nameserver duidelijk door de volgende DNS records terug te sturen.
nl. | De domeinnaam waarover het DNS record gaat. |
---|---|
172800 | De tijd in seconden dat het antwoord opgeslagen mag worden in de cache van de DNS resolver (2 dagen in dit geval). |
IN | DNS class: geeft aan dat dit record over het internet gaat. |
NS | Record type: geeft aan dat dit record verwijst naar de domeinnaam van een nameserver. |
ns1.dns.nl. etc. | De domeinnamen van de nameservers verantwoordelijk voor het nl-domein. |
A of AAAA | Record type: geeft aan dat dit record verwijst naar het IP-adres van een nameserver. |
193.176.144.5 etc. | Het IP-adres van een nameserver. |
TLD-server
De resolver neemt vervolgens contact op met de nl-nameserver. Deze server kent zijn eigen IP-adres en onder andere die van alle nameservers verantwoordelijk voor het transip.nl-domein, zolang de domeinnamen van deze nameservers maar eindigen op de .nl-extensie. Het antwoord luidt daarom: ‘Ik weet niet welk IP-adres hoort bij die domeinnaam, maar wel welke nameservers verantwoordelijk zijn voor het transip.nl-domein. Dit zijn hun domeinnamen. Aangezien al hun domeinnamen eindigen op de .nl-extensie, weet ik ook de bijhorende IP-adressen van deze nameservers.’
Authoritative nameserver
Voor de derde keer neemt de resolver contact op met een nameserver, die van TransIP zelf. Deze keer zal hij niet doorgestuurd worden omdat de transip-nameserver in dit scenario de authoritative nameserver is. In het antwoord wat de resolver teruggestuurd krijgt, is daarom alleen een A record genoemd: het IP-adres dat hoort bij de domeinnaam www.transip.nl.
Dit IP-adres wordt tijdelijk (300 seconden in dit geval) opgeslagen in de cache van de resolver, zodat deze bij een volgende identieke vraag van jou of iemand anders direct een antwoord kan geven.
Dit betekent overigens niet dat het complete vragenrondje van de resolver lang duurt. Nadat jij in de browserbalk om een website hebt verzocht, is het IP-adres hiervan al bekend voordat je weer je hand op de muis hebt gelegd. Deze snelle communicatie tussen jouw computer, de DNS resolver en alle nameservers zie je goed terug in de volgende video.
Heb jij nog termen die je graag uitgelegd ziet worden in de Internet Academy? Laat het ons weten in de commentaren hieronder!
Bedankt voor het toelichten!