Zanim ktokolwiek zapyta: Widziałem Kiedy zapytania DNS używają TCP zamiast UDP? i to nie odpowiada na moje pytanie.
Ciągle słyszę tylko: „ jeśli odpowiedź jest za długa, DNS użyje TCP ”. Nie wyjaśnia to jednak, jak to się dzieje.
Oto sytuacja: klient DNS prosi o rozstrzygnięcie rekordu za pomocą UDP. Rekord jest za długi dla UDP:
- serwer odpowiada określonym kodem operacji, aby klient przeszedł na TCP
- serwer w ogóle nie odpowiada, a klient próbuje ponownie przez TCP
- serwer otwiera połączenie TCP z klientem (głupie, jeśli liczyć NAT, ale kto wie?)
- klient jakoś (?) „wie”, że dane zapytanie powinno być uruchamiane przez TCP, aby nie przeszkadzało to UDP
- W razie potrzeby pixie DNS w magiczny sposób przekształcają UDP w TCP
Szukałem odpowiedzi w całym Internecie, ale jest dużo hałasu (patrz wyżej) i wydaje mi się, że nie mogę napisać odpowiedniego zapytania Google (nie mogę też znaleźć informacji w RFC) .
domain-name-system
rfc
StanTastic
źródło
źródło
1.
i4.
oba są mniej więcej poprawne (które z nich zależy od okoliczności).Odpowiedzi:
Klient nie wie z góry, że odpowiedź będzie zbyt duża, więc przesyła zapytanie do serwera za pośrednictwem UDP.
Serwer odpowie przez UDP i będzie zawierać jak najwięcej i ustawi obcięty bit nagłówka („TC” http://www.networksorcery.com/enp/protocol/dns.htm ).
Klient może następnie ponownie wysłać żądanie przez TCP i uzyskać pełną odpowiedź.
Zobacz także: https://tools.ietf.org/html/rfc5966
Oraz: https://www.ietf.org/rfc/rfc2181.txt
I jak wspomniano w komentarzach, oczywiście transfery stref DNS zawsze używają TCP.
źródło