Gnutella

Pomoc:Ponadczasowość
Ten artykuł wymaga modyfikacji na podstawie najświeższych informacji.
Niektóre treści są na pewno lub najprawdopodobniej nieaktualne. Artykuł należy zweryfikować, wskazując w przypisach źródła informacji.
Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się w dyskusji tego artykułu.
Po wyeliminowaniu niedoskonałości należy usunąć szablon {{Dopracować}} z tego artykułu.

Gnutella (w wymowie g jest nieme) – sieć wymiany plików komputerowych przez internet, wykorzystywana głównie do wymiany plików muzycznych, filmów i oprogramowania. Stanowi ona tzw. właściwą sieć peer-to-peer, ponieważ działa bez centralnego serwera. Pliki są wymieniane bezpośrednio między jej użytkownikami.

Pierwszy program kliencki został napisany przez Justina Frankla i Toma Peppera z firmy Nullsoft na początku roku 2000, niedługo po zakupie tej firmy przez AOL. 14 marca tego roku program ten udostępniono do pobierania z serwera firmy Nullsoft. Po przedwczesnym ogłoszeniu tego faktu w Slashdot użytkownicy już pierwszego dnia zablokowali serwery próbując pobrać tysiące kopii niedopracowego jeszcze programu. W tym czasie kod źródłowy programu nie został jeszcze opublikowany i nie wiadomo było na jakiej licencji program jest rozprowadzany.

Następnego dnia AOL zablokował ściąganie programu ze względu na obawy o prawne konsekwencje dla tego koncernu, a także zakazał Nullsoftowi kontynuowania dalszych prac nad tym programem i skonfiskował jego kod źródłowy. Mimo to projekt Gnutelli nie upadł. Po kilku dniach, protokół został odtworzony, jego kod źródłowy został ostatecznie opublikowany na licencji GNU General Public License (GPL), co otworzyło drogę do powstania programów otwartego oprogramowania, realizujących ten protokół. Otwartość projektu i możliwość pisania i wyboru różnych programów klienckich stało się jedną z sił napędowych rozwoju tej sieci.

Sieć Gnutella jest alternatywnym w pełni rozproszonym rozwiązaniem, w odróżnieniu od w części scentralizowanych modeli sieci peer-to-peer, takich jak FastTrack (KaZaA), czy w pełni scentralizowanych takich jak Napster. Popularność sieci Gnutella znacznie wzrosła po zagrożeniu sądowym zamknięciem serwera Napster na początku 2001 roku. Ten gwałtowny wzrost popularności ujawnił ograniczenia skalowalności pierwotnej wersji protokołu. Na początku 2001, odmiany protokołu (początkowo zaimplementowane w programach klienckich closed source) pozwoliły do pewnego stopnia poprawić skalowalność. Zamiast traktować każdego z użytkowników jako klienta i serwer, niektórym z nich został przydzielony status „ultrapeer” i one udzielają odpowiedzi na zapytania i wyszukiwanie dla użytkowników przyłączonych do nich. To pozwoliło na dalszy wzrost popularności tej sieci. Pod koniec 2001 roku kliencki program Gnutelli LimeWire, który umożliwił w znacznym stopniu techniczne doskonalenie tej sieci, uzyskał status otwartego oprogramowania. W lutym 2002 Morpheus, komercyjny program wymiany plików, został przestawiony z sieci P2P FastTrack na Gnutellę, a jego zrąb został oparty na otwartym programie Gnucleus.

Słowo „Gnutella” nie odnosi się do żadnego konkretnego projektu czy oprogramowania, ale otwartego protokołu używanego przez różne programy klienckie. Ponieważ powstają wciąż nowe klienty, a protokół zapewne będzie się dalej rozwijał, trudno powiedzieć czym 'Gnutella' będzie w przyszłości.

Nazwa Gnutella jest złożeniem słów GNU i Nutella. Gnutella pomimo nazwy, nie należy do projektów GNU. Jej odpowiednikiem rozwijanym przez GNU jest GNUnet.

Zasada działania

