DNS

De Departamento de Informatica
Saltar a: navegación, buscar

El Domain Name System (DNS) se compone de dos elementos: una base de datos distribuida de servidores DNS, implementada de forma jerárquica, y un protocolo de la Capa de Aplicaciones que permite a los hosts comunicarse con la base de datos distribuida.

Básicamente, DNS se utiliza por otros protocolos de la Capa de Aplicaciones (como HTTP, SMTP, y FTP) para traducir hostnames a direcciones IP. Como para un computador (o router) las direcciones IP son más fáciles de manejar y dan más información que un hostname, es útil traducir desde las direcciones en palabras (www.usm.cl) a una IP (200.1.21.80). De forma simplista, el DNS funciona como un diccionario que traduce hostnames a IPs.

Para entender el por qué es útil el DNS, se puede hacer un símil con las personas: cada persona de Chile tiene un RUT (tal como un computador tiene una IP designada). Pero cuando dos personas se saludan, no se dicen "Hola 18.231.423-k!", esto haría casi imposible la tarea de recordar a más de dos amigos. Es por esto que además del RUT, todos tienen un nombre asignado por sus padres al nacer (como un hostname o una URL), para así tener dos formas de identificar a una persona (o de identificar a un computador): una que sea fácil de entender para un computador, y otra que sea sencilla de recordar para una persona.

Contenido

Servicios Dados por DNS

Alias de servidor

Hoy en día, se pueden encontrar distintos hosts con nombres que resultan complicados de recordar, como por ejemplo lugares.medio-norte.wikipedia.com. Para facilitar su uso, se crean distintos alias para permitir tener un nombre más simple y entendible.

Para ilustrar, tomemos como ejemplo el host lugares.medio-norte.wikipedia.com. Se puede ver que es un nombre extenso difícil de recordar. Por esto se usan los alias, que permiten una identificación más rápida y entendible del host. Los alias para esta dirección podrían ser www.wikipedia.com o bien wikipedia.com. En estos casos se dice que el nombre del host, es decir, lugares.medio-norte.wikipedia.com, es el nombre canónico, y como se puede ver, los alias suelen ser nombres más cortos y precisos.

Una aplicación puede invocar al DNS para obtener el nombre de host canónico para un determinado alias, así como la dirección IP asociada al host.

Alias de servidor de correo

Los servidores de correo también cuentan con un alias, a diario usamos nuestras cuentas de correo, las cuales suelen identificarse solo con un nombre de usuario, como por ejemplo, para un servidor de correo Hotmail, luis@hotmail.com. Sin embargo el nombre de host del servidor de correo Hotmail es mucho mas complicado que simplemente "Hotmail", ya que podría contar con nombres canónicos como estado.subir-todo.hotmail.com.

Una aplicación de correo puede invocar al servicio DNS, para obtener el nombre de host canónico para un alias determinado, como también la dirección IP del host.

Como observación, los registros MX permiten tanto al servidor de correo como al servidor web tener mismos alias, es decir, una empresa puede tener a organizacion.com como alias para ambos.

Distribución de carga

DNS es capaz de distribuir carga en servidores replicados, tal como lo realizan los servidores web duplicados. Hay sitios web que se suelen visitar mucho, como por ejemplo wikipedia.com, por lo que generan una gran carga de trabajo y son replicados en varios servidores, en donde cada servidor se ejecuta en un sistema terminal distinto, teniendo cada uno una dirección IP distinta. Es por ello que para los servidores replicados, hay asociado un conjunto de direcciones IP con un único nombre de host canónico.

Cuando los clientes realizan una consulta DNS sobre un nombre asignado a un conjunto de direcciones, el servidor responde con el conjunto completo de direcciones IP, pero va rotando el orden de las direcciones en cada respuesta. Como normalmente un cliente envía su mensaje de solicitud HTTP a la dirección IP que aparece en primer lugar dentro del conjunto, la rotación DNS distribuye el tráfico entre los servidores replicados. Este método de rotación se aplica también en el correo electrónico de modo que múltiples servidores de correo pueden tener el mismo alias.

Funcionamiento

Al visitar una página web utilizando un navegador, lo primero que se debe hacer es ralizar una llamada HTTP a una URL, por ejemplo www.usm.cl/index.html. Pero el computador del usuario debe saber la dirección IP del destino, para esto se realizan ciertos pasos:

  1. El equipo del usuario corre el cliente de la aplicación DNS.
  2. El navegador extrae el hostname www.usm.cl de la URL y lo pasa al cliente de la aplicación DNS.
  3. El cliente DNS manda una solicitud con el hostname a un servidor DNS.
  4. En algún momento el cliente DNS recibe una respuesta, que incluye la IP correspondiente al hostname.
  5. Una vez que el navegador recibe la IP, puede iniciar una conexión TCP con el servidor HTTP localizado en el puerto 80 en esa IP.

