Filesharing

Transcription

Filesharing
Filesharing-Systeme
Napster, Freenet, Gnutella, KaZaA
Seminarvortrag von Stefan Weinbrenner, 747094
Einleitung
Was ist ein P2P-Netzwerk?
Gegenteil: Server-Client
• Server: bieten möglichst dauerhaft verfügbar einen Dienst
(z.B. Bereitstellung von Daten) an
Clients: verbinden sich bei Bedarf nach diesem Dienst mit
den Servern
• Kommunikation: nur „Client zu Server“ oder „Server zu
Client“ (normalerweise)
• Beispiel: WWW, Mail
Nachteile: hohe Anfälligkeit (Single Point of Failure); ungleiche
Netzlast, da Traffic bei Server wesentlich höher
P2P-Netzwerk
• Peers: bieten Dienste an und nehmen welche in Anspruch
(Server und Client in einem)
• Aufgabe: Speicherung und Bereitstellung von großen
Datenmengen, verteilt auf alle Teilnehmer
• Hohe Dynamik:
– häufig wechselnde Peers
– wenig dauerhaft verfügbare Datenquellen
– hohe Heterogenität (Netzanbindung, Latenzzeiten,
Datenbestand, Onlinezeit)
P2P-Netzwerk
• Vorteile:
– Daten liegen meist mehrmals vor
– Verlust eines Peers beeinflusst wegen redundanter
Verbindungen nicht die Integrität des Netzes
– leistungsfähige Serversysteme werden nicht benötigt
– weniger kontrollierbar (Nachteil?)
Typisierung
• reine P2P-Netze: jeder Peer hat die gleichen Aufgaben
- das "normale" Gnutella
- Freenet
• hybride P2P-Netze: dedizierte Server übernehmen Aufgaben
wie Indizierung
- Napster
- Audiogalaxy
• gemischte P2P-Netze: alle Peers haben zwar grundsätzlich
die gleichen Aufgaben, aber einige (leistungsfähigere)
übernehmen mehr davon
- KaZaA (Super-Nodes)
- Gnutella (Ultrapeers)
Die Filesharing-Systeme
im Detail
Napster, Freenet, Gnutella, KaZaA
Napster
Geschichte
• Mai 1999: Napster geht online und macht die P2P-Technik
überhaupt populär, erstes großes P2P-Netz.
• Dezember 1999: Napster wird von der amerikanischen
Musikindustrie (RIAA) juristisch angegriffen wegen
Urheberrechtsverletzung.
• März 2001: Napster geht in der ursprünglichen Form offline.
Napster
Typ
• hybrides P2P-Netz, d.h. Client-Server-Prinzip noch erkennbar
• zentraler Servercluster (ca. 160 Server) mit der Aufgabe die
Daten zu indizieren, Metadaten über Peers bereitzustellen
Suchanfrage
Datentransfer
Napster
Suchmethode
1.
Connect mit einem der Server
2.
Suche in den connecteten Peers
3.
Weiterleitung der Suche an die anderen Server
Bei Fund: Direktverbindung zwischen den Peers
Suchanfrage
Datentransfer
Napster
Suchmethode
• Verfügbare Metadaten
• Bandbreite
• Anzahl an shared files
• Anzahl an Up-/Downloads
• Name und Größe der shared files
• IP-Adresse
Suchanfrage
Datentransfer
Napster
Fazit
• war ein sehr großes P2P-Netz, aber inzwischen offline
• Indizierung ermöglicht schnelles Suchen
• zentraler Servercluster bedeutet single point of failure,
angreifbar
Gnutella
Geschichte
• entwickelt von dem WinAmp-Programmierer Justin Frankel
(März 2000)
• wurde nur für "einige Hundert Benutzer" konzipiert
• Gnutella ist freie Software (offenes Protokoll), keine Firma
steht dahinter, kann also nicht wie Napster juristisch verfolgt
werden
• galt daher schon früh als Alternative zu Napster
• „Gnutella“ ist eine Verbindung aus GNU und Nutella, dem
Lieblingsbrotaufstrich von J. Frankel.
Gnutella
Geschichte
• AOL (Nullsoft wurde von AOL übernommen) war gegen ein
Filesharing-Programm aus dem eigenen Hause, versuchte
Verbreitung zu verhindern.
• Die offizielle Seite wurde innerhalb 24 Stunden von AOL
offline genommen.
• Programmierer aus aller Welt versuchten die erste Version
nachzubauen (reverse engineering).
• J. Frankel unterstützte dies, er wollte ursprünglich Gnutella
1.0 als Open Source veröffentlichen.
• Durch beabsichtigte Indiskretion kamen die genauen
Protokollspezifikationen an die Öffentlichkeit.
• Danach wurden viele andere Clients entwickelt: LimeWire,
BearShare, Gnucleus, die späteren Versionen von Morpheus
Gnutella
Typ
• reines P2P-Netz (vollkommen dezentral), da alle Peers
gleiche Funktion haben
• Peers bilden Gruppen durch Ping/Pong-Methode, diese
Gruppen überlappen und Bilden zusammen das GnutellaNetzwerk (overlap network)
• Connect über well-known peers (gnutellahosts.com,
router.limewire.com)
Gnutella
Suchvorgang
• Breitensuche (BFS): Anfragen werden an alle Nachbarn
gebroadcastet, jeder Peer gibt Anfragen mit TTL weiter und
antwortet dem Anfragenden direkt bei Fund
• ineffizientes Suchverfahren, da viel Bandbreite und
Rechenzeit verbraucht, allerdings werden in sehr kurzer Zeit
alle Peers erreicht
Gnutella
Problem: Skalierbarkeit
• BFS produziert sehr viel redundanten Verkehr: sehr
ineffizient
• Jordan Ritter (Mitbegründer von Napster) berechnete den
Zusammenhang zwischen der Zahl der Nodes, der Zahl der
Connections pro Node, der TTL, der Größe eines Paketes und
der Größe des davon erzeugten Traffics.
• Folgerung: BFS erzeugt zu hohe Netzbelastung und bringt
letztlich das Netz zum erliegen. Gerade Peers mit
Schmalbandverbindung sind oft komplett ausgelastet mit der
Beantwortung von Suchanfragen.
• Akut wurde das Problem tatsächlich, als Napster geschlossen
wurde und sehr viele User in kurzer Zeit als Alternative auf
Gnutella wechselten („Napster Flood“).
• Lösung: Erweiterungen
Gnutella
Erweiterungen
• Ultrapeers: Peers mit guter Netzanbindung, die temporär als
Server für 50 Peers dienen Æ Einteilung in Unternetze,
Anfragen werden nicht netzweit, sondern entweder subnetzintern oder zwischen Ultrapeers ausgetauscht (seit LimeWire
2.0)
• Gnutella2-Protokoll (nicht abwärtskompatibel):
• Umstieg von TCP auf UDP
• intelligente Routing Algorithmen
• Checksummen und Download in Slices (wurde mit
Shareaza eingeführt)
Gnutella
Fazit
• nur mittelmäßig großes, komplett dezentrales P2P-Netz
• offenes Protokoll
• ist wegen ineffizienter Breitensuche (BFS) nicht skalierfähig
• durch Erweiterungen upgradebar
KaZaA
Geschichte
• basiert auf dem FastTrack-Protokoll
• wurde von den Schweden Niklas Zennström und Janus Friis
im März 2001 durch ihre niederländische Firma veröffentlicht
• war Anfang 2003 die beliebteste Tauschbörse
• hat mehr User als Napster je hatte
• proprietäres Protokoll (Lizenzgebühren)
• Musikindustrie schleust gewollt gefälschte MP3s ein um
Tausch von copyright-geschütztem Material
entgegenzuwirken (seit Mitte 2002)
KaZaA
3 Versionen des Clients
• KaZaA Media Desktop (KMD): Spyware, d.h. finanziert sich
über integrierte Software, die u.a. Surfgewohnheiten des
User loggen soll
• KaZaA Plus: spyware-frei, allerdings nicht mehr kostenlos
• KaZaA Lite bzw, K++: Third-Party-Produkt, Anpassung vom
KMD, bisherige Versuche K++ zu verbieten waren erfolglos
- enthält keine Spyware
- deaktiviert Suchlimits
- setzt den "participation level" auf Maximum
KaZaA
Typ
• zwischen Napster und Gnutella: gemischtes P2P-Netz, es
gibt sog. Super-Nodes
• basiert wie Grokster, iMesh und Morpheus (die frühen
Versionen) auf dem FastTrack-Protokoll. FastTrack selbst ist
Erweiterung des Gnutella-Protokolls.
• Connect geht über feste (hart codierte) IP-Adressen von
bekannten Supernodes.
Suchanfrage
Datentransfer
KaZaA
Vorteile zu Gnutella
• Supernodes: Index-Server (siehe Napster) für langsamere
Clients Æ Reduktion der Netzbelastung, normale Clients
müssen keine Suchanfragen mehr weiterleiten
• Clients, die über viel Rechen- und Netzkapazitäten verfügen,
werden automatisch zu Supernodes (allerdings auch
deaktivierbar)
• Resume: Abgebrochene Übertragungen können fortgesetzt
werden.
• Gleichzeitiges Downloaden von verschiedenen Peers
• participation level: Je mehr shared files, desto höher der
participation level. Je höher der participation level, desto
größer ist die eigene Priorität in anderer User
Warteschlangen. Problem: K++ missbraucht diese Funktion.
KaZaA
Fazit
• baut auf Gnutella auf, ist aber größer (mehr Peers)
• Skalierbarkeitsproblem durch Superpeers behoben (daher
gemischtes P2P)
• proprietäres Protokoll, Hersteller von Clients müssen
Lizenzgebühren bezahlen
• Resume und Swarming erhöhen Datenaustauschraten
Freenet
Geschichte
• entstanden im Juli 1999 aus einer Arbeit des damaligen
Studenten Ian Clarke aus Edinburgh, Schottlang
• Ziele: Anonymität, „Unzensierbarkeit“
• Hintergrund: Antwort auf die vermehrten Versuche das
Internet zu zensieren, den Zugang zu bestimmten Daten zu
kontrollieren oder die Autoren bestimmter Inhalte zu
verfolgen
• vollständig in Java geschrieben
Freenet
Beschreibung
• reines P2P-Netz (vollkommen dezentral), da alle Peers
gleiche Funktion haben
• Daten werden nicht auf dem lokalen Peer, sondern mehrfach
auf anderen Peers gespeichert: Halter der Daten ist nicht der
Bereitsteller! (Anonymisierung und Erhöhung der
Verfügbarkeit)
• Dateien haben eindeutig bestimmte IDs, die sog. Content
Hash Keys (CHKs, normales SHA-1).
• Datenaustausch findet anonym statt: über eine Reihe von
Knoten, jede Peer-to-Peer-Connection ist verschlüsselt, an
keinem Zwischenpunkt sind die Endpunkte bekannt
Freenet
Suchvorgang
• Tiefensuche (DFS): Anfragen werden an jeweils einen
Nachbarn geschickt.
• Routing Tables: Knoten merken sich, wo welche CHKs liegen
und fragen später auch bei ähnlichen (!) CHKs dort nach.
Ergebnis: Knoten spezialisieren sich auf bestimmte CHKBereiche.
• sparsames, aber langsames Suchverfahren, da kaum
Bandbreite und Rechenzeit verbraucht wird, allerdings ist die
Zeit um alle Peers zu erreichen sehr hoch
Data request
Data reply
Request failed
Freenet
Einfügevorgang
• Daten werden dort eingefügt, wo Queries auch enden würde
• dem eigenen Knoten wird INSERT-Message mit TTL
übergeben, INSERT wird wie QUERY behandelt
• ist TTL = 0 gibt der Knoten ein OK-Signal zurück, Daten
werden über diese Route hochgeladen
• Knoten auf Route passen ihre Routingtables an.
• Während der Übertragungen: Daten werden manchmal
gecached, Rückweg wird manchmal verschleiert (ein Knoten
gibt sich selbst als Sender aus und speichert intern den
echten Sender)
Freenet
Fazit
• recht kleines, vollkommen dezentrales P2P-Netz
• Daten werden nicht auf dem bereitstellenden System,
sondern im Netz verteilt gespeichert.
• Datenbereitsteller und Datenhalter sind anonym und können
nicht ermittelt werden.
• stark eingeschränkte Suchmöglichkeiten
• Zur Suche wird nur ein benachbarter Knoten gefragt
(Tiefensuche, DFS).
Tabellarischer Überblick
Struktur
Suchmethode
Stärken
Schwächen
Größe in
Peers (ca.)
Napster
hybrid
Indexserver
schnelle Suche
(Indexserver)
zentral
(SPOF)
13.600.000
(im Feb ‘01)
Gnutella
rein
BFS
dezentral,
erweiterbar
Skalierbarkeit
20K - 40K
KaZaA
(Fasttrack)
gemischt
mod. BFS
dezentral,
skaliert,
Resume,
Swarming
nur 100
Suchtreffer,
Spyware
3M - 5M
Freenet
rein
DFS
Anonymität,
verteilte
Speicherung
schlechte
Suchmöglichkeit
mehrere
Tausend (??)