Sztuka ściągania

Jeśli podejmiemy decyzję o wejściu w świat P2P, staniemy przed wyborem, którego programu używać. Przegląd takich aplikacji znajduje się w artykule $(LC117657: Nie zawsze jak przez słomkę…)$, ale nie wystarczy zdecydować się na narzędzie, które zdobyło najwięcej punktów. Musimy bowiem wiedzieć, że skuteczność i do pewnego stopnia wygoda pobierania plików zależą także od wybranej sieci P2P. Najwygodniejszą wersją Kazy nie pobierzemy tak szybko dystrybucji Linuksa jak nawet średnio wygodnym klientem eDonkeya. Z drugiej strony, choć DC++ nie ma wielu wygodnych funkcji, jest niezastąpiony w pobieraniu zbiorów z LAN-u. Mówiąc w skrócie: warto poznać, jak działają poszczególne sieci P2P, jakie są ich mocne strony oraz ograniczenia.

Na początku był Napster

Choć kilka lat w rozwoju technologii peer-to-peer to epoka, sięgnijmy do ich początków. Tak się bowiem składa, że wtedy powstały dwie architektury, które z różnymi modyfikacjami stosowane są do dziś. Jak wszyscy wiemy, pierwszy był Napster – sieć P2P składająca się z centralnego serwera oraz tysięcy czy nawet milionów klientów. Dość szybko pojawiła się też Gnutella, która prezentowała zgoła odmienne podejście do problemu wymiany plików: wszystkie komputery były równorzędne.

Patrząc z perspektywy czasu, łatwo można wymienić wady i zalety obu architektur. Nap-ster był niesamowicie skuteczny. Użytkownicy podłączali się do jednego serwera (przynajmniej w początkowym okresie rozwoju tej usługi), który miał informacje o wszystkich udostępnianych plikach. Jeśli więc tylko pozwalały mu na to zasoby sprzętowe (szybkie procesory i dyski oraz duża pamięć RAM), wyszukiwał pliki błyskawicznie. Niestety, centralne serwery Napstera stanowiły łatwy cel dla organizacji RIAA. W efekcie właściciel serwisu został pozwany do sądu, a sama usługa zamknięta.

Gnutella była odporna na próby jej zamknięcia. Powiedzmy szczerze – nie było co zamykać, bo sieć Gnutelli powstawała w chwili połączenia za pośrednictwem jej klienta co najmniej dwóch komputerów. Aby ją zlikwidować, należałoby więc usunąć wszystkie kopie tego programu. Decentralizacja w tym wypadku była remedium na działania prawników. Niestety, jednocześnie stanowiła o słabości tej sieci. Efektem równości wszystkich maszyn tworzących tę sieć było koszmarnie nieefektywne wyszukiwanie plików. Otóż: nasz komputer wysyłał pytanie o zbiór do wszystkich podłączonych maszyn, te robiły to samo, kolejne komputery przekazywały kwerendę dalej… Oczywiście proces ten się kończył – pytanie miało parametr TTL (time to live) zmniejszany za każdym przeskokiem o 1. Gdy wyniósł zero, zapytanie przestawało być przesyłane. Mimo istnienia tego mechanizmu krążące po sieci kwerendy zapychały łącza, stanowiąc około połowy ruchu tworzonego przez Gnutellę.

Po rozum do głowy

Wraz ze śmiercią Napstera umarła – choć nie definitywnie – architektura P2P z centralnym serwerem. Wydawało się, że tylko sieć zdecentralizowana miała szansę przetrwać ofensywę wytwórni płytowych. Wymagała jednak optymalizacji – pierwsze próby podjęto już w Gnutelli. Niektóre jej klienty, np. Bearshare czy LimeWire, różnicowały węzły sieci, nadając im funkcje pseudoklientów i pseudoserwerów. Mimo tego Gnutella powoli traciła użytkowników – choćby dlatego, że pojawiła się konkurencja.

Technologia P2P odżyła wraz z wprowadzeniem Kazy. Aplikacja ta wykorzystuje protokół FastTrack. W przeciwieństwie np. do Gnutelli jest on zamknięty i nie są dostępne szczegóły jego działania. Wiadomo jednak, że został oparty na… Gnutelli. Skończono jednak z równością komputerów tworzących sieć. Jeśli któraś maszyna spełnia określone warunki (m.in. dysponuje szybkim łączem, mocnym procesorem i pojemną pamięcią), zyskuje status superwęzła (supernode). Taki wyróżniony komputer zaczyna działać trochę jak serwer z Napstera. Przechowuje mianowicie listy plików znajdujących się na podłączonych do niego maszynach zwykłych użytkowników. Co za tym idzie – pośredniczy w wyszukiwaniu danych. Gdy dotrze do niego zapytanie, sprawdza, czy żądany zbiór nie jest przechowywany na którymś ze znanych mu komputerów. Superwęzeł jest także połączony z innymi wyróżnionymi maszynami i przekazuje im polecenie szukania. W ten sposób zapytania nie krążą na ślepo po sieci, a mają ściśle określoną trasę. Ważną cechą FastTracka jest jego samoorganizacja. O funkcji danego komputera nie decyduje człowiek, a program.

Bardzo podobnie funkcjonuje Gnutella2. Każdy hub (nazywany też ultrapeerem) utrzymuje połączenie z dużą liczbą (300-500) zwyczajnych komputerów (liściami) oraz z od 5 do 30 innymi serwerami. Wartości te zmieniają się w zależności od wielkości sieci, której topologia jest ustalana dynamicznie. Komputery tworzące sieć hubów gromadzą informacje o innych serwerach oraz liściach, tworząc mapę połączeń, a także wymieniając się tymi danymi. Na tej podstawie opracowywane są m.in. najkrótsze trasy do poszczególnych komputerów. Każdy hub sprawdza też własne połączenie – jeśli stanie się zbyt wolne, może zmienić swój status na liść, “przekazując” wszystkie swoje maszyny innym serwerom. Gnutella2 do optymalizacji ruchu różnicuje też wykorzystywane protokoły sieciowe. W zależności od rodzaju przesyłanych danych korzysta z pewnych, ale wolniejszych połączeń TCP/IP, lub szybszych, ale zawodnych UDP. Nad protokołem sieci Gnutella2 ciągle trwają prace, ale już teraz widać, że ma on duży potencjał.

Gdy wydawało się, że zapomniano o idei centralnego serwera, pojawiły się sieci o właśnie takiej architekturze. Nic dziwnego – stawką była wydajność. Przykładem architektury wykorzystującej serwery jest eDonkey. Co prawda jej twórcy twierdzą, że jest ona całkowicie rozproszona, ale mijają się z prawdą. Podstawą są serwery nazywane hubami. Do nich podłączają się komputery klienckie. Podobnie jak w Napsterze, wyróżniona maszyna pośredniczy w szukaniu plików. W przeciwieństwie do pierwszej sieci P2P hubów jest wiele i są prowadzone przez różne osoby i organizacje. Nie można więc zamknąć eDonkeya jednym wyrokiem sądowym. Zbliżoną budowę ma sieć DirectConnect, ale brak w niej zaawansowanych mechanizmów, o których mowa w dalszej części artykułu.

Choć hubów jest wiele, mimo wszystko likwidacja dużych serwerów mogłaby zaszkodzić sieci eDonkey. Między innymi z tego powodu od niedawna najpopularniejszy klient tej sieci – eMule – wykorzystuje nową technologię P2P. Kademlia (ostatnio przechrzczona na Kad) to sieć całkowicie rozproszona. Jej siła bierze się m.in. z ciekawego algorytmu wytyczania najkrótszych tras między komputerami. Do określania odległości wykorzystywana jest nowatorska metryka XOR (patrz: ramka

Więcej informacji

).

Porównanie popularnych sieci P2P
NazwaTypCharakterystykaWybrane klienty
eDonkey (ed2k)Wiele serwerówSieć idealna do dystrybucji dużych plików. Oferuje jednoczesne pobieranie i obsługę odsyłaczy. Poszukiwania pliku warto rozpocząć od znalezienia odnośnika oraz właściwego huba.eDonkey2000, eMule
KadRozproszonaNowa sieć. Istnieje za krótko, by mówić o jej skuteczności i zaletach.eMule
FastTrackRozproszona z wyróżnionymi komputeramiOferuje wygodne wyszukiwanie plików (po nazwie) i jednoczesne pobieranie. Umiarkowana skuteczność. Zawiera wiele fałszywek.Kazaa Media Desktop, K-Lite, Grokster, Kazaa Lite Rewolucja
Gnutella2Rozproszona z wyróżnionymi komputeramiSieć w fazie projektu. Bez porównania lepsza od swojej poprzedniczki (Gnutelli). Architektura zbliżona do budowy FastTracka.Morpheus, Trusty Files
DirectConnectWiele serwerówProsta sieć (bez obsługi odsyłaczy oraz jednoczesnego pobierania). Szybkie kopiowanie plików w sieci lokalnej.DirectConnect, DC++
BitTorrentWiele serwerówZoptymalizowana do szybkiej dystrybucji plików. Idealna dla poszukujących nowości.BitTorrent, BT++, Azareus, Bit Tornado
Więcej:bezcatnews