Gnutella - Gnutella

Gnutella är ett peer-to-peer-nätverksprotokoll . Det grundades 2000 och var det första decentraliserade peer-to-peer-nätverket i sitt slag, vilket ledde till att andra, senare nätverk antog modellen.

I juni 2005 var Gnutellas befolkning 1,81 miljoner datorer och ökade till över tre miljoner noder i januari 2006. I slutet av 2007 var det det mest populära fildelningsnätverket på Internet med en uppskattad marknadsandel på mer än 40%.

Historia

Den första klienten (även kallad Gnutella) från vilken nätverket fick sitt namn utvecklades av Justin Frankel och Tom Pepper från Nullsoft i början av 2000, strax efter företagets förvärv av AOL . Den 14 mars gjordes programmet tillgängligt för nedladdning på Nullsofts servrar. Händelsen tillkännagavs i förtid på Slashdot , och tusentals laddade ner programmet den dagen. Den källkoden var att släppas senare under GNU General Public License (GPL); de ursprungliga utvecklarna fick dock aldrig chansen att uppnå detta syfte.

Nästa dag stoppade AOL tillgängligheten till programmet på grund av juridiska problem och hindrade Nullsoft från att göra något vidare arbete med projektet. Detta stoppade inte Gnutella; efter några dagar hade protokollet omvandlats och kompatibla gratis- och öppen källkodskloner började dyka upp. Denna parallell utveckling av olika kunder genom olika grupper förblir modus operandi av Gnutella utveckling idag.

Bland de första oberoende Gnutella-pionjärerna var Gene Kan och Spencer Kimball , som lanserade den första portalen för att samla open source-gemenskapen för att arbeta med Gnutella och utvecklade också "GNUbile", ett av de första open-source (GNU-GPL) -programmen för att implementera Gnutella -protokollet.

Gnutella-nätverket är ett fullt distribuerat alternativ till sådana halvcentraliserade system som FastTrack ( KaZaA ) och den ursprungliga Napster . Nätverkets initiala popularitet sporrades av Napsters hotade rättsliga bortgång i början av 2001. Denna ökande popularitetssteg avslöjade gränserna för det första protokollets skalbarhet. I början av 2001 möjliggjorde variationer av protokollet (först implementerat i egna och slutna källkunder) en förbättring av skalbarheten. Istället för att behandla varje användare som klient och server, behandlades vissa användare nu som ultrapeers , dirigerade sökförfrågningar och svar för användare som är anslutna till dem.

Detta gjorde att nätverket kunde växa i popularitet. I slutet av 2001 blev Gnutella -klienten LimeWire Basic gratis och öppen källkod. I februari 2002 övergav Morpheus , en kommersiell fildelningsgrupp, sin FastTrack-baserade peer-to-peer-programvara och släppte en ny klient baserad på den gratis och öppna källkoden Gnutella-klienten Gnucleus .

Ordet Gnutella refererar idag inte till något projekt eller programvara, utan till det öppna protokoll som används av de olika klienterna.

Namnet är en portmanteau av GNU och Nutella , varumärket för en italiensk smörgås med hasselnöt: förmodligen åt Frankel och Pepper mycket Nutella som arbetade med det ursprungliga projektet och avsåg att licensiera sitt färdiga program under GNU General Public License. Gnutella är inte kopplat till GNU- projektet eller GNU: s eget peer-to-peer-nätverk, GNUnet .

Den 26 oktober 2010 beordrades den populära Gnutella -klienten LimeWire av domare Kimba Wood från USA: s tingsrätt för södra distriktet i New York när hon undertecknade ett samtycksdekret som rekryteringsindustrin och LimeWire hade gått med på. Denna händelse var den troliga orsaken till en betydande nedgång i storleken på nätverket, eftersom medan förhandlingarna om föreläggande , LimeWire hade personalen in fjärrinaktive kod i mjukvaran. När föreläggandet trädde i kraft avbröts användare som hade installerat berörda versioner (nyare än 5.5.10) från P2P -nätverket . Eftersom LimeWire var gratis programvara hade ingenting hindrat skapandet av gafflar som utelämnade inaktiveringskoden, så länge LimeWire -varumärken inte användes. Avstängningen påverkade till exempel inte FrostWire , en gaffel av LimeWire som skapades 2004 och som varken bär fjärraktiveringskoden eller adware .

