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:
- 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).
- Cache: O servidor verifica primeiro o seu cache. Se encontrar uma correspondência, devolve o endereço IP.
- Pedido recursivo: Se não estiver no cache, o servidor envia um pedido a um dos servidores DNS raiz.
- 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. - Delegação: O servidor TLD indica o servidor DNS autorizado para o domínio específico (
google.com). - 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.
- Cache e resposta: O servidor cacheia a resposta e envia o endereço IP ao cliente.
- 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.