Gnutella er et datanett for deling av filer. Det spesifiserer en protokoll som prosesser må benytte for å utveksle filer og informasjon om disse filene. Arbeidet organiseres som et Peer-to-peer datanett, der ansvaret for lagring og indeksering tillegges de enkelte brukere som til enhver tid er tilkoblet. Man har ingen sentral server som kan kontaktes til disse formål. En bruker må påregne å være både server (tilbyder av filer) og klient (en som etterspør filer); og kalles derfor en servent.

Begrepet Gnutella rediger

Det viktigste i Gnutella er den underliggende protokoll som spesifiserer hvordan utveksling skal foregå. De maskiner som forstår denne protokollen kan være med i et Gnutellanett og representere brukerens interesser for søking og utveksling av filer. En rekke ulike programvarer har vært utviklet siden 2000, med det mål å tilby dette. Det første var utviklet av oppfinnerne, Justin Frankel og Tom Pepper i firmaet Nullsoft, og utgitt som åpen kildekode under lisensen GPL (2000). Firmaet måtte stoppe distribusjonen, etter pålegg fra sine eiere, men protokollen var allerede offentliggjort, og flere etterligninger ble snart utgitt, hver med en del felles funksjoner, og enkelte spesialiteter; dog må alle ha den essensielle Gnutellaprotokollen implementert for å kunne samsnakke via Gnutellanettet. Navnet Gnutella er inspirert av lisenspolitikken i GNU, samt hasselnøttpålegget «Nutella».

Søking etter filer rediger

En Gnutellabruker kjører en Gnutellaklient (A), som først må lokalisere en nabo (B). Her må A kontakte en sentral server som kan anbefale en aktiv bruker som er rimelig nær A. Sålenge A kjenner til minst en nabo, kan den arbeide mot Gnutellanettet. Serveren vil ofte gi node A en liste over naboer, slik at A får et nabolag. Klienten hos node A lar brukeren oppgi et søkeuttrykk, og sender en QUERY til As naboer. Enhver som mottar en QUERY og har filer som passer med spørsmålet, vil svare med et QUERY HIT direkte til den som spør (i eksempelet, er dette A). Samtidig videresender de QUERY videre til sine naboer. Et QUERY vil således gå et visst antall hopp før det dør ut, basert på en grense som node A har satt. Noder som tidligere mottok et gitt QUERY vil også la være å videresende meldingen. Denne form for videresending kalles flooding, og oppfattes som en lite ressursvennlig måte, men den vil også medføre at alle til slutt vil motta et gitt QUERY.

Treffvurdering og kopiering rediger

Svarene vil samtidig komme inn til node A, i form av direktesendte QUERY HIT fra diverse innehavere av treffende filer. Disse svarene angir data om selve filen (navn, lengde), men også hvordan filen eventuelt kan overføres (eksempelvis HTTP og FTP), og hva slags kvalitet som er forbundet med å kopiere fra det sted denne filen faktisk ligger lagret. Brukeren hos A vil få disse vist som en liste, ofte rangert ut fra tittel, antall likelydende treffsteder, ytelsesmessige kvaliteter og annet. Assosiert med hvert treff, er en direktelink til den noden som rapporterte treffet. Det er nå opptil brukeren å velge ett av disse treffene, hvorpå klienten i node A kontakter den utvalgte maskinen for å få kopiert filen. Hvis filen befinner seg på flere steder, kan den overføres i parallell, hvilket påskynder kopieringen. Klienten hos node A vil da sørge for å si hvilke biter den vil ha overført fra hver enkelt server.

Naboer og nærhetsberegning rediger

Brukeren er avhengig av at klienten klarer å lokalisere den initielle nabo. Her finnes flere teknikker. Det vanligste er å kontakte en forprogrammert server. Hvis denne feiler kan man gjenbruke de naboer man eventuelt hadde kontakt med sist man var aktiv i Gnutellanettet. Et tredje alternativ er å søke lokalt og avvente svar. Noden sender da en PING som eventuelt besvares med en PONG. I og med at brukerne «kommer og går» vil enkelte naboer bli borte, mens andre etterhvert tilkommer. Ett velkjent problem i Gnutella, er at den reelle avstand mellom naboer kan bli stor; forslaget fra den sentrale server kan gjøre at en bruker i Larvik får en bruker i Tokyo utpekt som nabo. Dette vil forsinke søkearbeidet, som jo går mellom nabopar.

Pålitelighet og sikkerhet rediger

Den store fordelen med Gnutella, er at den oppfattes som skalerbar. Den tid det tar å søke og kopiere filer vil i et skalerbart system, ikke være avhengig av hvor mange som er tilkoblet. I sentraliserte nett som Napster er vil den sentrale indeksserveren (og innfartsveiene dit) være flaskehalser, der svartidene går opp etterhvert som brukermassen vokser. Den distribuerte intelligens krever dog, at hver enkelt må få innsikt i informasjon om maskiner og nettverk, som kan utnyttes til å angripe. Dette unngår man tildels i sentraliserte system. Samtidig innser man at Gnutella søker med flooding: Alle som er aktive, vil tilslutt høre alle spørsmål, hvilket til slutt vil bli en uoverkommelig belastning. I så fall kan ikke Gnutella anses for å være skalerbar. Mekanismen kan også brukes for å iverksette angrep av typen Denial of Service. Alle meldinger som sendes i Gnutellanettet underlegges hoppkontroll, og vil slettes etter å ha blitt videresendt et visst antall ganger. Dette forhindrer imidlertid ikke at nye meldinger kan sendes inn med stor hyppighet. Videre er nettet underlagt løkkekontroll, slik at meldinger som har ankommet tidligere, ikke blir videresendt. Begge er nødvendige tiltak for å unngå kollaps, men gir ingen garanti mot kollaps.

Kvalitet og utbredelse rediger

Gnutella har ingen sentral kontroll på hverken innhold eller informasjon om filer som spres. Brukere må foreta de samme sikkerhetstiltak som de eventuelt måtte ha iverksatt for bruk av web og elektronisk post. Her blir Gnutella noe forskjellig fra Napster som var et kommersielt orientert datanett for fildeling, og derfor avhengig av en viss kvalitetskontroll for å unngå visse juridiske problem. Samtidig avgikk Napster på grunn av behovet for sentralt lagret oversikt over tilgjengelige filer. I Gnutella er oversiktene spredt til hver enkelt node, og utveksles bare i form av svar på spørsmål. Dette har gjort at Gnutella hittil, tross press fra musikkindustrien, har unngått å bli erklært som juridisk ulovlig.