Kademlia

Prima di proseguire è meglio che leggiate la pagina sull' utilizzo di Kad.
Le versioni di eMule a partire dalla 0.40 hanno aggiunto la possibilità di collegarsi anche alla rete "Kademlia" oltre che ai classici servers.
Regna molta confusione sull’argomento, perciò facciamo un passo indietro.
Il funzionamento di eMule può essere diviso in due parti: ricerca delle fonti e scambio effettivo dei files tra i clients.
La ricerca della fonti avviene cercando sui servers presenti nella lista servers del vostro client e attraverso lo scambio fonti (source exchange) con il quale in pratica si saltano i servers e si ottiene una maggiore velocità di ricerca: basta che un server vi dia almeno un client valido ed ecco che chiedendo a lui la lista delle fonti conosciute le trovate tutte in un colpo solo o quasi.
In seguito quando avete ottenuto dal server l’elenco dei clients che vi interessano, la richiesta di entrare nella loro coda di upload viene fatta dal vostro eMule direttamente, così come il trasferimento dei files avviene direttamente dal vostro PC al loro senza più disturbare i servers, che vengono usati solo come un elenco telefonico, in cui non si cerca per nome e cognome ma per hash del file che dovete scaricare.
 
Kademlia a cosa serve?
Kademlia cerca le fonti senza passare attraverso i servers, ma utilizzando solo una rete costituita dagli stessi clients eMule di altri utenti.
Ecco perciò che si parla di rete serverless, cioè senza servers: gli hash dei files non devono più essere depositati sui servers ogni volta che fate partire eMule, ma circolano tra i vari clients secondo certi criteri matematico/statistici che ne ottimizzano il funzionamento.
Il nome Kademlia è quello dato a questo insieme di algoritmi dai suoi inventori Petar Maymounkov e David Maziéres dell'università di New York.
Detto questo si capisce come mai Kademlia NON fa scaricare più velocemente e di solito NON trova più fonti rispetto al collegamento ai soli servers (anche se potrebbero esserci clients che utilizzano esclusivamente la rete Kademlia), questo perchè le code restano le stesse di sempre (e di conseguenza anche i tempi di attesa), e lo scambio fonti rende quasi invisibile la differenza fra le due reti una volta che avete ottenuto almeno qualche clients valido, perchè lo scambio diretto salta sia i servers che Kademlia. Al massimo Kademlia vi fa trovare un po’ prima tutte le fonti per quel file, ma lo scopo di questo sistema non è accelerare la rete, bensì irrobustire la rete contro il suo unico punto debole: i servers.
Già in passato più volte il network è andato in crisi per l’eccessivo numero di utenti o qualche difetto software e si sono trovate soluzioni sempre nuove per alleggerire il carico dei servers.
Oggi ancor più rischiosa diventa la posizione dei servers con la spada di Damocle di eventuali procedimenti legali dovuti alle nuove leggi sui copyright in circolazione in vari Paesi del mondo.
I servers più grossi contengono oltre il 90% degli utenti, senza di essi si ferma tutto.
Kademlia vuole essere una via alternativa ai servers, svolgendone le stesse funzioni ma distribuendo lo “sforzo” su tutta la rete.
 
Perchè attivare Kademlia?
Il nuovo Network per funzionare ha bisogno di clients che facciano da “ponte” fra la rete con i servers e la nuova rete, in modo che coloro che si collegano anche solo a Kademlia possano trovare almeno una fonte per ogni file esistente per iniziare a scaricarlo (e trovare tutte le altre grazie allo scambio fonti). Ogni client collegato ad entrambe le reti infatti tiene conto di quanti sono in coda per i vari files che si stanno condividendo e contribuisce al numero di risposte per le ricerche effettuate su Kademlia, popolando di risultati la neonata rete.
Sembra proprio che almeno per questa volta non dobbiate domandarvi cosa può fare la rete per voi, ma cosa potete fare voi per la rete.
 
Quali sono gli svantaggi di collegarsi anche a Kademlia?
In pratica nessuno. Una piccola quantità di banda viene usata per comunicare con gli altri clients ma non c’è nessun incremento visibile rispetto al vecchio eMule (la banda persa è misurata nel margine inferiore della finestra, tra parentesi tonde, dove c’è scritto up e down; se non vedete le parentesi dovete attivare Opzioni --> Connessione --> Mostra OverHead).
Procedura di configurazione e prima connessione a Kademlia (da farsi una volta sola)
Prima di tutto controllate che in Opzioni --> Connessione --> Rete ci sia il segno di spunta sia su Kad che eD2K.
Sempre in Opzioni --> Connessione c’è la possibilità di cambiare la porta UDP che dovete aprire sul router o sul firewall insieme all'altra (la TCP serve per i server) per non essere Firewalled (equivalente ad ID basso con i servers).
Come prima volta dovete procurarvi gli indirizzi di clients già collegati. A questo proposito, potete seguire la guida prima connessione a Kad , che vi farà scaricare una lista di contatti validi.
 