Den 9 november 2010 återuppstod LimeWire av ett hemligt team av utvecklare och fick namnet LimeWire Pirate Edition . Den var baserad på LimeWire 5.6 BETA. Den här versionen tog bort sina serverberoenden och alla PRO -funktioner aktiverades gratis.

Design

Ett diagram över Gnutella -noder och deras anslutningar.
Gnutella sök- och hämtningsprotokoll

För att se hur Gnutella ursprungligen fungerade, föreställ dig en stor krets av användare (kallade noder), som alla har Gnutella -klientprogramvara. Vid första starten måste klientprogramvaran starta och hitta minst en annan nod. Olika metoder har använts för detta, inklusive en redan existerande adresslista över möjligen fungerande noder som levereras med programvaran, med hjälp av uppdaterade webbcacher för kända noder (kallade Gnutella Web Caches ), UDP-värdcacher och sällan till och med IRC . När den är ansluten begär klienten en lista över arbetsadresser. Klienten försöker ansluta till noderna den levererades med, liksom noder som den tar emot från andra klienter tills den når en viss kvot. Den ansluter bara till så många noder, cachelagrar lokalt de adresser som den ännu inte har försökt och kasserar adresserna som den försökte och visade sig vara ogiltiga.

När användaren vill göra en sökning skickar klienten begäran till varje aktivt ansluten nod. I version 0.4 av protokollet var antalet aktivt anslutna noder för en klient ganska litet (cirka 5). I den versionen av protokollet vidarebefordrar varje nod begäran till alla dess aktivt anslutna noder, som i sin tur vidarebefordrar begäran. Detta fortsätter tills paketet har nått ett förutbestämt antal hopp från avsändaren (max 7).

Sedan version 0.6 (2002) är Gnutella ett sammansatt nätverk av bladnoder och ultranoder (även kallade ultrapeers). Bladnoderna är anslutna till ett litet antal ultrapeers (vanligtvis 3) medan varje ultrapeer är ansluten till mer än 32 andra ultrapeers. Med denna högre grad minskades det maximala antalet humle en fråga kan resa till 4.

Blad och ultrapeers använder Query Routing Protocol för att utbyta ett Query Routing Table (QRT), en tabell med 64 Ki -platser och upp till 2 Mi -slots som består av hashade sökord. En bladnod skickar sin QRT till var och en av de ultrapeers som den är ansluten till, och ultrapeers slår ihop QRT för alla sina blad (nedskärda till 128 Ki -slots) plus sin egen QRT (om de delar filer) och byter ut det med sina egna grannar. Förfrågan dirigeras sedan genom att hascha ord i frågan och se om alla matchar i QRT. Ultrapeers gör den kontrollen innan de vidarebefordrar en fråga till en bladnod, och även innan de vidarebefordrar frågan till en peer ultra -nod förutsatt att detta är det sista hoppet frågan kan resa.

Om en sökbegäran visar ett resultat kontaktar noden som har resultatet med sökaren. I det klassiska Gnutella -protokollet skickades svarsmeddelanden tillbaka längs den rutt som frågan tog, eftersom själva frågan inte innehöll identifierande information för noden. Detta schema reviderades senare för att leverera sökresultat över UDP , direkt till noden som initierade sökningen, vanligtvis en ultrapeer av noden. I det nuvarande protokollet har frågorna alltså IP -adressen och portnumret för någon av noderna. Detta sänker mängden trafik som dirigeras genom Gnutella -nätverket, vilket gör den betydligt mer skalbar.

Om användaren bestämmer sig för att ladda ner filen, förhandlar de om filöverföringen . Om noden som har den begärda filen inte är brandväggad kan den frågande noden ansluta till den direkt. Emellertid, om noden är firewalled, stoppa källnoden från att ta emot inkommande anslutningar, klienten vill ladda ner en fil skickar den en så kallad push-begäran till servern för fjärrklienten att initiera anslutningen i stället (för att driva den fil) . Till en början dirigerades dessa push -begäranden längs den ursprungliga kedjan den använde för att skicka frågan. Detta var ganska opålitligt eftersom rutter ofta skulle gå sönder och dirigerade paket alltid är föremål för flödeskontroll. push -proxyer introducerades för att lösa detta problem. Dessa är vanligtvis ultrapeers i en bladnod och de meddelas i sökresultat. Klienten ansluter till en av dessa push -proxyservrar med en HTTP -begäran och proxyn skickar en push -begäran till ett blad på klientens vägnar. Normalt är det också möjligt att skicka en push -begäran över UDP till push -proxy, vilket är mer effektivt än att använda TCP. Push-proxies har två fördelar: För det första är ultrapeer-leaf-anslutningar mer stabila än rutter. Detta gör push -förfrågningar mycket mer tillförlitliga. För det andra minskar det mängden trafik som dirigeras genom Gnutella -nätverket.

