31.05.2013 Views

progettazione e realizzazione in java di una rete peer to peer ...

progettazione e realizzazione in java di una rete peer to peer ...

progettazione e realizzazione in java di una rete peer to peer ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2.2 KADEMLIA<br />

Successivamente il nodo contatta i no<strong>di</strong> i cui ID sono mol<strong>to</strong> vic<strong>in</strong>i all’hash delle<br />

sue risorse e comunica loro le coord<strong>in</strong>ate per essere raggiun<strong>to</strong>. In ques<strong>to</strong> modo<br />

ogni hash viene assegna<strong>to</strong> al nodo che più gli è vic<strong>in</strong>o e la ricerca <strong>di</strong> <strong>una</strong> risorsa si<br />

riduce alla ricerca <strong>di</strong> un nodo della <strong>rete</strong>. Il nodo che vuole cercare un altro nodo<br />

nella <strong>rete</strong> conoscendone l’ID contatta i no<strong>di</strong> che già conosce richiedendo <strong>in</strong>for-<br />

mazioni sull’ogget<strong>to</strong> della sua ricerca. I no<strong>di</strong> <strong>in</strong>terrogati rispondono fornendogli<br />

l’elenco dei no<strong>di</strong> più vic<strong>in</strong>i <strong>di</strong> cui loro hanno notizia. Successivamente, il nodo<br />

cerca<strong>to</strong>re, iterativamente, <strong>in</strong>terrogherà dalla lista dei no<strong>di</strong> ricevuti i più vic<strong>in</strong>i a<br />

quello cerca<strong>to</strong> f<strong>in</strong>chè ques<strong>to</strong> ciclo non lo condurrà a contattare il nodo che voleva<br />

trovare (ve<strong>di</strong> 2.2).<br />

A cerca Z.<br />

1. A per tutti i no<strong>di</strong> che conosce calcola le <strong>di</strong>stanze da Z:<br />

d(Z, Xi) = IDZ ⊕ IDXi ;<br />

2. A ord<strong>in</strong>a le <strong>di</strong>stanze:<br />

sort d(Z, Xi)<br />

3. A sceglie le <strong>di</strong>stanze m<strong>in</strong>ori<br />

4. A <strong>in</strong>terroga i no<strong>di</strong> corrispondenti.<br />

asks Xi<br />

5. ogni nodo <strong>in</strong>terroga<strong>to</strong> esegue le operazioni 1, 2 e 3.<br />

6. ogni nodo <strong>in</strong>terroga<strong>to</strong> <strong>in</strong>via ad A i suoi risultati:<br />

Xi sends <strong>to</strong> A IPYi<br />

7. A <strong>in</strong>terroga i nuovi no<strong>di</strong> più vic<strong>in</strong>i <strong>di</strong> cui ha ricevu<strong>to</strong> le <strong>in</strong>formazioni:<br />

A asks Yi<br />

8. A ripete questa procedura f<strong>in</strong>o al r<strong>in</strong>venimen<strong>to</strong> <strong>di</strong> IPZ<br />

Tabella 2.2: Pseudoco<strong>di</strong>ce: la ricerca <strong>in</strong> Kademlia<br />

Volendo si può visualizzare ques<strong>to</strong> schema <strong>di</strong> lavoro come <strong>una</strong> <strong>di</strong>scesa lungo un<br />

albero b<strong>in</strong>ario <strong>in</strong> cui le foglie corrispondono ai no<strong>di</strong> della <strong>rete</strong>. Ad ogni sal<strong>to</strong> della<br />

ricerca si procede verso il basso escludendo mezzo sot<strong>to</strong>-albero f<strong>in</strong>o ad arrivare<br />

alla foglia cercata.<br />

Per realizzare ques<strong>to</strong> sistema abbiamo procedu<strong>to</strong> per fasi. Abbiamo prima<br />

<strong>in</strong><strong>di</strong>vidua<strong>to</strong> la struttura <strong>in</strong>terna che avrebbe dovu<strong>to</strong> avere il plug-<strong>in</strong> per poter sal-<br />

vare, come descrit<strong>to</strong> <strong>in</strong> [1], le <strong>in</strong>formazioni riguardo i no<strong>di</strong> con cui sarebbe entra<strong>to</strong><br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!