Pull to refresh

О хэшах и проблеме распространения в торрентах

Decentralized networks
Наверняка многие из вас в процессе пользования торрентами сталкивались с такой досадной проблемой, когда торренты одного и того же контента имеют разные хэши, что не позволяет объединить в одной раздаче несколько с разных трекеров, сделав тем самым мультитрекерную раздачу.

Что же является причиной различия хэшей?

Как известно, хэш торрента или info_hash — это хэш SHA-1 от секции info в торрент-файле. В этой секции обычно находится размер раздачи, список файлов и другая информация о раздаваемом контенте. Например, торрент, созданный нашим любимым uTorrent, изнутри выглядит примерно вот так:



Действительно, ничего лишнего. А теперь посмотрим, что даст нам второй третий по популярности в мире битторрент-клиент Azureus от того же самого файла:

image

Ага… И нас уже преследуют неприятности. Как видно, секция info пополнилась фирменными азуреусовскими штучками в виде пункта name.utf-8, дублирующего не понятно для чего предыдущий пункт name. Действительно, стоит глянуть в спецификацию протокола, где ясно сказано, что метаинформация и так в utf-8. Еще один пункт, испортивший нам праздник хэш, это private=0. Замечу, что uTorrent в случае указания публичности торрента пункт private вообще не добавляет и правильно делает, ибо private=0 равнозначно его отсутствию. Также разнится и размер кусков.

В итоге мы получили два разных хэша от одного и того же файла еще на этапе лишь создания торрента. Дальше больше.

После загрузки торрента на трекер ситуация обычно усугубляется. Многие трекеры принудительно делают торренты приватными, т.е. добавляют private=1 в секцию info, тем самым портя хэш (кстати, на torrents.ru эта конструкция долгое время, видимо, по ошибке вставлялась вне секции info). Но это полбеды. Очень многие трекеры добавляют в эту архиважную секцию всякую дрянь вроде указания принадлежности торрента именно себе: tracker=***.ru и прочее, что опять же делает торрент уникальным.

Чем же губительно отличие хэшей?

Тем, что распространение контента в битторрент-сетях сильно тормозится различием хэшей в то время, как файлы раздачи идентичны, и можно было существенно оптимизировать весь процесс, унифицируя принцип создания торрентов. Такая картина не только портит распространение раздачи по DHT, но и не позволяет вам оптимально качать одну и ту же раздачу с нескольких трекеров, добавив новые адреса для анонсов. Получается, что раздавать один и тот же файл на несколько трекеров можно, а вот качать — нет.

Сегодня многие трекеры, включая torrents.ru, отказались от практики «опривачивания» торрентов, что очень радует, но вышеназванная дрянь tracker=torrents.ru в секции info все усилия сводит на нет, потому как хэши торрентов с того же торрентс уникальны.

К слову также хотелось бы упомянуть проблему самого протокола битторрент, заключающуюся в том, что имена раздаваемых файлов (не говоря уж об их относительном расположении в раздаче) оказывают самое непосредственное влияние на хэш. Это на мой взгляд очень большая прореха во всем этом гениальном протоколе. Если не ошибаюсь, даже ed2k ее лишен.

Что делать?

Несомненно, с такой проблемой вселенского масштаба нужно бороться. Какие же способы для этого есть.
  1. Трекерам на стадии загрузки торрента автоматически приводить его к стандартному виду, очищая секцию info от конструкций вроде name.utf-8 и не добавлять туда ничего лишнего от себя. И, если это не противоречит идеологии ресурса, не делать торрент приватным. Впрочем, даже приватные торренты с разных трекеров могут быть объединены в мультитрекерную раздачу, что уже хорошо.
  2. Разработчикам битторрент-клиентов прийти к единому стандарту генерации торрентов.
  3. Нам с вами — рядовым пользователям — создавать торрент-файлы по возможности в едином клиенте, на роль которого лучше всего выбрать именно uTorrent как самого распространенного.
Tags:
Hubs:
Total votes 112: ↑94 and ↓18 +76
Views 12K
Comments Comments 108