eMule: I.C.H. & A.I.C.H.
eMule scarica ed invia i file in parti da 9.28MB ciascuno. Può capitare che una di esse sia corrotta, ovvero parte dei dati scaricati non siano buoni rendendolo inutilizzabile.
Per ovviare a questo inconveniente, eMule implementa l'I.C.H. (Intelligent Corruption Handling, tradotto "Trattamento intelligente dei files corrotti").
Ogni parte scaricata viene controllata dall'I.C.H. e se risulta corrotta viene eliminata e riscaricata. Il sistema è definito "Intelligent" perchè ogni volta che scarica un blocchetto da 180KB controlla l'hash di tutto il blocco da 9MB per vedere se ha corretto l'errore (gli hash parziali dei blocchi da 9 mega sono la prima cosa che emule scarica di ogni file).
In media si riscaricano solo 4,5 MB invece di 9 per recuperare il difetto e il sistema riesce nel 99.9% dei casi a recuperare il difetto. Nel registro di eMule (consultabile dalla finestra "Server" del programma) è possibile leggere quali parti risultano corrotte e quali parti sono state recuperate. Il messaggio in caso di corruzione sarà:
La parte scaricata n. X è corrotta :( [Nome File]
al successivo recupero nel registro sarà possibile leggere:
Recuperata la parte corrotta n. X :) [Nome File]
N.B.: se nel registro si nota che una determinata parte di file risulta essere sempre corrotta (ovvero si hanno diversi messaggi di corruzione per la stessa parte di file), vuol dire che probabilmente non ci sono parti buone in condivisione. Si consiglia di pazientare inizialmente, ma dopo qualche giorno, se il recupero di quella parte fallisce ancora, eliminare il file.
L'unico reale difetto dell'I.C.H. risiede nel fatto che molto spesso la quantità di dati corrotti in una parte equivale ad una sua piccola percentuale. Se si verifica una corruzione non è detto che interessi tutti i 9.28MB di cui questo è composto, anzi molto spesso sono pochi byte difettosi concentrati in un solo punto, ma se esso si trova a 9.2 MB in quella parte, bisogna comunque scaricare tutti e 9.2 MB.
Per ovviare a tele mancanza di efficienza è stato introdotto dalla versione 0.44 l' A.I.C.H. (Advanced Intelligent Corruption Handling).
Questo sistema utilizza un approccio completamente differente. Consiste in un set di hash "costruiti" a partire da blocchi di 180KB (chunk) e raggruppati in una struttura "ad albero".
Il programma crea questo albero di hash per tutti i file condivisi e lo memorizza nel file known2.met che si trova nella cartella emule\config.
Ora se eMule sta scaricando un file e rileva una parte corrotta, chiedera' un "pacchetto di recupero" da un client che sia in possesso di un set hash A.I.C.H. completo di quel file (Un sistema di controllo evita che ciò che riceviamo possa essere corretto).
Usando gli hash contenuti in esso controlla tutti i blocchi da 180KB e identifica quelli corrotti, chiedendo lo scaricamento solo di essi.
Questo significa che se in un chunk un solo byte e' corrotto, eMule conserverà tutti i blocchi da 180KB "sani", ad eccezione dell'unico blocco da 180KB contenente il byte corrotto. Seguendo l'esempio di prima, verrebbe riscaricato solo l'ultimo chunk da 9.1 a 9.28 MB invece di tutti e 9.2 MB.
Il vantaggio è palese: tramite l'A.I.C.H. è possibile recuperare parti di file senza dover essere costretti a cestinare interi blocchi corrotti solo in parte.
Si ricordi infine che la funzione A.I.C.H. è addizionale rispetto al classico I.C.H. Per cui se non è possibile recuperare un file tramite questo nuovo metodo, magari perchè non esiste un hash set A.I.C.H. valido per quel file, ci penserà l'I.C.H. a tentare di recuperare la parte corrotta.
Per Utenti Esperti:
E' possibile passare ad un client l'eD2K link di un file contenente l'intero hashing A.I.C.H. Per ottenere un eD2K link A.I.C.H., dalla finestra "File Condivisi" fare tasto destro del mouse sul file interessato>>mostra il link eD2K e selezionare l'opzione " Aggiungi l'Hash AICH di eMule per una gestione avanzata della corruzione ".
In questo modo chi riceverà il link sarà sicuro di poter contare anche sull'A.I.C.H. per il recupero delle parti corrotte. Ma anche nel caso in cui non si sia ricevuto il link A.I.C.H. è possibile usufruire di tale funzione. In questo caso eMule utilizzerà l'hash ricevuto dagli altri client, ma solo in caso che:
- Almeno 10 IP unici ci devono avere inviato questo hash.
- Il 92% dei client che ci hanno mandato un hash devono averci inviato lo stesso.
Questo hash verrà posto ad un livello di fiducia più basso e comunque non sarà possibile ricreare un link A.I.C.H. partendo da questo hash. Si capisce bene come il problema maggiore sia riscontrato per i file rari con pochissime fonti. Per questo è importante che, soprattutto il releaser, invii un link eD2K. I link AICH sono anche compatibili con i vecchi client eMule (che semplicemente ignoreranno le informazioni aggiuntive).