libtorrent - libtorrent

редактировать
libtorrent
Libtorrent-rasterbar-logo.png
Разработчик (и) Арвид Норберг
Первый выпусксентябрь 2005 г.; 15 лет назад (2005-09)
Стабильный выпуск 2.0 (6 сентября 2020 г.; 50 дней назад (2020-09-06))
Репозиторий github.com / arvidn / libtorrent /
Написано наC ++
Доступно наанглийском языке
Тип BitTorrent библиотека
Лицензия Лицензия BSD
Веб-сайтlibtorrent.org

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
  • 2 Приложения
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Функции

Реализованные BEP

BEP являются частью процесса предложения по расширению BitTorrent. BEP - это проектный документ, предоставляющий информацию сообществу BitTorrent или описывающий новую функцию для протоколов BitTorrent. BEP должен содержать краткую техническую спецификацию функции и ее обоснование. Они были предназначены для использования в качестве основных механизмов для предложения новых функций, для сбора комментариев сообщества по проблеме и для документирования проектных решений, которые были приняты в BitTorrent. Автор BEP несет ответственность за достижение консенсуса в сообществе и документирование особых мнений.

Поскольку BEP поддерживаются как текстовые файлы с измененной структурой в репозитории с контролем версий, их история изменений является исторической записью предложения функции

Существует три вида BEP:

  1. Дорожка стандартов BEP описывает расширение одного из протоколов BitTorrent или изменение поведения одного из участников в этих протоколах, где в настоящее время участниками являются клиенты, трекеры и веб-серверы.
  2. Информационный BEP описывает BitTorrent проблема дизайна, или предоставляет общие рекомендации или информацию сообществу BitTorrent, но не предлагает расширения. Информационные BEP не обязательно представляют собой консенсус или рекомендацию сообщества BitTorrent, поэтому пользователи и разработчики могут игнорировать Информационные BEP или следовать их советам.
  3. Process BEP описывает процесс, окружающий BitTorrent, или предлагает изменение (или событие в) процессе. BEP процесса похожи на BEP отслеживания стандартов, но применяются к областям, отличным от протоколов BitTorrent. Это больше, чем рекомендации, и пользователи, как правило, не вправе их игнорировать. Примеры включают графики выпуска, процедуры, руководства, изменения в процессе принятия решений, а также изменения в инструментах или среде, используемых при разработке BitTorrent.
BEP №ЗаголовокПримечание
3 BitTorrent протокол
5 DHT протоколбез трекера торренты, Mainline Kademlia протокол DHT
7 IPv6 Tracker Extension
9 Extension for Peers to Send Files Metadata Filesпротокол передачи метаданных, включает магнитные ссылки
10 Extension Protocol
11 Peer exchange uTorrent PEX
12 Multitracker Metadata Расширениетакже поддерживает μTorrent интерпретацию
14 Local Peer Discovery
15 UDP Tracker Протокол для BitTorrent
16 Super-seeding
17 HTTP-заполнениеHoffman-style
19 WebSeed - HTTP / FTP-заполнение (стиль GetRight)
21 Частичная загрузка исходных данных
24 Tracker Возвращает внешний IP-адрес
27 Private Торренты
29 Транспортный протокол uTorrent начиная с версии 0.16.0
30 хэш Меркла начиная с версии 0.15
32 BitTorren t DHT Extensions для IPv6начиная с 1.2
33 DHT очищаетс 0.16
38 изменяемые торрентыс 1.1
40 канонический приоритет однорангового узлас 1.0
43 узлы DHT только для чтенияс 1.0.3
44 DHT помещает / получаетс 1.0
47 файлы заполнения и атрибуты файловс 0.15
51 DHT infohash indexingс 1.2
52 Спецификация протокола BitTorrent v2с 2.0
53 Выбор файла магнитной ссылкис 1.2
55 Расширение Holepunch

Список дополнительных функций

  • Интерфейс плагина для реализации пользовательских расширений 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 для обновления игрового клиента.
См. также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-27 08:28:53
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте