Query Routing Protocol: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
 
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
Um den auch hohen Anteil am Traffic vom Gnet durch das Broadcasten von Querys zu verhindern, wurde bei der neuen Version (v0.6) das Query Routing Protocol implementiert.<br>
Um den auch hohen Anteil am Traffic vom Gnet durch das Broadcasten von Querys zu verhindern, wurde bei der neuen Version (v0.6) das Query Routing Protocol implementiert.<br>
Die Idee hinter QRP ist Routing Routing Tabellen für Querys zu benutzen. Dazu werden alle Ressourcen (Dateien) eines Servents in Stichworte aufgeteilt. <br>

Bsp.: „goodbook“ ergibt „good“ und „book“
alle Ressourcen (Dateien) werden in Stichworte aufgeteilt
<br>
Bsp.: „goodbook“ ergibt „good“ und „book“
Servents ermitteln die Stichworte aus ihren Dateien und propagieren die Stichworte an ihre Nachbarn. Eine Query-Anfrage wird nur dann weitergeleitet, wenn alle Stichworte bei dem verbundenen Servent existieren. <br>
Idee:
Um eine hohe Netzbelastung durch das Propagieren der Stichworte zu vermeiden wird Hashing benutzt und desweiteren werden die Daten noch zusammengefasst.
Routing Tabellen für Queries benutzen
Bsp.: Hashing: good=2, book=5 -> Zusammenfassen zu einem Array: 001001
Servents propagieren ihre Stichworte an ihre Nachbarn
<br>
Query-Anfrage wird nur weitergeleitet, wenn alle Stichworte bei dem verbundenen Servent existieren
[[Gnutella|zurück zum Index]]
Vermeiden von hoher Netzbelastung durch Hashing und Zusammenfassung
<br>
Bsp.: good=2, book=5 Array: 001001
<br>
QRP:
==QRP==
Aufbau der Routing Tabellen:
Aufbau der Routing Tabellen:
Array von Nummern
*Array von Nummern
Nummern geben minimale Distanz zu Datei an
*Nummern geben minimale Distanz zu Datei an
unendlich, wenn Datei nicht existiert
*unendlich, wenn Datei nicht existiert
<br>
erster Ansatz: Routing Tabellen an jede Verbindung propagieren
Erster Ansatz: Routing Tabellen an jede Verbindung propagieren
braucht aber noch viel Bandbreite
*braucht aber noch viel Bandbreite
Routing Information von Servent X führt noch zu Aktualisierungen im GNET, wenn X schon wieder offline
*Routing Information von Servent X führt noch zu Aktualisierungen im GNET, wenn X schon wieder offline
bessere Implementation:
<br>
nur Leafs senden RTs an Ultrapeer
Bessere Implementation:
Ultrapeers propagieren keine Routing Tabellen
*nur Leafs senden Routing Tabellen an Ultrapeer
keine ständigen Aktualisierungen
*Ultrapeers propagieren keine Routing Tabellen
Komprimierung der RTs (z.B. mit Huffman Kodierung)
*keine ständigen Aktualisierungen
QRP:
*Komprimierung der Routing Tabellen (z.B. mit Huffman Kodierung)
wann finden Updates statt?
<br>
Idealerweise, bei neuen oder beendeten Verbindung, oder bei Änderung der Dateiliste
Wann sollen nun Updates stattfinden?
Verbesserung: RTs nur propagieren, wenn Verbindung mehrere Minuten bestehen bleibt
*Idealerweise, bei neuen oder beendeten Verbindung, oder bei Änderung der Dateiliste
Servents sollten immer nur ein Update in T Minuten verschicken
*Verbesserung: Routing Tabellen nur propagieren, wenn Verbindung mehrere Minuten bestehen bleibt
bei minimalen Veränderungen im Update:
*Servents sollten immer nur ein Update in T Minuten verschicken
Differenz von alter RT und neuer RT bilden
<br>
dadurch viele Nullen, lassen sich gut komprimieren
Bei minimalen Veränderungen im Update:
nur ein neuer Nachrichtentyp muss zum Gnutella Protokoll hinzugefügt werden: ROUTE_TABLE_UPDATE
*Differenz von alter RT und neuer RT bilden
*dadurch viele Nullen, lassen sich gut komprimieren
<br>
Durch die Implementation von QRP muss nur ein neuer Nachrichtentyp dem Gnutella Protokoll hinzugefügt werden: ROUTE_TABLE_UPDATE
<br>
<br>
[[Gnutella|zurück zum Index]]

Latest revision as of 14:52, 5 February 2006

Um den auch hohen Anteil am Traffic vom Gnet durch das Broadcasten von Querys zu verhindern, wurde bei der neuen Version (v0.6) das Query Routing Protocol implementiert.
Die Idee hinter QRP ist Routing Routing Tabellen für Querys zu benutzen. Dazu werden alle Ressourcen (Dateien) eines Servents in Stichworte aufgeteilt.

Bsp.: „goodbook“ ergibt „good“ und „book“


Servents ermitteln die Stichworte aus ihren Dateien und propagieren die Stichworte an ihre Nachbarn. Eine Query-Anfrage wird nur dann weitergeleitet, wenn alle Stichworte bei dem verbundenen Servent existieren.
Um eine hohe Netzbelastung durch das Propagieren der Stichworte zu vermeiden wird Hashing benutzt und desweiteren werden die Daten noch zusammengefasst.

Bsp.: Hashing: good=2, book=5 -> Zusammenfassen zu einem Array: 001001


zurück zum Index

QRP

Aufbau der Routing Tabellen:

  • Array von Nummern
  • Nummern geben minimale Distanz zu Datei an
  • unendlich, wenn Datei nicht existiert


Erster Ansatz: Routing Tabellen an jede Verbindung propagieren

  • braucht aber noch viel Bandbreite
  • Routing Information von Servent X führt noch zu Aktualisierungen im GNET, wenn X schon wieder offline


Bessere Implementation:

  • nur Leafs senden Routing Tabellen an Ultrapeer
  • Ultrapeers propagieren keine Routing Tabellen
  • keine ständigen Aktualisierungen
  • Komprimierung der Routing Tabellen (z.B. mit Huffman Kodierung)


Wann sollen nun Updates stattfinden?

  • Idealerweise, bei neuen oder beendeten Verbindung, oder bei Änderung der Dateiliste
  • Verbesserung: Routing Tabellen nur propagieren, wenn Verbindung mehrere Minuten bestehen bleibt
  • Servents sollten immer nur ein Update in T Minuten verschicken


Bei minimalen Veränderungen im Update:

  • Differenz von alter RT und neuer RT bilden
  • dadurch viele Nullen, lassen sich gut komprimieren


Durch die Implementation von QRP muss nur ein neuer Nachrichtentyp dem Gnutella Protokoll hinzugefügt werden: ROUTE_TABLE_UPDATE

zurück zum Index