Aby przedstawić działanie Gnutelli musimy sobie wyobrazić duży krąg użytkowników (nazywanych węzłami), którzy zainstalowali programy-klientów Gnutelli. Programy-klienty przy pierwszym uruchomieniu muszą włączyć się do sieci i znaleźć przynajmniej jeden z tych węzłów. Używa się do tego rozmaitych metod, między innymi uprzednio przygotowaną listę prawdopodobnie działających węzłów dołącza się do wersji instalacyjnej programu, używa się serwerów Gwebcache w Internecie lub wykorzystuje IRC. Jest prawdopodobne, że przynajmniej jeden węzeł (nazwijmy go B) będzie działał. Kiedy się z nim połączymy, węzeł B prześle węzłowi A własną listę działających węzłów. Węzeł A będzie próbował się połączyć z węzłami, których listę dostał, a także z węzłami, których adresy otrzymał z dalszych węzłów, aż osiągnie pewną pulę węzłów, która może być ustawione przez użytkownika. Klient będzie utrzymywał połączenie z tą liczbą hostów, ale utrzymuje także listę węzłów, których jeszcze nie sprawdził. (Odrzuca z listy węzły, z którymi próbował się bezskutecznie połączyć).

Gdy użytkownik A chce coś wyszukać, wysyła zapytanie do każdego z węzłów, z którymi jest obecnie aktywnie połączony. Może się okazać, że niektóre z nich już się rozłączyły z siecią, w takim przypadku użytkownik A próbuje się połączyć z węzłami, które zapisał jako awaryjne. Liczba węzłów, z którymi jest połączony dany użytkownik A jest zwykle całkiem niewielka (ok. 5), więc każdy z tych węzłów przekazuje dalej to zapytanie do tych następnych węzłów, z którymi jest połączony i tak dalej. W teorii, zapytanie w końcu dotrze do każdego z użytkowników podłączonych do sieci Gnutella.

Jeżeli zapytanie da jakieś rezultaty, węzeł, który ma dany plik kontaktuje się bezpośrednio z użytkownikiem który wydał to zapytanie (którego adres IP został zawarty w zapytaniu). Negocjują transfer plików i transfer się rozpoczyna. Jeśli więcej niż jedna kopia tego samego pliku zostaje znaleziona, wyszukujący może wykonać tzw. swarm download - ściągnięcie kawałków pliku z różnych komputerów. Powoduje to zwiększenie szybkości pobierania plików.

Gdy użytkownik A rozłącza się, program-klient zapisuje listę węzłów z którą był aktywnie połączony i listę węzłów zapasowych. Jest ona wykorzystywana przy następnym łączeniu.

W praktyce wyszukiwanie w sieci Gnutella często daje niepełne wyniki. Każdy z węzłów sieci jest zwykłym użytkownikiem Internetu, który w krótkim okresie jest online lub offline i z tego względu sieć nigdy nie jest w pełni stabilna. Przepustowość wielu użytkowników jest w znacznym stopniu ograniczona, więc niektóre z żądań wyszukiwania zostają przerwane zanim osiągną przeszukanie całej sieci. W wyniku tego zapytania nigdy nie osiągną więcej niż 50% węzłów (których jest średnio ok. 1 mln).

Prawdziwą zaletą Gnutelli jest jej decentralizacja co powoduje, że tak problematyczne staje się jej wyłączenie. W odróżnieniu od Napstera, gdzie cała sieć zależała od centralnego serwera, Gnutelli nie da się wyłączyć poprzez wyłączenie któregoś z pojedynczych węzłów. Dopóki będzie przynajmniej 2 użytkowników, Gnutella będzie istnieć.

Cechy protokołu i jego rozszerzenia

Gnutella działa w oparciu o protokół query flooding. Przestarzała wersja 0.4 protokołu sieciowego Gnutelli wykorzystuje 5 różnych typów pakietów:

  • ping: wyszukiwanie hostów w sieci
  • pong: odpowiedź ping
  • query: wyszukiwanie plików
  • query hit: odpowiedź na zapytanie
  • push: żądanie pobrania pliku (dla użytkowników za firewallem)

Te pakiety dotyczą głównie wyszukiwania w sieci Gnutella. Przesyłanie plików odbywa się przy użyciu protokołu HTTP.

