ピアツーピア方式の通信システムに参加するノード装置は、LAN(Local Area Network)等のプライベートなアドレス空間を有するネットワークに接続している場合がある。この場合、ノード装置がピアツーピア方式でLAN外のノード装置と通信するためには、NAT(Network Address Translation)越え(NAT traversal)が必要となる。そのため、ノード装置のグローバルアドレス及びポート番号をノード装置が取得するため等のアドレス解決を行う専用のサーバ装置が必要となる場合がある。
しかしながら、専用のサーバ装置を設けると、ノード装置が増加するにつれて、このサーバ装置にアドレス解決のためのアクセスが集中する。そうすると、ピアツーピア方式の通信システムを採用したことによる効果が十分に得られない場合があった。
そこで、本発明は、以上の点に鑑みてなされたものである。本発明は、接続するネットワークが互いに異なるノード装置同士が通信を行う場合に、アドレス解決のための処理負荷を軽減させることを可能とする情報通信システム、中継ノード装置及び情報通信方法等を提供することを目的とする。
上記課題を解決するために、請求項1に記載の発明は、複数のノード装置が、少なくとも1つのプライベートネットワークを含むネットワークを介して互いにメッセージを送受信する情報通信システムであって、前記情報通信システムは、前記プライベートネットワークに接続し、前記プライベートネットワークと、前記プライベートネットワークとは異なる外部ネットワークとの間で、前記メッセージを中継する中継ノード装置を、前記複数のノード装置の中に含み、前記中継ノード装置は、前記中継ノード装置のアドレス情報として、前記プライベートネットワークにおけるアドレス情報であるプライベートアドレス情報と、前記外部ネットワークにおけるアドレス情報であるグローバルアドレス情報と、を取得する取得手段と、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合には、前記取得手段により取得された前記グローバルアドレス情報を当該メッセージに含め、前記外部ネットワークから前記接続するプライベートネットワークへの前記メッセージを中継する場合には、前記取得手段により取得された前記プライベートアドレス情報を当該メッセージに含めて中継する中継手段と、を備え、前記プライベートネットワークに接続する前記ノード装置は、前記外部ネットワークに接続する前記ノード装置宛のメッセージを、前記中継ノード装置を介して送信する送信手段を備えることを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したノード装置は、受信したメッセージに含まれていたアドレス情報に基づいて、中継ノード装置にメッセージを送信することができる。そして、中継ノード装置は、受信したメッセージを中継することができる。このように、中継ノード装置を介してプライベートネットワーク内とプライベートネットワーク外とのメッセージの送受信が行われるので、アドレス解決のための処理負荷を軽減させることができる。
請求項2に記載の発明は、請求項1に記載の情報通信システムにおいて、前記プライベートネットワークと前記外部ネットワークとを相互接続する通信機器を更に備え、前記中継ノード装置の前記中継手段は、前記通信機器における前記外部ネットワークの側の複数のポートのうち、前記中継ノード装置のために割り当てられた所定数のポートに基づき、前記外部ネットワークに対する前記メッセージの送受信を前記通信機器を介して行うことを特徴とする。
この発明によれば、通信機器においては、中継ノード装置がプライベートネットワーク外との通信を行うために必要なポートを開放する。そうしておけば、プライベートネットワーク内のノード装置とプライベートネットワーク外のノード装置とが中継ノード装置を介してメッセージを送受信することができる。よって、ノード装置毎にポートを開放する必要が無いので、プライベートネットワーク外からの不正通信等に対する安全性を高めることができる。また、通信機器において、アドレス変換に必要なテーブルが埋まってしまうことを防止することができる。
請求項3に記載の発明は、請求項2に記載の情報通信システムにおいて、前記中継ノード装置の前記中継手段は、前記通信機器において前記中継ノード装置のために割り当てられた前記外部ネットワークの側の所定の1つのポートに基づき、前記外部ネットワークに対する前記メッセージの送受信を、前記通信機器を介して行うことを特徴とする。
この発明によれば、通信機器において、中継ノード装置のために1つのポートを開放しておけば良いので、安全性をより高めることができる。
請求項4に記載の発明は、複数のノード装置が、少なくとも1つのプライベートネットワークを含むネットワークを介して互いにメッセージを送受信する情報通信システムにおいて、前記メッセージを中継する前記ノード装置である中継ノード装置であって、前記情報通信システムは、前記プライベートネットワークに接続し、前記プライベートネットワークと、前記プライベートネットワークとは異なる外部ネットワークとの間で、前記メッセージを中継する中継ノード装置を、前記複数のノード装置の中に含み、前記中継ノード装置は、前記中継ノード装置のアドレス情報として、前記プライベートネットワークにおけるアドレス情報であるプライベートアドレス情報と、前記外部ネットワークにおけるアドレス情報であるグローバルアドレス情報と、を取得する取得手段と、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合には、前記取得手段により取得された前記グローバルアドレス情報を当該メッセージに含め、前記外部ネットワークから前記接続するプライベートネットワークへの前記メッセージを中継する場合には、前記取得手段により取得された前記プライベートアドレス情報を当該メッセージに含めて中継する中継手段と、を備えることを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したノード装置は、受信したメッセージに含まれていたアドレス情報に基づいて、中継ノード装置にメッセージを送信することができる。そして、中継ノード装置は、プライベートネットワーク外のノード装置にメッセージを中継することができる。このように、中継ノード装置を介してプライベートネットワーク内とプライベートネットワーク外とのメッセージの送受信が行われるので、アドレス解決のための処理負荷を軽減させることができる。
請求項5に記載の発明は、請求項4に記載の中継ノード装置において、前記情報通信システムは、前記プライベートネットワークと前記外部ネットワークとを相互接続する通信機器を備え、前記中継手段は、前記通信機器における前記外部ネットワークの側の複数のポートのうち、前記中継ノード装置のために割り当てられた所定数のポートに基づき、前記外部ネットワークに対する前記メッセージの送受信を前記通信機器を介して行うことを特徴とする。
この発明によれば、通信機器においては、中継ノード装置がプライベートネットワーク外との通信を行うために必要なポートを開放する。そうしておけば、プライベートネットワーク内のノード装置とプライベートネットワーク外のノード装置とが中継ノード装置を介してメッセージを送受信することができる。よって、ノード装置毎にポートを開放する必要が無いので、プライベートネットワーク外からの不正通信等に対する安全性を高めることができる。また、通信機器において、アドレス変換に必要なテーブルが埋まってしまうことを防止することができる。
請求項6に記載の発明は、請求項5に記載の情報通信システムにおいて、前記中継手段は、前記通信機器において前記中継ノード装置のために割り当てられた前記外部ネットワークの側の所定の1つのポートに基づき、前記外部ネットワークに対する前記メッセージの送受信を、前記通信機器を介して行うことを特徴とする。
この発明によれば、通信機器において、中継ノード装置のために1つのポートを開放しておけば良いので、安全性をより高めることができる。
請求項7に記載の発明は、請求項4乃至6の何れか1項に記載の中継ノード装置において、前記メッセージは、当該メッセージの宛先として以外に付加される前記ノード装置のアドレス情報を含み、前記中継手段は、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合、前記メッセージに付加されるアドレス情報として前記中継ノード装置のグローバルアドレス情報を前記メッセージに含めることを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク外のノード装置は、受信したメッセージに含まれていたアドレス情報を、送信するメッセージに、宛先のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノード装置に送信される。
請求項8に記載の発明は、請求項7に記載の中継ノード装置において、前記メッセージは、前記アドレス情報を1つ以上含み、前記中継手段は、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合、当該メッセージに含まれる各前記アドレス情報に、前記中継ノード装置のグローバルアドレス情報を追加することを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク外のノード装置は、受信したメッセージに含まれていたアドレス情報を、送信するメッセージに、宛先のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノード装置に送信される。そして、中継ノード装置が、例えば、受信したメッセージに含まれている宛先のアドレス情報に含まれているアドレス情報のうち、中継ノード装置のグローバルアドレス情報以外のアドレス情報に基づいて、メッセージを転送すれば良い。そうすることで、他のノード装置にメッセージを中継することができる。
請求項9に記載の発明は、請求項7又は請求項8に記載の中継ノード装置において、前記中継手段が中継するメッセージが、前記プライベートネットワークから前記外部ネットワークへ送信されるメッセージであるか否かを判定する第1判定手段を更に備え、前記第1判定手段により、前記プライベートネットワークから前記外部ネットワークへ送信されるメッセージであると判定されたとき、前記中継手段は、前記メッセージに前記グローバルアドレス情報を含めることを特徴とする。
この発明によれば、中継ノード装置のグローバルアドレス情報を追加すべきメッセージであるか否かを的確に判断することができる。
請求項10に記載の発明は、請求項7乃至9の何れか1項に記載の中継ノード装置において、前記中継手段が中継するメッセージが、前記外部ネットワークから前記プライベートネットワークへ送信されるメッセージであるか否かを判定する第2判定手段を更に備え、前記第2判定手段により、前記外部ネットワークから前記プライベートネットワークへ送信されるメッセージであると判定されたとき、前記メッセージが含む前記アドレス情報から、前記中継ノード装置のグローバルアドレスを削除することを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク内のノード装置が応答する場合、応答のメッセージは中継ノード装置により中継されず、プライベートネットワーク内のノード装置間で送受信される。従って、中継ノード装置の中継負荷を軽減させることができる。
請求項11に記載の発明は、請求項7乃至10の何れか1項に記載の中継ノード装置において、前記中継手段は、前記プライベートネットワークから前記外部ネットワークへ、前記メッセージを中継する場合、前記メッセージに前記中継ノード装置のプライベートアドレス情報が含まれているか否かを判定する第3判定手段を更に備え、前記中継手段は、前記第3判定手段により前記中継ノード装置の前記プライベートアドレス情報が含まれていないと判定された場合に、前記メッセージに前記中継ノード装置のグローバルアドレス情報を追加し、前記第3判定手段により前記中継ノード装置のプライベートアドレス情報が含まれていると判定された場合に、前記メッセージから前記プライベートアドレス情報を削除することを特徴とする。
この発明によれば、プライベートネットワーク内からプライベートネットワーク外へメッセージを中継する際の、中継ノード装置のアドレス情報の追加又は削除の制御を的確に行うことができる。
請求項12に記載の発明は、請求項4乃至11の何れか1項に記載の中継ノード装置において、前記メッセージは、当該メッセージの宛先として以外に付加される前記ノード装置のアドレス情報を含み、前記中継手段は、前記外部ネットワークから前記プライベートネットワークへ前記メッセージを中継する場合、前記メッセージに付加される前記アドレス情報として前記中継ノード装置のプライベートアドレス情報を前記メッセージに含めることを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク内のノード装置は、受信したメッセージに含まれていたアドレス情報を、送信するメッセージに、宛先のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノード装置に送信される。
請求項13に記載の発明は、請求項12に記載の中継ノード装置において、前記メッセージは、前記アドレス情報を1つ以上含み、前記中継手段は、前記外部ネットワークから前記プライベートネットワークへ前記メッセージを中継する場合、当該メッセージに含まれる各前記アドレス情報に、前記中継ノード装置のプライベートアドレス情報を追加することを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク内のノード装置は、受信したメッセージに含まれていたアドレス情報を、送信するメッセージに、宛先のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノード装置に送信される。そして、中継ノード装置が、例えば、受信したメッセージに含まれている宛先のアドレス情報に含まれているアドレス情報のうち、中継ノード装置のプライベートアドレス情報以外のアドレス情報に基づいて、メッセージを転送すれば良い。そうすることで、他のノード装置にメッセージを中継することができる。
請求項14に記載の発明は、請求項12又は請求項13に記載の中継ノード装置において、前記中継手段が中継するメッセージが、前記外部ネットワークから前記プライベートネットワークへ送信されるメッセージであるか否かを判定する第4判定手段を更に備え、前記第4判定手段により、前記外部ネットワークから前記プライベートネットワークへ送信されるメッセージであると判定されたとき、前記中継手段は、前記メッセージに前記プライベートアドレス情報を含めることを特徴とする。
この発明によれば、中継ノード装置のプライベートアドレス情報を追加すべきメッセージであるか否かを的確に判断することができる。
請求項15に記載の発明は、請求項12乃至14の何れか1項に記載の中継ノード装置において、前記中継手段が中継するメッセージが、前記プライベートネットワークから前記外部ネットワークへ送信されるメッセージであるか否かを判定する第5判定手段を更に備え、前記第5判定手段により、前記プライベートネットワークから前記外部ネットワークへ送信されるメッセージであると判定されたとき、前記メッセージが含む前記アドレス情報から、前記中継ノード装置のプライベートアドレスを削除することを特徴とする。
この発明によれば、中継ノード装置からメッセージを受信したプライベートネットワーク外のノード装置が応答する場合、応答のメッセージは中継ノード装置により中継されず、プライベートネットワーク外のノード装置間で送受信される。従って、中継ノード装置の中継負荷を軽減させることができる。
請求項16に記載の発明は、請求項12乃至15の何れか1項に記載の中継ノード装置において、前記中継手段は、前記外部ネットワークから前記プライベートネットワークへ、前記メッセージを中継する場合、前記メッセージに前記中継ノード装置のグローバルアドレス情報が含まれているか否かを判定する第6判定手段を更に備え、前記中継手段は、前記第6判定手段により前記中継ノード装置の前記グローバルアドレス情報が含まれていないと判定された場合に、前記メッセージに前記中継ノード装置のプライベートアドレス情報を追加し、前記第6判定手段により前記中継ノード装置のグローバルアドレス情報が含まれていると判定された場合に、前記メッセージから前記グローバルアドレス情報を削除することを特徴とする。
この発明によれば、プライベートネットワーク外からプライベートネットワーク内へメッセージを中継する際の、中継ノード装置のアドレス情報の追加又は削除の制御を的確に行うことができる。
請求項17に記載の発明は、複数のノード装置が、少なくとも1つのプライベートネットワークを含むネットワークを介して互いにメッセージを送受信する情報通信システムにおいて、前記メッセージを中継する前記ノード装置である中継ノード装置における情報通信方法であって、前記情報通信システムは、前記プライベートネットワークに接続し、前記プライベートネットワークと、前記プライベートネットワークとは異なる外部ネットワークとの間で、前記メッセージを中継する中継ノード装置を、前記複数のノード装置の中に含み、前記中継ノード装置が、前記中継ノード装置のアドレス情報として、前記プライベートネットワークにおけるアドレス情報であるプライベートアドレス情報と、前記外部ネットワークにおけるアドレス情報であるグローバルアドレス情報と、を取得する取得工程と、前記中継ノード装置が、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合には、前記取得工程において取得された前記グローバルアドレス情報を当該メッセージに含め、前記外部ネットワークから前記接続するプライベートネットワークへの前記メッセージを中継する場合には、前記取得工程において取得された前記プライベートアドレス情報を当該メッセージに含めて中継する中継工程と、を有することを特徴とする。
請求項18に記載の発明は、複数のノード装置が、少なくとも1つのプライベートネットワークを含むネットワークを介して互いにメッセージを送受信する情報通信システムにおいて、前記メッセージを中継する前記ノード装置である中継ノード装置における情報通信プログラムであって、前記情報通信システムは、前記プライベートネットワークに接続し、前記プライベートネットワークと、前記プライベートネットワークとは異なる外部ネットワークとの間で、前記メッセージを中継する中継ノード装置を、前記複数のノード装置の中に含み、前記中継ノード装置に含まれるコンピュータに、前記中継ノード装置のアドレス情報として、前記プライベートネットワークにおけるアドレス情報であるプライベートアドレス情報と、前記外部ネットワークにおけるアドレス情報であるグローバルアドレス情報と、を取得する取得ステップと、前記プライベートネットワークから前記外部ネットワークへ前記メッセージを中継する場合には、前記取得ステップにおいて取得された前記グローバルアドレス情報を当該メッセージに含め、前記外部ネットワークから前記接続するプライベートネットワークへの前記メッセージを中継する場合には、前記取得ステップにおいて取得された前記プライベートアドレス情報を当該メッセージに含めて中継する中継ステップと、を実行させることを特徴とする。
本発明によれば、メッセージを受信したノード装置は、受信したメッセージに含まれていたアドレス情報に基づいて、中継ノード装置にメッセージを送信することができる。そして、中継ノード装置は、プライベートネットワーク外のノード装置にメッセージを中継することができる。このように、中継ノード装置を介してプライベートネットワーク内とプライベートネットワーク外とのメッセージの送受信が行われるので、アドレス解決のための処理負荷を軽減させることができる。
以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
[1.コンテンツ分散保存システムの概要構成]
始めに、図1を参照して、本実施形態に係るコンテンツ分散保存システムの概要構成について説明する。
図1は、本実施形態に係るコンテンツ分散保存システムSにおける各ノード装置の接続態様の一例を示す図である。
図1に示すように、コンテンツ分散保存システムSは、複数のノード装置Nnがネットワーク5を介して接続されることで構成される。ネットワーク5は、現実世界の通信ネットワークである。例えば、ネットワーク5は、インターネットで等ある。このネットワーク5は、複数のLANm(m=1,2,3の何れか)と、WAN(Wide Area Network)4とにより構成されている。また、ネットワーク5には、LANmとLANm、又は、LANmとWAN4とを相互接続するためのルータRTが挿入されている。ルータRTは、例えば、ブロードバンドルータであったり、ファイアーウォールであったりする。
各ノード装置Nn(n=1,2,3・・・の何れか)は、ネットワーク5を構成するLANm又はWAN4に接続されている。以下、ノード装置を、「ノード」という。なお、WAN4に接続するノードNnの中には、例えば、他のノードNnが接続していないLANに単独で接続し、且つNAT越えが可能なノードNnも含まれる。つまり、後述する中継ノードNnを介さなくてもLAN外に対するメッセージの送受信が可能であり、且つ、後述する中継を行う必要が無いノードNnも、WAN4に接続するノードNnとして図1には示されている。各ノードNnには、固有の製造番号及びIP(Internet Protocol)アドレスが割り当てられている。そして、本実施形態に係るコンテンツコンテンツ分散保存システムSは、これらのノードNnのうち、何れか複数のノードNnの接続により形成されるピアツーピア方式のネットワークシステムとなっている。
このピアツーピア方式のネットワークは、図1に示すネットワーク6である。このネットワーク6は、既存のネットワーク5を用いて形成された仮想的なリンクを構成するオーバーレイネットワークである。論理的なネットワークであるネットワーク6は、特定のアルゴリズム、例えば、DHTを利用したアルゴリズムにより実現される。そして、コンテンツ分散保存システムSに接続されている各ノードNnには、所定桁数からなる固有の識別情報であるノードIDが割り当てられている。
なお、コンテンツ分散保存システムSへの接続は、接続していないノードNn、例えば、ノードN8が、接続している任意のノードNnに対してコンテンツ分散保存システムへの参加要求を示す参加メッセージを送信することによって行われる。コンテンツ分散保存システムSへの参加とは、ノードNnが分散保存システムSに接続され、コンテンツ分散保存システムSからコンテンツデータを取得可能になることである。任意のノードNnは、例えば、コンテンツ分散保存システムシステムSに常時接続しているコンタクトノードである。
また、各ノードNnは、夫々、DHT(Distributed Hash Table)を用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムS上における各種メッセージの転送先を規定している。具体的に、このルーティングテーブルには、ID空間内で適度に離れたノードNnのノードID、IPアドレス及びポート番号を含むノード情報が複数登録されている。なお、IPアドレスとポート番号との組を、「アドレス情報」という。
コンテンツ分散保存システムSに接続している1台のノードNnは、必要最低限のノードNnのノード情報をルーティングテーブルとして記憶している。各ノードNn間で互いに各種メッセージが転送されることで、ノード情報を記憶していないノードNnについてのノード情報が取得される。
このようなDHTを用いたルーティングテーブルについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
コンテンツ分散保存システムSは、内容の異なる様々なコンテンツデータのレプリカを所定のファイル形式で複数のノードNnに分散して保存する。以下、コンテンツデータを、「コンテンツ」という。そして、各ノードNn間でレプリカが利用可能になっている。各コンテンツのオリジナルはセンターサーバSAに保存されている。以下、コンテンツのレプリカが保存されるノードNは、「コンテンツ保持ノード」という。以下の説明においては、オリジナルのコンテンツとレプリカとを特に区別することなく、コンテンツと称する。
上述のコンテンツには、夫々、コンテンツ名及びコンテンツ毎に固有の識別情報であるコンテンツID等の情報が付加されている。
分散保存されているコンテンツの所在は、インデックス情報として、コンテンツの所在を管理(記憶)しているノードNn等により記憶される。以下、コンテンツの所在を管理(記憶)しているノードNnを、「ルートノード」という。インデックス情報は、レプリカを保存したノードNnのノード情報と、コンテンツのコンテンツIDと等の組を含む。このようなルートノードは、例えば、コンテンツIDと最も近いノードIDを有するノードNnであるように定められる。コンテンツIDと最も近いノードIDとは、例えば、コンテンツIDと上位桁がより多く一致するノードIDである。
そして、或るノードNnのユーザが、所望するコンテンツを取得したい場合、このコンテンツの取得を望むノードNnは、メッセージを生成する。以下、ユーザによりコンテンツの取得を望むノードNnを、「ユーザノード」という。このメッセージは、取得を望むコンテンツのコンテンツID及びユーザノードのノード情報等を含む検索要求メッセージである。検索要求メッセージは、コンテンツ保持ノードを検索するためのメッセージでもある。上述の検索要求メッセージが、ユーザノードが取得するDHTのルーティングテーブルに従って、他のノードNnに対して送出される。つまり、ユーザノードは、検索要求メッセージを、ルートノードに向けて送出する。これにより、検索要求メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着することになる。
各ノードNnにおいて、コンテンツのコンテンツ名及びコンテンツID等の属性情報は、コンテンツカタログ情報に記述されている。コンテンツカタログ情報は、センターサーバSAにより作成されて、全てのノードNnに配信される。
また、上記検索要求メッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、DHTルーティングについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
上記検索要求メッセージを受信したルートノードは、これに含まれるコンテンツIDに対応するインデックス情報をインデックス情報キャッシュから取得する。ルートノードは、このインデックス情報に含まれるIPアドレス等に示されたコンテンツ保持ノードに対して、コンテンツ送信要求メッセージを送信する。コンテンツ送信要求メッセージを受信したコンテンツ保持ノードは、保存しているコンテンツを含むコンテンツ送信メッセージを、ユーザノードに送信する。これにより、ユーザノードは、上記コンテンツ保持ノードからコンテンツをダウンロード(取得)することができる。
なお、ルートノードは、インデックス情報を、検索要求メッセージの送信元であるユーザノードに対して返信しても良い。この場合、インデックス情報を取得したユーザノードは、インデックス情報に基づいてコンテンツをダウンロードすることができる。インデックス情報に含まれるコンテンツ保持ノードのIPアドレス等に基づいて、ユーザノードはコンテンツ保持ノードにアクセスする。アクセスしたコンテンツ保持ノードから、コンテンツをダウンロードすることもできる。また、上記ユーザノードは、検索要求メッセージがルートノードに辿り着くまでの間に、このルートノードと同じインデックス情報をキャッシュしているキャッシュノードからこのインデックス情報を取得することもできる。
また、ユーザノードは、コンテンツ保持ノードからコンテンツを取得して保存したとき、保存したユーザノードは、パブリッシュメッセージを生成する。パブリッシュメッセージは、コンテンツを保存したことをルートノードへ知らせるためのメッセージである。パブリッシュメッセージは、コンテンツのコンテンツID及びコンテンツを保存したノードNnのノード情報を含む。パブリッシュメッセージは、ルートノードに向けて送出される。これにより、パブリッシュメッセージは、検索要求メッセージと同じように、コンテンツIDをキーとするDHTルーティングによってルートノードに到着することになる。そして、ルートノードは、パブリッシュメッセージを受信する。ルートノードは、パブリッシュメッセージに含まれるノード情報及びコンテンツIDの組を含むインデックス情報をインデックス情報キャッシュ領域に記憶する。こうして、上記ユーザノードは、新たに、上記コンテンツのコンテンツを保持するコンテンツ保持ノードとなる。
以上のように構成されたコンテンツ分散保存システムSにおいて、LANmに接続するノードNnが接続するLANm以外のLANm又はWANに接続するノードNnとピアツーピア方式でメッセージを送受信するためには、予めNAT越えの設定をしておく必要がある。しかしながら、全てのノードNnが、NAT越えできるようにするには、ルータRTにおいて、ノードNnの台数に比例する個数のポートを開放しておく必要がある。しかしながら、多数のポートを開放すると、安全性の面等で問題が生じる場合がある。また、ルータRTにおいてNATによるアドレス変換のためのテーブルが全て埋まり、ネットワーク間に通信に支障を来す場合がある。そこで、コンテンツ分散保存システムSにおいては、NAT越えができるノードNnをLANm毎に少なくとも1台ずつ定める。そして、NAT越えができるノードNnが、接続するLANmから接続するLANm以外のネットワークへのメッセージの中継と、接続するLANm以外のネットワークから接続するLANmへのメッセージの中継とを行う。
このようなメッセージの中継を行うノードNnを、「中継ノード」という。また、中継ノード以外のノードを、「非中継ノード」という。また、或るノードNnを基準とした場合に、基準となるノードNnが接続するLANmを、「LAN内」と称する。また、基準とするノードNnが接続するLANmに接続する他のノードNnを、「LAN内のノード」と称する。また、LAN内以外のネットワークを、「LAN外」と称する。また、LAN内以外のネットワークに接続するノードNnを、「LAN外のノード」と称する。なお、メッセージの中継に関する詳細な説明は後述する。
NAT越えの設定としては、例えば、ルータRTの1つのポートが、中継ノードの予め決定しておいたポートにポートフォワーディングされるように、ルータRTの設定が行われる。一方、非中継ノードに対してはポートフォワーディングが行われない。このように、各LANmにおいて、中継ノードのためのポートを1つだけ開放させるだけで、LAN内のノードNnとLAN外のノードNnとの通信が可能となる。NAT越えの設定としては、例えば、ルータRTの所定数のポートが、中継ノードの予め決定しておいたポートにポートフォワーディングされるように、ルータRTの設定が行われても良い。また、中継ノード装置が複数ある場合、それぞれの中継ノードに対してルータRTの1つのポートが、各中継ノードの予め決定しておいたポートにポートフォワーディングされるように、ルータRTの設定が行われても良い。
[2.ノードの構成]
次に、図2を参照して、ノードNnの構成について説明する。
図2は、ノードNnの概要構成例を示す図である。ノードNnは、図2に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成されたコンピュータとしての制御部11を備えている。また、ノードNnは、各種データ及び各種プログラム等を記憶保存するためのHD(ハードディスク)等から構成された記憶部12と、受信されたコンテンツ等を一時蓄積するバッファメモリ13とを備えている。更に、ノードNnは、コンテンツに含まれるエンコードされたビデオデータ(映像情報)及びオーディオデータ(音声情報)等をデコードするデコーダ部14を備えている。また更に、ノードNnは、上記デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部15と、この映像処理部15から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部16と、を備えている。更にまた、ノードNnは、上記デコードされたオーディオデータをアナログオーディオ信号にD (Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部17と、この音声処理部17から出力されたオーディオ信号を音波として出力するスピーカ18と、を備えている。また更に、ノードNnは、ネットワーク5を通じてセンターサーバSA、及び他のノードNnとの間の情報の通信制御を行うための通信部19を備えている。更にまた、ノードNnは、ユーザからの指示を受け付けこの指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス、或いは、リモコンや操作パネル等)20を備えている。そして、制御部11、記憶部12、バッファメモリ13、デコーダ部14、通信部19、及び入力部20はバス21を介して相互に接続されている。
なお、中継ノードの場合、ノードNnの構成としてルータRTを備えていても良い。つまり、中継ノードは、中継ノードが接続するLANmのルータRTの機能を有していても良い。
記憶部12には、DHTを用いたルーティングテーブル、インデックス情報、並びに、コンテンツ分散保存システムSに参加する際のアクセス先となるコンタクトノードのアドレス情報、及びセンターサーバSAのアドレス情報等が記憶されている。
また、記憶部12には、ノードNn自身のノードIDが記憶されている。更に、記憶部12には、ノードNn自身のアドレス情報が記憶されている。LANmに接続されている非中継ノードのアドレス情報は、LAN内のアドレス情報である。LAN内のアドレス情報とは、LAN内でのメッセージの送受信に用いられるアドレス情報である。そして、LAN内のIPアドレスは、LAN内で割り当てられるプライベートIPアドレスである。
WAN4に接続されている非中継ノードのアドレス情報は、WAN内のアドレス情報である。WAN内のアドレス情報とは、WAN4内でのメッセージの送受信に用いられるアドレス情報である。そして、WAN内のIPアドレスは、WAN4内で割り当てられるグローバルIPアドレスである。
中継ノードの場合は、アドレス情報として、LAN側のアドレス情報と、WAN側のアドレス情報とが記憶部12に記憶されている。LAN側のアドレス情報は、LAN内のアドレス情報である。また、WAN側のアドレス情報は、LAN内のルータRTの接続先のネットワークがWAN4である場合、WAN内のアドレス情報である。一方、LAN内のルータRTの接続先のネットワークが他のLANmである場合、WAN側のアドレス情報が記憶されるべき領域には、他のLANmにおけるLAN内のアドレス情報が記憶される。何れの場合も、WAN側のIPアドレスは、LAN内のルータRTのグローバルIPアドレスである。また、WAN側のポート番号は、LAN内のルータRTのポート番号である。中継ノードは、NAT越えによって、LAN外のノードとメッセージの送受信を行う場合、1又は複数のポートを用いる。つまり、ルータRTは、中継ノードがLAN外のノードとメッセージを送受信するためのポートを、1又は複数開放するように設定される。なお、LAN側のアドレス情報は、プライベートアドレス情報の一例である。また、WAN側のアドレス情報は、グローバルアドレス情報の一例である。
LAN側のIPアドレスは、例えば、ユーザによって設定される。或いは、LAN側のIPアドレスは、LAN内のルータRTによって割り当てられ、ルータRTからノードNnに通知される。また、LAN側のポート番号は、例えば、P2Pソフトウェアの初期設定時に、制御部11により自動的に設定される。WAN側のIPアドレス及びポート番号は、例えば、静的ポートフォワーディングを用いた場合、ユーザによって設定される。また、ブロードバンドルータのUPnP(Universal Plug and play)機能を用いた場合、WAN側のIPアドレス及びポート番号は、LAN内のルータRTによって割り当てられ、ルータRTからノードNnに通知される。また、サーバ装置を用いた、例えばSTUN(Simple Traversal of UDP through NATs)等のNAT越え技術を用いた場合、WAN側のIPアドレス及びポート番号は、例えば、LAN内のルータRTによって割り当てられ、サーバ装置からノードNnに通知される。
記憶部12には、更に、オペレーティングシステム、P2Pソフトウェア等の各種プログラムが記憶されている。P2Pソフトウェアは、非中継ノードに対しては非中継ノード用のソフトウェアが記憶され、中継ノードに対しては中継ノード用のソフトウェアが記憶される。或いは、非中継ノードと中継ノードとでP2Pソフトウェアは同一であっても良い。この場合、例えば、P2Pソフトウェアの初期設定時に、ユーザが非中継ノードであるか又は中継ノードであるかを設定すると、この設定情報に応じて制御部11の処理内容が変わるように、P2Pソフトウェアがプログラミングされる。なお、これらのプログラムは、例えば、センターサーバSA等からダウンロードされるようにしても良い。また、これらのプログラムは、例えば、記録媒体に記録されて当該記録媒体からドライブを介して読み込まれるようにしても良い。
制御部11は、CPUが記憶部12等に記憶されたプログラムを読み出して実行することにより、ノード全体を統括制御する。また、中継ノードにおいて、制御部11は、CPUが記憶部12等に記憶されたプログラムを読み出して実行することにより、本発明における取得手段、中継手段、第1判定手段、第2判定手段、第3判定手段、第4判定手段、第5判定手段、及び第6判定手段として機能する。また、非中継ノードにおいて、制御部11は、CPUが記憶部12等に記憶されたプログラムを読み出して実行することにより、本発明における送信手段として機能する。
[3.メッセージの中継]
次に、中継ノードによるメッセージの中継方法について説明する。
[3.1 メッセージが含むノード情報の種類]
コンテンツ分散保存システムSにおいてノードNn間で送受信されるメッセージには、1つ以上のノード情報が含まれている。このノード情報は、例えば、メッセージの宛先のノードNnの情報であったり、メッセージの送信元のノードNnの情報であったりする。メッセージの種類によって、どのノードNnのノード情報がメッセージに含まれるべきかが定められている。中継ノードによるメッセージの中継は、このメッセージに含まれているノード情報を中継ノードが変更することにより行われる。代表的なメッセージには、参加メッセージと、参加応答メッセージと、検索要求メッセージと、コンテンツ送信要求メッセージと、コンテンツ送信メッセージと、パブリッシュメッセージとがある。
上述した各種メッセージは、基本的には、メッセージの送信元を示すノード情報と、メッセージの送信先を示すノード情報とを含む。メッセージの種類によっては、メッセージが、メッセージの送信元を示すノード情報を含まない場合もある。ここで、送信元のノード情報を、送信元ノード情報という。また、送信先のノード情報を、宛先ノード情報という。
本実施形態のコンテンツ分散保存システムSでは、メッセージによっては、宛先ノード情報と送信元ノード情報と以外に、メッセージに付加される付加ノード情報を含む場合がある。例えば、コンテンツ保持ノードが記載されたコンテンツ保持リストが付加されてメッセージが送信される場合、付加ノード情報は、コンテンツ保持リストに含まれるノード情報である。また、パブリッシュメッセージにコンテンツを保持したコンテンツ保持ノードのノード情報(アドレス情報)が含まれてメッセージが送信される場合、付加ノード情報は、コンテンツ保持ノードのノード情報である。また、例えば、検索要求メッセージには、送信元ノード情報として、ユーザノードのノード情報が含まれている。また、コンテンツ送信要求メッセージには、付加ノード情報として、ユーザノードのノード情報が含まれている。この送信元ノード情報又は付加ノード情報としてのユーザノードのノード情報を、ユーザノード情報という。なお、送信元ノード情報又は付加ノード情報に含まれるアドレス情報は、メッセージの宛先以外にメッセージに付加されるアドレス情報の一例である。
[3.2 ノード情報が含むアドレスリストについて]
ノード情報には、ノードIDと、1つ又は複数のアドレス情報を含むアドレスリストとが含まれている。アドレスリストに含まれるアドレス情報には、アドレス情報1、アドレス情報2、アドレス情報3・・・というように、それぞれ番号が割り当てられる。前述したように、アドレス情報は、IPアドレスとポート番号との組である。最も基本的なノード情報は、宛先や送信元等のノードNnのノードIDと、宛先や送信元等のノードNnのアドレス情報を含む。アドレスリストに複数のアドレス情報が含まれている場合、それは、中継ノードのアドレス情報が追加されたことを示している。例えば、アドレスリストに3個のアドレス情報が含まれている場合、アドレス情報1とアドレス情報2は、夫々中継ノードのアドレス情報である。そして、アドレス情報3が、ノードIDに対応するノード情報、すなわち、本来の宛先や送信元等のノードNnのアドレス情報である。また、番号が小さいアドレス情報ほど、後から追加されたアドレス情報であることを示す。例えば、アドレスリストに3個のアドレス情報が含まれている場合、アドレス情報1の方が、アドレス情報2よりも後に追加されたアドレス情報である。そして、アドレス情報の番号は、メッセージの送信先のノードの順番を示す。例えば、アドレスリストには、アドレス情報と、前記の順番を示す情報とが対応付けて設定される。或いは、アドレスリストは、例えば、複数のアドレス情報を格納可能な配列である。この場合、メッセージの送信先のノードの順番が、配列のインデックスとなる。なお、メッセージの送信先のノードの順番が1番目であるアドレス情報1を、「先頭のアドレス情報」という。上述した宛先ノード情報、送信元ノード情報、付加ノード情報は夫々、上述したノードIDとアドレスリストとを含む。
或るメッセージとして第1のメッセージを受信したノードNnが、第1のメッセージに対して応答する場合に、応答のメッセージとして第2のメッセージを送信するとする。この場合、第1のメッセージを受信したノードNnは、第1のメッセージに含まれていた送信元ノード情報又は付加ノード情報を、第2のメッセージの宛先ノード情報として第2のメッセージに含ませる。これにより、第1のメッセージを送信したノードNnが、第2のメッセージを受信する。例えば、コンテンツ送信要求メッセージを受信したコンテンツ保持ノードは、当該コンテンツ送信要求メッセージに含まれているユーザノード情報を、送信するコンテンツ送信メッセージに含ませる。
[3.3 中継ノードの機能]
中継ノードは、LAN内からLAN外へ、又は、LAN外からLAN内へメッセージを中継する場合、メッセージに含まれる送信元ノード情報と、付加ノード情報とに、中継ノード自身のアドレス情報を追加する。そうすると、中継された第1のメッセージを受信したノードNnが応答する場合、前述したように、第1のメッセージに含まれていた送信元ノード情報又は付加ノード情報を、第2のメッセージの宛先ノード情報として、第2のメッセージに含ませる。そして、中継された第1のメッセージを受信したノードNnは、宛先ノード情報の先頭のアドレス情報のノードNnに対して第2のメッセージを送信する。従って、第2のメッセージは必ず中継ノードに送信されることになる。各ノードNnが受信するメッセージに含まれる宛先ノード情報の先頭のアドレス情報は、必ずメッセージを受信したノードNn自身のアドレス情報となっている。そこで、メッセージを受信したノードNnは、受信したメッセージの宛先ノード情報から先頭のアドレス情報を削除する。この処理に関しては、中継ノードも同様である。中継ノードが中継する第2のメッセージの宛先ノード情報から先頭のアドレス情報を削除すると、第1のメッセージを中継ノードに送信したノードNnのアドレス情報が、宛先ノード情報の先頭のアドレス情報となる。
具体的に、宛先ノード情報には、複数のノードNnのアドレス情報を含むことができる。宛先ノード情報にアドレス情報が追加されるのは、第1のメッセージが中継ノードを経由して他のネットワークへ出て行く場合である。他のネットワークへ出て行った第1のメッセージは、目的のノードNnまで到達する。そして、目的のノードNnが、返答として第2のメッセージを送信しようとするとき、第2のメッセージの宛先ノード情報には、中継ノードのアドレス情報と、第1のメッセージの本来の送信元のノードNnのアドレス情報との2つが含まれている。これらうち、追加された中継ノードのアドレス情報の方が先頭にあるため、返答を送信するノードNnは、第1のメッセージの送信元は中継ノードであるとして、中継ノードにメッセージを送信する。中継ノードは、第2のメッセージの宛先ノード情報から中継ノード自身のアドレスを削除して、本来の送信元のノードNnにメッセージを中継する。従って、中継ノードが、この先頭のアドレス情報に基づいて、第2のメッセージを中継すると、第1のメッセージを中継ノードに送信したノードNnが、第2のメッセージを受信することになる。
こうして、中継ノードによるメッセージの中継により、NAT越えができないノードNnが、LAN外のノードとメッセージの送受信を行うことができる。以下に、中継ノードがメッセージを中継する場合の処理を示す。
LAN内からLAN外への中継の場合、
(1−1)中継ノードが、送信元ノード情報又は付加ノード情報のアドレスリストに、中継ノードのWAN側のアドレス情報を追加する。
(1−2)ただし、送信元ノード情報又は付加ノード情報のアドレスリストに、中継ノードのLAN側のアドレス情報が設定されている場合には、送信元ノード情報又は付加ノード情報のアドレスリストから当該LAN側のアドレス情報を削除し、中継ノードのWAN側のアドレス情報を追加しない。
LAN外からLAN内への中継の場合、
(2−1)中継ノードが、送信元ノード情報又は付加ノード情報のアドレスリストに、中継ノードのLAN側のアドレス情報を追加する。
(2−2)ただし、送信元ノード情報又は付加ノード情報のアドレスリストに、中継ノードのWAN側のアドレス情報が設定されている場合には、送信元ノード情報又は付加ノード情報のアドレスリストから当該WAN側のアドレス情報を削除し、中継ノードのLAN側のアドレス情報を追加しない。
上記(1−1)及び(2−1)においては、中継先のネットワークでのメッセージ送受信に用いられるアドレス情報が、送信元ノード情報又は付加ノード情報に追加される。
上記(1−2)及び(2−2)は、中継ノードによる不要なメッセージの中継を減らすための処理である。例えば、LAN外からLAN内へ中継されたメッセージが、再びLAN外へ中継される場合がある。ここで、1回目の中継の際に、送信元ノード情報又は付加ノード情報に中継ノードのLAN側のアドレス情報が追加され、2回目の中継の際に、送信元ノード情報又は付加ノード情報に中継ノードのWAN側のアドレス情報が追加されるとする。そうすると、中継されたメッセージの送信元ノード情報又は付加ノード情報のアドレスリストには、中継ノードのWAN側のアドレス情報、中継ノードのLAN側のアドレス情報、及び中継ノードにメッセージを送信したLAN外のノードのアドレス情報が設定される。そして、このノード情報が、中継されたメッセージに対する応答のメッセージの宛先ノード情報となる。従って、この宛先ノード情報に従ってメッセージが送信されると、中継ノードによるメッセージの中継が更に2回行われることになる。しかしながら、このメッセージは、本来であれば、LAN外のノードからLAN外のノードへ直接送信されても良いメッセージである。そうであるならば、LAN外のノードからLAN外のノードへ直接メッセージが送信されるように、中継ノードが送信元ノード情報又は付加ノード情報を変更すれば良い。つまり、2回目の中継の際に、送信元ノード情報又は付加ノード情報から中継ノードのアドレス情報が削除されれば、この送信元ノード情報又は付加ノード情報の先頭のアドレス情報は、中継ノードにメッセージを送信したLAN外のノードのアドレス情報となる。そして、このアドレス情報が、中継されたメッセージに対する応答のメッセージの宛先ノード情報の先頭のアドレス情報となる。従って、このアドレス情報に従ってメッセージが送信されると、LAN外のノードからLAN外のノードへ直接メッセージが送信される。
中継ノードは、LAN内のノードに対して参加応答メッセージを送信する場合、送信元ノード情報又は付加ノード情報のアドレス情報として、当該中継ノードのLAN側のアドレス情報を設定する。一方、中継ノードは、LAN外のノードに対して参加応答メッセージを送信する場合、送信元ノード情報又は付加ノード情報のアドレス情報として、当該中継ノードのWAN側のアドレス情報を設定する。参加するノードNnは、受信した参加応答メッセージに含まれる送信元ノード情報又は付加ノード情報をルーティングテーブルに設定する。これにより、ルーティングテーブルが作成される。
ここで、参加するノードNnが接続するネットワークとは異なるネットワークに接続するノードNnが、参加応答メッセージを返信した場合、この参加応答メッセージは、中継ノードにより中継される。従って、参加するノードNnが受信した参加応答メッセージに含まれる送信元ノード情報又は付加ノード情報には、中継ノードのアドレス情報が追加される。そのため、ルーティングテーブルを記憶するノードNnと異なるネットワークに接続するノードNnのノード情報には、中継ノードのアドレス情報が追加されているのである。
中継ノードがコンテンツ分散保存システムSに参加する場合には、当該中継ノード自身がメッセージの中継を行うLAN内のコンタクトノードとLAN外のコンタクトノードに対して夫々参加メッセージを送信する。そして、中継ノードは、LAN内とLAN外とから参加応答メッセージを受信して、ルーティングテーブルを作成する。なお、ルートノードが記憶するインデックス情報に含まれるノード情報も、ルーティングテーブルに含まれるノード情報と同様である。つまり、コンテンツ保持ノードがパブリッシュメッセージを送信する場合、送信元ノード情報又は付加ノード情報としてコンテンツ保持ノード自身のノード情報をパブリッシュメッセージに含める。パブリッシュメッセージを受信したルートノードは、このパブリッシュメッセージに含まれる送信元ノード情報又は付加ノード情報を、インデックス情報に追加する。パブリッシュメッセージが中継ノードによって中継される場合、このパブリッシュメッセージに含まれる送信元ノード情報又は付加ノード情報に、中継ノードのアドレス情報が追加される。
このように、各ノードNnが記憶するルーティングテーブルやインデックス情報に設定されているノード情報は、中継ノードによるメッセージの中継が必要となる場合、その中継ノードのアドレス情報が追加されている。従って、各ノードNnは、メッセージを送信、転送、返信等する際、中継が必要なメッセージであるのか否かを判断する必要が無い。各ノードNnは、メッセージに含まれる宛先ノード情報の先頭のアドレス情報が示すノードNnに対してメッセージを送信すれば良い。そうすれば、必要に応じて中継ノードがメッセージを中継するようになっている。
非中継ノードは、他のノードNnが中継ノードであるか又は非中継ノードであるかを区別して処理を行ってはいない。非中継ノードは、どのノードNnに対しても、同じように動作する。そのため、非中継ノードは、中継ノードのアドレス情報を、非中継ノードのアドレス情報の場合と同様に様々な通信の過程で取得する。例えば、中継ノードのアドレス情報は、コンタクトノードから通知されたりする。
[3.4 具体例]
次に、中継ノードのメッセージの中継に関する動作を、具体例を用いて説明する。図3は、ネットワーク及びノードNnの接続例を示す図である。例えば、図3に示すように、LAN1とLAN2とが、ルータRTを介して接続されている。また、LAN2とWAN4とが、ルータRTを介して接続されている。更に、LAN3とWAN4とが、ルータRTを介して接続されている。そして、LAN1には、ノードN1及びN2が接続されている。また、LAN2には、ノードN3及びN6が接続されている。また、LAN3には、ノードN4及びN5が接続されている。また、WAN4には、ノードN7が接続されている。ここで、ノードN2が、LAN1とLAN2との間のメッセージを中継する中継ノードである。また、ノードN3が、LAN2とWAN4との間のメッセージを中継する中継ノードである。また、ノードN4が、LAN3とWAN4との間のメッセージを中継する中継ノードである。
中継ノードであるノードN2、N3及びN4は、夫々WAN側のアドレス情報と、LAN側のアドレス情報とを有する。ノードN2のLAN側のアドレス情報は、LAN1側のアドレス情報であり、ノードN2のWAN側のアドレス情報は、LAN2側のアドレス情報である。また、ノードN3のLAN側のアドレス情報は、LAN2側のアドレス情報であり、ノードN3のWAN側のアドレス情報は、WAN4側のアドレス情報である。また、ノードN4のLAN側のアドレス情報は、LAN3側のアドレス情報であり、ノードN4のWAN側のアドレス情報は、WAN4側のアドレス情報である。
例えば、ノードN7からノードN5へのメッセージ、すなわち、WAN4からLAN3へのメッセージをノードN4が中継する場合、ノードN4は、中継するメッセージに含まれる送信元ノード情報又は付加ノード情報に、ノードN4のLAN側のアドレス情報を追加する。また、LAN3からWAN4へのメッセージをノードN4が中継する場合、ノードN4は、中継するメッセージに含まれる送信元ノード情報又は付加ノード情報に、ノードN4のWAN側のアドレス情報を追加する。
ただし、一度WAN4からLAN3に中継したメッセージを、ノードN4がWAN4に中継する場合、ノードN4は、中継するメッセージに含まれる送信元ノード情報又は付加ノード情報から、ノードN4のLAN側のアドレス情報を削除する。また、一度LAN1からWAN4に中継したメッセージを、ノードN4がLAN1に中継する場合、ノードN4は、中継するメッセージに含まれる送信元ノード情報又は付加ノード情報から、ノードN4のWAN側のアドレス情報を削除する。
また、例えば、ノードN1からノードN5へのメッセージ、すなわち、LAN1からLAN3へのメッセージは、ノードN2、ノードN3及びノードN4の順で、中継ノードにより中継される。このとき、中継されるメッセージに含まれる送信元ノード情報又は付加ノード情報には、ノードN2のWAN側のアドレス情報、ノードN3のWAN側のアドレス情報、及び、ノードN4のLAN側のアドレス情報が、順次追加される。また、例えば、LAN3からLAN1へのメッセージに含まれる送信元ノード情報又は付加ノード情報には、ノードN4、ノードN3及びノードN2の順で、中継ノードにより中継される。このとき、中継されるメッセージには、ノードN4のWAN側のアドレス情報、ノードN3のLAN側のアドレス情報、及び、ノードN2のLAN側のアドレス情報が、順次追加される。
ただし、一度LAN1からLAN3へ中継されたメッセージが、LAN1に中継される場合、中継されるメッセージに含まれる送信元ノード情報又は付加ノード情報から、ノードN4のLAN側のアドレス情報、ノードN3のWAN側のアドレス情報、及び、ノードN2のWAN側のアドレス情報が順次削除される。また、一度LAN3からLAN1へ中継されたメッセージが、LAN3に中継される場合、中継されるメッセージに含まれる送信元ノード情報又は付加ノード情報から、ノードN2のLAN側のアドレス情報、ノードN3のLAN側のアドレス情報、及び、ノードN4のWAN側のアドレス情報が順次削除される。
[4.コンテンツ分散保存システムの動作]
次に、図4及び図5を参照して、本実施形態に係るコンテンツ分散保存システムSの動作について説明する。図4は、本実施形態に係る非中継ノードの制御部11における処理例を示すフローチャートである。
図4の処理は、例えば非中継ノードの電源がONとされた場合に開始される。先ず、制御部11は、ユーザから電源OFFの要求がされたか否かを判定する(ステップS1)。このとき、制御部11は、ユーザから電源OFFの要求がされなかった場合には(ステップS1:NO)、他のノードNnからメッセージを受信したか否かを判定する(ステップS2)。このとき、制御部11は、他のノードNnからメッセージを受信しなかった場合には(ステップS2:NO)、ステップS1に移行する。
一方、制御部11は、他のノードNnからメッセージを受信した場合には(ステップS2:YES)、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDであるか否かを判定する(ステップS3)。このとき、制御部11は、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDである場合には(ステップS3:YES)、ステップS4に移行する。そして、制御部11は、受信したメッセージに対応する処理を実行する(ステップS4)。例えば、受信したメッセージが検索要求メッセージである場合、制御部11は、メッセージを受信したノードNn自身がルートノードであるか否かを判定する。そして、制御部11は、メッセージを受信したノードNn自身がルートノードである場合には、コンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信する。一方、制御部11は、メッセージを受信したノードNn自身がルートノードではない場合には、ルーティングテーブルに従って検索要求メッセージを転送する。また、例えば、受信したメッセージがコンテンツ送信要求メッセージである場合、制御部11は、要求されたコンテンツを含むコンテンツ送信メッセージを送信する。制御部11は、ステップS4の処理を終えると、ステップS1に移行する。
ステップS3において、制御部11は、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDではない場合には(ステップS3:NO)、受信したメッセージを転送する。具体的に、制御部11は、受信したメッセージの宛先ノード情報のアドレスリストから先頭のアドレス情報を削除する(ステップS5)。次いで、制御部11は、記憶部12に記憶されているルーティングテーブルに基づいて、受信したメッセージの転送先を示すことになるノード情報を選択する(ステップS6)。次いで、制御部11は、選択したノード情報を転送すべきメッセージの宛先ノード情報として設定する(ステップS7)。つまり、制御部11は、宛先ノード情報を書き換える。次いで、制御部11は、設定した宛先ノード情報のアドレスリストの先頭のアドレス情報に基づいてメッセージを送信する(ステップS8)。具体的に、制御部11は、先頭のアドレス情報のIPアドレスを、メッセージのパケットのIPヘッダの宛先アドレスに設定する。また、制御部11は、先頭のアドレス情報のポート番号を、メッセージのパケットのUDP(User Datagram Protocol)ヘッダ又はTCP(Transmission Control Protocol)ヘッダの宛先ポート番号に設定する。そして、制御部11は、ヘッダの設定をしたパケットを順次送信する。制御部11は、ステップS8の処理を終えると、ステップS1に移行する。
ステップS1において、制御部11は、ユーザから電源OFFの要求がされた場合には(ステップS1:YES)、図4に示す処理を終了させる。
図5は、本実施形態に係る中継ノードの制御部11における処理例を示すフローチャートである。
図5の処理は、例えば中継ノードの電源がONとされた場合に開始される。先ず、制御部11は、ユーザから電源OFFの要求がされたか否かを判定する(ステップS21)。このとき、制御部11は、ユーザから電源OFFの要求がされなかった場合には(ステップS21:NO)、他のノードNnからメッセージを受信したか否かを判定する(ステップS22)。このとき、制御部11は、他のノードNnからメッセージを受信しなかった場合には(ステップS22:NO)、ステップS21に移行する。
一方、制御部11は、他のノードNnからメッセージを受信した場合には(ステップS22:YES)、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDであるか否かを判定する(ステップS23)。このとき、制御部11は、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDである場合には(ステップS23:YES)、受信したメッセージに対応する処理を実行する(ステップS24)。ステップS24の処理内容は、図4に示すステップS4の処理と同様である。そして制御部11は、ステップS21に移行する。
ステップS23において、制御部11は、受信したメッセージの宛先ノード情報のノードIDが、当該メッセージを受信したノードNn自身のノードIDではない場合には(ステップS23:NO)、受信したメッセージの宛先ノード情報のアドレスリストから先頭のアドレス情報を削除する(ステップS25)。次いで、制御部11は、受信したメッセージの宛先ノード情報のアドレスリストが空(から)であるか否かを判定する(ステップS26)。このとき、制御部11は、受信したメッセージの宛先ノード情報のアドレスリストが空である場合には(ステップS26:YES)、メッセージを転送するための前処理を行う。具体的に、制御部11は、記憶部12に記憶されているルーティングテーブルに基づいて、受信したメッセージの転送先を示すことになるノード情報を選択する(ステップS27)。次いで、制御部11は、選択したノード情報を転送すべきメッセージの宛先ノード情報として設定する(ステップS28)。
ステップS26において、制御部11は、受信したメッセージの宛先ノード情報のアドレスリストが空ではない場合(ステップS26:NO)、又は、ステップS28の処理を終えた場合には、第1判定手段及び第5判定手段として、受信したメッセージが、LAN内からLAN外へ中継すべきメッセージであるか否かを判定する(ステップS29)。例えば、IPアドレスは、ネットワークを区別するためのネットワークアドレスと、ネットワーク内でホストを区別するためのホストアドレスとにより構成されている。そこで、制御部11は、受信したメッセージのIPヘッダに設定されている送信元アドレスのネットワークアドレス部分と、記憶部12に記憶されている中継ノード自身のLAN側のIPアドレスのネットワークアドレス部分とを比較する。そして、ネットワークアドレスが一致した場合、受信したメッセージはLAN内から送信されたメッセージであり、ネットワークアドレスが一致しない場合、受信したメッセージはLAN外から送信されたメッセージである。IPアドレスから当該IPアドレスのクラスを特定することができる。そして、当該クラスにより、IPアドレスの最上位ビットから何ビット目までがネットワークアドレスを示すかを判断することができる。或いは、記憶部12にサブネットマスクが記憶されていれば、当該サブネットマスクにより、IPアドレスの最上位ビットから何ビット目までがネットワークアドレスとサブネットアドレスを示すかを判断することができる。この場合、ネットワークアドレスとサブネットアドレスの両方が一致しているか否かが判定される。また、制御部11は、宛先ノード情報のアドレスリストの先頭のアドレス情報のIPアドレスのネットワークアドレスと、記憶部12に記憶されている中継ノード自身のLAN側のIPアドレスのネットワークアドレスとを比較する。そして、ネットワークアドレスが一致した場合、受信したメッセージはLAN内へ送信すべきメッセージであり、ネットワークアドレスが一致しない場合、受信したメッセージはLAN外へ送信すべきメッセージである。
制御部11は、受信したメッセージが、LAN内からLAN外へ中継すべきメッセージではない場合には(ステップS29:NO)、第2判定手段及び第4判定手段として、受信したメッセージが、LAN外からLAN内へ中継すべきメッセージであるか否かを判定する(ステップS30)。ここで、受信したメッセージが、LAN外からLAN内へ中継すべきメッセージではない場合(ステップS30:NO)、受信したメッセージは、LAN内からLAN内、又は、LAN外からLAN外に単に転送すべきメッセージである。従って、この場合、制御部11は、宛先ノード情報のアドレスリストの先頭のアドレス情報に基づいてメッセージを送信して(ステップS32)、ステップS1に移行する。
制御部11は、受信したメッセージが、LAN内からLAN外へ中継すべきメッセージであるか(ステップS29:YES)、又は、LAN外からLAN内へ中継すべきメッセージである場合には(ステップS30:YES)、中継手段として、メッセージの中継を行う。
具体的に、制御部11は、受信したメッセージが宛先ノード情報以外のノード情報、すなわち、送信元ノード情報又は付加ノード情報の少なくとも何れか一方を有するか否かを判定する(ステップS31)。このとき、制御部11は、受信したメッセージが送信元ノード情報及び付加ノード情報の何れも有さない場合には(ステップS31:NO)、ステップS32のメッセージ送信を行うことにより、メッセージを中継する。
一方、制御部11は、受信したメッセージが送信元ノード情報又は付加ノード情報の少なくとも何れか一方を有する場合には(ステップS31:YES)、送信元ノード情報又は付加ノード情報のうちまだ選択されていないノード情報が存在するか否かを判定する(ステップS33)。このとき、制御部11は、まだ選択されていないノード情報が存在する場合には(ステップS33:YES)、まだ選択されていないノード情報のうち1つを選択する(ステップS34)。次いで、制御部11は、第3判定手段及び第6判定手段として、選択したノード情報のアドレスリストの先頭のアドレス情報が、中継ノード自身のアドレス情報であるか否かを判定する(ステップS35)。具体的に、制御部11は、選択したノード情報のアドレスリストの先頭のアドレス情報のIPアドレスと、記憶部12に記憶されている中継ノードのLAN側のIPアドレス及びWAN側のIPアドレスとを比較する。そして、先頭のアドレス情報のIPアドレスが、LAN側のIPアドレス又はWAN側のIPアドレスの何れか一方と一致する場合、選択したノード情報のアドレスリストの先頭のアドレス情報は、中継ノード自身のアドレス情報である。一方、先頭のアドレス情報のIPアドレスが、LAN側のIPアドレス及びWAN側のIPアドレスの何れとも一致しない場合、選択したノード情報のアドレスリストの先頭のアドレス情報は、中継ノード自身のアドレス情報ではない。
制御部11は、選択したノード情報のアドレスリストの先頭のアドレス情報が、中継ノード自身のアドレス情報である場合には(ステップS35:YES)、選択したノード情報のアドレスリストから先頭のアドレス情報を削除する(ステップS36)。制御部11は、この処理を終えると、ステップS33に移行する。
制御部11は、選択したノード情報のアドレスリストの先頭のアドレス情報が、中継ノード自身のアドレス情報ではない場合には(ステップS35:NO)、選択したノード情報のアドレスリストの先頭のアドレス情報が、LAN内のノードのアドレス情報であるか否かを判定する(ステップS37)。このとき、制御部11は、選択したノード情報のアドレスリストの先頭のアドレス情報が、LAN内のノードのアドレス情報である場合には(ステップS37:YES)、取得手段として記憶部12に記憶されている中継ノード自身のLAN側のアドレス情報を取得し、選択したノード情報のアドレスリストに取得したLAN側のアドレス情報を追加する(ステップS38)。一方、制御部11は、選択したノード情報のアドレスリストの先頭のアドレス情報が、LAN外のノードのアドレス情報である場合には(ステップS37:NO)、取得手段として記憶部12に記憶されている中継ノード自身のWAN側のアドレス情報を取得し、選択したノード情報のアドレスリストに取得したWAN側のアドレス情報を追加する(ステップS39)。制御部11は、ステップS38又はS39の処理を終えると、ステップS33に移行する。
ステップS33において、制御部11は、送信元ノード情報又は付加ノード情報のうち選択されていないノード情報がない場合には(ステップS33:NO)、ステップS32のメッセージ送信を行うことにより、メッセージを中継する。
ステップS21において、制御部11は、ユーザから電源OFFの要求がされた場合には(ステップS21:YES)、図5に示す処理を終了させる。
以上説明したように、本実施形態によれば、中継ノードの制御部11が、LAN内からLAN外へメッセージを中継する場合には、取得されたWAN側のアドレス情報を当該メッセージに含め、LAN外からLAN内へのメッセージを中継する場合には、取得されたLAN側のアドレス情報を当該メッセージに含める。従って、中継ノードからメッセージを受信したノードNnは、受信したメッセージに含まれていたアドレス情報に基づいて、中継ノードにメッセージを送信することができる。そして、中継ノードは、LAN外のノードにメッセージを中継することができる。このように、中継ノードを介してLAN内とLAN外とのメッセージの送受信が行われるので、アドレス解決のための処理負荷を軽減させることができる。
また、中継ノードの制御部11が、ルータRTにおけるWAN側の複数のポートのうち、中継ノードのために割り当てられた所定数のポートに基づき、LAN外に対するメッセージの送受信をルータRTを介して行う。従って、ルータRTにおいては、中継ノードがLAN外との通信を行うために必要なポートを開放する。そうしておけば、LAN内のノードとLAN外のノードとが中継ノードを介してメッセージを送受信することができる。よって、ノードNn毎にポートを開放する必要がないので、LAN外からの不正通信等に対する安全性を高めることができる。また、ルータRTにおいて、アドレス変換に必要なテーブルが埋まってしまうことを防止することができる。
或いは、中継ノードの制御部11が、ルータRTにおいて中継ノードのために割り当てられたWAN側の所定の1つのポートに基づき、LAN外に対するメッセージの送受信を、ルータRTを介して行っても良い。この場合、ルータRTにおいて、中継ノードのために1つのポートを開放しておけば良いので、安全性をより高めることができる。
また、中継ノードの制御部11が、LAN内からLAN外へメッセージを中継する場合、メッセージの送信元ノード情報又は付加ノード情報のアドレス情報として、中継ノードのWAN側のアドレス情報を含める。従って、中継ノードからメッセージを受信したLAN外のノードは、受信したメッセージに含まれていた送信元ノード情報又は付加ノード情報のアドレス情報を、送信するメッセージの宛先ノード情報のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノードに送信される。そして、中継ノードは、LAN内のノードにメッセージを中継することができる。
また、中継ノードの制御部11が、LAN内からLAN外へメッセージを中継する場合、当該メッセージに含まれる各送信元ノード情報又は付加ノード情報のアドレスリストに、中継ノードのWAN側のアドレス情報を追加する。従って、中継ノードからメッセージを受信したLAN外のノードは、受信したメッセージに含まれていた送信元ノード情報又は付加ノード情報アドレス情報を、送信するメッセージの宛先ノード情報のアドレス情報として設定してメッセージを送信することができる。そうすることで、このメッセージが中継ノードに送信される。そうすることで、LAN内のノードにメッセージを中継することができる。
また、中継ノードの制御部11が、中継するメッセージが、LAN外からLAN内へ送信されるメッセージであるか否かを判定する。そして、LAN外からLAN内へ送信されるメッセージであると判定されたとき、中継ノードの制御部11が、メッセージが含む送信元ノード情報又は付加ノード情報のアドレスリストから、中継ノードのWAN側のアドレス情報を削除する。従って、中継ノードからメッセージを受信したLAN内のノードNnが応答する場合、応答のメッセージは中継ノードにより中継されず、LAN内のノード間で送受信される。従って、中継ノードの中継負荷を軽減させることができる。
また、中継ノードの制御部11が、LAN内からLAN外へメッセージを中継する場合、メッセージに中継ノードのLAN側のアドレス情報が含まれているか否かを判定する。そして、中継ノードの制御部11が、中継ノードのLAN側のアドレス情報が含まれていないと判定された場合に、メッセージに中継ノードのWAN側のアドレス情報を追加し、中継ノードのLAN側のアドレス情報が含まれていると判定された場合に、メッセージからLAN側のアドレス情報を削除する。従って、LAN内からLAN外へメッセージを中継する際の、中継ノードのアドレス情報の追加又は削除の制御を的確に行うことができる。
なお、図5のフローチャートにおいて、ステップS33〜S39の処理は、メッセージに送信元ノード情報又は付加ノード情報が複数含まれていることを想定した処理になっている。従って、メッセージに送信元ノード情報又は付加ノード情報が複数含まれるようにしても良い。上記実施形態においては、ルートノードが、コンテンツを送信させるコンテンツ保持ノードを選択し、選択したコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信していた。しかしながら、例えば、ルートノードが、インデックス情報から複数のコンテンツ保持ノードのノード情報を選択し、選択した複数のノード情報を夫々送信元ノード情報又は付加ノード情報とする検索応答メッセージをユーザノードに対して送信しても良い。ユーザノードは、受信した検索応答メッセージに含まれる送信元ノード情報又は付加ノード情報から任意のノード情報を選択し、選択したノード情報に基づいてコンテンツ保持ノードに対してコンテンツを要求する。この場合において、図5にも示したように、中継ノードは、検索応答メッセージに含まれる各送信元ノード情報又は付加ノード情報に対して、中継ノードのアドレス情報の追加又は削除を行う。
また、上記実施形態において、中継ノードは、メッセージを中継する際に、中継ノードのアドレス情報を送信元ノード情報又は付加ノード情報に追加していた。しかしながら、中継ノードは、アドレス情報の変換のためのテーブルを記憶することにより、送信元ノード情報又は付加ノード情報のアドレス情報を、中継ノードのアドレス情報に書き換えても良い。この場合において、中継ノードは、例えば、中継すべきメッセージを受信したときに、識別情報を生成し、メッセージの送信元ノード情報又は付加ノード情報のアドレス情報と識別情報とを対応付けてテーブルに記憶させる。また、中継ノードは、メッセージの送信元ノード情報又は付加ノード情報のアドレス情報を、中継ノードのアドレス情報に書き換える。更に、中継ノードは、メッセージの送信元ノード情報又は付加ノード情報に、生成した識別情報を追加する。そして、中継ノードは、メッセージを中継する。その後、中継ノードは、中継すべきメッセージを受信したときに、メッセージの宛先ノード情報に識別情報が含まれている場合、当該識別情報とテーブルに記憶されている識別情報とが一致するか否かを判定する。ここで、中継ノードは、識別情報が一致する場合には、識別情報に対応するアドレス情報をテーブルから取得する。そして、中継ノードは、メッセージの宛先ノード情報のアドレス情報を、取得したアドレス情報に書き換えて、メッセージを中継する。
また、上記実施形態においては、LANが複数存在していたが、LANが1つのみ存在しても良い。また、WANが複数存在しても良い。
また、上記実施形態においては、オーバーレイネットワークに、DHTを利用したピアツーピアネットワークが適用されていたが、これに限られるものではない。例えば、他のピアツーピアシステム、又は、オーバーレイネットワークを用いたシステムが適用されても良い。DHTを利用しないピアツーピアシステムとしては、例えば、ハイブリッド型のピアツーピアシステムがある。