вебмастер, фидошник
0,0
рейтинг
26 апреля 2011 в 19:03

Администрирование → Гиперссылки в формате «ed2k://…» и их применение. Часть 1: описание формата файловых ed2k-гиперссылок

Более десяти лет назад (6 сентября 2000 года, как можно выяснить в Архиве Интернета) на свет появился первый выпуск программы eDonkey2000, представивший миру идею и реализацию гиперссылок в формате «ed2k://…» — удивительный для своего времени алхимический сплав трёх идей: во-первых, хэширования файлов, во-вторых, URI (единой формы идентификации ресурсов), и в-третьих, файлообмена.

Хотя через 6 лет (в сентябре 2006 года) юристам RIAA через суд удалось принудить производителя eDonkey2000 прекратить распространение программы (и даже подменить её сайт зловещим предупреждением о нелегальности файлообмена), формат гиперссылок «ed2k://…» был унаследован и широко используется по сей день во всех файлообменных программах и на всех сайтах, имеющих дело с файлообменными сетями ed2k или Kad. Более того, с тех пор этот формат успел слегка подразвиться по сравнению с вариантом 2006 года. Такова эпическая сила идей, в нём заложенных.

Популярность программ, реализующих формат гиперссылок «ed2k://…», также оказалась немалою. В зените своей славы программа eDonkey2000, название которой действительно происходит от английского слова «donkey» («осёл»), в умах российских пользователей на равных боролась за жаргонное название «ослика» с мега-популярным браузером IE, который обязан этой кличкою лишь случайному сходству транскрипции «иэ» и имени ослика Иа-Иа из историй о Винни-Пухе — а также, быть может, и своему ослиному упрямству в некорректной интерпретации некоторых веб-стандартов. (Приязнь к аниме и понимание «иэ» как японского отрицания «нет» в те годы, как видно, не было распространено.) А главный из идейных «наследников» eDonkey2000 — свободная программа eMule с открытым исходным кодом — до сих пор находится в вершине списка наиболее популярных (по числу закачек) продуктов на сайте SourceForge.

Хэширование файлов. URI. Файлообмен. Каким образом все три эти идеи сплелись воедино в формате гиперссылок «ed2k://…»?

Три источника, три составные части…


Хэшированием файла называют математический процесс, который способен поставить в соответствие каждому файлу некоторое длинное (многобитное), но всё же небольшое по размеру число, называемое хэшем. При этом даже незначительные изменения в файле приводят к значительным изменениям этого числа (хэша), поэтому, как правило, разным файлам соответствуют разные хэши. Разумеется, количество хэшей конечно, хотя и очень велико (например, ≈2160 для 160-разрядных хэшей), так что появление коллизии (то есть такой пары файлов, которые имеют одинаковый хэш) возможно. Однако оно необычайно маловероятно. Поэтому, если алгоритм хэширования обладает математически доказанной криптографической стойкостью (то есть если вычислительно сложно было бы подобрать файл, соответствующий некоторому заранее известному хэшу — или даже подобрать два таких разных файла, хэши которых одинаковы), то тогда хэш файла может использоваться в качестве уникального идентификатора содержимого файла (и одновременно как средство проверки целостности содержимого файла).

Идея URI (единой формы идентификации ресурсов) первоначально пришла в голову Тиму Бернерсу-Ли в 1994 году в виде URL (единой формы адресации ресурсов), то есть такого способа записи адреса файла (или не файла, а другого ресурса), по которой любой браузер мог бы понять, где ресурс лежит. Позднее (в июне 1994 года, создав RFC 1630) Бернерс-Ли обобщил идею единой формы адресации, сформулировав идею единой формы идентификации — например, идентификатор «urn:isbn:0-395-36341-1» использует международный стандарт нумерации книг (International Standard Book Number, ISBN) для того, чтобы понятно и недвусмысленно указать, какая книга имеется в виду, хотя ничего не говорит о том, где эту книгу можно взять.