Obecnie prace nad protokołem Gnutelli prowadzi GDF (Gnutella Developer Forum). Wiele rozszerzeń protokołu zostało i nadal jest tworzonych przez producentów oprogramowania i niezależnych programistów Gnutelli z GDF. Do tych rozszerzeń należą dynamiczne przekierowywanie zapytań, sumy kontrolne SHA-1, przekazywanie odpowiedzi na zapytania przez protokół UDP, wysyłanie zapytań protokołem UDP, dynamiczne zapytania protokołem TCP, transfer plików przez protokół UDP, metadane w formacie XML, source exchange znane także jako "the download mesh" i równoległe ściąganie pliku w kawałkach (tzw. swarming).

Na serwerze prac rozwojowych czyni się wysiłki, aby włączyć te rozszerzenia do specyfikacji protokołu Gnutella wersji 0.6. Standard Gnutella 0.4, chociaż jest nadal ostatnią oficjalną wersją protokołu to ponieważ wszystkie rozszerzenia funkcjonują jako propozycje zmian jest przestarzała. W rzeczywistości prawie niemożliwe jest obecnie połączenie się używając procedur inicjalizujących z wersji 0.4.

Protokół Gnutella nadal pozostaje w wersji rozwojowej i mimo prób zerwania z zagmatwaną strukturą odziedziczoną ze starej Gnutelli 0.4 i zaprojektowania nowej przejrzystej wewnętrznej architektury (zobacz Gnutella2), Gnutella nadal jest najbardziej udanym, otwartym protokołem wymiany plików.

Programy klienckie

Zrzut ekranowy klienta Gnutelli - Shareazy

Niektóre z popularnych klientów Gnutelli to:

  • Morpheus Klient Gnutelli i innych sieci p2p
  • LimeWire (w Javie niezależny od platformy), na licencji GPL open-source
  • Cabos (Windows, Mac OS X, Mac OS)
  • BearShare (Windows), program na licencji adware (wielu użytkowników używa 5 Lite, ponieważ jest to ostatnia wersja obsługująca sieć Gnutella. Od wersji 6.0 zrezygnowano z możliwości korzystania z protokołu Gnutelli na rzecz iMesh).
  • Shareaza (Windows), na licencji GPL open-source, łączy się z sieciami Gnutella, Gnutella2, EDonkey2000 i BitTorrent
  • Gnucleus (Windows), open-source z kodem źródłowym w C/C++, łączy też z siecią Gnutella2
  • gtk-gnutella (Linux, Unix)
  • Acquisitionx (Mac OS X), oparty na otwartym kodzie źródłowym programu LimeWire
  • Poisoned (Mac OS X), open-source, pozwala łączyć się też z sieciami FastTrack, Ares i OpenFT
  • Mutella (Linux, Unix) klient Gnutelli działający w terminalu
  • Phex klient open source Gnutelli napisany w Javie, zobacz [1];
  • Qtella GNU/Linux gnutella client, zobacz [2]
  • Gnotella (nie rozwijany od grudnia 2001).
  • XNap (w Javie niezależny od platformy), open-source. zobacz http://xnap.sourceforge.net
  • CocoGnut (RISC OS), komercyjny klient na platformę RISC OS, zobacz [3]
  • Symella Klient Gnutelli na telefony z systemem operacyjnym Symbian [4]

Zobacz też

  • Freenet, który koncentruje się na anonimowości użytkowników i rozproszonym przechowywaniu plików
  • MUTE, zapewnia anonimowość użytkowników i udostępnianych treści, przekierowuje ruch w sieci w oparciu o algorytm zaadaptowany z ant-behaviour
  • servent
  • WASTE
  • Bitzi, open content katalog plików zintegrowany z niektórymi klientami Gnutelli
  • Gnutella crawler, używany do zbierania informacji w sieci Gnutella

Linki zewnętrzne

  • Gnutella Protocol Development Wiki
  • Gnutella protocol development website
  • Gnutelliums - rozbudowany opis klientów Gnutelli dla Windows, Linuksa/Unix-a i Macintosha
  • Gnutella News
  • Gnutella Forums
  • GnuFU: Gnutella For Users – Informacje o Gnutelli w opisane prosty sposób
  • Pytella. schnarff.com. [zarchiwizowane z tego adresu (2005-04-04)]. – Kod w Pythonie związany z Gnutellą 0.4
  • alt.gnutella – grupa dyskusyjna poświęcona sieci Gnutella

Publikacje na temat Gnutelli i wymiany plików

  • The 5th annual Passive & Active Measurement Workshop