Formatos de mensajes DNS

En este artículo se explica la estructura y el formato de los mensajes DNS (sistema de nombres de dominio) en entornos de Windows y Windows Server. Comprender los formatos de mensaje DNS es esencial para los administradores de servidores DNS que necesitan analizar el tráfico DNS, solucionar problemas de resolución de nombres y optimizar el rendimiento del DNS.

DNS usa formatos de mensaje estandarizados para la comunicación entre clientes y servidores. Todos los mensajes DNS (ya sean consultas, respuestas o actualizaciones) siguen una estructura común con campos específicos que determinan cómo se procesa la información. En este artículo se describen los tres tipos principales de mensajes DNS y se desglosan sus componentes para ayudarle a comprender cómo funciona la comunicación DNS a nivel de protocolo.

Protocolos y estándares DNS

DNS en Windows y Windows Server se adhiere a los estándares y protocolos del sector definidos por el Grupo de trabajo de ingeniería de Internet (IETF). El protocolo DNS principal se especifica en RFC 1035, que describe el formato de los mensajes DNS, incluidas las consultas y las respuestas. Estándares adicionales, como RFC 2136 para actualizaciones dinámicas y RFC 4033 para extensiones de seguridad DNS (DNSSEC), mejorar la funcionalidad y la seguridad de DNS.

El protocolo DNS consta de diferentes tipos de mensajes DNS que se procesan según la información de sus campos de mensaje. En esta sección se describen los tipos de mensajes DNS y los campos de cada tipo de mensaje.

Existen tres tipos de mensajes DNS:

  • Queries

  • Responses

  • Updates

Las consultas y respuestas se definen en el estándar DNS original y las actualizaciones se definen en RFC 2136. Los tres tipos siguen un formato de mensaje común.

Para obtener más información sobre los formatos de mensaje, expanda las secciones siguientes.

Formato de mensaje de consulta DNS

El formato de mensaje DNS común tiene un encabezado de longitud fija, un encabezado de 12 bytes y una posición variable reservada para los registros de recursos DNS adicionales, autoridad, respuesta y pregunta. El formato de mensaje común se puede ilustrar de la siguiente manera:

Formato de mensaje de consulta DNS estándar

  • Encabezado DNS (longitud fija)
  • Entradas de pregunta (longitud variable)
  • Registros de recursos de respuesta (longitud variable)
  • Registros de recursos de autoridad (longitud variable)
  • Registros de recursos adicionales (longitud variable)

Encabezado de mensaje de consulta DNS

El encabezado del mensaje DNS contiene los siguientes campos, en el orden siguiente:

Campos de encabezado de mensaje de consulta DNS

  • Id. de transacción:
    Un campo de 16 bits que identifica una transacción DNS específica. El autor del mensaje crea el id. de la transacción, que el respondedor copia en su mensaje de respuesta. Con el id. de la transacción, el cliente DNS puede combinar las respuestas con sus solicitudes.

  • Marcas:
    Un campo de 16 bits que contiene varias marcas de servicio comunicadas entre el cliente DNS y el servidor, entre los que se incluyen:

    • Solicitud/respuesta: campo de 1 bits establecido en 0 para una solicitud o 1 para una respuesta.
    • Código de operación: campo de 4 bits que representa la operación del servicio de nombres del paquete; 0x0 es una consulta.
    • Respuesta autoritativa: campo de 1 bits que indica que el respondedor es autoritativo para el nombre de dominio consultado.
    • Truncamiento: campo de 1 bits establecido en 1 si el número total de respuestas superó el tamaño del datagrama UDP. A menos que los datagramas UDP mayores de 512 bytes o EDNS0 estén habilitados, solo se devuelven los primeros 512 bytes de la respuesta UDP.
    • Recursividad deseada: campo de 1 bits establecido en 1 para una consulta recursiva y 0 para consultas iterativas. Si se define como 0, el servidor DNS devuelve una lista de otros servidores DNS de datos de caché local.
    • Recursividad disponible: campo de 1 bits establecido por un servidor DNS en 1 si puede controlar consultas recursivas. Si la recursividad está deshabilitada, el servidor establece el campo de forma adecuada.
    • Reservado: campo de 3 bits reservado y establecido en 0.
    • Código de retorno: campo de 4 bits que contiene el código de retorno:
      • 0: respuesta correcta (la respuesta de la consulta está en la respuesta).
      • 0x3: error de nombre, que indica que un servidor DNS autoritativo respondió que el nombre de dominio no existe. Para obtener más información sobre los códigos de retorno, consulte IANA DNS RCODEs.
  • Número de registros de recursos de preguntas:
    Campo de 16 bits que representa el número de entradas de la sección de preguntas del mensaje DNS.

  • Recuento de registros de recursos de respuesta:
    Campo de 16 bits que representa el número de entradas de la sección de respuestas del mensaje DNS.

  • Recuento de registros de recursos de autoridad:
    Campo de 16 bits que representa el número de registros de recursos de autoridad en el mensaje DNS.

  • Recuento adicional de registros de recursos:
    Campo de 16 bits que representa el número de registros de recursos adicionales en el mensaje DNS.

