Что такое BitTorrent v2, и что с ним произошло?
Наверное вы слышали о новом протоколе BitTorrent v2, работа над которым велась с 2008-го года, и наделала шума с выходом второй версии популярной торрент-библиотеки Libtorrent, которой пользуются знакомые вам торрент-клиенты, такие как qBittorrent, Deluge и многие другие.
Первый полноценный документ для стандартизации BEP0052 (некоторый RFC в мире BitTorrent) вышел в 2017 году, а через три года его наконец-то освоили в некоторых из проектов. «Почему так долго», спросите вы?
Дело в том, что протокол BitTorrent поддерживается обществом, и, как вы уже догадались, имеет открытый исходный код, и как во многих открытых проектах, имеется больше хороших фич, чем людей, которых могли бы их реализовать.
Релиз BitTorrent v2 по большому обусловил тот факт, что каждая скачанная вами раздача имела уникальный info хеш, и эту раздачу могли поддерживать только те, кто общался именно по этому хешу. Радикально повлиять на значение этого хеша могло расположение файла, имя и содержание. При переименовании файла в раздаче или перемещении его из одной папки в другую, полностью менялся хеш раздачи и терялась возможность найти предыдущих сидов скачавших раздачу.
Привязка хешей файлов
.torrent файлы созданные с поддержкой BitTorrent v2 имеют в составе корневой Merkle хеш каждого файла раздачи (используется модифицированный SHA256), которые можно вбить в поиск. Таким образом, если скажем раздача обновилась (добавили серию вашего любимого сериала), вы можете найти предыдущих пиров и взять с них большинство предыдущих файлов, добавляя себе скорость скачивания, также увеличивается в несколько раз жизнь раздач, решается проблема дубликатов файлов, найти и скачать нужный вам файл становится гораздо проще, даже если раздача древняя и не имеет сидов на данном трекере. Уменьшается нагрузка на конечных пользователей — пользователи не обязаны находить и поддерживать определённые старые раздачи годами, либо их категоризировать, достаточно просто создать торрент с нужными файлами и они станут доступны любому пользователю сети по поиску хеша в Интернете.
В новом протоколе также произошёл переход от уязвимого к коллизиям SHA-1.
Экономия ресурсов
Merkle хеш также полезен тем, что если вы скачиваете единственный файл размером в 1 мегабайт, при размере части в 8мб в раздаче, вам не придётся скачивать и хранить остальные 7, чтобы убедиться, что кусок не битый или что пир не шлёт нам ложные данные, скачать придётся только 16кб. Торрент файлы только v2 формата могут весить меньше чем v1, раньше в торрент файле к каждому файлу присоединялось его местоположение, как к примеру folder1/folder2/file, и так для каждого файла, теперь же формат позволяет нам единожды указывать расположение в виде ключа массива со всеми вложенными файлами, как folder1:folder2:file1 file2 file3..fileN
Но к сожалению, с реализацией некоторых из этих функций в клиентах всё ещё есть задержка.
Больше ухудшает ситуацию нежелание администраций трекеров включать его поддержку, скажем показом хешей файлов на страницах раздач. Так появилась бы возможность искать нужные файлы (включая древние артефакты Интернета) среди разных раздач веб/встроенным поиском, легко извлечь же корневые хеши из торрентов и обычных файлов, сравнить на дубликаты и сгенерировать магнит ссылку для скачивания без дубликатов, экономя время, пространство и трафик с помощью созданной мною программы tmrr.
Совместимость
Для сосуществования двух стандартов были созданы гибридные .torrent файлы, которые имеют в составе старый v1 и новый v2 формат, которые поддерживаются всеми старыми торрент клиентами. Только лишь версии Transmission, ниже исправленной четвертой, имеют баг с обработкой таких торрентов, и работают некорректно, но признаться ради, это уже проблема конечных пользователей не желающих обновлять устаревший торрент клиент.
Так как поддержка v2 вшита в инфо-раздел торрента, новые торрент клиенты умеют апгрейдить соединения, если у пиров есть дополнительный формат, т.е. скачав v1 торрент с магнит ссылки, вы подцепите v2 аналогичной раздачи автоматически, или наоборот.
Пример гибридной магнит ссылки:
magnet:?xt=urn:btih:ХЕШ_v1&xt=urn:btmh:ХЕШ_V2
Ещё одним потенциальным применением на трекерах, могла бы стать кнопка «помочь раздаче». Если трекеру известны популярные файлы в раздаче, которые сидируются, то он может определять малопопулярные файлы, которым можно помочь в сидировании, также показывая здоровье раздачи в процентах. Магнит ссылка генерируется с дополнительным ключом «&so», в котором находятся пронумерированные индексы файлов, а ваш клиент обработав эту ссылку поставит галочки только к определенным файлам до скачивания, полезно для крупных раздач.
Можно также скачивать раздачи без дубликатов файлов сгенерированными таким способом.
Папка .pad
Также некоторых смущает факт существования папки .pad в гибрид раздаче, в новых торрент клиентах она не показывается и не занимает места, в старых её скачивать необязательно, это был необходимый шаг для сосуществования форматов, эта папка легко идентифицируется (в секции files она и файлы имеют ключ «attribute», который равен «p») и необходимо её скрыть.
Разрабатывается также движок торрент трекера TorrentPier (на котором основан Rutracker, NNMClub и т.п.) с нативной поддержкой BitTorrent v2.
В связи с данными проблемами тормозится вхождение и узнаваемость пользователями протокола. Некоторые релизеры не зная, что такое гибрид, и ссылаясь на проблему с Transmission и .pad папку, навсегда забивают на гибрид формат, как на костыль, так и теряется возможность скачать эту же раздачу со всеми преимуществами протокола.
Libtorrent
Libtorrent — это бесплатная программная библиотека, разработанная на C ++ на основе библиотек Boost , которая направлена на поддержку протокола BitTorrent . Он включает привязку на языке Python .
Его также называют растровой панелью libtorrent, чтобы отличить ее от ракшаса libTorrent , разработанного автором rTorrent .
Резюме
- 1 Особенности
- 2 Использование
- 2.1 Примечания и ссылки
- 2.2 Внешние ссылки
Функции
Эта библиотека, в частности, поддерживает следующие функции:
- DHT ;
- IPv6 ;
- Начальные числа HTTP ;
- Обмен однорангового BitTorrent ;
- WebTorrent в разрабатываемой версии с октября 2020 года.
использовать
Примечания и ссылки
- ↑« Релиз 2.0.3 » , 28 марта 2021 г. (по состоянию на 15 апреля 2021 г. )
- ↑ FredericMazue, « Libtorrent 2.0 доступен » , на Programz ! , 8 сентября 2020 г.
- ↑ (in) Эрнесто, « WebTorrent приносит BitTorrent в Интернет, Netflix впечатляет » на TorrentFreak , 13 декабря 2015 г.
Внешние ссылки
libtorrent — libtorrent
libtorrent — это реализация с открытым исходным кодом протокола BitTorrent. Он написан на C ++ и имеет его основной интерфейс библиотеки. Его наиболее заметными особенностями являются поддержка Mainline DHT, IPv6, начальных значений HTTP и однорангового обмена μTorrent. libtorrent использует Boost, в частности Boost.Asio, чтобы добиться независимости от платформы. Известно, что он основан на Windows и большинстве Unix-подобных операционных систем (OS X, Linux и многих BSD. ).
libtorrent постоянно обновляется с помощью расширений bittorrent, которые разработчики считают наиболее полезными, и активно оптимизируется для работы в более широком наборе сред. Многие из его функций могут быть отключены во время компиляции, чтобы не включать код, который не будет использоваться в конкретном случае использования. Он стремится быть наиболее подходящей реализацией libtorrent для встраиваемых устройств, а также настольных компьютеров и сид-серверов. Некоторые детали его реализации описаны в разделе функций.
Первоначальным автором libtorrent является Арвид Норберг. Это первый клиент, поддерживающий протокол расширения вместе с μTorrent, который теперь является основой, на которой строятся многие другие расширения.
- 1 Возможности
- 1.1 Реализованные BEPs
- 1.2 Список дополнительных функций
- 1.3 Кэширование диска
- 1.4 Сетевые буферы
- 1.5 Выбор частей
- 1.6 Торренты дерева хеширования Merkle
Функции
Реализованные BEP
BEP являются частью процесса предложения по расширению BitTorrent. BEP — это проектный документ, предоставляющий информацию сообществу BitTorrent или описывающий новую функцию для протоколов BitTorrent. BEP должен содержать краткую техническую спецификацию функции и ее обоснование. Они были предназначены для использования в качестве основных механизмов для предложения новых функций, для сбора комментариев сообщества по проблеме и для документирования проектных решений, которые были приняты в BitTorrent. Автор BEP несет ответственность за достижение консенсуса в сообществе и документирование особых мнений.
Поскольку BEP поддерживаются как текстовые файлы с измененной структурой в репозитории с контролем версий, их история изменений является исторической записью предложения функции
Существует три вида BEP:
- Дорожка стандартов BEP описывает расширение одного из протоколов BitTorrent или изменение поведения одного из участников в этих протоколах, где в настоящее время участниками являются клиенты, трекеры и веб-серверы.
- Информационный BEP описывает BitTorrent проблема дизайна, или предоставляет общие рекомендации или информацию сообществу BitTorrent, но не предлагает расширения. Информационные BEP не обязательно представляют собой консенсус или рекомендацию сообщества BitTorrent, поэтому пользователи и разработчики могут игнорировать Информационные BEP или следовать их советам.
- Process BEP описывает процесс, окружающий BitTorrent, или предлагает изменение (или событие в) процессе. BEP процесса похожи на BEP отслеживания стандартов, но применяются к областям, отличным от протоколов BitTorrent. Это больше, чем рекомендации, и пользователи, как правило, не вправе их игнорировать. Примеры включают графики выпуска, процедуры, руководства, изменения в процессе принятия решений, а также изменения в инструментах или среде, используемых при разработке BitTorrent.
Список дополнительных функций
- Интерфейс плагина для реализации пользовательских расширений BitTorrent без изменения libtorrent
- поддерживает протокол однорангового обмена μTorrent (PEX).
- поддерживает локальное обнаружение одноранговых узлов ( многоадресная рассылка для одноранговых узлов в одной локальной сети)
- очистка трекера
- поддерживает расширение lt_trackers, для обмена трекерами между одноранговыми узлами
- поддерживает расширение no_peer_id = 1, которое облегчит нагрузку трекеры.
- поддерживает параметр трекера compact = 1.
- поддерживает t для торрентов дерева хеширования Меркла. Благодаря этому размер торрент-файлов хорошо масштабируется с размером содержимого.
- использует отдельный поток ввода-вывода для диска, чтобы диск никогда не блокировался при взаимодействии с сетью или клиентом.
- поддерживает файлы размером более 2 гигабайт на системах, которые его поддерживают.
- поддержка быстрого возобновления, способ избавиться от дорогостоящей проверки фрагментов при запуске возобновляемого торрента. Сохраняет состояние хранилища, состояние piece_picker, а также все локальные одноранговые узлы в отдельном файле быстрого возобновления.
- имеет настраиваемый дисковый кеш чтения и записи для повышения пропускной способности диска.
- ставит в очередь торренты для файла check вместо того, чтобы проверять их все параллельно.
- не имеет никаких требований к порядку частей в возобновляемом торренте. Это означает, что он может возобновить торрент, загруженный любым клиентом.
- поддерживает как разреженные файлы, так и компактное размещение файлов (когда части хранятся на диске консолидированными)
- начальный режим, в котором файлы на диске считается завершенным, и хэш каждой части проверяется при первом запросе.
- регулирует длину очереди запросов в зависимости от скорости загрузки.
- обслуживает несколько торрентов на одном порту и в одном потоке
- поддерживает HTTP-прокси и базовую аутентификацию прокси.
- поддерживает gzip-ответы трекера
- может ограничивать использование полосы пропускания для загрузки и скачивания и максимальное количество непроверенных одноранговых узлов
- возможность ограничить количество соединений.
- задержки имеют сообщения, если нет другого исходящего трафика к одноранговому узлу, и не отправляют сообщения одноранговым узлам, у которых уже есть часть. Это экономит полосу пропускания.
- выборочная загрузка. Возможность выбрать, какие части торрента вы хотите загрузить.
- IP-фильтр для запрета подключения и подключения IP-адресов и диапазонов IP-адресов
- Поддержка NAT-PMP и UPnP (автоматическое сопоставление портов на маршрутизаторах, которые его поддерживают)
- может проксировать торрент-трафик через I2P анонимную сеть.
Кэширование диска
Весь дисковый ввод-вывод в libtorrent выполняется асинхронно, чтобы сетевой поток, поток io диска. Когда блок читается, поток disk io считывает все последующие блоки из этого блока в кэш чтения, предполагая, что узел, запрашивающий блок, также запросит дополнительные блоки из того же блока. Это уменьшает количество системных вызовов для чтения данных. Это также уменьшает задержку поиска.
Точно так же для запросов на запись блоки кэшируются и сбрасываются на диск после завершения одного полного фрагмента, или фрагмент является наименее недавно обновленным, когда требуется больше места в кэше. Кэш динамически распределяет пространство между кешем записи и чтения. Кэш записи имеет строгий приоритет перед кешем чтения.
Используемые блоки кэша заблокированы в физической памяти, чтобы избежать ее выгружения на диск. Разрешение выгрузки дискового кэша на диск означает, что его очистка станет крайне неэффективной, поскольку его придется считывать обратно в физическую память только для того, чтобы снова сбросить на диск.
Для экономии памяти и системных вызовов файловые операции iovec используются для очистки нескольких блоков кэша за один вызов.
В системах с низким объемом памяти кэш диска можно полностью отключить или установить меньший предел для экономии памяти.
Сетевые буферы
На процессорах с небольшим кэшем L2 копирование памяти может быть дорогостоящей операцией. Важно свести к минимуму количество копий на таких машинах. В основном это относится к встроенным системам.
Чтобы минимизировать количество копий полученных данных, буфер приема для данных полезной нагрузки принимается непосредственно в дисковый буфер, выровненный по страницам. Если соединение зашифровано, буфер расшифровывается на месте. Затем буфер перемещается в кеш диска без копирования. После того, как все блоки для части получены или необходимо очистить кеш, все блоки передаются непосредственно в writev (), чтобы сбросить их за один системный вызов. Это означает одну копию в памяти пользовательского пространства и одну копию обратно в память ядра.
При заполнении и загрузке в целом ненужное копирование предотвращается за счет кэширования блоков в выровненных буферах, которые копируются один раз в буфер отправки однорангового узла. Выравнивание буфера отправки однорангового узла не гарантируется, даже если это происходит в большинстве случаев. Затем буфер отправки шифруется с помощью специального ключа однорангового узла и связывается с iovec для отправки. Это означает, что существует одна копия пользовательского пространства, чтобы разрешить невыровненные запросы одноранговых узлов и шифрование, специфичное для одноранговых узлов.
Сборщик фрагментов
Сборщик фрагментов — центральный компонент в реализации BitTorrent. Сборщик произведений в libtorrent оптимизирован для быстрого поиска самых редких произведений. В нем хранится список всех доступных предметов, отсортированных по редкости, и перемешанные предметы той же редкости. Самый редкий первый режим — доминирующий режим сборщика предметов. Другие режимы также поддерживаются и используются одноранговыми узлами в определенных ситуациях.
Сборщик штук позволяет комбинировать наличие штуки с приоритетом. Вместе они определяют порядок сортировки списка штук. Фрагменты с приоритетом 0 никогда не будут выбраны, что используется для функции выборочной загрузки.
Чтобы иметь как можно меньше частично готовых деталей, одноранговые узлы имеют склонность выбирать блоки из тех же деталей, что и другие одноранговые узлы в той же категории скорости. Категория скорости — это грубая категоризация одноранговых узлов на основе их скорости загрузки. Это заставляет медленные одноранговые узлы выбирать блоки из одного и того же фрагмента, а быстрые узлы — из одного и того же, что снижает вероятность того, что медленные узлы блокируют завершение фрагментов.
Сборщик деталей также может быть настроен на последовательную загрузку деталей.
Торренты хеш-дерева Меркла
Это BEP30 протокола BitTorrent. Хеш-дерево Меркла торренты — это расширение, которое позволяет торрент-файлу содержать только корневой хеш хеш-дерева, образующего хэши частей. Основное преимущество этой функции заключается в том, что независимо от того, сколько частей содержится в торренте, файл.torrent всегда будет одного размера. Он будет только расти с увеличением количества файлов (так как он все еще должен содержать имена файлов).
При использовании обычных торрентов клиенты должны запрашивать несколько блоков для частей, как правило, от разных одноранговых узлов, прежде чем данные можно будет проверить по хешу части. Чем крупнее части, тем больше времени потребуется, чтобы загрузить целую часть и проверить ее. До того, как кусок будет проверен, он не может быть передан рой, что означает, что чем больше размер куска, тем медленнее будут данные оборачиваемости, когда они загружаются одноранговыми узлами. Поскольку в среднем данные должны сидеть и ждать в буферах клиентов, прежде чем они будут проверены и могут быть загружены снова.
Другая проблема с большими размерами частей заключается в том, что клиенту труднее определить злонамеренного или ошибочного партнера, когда часть выходит из строя, и потребуется больше времени, чтобы повторно загрузить ее и предпринять больше попыток, прежде чем часть будет успешной. тем больше кусочки.
Размер фрагмента в обычных торрентах — это компромисс между размером самого файла.torrent и размером фрагмента. Часто для файлов размером 4 ГБ размер фрагмента составляет 2 или 4 МБ, чтобы не сделать файл.torrent слишком большим.
Торренты Merkle решают эти проблемы, устраняя компромисс между размером.torrent и размером фрагмента. При использовании торрентов Merkle размер фрагмента может быть минимальным размером блока (16 КБ), что позволяет одноранговым узлам немедленно проверять каждый блок данных, полученных от одноранговых узлов. Это дает минимальное время обработки и полностью снимает проблему выявления злонамеренных узлов.
Приложения
Некоторые приложения, использующие libtorrent:
- Deluge, кроссплатформенный клиент BitTorrent
- Electric Sheep заставка, BitTorrent-клиент для заставки
- Free Download Manager, менеджер загрузок с открытым исходным кодом для Windows
- Koinonein BitTorrent Client, BitTorrent-клиент для Windows
- LimeWire, многоплатформенный клиент для обмена файлами
- Miro, крест -платформенное приложение интернет-телевидения
- qBittorrent, клиент C ++ / Qt BitTorrent
- Runes of Magic, MMORPG, загрузчик FOG которой использует libtorrent для обновления игрового клиента.
- World of Tanks, MMORPG, программа запуска которой использует libtorrent для обновления игрового клиента.
См. также
- Портал бесплатного программного обеспечения с открытым исходным кодом
- Сравнение библиотек BitTorrent
Ссылки
Внешние ссылки
Перевод «libtorrent» на русский
It is written in python, uses libtorrent (rasterbar) at its core and GTK for the main user interface along with web and console.
Он написан на python, использует libtorrent (rasterbar) по своему ядру и GTK для основного пользовательского интерфейса, а также веб-и консольные интерфейсы для расширенного использования клиент/ сервер.
Halite is a free BitTorrent client that is based upon the popular libtorrent library.
Halite является одним из лучших и бесплатных клиентов BitTorrent, основанных на популярной библиотеке libtorrent.
It uses libtorrent in it’s backend and features multiple user-interfaces including: GTK+, web and console.
Приложение использует libtorrent в интерфейсе и имеет несколько пользовательских интерфейсов, включая: GTK +, Интернет и консоли.
Unicode support for libtorrent on windows.
Поддержка Unicode для libtorrent в Windows.
libtorrent is a text-based torrent client like RTorrent written in C++.
Libtorrent текстовый торрент-клиент, такой как RTorrent, написанный на C ++.It uses the high-tech libtorrent (Rasterbar) library, which means greater download and upload speed as well as excellent support of the latest features of the BitTorrent protocol.
Он использует высокотехнологичную библиотеку libtorrent (Rasterbar), что означает большую скорость загрузки и выгрузки, а также отличную поддержку новейших функций протокола BitTorrent.
rTorrent is a a BitTorrent client for ncurses, using the libtorrent library.
rtorrent — это клиент BitTorrent для ncurses, использующий библиотеку libtorrent.Halite (named after the mineral) is a C++ BitTorrent client based on the excellent libtorrent library from Rasterbar Software.
Halite (названный в честь минерала) — это клиент C ++ BitTorrent, основанный на отличной библиотеке libtorrent от Rasterbar Software.
The entire project will be open source and built using existing code such as Libtorrent, Webkit, SQLite v3 and node-js.
Весь проект будет написан с открытым исходным кодом с использованием уже существующих проектов Libtorrent, Webkit, SQLite v3 и node-js.
Even less popular BitTorrent clients with smaller market shares like Transmission or LibTorrent are vulnerable, but their amplification factor is considerably lower-4 percent and 5 percent respectively-the researchers said.
Еще менее популярными клиентами BitTorrent с меньшими долями на рынке, такими как Transmission или LibTorrent, являются уязвимых, но их коэффициент усиления значительно ниже — 4% и 5% соответственно, — сказали исследователи.
Plugin authors told the publication to TorrentFreak, it Torrents-Time consists of two parts: the engine torrent client based on Libtorrent (there is support for PEX and DHT), and a video player that the team wrote on their own.
Авторы плагина рассказали изданию TorrentFreak, что Torrents-Time состоит из двух частей: движка торрент-клиента, основанного на Libtorrent (есть поддержка PEX и DHT), и видеоплеера, который команда написала самостоятельно.