Proč
Distribuce velkých souborů přináší několik problémů:
1) Soubor se downloaduje delší dobu a tím pádem je během stahování k serveru současně připojeno více uživatelů.
2) Zdroje serveru je nutné rozdělovat mezi více uživatelů – každý dostane menší díl CPU, paměti a přenosového pásma.
3) Pokud se celý soubor nevejde to cache serveru, je nutné provádět mnoho diskových seek operací – v nejhorším případě jeden seek na každý odeslaný blok, což dále snižuje výkon. Proto jsou zatížené fileservery vybaveny velkým množstvím paměti (obvykle 4 GB a více).
4) Velké soubory spotřebovávají zdroje ostatním službám na serveru.
5) Největším problémem je potřeba velkého přenosového pásma. Nemilé je to zvláště v případě, pokud platíme za přenesené bajty.
BitTorrent se snaží tyto problémy řešit. Je založen na jednoduché myšlence: Uživatelé, kteří si stahují velký soubor, si mohou mezi sebou kopírovat to, co si již stáhli.
BitTorrent pracuje ve třech fázích
Fáze 1: Získání metadat
Metadata jsou uložena v souboru s koncovkou .torrent (application/x-bittorent). Tato metadata najdete na webové stránce spolu s upozorněním na možnost stažení souboru pomocí BT. Je vhodné mít webbrowser nakonfigurován tak, aby podle koncovky nebo MIME typu automaticky spustil BT klienta. Metadata lze získat i jinou cestou (FTP, IRC, Email, …) a pak na ně spustit BT klienta ručně.
Metadata jsou malý binární soubor obsahující údaje o stahovaném souboru: jméno, velikost, datum vytvoření, URL trackeru, velikost bloku, případný komentář a binárně uložené SHA1 checksumy jednotlivých bloků. Soubor metadat pro 690MB CD-ROM image je veliký zhruba 50 kB. Metadata jsou kodována pomocí tzv. bencoding (např. řetězec je uložen jako velikost:řetězec, integer jako ičísloe).
Příklad úvodní textové části .torrent souboru:
d8: announce30: http://localhost:6969/announce7: comment30: NetBSD
1.6.2 for I386 - Disc 213: creation datei1078940925e4: infod6:
lengthi690257920e4: name21: NetBSD-i386-1.6.2.ISO12: piece lengthi262144e6:
pieces52680:
(pozn. ed.: všechny mezery za dvojtečkami dodány násilím kvůli sazbě –Johanka)
Fáze 2: Hledání ostatních stahujících
Po získání a zpracování metadat začne BT klient hledat ostatní počítače stahující tentýž soubor. K jejich vyhledání slouží služba Tracker. URL této služby je uvedeno v položce announce v .torrent souboru. Existuje neoficiální rozšíření syntaxe ‚announce-list‘, které umožňuje zadat seznam více Trackerů. Pokud je tracker nedostupný, nelze totiž soubor stáhnout.
Tracker je služba používající architekturu klient-server. Tracker komunikuje HTTP protokolem a obvykle běží na portu 6969. Úkolem služby Tracker je udržovat aktualizovaný seznam počítačů stahujících příslušný soubor. Tracker kromě toho shromažduje statistické informace o klientech (počet přenesených dat) a počítá downloady. Jeden Tracker může obsluhovat více .torrent souborů současně. Odhaduje se, že jeden Tracker zvládne okolo 10 000 klientů současně. Většina trackerů poskytuje po připojení web browserem různé doplňkové služby (statistika, chat, možnost hledání a stáhnutí .torrent souborů).
Klienti pravidelně ohlašují Trackeru svůj stav (started, stopped, completed), celkový počet přenesených bajtů (uploaded, downloaded), počet zbývajících bajtů (left). Nejdůležitějšími informacemi předávanými Trackeru jsou 20bajtové peer_id, IP adresa a číslo portu, na které jsou pro ostatní klienty k zastižení. Od Trackeru obdrží BT klient seznam několika ostatních a začne s nimi přímo komunikovat.
Fáze 3: Peer to peer
V peer to peer síti Bit Torrent existují dva typy uzlů: peer a seed. Rozdíl mezi těmito uzly není technický, ale spíše politický. Po technické stránce jsou oba dva naprosto shodné: používají stejný protokol a stejně se Trackeru ohlašují. Jediný rozdíl je ten, že seed vlastní kompletní kopii souboru, zatímco peer nikoliv. Seedem se stává peer uzel automaticky v době, kdy má k dispozici kompletní stahovaný soubor. Pokud je spuštěn BT klient na již downloadovaný soubor, stane se seedem.
Myšlenka peer to peer sítě je založena na vzájemné spolupráci. Peer uzly se navzájem spojují a vyměňují si mezi sebou jednotlivé části souboru, a to nejlépe v poměru 1:1. Ty mně dáš jeden blok, co ještě nemám, a já ti za to dám jeden blok, co ty nemáš. Každý soubor je totiž předem rozdělen na bloky (obvykle 256K), jejichž SHA1 checksumy jsou známé z .torrent souboru.
Každý peer uzel se snaží připojit k rozumné míře (zhruba 10) ostatních uzlů. Po připojení si uzly navzájem vymění seznamy svých bloků. Uzel si tak může vybrat, o který blok požádá. V současné době se používají dvě strategie: náhodný výběr {random} a nejméně se vyskytující (rarest first) blok. Protože peer uzel nechce poskytovat své bloky zadarmo, začne nejprve vyměňovat své bloky za nějaké, které ještě nemá. Teprve potom, co nemá již nic na výměnu, dává semtam nějaké bločky ostatním zdarma, protože doufá, že od nich také něco dostane. Dávání bloků zdarma je nezbytné pro správnou funkci sítě – odstranění dead-lock stavu. Uzel čas od času doluje z Trackeru seznam dalších uzlů.
Peer uzly si také mohou vymýšlet. Aby zvýšily svou šanci na získání bloků, mohou předstírat, že mají více bloků na výměnu než ve skutečnosti. V současné době se používají dvě metody podfuků: buďto se peer uzel na žádost o blok neobtěžuje nic poslat, nebo pošle náhodná data. Většina klientů tyto podfukáře rychle pozná a přestane dále komunikovat. V současné době neexistuje metoda, jak tyto uzly bonznout Trackeru. Při stahování delších souborů (ISO Image) se podvody nevyplácejí, při stahování MP3 to většinou projde, protože než to ostatní zjistí, máte již staženo.
Uzel typu seed je narozdíl od uzlu typu peer velice štědrý. Protože má všechno a nic nepotřebuje, dává zadarmo bločky komukoliv, kdo o ně požádá. Uzel typu seed se s výjimkou Trackeru nikam nespojuje, pouze čeká na příchozí spojení. Aby se zabránilo jejich přetížení, jsou seed uzly omezovány, a to jak počtem připojených peer uzlů, tak objemem přenesených dat za sekundu.
Pro zajištění úspěšného downloadu je žádoucí, aby byl vždy připojen alespoň jeden uzel typu seed. BT technologie umožňuje download i v případě tzv. distribuované kopie – klienti mají rozdílnou sadu bloků, která po složení dá celý soubor.
Seznam doporučovaných URL
wiki.theory.org/index.php/BitTorrentSpecification
www.bitconjurer.org/BitTorrent/protocol.html