Jak działa protokół BitTorrent?
W mrocznych (acz niedawnych) czasach sprzed internetu szerokopasmowego, proces pobierania plików był wysoce problematyczny. Niestabilne i często rozliczane czasowo połączenia notorycznie zrywały się lub zamierały. Stworzyło to zapotrzebowanie na wiele narzędzi ułatwiających pobieranie. Cała klasa programów zwanych "akceleratorami", dziś zupełnie zapomniana, była obowiązkową pozycją na liście niezbędnego oprogramowania dla internautów. Programy te wykorzystywały zbiór trików, mających na celu przyspieszenie pobrania plików. Negocjowały transmisję kompresowaną, jeżeli serwer ją obsługiwał, wznawiały przerwane pobrania od momentu, w którym nastąpiło zerwanie połączenia, a te mądrzejsze dobierały bliższy mirror w razie pobierania z publicznych serwerów FTP (co działało bardzo rzadko).Z biegiem lat jakość łącz znacząco wzrosła, a mechanizmy wznowień i przyspieszeń pobierania zostały zintegrowane bezpośrednio w przeglądarki internetowe. Mroczne czasy pozostawiły jednak po sobie pewne osiągnięcie techniczne, które przetrwało owe przemiany. Mowa o sieciach pobierania peer-to-peer (p2p). Rozpraszały one proces pobierania między uczestników. Jeżeli jeden węzeł był niedostępny lub udostępniał plik zbyt powoli, sieć (lub centrala) przestawiała priorytet, wybierając szybszy węzeł. Dodatkową "zaletą" sieci p2p jest przerzucenie odpowiedzialności za udostępnienie treści na użytkowników. Dzięki temu wstrzymanie udostępniania danej treści i zidentyfikowanie stron za nie odpowiedzialnych jest znacząco trudniejsze. Efektem jest częste wykorzystanie sieci p2p do piractwa.
07.11.2019 | aktual.: 10.11.2019 23:37
Dziś najpopularniejszą siecią peer-to-peer jest BitTorrent. Pozostałe zniknęły. Co sprawiło, że wygrała ona z innymi, kilkanaście lat temu niepodzielnie rządzącymi w internecie? Kluczowym powodem jest brak centrali. Poprzednie sieci, jak zamknięte Napster i Kazaa, korzystały z serwerów centralnych, bez których dane były niedostępne, a połączenia między klientami – niemożliwe. BitTorrent ogranicza rolę centralnych węzłów: pozostają one jedynie trackerami, przechowującymi zmienne w czasie informacje o liście uczestników pobierających i udostępniających plik.
Protokół
W jaki sposób działa sieć BitTorrent? Zacznijmy od podstaw i niezbędnych terminów. Pierwszym krokiem jest zdefiniowanie pliku torrent, kilkukilobajtowego pliku-manifestu, zawierającego informacje o plikach do udostępnienia oraz adresy trackerów, czyli serwerów pilnujących listy osób biorących udział w torrencie. Następnie rozpoczynane jest seedowanie (sianie) pliku i informuje tracker, że jest uczestnikiem torrenta (należy do swarmu - ławicy). Klient udostępnia plik nowym połączeniom. Te z kolei biorą się od klientów, który pobrali plik .torrent i zaaplikowali w swoim menedżerze pobierania. Klienci są dzięki temu informowani, jakie są "namiary" na oryginalnego posiadacza pliku i łączą się z nim jako pijawki (leech).
Ponieważ przygotowane w ramach torrenta pliki są dzielone na logiczne segmenty, obliczanie kompletności pobrania wyraża się w segmentach, a nie kilobajtach. Ponadto, podział na segmenty pozwala natychmiast zapewnić gotowość osoby pobierającej do bycia źródłem dla kolejnych klientów. Dzięki temu im więcej uczestników, tym mniejsza zależność od pierwszego posiadacza plików. Sieć BitTorrent dba o to, by to najmniej popularny segment był najważniejszy. Dzięki temu zapewniana jest wysoka dostępność plików i unika się tworzenia "enklaw", w których część torrenta jest posiadana przez większość uczestników, ale brakujące fragmenty są osiągalne z dużym trudem i tylko czasami.
Trochę więcej niż ogólniki
I w zasadzie to tyle. Protokół oraz wymagania serwera są zdefiniowane w specyfikacji i dość detaliczne. Format pliku .torrent również się nie zmienia pozostaje taki sam już od lat. W międzyczasie uległa popularyzacji forma skrócona, w postaci torrentów zaklętych w link, czyli tzw. łącza magnetyczne. Zamiast pobierać plik, po prostu klikamy na link w przestrzeni magnet:. To ułatwienie, ale żaden przełom. Ale ciekawych kwestii związanych z BitTorrentem jest więcej. Wśród rzadziej omawianych zagadnień związanych z ową siecią p2p znajdują się między innymi:
- Czy oficjalny klient jest oprogramowaniem open source?
- W jaki sposób działa pobieranie torrentów przez sieci zaopatrzone w NAT, na przykład domowe routery?
- Czy możliwa jest pełna decentralizacja sieci i rezygnacja również z trackerów?
Spróbujmy pokrótce omówić wyżej wymienione tematy.
Klient
Protokół BitTorrent jest dokładnie udokumentowany, dzięki czemu powstało wiele oprogramowania klienckiego. W początkowych etapach rozwoju, czyli na początku XXI-go wieku, BitTorrent był oprogramowaniem open source, coraz szerzej zdobywającym popularność w środowisku linuksowym. Niektóre dystrybucje systemów opartych o Linuksa, jak Debian, udostępniały torrenty z nośnikami instalacyjnymi jako oficjalny kanał pobierania.
Kilka lat po powstaniu, twórcy BitTorrenta postanowili przestać dokładać do biznesu, jakim była największa sieć p2p na świecie i we wrześniu 2004 założyli firmę BitTorrent, mającą na celu spieniężenie programu i zapewnienie mu szans na rozwój. Rok wcześniej powstała Zatoka Piratów.
Firma BitTorrent rozwijała otwartą wersję swojego klienta przez kilka lat, aż do wersji 6.0, kiedy nastąpiła dość kuriozalna zmiana. Program µTorrent, jeden z najpopularniejszych i najbardziej rozbudowanych klientów, został uznany za oficjalną, referencyjną wersję klienta protokołu. Wiązało się to oczywiście ze zmianą licencji na zamkniętą. Decyzja ta nie wpłynęła na popularność sieci, ponieważ uTorrent był i tak najważniejszym w niej klientem, ale był to koniec pewnego rozdziału w historii rozwoju BitTorrenta. Dziś referencyjny klient pozostaje oprogramowaniem zamkniętym, zaopatrzonym w opcjonalne mechanizmy reklamowe, ale istnieje wystarczająco dużo klientów open source, by w zupełności obejść się bez niego.
NAT-y i zapory
Kwestia omijania NAT-ów i utrzymywanie stabilnej łączności mimo zapór sieciowych po drodze to znacznie ciekawsza sprawa, niż licencja referencyjnego klienta. Zwróćmy bowiem uwagę na najpopularniejsze konfiguracje "domowego internetu": większość ISP dostarcza dziś swoje dedykowane "routery WiFi", czyli zintegrowane urządzenia standardu DOCSIS, łączące w sobie modem szerokopasmowy, switch i bezprzewodowy access point WPA oraz router. Ich użycie polega na rozpięciu w domu sieci lokalnej (LAN) w adresacji IPv4 dla wszystkich urządzeń kablowych i bezprzewodowych. Dzięki translacji adresów sieciowych (NAT), wszystkie te domowe urządzenia są, z pewną dozą uproszczenia, widoczne z internetu jako jedno urządzenie.
Próba połączenia przychodzącego do np. laptopa jest z punktu widzenia adresacji IP próbą połączenia z routerem. Routery takie zazwyczaj posiadają zaporę (firewall), ale nawet bez niej nie przekażą połączenia do laptopa, bowiem "internet o nim nie wie". Aby połączyć się bezpośrednio z internetu do lokalnego komputera, konieczne jest nie tylko dodanie wyjątku na zaporze routera i komputera docelowego, ale także takie ustawienie punktu dostępowego, by przekierowywał on wszystkie połączenia na dany port do konkretnego komputera za routerem. Alternatywnie można zestawić inny routing dla konkretnych urządzeń za routerem i stworzyć np. strefę DMZ, czyli podzielić sieć na jeszcze inne segmenty.
Skoro zatem sieć BitTorrent jest siecią p2p, wymaga ona, aby użytkownik nie tylko pobierał treści od innych, ale także "wpuszczał" użytkowników z internetu, aby mogli oni pobierać segmenty obecne u niego. Konieczne jest zatem dodanie wyjątku na zaporze w systemie, odblokowanie zakresu na routerze i przekierowanie portów na konkretny komputer w sieci ...czy może jednak nie? Dołączenie do torrenta udostępniającego najnowszy pakiet LibreOffice oraz niedokonanie powyższych ustawień kończy się nieudostępnianiem pliku nikomu. Podobnie dzieje się z torrentem najnowszego Debiana. Czasem jednak jest inaczej. Jak to możliwe?
NAT traversal i negocjowalne przekierowania
Oprogramowanie klienckie sieci BitTorrent, w zależności od skali wyrafinowania, stosuje szereg sztuczek pozwalających na obustronne podróżowanie po sieciach z działającym mechanizmem NAT. Niektóre z nich są udokumentowane, ustandaryzowane i sprawdzone, jak NAT-PMP i PCP, w postaci Apple'owskiego Bonjour. Zazwyczaj jednak zabawki w stylu Bonjour i mDNSRespondera są niedostępne w sieci LAN. Wtedy klient próbuje wykorzystać protokół Universal Plug-and-Play, celem zautomatyzowanej negocjacji przypisań portów. Nieszczęsny UPnP zawiera złowrogie rozszerzenie IGD (Internet Gateway Device), umożliwiające automatyczną negocjację przekierowania portów z bramy do komputerów klienckich. Protokół UPnP uchodzi jednak za jedną wielką dziurę w zabezpieczeniach i bardzo często jest wyłączony na bramach.
Gdy mądre protokoły wyższych warstw zawodzą, należy zastosować prostsze podejście, w postaci dwukierunkowych gniazd (BSD socket). Dzięki ustanowieniu połączenia dwukierunkowego, klient pobierający segment od posiadacza fragmentu torrenta, może za pomocą tego samego gniazda udostępniać te segmenty, które akurat nie są posiadane po drugiej stronie. W ten sposób klient nieprzyjmujący połączeń przychodzących może brać udział w udostępnianiu plików.
Wreszcie, gdy nie można po dobroci, klient może sięgnąć po mechanizmy "wędrówki" po sieci NAT, za pomocą takich mechanizmów, jak STUN i holepunch ("dziurkacz"). Metoda UDP hole punch jest nawet rozszerzeniem standardu BitTorrent i wykorzystuje do swojego działania członków torrenta. A w skrócie działa ona w ten sposób: dwa komputery za dwoma NATami chcą się porozumieć. Potrzebują namiarów na siebie: muszą nawzajem znać obie pary publiczych adresów IP oraz portów, pod którymi da się z nimi połączyć. Początkowo problem wygląda na beznadziejny, bowiem nie tylko nie znają one swoich adresów nawzajem. Domyślnie nie znają nawet swoich własnych adresów publicznych! Tutaj z pomocą przychodzi serwer-mediator. Oba komputery łączą się z nim, zgłaszając wolę zestawienia połączenia.
Switching jest trudny
W ten sposób mediator zna publiczne adresy IP obu NATów oraz dwa źródłowe porty, z których komunikacja wychodzi od bramy do mediatora. Następnie mediator informuje uczestników nawzajem o ich publicznych adresach IP i portach wychodzących. Teraz oba komputery mogą próbować dotrzeć do siebie nawzajem. Prowadzi to do powstania chwilowych reguł na bramach obu NAT-ów: połączenie z pierwszego komputera do NAT-u drugiego uczy pierwszą bramę zależności komputer – zewnętrzny port wychodzący – adres drugiego NAT-u – port przychodzący drugiego NAT-u. Podobnie po drugiej stronie, powstaje reguła wiążąca drugi komputer, port połączenia wychodzącego z NAT-u, adres pierwszego NAT-u i port pierwszego NAT-u. Dwustronność połączenia sprawia, że dwie owe reguły ulegają złączeniu: brama zacznie dbać o to, żeby połączenie skierowane od konkretnego nadawcy szło na odpowiedni port odbiorcy.
Ma to szereg wymagań wstępnych: jawnie inicjalizowane połączenia ze strony obu klientów (a nie tylko słuchająca usługa), obecność mediatora oraz wyrozumiały firewall. Nie zawsze stosowanie "dziurkacza" NAT jest możliwe, ale istnieją scenariusze, w których się sprawdza. Protokół TCP/IP jest doprawdy przerażający i takie wynalazki, jak UDP hole punching pokazują skalę trudności zadania, jakim jest poprawne zabezpieczenie sieci.
Trackerless
Ostatnim tematem godnym poruszenia jest sieć całkowicie zdecentralizowana, czyli pozbawiona dedykowanych trackerów. BitTorrent obsługuje taką topologię i rolę trackerów pełnią w niej po prostu wszyscy uczestnicy. Tablica wiążąca pobierających z posiadanymi segmentami jest w posiadaniu każdej ze stron biorących udział w torrencie i jest rozproszona. Taki tryb działania, oparty na rozproszonej tablicy asocjacyjnej, nazywa się DHT, co dosłownie oznacza "distributed hash table". Taki torrent (lub jego łącze magnetyczne) wciąż jednak musi zostać gdzieś ogłoszony, aby ktokolwiek do niego dołączył.
To nie wszystko...
Kwestie legalności udostępnianych treści, "współudziału" przy udostępnianiu oraz niekończącej się walki o prawa autorskie zasługują na oddzielną historię. O niej już wkrótce. BitTorrent jest bowiem często wykorzystywany do zupełnie uczciwych celów. Swego czasu robił to nawet brytyjski urząd skarbowy.