(57)【要約】【課題】ネットワークの状態に関わらずにＰ２Ｐでのファイル送受信を成功させられるようにする。【解決手段】要求ノードと提供ノードとの間の経路にボトルネックが発生した場合、提供ノードによって、そのボトルネック部分よりも提供ノード側にあるＰ２Ｐノードが中継ノードとして決定される。提供ノードは、中継ノードにファイルを送信し、ファイル送信に成功したならば、その中継ノードに、要求ノードへのファイル送信を依頼する。中継ノードは、受信したファイルを一時格納し、提供ノードからファイル送信の依頼を受けたならば、ボトルネックが解消された場合に、その一時格納したファイルを要求ノードに送信する。【選択図】図５
2008052340.tif 000002
【特許請求の範囲】
【請求項１】
下位レイヤのネットワークでの通信を制御する下位レイヤ通信プログラムが実行されるコンピュータに、前記下位レイヤのネットワークの上位に重ねられたオーバーレイネットワークでＰ２Ｐのファイル送受信を実行させるコンピュータプログラムであって、
（Ａ）ユーザ所望のファイルの指定を受けた場合、
（ａ１）該ユーザ所望のファイルを保持しているＰ２Ｐノードに、該ユーザ所望のファイルを送信することのファイル送信要求を送信するステップと、
（ａ２）前記ファイル送信要求に対応した前記ユーザ所望のファイルを受信するステップと、
（Ｂ）ファイルを要求するＰ２Ｐノードである第一の他のコンピュータから、ファイル送信要求を受信した場合、
（ｂ１）前記オーバーレイネットワークで前記コンピュータとＰ２Ｐの通信が可能な複数のＰ２Ｐノードの中から、前記下位レイヤ通信プログラムとの対話により、前記下位レイヤネットワークでの自ノードと前記第一の他のコンピュータとの間の経路におけるボトルネック部分よりも自ノード側に存在するＰ２Ｐノードを特定し、該特定したＰ２Ｐノードを、自ノードから前記第一の他のコンピュータへのファイル送信を中継する中継ノードに決定するステップと、
（ｂ２）前記決定された中継ノードである第二の他のコンピュータに、前記受信したファイル送信要求に対応したファイルを送信するステップと、
（ｂ３）前記第一の他のコンピュータを表す要求ノード情報を、前記第二の他のコンピュータに通知するステップと、
（Ｃ）或るファイルを指定したファイル送信要求を送信してない場合、
（ｃ１）Ｐ２Ｐノードである第三の他のコンピュータから前記或るファイルを受信するステップと、
（ｃ２）前記受信した或るファイルを前記コンピュータの記憶資源に格納するステップと、
（ｃ３）前記第三の他のコンピュータから、前記或るファイルを要求したＰ２Ｐノードを表す要求ノード情報を受信するステップと、
（ｃ４）前記要求ノード情報が表すＰ２Ｐノードである第四の他のコンピュータと自ノードとの間のボトルネックが解消された場合に、前記格納した或るファイルを、前記第四の他のコンピュータに送信するステップと
を前記コンピュータに実行させる、
コンピュータプログラム。
【請求項２】
前記（ｂ１）では、前記オーバーレイネットワークでＰ２Ｐに従う第一の問合せを送信し、該第一の問合せに対する第一の応答を受信し、該第一の応答の返信元のＰ２Ｐノードに対して、前記下位レイヤの通信プロトコルに従う第二の問合せを前記下位レイヤ通信プログラムに送信させ、該第二の問合せに対する第二の応答を受信した前記下位レイヤ通信プログラムから該第二の応答に関する情報を取得し、該情報が所定の条件を満たす場合に、前記第二の応答を返信したＰ２Ｐノードを中継ノード候補に決定し、該決定した中継ノード候補の中から、前記中継ノードを決定する、
請求項１記載のコンピュータプログラム。
【請求項３】
前記オーバーレイネットワークに参加した場合に、前記オーバーレイネットワークでＰ２Ｐに従う第一の問合せを送信し、該第一の問合せに対する第一の応答を受信し、該第一の応答の返信元のＰ２Ｐノードに対して、前記下位レイヤの通信プロトコルに従う第二の問合せを前記下位レイヤ通信プログラムに送信させ、該第二の問合せに対する第二の応答を受信した前記下位レイヤ通信プログラムから該第二の応答に関する情報を取得し、該情報が所定の条件を満たす場合に、前記第二の応答を返信したＰ２Ｐノードを中継ノード候補に決定し、該決定した中継ノード候補に関する情報を記録したリストを、前記コンピュータの記憶資源に格納するステップ、
を更に前記コンピュータに実行させる請求項１記載のコンピュータプログラム。
【請求項４】
前記（ｂ１）では、前記第二の応答に関する情報として、該第二の応答の返信元と自ノードとの前記下位レイヤネットワークでの経路の距離、該経路での帯域、前記第二の問合せが送信されてから前記第二の応答を受信するまでの応答時間長のうちの少なくとも一つを取得する、
請求項２記載のコンピュータプログラム。
【請求項５】
前記第一の応答には、該第一の応答を返信したＰ２Ｐノードの能力に関する能力情報が含まれており、
前記（ｂ１）では、Ｐ２Ｐノードの能力情報と、前記ボトルネック部分と各中継ノード候補との間の余剰帯域とのうちの少なくとも一つに基づいて、前記中継ノードを決定する、
請求項２記載のコンピュータプログラム。
【請求項６】
前記能力情報には、該能力情報を送信したＰ２ＰノードのＣＰＵ使用率と空き記憶容量とが含まれており、
前記（ｂ１）では、前記ＣＰＵ使用率が第一の値以下で前記空き記憶容量が第二の値以上の中継ノード候補を前記中継ノードに決定する、
請求項５記載のコンピュータプログラム。
【請求項７】
前記（ｂ１）では、前記ＣＰＵ使用率が高く前記空き記憶容量が多い第一の中継ノード候補と、該第一の中継ノード候補に比して前記ＣＰＵ使用率が低く前記空き記憶容量が少ない第二の中継ノード候補とのうち、前記第一の中継ノード候補を前記中継ノードに決定する、
請求項５又は６記載のコンピュータプログラム。
【請求項８】
新たなステップ（ｃ５）として、前記送信したファイルを前記コンピュータの記憶資源から削除するステップを前記コンピュータに更に実行させる、
請求項１記載のコンピュータプログラム。
【請求項９】
前記受信したファイル送信要求に応答して前記第一の他のコンピュータにファイルを送信するのに失敗した場合に、前記（ｂ１）を実行する、
請求項１記載のコンピュータプログラム。
【請求項１０】
下位レイヤのネットワークの上位に重ねられたオーバーレイネットワークでのＰ２Ｐのファイル送受信方法において、
ファイルを要求する要求ノードが、該要求ノードのユーザ所望のファイルを保持しているＰ２Ｐノードに、該ユーザ所望のファイルを送信することのファイル送信要求を送信するステップと、
前記ファイル送信要求を受信したＰ２Ｐノードである提供ノードが、前記下位レイヤネットワークでの該提供ノードと前記要求ノードとの間の経路におけるボトルネック部分よりも前記提供ノード側に存在するＰ２Ｐノードを特定し、該特定したＰ２Ｐノードを中継ノードに決定するステップと、
前記提供ノードが、前記中継ノードに前記ユーザ所望のファイルを送信するステップと、
前記提供ノードが、前記要求ノードを表す要求ノード情報を前記中継ノードに通知するステップと、
前記中継ノードが、前記提供ノードから前記ユーザ所望のファイルを受信するステップと、
前記中継ノードが、前記受信した所望のファイルを該中継ノードの記憶資源に格納するステップと、
前記中継ノードが、該中継ノードと前記要求ノードとの間のボトルネックが解消された場合に、前記格納した前記ユーザ所望のファイルを、前記提供ノードから通知された前記要求ノード情報が表す前記要求ノードに送信するステップと、
前記要求ノードが、前記中継ノードから前記ユーザ所望のファイルを受信するステップと
を有するファイル送受信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ピア・ツー・ピアのファイル送受信の技術に関する。
【背景技術】
【０００２】
例えば、非特許文献１に開示されているような、ＩＰマルチキャストによるデータ配信技術が知られている。ＩＰマルチキャストは、テレビ放送のように多くの端末に一斉にデータを配信することが可能である。しかし、その反面、端末間で自由に大きなデータを交換する使い方には向いていない。なぜなら、ＩＰマルチキャストでは、送信と受信の同時性が要求され、且つ、データを中継するルータには、データキャッシュ用のメモリ（一次記憶装置）があるものの大サイズのデータを記憶できるような二次記憶装置（例えばハードディスク）がないため、大きなデータを長時間保存することができないためである。
【０００３】
そこで、端末間で自由に大きなデータを交換するための方法として、ピア・ツー・ピア（以下、「Ｐ２Ｐ」と表記）でファイルを送受信する方法が考えられる。Ｐ２Ｐでのファイル送受信は、例えば非特許文献２に開示されているオーバーレイネットワークで行われる。オーバーレイネットワークという言葉は、一般に、下位レイヤを隠蔽するためにレイヤを重ねる操作、または、重なった場合の上位レイヤを指すが、本明細書では、後者の意味で用いることにする。オーバーレイネットワーク（以下、Ｐ２Ｐネットワーク）でのＰ２Ｐのファイル送受信であれば、
下位レイヤのネットワークを意識せずに（例えば、ＩＰネットワークに存在するセグメントを意識せずに）、ユーザは、アップロードやダウンロードの相手方を自由に取捨選択できる。
【０００４】
【非特許文献１】http://www.jpo.go.jp/shiryou/s_sonota/hyoujun_gijutsu/bidirectional_video/18_2.htm
【非特許文献２】http://japan.internet.com/column/webtech/20050303/8.html
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、一般に、Ｐ２Ｐのファイル送受信を行う端末には、経路についての具体的な情報が保持されない。また、Ｐ２Ｐネットワークの各端末（以下、Ｐ２Ｐノード）は常に電源オン状態になっているとは限らないので、所定の応答を返さなくなったＰ２ＰノードをそのＰ２Ｐネットワークから直ちに排除するのが一般的である。
【０００６】
また、Ｐ２Ｐでのファイル送受信を行うための条件の一つとして、ＩＰマルチキャスト等のように、或る程度以上の密度でＰ２Ｐノードが存在することが必要である。密度が小さいと、問合せに対する応答が得られにくく、そのため、ファイルを入手できる可能性が低くなるためである。具体的には、下位レイヤのネットワークでは、ＴＴＬ（Time To Live）を含めた問合せ（例えばpingの送信）が行われ、或る程度以上の密度が無いと、そのＴＴＬが所定値（典型的にはゼロ）に減るまでに受信できるＰ２Ｐノードの数が少なくなってしまうためである。
【０００７】
さらに、Ｐ２Ｐノードの密度が或る程度以上に高くても、ネットワークの状態が不安定であると（例えば、帯域が不十分であると）、その密度が低いのと同じ状態になる。具体的には、遠方のＰ２Ｐノードとは、ネットワーク帯域を継続して確保できないことがあり、そのために、ファイルの送受信に失敗することがある。
【０００８】
以上のように、従来のＰ２Ｐは、通信経路を維持する仕組みが脆弱なので、恒常的な通信に向いていない。
【０００９】
従って、本発明の目的は、ネットワークの状態に関わらずにＰ２Ｐでのファイル送受信を成功させられるようにすることにある。
【課題を解決するための手段】
【００１０】
本発明に従うコンピュータプログラムは、下位レイヤのネットワークでの通信を制御する下位レイヤ通信プログラムが実行されるコンピュータに、前記下位レイヤのネットワークの上位に重ねられたオーバーレイネットワークでＰ２Ｐのファイル送受信を実行させるコンピュータプログラムである。このコンピュータプログラムは、前記オーバーレイネットワークでの前記ファイル送受信において、前記コンピュータを、以下の（１）乃至（３）のノード、
（１）ファイルを要求する要求ノード、
（２）ファイルを提供する提供ノード、
（３）提供ノードから要求ノードへのファイル送信を中継する中継ノード、
のいずれのノードとしても機能させることができるように構成されている。具体的には、以下の通りである。
【００１１】
（Ａ）このコンピュータプログラムは、ユーザ所望のファイルの指定を受けた場合、
（ａ１）該ユーザ所望のファイルを保持しているＰ２Ｐノードに、該ユーザ所望のファイルを送信することのファイル送信要求を送信するステップと、
（ａ２）前記ファイル送信要求に対応した前記ユーザ所望のファイルを受信するステップと
を前記コンピュータに実行させる。具体的には、例えば、ユーザ所望のファイルを保持しているか否かのファイル有無問合せを送信するステップと、前記ファイル有無問合せを受信した複数のＰ２Ｐノードから、それぞれ、前記ユーザ所望のファイルの有無を含んだ複数のファイル有無応答を受信するステップと、前記ユーザ所望のファイルを保持しているＰ２Ｐノードを前記複数のファイル有無応答から特定し、該特定したＰ２Ｐノードに、前記ファイル送信要求を送信するステップとを前記コンピュータに実行させることができる。
【００１２】
（Ｂ）また、このコンピュータプログラムは、ファイルを要求するＰ２Ｐノードである第一の他のコンピュータから、ファイル送信要求を受信した場合、
（ｂ１）前記オーバーレイネットワークで前記コンピュータとＰ２Ｐの通信が可能な複数のＰ２Ｐノードの中から、前記下位レイヤ通信プログラムとの対話により、前記下位レイヤネットワークでの自ノード（前記コンピュータ）と前記第一の他のコンピュータとの間の経路におけるボトルネック部分よりも自ノード側に存在するＰ２Ｐノードを特定し、該特定したＰ２Ｐノードを、自ノードから前記第一の他のコンピュータへのファイル送信を中継する中継ノードに決定するステップと、
（ｂ２）前記決定した中継ノードである第二の他のコンピュータに、前記受信したファイル送信要求に対応したファイルを送信するステップと、
（ｂ３）前記第一の他のコンピュータを表す要求ノード情報を、前記第二の他のコンピュータに通知するステップと
を前記コンピュータに実行させる。前記下位レイヤ通信プログラムとの対話では、例えば、前記複数のＰ２Ｐノードにそれぞれ対応した複数の識別子（例えばホスト名）を前記下位レイヤ通信プログラムに通知し、該複数のＰ２Ｐノードのうち、前記ボトルネック部分よりも自ノード側に存在するＰ２Ｐノードを前記下位レイヤ通信プログラムに調べさせ、該調べた結果として、自ノード側に存在するＰ２Ｐノードの識別子を受けることにより、前記ボトルネック部分よりも自ノード側に存在するＰ２Ｐノードを特定することができる。この方法に代えて、他の方法により、該Ｐ２Ｐノードの特定が行われても良い。例えば、前記下位レイヤ通信プログラムから、前記ボトルネック部分よりも自ノード側に存在する全てのノードにそれぞれ対応した全ての識別子を取得し、取得した全ての識別子のうち、前記複数のＰ２Ｐノードのそれぞれの識別子に対応する識別子を特定することにより、前記ボトルネック部分よりも自ノード側に存在するＰ２Ｐノードを特定してもよい。
【００１３】
（Ｃ）また、このコンピュータプログラムは、或るファイルを指定したファイル送信要求を送信してない場合、
（ｃ１）Ｐ２Ｐノードである第三の他のコンピュータから前記或るファイルを受信するステップと、
（ｃ２）前記受信した或るファイルを前記コンピュータの記憶資源に格納するステップと、
（ｃ３）前記第三の他のコンピュータから、前記或るファイルを要求したＰ２Ｐノードを表す要求ノード情報を受信するステップと、
（ｃ４）前記要求ノード情報が表すＰ２Ｐノードである第四の他のコンピュータと自ノードとの間のボトルネックが解消された場合に、前記格納した或るファイルを、前記第四の他のコンピュータに送信するステップと
を前記コンピュータに実行させる。Ｐ２Ｐノードは、ＷＥＢサーバ等と違って、ユーザによって電源が落とされる可能性があるので、例えば、このコンピュータプログラムは、自分の周辺のＰ２Ｐノードが稼動しているか否かを確認するために、定期的に又は不定期的に、問い合わせ（例えばping）を発行することができる。その問い合わせに対する応答（例えばpong）が返って来ない場合（例えば、応答が全く返って来ない場合、或いは、返って来たものの一定時間内に返って来なかった場合）、応答が返って来ない経路は、ボトルネックということになる。しかし、応答が返って来れば（例えば、全く返って来なかった応答がやっと返って来れば、或いは、問い合わせを送信してから一定時間内に応答が返って来るようになれば）、ボトルネックが解消されたということになる。従って、ここで、例えば、前記「ボトルネックが解消された場合」とは、定期的に又は不定期的に前記第四の他のコンピュータに送信した問い合わせに対する応答を前記第四の他のコンピュータから受信した場合（例えば問い合わせを送信してから一定時間内に受信した場合）である。送信する問い合わせは、Ｐ２Ｐに従う問い合わせであっても良いし、下位レイヤの通信プロトコルに従う問い合わせであってもよい。
【００１４】
このコンピュータプログラムによれば、Ｐ２Ｐでのファイル送受信において、このコンピュータプログラムでは認識されていない下位レイヤネットワークでボトルネックが生じた場合、そのボトルネック部分よりも提供ノード（ファイルを提供するＰ２Ｐノード）側に存在するＰ２Ｐノードが特定され、そのＰ２Ｐノードを、中継ノードとして、その提供ノードから中継ノードにファイルが送信され一時格納される。そして、そのボトルネックが解消した場合に、その中継ノードから要求ノード（ファイルを要求したＰ２Ｐノード）に、その一時格納されたファイルが送信される。これにより、ネットワークの状態に関わらずに、Ｐ２Ｐでのファイル送受信を成功させることができる。
【００１５】
なお、前記（ｃ１）及び（ｃ２）と前記（ｃ３）とは、どちらが先であっても良い。
【００１６】
第一の実施態様では、前記（ｂ１）では、前記オーバーレイネットワークでＰ２Ｐに従う第一の問合せを送信し、該第一の問合せに対する第一の応答を受信し、該第一の応答の返信元のＰ２Ｐノードに対して、前記下位レイヤの通信プロトコルに従う第二の問合せを前記下位レイヤ通信プログラムに送信させ、該第二の問合せに対する第二の応答を受信した前記下位レイヤ通信プログラムから該第二の応答に関する情報を取得し、該情報が所定の条件を満たす場合に、前記第二の応答を返信したＰ２Ｐノードを中継ノード候補に決定し、該決定した中継ノード候補の中から、前記中継ノードを決定する。
【００１７】
第二の実施態様では、前記オーバーレイネットワークに参加した場合に、前記オーバーレイネットワークでＰ２Ｐに従う第一の問合せを送信し、該第一の問合せに対する第一の応答を受信し、該第一の応答の返信元のＰ２Ｐノードに対して、前記下位レイヤの通信プロトコルに従う第二の問合せを前記下位レイヤ通信プログラムに送信させ、該第二の問合せに対する第二の応答を受信した前記下位レイヤ通信プログラムから該第二の応答に関する情報を取得し、該情報が所定の条件を満たす場合に、前記第二の応答を返信したＰ２Ｐノードを中継ノード候補に決定し、該決定した中継ノード候補に関する情報（例えば各中継ノード候補の識別子）を記録したリストを、前記コンピュータの記憶資源に格納する。前記（ｂ１）において、新たに中継ノード候補が決定された場合、該リストに記録されている情報が、該新たな中継ノード候補に関する情報に更新されてもよい。
【００１８】
第三の実施態様では、前記第一の実施態様において、前記第二の応答に関する情報として、例えば、該第二の応答の返信元と前記コンピュータとの前記下位レイヤネットワークでの経路の距離、該経路での帯域、前記第二の問合せが送信されてから前記第二の応答を受信するまでの応答時間長のうちの少なくとも一つを取得することができる。
【００１９】
第四の実施態様では、前記第一の実施態様において、前記第一の応答には、該第一の応答を返信したＰ２Ｐノードの能力に関する能力情報が含まれている。前記（ｂ１）では、Ｐ２Ｐノードの能力情報と、前記ボトルネック部分と各中継ノード候補との間の余剰帯域とのうちの少なくとも一つに基づいて、前記中継ノードを決定する。
【００２０】
第五の実施態様では、前記第四の実施態様において、前記能力情報には、該能力情報を送信したＰ２ＰノードのＣＰＵ使用率と空き記憶容量とが含まれている。前記（ｂ１）では、前記ＣＰＵ使用率が第一の値以下で前記空き記憶容量が第二の値以上の中継ノード候補を前記中継ノードに決定する。
【００２１】
第六の実施態様では、前記第四又は第五の実施態様において、前記（ｂ１）では、前記ＣＰＵ使用率が高く前記空き記憶容量が多い第一の中継ノード候補と、該第一の中継ノード候補に比して前記ＣＰＵ使用率が低く前記空き記憶容量が少ない第二の中継ノード候補とのうち、前記第一の中継ノード候補を前記中継ノードに決定する。
【００２２】
第七の実施態様では、新たなステップ（ｃ５）として、前記送信したファイルを前記コンピュータの記憶資源から削除するステップを前記コンピュータに更に実行させる。
【００２３】
第八の実施態様では、前記受信したファイル送信要求に応答して前記第一の他のコンピュータにファイルを送信するのに失敗した場合に、前記（ｂ１）を実行する。ここで、ファイルを送信するのに失敗した場合とは、例えば、ファイル送信を開始してから一定時間内に所定の応答を受信しない場合である。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照して、本発明の一実施形態について説明する。以下の説明では、下位レイヤのネットワークは、ＩＰネットワークであり、オーバーレイネットワーク（上位レイヤのネットワーク）は、Ｐ２Ｐのネットワークである。
【００２５】
図１は、本発明の一実施形態の概要の説明図である。
【００２６】
本実施形態では、図１Ａに示すように、Ｐ２Ｐネットワークに、「中継ノード」という新たな概念が導入される。中継ノード（Ａ）とは、Ｐ２Ｐノードの一種であり、提供ノード（Ｙ）からのファイルを一時的に預かり、その一時的に預かったファイルを、要求ノード（Ｘ）に送信するノードである。別の言い方をすれば、中継ノード（Ａ）は、提供ノード（Ｙ）に対して、一時的に要求ノードとなり、一時的に預かったファイルを送信する場合、要求ノード（Ｘ）に対して、一時的に提供ノードとなる。
【００２７】
具体的には、例えば、回線輻輳、回線切断、端末障害などの原因により、要求ノード（Ｘ）と提供ノード（Ｙ）との間の経路にボトルネックが発生した場合、提供ノード（Ｙ）によって、ＩＰネットワークのトポロジーを考慮して、そのボトルネック部分（ボトルネック・パス）の近傍且つそのボトルネック部分よりも提供ノード（Ｙ）側にあるＰ２Ｐノードが中継ノード（Ａ）として決定される。
【００２８】
この場合、提供ノード（Ｙ）において、Ｐ２Ｐネットワークでの通信を制御するコンピュータプログラム（以下、「Ｐ２Ｐアプリケーションプログラム」と言う）からは、送信されたファイルが、中継ノード（Ａ）に届くように見える。一方、ＩＰネットワークでの通信を制御するコンピュータプログラム（以下、「下位レイヤ通信プログラム」と言う）からは、図１Ｂに示すように、中継ノード（Ａ）まで見えるわけではなく、ＩＰネットワークにおける直近のネットワーク中継器、例えばルータまでしか見えない。ＩＰネットワークでは、各ネットワーク中継器によって、提供ノード（Ｙ）から送信されたファイルが中継ノード（Ａ）に届けられる。
【００２９】
提供ノード（Ｙ）は、ファイル送信に成功したならば、中継ノード（Ａ）に、要求ノード（Ｘ）へのファイル送信を依頼する。
【００３０】
中継ノード（Ａ）は、受信したファイルを、自分が有する記憶資源（例えば二次記憶装置）に格納する。そして、中継ノード（Ａ）は、提供ノード（Ｙ）からファイル送信の依頼を受けたならば、上記ボトルネックが解消された場合に、その格納したファイルを要求ノード（Ｘ）に送信する。中継ノード（Ａ）は、送信し終えたならば、そのファイルを記憶資源から消去する。
【００３１】
以上の一連の処理により、ネットワークの状態に関わらずにＰ２Ｐのファイル送受信を成功させることができる。
【００３２】
以下、本実施形態について詳細に説明する。
【００３３】
図２は、Ｐ２Ｐノードのハードウェア構成例を示す。
【００３４】
Ｐ２Ｐノードは、ＩＰネットワークにあるようなルータと異なり、計算機の一種である。Ｐ２Ｐノードは、例えば、ＣＰＵ１０３、入力装置（例えばキーボードやマウス）１０５、表示装置（例えば液晶ディスプレイ）１０６、ＬＡＮ等の通信ネットワークに接続される通信インターフェース装置（Ｉ／Ｆ）１０９、一次記憶装置１０８、及び二次記憶装置１０７を備える。一次記憶装置１０８は、典型的には、メモリであり、ＣＰＵ１０３のワーク領域や送受信されるデータを一時的に記憶するキャッシュ領域が設けられる。それに対し、二次記憶装置１０７は、一次記憶装置１０８よりも多くの記憶容量を有する記憶装置（例えばハードディスク）であり、例えば、ＣＰＵ１０３で実行されるコンピュータプログラムや、送受信され得る多数のファイルを記憶することができる。
【００３５】
二次記憶装置１０７から一次記憶装置１０８にロードされてＣＰＵ１０３で実行されるコンピュータプログラムとして、前述したＰ２Ｐアプリケーションプログラム１１１や下位レイヤ通信プログラム１１３がある。本実施形態では、Ｐ２Ｐアプリケーションプログラム１１１が、中継ノードの候補を決定し、決定した中継ノード候補の中から中継ノードを決定することができるように構成されている。
【００３６】
本実施形態における流れは、例えば、以下の３ステップ、
（１）Ｐ２Ｐネットワークへの参加、
（２）ファイル送信の要求、
（３）中継ノードの選定、
に大別することができる。（１）の時に、中継ノード候補が決定される。（２）の時にも、中継ノード候補が決定され、（３）で、その中継ノード候補の中から中継ノードが選定される。以下、具体的に説明する。
【００３７】
図３は、計算機がＰ２Ｐネットワークに参加する時に行われる処理の流れの一例を示す。
【００３８】
図３Ａに示すように、起動したＰ２Ｐアプリケーションプログラム１１１が、自分の近くにいるＰ２Ｐノードを探す。具体的には、そのＰ２Ｐアプリケーションプログラム１１１は、Ｐ２Ｐプロトコルに従うＰｉｎｇ（以下、Ｐ２Ｐ  Ｐｉｎｇ）を生成して送信する（ステップＳ１１）。そのＰ２Ｐ  Ｐｉｎｇには、ファイル探索の際に含められるファイル識別子（例えばファイル名）のような引数は含められない。そのＰ２Ｐ  Ｐｉｎｇは、下位レイヤ通信プログラム１１３によってＴＴＬが付加されて、ＩＰネットワークに出力される。
【００３９】
その後、Ｐ２Ｐアプリケーションプログラム１１１は、一定時間待つ（Ｓ１２）。その時間内に、Ｐ２Ｐ  Ｐｉｎｇに対する返信（以下、Ｐ２Ｐ  Ｐｏｎｇ）を受信すれば、自分の近くにＰ２Ｐノードが存在することになる。
【００４０】
Ｐ２Ｐアプリケーションプログラム１１１は、一定時間内に各Ｐ２Ｐ  Ｐｏｎｇを受信した場合、各返信元（ピア）と連携する（セッションを確立する）（Ｓ１３）。
【００４１】
続いて、Ｐ２Ｐアプリケーションプログラム１１１は、各Ｐ２Ｐ  Ｐｏｎｇの各返信元に対して、図３Ｂに示す処理を行う。
【００４２】
すなわち、Ｐ２Ｐアプリケーションプログラム１１１は、下位レイヤ通信プログラム１１３に、ＩＰ（インターネットプロトコル）に従うＰｉｎｇ（以下、ＩＰ  Ｐｉｎｇ）を送信させる（Ｓ２１）。ＩＰ  Ｐｉｎｇは、前述したＰ２Ｐ  Ｐｉｎｇよりも高度であり、例えば、ＩＰ  Ｐｉｎｇに対する返信（以下、ＩＰ  Ｐｏｎｇ）から、返信元からのルータのホップ数（以下、ルータ間距離）、どれぐらいの帯域があるか等がわかる。また、このＳ２１では、ＩＰ  Ｐｉｎｇの送信先としてＩＰアドレスが指定されるが、指定されるＩＰアドレスは、Ｐ２Ｐ  Ｐｏｎｇに含まれているＩＰアドレス、或いは、Ｐ２Ｐ  Ｐｏｎｇに含まれているホスト名からＤＮＳ（ドメイン・ネーム・サービス）等により特定されたＩＰアドレスである。
【００４３】
Ｓ２１の後、Ｐ２Ｐアプリケーションプログラム１１１は、一定時間待つ（Ｓ２２）。
【００４４】
Ｐ２Ｐアプリケーションプログラム１１１は、下位レイヤ通信プログラム１１３がＩＰ  Ｐｏｎｇを受信した場合、所定種類の情報を下位レイヤ通信プログラム１１３から取得する（Ｓ２３）。具体的には、ルータ間距離、返信元との間の経路における帯域、ＩＰ  Ｐｏｎｇの応答時間（ＩＰ  Ｐｉｎｇを送信してからＩＰ  Ｐｏｎｇを受信するまでの時間長）を取得する。
【００４５】
Ｐ２Ｐアプリケーションプログラム１１１は、取得したルータ間距離、帯域及び応答時間長が所定の条件を満たさない場合に、そのＩＰ  Ｐｏｎｇの返信元を中継ノード候補としないが、その所定の条件を満たせば、そのＩＰ  Ｐｏｎｇの返信元を中継ノード候補に決定する（Ｓ２４）。Ｐ２Ｐアプリケーションプログラム１１１は、中継ノード候補とした各ノードの識別子（例えばホスト名）を記載したリストを、一次記憶装置１０８或いは二次記憶装置１０７に保存しておくことができる。
【００４６】
この図３の流れを、図４のネットワーク関係図を用いて具体的に説明する。
【００４７】
図４において、上位にあるのが、Ｐ２Ｐネットワークであり、下位にあるのが、ＩＰネットワークである。ＩＰネットワークの図において、●は、何らかのネットワーク中継器（例えば、ルータ、プロキシサーバ或いはファイアウォール）を表しており、楕円は、サブネットワークを表す。
【００４８】
この図４において、例えば、図３Ａで、Ｙが、Ｐ２Ｐネットワークに参加した計算機（Ｐ２Ｐノード）であって、一定時間内に受信したＰ２Ｐ  Ｐｏｎｇの返信元が、Ａ、Ｂ、Ｃ及びＸの４つであったとする。この場合、Ｐ２Ｐアプリケーションプログラム１１１は、Ｙに、４つのＰ２ＰノードＡ、Ｂ、Ｃ及びＸが隣接していると特定することができる。そのため、ＩＰ  Ｐｉｎｇは、それら４つのＰ２ＰノードＡ、Ｂ、Ｃ及びＸに送信される。
【００４９】
図４の下位に示すＩＰネットワークによれば、それら４つのＰ２Ｐノードのうち、Ａ，Ｂ及びＣが、Ｙと同じサブネットワーク内に存在するが、Ｘは、異なるサブネットワークに存在する。このため、それら４つのＰ２Ｐノードのうち、ＸからのＩＰ  Ｐｏｎｇのみが、一定時間内に戻って来ないことがある。この場合、図３ＢのＳ２４において、Ｐ２Ｐアプリケーションプログラム１１１は、Ｐ２ＰノードＸを、中継ノード候補とせず、他のＰ２ＰノードＡ，Ｂ及びＣを、中継ノード候補に決定する。
【００５０】
さて、Ｐ２Ｐネットワークに参加した計算機（Ｐ２Ｐノード）は、ユーザ所望のファイルを要求する（つまり、ユーザ所望のファイルの送信先になる）要求ノードになることもあれば、そのユーザ所望のファイルを提供する提供ノードになることもあり、或いは、その提供ノードから要求ノードへのファイル送信を中継する中継ノードになることもある。以下、Ｐ２Ｐネットワークに参加した上記計算機が、提供ノードＹとなり、提供ノードＹの中継ノード候補とされなかったノードＸが要求ノードＸとなる場合を例に採り、ファイル送信の要求が行われる場合に実行される処理について説明する。
【００５１】
図５は、提供ノードＹから要求ノードＸにファイルが送信される場合に実行される処理の概要を示す。以下、この図５を参照した説明では、送受信されるファイルを、便宜上、「ファイルＡ」と言う。
【００５２】
図５Ａに示すように、提供ノードＹと要求ノードＸとの間の経路にボトルネックが生じた場合、提供ノードＹが、そのボトルネック・パスよりも提供ノードＹ側に存在する中継ノード候補の中から中継ノードを決定し、決定した中継ノードに、要求ノードＸから指定されたファイルＡを送信する。なお、中継ノード候補は、そのファイル送信の前に、そのファイル送信における転送経路を基に決定されている。
【００５３】
中継ノードは、ファイルＡを要求していないにも関わらず、ファイルＡを受信することになる。この場合、中継ノードは、提供ノードＹから受信したファイルＡ（すなわち、要求していないにも関わらずに受信したファイルＡ）を、一時的に二次記憶装置に格納する（ファイルＡのファイルサイズが小さい等の場合には、一次記憶装置に格納しても良い）。提供ノードＹは、中継ノードへのファイル送信が成功した場合（例えば、中継ノードから所定の応答を受けた場合）、該中継ノードに、「要求ノードＸへの送信」を依頼する。
【００５４】
その後、図５Ｂに示すように、ボトルネックが解消された場合（例えば余剰帯域が所定値まで回復した場合）、その依頼に従って、中継ノードは、格納したファイルＡを、要求ノードＸに送信する。つまり、提供ノードＹからのファイルＡの再送信が実行される。なお、ここでは、例えば、中継ノードが、定期的に、要求ノードＸに、Ｐ２Ｐ  Ｐｉｎｇを送信し、要求ノードＸからＰ２Ｐ  Ｐｏｎｇを受信した場合に（例えば、Ｐ２Ｐ  Ｐｉｎｇを送信してから一定時間内にＰ２Ｐ  Ｐｏｎｇを受信した場合に）、ボトルネックが解消されたと判断して、上記格納したファイルＡを要求ノードＸに送信することができる。
【００５５】
これにより、提供ノードＹと要求ノードＸとの間の経路にボトルネックが生じても、提供ノードＹのファイルＡを要求ノードＸに送信することを成功させることができる。
【００５６】
以下、詳細に説明する。なお、以下の説明では、Ｐ２Ｐノードを要求ノードとして実行させる場合のＰ２Ｐアプリケーションプログラムを、「要求Ｐ２Ｐアプリ」と称し、Ｐ２Ｐノードを提供ノードとして実行させる場合のＰ２Ｐアプリケーションプログラムを、「提供Ｐ２Ｐアプリ」と称し、Ｐ２Ｐノードを中継ノードとして実行させる場合のＰ２Ｐアプリケーションプログラムを「中継Ｐ２Ｐアプリ」と称する。
【００５７】
図６は、ファイル送信の要求が行われる場合に実行される処理の流れの一例を示す。
【００５８】
図６Ａに示すように、要求Ｐ２Ｐアプリ１１１が、ファイル保有端末を探索する（Ｓ３１）。具体的には、例えば、ユーザから指定されたユーザ所望のファイルの識別子（例えばファイル名）を引数にしたＰ２Ｐ  Ｐｉｎｇを送信する。すなわち、本実施例では、Ｐ２Ｐアプリ１１１は、ファイルを所望するユーザからユーザ所望のファイルを指定された場合に、要求Ｐ２Ｐアプリとしての動作を実行することができる。
【００５９】
そのＰ２Ｐ  Ｐｉｎｇを受信した各Ｐ２ＰノードのＰ２Ｐアプリ１１１は、図６Ｂに示すように、そのＰ２Ｐ  Ｐｉｎｇに対するＰ２Ｐ  Ｐｏｎｇを返信する（Ｓ４１）。返信するＰ２Ｐ  Ｐｏｎｇには、受信したＰ２Ｐ  Ｐｉｎｇで引数となっているファイルを有するか否かが含められる。更に、そのファイルを有するか否かに関わらず、そのＰ２Ｐ  Ｐｏｎｇには、そのＰ２Ｐノードの能力に関する情報（例えば、Ｐ２Ｐノードの仕様や余剰能力、以下、「能力情報」と言う）が含められる。余剰能力としては、例えば、二次記憶装置の空き記憶容量や、ＣＰＵ使用率などである。
【００６０】
要求Ｐ２Ｐアプリ１１１は、Ｐ２Ｐ  Ｐｉｎｇを受信した複数のＰ２ＰノードからそれぞれＰ２Ｐ  Ｐｏｎｇを受信し、それぞれのＰ２Ｐ  Ｐｏｎｇの中から、ファイル有りの応答があるか否かを判断する（Ｓ３２）。ファイル有りの応答があれば、一以上のファイル有りのＰ２Ｐ  Ｐｏｎｇの返信元の中から一つの返信元を選択し、選択した返信元に、ファイル送信要求を送信する（Ｓ３３）。
【００６１】
Ｐ２Ｐ  Ｐｏｎｇを返信した各Ｐ２ＰノードのＰ２Ｐアプリ１１１は、ファイル送信要求を受信した場合には、自分のＰ２Ｐノードを提供ノードとして動作させることになり（Ｓ４３）、ファイル送信要求を受信しない間は、自分のＰ２Ｐノードを第三のノードとして動作させることになる（Ｓ４４）。ここで、「第三のノード」とは、要求ノードでも提供ノードでもないノードである。第三のノードは、中継ノード候補になり得る。
【００６２】
図７Ａは、提供ノードとしての処理の流れの一例を示す。
【００６３】
提供Ｐ２Ｐアプリ１１１は、要求Ｐ２Ｐアプリからのファイル送信要求に応答して、図６ＡのＳ３１で問い合わせされたファイルの送信を開始する（Ｓ６１）。
【００６４】
そのファイルの送信中に、ボトルネックが発生しなければ（Ｓ６２でＮＯ）、ファイルは、最低限の転送速度以上の速度で要求ノードに送信される。この場合、例えば、ファイル送信してから応答を受けるまでの時間長（以下、応答時間長）が、許容時間長（例えば、転送するファイルのサイズと最低限の転送速度とにより求まる値）以下に収まる。提供Ｐ２Ｐアプリ１１１は、許容時間長以内に所定の応答を受けた場合には（Ｓ６２でＮＯ）、送信の成功と判断し、処理を終了する。なお、「最低限の転送速度」とは、例えば、図６ＡのＳ３１のＰ２Ｐ  Ｐｉｎｇで規定された転送速度である。すなわち、要求Ｐ２Ｐアプリは、ファイル識別子を引数にしたＰ２Ｐ  Ｐｉｎｇに、最低限の転送速度を規定して（ここでのＰｉｎｇは、「Ｑｕｅｒｙ」と呼ばれることもある）送信することができる。
【００６５】
ファイルの送信中に、ボトルネックが発生すると、上記規定された最低限の転送速度以上の転送速度でファイルを送信することができない場合がある。この場合、例えば、前述した応答時間長が、許容時間長よりも長くかかってしまう。提供Ｐ２Ｐアプリ１１１は、許容時間長を超えても応答を受けない等、ボトルネックに関わる状況を検出した場合には（Ｓ６２でＹＥＳ）、要求ノードとの接続を切断し、特定中継ノード候補探索処理を実行する（Ｓ６３）。この特定中継ノード候補探索処理では、中継ノード候補の探索と絞り込みとが行われる。つまり、特定中継ノードとは、絞り込まれた中継ノード候補である。
【００６６】
中継ノード候補の探索としては、具体的には、例えば、図３Ａ及び図３Ｂに示す処理を実行する。その際、Ｐ２Ｐネットワークへの参加の際に生成されたリストを、今回の中継ノード候補探索により作成されたリストに更新することができる。この場合、既存のリストを、履歴として残しても良いし、既存のリストに今回のリストを上書きしても良い。前者の場合、各時点で生成されたリストから、中継ノード候補の統計をとることができる。
【００６７】
また、中継ノード候補の絞込みでは、以下の処理が行われる。すなわち、まず、提供Ｐ２Ｐアプリ１１１が、下位レイヤ通信プログラム１１３に、要求ノードＸとの間で経路探索処理を実行させる。この経路探索処理は、例えば、ＲＩＰ（Routing Information Protocol）或いはＯＳＰＦ（Open Shortest Path First）に従って実行される。この経路探索処理によって、提供ノードＹと要求ノードＸとの経路が探索される。そして、その後、ネットワーク利用可能性の評価が行われる。具体的には、（１）探索された経路の距離（ルータ間距離）の推定、（２）ボトルネック・パスの検出、及び（３）所定条件に合う中継ノード候補の有無の判断、が行われる。これらについては後に詳述する。
【００６８】
Ｓ６３の結果、特定中継ノード候補がある場合（Ｓ６４でＹＥＳ）、提供Ｐ２Ｐアプリ１１１は、経路探索処理で決定された経路に近接する端末の評価を行うことにより、一以上の特定中継ノード候補の中から中継ノードを選定する（Ｓ６５）。提供Ｐ２Ｐアプリ１１１は、選定した中継ノードにファイルを送信する（Ｓ６６）。そして、その送信に成功したならば、そのファイルを要求ノードＸに送信することの送信依頼（例えば、要求ノードＸを表す要求ノード情報（例えば、要求ノードの識別子）を含んだ送信コマンド）を中継ノードに送信する（Ｓ６７）。それに代えて、単に要求ノード情報を通知するのであってもよい。
【００６９】
一方、Ｓ６３の結果、特定中継ノード候補が無い場合（Ｓ６４でＮＯ）、提供Ｐ２Ｐアプリ１１１は、所定処理を実行する（Ｓ６８）。所定処理としては、例えば、要求ノードＸとの接続を切断する処理であっても良いし、直ちに或いは一定時間経った後にファイルを要求ノードＸに送信する処理であっても良い。
【００７０】
以上が、提供Ｐ２Ｐアプリ１１１の処理の流れである。
【００７１】
図７Ｂは、第三のノードとしての処理の流れの一例を示す。
【００７２】
第三のノードとして実行させるＰ２Ｐアプリ（以下、第三Ｐ２Ｐアプリ）１１１は、例えば、何らかの問合せ（具体的には、例えば、提供ノードＹによる中継ノード候補探索でのＰ２Ｐ  Ｐｉｎｇ）を受信した場合には（Ｓ５１でＹＥＳ）、応答を返すことができる（Ｓ５２）。
【００７３】
第三Ｐ２Ｐアプリ１１１は、提供ノードＹによって中継ノードとして選定された場合（Ｓ５３）、ファイルを提供ノードＹから受信する（Ｓ５４）。中継Ｐ２Ｐアプリ（中継ノードとして実行する第三Ｐ２Ｐアプリ）１１１は、受信したファイルを、二次記憶装置１０７に一時格納する（Ｓ５５）。
【００７４】
その後、その中継Ｐ２Ｐアプリ１１１は、提供Ｐ２Ｐアプリ１１１から送信依頼を受信した後（Ｓ５６）、ボトルネックが解消されたことを検出したならば（例えば、帯域が所定値まで回復したことを検出したならば）（Ｓ５７）、一時格納したファイルを要求ノードＸに送信する（Ｓ５８）。ボトルネックが解消したか否かは、例えば、中継Ｐ２Ｐアプリが、定期的に又は不定期的に、問合せ（例えばＰ２Ｐ  Ｐｉｎｇ）を送信し、それに対する応答（例えばＰ２Ｐ  Ｐｏｎｇ）を受けるまでの時間長から、特定しても良い。或いは、例えば、中継Ｐ２Ｐアプリ１１１が、下位レイヤ通信プログラム１１３に、定期的に又は不定期的に、問合せ（例えばＩＰ  Ｐｉｎｇ）を送信させ、それに対する応答（例えばＩＰ  Ｐｏｎｇ）を受けるまでの時間長から、特定しても良い。また、送信依頼に代えて、要求ノード情報を受信した場合には、ボトルネックの解消を検出したなら、能動的に、一時格納したファイルを、その要求ノード情報から特定される要求ノードに送信してもよい。
【００７５】
Ｓ５８の後、中継Ｐ２Ｐアプリ１１１は、送信したファイルを、二次記憶装置１０７から消去する。これにより、一時格納したファイルをいつまでも二次記憶装置１０７に残さないようにすることができる。
【００７６】
以下、図７ＡのＳ６３（ネットワーク利用可能性の評価）と、図７ＡのＳ６７（経路に近接する端末の評価）について詳細に説明する。
【００７７】
図８Ａは、ネットワーク利用可能性の評価の説明図である。
【００７８】
図８Ａにおいて、ルータα、β、γ、σは、図４の●α、β、γ、σに対応している。また、ノードＸ、Ｙ、Ａ、Ｂ、Ｃ及びＫも、図４に対応している。
【００７９】
まず、ルータ間距離の推定が行われる。具体的には、例えば、図示しないルーティング表に基づいて、要求ノードＸまでのルータ間距離が推定される。本実施形態で言うルータ間距離とは、提供ノードＹが属するルータγから、要求ノードＸが属するルータαまでのホップ数である。
【００８０】
次に、ボトルネック・パスの検出が行われる。具体的には、例えば、ルータ間距離を計算する場合に用いられた経路において、パスの余剰帯域を計算し、単位時間あたりのデータ転送量が最も低くなるパスの発見が行われる。図８Ａの例では、ルータαとルータβとの間のパス（経路部分）が、ボトルネック・パスと検出される。なお、この計算方法としては、公知の方法を利用することができる。
【００８１】
最後に、提供ノードＹで認識されている中継ノード候補に、検出されたボトルネック・パスよりも提供ノードＹ側に存在する中継ノード候補があるか否かが判断される。具体的には、例えば、提供Ｐ２Ｐアプリ１１１が、自分が認識している全ての中継ノード候補の識別子を下位レイヤ通信プログラム１１３に通知し、それらの中継ノード候補のうち、ボトルネック・パスよりも提供ノードＹ側にある中継ノード候補を問い合わせることにより、上記判断を行うことができる（この場合、下位レイヤ通信プログラム１１３は、通知された各識別子に対応する各ＩＰアドレスをＤＮＳ等により得ることができる）。このようにして判断するのは、提供Ｐ２Ｐアプリ１１１は、ＩＰネットワークのトポロジーを把握していないためである。図８Ａの例では、Ｐ２ＰノードＡ、Ｂ及びＣが、中継ノード候補として決定される。
【００８２】
この処理によって、提供Ｐ２Ｐアプリ１１１が認識している中継ノード候補が、特定中継ノード候補、すなわち、ボトルネック・パスよりも提供ノードＹ側に存在する中継ノード候補に絞り込まれる。ボトルネック・パスよりも提供ノードＹ側に存在する中継ノード候補があると判断された場合、中継ノードの選定、すなわち、経路に近接する端末の評価が行われる。
【００８３】
図８Ｂは、経路に近接する端末の評価の説明図である。
【００８４】
この評価では、図８Ａにより決定された中継ノード候補の中から、ファイルの一時格納先となる中継ノードが選定される。
【００８５】
具体的には、例えば、提供Ｐ２Ｐアプリ１１１が、上記決定された中継ノード候補の各能力情報を解析する。この能力情報は、中継ノード候補の探索（図７ＡのＳ６３）において、Ｐ２Ｐ  Ｐｏｎｇに含められている情報である。提供Ｐ２Ｐアプリ１１１は、例えば、ＣＰＵ使用率が所定値以下であり、一次記憶装置及び二次記憶装置のそれぞれの又は合計の空き記憶容量が所定値以上の中継ノード候補を、中継ノードに選定する。そのような中継ノード候補が複数個ある場合には、例えば、ＣＰＵ使用率に関わらず、一次記憶装置及び二次記憶装置のそれぞれの又は合計の空き記憶容量が最も大きい中継ノード候補を中継ノードに選定する。
【００８６】
また、中継ノードの選定の際、ボトルネック・パスの境界であるルータβから中継ノード候補との間の距離も考慮することができる。例えば、ルータβに属するノードＡ及びＢのいずれも、ＣＰＵ使用率が所定値を超えていて空き記憶容量が所定値未満ならば、ルータβとのパスの距離がホップ数１であり、且つ、そのパスの余剰帯域が所定値以上である（つまりデータ転送量が低すぎない）ノードＣを、中継ノードに選定することができる。なお、特に、このように、ボトルネック・パスの境界にあるルータから離れたルータに属するノードを中継ノードとする場合、ファイル送信の際に付加されたＴＴＬが余分に減ることになる。しかし、ＴＴＬは、上位レイヤでパケットが再構成される際にリセットされる（つまり増加される）ので、要求ノードＸに到達する前にＴＴＬがゼロになってしまって途中で破棄されてしまうといった問題は生じない。つまり、中継ノードで一時格納されてＰ２Ｐアプリ１１１によって要求ノードＸに再送信される際に、リセットされたＴＴＬが付加されるので、上記のような問題は生じない。
【００８７】
また、中継ノードの選定の際、下位レイヤ通信プログラム１１３とのやり取りにより、ＩＰネットワークの通信効率を評価し、トンネリングなど非効率な仕組みで繋がっていないかどうかも考慮することができる。
【００８８】
また、選定する中継ノードの数は、一つに限らない。例えば、常に、或いは、所定の状況の場合に、複数の中継ノードを選定しても良い。所定の状況としては、例えば、ダウンする可能性が高いと考えられる（例えばＣＰＵ使用率が所定値付近である）中継ノード候補しか無い場合、或いは、ボトルネック・パスの境界となるルータβに属する中継ノード候補が無い場合など、種々の状況が考えられる。複数の中継ノードを選定した場合、提供Ｐ２Ｐアプリ１１１は、それら複数の中継ノードにファイルを送信する。要求ノードＸにファイルを送信することの送信依頼の送信先は、一つの中継ノードであっても複数の中継ノードであっても良い。送信依頼を受けなかった中継ノードのＰ２Ｐアプリは、ファイルを一時格納してから一定時間経過した場合に、その一時格納したファイルを消去しても良い。
【００８９】
以上が、本実施形態についての説明である。
【００９０】
Ｐ２Ｐの通信では、提供ノードＹと要求ノードＸとの間の経路でボトルネックが生じている等の理由により、最低限のスピードで通信できないと、接続が強制的に切断される措置が採られることがある。本実施形態によれば、そのような措置が採られるようになっていても、切断されることなく通信を行うことができる。すなわち、本実施形態によれば、ボトルネックが生じている場合、そのボトルネック・パスよりも提供ノード側にあるノードを中継ノードとし、ファイルが一時そこに送信されて格納され、ボトルネックが解消した場合に、その中継ノードから要求ノードＸに再送される。つまり、このＰ２Ｐのファイル送受信によれば、ボトルネックが生じているパスにファイルを通過させないようにすることができるので、大容量のファイルを送受信する際に、送信の途中で接続が切断されてしまうといったようなことを防ぐことができる。
【００９１】
このことに鑑みれば、本実施形態は、様々な用途に活用することができる。
【００９２】
例えば、不安定な通信インフラストラクチャに頼っている、天候によって無線通信が不安定になるなど、ネットワーク帯域が大きく変化する環境において、本実施形態は有用であると考えられる。
【００９３】
また、例えば、医療設備の整った病院での検査データを、患者のかかりつけの病院に転送するといった用途にも有用であると考えられる。緊急時を除いて、検査データの転送は、即時に行われる必要はないし、ＣＴスキャンやＸ線画像などの大容量の検査データであっても、ネットワークがすいている間に転送することが期待できるためである。
【００９４】
また、いわゆる分散方式でのＷＥＢコンテンツの検索にも有用であると考えられる。この場合、例えば、複数のノードに検索用のインデックスを分散させておき、検索のときに、ノード間でインデックスをＰ２Ｐで交換する方法が考えられる。この方法によれば、いわゆる集中方式のように、中央のノードにいくほど帯域が不足するといったことを生じさせないようにできる。
【００９５】
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【００９６】
例えば、図７ＢのＳ５８の間、要求ノードＸにファイルを送信している中継Ｐ２Ｐアプリ１１１は、ファイル送信の最中にボトルネックが生じた場合、そのボトルネック・パスよりも自分寄りにある、自分にとっての特定中継ノード候補を探索させ、探索された特定中継ノード候補から中継ノードを選定し、その中継ノードに、ファイルを一時格納してもよい。すなわち、提供ノードＹから要求ノードＸへの中継は、１回に限らず、複数回行われても良い。
【図面の簡単な説明】
【００９７】
【図１】図１は、本発明の一実施形態の概要の説明図である。
【図２】図２は、Ｐ２Ｐノードのハードウェア構成例を示す。
【図３】図３は、計算機がＰ２Ｐネットワークに参加する時に行われる処理の流れの一例を示す。
【図４】図４は、上位レイヤと下位レイヤのネットワーク関係を示す図である。
【図５】図５は、提供ノードＹから要求ノードＸにファイルが送信される場合に実行される処理の概要を示す。
【図６】図６は、ファイル送信の要求が行われる場合に実行される処理の流れの一例を示す。
【図７】図７Ａは、提供ノードとしての処理の流れの一例を示す。図７Ｂは、第三のノードとしての処理の流れの一例を示す。
【図８】図８Ａは、ネットワーク利用可能性の評価の説明図である。図８Ｂは、経路に近接する端末の評価の説明図である。
【符号の説明】
【００９８】
１０１…Ｐ２Ｐノード  １０７…二次記憶装置  １０８…一次記憶装置１０８…Ｐ２Ｐアプリケーションプログラム  １１３…下位レイヤ通信プログラム
【図１】
2008052340.tif 000003
【図２】
2008052340.tif 000004
【図３】
2008052340.tif 000005
【図４】
2008052340.tif 000006
【図５】
2008052340.tif 000007
【図６】
2008052340.tif 000008
【図７】
2008052340.tif 000009
【図８】
2008052340.tif 000010