
Хотя через 6 лет (в сентябре 2006 года) юристам RIAA через суд удалось принудить производителя eDonkey2000 прекратить распространение программы (и даже подменить её сайт зловещим предупреждением о нелегальности файлообмена), формат гиперссылок

Хэширование файлов. URI. Файлообмен. Каким образом все три эти идеи сплелись воедино в формате
Три источника, три составные части…
Хэшированием файла называют математический процесс, который способен поставить в соответствие каждому файлу некоторое длинное (многобитное), но всё же небольшое по размеру число, называемое хэшем. При этом даже незначительные изменения в файле приводят к значительным изменениям этого числа (хэша), поэтому, как правило, разным файлам соответствуют разные хэши. Разумеется, количество хэшей конечно, хотя и очень велико
Идея URI (единой формы идентификации ресурсов) первоначально пришла в голову
Джед Мак-Калеб (Jed McCaleb), создатель eDonkey2000, осознал, что хэш (уникальный идентификатор содержимого файла) как раз и является превосходной основою для записи URI этого файла. Что же касается вопроса о том, где можно получить файл, то ответом стал
Ссылка на файл
На примере дистрибутива Adobe Reader X я покажу вам, как выглядит типичная
ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|/
На этом примере вы можете видеть, что формат её вот каков:
ed2k://|file|имяФайла|размерФайла|хэшФайла|параметр=значение|/
Подобно шаблону MediaWiki (например, в Википедии),
Имя файла, как и всегда в URI, может содержать служебные символы, подвергающиеся обязательному шестнадцатиричному кодированию побайтно. Пробел, например, записывается
Хэш ed2k вычисляется по алгоритму MD4 таким образом, чтобы сделать возможным вышеупомянутое получение разрозненных кусков файла от нескольких участников файлообмена.
Википедия гласит, что для этой цели крупные файлы делятся на равные ломти, размером по 9500 килобайтов (9 728 000 байтов) каждый, и на последний ломоть меньшего размера, после чего для каждого ломтя вычисляетсяПротокол файлообмена устроен таким образом, что клиенты обмениваются списками128-битный хэш MD4. (Если размер файла кратен 9500 килобайтам, то последний ломоть считается пустым, но хэш MD4 от него всё равно рассчитывается.) После этого полученные хэши MD4 объединяются встык, и их собственный хэш MD4 становитсяed2k-хэшем файла. Если же весь файл по размеру меньше 9500 килобайтов, тогда его хэш MD4 становитсяed2k-хэшем файла.
Необязательные параметры
Необязательные (именованные) параметры могут быть вот какими:
- Параметр «s» указывает источник файла, альтернативный файлообмену. В настоящее время это, как правило,
HTTP-сервер, хотя стандарт 2006 года предусматривал возможность получения файла и из сети Overnet. Пример:
Таких параметров в однойed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|s=http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.0.1/en_US/AdbeRdr1001_en_US.exe|/
ed2k-гиперссылке может быть несколько.
- Параметр «p» содержит полный набор
MD4-хэшей ломтей файла, обеспечивая возможность более надёжной и полной проверки их целостности, чем общийed2k-хэш. В том случае, если файл скачан по URLуиз параметра «s», а общение с другими клиентами ed2k (для получения хэшей ломтей) не производилось, этот набор позволит идентифицировать один или несколько порченых ломтей, а не просто убедиться в несоответствии файла и хэша. Пример:
Этот пример содержит пробелы для удобства переноса на новую строку. Настоящий URI записывается без пробелов.ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87| p=F9FB4A4E8EC04320AC49D0F796807795: 9159AD7B29693322F8455258F6D02B3C: A51E847EB4E2D67BD04F1AF95D0479EB: A489A6E25ADF20366E8C4BCD69DD0DA9: 3315A3CDAE777B7AE8E734161DAEFFE3|/
- Параметр «h» позволяет указать хэш AICH, употребляемый некоторыми современными
ed2k-клиентами (например, eMule) для дополнительного контроля целостности файла. (Он рассчитывается по алгоритмуSHA-1 на небольших кусках файла, по 180 килобайтов, после чего находятся хэши от хэшей в рамках своего рода древовидной структуры; в параметре «h» указывается хэш, получающийся на вершине дерева.) Наличие этого параметра делает коллизии ещё менее вероятными, а также упрощает коррекцию ошибок в случае нарушения целостности файла при передаче, позволяя быстро выяснить, какой кусок ломтя повреждён (и восстановить один этот кусок вместо того, чтобы заново выкачивать по файлообмену весь ломоть). Пример:
Этот пример содержит пробел для удобства переноса на новую строку. Настоящий URI записывается без пробелов.ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87| h=5XYGXYHANLAEAL3Y67HVF32OOJ2HXCCP|/
- Параметр «f» позволяет указать местонахождение текстового файла, содержащего более полную
ed2k-гиперссылку — на случай, если она превосходит длину 2038 символов, являющуюся пределом размера URI в некоторых стандартах и браузерах. Пример:
Боюсь, что он едва ли поддерживается всеми современными клиентами.ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|f=http://example.org/long.ed2k|/
- Параметр «sources» имеет особую форму: всегда записывается в конце ссылки, и ему предшествует параметр, состоящий
из косой черты («/»). Таким образом, клиенты, не понимающие параметра «sources» (и одновременно считающие косую черту признаком концаed2k-гиперссылки), вольны его игнорировать. Содержит ключевое слово «sources», за которым, через запятую, следуют адреса (или доменные имена) и портыed2k-клиентов. Пример:
Этот пример содержит пробел для удобства переноса на новую строку. Настоящий URI записывается без пробелов.ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|/|sources,ed2k.example.net:6789,ed2k.example.org:12345|/
Вполне понятно, что такие адреса должны быть долговременными, что достигается резервированием постоянногоIP-адреса или привязкою доменного имени к динамическому DNS.
Создание файловой ed2k-гиперссылки
Чтобы создать
(Продолжение следует…)