Intern
Ce este DNS?
sobes.tech AI
Răspuns de la AI
DNS (Sistemul de Nume de Domeniu) este un sistem distribuit de denumire pentru calculatoare, servicii sau orice resursă conectată la Internet sau la o rețea privată. Asociază nume de domenii ușor de citit (de exemplu, google.com) cu adrese IP numerice (de exemplu, 172.217.160.142).
Principiul de funcționare:
- Cerere: Când un utilizator introduce un nume de domeniu în browser, clientul trimite o cerere către serverul DNS local (de obicei configurat automat de rețea).
- Cache: Serverul verifică mai întâi cache-ul său. Dacă găsește o potrivire, returnează adresa IP.
- Cerere recursivă: Dacă nu este în cache, serverul trimite o cerere unuia dintre serverele DNS rădăcină.
- Delegare: Serverul rădăcină nu cunoaște adresa IP, dar indică serverul de nivel superior (TLD) pentru
.com,.orgetc. - Delegare: Serverul TLD indică serverul DNS autorizat pentru domeniul specific (
google.com). - Rezolvare: Serverul autorizat găsește înregistrarea A (Adresă) sau AAAA (Adresă IPv6) pentru numele de domeniu și returnează adresa IP corespunzătoare.
- Cache și răspuns: Serverul cachează răspunsul și trimite adresa IP către client.
- Conexiune: Browserul stabilește o conexiune cu serverul folosind adresa IP primită.
Tipuri de înregistrări DNS (cele mai comune):
| Tip | Descriere |
|---|---|
| A | Asociază numele gazdei cu o adresă IPv4. |
| AAAA | Asociază numele gazdei cu o adresă IPv6. |
| CNAME | Alias pentru alt nume canonic. |
| MX | Indică serverele de poștă pentru domeniu. |
| NS | Indică serverele DNS autorizate pentru domeniu. |
| PTR | Folosit pentru căutare inversă (IP -> nume). |
| TXT | Conține informații text (de exemplu, SPF). |
Rolul DNS în C#:
Când lucrați cu rețele în C#, se folosesc adesea clase din spațiul de nume System.Net, cum ar fi System.Net.Dns, pentru a efectua interogări DNS.
// Exemplu de obținere a adreselor IP după numele de domeniu
using System;
using System.Net;
// Pentru solicitare sincronă
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
Console.WriteLine(ip);
}
// Exemplu de solicitare asincronă (preferabil în aplicații moderne)
async Task ResolveHostAsync()
{
IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
foreach (var ip in asyncIpAddresses)
{
Console.WriteLine(ip);
}
}
// GetHostEntry returnează informații mai detaliate despre gazdă
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Așteaptă finalizarea sarcinii
Console.WriteLine($"Numele gazdei: {hostEntry.HostName}");
Console.WriteLine("Adrese:");
foreach (var addr in hostEntry.AddressList)
{
Console.WriteLine($" {addr}");
}
Console.WriteLine("Aliasuri:"); // În cele mai multe cazuri, listă goală
foreach (var alias in hostEntry.Aliases)
{
Console.WriteLine($" {alias}");
}
DNS este o componentă critică a internetului, permițând utilizatorilor și aplicațiilor să folosească nume de domeniu ușor de reținut în loc de adrese IP numerice.