Slutligen, när en användare kopplar bort, sparar klientprogramvaran en lista med kända noder. Detta innehåller noder som klienten var ansluten till och noder som lärdes från pongpaket. Klienten använder det som sin seedlista, när den nästa gång börjar, och blir därmed oberoende av bootstrap -tjänster.

I praktiken var den här metoden att söka på Gnutella -nätverket ofta opålitlig. Varje nod är en vanlig datoranvändare; som sådan ansluter och kopplar de ständigt, så nätverket är aldrig helt stabilt. Även bandbreddskostnaden för att söka på Gnutella växte exponentiellt till antalet anslutna användare, ofta mättade anslutningar och gjorde långsammare noder värdelösa. Därför skulle sökbegäranden ofta släppas, och de flesta frågor nådde bara en mycket liten del av nätverket. Denna observation identifierade Gnutella-nätverket som ett oskalbart distribuerat system och inspirerade utvecklingen av distribuerade hashtabeller , som är mycket mer skalbara men som bara stöder exakt matchning, snarare än sökord.

För att hantera problemen med flaskhalsar implementerade Gnutella -utvecklare ett system med ultrapeers och blad . Istället för att alla noder skulle betraktas som lika hölls noder som kom in i nätverket vid "kanten" av nätverket, som ett blad. Blad ger inte routing. Noder som kan dirigera meddelanden marknadsförs till ultrapeers. Ultrapeers accepterar bladanslutningar och ruttsökningar och meddelanden om nätverksunderhåll. Detta gör att sökningar kan sprida sig vidare genom nätverket och möjliggör många ändringar i topologi. Detta förbättrade kraftigt effektiviteten och skalbarheten.

Dessutom använde gnutella ett antal andra tekniker för att minska trafikomkostnader och göra sökningar mer effektiva. Mest anmärkningsvärda är Query Routing Protocol (QRP) och Dynamic Querying (DQ). Med QRP når en sökning bara de klienter som sannolikt kommer att ha filerna, så sökningar efter sällsynta filer blir mycket mer effektiva. Med DQ stoppas sökningen så snart programmet har fått tillräckligt med sökresultat. Detta minskar avsevärt mängden trafik som orsakas av populära sökningar.

En av fördelarna med att ha Gnutella så decentraliserad är att göra det mycket svårt att stänga av nätverket och göra det till ett nätverk där användarna är de enda som kan bestämma vilket innehåll som ska vara tillgängligt. Till skillnad från Napster , där hela nätverket förlitade sig på den centrala servern, kan Gnutella inte stängas av genom att stänga av någon nod. Ett decentraliserat nätverk hindrar dåliga aktörer från att ta kontroll över innehållet i nätverket och/eller manipulera data genom att styra den centrala servern.

Protokollets funktioner och tillägg

Gnutella opererade en gång på ett rent översvämningsbaserat protokoll. Det föråldrade nätverksprotokollet Gnutella version 0.4 använder fem olika pakettyper, nämligen:

  • ping: upptäck värdar i nätverket
  • pong: svara på ping
  • fråga: sök efter en fil
  • fråga träff: svara på förfrågan
  • push: nedladdningsbegäran för brandväggade tjänare

Dessa paket underlättar sökningar. Filöverföringar hanteras istället av HTTP .

Utvecklingen av Gnutella -protokollet leds för närvarande av Gnutella Developers Forum (The GDF). Många protokolltillägg har utvecklats och utvecklas av mjukvaruleverantörerna och av de kostnadsfria Gnutella -utvecklarna av GDF. Dessa tillägg inkluderar intelligent sökfrågor, SHA-1- kontrollsummor, överföring av sökfrågor via UDP , förfrågningar via UDP, dynamiska frågor via TCP , filöverföringar via UDP, XML- metadata, källbyte (kallas även nedladdningsnätet ) och parallell nedladdning i skivor ( svärmning).