Procedura di bootstrap, secondo metodo:
deve essere eseguita mentre state già scaricando e siete collegati ad un server quindi cercate un file a caso molto diffuso e iniziate a scaricarlo, aspettando 5 minuti perchè tutte le fonti vengano contattate.
Il metodo più semplice consiste nel premere su Bootstrap nella finestra Kademlia, lasciando evidenziata la seconda opzione ("from known clients" o "dai client conosciuti"). In questo modo eMule cercherà in automatico un client valido fra tutti i clients a cui si è collegati da cui iniziare il collegamento.
 
 
Non meravigliatevi se il primo collegamento con la rete sarà alquanto lento. Ciò le prime volte è perfettamente normale.
 
Come faccio a sapere che Kademlia funziona veramente?
 
Per verificare che tutto funzioni correttamente controllare le seguenti cose:
1) nella barra di stato all’estremo inferiore di eMule vedrete il mondino con tutte e due le frecce verdi, se così non è riprovate a fare il bootstrap da un altro client.
2) Nella finestra Kademlia vedete un certo numero di contatti con il pallino verde a fianco, se non vedete alcun contatto riprovate la procedura di bootstrap.
3) Nella finestra server --> Le mie informazioni alla voce KAD Rete dovete vedere scritto Connesso e NON Firewalled, se così non è tornate alla finestra Kademlia e premete Ricontrolla Firewall. Se il Firewalled permane potrebbe essere necessario riconfigurare il vostro router o firewall aprendo la porta UDP . Sempre in "Le mie informazioni" controllate alla voce ED2K Rete di avere ID alto (altrimenti eMule scaricherà male, vedi ID basso).
4) Se fin qui è tutto ok testate la ricerca su Kademlia andando nella pagina “Cerca” e selezionando in “metodo di ricerca” (method in inglese), Kad Rete invece di Server o Globale (Server). Mettete una parola chiave qualsiasi, per esempio di uno dei files che state scaricando e avviate la ricerca: in al massimo 15-20 secondi dovreste avere almeno 1 risultato (se il file non è troppo raro, ecco perchè bisogna collegarsi a tutte e 2 le reti, migliorando di fatto anche Kademlia).
Se la ricerca non funziona cambiate parola chiave oppure ricontrollate i punti dall’uno al tre. Dovete avere "Connesso" per non incorrere in problemi.
Ricordate che i contatti memorizzati da eMule sono altri clients connessi a Kademlia in giro per la rete, quindi se non usate la rete Kademlia per diverso tempo è possibile che nessuno di quei clients quando fate ripartire il mulo sia ancora attivo: dovete ripetere la procedura di bootstrap.
 
Procedura di connessione abituale
 
Per collegarvi simultaneamente sia alla rete servers che a quella Kademlia all’avvio di eMule premete il solito pulsante colorato “Connetti” in alto a sinistra.
In Opzioni -- > Connessione potete anche settare l’opzione “Connessione automatica all’avvio” così ogni volta che parte il mulo si collega da solo. (Se dovesse faticare ad entrare sui servers potete sempre fare doppio click a mano nella lista server)
Se siete collegati ad entrambe le reti eMule userà sia i servers che Kademlia per ottenere sempre le massime prestazioni, non dovrete preoccuparvi di altro.
Per usare correttamente Kademlia potete fermarvi a leggere qui.
Ciò che segue entra nel dettaglio tecnico e risponde a qualche curiosità che spesso viene chiesta sul canale #eMule-italian (vedi Esperti Online)
 
Quali altre differenze ci sono nelle nuove versioni con Kademlia?
 
