Ping Pong Schema: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
 
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
Da die alte Ping/Pong Methode mindestens 50% der gesamten Bandbreite des Gnet benötigte und außerdem viele IP-Adressen aus den Pong-Nachrichten nicht erreichbar waren oder keine eingehenden Verbindungen akzeptierten war es schwierig für neue Servents Verbindungen zum GNET aufzubauen. <br>
Probleme:

alte Ping/Pong Methode benötigt mindestens 50% der gesamten Bandbreite des GNET
Daher wurde bei der neuen Version von Gnutella (v0.6) das Ping Pong Schema implementiert. Die Idee hinter dem Schema ist, Pongs zu cachen und nur die besten Pongs zu senden. Dadurch wird ein wesentlich kleinerer Anteil an Bandbreite genutzt. <br>
viele IP-Adressen aus den Pong-Nachrichten:
Trotzdem wird die Kompatiblität zu alten Clients bewahrt. <br>
sind nicht erreichbar
<br>
akzeptieren keine eingehenden Verbindungen
Die Ziele des Schemas sind:
 schwierig Verbindungen im GNET aufzubauen
*Effizienz: Bandbreite für Pings und Pongs auf ca. 100 Byte/Sec/Verbindung begrenzen
Idee:
*Qualität: wenn User A Pong von User B empfängt, hat B eingehende Verbindungen in den letzten 15 Sekunden akzeptiert
Pongs cachen und nur die besten Pongs senden
*Fairness: wenn User Ping sendet, wird Pong garantiert<br>
wesentlich kleineren Anteil der Bandbreite nutzen
<br>
trotzdem kompatibel zu alten Clients bleiben
Das Ping Pong Schema besteht aus drei Teilen:<br>
Ziele:
<br>
Effizienz: Bandbreite für Pings und Pongs auf ca. 100 Byte/Sec/Verbindung begrenzen
==Pong Begrenzung==
Qualität: wenn User A Pong von User B empfängt, hat B eingehende Verbindungen in den letzten 15 Sekunden akzeptiert
Pong sollte nur gesendet werden (1):
Fairness: wenn User Ping sendet, wird Pong garantiert
*wenn Servent nicht hinter Firewall
Ping Pong Schema besteht aus drei Teilen:
*eingehende Verbindungen akzeptiert werden
Pong Begrenzung:
Nur begrenzte Anzahl an Pongs weiterleiten:
Pong nur senden (*):
*wenn (1) beachtet wird, reichen 10 Pongs; aber welche?
wenn Servent nicht hinter Firewall
*Bei Pongs mit niedrigem Hopcount ist es wahrscheinlicher, dass die Servents noch mit dem Gnet verbunden sind; aber ein hoher Hopcount ist nützlicher um den Horizont zu erweitern.
eingehende Verbindungen akzeptiert
*Lösung: erster Pong mit Hopcount 1, ..., letzter Pong mit Hopcount 10
nur begrenzte Anzahl an Pongs weiterleiten
<br>
wenn (*) beachtet wird, reichen 10 Pongs, aber welche?
Pong Begrenzung:
==Pong Caching==
Durch die Pong Begrenzung wird noch nicht das Problem von zuviel gesendeten Pings gelöst. Zwei aufeinander folgende Pings werden einen sehr ähnlichen Effekt im Gnet auslösen, was das Broadcasten der Pings und das Empfangen der Pongs betrifft.
bei Pongs mit niedrigem Hopcount, wahrscheinlicher daß Servents noch im GNET sind
Daher:
hohem Hopcount ist nützlicher um Horizont zu erweitern
*cachen der neusten Pongs und dadurch Vermeidung des Broadcastings von Pings
erster Pong mit Hopcount 1, ..., letzter Pong mit Hopcount 10
*Pong-Cache alle 3 Sekunden aktualisieren (mit TTL von 5-7)
Pong Caching:
Ensteht dadurch nicht noch mehr Netzwerkverkehr?
Pong Begrenzung löst noch nicht Problem von zuviel gesendeten Pings
Nein. Ergebnisse von Analysen zu dieser Implementation ergaben, dass die Pings zur Aktualisierung von Pong-Caches meistens mit Pongs aus Pong-Caches beantworten werden!
zwei aufeinander folgende Pings werden gleichen Effekt ausnutzen
<br>
cachen der neusten Pongs Vermeidung des Broadcastings von Pings
==Ping Multiplexing==
Pong-Cache alle 3 Sekunden aktualisieren (mit TTL von 5-7)
Wenn mehrere Pings schnell hintereinander ankommen und noch kein Pong-Cache vorhanden ist, werden die Pings bisher trotzdem per Broadcast weitergeleitet und erzeugen dadurch unnötigen Traffic im Gnet. Dies kann vermieden werden, wenn Multiplexing verwendet wird:
ensteht dadurch nicht noch mehr Netzwerkverkehr?
*Pings nicht sofort beanworten
nein; Ergebnis von Analysen: Pings zum aktualisieren von Pong-Caches werden meistens mit Pongs aus Pong-Caches beantworten
*mehrere Pings zu einem zusammenfassen
Ping Multiplexing:
*beim Senden der Pongs drauf achten, dass auf alle Pings geantwortet wird (vorher GUID speichern)
wenn mehrere Pings schnell hintereinander ankommen und noch kein Pong-Cache vorhanden:
<br>
Broadcast der Pings
Um die Kompatibilität zu alten Clients zu bewahren wird die Anzahl der eingehenden Pings begrenzt:
Vermeidung durch Multiplexing:
*wird bestimmte Rate überschritten, Ping verwerfen
Pings nicht sofort beanworten
*Rate durch Ankunftszeit des letzten Pings bestimmen
mehrere Pings zu einem zusammenfassen
Alte Clients (Identifizierung über Connect 0.4) sollten nur ein Ping alle 30 Sekunden erhalten, um kein Broadcast im Gnet auszulösen.
beim Senden der Pongs drauf achten, dass auf alle Pings geantwortet wird (vorher GUID speichern)
Beachten von alten Clients:
Pongs von alten Clients sollten in seperatem Cache behandelt werden:
*nur im Notfall verwenden
Begrenzung der eingehenden Pings
*enthalten auch Pongs, mit denen keine Verbindung aufgebaut werden kann!
wird bestimmte Rate überschritten, Ping verwerfen
<br>
Rate durch Ankunftszeit des letzten Pings bestimmen
<br>
alte Clients (Identifizierung über Connect 0.4) sollten nur ein Ping alle 30 Sekunden erhalten, um kein Broadcast auszulösen
[[Gnutella|zurück zum Index]]
Pongs von alten Clients sollten in seperatem Cache behandelt werden
nur im Notfall verwenden
enthalten auch Pongs, mit denen keine Verbindung aufgebaut werden kann

