BitTorrent (протокол)

Файловете се прехвърлят на части, всеки торент клиент, получавайки (изтегляйки) тези части, в същото време ги дава (изтегля) на други клиенти, което намалява натоварването и зависимостта от всеки клиент източник и осигурява излишък на данни.

Има много други клиентски програми за обмен на файлове чрез протокола BitTorrent.

Съдържание

Файлът с метаданни е речник във формат bencode с разширение .torrent - съдържа информация за разпространението (файлове, тракери и др.)

Клиентите се свързват помежду си и обменят файлови сегменти без прякото участие на тракера, който съхранява само информация, получена от клиенти, свързани към обмена, списък на самите клиенти и друга статистическа информация. За да работи BitTorrent мрежата ефективно, е необходимо възможно най-много клиенти да могат да приемат входящи връзки. Неправилните настройки на NAT или защитната стена могат да предотвратят това.

При свързване клиентите веднага обменят информация за сегментите, които имат. Клиент, желаещ да изтегли сегмент (лийчър), изпраща заявка и, ако вторият клиент е готов да даде, получава този сегмент. След това клиентът проверява контролната сума на сегмента. Ако съвпада със записаното в торент файла, тогава сегментът се счита за успешно изтеглен и клиентът уведомява всички свързани партньори, че има този сегмент. Ако контролните суми се различават, тогава сегментът започва да се изтегля отново. Някои клиенти забраняват тези партньори, които дават неправилни сегменти твърде често.

По този начин количеството сервизна информация (размерът на торент файла и размерът на съобщенията със списък от сегменти) директно зависи от броя, а оттам и от размера на сегментите. Следователно, когато избирате сегмент, е необходимо да поддържате баланс: от една страна, сАко размерът на сегмента е голям, количеството оперативна информация ще бъде по-малко, но в случай на грешка при проверка на контролна сума, повече информация ще трябва да бъде изтеглена отново. От друга страна, при малък размер грешките не са толкова критични, тъй като по-малък обем трябва да бъде изтеглен повторно, но размерът на торент файла и съобщенията за съществуващи сегменти стават по-големи.

Алгоритъм за обмен на данни

Всеки клиент има възможност временно да блокира връщането към друг клиент (англ. choke). Това се прави за по-ефективно използване на връщащия канал. Освен това, когато избирате кого да деблокирате, се дава предимство на партньори, които сами са прехвърлили много сегменти към този клиент. По този начин празниците с добра възвръщаемост се насърчават взаимно според принципа "ти - на мен, аз - на теб".

Размяната на сегменти се извършва на принципа "ти - на мен, аз - на теб" симетрично в две посоки. Клиентите си казват един на друг какви фрагменти имат, когато се свържат и след това, когато бъдат получени нови сегменти, така че всеки клиент може да съхранява информация за това кои фрагменти имат други свързани партньори. Редът за обмен е избран по такъв начин, че клиентите първо да обменят най-редките сегменти: това увеличава наличността на файлове в разпространението. В същото време изборът на сегмент сред най-редките е случаен и следователно е възможно да се избегне ситуацията, когато всички клиенти започнат да изтеглят един и същ рядък сегмент, което би имало отрицателно въздействие върху производителността.

Обменът на данни започва, когато и двете страни са заинтересовани от него, тоест всяка от страните има сегменти, които другата няма. Броят на предадените сегменти се преброява и ако една от страните установи, че предава средно повече, отколкото получава, тя блокира (англ. choke) за известно време връщанетодруга страна. По този начин протоколът включва защита срещу пиявици.

Сегментите са разделени на блокове от 16-4096 килобайта [източникът не е посочен 547 дни] и всеки клиент изисква точно тези блокове. Блокове от различни сегменти могат да бъдат заявени едновременно. Освен това някои клиенти поддържат изтегляне на блокове от един и същи сегмент от различни партньори. В този случай описаните по-горе алгоритми и обменни механизми са приложими и на ниво блок.

Край на режима на игра

Когато изтеглянето е почти завършено, клиентът влиза в специален режим, наречен крайна игра. В този режим той изисква всички останали сегменти от всички свързани партньори, което избягва забавяне или пълно „замразяване“ на почти завършено изтегляне поради няколко бавни клиента.

Спецификацията на протокола не определя точно кога клиентът трябва да влезе в крайната игра, но има набор от общоприети практики. Някои клиенти влизат в този режим, когато не останат непоискани блокове, други докато броят на оставащите блокове стане по-малък от броя на предадените блокове и не повече от 20. Съществува негласно мнение, че е по-добре броят на очакваните блокове да се поддържа нисък (1 или 2), за да се минимизира излишъкът и че има по-малък шанс за получаване на дубликати на същия блок с произволна заявка [1] [2] .

Засяване