Base de datos jerárquica y distribuida

Los servidores DNS se ordenan de forma jerárquica y distribuida. Se usa una arquitectura distribuida debido a que esto permite redundancia (evita las caídas por una falla en un servidor), ayuda a aliviar la gran cantidad de tráfico que reciben estos servidores, facilita la mantención, y mantiene la latencia al mínimo colocando servidores en lugares físicos más cercanos a los clientes.

Representación gráfica de la jerarquía DNS

Root name servers

Se cuentan con 13 servidores Root alrededor del mundo, y muchas replicas de ellos, se etiquetan desde la letra A a la M, en donde la mayoría se localizan en América del Norte. Cada servidor es una agrupación de servidores replicados, tanto por propósitos de seguridad como de fiabilidad. Se pueden observar las ubicaciones de los 13 servidores root y sus replicas en Root-servers.org.

Cabe destacar que en los últimos 5 años, la población del mundo de internet se ha duplicado, y la distribución de los Root servers es mucho mejor a como era hace una década, en donde se tienen una mayor cantidad, en distintas ubicaciones y con un hardware mas potente[1].

Servidores TLD

Los Top-Level Domain servers (TLD) son servidores DNS encargados de dominios de alto nivel como com, org, net, y todos los pertenecientes a países como cl, ar, pe, etc. En Chile, Nic.cl es el encargado de entregar dominios de nivel superior .cl.

Servidores Authoritative

Todas las organizaciones que hoy en día cuentan con hosts accesibles públicamente a través de Internet, deben proporcionar registros DNS accesibles públicamente que establezcan la correspondencia entre los nombres de dichos host y sus direcciones IP.

Servidor local de nombre (Local name server)

Cada ISP, como por ejemplo VTR, tiene un servidor DNS local. Cuando un host se conecta a una ISP, éste le proporciona al host las direcciones IP de uno o más de sus servidores DNS locales.

Métodos de resolución de nombre

Petición iterada

Consultas iterativas en DNS

Se dice que una consulta o petición es iterada cuando todas las respuestas de la petición son devueltas directamente al mismo servidor que las envió.

Para entender pensemos en un ejemplo en donde un host desea conocer una dirección. Tenemos un Servidor DNS local dns.usm.cl, y el host desea conocer la dirección de lugares.wikipedia.com, en donde un servidor DNS autoritativo para lugares.wikipedia.com es dns.wikipedia.com. Cuando el host envía el un mensaje de consulta DNS a su servidor DNS local, en este caso dns.usm.cl, el mensaje de consulta tiene el nombre de host que debe ser traducido, es decir lugares.wikipedia.com. El servidor DNS local reenvía la consulta a un servidor raíz, el cual toma el sufijo .com, y devuelve al servidor DNS local una lista de las direcciones IP de los servidores TLD responsables del dominio .com. El servidor DNS local reenvía nuevamente el mensaje de consulta a uno de estos servidores TLD, en donde el servidor TLD revisa el sufijo wikipedia.com y responde la dirección IP del servidor autoritativo, es decir dns.wikipedia.com. Por último, el servidor DNS local reenvía la consulta directamente a dns.wikipedia.com, que responde con la dirección IP de lugares.wikipedia.com. Luego el servidor DNS local cuenta con la dirección IP correspondiente. Como se puede observar se realizan peticiones iteradas, en donde cada petición la realiza el servidor local DNS, al cual se le devuelven cada resultado. Se puede observar en detalle en la imagen "Consultas iterativas en DNS"


Petición recursiva

Consultas recursivas en DNS

Se realiza una petición o consulta recursiva, cuando se solicita a un servidor que obtenga por sí mismo la correspondencia.

Para entender mejor el concepto, se aplica el siguiente ejemplo. Un host alumno.usm.cl desea conocer una dirección. Tenemos un Servidor DNS local dns.usm.cl, y el host desea conocer la dirección de lugares.wikipedia.com, en donde un servidor DNS autoritativo para lugares.wikipedia.com es dns.wikipedia.com. El host envía un mensaje de consulta DNS a su servidor DNS local, dns.usm.cl, en donde el mensaje de consulta contiene el nombre de host que debe ser traducido, es decir lugares.wikipedia.com. El servidor DNS local consulta al servidor raíz, a su vez este al servidor DNS TLD, el cual consulta al servidor DNS autoritativo, dns.wikipedia.com para obtener la dirección IP de lugares.wikipedia.com. Obtenida la información se retorna al servidor DNS TLD, este a su vez al servidor raíz, y finalmente al servidor DNS local dns.usm.cl el envía al host solicitante. Se observan 8 procedimientos los cuales se pueden observar en la figura "Consultas recursivas DNS".


