2012-02-16 31 views
5

Recentemente 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 ne conosce il ID ma IP o porta? Perché ha l'ID mentre non conosce l'ip o la porta, dove ha ottenuto l'ID? Penso che la "distanza" tra due nodi diversi non sia una distanza di instradamento o una distanza reale, è solo una distanza virtuale che può usare l'algoritmo per trovare rapidamente il nodo, giusto?Come comprendere il protocollo Kademlia

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

+1

Checkout http: // brillante.it/article/introduction-kademlia-dht-how-it-works –

risposta

14

Come ha detto cHao, la natura distribuita della rete significa che i nodi devono pubblicare i propri ID e i loro dettagli di contatto su altri nodi con cui parlano. Non esiste un punto centrale in cui gli ID vengono mappati alle informazioni di contatto, quindi ogni nodo deve mantenere questa mappatura per un sottoinsieme dei nodi sulla rete nella propria tabella di routing.

Le tabelle di instradamento di Kademlia sono strutturate in modo che i nodi abbiano una conoscenza dettagliata della rete vicina a loro e una conoscenza esponenziale che diminuisce ulteriormente.

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

Immaginate un semplice esempio in cui gli ID sono compresi nell'intervallo da 00 a 63. Se Kademlia viene utilizzato ad es. pura differenza matematica come misura della distanza, 15 e 35 sarebbe la stessa distanza a 25 - entrambi avrebbero una distanza di 10. Usando XOR, la distanza tra 15 e 25 è 22, e tra 25 e 35 è 58.

In questo modo, il gruppo di k ID più vicini a un ID di destinazione può essere calcolato senza ambiguità.

La costante k ha un paio di usi in Kademlia, ma è principalmente il fattore di replicazione. In altre parole, un pezzo di dati viene memorizzato sui nodi k più vicini all'ID dei dati.

Il processo di ricerca è progettato per restituire un gruppo di nodi k (prima di memorizzare i dati su ciascuno di essi) o restituire un singolo pezzo di dati (dal primo nodo che lo contiene durante le iterazioni di ricerca).

Per questo motivo, Kademlia puro non è il più adatto per trovare un solo nodo, quindi non sono sicuro che parte della tua domanda sia troppo rilevante. Se si desidera utilizzare Kademlia per trovare un singolo nodo, probabilmente varrebbe la pena di modificare il processo di ricerca per terminare presto non appena qualsiasi nodo restituisce i dettagli di contatto del nodo di destinazione (nello stesso modo in cui la ricerca termina in anticipo se un valore di destinazione si trova durante il processo).

8

Poiché la rete è distribuita, per definizione, non esiste una tabella principale di ID-> mapping di indirizzi. I nodi non devono (e di solito non devono) conoscere tutti gli altri nodi. Il processo di "ricerca" di un nodo è fondamentalmente quello di chiedere ai nodi noti "più vicini" all'obiettivo non tanto sul nodo di destinazione direttamente, ma su quali nodi sono più vicini alla destinazione. Il risultato di tale query ti dà il prossimo gruppo di nodi da interrogare, e il processo si ripete - e poiché un nodo restituirebbe risultati più vicini di quanto non sia, ogni iterazione tende a trovare nodi sempre più vicini al bersaglio fino a che tu finalmente Raggiungi un nodo che può dire "Oh, nodo X? È proprio laggiù".

Almeno questo è quello che sto capendo.

+0

Grazie per le tue risposte veloci, ma voglio sapere Perché devo trovare il nodo X e dove ho ottenuto l'ID o il nome della X? E qual è il vero significato della "distanza" tra due nodi? È perché X ha il file che voglio? –

+0

Per quanto ne so, la "distanza" tra due nodi è semplicemente un XOR dei loro ID. Sembra anche che gli ID dei nodi e gli ID dei "valori" (ad esempio contenuto, file, informazioni di ricerca, qualunque) condividano lo stesso spazio delle chiavi e uno dei punti per trovare i nodi "più vicini" a una chiave è dire loro di memorizzare il Informazioni. Trovare un valore equivale a trovare un nodo, ma se un nodo ha il valore corrispondente all'ID, risponde con quello invece di un elenco di nodi. – cHao

+0

Quindi la Distanza è solo un valore per utilizzare l'algoritmo di ricerca rapida. La tua risposta è utile, grazie! –