web-dev-qa-db-fra.com

Comment le protocole DNS passe-t-il de l'UDP à TCP?

Avant que quiconque ne le demande: j'ai vu quand les requêtes DNS utilisent-elles TCP au lieu d'UDP? et cela ne répond pas à ma question.

Tout ce que je continue à entendre, c'est " si la réponse est trop longue, DNS utilisera TCP ". Cela n'explique pas comment ça se passe.

Voici donc la situation: le client DNS demande la résolution d'un enregistrement à l'aide de UDP. L'enregistrement est trop long pour UDP:

  1. réponses de serveur avec OPCODE spécifique, pour avoir un interrupteur client sur TCP
  2. le serveur ne répond pas du tout et le client réapprovisionnel sur TCP
  3. server Open TCP connexion au client (stupide, si vous comptez NAT, mais qui sait?)
  4. client d'une manière ou d'une autre (?) 'sait' que la requête donnée doit être exécutée sur TCP donc cela ne se dérange pas avec UDP en premier lieu
  5. DNS PIXIES Tournez par magiquement UDP en TCP si nécessaire

Je cherche partout sur Internet pour la réponse, mais il y a beaucoup de bruit (voir ci-dessus), et je ne peux pas sembler écrire une requête Google appropriée pour cela (ni trouver l'information dans les RFCS, à ce sujet). .

31
StanTastic

Le client ne sait pas à l'avance que la réponse sera trop grande, il va donc interroger le serveur via UDP.
[.____] Le serveur répondra via UDP et inclura autant que possible et définira le bit d'en-tête tronqué ("TC" http://www.networksorcery.com/enp/protocol/dns.htm ).
[.____] Le client peut ensuite renvoyer la demande via TCP et obtenir la réponse complète.

Voir aussi: https://tools.ietf.org/html/rfc5966

En l'absence d'EDNS0 (mécanismes d'extension pour DNS 0) (voir ci-dessous), le comportement normal de tout serveur DNS nécessitant une réponse UDP dépasserait la limite de 512 octets est destiné au serveur de tronquer la réponse de manière à tronquer. dans cette limite, puis réglez le drapeau TC dans l'en-tête de réponse. Lorsque le client reçoit une telle réponse, il faut le drapeau TC comme indiquant qu'il devrait réessayer sur TCP à la place.

Et: https://www.ietf.org/rfc/rfc2181.txt

Et comme mentionné dans les commentaires, bien sûr, les transferts de la zone DNS utilisent toujours TCP.

45
faker