184 lines
9.7 KiB
HTML
184 lines
9.7 KiB
HTML
{% extends "_layout_de.html" %}
|
|
{% block title %}Wie die Auswahl der Knoten und Profiling funktionieren{% endblock %}
|
|
{% block content %}
|
|
<p>Die Webseite wird gerade überholt und dieses Dokument kann alte Informationen enthalten</p>
|
|
<p>die Auswahl der Knoten in I2P ist einfach der Prozess in dem
|
|
der Router aussucht, über welche Knoten des Netzwerkes er unsere Nachrichten
|
|
sendet (welche Knoten um Teilnahme im Tunnel gefragt werden). Um dieses zu schaffen
|
|
beobachten wir, wie performant andere Knoten sind (die Knoten "Profile") und
|
|
benutzen diese Daten um zu schätzen wie schnell die Knoten sind, wie oft diese
|
|
unsere Anfragen akzeptieren können und ob sie Überlastet sind oder
|
|
andersweitig nicht fähig sind, das Versprochene zu leisten.</p>
|
|
<p>
|
|
Beanspruchter Bandbreite wird nicht vertraut und wird <b>einzig und allein</b>
|
|
benutzt um die Knoten zu vermeiden, die zu zu wenig Bandbreite anbieten um Tunnel
|
|
weiterzuleiten.
|
|
Die gesamte Auswahl der Knoten wird mit dem Profiling gemacht. Dieses macht
|
|
<a href="how_threatmodel.html#timing">Timing Attacken</a> noch schwieriger.</p>
|
|
|
|
<h2>Knoten Profile</h2>
|
|
|
|
<p>Jeder Knoten hat ein Set von Daten die von ihm gesammelt werden, inklusive
|
|
Statistiken über die Antwortzeit auf eine Netzwerkdatenbank Anfrage,
|
|
wie oft seine Tunnel nicht funktional sind und wie viele neue Knoten sie uns
|
|
mitteilen können. Auch einfachere Daten sind enthalten, wie etwa der
|
|
Zeitpunkt des letzten Kontaktes oder wann der letzte Fehler in der
|
|
Kommunikation war. Die einzelnen gesammelten Datenpunkte können
|
|
im Monotone abgelesen werden (Link folgt).</p>
|
|
<!-- <a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/PeerProfile.html">code</a>
|
|
</p> --!>
|
|
|
|
<p>Momentan gibt es keine "Löschstrategie, um sich der Profile der Knoten
|
|
zu entledigen, die nicht mehr aktiv sind (oder wenn das Netzwerk aus tausenden
|
|
von Knoten besteht, die gering performanten Knoten zu entfernen). Jedenfalls
|
|
ist die Grösse der Profile recht klein und nicht damit verbunden, wieviele
|
|
Daten von dem Knoten gesammelt werden, so dass ein Router tausende aktive Knoten
|
|
Profile halten kann ohne das der Overhead ein ernstes Problem wird. Sobald es
|
|
notwenig wird, können wir die schlecht performanten Profile kompakter
|
|
machen (indem wir nur die nötigsten Daten behalten) und können so
|
|
hundert tausende Profile im Speicher halten. Darübr hinaus können
|
|
wir einfach Knotenprofile löschen (z.B. nur die besten 100.000 behalten).</p>
|
|
|
|
<p>Die tatsächliche Grösse der Knotenprofile im Speicher sollte
|
|
noch analysiert werden und ungebrauchte Daten sollten enfernt werden.
|
|
Dieses ist ein gutes Thema für weitere Nachforschungen und Optimierungen.</p>
|
|
|
|
|
|
|
|
<h2>Die wichtigen Daten der Knoten</h2>
|
|
|
|
<p>Die Profile können somit als eine Zusammenfassung der Performance
|
|
der Knoten bezeichnet werden, zu einer effektiven Auswahl der Knoten
|
|
fassen wir diese jedoch zu vier einfachen Werten zusammen. Diese stellen
|
|
die Geschwindigkeit des Knoten, seine Kapazität, wie sehr er in das
|
|
Netzwerk integriert ist und ob er nicht funktioniert.</p>
|
|
|
|
<h3>Geschwindigkeit</h3>
|
|
|
|
<p>Die Berechnung der Geschwindigkeit (wie im Quellkode implementiert)
|
|
<!--
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/SpeedCalculator.html">here</a>) --!>
|
|
wird einfach mit den Profilen durchgeführt und schätzt, wie viele
|
|
Daten wir durch einen einzigen Tunnel durch diesen Knoten in einer Minute
|
|
senden oder empfangen können. Dafür werden einfach die Werte der
|
|
Vergangenheit betrachtet.
|
|
</p><p>
|
|
Vorhergehende Algorhythmen brauchten viel länger um mehrere
|
|
aktuellere Daten zu betrachten und daraus die Werte für die Zukunft
|
|
zu schätzen. Ein weitere, ältere Berechnung nahm die gesamte
|
|
Bandbreite des Knoten (statt je Tunnel), jedoch stellten wir fest, das
|
|
diese Methode langsame Knoten mit hoher Kapazität (das sind die mit
|
|
kleiner Bandbreite aber hohe Kapazität in der Anzahl der Tunnel) als
|
|
zu hoch bewertete. Noch früherere Methoden waren noch komplexer.
|
|
</p><p>
|
|
Die derzeitige Berechnung ist seit Anfang 2006 unverändert und ist
|
|
ein weiteres Gebiet zur weiteren Forschung um die Effektivität auf
|
|
dem derzeitigem Netzwerk zu bestätigen.
|
|
</p>
|
|
|
|
<h3>Kapazität/h3>
|
|
|
|
<p>die Berechnung der Kapazität <!--(as implemented
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/CapacityCalculator.html">here</a>) --!>
|
|
bearbeitet die Profile und schätzt wie viele von uns angefragte Tunnel
|
|
der Knoten in der nächsten Stunde akzeptiert. Dafür betrachtet
|
|
die Methode, wieviele Tunnel der Knoten in letzter Zeit akzeptiert hat, wie
|
|
viele er verneint hat und wie viele der akzeotierten Tunnel er abgebrochen
|
|
hat und extrapoliert die gewünschten Daten. Zusäztlich gibt es
|
|
einen `Wachstumsfaktor` (falls der Knoten nicht inaktiv ist oder Anfragen
|
|
zurückweist), damit wir weiterhin versuchen, mehr Tunnel anzufragen.
|
|
</p><p>
|
|
Die Abbruchquote der Tunnel war lange Zeit nicht aktiv in der Berechnung
|
|
der Kapazität, erst mit 0.6.2 wurde sie wieder aktiv gesetzt. Es wurde
|
|
offensichtlich, das unzuverlässige und nicht erreichbare Knoten
|
|
sicher erkannt und vermieden werden müssen für eine konstante
|
|
Nutzung des Netzwerkes.
|
|
Jedoch braucht der Tunneltest die Mitwirkung einiger anderer Knoten, somit
|
|
ist es schwer, die eindeutige Quelle der Fehler zu identifizieren.
|
|
Die letzten Änderungen geben jedem Knoten im Tunnel eine gewisse
|
|
Fehlerwahrscheinlichkeit und benutzen diese auch zur Kapazitätsberechnung,
|
|
Diese letzten Änderungen benötigen ggf, zusätzliche
|
|
Feineinstellungen und sind auch ein Gebiet für weitere Forschungen
|
|
zur Effektivität im aktuellem Netzwerk.
|
|
</p>
|
|
|
|
<h3>Integration</h3>
|
|
|
|
<p>Die Berechnung der Integration
|
|
<!-- (as implemented
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/IntegrationCalculator.html">here</a>) --!>
|
|
ist nur für die Netzwerkdatenbank notwendig (und, falls eingebaut, zum
|
|
Erkennen und reparieren von Netzwerk`splits`). Zur Zeit wird es für nichts
|
|
benutzt, da der Kode zum Erkennen der Splits in gut verbundenen Netzwerken
|
|
nicht nötig ist. Jedenfalls behält die Berechnung der Integration
|
|
die Übersicht, wie oft uns ein Knoten einen uns unbekannten weiteren
|
|
Knoten mitgeteilt hat (oder die Daten für einen uns bekannten Knoten
|
|
aktualisiert hat).</p>
|
|
|
|
<p>
|
|
In kommenden Versionen wird diese Integrationsberechnung benutzt werden, in
|
|
Kombination mit anderen Methoden zur Berechnung der Konnektivität und
|
|
Zuverlässigkeit der anderen Knoten. Daraus wird die Fähigkeit
|
|
des Knoten getestet, ein Floodfillrouter in der <a href="how_networkdatabase.html">Netzwerk Datenbank</a>
|
|
zu sein. Durch diesen Test, ob der Knoten ein sinnvoller Floodfill Router
|
|
ist oder nur so tut als ob, können sinnvolle Entscheidungen getroffen
|
|
werden zur Sendung und Speicherung von Datenbankanfragen an den Knoten.
|
|
Dazu können Knoten mit hoher Kapazität, die noch keine Floodfill
|
|
Router sind, zu Floodfillroutern definiert werden, falls nicht genug
|
|
Floodfillrouter vorhanden sind im Netzwerk. Somit wird eine grosse
|
|
Schwachstelle im derzeitigem Floodfillsystem behoben.
|
|
</p>
|
|
|
|
<h3>Versagen</h3>
|
|
|
|
<p>Die Berechung zum Versagen
|
|
<!-- (as implemented
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/IsFailingCalculator.html">here</a>) --!)
|
|
eines Knoten kontrolliert ein paar Daten aus den Profilen und erkennt, ob
|
|
der Knoten überladen ist oder nicht seine Versprechen zum Tunnelaufbau
|
|
einhalten kann. Sobald ein Knoten als "Versager" gekennzeichnet ist, wird
|
|
er vermieden, wann immer das möglich ist.</p>
|
|
|
|
<h2>Knoten Organization</h2>
|
|
|
|
<p>Wie oben beschrieben, gehen wir durch jedes Knotenprofil um ein paar
|
|
zentrale Berechnungen auszuführen und anhand diesen Ergebnissen
|
|
sortieren wir die Knoten in fünf Gruppen - fast, capable, well
|
|
integrated, not failing und failing. Wenn ein Router einen Tunnel
|
|
aufbauen will, nimmt er einen Knoten aus der "Fast" Gruppe, falls er
|
|
nur einen Testtunnel aufbaut, aus allen Gruppen, bis auf die "failing".
|
|
Innerhalb der Gruppen jedoch sucht der Router sich zufällig einen
|
|
Knoten aus, damit die Last (und das Risiko) ausbalanciert wird. Auch
|
|
verhindern wir damit einige einfache Angriffe.</p>
|
|
|
|
<p>Die Gruppierung ist nich exklusive und die Gruppen sind nicht ohne
|
|
Beziehungen zueinander: <ul>
|
|
<li>Ein Knoten ist active, wenn wir in den letzten Minuten eine Nachricht von ihm
|
|
erhalten oder an ihn gesendet haben</li>
|
|
<li>Ein Knoten ist "High Capacity", wenn seine Kapazitätsberechnung den
|
|
Median aller aktiven Knoten übertrifft.</li>
|
|
<li>Ein Knoten ist "Fast", wenn er "High Capacity" ist und seine Bandbreitenberechnung
|
|
den Median aller "High Capacity" Knoten trifft oder übertrifft.</li>
|
|
<li>Ein Knoten ist "Well integrated", wenn seine Intigritätsberechnung den
|
|
Mittelwert aller aktiven Knoten trifft oder übertrifft.</li>
|
|
<li>Ein Knoten ist "failing", wenn der Test auf Versagen "wahr" ergibt.</li>
|
|
<li>Ein Knoten ist "not failing", wenn er nicht "high capacity" oder "failing" ist.</li>
|
|
</ul>
|
|
|
|
<!--
|
|
These groupings are implemented in the <a
|
|
href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/peermanager/ProfileOrganizer.html">ProfileOrganizer</a>'s
|
|
reorganize() method (using the calculateThresholds() and locked_placeProfile() methods in turn).</p>
|
|
--!>
|
|
|
|
<h2>To Do</h2>
|
|
|
|
<p>Wie obenbeschrieben, ist jede dieser Berechnungen kritisch für die
|
|
Auswahl der Knoten und brauchen eine kritische Überprüfung auf
|
|
ihre Effektivität im heutigem Netzwerk.
|
|
Auch muss die Grösse der Profile im Speicher noch betrachtet werden,
|
|
unnötige Daten entfernt werden und eine Entfernungsstrategie
|
|
eingebaut werden.</p>
|
|
|
|
{% endblock %}
|