(57)【要約】  共有空間に対する変更を、アドレッシング技法の組合せを用いて送られるメッセージを使用して、コラボレーションセッション内のピアのすべてにブロードキャストすることができるピアツーピアコラボレーションシステム。メッセージは、直接的なピアツーピア伝送、別のピアを介した間接的な伝送、またはサーバを介した間接的な伝送のためにアドレス指定することができる。各ピアと通信するために使用されるアドレッシングのタイプは、ルーティングテーブルの使用を通して決定される。ルーティングテーブルは、相互接続される、ピアのグループを規定し、各グループ内の１つまたは複数のピアをメッセージの最初の受信者として選択するために使用することができる。最初の受信者は、それらのグループ内の他のピアにメッセージを転送することができる。ＮＡＴ背後のピアについては、１つまたは複数のＮＡＴトラバーサル技法を使用し、ルーティングテーブルを構築するための情報を得ることができる。
2010527561.tif 000002
【特許請求の範囲】
【請求項１】
複数のピア（１１２、１１４、１２２、１２４）がそれぞれ、前記複数のピアの他のピア（１１２、１１４、１２２、１２４）にコラボレーション情報をブロードキャストするピアツーピアコラボレーションシステムを動作させる方法であって、
前記複数のピアの第１のピアがネットワークアドレス変換（ＮＡＴ）デバイスを介してパケットを受信することができるアドレス情報を決定するステップと（６１０）、
前記複数のピアの少なくとも第２のピアと前記アドレス情報を共有するステップと（６１４）と、
前記複数のピアの前記他のピアのそれぞれにコラボレーション情報を前記第２のピアから送信するステップと（７２０、７４２）
を具え、
前記送信するステップは、前記第１のピアにアドレス指定された前記コラボレーション情報を含む少なくとも１つのパケットを、前記アドレス情報を使用して送信するステップを具えたことを特徴とする方法。
【請求項２】
アドレス情報を決定するステップは、
探索用パケット（４１０）を前記第１のピアからサーバに送るステップと、
前記第１のピアにて応答（４１２）パケットを受信するステップと
を具えたことを特徴とする請求項１記載の方法。
【請求項３】
前記第２のピアから送信するステップは、
前記複数のピアの一部分に配布するために、少なくとも１つのパケットを前記サーバに送るステップ（７４０）を具えたことを特徴とする請求項２記載の方法。
【請求項４】
前記アドレス情報を共有するステップは、
アドレスベクトルをサーバに送信するステップ（６１２）と、
前記アドレス情報を前記複数のピアの前記他のピアのそれぞれに配布するステップ（６１４）と
を具えたことを特徴とする請求項１記載の方法。
【請求項５】
前記複数のピア内のピア（３５２Ａ、３５２Ｂ、３５２Ｃ、３５２Ｄ、３６２Ｅ、３６２Ｆ、３６２Ｇ、３６２Ｈ）の複数のグループ（３５０、３６０）を識別するデータ構造（３２４）を、前記第２のピアに関連付けられたコンピュータ可読媒体内に格納するステップであって、各グループ内の各ピアが前記グループ内の少なくとも１つの他のピアにパケットを送ることができる、ステップをさらに具え、
前記第２のピアから送信するステップは、
前記複数のグループ（７１２）のそれぞれの中の少なくとも１つのピアにパケットを送信するステップを具えた
ことを特徴とする請求項１記載の方法。
【請求項６】
前記複数のグループの第１のグループ内の前記複数のピアの少なくとも１つをスーパーピア（３６２Ｅ）として指定するステップをさらに具え、
前記第２のピアから送信するステップは、
パケット（５４２）を前記スーパーピアに送信するステップと、
前記パケットを前記スーパーピアから前記第１のグループ内の複数の前記ピア（５３２、５３４、５３６）に転送するステップと
を具えたことを特徴とする請求項５記載の方法。
【請求項７】
前記第２のピアから送信するステップは、
前記パケットを公然とアクセス可能なサーバに送信するステップ（７４０）と、
前記パケットを前記公然とアクセス可能なサーバから前記複数のグループの少なくとも１つの中のピアに配布するステップ（７４２）と
を具えたことを特徴とする請求項５記載の方法。
【請求項８】
複数のピアがそれぞれ、前記複数のピアの他のピアのそれぞれにコラボレーション情報をブロードキャストするピアツーピアコラボレーションシステムを動作させる方法であって、
複数のルーティングテーブル（３２４）のそれぞれが前記複数のピアの少なくとも一部分の中のピアに関連付けられ、各ルーティングテーブルが前記複数のピアのグループ（３５０、３６０）を識別し、各グループ内の各ピアが、前記グループ内のピアに直接アドレス指定されたパケットを使用して前記グループ内の少なくとも１つの他のピアと通信することができる、複数のルーティングテーブルを維持するステップと、
パケット（７２０、７４２）を前記グループのそれぞれの中の少なくとも１つのピアに送信するステップと、
前記グループの少なくとも一部分の中の前記少なくとも１つのピアから、前記パケットを前記グループ内の少なくとも１つの他のピアに転送するステップ（７２２）であって、各他のピアに転送される前記パケットが前記他のピアに直接アドレス指定される、ステップと
を具えたことを特徴とする方法。
【請求項９】
前記グループの少なくとも１つの中の前記少なくとも１つの他のピア（５３８）から、前記パケットを前記グループ内の第２の他のピア（５３２、５３４、５３６）に転送するステップをさらに具え、
前記第２の他のピアに転送される前記パケット（５４２2、５４３3、５４２4）が前記第２の他のピアに直接アドレス指定されることを特徴とする請求項８記載の方法。
【請求項１０】
パケットを前記グループのそれぞれの中の少なくとも１つのピアに送信するステップは、
パケットを公然とアクセス可能なサーバ（５６０）に送信するステップと、
前記パケットを前記公然とアクセス可能なサーバから前記複数のグループの一部分の中の少なくとも１つのピア（５５２、５５４、５５６）に転送するステップと
を具えたことを特徴とする請求項８記載の方法。
【請求項１１】
パケットを前記グループのそれぞれの中の少なくとも１つのピアに送信するステップは、
前記パケットを前記グループの第１のグループ内の第１のピア（５３８）に送信するステップと、
前記パケットを前記第１のピアから前記第１のグループ内の複数の他のピア（５３２、５３４、５３６）のそれぞれに転送するステップと
を具えたことを特徴とする請求項８記載の方法。
【請求項１２】
パケットを前記グループのそれぞれの中の少なくとも１つのピアに送信するステップは、
前記パケットをサーバ（５６０）に送信するステップと、
前記パケットを前記グループの第２のグループの中の少なくとも１つのピア（５５２、５５４、５５６）に転送するステップと
を具えたことを特徴とする請求項１１記載の方法。
【請求項１３】
前記サーバから、前記第１のピアが前記第１のグループ内の前記複数の他のピアのそれぞれに前記パケットを転送すべきであることを指定するステップ（５４１）をさらに具えたことを特徴とする請求項１２記載の方法。
【請求項１４】
前記複数のピアがコラボレーションセッション内で通信し、複数のルーティングテーブルを維持するステップは、ピアが前記コラボレーションセッションに入る、もしくは離れるとき（６２４）、またはピア間の相互接続が変化したとき、前記複数のルーティングテーブルを再構築するステップを含むことを特徴とする請求項８記載の方法。
【請求項１５】
ネットワークに接続され、ユーザインターフェースを有し、ピアツーピアコラボレーションセッション内でピアとして動作するように適合されており、コンピュータ実行可能コンポーネントを格納するコンピュータ可読媒体を備えるコンピューティングデバイスであって、前記コンピュータ実行可能コンポーネントは、
前記ユーザインターフェース（３３２）を介してユーザと対話するためのアクティビティコンポーネント（３２２）であって、コラボレーションセッション内の複数の他のピアに送信するためにデータ変更コマンドを生成するように適合され、前記データ変更コマンドがユーザとの対話に基づくものである、アクティビティコンポーネントと、
前記複数のピア間の、前記ネットワークにわたる相互接続を規定する情報を格納するためのルーティングテーブル（３２４）と、
複数のメッセージを送信することによって、前記ネットワークにわたって前記データ変更コマンドを送信するための通信コンポーネント（３２６）であって、各メッセージが、前記ルーティングテーブル内の情報に基づいて選択されたアドレスを有し、前記メッセージの少なくとも１つが前記複数のピアの少なくとも１つに直接アドレス指定される、通信コンポーネントと
を具えたことを特徴とするコンピューティングデバイス。
【請求項１６】
前記ルーティングテーブルは、複数の近隣ピア群（３５０、３６０）として編成された前記情報を含み、各近隣ピア群は、複数のピア（３５２Ａ、３５２Ｂ、３５２Ｃ、３５２Ｄ、３６２Ｅ、３６２Ｆ、３６２Ｇ、３６２Ｈ）を含み、前記近隣ピア群内の各ピアは、前記近隣ピア群内の少なくとも１つの他のピアとメッセージを通信することができることを特徴とする請求項１５記載のコンピューティングデバイス。
【請求項１７】
各近隣ピア群内の前記複数のピアは、同じネットワークアドレス変換（ＮＡＴ）デバイス（１１６、１２６）の背後にある、またはＮＡＴデバイスの背後にない前記近隣ピア群内のピアからトラバースすることができる前記ＮＡＴデバイスの背後にあることを特徴とする請求項１６記載のコンピューティングデバイス。
【請求項１８】
前記通信コンポーネントは、前記複数のメッセージのそれぞれを前記複数の近隣ピア群のそれぞれの中のピアに送信するように適合されることを特徴とする請求項１７記載のコンピューティングデバイス。
【請求項１９】
前記通信コンポーネントは、前記複数のメッセージの一部分を前記複数の近隣ピア群の少なくとも１つの中のピアに直接送信するように適合されることを特徴とする請求項１８記載のコンピューティングデバイス。
【請求項２０】
前記通信コンポーネントは、前記複数のメッセージの一部分を前記複数の近隣ピア群の少なくとも１つの中のピアに、中間デバイスを介して間接的に送信するように適合されることを特徴とする請求項１９記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エッジルーティングを用いたピアツーピアコラボレーションシステムに関する。
【背景技術】
【０００２】
ピアツーピアコラボレーションシステムは、一般にビジネスの場面で、たとえユーザが相異なる場所にいることがあるにしても、複数のユーザが共同で作業をすることができるようにするために使用される。ピアツーピアコラボレーションシステムは、ネットワークによって相互接続されたコンピューティングデバイスを用いて実装される。ピアデバイスのそれぞれは、共同作業するユーザに対して表示される、またはそのようなユーザが働きかけるデータまたは他の情報のコピーを維持することができる。その情報は、「共有空間」と呼ばれるものを生み出す。
【０００３】
ピアデバイスのそれぞれの中のクライアントソフトウェアは、そのデバイスのユーザが、そのデバイスによって維持されている共有空間のコピーを変更することを可能にする。変更が加えられるたびに、クライアントは、共有空間に加えられた変更を示すメッセージをブロードキャストする。コラボレーションセッション内の他のピアデバイスは、これらの変更メッセージを受信し、共有空間の各自のコピーに対して対応する変更を加える。このようにして、共有空間のコピーのすべてが同期され、コラボレーションセッション内のあらゆるユーザが、あらゆる他のユーザによって加えられた変更を閲覧することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、コラボレーションシステムが所期のように機能するためには、各ピアデバイスがあらゆる他のピアデバイスに変更を伝えることができなければならない。インターネットなどのネットワークは、理論上、そのネットワークに結合された任意の２つのピアデバイス間で通信を可能にするように使用することができる。しかし、一部のプライベートネットワークは、インターネットに結合されていても、そのプライベートネットワークを介してインターネットに結合されたピアデバイスがそのプライベートネットワークの外側のデバイスとのピアツーピア通信に加わることができるように構成されていない。たとえば、多数のローカルエリアネットワーク（ＬＡＮ）は、プライベートネットワークとインターネットの間のインターフェースでネットワークアドレス変換（ＮＡＴ）を使用する。アドレス変換は、ＮＡＴデバイス背後のピアに向けて送られるメッセージを中断し、それによりピアツーピア通信と干渉する可能性がある。
【０００５】
いくつかのデバイスがＮＡＴデバイスの背後にある、または他の形で他のピアから到達できないときコラボレーションセッションの中断を回避するために、コラボレーションシステムは、リレーサーバを使用する。別のピアと直接通信することができないピアは、最初にリレーサーバにメッセージを送ることによって間接的に通信することができる。リレーサーバは、そのメッセージを受信者ピアに転送することができる。場合によっては、リレーサーバは、そのメッセージを受信者ピアに直接転送する。しかし、他の状況では、そのメッセージは、受信者ピアに到達する前に、１つまたは複数の他のリレーサーバを通って転送されることになる。
【課題を解決するための手段】
【０００６】
ピアツーピア通信セッション内でリレーサーバを通るルーティング変更メッセージによって引き起こされる輻輳を低減するために、これらの変更は、ダイレクトピアツーピアメッセージを使用して配布することができるメッセージ内で通信される。リレーサーバは、いくつかのメッセージに使用することができるが、多数の変更メッセージを処理する際のリレーサーバに対する負荷を低減することにより、ピアツーピアメッセージのコストを削減することができ、システムのスケーラビリティを増大することができる。
【０００７】
直接的なピアツーピア通信を容易にするために、ピア間の相互接続を定義するルーティングテーブルを使用し、メッセージのアドレス指定を行うことができる。ルーティングテーブルは、ダイレクトピアツーピアメッセージを使用して通信を行うことができるピアのグループを識別することができる。変更を開始する、かつその変更をコラボレーションセッション内の他のピアにブロードキャストするピアは、最初の受信者として、各グループ内のあるピアを選択することができ、このピアは、開始ピアから直接または間接的にメッセージを受信することができる。最初の受信者は、そのメッセージをグループ内の１つまたは複数の他のピアに転送することができる。次いで、そのメッセージを受信する各ピアは、コラボレーションセッション内のピアすべてがそのメッセージを受信するまで、ピアツーピア通信を介して、グループ内の他のピアにそのメッセージをさらに伝播することができる。
【０００８】
リレーサーバ、またはコラボレーションシステムの他の構成要素は、ルーティングテーブルの構築に参加することができる。そのようなサーバは、探索用のメッセージをピアから受信し、それらのメッセージを解析し、他のピアがそのピアと通信することができる可能性があるアドレスに関する情報を得ることができる。また、ピアがネットワークアドレス変換（ＮＡＴ）デバイスの背後にある場合、サーバが得た情報を使用し、そのＮＡＴデバイスをトラバースしそのピアに到達するための手法を識別することができ、おそらくは直接的なピアツーピア通信で到達可能なコラボレーションセッション内のピアの数を拡大する。
【０００９】
前述は、添付の特許請求の範囲によって規定される本発明の非限定的な概要である。
【００１０】
添付の図面は、原寸に比例して示すことを意図されていない。図面では、様々な図に示されている同一またはほぼ同一の各構成要素が同様の符号によって表されている。図を見やすくするために、あらゆる図面においてあらゆる構成要素に符号が付けられているわけではないことがある。
【図面の簡単な説明】
【００１１】
【図１】従来技術のピアツーピアコラボレーションシステムの図である。
【図２】本発明の一実施形態によるピアツーピアコラボレーションシステムの図である。
【図３Ａ】本発明の一実施形態によるピアツーピアコラボレーションシステム内のピアの機能ブロック図である。
【図３Ｂ】本発明の一実施形態によるピアツーピアコラボレーションシステムのピアで使用することができるデータ構造の図である。
【図４Ａ】Ｂ１およびＢ２の符号が付けられた点で相互接続されたとき、ピアが背後にある、あるタイプのＮＡＴデバイスを発見するためのプロセスの流れ図を形成する図である。
【図４Ｂ】Ｂ１およびＢ２の符号が付けられた点で相互接続されたとき、ピアが背後にある、あるタイプのＮＡＴデバイスを発見するためのプロセスの流れ図を形成する図である。
【図５Ａ】本発明の一実施形態によるピアツーピア通信に使用することができるアドレッシングの形態の図である。
【図５Ｂ】本発明の一実施形態によるピアツーピア通信に使用することができるアドレッシングの形態の図である。
【図５Ｃ】本発明の一実施形態によるピアツーピア通信に使用することができるアドレッシングの形態の図である。
【図６】本発明の一実施形態によるピア内のルーティングテーブルを維持するプロセスの流れ図である。
【図７】本発明の一実施形態によるメッセージを送信するためのプロセスの流れ図である。
【発明を実施するための形態】
【００１２】
本発明者らは、ピアツーピアコラボレーションシステムのコラボレーションセッション内で直接通信することができないピア間で間接的な通信を容易にするためにリレーサーバを使用すると、リレーサーバの周りで望ましくない量の負荷が生じる可能性があると理解している。その結果、ピアツーピアコラボレーションシステムの効果的な動作には、ネットワーク帯域幅またはメモリなど、リレーサーバに関連する望ましくない量のリソースが必要となるおそれがある。また、本発明者らは、負荷、およびサーバ負荷に伴う性能劣化は、より多くのピアデバイスが他のピアデバイスから到達できなくなるにつれて増大すると理解している。直接的な通信をするためにピアデバイスに到達できない可能性がある１つの理由は、そのピアがＮＡＴデバイスの背後にある可能性があることである。残念ながら、ピアデバイスがＮＡＴデバイスの背後にある可能性は、より多くのユーザが家庭から仕事をする、またはＮＡＴデバイスを使用するローカルエリアネットワークを介してインターネットに接続されるにつれて、増大している。
【００１３】
本発明の実施形態によれば、ピアツーピアコラボレーションシステムのリレーサーバに対する負荷を、エッジルーティング技法を使用することによって低減することができる。そのような技法は、ピアツーピアから直接、または１つまたは複数の中間ピアを通って間接的に他のピアに渡すことができる、ピアツーピアコラボレーションシステムに関連する変更メッセージまたは他のメッセージの量を増大させることができる。したがって、それらのメッセージがリレーサーバを通過しないため、サーバ負荷が低減される。そのようなシステムの有効性は、ＮＡＴデバイスの背後にあるデバイスとのピアツーピア通信を可能にするＮＡＴトラバーサル技法を組み込むことによってさらに改善することができる。
【００１４】
いくつかの実施形態では、本発明は、当技術分野で知られているピアツーピアコラボレーションシステムの構成要素を使用して実装することができる。知られている構成要素のタイプの一例として、図１は、従来技術のピアツーピアコラボレーションシステムを示す。図１の例では、複数のピアデバイスが、インターネットとすることができるネットワーク１００を介して通信する。しかし、本発明の実施形態を構築する上では、企業ネットワーク、または任意の他の好適なネットワークでピア間の通信を搬送することができる。
【００１５】
図１に示されているように、いくつかのピアを、ＬＡＮを介してネットワーク１００に接続することができる。たとえば、ＬＡＮ１１０がルータ１１６を介してネットワーク１００に結合される。ピア１１２および１１４など、ＬＡＮ１１０に接続されたピアデバイスは、ＬＡＮ１１０をネットワーク１００に結合するルータ１１６を介してネットワーク１００にアクセスすることができる。
【００１６】
図の実施形態では、ルータ１１６がＮＡＴデバイスとして働くことができる。したがって、ピア１１２および１１４はルータ１１６を通って外に向かうメッセージを送ることができるが、ローカルエリアネットワークの外側のピアデバイスは、それらのメッセージ内のアドレス情報を使用してピア１１２および１１４に応答することができない可能性がある。というのは、そのようにアドレス情報されたメッセージは、ルータ１１６を通って所期のピアデバイスに渡らないからである。
【００１７】
たとえば、ＬＡＮ１２０は、ピアデバイス１２２および１２４を含むように示されている。ピアデバイス１２２および１２４は、ルータ１２６を通ってネットワーク１００にアクセスすることができるが、ルータ１１６内のネットワークアドレス変換により、ピアデバイス１２２または１２４によって送られるメッセージがピア１１２および１１４に到達することが妨げられる可能性がある。この例では、ルータ１２６もまた、内に向かうメッセージがピアデバイス１２２および１２４に到達するのを妨げるあるタイプのネットワークアドレス変換を実施する場合、到達できない可能性は、対称的なものとなる可能性がある。
【００１８】
ピア１２２または１２４とピア１１２または１１４との間で通信を可能にするために、リレーサーバ１３０を使用することができる。リレーサーバ１３０は、ここではネットワーク１００に接続されて示されている。ピア１１２、１１４、１２２、１２４のそれぞれが、リレーサーバ１３０と通信を確立することができる。ピア１１２、１１４、１２２、１２４のそれぞれは、各ピアが背後にあるＮＡＴデバイスを通って、外に向かうメッセージを送ることができるため、各ピアが、他のピア宛のメッセージをリレーサーバ１３０に送ることができる。次いで、リレーサーバ１３０は、そのメッセージを受信者ピアに転送することができる。このようにして、ピアツーピアコラボレーションセッション内の各ピアは、変更メッセージを任意の他のピアに通信することができる。しかし、各変更の通信は、１つまたは複数のメッセージがリレーサーバ１３０を通過することを必要とする可能性がある。
【００１９】
図１は、変更メッセージ、またはピアツーピアコラボレーションシステムに関連する他のメッセージを処理することによって引き起こされるサーバ１３０の周りのその大きさの負荷をマスクすることができるピアツーピアコラボレーションシステムの略図である。たとえば、図１のコラボレーションシステムに示されている４つのピアは、コラボレーションセッション内のピアの数を表していなくてもよい。多くの場合、４つを超えるユーザがコラボレーションセッションに参加することができる。ピアの数が増大するにつれて、リレーサーバ１３０を通って送られるメッセージの数もまた増大する可能性がある。さらに、リレーサーバ１３０を運用する企業または他の団体（ｅｎｔｉｔｙ）は、複数のコラボレーションセッションをサポートしたいと望む可能性がある。各コラボレーションセッションは、リレーサーバ１３０を通ってルーティングされる変更メッセージを生成することができる。したがって、リレーサーバ１３０は、複数のセッション内の複数のユーザによって生成される変更メッセージを処理するのに十分な帯域幅、メモリ、または他のリソースを有していなければならない。
【００２０】
リレーサーバ１３０に対する負荷を低減するために、図１に示されているコラボレーションシステムの構成要素を、変更メッセージのエッジルーティングをサポートするように適合させることができる。エッジルーティングは、リレーサーバ１３０を関与させることなしに、ピアツーピアから通信される変更メッセージの数を増大する。図２は、本発明の一実施形態によるコラボレーションシステムを示す。図２の例では、図１の例のように、４つのピアがコラボレーションセッション内で示されている。図１の場合と同様に、これらのピアは、２つのローカルエリアネットワークに接続される。図２の例では、ローカルエリアネットワーク１１０’がピア１１２’および１１４’を含む。ローカルエリアネットワーク１２０’は、ピア１２２’および１２４’を含む。ローカルエリアネットワークに接続されるピアは、ルータ１１６または１２６など、ＮＡＴデバイスを通ってネットワーク１００に結合させることができる。直接的な通信が使用されないピア間で通信を容易にするために、リレーサーバ１３０’をピアツーピアコラボレーションセッションに含めることができる。しかし、エッジルーティングを組み込むことにより、リレーサーバ１３０’を通る間接的な通信が使用される場合を低減することができる。
【００２１】
ピアツーピアコラボレーションシステムを実装するために使用される特定の構成要素は、本発明にとってクリティカルなものではない。したがって、ピア１１２’、１１４’、１２２’、１２４’は、本発明の一実施形態によるエッジルーティングをサポートするようにプログラムされるが、図１における対応するデバイスと同じ構成を有するデバイスを用いて実装することができる。これらのデバイスは、ネットワーク対応デスクトップコンピュータとして示されている。しかし、任意の好適なネットワークコンピューティングデバイスを使用することができる。同様に、図では、サーバ１３０’は、やはりエッジルーティングをサポートするようにプログラムされた、サーバ１３０（図１）と同じタイプのデバイスを用いて実装されている。しかし、任意の好適なデバイスを使用し、サーバ１３０’を実装することができる。また、図２では、ＮＡＴデバイスがルータ１１６および１２６によって示されているが、ピアデバイスと、他のピアデバイスを相互接続するネットワークとの間の任意の好適な接続が使用されてもよく、そのような接続は、ＮＡＴを使用しても使用しなくてもよい。
【００２２】
図２は、図１に先に示されていたシステムとのさらなる違いを示す。図の例では、サーバ２３２および２３４は、システム内に組み込まれている。この例では、サーバ２３２および２３４は、任意の好適なネットワークデバイスとすることができ、ピア１１２’、１１４’、１２２’、１２４’など、コラボレーションセッション内のピアのためのＮＡＴトラバーサルおよびアドレス発見をサポートするようにプログラムされる。これらの機能は、ピア１１２’、１１４’、１２２’、１２４’のそれぞれについて、そのデバイスがそれ自体のＬＡＮ外部のデバイスから到達可能であるかどうか、また到達可能である場合、他のピアデバイスが変更メッセージをこれらのデバイスに通信するために使用することができるアドレス情報を判定することを可能にする。この情報を用いて、ピアは、最初にリレーサーバ１３０’にそのメッセージを送ることなしに変更情報を直接送ることができる、コラボレーションセッション内の他のピアを識別することができる。たとえば、ルータ１１６をトラバースするようにＮＡＴトラバーサル技法が識別された場合、ピア１２２’および１２４’など、ＬＡＮ１１０’の外側のピアは、ピア１１２’、ピア１１４’のどちらか、またはそれらの両方に直接アドレス指定して変更メッセージを送ることができる。
【００２３】
図２の実施形態では、２つのサーバ２３２および２３４が、ピアツーピアコラボレーションシステムに組み込まれるように示されている。これらのサーバは、あるタイプのＮＡＴデバイスが識別された後でそのようなＮＡＴデバイスをトラバースするのに効果的な技法を使用することができるように、ＮＡＴ識別技法の実行をサポートする。
【００２４】
図の２つのサーバは、相異なるデバイスからのメッセージの送信および／または受信を必要とするＮＡＴ識別技法の実行を可能にする。そのようなサーバ２３２および２３４は、互いに通信し、そのようなＮＡＴ識別技法を実施するためにそれらの動作を調整することができる。しかし、その機能を実施するために２つの物理的なサーバが使用されることは必要でない。たとえば、１つの追加のサーバがリレーサーバ１３０’と協働し、そのようなＮＡＴ識別技法を実施することができる。別法として、複数のサーバをエミュレートするように単一のサーバをプログラムすることも、他の理由でネットワーク１００に接続されているサーバがＮＡＴ識別技法の一部またはすべてを実施することもできる。したがって、ＮＡＴ識別に使用される特定のハードウェアは、本発明に対する限定ではなく、任意の好適なハードウェアを使用することができる。
【００２５】
ＮＡＴトラバーサル情報をピアが使用し、リレーサーバを使用することなしに通信することができるピアの数を増大することができる。ピアツーピアコラボレーションシステムの動作時には、これらのピアのいくつかが互いに通信を確立することになる。次いで、これらのピアは、リレーサーバを使用することなしに通信することができるピアの「近隣ピア群」にグループ化されてもよい。近隣ピア群を識別することによって、各近隣ピア群内の１つまたはいくつかのピアにメッセージを送ることができ、そこからそのメッセージを他のピアに伝播することができる。
【００２６】
近隣ピア群内のピアに対する最初の通信がリレーサーバを必要とする場合でさえ、最初のピアから近隣ピア群内の他のピアには、リレーサーバにさらに負荷をかけることなしにメッセージを配布することができる。たとえば、メッセージをピア１１２’および１１４’に直接送るために、ピア１２２’がルータ１１６によってもたらされるＮＡＴをトラバースすることができない場合でさえ、ピア１２２’は、単一のメッセージを、リレーサーバ１３０’を経てピア１１２’に送ることができる。次いで、ピア１１２’は、そのメッセージをピア１１４’、およびピア１１２’から直接到達可能な任意の他のピアデバイスに転送することができる。サーバ２３２および２３４などサーバを経てコラボレーションセッション内のピアに関する情報を得ることにより、そのような近隣ピア群の識別が容易になる。
【００２７】
図３Ａに転じると、本発明の一実施形態によるピアツーピアコラボレーションシステム内で使用することができるピアデバイス３１０の図が提供されている。ピア３１０は、デスクトップまたはラップトップコンピュータとすることができる。しかし、任意の好適なコンピューティングデバイスをピア用のプラットフォームとして使用することができる。他のピアとの通信を容易にするために、ピア３１０は、ピア３１０をネットワーク３００に結合するネットワークインターフェース３３４を含む。ネットワーク３００は、１つまたは複数のＮＡＴデバイスを含むことができる、任意の好適なネットワークとすることができる。
【００２８】
ネットワークインターフェース３３４は、ネットワーク３００を介してパケットを送信または受信することを可能にする任意の好適なインターフェースハードウェアおよび／またはソフトウェアとすることができる。図の実施形態では、１つまたは複数のパケットを使用し、コラボレーションシステム内の共有空間に関する変更情報を含むメッセージを伝えることができる。しかし、そのようなメッセージを伝えるために使用される特定の媒体、およびそれらのメッセージのためのプロトコルは、本発明にとってクリティカルなものではなく、任意の好適なネットワークインターフェース３３４を使用することができる。たとえば、ネットワークインターフェース３３４は、従来のネットワークインターフェース、および既知の有線または無線プロトコルに従って動作する関連のドライバソフトウェアとすることができる。
【００２９】
ネットワークインターフェース３３４の特定の形態にかかわらず、コラボレーションクライアントコンポーネント３２０は、ネットワークインターフェース３３４を介してコラボレーションセッション内の他のピアにメッセージを送ることができる。同様に、コラボレーションコンポーネント３２０は、ネットワークインターフェース３３４を介して他のピアからメッセージを受信することができる。コラボレーションクライアント３２０は、これらのメッセージを使用し、共有空間のコピーを維持することができる。コラボレーションクライアントコンポーネント３２０は、ユーザインターフェース３３２を介してユーザに共有空間を表すものを提示することができる。ピア３１０が従来のデスクトップまたはラップトップコンピュータである実施形態では、ユーザインターフェース３３２は、コラボレーションクライアントコンポーネント３２０が、共有空間を表すものをレンダリングすることができるディスプレイ画面を含むことができる。しかし、ユーザインターフェース３３２の形態は、本発明にとってクリティカルなものではない。
【００３０】
同様に、ユーザインターフェース３３２は、共有空間に対する変更を引き起こすコマンドをユーザが入力することを可能にする１つまたは複数のユーザ入力デバイスを含むことができる。コラボレーションクライアントコンポーネント３２０は、共有空間を変更するためのコマンドを表す、ユーザインターフェース３３２からの入力を受信することができる。これらのコマンドは、コラボレーションクライアントコンポーネント３２０をトリガし、共有空間に対する変更をコラボレーションセッション内の他のピアに通信する１つまたは複数のメッセージを生成することができる。
【００３１】
変更メッセージを生成および処理するために、コラボレーションクライアントコンポーネント３２０は、「変更エンジン」３２２を含むことができる。変更エンジン３２２は、従来のピアツーピアコラボレーションシステム内で使用されるものと同様の、１つまたは複数のソフトウェアコンポーネントとすることができる。しかし、変更エンジン３２２の特定の実装は、本発明にとってクリティカルなものではなく、任意の好適な実装を使用することができる。
【００３２】
そのようなコンポーネントは、ユーザ入力を受け取り、他のピアに配布するために変更メッセージに変更を変換することができる。同様に、変更エンジン３２２内のコンポーネントは、コラボレーションセッション内の１つまたは複数の他のピアからの変更メッセージを受け取り、ピア３１０内の共有空間のコピーを他のピア内の共有空間のコピーと同期するために、共有空間のコピーに対して行う適切なアクションを決定することができる。
【００３３】
変更メッセージを他のピアと交換するために、ピア３１０は、コラボレーションセッション内の複数のピアの間での変更の通信に関連する機能を実施する通信サブシステム３２６を含む。ピアデバイス３１０のユーザによって加えられた変更について、通信サブシステム３２６は、これらの変更を説明するメッセージを、コラボレーションセッション内の他のピアにブロードキャストすることができる。他のデバイスのユーザによって加えられた変更については、通信サブシステム３２６は、メッセージを受け取り、変更エンジン３２２に渡す前にメッセージを順序付けることができる。そのような機能は、既知のピアツーピアコラボレーションシステムの場合と同じように、または任意の好適な形で実施することができる。しかし、通信サブシステム３２６は、エッジルーティングをサポートするように適合させることができる点で、既知のピアツーピアコラボレーションシステム内の通信コンポーネントと異なっていてもよい。
【００３４】
エッジルーティングと共に行われるときメッセージをコラボレーションシステム内の他のピアに向けて送るのを容易にするために、コラボレーションクライアントコンポーネント３２０は、ルーティングテーブル３２４を含むことができる。ルーティングテーブル３２４は、ピア３１０のユーザによって加えられた変更を伝えるメッセージをアドレス指定するための適切な機構を、通信サブシステム３２６が決定することができる情報を含むことができる。さらに、通信サブシステム３２６は、ルーティングテーブル３２４を使用し、コラボレーションセッション内の他のピアから受信されたメッセージの転送先のピアを選択することができる。
【００３５】
図３Ｂは、ルーティングテーブル３２４の図を提供する。そのようなデータ構造は、任意の好適な仕方で実装することができる。たとえば、ルーティングテーブル３２４は、ピアデバイス内のコンピュータ可読媒体３４０内にデータ構造として格納することができる。しかし、任意の好適な機構を使用し、ルーティングテーブル３２４を物理的に含めることができ、ルーティングテーブル３２４内の情報の、任意の好適な表現を使用することができる。
【００３６】
図３Ｂの実施形態では、ルーティングテーブル３２４は、ピア３１０（図３Ａ）を含むピアツーピアコラボレーションシステム内のピアに関する情報を含むように示されている。図では、ルーティングテーブル３２４は、直接通信することができるピアのグループに関する情報を伝えるように編成される。図３Ｂの実施形態では、ピアの２つのグループが、近隣ピア群３５０および３６０として示されている。近隣ピア群３５０は、４つのピア３５２Ａ、３５２Ｂ、３５２Ｃ、３５２Ｄを含むように示されている。同様に、近隣ピア群３６０は、ピア３６２Ｅ、３６２Ｆ、３６２Ｇ、３６２Ｈを含むように示されている。
【００３７】
この実施形態では、各近隣ピア群が、その近隣ピア群内の少なくとも１つの他のピアと通信することができるピアのグループを含むように示されている。近隣ピア群３５０内では、ピア３５２Ａは、ピア３５２Ｂとの接続３７０1を形成している。また、ピア３５２Ａは、ピア３５２Ｃとの接続３７０2を形成している。次いで、ピア３５２Ｃは、ピア３５２Ｄとの接続３７０4を形成している。ピア３５２Ａおよび３５２Ｂは、ピア３５２Ｄに直接形成された接続を有していないが、ピア３５２Ａおよび３５２Ｂは、ピア３５２Ｃを介してメッセージを送ることによってピア３５２Ｄと通信することができる。したがって、ピア３５２Ａ、３５２Ｂ、３５２Ｃ、３５２Ｄはすべて、リレーサーバを使用することなしに、近隣ピア群３５０内のあらゆる他のピアと通信することができる。そのような構成は、近隣ピア群３５０内のピアのすべてが同じＮＡＴデバイスの背後にあり、その結果、直接的なピアツーピア通信が可能であることに由来するものとすることができる。しかし、他の動作条件が、近隣ピア群３５０内に示されているピアのグループ化を引き起こす可能性がある。たとえば、近隣ピア群３５０内のピアの１つまたは複数がＮＡＴデバイスの背後にないことがある。あるいは、近隣ピア群３５０内のピアの１つまたは複数が、他のピアが、ＮＡＴをトラバースすることができるようになるアドレス情報を受信したＮＡＴデバイスの背後にあることがある。
【００３８】
同様に、近隣ピア群３６０は、各ピアがリレーサーバを使用することなしにあらゆる他のピアと通信することができるピアのグループを表す。しかし、近隣ピア群３６０は、近隣ピア群３５０と異なる接続パターンを含むように示されている。図の実施形態では、ピア３６２Ｅは、「スーパーピア」として働き、複数の他のピアデバイスと通信を確立済みであることを意味する。図の実施形態では、ピア３６２Ｅは、ピア３６２Ｆと接続３７２1を確立済みである。スーパーピア３６２Ｅは、ピア３６２Ｇと接続３７２2を、またピア３６２Ｈと接続３７２3を確立済みである。
【００３９】
各近隣ピア群内のピア間で確立されている接続の数およびタイプは、本発明にとってクリティカルなものではない。図の実施形態では、コラボレーションセッション内の各ピアデバイス内の通信サブシステム３２６（図３Ａ）は、近隣ピア群を形成するように他のピアと接続を確立するように構成することができる。各ピアデバイスが、接続を確立することになるピアを決定する仕方は、本発明にとってクリティカルなものではない。しかし、いくつかの実施形態では、ピアツーピアコラボレーションセッション内の他のピアの特性によって、ピア間の接続が決定される可能性がある。たとえば、ピアは、メッセージを送信、受信、または転送するのに使用可能な、そのピアが有する帯域幅、メモリ、または他のリソースに基づいて、他のピアと確立する接続の数を制限することができる。
【００４０】
逆に、多数のメッセージを処理するためのリソースを有するピアは、多数の接続を形成することによってスーパーピアになるようにプログラムされてもよい。これらの接続の形成は、ピアを、その使用可能なリソースに基づいて複数の接続を形成するようにプログラムすることによってトリガすることができる。しかし、いくつかの実施形態では、リレーサーバまたは他のデバイスによって送られるコマンドまたは要求によってスーパーピアになるように、ピアをトリガすることができる。
【００４１】
また、いくつかの実施形態では、近隣ピア群内のピア間の既存の接続がピア間での適時の通信を不利にサポートしない場合、ピアは、他のピアと新しい接続を確立することができる。たとえば、３５２Ａは、ピア３５２Ｃに転送するためにピア３５２Ｂにメッセージを送ることにより、次いでピア３５２Ｃがそのメッセージをピア３５２Ｄに転送することになり、ピア３５２Ｄと通信することができる。そのような通信経路は、非常に遅く、または非常に損失が多く、または別の形でピア３５２Ａとピア３５２Ｄの間の確実な通信にとって非常にエラーを起こしやすいものとなるおそれがある。ピア３５２Ａは、既存の接続が適切でないことを検出したことに応答して、接続３７０2を確立している可能性があり、それによりピア３５２Ｄに対するより直接的な通信がもたらされる。しかし、ネットワーク内で形成される特定の接続は、本発明にとってクリティカルなものではない。同様に、ネットワーク内のピア間での接続の形成をトリガするために使用される特定の機構は、本発明の限定ではない。
【００４２】
ルーティングテーブル３２４によって伝えられるピア間の接続に関する特定の情報にかかわらず、ルーティングテーブル３２４を通信サブシステム３２６（図３Ａ）が使用し、コラボレーションセッション内の他のピアに対する変更情報をブロードキャストするために使用することができるアドレッシング情報を決定することができる。たとえば、ルーティングテーブル３２４を使用し、変更をレポートするメッセージを受信するように、各近隣ピア群内でピアを１つ程度選択することができる。図３Ｂの例では、変更を有するメッセージは、最初に近隣ピア群３５０内のピア３５２Ａにアドレス指定することができる。ピア３５２Ａは、そのメッセージをピア３５２Ｂおよび３５２Ｃに配布することができる。次いで、ピア３５２Ｃは、そのメッセージをピア３５２Ｄに配布することができる。同様の形で、変更メッセージを、最初に近隣ピア群３５０内のピア３６２Ｅに向けて送ることができる。ピア３６２Ｅは、そのメッセージをピア３６２Ｆ、３６２Ｇ、３６２Ｈのそれぞれに配布することができる。この例では、変更メッセージは、最初にそのメッセージを各近隣ピア群内の１つのピアだけに送信することによって、コラボレーションセッション内のピアすべてにブロードキャストされる。
【００４３】
図の実施形態では、各ピアが同様のルーティングテーブルを維持する。したがって、各ピアがそのルーティングテーブルを使用し、そのピアによって発せられる各変更の最初の受信者ピアを選択することができる。さらに、各ピアは、ルーティングテーブルのそのコピーを使用し、または既存のブロードキャストセッションに依拠し、そのピアがメッセージを転送することになるピアを識別することができる。たとえば、ピア３６２Ｅは、ルーティングテーブルのそのコピーを使用し、メッセージをクライアント３６２Ｆ、３６２Ｇ、３６２Ｈに転送することができる。図の実施形態では、コラボレーションセッション内の各受信者ピアは、その近隣ピア群に、各ピアが同じメッセージを１回だけ受信するように変更メッセージをブロードキャストする。しかし、ピアが同じメッセージの複数のコピーを受信することができる実施形態では、各ピア内の通信サブシステム３２６（図３Ａ）が、重複するメッセージを無視するように構築されてもよい。
【００４４】
ピアのそれぞれは、他のピアまたは他のデバイスとの情報の交換を介してなど、任意の好適な形でルーティングテーブルを構築することができる。図２に示されている実施形態では、サーバ２３２および２３４が、ルーティングテーブルの構築を容易にするように、ピアと情報を交換する。サーバ２３２、サーバ２３４、およびコラボレーションセッション内のピアの間での対話から、サーバ２３２および２３４は、近隣ピア群３５０および３６０など、デバイスの近隣ピア群を識別するために使用することができる情報を得ることができる。この情報は、ＮＡＴデバイスの背後にあるピアの識別、およびピアのそれぞれが背後にあるＮＡＴデバイスのタイプを含むことができる。さらに、この情報は、他のピアと通信を確立するために使用することができるアドレス情報の識別を含むことができる。
【００４５】
サーバ２３２および２３４（図２）は、コラボレーションセッション内のメンバが変化したとき、またはいくつかのネットワーク条件が変化し、それによりピアが他のピアから到達可能になる、または到達できなくなる可能性があるとき、ピアがそれらのルーティングテーブルを更新することができるように、任意の好適な時間に各ピアに関する情報を収集することができる。一例として、サーバ２３２および２３４は、各ピアがコラボレーションセッションに加わったとき、情報を収集および配布することができる。
【００４６】
新しいピアに関する情報は、コラボレーションセッション内のピアのそれぞれに配布することができ、次いで、各ピアは、その情報を使用し、その新しいピアと接続を確立するかどうか判定することができる。同様に、サーバ２３２および２３４などのサーバは、ピアツーピアコラボレーションセッションを離れたピアに関する情報のための中央配布点として働くことができる。より一般的には、コラボレーションセッションの帰属関係に変化があったときはいつでも、１つまたは複数のサーバが、そのコラボレーションセッション内に現在あるピアに関する情報を配布することができる。
【００４７】
ルーティングテーブル３２４が形成される特定の機構にかかわらず、ＮＡＴデバイスが、コラボレーションセッション内のピアとのピアツーピア通信を制限しない場合、ネットワーク輻輳を低減することが望ましい可能性がある。したがって、ＮＡＴデバイスがネットワーク内に存在する場合、ピアツーピア通信が可能になるようにそれらのＮＡＴデバイスをトラバースすることができるかどうか識別することが望ましい。ひとたびＮＡＴデバイスのタイプが識別されたならば、好適なＮＡＴトラバーサル技法を選択することができる。
【００４８】
使用される特定のＮＡＴトラバーサル技法は、本発明にとってクリティカルなものではなく、任意の好適な技法を使用することができる。トラバーサル技法は、多数のタイプのＮＡＴデバイスについて既知であり、使用することができる。たとえば、ＮＡＴトラバーサル技法は、Ｄｉｒｅｃｔｅｄ  ＩＰ接続、ＵＰｎＰ  ＮＡＴ、Ｆｕｌｌ  Ｃｏｎｅ（フルコーン）ＮＡＴ、Ｒｅｓｔｒｉｃｔｅｄ  Ｃｏｎｅ（制限付きコーン）ＮＡＴもしくはＰｏｒｔ  Ｒｅｓｔｒｉｃｔｅｄ  Ｃｏｎｅ（ポート制限付きコーン）ＮＡＴ、ＩＳＡサーバを用いたＳｙｍｍｅｔｒｉｃａｌ（シンメトリカル）ＮＡＴ、決定的ポート割当て（Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｐｏｒｔ  Ａｓｓｉｇｎｍｅｎｔ）を用いたＳｙｍｍｅｔｒｉｃａｌ  ＮＡＴ、および制限された発信ポート制約を用いたファイアウォールなどのＮＡＴタイプについて既知である。１対のピアは、たとえ各ピアが異なるＮＡＴデバイスの背後にあるにしても、ＮＡＴデバイスのその対に適したトラバーサル技法が使用可能である場合、直接的なピアツーピア通信に加わることができることが知られている。したがって、ピアツーピア通信を確立する際には、各ピアが背後にあるＮＡＴデバイスのタイプを識別するための技法を、トラバーサル技法の選択のために使用することができる。ＮＡＴ識別技法は、上記にリストされているタイプのＮＡＴデバイスを識別することができる。さらに、本発明者らは、「シンメトリックバリアント（ｓｙｍｍｅｔｒｉｃ  ｖａｒｉａｎｔ）」と呼ばれる他のタイプのＮＡＴデバイスを分類した。
【００４９】
シンメトリックバリアントＮＡＴデバイスは、同じ内部ＩＰアドレスおよびポートから任意の宛先アドレスおよびポートへのあらゆる要求を、毎回、同じ外部ＩＰアドレスに、しかし異なるポートにマップするものである。シンメトリックバリアントは、セッション依存性のバインディング挙動を示す。すなわち、アドレスバインディングは一貫しているが、ポートバインディングは、同じ内部ホストからの要求ごとに変化する。多数のＮＡＴデバイス（たとえばＩＳＡおよびＮｅｔＳｃｒｅｅｎ）は、クライアントが、ＴＣＰを使用して外に向かう接続要求に対してそのローカルソケットを特定のポートにバインドするとき、このように振る舞う。シンメトリックバリアントは、一般的なシンメトリックＮＡＴの変形形態であり、したがって、非決定的ポート割当て（ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ｐｏｒｔ  ａｓｓｉｇｎｍｅｎｔ）を用いる通常のシンメトリックバリアントと、決定的ポート割当てを用いるシンメトリックバリアントとして、さらに分類することができる。ポートを決定的な形で割り当てるシンメトリックバリアントＮＡＴは、一般に、次のポート割当てを予測することができるとき、トラバース可能である。
【００５０】
また、本発明者らは、シンメトリカルファイアウォール（Ｓｙｍｍｅｔｒｉｃａｌ  Ｆｉｒｅｗａｌｌ）と呼ばれる、あるタイプのファイアウォールデバイスを分類した。シンメトリカルファイアウォールは、どの内部ホストアドレスマッピングをも提供しないが、外部ホストからファイアウォール背後の任意の内部ホストへの応答不要の接続要求を遮断するネットワークデバイスである。シンメトリカルファイアウォールは、内部ホストが以前に外部ホストに接続していた後でその外部ホストがその内部ホストに接続することができる場合、トラバース可能である。
【００５１】
ＮＡＴデバイスのタイプを発見し、次いでそのＮＡＴをトラバースするために、サーバ２３２および２３４（図２）など、ＮＡＴ探索用サーバを使用することができる。そのようなサーバは、公共エリア内にあることができ、探索しようとするＮＡＴ背後のピアから到達可能であることがある。図２は、２つのサーバを有する単なる１つの可能なシナリオを示す。実際には、そのサーバが２つの、公然とアドレス可能なネットワークインターフェースを有する場合にサーバを１つだけ使用することができる。また、サーバ１３０’など公開リレーサーバは、探索用サーバとして働くことができる。
【００５２】
ＮＡＴ発見の一部として、ピアは、ＮＡＴデバイスおよびその特性について探索するために、一連のメッセージをサーバに送ることができる。ピアメッセージを受信した後で、サーバは、ＮＡＴによって割り当てられた外部アドレスおよびポートと共に応答を返信する。サーバがピアメッセージに応答するので、ピアが送るメッセージは、エコーメッセージとも呼ばれる。ピアは、クライアントがインターネット上で開いているか、それともファイアウォール、またはＮＡＴデバイスなどアドレス変換デバイスの背後にあるか、見出すためにエコーメッセージを送る。ＮＡＴデバイスが見つかった場合、ピアはまた、そのＮＡＴのタイプを見出したいと望むことになる。エコーメッセージはまた、そのＮＡＴをうまくトラバースすることができる場合、特定のＩＰアドレスおよびポートでピアに接続するように、特定のサーバに指令することができる。ＮＡＴは、そのＮＡＴ背後のピアが、外部ホストがクライアントに対して内に向かう接続を確立するのに成功したことを検知した場合、ＴＣＰを使用してトラバースを受けることができる。
【００５３】
ピアがＴＣＰを使用してネットワークに結合される一実施形態によるＮＡＴ発見の一部として、ピアは、以下のタイプのメッセージをサーバに送ることができる。すなわち、
エコーテスト（Ｅｃｈｏ  Ｔｅｓｔ）：ピアは、サーバに対してＴＣＰ接続を確立し、次いで要求を送る。サーバは、ピアのマップされた外部ＩＰアドレスおよびポートと共に応答を返信するピアは、応答を受信した後で接続を閉じる。
【００５４】
エコーホップテスト（Ｅｃｈｏ  Ｈｏｐ  Ｔｅｓｔ）：ピアは、サーバに対してＴＣＰ接続を確立し、次いで要求を送る。サーバは、ピアのマップされた外部ＩＰアドレスおよびポートと共に応答を返信し、同時に、異なるサーバに要求を転送し、ピアのマップされた外部ＩＰアドレスおよびポートでピアに接続するようにその第２のサーバに指令する。ピアは、第１のサーバから応答を受信した後で接続を閉じる。
【００５５】
ポート変更を伴うエコーテスト（Ｅｃｈｏ  Ｔｅｓｔ  ｗｉｔｈ  ｐｏｒｔ  ｃｈａｎｇｅ）：ピアは、サーバに対してＴＣＰ接続を確立し、次いでポート番号と共に要求を送る。サーバは、ピアのマップされた外部ＩＰアドレスおよびポートと共に応答を返信し、次いでマップされた外部ＩＰアドレスおよび受信されたポートでピアに接続する。ピアは、元のサーバから応答を受信した後で接続を閉じる。
【００５６】
順次エコーテスト（Ｓｅｑｕｅｎｔｉａｌ  Ｅｃｈｏ  Ｔｅｓｔ）：ピアは、順次割り当てられたポート番号を用いて、サーバに対して複数のＴＣＰ接続を同時に確立し、サーバは、ピアのマップされた外部ＩＰアドレスおよびポートと共に各接続について応答を返信する。ピアは、その接続について応答が受信された後で各接続を閉じる。
【００５７】
また、ピアは、ＮＡＴトラバーサルの試行をそのピアとサーバまたは複数のサーバとの間で構成することができるように、他の特別なメッセージをサーバに送ることができる。たとえば、ピアがシンメトリカルＮＡＴの背後にあることをそのピアが見出した後で、そのピアは、ポート割当て範囲を有するメッセージをサーバに送ることができ、そのサーバは、その所与の範囲内におけるクライアントの外部ＩＰアドレスおよびポート番号でピアに接続するように第２のサーバに指令する。
【００５８】
図４Ａおよび図４Ｂは、ＴＣＰベースのＮＡＴ発見プロセスを示す。このプロセスでは、ピアが一連のエコーメッセージをサーバに送る。このプロセスは、ピアが、探索用サーバに対してＴＣＰ接続を確立することによって、ＮＡＴデバイスが存在するかどうか、またＮＡＴデバイスが見つかった場合、そのＮＡＴデバイスのタイプを発見することを可能にする。このプロセスは、ＮＡＴの全コーンタイプ、シンメトリカルＮＡＴ、ならびにシンメトリカルバリアントを発見することができる。さらに、このプロセスはまた、ピアがインターネット上で開いているか、それともシンメトリカルファイアウォールの背後にあるか検出することができる。ＮＡＴが発見されたとき、直接、または同時ＴＣＰオープンを使用して、そのＮＡＴをトラバースしようと試みることができる。図４Ａおよび図４Ｂは、送られるメッセージおよび行われるテストの順番を示しているが、いくつかのアクションを同時に実施することができ、したがって実際の順序は様々な実施形態で異なる可能性がある。したがって、処理の順序は、本発明に対する限定ではない。
【００５９】
このプロセスは、ピアがポート上で内に向かう接続を求めてリッスンすることから開始することができる。新しい各接続要求について、ピアは、ソケットを作成し、そのローカルポートをそのピアがリッスンしているポートにバインドすることができる。たとえば、ピアツーピアコラボレーションセッション内のピアは、２４９２、８０、または４４３など特定のポートを介してそのセッションのピア群またはリレーサーバと通信することができる。ここで、ピアは、ピアツーピアコラボレーションセッション内で実際に動作するピアが、ＴＣＰベースのＮＡＴトラバーサルを可能にするために何をすることになるかシミュレーションする。内に向かう接続要求がピアによって受け入れられるために、外部ホストは、ＮＡＴがその内部アドレスとピアがリッスンしているポートとにマップした外部アドレスおよびポートに接続しなければならない。
【００６０】
接続が確立された後で、ピアは最初に、ブロック４１０で、エコーテストメッセージをサーバに送ることができる。マップされたＩＰアドレスおよびポートをサーバから受信したとき、ピアは、判断ブロック４１２で、マップされたＩＰアドレスおよびポートをそのローカルＩＰアドレスおよびポートと比較することができる。
【００６１】
アドレスおよびポートが同じである場合には、ピアは、アドレス変換デバイスがインストールされていないが、そのピアがファイアウォールの背後にある可能性があることを理解している。したがって、プロセスはブロック４３０に分岐する。ファイアウォールが内に向かう接続を許すかどうか見出すために、ピアは、ブロック４３０で、エコーホップテストメッセージをサーバに送り、そのサーバは第２のサーバに、ピアのＩＰアドレスおよびポートに接続するように指令する。第２のサーバからの内に向かう接続をうまく確立することができる場合、プロセスは、判断ブロック４３２で、終了点４５０に分岐する。プロセスが終了点４５０に到達した場合、ピアがインターネット上で開いていることをそのピアは理解しており、そうでない場合には、プロセスは、判断ブロック４３２で終了点４５２に分岐し、ここでクライアントは、応答不要の、内に向かう接続の試行を妨げるシンメトリカルファイアウォールの背後にあると決定する。ファイアウォールがシンメトリカルである場合、ピアはまた、クライアントに対する内に向かう接続を確立することができるかどうか確かめるために、そのピアとサーバが同時に互いに接続するように構成することができるように、特別なメッセージをサーバに送ることができる。確立された内に向かう接続は、シンメトリカルファイアウォールがトラバース可能であることを示す。
【００６２】
逆に、ピアの外部ＩＰアドレスおよびポートがピアの内部ＩＰアドレスおよびポートと異なる場合には、ピアは、アドレス変換デバイスの背後にあると結論を下すことができる。したがって、プロセスは、判断ブロック４１２からブロック４１４に分岐する。ブロック４１４では、ピアは、サーバと別のエコーテストを行い、次いで、新しくマップされた外部ＩＰアドレスおよびポートを以前のエコーテストからのものと比較する。
【００６３】
プロセスは、ブロック４１６で、その比較の結果に基づいて分岐する。マッピングが異なる場合には、ＮＡＴのアドレスバインディングはセッション依存性であり、ＮＡＴバインディングが、外に向かう接続ごとに変化することを意味する。セッション依存性のバインディング挙動を伴うＮＡＴデバイスは、通常、トラバースするのが困難である。したがって、判断ブロック４１６で決定されたようにマッピングが異なる場合、プロセスは判断ブロック４４０に分岐する。さらに、プロセスは、判断ブロック４４０で、マッピングの変更がポートにしかないかどうかに基づいて分岐する。変更がポートに限定されない場合、プロセスは終了点４５４に分岐する。プロセスが終了点４５４に到達した場合、ピアは、トラバース可能でないデバイスの背後にあると結論を下すことができる。
【００６４】
しかし、ＮＡＴが、一貫して同じ外部アドレスにバインドしており、ポートだけがセッションごとに変化する場合には、そのＮＡＴは、シンメトリックバリアントＮＡＴと見なされる。この条件では、プロセスは判断ブロック４４０からブロック４４２に分岐する。ブロック４４２では、ピアは、順次エコーテストを用いて、ＮＡＴのポート割当てパターンを探索することになる。順次テストの結果を使用し、ＮＡＴがそのポートを決定的に割り当てるか、それとも予測できないように割り当てるか示すことができる。ポート割当てが決定的でない場合、プロセスは判断ブロック４４４から終了点４５８に分岐する。プロセスが終了点４５８に到達した場合、ピアは、シンメトリカルＮＡＴの背後にあると結論を下すことができる。逆に、ポート割当てが予測可能である場合、プロセスは判断ブロック４４４から終了点４６０に分岐する。プロセスが終了点４６０に到達した場合、クライアントは、予測可能なポート割当てを用いるシンメトリックＮＡＴまたはシンメトリカルＮＡＴバリアントの背後にあると結論を下すことができる。
【００６５】
逆に、判断ブロック４１６で同じマッピングが検出された場合、プロセスはブロック４１８に分岐する。ブロック４１８では、ピアは、コーンＮＡＴデバイスの背後にあるかどうかテストするためのサブプロセスを開始することができる。そのＮＡＴデバイスのタイプに関するより多くの情報を得るために、ピアは、エコーホップテストを第１のサーバに送り、第２のサーバがそこに接続するのを待つことができる。第２のサーバからの接続がうまく確立された場合には、ピアは、フルコーンＮＡＴデバイスの背後にある。したがって、プロセスは判断ブロック４２０から終了点４５６に分岐し、ここでクライアントは、フルコーンＮＡＴデバイスの背後にあると結論を下すことができる。
【００６６】
逆に、第２のサーバからの内に向かう接続が、タイムアウト間隔の後で受け入れられない場合、プロセスは、判断ブロック４２０からブロック４２２に分岐することができる。ブロック４２２では、ピアは、エコーテストメッセージを第２のサーバに送ることができる。次いで、プロセスは、判断ブロック４２４で、第２のサーバから受け取られたマッピングに基づいて分岐することができる。第２のサーバからのマップされたアドレスおよびポートが第１のサーバからのものと異なる場合には、ＮＡＴは、シンメトリカルＮＡＴと見なすことができる。したがって、プロセスは、上述のように、シンメトリカルＮＡＴに適合して処理するために、判断ブロック４２４をブロック４４２に分岐することができる。
【００６７】
逆に、２つのサーバからのマップされたアドレスおよびポートが同じままである場合、プロセスはブロック４２６に分岐する。ブロック４２６では、ピアは、ポート変更を伴うエコーテストメッセージを第１のサーバに送ることができる。次いで、ピアは、第１のサーバが指定されたポートからそのピアに接続するのを待つことができる。
【００６８】
プロセスは、判断ブロック４２８で、ピアが内に向かう接続をうまく受け入れるかどうかに基づいて、分岐することができる。内に向かう接続が確立された場合、プロセスは終了点４６２に分岐し、ここでピアは、制限付きＮＡＴデバイスの背後にあると結論を下す。そうでない場合には、プロセスは、ブロック４２８から終了点４６４に分岐し、ここでピアは、ポート制限付きＮＡＴデバイスの背後にあると結論を下す。
【００６９】
識別されたＮＡＴデバイスのタイプによって、通信のフォーマットを決めることができる。ＮＡＴがポート制限付きである場合、ピアは、そのピアに対する内に向かう接続を確立することができるかどうか確かめるために、そのピアとサーバが同時に互いに接続するように構成することができるように、特別なメッセージをサーバに送ることができる。確立された内に向かう接続は、ポート制限付きＮＡＴが、ＴＣＰ接続を使用してトラバース可能であることを示す。
【００７０】
ＮＡＴがシンメトリカルＮＡＴまたはシンメトリカルバリアントであることが見出された場合、ピアは、順次ローカルポートを用いてサーバに対して一連のエコーテストを実行することができる。これらのエコーテストからのマップされた外部ポートを解析し、ＮＡＴがその次のポートを、小さな範囲内で割り当てるか、それとも予測可能な形で割り当てるか判定することになる。ポート番号が、予測できるように、または小さな増分で割り当てられる場合には、そのＮＡＴは、決定的ポート割当てを用いるシンメトリカルＮＡＴとして分類され、そうでない場合には、非決定的ポート割当てを用いるシンメトリカルＮＡＴである。
【００７１】
ＮＡＴが、決定的ポート割当てを用いるシンメトリカルＮＡＴまたはシンメトリカルバリアントである場合、ピアは、そのピアに対する内に向かう接続を確立することができるかどうか確かめるために、そのピアと第２のサーバが同時に互いに接続するように構成することができるように、特別なメッセージをサーバに送ることができる。この場合、第２のサーバは、ピアのマップされた外部ＩＰアドレスおよび予測されたポートに接続することになる。確立された内に向かう接続は、シンメトリカルＮＡＴがトラバース可能であることを示す。非決定的ポート割当てを用いるシンメトリカルＮＡＴまたはシンメトリカルバリアントは、一般に非トラバース可能と見なされる。
【００７２】
決定的ポート割当てを用いるシンメトリカルＮＡＴまたはシンメトリカルバリアントをトラバースするとき、トラバーサルに成功する機会を改善するために、外部ホストが予測された範囲内のいくつかのポートに同時に接続することが必要である可能性がある。
【００７３】
したがって、図４Ａおよび図４Ｂのプロセスをピアが使用し、それらの接続状況を決定することができる。ピアツーピアコラボレーションシステム内の各ピアは、図４Ａおよび図４Ｂに示されているプロセスと同様のプロセスを実施し、その接続状況を決定することができる。エコーテストに応答してなど、ピアに送られる情報を、ＮＡＴデバイスタイプの決定と組み合わせて使用し、そのピアと通信する機構を識別することができる。各ピアは、この情報をピアツーピアコラボレーションセッション内の他のピアとを共有することができる。図２に示されている実施形態では、この情報は、リレーサーバ１３０’を介して共有することができる。しかし、この情報は、サーバ２３２および２３４を介するものを含めて、任意の他の好適な仕方で共有することができる。
【００７４】
ピアのそれぞれについてのコンダクティビティ（ｃｏｎｄｕｃｔｉｖｉｔｙ）情報がどのように決定され他のピアと共有されるかにかかわらず、ひとたびこの情報がピアツーピアコラボレーションセッション内のピアにとって使用可能になったならば、それを使用し、リレーサーバの使用を回避する、他のピアに対するメッセージをアドレス指定する１つまたは複数のモードをサポートすることができる。これらのアドレッシングのモードを単独で、または組み合わせて使用し、メッセージをピアツーピアコラボレーションシステム内のピアにルーティングすることができる。
【００７５】
図５Ａは、ダイレクトアドレッシングモードを示す。図５Ａに示されている構成では、ピア５１０は、ピア５１２に直接アドレス指定される変更メッセージ５１４を生成する。そのようなダイレクトアドレッシングは、ＮＡＴデバイスがピア５１０とピア５１２の間に接続されていないとき、またはピア５１０および５１２が、ピア５１０とピア５１２の間の任意のＮＡＴデバイスをトラバースすることができるＮＡＴトラバース技法を識別したとき使用することができる。
【００７６】
図５Ｂは、他のアドレッシングモードを示す。図５Ｂに示されているシナリオでは、ピア５２０、５２２、５２４が同じ近隣ピア群内にある。ピア５２０は、ピア５２２と接続を確立済みである。次いで、ピア５２２は、ピア５２４と接続を確立している。このシナリオでは、ピア５２０は、変更メッセージ５２６1を開始する。メッセージ５２６1は、ピア５２２にアドレス指定される。
【００７７】
メッセージ５２６1を受け取ったとき、ピア５２２は、転送メッセージ５２６2をピア５２４にアドレス指定する。このようにして、ピア５２０内で生成された変更を、ピア５２２にもピア５２４にも配布することができる。
【００７８】
図５Ｃは、サーバを通って中継されることなしに、変更メッセージを近隣ピア群内の複数のピアに通信することができる他のシナリオを示す。図５Ｃに示されているシナリオでは、ピア５２０、５３２、５３４、５３６が同じ近隣ピア群内にある。ピア５３８もまた、その近隣ピア群内で接続される。
【００７９】
図の実施形態では、ピア５２０が変更メッセージ５４２1を生成する。メッセージ５４２1は、ピア５３８にアドレス指定される。そのようなメッセージを受信したとき、ピア５３８は、ピア５３２にアドレス指定される転送メッセージ５４２2、ピア５３４にアドレス指定される転送メッセージ５４２3、およびピア５３６にアドレス指定される転送メッセージ５４２4を生成する。
【００８０】
図の実施形態では、ピア５３８はスーパーピアとして働くことができ、受信されたメッセージを複数の他のピアに転送する。図の実施形態では、サーバ５４０は、変更メッセージを転送するのに参加していないが、近隣ピア群内のピアの動作を調整することができる。この実施形態では、サーバ５４０は、従来のピアツーピアコラボレーションシステムの場合と同様にリレーサーバであってもよいが、ピアをスーパーピアとして構成するように修正されてもよい。たとえば、リレーサーバ５４０は、各ピアがコラボレーションセッションに加わったとき、そのハードウェア構成についてそのピアにポーリングすることができる。したがって、リレーサーバ５４０は、他のピアデバイスより多くのメッセージトラフィックをピアデバイスが処理することができるはずの帯域幅、メモリ、および他のリソースを有するピアデバイスを識別することを可能にする、ピアデバイスのそれぞれに関する情報を有することができる。したがって、リレーサーバ５２０は、制御メッセージ５４１をピア５３８に送ることができ、スーパーピアとして働くべきであることをピア５３８にシグナリングする。スーパーピアとして指定されたデバイスは、その近隣ピア群内の複数のデバイスと接続を確立しようと試みることができる。
【００８１】
制御メッセージ５４１は、スーパーピアとしてのピア５３８の動作のパラメータを指定するための、任意の好適なタイプの情報を含むことができる。たとえば、制御メッセージ５４１は、スーパーピア５３８が接続を確立すべきピアデバイスの数を識別することができる。しかし、リレーサーバ５４０など制御用サーバと、スーパーピアとして指定されたピアデバイスとの間で交換される特定の情報は、本発明に対する限定ではない。
【００８２】
さらに、リレーサーバ５４０など制御用サーバと、ピア５３８などスーパーピアとして指定されたデバイスとの間の通信は、双方向とすることができる。たとえば、ピアデバイス５３８は、ピア５３８によって処理されるメッセージトラフィックの量に関して、リレーサーバ５４０に情報を提供することができる。そのようなメッセージは、ピア５３８に対する負荷を低減するために、またはネットワーク輻輳の可能性を緩和するために、さらなるスーパーピアが近隣ピア群内に必要とされることをリレーサーバ５４０に伝えることができる。
【００８３】
そのようなメッセージに応答して、リレーサーバ５４０は、近隣ピア群内の別のデバイスをスーパーピアとして指定することができる。しかし、ピアをスーパーピアとして指定することをトリガするタイミングまたはイベントは、本発明に対する限定ではない。たとえば、コラボレーションセッションの開始時に、複数のピアの間で、１つまたは複数のデバイスがスーパーピアとして指定されてもよい。別法として、リレーサーバ５４０など制御用サーバは、ピアツーピアコラボレーションセッションに関する情報を監視し、または他の形で受信し、そのような情報に応答して、１つまたは複数のデバイスをスーパーピアとして指定することができる。
【００８４】
いくつかの実施形態では、リレーサーバは、どのピアがスーパーピア候補になることができるか判断するために、ピアに関する情報（ＣＰＵパワー、メモリ、動作可能時間など）を収集する。リレーサーバは、近隣のピア群に対するトラフィックまたはリソース使用がある閾値を超えたとき、近隣ピア群内のある候補をスーパーピアとして昇格させることができる。たとえば、各ピアが近隣ピア群内のあらゆる他のピアと接続を作成し、したがって完全にメッシュ化された接続性のネットワークを形成する場合には、ピアの数が増えたとき、ピアは、そのリソースを超過し、したがってその近隣ピア群にスーパーピアを割り当てるようにリレーサーバに要求することができる。
【００８５】
スーパーピアが近隣ピア群内で確立されるかどうか、またどのように確立されるかにかかわらず、ルーティングテーブル内に含まれる近隣ピア群に関する情報を使用し、リレーサーバを関与させることなしに変更メッセージを通信するための機構を識別することができる。図３Ａに示されている実施形態では、近隣ピア群に関する情報は、ピアツーピアコラボレーションセッション内の各デバイスによって構築されるルーティングテーブル内に格納される。図６は、デバイスがピアツーピアコラボレーションセッションに加わったとき、そのデバイスがルーティングテーブルを形成することができるプロセスの例を提供する。
【００８６】
図６のプロセスはブロック６１０で始まり、ピアは、そのピアが背後にあるＮＡＴデバイスがあればそのタイプを発見しようと試みる。さらに、ブロック６１０で、ピアは、他のピアデバイスがそのピアにメッセージを向けて送るために使用することができるアドレスを決定する。この情報は、任意の好適な仕方で得ることができる。たとえば、図４Ａおよび図４Ｂに示されているプロセスを使用することができる。
【００８７】
この情報がどのように得られるかにかかわらず、この情報は、他のピアデバイスがそのピアとどのように通信することができるかについて説明するアドレスベクトルを形成するために使用することができる。ブロック６１２では、このアドレスベクトルがピアツーピアセッション内の他のピアと共有される。図の実施形態では、ピアは、アドレスベクトルをリレーサーバに通信することによって、他のピアとそのアドレスベクトルを共有する。リレーサーバは、アドレスベクトルを、コラボレーションセッション内の他のピアすべてに直接、または、コラボレーションセッション内のピアの間での通信を容易にするように構成されている１つまたは複数の他のリレーサーバを介して間接的に通信することができる。
【００８８】
それ自体のアドレスベクトルを得ることに加えて、各ピアは、コラボレーションセッション内の他のピアについてアドレスベクトルを受信する。図の実施形態では、各ピアは、それ自体のリレーサーバからピアツーピアコラボレーションセッション内の他のピアすべてについてアドレスベクトルを受信するしかし、各ピアがコラボレーションセッション内の他のピアのアドレスベクトルを受信する特定の機構は、本発明に対する限定ではなく、任意の好適な機構を使用することができる。
【００８９】
アドレスベクトルに関する情報を受信することに加えて、各ピアは、ピア間ですでに確立されている接続に関する情報を受信することができる。たとえば、図３Ｂに示されているように、ピア３５２Ａは、ピア３５２Ｂと接続３７０1を確立済みである。しかし、たとえピア３５２Ａがピア３５２Ｄと同じ近隣ピア群内にあるにしても、ピア３５２Ａは、ピア３５２Ｄと直接的な接続を確立していない。したがって、図６のプロセスは、直接的な接続を確立済みである他のピアのリストをピアが受信するプロセスブロック６１６を含む。
【００９０】
プロセスは、ブロック６１８に続く。ブロック６１８では、ピアは、任意の好適な機構を使用して、１つまたは複数のピアと接続を確立することができる。たとえば、ブロック６１８での処理は、接続を確立する「ハンドシェイク」プロトコルでのメッセージの交換を含むことができる。交換される特定のメッセージは、ピアを相互接続するネットワークによって使用されるプロトコルによって決まる可能性がある。したがって、接続を確立するための特定の機構は、本発明に対する限定ではない。
【００９１】
接続がどのように確立されるかにかかわらず、ブロック６２０で、ピアは、確立済みである直接的な接続を他のピアと共有することができる。接続に関する情報は、この情報をリレーサーバに、またはピアの直接的な接続を介して提供することによって共有することができる。しかし、そのような情報を共有するために、任意の好適な機構を使用することができる。
【００９２】
この情報が他のピアとどのように共有されるかにかかわらず、プロセスはブロック６２２に進む。ブロック６２２では、ピアは、ルーティングテーブルを構築することができる。ピアは、ブロック６１４で受信された他のピアのアドレスベクトル内に含まれる情報、ブロック６１６で受信された、直接的な接続に関する情報、およびブロック６１８で確立されたそれ自体の接続に関する情報を使用し、近隣ピア群と、これらの近隣ピア群内の相互接続とを識別することができる。この情報は、図３Ｂに描かれているルーティングテーブル３２４など、ルーティングテーブル内で反映させることができる。しかし、任意の好適な機構を使用し、この情報を取り込むことができる。
【００９３】
ピアは、ブロック６２２で構築されたルーティングテーブルを、ピアツーピアコラボレーションシステム内で変更メッセージを通信するために使用することができる。ピアは、ワークスペース内のメンバの変化が検出されるまで引き続きルーティングテーブルを使用することができる。ワークスペース帰属関係の変化が検出されたとき、そのルーティングテーブルはもはや正確でない可能性がある。したがって、ルーティングテーブルを確立する一部またはすべてのプロセスを繰り返し、更新済みルーティングテーブルを構築することができる。したがって、ワークスペース帰属関係またはネットワーク構成の変化が検出されたとき、プロセスは判断ブロック６２４からブロック６１２に分岐する。ルーティングテーブルを構築するプロセスは、ブロック６１２で開始して繰り返され、ピアは、そのルーティングテーブルを最新のまま保つのに必要なステップを実施することになる。
【００９４】
場合によっては、たとえワークスペース帰属関係の変化が検出されなくても、ルーティングテーブルが古くなることがある。たとえば、ピアが別のピアとの接続を失い、したがってピア間の接続を変更する可能性がある。接続は、ネットワーク内の性能問題、過負荷、またはユーザコマンドがピアツーピアネットワーク内のピアに与えられたことなど、いくつかの理由で失われる可能性がある。したがって、ルーティングテーブルは、時々更新される可能性がある。任意の好適な機構を使用し、いつルーティングテーブルを更新するか判定することができる。たとえば、ピアツーピアコラボレーションシステム内のピアすべてが、周期的な間隔でそれらのルーティングテーブルを更新することができる。別法として、ピアツーピアコラボレーションシステム内の任意のデバイスが、コラボレーションシステム内で検知された条件に応答して、他のデバイスにそれらのルーティングテーブルを更新するようにシグナリングすることができる。たとえば、メッセージがピアツーピアから直接送られたときデバイスが多数の通信失敗を経験し、または接続を失い、または新しい接続を確立した場合、そのデバイスは、影響を受けた接続に関する情報を送ることによって、他のデバイスにそれらのルーティングテーブルをリフレッシュするようにシグナリングすることができる。
【００９５】
ピアツーピアコラボレーションセッション内で使用されているルーティングテーブルが古いことがどのように決定されるかにかかわらず、テーブルが古いと決定されたとき、プロセスは判断ブロック６２６からブロック６２８に分岐し、ここでルーティングテーブルを構築するプロセスを繰り返すことができる。たとえば、ピアは、近隣ピア群内の他のピアに対する接続がもはや使用可能でないので、そのルーティングテーブルが古いものであることを検出することができる。ピアは、古いときにそのルーティングテーブルを更新することができる。各ピアがメッセージを送るためにそれ自体のルーティングテーブルを使用するので、各ピアは、最終的に接続が失われたことを検出し、次いで、それに応じてそのルーティングテーブルを更新することになる。互いに接続を失った２つのピアは、それらのネットワーク構成が変化した場合、ＮＡＴ探索用プロセスを通過することができる。接続が、たとえばトラフィック過負荷など性能の理由により失われた場合には、ピアは、負荷がより適切なレベルにあるとき後で接続を再確立するまで待つことができる。
【００９６】
図６に示されているプロセスは、ピアツーピアコラボレーションセッション内のピアのそれぞれが、エッジルーティング技法に従って他のピアと効果的に通信するのに有用なルーティングテーブルを維持することができるように、各ピアで繰り返すことができる。
【００９７】
図７は、ピアが、エッジルーティング技法を使用して他のピアに変更情報をブロードキャストするためにルーティングテーブルを使用することができるプロセスを示す。ブロードキャストするプロセスは、ブロック７１０で始まる。ブロック７１０では、ピアがメッセージを生成する。ブロック７１０で生成されるメッセージは、既知のピアツーピアコラボレーションシステムによって使用されるフォーマットの変更メッセージとすることができる。しかし、メッセージのタイプおよびフォーマットは、本発明に対する限定ではない。
【００９８】
図７の例では、ピアツーピアコラボレーションシステム内のピアすべてにブロードキャストすることが意図されている。しかし、メッセージのフォーマットおよび受信者ピアの数は、本発明に対する限定ではない。ブロック７１０で生成されるメッセージは、任意の好適なフォーマットにあるものでよく、ピアツーピアコラボレーションセッション内のピアのいずれか１つまたは複数に向けて送ることができる。
【００９９】
メッセージのタイプおよびメッセージの所期の受信者ピアにかかわらず、プロセスは、ループスタート７１２に進む。ループスタート７１２は、ブロック７１０で生成されたメッセージを受信するピアを含む各近隣ピア群について実施されるプロセスの開始を表す。図６のプロセスに従って構築されたルーティングテーブルを使用して近隣ピア群を識別することができる。しかし、近隣ピア群は、任意の好適な仕方で識別されてもよい。
【０１００】
近隣ピア群がどのように識別されるかにかかわりなく、プロセスはブロック７１４に続く。ブロック７１４では、選択された近隣ピア群について、１つまたは複数のスパニングツリーが構築される。各スパニングツリーは、ブロック７１０で生成されたメッセージを受信することが意図された近隣ピア群内のピアすべてをアドレス指定することができる配布経路を定義する。たとえば、２つの可能なスパニングツリーを、近隣ピア群３５０（図３Ｂ）について構築することができる。近隣ピア群３５０内のピアのすべてに到達するためには、クライアント３５２Ｂおよび３５２Ｃに転送するためにメッセージをピア３５２Ａに向けて送ることができ、クライアント３５２Ｃがピア３５２Ａから受信したメッセージをピア３５２Ｂに転送する。逆に、スパニングツリーは、ピア３５２Ａがメッセージをピア３５２Ｂに送信することによって構築することができ、ピア３５２Ｂは、そのメッセージをピア３５２Ｃに転送することになる。次いで、ピア３５２Ｄは、ピア３５２Ｃによって転送されるそのメッセージを受信することができる。したがって、図３Ｂの単純化された例では、ネットワーク３５０について２つのスパニングツリーが可能である。より複雑なピア間の相互接続を有するより多くのピアを含む近隣ピア群については、３つ以上のスパニングツリーを識別することができる。ステップ７１４でスパニングツリーが識別される機構は、本発明にとってクリティカルなものではない。しかし、いくつかの実施形態では、ピアによって維持されるルーティングテーブルは有向グラフと見なすことができ、その場合、有向グラフ全体にわたってスパニングツリーを構築するための既知のアルゴリズムを使用することができる。
【０１０１】
これらのスパニングツリーがどのように構築されるかにかかわらず、プロセスはブロック７１６に進む。ブロック７１６では、ブロック７１４で構築されたあるスパニングツリーが選択される。図の実施形態では、この選択は、最も低い「コスト」に基づくものである。この文脈では、「コスト」は、ピアツーピアコラボレーションシステムの性能特性を示す任意のメトリックまたは複数のメトリックの使用を表すことができる。たとえば、他のスパニングツリーに比べて、最も少ない回数でメッセージが転送されることを必要とするスパニングツリーが、最も低コストのスパニングツリーとして選択されてもよい。別法として、輻輳しているノード群を通って転送されるメッセージの数が最も少なくなるスパニングツリーが最も低コストのスパニングツリーとして選択されてもよい。しかし、任意の好適なメトリックを、ブロック７１６でのコストの指示として使用することができる。
【０１０２】
スパニングツリーがどのように選択されるかにかかわらず、プロセスは判断ブロック７１８に続く。判断ブロック７１８では、ループスタート７１２で選択された近隣ピア群に図７のプロセスを実行するピアからの直接的な接続が到達することができるかどうかに応じて、プロセスが分岐する。図の実施形態では、判断ブロック７１８でのチェックを実施するための単純な方法は、選択された近隣ピア群に開始ピアが属するかどうか判定することである。それ自体の近隣ピア群である場合、開始ピアは、それ自体をルートとしてスパニングツリーを作成し、次いで、変更メッセージをそのスパニングツリーに沿ってブロードキャストすることができる。
【０１０３】
選択された近隣ピア群に直接到達することができる場合、プロセスはブロック７２０に分岐する。ブロック７２０では、選択されたスパニングツリーのルートノードを形成するピアに、メッセージが直接送られる。逆に、選択された近隣ピア群に開始ピアが属さない場合、プロセスは判断ブロック７１８からブロック７４０に分岐する。ブロック７４０では、メッセージは、図７のプロセスを実施するピアのホームリレーに送られる。メッセージは、従来のピアツーピアコラボレーションシステム内のピアのホームリレーにメッセージが送られる同じ方法でホームリレーに送られてもよい。しかし、任意の好適な機構を使用し、ブロック７４０での処理を実施することができる。
【０１０４】
ブロック７４２では、ホームリレーは、選択されたスパニングツリーのルートノードにメッセージを転送する。メッセージは、従来のピアツーピアコラボレーションシステムの場合と同様に、ホームリレーによって転送されてもよい。メッセージの転送は、選択されたスパニングツリーのルートノードとして働くピアにメッセージを直接送ることによって実施することができる。別法として、メッセージは、スパニングツリーのルートノードであるピアと通信することができるリレーサーバに到達する前に、１つまたは複数のリレーサーバを経て転送されてもよい。
【０１０５】
メッセージがルートノードに、ブロック７２０で直接送られるか、それともブロック７４２で１つまたは複数のリレーサーバを介して間接的に送られるかにかかわらず、プロセスはブロック７２２に続く。ブロック７２２では、メッセージは、スパニングツリーを通って伝播される。伝播は、ルートノードが直接的な接続を有するノードにメッセージを転送することによって開始することができる。次いで、これらのピアは、ルーティングテーブル内に反映されている直接的な接続を有するスパニングツリー内の他のピアに、メッセージを転送することができる。しかし、メッセージを伝播するための任意の好適な機構を使用することができる。
【０１０６】
判断ブロック７２４では、メッセージを受信することが意図された近隣ピア群内のピアすべてにメッセージが到達したかどうかに応じて、プロセスが分岐する。到達した場合、プロセスは判断ブロック７３２に分岐し、ここでプロセスは、それ以上の近隣ピア群がまだ処理されずに残っているかどうかに応じてさらに分岐する。残っている場合、プロセスはループスタート７１２に分岐して戻り、ここで処理が次の近隣ピア群に対して繰り返される。逆に、近隣ピア群が残っていない場合、処理は終了する。
【０１０７】
しかし、送信が成功しなかった場合、プロセスはブロック７３０に分岐し、ここでメッセージを再送信することができる。最初のメッセージと同じ仕方でメッセージを再送信することも、異なるルーティング経路を選択し、メッセージをその宛先ピアに送ることもできる。しかし、メッセージを受信しなかったピアにメッセージを送るために複数のアベニュー（ａｖｅｎｕｅ）が可能である場合、再送信したとき異なるアベニューを試すことができる。アベニューは、任意の好適な順序で試すことができる。しかし、図の実施形態では、リレーサーバに対する負荷を低減する努力を反映して、リレーサーバを使用する再送信を、最後の手段として試すことができる。
【０１０８】
成功する送信が行われる機構にかかわらず、プロセスは判断ブロック７３２に進み、ここでプロセスは、次の近隣ピア群があればそれについて繰り返されることになり、または終了することになる。
【０１０９】
上述のように、他のピアに直接アドレス指定されて送信されるピアツーピアコラボレーションシステム内のメッセージの量を増大することができ、それによりリレーサーバに対する負荷を低減することができ、より低コストかつ／またはより効果的なピアツーピアコラボレーションシステムが可能になる。
【０１１０】
このように本発明の少なくとも１つの実施形態のいくつかの態様について述べたが、様々な改変、修正、および改良を当業者なら容易に思いつくであろう。
【０１１１】
そのような改変、修正、および改良は、本開示の一部とするものとし、本発明の精神および範囲内にあるものとする。したがって、前述の説明および図面は、例にすぎない。
【０１１２】
本発明の上述の実施形態は、多数の仕方のいくつかで実施することができる。たとえば、これらの実施形態は、ハードウェア、ソフトウェア、またはそれらの組合せを使用して実施することができる。ソフトウェアで実施されるとき、そのソフトウェアコードは、単一のコンピュータ内に設けられるか、それとも複数のコンピュータ間で分散されるかにかかわらず、任意の好適なプロセッサまたはプロセッサの集まりで実行することができる。
【０１１３】
さらに、コンピュータは、ラックマウント型コンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータなど、いくつかの形態のいずれかで実施することができる。さらに、コンピュータは、携帯情報端末（ＰＤＡ）、スマートフォン、または任意の他の好適な可搬型または固定型の電子デバイスを含めて、一般にコンピュータと見なされないが適切な処理能力を有するデバイスに埋め込まれていてもよい。
【０１１４】
また、コンピュータは、１つまたは複数の入出力デバイスを有することができる。これらのデバイスは、とりわけ、ユーザインターフェースを提示するために使用することができる。ユーザインターフェースを提供するために使用することができる出力デバイスの例には、出力を視覚的に提示するためのプリンタまたはディスプレイ画面や、出力を聞こえるように提示するためのスピーカまたは他の音声生成デバイスが含まれる。ユーザインターフェース用に使用することができる入力デバイスの例には、キーボードや、マウス、タッチパッド、デジタイジングタブレットなどポインティングデバイスが含まれる。別の例として、コンピュータは、音声認識を介して、または他の可聴フォーマットで入力情報を受け取ることができる。
【０１１５】
そのようなコンピュータは、ローカルエリアネットワーク、または企業ネットワークもしくはインターネットなどワイドエリアネットワークとして、を含めて任意の好適な形態にある１つまたは複数のネットワークによって相互接続されてもよい。そのようなネットワークは、任意の好適な技術に基づくことができ、任意の好適なプロトコルに従って動作することができ、無線ネットワーク、有線ネットワーク、または光ファイバネットワークを含むことができる。
【０１１６】
また、本明細書で概説されている様々な方法またはプロセスは、様々なオペレーティングシステムまたはプラットフォームのいずれか１つを使用する１つまたは複数のプロセッサ上で実行可能なソフトウェアとしてコード化することができる。さらに、そのようなソフトウェアは、いくつかの好適なプログラミング言語および／または従来のプログラミングツールもしくはスクリプティングツールのいずれかを使用して記述することができ、また、実行可能な機械語、またはあるフレームワークもしくは仮想機械上で実行可能な中間コードとしてコンパイルすることもできる。
【０１１７】
これに関して、本発明は、１つまたは複数のコンピュータまたは他のプロセッサ上で実行されたとき、上記で論じた本発明の様々な実施形態を実施する方法を実施する１つまたは複数のプログラムで符号化されたコンピュータ可読媒体（または複数のコンピュータ可読媒体）（たとえば、コンピュータメモリ、１つまたは複数のフロッピディスク、コンパクトディスク、光ディスク、磁気テープ、フラッシュメモリ、フィールドプログラマブルゲートアレイ内の回路構成、または他の半導体デバイスなど）として実施することができる。コンピュータ可読媒体または複数の媒体は、それらに格納されたプログラムまたは複数のプログラムを１つまたは複数の相異なるコンピュータもしくは他のプロセッサ上にロードし、上記で論じた本発明の様々な態様を実施することができるように、トランスポート可能とすることができる。
【０１１８】
本明細書では、「プログラム」または「ソフトウェア」という用語を使用し、上記で論じた本発明の様々な態様を実施するようにコンピュータまたは他のプロセッサをプログラムするために使用することができる任意のタイプのコンピュータコードまたはコンピュータ実行可能命令のセットを指す。さらに、この実施形態の一態様によれば、実行されたとき本発明の方法を実施する１つまたは複数のコンピュータプログラムは、単一のコンピュータまたはプロセッサ上に常駐している必要がなく、いくつかの相異なるコンピュータまたはプロセッサ間でモジュール式で分散させ、本発明の様々な態様を実施することができることを理解されたい。
【０１１９】
コンピュータ実行可能命令は、１つまたは複数のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなど多数の形態にあることができる。一般に、プログラムモジュールは、特定のタスクを実施する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。一般に、プログラムモジュールの機能は、様々な実施形態で望まれるように、組み合わせる、または分散させることができる。
【０１２０】
本発明の様々な態様は、単独で、または組み合わせて、または前述の実施形態において具体的に論じられていない様々な構成で使用することができ、したがって、その応用例において、前述の説明に述べられている、または図面に示されている詳細および構成に限定されない。たとえば、一実施形態に述べられている態様は、他の実施形態で述べられている態様と任意の仕方で組み合わせることができる。
【０１２１】
請求項要素を修飾するための、特許請求の範囲における「第１」「第２」「第３」など序数詞の使用は、それ自体、どんな優先順位、序列、またはある請求項要素の、別の要素にまさる順序、もしくは方法の動作が実施される時間的順序を暗示してはおらず、請求項要素を区別するために、ある名前を有するある請求項要素を、（序数詞の使用を除いて）同じ名前を有する別の要素と区別するようにラベルとして使用されるにすぎない。
【０１２２】
また、本明細書で使用される言葉遣いおよび術語は、説明のためのものであり、限定するものと見なすべきではない。本明細書における「ｉｎｃｌｕｄｉｎｇ（含む）」「ｃｏｍｐｒｉｓｉｎｇ（備える、含む）」「ｈａｖｉｎｇ（有する）」「ｃｏｎｔａｉｎｉｎｇ（含む）」「ｉｎｖｏｌｖｉｎｇ（含む、関与させる、必要とする）」およびそれらの変形形態は、その後にリストされている項目およびそれらの均等物、ならびに追加の項目を包含するものとする。
【図１】
2010527561.tif 000003
【図２】
2010527561.tif 000004
【図３Ａ】
2010527561.tif 000005
【図３Ｂ】
2010527561.tif 000006
【図４Ａ】
2010527561.tif 000007
【図４Ｂ】
2010527561.tif 000008
【図５Ａ】
2010527561.tif 000009
【図５Ｂ】
2010527561.tif 000010
【図５Ｃ】
2010527561.tif 000011
【図６】
2010527561.tif 000012
【図７】
2010527561.tif 000013
【国際調査報告】
2010527561.tif 000014
2010527561.tif 000015