Bevor jemand fragt: Ich habe gesehen, wann DNS-Abfragen TCP anstelle von UDP verwenden? und es beantwortet meine Frage nicht.
Ich höre nur noch " Wenn die Antwort zu lang ist, verwendet DNS TCP ". Dies erklärt jedoch nicht, wie es passiert.
Hier ist die Situation: Der DNS-Client fragt nach der Auflösung eines Datensatzes mit UDP. Der Datensatz ist für UDP zu lang:
- Der Server antwortet mit einem bestimmten Opcode, damit der Client zu TCP wechselt
- Der Server antwortet überhaupt nicht und der Client versucht es erneut über TCP
- Server öffnet TCP-Verbindung zum Client (dumm, wenn man NAT zählt, aber wer weiß?)
- Der Client (?) 'weiß' irgendwie, dass eine bestimmte Abfrage über TCP ausgeführt werden sollte, damit er sich überhaupt nicht um UDP kümmert
- DNS-Pixies verwandeln UDP bei Bedarf auf magische Weise in TCP
Ich habe im Internet nach der Antwort gesucht, aber es gibt viel Lärm (siehe oben), und ich kann anscheinend keine ordnungsgemäße Google-Abfrage dafür schreiben (und ich kann die Informationen auch nicht in RFCs finden). .
domain-name-system
rfc
StanTastic
quelle
quelle
1.
und4.
sind beide ungefähr richtig (welches von beiden von den Umständen abhängt).Antworten:
Der Client weiß nicht im Voraus, dass die Antwort zu groß ist, und fragt den Server über UDP ab.
Der Server antwortet über UDP und enthält so viel wie möglich und setzt das abgeschnittene Header-Bit ("TC" http://www.networksorcery.com/enp/protocol/dns.htm ).
Der Client kann dann die Anforderung über TCP erneut senden und die vollständige Antwort erhalten.
Siehe auch: https://tools.ietf.org/html/rfc5966
Und: https://www.ietf.org/rfc/rfc2181.txt
Und wie in den Kommentaren erwähnt, verwenden DNS-Zonentransfers natürlich immer TCP.
quelle