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).