¿Por qué DNS a través de UDP tiene un límite de 512 bytes?


14

He estado buscando una respuesta a esa pregunta (la del título) y lo mejor que encontré fue:

En el diseño del protocolo DNS, el tamaño del bloque de transporte UDP (tamaño de la carga útil) se ha limitado a 512 bytes para optimizar el rendimiento y generar un tráfico de red mínimo.

mi pregunta es: ¿cómo mejora esto exactamente el rendimiento y existen otras razones para esta limitación al usar UDP?


55
La pregunta se basa realmente en una premisa falsa (al menos una anticuada). El límite de carga útil de 512 bytes ya no existe, consulte mi respuesta a continuación.
Håkan Lindqvist

Respuestas:


18

La carga útil de 512 bytes garantiza que los paquetes DNS se puedan volver a ensamblar si están fragmentados en tránsito. Además, en general, hay menos posibilidades de que los paquetes más pequeños se descarten al azar.

El estándar IPv4 especifica que cada host debe poder reensamblar paquetes de 576 bytes o menos. Con un encabezado IPv4 (20 bytes, aunque puede ser tan alto como 60 bytes con opciones) y un encabezado UDP de 8 bytes, un paquete DNS con una carga útil de 512 bytes será menor que 576 bytes.

Como dice @RyanRies: DNS puede usar TCP para cargas más grandes y para transferencias de zona y DNSSEC. Hay mucha más latencia cuando TCP entra en juego porque, a diferencia de UDP, hay un apretón de manos entre el cliente y el servidor antes de que los datos comiencen a fluir.


77
Una nota relacionada: la razón por la que siempre habrá 13 nombres de resolución DNS raíz (a.root-servers.net a través de m.root-servers.net) es porque ese es el número máximo que puede caber en una respuesta DNS a una consulta para la raíz sin exceder el límite de 512 bytes. Por lo tanto, incluso cuando agreguemos más servidores físicos a la infraestructura DNS raíz, lógicamente siempre quedarán trece servidores raíz.
phoebus

2
@RyanRies Para DNSSEC EDNS0 con una carga útil permitida mayor es en realidad el modo normal de operación, no TCP.
Håkan Lindqvist

1
La MTU más pequeña permitida no es 576 bytes, es 68 bytes en IPv4 y 1280 bytes en IPv6.
Kasperd

1
@phoebus, ¿puede mostrarme cómo 13 servidores no superan los 512 bytes mientras que 14 servidores sí? ¿Cuál es el cálculo detrás de esto?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 bytes, no 576, ¿no?
Carlo Wood el

12

El DNS moderno ya no está limitado a una carga útil de 512 bytes para UDP.

Con EDNS0 en uso, se puede especificar un tamaño de carga útil más grande, que también suele ser el caso de los clientes con DNSSEC.

El soporte para cargas útiles más grandes sobre UDP ha sido un arma de doble filo, sin embargo, es en parte la razón por la cual el uso de servidores de nombres para ataques de amplificación se ha vuelto más popular, ya que puede lograr una mejor amplificación si el atacante usa una consulta que obtiene una respuesta grande .

Ver rfc2671 para los detalles esenciales de EDNS0


2
Esto es cierto, pero todavía hay enrutadores y firewalls que eliminan los paquetes UDP DNS de más de 512 bytes.
Ryan Ries

2
@RyanRies Sí, si bien ese es, por supuesto, un comportamiento que se considera incorrecto según los estándares actuales, es algo que todavía ocasionalmente causa problemas. (En teoría, si se tiene dicho límite, se sabe que debe configurar el software relevante para no anunciar la capacidad de manejar / no enviar respuestas más grandes).
Håkan Lindqvist

1

Las operaciones de DNS, por ejemplo, las consultas y las operaciones de mantenimiento de zona de forma predeterminada utilizan el puerto 53. Por razones de rendimiento, las consultas utilizan el protocolo UDP con un límite de tamaño de bloque de 512 bytes. El TCP se puede negociar opcionalmente transacción por transacción para las operaciones de consulta, pero debido a la sobrecarga de rendimiento incurrida con TCP, esta es esencialmente una capacidad teórica. Históricamente, exceder el límite de tamaño de respuesta de 512 bytes generalmente se evitaba a toda costa, y de hecho el límite de 13 servidores raíz IPv4 era el máximo que se podía devolver en una sola transacción UDP de 512 bytes.

Ron Aitchison - Pro DNS y BIND 10 - 2011


Gracias. ¿Podemos conocer la fuente de la cita (para atribuirla)?
Pothi Kalimuthu

-2

Es una cosa QOS.

Debido a que UDP no tiene estado, el manejo de errores de los paquetes no es posible.

Por lo tanto, al mantener los paquetes a un tamaño máximo, hay un cambio mayor que alcanzarán su destino, reduciendo el impacto de la ausencia de manejo de errores.


Los paquetes más grandes no significan que UDP conmute por error a TCP. ¿Estoy malentendido lo que estás diciendo?
mfinni

Probablemente tengas razón. Creo que lo leí en un RFC propuesto en alguna parte.
Garreth McDaid

UDP no falla, pero para DNS específicamente si la respuesta es demasiado grande para caber cuando se usa UDP, esto dará como resultado una respuesta truncada (la respuesta real no contiene todos los datos y el indicador 'truncado' está configurado para indicar esto), el cliente puede volver a intentar usar TCP en su lugar.
Håkan Lindqvist
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.