Sobes.tech
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:

  1. 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).
  2. Cache: Il server verifica prima la sua cache. Se trova una corrispondenza, restituisce l'indirizzo IP.
  3. Richiesta ricorsiva: Se non presente in cache, il server invia una richiesta a uno dei server DNS radice.
  4. Delegazione: Il server radice non conosce l'indirizzo IP, ma indica il server di livello superiore (TLD) per .com, .org, ecc.
  5. Delegazione: Il server TLD indica il server DNS autorizzato per il dominio specifico (google.com).
  6. Risolvere: Il server autorizzato trova il record A (Indirizzo) o AAAA (Indirizzo IPv6) per il nome di dominio e restituisce l'indirizzo IP corrispondente.
  7. Caching e risposta: Il server memorizza nella cache la risposta e invia l'indirizzo IP al client.
  8. 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.