Sobes.tech
Intern

¿Qué es DNS?

sobes.tech AI

Respuesta de la IA

DNS (Sistema de Nombres de Dominio) es un sistema distribuido de nomenclatura para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada. Asocia nombres de dominio legibles (por ejemplo, google.com) con direcciones IP numéricas (por ejemplo, 172.217.160.142).

Principio de funcionamiento:

  1. Consulta: Cuando un usuario ingresa un nombre de dominio en el navegador, el cliente envía una consulta al servidor DNS local (generalmente configurado automáticamente por la red).
  2. Caché: El servidor primero verifica su caché. Si encuentra una coincidencia, devuelve la dirección IP.
  3. Consulta recursiva: Si no está en caché, el servidor envía una consulta a uno de los servidores raíz DNS.
  4. Delegación: El servidor raíz no conoce la dirección IP, pero indica el servidor de nivel superior (TLD) para .com, .org, etc.
  5. Delegación: El servidor TLD indica el servidor DNS autorizado para el dominio específico (google.com).
  6. Resolución: El servidor autorizado encuentra el registro A (Dirección) o AAAA (Dirección IPv6) para el nombre de dominio y devuelve la dirección IP correspondiente al servidor DNS.
  7. Caché y respuesta: El servidor cachea la respuesta y envía la dirección IP al cliente.
  8. Conexión: El navegador establece una conexión con el servidor usando la dirección IP recibida.

Tipos de registros DNS (más comunes):

Tipo Descripción
A Asocia el nombre del host con una dirección IPv4.
AAAA Asocia el nombre del host con una dirección IPv6.
CNAME Alias para otro nombre canónico.
MX Indica los servidores de correo para el dominio.
NS Indica los servidores DNS autorizados para el dominio.
PTR Se usa para búsqueda inversa (IP -> nombre).
TXT Almacena información de texto (por ejemplo, SPF).

Rol de DNS en C#:

Al trabajar con redes en C#, a menudo se usan clases del espacio de nombres System.Net, como System.Net.Dns para realizar consultas DNS.

// Ejemplo de obtención de direcciones IP por nombre de dominio
using System;
using System.Net;

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

// Ejemplo de consulta asincrónica (preferible en aplicaciones modernas)
async Task ResolveHostAsync()
{
    IPAddress[] asyncIpAddresses = await Dns.GetHostAddressesAsync("www.bing.com");
    foreach (var ip in asyncIpAddresses)
    {
        Console.WriteLine(ip);
    }
}

// GetHostEntry devuelve información más detallada sobre el host
Task<IPHostEntry> hostEntryTask = Dns.GetHostEntryAsync("ru.stackoverflow.com");
IPHostEntry hostEntry = hostEntryTask.Result; // Espera a que la tarea termine

Console.WriteLine($"Nombre del host: {hostEntry.HostName}");
Console.WriteLine("Direcciones:");
foreach (var addr in hostEntry.AddressList)
{
    Console.WriteLine($"  {addr}");
}

Console.WriteLine("Alias:"); // En la mayoría de los casos, lista vacía
foreach (var alias in hostEntry.Aliases)
{
    Console.WriteLine($"  {alias}");
}

El DNS es un componente críticamente importante de Internet, que permite a los usuarios y aplicaciones usar nombres de dominio fáciles de recordar en lugar de direcciones IP numéricas.