Sobes.tech
Intern

O que é DNS?

sobes.tech IA

Resposta da IA

O DNS (Sistema de Nomes de Domínio) é um sistema distribuído de nomenclatura para computadores, serviços ou quaisquer recursos ligados à Internet ou a uma rede privada. Associa nomes de domínio legíveis (por exemplo, google.com) a endereços IP numéricos (por exemplo, 172.217.160.142).

Princípio de funcionamento:

  1. Pedido: Quando um utilizador insere um nome de domínio no navegador, o cliente envia um pedido ao servidor DNS local (geralmente configurado automaticamente pela rede).
  2. Cache: O servidor verifica primeiro o seu cache. Se encontrar uma correspondência, devolve o endereço IP.
  3. Pedido recursivo: Se não estiver no cache, o servidor envia um pedido a um dos servidores DNS raiz.
  4. Delegação: O servidor raiz não conhece o endereço IP, mas indica o servidor de nível superior (TLD) para .com, .org, etc.
  5. Delegação: O servidor TLD indica o servidor DNS autorizado para o domínio específico (google.com).
  6. Resolução: O servidor autorizado encontra o registo A (Endereço) ou AAAA (Endereço IPv6) para o nome de domínio e devolve o endereço IP correspondente ao servidor DNS.
  7. Cache e resposta: O servidor cacheia a resposta e envia o endereço IP ao cliente.
  8. Conexão: O navegador estabelece uma conexão com o servidor usando o endereço IP recebido.

Tipos de registos DNS (mais comuns):

Tipo Descrição
A Associa o nome do host a um endereço IPv4.
AAAA Associa o nome do host a um endereço IPv6.
CNAME Alias para outro nome canónico.
MX Indica os servidores de correio para o domínio.
NS Indica os servidores DNS autorizados para o domínio.
PTR Usado para pesquisa inversa (IP -> nome).
TXT Contém informações de texto (por exemplo, SPF).

Papel do DNS em C#:

Ao trabalhar com redes em C#, costuma-se usar classes do espaço de nomes System.Net, como System.Net.Dns para fazer consultas DNS.

// Exemplo de obtenção de endereços IP por nome de domínio
using System;
using System.Net;

// Para consulta síncrona
IPAddress[] ipAddresses = Dns.GetHostAddresses("www.google.com");
foreach (var ip in ipAddresses)
{
    Console.WriteLine(ip);
}

// Exemplo de consulta assíncrona (preferível em aplicações modernas)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry devolve informações mais detalhadas sobre o host
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Aguarda a conclusão da tarefa

Console.WriteLine($"Nome do host: {hostEntry.HostName}");
Console.WriteLine("Endereços:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Aliases:"); // Na maioria dos casos, lista vazia
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

O DNS é um componente criticamente importante da Internet, permitindo que utilizadores e aplicações usem nomes de domínio facilmente memorizáveis em vez de endereços IP numéricos.