Общи характеристики

  • Няма опашки за изтегляне.
  • Файловете се качват на малки фрагменти; колкото по-малко достъпен е фрагментът, толкова по-често ще се предава. По този начин не е необходимо присъствието в мрежата на "seeder" с пълен файл за изтегляне - системата разпределя сегменти между "peers", така че те впоследствие да обменят липсващите сегменти.
  • Клиентите (peers) обменят сегменти директно помежду си, чрезпринцип "ти - на мен, аз - на теб".
  • Изтеглените фрагменти са незабавно достъпни за други клиенти.
  • Контролира се целостта на всеки фрагмент.
  • Не отделните файлове се разбиват на фрагменти, а цялата дистрибуция, следователно, лийчър, който иска да изтегли само някои файлове от дистрибуцията, често също ще съхранява малко количество излишна (за него) информация, за да поддържа целостта на фрагментите.
  • Няколко файла (например съдържанието на директория) могат да действат като обект за разпространение.

Клиентите се свързват с тракера чрез TCP протокол. Най-често използван входящ порт за проследяване: 6969. Най-често използван обхват на входящ порт на клиент: 6881-6889.

Номерата на портовете не са фиксирани в спецификацията на протокола и могат да се променят при необходимост. В момента повечето тракери използват нормалния HTTP порт 80 и се препоръчва на клиентите да изберат произволен входящ порт. Освен това някои тракери не позволяват използването на клиентски портове от стандартния диапазон 6881-6889, тъй като някои доставчици забраняват използването на този диапазон на портове.

DHT мрежата в клиентите на BitTorrent използва UDP протокола.

Освен това UDP протоколът се използва от UDP тракери [en] (не се поддържа от всички клиенти и не е официална част от протокола) и за свързване на клиенти помежду си чрез UDP NAT Traversal (използва се само в клиента BitComet и не е официална част от протокола).

Работете без тракер

В нови версии на протокола са разработени системи без проследяване, които решават някои от предишните проблеми. Отказът на тракер в такива системи не води автоматично до отказ на цялата мрежа.

Започвайки от версия 4.2.0 на официалнатаклиент, пуснат в края на 2015 г., внедри функция без тракер, базирана на DHT Kademlia. В тази реализация инструментът за проследяване е достъпен децентрализирано на клиентите под формата на разпределена хеш таблица.

В момента не всички клиенти използват протокол, който е съвместим един с друг. BitComet, µTorrent, Deluge, KTorrent, Transmission, qBittorrent и официалният BitTorrent клиент са съвместими един с друг. Vuze (Azureus) също има режим без тракери, но внедряването му се различава от официалното, в резултат на което не може да работи през DHT с горните клиенти [3] . Въпреки това има поддръжка за стандартен DHT за Vuze чрез приставката Mainline DHT.

За да вземете и разпространявате файлове в торент мрежи, не е необходимо да използвате специални програми. Има няколко услуги, които ви позволяват да изтегляте файлове само с помощта на браузър [4] .

Наличието на допълнителна информация във файловете с метаданни, като допълнителни източници и незадължителни хешове, позволява .torrent файлът с метаданни да се използва по начин, подобен на форматите Metalink, MAGMA, File List (Direct Connect). Клиентът на Shareaza използва незадължителни хешове, за да търси алтернативни източници в други мрежи.

Един от случаите на използване е така нареченото уеб зареждане. Понякога по различни причини не може да се стартира пълноценен торент клиент на сървъра. В този случай сървър, работещ по HTTP протокола, действа като източник на разпространение. По правило клиентите предпочитат други клиенти на BitTorrent и имат достъп до уеб семената само когато е необходимо. Имайте предвид, че този случай на използване се прилага по най-малко три начина: BEP0017 уебсийдване в стил BitTornado, уебсийдване в стил BEP0019 GetRight и външен източник, всеки от коитосе различава в детайлите на изпълнението.

Определено като:

Връзка от този вид се отнася до разпространението и неговия източник. Поддържа се в Shareaza.

Липса на разпространение

Ако дистрибуцията е непопулярна, тогава може да възникне ситуация, когато няма нито едно семе, а присъстващите партньори нямат достатъчно данни, за да завършат изтеглянето. В този случай е необходимо да се изчака появата на семе или партньор, който има сегменти, които липсват на останалите. Можете също да използвате копия на файлове, получени по друг начин. Ръка, която няма семе за дълго време, се нарича "мъртва".

Липса на анонимност и персонализация

Проблемът с анонимността може да бъде решен с помощта на Tor [7] . Клиентът Vuze BitTorrent има вградена софтуерна поддръжка за тази анонимна мрежа. Но този метод не е 100% ефективен [8] .

Проблемът с пиявицата

Някои потребители, особено на тракери, които не изискват регистрация, не поддържат разпространение след завършване на изтеглянето, което води до намаляване на цялостната производителност, така че някои торент тракери също вземат предвид количеството изтеглено / раздадено и дават разрешение за изтегляне в зависимост от размера на данните, дадени от клиента.

Липса на точно отчитане на трафика