以下、本発明の最良の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ配信システムに対して本発明を適用した場合の実施形態である。
[1.コンテンツ配信システムの構成等]
始めに、図1を参照して、情報通信システムの一例であるコンテンツ配信システムの概要構成等について説明する。
図1は、本実施形態に係るコンテンツ配信システムにおける各ノード装置の接続態様の一例を示す図である。
図1の下部枠101内に示すように、IX(Internet eXchange)3、ISP(Internet Service Provider)4a,4b、DSL(Digital Subscriber Line)回線事業者(の装置)5a,5b、FTTH(Fiber To The Home)回線事業者(の装置)6、及び通信回線(例えば、電話回線や光ケーブル等)7等によって、インターネット等のネットワーク(現実世界の通信ネットワーク)8が構築されている。なお、図1の例におけるネットワーク(通信ネットワーク)8には、データ(パケット)を転送するためのルータが、適宜挿入されているが図示を省略している。
コンテンツ配信システムSは、このようなネットワーク8を介して相互に接続可能な複数のノード装置(以下、単に「ノード」という)n1,n2・・・n21を備えて構成されることになり、ピアツーピア方式のネットワークシステムとなっている(なお、実際には、これ以上のノードが存在することになる)。なお、以下の説明において、ノードn1〜n21の何れかを示す場合には、ノードnnという場合がある。
また、本実施形態においては、各ノードnnは、NAT内側(LAN側)に存在していることを前提としており(各ノードnnには、プライベートIPアドレスが割り当てられている)、1のノードnnからネットワーク8を介して他のノードnnに接続する場合には、図示しないNAT機能搭載ルータによりプライベートIPアドレスがアドレス情報としてのグローバルIPアドレスに変換されるようになっている。また、各ノードnnへの接続は、上述した、UPnPを用いた技術と、UDP HolePunchingを用いた技術の何れかの方法が採られる。
なお、以下の説明において、UPnPを用いた技術により接続可能なノードnnを、UPnP対応ノードnn(第1ノード装置)といい、UDP Hole Punchingを用いた技術により接続可能なノード装置nnを、UDP非対応ノードnn(第2ノード装置)という。
本実施形態においては、各UPnP非対応ノードnnに対する仲介サーバとしての役割は、複数のUPnP対応ノードnnが担うことになる。つまり、従来のような専用の仲介サーバを必要とせず、UPnP対応ノードnnが仲介ノードとして機能することになる。
なお、本実施形態においては、全てのノードがNAT内側(LAN側)に存在することを前提とするが、ノードnnの全部又は一部がネットワーク側(NAT外側)に存在し、個別にグローバルIPアドレスが割り当てられていてもよい(プライベートIPアドレスが割り当てられたUPnP対応ノードnnと、グローバルIPアドレスが割り当てられたノードnnとは、機能的には同等である)。
そして、このコンテンツ配信システムSにおいては、特定のアルゴリズム、例えば、DHT(Distributed Hash Table)を利用したアルゴリズムによって、図1の上部枠100内に示すような、オーバーレイネットワーク9が構築されることになる。つまり、このオーバーレイネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するネットワーク(論理的なネットワーク)を意味する。
本実施形態においては、DHTを利用したアルゴリズムによって構築されたオーバーレイネットワーク9を前提としており、このオーバーレイネットワーク9(図1の上部枠100内)に配置されたノードn1〜n15を、オーバーレイネットワーク9に参加しているノードnnという。言い換えれば、オーバーレイネットワーク9は、複数のノードnnの参加により形成されている。このようなオーバーレイネットワーク9への参加は、参加していないノードn16〜n21が、参加している任意のノードnnに対して参加要求を示す参加要求情報を送信することによって行われる。
また、各ノードnnは、固有のノードIDを有しており、当該ノードIDは、例えば、各ノードnn固有の製造番号を共通のハッシュ関数(例えば、SHA−1等)によりハッシュ化した値(例えば、bit長が160bit)であり、一つのID空間に偏りなく分散して配置されることになる。
このように共通のハッシュ関数により求められた(ハッシュ化された)ノードIDは、製造番号が異なれば、同じ値になる確率が極めて低いものである。なお、ハッシュ関数については公知であるので詳しい説明を省略する。
また、オーバーレイネットワーク9に参加している各ノードnnは、夫々、DHTを保持している。このDHTは、オーバーレイネットワーク9上における情報の転送先を規定しており、具体的には、ノードID空間内で適度に離れたノードnnのノードIDとそのIPアドレス及びポート番号(本実施形態においては、ノードnnに対応するNAT外側(つまり、NAT機能搭載ルータ)のグローバルIPアドレス及びポート番号、以下同様)等のノード情報が複数登録されたルーティングテーブル(転送先テーブル)が含まれている。
このようなDHTは、ノードnnがオーバーレイネットワーク9に参加する際に与えられることになる。
また、コンテンツ配信システムSにおいては、ノードnnによるオーバーレイネットワーク9への参加、若しくは脱退が頻繁に行われるため、定期的に(例えば数十分から数時間間隔で)DHTの更新が必要かどうかが確認されると共に、その更新情報がDHTのルーティングテーブルにしたがって他のノードnnに伝達されるようになっている。これにより、DHTを最新の状態に保つことが可能となる。
更に、コンテンツ配信システムSにおいては、様々なコンテンツ(例えば、映画や音楽等)データが、オーバーレイネットワーク9に参加している複数のノードnnに分散して保存(格納)されている。例えば、ノードn1には、タイトルがXXXの映画のコンテンツデータが保存されており、一方、ノードn2には、タイトルがYYYの映画のコンテンツデータが保存されるというように、互いに異なるコンテンツデータが、複数のノードnnに分散されて保存される。
また、あるコンテンツデータは、1つのノードnnに保存されているとは限らず、複数のノードnnに同じコンテンツデータが保存されうる。これらのコンテンツデータには、夫々、コンテンツ名(タイトル)等が付与されている。
そして、このように分散保存されているコンテンツデータの所在を示す所在情報(例えば、コンテンツデータが保存されているノードnnのIPアドレス及びポート番号)は、オーバーレイネットワーク9に参加している複数のノードnnに分散して保存されている。例えば、あるコンテンツデータのコンテンツ名(或いは、当該コンテンツデータの先頭数バイトでも良い)が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化され(つまり、ノードnnのノードIDと同一のID空間に配置)、そのハッシュ値(当該ハッシュ値がコンテンツIDとなる)と最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードnnに、当該コンテンツデータの所在情報が保存されることになる。つまり、同一のコンテンツデータ(コンテンツIDが同一)が、夫々、複数のノードnnに保存されている場合であっても、かかるコンテンツデータの所在を示す所在情報(複数のノードnnのIPアドレス等)は、1つのノードnnで管理することができる(このようにコンテンツデータの所在を管理するノードnnを、以下、「コンテンツルートノード」という)。
なお、本実施形態においては、1のコンテンツルートノードでは、1のコンテンツIDに対応するコンテンツデータの所在情報が保存される(つまり、コンテンツルートノードと上記所在情報とは1対1の関係にある)が、これに限定されるものではない)。
これにより、あるコンテンツデータを取得(ダウンロード)したいユーザが使用する例えばノードn4は、当該コンテンツデータのコンテンツIDが付加された(コンテンツIDをキーとする)クエリ(問合せ情報)を他のノードnnに対して送出することにより、当該コンテンツIDが付加されたクエリは、いくつかのノードnn(これを、「中継ノード」という)を経由されて(各中継ノードにおいて、上記DHTのルーティングテーブルが参照されてコンテンツIDが転送される)そのコンテンツデータの所在を示す所在情報を保存しているコンテンツルートノードに辿り着き、当該コンテンツルートノードから当該所在情報を取得(受信)することが可能となり、取得した所在情報に基づいて上記コンテンツデータを保存している例えばノードn5に接続し、そこから当該コンテンツデータを取得(受信)することが可能になる。
なお、コンテンツIDがコンテンツルートノードに辿り着くまでの間に当該ルートノードと同じ所在情報をキャッシュしているノードnnから当該所在情報を取得(受信)されるようにしてもよい。
図2は、DHTのノードID空間において、ノードn4から送出されたクエリがコンテンツルートノードまで転送される様子の一例を示す図である。図2の例において、各中継ノードは、受信したクエリに付加されたコンテンツIDと、DHTのルーティングテーブルに登録されているノードIDとを比較して、次に転送すべきノードnnを特定(例えば、コンテンツIDの上位数桁が一致するノードIDに対応するノードnnのIPアドレス及びポート番号を特定)し、そこにクエリを転送することになる。
さて、上述したように、本実施形態におけるオーバーレイネットワーク9には、UPnP対応ノードnnとUPnP非対応ノードnnとが参加しているが、UPnP非対応ノードnnへの接続は、これと対をなすUPnP対応ノードnnを仲介するようになっている。各ノードnn(UPnP対応ノードnn又はUPnP非対応ノードnn)は、自己と対をなすノードnn(UPnP非対応ノードnn又はUPnP対応ノードnn)以外の他のUPnP非対応ノードnnに接続する場合には、当該他のUPnP非対応ノードnnと対をなす他のUPnP対応ノードnnを仲介して当該他のUPnP非対応ノードnnに接続する接続手段を有する。
ここで、UPnP対応ノードnnとUPnP非対応ノードnnとの対とは、1対1の対に限定されるものではなく、1対n(nは自然数)であっても構わない。
図3は、DHTのノードID空間において、UPnP対応ノードnnとUPnP非対応ノードnnとの対の一例を表す概念図である。
図3の例では、UPnP対応ノードn1とUPnP非対応ノードn11、UPnP対応ノードn14とUPnP非対応ノードn2、UPnP対応ノードn3とUPnP非対応ノードn5、及びUPnP対応ノードn7とUPnP非対応ノードn10、が対となり、UDP Holeを維持(UPnP対応ノードnnとUPnP非対応ノードnnとの接続状態を維持)している(つまり、UDP Holeとしてのポートが閉じないように、UPnP非対応ノードnnからUPnP対応ノードnnに対して定期的(例えば、3分間隔)にデータパケットを送信している)。なお、図3の例ではUDPで接続を維持しているが、代わりにTCPで接続しても良い。その場合は、UPnP非対応ノードから、UPnP対応ノードに向けて、初めのコネクションを張り、その後定期的なデータパケットの送信により、接続が維持される。いずれにせよ、UPnP非対応ノードn11に対して、UPnP対応ノードn1が、いつでも即座に情報を伝達できるような状態にしておくことが肝要である。
そして、当該ID空間上における何れかのノードnn(UPnP対応ノードnn、或いはUPnP非対応ノードnn)が、例えばUPnP非対応ノードn10に接続する場合には、これと対をなす仲介ノードとしてのUPnP対応ノードn7を一旦仲介するようになっている。
以下、図4及び図5を参照して、このようなノードID空間におけるDHTを用いた通信について説明する。
図4は、ノードn1が保持するDHTのルーティングテーブルの一例を示す図であり、図5は、DHTのノードID空間において、UPnP対応ノードn1がUPnP非対応ノードn10に接続し、通信を開始するまでの流れの一例を示す図である。
図4の例において、DHTのルーティングテーブルは、レベル1〜レベル3のテーブル(複数のセルを有する)からなり(複数のレベルに区分されており)、各レベルのテーブルには、エリア毎に、情報の転送先となるノードnnのノード情報が登録されている。各レベルのテーブルにおける各エリアは、DHTのノードID空間を分割することにより得られるエリアである(この例では、ノードID空間を4つに分割した場合の例であるが、これに限定されるものではない)。
また、ノードnnのノード情報には、図4の符号51部に示すように、ノードID、IPアドレス及びポート番号、並びに、仲介ノード情報が含まれる。また、テーブル(セル)に登録されたノードnnが、UPnP対応ノードnnの場合、当該仲介ノード情報は、nullであり、一方、UPnP非対応ノードnnの場合、当該仲介ノード情報には、これと対をなす仲介ノードとしてのUPnP対応ノードnnの位置情報(以下、「仲介ノード位置情報」という)を知るノードを特定するためのID(以下、「仲介ノード位置情報ID」という)が含まれることになる。なお、仲介ノード位置情報には、仲介ノードのIPアドレス、ポート番号、及び仲介ノード位置情報IDが含まれることになる。
なお、図4に示すエリア3、6、9のセルは、自己(ノードn1)に対応するセルであるので、ノード情報が登録されていない。
そして、例えば、UPnP対応ノードn1が、DHTのルーティングテーブルのレベル1のエリア2におけるUPnP非対応ノードn10に接続し通信を行いたい場合、当該ノードn1は、自己のDHTのルーティングテーブルから、UPnP非対応ノードn10の仲介ノード情報に含まれる仲介ノード位置情報ID(UPnP対応ノードn7の位置情報を記憶しているノードを知るためのID)を取得し、当該取得した仲介ノード位置情報IDが付加された(仲介ノード位置情報IDをキーとする)仲介要求情報としての仲介要求メッセージを、例えば、図4及び図5に示すように、自己のDHTのルーティングテーブルに登録されているノードn3に対して送信する。
そして、上記仲介要求メッセージを受信したノードn3は、自己のDHTのルーティングテーブル(図示せず)を参照して、仲介要求メッセージに付加されたノードIDと最も近い(例えば、上位桁がより多く一致する)ノードIDに対応する例えばノードn6のノード情報を取得し、図5に示すように、当該ノードn6に対して、上記仲介要求メッセージを転送する。このように仲介要求メッセージは、DHTルーティングにより、中継ノードを転送していき(つまり、UPnP対応ノードn1は、UPnP非対応ノードn10と対をなすUPnP対応ノードn7の位置情報を知っているノードに辿り着くための仲介ノード位置情報IDに基づき、仲介要求メッセージをUPnP対応ノードn6まで転送させる)、最終的に(自己のノードIDが、仲介要求メッセージに付加されたノードIDに最も近く、転送先がなくなった場合)、仲介要求メッセージに付加されたノードIDを有するUPnP対応ノードn7の所在情報を保持するUPnP対応ノードn6に辿り着く(つまり、UPnP対応ノードn6は、仲介ノードであるUPnP対応ノードn7の位置情報のルートノードということができる)。これにより、UPnP対応ノードn1は、UPnP非対応ノードn10に対して、より効率良く接続することができる。
UPnP対応ノードn6は、仲介ノードであるUPnP対応ノードn7の所在情報を含む仲介ノード位置情報を記憶しており、上記仲介要求メッセージ(UPnP対応ノードn1のIPアドレス及びポート番号が含まれる)を、図5に示すように、UPnP対応ノードn7に対して転送する。
なお、DHTルーティングの経路上で、仲介ノード位置情報を保持しているキャッシュノードから仲介要求メッセージが転送されてもよい。また、ルートノートであるUPnP対応ノードn6若しくはキャッシュノードから、一旦、UPnP対応ノードn1に対して仲介ノード位置情報が送信され、UPnP対応ノードn1から直接仲介ノードであるUPnP対応ノードn7に対して仲介要求メッセージが送信されるように構成しても良い。
そして、UPnP対応ノードn7は、図5に示すように、UDP Holeにより、自己と対をなすUPnP非対応ノードn10に対して、受信した接続要求メッセージを送信する。こうして、当該接続要求メッセージを受信したUPnP非対応ノードn10は、自己に対応するNAT外側(つまり、NAT機能搭載ルータ)のポート(つまり、図4に示すDHTのルーティングテーブルのレベル1のエリア2におけるUPnP非対応ノードn10のノード情報に含まれるポート番号)を開放(パンチングにより)し、図5に示すように、UPnP対応ノードn1に対して接続応答メッセージを送信する。これにより、UPnP対応ノードn1は、UPnP非対応ノードn10と接続して、通信が開始されることになる。
一方、例えば、UPnP非対応ノードn2が、UPnP非対応ノードn10に接続し通信を行いたい場合、UPnP非対応ノードn10の仲介ノード情報に含まれるノードIDが付加された仲介要求メッセージを、例えばノードn3に対して送信する工程の前又は後に、自己に対応するNAT外側(つまり、NAT機能搭載ルータ)のポートを開放するためにダミーメッセージをUPnP非対応ノードn10宛てに送出する(当該ダミーメッセージは、UPnP非対応ノードn10に届かない)という工程が追加される(その他の工程は上記と同様である)。これにより、このNAT機能搭載ルータには、ノードn10からのUDPパケットを受け付けて、NAT内側のノードn2に転送(フォワード)する設定がなされる。ここにノードn10からの接続応答メッセージが届くことで、NAT越しの通信経路が確立する。UDPパケットのやりとりが続く限り、お互いのNAT機能搭載ルータのUDP Holeが維持され、NAT越しの通信ができるようになる。これが、UDP Hole Punchingである。通常のNAT機能搭載ルータでは、NAT内側からUDPパケットが外向きに送出されてから30秒〜5分程度は、逆方向のパケットを元の送信装置に転送(フォワード)するように実装設計されていることを利用した技術である。
図5の例では、仲介ノード位置情報のルートノードやキャッシュノードが、UPnP対応ノードである例になっているが、それらのノードがUPnP非対応ノードになる場合もあり得る。そうした場合でも、それぞれのノードの仲介ノードを介して、各種メッセージが届けられ、通常のDHTと同様にシステムが機能する。
次に、図6を参照して、ノードnnの構成について説明する。
図6は、ノードnnの概要構成例を示す図である。
ノードnnは、夫々、図6に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成されたコンピュータとしての制御部11と、各種データ(例えば、コンテンツデータ、所在情報、DHT)及びプログラム等を記憶保存(格納)するためのHDD等から構成された記憶手段としての記憶部12と、受信されたコンテンツデータを一時的に蓄積するバッファメモリ13と、コンテンツデータに含まれるエンコードされたビデオデータ(映像情報)及びオーディオデータ(音声情報)等をデコード(データ伸張や復号化等)するデコーダ部14と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部15と、当該映像処理部15から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部16と、上記デコードされたオーディオデータをアナログオーディオ信号にD(Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部17と、当該音声処理部17から出力されたオーディオ信号を音波として出力するスピーカ18と、ネットワーク8を通じて他のノードnnとの間の情報通信制御を行うための通信部20と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス、或いは、操作パネル等)21と、を備えて構成され、制御部11、記憶部12、バッファメモリ13、デコーダ部14、及び通信部20は、バス22を介して相互に接続されている。
このような構成において、制御部11は、CPUが記憶部12等に記憶されたプログラム(本発明のコンピュータプログラムを含む)を読み出して実行することにより、全体を統括制御すると共に、本発明の接続手段、接続状態維持手段、転送手段、アドレス情報取得手段、参加要求情報送信手段、脱退検出手段、及び仲介申込情報送信手段等として機能し、後述する各種処理を行うようになっている。
なお、上記コンピュータプログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしてもよいし、例えば、CD−ROM等の記録媒体に記録されて当該記録媒体のドライブを介して読み込まれるようにしてもよい。
[2.コンテンツ配信システムの動作]
次に、本実施形態におけるコンテンツ配信システムSの動作について説明する。
(オーバーレイネットワーク9に新規参加する場合の動作)
先ず、図7乃至図13を参照して、ノードnn(新規参加ノード)がオーバーレイネットワーク9に参加する際の動作について説明する。
なお、以下の説明において、ノードnnという場合には、UPnP対応ノードnnとUPnP非対応ノードnnの何れか一方を示すものとする。
図7(A)は、DHTのノードID空間において、参加要求メッセージ等の流れの一例を示す図であり、図7(B)は、DHTのノードID空間において、パブリッシュメッセージの流れの一例を示す図である。
図8(A)は、ノードnnのメインルーチンを示すフローチャートであり、図8(B)は、図8(A)に示すステップS4にて設定されたUDP Hole維持イベントタイマが起動したときの処理を示すフローチャートである。
また、図9(A)は、図8(A)に示すステップS2におけるUPnP対応ノードnn(新規参加ノード)の参加要求処理の詳細を示すフローチャートであり、図9(B)は、UPnP対応ノードnn(新規参加ノード)から送出された(又は送出され、転送された)参加要求メッセージを受信した場合におけるノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図9(C)は、参加応答メッセージを受信した場合におけるノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートである。
また、図10(A)は、図8(A)に示すステップS3におけるUPnP非対応ノードnn(新規参加ノード)の参加要求処理の詳細を示すフローチャートであり、図10(B)は、UPnP非対応ノードnn(新規参加ノード)から送出された参加要求メッセージを受信した場合における仲介ノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図10(C)は、UPnP非対応ノードnn(新規参加ノード)から送出された(又は送出され、転送された)参加要求メッセージを受信した場合におけるノードnn(仲介ノードnnを除く)の処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図10(D)は、参加応答メッセージを受信した仲介ノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図10(E)は、ルート到達メッセージを受信した仲介ノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図10(F)は、ルート到達メッセージを受信したUPnP非対応ノードnn(新規参加ノード)の処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図10(F)は、パブリッシュメッセージを受信したノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートである。
また、図11は、図9(B)に示すステップS24、図10(B)に示すステップS36、及び図10(C)に示すステップS39におけるノードnnの参加要求メッセージ転送処理の詳細を示すフローチャートである。
また、図12(A)は、仲介要求メッセージを受信したノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図12(B)は、接続要求メッセージを受信したノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図12(C)は、接続応答メッセージを受信したノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートである。
また、図13は、図9(C)に示すステップS29におけるノードnnのルーティングテーブル更新処理の詳細を示すフローチャートである。
図8(A)の処理は、ノードnnの電源が投入(電源ON)された場合に開始され、先ず、制御部11は、自己(自ノード)がUPnP非対応ノードであるか否かを自己の設定により判別し(ステップS1)、UPnP非対応ノードでない場合には(ステップS1:N)、ステップS2におけるUPnP対応ノードの参加要求処理を行い、UPnP非対応ノードである場合には(ステップS1:Y)、ステップS3におけるUPnP非対応ノードの参加要求処理を行う(詳細は後述)。
次いで、ステップS4では、制御部11は、UDP Hole維持イベントタイマ設定(例えば、3分後に起動するようにタイマ設定)を行う。
次いで、ステップS5では、制御部11は、電源OFFになったか否かを判別し、電源OFFになった場合には(ステップS5:Y)、当該処理を終了する。一方、電源OFFでない場合には(ステップS5:N)、制御部11は、ユーザによる入力部21からのコンテンツ要求操作があるか否かを判別し(ステップS6)、操作がある場合には(ステップS6:Y)、コンテンツ要求処理を行う(ステップS7)。このコンテンツ要求処理においては、制御部11は、ユーザにより入力部21を介して指定されたコンテンツデータのコンテンツIDが付加された(コンテンツIDをキーとする)クエリ(問合せ情報)を他のノードnnに対して送出し、上述したDHTルーティング(図2参照)により、当該コンテンツデータの所在情報を得て、当該コンテンツデータを、他のノードnnから取得(ダウンロード)して再生制御を行うことになる。
一方、ユーザによる入力部21からのコンテンツ要求操作がない場合には(ステップS6:N)、制御部11は、メッセージ(例えば、後述する参加要求メッセージ、参加応答メッセージ、ルート到達メッセージ、パブリッシュメッセージ、仲介要求メッセージ、接続要求メッセージ、接続応答メッセージ、仲介申込メッセージ、仲介承諾メッセージ等)の受信があるか否かを判別し(ステップS8)、当該受信がある場合には(ステップS8:Y)、当該メッセージ毎の処理(詳細は後述)を行う(ステップS9)。一方、メッセージの受信がない場合には(ステップS8:N)、ステップS5の処理に戻る。こうして上記処理は、ノードnnにおいて、電源OFFとなるまで繰り返し実行される。
次に、上記ステップS4にて設定されたUDP Hole維持イベントタイマが起動すると、図8(B)に示すUDP Hole維持イベント発生処理が開始され、接続状態維持手段としての制御部11は、UDP Hole維持のための空パケットを自己と対をなす仲介ノードに対して送信し(ステップS11)、UDP Hole維持イベントタイマ設定(例えば、3分後に起動するようにタイマ設定)を行い(ステップS12)、当該処理を終了する。こうして、UDP Hole維持イベント発生処理は、定期的に行われることになる。
次に、上記ステップS2におけるUPnP対応ノードの参加要求処理においては、図9(A)に示すように、当該UPnP対応ノードnn(新規参加ノード)の制御部11は、参加要求メッセージを送信すべきコンタクトノードnnのノード情報を取得(例えば、常時電源がONになっており、かつ、UPnP対応になっている複数のノードのノード情報を製品出荷時に記憶部12に記憶しておき、その中から例えばランダムに1つ選択)し(ステップS21)、当該コンタクトノードnnに対して、オーバーレイネットワーク9への参加要求を示す参加要求メッセージ(自己のIPアドレスを送り元アドレスとし、コンタクトノードのIPアドレスを宛先アドレスとした参加要求パケット)であって、自己のノードIDが付加された(自己のノードIDをキーとする)参加要求メッセージを、通信部20及びネットワーク8を介して(以下同じ)、送信し(ステップS22)、当該処理を終了する。なお、この参加要求メッセージには、UPnP対応ノードnnで有ることを示す情報が含まれる。
当該参加要求メッセージがノードnnにおいて受信されると、図9(B)に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがUPnP対応ノードnnである場合(その判断は、図8(A)に示すステップS9にて行われる)にのみ行われる処理である。
図9(B)に示すステップS23では、制御部11は、参加要求メッセージの送信元であるUPnP対応ノードnnに対して、自己のDHTのルーティングテーブルが付加された参加応答メッセージ(自己のIPアドレスを送り元アドレスとし、参加要求メッセージの送信元であるUPnP対応ノードnnのIPアドレスを宛先アドレスとした参加応答パケット)を送信する。
次いで、制御部11は、参加要求メッセージ転送処理(詳細は後述)を行い(ステップS24)、ルーティングテーブル更新処理を行い(ステップS25)、当該処理を終了する。このルーティングテーブル更新処理においては、制御部11は、自己のルーティングテーブルに登録されたノードIDのうち、参加要求メッセージに付加されたノードID(つまり、新規参加ノードのノードID)と最も近い(例えば、上位桁がより多く一致する)ノードIDに対応する仲介ノード情報がnullであるか否かが判別され、nullでない(つまり、UPnP非対応ノードnnである)場合には、当該ノードIDを含むノード情報が、参加要求メッセージに付加されたノードIDを含むノード情報に書き換え更新される。これにより、ルーティングテーブルに登録されるノード情報は、UPnP対応ノードnnのノード情報が優先してルーティングテーブルに登録されることになるので、円滑なルーティングテーブルにしていくことが可能となる。つまり、ルーティングテーブルに、UPnP非対応ノードnnのノード情報が多いと、仲介ノードを経由することになり非効率的であり、ネットワーク負荷としても望ましくないが、このように構成することで、効率的なルーティングテーブルを生成していくことができる。
上記参加応答メッセージが、参加要求メッセージの送信元であるノードnnにおいて受信されると、図9(C)に示す処理が開始される。
図9(C)に示すステップS26では、制御部11は、参加応答メッセージに添付されたルーティングテーブルを取得する。次いで、制御部11は、変数iを初期化(“0”に設定)し(ステップS27)、変数iがルーティングテーブルのセル数(例えば、図4に示す例では、セル数は、12個)より小さいか否かを判別し(ステップS28)、小さい場合には(ステップS28:Y)、ルーティングテーブル更新処理(詳細は後述)を行い(ステップS29)、変数iを“1”インクリメントしてステップS28に戻る。そして、当該処理は、変数iがセル数(例えば、12)に達する(ステップS28:N)まで、繰り返し行われる。
次に、上記ステップS3におけるUPnP非対応ノード(新規参加ノード)の参加要求処理においては、図10(A)に示すように、当該UPnP非対応ノードnnの制御部11は、アドレス情報取得手段として、参加要求メッセージを送信すべきコンタクトノードnnのノード情報を取得(例えば、常時電源がONになっており、かつ、UPnP対応になっている複数のノードのノード情報を製品出荷時に記憶部12に記憶しておき、その中から例えばランダムに1つ選択)し(ステップS31)、当該コンタクトノードnnを当該新規参加ノードnnの仲介ノードとして決定する。
ここで、UPnP対応になっている複数のノードのうちから、1のノードを仲介ノードとして選択する場合に、例えば、ネットワーク8に対して与える負荷が相対的に小さくなるノード、言い換えれば、新規参加ノードとネットワーク的に近い(例えば、HOP数が最も少ない(介在するルータ数が最も少ない))ノードが仲介ノードとして選択される(例えば、パケットを送受信してそのTTL値で判断)ように構成すれば、ネットワーク8に対して与える通信負荷を低減させることが可能となる(ネットワーク8に対して与える負荷が低減されたオーバーレイネットワーク9を構築することができる)。
続いて、制御部11は、仲介ノード位置情報ID(=仲介ノード位置情報を記憶させるノードを特定するためのID)を生成し、当該生成した仲介ノード位置情報IDと仲介ノード(コンタクトノードでもある)のIPアドレス及びポート番号を含む仲介ノード位置情報を、後ほどステップS45でパブリッシュのために使われるまで自己のメモリに記憶する(ステップS32)。
ここで、仲介ノード位置情報IDは、UPnP非対応ノードnnが任意に決めて良く、乱数によりランダムで生成されるようにしてもよいし、上述した共通のハッシュ関数、或いは異なるハッシュ関数で例えば自己の製造番号やIPアドレス等をハッシュ化して生成されるようにしてもよい(ただし、上述した共通のハッシュ関数で製造番号やIPアドレスをハッシュ化する場合、自己のノードIDと一致しないように製造番号やIPアドレスの末尾に所定値を付加した後、ハッシュ化する必要がある)。
次いで、当該UPnP非対応ノードnnの制御部11は、参加要求情報送信手段として、上記取得したノード情報におけるIPアドレス及びポート番号にしたがって、選択された仲介ノードnn(コンタクトノードでもある)に対して、自己のノードIDが付加された(自己のノードIDをキーとする)参加要求メッセージを送信し(ステップS33)、当該処理を終了する。なお、参加要求メッセージには、UPnP非対応ノードnnで有ることを示す情報、及び仲介ノードnnへの仲介申込を示す情報が含まれる。
こうして、例えば、図7(A)に示すように、新規参加ノードであるUPnP非対応ノードn16から、コンタクトノードでありかつ仲介ノードであるUPnP対応ノードn15に対して参加要求メッセージが送信されることになる。
当該参加要求メッセージが仲介ノードnnにおいて受信されると、図10(B)に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがUPnP非対応ノードnnであり、かつ仲介申込を示す情報を含む場合(その判断は、図8(A)に示すステップS9にて行われる)にのみ行われる処理である。
図10(B)に示すステップS34では、仲介ノードnnの制御部11は、参加要求メッセージの送信元であるUPnP非対応ノードnnのノード情報を、自己と対をなすノードのノード情報として登録(記憶)する。
次いで、当該制御部11は、参加要求メッセージの送信元であるUPnP非対応ノードnnに対して、自己のDHTのルーティングテーブルが付加された参加応答メッセージを送信する(ステップS35)。これにより、参加要求メッセージの送信元であるUPnP非対応ノードnnにおいては、上記と同様、図9(C)に示す処理が行われる。
こうして、例えば、図7(A)に示すように、仲介ノードであるUPnP対応ノードn15から、新規参加ノードであるUPnP非対応ノードn16に対して参加応答メッセージが送信されることになる。
次いで、制御部11は、参加要求メッセージ転送処理(詳細は後述)を行い(ステップS36)、ルーティングテーブル更新処理を行い(ステップS37)、当該処理を終了する。なお、ステップS37に示す処理は、前述の「UPnP対応ノードnnのノード情報を優先して登録」する場合は、不要である(当該処理を行っても登録されないからである)。一般には優先した方が好適であるが、システムに参加するノードの総数が少ないときには、優先しないで出来るだけ多数のノード情報をテーブルに記憶した方が良い場合もあるので、その場合は、ステップS37の処理が有効になる。
ステップS36に示す参加要求メッセージ転送処理により転送された参加要求メッセージが中継ノードnnにおいて受信されると、図10(C)に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがUPnP非対応ノードnnであり、かつ仲介申込を示す情報(この情報は仲介ノードにおいて削除される)を含まない場合(その判断は、図8(A)に示すステップS9にて行われる)にのみ行われる処理である。
図10(C)に示すステップS38では、中継ノードnn(図7(A)の例では、ノードn7)の制御部11は、仲介ノードnn(図7(A)の例では、ノードn15)に対して、自己のDHTのルーティングテーブルが付加された参加応答メッセージを送信する。
次いで、制御部11は、参加要求メッセージ転送処理(詳細は後述)を行い(ステップS39)、ステップS39の処理内で参加要求メッセージの転送を行ったか否かを判別し(ステップS40)、転送無しの場合(ステップS40:Y)、つまり、自己が参加要求メッセージの送信元のノード(ノードID)のルートノード(図7(A)の例では、ノードn1)の場合には、仲介ノードnn(図7(A)の例では、ノードn15)に対してルート到達メッセージを送信する(ステップS41)。言い換えると、新規に参加するノードのノードIDに一番近いノードIDを持つノードまで、参加要求メッセージは転送され、そこに辿り着くと、ルート到達メッセージが新規参加ノードに仲介ノード経由で返信されるのである。
次いで、制御部11は、ルーティングテーブル更新処理を行い(ステップS42)、当該処理を終了する。なお、ステップS42の処理は、前述の「UPnP対応ノードnnのノード情報を優先して登録」する場合は不要である。一般には優先した方が好適であるが、システムに参加するノードの総数が少ないときには、優先しないで出来るだけ多数のノード情報をテーブルに記憶した方が良い場合もあるので、その場合は、ステップS37の処理が有効になる。
上記ステップS38で送信された、DHTのルーティングテーブルが付加された参加応答メッセージが、仲介ノードnnにおいて受信されると、図10(D)に示す処理が開始される。仲介ノードnnは、参加要求メッセージの送信元であるUPnP非対応ノードnnに対して、当該参加応答メッセージを転送し(ステップS43)、当該処理を終了する。これにより、参加要求メッセージの送信元であるUPnP非対応ノードnnにおいては、上記と同様、図9(C)に示す処理が行われる。
一方、上記ステップS41で送信されたルート到達メッセージが、仲介ノードnnにおいて受信されると、図10(E)に示す処理が開始され、仲介ノードnnの制御部11は、参加要求メッセージの送信元であるUPnP非対応ノードnnに対して、当該ルート到達メッセージを転送し(ステップS44)、当該処理を終了する。
そして、当該送信されたルート到達メッセージが、参加要求メッセージの送信元であるUPnP非対応ノードnnにおいて受信されると、図10(F)に示す処理が開始され、当該UPnP非対応ノードnnの制御部11は、仲介ノード位置情報IDをキーとして、仲介ノード位置情報が付加されたパブリッシュメッセージを、DHTのルーティングテーブルに登録されたノードnn(仲介ノード位置情報IDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードnn)に向けて(直接通信ではなくDHTのメッセージ転送を介して)送信する(ステップS45)。
次いで、制御部11は、後述の仲介ノード切り換えタイミングを作り出すために、仲介ノード切り換えタイマ(例えば10分後にタイマ通知)をセットする(ステップS455)。
そして、当該パブリッシュメッセージが、ノードnnにおいて受信されると、図10(G)に示す処理が開始され、ノードnnの制御部11は、パブリッシュメッセージに付加された仲介ノード位置情報を登録(記憶)し(ステップS46)、DHTのルーティングテーブルに登録されたノードnnに対して転送する(ステップS47)。
こうして、図7(B)に示すように、新規参加ノードであるノードn16から送出されたパブリッシュメッセージは、仲介ノード位置情報のルートノードであるノードn6に至るまで転送され、当該パブリッシュメッセージが受信されたノードnnにおいて仲介ノード位置情報が登録されることになる。
次に、上記ステップS24、S36、S39における参加要求メッセージ転送処理においては、ノードnnの制御部11は、受信した参加要求メッセージからノードID(新規参加ノードのノードID)を取得し(ステップS241)、自己が当該新規参加ノード(ノードID)のルートノードであるか否かを、つまり新規参加ノードのノードIDが自己のノードIDと最も近い(例えば、上位桁がより多く一致する)か否かを判断する(ステップS242)。自己が新規参加ノードのルートノードである(新規参加ノードのノードIDが自己のノードIDと最も近い)場合には(ステップS242:Y)、図9(B)、図10(B)、又は図10(C)に示す処理に戻る。
一方、自己が新規参加ノードのルートノードでない場合には(ステップS242:N)、当該制御部11は、自己のルーティングテーブルから転送先となるノードnn(新規参加ノードのノードIDと最も近い(例えば、上位桁がより多く一致する)ノードnn)のノード情報を取得し(ステップS243)、当該取得したノード情報に含まれる仲介ノード情報がnullであるか否かを判別する(ステップS244)。
仲介ノード情報がnullである場合(つまり、転送先となるノードがUPnP対応ノードnnである)には(ステップS244:Y)、当該制御部11は、参加要求メッセージを、転送先となるノードnnに対して転送する(ステップS245)。
ここで、当該参加要求メッセージの送信元がUPnP対応ノードnnである場合、転送される参加要求メッセージには、当該UPnP対応ノードnnのノード情報が含まれ、当該参加要求メッセージの送信元がUPnP非対応ノードnnである場合、転送される参加要求メッセージには、当該UPnP非対応ノードnnの仲介ノードnnのノード情報が含まれることになる。
一方、仲介ノード情報がnullでない場合(つまり、転送先となるノードがUPnP非対応ノードnnである)には(ステップS244:N)、直接、参加要求メッセージを転送できないので、上記図5を用いて説明したように、仲介ノードnnを介した処理を行うことになる。具体的には、ステップS246では、制御部11は、上記転送先となるUPnP非対応ノードnnの仲介ノードnn宛に、仲介ノード位置情報IDが付加された(当該IDをキーとする)仲介要求メッセージ(自己のノード情報を含む)を送信する。次いで、制御部11は、自己がUPnP非対応ノードであるか否かを判別し(ステップS247)、自己がUPnP非対応ノードである場合には(ステップS247:Y)、自己に対応するNAT外側(つまり、NAT機能搭載ルータ)のポートを開放するために、転送先となるノードnn宛にダミーパケットを送信し(ステップS248)、ステップS249に移行する。一方、自己がUPnP非対応ノードでない場合には(ステップS247:N)、ステップS249に移行し、参加要求メッセージを一時保管し、図9(B)、図10(B)、又は図10(C)に示す処理に戻る。
上記ステップS246で送出された仲介要求メッセージがノードnnにおいて受信されると、図12(A)に示す処理が開始され、ノードnnの制御部11は、自己が参加要求メッセージの送信元であるUPnP非対応ノードnnの仲介ノードnnであるか否かを判別する(ステップS51)。自己が仲介ノードnnでない場合には(ステップS51:N)、制御部11は、自己が仲介ノード位置情報を保持しているか否かを判別し(ステップS53)し、仲介ノード位置情報を保持していない場合には(ステップS53:N)、図5に示すように、仲介ノード位置情報IDをキーとしてDHTルーティングにより仲介要求メッセージを中継ノードに対して転送し(ステップS54)、当該処理を終了する。一方、制御部11は、仲介ノード位置情報を保持している場合には(ステップS53:Y)、当該仲介ノード位置情報に含まれるIPアドレス及びポート番号にしたがって、図5に示すように、転送手段として、仲介ノードnnに対して仲介要求メッセージを転送し(ステップS55)、当該処理を終了する。
一方、制御部11は、自己が仲介ノードnnである場合には(ステップS51:Y)、図5に示すように、転送先となるUPnP非対応ノードnnに対して接続要求メッセージを送信し(ステップS52)、当該処理を終了する。
これに対して、接続要求メッセージが転送先となるUPnP非対応ノードnnにおいて受信されると、図12(B)に示す処理が開始され、当該ノードnnの制御部11は、図5に示すように、仲介要求メッセージの送信元であるノードnnに対して接続応答メッセージを送信し(ステップS56)、当該処理を終了する。
これに対して、接続応答メッセージが仲介要求メッセージの送信元であるノードnnにおいて受信されると、図12(C)に示す処理が開始され、当該ノードnnの制御部11は、上記ステップS249にて一時保管しておいた参加要求メッセージを、転送先となるUPnP非対応ノードnnに対して送信し(ステップS57)、当該処理を終了する。
次に、上記ステップS29におけるルーティングテーブル更新処理においては、図13に示すように、参加要求メッセージの送信元であるノードnn(新規参加ノード)の制御部11は、自己のルーティングテーブルのi番目のセルにノード情報が登録済か否かを判別し(ステップS291)、登録済でない場合には(ステップS291:N)、取得したルーティングテーブルのi番目のセルに登録されたノード情報を、自己のルーティングテーブルのi番目のセルに登録(自己に対応するエリアのセルである場合には、登録は行わない、また、登録すべきノード情報が取得したルーティングテーブルのセルに記述されていない場合も、登録は行われない)し(ステップS294)、図9(C)に示す処理に戻る。
一方、自己のルーティングテーブルのi番目のセルにノード情報が登録済である場合には(ステップS291:Y)、当該制御部11は、自己のルーティングテーブルのi番目のセルに登録された仲介ノード情報がnullであるか否かを判別し(ステップS292)、nullである場合には(ステップS292:Y)、更新することなく、図9(C)に示す処理に戻り、nullでない場合には(ステップS292:N)、取得したルーティングテーブルのi番目のセルに登録された仲介ノード情報がnullであるか否かを判別する(ステップS293)。
そして、当該制御部11は、取得したルーティングテーブルのi番目のセルに登録された仲介ノード情報がnullである場合には(ステップS293:Y)、自己のルーティングテーブルのi番目のセルに登録されているノード情報を、取得したルーティングテーブルのi番目のセルに登録されたノード情報に更新登録し(ステップS294)、一方、nullでない場合には(ステップS293:N)、更新することなく、図9(C)に示す処理に戻る。
これにより、上記ステップS25と同様、ルーティングテーブルに登録されるノード情報は、UPnP対応ノードnnのノード情報が優先してルーティングテーブルに登録されることになるので、円滑なルーティングテーブルにしていくことが可能となる。当該処理は、図9(C)に示すステップS28において変数iがセル数に達するまで繰り返し行われることになる。なお、変数i=0番目のセルは、例えば図5に示すエリア1に対応するセルを示し、変数i=11番目のセルは、例えば図4に示すエリア12に対応するセルを示す。つまり、変数iが“1”増すに従い、エリア番号も“1”増すことになる。
(仲介ノードnnがオーバーレイネットワーク9から脱退した場合、あるいは仲介ノードを一定時間後に切り換える場合の動作)
次に、図14及び図15を参照して、仲介ノードを参加完了後一定時間後に切り換える場合、あるいは、仲介ノードnnがオーバーレイネットワーク9から脱退した際の動作について説明する。
図14(A)は、DHTのノードID空間において、仲介申込メッセージ等の流れの一例を示す図であり、図14(B)は、DHTのノードID空間において、パブリッシュメッセージの流れの一例を示す図である。
図15(A)は、UPnP非対応ノードnnが自己と対をなす仲介ノードnnの脱退を検出した場合の処理を示すフローチャートであり、図15(B)は、UPnP非対応ノードnnから送出された仲介申込メッセージを受信した場合における仲介ノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図15(C)は、仲介ノードnnから送出された仲介承諾メッセージを受信した場合におけるUPnP非対応ノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図15(D)は、パブリッシュメッセージを受信したノードnnの処理(ステップS9におけるメッセージ毎の処理)を示すフローチャートであり、図15(E)は、UPnP非対応ノードが参加完了後の一定時間後に自主的に仲介ノードを切り換える場合の処理を示すフローチャートである。
図15(A)は、UPnP非対応ノードnnの制御部11が脱退検出手段として、自己と対をなす仲介ノードnn(図14(A)の例では、仲介ノードn15)の脱退を検出した場合に開始され、当該制御部11は、アドレス情報取得手段として、新規仲介ノード候補の仲介ノード位置情報を取得(例えば、常時電源がONになっており、かつ、UPnP対応になっている複数のノードのノード情報を製品出荷時に記憶部12に記憶しておき、その中から例えばランダムに1つ選択したノードを仲介ノードとして選択)する(ステップS61)。
ここで、UPnP対応になっている複数のノードのうちから、1のノードを仲介ノードとして選択する場合に、例えば、ネットワーク8に対して与える負荷が相対的に小さくなるノード、言い換えれば、新規参加ノードとネットワーク的に近い(例えば、HOP数が最も少ない(介在するルータ数が最も少ない))ノードが仲介ノードとして選択される(例えば、パケットを送受信してそのTTL値で判断)ように構成すれば、ネットワーク8に対して与える通信負荷を低減させることが可能となる(ネットワーク8に対して与える負荷が低減されたオーバーレイネットワーク9を構築することができる)。
次いで、当該制御部11は、仲介申込情報送信手段として、取得した仲介ノード位置情報に含まれるIPアドレス及びポート番号にしたがって、図14(A)に示すように、新規仲介ノード候補に対して仲介申込情報としての仲介申込メッセージ(自己のノード情報が含まれる)を送信する(ステップS62)。
これに対して、仲介申込メッセージが、新規仲介ノード候補において受信されると、図15(B)に示す処理が開始され、当該ノードnnの制御部11は、仲介申込メッセージの送信元であるUPnP非対応ノードnnのノード情報を登録し(ステップS63)、図14(A)に示すように、当該仲介申込メッセージの送信元であるUPnP非対応ノードnnに対して仲介承諾メッセージを送信し(ステップS64)、当該処理を終了する。これにより、UPnP非対応ノードnnは、自己と対をなすUPnP対応ノードnnがオーバーレイネットワーク9から脱退したとしても、新たに自己と対をなすUPnP対応ノードnnに効率よく接続することができる。
これに対して、仲介承諾メッセージが、仲介申込メッセージの送信元であるUPnP非対応ノードnnにおいて受信されると、図15(C)に示す処理が開始され、UPnP非対応ノードnnの制御部11は、仲介ノード位置情報を更新登録し(ステップS65)、仲介ノード位置情報IDをキーとして、当該更新された仲介ノード位置情報が付加されたパブリッシュメッセージを、図14(B)に示すように、DHTのルーティングテーブルに登録されたノードnnに対して送信する(ステップS66)。
そして、当該パブリッシュメッセージが、ノードnnにおいて受信されると、図15(D)に示す処理が開始され、ノードnnの制御部11は、パブリッシュメッセージに付加された仲介ノード位置情報を登録し(ステップS67)、図14(B)に示すように、DHTのルーティングテーブルに登録されたノードnnに対して転送する(ステップS68)。
一方、図15(E)は、上記ステップS455で仕掛けた(セットした)仲介ノード切り換えタイマが起動(カウントアップ)した場合に開始され、当該制御部11は、アドレス情報取得手段として、新規仲介ノード候補の仲介ノード位置情報を取得(自己のルーティングテーブル中から、UPnP対応ノード(仲介ノード情報がnullであるノード)の情報を集め、その中から例えばランダムに1つ選択したノードを仲介ノードとして選択)する(ステップS71)。次いで、当該制御部11は、現在の仲介ノードに対して、仲介ノードの解除要求を示す仲介依頼解除メッセージを送信する(ステップS72)。ルーティングテーブルは、他のノードからのメッセージを中継するうちに時間と共にUPnP対応ノードの情報も蓄積されているので、タイマが起動してから十分な時間が経過していれば、UPnP対応ノードがテーブルに登録されている確率は高い。もし、UPnP対応ノードがルーティングテーブル中に見つからなかった場合は、再度タイマをセットさせる。
次いで、当該制御部11は、上記ステップS62と同様、上記取得した仲介ノード位置情報に含まれるIPアドレス及びポート番号にしたがって、新規仲介ノード候補に対して仲介申込情報としての仲介申込メッセージを送信する(ステップS73)。なお、ステップS73で送信された仲介申込メッセージは、上記と同様、他のノードnnにおいて受信され、図15(B)の処理が行われることになる。
コンタクトノード(=仲介ノード)の選び方で、「常時電源がONになっており、かつ、UPnP対応になっている複数のノードのノード情報を製品出荷時に記憶部12に記憶しておき、その中から例えばランダムに1つ選択する」とした場合、そのままでは、製品出荷時に知っていたノードばかりが仲介ノードになってしまい、そのノードにアクセス集中が起きてしまう。そこで、このように、仲介ノードを参加後一定時間で切り換えることにより、システム内のUPnPノード全体で、負荷を分散することができる。
以上説明したように、上記実施形態によれば、オーバーレイネットワーク9に参加しているUPnP対応ノードnnとこれに接続されたUPnP非対応ノードnnとの対を複数有し、各ノードnnは、自己と対をなすノードnn以外の他のUPnP非対応ノードnnに接続する場合には、当該他のUPnP非対応ノードnnと対をなす他のUPnP対応ノードnnを仲介して当該他のUPnP非対応ノードnnに接続するように構成したので、仲介サーバのような特定の装置へのアクセス集中を回避することができ、UPnP非対応ノードnnが多くあっても、より安定したオーバーレイネットワーク9を構築することができる。
なお、上記実施形態において、オーバーレイネットワーク9に参加しているUPnP非対応ノードnnの数がUPnP対応ノードnnの数より多くなってくると、仲介ノードnnを介することが過多になり望ましくない。これを回避するため、UPnP非対応ノードnnは、UPnP対応ノードnnである仲介ノードnnと、専用の仲介サーバとの双方に対して、UDP Holeを維持(つまり、ハイブリット化)するように構成し、当該UPnP非対応ノードnnと通信を行いたいノードnnは、仲介要求メッセージを、DHTルーティングによって、UPnP非対応ノードnnと対をなす仲介ノードnnのノードIDのルートノードまで転送させ、当該ルートノードからの返答を一定時間待機し、返答が得られなかった場合に、UPnP非対応ノードnnと対をなす専用の仲介サーバに対して仲介要求メッセージを送信するように構成してもよい。なお、当該UPnP非対応ノードnnと通信を行いたいノードnnは、自己のDHTのルーティングテーブルに登録されているノードnnのうちUPnP非対応ノードnnが占める割合が閾値を越える場合には、仲介ノードnnに仲介要求メッセージを送らずに、いきなり専用の仲介サーバに対して仲介要求メッセージを送信するように構成してもよい。
また、上記実施形態においては、DHTのルーティングテーブルに登録されたノード情報に含まれる仲介ノード情報には、仲介ノード位置情報IDが含まれるように構成したがこれに限定されるものではなく、仲介ノード情報には、仲介ノード位置情報IDの代わりに、仲介ノードnnのIPアドレス及びポート番号を含めるように構成してもよい。この構成によれば、図5に示したように、ノードn1からノードn6まで仲介要求メッセージを転送させることなく、ノードn1から直接、仲介要求メッセージを仲介ノードn7に送信することができるので、メッセージ送信手順を簡素化し、ネットワーク8に対して与える通信負荷を低減することができる。ただし、この場合、仲介ノードnnが変わったとき、そのIPアドレス及びポート番号をオーバーレイネットワーク9に参加しているノードnnに伝えるのに時間がかかり効率的ではない。この点では、仲介ノード情報に、仲介ノード位置情報IDを含ませた方が、DHTルーティングによって仲介ノードnnを発見できるので効率的である。
また、上記実施形態においては、DHTを利用したアルゴリズムによって構築されたオーバーレイネットワーク9を前提として説明したが、本発明はこれに限定されるものではない。