Oltre alle differenze già viste se andate alla estrema destra della finestra files condivisi (trascinando la barra di scorrimento orizzontale verso destra) noterete una nuova colonna File eD2K|Kad che contiene di solito due icone: un computer e un mondino
La spiegazione è semplice: il primo (il computer) dice che avete dato al server la lista dei vostri files condivisi quando vi siete collegati (può essere assente solo se non usate i server ma solo Kademlia), il secondo (il mondino) dice che il file che state condividendo viene visto anche dagli utenti Kademlia.
La condivisione dei files sulla nuova rete infatti adesso si chiama Publishing (pubblicazione) e non è istantanea come con i servers (per evitare di sovraccaricare gli altri clients e la vostra linea), e deve essere ripetuta ogni 5 ore per tutti i vostri files.
I files vengono pubblicati progressivamente comunicando il loro hash ad altri clients presenti nella vostra lista contatti. La scelta non è casuale, voi pubblicate un file presso quegli eMule che hanno hash “vicino” a quello del file, così chi cerca quel file manderà la richiesta solo a quella precisa categoria di client il cui hash è “vicino” a quello del file.
L’hash di un file o del vostro client (generato in modo casuale alla prima apertura di eMule) viene infatti utilizzato per calcolare delle “distanze” virtuali.
Queste distanze sono calcolate con lo XOR (OR esclusivo) dei bit degli hash che dovete confrontare es: 101101 XOR 110111 = 011010 cioè il risultato è 1 solo se uno dei due bit è 1, non entrambi; per questo l’algoritmo Kademlia è stato definito dagli autori “A peer-to-peer Information System Based on The Xor Metric”. Questa distanza tra voi e gli altri è quella che vedete nella finestra Kademlia con una sfilza di 0 e 1 a fianco di ogni riga.
Se ordinate questa colonna “Distanza” vedrete che gli 0 a sinistra generano una scaletta man mano che scorrete la lista verso il basso: la cosa non è casuale.
Il vostro eMule cerca di collegarsi a clients (circa 800) che abbiano hash distribuiti in modo da coprire le distanze che gli servono in modo uniforme, così da consentire una più rapida ricerca dei risultati e una maggiore efficienza (il vostro client deve avere almeno un contatto per ogni gruppo di sottoalberi diversi dal proprio se pensate ai client come allocati in un virtuale albero binario di ricerca… ma non spacchiamo il capello in 4 .
Dalla versione 0.44 di eMule è stato introdotto il supporto id basso per la rete Kad. Ciò significa che un client con Kad in stato firewalled sarà in grado di usufruire del network Kad come se tale stato non fosse, ma a certe condizioni. In pratica, se Kad risulta firewalled, eMule cercherà un altro client con Kad non firewalled da utilizzare come compagno (buddy) per la ricerca delle fonti. Ad un client con Kad firewalled è permesso appoggiarsi ad un client con userhash simile a quello opposto al nostro (esempio se 1010 siamo noi, cerchiamo qualcuno vicino a 0101), e tramite questo effettuare le ricerche di Kad, come se firewalled non fosse. Ciò non vuol dire che non è più un problema avere Kad in stato firewalled, ma semplicemente che nel caso lo fosse ci sarebbe la possibilità (non la certezza) di sfruttare un altro client. Chiaramente ci deve essere la disponibilità di un client non firewalled, con userhash opposto (o simile) e che non abbia già un altro client da supportare. Infatti, per ogni client con Kad NON firewalled, può esserci un solo client con Kad firewalled in supporto.
Nella finestra Kademlia la colonna “Tipo” sta ad indicare il numero di mancate risposte di quel client ai nostri collegamenti (analogo a “fallimenti” della finestra Server), dopo 5 fallimenti il contatto viene cancellato, Tipo 0 significa che quel client ci ha risposto sempre.
Un’altra differenza che potete apprezzare nella finestra trasferimenti è la presenza nella colonna “Dimensione” dell’origine delle varie fonti ricevute (dovete espandere la lista fonti cliccando due volte sul file). Può comparire Ed2k Server (la fonte vi è arrivata in seguito ad una richiesta ai server), Source Exchange (Scambio Fonte) (la fonte vi è arrivata tramite richiesta diretta di scambio fonti con altri client), Passive (Passivo) (la fonte aveva chiesto di entrare in coda da voi per scaricare, voi non la conoscevate ed eMule l’ha aggiunta automaticamente alla lista come fonte per quel file), Kad (la fonte vi è arrivata tramite la ricerca di Kademlia sulla nuova rete).
E’ un modo per analizzare l’efficienza del sistema.
Dalla versione 0.50a nella finestra Kad cliccando su questo pulsantino   è possibile visualizzare un grafico che vi permetterà di seguire in tempo reale come eMule cerca i nodi e li contatta  (curiosità più che altro per gli sviluppatori).
L' obiettivo del Kad è trovare i nodi "vicini alla parola" cercata perchè questi nodi possono conoscerne altri più utili alla vostra ricerca, se ci sono il nodo interrogato vi collega al successivo.
Nel grafico ogni pallino rappresenta un nodo, più sono posizionati in basso e più sono vicini (come chiave/parola non come distanza "fisica") alla ricerca che state facendo; le frecce indicano le ricerche indirizzate ai vari nodi (molti nodi vi segnaleranno nodi che già conoscete, questo è il motivo per cui potete vedere nodi con molte frecce puntate verso di loro), i pallini senza frecce indicano nodi che sono esclusi dalla ricerca (normalmente i primi tre).
 

 
Il nodo  ha risposto alla vostra ricerca ed ha trovato altri nodi più vicini di se stesso alla "parola";
Il nodo  è stato interrogato ma non ha ancora risposto;
Il nodo  non ha risposto, probabilmente non è connesso;
Il nodo  ha risposto ma non ha trovato altri nodi più vicini di se stesso alla "parola"
 Questa icona posta vicino ad un nodo indica che il nodo ha il file e vi ha mandato la risposta che apparirà tra i risultati della ricerca;
Questa invece indica che il nodo non ha il file o non ha risposto - andando col mouse su ogni nodo si ottengono i dettagli della ricerca.
Nella parte destra della finestra Kad è presente un istogramma.
- L' asse X (orizzontale) rappresenta tutti i nodi che il vostro eMule memorizza e che sono "vicini" come "distanza matematica" all'ID del vostro eMule.
- L'asse Y (verticale) rappresenta il numero di contatti per ogni nodo memorizzato.
- I nodi più contattati sono candidati ad essere memorizzati in quanto "vicini".
- I nodi più "vicini" sono in grigio, quelli più "lontani" sono in rosso.