Domanda

Di recente, ho letto un documento del protocollo Kademlia, ho cercato di capire il protocollo, ma ho ancora qualche domanda: Perché un nodo deve trovare un altro nodo quando conosce il suo ID, ma IP o la porta? Perché ha la ID, mentre lui non conosce l'indirizzo IP o porto, dove ha fatto ottenere l'ID? Credo che la "distanza" tra due nodi diversi non è una distanza di routing o di distanza reale, è solo una distanza virtuale che può essere utilizzato l'algoritmo per trovare il nodo in fretta, è quello giusto?

Forse il mio inglese non è molto chiaro perché l'inglese non è la mia lingua madre, ma cercherò di esprimermi chiaro se si ha bisogno. Grazie mille!

È stato utile?

Soluzione

Come Chao ha detto, la natura distribuita dei mezzi di rete che i nodi hanno bisogno di pubblicare i propri ID e le coordinate agli altri nodi che parlare. Non c'è posto centrale in cui gli ID vengono mappati a informazioni di contatto, in modo che ogni nodo deve mantenere questa mappatura per un sottoinsieme dei nodi della rete nella propria tabella di routing.

tabelle di routing Kademlia sono strutturati in modo che i nodi avranno conoscenza dettagliata della rete vicino a loro, e esponenziale decrescente conoscenza più lontano.

L'uso di XOR bit a bit come misura della distanza tra gli ID nozionale ha il vantaggio che per un dato ID bersaglio, non esistono due ID possono avere la stessa distanza del bersaglio.

Immaginate un semplice esempio in cui gli ID sono nella gamma da 00 a 63. Se Kademlia utilizzato per esempio puro differenza matematico come misura della distanza, 15 e 35 sarebbe la stessa distanza di 25 - entrambe avrebbero una distanza di 10. Utilizzando XOR, la distanza tra 15 e 25 è 22, e tra 25 e 35 è 58

In questo modo, il gruppo di k ID vicini al dell'ID di destinazione può essere calcolata senza ambiguità.

La costante k ha un paio di usi in Kademlia, ma è soprattutto il fattore di replica. In altre parole, un pezzo di dati vengono memorizzati sul k nodi più vicini al ID dei dati.

Il processo di ricerca è progettato per restituire un gruppo di k nodi (prima di memorizzare dati su ciascuna di esse) o restituire un singolo pezzo di dati (dal primo nodo tenendolo durante le iterazioni di ricerca).

A causa di questo, pura Kademlia non è più adatto a trovare solo un singolo nodo, quindi non sono sicuro che una parte della tua domanda è troppo rilevante. Se avete voglia di utilizzare Kademlia per trovare un singolo nodo, probabilmente sarebbe la pena di modificare il processo di ricerca di finire presto, non appena qualsiasi nodo rendimenti del nodo di destinazione recapiti (nello stesso modo in cui le finiture di ricerca presto se un valore obiettivo viene rilevato durante il processo).

Altri suggerimenti

Dal momento che è distribuita la rete, per definizione, non c'è tavolo un master di funzione dell'identificatore> mapping degli indirizzi. I nodi non devono (e di solito non) conoscono tutti gli altri nodi. Il processo di "trovare" un nodo è sostanzialmente quella di chiedere nodi conosciuti "più vicino" al bersaglio non tanto per il nodo di destinazione direttamente, ma di quello che i nodi sono più vicini al bersaglio. Il risultato di quella query che si dà il prossimo gruppo di nodi per interrogare, e il processo si ripete - e perché un nodo potrebbe restituire i risultati che sono più vicini di quanto non sia, ogni iterazione tende a trovare i nodi sempre più vicino al bersaglio til you finalmente raggiungere un nodo che può dire "Oh, nodo X? Ha ragione laggiù".

Almeno questo è quello che sto comprensione di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top