Sobes.tech
Intern

Was ist DNS?

sobes.tech KI

Antwort von AI

DNS (Domain Name System) ist ein verteiltes Namensgebungssystem für Computer, Dienste oder beliebige Ressourcen, die mit dem Internet oder einem privaten Netzwerk verbunden sind. Es ordnet menschenlesbare Domainnamen (z.B. google.com) numerischen IP-Adressen (z.B. 172.217.160.142) zu.

Funktionsprinzip:

  1. Anfrage: Wenn ein Benutzer einen Domainnamen im Browser eingibt, sendet der Client eine Anfrage an den lokalen DNS-Server (meist automatisch vom Netzwerk konfiguriert).
  2. Cache: Der Server prüft zunächst seinen Cache. Wenn eine Übereinstimmung gefunden wird, gibt er die IP-Adresse zurück.
  3. Rekursive Anfrage: Wenn nicht im Cache, sendet der Server eine Anfrage an einen der Root-DNS-Server.
  4. Delegierung: Der Root-Server kennt die IP-Adresse nicht, zeigt aber auf den Top-Level-Domain-Server (TLD) für .com, .org usw.
  5. Delegierung: Der TLD-Server zeigt auf den autorisierten DNS-Server für die spezifische Domain (google.com).
  6. Auflösung: Der autorisierte Server findet den A- (Address) oder AAAA- (IPv6-Adresse) Eintrag für den Domainnamen und gibt die entsprechende IP-Adresse zurück.
  7. Caching und Antwort: Der Server cached die Antwort und sendet die IP-Adresse an den Client.
  8. Verbindung: Der Browser stellt eine Verbindung zum Server mit der erhaltenen IP-Adresse her.

Typen von DNS-Einträgen (häufigste):

Typ Beschreibung
A Ordnet den Hostnamen einer IPv4-Adresse zu.
AAAA Ordnet den Hostnamen einer IPv6-Adresse zu.
CNAME Alias für einen anderen kanonischen Namen.
MX Gibt die Mail-Server für die Domain an.
NS Gibt die autorisierten DNS-Server für die Domain an.
PTR Wird für Reverse-Lookup (IP -> Name) verwendet.
TXT Speichert Textinformationen (z.B. SPF).

Rolle des DNS in C#:

Bei der Arbeit mit Netzwerken in C# werden häufig Klassen aus dem Namensraum System.Net verwendet, wie System.Net.Dns, um DNS-Anfragen durchzuführen.

// Beispiel zum Abrufen von IP-Adressen anhand eines Domainnamens
using System;
using System.Net;

// Für synchrone Anfrage
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Beispiel für asynchrone Anfrage (bevorzugt in modernen Anwendungen)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry gibt detailliertere Informationen über den Host zurück
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Warten auf Abschluss der Aufgabe

Console.WriteLine($"Host-Name: {hostEntry.HostName}");
Console.WriteLine("Adressen:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliase:"); // In den meisten Fällen eine leere Liste
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS ist eine kritische Komponente des Internets, die es Benutzern und Anwendungen ermöglicht, leicht merkbare Domainnamen anstelle von numerischen IP-Adressen zu verwenden.