Avant que quelqu'un ne 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 j'entends, c'est " si la réponse est trop longue, DNS utilisera TCP ". Cela n'explique cependant pas comment cela se produit.
Voici donc la situation: le client DNS demande la résolution d'un enregistrement en utilisant UDP. Le record est trop long pour UDP:
- le serveur répond avec un opcode spécifique, pour que le client passe à TCP
- le serveur ne répond pas du tout et le client réessaye via TCP
- le serveur ouvre une connexion TCP au client (stupide, si vous comptez NAT, mais qui sait?)
- le client en quelque sorte (?) sait que la requête donnée doit être exécutée sur TCP afin de ne pas déranger avec UDP en premier lieu
- Les pixies DNS transforment par magie UDP en TCP en cas de besoin
J'ai cherché partout sur Internet pour la réponse, mais il y a beaucoup de bruit (voir ci-dessus), et je n'arrive pas à écrire la bonne requête Google à ce sujet (je ne peux pas non plus trouver les informations dans les RFC, d'ailleurs) .
domain-name-system
rfc
StanTastic
la source
la source
1.
et4.
sont à peu près corrects (lequel des deux dépend des circonstances).Réponses:
Le client ne sait pas à l'avance que la réponse sera trop importante, il interrogera donc 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
Et: https://www.ietf.org/rfc/rfc2181.txt
Et comme mentionné dans les commentaires, bien sûr, les transferts de zone DNS utilisent toujours TCP.
la source