Entradas de preguntas de consulta DNS

La sección de entradas de preguntas del mensaje DNS contiene el nombre de dominio que se está consultando y tiene los tres campos siguientes:

  • Nombre de la pregunta:
    Nombre de dominio que se está consultando. Los nombres de dominio DNS se expresan como una serie de etiquetas (por ejemplo, microsoft.com). En el campo Nombre de pregunta, el nombre de dominio se codifica como una serie de pares de longitud-valor: un campo de 1 byte que indica la longitud de la etiqueta, seguida de la propia etiqueta. Por ejemplo, microsoft.com se codifica como 0x09microsoft0x03com0x00, donde los dígitos hexadecimales representan longitudes de etiqueta, los caracteres ASCII son las etiquetas y el 0 final indica el final del nombre.

  • Tipo de pregunta:
    Entero de 16 bits que representa el tipo de registro de recursos que se va a devolver. Los valores habituales son:

    • 0x01: registro de host DNS (A)
    • 0x02: registro del servidor de nombres (NS)
    • 0x05: registro de alias (CNAME)
    • 0x0C (12): registro de búsqueda inversa (PTR)
    • 0x0F (15): registro de intercambio de correo (MX)
    • 0x21 (33): registro de servicio (SSV)
    • 0xFB (251): registro de transferencia de zona incremental (IXFR)
    • 0xFC (252): registro de transferencia de zona estándar (AXFR)
    • 0xFF (255): todos los registros.
  • Clase question:
    Representa la clase de pregunta IN (Internet), normalmente definida en 0x0001.

Mensaje de respuesta de consulta DNS

Las secciones de respuesta, autoridad e información adicional de un mensaje de respuesta DNS pueden contener registros de recursos que responden a la sección de preguntas del mensaje de consulta. Los registros de recursos tienen el formato siguiente:

  • Nombre del registro de recursos: el nombre de dominio DNS registrado como un campo de longitud variable que sigue el mismo formato que el campo Nombre de la pregunta.
  • Tipo de registro de recursos: el valor del tipo de registro de recursos.
  • Clase de registro de recursos: el código de la clase de registro de recursos, la clase de Internet, 0x0001.
  • Período de vida: el TTL expresado en segundos como un campo sin signo de 32 bits.
  • Longitud de datos de recursos: campo de 2 bytes que indica la longitud de los datos del recurso.
  • Datos de recursos: datos de longitud variable correspondientes al tipo de registro de recursos.

El campo Nombre del registro de recursos se codifica de la misma manera que el campo Nombre de la pregunta, a menos que el nombre ya esté presente en otra parte del mensaje DNS, en cuyo caso se usa un campo de 2 bytes en lugar de un nombre codificado con un valor de longitud y apunta al nombre que ya está presente.

Formato de mensaje de consulta de nombre

Un formato de mensaje de consulta de nombre es el mismo que el formato de mensaje DNS descrito anteriormente. En un mensaje de consulta de nombre típico, los campos de mensaje DNS se establecen de la siguiente manera:

  • Identificador de consulta (Id. de transacción):
    Se define con un número único para permitir que el solucionador de cliente DNS coincida con la respuesta a la consulta. El id. de transacción de respuesta de consulta siempre coincide con el id. de transacción de solicitud de consulta.

  • Marcas:
    Se define para indicar una consulta estándar con recursividad habilitada.

  • Recuento de preguntas:
    Se establece en 1.

  • Entrada de pregunta:
    Configure el nombre de dominio consultado y el tipo de registro de recurso que se va a devolver.

Formato de mensaje de respuesta de consulta de nombre

Un formato de mensaje de respuesta de consulta de nombre es el mismo que el formato de mensaje DNS descrito anteriormente. En un mensaje de consulta de nombre típico, los campos de mensaje DNS se establecerían de la siguiente manera:

  • Identificador de consulta (Id. de transacción):
    Se define con un número único para permitir que el solucionador de cliente DNS coincida con la respuesta a la consulta.

  • Marcas:
    Se define para indicar una consulta estándar con recursividad habilitada.

  • Recuento de preguntas:
    Se establece en 1.

  • Entrada de pregunta:
    Configure el nombre de dominio consultado y el tipo de registro de recurso que se va a devolver.

Formato de mensaje de consulta de nombre inverso

Los mensajes de consulta de nombres inversos usan el formato de mensaje común con las siguientes diferencias:

  • El solucionador de cliente DNS construye el nombre de dominio en el dominio in-addr.arpa en función de la dirección IP que se consulta.

  • Se consulta un registro de recursos puntero (PTR) en lugar de un registro de recursos de host (A).

Actualizar formato de mensaje

