libtorrent
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2008 г. ) |
![]() | |
Разработчик(и) | Арвид Норберг |
---|---|
Первоначальный выпуск | сентябрь 2005 г |
Стабильная версия | 2.0.10 [1] ![]() |
Репозиторий | github |
Написано в | С++ |
Доступно в | Английский |
Тип | BitTorrent- библиотека |
Лицензия | Пункт BSD-3 |
Веб-сайт | libtorrent |
libtorrent — это с открытым исходным кодом реализация протокола BitTorrent . Он написан и имеет основной библиотечный интерфейс на C++ . Его наиболее примечательными особенностями являются поддержка Mainline DHT , IPv6 , HTTP-сидов и μTorrent однорангового обмена . libtorrent использует Boost , в частности Boost.Asio , чтобы добиться независимости от платформы. Известно, что он построен на базе Windows и большинства Unix-подобных операционных систем ( OS X , Linux и многих BSD ).
В libtorrent постоянно обновляются расширения BitTorrent, которые разработчики считают наиболее полезными, и активно оптимизируют для работы в более широком наборе сред. Многие из его функций можно отключить во время компиляции, чтобы не включать код, который не будет использоваться в конкретном случае. Он призван стать наиболее подходящей реализацией libtorrent для встраиваемых устройств, а также настольных компьютеров и исходных серверов. Некоторые детали его реализации описаны в разделе «Функции».
Первоначальный автор libtorrent — Арвид Норберг. Это первый клиент, поддерживающий протокол расширения вместе с μTorrent , который теперь является основой, на которой строятся многие другие расширения.
Функции
[ редактировать ]Реализованные BEP
[ редактировать ]![]() | Этот раздел может сбивать с толку или быть неясным для читателей . ( Март 2018 г. ) |
BEP являются частью процесса предложений по улучшению BitTorrent. BEP — это проектный документ, предоставляющий информацию сообществу BitTorrent или описывающий новую функцию протоколов BitTorrent. BEP должен содержать краткую техническую спецификацию функции и ее обоснование. Они были задуманы как основные механизмы для предложения новых функций, сбора мнений сообщества по проблеме и документирования проектных решений, вошедших в BitTorrent. Автор BEP отвечает за достижение консенсуса внутри сообщества и документирование несогласных мнений.
Поскольку BEP хранятся в виде реструктурированных текстовых файлов в репозитории с поддержкой версий, их история изменений представляет собой историческую запись предложения функции. [2]
Существует три вида БЭП:
- BEP стандартизации описывает расширение одного из протоколов BitTorrent или изменение поведения одного из участников этих протоколов, где в настоящее время участниками являются клиенты, средства отслеживания и веб-серверы.
- Информационный BEP описывает проблему дизайна BitTorrent или предоставляет общие рекомендации или информацию для сообщества BitTorrent, но не предлагает расширения. Информационные BEP не обязательно представляют собой консенсус или рекомендации сообщества BitTorrent, поэтому пользователи и разработчики могут игнорировать информационные BEP или следовать их советам.
- BEP процесса описывает процесс, связанный с BitTorrent, или предлагает изменение процесса (или событие в нем). BEP процессов аналогичны BEP отслеживания стандартов, но применяются к областям, отличным от протоколов BitTorrent. Это больше, чем просто рекомендации, и пользователи обычно не имеют права их игнорировать. Примеры включают графики выпуска, процедуры, рекомендации, изменения в процессе принятия решений, а также изменения в инструментах или среде, используемых при разработке BitTorrent.
BEP № | Заголовок | Примечание |
---|---|---|
3 | BitTorrent- протокол | |
5 | DHT Протокол | торренты без трекера , Mainline Kademlia протокол DHT |
7 | IPv6- трекера Расширение | |
9 | Расширение для одноранговых узлов для отправки файлов метаданных | протокол передачи метаданных, включает магнитные ссылки |
10 | Протокол расширения | |
11 | Обмен коллегами | uTorrent PEX |
12 | Расширение метаданных мультитрекера | также поддерживает μTorrent интерпретацию |
14 | Обнаружение локальных узлов | |
15 | Протокол UDP- трекера для BitTorrent | |
16 | Суперпосев | |
17 | HTTP-раздача | в стиле Хоффмана |
19 | WebSeed — раздача HTTP/FTP (стиль GetRight) | |
21 | Только частичная загрузка исходных данных | |
24 | Трекер возвращает внешний IP | |
27 | Частные торренты | |
29 | Транспортный протокол uTorrent | с версии 0.16.0 [3] |
30 | Хэш Меркла | с 0,15 [4] |
32 | Расширения BitTorrent DHT для IPv6 | с версии 1.2 |
33 | ДГТ царапина | с 0,16 [4] |
38 | изменяемые торренты | с версии 1.1 [4] |
40 | канонический приоритет однорангового узла | с версии 1.0 [4] |
43 | узлы DHT только для чтения | с версии 1.0.3 [4] |
44 | DHT положить/получить | с версии 1.0 [4] |
47 | файлы площадки и атрибуты файлов | с 0,15 [4] |
51 | Индексирование информационного хэша DHT | с версии 1.2 |
52 | Спецификация протокола BitTorrent v2 | с версии 2.0 |
53 | Выбор файла магнитной ссылки | с версии 1.2 |
55 | Расширение дырокола |
Список различных функций
[ редактировать ]- интерфейс плагина для реализации пользовательских расширений BitTorrent без необходимости изменения libtorrent
- поддерживает протокол обмена одноранговыми узлами μTorrent (PEX).
- поддерживает обнаружение локальных узлов (многоадресная рассылка для узлов в одной локальной сети)
- трекер царапин
- поддерживает расширение lt_trackers для обмена трекерами между узлами
- поддерживает расширение no_peer_id=1, которое облегчит разгрузку трекеров.
- поддерживает параметр трекера Compact=1.
- поддержка торрентов хеш-дерева Меркла. Благодаря этому размер торрент-файлов хорошо масштабируется в зависимости от размера контента.
- использует отдельный поток дискового ввода-вывода, чтобы диск никогда не блокировался при взаимодействии с сетью или клиентом.
- поддерживает файлы размером более 2 гигабайт в системах, которые его поддерживают.
- поддержка быстрого возобновления, способ избавиться от дорогостоящей проверки фрагментов при запуске возобновленного торрента. Сохраняет состояние хранилища, состояние Piece_picker, а также все локальные узлы в отдельном файле быстрого возобновления.
- имеет регулируемый дисковый кэш чтения и записи для повышения пропускной способности диска.
- ставит торренты в очередь для проверки файлов вместо того, чтобы проверять их все параллельно.
- не имеет никаких требований к порядку штук в торренте, который он возобновляет. Это означает, что он может возобновить торрент, загруженный любым клиентом.
- поддерживает как разреженные файлы, так и компактное размещение файлов (когда части хранятся консолидировано на диске)
- режим начального заполнения, в котором файлы на диске считаются полными, а хеш каждой части проверяется при первом запросе.
- регулирует длину очереди запросов в зависимости от скорости загрузки.
- обслуживает несколько торрентов на одном порту и в одном потоке
- поддерживает http-прокси и базовую аутентификацию прокси-сервера
- поддерживает gzip-ответы трекера
- может ограничить использование полосы пропускания для загрузки и выгрузки, а также максимальное количество незаблокированных узлов.
- возможность ограничения количества подключений.
- задерживает сообщения, если к узлу нет другого исходящего трафика, и не отправляет сообщения узлам, у которых уже есть этот фрагмент. Это экономит полосу пропускания.
- выборочная загрузка. Возможность выбрать, какие части торрента вы хотите скачать.
- IP-фильтр, запрещающий IP-адресам и диапазонам IP-адресов подключаться и подключаться
- Поддержка NAT-PMP и UPnP (автоматическое сопоставление портов на маршрутизаторах, которые его поддерживают)
- может проксировать торрент-трафик через анонимную сеть I2P .
Кэширование диска
[ редактировать ]Весь дисковый ввод-вывод в libtorrent выполняется асинхронно с сетевым потоком потоком disk io. Когда блок считывается, поток дискового ввода-вывода считывает все последующие блоки из этого фрагмента в кэш чтения, предполагая, что одноранговый узел, запрашивающий блок, также запросит дополнительные блоки из того же фрагмента. Это уменьшает количество системных вызовов для чтения данных. Это также уменьшает задержку от поиска.
Аналогичным образом, для запросов на запись блоки кэшируются и сбрасываются на диск, как только один полный фрагмент завершен или этот фрагмент обновляется последним, когда требуется больше места в кэше. Кэш динамически распределяет пространство между кэшем записи и чтения. Кэш записи имеет строгий приоритет над кешем чтения.
Используемые блоки кэша фиксируются в физической памяти, чтобы избежать их выгрузки на диск. Разрешить выгрузку дискового кэша на диск означает, что его очистка станет крайне неэффективной, поскольку его придется считывать обратно в физическую память только для того, чтобы снова выгрузить обратно на диск.
В целях экономии памяти и системных вызовов файловые операции iovec используются для очистки нескольких блоков кэша за один вызов.
В системах с малым объемом памяти дисковый кэш можно вообще отключить или установить меньший предел для экономии памяти.
Сетевые буферы
[ редактировать ]На процессорах с небольшими кэшами L2 копирование памяти может оказаться дорогостоящей операцией. На таких машинах важно свести копирование к минимуму. В основном это касается встраиваемых систем.
Чтобы свести к минимуму количество копий полученных данных, буфер приема для полезных данных принимается непосредственно в дисковый буфер с выравниванием по страницам. Если соединение зашифровано, буфер расшифровывается на месте. Затем буфер перемещается в дисковый кэш без копирования. Как только все блоки для фрагмента получены или необходимо очистить кэш, все блоки передаются непосредственно в writev(), чтобы очистить их в одном системном вызове. Это означает одну копию в памяти пользовательского пространства и одну копию обратно в память ядра.
При заполнении и загрузке в целом можно избежать ненужного копирования за счет кэширования блоков в выровненных буферах, которые один раз копируются в буфер отправки однорангового узла. Буфер отправки однорангового узла не гарантированно будет выровнен, хотя в большинстве случаев это так. Буфер отправки затем шифруется с помощью ключа, специфичного для узла, и привязывается к iovec для отправки.Это означает, что существует одна копия пользовательского пространства, чтобы разрешить несогласованные одноранговые запросы и специфичное для однорангового узла шифрование.
Сборщик частей
[ редактировать ]Средство выбора частей является центральным компонентом реализации BitTorrent. Средство выбора предметов в libtorrent оптимизировано для быстрого поиска самых редких предметов. Он хранит список всех доступных предметов, отсортированных по редкости, а предметы одинаковой редкости перетасовываются. Самый редкий первый режим — это режим доминирующего выбора фигур. Другие режимы также поддерживаются и используются узлами в определенных ситуациях.
Средство выбора частей позволяет сочетать доступность части с приоритетом. Вместе они определяют порядок сортировки списка частей. Части с приоритетом 0 никогда не будут выбраны, что используется для функции выборочной загрузки.
Чтобы иметь как можно меньше частично законченных частей, одноранговые узлы склонны выбирать блоки из тех же частей, что и другие одноранговые узлы в той же категории скорости.Категория скорости — это грубая классификация одноранговых узлов на основе их скорости загрузки. Это заставляет медленных одноранговых узлов выбирать блоки из одного и того же фрагмента, а быстрые одноранговые узлы выбирают из одного и того же фрагмента, и, следовательно, снижает вероятность того, что медленные одноранговые узлы будут блокировать завершение фрагментов.
Сборщик частей также можно настроить на загрузку частей в последовательном порядке.
Торренты хэш-дерева Меркла
[ редактировать ]Это BEP30 протокола BitTorrent. Торренты хэш-дерева Merkle — это расширение, которое позволяет торрент-файлу содержать только корневой хэш дерева хэшей, образующего хэши частей. [5] Основное преимущество этой функции заключается в том, что независимо от того, сколько фрагментов содержится в торренте, файл .torrent всегда будет одного и того же размера. Он будет расти только с увеличением количества файлов (поскольку он все равно должен содержать имена файлов).
При использовании обычных торрентов клиентам приходится запрашивать несколько блоков фрагментов, обычно от разных пиров, прежде чем данные можно будет проверить по хэшу фрагмента. Чем больше фрагменты, тем больше времени потребуется, чтобы загрузить их целиком и проверить. До того, как часть будет проверена, она не может быть передана группе, а это означает, что чем больше размер части, тем медленнее обрабатываются данные при их загрузке узлами.Поскольку в среднем данные должны лежать в клиентских буферах в ожидании, прежде чем они будут проверены и могут быть загружены снова.
Другая проблема с большими размерами фрагментов заключается в том, что клиенту труднее определить вредоносный или ошибочный узел в случае сбоя фрагмента, и чем больше фрагменты, тем больше времени потребуется на его повторную загрузку и большее количество попыток, прежде чем фрагмент увенчается успехом.
Размер фрагмента в обычных торрентах — это компромисс между размером самого .torrent-файла и размером фрагмента. Часто для файлов размером 4 ГБ размер фрагмента составляет 2 или 4 МБ, просто чтобы файл .torrent не был слишком большим.
Merkle Torrents решает эти проблемы, устраняя компромисс между размером .torrent и размером фрагмента. В торрентах Merkle размер фрагмента может быть минимальным размером блока (16 КБ), что позволяет узлам немедленно проверять каждый блок данных, полученных от узлов. Это обеспечивает минимальное время обработки и полностью устраняет проблему выявления вредоносных узлов.
Приложения
[ редактировать ]Некоторые известные приложения, использующие libtorrent:
- Deluge , кроссплатформенный BitTorrent- клиент
- Electric Sheep Заставка , BitTorrent- клиент для заставки
- Бесплатный менеджер загрузок , Windows с открытым исходным кодом менеджер загрузок
- LimeWire — многоплатформенный клиент для обмена файлами
- Miro — кроссплатформенное приложение для интернет-телевидения.
- qBittorrent , C++/Qt BitTorrent- клиент
- Tribler , децентрализованный анонимный одноранговый BitTorrent клиент
- Runes of Magic , MMORPG, загрузчик FOG которой использует libtorrent для обновления игрового клиента. [ нужна ссылка ]
- World of Tanks — MMORPG, программа запуска которой использует libtorrent для обновления игрового клиента. [ нужна ссылка ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Выпуск 2.0.10» . 19 февраля 2024 г. Проверено 20 февраля 2024 г.
- ^ "bep_0001.rst_post" . www.bittorrent.org . Архивировано из оригинала 12 февраля 2020 г. Проверено 19 февраля 2020 г.
- ^ «Архив кода Google — долгосрочное хранилище для хостинга проектов Google Code» . code.google.com . Архивировано из оригинала 18 апреля 2021 г. Проверено 5 февраля 2022 г.
- ^ Jump up to: а б с д и ж г "арвидн/libtorrent" . 4 февраля 2022 года. Архивировано из оригинала 5 февраля 2022 года . Получено 5 февраля 2022 г. - через GitHub.
- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 18 декабря 2014 г. Проверено 6 декабря 2010 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка )