Gnutella 0.4: Difference between revisions
Theodorescu (talk | contribs) No edit summary |
Theodorescu (talk | contribs) No edit summary |
||
Line 21: | Line 21: | ||
<table border="1"> |
<table border="1"> |
||
<tr><td>Bytes</td><td>Segment</td><td>Beschreibung</td></tr> |
<tr><td>Bytes</td><td>Segment</td><td>Beschreibung</td></tr> |
||
<tr><td>16</td><td>GUID</td><td>Eindeutige ID des Peers auch Globally Unique ID</td></tr> |
<tr><td align=right>16</td><td>GUID</td><td>Eindeutige ID des Peers auch Globally Unique ID</td></tr> |
||
<tr><td align=right>1</td><td>Payload</td><td>Paketart: Ping, Pong, Query, Query-Hit oder Push</td></tr> |
<tr><td align=right>1</td><td>Payload</td><td>Paketart: Ping, Pong, Query, Query-Hit oder Push</td></tr> |
||
<tr><td>1</td><td>TTL</td><td>Time To Live, Anzahl der Weiterleitungen</td></tr> |
<tr><td align=right>1</td><td>TTL</td><td>Time To Live, Anzahl der Weiterleitungen</td></tr> |
||
<tr><td>1</td><td>Hops</td><td>Anzahl bereits erfolgter Weiterleitungen</td></tr> |
<tr><td align=right>1</td><td>Hops</td><td>Anzahl bereits erfolgter Weiterleitungen</td></tr> |
||
<tr><td>3</td><td>Payload Length</td><td>Gesamtlänge des Pakets inkl. Body</td></tr> |
<tr><td align=right>3</td><td>Payload Length</td><td>Gesamtlänge des Pakets inkl. Body</td></tr> |
||
</table> |
</table> |
||
Revision as of 15:54, 4 February 2006
Allgemein
Das Gnutella Protokoll basiert auf TCP/IP Struktur, dabei ist es aber kein Übertragungsprotokoll.
Es ist eine Art Nachrichtensystem mit 5 Nachrichtentypen.
Dabei agiert Gnutella komplett dezentral, ist also ein echtes Peer-2-Peer System. Die einzelnen Clients sind gleichzeitig auch Server, daher werden sie meist als Servents, oder einfach nur Peers, bezeichnet.
Die Verbindung zum Gnutella-Netzwerk wird über Bootstrapping hergestellt.
Bootstrapping
Da Gnutella ein dezentrales Netzwerk ist, braucht man für den ersten Kontakt mindestens eine IP eines Rechners, dabei sollte dieser bereits mit dem Netzwerk verbunden sein. Ursprünglich war der Gnutella-Webserver dieser erste Kontakt. Später wurden dann Listen von IPs veröffentlicht. Wenn man bereits einmal Kontakt hatte, kann man beim zweiten Mal die bereits gesammelten Kontakte durchprobieren um sich mit dem Netzwerk zu verbinden.
Eingliederung in das Netzwerk
Wenn die Verbindung zum Netzwerk steht, macht sich ein Peer bei seinen Nachbarn mittels Ping-Paketen bekannt. Diese werden per Broadcast über alle Verbindungen geschickt und werden durch Pong-Pakete beantwortet. Was diese Pakete genau beinhalten wird weiter unten erklärt.
Message-Pakete
Allgemeiner Paket-Aufbau
Die Gnutella-Pakete bestehen aus Header (22 Byte) und einem optinalen Body.
Der Header sieht wie folgt aus:
Bytes | Segment | Beschreibung |
16 | GUID | Eindeutige ID des Peers auch Globally Unique ID |
1 | Payload | Paketart: Ping, Pong, Query, Query-Hit oder Push |
1 | TTL | Time To Live, Anzahl der Weiterleitungen |
1 | Hops | Anzahl bereits erfolgter Weiterleitungen |
3 | Payload Length | Gesamtlänge des Pakets inkl. Body |