DE602004005059T2 - Computernetzwerk zum identifizieren mehrerer knoten, mit demselben etikett übereinstimmen - Google Patents

Computernetzwerk zum identifizieren mehrerer knoten, mit demselben etikett übereinstimmen Download PDF

Info

Publication number
DE602004005059T2
DE602004005059T2 DE602004005059T DE602004005059T DE602004005059T2 DE 602004005059 T2 DE602004005059 T2 DE 602004005059T2 DE 602004005059 T DE602004005059 T DE 602004005059T DE 602004005059 T DE602004005059 T DE 602004005059T DE 602004005059 T2 DE602004005059 T2 DE 602004005059T2
Authority
DE
Germany
Prior art keywords
node
address
message
list
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE602004005059T
Other languages
English (en)
Other versions
DE602004005059D1 (de
Inventor
Erwin Rein Bonsma
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
British Telecommunications PLC
Original Assignee
British Telecommunications PLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by British Telecommunications PLC filed Critical British Telecommunications PLC
Publication of DE602004005059D1 publication Critical patent/DE602004005059D1/de
Application granted granted Critical
Publication of DE602004005059T2 publication Critical patent/DE602004005059T2/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0893Assignment of logical groups to network elements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/12Discovery or management of network topologies
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/45Network directories; Name-to-address mapping
    • H04L61/4541Directories for service discovery
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1068Discovery involving direct consultation or announcement among potential requesting and potential source peers

Description

  • Die vorliegende Erfindung bezieht sich auf Computernetze und insbesondere, obwohl nicht ausschließlich, auf das Wiedergewinnen von Informationen im Kontext verteilter Systeme, wie z. B. Peer-zu-Peer-Systeme, insbesondere jener ohne zentralisierte Speicherung oder Steuerung.
  • US 2002/0107982 offenbart ein Verfahren zum Betreiben eines Computernetzes, das Knoten enthält, wobei das Verfahren umfasst: in Reaktion auf die Eingabe eines Etiketts Ausführen einer Wiedergewinnungsoperation, um die Adresse eines Knotens zu infizieren, der mit diesem Etikett übereinstimmt. US 2003/0131044 offenbart ein Verfahren zum Betreiben eines Computernetzes, das Knoten enthält, wobei das Verfahren umfasst: Speichern der Knoteninformationen in einem Cache eines Knotens und Lokalisieren eines Zielknotens im Cache. Diese Systeme sprechen jedoch das Problem des Identifizierens mehrerer Knoten, die mit einem gegebenen Etikett übereinstimmen, nicht an.
  • Gemäß einem Aspekt der Erfindung wird ein Computernetz geschaffen, das Knoten enthält und umfasst:
    • – erste Wiedergewinnungsmittel, die in Reaktion auf die Eingabe eines Etiketts die Adresse eines mit diesem Etikett übereinstimmenden Knotens identifizieren;
    • – zweite Wiedergewinnungsmittel, die so beschaffen sind, dass sie eine durch die ersten Wiedergewinnungsmittel identifizierte Adresse empfangen und in Reaktion darauf so betreibbar sind, dass sie die Adressen weiterer Knoten, die mit demselben Etikett übereinstimmen, identifizieren; wobei jedem Knoten, der mit einem gegebenen Etikett übereinstimmt, ein Datenspeicherbereich zugeordnet ist, der die Adresse an derer Knoten, die mit demselben Etikett übereinstimmen, enthält, und wobei jeder solche Knoten in Reaktion auf Abfragenachrichten eine die Adressen der Liste enthaltende Nachricht zurückleitet; und wobei die zweiten Wiedergewinnungsmittel so betreibbar sind, dass sie eine Abfragenachricht zu der durch die ersten Wiedergewinnungsmittel identifizierten Adresse senden und bei Empfang einer Antwort Abfragenachrichten iterativ zu Adressen senden, die in der Antwort auf jene Abfragenachricht oder gegebenenfalls in einer Antwort auf eine nachfolgende Abfragenachricht enthalten sind.
  • In einem weiteren Aspekt schafft die Erfindung ein Verfahren zum Betreiben eines Computernetzes, das Knoten enthält, wobei das Verfahren umfasst:
    • – in Reaktion auf die Eingabe eines Etiketts Ausführen einer ersten Wiedergewinnungsoperation, um die Adresse eines mit diesem Etikett übereinstimmenden Knotens zu identifizieren;
    • – in Reaktion auf eine durch die ersten Wiedergewinnungsmittel identifizierte Adresse Ausführen einer zweiten Wiedergewinnungsoperation, um die Adressen weiterer Knoten, die mit demselben Etikett übereinstimmen, zu identifizieren; wobei jedem Knoten, der mit einem gegebenen Etikett übereinstimmt, ein Datenspeicherbereich zugeordnet ist, der die Adressen anderer Knoten enthält, die mit demselben Etikett übereinstimmen, und in Reaktion auf Abfragenachrichten eine die Adressen der Liste enthaltende Nachricht zurückleitet; und wobei die zweite Wiedergewinnungsoperation das Senden einer Abfragenachricht zu der durch die ersten Wiedergewinnungsmittel identifizierten Adresse und bei Empfang einer Antwort das iterative Senden von Abfragenachrichten zu Adressen, die in der Antwort auf jene Abfragenachricht oder gegebenenfalls in einer Antwort einer nachfolgenden Abfragenachricht enthalten sind, umfasst.
  • Andere bevorzugte Merkmale der Erfindung sind in den Ansprüchen definiert.
  • Nun werden einige Ausführungsformen der Erfindung beispielhaft unter Bezugnahme auf die beigefügte Zeichnung beschrieben, worin:
  • 1 ein Blockschaltplan eines Computers ist, der in einer Ausführungsform der Erfindung verwendet wird;
  • 1A ein Ablaufplan ist, der eine Datenwiedergewinnungsoperation unter Verwendung primärer und sekundärer virtueller Netze zeigt;
  • 2 eine Veranschaulichung einer schematischen graphischen Darstellung des Managements der Verbindungen zwischen den Knoten eines Computernetzes ist;
  • 3 bis 10 Ablaufpläne sind, die die Aspekte des Betriebs eines Knotens des sekundären virtuellen Netzes zeigen;
  • 11 bis 14 und 16 Ablaufpläne sind, die die Aspekte des Betriebs eines Knotens des primären virtuellen Netzes zeigen; und
  • 15 eine schematische graphische Darstellung ist, die den Fluss der Nachrichten während des in 14 dargestellten Prozesses veranschaulicht.
  • DIE KNOTEN
  • In dieser Beschreibung wird auf Computerknoten Bezug genommen, die Verarbeitungs-, Speicher- und Kommunikationsfähigkeiten besitzen. Ein Computerknoten kann ein Computer oder eine andere Vorrichtung sein oder – unter Beachtung dessen, dass ein einzelner Computer eine Anzahl unabhängiger Programme oder Prozesse besitzen kann, die auf ihm ablaufen – kann ein derartiges Programm oder ein derartiger Prozess sein. Ein Element der gespeicherten Daten kann außerdem als ein eigener Knoten betrachtet werden, selbst wenn eine Anzahl derartiger Elemente durch ein einziges Programm oder einen einzigen Prozess bedient werden kann.
  • In dieser Beschreibung wird angenommen, dass jeder Computerknoten mit irgendeiner Kommunikationsinfrastruktur verbunden ist, die z. B. ein Telekommunikationsnetz, wie z. B. ein IP-Netz (Netz mit Internetprotokoll), sein könnte, so dass Nachrichten zu ihm gesendet werden können. Folglich bildet jeder Computerknoten außerdem einen Knoten innerhalb der Kommunikationsinfrastruktur.
  • Es wird außerdem auf virtuelle Knoten Bezug genommen, die zu einem virtuellen Netz gehören. Die Unterscheidung ist wichtig, weil ein Computerknoten zwei oder mehr virtuelle Knoten (die möglicherweise zu verschiedenen virtuellen Netzen gehören) besitzen kann, die ihm zugeordnet sind. Wie sein Name impliziert, existiert ein virtueller Knoten nicht in irgendeinem physikalischen Sinn: stattdessen wird, wie bald klar werden wird, sein Vorhandensein durch gespeicherte Daten gebildet, die Verbindungen zwischen virtuellen Knoten definieren und folglich außerdem das virtuelle Netz definieren, zu dem er gehört.
  • Notwendigerweise muss ein virtueller Knoten einem Computerknoten zugeordnet sein, der ihn mit Verarbeitungs-, Speicher- und Kommunikationsfähigkeiten versieht: die Bezugnahmen auf das Senden, Empfangen und Verarbeiten von Nachrichten durch einen virtuellen Knoten beziehen sich auf ein derartiges Senden, Empfangen oder Verarbeiten durch den Computerknoten im Namen des virtuellen Knotens.
  • Ein Beispiel ist in 1 gezeigt. Ein Computer besitzt die üblichen Komponenten, nämlich einen Prozessor 1, einen Speicher 2, eine Anzeige 3, eine Tastatur 4 und eine Kommunikationsschnittstelle 5 für die Kommunikation über ein Netz 10.
  • Der Speicher 2 enthält das Betriebssystem und andere Programme (die nicht gezeigt sind) und die Datendateien, wie z. B. die gezeigte Textdatei 20. Er besitzt außerdem einen Speicher 21, der ein Etikett 21a, das der Textdatei 20 entspricht, und seine eigene Adresse 21b enthält. Außerdem besitzt er eine Adressenliste 22 und ein Unterstützungsprogramm 23, die zusammen das Vorhandensein eines Knotens eines virtuellen Netzes in dem Computer definieren. Dieser Knoten besitzt eine Adresse 24. Außerdem gezeigt sind eine Adressenliste 25 und ein Unterstützungsprogramm 26, die zusammen das Vorhandensein eines Knotens eines weiteren virtuellen Netzes in dem Computer definieren. Dieser Knoten besitzt eine Adresse 27. Die in den Listen 22, 25 gespeicherten Adressen sind die Adressen der anderen Knoten im selben virtuellen Netz.
  • DAS NACHSCHLAGSYSTEM
  • Nun wird ein verteiltes Nachschlagsystem beschrieben, obwohl dies nur ein mögliches Beispiel einer Anwendung der Erfindung ist. Dieses System erlaubt den Anwendern, einer Web-Seite Kommentare zuzuordnen. Wann immer ein Anwender diese Seite besucht, besitzt er außerdem die Gelegenheit, die Kommentare zu betrachten, die andere Anwender gemacht haben. Der Kommentar wird im Computer des Anwenders, der den Kommentar beigetragen hat, (z. B. als eine Textdatei) gespeichert.
  • Der Anwender, der die Web-Seite (oder stattdessen seinen Computer) betrachtet, besitzt den eindeutigen Fundstellenanzeiger (URL) der Web-Seite, wobei ein Mechanismus erforderlich ist, durch den er die Kommentare wiedergewinnen kann. In diesem Beispiel ist der Mechanismus wie folgt:
    Die Textdatei ist im Computer des Anwenders gespeichert, der den Kommentar beigetragen hat, wobei sie einem Knoten eines virtuellen Netzes des Typs zugeordnet ist, das in der internationalen Patentanmeldung Nr. WO 03/034669 [Aktenzeichen des Vertreters A30044] beschrieben ist, wie es auch andere Textdateien, die Kommentare über andere Web-Seiten enthalten, und möglicherweise auch andere nicht in Beziehung stehende Dateien sein können. Dieses virtuelle Netz (das im Kontext der vorliegenden Beschreibung als das primäre virtuelle Netz oder einfach das primäre Netz bezeichnet wird) dient dazu, das Senden einer Nachricht zu einem Knoten zu erlauben, ohne seine Adresse zu kennen, vorausgesetzt, es ist ein Etikett vorhanden, das ihn identifiziert. Obwohl dieser Typ des Netzes mit eindeutigen Etiketten (eines pro Knoten) arbeiten kann, sind in diesem Beispiel die Etiketten nicht eindeutig: stattdessen besitzen alle Knoten, denen Textdateien zugeordnet sind, die Kommentare über eine bestimmte Web-Seite enthalten, das gleiche Etikett. Dieses Etikett ist eine Hash-Funktion des URL der Web-Seite. Dieses virtuelle Netz bietet einen Wiedergewinnungsmechanismus, der nur einen Knoten erreicht.
  • Die Textdatei ist außerdem einem Knoten eines zweiten virtuellen Netzes zugeordnet. Dieses (das sekundäre virtuelle Netz) enthält nur Knoten, denen Textdateien zugeordnet sind, die Kommentare über eine besondere Web-Seite enthalten.
  • Es wird jedoch angegeben, dass, während die Verwendung eines primären Netzes gemäß der oben erwähnten internationalen Patentanmeldung bevorzugt ist, es nicht wesentlich ist. In der Tat ist es nicht wesentlich, überhaupt ein virtuelles Netz zu verwenden; es könnte stattdessen ein weiterer primärer Wiedergewinnungsmechanismus, der ein Etikett empfängt und die Adresse eines ihm entsprechenden Knotens zurückschickt, verwendet werden.
  • Der Computer, der einen Kommentar sendet, ist so, wie in 1 gezeigt ist, wobei er
    • – einen Knoten im primären Netz erzeugen muss. Dieser Knoten besitzt ein Etikett 21a und eine Netzadresse 24.
    • – einen Knoten im sekundären Netz erzeugen muss. Dieser Knoten besitzt eine Netzadresse 27.
  • Anfangs sind die Adressenlisten 22, 25 leer, mit Ausnahme, dass die Liste 22 Urlade-Verbindungen enthält. Die Selbstorganisation der Netze, um sicherzustellen, dass die Liste 22 die Etiketten und Adressen einiger anderer Knoten des primären Netzes enthält und dass die Liste 25 die Adressen einiger anderer Knoten des sekundären Netzes enthält, wird später beschrieben. Vorläufig wird das System unter der Annahme beschrieben, dass diese Etiketten und Adressen vorhanden sind.
  • An diesem Punkt sind einige Wörter über die Adressen angezeigt. Der durch die Textdatei 20 gebildete Knoten, der Knoten des primären virtuellen Netzes und der Knoten des sekundären virtuellen Netzes besitzen ihre eigenen Adressen, während sie konzeptionell eine einzige Identität besitzen. Es würde möglich sein, jedem Knoten eine eindeutige Adresse innerhalb des Kommunikationsnetzes 10 zuzuwiesen, obwohl dies in der Praxis nicht besonders zweckmäßig ist. In der bevorzugten Implementierung besitzt jeder Knoten eine Adresse, die drei Teile umfasst:
    • – Eine Internet-Adresse, die den Computerknoten "lokalisiert", z. B. 130.146.209.15
    • – Eine Portnummer, die einen speziellen Kommunikationsport im Computerknoten lokalisiert. Die Ports sind der Standardteil der Internet-Adressen. Sie erlauben z. B. verschiedenen unabhängigen Anwendungsprogrammen, unabhängig Nachrichten zu senden und zu empfangen. Das heißt, jedes würde die Nachrichten an seinem eigenen Port empfangen, wobei es keine Nachrichten empfangen würde oder durch Nachrichten "durcheinandergebracht" werden würde, die für andere Anwendungsprogramme vorgesehen sind. Die Internet-Adresse zusammen mit der Portnummer können als die Netzadresse be trachtet werden (wie sie Teil der Kommunikationsprotokolle, wie z. B. des TCP/IP, ist, die verwendet werden). Die Netzadresse für alle primären und sekundären Knoten kann die gleiche sein, dies ist jedoch nicht notwendigerweise so. Alle Nachrichten für die primären Knoten können z. B an einem Port empfangen werden, der von dem verschieden ist, an dem die sekundären Nachrichten empfangen werden (was eine Art ist, zwischen derartigen Nachrichten zu unterscheiden).
    • – Eine Knotenkennung (ein ganzzahliger Wert), der den spezifischen Knoten lokalisiert, für den die Nachricht vorgesehen ist. Falls z. B. alle Nachrichten im primären Netz an einem dedizierten Port empfangen werden, gibt es dennoch eine lokal eindeutige Kennung, die jedem Knoten zugeordnet ist. Wenn es mehrere Knoten gibt, ist es deshalb klar, für welchen Knoten die Nachricht vorgesehen ist. Diese Knotenkennung ist eine anwendungsspezifische Adressenerweiterung (sie ist kein Teil des Standard-Internetprotokolls). Sie ist einfach in der Nachricht enthalten, die gesendet wird. Der Prozess, der sie empfängt, "kennt" diese und untersucht diese Knotenkennung, um zu bestimmen, zu welchen Knoten die Nachricht weitergeleitet werden sollte.
  • Es ist möglich, dass beide Knoten die gleiche Netzadresse besitzen, aber es ist nicht notwendigerweise so. Nicht jeder Knoten besitzt einen eigenen Port (zum Teil weil die Anzahl der verfügbaren Ports ein wenig begrenzt ist), aber ein Knoten kann gut zwei Ports (und folglich zwei verschiedene Netzadressen) besitzen: einen für das primäre Netz und einen für das sekundäre Netz. Typischerweise gibt es eine Anzahl sekundärer Netze, die alle denselben Port verwenden könnten.
  • Es sollte hervorgehoben werden, dass sich im Folgenden die Bezugnahmen auf die Adresse eines Knotens auf die vollständige Adresse dieses Knotens beziehen.
  • Ein besonders attraktiver Zugang besteht darin, dafür zu sorgen, dass eine Textdatei und die primären und sekundären Knoten alle die gleiche Knotenkennung (und IP-Adresse) besitzen und nur die Portnummern verschieden sind. Ein derartiges Adressierungsprotokoll kann die Gelegenheit schaffen, etwas der Verarbeitung zu vereinfachen, weil, wenn die Adresse eines Knotens vorhanden ist und die Adresse eines weiteren Knotens, der ihm zugeordnet ist, erforderlich ist, die Adresse des letzteren Knotens aus der des Ersteren abgeleitet werden könnte, anstatt nachgeschlagen werden zu müssen. In der folgenden Beschreibung ist jedoch keine derartige Vereinfachung gemacht worden, so dass diese Prozesse mit jedem Adressenprotokoll arbeiten werden.
  • Der Computer, der eine Web-Seite betrachtet, gewinnt die zugeordneten Kommentare wieder, indem er
    • – die gleiche Hash-Funktion auf den URL anwendet, um das Etikett zu erhalten,
    • – eine Abfrage (die das Etikett enthält) an das primäre virtuelle Netz sendet, um die Adresse eines Knotens zu erhalten,
    • – unter Verwendung der gefundenen Adresse eine Abfrage an das zweite virtuelle Netz sendet, um die Adresse von mehr (oder sogar allen) anderen Knoten im zweiten virtuellen Netz zu erhalten,
    • – diese Adressen verwendet, um die Kommentare für die Anzeige wiederzugewinnen.
  • Es wird angegeben, dass der wiedergewinnende Computer nicht notwendigerweise die Knoten der virtuellen Netze enthalten muss; er kann ein herkömmlicher Computer sein, auf den die Software zum Implementieren des Wiedergewinnungsprozesses geladen worden ist, und der eine Kommunikationsschnittstelle aufweist, so dass er mit den Computern kommunizieren kann, in denen die Knoten des virtuellen Netzes stehen. Dieser Prozess ist im Ablaufplan nach 1A gezeigt und geht wie folgt vonstatten:
    Schritt 30: Nach dem Eingeben eines URL (oder dem Aufrufen eines Hyperlinks) durch den Anwender gewinnt der Computer die entsprechende Web-Seite wieder. Dieser Schritt ist gänzlich herkömmlich.
  • Schritt 31: Auf den URL wird eine Hash-Funktion angewendet, um ein Etikett zu erhalten. Wie in der oben erwähnten früheren internationalen Patentanmeldung erörtert ist, könnte diese den SHA-1-Algorithmus verwenden.
  • Schritt 32: Eine 'Find'-Nachricht, die dieses Etikett und die Netzadresse des wiedergewinnenden Computers enthält, wird zu einem Knoten des primären Netzes gesendet. Offenbar ist es notwendig, dass der Computer in Besitz wenigstens einer derartigen Adresse ist.
  • Schritt 33: Der wiedergewinnende Computer empfängt eine 'Found'-Nachricht vom primären Netz. Diese Nachricht enthält sowohl das Etikett und die Adresse eines Knotens, der gefunden worden ist, als auch die Adressen des zugeordneten Knotens des sekundären Netzes und des Kommentars. Es könnte ein Zeitabschaltungsmechanismus enthalten sein, um den Prozess abzubrechen, falls in einer angemessenen Zeit keine Found-Nachricht empfangen wird.
  • Schritt 34: In diesem Beispiel ist das primäre Netz so beschaffen, dass es immer das Etikett und die Adresse des Knotens zurückschickt, der ein Etikett besitzt, das sich am nächsten an dem in der Find-Nachricht enthaltenen Etikett befindet. Deshalb wird eine Überprüfung ausgeführt, um festzustellen, ob das zurückgeschickte Etikett das Gleiche wie das ist, um das gebeten worden ist, wobei, falls nicht, der Prozess beendet wird. Siehe die folgende Erklärung der Bedeutung von "am nächsten".
  • Schritt 35: Vorausgesetzt, dass die Etiketten übereinstimmen, führt der wiedergewinnende Computer einen Prozess (der im Folgenden ausführlich zu beschreiben ist) aus, wodurch er die durch die Found-Nachricht zurückgeschickte Adresse verwendet, um unter Verwendung des sekundären Netzes weitere Adressen wiederzugewinnen.
  • Schritt 36: Diese Adressen werden dann verwendet, um von den "sendenden" Computern die Textdateien wiederzugewinnen, die die Kommentare enthalten.
  • DAS SEKUNDÄRE VIRTUELLE NETZ
  • Es ist das Ziel dieses Netzes, die Selbstorganisation einer Gruppe von Knoten in ein einziges virtuelles Netz auszuführen, das anschließend verwendet werden kann, um alle Knoten zu entdecken, die Teil der Gruppe sind. Die Hauptanforderung besteht darin, dass das resultierende Netz alle Knoten enthält. Es ist eine weitere Anforderung, dass die Systemlast, die notwendig ist, um das Netz zu erzeugen und aufrechtzuerhalten, über alle Knoten gleich verteilt ist. Dies ist nicht nur "am fairsten", was wichtig ist, wenn verschiedene Anwender ihre Betriebsmittel zu einer verteilten Anwendung beitragen, sondern es hilft außerdem, das System gegen Überlastung zu schützen.
  • Das Netz besitzt deshalb die folgenden Eigenschaften:
    • – Die Anzahl der durch jeden Knoten aufrechterhaltenen Verbindungen ist vorzugsweise die gleiche.
    • – Alle Verbindungen sind bidirektional. Im Ergebnis ist außerdem die Anzahl der Verbindungen zu einem Knoten für jeden Knoten die gleiche. Dies ist wichtig, da dies die Anzahl der Nachrichten beeinflusst, die ein Knoten empfängt und bearbeiten muss.
    • – Es besitzt eine "flache" Struktur. Die Knoten ordnen sich nicht selbst hierarchisch an. Im Ergebnis ist die Systemlast über alle Knoten gleich verteilt.
  • Die Struktur jedes Knotens
  • Jedem Knoten sind die folgenden Daten zugeordnet:
    • – Mehrere Verbindungen zu anderen Knoten. Jede Verbindung ist einfach die Adresse eines weiteren Knotens. Jeder Verbindung ist ein Status zugeordnet, der "bestätigt" oder "nicht bestätigt" sein kann. Jeder Knoten kann nur eine maximale Anzahl von Verbindungen aufrechterhalten, die durch einen systemweiten Parameter L gegeben ist. Ein typischer Wert für L beträgt z. B. 6. Es ist nicht wesentlich, dass dieser Parameter für alle Knoten der gleiche ist; es ist jedoch kein Vorteil zu gewinnen, indem sie verschieden gemacht werden.
    • – Eine Liste der Reserveverbindungen oder kurz der Reserven. Jede Reserve ist einfach die Adresse eines weiteren Knotens. Die Reserven werden durch den Selbstorganisationsprozess verwendet, um das virtuelle Netz aufzubauen. Ein Knoten fügt weitere Knoten als Reserven hinzu, wenn er über einen Knoten benachrichtigt wird, den er nicht als eine Verbindung hinzufügen kann, entweder weil er bereits mit diesem Knoten verbunden ist oder weil er bereits die maximale Anzahl der Verbindungen besitzt. Die Anzahl der Reserven, die ein Knoten aufrechterhalten kann, ist außerdem begrenzt und durch den systemweiten Parameter S gegeben. Ein typischer Wert für S beträgt z. B. 3. Die Liste der Reserveverbindungen ist im Allgemeinen nicht wesentlich, sie ist aber beim Bereitstellen eines Hinzufügungsmechanismus sehr wertvoll, wodurch eine Verbindung, die nicht lokal untergebracht werden kann, zu irgendeinem anderen Punkt im virtuellen Netz verbreitet werden kann. Die Verwendung der Reserveverbindungen (oder eines ähnlichen Verbreitungsmechanismus) ist jedoch in Systemen notwendig, in denen die ankommenden Notify-Nachrichten immer am selben Knoten (oder einem aus einer sehr kleinen Anzahl von Knoten) des sekundären Netzes ankommen.
  • Die Nachrichten
  • Um die Selbstorganisation in ein Netz auszuführen und zu entdecken, welche Knoten ein Teil eines gegebenen Netzes sind, senden die Knoten Nachrichten aneinander: die folgenden Nachrichtentypen werden durch das sekundäre Netz verwendet:
  • – Eine AddLink-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens.
  • Sie wird durch einen Knoten (den Sender bzw. sender-Knoten) an einen weiteren Knoten (den Empfänger bzw. receiver-Knoten) gesendet, um eine wechselseitige Verbindung anzufordern.
  • – Eine ChangeLink-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens,
    • – der Adresse des subject-Knotens.
  • Sie wird durch einen Knoten (X) zu einem weiteren Knoten (Y) gesendet, um ihn aufzufordern, dass er eine seiner Verbindungen (Z) in eine Verbindung zu sich selbst (X) ändert. Das Protokoll ist so, dass X eine ähnliche Nachricht an Z sendet, die ihn auffordert, dass er seine Verbindung zu Y in eine Verbindung zu sich selbst (X) tauscht. Auf diese Weise fordert X effektiv an, sich selbst in die gegenwärtig zwischen Y und Z bestehende Verbindung einzufügen.
  • – Eine LinkAdded-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens.
  • Sie wird verwendet, um einen Knoten zu benachrichtigen, dass der sender-Knoten soeben eine Verbindung zu ihm hinzugefügt hat.
  • – Eine LinkError-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens,
    • – der Adresse des subject-Knotens,
    • – einem Fehlercode.
  • Sie wird verwendet, um einen Knoten zu benachrichtigen, dass es den Anschein hat, dass es ein Problem mit einer seiner Verbindungen gibt. Der subject-Knoten kann z. B. nicht antworten oder die Verbindung kann nicht wechselseitig sein. Sie enthält einen Fehlercode, um den Typ des Fehlers anzugeben.
  • – Eine Links-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens,
    • – den Adressen aller Verbindungen,
    • – einem reference-Wert,
    • – die Links-Nachricht kann außerdem einige andere Daten von dem sender-Knoten enthalten. Im Beispiel der Kommentare zu einer Web-Seite ist dies die Adresse des zugeordneten Kommentars.
  • Sie enthält alle aktuellen Verbindungen des sendenden Knotens. Sie wird immer in Reaktion auf eine LinksQuery-Nachricht gesendet. Der reference kann verwendet werden, um die spezifische Abfrage zu unterscheiden, auf die geantwortet wird.
  • – Eine LinksQuery-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens,
    • – dem reference-Wert.
  • Sie wird verwendet, um einen Knoten aufzufordern, eine Links-Nachricht als Antwort zu senden (die seine aktuellen Verbindungen enthält).
  • Eine Notify-Nachricht mit:
    • – der Adresse des sender-Knotens,
    • – der Adresse des receiver-Knotens,
    • – der Adresse des subject-Knotens,
    • – dem notify level.
  • Sie wird verwendet, um einen Knoten von einem weiteren Knoten im Netz zu benachrichtigen. Der notify level wird verwendet, um die Verbreitung der Notify-Nachrichten zu steuern und zu begrenzen. Wie hier beschrieben ist, wird die Adresse des sender-Knotens nicht verwendet, aber sie ist für die Fehlersuche oder falls es erwünscht ist, Quittierungen zu senden, nützlich.
  • Das Aufbauen des sekundären Netzes
  • Das System lässt sich eine Gruppe von Knoten in ein einziges virtuelles Netz selbst organisieren, so dass, falls die Adresse eines Knotens vorhanden ist, die Adressen der anderen in der Gruppe gefunden werden können. Dieser Abschnitt beschreibt, wie neue Verbindungen erzeugt werden, wenn Knoten, die zum selben sekundären Netz gehören sollten, entdeckt werden. Hier können zwei Teile unterschieden werden:
    Die Entdeckung von Knotenpaaren, die zum selben sekundären Netz gehören sollten. Was das Kriterium für das Gruppieren der Knoten in dasselbe Netz ist, ist anwendungsspezifisch. Im Beispiel des Kom mentierens von Web-Seiten sollten alle Knoten, die Kommentare über denselben URL darstellen, zusammen in ein sekundäres Netz gruppiert sein. Wie die Knoten entdeckt werden, die zusammen gruppiert werden sollten, ist außerdem anwendungsspezifisch. In Kürze wird ein Beispiel gegeben.
  • Aktualisieren/Erweitern des sekundären Netzes im Ergebnis einer Knotenentdeckung. Wenn ein Knotenpaar entdeckt wird, das zum selben sekundären Netz gehören sollte, kann im Ergebnis das System eine oder mehrere neue Verbindungen aufbauen. Die neue Verbindung besteht nicht notwendigerweise zwischen dem Knotenpaar, sondern sie kann z. B. zwischen den Knoten bestehen, mit denen diese zwei Knoten verbunden sind. Wie neue Verbindungen erzeugt werden, ist später ausführlich beschrieben.
  • Die anfängliche Notify-Nachricht
  • Die Organisation des sekundären Netzes setzt das Vorhandensein ankommender 'Notify'-Nachrichten voraus, die z. B. ein vorhandenes und ein neues Mitglied der Gruppe identifizieren (obwohl es zu Beginn möglich ist, dass kein Knoten schon Teil der Gruppe ist, während später im Selbstorganisationsprozess beide Knoten bereits Teil der Gruppe sein könnten). Es ist angebracht, dass ein weiterer Teil des Systems das sekundäre Netz von Knoten benachrichtigt, die zu ihm gehören sollten. Es gibt verschiedene Arten, in denen dies ausgeführt werden kann. Hier wird ein Beispiel gegeben, wie dies ausgeführt wird, wenn das sekundäre Netz in Kombination mit einem primären Netz des Typs verwendet wird, der in der oben erwähnten früheren internationalen Patentanmeldung beschrieben ist. Im Beispiel des Kommentierens von Web-Seiten veröffentlicht sich jeder Kommentar selbst unter einem Etikett, das auf dem URL der entsprechenden Web-Seite basiert, als ein Knoten im primären Netz. In dieser Weise kann das primäre Netz verwendet werden, um einen Kommentar für einen gegebenen URL nachzuschlagen, falls einer vorhanden ist. Um alle Kommentare für einen gegebenen URL zu zeigen, besitzt außerdem jeder Kommentar einen Knoten des sekundären Netzes, der ihm zugeordnet ist. Die Knoten, die den Kommentaren über den selben URL entsprechen, organisieren sich selbst in ein sekundäres Netz, das für diesen URL spezifisch ist. Sobald das primäre Netz verwendet wird, um einen einzigen Kommentar über einen URL zu finden, kann in dieser Weise das sekundäre Netz verwendet werden, um die anderen Kommentare über den selben URL zu finden.
  • Deshalb werden in diesem Fall die Knoten des sekundären Netzes, die zusammen gruppiert werden sollten, jeder unter demselben Etikett im primären Netz veröffentlicht. Ein Mechanismus, durch den im primären Netz die Knoten periodisch eine 'Push'-Aktualisierung ausführen, um Verbindungen aufzubauen und aufrechtzuerhalten, wird im Folgenden beschrieben, einschließlich einer Modifikation, so dass, wann immer ein Knoten einen weiteren Knoten erkennt, der unter demselben Etikett veröffentlicht ist, die notwendige Notify-Nachricht erzeugt wird.
  • Die Bearbeitung der Notify-Nachrichten
  • Wenn ein Knoten eine Notify-Nachricht über einen Knoten empfängt, mit dem er noch nicht verbunden ist, geschieht eines des Folgenden:
    Falls der empfangende Knoten bereits die maximale Anzahl erlaubter Verbindungen besitzt, fügt er sie stattdessen als eine Reserve hinzu (sofern er sie nicht bereits als eine Reserve besitzt). Falls der Knoten, wenn er dies tut, seine maximale Anzahl von Reserven überschreiten würde, entfernt er eine Reserve. Er kann dann außerdem die Notify-Nachricht zu der Reserve, die er entfernt hat, weiterleiten. Ob er so verfährt oder nicht, hängt vom Wert des notify level ab. Der notify level wird jedes Mal verringert, um zu verhindern, dass sich die Nachrichten endlos verbreiten.
  • Falls andernfalls der subject-Knoten auch noch nicht die maximale Anzahl von Verbindungen besitzt, versucht der empfangende Knoten, eine wechselseitige Verbindung zwischen den beiden Knoten zu erzeugen. Dies ist in 2, graphische Darstellungen a und b, veranschaulicht. Hier gilt L = 3, wobei der Knoten 1 eine Notify-Nachricht über den Knoten 2 empfangen hat. Weil beide Knoten nur zwei Verbindungen besaßen, wird eine Verbindung zwischen dem Knoten 1 und dem Knoten 2 erzeugt.
  • Wenn andernfalls der subject-Knoten bereits die maximale Anzahl von Verbindungen besitzt, ist es nicht möglich, einfach eine wechselseitige Verbindung zwischen den beiden Knoten zu erzeugen. Was deshalb geschieht, ist, dass der empfangende Knoten versucht, sich selbst in eine vorhandene Verbindung einzufügen. Dies ist in 2, graphische Darstellungen c und d, veranschaulicht. Hier wird die Verbindung zwischen dem Knoten 2 und dem Knoten 3 unterbrochen, aber sie wird durch zwei neue Verbindungen ersetzt: eine Verbindung zwischen dem Knoten 1 und dem Knoten 2 und eine Verbindung zwischen dem Knoten 1 und dem Knoten 3. Deshalb wird die Gesamtzahl der Verbindungen um eine vergrößert. Dies funktioniert selbst dann, wenn der Knoten 2 und der Knoten 3 bereits die maximale Anzahl der Verbindungen besaßen. Der Knoten 1 muss jedoch zwei neue Verbindungen erzeugen können, damit dies erfolgreich ist. Der Prozess ist in den Ablaufplänen nach 3 bis 9 ausführlicher erklärt.
  • 3 zeigt, wie ein Knoten ankommende Notify-Nachrichten bearbeitet. Hier wird entschieden, ob eine neue Verbindung erzeugt werden sollte, und wenn ja, wie (durch das Hinzufügen einer neuen Verbindung oder durch das Ändern einer vorhandenen Verbindung in zwei Verbindungen). Falls keine neuen Verbindungen erzeugt werden, kann der Satz der Reserven aktualisiert werden und kann eine weitere Notify-Nachricht gesendet werden.
  • Im Schritt 300 wird eine Notify-Nachricht empfangen, die die Adresse des Knotens, der sie gesendet hat, (des sender-Knotens), die Adresse des subject-Knotens und einen Verbreitungsgrenzwert, notifylevel, enthält. Der empfangende Knoten überprüft zuerst (301), ob er Raum besitzt, um eine neue Verbindung aufzubauen, und wenn ja, ob (302) er bereits eine Verbindung zum subject-Knoten besitzt. Wenn nein, versucht er, eine Verbindung mit dem subject-Knoten aufzubauen.
  • Im Schritt 303 sendet er eine LinksQuery-Nachricht an den subject-Knoten, wobei er bei 304 eine Antwort erwartet. Sobald die Antwort – eine Links-Nachricht – empfangen wird, überprüft (305) er abermals, ob er immer noch Raum besitzt, um eine neue Verbindung aufzubauen (falls er in der Zwischenzeit andere Nachrichten empfangen und bearbeitet und im Ergebnis Verbindungen erzeugt hat). Wenn ja, untersucht er dann (306) die empfangene Links-Nachricht, um zu überprüfen, ob der subject-Knoten den Raum besitzt, um eine neue Verbindung aufzubauen. Wenn er diesen hat, dann fügt in den Schritten 307 und 308 der empfangende Knoten die Adresse des subject-Knotens zu seiner Liste der Verbindungen hinzu (aber als "nicht bestätigt" markiert), wobei er eine AddLink-Nachricht zum subject-Knoten sendet.
  • Wenn jedoch im Schritt 306 bestimmt wird, dass der subject-Knoten keine weiteren Verbindungen akzeptieren kann, dann versucht der empfangende Knoten, sich selbst in eine vorhandene Verbindung einzufügen, wie früher unter Bezugnahme auf 2 erwähnt worden ist. Der erste Schritt (309) besteht darin, zu überprüfen, ob der empfangende Knoten Raum für zwei Verbindungen besitzt; falls nicht, wird der Prozess beendet. Wenn er jedoch diesen besitzt, dann wählt der empfangende Knoten eine Verbindung aus der Liste der Verbindungen in der empfangenen Links-Nachricht zufällig aus (aber nicht einen Knoten, zu dem der empfangende Knoten bereits eine Verbindung besitzt), d. h., eine Verbindung zwischen dem subject-Knoten und einem weiteren Knoten, der hier als der other-Knoten bezeichnet wird. Dann versucht der empfangende Knoten, sich selbst in diese Verbindung einzufügen, durch das:
    311 Hinzufügen der Adresse des (nicht bestätigten) subject-Knotens zu seiner Liste der Verbindungen;
    312 Hinzufügen der Adresse des (nicht bestätigten) other-Knotens zu seiner Liste der Verbindungen;
    313 Senden einer ChangeLink-Nachricht, die die Adresse des other-Knotens enthält, zum subject-Knoten;
    314 Senden einer ChangeLink-Nachricht, die die Adresse des subject-Knotens enthält, zum other-Knoten.
  • Wird jedoch vorausgesetzt, dass im Schritt 301 bestimmt wird, dass der empfangende Knoten keinen Raum besitzt, um eine Verbindung hinzuzufügen, oder dass er im Schritt 302 bereits eine Verbindung zum subject-Knoten besitzt, dann untersucht der Prozess, ob der empfangende Knoten eine Verbindung zu seiner Liste der Reserveverbindungen hinzufügen sollte. Im Schritt 315 wird der Prozess beendet, falls festgestellt wird, dass sich der subject-Knoten bereits in der Liste der Reserven befindet. Bei 316 wird überprüft, ob es Raum gibt, eine Verbindung zur Liste der Reserven hinzuzufügen, und wenn ja, wird diese ordnungsgemäß bei 317 hinzugefügt. Wenn nein, dann wird eine vorhandene Reserveverbindung der Reserveverbindungen bei 318 zufällig ausgewählt und im Schritt 319 entfernt, so dass sie im Schritt 317 durch eine Verbindung zum subject-Knoten ersetzt werden kann. Außerdem wird die Variable notifylevel bei 320 dekrementiert, wobei, falls sie von null verschieden beleibt (Schritt 321), die ursprüngliche Notify-Nachricht – mit diesen neuen Wert des notifylevel – im Schritt 322 zum Knoten (der als replace-Knoten bezeichnet wird) weitergeleitet wird, auf den durch eine zufällig ausgewählte vorhandene Verbindung gezeigt wird.
  • Die Wirkung dieses Prozesses besteht darin, dass, wenn ein Knoten A, der bereits einen vollen Satz von Verbindungen besitzt, eine Notify-Nachricht empfängt, die ihn auffordert, mit einem subject-Knoten B eine Verbindung herzustellen, die Adresse von B als eine Reserveverbindung aufgezeichnet wird. Diese Verbindung verbleibt untätig, bis die Liste der Reserveverbindungen von A voll ist. Wenn A eine spätere Notify-Nachricht empfängt, die in auffordert, eine Verbindung zum Knoten C herzustellen, und die Reserveverbindung zum Knoten B im Schritt 318 ausgewählt wird, ist dann die im Schritt 322 erzeugte neue Notify-Nachricht tatsächlich eine Aufforderung an den Knoten B, eine Verbindung von sich selbst zum Knoten C zu erzeugen.
  • Es wird außerdem ein Mechanismus geschaffen – der jedoch im Ablaufplan nicht gezeigt ist – durch den, wenn eine Verbindung nicht bestätigt ist und der empfangende Knoten keine Bestätigung (über eine LinkAdded-Nachricht, wie im Folgenden unter Bezugnahme auf 6 beschrieben ist) innerhalb einer gegebenen Zeitdauer empfängt, die nicht bestätigte Verbindung gelöscht wird. Es wird angegeben, dass, wenn der empfangende Knoten Verbindungen besitzt, die immer noch einen "nicht bestätigten" Status besitzen, er diese nicht bestätigten Verbindungen (ebenso wie selbstverständlich die bestätigten Verbindungen) in Reaktion auf die LinksQuery-Nachrichten zurückschickt, was den andern Knoten erlaubt, zu bestätigen, dass er versucht, die Verbindung aufzubauen.
  • In 3 führen die "nein"-Ausgänge der Schritte 305 und 309 zum Abschluss des Prozesses: auf Wunsch könnten sie jedoch zum "Reserveverbindungs"-Prozess, der im Schritt 315 beginnt, mit einer leichten Verbesserung der Effizienz geleitet werden.
  • In den Schritten 309 bis 314 bricht der Knoten effektiv eine der Verbindungen des subject-Knotens auf und fügt sich selbst dazwischen ein. Eine andere mögliche Option, die im Ablaufplan nicht gezeigt ist, würde sein, dass der Knoten eine seiner eigenen Verbindungen aufbricht (selbstverständlich vorausgesetzt, dass er bereits wenigstens eine Verbindung besitzt) und den subject-Knoten dazwischen einfügt. Diese Option würde, falls sie implementiert ist, unmittelbarer nach dem 'nein'-Ausgang aus dem Schritt 301 versucht werden. Zuerst würde der empfangende Knoten überprüfen müssen, ob der subject-Knoten weniger als L – 1 Verbindungen besaß, eine seiner eigenen Verbindungen (zu einem Knoten other) zufällig aus wählen, diese durch eine nicht bestätigte Verbindung zum subject-Knoten ersetzen und eine Addlink-Nachricht zum subject-Knoten senden. Um eine bidirektionale Verbindung zwischen dem subject-Knoten und dem other-Knoten aufzubauen, würde er dann (a) eine spezielle Addlink-Nachricht, die den subject-Knoten auffordert, den other-Knoten vorbehaltlos als eine nicht bestätigte Verbindung zu seiner Liste der Verbindungen hinzuzufügen, an den subject-Knoten senden, und (b) eine spezielle ChangeLink-Nachricht mit dem empfangenden Knoten als die alte Verbindung, die zu entfernen ist, und der Benennung des subject-Knotens als die neue Verbindung, die hinzuzufügen ist, an den other-Knoten senden. Diese Option könnte ebenso wie oder anstelle der Schritte 309 bis 314 enthalten sein.
  • Eine weitere Option für den empfangenden Knoten, eine seiner eigenen Verbindungen aufzubrechen, würde für ihn darin bestehen (nachdem er zuerst verifiziert hat, dass der subject-Knoten weniger als L – 1 Verbindungen besaß), eine Notify-Nachricht, die ihn selbst als subject-Knoten benennt, an den subject-Knoten zu senden. Dies würde das gleiche Ergebnis besitzen, aber einen ein wenig größeren Nachrichtübermittlungs-Zusatzaufwand nach sich ziehen.
  • 4 zeigt, wie ein Knoten die ankommenden ChangeLink-Nachrichten bearbeitet. Diese Nachrichten werden gesendet, wenn ein Knoten X, der eine Notify-Nachricht empfangen hat, wünscht, eine vorhandene Verbindung in zwei neue Verbindungen zu ändern (siehe 2). Der empfangende Knoten Y empfängt bei 400 eine Notify-Nachricht mit dem Knoten Z als den subject-Knoten, d. h., die den Knoten Y auffordert, seine vorhandene Verbindung zum Knoten Z durch eine zum Knoten X zu ersetzen. Falls er bereits eine Verbindung zu X besitzt, unternimmt er keine weiteren Schritte (401), während er, falls (402) er in der Tat keine Verbindung zum Knoten Z besitzt, eine Fehlernachricht an den sender-Knoten X sendet 403.
  • Vorausgesetzt, alles ist richtig, sendet (404) er eine LinksQuery-Nachricht an den sender-Knoten X und erwartet (405) als Antwort eine Links-Nachricht vom sendenden Knoten X, um zu überprüfen, dass der Letztere in der Tat die zwei neuen Verbindungen erzeugt hat, die er erzeugt haben sollte, bevor er die subject-Verbindung ändert. Falls diese Überprüfungen (406, 407) erfolgreich sind, entfernt der empfangende Knoten seine Verbindung zu Z (408), fügt X als bestätigte Verbindung hinzu (409) und schickt eine LinkAdded-Nachricht zum sender-Knoten X zurück (410).
  • 5 zeigt, wie ein Knoten ankommende AddLink-Nachrichten bearbeitet. Diese Nachrichten werden gesendet, wenn ein Knoten wünscht, eine neue Verbindung mit einem Knoten zu erzeugen (siehe 1). Nachdem die Nachricht bei 501 empfangen worden ist, überprüft der Knoten im Schritt 502, ob er Raum für eine weitere Verbindung besitzt, wobei er, falls nicht, eine Fehlernachricht bei 503 zurückschickt. Andernfalls sendet (504) er eine LinksQuery-Nachricht an den sender-Knoten und erwartet (505) als Antwort eine Links-Nachricht vom sendenden Knoten, so dass er bei 506 überprüfen kann, dass der Letztere in der Tat eine Verbindung zum empfangenden Knoten erzeugt hat. Wenn nein, lehnt er es ab, die Verbindung hinzuzufügen, wobei er die Verarbeitung beendet, wobei er aber, wenn ja, dann den sender-Knoten als eine bestätigte Verbindung hinzufügt (507) und eine LinkAdded-Nachricht als Bestätigung zum sender-Knoten zurückschickt (508).
  • 6 zeigt, wie ein Knoten ankommende LinkAdded-Nachrichten bearbeitet. Diese Nachrichten werden gesendet, wenn ein weiterer Knoten eine Verbindung zum empfangenden Knoten entweder in Reaktion auf eine ChangeLink-Nachricht oder auf eine AddLink-Nachricht akzeptiert hat. Wenn die LinkAdded-Nachricht bei 600 empfangen wird, die anzeigt, dass eine Verbindung akzeptiert worden ist, wird ihr Status im Schritt 601 in "bestätigt" geändert. Dann wird die Verbindung aufrechterhalten, bis sie entweder in eine neue Verbindung (in Reaktion auf eine ChangeLink-Nachricht) geändert wird oder bis die Verbindung unterbrochen wird.
  • 7 zeigt, wie ein Knoten ankommende LinkError-Nachrichten bearbeitet. Diese Nachrichten werden entweder gesendet, wenn ein Knoten eine Verbindung zum empfangenden Knoten nicht erzeugen konnte, nachdem der Letztere eine wechselseitige Verbindung (über eine Change-Link- oder AddLink-Nachricht) angefordert hat, oder sie werden gesendet, wenn eine Verbindung als unterbrochen erscheint (der Knoten am anderen Ende nicht auf Nachrichten antworten kann oder die Verbindung nicht wechselseitig sein kann). Unterbrochene Verbindungen werden durch den Selbstorganisationsprozess nicht erfasst, aber wenn die Clients das sekundäre Netz durchqueren (wie später erklärt wird).
  • Nach dem Empfang der Nachricht bei 700 wird bestimmt (701), ob die Nachricht über einen Knoten ist, zu dem der empfangende Knoten eine nicht bestätigte Verbindung besitzt. Wenn ja und (702) sie einen Fehlercode überträgt, der einen Ausfall, eine angeforderte Verbindung zu erzeugen, angibt, dann wird bei 703 die Verbindung entfernt. Wenn jedoch die Nachricht nicht über einen Knoten ist, zu dem der empfangende Knoten eine nicht bestätigte Verbindung besitzt, sendet (704) der empfangende Knoten eine LinksQuery-Nachricht zum subject-Knoten, erwartet (705) er als Antwort eine Links-Nachricht, prüft er bei 706 die Antwort, um zu überprüfen, ob der subject-Knoten eine Verbindung zu sich selbst besitzt, und, wenn nicht, entfernt er dann im Schritt 703 seine Verbindung zum subject-Knoten.
  • 8 zeigt, wie ein Knoten ankommende LinksQuery-Nachrichten bearbeitet. Diese Nachrichten werden gesendet, wenn ein weiterer Knoten wünscht, die Verbindungen des empfangenden Knoten zu kennen, und der Letztere bei ihrem Empfang bei 800 deshalb bei 801 mit einer Links-Nachricht antwortet.
  • 9 zeigt, wie ein Knoten ankommende Links-Nachrichten bearbeitet. Wie sie bearbeitet werden, hängt gänzlich davon ab, warum die entsprechende LinksQuery-Nachricht gesendet worden ist. Dies geschieht aus verschiedenen Gründen, wie u. a. in 3, 4, 5 und 7 gezeigt ist. Was deshalb geschieht, ist, dass, wenn eine LinksQuery-Nachricht gesendet wird, ihr ein reference gegeben wird, der lokal eindeutig ist, wobei eine Nachrichten-Bearbeitungseinrichtung dem reference zugeordnet wird. Wenn dann eine Links-Nachricht empfangen wird (900), wird die geeignete Nachrichten-Bearbeitungseinrichtung identifiziert, wobei im Schritt 902 die Nachricht zur geeigneten Nachrichten-Bearbeitungseinrichtung weitergeleitet wird, so dass mit der Nachricht in der richtigen Weise umgegangen werden kann.
  • Es kann selbstverständlich geschehen, dass in Reaktion auf eine LinksQuery niemals eine Links-Nachricht empfangen wird, z. B. weil der empfangende Knoten ausgeschaltet worden ist. Deshalb wird, falls nach einer gegebenen Periode keine Links-Nachricht empfangen worden ist, die entsprechende Nachrichten-Bearbeitungseinrichtung entfernt. Obwohl dies in keinem der hier erörterten Ablaufpläne explizit gezeigt worden ist, bedeutet dies einfach, dass, wenn eine Abfrage der Verbindungen zeitlich abgeschaltet wird, keine weiteren Schritte unternommen werden und der ganze Ablaufplan "fertig" ist.
  • Die Wiedergewinnungs-Betriebsarten
  • Bei gegebener Adresse eines einzigen Knotens des sekundären Netzes ist es möglich, andere, potentiell alle Knoten im Netz zu entdecken. Die Art, in der dies ausgeführt werden kann, ist sehr einfach. An den bekannten Knoten wird eine LinksQuery-Nachricht gesendet, um alle seine Verbindungen anzufordern. Der Knoten antwortet mit einer Links-Nachricht, die die Adressen aller Knoten enthält, mit denen er verbunden ist. Dann kann wiederum jeder dieser Knoten kontaktiert werden, wobei deren Verbindungen angefordert werden und folglich die Adressen all ihrer Verbindungen erhalten werden. Indem in dieser Weise fortgefahren wird, wird das kann Netz durchlaufen und werden allmählich alle Knoten, die es enthält, entdeckt.
  • 10 zeigt den Prozess ausführlicher. Es ist selbstverständlich, dass dies der Prozess ist, der im Wiedergewinnungsschnitt 35 verwendet wird, der in 1A gezeigt ist. Die Adressen aller bekannten Knoten, die erfolgreich kontaktiert worden sind, werden in die "bestätigte" Liste gesetzt. Gleichzeitig können die Daten wiedergewonnen werden. In dem Fall des Beispiels der "Kommentare über Web-Seiten" ist das relevante Element der Daten die Adresse des Kommentars, wobei dies auch neben der Knotenadresse in die bestätigte Liste eingegeben wird. Die bestätigte Liste stellt dann die Adressen bereit, die für den Schritt (36) des "Wiedergewinnens" der Kommentare in 1A notwendig sind. Die "nicht bestätigte" Liste enthält anderer seits die Adressen der bekannten Knoten, die noch nicht kontaktiert worden sind. Schließlich enthält die "bekannte" Liste die Adressen aller bekannten Knoten. Sie enthält alle Adressen in der "bestätigten" und in der "nicht bestätigten" Liste, jedoch außerdem die Adressen der Knoten, die kontaktiert worden sind und die nicht geantwortet haben. Die bekannte Liste besitzt außerdem zum Zweck der Fehlermeldung für jede in sie eingegebene Adresse ein zusätzliches Feld, das eine source-Adresse enthält – d. h., die Adresse des Knotens, aus dessen Liste die Adresse, auf die der current-Zeiger zeigt, erhalten worden ist.
  • Es ist es nicht von Belang, wo der Wiedergewinnungsprozess stattfindet: er kann in einem Knoten oder irgendwo anders stattfinden. Im Schritt 1000 wird zusammen mit einer start-Adresse, d. h. der Adresse eines Knotens, von dem bestimmt worden ist, dass er zum fraglichen virtuellen Netz gehört, eine Anforderung, die Knotenadressen wiederzugewinnen, empfangen. Im Schritt 1002 wird ein Adressenzeiger, current, anfangs auf diese Adresse gesetzt, während ein zweiter Adressenzeiger, source, anfangs null ist (1003).
  • In den Schritten 1004 und 1005 wird eine LinksQuery-Nachricht an die durch current gegebene Adresse gesendet und eine Antwort erwartet. Wenn eine Links-Nachricht empfangen wird, wird current mit der Kommentaradresse aus der Links-Nachricht neben ihm zur bestätigten Liste hinzugefügt (Schritt 1006).
  • Im Schritt 1007 wird in einen Unterprozess eingetreten, der für jede der in der Links-Nachricht enthaltenen Adressen ausgeführt wird. Falls sich (1008) die Adresse bereits in der bekannten Liste befindet, geht der Prozess zur nächsten Adresse weiter. Andernfalls wird die Adresse zur bekannten Liste und zur nicht bestätigten Liste hinzugefügt (Schritte 1009, 1010). Außerdem (1011) wird die Adresse in current in die bekannte Liste als die Quelle der hinzugefügten Adresse eingegeben.
  • Sobald dieser Unterprozess abgeschlossen ist, wird dann im Schritt 1013 eine Adresse aus der nicht bestätigten Liste zufällig ausgewählt (es sei denn, dass die nicht bestätigte Liste leer ist, wobei in diesem Fall der Prozess im Schritt 1012 endet). Diese Adresse wird die neue current-Adresse, wobei sie aus der nicht bestätigten Liste gelöscht wird. Der nächste Schritt (1014) besteht darin, die current in der bekannten Liste nachzuschlagen, um die ihr zugeordnete source-Adresse wiederzugewinnen und diese in den source-Zeiger einzugeben. Die zufällige Auswahl ist nicht verbindlich. Der current-Knoten könnte z. B. so gewählt sein, dass er der "älteste" Knoten in der nicht bestätigten Liste ist, oder die Liste könnte nach einem weiteren Kriterium (z. B. den Adressen der Knoten) sortiert sein und der current-Knoten könnte immer der "erste" Knoten in dieser Liste sein. Die Zufallsauswahl des current-Knotens besitzt jedoch ihre Vorteile. Sie verteilt die Last im System (insbesondere wenn nicht alle Knoten immer wiedergewonnen werden) und sie verteilt außerdem das Prüfen der Verbindungen des Netzes, so dass unterbrochene Verbindungen schneller entdeckt werden.
  • Der Prozess wird dann abermals vom Schritt 1004 fortgesetzt und iteriert, bis die nicht bestätigte Liste leer ist – d. h. keine weiteren neuen Adressen gefunden werden können.
  • Eine Nebenwirkung des Wiedergewinnungsprozesses ist, dass er unterbrochene Verbindungen entdeckt. Es kann z. B. geschehen, dass ein Knoten nicht antwortet oder dass eine Verbindung nicht wechselseitig ist. Das Letztere ist der Fall, wenn ein Knoten A mit einem Knoten B verbunden ist, aber der Knoten B den Knoten A nicht in seiner Verbindungstabelle besitzt. Wenn eine unterbrochene Verbindung entdeckt wird, wird der Knoten, der der "source"-Knoten der Verbindung ist, über eine LinkError-Nachricht benachrichtigt. Wie bereits in 7 gezeigt ist, kann der source-Knoten dann die Verbindung selbst überprüfen (um die Genauigkeit: der Fehlermeldung zu bestätigen), wobei er im Ergebnis die Verbindung entfernen kann. Ein Knoten, der nicht antwortet, wird durch den Ausfall im Schritt 1005, eine Links-Nachricht innerhalb einer festgelegten Zeitabschaltungsperiode zu empfangen, erkannt, wobei im Schritt 1015 eine Fehlernachricht, die eine Adresse des current-Knotens und einen Fehlercode "keine Antwort" enthält, zum source-Knoten gesendet wird, woraufhin die Steuerung zum Schritt 1012 zurückkehrt. Die Nichtwechselseitigkeit einer Verbindung wird erkannt, indem im Schritt 1016 geprüft wird, um zu bestimmen, ob die für den current-Knoten empfange Links-Nachricht die Adresse des source-Knotens enthält: wenn nein, wird eine Fehlernachricht, die die Adresse des current-Knotens und einen Fehlercode "nicht wechselseitig" enthält, zum source-Knoten gesendet (Schritt 1017), wobei aber der Wiedergewinnungsprozess wie vorher fortgesetzt wird, da es die Verantwortlichkeit des source-Knotens ist, abhelfende Schritte (in Übereinstimmung mit dem Prozess nach 7) zu unternehmen. Die Prüfung im Schritt 1016 wird übersprungen, falls der source-Knoten null ist.
  • Es wird angegeben, dass, selbst wenn mehrere bestätigte Knoten mit einem Knoten verbunden sein können, der auf eine Links-Nachricht nicht antwortet, nur der Knoten, der zuerst zu der Verbindung beigetragen hat (der source-Knoten) benachrichtigt wird, dass es "keine Antwort" gegeben hat. Dies ist wichtig, weil es den Ablaufplan leichter verständlich macht. Es kann jedoch argumentiert werden, dass es einen weiteren praktischen Nutzen gibt. Es kann einen Fall geben, in dem ein Knoten (nicht rechtzeitig) antwortet, weil er vorübergehend überlastet ist. In diesem Fall kann es nicht erwünscht sein, dass mehrere Knoten gleichzeitig ihm eine LinksQuery-Nachricht senden, um zu prüfen, ob es einen Fehler gibt (wie in 7). Auf Wunsch ist es in beiden Arten einfach, den Knotenwiedergewinnungsalgorithmus zu aktualisieren, um alle bekannten Knoten, die durch eine unterbrochene Verbindung beeinflusst werden, zu benachrichtigen, wenn eine derartige Verbindung entdeckt wird.
  • In 10 wird die Knotenwiedergewinnung nicht angehalten, bis alle bekannten Knoten kontaktiert worden sind. In der Praxis kann es erwünscht sein, den Prozess früher zu beenden. Falls ein Anwender z. B. nach einem Ort sucht, von dem eine Datei herunterzuladen ist, kann es ausreichend sein, ihm oder ihr die Wahl von zehn potentiellen Adressen zum Herunterladen anstatt von angenommen allen Tausend anzubieten.
  • Der Algorithmus in 10 ist als gänzlich seriell gezeigt. Es wird nur ein Knoten auf einmal kontaktiert. Eine weitere LinksQuery-Nachricht wird nur gesendet, nachdem auf die vorhergehende LinksQuery-Nachricht eine Antwort empfangen worden ist (oder sie zeitlich abgeschaltet worden ist). In der Praxis ist es jedoch bevorzugt, die Wiedergewinnung zu beschleunigen, indem mehrere LinksQuery-Nachrichten parallel ausgegeben werden. Es kann außerdem der Fall sein, dass im Kasten 1000 mehrere Wiedergewinnungsanforderungen gleichzeitig durch mehrere Instanzen des Prozesses nach 10 bearbeitet werden.
  • ERÖRTERUNG Der Erfolg der Selbstorganisation
  • Es ist das Ziel des sekundären virtuellen Netzes, die Selbstorganisation aller Knoten auszuführen, die im Gegensatz zu mehren nicht verbundenen Netzen in ein einziges Netz zusammen gruppiert sein sollten. Ob dies der Fall ist oder nicht, hängt in großem Umfang davon ab, wie die anfängliche Notify-Nachricht erzeugt wird. Falls es z. B. eine Gruppe von zwölf Knoten gibt, die alle zusammen gruppiert werden sollten, aber aus dieser Gruppe nur fünf Knoten Benachrichtigungen über die anderen Knoten in dieser Gruppe aus fünf empfangen und keiner der anderen sieben Knoten über irgendeinen dieser fünf Knoten benachrichtigt wird, ist es unmöglich, dass sich die Knoten in ein einziges Netz selbst organisieren. Stattdessen ordnen sie sich in zwei separaten Netzen an, eines aus fünf Knoten und eines aus sieben Knoten. Solange wie die anfänglichen Benachrichtigungen nicht so sind, dass es unmöglich ist, dass sich die Knoten in ein einziges Netz selbst organisieren, ist jedoch der Selbstorganisationsprozess so, dass es sehr unwahrscheinlich ist, dass sich die Knoten nicht selbst in ein einziges Netz organisieren. Die Berechnung der Wahrscheinlichkeit, dass die Selbstorganisation zu einem einzigen Netz führt, ist kompliziert und hängt von dem Mechanismus ab, durch den die anfänglichen Benachrichtigungen erzeugt werden. Es ist jedoch in Simulationen mit mehreren verschiedenen Mechanismen der anfänglichen Benachrichtigungen experimentiert worden, wobei bisher die Knoten niemals gescheitert sind, sich selbst in ein einziges Netz zu organisieren.
  • Die Robustheit gegen boshafte Knoten
  • Bisher ist angenommen worden, dass alle Knoten dem Protokoll gehorchen. Es ist jedoch möglich, dass es boshafte Knoten gibt, die nicht gemäß den Regeln spielen. Sie können versuchen, durch andere Knoten aufrechterhaltene Verbindungen zu unterbrechen und/oder können versuchen, zu viele Verbindungen zu sich selbst zu erhalten. Es ist erwünscht, dass das Gesamtsystem gegen derartigen Missbrauch so robust wie möglich ist.
  • Das bisher beschriebene System ist bereits ziemlich robust gegen boshafte Knoten. Dies ist so, weil jeder Knoten immer mit einem LinksQuery-Links-Nachrichtenaustausch die durch den anderen relevanten Knoten aufrechterhaltenen Verbindungen überprüft, bevor er seine eigenen Verbindungen ändert. Wenn z. B. ein Knoten eine AddLink-Nachricht empfängt (siehe 3), prüft er zuerst, dass der sendende Knoten in der Tat mit ihm verbunden ist, bevor er den sender-Knoten als seine eigene Verbindung hinzufügt.
  • Das System besitzt jedoch trotzdem eine relative Schwäche. So wie es ist, können die Knoten leicht "lügen", wenn sie mit einer Links-Nachricht antworten. Oft sendet ein Knoten eine LinksQuery-Nachricht, um zu überprüfen, dass der empfangende Knoten mit ihm verbunden ist. In Kenntnis dessen kann der empfangende Knoten mit einer gefälschten Links-Nachricht antworten, die so modifiziert ist, dass sie immer den Sender der Links-Nachricht als eine Verbindung enthält. Dies ermöglicht einem Knoten, viel mehr als die erlaubte Anzahl L von Knoten zu besitzen, die mit ihm verbunden sind. Dies würde folglich die Gesamtzahl der "guten" Verbindungen in dem System verringern.
  • Glücklicherweise gibt es eine Art, um diese Schwäche anzusprechen. Dies kann ausgeführt werden, falls die Knoten ihre LinksQuery durch einen Proxy-Knoten senden. Diese Proxies werden jedes Mal zufällig ausgewählt, wenn ein Knoten eine Abfrage senden will. Jeder Knoten kann z. B. die Knoten, mit denen er gegenwärtig verbunden ist, als Proxies verwenden. In dieser Weise ist der Knoten (A), der die Verbindungen eines weiteren Knotens (B) wissen will, dem Knoten B unbekannt, weil die LinksQuery-Nachrichten, die er empfängt, von einem Proxy-Knoten (C) kommen, wobei sich die Nachricht, die der Knoten B von Knoten C empfängt, überhaupt nicht auf den Knoten A bezieht. Deshalb gibt es keine gute Art für den Knoten B, falsche Nachrichten zu senden, die eine signifikante Wirkung auf das Gesamtsystem besitzen.
  • Es gibt selbstverständlich die Frage, was die Wirkung von boshaften Proxies ist. Obwohl offensichtlich boshafte Proxies eine schädliche Wirkung besitzen (es ist unvermeidlich, dass die Knoten, die dem Protokoll nicht gehorchen, in irgendeinem Ausmaß die Leistung beeinflussen), ist diese Wirkung begrenzt. Der Grund ist, dass sie nur die LinksQuery boshaft bearbeiten können, deren Weiterleitung von ihnen verlangt wird, wobei diese Anforderungen etwa gleich über alle Knoten verteilt sind. Wenn andererseits die Proxies nicht verwendet werden, können boshafte Knoten ein Chaos verursachen, indem sie sehr aktiv sind. Falls diese Knoten viele falsche AddLink-Nachrichten senden und viele Links-Nachrichten fälschen, die sie anschließend senden, ist die Wirkung auf das Gesamtsystem viel größer.
  • DAS PRIMÄRE VIRTUELLE NETZ
  • Das primäre Netz ist in der oben erwähnten internationalen Patentanmeldung ausführlich beschrieben. Hier werden die grundlegenden Wiedergewinnungs- und Selbstorganisationsmechanismen zusammen mit einer Modifikation beschrieben, die die Erzeugung von Notify-Nachrichten ermöglicht, um die Selbstorganisation des sekundären Netzes zu steuern.
  • Zuerst ist es notwendig, das Konzept des Raumes der virtuellen Koordinaten zu erklären, der durch diesen Mechanismus verwendet wird. Es ist bereits erwähnt worden, dass jeder Knoten ein Etikett besitzt. Das Etikett wird in die Koordinaten in einem virtuellen Raum umgesetzt. Der Raum kann ein-, zwei- oder höherdimensional sein. Der genaue Umsetzungsmechanismus ist nicht sehr entscheidend: für einen eindimensionalen Raum kann das Etikett, das als eine binäre Zahl betrachtet wird, direkt als die Koordinate verwendet werden. Für zwei oder mehr Dimensionen besteht das bevorzugte Verfahren darin, dass das Etikett, das als eine Kette von Bits betrachtet wird, in zwei oder mehr gleiche Gruppen partitioniert wird, wobei jede Gruppe, die als eine binäre Zahl betrachtet wird, eine der Koordinaten bildet. Jede Koordinate (oder die Koordinate in einem eindimensionalen Raum) wird skaliert, damit sie im Bereich [0, 1] liegt.
  • Der Abstand zwischen zwei Etiketten in diesem virtuellen Raum ist der euklidische Abstand zwischen den zwei Koordinatensätzen (obwohl andere Abstände, wie z. B. der Cityblock-Abstand (der oft als der Manhattan-Abstand bezeichnet wird) auf Wunsch verwendet werden könnten). Der Koordinatenraum bricht um, so dass der Abstand in der x-Richtung zwischen x1 und x2 Min{(1 – |x1 – x2|), |x1 – x2|}ist, wobei der euklidische Abstand in zwei Dimensionen zwischen den Punkten (x1, y2) und (x2, y2) deshalb √{[Min{(1 – |x1 – x2|), |x1 – x2|}]2 + [Min{(1 – |y1 – y2|), |y1 – y2|}]2}ist.
  • Es wird an diesem Punkt außerdem in Erinnerung gerufen, dass jeder Knoten eine Liste 22 (1) mit einer Anzahl von Einträgen besitzt, die die Verbindungen zu den anderen Knoten darstellen. Jeder Eintrag umfasst das Etikett und die Adresse eines derartigen weiteren Knotens. Anfangs ist diese Liste leer, wobei deshalb der Knoten eine zweite ähnliche Liste der Urlade-Verbindungen besitzt – d. h. einige Verbindungen (typischerweise vier), so dass er anfangs andere Knoten des Netzes kontaktieren kann. Ebenso wie die Verbindungen in der Liste 22 (die als die Nahverbindungen bezeichnet werden) kann der Knoten außerdem zusätzliche derartige Listen, die hierarchisch angeordnet sind, und/oder eine Liste von Fernverbindungen besitzen. Diese sind in der oben erwähnten früheren internationalen Patentanmeldung beschrieben, da sie optional sind, sind sie hier jedoch nicht beschrieben.
  • Die Nachrichten
  • Zuerst werden die folgenden Nachrichten verwendet (es wird angegeben, dass die im primären virtuellen Netz verwendeten Nachrichten von den im sekundären virtuellen Netz verwendeten Nachrichten verschieden und vollständig unabhängig sind):
    FIND-Nachrichten werden verwendet, um Knoten-Nachschlagoperati onen zu initiieren und auszuführen und um "PULL"-Aktualisierungen zu unterstützen. Sie enthalten:
    • – das Etikett eines Zielknotens,
    • – die Adresse des Knotens, der diese Abfrage initiiert hat.
  • FOUND-Nachrichten werden verwendet, um die Ergebnisse der Abfrage zurückzuschicken. Sie enthalten:
    • – das Etikett des Zielknotens,
    • – das Etikett des Knotens, der gefunden worden ist,
    • – die Adresse des Knotens, der gefunden worden ist,
    • – die Adresse des Knotens des sekundären Netzes, der dem Knoten zugeordnet ist, der gefunden worden ist,
    • – anwendungsspezifische Daten – in diesem Fall die Adresse des Kommentarknotens, der dem Knoten zugeordnet ist, der gefunden worden ist.
  • PUSH-Nachrichten zeigen das Etikett eines Knotens anderen Knoten an. Sie enthalten:
    • – das Etikett eines subject-Knotens,
    • – die Adresse des subject-Knotens,
    • – die Anzahl der hops to go, um einen Zielknoten zu erreichen.
  • NOTIFY-Nachrichten werden verwendet, um die push-Aktualisierungen zu verbreiten. Sie enthalten:
    • – das Etikett eines subject-Knotens,
    • – die Adresse des subject-Knotens.
  • Das Wiedergewinnen
  • Die 11 zeigt, wie der Knoten ankommende Find-Nachrichten bearbeitet. Im Prinzip sucht der empfangende Knoten nach einem Knoten, der näher als er selbst an dem in der Find-Nachricht identifizierten Zielknoten ist, wobei er, falls er erfolgreich ist, die Find-Nachricht weiterleitet. Falls er nicht erfolgreiche ist, schickt er seine eigene Adresse und sein eigenes Etikett zurück. Er tut dies, indem er die folgenden Schritte ausführt:
    Schritt 1100: Der Knoten empfängt eine Find-Nachricht, die das Etikett eines Zielknotens und die Adresse eines initiierenden Knotens enthält;
    Schritt 1105: Der Knoten setzt das Etikett des Zielknotens in Koordinaten im Etikettenraum um und berechnet, welche von allen Verbindungen (welcher von allen Knoten), die bzw. den er aufgezeichnet hat, sich im Etikettenraum am nächsten am Zielknoten befindet. Der relevante Knoten wird als der nearest-Knoten bezeichnet;
    Schritt 1110: Der Knoten vergleicht den Abstand zwischen seinen eigenen Koordinaten und jenen des Zielknotens mit dem Abstand zwischen den Koordinaten des nearest-Knotens und jenen des Zielknotens;
    Schritt 1115: Falls der Abstand zwischen seinen eigenen Koordinaten und jenen des Zielknotens kleiner (oder gleich) ist, sendet der Knoten über das Netz 10 eine Found-Nachricht, die sein eigenes Etikett und seine eigene Adresse enthält, zum initiierenden Knoten;
    Schritt 1120: Falls der Abstand zwischen den Koordinaten des nearest Knotens und jenen des Zielknotens kleiner ist, leitet der Knoten die Find-Nachricht zum nearest-Knoten weiter.
  • Die Adresse des Knotens, die im Schritt 1115 zurückgeschickt wird, ist entweder die von einem mit dem Zieletikett oder von einem nahe an ihm im Etikettenraum. Wenn das zurückgeschickte Etikett nicht mit dem Zieletikett übereinstimmt, kann es entweder bedeuten, dass entweder der Zielknoten nicht vorhanden ist oder dass das virtuelle Netz nicht ausreichend selbstorganisiert ist.
  • Push
  • Jeder Knoten initiiert spontan Push-Aktualisierungen. Jeder Knoten könnte z. B. periodisch einen Push-Aktualisierungsprozess beginnen. Bei einer Push-Aktualisierung sendet ein Knoten eine Push-Nachricht mit seinem eigenen Etikett und seiner eigenen Adresse durch eine zufällige Folge von Knoten, wobei für die Länge der Folge eine Grenze gesetzt ist. Der letzte Knoten in der Folge sendet eine Notify-Nachricht zurück zum initiierenden Knoten. Die 12, 13 und 14 zeigen die verschiedenen Teile dieses Prozesses.
  • 12 zeigt, wie ein Knoten eine Push-Aktualisierung unter Verwendung der folgenden Schritte initiiert:
    Schritt 1200: Der Knoten wählt aus seinen Urlade-Verbindungen eine Verbindung zufällig aus und gibt die Adresse des durch die ausgewählte Verbindung identifizierten Knotens als eine forward-Adresse für eine nächste Nachricht ein;
    Schritt 1205: Der Knoten gibt eine kleine positive Zufallszahl für das Feld hops to go in der Push-Nachricht ein;
    Schritt 1210: Der Knoten gibt sein eigenes Etikett und seine eigene Adresse als jene des subject-Knotens in die Push-Nachricht ein und sendet die Push-Nachricht unter Verwendung des Netzes 10 zum Knoten bei der forward-Adresse.
  • 13 und 14 zeigen, wie die Nahverbindungen aktualisiert werden. Die Push-Nachrichten werden zusammen mit den Notify-Nachrichten verwendet, um die Nahverbindungen zu aktualisieren. Es gibt bei dieser Aktualisierung zwei Phasen. In einer ersten Phase leitet jeder Knoten zufällig die Push-Nachricht weiter, bis der Wert in hops to go in der Nachricht, wie sie empfangen wird, "0" ist. Falls der Wert in hops to go "0" ist, beginnt der empfangende Knoten die zweite Phase der Push-Aktualisierung durch das Senden einer Notify-Nachricht. In dieser zweiten Phase wird die Notify-Nachricht nacheinander zu den Knoten weitergeleitet, deren Etiketten zunehmend näher bei dem des subject-Knotens im virtuellen Raum liegen. Wenn kein Knoten mit einem näheren Etikett gefunden werden kann, dann werden nötigenfalls die Verbindungen für den letzten gefundenen Knoten aktualisiert. Dies ist immer der Fall, wenn es andernfalls unmöglich sein würde, den gegebenen subject-Knoten zu finden, z. B. weil er noch keine Nahverbindungen aufgebaut hat. Der letzte gefundene Knoten sendet dann außerdem zusätzliche Notify-Nachrichten an die Knoten, die ihre Verbindungssätze potentiell ebenso verbessern könnten.
  • In 13 umfasst die erste Phase einer Push-Aktualisierung, die sich mit ankommenden Push-Nachrichten befasst, die folgenden Schritte:
    Schritt 1300: Ein Knoten empfängt eine Push-Nachricht. Die Push-Nachricht enthält das Etikett und die Adresse eines initiierenden Knotens als den subject-Knoten und besitzt einen Wert im Feld hops to go;
    Schritt 1305: Der empfangende Knoten wählt aus seinen Urlade-Verbindungen eine Verbindung zufällig aus und gibt die Adresse des durch die ausgewählte Verbindung identifizierten Knotens als eine forward-Adresse für eine nächste Nachricht ein;
    Schritte 1310 und 1315: Der empfangende Knoten verringert den Wert im Feld hops to go um 1 und prüft, ob der verringerte Wert für hops to go immer noch größer als null ist;
    Schritt 1320: Falls der verringerte Wert immer noch größer als null ist, leitet der Knoten die Push-Nachricht zu der forward-Adresse weiter, die er eingegeben hat;
    Schritt 1325: Falls der Wert null ist, gibt der Knoten stattdessen das Etikett und die Adresse des initiierenden Knotens (die in der empfangenen Push-Nachricht gegeben sind) als den subject-Knoten in eine Notify-Nachricht ein und sendet die Notify-Nachricht zu der forward-Adresse weiter, die er eingegeben hat.
  • In 14 umfasst die zweite Phase des Umgehens mit den Push-Aktualisierungen, die sich mit ankommenden Notify-Nachrichten befasst, die folgenden Schritte:
    Schritt 1400: Ein Knoten empfängt eine Notify-Nachricht, die das Etikett und die Adresse eines Knotens als den subject-Knoten enthält;
    Schritt 1401: Der empfangende Knoten überprüft, ob der subject- Knoten der Notify-Nachricht das gleiche Etikett wie der empfangende Knoten besitzt;
    Schritt 1402: Wenn ja, prüft der empfangende Knoten, ob der subject-Knoten der Notify-Nachricht die gleiche Adresse wie der empfangende Knoten besitzt. In diesem Fall unternimmt er keine weiteren Schritte.
  • Falls jedoch der subject-Knoten der Notify-Nachricht ein Knoten mit dem gleichen Etikett wie der empfangende Knoten, aber mit einer vom empfangenden Knoten verschiedenen Adresse ist, dann treten zwei Ereignisse auf. Zuerst (Schritt 1403) sendet der empfangende Knoten zum subject-Knoten der ankommenden Notify-Nachricht eine Notify-Nachricht, die einen aus der eigenen Liste der Nahverbindungen des empfangenden Knotens zufällig ausgewählten Knoten als subject-Knoten benennt. Zweitens veranlasst der Schritt 1404 die Erzeugung einer Notify-Nachricht für die Handlung durch das sekundäre Netz. Der empfangende Knoten kann jedoch eine derartige Nachricht nicht direkt erzeugen. Im Allgemeinen ist es bevorzugt, das Senden von Nachrichten zwischen verschiedenen virtuellen Netzen über das Kommunikationsnetz zu vermeiden, aber das Hauptproblem besteht darin, dass der empfangende Knoten nicht nur die Adresse seines eigenen Knotens des sekundären Netzes benötigen würde, sondern außerdem die Adresse des Knotens des sekundären Knotens, der dem subject-Knoten zugeordnet ist. Der empfangende Knoten besitzt diese Adresse nicht. Deshalb wird ein zweistufiger Prozess verwendet.
  • Zuerst sendet der empfangende Knoten eine spezielle CrossNotify-Nachricht an den Knoten des primären Netzes, der in der ankom menden Notify-Nachricht als der subject-Knoten spezifiziert ist. Diese Nachricht enthält:
    • – eine sender-Adresse, die auf die Adresse des empfangenden Knotens gesetzt ist (d. h. des Knotens, der die ankommende Nachricht (des primären Netzes) empfangen hat);
    • – eine receiver-Adresse (oder Zieladresse), die auf die in der ankommenden Notify-Nachricht enthaltene Nachricht gesetzt ist;
    • – eine subject-Adresse, die auf die Adresse des Knotens des sekundären Netzes gesetzt ist, das dem empfangenden Knoten zugeordnet ist.
  • Es wird angegeben, dass die ersten zwei Adressen die Adressen von Knoten im primären Netz sind, während die dritte Adresse die Adresse eines Knotens im sekundären Netz ist.
  • Zweitens leitet der Knoten des primären Netzes, der die CrossNotify-Nachricht empfängt, sie tatsächlich zum zugeordneten Knoten des sekundären Netzes weiter. Nötigenfalls könnte der weiterleitende Knoten die Nachricht in das Format umformatieren, das im sekundären Netz in Gebrauch ist, und die receiver-Adresse (des primären Netzes) durch die Adresse des zugeordneten Knotens des sekundären Netzes ersetzen. Die Nachricht würde dann genau so bearbeitet werden, wie in 3 gezeigt ist. Der Grund, aus dem "tatsächlich" gesagt wird, besteht darin, dass es in der Praxis bevorzugt ist, dass der Knoten des primären Netzes, der die CrossNotify-Nachricht empfängt, gerade eine einfache lokale Nachricht, die die im subject-Feld der CrossNotify-Nachricht spezifizierte Adresse enthält, an seinen zuge ordneten Knoten des sekundären Netzes sendet. In diesem Fall würde der Prozess nach 3 modifiziert werden, damit er den Schritt des Setzens des notifylevel auf einen geeigneten Wert enthält.
  • Dieser Prozess wird mittels eines Beispiels unter Bezugnahme auf 15 veranschaulicht, in der die Kästen die Knoten darstellen, während die Pfeile die Nachrichten darstellen. Vorausgesetzt, ein Knoten P1 des primären Netzes empfängt im Schritt 1400 nach 14 eine Notify-Nachricht, die das Etikett LP2 und die Adresse AP2 des Knotens P2 des primären Netzes als subject-Knoten enthält. Im Knoten P1 wird erkannt (die Schritte 1401, 1402 in 14), dass der subject-Knoten das gleiche Etikett wie P1 (d. h. LP1 = LP2), aber eine andere Adresse (AP1 ≠ AP2) besitzt. Der Knoten P1 kennt die Adresse AS1 seines Knotens S1 des sekundären Netzes und erzeugt (im Schritt 1404 in 14) eine CrossNotify-Nachricht mit der sender-Adresse AP1, der receiver-Adresse AP2 und der subject-Adresse AS1. Diese Nachricht wird am Knoten P2 des primären Netzes empfangen, wobei dieser eine lokale notify-Nachricht mit der Adresse AS1 zum zugeordneten Knoten S2 des sekundären Netzes sendet. Alternativ könnte stattdessen der Knoten S2 des sekundären Netzes beim Empfang der LocalNotify-Nachricht die Verbindung selbst entsprechend dem Prozess nach 3 erzeugen, eine weitere Notify-Nachricht (des sekundären Netzes) erzeugen (die durch die gestrichelte Linie in 12 gezeigt ist), die er zum Knoten S1 sendet, die ihn selbst als subject-Knoten benennt. Die Notify-Nachricht wird dann im Knoten S1 verarbeitet, der dann den Prozess nach 3 verwendet. Diese Option umfasst eine zusätzliche Nachricht, besitzt aber den Vorteil, dass, wenn der Prozess nach 3 ausgeführt wird, die Notify-Nachricht tatsächlich durch den Knoten gesendet worden ist, dessen Adresse sich im subject-Feld der Nachricht befindet, wobei der subject-Knoten folglich inhärent als immer noch vorhanden bestätigt wird.
  • 14, Schritt 1405: Der empfangende Knoten setzt das Etikett des subject-Knotens in die Koordinaten um und berechnet, welche der Nahverbindungen, die er aufgezeichnet hat, zu einem Knoten-Etikett führt, dessen Koordinaten sich am nächsten an jenen des subject-Knotens im virtuellen Raum befinden. Der relevante Knoten wird als der nearest-Knoten bezeichnet;
    Schritt 1415: Der empfangende Knoten vergleicht den Abstand zwischen seinen eigenen Koordinaten und den Koordinaten für den subject-Knoten mit dem Abstand zwischen den Koordinaten für den nearest-Knoten und den Koordinaten für den subject-Knoten.
  • Falls im Schritt 1415 festgestellt wird, dass der Abstand zwischen dem empfangenden Knoten und dem subject-Knoten der gleiche oder kleiner ist, fügt der empfangende Knoten das Etikett und die Adresse des subject-Knotens als eine Verbindung in seinen eigenen Nahverbindungssatz ein ((Schritt 1420): dieser Prozess ist im Folgenden weiter unter Bezugnahme auf 16 erörtert), sendet er eine Notify-Nachricht, die das Etikett und die Adresse des empfangenden Knotens enthält, zu dem subject-Knoten (Schritt 1430) und sendet er eine Notify-Nachricht, die das Etikett und die Adresse des subject-Knotens enthält, zu dem nearest-Knoten (Schritt 1435).
  • Falls im Schritt 1415 festgestellt wird, dass der Abstand zwischen dem nearest-Knoten und dem subject-Knoten größer ist, kehrt der empfangende Knoten zum Schritt 1435 zurück, in dem er eine Notify-Nachricht, die das Etikett und die Adresse des subject-Knotens enthält, zu dem nearest-Knoten sendet.
  • 16 zeigt ausführlich, wie sich ein Knoten verhält, wenn er seine Nahverbindungen aktualisiert. Er fügt die neue Verbindung zu seinen Nahverbindungen hinzu und entfernt alle Nahverbindungen, die durch diese Verbindung verdrängt werden.
  • In 16 kann ein Knoten eine neue Verbindung zu seiner Liste der Nahverbindungen hinzufügen müssen, z. B. im Ergebnis des Schrittes 1420 in 14.
  • Schritt 1600: Der aktualisierende Knoten (d. h. ein Knoten, der eine Aktualisierung seines Nahverbindungssatzes ausführt), besitzt das Etikett und die Adresse eines Knotens für eine neue Verbindung;
    Schritt 1605: Der aktualisierende Knoten identifiziert alle vorhandenen Verbindungen, die sich auf Knoten beziehen, die näher am neuen Knoten als am aktualisierenden Knoten sind. Diese identifizierten Verbindungen sind zu verdrängen. Um diese Verbindungen zu identifizieren, berechnet der aktualisierende Knoten für jede vorhandene Verbindung die Abstände zwischen den Koordinaten für den neuen Knoten und den Koordinaten für die in seinen vorhandenen Verbindungen spezifizierten Knoten. Er vergleicht jeden dieser Abstände mit dem Abstand zwischen seinen eigenen Koordinaten und den Koordinaten für den in der entsprechenden vorhandenen Verbindung spezifizierten Knoten;
    Schritt 1610: Alle Verbindungen, bei denen der Abstand in Bezug auf den neuen Knoten kleiner als der Abstand in Bezug auf den aktualisierenden Knoten ist, werden aus den Nahverbindungen entfernt;
    Schritt 1620: Der aktualisierende Knoten fügt eine Verbindung für den neuen Knoten zu seinen Nahverbindungen hinzu.

Claims (20)

  1. Computernetz, das Knoten enthält und umfasst: – erste Wiedergewinnungsmittel, die in Reaktion auf die Eingabe eines Etiketts die Adresse eines mit diesem Etikett übereinstimmenden Knotens identifizieren; – zweite Wiedergewinnungsmittel, die so beschaffen sind, dass sie eine durch die ersten Wiedergewinnungsmittel identifizierte Adresse empfangen und in Reaktion darauf so betreibbar sind, dass sie die Adressen weiterer Knoten, die mit demselben Etikett übereinstimmen, identifizieren; wobei jedem Knoten, der mit einem gegebenen Etikett übereinstimmt, ein Datenspeicherbereich zugeordnet ist, der die Adresse anderer Knoten, die mit demselben Etikett übereinstimmen, enthält, und wobei jeder solche Knoten in Reaktion auf Abfragenachrichten eine die Adressen der Liste enthaltende Nachricht zurückleitet; und wobei die zweiten Wiedergewinnungsmittel so betreibbar sind, dass sie eine Abfragenachricht zu der durch die ersten Wiedergewinnungsmittel identifizierten Adresse senden und bei Empfang einer Antwort Abfragenachrichten iterativ zu Adressen senden, die in der Antwort auf jene Abfragenachricht oder gegebenenfalls in einer Antwort auf eine nachfolgende Abfragenachricht enthalten sind.
  2. Computernetz nach Anspruch 1, bei dem die ersten Wiedergewinnungsmittel durch ein primäres Netz von virtuellen Knoten gebildet ist, wobei jeder Knoten durch eine Liste von Verbindungen zu anderen Knoten des sekundären Netzes definiert ist und wobei jeder Eintrag in der Liste ein Etikett und eine Adresse des jeweiligen anderen Knotens enthält; und bei dem jeder Knoten Mittel enthält, die in Reaktion auf den Empfang einer ein Etikett enthaltenden Anforderungsnachricht die Anforderungsnachricht in dem Netz verbreiten, und Mittel enthält, die in Reaktion auf den Empfang einer Anforderungsnachricht, die ein Etikett enthält, das mit dem Etikett des sie empfangenden Knotens übereinstimmt, eine Antwortnachricht erzeugen.
  3. Computernetz nach Anspruch 1 oder 2, bei dem die zweiten Wiedergewinnungsmittel durch ein sekundäres Netz von virtuellen Knoten gebildet ist, wobei jeder Knoten durch eine Liste von Verbindungen zu anderen Knoten des primären Netzes definiert ist, wobei jeder Eintrag in der Liste eine Adresse des entsprechenden anderen Knotens enthält; und bei dem jeder Knoten Mittel enthält, die in Reaktion auf den Empfang einer Anforderungsnachricht eine Antwortnachricht erzeugen, die die Adressen der Liste enthält.
  4. Computernetz nach Anspruch 3, wenn abhängig von Anspruch 2, bei dem die Antwortnachricht, die durch einen Knoten des primären Netzes erzeugt wird, die Adresse jenes Knotens des sekundären Netzes enthält, die dem die Antwortnachricht erzeugenden Knoten zugeordnet ist.
  5. Computernetz nach Anspruch 3, wenn abhängig von Anspruch 2, oder nach Anspruch 4, bei dem: jeder Knoten des primären Netzes Mittel enthält, die so betreibbar sind, dass sie exploratorische Nachrichten initiieren und verbreiten, wovon jede das Etikett und die Adresse des initiierenden Knotens des primären Netzes enthält; und jeder Knoten bei Empfang einer exploratorischen Nachricht, die ein Etikett enthält, das mit jenem des empfangenden Knotens übereinstimmt, und eine Adresse enthält, die nicht mit jener des empfangenden Knotens übereinstimmt, eine Meldenachricht erzeugt, um zu dem sekundären Netz eine Verbindung hinzuzufügen, wobei die Meldenachricht den die exploratorische Nachricht initiierenden Knoten identifiziert und die Adresse des Knotens des sekundären Netzes enthält, das dem empfangenden Knoten zugeordnet ist.
  6. Computernetz nach Anspruch 5, bei dem die Meldenachricht als Ziel die Adresse des initiierenden Knotens enthält und der initiierende Knoten bei ihrem Empfang so betreibbar ist, dass er zu dem Knoten des dem initiierenden Knoten zugeordneten sekundären Netzes eine Nachricht weiterleitet, die die Hinzufügung einer Verbindung zwischen sich und dem Knoten, der die in der Meldenachricht enthaltene Adresse besitzt, anfordert.
  7. Computernetz nach einem der Ansprüche 1 bis 6, bei dem jeder Knoten des sekundären Netzes Verarbeitungsmittel enthält, die so programmiert sind, dass sie die folgenden Operationen ausführen: Empfangen von Nachrichten; Antworten auf Nachrichten, die Informationen über die Inhalte der Liste anfordern; Erfüllen empfangener Anforderungen, um eine Adresse aus der Liste zu entfernen und um eine weitere Adresse in die Liste einzufügen; und in Reaktion auf den Empfang einer Nachricht, die eine Verbindung zwischen einem ersten Knoten und einem zweiten Knoten anfordert: (A) Erzeugen einer Nachricht zu dem zweiten Knoten, die Informationen über die Inhalte seiner Liste anfordert; (B) Bestimmen, ob sowohl der ersten Knoten als auch der zweite Knoten in jedem Fall eine Anzahl von Adressen in seiner Liste hat, die kleiner als eine vorgegebene Anzahl ist; (C) falls diese Bedingung erfüllt ist, Einfügen der Adresse des zweiten Knotens in seine Liste und Erzeugen einer Nachricht zu dem zweiten Knoten, die den zweiten Knoten auffordert, zu seiner Liste die Adresse des ersten Knotens hinzuzufügen; (D) falls diese Bedingung nicht erfüllt ist, Bestimmen, ob der erste Knoten eine Anzahl von Adressen in seiner Liste hat, die um wenigstens zwei kleiner als die vorgegebene Anzahl ist, und wenn ja: (a) Auswählen der Adresse eines dritten Knotens aus der Liste des zweiten Knotens; (b) Einfügen der Adresse des zweiten Knotens in die Liste des ersten Knotens und Einfügen der Adresse des dritten Knotens in die Liste des ersten Knotens; (c) Erzeugen einer Nachricht zu dem zweiten Knoten, die das Entfernen der Adresse des dritten Knotens aus der Liste des zweiten Knotens und das Einfügen der Adresse des ersten Knotens fordert; und (d) Erzeugen einer Nachricht zu dem dritten Knoten, die das Entfernen der Adresse des zweiten Knotens aus der Liste des dritten Knotens und das Einfügen der Adresse des Knotens fordert.
  8. Verfahren zum Betreiben eines Computernetzes, das Knoten enthält, wobei das Verfahren umfasst: – in Reaktion auf die Eingabe eines Etiketts Ausführen einer ersten Wiedergewinnungsoperation, um die Adresse eines mit diesem Etikett übereinstimmenden Knotens zu identifizieren; – in Reaktion auf eine durch die ersten Wiedergewinnungsmittel identifizierte Adresse Ausführen einer zweiten Wiedergewinnungsoperation, um die Adressen weiterer Knoten, die mit demselben Etikett übereinstimmen, zu identifizieren; wobei jedem Knoten, der mit einem gegebenen Etikett übereinstimmt, ein Datenspeicherbereich zugeordnet ist, der die Adressen anderer Knoten enthält, die mit demselben Etikett übereinstimmen, und in Reaktion auf Abfragenachrichten eine die Adressen der Liste enthaltende Nachricht zurückleitet; und wobei die zweite Wiedergewinnungsoperation das Senden einer Abfragenachricht zu der durch die ersten Wiedergewinnungsmittel identifizierten Adresse und bei Empfang einer Antwort das iterative Senden von Abfragenachrichten zu Adressen, die in der Antwort auf jene Abfragenachricht oder gegebenenfalls in einer Antwort einer nachfolgenden Abfragenachricht enthalten sind, umfasst.
  9. Verfahren nach Anspruch 8, bei dem die erste Wiedergewinnungsoperation ein primäres Netz von virtuellen Knoten verwendet, wovon jeder Knoten durch eine Liste von Verbindungen zu anderen Knoten des primären Netzes definiert ist, wobei jeder Eintrag in der Liste ein Etikett und eine Adresse des entsprechenden anderen Knotens enthält; und das die folgenden Schritte umfasst: – Empfangen einer Anforderungsnachricht, die ein Etikett enthält; – Verbreiten der Anforderungsnachricht in dem Netz; und – bei Ankunft einer Anforderungsnachricht bei einem Knoten, die ein Etikett enthält, das mit dem Etikett des sie empfangenden Knotens übereinstimmt, Erzeugen einer Antwortnachricht.
  10. Verfahren nach Anspruch 8 oder 9, bei dem die zweite Wiedergewinnungsoperation ein sekundäres Netz von virtuellen Knoten verwendet, wovon jeder Knoten durch eine Liste von Verbindungen zu anderen Knoten des sekundären Netzes definiert ist, wobei jeder Eintrag in der Liste eine Adresse des entsprechenden anderen Knotens enthält; und das bei Ankunft einer Anforderungsnachricht bei einem Knoten das Erzeugen einer Antwortnachricht umfasst, die die Adressen der Liste jenes Knotens enthält.
  11. Verfahren nach Anspruch 10, wenn abhängig von Anspruch 9, bei dem die Antwortnachricht, die durch einen Knoten des primären Netzes erzeugt wird, die Adresse jenes Knotens des sekundären Netzes enthält, die dem die Antwortnachricht erzeugenden Knoten zugeordnet ist.
  12. Verfahren nach Anspruch 10, wenn abhängig von Anspruch 9, oder nach Anspruch 1, bei dem jeder Knoten des primären Netzes Mittel umfasst, die so betreibbar sind, dass sie exploratorische Nachrichten initiieren und verbreiten, wovon jede das Etikett und die Adresse des initiierenden Knotens des primären Netzes enthält; und das umfasst: bei Ankunft einer exploratorischen Nachricht bei dem Knoten, die ein Etikett enthält, das mit jenem des empfangenden Knotens übereinstimmt, und eine Adresse enthält, die nicht mit jener des empfangenden Knotens übereinstimmt, Erzeugen einer Meldenachricht zum Hinzufügen einer Verbindung zu dem sekundären Netz, wobei die Meldenachricht den Knoten identifiziert, der die exploratorische Nachricht initiiert, und die Adresse des Knotens des sekundä ren Netzes enthält, die dem empfangenden Knoten zugeordnet ist.
  13. Verfahren nach Anspruch 12, bei dem die Meldenachricht als Ziel die Adresse des initiierenden. Knotens enthält und der initiierende Knoten dann, wenn er sie empfängt, zu dem Knoten des sekundären Netzes, dem der initiierende Knoten zugeordnet ist, eine Nachricht weiterleitet, die die Hinzufügung einer Verbindung zwischen sich und dem Knoten, der die in der Meldenachricht enthaltende Adresse besitzt, anfordert.
  14. Verfahren nach einem der Ansprüche 10 bis 13, das ferner umfasst: (i) Empfangen einer oder der Meldenachricht, die eine Verbindung zwischen einem ersten Knoten und einem zweiten Knoten des sekundären virtuellen Netzes anfordert; (ii) Bestimmen, ob sowohl der erste als auch der zweite Knoten in jedem Fall eine Anzahl von Adressen in seiner Liste hat, die kleiner als eine vorgegebene Anzahl ist; (iii) falls diese Bedingung erfüllt ist, Einfügen der Adresse des ersten Knotens in die Liste des zweiten Knotens und Einfügen der Adresse des zweiten Knotens in die Liste des ersten Knotens; (iv) falls diese Bedingung nicht erfüllt ist, Bestimmen, ob der erste Knoten eine Anzahl von Adressen in seiner Liste hat, die um wenigstens zwei kleiner als die vorgegebene Anzahl: ist, und wenn ja: (a) Auswählen der Adresse eines dritten Knotens aus der Liste des zweiten Knotens; (b) Entfernen der Adresse des dritten Knotens aus der Liste des zweiten Knotens; (c) Entfernen der Adresse des zweiten Knotens aus der Liste des dritten Knotens; und (d) Einfügen der Adresse des zweiten Knotens in die Liste des ersten Knotens und Einfügen der Adresse des dritten Knotens in die Liste des ersten Knotens; (e) Einfügen der Adresse des ersten Knotens in die Liste des zweiten Knotens und Einfügen der Adresse des ersten Knotens in die Liste des dritten Knotens.
  15. Verfahren nach Anspruch 14, bei dem die eine Verbindung anfordernde Nachricht bei dem ersten Knoten empfangen wird und bei dem im Schritt (iii): die Adresse des zweiten Knotens in die Liste des ersten Knotens eingefügt wird, begleitet von einer Markierung, die angibt, dass sie nicht bestätigt ist; eine Nachricht von dem ersten Knoten zu dem zweiten Knoten gesendet wird, die anfordert, dass der zweite Knoten die Adresse des ersten Knotens zu den Verbindungen des zweiten Knotens hinzufügt; bei dem zweiten Knoten die Adresse somit hinzugefügt wird und eine Bestätigungsnachricht zu dem ersten Knoten gesendet wird; und bei dem ersten Knoten bei Empfang der Quittierungsnachricht die "nicht bestätigte" Markierung entfernt wird.
  16. Verfahren nach Anspruch 15, bei dem ein Knoten bei Empfang einer Nachricht, die ihn auffordert, zu seiner Liste; die Adresse eines bestimmten Knotens hinzuzufügen, zunächst eine Nachricht zu dem bestimmten Knoten sendet, die eine Kopie der Liste des bestimmten Knotens anfordert, und dann die Anforderung nur dann erfüllt, wenn er von dem bestimmten Knoten eine Liste empfängt, die die Adresse des die Anforderung empfangenden Knotens enthält.
  17. Verfahren nach einem der Ansprüche 14 bis 16, bei dem die eine Verbindung anfordernde Nachricht bei dem ersten Knoten empfangen wird und bei dem der erste Knoten zu dem zweiten Knoten eine Anforderung einer Kopie der Liste des zweiten Knotens sendet; der zweite Knoten die angeforderte Kopie zu dem ersten Knoten sendet; der Schritt (iv) (a) des Auswählens der Adresse eines dritten Knotens aus der Liste bei dem ersten Knoten ausgeführt wird; und die Schritte (iv) (a) und (b) in der Weise ausgeführt werden, dass: der erste Knoten die Adresse des zweiten Knotens und die Adresse des dritten Knotens zu der Liste des ersten Knotens hinzufügt, was in jedem Fall von einer Markierung begleitet wird, die angibt, dass sie nicht bestätigt ist; der erste Knoten zu dem zweiten Knoten eine Nachricht sendet, die ihn auffordert, aus seiner Liste die Adresse des dritten Knotens zu entfernen und sie durch die Adresse des ersten Knotens zu ersetzen; der erste Knoten zu dem dritten Knoten eine Nachricht sendet, die ihn auffordert, aus seiner Liste die Adresse des zweiten Knotens zu entfernen und sie durch die Adresse des ersten Knotens zu ersetzen; der zweite Knoten bei Empfang einer solchen Nachricht aus seiner Liste die Adresse des dritten Knotens entfernt, sie durch die Adresse des ersten Knotens ersetzt und eine Bestätigungsnachricht zu dem ersten Knoten sendet; der dritte Knoten bei Empfang einer solchen Nachricht aus seiner Liste die Adresse des zweiten Knotens entfernt, sie durch die Adresse des ersten Knotens ersetzt und eine Bestätigungsnachricht zu dem ersten Knoten sendet; der erste Knoten bei Empfang der Bestätigungsnachricht von dem zweiten oder dem dritten Knoten die entsprechende "nicht bestätigte" Markierung aus seiner Liste entfernt.
  18. Verfahren nach Anspruch 17, bei dem ein Knoten bei Empfang einer Nachricht, die ihn auffordert, aus seiner Liste die Adresse eines weiteren Knotens zu entfernen und diese durch die Adresse eines bestimmten Knotens zu ersetzen, zunächst eine Nachricht zu dem bestimmten Knoten sendet, die eine Kopie der Liste des bestimmten Knotens anfordert, und dann die Anforderung nur dann erfüllt, wenn er von dem bestimmten Knoten eine Liste empfängt, die die Adresse des die Anforderung empfangenden Knotens enthält.
  19. Verfahren nach Anspruch 16 oder 18, bei dem die Listenanforderungsnachricht zu dem bestimmten Knoten und eine Antwort auf eine solche Nachricht über einen Zwischenknoten in der Weise gesendet werden, dass die Adresse des Knotens, der die Listenanforderungsnachricht sendet, dem bestimmten Knoten nicht mitgeteilt wird.
  20. Verfahren nach einem der Ansprüche 14 bis 19, bei dem jeder Knoten außerdem Mittel zum Speichern wenigstens einer Reserveverbindung besitzt und das umfasst: falls eine Nachricht empfangen wird, die eine Verbindung zwischen einem ersten Knoten und einem zweiten Knoten anfordert, wenn der erste Knoten eine Anzahl von Adressen in seiner Liste hat, die gleich der vorgegebenen Anzahl ist, Einfügen der Adresse des zweiten Knotens in den Reserveverbindungsspeicher; und bei Empfang einer späteren Nachricht, die eine Verbindung zwischen dem ersten Knoten und einem weiteren Knoten anfordert, Weiterleiten der Nachricht zu der oder zu einer Adresse, die aus den Reserveverbindungsspeichermitteln des ersten Knotens wiedergewonnen wird.
DE602004005059T 2003-09-25 2004-09-13 Computernetzwerk zum identifizieren mehrerer knoten, mit demselben etikett übereinstimmen Active DE602004005059T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0322494 2003-09-25
GBGB0322494.6A GB0322494D0 (en) 2003-09-25 2003-09-25 Computer networks
PCT/GB2004/003941 WO2005032104A1 (en) 2003-09-25 2004-09-13 A computer network for identifying multiple nodes matching the same label

Publications (2)

Publication Number Publication Date
DE602004005059D1 DE602004005059D1 (de) 2007-04-12
DE602004005059T2 true DE602004005059T2 (de) 2007-07-12

Family

ID=29286842

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602004005059T Active DE602004005059T2 (de) 2003-09-25 2004-09-13 Computernetzwerk zum identifizieren mehrerer knoten, mit demselben etikett übereinstimmen

Country Status (10)

Country Link
US (1) US7568049B2 (de)
EP (1) EP1665735B1 (de)
JP (1) JP4685776B2 (de)
KR (1) KR101081147B1 (de)
CN (1) CN100559794C (de)
AT (1) ATE355694T1 (de)
CA (1) CA2517278A1 (de)
DE (1) DE602004005059T2 (de)
GB (1) GB0322494D0 (de)
WO (1) WO2005032104A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0322491D0 (en) * 2003-09-25 2003-10-29 British Telecomm Virtual networks
GB0322494D0 (en) 2003-09-25 2003-10-29 British Telecomm Computer networks
JP4396242B2 (ja) * 2003-11-28 2010-01-13 富士ゼロックス株式会社 文書リンク構造情報作成装置及び方法
US20070160071A1 (en) * 2005-12-30 2007-07-12 Overtoom Eric J Framework for a wireless communication device
JP4696089B2 (ja) * 2007-03-30 2011-06-08 三菱電機インフォメーションシステムズ株式会社 分散ストレージシステム
US8660045B2 (en) * 2007-12-17 2014-02-25 Telefonaktiebolaget Lm Ericsson (Publ) Mobile core network node redundancy
US8583771B2 (en) * 2008-07-01 2013-11-12 Cisco Technology, Inc. Mapping human-meaningful parameters to network-meaningful parameters to permit user to establish traffic importance in home network
CN102637200B (zh) * 2012-03-07 2014-05-14 江苏引跑网络科技有限公司 一种使多级关联数据分配到集群相同节点的方法
US10733067B1 (en) * 2018-04-14 2020-08-04 Juniper Networks, Inc. Apparatus, system, and method for efficiently deploying backup virtual network devices

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3901806B2 (ja) * 1997-09-25 2007-04-04 富士通株式会社 情報管理システム及び二次サーバ
US6266322B1 (en) 1998-02-12 2001-07-24 At&T Corp. Dimensioning bandwidth and connection admission control for elastic traffic in high-speed communication networks
US6856627B2 (en) 1999-01-15 2005-02-15 Cisco Technology, Inc. Method for routing information over a network
WO2001041380A2 (en) 1999-11-30 2001-06-07 Siemens Technology-To-Business Center, Llc Characteristic routing
US20020028656A1 (en) 2000-02-02 2002-03-07 Yechiam Yemini Method and apparatus for providing forwarding and replication services on a dynamically addressed network
US7006453B1 (en) 2000-03-14 2006-02-28 Lucent Technologies Inc. Location based routing for mobile ad-hoc networks
US6757242B1 (en) 2000-03-30 2004-06-29 Intel Corporation System and multi-thread method to manage a fault tolerant computer switching cluster using a spanning tree
US6944681B1 (en) 2000-09-08 2005-09-13 Fisher-Rosemount Systems, Inc. Probing algorithm for foundation fieldbus protocol
JP3584873B2 (ja) 2000-10-31 2004-11-04 ヤマハ株式会社 通信制御装置及び通信システム
US7072982B2 (en) 2000-11-22 2006-07-04 Microsoft Corporation Universal naming scheme for peer to peer resources
US20020145978A1 (en) 2001-04-05 2002-10-10 Batsell Stephen G. Mrp-based hybrid routing for mobile ad hoc networks
US7231463B2 (en) 2002-01-04 2007-06-12 Intel Corporation Multi-level ring peer-to-peer network structure for peer and object discovery
GB0322491D0 (en) 2003-09-25 2003-10-29 British Telecomm Virtual networks
GB0322494D0 (en) 2003-09-25 2003-10-29 British Telecomm Computer networks
GB0328888D0 (en) 2003-12-12 2004-01-14 British Telecomm Distributed computer system

Also Published As

Publication number Publication date
JP2007507031A (ja) 2007-03-22
JP4685776B2 (ja) 2011-05-18
KR101081147B1 (ko) 2011-11-07
CN100559794C (zh) 2009-11-11
CN1768519A (zh) 2006-05-03
KR20060056888A (ko) 2006-05-25
DE602004005059D1 (de) 2007-04-12
EP1665735B1 (de) 2007-02-28
US20060259640A1 (en) 2006-11-16
ATE355694T1 (de) 2006-03-15
US7568049B2 (en) 2009-07-28
WO2005032104A1 (en) 2005-04-07
EP1665735A1 (de) 2006-06-07
GB0322494D0 (en) 2003-10-29
CA2517278A1 (en) 2005-04-07

Similar Documents

Publication Publication Date Title
DE602005005471T2 (de) Peer-to-peer-netze
DE60317925T2 (de) Steuerung von netzwerkverkehr in einer peer-to-peer umgebung
DE602005001883T2 (de) Überlagerte Daten, Selbstorganisierte überlagerte Metadaten, und Mehrfachsendung auf Anwendungsebene
DE60301783T2 (de) Verfahren und system zur gleichrangigen kommunikation in einer netzwerkumgebung
DE60200466T2 (de) Ein adaptiver Pfad-Erkennungs-Prozess zum Routen von Datenpaketen in einem Mehrknotennetzwerk
DE69829830T2 (de) Weglenkungsverfahren unter Anwendung eines genetischen Algorithmus
DE69433126T2 (de) Verfahren zum Einrichten von virtuellen Mehrfachsendeverbindungen
DE602004011579T2 (de) Adress-Selbstkonfiguration in Ad-hoc Netzen
DE102005032479B4 (de) Fernsteuerung eines Vermittlungsknotens in einem Stapel von Vermittlungsknoten
DE60125954T2 (de) Adressierung und routen von datenpaketen in einem computer-netzwerk mit hilfe von inhaltsbeschreibenden labeln
DE60132718T2 (de) System und methode zum auffinden von informationsobjekten und informationsobjektspeichern in rechnernetzen
DE60313371T2 (de) Verwendung von baumartigen "Bitmap" Datenstrukturen
DE69629984T2 (de) Leitweglenkungsverwaltung in einem Paketkommunikationsnetz
DE60316745T2 (de) Erleichterung der beschleunigten Verarbeitung von Nachrichten des Internet Group Management Protokolls
EP1423964B1 (de) Skalierbares peer-to-peer-netzwerk mit einem verzeichnisdienst
DE60207368T2 (de) Verfahren und Vorrichtung zur automatischen Erkennung von Netzelementen mit Datenübertragungsfähigkeiten
DE60129480T2 (de) Technik zur bestimmung von konnektivitätslösungen für netzwerkelemente
DE602004004601T2 (de) Verteilung von Mitgliedschaftsinformationen für Mehrfachteilnehmersitzungen auf der Applikationsebene
DE102017125649A1 (de) Verfahren zur Datenkommunikation unter Verwendung von Random-Netzwerkadressen und eine entsprechende Vorrichtung
DE10296466T5 (de) Protokoll für ein sich selbst organisierendes Netzwerk, das eine logische Spann-Baum-Zentralverbindung verwendet
DE102015102871A1 (de) Technologien für verteilten Leitweglenkungstabellennachschlag
DE69815819T2 (de) Adaptives verteiltes informationsnetzwerk
DE602004005242T2 (de) Zentralisierte konfiguration von verwalteten objekten des link-scope-typs in netzwerken, die auf dem internet-protokoll (ip) basieren
DE60130844T2 (de) Autonomes OSPF-System mit einem in zwei Teilbereiche getrennten Hauptnetz
DE602004005059T2 (de) Computernetzwerk zum identifizieren mehrerer knoten, mit demselben etikett übereinstimmen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition