Sobes.tech
Intern

Co je to DNS?

sobes.tech AI

Odpověď od AI

DNS (Domain Name System) je distribuovaný systém pojmenovávání počítačů, služeb nebo jakýchkoli zdrojů připojených k internetu nebo soukromé síti. Spojuje snadno čitelné doménové názvy (například google.com) s číselnými IP adresami (například 172.217.160.142).

Princip fungování:

  1. Požadavek: Když uživatel zadá doménové jméno do prohlížeče, klient odešle požadavek na místní DNS cache (obvykle nakonfigurováno automaticky sítí).
  2. Cache: Cache nejprve zkontroluje, zda má odpovídající záznam. Pokud ano, vrátí IP adresu.
  3. Rekurzivní požadavek: Pokud ne, cache odešle požadavek na jeden z kořenových DNS serverů.
  4. Delegace: Kořenový server nezná IP adresu, ale ukazuje na server vyšší úrovně (Top-Level Domain, TLD) pro .com, .org atd.
  5. Delegace: TLD server ukazuje na oprávněný DNS server pro konkrétní doménu (google.com).
  6. Řešení: Oprávněný server najde záznam A (Address) nebo AAAA (IPv6 Address) pro doménové jméno a vrátí odpovídající IP adresu cache.
  7. Cache a odpověď: Cache uloží odpověď a odešle IP adresu klientovi.
  8. Připojení: Prohlížeč naváže spojení se serverem podle získané IP adresy.

Typy DNS záznamů (nejčastější):

Typ Popis
A Přiřazuje jméno hostitele k IPv4 adrese.
AAAA Přiřazuje jméno hostitele k IPv6 adrese.
CNAME Alias pro jiné kanonické jméno.
MX Ukazuje poštovní servery pro doménu.
NS Ukazuje oprávněné DNS servery pro doménu.
PTR Používá se pro zpětné vyhledávání (IP -> jméno).
TXT Ukládá textové informace (například SPF).

Role DNS v C#:

Při práci sítě v C# se často používají třídy z prostoru názvů System.Net, například System.Net.Dns pro provádění DNS dotazů.

// Příklad získání IP adres podle doménového jména
using System;
using System.Net;

// Pro synchronní požadavek
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Příklad asynchronního požadavku (preferováno v moderních aplikacích)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry vrací podrobnější informace o hostiteli
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Čeká na dokončení úkolu

Console.WriteLine($"Název hostitele: {hostEntry.HostName}");
Console.WriteLine("Adresy:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Alias:"); // Většinou prázdný seznam
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS je klíčovou součástí internetu, umožňující uživatelům a aplikacím používat snadno zapamatovatelné doménové názvy místo číselných IP adres.