(57)【特許請求の範囲】
【請求項１】
通信ネットワーク上で固有のアドレス情報が割り当てられ又はこれと同等の複数の第１ノード装置と、前記固有のアドレス情報が割り当てられていない複数の第２ノード装置と、が所定のアルゴリズムによって構築されるオーバーレイネットワークに参加しており、前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有する情報通信システムであって、
１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続する接続手段を
備えることを特徴とする情報通信システム。
【請求項２】
請求項１に記載の情報通信システムにおいて、
前記第２ノード装置は、自己と対をなす前記第１ノード装置に対して定期的にデータパケットを送信することにより接続状態を維持する接続状態維持手段を
備えることを特徴とする情報通信システム。
【請求項３】
請求項１又は２に記載の情報通信システムにおいて、
前記第２ノード装置と対をなす前記第１ノード装置の位置情報の管理元である前記第１ノード装置は、当該第２ノード装置と対をなす前記第１ノード装置のアドレス情報を記憶する記憶手段を
備えることを特徴とする情報通信システム。
【請求項４】
請求項３に記載の情報通信システムにおいて、
前記１のノード装置の前記接続手段は、前記他の第２ノード装置と対をなす前記他の第１ノード装置の位置情報ＩＤに基づき、仲介要求情報を前記管理元である第１ノード装置まで転送させ、
当該管理元である第１ノード装置は、前記仲介要求情報を受信してこれを前記他の第１ノード装置に転送する転送手段を備えることを特徴とする情報通信システム。
【請求項５】
請求項１乃至４の何れか一項に記載の情報通信システムにおいて、
前記オーバーレイネットワークに新たに参加する前記第２ノード装置は、
自己と対をなすことになる前記第１ノード装置のアドレス情報を取得するアドレス情報取得手段と、
前記取得されたアドレス情報にしたがって参加要求情報を前記第１ノード装置に送信する参加要求情報送信手段と、
を備えることを特徴とする情報通信システム。
【請求項６】
請求項１乃至５の何れか一項に記載の情報通信システムにおいて、
前記第２ノード装置は、
自己と対をなす前記第１ノード装置の前記オーバーレイネットワークからの脱退を検出する脱退検出手段と、
前記脱退が検出された場合に、新たに自己と対をなすことになる前記第１ノード装置のアドレス情報を取得するアドレス情報取得手段と、
前記取得されたアドレス情報にしたがって仲介申込情報を前記第１ノード装置に送信する仲介申込情報送信手段と、
ことを特徴とする情報通信システム。
【請求項７】
請求項５又は６に記載の情報通信システムにおいて、
前記アドレス情報取得手段は、前記通信ネットワークに対して与える負荷が相対的に小さくなる第１ノード装置のアドレス情報を、前記自己と対をなすことになる第１ノード装置のアドレス情報として取得する
ことを特徴とする情報通信システム。
【請求項８】
請求項１乃至７の何れか一項に記載の情報通信システムに含まれることを特徴とする前記ノード装置。
【請求項９】
コンピュータを、請求項８に記載のノード装置として機能させることを特徴とするコンピュータプログラム。
【請求項１０】
通信ネットワーク上で固有のアドレス情報が割り当てられ又はこれと同等の複数の第１ノード装置と、前記固有のアドレス情報が割り当てられていない複数の第２ノード装置と、が所定のアルゴリズムによって構築されるオーバーレイネットワークに参加しており、前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有する情報通信システムにおける情報通信方法であって、
１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続することを特徴とする情報通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネット等の通信ネットワークを介して互いに接続された複数のノード装置を備えたピアツーピア（Peer to Peer（P2P））型の情報通信システム及び方法等の技術分野に関する。
【背景技術】
【０００２】
インターネット等で標準的に使用されるプロトコルであるＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）で通信を行う場合、送信元や送信先を識別するアドレスとしてＩＰ（Internet Protocol）アドレスが使用される。このＩＰアドレスとして、インターネット上で一意に割り当てられるグローバルＩＰアドレスと、組織内や家庭内等のＬＡＮ（Local Area Network）内でのみ一意なプライベートＩＰアドレスと、が知られている。
【０００３】
プライベートＩＰアドレスが割り当てられている（設定されている）ＬＡＮ側の機器から当該インターネット側の機器に接続（アクセス）する場合、ＮＡＴ（Network Address Translator）等を用いてプライベートＩＰアドレスからグローバルＩＰアドレスに変換されることが必要である。
【０００４】
一方、インターネット側（ＮＡＴ外側）の機器から、ＮＡＴを挟んで、プライベートＩＰアドレスが割り当てられているＬＡＮ側（ＮＡＴ内側）の機器に対して接続する場合には、ＮＡＴ越えのための工夫が必要になっている。これは、ＮＡＴ外側から到来したパケットをＮＡＴ内側のどの装置に転送すべきなのかが指示されていない状態では、そのパケットが廃棄されるからである。このＮＡＴ越え技術としてＵＰｎＰ（Universal Plug and Play Forum）を用いた技術と、ＵＤＰ（User Datagram Protocol）Ｈｏｌｅ Ｐｕｎｃｈｉｎｇを用いた技術が知られている。
【０００５】
ＵＰｎＰを用いた技術では、インターネット側（ＮＡＴ外側）のグローバルＩＰアドレスとポート番号（例えば、ＮＡＴ機能搭載のルータに割り当てられているグローバルＩＰアドレスとポート番号）と、ＬＡＮ側（ＮＡＴ内側）の機器に割り当てられているプライベートＩＰアドレスとポート番号との対応付け（ポートマッピング）が、ＬＡＮ側機器からの指示によりなされており、インターネット側（ＮＡＴ外側）の機器は、インターネット側（ＮＡＴ外側）のＮＡＴ機能搭載のルータのグローバルＩＰアドレスとポート番号に基づきＬＡＮ側（ＮＡＴ内側）の機器に対して接続することになる（例えば、ポート番号“９０００”番宛てのパケットはポートマッピングに示されたＬＡＮ側（ＮＡＴ内側）の機器に転送される）。
【０００６】
一方、ＵＤＰ Ｈｏｌｅ Ｐｕｎｃｈｉｎｇを用いた技術では、仲介サーバを設けて、インターネット側（ＮＡＴ外側）の機器から、ＬＡＮ側（ＮＡＴ内側）の機器に対して接続する場合には、上記仲介サーバを介して接続タイミングの同期を図るようになっており、ＬＡＮ側（ＮＡＴ内側）の機器は、仲介サーバとの接続状態を常に維持している必要がある。
【０００７】
インターネット上における全てのルータがＵＰｎＰに対応していれば、全ての機器がグローバルＩＰアドレスを持っているのと同等なので、ピアツーピア型の情報通信システムを構成することにさしたる困難はない。しかしながら、ＵＰｎＰに対応してないルータも世の中には数多く存在しており、そのようなルータが持つＮＡＴ内側の機器に、インターネット側からアクセスするには、ＵＤＰ Ｈｏｌｅ Ｐｕｎｃｈｉｎｇのような技術が必要になるのである。
【０００８】
特許文献１には、インターネットに接続された少なくとも１つの機器と、インターネットに接続可能な少なくとも１つの端末との間の通信を、インターネットに接続されたサーバを介して転送する通信システムが開示されている。
【特許文献１】特開２００４−１２０５４７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、ピアツーピア型の情報通信システムにおいては、機器（以下、「ノード装置」と称する）間の直接通信が基本となるが、インターネット側（ＮＡＴ外側）のノード装置から、プライベートＩＰアドレスが割り当てられているＬＡＮ側（ＮＡＴ内側）のノード装置に接続する場合に、上記ＵＤＰ Ｈｏｌｅ Ｐｕｎｃｈｉｎｇを用いた技術を適用すると、利用者の増加に伴って仲介サーバへのアクセス集中が発生するという問題が想定される。
【００１０】
本発明は、以上の問題等に鑑みてなされたものであり、上記仲介サーバのような特定の装置へのアクセス集中を回避することが可能な情報通信システム、情報通信方法、ノード装置、及びコンピュータプログラムを提供することを課題とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、請求項１に記載の発明は、通信ネットワーク上で固有のアドレス情報が割り当てられ又はこれと同等の複数の第１ノード装置と、前記固有のアドレス情報が割り当てられていない複数の第２ノード装置と、が所定のアルゴリズムによって構築されるオーバーレイネットワークに参加しており、前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有する情報通信システムであって、１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続する接続手段を備えることを特徴とする。
【００１２】
この発明によれば、オーバーレイネットワークに参加している前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有し、１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続するように構成したので、仲介サーバのような特定の装置へのアクセス集中を回避することができる。
【００１３】
請求項２に記載の発明は、請求項１に記載の情報通信システムにおいて、前記第２ノード装置は、自己と対をなす前記第１ノード装置に対して定期的にデータパケットを送信することにより接続状態を維持する接続状態維持手段を備えることを特徴とする。
【００１４】
この発明によれば、第１ノード装置とこれと対をなす第２ノード装置との接続状態を維持することができる。
【００１５】
請求項３に記載の発明は、請求項１又は２に記載の情報通信システムにおいて、前記第２ノード装置と対をなす前記第１ノード装置の位置情報の管理元である前記第１ノード装置は、当該第２ノード装置と対をなす前記第１ノード装置へ接続するための接続情報を記憶する記憶手段を備えることを特徴とする。
【００１６】
この発明によれば、各前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に対して、より効率良く接続することができる。
【００１７】
請求項４に記載の発明は、請求項３に記載の情報通信システムにおいて、前記１のノード装置の前記接続手段は、前記他の第２ノード装置と対をなす前記他の第１ノード装置の位置情報ＩＤに基づき、仲介要求情報を前記管理元である第１ノード装置まで転送させ、当該管理元である第１ノード装置は、前記仲介要求情報を受信してこれを前記他の第１ノード装置に転送する転送手段を備えることを特徴とする。
【００１８】
この発明によれば、各前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に対して、より効率良く接続することができる。
【００１９】
請求項５に記載の発明は、請求項１乃至４の何れか一項に記載の情報通信システムにおいて、前記オーバーレイネットワークに新たに参加する前記第２ノード装置は、自己と対をなすことになる前記第１ノード装置のアドレス情報を取得するアドレス情報取得手段と、前記取得されたアドレス情報にしたがって参加要求情報を前記第１ノード装置に送信する参加要求情報送信手段と、を備えることを特徴とする。
【００２０】
この発明によれば、前記第２ノード装置は、オーバーレイネットワークに容易に参加することができる。
【００２１】
請求項６に記載の発明は、請求項１乃至５の何れか一項に記載の情報通信システムにおいて、前記第２ノード装置は、自己と対をなす前記第１ノード装置の前記オーバーレイネットワークからの脱退を検出する脱退検出手段と、前記脱退が検出された場合に、新たに自己と対をなすことになる前記第１ノード装置のアドレス情報を取得するアドレス情報取得手段と、前記取得されたアドレス情報にしたがって仲介申込情報を前記第１ノード装置に送信する仲介申込情報送信手段と、ことを特徴とする。
【００２２】
この発明によれば、前記第２ノード装置は、自己と対をなす第１ノード装置がオーバーレイネットワークから脱退したとしても、新たに自己と対をなす第１ノード装置に効率よく接続することができる。
【００２３】
請求項７に記載の発明は、請求項５又は６に記載の情報通信システムにおいて、前記アドレス情報取得手段は、前記通信ネットワークに対して与える負荷が相対的に小さくなる第１ノード装置のアドレス情報を、前記自己と対をなすことになる第１ノード装置のアドレス情報として取得することを特徴とする。
【００２４】
この発明によれば、通信ネットワークに対して与える負荷が低減されたオーバーレイネットワークを構築することができる。
【００２５】
請求項８に記載のノード装置は、請求項１乃至７の何れか一項に記載の情報通信システムに含まれることを特徴とする。
【００２６】
請求項９に記載のコンピュータプログラムは、コンピュータを、請求項８に記載のノード装置として機能させることを特徴とする。
【００２７】
請求項１０に記載の発明は、通信ネットワーク上で固有のアドレス情報が割り当てられ又はこれと同等の複数の第１ノード装置と、前記固有のアドレス情報が割り当てられていない複数の第２ノード装置と、が所定のアルゴリズムによって構築されるオーバーレイネットワークに参加しており、前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有する情報通信システムにおける情報通信方法であって、１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続することを特徴とする。
【発明の効果】
【００２８】
本発明によれば、オーバーレイネットワークに参加している前記第１ノード装置とこれに接続された前記第２ノード装置との対を複数有し、１の前記ノード装置は、自己と対をなす１の前記ノード装置以外の他の前記第２ノード装置に接続する場合には、当該他の前記第２ノード装置と対をなす他の前記第１ノード装置を仲介して当該他の第２ノード装置に接続するように構成したので、仲介サーバのような特定の装置へのアクセス集中を回避することができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の最良の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ配信システムに対して本発明を適用した場合の実施形態である。
【００３０】
［１．コンテンツ配信システムの構成等］
始めに、図１を参照して、情報通信システムの一例であるコンテンツ配信システムの概要構成等について説明する。
【００３１】
図１は、本実施形態に係るコンテンツ配信システムにおける各ノード装置の接続態様の一例を示す図である。
【００３２】
図１の下部枠１０１内に示すように、ＩＸ（Internet eＸchange）３、ＩＳＰ（Internet Service Provider）４ａ,４ｂ、ＤＳＬ（Digital Subscriber Line）回線事業者（の装置）５ａ,５ｂ、ＦＴＴＨ（Fiber To The Home）回線事業者（の装置）６、及び通信回線（例えば、電話回線や光ケーブル等）７等によって、インターネット等のネットワーク（現実世界の通信ネットワーク）８が構築されている。なお、図１の例におけるネットワーク（通信ネットワーク）８には、データ（パケット）を転送するためのルータが、適宜挿入されているが図示を省略している。
【００３３】
コンテンツ配信システムＳは、このようなネットワーク８を介して相互に接続可能な複数のノード装置（以下、単に「ノード」という）ｎ１，ｎ２・・・ｎ２１を備えて構成されることになり、ピアツーピア方式のネットワークシステムとなっている（なお、実際には、これ以上のノードが存在することになる）。なお、以下の説明において、ノードｎ１〜ｎ２１の何れかを示す場合には、ノードｎｎという場合がある。
【００３４】
また、本実施形態においては、各ノードｎｎは、ＮＡＴ内側（ＬＡＮ側）に存在していることを前提としており（各ノードｎｎには、プライベートＩＰアドレスが割り当てられている）、１のノードｎｎからネットワーク８を介して他のノードｎｎに接続する場合には、図示しないＮＡＴ機能搭載ルータによりプライベートＩＰアドレスがアドレス情報としてのグローバルＩＰアドレスに変換されるようになっている。また、各ノードｎｎへの接続は、上述した、ＵＰｎＰを用いた技術と、ＵＤＰ ＨｏｌｅＰｕｎｃｈｉｎｇを用いた技術の何れかの方法が採られる。
【００３５】
なお、以下の説明において、ＵＰｎＰを用いた技術により接続可能なノードｎｎを、ＵＰｎＰ対応ノードｎｎ（第１ノード装置）といい、ＵＤＰ Ｈｏｌｅ Ｐｕｎｃｈｉｎｇを用いた技術により接続可能なノード装置ｎｎを、ＵＤＰ非対応ノードｎｎ（第２ノード装置）という。
【００３６】
本実施形態においては、各ＵＰｎＰ非対応ノードｎｎに対する仲介サーバとしての役割は、複数のＵＰｎＰ対応ノードｎｎが担うことになる。つまり、従来のような専用の仲介サーバを必要とせず、ＵＰｎＰ対応ノードｎｎが仲介ノードとして機能することになる。
【００３７】
なお、本実施形態においては、全てのノードがＮＡＴ内側（ＬＡＮ側）に存在することを前提とするが、ノードｎｎの全部又は一部がネットワーク側（ＮＡＴ外側）に存在し、個別にグローバルＩＰアドレスが割り当てられていてもよい（プライベートＩＰアドレスが割り当てられたＵＰｎＰ対応ノードｎｎと、グローバルＩＰアドレスが割り当てられたノードｎｎとは、機能的には同等である）。
【００３８】
そして、このコンテンツ配信システムＳにおいては、特定のアルゴリズム、例えば、ＤＨＴ（Distributed Hash Table）を利用したアルゴリズムによって、図１の上部枠１００内に示すような、オーバーレイネットワーク９が構築されることになる。つまり、このオーバーレイネットワーク９は、既存のネットワーク８を用いて形成された仮想的なリンクを構成するネットワーク（論理的なネットワーク）を意味する。
【００３９】
本実施形態においては、ＤＨＴを利用したアルゴリズムによって構築されたオーバーレイネットワーク９を前提としており、このオーバーレイネットワーク９（図１の上部枠１００内）に配置されたノードｎ１〜ｎ１５を、オーバーレイネットワーク９に参加しているノードｎｎという。言い換えれば、オーバーレイネットワーク９は、複数のノードｎｎの参加により形成されている。このようなオーバーレイネットワーク９への参加は、参加していないノードｎ１６〜ｎ２１が、参加している任意のノードｎｎに対して参加要求を示す参加要求情報を送信することによって行われる。
【００４０】
また、各ノードｎｎは、固有のノードＩＤを有しており、当該ノードＩＤは、例えば、各ノードｎｎ固有の製造番号を共通のハッシュ関数（例えば、ＳＨＡ−１等）によりハッシュ化した値（例えば、ｂｉｔ長が１６０ｂｉｔ）であり、一つのＩＤ空間に偏りなく分散して配置されることになる。
【００４１】
このように共通のハッシュ関数により求められた（ハッシュ化された）ノードＩＤは、製造番号が異なれば、同じ値になる確率が極めて低いものである。なお、ハッシュ関数については公知であるので詳しい説明を省略する。
【００４２】
また、オーバーレイネットワーク９に参加している各ノードｎｎは、夫々、ＤＨＴを保持している。このＤＨＴは、オーバーレイネットワーク９上における情報の転送先を規定しており、具体的には、ノードＩＤ空間内で適度に離れたノードｎｎのノードＩＤとそのＩＰアドレス及びポート番号（本実施形態においては、ノードｎｎに対応するＮＡＴ外側（つまり、ＮＡＴ機能搭載ルータ）のグローバルＩＰアドレス及びポート番号、以下同様）等のノード情報が複数登録されたルーティングテーブル（転送先テーブル）が含まれている。
【００４３】
このようなＤＨＴは、ノードｎｎがオーバーレイネットワーク９に参加する際に与えられることになる。
【００４４】
また、コンテンツ配信システムＳにおいては、ノードｎｎによるオーバーレイネットワーク９への参加、若しくは脱退が頻繁に行われるため、定期的に（例えば数十分から数時間間隔で）ＤＨＴの更新が必要かどうかが確認されると共に、その更新情報がＤＨＴのルーティングテーブルにしたがって他のノードｎｎに伝達されるようになっている。これにより、ＤＨＴを最新の状態に保つことが可能となる。
【００４５】
更に、コンテンツ配信システムＳにおいては、様々なコンテンツ（例えば、映画や音楽等）データが、オーバーレイネットワーク９に参加している複数のノードｎｎに分散して保存（格納）されている。例えば、ノードｎ１には、タイトルがＸＸＸの映画のコンテンツデータが保存されており、一方、ノードｎ２には、タイトルがＹＹＹの映画のコンテンツデータが保存されるというように、互いに異なるコンテンツデータが、複数のノードｎｎに分散されて保存される。
【００４６】
また、あるコンテンツデータは、１つのノードｎｎに保存されているとは限らず、複数のノードｎｎに同じコンテンツデータが保存されうる。これらのコンテンツデータには、夫々、コンテンツ名（タイトル）等が付与されている。
【００４７】
そして、このように分散保存されているコンテンツデータの所在を示す所在情報（例えば、コンテンツデータが保存されているノードｎｎのＩＰアドレス及びポート番号）は、オーバーレイネットワーク９に参加している複数のノードｎｎに分散して保存されている。例えば、あるコンテンツデータのコンテンツ名（或いは、当該コンテンツデータの先頭数バイトでも良い）が、上記ノードＩＤを得るときと共通のハッシュ関数によりハッシュ化され（つまり、ノードｎｎのノードＩＤと同一のＩＤ空間に配置）、そのハッシュ値（当該ハッシュ値がコンテンツＩＤとなる）と最も近い（例えば、上位桁がより多く一致する）ノードＩＤを有するノードｎｎに、当該コンテンツデータの所在情報が保存されることになる。つまり、同一のコンテンツデータ（コンテンツＩＤが同一）が、夫々、複数のノードｎｎに保存されている場合であっても、かかるコンテンツデータの所在を示す所在情報（複数のノードｎｎのＩＰアドレス等）は、１つのノードｎｎで管理することができる（このようにコンテンツデータの所在を管理するノードｎｎを、以下、「コンテンツルートノード」という）。
【００４８】
なお、本実施形態においては、１のコンテンツルートノードでは、１のコンテンツＩＤに対応するコンテンツデータの所在情報が保存される（つまり、コンテンツルートノードと上記所在情報とは１対１の関係にある）が、これに限定されるものではない）。
【００４９】
これにより、あるコンテンツデータを取得（ダウンロード）したいユーザが使用する例えばノードｎ４は、当該コンテンツデータのコンテンツＩＤが付加された（コンテンツＩＤをキーとする）クエリ（問合せ情報）を他のノードｎｎに対して送出することにより、当該コンテンツＩＤが付加されたクエリは、いくつかのノードｎｎ（これを、「中継ノード」という）を経由されて（各中継ノードにおいて、上記ＤＨＴのルーティングテーブルが参照されてコンテンツＩＤが転送される）そのコンテンツデータの所在を示す所在情報を保存しているコンテンツルートノードに辿り着き、当該コンテンツルートノードから当該所在情報を取得（受信）することが可能となり、取得した所在情報に基づいて上記コンテンツデータを保存している例えばノードｎ５に接続し、そこから当該コンテンツデータを取得（受信）することが可能になる。
【００５０】
なお、コンテンツＩＤがコンテンツルートノードに辿り着くまでの間に当該ルートノードと同じ所在情報をキャッシュしているノードｎｎから当該所在情報を取得（受信）されるようにしてもよい。
【００５１】
図２は、ＤＨＴのノードＩＤ空間において、ノードｎ４から送出されたクエリがコンテンツルートノードまで転送される様子の一例を示す図である。図２の例において、各中継ノードは、受信したクエリに付加されたコンテンツＩＤと、ＤＨＴのルーティングテーブルに登録されているノードＩＤとを比較して、次に転送すべきノードｎｎを特定（例えば、コンテンツＩＤの上位数桁が一致するノードＩＤに対応するノードｎｎのＩＰアドレス及びポート番号を特定）し、そこにクエリを転送することになる。
【００５２】
さて、上述したように、本実施形態におけるオーバーレイネットワーク９には、ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎとが参加しているが、ＵＰｎＰ非対応ノードｎｎへの接続は、これと対をなすＵＰｎＰ対応ノードｎｎを仲介するようになっている。各ノードｎｎ（ＵＰｎＰ対応ノードｎｎ又はＵＰｎＰ非対応ノードｎｎ）は、自己と対をなすノードｎｎ（ＵＰｎＰ非対応ノードｎｎ又はＵＰｎＰ対応ノードｎｎ）以外の他のＵＰｎＰ非対応ノードｎｎに接続する場合には、当該他のＵＰｎＰ非対応ノードｎｎと対をなす他のＵＰｎＰ対応ノードｎｎを仲介して当該他のＵＰｎＰ非対応ノードｎｎに接続する接続手段を有する。
【００５３】
ここで、ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎとの対とは、１対１の対に限定されるものではなく、１対ｎ（ｎは自然数）であっても構わない。
【００５４】
図３は、ＤＨＴのノードＩＤ空間において、ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎとの対の一例を表す概念図である。
【００５５】
図３の例では、ＵＰｎＰ対応ノードｎ１とＵＰｎＰ非対応ノードｎ１１、ＵＰｎＰ対応ノードｎ１４とＵＰｎＰ非対応ノードｎ２、ＵＰｎＰ対応ノードｎ３とＵＰｎＰ非対応ノードｎ５、及びＵＰｎＰ対応ノードｎ７とＵＰｎＰ非対応ノードｎ１０、が対となり、ＵＤＰ Ｈｏｌｅを維持（ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎとの接続状態を維持）している（つまり、ＵＤＰ Ｈｏｌｅとしてのポートが閉じないように、ＵＰｎＰ非対応ノードｎｎからＵＰｎＰ対応ノードｎｎに対して定期的（例えば、３分間隔）にデータパケットを送信している）。なお、図３の例ではＵＤＰで接続を維持しているが、代わりにＴＣＰで接続しても良い。その場合は、ＵＰｎＰ非対応ノードから、ＵＰｎＰ対応ノードに向けて、初めのコネクションを張り、その後定期的なデータパケットの送信により、接続が維持される。いずれにせよ、ＵＰｎＰ非対応ノードｎ１１に対して、ＵＰｎＰ対応ノードｎ１が、いつでも即座に情報を伝達できるような状態にしておくことが肝要である。
【００５６】
そして、当該ＩＤ空間上における何れかのノードｎｎ（ＵＰｎＰ対応ノードｎｎ、或いはＵＰｎＰ非対応ノードｎｎ）が、例えばＵＰｎＰ非対応ノードｎ１０に接続する場合には、これと対をなす仲介ノードとしてのＵＰｎＰ対応ノードｎ７を一旦仲介するようになっている。
【００５７】
以下、図４及び図５を参照して、このようなノードＩＤ空間におけるＤＨＴを用いた通信について説明する。
【００５８】
図４は、ノードｎ１が保持するＤＨＴのルーティングテーブルの一例を示す図であり、図５は、ＤＨＴのノードＩＤ空間において、ＵＰｎＰ対応ノードｎ１がＵＰｎＰ非対応ノードｎ１０に接続し、通信を開始するまでの流れの一例を示す図である。
【００５９】
図４の例において、ＤＨＴのルーティングテーブルは、レベル１〜レベル３のテーブル（複数のセルを有する）からなり（複数のレベルに区分されており）、各レベルのテーブルには、エリア毎に、情報の転送先となるノードｎｎのノード情報が登録されている。各レベルのテーブルにおける各エリアは、ＤＨＴのノードＩＤ空間を分割することにより得られるエリアである（この例では、ノードＩＤ空間を４つに分割した場合の例であるが、これに限定されるものではない）。
【００６０】
また、ノードｎｎのノード情報には、図４の符号５１部に示すように、ノードＩＤ、ＩＰアドレス及びポート番号、並びに、仲介ノード情報が含まれる。また、テーブル（セル）に登録されたノードｎｎが、ＵＰｎＰ対応ノードｎｎの場合、当該仲介ノード情報は、ｎｕｌｌであり、一方、ＵＰｎＰ非対応ノードｎｎの場合、当該仲介ノード情報には、これと対をなす仲介ノードとしてのＵＰｎＰ対応ノードｎｎの位置情報（以下、「仲介ノード位置情報」という）を知るノードを特定するためのＩＤ（以下、「仲介ノード位置情報ＩＤ」という)が含まれることになる。なお、仲介ノード位置情報には、仲介ノードのＩＰアドレス、ポート番号、及び仲介ノード位置情報ＩＤが含まれることになる。
【００６１】
なお、図４に示すエリア３、６、９のセルは、自己（ノードｎ１）に対応するセルであるので、ノード情報が登録されていない。
【００６２】
そして、例えば、ＵＰｎＰ対応ノードｎ１が、ＤＨＴのルーティングテーブルのレベル１のエリア２におけるＵＰｎＰ非対応ノードｎ１０に接続し通信を行いたい場合、当該ノードｎ１は、自己のＤＨＴのルーティングテーブルから、ＵＰｎＰ非対応ノードｎ１０の仲介ノード情報に含まれる仲介ノード位置情報ＩＤ（ＵＰｎＰ対応ノードｎ７の位置情報を記憶しているノードを知るためのＩＤ）を取得し、当該取得した仲介ノード位置情報ＩＤが付加された（仲介ノード位置情報ＩＤをキーとする）仲介要求情報としての仲介要求メッセージを、例えば、図４及び図５に示すように、自己のＤＨＴのルーティングテーブルに登録されているノードｎ３に対して送信する。
【００６３】
そして、上記仲介要求メッセージを受信したノードｎ３は、自己のＤＨＴのルーティングテーブル（図示せず）を参照して、仲介要求メッセージに付加されたノードＩＤと最も近い（例えば、上位桁がより多く一致する）ノードＩＤに対応する例えばノードｎ６のノード情報を取得し、図５に示すように、当該ノードｎ６に対して、上記仲介要求メッセージを転送する。このように仲介要求メッセージは、ＤＨＴルーティングにより、中継ノードを転送していき（つまり、ＵＰｎＰ対応ノードｎ１は、ＵＰｎＰ非対応ノードｎ１０と対をなすＵＰｎＰ対応ノードｎ７の位置情報を知っているノードに辿り着くための仲介ノード位置情報ＩＤに基づき、仲介要求メッセージをＵＰｎＰ対応ノードｎ６まで転送させる）、最終的に（自己のノードＩＤが、仲介要求メッセージに付加されたノードＩＤに最も近く、転送先がなくなった場合）、仲介要求メッセージに付加されたノードＩＤを有するＵＰｎＰ対応ノードｎ７の所在情報を保持するＵＰｎＰ対応ノードｎ６に辿り着く（つまり、ＵＰｎＰ対応ノードｎ６は、仲介ノードであるＵＰｎＰ対応ノードｎ７の位置情報のルートノードということができる）。これにより、ＵＰｎＰ対応ノードｎ１は、ＵＰｎＰ非対応ノードｎ１０に対して、より効率良く接続することができる。
【００６４】
ＵＰｎＰ対応ノードｎ６は、仲介ノードであるＵＰｎＰ対応ノードｎ７の所在情報を含む仲介ノード位置情報を記憶しており、上記仲介要求メッセージ（ＵＰｎＰ対応ノードｎ１のＩＰアドレス及びポート番号が含まれる）を、図５に示すように、ＵＰｎＰ対応ノードｎ７に対して転送する。
【００６５】
なお、ＤＨＴルーティングの経路上で、仲介ノード位置情報を保持しているキャッシュノードから仲介要求メッセージが転送されてもよい。また、ルートノートであるＵＰｎＰ対応ノードｎ６若しくはキャッシュノードから、一旦、ＵＰｎＰ対応ノードｎ１に対して仲介ノード位置情報が送信され、ＵＰｎＰ対応ノードｎ１から直接仲介ノードであるＵＰｎＰ対応ノードｎ７に対して仲介要求メッセージが送信されるように構成しても良い。
【００６６】
そして、ＵＰｎＰ対応ノードｎ７は、図５に示すように、ＵＤＰ Ｈｏｌｅにより、自己と対をなすＵＰｎＰ非対応ノードｎ１０に対して、受信した接続要求メッセージを送信する。こうして、当該接続要求メッセージを受信したＵＰｎＰ非対応ノードｎ１０は、自己に対応するＮＡＴ外側（つまり、ＮＡＴ機能搭載ルータ）のポート（つまり、図４に示すＤＨＴのルーティングテーブルのレベル１のエリア２におけるＵＰｎＰ非対応ノードｎ１０のノード情報に含まれるポート番号）を開放（パンチングにより）し、図５に示すように、ＵＰｎＰ対応ノードｎ１に対して接続応答メッセージを送信する。これにより、ＵＰｎＰ対応ノードｎ１は、ＵＰｎＰ非対応ノードｎ１０と接続して、通信が開始されることになる。
【００６７】
一方、例えば、ＵＰｎＰ非対応ノードｎ２が、ＵＰｎＰ非対応ノードｎ１０に接続し通信を行いたい場合、ＵＰｎＰ非対応ノードｎ１０の仲介ノード情報に含まれるノードＩＤが付加された仲介要求メッセージを、例えばノードｎ３に対して送信する工程の前又は後に、自己に対応するＮＡＴ外側（つまり、ＮＡＴ機能搭載ルータ）のポートを開放するためにダミーメッセージをＵＰｎＰ非対応ノードｎ１０宛てに送出する（当該ダミーメッセージは、ＵＰｎＰ非対応ノードｎ１０に届かない）という工程が追加される（その他の工程は上記と同様である）。これにより、このＮＡＴ機能搭載ルータには、ノードｎ１０からのＵＤＰパケットを受け付けて、ＮＡＴ内側のノードｎ２に転送（フォワード）する設定がなされる。ここにノードｎ１０からの接続応答メッセージが届くことで、ＮＡＴ越しの通信経路が確立する。ＵＤＰパケットのやりとりが続く限り、お互いのＮＡＴ機能搭載ルータのＵＤＰ Ｈｏｌｅが維持され、ＮＡＴ越しの通信ができるようになる。これが、ＵＤＰ Ｈｏｌｅ Ｐｕｎｃｈｉｎｇである。通常のＮＡＴ機能搭載ルータでは、ＮＡＴ内側からＵＤＰパケットが外向きに送出されてから３０秒〜５分程度は、逆方向のパケットを元の送信装置に転送（フォワード）するように実装設計されていることを利用した技術である。
【００６８】
図５の例では、仲介ノード位置情報のルートノードやキャッシュノードが、ＵＰｎＰ対応ノードである例になっているが、それらのノードがＵＰｎＰ非対応ノードになる場合もあり得る。そうした場合でも、それぞれのノードの仲介ノードを介して、各種メッセージが届けられ、通常のＤＨＴと同様にシステムが機能する。
【００６９】
次に、図６を参照して、ノードｎｎの構成について説明する。
【００７０】
図６は、ノードｎｎの概要構成例を示す図である。
【００７１】
ノードｎｎは、夫々、図６に示すように、演算機能を有するＣＰＵ，作業用ＲＡＭ，各種データ及びプログラムを記憶するＲＯＭ等から構成されたコンピュータとしての制御部１１と、各種データ（例えば、コンテンツデータ、所在情報、ＤＨＴ）及びプログラム等を記憶保存（格納）するためのＨＤＤ等から構成された記憶手段としての記憶部１２と、受信されたコンテンツデータを一時的に蓄積するバッファメモリ１３と、コンテンツデータに含まれるエンコードされたビデオデータ（映像情報）及びオーディオデータ（音声情報）等をデコード（データ伸張や復号化等）するデコーダ部１４と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部１５と、当該映像処理部１５から出力されたビデオ信号に基づき映像表示するＣＲＴ，液晶ディスプレイ等の表示部１６と、上記デコードされたオーディオデータをアナログオーディオ信号にＤ（Digital）／Ａ（Analog）変換した後これをアンプにより増幅して出力する音声処理部１７と、当該音声処理部１７から出力されたオーディオ信号を音波として出力するスピーカ１８と、ネットワーク８を通じて他のノードｎｎとの間の情報通信制御を行うための通信部２０と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部１１に対して与える入力部（例えば、キーボード、マウス、或いは、操作パネル等）２１と、を備えて構成され、制御部１１、記憶部１２、バッファメモリ１３、デコーダ部１４、及び通信部２０は、バス２２を介して相互に接続されている。
【００７２】
このような構成において、制御部１１は、ＣＰＵが記憶部１２等に記憶されたプログラム（本発明のコンピュータプログラムを含む）を読み出して実行することにより、全体を統括制御すると共に、本発明の接続手段、接続状態維持手段、転送手段、アドレス情報取得手段、参加要求情報送信手段、脱退検出手段、及び仲介申込情報送信手段等として機能し、後述する各種処理を行うようになっている。
【００７３】
なお、上記コンピュータプログラムは、例えば、ネットワーク８上の所定のサーバからダウンロードされるようにしてもよいし、例えば、ＣＤ−ＲＯＭ等の記録媒体に記録されて当該記録媒体のドライブを介して読み込まれるようにしてもよい。
【００７４】
[２．コンテンツ配信システムの動作]
次に、本実施形態におけるコンテンツ配信システムＳの動作について説明する。
【００７５】
（オーバーレイネットワーク９に新規参加する場合の動作）
先ず、図７乃至図１３を参照して、ノードｎｎ（新規参加ノード）がオーバーレイネットワーク９に参加する際の動作について説明する。
【００７６】
なお、以下の説明において、ノードｎｎという場合には、ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎの何れか一方を示すものとする。
【００７７】
図７（Ａ）は、ＤＨＴのノードＩＤ空間において、参加要求メッセージ等の流れの一例を示す図であり、図７（Ｂ）は、ＤＨＴのノードＩＤ空間において、パブリッシュメッセージの流れの一例を示す図である。
【００７８】
図８（Ａ）は、ノードｎｎのメインルーチンを示すフローチャートであり、図８（Ｂ）は、図８（Ａ）に示すステップＳ４にて設定されたＵＤＰ Ｈｏｌｅ維持イベントタイマが起動したときの処理を示すフローチャートである。
【００７９】
また、図９（Ａ）は、図８（Ａ）に示すステップＳ２におけるＵＰｎＰ対応ノードｎｎ（新規参加ノード）の参加要求処理の詳細を示すフローチャートであり、図９（Ｂ）は、ＵＰｎＰ対応ノードｎｎ（新規参加ノード）から送出された（又は送出され、転送された）参加要求メッセージを受信した場合におけるノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図９（Ｃ）は、参加応答メッセージを受信した場合におけるノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートである。
【００８０】
また、図１０（Ａ）は、図８（Ａ）に示すステップＳ３におけるＵＰｎＰ非対応ノードｎｎ（新規参加ノード）の参加要求処理の詳細を示すフローチャートであり、図１０（Ｂ）は、ＵＰｎＰ非対応ノードｎｎ（新規参加ノード）から送出された参加要求メッセージを受信した場合における仲介ノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１０（Ｃ）は、ＵＰｎＰ非対応ノードｎｎ（新規参加ノード）から送出された（又は送出され、転送された）参加要求メッセージを受信した場合におけるノードｎｎ（仲介ノードｎｎを除く）の処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１０（Ｄ）は、参加応答メッセージを受信した仲介ノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１０（Ｅ）は、ルート到達メッセージを受信した仲介ノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１０（Ｆ）は、ルート到達メッセージを受信したＵＰｎＰ非対応ノードｎｎ（新規参加ノード）の処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１０（Ｆ）は、パブリッシュメッセージを受信したノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートである。
【００８１】
また、図１１は、図９（Ｂ）に示すステップＳ２４、図１０（Ｂ）に示すステップＳ３６、及び図１０（Ｃ）に示すステップＳ３９におけるノードｎｎの参加要求メッセージ転送処理の詳細を示すフローチャートである。
【００８２】
また、図１２（Ａ）は、仲介要求メッセージを受信したノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１２（Ｂ）は、接続要求メッセージを受信したノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１２（Ｃ）は、接続応答メッセージを受信したノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートである。
【００８３】
また、図１３は、図９（Ｃ）に示すステップＳ２９におけるノードｎｎのルーティングテーブル更新処理の詳細を示すフローチャートである。
【００８４】
図８（Ａ）の処理は、ノードｎｎの電源が投入（電源ＯＮ）された場合に開始され、先ず、制御部１１は、自己（自ノード）がＵＰｎＰ非対応ノードであるか否かを自己の設定により判別し（ステップＳ１）、ＵＰｎＰ非対応ノードでない場合には（ステップＳ１：Ｎ）、ステップＳ２におけるＵＰｎＰ対応ノードの参加要求処理を行い、ＵＰｎＰ非対応ノードである場合には（ステップＳ１：Ｙ）、ステップＳ３におけるＵＰｎＰ非対応ノードの参加要求処理を行う（詳細は後述）。
【００８５】
次いで、ステップＳ４では、制御部１１は、ＵＤＰ Ｈｏｌｅ維持イベントタイマ設定（例えば、３分後に起動するようにタイマ設定）を行う。
【００８６】
次いで、ステップＳ５では、制御部１１は、電源ＯＦＦになったか否かを判別し、電源ＯＦＦになった場合には（ステップＳ５：Ｙ）、当該処理を終了する。一方、電源ＯＦＦでない場合には（ステップＳ５：Ｎ）、制御部１１は、ユーザによる入力部２１からのコンテンツ要求操作があるか否かを判別し（ステップＳ６）、操作がある場合には（ステップＳ６：Ｙ）、コンテンツ要求処理を行う（ステップＳ７）。このコンテンツ要求処理においては、制御部１１は、ユーザにより入力部２１を介して指定されたコンテンツデータのコンテンツＩＤが付加された（コンテンツＩＤをキーとする）クエリ（問合せ情報）を他のノードｎｎに対して送出し、上述したＤＨＴルーティング（図２参照）により、当該コンテンツデータの所在情報を得て、当該コンテンツデータを、他のノードｎｎから取得（ダウンロード）して再生制御を行うことになる。
【００８７】
一方、ユーザによる入力部２１からのコンテンツ要求操作がない場合には（ステップＳ６：Ｎ）、制御部１１は、メッセージ（例えば、後述する参加要求メッセージ、参加応答メッセージ、ルート到達メッセージ、パブリッシュメッセージ、仲介要求メッセージ、接続要求メッセージ、接続応答メッセージ、仲介申込メッセージ、仲介承諾メッセージ等）の受信があるか否かを判別し（ステップＳ８）、当該受信がある場合には（ステップＳ８：Ｙ）、当該メッセージ毎の処理（詳細は後述）を行う（ステップＳ９）。一方、メッセージの受信がない場合には（ステップＳ８：Ｎ）、ステップＳ５の処理に戻る。こうして上記処理は、ノードｎｎにおいて、電源ＯＦＦとなるまで繰り返し実行される。
【００８８】
次に、上記ステップＳ４にて設定されたＵＤＰ Ｈｏｌｅ維持イベントタイマが起動すると、図８（Ｂ）に示すＵＤＰ Ｈｏｌｅ維持イベント発生処理が開始され、接続状態維持手段としての制御部１１は、ＵＤＰ Ｈｏｌｅ維持のための空パケットを自己と対をなす仲介ノードに対して送信し（ステップＳ１１）、ＵＤＰ Ｈｏｌｅ維持イベントタイマ設定（例えば、３分後に起動するようにタイマ設定）を行い（ステップＳ１２）、当該処理を終了する。こうして、ＵＤＰ Ｈｏｌｅ維持イベント発生処理は、定期的に行われることになる。
【００８９】
次に、上記ステップＳ２におけるＵＰｎＰ対応ノードの参加要求処理においては、図９（Ａ）に示すように、当該ＵＰｎＰ対応ノードｎｎ（新規参加ノード）の制御部１１は、参加要求メッセージを送信すべきコンタクトノードｎｎのノード情報を取得（例えば、常時電源がＯＮになっており、かつ、ＵＰｎＰ対応になっている複数のノードのノード情報を製品出荷時に記憶部１２に記憶しておき、その中から例えばランダムに１つ選択）し（ステップＳ２１）、当該コンタクトノードｎｎに対して、オーバーレイネットワーク９への参加要求を示す参加要求メッセージ（自己のＩＰアドレスを送り元アドレスとし、コンタクトノードのＩＰアドレスを宛先アドレスとした参加要求パケット）であって、自己のノードＩＤが付加された（自己のノードＩＤをキーとする）参加要求メッセージを、通信部２０及びネットワーク８を介して（以下同じ）、送信し（ステップＳ２２）、当該処理を終了する。なお、この参加要求メッセージには、ＵＰｎＰ対応ノードｎｎで有ることを示す情報が含まれる。
【００９０】
当該参加要求メッセージがノードｎｎにおいて受信されると、図９（Ｂ）に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがＵＰｎＰ対応ノードｎｎである場合（その判断は、図８（Ａ）に示すステップＳ９にて行われる）にのみ行われる処理である。
【００９１】
図９（Ｂ）に示すステップＳ２３では、制御部１１は、参加要求メッセージの送信元であるＵＰｎＰ対応ノードｎｎに対して、自己のＤＨＴのルーティングテーブルが付加された参加応答メッセージ（自己のＩＰアドレスを送り元アドレスとし、参加要求メッセージの送信元であるＵＰｎＰ対応ノードｎｎのＩＰアドレスを宛先アドレスとした参加応答パケット）を送信する。
【００９２】
次いで、制御部１１は、参加要求メッセージ転送処理（詳細は後述）を行い（ステップＳ２４）、ルーティングテーブル更新処理を行い（ステップＳ２５）、当該処理を終了する。このルーティングテーブル更新処理においては、制御部１１は、自己のルーティングテーブルに登録されたノードＩＤのうち、参加要求メッセージに付加されたノードＩＤ（つまり、新規参加ノードのノードＩＤ）と最も近い（例えば、上位桁がより多く一致する）ノードＩＤに対応する仲介ノード情報がｎｕｌｌであるか否かが判別され、ｎｕｌｌでない（つまり、ＵＰｎＰ非対応ノードｎｎである）場合には、当該ノードＩＤを含むノード情報が、参加要求メッセージに付加されたノードＩＤを含むノード情報に書き換え更新される。これにより、ルーティングテーブルに登録されるノード情報は、ＵＰｎＰ対応ノードｎｎのノード情報が優先してルーティングテーブルに登録されることになるので、円滑なルーティングテーブルにしていくことが可能となる。つまり、ルーティングテーブルに、ＵＰｎＰ非対応ノードｎｎのノード情報が多いと、仲介ノードを経由することになり非効率的であり、ネットワーク負荷としても望ましくないが、このように構成することで、効率的なルーティングテーブルを生成していくことができる。
【００９３】
上記参加応答メッセージが、参加要求メッセージの送信元であるノードｎｎにおいて受信されると、図９（Ｃ）に示す処理が開始される。
【００９４】
図９（Ｃ）に示すステップＳ２６では、制御部１１は、参加応答メッセージに添付されたルーティングテーブルを取得する。次いで、制御部１１は、変数ｉを初期化（“０”に設定）し（ステップＳ２７）、変数ｉがルーティングテーブルのセル数（例えば、図４に示す例では、セル数は、１２個）より小さいか否かを判別し（ステップＳ２８）、小さい場合には（ステップＳ２８：Ｙ）、ルーティングテーブル更新処理（詳細は後述）を行い（ステップＳ２９）、変数ｉを“１”インクリメントしてステップＳ２８に戻る。そして、当該処理は、変数ｉがセル数（例えば、１２）に達する（ステップＳ２８：Ｎ）まで、繰り返し行われる。
【００９５】
次に、上記ステップＳ３におけるＵＰｎＰ非対応ノード（新規参加ノード）の参加要求処理においては、図１０（Ａ）に示すように、当該ＵＰｎＰ非対応ノードｎｎの制御部１１は、アドレス情報取得手段として、参加要求メッセージを送信すべきコンタクトノードｎｎのノード情報を取得（例えば、常時電源がＯＮになっており、かつ、ＵＰｎＰ対応になっている複数のノードのノード情報を製品出荷時に記憶部１２に記憶しておき、その中から例えばランダムに１つ選択）し（ステップＳ３１）、当該コンタクトノードｎｎを当該新規参加ノードｎｎの仲介ノードとして決定する。
【００９６】
ここで、ＵＰｎＰ対応になっている複数のノードのうちから、１のノードを仲介ノードとして選択する場合に、例えば、ネットワーク８に対して与える負荷が相対的に小さくなるノード、言い換えれば、新規参加ノードとネットワーク的に近い（例えば、ＨＯＰ数が最も少ない（介在するルータ数が最も少ない））ノードが仲介ノードとして選択される（例えば、パケットを送受信してそのＴＴＬ値で判断）ように構成すれば、ネットワーク８に対して与える通信負荷を低減させることが可能となる（ネットワーク８に対して与える負荷が低減されたオーバーレイネットワーク９を構築することができる）。
【００９７】
続いて、制御部１１は、仲介ノード位置情報ＩＤ（＝仲介ノード位置情報を記憶させるノードを特定するためのＩＤ）を生成し、当該生成した仲介ノード位置情報ＩＤと仲介ノード（コンタクトノードでもある）のＩＰアドレス及びポート番号を含む仲介ノード位置情報を、後ほどステップＳ４５でパブリッシュのために使われるまで自己のメモリに記憶する（ステップＳ３２）。
【００９８】
ここで、仲介ノード位置情報ＩＤは、ＵＰｎＰ非対応ノードｎｎが任意に決めて良く、乱数によりランダムで生成されるようにしてもよいし、上述した共通のハッシュ関数、或いは異なるハッシュ関数で例えば自己の製造番号やＩＰアドレス等をハッシュ化して生成されるようにしてもよい（ただし、上述した共通のハッシュ関数で製造番号やＩＰアドレスをハッシュ化する場合、自己のノードＩＤと一致しないように製造番号やＩＰアドレスの末尾に所定値を付加した後、ハッシュ化する必要がある）。
【００９９】
次いで、当該ＵＰｎＰ非対応ノードｎｎの制御部１１は、参加要求情報送信手段として、上記取得したノード情報におけるＩＰアドレス及びポート番号にしたがって、選択された仲介ノードｎｎ（コンタクトノードでもある）に対して、自己のノードＩＤが付加された（自己のノードＩＤをキーとする）参加要求メッセージを送信し（ステップＳ３３）、当該処理を終了する。なお、参加要求メッセージには、ＵＰｎＰ非対応ノードｎｎで有ることを示す情報、及び仲介ノードｎｎへの仲介申込を示す情報が含まれる。
【０１００】
こうして、例えば、図７（Ａ）に示すように、新規参加ノードであるＵＰｎＰ非対応ノードｎ１６から、コンタクトノードでありかつ仲介ノードであるＵＰｎＰ対応ノードｎ１５に対して参加要求メッセージが送信されることになる。
【０１０１】
当該参加要求メッセージが仲介ノードｎｎにおいて受信されると、図１０（Ｂ）に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがＵＰｎＰ非対応ノードｎｎであり、かつ仲介申込を示す情報を含む場合（その判断は、図８（Ａ）に示すステップＳ９にて行われる）にのみ行われる処理である。
【０１０２】
図１０（Ｂ）に示すステップＳ３４では、仲介ノードｎｎの制御部１１は、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎのノード情報を、自己と対をなすノードのノード情報として登録（記憶）する。
【０１０３】
次いで、当該制御部１１は、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎに対して、自己のＤＨＴのルーティングテーブルが付加された参加応答メッセージを送信する（ステップＳ３５）。これにより、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎにおいては、上記と同様、図９（Ｃ）に示す処理が行われる。
【０１０４】
こうして、例えば、図７（Ａ）に示すように、仲介ノードであるＵＰｎＰ対応ノードｎ１５から、新規参加ノードであるＵＰｎＰ非対応ノードｎ１６に対して参加応答メッセージが送信されることになる。
【０１０５】
次いで、制御部１１は、参加要求メッセージ転送処理（詳細は後述）を行い（ステップＳ３６）、ルーティングテーブル更新処理を行い（ステップＳ３７）、当該処理を終了する。なお、ステップＳ３７に示す処理は、前述の「ＵＰｎＰ対応ノードｎｎのノード情報を優先して登録」する場合は、不要である（当該処理を行っても登録されないからである）。一般には優先した方が好適であるが、システムに参加するノードの総数が少ないときには、優先しないで出来るだけ多数のノード情報をテーブルに記憶した方が良い場合もあるので、その場合は、ステップＳ３７の処理が有効になる。
【０１０６】
ステップＳ３６に示す参加要求メッセージ転送処理により転送された参加要求メッセージが中継ノードｎｎにおいて受信されると、図１０（Ｃ）に示す処理が開始される。なお、当該処理は、参加要求メッセージの送信元のノードがＵＰｎＰ非対応ノードｎｎであり、かつ仲介申込を示す情報（この情報は仲介ノードにおいて削除される）を含まない場合（その判断は、図８（Ａ）に示すステップＳ９にて行われる）にのみ行われる処理である。
【０１０７】
図１０（Ｃ）に示すステップＳ３８では、中継ノードｎｎ（図７（Ａ）の例では、ノードｎ７）の制御部１１は、仲介ノードｎｎ（図７（Ａ）の例では、ノードｎ１５）に対して、自己のＤＨＴのルーティングテーブルが付加された参加応答メッセージを送信する。
【０１０８】
次いで、制御部１１は、参加要求メッセージ転送処理（詳細は後述）を行い（ステップＳ３９）、ステップＳ３９の処理内で参加要求メッセージの転送を行ったか否かを判別し（ステップＳ４０）、転送無しの場合（ステップＳ４０：Ｙ）、つまり、自己が参加要求メッセージの送信元のノード（ノードＩＤ）のルートノード（図７（Ａ）の例では、ノードｎ１）の場合には、仲介ノードｎｎ（図７（Ａ）の例では、ノードｎ１５）に対してルート到達メッセージを送信する（ステップＳ４１）。言い換えると、新規に参加するノードのノードＩＤに一番近いノードＩＤを持つノードまで、参加要求メッセージは転送され、そこに辿り着くと、ルート到達メッセージが新規参加ノードに仲介ノード経由で返信されるのである。
【０１０９】
次いで、制御部１１は、ルーティングテーブル更新処理を行い（ステップＳ４２）、当該処理を終了する。なお、ステップＳ４２の処理は、前述の「ＵＰｎＰ対応ノードｎｎのノード情報を優先して登録」する場合は不要である。一般には優先した方が好適であるが、システムに参加するノードの総数が少ないときには、優先しないで出来るだけ多数のノード情報をテーブルに記憶した方が良い場合もあるので、その場合は、ステップＳ３７の処理が有効になる。
【０１１０】
上記ステップＳ３８で送信された、ＤＨＴのルーティングテーブルが付加された参加応答メッセージが、仲介ノードｎｎにおいて受信されると、図１０（Ｄ）に示す処理が開始される。仲介ノードｎｎは、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎに対して、当該参加応答メッセージを転送し（ステップＳ４３）、当該処理を終了する。これにより、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎにおいては、上記と同様、図９（Ｃ）に示す処理が行われる。
【０１１１】
一方、上記ステップＳ４１で送信されたルート到達メッセージが、仲介ノードｎｎにおいて受信されると、図１０（Ｅ）に示す処理が開始され、仲介ノードｎｎの制御部１１は、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎに対して、当該ルート到達メッセージを転送し（ステップＳ４４）、当該処理を終了する。
【０１１２】
そして、当該送信されたルート到達メッセージが、参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎにおいて受信されると、図１０（Ｆ）に示す処理が開始され、当該ＵＰｎＰ非対応ノードｎｎの制御部１１は、仲介ノード位置情報ＩＤをキーとして、仲介ノード位置情報が付加されたパブリッシュメッセージを、ＤＨＴのルーティングテーブルに登録されたノードｎｎ（仲介ノード位置情報ＩＤと最も近い（例えば、上位桁がより多く一致する）ノードＩＤを有するノードｎｎ）に向けて（直接通信ではなくＤＨＴのメッセージ転送を介して）送信する（ステップＳ４５）。
【０１１３】
次いで、制御部１１は、後述の仲介ノード切り換えタイミングを作り出すために、仲介ノード切り換えタイマ（例えば１０分後にタイマ通知）をセットする（ステップＳ４５５）。
【０１１４】
そして、当該パブリッシュメッセージが、ノードｎｎにおいて受信されると、図１０（Ｇ）に示す処理が開始され、ノードｎｎの制御部１１は、パブリッシュメッセージに付加された仲介ノード位置情報を登録（記憶）し（ステップＳ４６）、ＤＨＴのルーティングテーブルに登録されたノードｎｎに対して転送する（ステップＳ４７）。
【０１１５】
こうして、図７（Ｂ）に示すように、新規参加ノードであるノードｎ１６から送出されたパブリッシュメッセージは、仲介ノード位置情報のルートノードであるノードｎ６に至るまで転送され、当該パブリッシュメッセージが受信されたノードｎｎにおいて仲介ノード位置情報が登録されることになる。
【０１１６】
次に、上記ステップＳ２４、Ｓ３６、Ｓ３９における参加要求メッセージ転送処理においては、ノードｎｎの制御部１１は、受信した参加要求メッセージからノードＩＤ（新規参加ノードのノードＩＤ）を取得し（ステップＳ２４１）、自己が当該新規参加ノード（ノードＩＤ）のルートノードであるか否かを、つまり新規参加ノードのノードＩＤが自己のノードＩＤと最も近い（例えば、上位桁がより多く一致する）か否かを判断する（ステップＳ２４２）。自己が新規参加ノードのルートノードである（新規参加ノードのノードＩＤが自己のノードＩＤと最も近い）場合には（ステップＳ２４２：Ｙ）、図９（Ｂ）、図１０（Ｂ）、又は図１０（Ｃ）に示す処理に戻る。
【０１１７】
一方、自己が新規参加ノードのルートノードでない場合には（ステップＳ２４２：Ｎ）、当該制御部１１は、自己のルーティングテーブルから転送先となるノードｎｎ（新規参加ノードのノードＩＤと最も近い（例えば、上位桁がより多く一致する）ノードｎｎ）のノード情報を取得し（ステップＳ２４３）、当該取得したノード情報に含まれる仲介ノード情報がｎｕｌｌであるか否かを判別する（ステップＳ２４４）。
【０１１８】
仲介ノード情報がｎｕｌｌである場合（つまり、転送先となるノードがＵＰｎＰ対応ノードｎｎである）には（ステップＳ２４４：Ｙ）、当該制御部１１は、参加要求メッセージを、転送先となるノードｎｎに対して転送する（ステップＳ２４５）。
【０１１９】
ここで、当該参加要求メッセージの送信元がＵＰｎＰ対応ノードｎｎである場合、転送される参加要求メッセージには、当該ＵＰｎＰ対応ノードｎｎのノード情報が含まれ、当該参加要求メッセージの送信元がＵＰｎＰ非対応ノードｎｎである場合、転送される参加要求メッセージには、当該ＵＰｎＰ非対応ノードｎｎの仲介ノードｎｎのノード情報が含まれることになる。
【０１２０】
一方、仲介ノード情報がｎｕｌｌでない場合（つまり、転送先となるノードがＵＰｎＰ非対応ノードｎｎである）には（ステップＳ２４４：Ｎ）、直接、参加要求メッセージを転送できないので、上記図５を用いて説明したように、仲介ノードｎｎを介した処理を行うことになる。具体的には、ステップＳ２４６では、制御部１１は、上記転送先となるＵＰｎＰ非対応ノードｎｎの仲介ノードｎｎ宛に、仲介ノード位置情報ＩＤが付加された（当該ＩＤをキーとする）仲介要求メッセージ（自己のノード情報を含む）を送信する。次いで、制御部１１は、自己がＵＰｎＰ非対応ノードであるか否かを判別し（ステップＳ２４７）、自己がＵＰｎＰ非対応ノードである場合には（ステップＳ２４７：Ｙ）、自己に対応するＮＡＴ外側（つまり、ＮＡＴ機能搭載ルータ）のポートを開放するために、転送先となるノードｎｎ宛にダミーパケットを送信し（ステップＳ２４８）、ステップＳ２４９に移行する。一方、自己がＵＰｎＰ非対応ノードでない場合には（ステップＳ２４７：Ｎ）、ステップＳ２４９に移行し、参加要求メッセージを一時保管し、図９（Ｂ）、図１０（Ｂ）、又は図１０（Ｃ）に示す処理に戻る。
【０１２１】
上記ステップＳ２４６で送出された仲介要求メッセージがノードｎｎにおいて受信されると、図１２（Ａ）に示す処理が開始され、ノードｎｎの制御部１１は、自己が参加要求メッセージの送信元であるＵＰｎＰ非対応ノードｎｎの仲介ノードｎｎであるか否かを判別する（ステップＳ５１）。自己が仲介ノードｎｎでない場合には（ステップＳ５１：Ｎ）、制御部１１は、自己が仲介ノード位置情報を保持しているか否かを判別し（ステップＳ５３）し、仲介ノード位置情報を保持していない場合には（ステップＳ５３：Ｎ）、図５に示すように、仲介ノード位置情報ＩＤをキーとしてＤＨＴルーティングにより仲介要求メッセージを中継ノードに対して転送し（ステップＳ５４）、当該処理を終了する。一方、制御部１１は、仲介ノード位置情報を保持している場合には（ステップＳ５３：Ｙ）、当該仲介ノード位置情報に含まれるＩＰアドレス及びポート番号にしたがって、図５に示すように、転送手段として、仲介ノードｎｎに対して仲介要求メッセージを転送し（ステップＳ５５）、当該処理を終了する。
【０１２２】
一方、制御部１１は、自己が仲介ノードｎｎである場合には（ステップＳ５１：Ｙ）、図５に示すように、転送先となるＵＰｎＰ非対応ノードｎｎに対して接続要求メッセージを送信し（ステップＳ５２）、当該処理を終了する。
【０１２３】
これに対して、接続要求メッセージが転送先となるＵＰｎＰ非対応ノードｎｎにおいて受信されると、図１２（Ｂ）に示す処理が開始され、当該ノードｎｎの制御部１１は、図５に示すように、仲介要求メッセージの送信元であるノードｎｎに対して接続応答メッセージを送信し（ステップＳ５６）、当該処理を終了する。
【０１２４】
これに対して、接続応答メッセージが仲介要求メッセージの送信元であるノードｎｎにおいて受信されると、図１２（Ｃ）に示す処理が開始され、当該ノードｎｎの制御部１１は、上記ステップＳ２４９にて一時保管しておいた参加要求メッセージを、転送先となるＵＰｎＰ非対応ノードｎｎに対して送信し（ステップＳ５７）、当該処理を終了する。
【０１２５】
次に、上記ステップＳ２９におけるルーティングテーブル更新処理においては、図１３に示すように、参加要求メッセージの送信元であるノードｎｎ（新規参加ノード）の制御部１１は、自己のルーティングテーブルのｉ番目のセルにノード情報が登録済か否かを判別し（ステップＳ２９１）、登録済でない場合には（ステップＳ２９１：Ｎ）、取得したルーティングテーブルのｉ番目のセルに登録されたノード情報を、自己のルーティングテーブルのｉ番目のセルに登録（自己に対応するエリアのセルである場合には、登録は行わない、また、登録すべきノード情報が取得したルーティングテーブルのセルに記述されていない場合も、登録は行われない）し（ステップＳ２９４）、図９（Ｃ）に示す処理に戻る。
【０１２６】
一方、自己のルーティングテーブルのｉ番目のセルにノード情報が登録済である場合には（ステップＳ２９１：Ｙ）、当該制御部１１は、自己のルーティングテーブルのｉ番目のセルに登録された仲介ノード情報がｎｕｌｌであるか否かを判別し（ステップＳ２９２）、ｎｕｌｌである場合には（ステップＳ２９２：Ｙ）、更新することなく、図９（Ｃ）に示す処理に戻り、ｎｕｌｌでない場合には（ステップＳ２９２：Ｎ）、取得したルーティングテーブルのｉ番目のセルに登録された仲介ノード情報がｎｕｌｌであるか否かを判別する（ステップＳ２９３）。
【０１２７】
そして、当該制御部１１は、取得したルーティングテーブルのｉ番目のセルに登録された仲介ノード情報がｎｕｌｌである場合には（ステップＳ２９３：Ｙ）、自己のルーティングテーブルのｉ番目のセルに登録されているノード情報を、取得したルーティングテーブルのｉ番目のセルに登録されたノード情報に更新登録し（ステップＳ２９４）、一方、ｎｕｌｌでない場合には（ステップＳ２９３：Ｎ）、更新することなく、図９（Ｃ）に示す処理に戻る。
【０１２８】
これにより、上記ステップＳ２５と同様、ルーティングテーブルに登録されるノード情報は、ＵＰｎＰ対応ノードｎｎのノード情報が優先してルーティングテーブルに登録されることになるので、円滑なルーティングテーブルにしていくことが可能となる。当該処理は、図９（Ｃ）に示すステップＳ２８において変数ｉがセル数に達するまで繰り返し行われることになる。なお、変数ｉ＝０番目のセルは、例えば図５に示すエリア１に対応するセルを示し、変数ｉ＝１１番目のセルは、例えば図４に示すエリア１２に対応するセルを示す。つまり、変数ｉが“１”増すに従い、エリア番号も“１”増すことになる。
【０１２９】
（仲介ノードｎｎがオーバーレイネットワーク９から脱退した場合、あるいは仲介ノードを一定時間後に切り換える場合の動作）
次に、図１４及び図１５を参照して、仲介ノードを参加完了後一定時間後に切り換える場合、あるいは、仲介ノードｎｎがオーバーレイネットワーク９から脱退した際の動作について説明する。
【０１３０】
図１４（Ａ）は、ＤＨＴのノードＩＤ空間において、仲介申込メッセージ等の流れの一例を示す図であり、図１４（Ｂ）は、ＤＨＴのノードＩＤ空間において、パブリッシュメッセージの流れの一例を示す図である。
【０１３１】
図１５（Ａ）は、ＵＰｎＰ非対応ノードｎｎが自己と対をなす仲介ノードｎｎの脱退を検出した場合の処理を示すフローチャートであり、図１５（Ｂ）は、ＵＰｎＰ非対応ノードｎｎから送出された仲介申込メッセージを受信した場合における仲介ノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１５（Ｃ）は、仲介ノードｎｎから送出された仲介承諾メッセージを受信した場合におけるＵＰｎＰ非対応ノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１５（Ｄ）は、パブリッシュメッセージを受信したノードｎｎの処理（ステップＳ９におけるメッセージ毎の処理）を示すフローチャートであり、図１５（Ｅ）は、ＵＰｎＰ非対応ノードが参加完了後の一定時間後に自主的に仲介ノードを切り換える場合の処理を示すフローチャートである。
【０１３２】
図１５（Ａ）は、ＵＰｎＰ非対応ノードｎｎの制御部１１が脱退検出手段として、自己と対をなす仲介ノードｎｎ（図１４（Ａ）の例では、仲介ノードｎ１５）の脱退を検出した場合に開始され、当該制御部１１は、アドレス情報取得手段として、新規仲介ノード候補の仲介ノード位置情報を取得（例えば、常時電源がＯＮになっており、かつ、ＵＰｎＰ対応になっている複数のノードのノード情報を製品出荷時に記憶部１２に記憶しておき、その中から例えばランダムに１つ選択したノードを仲介ノードとして選択）する（ステップＳ６１）。
【０１３３】
ここで、ＵＰｎＰ対応になっている複数のノードのうちから、１のノードを仲介ノードとして選択する場合に、例えば、ネットワーク８に対して与える負荷が相対的に小さくなるノード、言い換えれば、新規参加ノードとネットワーク的に近い（例えば、ＨＯＰ数が最も少ない（介在するルータ数が最も少ない））ノードが仲介ノードとして選択される（例えば、パケットを送受信してそのＴＴＬ値で判断）ように構成すれば、ネットワーク８に対して与える通信負荷を低減させることが可能となる（ネットワーク８に対して与える負荷が低減されたオーバーレイネットワーク９を構築することができる）。
【０１３４】
次いで、当該制御部１１は、仲介申込情報送信手段として、取得した仲介ノード位置情報に含まれるＩＰアドレス及びポート番号にしたがって、図１４（Ａ）に示すように、新規仲介ノード候補に対して仲介申込情報としての仲介申込メッセージ（自己のノード情報が含まれる）を送信する（ステップＳ６２）。
【０１３５】
これに対して、仲介申込メッセージが、新規仲介ノード候補において受信されると、図１５（Ｂ）に示す処理が開始され、当該ノードｎｎの制御部１１は、仲介申込メッセージの送信元であるＵＰｎＰ非対応ノードｎｎのノード情報を登録し（ステップＳ６３）、図１４（Ａ）に示すように、当該仲介申込メッセージの送信元であるＵＰｎＰ非対応ノードｎｎに対して仲介承諾メッセージを送信し（ステップＳ６４）、当該処理を終了する。これにより、ＵＰｎＰ非対応ノードｎｎは、自己と対をなすＵＰｎＰ対応ノードｎｎがオーバーレイネットワーク９から脱退したとしても、新たに自己と対をなすＵＰｎＰ対応ノードｎｎに効率よく接続することができる。
【０１３６】
これに対して、仲介承諾メッセージが、仲介申込メッセージの送信元であるＵＰｎＰ非対応ノードｎｎにおいて受信されると、図１５（Ｃ）に示す処理が開始され、ＵＰｎＰ非対応ノードｎｎの制御部１１は、仲介ノード位置情報を更新登録し（ステップＳ６５）、仲介ノード位置情報ＩＤをキーとして、当該更新された仲介ノード位置情報が付加されたパブリッシュメッセージを、図１４（Ｂ）に示すように、ＤＨＴのルーティングテーブルに登録されたノードｎｎに対して送信する（ステップＳ６６）。
【０１３７】
そして、当該パブリッシュメッセージが、ノードｎｎにおいて受信されると、図１５（Ｄ）に示す処理が開始され、ノードｎｎの制御部１１は、パブリッシュメッセージに付加された仲介ノード位置情報を登録し（ステップＳ６７）、図１４（Ｂ）に示すように、ＤＨＴのルーティングテーブルに登録されたノードｎｎに対して転送する（ステップＳ６８）。
【０１３８】
一方、図１５（Ｅ）は、上記ステップＳ４５５で仕掛けた（セットした）仲介ノード切り換えタイマが起動（カウントアップ）した場合に開始され、当該制御部１１は、アドレス情報取得手段として、新規仲介ノード候補の仲介ノード位置情報を取得（自己のルーティングテーブル中から、ＵＰｎＰ対応ノード（仲介ノード情報がｎｕｌｌであるノード）の情報を集め、その中から例えばランダムに１つ選択したノードを仲介ノードとして選択）する（ステップＳ７１）。次いで、当該制御部１１は、現在の仲介ノードに対して、仲介ノードの解除要求を示す仲介依頼解除メッセージを送信する（ステップＳ７２）。ルーティングテーブルは、他のノードからのメッセージを中継するうちに時間と共にＵＰｎＰ対応ノードの情報も蓄積されているので、タイマが起動してから十分な時間が経過していれば、ＵＰｎＰ対応ノードがテーブルに登録されている確率は高い。もし、ＵＰｎＰ対応ノードがルーティングテーブル中に見つからなかった場合は、再度タイマをセットさせる。
【０１３９】
次いで、当該制御部１１は、上記ステップＳ６２と同様、上記取得した仲介ノード位置情報に含まれるＩＰアドレス及びポート番号にしたがって、新規仲介ノード候補に対して仲介申込情報としての仲介申込メッセージを送信する（ステップＳ７３）。なお、ステップＳ７３で送信された仲介申込メッセージは、上記と同様、他のノードｎｎにおいて受信され、図１５（Ｂ）の処理が行われることになる。
【０１４０】
コンタクトノード（＝仲介ノード）の選び方で、「常時電源がＯＮになっており、かつ、ＵＰｎＰ対応になっている複数のノードのノード情報を製品出荷時に記憶部１２に記憶しておき、その中から例えばランダムに１つ選択する」とした場合、そのままでは、製品出荷時に知っていたノードばかりが仲介ノードになってしまい、そのノードにアクセス集中が起きてしまう。そこで、このように、仲介ノードを参加後一定時間で切り換えることにより、システム内のＵＰｎＰノード全体で、負荷を分散することができる。
【０１４１】
以上説明したように、上記実施形態によれば、オーバーレイネットワーク９に参加しているＵＰｎＰ対応ノードｎｎとこれに接続されたＵＰｎＰ非対応ノードｎｎとの対を複数有し、各ノードｎｎは、自己と対をなすノードｎｎ以外の他のＵＰｎＰ非対応ノードｎｎに接続する場合には、当該他のＵＰｎＰ非対応ノードｎｎと対をなす他のＵＰｎＰ対応ノードｎｎを仲介して当該他のＵＰｎＰ非対応ノードｎｎに接続するように構成したので、仲介サーバのような特定の装置へのアクセス集中を回避することができ、ＵＰｎＰ非対応ノードｎｎが多くあっても、より安定したオーバーレイネットワーク９を構築することができる。
【０１４２】
なお、上記実施形態において、オーバーレイネットワーク９に参加しているＵＰｎＰ非対応ノードｎｎの数がＵＰｎＰ対応ノードｎｎの数より多くなってくると、仲介ノードｎｎを介することが過多になり望ましくない。これを回避するため、ＵＰｎＰ非対応ノードｎｎは、ＵＰｎＰ対応ノードｎｎである仲介ノードｎｎと、専用の仲介サーバとの双方に対して、ＵＤＰ Ｈｏｌｅを維持（つまり、ハイブリット化）するように構成し、当該ＵＰｎＰ非対応ノードｎｎと通信を行いたいノードｎｎは、仲介要求メッセージを、ＤＨＴルーティングによって、ＵＰｎＰ非対応ノードｎｎと対をなす仲介ノードｎｎのノードＩＤのルートノードまで転送させ、当該ルートノードからの返答を一定時間待機し、返答が得られなかった場合に、ＵＰｎＰ非対応ノードｎｎと対をなす専用の仲介サーバに対して仲介要求メッセージを送信するように構成してもよい。なお、当該ＵＰｎＰ非対応ノードｎｎと通信を行いたいノードｎｎは、自己のＤＨＴのルーティングテーブルに登録されているノードｎｎのうちＵＰｎＰ非対応ノードｎｎが占める割合が閾値を越える場合には、仲介ノードｎｎに仲介要求メッセージを送らずに、いきなり専用の仲介サーバに対して仲介要求メッセージを送信するように構成してもよい。
【０１４３】
また、上記実施形態においては、ＤＨＴのルーティングテーブルに登録されたノード情報に含まれる仲介ノード情報には、仲介ノード位置情報ＩＤが含まれるように構成したがこれに限定されるものではなく、仲介ノード情報には、仲介ノード位置情報ＩＤの代わりに、仲介ノードｎｎのＩＰアドレス及びポート番号を含めるように構成してもよい。この構成によれば、図５に示したように、ノードｎ１からノードｎ６まで仲介要求メッセージを転送させることなく、ノードｎ１から直接、仲介要求メッセージを仲介ノードｎ７に送信することができるので、メッセージ送信手順を簡素化し、ネットワーク８に対して与える通信負荷を低減することができる。ただし、この場合、仲介ノードｎｎが変わったとき、そのＩＰアドレス及びポート番号をオーバーレイネットワーク９に参加しているノードｎｎに伝えるのに時間がかかり効率的ではない。この点では、仲介ノード情報に、仲介ノード位置情報ＩＤを含ませた方が、ＤＨＴルーティングによって仲介ノードｎｎを発見できるので効率的である。
【０１４４】
また、上記実施形態においては、ＤＨＴを利用したアルゴリズムによって構築されたオーバーレイネットワーク９を前提として説明したが、本発明はこれに限定されるものではない。
【図面の簡単な説明】
【０１４５】
【図１】本実施形態に係るコンテンツ配信システムにおける各ノード装置の接続態様の一例を示す図である。
【図２】ＤＨＴのノードＩＤ空間において、ノードｎ４から送出されたクエリがコンテンツルートノードまで転送される様子の一例を示す図である。
【図３】ＤＨＴのノードＩＤ空間において、ＵＰｎＰ対応ノードｎｎとＵＰｎＰ非対応ノードｎｎとの対の一例を表す概念図である。
【図４】ノードｎ１が保持するＤＨＴのルーティングテーブルの一例を示す図である。
【図５】ＤＨＴのノードＩＤ空間において、ＵＰｎＰ対応ノードｎ１がＵＰｎＰ非対応ノードｎ１０に接続し、通信を開始するまでの流れの一例を示す図である。
【図６】ノードｎｎの概要構成例を示す図である。
【図７】（Ａ）は、ＤＨＴのノードＩＤ空間において、参加要求メッセージ等の流れの一例を示す図であり、（Ｂ）は、ＤＨＴのノードＩＤ空間において、パブリッシュメッセージの流れの一例を示す図である。
【図８】（Ａ）は、ノードｎｎのメインルーチンを示すフローチャートであり、（Ｂ）は、（Ａ）に示すステップＳ４にて設定されたＵＤＰ Ｈｏｌｅ維持イベントタイマが起動したときの処理を示すフローチャートである。
【図９】（Ａ）は、図８（Ａ）に示すステップＳ２におけるＵＰｎＰ対応ノードｎｎの参加要求処理の詳細を示すフローチャートであり、（Ｂ）は、ＵＰｎＰ対応ノードｎｎから送出された（又は送出され、転送された）参加要求メッセージを受信した場合におけるノードｎｎの処理を示すフローチャートであり、（Ｃ）は、参加応答メッセージを受信した場合におけるノードｎｎの処理を示すフローチャートである。
【図１０】（Ａ）は、図８（Ａ）に示すステップＳ３におけるＵＰｎＰ非対応ノードｎｎの参加要求処理の詳細を示すフローチャートであり、（Ｂ）は、ＵＰｎＰ非対応ノードｎｎから送出された参加要求メッセージを受信した場合における仲介ノードｎｎの処理を示すフローチャートであり、（Ｃ）は、ＵＰｎＰ非対応ノードｎｎから送出された（又は送出され、転送された）参加要求メッセージを受信した場合におけるノードｎｎ（仲介ノードｎｎを除く）の処理を示すフローチャートであり、（Ｄ）は、参加応答メッセージを受信した仲介ノードｎｎの処理を示すフローチャートであり、（Ｅ）は、ルート到達メッセージを受信した仲介ノードｎｎの処理を示すフローチャートであり、（Ｆ）は、ルート到達メッセージを受信したＵＰｎＰ非対応ノードｎｎの処理を示すフローチャートであり、（Ｆ）は、パブリッシュメッセージを受信したノードｎｎの処理を示すフローチャートである。
【図１１】図９（Ｂ）に示すステップＳ２４、図１０（Ｂ）に示すステップＳ３６、及び図１０（Ｃ）に示すステップＳ３９におけるノードｎｎの参加要求メッセージ転送処理の詳細を示すフローチャートである。
【図１２】（Ａ）は、仲介要求メッセージを受信したノードｎｎの処理を示すフローチャートであり、（Ｂ）は、接続要求メッセージを受信したノードｎｎの処理を示すフローチャートであり、（Ｃ）は、接続応答メッセージを受信したノードｎｎの処理を示すフローチャートである。
【図１３】図９（Ｃ）に示すステップＳ２９におけるノードｎｎのルーティングテーブル更新処理の詳細を示すフローチャートである。
【図１４】（Ａ）は、ＤＨＴのノードＩＤ空間において、仲介申込メッセージ等の流れの一例を示す図であり、（Ｂ）は、ＤＨＴのノードＩＤ空間において、パブリッシュメッセージの流れの一例を示す図である。
【図１５】（Ａ）は、ＵＰｎＰ非対応ノードｎｎが自己と対をなす仲介ノードｎｎの脱退を検出した場合の処理を示すフローチャートであり、（Ｂ）は、ＵＰｎＰ非対応ノードｎｎから送出された仲介申込メッセージを受信した場合における仲介ノードｎｎの処理を示すフローチャートであり、（Ｃ）は、仲介ノードｎｎから送出された仲介承諾メッセージを受信した場合におけるＵＰｎＰ非対応ノードｎｎの処理を示すフローチャートであり、（Ｄ）は、パブリッシュメッセージを受信したノードｎｎの処理を示すフローチャートであり、（Ｅ）は、ＵＰｎＰ非対応ノードが参加完了後の一定時間後に自主的に仲介ノードを切り換える場合の処理を示すフローチャートである。
【符号の説明】
【０１４６】
ｎｎ  ノード装置
８  ネットワーク
９  オーバーレイネットワーク
１１  制御部
１２  記憶部
１３  バッファメモリ
１４  デコーダ部
１５  映像処理部
１６  表示部
１７  音声処理部
１８  スピーカ
２０  通信部
２１  入力部
２２  バス
Ｓ  コンテンツ配信システム
【図１】
0004548271.tif 000002
【図２】
0004548271.tif 000003
【図３】
0004548271.tif 000004
【図４】
0004548271.tif 000005
【図５】
0004548271.tif 000006
【図６】
0004548271.tif 000007
【図７】
0004548271.tif 000008
【図８】
0004548271.tif 000009
【図９】
0004548271.tif 000010
【図１０】
0004548271.tif 000011
【図１１】
0004548271.tif 000012
【図１２】
0004548271.tif 000013
【図１３】
0004548271.tif 000014
【図１４】
0004548271.tif 000015
【図１５】
0004548271.tif 000016