(57)【要約】【課題】  あるノードに冗長に情報を持たせることなく、Ｐ２Ｐネットワークに参加している任意のノードが離脱した時に当該Ｐ２Ｐネットワークを修復できる通信システムを提供する。【解決手段】  Ｐ２Ｐ型リングネットワークをコンテンツオリエンテッドな構成にし、リングネットワークにはコンテンツノードが参加することによって、各ノードにコンテンツの場所情報を登録する必要をなくし、さらにあるノードが離脱しコンテンツノードがリングネットワークから離脱した場合に、離脱したコンテンツノードの下流側のコンテンツノードが離脱したコンテンツノードの上流側コンテンツノードを検索し、両者を結びつけリングネットワークを修復する。【選択図】図３
2008276551.tif 000002
【特許請求の範囲】
【請求項１】
１又は複数のコンテンツを保持するノード上の当該コンテンツに対して一意の識別情報を付与し、前記コンテンツをコンテンツノードとする、コンテンツオリエンテッドなＰ２Ｐ型のネットワークリングを構成することを特徴とする通信システム。
【請求項２】
隣接する前記コンテンツノードが前記ネットワークリングから離脱したことを検出した前記コンテンツノードは、
離脱した前記コンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索し、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復することを特徴とする請求項１に記載の通信システム。
【請求項３】
隣接して連続して位置する複数の前記コンテンツノードが前記ネットワークリングから離脱した場合、
隣接の前記コンテンツノードが前記ネットワークリングから離脱したことを検出した前記コンテンツノードは、
離脱した前記隣の連続する複数のコンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索し、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復することを特徴とする請求項１又は請求項２に記載の通信システム。
【請求項４】
前記ノードは、
前記ネットワークによって接続された他の前記ノード又は前記コンテンツノードと情報を送受信する送受信手段と、
１又は複数のコンテンツを保持するコンテンツデータベースと、
前記コンテンツデータベース内のコンテンツ毎に前記コンテンツノード生成し、当該コンテンツを担当するコンテンツノード機能を提供するコンテンツノード機能提供手段と、
前記一意の識別情報に基づいて、前記コンテンツノードの検索を要求するコンテンツ検索リクエストを前記コンテンツノード機能提供手段に対して送信するコンテンツノード検索手段とを有することを特徴とする請求項１から請求項３のいずれか１項に記載の通信システム。
【請求項５】
前記ノードは、
前記一意の識別情報と、当該一意の識別情報を付与されたコンテンツを保持する前記ノードのＩＰアドレスと対応付けて記憶するフィンガーテーブルを有し、
前記コンテンツノード検索手段は、
前記フィンガーテーブルの前記一意の識別情報及び前記ＩＰアドレスに基づいて前記コンテンツ検索リクエストを生成することを特徴とする請求項４に記載の通信システム。
【請求項６】
前記ノードは、
自ノード内に複数の前記フィンガーテーブルが存在する場合、各前記フィンガーテーブルを関連付けて保存することを特徴とする請求項４又は請求項５に記載の通信システム。
【請求項７】
前記コンテンツノードは、
他の前記コンテンツノードとの間で前記フィンガーテーブルの情報をやり取りし、前記フィンガーテーブルを更新することを特徴とする請求項５又は請求項６に記載の通信システム。
【請求項８】
前記コンテンツデータベースからコンテンツが削除されると、削除された前記コンテンツを担当する前記コンテンツノード機能提供手段を削除する手段を有することを特徴とする請求項５又は請求項６に記載の通信システム。
【請求項９】
前記コンテンツノード機能提供手段は、
生成された前記コンテンツノードを前記ネットワーク上に参加させるためのＤＨＴ参加メッセージを生成し、
前記送受信手段は、
前記ＤＨＴ参加メッセージ、前記コンテンツ検索メッセージ及びキープアライブメッセージを、当該メッセージで示された送信先に対して送信することを特徴とする請求項４から請求項８のいずれか１項に記載の通信システム。
【請求項１０】
前記送受信手段は、
他の前記ノード又は他の前記コンテンツノードからの前記ＤＨＴ参加メッセージ、コンテンツ検索メッセージもしくはキープアライブメッセージを、当該メッセージで示された他の前記コンテンツノードに対して送信することを特徴とする請求項９に記載の通信システム。
【請求項１１】
前記コンテンツノード機能提供手段は、
前記コンテンツデータベースに登録されているコンテンツ１つに対し１つ生成され、
担当するコンテンツのコンテンツノードを前記ネットワークリング上に登録する機能を提供するＤＨＴ参加機能提供手段と、
所定のアルゴリズムに従って決めた前記ＤＨＴ参加メッセージ、前記コンテンツ検索メッセージ及びキープアライブメッセージの送信先を、前記コンテンツ検索メッセージに記載して発信するＤＨＴ検索手段と、
他の前記コンテンツノードとキープアライブメッセージを送受信し合い、前記ネットワークリングを維持する機能を持つＤＨＴ管理手段とを有することを特徴とする請求項９又は請求項１０に記載の通信システム。
【請求項１２】
前記コンテンツノード機能提供手段は、
他のコンテンツノードからＤＨＴ参加メッセージを受信した場合に、前記ＤＨＴ参加機能提供手段を機能させ、
前記コンテンツノード検索手段から前記コンテンツ検索リクエストを受信した場合、及び、他のコンテンツノードから前記コンテンツ検索メッセージを受信した場合に、前記ＤＨＴ検索手段を機能させることを特徴とする請求項１１に記載の通信システム。
【請求項１３】
前記ＤＨＴ参加機能提供手段は、
他の前記コンテンツノードに対し、前記ＤＨＴ参加メッセージを送信することによって、担当するコンテンツの前記コンテンツノードを前記ネットワークリング上に登録する機能を有することを特徴とする請求項１１又は請求項１２に記載の通信システム。
【請求項１４】
前記ＤＨＴ検索手段は、
前記コンテンツノード検索手段からのコンテンツノード検索リクエストを受信すると、自コンテンツノードに関する前記フィンガーテーブル以外の同じノード内に存在する他の前記コンテンツノードに関するフィンガーテーブルも参照した上で、前記コンテンツ検索メッセージに記載する前記メッセージの送信先を所定のアルゴリズムに従って決めることを特徴とする請求項１１から請求項１３のいずれか１項に記載の通信システム。
【請求項１５】
前記ＤＨＴ検索手段は、
他の前記コンテンツノードからの前記コンテンツ検索メッセージを受信すると、自コンテンツノードに関する前記フィンガーテーブル以外の同じノード内に存在する他のコンテンツノードに関するフィンガーテーブルも参照した上で、前記コンテンツ検索メッセージに記載する前記メッセージの送信先を所定のアルゴリズムに従って決めることを特徴とする請求項１１から請求項１４のいずれか１項に記載の通信システム。
【請求項１６】
ＤＨＴ管理手段は、
他の前記コンテンツノードと、互いに自コンテンツノードに関する前記フィンガーテーブルの情報を含むキープアライブメッセージを送受信しあい、フィンガーテーブルの情報を更新し、前記リングを維持することを特徴とする請求項１１から請求項１５のいずれか１項に記載の通信システム。
【請求項１７】
ＤＨＴ管理手段は、
前記キープアライブメッセージの送受信を定期的に実施し、前記キープアライブメッセージを送信後、一定時間返信がなく、キープアライブメッセージを再送しても返信がない場合、
そのコンテンツノードは前記ネットワークリングを離脱したと判断することによって、他の前記コンテンツノードの離脱を検出することを特徴とする請求項１６に記載の通信システム。
【請求項１８】
ＤＨＴ管理手段は、
ある前記コンテンツノードが離脱したことを検出した場合であって、かつ離脱した前記コンテンツノードが自コンテンツノードから見て下流であった場合、
離脱した前記コンテンツノードから見てさらに下流のノードから送信された、離脱した前記コンテンツノードを検索するネットワークリング修復オプションのついたコンテンツ検索メッセージを一定時間待つことを特徴とする請求項１７に記載の通信システム。
【請求項１９】
ＤＨＴ管理手段は、
ある前記コンテンツノードが離脱したことを検出した場合、かつ離脱した前記コンテンツノードが自コンテンツノードから見て上流であった場合、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージをＤＨＴ検索手段を用いて送信することで、離脱した前記コンテンツノードから見てさらに上流に存在する前記コンテンツノードと通信し前記ネットワークリングを修復することを特徴とする請求項１７又は請求項１８に記載の通信システム。
【請求項２０】
ＤＨＴ管理手段は、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションのついたコンテンツ検索メッセージを待っている場合、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションのついたコンテンツ検索メッセージを送信してきた前記コンテンツノードとキープアライブメッセージを送受信しあうことで前記ネットワークリングの修復を完了することを特徴とする請求項１８に記載の通信システム。
【請求項２１】
ＤＨＴ管理手段は、
離脱した前記コンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを待ち、離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージが一定時間経過後も届かない場合、
前記フィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記識別情報よりも大きくかつ、最も近い前記識別情報を持つ前記コンテンツノードから順に接続を試み、
接続が成功した場合は当該コンテンツノードと前記ネットワークリングを修復し、接続できなかった場合は再度前記フィンガーテーブルデータベースを参照し、接続可能な前記コンテンツノードが見つかるまで上記動作を繰り返すことを特徴とする請求項１８に記載の通信システム。
【請求項２２】
ＤＨＴ管理手段は、
離脱した前記コンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待つ場合において、一定時間経過する間に複数の離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを受信した場合、
通常の前記コンテンツ検索メッセージと同様に前記フィンガーテーブルデータベースを参照し前記コンテンツ検索メッセージの効率のよい送信先があるときは、そのコンテンツノードに対して前記コンテンツ検索メッセージを送信することを特徴とする請求項１８に記載の通信システム。
【請求項２３】
ＤＨＴ管理手段は、
前記フィンガーテーブルデータベースを参照し、ネットワークリング修復オプションの付いた複数のコンテンツ検索メッセージについて自コンテンツノードが最適な受信者であった場合、
前記コンテンツ検索メッセージの送信元の前記コンテンツノードに付与された前記識別情報の値を比較し、自コンテンツノードの前記識別情報よりも大きくかつ、最も近い前記識別情報を持つ前記コンテンツノードから順に接続を試みることを特徴とする請求項２２に記載の通信システム。
【請求項２４】
ＤＨＴ管理手段は、
受信した複数のコンテンツ検索メッセージのうち、前記コンテンツ検索メッセージの送信元の前記コンテンツノードに付与された前記識別情報が、自コンテンツノードの前記識別情報よりも大きくかつ最も近い前記識別情報で無い場合、当該コンテンツ検索メッセージについては全て破棄することを特徴とする請求項２２に記載の通信システム。
【請求項２５】
ＤＨＴ管理手段は、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを送信後、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを待っていた前記コンテンツノードからのキープアライブメッセージを待つことを特徴とする請求項１９又は請求項２２に記載の通信システム。
【請求項２６】
ＤＨＴ管理手段は、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを送信後、
一定時間経過後もキープアライブメッセージを受信しない場合は、
離脱した前記コンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージの再送を実施することを特徴とする請求項２３から請求項２５のいずれか１項に記載の通信システム。
【請求項２７】
ＤＨＴ管理手段は、
再送を含む全ての前記コンテンツ検索メッセージに対してもキープアライブメッセージを受信しない場合、
前記フィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記識別情報よりも小さくかつ、最も近い前記識別情報を持つ前記コンテンツノードから順に接続を試み、
接続が成功した場合は当該コンテンツノードと前記ネットワークリングを修復し、接続できなかった場合は再度前記フィンガーテーブルデータベースを参照し、接続可能な前記コンテンツノードが見つかるまで上記動作を繰り返すことを特徴とする請求項２６に記載の通信システム。
【請求項２８】
前記Ｐ２Ｐ型のネットワークリングはコードリングの構成を有することを特徴とする請求項１から請求項２７のいずれか１項に記載の通信システム。
【請求項２９】
Ｐ２Ｐ型のネットワークリングの通信システムにおける通信方法であって、
１又は複数のコンテンツを保持するノード上の当該コンテンツに対して一意の識別情報を付与し、前記コンテンツをコンテンツノードとして、前記ネットワークリングにコンテンツオリエンテッドに参加させるステップと、
隣接する前記コンテンツノードが前記ネットワークリングから離脱したことを検出した前記コンテンツノードにおいて、
離脱した前記コンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索するステップと、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復するステップを有することを特徴とする通信方法。
【請求項３０】
隣接して連続して位置する複数の前記コンテンツノードが前記ネットワークリングから離脱した場合、
隣接の前記コンテンツノードが前記ネットワークリングから離脱したことを検出した前記コンテンツノードにおいて、
離脱した前記隣の連続する複数のコンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索するステップと、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復するステップを有することを特徴とする請求項２９に記載の通信方法。
【請求項３１】
他のコンテンツノードと、キープアライブメッセージの送受信を定期的に実施し、キープアライブメッセージを送信後、一定時間返信がなく、キープアライブメッセージを再送しても返信がない場合に、当該他のコンテンツノードが前記ネットワークリングを離脱したと検出するステップと、
自コンテンツノードを基準にして、離脱した前記他のコンテンツノードの前記ネットワークリング上での方向を確認するステップと、
離脱した前記他のコンテンツノードの方向が自コンテンツノードを基準にして下流の場合、
離脱した前記他のコンテンツノードからさらに下流のノードからの離脱した前記他のコンテンツノードを検索するネットワークリング修復オプションのついたコンテンツ検索メッセージの受信を待機する待機ステップと、
受信しなかった場合に、前記一意の識別情報と、当該一意の識別情報を付与されたコンテンツを保持する前記ノードのＩＰアドレスとを対応付けて記憶するフィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記一意の識別情報よりも大きくかつ、当該一意の識別情報に最も近い前記一意の識別情報を持つ他の前記コンテンツノードから順に接続を試みるステップと、
受信した場合に、前記フィンガーテーブルデータベースを参照し、前記コンテンツ検索メッセージの効率のよい送信先があるか否かを確認するステップと、
確認した前記効率のよい送信先のコンテンツノードに対し、キープアライブメッセージを送信するステップとを有することを特徴とする請求項２９又は請求項３０に記載の通信方法。
【請求項３２】
前記待機ステップにおいて、前記コンテンツ検索メッセージの受信を所定の時間待機することを特徴とする請求項３１に記載の通信方法。
【請求項３３】
他のコンテンツノードと、キープアライブメッセージの送受信を定期的に実施し、キープアライブメッセージを送信後、一定時間返信がなく、キープアライブメッセージを再送しても返信がない場合に、当該他のコンテンツノードが前記ネットワークリングを離脱したと検出するステップと、
自コンテンツノードを基準にして、離脱した前記他のコンテンツノードの前記ネットワークリング上での方向を確認するステップと、
離脱した前記他のコンテンツノードの方向が自コンテンツノードを基準にして上流の場合、
離脱した前記他のコンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを送信するステップと、
キープアライブメッセージを受信したか否かを確認する受信確認ステップと、
キープアライブメッセージを受信した場合に、キープアライブメッセージを返信するステップとを有することを特徴とする請求項２９から請求項３２のいずれか１項に記載の通信方法。
【請求項３４】
キープアライブメッセージを受信しなかった場合に、前記一意の識別情報と、当該一意の識別情報を付与されたコンテンツを保持する前記ノードのＩＰアドレスとを対応付けて記憶するフィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記一意の識別情報よりも小さくかつ、当該一意の識別情報に最も近い前記一意の識別情報を持つ他の前記コンテンツノードから順に接続を試みるステップを有することを特徴とする請求項３３に記載の通信方法。
【請求項３５】
前記受信確認ステップにおいて、キープアライブメッセージの受信を所定の時間待機することを特徴とする請求項３３又は請求項３４に記載の通信方法。
【請求項３６】
Ｐ２Ｐ型のネットワークリングを構成するノード上で実行される通信プログラムであって、
前記ノードに
１又は複数のコンテンツを保持するノード上の当該コンテンツに対して一意の識別情報を付与し、前記コンテンツをコンテンツノードとして、前記ネットワークリングにコンテンツオリエンテッドに参加させる機能を実現させ、
隣接する前記コンテンツノードが前記ネットワークリングから離脱したことを検出した当該ノード上の前記コンテンツノードに、
離脱した前記コンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索する機能と、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復する機能とを実現させることを特徴とする通信プログラム。
【請求項３７】
隣接して連続して位置する複数の前記コンテンツノードが前記ネットワークリングから離脱した場合、
隣接の前記コンテンツノードが前記ネットワークリングから離脱したことを検出した当該ノード上の前記コンテンツノードに、
離脱した前記隣の連続する複数のコンテンツノードのさらに隣に位置する前記ネットワークリングをコンテンツオリエンテッドに構成する他のコンテンツノードを検索する機能と、
検索した当該コンテンツノードとの間で通信接続を実行することにより前記ネットワークリングを修復する機能とを実現させることを特徴とする請求項３６に記載の通信プログラム。
【請求項３８】
前記ノード上の前記コンテンツノードに、
他のコンテンツノードと、キープアライブメッセージの送受信を定期的に実施し、キープアライブメッセージを送信後、一定時間返信がなく、キープアライブメッセージを再送しても返信がない場合に、当該他のコンテンツノードが前記ネットワークリングを離脱したと検出する機能と、
自コンテンツノードを基準にして、離脱した前記他のコンテンツノードの前記ネットワークリング上での方向を確認する機能と、
離脱した前記他のコンテンツノードの方向が自コンテンツノードを基準にして下流の場合、
離脱した前記他のコンテンツノードからさらに下流のノードからの離脱した前記他のコンテンツノードを検索するネットワークリング修復オプションのついたコンテンツ検索メッセージの受信を所定の時間待機する待機機能と、
所定の時間内に受信しなかった場合に、前記一意の識別情報と、当該一意の識別情報を付与されたコンテンツを保持する前記ノードのＩＰアドレスとを対応付けて記憶するフィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記一意の識別情報よりも大きくかつ、当該一意の識別情報に最も近い前記一意の識別情報を持つ他の前記コンテンツノードから順に接続を試みる機能と、
所定の時間内に受信した場合に、前記フィンガーテーブルデータベースを参照し、前記コンテンツ検索メッセージの効率のよい送信先があるか否かを確認する機能と、
確認した前記効率のよい送信先のコンテンツノードに対し、キープアライブメッセージを送信する機能とを実現させることを特徴とする請求項３６又は請求項３７に記載の通信プログラム。
【請求項３９】
前記ノード上の前記コンテンツノードに、
他のコンテンツノードと、キープアライブメッセージの送受信を定期的に実施し、キープアライブメッセージを送信後、一定時間返信がなく、キープアライブメッセージを再送しても返信がない場合に、当該他のコンテンツノードが前記ネットワークリングを離脱したと検出する機能と、
自コンテンツノードを基準にして、離脱した前記他のコンテンツノードの前記ネットワークリング上での方向を確認する機能と、
離脱した前記他のコンテンツノードの方向が自コンテンツノードを基準にして上流の場合、
離脱した前記他のコンテンツノードを検索するネットワークリング修復オプションを付けたコンテンツ検索メッセージを送信する機能と、
キープアライブメッセージを所定の時間内に受信したか否かを確認する受信確認機能と、
所定の時間内にキープアライブメッセージを受信した場合に、キープアライブメッセージを返信する機能とを実現させることを特徴とする請求項３６から請求項３８のいずれか１項に記載の通信プログラム。
【請求項４０】
前記ノード上の前記コンテンツノードに、
所定の時間内にキープアライブメッセージを受信しなかった場合に、前記一意の識別情報と、当該一意の識別情報を付与されたコンテンツを保持する前記ノードのＩＰアドレスとを対応付けて記憶するフィンガーテーブルデータベースを参照し、自コンテンツノードに付与された前記一意の識別情報よりも小さくかつ、当該一意の識別情報に最も近い前記一意の識別情報を持つ他の前記コンテンツノードから順に接続を試みる機能を実現させることを特徴とする請求項３９に記載の通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信システム、通信方法、及びプログラムに関し、特にＩＰネットワーク上において、サーバを介さず端末同士が直接通信する通信システム、通信方法及びプログラムに関する。
【背景技術】
【０００２】
近年、Ｐ２Ｐ（Ｐｅｅｒ  ｔｏ  Ｐｅｅｒ）技術を用いたファイル共有ネットワークにより、テキストだけでなく画像や音声、映像といった様々なコンテンツがユーザ間で直接やりとりされるようになってきた。
【０００３】
Ｐ２Ｐ技術の例としてコード（Ｃｈｏｒｄ）がある。コード（Ｃｈｏｒｄ）は分散ハッシュテーブルを用いるＰ２Ｐ技術の一つで、参加するノードはハッシュ関数を用いて生成されたＩＤ（ｉｄｅｎｔｉｆｉｅｒ）を付与され、そのＩＤの順にオーバーレイネットワーク上でリング状に接続する。コンテンツも同様にハッシュ関数によりＩＤを付与され、コンテンツＩＤとコンテンツ場所情報の組み合わせデータがＩＤに従いネットワークに参加するノードに保存される。ノードがあるコンテンツを検索する場合、分散ハッシュテーブルを用いて検索メッセージをノード間でルーティングし、所望のコンテンツの場所情報を持つノードを検索する。ノードは定期的に近隣のノードと存在を確認しあうことでコード（Ｃｈｏｒｄ）リングを維持する。
【０００４】
電話で通話を行う場合のように端末同士を繋げる目的の場合にもコード（Ｃｈｏｒｄ）を利用できる。例えばＰ２Ｐ−ＳＩＰ（Ｓｅｓｓｉｏｎ  Ｉｎｉｔｉａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）ではＳＩＰ−ＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）をコンテンツとしてＳＩＰ−ＵＲＩをハッシュ関数に適用した結果をコンテンツＩＤとしてＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスと共にコード（Ｃｈｏｒｄ）リングに登録しておき、通信する場合はＳＩＰ−ＵＲＩをキーにＩＰアドレスをコード（Ｃｈｏｒｄ）リング上で検索する。
【０００５】
コード（Ｃｈｏｒｄ）に限らず一般のＰ２Ｐネットワークでは参加するノードは任意のタイミングでＰ２Ｐネットワークを離脱することができる。コード（Ｃｈｏｒｄ）の場合、あるノードが離脱してしまうとコンテンツＩＤとＩＰアドレス情報が消滅してしまうため、その情報をバックアップする必要がある。
【０００６】
例えばバックアップを、リングを伝い上流・下流それぞれ数ノードに対し情報のコピーを渡しておく、といった方法がある。
【０００７】
あるいは特許文献１（特開２００４−７２６０３号公報）のように、ノードそれぞれにバックアップのノードを設定し、そのノードにデータのコピーを渡しておく、といった方法もある。
【０００８】
このようにコンテンツＩＤとコンテンツ場所情報の組み合わせデータを残しておくことで、ノードの離脱が発生してもコード（Ｃｈｏｒｄ）リングを正常に動作させることができる。
【特許文献１】特開２００４−７２６０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従来の問題は、ノードが離脱した場合でも正常に動作するために他のノードに自ノードの持つ情報をバックアップしなければならない、ということである。
【００１０】
その理由は、Ｐ２Ｐネットワークでは任意のタイミングでノードの離脱が許されるためである。そのためにはあるノードは他のノードに離脱する前に自ノードの持つ情報をコピーしておかなければならない。また、あるノードとバックアップのノード両方が同時にＰ２Ｐネットワークから離脱する可能性があるため、そのような状況を避けるためにはバックアップのノードを増やさなければならず、結果として１つのノードに保存しなければならない情報量が多量になってしまう。すなわちリング修復能力を高めるためには１つのノードが保存しなければならない情報量が増え、一方で１つのノードが保存しなければならない情報量を削減しようとするとリング修復能力が低下してしまう。
【００１１】
（目的）
本発明の目的は、あるノードに冗長に情報を持たせることなく、Ｐ２Ｐネットワークに参加している任意のノードが離脱した時に当該Ｐ２Ｐネットワークを修復できる通信システムを提供することにある。
【課題を解決するための手段】
【００１２】
上記課題を解決するため本発明は、１又は複数のコンテンツを保持するノード上の当該コンテンツに対して一意の識別情報を付与し、前記コンテンツをコンテンツノードとする、コンテンツオリエンテッドなＰ２Ｐ型のネットワークリングを構成することを特徴とする。
【００１３】
以下に、発明を実施するための最良の形態で使用される番号を括弧付きで用いて、課題を解決するための手段をより詳細に説明する。これらの番号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために付加されたものである。但し、それらの番号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１４】
本発明の第１の通信システムは、１つまたは複数のコンテンツを持つ複数のノードで構成され、各ノードは外部ネットワークと接続され、他のノードまたはコンテンツノードとの情報を送受信する送受信部１と、コンテンツデータベース６に登録されているコンテンツ１つに対し１つ生成され、担当するコンテンツについてのコンテンツノード機能を提供するコンテンツノード機能部２と、コンテンツデータベース６にコンテンツが登録させると、追加されたコンテンツを担当するコンテンツノード機能部２を追加するコンテンツノード生成機能部３と、コンテンツデータベース６からコンテンツが削除させると、削除されたコンテンツを担当していたコンテンツノード機能部２を削除するコンテンツノード削除機能部４と、検索したいコンテンツのＩＤ番号をハッシュ関数から求め、コンテンツノード機能部にコンテンツ検索リクエストを送信することで、コンテンツを検索するコンテンツノード検索機能部５と、他のノードに対し公開するコンテンツを保存するコンテンツデータベース６と、ノード内に存在するコンテンツノード機能部２で用いるフィンガーテーブルを保存するフィンガーテーブルデータベース７と、を有する。このような構成を採用し、Ｐ２Ｐネットワークをコンテンツオリエンテッドな構成にし、当該ネットワークにはコンテンツノードが参加することによって、各ノードにコンテンツの場所情報を登録する必要をなくし、さらにあるノードが離脱しコンテンツノードが当該ネットワークから離脱した場合に、離脱したコンテンツノードの下流側のコンテンツノードが離脱したコンテンツノードの上流側コンテンツノードを検索し、両者を結びつけ当該ネットワークを修復することによって、本発明の目的を達成することができる。
【００１５】
送受信部１は、外部ネットワークと接続されており、コンテンツノード機能部２から発信されるＤＨＴ参加メッセージとコンテンツ検索メッセージとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージとを、そのメッセージに記載の他のノードへ情報を送信する機能と、他のノードからＤＨＴ参加メッセージとコンテンツ検索メッセージとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージとを受信した場合、そのメッセージに記載のコンテンツノード機能部２に、そのメッセージを通知する機能と、を有する。この動作により他のノードまたは他のコンテンツノードとの情報の送受信を実現する。
【００１６】
コンテンツノード機能部２は、コンテンツデータベース６に登録されているコンテンツ１つに対し１つ生成され、担当するコンテンツのコンテンツノードをＰ２Ｐネットワーク上に登録する機能を提供するＤＨＴ参加機能部２１と、所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信するＤＨＴ検索機能部２２と、他のコンテンツノードとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあい、当該ネットワークを維持する機能を持つＤＨＴ管理機能部２３と、を有する。この構成により当該ネットワークを構成するためのＤＨＴ管理と、当該ネットワーク上でのコンテンツ検索機能を提供する。
【００１７】
コンテンツノード機能部２は、コンテンツノード生成機能部により生成されると、ＤＨＴ参加機能部２１を用いてＰ２Ｐネットワーク上に自コンテンツノードを参加させる機能と、他のコンテンツノードからＤＨＴ参加メッセージを受信すると、ＤＨＴ管理部２３を用いて、ＤＨＴ参加メッセージを送信してきたコンテンツノードを当該ネットワーク上に参加させる機能と、コンテンツノード検索機能部５から、コンテンツ検索リクエストを受けると、ＤＨＴ検索機能部２２を用いフィンガーテーブルデータベース７を参照し、自コンテンツノードに関するフィンガーテーブル以外の同じノード内に存在する他のコンテンツノードに関するフィンガーテーブルも参照した上で所定のアルゴリズムに従ってコンテンツノードを検索、コンテンツメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する機能と、他のコンテンツノードからコンテンツ検索メッセージを受信すると、ＤＨＴ検索機能部を用いフィンガーテーブルデータベース７を参照し、自コンテンツノードに関するフィンガーテーブル以外の同じノード内に存在する他のコンテンツノードに関するフィンガーテーブルも参照した上で所定のアルゴリズムに従ってコンテンツノードを検索、コンテンツメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する機能と、コンテンツノード削除機能部４からコンテンツノード削除リクエストを受信すると、自身を削除する機能と、を有する。
【００１８】
ＤＨＴ参加機能部２１は、他のコンテンツノードに対し、ＤＨＴ参加メッセージを送信することで、担当するコンテンツのコンテンツノードをＰ２Ｐネットワーク上に登録する機能を有する。
【００１９】
ＤＨＴ検索機能部２２は、コンテンツノード検索機能部からのコンテンツノード検索リクエストを受信すると、フィンガーテーブルデータベース７を参照し、自コンテンツノードに関するフィンガーテーブル以外の同じノード内に存在する他のコンテンツノードに関するフィンガーテーブルも参照した上で所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する機能と、他のコンテンツノードか  らコンテンツ検索メッセージを受信すると、フィンガーテーブルデータベース７を参照し、自コンテンツノードに関するフィンガーテーブル以外の同じノード内に存在する他のコンテンツノードに関するフィンガーテーブルも参照した上で所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する機能と、を有する。
【００２０】
ＤＨＴ管理部２３は、他のコンテンツノードとフィンガーテーブルデータベース７に含まれる自コンテンツノードに関するフィンガーテーブルの情報を含むキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあい、フィンガーテーブルの情報を更新し、Ｐ２Ｐネットワークを維持する機能と、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施し、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードは当該ネットワークを離脱したとすることで、他のコンテンツノードの離脱を検出する機能と、あるコンテンツノードが離脱したことを検出した場合、かつ離脱したコンテンツノードが自コンテンツノードから見て下流であった場合、離脱したコンテンツ  ノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間待つ機能と、あるコンテンツノードが離脱したことを検出した場合、かつ離脱したコンテンツノードが自コンテンツノードから見て上流であった場合、ＤＨＴ検索機能部２２を用い離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信することで、離脱したコンテンツノード先に存在するコンテンツノードと通信し当該ネットワークを修復する機能と、離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを待っている場合に、離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを送信してきたコンテンツノードとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあうことでリングの修復を完了する機能と、離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを待ち、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージが一定時間経過後も届かない場合、フィンガーテーブルデータベース７を参照し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試み、接続が成功した場合はそのコンテンツノードとリングを修復し、接続できなかった場合は再度フィンガーテーブルデータベース７を参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返す機能と、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待つ場合、一定時間経過す  る間に複数の離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを受信した場合、通常のコンテンツ検索メッセージと同様フィンガーテーブルデータベース７を参照し効率のよいコンテンツ検索メッセージ送信先がある場合は、そのコンテンツノードに対し、コンテンツ検索  メッセージを送信する機能と、フィンガーテーブルデータベース７を参照し効率のよいコンテンツ検索メッセージ送信先がない場合、すなわち複数のリング修復  オプションの付いたコンテンツ検索メッセージについて自コンテンツノードが最適な受信者であった場合、コンテンツ検索メッセージ送信元のコンテンツノードのＩＤ番号を比較し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試み、それ以外のコンテンツ検索メッセージについては全て破棄する機能と、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信後、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待っていたコンテンツノードからのキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを待つ機能と、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信後一定時間経過後もキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信しない場合は、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージの再送を実施する機能と、再送を含む全てのコンテンツ検索メッセージに対してもキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信しない場合は、フィンガーテーブルデータベース７を参照し、自コンテンツノードのＩＤ番号よりも小さくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試み、接続が成功した場合はそのコンテンツノードとリングを修復し、接続できなかった場合は再度フィンガーテーブルデータベース７を参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返す機能と、を有する。
【００２１】
本発明の第１の通信方法は、他のコンテンツノードと、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施し、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードはＰ２Ｐネットワークを離脱したとすることによってコンテンツノードの離脱を検出するステップＳ−１と、離脱したコンテンツノードの当該ネットワーク上での方向を確認するステップＳ−２と、離脱したコンテンツノードの当該ネットワーク上での方向が、離脱したコンテンツノードが自コンテンツノードから見て下流であった場合の動作を規定するステップＳ−Ａと、離脱したコンテンツノードの当該ネットワーク上での方向が、離脱したコンテンツノードが自コンテンツノードから見て上流であった場合の動作を規定するステップＳ−Ｂと、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信し、当該ネットワークを修復するステップＳ−Ｃ１と、を有する。
【００２２】
また、ステップＳ−Ａは、離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間待つ状態になるステップＳ−Ａ１と、離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間内に受信したかどうかを確認するステップＳ−Ａ２と、離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間内に受信しなかった場合に、フィンガーテーブルデータベースを参照し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みるステップＳ−Ａ３と、離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間内に受信した場合に、フィンガーテーブルデータベースを参照し効率のよいコンテンツ検索メッセージ送信先があるか確認するステップＳ−Ａ４と、ステップＳ−Ａ４で決定したコンテンツノードに対し、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信するステップＳ−Ａ６と、を有する。
【００２３】
ステップＳ−Ｂは、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信するステップＳ−Ｂ１と、一定時間以内にキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信したか確認するステップＳ−Ｂ２と、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを再送するステップＳ−Ｂ３と、一定時間以内にキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信したか確認するステップＳ−Ｂ４と、フィンガーテーブルデータベースを参照し、自コンテンツノードのＩＤ番号よりも小さくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みるステップＳ−Ｂ５と、を有する。
【００２４】
本発明の通信プログラムは、上記通信方法を、コンピュータに実行させるためのプログラムである。
【発明の効果】
【００２５】
本発明の第１の効果は、あるノードに冗長に情報を持たせることなく、Ｐ２Ｐネットワークに参加していた任意のノードが離脱した時に当該ネットワークを修復できることである。
【００２６】
その理由は、１又は複数のコンテンツを保持するノード上の当該コンテンツに対して一意の識別情報を付与し、前記コンテンツをコンテンツノードとする、コンテンツオリエンテッドなＰ２Ｐ型のネットワークリングを構成するからである。すなわち、Ｐ２Ｐ型ネットワークリングをコンテンツオリエンテッドな構成にし、当該ネットワークリングにはコンテンツノードが参加することによって、各ノードにコンテンツの場所情報を登録する必要をなくし、さらに、あるノードが離脱しコンテンツノードが当該ネットワークリングから離脱した場合に、離脱したコンテンツノードの下流側のコンテンツノードが離脱したコンテンツノードの上流側コンテンツノードを検索し、両者を結びつけることにより、当該ネットワークを修復するためである。
【発明を実施するための最良の形態】
【００２７】
（第１の実施の形態）
以下に本発明の第１の実施の形態について添付図を参照して説明する。
【００２８】
（第１の実施の形態の構成）
図１は、本実施の形態による通信システムの物理的構成を示す概略図である。
【００２９】
図１を参照すると、本実施の形態による通信システムは、ネットワーク上に配置された情報処理端末であるノード１００が、複数のコンテンツを有しうるものとする。
【００３０】
図２は、本実施の形態による通信システムの論理的構成を示す概略図である。
【００３１】
図２を参照すると、本実施の形態による通信システムは、Ｐ２Ｐ（Ｐｅｅｒ  ｔｏ  Ｐｅｅｒ）のネットワークをコンテンツオリエンテッドな構成し、ノード１００が有する各コンテンツ（コンテンツノード）に一意のノードＩＤ（ｉｄｅｎｔｉｆｉｅｒ）を割り振り、ノードＩＤ（ｉｄｅｎｔｉｆｉｅｒ）２、３、・・・、５６、６１としてストラクチャードに当該ネットワーク上に参加させたものである。なお、本実施の形態によるネットワークのトポロジはリング（リングネットワーク）であるが、トポロジはリングに制限されるものではない。
【００３２】
図３は、本実施の形態によるノードの構成を示すブロック図である。
【００３３】
図３を参照すると、本実施の形態の通信システムを構成するノードは、送受信部１と、コンテンツノード機能部２と、コンテンツノード生成機能部３と、コンテンツノード削除機能部４と、コンテンツノード検索機能部５と、コンテンツデータベース６と、フィンガーテーブルデータベース７を有する。
【００３４】
またコンテンツノード機能部２は、ＤＨＴ（Ｄｉｓｔｒｉｂｕｔｅｄ  Ｈａｓｈ  Ｔａｂｌｅ）参加機能部２１と、ＤＨＴ検索機能部２２と、ＤＨＴ管理機能部２３と、を有する。
【００３５】
送受信部１は、外部ネットワークと接続されており、コンテンツノード機能部２から発信されるＤＨＴ参加メッセージとコンテンツ検索メッセージとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージとを、そのメッセージに記載の他のノードへ情報を送信する。また、他のノードからＤＨＴ参加メッセージとコンテンツ検索メッセージとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージとを受信した場合、そのメッセージに記載のコンテンツノード機能部２に、そのメッセージを通知する。
【００３６】
コンテンツノード機能部２は、コンテンツデータベース６に登録されているコンテンツ１つに対し１つ生成され、担当するコンテンツについてのコンテンツノード機能を提供する。すなわち、コンテンツノード機能部２のひとつがリングネットワーク上のコンテンツノード１つに該当し、リングネットワークを構成するためのＤＨＴ管理と、リングネットワーク上でのコンテンツ検索機能を提供する。ここで、コンテンツノードのリングネットワーク上のＩＤ（ｉｄｅｎｔｉｆｉｅｒ）は、コンテンツに関する情報をハッシュ関数に適用した結果を用いる。コンテンツに関する情報とは、例えばコンテンツ名、などがある。
【００３７】
コンテンツノード機能部２は、コンテンツノード生成機能部３により生成されると、ＤＨＴ参加機能部２１を用いてリングネットワーク上に自コンテンツノード（自コンテンツノード機能部２）を参加させる。
【００３８】
また、コンテンツノード機能部２は、他のコンテンツノードからＤＨＴ参加メッセージを受信すると、ＤＨＴ管理部２３を用いて、ＤＨＴ参加メッセージを送信してきたコンテンツノードをリングネットワーク上に参加させる。
【００３９】
また、コンテンツノード機能部２は、コンテンツノード検索機能部５から、コンテンツ検索リクエストを受けると、ＤＨＴ検索機能部２２を用いコンテンツ検索メッセージを送受信部１に発信する。すなわち、ＤＨＴ検索機能部２２は、フィンガーテーブルデータベース７を参照し、後述する所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【００４０】
ここで、フィンガーテーブルデータベース７にはノードに存在するコンテンツノード機能部２全てに関するフィンガーテーブルが保存されている。ＤＨＴ検索機能部２２がフィンガーテーブルデータベース７を参照し、所定のアルゴリズムに従ってメッセージ送信先を決める場合に、自コンテンツノード機能部に関するフィンガーテーブル以外に他のコンテンツノード機能部に関するフィンガーテーブルも参照することで、自コンテンツノードに関するフィンガーテーブルを参照するだけでは知ることのできないコンテンツノード情報を得ることができる。すなわち、多くのコンテンツノード情報を参照できるため、効率のよいメッセージ送信先を決めることができる。ここで効率のよいメッセージ送信先とは、コンテンツ検索メッセージで検索したいコンテンツノードそのものであるが、その情報がない場合は、検索したいコンテンツノードのＩＤ番号よりも小さいＩＤ番号を持つコンテンツノードの中で最大のＩＤ番号を持つコンテンツノードである。
【００４１】
また、コンテンツノード機能部２は、他のコンテンツノードからコンテンツ検索メッセージを受信すると、ＤＨＴ検索機能部２２及びフィンガーテーブルデータベース７を用い所定のアルゴリズムに従ってコンテンツノードを検索、コンテンツメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【００４２】
また、コンテンツノード機能部２は、コンテンツノード削除機能部４からコンテンツノード削除リクエストを受信すると、自身を削除する。
【００４３】
ＤＨＴ参加機能部２１は、担当するコンテンツのコンテンツノードをリングネットワーク上に登録する機能を提供する。すなわち、リングネットワーク上にコンテンツノードを登録するために、他のコンテンツノードに対し、ＤＨＴ参加メッセージを送信する。
【００４４】
ＤＨＴ検索機能部２２は、コンテンツノード検索機能部５からのコンテンツノード検索リクエストを受信すると、フィンガーテーブルデータベース７を参照し、所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【００４５】
また、ＤＨＴ検索機能部２２は、他のコンテンツノードからコンテンツ検索メッセージを受信すると、フィンガーテーブルデータベース７を参照し、所定のアルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【００４６】
ＤＨＴ管理部２３は、他のコンテンツノードとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあい、リングネットワークを維持する機能を持つ。ここで、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージにはフィンガーテーブルデータベース７に含まれる自コンテンツノードに関するフィンガーテーブルも含まれ、他のコンテンツノードとフィンガーテーブルを送受信しあうことでフィンガーテーブルを最新の状態にする。すなわち、他のコンテンツノードから受信したフィンガーテーブルが自コンテンツノードの持つフィンガーテーブルより新しい場合、他のコンテンツノードから受信したフィンガーテーブルの情報を参照し、自コンテンツノードのフィンガーテーブルを更新する。ここで、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージはリングネットワーク上上流及び下流のコンテンツノード１つまたは複数に対し実行される。
【００４７】
ここで、リングネットワーク上で上流とは、リングネットワークにおいてあるコンテンツノードから見てＩＤ番号が小さいコンテンツノードが存在する方向を指し、リングネットワーク上で下流とは、リングネットワークにおいてあるコンテンツノードから見てＩＤ番号が大きいコンテンツノードが存在する方向を指す。ただしＩＤ番号の継ぎ目に当たる部分において、あるコンテンツノードから見てどちらの方向のコンテンツノードＩＤも小さい場合は、より小さいＩＤ番号を持つコンテンツノード側を下流とし、逆側を上流とする。
【００４８】
さらに、ＤＨＴ管理部２３は、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施することで、他のコンテンツノードの離脱を検出する。すなわちキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードはリングネットワークを離脱したとする。
【００４９】
ＤＨＴ管理部２３は、あるコンテンツノードが離脱したことを検出した場合、離脱したコンテンツノード先に存在するコンテンツノードと通信しリングネットワークを修復する機能を持つ。離脱したコンテンツノードが自コンテンツノードから見て下流であった場合、離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間待つ。一方、離脱したコンテンツノードが自コンテンツノードから見て上流であった場合、ＤＨＴ検索機能部２２を用い離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信する。
【００５０】
離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを待っていたＤＨＴ管理部２３は、離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを送信してきたコンテンツノードとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあうことでリングの修復を完了する。
【００５１】
ここで、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待つ場合、ネットワーク上の状態及びリングネットワークの破損状態によっては離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージが一定時間経過後も届かない場合も考えられる。この場合、フィンガーテーブルデータベース７を参照し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。接続が成功した場合はそのコンテンツノードとリングを修復し、接続できなかった場合は再度フィンガーテーブルデータベース７を参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返す。
【００５２】
さらに、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待つ場合、一定時間経過する間に複数の離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを受信する可能性もある。この場合、まずは通常のコンテンツ検索メッセージと同様フィンガーテーブルデータベース７を参照し効率のよいコンテンツ検索メッセージ送信先がある場合は、そのコンテンツノードに対し、コンテンツ検索メッセージを送信する。一方フィンガーテーブルデータベース７を参照し効率のよいコンテンツ検索メッセージ送信先がない場合、すなわち複数のリング修復オプションの付いたコンテンツ検索メッセージについて自コンテンツノードが最適な受信者であった場合、コンテンツ検索メッセージ送信元のコンテンツノードのＩＤ番号を比較し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。それ以外のコンテンツ検索メッセージについては全て破棄する。
【００５３】
また、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信する場合、ＤＨＴ検索機能部２２はリング修復オプションのないコンテンツ検索メッセージと同様、フィンガーテーブルデータベース７を参照する場合に、自コンテンツノード機能部２に関するフィンガーテーブル以外に他のコンテンツノード機能部２に関するフィンガーテーブルも参照することで、自コンテンツノードに関するフィンガーテーブルを参照するだけでは知ることのできないコンテンツノード情報を得ることができる。すなわち、多くのコンテンツノード情報を参照できるため、効率のよいメッセージ送信先を決めることができる。ここで効率のよいメッセージ送信先とは、コンテンツ検索メッセージで検索したいコンテンツノード、すなわち離脱したコンテンツノードのＩＤ番号よりも小さいＩＤ番号を持つコンテンツノードの中で最大のＩＤ番号を持つコンテンツノードである。このような検索を繰り返すことで、離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを待つコンテンツノードにメッセージが届けられる。
【００５４】
離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信後、ＤＨＴ管理部２３は離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを待っていたコンテンツノードからのキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを待つ。
【００５５】
ここで、一定時間経過後もキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信しない場合は、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージの再送を実施する。再送回数は１回とは限らず、ネットワーク状態により再送を複数回実施することもできる。
【００５６】
この再送した全てのコンテンツ検索メッセージに対してもキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信しない場合は、フィンガーテーブルデータベース７を参照し、自コンテンツノードのＩＤ番号よりも小さくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。接続が成功した場合はそのコンテンツノードとリングを修復し、接続できなかった場合は再度フィンガーテーブルデータベース７を参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返す。
【００５７】
コンテンツノード生成機能部３は、コンテンツデータベース６にコンテンツが登録されると、追加されたコンテンツを担当するコンテンツノード機能部２を追加する。
【００５８】
コンテンツノード削除機能部４は、コンテンツデータベース６からコンテンツが削除されると、削除されたコンテンツを担当していたコンテンツノード機能部２を削除する。
【００５９】
すなわち、コンテンツデータベース６に新たにコンテンツが追加された場合、ノードはコンテンツノード生成機能部３を用い、追加されたコンテンツを担当するコンテンツノード機能部２を追加する。追加されたコンテンツノード機能部は、ＤＨＴ参加機能部２１を用い自身をリングネットワークに参加させる。一方、コンテンツデータベース６からコンテンツが削除された場合、ノードはコンテンツノード削除機能部４を用い、削除されたコンテンツを担当していたコンテンツノード機能部２を削除する。
【００６０】
コンテンツノード検索機能部５は、検索したいコンテンツのＩＤ番号をハッシュ関数から求め、コンテンツノード機能部２にコンテンツ検索リクエストを送信することで、コンテンツを検索する。ここで、ノード内に存在するコンテンツノード機能部２のうち、検索したいコンテンツのＩＤ番号よりＩＤ番号が小さいコンテンツを担当するコンテンツノード機能部の中で最大のＩＤ番号を担当するコンテンツノード機能部２に対し、コンテンツ検索リクエストを送信することで、効率のよい検索を実施することができる。
【００６１】
コンテンツデータベース６は、他のノードに対し公開するコンテンツを保存する。なお、コンテンツとは、便宜上設けた概念であり、例えば、ＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）のように、インターネット上における情報資源の存在場所を指し示す情報が含まれる。
【００６２】
フィンガーテーブルデータベース７は、ノード内に存在するコンテンツノード機能部２で用いるフィンガーテーブルを保存する。また、ノード１００は、自ノード内に複数の前記フィンガーテーブルが存在する場合、各フィンガーテーブルを関連付けてフィンガーテーブルデータベース７に保存する。フィンガーテーブルとは本実施の形態における所定のアルゴリズムにおいてコンテンツノードを検索する場合に用いるルーティングテーブルのようなもので、コンテンツノードのＩＤ番号とＩＰアドレスなどのコンテンツノードに関する情報が記載されている。
【００６３】
ハッシュ空間を２ｍ  の値で定義し（ｍはパラメータ）、ノード１００の各コンテンツノードに対し、各コンテンツノードを識別するノードＩＤをハッシュ関数を用いて算出し、付与する。
【００６４】
従って、１つのノード１００が複数のノードＩＤを持つ場合があり、１つのノード１００が複数のコンテンツ（ノードＩＤ）を持つ場合、ハッシュ空間ではノードが各コンテンツノードによって複数存在しているように見える。
【００６５】
ノード１００の存在場所となるＩＰアドレスと、コンテンツの存在場所となるノードＩＤの組がフィンガーテーブルとしてフィンガーテーブルデータベース７に記録され、当該フィンガーテーブルの情報が、本実施の形態における所定のアルゴリズムによって各ノードに分散する。
【００６６】
各コンテンツノードは、ハッシュ空間上で当該コンテンツノードの上流側の隣に位置するコンテンツノード（Ｐノード）のノードＩＤ及びＩＰアドレスと、ハッシュ空間上で当該コンテンツノードの下流側の隣に位置するコンテンツノード（Ｓノード）のノードＩＤ及びＩＰアドレスとを有する。
【００６７】
また、各コンテンツノードは、フィンガーテーブルとして、ノードＩＤ及びＩＰアドレスの組をｍエントリ有し、自身のノードＩＤ＝Ａとして、ｉエントリ目のノードＩＤを、（Ａ＋２ｉ）  ｍｏｄ  ２ｍ  ０≦ｉ≦ｍ−１の式（１）によって求めるとする場合、当該ｉエントリ目のノードＩＤより大きいノードＩＤを持つ現存するノードのノードＩＤの情報を有する。
【００６８】
図４は、本実施の形態の形態による各ノードが有するフィンガーテーブルデータベース７をまとめて示した図である。
【００６９】
図４を参照すると、ハッシュ空間において、各コンテンツノードは、当該コンテンツノードの上流側の隣に位置するコンテンツノード（Ｐノード）のノードＩＤと、当該コンテンツノードの下流側の隣に位置するコンテンツノード（Ｓノード）のノードＩＤと、ハッシュ空間２６（ｍ＝６）において、上記式（１）によって求められるｍ＝０からｍ＝６−１までのノードＩＤとを有する。
【００７０】
例えば、ノードＩＤのコンテンツノードは、フィンガーテーブルとして、Ｐ＝６１、Ｓ＝３、ｉ（０）＝３、ｉ（１）＝８、ｉ（２）＝８、ｉ（３）＝１３、ｉ（４）＝１８、ｉ（５）＝３７の情報を有する。
【００７１】
なお、本実施の形態は、分散ハッシュを用いることなく一意のＩＤを割り振ったストラクチャードのリングネットワークにも適用できる。
【００７２】
（第１の実施の形態の動作）
次に、図を参照して本実施の形態のハッシュ空間が  ２６＝６４の場合における通信システムの動作について詳細に説明する。
【００７３】
図５は、本実施の形態のステイビライゼイション（ｓｔａｂｉｌｉｚａｔｉｏｎ）動作を示すシーケンス図である。
【００７４】
各コンテンツノードは、Ｐノード（ｐｒｅｄｅｃｅｓｓｏｒノード）との間及びＳノード（ｓｕｃｃｅｓｓｏｒノード）との間でキープアライブメッセージの送受信を定期的に実施し、互いに互いの差分データをやり取りする。
【００７５】
各コンテンツノードは、どのデータがステイビライゼイション動作を行う相手にとって新しいデータなのかを示すフラグを用いることによって、データの差分を提供し、データの差分がない場合（データの更新がなされていない場合）、空のレスポンスを行う。
【００７６】
各コンテンツノードは、データの差分を要求するステイビライゼイションメッセージに対して返事がない場合、保持しているデータを用い、返事がないＳノードの隣のＳノードに対してステイビライゼイションメッセージを送信し、あるいは、返事がないＰノードの隣のＰノードに対してステイビライゼイションメッセージを送信し、ステイビライゼイション動作を行う。
【００７７】
図６は、ノード又はコンテンツノードがリングネットワークから離脱した際のステイビライゼイション動作を示すシーケンス図である。
【００７８】
図６を参照すると、ノードＩＤ４０のコンテンツノードと、ノードＩＤ４８のコンテンツノードが、互いにステイビライゼイションメッセージの送受信を定期的に行い、ノードＩＤ３３のコンテンツノードと、ノードＩＤ４０のコンテンツノードが、互いにステイビライゼイションメッセージの送受信を定期的に行っている。
【００７９】
次いで、ノードＩＤ４０のコンテンツノードが、互いにステイビライゼイションメッセージの送受信を定期的に行っているノードＩＤ４８のコンテンツノード及びＩＤ３３のコンテンツノードに対し、リングネットワークを離脱する旨を通知することなくリングネットワークから離脱すると、ノードＩＤ４８のコンテンツノードノード及びＩＤ３３のコンテンツノードは、送信したステイビライゼイションメッセージに対する応答がないことにより、ノードＩＤ４０のコンテンツノードの離脱を認識する。
【００８０】
次いで、ノードＩＤ３３のコンテンツノードは、返事がないＳノード（ノードＩＤ４０のコンテンツノード）の隣のＳノード（ノードＩＤ４８のコンテンツノード）に対してステイビライゼイションメッセージを送信し、一方、ノードＩＤ４８のコンテンツノードは、返事がないＰノード（ノードＩＤ４０のコンテンツノード）の隣のＰノード（ノードＩＤ３３のコンテンツノード）に対してステイビライゼイションメッセージを送信し、互いにステイビライゼイションメッセージの送受信を定期的に行う。
【００８１】
なお、ノードＩＤ４０のコンテンツノードが、互いにステイビライゼイションメッセージの送受信を定期的に行っているノードＩＤ４８のコンテンツノード及びＩＤ３３のコンテンツノードに対し、リングネットワークを離脱する旨（終了メッセージ）を通知して離脱した正規終了時は、終了メッセージを受けたノード（ノードＩＤ３３のコンテンツノード及びノードＩＤ４８のコンテンツノード）の動作はステイビライゼイション動作における離脱認識時と同様の動作である。
【００８２】
次に、リングネットワーク修復における基本動作の概略を説明する。
【００８３】
まず、ノード１００又はコンテンツノードが、ノードＩＤが連続した２ノード（コンテンツノード）の消滅（リングネットワークからの離脱）を検出すると、上流ノードが離脱したノード１００又はコンテンツノードが、送信先を自身のフィンガーテーブル上最もノードＩＤの値が大きいノードとして、エラーメッセージ付きで離脱したノード（コンテンツノード）を検索するメッセージを出す。下流ノードが離脱したノード１００又はコンテンツノードは、エラー待ち状態に移行する。
【００８４】
リングネットワーク上の各ノードは、通常シーケンスでメッセージを転送する。
【００８５】
エラー待ち状態のノード１００又はコンテンツノードは、メッセージを受信すると、検索先とフィンガーテーブルを比べ、検索先のノードＩＤの値を越えない最大のノードＩＤを付与されたノード（コンテンツノード）に対し、受信したメッセージを転送する。
【００８６】
エラー待ち状態のノード１００又はコンテンツノードは、メッセージを受信した際、転送先がない（＝条件に適合するのが自ノード（コンテンツノード））場合、メッセージの送信元と接続する。
【００８７】
なお、エラー待ち状態のノード１００又はコンテンツノードは、複数のメッセージを受信した場合、ノードＩＤの小さい方を優先してメッセージを転送する。
【００８８】
一方、上流ノードが離脱したノード１００又はコンテンツノードは、送信したメッセージに対する応答が一定時間待ってもない場合、１度だけメッセージを再送する。
【００８９】
図７は、ノード１００又はコンテンツノードがリングネットワークから離脱した場合のリングネットワーク修復のより詳細な動作例を示すフローチャートである。
【００９０】
図７を参照すると、ノード１００又はコンテンツノードが、ノードＩＤが連続した２ノード（コンテンツノード）の消滅（リングネットワークからの離脱）を検出すると（ステップＳ−１）、消滅したノード（コンテンツノード）のノードＩＤと自身のノードＩＤの値の大きさを比較し、ノードＩＤの大小を判別する（ステップＳ−２）。
【００９１】
ステップＳ１０１において、ノード１００又はコンテンツノードは、他のコンテンツノードと、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施することで、他のコンテンツノードの離脱を検出する。すなわちキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードはリングネットワークを離脱したとする。
【００９２】
他のコンテンツノードの離脱が検出された場合、離脱したコンテンツノードのリングネットワーク上での方向により、動作が異なる。離脱したコンテンツノードが自ノード１００又はコンテンツノードから見て下流であった場合、ステップＳ−Ａ１へ移行する。一方、離脱したコンテンツノードが自自ノード１００又はコンテンツノードから見て上流であった場合、ステップＳ−Ｂ１へ移行する。
【００９３】
消滅（離脱）したノード（コンテンツノード）のノードＩＤが自身のノードＩＤより小さい場合（上流ノードが離脱した場合）、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、離脱したコンテンツノードを検索するリング修復オプションのついたエラー付き検索メッセージの受信待ち状態となる（ステップＳ−Ａ１）。
【００９４】
次いで、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、一定時間内にエラー付き検索メッセージを受信しなかった場合（ステップＳ−Ａ２）、フィンガーテーブルデータベースを参照し、フィンガーテーブル上最も自身のノードＩＤに近いノードＩＤのノード（コンテンツノード）と前述のステイビライゼイション動作を行う（ステップＳ−Ａ３）。
【００９５】
すなわち、ステップＳ−Ａ３において、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、自コンテンツノードのノードＩＤよりも大きくかつ、最も近いノードＩＤを持つコンテンツノードから順に接続を試み、接続が成功した場合はステップＳ１１４に移行し、接続できなかった場合は再度フィンガーテーブルデータベースを参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返した後、ステップＳ１１４に移行する。
【００９６】
一方、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、一定時間内にエラー付き検索メッセージを受信した場合（ステップＳ−Ａ２）、自身が最適受信者であるか否かを判定する（ステップＳ−Ａ４）。この判定は、検索対象となるノードＩＤの最大値を超えない最大のノードＩＤの値が自身のノードＩＤである場合に、自身が最適受信者であると判定する。
【００９７】
ステップＳ−Ａ４において、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、自身が最適受信者でないと判定した場合、フィンガーテーブルに基づいてエラー付き検索メッセージを転送し（ステップＳ−Ａ５）、ステップＳ−Ａ２に戻り、一方、自身が最適受信者であると判定した場合、エラー付き検索メッセージに対してレスポンス（キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージ）を送信する（ステップＳ−Ａ６）。
【００９８】
ステップＳ−Ａ６において、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、複数のエラー付き検索メッセージを受信した場合、送信元のノードＩＤがより小さい値の送信元から受信したエラー付き検索メッセージに対するレスポンスの送信を優先し、他から受信したエラー付き検索メッセージを破棄する。
【００９９】
次いで、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードが、レスポンスの送信元のノード（コンテンツノード）と接続してキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信することによって（ステップＳ−Ｃ１）、リングネットワークが修復される。
【０１００】
これに対し、ステップＳ−２において、消滅（離脱）したノード（コンテンツノード）のノードＩＤが自身のノードＩＤより大きい場合（下流ノードが離脱した場合）、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、検索対象を離脱したノード（コンテンツノード）とし、離脱したノード（コンテンツノード）を検索するリング修復オプションを付けたエラー付き検索メッセージを送信する（ステップＳ−Ｂ１）。
【０１０１】
次いで、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、送信したエラー付き検索メッセージ対するレスポンス（キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージ）を一定時間内に受信した場合（ステップＳ−Ｂ２）、レスポンスの送信元のノード（コンテンツノード）と接続してキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信することによって（ステップＳ−Ｃ１）、リングネットワークが修復される。
【０１０２】
一方、ステップＳ−Ｂ２において、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、送信したエラー付き検索メッセージ対するレスポンス（キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージ）を受信しなかった場合、一定時間経過後に、離脱したノード（コンテンツノード）を検索するリング修復オプションを付けたエラー付き検索メッセージを再送し（ステップＳ−Ｂ３）、再送したエラー付き検索メッセージ対するレスポンス（キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージ）を一定時間内に受信しなかった場合（ステップＳ−Ｂ４）、フィンガーテーブル上最も自身のノードＩＤに遠いノードＩＤのノード（コンテンツノード）と前述のステイビライゼイション動作を行う（ステップＳ−Ｂ５）。なお、ノード（コンテンツノード）の離脱を検出したノード１００又はコンテンツノードは、ステップＳ−Ｂ５においてステイビライゼイション動作を行えない場合、ダウンする。
【０１０３】
一方、再送したエラー付き検索メッセージ対するレスポンス（キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージ）を一定時間内に受信した場合（ステップＳ−Ｂ４）、レスポンスの送信元のノード（コンテンツノード）と接続してキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信することによって（ステップＳ−Ｃ１）、リングネットワークが修復される。
【０１０４】
なお、ステップＳ−２において、上流ノード及び下流ノードが離脱した場合、ステップＳ−Ａ１〜の処理及びステップＳ−Ｂ１〜の処理の両方を行う。
【０１０５】
（第１の実施の形態の効果）
次に、本実施の形態の効果について説明する。
【０１０６】
本実施の形態によれば、Ｐ２Ｐのネットワークをコンテンツオリエンテッドな構成にし、複数のコンテンツを有しうるノード上のコンテンツ（コンテンツノード）に一意のノードＩＤを割り振り、ストラクチャードに当該ネットワークに参加することによって、各ノードにコンテンツの場所情報を登録する必要をなくし、さらにあるノードが離脱しコンテンツノードが当該ネットワークから離脱した場合に、離脱したコンテンツノードの下流側のコンテンツノードが、離脱したコンテンツノードの上流側コンテンツノードを検索し、両者を結びつけ当該ネットワークを修復することによって、ノードに冗長に情報を持たせることなく、任意のノードが離脱した時にリングが修復することができる。
【０１０７】
また、本実施の形態によれば、１つのノード１００に存在するコンテンツノード機能部２全てに関するフィンガーテーブルが当該ノード１００のフィンガーテーブルデータベース７に保存されているため、ＤＨＴ検索機能部２２がフィンガーテーブルデータベース７を参照し、所定のアルゴリズムに従ってメッセージ送信先を決める場合に、自コンテンツノード機能部２に関するフィンガーテーブル以外に他のコンテンツノード機能部２に関するフィンガーテーブルも参照することで、自コンテンツノードに関するフィンガーテーブルを参照するだけでは知ることのできないコンテンツノード情報を得ることができる。すなわち、多くのコンテンツノード情報を参照できるため、効率のよいメッセージ送信先を決めることができる。従って、１つのノード１００に存在する複数のコンテンツノード機能部２間で当該メッセージのやりとりを行うことを防止でき、また、あるノード１００から一旦出力された当該メッセージが当該ノード１００に戻ってくることを防止できる。
【０１０８】
（第２の実施の形態）
以下に本発明の第２の実施の形態について添付図を参照して説明する。
【０１０９】
本実施の形態による通信システムのネットワークが、コード（Ｃｈｏｒｄ）の技術を用いたコード（Ｃｈｏｒｄ）リングである点で第１の実施の形態と相違する。以下、第１の実施の形態と相違する点を中心に説明する。
【０１１０】
（第２の実施の形態の構成）
【０１１１】
本実施の形態によるコンテンツノード機能部２は、コンテンツデータベース６に登録されているコンテンツ１つに対し１つ生成され、担当するコンテンツについてのコンテンツノード機能を提供する。すなわち、コンテンツノード機能部２のひとつがコード（Ｃｈｏｒｄ）リング上のコンテンツノード１つに該当し、コード（Ｃｈｏｒｄ）リングを構成するためのＤＨＴ管理と、コード（Ｃｈｏｒｄ）リング上でのコンテンツ検索機能を提供する。ここで、コンテンツノードのコード（Ｃｈｏｒｄ）リング上のＩＤは、コンテンツに関する情報をハッシュ関数に適用した結果を用いる。コンテンツに関する情報とは、例えばコンテンツ名、などがある。
【０１１２】
本実施の形態によるコンテンツノード機能部２は、コンテンツノード生成機能部３により生成されると、ＤＨＴ参加機能部２１を用いてコード（Ｃｈｏｒｄ）リング上に自コンテンツノード（コンテンツノード機能部２）を参加させる。
【０１１３】
また、本実施の形態によるコンテンツノード機能部２は、他のコンテンツノードからＤＨＴ参加メッセージを受信すると、ＤＨＴ管理部２３を用いて、ＤＨＴ参加メッセージを送信してきたコンテンツノードをコード（Ｃｈｏｒｄ）リング上に参加させる。
【０１１４】
また、本実施の形態によるコンテンツノード機能部２は、コンテンツノード検索機能部５から、コンテンツ検索リクエストを受けると、ＤＨＴ検索機能部２２を用いコンテンツ検索メッセージを送受信部１に発信する。すなわち、ＤＨＴ検索機能部２２は、フィンガーテーブルデータベース７を参照し、コード（Ｃｈｏｒｄ）アルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【０１１５】
ここで、本実施の形態によるフィンガーテーブルデータベース７にはノードに存在するコンテンツノード機能部２全てに関するフィンガーテーブルが保存されている。ＤＨＴ検索機能部２２がフィンガーテーブルデータベース７を参照し、コード（Ｃｈｏｒｄ）アルゴリズムに従ってメッセージ送信先を決める場合に、自コンテンツノード機能部に関するフィンガーテーブル以外に他のコンテンツノード機能部に関するフィンガーテーブルも参照することで、自コンテンツノードに関するフィンガーテーブルを参照するだけでは知ることのできないコンテンツノード情報を得ることができる。すなわち、多くのコンテンツノード情報を参照できるため、効率のよいメッセージ送信先を決めることができる。ここで効率のよいメッセージ送信先とは、コンテンツ検索メッセージで検索したいコンテンツノードそのものであるが、その情報がない場合は、検索したいコンテンツノードのＩＤ番号よりも小さいＩＤ番号を持つコンテンツノードの中で最大のＩＤ番号を持つコンテンツノードである。
【０１１６】
また、本実施の形態によるコンテンツノード機能部２は、他のコンテンツノードからコンテンツ検索メッセージを受信すると、ＤＨＴ検索機能部２２及びフィンガーテーブルデータベース７を用いコード（Ｃｈｏｒｄ）アルゴリズムに従ってコンテンツノードを検索、コンテンツメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【０１１７】
本実施の形態によるＤＨＴ参加機能部２１は、担当するコンテンツのコンテンツノードをコード（Ｃｈｏｒｄ）リング上に登録する機能を提供する。すなわち、コード（Ｃｈｏｒｄ）リング上にコンテンツノードを登録するために、他のコンテンツノードに対し、ＤＨＴ参加メッセージを送信する。
【０１１８】
本実施の形態によるＤＨＴ検索機能部２２は、コンテンツノード検索機能部５からのコンテンツノード検索リクエストを受信すると、フィンガーテーブルデータベース７を参照し、コード（Ｃｈｏｒｄ）アルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【０１１９】
また、本実施の形態によるＤＨＴ検索機能部２２は、他のコンテンツノードからコンテンツ検索メッセージを受信すると、フィンガーテーブルデータベース７を参照し、コード（Ｃｈｏｒｄ）アルゴリズムに従ってメッセージ送信先を決め、コンテンツ検索メッセージにメッセージ送信先を記載の上送受信部１に発信する。
【０１２０】
本実施の形態によるＤＨＴ管理部２３は、他のコンテンツノードとキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信しあい、コード（Ｃｈｏｒｄ）リングを維持する機能を持つ。ここで、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージにはフィンガーテーブルデータベース７に含まれる自コンテンツノードに関するフィンガーテーブルも含まれ、他のコンテンツノードとフィンガーテーブルを送受信しあうことでフィンガーテーブルを最新の状態にする。すなわち、他のコンテンツノードから受信したフィンガーテーブルが自コンテンツノードの持つフィンガーテーブルより新しい場合、他のコンテンツノードから受信したフィンガーテーブルの情報を参照し、自コンテンツノードのフィンガーテーブルを更新する。ここで、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージはコード（Ｃｈｏｒｄ）リング上上流及び下流のコンテンツノード１つまたは複数に対し実行される。
【０１２１】
ここで、コード（Ｃｈｏｒｄ）リング上で上流とは、コード（Ｃｈｏｒｄ）リングにおいてあるコンテンツノードから見てＩＤ番号が小さいコンテンツノードが存在する方向を指し、コード（Ｃｈｏｒｄ）リング上で下流とは、コード（Ｃｈｏｒｄ）リングにおいてあるコンテンツノードから見てＩＤ番号が大きいコンテンツノードが存在する方向を指す。ただしＩＤ番号の継ぎ目に当たる部分において、あるコンテンツノードから見てどちらの方向のコンテンツノードＩＤも小さい場合は、より小さいＩＤ番号を持つコンテンツノード側を下流とし、逆側を上流とする。
【０１２２】
さらに、本実施の形態によるＤＨＴ管理部２３は、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施することで、他のコンテンツノードの離脱を検出する。すなわちキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードはコード（Ｃｈｏｒｄ）リングを離脱したとする。
【０１２３】
本実施の形態によるＤＨＴ管理部２３は、あるコンテンツノードが離脱したことを検出した場合、離脱したコンテンツノード先に存在するコンテンツノードと通信しコード（Ｃｈｏｒｄ）リングを修復する機能を持つ。
【０１２４】
コンテンツデータベース６に新たにコンテンツが追加された場合、本実施の形態によるノード１００はコンテンツノード生成機能部３を用い、追加されたコンテンツを担当するコンテンツノード機能部２を追加する。追加された本実施の形態によるコンテンツノード機能部は、ＤＨＴ参加機能部２１を用い自身をコード（Ｃｈｏｒｄ）リングに参加させる。一方、コンテンツデータベース６からコンテンツが削除された場合、ノードはコンテンツノード削除機能部４を用い、削除されたコンテンツを担当していたコンテンツノード機能部２を削除する。
【０１２５】
本実施の形態によるフィンガーテーブルデータベース７は、ノード内に存在するコンテンツノード機能部２で用いるフィンガーテーブルを保存する。フィンガーテーブルとはコード（Ｃｈｏｒｄ）アルゴリズムにおいてコンテンツノードを検索する場合に用いるルーティングテーブルのようなもので、コンテンツノードのＩＤ番号とＩＰアドレスなどのコンテンツノードに関する情報が記載されている。
【０１２６】
（第２の実施の形態の動作）
次に、図８を参照して本実施の形態の動作について詳細に説明する。
【０１２７】
（１）ステップＳ−１１
本発明の初期状態である。
【０１２８】
（２）ステップＳ−１２
他のコンテンツノードと、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージの送受信を定期的に実施することで、他のコンテンツノードの離脱を検出する。すなわちキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信後、一定時間返信がなく、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを再送しても返信がない場合は、そのコンテンツノードはコード（Ｃｈｏｒｄ）リングを離脱したとする。
【０１２９】
（３）ステップＳ−１３
他のコンテンツノードの離脱を検出した場合、離脱したコンテンツノードのコード（Ｃｈｏｒｄ）リング上での方向により、動作が異なる。離脱したコンテンツノードが自コンテンツノードから見て下流であった場合、ステップＳ−Ａ１１へ移行する。一方、離脱したコンテンツノードが自コンテンツノードから見て上流であった場合、ステップＳ−Ｂ１へ移行する。
【０１３０】
（４）ステップＳ−Ａ１１
離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間待つ状態になる。
【０１３１】
（５）ステップＳ−Ａ１２
離脱したコンテンツノードから見て下流のノードからの離脱したコンテンツノードを検索するリング修復オプションのついたコンテンツ検索メッセージを一定時間内に受信した場合は、ステップＳ−Ａ４に移行する。一方、そうでなかった場合はステップＳ−Ａ１３に移行する。
【０１３２】
（６）ステップＳ−Ａ１３
フィンガーテーブルデータベースを参照し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。接続が成功した場合はステップＳ−Ｃ１１に移行する。接続できなかった場合は再度フィンガーテーブルデータベースを参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返した後、ステップＳ−Ｃ１１に移行する。
【０１３３】
（７）ステップＳ−Ａ１４
通常のコンテンツ検索メッセージと同様フィンガーテーブルデータベースを参照し効率のよいコンテンツ検索メッセージ送信先がある場合は、そのコンテンツノードに対し、コンテンツ検索メッセージを送信し、ステップＳ−Ａ１１に移行する。一方フィンガーテーブルデータベースを参照し効率のよいコンテンツ検索メッセージ送信先がない場合、すなわち複数のリング修復オプションの付いたコンテンツ検索メッセージについて自コンテンツノードが最適な受信者であった場合、コンテンツ検索メッセージ送信元のコンテンツノードのＩＤ番号を比較し、自コンテンツノードのＩＤ番号よりも大きくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。それ以外のコンテンツ検索メッセージについては全て破棄する。
【０１３４】
（８）ステップＳ−Ａ１５
ステップＳ−Ａ１４で決定したコンテンツノードに対し、キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送信する。
【０１３５】
（９）ステップＳ−Ｂ１１
離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを送信する。
【０１３６】
（１０）ステップＳ−Ｂ１２
一定時間以内にキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信した場合は、ステップＳ−Ｃ１１に移行する。それ以外はステップＳ−Ｂ３に移行する。
【０１３７】
（１１）ステップＳ−Ｂ１３
離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージを再送する。
【０１３８】
（１２）ステップＳ−Ｂ４
一定時間以内にキープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを受信した場合は、ステップＳ−Ｃ１に移行する。それ以外はステップＳ−Ｂ５に移行する。
【０１３９】
（１３）ステップＳ−Ｂ１５
フィンガーテーブルデータベースを参照し、自コンテンツノードのＩＤ番号よりも小さくかつ、最も近いＩＤ番号を持つコンテンツノードから順に接続を試みる。接続が成功した場合はステップＳ−Ｃ１１に移行する。接続できなかった場合は再度フィンガーテーブルデータベースを参照し、接続可能なコンテンツノードが見つかるまで上記動作を繰り返した後、ステップＳ−Ｃ１１に移行する。
【０１４０】
（１４）ステップＳ−Ｃ１
キープアライブ（ｋｅｅｐ  ａｌｉｖｅ）メッセージを送受信し、コード（Ｃｈｏｒｄ）リングを修復する。ステップＳ−１に移行する。
【０１４１】
本実施の形態の動作について、ステップＳ−Ｂ１１からステップＳ−Ｂ１４までにおいて、離脱したコンテンツノードを検索するリング修復オプションを付けたコンテンツ検索メッセージの再送を１度しか実施していないが、再送回数は１回とは限らず、ネットワーク状態により再送を複数回実施することもできる。
【０１４２】
（第２の実施の形態の効果）
次に、本実施の形態の効果について説明する。
【０１４３】
本実施の形態によれば、コード（Ｃｈｏｒｄ）リングをコンテンツオリエンテッドな構成にし、コード（Ｃｈｏｒｄ）リングにはコンテンツノードが参加することによって、各ノードにコンテンツの場所情報を登録する必要をなくし、さらにあるノードが離脱しコンテンツノードがコード（Ｃｈｏｒｄ）リングから離脱した場合に、離脱したコンテンツノードの下流側のコンテンツノードが離脱したコンテンツノードの上流側コンテンツノードを検索し、両者を結びつけコード（Ｃｈｏｒｄ）リングを修復することによって、ノードに冗長に情報を持たせることなく、任意のノードが離脱した時にリングが修復することができる。
【０１４４】
また、本実施の形態によれば、例えばＰ２Ｐ−ＳＩＰ（Ｓｅｓｓｉｏｎ  Ｉｎｉｔｉａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）において、ＳＩＰ−ＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）をコンテンツとしてＳＩＰ−ＵＲＩをハッシュ関数に適用した結果をコンテンツＩＤとしてＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスと共にコード（Ｃｈｏｒｄ）リングに登録しておき、通信する場合はＳＩＰ−ＵＲＩをキーにＩＰアドレスをコード（Ｃｈｏｒｄ）リング上で検索することによって、電話で通話を行う場合のように端末同士を繋げる場合にも、上記本実施の形態の効果を達成することができる。
【０１４５】
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。
【０１４６】
図９を参照すると、本実施の形態は、本発明の第１の実施の形態と同様に、送受信部１と、コンテンツノード機能部２と、コンテンツノード生成機能部  ３と、コンテンツノード削除機能部４と、コンテンツノード検索機能部５と、コンテンツデータベース６と、フィンガーテーブルデータベース７を有する。
【０１４７】
更に、本実施の形態は、通信システム用プログラム８を有する。
【０１４８】
分散認証システム用プログラム８は、送受信部１と、コンテンツノード機能部２と、コンテンツノード生成機能部３と、コンテンツノード削除機能部４と、コンテンツノード検索機能部５と、コンテンツデータベース６と、フィンガーテーブルデータベース７と、に読み込まれ送受信部１と、コンテンツノード機能部２と、コンテンツノード生成機能部３と、コンテンツノード削除機能部４と、コンテンツノード検索機能部５と、コンテンツデータベース６と、フィンガーテーブルデータベース７の動作を制御する。送受信部１と、コンテンツノード機能部２と、コンテンツノード生成機能部３と、コンテンツノード削除機能部４と、コンテンツノード検索機能部５と、コンテンツデータベース６と、フィンガーテーブルデータベース７は、通信システム用プログラム８の制御により第１の実施の形態における通信システムによる処理と同一の処理を実行する。
【０１４９】
ここで、ノード１００のハードウェア構成の説明をする。
【０１５０】
図１０は、本実施の形態による通信システムのノード１００のハードウェア構成例を示すブロック図である。
【０１５１】
図１０を参照すると、本発明によるノード１００は、一般的なコンピュータ装置と同様のハードウェア構成によって実現することができ、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１００１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメインメモリであり、データの作業領域やデータの一時退避領域に用いられる主記憶部１００２、インターネット２０００を介してデータの送受信を行う通信制御部１００３、液晶ディスプレイ、プリンタやスピーカ等の提示部１００４、キーボードやマウス等の入力部１００５、周辺機器と接続してデータの送受信を行うインタフェース部１００６、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、磁気ディスク、半導体メモリ等の不揮発性メモリから構成されるハードディスク装置である補助記憶部１００７、本情報処理装置の上記各構成要素を相互に接続するシステムバス１００８等を備えている。
【０１５２】
本発明によるノード１００は、その動作を、ノード１００内部にそのような機能を実現するプログラムを組み込んだ、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等のハードウェア部品からなる回路部品を実装してハードウェア的に実現することは勿論として、上記した各構成要素の各機能を提供するプログラムを、コンピュータ処理装置上のＣＰＵ１００１で実行することにより、ソフトウェア的に実現することができる。
【０１５３】
すなわち、ＣＰＵ１００１は、補助記憶部１００７に格納されている分散認証システム用プログラム８を、主記憶部１００２にロードして実行し、ノード１００の動作を制御することにより、上述した各機能をソフトウェア的に実現する。
【０１５４】
（第３の実施の形態の効果）
次に、本実施の形態の効果について説明する。
【０１５５】
本実施の形態によれば、本発明の第１及び第２の実施の形態の効果と同様の効果を得るために、通信システム用プログラムである分散認証システム用プログラム８を用いることによりコンピュータを通信システムとして動作させることができる。
【実施例１】
【０１５６】
実施例１において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０１５７】
図１１は、ノード１００又はコンテンツノードがリングネットワークから離脱した場合のリングネットワーク修復の動作例を示すフローチャートであり、図１２は、当該動作例の状態遷移を示す図である。
【０１５８】
前提として、ノードＩＤ１３、１６、３７、４２のノード（以下、ノード（１３、１６、３７、４２）のように記載）が、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０１５９】
図１３に、ノード（１３、１６、３７、４２）が離脱した状態のフィンガーテーブルを示す。なお、図１３において、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示す。
【０１６０】
図１１〜図１３を参照すると、それぞれ上流のノードが切れたノード（１８、４８）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０１６１】
すなわち、ノード（１８）は、当該メッセージをノード（５２）に送信してノード（１６）を検索し、また、ノード（４８）は、当該メッセージをノード（１６）に送信しても応答が無いため、当該メッセージをｉエントリの値が次に大きいノード（２）に送信してノード（４２）を検索する。
【０１６２】
また、ステップＳ２０１において、それぞれ下流のノードが切れたノード（３３、８）は、当該メッセージ待ち状態に移行する。
【０１６３】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０１６４】
すなわち、ノード（５２）は、ノード（１８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１６）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（１６）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（８））に対して、コンテンツ検索メッセージを転送する。ノード（８）は、ノード（５２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１６）を超えない最大のノード（１３）に対してコンテンツ検索メッセージを転送しても失敗するため、検索対象のノード（１６）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１６５】
一方、ノード（２）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送すると失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（１８）に対して、コンテンツ検索メッセージを転送する。ノード（１８）は、ノード（２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送すると失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（２７）に対して、コンテンツ検索メッセージを転送する。ノード（２７）は、ノード（１８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送すると失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（３３）に対して、コンテンツ検索メッセージを転送する。ノード（３３）は、ノード（２７）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１６６】
次いで、エラーメッセージの受信待機状態の当該ノード（８、３３）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０１６７】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（８）はノード（１８）と再接続し、ノード（３３）はノード（４８）と再接続することによって、リングネットワークが修復する。
【実施例２】
【０１６８】
実施例２において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０１６９】
図１４は、当該動作例の状態遷移を示す図である。
【０１７０】
前提として、実施例１の状態に加え、ノード（１８）も、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０１７１】
図１５に、ノード（１３、１６、１８、３７、４２）が離脱した状態のフィンガーテーブルを示す。なお、図１５において、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示す。
【０１７２】
図１１、図１４及び図１５を参照すると、それぞれ上流のノードが切れたノード（２２、４８）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０１７３】
すなわち、ノード（２２）は、当該メッセージをノード（５６）に送信してノード（１８）を検索し、また、ノード（４８）は、当該メッセージをノード（１６）に送信しても応答が無いため、当該メッセージをｉエントリの値が次に大きいノード（２）に対して送信してノード（４２）を検索する。
【０１７４】
また、ステップＳ２０１において、それぞれ下流のノードが切れたノード（３３、８）は、当該メッセージ待ち状態に移行する。
【０１７５】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０１７６】
すなわち、ノード（５６）は、ノード（２２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１６）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（１６）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（８））に対して、コンテンツ検索メッセージを転送する。ノード（８）は、ノード（５６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１６）を超えない最大のノード（１３）に対してコンテンツ検索メッセージを転送しても失敗するため、検索対象のノード（１６）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１７７】
一方、ノード（２）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送すると失敗し、ノード（４２）を超えないｉエントリの値が次に大きいノード（１８）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（４２）を超えないｉエントリの値が次に大きいノード（１３）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（８）に対して、コンテンツ検索メッセージを転送する。ノード（８）は、ノード（２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（２７）に対してコンテンツ検索メッセージを転送する。ノード（２７）は、ノード（８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送すると失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（３３）に対して、コンテンツ検索メッセージを転送する。ノード（３３）は、ノード（２７）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送をしても失敗するため、ノード（４２）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１７８】
次いで、エラーメッセージの受信待機状態の当該ノード（８、３３）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０１７９】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（８）はノード（２２）と再接続し、ノード（３３）はノード（４８）と再接続することによって、リングネットワークが修復する。
【実施例３】
【０１８０】
実施例３において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０１８１】
図１６は、当該動作例の状態遷移を示す図である。
【０１８２】
前提として、ノード（２７、３０、３７、４２）が、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０１８３】
図１７に、ノード（２７、３０、３７、４２）が離脱した状態のフィンガーテーブルを示す。なお、図１７において、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示す。
【０１８４】
図１１、図１６及び図１７を参照すると、それぞれ上流のノードが切れたノード（３３、４８）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０１８５】
すなわち、ノード（３３）は、当該メッセージをノード（２）に送信してノード（３０）を検索し、また、ノード（４８）は、当該メッセージをノード（１６）に送信してノード（４２）を検索する。
【０１８６】
また、ステップＳ２０１において、それぞれ下流のノードが切れたノード（２２、３３）は、当該メッセージ待ち状態に移行する。
【０１８７】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０１８８】
すなわち、ノード（２）は、ノード（３３）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３０）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（１８））に対して、コンテンツ検索メッセージを転送する。ノード（１８）は、ノード（２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノード（２７）に対してコンテンツ検索メッセージを転送しても失敗するため、検索対象のノード（３０）を超えないｉエントリの値が次に大きいノード（２２）に対して、コンテンツ検索メッセージを転送する。ノード（２２）は、ノード（１８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノード（２７）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（３０）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１８９】
一方、ノード（１６）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（４２）を超えない最大のノード（３３）に対してコンテンツ検索メッセージを転送する。ノード（３３）は、ノード（１６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（３０）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０１９０】
次いで、エラーメッセージの受信待機状態の当該ノード（２２、３３）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０１９１】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（２２）はノード（３３）と再接続し、ノード（３３）はノード（４８）と再接続することによって、リングネットワークが修復する。
【実施例４】
【０１９２】
実施例４において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０１９３】
図１８は、当該動作例の状態遷移を示す図である。
【０１９４】
前提として、ノード（２、３、１６、１８、２７、３０、３７、４２、５２）が、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０１９５】
図１９に、ノード（２、３、１６、１８、２７、３０、３７、４２、５２）が離脱した状態のフィンガーテーブルを示す。なお、図１９において、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示し、太字下線の部分はフィンガーテーブルを更新した箇所を示す。
【０１９６】
図１１、図１８及び図１９を参照すると、それぞれ上流のノードが切れたノード（８、２２、３３、４８）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０１９７】
すなわち、ノード（８）は、自身のフィンガーテーブル上、検索対象のノード（３）を超えないノード（４２、２７、１６）に対してコンテンツ検索メッセージを転送しても失敗するため、当該メッセージをｉエントリの値が次に大きいノード（１３）に送信してノード（３）を検索する。また、ノード（２２）は、当該メッセージをノード（５６）に送信してノード（１８）を検索する。また、ノード（３３）は、自身のフィンガーテーブル上、検索対象のノード（３０）を超えないノード（２、５２、４２、３７）に対してコンテンツ検索メッセージを転送しても失敗するため、検索対象のノード（３０）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。また、ノード（４８）は、自身のフィンガーテーブル上、検索対象のノード（４２）を超えないノード（１６、２）に対してコンテンツ検索メッセージを転送しても失敗するため、当該メッセージをｉエントリの値が次に大きいノード（５６）に送信してノード（４２）を検索する。
【０１９８】
また、ステップＳ２０１において、それぞれ下流のノードが切れたノード（１３、２２、３３、６１）は、当該メッセージ待ち状態に移行する。
【０１９９】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０２００】
すなわち、ノード（１３）は、ノード（８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（４８））に対して、コンテンツ検索メッセージを転送する。ノード（４８）は、ノード（１３）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（３）を超えない最大のノード（２）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（３）を超えないｉエントリの値が次に大きいノード（５６）に対して、コンテンツ検索メッセージを転送する。ノード（５６）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（３）を超えない最大のノード（２）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（３）を超えないｉエントリの値が次に大きいノード（６１）に対して、コンテンツ検索メッセージを転送する。ノード（６１）は、ノード（５６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３）を超えない最大のノード（２）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（３）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０２０１】
また、ノード（５６）は、ノード（２２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１８）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（１８）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（８））に対して、コンテンツ検索メッセージを転送する。ノード（８）は、ノード（５６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１８）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（１８）を超えない最大のノード（１６）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（１８）を超えないｉエントリの値が次に大きいノード（１３）に対して、コンテンツ検索メッセージを転送する。ノード（１３）は、ノード（８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１８）を超えない最大のノード（１６）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（１８）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０２０２】
さらに、ノード（５６）は、ノード（２２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（２７）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノードＩＤのノード（ノード（８））に対して、コンテンツ検索メッセージを転送する。ノード（８）は、ノード（５６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（２７）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（４２）を超えないｉエントリの値が次に大きいノード（１６）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（１３）に対して、コンテンツ検索メッセージを転送する。ノード（１３）は、ノード（８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノード（３０）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えないｉエントリの値が次に大きいノード（２２）に対して、コンテンツ検索メッセージを転送する。ノード（２２）は、ノード（１３）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないが、ノード（４２）を超えない最大のノード（３０）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（４２）を超えないｉエントリの値が次に大きいノード（２７）に対してコンテンツ検索メッセージを転送しても失敗するため、ノード（４２）を超えない最大のノードが自身であり自身が最適受信者となることから、エラーメッセージの受信を待機する状態となる。
【０２０３】
次いで、エラーメッセージの受信待機状態の当該ノード（６１、１３、３３、２２）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０２０４】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（６１）はノード（８）と再接続し、ノード（１３）はノード（２２）と再接続し、ノード（２２）はノード（４８と再接続することによって、リングネットワークが修復するが、ノード（３３）はいずれのノードからもコンテンツ検索メッセージが送信されないためダウンする。
【０２０５】
このため、実施例４の通信ネットワークは、ノード（８、１３、２２、４８、５６、６１）によってリングネットワークを再構成する。
【０２０６】
なお、ノード（４８）とノード（５６）の間は、ノード（５２）がひとつ落ちた状態で、通常シーケンスによって接続を維持する（図６参照）。
【実施例５】
【０２０７】
実施例５において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０２０８】
図２０は、当該動作例の状態遷移を示す図である。
【０２０９】
前提として、ノード（３、８、１３、１８、２７、３０、３７、４２、５２、５６、６１）が、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０２１０】
図２１に、ノード（３、８、１３、１８、２７、３０、３７、４２、５２、５６、６１）が離脱した状態のフィンガーテーブルを示す。なお、図２１において、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示し、太字下線の部分はフィンガーテーブルを更新した箇所を示す。
【０２１１】
図１１、図２０及び図２１を参照すると、それぞれ上流のノードが切れたノード（２、１６、３３、４８）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０２１２】
すなわち、ノード（１６）は、自身のフィンガーテーブル上、検索対象のノード（１３）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（１３）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（４８））に対して当該メッセージを送信してノード（１３）を検索する。また、ノード（３３）は、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３０）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（２））に対して当該メッセージを送信してノード（３０）を検索する。また、ノード（４８）は、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（４２）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（１６））に対して当該メッセージを送信してノード（４２）を検索する。また、ノード（２）は、自身のフィンガーテーブル上、検索対象のノード（６１）を超えないノード（３７、１８、１３、８、３）に対してコンテンツ検索メッセージを転送しても失敗するため、検索対象のノード（６１）を超えない最大のノードが自身であり自身が最適受信者となるため、エラーメッセージの受信を待機する状態となる。
【０２１３】
また、ステップＳ２０１において、それぞれ下流のノードが切れたノード（２、２２、３３、４８）は、当該メッセージ待ち状態に移行する。
【０２１４】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０２１５】
すなわち、ノード（４８）は、ノード（１６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１３）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（１３）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（２））に対して、コンテンツ検索メッセージを転送する。ノード（２）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（１３）を超えない最大のノード（８）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（１３）を超えないｉエントリの値が次に大きいノード（３）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（１３）を超えない最大のノードが自身であり自身が最適受信者となることから、エラーメッセージの受信を待機する状態となる。
【０２１６】
また、ノード（１６）は、ノード（４８）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（４２）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（３３））に対して、コンテンツ検索メッセージを転送する。ノード（３３）は、ノード（１６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（４２）を超えない最大のノード（３７）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（４２）を超えない最大のノードが自身であり自身が最適受信者となることから、エラーメッセージの受信を待機する状態となる。
【０２１７】
次いで、エラーメッセージの受信待機状態の当該ノード（２、３３）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０２１８】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（２）がノード（１６）と再接続し、ノード（３３）がノード（４８）と再接続することによって、リングネットワークが修復する。
【０２１９】
ここで、最適受信者のノード（２）は、ノード（１６）を送信元とするコンテンツ検索メッセージと、ノード（３３）を送信元とするコンテンツ検索メッセージと受信するが、ノードＩＤの値がより小さいノード（１６）を送信元とするコンテンツ検索メッセージを優先し、ノード（３３）を送信元とするコンテンツ検索メッセージを破棄するため、ノード（１６）と再接続している。
【０２２０】
なお、ノード（１６）とノード（２２）の間は、ノード（１８）がひとつ落ちた状態で、通常シーケンスによって接続を維持する（図６参照）。
【実施例６】
【０２２１】
実施例６において、第１の実施の形態によるリングネットワーク修復の１動作例をより詳細に説明する。
【０２２２】
図２２は、当該動作例の状態遷移を示す図である。
【０２２３】
前提として、実施例５と比較し、リングネットワーク上に元々ノード（３、８、１３、１８、３７、４２）が参加しておらず、ノード（２７、３０、５２、５６、６１）が、リングネットワークを離脱する旨（終了メッセージ）を他のノードに対して通知することなく離脱したものとする。
【０２２４】
図２３に、リングネットワーク上に元々ノード（３、８、１３、１８、３７、４２）が参加しておらず、ノード（２７、３０、５２、５６、６１）が離脱した状態のフィンガーテーブルを示す。なお、図２３において、ドット部分はリングネットワーク上に元々参加していないノードのノードＩＤを示し、空欄部分は離脱したノードのノードＩＤを示し、斜線部分はコンテンツ検索メッセージの転送に失敗した箇所を示し、太字下線の部分はフィンガーテーブルを更新した箇所を示す。
【０２２５】
図１１、図２２及び図２３を参照すると、それぞれ上流のノードが切れたノード（２、３３）は、離脱した右隣のノードを検索対象とし、自身のフィンガーテーブル上、ｉエントリの値が最も大きいノードＩＤのノードに対して、エラーメッセージ（ＩＰアドレス付き）を付加したコンテンツ検索メッセージ（エラー付き検索メッセージ）を送信して検索を実施する（ステップＳ１０１）。
【０２２６】
すなわち、ノード（２）は、自身のフィンガーテーブル上、検索対象のノード（６１）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（６１）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（１６）＝Ｓノード）に対して当該メッセージを送信してノード（６１）を検索する。また、ノード（３３）は、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３０）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（２））に対して当該メッセージを送信してノード（３０）を検索する。
【０２２７】
次いで、当該メッセージを受け取ったノードは、通常の検索シーケンスに従って当該メッセージを転送する（ステップＳ１０２）。
【０２２８】
すなわち、ノード（１６）は、ノード（２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（６１）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（６１）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（４８））に対して、コンテンツ検索メッセージを転送する。ノード（４８）は、ノード（１６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（６１）を超えない最大のノード（５２）に対してコンテンツ検索メッセージを転送しても失敗し、ノード（６１）を超えない最大のノードが自身であり自身が最適受信者となることから、エラーメッセージの受信を待機する状態となる。
【０２２９】
また、ノード（２）は、ノード（３３）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３０）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（１６）＝Ｓノード）に対して当該メッセージを送信する。ノード（１６）は、ノード（２）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身ではないことから自身が最適受信者ではないため、ノード（３０）を超えないｉエントリの値が最も大きいノードＩＤのノード（ノード（２２））に対して、コンテンツ検索メッセージを転送する。ノード（２２）は、ノード（１６）からコンテンツ検索メッセージを受信すると、自身のフィンガーテーブル上、検索対象のノード（３０）を超えない最大のノードが自身であり自身が最適受信者となることから、エラーメッセージの受信を待機する状態となる。
【０２３０】
次いで、エラーメッセージの受信待機状態の当該ノード（４８、２２）は、一定時間エラーメッセージを受信しない場合、それぞれコンテンツ検索メッセージの送信元のノードと再接続する（ステップＳ１０３）。
【０２３１】
すなわち、一定時間エラーメッセージを受信しない場合、ノード（４８）がノード（２）と再接続し、ノード（２２）がノード（３３）と再接続することによって、リングネットワークが修復する。
【実施例７】
【０２３２】
実施例７において、第１の実施の形態によるリングネットワークにノードを追加する際の１動作例を詳細に説明する。
【０２３３】
図２４は、実施例７におけるリングネットワークの初期構成を示す図である。
【０２３４】
図２４を参照すると、前提として、ノード（３、１０、１４、２９、３３、４８）が、リングネットワークに参加している。
【０２３５】
図２５は、実施例７による各ノードが有するフィンガーテーブルデータベース７をまとめて示した図である。
【０２３６】
すなわち、図２５を参照すると、各ノードについて、各ノードの前後のノードのノードＩＤ及びＩＰアドレスと、ｉエントリ毎のノードＩＤ及びＩＰアドレスが示されている。
【０２３７】
ここで、ブートストラップノードのノードＩＤをノード（３）として、ノード（４０）をリングネットワークに追加した際の動作を説明する。
【０２３８】
図２６は、実施例７によるノードを追加した際の動作を示すシーケンス図であり、図２７及び図２８は、ノードを追加した際の概略を説明する図である。
【０２３９】
ステップＳ２０１・ＦＩＮＤＲＯＵＴＥ：ノードＩＤ４０がノードＩＤ３に対してノードＩＤ４０のノードＩＤ及びＩＰアドレスを通知する。
【０２４０】
ステップＳ２０２・：ノードＩＤ３がノードＩＤ４０に対して応答する。
【０２４１】
ステップＳ２０３・ＴＥＳＴＲＡＮＧＥ：ノードＩＤ３が、ノードＩＤ３のフィンガーテーブルに基づいて決定した宛先によって、ノードＩＤ２９に対してノードＩＤ４０のＳノードの情報を要求する。
【０２４２】
ステップＳ２０４・ＮＯＴＩＮＲＡＮＧＥ：ノードＩＤ２９が、ノードＩＤ２９のフィンガーテーブルに基づいて決定したノードＩＤ３３のＩＰアドレスを、ノードＩＤ３に対して通知する。
【０２４３】
ステップＳ２０５・ＴＥＳＴＲＡＮＧＥ：ノードＩＤ３が、ノードＩＤ３３に対してノードＩＤ４０のＳノードの情報を要求する。
【０２４４】
ステップＳ２０６・ＩＮＲＡＮＧＥ：ノードＩＤ３３が、ノードＩＤ３３のフィンガーテーブルに基づいて決定したノードＩＤ４８のＩＰアドレスを、ノードＩＤ３に対して通知する。
【０２４５】
ステップＳ２０７・：ノードＩＤ３が、ノードＩＤ４８のＩＰアドレスを、ノードＩＤ４０に対して通知する。
【０２４６】
ステップＳ２０８・：ノードＩＤ４０がノードＩＤ３に対して応答する。
【０２４７】
ステップＳ２０９・ＮＯＴＩＦＹ：ノードＩＤ４０が、ノードＩＤ４０のＩＰアドレスを、ノードＩＤ４８に対して通知する。
【０２４８】
ステップＳ２１０・：ノードＩＤ４８が、ノードＩＤ４８のデータを、ノードＩＤ４０に対して通知する。
【０２４９】
ステップＳ２１１・ＮＯＴＩＦＹ：ノードＩＤ４０が、ノードＩＤ４０のＩＰアドレスを、ノードＩＤ３３に対して通知する。
【０２５０】
ステップＳ２１２・：ノードＩＤ３３が、ノードＩＤ３３のデータを、ノードＩＤ４０に対して通知する。
【０２５１】
このように、リングネットワークに新たに参加するノードＩＤ４０は、隣接ノードのデータ全てを通知してもらう。なお、隣接ノードのみ保証される。
【０２５２】
ノード（４０）が新たに参加することで、既に参加しているノードは隣のノードとのリンクが切れる場合があるが、上記動作によって、ネットワークを修復できる。
【０２５３】
図２９に、上記動作終了後のノードＩＤ４０、ノードＩＤ４０に隣接するノードＩＤ３３及びノードＩＤ４８のフィンガーテーブルを示す。太字下線の部分が更新された箇所である。
【０２５４】
図３０に、上記動作終了後のノードＩＤ４０、ノードＩＤ４０に隣接するノードＩＤ３３及びノードＩＤ４８のより詳細なデータを示す。
【０２５５】
図３０に示すように、各ノードは自分自身のノード情報の他にＰノード及びＳノードのノード情報を持つ。
【０２５６】
以上好ましい実施の形態をあげて本発明を説明したが、本発明は必ずしも、上記実施の形態に限定されるものでなく、その技術的思想の範囲内において様々に変形して実施することができる。
【図面の簡単な説明】
【０２５７】
【図１】本発明の第１の実施の形態による通信システムの物理的構成を示す概略図である。
【図２】第１の実施の形態の形態による通信システムの論理的構成を示す概略図である。
【図３】第１の実施の形態によるノードの構成を示すブロック図である。
【図４】による各ノードが有するフィンガーテーブルデータベース７をまとめて示した図である。
【図５】第１の実施の形態によるステイビライゼイション動作を示すシーケンス図である。
【図６】第１の実施の形態によるノード又はコンテンツノードがリングネットワークから離脱した際のステイビライゼイション動作を示すシーケンス図である。
【図７】第１の実施の形態によるノード１００又はコンテンツノードがリングネットワークから離脱した場合のリングネットワーク修復のより詳細な動作例を示すフローチャートである。
【図８】本発明の第２の実施の形態による通信システムの動作を示すフローチャートである。
【図９】本発明の第３の実施の形態によるノードの構成を示すブロック図である。
【図１０】第３の実施の形態による通信システムのノード１００のハードウェア構成例を示すブロック図である。
【図１１】本発明の実施例１のノード１００又はコンテンツノードがリングネットワークから離脱した場合のリングネットワーク修復の動作例を示すフローチャートである。
【図１２】実施例１のリングネットワーク修復の動作例の状態遷移を示す図である。
【図１３】実施例１のノード（１３、１６、３７、４２）が離脱した状態のフィンガーテーブルを示す図である。
【図１４】本発明の実施例２のリングネットワーク修復の動作例の状態遷移を示す図である。
【図１５】実施例２のノード（１３、１６、１８、３７、４２）が離脱した状態のフィンガーテーブルを示す図である。
【図１６】本発明の実施例３のリングネットワーク修復の動作例の状態遷移を示す図である。
【図１７】実施例３のノード（２７、３０、３７、４２）が離脱した状態のフィンガーテーブルを示す図である。
【図１８】本発明の実施例４のリングネットワーク修復の動作例の状態遷移を示す図である。
【図１９】実施例４のノード（２、３、１６、１８、２７、３０、３７、４２、５２）が離脱した状態のフィンガーテーブルを示す図である。
【図２０】本発明の実施例５のリングネットワーク修復の動作例の状態遷移を示す図である。
【図２１】実施例５のノード（３、８、１３、１８、２７、３０、３７、４２、５２、５６、６１）が離脱した状態のフィンガーテーブルを示す図である。
【図２２】本発明の実施例６のリングネットワーク修復の動作例の状態遷移を示す図である。
【図２３】実施例６のリングネットワーク上に元々ノード（３、８、１３、１８、３７、４２）が参加しておらず、ノード（２７、３０、５２、５６、６１）が離脱した状態のフィンガーテーブルを示す図である。
【図２４】本発明の実施例７のリングネットワークの初期構成を示す図である。
【図２５】実施例７による各ノードが有するフィンガーテーブルデータベース７をまとめて示した図である。
【図２６】実施例７によるノードを追加した際の動作を示すシーケンス図である。
【図２７】実施例７によるノードを追加した際の概略を説明する図である。
【図２８】実施例７によるノードを追加した際の概略を説明する図である。
【図２９】実施例７によるノード追加動作終了後のノードＩＤ４０、ノードＩＤ４０に隣接するノードＩＤ３３及びノードＩＤ４８のフィンガーテーブルを示す図である。
【図３０】実施例７によるノード追加動作終了後のノードＩＤ４０、ノードＩＤ４０に隣接するノードＩＤ３３及びノードＩＤ４８のより詳細なデータを示す図である。
【符号の説明】
【０２５８】
１００：ノード
１：送受信部１
２：コンテンツノード機能部２
２１：ＤＨＴ参加機能部
２２：ＤＨＴ検索機能部
２３：ＤＨＴ管理部
３：コンテンツノード生成機能部３
４：コンテンツノード削除機能部４
５：コンテンツノード検索機能部５
６：コンテンツデータベース６
７：フィンガーテーブルデータベース７
８：通信システム用プログラム８
１００１：ＣＰＵ
１００２：主記憶部
１００３：通信制御部
１００４：提示部
１００５：入力部
１００６：インタフェース部
１００７：補助記憶部
１００８：システムバス
２０００：インターネット
【図１】
2008276551.tif 000003
【図２】
2008276551.tif 000004
【図３】
2008276551.tif 000005
【図４】
2008276551.tif 000006
【図５】
2008276551.tif 000007
【図６】
2008276551.tif 000008
【図７】
2008276551.tif 000009
【図８】
2008276551.tif 000010
【図９】
2008276551.tif 000011
【図１０】
2008276551.tif 000012
【図１１】
2008276551.tif 000013
【図１２】
2008276551.tif 000014
【図１３】
2008276551.tif 000015
【図１４】
2008276551.tif 000016
【図１５】
2008276551.tif 000017
【図１６】
2008276551.tif 000018
【図１７】
2008276551.tif 000019
【図１８】
2008276551.tif 000020
【図１９】
2008276551.tif 000021
【図２０】
2008276551.tif 000022
【図２１】
2008276551.tif 000023
【図２２】
2008276551.tif 000024
【図２３】
2008276551.tif 000025
【図２４】
2008276551.tif 000026
【図２５】
2008276551.tif 000027
【図２６】
2008276551.tif 000028
【図２７】
2008276551.tif 000029
【図２８】
2008276551.tif 000030
【図２９】
2008276551.tif 000031
【図３０】
2008276551.tif 000032