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:
- Ž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).
- Cache: Cache najskôr skontroluje, či má zodpovedajúci záznam. Ak áno, vráti IP adresu.
- Rekurzívna žiadosť: Ak nie, cache odošle žiadosť na jeden z koreňových DNS serverov.
- Delegácia: Koreňový server nepozná IP adresu, ale ukazuje na server vyššej úrovne (Top-Level Domain, TLD) pre
.com,.orgatď. - Delegácia: TLD server ukazuje na oprávnený DNS server pre konkrétnu doménu (
google.com). - 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.
- Cache a odpoveď: Cache uloží odpoveď a odošle IP adresu klientovi.
- 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.