Обработка Повреждений
eMule использует различные средства для того чтобы удостовериться в безошибочной передаче и обмене файлов по сети. При обнаружении повреждения файла, eMule использует наиболее эффективные функции для его исправления с минимальным объемом повторно передаваемых данных.
Хэширование Файлов и АИП - Автоматическое Исправление Повреждений (ICH) Хэш Файла, Частичный Хэш и Хэш-Комплект (Hashset).
Для каждого файла в файло-обменной сети создается уникальный идентификационный номер по математическому крипто алгоритму MD4. Этот номер носит название хэш файла (file hash) и хранится в каждой стандартной ссылке eD2k, например так: ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E|/где 6744FC42EDA527B27F0B2F2538728B3E -- хэш файла, позволяющий идентифицировать файл по всей сети. Этот
Хэш Файла вычисляется путем деления всего файла на части размером 9,28 Мб. Для каждой из частей вычисляется
Частичный Хэш используя тот же алгоритм MD4.
Эти Частичные Хэши, называемые
Хэш-Комплектом, затем используются для вычисления
Хэша Файла.
К примеру файл размером 600 Мб будет разбит на 65 частей с собственными
Частичными Хэшами, по которым будет вычислен
Хэш Файла. Чтобы удостовериться, что eMule всегда получает правильный
Хэш-Комплект, может использоваться специальная ссылка содержащая
Хэш-Комплект, например:ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E| p=264E6F6B587985D87EB0157A2A7BAF40:17B9A4D1DCE0E4C2B672DF257145E98A|/где значение p= содержит
Хэш-Комплект. Каждый
Частичный Хэш отделен двоеточиями. Размер этого файла - 12043984 Байт (11,49 Мб), таким образом файл содержит одну часть 9,28 Мб и одну часть меньшего размера (остаток),и Хэш-Комплект состоит из двух Частичных Хэшей
АИП Автоматическое Исправление Повреждений (ICH) Когда eMule заканчивает смачивание части файла, проверяется совпадение частичного хэша и расчитанного для этой части значения, при совпадении эта частьиспользуется для дальнейшего распространения. Если повреждение произошло, то поврежденную часть необходимо скачивать заново.Для того чтобы не скачивать заново все 9,28 Мб, АИП выкачивает заново 180 Кб от начала поврежденной части и проверяет соответствие Частичного Хэша. Если ошибка сохраняется, выкачиваются заново следующие 180 Кб и так повторяется до тех пор пока повреждение не будет исправлено новой правильной 180 Кб порцией. Таким образом в лучшем случае приходится выкачать заново только 180 Кб, в худшем - всю 9,28 Мб часть. В среднем АИП сберегает 50% объема на повторную закачку в случае повреждения части файла.УАИП - Улучшенное Автоматическое Исправление Повреждений (AICH) Подход АИП весьма эффективен, хотя и имеет ограничение на работу только с блоками 9,28 Мб. Если повреждений файла несколько, клиенты сети распространяют поврежденные файлы или даже ошибочные Частичные Хэши, АИП становится совершенно бесполезен. В таком случае УАИП будет заботиться о целостности данных с минимальным объемом повторной закачки создавая более подробные хэши.
Корневой Хэш, Блочные Хэши и Хэш-Комплект УАИП
Начальной точкой для УАИП являются 9,28 Мб части. Каждая часть делится на блоки 180 Кб образуя 53 блока, для каждого из которых вычисляется Блочный Хэш по алгоритму SHA1. Эти Блочные Хэши образуют нижний уровень полного Хэш-Комплекта УАИП. Рисунок выше показывает построение полного дерева хэшей УАИП поблочно для файла состоящего из четырех полных частей. Каждая часть состоит из 53 блоков,всего их 212. Таким образом получается 212 Блочных Хэшей, которые формируют дерево хэшей с 7 уровнями до Корневого Хэша. Все дерево называют Хэш-Комплектом УАИП. Зеленые и желтые точки показывают математические зависимости меньших Блочных Хэшей к Корневому Хэшу. Это означает что если у нас есть доверенный
Корневой Хэш то все дерево может быть проверено по нему. eMule может создавать ссылки содержащие Корневой Хэш:ed2k://|file|name|12043984|6744FC42EDA527B27F0B2F2538728B3E| h=A2NWOTYURUU3P3GCUB6KCNW3FTYYELQB|/где h= это Корневой Хэш. Для релизов его значение должно быть указано, поскольку это значительно улучшает устойчивость к повреждениям файлов за счет обеспечения доверенного Корневого Хэша. См. Доверие к Корневому Хэшу.
Восстановление повреждения Когда eMule обнаруживает ошибку, он запрашивает Пакет для Восстановления у любого клиента с полным
Хэш-Комплектом УАИП. Пакет для Восстановления содержит все 53 Блочных Хэша поврежденной части и некоторое количество Проверочных Хэшей из полного дерева. Число Проверочных Хэшейопределяется размером файла (2^x >= 'кол-во 9,28 Мб частей', где x = количество Проверочных Хэшей).
После получения Пакета для Восстановления eMule проверяет Проверочные Хэши по доверенному Корневому Хэшу. Если они подходят, eMule проверяет все53 блока поврежденной части по Блочным Хэшам из Пакета для Восстановления. Затем УАИП сохраняет все блоки которые соответствуют своим Блочным Хэшами скачивает заново те что повреждены. В Журнале удачное восстановление будет выглядеть таким образом:09.09.2004 02:43:43: Downloaded part 6 is corrupt ([file]) 09.09.2004 02:43:46: AICH successfully recovered 8.22 MB of 9.28 MB from part 6 for [file]
Доверие к Корневому Хэшу Лучше всего скачивать файл по ссылке с
Корневым Хэшем. Допуская что источник по этой ссылке является заслуживающим доверия
Корневой Хэш тоже считается заслуживающим доверие и сохраняется на диске. Если Корневой Хэш в ссылке отсутствует eMule вынужден доверять
Корневому Хэшу от источника файла в сети. eMule доверяет Корневому Хэшу только если не менее 10 разных источников предоставляют одинаковое значение и не менее 92% всех источников его подверждают. Такой Корневой Хэш не может бытьвсегда достоверен, действует только для текущего сеанса связи, не сохраняетсяна диске и не может быть использован для создания ссылок содержащих Корневой Хэш. После создания полного Хэш-Комплекта УАИП, т.е. после успешного скачивания файла целиком, eMule начинает распространять вычисленный Корневой Хэш другим клиентам.
Примечания: Для новых релизов и редких файлов скорее всего будет недостаточно полных источников для генерации доверенного
Корневого Хэша. В таких случаях рекомендуется создавать ссылки с вложенным хэшем. При отсутствии Корневого Хэша или при его порче eMule сможет успешно выкачать файл, однако функция УАИП работать не будет.
Так как Хэш-Комплекты УАИП могут быть очень велики, они хранятся не в памяти, а в файле known2.met и считываются только при необходимости. УАИП будет эффективен только для версий eMule v.44a и выше, но сохраняет обратную совместимость с более старыми версиями.
Обновлено: 2007-02-11 Перевод: 2004-12-04 by x4mer