UDP üzerinden DNS neden 512 bayt sınırına sahip?


15

Bu soruya bir cevap arıyordum (başlıktaki) ve bulduğum en iyi şey:

DNS Protokolü tasarımında, minimum ağ trafiği üretirken performansı optimize etmek için UDP aktarım Bloğu boyutu (faydalı yük boyutu) 512 Bayt ile sınırlandırılmıştır.

sorum şu: performansı tam olarak nasıl arttırıyor ve UDP kullanırken bu sınırlamanın başka nedenleri var mı?


5
Soru aslında yanlış bir öncüye dayanmaktadır (en azından modası geçmiş bir soruna). 512 bayt yükü sınırı artık yok, aşağıya bakın.
Håkan Lindqvist

Yanıtlar:


19

512 baytlık yük, taşıma sırasında parçalanırsa DNS paketlerinin yeniden birleştirilebileceğini garanti eder. Ayrıca, genel olarak konuşursak, daha küçük paketlerin rastgele bırakılma olasılığı daha azdır.

IPv4 standardı belirtir her konak 576 bayt veya daha az reassemble paketlerinin mümkün olması gerektiğini. Bir IPv4 üstbilgisi (seçenekler dahilinde 60 bayt kadar yüksek olsa da 20 bayt) ve 8 baytlık bir UDP üstbilgisiyle, 512 bayt yükü olan bir DNS paketi 576 bayttan küçük olacaktır.

@RyanRies'in dediği gibi: DNS, TCP'yi daha büyük yükler ve bölge aktarımları ve DNSSEC için kullanabilir. TCP devreye girdiğinde çok daha fazla gecikme var, çünkü UDP'nin aksine, herhangi bir veri akmaya başlamadan önce istemci ve sunucu arasında bir el sıkışma var.


7
İlgili bir not: her zaman 13 kök DNS çözümleyici adının (a.root-servers.net ile m.root-servers.net arasında) olmasının nedeni, bir sorgunun DNS yanıtına sığabilecek maksimum sayı olmasıdır. 512 bayt sınırını aşmadan kök. Bu nedenle, kök DNS altyapısına daha fazla fiziksel sunucu eklesek bile, mantıksal olarak her zaman on üç kök sunucu kalır.
phoebus

2
@RyanRies İzin verilen daha büyük bir yüke sahip DNSSEC EDNS0 için aslında TCP değil normal çalışma modudur.
Håkan Lindqvist

1
İzin verilen en küçük MTU 576 bayt değil, IPv4'te 68 bayt ve IPv6'da 1280 bayttır.
kasperd

1
@phoebus, 14 sunucunun 13 sunucunun 512 baytı nasıl aşmadığını gösterebilir misiniz? arkasındaki hesaplama nedir?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 bayt, 576 değil, değil mi?
Carlo Wood

12

Modern DNS artık UDP için 512 bayt yükü ile sınırlı değil.

İle EDNS0 kullanımda daha büyük bir yükü boyutu DNSSEC'nin tanımayan müşteriler için durum yaygın olarak, aynı zamanda, hangi belirtilebilir.

UDP üzerinden daha büyük yükler için destek çift kenarlı bir kılıçtı, ancak saldırganın büyük bir yanıt alan bir sorgu kullanıyorsa daha iyi amplifikasyon elde edebileceğiniz için amplifikasyon saldırıları için ad sunucularının kullanılmasının neden daha popüler olmasının nedeni budur. .

EDNS0'ın nitritli ayrıntıları için bkz. Rfc2671


2
Bu doğrudur, ancak hala 512 baytın üzerinde UDP DNS paketlerini bırakan yönlendiriciler ve güvenlik duvarları vardır.
Ryan Ries

2
@RyanRies Evet, elbette günümüz standartlarına göre yanlış kabul edilen davranış olsa da, yine de zaman zaman sorunlara neden olan bir şeydir. (Teoride, eğer böyle bir sınırlama mevcutsa, ilgili yazılımı daha büyük yanıtları işleme / daha fazla göndermeme yeteneğinin reklamını yapmayacak şekilde yapılandırmayı bilir.)
Håkan Lindqvist

1

Örneğin DNS işlemleri, sorgular ve bölge bakım işlemleri varsayılan olarak bağlantı noktası 53'ü kullanır. Performans nedenleriyle, sorgular 512 baytlık bir blok boyutu sınırı olan UDP protokolünü kullanır. TCP, isteğe bağlı olarak sorgu işlemleri için işlem bazında müzakere edilebilir, ancak TCP ile yapılan performans yükü nedeniyle, bu aslında teorik bir özelliktir. Tarihsel olarak, 512 bayt yanıt boyutu sınırını aşmak her ne pahasına olursa olsun önlendi ve aslında 13 IPv4 kök sunucu sınırı tek bir 512 bayt UDP işleminde döndürülebilecek maksimum değerdi.

Ron Aitchison - Pro DNS ve BIND 10 - 2011


Teşekkürler. Teklifin kaynağını öğrenebilir miyiz (ona atıfta bulunmak için)?
Pothi Kalimuthu

-2

Bu bir QOS olayı.

UDP vatansız olduğundan, paketlerde hata işleme mümkün değildir.

Böylece, paketleri maksimum boyutta tutarak, hedeflerine ulaşacakları daha büyük bir değişiklik olur ve hata işleme eksikliğinin etkisini azaltır.


Daha büyük paketler UDP'nin TCP'ye geçtiği anlamına gelmez. Söylediklerini yanlış mı anlıyorum?
mfinni

Muhtemelen haklısın. Sanırım bunu bir yerlerde önerilen bir RFC'de okudum.
Garreth McDaid

UDP başarısız olmaz, ancak DNS için özellikle UDP kullanılırken yanıt çok büyükse bu kesik bir yanıtla sonuçlanır (gerçek yanıt tüm verileri içermez ve 'kesilmiş' bayrağı bunu gösterecek şekilde ayarlanır), istemci bunun yerine TCP kullanarak yeniden deneyebilir.
Håkan Lindqvist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.