Det finns ansträngningar att slutföra dessa protokolltillägg i Gnutella 0.6 -specifikationen, på utvecklingswebbplatsen för Gnutella -protokollet. Gnutella 0.4 -standarden är föråldrad men den förblir den senaste protokollspecifikationen eftersom alla tillägg hittills finns som förslag. Det är faktiskt svårt eller omöjligt att ansluta idag med 0,4 handskakningar. Enligt utvecklare i GDF är version 0.6 vad nya utvecklare bör fortsätta med specifikationerna för pågående arbete .

Gnutella -protokollet förblir under utveckling. Trots försök att göra ett rent avbrott med den komplexitet som ärvdes från den gamla Gnutella 0.4 och att designa en ren ny meddelandearkitektur, är det fortfarande ett av de mest framgångsrika fildelningsprotokollen hittills.

programvara

Följande tabeller jämför allmän och teknisk information för ett antal applikationer som stöder Gnutella -nätverket. Tabellerna behöver inte försöka ge en fullständig lista över Gnutella klienter . Tabellerna är begränsade till klienter som kan delta i det nuvarande Gnutella -nätverket.

Allmänna specifikationer

namn Plattform Licens Projektet aktivt?
(avbryts annars)
Senaste släppningen Arv
Förvärv Mac OS Proprietär Nej 2.2 (v223) (19 november 2010 ; för 10 år sedan ) [±] ( 2010-11-19 ) LimeWire
BearFlix Windows Proprietär Nej 5.2.6.0 BearShare
BearShare Windows Proprietär Nej 10.0.0.131462 (29 januari 2013 ; för 8 år sedan ) [±] ( 2013-01-29 ) Originalverk
Cabos Java GNU GPL Nej 0.8.2 (9 februari 2010 ; för 11 år sedan ) [±] ( 2010-02-09 ) LimeWire
CitrixWire Windows Proprietär Nej 2014 Addax
CocoGnut RISC OS Proprietär Nej 1.21 (2005-06-21) Originalverk
FilesWire (P2P) Java Proprietär Nej Beta 1.1 (2007) Originalverk
giFT (Gnutella plug-in) Plattformsoberoende GNU GPL Nej 0.0.11 (2006-08-06) Originalverk
Gnucleus - GnucDNA Windows GNU GPL, LGPL Nej 2.2.0.0 (17 juni 2005 ; för 16 år sedan ) [±] ( 2005-06-17 ) Originalverk
gtk-gnutella Plattformsoberoende GNU GPL Ja 1.2.0 (9 juli 2020 ; för 15 månader sedan ) [±] ( 2020-07-09 ) Originalverk
KCeasy Windows GNU GPL Nej 0,19-rc1 (3 februari 2008 ; för 13 år sedan ) [±] ( 2008-02-03 ) gåva
Kiwi Alpha Windows GNU GPL Nej 2.2.0.0 (17 juni 2005 ; för 16 år sedan ) [±] ( 2005-06-17 ) GnucDNA
LimeWire Java GNU GPL Nej 5.5.16 (30 september 2010 ; för 11 år sedan ) [±] ( 2010-09-30 ) Originalverk
Morfeus Windows Proprietär Nej 5.55.1 (15 november 2007 ; för 13 år sedan ) [±] ( 2007-11-15 ) GnucDNA
Phex Java GNU GPL Nej 3.4.2.116 (1 februari 2009 ; för 12 år sedan ) [±] ( 2009-02-01 ) Originalverk
Förgiftad Mac OS GNU GPL Nej 0.5191 (8 augusti 2006 ; för 15 år sedan ) [±] ( 2006-08-08 ) gåva
Shareaza Windows GNU GPL Ja 2.7.10.2 (18 september 2017 ; för 4 år sedan ) [±] ( 2017-09-18 ) Originalverk
Symella Symbian GNU GPL Nej Originalverk
WireShare (aka LimeWire Pirate Edition ) Java GNU GPL Ja 6.0.1 (2020-08-29) LimeWire
Zultrax Windows Proprietär Nej 4,33 (april 2009) Originalverk

  Avvecklat projekt

Gnutella funktioner

