# Peer-to-Peer

Peer-to-Peer (kurz meist P2P genannt, von englisch peer „Gleichgestellter“, „Ebenbürtiger“) und Rechner-Rechner-Verbindung sind synonyme Bezeichnungen für eine Kommunikation unter Gleichen, hier bezogen auf ein Rechnernetz. In einigen Kontexten spricht man auch von Querkommunikation.
In einem reinen Peer-to-Peer-Netz sind alle Computer gleichberechtigt und können sowohl Dienste in Anspruch nehmen, als auch zur Verfügung stellen. In modernen P2P-Netzwerken werden die Netzwerkteilnehmer jedoch häufig abhängig von ihrer Qualifikation in verschiedene Gruppen eingeteilt, die spezifische Aufgaben übernehmen. Kernkomponente aller modernen Peer-to-Peer-Architekturen, die meist bereits als Overlay-Netz auf dem Internet realisiert werden, ist daher ein zweites internes Overlay-Netz, welches normalerweise aus den besten Computern des Netzwerks besteht und die Organisation der anderen Computer sowie die Bereitstellung der Such-Funktion übernimmt.
Mit der Suchfunktion („lookup“) können Peers im Netzwerk diejenigen Peers identifizieren, die für eine bestimmte Objektkennung (Object-ID) zuständig sind. In diesem Fall ist die Verantwortlichkeit für jedes einzelne Objekt mindestens einem Peer fest zugeteilt, man spricht daher von strukturierten Overlays. Mittels der Such-Operation können die Peers nach Objekten im Netzwerk suchen, die gewisse Kriterien erfüllen (z. B. Datei- oder Buddynamen-Übereinstimmung). In diesem Fall gibt es für die Objekte im P2P-System keine Zuordnungsstruktur, man spricht also von unstrukturierten Overlays.
Sobald die Peers, die die gesuchten Objekte halten, in dem P2P-System identifiziert wurden, wird die Datei (in Dateitauschbörsen) direkt, d. h. von Peer zu Peer, übertragen. Es existieren unterschiedliche Verteilungsstrategien, welche Teile der Datei von welchem Peer heruntergeladen werden soll, z. B. BitTorrent.
Der Gegensatz zum Peer-to-Peer-Modell ist das Client-Server-Modell. Bei diesem bietet ein Server einen Dienst an und ein Client nutzt diesen Dienst. In Peer-to-Peer-Netzen ist diese Rollenverteilung aufgehoben. Jeder Teilnehmer ist ein peer, denn er kann einen Dienst gleichermaßen nutzen und selbst anbieten.

## Charakterisierung von Peer-to-Peer-Systemen

Typische, aber nicht notwendige Charakteristika von Peer-to-Peer-Systemen sind:
* Peers weisen eine hohe Heterogenität bezüglich der Bandbreite, Rechenkraft, Online-Zeit, … auf.
* Die Verfügbarkeit und Verbindungsqualität der Peers kann nicht vorausgesetzt werden („Churn“).
* Peers bieten Dienste und Ressourcen an und nehmen Dienste anderer Peers in Anspruch (Client-Server-Funktionalität).
* Dienste und Ressourcen können zwischen allen teilnehmenden Peers ausgetauscht werden.
* Peers bilden ein Overlay-Netz und stellen damit zusätzliche Such-Funktionen zur Verfügung.
* Peers haben eine signifikante Autonomie (über die Ressourcenbereitstellung).
* Das P2P-System ist selbstorganisierend.
* Alle übrigen Systeme bleiben konstant intakt und nicht skaliert.
(nach: Steinmetz, Wehrle 2006)

## Typen von Peer-to-Peer-Systemen

P2P-Systeme lassen sich in unstrukturierte und strukturierte P2P-Systeme unterteilen.
Unstrukturierte P2P-Systeme unterteilen sich nochmals nach der Art ihres Aufbaus. Man unterscheidet:
* Zentralisierte P2P-Systeme (Beispiel: Napster), welche einen zentralen Server zur Verwaltung benötigen, um zu funktionieren
* Reine P2P-Systeme ohne zentrale Instanz (Beispiele: RetroShare, Gnutella 0.4, Freenet). Eine spezielle Art eines reinen, dezentralen Netzwerkes bildet das friend-to-friend- oder Web-of-Trust-Netzwerk, bei dem keinerlei Verbindungen zu unbekannten IP-Adressen unterhalten werden, sondern ausschließlich Verbindungen zu Freunden (trusted friends) etabliert werden.
* Hybride bzw. Hierarchische P2P-Systeme, welche dynamisch mehrere zentrale Server („Superknoten“) zur Verwaltung bestimmen (Beispiele: Gnutella 0.6, Gnutella2 (G2), JXTA)
Zentralisierte und reine P2P-Systeme bezeichnet man als Systeme erster Generation, während dezentrale Systeme als Systeme zweiter Generation bezeichnet werden. Systeme, die Dateien über nicht-direkte Verbindungen weiterreichen, sind Systeme dritter Generation. Siehe dazu auch ausführlich den Begriff Filesharing.
Strukturierte P2P-Systeme verwenden oftmals eine Verteilte Hashtabelle (DHT). In strukturierten Systemen können daher Suchen aus einem verteilten Index heraus beantwortet werden.

## Standardisierung und Zukunft

Die Zukunft der Peer-to-Peer-Technik wird vor allem davon abhängen, ob es gelingt, einen Standard zu definieren – eine Art Plattform-Technik, die es ermöglicht, weitere Anwendungen aufzusetzen.
JXTA ist ein solcher Standard, der stark von Sun Microsystems unterstützt wurde und Open Source ist. Sun stellte die zurzeit umfangreichste und stabilste Referenzimplementierung her.
Gnutella ist ein weiterer offener Standard, der umfangreich getestet ist, jedoch bisher fast ausschließlich für Dateiverteilung und dezentrales Suchen von Dateien genutzt wird.
Außerdem ist es denkbar, dass die Netzwerkübertragungsleistung ähnlich der Rechenleistung bei den PCs steigen wird, sodass die Möglichkeit besteht, dass ein Peer noch den „übernächsten“ Peer kennen kann und dass die Sichtweite eines Peer über Datenbestände und andere Peers weiter anwachsen kann.