Intern
Cos'è DNS?
sobes.tech AI
Risposta dell'AI
Il DNS (Sistema dei Nomi di Dominio) è un sistema distribuito di denominazione per computer, servizi o qualsiasi risorsa connessa a Internet o a una rete privata. Associa nomi di dominio leggibili (ad esempio, google.com) a indirizzi IP numerici (ad esempio, 172.217.160.142).
Principio di funzionamento:
- Richiesta: Quando un utente inserisce un nome di dominio nel browser, il client invia una richiesta al server DNS locale (solitamente configurato automaticamente dalla rete).
- Cache: Il server verifica prima la sua cache. Se trova una corrispondenza, restituisce l'indirizzo IP.
- Richiesta ricorsiva: Se non presente in cache, il server invia una richiesta a uno dei server DNS radice.
- Delegazione: Il server radice non conosce l'indirizzo IP, ma indica il server di livello superiore (TLD) per
.com,.org, ecc. - Delegazione: Il server TLD indica il server DNS autorizzato per il dominio specifico (
google.com). - Risolvere: Il server autorizzato trova il record A (Indirizzo) o AAAA (Indirizzo IPv6) per il nome di dominio e restituisce l'indirizzo IP corrispondente.
- Caching e risposta: Il server memorizza nella cache la risposta e invia l'indirizzo IP al client.
- Connessione: Il browser stabilisce una connessione con il server usando l'indirizzo IP ricevuto.
Tipi di record DNS (più comuni):
| Tipo | Descrizione |
|---|---|
| A | Associa il nome host a un indirizzo IPv4. |
| AAAA | Associa il nome host a un indirizzo IPv6. |
| CNAME | Alias per un altro nome canonico. |
| MX | Indica i server di posta per il dominio. |
| NS | Indica i server DNS autorizzati per il dominio. |
| PTR | Usato per la ricerca inversa (IP -> nome). |
| TXT | Contiene informazioni testuali (ad esempio SPF). |
Ruolo del DNS in C#:
Quando si lavora con le reti in C#, si usano spesso le classi dello spazio dei nomi System.Net, come System.Net.Dns, per eseguire query DNS.
// Esempio di recupero di indirizzi IP tramite nome di dominio
using System;
using System.Net;
// Per richiesta sincrona
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
Console.WriteLine(ip);
}
// Esempio di richiesta asincrona (preferibile nelle applicazioni moderne)
async Task ResolveHostAsync()
{
IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
foreach (var ip in asyncIpAddresses)
{
Console.WriteLine(ip);
}
}
// GetHostEntry restituisce informazioni più dettagliate sull'host
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Attende il completamento del task
Console.WriteLine($"Nome host: {hostEntry.HostName}");
Console.WriteLine("Indirizzi:");
foreach (var addr in hostEntry.AddressList)
{
Console.WriteLine($" {addr}");
}
Console.WriteLine("Alias:"); // Nella maggior parte dei casi, lista vuota
foreach (var alias in hostEntry.Aliases)
{
Console.WriteLine($" {alias}");
}
Il DNS è una componente critica di Internet, che permette a utenti e applicazioni di usare nomi di dominio facilmente memorizzabili invece di indirizzi IP numerici.