Intern
Wat is DNS?
sobes.tech AI
Antwoord van AI
DNS (Domain Name System) is een gedistribueerd naamgevingssysteem voor computers, services of elke resource die verbonden is met het internet of een privé-netwerk. Het koppelt gemakkelijk leesbare domeinnamen (bijvoorbeeld google.com) aan numerieke IP-adressen (bijvoorbeeld 172.217.160.142).
Werking principe:
- Aanvraag: Wanneer een gebruiker een domeinnaam invoert in de browser, stuurt de client een verzoek naar de lokale DNS-server (meestal automatisch geconfigureerd door het netwerk).
- Cache: De server controleert eerst zijn cache. Als er een overeenkomst wordt gevonden, geeft hij het IP-adres terug.
- Recursieve aanvraag: Als het niet in de cache staat, stuurt de server een verzoek naar een van de root DNS-servers.
- Delegatie: De root-server kent het IP-adres niet, maar wijst naar de bovenliggende domeinserver (TLD) voor
.com,.org, enz. - Delegatie: De TLD-server wijst naar de bevoegde DNS-server voor het specifieke domein (
google.com). - Resolutie: De bevoegde server vindt de A (Adres) of AAAA (IPv6-adres) record voor de domeinnaam en geeft het bijbehorende IP-adres terug.
- Caching en antwoord: De server cachet het antwoord en stuurt het IP-adres naar de client.
- Verbinding: De browser maakt verbinding met de server via het ontvangen IP-adres.
Typen DNS-records (meest voorkomend):
| Type | Beschrijving |
|---|---|
| A | Koppelt de hostnaam aan een IPv4-adres. |
| AAAA | Koppelt de hostnaam aan een IPv6-adres. |
| CNAME | Alias voor een andere canonieke naam. |
| MX | Geeft de mailservers voor het domein aan. |
| NS | Geeft de bevoegde DNS-servers voor het domein aan. |
| PTR | Wordt gebruikt voor reverse lookup (IP -> naam). |
| TXT | Bevat tekstuele informatie (bijvoorbeeld SPF). |
Rol van DNS in C#:
Bij het werken met netwerken in C# worden vaak klassen uit de namespace System.Net gebruikt, zoals System.Net.Dns, om DNS-queries uit te voeren.
// Voorbeeld van het verkrijgen van IP-adressen via domeinnaam
using System;
using System.Net;
// Voor synchronisatie
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
Console.WriteLine(ip);
}
// Voorbeeld van asynchrone query (voorkeur in moderne applicaties)
async Task ResolveHostAsync()
{
IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
foreach (var ip in asyncIpAddresses)
{
Console.WriteLine(ip);
}
}
// GetHostEntry geeft meer gedetailleerde informatie over de host
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Wacht tot de taak is voltooid
Console.WriteLine($"Hostnaam: {hostEntry.HostName}");
Console.WriteLine("Adressen:");
foreach (var addr in hostEntry.AddressList)
{
Console.WriteLine($" {addr}");
}
Console.WriteLine("Aliassen:"); // In de meeste gevallen leeg
foreach (var alias in hostEntry.Aliases)
{
Console.WriteLine($" {alias}");
}
DNS is een cruciaal onderdeel van het internet dat gebruikers en applicaties in staat stelt gemakkelijk te onthouden domeinnamen te gebruiken in plaats van numerieke IP-adressen.