Chi effettivamente "recluta" in una ricerca DNS ricorsiva?


16

Sto cercando di capire la differenza tra ricerche DNS iterative e ricorsive. Fondamentalmente, penso che l'iterativo sia come chiamare un grande magazzino in cerca di un prodotto, e quando non ce l'hanno, ti danno il numero di un altro dei loro rami da chiamare e poi chiami tu stesso l'altro ramo. Versus ricorsiva, che è come chiamare il grande magazzino, e quando non hanno quello che stai dopo, che chiamare l'altro ramo a vostro nome alla ricerca del prodotto. Il fatto è che sto ricevendo opinioni contrastanti su questo quando si tratta di DNS. Quando penso a ricorsivo, penso a qualcosa che assomiglia a questo: testo alternativo

Ma mentre leggo articoli sul Web e anche facendo una ricerca di immagini Google per ricorsivi DNS , vedo molti più esempi che assomigliano a questo: testo alternativo

Per me, questo secondo esempio sembra più iterativo di quanto ricorsivo, perché ciascuno degli "altri server DNS" sta dicendo al "server DNS preferito" l'indirizzo della macchina successiva da cercare, piuttosto che cercarlo per conto del preferito Server DNS. L'unico elemento ricorsivo che vedo è che il server DNS preferito esegue ricerche per conto del client DNS, ma da qui in poi sembra sicuramente iterativo.

Quindi suppongo che la mia domanda sia: la ricerca DNS "ricorsiva" significa davvero solo ricorsiva nel senso che il server DNS preferito fa qualcosa per conto del cliente, ma davvero iterativo da qui in poi? La maggior parte dei risultati che sto vedendo nella ricerca di immagini di Google mi sta portando a credere a questo, il che pone quindi la domanda: la prima immagine di questo post è semplicemente sbagliata?


Dai un'occhiata al podcast Ask Mr DNS, divertente, informativo e hanno gestito DNS dal 1989, creato o co-autore di tutti i libri DNS di O'Reily, ecc. Ask-mrdns.com Scopri di più di quanto tu abbia mai desiderato sapere.
Ronald Pottol,

Risposte:


16

Il tuo ultimo paragrafo è corretto.

Il flag "Recursion Desired" (RD) inviato dal client nell'intestazione della richiesta DNS (vedi RFC 1035) chiede al server "per favore dammi la risposta completa a questa domanda".

Quel server che chiede ripetutamente la catena di server dei nomi per la risposta corretta. Quelle query non dovrebbero avere il bit RD impostato.

Alla fine la risposta del server ricorsivo avrà il flag "Recursion Available" (RA) disponibile, che indica che la risposta è stata effettivamente completamente risposta. Al contrario, un server autorevole non imposterà il flag RA.

IMHO, è una cattiva scelta di terminologia.

Per quello che vale, quel primo diagramma che hai trovato è fondamentalmente errato. I server root non eseguono query su nessun altro server, ma inviano solo riferimenti ad altri server.


4

Per quanto ne capisco, la "ricerca ricorsiva" è esclusivamente dal punto di vista dell'originale. Quindi, se chiede a un server DNS e ottiene una risposta completamente risolta, allora è una "query ricorsiva". Se quel server a sua volta effettua ricerche ricorsive o iterative, non è qualcosa di cui il richiedente originale deve preoccuparsi.


1

Il primo dei due diagrammi nella tua domanda non è corretto. I server root non inviano query ad altri server. Se in effetti i server root inoltrassero query come mostrato in quel diagramma, il sistema DNS sarebbe molto più vulnerabile agli attacchi DoS di quanto non sia in realtà.

Il secondo diagramma è per lo più corretto ma troppo semplificato per mostrare la natura ricorsiva delle ricerche. Il diagramma è comunque abbastanza dettagliato da poter indicare dove si verifica la ricorsione.

Il server DNS accanto al numero 12indicato Preferred DNS serverè il punto in cui si verifica la ricorsione. Il termine server DNS preferito non è una terminologia standard. Quel server verrebbe normalmente chiamato un ricursore DNS di cache o qualche abbreviazione di quello.

