eMule

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania
eMule
wymiana plików P2P
EMule mascot.svg
Logo programu
POL eMule search results.gif
Interfejs programu
Producent Unknown (John), Ornis
System operacyjny Microsoft Windows
Pierwsze wydanie 13 maja 2002
Aktualna wersja stabilna 0.50a, 7 kwietnia 2010
Licencja GNU GPL
www.emule-project.net

eMule (pot. „osiołek”) – program w architekturze peer-to-peer, który działa w oparciu o dwie sieci komunikacyjne: eDonkey i Kad. Stanowi alternatywę dla oryginalnego klienta sieci eDonkey2000.

eMule jest oprogramowaniem typu otwartego oprogramowania na Powszechnej Licencji Publicznej GNU. Działa pod systemem Microsoft Windows, ale jego kod źródłowy jest dostępny również pod Linuksa (jako mod xMule). Istnieje również jego wieloplatformowy odpowiednik – aMule.

Podstawowa charakterystyka[edytuj | edytuj kod]

Wyróżniającymi się możliwościami eMule jest bezpośrednia wymiana źródeł pomiędzy klientami, szybkie odzyskiwanie utraconych danych i użycie systemu kredytów promującego użytkowników, którzy najwięcej udostępniają. Ponadto eMule transmituje dane skompresowane przy użyciu biblioteki zlib, co pozwala na zaoszczędzenie przepustowości łącza.

Inną opcją eMule jest możliwość akceptacji linków ed2k i rozpoczęcie ściągania plików, do których te linki się odnoszą. Linki te dają pewność, że plik, który chcemy ściągnąć posiada ten sam hash i nie jest fałszywką. Ostatnio wiele z serwisów internetowych udostępniających te linki jest zamykanych przez władze (na skutek działania organizacji antypirackich takich jak: RIAA i MPAA) z powodu oskarżeń o łamanie praw autorskich oraz wątpliwości co do legalności udostępnianych linków.

Dopasowanie źródeł pliku jest weryfikowane przez algorytm MD4.

Kod eMule opiera się na Visual C++ .NET używającym Microsoft Foundation Classes. Ponieważ jest popularnym programem otwartego oprogramowania, w Internecie pojawiło się wiele modów (modyfikacji oryginalnego eMule), z czego większość z nich wzbogacono o moduły spyware.

Historia[edytuj | edytuj kod]

Projekt eMule został zapoczątkowany 13 maja 2002 roku przez Hendrika Breitkreuza (pseudonim Merkur), który był niezadowolony z oryginalnego eDonkey2000. Z czasem do projektu dołączyło siedmiu innych uczestników. Pierwsze źródło programu zostało wydane w wersji 0.02, a następnie opublikowane w serwisie SourceForge w dniu 6 lipca 2002 roku. W wersji binarnej wydano je 4 sierpnia 2002, oznaczone numerem 0.05a. System kredytów dołączono pierwszy raz 14 września 2002, w wersji 0.19a. Strona projektu rozpoczęła działalność 8 grudnia 2003. Od powstania program eMule ściągnięto z serwisu SourceForge ponad 650 milionów razy (stan: wrzesień 2012), co plasuje go na drugim (po VLC media player) miejscu listy najczęściej ściąganych projektów udostępnianych w tym serwisie[1].

Obecnie projekt obsługuje 16 osób: 2 projektantów, 2 obsługujących projekt (w tym założyciel Breitkreuz), 3 testerów i 9 testerów błędów. Oficjalną stronę projektu prowadzi 7 projektantów i 4 moderatorów.

Ostatnie wydarzenia[edytuj | edytuj kod]

Ostatnie wersje (0.40+) zostały wzbogacone o obsługę sieci Kad. Do tej sieci wdrożono protokół Kademlia, który nie zależy od centralnego serwera, w przeciwieństwie do sieci eDonkey.

W ostatnich wersjach dodano również wyszukiwanie Unicode (umożliwiające wyszukiwanie plików z nazwami posiadającymi znaki spoza alfabetu łacińskiego) i możliwość wyszukiwania plików z kompletnymi źródłami niedokończonych plików (nie obsługiwane w sieci Kad).

W nowej wersji dodano „listę złych źródeł”. Program dodaje adres IP do tej listy po jednym nieudanym połączeniu. Po dodaniu IP do „listy złych źródeł” program traktuje je jako „umarłe”. Niedostępne IP są blokowane na czas od 15 do 45 minut. Niektórzy użytkownicy narzekają, że prowadzi to do utraty aktywnych źródeł, a co za tym idzie do zwolnienia prędkości ściągania.

Innymi ostatnimi dodatkami do eMule jest możliwość uruchomienia eMule z konta użytkownika z ograniczonymi uprawnieniami (co poprawia bezpieczeństwo) i inteligentne wyłapywanie błędów w ściąganych plikach (dzięki czemu błędna część pliku o wielkości 9,28 MB nie musi być ściągana od nowa).

Nowością w wersji 0.46b jest tworzenie i zarządzanie „kolekcjami” plików, które zawierają zbiór linków do plików zamierzonych do ściągnięcia w komplecie.

W wersji 0.47b dodano protokół maskowania pozwalający na ominięcie ograniczenia przepustowości nakładanego przez ISP. Ta opcja może być przydatna dla użytkowników, którzy nie chcą zmieniać swojego providera internetowego, lecz może prowadzić do jeszcze szerzej zakrojonego limitowania łącz przez dostawców. (Uwaga: protokół maskowania nie zapewnia prywatności ani anonimowości.)

eMule jest obecnie uważany za program stabilny i nowe wersje nie są już wydawane tak często, jak kiedyś. Obecna przerwa między kolejnymi wersjami to 2-3 miesiące.

Zaleca się zamianę domyślnych portów eMule na wyższe (np. 20000 zamiast 4662), ponieważ ostatnio wielu dostawców internetowych blokuje domyślne porty p2p, co skutkuje niższymi prędkościami ściągania.

Kwestie sieciowe i współdzielenia plików[edytuj | edytuj kod]

Podstawowe pojęcia[edytuj | edytuj kod]

Identyfikacja pliku[edytuj | edytuj kod]

Wszystkim plikom przyporządkowywana jest wartość hash, która zależy od zawartości plików, ale nie od ich nazwy. Pozwala to użytkownikowi znaleźć wszystkie źródła do poszczególnego pliku bez znaczenia, jaką nazwę pliku dał każdy użytkownik.

Pliki są dzielone na segmenty tzw. „chunks” od 9,23 do 9,34 MB każdy (ostatni segment „chunk” może być mniejszy). Wartość hash pliku jest obliczana przez: na początku obliczanie sumy kontrolnej algorytmu MD4 każdego segmentu „chunk”, i później obliczanie sumy kontrolnej algorytmu MD4 całego ciągu sum kontrolnych segmentów „chunks” nawzajem połączonych.

Rozpoznawanie innych klientów[edytuj | edytuj kod]

Podobnie jak hash pliku, także każdy użytkownik w sieci dostaje unikatowy i stały tzw. „user hash”. Ta identyfikacja użytkownika jest zabezpieczana przez mechanizm kluczy kryptograficznych, który zapobiega różnego rodzaju nadużyciom.

Pobieranie danych[edytuj | edytuj kod]

Po określeniu źródeł dla pliku (tj. znalezieniu użytkowników, którzy udostępniają ten plik), program kontaktuje się z każdym z tych źródeł prosząc o plik. Każdy udostępniający posiada tzw. „współczynnik kolejki” (ang. QR – Queue Ranking) tych klientów którzy proszą o pobranie pliku. Gdy proszący dociera do szczytu takiej kolejki, kontaktują się nawzajem i rozpoczyna się transfer pliku. Klienci zwykle proszą o fragment, którego jest najmniej wśród dostępnych źródeł. Ma to na celu zwiększenie dostępności pliku w sieci; w przeciwnym przypadku rzadkie segmenty „chunks” mogłyby generować zastój w sieci. Jeśli klient ma większość segmentu „chunk”, może próbować prosić o resztę segmentu najpierw ponieważ tylko pełne segmenty „chunks” mogą być współdzielone w sieci.

Kompresja[edytuj | edytuj kod]

Przed wysłaniem danych eMule próbuje spakować dane za pomocą biblioteki zlib w najwyższym stopniu kompresji i wybiera mniejszy zestaw danych do przesłania. Uprzednio skompresowane pliki są traktowane jako pliki RAW.

Klasyczny serwer oparty na eD2k[edytuj | edytuj kod]

(ed2k: skrót określający sieć eDonkey)

Łączenie się z siecią[edytuj | edytuj kod]

Podstawowym elementem klasycznej sieci jest serwer eD2k. Każdy klient musi być podłączony do serwera, aby w niej uczestniczyć. Kiedy klient łączy się do serwera, serwer sprawdza, czy inni klienci mogą bez przeszkód z nim połączyć. Jeśli tak, serwer przydziela mu tzw. „high ID”. Jeśli komunikacja ta jest zablokowana, serwer przydziela tzw. „low ID”. Po przydzieleniu ID, eMule wyśle listę wszystkich udostępnianych plików do serwera. Serwer dodaje nazwy plików oraz wartość hash, które wysłał eMule, do swojej bazy danych.

Szukanie plików[edytuj | edytuj kod]

Raz połączony do sieci, klient może szukać słów kluczowych w nazwach plików. Wyszukiwanie także może być lokalne albo globalne. Jeśli jest to lokalne wyszukiwanie (zostaje przeszukany tylko serwer do którego jesteś podłączony), wyszukiwania są szybsze, ale zawiera mniej rezultatów. Natomiast jeśli jest to wyszukiwanie globalne (zostają przeszukane wszystkie serwery z listy użytkownika), zajmuje to więcej czasu, ale zawiera więcej rezultatów. Każdy serwer sprawdza słowa kluczowe w swojej bazie danych i zwraca jakiekolwiek nazwy plików (razem z wartością hash) które pasują do słowa kluczowego.

Uwaga: istnieją w sieci serwery, które nie zwracają żadnych rezultatów na pewne typy wyszukiwań (np. MP3).

Znajdowanie źródeł do plików[edytuj | edytuj kod]

Pliki do ściągania mogą zostać dodane poprzez odpowiednią funkcje w oknie wyszukiwania eMule’a albo specjalny format linków ed2k oferowany przez wiele stron internetowych. Raz dodane pliki do ściągania znajdują się w tzw. liście „Plików ściąganych”. Program na początku wysyła do lokalnego (tego, z którym jest połączony) serwera, a następnie do wszystkich pozostałych serwerów w sieci, zapytania o źródła dla poszczególnych ściąganych plików. Serwer sprawdza wartość hash plików w swojej bazie danych i zwraca klientowi informacje, że posiada to czego klient szuka. Źródła stanowią inni klienci, którzy posiadają ściągnięty przynajmniej jeden kompletny segment „chunk” (9,28 MB) pliku pasującego do wartości hash.

Zdecentralizowana sieć Kad[edytuj | edytuj kod]

Kademila jest eksperymentalną zdecentralizowaną siecią p2p składającą się z komputerów komunikujących się między sobą bez pośrednictwa serwerów p2p. Ale aby jednostkę centralną z zainstalowanym eMule włączyć do sieci Kad, konieczne jest jednorazowe krótkie połączenie z serwerem w celu odnalezienia w internecie przynajmniej jednego komputera działającego w sieci Kad.

Information icon.svg Osobny artykuł: Kademlia.

Podłączanie do sieci[edytuj | edytuj kod]

Jedyną rzeczą potrzebną do podłączenia się do tej sieci jest podanie adresu IP i numeru portu jakiegokolwiek klienta eMule już podłączonego do sieci – proces ten w programie nazywany jest „Boot Strap”. Kiedy klient jest w sieci, pyta innych klientów czy może się swobodnie połączyć. Ten proces jest bardzo podobny do sprawdzania HighID/LowID na serwerach. Jeśli można się swobodnie połączyć, klient jest znakowany ID (bardzo podobnym do HighID) i dostaje otwarty status. Jeśli nie można połączyć się swobodnie, dostaje status za zaporą sieciową.

Od wersji 0.44a sieć Kad obsługuje „Buddy” dla użytkowników za zaporą. Buddy są innymi klientami sieci Kad, którzy posiadają status otwarty i pracują jako przekaźnik dla tych połączeń, których użytkownicy za zaporą nie mogliby obsłużyć.

Wyszukiwanie w sieci[edytuj | edytuj kod]

Sieć Kad zoptymalizowana jest do wszelkiego rodzaju działań, tj. wyszukiwanie plików po nazwie, źródeł, innych klientów. Nie ma serwerów, które przechowywałyby informacje o kliencie i o tym, co udostępnia, zatem musi robić to każdy klient podłączony do sieci – w zasadzie każdy klient jest jednocześnie małym serwerem.

Od kiedy każdy klient jest rozpoznawalny poprzez unikatowy hash, ideą Kademlii jest kojarzenie ostatniego „obowiązku” związanego z tym hashem. Każdy klient sieci Kad pracuje jako serwer dla ostatnich słów kluczowych lub źródeł. Hash klienta wyznacza charakterystyczne słowo kluczowe albo źródło. Zatem zadaniem dowolnego rodzaju wyszukiwania jest znalezienie tych klientów, którzy odpowiadają za obecny temat wyszukiwania. Jest to realizowane dzięki wyliczeniom możliwego dystansu do docelowego klienta poprzez zapytania innych klientów o najkrótszą drogę do niego.

Podstawowe reguły zachowania w komunikacji[edytuj | edytuj kod]

eMule i inne programy korzystające z sieci eDonkey2000 obsługują sieć na dwa sposoby:

  • Użytkownicy są zmuszeni do udostępniania plików: udostępnione pliki większe niż 9500 KB są dzielone i ściągane w częściach, a odbiorca zaczyna udostępniać ją zaraz po ściągnięciu, nawet jeśli cały plik nie został jeszcze ściągnięty. Ściągający w ten sposób jest zmuszony do udostępniania pliku zanim go ściągnie.
  • Użytkownicy są zmuszeni do udostępniania łącza, co powiększa strumień danych w sieci: oficjalna wersja eMule nie pozwala użytkownikowi na ograniczenie prędkości wysyłania do wartości mniejszej niż 1/4 prędkości ściągania. Tego ograniczenia nie stosuje się jeśli prędkość wysyłania ustawiona jest na 10 KB/s lub więcej.

Chociaż istnieje wiele modów eMule, trudno jest znaleźć jeden który nie egzekwuje punktu drugiego, który jest częścią polityki programu. Co więcej próba obejścia elementu wysyłania może w efekcie spowolnić ściąganie (z powodu mniejszych kredytów). Również klienci, którzy jedynie pobierają pliki są blokowani przez mody eMule (w oficjalnej wersji nie ma opcji blokowania).

eMule zawiera opcję limitowania prędkości wysyłania i ściągania, tak że nie przekraczają one ustalonych wartości.

Wersje starsze niż 0.47a nie mogły udostępniać plików większych niż ok. 4 GB. Było to wrodzone ograniczenie protokołu ed2k. Wraz z wersją 0.47a ten limit został podniesiony do 256 GB, lecz tylko dla klientów obsługujących tę możliwość (obecnie eMule i aMule).

Podsumowanie[edytuj | edytuj kod]

Obie sieci mają zupełnie inne koncepcje na osiągnięcie tego samego celu: wyszukiwanie plików i znajdowanie źródeł do nich. Głównym celem sieci Kad jest uniezależnienie od serwerów i poprawienie skalowalności. Serwery mogą obsługiwać jedynie pewną ograniczoną liczbę użytkowników i w razie awarii dużego serwera sieć jest poważnie osłabiona. Sieć Kad samoorganizuje się i dostosowuje do najlepszej wydajności zależnej od ilości użytkowników i jakości ich łączy. Zatem jest bardziej odporna na awarie na dużą skalę. Niektóre serwery ograniczają liczbę udostępnianych plików, które mogą udostępniać użytkownicy. To ograniczenie nie istnieje w Kad, więc jest ona bardziej odpowiednia dla użytkowników udostępniających dużą liczbę plików.

Mody programu eMule[edytuj | edytuj kod]

Jak każdy popularny program otwartego oprogramowania, eMule ma wiele odmian (przeróbek), tzw. modów. Część modów na początku były modami kodu aMule’a (tzw. forki kodu aMule’a), a dopiero później deweloperzy sprawili, że mody stały się niezależne od oficjalnych wersji.

Popularnym modem tego typu jest eMule Plus. Nie ma on zaimplementowanej obsługi protokołu KAD, ale zaletami programu jest lepszy interfejs graficzny (GUI) i zdolność do osiągania lepszych prędkości przy ściąganiu w porównaniu do oficjalnej wersji programu.

Inne mody bazujące na oficjalnym eMule’u są tworzone na podstawie nowych wersji oryginalnego klienta. Często funkcje, które początkowy były tylko w modach, później trafiały do oficjalnych wersji.

Bardzo rozbudowanym modem jest MorphXT (najnowsza wersja to 12.7). Pozwala on na modyfikację zaawansowanych ustawień, niedostępnych w zwykłej wersji. Np.: posiadał moduł WebCache (do wersji 9.6), który może usprawnić ściąganie pliku za pomocą serwera pośredniczącego (kilka takich serwerów znajduje się w Polsce), możliwość sprawdzenia, czy występuje kompletny plik przed pobraniem, zaawansowane opcje archiwizacji, aktualizacji plików czy zarządzania pasmem wychodzącym.

System kredytów[edytuj | edytuj kod]

Wprowadzenie[edytuj | edytuj kod]

System kredytów jest używany do nagradzania użytkowników wnoszących największy wkład dla sieci, np. wysyłanie danych do innych klientów.

Surowy system kolejkowania w eMule’u jest oparty na czasie oczekiwanym jaki użytkownik musi spędzić w kolejce. System kredytów dostarcza główny modyfikator w czasie oczekiwania poprzez wysyłanie i ściąganie pomiędzy dwoma uznanymi klientami. Im więcej użytkownicy wysyłają danych do klienta tym szybszy mają postęp w kolejce klienta.

Modyfikatory są wyliczane na podstawie ilości przesłanych danych pomiędzy dwoma klientami. Użyte wartości mogą zostać obejrzane w szczegółowym oknie dialogowym klienta. Aby zobaczyć te informacje, należy kliknąć prawym przyciskiem myszy na jakiegokolwiek użytkownika i wybrać opcje „Pokaż szczegóły”

Obliczanie kredytów[edytuj | edytuj kod]

Pozycja użytkownika w kolejce klienta zależy od różnych czynników, wliczając w to czas oczekiwania w kolejce, priorytet wysyłania żądanego pliku, i kredyt użytkownika. Te wszystkie czynniki są wyrażane w wartości będącej liczbą całkowitą i ich totalna wartość daje tzw. „wynik”, który jest używany do klasyfikacji użytkowników w kolejce.

Kredyt jest wyliczany w następujący sposób:

  • Jeśli klient kiedykolwiek wysłał danych mniej niż 1 MB, wartość kredytu jest 1.
  • Jeśli klient wysłał danych więcej niż 1 MB, ale nigdy nie ściągnął czegokolwiek, wartość kredytu jest 10.
  • Poza tym:
    • Obliczanie następującej wartości: całkowite wysłane dane × 2 / całkowite ściągnięte dane.
    • Obliczanie następującej wartości: pierwiastek kwadratowy z całkowitej ilości wysłanych danych + 2, [SQRT(całkowite wysłane dane + 2)].
    • Spośród tych dwóch wartości, wybierz jedną najmniejszą. Nazwij ją x.
    • Jeśli x jest mniejszy niż 1, wartość kredytu jest 1. Jeśli x jest większy niż 10, wartość kredytu jest 10. Inaczej, wartość kredytu jest x, ale zawsze w zakresie 1-10.

Uwagi[edytuj | edytuj kod]

  • Wszyscy klienci wysyłający dane są nagradzani systemem kredytów przez klienta ściągającego dane. Nie ma znaczenia, czy klient obsługuje system kredytów czy nie.
  • Nieobsługujący systemu kredytów klienci nie przyznają kredytów klientom, którzy wysyłają do nich dane.
  • Kredyty nie są globalne. Są wymieniane pomiędzy dwoma określonymi klientami.
  • Kredyty są przechowywane w pliku clients.met. Unikatowy tzw. „user hash” jest używany do identyfikowania klienta.
  • Kredyty każdego użytkownika są zapisywane przez klienta, który pobiera dane. Zapobiega to podrabianiu kredytów.
  • Użytkownik nie może podejrzeć swoich własnych kredytów.
  • Systemem kredytów można manipulować np. przez ponowną instalację eMule.

Ciekawostki[edytuj | edytuj kod]

  • Pod koniec lutego 2006 r. zostały zablokowane serwery udostępniające największy indeks plików podłączonych klientów. Mowa tutaj o belgijskich serwerach Razorback 2.0 (maks. użytkowników 1,15 M) i Razorback 2.1 (maks. użytkowników 1,20 M). Administratorzy tych serwerów trafili do aresztu. Odbywa się proces wytoczony przez RIAA przeciwko nim.

Statystyki sieci[edytuj | edytuj kod]

(dane ogólne dla sieci eDonkey2000)

  • Obecna liczba użytkowników: 3–5 milionów. (rzeczywista liczba jest nieznana, od kiedy nowe serwery sztucznie zawyżają liczbę użytkowników.
  • Liczba udostępnionych plików sięga 600 milionów.

Najpopularniejsze serwery[edytuj | edytuj kod]

  • ##acabose verbose emule... maks. użytkowników 1,70 M
  • Billion Euro maks. użytkowników 1,50 M
  • Razorback 3.0 maks. użytkowników 1,40 M
  • Razorback 3.1 maks. użytkowników 1,40 M
  • BurgEsel maks. użytkowników 1,34 M
  • Shorty Server 1 maks. użytkowników 1,29 M
  • eDonkeyServer No3 maks. użytkowników 1,23 M
  • www.UseNext.to maks. użytkowników 1,00 M

Dotyczy działający serwerów powyżej miliona użytkowników. Dane mogą lub są zawyżone przez serwery (patrz: ciekawostki).

Najwięcej udostępnionych plików[edytuj | edytuj kod]

  • Razorback 3.1 ok. 145 M

(Serwery najczęściej nie udostępniają plików z wyjątkiem tych należących do przemysłu erotycznego (w celach reklamowych), ale informacje kto jaki plik posiada do rozpowszechniania w sieci).

Przypisy

Linki zewnętrzne[edytuj | edytuj kod]

Wikimedia Commons