(57)【要約】  コンピュータにより実施される本発明は、トポロジの変化を検出し、該変化を発生順に並べ、該変化を反映した新しいトポロジを構成する、方法、対応するシステム及びネットワーク内の構成を提供する。本発明は、現在、特にネットワークトポロジが動的であるとき、つまりリンクが任意の時間に障害し回復するとき、各ネットワークノードにおけるネットワークトポロジの認識を保つことに伴う問題を解決する。トポロジ更新は、ネットワーク内で、特にノード及びリンクを伴い、何らかの変化が生じたときに起動されるので、イベント駆動型である。イベントは、トポロジ変化をネットワーク内の他のノードに報告させる。メッセージのタイムスタンプは、メッセージが最近の更新として正しく適用されること又は廃棄されることを可能にする。各商人ノードが、リンク及びノード障害にも拘わらず、ネットワークトポロジの正しいビューを維持することを可能にするアルゴリズムが提供される。
2020505839.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークトポロジのネットワークの認識を更新する方法であって、当該方法は、
（ａ）ネットワークのトポロジの変化を組み込んだトポロジデータセットが、前記ネットワーク内の第１ノードにより受信されるステップであって、前記トポロジデータセットは時間指示に関連付けられる、ステップと、
（ｂ）前記第１ノードが、時間指示に関連付けられたトポロジデータセットを有するステップと、
を含み、前記第１ノードにより受信された前記トポロジデータセットの前記時間指示が前記第１ノードのトポロジデータセットの時間指示より新しい場合、前記第１ノードのトポロジデータセットは前記第１ノードにより受信された前記トポロジデータセットにより更新される、方法。
【請求項２】
前記方法は、前記第１ノードが、前記ネットワークへ、更新した第１ノードトポロジデータセットを送信するステップ、を更に提供する請求項１に記載の方法。
【請求項３】
前記方法は、ステップ（ｂ）の後に、第２ノードトポロジデータセットが前記第１ノードトポロジデータセットへの更新をもたらすとき、前記第１ノードが、前記ネットワークへ、前記更新した第１ノードのトポロジデータセットを送信するステップ、を更に提供する請求項１又は２に記載の方法。
【請求項４】
前記第１ノードは隣接ノードを有し、前記隣接ノードは、前記第１ノードの所与の隣接指標の範囲内にあるノードであり、前記第１ノードは近隣ノードを有し、前記近隣ノードは、前記第１ノードの前記所与の隣接指標の外側且つ前記第１ノードの所与の近隣指標の範囲内にあるノードである、請求項２又は３に記載の方法。
【請求項５】
前記第１ノードは、前記更新された第１ノードトポロジデータセットを、隣接ノード及び近隣ノードのみへ送信する、請求項４に記載の方法。
【請求項６】
前記第１ノードにより受信された前記トポロジデータセットに関連付けられた前記時間指示は、前記トポロジデータセットが提供されたノードにより生成される、請求項１乃至５のいずれかに記載の方法。
【請求項７】
前記時間指示は、前記トポロジデータセットを提供するノードの時間ベクトルクロックにより提供される、請求項１乃至６のいずれかに記載の方法。
【請求項８】
前記第１ノードのトポロジデータセットは、以下：
（ａ）前記第１ノードのトポロジデータセット内にリストされたノード間の１つ以上のリンクの動作状態を変更する、
（ｂ）前記第１ノードのトポロジデータセット内にリストされないノード間の１つ以上のリンクを追加する、
（ｃ）前記第１ノードのトポロジデータセット内にリストされたノード間の１つ以上のリンクを削除する、
のうちの１つ以上により更新される、請求項１乃至７のいずれかに記載の方法。
【請求項９】
前記第１ノードのトポロジデータが更新される条件は、前記ネットワーク内のノードから受信した前記トポロジデータセットが、前記第１ノードのトポロジデータセットに含まれない１つ以上のリンクを含むことであり、並びに更なる条件は、前記第１ノードのトポロジデータセットが、ノードの所与の指標の範囲内にある前記ネットワーク内の該ノードから受信した前記トポロジデータセット内のリンクに関してのみ更新されることである、請求項１乃至８のいずれかに記載の方法。
【請求項１０】
前記方法は、前記ネットワークの前記トポロジの変化を組み込んでいるトポロジデータセットが、前記ネットワーク内の第２ノードにより、前記ネットワーク内のイベントの検出に起因して提供されることを更に提供する、請求項１乃至９のいずれかに記載の方法。
【請求項１１】
前記イベントは、前記ネットワーク内のノードにより前記第２ノードへ送信されたメッセージの中断により検出される、請求項１０に記載の方法。
【請求項１２】
前記イベントの検出は、前記第２ノードの前記トポロジデータセットの変化を生じ、前記第２ノードの前記トポロジデータセットの前記変化は、前記第２ノードが前記ネットワーク内の少なくとも前記第１ノードへ前記トポロジデータセットの前記変化を送信することを提供する、請求項１０又は１１に記載の方法。
【請求項１３】
前記方法は、複数のトポロジデータセットをそれらそれぞれの時間指示に従い順序付けるステップであって、前記順序付けるステップは、前記複数のトポロジデータセットのうちのどれが前記複数のトポロジデータセットのうちで最近のものであるかを確立する、ステップ、を更に含む請求項１乃至１２のいずれかに記載の方法。
【請求項１４】
前記複数のトポロジデータセットのうちの最近のものは、前記第１ノードのトポロジデータセットを更新するために使用される、請求項１３に記載の方法。
【請求項１５】
前記方法は、最近の時間指示に関連付けられていない前記トポロジデータセットが使用されない又は廃棄されることを更に提供する、請求項１３又は１４に記載の方法。
【請求項１６】
前記更新された第１ノードのトポロジデータセットが、前の第１ノードのトポロジデータセットを置換する、請求項１乃至１５のいずれかに記載の方法。
【請求項１７】
請求項１乃至１６のいずれかの方法を実施するよう構成されたコンピュータにより実装されるシステム。
【請求項１８】
前記システムは、
（ａ）前記ネットワークの前記トポロジの変化の検出のための検出部であって、前記検出部は、１つ以上のノード及び／又は１つ以上のリンクに影響を与える変化を検出する、検出部と、
（ｂ）前記ネットワーク内で通信された更新されたトポロジデータセットをソートする更新ソート部と、
（ｃ）トポロジデータセットが前記ネットワーク内の他のノードからのトポロジデータセットにより更新されるように、トポロジデータセットを処理するトポロジデータセット処理部と、
（ｄ）前記ネットワークの前記トポロジの変化の認識が前記ネットワーク内で共有されるようにする、更新されたトポロジデータセットのためのトポロジ更新通信部と、
を含む請求項１７に記載のコンピュータにより実装されるシステム。
【請求項１９】
ノードのネットワーク内の構成であって、前記ネットワークのトポロジの変化に関して前記ネットワークを更新し、前記構成は、
（ａ）前記ネットワークの前記トポロジの変化の検出のための検出部と、
（ｂ）前記ネットワーク内で通信された更新されたトポロジデータセットをソートする更新ソート部と、
（ｃ）トポロジデータセットの処理のためのトポロジデータセット処理部と、
（ｄ）前記ネットワークの前記トポロジの変化の認識が前記ネットワーク内で共有されるようにする、更新されたトポロジデータセットのためのトポロジ更新通信部と、
を含む構成。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、システムトポロジを更新するシステムトポロジ及び方法に関し、特に、変化するピアツーピア（Ｐ２Ｐ）システムトポロジ及び変化するＰ２Ｐシステムトポロジを更新する方法に関する。本発明は、具体的に、限定ではないが、分散型システム及びトランザクション及び／又はブロックチェーンを実装するために該分散型システムを用いる方法に適する。
【背景技術】
【０００２】
本願明細書で、用語「ブロックチェーン」は、あらゆる形式の電子的な、コンピュータに基づく、分散台帳を含むよう使用される。これらは、限定ではないが、ブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳、及びそれらの変形を含む。最も広く知られているブロックチェーン技術の用途はビットコイン台帳であるが、他のブロックチェーンの実装が提案され開発されている。ビットコインは便宜上及び説明を目的として本願明細書において言及されるが、本発明はビットコインのブロックチェーンと共に使用することに限定されず、代替のブロックチェーンの実装及びプロトコルが本発明の範囲に含まれることに留意すべきである。
【０００３】
ブロックチェーンは、ブロックにより構成される、コンピュータに基づく非集中型の分散型システムとして実装される総意に基づく電子台帳である。また、ブロックはトランザクションにより構成される。各トランザクションは、ブロックチェーンシステム内で参加者間のデジタルアセットの制御の転送を符号化するデータ構造であり、少なくとも１つのインプット及び少なくとも１つのアウトプットを含む。各ブロックは前のブロックのハッシュを含み、ブロックは共にチェーンになって、その発端からブロックチェーンに書き込まれている全てのトランザクションの永久的な変更不可能なレコードを生成する。トランザクションは、そのインプット及びアウトプットに埋め込まれたスクリプトとして知られる小さなプログラムを含む。スクリプトは、トランザクションのアウトプットがどのように及び誰によりアクセス可能かを指定する。ビットコインプラットフォーム上で、これらのスクリプトは、スタックに基づくスクリプト言語を用いて記述される。
【０００４】
トランザクションがブロックチェーンに書き込まれるために、「検証され」なければならない。ネットワークノード（マイナー）は、各トランザクションが有効であることを保証するために作業を実行し、無効なトランザクションはネットワークから拒否される。ノードにインストールされたソフトウェアクライアントは、自身のロック及びアンロックスクリプトを実行することにより、この検証作業を未使用トランザクション（ＵＴＸＯ）に対して実行する。ロック及びアンロックスクリプトの実行が真と評価した場合、トランザクションは有効であり、トランザクションはブロックチェーンに書き込まれる。したがって、トランザクションがブロックチェーンに書き込まれるためには、トランザクションは、ｉ）トランザクションを受信した第１ノードにより検証され、トランザクションが検証された場合に、ノードは該トランザクションをネットワーク内の他のノードに中継し、ｉｉ）マイナーにより構築された新しいブロックに追加し、ｉｉｉ）マインされ、つまり過去のトランザクションの公開台帳に追加されなければならない。
【０００５】
ブロックチェーン技術は、暗号通貨実装の使用で最も広く知られているが、デジタル起業家が、新しいシステムを実装するために、ビットコインの基づく暗号通貨セキュリティシステム、及びブロックチェーンに格納可能なデータの両方の使用を探索し始めている。ブロックチェーンが、暗号通貨の領域に限定されない自動タスク及びプロセスのために使用できれば、非常に有利である。このようなソリューションは、それらの用途において一層多様でありながら、ブロックチェーンの利点（例えば、永久的、イベントの耐タンパレコード、分散プロセス、等）を利用できる。
【０００６】
現在の研究の一分野は、「スマートコントラクト（smart  contracts）」の実装のためのブロックチェーンの使用である。これらは、機械可読取引又は合意の条件の実行を自動化するために設計されたコンピュータプログラムである。自然言語で記述され得る従来の取引と異なり、スマートコントラクトは、結果を生成するためにインプットを処理できるルールを含み、該結果に依存して動作を実行させることのできる、機械実行可能プログラムである。
【０００７】
ブロックチェーンに関連する関心の他の分野は、ブロックチェーンを介する現実世界のエンティティの表現及び転送のための「トークン」（又は「カラードコイン」）の使用である。潜在的に機密な又は秘密のアイテムは、識別可能な意味又は値を有しないトークンにより表現できる。したがって、トークンは、現実世界のアイテムをブロックチェーンから参照できるようにする識別子として機能する。
【０００８】
ネットワーク内の接続及びルーティングを管理するための、様々な従来の方法が知られている。このような従来の方法の例は以下に簡単に記載される。
【０００９】
ＵＳ２０１４２８６３４４は、ネットワーク内の分散型接続確立及び復旧に関する。接続制約は、ネットワーク上の転送を制御するために使用されるルーティングプロトコルの拡張を用いて送付される。ノードは、トポロジ及び接続データベースを維持し、制約に基づき接続のルートを計算する。ノードは、接続のために計算したルート上にある場合、該接続について転送状態をインストールする。各ノードはネットワークトポロジの一貫したビューを有し、接続に関連付けられた制約を与えられているので、ネットワークにある各ノードは、接続について同じルートを計算する。障害が生じると、ノードは、ネットワーク全体に渡る優先度に基づき接続の復旧パスを計算して、復旧パスがシグナリングされることなく、影響を受けた接続のために復旧パスが生成されるようにする。タイムスタンプは、イベントが到着する順序に関係なく、一貫した順序でノードにより提供されることを可能にするために使用される。
【００１０】
ＥＰ０７５２７９５は、通信ネットワーク内のリンク予約に関する。通信ネットワーク内の接続を設定し、削除し、及び更新する分散型手段が記載される。これは障害が存在するとき、ロバストである。より具体的には、接続のためのパスが計算され、予約要求が、別個のチャネルを通じて、該接続のためのパスのノードのセットの各々へ予約のために同時に送信されて、接続のためにリソースが利用可能かどうかを決定する。接続のためのリンクが利用可能であり及び予約されていることを確認すると、設定メッセージが宛先ノードに到達するまで、設定メッセージが隣接ノード間でバスに沿って順次送信される。各ノードにおける切り替えは、次に、設定メッセージに応答して、接続を確立するために、それら自体を構成する。
【００１１】
ＵＳ２００４１７０１５１は、動的ネットワーク及び動的ネットワークのためのルーティング方法に関する。ルーティング情報がネットワークのノード内のローカルルーティングテーブルに格納されるという条件で、複数のノードを有する動的ネットワークが記載される。ノードは、ローカルルーティングテーブルを更新するために更新要求を他のノードへ送信し、アドレス指定されたノードは、更新されたルーティング情報を有する更新応答を要求側ノードへ送信する。
【発明の概要】
【００１２】
システムトポロジに伴う課題は、例えば新しいノード又はピアがシステムに参加したことにより、及び／又はノード又はピアが動作状態を離れ及び戻ることにより、トポロジ変化が生じるとき、システムが効果的且つ高速に機能する状態に維持されることを保証することである。
【００１３】
したがって、可能な目的の中でも特に、トポロジの変化が効率的及び／又は迅速に検出される、システムトポロジ及び／又はシステムトポロジを更新する方法を含むソリューションを提供することが望ましい。
【００１４】
したがって、可能な目的の中でも特に、システム内でトポロジの変化が効率的及び／又は迅速に通信される、システムトポロジ及び／又はシステムトポロジを更新する方法を含むソリューションを提供することが望ましい。
【００１５】
したがって、可能な目的の中でも特に、トポロジの変化がネットワークを通じて一貫して及び／又は効率的に及び／又は迅速に更新される、システムトポロジ及び／又はシステムトポロジを更新する方法を含むソリューションを提供することが望ましい。
【００１６】
このような改良されたソリューションが考案される。本発明は、添付の請求項において及び／又は本発明の説明において定められる。
【００１７】
本発明の第１の態様によると、ネットワークトポロジのネットワークの認識を更新する方法であって、当該方法は、
（ａ）ネットワークのトポロジの変化を組み込んだトポロジデータセットが、前記ネットワーク内の第１ノードにより受信されるステップであって、前記トポロジデータセットは時間指示に関連付けられる、ステップと、
（ｂ）前記第１ノードが、時間指示に関連付けられたトポロジデータセットを有するステップと、
を含み、前記第１ノードにより受信された前記トポロジデータセットの前記時間指示が前記第１ノードのトポロジデータセットの時間指示より新しい場合、前記第１ノードのトポロジデータセットは前記第１ノードにより受信された前記トポロジデータセットにより更新される、方法が提供される。
【００１８】
前記方法は、特にステップ（ｂ）の後に、前記第１ノードが、前記ネットワークへ、更新した第１ノードトポロジデータセットを送信すること、を更に提供し得る。より望ましくは、前記方法は、特にステップ（ｂ）の後に、第２ノードトポロジデータセットが前記第１ノードトポロジデータセットへの更新をもたらすとき、前記第１ノードが、前記ネットワークへ、前記更新した第１ノードトポロジデータセットを送信するステップ、を更に提供し得る。
【００１９】
前記方法は、前記第１ノードは隣接ノードを有し、前記隣接ノードは、前記第１ノードの所与の隣接指標の範囲内にあるノードであることを提供し得る、並びに、前記第１ノードは近隣ノードを有し、前記近隣ノードは、前記第１ノードの前記所与の隣接指標の外側且つ前記第１ノードの所与の近隣指標の範囲内にあるノードである、ことを提供し得る。前記方法は、前記第１ノードは、前記更新された第１ノードトポロジデータセットを、隣接ノード及び近隣ノードのみへ送信する、ことを更に提供し得る。
【００２０】
前記第１ノードにより受信された前記トポロジデータセットに関連付けられた前記時間指示は、前記トポロジデータセットが提供されたノードにより生成される。前記時間指示は、前記トポロジデータセットが提供されたノードによりトポロジデータセットに関連付けられたタイムスタンプであってよい。前記時間指示は、前記第２ノードによる前記ネットワーク内の変化の検出時間、又は、より望ましくは、ネットワーク内の変化を第１ノードへ第２ノードにより送信する時間の時間指示であってよい。前記時間指示は、前記トポロジデータセットを提供するノードの時間ベクトルクロックにより提供されてよい。
【００２１】
前記方法は、前記第１ノードのトポロジデータセットが、以下：
（ａ）前記第１ノードのトポロジデータセット内にリストされたノード間の１つ以上のリンクの動作状態を変更する、
（ｂ）前記第１ノードのトポロジデータセット内にリストされないノード間の１つ以上のリンクを追加する、
（ｃ）前記第１ノードのトポロジデータセット内にリストされたノード間の１つ以上のリンクを削除する、
のうちの１つ以上により更新される、ことを更に提供し得る。
【００２２】
前記方法は、前記第１ノードトポロジデータが更新される条件が、前記ネットワーク内のノードから受信された前記トポロジデータセットが、前記第１ノードのトポロジデータセット内にない１つ以上のリンクを含むことであることを更に提供し得る。前記方法は、更なる条件が、前記第１ノードのトポロジデータセットが、前記ノードの所与の指標の範囲内にある前記ネットワーク内のノードから受信した前記トポロジデータセット内のこのようなリンクに関してのみ更新されることである、ことを更に提供し得る。
【００２３】
前記方法は、前記ネットワークの前記トポロジの変化を組み込んでいるトポロジデータセットが、前記ネットワーク内の第２ノードにより、前記ネットワーク内のイベントの検出に起因して提供されることを更に提供し得る。前記イベントは、前記ネットワーク内のノードにより前記第２ノードへ送信されたメッセージの中断により検出され得る。前記イベントの検出は、前記第２ノードの前記トポロジデータセットの変化を生じ得る。前記第２ノードの前記トポロジデータセットの変化は、前記第２ノードが前記トポロジデータセットの変化を前記ネットワーク内の少なくとも前記第１ノードへ送信することを提供し得る。
【００２４】
前記方法は、望ましくはステップ（ａ）と（ｂ）との間に、複数のトポロジデータセットをそれらのそれぞれの時間指示に従い順序付けるステップを更に有し得る。前記複数のトポロジデータセットのうちの１つは、前記第１ノードのトポロジデータセットであってよく、前記複数のトポロジデータセットのうちの別の１つは、前記第２ノードのトポロジデータセットである可能性がある。前記複数のトポロジデータセットのうちの１つは、第３ノードからのトポロジデータセットであってよく、望ましくは、前記複数のトポロジデータセットのうちの他のものは、更なるノードからである。順序付ける前記ステップは、前記複数のトポロジデータセットのうちのどれが、前記前記複数のトポロジデータセットのうち最近のものであるかを確立してよい。
【００２５】
前記方法は、前記複数のトポロジデータセットのうちの最近のものが、前記第１ノードのトポロジデータセットを更新するために使用されることを更に提供し得る。前記方法は、最近の時間指示に関連付けられないトポロジデータセットが使用されない又は廃棄されることを更に提供し得る。
【００２６】
前記更新された第１ノードのトポロジデータセットは、前の第１ノードのトポロジデータセットを置き換えてよい。
【００２７】
ネットワークのトポロジのネットワークの認識を更新する方法は、さらに、前記ネットワーク内の接続を最適化する及び／又は前記ネットワーク内の一貫したデータ分配を最適化する方法であってよい。
【００２８】
本発明の第２の態様によると、本発明の第１の態様の方法を実行するよう構成される、場合によっては本願明細書の他の場所に記載される機能、オプション、及び可能性のうちの任意のものを実行するよう構成されるシステムを含む、コンピュータにより実装されるシステムが提供される。
【００２９】
前記コンピュータにより実装されるシステムは、前記ネットワークの前記トポロジの変化を検出するための検出部を含み得る。前記検出部は、１つ以上のノード及び／又は１つ以上のリンクに影響する変化を検出してよい。前記検出部は、例えば第１状態から第２状態への及び／又は第２状態から第１状態への、及び／又は１つ以上の他の状態を含んでよい、状態の１つ以上の変化を検出してよい。
【００３０】
前記コンピュータにより実装されるシステムは、特に更新されたトポロジデータセットを含むメッセージに関して、前記ネットワーク内で通信される更新されたトポロジデータセットをソートする更新ソート部を含んでよい。更新ソート部は、メッセージが正しいシーケンス若しくは順序又は生成時間で考慮されるように提供されてよい。
【００３１】
前記コンピュータにより実装されるシステムは、トポロジデータセットが前記ネットワーク内の他のノードからのトポロジデータセットにより更新されるように、トポロジデータセットを処理するトポロジデータセット処理部を含み得る。
【００３２】
前記コンピュータにより実装されるシステムは、前記ネットワークの前記トポロジの変化の認識が前記ネットワーク内で共有されるように、更新されたトポロジデータセットのためのトポロジ更新通信部を含み得る。トポロジデータセット処理部は、更なるノードのトポロジデータセットからのデータに従い、ノードのトポロジデータセットの更新を提供し得る。
【００３３】
本発明の第３の態様によると、ノードのネットワーク内の構成であって、前記ネットワークのトポロジの変化に関して前記ネットワークを更新し、前記構成は、前記ネットワークの前記トポロジの変化の検出のための検出部、及び／又は、前記ネットワーク内で通信された更新されたトポロジデータセットをソートする更新ソート部、及び／又は、トポロジデータセットの処理のためのトポロジデータセット処理部と、及び／又は、前記ネットワークの前記トポロジの変化の認識が前記ネットワーク内で共有されるようにする、更新されたトポロジデータセットのためのトポロジ更新通信部、を含む構成が提供される。
【００３４】
前記検出部は、１つ以上のノード及び／又は１つ以上のリンクに影響する変化を検出してよい。前記検出部は、例えば第１状態から第２状態への及び／又は第２状態から第１状態への、及び／又は１つ以上の他の状態を含んでよい、状態の１つ以上の変化を検出してよい。
【００３５】
前記更新ソート部は、更新されたトポロジデータセットを含むメッセージを提供されてよい。更新ソート部は、メッセージが正しいシーケンス若しくは順序又は生成時間で考慮されるように提供されてよい。
【００３６】
トポロジデータセットの処理のためのトポロジデータセット処理部は、前記ネットワーク内の他のノードからのトポロジデータセットにより更新されるトポロジデータセットのためであってよい。
【００３７】
前記トポロジデータセット処理部は、更なるノードのトポロジデータセットからのデータに従い、ノードのトポロジデータセットの更新を提供し得る。
【００３８】
したがって、本発明によると、以下の中から、オプション、可能性、及び特徴が提供され又は更に提供されてよい。
【００３９】
前記ネットワークは、ノードの分散型システムであってよい。前記分散型システムは、クライアント及び／又はサーバ及び／又はピアの形式で１つ以上のノードを含み得る。
【００４０】
ノードは、アクティブ電子装置又はデータ通信機器であってよい。ノードは、特に、ルータ及び／又はワークステーション及び／又はサーバ及び／又はホストコンピュータであってよい。ノードは、例えばネットワーク内で情報を生成し及び／又は受信し及び／又は１つ以上の他のノードへ送信することが可能な場所であってよい。
【００４１】
１つ以上の又は全部のノードはピアであってよい。２つ以上の又は全部のノードは、例えば特権又は能力又は機能の観点で、前記ネットワーク内の等価な参加者であってよい。
【００４２】
前記ネットワーク内のノードは、ノードの集合と考えられてよい。
【００４３】
ノードは、１つ以上のリンクにより接続されてよい。ノードは、１つ以上のリンクにより別のノードに接続されてよい。１つ以上の又は全部のリンクはエッジであってよい。
【００４４】
２つのノードの間の距離は、該ノードの間のリンクの和であってよく、望ましくは、最小数のリンクが該ノードの間の接続を提供する。前記距離はホップであってよい。前記距離は、リンク数であってよい。例えば、直接リンクされたノードは値１のホップを有し、及び／又は間接的にリンクされたノードは値＞／＝２のホップを有する。距離又はホップはｄ（ｉ，ｊ）として定められてよく、ここで、ｄはノードｉとノードｊとの間の距離である。
【００４５】
ノードは、限られた数のリンク、望ましくは単一のリンクが接続を提供するとき、別のノードに直接接続されてよい。ノードは、１つ以上の他のノードに直接接続されてよい。望ましくは、ノードに直接接続されたノードは、隣接ノードと見なされるノードに接続される。望ましくは、ノードに直接接続された他のノードの全部は、該ノードの隣接ノードである。隣接ノードは次のように定義されてよい：ａｄｊ（ｉ）＝｛ｊ∈Ｖ：ｄ（ｉ，ｊ）＝ｒａｄｊ｝、ここで、ｉは検討中のノードであり、ｊはノードの集合Ｖの中の隣接ノード数であり、ｒａｄｊは所与の隣接指標である。
【００４６】
所与の隣接指標は隣接半径であってよい。所与の隣接指標は、リンクの数、例えば１リンクであってよい。
【００４７】
ノードは、１リンクより多くのリンク数が接続を提供するとき、更なるノードに間接接続されてよい。望ましくは、ノードが更なるノードに、隣接ノード及び／又は更なるノードのような１つ以上の中間ノードを経由して接続されるとき、又は該ノードが直列の２つ以上のリンクを経由して該更なるノードに接続されるとき、該ノードは該更なるノードに間接接続される。ノードは、前記ネットワーク内の前記更なるノードのうちの１つ以上又は全部に間接接続されてよい。望ましくは、前記ノードの所与の近隣指標の範囲内にある、隣接ノードではない前記更なるノードは、該ノードの近隣ノードである。前記ノードの所与の近隣指標の外側にある前記更なるノードは、望ましくは、隣接ノードでも近隣ノードでもない。前記ノードの所与の近隣指標の外側にあり、隣接ノードでも近隣ノードでもない前記更なるノードは、望ましくは、依然としてノードの集合の部分である。前記近隣ノードは次のように定められてよい：Ｎ（ｉ）＝｛ｊ∈Ｖ：ｄ（ｉ，ｊ）＝Ｈ，ａｄｊ（ｉ）⊆Ｎ（ｉ）｝、ここで、ｉは検討中のノードであり、ｊはノードｉとノードｊとの間の距離ｄ（ｉ，ｊ）の範囲内にある集合Ｖ内の近隣ノードの数であり、ａｄｊ（ｉ）はノードｉの隣接ノードであり、Ｈは所与の近隣指標である。
【００４８】
所与の隣接指標は隣接半径であってよい。所与の隣接指標は、下限値及び上限値であってよい。所与の近隣指標は、例えば２リンクのような共通の下限及び上限値を有するリンク数であってよい。所与の近隣指標は、望ましくは所与の隣接指標より大きい。
【００４９】
ノードは、ノードの集合の部分であり、１つ以上の隣接ノード及び１つ以上の近隣ノードを有してよい。ノードの集合からの別のノードは、前記ノードと共通の１つ以上又は全部の隣接ノードを有してよく、又は前記ノードと共通の隣接ノードを有しなくてよい。前記別のノードは、前記ノードと共通の１つ以上又は全部の近隣ノードを有してよく、又は前記ノードと共通の近隣ノードを有しなくてよい。
【００５０】
前記ネットワークのトポロジの変化のための検出部及び／又は検出が提供され得る。１つ以上のノード及び／又は１つ以上のリンクに影響する変化のための検出部及び／又は検出が提供され得る。前記１つ以上の変化は、例えば第１状態から第２状態への及び／又は第２状態から第１状態への、及び／又は１つ以上の他の状態を含んでよい、状態の変化であってよい。
【００５１】
ノードは、第１状態及び第２状態を有してよく、前記第２状態は前記第１状態と比べて特性の変化を表す。前記特性の変化は、前記ノードがノードの前記集合及び／又は前記ネットワークに加わることであってよい。前記特性の変化は、前記ノードがノードの前記集合及び／又は前記ネットワークに再び加わることであってよい。前記特性の変化は、前記ノードがノードの前記集合及び／又はネットワークの中のノードとして機能し始める又は再び機能し始めることであってよい。前記特性の変化は、前記ノードがノードの前記集合及び／又はネットワークを離れることであってよい。前記特性の変化は、前記ノードがノードの前記集合及び／又はネットワークの中のノードとして機能することを停止することであってよい。
【００５２】
望ましくは、ノードと該ノードに直接接続された更なるノードとの間のリンクは、第１状態及び第２状態を有し、前記第２状態は前記第１状態と比べて特性変化を表す。特性の変化は、リンクの出現又はリンクへのアクセスであってよい。特性の変化は、リンクの再出現又はリンクへの更新されたアクセスであってよい。特性の変化は、リンクの消失又はリンクへのアクセスの損失であってよい。
【００５３】
特性の変化は、直接検出されてよい。望ましくは、特性の変化は、例えばテストメッセージを用いて間接的に検出される。テストメッセージは、あるノードから他のノードへ送信されてよい。テストメッセージは、リンクに沿って送信されてよい。テストメッセージは、望ましくは繰り返し、望ましくは定期的に送信される。テストメッセージは、所与の時間期間内に少なくとも１回、及び望ましくは該時間期間の任意の所与の繰り返しの中で少なくとも１回、送信されてよい。時間期間は、ノード内のクロック機能により制御され又はノードに関連付けられてよい。
【００５４】
ノードによる他のノードからのテストメッセージの受信の欠如は、該他のノード及び／又はその間のリンクが特性の変化を経験していることを示してよい。特に、受信の欠如は、前記他のノードが前記ネットワークを離れたこと及び／又はリンクが消失したことを示してよい。望ましくは、受信の欠如は、前記他のノードが機能停止したこと及び／又はリンクが機能停止したことを示す。望ましくは、受信の欠如は、時間期間に関して考慮される。望ましくは、時間期間は、テストメッセージが繰り返される時間期間より長い期間である。各ノードは、テストメッセージの受信が期待される時間期間を定めるために、タイマを、望ましくはリンク毎に別個の１つ維持してよい。
【００５５】
ノードの状態変化の検出は、ノードのトポロジデータセットに対する変化を生成し得る。第１状態から第２状態への変化の検出は、ノードのトポロジデータセットに対する変化を生成し得る。第２状態から第１状態への変化の検出は、ノードのトポロジデータセットに対する変化を生成し得る。
【００５６】
第１状態であって、ノードがネットワークに参加している又は機能している及び／又はリンクがアクセス可能な又は機能している、第１状態から、第２状態であって、ネットワークに参加していない又は機能していないる及び／又はリンクがアクセス可能でない又は機能していない、第２状態への変化の検出は、ノードのトポロジデータセットに変化を生じ得る。
【００５７】
ノードのトポロジデータセットの変化は、ノードの状態又はリンクの変化であってよい。状態の変化は、アクティブ状態又は生きている状態又は接続状態から、非アクティブ状態又は死んでいる状態又は切断状態への変化であってよい。
【００５８】
ノードのトポロジデータセットの変化は、トポロジデータセットからのノードの削除であってよい。ノードのトポロジデータセットの変化は、トポロジデータセットからのリンクの削除であってよい。
【００５９】
第２状態であって、ネットワークに参加していない又は機能していないる及び／又はリンクがアクセス可能でない又は機能していない、第２状態から、第１状態であって、ノードがネットワークに参加している又は機能している及び／又はリンクがアクセス可能な又は機能している、第１状態への変化の検出は、ノードのトポロジデータセットに変化を生じ得る。
【００６０】
ノードのトポロジデータセットの変化は、ノードの状態又はリンクの変化であってよい。状態の変化は、非アクティブ状態又は死んでいる状態又は切断状態から、アクティブ状態又は生きている状態又は接続状態への変化であってよい。
【００６１】
ノードのトポロジデータセットの変化は、トポロジデータセットへのノードの追加であってよい。ノードのトポロジデータセットの変化は、トポロジデータセットへのリンクの追加であってよい。
【００６２】
ノードのトポロジデータセットは、トポロジテーブルであってよい。は、ノードにとって可能な完全なデータセットと比べて不完全なデータセットであってよい。
【００６３】
ノードのトポロジデータセット、例えばトポロジテーブルは、そのときに該ノードに知られているリンクのリストを含んでよい。トポロジテーブルは、該ノードと、該ノードについてのノードの選択のうちの１つ以上の望ましくは全部との間の可能なリンクのうちの１つ以上又は全部のリストを含んでよい。該ノードについてのノードの選択は、該ノードの隣接ノードのうちの１つ以上、望ましくは全部、及び／又は該ノードの近隣ノードのうちの１つ以上、望ましくは全部、であってよい。トポロジテーブルは、そのときにノ―ドに知られているリンクのうちの１つ以上、望ましくは全部の状態を含んでよい。
【００６４】
ノードのトポロジデータセットの変化があるとき、ノードのトポロジデータセットの変化は、１つ以上の他のノードに通信されてよい。ノードのトポロジデータセットの変化があるとき、ノードのトポロジデータセット全体が、１つ以上の他のノードに通信されてよい。１つ以上の他のノードは、１つ以上の又は全部の隣接ノードを含んでよい。１つ以上の他のノードは、１つ以上の又は全部の近隣ノードを含んでよい。１つ以上の他のノードは、ノードの集合の中の１つ以上の又は全部のノードを含んでよい。
【００６５】
別のノードがノードのトポロジデータセットを受信すると、他のノードは、望ましくは、他のノードが他のノードの現在のトポロジデータセットを、ノードのトポロジデータセットで更新するか否かを評価する。評価は、ノードのトポロジデ―タセットを受信する各々の別のノードにより実行されてよく、望ましくは各評価は他の評価と独立である。評価は、望ましくは、他のノードの現在のトポロジデータセットがノードのトポロジデータセットより古いか又は新しいかを確立してよい。望ましくは、他のノードの現在のデータセットがより古い場合、別のノードの現在のトポロジデータセットは、ノードのトポロジデータセットから更新される。望ましくは、他のノードの現在のデータセットがより新しい場合、別のノードの現在のトポロジデータセットは、ノードのトポロジデータセットから更新されない。
【００６６】
ノードが別のノードのトポロジデータセットを受信すると、ノードは、望ましくは、ノードがノードの現在のトポロジデータセットを、他のノードのトポロジデータセットで更新するか否かを評価する。評価は、望ましくは、ノードの現在のトポロジデータセットが他のノードのトポロジデータセットより古いか又は新しいかを確立してよい。望ましくは、ノードの現在のデータセットがより古い場合、ノードの現在のトポロジデータセットは、他のノードのトポロジデータセットから更新される。望ましくは、ノードの現在のデータセットがより新しい場合、ノードの現在のトポロジデータセットは、他のノードのトポロジデータセットから更新される。
【００６７】
ネットワーク内で通信されるメッセージのためのメッセージソート部及び／又はメッセージのソートは、特にネットワークのトポロジの変化に関するメッセージに関して提供され得る。メッセージのための更新ソート部又はメッセージのソートは、メッセージが正しいシーケンス若しくは順序又は生成時間で考慮されるように提供されてよい。
【００６８】
ノード及び別のノードは、論理クロックのようなクロック機能を提供されてよい。クロック機能は、２つのデータ構造を提供し得る。１つ目はローカル時間のレコードであり、２つ目は分散型システムにおいて最も良く知られているグローバル時間のレコードである。例えば、論理クロックは、クロック機能を通じるローカル時間、例えば論理ローカル時間のレコード、及び論理グローバル時間のような分散型システム内のグローバル時間のローカルレコードを提供してよい。
【００６９】
望ましくは、システム内の各ノードは、クロック機能を提供される。
【００７０】
クロック機能は、システム内の１つ以上又は全部のイベントにタイムスタンプを割り当ててよい。イベントは、新しいノード又は新しいリンクの検出を含んでよい。イベントは、ノード又はリンクの状態の変化の検出を含んでよい。イベントは、ノード又はリンクの損失の検出を含んでよい。イベントは、ノードがノードのトポロジデータセットを更新することを含んでよい。
【００７１】
システム内のタイムスタンプは、望ましくは単調な、最も望ましくは増大する特性に従う。２つのイベントが因果でリンクされるとき、結果イベントは、該結果イベントをもたらした原因イベントより遅いタイムスタンプを与えられてよい。
【００７２】
クロック機能は、ベクトル時間クロックであってよい。ベクトル時間クロックは時間ベクトルを用いてよい。各ノードは、別個の時間ベクトルを作動する。各ノードは、該ノードの時間ベクトルを用いて、該ノードのイベントにタイムスタンプを付してよい。各時間ベクトルは次の形式であってよく：Ｔｉ＝（Ｔｉ１，．．．，Ｔｉｎ）、ここで、Ｔｉはノードｉのローカル論理クロックであり、時間１から時間ｎまでのノードｉの論理時間進行を記述する。
【００７３】
１つ以上の、望ましくは全部のノードは、１つ以上の又は全部のノードの、望ましくは該ノードの隣接ノード及び／又は近隣ノード論理時間進行の少なくとも部分的認識を有する。別のノードの論理時間進行の少なくとも部分的認識は、次の形式であってよく：Ｔｉｊ、これは、ノードｊのローカル時間ｎのノードｉの最新認識を表し、ここでｊ∈ａｄｊ（ｉ）である。Ｔｉの次元はｄｉｍ（Ｔｉ）により表され、ｄｉｍ（Ｔｉ）はａｄｊ（ｉ）のサイズに等しくてよい。
【００７４】
時間ベクトルクロックは、１つ以上のルールに従い作動してよい。ルールは、以下のうちの１つ以上又は全部を含んでよい。
【００７５】
１．１つ以上の、望ましくは全部のノードが、０のローカル時間で起動する。
【００７６】
２．ノードでイベントが生じると、ローカル時間は、例えば整数だけ、望ましくは値１だけ増大されてよい。
【００７７】
３．ノードでイベントが生じると、該ノードは、メッセージを、望ましくはトポロジデータセットが変化した１つ以上の更なるノードへ送信する。
【００７８】
４．更なるノードが、望ましくは変化のメッセージを受信すると、それは該ノードのイベントであると考えられ、望ましくは、したがって、ルール２が更なるノードのローカル時間に適用される。
【００７９】
５．更なるノードが、望ましくは変化のメッセージを受信すると、更なるノードのローカル時間は、ルール４の増加に加えて更に増加され、望ましくは、更なるノードのローカル時間は、ルール４の増加の後の更なるノードのローカル時間、又はメッセージ内の更なるノードのローカル時間、の大きい方だけ更に増大される。
【００８０】
６．ノードにより更なるノードへ送信されたメッセージは、ノード及びノードがローカル時間の認識を有する全部の更なるノードのローカル時間を含む。該ローカル時間は、そのときの１つ以上の更なるノードの実施のローカル時間と異なってよい。
【００８１】
７．メッセージがノードにより受信された最後のメッセージより新しい場合、該メッセージのトポロジデータセットは、更なるノードのトポロジデータセットを更新するために使用されてよい。望ましくは、ルール４及び／又は５は、メッセージがより新しい及び／又はメッセージが交信中の更なるノードのトポロジデータセットをもたらす場合にのみ適用される。
【００８２】
８．メッセージがノードにより受信された最後のメッセージより古い場合、該メッセージのトポロジデータセットは、廃棄され及び／又は更なるノードのトポロジデータセットを更新するために使用されなくてよい。望ましくは、ルール４及び／又は５は、メッセージがより古い及び／又はメッセージのトポロジデータセットが廃棄され及び／又は使用されない。
【００８３】
ベクトル時間クロックは、１つ以上のルールに従い作動してよい。ここで、該ルールは以下のうちの１つ以上又は全部を含む：
・ノードｉにおける初期ローカルイベントのタイムスタンプは、１であるｉ番目のエントリを除き、全て０である。
・Ｔｉｊ＝ｘの場合、ノードｉは、ノードｊにおけるローカル時間がｘまで進んでいることを知る。
・ベクトルＴｉは、論理グローバル時間のノードｉのビューを構成する。
・ノードｉはそれをイベントにタイムスタンプを付すために使用する。
・メッセージのタイムスタンプは、現在のスタンプ及び入ってくるベクトルタイムスタンプのうちの要素全体の最大である。
・メッセージを送信する前に、ノードｉは自身のローカル論理時間Ｔｉｊ←Ｔｉｊ＋１を更新する。
・ノードｊ∈ａｄｊ（ｉ）からのメッセージ（ｍ，Ｔｊ）を受信すると、ノードｉは、以下によりノードｉの論理グローバル時間を更新する動作を実行する：∀ｋ∈ａｄｊ（ｉ）、Ｔｉｋ←ｍａｘ（Ｔｉｋ，Ｔｊｋ）。
【００８４】
１つ以上の又は全部のノードにより送信された１つ以上の又は全部のメッセージのブロードキャストアルゴリズムは、決定性アルゴリズム又は確率的アルゴリズムであってよい。
【００８５】
データセット処理部及び／又はデータセットの処理は、ネットワークのトポロジの変化の認識がネットワーク内で共有されるように提供されてよい。ノードのトポロジデータセットのためのデータセット処理部及び／又は処理は、ノードのトポロジデータセットが更なるノードのトポロジデータセットからのデータにより更新されるように、提供されてよい。
【００８６】
ノードのトポロジデータセット、例えばトポロジテーブルは、ノード、望ましくは各ノードについて、構成されてよい。ノードのトポロジデータセットは、該ノードｉの主トポロジビューＶｉを含んでよい。ノードのトポロジデータセットは、ノードに知られているリンクのリストを含んでよい。リンクは、ｌｍｎの形式でリストされてよい。ここで、ｍは１つのノードであり、ｎは別のノードである。形式ｌｍｎ及びｌｎｍは、同義的に使用されてよく、それらのペアのうちの１つのみがリスト内のリンクを提供するためにリストされる。Ｔノードのトポロジデータセットは、リスト内の各リンクの指定を含んでよい。指定は、２つの値のうちの１つ、例えば１又は∞を有してよい。指定は、リンクの動作状態に関連してよい。例えば、動作しているときの値、及び動作していないときの値である。
【００８７】
最初に、ノードに知られているリンクのリストは、それらのノード、及びしたがって、例えばリンクを介して更なるノードからのテストメッセージの受信により該ノードにより検出された該リンク、であってよい。
【００８８】
更なるノードのトポロジデータセットを含むメッセージが交換されると、ノードに知られているリンクのリストは、他のノードからのメッセージ内のこれらのリンクであってよく、又はそれにより補強されてよい。望ましくは、ノードに知られているリンク及び他のノードからのメッセージ内のこれらのリンクの結合は、ノードのトポロジデータセットを形成する。
【００８９】
ノードのトポロジデータセットは、ノード又はリンクの動作状態の変化に関して更新されてよい。ノードのトポロジデータセットは、ノード又はリンクが動作状態に戻ることに関して更新されてよい。ノードのトポロジデータセットは、新しいノード又は新しいリンクがネットワークに追加されることに関して更新されてよい。ネットワークに追加されている新しいノードは、別のノードからノードトポロジデータセットを、該ノードの第１ノードトポロジデータセットを提供するために、送信されてよい。
【００９０】
ノードのトポロジデータセットは、１つ以上の条件が満たされるとき、更なるノードのトポロジデータセットを含むメッセージ内からのデータにより更新されてよい。条件は、更なるノードのトポロジデータセットがノードのトポロジデータセットより新しいタイムスタンプを有することであってよい。条件は、１つ以上のリンク、特にノードのトポロジデータセット及び更なるノードのトポロジデータセットの両方の中の１つ以上のリンクに関して、例えば１から∞へ又は∞から１への指定の変化があることであってよい。条件は、更なるノードのトポロジデータセットがノードのトポロジデータセット内に無い１つ以上のリンクを含むことであってよい。条件は、ノードのトポロジデータセットがノードの所与の指標の範囲内にある更なるノードのトポロジデータセット内のリンクに関して更新されるだけであるという更なる条件と一緒に、更なるノードのトポロジデータセットが、ノードのトポロジデータセット内に無い１つ以上のリンクを含むことであってよい。所与の指標は、所与の隣接指標の範囲内であること、又はより望ましくは所与の近隣指標の範囲内であることであってよい。所与の指標の範囲内に無いリンクは、望ましくは、ノードのトポロジデータセットに追加されない。
【００９１】
ノードのトポロジデータセットは、ｍ＝｛Ｖｊ，Ｔｊ｝の形式のメッセージｍをノードｊから所与の時間Ｔｊに受信すると、更新されてよい。ここで、ノードｊはトポロジデータセット又はグローバルトポロジビューＶｊを有し、ノードｉがそれを用いて、ノードｉのトポロジデータセット又はグローバルトポロジビューＶｉを更新するようにする。
【００９２】
ノードのトポロジデータセットは、リンクｌｍｎがノードのトポロジデータセット、例えばグローバルビューＶｉ、及び更なるノードのトポロジデータセット、例えば更なるノードのグローバルビューＶｊの両方にあるリンクである場合に更新されてよい。その結果、Ｖｉ∪Ｖｊである。Ｖｊの中で受信されたリンクｌｍｎに関する情報により更新されるノードのトポロジデータセットは、タイムスタンプＴｊ［ｔｊ］＞Ｔｉ［ｔｊ］を条件としてよい。ここで、該条件が真である場合に、リンクｌｍｎのより新しい状態が取られる。
【００９３】
ノードのトポロジデータセットは、リンクｌｐｑが更なるノードのトポロジデータセット、例えば更なるノードのグローバルビューＶｊ内にあり、ノードのトポロジデータセット、例えば更なるノードのグローバルビューＶｉ内に存在しない場合に更新されてよい。ノードのトポロジデータセット、例えばノードのグローバルビューＶｉに追加されているリンクｌｐｑに関する情報は、ノードｉとｑとの間の距離が隣接ノードの値、水平Ｈより小さいことを条件としてよい。条件は、ｌｉｊ＋ｌｊｐ２＋ｌｐ１ｐ２＋・・・＋ｌｐｎｐ＋ｌｐｑ＜Ｈであってよく、ここで、ｌｉｊ、ｌｊｐ２、ｌｐ１ｐ２、．．．、ｌｐｎｐはすべてＶｉのアクティブリンクである。
【００９４】
ノードは、該ノードにより受信されたメッセージの結果として、該ノードのトポロジデータセットに変更が行われると常に、該ノードのトポロジデータセットを含むメッセージを１つ以上の更なるノードへ送信してよい。望ましくは、ノードは、該ノードのトポロジデータセットを含むメッセージを、近隣ノード及び／又は隣接ノードである１つ以上の更なるノードのみへ送信してよい。
【００９５】
ノードは、該ノードが新しいノードにリンクされると常に、該ノードのトポロジデータセットを含むメッセージを、１つ以上の該新しいノードへ送信してよい。望ましくは、ノードは、該ノードのトポロジデータセットを含むメッセージを、該ノードの隣接ノードである１つ以上の新しいノードのみへ送信してよい。
【００９６】
システム内の複数のノード及び／又は方法は、互いに独立に更新を開始してよい。複数の更新は、システム及び／又は方法の中で同時に起動されてよく、望ましくは、更新に伴うタイムスタンプ制御が、ノードにおけるトポロジデータセットに適用される。
【図面の簡単な説明】
【００９７】
本発明の上述の及び他の態様は、本願明細書に記載される実施形態から明らかであり、それらの実施形態を参照して教示される。本発明の実施形態は、単なる例として添付の図面を参照して以下に説明される。
【図１】ノード、隣接ノード及び近隣ノード、を示すネットワークトポロジ図の一例である。
【図２】ベクトルクロックのシステムの説明である。
【図３】任意のトポロジ変化（障害又は損失メッセージ）の存在しない、ブロードキャストアルゴリズムの実行を示す。
【図４】本発明の一実施形態の動作を説明するために使用されるグローバルネットワークの説明である。
【図５】本発明の一実施形態を説明するために使用される時間と共にノード間でのメッセージの交換の説明である。
【発明を実施するための形態】
【００９８】
非構造化ピアツーピア（peer−to−peer：Ｐ２Ｐ）ネットワークの中心的問題は、トポロジの維持である。例えば、ノードがネットワークに参加し及び離れるとき及び／又はノードが突然クラッシュしたとき、どのように近隣の変数を正しく更新するかである。本発明は、トポロジ更新アルゴリズムに関する。
【００９９】
Ｐ２Ｐネットワーク内では、検索、情報流布、ブロードキャスト、等のために、「誰が誰に接続されるか」又は「誰が誰を知っているか」を知る必要がある。このコンテキストでは、確率的アルゴリズム及び決定性アルゴリズムのような多数のブロードキャストアルゴリズムが知られている。
【０１００】
疫学的アルゴリズム又はゴシッププロトコル（Gossip  Protocols）は、本来、確率的であり、それらは固定トポロジに依存しない。ノードは、ランダムな近隣と情報を交換して、拡散のような計算パターンを実装し、結果として、システムは、全てのノードがメッセージを知る状態に収束する。ゴシッププロトコルは、ネットワーク内のノード数と独立に、各ノードが固定数のメッセージだけを送信するので、拡張可能である。さらに、ノードは、肯定応答を待たず、又は肯定応答が到着しないならば回復動作も行わない。ノードは異なるノードからメッセージのコピーを受信するので、それらは、断続的なリンク障害及びノードクラッシュに対して障害耐性を達成する。いかなるノードも担うべき特別な役割を有しない。したがって、障害ノードは、他のノードがメッセージを送信し続けることを防がない。したがって、障害検出又は特別な回復動作は必要ない。
【０１０１】
ゴシッププロトコルの欠点は、それらが送信する多数のメッセージである。あるクラスのゴシッププロトコル（非エントロピープロトコル）は、無限の実行において、無制限の数のメッセージを送信する。
【０１０２】
横型探索のようなスパニングツリーアルゴリズムは、決定性アルゴリズムのクラスである。スパニングツリーは、ネットワークを「バックボーン」、つまりノードを接続するエッジの最小セットとして、視覚化する単純な方法を提供する。概念は単純であり、スパニングツリーは、先ず構成され、各ノードからローカルデータ変数を収集するために使用され、次に、ルートノード（又はシンクノード）へ向かってデータを集約する。各ノードは、それ自体の親へ自身の値を送信する。各非リーフノードにおいて、自身の子ノードの値は、それ自体の値に加えて、ツリーの上方へ結果を送信する前に処理される。横型探索プロトコルは、浅いレベルにある全てのノードが生成されるまで、ツリー内のノードを生成しないので、常にノードへの最短パスを発見する。スパニングツリーは、情報分散及び収集の、及びそれらがネットワークの新しいトポロジを計算する方法において、非常に効率的な形式である。
【０１０３】
一般に、スパニングツリーのような構造は、構造的に脆弱であると考えられ、単一の頂点又はエッジの障害がブロードキャストを失敗させる。
【０１０４】
トポロジ更新問題は、現在、ネットワークトポロジが動的であるとき、つまりリンクが任意の時間に障害し回復するとき、各ネットワークサイトにおけるネットワークトポロジの認識を保つことの問題である。任意のトポロジアルゴリズムの正しい動作は、リンク状態変化（障害及び修復）がネットワークノード又は他の要因により検出される方法に大きく依存する。
【０１０５】
トポロジアルゴリズムの使用の下地にある及び任意のソリューションにおいて説明されるべき課題には、幾つかの繊細さがある。
・リンクは、短時間の間に、幾つかのトポロジ変化を経験することがある。他のネットワークノードは、どの変化が最近のものであったかを最終的に決定しなければならない。ノードは、リンクの状態に関する古い情報と新しい情報との間を区別可能でなければならない。
・トポロジアルゴリズムの実行中に、追加のトポロジ変化が生じることがある。トポロジアルゴリズムは、実行中に新しい情報を組み込む、又は新しいアルゴリズムバージョンを開始する、ことが可能でなければならない。異なるバージョンが使用される場合、各ノードは、どれが最新バージョンかを決定可能でなければならない。
・単一リンクの修復は、切断されたネットワークの２つの部分を再接続させることが可能である。各部分は、もう一方に関する古いトポロジ情報を有することがある。アルゴリズムは、２つの部分が最終的に合意し、正しいネットワークトポロジを採用することを保証しなければならない。
【０１０６】
ネットワークが自身の中の変化を明確に理解する能力は、ネットワークを通じる高速且つ効率的通信のために、及びネットワークが完全に機能するために、重要である。一例として、デジタル通貨に高速支払ネットワークを提供するために、トランザクション及び他の情報は、分散型ネットワークを通じて完全且つ迅速に共有されなければならない。
【０１０７】
シェアを参加者に分配することにより秘密を保護する閾値暗号システムに依存する方法では、秘密シェアの部分集合を共同で保持する商人（merchant）の集合で構成されるネットワークが、最初に構成される。秘密シェアの第２の半分は、顧客（customer(s)）により保持される。商人ネットワークは、署名の生成、鍵シェアの更新、閾値レベルの定義、トランザクションの検証、等のような重要なタスクを実行する。協働し通信し及びネットワークトポロジを認識する彼らの能力は、これらの状況において不可欠である。
【０１０８】
以下の説明では、私達は、各商人ノードが、リンク及びノード障害にも拘わらず、ネットワークトポロジの正しいビューを維持することを可能にするアルゴリズムを提示する。アルゴリズムは、ネットワークが、有限数のステップのうちに安定構成に自動的に戻ること（所謂、「自己安定化」）を可能にし、イベント間の因果関係を正確にキャプチャするために論理クロックを使用する。トポロジ更新プロトコルは、イベント駆動型である。つまり、幾つかの変化が検出されると、起動される。
【０１０９】
システムは、
トポロジの変化を検出するステップと、
これらの変化を発生により順序付けるステップと、
該変化を反映する新しいトポロジを構成するステップと、を含む。
【０１１０】
本発明の完全な説明を可能にするために、ネットワークの数学的モデルを理解することが有用である。
【０１１１】
図１を参照すると、一連のノード（１〜８とラベル付けされる）が設けられる。各ノードは、別のノードへのリンク（又はエッジ）を設けられる。一連のノードは、集合を形成し、ここでＶは該集合の中のノードの数である。
【０１１２】
ネットワークは、グラフＧ＝（Ｖ，Ｅ）により表すことができる。ここで、Ｖはノードの集合であり、それぞれが異なるアイデンティティを有し、Ｅはエッジ（又はリンク）の集合である。
【０１１３】
数学的モデルは、以下の定義を使用する。
【０１１４】
定義１（「ホップ（Hop）」の定義）。２つのノードｉ及びｊの間の距離ｄ（ｉ，ｊ）は、これらのノードを接続するリンクの最小数に等しい。したがって、図１で、ノード６とノード１との間の距離は２リンクであり、ノード８とノード１の場合には１リンクだけである。
【０１１５】
定義２（「隣接ノード（Adjacent  Nodes）」の定義）。集合Ｖの中のノードｉ、ｉ∈Ｖ、の隣接ノードａｄｊ（ｉ）は、所定距離又は隣接半径ｒａｄｊの範囲内にある、集合Ｖの中のノードｊ、ｊ∈Ｖ、である。ここで、ａｄｊ（ｉ）＝｛ｊ∈Ｖ：ｄ（ｉ，ｊ）＝ｒａｄｊ｝
定義３（「近隣ノード（Neighbour  Nodes）」の定義）。集合Ｖの中のノードｉ、ｉ∈Ｖ、の近隣ノードＮ（ｉ）は、所定距離又は水平半径Ｈ≧ｒａｄｊの範囲内にある、集合Ｖの中のノードｊ、ｊ∈Ｖ、である。ここで、Ｎ（ｉ）＝｛ｊ∈Ｖ：ｄ（ｉ，ｊ）＝Ｈ，ａｄｊ（ｉ）⊆Ｎ（ｉ）｝
図１で、隣接半径ｒａｄｊ＝１を選択した場合、ノード（ピア）１の隣接ノードは、赤で表される、つまりノード２、３、４、７、８である。水平半径Ｈ＝２を選択した場合、近隣ノードは、青で表される、つまりノード５及び６である。
【０１１６】
変化の検出
明らかに、トポロジ変化を説明可能であるために、このような変化を検出可能である必要がある。
【０１１７】
トポロジ変化は、いつでも起こり得る。したがって、任意の種類の初期障害をキャプチャするために、システムに関して以下を仮定する。ネットワーク内の各ノードｉは、自身の、リスト内の隣接ノードのアイデンティティを維持する。ノードｉは、テストメッセージ「I’m  alive」を自身の隣接ノードへ定期的に送信する。図１を参照すると、ノード４は、このようなメッセージをノード１のみへ送信し、一方で、ノード１はこのようなメッセージをノード２、３、４、７、８へ送信する。
【０１１８】
「I’m  alive」メッセージの発送頻度は、エラー検出メカニズムの効率に大きな影響を与える。短いエラー検出時間を達成するために、「I’m  alive」メッセージが非常に頻繁に送信されチェックされる必要がある。
【０１１９】
ノードｉ内の各プロセッサは、時間間隔を測定するために使用されるローカルクロックを有する。異なるノードにおけるクロックは、互いに同期していないことがある。各リンク（ｉ，ｊ）について、ノードｉは、自身の隣接ノードｊ∈ａｄｊ（ｉ）のタイマｔｉｊを維持する。ノードｉが「I’m  alive」メッセージをノードｊから時間間隔δｔ内に受信しなかった場合、リンク（ｉ，ｊ）はもはや利用可能ではないと考えられ、ｊを自身の隣接ノード集合から削除する。ノードｉは、次に、自身の現在の（場合によっては誤った）トポロジテーブルＴｉを更新する。トポロジテーブルは、ノードｉに直接接続されたリンクの動作状態のリストである。したがって、図１を参照すると、ノード１は「I’m  alive」メッセージをノード４へ送信し、ノード４は「I’m  alive」メッセージをノード１へ送信すべきである。ノード１がこのようなメッセージをノード４から所定時間期間内に受信しなかった場合、ノード４は、ノード１のトポロジテーブルＴ１から削除される。次に、トポロジテーブルＴ１内のノード１の隣接ノードは、ノード２、３、７、及び８だけになる。
【０１２０】
以上の考察は、第１トポロジ更新ルールを形成する。つまり以下の通りである：
１．ノードが、隣接リンクが故障したことを検出すると、障害状態がノードの主トポロジテーブルに入力される。
この更新されたトポロジテーブルは、ノード集合Ｖの中の他のノードと共有されることが望ましい。これが生じると、ノードは、自身のトポロジテーブルを、隣接ノードから受信したトポロジテーブルに従い更新する。したがって、第２トポロジ更新ルールが形成され、つまり以下の通りである：
２．ノードは、主トポロジテーブル全体を近隣から受信すると、自身の主トポロジテーブルを、主トポロジ更新アルゴリズム（後述する）を用いて更新する。
【０１２１】
変化の順序付け
上述のように、更新されたトポロジテーブルメッセージは、検出されたトポロジ変化に応答して送信されるだけである。ネットワーク内で送信される全てのメッセージは遅延の影響を受けるので、ノードは、ある時点で自身が正しいトポロジを知っていることを確信できない。更新されたトポロジテーブルメッセージのうちの１つ以上は、その受信時間に関係なく、別の更新されたトポロジメッセージの中に記された状態と比べて古く又は期限切れであることがある。因果序数ブロードキャスト（Raynal,M.、Singhal,M.、「Capturing  Causality  in  Distributed  Systems、１９９６、IEEEに詳述される）は、２つのメッセージが因果関係があり、同じ宛先を有する場合、それらがそれらの送信順でアプリケーションへ配信されることを保証する。
【０１２２】
本発明は、論理クロックのシステムを使用する。ここで、全てのノード（ピア）は、後述するルールセットを用いて進められる論理クロックを有する。結果として、全てのメッセージはタイムスタンプを割り当てられ、該タイムスタンプにより、処理がイベント間の因果関係を推測できる。イベントに割り当てられたタイムスタンプは、単調性の特性に従い、それらは常に増加している。つまり、イベントａがイベントｂに影響を与える原因である場合、ａのタイムスタンプはｂのタイムスタンプより小さい。この場合、イベントｂはイベントａの結果である。
【０１２３】
論理クロックは、以下のルールに従い進む；ベクトル時間クロック。
【０１２４】
ベクトルクロックのシステムでは、時間ドメインは、有限次元の非負整数ベクトルの集合により表される。各ノードｉは、ベクトルＴｉ＝（Ｔｉ１，．．．，Ｔｉｎ）を維持する。ここで、Ｔｉｊは、ノードｉのローカル論理クロックであり、時間１から時間ｎまでのノードｉの論理時間進捗を記述する。
【０１２５】
Ｔｉｊは、ノードｊのローカル時間についてのノードｉの最新知識を表す。ここで、ノードｊ∈ａｄｊ（ｉ）である。
【０１２６】
Ｔｉの次元をｄｉｍ（Ｔｉ）により表記し、ｄｉｍ（Ｔｉ）をａｄｊ（ｉ）の大きさと等しくする。
【０１２７】
ノードｉにおける初期ローカルイベントのタイムスタンプは、１であるｉ番目のエントリを除き、全て０である。Ｔｉｊ＝ｘの場合、ノードｉは、ノードｊにおけるローカル時間がｘまで進んでいることを知る。ベクトルＴｉは、ノードｉの論理グローバル時間のビューを構成し、ノードｉはそれをイベントにタイムスタンプを付すために使用する。受信したメッセージのタイムスタンプは、現在のスタンプ及び入ってくるベクトルタイムスタンプのうちの要素全体の最大である。
【０１２８】
この動作は、図２に、３個のノードＡ、Ｂ、Ｃに関して示される。各ノードにおいて、ローカル時間は最初は０である。イベントがノードＣで生じると、ノードＣは、自身のローカルクロック時間を１まで増加させ、ノードＢに通知する。ノードＢがメッセージを受信するとき、他のイベントはノードＢに通知されず、したがって、ノードＢのローカル時間は０のままである。ノードＢが、今、イベントを経験したので、ノードＢはノードＢのローカル時間を１により更新する。ノードＢのローカル時間が０だったので、これは１の値を与える。さらに、ノードＢは、また、更新したノードＢのローカル時間（今の値１）又はメッセージ内のノードＢのローカル時間（本例では値１）のうちの大きい方を追加することにより、ノードＢのローカル時間を補正する。したがって、補正されたノードＢのローカル時間は２であり、ノードＢは、次に変化をノードＡに通知する。
【０１２９】
ノードＡは、１により更新し及び１の追加により補正する同様の処理を通じて、Ａ：２  Ｂ：２  Ｃ：１のノードＢへのメッセージをもたらす。ノードＢがこのメッセージを受信する時間までに、ノードＢは、別の独立イベントに気付き、それをＣに通信している。したがって、１によるノードＢの更新があるが、補正はノードＢのローカル時間への１の追加であり（この時点までに３）、メッセージ内のノードＢのローカル時間への１の追加ではない（この時点で２だけ）。したがって、Ａへ送信された新しいメッセージは、Ｂ：５（３＋１＋１であり、２＋１＋１ではない）の値を有する。
【０１３０】
後のメッセージは、同じ方法で処理される。時間３でノードＢにより送信される第２メッセージは、上述の他のメッセージ、メッセージ１（ＣからＢへ）、メッセージ２（ＢからＡへ）、及びメッセージ４（ＡからＢへ）及びメッセージ５（ＢからＣへ）と独立である。
【０１３１】
以上の考察は、論理クロック更新ルールを形成する。つまり以下の通りである：
１．メッセージを送信する前に、ノードｉは自身のローカル論理時間を更新するＴｉｊ←Ｔｉｊ＋１。
２．メッセージ（ｍ，Ｔｊ）をノードｊ∈ａｄｊ（ｉ）から受信すると、ノードｉは、以下の一連の動作を実行する：
ａ．自身の論理グローバル時間を以下のように更新する：
∀ｋ∈ａｄｊ（ｉ）、Ｔｉｋ←ｍａｘ（Ｔｉｋ，Ｔｊｋ）
図３は、任意の障害又は損失メッセージを有しないブロードキャストアルゴリズムの実行を示す。私達は、ブロードキャストアルゴリズム（決定性又は確率的）を指定せず、私達は近隣ノードの定義を与えない。私達は、ノード１、２、３が全て隣接ノードであると仮定する。つまり、（２，３）∈ａｄｊ（１）、（１，３）∈ａｄｊ（２）、（１，２）∈ａｄｊ（３）。ノード１は、第１メッセージ（ｍ１，Ｔ１）を生成し、それをランダムに又は選択されたブロードキャストアルゴリズムに従い確定的に、ノード２及び３へ送信する。ノード３は、ノード１からのメッセージ（ｍ１，Ｔ１）にトリガされ、新しい第２メッセージ（ｍ２，Ｔ３）を生成し、それをノード１及び２へ送信する。ノード１は、ノード３からのメッセージ（ｍ２，Ｔ３）にトリガされ、新しい第３メッセージ（ｍ３，Ｔ１）を生成し、それをノード２及び３へ送信する。
【０１３２】
具体的に、ノード２が第２メッセージ（ｍ２，Ｔ３）をノード３から受信するときまでに、ノード２は既に（ｍ３，Ｔ１）をノード１から受信から受信している。ノード２は、これらのメッセージの順序を、上述の方法から知る。したがって、ノード２は、第２メッセージ（ｍ２，Ｔ３）を廃棄し、第２メッセージ（ｍ３，Ｔ１）を使用して、メッセージ内容の完全性を保証する。
【０１３３】
更新されたトポログラフィの構成
変化を検出し、ノードにおいて該変化の正しい順序を保証すると、ノードが新しいトポログラフィを確立する方法が以下に議論される。
【０１３４】
以下のアルゴリズムは、各ノードｉにより、その主トポロジビューＶｉを構成するために使用される。ｌｍｎ又はｌｎｍのようなノードｍとｎとの間の単一の双方向リンクを参照する。トポロジテーブルＶｉ内の各エントリは、リンクｌｍｎ又はｌｎｍである。リンクは、つの値１又は∞のうちの１つを取ることができる。リンクが動作中であるとき、値は１に設定される。リンクが死んでいるとき、値は∞に設定される。
【０１３５】
所与の時間にノードｊからメッセージｍ＝｛Ｖｊ，Ｔｊ｝を受信すると、ノードｊは、それを用いて自身のグローバルビューＶｉを更新する。
【０１３６】
リンクｌｍｎを両方のグローバルビューの中のリンクであるとする。Ｖｉ∪Ｖｊ。リンクｌｍｎに関する情報は、タイムスタンプＴｊ［ｔｊ］＞Ｔｉ［ｔｊ］ならば、受信したＶｊにより更新される。リンクｌｍｎのより新しい状態が取り入れられる。
【０１３７】
ｌｐｑを、現在Ｖｉ内のリンクではない、Ｖｊ内のリンクであるとする。ｌｐｑに関する情報は、ノードｉとｑとの間の距離が隣接ノードについての値、水平Ｈより小さい場合、グローバルビューＶｉに追加される。つまり、ｌｉｊ＋ｌｊｐ２＋ｌｐ１ｐ２＋・・・＋ｌｐｎｐ＋ｌｐｑ＜Ｈ、ここで、ｌｉｊ、ｌｊｐ２、ｌｐ１ｐ２、．．．、ｌｐｎｐはすべてＶｉのアクティブリンクである。
【０１３８】
したがって、リンクの動作状態の変化が更新され、動作状態に戻るリンクが追加され、ネットワークに現れる新しいリンクが追加される。リンクがネットワークに戻る又は新しいリンクがネットワークに追加されるとき、トポロジアルゴリズムは、自身が最新トポロジテーブルのコピーを提供されることを保証する。
【０１３９】
以上の考察は、通信ルールを形成する。つまり以下の通りである：
１．ノードの主トポロジテーブル内のリンク状態エントリが変化すると、新しいトポロジテーブルを含むメッセージが近隣ノードへ送信される。
２．ノードにおけるリンクプロトコルが、隣接リンクが動作中になったことを検出すると、ノードは、自身の主トポロジテーブル全体を該リンクを介して送信する。
【０１４０】
プロトコルの適切なコードの例は次の通りである。
【０１４１】
【数１】
2020505839.tif 000003
トポロジ更新アルゴリズムの動作例は、図４のネットワークを参照して以下に記載される。
【０１４２】
ｒａｄｊ＝１、及びＨ＝２と仮定する。したがって、ノード１に対して、ノード２及び３は隣接ノードであり、ノード４及び５は近隣ノードである。
【０１４３】
初期段階で、ノード１、２、及び３のトポロジビューＶｉ、ｉ∈（１，２，３）は：
【０１４４】
【数２】
2020505839.tif 000004
結果として、ノード３は、ノード１及び２より情報の多い且つ完全な主トポロジビューを有する。
【０１４５】
変化を詳述するメッセージを順序付ける方法に戻ると、論理クロックＴｉは：
【０１４６】
【数３】
2020505839.tif 000005
フェーズ１：
ノード３は、第１メッセージｍ１＝｛Ｖ３，Ｔ３［ｔ３］＝１｝をノード１及びノード２へ送信する。
【０１４７】
フェーズ２：
ノード１及び２、つまりｉ∈（１，２）は、Ｔ３［ｔ３］＞Ｔｉ［ｔ３］かどうかをチェックする。第１メッセージのときこれに該当するので、ノード１及び２、つまりノードｉは、それらの論理クロックＴｉ及びそれらのビューＶｉを更新する。実際には、これは、リンクｌ２３がノード１に予め知られていなかったので、Ｖ１へのｌ２３の追加を意味する。一方で、リンクｌ４５もノード１に知られていなかったが、該リンクは許容近隣ノード限界の外側であるので：ｌ１３＋ｌ３４＋ｌ４５＞Ｈ、Ｖ１はリンクｌ４５を含むよう更新されない。結果として生じる、ノード１及び２のＴ及びＶへの更新は：
【０１４８】
【数４】
2020505839.tif 000006
ノード１が同様のメッセージｍ２＝｛Ｖ１，Ｔ１［ｔ１］＝１｝をノード２へ送信した場合、ノード２は自身の論理クロックを更新する：
【０１４９】
【数５】
2020505839.tif 000007
ノード２のトポロジビューＶ２は、ノード２がリンクｌ１２、ｌ１３、ｌ２３及びｌ３４について既に知っているので、不変である。Ｖ２に変化がないので、ノード２は新しいメッセージをブロードキャストしない。
【０１５０】
フェーズ３：
リンク（エッジ）ｌ３４は、今、死んでいる。ノード３は、ノード４からのテストメッセージの欠如により、この変化を検出する。結果として、ノード３は、ｌ３４の該動作状態を含むよう、ビューを更新する。更新されたビューは：
【０１５１】
【数６】
2020505839.tif 000008
ノード３は、変化があるので、新しいメッセージｍ３＝｛Ｖ３，Ｔ３［ｔ３］＝２｝をノード１及び２へ送信する。本例では、私達は、ｍ２がノード２に届かない（又は未だノード２に届いていない）と仮定する。
【０１５２】
フェーズ４：
ノード１は、上述のチェックを実行し、自身の論理クロックＴ１及び自身のビューＶ１を更新する。これは、以下を与える：
【０１５３】
【数７】
2020505839.tif 000009
フェーズ５：
ノード１は、直ちに動作し、メッセージｍ４＝｛Ｖ１，Ｔ１［ｔ１］＝２｝を送信する。
【０１５４】
フェーズ６：
メッセージｍ４を受信すると、ノード２は上述のチェックを実行し、次に、ノード２は相応してＴ２及びＶ２を更新する：
【０１５５】
【数８】
2020505839.tif 000010
同じ方法で、更なる変化が検出され、通達され、順序付けられ、更新され得る。
【０１５６】
留意すべきことに、上述の実施形態は、本発明を限定するのではなく、当業者は添付の請求項により定められる本発明の範囲から逸脱することなく多数の代替の実施形態を考案できる。請求項中、括弧内に記載された如何なる参照符号も、請求項を制限すると見なされるべきではない。用語「有する（comprising又はcomprises）」等は、全体としていかなる請求項中に及び明細書に列挙された以外の要素又はステップの存在を排除するものではない。本願明細書において、「有する（comprises）」は「含む（includes）又は構成される（consists  of）」を意味し、「有する（comprising）」は「含む（including）又は構成される（including  of）」を意味する。要素の単数の参照は、該要素の複数の存在を排除するものではなく、逆も同様である。本発明は、複数の別個の要素を有するハードウェアにより又は適切にプログラムされたコンピュータにより、実施され得る。複数の手段を列挙している装置の請求項では、これらの複数の手段は、１つの同一のハードウェア要素により実装することができる。特定の量が相互に異なる従属請求項に記載されるという事実は、これらの量の組合せが有利に用いることが出来ないことを示すものではない。
【図１】
2020505839.tif 000011
【図２】
2020505839.tif 000012
【図３】
2020505839.tif 000013
【図４】
2020505839.tif 000014
【図５】
2020505839.tif 000015
【国際調査報告】
2020505839.tif 000016
2020505839.tif 000017
2020505839.tif 000018