(57)【要約】      （修正有）【課題】ネットワーク側から中継機器を介してセッション開始を受け付けることができないノード装置からサービスを適切に受けることができる通信システム、ノード装置、ノード処理プログラム、及びメッセージ送受信方法を提供する。【解決手段】中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持するセッション保持手段と、他のノード装置との間のメッセージ送受信を制御するメッセージ送受信制御手段とを備え、第一ノード装置を送信元とする自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報にして宛先のノード装置に送信し、且つ、第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージを当該第一ノード装置に送信するように制御する。【選択図】図３
2008294627.tif 000002
【特許請求の範囲】
【請求項１】
中継機器を介してネットワークに接続される複数のノード装置を備える通信システムにおける前記ノード装置であって、
前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持するセッション保持手段と、
セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御手段と、
を備え、
前記メッセージ送受信制御手段は、
前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報にして当該メッセージを宛先のノード装置に送信し、且つ、
前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とするノード装置。
【請求項２】
請求項１に記載のノード装置において、
前記セッション保持手段は、前記第一ノード装置からのセッション開始を受け付け当該セッションが確立された場合に、前記第一ノード装置のネットワークアドレス情報を記憶し、当該セッションを保持することを特徴とするノード装置。
【請求項３】
請求項１又は２に記載のノード装置において、
前記メッセージ送受信制御手段は、
前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報に書き換え、これに前記第一ノード装置を示す中継情報を付加して当該メッセージを宛先のノード装置に送信し、且つ、
前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先のネットワークアドレス情報に付加された前記中継情報に基づいて判別することを特徴とするノード装置。
【請求項４】
請求項１又は２に記載のノード装置において、
前記メッセージには、送信元のノード装置に固有のノード識別情報、前記送信元のネットワークアドレス情報、宛先のノード装置に固有のノード識別情報、及び前記宛先のネットワークアドレス情報が含まれており、
前記メッセージ送受信制御手段は、
前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報に書き換え、当該メッセージを宛先のノード装置に送信し、且つ、
前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先の前記ノード識別情報に基づいて判別することを特徴とするノード装置。
【請求項５】
コンピュータを、請求項１乃至４の何れか一項に記載のノード装置として機能させることを特徴とするノード処理プログラム。
【請求項６】
中継機器を介してネットワークに接続される複数のノード装置を備える通信システムであって、
何れかの前記ノード装置は、
前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持するセッション保持手段と、
セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御手段と、
を備え、
前記メッセージ送受信制御手段は、
前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置にして当該メッセージを宛先のノード装置に送信し、且つ、
前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とする通信システム。
【請求項７】
中継機器を介してネットワークに接続される複数のノード装置を備える通信システムにおけるメッセージ送受信方法であって、
何れかの前記ノード装置が、
前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持する工程と、
セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御工程と、
を備え、
前記メッセージ送受信制御工程においては、
前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報にして当該メッセージを宛先のノード装置に送信し、且つ、
前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とするメッセージ送受信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して互いに通信可能な複数のノード装置を備えたピアツーピア（Peer to Peer（P2P））型の通信システムの技術分野に関する。
【背景技術】
【０００２】
この種のピアツーピア型の通信システムにおいて、コンテンツデータを複数のノード装置に分散配置（分散保存）させておくコンテンツ分散保存システムが知られており、これにより、対故障性やアクセスの分散性が高められている。このように分散保存されたコンテンツデータの所在は、例えば特許文献１に開示されるような分散ハッシュテーブル（以下、ＤＨＴ（Distributed Hash Table）という）を利用して効率良く検索可能になっている。これにより、各ノード装置は、上記検索に係るコンテンツデータを保存しているノード装置とのセッションを確立した後、当該ノード装置からコンテンツデータの提供を受けることができる。
【０００３】
これらのノード装置は、中継機器としてのルータを介してネットワークに接続されるようになっており、ノード装置間の通信では、例えばＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）が用いられる。そして、各ノード装置は、他のノード装置と通信を行うためにポートを用意し（開く）、これによりセッションが確立（言い換えれば、通信路が確立）すると、ルータ及びネットワークを介して双方向で通信を行うことができるようになっている。
【０００４】
ところで、グローバルＩＰネットアドレスが割り当てられておらず、プライベートＩＰアドレスしか割り当てられていないノード装置がネットワークに接続するための技術としてＮＡＴ（Network Address Translation）が知られている。このようなＮＡＴにおいては、ＮＡＴ対応ルータが、プライベートＩＰアドレスとグローバルＩＰアドレスを相互に変換することにより、プライベートＩＰアドレスしか割り当てられていないノード装置から、透過的にネットワークに接続できるようになっている。
【０００５】
しかし、このようなＮＡＴにおいては、ネットワーク側（つまり、ＮＡＴ対応ルータの外側）からＮＡＴ対応ルータ内側のノード装置にダイレクトに接続できない、つまり、ＮＡＴ対応ルータの外側のノード装置からＮＡＴ対応ルータ内側のノード装置にセッションを開始できないという問題がある。このような問題を解決するために、利用者がＮＡＴ対応ルータにおいて適切にポートフォワーディング設定をする方法や、「ＵＰｎＰ（Universal Plug and Play）」又は「ＵＤＰ（User Datagram Protocol ） ｈｏｌｅ ｐｕｎｃｈｉｎｇ」などのＮＡＴ越えの技術を用いる方法が知られている。
【特許文献１】特開２００６−１９７４００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＮＡＴ対応ルータにおける上記設定は、専門知識がない利用者には難しく敷居が高いという問題がある。また、ＵＰｎＰ及びＵＤＰ ｈｏｌｅ ｐｕｎｃｈｉｎｇは、すべての場合で成功するとは限らないという問題がある。また、全てのＮＡＴ対応ルータがＵＰｎＰに対応しているとは限らない。
【０００７】
このため、例えば、ＮＡＴ対応ルータ内側のノード装置がコンテンツデータを保存している場合に、ＮＡＴ対応ルータの外側のノード装置が、当該ＮＡＴ対応ルータ内側のノード装置からコンテンツデータの提供を受けることができないという事態が生じる可能性がある。従って、ピアツーピア型の通信システムのメリットが十分に生かせず、当該システムの運用に支障をきたすという問題が生じうる。
【０００８】
本発明は、以上の問題等に鑑みてなされたものであり、ネットワーク側から中継機器を介してセッション開始を受け付けることができないノード装置が通信システムに含まれる場合であっても、当該システムの運用に支障をきたすことなく、各ノード装置の利用者が当該システム上で提供されるサービスを適切に受けることができる通信システム、ノード装置、ノード処理プログラム、及びメッセージ送受信方法を提供することを課題とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、請求項１に記載の発明は、中継機器を介してネットワークに接続される複数のノード装置を備える通信システムにおける前記ノード装置であって、前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持するセッション保持手段と、セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御手段と、を備え、前記メッセージ送受信制御手段は、前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報にして当該メッセージを宛先のノード装置に送信し、且つ、前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とする。
【００１０】
この発明によれば、ネットワーク側から中継機器を介してセッション開始を受け付けることができないノード装置が通信システムに含まれる場合であっても、当該システムの運用に支障をきたすことなく、各ノード装置の利用者が当該システム上で提供されるサービスを適切に受けることができる。また、リソースを無駄なく利用するこができる。
【００１１】
請求項２に記載の発明は、請求項１に記載のノード装置において、前記セッション保持手段は、前記第一ノード装置からのセッション開始を受け付け当該セッションが確立された場合に、前記第一ノード装置のネットワークアドレス情報を記憶し、当該セッションを保持することを特徴とする。
【００１２】
請求項３に記載の発明は、請求項１又は２に記載のノード装置において、前記メッセージ送受信制御手段は、前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報に書き換え、これに前記第一ノード装置を示す中継情報を付加して当該メッセージを宛先のノード装置に送信し、且つ、前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先のネットワークアドレス情報に付加された前記中継情報に基づいて判別することを特徴とする。
【００１３】
請求項４に記載の発明は、請求項１又は２に記載のノード装置において、前記メッセージには、送信元のノード装置に固有のノード識別情報、前記送信元のネットワークアドレス情報、宛先のノード装置に固有のノード識別情報、及び前記宛先のネットワークアドレス情報が含まれており、前記メッセージ送受信制御手段は、前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報に書き換え、当該メッセージを宛先のノード装置に送信し、且つ、前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先の前記ノード識別情報に基づいて判別することを特徴とする。
【００１４】
請求項５に記載のノード処理プログラムの発明は、コンピュータを、請求項１乃至４の何れか一項に記載のノード装置として機能させることを特徴とする。
【００１５】
請求項６に記載の発明は、中継機器を介してネットワークに接続される複数のノード装置を備える通信システムであって、何れかの前記ノード装置は、前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持するセッション保持手段と、セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御手段と、を備え、前記メッセージ送受信制御手段は、前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置にして当該メッセージを宛先のノード装置に送信し、且つ、前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とする。
【００１６】
請求項７に記載の発明は、中継機器を介してネットワークに接続される複数のノード装置を備える通信システムにおけるメッセージ送受信方法であって、何れかの前記ノード装置が、前記ネットワーク側から中継機器を介してセッション開始を受け付けることができない第一ノード装置との間でセッションを確立し保持する工程と、セッションが確立された他のノード装置との間のメッセージの送受信を制御するメッセージ送受信制御工程と、を備え、前記メッセージ送受信制御工程においては、前記第一ノード装置を送信元とするメッセージであって自ノード装置以外のノード装置宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノード装置のネットワークアドレス情報にして当該メッセージを宛先のノード装置に送信し、且つ、前記第一ノード装置以外のノード装置を送信元とするメッセージを受信したとき、当該メッセージが前記第一ノード装置に送信されるべきメッセージであるか否かを判別し、当該第一ノード装置に送信されるべきメッセージである場合には、当該メッセージを当該第一ノード装置に送信するように制御することを特徴とする。
【発明の効果】
【００１７】
本発明によれば、ネットワーク側から中継機器を介してセッション開始を受け付けることができないノード装置が通信システムに含まれる場合であっても、当該システムの運用に支障をきたすことなく、各ノード装置の利用者が当該システム上で提供されるサービスを適切に受けることができる。また、リソースを無駄なく利用するこができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の最良の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ分散保存システムに本発明を適用した場合の実施形態である。
【００１９】
［１．コンテンツ分散保存システムの構成等］
始めに、図１等を参照して、本実施形態に係るコンテンツ分散保存システム（通信システムの一例）の概要構成等について説明する。
【００２０】
図１は、本実施形態に係るコンテンツ分散保存システムにおける各ノード装置の接続態様の一例を示す図である。
【００２１】
図１の下部枠１０１内に示すように、ＩＸ（Internet eＸchange）３、ＩＳＰ（Internet Service Provider）４ａ,４ｂ、ＤＳＬ（Digital Subscriber Line）回線事業者（の装置）５ａ,５ｂ、ＦＴＴＨ（Fiber To The Home）回線事業者（の装置）６、及び通信回線（例えば、電話回線や光ケーブル等）７等によって、インターネット等のネットワーク（現実世界の通信ネットワーク）８が構築されている。
【００２２】
なお、図１の例におけるネットワーク８には、データ（パケット）を転送するための中継機器としてのルータ（図示せず）が適宜挿入されている。
【００２３】
このようなネットワーク８には、複数のノード装置（以下、「ノード」という）Ｎｎ（ｎ＝１，２，３・・・の何れか）がルータを介して接続されている。また、各ノードＮｎには、固有の製造番号およびＩＰアドレス（プライベートＩＰアドレス又はグローバルＩＰアドレス）が割り当てられている。なお、プライベートＩＰアドレスが割り当てられているノードＮｎは、ＮＡＴ対応ルータを通じてネットワーク８に接続されるようになっている。
【００２４】
そして、本実施形態に係るコンテンツ分散保存システムＳは、これらのノードＮｎのうち、図１の上部枠１００内に示すように、何れか複数のノードＮｎの参加により形成されるピアツーピア方式のネットワークシステムとなっている。
【００２５】
なお、図１の上部枠１００内に示すネットワーク９は、既存のネットワーク８を用いて形成された仮想的なリンクを構成するオーバーレイネットワーク９（論理的なネットワーク）である。かかるオーバーレイネットワーク９は、特定のアルゴリズム、例えば、ＤＨＴ（Distributed Hash Table）を利用したアルゴリズムにより実現される。
【００２６】
そして、コンテンツ分散保存システムＳ（言い換えれば、オーバーレイネットワーク９）に参加している各ノードＮｎには、所定桁数からなる固有の識別情報であるノードＩＤが割り当てられている。また、当該ノードＩＤは、例えば、各ノードＮｎに個別に割り当てられたＩＰアドレス或いは製造番号を共通のハッシュ関数（例えば、ＳＨＡ−１等）によりハッシュ化した値（例えば、ｂｉｔ長が１６０ｂｉｔ）であり、一つのＩＤ空間に偏りなく分散して配置されることになる。
【００２７】
なお、コンテンツ分散保存システムＳへの参加は、参加していないノードＮｎ（例えば、ノードＮ８）が、参加している任意のノードＮｎ（例えば、当該システムＳに常時参加しているコンタクトノード）に対して参加要求を示す参加メッセージを送信することによって行われる。
【００２８】
また、各ノードＮｎは、夫々、ＤＨＴを用いたルーティングテーブルを保持している。このルーティングテーブルは、コンテンツ分散保存システムＳ上における各種メッセージの転送先を規定しており、具体的には、ＩＤ空間内で適度に離れたノードＮｎのノードＩＤ、ＩＰアドレス及びポート番号を含むノード情報が複数登録されている。なお、ＩＰアドレスとポート番号の組は、ネットワークアドレス情報を構成する。
【００２９】
コンテンツ分散保存システムＳに参加している１台のノードＮｎは、該システムＳに参加している全てのノードＮｎのうち、必要最低限のノードＮｎのノード情報をルーティングテーブルに登録しておき、ノード情報を知らない（記憶していない）ノードＮｎについては、各ノードＮｎ間で互いに各種メッセージを転送し合って届けてもらうようになっている。
【００３０】
このようなＤＨＴを用いたルーティングテーブルについては、特開２００６−１９７４００号公報等で公知であるので、詳しい説明を省略する。
【００３１】
ところで、コンテンツ分散保存システムＳにおいては、内容の異なる様々なコンテンツ（例えば、映画や音楽等）データ（実際には、コンテンツデータの複製であるレプリカ）所定のファイル形式で複数のノードＮｎに分散して保存（格納）されている。例えば、ノードＮ５には、タイトルがＸＸＸの映画のコンテンツデータ（ファイル）が保存されており、一方、ノードＮ３には、タイトルがＹＹＹの映画のコンテンツデータが保存されるというように、複数のノードＮｎ（以下、「コンテンツ保持ノード」という）に分散されて保存される。
【００３２】
また、これらのコンテンツデータには、夫々、コンテンツ名（タイトル）及びコンテンツＩＤ（コンテンツ毎に固有の識別情報）等の情報が付加されている。このコンテンツＩＤは、例えば、コンテンツ名＋任意の数値（或いは、当該コンテンツデータの先頭数バイトでも良い）が、上記ノードＩＤを得るときと共通のハッシュ関数によりハッシュ化されて生成される（ノードＩＤと同一のＩＤ空間に配置）。或いは、システム管理者が、コンテンツ毎に一意のＩＤ値（ノードＩＤと同一ビット長）を付与しても良い。この場合は、コンテンツ名とそのコンテンツＩＤの対応が書かれたコンテンツカタログ情報が、全ノードＮｎに配布される。
【００３３】
また、このように分散保存されているコンテンツデータの所在、つまり、当該コンテンツデータを保存したノードＮｎのノード情報に係るＩＰアドレス等と当該コンテンツデータに対応するコンテンツＩＤ等の組が含まれるインデックス情報が、当該コンテンツデータの所在の管理元であるノードＮｎ（以下、「ルートノード」、又は「コンテンツ（コンテンツＩＤ）のルートノード」という）等により記憶（インデックスキャッシュに記憶）、管理されるようになっている。つまり、コンテンツデータを保存しているコンテンツ保持ノードのノード情報は、他のノードＮｎからの問い合わせに応じて提供可能なようにルートノードにより管理されている。
【００３４】
例えば、タイトルがＸＸＸの映画のコンテンツデータについてのインデックス情報は、そのコンテンツ（コンテンツＩＤ）のルートノードであるノードＮ４により管理され、タイトルがＹＹＹの映画のコンテンツデータについてのインデックス情報は、そのコンテンツ（コンテンツＩＤ）のルートノードであるノードＮ７により管理される。また、このようなルートノードは、例えば、コンテンツＩＤと最も近い（例えば、上位桁がより多く一致する）ノードＩＤを有するノードＮｎであるように定められる。
【００３５】
そして、あるノードＮｎのユーザが、所望するコンテンツデータを取得したい場合、当該コンテンツデータの取得を望むノードＮｎ（以下、「ユーザノード」という）は、当該ユーザにより選択（リクエスト）されたコンテンツデータのコンテンツＩＤ及び自己のＩＰアドレス等を含むコンテンツ所在問合せ（検索）メッセージ（クエリ）を生成し、これを自己のＤＨＴを用いたルーティングテーブルにしたがって他のノードＮｎに対して送出する。つまり、ユーザノードは、コンテンツ所在問合せ（検索）メッセージを、ルートノードに向けて（ルートノード宛に）送出する。これにより、コンテンツ所在問合せ（検索）メッセージは、コンテンツＩＤをキーとするＤＨＴルーティングによって最終的にルートノードに到着することになる。
【００３６】
なお、各ノードＮｎにおいてユーザにより選択されるべきコンテンツデータのコンテンツ名及びコンテンツＩＤ等の属性情報は、例えばコンテンツ管理サーバから全てのノードＮｎに配信されるコンテンツカタログ情報に記述されている。また、上記コンテンツ所在問合せ（検索）メッセージに含まれるコンテンツＩＤは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。なお、ＤＨＴルーティングについては、特開２００６−１９７４００号公報等で公知であるので、詳しい説明を省略する。
【００３７】
上記コンテンツ所在問合せ（検索）メッセージを受信したルートノードは、これに含まれるコンテンツＩＤに対応するインデックス情報をインデックスキャッシュから取得して、当該インデックス情報を、該コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信する。これにより、ユーザノードは、所望のコンテンツデータを保存している上記コンテンツ保持ノードに対して、コンテンツ送信要求メッセージを送信し、そこから当該コンテンツデータを取得（ダウンロード）することが可能になる。
【００３８】
或いは、ルートノードは、当該インデックス情報に含まれるＩＰアドレス等に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信する。これにより、ユーザノードは、上記コンテンツ保持ノードである例えばノードＮ１から当該コンテンツデータを取得することが可能になる。
【００３９】
なお、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、当該ルートノードと同じインデックス情報をキャッシュしているキャッシュノードから当該インデックス情報を取得することもできる。
【００４０】
このようにコンテンツデータの取得したユーザノードは、当該コンテンツデータをハードディスク等に記憶保存することになる。そして、当該ユーザノードは、当該コンテンツデータを保存したことをそのルートノードに知らせるために（言い換えれば、該システムＳに参加している他のノードＮｎに対して公開するために）、そのコンテンツデータのコンテンツＩＤ及び自己のノード情報が含まれるパブリッシュ（登録通知）メッセージを生成し、該パブリッシュメッセージを、そのルートノードに向けて（ルートノード宛に）送出する。これにより、パブリッシュメッセージは、コンテンツ所在問合せ（検索）メッセージと同じように、コンテンツＩＤをキーとするＤＨＴルーティングによってルートノードに到着することになる。そして、該ルートノードは、受信したパブリッシュメッセージに含まれるノード情報及びコンテンツＩＤの組を含むインデックス情報を登録（インデックスキャッシュ領域に記憶）することになる。
【００４１】
こうして、上記ユーザノードは、新たに、上記コンテンツデータを保持するコンテンツ保持ノードとなる。
【００４２】
なお、上記パブリッシュメッセージに含まれるノード情報及びコンテンツＩＤの組を含むインデックス情報は、ルートノードに至るまでの転送経路におけるキャッシュノードにおいても登録（キャッシュ）される。
【００４３】
以上のように構成されたコンテンツ分散保存システムＳに参加している複数のノードＮｎの中には、ネットワーク８側からルータ（ＮＡＴ対応ルータ）を介してセッション開始を受け付けることができないノード、言い換えれば、ＮＡＴ対応ルータにおいてポートを取得できずＮＡＴ越えできないノード（以下、「ＮＡＴ越え不可ノード」という（第一ノード装置の一例））が存在している。
【００４４】
このようなＮＡＴ越え不可ノードに対しては、ＮＡＴ対応ルータの外側のノードＮｎからセッションを開始できないものの、ＮＡＴ越え不可ノード側からＮＡＴ対応ルータ及びネットワーク８を介して他のノードＮｎに対してセッションを開始することができる。ＮＡＴ越え不可ノードからネットワーク８を介してセッション開始を受け付けたノードＮｎは、当該セッションが確立された場合に、当該セッション（セッション状態）を保持するようになっている。
【００４５】
［２．ノードＮｎの構成及び機能等］
次に、図２を参照して、ノードＮｎの構成及び機能について説明する。
【００４６】
図２は、ノードＮｎの概要構成例を示す図である。
【００４７】
各ノードＮｎは、図２に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データおよびプログラムを記憶するＲＯＭ等から構成されたコンピュータとしての制御部１１と、各種データ（例えば、コンテンツデータのファイル、コンテンツカタログ情報、インデックス情報、ＤＨＴ等）及び各種プログラム等を記憶保存（格納）するためのハードディスクドライブ等から構成された記憶部１２と、受信されたコンテンツデータ等を一時蓄積するバッファメモリ１３と、コンテンツデータに含まれるビデオデータ（映像情報）及びオーディオデータ（音声情報）等をデコード（データ伸張等）するデコーダ部１４と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部１５と、当該映像処理部１５から出力されたビデオ信号に基づき映像表示するＣＲＴ，液晶ディスプレイ等の表示部１６と、上記デコードされたオーディオデータをアナログオーディオ信号にＤ （Digital）／Ａ（Analog）変換した後これをアンプにより増幅して出力する音声処理部１７と、当該音声処理部１７から出力されたオーディオ信号を音波として出力するスピーカ１８と、ネットワーク８を通じて他のノードＮｎや各種サーバ等との間の情報の通信制御を行うための通信部１９と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部１１に対して与える入力部（例えば、キーボード、マウス、或いは、操作パネル等）２０と、を備えて構成され、制御部１１、記憶部１２、バッファメモリ１３、デコーダ部１４、通信部１９、及び入力部２０はバス２１を介して相互に接続されている。なお、ノードＮｎとしては、パーソナルコンピュータ、ＳＴＢ（Set Top Box）、或いは、ＴＶ受信機等を適用可能である。
【００４８】
このような構成において、制御部１１は、ＣＰＵが記憶部１２等に記憶されたプログラムを読み出して実行することにより、全体を統括制御し、コンテンツ分散保存システムＳへの参加により、本発明におけるメッセージ送受信制御手段及びセッション保持手段等として機能しつつ、上述したユーザノード、キャッシュノード、ルートノード、キャッシュノード、及びコンテンツ保持ノードの少なくとも何れか一つのノードとしての処理を行うようになっている。
【００４９】
具体的には、制御部１１は、セッションが確立された他のノードＮｎとの間の上記メッセージの送受信を制御する。そして、一旦、セッションが確立された場合、制御部１１は、メッセージの受信後又は送信後も、当該セッションを保持するようになっている。当該セッションの保持は、ソケットテーブルに、セッション情報が登録（記憶）されることにより行われる。当該セッション情報には、例えば、自身のノード情報、接続先のノード情報、及びソケット識別子が含まれる。
【００５０】
なお、ここでの「ソケットテーブル」は公知のものではなく、本実施形態のために実装したものであり、当該ソケットテーブルは、ネットワークアドレス情報にノードＩＤを結び付けたものである。
【００５１】
また、ソケットテーブルには、複数のセッション情報を登録することができ、これにより、複数のノードＮｎとのセッションを保持することができる。但し、ソケットの数には限りがある（例えば、３０〜５０程度）ので、ソケットテーブルに登録されたセッション情報の数が所定数以上になった場合、例えば最も利用されていないソケットに係るセッション情報から削除されるようになっている。このとき、上記ＮＡＴ越え不可ノードとのセッションに係るセッション情報はできるだけ削除されずに残しておかれる。つまり、ＮＡＴ越え不可ノード以外のノードＮｎとのセッションに係るセッション情報で且つ利用されてないソケットに係るセッション情報が優先されてソケットテーブルから削除される。
【００５２】
なお、ＮＡＴ越え不可ノードのノード情報に含まれるＩＰアドレスは、ＮＡＴ対応ルータの外側のＩＰアドレス（グローバルＩＰアドレス）であり、ＮＡＴ越え不可ノードのノード情報に含まれるポート番号は、ＮＡＴ対応ルータの外側のポート番号（セッション開始時にＮＡＴ対応ルータにおいて選定された空きポートの番号）である。
【００５３】
更に、ＮＡＴ越え不可ノードとのセッションを保持しているノード（ＮＡＴ越え不可ノード以外のノード）Ｎｎの制御部１１は、当該ＮＡＴ越え不可ノードの中継ノードとしての処理を行うようになっている。
【００５４】
具体的には、中継ノードでは中継ノードテーブルを用意しておく。そして、ＮＡＴ越え不可ノードからのセッション開始を受け付け当該セッションが確立された後、当該ＮＡＴ越え不可ノードを送信元とするメッセージあって自ノード以外のノードＮｎ宛てのメッセージが受信されたとき、中継ノードの制御部１１は、ＮＡＴ越え不可ノードに対して固有の中継ノード識別子（当該ＮＡＴ越え不可ノードを示す中継情報の一例）を割り当てる。そして、当該制御部１１は、当該ＮＡＴ越え不可ノードのノード情報と、割り当てた中継ノード識別子とを対応付けて中継ノードテーブルに登録する。
【００５５】
なお、このように登録されたＮＡＴ越え不可ノードのノード情報及び中継ノード識別子は、当該ＮＡＴ越え不可ノードとのセッションが切断、つまり、セッション情報が削除された場合に中継ノードテーブルから削除される。
【００５６】
そして、当該制御部１１は、当該メッセージに含まれる送信元（ＮＡＴ越え不可ノード）のノード情報を自ノードのノード情報に書き換える。つまり、中継ノードの制御部１１は、当該メッセージに含まれる送信元のノード情報を自ノードのノード情報にする。但し、当該書き換えたことを後から判別可能とするため、中継ノードの制御部１１は、当該ＮＡＴ越え不可ノードに割り当てられ中継ノードテーブルに登録されている中継ノード識別子を、書き換え後の自ノードのノード情報に付加して当該メッセージを宛先のノードＮｎに送信する。
【００５７】
他方、上記ＮＡＴ越え不可ノード以外のノードＮｎを送信元とするメッセージが受信されたとき、中継ノードの制御部１１は、当該メッセージが、自身とセッション保持状態にあるＮＡＴ越え不可ノードに送信されるべきメッセージであるか否かを、例えば当該メッセージに含まれる宛先のノード情報に付加された中継ノード識別子に基づいて判別する。当該ＮＡＴ越え不可ノードに送信されるべきメッセージである場合、当該制御部１１は、当該メッセージを、当該ＮＡＴ越え不可ノードに送信するように制御する。例えば、当該メッセージの宛先のノード情報に付加された中継ノード識別子が中継ノードテーブルに登録されている場合、当該受信されたメッセージが、当該中継ノード識別子に対応付けられて中継ノードテーブルに登録されているＮＡＴ越え不可ノードに対して送信されるべきメッセージであると判別される。そして、このように判別された場合、当該メッセージの宛先のノード情報が、当該中継ノード識別子に対応付けられて登録されているＮＡＴ越え不可ノードのノード情報に書き換えられて送信されることになる。
【００５８】
［３．コンテンツ分散保存システムの動作］
次に、本実施形態に係るコンテンツ分散保存システムＳの動作について説明する。
【００５９】
（動作概要）
先ず、図３を参照して動作概要を説明する。
【００６０】
図３は、ＮＡＴ越え不可ノードと中継ノードによるメッセージの送受信の一例を示す概念図である。
【００６１】
なお、図３の例において、ノードＮ１はノード情報が“Ｘ”であるＮＡＴ越え不可ノードである。また、ノードＮ２はノード情報が“Ａ”である中継ノードであり、ノードＮ３はノード情報が“Ｂ”である中継ノードである。また、ノードＮ６は、ノード情報が“Ｙ”であるＮＡＴ越え不可ノードである。
【００６２】
図３に示すように、ＮＡＴ越え不可ノードであるノードＮ１から送信されたメッセージ５１の送信元のノード情報は、ノードＮ１のノード情報になっており、当該ノード情報“Ｘ”には中継ノード識別子として“０”（自身を示す）が付加されている。また、メッセージ５１の宛先としては、ノードＮ２以外の任意のノードＮｎが設定されている。
【００６３】
そして、当該メッセージ５１が中継ノードであるノードＮ２により受信されると、ノードＮ２は、ノードＮ１に対して中継ノード識別子“１”を割り当て、ノードＮ１のノード情報“Ｘ”と、中継ノード識別子“１”とを対応付けて中継ノードテーブルに登録し、セッションを保持する。続いて、ノードＮ２は、当該メッセージ５１における送信元のノード情報“Ｘ”を自身のノード情報“Ａ”に書き換え、且つ、当該ノード情報“Ｘ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“１”を付加する（中継ノード識別子が“０”から“１”に書き換えられる）。このように送信元のノード情報等が書き換えられたメッセージ５２は、宛先となる任意のノードＮｎに送信されることになる。
【００６４】
一方、ノードＮ３における中継ノードテーブルには、既に、ＮＡＴ越え不可ノードであるノードＮ６のノード情報“Ｙ”と中継ノード識別子“１”とが対応付けられて登録され、さらに、ＮＡＴ越え不可ノードであるノードＮ１のノード情報“Ｘ”と中継ノード識別子“２”とが対応付けられて登録されている。
【００６５】
そして、ノードＮ３は、任意のノードＮｎから送信されたメッセージ５３を受信する。かかるメッセージ５３は、ノードＮ３宛てのメッセージとなっているが、当該メッセージ５３の宛先のノード情報“Ｂ”に付加された中継ノード識別子が“０”でなく“２”になっているので、ノードＮ３は、当該メッセージ５３がＮＡＴ越え不可ノードに送信されるべきメッセージであると判別する。続いて、ノードＮ３は、当該メッセージ５３における宛先のノード情報“Ｂ”を、中継ノードテーブルに登録されているノードＮ１のノード情報“Ｘ”に書き換え、且つ、当該ノード情報“Ｂ”に付加されている中継ノード識別子“２”に代えて中継ノード識別子“０”を付加する。このように宛先のノード情報等が書き換えられたメッセージ５４は、ノードＮ３とセッションが保持されているＮＡＴ越え不可ノードであるノードＮ１に送信（中継）されることになる。
【００６６】
（ＮＡＴ越え不可ノードによるコンテンツデータのリクエスト）
次に、図４を参照して、ＮＡＴ越え不可ノードによるコンテンツデータのリクエスト時における動作を説明する。
【００６７】
図４は、ＮＡＴ越え不可ノードによるコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。なお、ノードＮ２における中継ノードテーブルには、既に、ＮＡＴ越え不可ノードであるノードＮ１のノード情報“Ｘ”と中継ノード識別子“１”とが対応付けられて登録されているものとする。
【００６８】
ＮＡＴ越え不可ノードであるノードＮ１がコンテンツＩＤ“Ｆ”のコンテンツデータ（ファイル）をリクエストする場合、ノードＮ１は、宛先のノードＩＤをコンテンツＩＤ“Ｆ”としたコンテンツ所在問合せ（検索）メッセージ（以下、単に、「検索メッセージ」という）６１を生成する。そして、ノードＮ１は、セッションが保持されているノードＮ２に対して上記検索メッセージ６１を送信する。
【００６９】
次に、当該検索メッセージ６１がノードＮ２により受信されると、ノードＮ２は、当該検索メッセージ６１における送信元のノード情報“Ｘ”を自身のノード情報“Ａ”に書き換え、且つ、当該ノード情報“Ｘ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“１”を付加する。そして、ノードＮ２は、当該コンテンツＩＤと最も近いノードＩＤを有する例えばノードＮ４のＩＰアドレス及びポート番号を、ＤＨＴを用いた自身のルーティングテーブルから取得する。そして、ノードＮ２は、ノードＮ４とのセッションを確立して、当該ノードＮ４に対して上記ノード情報が書き換えられた検索メッセージ６２を送信する。
【００７０】
次に、当該検索メッセージ６２がノードＮ４により受信されると、ノードＮ４は、当該検索メッセージ６２に含まれるコンテンツＩＤと最も近いノードＩＤを有するノードＮｎが自身である、つまり、コンテツツＩＤ“Ｆ”のルートノードであることを自身のルーティングテーブルから判断する。そして、ノードＮ４は、当該検索メッセージ６２に含まれるコンテンツＩＤに対応するインデックス情報をインデックスキャッシュから取得する。これにより、コンテンツＩＤ“Ｆ”のコンテンツデータを保存しているコンテンツ保持ノードとしてノードＮ５が特定される。続いて、ノードＮ４は、上記検索メッセージ６２における宛先のノード情報を、上記特定されたノードＮ５のノード情報“Ｃ”にする。そして、ノードＮ４は、ノードＮ５とのセッションを確立して、当該ノードＮ５に対して検索メッセージ６３を送信する。
【００７１】
次に、当該検索メッセージ６３がノードＮ５により受信されると、ノードＮ５は、コンテンツＩＤ“Ｆ”のコンテンツデータを送信可能であれば、送信元のノード情報を自身の“Ｃ”（中継ノード識別子“０”）とし、宛先のノード情報及び中継ノード識別子を検索メッセージ６３に含まれるノードＮ２のノード情報“Ａ”及び中継ノード識別子を“１”とした検索返答メッセージ６４を生成する。そして、ノードＮ５は、ノードＮ２とのセッションを確立して、当該ノードＮ２に対して検索返答メッセージ６４を送信する。
【００７２】
次に、当該検索返答メッセージ６４がノードＮ２により受信されると、ノードＮ２は、当該検索返答メッセージ６４における宛先のノード情報“Ａ”を、中継ノードテーブルに登録されているノードＮ１のノード情報“Ｘ”に書き換え、且つ、当該ノード情報“Ａ”に付加されている中継ノード識別子“１”に代えて中継ノード識別子“０”を付加する。そして、ノードＮ２は、セッションが保持されているノードＮ１に対して検索返答メッセージ６５を送信する。
【００７３】
次に、当該検索返答メッセージ６５がノードＮ１により受信されると、ノードＮ１は、送信元のノード情報を自身の“Ｘ”（中継ノード識別子“０”）とし、宛先のノード情報を検索返答メッセージ６５に含まれるノードＮ５のノード情報“Ｃ”（中継ノード識別子“０”）としたコンテンツ送信要求メッセージ６６を生成する。そして、ノードＮ１は、ノードＮ５に対してセッションを開始しこれを確立して、当該ノードＮ５に対してコンテンツ送信要求メッセージ６６を送信する。なお、ノードＮ１とノードＮ５とのセッションは保持され、ノードＮ５の中継ノードテーブルには、ノードＮ１のノード情報と中継ノード識別子とが対応付けられて登録されることになる。
【００７４】
次に、当該コンテンツ送信要求メッセージ６６がノードＮ５により受信されると、ノードＮ５は、送信元のノード情報を自身の“Ｃ”（中継ノード識別子“０”）とし、宛先のノード情報をノードＮ１のノード情報“Ｘ”（中継ノード識別子“０”）としたコンテンツ送信メッセージ６７を生成する。そして、ノードＮ５は、当該コンテンツ送信メッセージ６７のペイロード部にコンテンツデータのパケットを格納して、当該コンテンツ送信メッセージ６７をノードＮ１に対して送信する（コンテンツデータのアップロード）。
【００７５】
（ＮＡＴ越え不可ノードによるコンテンツデータの公開）
次に、図５を参照して、ＮＡＴ越え不可ノードによるコンテンツデータの公開時における動作を説明する。
【００７６】
図５は、ＮＡＴ越え不可ノードによるコンテンツデータの公開時におけるメッセージの流れの一例を示す概念図である。なお、ノードＮ２における中継ノードテーブルには、既に、ＮＡＴ越え不可ノードであるノードＮ１のノード情報“Ｘ”と中継ノード識別子“１”とが対応付けられて登録されているものとする。
【００７７】
上述したように、ＮＡＴ越え不可ノードであるノードＮ１がノードＮ５から取得したコンテンツデータを記憶部１２に記憶保存すると、ノードＮ１は、宛先のノードＩＤをコンテンツＩＤ“Ｆ”としたパブリッシュメッセージ７１を生成する。そして、ノードＮ１は、セッションが保持されているノードＮ２に対して上記パブリッシュメッセージ７１を送信する。
【００７８】
次に、当該パブリッシュメッセージ７１がノードＮ２により受信されると、ノードＮ２は、当該パブリッシュメッセージ７１における送信元のノード情報“Ｘ”を自身のノード情報“Ａ”に書き換え、且つ、当該ノード情報“Ｘ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“１”を付加する。そして、ノードＮ２は、当該コンテンツＩＤと最も近いノードＩＤを有する例えばノードＮ４のＩＰアドレス及びポート番号を自身のルーティングテーブルから取得する。そして、ノードＮ２は、ノードＮ４とのセッションを確立して、当該ノードＮ４に対して上記ノード情報が書き換えられたパブリッシュメッセージ７２を送信する。
【００７９】
次に、当該パブリッシュメッセージ７２がノードＮ４により受信されると、ノードＮ４は、当該パブリッシュメッセージ７２に含まれるコンテンツＩＤと最も近いノードＩＤを有するルートノードが自身であることを自身のルーティングテーブルから判断する。そして、ノードＮ４は、当該パブリッシュメッセージ７２に含まれるコンテンツＩＤ、送信元のノード情報“Ａ”及びこれに付加された中継ノード識別子“１”を含むインデックス情報を登録（インデックスキャッシュ領域に記憶）する。
【００８０】
（ＮＡＴ越え不可ノードへのコンテンツデータのリクエスト）
次に、図６を参照して、ＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時における動作を説明する。
【００８１】
図６は、ＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。なお、ノードＮ２における中継ノードテーブルには、既に、ＮＡＴ越え不可ノードであるノードＮ１のノード情報“Ｘ”と中継ノード識別子“１”とが対応付けられて登録されているものとする。
【００８２】
ＮＡＴ越え不可ノードであるノードＮ１とのセッションが確立されていないノードＮ３がコンテンツＩＤ“Ｆ”のコンテンツデータをリクエストする場合、ノードＮ３は、宛先のノードＩＤをコンテンツＩＤ“Ｆ”とした検索メッセージ８１を生成する。そして、ノードＮ３は、当該コンテンツＩＤと最も近いノードＩＤを有する例えばノードＮ４のＩＰアドレス及びポート番号を自身のルーティングテーブルから取得する。そして、ノードＮ３は、ノードＮ４とのセッションを確立して、当該ノードＮ４に対して上記検索メッセージ８１を送信する。
【００８３】
次に、当該検索メッセージ８１がノードＮ４により受信されると、ノードＮ４は、当該検索メッセージ８１に含まれるコンテンツＩＤと最も近いノードＩＤを有するルートノードが自身であることを自身のルーティングテーブルから判断する。そして、ノードＮ４は、当該検索メッセージ８１に含まれるコンテンツＩＤに対応するインデックス情報をインデックスキャッシュから取得する。図６の例では、インデックスキャッシュには、コンテンツＩＤ“Ｆ”に対応付けられてノードＮ５のノード情報“Ｃ”及び中継ノード識別子“０”と、ノードＮ２のノード情報“Ａ”及び中継ノード識別子“１”が登録されており、ここでは、“Ａ１”が取得されるものとする。これにより、コンテンツＩＤ“Ｆ”のコンテンツデータを保存しているコンテンツ保持ノードとしてノードＮ２が特定される。但し、ノードＮ２は、ルートノードにおいてコンテンツ保持ノードとして登録されているが、実際には、ノードＮ１がコンテンツ保持ノードということになる。
【００８４】
続いて、ノードＮ４は、上記検索メッセージ８１における宛先のノード情報を上記特定されたノードＮ２のノード情報“Ａ”に書き換え、且つ、中継ノード識別子“０”に代えて“１”を付加する。そして、ノードＮ４は、ノードＮ２とのセッションを確立して、当該ノードＮ２に対して検索メッセージ８２を送信する。
【００８５】
次に、当該検索メッセージ８２がノードＮ２により受信されると、ノードＮ２は、当該検索メッセージ８２における宛先のノード情報“Ａ”を、中継ノードテーブルに登録されているノードＮ１のノード情報“Ｘ”に書き換え、且つ、当該ノード情報“Ａ”に付加されている中継ノード識別子“１”に代えて中継ノード識別子“０”を付加する。そして、ノードＮ２は、セッションが保持されているノードＮ１に対して検索メッセージ８３を送信する。つまり、実際のコンテンツ保持ノードに検索メッセージ８３を転送するのである。
【００８６】
次に、当該検索メッセージ８３がノードＮ１により受信されると、ノードＮ１は、送信元のノード情報を自身の“Ｘ”（中継ノード識別子“０”）とし、宛先のノード情報を検索メッセージ８３に含まれるノードＮ３のノード情報“Ｂ”（中継ノード識別子“０”）とした検索返答メッセージ８４を生成する。そして、ノードＮ１は、ノードＮ３に対してセッションを開始しこれを確立して、当該ノードＮ３に対して検索返答メッセージ８４を送信する。なお、ノードＮ１とノードＮ３とのセッションは保持され、ノードＮ３の中継ノードテーブルには、ノードＮ１のノード情報と中継ノード識別子とが対応付けられて登録されることになる。
【００８７】
次に、当該検索返答メッセージ８４がノードＮ３により受信されると、ノードＮ３は、送信元のノード情報を自身の“Ｂ”（中継ノード識別子“０”）とし、宛先のノード情報をノードＮ１のノード情報“Ｘ”（中継ノード識別子“０”）としたコンテンツ送信要求メッセージ８５を生成する。そして、ノードＮ３は、当該ノードＮ１に対してコンテンツ送信要求メッセージ８５を送信する。
【００８８】
次に、当該コンテンツ送信要求メッセージ８５がノードＮ１により受信されると、ノードＮ１は、送信元のノード情報を自身の“Ｘ”（中継ノード識別子“０”）とし、宛先のノード情報をノードＮ３のノード情報“Ｂ”（中継ノード識別子“０”）としたコンテンツ送信メッセージ８６を生成する。そして、ノードＮ１は、当該コンテンツ送信メッセージ８６のペイロード部にコンテンツデータのパケットを格納して、当該コンテンツ送信メッセージ８６をノードＮ３に対して送信する（コンテンツデータのアップロード）。
【００８９】
（一のＮＡＴ越え不可ノードから他のＮＡＴ越え不可ノードへのコンテンツデータのリクエスト）
次に、図７を参照して、一のＮＡＴ越え不可ノードから他のＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時における動作を説明する。
【００９０】
図７は、一のＮＡＴ越え不可ノードから他のＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。なお、ノードＮ３における中継ノードテーブルには、既に、一のＮＡＴ越え不可ノードであるノードＮ６のノード情報“Ｙ”と中継ノード識別子“１”とが対応付けられて登録されているものとする。また、ノードＮ２における中継ノードテーブルには、既に、他のＮＡＴ越え不可ノードであるノードＮ１のノード情報“Ｘ”と中継ノード識別子“１”とが対応付けられて登録されているものとする。
【００９１】
ＮＡＴ越え不可ノードであるノードＮ６がコンテンツＩＤ“Ｆ”のコンテンツデータをリクエストする場合、ノードＮ６は、宛先のノードＩＤをコンテンツＩＤ“Ｆ”とした検索メッセージ９１を生成する。そして、ノードＮ６は、セッションが保持されているノードＮ３に対して上記検索メッセージ９１を送信する。
【００９２】
次に、当該検索メッセージ９１がノードＮ３により受信されると、ノードＮ３は、当該検索メッセージ９１における送信元のノード情報“Ｙ”を自身のノード情報“Ｂ”に書き換え、且つ、当該ノード情報“Ｙ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“１”を付加する。そして、ノードＮ３は、当該コンテンツＩＤと最も近いノードＩＤを有する例えばノードＮ４のＩＰアドレス及びポート番号を、ＤＨＴを用いた自身のルーティングテーブルから取得する。そして、ノードＮ３は、ノードＮ４とのセッションを確立して、当該ノードＮ４に対して検索メッセージ９２を送信する。
【００９３】
次に、当該検索メッセージ９２がノードＮ４により受信されると、ノードＮ４は、当該検索メッセージ９２に含まれるコンテンツＩＤと最も近いノードＩＤを有するルートノードが自身であることを自身のルーティングテーブルから判断する。そして、ノードＮ４は、当該検索メッセージ９２に含まれるコンテンツＩＤに対応するインデックス情報をインデックスキャッシュから取得する。なお、ここでは、図６の例と同様、“Ａ１”が取得されるものとする。これにより、コンテンツＩＤ“Ｆ”のコンテンツデータを保存しているコンテンツ保持ノードとしてノードＮ２が特定される。
【００９４】
続いて、ノードＮ４は、上記検索メッセージ９２における宛先のノード情報を上記特定されたノードＮ２のノード情報“Ａ”に書き換え、且つ、中継ノード識別子“０”に代えて“１”を付加する。そして、ノードＮ４は、ノードＮ２とのセッションを確立して、当該ノードＮ２に対して検索メッセージ９３を送信する。
【００９５】
次に、当該検索メッセージ９３がノードＮ２により受信されると、ノードＮ２は、当該検索メッセージ９３における宛先のノード情報“Ａ”を、中継ノードテーブルに登録されているノードＮ１のノード情報“Ｘ”に書き換え、且つ、当該ノード情報“Ａ”に付加されている中継ノード識別子“１”に代えて中継ノード識別子“０”を付加する。そして、ノードＮ２は、セッションが保持されているノードＮ１に対して検索メッセージ９４を送信する。
【００９６】
次に、当該検索メッセージ９４がノードＮ１により受信されると、ノードＮ１は、送信元のノード情報を自身の“Ｘ”（中継ノード識別子“０”）とし、宛先のノード情報を検索メッセージ９４に含まれるノードＮ３のノード情報“Ｂ”（中継ノード識別子“１”）とした検索返答メッセージ９５を生成する。そして、ノードＮ１は、ノードＮ３に対してセッションを開始しこれを確立して、当該ノードＮ３に対して検索返答メッセージ９５を送信する。
【００９７】
次に、当該検索返答メッセージ９５がノードＮ３により受信されると、ノードＮ３は、ノードＮ１に対して、ノードＮ６とは重複しない中継ノード識別子“２”を割り当て、ノードＮ１のノード情報“Ｘ”と、中継ノード識別子“２”とを対応付けて中継ノードテーブルに登録し、セッションを保持する。次いで、ノードＮ３は、当該検索返答メッセージ９５における宛先のノード情報“Ｂ”を、中継ノードテーブルに登録されているノードＮ６のノード情報“Ｙ”に書き換え、且つ、当該ノード情報“Ｂ”に付加されている中継ノード識別子“１”に代えて中継ノード識別子“０”を付加する。更に、ノードＮ３は、当該検索返答メッセージ９５における送信元のノード情報“Ｘ”を自身のノード情報“Ｂ”に書き換え、当該ノード情報“Ｘ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“２”を付加する。そして、ノードＮ３は、セッションが保持されているノードＮ６に対して検索返答メッセージ９６を送信する。
【００９８】
次に、当該検索返答メッセージ９６がノードＮ６により受信されると、ノードＮ６は、送信元のノード情報を自身の“Ｙ”（中継ノード識別子“０”）とし、宛先のノード情報を検索返答メッセージ９６に含まれるノードＮ３のノード情報“Ｂ”（中継ノード識別子“２”）としたコンテンツ送信要求メッセージ９７を生成する。そして、ノードＮ６は、ノードＮ３に対してコンテンツ送信要求メッセージ９７を送信する。
【００９９】
次に、当該コンテンツ送信要求メッセージ９７がノードＮ３により受信されると、ノードＮ３は、当該コンテンツ送信要求メッセージ９７における送信元のノード情報“Ｙ”を自身のノード情報“Ｂ”に書き換え、且つ、当該ノード情報“Ｙ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“１”を付加する。更に、ノードＮ３は、当該コンテンツ送信要求メッセージ９７における宛先のノード情報“Ｂ”を、中継ノードテーブルに登録されているノードＮ１のノード情報“Ｘ”に書き換え、且つ、当該ノード情報“Ｂ”に付加されている中継ノード識別子“２”に代えて中継ノード識別子“０”を付加する。そして、ノードＮ３は、セッションが保持されているノードＮ１に対してコンテンツ送信要求メッセージ９８を送信する。
【０１００】
次に、当該コンテンツ送信要求メッセージ９８がノードＮ１により受信されると、ノードＮ１は、送信元のノード情報を自身の“Ｘ”（中継ノード識別子“０”）とし、宛先のノード情報をノードＮ３のノード情報“Ｂ”（中継ノード識別子“１”）としたコンテンツ送信メッセージ９９を生成する。そして、ノードＮ１は、当該コンテンツ送信メッセージ９９のペイロード部にコンテンツデータのパケットを格納して、当該コンテンツ送信メッセージ９９をノードＮ３に対して送信する。
【０１０１】
次に、当該コンテンツ送信メッセージ９９がノードＮ３により受信されると、ノードＮ３は、当該コンテンツ送信メッセージ９９における宛先のノード情報“Ｂ”を、中継ノードテーブルに登録されているノードＮ６のノード情報“Ｙ”に書き換え、且つ、当該ノード情報“Ｂ”に付加されている中継ノード識別子“１”に代えて中継ノード識別子“０”を付加する。更に、ノードＮ３は、当該コンテンツ送信メッセージ９９における送信元のノード情報“Ｘ”を自身のノード情報“Ｂ”に書き換え、当該ノード情報“Ｘ”に付加されている中継ノード識別子“０”に代えて中継ノード識別子“２”を付加する。そして、ノードＮ３は、セッションが保持されているノードＮ６に対してコンテンツ送信メッセージ１００を送信する（コンテンツデータのアップロード）。
【０１０２】
（ノードＮｎの処理）
次に、任意の一つのノードＮｎに着目し、当該ノードＮｎの制御部１１における処理を図８乃至図１０を参照して説明する。
【０１０３】
図８乃至図１０は、任意のノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【０１０４】
図８に示す処理は、例えばノードＮｎにおいて電源オンがなされ、コンテンツ分散保存システムＳへの参加が行われることにより開始される。
【０１０５】
ステップＳ１では、制御部１１は、電源オフ指令があったか否かを判別し、電源オフ指令があった場合には（ステップＳ１：ＹＥＳ）、当該処理を終了し、電源オフ指令がない場合には（ステップＳ１：ＮＯ）、ステップＳ２に進む。
【０１０６】
ステップＳ２では、制御部１１は、ユーザから入力部２０を介してコンテンツデータのリクエストがあったか否かを判別し、当該リクエストがあった場合には（ステップＳ２：ＹＥＳ）、ステップＳ３に進み、当該リクエストがない場合には（ステップＳ２：ＮＯ）、ステップＳ４に進む。
【０１０７】
ステップＳ３では、制御部１１は、リクエストされたコンテンツデータのコンテンツＩＤ等を含む検索メッセージをルートノードに向けて送出する。
【０１０８】
ステップＳ４では、制御部１１は、他のノードＮｎからメッセージを受信したか否かを判断し、当該メッセージを受信した場合には（ステップＳ４：ＹＥＳ）、ステップＳ５に進み、当該メッセージを受信しない場合には（ステップＳ４：ＮＯ）、ステップＳ１に戻る。
【０１０９】
ステップＳ５では、制御部１１は、当該受信されたメッセージの送信元のノードＮｎはＮＡＴ越え不可ノードであるか否かを、例えば当該メッセージに含まれる送信元のノード情報に含まれるポート番号から判別する。例えば、当該ポート番号が無効（例えば“０００００”）である場合、ＮＡＴ対応ルータにおいてポートを取得できなかったと判断できるので、当該メッセージの送信元のノードＮｎはＮＡＴ越え不可ノードであると判別され（ステップＳ５：ＹＥＳ）、ステップＳ６に進み、ＮＡＴ越え不可ノードでないと判別された場合には（ステップＳ５：ＮＯ）、ステップＳ９に進む。
【０１１０】
ステップＳ６では、制御部１１は、上記送信元のＮＡＴ越え不可ノードのノード情報が、中継ノードテーブルに登録済みであるか否かを判別し、登録済みでない場合には（ステップＳ６：ＮＯ）、ステップＳ７に進み、登録済みである場合には（ステップＳ６：ＹＥＳ）、ステップＳ８に進む。
【０１１１】
ステップＳ７では、制御部１１は、当該ＮＡＴ越え不可ノードに対して中継ノード識別子を割り当て、当該ＮＡＴ越え不可ノードのノード情報と、割り当てた中継ノード識別子とを対応付けて中継ノードテーブルに登録する。また、このとき、当該ＮＡＴ越え不可ノードのノード情を含むセッション情報がソケットテーブルに登録され、セッションが保持される。
【０１１２】
ステップＳ８では、制御部１１は、上記受信したメッセージにおけるＮＡＴ越え不可ノードのノード情報を自ノードのノード情報に書き換え、且つ、中継ノードテーブルにしたがって上述したように中継ノード識別子を付加し、ステップＳ９に進む。
【０１１３】
ステップＳ９では、制御部１１は、上記受信したメッセージの宛先のノード情報に含まれるノードＩＤ（又はコンテンツＩＤ）のルートノードは自ノードであるか、つまり、当該ノードＩＤ（又はコンテンツＩＤ）と最も近いノードＩＤを有するノードＮｎが自ノードであるか否かを自身のルーティングテーブルから判別する。そして、当該ルートノードが自ノードでない場合には（ステップＳ９：ＮＯ）、制御部１１は、メッセージの宛先のノード情報に含まれるノードＩＤ（又はコンテンツＩＤ）に最も近いノードＮｎを自身のルーティングテーブルから特定し、当該特定したノードＮｎに対して上記受信したメッセージを送信（転送）し（ステップＳ１０）、ステップＳ１に戻る。
【０１１４】
一方、当該ルートノードが自ノードである場合には（ステップＳ９：ＹＥＳ）、制御部１１は、上記メッセージの宛先のノード情報に不可された中継ノード識別子が“０”であるか否かを判別し（ステップＳ１１）、“０”でない場合には（ステップＳ１１：ＮＯ）、ステップＳ１２に進み、“０”である場合には（ステップＳ１１：ＹＥＳ）、ステップＳ１４に進む。
【０１１５】
ステップＳ１２では、制御部１１は、上記メッセージの宛先のノード情報に付加された中継ノード識別子（０以外）は、中継ノードテーブルに登録済みであるか否かを判別し、登録済みでない場合には（ステップＳ１２：ＮＯ）、ステップＳ１に戻り、登録済みである場合には（ステップＳ１２：ＹＥＳ）、ステップＳ１３に進む。
【０１１６】
ステップＳ１３では、制御部１１は、上記メッセージにおける宛先のノード情報を、中継ノードテーブルに登録されているＮＡＴ越え不可ノードのノード情報に書き換えて中継ノード識別子“０”を付加し、当該メッセージを当該ＮＡＴ越え不可ノードに対して送信（転送）し、ステップＳ１に戻る。
【０１１７】
ステップＳ１４における各種メッセージ受信処理では、図９に示すように、制御部１１は、上記受信されたメッセージが検索メッセージであるか否かを判別する（ステップＳ１４１）。そして、上記受信されたメッセージが検索メッセージである場合には（ステップＳ１４１：ＹＥＳ）、ステップＳ１４２に進み、検索メッセージでない場合には（ステップＳ１４１：ＮＯ）、ステップＳ１４６に進む。
【０１１８】
ステップＳ１４２では、制御部１１は、上記検索メッセージに含まれるコンテンツＩＤに対応するコンテンツデータを保存しているコンテンツ保持ノードに係るインデックス情報を登録しているか否かをインデックスキャッシュから判別する。そして、制御部１１は、当該インデックス情報が登録されている場合には（ステップＳ１４２：ＹＥＳ）、当該インデックス情報を取得してステップＳ１４３に進み、当該インデックス情報が登録されていない場合には（ステップＳ１４２：ＮＯ）、ステップＳ１４４に進む。
【０１１９】
ステップＳ１４３では、制御部１１は、取得したインデックス情報によりコンテンツ保持ノードを特定し、当該コンテンツ保持ノードに対して上記検索メッセージを送信（転送）してステップＳ１４４に進む。
【０１２０】
ステップＳ１４４では、制御部１１は、上記検索メッセージに含まれるコンテンツＩＤに対応するコンテンツデータが自ノードにおける記憶部１２に保存されているか否かを判別し、保存されている場合には（ステップＳ１４４：ＹＥＳ）、ステップＳ１４５に進み、保存されていない場合には（ステップＳ１４４：ＮＯ）、図８の処理に戻る。
【０１２１】
ステップＳ１４５では、制御部１１は、上記検索メッセージに含まれる送信元のノード情報に対応するノードＮｎに対して検索返答メッセージを送信し、図８の処理に戻る。
【０１２２】
ステップＳ１４６では、制御部１１は、上記受信されたメッセージが検索返答メッセージであるか否かを判別し、上記受信されたメッセージが検索返答メッセージである場合には（ステップＳ１４６：ＹＥＳ）、ステップＳ１４７に進み、検索返答メッセージでない場合には（ステップＳ１４６：ＮＯ）、ステップＳ１４８に進む。
【０１２３】
ステップＳ１４７では、制御部１１は、検索返答メッセージにおける送信元のノード情報に対応するコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信し、図８の処理に戻る。
【０１２４】
ステップＳ１４８では、制御部１１は、上記受信されたメッセージがコンテンツ送信要求メッセージであるか否かを判別し、上記受信されたメッセージがコンテンツ送信要求メッセージである場合には（ステップＳ１４８：ＹＥＳ）、ステップＳ１４９に進み、コンテンツ送信要求メッセージでない場合には（ステップＳ１４８：ＮＯ）、ステップＳ１５２に進む。
【０１２５】
ステップＳ１４９では、制御部１１は、現在、コンテンツ送信要求に係るコンテンツデータを配信可能であるか否かを判別し、配信可能である場合には（ステップＳ１４９：ＹＥＳ）、ステップＳ１５０に進み、配信可能でない場合には（ステップＳ１４９：ＮＯ）、ステップＳ１５１に進む。
【０１２６】
ステップＳ１５０では、制御部１１は、上記コンテンツ送信要求メッセージに含まれる送信元のノード情報に対応するユーザノードに対して、上述したように、コンテンツデータが格納されたコンテンツ送信メッセージを送信し、図８の処理に戻る。
【０１２７】
ステップＳ１５１では、制御部１１は、上記コンテンツ送信要求メッセージに含まれる送信元のノード情報に対応するユーザノードに対して、コンテンツ送信不可メッセージを送信し、図８の処理に戻る。
【０１２８】
ステップＳ１５２では、制御部１１は、上記受信されたメッセージがコンテンツ送信メッセージであるか否かを判別し、上記受信されたメッセージがコンテンツ送信メッセージである場合には（ステップＳ１５２：ＹＥＳ）、ステップＳ１５３に進み、コンテンツ送信メッセージでない場合には（ステップＳ１５２：ＮＯ）、ステップＳ１５４に進む。
【０１２９】
ステップＳ１５３では、制御部１１は、コンテンツ送信メッセージに含まれるコンテンツデータを記憶部１１に記憶保存し、これが完了すると、当該コンテンツデータのコンテンツＩＤ等を含むパブリッシュメッセージをルートノードに向けて送出し、図８の処理に戻る。
【０１３０】
ステップＳ１５４では、制御部１１は、上記受信されたメッセージがコンテンツ送信不可メッセージであるか否かを判別し、上記受信されたメッセージがコンテンツ送信不可メッセージである場合には（ステップＳ１５４：ＹＥＳ）、ステップＳ１５５に進み、コンテンツ送信不可メッセージでない場合には（ステップＳ１５４：ＮＯ）、ステップＳ１５６に進む。
【０１３１】
ステップＳ１５５では、制御部１１は、全てのコンテンツデータを管理しているコンテンツ管理サーバに対してコンテンツ送信要求メッセージを送信し、図８の処理に戻る。
【０１３２】
ステップＳ１５６では、制御部１１は、上記受信されたメッセージがパブリッシュメッセージであるか否かを判別し、上記受信されたメッセージがパブリッシュメッセージである場合には（ステップＳ１５６：ＹＥＳ）、ステップＳ１５７に進み、パブリッシュメッセージでない場合には（ステップＳ１５６：ＮＯ）、図８の処理に戻る。
【０１３３】
ステップＳ１５７では、制御部１１は、受信されたパブリッシュメッセージに含まれるコンテンツＩＤ、送信元のノード情報及びこれに付加された中継ノード識別子を含むインデックス情報を新規登録（インデックスキャッシュ領域に記憶）し、図８の処理に戻る。
【０１３４】
以上の図８及び図９の処理における各種メッセージの送信時（ステップＳ３、Ｓ１０、Ｓ１３、Ｓ１４３、Ｓ１４５、Ｓ１４７、Ｓ１５０、Ｓ１５１、及びＳ１５３）には、図１０に示す処理が行われる。
【０１３５】
図１０において、制御部１１は、メッセージの送信に成功したか否かを判別し（ステップＳ２１）、成功した（メッセージを送ることができた）場合には（ステップＳ２１：ＹＥＳ）、当該処理を終了し、成功しなかった場合には（ステップＳ２１：ＮＯ）、ステップＳ２２に進む。
【０１３６】
ステップＳ２２では、制御部１１は、当該メッセージを送信できなかった送信先のノード情報が中継ノードテーブルに登録されているか否かを判別し、登録されている場合には（ステップＳ２２：ＹＥＳ）、ステップＳ２３に進み、登録されていない場合には（ステップＳ２２：ＮＯ）、ステップＳ２４に進む。
【０１３７】
ステップＳ２３では、制御部１１は、当該送信先のノード情報及び中継ノード識別子を中継ノードテーブルから削除し、更に、当該送信先のノードＮｎとのソケットに係るセッション情報をソケットテーブルから削除し、セッションを切断（ソケット切断）し、ステップＳ２４に進む。
【０１３８】
ステップＳ２４では、制御部１１は、当該メッセージを送信できなかった送信先のノード情報が、ＤＨＴを用いたルーティングテーブルに登録されているか否かを判別し、登録されていない場合には（ステップＳ２４：ＮＯ）、当該処理を終了し、登録されている場合には（ステップＳ２４：ＹＥＳ）、当該送信先のノード情報をルーティングテーブルから削除し（ステップＳ２５）、当該処理を終了する。
【０１３９】
以上説明したように、上記実施形態によれば、中継ノードは、ＮＡＴ越え不可ノードを送信元とするメッセージであって自ノード以外のノードＮｎ宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のノード情報を自ノードのノード情報に書き換え、これにＮＡＴ越え不可ノードを示す中継ノード識別子を付加して当該メッセージを宛先のノードＮｎに送信し、且つ、上記ＮＡＴ越え不可ノード以外のノードＮｎを送信元とするメッセージを受信したとき、当該メッセージがＮＡＴ越え不可ノードに送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先のノード情報に付加された中継ノード識別子に基づいて判別し、ＮＡＴ越え不可ノードに送信されるべきメッセージである場合には、当該メッセージを当該ＮＡＴ越え不可ノードに送信（転送）するように構成したので、ＮＡＴ越え不可ノードがコンテンツ分散保存システムＳに参加している場合であっても、当該システムＳの運用に支障をきたすことなく、各ノードＮｎの利用者が当該システムＳ上で提供されるコンテンツデータ配信等のサービスを適切に受けることができる。また、ネットワーク８側からＮＡＴ越え不可ノードに中継ノードを介してアクセス可能となるため、リソースを無駄なく利用するこができる。
【０１４０】
また、一つのＮＡＴ越え不可ノードに対して一つの中継ノードに限定するのではなく、一つのＮＡＴ越え不可ノードに対して複数の中継ノードを設けることができるので、多くの中継ノードを均等に利用することができ、複数の通信経路を確保することで中継ノードの負荷を低減することができる。ＮＡＴ越え不可ノードからのセッション開始により新たにセッションを確立した任意のノードＮｎを中継ノードとすることができる。
【０１４１】
更に、一つのコンテンツデータを所定量の複数分割し、当該分割された夫々の分割コンテンツデータを複数のノードＮｎに分散保存しておき、これらの分割コンテンツデータを順次ダウンロードする構成においても効率化を図ることができる。
【０１４２】
［４．変形例］
次に、上記実施形態の変形例について説明する。
【０１４３】
この変形例においては、上述した中継ノードにおいて中継ノードテーブルは必要とせず、且つ中継ノード識別子も必要としない。但し、当該中継ノードにおけるソケットテーブルに登録されたＮＡＴ越え不可ノードとのセッションに係るセッション情報中の接続先（ＮＡＴ越え不可ノード）のノード情報に含まれるネットワークアドレス情報（つまり、ノードＩＤを除くＩＰアドレス及びポート番号）が当該中継ノードのネットワークアドレス情報に置き換えられるようになっている。なお、変形例におけるノードＮｎの基本的な構成及び機能は上述した実施形態と同様であるので、重複する説明は省略する。
【０１４４】
図１１は、変形例での中継ノードにおけるソケットテーブルの内容の一例を示す図である。図１１の例では、ノードＮ２におけるソケットテーブルにノード情報が登録されているノードＮｎのうち、ノードＮ１はＮＡＴ越え不可ノードであるので、当該ノードＮ１のノード情報に含まれるネットワークアドレス情報は、当該ノードＮ２のネットワークアドレス情報に置き換えられている。また、ノードＮ３におけるソケットテーブルにノード情報が登録されているノードＮｎのうち、ノードＮ１及びＮ６はＮＡＴ越え不可ノードであるので、当該ノードＮ１及びＮ６のノード情報に含まれるネットワークアドレス情報は、当該ノードＮ３のネットワークアドレス情報に置き換えられている。
【０１４５】
なお、書き換えられたＮＡＴ越え不可ノードのＩＰアドレス及びポート番号は、ノードＩＤおよびソケット識別子に対応付けられて記憶されることになる。
【０１４６】
そして、ＮＡＴ越え不可ノードを送信元とするメッセージであって自ノード以外のノードＮｎ宛てのメッセージが受信されたとき、当該中継ノードの制御部１１は、当該メッセージに含まれる送信元のネットワークアドレス情報を自ノードのネットワークアドレス情報に書き換え（ノードＩＤは書き換えない）、当該メッセージを宛先のノードＮｎに送信するようになっている。一方、上記ＮＡＴ越え不可ノード以外のノードＮｎを送信元とするメッセージが受信されたとき、中継ノードの制御部１１は、当該メッセージがＮＡＴ越え不可ノードに送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先のノードＩＤに基づいて判別するようになっている。そして、当該ＮＡＴ越え不可ノードに送信されるべきメッセージである場合、当該制御部１１は、当該メッセージを、当該ＮＡＴ越え不可ノードに送信するように制御する。例えば、当該メッセージの宛先のノード情報に含まれるノードＩＤがＮＡＴ越え不可ノードのものである場合、当該受信されたメッセージが上記ソケットを通して当該ＮＡＴ越え不可ノードに対して送信される。
【０１４７】
以下に、変形例でのノードＮｎの制御部１１における処理を図１２乃至図１４を参照して説明する。
【０１４８】
図１２乃至図１４は、変形例でのノードＮｎの制御部１１における処理の一例を示すフローチャートである。なお、図１２に示すステップＳ３１〜Ｓ３３の処理は、図８に示すステップＳ１〜Ｓ３の処理と同様である。
【０１４９】
ステップＳ３４では、制御部１１は、他のノードＮｎからメッセージを受信したか否かを判断し、当該メッセージを受信した場合には（ステップＳ３４：ＹＥＳ）、ステップＳ３５に進み、当該メッセージを受信しない場合には（ステップＳ３４：ＮＯ）、ステップＳ３１に戻る。
【０１５０】
ステップＳ３５では、制御部１１は、当該セッションは新規（再接続の場合の含む）のセッションであるか否かを例えばソケットテーブルから判別し、新規のセッションである場合には（ステップＳ３５：ＹＥＳ）、ステップＳ３６に進み、新規のセッションでない場合には（ステップＳ３５：ＮＯ）、ステップＳ３７に進む。
【０１５１】
ステップＳ３６におけるコネクション初期化処理では、図１３に示すように、制御部１１は、ソケットテーブルにおけるセッション情報の登録数が所定数（例えば、上限）に達しているか否かを判別し（ステップＳ３６１）、所定数に達している場合には（ステップＳ３６１：ＹＥＳ）、ステップＳ３６２に進み、所定数に達していない場合には（ステップＳ３６１：ＮＯ）、ステップＳ３６３に進む。
【０１５２】
ステップＳ３６２では、制御部１１は、例えば最も利用されていないソケットに係るセッション情報をソケットテーブルから削除し、セッションを切断（ソケット切断）し、ステップＳ３６３に進む。
【０１５３】
ステップＳ３６３では、制御部１１は、互いのノード情報を交換し、新規ソケットの識別子と接続先（通信相手）のノード情報とをソケットテーブルに登録し、ステップＳ３４３に進む。
【０１５４】
ステップＳ３６４では、制御部１１は、当該受信されたメッセージの送信元のノードＮｎはＮＡＴ越え不可ノードであるか否かを判別し、ＮＡＴ越え不可ノードである場合には（ステップＳ３６４：ＹＥＳ）、ステップＳ３６５に進み、ＮＡＴ越え不可ノードでない場合には（ステップＳ３６４：ＮＯ）、ステップＳ３６６に進む。
【０１５５】
ステップＳ３６５では、制御部１１は、ソケットテーブルに登録した接続先のノード情報におけるネットワークアドレス情報（つまり、ＩＰアドレス及びポート番号）を、自ノードのネットワークアドレス情報に置き換える。また、受信されたメッセージの送信元のネットワークアドレス情報を自ノードのネットワークアドレス情報に書き換える。
【０１５６】
ステップＳ３６６では、制御部１１は、当該受信されたメッセージの送信元のノード情報が、ＤＨＴを用いた自身のルーティングテーブルに登録されているか否かを判別し、登録されている場合には（ステップＳ３６６：ＹＥＳ）、当該処理を終了し、登録されていない場合には（ステップＳ３６６：ＮＯ）、ステップＳ３６７に進む。
【０１５７】
ステップＳ３６７では、制御部１１は、当該送信元のノード情報を当該ルーティングテーブルに登録し、図１２の処理に戻る。
【０１５８】
なお、上記ステップＳ３６５の処理後、ステップＳ３６７の処理を行っても良い。すなわち、ネットワークアドレス情報が自ノードのものに書き換えられたＮＡＴ越え不可ノードのノード情報が、ＤＨＴを用いたルーティングテーブルに登録されるのである。これにより、インデックス情報をキャッシュするノードＮｎを増やすことができる。
【０１５９】
図１２の処理に戻り、ステップＳ３７では、制御部１１は、受信されたメッセージがルートノード向けのものであるか否かを判別し（例えば、メッセージ中に付された「ルートノード向け」であることを示す情報により判別）、ルートノード向けのものでない場合には（ステップＳ３７：ＮＯ）、ステップＳ３８に進み、ルートノード向けのものである場合には（ステップＳ３７：ＹＥＳ）、ステップＳ４１に進む。
【０１６０】
ステップＳ３８では、制御部１１は、当該メッセージの宛先のノード情報に含まれるノードＩＤは自ノードのノードＩＤと一致するか否かを判別し、一致しない場合には（ステップＳ３８：ＮＯ）、ステップＳ３９に進み、一致する場合には（ステップＳ３８：ＹＥＳ）、ステップＳ４０に進む。
【０１６１】
ステップＳ３９では、制御部１１は、宛先のノードＮｎに向けてメッセージを送信（転送）する。なお、この送信処理については、図１４を用いて後述する。
【０１６２】
ステップＳ４０では、各種メッセージ受信処理が行われる。この各種メッセージ受信処理は、上述した図９に示す処理と同様である。
【０１６３】
ステップＳ４１では、制御部１１は、上記受信したメッセージの宛先のノード情報に含まれるノードＩＤのルートノードは自ノードであるか否かを判別し（上述したステップＳ９と同様）、自ノードである場合には（ステップＳ４１：ＹＥＳ）、ステップＳ４０に移行し、自ノードでない場合には（ステップＳ４１：ＮＯ）、ステップＳ４２に進む。
【０１６４】
なお、ステップＳ４２の処理は、上述したステップＳ１０の処理と同様である。
【０１６５】
ここで、図１４を用いてメッセージの送信処理の詳細について説明する。
【０１６６】
図１４に示す処理は、上記処理においてメッセージを送信（転送）する場合に実行される。なお、送信するべきメッセージにおける送信元及び宛先のノード情報は既に設定されているものとする。
【０１６７】
図１４において、ステップＳ５１では、制御部１１は、送信するべきメッセージの宛先のノード情報に含まれるノードＩＤと同じノードＩＤがソケットテーブルに登録されているか否かを判別し、当該ノードＩＤが登録されている場合には（ステップＳ５１：ＹＥＳ）、ステップＳ５２に進み、当該ノードＩＤが登録されていない場合には（ステップＳ５１：ＮＯ）、ステップＳ５３に進む。
【０１６８】
ステップＳ５２では、制御部１１は、当該ノードＩＤに対応するノードＮｎに対してソケットを通して当該メッセージを送信しステップＳ５６に進む。
【０１６９】
例えば、ノードＮ２が送信しようとしているメッセージの宛先のノード情報に含まれるノードＩＤが“ＸＸＸＸＸ”である場合、図１１に示すように、当該ノードＮ２のソケットテーブルには、ノードＩＤ“ＸＸＸＸＸ”が登録されているので、ノードＩＤ“ＸＸＸＸＸ”のソケットが使用されてノードＮ１（ＮＡＴ越え不可ノード）に、当該メッセージが送信されることになる。
【０１７０】
ステップＳ５３では、制御部１１は、送信するべきメッセージの宛先のノード情報に含まれるネットワークアドレス情報と同じネットワークアドレス情報がソケットテーブルに登録されているか否かを判別し、当該ネットワークアドレス情報が登録されている場合には（ステップＳ５３：ＹＥＳ）、ステップＳ５２に進み、当該ネットワークアドレス情報が登録されていない場合には（ステップＳ５３：ＮＯ）、ステップＳ５４に進む。
【０１７１】
例えば、ノードＮ２が送信しようとしているメッセージの宛先のノード情報に含まれるノードＩＤが“ＹＹＹＹＹ”であり、且つ、ネットワークアドレス情報が“２００．２０．２．２”である場合、図１１に示すように、ノードＮ２のソケットテーブルには、“ＹＹＹＹＹ”のノードＩＤは登録されていないが、“２００．２０．２．２”のネットワークアドレス情報が登録されているので、当該ネットワークアドレス情報が使用されて、これに対応するノードＮ３に当該メッセージが送信されることになる。そして、ノードＮ３においては、図１１に示すように、ソケットテーブルには、ノードＩＤ“ＹＹＹＹＹ”が登録されているので、当該ノードＩＤ“ＹＹＹＹＹ”のソケットが使用されてノードＮ６（ＮＡＴ越え不可ノード）に当該メッセージが送信されることになる。つまり、ノードＮ２は、当該メッセージをノードＮ３により中継してもらい、ノードＮ６に送信するのである。
【０１７２】
一方、ステップＳ５４では、制御部１１は、送信するべきメッセージの宛先のノード情報に含まれるネットワークアドレス情報を使用してセッションを開始し、当該セッションが確立された場合には、ステップＳ５５に示すコネクション初期化処理を行った後、ステップＳ５２に移行する。なお、このコネクション初期化処理は、上述した図１３に示す処理と同様である。
【０１７３】
次に、ステップＳ５６では、制御部１１は、メッセージの送信に成功したか否かを判別し、成功した場合には（ステップＳ５６：ＹＥＳ）、当該処理を終了し、成功しなかった場合には（ステップＳ５６：ＮＯ）、ステップＳ５７に進む。
【０１７４】
ステップＳ５７では、制御部１１は、当該メッセージを送信できなかった送信先のノードＮｎとのソケットに係るセッション情報をソケットテーブルから削除し、セッションを切断し、ステップＳ５８に進む。
【０１７５】
ステップＳ５８では、制御部１１は、当該送信先のノード情報が、ＤＨＴを用いたルーティングテーブルに登録されているか否かを判別し、登録されていない場合には（ステップＳ５８：ＮＯ）、当該処理を終了し、登録されている場合には（ステップＳ５８：ＹＥＳ）、当該送信先のノード情報をルーティングテーブルから削除し（ステップＳ５９）、当該処理を終了する。
【０１７６】
以上説明したように、上記変形例によれば、中継ノードは、ＮＡＴ越え不可ノードを送信元とするメッセージであって自ノード以外のノードＮｎ宛てのメッセージを受信したとき、当該メッセージに含まれる送信元のノード情報に含まれるネットワークアドレス情報だけを自ノードのネットワークアドレス情報に書き換え（ノードＩＤはそのまま）、当該メッセージを宛先のノードＮｎに送信し、且つ、上記ＮＡＴ越え不可ノード以外のノードＮｎを送信元とするメッセージを受信したとき、当該メッセージがＮＡＴ越え不可ノードに送信されるべきメッセージであるか否かを、当該メッセージに含まれる宛先のノードＩＤに基づいて判別し、ＮＡＴ越え不可ノードに送信されるべきメッセージである場合には、当該メッセージを当該ＮＡＴ越え不可ノードに送信（転送）するように構成したので、ＮＡＴ越え不可ノードがコンテンツ分散保存システムＳに参加している場合であっても、中継ノードテーブル及び中継ノード識別子を必要とせずに、先に説明した実施形態よりも効率化を図りつつ、各ノードＮｎの利用者が当該システムＳ上で提供されるコンテンツデータ配信等のサービスを適切に受けることができる。
【０１７７】
なお、上記においては、中継ノードは、ＮＡＴ越え不可ノードを送信元とするメッセージであって自ノード以外のノードＮｎ宛てのメッセージを受信したとき、当該メッセージに含まれる送信元の少なくともネットワークアドレス情報を自ノードのネットワークアドレス情報に書き換えて当該メッセージを宛先のノードＮｎに送信するように構成したが、その他にも、例えば、送信元のネットワークアドレス情報を書き換えることなく、自ノードを送信元としてネットワークアドレス情報を付加して当該メッセージを他のノードＮｎに送信するように構成しても良い。つまり、当該メッセージを受信した他のノードＮｎが中継ノードが送信元であることが認識でき、かつ中継ノードは受信したメッセージがＮＡＴ越え不可ノードに送信するべきメッセージであるか否かを判断できれば良い。
【０１７８】
なお、上記実施形態におけるコンテンツ分散保存システムＳは、ＤＨＴを利用したアルゴリズムによって形成されることを前提として説明したが、本発明はこれに限定されるものではない。
【図面の簡単な説明】
【０１７９】
【図１】本実施形態に係るコンテンツ分散保存システムにおける各ノード装置の接続態様の一例を示す図である。
【図２】ノードＮｎの概要構成例を示す図である。
【図３】ＮＡＴ越え不可ノードと中継ノードによるメッセージの送受信の一例を示す概念図である。
【図４】ＮＡＴ越え不可ノードによるコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。
【図５】ＮＡＴ越え不可ノードによるコンテンツデータの公開時におけるメッセージの流れの一例を示す概念図である。
【図６】ＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。
【図７】一のＮＡＴ越え不可ノードから他のＮＡＴ越え不可ノードへのコンテンツデータのリクエスト時におけるメッセージの流れの一例を示す概念図である。
【図８】任意のノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【図９】任意のノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【図１０】任意のノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【図１１】変形例での中継ノードにおけるソケットテーブルの内容の一例を示す図である。
【図１２】変形例でのノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【図１３】変形例でのノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【図１４】変形例でのノードＮｎの制御部１１における処理の一例を示すフローチャートである。
【符号の説明】
【０１８０】
８  ネットワーク
９  オーバーレイネットワーク
１１  制御部
１２  記憶部
１３  バッファメモリ
１４  デコーダ部
１５  映像処理部
１６  表示部
１７  音声処理部
１８  スピーカ
１９  通信部
２０  入力部
２１  バス
Ｎｎ  ノード
Ｓ  コンテンツ分散保存システム
【図１】
2008294627.tif 000003
【図２】
2008294627.tif 000004
【図３】
2008294627.tif 000005
【図４】
2008294627.tif 000006
【図５】
2008294627.tif 000007
【図６】
2008294627.tif 000008
【図７】
2008294627.tif 000009
【図８】
2008294627.tif 000010
【図９】
2008294627.tif 000011
【図１０】
2008294627.tif 000012
【図１１】
2008294627.tif 000013
【図１２】
2008294627.tif 000014
【図１３】
2008294627.tif 000015
【図１４】
2008294627.tif 000016