DNS (Domain Name System ó sistema de nombres de dominio) es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada. Este sistema asocia información variada con nombres de dominios asignados a cada uno de los participantes. Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, con el propósito de poder localizar y direccionar estos equipos mundialmente.

El DNS es:

  • Una base de datos distribuida y jerárquica que almacena información asociada a nombres de dominio en redes como Internet. Es una base de datos distribuida implementada en una jerarquía de servidores. Aunque como base de datos el DNS es capaz de asociar diferentes tipos de información a cada nombre, los usos más comunes son la asignación de nombres de dominio a direcciones IP y la localización de los servidores de correo electrónico de cada dominio.
  • Un protocolo de aplicación que permite a las aplicaciones cliente realizar consultas a los servidores DNS (base de datos distribuida) y obtener así un servicio de traducción de nombres en direcciones IP. El protocolo DNS utiliza UDP como protocolo de transporte y reside en el puerto 53. También puede utilizar TCP (configurable como parámetro del protocolo).

Inicialmente, el DNS nació de la necesidad de recordar fácilmente los nombres de todos los servidores conectados a Internet. En un inicio, SRI (ahora SRI International) alojaba un archivo llamado HOSTS que contenía todos los nombres de dominio conocidos (este archivo sigue existiendo en la mayoría de los sistemas operativos actuales). El gran crecimiento de la red causó que el sistema de nombres centralizado en el archivo hosts no resultara práctico y en 1983, Paul Mockapetris publicó los RFCs 882 y 883 definiendo lo que hoy en día ha evolucionado hacia el DNS moderno.

El DNS se base en los siguientes elementos:

  • Un espacio de nombres de dominio organizado jerárquicamente.
  • Servidores de nombres, que contienen información sobre los recursos de cada organización.
  • Los denominados «resolvers», que actúan como clientes del DNS, realizando consultas a servidores de nombres.

La coordinación de la asignación de nombres de dominio de primer nivel es una de las responsabilidades de ICANN (Internet Corporation for Asigned Names and Numbers). Esta es una entidad sin ánimo de lucro, creada en octubre de 1998 bajo los auspicios del Gobierno de Estados Unidos, que ha asumido competencias sobre las funciones llevadas a cabo por IANA (Autoridad de Internet para la Asignación de Números). Específicamente, ICANN coordina también la asignación de identificadores que deben ser únicos en el ámbito global, entre los que se encuentran las direcciones IP y otros identificadores utilizados en protocolos (por ejemplo los puertos).

Por lo que concierne a la identificación de países dentro del sistema de nombres de dominio de primer nivel, se optó en su momento por la utilización de los códigos de dos letras, basados en el estándar ISO 3166-1.

La base de datos DNS se compone de resource records (RRs), que están divididos en clases para representar recursos de diferentes tipos de redes:

  • A: IP Address (dirección IP).
  • MX: Mail Exchanger (servidor de correo electrónico). Almacena el nombre del servidor de correo electrónico que sirve a un dominio.
  • NS: Name Server (nombre de servidor). Identifica el servidor primario o los secundarios que mantienen una zona y sirve para averiguar qué servidores tienen autoridad sobre un cierto nombre de dominio.
  • CNAME: Canonical Name (nombre de dominio). Identifica el nombre original o canónico al que corresponde un determinado alias.
  • SOA: Start of Authority (varios campos). Identifica el nombre de dominio del vértice de una zona.
  • TTL del RR: indica el tiempo en segundos que un RR vivirá en la copia caché, antes de ser descartado. El servidor DNS almacena este campo en un palabra de 32 bits, sin signo. Un valor típico para un registro de tipo A es 86400 (un día).

Existe una autoridad para los dominios de primer nivel, que es compartida entre un conjunto de 13 servidores raíz:

  • Organizaciones que colaboran voluntariamente para dar el servicio.
  • Se denominan a.root-servers.net, b.root-servers.net, …, m.root-servers-net.
  • Cada servidor raíz está, a su vez, replicado.

El funcionamiento de un servidor raíz es el siguiente:

  • Cada servidor raíz conoce a todos los servidores de dominios de primer nivel.
  • Los servidores raíz reciben consultas de servidores locales que no pueden resolver un nombre.
  • La respuesta de un root-server es siempre una referencia a un servidor de nombres que mantiene la zona correspondiente al dominio de primer nivel correspondiente al nombre buscado.

El proceso de resolución de nombres en es siguiente:

  • Un resolver debe conocer, al menos, un servidor (local).
  • Cada servidor debe conocer, al menos, un servidor raíz y a todos los servidores de los dominios jerárquicos inferiores.
  • Los servidores raíz conocen a todos los servidores de dominios de segundo nivel.
  • El cliente envía una consulta al servidor:
    • Si el servidor no puede resolver localmente, contacta con otro servidor (consulta recursiva) o devuelve una referencia (consulta iterativa).
  • El servidor local guarda en su caché los registros que obtiene de otros servidores, durante el tiempo TTL que aparece en el registro.
  • El resolver de un cliente también guarda las respuestas en su caché.