Antes de que alguien pregunte: He visto ¿ Cuándo las consultas DNS usan TCP en lugar de UDP? y no responde mi pregunta
Todo lo que escucho es " si la respuesta es demasiado larga, DNS usará TCP ". Sin embargo, esto no explica cómo sucede.
Así que aquí está la situación: el cliente DNS solicita la resolución de un registro usando UDP. El registro es demasiado largo para UDP:
- el servidor responde con un código de operación específico, para que el cliente cambie a TCP
- el servidor no responde en absoluto y el cliente vuelve a intentarlo a través de TCP
- el servidor abre la conexión TCP al cliente (estúpido, si cuenta NAT, pero ¿quién sabe?)
- el cliente de alguna manera (?) 'sabe' que la consulta dada debe ejecutarse a través de TCP para que no se moleste con UDP en primer lugar
- Los pixies DNS convierten mágicamente UDP en TCP cuando sea necesario
He estado buscando en Internet la respuesta, pero hay mucho ruido (ver arriba), y parece que no puedo escribir una consulta de Google adecuada para eso (ni puedo encontrar la información en RFC, de hecho) .
domain-name-system
rfc
StanTastic
fuente
fuente
1.
y4.
ambos son aproximadamente correctos (cuál de los dos depende de las circunstancias).Respuestas:
El cliente no sabe de antemano que la respuesta será demasiado grande, por lo que consultará al servidor a través de UDP.
El servidor responderá a través de UDP e incluirá tanto como sea posible y establecerá el bit de encabezado truncado ("TC" http://www.networksorcery.com/enp/protocol/dns.htm ).
El cliente puede reenviar la solicitud a través de TCP y obtener la respuesta completa.
Ver también: https://tools.ietf.org/html/rfc5966
Y: https://www.ietf.org/rfc/rfc2181.txt
Y como se menciona en los comentarios, por supuesto, las transferencias de zona DNS siempre usan TCP.
fuente