Sebelum ada yang bertanya: Saya sudah melihat Kapan permintaan DNS menggunakan TCP, bukan UDP? dan itu tidak menjawab pertanyaan saya.
Yang saya terus dengar adalah " jika jawabannya terlalu panjang, DNS akan menggunakan TCP ". Ini tidak menjelaskan bagaimana itu terjadi.
Jadi inilah situasinya: Klien DNS meminta resolusi catatan menggunakan UDP. Rekor terlalu panjang untuk UDP:
- server menjawab dengan opcode tertentu, agar klien beralih ke TCP
- server tidak menjawab sama sekali, dan klien mencoba ulang melalui TCP
- server membuka koneksi TCP ke klien (bodoh, jika Anda menghitung NAT, tapi siapa yang tahu?)
- client entah bagaimana (?) 'tahu' bahwa kueri yang diberikan harus dijalankan melalui TCP sehingga tidak mengganggu UDP
- Pixies DNS secara ajaib mengubah UDP menjadi TCP bila diperlukan
Saya sudah mencari di internet untuk jawabannya, tetapi ada banyak suara (lihat di atas), dan saya sepertinya tidak bisa menulis permintaan Google yang tepat untuk itu (saya juga tidak bisa menemukan info di RFC, dalam hal ini) .
domain-name-system
rfc
StanTastic
sumber
sumber
1.
dan4.
keduanya kira-kira benar (yang mana dari keduanya tergantung pada keadaan).Jawaban:
Klien tidak tahu sebelumnya bahwa responsnya akan terlalu besar, sehingga akan meminta server melalui UDP.
Server akan merespons melalui UDP dan akan memasukkan sebanyak mungkin dan mengatur bit header yang terpotong ("TC" http://www.networksorcery.com/enp/protocol/dns.htm ).
Klien kemudian dapat mengirim ulang permintaan melalui TCP dan mendapatkan respons penuh.
Lihat juga: https://tools.ietf.org/html/rfc5966
Dan: https://www.ietf.org/rfc/rfc2181.txt
Dan seperti yang disebutkan di komentar, tentu saja transfer zona DNS selalu menggunakan TCP.
sumber