Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

libtorrent - это реализация протокола BitTorrent с открытым исходным кодом . Он написан и имеет интерфейс основной библиотеки на C ++ . Его наиболее примечательными особенностями являются поддержка Mainline DHT , IPv6 , начальных значений HTTP и однорангового обмена μTorrent . libtorrent использует Boost , в частности Boost.Asio, чтобы добиться независимости от платформы. Известно , что он основан на Windows и большинстве Unix-подобных операционных систем ( OS X , Linux и многих BSD ).

libtorrent постоянно обновляется с помощью расширений bittorrent, которые разработчики считают наиболее полезными, и активно оптимизируется для работы в более широком наборе сред. Многие из его функций могут быть отключены во время компиляции, чтобы не включать код, который не будет использоваться в конкретном случае использования. Он стремится быть наиболее подходящей реализацией libtorrent для встраиваемых устройств, а также настольных компьютеров и сид-серверов. Некоторые детали его реализации описаны в разделе функций.

Первоначальный автор libtorrent - Арвид Норберг. Это первый клиент, поддерживающий протокол расширения вместе с μTorrent , который теперь является основой, на которой строятся многие другие расширения.

Особенности [ править ]

Реализованные BEPs [ править ]

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

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

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

  1. Standards Track BEP описывает расширение одного из протоколов BitTorrent или изменение поведения одного из участников в этих протоколах, где в настоящее время участниками являются клиенты, трекеры и веб-серверы.
  2. Информационный BEP описывает проблему дизайна BitTorrent или предоставляет общие рекомендации или информацию сообществу BitTorrent, но не предлагает расширения. Информационные BEP не обязательно представляют собой консенсус или рекомендацию сообщества BitTorrent, поэтому пользователи и разработчики могут игнорировать Информационные BEP или следовать их советам.
  3. BEP процесса описывает процесс, окружающий BitTorrent, или предлагает изменение (или событие) в процессе. Процессы BEP похожи на BEP с отслеживанием стандартов, но применяются к областям, отличным от протоколов BitTorrent. Это больше, чем рекомендации, и пользователи, как правило, не вправе их игнорировать. Примеры включают графики выпуска, процедуры, руководящие принципы, изменения в процессе принятия решений и изменения инструментов или среды, используемых при разработке BitTorrent.

Список различных функций [ править ]

  • интерфейс плагина для реализации пользовательских расширений 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. Когда блок читается, поток disk io считывает все последующие блоки из этой части в кэш чтения, предполагая, что одноранговый узел, запрашивающий блок, также запросит дополнительные блоки из той же части. Это уменьшает количество системных вызовов для чтения данных. Это также уменьшает задержку поиска.

Точно так же для запросов на запись блоки кэшируются и сбрасываются на диск после того, как один полный фрагмент завершен, или фрагмент является наименее недавно обновленным, когда требуется больше места в кэше. Кэш динамически распределяет пространство между кешем записи и чтения. Кэш записи имеет строгий приоритет над кешем чтения.

Используемые блоки кэша заблокированы в физической памяти, чтобы избежать ее выгружения на диск. Разрешение выгрузки дискового кэша на диск означает, что его очистка станет крайне неэффективной, поскольку его придется считывать обратно в физическую память только для того, чтобы снова сбросить на диск.

Чтобы сохранить память и системные вызовы, файловые операции iovec используются для очистки нескольких блоков кэша за один вызов.

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

Сетевые буферы [ править ]

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

Чтобы свести к минимуму количество копий полученных данных, буфер приема для данных полезной нагрузки принимается непосредственно в дисковый буфер, выровненный по страницам. Если соединение зашифровано, буфер расшифровывается на месте. Затем буфер перемещается в кеш диска без копирования. После того, как все блоки для части получены или необходимо очистить кеш, все блоки передаются непосредственно в writev (), чтобы очистить их за один системный вызов. Это означает одну копию в памяти пользовательского пространства и одну копию обратно в память ядра.

При заполнении и выгрузке в целом ненужного копирования можно избежать за счет кэширования блоков в выровненных буферах, которые копируются один раз в буфер отправки однорангового узла. Выравнивание буфера отправки однорангового узла не гарантируется, даже если это происходит в большинстве случаев. Затем буфер отправки шифруется с помощью специального ключа однорангового узла и прикрепляется к iovec для отправки. Это означает, что существует одна копия пользовательского пространства, чтобы разрешить невыровненные запросы одноранговых узлов и шифрование, специфичное для одноранговых узлов.

