Informationen zu verteilten Routingtabellen
Eine verteilte Routingtabelle (Distributed Routing Table, DRT) ist als Gitter kooperierender Knoten vorhanden, wobei jeder Knoten ein instance einer Anwendung ist, die die DRT-API verwendet. Knoten, die Schlüssel veröffentlichen, sind dafür verantwortlich, andere Knoten beim Veröffentlichen und Auflösen von Schlüsseln zu unterstützen. Knoten können auch nur "auflösen" teilnehmen, was nicht erfordert, dass sie Peers unterstützen. Das DRT-Protokoll wird über einen UDP/IPv6-Transport ausgeführt.
Ein Knoten, der einen Schlüssel veröffentlicht, erstellt und verwaltet eine lokale Routingtabelle anderer Knoten im Gitter. Diese Routingtabelle ist optimiert, sodass der Knoten schnell einen bestimmten Schlüssel im Gitter finden kann, indem er den Schlüssel direkt in der lokalen Routingtabelle findet oder andere Knoten fragt, die Schlüssel numerisch nahe am Ziel veröffentlichen. Diese Aktion wird wiederholt, bis der erforderliche Schlüssel gefunden wurde oder der Knoten feststellt, dass kein solcher Schlüssel vorhanden ist.
DRT-Schlüssel sind 256-Bit-Ganzzahlen ohne Vorzeichen. Die Nähe zwischen Schlüsseln wird durch den numerischen Unterschied zwischen ihnen definiert. Der DRT-Schlüsselraum gilt als kreisförmig. Beispielsweise werden der erste mögliche Schlüsselwert und der letzte mögliche Schlüsselwert als Nachbarn betrachtet.
In einer sicheren DRT sind Knoten erforderlich, um die von ihnen veröffentlichten Schlüssel zu authentifizieren. Der Mechanismus, mit dem Knoten authentifizieren Schlüssel mithilfe der DRT-API festgelegt werden müssen, wenn das DRT initialisiert wird. Dazu wählen Sie einen Sicherheitsanbieter für die DRT aus. Ein Sicherheitsanbieter ist ein Modul, das Token erstellen kann, die zum Authentifizieren von Schlüsseln verwendet werden, und Token überprüfen kann, die von anderen Knoten erstellt wurden. Sie muss die Sicherheitsanbieterschnittstelle implementieren, die in dieser Dokumentation definiert ist. Das Windows 7 DRT wird mit zwei vollständig implementierten Sicherheitsanbietern ausgeliefert, die zum Erstellen von Windows-Anwendungen verwendet werden können.
Während der Initialisierung muss eine Anwendung auch das DRT mit einem Bootstrap-Anbieter bereitstellen. Der Bootstrap-Anbieter ist ein Modul, das die Netzwerkendpunkte von Knoten abrufen kann, die bereits im DRT-Gitter vorhanden sind, und wird vom DRT aufgerufen, wenn ein neuer Knoten eingerichtet wird. Wie das Sicherheitsanbietermodul muss auch der Bootstrapanbieter eine klar definierte Schnittstelle implementieren. Das Windows 7 DRT wird mit zwei vollständig implementierten Bootstrap-Anbietern ausgeliefert.
Die DRT betrachtet die unmittelbaren Nachbarn eines Schlüssel-Specials. Die fünf nächstgelegenen Schlüssel sind numerisch kleiner und die fünf nächstgelegenen Schlüssel numerisch größer als ein veröffentlichter Schlüssel, was als Blattmenge bezeichnet wird. Die DRT meldet Änderungen am Blattsatz eines Schlüssels über die DRT-API.
DRT-Lebenszyklus und Zustandsübergänge
Eine Anwendung kann mithilfe der DrtOpen-Funktion eine lokale DRT-instance initialisieren. Diese Funktion löst den Bootstrappingprozess aus, bei dem die DRT-API den Bootstrapanbieter aufruft, um die Schlüssel und Netzwerkendpunkte anderer Knoten zu lernen, die bereits an der DRT beteiligt sind. Wenn der Bootstrapanbieter mindestens einen anderen Knoten erfolgreich findet, wechselt der DRT in den DRT_ACTIVE Zustand. In diesem Zustand kann die Anwendung nach Schlüsseln suchen, die von anderen Knoten veröffentlicht wurden, und Schlüssel veröffentlichen, die aufgelöst werden können. Wenn der Bootstrapanbieter andere Knoten nicht erfolgreich finden kann, wechselt der DRT in den DRT_ALONE Zustand. Der DRT bleibt im DRT_ALONE Zustand und versucht, regelmäßig zu bootstrapieren, um Peers zu finden und in den DRT_ACTIVE Zustand zu wechseln.
Ein Knoten kann von DRT_ACTIVE zu diesen Zuständen wechseln.
Lebenszykluszustand | Bedingungen |
---|---|
DRT_ALONE | Der lokale Knoten hat keine anderen Knoten im DRT ermittelt. In diesem Zustand lauscht der Knoten weiterhin auf andere Knoten innerhalb des DRT. Wenn der DRT von einem anderen Knoten verknüpft wird, wechselt der lokale Knoten in den DRT_ACTIVE Zustand. Wenn das Netzwerk ausfällt, wechselt es zu DRT_NO_NETWORK. Im Falle eines schwerwiegenden Fehlers mit dem DRT wechselt der Knoten in den DRT_FAULTED Zustand. |
DRT_NO_NETWORK | Wenn ein Knoten die Netzwerkkonnektivität verliert, wechselt er in den DRT_NO_NETWORK Zustand. An diesem Punkt kann die Anwendung auf die Wiederherstellung der Netzwerkkonnektivität warten und das DRT schließen. |
DRT_FAULTED | Innerhalb des lokalen Knotens ist ein schwerwiegender Fehler aufgetreten. Beispiel: Auf dem lokalen Computer ist der physische Arbeitsspeicher nicht mehr vorhanden. Während ein Knoten in diesen Zustand wechselt, muss die Anwendung die DrtClose-API aufrufen, das Problem beheben und die DRT mit DrtOpen erneut initialisieren. |