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

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

Ага… И нас уже преследуют неприятности. Как видно, секция 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 ее лишен.
Несомненно, с такой проблемой вселенского масштаба нужно бороться. Какие же способы для этого есть.
Что же является причиной различия хэшей?
Как известно, хэш торрента или info_hash — это хэш SHA-1 от секции info в торрент-файле. В этой секции обычно находится размер раздачи, список файлов и другая информация о раздаваемом контенте. Например, торрент, созданный нашим любимым uTorrent, изнутри выглядит примерно вот так:

Действительно, ничего лишнего. А теперь посмотрим, что даст нам

Ага… И нас уже преследуют неприятности. Как видно, секция info пополнилась фирменными азуреусовскими штучками в виде пункта name.utf-8, дублирующего не понятно для чего предыдущий пункт name. Действительно, стоит глянуть в спецификацию протокола, где ясно сказано, что метаинформация и так в utf-8. Еще один пункт, испортивший нам
В итоге мы получили два разных хэша от одного и того же файла еще на этапе лишь создания торрента. Дальше больше.
После загрузки торрента на трекер ситуация обычно усугубляется. Многие трекеры принудительно делают торренты приватными, т.е. добавляют private=1 в секцию info, тем самым портя хэш (кстати, на torrents.ru эта конструкция долгое время, видимо, по ошибке вставлялась вне секции info). Но это полбеды. Очень многие трекеры добавляют в эту архиважную секцию всякую дрянь вроде указания принадлежности торрента именно себе: tracker=***.ru и прочее, что опять же делает торрент уникальным.
Чем же губительно отличие хэшей?
Тем, что распространение контента в битторрент-сетях сильно тормозится различием хэшей в то время, как файлы раздачи идентичны, и можно было существенно оптимизировать весь процесс, унифицируя принцип создания торрентов. Такая картина не только портит распространение раздачи по DHT, но и не позволяет вам оптимально качать одну и ту же раздачу с нескольких трекеров, добавив новые адреса для анонсов. Получается, что раздавать один и тот же файл на несколько трекеров можно, а вот качать — нет.
Сегодня многие трекеры, включая torrents.ru, отказались от практики «опривачивания» торрентов, что очень радует, но вышеназванная дрянь tracker=torrents.ru в секции info все усилия сводит на нет, потому как хэши торрентов с того же торрентс уникальны.
К слову также хотелось бы упомянуть проблему самого протокола битторрент, заключающуюся в том, что имена раздаваемых файлов (не говоря уж об их относительном расположении в раздаче) оказывают самое непосредственное влияние на хэш. Это на мой взгляд очень большая прореха во всем этом гениальном протоколе. Если не ошибаюсь, даже ed2k ее лишен.
Что делать?
Несомненно, с такой проблемой вселенского масштаба нужно бороться. Какие же способы для этого есть.
- Трекерам на стадии загрузки торрента автоматически приводить его к стандартному виду, очищая секцию info от конструкций вроде name.utf-8 и не добавлять туда ничего лишнего от себя. И, если это не противоречит идеологии ресурса, не делать торрент приватным. Впрочем, даже приватные торренты с разных трекеров могут быть объединены в мультитрекерную раздачу, что уже хорошо.
- Разработчикам битторрент-клиентов прийти к единому стандарту генерации торрентов.
- Нам с вами — рядовым пользователям — создавать торрент-файлы по возможности в едином клиенте, на роль которого лучше всего выбрать именно uTorrent как самого распространенного.