Сборщик предметов [ править ]

Сборщик фрагментов - центральный компонент в реализации BitTorrent. Сборщик произведений в libtorrent оптимизирован для быстрого поиска самых редких произведений. В нем хранится список всех доступных предметов, отсортированных по редкости, и перемешанные предметы той же редкости. Самый редкий первый режим - доминирующий режим сборщика предметов. Другие режимы также поддерживаются и используются одноранговыми узлами в определенных ситуациях.

Сборщик штук позволяет сочетать наличие штуки с приоритетом. Вместе они определяют порядок сортировки списка штук. Фрагменты с приоритетом 0 никогда не будут выбраны, что используется для функции выборочной загрузки.

Чтобы иметь как можно меньше частично законченных частей, одноранговые узлы склонны выбирать блоки из тех же деталей, что и другие одноранговые узлы в той же категории скорости. Категория скорости - это грубая категоризация одноранговых узлов на основе их скорости загрузки. Это заставляет медленные одноранговые узлы выбирать блоки из одного и того же фрагмента, а быстрые узлы - из одного и того же, что снижает вероятность того, что медленные узлы блокируют завершение фрагментов.

Сборщик деталей также может быть настроен на последовательную загрузку деталей.

Торренты дерева хеширования Merkle [ править ]

Это BEP30 протокола BitTorrent. Торренты Merkle hash tree - это расширение, которое позволяет торрент-файлу содержать только корневой хеш хеш-дерева, образующего хэши частей. [12] Основным преимуществом этой функции является то, что независимо от того, сколько частей содержится в торренте, файл .torrent всегда будет одного размера. Он будет только расти с увеличением количества файлов (поскольку он все еще должен содержать имена файлов).

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

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

Размер фрагмента в обычных торрентах - это компромисс между размером самого файла .torrent и размером фрагмента. Часто для файлов размером 4 ГБ размер фрагмента составляет 2 или 4 МБ, чтобы не сделать файл .torrent слишком большим.

Торренты Merkle решают эти проблемы, устраняя компромисс между размером .torrent и размером куска. При использовании торрентов Merkle размер фрагмента может быть минимальным размером блока (16 КБ), что позволяет одноранговым узлам немедленно проверять каждый блок данных, полученных от одноранговых узлов. Это дает минимальное время обработки и полностью снимает проблему выявления злонамеренных пиров.

Приложения [ править ]

Некоторые приложения, использующие libtorrent:

  • Межплатформенный BitTorrent-клиент Deluge
  • Заставка Electric Sheep , клиент BitTorrent для заставки
  • Free Download Manager , менеджер загрузок с открытым исходным кодом для Windows
  • Koinonein BitTorrent Client, BitTorrent клиент для Windows
  • LimeWire , многоплатформенный клиент для обмена файлами
  • Miro , кроссплатформенное приложение для интернет-телевидения
  • qBittorrent , клиент C ++ / Qt BitTorrent
  • Tribler , децентрализованный анонимный одноранговый клиент BitTorrent
  • Runes of Magic, MMORPG, загрузчик FOG которой использует libtorrent для обновления игрового клиента.
  • World of Tanks , MMORPG, программа запуска которой использует libtorrent для обновления игрового клиента.

См. Также [ править ]

  • Сравнение библиотек BitTorrent

Ссылки [ править ]

  1. ^ "Релизы · arvidn / libtorrent" . GitHub . Дата обращения 23 марта 2021 .
  2. ^ "bep_0001.rst_post" . www.bittorrent.org . Проверено 19 февраля 2020 .
  3. ^ Журнал изменений libtorrent 0.16.0
  4. ^ Журнал изменений libtorrent
  5. ^ Журнал изменений libtorrent
  6. ^ Журнал изменений libtorrent
  7. ^ Журнал изменений libtorrent
  8. ^ Журнал изменений libtorrent
  9. ^ Журнал изменений libtorrent
  10. ^ Журнал изменений libtorrent
  11. ^ Журнал изменений libtorrent
  12. ^ «Архивная копия» (PDF) . Архивировано из оригинального (PDF) 18 декабря 2014 года . Проверено 6 декабря 2010 . CS1 maint: заархивированная копия как заголовок ( ссылка )

Внешние ссылки [ править ]

  • Официальный веб-сайт