Latest revision as of 14:25, 5 February 2006

Da die alte Ping/Pong Methode mindestens 50% der gesamten Bandbreite des Gnet benötigte und außerdem viele IP-Adressen aus den Pong-Nachrichten nicht erreichbar waren oder keine eingehenden Verbindungen akzeptierten war es schwierig für neue Servents Verbindungen zum GNET aufzubauen.

Daher wurde bei der neuen Version von Gnutella (v0.6) das Ping Pong Schema implementiert. Die Idee hinter dem Schema ist, Pongs zu cachen und nur die besten Pongs zu senden. Dadurch wird ein wesentlich kleinerer Anteil an Bandbreite genutzt.
Trotzdem wird die Kompatiblität zu alten Clients bewahrt.

Die Ziele des Schemas sind:

  • Effizienz: Bandbreite für Pings und Pongs auf ca. 100 Byte/Sec/Verbindung begrenzen
  • Qualität: wenn User A Pong von User B empfängt, hat B eingehende Verbindungen in den letzten 15 Sekunden akzeptiert
  • Fairness: wenn User Ping sendet, wird Pong garantiert


Das Ping Pong Schema besteht aus drei Teilen:

Pong Begrenzung

Pong sollte nur gesendet werden (1):

  • wenn Servent nicht hinter Firewall
  • eingehende Verbindungen akzeptiert werden

Nur begrenzte Anzahl an Pongs weiterleiten:

  • wenn (1) beachtet wird, reichen 10 Pongs; aber welche?
  • Bei Pongs mit niedrigem Hopcount ist es wahrscheinlicher, dass die Servents noch mit dem Gnet verbunden sind; aber ein hoher Hopcount ist nützlicher um den Horizont zu erweitern.
  • Lösung: erster Pong mit Hopcount 1, ..., letzter Pong mit Hopcount 10


Pong Caching

Durch die Pong Begrenzung wird noch nicht das Problem von zuviel gesendeten Pings gelöst. Zwei aufeinander folgende Pings werden einen sehr ähnlichen Effekt im Gnet auslösen, was das Broadcasten der Pings und das Empfangen der Pongs betrifft. Daher:

  • cachen der neusten Pongs und dadurch Vermeidung des Broadcastings von Pings
  • Pong-Cache alle 3 Sekunden aktualisieren (mit TTL von 5-7)

Ensteht dadurch nicht noch mehr Netzwerkverkehr? Nein. Ergebnisse von Analysen zu dieser Implementation ergaben, dass die Pings zur Aktualisierung von Pong-Caches meistens mit Pongs aus Pong-Caches beantworten werden!

Ping Multiplexing

Wenn mehrere Pings schnell hintereinander ankommen und noch kein Pong-Cache vorhanden ist, werden die Pings bisher trotzdem per Broadcast weitergeleitet und erzeugen dadurch unnötigen Traffic im Gnet. Dies kann vermieden werden, wenn Multiplexing verwendet wird:

  • Pings nicht sofort beanworten
  • mehrere Pings zu einem zusammenfassen
  • beim Senden der Pongs drauf achten, dass auf alle Pings geantwortet wird (vorher GUID speichern)


Um die Kompatibilität zu alten Clients zu bewahren wird die Anzahl der eingehenden Pings begrenzt:

  • wird bestimmte Rate überschritten, Ping verwerfen
  • Rate durch Ankunftszeit des letzten Pings bestimmen

Alte Clients (Identifizierung über Connect 0.4) sollten nur ein Ping alle 30 Sekunden erhalten, um kein Broadcast im Gnet auszulösen. Pongs von alten Clients sollten in seperatem Cache behandelt werden:

  • nur im Notfall verwenden
  • enthalten auch Pongs, mit denen keine Verbindung aufgebaut werden kann!



zurück zum Index