Klient Hash -sökning Chatt kompislista Hanterar stora filer (> 4 GB ) Unicode-kompatibel sökfrågor UPnP -portmappning NAT -transversal NAT -portmappning RUD TCP push -proxy UDP push -proxy Ultrapeer GWebCache UDP -värdcache THEX TLS Övrig
BearShare Ja Ja Ja Nej Nej Ja Ja Ja Ja Ja Nej Ja Ja Nej Ja Nej -
giFT (core & plug-ins) Ja Ej tillgängligt Ej tillgängligt Nej Nej Nej Nej Nej Nej Ja Nej Nej Ja Nej Nej Nej -
GnucDNA Ja Ej tillgängligt Ej tillgängligt Nej Nej Nej Nej Nej Nej Ja Nej Nej Ja Nej Nej Nej -
gtk-gnutella Ja Nej Nej Ja Ja Ja Ja Ja Ja Ja Ja Ja Nej (tappat) Ja Ja Ja IPv6 , DHT , GUESS, G2
LimeWire Ja Ja GMail eller XMPP Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja DHT
WireShare Ja Ja GMail eller XMPP Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja DHT
Phex Ja Ja Nej Ja Ja Nej Ja Nej Nej Ja Nej Ja Ja Ja Ja Ja I2P
Shareaza Ja Ja Nej Ja Nej Ja Ja Ja Nej Ja Ja Ja Ja Ja Ja Nej G2 , BT , eD2k , IRC

Anteckningar

  • Morpheus skiljer sig markant och kan ha helt oberoende kod från GnucDNA -motorn. Morpheus kan fungera som en modern ultrapeer medan andra GnucDNA -klienter inte kan.
  • Gnucleus och Kiwi Alpha använder GnucDNA -motorn.
  • BearFlix , en funktionellt begränsad version av BearShare 5.2 -serien, kan bara söka efter bilder eller videor och delade videor är begränsade till en relativt kort längd.
  • giFTcurs , Apollon , FilePipe , giFToxic , giFTui, giFTwin32 , KCeasy , Poisoned och Xfactor är GUI-frontändar för giFT- motorn.
  • etomi använder en föråldrad Shareaza -nätverkskod.
  • MP3 Rocket, 360Share, LemonWire, MP3Torpedo och DexterWire är varianter av LimeWire .
  • FrostWire (upp till version 4.21.8) är nästan identisk med LimeWire 4.18 men versioner större än 5.00 använder inte längre gnutella.
  • Acquisition och Cabos är anpassade front-endar som täcker LimeWire- motorn.
  • LimeWire Pirate Edition (5.6.2) är en återupplivad version av den outgivna LimeWire 5.6.1 alpha, och har därmed liknande funktioner minus automatiska uppdateringar (med nags) och centraliserade fjärrkontroller för att inaktivera kärnfunktioner som sökningar och nedladdningar har tagits bort.

Gnutella2

Gnutella2 -protokollet (ofta kallat G2), trots sitt namn, är inte ett efterföljande protokoll för Gnutella eller relaterat till det ursprungliga Gnutella -projektet, utan är snarare ett helt annat protokoll som gafflade från det ursprungliga projektet och piggybackade på Gnutella -namnet. En öm punkt med många Gnutella -utvecklare är att namnet Gnutella2 förmedlar en uppgradering eller överlägsenhet, vilket ledde till ett flammkrig. Annan kritik omfattade användningen av Gnutella -nätverket för att starta G2 -kamrater och dålig dokumentation av G2 -protokollet. Dessutom kan de mer frekventa sökförsöken av Shareaza -klienten, en av de första G2 -klienterna, i onödan belasta Gnutella -nätverket.

Båda protokollen har genomgått betydande förändringar sedan gaffeln 2002. G2 har fördelar och nackdelar jämfört med Gnutella. En fördel som ofta citeras är att Gnutella2s hybrid -sökning är mer effektiv än den ursprungliga Gnutellas sökningsöversvämning . Gnutella ersatte dock översvämningsfrågor med effektivare sökmetoder, från och med Query Routing 2002. Detta föreslogs 2001 av Limewire -utvecklare. En fördel med Gnutella är dess stora användarbas, som uppgår till miljoner. G2 -nätverket är ungefär en storleksordning mindre. Det är svårt att jämföra protokollen i sin nuvarande form. Valet av klient, i båda nätverken, påverkar förmodligen slutanvändaren lika mycket.

Se även

Referenser

  • Färg, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p91
  • Färg, Mark. McDonald, Rick. Rufi, Antoon W., 'Network Fundamentals', Cisco Networking Academy, Cisco Press, Ch 3. p90

externa länkar