<p>Avant que quiconque ne pose la question : j’ai vu <a href="https://serverfault.com/questions/404840/when-do-dns-queries-use-tcp-instead-of-udp" rel="noopener nofollow ugc">Quand les requêtes DNS utilisent-elles TCP au lieu d’UDP ?</a> et cela ne répond pas à ma question.</p>
<p>Tout ce que j’entends, c’est « <em>si la réponse est trop longue, le DNS utilisera TCP</em> ». Cela n’explique pas comment cela se produit cependant.</p>
<p>Voici donc la situation : le client DNS demande la résolution d’un enregistrement en utilisant UDP. L’enregistrement est trop long pour UDP :</p>
<ul>
<li>
<p>le serveur répond avec un opcode spécifique, pour que le client passe en TCP</p>
</li>
<li>
<p>le serveur ne répond pas du tout, et le client réessaie en TCP</p>
</li>
<li>
<p>le serveur ouvre une connexion TCP vers le client (stupide, si l’on tient compte du NAT, mais qui sait ?)</p>
</li>
<li>
<p>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</p>
</li>
<li>
<p>des fées DNS transforment magiquement l’UDP en TCP quand c’est nécessaire</p>
</li>
</ul>
<p>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).</p>
<hr>
<p><em>Source : <a href="https://serverfault.com/questions/404840/when-do-dns-queries-use-tcp-instead-of-udp" rel="noopener nofollow ugc">Server Fault</a></em></p>