Джед Мак-Калеб (Jed McCaleb), создатель eDonkey2000, осознал, что хэш (уникальный идентификатор содержимого файла) как раз и является превосходной основою для записи URI этого файла. Что же касается вопроса о том, где можно получить файл, то ответом стал p2p-файлообмен автоматический процесс поиска и последующей прямой передачи данных между пользователями глобальной сети, впервые реализованный в июне 1999 года Шоном Фэннингом (Shawn Fanning) с появлением Napster. Употребление хэшей позволило eDonkey2000 превзойти Napster сразу по двум характеристикам: во-первых, поиск файла в сети происходил по хэшу, так что переименование файла не мешало ему быть найденным (в Napster от клиента к поисковому серверу передавались сведения только об имени и размере, но не о содержимом файла), а во-вторых, получатель файла мог собирать фрагменты файла от нескольких других участников сети (а не от одного, как в Napster) и всё же быть уверенным в целостности файла, так как целостность проверялась по хэшу.

Ссылка на файл


На примере дистрибутива Adobe Reader X я покажу вам, как выглядит типичная ed2k-гиперссылка, указывающая на файл:
ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|/

На этом примере вы можете видеть, что формат её вот каков:
ed2k://|file|имяФайла|размерФайла|хэшФайла|параметр=значение|/