El formato de mensaje de actualización de DNS usa un encabezado que define la operación de actualización que se va a realizar y un conjunto de registros de recursos que contiene la actualización. El formato del mensaje de actualización de DNS tiene los siguientes campos:

  • Identificación. Identificador de 16 bits asignado por el solicitante del cliente DNS. Este identificador se copia en la respuesta correspondiente y el solicitante puede usar este identificador para que coincida con las respuestas a las solicitudes pendientes o por el servidor para detectar solicitudes duplicadas de algún solicitante.

  • Marcas. Campo de banderas de mensaje de actualización DNS de 16 bits. Para obtener una descripción de cada marca, consulte el campo "DNS Update Message Flags" a continuación.

  • Número de entradas de zona. Número de registros de recursos en la sección de entrada de la zona.

  • Número de registros de recursos de requisitos previos. Número de registros de recursos en la sección Registros de recursos de requisitos previos.

  • Número de registros de recursos de actualización. Número de registros de recursos en la sección Registros de recursos de actualización.

  • Número de registros de recursos adicionales. Número de registros de recursos en la sección Registros de recursos adicionales.

  • Entrada de zona. Denota la zona de los registros que se actualizan. Todos los registros que se van a actualizar deben estar en la misma zona y, por tanto, la sección de la zona puede contener exactamente un registro. Tiene tres valores: ZNAME es el nombre de zona, ZTYPE debe ser SOA y ZCLASS es la clase de la zona.

  • Registros de recursos de requisitos previos. Contiene un conjunto de requisitos previos del registro de recursos que deben cumplirse en el momento en que el servidor DNS maestro recibe el mensaje de actualización. Hay cinco conjuntos de valores posibles que se pueden expresar:

    • El conjunto de registros de recursos existe (independiente del valor). Debe existir al menos un registro de recursos con un nombre y tipo especificados (en la zona y clase especificada por la sección de la zona).

    • El conjunto de registros de recursos existe (dependiente del valor). Existe un conjunto de registros de recursos con un nombre y tipo especificados y tiene los mismos miembros con los mismos datos que el conjunto de registros de recursos especificado en esta sección.

    • El conjunto de registros de recursos no existe. No existen registros de recursos con un nombre y tipo especificados (en la zona y la clase indicadas por la sección de la zona).

    • El nombre está en uso. Existe al menos un registro de recursos con un nombre y tipo especificados (en la zona y clase especificada por la sección de la zona). Este requisito previo no se cumple con los no terminales vacíos.

    • El nombre no está en uso. Ningún registro de recursos de ningún tipo es propiedad de un nombre especificado. Este requisito previo se cumple con los no terminales vacíos.

  • Actualización de registros de recursos. Contiene los registros de recursos que se van a agregar o eliminar de la zona. Una de cuatro operaciones se realiza durante la actualización:

    • Agregar registros de recursos a un conjunto de registros de recursos.

    • Eliminar un conjunto de registros de recursos.

    • Eliminar todos los conjuntos de registros de recursos de un nombre.

    • Eliminar un registro de recursos de un conjunto de registros de recursos.

  • Registros de recursos adicionales. Contiene registros de recursos relacionados con la actualización o con nuevos registros de recursos que la actualización agrega.

Campo de marcas de mensaje de actualización de DNS

El campo marcas de mensaje de actualización de DNS usa las marcas siguientes:

  • Solicitud/respuesta. Campo de 1 bits definido como 0 para representar una solicitud de actualización y 1 para representar una respuesta de actualización.

  • Código de operación. Campo de 4 bits definido como 0x5 para las actualizaciones de DNS.

  • Reserved. Campo reservado de 7 bits definido como 0.

  • Código devuelto. Campo de 4 bits que contiene códigos para representar el resultado de la consulta de actualización. Los códigos son los siguientes:

    • 0 (NOERROR): Sin error; actualización correcta.
    • 1 (EXR): Error de formato; El servidor DNS no entendió la solicitud de actualización.
    • 0x2 (SERVFAIL): el servidor DNS encontró un error interno, como un tiempo de espera de reenvío.
    • 0x3 (NXDOMAIN): no existe un nombre que debe existir.
    • 0x4 (NOTIMP): el servidor DNS no admite el código de operación especificado.
    • 0x5 (REFUSED): el servidor DNS se niega a realizar la actualización.
    • 0x6 (YXDOMAIN):un nombre que no debe existir.
    • 0x7 (YXRRSET):un conjunto de registros de recursos que no debe existir.
    • 0x8 (NXRRSET): no existe un conjunto de registros de recursos que debe existir.
    • 0x9 (NOTAUTH): el servidor DNS no es autoritativo para la zona denominada en la sección Zona.
    • 0xA (NOTZONE): un nombre usado en las secciones Requisitos previos o Actualización no está dentro de la zona especificada por la sección Zona.

Formato de mensaje de respuesta de actualización dinámica

El mensaje de respuesta de actualización dinámica sigue el mismo formato que el mensaje de actualización de DNS, con la excepción de las marcas DNS. Las marcas de encabezado de mensaje de respuesta de actualización dinámica indican si la actualización se realiza correctamente mediante la inclusión del código de respuesta correcto o uno de los códigos de error descritos en las marcas de actualización de mensaje de DNS.