(57)【要約】論理識別子を物理識別子にマップするための方法およびシステムを提供する。一実施形態では、論理経路制御システムは、各アプリケーションに対して、またはより一般には、各エンティティ（例えば、アプリケーションのユーザ）に対して、アプリケーションがコンピュータ上で実行を開始した際に、物理識別子への自らの論理識別子のマッピングを登録することを可能にする。論理識別子によって識別されたアプリケーションにメッセージを送信するために、クライアント・プログラムは、その登録されたマッピングを使用してコンピュータの物理識別子を識別する。アプリケーションがその後、異なるコンピュータ上での実行を開始した場合、そのアプリケーションは、別のマッピングを登録することができる。
2005505946.tif 000002
【特許請求の範囲】
【請求項１】
クライアント・ノードにとって既知の論理識別子に対応するアプリケーション・ノードにメッセージを送信するための前記クライアント・ノードにおける方法であって、
前記論理識別子に関するノード識別ファンクションに基づいて、前記論理識別子に関する物理識別子を計算すること、および
前記計算された物理識別子によって識別されたアプリケーション・ノードに前記メッセージを送信すること
を備えることを特徴とする方法。
【請求項２】
前記ノード識別ファンクションに対する更新を受け取ることを含み、前記更新されたノード識別ファンクションによって識別されたアプリケーション・ノードに、前記更新を受け取った後に送信されるべきメッセージが、送信されることを特徴とする請求項１に記載の方法。
【請求項３】
前記アプリケーション・ノードは、前記メッセージを受信した際、ノード識別ファンクションを計算して、前記メッセージが別のアプリケーション・モードに転送されるべきかどうかを決定することを特徴とする請求項１に記載の方法。
【請求項４】
前記計算は、前記メッセージが送信される先の複数のノードの物理識別子を計算することを特徴とする請求項１に記載の方法。
【請求項５】
前記ノード識別ファンクションに、送信されるべき前記メッセージが渡されることを特徴とする請求項１に記載の方法。
【請求項６】
前記ノード識別ファンクションは、前記ノード識別ファンクションに何が渡されるべきかを示す関連する基準宣言を有することを特徴とする請求項１に記載の方法。
【請求項７】
前記ノード識別ファンクションは、基準をキーにマップする関連するキー・ファンクションを有することを特徴とする請求項６に記載の方法。
【請求項８】
前記キーは、前記物理識別子を識別するのに使用されることを特徴とする請求項７に記載の方法。
【請求項９】
前記ノード識別ファンクションは、基準を物理識別子にマップするデータ構造を有することを特徴とする請求項１に記載の方法。
【請求項１０】
前記データ構造は、ツリー構造であることを特徴とする請求項９に記載の方法。
【請求項１１】
前記ノード識別ファンクションは、それぞれが、基準宣言、キー・ファンクション、およびマッピング・データ構造を有する複数の論理識別子に共通であることを特徴とする請求項１に記載の方法。
【請求項１２】
クライアント・ノードは、前記アプリケーション・ノードから前記ノード識別ファンクションを受け取ることを特徴とする請求項１に記載の方法。
【請求項１３】
ノード識別ファンクションに対する論理識別子のマッピングは、サーバ・ノードにおいて保持されることを特徴とする請求項１に記載の方法。
【請求項１４】
ノード識別ファンクションに対する論理識別子のマッピングは、サーバ・ノードにおいて保持され、前記ノード間に分散されることを特徴とする請求項１に記載の方法。
【請求項１５】
ノード識別ファンクションに対する論理識別子のマッピングは、前記ノード間に分散されることを特徴とする請求項１に記載の方法。
【請求項１６】
メッセージ送信構成要素およびメッセージ受信構成要素を有する物理経路制御層と、
論理メッセージ送信構成要素および論理メッセージ受信構成要素を有する論理経路制御層とを備える論理経路制御システムであって、
送信元ノードの前記論理経路制御層の前記論理メッセージ送信構成要素は、アプリケーションのクライアントから論理宛先およびメッセージを受け取って前記論理宛先に関連付けられた宛先ノードのノード識別子を識別し、次に前記ノード識別子および前記メッセージを前記物理経路制御層の前記メッセージ送信構成要素に提供し、
前記送信元ノードの前記物理経路制御層の前記メッセージ送信構成要素は、前記宛先ノードの前記提供されたノード識別子、およびメッセージを受け取って送信元ノードから前記宛先ノードまでのパスを識別し、次に前記メッセージを前記宛先ノードに送信し、
前記宛先ノードの前記物理経路制御層の前記メッセージ受信構成要素は、前記送信元ノードから送信された前記メッセージを受信して前記受信されたメッセージを前記論理経路制御層の前記論理メッセージ受信構成要素に提供し、
前記宛先ノードの前記論理経路制御層の前記論理メッセージ受信構成要素は、前記提供されたメッセージを受信して前記メッセージを前記アプリケーションに提供する
ことを特徴とするシステム。
【請求項１７】
前記送信元ノードの前記論理経路制御層は、前記ノード識別子を計算する前記論理宛先に関するノード識別ファンクションを含むことを特徴とする請求項１６に記載の論理経路制御システム。
【請求項１８】
前記ノード識別ファンクションは、前記メッセージの内容に基づいて、前記ノード識別子を計算することを特徴とする請求項１７に記載の論理経路制御システム。
【請求項１９】
前記ノード識別ファンクションは、前記宛先ノードによって提供されることを特徴とする請求項１７に記載の論理経路制御システム。
【請求項２０】
前記ノード識別ファンクションは、前記宛先ノードによって更新されることを特徴とする請求項１７に記載の論理経路制御システム。
【請求項２１】
前記ノード識別ファンクションは、複数のノード識別子を計算することを特徴とする請求項１７に記載の論理経路制御システム。
【請求項２２】
前記論理経路制御層の前記論理メッセージ送信構成要素は、ピア・ノードに探索メッセージを送信して前記ピア・ノードが前記ノード識別子を提供することができるかどうかを決定することによって、宛先ノードのノード識別子を識別することを特徴とする請求項１７に記載の論理経路制御システム。
【請求項２３】
前記論理経路制御層の前記論理メッセージ送信構成要素は、前記ノード識別子を提供するサーバ・ノードに前記宛先ノード識別子を送信することによって、宛先ノードのノード識別子を識別することを特徴とする請求項１７に記載の論理経路制御システム。
【請求項２４】
前記物理経路制御層の前記メッセージ送信構成要素は、前記宛先ノードに転送するために前記メッセージを前記サーバ・ノードに送信することを特徴とする請求項１６に記載の論理経路制御システム。
【請求項２５】
前記サーバ・ノードは、前記宛先ノードがオンラインになるまで前記メッセージを保管することを特徴とする請求項２４に記載の論理経路制御システム。
【請求項２６】
前記論理経路制御層の前記論理メッセージ受信構成要素は、前記メッセージが別のノードに転送されるべきかどうかを決定することを特徴とする請求項１６に記載の論理経路制御システム。
【請求項２７】
前記メッセージが別のノードに転送されるべきかどうかの前記決定は、ノード識別子を計算するノード識別ファンクションに基づくことを特徴とする請求項２６に記載の論理経路制御システム。
【請求項２８】
前記宛先ノードと前記送信元ノードは、異なる複数の組織によって運用されることを特徴とする請求項２６に記載の論理経路制御システム。
【請求項２９】
前記宛先ノードと前記別のノードは、異なる組織の管理下にあることを特徴とする請求項２６に記載の論理経路制御システム。
【請求項３０】
前記物理経路制御層の前記メッセージ送信構成要素は、ネットワーク・アドレスに対するノード識別子のマッピングを使用して前記宛先ノードに関連付けられたネットワーク・アドレスに前記メッセージを送信することを特徴とする請求項１６に記載の論理経路制御システム。
【請求項３１】
前記ネットワーク・アドレスは、ＩＰアドレスを含むことを特徴とする請求項３０に記載の論理経路制御システム。
【請求項３２】
前記物理経路制御層の前記メッセージ送信構成要素は、ＴＣＰ／ＩＰプロトコルを使用して前記メッセージを送信することを特徴とする請求項１６に記載の論理経路制御システム。
【請求項３３】
アプリケーションのクライアントから論理宛先およびメッセージを受信して、前記論理宛先に関連付けられた宛先ノードのノード識別子であって論理マッピング宛先にメッセージを送信する論理メッセージ送信構成要素を使用することによって識別されたノード識別子によって識別されたノードに、物理経路制御層を使用して前記メッセージを送信する送信元ノードの論理メッセージ送信構成要素と、
前記物理経路制御層によって提供された前記メッセージを受信して前記メッセージを前記アプリケーションに提供する前記宛先ノードの論理メッセージ受信構成要素と
を備えることを特徴とする論理経路制御システム。
【請求項３４】
前記送信元ノードの前記論理経路制御層は、前記ノード識別子を計算する前記論理宛先に関するノード識別ファンクションを含むことを特徴とする請求項３３に記載の論理経路制御システム。
【請求項３５】
前記ノード識別ファンクションは、前記メッセージの内容に基づいて、前記ノード識別子を計算することを特徴とする請求項３４に記載の論理経路制御システム。
【請求項３６】
前記ノード識別ファンクションは、前記宛先ノードによって提供されることを特徴とする請求項３４に記載の論理経路制御システム。
【請求項３７】
前記ノード識別ファンクションは、前記宛先ノードによって更新されることを特徴とする請求項３４に記載の論理経路制御システム。
【請求項３８】
前記ノード識別ファンクションは、前記メッセージが送信されるべきノードの複数のノード識別子を計算することを特徴とする請求項３４に記載の論理経路制御システム。
【請求項３９】
前記論理マッピング宛先は、サーバ・ノードに集中化されることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４０】
前記論理マッピング宛先は、複数のサーバ・ノードにわたって分散されることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４１】
前記物理経路制御層は、前記宛先ノードに転送するために前記メッセージをサーバ・ノードに送信することを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４２】
前記サーバ・ノードは、前記宛先ノードがオンラインになるまで前記メッセージを保管することを特徴とする請求項４１に記載の論理経路制御システム。
【請求項４３】
前記論理メッセージ受信構成要素は、前記メッセージが別のノードに転送されるべきかどうかを決定することを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４４】
前記メッセージが別のノードに転送されるべきかどうかの前記決定は、ノード識別子を計算するノード識別ファンクションに基づくことを特徴とする請求項４３に記載の論理経路制御システム。
【請求項４５】
前記宛先ノードと前記別のノードは、異なる組織によって運用されることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４６】
前記宛先ノードと前記送信元ノードは、異なる組織の管理下にあることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４７】
前記論理宛先マッピングは、サーバ・ノードにおいて保管されることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４８】
前記論理宛先マッピングは、ノード間に分散されることを特徴とする請求項３３に記載の論理経路制御システム。
【請求項４９】
論理宛先に対応する複数のノード識別子を識別すること、および
前記ノード識別子によって識別されたノードにメッセージを送信すること
を備える方法によって前記メッセージを前記論理宛先に送信するようにコンピュータ・システムを制御する命令を収容することを特徴とするコンピュータ可読媒体。
【請求項５０】
ノードは、前記メッセージを受信した際、ノード識別ファンクションを使用して、前記メッセージが別のノードに転送されるべきかどうかを決定することを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項５１】
前記メッセージを転送する前記ノードは、前記論理宛先に関するロード・バランシング機能を行うことを特徴とする請求項５０に記載のコンピュータ可読媒体。
【請求項５２】
前記識別することは、ノード識別ファンクションを使用して前記複数のノード識別子を識別することを含むことを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項５３】
前記ノード識別ファンクションは、送信されるべき前記メッセージが渡されることを特徴とする請求項５２に記載のコンピュータ可読媒体。
【請求項５４】
前記ノード識別ファンクションは、前記ノード識別ファンクションに何が渡されるべきかを示す関連する基準を有することを特徴とする請求項５２に記載のコンピュータ可読媒体。
【請求項５５】
前記ノード識別ファンクションは、基準をキーにマップする関連するキー・ファンクションを有することを特徴とする請求項５４に記載のコンピュータ可読媒体。
【請求項５６】
前記キーは、前記ノード識別子を識別するのに使用されることを特徴とする請求項５５に記載のコンピュータ可読媒体。
【請求項５７】
前記ノード識別ファンクションは、基準をノード識別子にマップするデータ構造を有することを特徴とする請求項５２に記載のコンピュータ可読媒体。
【請求項５８】
前記データ構造は、ツリー構造であることを特徴とする請求項５７に記載のコンピュータ可読媒体。
【請求項５９】
前記ノード識別ファンクションは、基準、キー・ファンクション、およびマッピング・データ構造をそれぞれが有する複数の論理宛先に共通であり、前記ノード識別ファンクションは、前記基準および前記キー・ファンクションを使用してキーを生成し、前記生成されたキーを使用して前記マッピング・データ構造からノード識別子を識別することを特徴とする請求項５２に記載のコンピュータ可読媒体。
【請求項６０】
ノード識別子に対する論理宛先のマッピングは、集中システムにおいて格納されることを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項６１】
ノード識別子に対する論理宛先のマッピングは、分散された場所において格納されることを特徴とする請求項４９に記載のコンピュータ可読媒体。
【請求項６２】
論理宛先をノード識別子にマップするための、論理宛先に関する、ノード識別ファンクションを登録する手段と、
論理宛先に関するノード識別ファンクションを使用して、前記論理宛先から宛先ノード識別子を識別する手段と、
前記宛先ノード識別子によって識別されたノードにメッセージを送信する手段と
を備えることを特徴とする論理経路制御システム。
【請求項６３】
論理宛先は、アプリケーションに関連付けられ、前記アプリケーションは、前記関連する論理宛先に関するノード識別ファンクションを登録することを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６４】
前記ノード識別ファンクションは、前記メッセージの内容に基づいて、前記宛先ノード識別子を計算することを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６５】
前記ノード識別ファンクションは、前記宛先ノードによって登録されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６６】
前記ノード識別ファンクションは、前記宛先ノードによって更新されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６７】
前記ノード識別ファンクションは、複数のノード識別子を計算することを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６８】
前記論理マッピング宛先は、サーバ・ノードに集中化されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項６９】
前記宛先ノード識別子を識別するための手段は、複数のサーバ・ノードにわたって分散された宛先ノード識別子に対する論理宛先のマッピングを含むことを特徴とする請求項６２に記載の論理経路制御システム。
【請求項７０】
前記宛先ノードとメッセージを発信するノードは、異なる組織によって運用されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項７１】
前記宛先ノードとメッセージを発信するノードは、異なる組織の管理下にあることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項７２】
ノード識別子に対する論理宛先の前記マッピングは、中央の場所（central location）において保管されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項７３】
ノード識別子に対する論理宛先の前記マッピングは、分散された場所において格納されることを特徴とする請求項６２に記載の論理経路制御システム。
【請求項７４】
アプリケーションに関連付けられた論理宛先からノードのノード識別子へのマッピングを登録するためのコンピュータ・システムにおける方法であって、
前記論理宛先の指示および前記ノード識別子の指示を論理経路制御マップに送信して、前記論理経路制御マップが、前記論理宛先に関する前記ノード識別子を要求するクライアントに前記送信されたノード識別子を提供すること
を備えることを特徴とする方法。
【請求項７５】
前記アプリケーションは、前記論理宛先を前記ノード識別子にマップするノード識別ファンクションを前記論理経路制御マップに送信することを特徴とする請求項７４に記載の方法。
【請求項７６】
前記アプリケーションは、キー・ファンクション、基準宣言、および経路制御テーブルを前記論理経路制御マップに送信することを特徴とする請求項７４に記載の方法。
【請求項７７】
前記ノードは、前記アプリケーションが実行されているノードであることを特徴とする請求項７４に記載の方法。
【請求項７８】
前記論理経路制御マップは、論理宛先によって識別されることを特徴とする請求項７４に記載の方法。
【請求項７９】
前記アプリケーションは、複数のノード識別子の指示を前記論理経路制御マップに送信することを特徴とする請求項７４に記載の方法。
【請求項８０】
前記アプリケーションは、前記論理宛先に関する新しいノード識別子を示す更新を送信することを特徴とする請求項７４に記載の方法。
【請求項８１】
前記ノード識別子を前記論理宛先から切り離す指示を送信することを含むことを特徴とする請求項７４に記載の方法。
【請求項８２】
前記論理経路制御マップは、集中化されることを特徴とする請求項７４に記載の方法。
【請求項８３】
前記論理経路制御マップは、分散されることを特徴とする請求項７４に記載の方法。
【請求項８４】
前記論理経路制御マップは、分散型と集中型の混成であることを特徴とする請求項７４に記載の方法。
【請求項８５】
クライアントは、論理宛先に関する前記ノード識別子を前記論理経路制御マップから取り出すことを特徴とする請求項７４に記載の方法。
【請求項８６】
前記クライアントは、前記ノード識別子に対する前記論理宛先のマッピングをキャッシュに入れることを特徴とする請求項８５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
説明する技術は、一般に、物理識別子への論理識別子のマッピングに関する。
【背景技術】
【０００２】
Ｗｅｂブラウザなどのアプリケーション・プログラムは、ＨＴＴＰプロトコルを使用してリソース（資源）にアクセスする。ＨＴＴＰプロトコルは、ユニフォーム・リソース・アイデンティファイア（Uniform Resource Identifier）（「ＵＲＩ」）を使用してアクセスされるべきリソースを識別する。ＵＲＩは、ユニフォーム・リソース・ロケータ（Uniform Resource Locator）（「ＵＲＬ」）またはユニフォーム・リソース・ネーム（Uniform Resource Name）（「ＵＲＮ」）、あるいはネットワーク・リソースを識別する任意の他のフォーマットされたストリングである。ＵＲＩの例としてのＵＲＬは、（非特許文献１）で詳細に説明されている。各ＵＲＬは、リソースがどこに所在するかを識別するドメイン名を含んでいる。例えば、ＵＲＬ「ｈｔｔｐ：／／ｗｗｗ．ｏｄｉ．ｃｏｍ／ｈｏｍｅ．ｈｔｍ」は、「ｈｏｍｅ．ｈｔｍ」と名付けられたリソースが、「ｏｄｉ．ｃｏｍ」というドメインに所在することを示す。ＨＴＴＰプロトコルは、ＵＲＬで識別されたドメイン名に関連するコンピュータへのメッセージを経路制御するのに、ＴＣＰ／ＩＰなどの、下層のトランスポート層を使用する。ただし、ＴＣＰ／ＩＰプロトコルは、ドメイン名ではなくＩＰアドレス（例えば、「１２８．３２．０．６」）を使用してコンピュータを識別する。様々なコンピュータ技術が、ドメイン名などの高レベルの識別子をＩＰアドレスなどの低レベルの識別子にマップするように開発されている。
【０００３】
１つのそのような技術が、インターネットによって使用されるＴＣＰ／ＩＰプロトコル・スイートの一環として提供されるドメイン・ネーム・サービス（「ＤＮＳ」）によって実施されている。ＤＮＳは、ドメイン名をＩＰアドレスにマップするネーム・サービスである。アプリケーションは、ＨＴＴＰプロトコルを使用してメッセージをドメイン名に送信する際、ＤＮＳの一環であるローカル・ドメイン・ネーム・サーバ（例えば、ＩＳＰによって提供される）に対してドメイン名を指定する解決要求を提出する。ローカル・ドメイン・ネーム・サーバは、ブラウザを実行するクライアント・コンピュータの構成ファイルにおいて識別することができる。ローカル・ドメイン・ネーム・サーバは、ローカル・キャッシュを調べて、自らが、ＩＰアドレスに対するそのドメイン名のマッピングを有するかどうかを決定する。有する場合、ローカル・ドメイン・ネーム・サーバは、そのＩＰアドレスをアプリケーションに戻す。有さない場合、ローカル・ドメイン・ネーム・サーバは、解決要求をルート・ドメイン・ネーム・サーバに転送する。ルート・ドメイン・ネーム・サーバは、自らのネーム・サーバに各トップレベル・ドメイン名（例えば、「ｃｏｍ」）のマッピングを収容している。ルート・ドメイン・ネーム・サーバは、トップレベル・ドメイン・ネーム・サーバの名前をローカル・ドメイン・ネーム・サーバに提供することによって解決要求に応答する。ローカル・ドメイン・ネーム・サーバは、トップレベル・ドメイン・ネームサーバの名前をキャッシュに入れる。次に、ローカル・ドメイン・ネーム・サーバは、解決要求をトップレベル・ドメイン・ネーム・サーバに送信し、第２レベル・ドメイン名（例えば、「ｏｄｉ．ｃｏｍ」）に関するドメイン・ネーム・サーバの名前を受け取る（また、キャッシュに入れることができる）。ローカル・ドメイン・ネーム・サーバは、第２レベル・ドメイン名に関するドメイン・ネーム・サーバに解決要求を転送する。そのドメイン・ネーム・サーバは、第２レベル・ドメイン名に関連するＩＰアドレスを戻す。別法として、そのドメイン・ネーム・サーバは、第３レベル・ドメイン名（例えば、「ｗｗｗ．ｏｄｉ．ｃｏｍ」）に関するドメイン・ネーム・サーバの名前を戻し、そのローカル・ドメイン・ネーム・サーバが、ドメイン名の各レベルに関してプロセスを繰り返すことが可能である。最終的に、ローカル・ドメイン・ネーム・サーバは、例えば、アプリケーションを実行するコンピュータに、ドメイン名のＩＰアドレスを送信する。
【０００４】
【非特許文献１】
T. Berners-Lee et al., Uniform Resource Locators (URL), RVC 1738, CERN, Xerox PARC, Univ. of Minn., December 1994
【発明の開示】
【課題を解決するための手段】
【０００５】
論理識別子を物理識別子にマッピングするための方法およびシステムを提供する。一実施形態では、論理経路制御システム（logical routing system）は、各アプリケーションまたは各エンティティ（例えば、アプリケーションのユーザ）対しては、アプリケーションがコンピュータ上で実行を開始したときに、物理識別子への自らの論理識別子のマッピングを登録することを可能にする。論理識別子によって識別されたアプリケーションにメッセージを送信するために、クライアント・プログラムは、その登録されたマッピングを使用してコンピュータの物理識別子を識別する。アプリケーションが、その後、異なるコンピュータ上での実行を開始した場合、そのアプリケーションは、別のマッピングを登録することができる。一実施形態では、論理経路制御システムは、アプリケーションが、そのアプリケーションに関連付けられた論理識別子に対する物理識別子を生成するのに使用されるファンクションを登録することを可能にする。ファンクションの使用は、物理識別子に対するマッピングが、クライアント・コンピュータの場所、またはワーク・ロード・バランシングの目標などの様々な基準（criteria）に基づいて、変化することを可能にする。また、論理経路制御システムは、論理識別子が複数の物理識別子にマップされることも可能にする。そのようなマッピングを使用して、クライアント・プログラムは、複数の物理識別子によって識別されたコンピュータのそれぞれにメッセージを送信することになる。
【発明を実施するための最良の形態】
【０００６】
図１は、一実施形態における論理経路制御システムを示すためのブロック図である。この論理経路制御システムは、クライアント・コンピュータ・システム１０１（「クライアント・ノード」）とアプリケーション・コンピュータ・システム１０３（「アプリケーション・ノード」）の間でメッセージを送信するのに使用される。コンピュータ・システムは、インターネットなどの通信機構１０４を介して互いに接続される。アプリケーション・ノードにおいて実行されるアプリケーションは、クライアント・ノードにおいて実行されるクライアント・プログラムにサービスを提供する。論理経路制御システムは、クライアント・ノードがアプリケーションに（例えば、アプリケーションのサービスを要求する）メッセージを、物理識別子（「ノード識別子」とも呼ばれる）ではなく、論理識別子（「論理宛先」とも呼ばれる）によってアプリケーションを識別することにより、送信することを可能にする論理ネーミング機構を提供する。例えば、アプリケーションの論理識別子は、「アドレス帳」であることが可能であり、他方、物理識別子は、アプリケーションが実行されているノードを一意的に識別するグローバルに固有な識別子であることが可能である。（本説明は、例示的なアプリケーションとして「アドレス帳」を使用する。アドレス帳アプリケーションは、電子メール・アドレス（例えば、ＪｏｈｎＳｍｉｔｈ＠ｃｏｍｐａｎｙ．ｃｏｍ）への人々の名前（例えば、Ｊｏｈｎ  Ｓｍｉｔｈ）のマッピングを保持する。アドレス帳アプリケーションは、個人の電子メール・アドレスを要求するクライアント・プログラムからメッセージを受信し、その電子メール・アドレスを含む応答メッセージをクライアント・プログラムに送信する。）クライアント・ノード（または、より正確には、クライアント・ノード上で実行されるコンピュータ・プログラム）は、メッセージをアプリケーションに送信することを望む場合、そのメッセージをそのアプリケーションの論理識別子とともに論理経路制御システムに提供する。論理経路制御システムは、アプリケーションが実行されているノードの適切な物理識別子を識別し、メッセージをそのノードに送信する。アプリケーションは、アプリケーション・ノードにおいて実行を開始したとき、論理経路制御システムに登録する。論理経路制御システムは、アプリケーションの論理識別子から、アプリケーションが実行されているアプリケーション・ノードの物理識別子へのマッピングを保持することができる。クライアント・ノードは、このマッピングを使用して、論理識別子からアプリケーションの物理識別子を識別することができる。論理識別子は、個々のアプリケーション・ノードについて複数の物理識別子にマップすることが可能である。例えば、アドレス帳アプリケーションの複数のコピーが、クライアント・プログラムの複数の要求に対処するように異なるアプリケーション・ノードで実行されていることが可能である。クライアント・プログラムがアドレスを取り出すことを望む場合、アドレス取出しファンクションの論理識別子が、１つの物理識別子だけにマップすることが可能である。これとは対照的に、クライアント・プログラムがアドレスを挿入すること���望む場合、アドレス挿入ファンクションの論理識別子が、アプリケーションが実行されているすべてのノードの物理識別子にマップすることが可能である。したがって、論理経路制御システムは、クライアント・プログラムが、アプリケーションの論理識別子を使用して開発されることを可能にし、また論理識別子が、クライアント・プログラムの実行中に物理識別子に解決されることを可能にする機構を提供する。ノードにおいて実行されるプログラムは、クライアント・プログラムからのサービスの要求に応答することができ、その他のアプリケーションからサービスを要求できることで、アプリケーションとクライアント・プログラムの両方であることが可能であることが、当分野の技術者には認められよう。
【０００７】
アプリケーションは、論理経路制御システムに自らを登録して、自らの論理識別子を物理ノード識別子にマップする。論理経路制御システムは、これらの登録の論理経路制御マップを保持することができる。論理経路制御システムは、分散される態様で複数のアプリケーション・ノードと複数のクライアント・ノード全体にわたる論理経路制御マップを実装すること、集中システム（central system）として論理経路制御マップを実装すること、または分散されたシステムと集中化されたシステム（distributed and centralized systems）の組合せで論理経路制御マップを実装すること、ができる。アプリケーションが、論理経路制御システムに登録すると、論理経路制御マップを識別する論理宛先（例えば、「論理経路制御マップ（logical routing map）」）に登録メッセージが送信することが可能になる。同様に、クライアント・プログラムがメッセージをアプリケーションに送信すると、論理経路制御システムが、メッセージを同一の論理宛先に送信して、そのアプリケーションの物理識別子を取り出すことができる。より一般的には、論理経路制御マップは、論理経路制御システムによって使用されるだけでなく、論理経路制御システム自体を介してアクセス可能な「アプリケーション」であると考えることができる。
【０００８】
一実施形態では、論理経路制御マップは、各論理名に関して、その論理名に関連付けられたノードのノード識別子を戻すノード識別ファンクションを有する。論理名に関連付けられたアプリケーションは、論理経路制御システムに登録すると、自らのノード識別ファンクションを論理経路制御システムに提供する。ノード識別ファンクションは、パラメータまたは基準（例えば、送信されるべきメッセージ）を入力することができ、そのパラメータまたは基準に合う適切なノード識別子を戻す。例えば、論理名に関連付けられたアプリケーションが、各大陸に物理的に所在するノードにおいて実行されていることが可能である。ノード識別ファンクションは、送信側ノードが所在している国を入力し、その国が存在する大陸に所在するノードに関するノード識別子を戻すことができる。
【０００９】
論理経路制御システムは、論理識別子と物理識別子の間のマッピングが動的に変更されるのを可能にする。そのマッピングは、様々な仕方で動的に変更され得る。例えば、アプリケーションは、新しいノード識別ファンクションを登録することにより、そのマッピングを動的に変更することができ、新しいノード・ファンクションは、サービスの要求に応答してクライアント・プログラムを実行するノードに、クライアント・プログラムによって送信されることが可能である。新しいノード識別ファンクションを受信したノードは、そのアプリケーションに関する古いノード識別ファンクションを置き換えることができる。論理経路制御システムは、既存のネットワークを使用してマッピングを伝送することができる。例えば、既存のネットワークは、インターネットのＩＰネットワークおよびＤＳＮであることが可能である。そのような場合、論理識別子は、論理経路制御システムによってＤＮＳ名（すなわち、物理識別子）にマップし、最終的に、既存のネットワークのトランスポート・システムによってＩＰアドレス（すなわち、ネットワーク・アドレス）にマップすることが可能である。マッピングの動的な変更は、デマンドを動的に満たすように要求に応えることを可能にする。例えば、アドレス帳アプリケーションに対するデマンドが増大するにつれ、そのアプリケーションを追加のノードにおいて立ち上げることができる。クライアント・プログラムを実行するノードに送信される新しい識別ファンクションは、要求のいくつかを追加のノードに分配することができる。同様に、デマンドが減少するにつれ、アドレス帳アプリケーションを実行するノードの数を減少させることもできる。
【００１０】
論理経路制御システムは、メッセージを経路制御するために様々な基準を使用する。論理経路制御システムは、基準が、クライアント・プログラムによって、またはサービスを提供するアプリケーションによって提供されることを可能にすることができる。例えば、クライアント・プログラムは、要求に関連付けられた優先順位を指定することができ、ノード識別ファンクションは、その優先順位の要求にサービスすることができるノードを識別する。このアプリケーションは、ある国のクライアントがすべての要求をあるノードに送信させるということを指定することが可能である。論理経路制御システムは、同一の論理名を使用するアプリケーションの複数のコピーの１つへの基準ベースの経路制御が可能になる。例えば、通信速度を向上させるのに、アプリケーションのノード識別ファンクションは、クライアント・プログラムのノードに地理的に近いノードに関する物理識別子を選択することができる。また、論理経路制御システムは、アプリケーションのサービスが複数のノードにわたって分散されることを可能にする。例えば、アドレス帳アプリケーションは、アルファベットの異なる部分に関連するアドレス要求にそれぞれがサービスする複数のノード上で実行されることが可能である。１つのノードが、Ａ〜Ｍで始まる名前に関する要求にサービスし、別のノードが、Ｎ〜Ｚで始まる名前に関する要求にサービスすることが可能である。
【００１１】
一実施形態では、論理経路制御システムは、物理識別子に対する論理識別子のマッピング（例えば、ノード識別ファンクション）を保持するために分散モデルを使用することが可能である。そのような分散モデルでは、各ノードが、そのノード上で実行されるアプリケーションに関するマッピングを保持する。別のノードがマッピングを受け取った際（例えば、この他のノードのクライアント・プログラムが、アプリケーションにメッセージを送信しているため）、その別のノードがそのマッピングをキャッシュに入れることが可能である。論理経路制御システムは、接続されたノードに探索要求を送信することにより、マッピングを探索することができる。探索要求を受信した各ノードは、そのマッピングを有しているかどうか自らのローカル・キャッシュを調べる。有している場合、ノードは、そのマッピングを要求側ノードに送信する。有していない場合、ノードは、自らが接続されているノード群にその探索要求を転送する。要求側ノードに向かう途中のマッピングを受信した各ノードは、そのマッピングをキャッシュに入れることができる。（この探索は、ネットワークのトポロジを自動的に見出す。）クライアント・プログラムを実行するノードは、そのクライアント・プログラムがメッセージをアプリケーションに送信した際、そのアプリケーションがもはや利用できないことを発見する可能性がある。そのような発見がなされると、論理経路制御システムは、自らのキャッシュからそのマッピングを除去することができる。この探索メッセージは、ノード・レベルのメッセージをサポートする論理経路制御システムの１例である。したがって、論理経路制御システムは、ノード・レベルのメッセージとアプリケーション・レベルのメッセージの両方をサポートする。
【００１２】
別の実施形態では、論理経路制御システムは、マッピングを保持するために分散モデルと集中モデルの組合せを使用することができる。各ノードにおいてマッピングを保持することに加えて、論理経路制御システムは、すべてのマッピングを格納するサーバ・ノードを有することが可能である。各アプリケーションは、自らの論理識別子を論理経路制御システムに登録する。論理経路制御システムは、物理識別子に対する論理識別子のマッピングをノードにおいてローカルでキャッシュに入れ、そのマッピングをサーバ・ノードに送信することができる。クライアント・プログラムがメッセージを論理識別子に送信した際、論理経路制御システムは、まず、マッピングのローカル・キャッシュを調べることができる。その論理識別子がローカル・キャッシュの中に存在しない場合、論理経路制御システムは、サーバ・ノードにそのマッピングを要求することができる。サーバ・ノードが利用可能でない場合、論理経路制御システムは、分散モデルと同じやり方でマッピングを探索することができる。
【００１３】
論理識別子は、ユーザを識別することが可能である。ユーザがアプリケーションまたはノードにログオンした際、そのユーザが、そのユーザの名前などの論理識別子を使用して論理経路制御システムに登録されることが可能である。別のユーザがそのユーザにメッセージを送信することを望む場合、その別のユーザは、論理識別子を使用してそのユーザを論理経路制御システムに対して識別する。論理経路制御システムは、クライアント・プログラムにメッセージを伝送するのと同じやり方でユーザにメッセージを伝送する。実際には、論理経路制御システムは、メッセージをユーザに表示する責務を有するクライアント・プログラムにメッセージを送信することができる。
【００１４】
一実施形態では、論理経路制御システムは、論理識別子から物理識別子へのマッピングを行い、トランスポート・システムが、物理識別子からネットワーク・アドレスへのマッピングを行う。ただし、この物理識別子がトランスポート・システムによって使用される最終の識別子であっても良いことは、当分野の技術者には認められよう。（例えば、この物理識別子は、ネットワーク・アドレスであっても良い。）そのような場合、トランスポート・システムは、全くマッピングを行わず、その物理識別子によって識別されたノードにメッセージを転送する。また、論理経路制御システムのファンクションをトランスポート・システムに統合することができ、あるいは物理層の一部と考えることさえ可能であることも、当分野の技術者には認められよう。
【００１５】
図２は、クライアント・プログラムがメッセージをアプリケーションに送信する際の処理を示す流れ図である。ブロック２０１で、アプリケーションが、実行を開始したとき、自らの論理識別子、およびアプリケーションが現在実行されているノードの物理識別子、を論理経路制御システムに登録する。（クライアント・プログラムも、同様の仕方で登録を行う。）一実施形態では、実際の物理識別子を登録する代わりに、ノード識別ファンクションが登録される。物理識別子が必要とされる場合はいつでも、ノード識別ファンクションが呼び出され、送信されるべきメッセージを渡し、１つまたは複数の物理識別子が戻される。例えば、アドレス帳アプリケーションは、そのノード識別ファンクションとして、個人のラスト・ネームを、そのラスト・ネームを伴う要求に応対することを担うアプリケーションのインスタンスを実行しているノードの物理識別子に、マップするノード識別ファンクションを登録することが可能である。ブロック２０２で、論理経路制御システムが、アプリケーションに関するノード識別ファンクションに対する論理識別子のマッピングを格納する。ブロック２０３で、クライアント・プログラムは、論理経路制御システムを呼び出して、論理識別子によって識別されたアプリケーションにメッセージを送信する。ブロック２０４で、論理経路制御システムは、論理経路制御マッピングを使用して物理識別子を識別する。クライアント・ノードにおける論理経路制御システムは、メッセージを渡してノード識別ファンクションを呼び出す。ノード識別ファンクションは、アプリケーションのインスタンスに関連付けられた物理識別子を戻す。論理経路制御システムは、その物理識別子によってアドレス指定されるノードにメッセージを送信する。アプリケーション・ノードにおける論理経路制御システムは、そのメッセージを受信すると、メッセージが別のノードに転送されるべきか、または当該のノードにおいて処理されるべきかを決定することができる。アプリケーション・ノードにおける論理経路制御システムは、ノード識別ファンクションを使用して、そのメッセージを処理すべきノードを識別することができる。ブロック２０６で、メッセージは、当該のノードにおいて処理されるべきものと想定すると、アプリケーションは、メッセージを処理する。ブロック２０７で、アプリケーションは、論理経路制御システムを使用してクライアント・ノードに応答を送信する。論理経路制御システムは、更新されたノード識別ファンクションもクライアント・ノードに送信することができる。クライアント・ノードは、その応答、および更新されたノード識別ファンクションを受け取る。クライアント・ノードにおける論理経路制御システムは、その応答をクライアント・プログラムに渡し、後のメッセージを論理識別子に送信する際、その更新されたノード識別ファンクションを使用する。更新されたノード識別ファンクションは、アプリケーションが、複数のアプリケーション・ノードにわたってどのように分散されているかについてのアーキテクチャの変更を反映することが可能である。
【００１６】
図３は、アプリケーションのインスタンスが複数のノードにおいて実行されている論理経路制御システムを示すためのブロック図である。アプリケーションは、アプリケーション・ノード３０３、３０５、および３０６において実行されている。アプリケーションは、最初、アプリケーション・ノード３０３において１つのインスタンスだけを実行していた。アドレス帳サービスのデマンドが増大するにつれ、アプリケーション・ノード３０５および３０６が、オンライン状態にされ、アプリケーションのインスタンスの実行を開始する。アプリケーション・ノード３０３は、文字Ａ〜Ｊで始まる名前に関する要求にサービスし、アプリケーション・ノード３０５は、文字Ｋ〜Ｓで始まる名前に関する要求にサービスし、またアプリケーション・ノード３０６は、文字Ｔ〜Ｚで始まる名前に関する要求にサービスする。図２の例を続けると、クライアント・プログラムが「Ｊｏｈｎ  Ｓｍｉｔｈ」に関するアドレスを要求することを望む場合、論理経路制御システムは、「アドレス帳」に対する論理識別子に関するノード識別ファンクションを使用し、これにより、アプリケーション・ノード３０３が識別される。論理経路制御システムは、その要求をアプリケーション・ノード３０３に送信する。アプリケーション・ノード３０３における論理経路制御システムは、その要求を受信すると、自らのノード識別ファンクションを使用してアプリケーション・ノード３０５を識別する。アプリケーション・ノード３０３の論理経路制御システムは、要求をアプリケーション・ノード３０５に転送し、アプリケーション・ノード３０５において論理経路制御システムがメッセージをアプリケーションに提供する。アプリケーション・ノード３０５において実行されるアプリケーションのインスタンスは、電子メール・アドレスを取り出し、そのアドレスをクライアント・ノードに送信する。アプリケーション・ノード３０５の論理経路制御システムは、文字Ａ〜Ｊで始まる名前をアプリケーション・ノード３０３にマップし、文字Ｋ〜Ｓで始まる名前をアプリケーション・ノード３０５にマップし、文字Ｔ〜Ｚで始まる名前をアプリケーション・ノード３０６にマップする更新されたノード識別ファンクションもクライアント・ノードに送信することができる。このようにして、クライアント・ノードの論理経路制御システムは、次回、更新されたノード識別ファンクションを使用する際、要求にサービスする責務を有する適切なアプリケーション・ノードを識別し、要求を識別されたアプリケーション・ノードに、ダイレクトに送信する。別法として、アプリケーション・ノード３０５が更新されたノード識別ファンクションを送信しない場合、後続の要求は、アプリケーション・ノード３０３を経由するように経路制御される。アプリケーションの複数のインスタンスが同じ機能を提供する場合、ノード識別ファンクションは、ランダムにインスタンスの物理識別子を選択すること、クライアント・ノードの地理的近さに基づいて物理識別子を選択すること、等ができる。
【００１７】
図４は、アプリケーションに関するロード・バランシングをもたらすノード識別ファンクションの使用を説明するブロック図である。クライアント・ノード４０１が、ロード・バランシング・ノード４０２の１つにマップするノード識別ファンクションを使用する。例えば、ノード識別ファンクションは、ロード・バランシング・ノードの１つをランダムに選択することができる。クライアント・ノードによって使用されるノード識別ファンクションは、ロード・バランシング・ノードによって提供されることが可能である。ロード・バランシング・ノードは、クライアント・ノードから要求を受信すると、アプリケーションによって提供される異なるノード識別ファンクションを使用して、その要求にサービスすべきアプリケーション・ノード４０３を識別する。例えば、Ａ〜Ｊで始まる名前に関する要求にサービスするアドレス帳アプリケーションの複数のインスタンスが存在することが可能である。各ロード・バランシング・ノードは、これらのインスタンスのどれに要求を送信するかを決めることができる。
【００１８】
図５は、一実施形態において論理経路制御システムによって使用されるアプリケーション層（application layer）５１０、論理経路制御層（logical routing layer）５２０、および物理経路制御層（physical routing layer）５３０のアーキテクチャを示すブロック図である。これらの層の機能およびデータ構造は、論理経路制御システムの任意の特定の実装の要件に合わせることができることが、当分野の技術者には認められよう。論理経路制御システムは、一実施形態における論理経路制御層によって提供される機能に対応する。物理経路制御層は、ノード識別子によって識別されたノードにメッセージを送信する責務を有する。ネットワーク内の各ノードには、固有ノード識別子を割り当てることができる。物理経路制御層は、メッセージ送信構成要素（send message component）５３１およびメッセージ受信構成要素（receive message component）５３２を提供する。論理経路制御層は、メッセージ送信構成要素を使用してメッセージを送信し、メッセージ受信構成要素を介してメッセージを受信する。メッセージ送信構成要素は、メッセージおよび宛先ノード識別子（例えば、「ｗｗｗ．ｏｄｉ．ｃｏｍ」）を渡され、その宛先ノード識別子に関するネットワーク・アドレス（例えば、ＩＰアドレスおよびポート）を探し出す。メッセージ送信構成要素は、次に、ＴＣＰ／ＩＰなどの、下層のトランスポート層を呼び出して、そのネットワーク・アドレスにメッセージを送り届ける。メッセージ送信構成要素は、物理経路制御マップに対して宛先ノード識別子に関するネットワーク・アドレスを提供するように要求すること、あるいはメッセージ送信構成要素が接続されている他のノード（すなわち、ピア・ノード）が宛先ノードに関するネットワーク・アドレスを知っている場合、それらの他のノードに対して要求を行うことができる。メッセージ送信構成要素は、後のメッセージをその宛先ノードに送信する際に使用するためにネットワーク・アドレスを物理経路制御テーブルの中にキャッシュする（入れる）ことができる。メッセージ送信構成要素は、次に、メッセージをそのネットワーク・アドレスに送信する。メッセージは、送信元ノードと宛先ノードの間で直接接続を確立することによって送信したり、メッセージを送信元ノードのピア・ノードを介して宛先ノードに転送することによって送信したり、または宛先ノードに転送するためにメッセージを物理経路制御サーバに送信することによって送信したり、することができる。メッセージ送信構成要素は、以下により詳細に説明するとおり、「ノードへの経路を探索する（search for route to node）」構成要素５３３、ノード・ルックアップ構成要素（lookup node component）５３４、およびピア接続確立構成要素（establish peer connection component）５３５を使用する。メッセージ受信構成要素は、宛先ノード向けに受信されたメッセージを処理する。当該のノード（すなわち、構成要素が実行されているノード）が宛先ノードではない場合、メッセージ受信構成要素は、メッセージを宛先ノードに転送しようと試みる。送信元ノードが宛先ノードへのパスを探索していることをメッセージが示す場合、このノードは、宛先ノードへのパスを知っている場合にその探索要求に応答するか、あるいはその探索要求��自らのピア・ノードに転送する。メッセージが、当該のノードにおいて処理されるものとされている場合、メッセージ受信構成要素は、論理メッセージ受信構成要素（receive logical message component）５２２または論理名探索処理構成要素（process logical name search component）５２９Ａを呼び出すことによってメッセージを論理経路制御層に渡す。
【００１９】
論理経路制御層は、論理メッセージ送信構成要素（send logical message component）５２１、論理メッセージ受信構成要素（receive logical message component）５２２、論理名登録構成要素（register logical name component）５２３、論理名探索処理構成要素（process logical name search component）５２９Ａ、および論理宛先更新生成ファンクション（generate logical destination update function）５２９を提供する。アプリケーション層は、論理メッセージ送信構成要素を使用して、アプリケーションまたはユーザである可能性がある論理宛先にメッセージを送信し、また論理メッセージ受信構成要素を介して論理宛先から応答メッセージを受信する。論理メッセージ送信構成要素は、論理識別子およびメッセージを渡され、その論理識別子に関する宛先ノード識別子を識別し、物理経路制御層のメッセージ送信構成要素を使用して宛先ノードにメッセージを送信する。論理メッセージ送信構成要素は、集中サーバによって提供されるノード識別ファンクションを使用して宛先ノード識別子を識別したり、ピア・ノードの探索により宛先ノード識別子を識別したり、または論理宛先自体によって宛先ノード識別子を識別したり、することができる。論理メッセージ送信構成要素は、論理識別子のノード識別ファンクションへのマッピングをキャッシュに入れることができる。論理メッセージ送信構成要素は、以下により詳細に説明する論理宛先解決構成要素（resolve logical destination component）５２４、ユーザ情報構成要素（user information component）５２５、論理宛先探索構成要素（logical destination search component）５２６、応答獲得構成要素（get response component）５２７、および論理宛先更新処理構成要素（process logical destination update component）５２８を使用する。論理メッセージ受信構成要素は、物理経路制御層のメッセージ受信構成要素によって呼び出されて、メッセージを論理経路制御層に渡す。論理メッセージ受信構成要素は、そのメッセージを処理して、そのメッセージをアプリケーション層に提供する。論理名探索処理ファンクションおよび論理宛先更新生成ファンクションを以下により詳細に説明する。論理名登録構成要素は、アプリケーション層によって使用され、論理識別子を論理経路制御層に登録する。論理宛先更新生成構成要素は、論理名探索処理構成要素によって呼び出される。アプリケーション層は、アプリケーション初期設定構成要素（application initialization component）５１１およびアプリケーション受信構成要素（application receive component）５１２を提供することができる。アプリケーション初期設定構成要素は、アプリケーションの論理識別子を論理経路制御層に登録することができる。アプリケーション受信構成要素は、論理メッセージ受信構成要素によって呼び出されて、メッセージを論理経路制御層からアプリケーション層に渡すことを実行する。また、アプリケーション層は、論理メッセージ送信を呼び出してメッセージを論理宛先に送信することも行う。
【００２０】
論理経路制御システムは、メイン・メモリ、中央演算処理装置、入力デバイス（例えば、キーボードおよびポインティング・デバイス）、出力デバイス（例えば、表示デバイス）、およびハード・ドライブを含むコンピュータ・システム上で実行されることが可能である。メイン・メモリおよびハード・ドライブは、論理経路制御システムを実施する命令を含むことが可能なコンピュータ可読媒体である。コンピュータ・システムは、インターネット、ワイドエリア・ネットワーク、ポイント・ツー・ポイント・ダイヤルアップ接続、またはローカルエリア・ネットワークを含む様々な通信チャネルを介して互いに接続されることが可能である。
【００２１】
図６は、物理経路制御層における様々なノード間の接続を示すブロック図である。この例では、クライアント・ノード６０２が、クライアント・ノード６０３に接続され、クライアント・ノード６０３が、アプリケーション・ノード６０４に接続される。クライアント・ノード６０２の物理経路制御層が、宛先ノード識別子によって識別されるアプリケーション・ノード６０４にメッセージを送信する場合、メッセージ送信構成要素が、そのアプリケーション・ノードと直接接続を確立しようと試みることが可能である。ただし、接続を確立することができない場合、クライアント・ノード６０２のメッセージ送信構成要素は、アプリケーション・ノードが、ノード６０２自らの複数のピア・ノードのいずれかを介してアクセス可能であるかどうかを決定する。この場合、アプリケーション・ノード６０４には、クライアント・ノード６０３を介してクライアント・ノード６０２がアクセスすることができる。したがって、クライアント・ノード６０２は、メッセージをクライアント・ノード６０３に転送し、次に、クライアント・ノード６０３が、そのメッセージをアプリケーション・ノード６０４に転送する。
【００２２】
図７は、一実施形態において論理経路制御層によって使用されるデータ構造を示している。論理名テーブル７０１（論理経路制御テーブルとも呼ばれる）は、ノードにおいて実行されるアプリケーションに関連付けられた各論理名に関するエントリを含む。論理名は、アプリケーションを識別する論理識別子である。また、論理識別子は、ユーザ、または何らかの他の論理宛先を識別することも可能である。各エントリは、論理識別子、十分に限定された論理ＩＤ（識別子）（fully qualified logical identifier）、クラス、およびノードＩＤ（識別）ファンクションを含む。十分に限定された論理識別子は、アプリケーションに関連付けられた論理名を一意的に識別する。クラスは、論理宛先のメッセージ・クラスを識別する。例えば、クラスは、データベース、アプリケーション、またはユーザであることが可能である。論理識別子は、クラス内で固有である。ノード識別ファンクションは、クライアント・ノードによって、論理名に向けられたメッセージが送信されるべき先のノード識別子を識別するのに使用される。各エントリは、アプリケーションによってサポートされるファンクションを識別するファンクション名も含むことが可能である。例えば、アドレス帳アプリケーションの、新しいエンティティを挿入するためのファンクション名は、「アドレス挿入」とすることができる。論理名テーブルは、当該のノードに知られている各論理宛先に関するエントリを含む。また、論理名テーブルは、ユーザ識別子に対するユーザ名のマッピングも含むことが可能である。ユーザ名は、論理名である。十分に限定された論理名は、ユーザを一意的に識別するユーザ識別子である。ユーザ識別子に関連付けられた複数のユーザ名（例えば、別名）が存在することが可能である。代替の実施形態（以下に説明する）では、論理経路制御テーブルは、キー・ファンクション（key function）、基準宣言（criteria declaration）、および経路テーブルを含む。基準は、キーを生成するのにキー・ファンクションに渡されるデータを定義する。キーは、次に、経路テーブルからノード識別子を探し出すのに使用される。
【００２３】
図８は、一実施形態において物理経路制御層によって使用されるデータ構造を示している。物理経路制御層のデータ構造は、物理経路制御テーブル８０１およびピア・テーブル８０２を含む。物理経路制御テーブルは、当該のノードに知られている各ノード識別子に関するエントリを含む。各エントリは、ノード識別子を、それを介してノード識別子にアクセスすることができるピア・ノード識別子にマップする。ピア・テーブルは、当該のノードの各ピア・ノードに関するエントリを含む。各エントリは、ノード識別子をピア・ノードのネットワーク・アドレスにマップする。
【００２４】
図９〜２７は、一実施形態における論理経路制御システムのファンクションの流れ図である。本明細書に記載したファンクションが、説明する機能のサブセットだけを実施したり、説明する機能を整理し直したり、または追加の機能を実装したり、することが可能であることが当分野の技術者には認められよう。図９〜１５は、一実施形態における物理経路制御層の処理を示す流れ図である。図９〜１２は、物理経路制御層の送信処理を示している。図９は、一実施形態における物理経路制御層のメッセージ送信ファンクション（send message function）の処理を示す流れ図である。このファンクションは、宛先ノード（すなわち、構成要素）識別子およびメッセージを渡され、そのメッセージを識別された宛先ノードに送信する。このファンクションは、論理経路制御層によって呼び出される。判定ブロック９０１で、宛先ノードＩＤ（識別子）に関するエントリが物理経路制御テーブルの中に存在する場合、その宛先ノードへの経路は以前に明らかにされており、ファンクションは、そのエントリを取り出し、ブロック９０２に進む。存在しない場合、ファンクションは、ブロック９０５に進む。ブロック９０２で、ファンクションは、当該のノードのノード識別子を含む経路情報をメッセージ・ヘッダに追加する。メッセージは、ノードによって受信されると、それまで経由したパス上のノードの履歴を有する。受信側ノードは、その物理経路制御テーブルを更新して、そのパス上のノード群がアクセス可能であることを示すことができる。ブロック９０３で、ファンクションは、エントリからピア・ノードのノード識別子を取り出し、次に、ピア・テーブルからそのピア・ノードに関するネットワーク・アドレス（例えば、ＩＰアドレスおよびポート番号）を取り出す。次に、ファンクションは、取り出されたネットワーク・アドレスにメッセージを送信する。判定ブロック９０４で、メッセージを送信することが成功であった場合、ファンクションは、成功の指示を戻し、成功ではなかった場合、ファンクションは、エラーの指示を戻す。ブロック９０５〜９１４は、渡されたノード識別子に関するエントリが物理経路制御テーブル内にない場合に行われる。これらのブロックは、メッセージを、それを経由させて宛先ノードに送信することができる経路を見出そうと試みる。ブロック９０５で、ファンクションは、それを経由することで宛先ノードにアクセスすることができるピア・ノードを探索する「ノードへの経路を探索する」ファンクションを呼び出す。呼び出されたファンクションは、そのようなピア・ノードを見出した場合、エントリを物理経路制御テーブルに追加し、成功の指示を戻す。判定ブロック９０６で、経路が見出された場合、ファンクションは、ブロック９０７に進み、見出されなかった場合、ファンクションは、ブロック９０８に進む。ブロック９０７で、ファンクションは、物理経路制御テーブルから宛先ノードに関するエントリを取り出し、ブロック９０２に進んでメッセージを宛先ノードに送信する。判定ブロック９０８で、当該のノードに関するポリシーによって新しいピア接続を生成することが許される場合、ファンクションはブロック９０９に進み、許されない場合、ファンクションはブロック９１３に進む。例示的なポリシーは、ピア・ノードに対する接続の数を４つに制限することが可能である。当該のノードが、既に４つのピア・ノードを有する場合、このポリシーは、第５のピア・ノードに対する接続を防止する。ブロック９０９で、ファンクションは、ノード・ルックアップ・ファンクションを呼び出し、ノード・ルックアップ・ファンクションが、宛先ノードに関するネットワーク・アドレスを識別し、そのネットワーク・アドレスをピア・テーブルに追加する。呼び出されたファンクションは、メッセージをサーバ・ノードに送信して、宛先ノードがサーバ・ノードに登録しているかどうかを調べることができる。また、呼び出されたファンクションは、宛先ノードに関するノード識別子およびネットワーク・アドレスを格納するようにピア・テーブルにエントリを追加することも行う。判定ブロック９１０で、宛先ノードが見付かった場合、ファンクションは、ブロック９１１に進み、見付からなかった場合、ファンクションは、ブロック９１４に進む。ブロック９１１で、ファンクションは、ピア接続確立ファンクションを呼び出して宛先ノードとピア接続を確立し、物理経路制御テーブルを更新する。判定ブロック９１２で、宛先ノードに対する接続が確立された場合、ファンクションは、ブロック９０７に進んでメッセージを宛先ノードに直接に送信し、確立されなかった場合、ファンクションは、ブロック９１３に進む。判定ブロック９１３で、当該のノードのポリシーにより、サーバ・ノード転送が許される場合、ファンクションは、ブロック９０３に進んでメッセージをサーバ・ノードに転送し、許されない場合、ファンクションは、エラーの指示を戻す。サーバ・ノード転送が許される場合、当該のノードは、メッセージをサーバ・ノードに送信して、宛先ノードがオンラインである場合に直ちに、あるいは宛先ノードがオンラインになった後の時点に、サーバ・ノードがそのメッセージを宛先ノードに転送できるようにする。判定ブロック９１４で、メッセージがドロップ（除去）されるべき場合、ファンクションはエラーの指示を戻し、ドロップされるべきでない場合、ファンクションはブロック９１３に進む。
【００２５】
図１０は、一実施形態における「ノードへの経路を探索する」ファンクションの処理を示す流れ図である。このファンクションは、宛先ノードのノード識別子を渡される。ファンクションは、当該のノードのピア・ノードから宛先ノードまでのパスを識別するために呼び出される。ファンクションは、当該のノードの各ピア・ノードに、当該のノードが、宛先ノードへのパスを探索していることを示すメッセージを送信する。ピア・ノードは、そのピア・ノードを経由して宛先ノードに至るパスを識別した場合、そのメッセージに応答する。異なる探索技術を使用してもよいことが、当分野の技術者には認められよう。例えば、最初に各ピア・ノードにメッセージを送信するのではなく、メッセージが次のピア・ノードに送信されるのに先立って、各ピア・ノードがパスを識別しようと試みることができるように、メッセージをピア・ノードに送信してもよい。判定ブロック１００１で、当該のノードがピア・ノードを有する場合、ファンクションは、ブロック１００２に進み、有さない場合、ファンクションは、エラーの指示を戻す。ブロック１００２で、ファンクションは、当該のノードの識別子および宛先ノードを含むノード探索メッセージを生成する。ブロック１００３で、ファンクションは、ノード探索メッセージのコピーを当該のノードの各ピア・ノードに送信する。ブロック１００４で、ファンクションは、当該のノードがピア・ノードからの応答を待つ時間を制限するようにタイマを設定する。ブロック１００５で、ファンクションは、ピア・ノードからの応答、またはタイムアウトを待つ。判定ブロック１００６で、応答が受信された場合、ファンクションは、ブロック１００７に進み、受信されなかった場合、タイムアウトが生じて、ファンクションはエラーの指示を戻す。ブロック１００７で、ファンクションは、応答を送信したピア・ノードを経由して宛先ノードにアクセス可能であることを示すエントリを追加することにより、物理経路制御テーブルを更新する。ファンクションは、タイマをキャンセルした後、成功の指示を戻す。
【００２６】
図１１は、一実施形態におけるノード・ルックアップ・ファンクションの処理を示す流れ図である。このファンクションは、宛先ノードのノード識別子を渡される。ファンクションは、サーバ・ノードとコンタクトを取ってサーバ・ノードが宛先ノードのネットワーク・アドレスで応答した場合、宛先ノードに関するネットワーク・アドレスを取り出し、ピア・テーブルにエントリを追加する。判定ブロック１１０１で、サーバ・ノード（ＳＮ）に対する適切な接続が利用できる場合、ファンクションは、ブロック１１０１に進み、利用できない場合、ファンクションは、エラーの指示を戻す。ブロック１１０２で、ファンクションは、宛先ノード識別子を含むノード・ルックアップ・メッセージ（lockup node message）を生成する。ブロック１１０３で、ファンクションは、そのノード・ルックアップ・メッセージをサーバ・ノードに送信する。ブロック１１０４で、ファンクションは、タイマを設定する。ブロック１１０５で、ファンクションは、サーバ・ノードからの応答、またはタイムアウトを待つ。判定ブロック１１０６で、サーバ・ノードから応答が受信された場合、ファンクションは、ブロック１１０７に進み、受信されなかった場合、タイムアウトが生じ、ファンクションは、エラーの指示を戻す。ブロック１１０７で、ファンクションは、メッセージの中で戻された宛先ノードのネットワーク・アドレスを示すエントリをピア・テーブルに追加する。ファンクションは、タイマをキャンセルした後、成功の指示を戻す。代替の実施形態では、当該のノードを介してサーバ・ノードが利用できない場合、当該のノードは、代理でサーバ・ノードに接触するように自らのピア・ノードに要求すること、または様々なノードのネットワーク・アドレスに関連する情報で、ローカルでキャッシュに入れられた情報を調べること、ができる。
【００２７】
図１２は、一実施形態におけるピア接続確立ファンクションの処理を示す流れ図である。このファンクションは、宛先ノードの識別子を渡される。ファンクションは、宛先ノードとの接続を確立し、物理経路制御テーブルを更新する。ブロック１２０１で、ファンクションは、ピア・テーブルの中で宛先ノードＩＤ（識別子）をルックアップ（調べる）する。判定ブロック１２０２で、宛先ノードのネットワーク・アドレスがピア・テーブルの中に存在する場合、ファンクションは、ブロック１２０３に進み、存在しない場合、接続を確立することができず、ファンクションは、エラーの指示を戻す。ブロック１２０３で、ファンクションは、当該のノードを識別するピア接続要求メッセージを生成する。ブロック１２０４で、ファンクションは、そのピア接続要求メッセージを宛先ノードのネットワーク・アドレスに送信する。そのメッセージを送信するため、ファンクションは、ネットワーク・アドレスに対するトランスポート・レベルの接続を確立してから、そのメッセージを送信する。接続を確立することができない場合、ファンクションは、エラーの指示を戻す。ブロック１２０５で、ファンクションは、タイマを設定する。ブロック１２０６で、ファンクションは、宛先ノードからの応答、またはタイムアウトを待つ。判定ブロック１２０７で、宛先ノードから応答が受信された場合、ファンクションは、ブロック１２０８に進み、受信されなかった場合、タイムアウトが生じ、ファンクションは、エラーの指示を戻す。ブロック１２０８で、ファンクションは、タイマをキャンセルする。判定ブロック１２０９で、接続を確立できることをその応答が示す場合、ファンクションは、ブロック１２１０に進み、示さない場合、宛先ノードには、当該のノードに接続する意志がなく、ファンクションは、エラーの指示を戻す。ブロック１２１０で、ファンクションは、宛先ノードを認証する。宛先ノードが自らの秘密鍵で暗号化したメッセージを送信し、当該のノードが、公開鍵を使用してメッセージを暗号化解除する公開鍵／秘密鍵ペアの使用などの様々な周知の認証技術を使用することができる。宛先ノードを認証することができない場合、ファンクションは、エラーの指示を戻す。ブロック１２１１で、ファンクションは、宛先ノードがピア・ノードとしてアクセス可能である（すなわち、物理経路制御層において接続されている）ことを示すように物理経路制御テーブルを更新し、次ぎに成功の指示を戻す。
【００２８】
図１３〜１５は、物理経路制御層の受信されたメッセージの処理を示す流れ図である。図１３は、一実施形態における物理経路制御層のメッセージ受信ファンクションの処理を示す流れ図である。このファンクションは、ピア・ノードから受信されたメッセージを渡される。ファンクションは、メッセージが当該のノードに向けられているか、または別のノードに向けられているかを決定する。メッセージが当該のノードに向けられている場合、ファンクションは、そのメッセージを論理経路制御層に転送する。ブロック１３０１で、ファンクションは、新しい宛先ノードを求めてメッセージ・ヘッダをスキャンする（細かく調べる）。メッセージ・ヘッダは、宛先ノード、および送信元ノードから当該のノードに至るパスにおける各ノードを明らかにする。ブロック１３０２で、ファンクションは、メッセージ・ヘッダの中で識別されたノードで、物理経路制御テーブルの中で既存ではないノードを追加するように物理経路制御テーブルを更新する。更新は、識別されたノードが、メッセージを送信したピア・ノードを介してアクセス可能であることを示す。判定ブロック１３０３で、宛先ノードが当該のノードである場合、ファンクションは、ブロック１３０４に進み、そうではない場合、ファンクションは、ブロック１３０５に進む。判定ブロック１３０４で、メッセージが、以前に送信されたメッセージに対する応答である場合、ファンクションは、ブロック１３０４Ａに進み、そうでない場合、ファンクションは、ブロック１３０４Ｂに進む。ブロック１３０４Ａで、ファンクションは、論理経路制御層の応答獲得ファンクションを呼び出すことによって応答が受信されたことを論理経路制御層に通知した後、戻る。ブロック１３０４Ｂで、ファンクションは、受信されたメッセージを渡して論理経路制御層の論理メッセージ受信ファンクションを呼び出して、そのメッセージを論理経路制御層に渡した後、戻る。判定ブロック１３０５で、メッセージがノード探索要求であった場合、ファンクションは、ブロック１３０６に進み、そうでなかった場合、ファンクションは、ブロック１３０６Ａに進む。ブロック１３０６で、ファンクションは、宛先ノードの識別子、およびメッセージを渡してノード探索処理ファンクションを呼び出した後、戻る。呼び出されたファンクションは、当該のノードの物理経路制御テーブルを調べて、宛先ノードが当該のノードを介してアクセス可能であるかどうかを決定する。アクセス可能ではない場合、当該のノードは、自らのピア・ノードにその探索要求を送信する。判定ブロック１３０６Ａで、メッセージが論理名探索要求であった場合、ファンクションは、ブロック１３０６Ｂに進み、そうでなかった場合、ファンクションは、ブロック１３０７に進む。ブロック１３０６Ｂで、ファンクションは、論理経路制御層の論理名探索処理ファンクションを呼び出す。ブロック１３０７で、ファンクションは、メッセージ転送ファンクションを呼び出して、宛先ノードに至るパスにおける次の経路（すなわち、当該のノードのピア・ノード）にメッセージを転送した後、戻る。
【００２９】
図１４は、一実施形態における物理経路制御層のメッセージ転送ファンクションの処理を示す流れ図である。このファンクションは、宛先ノード識別子、および転送されるべきメッセージを渡される。このファンクションは、宛先ノードへのパス上に存在するピア・ノードにメッセージを送信する。ブロック１４０１で、ファンクションは、当該のノードに関する情報をメッセージ・ヘッダに追加するようにメッセージを更新する。ブロック１４０２で、ファンクションは、メッセージ・ヘッダの中のホップ・カウントを減分する。各ホップは、宛先ノードへのパス上のノードに対応する。ホップ・カウントは、宛先ノードに向かう途中でメッセージが通過することが可能なホップの最大数を示す。メッセージを発信するノードが、ホップ・カウントを設定することができる。別法では、メッセージ・ヘッダは、メッセージが通過したホップの数の指示を含むことが可能である。各ノードは、その数に基づき、メッセージを転送することを続けるかどうかを決めることができる。判定ブロック１４０３で、ホップ・カウントがゼロである場合、ファンクションは、ブロック１４０７に進み、ゼロでない場合、ファンクションは、ブロック１４０４に進む。判定ブロック１４０４で、宛先ノードＩＤ（識別子）が物理経路制御テーブルの中に存在する場合、宛先ノードは、当該のノードを介してアクセス可能であり、ファンクションは、ブロック１４０５に進み、存在しない場合、ファンクションは、ブロック１４０７に進む。ブロック１４０５で、ファンクションは、それを経由することで宛先ノードがアクセス可能であるピア・ノードにメッセージを送信する。判定ブロック１４０６で、メッセージを送信することが成功であった場合、ファンクションは、成功の指示を報告し、戻り、成功でなかった場合、ファンクションは、エラーの指示を報告し、戻る。判定ブロック１４０７で、当該のノードのポリシーにより、サーバ・ノード（ＳＮ）に転送することが許される場合、ファンクションは、ブロック１４０８に進み、許されない場合、ファンクションは、エラーの指示を報告し、戻る。判定ブロック１４０８で、サーバ・ノード（ＳＮ）接続が利用できる場合、ファンクションは、ブロック１４０８に進み、メッセージをサーバ・ノードに転送し、利用できない場合、ファンクションは、エラーの指示を報告して戻る。次に、サーバ・ノードは、宛先ノードがオンラインである場合に直ちに、あるいは宛先ノードがオンラインになった後の時点に、メッセージを宛先ノードに転送することができる。
【００３０】
図１５は、一実施形態におけるノート探索処理ファンクションの処理を示す流れ図である。このファンクションは、宛先ノード識別子およびメッセージを渡される。ファンクションは、宛先ノードへのパスにおける次のノードにメッセージを転送する。異なるピア・ノードからメッセージが受信された際に、当該のノードがそのメッセージを既に処理済みである場合、ファンクションは、さらなる処理なしに戻ることが可能である。判定ブロック１５０１で、宛先ノード識別子が物理経路制御テーブルの中に存在する場合、宛先ノードは、当該のノードを介してアクセス可能であり、ファンクションは、ブロック１５０２に進み、存在しない場合、ファンクションは、ブロック１５０４に進む。ブロック１５０２で、ファンクションは、物理経路制御テーブルの中で示されるパスにおける次のピア・ノードにメッセージを送信する。宛先ノードが、複数のピア・ノードを介してアクセス可能である場合、ファンクションは、そのピア・ノードのそれぞれにメッセージを送信する。判定ブロック１５０３で、少なくとも１つのピア・ノードにメッセージを送信することが成功であった場合、ファンクションは戻り、成功ではなかった場合、ファンクションは、エラーの指示を報告して戻る。ブロック１５０４〜１５０９で、ファンクションは、当該のノードのピア・ノードに探索メッセージを転送する。ブロック１５０４で、ファンクションは、ホップ・カウントを減分する。判定ブロック１５０５で、ホップ・カウントがゼロに等しい場合、ファンクションは、メッセージを廃棄して戻り、ゼロに等しくない場合、ファンクションは、ブロック１５０６に進む。ブロック１５０６で、ファンクションは、探索アルゴリズムに基づいて、探索メッセージが転送されるべき次のピア・ノードを識別する。本明細書で説明する探索アルゴリズムは、すべてのピア・ノードを徹底的に探索して宛先ノードを探し出すアルゴリズムである。代替の探索アルゴリズムは、探索メッセージ転送のために単一のピア・ノードを選択することができる。探索アルゴリズムは、ノード・トポロジ、ホップ・カウント、地理的場所、およびアプリケーション要件に最もよく適合するように最適化することができることが当分野の技術者には認められよう。判定ブロック１５０７で、次のピア・ノードが識別された場合、ファンクションは、ブロック１５０８に進み、識別されなかった場合、ファンクションは、ブロック１５１０に進む。ブロック１５０８で、ファンクションは、当該のノードに関連する情報をメッセージ・ヘッダに追加するようにメッセージを更新する。ブロック１５０９で、ファンクションは、メッセージが送信されるべき先の各ピア・ノードに関してメッセージのコピーを生成し、ブロック１５０２に進んでそのメッセージをそれぞれの識別されたピア・ノードに送信する。ブロック１５１０で、ファンクションは、メッセージを廃棄し、戻る。
【００３１】
図１６〜２５は、一実施形態における論理経路制御層の処理を示す流れ図である。図１６〜２１は、論理経路制御層のメッセージ送信の処理を示す流れ図である。図１６は、一実施形態における論理経路制御層の論理メッセージ送信ファンクションの処理を示す流れ図である。論理メッセージ送信ファンクションは、論理宛先およびメッセージを渡される。論理宛先は、メッセージがどこに送信されるべきかを示す。例えば、論理宛先は、ユーザ名、論理名（例えば、「アドレス帳」）、または十分に限定された名前（例えば、「ａｄｄｒｅｓｓｂｏｏｋ．ｎｏｄｅ．ｏｐｅｎｄｅｓｉｇｎ．ｃｏｍ」）によって識別されることが可能である。ファンクションは、その論理宛先に対応する宛先ノードの識別子を決定し、物理経路制御層のメッセージ送信ファンクションを呼び出すことによってそのノードにメッセージを送信する。ブロック１６０１で、ファンクションは、論理宛先解決ファンクションを呼び出す。呼び出されたファンクションは、論理宛先に関するエントリを追加するように論理経路制御テーブルを更新することを、そのようなエントリが既にテーブルの中に存在していない場合に行う。判定ブロック１６０２で、論理宛先が成功裡に解決された場合、ファンクションは、論理経路制御テーブルからそのエントリを取り出し、ブロック１６０４に進み、成功裡に解決されなかった場合、ファンクションは、エラーの指示を戻す。ブロック１６０４で、ファンクションは、メッセージを渡して取り出されたエントリのノード識別ファンクションを呼び出すことにより、宛先ノード識別子を計算する（compute；コンピュータを使用して決定する）。判定ブロック１６０５で、宛先ノード識別子が成功裡に計算された場合、ファンクションは、ブロック１６０６に進み、成功裡に計算されなかった場合、ファンクションは、エラーの指示を戻す。ブロック１６０６で、ファンクションは、物理経路制御層のメッセージ送信ファンクションを呼び出して宛先ノードにメッセージを送信した後、呼び出されたメッセージ送信ファンクションによって戻された成功またはエラーの指示を戻す。一実施形態では、ノード識別ファンクションは、基準、キー・ファンクション、および経路制御テーブルを使用することができる。キー・ファンクションは、キーを生成する基準を渡すことで呼び出される。次に、そのキーが、経路制御テーブルを探索してノード識別子を識別するのに使用される。例えば、アドレス帳アプリケーションに関する基準が、ラスト・ネームであり、キー・ファンクションが、そのラスト・ネームの最初の文字を戻すことが可能である。経路制御テーブルは、文字をノード識別子にマップするツリーとすることが可能である。
【００３２】
図１７は、一実施形態における論理経路制御層の論理宛先解決ファンクションの処理を示す流れ図である。このファンクションは、論理宛先の指示を渡され、十分に限定された論理名（qualified logical name）を戻す。判定ブロック１７０１で、論理宛先がユーザ名である場合、ファンクションは、ブロック１７１０に進み、ユーザ名ではない場合、ファンクションは、ブロック１７０２に進む。判定ブロック１７０２で、論理宛先の論理名が当該のノードにローカルである場合、ファンクションは、ブロック１７０３に進み、ローカルではない場合、ファンクションは、ブロック１７０５に進む。ブロック１７０３で、ファンクションは、論理経路制御テーブルからその論理名に関するエントリを取り出す。このエントリは、十分に限定された論理名を含む。判定ブロック１７０４で、論理名に関するエントリが見付かった場合、ファンクションは、ブロック１７０５に進み、見付からなかった場合、ファンクションは、エラーの指示を戻す。ブロック１７０５で、ファンクションは、論理経路制御テーブルから十分に限定された論理名のエントリを取り出す。判定ブロック１７０６で、十分に限定された論理名に関するエントリが取り出された場合、ファンクションは、論理宛先をその十分に限定された論理名に設定し、成功の指示を戻し、取り出されなかった場合、ファンクションは、ブロック１７０７に進む。ブロック１７０７で、ファンクションは、論理宛先探索ファンクションを呼び出して論理宛先をグローバルに探索する。呼び出されたファンクションは、サーバ・ノードにおいて、またはピア・ノードを介して探索を行って十分に限定された論理名を見付けることができる。判定ブロック１７０８で、探索中に十分に限定された論理名が見付かった場合、ファンクションは、成功の指示を戻し、見付からなかった場合、ファンクションは、エラーの指示を戻す。ブロック１７０９で、ファンクションは、ユーザ情報ファンクションを呼び出して、ユーザ名に関するユーザ識別子を見付ける。呼び出されたファンクションは、ユーザ識別子をノード識別子にマップするように論理経路制御テーブルにエントリを追加することができる。次に、ファンクションは、成功の指示を戻す。
【００３３】
図１８は、一実施形態における論理経路制御層の論理宛先探索ファンクションの処理を示す流れ図である。このファンクションは、十分に限定された論理名である論理宛先を渡され、その十分に限定された論理名をノード識別子にマップするように論理経路制御テーブルにエントリを追加する（既に追加済みでない場合）。一実施形態では、ノード識別子は、十分に限定された名前から抽出することができる。別の実施形態では、ノード識別子は、論理経路制御マップの論理宛先にメッセージを送信することによって取り出すことができる。ただし、記載したこの実施形態では、ノード識別子は、サーバ・ノードから取り出されるか、またはピア・ノードを探索することによって取り出される。このファンクションは、グローバルな論理宛先情報を格納するサーバ・ノードにメッセージを送信する。そのエントリに関する情報がサーバ・ノードから受けられなかった場合、ファンクションは、探索メッセージを自らのピア・ノードに送信し、探索メッセージは、ネットワーク全体に伝播される。ブロック１８０１で、ファンクションは、論理経路制御テーブルの中で渡された論理宛先をルックアップする。判定ブロック１８０２で、論理宛先に関するエントリが見付かった場合、ファンクションは、成功の指示を戻し、見付からなかった場合、ファンクションは、ブロック１８０３に進む。ブロック１８０３で、ファンクションは、クラスＳＮの論理名ルックアップ・メッセージを生成する。このメッセージは、送信側ノードが論理名をノード識別子にマップするための情報を要求していることを指示する。ブロック１８０４で、ファンクションは、生成されたメッセージ、およびサーバ・ノードのノード識別子論理宛先を渡して、論理メッセージ送信ファンクションを呼び出す。判定ブロック１８０５で、メッセージが成功裡に送信された場合、ファンクションは、ブロック１８０６に進み、成功裡に送信されなかった場合、ファンクションは、エラーの指示を戻す。ブロック１８０６で、ファンクションは、応答獲得ファンクションを呼び出して、応答が受信されるのを待つ。判定ブロック１８０７で、応答が受信された場合、ファンクションは、ブロック１８０８に進み、受信されなかった場合、ファンクションは、ブロック１８０９に進む。ブロック１８０８で、ファンクションは、論理宛先更新処理ファンクションを呼び出して論理経路制御テーブルを更新した後、成功の指示を戻す。ブロック１８０９で、ファンクションは、ＳＥＡＲＣＨというクラスの論理名ルックアップ・メッセージを生成する。ＳＥＡＲＣＨクラスは、そのメッセージが、ノード識別子を探索するためにピア・ノードから送信されたことを示す。ブロック１８１０で、ファンクションは、物理経路制御層のメッセージ送信ファンクションを呼び出して生成されたメッセージを送信する。探索メッセージは、ピア・ノードに送信され、ピア・ノードは、論理宛先にそのピア・ノードを介してアクセスすることが可能である場合に応答する。判定ブロック１８１１で、メッセージ送信指示が成功であった場合、ファンクションは、ブロック１８１２に進み、成功ではなかった場合、ファンクションは、エラーの指示を戻す。ブロック１８１２で、ファンクションは、応答獲得ファンクションを呼び出してメッセージまたはタイムアウトを待つ。判定ブロック１８１３で、応答が受信された場合、ファンクションは、ブロック１８１４に進み、受信されなかった場合、ファンクションは、エラーの指示を戻す。判定ブロック１８１４で、ファンクションは、論理宛先更新処理ファンクションを呼び出して論理経路制御テーブルを更新した後、成功の指示を戻す。
【００３４】
図１９は、一実施形態における論理経路制御層の応答獲得ファンクションの処理を示す流れ図である。このファンクションは、タイマを設定し、メッセージに対する応答、またはタイムアウトを待つのに使用される低レベルファンクションである。ブロック１９０１で、ファンクションは、タイマを設定する。判定ブロック１９０２で、応答が受信された場合、ファンクションは、ブロック１９０３に進み、受信されなかった場合、タイムアウトが生じ、ファンクションは、エラーの指示を戻す。ブロック１９０３で、ファンクションは、タイマをキャンセルし、成功の指示を戻す。
【００３５】
図２０は、一実施形態における論理経路制御層の論理宛先更新処理ファンクションの処理を示す流れ図である。このファンクションは、論理宛先に関する情報を渡され、論理経路制御テーブルの中でその論理宛先に関する既存のエントリを更新するか、またはその論理宛先に関する新しいエントリを追加する。ブロック２００１で、ファンクションは、論理経路制御テーブルの中でその渡された論理宛先をルックアップする。判定ブロック２００２で、論理宛先が見付かった場合、ファンクションは、ブロック２００４に進み、見付からなかった場合、ファンクションは、ブロック２００３に進む。ブロック２００３で、ファンクションは、その論理宛先に関する新しいエントリを論理経路制御テーブルに追加する。ブロック２００４で、ファンクションは、クラスおよびノード識別ファンクションで論理経路制御テーブルの中のエントリを更新する。次に、ファンクションは、成功の指示を戻す。
【００３６】
図２１は、一実施形態における論理経路制御層のユーザ情報ファンクションの処理を示す流れ図である。このファンクションは、ユーザ名を渡され、そのユーザ名に関するユーザ識別子をノード識別子にマップするように論理経路制御テーブルを適宜更新し、そのユーザ識別子を論理宛先として戻す。ブロック２１０１で、ファンクションは、論理経路制御テーブルの中でユーザ名をルックアップする。判定ブロック２１０２で、ルックアップが成功であった場合、ファンクションは、成功の指示とともにユーザ識別子を論理宛先として戻し、成功でなかった場合、ファンクションは、ブロック２１０３に進む。ブロック２１０３で、ファンクションは、クラスＳＮのユーザ識別子獲得メッセージを生成する。このメッセージは、ユーザ名に関連付けられたザ識別子を取り出す要求である。ブロック２１０４で、ファンクションは、論理メッセージ送信ファンクションを呼び出し、ユーザ名をユーザ識別子にマップする生成されたメッセージを論理宛先に送信する。判定ブロック２１０５で、メッセージが成功裡に送信された場合、ファンクションは、ブロック２１０６に進み、成功裡に送信されなかった場合、ファンクションは、エラーの指示を戻す。ブロック２１０６で、ファンクションは、応答獲得ファンクションを呼び出す。判定ブロック２１０７で、応答が成功裡に取り出された場合、ファンクションは、ブロック２１０８に進み、成功裡に取り出されなかった場合、ファンクションは、エラーの指示を戻す。ブロック２１０８で、ファンクションは、サーバ・ノードによる応答の中で提供されるユーザ識別子にユーザ名をマップするエントリを論理経路制御テーブルに追加する。ブロック２１０９で、ファンクションは、クラスＳＮのノード・ユーザ・メッセージを生成する。ブロック２１１０で、ファンクションは、論理メッセージ送信ファンクションを呼び出し、生成されたメッセージを論理経路制御マップの論理宛先に送信してユーザ識別子のノードを見出す。ブロック２１１１で、メッセージが成功裡に送信された場合、ファンクションは、ブロック２１１２に進み、成功裡に送信されなかった場合、ファンクションは、エラーの指示を戻す。ブロック２１１２で、ファンクションは、応答獲得ファンクションを呼び出す。判定ブロック２１１３で、応答が成功裡に受信された場合、ファンクションは、ブロック２１１４に進み、成功裡に受信されなかった場合、ファンクションは、エラーの指示を戻す。ブロック２１１４で、ファンクションは、応答の中で提供されたユーザ識別子およびノード識別子に関するエントリを追加するように論理経路制御テーブルを更新した後、成功の指示とともにそのユーザ識別子を論理宛先として戻す。
【００３７】
図２２は、一実施形態における論理経路制御層の論理メッセージ受信ファンクションの処理を示す流れ図である。このファンクションは、受信されたメッセージを渡される。論理ファンクション、およびメッセージの指定されたインスタンスが当該のノードにとって既知である場合、ファンクションは、ノード識別子を計算する。識別されたノードが当該のノードである場合、ファンクションは、メッセージを処理のためにアプリケーションに渡す。当該のノードではない場合、ファンクションは、メッセージをその識別されたノードに送信する。ブロック２２０１で、ファンクションは、メッセージ・ヘッダから、メッセージ・ヘッダの中で指定されたファンクションおよびインスタンスとともに論理宛先を取り出す。一実施形態では、メッセージ・ヘッダは、論理宛先（「ｌｎａｍｅ」）、クラス（「ｃｌａｓｓ」）、および基準（「ｃｒｉｔ」）を含む。判定ブロック２２０２で、論理経路制御テーブルが示すところにより、そのクラスが当該のノードによってサポートされる場合、ファンクションは、ブロック２２０３に進み、サポートされない場合、ファンクションは、エラーの指示を報告して戻る。判定ブロック２２０３で、論理経路制御テーブルによって示されるところにより、論理宛先が当該のノードにとって既知である場合、ファンクションは、ブロック２２０４に進み、既知でない場合、ファンクションは、エラーの指示を報告して戻る。ブロック２２０４で、ファンクションは、その論理宛先に関するノード識別ファンクション、および基準に基づいて、宛先ノード識別子を計算する。判定ブロック２２０５で、宛先ノード識別子が成功裡に計算された場合、ファンクションは、ブロック２２０６に進み、成功裡に計算されなかった場合、ファンクションは、エラーの指示を報告して戻る。判定ブロック２２０６で、計算されたノード識別子が当該のノードを識別する場合、ファンクションは、ブロック２２０７に進み、当該のノードを識別しない場合、ファンクションは、ブロック２２０８に進む。ブロック２２０７で、ファンクションは、メッセージを消費し、戻る。ブロック２２０８で、ファンクションは、物理経路制御層のメッセージ送信ファンクションを呼び出して、計算されたノード識別子にメッセージを送信し、その後、戻る。
【００３８】
図２３は、一実施形態における論理経路制御層の論理名登録ファンクションの処理を示す流れ図である。この機能は、アプリケーション・プログラムにより、アプリケーション・プログラムの論理名をローカルで登録することと、グローバルに登録すること、をともに行うために呼び出される。このファンクションは、論理名およびネーム・クラスを渡される。判定ブロック２３０１で、論理名とクラスの組合せが論理経路制御テーブルの中に存在しない場合、ファンクションは、ブロック２３０２に進み、存在する場合、エラーの指示を戻す。ブロック２３０２で、ファンクションは、渡された論理名から十分に限定された論理名を生成する。例えば、ファンクションは、当該のノードの識別子を登録済みのドメイン名とともに論理名に付加して十分に限定された論理名を生成する（例えば、「ｌｏｇｉｃａｌｎａｍｅ」を「ｌｏｇｉｃａｌｎａｍｅ．ｎｏｄｅＩＤ．ｃｏｍｐａｎｙ．ｃｏｍ」にする）ことができる。ブロック２３０３で、ファンクションは、その論理名に関するエントリを論理経路制御テーブルに追加する。このエントリは、ノード識別ファンクションを含む。ブロック２３０４で、ファンクションは、その論理名をグローバルに登録するメッセージを生成する。ブロック２３０５で、ファンクションは、論理経路制御層の論理メッセージ送信ファンクションを呼び出し、論理経路制御マップに登録するための登録メッセージを送信する。判定ブロック２３０６で、メッセージが成功裡に送信された場合、ファンクションは、成功の指示を戻し、成功裡に送信されなかった場合、ファンクションは、ブロック２３０７に進む。ブロック２３０７で、ファンクションは、登録メッセージを送信することを再び試みるためのタイマを設定した後、エラーの指示を戻す。
【００３９】
図２４は、一実施形態における論理経路制御層の論理宛先更新生成ファンクションの処理を示す流れ図である。このファンクションは、当該のノードが論理宛先に関する探索メッセージに応答する場合、またはクライアント・ノード（すなわち、当該のノードのアプリケーションのサービスを使用しているノード）のノード識別ファンクションが最新ではないことを当該のノードが検出した場合に呼び出される。このファンクションは、論理名を渡される。ブロック２４０１で、ファンクションは、論理経路制御テーブルの中のその論理名に関するエントリを取り出す。判定ブロック２４０２で、エントリが見付かった場合、ファンクションは、ブロック２４０３に進み、見付からなかった場合、ファンクションは、エラーの指示を戻す。ブロック２４０３で、ファンクションは、ノード識別ファンクションを含むメッセージを生成し、成功の指示を戻す。
【００４０】
図２５は、一実施形態における論理経路制御層の論理名探索処理ファンクションの処理を示す流れ図である。このファンクションは、論理名およびメッセージを渡される。このファンクションは、物理経路制御層が論理名探索要求を受信した場合に呼び出される。判定ブロック２５０１で、その論理名が論理経路制御テーブルの中に存在する場合、ファンクションは、ブロック２５０２に進み、存在しない場合、ファンクションは、ブロック２５０６に進む。ブロック２５０２で、ファンクションは、論理宛先更新生成ファンクションを呼び出して、渡された論理名に関する情報（例えば、ノード識別ファンクション）を取り出し、準備する。ブロック２５０３で、ファンクションは、そのノード識別ファンクションを含む論理経路探索応答を生成する。ブロック２５０４で、ファンクションは、発信側ノードに送り返されるようにその応答をピア・ノードに送信する。判定ブロック２５０５で、応答が成功裡に送信された場合、ファンクションは戻り、成功裡に送信されなかった場合、ファンクションは、エラーを報告し、その後、戻る。ブロック２５０６で、ファンクションは、ホップ・カウントを減分する。判定ブロック２５０７で、ホップ・カウントがゼロである場合、ファンクションは、ブロック２５１２に進み、ゼロでない場合、ファンクションは、ブロック２５０８に進む。ブロック２５０８で、ファンクションは、探索アルゴリズムに基づいて、次のピア・ノードを識別する。判定ブロック２５０９で、ピア・ノードが識別された場合、ファンクションは、ブロック２５１０に進み、識別されなかった場合、ファンクションは、ブロック２５１２に進む。ブロック２５１０で、ファンクションは、当該のノードのノード識別子を追加するようにメッセージを更新する。ブロック２５１１で、ファンクションは、メッセージが送信されるべき先の各ピア・ノードに関してメッセージのコピーを生成し、ブロック２５０４に進み、メッセージを各ピア・ノードに送信する。ブロック２５１２で、ファンクションは、メッセージを廃棄し、その後、戻る。
【００４１】
図２６は、一実施形態におけるアプリケーション初期設定ファンクションの処理を示す流れ図である。このファンクションは、アプリケーションによる論理経路制御層の使用を例示している。ブロック２６０１で、ファンクションは、サーバ・ノードに対してアプリケーションを認証する。判定ブロック２６０２で、認証が成功であった場合、ファンクションは、ブロック２６０３に進み、成功でなかった場合、ファンクションは、エラーの指示を報告して完了する。ブロック２６０３で、ファンクションは、論理名登録ファンクションを呼び出して、そのアプリケーションに関連付けられた論理経路制御マップに登録を行う。また、このファンクションは、そのアプリケーションに関する論理経路制御テーブルにエントリを追加することも行う。ブロック２６０４で、ファンクションは、論理宛先に送信されるべき要求メッセージを生成する。これは、アプリケーションによって行われることが可能な実際の処理を反映する。ブロック２６０５で、ファンクションは、論理経路制御層の論理メッセージ送信ファンクションを呼び出してメッセージを論理宛先に送信する。判定ブロック２６０６で、メッセージが成功裡に送信された場合、ファンクションは完了し、成功裡に送信されなかった場合、ファンクションは、エラーを報告して完了する。
【００４２】
図２７は、論理経路制御層からメッセージを受信するアプリケーションのファンクションの処理を示す流れ図である。ブロック２７０２で、ファンクションは、メッセージの認証を行う。判定ブロック２７０３で、メッセージが認証された場合、ファンクションは、ブロック２７０４に進み、認証されなかった場合、ファンクションは、エラーを報告した後、完了する。ブロック２７０４で、ファンクションは、メッセージを消費する。判定ブロック２７０５で、応答が送信されるべき場合、ファンクションは、ブロック２７０６に進み、そうでない場合、ファンクションは、完了する。ブロック２７０６で、ファンクションは、応答を生成する。ブロック２７０７で、ファンクションは、論理経路制御層の論理メッセージ送信ファンクションを呼び出して、その応答を送信する。判定ブロック２７０８で、その論理メッセージの送信が成功であった場合、ファンクションは完了し、成功でなかった場合、ファンクションは、エラーを報告した後、完了する。
【００４３】
以上の説明から、本技術の特定の実施形態を例示の目的で述べてきたが、本発明の範囲を逸脱することなく様々な変更を行うことが可能であることが認められよう。したがって、本発明は、頭記の特許請求の範囲による以外の限定を受けない。
【図面の簡単な説明】
【００４４】
【図１】一実施形態における論理経路制御システムを示すためのブロック図である。
【図２】クライアント・プログラムがメッセージをアプリケーションに送信する際の処理を示す流れ図である。
【図３】アプリケーションのインスタンスが複数のノードにおいて実行される論理経路制御システムを示すためのブロック図である。
【図４】ノード識別ファンクションを使用してアプリケーションに関するロード・バランシングを行うことを示すブロック図である。
【図５】論理経路制御システムによって使用されるアプリケーション層５１０、論理経路制御層５２０、および物理経路制御層５３０のアーキテクチャを示すブロック図である。
【図６】様々なノード間の物理経路制御層における接続を示すブロック図である。
【図７】一実施形態における論理経路制御層によって使用されるデータ構造を示す図である。
【図８】一実施形態において物理経路制御層によって使用されるデータ構造を示す図である。
【図９】一実施形態における物理経路制御層のメッセージ送信ファンクションの処理を示す流れ図である。
【図１０】一実施形態における「ノードへの経路を探索する」ファンクションの処理を示す流れ図である。
【図１１】一実施形態におけるノード・ルックアップ・ファンクションの処理を示す流れ図である。
【図１２】一実施形態におけるピア接続確立ファンクションの処理を示す流れ図である。
【図１３】一実施形態における物理経路制御層のメッセージ受信ファンクションの処理を示す流れ図である。
【図１４】一実施形態における物理経路制御層のメッセージ転送ファンクションの処理を示す流れ図である。
【図１５】一実施形態におけるノード探索処理ファンクションの処理を示す流れ図である。
【図１６】一実施形態における論理経路制御層の論理メッセージ送信ファンクションの処理を示す流れ図である。
【図１７】一実施形態における論理経路制御層の論理宛先解決ファンクションの処理を示す流れ図である。
【図１８】一実施形態における論理経路制御層の論理宛先探索ファンクションの処理を示す流れ図である。
【図１９】一実施形態における論理経路制御層の応答獲得ファンクションの処理を示す流れ図である。
【図２０】一実施形態における論理経路制御層の論理宛先更新処理ファンクションの処理を示す流れ図である。
【図２１】一実施形態における論理経路制御層のユーザ情報ファンクションの処理を示す流れ図である。
【図２２】一実施形態における論理経路制御層の論理メッセージ受信ファンクションの処理を示す流れ図である。
【図２３】一実施形態における論理経路制御層の論理名登録ファンクションの処理を示す流れ図である。
【図２４】一実施形態における論理経路制御層の論理宛先更新生成ファンクションの処理を示す流れ図である。
【図２５】一実施形態における論理経路制御層の論理名探索処理ファンクションの処理を示す流れ図である。
【図２６】一実施形態におけるアプリケーション初期設定ファンクションの処理を示す流れ図である。
【図２７】論理経路制御層からメッセージを受信するアプリケーションのファンクションの処理を示す流れ図である。
【図１】
2005505946.tif 000003
【図２】
2005505946.tif 000004
【図３】
2005505946.tif 000005
【図４】
2005505946.tif 000006
【図５】
2005505946.tif 000007
【図６】
2005505946.tif 000008
【図７】
2005505946.tif 000009
【図８】
2005505946.tif 000010
【図９】
2005505946.tif 000011
【図１０】
2005505946.tif 000012
【図１１】
2005505946.tif 000013
【図１２】
2005505946.tif 000014
【図１３】
2005505946.tif 000015
【図１４】
2005505946.tif 000016
【図１５】
2005505946.tif 000017
【図１６】
2005505946.tif 000018
【図１７】
2005505946.tif 000019
【図１８】
2005505946.tif 000020
【図１９】
2005505946.tif 000021
【図２０】
2005505946.tif 000022
【図２１】
2005505946.tif 000023
【図２２】
2005505946.tif 000024
【図２３】
2005505946.tif 000025
【図２４】
2005505946.tif 000026
【図２５】
2005505946.tif 000027
【図２６】
2005505946.tif 000028
【図２７】
2005505946.tif 000029
【国際公開パンフレット】
2005505946.tif 000030
2005505946.tif 000031
2005505946.tif 000032
2005505946.tif 000033
2005505946.tif 000034
2005505946.tif 000035
2005505946.tif 000036
2005505946.tif 000037
2005505946.tif 000038
2005505946.tif 000039
2005505946.tif 000040
2005505946.tif 000041
2005505946.tif 000042
2005505946.tif 000043
2005505946.tif 000044
2005505946.tif 000045
2005505946.tif 000046
2005505946.tif 000047
2005505946.tif 000048
2005505946.tif 000049
2005505946.tif 000050
2005505946.tif 000051
2005505946.tif 000052
2005505946.tif 000053
2005505946.tif 000054
2005505946.tif 000055
2005505946.tif 000056
2005505946.tif 000057
2005505946.tif 000058
2005505946.tif 000059
2005505946.tif 000060
2005505946.tif 000061
2005505946.tif 000062
2005505946.tif 000063
2005505946.tif 000064
2005505946.tif 000065
2005505946.tif 000066
2005505946.tif 000067
2005505946.tif 000068
2005505946.tif 000069
2005505946.tif 000070
2005505946.tif 000071
2005505946.tif 000072
2005505946.tif 000073
2005505946.tif 000074
2005505946.tif 000075
2005505946.tif 000076
2005505946.tif 000077
2005505946.tif 000078
2005505946.tif 000079
2005505946.tif 000080
2005505946.tif 000081
2005505946.tif 000082
2005505946.tif 000083
2005505946.tif 000084
2005505946.tif 000085
2005505946.tif 000086
2005505946.tif 000087
2005505946.tif 000088
2005505946.tif 000089
2005505946.tif 000090
2005505946.tif 000091
2005505946.tif 000092
2005505946.tif 000093
2005505946.tif 000094
2005505946.tif 000095
2005505946.tif 000096
2005505946.tif 000097
2005505946.tif 000098
2005505946.tif 000099
2005505946.tif 000100
2005505946.tif 000101
2005505946.tif 000102
2005505946.tif 000103
2005505946.tif 000104
2005505946.tif 000105
2005505946.tif 000106
【国際公開パンフレット（コレクトバージョン）】
2005505946.tif 000107
2005505946.tif 000108
【国際調査報告】
2005505946.tif 000109
2005505946.tif 000110
2005505946.tif 000111