Caché

Como realizar la llamada a un servidor de DNS lejano puede agregar un delay considerable, se utiliza caché, guardando la información de las entradas DNS en servidores locales, los que se sincronizan periódicamente con los Root DNS Servers.

Protocolo DNS

Para realizar la comunicación entre cliente y servidor, el protocolo DNS usa el puerto 53, a través de UDP.

Entradas DNS

Una entrada DNS (DNS Record) es una cuatro-tupla con los campos (Name, Value, Type, TTL)

El significado de name y value dependen del type:

Type A

Name es un hostname y Value es la IP asociada con el hostname. Entonces, el Type A es el mapeo normal hostname->IP. Como ejemplo se tiene la entrada de tipo A (foo.usm.cl, 145.23.124.102, A).

Type NS

Name es un nombre de dominio (como usm.cl) y Value es el hostname de un servidor Authoritative DNS que puede obtener las direcciones IP de los hosts asociados al dominio. Este tipo de entrada se utiliza para guiar las peticiones DNS por la cadena de solicitudes. Como ejemplo de este tipo, se tiene (usm.cl, dns.usm.cl, NS).

Type CNAME

Value es el hostname canónico para el alias Name. Sirve para solicitar el nombre canónico a partir de un hostname. Por ejemplo (usm.cl, foo.usm.cl, CNAME)

Type MX

Value es el nombre canónico de un servidor de correo que tiene como alias el hostname Name. (usm.cl, alegre.usm.cl, MX) es una entrada de tipo MX.

Si un servidor DNS es autoritativo para un hostname particular, entonces este servidor tendrá una entrada Type A para ese hostname. Si no es autoritativo para un hostname, el servidor tendrá una entrada Type NS para el dominio que incluye el hostname, además de una entrada Type A con la dirección IP del servidor DNS que se encuentra en el campo Value de la entrada NS.

Ejemplo

Si suponemos que un servidor TLD no es autoritativo para el hostname inf.utfsm.cl, entonces este servidor contendrá una entrada NS para un dominio que incluye el host inf.utfsm.cl, es decir algo como (usm.cl, dns.usm.cl, NS). El servidor TLD cl también tendrá una entrada Type A que mapeará el servidor DNS dns.usm.cl a una dirección IP, por ejemplo, (dns.usm.cl, 123.110.20.102, A).

Mensajes DNS

El protocolo DNS define dos tipos de mensajes: query y reply, ambos con el mismo formato.

Representación gráfica de un mensaje DNS

Las secciones dentro del mensaje se organizan de la siguiente forma Header

Los primeros 12 bytes forman la sección de cabecera (header section). A su vez, esta se compone de varios campos:

  • Los primeros 16-bits son un número identificador de la query. Este identificador se copia al mensaje de reply de una query, de esta forma el cliente DNS puede juntar los mensajes de respuesta recibidos con las solicitudes enviadas.
  • Luego viene un campo que tiene un conjunto de flags.
    • El primer bit es una flag indicando si el mensaje es una query (0) o una reply(1).
    • El segundo bit se coloca como 1 cuando el servidor DNS es autoritativo para el nombre solicitado.
    • El tercer bit se marca como 1 cuando el cliente (que puede ser un host o un servidor DNS) desea que el servidor DNS utilice recursión en el caso de no tener la entrada pedida.
    • El cuarto bit se coloca en 1 en una respuesta si el servidor DNS soporta recursión.
  • Finalmente, hay cuatro campos que contienen el número de preguntas, respuestas, autoridad e información adicional (las siguientes secciones).

Questions La sección de preguntas (questions) contiene información sobre la query. Contiene un campo del nombre que se está solicitando, y un campo de tipo (ver Entradas DNS).

Answers

En una respuesta desde un servidor DNS, la sección de respuestas (answers) contiene las entradas asociadas al nombre que se solicitó originalmente. Puede tener múltiples entradas, debido a que un hostname puede tener múltiples IPs asociadas.

Authority

La sección de autoridad (authority) contiene entradas de otros servidores autoritativos.

Additional Information

La sección de información adicional (additional information) contiene otras entradas útiles que complementan a las respuestas anteriores.

Notas

  1. The (very) uneven distribution of DNS root servers on the Internet, publicado el 7 Mayo 2012, accesado el 17 Mayo 2012

Referencias

  • James F. Kurose, Keith W. Ross, Computer Networking: A Top-Down Approach 5th Edition (Pearson, 2010)

Links Externos

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas