Fenomén peer-to-peer sítí na internetu
Roman Nepšinský aka Mem/Mlat, 11.03.2002
Obsah
V první části tohoto pojednání se budu zabývat definováním pojmu peer-to-peer (p2p) a "užitnou hodnotou" takto koncipované počítačové sítě. Intuitivně je zřejmé, že hodnota sítě poroste s počtem připojených zařízení, a proto je jistě namístě hovořit o p2p sítích, které využívají infrastrukturu tak obrovské WAN sítě jakým je současný internet, jako o fenoménu. Tímto tématem se budu zabývat v odstavci věnovanému srovnání informační hodnoty internetu (ve smyslu klient/server architektury World Wide Webu) s potenciálem p2p sítí.
V druhé části se budu podrobněji věnovat některým minulým a současným p2p internetovým aplikacím pro sdílení souborů jako jsou Napster a sítě založené na protokolech OpenNap, Gnutella, FastTrack a další.
peer-to-peer ("rovný s rovným") - vztah, kdy spolu nezávislé (autonomní) entity (počítače) komunikují navzájem tak, jako by si byly rovny. Jedná se o decentralizovanou architekturu, počítače navzájem sdílejí své prostředky a komunikují přímo mezi sebou bez asistence nějaké nadřazené autority - serveru. Důsledkem spolupráce s ostatními jsou nové funkce a možnosti. Tato "přidaná hodnota" označovaná jako "síťový efekt" (network effect) dramaticky roste s počtem a různorodostí připojených zařízení.
Pro P2P sítě platí tři zákony počítačových sítí (n představuje počet zasíťovaných zařízení):
- Sarnoff's law - hodnota sítě je přímo úměrná n
V tomto pojetí je síť přenosovým médiem sdíleným několika vysílači (transmitters) a mnoha přijímači (receivers). Hodnota sítě lineárně závisí na počtu jednotlivých zařízení, které přijímají služby sítě.
- Metcalfe's law - hodnota sítě je přímo úměrná n2
Metcalfe pohlíží na síť jako na médium sloužící ke vzájemné komunikaci zařízení, hodnota sítě proto roste s počtem zařízení kvadraticky, protože každé z n zařízení může komunikovat s dalšími n-1 zařízeními (je tedy možné provádět n(n-1)..n2 simultánních transakcí mezi dvěma zařízeními).
- Reed's law - hodnota sítě je přímo úměrná 2n
Reed chápe síť jako médium, na kterém může existovat až 2n-n-1..2n netriviálních skupin zařízení. Hodnota sítě potom představuje exponenciální hodnotu propojení těchto skupin.
P2P zvyšuje hodnotu sítě ve všech těchto aspektech (lineárním zvýšením počtu vysílačů a přijímačů informací - Sarnoff; kvadratickým zvyšením počtu účastníků transakcí - Metcalfe; exponenciálním nárůstem počtu a různorodostí skupin v síti - Reed).
Současná podoba služby World Wide Web je založená na architektuře klient/server. Komunikaci mezi klientem (webovým browserem) a webovým serverem zahajuje vždy klient (server není schopen tuto komunikaci zahájit, protože na straně klienta neexistuje žádný rezidentní software, který by na požadavek serveru mohl reagovat). P2P nahrazuje tento asymetrický vztah klient/server symetrickým vztahem, ve kterém jsou všichni zúčastnění současně klienty i servery a tedy požadují a na oplátku také poskytují služby ostatním účastníkům v síti.
Vezmeme-li v úvahu současný stav, na WWW existují milióny webových serverů a k nim přistupují řádově stovky miliónů webových klientů. Tyto klienty ve většině případů tvoří desktopové počítače vybavené dostatečně dimenzovanými prostředky (pamětí, procesorem, připojením k síti...). Jejich zapojením do p2p sítě by bylo možné poskytnout tyto výpočetní, prostorové a informační prostředky všem ostatním účastníkům v síti a mnohonásobně tak zvýšit hodnotu sítě (podle odhadů [1] až řádově o (108)2 v Metcalfově, resp. o 2108 v Reedově hodnocení).
Současné internetové P2P aplikace můžeme rozdělit podle svého primárního účelu do třech skupin:
- distributed file sharing - sdílení souborů a dat
- person-to-person instant messaging - zasílání zpráv mezi uživateli
- distributed computing - distribuované výpočty
P2P internetové aplikace za pomoci proprietárních protokolů vytváří virtuální síť, v jejímž rámci mezi sebou komunikují klienti a poskytují si služby (často více druhů, např. klient pro sdílení souborů typicky umožňuje i zasílání zpráv ostatním připojeným uživatelům). Z "fyzického" hlediska je přenosovým médiem internet a jeho protokoly (nejčastěji TCP případně v kombinaci s HTTP (viz například Gnutella)).
P2P aplikace pro sdílení souborů
- Napster
- Napster je asi mediálně nejznámější p2p aplikací pro sdílení souborů (resp. souborů ve formátu MP3, pro které byl protokol Napsteru navržen). V čase své největší slávy jej využívalo kolem 70 miliónů klientů. Nepoužívá čistý p2p přístup, ale kombinuje jej s architekturou klient/server. To má sice výhodu v jednodušším návrhu aplikace a zejména v jednodušším vyhledávání, ale zároveň je tím odhaleno zranitelné místo sítě - stačí odstavit nebo filtrovat obsah centrálních serverů a síť přestane plnit svůj účel, jak se ostatně také stalo po podání žalob nahrávacích společností.
- Základ sítě tvoří skupina nezávislých serverů, ke kterým se přihlašují jednotliví klienti. Vždy v rámci příslušného serveru pak sdílí svá data, komunikují přes chat a vyhledávají konkrétní soubory. Server eviduje zpřístupněné soubory a jejich charakteristiky (v případě MP3 tedy bitrate, délku...) a umístění (nickname uživatele a přenosovou kapacitu jeho připojení k internetu + případné restrikce na počet současně stahovaných souborů ap.). Přenos vybraných souborů mezi uživateli už se děje bez účasti serveru, ten je pouze informován o skončeném přenosu.
- Originální protokol Napsteru byl v rámci open source projektu OpenNap zdokumentován a rozšířen o podporu sdílení jakéhokoliv typu dat. Pro komunikaci klientů se servery se používá TCP. Servery typicky naslouchají na portu 8888 nebo 7777 (vyjímkou je metaserver s portem 8875). Každá zpráva obsahuje hlavičku (2B délka datové části zprávy, 2B id zprávy - čísla jsou ve formátu little-endian) a data (prostý ASCII text).
Klienti se pomocí tohoto protokolu nejprve přihlásí k metaserveru (redirectoru) a přes něj ke konkrétnímu vybranému serveru (zprávou login obsahující mimojiné nickname uživatele, port na kterém naslouchá pro datové přenosy a přenosovou kapacitu jeho linky). Server odpoví zprávou login ack pokud je uživatel s daným nickem zaregistrován. Klient poté zašle na server seznam souborů, které chce sdílet (zprávami client notification of shared file), a může provádět další operace jako prohlížení, vyhledávání, download a upload.
- Gnutella
- Gnutella (vyslovováno podle anglického "newtella") je úplně decentralizovanou p2p architekturou - každý klient Gnutelly se chová jako uzel a zároveň jako router. Prostředky počítače jsou tedy využity i pro plánování a přenos síťových dat mezi uzly v rámci sítě. Tento přenos ovšem nezahrnuje samotný transfer souborů mezi uživateli - pro tyto účely se vždy vytváří nové přímé spojení mezi uživateli s využitím protokolu HTTP. Přenos je iniciován zasláním požadavku GET a potvrzen HTTP OK (Gnutella podporuje parametr HTTP Range, takže je možné navazovat na přerušené přenosy).
- K nejznámějším Gnutella klientům patří:
(Windows) BearShare, FileNavigator, Gnotella, Gnucleus, LimeWire, Phex;
(Linux) Gnewtellium, Gnut, Gtk-Gnutella, LimeWire, Mutella, NapShare, Phex, Qtella;
Existují i klienti pro Javu (LimeWire, Phex) a Macintosh (LimeWire, Mactella, Phex).
- Klienti v síti Gnutella se nazývají servents (služebníci). Ke komunikaci mezi sebou využívají několik definovaných zpráv sloužících pro:
- zjišťování dalších připojených uživatelů (zprávy Ping a Pong)
- vyhledávání souborů podle daného kritéria (zprávy Query a QueryHit)
- výzvu k zaslání souboru přes firewall není-li možné uskutečnit přímé TCP spojení (zpráva Push)
- Klient, který se chce připojit do sítě, zašle zprávu GNUTELLA CONNECT (přes TCP/IP spojení) libovolnému serventovi, který je do sítě již připojen. Ten se rozhodne (např. na základě toho, jestli má ještě volné sloty) zda připojení přijme a odpoví zprávou GNUTELLA OK. Dále si už serventi mezi sebou vyměňují zprávy Ping, Pong, Query, QueryHit a Push. Každá zpráva kromě svého id (Descriptor ID a Payload Descriptor) a datové části (Payload Length a Payload) obsahuje také hodnotu TTL (time to live) a hops. TTL označuje počet přeposlání dané zprávy před tím, než bude ze sítě odebrána, hops označuje celkový počet přeposlání. Klient Gnutelly by měl zajistit při přeposílání zprávy korektní dekrementaci TTL a inkrementaci hops, pokud by tak neučinil, velmi snadno by došlo k zahlcení sítě. Pro směrování zpráv platí řada dalších pravidel (klient má historii zpráv a duplicitní zprávy ze sítě automaticky odebírá, Ping a Query jsou rozesílány všem klientům (kromě původního odesílatele) připojeným k aktuálnímu uzlu, odpovědi Pong a QueryHit jsou posílány jen směrem, ze kterého přišel požadavek).
Názornější popis činnosti směrování zpráv v síti Gnutella viz přiložený diagram (převzatý z The Gnutella Protocol Specification v0.4).
![]()
![]()
I přes aplikaci zmíněných pravidel pro směrování zpráv je zátěž sítě značná a vyhledávání je proto časově náročné. K problémům přispívá i otevřenost protokolu Gnutelly, kdy různí klienti implementují pravidla z protokolu různě, případně manipulují s výsledky vyhledávání ap. Problémem jsou i uživatelé, tzv. "free loaders" nebo "leechers", kteří síť pouze využívají a sami nesdílejí žádná data, čímž dále zvyšují zátěž sítě při vyhledávání.
- FastTrack
- FastTrack je v současnosti (březen 2002) masově používaným protokolem (v průměru 300,000 simultánně připojených uživatelů), který řeší řadu nedostatků Gnutelly a jejích klonů. Díky uzavřenosti protokolu a zdrojových kódů klientů by mělo být chování sítě pod kontrolou tvůrců, nicméně i protokol FastTrack byl za pomoci reverzního engineeringu zdokumentován (jako vedlejší efekt open-source projektu giFT - GNU Internet File Transfer) a existují pro něj open-source klienti. Společnost FastTrack ovšem odpověděla novou verzí protokolu se změněným kryptováním, kterou se doposud nepodařilo zdokumentovat. K oficiálním FastTrack klientům patří Grokster, Kazaa, Morpheus a Musicsity.
- Síť je založená na koncepci uzlů (nodes) a superuzlů (supernodes). Superuzly jsou v síti voleny klienty automaticky podle kapacitních parametrů připojení a výpočetní síly počítače, takže výkonnější počítače s lepším připojením zajišťují většinu síťového provozu. Klienti FastTracku také zpravidla fungují jako služba (daemon) v operačním systému a spoluvytvářejí p2p síť i pokud uživatel právě aktivně nepoužívá aplikaci pro sdílení dat (narozdíl od většiny klientů Gnutelly, Napsteru ap.).
- [1] Peer-To-Peer Architectures and the MagiTM Open-Source Infrastructure
Endeavors Technology, Inc.- [2] Peer-To-Peer Working Group
www.p2pwg.org- [3] O'Reilly OpenP2P
www.openp2p.com- [4] Peer to peer file sharing systems
referát v češtině- [5] OpenNap - Napster messages description
napster.txt- [6] Clip2 Distributed Search Services
The Gnutella Protocol Specification v0.4