Подобно шаблону MediaWiki (например, в Википедии), ed2k-гиперссылка состоит из ряда значений, разделённых вертикальной чертою. Первым всегда является схема URI («ed2k://»), а последним — косая черта («/»). Вторым указывается ключевое слово, означающее тип ссылки. Для файловых ed2k-гиперссылок это всегда «file». За ним следуют в строгом порядке имя файла, размер файла (в байтах) и ed2k-хэш файла, после них в произвольном порядке могут следовать необязательные параметры в формате «имя=значение».

Имя файла, как и всегда в URI, может содержать служебные символы, подвергающиеся обязательному шестнадцатиричному кодированию побайтно. Пробел, например, записывается в форме «%20», а русская буква «к» — в форме «%D0%BA» (в UTF-8 ей соответствуют два байта), и так далее.

Хэш ed2k вычисляется по алгоритму MD4 таким образом, чтобы сделать возможным вышеупомянутое получение разрозненных кусков файла от нескольких участников файлообмена.
Википедия гласит, что для этой цели крупные файлы делятся на равные ломти, размером по 9500 килобайтов (9 728 000 байтов) каждый, и на последний ломоть меньшего размера, после чего для каждого ломтя вычисляется 128-битный хэш MD4. (Если размер файла кратен 9500 килобайтам, то последний ломоть считается пустым, но хэш MD4 от него всё равно рассчитывается.) После этого полученные хэши MD4 объединяются встык, и их собственный хэш MD4 становится ed2k-хэшем файла. Если же весь файл по размеру меньше 9500 килобайтов, тогда его хэш MD4 становится ed2k-хэшем файла.
Протокол файлообмена устроен таким образом, что клиенты обмениваются списками MD4-хэшей всех ломтей. Соответственно, общий ed2k-хэш позволяет проверить адекватность этого списка. А получив по файлообмену хотя бы один из таких 9500-килобайтовых ломтей файла от другого участника файлообмена, клиент ужé может проверить целостность этого ломтя и тотчас же включиться в файлообмен, раздавая имеющийся ломоть далее — другим желающим.

Необязательные параметры


Необязательные (именованные) параметры могут быть вот какими:
  • Параметр «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 (для получения хэшей ломтей) не производилось, этот набор позволит идентифицировать один или несколько порченых ломтей, а не просто убедиться в несоответствии файла и хэша. Пример:
    ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87| p=F9FB4A4E8EC04320AC49D0F796807795: 9159AD7B29693322F8455258F6D02B3C: A51E847EB4E2D67BD04F1AF95D0479EB: A489A6E25ADF20366E8C4BCD69DD0DA9: 3315A3CDAE777B7AE8E734161DAEFFE3|/
    Этот пример содержит пробелы для удобства переноса на новую строку. Настоящий URI записывается без пробелов.
     
  • Параметр «h» позволяет указать хэш AICH, употребляемый некоторыми современными ed2k-клиентами (например, eMule) для дополнительного контроля целостности файла. (Он рассчитывается по алгоритму SHA-1 на небольших кусках файла, по 180 килобайтов, после чего находятся хэши от хэшей в рамках своего рода древовидной структуры; в параметре «h» указывается хэш, получающийся на вершине дерева.) Наличие этого параметра делает коллизии ещё менее вероятными, а также упрощает коррекцию ошибок в случае нарушения целостности файла при передаче, позволяя быстро выяснить, какой кусок ломтя повреждён (и восстановить один этот кусок вместо того, чтобы заново выкачивать по файлообмену весь ломоть). Пример:
    ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87| h=5XYGXYHANLAEAL3Y67HVF32OOJ2HXCCP|/
    Этот пример содержит пробел для удобства переноса на новую строку. Настоящий URI записывается без пробелов.
     
  • Параметр «f» позволяет указать местонахождение текстового файла, содержащего более полную ed2k-гиперссылку — на случай, если она превосходит длину 2038 символов, являющуюся пределом размера URI в некоторых стандартах и браузерах. Пример:
    ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|f=http://example.org/long.ed2k|/
    Боюсь, что он едва ли поддерживается всеми современными клиентами.
     
  • Параметр «sources» имеет особую форму: всегда записывается в конце ссылки, и ему предшествует параметр, состоящий из косой черты («/»). Таким образом, клиенты, не понимающие параметра «sources» (и одновременно считающие косую черту признаком конца ed2k-гиперссылки), вольны его игнорировать. Содержит ключевое слово «sources», за которым, через запятую, следуют адреса (или доменные имена) и порты ed2k-клиентов. Пример:
    ed2k://|file|AdbeRdr1001_en_US.exe|48536984|249634B84340FEB5778EC09A2A9C2B87|/|sources,ed2k.example.net:6789,ed2k.example.org:12345|/
    Этот пример содержит пробел для удобства переноса на новую строку. Настоящий URI записывается без пробелов.

    Вполне понятно, что такие адреса должны быть долговременными, что достигается резервированием постоянного IP-адреса или привязкою доменного имени к динамическому DNS.

Создание файловой ed2k-гиперссылки


Чтобы создать ed2k-гиперссылку, содержащую размер файла (в байтах) и один (ed2k) или два (ed2k и AICH) хэша, не обязательно быть участником файлообмена, устанавливать eMule или другой аналогичный клиент для сетей ed2k и (или) Kad. Простая программа LinkCreator, распространяемая через сайт SourceForge создателями eMule (125 Kb ZIP), способна без труда справиться с этой задачей в Windows (или под Wine).

        (Продолжение следует…)
Mithgol the Webmaster @Mithgol
карма
60,5
рейтинг 0,0
вебмастер, фидошник
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (36)

  • +1
    Не совсем понял как из этого

    После этого полученные хэши MD4 объединяются встык, и их собственный хэш MD4 становится ed2k-хэшем файла.

    Следует вот это

    Таким образом, получив хотя бы один из таких 9500-килобайтовых ломтей файла от другого участника файлообмена, клиент ужé может проверить целостность этого ломтя

    Мы получили один «ломоть», но у нас общих хэш для всех «ломтей». Как проверить?
    • +2
      А, извините — не дочитал до конца до параметра «p». Или это вы нелогично статью построили.
      • 0
        Я действительно не до конца прояснил этот момент. Сейчас отредактировал, переформулировал.
  • +3
    Судя по последним статьям автора, нас ожидает векторный гипертекстовый p2p ;)
  • +1
    За описание спасибо, но e2k на мой взгляд мертв. Перестаньте насиловать труп.
    • +3
      Расскажите, каким образом Вы пришли к убеждённости в том, что ed2k мёртв?
      • +3
        Понял в процессе насилия :)
      • +1
        Он перестал им пользоваться :)
        (Ушел из леса, и теперь дерево падает совершенно бесшумно)
    • +6
      Не так давно нашел по ed2k книгу, которой нигде больше не было (в электронном виде). Да он после этого для меня живее всех живых.
      • 0
        Расскажите, как (и где) искать? Или там встроенный поиск по имени файла, примерно как в DC?
        • 0
          Встроенным поиском по имени файла, да. Как правило, пробую два варианта — по-русски и транслитом. Регистр значения не имеет (раньше имел для русских букв), видимо, на юникод перешли.

          Спама много, но он легко отсекается. Достаточно несколько раз запустить поиск по беспорядочным сочетаниям типа «nohe4Ng7Ire» и все, что выдаст, занести в спам. В KAD'е спама нет, кстати.
  • 0
    Надо больше тегов.
  • 0
    Вполне понятно, что такие адреса должны быть долговременными, что достигается резервированием постоянного IP-адреса или привязкою доменного имени к динамическому DNS.

    Привязкою -> привязкой.
    • +4
      Это Mithgol.
      • –1
        Этот никнейм не дает ведь право допускать ошибки в тексте, противореча правилам, верно?
        • +2
          Приведите гиперссылку на те правила, в которых «-ою» не является допустимым в русском языке окончанием творительного падежа.
          • 0
            Первый же результат из Яндекса: http://orfografus.ru/index/0-40
            2. В творительном падеже наряду с окончанием -ой (-ей) в словах на -ия и -а, -я может быть и окончание -ою (-ею), которое является для современного языка устаревшим и употребляется в книжных стилях речи: травой — травою, землей — землею, молнией — молниею и т.д.
            • +7
              Знайте же, что я давно усвоил книжный стиль речи и им одним неуклонно пишу блогозаписи на Хабрахабре.
              • 0
                и им одним неуклонно

                … и невозбранно!
            • 0
              Эм? Устаревшее является недопустимым?
        • +4
          Ходят кони над рекооооою-уууу
    • +6
      Хм, вроде бейдж старожила, а Мицгола первый раз видите?
      В иной статье хабравчане даже соревнуются, с какой строки узнали автора (почти что «Угадай мелодию»).
      • 0
        Я — со слова ломоть.
  • 0
    простите, а ослик еще жив?
    • +3
      Программа eDonkey2000 мертва с 2006 года (см. выше), но сама сеть жива-живёхонька: основной клиентской программою в ней давно стал eMule под Windows, а также его «моды» (модификации, добавляющие те или иные функции, не всякому пользователю нужные), его аналоги для других систем, и так далее.
    • +2
      Досадно мне, но объективный анализ того, насколько жив eMule в сравнении с торрентом, не могу сейчас отыскать свежéе, чем вон тот отчёт за 2008 и 2009 год.
      • +3
        Вот например здесь отчет за вторую половину 2010
    • +1
      А с чего ему умирать, его никто не трогает, на серверах сотни тысяч пользователей и там всегда можно найти что угодно, на чем не будет висеть большая надпись что контент был удален.
      • 0
        >на серверах сотни тысяч пользователей и там всегда можно найти что угодно

        Да уж, это я хорошо помню: ждешь ~неделю и получаешь всё что угодно, кроме того, что хотел скачать :)
        • +1
          Ну это было давно, да и касалось практически только порно. К примеру два месяца назад качал книгу которая была удалена везде, включая даже рутрекер (что необычно, книга американская). Скачал минут за 5.
          • 0
            Насчет порно вы отчасти правы, мне оно приезжало под видом обычного кино.
            Впрочем, я вполне допускаю, что там можно найти что-то очень редкое. Это как с торрентами: кому-то за хватает репертуара самого крупного трекера, а кто-то(на мой взгляд, очень ограниченный) говорит, что там вообще ничего нет.
  • –3
    Как же в свое время меня бесили ссылки на файлы в формате «ed2k».
    Слава богу, сто лет этого уже не видел.
    • +5
      Меня тоже бесили заодно с файлами с идиотским расширением .torrent, которые подозрительно мало весили и ничем не открывались. ;)
      Но сейчас ни в том ни в другом не вижу ничего плохого, скорость-то только выше будет.
      • 0
        Тут дело в другом, люди свои файлы так выкладывали. Хочешь скачать, а файла ни у кого нет, и это обламывало. А торрент все-таки по другому, немного используют.
  • –1
    eDonkey мертв, по крайней мере для меня, лет пять уже не запускал… как в прочем и DirectConnect…
  • 0
    Спасибо за статью.
    Скептикам могу ответить, что сеть вполне себе жива и здравствует, и не была заменена торрентами за счёт принципиально разного подхода к обмену файлами.
    Если торренты надо специально готовить и поддерживать их жизнеспособность (в результате чего свежий файл скачать обычно проще и быстрее, а старые — практически нереально), то как справедливо отмечали некоторые комментаторы, редкие, и обычно небольшие вещи, можно найти только в eDonkey-сети, поскольку там расшариваются файлы с харда, и сколько они там лежат у кого-то, столько их и можно скачивать.
    Думаю, они так и будут параллельно развиваться.
    Ждём продолжения!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.