Sobes.tech
Intern

Čo je DNS?

sobes.tech AI

Odpoveď od AI

DNS (Systém názvov domén) je distribuovaný systém pomenovania pre počítače, služby alebo akékoľvek zdroje pripojené k internetu alebo súkromnej sieti. Spája ľahko čitateľné doménové názvy (napríklad google.com) s číselnými IP adresami (napríklad 172.217.160.142).

Princíp fungovania:

  1. Žiadosť: Keď používateľ zadá doménové meno do prehliadača, klient odošle žiadosť na lokálnu DNS cache (zvyčajne automaticky nakonfigurovanú sieťou).
  2. Cache: Cache najskôr skontroluje, či má zodpovedajúci záznam. Ak áno, vráti IP adresu.
  3. Rekurzívna žiadosť: Ak nie, cache odošle žiadosť na jeden z koreňových DNS serverov.
  4. Delegácia: Koreňový server nepozná IP adresu, ale ukazuje na server vyššej úrovne (Top-Level Domain, TLD) pre .com, .org atď.
  5. Delegácia: TLD server ukazuje na oprávnený DNS server pre konkrétnu doménu (google.com).
  6. Riešenie: Oprávnený server nájde záznam A (Address) alebo AAAA (IPv6 Address) pre doménové meno a vráti zodpovedajúci IP adresu do cache.
  7. Cache a odpoveď: Cache uloží odpoveď a odošle IP adresu klientovi.
  8. Pripojenie: Prehliadač nadviaže spojenie so serverom pomocou získanej IP adresy.

Typy DNS záznamov (najčastejšie):

Typ Popis
A Spája meno hostiteľa s IPv4 adresou.
AAAA Spája meno hostiteľa s IPv6 adresou.
CNAME Alias pre iné kanonické meno.
MX Ukazuje poštové servery pre doménu.
NS Ukazuje oprávnené DNS servery pre doménu.
PTR Používa sa pre spätné vyhľadávanie (IP -> meno).
TXT Ukladá textové informácie (napríklad SPF).

Úloha DNS v C#:

Pri práci s sieťou v C# sa často používajú triedy z priestoru mien System.Net, ako je System.Net.Dns na vykonávanie DNS dopytov.

// Príklad získania IP adries podľa doménového mena
using System;
using System.Net;

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

// Príklad asynchrónnej požiadavky (preferované v moderných aplikáciách)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry vracia podrobnejšie informácie o hostiteľovi
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Čaká na dokončenie úlohy

Console.WriteLine($"Názov hostiteľa: {hostEntry.HostName}");
Console.WriteLine("Adresy:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliasy:"); // Vo väčšine prípadov prázdny zoznam
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

DNS je kľúčovou súčasťou internetu, ktorá umožňuje používateľom a aplikáciám používať ľahko zapamätateľné doménové názvy namiesto číselných IP adries.