Quando si osserva il traffico di rete, sembra effettivamente iterativo. La ricorsione è interamente interna al ricursore DNS. Se osservi l'implementazione di un ricursore DNS troverai una struttura ricorsiva nel modo in cui vengono gestite le richieste.

La ricorsione può essere facile da individuare se l'implementazione utilizza un thread per richiesta e le ricerche sono implementate utilizzando chiamate di funzione ricorsive. Ma i progetti più efficienti non usano un thread per richiesta e la ricorsione si trova invece all'interno delle strutture di dati utilizzate dal ricursore DNS.

Il motivo per cui è necessaria la ricorsione è dovuto all'implementazione dei riferimenti tra i server DNS autorevoli. Questo è meglio illustrato con un esempio. Nel diagramma viene visualizzato il server DNS autorevole per microsoft.compuntare al server DNS autorevole per example.microsoft.com. Questo viene fatto usando un NSrecord che punta a un nome host. Quindi, ad esempio, il server autorevole microsoft.compotrebbe dire al ricursore DNS che ms.example.netè autorevole example.microsoft.com.

A quel punto il ricursore DNS dovrebbe risolvere ms.example.netprima di poter procedere con la risoluzione di example.microsoft.com.

Per risolvere un nome host deve prima risolvere un nome host diverso. Questa è la ricorsione. Affinché ciò non comporti una ricorsione infinita, DNS ha dei record di colla che vengono inviati insieme ai NSrecord in alcuni casi.


Ci sono molti errori in questo. L'uso del termine "ricorsione" non ha nulla a che vedere con l'uso di "chiamate a funzioni ricorsive" - ​​la risposta di Vatine è più vicina - la ricorsione è solo un nome (scelto male) per quando un client chiede a un server una risposta completamente risolta . Il meccanismo utilizzato dai cosiddetti "server ricorsivi" è in realtà chiamato iterazione . Inoltre, incolla i record e non impedire la "ricorsione infinita": sono lì per prevenire il problema "pollo e uovo" di come trovi l'indirizzo dei nameserver se quei server si trovano nello spazio del dominio delegato .
Alnitak,

La risoluzione DNS di @Alnitak è intrinsecamente ricorsiva. Qualsiasi algoritmo ricorsivo può essere trasformato in qualcosa di iterativo trasformando lo stack di esecuzione in una diversa struttura di dati. Tale possibilità è già menzionata nella mia risposta. E il problema di dipendenza ciclica che menzioni non è qualcosa di diverso da una ricorsione infinita. I due sono davvero la stessa cosa. Se dovessi applicare un algoritmo ricorsivo ingenuo senza notare che l'attività sottostante soffre di una dipendenza ciclica, il risultato sarà una ricorsione infinita.
Kasperd,

@Alnitak Non è possibile eliminare lo stack di ricorsione ed eseguire la risoluzione DNS ripetutamente tenendo traccia di un numero costante di nomi DNS alla volta. È possibile rappresentare lo stack di ricorsione con una struttura dati dall'aspetto diverso, ma rimane intrinsecamente ricorsivo. È possibile configurare un nome di dominio in modo da mantenere la profondità di ricorsione su un solo. Ma non tutti i nomi di dominio sono configurati in questo modo.
Kasperd,

Cito RFC 1034 - "" I due approcci generali per affrontare questo problema sono "ricorsivi", in cui il primo server persegue la query per il client su un altro server e "iterativo", in cui il server rimanda il client a un altro server e consente al client di perseguire la query . "" Non ha nulla a che fare con "stack" o "strutture dati".
Alnitak,

@Alnitak Questo paragrafo si riferisce a un diverso tipo di ricorsione rispetto alla mia risposta. La ricorsione menzionata nella mia risposta è (come chiaramente indicato nella mia risposta) interna a un server DNS specifico. Se effettivamente provassi a implementare la ricorsione DNS in un modo completamente iterativo, non funzionerebbe mai. Non appena si ottiene una risposta con un record NS senza colla associata, è necessario cercare l'indirizzo IP del nome host a cui punta quel record NS prima di poter continuare con la risoluzione originale.
Kasperd,
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.