Mengapa DNS melalui UDP memiliki batas 512 byte?


14

Saya telah mencari jawaban untuk pertanyaan itu (yang ada di judul) dan hal terbaik yang saya temukan adalah:

Dalam desain Protokol DNS, ukuran Blok UDP transport (ukuran payload) telah dibatasi hingga 512-Bytes untuk mengoptimalkan kinerja sementara menghasilkan lalu lintas jaringan yang minimal.

pertanyaan saya adalah: bagaimana tepatnya ini meningkatkan kinerja dan apakah ada alasan lain untuk pembatasan ini saat menggunakan UDP?


5
Pertanyaannya sebenarnya didasarkan pada premis yang salah (paling tidak yang sudah usang). Batas muatan 512 byte tidak lebih, lihat jawaban saya di bawah ini.
Håkan Lindqvist

Jawaban:


18

Payload 512 byte menjamin bahwa paket DNS dapat dipasang kembali jika terfragmentasi dalam perjalanan. Juga, secara umum ada sedikit kemungkinan paket kecil dijatuhkan secara acak.

Standar IPv4 menentukan bahwa setiap host harus dapat menyusun kembali paket-paket 576 byte atau kurang. Dengan header IPv4 (20 byte, meskipun bisa setinggi 60 byte / pilihan) dan header UDP 8 byte, paket DNS dengan muatan 512 byte akan lebih kecil dari 576 byte.

Seperti yang dikatakan @RyanRies: DNS dapat menggunakan TCP untuk muatan yang lebih besar dan untuk transfer zona dan DNSSEC. Ada banyak latensi ketika TCP ikut bermain karena, tidak seperti UDP, ada jabat tangan antara klien dan server sebelum data mulai mengalir.


7
Catatan terkait: alasan akan selalu ada 13 nama penyelesai DNS root (a.root-servers.net melalui m.root-servers.net) adalah karena itu adalah jumlah maksimum yang dapat ditampung dalam respons DNS terhadap permintaan untuk root tanpa melebihi batas 512 byte. Jadi, bahkan ketika kita menambahkan lebih banyak server fisik ke infrastruktur DNS root, secara logis akan selalu ada tiga belas server root.
phoebus

2
@RyanRies Untuk DNSSEC EDNS0 dengan muatan yang diizinkan lebih besar sebenarnya adalah mode operasi normal, bukan TCP.
Håkan Lindqvist

1
MTU terkecil yang diizinkan bukan 576 byte, itu adalah 68 byte di IPv4 dan 1280 byte di IPv6.
kasperd

1
@phoebus dapatkah Anda menunjukkan kepada saya bagaimana 13 server tidak melebihi 512 byte sementara 14 server melakukannya? apa perhitungan di baliknya?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 byte, bukan 576, bukan?
Carlo Wood

12

DNS modern sebenarnya tidak terbatas pada muatan 512 byte untuk UDP lagi.

Dengan EDNS0 digunakan, ukuran muatan yang lebih besar dapat ditentukan, yang juga merupakan kasus umum bagi klien yang sadar DNSSEC.

Dukungan untuk muatan yang lebih besar daripada UDP telah menjadi pedang bermata dua, namun, sebagian alasan mengapa menggunakan server nama untuk serangan amplifikasi menjadi lebih populer karena Anda dapat mencapai amplifikasi yang lebih baik jika penyerang menggunakan kueri yang mendapat respons besar .

Lihat rfc2671 untuk detail seluk-beluk EDNS0


2
Ini benar, tetapi masih ada router dan firewall di luar sana yang menjatuhkan paket DNS UDP lebih dari 512 byte.
Ryan Ries

2
@RyanRies Ya, sementara itu tentu saja perilaku yang dianggap salah oleh standar todays itu adalah sesuatu yang masih kadang-kadang menyebabkan masalah. (Secara teori jika seseorang memiliki batas seperti itu di tempat, orang akan tahu untuk mengkonfigurasi perangkat lunak yang relevan untuk tidak mengiklankan kemampuan penanganan / tidak mengirim tanggapan yang lebih besar.)
Håkan Lindqvist

1

Operasi DNS misalnya, kueri, dan operasi pemeliharaan zona dengan port penggunaan default 53. Untuk alasan kinerja, kueri menggunakan protokol UDP dengan batas ukuran blok sebesar 512 byte. TCP dapat dinegosiasikan secara opsional berdasarkan transaksi per transaksi untuk operasi kueri, tetapi karena overhead kinerja yang dikeluarkan oleh TCP, ini pada dasarnya adalah kemampuan teoritis. Secara historis, melebihi batas ukuran respons 512 byte biasanya dihindari dengan segala cara, dan memang batas 13 server akar IPv4 adalah maksimum yang dapat dikembalikan dalam transaksi UDP 512-byte tunggal.

Ron Aitchison - Pro DNS dan BIND 10 - 2011


Terima kasih. Bolehkah kita mengetahui sumber kutipan (untuk memberikan atribusi padanya)?
Pothi Kalimuthu

-2

Ini hal QOS.

Karena UDP tidak memiliki kewarganegaraan, penanganan paket yang salah tidak mungkin dilakukan.

Dengan demikian, dengan menjaga paket ke ukuran maksimal, ada perubahan yang lebih besar mereka akan mencapai tujuan mereka, mengurangi dampak dari tidak adanya penanganan kesalahan.


Paket yang lebih besar tidak berarti bahwa UDP gagal-ke TCP. Apakah saya salah memahami apa yang Anda katakan?
mfinni

Kamu mungkin benar. Saya pikir saya membacanya dalam proposal RFC di suatu tempat.
Garreth McDaid

UDP tidak gagal, tetapi untuk DNS secara khusus jika responsnya terlalu besar untuk digunakan saat menggunakan UDP, ini akan menghasilkan respons terpotong (respons aktual tidak berisi semua data dan bendera 'terpotong' diatur untuk menunjukkan ini), klien kemudian dapat mencoba menggunakan TCP sebagai gantinya.
Håkan Lindqvist
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.