Avant que quiconque ne pose la question : 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 j’entends, c’est « si la réponse est trop longue, le DNS utilisera TCP ». Cela n’explique pas comment cela se produit cependant.
Voici donc la situation : le client DNS demande la résolution d’un enregistrement en utilisant UDP. L’enregistrement est trop long pour UDP :
-
le serveur répond avec un opcode spécifique, pour que le client passe en TCP
-
le serveur ne répond pas du tout, et le client réessaie en TCP
-
le serveur ouvre une connexion TCP vers le client (stupide, si l’on tient compte du NAT, mais qui sait ?)
-
le client « sait » en quelque sorte (?) que la requête donnée devrait être exécutée en TCP, donc il ne s’embête pas avec UDP en premier lieu
-
des fées DNS transforment magiquement l’UDP en TCP quand c’est nécessaire
J’ai cherché partout sur Internet la réponse, mais il y a beaucoup de bruit (voir ci-dessus), et je n’arrive pas à écrire la bonne requête Google pour cela (ni à trouver l’information dans les RFC, d’ailleurs).
Source : Server Fault