AICH-de
Contents
Beschreibung
Über den Erfolg von ICH braucht man nicht zu diskutieren, aber es ist ein Punkt erreicht, an dem es das Leben erleichtern würde, wenn man tatsächlich genau wüsste, welches bestimmte Teilstück eines Chunks verfälscht ist. Das wird besonders bedeutungsvoll, wenn mehrere Chunks verfälscht sind. AICH (Advanced Intelligent Corruption Handler) nimmt sich dieses Problems an, und erlaubt es aMule, und anderen, es unterstützenden Clients, tatsächlich zu wissen, welche Teilbereiche eines Chunks verfälscht sind.
Begriffserkärungen
Jeder Chunk ist in 53 je 180KB grosse Stücke unterteilt, und für jedes dieser Stücke wird nach dem SHA1-Algorithmus eine Prüfsumme ermittelt. Jede dieser Prüfsummen wird Block-Prüfsumme genannt. Durch paarweise Kombination von Block-Prüfsummen (d.h. jedes Stück mit dem Stück neben sich) wird aMule einen ganzen Baum von Prüfsummen erhalten (dieser Baum, welcher folglich ein aus allen anderen Block-Prüfsummen gebildetes Hashset ist, wird AICH-Prüfsummensatz genannt). Jede Prüfsumme, die weder eine Block-Prüfsumme, noch die Stamm-Prüfsumme ist, ist eine Kontroll-Prüfsumme. Die Prüfsumme an der Spitze ist die Stamm-Prüfsumme, und es wird angenommen, dass sie beim Veröffentlichen zusammen mit dem ed2k-Link zur Verfügung gestellt wird.
Die eigentliche Funktionsweise
Wenn ein Chunk als verfälscht bekannt ist, wird aMule versuchen, von einem Client, der die Datei vollständig hat, einen AICH-Prüfsummensatz zu bekommen. Er wird alle Prüfsummen der 53 Stücke des verfälschten Chunks und die erforderlichen Kontroll-Prüfsummen anfragen, um den AICH-Prüfsummensatz-Baum bis zur Stamm-Prüfsumme vervollständigen zu können.
Sobald er die Block-Prüfsummeen und die Kontroll-Prüfsummen bekommt, baut er den Baum zum Ermitteln der Stamm-Prüfsumme auf, und überprüft, ob es die gleiche Stamm-Prüfsumme ist, den der originale eD2k-Link liefert. Falls ja, dann werden diese Block-Prüfsummen als glaubwürdig angenommen. Falls nicht, dann werden diese Block-Prüfsummen und Kontroll-Prüfsummen verworfen, und als Fakes angesehen.
Sobald die Block-Prüfsummen als verlässlich betrachtet werden, wird jeder 180KB-Teil des verfälschten Chunks ermittelt (nach dem SHA1-Algorithmus), um die entstehende Prüfsumme mit der empfangenen Stamm-Prüfsumme zu vergleichen. Wenn sie identisch sind, ist der Teil nicht verfälscht, sodass man ihn nicht erneut runterladen muss. Wenn sie sich unterscheiden, dann ist der Teil verfälscht, und wird erneut runtergeladen.
Wie wird die Stamm-Prüfsumme weitergegeben?
Die ideale Art und Weise, die Stamm-Prüfsumme weiterzugeben, ist über den eD2k-Link. Allerdings werden Dateien öfter über die Suchfunktion des eD2k-Clients runtergeladen. Auch sollte der eD2k-Link die Stamm-Prüfsumme nicht in seiner URL enthalten. In solchen Fällen wird eine andere Methode verwendet, um die Stamm-Prüfsumme einer Datei zu erhalten.
Clients fragen andere Clients nach der Stamm-Prüfsumme. Wenn dir mindestens 10 andere Clients die gleiche Stamm-Prüfsumme schicken, und das 92% oder mehr der insgesamt erhaltenen Stamm-Prüfsummen sind, wird diese Stamm-Prüfsumme nur für die laufende Sitzung als glaubwürdig betrachtet. Er wird nirgends auf der Platte gespeichert, und verbleibt nur im (flüchtigen) Speicher. Auch wird er nicht an andere, danach fragende Clients weitergegeben.
Wenn der Dateidownload vollständig ist, wird die Stamm-Prüfsumme mit dem gesamten AICH-Prüfsummensatz errechnet, und in der ~/.aMule/known2.met gespeichert, um ihn auf Anfrage anderen Clients zur Verfügung zu stellen.
Speichern des AICH-Prüfsummensatzes
Sobald eine Datei komplett runtergeladen wurde, errechnet aMule ihren gesamten AICH-Prüfsummensatz, und speichert diesen in der ~/.aMule/known2.met. So kann er, wann auch immer ein Client ihn abfragt, bereitgestellt werden, ohne ihn jedes Mal erneut berechnen zu müssen.
Bitte beachte, dass ICH solange nicht bei einer Datei benutzt wird, wie dafür die AICH-Methode verwendet werden kann.