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í:
- 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í).
- Cache: Cache nejprve zkontroluje, zda má odpovídající záznam. Pokud ano, vrátí IP adresu.
- Rekurzivní požadavek: Pokud ne, cache odešle požadavek na jeden z kořenových DNS serverů.
- Delegace: Kořenový server nezná IP adresu, ale ukazuje na server vyšší úrovně (Top-Level Domain, TLD) pro
.com,.orgatd. - Delegace: TLD server ukazuje na oprávněný DNS server pro konkrétní doménu (
google.com). - Ř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.
- Cache a odpověď: Cache uloží odpověď a odešle IP adresu klientovi.
- 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.