BitTórrent (rozsvícená angličtina) Bitstream je síťový protokol peer-to- peer (P2P) pro kooperativní sdílení souborů přes internet .
Soubory jsou přenášeny po částech, každý torrent klient , který tyto části přijímá (stahuje), zároveň je dává (stahuje) dalším klientům, což snižuje zátěž a závislost na každém zdrojovém klientovi a zajišťuje redundanci dat .
Protokol vytvořil Bram Cohen , který napsal prvního torrentového klienta BitTorrent v Pythonu 4. dubna 2001 . Uvedení první verze proběhlo 2. července 2001 .
Existuje mnoho klientských programů pro výměnu souborů pomocí protokolu BitTorrent.
Soubor metadat je slovník ve formátu bencode s příponou .torrent - obsahuje informace o distribuci (soubory, trackery atd.)
Před stažením se klient připojí k trackeru na adrese uvedené v torrent souboru, sdělí mu svou adresu a hash součet torrent souboru, na který klient obdrží jako odpověď adresy ostatních klientů stahujících nebo distribuujících stejný soubor. Dále klient pravidelně informuje tracker o průběhu procesu a dostává aktualizovaný seznam adres. Tento proces se nazývá oznámení .
Klienti se vzájemně propojují a vyměňují si segmenty souborů bez přímé účasti trackeru, který uchovává pouze informace přijaté od klientů připojených k burze, seznam samotných klientů a další statistické informace. Pro efektivní fungování sítě BitTorrent je nutné, aby co nejvíce klientů bylo schopno přijímat příchozí připojení. Tomu může zabránit nesprávné nastavení NAT nebo firewallu .
Klienti si při připojení okamžitě vyměňují informace o segmentech, které mají. Klient, který si přeje stáhnout segment ( leecher ), odešle požadavek, a pokud je druhý klient připraven dát, tento segment přijme. Klient poté ověří kontrolní součet segmentu. Pokud se shoduje se segmentem zaznamenaným v souboru torrentu, je segment považován za úspěšně stažený a klient oznámí všem připojeným kolegům, že tento segment má. Pokud se kontrolní součty liší, segment se začne znovu stahovat. Někteří klienti zakazují ty vrstevníky, kteří příliš často dávají nesprávné segmenty.
Množství servisních informací (velikost souboru torrentu a velikost zpráv se seznamem segmentů) tedy přímo závisí na počtu, a tedy na velikosti segmentů. Proto je při výběru segmentu nutné zachovat rovnováhu: na jedné straně s velkou velikostí segmentu bude množství servisních informací menší, ale v případě chyby ověření kontrolního součtu bude muset být více informací stáhnout znovu. Na druhou stranu při malé velikosti nejsou chyby tak kritické, protože je třeba znovu stáhnout menší objem, ale zvětší se velikost souboru torrentu a zpráv o existujících segmentech.
Každý klient má možnost dočasně zablokovat návrat k jinému klientovi ( angl. choke ). To se provádí pro efektivnější využití zpětného kanálu. Při výběru toho, koho odblokovat, jsou navíc upřednostňováni kolegové, kteří sami převedli mnoho segmentů na tohoto klienta. Hody s dobrou návratností se tedy vzájemně povzbuzují podle zásady „ty – mně, já – tobě“.
Výměna segmentů probíhá podle principu "ty - mně, já - tobě" symetricky ve dvou směrech. Klienti si navzájem sdělí, jaké fragmenty mají, když se připojují, a poté, když obdrží nové fragmenty, takže každý klient může ukládat informace o tom, jaké fragmenty mají ostatní připojení kolegové. Pořadí výměny je zvoleno tak, že klienti si nejdříve vymění nejvzácnější segmenty: tím se zvyšuje dostupnost souborů v distribuci. Výběr segmentu mezi nejvzácnějšími je přitom náhodný, a proto je možné předejít situaci, kdy všichni klienti začnou stahovat stejný vzácný segment, což by mělo negativní dopad na výkon.
Výměna dat začíná, když o to mají zájem obě strany, to znamená, že každá ze stran má segmenty, které ta druhá nemá. Počítá se počet odvysílaných segmentů, a pokud jedna ze stran zjistí, že vysílá v průměru více, než přijímá, na chvíli zablokuje ( eng. choke ) návrat na druhou stranu. Proto je do protokolu začleněna ochrana proti leechers .
Segmenty jsou rozděleny do bloků o velikosti 16-4096 kB a každý klient požaduje přesně tyto bloky. Bloky z různých segmentů lze požadovat současně. Někteří klienti navíc podporují stahování bloků stejného segmentu od různých vrstevníků. V tomto případě jsou výše popsané algoritmy a výměnné mechanismy použitelné také na úrovni bloku.
Když je stahování téměř dokončeno, klient vstoupí do speciálního režimu zvaného end game. V tomto režimu požaduje všechny zbývající segmenty od všech připojených peerů, což zabraňuje zpomalení nebo úplnému „zamrznutí“ téměř dokončeného stahování kvůli několika pomalým klientům.
Specifikace protokolu přesně nedefinuje, kdy má klient vstoupit do koncové hry, ale existuje soubor obecně uznávaných postupů. Někteří klienti vstoupí do tohoto režimu, když nezbývají žádné nevyžádané bloky, jiní, dokud počet zbývajících bloků není menší než počet přenesených a ne více než 20. Není vysloven názor, že je lepší ponechat počet čekajících bloků nízká (1 nebo 2), aby se minimalizovala redundance, a to při náhodném požadavku menší šance na získání duplikátů stejného bloku [1] [2] .
Po přijetí úplného souboru se klient přepne do speciálního režimu provozu, ve kterém pouze odesílá data (stává se seedem). Seed dále pravidelně informuje tracker o změnách stavu torrentů (stahování) a aktualizuje seznamy IP adres.
Klienti se k trackeru připojují pomocí protokolu TCP . Nejčastěji používaný příchozí port sledovače : 6969. Nejběžněji používaný rozsah příchozích portů klienta: 6881-6889.
Čísla portů nejsou pevně stanovena ve specifikaci protokolu a lze je podle potřeby změnit. V současnosti většina sledovačů používá HTTP port 80 a klientům se doporučuje zvolit náhodný příchozí port. Některé sledovače navíc neumožňují použití klientských portů ze standardního rozsahu 6881-6889, protože někteří poskytovatelé použití tohoto rozsahu portů zakazují.
Síť DHT v klientech BitTorrent používá protokol UDP .
Kromě toho protokol UDP používají sledovače UDP (nepodporují ho všichni klienti a není oficiální součástí protokolu) a ke vzájemnému propojení klientů pomocí UDP NAT Traversal (používá se pouze v klientovi BitComet a je není oficiální součástí protokolu).
Tracker ( anglicky tracker ; /ˈtɹækə(ɹ)/ ) je specializovaný server běžící přes protokol HTTP . Sledovač je potřebný k tomu, aby se zákazníci mohli navzájem najít. Ve skutečnosti sledovač ukládá IP adresy , příchozí klientské porty a hash součty , které jednoznačně identifikují objekty zapojené do stahování. Podle standardu se názvy souborů na trackeru neukládají a není možné je rozpoznat podle hash součtů. V praxi však tracker často kromě své hlavní funkce plní i funkci malého webového serveru . Takový server ukládá soubory metadat a popisy distribuovaných souborů, poskytuje statistiky stahování pro různé soubory, zobrazuje aktuální počet připojených peerů atd.
Nové verze protokolu vyvinuly systémy bez sledování , které řeší některé z předchozích problémů. Selhání trackeru v takových systémech nevede automaticky k selhání celé sítě.
Počínaje verzí 4.2.0 oficiálního klienta, vydaného na konci roku 2015, byla implementována funkce práce bez sledování založená na DHT Kademlia . V takové implementaci je tracker dostupný decentralizovaně na klientech ve formě distribuované hashovací tabulky .
V současné době ne všichni klienti používají protokol, který je vzájemně kompatibilní. BitComet , µTorrent , Deluge , KTorrent , Transmission , qBittorrent a oficiální BitTorrent klient jsou vzájemně kompatibilní . Vuze (Azureus) má také režim trackerless, ale jeho implementace se liší od oficiální, v důsledku čehož nemůže fungovat přes DHT s výše uvedenými klienty [3] . Existuje však podpora standardního DHT pro Vuze prostřednictvím pluginu Mainline DHT.
Práce bez trackeru je také možná při použití multiprotokolových klientů, kteří podporují BitTorrent. Shareaza si vyměňuje hashe a peer adresy jiných podporovaných sítí, včetně BitTorrentu, prostřednictvím sítě Gnutella2 . Podpora BitTorrentu je plánována v GreyLink 6.0, přičemž síť Direct Connect lze použít nejen k převodu na TTH , ale také k vyhledání vrstevníků.
Aby bylo možné přijímat a distribuovat soubory v torrentových sítích, není nutné používat speciální programy. Existuje několik služeb, které umožňují stahovat soubory pouze pomocí prohlížeče [4] .
Přítomnost dalších informací v souborech metadat, jako jsou další zdroje a volitelné hashe, umožňuje použití souboru metadat .torrent podobným způsobem jako u formátů Metalink , MAGMA , File List (Direct Connect) . Klient Shareaza používá volitelné hodnoty hash k vyhledání alternativních zdrojů v jiných sítích.
Jedním z případů použití je tzv. web seeding. Někdy z různých důvodů nelze na serveru spustit plnohodnotného torrentového klienta. V tomto případě funguje jako distribuční zdroj server pracující přes protokol HTTP. Klienti zpravidla preferují jiné klienty BitTorrent a přistupují k webovému seedu pouze v případě potřeby. Uvědomte si, že tento případ použití je implementován alespoň třemi způsoby: BEP0017 Webseed ve stylu BitTornado , Webseed ve stylu BEP0019 GetRight a External Sourcing , z nichž každý se liší v detailech implementace.
Jako první jej vytvořil John „TheSHAD0W“ Hoffman, který vytvořil BitTornado [5] . Protože verze 5.0 klienta BitTorrent podporuje webová semena a stahování z webových stránek, byl vytvořen jednoduchý nástroj, který vytváří torrentové webové seedové publikace. μTorrent přidal podporu pro získávání webových semen ve verzi 1.7. BitComet přidal podporu pro získávání webových semen ve verzi 1.14.
Toto je hash SHA-1 pole Informace ze souboru metadat . Tento hash se používá v magnetických odkazech a také k identifikaci na trackeru a mezi klienty. Při nahrávání souboru metadat do sledovače se může změnit jeho informační hash, protože sledovač může změnit informační pole nastavením příznaku soukromé distribuce nebo změnou/přidáním polí uvnitř informací. Proto je potřeba znovu stáhnout soubor metadat (soubor .torrent) z trackeru a přidat jej do klienta [6] .
Určeno jako:
btc://[Адрес]: [Порт]/[Peer ID]/[ BTIH ]
Odkaz tohoto druhu odkazuje na distribuci a její zdroj. Podporováno v Shareaza .
Pokud je distribuce nepopulární, pak může nastat situace, kdy neexistuje ani jeden seed a přítomní peeři nemají dostatek dat k dokončení stahování. V tomto případě je nutné počkat, až se objeví seed nebo peer, který má segmenty, které u ostatních chybí. Můžete také použít kopie souborů získané jiným způsobem. Ruka, která po dlouhou dobu nemá žádné semeno, se nazývá „mrtvá“.
Pro podporu dárků byl dokonce vytvořen token BitTorrent [7] .
Princip protokolu BitTorrent znamená, že každý klient zná IP adresy alespoň ostatních klientů přijatých ze serveru. Použití různých rozšíření protokolu v některých případech umožňuje také zjistit adresy ostatních peerů z roje. Proto:
Problém s anonymitou lze vyřešit pomocí Tor [8] . Klient Vuze BitTorrent má vestavěnou softwarovou podporu pro tuto anonymní síť . Tato metoda ale není 100% účinná [9] .
Na druhou stranu protokol nezahrnuje používání přezdívek. Žádný chat mezi vrstevníky. Nelze vypsat rovnocenné soubory (hledají se další soubory, které by mohly být zajímavé). Většina těchto funkcí je implementována v jiných protokolech (například Direct Connect ).
Někteří uživatelé, zejména na sledovačích, které nevyžadují registraci, po dokončení stahování nepodporují distribuci, což vede ke snížení celkového výkonu, takže některé sledovače torrentů také berou v úvahu množství stažených / rozdaných a udělují povolení stáhnout v závislosti na velikosti dat zadaných klientem.
Na rozdíl od mnoha komerčních protokolů distribuce obsahu médií neposkytuje architektura protokolu přesný mechanismus pro účtování a řízení provozu mezi body sítě. Jediné, co tam je, jsou stažená a nahraná pole, ve kterých klienti předávají počet bajtů zohledněný při stahování / nahrávání dat od předchozího oznámení při oznámení trackeru. Nejsou však řízeni nikým jiným než klientem, lze je snadno podvrhnout. K tomu uživatelé staticky přiřazují hodnoty těchto polí k URI trackeru , používají záplaty pro klienty nebo samostatné programy (RatioMaster, GiveMeTorrent, GreedyTorrent atd.), nebo jednoduše vymažou záznam trackeru z klienta ihned po obdržení seznam bodů sítě z trackeru. To vše umožňuje obejít umělá omezení vytvořená správou mnoha soukromých i veřejných trackerů.
Od roku 2008 probíhají práce na protokolu BitTorrent druhé verze. Protokol ustoupil od používání algoritmu SHA-1, který má problémy s výběrem kolizí, ve prospěch SHA2-256. SHA2-256 se používá jak pro řízení integrity datových bloků, tak pro záznamy v indexech (info-slovník), což narušuje kompatibilitu s DHT a trackery. Pro magnetické odkazy na torrenty s hash SHA2-256 byla navržena nová předpona "urn:btmh:" (pro SHA-1 a hybridní torrenty se používá "urn:btih:").
Protože změna hashovací funkce narušuje kompatibilitu protokolu (pole hash 32 bajtů místo 20 bajtů), vývoj specifikace BitTorrent v2 nebyl původně zpětně kompatibilní a byly provedeny další významné změny, jako je použití Merkle hash strom v indexech pro snížení velikosti torrentových souborů a kontrolu stažených dat na úrovni bloku.
Další přednosti změn v BitTorrentu v2 se přesouvají k přiřazování samostatných hashových stromů pro každý soubor a aplikaci zarovnání souborů po částech (bez přidávání dalšího odsazení za každý soubor), což eliminuje duplikaci dat, když existují identické soubory, a usnadňuje identifikaci. různé zdroje souborů. Vylepšená efektivita kódování adresářové struktury torrentu a přidané optimalizace pro zpracování velkého množství malých souborů.
Pro usnadnění koexistence BitTorrentu v1 a BitTorrentu v2 je implementována možnost vytvářet hybridní torrentové soubory, které kromě struktur s SHA-1 hash obsahují i indexy s SHA2-256. Tyto hybridní torrenty lze používat s klienty, kteří podporují pouze protokol BitTorrent v1. Probíhá také vývoj pro podporu protokolu WebTorrent [10] . Samotný přechod z SHA-1 vytváří nekompatibilitu v DHT sítích, trackerech (které mají pevnou délku info-hash 20 znaků). Aby nedošlo ke ztrátě kompatibility, můžete nejprve zkontrolovat SHA-1 i SHA-256, čímž se sníží 32 znaků, nekompatibilní se starým protokolem BitTorrent v1, SHA-256 na 20 znaků [11] .
BitTorrent ( klientské programy ) | Protokol výměny souborů|
---|---|
Autoři | Osoby Eric Clinker Bram Cohen Navin Společnosti BitTorrent Inc. Vuse, Inc. |
Technika |
|
Sledovači | |
Motory |
|
Související články |
protokoly TCP /IP podle vrstev modelu OSI | Základní|
---|---|
Fyzický | |
odvedeny | |
síť | |
Doprava | |
zasedání | |
Zastoupení | |
Aplikovaný | |
Uplatněno jiné | |
Seznam portů TCP a UDP |