Dlaczego DNS przez UDP ma limit 512 bajtów?


14

Szukałem odpowiedzi na to pytanie (to w tytule) i najlepsze, co znalazłem, to:

W projekcie protokołu DNS rozmiar bloku transportu UDP (rozmiar ładunku) został ograniczony do 512 bajtów, aby zoptymalizować wydajność przy minimalnym ruchu w sieci.

moje pytanie brzmi: w jaki sposób poprawia to wydajność i czy istnieją inne powody tego ograniczenia podczas korzystania z UDP?


5
Pytanie faktycznie opiera się na fałszywej przesłance (przynajmniej przestarzałej). Limit ładunku 512 bajtów już nie istnieje, patrz moja odpowiedź poniżej.
Håkan Lindqvist

Odpowiedzi:


18

512-bajtowy ładunek gwarantuje, że pakiety DNS mogą zostać ponownie złożone, jeśli zostaną podzielone podczas przesyłania. Ponadto, ogólnie mówiąc, istnieje mniejsze prawdopodobieństwo przypadkowego upuszczenia mniejszych pakietów.

Standard IPv4 określa, że ​​każdy host musi mieć możliwość ponownego złożenia pakietów o długości 576 bajtów lub mniejszej. W przypadku nagłówka IPv4 (20 bajtów, chociaż może wynosić nawet 60 bajtów z opcjami) i 8-bajtowego nagłówka UDP, pakiet DNS z 512 bajtowym ładunkiem będzie mniejszy niż 576 bajtów.

Jak mówi @RyanRies: DNS może używać TCP do większych ładunków oraz do przesyłania stref i DNSSEC. TCP jest znacznie opóźniony, gdy TCP wchodzi w grę, ponieważ, w przeciwieństwie do UDP, między klientem a serwerem następuje uścisk dłoni, zanim jakiekolwiek dane zaczną przepływać.


7
Powiązana uwaga: powodem, dla którego zawsze będzie 13 głównych nazw DNS (a.root-servers.net do m.root-servers.net), ponieważ jest to maksymalna liczba, która może zmieścić się w odpowiedzi DNS na zapytanie o root bez przekraczania limitu 512 bajtów. Tak więc, nawet gdy dodamy więcej fizycznych serwerów do głównej infrastruktury DNS, logicznie zawsze pozostanie trzynaście głównych serwerów.
phoebus

2
@RyanRies Dla DNSSEC EDNS0 z większym dopuszczalnym ładunkiem jest tak naprawdę normalnym trybem działania, a nie TCP.
Håkan Lindqvist

1
Najmniejsza dozwolona jednostka MTU nie ma 576 bajtów, jest 68 bajtów w IPv4 i 1280 bajtów w IPv6.
kasperd

1
@ phoebus, czy możesz mi pokazać, w jaki sposób 13 serwerów nie przekracza 512 bajtów, a 14 serwerów? jakie są tego obliczenia?
Titi Wangsa bin Damhore

1
512 + 60 + 8 = 580 bajtów, a nie 576, nie?
Carlo Wood,

12

Współczesny DNS nie jest już tak naprawdę ograniczony do 512 bajtów dla UDP.

Gdy EDNS0 jest w użyciu, można określić większy rozmiar ładunku, co często zdarza się również w przypadku klientów obsługujących DNSSEC.

Obsługa większych ładunków w porównaniu z UDP jest mieczem obosiecznym, jednak jest to po części powodem, dla którego użycie serwerów nazw do ataków wzmacniających stało się bardziej popularne, ponieważ można osiągnąć lepsze wzmocnienie, jeśli atakujący użyje zapytania, które otrzymuje dużą odpowiedź .

Zobacz rfc2671, aby uzyskać szczegółowe informacje na temat EDNS0


2
To prawda, ale nadal istnieją routery i zapory ogniowe, które upuszczają pakiety UDP DNS powyżej 512 bajtów.
Ryan Ries

2
@RyanRies Tak, chociaż jest to zachowanie, które według dzisiejszych standardów jest uważane za nieprawidłowe, jest to coś, co wciąż czasami powoduje problemy. (Teoretycznie, jeśli ktoś ma takie ograniczenie, wiedziałby, aby skonfigurować odpowiednie oprogramowanie, aby nie reklamowało możliwości obsługi / nie wysyłania większych odpowiedzi.)
Håkan Lindqvist

1

Na przykład operacje DNS, zapytania i operacje utrzymania strefy domyślnie używają portu 53. Ze względu na wydajność zapytania używają protokołu UDP z limitem wielkości bloku wynoszącym 512 bajtów. TCP może być opcjonalnie negocjowany na zasadzie transakcji po transakcji dla zapytań, ale ze względu na narzut związany z wydajnością związany z TCP, jest to w zasadzie funkcja teoretyczna. Historycznie, przekraczanie limitu 512-bajtowego rozmiaru odpowiedzi było zazwyczaj unikane za wszelką cenę, a rzeczywiście limit 13 serwerów głównych IPv4 był maksimum, które można było zwrócić w pojedynczej 512-bajtowej transakcji UDP.

Ron Aitchison - Pro DNS i BIND 10 - 2011


Dzięki. Czy możemy poznać źródło cytatu (w celu przypisania go)?
Pothi Kalimuthu

-2

To kwestia QOS.

Ponieważ UDP jest bezstanowy, obsługa błędów pakietów nie jest możliwa.

Tak więc, utrzymując pakiety do maksymalnego rozmiaru, następuje większa zmiana, która dotrze do miejsca docelowego, zmniejszając wpływ braku obsługi błędów.


Większe pakiety nie oznaczają, że UDP przechodzi w tryb failover do TCP. Czy nie rozumiem tego, co mówisz?
mfinni

Pewnie masz rację. Myślę, że gdzieś to przeczytałem w proponowanym RFC.
Garreth McDaid

UDP nie przełącza awaryjnie, ale w przypadku DNS, jeśli odpowiedź jest zbyt duża, aby zmieścić się podczas korzystania z UDP, spowoduje to skróconą odpowiedź (rzeczywista odpowiedź nie zawiera wszystkich danych, a flaga „skrócona” jest ustawiona, aby to wskazać), klient może następnie spróbować ponownie za pomocą protokołu TCP.
Håkan Lindqvist
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.