以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ配信システムに本発明を適用した場合の実施形態である。
[1.コンテンツ配信システムの構成及び動作概要]
始めに、図1を参照して、本実施形態に係るコンテンツ配信システムの構成及び動作概要について説明する。図1は、本実施形態に係るコンテンツ配信システムSの概要構成例を示す図である。コンテンツ配信システムは、本発明の通信システムの一例である。図1に示すように、本実施形態に係るコンテンツ配信システムSは、ルータRm(m=1,2,3・・・j)、及びユーザ端末UTo(o=1,2,3・・・l)等を備えて構成されている。ルータRmは、インターネット等からなるネットワークNWに接続されている。ユーザ端末UToは、例えば、ユーザにより使用されるパーソナルコンピュータ又は携帯機器である。ユーザ端末UToは、例えば、インターネットサービスプロバイタのサーバ(図示せず)により割り当てられたIPアドレスを用いてネットワークNWに接続可能になっている。
また、図1に示すように、コンテンツ配信システムSには、複数の拠点Pm毎に拠点ネットワークNLmが構築されている。この拠点の例としては、例えばカラオケ店舗、学校、会社、住宅、その他の施設等が挙げられる。拠点ネットワークNLmは、例えば、LAN(Local Area Network)等のプライベートネットワークである。また、各拠点ネットワークNLmには、ルータRmと複数の拠点端末Tm−l(l=1,2,3)とが接続されている。ルータRmは、ネットワークNWと拠点ネットワークNLmと間でIP(Internet Protocol)パケットを中継する中継機器である。拠点端末Tm−lは、ルータRmから配信されたコンテンツを再生することができる。なお、各拠点Pmにおける拠点端末Tm−lは、同じ拠点ネットワークNLmに接続されているルータRmだけと通信を行うことに限定されるものではない。例えば、拠点P1における視聴端末T1−1は、同じ拠点ネットワークNL1に接続されているルータR1だけでなく、他の拠点P2等におけるルータR2等やWebサーバ等とも通信を行うことができる。また、図1に示すように、コンテンツ配信システムSには、ネットワークNWを介して互いに通信可能な複数のノードNn(n=1,2,3・・・k)によりオーバーレイネットワークONが構成されている。オーバーレイネットワークONは、仮想的なリンクを構成する論理的なネットワークである。オーバーレイネットワークONは、特定のアルゴリズム、例えば、分散ハッシュテーブルを利用したアルゴリズムにより実現される。なお、分散ハッシュテーブルを、以下、「DHT(Distributed Hash Table)」という。DHTを用いたルーティングテーブルには、オーバーレイネットワークONに参加している全ノードNnのうち、所定数のノードNnのノードID、IPアドレス及びポート番号が登録されている。ここで、ノードIDは、ノードNnをオーバーレイネットワークONに参加している複数のノードNnの中から識別する固有の識別情報である。また、IPアドレスは、ノードNnのネットワークNW上での所在を示す所在情報の一例である。また、オーバーレイネットワークONに参加するとは、DHTを用いたルーティングテーブルに基づいて他のノードNnとの間で各種メッセージを送受信できる状態に稼動することをいう。これにより、各ノードNnは、他のノードNnとの間でオーバーレイネットワークONを介してメッセージを送受信することが可能となる。ここで、オーバーレイネットワークONを介したメッセージの送受信とは、オーバーレイネットワークONに参加しているノードNn間のメッセージの送受信を意味する。なお、DHTを用いたルーティングテーブルは、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
また、本実施形態においては、オーバーレイネットワークONに参加しているノードNnには、常駐ノードと一般ノードとが含まれる。常駐ノードは、本発明における「第1の情報処理装置」の一例である。常駐ノードは、例えば、オーバーレイネットワークONの運用に貢献する装置として設定される。ここで、「設定される」には、例えばシステム管理者等により任意に設定される場合と、ノードNnが常駐ノードの条件を満たすか否かを判定することにより設定される場合とが含まれる。なお、常駐ノードの条件については後述する。一方、一般ノードは、本発明における「第1の情報処理装置と異なる第2の情報処理装置」の一例である。そして、ルータRmは、常駐ノードとしてオーバーレイネットワークONに定常的に参加する。ここで、「定常的に参加」とは、例えば、常駐ノードが故障時又はメンテナンス時以外の時には、オーバーレイネットワークONから離脱せず参加していることを意味する。なお、本実施形態では、定常的に参加するノードNnは、例えば、ルータRmである。この場合、ルータRmに、ノードNnとして制御処理を実行させるプログラムがインストールされる。各拠点Pm以外にも、各家庭で常時ネットワークに接続される機器に、ノードNnとして制御処理を実行させるプログラムがインストールされても良い。一方、ユーザ端末UToは、一般ノードとしてオーバーレイネットワークONに必ずしも定常的に参加するとは限らないノード装置である。ここで、一般ノードは、例えば、ユーザがユーザ端末UToを使用する時等の所定時間だけオーバーレイネットワークONに参加するノード装置である。そのため、一般ノードは、オーバーレイネットワークONから参加と離脱を繰り返す。つまり、一般ノードは、任意のタイミングで、オーバーレイネットワークONに参加または離脱する。なお、ユーザ端末UToであっても、常駐ノードの条件を満たす場合がある。この場合、ユーザ端末UToは、常駐ノードとしてオーバーレイネットワークONに参加することができる。
また、オーバーレイネットワークONに参加している複数のノードNnには、内容の異なる様々なコンテンツが分散保存されている。また、ノードNnに保存されているコンテンツには、コンテンツIDが付与されている。コンテンツIDは、コンテンツを、オーバーレイネットワークONでノードNnに保存される複数のコンテンツの中から識別する固有の識別情報である。なお、ノードID及びコンテンツIDは、例えば、オーバーレイネットワークONで共通のハッシュ関数により生成される。
ここで、コンテンツを保存しているノードNnを、以下、「コンテンツ保持ノード」という。また、コンテンツの所在を示す情報は、インデックス情報として、コンテンツの所在を管理しているノードNnに記憶される。コンテンツの所在を管理しているノードNnを、以下、「ルートノード」という。インデックス情報には、コンテンツを保存しているコンテンツ保持ノードのノード情報と、コンテンツのコンテンツIDとの組が含まれる。ノード情報には、例えば、コンテンツ保持ノードのIPアドレス、ポート番号、及びノードIDが含まれる。ルートノードは、例えば、コンテンツIDと最も近いノードIDが割り当てられたノードNnであるように定められる。コンテンツIDと最も近いノードIDとは、例えば、IDの上位桁が最も多く一致するノードIDである。
そして、あるノードNnが、オーバーレイネットワークONを介してコンテンツ保持ノードから所定のコンテンツを取得する場合がある。この場合の例としては、拠点端末T1−1から所定のコンテンツの要求を受けたノードN1が、このコンテンツを保存していなかった場合が挙げられる。なお、図1に示す例では、ノードN1はルータR1である。この場合、ノードN1は、先ず、オーバーレイネットワークONでコンテンツ保持ノードに保存される所定のコンテンツの所在を検索する検索処理を行う。ここで、所定のコンテンツとは、例えば、拠点端末T1−1のユーザにより取得対象として選択されたコンテンツである。この所定のコンテンツを、以下、「取得対象のコンテンツ」という。また、検索処理を行うノードN1を、以下、「ユーザノード」という。具体的には、ユーザノードは、検索処理において、コンテンツ所在問合せメッセージを、DHTルーティングによりルートノード宛に送信する。このコンテンツ所在問合せメッセージは、取得対象のコンテンツの所在をルートノードに問い合わせるためのメッセージである。また、コンテンツ所在問合せメッセージには、取得対象のコンテンツのコンテンツID等が含まれる。なお、DHTルーティングは、例えば特開2007−053662号公報等で公知であるので、詳しい説明を省略する。
コンテンツ所在問合せメッセージを受信したルートノードは、コンテンツ所在問合せメッセージに含まれるコンテンツIDに対応するインデックス情報を記憶部から取得する。そして、ルートノードは、コンテンツ所在応答メッセージをユーザノードへ返信する。このコンテンツ所在応答メッセージは、取得対象のコンテンツの所在をユーザノードに応答するためのメッセージである。また、コンテンツ所在応答メッセージには、取得されたインデックス情報等が含まれる。こうして、ユーザノードは、コンテンツ所在応答メッセージを受信すると、このメッセージからインデックス情報を抽出する。ユーザノードは、抽出したインデックス情報に含まれるコンテンツ保持ノードのIPアドレス等に基づいてコンテンツ保持ノードにアクセスする。そして、ユーザノードは、コンテンツ要求メッセージをコンテンツ保持ノードへ返信する。このコンテンツ要求メッセージは、取得対象のコンテンツをコンテンツ保持ノードへ要求するためのメッセージである。このコンテンツ要求メッセージには、取得対象のコンテンツのコンテンツID等が含まれる。
コンテンツ要求メッセージを受信したコンテンツ保持ノードは、このメッセージに含まれるコンテンツIDに対応するコンテンツを記憶部から取得する。そして、コンテンツ保持ノードは、コンテンツ送信メッセージとともに、取得したコンテンツをユーザノードへ送信する。こうして取得されたコンテンツは、ユーザノードから拠点端末T1−1へ送信される。
なお、ルートノードは、コンテンツ所在応答メッセージをユーザノードへ送信することに代えて、コンテンツ送信要求メッセージをコンテンツ保持ノードへ送信するように構成してもよい。このコンテンツ送信要求メッセージは、取得対象のコンテンツをユーザノードへ送信することを要求するためのメッセージである。また、コンテンツ送信要求メッセージには、取得対象のコンテンツのコンテンツIDとユーザノードのIPアドレス等が含まれる。コンテンツ送信要求メッセージを受信したコンテンツ保持ノードは、このメッセージに含まれるコンテンツIDに対応するコンテンツを記憶部から取得する。コンテンツ保持ノードは、コンテンツ送信要求メッセージに含まれるユーザノードのIPアドレス等に基づいてユーザノードにアクセスする。そして、コンテンツ保持ノードは、コンテンツ送信メッセージとともに、取得したコンテンツをユーザノードへ送信する。
ユーザノードは、取得したコンテンツを記憶部に記憶すると、コンテンツ保持ノードとしてパブリッシュ処理を行う。このパブリッシュ処理は、コンテンツを保存していることを他のノードNnに公開するための処理である。このパブリッシュ処理において、コンテンツ保持ノードは、パブリッシュメッセージを、DHTルーティングによりルートノード宛に送信する。このパブリッシュメッセージには、コンテンツのコンテンツID、及びコンテンツ保持ノードのノード情報等が含まれる。こうしてパブリッシュメッセージを受信したルートノードは、パブリッシュメッセージに含まれるコンテンツのコンテンツIDとコンテンツ保持ノードのノード情報との組をインデックス情報として記憶する。なお、パブリッシュ処理は、常駐ノードと一般ノードの双方において行われる。そのため、あるコンテンツのルートノードからユーザノードに提供されるインデックス情報には、常駐ノードのノード情報と一般ノードのノード情報とが混在することになる。
図2(A)は、パブリッシュメッセージが、DHTルーティングにより、コンテンツ保持ノードからルートノードへ送信される例を示す図である。なお、図2(A)に示す例において、コンテンツ保持ノードは、パブリッシュメッセージの送信先のIPアドレスを、DHTを用いたルーティングテーブルから取得する。同様に、転送ノードX,Yも、パブリッシュメッセージの送信先のIPアドレスを、DHTを用いたルーティングテーブルから取得する。こうして、図2(A)に示すように、コンテンツ保持ノードから送信されたパブリッシュメッセージは、2つの転送ノードX,Yにより転送され、ルートノードに到達する。ここで、転送ノードとは、メッセージを転送するノードNnをいう。転送ノードには、ルートノードと同様、パブリッシュメッセージに含まれるコンテンツIDとコンテンツ保持ノードのノード情報との組が記憶される。つまり、パブリッシュメッセージの転送経路上に存在する転送ノードにもインデックス情報が記憶される。転送ノードは、ユーザノードからルートノード宛に送信されたコンテンツ所在問合せメッセージを受信する場合がある。この場合、転送ノードは、取得対象のコンテンツに対応するインデックス情報を含むコンテンツ所在応答メッセージをユーザノードへ送信することができる。
また、コンテンツ保持ノードは、コンテンツを保存した時にパブリッシュメッセージをルートノード宛に送信した後も、定期的にパブリッシュメッセージをルートノード宛に送信する。この定期的なパブリッシュメッセージを、以下、「定期パブリッシュメッセージ」という。図2(B)は、定期パブリッシュメッセージが、DHTルーティングにより、コンテンツ保持ノードからルートノードへ送信される例を示す図である。図2(B)に示す例では、定期パブリッシュメッセージが送信される際には、転送ノードYが既にオーバーレイネットワークONから離脱している。そのため、図2(B)に示すように、転送ノードXは、新たな転送ノードZへ定期パブリッシュメッセージを転送することになる。なお、転送ノードZのIPアドレスは、DHTを用いたルーティングテーブルから取得される。このようにメッセージの転送経路が変更されても、定期パブリッシュメッセージにより、変更後の転送経路上に存在する転送ノードにインデックス情報を記憶させることができる。なお、オーバーレイネットワークONに新たなノードNnが参加する場合でも、メッセージの転送経路の変更はあり得る。
更に、転送ノードは、定期的にメッセージの転送経路の変更を確認するための経路変更確認メッセージをルートノード宛に送信する。経路変更確認メッセージには、転送ノードに記憶されたインデックス情報中のコンテンツIDが含まれる。図2(C)は、経路変更確認メッセージが、DHTルーティングにより、転送ノードXからルートノードへ送信される例を示す図である。図2(C)に示す例では、経路変更確認メッセージが送信される際には、転送ノードYが既にオーバーレイネットワークONから離脱している。そのため、図2(C)に示すように、転送ノードXは、新たな転送ノードZへ経路変更確認メッセージを転送することになる。このようにメッセージの転送経路が変更されても、経路変更確認メッセージにより、変更後の転送経路上に存在する転送ノードにインデックス情報を記憶させることができる。
ところで、オーバーレイネットワークONを介して送受信されるメッセージのヘッダには、このメッセージを送信するノードNnのノード情報と、このメッセージの送信先となるノードNnのノード情報が含まれる。メッセージを受信したノードNnは、このメッセージを送信したノードNnのノード情報に基づいて、DHTを用いたルーティングテーブルを更新するようになっている。更に、本実施形態においては、オーバーレイネットワークONを介して送受信されるメッセージには、このメッセージを送信するノードNnが常駐ノード又は一般ノードであることを示す装置識別情報が含まれる。そして、後述するように、メッセージを受信したノードNnは、この装置識別情報に基づいて、装置識別情報が常駐ノードを示すときのメッセージ゛に含まれるノード情報を優先して、DHTを用いたルーティングテーブルに登録することを決定するようになっている。これにより、オーバーレイネットワークON上での通信を安定させることが可能となる。
なお、オーバーレイネットワークONを介して送受信されるメッセージには、上述したコンテンツ所在問合せメッセージ、コンテンツ要求メッセージ等の他にも様々なメッセージがある。例えば、コンテンツ削除通知メッセージがある。このコンテンツ削除通知メッセージは、コンテンツを削除したことをルートノードに通知するためのメッセージである。コンテンツ削除通知メッセージは、コンテンツを削除したコンテンツ保持ノードから、DHTルーティングにより、このコンテンツのルートノード宛に送信される。
[2.ルータRmの構成及び機能等]
次に、図2(D)を参照して、ルータRmの構成及び機能について説明する。図2(D)は、ルータRmの概要構成例を示す図である。ルータRmは、図2(D)に示すように、制御部1、記憶部2、通信部3a、及び通信部3b等を備えて構成される。制御部1、記憶部2、通信部3a、及び通信部3bはバス4を介して相互に接続されている。記憶部2は、本発明における記憶手段の一例である。なお、各ルータRmには、IPアドレスが割り当てられている。 記憶部2は、例えばハードディスクドライブ等から構成される。記憶部2には、オペレーティングシステム、及びノード処理プログラム等が記憶されている。なお、ノード処理プログラム等は、例えば、ネットワークNWに接続された所定のサーバからダウンロードされるようにしてもよい。或いは、ノード処理プログラム等は、例えば、記録媒体に記録されて記録媒体のドライブを介して読み込まれるようにしてもよい。
また、記憶部2には、オーバーレイネットワークONに参加したルータRmの記憶部2には、DHTを用いたルーティングテーブル等が記憶される。また、記憶部2に設けられたコンテンツ保存領域にはコンテンツが記憶される。コンテンツ保存領域は、コンテンツを保存するための保存領域である。
通信部3aは、ネットワークNWを通じてユーザ端末UTo等との間の通信制御を行う。また、通信部3bは、拠点ネットワークNLmを通じて拠点端末Tm−lとの間の通信制御を行う。
制御部1は、演算機能を有するCPU,作業用RAM,及びROM等から構成される。制御部1は、本発明における第1〜第3受信手段、第1〜第3送信手段、第1〜第5取得手段、決定手段、判定手段、第2決定手段及び登録手段の一例である。また、制御部1は時計機能及びタイマ機能を備える。このタイマ機能により、後述する時間判定タイマの設定及びカウントが行われる。また、制御部1は、CPUが記憶部2等に記憶されたノード処理プログラムの実行により常駐ノードとして動作する。なお、制御部1は、OSI(Open Systems Interconnection)参照モデルの第3層であるネットワーク層において、他のルータ又はホストからのIPパケットを中継する機能を有する。IPパケットを中継する機能は、公知のルータ又はL3スイッチングハブ等と同様であるので、詳しい説明を省略する。更に、制御部1は、拠点ネットワークNLmを介して接続される拠点端末Tm−lから要求されたコンテンツを、拠点端末Tm−lへ配信する機能を有する。
なお、拠点端末Tm−lがオーバーレイネットワークONに参加するように構成してもよい。
[3.ユーザ端末UToの構成及び機能等]
次に、図2(E)を参照して、ユーザ端末UToの構成及び機能について説明する。図2(E)は、ユーザ端末UToの概要構成例を示すブロック図である。ユーザ端末UToは、図2(E)に示すように、制御部11、記憶部12、バッファメモリ13、デコーダ部14、映像処理部15、表示部16、音声処理部17、スピーカ18、通信部19、及び入力部19a等を備えて構成される。制御部11、記憶部12、バッファメモリ13、デコーダ部14、映像処理部15、表示部16、音声処理部17、通信部19、及び入力部19aは、バス19bを介して相互に接続されている。記憶部12は、本発明における記憶手段の一例である。
記憶部12は、例えばハードディスクドライブ等から構成される。記憶部2には、オペレーティングシステム、及びノード処理プログラム等が記憶されている。なお、ノード処理プログラム等は、例えば、ネットワークNWに接続された所定のサーバからダウンロードされるようにしてもよい。或いは、ノード処理プログラム等は、例えば、記録媒体に記録されて記録媒体のドライブを介して読み込まれるようにしてもよい。
また、記憶部12には、オーバーレイネットワークONに参加したユーザ端末UToの記憶部12には、DHTを用いたルーティングテーブル等が記憶される。また、記憶部12に設けられたコンテンツ保存領域にはコンテンツが記憶される。
バッファメモリ13は、受信されたコンテンツをバッファリングする。デコーダ部14は、コンテンツに含まれる映像データ及び音声データ等のデータ伸張や復号化等のデコード処理を行う。映像処理部15は、デコーダ部14によりデコードされた映像データ等に対して所定の描画処理を施し映像信号として再生出力する。表示部16は、映像処理部15から再生出力された映像信号に基づきディスプレイに映像等を表示する。また、表示部16は、デコーダ部14によりデコードされた画像を表示する。音声処理部17は、デコーダ部14によりデコードされた音声データをアナログ音声信号にD(Digital)/A(Analog)変換した後これをアンプにより増幅して再生出力する。スピーカ18は、音声処理部17から再生出力された音声信号を音波として出力する。
通信部19は、ネットワークNWを通じてルータRm等との間の通信制御を行う。
制御部11は、演算機能を有するCPU,作業用RAM,及びROM等から構成される。制御部11は、本発明における本発明における第1〜第3受信手段、第1〜第3送信手段、第1〜第5取得手段、決定手段、判定手段、第2決定手段及び登録手段の一例である。また、制御部11は時計機能及びタイマ機能を備える。このタイマ機能により、後述する時間判定タイマの設定及びカウントが行われる。また、制御部11は、CPUが記憶部12等に記憶されたノード処理プログラムの実行により常駐ノード又は一般ノードとして動作する。
[4.コンテンツ配信システムSの動作]
次に、図3〜図5を参照して、コンテンツ配信システムSの動作について説明する。なお、図3(A)は、ノードNnにおけるメイン処理を示すフローチャートである。また、図3(B)は、図3(A)のステップS8におけるメッセージ送信処理の詳細を示すフローチャートである。また、図4(A),図5は、図3(A)のステップS10におけるメッセージ受信処理の詳細を示すフローチャートである。なお、図3〜図5に示す処理は、オーバーレイネットワークONにノードNnとして参加したルータRmの制御部1、又はユーザ端末UToの制御部11により行われる。
図3(A)に示す処理は、ルータRm又はユーザ端末UToにおいてノード処理プログラムが起動することにより開始される。なお、ノード処理プログラムの起動は、例えばルータRm又はユーザ端末UToの電源オンにより開始される。或いは、ノード処理プログラムの起動は、ユーザ端末UToにおいてユーザから入力部19aを介してノード処理プログラムの起動指示があった場合に開始される。
図3(A)に示す処理が開始されると、ノードNnは、設定ファイルが記憶部に記憶されているか否かを判定する(ステップS1)。この設定ファイルには、ステップS1の判定を行うノードNnが常駐ノード又は一般ノードであることを示す装置識別情報が格納されている。そして、設定ファイルが記憶されていると判定された場合には(ステップS1:YES)、ステップS2に進む。なお、ルータRmである場合、例えば、ルータRmの設置時等に設定ファイルが記憶される。この設定ファイルには、常駐ノードであることを示す装置識別情報が格納されている。
一方、設定ファイルが記憶されていないと判定された場合には(ステップS1:NO)、ステップS3に進む。
ステップS2では、ノードNnは、設定ファイルからこのノードNnの装置識別情報をRAMの所定の記憶領域に読み込み、ステップS6に進む。この所定の記憶領域は、装置識別情報を設定するための領域である。
一方、ステップS3では、ノードNnは、このノードNnが、常駐ノードの条件を満たすか否かを判定する。ノードNnは、ステップS3の判定結果に基づいて、このノードNnが、常駐ノード又は一般ノードであるかを決定することになる。ここで、常駐ノードの条件は、例えばノード処理プログラム中に設定されている。
常駐ノードの条件の例としては、例えば、以下の(a)〜(d)が挙げられる。
(a)オーバーレイネットワークONへ参加していた継続時間が所定時間以上であること
(b)記憶部に設けられたコンテンツ保存領域の保存容量が所定容量以上であること
(c)通信部が接続される通信回線のデータ通信速度が所定速度以上であること
(d)NAT(Network Address Translation)越え可能であること
ここで、上記(a)の「オーバーレイネットワークONへ参加していた継続時間」は、例えば、前回、ノードNnがオーバーレイネットワークONから離脱する時に記憶部に記憶される。このように記憶された継続時間が条件判定時に参照される。また、上記(b)の「コンテンツ保存領域の保存容量」は例えば、条件判定時にオペレーティングシステムを通じて参照される。また、上記(c)の「通信回線のデータ通信速度」は、例えば、条件判定時に、条件判定を行うノードNnが、例えば所定の常駐ノードとの間でデータ通信を行うことで計測される。上記(c)の「通信回線のデータ通信速度」は、言い換えれば、「通信回線の帯域(bps)」である。「通信回線の帯域(bps)」は、通信している通信相手とのセッション数をカウントすることにより求めてもよい。また、上記(d)のNAT越え可能であるか否かは、例えば、条件判定時にオペレーティングシステムを通じて参照される。なお、NAT越えの技術には、利用者がNAT対応ルータにおいて適切にポートフォワーディング設定をする方法や、「UPnP(Universal Plug and Play)」又は「UDP(User Datagram Protocol ) hole punching」などの公知の技術がある。ただし、インターネット環境では、NAT越えができても、パーソナルコンピュータのパーソナルファイアウォール等によってインターネット側から接続ができない場合がある。このようなことを考慮して、上記(d)の条件に代えて、「ネットワークNWに接続された他の装置からTCP(Transmission Control Protocol)/IP(Internet Protocol)またはUDP(User Datagram Protocol)/IPの接続を受け付けることが可能であること」を条件としてよい。ここで、「ネットワークNWに接続された他の装置」は、例えば、ネットワークNWに接続されている他のルータRm又は他のユーザ端末UTo等を示す。なお、上記(a)〜(d)の条件は、オーバーレイネットワークONの運用に貢献する装置とみなすことができる条件である。上記(a)〜(d)の条件の他にも、オーバーレイネットワークONの運用に貢献する装置とみなすことができる条件を用いてもよい。
そして、ノードNnは、常駐ノードの条件を満たすと判定した場合には(ステップS3:YES)、常駐ノードであると決定し、ステップS4に進む。例えば、上記(a)〜(d)の全ての条件を満たす場合に、常駐ノードの条件を満たすと判定される。或いは、上記(a)の条件、且つ、上記(b)〜(d)の何れか1以上の条件を満たす場合に、常駐ノードの条件を満たすと判定される。或いは、上記(a)の条件のみを満たす場合に、常駐ノードの条件を満たすと判定されるように構成してもよい。 一方、ノードNnは、常駐ノードの条件を満たさないと判定した場合には(ステップS3:NO)、一般ノードであると決定し、ステップS5に進む。
ステップS4では、ノードNnは、常駐ノードであることを示す装置識別情報をRAMの所定の記憶領域に記憶する。また、ノードNnは、常駐ノードであることを示す装置識別情報を格納する設定ファイルを作成して記憶部に記憶する。そして、処理はステップS6に進む。
一方、ステップS5では、ノードNnは、一般ノードであることを示す装置識別情報をRAMの所定の記憶領域に記憶する。また、ノードNnは、一般ノードであることを示す装置識別情報を格納する設定ファイルを作成して記憶部に記憶する。そして、処理はステップS6に進む。
ステップS6では、ノードNnは、オーバーレイネットワークONへの参加するための参加処理を行う。この参加処理では、ノードNnは、オーバーレイネットワークONへの参加要求を示す参加メッセージを所定の常駐ノードに送信する。この常駐ノードは、オーバーレイネットワークONに参加するノードNnが最初にアクセスするコンタクトノードである。このコンテントノードのIPアドレス及びポート番号は、例えば、ノード処理プログラムから読み出し可能に記憶部に記憶されている。一方、コンタクトノードは、参加メッセージを受信すると、DHTを用いたルーティングテーブルから所定数のノード情報を取得する。ここで、DHTを用いたルーティングテーブルからは常駐ノードのノード情報が優先して取得される。そして、コンタクトノードは、取得した所定数のノード情報を、参加メッセージを送信したノードNnへ送信する。なお、コンタクトノードは、DHTを用いたルーティングテーブルに登録された他の常駐ノードへ参加メッセージを転送するように構成してもよい。この場合、参加メッセージの転送を受けた常駐ノードは、DHTを用いたルーティングテーブルから所定数のノード情報を取得する。そして、この常駐ノードは、取得した所定数のノード情報を、参加メッセージを送信したノードNnへ送信する。一方、参加メッセージを送信したノードNnは、コンタクトノード等からの所定数のノード情報を受信する。そして、ノードNnは、受信された所定数のノード情報に基づいて、常駐ノードのノード情報を優先的に登録するDHTを用いたルーティングテーブルを生成する。なお、「常駐ノードのノード情報を優先的に登録する」とは、例えば、DHTを用いたルーティングテーブルに登録されている一般ノードのノード情報を削除して、その代わりに常駐ノードのノード情報を登録することを意味する。或いは、「常駐ノードのノード情報を優先的に登録する」とは、例えば、DHTを用いたルーティングテーブルにおいて一般ノードのノード情報より常駐ノードのノード情報の数を多く登録することを意味する。或いは、DHTを用いたルーティングテーブルに登録する候補として、常駐ノードのノード情報と、一般ノードのノード情報があるとする。この場合、「常駐ノードのノード情報を優先的に登録する」とは、一般ノードのノード情報は登録せずに、常駐ノードのノード情報を登録することを意味する。
こうして、ノードNnは、常駐ノードのノード情報が優先的に登録されたルーティングテーブルを取得することでオーバーレイネットワークONへの参加が完了する。そして、ノードNnはタイマ機能により時間判定タイマ(図示せず)のカウントを開始する。この時間判定タイマは、オーバーレイネットワークONに参加してからの継続時間が、所定時間以上になったか否かを判定するためのものである。ここで、所定時間は例えば24時間に設定される。また、オーバーレイネットワークONに参加してからの継続時間を、以下、「参加継続時間」という。なお、コンタクトノードは、所定数のノード情報を送信するのではなく、DHTを用いたルーティングテーブル自体を、参加メッセージを送信したノードNnへ送信するように構成してもよい。この場合、ノードNnは、DHTを用いたルーティングテーブルを生成しなくてもよい。
次に、ノードNnは、メッセージを送信するか否かを判定する(ステップS7)。このメッセージには、上述したように、コンテンツ所在問合せメッセージ、コンテンツ所在応答メッセージ、コンテンツ要求メッセージ、コンテンツ送信メッセージ、パブリッシュメッセージ、及び経路変更確認メッセージなどの様々な種類のメッセージがある。メッセージを送信する条件は、メッセージの種別毎に異なるが、公知であるので詳しい説明を省略する。そして、ノードNnは、メッセージを送信すると判定した場合には(ステップS7:YES)、ステップS8に進む。一方、ノードNnは、メッセージを送信しないと判定した場合には(ステップS7:NO)、ステップS9に進む。
ステップS8では、ノードNnは、メッセージ送信処理を行う。このメッセージ送信処理では、図3(B)に示すように、ノードNnは、所定の記憶領域に記憶されている装置識別情報を取得する(ステップS81)。次いで、ノードNnは、メッセージの送信先となるノードNnのノード情報を取得する(ステップS82)。メッセージの送信先となるノードNnのノード情報は、例えば、DHTを用いたルーティングテーブル又は直前に受信されたメッセージから取得される。次いで、ノードNnは、ステップS81で取得した装置識別情報及びステップS82で取得した送信先のノード情報等を含むメッセージを生成する(ステップS83)。なお、生成されるメッセージには、このメッセージを送信するノードNnのノード情報が含まれる。ここで、メッセージを送信するノードNnのノード情報を、以下、「送信側ノード情報」という。更に、生成されるメッセージによってはコンテンツID等が含まれる場合もある。そして、ノードNnは、生成したメッセージを、メッセージの送信先となるノードNnへ送信し(ステップS84)、図3(A)に示す処理に戻る。このように、送信されるメッセージに装置識別情報が含まれるように構成した。そのため、メッセージを受信したノードNnは、メッセージを送信したノードNnが常駐ノード又は一般ノードであるかを迅速に確認することができる。
ステップS9では、ノードNnは、メッセージを受信したか否かを判定する。そして、ノードNnは、メッセージを受信したと判定した場合には(ステップS9:YES)、ステップS10に進む。一方、ノードNnは、メッセージを受信していないと判定した場合には(ステップS9:NO)、ステップS11に進む。
ステップS10では、ノードNnは、メッセージ受信処理を行う。このメッセージ受信処理の例としては、図4(A)に示す処理と、図5に示す処理とがある。
先ず、図4(A)に示す処理について説明する。図4(A)に示す処理は、DHTを用いたルーティングテーブルに、常駐ノードのノード情報のみを登録する処理である。図4(A)に示す処理において、ノードNnは、受信したメッセージの種類に応じた処理を行う(ステップS101)。例えば、ノードNnは、コンテンツ所在問合せメッセージを受信したとする。この場合、ノードNnは、コンテンツ所在問合せメッセージに含まれるコンテンツIDに対応するインデックス情報を記憶しているか否かを判定する。そして、ノードNnは、インデックス情報を記憶している場合、ステップS8に移行して、コンテンツ所在問合せメッセージの送信元のユーザノードへインデックス情報を送信しステップS101に戻ることになる。
次いで、ノードNnは、受信したメッセージから、装置識別情報及び送信側ノード情報を抽出する(ステップS102)。
次いで、ノードNnは、上記ステップS102で抽出した装置識別情報に基づいて、この装置識別情報に常駐ノードが示されているか否かを判定する(ステップS103)。つまり、メッセージを送信したノードNnが常駐ノードであるか否かが判定される。そして、ノードNnは、装置識別情報に常駐ノードが示されていないと判定した場合には(ステップS103:NO)、図3(A)に示す処理に戻る。つまり、メッセージを送信したノードNnが一般ノードである場合、上記ステップS102で抽出した送信側ノード情報を、DHTを用いたルーティングテーブルに登録しないことが決定される。一方、ノードNnは、装置識別情報に常駐ノードが示されていると判定した場合には(ステップS103:YES)、ステップS104に進む。この場合、ステップS104以降の処理で、常駐ノードのノード情報を、DHTを用いたルーティングテーブルに登録されるか否かが決定される。
ここで、図4(B)に示すDHTを用いたルーティングテーブルの概要について説明する。図4(B)に示すルーティングテーブルは、メッセージを受信したノードNnが記憶するルーティングテーブルの一例である。図4(B)に示す例においては、説明の便宜上、ノードIDのbit長を2bit×3桁=6bitとし、各桁を4進数で表している。また、メッセージを受信したノードNnのノードIDは、“122”であるものとする。また、図4(B)に示すDHTを用いたルーティングテーブルは、レベル1〜レベル3のテーブルからなる。各レベルのテーブルには、エリア毎に、ノード情報を登録するための登録領域を有する。この登録領域を、以下、「エントリー」という。このような複数のエントリーの中には、ノードIDが未登録のエントリーも含まれる。また、各エリアは、図1に示すID空間を分割することにより得られるエリアである。例えば、ID空間を4分割することにより、0XXのエリア、1XXのエリア、2XXのエリア、及び3XXのエリアが得られる。ここで、“X”は、0〜3の整数である。レベル1のテーブルは、0XXのエリア、1XXのエリア、2XXのエリア、及び3XXのエリアの夫々に対応するエントリーを有する。更に、ノードID“122”を含む1XXのエリアを4分割することにより、10Xのエリア、11Xのエリア、12Xのエリア、及び13Xのエリアが得られる。レベル2のテーブルは、10Xのエリア、11Xのエリア、12Xのエリア、及び13Xのエリアの夫々に対応するエントリーを有する。更に、ノードID“122”を含む12Xのエリアを4分割することにより、120のエリア、121のエリア、122のエリア、及び123のエリアが得られる。レベル3のテーブルは、120のエリア、121のエリア、122のエリア、及び123のエリアの夫々に対応するエントリーを有する。なお、ノードIDのbit長を例えば16桁×4bitとした場合、16レベル分のテーブルが必要となる。
ステップS104では、ノードNnは、上記ステップS102で抽出した送信側ノード情報に含まれるノードIDを登録可能なエントリーを決定する。ここで、ノードIDを登録可能なエントリーとは、ノードIDが含まれるエリアに対応するエントリーである。
ステップS105では、ノードNnは、上記ステップS104で決定したエントリーが未登録であるか否かを判定する。例えば、送信側ノード情報に含まれるノードIDが“112”であるとする。この場合、図4(B)に示す例では、上記ステップS104で決定されるエントリーE1は未登録になっている。或いは、例えば、送信側ノード情報に含まれるノードIDが“130”であるとする。この場合、図4(B)に示す例では、上記ステップS104で決定されるエントリーE2には、ノードID“131”が既に登録されている。そして、ノードNnは、上記ステップS104で決定したエントリーが未登録であると判定した場合には(ステップS105:YES)、ステップS106に進む。一方、ノードNnは、上記ステップS104で決定したエントリーが未登録でないと判定した場合には(ステップS105:NO)、ステップS107に進む。
ステップS106では、ノードNnは、上記ステップS102で抽出した送信側ノード情報を上記ステップS104で決定したエントリーに登録し、図3(A)に示す処理に戻る。
一方、ステップS107では、ノードNnは、上記ステップS102で抽出した送信側ノード情報に含まれるノードIDと、上記ステップS104で決定したエントリーに既に登録されているノードIDとが同一であるか否かを判定する。そして、ノードNnは、2つのノードIDが同一であると判定した場合には(ステップS107:YES)、図3(A)に示す処理に戻る。一方、ノードNnは、2つのノードIDが同一でないと判定した場合には(ステップS107:NO)、ステップS108に進む。
ステップS108では、ノードNnは、このノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間のホップ数を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間のホップ数を、以下、「第1ホップ数」という。更に、ノードNnは、このノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間のホップ数を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間のホップ数を、以下、「第2ホップ数」という。
ここで、ホップ数は、ルータ等の中継機器の数である。また、ホップ数は、2つのノードNn間で送受信されるIPパケットのヘッダ中に設定されたTTL(Time To Live)を用いて計算することができる。IPパケットの送信側のノードNnで設定されたTTLの値は、中継機器を1回経由する度に値が1減少する。そのため、IPパケットを受信したノードNnは、TTLの値の減少数を計算することでホップ数を示す情報を取得することができる。
次いで、ノードNnは、第1ホップ数が第2ホップ数より小さいか否か判定する(ステップS109)。この判定は、ホップ数が小さい方の常駐ノードのノード情報をDHTを用いたルーティングテーブルに登録するために行われる。
そして、ノードNnは、第1ホップ数が第2ホップ数より小さくないと判定した場合には(ステップS109:NO)、図3(A)に示す処理に戻る。つまり、上記ステップS104で決定したエントリーへの常駐ノードのノード情報の登録が維持される。一方、ノードNnは、第1ホップ数が第2ホップ数より小さいと判定した場合には(ステップS109:YES)、ステップS110に進む。
なお、上記ステップS108及びS109では、DHTを用いたルーティングテーブルに登録するノード情報を決定するに当たり、ノードNn間のホップ数を用いるように構成した。別の例として、ノードNnのデータ通信速度を用いるように構成してもよい。データ通信速度は、言い換えれば、ノードNn間の通信回線の帯域(bps)である。この場合、上記ステップS108において、ノードNnは、このノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間のデータ通信速度を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間のデータ通信速度を、以下、「第1通信速度」という。また、ノードNnは、このノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間のデータ通信速度を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間のデータ通信速度を、以下、「第2通信速度」という。ここで、データ通信速度は、ノードNnが、各々の常駐ノードとの間でデータ通信を行うことで計測される。また、上記ステップS109において、ノードNnは、第1通信速度が第2通信速度より速いか否か判定する。この判定は、データ通信速度が速い方の常駐ノードのノード情報をDHTを用いたルーティングテーブルに登録するために行われる。そして、ノードNnは、第1通信速度が第2通信速度より速くないと判定した場合には(ステップS109:NO)、図3(A)に示す処理に戻る。一方、ノードNnは、第1通信速度が第2通信速度より速いと判定した場合には(ステップS109:YES)、ステップS110に進む。
或いは、別の例として、ノードNnの通信部が接続される通信回線の帯域を用いるように構成してもよい。この場合、上記ステップS108において、ノードNnは、このノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間の通信回線の帯域を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS102で抽出した送信側ノード情報に対応する常駐ノードとの間の通信回線の帯域を、以下、「第1帯域」という。また、ノードNnは、このノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間の通信回線の帯域を示す情報を取得する。なお、メッセージを受信したノードNnと、上記ステップS104で決定したエントリーに既に登録されている他の常駐ノードとの間の通信回線の帯域を、以下、「第2帯域」という。ここで、帯域は、ノードNnが、各々の常駐ノードとの間のデータ通信速度を計測することで得られる。或いは、帯域は、各々の常駐ノードのセッション数を各々の常駐ノードから取得することで得られる。また、上記ステップS109において、ノードNnは、第1帯域が第2帯域より広いか否か判定する。この判定は、帯域が広い方の常駐ノードのノード情報をDHTを用いたルーティングテーブルに登録するために行われる。帯域が広いとは、データ通信速度が速いことを意味する。また、帯域が広いとは、セッション数が少ないことを意味する。常駐ノードのセッション数が多いということは、常駐ノードがセッションを張っている通信相手の数が多いことを意味する。その結果、セッション数分、帯域が占有されるため、使用できる帯域が狭くなる。したがって、上記ステップS109において、ノードNnは、双方の常駐ノードのセッション数を比較判定してもよい。そして、ノードNnは、第1帯域が第2帯域より広くないと判定した場合には(ステップS109:NO)、図3(A)に示す処理に戻る。一方、ノードNnは、第1帯域が第2帯域より広いと判定した場合には(ステップS109:YES)、ステップS110に進む。
ステップS110では、ノードNnは、上記ステップS102で抽出した送信側ノード情報を、上記ステップS104で決定したエントリーに登録されている常駐ノードのノード情報に代えて登録し、図3(A)に示す処理に戻る。つまり、この場合、メッセージを送信した常駐ノードのノード情報が、エントリーに既に登録されている常駐ノードのノード情報より優先して登録される。これにより、ネットワークNWに与える負荷を低減することができる。そのため、メッセージの送信先としてより適切なノードNnのノード情報がエントリーに登録されるように更新することができる。
以上説明したように、図4(A)に示す処理によれば、各ノードNnに記憶されるDHTを用いたルーティングテーブルを、常駐ノードのノード情報のみが登録されるルーティングテーブルにすることができる。そのため、DHTを用いたルーティングテーブルに登録されたノードNnが離脱することに起因するメッセージの遅延を回避することができる。したがって、オーバーレイネットワークONにおける通信を安定させることができる。
なお、上記図4(A)に示す処理においてステップS107で“NO”となった場合に、ノードNnはステップS108〜S109の処理を行わずにステップS110に移行するように構成してもよい。つまり、ノードNnは、ホップ数等を比較することなく、常駐ノードのノード情報を優先して登録するように構成しても良い。このことは、後述する図5に示すステップS209、S210、S214、及びS215でも同様である。
次に、図5に示す処理について説明する。図5に示す処理は、DHTを用いたルーティングテーブルに、常駐ノードのノード情報と一般ノードのノード情報を登録する処理である。但し、図5に示す処理では、一般ノードよりも常駐ノードのノード情報の登録が優先される。また、図4(B)に示すDHTを用いたルーティングテーブルには、図示しないが、各エントリーに登録されるノード情報には、常駐ノードであるか否かを示す情報が対応付けられて登録される。常駐ノードであるか否かを示す情報は、例えば、フラグで表わされる。例えばフラグが“1”の場合、常駐ノードを示す。一方、フラグが“0”の場合、一般ノードを示す。
図5に示す処理において、ステップS201、S202、S203、及び204の処理は、夫々、ステップS101、S102、S104、及びS105の処理と同様である。
ノードNnは、上記ステップS203で決定したエントリーが未登録であると判定した場合には(ステップS204:YES)、ステップS205に進む。一方、ノードNnは、上記ステップS203で決定したエントリーが未登録でないと判定した場合には(ステップS204:NO)、ステップS206に進む。
ステップS205では、ノードNnは、上記ステップS202で抽出した送信側ノード情報、及び常駐ノードであるか否かを示すフラグを上記ステップS203で決定したエントリーに登録し、図3(A)に示す処理に戻る。ここで、上記ステップS202で抽出された装置識別情報に常駐ノードが示されている場合、常駐ノードであることを示すフラグがエントリーに登録される。
一方、ステップS206の処理は、上記ステップS107の処理と同様である。ステップS206において、ノードNnは、上記ステップS202で抽出した送信側ノード情報に含まれるノードIDと、上記ステップS203で決定したエントリーに既に登録されているノードIDとが同一でないと判定した場合には(ステップS206:NO)、ステップS207に進む。
ステップS207の処理は、上記ステップS103の処理と同様である。そして、ノードNnは、装置識別情報に常駐ノードが示されていると判定した場合には(ステップS207:YES)、ステップS208に進む。一方、ノードNnは、装置識別情報に常駐ノードが示されていないと判定した場合には(ステップS207:NO)、ステップS213に進む。
ステップS208では、ノードNnは、上記ステップS203で決定したエントリーに常駐ノードのノード情報が登録されているか否かを判定する。例えば、このエントリーにフラグ“1”が登録されていれば、常駐ノードのノード情報が登録されていると判定される。そして、ノードNnは、エントリーに常駐ノードのノード情報が登録されていると判定した場合には(ステップS208:YES)、ステップS209に進む。この場合、メッセージを送信したノードNnとメッセージを受信したノードNnの双方共、常駐ノードである。一方、ノードNnは、エントリーに常駐ノードのノード情報が登録されていないと判定した場合には(ステップS208:NO)、ステップS212に進む。
ステップS209〜S211の処理は、上記S108〜S110の処理と同様である。
ステップS212では、ノードNnは、ノードNnは、上記ステップS202で抽出した送信側ノード情報を、上記ステップS203で決定したエントリーに登録されている一般ノードのノード情報に代えて登録し、図3(A)に示す処理に戻る。つまり、この場合、メッセージを送信した常駐ノードのノード情報が、エントリーに既に登録されている一般ノードのノード情報より優先して登録される。言い換えれば、一般ノードのノード情報は、DHTを用いたルーティングテーブルから削除される。そのため、常駐ノードの数の増加にしたがって、常駐ノードのノード情報が多く登録されるDHTを用いたルーティングテーブルにしていくことができる。
ステップS213では、上記ステップS208と同様である。そして、ノードNnは、エントリーに常駐ノードのノード情報が登録されていると判定した場合には(ステップS213:YES)、図3(A)に示す処理に戻る。つまり、上記ステップS203で決定したエントリーへの常駐ノードのノード情報の登録が維持される。一方、ノードNnは、エントリーに常駐ノードのノード情報が登録されていないと判定した場合には(ステップS213:NO)、ステップS214に進む。この場合、メッセージを送信したノードNnとメッセージを受信したノードNnの双方共、一般ノードである。
なお、ステップS214〜S216の処理は、ホップ数が小さい方又はデータ通信速度が速い方の一般ノードのノード情報をDHTを用いたルーティングテーブルに登録するための処理である。ステップS214〜S216の処理は、上記S108〜S110の処理と同様の要領で行われる。
以上説明したように、図5に示す処理によれば、各ノードNnに記憶されるDHTを用いたルーティングテーブルを、一般ノードより常駐ノードのノード情報が優先して登録されるルーティングテーブルにすることができる。そのため、DHTを用いたルーティングテーブルに登録されたノードNnが離脱することに起因するメッセージの遅延を少なくすることができる。したがって、オーバーレイネットワークONにおける通信を安定させることができる。加えて、図5に示す処理によれば、各ノードNnに記憶されるDHTを用いたルーティングテーブルにおける未登録のエントリーを少なくすることができる。そのため、オーバーレイネットワークONにおける通信を円滑に行わせることができる。
図3(A)に示す処理に戻り、ステップS11では、ノードNnは、オーバーレイネットワークONへの参加継続時間が所定時間以上になったか否かを判定する。例えば、時間判定タイマのカウント値が、所定時間以上になった場合には、参加継続時間が所定時間以上になったと判定される。そして、ノードNnは、参加継続時間が所定時間以上になったと判定した場合には(ステップS11:YES)、ステップS12に進む。なお、参加継続時間が所定時間以上になった場合、時間判定タイマのカウント値がリセットされ、その後のカウントが停止される。一方、ノードNnは、参加継続時間が所定時間以上になっていないと判定した場合には(ステップS11:NO)、ステップS15に進む。
ステップS12では、ノードNnは、このノードNnの記憶部に記憶されている設定ファイルに格納された装置識別情報に常駐ノードが示されているか否かを判定する。つまり、この判定を行うノードNnが常駐ノードに設定されているか否かが判定される。そして、ノードNnは、装置識別情報に常駐ノードが示されていると判定した場合には(ステップS12:YES)、ステップS15に進む。一方、ノードNnは、装置識別情報に常駐ノードが示されていないと判定した場合には(ステップS12:NO)、ステップS13に進む。装置識別情報に常駐ノードが示されていないと判定した場合とは、この判定を行うノードNnが一般ノードとして設定されている場合である。
ステップS13では、ノードNnは、このノードNnが、常駐ノードの条件を満たすか否かを判定する。このステップS13の処理は、上記ステップS3の処理と基本的に同様である。ただし、ステップS13では、ステップS3の場合の上記(a)の条件に代えて、今回の参加継続時間が所定時間以上であることが(a)の条件とされる。そして、ノードNnは、常駐ノードの条件を満たすと判定した場合には(ステップS13:YES)、ステップS14に進む。なお、ステップS13において、上記(a)の条件のみが用いられる場合、この条件は上記ステップS11で判断されている。そのため、この場合、ノードNnは、ステップS13の判定を行わずに、ステップS14へ移行することになる。一方、ノードNnは、常駐ノードの条件を満たさないと判定した場合には(ステップS13:NO)、ステップS15に進む。
ステップS14では、ノードNnは、RAMの所定の記憶領域に記憶されている装置識別情報を、一般ノードから常駐ノードに書き換える。また、ノードNnは、記憶部に記憶されている設定ファイルに格納されている装置識別情報を、一般ノードから常駐ノードに書き換える。これにより、オーバーレイネットワークONへの参加時には一般ノードであったノードNnを、その後に常駐ノードとして格上げすることができる。これ以降、ステップS8のメッセージ送信処理において送信されるメッセージ中の装置識別情報には常駐ノードであることが示されることになる。
ステップS15では、ノードNnは、処理終了指示があったか否かを判定する。例えば、例えばルータRm又はユーザ端末UToの電源オフ指示があった場合に処理終了指示があったと判定される。或いは、ノード処理プログラムの終了指示があった場合に処理終了指示があったと判定される。そして、ノードNnは、処理終了指示がないと判定した場合には(ステップS15:NO)、ステップS7に戻る。一方、ノードNnは、処理終了指示があったと判定した場合には(ステップS15:YES)、図3(A)に示す処理を終了する。
以上説明したように、上記実施形態によれば、メッセージを受信したノードNnは、このメッセージに含まれる、常駐ノード又は一般ノードであることを示す装置識別情報に基づいて、装置識別情報が常駐ノードを示すときのメッセージ゛に含まれるノード情報を優先して、DHTを用いたルーティングテーブルに登録することを決定する。この結果、DHTを用いたルーティングテーブルには、常駐ノードのノード情報のみが登録される。或いは、DHTを用いたルーティングテーブルには、一般ノードのノード情報より常駐ノードのノード情報が優先して登録される。そのため、常駐ノードと一般ノードとが混在するオーバーレイネットワークON上での通信を安定させることが可能となる。したがって、常駐ノードがオーバーレイネットワークONに参加しているメリットを活かすことができる。
また、上述したように、DHTを用いたルーティングテーブルに登録されたノードNnはオーバーレイネットワークONから離脱する可能性が低くなるため、メッセージの転送経路が変更され難くなる。そのため、定期パブリッシュメッセージや経路変更確認メッセージを送信する時間間隔を従来に比べて短くすることができる。この結果、ネットワークNWの負荷を低減することができる。
また、上記実施形態では、DHTを用いたルーティングテーブルに登録する対象を制限することで、一般ノードがメッセージを転送する頻度が低くなる。しかし、一般ノードも常駐ノードと同様、上記パブリッシュ処理を行う。そのため、ルートノードはコンテンツ保持ノードとして、一般ノードと常駐ノードのノード情報が混在するインデックス情報をユーザノードへ提供することができる。この結果、一般ノードのコンテンツ記憶領域を有効に活用することができる。また、ユーザノードは、一般ノードと常駐ノードのノード情報が混在するインデックス情報を用いることで効率良くコンテンツの分散ダウンロードを行うことができる。ここで、分散ダウンロードとは、一つのコンテンツを構成する各部分データを、それぞれ異なるコンテンツ保持ノードからダウンロードすることをいう。分散ダウンロードは取得の一例である。一般ノードと常駐ノードのノード情報が混在するインデックス情報を用いるユーザノードは、一般ノードと常駐ノードを所定の割合で利用することができる。例えば、一般ノードを10台、常駐ノードを10台というように半々で利用することができる。そして、ユーザノードは、一般ノードと常駐ノードとの夫々から部分データをダウンロードする。また、ユーザノードが一般ノードからの部分データのダウンロードする速度が所定速度より遅い場合がある。この場合、ユーザノードは、ダウンロード先を一般ノードから常駐ノードに切り換えるように構成すれば、より効率良くコンテンツのダウンロードを行うことができる。
なお、ルートノードから、一般ノードのノード情報を含むインデックス情報がユーザノードへ提供された後に、この一般ノードがオーバーレイネットワークONから離脱する場合がある。この場合、ユーザノードが一般ノードへアクセスする処理は無駄になってしまう。そのため、上記実施形態において、一般ノードがパブリッシュ処理を行わないように構成してもよい。これにより、一般ノードのノード情報はインデックス情報としてルートノード等に記憶されない。或いは、一般ノードはパブリッシュ処理を行うが、ルートノードは一般ノードからのパブリッシュメッセージを破棄するように構成してもよい。この場合、ルートノードは一般ノードのノード情報をインデックス情報として記憶しない。このような構成は、多くの常駐ノードが存在することで、公開される全てのコンテンツを保存するためのコンテンツ記憶領域を常駐ノードだけで確保できる場合に有効である。
なお、上記実施形態においては、本発明の第1の情報処理装置の一例としてルータRm又はユーザ端末UToを例にとって説明したがこれに限定されるものではなく、第1の情報処理装置はネットワークNWに接続されているサーバ等であってもよい。また、第1の情報処理装置は、基本的にネットワークNWに定常的に接続されているゲートウェイ等の機器であっても良い。
また、上記実施形態においては、オーバーレイネットワークONに、DHTを利用したピアツーピアネットワークを適用したが、これに限られるものではない。例えば、他のオーバーレイネットワークを用いたシステムが適用されてもよい。DHTを利用しないピアツーピアシステムとしては、例えば、ハイブリッド型のピアツーピアシステムがある。