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. LE COMPONENTI<br />

Nel caso <strong>di</strong> comunicazioni su tcp, il plug-<strong>in</strong> che riceve il datagramma può spe<strong>di</strong>re<br />

la risposta sullo stesso socket su cui è arriva<strong>to</strong> il datagramma stesso.Il problema<br />

non si pone per comunicazioni udp o s<strong>in</strong>gole tcp.<br />

Connectivity verrà pres<strong>to</strong> migliora<strong>to</strong> aggiungendo la possibilità <strong>di</strong> limitare la<br />

banda da usare. Inoltre, nel momen<strong>to</strong> <strong>in</strong> cui il modulo <strong>di</strong> anonima<strong>to</strong> risulterà<br />

pron<strong>to</strong>, l’<strong>in</strong>frastruttura è <strong>di</strong>segnata per accoglierlo senza cambiare praticamente<br />

nulla nel co<strong>di</strong>ce. Ai plug-<strong>in</strong>, qu<strong>in</strong><strong>di</strong>, basterà cambiare un campo nei messaggi<br />

<strong>in</strong>viati a ques<strong>to</strong> ges<strong>to</strong>re per avvalersi <strong>di</strong> queste due nuove funzionalità.<br />

2.2 Kademlia<br />

Kademlia, come già annuncia<strong>to</strong>, è il pro<strong>to</strong>collo <strong>di</strong> ricerca su cui si basa PariPari<br />

per essere completamente serverless. Inizialmente, abbiamo cerca<strong>to</strong> <strong>di</strong> imple-<br />

mentare quan<strong>to</strong> descrit<strong>to</strong> nel paper <strong>di</strong> Petar Maymounkov e David Mazi‘eres [1]<br />

quan<strong>to</strong> più fedelemente possibile.<br />

Con lettera maiuscola vengono <strong>in</strong><strong>di</strong>cati i no<strong>di</strong>;<br />

Esempio: A, B, C.<br />

Con lettera maiuscola corsiva vengono <strong>in</strong><strong>di</strong>cate le risorse;<br />

Esempio: A, B, C.<br />

X,Y <strong>in</strong><strong>di</strong>cano il nodo generico;<br />

X , Y <strong>in</strong><strong>di</strong>cano l’hash generico;<br />

IPC <strong>in</strong><strong>di</strong>ca le <strong>in</strong>formazioni utili a contattare C.<br />

IDX = ID del nodo X.<br />

hashB = hash della risorsa B.<br />

Tabella 2.1: Pseudoco<strong>di</strong>ce: convenzioni<br />

Ripassiamo ora i pr<strong>in</strong>cipi card<strong>in</strong>e del funzionamen<strong>to</strong> <strong>di</strong> Kademlia. Kademlia<br />

basa il suo funzionamen<strong>to</strong> sulla metrica XOR. Ogni nodo è contrassegna<strong>to</strong> da un<br />

co<strong>di</strong>ce identificativo univoco (d’ora <strong>in</strong> poi semplicemente ID). Ogni risorsa gestita<br />

dalla <strong>rete</strong> è pure contrad<strong>di</strong>st<strong>in</strong>ta da un co<strong>di</strong>ce (d’ora <strong>in</strong> poi semplicmente hash)<br />

appartenente allo stesso spazio <strong>di</strong> ID. Ogni nodo che entra nella <strong>rete</strong> assume,<br />

qu<strong>in</strong><strong>di</strong>, un ID e calcola l’hash <strong>di</strong> tutte le sue risorse da con<strong>di</strong>videre. Kademlia<br />

calcola le <strong>di</strong>stanze, <strong>in</strong>terpretando come un <strong>in</strong>tero lo XOR bit a bit dei due ID (o<br />

dei due hash).<br />

d(A, B) = IDA ⊕ IDB;<br />

22

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

Saved successfully!

Ooh no, something went wrong!