Perché DNS tramite UDP ha un limite di 512 byte?


14

Ho cercato una risposta a quella domanda (quella nel titolo) e la cosa migliore che ho trovato è stata:

Nella progettazione del protocollo DNS, la dimensione del blocco di trasporto UDP (dimensione del payload) è stata limitata a 512 byte per ottimizzare le prestazioni generando un traffico di rete minimo.

la mia domanda è: in che modo questo migliora le prestazioni e ci sono altri motivi per questa limitazione quando si utilizza UDP?


5
La domanda si basa in realtà su una premessa errata (per lo meno obsoleta). Il limite di payload a 512 byte non è più, vedere la mia risposta di seguito.
Håkan Lindqvist,

Risposte:


18

Il payload da 512 byte garantisce che i pacchetti DNS possano essere riassemblati se frammentati durante il trasporto. Inoltre, in generale, ci sono meno possibilità che i pacchetti più piccoli vengano eliminati casualmente.

Lo standard IPv4 specifica che ogni host deve essere in grado di riassemblare pacchetti di 576 byte o meno. Con un'intestazione IPv4 (20 byte, sebbene possa arrivare a 60 byte con opzioni) e un'intestazione UDP a 8 byte, un pacchetto DNS con un payload di 512 byte sarà inferiore a 576 byte.

Come dice @RyanRies: DNS può usare TCP per payload più grandi e per trasferimenti di zona e DNSSEC. C'è molta più latenza quando TCP entra in gioco perché, a differenza di UDP, c'è una stretta di mano tra il client e il server prima che i dati inizino a fluire.


7
Una nota correlata: la ragione per cui ci saranno sempre 13 nomi di resolver DNS di root (a.root-servers.net attraverso m.root-servers.net) è perché questo è il numero massimo che può rientrare in una risposta DNS a una query per la radice senza superare il limite di 512 byte. Pertanto, anche se aggiungiamo più server fisici all'infrastruttura DNS di root, logicamente rimarranno sempre tredici server di root.
phoebus il

2
@RyanRies Per DNSSEC EDNS0 con un payload consentito maggiore è in realtà la normale modalità operativa, non TCP.
Håkan Lindqvist,

1
La MTU minima consentita non è 576 byte, è 68 byte in IPv4 e 1280 byte in IPv6.
Kasperd,

1
@phoebus puoi mostrarmi come 13 server non superano i 512 byte mentre 14 server lo fanno? qual è il calcolo dietro di esso?
Titi Wangsa bin Damhore,

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

12

Il DNS moderno non è più limitato a 512 byte di payload per UDP.

Con EDNS0 in uso è possibile specificare una dimensione di payload maggiore, che è comunemente il caso dei client compatibili con DNSSEC.

Il supporto per payload più grandi su UDP è stato un'arma a doppio taglio, tuttavia, è in parte il motivo per cui l'utilizzo di nameserver per attacchi di amplificazione è diventato più popolare in quanto è possibile ottenere una migliore amplificazione se l'attaccante utilizza una query che ottiene una risposta ampia .

Vedi rfc2671 per i dettagli chiacchieroni di EDNS0


2
Questo è vero, ma ci sono ancora router e firewall là fuori che rilasciano pacchetti DNS UDP oltre 512 byte.
Ryan Ries,

2
@RyanRies Sì, mentre questo è ovviamente un comportamento che è considerato errato dagli standard odierni, è qualcosa che occasionalmente causa ancora problemi. (In teoria, se si ha un tale limite, si saprebbe configurare il software in questione per non pubblicizzare la capacità di gestire / non inviare risposte più grandi.)
Håkan Lindqvist

1

Le operazioni DNS, ad esempio, le query e le operazioni di manutenzione della zona per impostazione predefinita utilizzano la porta 53. Per motivi di prestazioni, le query utilizzano il protocollo UDP con un limite di dimensione del blocco di 512 byte. Il TCP può essere facoltativamente negoziato su una transazione per transazione per le operazioni di query, ma a causa del sovraccarico di prestazioni sostenuto con TCP, questa è essenzialmente una capacità teorica. Storicamente, il superamento del limite della dimensione di risposta di 512 byte era generalmente evitato a tutti i costi, e in effetti il ​​limite di 13 server root IPv4 era il massimo che poteva essere restituito in una singola transazione UDP da 512 byte.

Ron Aitchison - Pro DNS e BIND 10 - 2011


Grazie. Possiamo conoscere la fonte della citazione (per attribuire ad essa)?
Pothi Kalimuthu,

-2

È una cosa QOS.

Poiché UDP è senza stato, la gestione degli errori dei pacchetti non è possibile.

Pertanto, mantenendo i pacchetti alle dimensioni massime, si verifica una modifica maggiore che raggiungeranno la loro destinazione, riducendo l'impatto dell'assenza di gestione degli errori.


Pacchetti più grandi non significano che UDP esegue il failover su TCP. Sto fraintendendo quello che stai dicendo?
mfinni,

Probabilmente hai ragione. Penso di averlo letto da qualche parte in una proposta di RFC.
Garreth McDaid

UDP non esegue il failover, ma per DNS in particolare se la risposta è troppo grande per adattarsi quando si utilizza UDP, si otterrà una risposta troncata (la risposta effettiva non contiene tutti i dati e il flag "troncato" è impostato per indicare questo), il client può quindi riprovare usando TCP.
Håkan Lindqvist,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.