(57)【要約】  複数のノード装置を含むネットワーク中のノード装置は、クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納するＴＴＬ格納部と、前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信する受信部と、前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定するシーケンス番号判定部と、第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うＴＴＬ減算部と、前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すクラスタ情報更新部と、を含むことを特徴とする。
2013171868.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード装置を含むネットワーク中のノード装置であって、
前記ネットワーク中の前記複数のノード装置の中で、前記ノード装置が前記ネットワーク中の情報伝達のための経路に関する経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報を格納するクラスタ情報格納部と、
前記クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納するＴＴＬ格納部と、
前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信する受信部と、
前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定するシーケンス番号判定部と、
前記シーケンス番号判定部における判定で、第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うＴＴＬ減算部と、
前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すクラスタ情報更新部と、
を含むノード装置。
【請求項２】
さらに、
前記クラスタ情報格納部に格納されているクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報と、前記ノード装置自身に対して整数値として定義されるシーケンス番号に関する情報を参照して、ハローパケットを生成するハローパケット生成部と、
前記ハローパケット生成部で生成されたハローパケットを送信する送信部と、
を含み
クラスタ情報格納部は、前記ノード装置自身に対する前記シーケンス番号を格納し、前記ノード装置自身に対する前記シーケンス番号は前記送信部からハローパケットが送信される毎に更新される、請求項１に記載のノード装置。
【請求項３】
前記ノード装置が前記起点ノードであるとき、前記ＴＴＬ格納部は、前記クラスタ内に含まれる前記ノード自身以外のノード装置のＴＴＬ値を格納する、請求項１または２に記載のノード装置。
【請求項４】
前記ノード装置が前記起点ノードではないとき、前記ＴＴＬ格納部は、前記ノード自身が含まれるクラスタの前記起点ノードのＴＴＬ値を格納する、請求項１乃至３のいずれか一項に記載のノード装置。
【請求項５】
前記クラスタ情報更新部は、前記ノード装置自身が前記起点ノードであるとき、前記クラスタ内に含まれる前記ノード自身以外のノード装置である参加ノードに対するＴＴＬ値が所定の値以下であるとき、前記参加ノードの識別子を前記クラスタ情報格納部から削除する、請求項１乃至４のいずれか一項に記載のノード装置。
【請求項６】
前記クラスタ情報更新部は、前記第１のノード装置が前記起点ノードであるとき、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値以上であれば、前記第１のノード装置以外で前記クラスタに含まれるノード装置を前記起点ノードとして再定義することによって、前記クラスタを再生し、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値未満であれば、前記クラスタに含まれるノード装置をいかなるクラスタにも含まれないフリーノード装置として前記クラスタを開放する、請求項１乃至５のいずれか一項に記載のノード装置。
【請求項７】
ネットワーク中の前記複数のノード装置の中で、前記ノード装置が前記ネットワーク中の情報伝達のための経路に関する経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報を格納することと、
前記クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納することと、
前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信することと、
前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定することと、
第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うこと（Ｓ３３６）と、
前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すことと
を含む通信方法。
【請求項８】
さらに、
クラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報と、前記ノード装置自身に対して整数値として定義されるシーケンス番号に関する情報を参照して、ハローパケットを生成することと、
前記ハローパケット生成部で生成されたハローパケットを送信することと、
を含み
前記ノード装置自身に対する前記シーケンス番号はハローパケットが送信される毎に更新される、請求項７に記載の通信方法。
【請求項９】
さらに、前記ノード装置自身が前記起点ノードであるとき、前記クラスタ内に含まれる前記ノード自身以外のノード装置である参加ノードに対するＴＴＬ値が所定の値以下であるとき、前記参加ノードの識別子を前記クラスタ情報格納部から削除することを含む、請求項７または８に記載の通信方法。
【請求項１０】
前記クラスタ情報更新部は、前記第１のノード装置が前記起点ノードであるとき、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値以上であれば、前記第１のノード装置以外で前記クラスタに含まれるノード装置を前記起点ノードとして再定義することによって、前記クラスタを再生し、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値未満であれば、前記クラスタに含まれるノード装置をいかなるクラスタにも含まれないフリーノード装置として前記クラスタを開放することを含む、請求項７乃至９のいずれか一項に記載の通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードを含むネットワークで用いられるネットワーク装置および通信方法に関する。
【背景技術】
【０００２】
アドホックネットワークシステムでは、アドホックネットワーク通信端末（ノード装置、または単にノードとも呼ばれる）同士が自律的にネットワーク接続し、相互の通信を可能としている。「自律的に」という言葉は、使用者によって随時通信経路を設定したり、サーバやルータの通信管理を行う専用の通信端末やインフラを必要としない、ということを意味する。【０００３】
アドホックネットワークのルーティングプロトコル（アドホックプロトコル）には、リアクティブ型のＡｄｈｏｃ  Ｏｎ  Ｄｅｍａｎｄ  Ｄｉｓｔａｎｃｅ  Ｖｅｃｔｏｒ  Ａｌｇｏｒｉｔｈｍ（ＡＯＤＶ）やプロアクティブ型のＯｐｔｉｍｉｚｅｄ  Ｌｉｎｋ  Ｓｔａｔｅ  Ｒｏｕｔｉｎｇ（ＯＬＳＲ）が知られている。【０００４】
ＡＯＤＶでは、経路探索にブロードキャストを用いて、他の通信ノード装置がブロードキャストを繰り返し、目的のノード装置への経路を発見する手法である。通信ノード装置は、目標とする経路を発見するために周囲に「Ｒｏｕｔｅ  Ｒｅｑｕｅｓｔ（ＲＲＥＱ）」というパケットを送出する。このパケットには、検出目標の通信ノードＩＤが明記されている。【０００５】
周囲の通信ノード装置は、自身を検索していない場合は、新たにＲＲＥＱパケットを作成して、周囲へのブロードキャストを繰り返し行う。このとき各通信ノード装置は、送り先のメッセージが、隣接するどの通信ノード装置から受信されたものなのかを記録する。ＲＲＥＱメッセージが目的の通信ノードに達したとき、その目的の通信ノード装置は、「Ｒｏｕｔｅ  Ｒｅｐｌｙ（ＰＲＥＰ）」パケットを作成し、送り元のノードに対して、ＲＲＥＱパケットが送られてきた経路を辿るようにしてＰＲＥＰを送信する。こうすることによって、双方向の通信経路が作成される。【０００６】
ＯＬＳＲでは、通信ノード装置同士が定期的にパケットを交換し合うことで、ネットワーク全体を把握し、目的の通信ノードまでの経路を検出する。通信ノード装置は、周期的にＨｅｌｌｏパケットを送出し、互いにその存在を通知し合う。通信相手となる通信ノード装置の存在が判明したところで、次に効率的にネットワーク全体にパケットを配信するための、Ｍｕｌｔｉ  Ｐｏｉｎｔ  Ｒｅｌｅｙ（ＭＰＲ）と呼ばれるフラッディング用のパスを生成する。ＭＰＲにより、各通信ノード装置から効率よくパケットをネットワーク全体へブロードキャストすることができる。次にこのＭＰＲを用いて、経路生成メッセージであるＴｅｃｈｎｏｌｏｇｙ  Ｃｏｎｔｒｏｌ（ＴＣ）パケットをノード装置同士が互いに配信することで全ノード装置がネットワークトポロジーを知ることができる。パケットを目標とする通信ノード装置に送るには、送信元となる通信ノード装置自信が知っているネットワークトポロジーを参照し、送るべき隣接通信ノード装置にパケットを渡す。隣接ノードも同様に処理を行う、最終的に目標ノード装置にパケットを配信する。【０００７】
無線アドホックネットワークに属するノード装置は、ルーティング情報を伝播させるためにＨｅｌｌｏパケットを用いる。【０００８】
たとえば、アドホックネットワークは、ノード装置Ａとノード装置Ｂを含むとする。ノード装置Ａは、自身が保持しているルーティング情報を含むＨｅｌｌｏパケットを生成し、周期的にブロードキャストする。Ｈｅｌｌｏパケットを受信したノード装置Ｂは、ノード装置Ｂが保持しているルーティング情報と、Ｈｅｌｌｏパケットに含まれている情報を比較し、ノード装置Ｂが保持していなかったルーティング情報をＨｅｌｌｏパケットから取得する。さらに、ノード装置Ｂは、Ｈｅｌｌｏパケットから経路の品質情報も取得し、なるべく品質の良い経路を用いて通信を行う。このようにアドホックネットワークに属するノード装置は、Ｈｅｌｌｏパケットを用いて、ネットワークに含まれている他のノード装置への経路情報を学習し、最適経路を推測する。そして、推測された最適経路を用いて通信を行う。アドホックネットワークに含まれている各ノード装置は、アドホックネットワーク中の他の全てのノード装置までの経路をルーティングテーブル中に保持する。たとえば、ノード装置Ａは、アドホックネットワーク中のノード装置Ａ以外のノード装置の各々への経路情報をルーティングテーブルに保持する。このため、ノード装置Ａは、たとえば、ノード装置Ｂを介してノード装置Ｃにデータパケットを送信することができる。このようなノード装置は、パケットの最終宛先ごとに中継先とするノードについての重み情報を格納する重み付けテーブルを備えることもある。この場合、ノード装置は、パケットを転送する際に、パケットの宛先ノードに対応する重み付けテーブルを参照して、パケットを中継するために宛先とするノードを特定する。【０００９】
しかし、各ノード装置がアドホックネットワーク中の他の全てのノード装置までの経路をルーティングテーブル中に保持する方法では、ネットワーク中のノード装置の数が増加すると、ルーティングテーブルのサイズが大きくなる。そこで、ネットワーク中のノード装置をクラスタに分け、各ノード装置が同一のクラスタ内のノード装置までの経路情報をルーティングテーブルに格納する方法が知られている。【００１０】
ネットワーク中のノード装置からクラスタを生成する際に、制御パケットを用いる方法がある。たとえば、経路情報に基づいて各ノード装置が属するクラスタを決定し、クラスタに参加するときとクラスタから離脱するときに、制御パケットを送受信する。一般に、クラスタを形成する際には、クラスタ内のノードの数が所定の値を超えると、別のクラスタを生成する。【００１１】
また、制御パケットではなくＨｅｌｌｏパケットを用いる方法も知られている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１１−１９３３４１
【発明の概要】
【発明が解決しようとする課題】
【００１３】
アドホックネットワークシステムでは、運用中にクラスタ内のノードにハード故障、電波障害、電力停止等の障害が発生した場合、クラスタの機能障害を復旧する手段がないという問題がある。たとえば、クラスタ生成機能、クラスタ統合機能を正常に継続できないという問題がある。クラスタの機能障害が継続するとネットワーク全体でクラスタの数が増加し、ルーティング時のクラスタを跨ぐ数が多くなることから処理リソースを多く必要とし、スループットが低下するという問題がある。【００１４】
よって、クラスタ生成中に起点ノード（ゲートウェイ）や参加ノードで障害が発生した場合に、クラスタ統合ができないケースが発生しても、各ノードが自律分散的に動作し、クラスタの自律再生、自律修復を行なうことができるノード装置が望まれている。
【課題を解決するための手段】
【００１５】
複数のノード装置を含むネットワーク中のノード装置は、複数のノード装置を含むネットワーク中のノード装置であって、前記ネットワーク中の前記複数のノード装置の中で、前記ノード装置が前記ネットワーク中の情報伝達のための経路に関する経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報を格納するクラスタ情報格納部と、前記クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納するＴＴＬ格納部と、前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信する受信部と、前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定するシーケンス番号判定部と、前記シーケンス番号判定部における判定で、第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うＴＴＬ減算部と、前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すクラスタ情報更新部と、を含むことを特徴とする。
【発明の効果】
【００１６】
クラスタ生成中に起点ノード（ゲートウェイ）や参加ノードで障害が発生した場合に、クラスタ統合ができないケースが発生しても、各ノードが自律分散的に動作し、クラスタの自律再生、自律修復を行なうことができる。
【図面の簡単な説明】
【００１７】
【図１】クラスタが形成されたアドホックネットワークの例を示す図である。
【図２】クラスタ生成中に起点ノードで障害が発生した場合に起こる不具合を説明する図である。
【図３】段階的にクラスタを形成するクラスタ形成処理の概略を説明する図である。
【図４】クラスタ統合中に起点ノードで障害が発生した場合に起こる不具合を説明する図である。
【図５】クラスタ統合中に参加ノードで障害が発生した場合に起こる不具合を説明する図である。
【図６】クラスタ統合中に参加ノードで障害が発生した場合に起こる別の不具合を説明する図である。
【図７】ノード装置の構成の例を示す機能ブロック図である。
【図８】Ｈｅｌｌｏパケットのフォーマットの例を示す図である。
【図９】クラスタ内のノード監視処理の概略を説明する図である。
【図１０】ノード監視処理に伴ってブロードキャストされる第１のＨｅｌｌｏパケットの例を示す図である。
【図１１】起点ノードおよび参加ノードのＴＴＬの例を示す図である。
【図１２】クラスタの自律再生処理の概略を説明する図である。
【図１３】クラスタの自律再生処理に伴うクラスタ情報（ＣＩ）の変化の例を説明する図である。
【図１４】クラスタの自律再生処理に伴う起点ノードおよび参加ノードのＴＴＬの変化の例を説明する図である。
【図１５】クラスタの自律再生処理に伴うクラスタ情報（ＣＩ）の変化の別の例を説明する図である。
【図１６】クラスタの自律修復処理の概略を説明する図である。
【図１７】クラスタの自律修復処理に伴うクラスタ情報（ＣＩ）の変化の別の例を説明する図である。
【図１８】起点ノードのＴＴＬの例を示す図である。
【図１９】クラスタの自律修復処理に伴ってブロードキャストされるＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドの例を示す図である。
【図２０】参加ノードのＴＴＬの例を示す図である。
【図２１】クラスタ統合優先順位決定処理の概略を説明する図である。
【図２２】クラスタ統合先候補通知処理の概略を説明する図である。
【図２３】クラスタ統合要求通知処理の概略を説明する図である。
【図２４】クラスタ統合要求受付処理の概略を説明する図である。
【図２５】クラスタ統合完了処理の概略を説明する図である。
【図２６】ノード装置の構成の例を示す機能ブロック図である。
【図２７】ノード種別判定部での処理の流れの例を示すフローチャートである。
【図２８】参加処理部での処理の流れの例を示すフローチャートである。
【図２９Ａ】クラスタ情報更新処理での処理の流れの例を示すフローチャート（その１）である。
【図２９Ｂ】クラスタ情報更新処理での処理の流れの例を示すフローチャート（その２）である。
【図３０】クラスタ生成部での処理の流れの例を示すフローチャートである。
【図３１】フリーノードリスト生成部での処理の流れの例を示すフローチャートである。
【図３２】クラスタ統合先候補通知部での処理の流れの例を示すフローチャートである。
【図３３】クラスタ統合要求受付部での処理の流れの例を示すフローチャートである。
【図３４】クラスタ統合要求更新部での処理の流れの例を示すフローチャートである。
【図３５】クラスタ統合リスト生成部での処理の流れの例を示すフローチャートである。
【図３６】クラスタ統合処理部での処理の流れの例を示すフローチャートである。
【図３７】クラスタ統合リスト通知部での処理の流れの例を示すフローチャートである。
【図３８】クラスタ統合リスト通知部での処理の流れの別の例を示すフローチャートである。
【図３９】ＴＴＬ減算部での処理の流れの例を示すフローチャートである。
【図４０】クラスタ自律再生、修復処理前のネットワークのトポロジーの例を示す図である。
【図４１】クラスタ自律再生処理後のネットワークのトポロジーの例を示す図である。
【図４２】クラスタ自律再生処理の処理シーケンスの例を示す図である。
【図４３】クラスタ自律修復処理後のネットワークのトポロジーの例を示す図である。
【図４４】クラスタ自律修復処理後のフリーノードの動作の概略を示す図である。
【図４５】クラスタ自律修復処理の処理シーケンスの例を示す図である。
【発明を実施するための形態】
【００１８】
以下では、図面を参照しながら、自身が属するクラスタ内のノード装置を監視して、クラスタ内のノード障害を検出した場合、各ノード装置が自律分散的に動作することで、クラスタの自律再生または自律修復を行うことができるアドホックネットワークのノード装置１００について説明する。
【００１９】
ノード装置１００は次のような構成を有する。すなわち、ノード装置１００は、自身のシーケンス番号を管理し、自身がＨｅｌｌｏパケットを送信するときに加算していく。またノード装置１００は所定の周期で受信した、自身が属するクラスタ内の自身以外のノード装置のシーケンス番号をクラスタ情報として管理する。そして、Ｈｅｌｌｏパケットの周期ごとにシーケンス番号をチェックし、変化がない場合には、「ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）」として管理する値を減算し、変化がある場合には「ＴＴＬ」の値を初期値にリセットする。ＴＴＬの値が０になった場合、そのノードに障害が発生したと判断する。ＴＴＬが０になったノード装置は、クラスタから切り離され、その後、クラスト自律再生処理、または自律修復処理を行なうことで、クラスタ同士の統合処理ができない状況を回避することができる。
【００２０】
図１を用いて比較例を説明した後、図２〜４５を参照して、ノード装置１０の構成および動作について説明する。
【００２１】
＜比較例＞
図１は、クラスタが形成されたアドホックネットワークの例を示す図である。図１では、図中で１〜５０のＩＤ番号で指定される５０個のノード装置Ｎ１〜Ｎ５０を含んでいる。ノード装置のことを単に、「ノード」と呼ぶこともある。各ノードに付与された番号をノードＩＤとも呼ぶ。これらのノード装置のうち互いに隣接するノード装置は実線で結ばれている。また、ノードＩＤが数字ｘで指定される場合、そのノード装置を単にノード装置Ｎｘ、またはノードＮｘを呼ぶことがある。またノードＩＤが数字以外の記号ｙで指定される場合、そのノード装置を単にノード装置ｙ、またはノードｙと呼ぶことがある。また、ノードＩＤをＮＩＤと略記することがある。
【００２２】
ここで、「隣接する」とは、複数のノード装置が互いにパケットを送受信できる距離に位置することを指す。特に、互いにパケットをホップ数＝１で送受信できる距離に位置するノード装置を、隣接するノード装置を呼ぶことがある。２つのノード装置が隣接しているとき、これら２つのノード装置は「リンク」で結ばれているという。また、あるノード装置から送信されたパケットを受信できる範囲に位置するノード装置のことを、そのノード装置の「隣接ノード装置」または「隣接ノード」と呼ぶことがある。
【００２３】
各ノード装置の例としては、センサが挙げられる。このとき、アドホックネットワークは、センサネットワークとも呼ばれる。リンクによるノードの接続は有線であっても無線であっても良い。
【００２４】
各ノード装置は、それぞれ固有の識別情報（Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ、ＩＤ）を保有する。ノードＩＤは、ＭＡＣアドレスでも良いし、ＭＡＣアドレスとは無関係に付与されたアルファベット、数字を含む記号でもよい。各ノード装置は、ネットワーク内でどのノード装置が互いに隣接しているのかに関する情報や、ノード装置間の通信の状態などの情報や、ネットワーク全体についての情報を必ずしも把握していない。そこで、各ノードは、自分自身がどのように他のノードと接続されているかを知るために、隣接ノードとの間で、たとえばＨｅｌｌｏメッセージのような、経路情報やノード間のリンクの通信品質情報といったノード情報を含むメッセージの送受信を定期的に行う。Ｈｅｌｌｏメッセージは、たとえば数秒間隔で各ノードから送信される。そのようなメッセージの遣り取りから、最終宛先までの経路の探索や各経路の通信品質を計算し、その結果をもって最終宛先までの複数の経路の構築及び最適な経路の決定を行う。つまり、Ｈｅｌｌｏメッセージには、メッセージを送信するノードと隣接するノード間の経路情報およびノード間リンクの通信品質情報等のノード情報が含まれている。たとえば、あるノード装置から送信されたＨｅｌｌｏパケットは、送信元のノード装置の隣接ノード装置で受信される。Ｈｅｌｌｏパケットは、ネットワークの経路情報を通知するために用いられる。
【００２５】
図１に示されている例は、クラスタのノード数が１０を超えると、新しいクラスタを生成する方法を用いて形成されたものである。この場合、ネットワーク全体でクラスタ数を最小にしようとすれば、ノード装置を５０／１０＝５個のクラスタに分けることが可能である。しかしながら、図１では、Ｃ１〜Ｃ８の８個のクラスタで形成されてしまっている。
【００２６】
クラスタＣ１〜Ｃ８はそれぞれ、クラスタヘッドＮ１、Ｎ１３，Ｎ２５、Ｎ３０、Ｎ３５、Ｎ３８，Ｎ４４、Ｎ４６を含んでいる。また、クラスタＣ１は、ノード装置Ｎ１〜Ｎ１０を含んでいる。クラスタＣ２はノード装置Ｎ１１〜Ｎ２０を含んでいる。クラスタＣ３はノード装置Ｎ２１〜Ｎ２５を、クラスタＣ４はノード装置Ｎ２６〜Ｎ３０を含んでいる。クラスタＣ５はノード装置Ｎ３１〜３５を、クラスタＣ６はノード装置Ｎ３６〜Ｎ３９を含んでいる。クラスタＣ７はノード装置Ｎ４１〜Ｎ４５を、クラスタＣ８はノード装置Ｎ４６〜Ｎ５０を含んでいる。
【００２７】
ここで、「クラスタヘッド」とは、クラスタの生成を開始するノード装置であり、クラスタヘッド自身を含むクラスタの生成の起点となるノード装置である。クラスタヘッドを「起点ノード」または「ゲートウェイ（ＧＷ）」と呼ぶこともある。
【００２８】
たとえば、ＩＤ番号１のノード装置Ｎ１がクラスタ生成を開始するとする。この時点でノード装置Ｎ２からノード装置Ｎ５０は、いずれのクラスタにも属していないものとする。このように、どのクラスタにも属していないノード装置のことを「フリーノード」と呼ぶことがある。
【００２９】
起点ノードは、生成しているクラスタの識別子（図１では、Ｃ１、Ｃ２、．．．、Ｃ８など）とそのクラスタに参加しているノード装置の識別子（図１のクラスタＣ１であればノード装置を示すＩＤ番号１〜１０など）を含むＨｅｌｌｏパケットをブロードキャスト送信する。フリーノードは、起点ノードから送信されたＨｅｌｌｏパケットにより生成中のクラスタの識別子を認識する。フリーノードがクラスタに参加する場合、参加するクラスタの識別子と自身の識別子を対応付けた情報を含むＨｅｌｌｏパケットを生成し、生成したＨｅｌｌｏパケットをブロードキャスト送信する。たとえば、ノード装置Ｎ１が起点ノードとなって、クラスタを生成する場合を考える。ノード装置Ｎ２からノード装置Ｎ５０はまだフリーノードであるとする。図１では、ノード装置１に隣接するノード装置２、ノード装置Ｎ３、ノード装置Ｎ４、ノード装置Ｎ６、ノード装置Ｎ７は、起点ノードであるノード装置Ｎ１から送信されたＨｅｌｌｏパケットを受信することにより、クラスタＣ１が生成中であることを認識する。ノード装置Ｎ２、Ｎ３、Ｎ４、Ｎ６、Ｎ７はクラスタに属していないフリーノードであるので、生成中のクラスタＣ１の識別子を認識すると、クラスタＣ１に参加することを決定する。図１のノード装置Ｎ２がクラスタＣ１に参加する場合、参加するクラスタの識別子Ｃ１と自身の識別子Ｎ２を対応付けた情報を含むＨｅｌｌｏパケットを生成し、生成したＨｅｌｌｏパケットをブロードキャスト送信する。
【００３０】
起点ノードＮ１は、生成中のクラスタＣ１の識別子に対応付けてノード装置の識別子が通知されると、クラスタＣ１への参加の要求を受信したと認識する。そこで、起点ノードであるノード装置Ｎ１は、受信したＨｅｌｌｏパケットにより、生成中のクラスタＣ１に参加するノード装置を認識し、認識したノード装置をクラスタに加える。クラスタに加えられたノード装置は、そのノード装置がクラスタに加えられたことを、起点ノードからのＨｅｌｌｏｗパケットによって確認する。クラスタに参加しているノード装置を「参加ノード」と呼ぶことがある。参加ノードは、参加しているクラスタの識別子を含むＨｅｌｌｏパケットをブロードキャスト送信する。フリーノードは、参加ノードで生成されたＨｅｌｌｏパケットから生成中のクラスタの識別子を認識すると、上述の手順によってクラスタに参加する。これらの処理は、クラスタに含まれるノード装置の数が閾値に達するまで繰り返される。
【００３１】
図１では、Ｈｅｌｌｏパケットによってクラスタの生成に用いられる情報を送受信し、クラスタに含まれるノード装置の数が閾値すると別のクラスタを生成するという方法によりクラスタＣ１〜Ｃ８が生成される。
【００３２】
図１のクラスタＣ１は、ノード装置Ｎ１を起点ノードとし、ノード装置Ｎ２からノード装置Ｎ５０がフリーノードの状態から、クラスタに含まれるノード装置の数の閾値が１０のときに生成されたクラスタである。
【００３３】
クラスタに含まれるノード装置の数が閾値に達すると、起点ノードは、新たなクラスタの生成を要求する情報（生成情報）を含むＨｅｌｌｏパケットをブロードキャスト送信する。生成要求を受信した参加ノードは、受信した生成要求を含むＨｅｌｌｏパケットを生成し、ブロードキャスト送信する。生成要求を含むＨｅｌｌｏパケットを受信したフリーノードは、新たな起点ノードとして動作し、クラスタの生成を開始する。図１では、ノード装置Ｎ１３、Ｎ３０、Ｎ３５、Ｎ３８がそれぞれ、クラスタＣ２、Ｃ４、Ｃ５、Ｃ６の生成を開始する。クラスタの生成が始まった以後の手順は、クラスタＣ１の生成の手順と同じである。クラスタが生成されると、各ノード装置は、同一のクラスタ内の他のノード装置に至る経路をルーティングテーブルに格納する。
【００３４】
このようにクラスタを形成することにより、各ノード装置は、アドホックネットワークに含まれる全てのノード装置までの経路を格納する必要がない。よって、各ノード装置のルーティングテーブルの大きさは、アドホックネットワークがクラスタに分割されていない場合に比べて小さくなる。このため、各ノード装置において、経路情報を格納することにより生じる負荷の大きさも軽減される。また、クラスタの形成に用いられる情報は、Ｈｅｌｌｏパケットによって送受信されるので、他のパケット、たとえば制御パケットを用いる場合に比べてクラスタを生成するために行われる情報の送受信による帯域の消費量は少ない。
【００３５】
しかしながら、図１の例では、ハード故障、電波障害、電力停止など運用中にクラスタ内のノード装置に障害が発生した場合、クラスタの機能障害を復旧する手段がないという問題がある。クラスタの機能には、たとえば、クラスタ生成機能、クラスタ統合機能が含まれる。クラスタ生成機能とは、起点ノードが他のノード装置を取り込んで、第１段階が終了するまでクラスタを成長させる機能を指す。また、クラスタ統合機能とは、複数のクラスタが統合して一つのクラスタを生成する機能を指す。
【００３６】
図２を参照して、クラスタ内のノード装置に障害が発生した場合の例を説明する。
図２は、クラスタ生成中に起点ノードに障害が発生し、クラスタに参加できないノードが発生した状況を説明する図である。
【００３７】
クラスタＡは、ノード装置Ａ、Ｂ、Ｃを含んでいる。クラスタＡの周囲には、ノード装置Ｄとノード装置Ｅが存在する。これらはフリーノードであり、クラスタＡに参加をしたがっている。しかしながら、ノード装置ＤからクラスタＡへの参加を要求するＨｅｌｌｏパケットを受信したクラスタＡ中のノード装置Ｃは、その旨を起点ノードであるノード装置Ａに伝達しようとしても起点ノードであるノード装置Ａに障害が発生し、ノード装置ＤはクラスタＡに参加できない様子を示している。同様に、ノード装置ＥからクラスタＡへの参加を要求するＨｅｌｌｏパケットを受信したクラスタＡ中のノード装置Ｂも、その旨を起点ノードであるノード装置Ａに伝達しようとしても起点ノードであるノード装置Ａに障害が発生し、ノード装置ＥはクラスタＡに参加できない。
【００３８】
＜全般的な説明＞
そこで、開示される実施形態に関するアドホックネットワークのノード装置は、クラスタ内の各ノード装置が相互にクラスタ内のノード装置を監視して、クラスタ内のノード障害を検出した場合、各ノード装置が自律分散的に動作することで、クラスタの自律的な再生（自律再生）、自律的な修復（自律修復）を行うことができる。また、クラスタ内のノード監視、クラスタの自律再生、及び、クラスタの自律修復は、通常定期的に送信するＨｅｌｌｏパケットの交換のみで行うため、制御パケットによる方法よりネットワーク負荷をかけずに実施できる。その結果、本来のクラスタ化によるネットワーク負荷の軽減、省メモリ化を損なうことなく実現でき、クラスタ機能の継続、常に適正なクラスタの状態を保持、構成することで、ネットワークのスループットを安定させることが可能になる。
【００３９】
自律再生および自律修復を行うために、実施形態のノード装置は、次のような機能を含む。
（Ｆ１）ノード装置が起点ノードである場合、ノード装置はクラスタ内の全参加ノードを監視し、全参加ノード装置のＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）を保持、管理する。
（Ｆ２）ノード装置が参加ノードである場合、ノード装置はクラスタ内の起点ノードを監視し、起点ノードのＴＴＬを保持・管理する。
（Ｆ３）各ノード装置は、自身のノード装置（以下、自ノードと呼ぶことがある）のシーケンス番号（Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ：ＳＮ）を管理し、Ｈｅｌｌｏパケットの送信毎に、カウントアップ（ＳＮの現在値に１を加算）する。
（Ｆ４）ＴＴＬはノード装置毎にホップ数による距離、Ｈｅｌｌｏパケットの到達間隔による品質等からなる重み付けに連動した可変値を設定する。
（Ｆ５）各ノード装置は、クラスタ情報（ＣＩ）に各ノード装置のシーケンス番号（Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ：ＳＮ）を保持し、Ｈｅｌｌｏパケット受信時に更新する。（Ｆ６）各ノード装置は、自ノードが保持しているクラスタ情報（ＣＩ）をＨｅｌｌｏパケットにて伝播する。
（Ｆ７）自ノードが起点ノードの場合、監視対象である参加ノードのＳＮが更新された時、対応する参加ノードのＴＴＬをリセットする。
（Ｆ８）自ノードが参加ノードの場合、監視対象ノード装置の中の起点ノードのＳＮが更新された時、対応する起点ノードのＴＴＬをリセットする。
（Ｆ９）各ノードは、保持・管理しているＴＴＬを、一定周期で、たとえばＨｅｌｌｏパケット送信毎に、減算する。
（Ｆ１０）自ノードが起点ノードの場合、監視対象である参加ノードのＴＴＬが０、すなわちＴＴＬ＝０となった時、対象ノードをクラスタ情報（ＣＩ）から削除する。
（Ｆ１１）自ノードが参加ノードの場合、監視対象ノード装置の中の起点ノードＴＴＬが０、すなわちＴＴＬ＝０となった時、クラスタ内のノード数が一定数以上（たとえば、クラスタに含み得るノード数（最大クラスタノード数）の５０％以上であれば、クラスタを識別する識別子（ＣＩＤ）をクラスタ内のノード装置の一つを選択し、そのノード装置の識別子（ＮＩＤ）に書き換える。このとき選択されるノード装置としては、ノード装置の識別子を数字で表したとき、ノード装置の識別子の数が最も小さいものであっても良い。この結果、新たなクラスタＩＤにてクラスタは再生される。
（Ｆ１２）自ノードが参加ノードの場合、監視対象ノード装置の中の起点ノードのＴＴＬが０、すなわちＴＴＬ＝０となった時、クラスタ内のノード数が一定数以上（たとえば、クラスタに含み得るノード数（最大クラスタノード数）の５０％未満であれば、クラスタ情報（ＣＩ）をクリアすることで自律的にクラスタ解放し、フリーノードになる。そしてフリーノードとしてクラスタ参加、またはクラスタ生成を行う。
【００４０】
このように、各ノード装置は自身のシーケンス番号（ＳＮ）を管理し、自身がＨｅｌｌｏパケットを送信するときに加算していく。各ノード装置は所定の周期で受信した各ノード装置のシーケンス番号（ＳＮ）をクラスタ情報（ＣＩ）として管理する。たとえば、Ｈｅｌｌｏパケットの周期ごとにシーケンス番号（ＳＮ）をチェックし、変化がない場合には、ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）として管理する値を減算し、変化がある場合、すなわち増加する場合にはＴＴＬの値を初期値にリセットする。ＴＴＬの値が０になった場合、そのノードに障害が発生したと判断する。
【００４１】
そして、クラスタの生成中に起点ノード（ゲートウェイ、クラスタヘッド）や参加ノードで障害が発生した場合に、各ノードが自律分散的に動作し、クラストの自律再生、自律修復を行なうことで、クラスタの生成を継続することができる。
【００４２】
さらに、障害が発生したノード装置が属するクラスタのサイズが大きい（クラスタに含まれるノード装置が多い）場合は、クラスタを解散して再構築を行うと、解散前の参加ノードでクラスタ生成できる可能性は高い。しかしながら、ノード装置の数が多いことからクラスタの生成に時間がかかる。このことから、クラスタのサイズが大きい場合は、クラスタの解散は行わず、起点ノードだけを変更して別のクラスタとしたほうが効率が良い。
【００４３】
一方、クラスタサイズが小さい（クラスタに含まれるノード装置が多くない）場合は、クラスタを解散して参加ノードがフリーノードとなっても、周囲のクラスタに取り込める可能性が高い。そこで、障害が発生したノード装置を含むクラスタを解消して、参加していたノード装置がフリーノードとなることでクラスタ数を減らすことができる。
【００４４】
上記機能（Ｆ１１）および（Ｆ１２）を有するために、アドホックネットワークのノード装置は、複数のノード装置が集まったとき、第１段階のクラスタ生成処理と第２段階のクラスタ統合処理の２段階でクラスタを生成するように構成される。２段階でクラスタを形成するクラスタ形成処理の第１段階を「クラスタ生成処理」、クラスタ形成処理の第２段階を「クラスタ統合処理」と呼ぶ。ネットワーク中のクラスタの起点ノードで障害が発生した後の「クラスタ生成処理」または「クラスタ統合処理」を「クラスタ自律再生処理」と呼ぶ。また、ネットワーク中のクラスタの参加ノード、すなわち起点ノードではないノード装置で障害が発生した後の「クラスタ生成処理」または「クラスタ統合処理」を、「クラスタ自律再生処理」と呼ぶ。
【００４５】
ノード装置に障害が発生した場合、障害が発生したノード装置が属するクラスタのノード装置の数が最大クラスタノード数の所定の割合以上であれば、障害が発生したノード装置が属するクラスタは、クラスタ統合処理を実施する。一方、障害が発生したノード装置が属するクラスタのノード装置の数が最大クラスタノード数の所定の割合より小さければ、クラスタを解消してクラスタ生成処理を行う。
【００４６】
また、アドホックネットワークのノード装置は、ネットワークを形成するノード装置に障害が発生しなくても、クラスタを２段階で形成する。
【００４７】
図３は段階的なクラスタ形成処理の概略を説明する図である。図３の（Ａ）は、段階的にクラスタを形成するクラスタ形成処理の第１段階であるクラスタ生成処理の結果の例を説明する図、図３の（Ｂ）は、クラスタ形成処理の第２段階であるクラスタ統合処理の概略を説明する図、そして、図３の（Ｃ）は、クラスタ形成処理の第２段階であるクラスタ統合処理の結果の例を説明する図である。
【００４８】
以下では、クラスタ生成処理、第２段階を含めて複数のノード装置からクラスタを作る処理を「クラスタ形成」、クラスタ統合処理で起点ノードが他のノード装置を取り込んで、第１段階が終了するまでクラスタを成長させる処理を「クラスタ生成」と呼ぶことがある。
【００４９】
図３の（Ａ）に示されているように、第１段階では、クラスタのノード数の上限が、最大クラスタノード数の所定の閾値以下となるように、例えば最大クラスタノード数の５０％以下となるようにクラスタを生成、成長させるクラスタ生成処理を行う。第１段階終了時でのクラスタノード数を暫定的最大クラスタノード数と呼ぶことがある。つまり、クラスタのノード数が最大クラスタノード数に届かず、クラスタの成長の余地がある場合も、あえてクラスタを成長させない。第１段階の終了の時点で、ルーティングテーブルが最大クラスタノード数のノード装置に関する情報で埋められていない。したがって、ルーティングテーブルの埋められていない部分に格納可能なノード装置の数以下のノード装置を含むクラスタと統合する、またはノード装置を加えることができる。その後、第１段階で生成されたクラスタを統合するクラスタ統合処理を行う第２段階に移る。第１段階のクラスタ成長処理は、後述のように、Ｈｅｌｌｏパケットの交換のみで行なわれる。
【００５０】
第１段階では、ネットワークのノード装置は、Ｈｅｌｌｏパケットの送受信により隣接するノード装置を認識した後、クラスタヘッド（起点ノード）を中心にフリーノードを取り込み、クラスタ内のノード数を増やしていく。クラスタ内のノード数が所定の値に達した時点で、そのクラスタの成長を止める。そして、そのクラスタの周囲にいるフリーノードが起点ノードとなりクラスタを生成し、残っているフリーノードをクラスタに取り込んでいく。フリーノードが無くなるまで、クラスタの生成と成長というこれらの手続きを繰り返す。
【００５１】
最大クラスタノード数に対する第１段階終了時でのクラスタのノード数（暫定的最大クラスタノード数）の割合は、クラスタの生成の速度を優先する場合は高めに、たとえば７５％、８０％等に設定する。また、クラスタ内のノード数（クラスタ粒度）の均一性を優先する場合は割合を低く、たとえば４０％、３５％等に設定する。暫定的最大クラスタノード数の最大クラスタノード数に対する割合は、上記の数値に限定されない。
【００５２】
ノード装置に対してフリーノードの参加要求がなくなった時点から所定の時間だけ経過した後に、第２段階での統合処理を開始する。つまり、各ノード装置は、一定時間のインターバルを取り、そのインターバル内でクラスタに属するノード装置の数に変化が無ければ、クラスタ形成は安定したと判定し、クラスタ統合の処理へ移行する。
【００５３】
クラスタ統合処理に移行したクラスタは、隣接するクラスタに統合が可能であれば、統合される。所定の時間は、クラスタのノード数に依存し、クラスタのサイズが小さければ小さいほど、すなわちクラスタが含むノード数が少なければ少ないほど、短く設定され得る。よって、小さいサイズのクラスタからクラスタ統合処理に移行するので、小さいサイズのクラスタであるほど、別のクラスタに取り込まれる可能性が高い。
【００５４】
図３の（Ｂ）では、クラスタ４がクラスタ１に、クラスタ６およびクラスタ７がクラスタ３に、クラスタ８がクラスタ５に、クラスタ１０がクラスタ９に統合される。第２段階でのクラスタ統合処理は、サイズが小さいクラスタから開始される。第１段階では、クラスタのノード数の上限（暫定的最大クラスタノード数）が、最大クラスタノード数の所定の閾値、例えば５０％となるようにクラスタが生成されるので、サイズが小さいクラスタは自身より大きなサイズのクラスタに統合される。図３の（Ｂ）では、クラスタ数は統合前の１０から５に変化する。第２段階のクラスタ統合処理も、後述のように、Ｈｅｌｌｏパケットの交換のみで行なわれる。
【００５５】
各ノードはクラスタ生成段階を省略しクラスタ統合段階から始めることもできる。この場合、クラスタ粒度は最少、つまりでクラスタ内のノード数は１で、各ノード装置がクラスタを構成する。この場合、全ノード装置は起動と同時にクラスタ統合処理を開始する。言い換えると、各ノードは１つのノードから形成されるクラスタの起点ノードとして機能する。
【００５６】
図３の（Ｃ）では、第１段階のクラスタ生成処理の結果として生成された１０個のクラスタが存在する状態から、第２段階のクラスタ統合処理の結果として生成された５個のクラスタを示している。
【００５７】
このように２段階でクラスタを形成すると、クラスタ統合処理中にノード装置に障害が発生することがある。以下の説明では、起点ノードの識別子ＮＩＤがｘであるクラスタをクラスタｘと呼ぶ。
【００５８】
障害の例を図４〜６を参照しながら説明する。
図４は、クラスタ統合処理の実施中に起点ノードで障害が発生した場合を示している。図４では、ノード装置Ａ、Ｂ、Ｃを含むクラスタＡと、ノード装置Ｄ、Ｅを含むクラスタＥが統合しようとする際、クラスタＥの起点ノードであるノード装置Ｅに障害が発生した場合を示している。この場合、ノード装置Ｅに、クラスタＥと統合可能なクラスタの情報（たとえば、後述のクラスタ統合先候補通知に含まれる情報）が到達しないと、クラスタＥはどのクラスタと統合するのか判定ができず、クラスタＡとクラスタＥの統合ができなくなる。
【００５９】
図５は、クラスタ統合処理の実施中に参加ノードで障害が発生した場合を示している。図５では、最大クラスタノード数は１０であるとする。すなわち、最終的にクラスタが含み得るノード数は１０であるとする。図５に示されているクラスタＡは、ノード装置Ａ〜Ｇの８つのノード装置を含み、クラスタＪはノード装置Ｈ〜Ｋの４つのノード装置を含んでいる。そして、ノード装置Ｉとノード装置Ｋに障害が発生するとする。すると、稼働しているノード装置の数だけを見るとクラスタＡとクラスタＪの統合は可能であるが、障害が発生したノード装置Ｉとノード装置Ｋを含むと最大クラスタノード数を超えるためクラスタの統合できなくなる。
【００６０】
図６は、クラスタ統合処理の実施中に参加ノードで障害が発生した場合を示している。図６では、クラスタＡはノード装置Ａ〜Ｃの３つのノード装置を含み、クラスタＥはノード装置Ｄ〜Ｆの３つのノード装置を含んでいる。そして、クラスタＥのノード装置Ｆに障害が発生している。この場合、クラスタＡからクラスタＥへのクラスタ統合要求がノード装置Ｆに届かず、クラスタＥに含まれるノード装置としてノード装置Ｆが登録できない。すると、クラスタＡ側で、クラスタＥのノード装置のリストをチェックする際、本体的にクラスタＥが含んでいるべきノード装置の数と、実際にクラスタＥ内のＨｅｌｌｏパケットの交換によって得られるクラスタＥ中のノード装置の数が一致せず、クラスタ統合できなくなる。
【００６１】
以下で説明するノード装置は機能（Ｆ１）〜（Ｆ１２）を備え、このことによって図４〜６で示したような不具合を解消することができる。
【００６２】
＜ノード装置の構成＞
以下では、上述の機能（Ｆ１）〜（Ｆ１２）を備えるノード装置１００について説明する。
【００６３】
ノード装置１００は、自身（以下、自ノードと呼ぶことがある）が属するクラスタ（以下、自クラスタと呼ぶことがある）内のノード装置を監視し、自クラスタ内のノード装置の障害の発生を検出した場合、自クラスタの自律再生、自律修復をＨｅｌｌｏパケットの送受信のみで行う手段を備えている。
【００６４】
クラスタ内のノード監視、クラスタの自律再生、及び、クラスタの自律修復は、通常定期的に送信するＨｅｌｌｏパケットの送受信のみで行うため、制御パケットによる方法よりネットワーク負荷をかけずに実施できる。その結果、本来のクラスタ化によるネットワーク負荷の軽減、省メモリ化を損なうことなく実現でき、クラスタ機能の継続、常に適正なクラスタの状態を保持・構成することで、ネットワークのスループットを安定させることが可能になる。
【００６５】
図７は、ノード装置１００の構成の例を示す機能ブロック図である。ノード装置１００は、受信部１０２、ノード種別判定部１０４、参加処理部１０６、クラスタ情報更新部１０８、クラスタ生成部１１０、フリーノードリスト生成部１１２、クラスタ統合先候補通知部１１４、クラスタ統合要求受付部１１６、クラスタ統合要求更新部１１８、クラスタ統合リスト生成部１２０、クラスタ統合処理部１２２、クラスタ統合リスト通知部１２４、設定部１３６、ハローパケット生成部１３８、送信部１４０、ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ：寿命）減算部１４２を含む。さらに、ノード装置１０は、ノード種別情報１２６、クラスタ情報１２８、フリーノードリスト１３０、マージクラスタリスト１３２、マージノードリスト１３４、ＴＬＬ１４４を記憶する。ノード種別情報１２６、クラスタ情報１２８、フリーノードリスト１３０、マージクラスタリスト１３２、マージノードリスト１３４、ＴＬＬ１４４のそれぞれと、それらが格納されるノード種別情報格納部１２６、クラスタ情報格納部１２８、フリーノードリスト格納部１３０、マージクラスタリスト格納部１３２、マージノードリスト格納部１３４、ＴＬＬ格納部１４４は同じ符号で参照される。
【００６６】
ノード種別情報１２６、クラスタ情報１２８、フリーノードリスト１３０、マージクラスタリスト１３２、マージノードリスト１３４と、それらが格納されているノード種別情報格納部１２６、クラスタ情報格納部１２８、フリーノードリスト格納部１３０、マージクラスタリスト格納部１３２、マージノードリスト格納部１３４は同じ符号で参照される。
【００６７】
受信部１０２は、隣接するノード装置１００から送信されたパケットを受信し、Ｈｅｌｌｏパケットをノード種別判定部１０４に出力する。
【００６８】
送信部１４０は、パケットを隣接するノード装置１００に送信する。たとえば、送信部１４０は、ハローパケット生成部１３８で生成されたＨｅｌｌｏパケットを隣接するノード装置に送信する。隣接する全てのノード装置にパケットを送信するとき、パケットをブロードキャスト送信するとも言う。
【００６９】
図８はＨｅｌｌｏパケットのフォーマットの例を示す図である。
図８に示されているように、Ｈｅｌｌｏパケット２００は、ヘッダとペイロードを含む。
【００７０】
ヘッダは、Ｔｙｐｅフィールド、グローバル宛先（Ｇｌｏｂａｌ  Ｄｅｓｔｉｎａｔｉｏｎ：ＧＤ）フィールド、グローバル送信先（Ｇｌｏｂａｌ  Ｓｏｕｒｃｅ：ＧＳ）フィールド、ローカル送信元（Ｌｏｃａｌ  Ｓｏｕｒｃｅ：ＬＳ）、ローカル宛先（Ｌｏｃａｌ  Ｄｅｓｔｉｎａｔｉｏｎ：ＬＤ）を含む。
【００７１】
ペイロードは、クラスタ情報（Ｃｌｕｓｔｅｒ  Ｉｎｆｏｒｍａｔｉｏｎ：ＣＩ）フィールド、フリーノードリスト（Ｆｒｅｅ  Ｎｏｄｅ  Ｌｉｓｔ：ＦＮＬ）フィールド、マージノードリスト（Ｍｅｒｇｅ  Ｎｏｄｃ  Ｌｉｓｔ：ＭＮＬ）フィールド、マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドを含む。ペイロードはさらに、図示されていないが、Ｈｅｌｌｏヘッダの数を表す情報、Ｈｅｌｌｏヘッダを含む。Ｈｅｌｌｏヘッダは経路情報を含む。経路情報は、Ｈｅｌｌｏパケットを生成するノード装置のルーティングテーブルに経路が記憶されているＧＤの識別子が含まれる。
【００７２】
以下、「グローバル宛先（ＧＤ）」とは、パケットの最終的な宛先のノード装置１００を指す。また、「ローカル宛先（ＬＤ）」とは、パケットが１ホップ転送される場合の転送先のノード装置１００を指す。「グローバル送信元（ＧＳ）とは最初にパケットを作成した発信元のノード装置１００を指す。「ローカル送信元（ＬＳ）」は、パケットが１ホップ転送される場合の転送元のノード装置１００を指す。Ｈｅｌｌｏパケットは、送信元のノード装置１００に隣接するノード装置にブロードキャスト送信される。
【００７３】
Ｔｙｐｅフィールドには、ペイロードに含まれるデータの種類を示す情報が格納される。Ｈｅｌｌｏパケットの場合、ＴｙｐｅフィールドはＨｅｌｌｏパケットを特定する値が格納される。受信部１０２は、受信したパケットのＴｙｐｅフィールドに格納されている値を用いてＨｅｌｌｏパケットを識別し、ノード種別判定部１０４に出力する。
【００７４】
クラスタ情報（ＣＩ）フィールドには、ノード装置１００自身が所属しているクラスタの識別子（Ｃｌｕｓｔｅｒ  Ｉｄｅｎｔｉｆｉｅｒ：ＣＩＤ）と、クラスタ識別子（ＣＩＤ）で識別されるクラスタに含まれているノード装置の識別子（Ｎｏｄｅ  Ｉｄｅｎｔｉｆｉｅｒ：ＮＩＤ）およびそのノード装置のシーケンス番号（ＳＮ）の組のリストと、ｅｎｄフラグが格納される。
【００７５】
クラスタに含まれているノード装置の識別子（ＮＩＤ）の数は任意である。以下では、複数のノード装置の識別子（ＮＩＤ）とそのノード装置のシーケンス番号（ＳＮ）の組の集合を「｛＜ＮＩＤ、ＳＮ＞｝」と示すことがある。
【００７６】
クラスタ情報（ＣＩ）フィールドに含まれるｅｎｄフラグは、クラスタ識別子（ＣＩＤ）で識別されるクラスタに新たなノード装置１００が参加できるかを示す情報である。つまり、クラスタ識別子（ＣＩＤ）で識別されるクラスタが最大クラスタノード数のノード装置を含んでいるかを示す情報である。ｅｎｄフラグは、たとえば、「ｔｒｕｅ」と「ｆａｌｓｅ」の２つを取る。「ｔｒｕｅ」および「ｆａｌｓｅ」は、「ｔｒｕｅ」および「ｆａｌｓｅ」を示す数字、文字を含む記号であってもよい。ｅｎｄフラグが「ｔｒｕｅ」の場合、クラスタが最大クラスタノード数のノード装置を含んでいるため、ノード装置１０は新たにそのクラスタに参加することができない。ｅｎｄフラグが「ｔｒｕｅ」であるクラスタ情報を有するＨｅｌｌｏパケットは、新たなクラスタの生成を要求するための情報である生成要求として用いられる。ｅｎｄフラグが「ｆａｌｓｅ」の場合、クラスタに含まれるノードの数は最大クラスタノード数には達していないため、そのノード装置１０が含まれるクラスタには、新たなノード装置が参加することができる。
【００７７】
フリーノードリスト（ＦＮＬ）フィールドには、ノードを参加させたいクラスタを識別するクラスタ識別子（ＣＩＤ）と、クラスタ識別子（ＣＩＤ）で識別されるクラスタに参加させたいノード装置の識別子（Ｎｏｄｅ  Ｉｄｅｎｔｉｆｉｅｒ：ＮＩＤ）のリストが含まれる。フリーノードリスト（ＦＮＬ）フィールドに格納される情報を「フリーノード情報」と呼ぶことがある。クラスタに参加させたいノード装置の識別子（ＮＩＤ）の数は任意である。以下では、複数のノード装置の識別子（ＮＩＤ）の集合を「｛ＮＩＤ｝」と示すことがある。
【００７８】
マージノードリスト（Ｍｅｒｇｅ  Ｎｏｄｅ  Ｌｉｓｔ：ＭＮＬ）フィールドとマージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドは、クラスタ形成の第２段階のクラスタ統合処理で用いられる。
【００７９】
クラスタ統合処理で２つのクラスタが統合する際には、異なる２つのクラスタに属し、隣接する２つのノード装置Ａとノード装置Ｂの間でＨｅｌｌｏパケットを送受信する。本実施形態では、クラスタ識別子（ＣＩＤ）を数値で表現した場合、クラスタ識別子（ＣＩＤ）の数値が小さい方のクラスタがマスタ、もう一方がスレーブとなる。仮に、ノード装置Ａをマスタ側のクラスタに属するノード装置、ノード装置Ｂをスレーブ側のクラスタに属するノード装置とする。
【００８０】
マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドは、スレーブ側クラスタに関する情報である。マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドは、自ノード装置がスレーブ側のクラスタに属しているとき、マスタ側のクラスタに属する、隣接ノード装置の識別子（Ｓ−Ｉｄｅｎｔｉｆｉｅｒ：ＳＩＤ）と、自ノード装置が属するスレーブ側のクラスタに属するノード装置の識別子（ＮＩＤ）を含む。マスタ側クラスタに属するノード装置はクラスタ統合先候補であり、マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドにＳＩＤが格納されたＨｅｌｌｏパケットは、クラスタ統合要求通知として使用される。以下では、ノード装置の識別子（ＮＩＤ）の集合を「｛ＮＩＤ｝」と示すことがある。
【００８１】
たとえば、スレーブ側クラスタに属するノード装置Ｂが、マスタ側クラスタに属するノード装置ＡからＨｅｌｌｏパケットを受信するとする。すると、ノード装置Ｂは、マスタ側のクラスタに属するノード装置の識別子（ＳＩＤ）として、ノード装置Ａを識別する識別子を格納し、スレーブ側のクラスタに属するノード装置を識別する識別子（ＮＩＤ）の集合を空集合｛｝として、Ｈｅｌｌｏパケットを生成する。そして、このように生成されたＨｅｌｌｏパケットを、ブロードキャスト送信する。
【００８２】
マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドは、スレーブ側のクラスタ内で、Ｈｅｌｌｏパケットがクラスタ統合要求通知として送受信されている場合には、ノード装置Ｂが含まれるスレーブ側のクラスタに属するノード装置を識別する識別子（ＮＩＤ）の集合である。
【００８３】
マージノードリスト（Ｍｅｒｇｅ  Ｎｏｄｅ  Ｌｉｓｔ：ＭＮＬ）フィールドには、マスタ側クラスタに属するノード装置がスレーブ側クラスタに属する隣接ノード装置からクラスタ統合要求通知としてのＨｅｌｌｏパケットを受信したとき、そのＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるスレーブ側クラスタに属するノード装置の識別子と、マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールド含まれるスレーブ側クラスタに属するノード装置の識別子を比較して、一致した場合に、マージクラスタリスト（ＭＣＬ）フィールドのノード装置を識別する識別子（ＮＩＤ）の集合が移動され格納される。すなわち、マージノードリスト（ＭＮＬ）フィールドには、マスタ側のクラスタと統合し得るスレーブ側のクラスタに属する全ノード装置のリストが格納される。クラスタ情報（ＣＩ）フィールドに含まれるスレーブ側クラスタに属するノード装置の識別子と、マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールド含まれるスレーブ側クラスタに属するノード装置の識別子は、要素数だけを比較してもよい。（マスタ側クラスタに属する）ノード装置Ａがクラスタ統合要求通知としてＨｅｌｌｏパケットをマスタ側クラスタ内でブロードキャスト送信する際には、マージノードリスト（ＭＮＬ）は、スレーブ側のクラスタに属するード装置を識別する識別子（ＮＩＤ）の集合である。
【００８４】
設定部１３６は、ノード装置１０をフリーノード、起点ノード、参加ノードのいずれかに設定し、ノード装置１０の種別を特定する情報を、ノード種別情報１２６に格納する。ノード種別情報１２６は、ノード装置１００の種別を特定する任意の形式の情報である。もし、自身が起点ノードに設定されたときには、クラスタ情報１２８を更新する。
【００８５】
ノード種別判定部１０４は、受信部１０２からＨｅｌｌｏパケットが転送されると、ノード種別情報１２６からノード装置１０の種別、つまりフリーノード、起点ノード、参加ノードのいずれであるか、を取得する。ノード種別判定部１０４では、ノードの種別と、Ｈｅｌｌｏパケット中のクラスタ情報（ＣＩ）、フリーノード情報（ＦＮＬ等）、マージクラスタリスト（ＭＣＬ）、およびマージノードリスト（ＭＮＬ）の出力先が関連付けられている。図３に示されているように、ノード種別判定部１０４はノード種別情報１２６を参照して、クラスタ情報（ＣＩ）を、ノード装置１００がフリーノードである場合には、参加処理部１０６に送る。また、ノード種別判定部１０４はノード種別情報１２６を参照して、クラスタ情報（ＣＩ）を、ノード装置１００が起点ノードまたは参加ノードである場合にはクラスタ情報更新部１０８に送る。ノード種別判定部１０４はノード種別情報１２６を参照して、フリーノード情報（ＦＮＬ等）を、ノード装置１００が起点ノードである場合にはクラスタ生成部１１０に、参加ノードである場合にはフリーノードリスト生成部１１２に送る。同様に、マージクラスタリスト（ＭＣＬ）は、ノード装置１０が起点ノードである場合にはクラスタ統合要求受付部１１６に、参加ノードである場合にはクラスタ統合要求更新部１１８に送られる。マージノードリスト（ＭＮＬ）は、ノード装置１０が起点ノードである場合にはクラスタ統合処理部１２２に、参加ノードである場合にはクラスタ統合リスト通知部１２４に送られる。
【００８６】
参加処理部１０６は、クラスタへの参加の要求と参加の確認を行う。参加処理部１０６は、ノード装置１００がフリーノードである場合にＨｅｌｌｏパケットを受信したときに、Ｈｅｌｌｏパケットに含まれるクラスタ情報（ＣＩ）を受け取る。参加処理部１０６はクラスタ情報（ＣＩ）を受け取ると、クラスタ情報（ＣＩ）に含まれるクラスタ識別子（｛ＮＩＤ｝）とｅｎｄフラグの内容を確認する。さらに、参加処理部１０６は、ノード装置１０自身の装置識別子を含むエントリがフリーノードリスト１３０に格納されているかを確認する。ノード装置１０自身が既にクラスタへの参加を要求している場合、フリーノードリスト１３０にノード装置１００自身の識別子を含むエントリが含まれている。フリーノードリスト１３０にノード装置１００自身の識別子を含むエントリが含まれていない場合、ノード装置１０自身はクラスタへの参加を要求していない。そこで、参加処理部１０６は、参加が可能なクラスタ、つまりｅｎｄフラグが「ｔｒｕｅ」ではないクラスタに参加を要求するために、クラスタ情報（ＣＩ）に含まれるクラスタ識別子（ＣＩＤ）とノード装置１００自身の識別子の組み合わせをフリーノードリスト１３０に格納する。フリーノードリスト１３０にノード装置１００自身の識別子を含むエントリが含まれている場合、ノード装置１００自身は既にクラスタへの参加を要求している。そこで、参加処理部１０６は、クラスタに参加できたかどうかを確認するために、クラスタ情報（ＣＩ）にノード装置１０自身の識別子が含まれているかどうかを確認する。クラスタ情報（ＣＩ）にノード装置１０自身の識別子が含まれている場合、参加処理部１０６は、ノード装置１００自身はクラスタに参加できていると判定して、クラスタ情報（ＣＩ）に含まれるノード装置の識別子とシーケンス番号の組の集合（｛＜ＮＩＤ、ＳＮ＞｝）を更新する。同時に、フリーノードリスト１３０からノード装置１０自身の識別子を削除し、そのクラスタの参加ノードになる。クラスタ情報（ＣＩ）にノード装置１０自身の識別子が含まれていない場合、クラスタ情報（ＣＩ）に含まれるクラスタ識別子（ＣＩＤ）クラスタに参加可能かを確認するため、ｅｎｄフラグを確認する。
【００８７】
クラスタ情報（ＣＩ）に含まれるｅｎｄフラグが「ｔｒｕｅ」である場合、参加処理部１０６は、ノード装置１０自身が属するクラスタは既に最大クラスタノード数個のノード装置を含んでいるため、フリーノードリスト１３０のエントリを削除する。フリーノードリスト１３０にノード装置１０自身の識別子を含むエントリが含まれていない場合にｅｎｄフラグが「ｔｒｕｅ」であるクラスタ情報（ＣＩ）を含むＨｅｌｌｏパケットを受信すると、ノード装置１００自身を起点ノードに指定し、ノード種別情報１２６を変更し、さらにクラスタ情報１２８を更新する。
【００８８】
クラスタ情報１２８には、クラスタ情報（ＣＩ）のほか、最大クラスタノード数に関する情報が格納されている。
【００８９】
クラスタ情報更新部１０８は、Ｈｅｌｌｏパケットで通知されたクラスタ情報（ＣＩ）が、ノード装置１００自身が属しているクラスタに関する情報であるかを確認するために、クラスタ情報（ＣＩ）に含まれているクラスタ識別子（ＣＩＤ）とノード装置１００自身が属しているクラスタの識別子が一致するかを確認する。両者が一致する場合には、ノード装置１００自身が属しているクラスタの情報が通知されているので、クラスタ情報更新部１０８は、クラスタ情報１２８をＨｅｌｌｏパケットで通知されたクラスタ情報（ＣＩ）に基づいて更新する。さらにクラスタ情報更新部１０８は、フリーノードリスト１３０からクラスタ情報（ＣＩ）に含まれているノード装置に関するエントリを削除する。
【００９０】
また、クラスタ情報更新部１０８は、ノード装置１００自身がクラスタ情報（ＣＩ）に設定されている場合は、マージノードリスト（ＭＮＬ）またはマージクラスタリスト（ＭＣＬ）を比較し、必要に応じてマージクラスタリスト１３２、マージノードリスト１３４を更新する。
【００９１】
さらに、クラスタ情報更新部１０８は、ノード種別判定部１０４から受け取ったクラスタ情報（ＣＩ）をクラスタ統合先候補通知部１１４に送る。
【００９２】
クラスタ情報更新部１０８は、受信部１０２が異なるタイミングで受信した第１および第２のＨｅｌｌｏパケットに含まれているノード装置に対するシーケンス番号が互いに一致するかどうかを判定するシーケンス番号判定部として機能する。
【００９３】
クラスタ生成部１１０は、ノード種別判断部より受け取ったノードフリーリスト（ＦＮＬ）等のノードフリー情報を処理し、必要に応じて自ノードで管理するクラスタ情報（ＣＩ）を参照、更新する。
【００９４】
フリーノードリスト生成部１１２は、ノード種別判定部１０４から受け取ったフリーノードリスト（ＦＮＬ）を処理し、必要に応じてノード装置１００自身が管理するフリーノードリスト１３０を更新する。
【００９５】
クラスタ統合先候補通知部１１４は、クラスタ情報更新部１０８より受け取ったクラスタ情報（ＣＩ）と自ノードで管理するクラスタ情報１２８を参照し、クラスタ統合の条件を満たしていれば自ノードで管理するマージクラスタリスト１３２を更新する。また、マージクラスタリスト１３２を更新する場合、自ノードが起点ノードの場合はクラスタ統合要求受付部１１６にマージクラスタリスト（ＭＣＬ）を渡す。
【００９６】
クラスタ統合要求受付部１１６は、ノード種別判定部１０４またはクラスタ統合先候補通知部１１４より受け取ったマージクラスタリスト（ＭＣＬ）を処理し、クラスタ統合の条件を満たしていれば自ノードで管理するマージクラスタリスト１３２を更新する。
【００９７】
クラスタ統合要求更新部１１８は、ノード種別判定部１０４より受け取ったマージクラスタリスト（ＭＣＬ）を処理し、クラスタ統合の条件を満たしていれば自ノードで管理するマージクラスタリスト１３２を更新（スレーブ側参加ノード登録）する。また、自ノードがマスタ側対向ノードの場合は、クラスタ統合リスト生成部１２０へマージクラスタリスト（ＭＣＬ）およびクラスタ情報（ＣＩ）を渡す。
【００９８】
クラスタ統合リスト生成部１２０は、クラスタ統合要求更新部１１８より受け取ったマージクラスタリスト（ＭＣＬ）およびクラスタ情報（ＣＩ）を処理し、クラスタ統合の条件を満たしていれば自ノードで管理するマージノードリスト１３４を更新する。
【００９９】
クラスタ統合処理部１２２は、ノード種別判定部１０４より受け取ったマージノードリスト（ＭＮＬ）を処理し、クラスタ統合の条件を満たしていれば自ノードで管理するクラスタ情報１２８を更新する。
【０１００】
クラスタ統合リスト生成部１２０は、クラスタ統合要求更新部より受け取ったマージクラスタリスト（ＭＣＬ）およびクラスタ情報（ＣＩ）を処理し、クラスタ統合の条件を満たしていれば自ノードで管理するマージノードリスト１３４を更新する。
【０１０１】
クラスタ統合リスト通知部１２４は、ノード種別判定部より受け取ったマージノードリスト（ＭＮＬ）を処理し、必要に応じて自ノードで管理するマージノードリスト１３４を参照、更新する。
【０１０２】
ハローパケット生成部１３８は、Ｈｅｌｌｏパケットを生成し、送信部１４０に送る。Ｈｅｌｌｏパケットのフォーマットの例は、図４に示されている。Ｈｅｌｌｏパケットは、クラスタ情報（ＣＩ）フィールド、フリーノードリスト（ＦＮＬ）フィールド、マージノードリスト（Ｍｅｒｇｅ  Ｎｏｄｅ  Ｌｉｓｔ：ＭＮＬ）フィールド、マージクラスタリスト（Ｍｅｒｇｅ  Ｃｌｕｓｔｅｒ  Ｌｉｓｔ：ＭＣＬ）フィールドを含んでいる。これらのフィールドに格納される情報はそれぞれ、クラスタ情報１２８、フリーノードリスト１３０、マージノードリスト１３４、マージクラスタリスト１３２から取得される。
【０１０３】
ＴＴＬ減算部１４２は、一定周期で起動され監視対象のＴＴＬを減算する。もし自身のノード装置１０がクラスタ内で起点ノードである場合、自クラスタの他のノード装置（参加ノード）のＴＴＬが０、すなわちＴＴＬ＝０になったとき、その参加ノードに関する情報をクラスタ情報（ＣＩ）１２８から削除する。もし自身のノード装置１０がクラスタ内で参加ノードである場合、自身が属するクラスタの起点ノードのＴＴＬが０、すなわちＴＴＬ＝０になったとき、その起点ノードの識別子に関する情報をクラスタ情報（ＣＩ）１２８から消去（クリア）し、自身が属するクラスタ内のノード装置の数が一定の閾値以上ならクラスタの自律再生処理を、閾値未満ならクラスタの自律修復処理を行う。
【０１０４】
＜クラスタ生成、修復処理＞
以下では、図面を参照しながら、ノード装置１００の動作の例を説明する。まず、ノード装置１００が属するクラスタ（自クラスタ）内の監視処理について説明する。監視処理は、主にノード装置１０の機能（Ｆ１）〜（Ｆ９）に関連する。次に、クラスタ内の起点ノードに障害が発生した場合に実行されるクラスタ自律再生処理について説明する。クラスタ自律再生処理は、主にノード装置１００の機能（Ｆ１０）に関連する。次に、クラスタ内の参加ノードに障害が発生した場合に実行されるクラスタ自律修復処理について説明する。クラスタ自律再生処理は、主にノード装置１００の機能（Ｆ１１）〜（Ｆ１２）に関連する。
【０１０５】
図９〜１１を参照しながら、ノード装置１００における監視処理の例を説明する。
図９に示されているクラスタは、クラスタを識別する識別子ＣＩＤが１０であり、以下ではクラスタ１０と呼ぶ。クラスタ１０は、ノード装置の識別子（ＮＩＤ）としてＮＩＤ＝１０〜１４を有する５つのノード装置を含み、起点ノードはＮＩＤ＝１０のノード装置である。
【０１０６】
各ノード装置は、自ノードのシーケンス番号（Ｓｅｑｕｅｎｃｅ  Ｎｕｍｂｅｒ：ＳＮ）を保持する。シーケンス番号（ＳＮ）は、Ｈｅｌｌｏパケットを受信する毎に更新（カウントアップ）される。また、シーケンス番号（ＳＮ）は、クラスタ情報１２８に格納され、ノード装置Ｎ１０のシーケンス番号（ＳＮ）に関する情報は、同じクラスタに属するノード装置にＨｅｌｌｏパケットにてブロードキャスト送信される。
【０１０７】
クラスタ１０の起点ノードであるノード装置Ｎ１０（以下単に、起点ノードＮ１０と呼ぶことがある）は、同じクラスタ１０内の他のノード装置Ｎ１１〜Ｎ１４、すなわちノード装置の識別子ＮＩＤ＝１１〜１４を有する参加ノードのＴＴＬを保持、管理する。そして、受信した参加ノード（ノード装置Ｎ１１〜Ｎ１４）のシーケンス番号（ＳＮ）を監視し、もし更新されていれば、自ノード（起点ノードＮ１０）で管理する、各ノード装置Ｎ１１〜Ｎ１４のＴＴＬをリセットする。すなわち、起点ノードＮ１０は、クラスタ１０の参加ノードＮ１１〜Ｎ１４のいずれかからＨｅｌｌｏパケットを受信すると、現在管理しているそのノード装置に対するＳＮとＨｅｌｌｏパケットに含まれているシーケンス番号（ＳＮ）を比較する。現在管理しているそのノード装置に対するシーケンス番号（ＳＮ）は、前回、そのノード装置からＨｅｌｌｏパケットを受信に伴って設定された値である。よって、そのノード装置に障害が発生していなければシーケンス番号（ＳＮ）の値は更新されているので、そのノード装置に対するＴＴＬはリセットされ、デフォルト値に設定される。
【０１０８】
図１０に示されているＨｅｌｌｏパケット２０２は、クラスタ１０に属するノード装置から送信されるＨｅｌｌｏパケットの例である。
【０１０９】
Ｈｅｌｌｏパケット２０２では、クラスタ情報（ＣＩ）フィールドに、クラスタの識別子ＣＩＤ＝１０と、クラスタ１０に含まれる各ノード装置の識別子とシーケンス番号（ＳＮ）の組、およびｅｎｄフラグが格納されている。Ｈｅｌｌｏパケット２０２のクラスタ情報（ＣＩ）フィールドは次のようである。
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１０、｛＜１１、１＞、＜１２、１＞、＜１３、１＞、＜１４、１＞｝、ｆａｌｓｅ＞
Ｈｅｌｌｏパケット２０２のクラスタ情報（ＣＩ）フィールドは、起点ノードＮ１０が属するクラスタはクラスタ１０であり、ＮＩＤ＝１１〜１４の４つのノード装置を含み、ｅｎｄフラグが「ｆａｌｓｅ」なので、クラスタ１０に含まれるノード装置の数はまだ上限の値（最大クラスタノード数）には達していないことを意味している。
【０１１０】
図１１は、起点ノードＮ１０および参加ノードであるノード装置Ｎ１１〜Ｎ１４のＴＴＬの例を示す図である。図１１に示されているＴＴＬの値はデフォルト値の例である。
【０１１１】
起点ノードＮ１０は、自身が属するクラスタ１０の各ノードのＴＴＬをＴＴＬ１４４に保持する。各参加ノードは、自身が属するクラスタ１０の起点ノードＮ１０のＴＴＬを各ノード装置Ｎ１０のＴＴＬ１４４に保持する。
【０１１２】
図１１では、クラスタ１０に属する全てのノード装置のＴＴＬは２２である。ノード装置のＴＴＬが０になると、そのノード装置の識別子に関する情報はクラスタ情報１２８から削除され、そのノード装置はクラスタ１０から切り離される。
【０１１３】
上述のように、起点ノードＮ１０は、参加ノードからＨｅｌｌｏパケットを受信すると、クラスタ情報１２８に保持されているノード装置の識別子（ＮＩＤ）とそのノード装置のシーケンス番号（ＳＮ）の組の集合（｛＜ＮＩＤ、ＳＮ＞｝）を参照して、Ｈｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに格納されているノード装置のシーケンス番号（ＳＮ）と、自身のノード装置のクラスタ情報１２８に格納されている値とを比較する。そして、両者が異なっていれば、そのノード装置のＴＴＬはリセットされるので、そのノード装置のＴＴＬはデフォルト値のままである。しかし、ノード装置に障害が発生して、シーケンス番号（ＳＮ）が更新されないと、そのノード装置のＴＴＬはＴＴＬ減算部１４２で減算され、１つ減る。
【０１１４】
次に、図１２〜１５を参照して、クラスタ自律再生処理について説明する。
図１２は、図９に示されているクラスタ１０の起点ノードＮ１０で障害が発生した後、クラスタ自律再生処理を行った結果として得られるクラスタ１１を示している。
【０１１５】
起点ノードＮ１０に障害が発生した場合、起点ノードＮ１０から参加ノード（ノード装置Ｎ１１〜Ｎ１４）にＨｅｌｌｏパケットが送信されず、参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されている起点ノード装置１０のシーケンス番号（ＳＮ）は更新されない。一方、参加ノードＮ１１〜Ｎ１４の各々のクラスタ情報１２８に格納されている自ノードのシーケンス番号（ＳＮ）は、そのノード装置がＨｅｌｌｏパケットを送信するごとに更新される（カウントアップされる）。さらに、参加ノードＮ１１〜Ｎ１４の各々のクラスタ情報１２８に格納されている、自ノード以外の参加ノードのシーケンス番号（ＳＮ）は、Ｈｅｌｌｏパケット受信時に更新される。
【０１１６】
図１３は、参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されている情報の例である。
【０１１７】
図１３では、ノード装置Ｎ１０に障害が発生してシーケンス番号（ＳＮ）が更新されないので、ノード装置Ｎ１０のシーケンス番号（ＳＮ）は図１０に示されているＨｅｌｌｏパケット２０２から更新されておらず、他のノード装置Ｎ１１〜Ｎ１４のシーケンス番号は更新されている。参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されているクラスタ情報（ＣＩ）は、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１０、｛＜１０、１＞、＜１１、２３＞、＜１２、２３＞、＜１３、２３＞、＜１４、２３＞｝、ｆａｌｓｅ＞
となっている。
【０１１８】
参加ノード（ノード装置Ｎ１１〜Ｎ１４）の各々は、クラスタ内の起点ノードのＴＴＬをそれぞれのＴＴＬ１４４に保持している。今の場合、起点ノード１０のシーケンス番号（ＳＮ）が更新されていないので、起点ノードＮ１０のＴＴＬを一定時間（たとえば、Ｈｅｌｌｏパケットの送信周期）ごとに減算する。
【０１１９】
図１４は、各参加ノード（ノード装置Ｎ１１〜Ｎ１４）が保持している起点ノード１０のＴＴＬが０になった状況を示す図である。
【０１２０】
図１４に示されているように、各ノード装置のＴＴＬ１４４に格納されている起点ノードＮ１０のＴＴＬ３０４、３０６、３０８、３１０はデフォルト値の「２２」から「０」まで減少する。
【０１２１】
各参加ノード（ノード装置Ｎ１１〜Ｎ１４）は、起点ノードＮ１０のＴＴＬが０になった時点で、クラスタ情報１２８から起点ノードＮ１０の情報を削除する。この時点では、ノード装置Ｎ１１〜Ｎ１４を含むクラスタには起点ノードがない。そこで、クラスタ内のノード装置の数が所定の閾値以上であれば、新たな起点ノードを既存のノード装置Ｎ１１〜Ｎ１４から選ぶことでクラスタを再生する。そして、クラスタを識別する識別子（ＣＩＤ）を、新たに選択された起点ノード装置の識別子（ＮＩＤ）に書換えてクラスタを再生する。本例のように、ノード装置の識別子が数字である場合、クラスタ内の残されたノード装置のうち、識別子（ＮＩＤ）を示す数字が最も小さいものを選んでも良い。所定の閾値としては、最大クラスタノード数の所定の閾値、例えば５０％を例示することができる。５０％以外の数字、たとえば４０％、６０％でも構わない。
【０１２２】
図１５は、新たにノード装置Ｎ１１を起点ノードとしてクラスタを再生するとき、参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されているクラスタ情報（ＣＩ）の例である。このとき、参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されているクラスタ情報（ＣＩ）は、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１１、｛＜１１、２３＞、＜１２、２３＞、＜１３、２３＞、＜１４、２３＞｝、ｆａｌｓｅ＞
のように変更され、特にクラスタを識別する識別子（ＣＩＤ）が、ＣＩＤ＝１１と変更されている。
【０１２３】
これによって、ノード装置１１は起点ノードとなり、ノード装置Ｎ１１〜Ｎ１４を含むクラスタは、クラスタを識別する識別子１１を有するクラスタとして再生される。
【０１２４】
また、クラスタ内のノード装置の数が所定の閾値未満あれば、参加ノードＮ１１〜Ｎ１４のクラスタ情報１２８に格納されているクラスタ情報（ＣＩ）をクリアして、クラスタを消滅させる。つまり、ノード装置Ｎ１１〜Ｎ１４はフリーノードとなる。
【０１２５】
図１６〜２０を参照して、クラスタの自律修復処理の例について説明する。
図１６は、図９に示されているクラスタ１０の参加ノードＮ１３で障害が発生した後、クラスタ自律修復処理を行った結果として得られるクラスタ１０と、フリーノードであるノード装置Ｎ１４（以下、単にフリーノードＮ１４と呼ぶことがある）を示している。参加ノード１３に障害が発生した場合、起点ノードＮ１０にノード装置Ｎ１３とノード装置Ｎ１４から送信されたＨｅｌｌｏパケットが到達しない。つまり、起点ノードＮ１０のクラスタ情報１２８に格納されている情報のうち、ノード装置Ｎ１３とノード装置Ｎ１４のシーケンス番号（ＳＮ）が更新されなくなる。
【０１２６】
図１７は、起点ノードＮ１０のクラスタ情報１２８に格納されている情報のうち、ノード装置Ｎ１３とノード装置Ｎ１４のシーケンス番号（ＳＮ）が更新されない状況の例を説明する図である。起点ノードＮ１０のクラスタ情報１２８に格納されている情報は、当初の
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１０、｛＜１０、１＞、＜１１、１＞、＜１２、１＞、＜１３、１＞、＜１４、１＞｝、ｆａｌｓｅ＞
から
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１０、｛＜１０、２３＞、＜１１、２３＞、＜１２、２３＞、＜１３、１＞、＜１４、１＞｝、ｆａｌｓｅ＞
と、ノード装置Ｎ１０〜Ｎ１２に関するシーケンス情報（ＳＮ）は更新されるが、ノード装置Ｎ１３とノード装置Ｎ１４のシーケンス番号（ＳＮ）が更新されない。起点ノードＮ１０は、シーケンス情報（ＳＮ）が更新されないノード装置Ｎ１３とノード装置Ｎ１４のＴＴＬを一定周期で減算するので、起点ノードＮ１０のＴＴＬ１４４に格納されている参加ノードＮ１１〜Ｎ１３のＴＴＬはデフォルト値の「２２」のままであるが、ノード装置Ｎ１３とノード装置Ｎ１４のＴＴＬは、いずれ「０」になる。
【０１２７】
図１８は、起点ノードＮ１０のＴＴＬ１４４に格納されているノード装置Ｎ１３とノード装置Ｎ１４のＴＴＬが「０」になったときの図である。ノード装置Ｎ１３とノード装置Ｎ１４のＴＴＬはデフォルト値の「２２」のままである。
【０１２８】
起点ノードＮ１０は、ＴＴＬ３１が「０」になったノード装置Ｎ１３とノード装置Ｎ１４に関する情報を自身のクラスタ情報１２８から削除し、その旨をＨｅｌｌｏパケットでブロードキャスト送信する。
【０１２９】
図１９は、起点ノードＮ１０から送信されるＨｅｌｌｏパケットの例である。図１９に示されているＨｅｌｌｏパケット２１０のクラスタ情報（ＣＩ）は、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１０、｛＜１０、２４＞、＜１１、２４＞、＜１２、２４＞｝、ｆａｌｓｅ＞
となっている。Ｈｅｌｌｏパケット２１０のクラスタ情報（ＣＩ）は、クラスタ１０がノード装置Ｎ１０〜Ｎ１２で構成されることを示している。
【０１３０】
起点ノードＮ１０からのＨｅｌｌｏパケットで、ノード装置Ｎ１３とノード装置Ｎ１４がクラスタ１０から削除されたことを認識したノード装置Ｎ１１とノード装置Ｎ１２はそれぞれ、自身のクラスタ情報１２８に格納されている情報から、ノード装置Ｎ１３とノード装置Ｎ１４に関する情報を削除する。このようにして、ノード装置Ｎ１３とノード装置Ｎ１４はクラスタ１０から切り離され、クラスタ１０は再生される。
【０１３１】
ノード装置Ｎ１４は、起点ノード１０からのＨｅｌｌｏパケットが届かなくなり、自ノードで管理するクラスタ情報１２８のノード装置Ｎ１０に関するシーケンス番号（ＳＮ）が更新されなくなる。ノード装置Ｎ１４は、シーケンス番号（ＳＮ）が更新されない起点ノードＮ１０のＴＴＬを一定周期で減算する。
【０１３２】
図２０は、ノード装置Ｎ１４のＴＴＬ３１４に格納されているノード装置Ｎ１０に関するシーケンス番号（ＳＮ）が「０」になった様子を示す図である。
そして、ノード装置Ｎ１４は、起点ノードＮ１０のＴＴＬが「０」になった時点でクラスタ情報１２８から起点ノードＮ１０に関する情報を削除する。
【０１３３】
この時、ノード装置Ｎ１４が属するクラスタには起点ノードがない。そこで、ノード装置Ｎ１４を含むクラスタ内のノード装置の数が所定の閾値以上であれば、そのクラスタに属するノード装置から起点ノードを選択する。そして、クラスタを識別する識別子（ＣＩＤ）を、新たに選択された起点ノードを識別する識別子に置き換えることで、クラスタを再生する。本例のように、ノード装置の識別子が数字である場合、クラスタ内の残されたノード装置のうち、識別子（ＮＩＤ）を示す数字が最も小さいものを選んでも良い。所定の閾値としては、最大クラスタノード数の所定の閾値、例えば５０％を例示することができる。５０％以外の数字、たとえば４０％、６０％でも構わない。
【０１３４】
また、ノード装置Ｎ１４を含むクラスタ内のノード装置の数が所定の閾値未満あれば、参加ノードのクラスタ情報１２８に格納されているクラスタ情報（ＣＩ）をクリアして、クラスタを消滅させる。このとき、ノード装置Ｎ１４はフリーノードまたは起点ノードとなる。
【０１３５】
＜クラスタ統合処理＞
図２１〜２５を参照して、クラスタ統合処理について説明する。
【０１３６】
クラスタ形成処理の第１段階であるクラスタ生成処理から第２段階のクラスタ統合処理への移行は、各ノード装置単位で行われる。各ノード装置１００は所属するクラスタ内のノード装置の数の変化を監視し、所定の時間にわたりクラスタ内のノード装置の数の変化がない場合にクラスタ統合処理を開始する。例えばクラスタ生成処理でクラスタへの参加した後、属するクラスタのノード数の数が変化しなくなってから一定時間待機する。一定時間待機した時点で、クラスタ内のノード数が少ないクラスタは、ノード数が多いクラスタより先にタイムアウトになり、クラスタ統合段階へ移行しクラスタ統合要求が先に届く。すなわち、隣接するクラスタにおいてクラスタ内のノード数が少ないクラスタから優先的にクラスタ統合処理が開始される。
【０１３７】
図２１は、複数のクラスタがある場合、どのクラスタからクラスタ統合処理が開始されるのかを決定するクラスタ統合優先順位決定処理の概略を説明する図である。
【０１３８】
図２１に示されているように、クラスタ１はノード装置の識別子（ＮＩＤ）がＮＩＤ＝１から５の５つのノード装置を、クラスタ６はノード装置の識別子（ＮＩＤ）がＮＩＤ＝６から８の３つのノード装置を、クラスタ９はノード装置の識別子（ＮＩＤ）がＮＩＤ＝９から１２の４つのノード装置を含んでいる。クラスタ１の起点ノードはＮＩＤ＝１のノード装置、クラスタ６の起点ノードはＮＩＤ＝６のノード装置、クラスタ９の起点ノードはＮＩＤ＝９のノード装置である。
【０１３９】
この場合、クラスタ６は、クラスタが含むノード装置の数が最小である。よって、クラスタ６が、クラスタ１および９より先にクラスタ統合段階に移行する。クラスタ形成処理の第１段階であるクラスタ生成処理から第２段階のクラスタ統合処理への移行は、第１段階で設定される最大クラスタノード数の値を変更し、さらにノード装置１０のクラスタ情報１２８に格納されているｅｎｄフラグを「ｔｒｕｅ」から「ｆａｌｓｅ」に変更することによって行われる。
【０１４０】
図２２は、クラスタ統合先候補通知処理の概略を説明する図である。
クラスタ統合処理は、隣接するクラスタ同士で実施される。隣接クラスタとのＨｅｌｌｏパケットの送受信は、隣接するクラスタに属するノード装置であって、ノード装置同士も互いに隣接する２つのノード装置である対向ノード装置の間で行われる。たとえば、図２２に示されているノードであれば、クラスタ１に属するＮＩＤ＝３のノード装置と、クラスタ６に属するＮＩＤ＝７、８のノード装置の組がそのような対向ノード装置である。
【０１４１】
図２２に示されているように、隣接するクラスタに属するノード装置からのＨｅｌｌｏパケットを受け取ると、受信したノード装置は自ノードで管理するクラスタ情報（ＣＩ)とＨｅｌｌｏパケットに含まれるクラスタ情報(ＣＩ)から両方のクラスタのノード装置の数を足し合わせ、最大クラスタノード数に達しているかどうかを判定する。もし、足し合わせたノード数が最大クラスタノード数以下であれば、２つのクラスタは統合可能であると判定される。
【０１４２】
この時、ノード装置１０自身のクラスタ統合先候補通知部１１４は、自身が属するクラスタと隣接するクラスタのどちらがマスタでどちらがスレーブであるかを決定する。本例では、自身が属するクラスタと隣接するクラスタの識別子（ＣＩＤ）の値を比較し、クラスタの識別子（ＣＩＤ）の値が小さい方のクラスタをマスタ、大きいクラスタをスレーブとする。つまり、クラスタ１がマスタ、クラスタ６がスレーブとなる。
【０１４３】
クラスタ６（スレーブ側クラスタ）のＮＩＤ＝７のノード装置がクラスタ１（マスタ側クラスタ）のＮＩＤ＝３のノード装置からＨｅｌｌｏパケットを受けて、クラスタ６とクラスタ１が統合可能であると判定されると、ＮＩＤ＝３のノード装置のクラスタ統合要求更新部１１８は、自身のマージクラスタリスト１３２を、
＜ＳＩＤ、｛＜ＮＩＤ、ＳＮ＞｝＞＝＜３、｛＜、＞｝＞
のように変更する。
【０１４４】
マージクラスタリスト１３２の情報は、クラスタ６のＮＩＤ＝７のノード装置が送信するＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに反映される。この情報はハローパケット生成部１３８がマージクラスタリスト１３２から取得する。マージクラスタリスト１３２からの情報に基づいて、クラスタ６のＮＩＤ＝７のノード装置が送信するＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドには、「＜３、｛＜、＞｝＞」と格納され、送信部１４０からブロードキャスト送信される。
【０１４５】
クラスタ６のＮＩＤ＝７のノード装置からクラスタ６内にブロードキャスト送信されたＨｅｌｌｏパケットは、ＮＩＤ＝７のノード装置に隣接するＮＩＤ＝８のノード装置を経て、クラスタ６の起点ノードであるＮＩＤ＝６のノード装置によって受信される。
【０１４６】
ＮＩＤ＝６のノード装置のクラスタ要求受付部１１６では、他クラスタからのクラスタ統合先候補通知を受信していないかを判定する。この判定は、ＮＩＤ＝６のノード装置１０のマージクラスタリスト１３２のＳＩＤに既に値が格納されているかどうかで判定することができる。もし、ＮＩＤ＝６のノード装置１０のマージクラスタリスト１３２のＳＩＤに値が設定されていなければ、クラスタ統合先候補通知を受け付け、マージクラスタリスト１３２のＳＩＤに、クラスタ６に隣接するクラスタ１のノード装置の識別子を設定する。つまり、ＮＩＤ＝６のノード装置１０のマージクラスタリスト１３２では、ＳＩＤ＝３と設定される。
【０１４７】
次に、ＮＩＤ＝６のノード装置１０のクラスタ統合要求更新部１１８は、自身が属するクラスタ６内の全ノードに対し、クラスタ統合要求中である事を通知するようなＨｅｌｌｏパケットをハローパケット生成部１３８に生成させる。具体的には、マージクラスタリスト１３２のノード装置の識別子にスレーブのクラスタの起点ノード、すなわちＮＩＤ＝６のノード装置の識別子を設定し、それを用いたＨｅｌｌｏパケットを生成する。このＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドは、
＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜６、｛＜６、ｘ１＞、＜７、ｘ２＞、＜８、ｘ３＞｝、ｆａｌｓｅ＞
が格納される。ｘ６、ｘ７、ｘ８は整数である。また、マージクラスタリスト（ＭＣＬ）フィールドには、
＜ＳＩＤ、｛ＮＩＤ｝＞＝＜３、｛６｝＞
が格納される。
【０１４８】
その後、ＮＩＤ＝６のノード装置１０のハローパケット生成部１３８で生成されたＨｅｌｌｏパケットは、送信部１４０から送信される。
ＮＩＤ＝６のノード装置からＨｅｌｌｏパケットを受けたスレーブのクラスタ６内の各ノード装置は、Ｈｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに、自身が属するクラスタの起点ノードを示す値、すなわちＮＩＤ＝６のノード装置の識別子が設定されていることで、クラスタ統合要求を受付けたこと認識する。そして、マージクラスタリスト１３２のノード装置の識別子の組｛ＮＩＤ｝に自身のノード装置の識別子を追加し、自身のノード装置の識別子が追加されたマージクラスタリスト（ＭＣＬ）フィールドを含むＨｅｌｌｏパケットを送信する。
【０１４９】
最終的にスレーブ側クラスタの全ノードがＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子の集合（｛ＮＩＤ｝）にリストアップされる。
【０１５０】
ＮＩＤ＝７のノード装置によりＮＩＤ＝３のノード装置に向けて送信されるＨｅｌｌｏパケットの例では、クラスタ情報（ＣＩ）フィールドとマージクラスタリスト（ＭＣＬ）フィールドにはそれぞれ、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜６、｛＜６、ｘ６＞、＜７、ｘ７＞、＜８、ｘ８＞｝、ｆａｌｓｅ＞
ＭＣＬ：＜ＳＩＤ、｛ＮＩＤ｝＞＝＜３、｛６、７、８｝＞
が格納される。
【０１５１】
ＮＩＤ＝３のノード装置は、クラスタ統合要求通知に含まれるマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子の集合（｛ＮＩＤ｝）の要素数と、クラスタ情報（ＣＩ）フィールドに含まれるノード装置の数が一致するかを判定する。もし、両者が一致すれば、クラスタ統合リスト生成部１２０はマージクラスタリスト（ＭＣＬ）に基づいて、ＮＩＤ＝３のノード装置のマージノードリスト１３４を変更する。そして、ＮＩＤ＝３のノード装置のハローパケット生成部１３８は、クラスタ情報（ＣＩ）フィールド、マージノードリスト（ＭＮＬ）フィールド、マージクラスタリスト（ＭＣＬ）フィールドがそれぞれ、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１、｛＜１、ｘ１＞、＜２、ｘ２＞、＜３、ｘ３＞、＜４、ｘ４＞、＜５、ｘ５＞｝、ｆａｌｓｅ＞
ＭＮＬ：＜｛ＮＩＤ｝＞＝＜｛６、７、８｝＞
ＭＣＬ：＜ＳＩＤ、｛ＮＩＤ｝＞＝＜、｛｝＞
であるようなＨｅｌｌｏパケットを生成し、ＮＩＤ＝３のノード装置の送信部１４０からブロードキャスト送信する。このとき、クラスタ１内で送受信されるＨｅｌｌｏパケットはクラスタ統合要求通知としての意味を持つ。ｘ１、ｘ２、ｘ３、ｘ４、ｘ５は整数である。
【０１５２】
図２３は、マスタ側クラスタであるクラスタ１のＮＩＤ＝３のノード装置がＨｅｌｌｏパケットをブロードキャスト送信した後の、クラスタ１内の各ノード装置の動作の例を示す図である。
【０１５３】
マスタ側クラスタであるクラスタ１の起点ノード（ＮＩＤ＝１のノード装置）は、他クラスタからのクラスタ統合先候補通知を受信していないか、及び、マージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子の組（｛ＮＩＤ｝）の要素数と自身が属するクラスタ内のノード装置の数の合計が最大クラスタノード数以下であるかを確認する。もし、これらの条件を満たす場合は、クラスタ情報（ＣＩ）にマージノードリスト（ＭＮＬ）フィールドに含まれるノード装置を追加することでクラスタ統合を実施する。そして、ＮＩＤ＝１のノード装置のハローパケット生成部１３８は、クラスタ情報（ＣＩ）フィールド、マージノードリスト（ＭＮＬ）フィールド、マージクラスタリスト（ＭＣＬ）フィールドがそれぞれ、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１、｛＜１、ｘ１＞、＜２、ｘ２＞、＜３、ｘ３＞、＜４、ｘ４＞、＜５、ｘ５＞、＜６、ｘ６＞、＜７、ｘ７＞、＜８、ｘ８＞｝、ｆａｌｓｅ＞
ＭＮＬ：＜｛ＮＩＤ｝＞＝＜｛｝＞
ＭＣＬ：＜ＳＩＤ、｛ＮＩＤ｝＞＝＜、｛｝＞
であるようなＨｅｌｌｏパケットを生成し、送信部１４０からブロードキャスト送信する。
【０１５４】
図２４は、マスタ側クラスタであるクラスタ１のＮＩＤ＝３のノード装置が上記のようなＨｅｌｌｏパケットをブロードキャスト送信した後の、クラスタ１内の各ノード装置の動作の例を示す図である。
【０１５５】
マスタ側クラスタであるクラスタ１の起点ノード（ＮＩＤ＝１のノード装置）は、他クラスタからのクラスタ統合先候補通知を受信していないか、及び、マージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子の組（｛ＮＩＤ｝）の要素数と自身が属するクラスタ内のノード装置の数の合計が最大クラスタノード数以下であるかを確認する。もし、これらの条件を満たす場合は、クラスタ情報（ＣＩ）にマージノードリスト（ＭＮＬ）フィールドに含まれるノード装置を追加することでクラスタ統合を実施する。そして、ＮＩＤ＝１のノード装置のハローパケット生成部１３８は、クラスタ情報（ＣＩ）フィールド、マージノードリスト（ＭＮＬ）フィールド、マージクラスタリスト（ＭＣＬ）フィールドがそれぞれ、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１、｛＜１、ｘ１＞、＜２、ｘ２＞、＜３、ｘ３＞、＜４、ｘ４＞、＜５、ｘ５＞、＜６、ｘ６＞、＜７、ｘ７＞、＜８、ｘ８＞｝、ｆａｌｓｅ＞
ＭＮＬ：＜｛ＮＩＤ｝＞＝＜｛｝＞
ＭＣＬ：＜ＳＩＤ、｛ＮＩＤ｝＞＝＜、｛｝＞
であるようなＨｅｌｌｏパケットを生成する。また、マージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子の組（｛ＮＩＤ｝）の要素数と自身が属するクラスタ内のノード装置の数の合計が最大クラスタノード数を超える場合には、ｅｎｄフラグは、「ｔｒｕｅ」となり、クラスタ統合は実施されない。
【０１５６】
図２５は、マスタ側クラスタであるクラスタ１の起点ノード（ＮＩＤ＝１のノード装置）が、上記のようなクラスタ情報（ＣＩ）フィールドを含むＨｅｌｌｏパケットを送信した後の、ノード装置の動作を説明する図である。
【０１５７】
マスタ側クラスタの起点ノード（ＮＩＤ＝１のノード装置）からＨｅｌｌｏパケットが送信されると、マスタ側クラスタに属していた各ノード装置（ＮＩＤ＝１、２、３、４、５のノード装置）は、クラスタ情報（ＣＩ）フィールドに自身が管理するマージノードリスト１３４に格納されているノード装置の識別子（ＮＩＤ）が含まれていればクラスタ統合されたと認識しマージノードリスト１３４に格納されているノード装置の識別子（ＮＩＤ）から一致したノード装置の識別子（ＮＩＤ）を削除する。そして、自身のクラスタ情報１２８を書き換える。すなわち、クラスタ情報１２８には、
ＣＩ：＜ＣＩＤ、｛＜ＮＩＤ、ＳＮ＞｝、ｅｎｄ＞＝＜１、｛＜１、ｘ１＞、＜２、ｘ２＞、＜３、ｘ３＞、＜４、ｘ４＞、＜５、ｘ５＞、＜６、ｘ６＞、＜７、ｘ７＞、＜８、ｘ８＞｝、ｆａｌｓｅ＞
なる情報が格納される。
【０１５８】
図２６はノード装置１０のハードウェア構成の例を示す図である。ノード装置１００はコンピュータにより実現される。
【０１５９】
ノード装置１００、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４００、ＰＨＹ（Ｐｈｙｓｉｃａｌ  Ｌａｙｅｒ）チップ４０２、タイマＩＣ４０４、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０６、フラッシュメモリ４０８、無線モジュール４１０を含む。ＭＰＵ４００、ＰＨＹチップ４０２、タイマＩＣ４０４、ＤＲＡＭ４０６、フラッシュメモリ４０８、無線モジュール４１０は互いにバス４１２（４１２ａ〜４１２ｃ）によって接続され、ＭＰＵ４００の管理の下で各種のデータを相互に授受することができる。
【０１６０】
ＭＰＵ４００は、このコンピュータ全体の動作を制御する演算処理装置であり、コンピュータの制御処理部として機能する。ＭＰＵ４００は、ノード種別判定部１０４、参加処理部１０６、クラスタ情報更新部１０８、クラスタ生成部１１０、フリーノードリスト生成部１１２、クラスタ統合先候補通知部１１４、クラスタ統合要求受付部１１６、クラスタ統合要求更新部１１８、クラスタ統合リスト生成部１２０、クラスタ統合処理部１２２、クラスタ統合リスト通知部１２４、設定部１３６、ハローパケット生成部１３８、ＴＴＬ減算部１４２として動作する。
【０１６１】
フラッシュメモリ４０８は、ファームウェアなどの所定の基本制御プログラムが予め記録されている不揮発性メモリである。ＭＰＵ４００は、この基本制御プログラムをコンピュータとしてのノード装置の起動時に読み出して実行することにより、このコンピュータとしてのノード装置の各構成要素の動作制御が可能になる。
【０１６２】
ＤＲＡＭ４０６は、ＭＰＵ４００が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。ＤＲＡＭ４０６は、ノード種別情報１２６、クラスタ情報１２８、フリーノードリスト１３０、マージクラスタリスト１３２、マージノードリスト１３４、ＴＴＬ１４４、ルーティングテーブルを記憶できる。ただし、ノード種別情報１２６はフラッシュメモリ４０８に格納されても良い。この場合、起動後に、フラッシュメモリ４０８に格納されているノード種別情報１２６がＤＲＡＭ４０６に読み込まれる。
【０１６３】
ＰＨＹチップ４０２や無線モジュール４１０は、受信部１０２や送信部１４０として動作する。ＰＨＹチップ４０２はオプションであり、ＰＨＹチップ４０２を備えることによって、回線を用いた通信を行うことができる。
【０１６４】
タイマＩＣ４０４は、Ｈｅｌｌｏパケットを送信する時刻や、装置１０が属しているクラスタが含むノード装置の数が変化しない時間などを計測する。
【０１６５】
尚、ファームウェア等のプログラムは、コンピュータ読み取り可能な記録媒体に記録されてノード装置１０に提供されても良い。ＭＰＵ４００は、コンピュータ読み取り可能な記録媒体に記録されている所定の制御プログラムを読み出して実行することもできる。なお、コンピュータ読み取り可能な記録媒体としては、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格のコネクタが備えられているフラッシュメモリ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などがある。またプログラムはネットワークからＰＨＹチップ４０２や無線モジュール４１０を介してダウンロードされることによりノード装置１０にインストールされても良い。
【０１６６】
＜ノード装置における処理＞
図２７は、ノード種別判定部１０４の動作を説明するフローチャートである。
【０１６７】
ステップＳ１０２で、ノード種別判定部１０４は、Ｈｅｌｌｏパケットが受信部１０２から入力されると、ノード種別情報１２６を参照して、ノード装置１０自身がフリーノードであるかどうかの判定をする。もしこの判定の結果がＹｅｓ、すなわちノード装置１０自身がフリーノードであればステップＳ１０４に進む。もしこの判定の結果がＮｏ、すなわちノード装置１０自身がフリーノードでなければステップＳ１０６に進む。
【０１６８】
ステップＳ１０４では、ノード装置１０自身がフリーノードであるという情報を含むクラスタ情報（ＣＩ）を参加処理部１０６に通知する。ステップＳ１０４の処理が終わると、ノード種別判定部１０４の処理を終了する。
【０１６９】
ステップＳ１０６では、ノード装置１０自身がフリーノードでないという情報を含むクラスタ情報（ＣＩ）をクラスタ情報更新部１０８に通知する。
【０１７０】
ステップＳ１０６の次のステップＳ１０８では、ノード種別情報１２６を参照して、ノード装置１０自身が起点ノードであるかどうかを判定する。もしこの判定の結果がＹｅｓ、すなわちノード装置１０自身が起点ノードであればステップＳ１１０に進む。もしこの判定の結果がＮｏ、すなわちノード装置１０自身が起点ノードでなければステップＳ１１６に進む。
【０１７１】
ステップＳ１１０では、フリーノードリスト（ＦＮＬ）をクラスタ生成部１１０に通知する。
【０１７２】
ステップＳ１１２では、マージクラスタリスト（ＭＣＬ）をクラスタ統合要求受付部１１６に通知する。
【０１７３】
ステップＳ１１４では、マージノードリスト（ＮＭＬ）をクラスタ統合処理部１２２に通知する。ステップＳ１１０とステップＳ１１２とステップＳ１１４の処理の順序は、任意である。ステップＳ１１４の処理が終わると、ノード種別判定部１０４の処理を終了する。
【０１７４】
ステップＳ１１６では、フリーノードリスト（ＦＮＬ）をフリーノードリスト生成部１１２に通知する。
【０１７５】
ステップＳ１１８では、マージクラスタリスト（ＭＣＬ）をクラスタ統合要求更新部１１８に通知する。
【０１７６】
ステップＳ１２０では、マージノードリスト（ＮＭＬ）をクラスタ統合リスト通知部１２４に通知する。ステップＳ１１６とステップＳ１１８とステップＳ１２０の処理の順序は、任意である。ステップＳ１１４の処理が終わると、ノード種別判定部１０４の処理を終了する。
【０１７７】
図２８は、参加処理部１０６の動作の例を示すフローチャートである。
ステップＳ１３０では、参加処理部１０６は、フリーノードリスト１３０に自身のエントリがあるかどうかを判定する。フリーノードリスト１３０に自身のエントリがある場合はステップＳ１４０に進む。フリーノードリスト１３０に自身のエントリがない場合はステップＳ１３２に進む。
【０１７８】
ステップＳ１３２では、Ｈｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれているｅｎｄフラグが「ｔｒｕｅ」であるかどうかを判定する。ｅｎｄフラグが「ｔｒｕｅ」である場合ステップＳ１３６に進む。ｅｎｄフラグが「ｔｒｕｅ」でない場合は、ステップＳ１３４に進む。
【０１７９】
ステップＳ１３４では、クラスタ内のノード数が最大クラスタノード数に達していないので、参加処理部１０６は、自身のノード装置の識別子（ＮＩＤ）を、クラスタ情報（ＣＩ）に含まれているクラスタ識別子（ＣＩＤ）に対応つけてフリーノードリスト１３０に格納する。ステップＳ１３４の処理が終わると、参加処理部の処理が終了する。
【０１８０】
ステップＳ１３６で参加処理部１０６は、自身のノード装置が起点ノードとして動作できるようにクラスタ情報１２８を生成する。このとき、クラスタ情報１２８には、自身のノード装置の識別子がクラスタ識別子（ＣＩＤ）として記憶され、新たに生成されたクラスタには自身のノードが含まれる。そして、ステップＳ１３８に進む。
【０１８１】
ステップＳ１３８で参加処理部１０６は、自身のノード装置の設定を起点ノードに変更して、ステップＳ１３８の処理が終わると、参加処理部の処理が終了する。
【０１８２】
一方、フリーノードリスト１３０に自身のエントリがある場合、参加処理部１０６は、ステップＳ１４０で、クラスタ情報１２８に自身のノード装置の識別子が含まれているかを確認する。クラスタ情報１２８に自身のノード装置の識別子が含まれている場合、ステップＳ１４２に進む。クラスタ情報１２８に自身のノード装置の識別子が含まれていない場合、ステップＳ１４６に進む。
【０１８３】
ステップＳ１４２で参加処理部１０６は、フリーノードリスト１３０から自身のノード装置のエントリを削除し、クラスタ情報（ＣＩ）フィールドに含まれているノードの情報をクラスタ情報１２８に格納する。そして、ステップＳ１４４に進む。
【０１８４】
ステップＳ１４４で参加処理部１０６は、自身のノード装置の設定を参加ノードに変更して、ステップＳ１３８の処理が終わると、参加処理部の処理が終了する。
【０１８５】
ステップＳ１４０の判定で、クラスタ情報１２８に自身のノード装置の識別子が含まれていない場合はステップＳ１４６の処理を行う。
【０１８６】
ステップＳ１４６では、ｅｎｄフラグが「ｔｒｕｅ」であるかを判定する。この判定の結果がＹｅｓであれば、ステップＳ１４８に進む。この判定がＮｏであれば、参加処理部の処理が終了する。
【０１８７】
ステップＳ１４８では、ノード装置１０が属するクラスタのノード装置の数が上限に達しているので、フリーノードリスト１３０のエントリを削除し、参加処理部の処理が終了する。
【０１８８】
図２９Ａ〜２９Ｂは、クラスタ情報更新部１０８の動作の例を示すフローチャートである。
【０１８９】
各ノードは受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）のクラスタ識別子（ＣＩＤ）が、自身のノード装置のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）と同じ場合には次のような処理を行う。すなわち、ノード装置の識別子（ＮＩＤ）毎に受信したシーケンス番号（ＳＮ）と自ノードで管理するクラスタ情報１２８に含まれるシーケンス番号（ＳＮ）を比較し、監視対象ノードのシーケンス番号（ＳＮ）が更新されていれば監視対象ノードのＴＴＬをリセットする。監視対象ノードは、自身のノード装置が起点ノードである場合は、クラスタの参加ノードであり、自身のノード装置が起点ノード以外の参加クラスタの場合は起点ノードである。さらに、クラスタ内のノード装置の数に変化があった時点から一定時間のタイミングを取るためのタイマを設定する。受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）を自身のノード装置のクラスタ情報１２８にマージすることで、自身のノード装置が属するクラスタの全ノードを認識する。また、自身のノード装置のフリーノードリスト１３０について、クラスタ情報１２８に追加されたノード装置に対応するエントリは削除し、フリーノードからの参加要求が無くなった時点から一定時間のタイミングを取るためのタイマを設定する。自身のノード装置のマージノードリスト１３４に格納されているノード装置の識別子（ＮＩＤ）が、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）に含まれていれば、クラスタ統合（マスタ側）が完了したと認識し、自身のノード装置のマージノードリスト１３４に格納されているエントリを削除する。
【０１９０】
各ノードは受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）のクラスタ識別子（ＣＩＤ）が自身のノード装置のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）と異なる場合に以下の処理を行う。すなわち、自身のノード装置のマージクラスタリスト１３２と、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）に含まれているノード装置の識別子（ＮＩＤ）を確認し、自身のノード装置の識別子が含まれていればクラスタ統合（スレーブ側）が完了したと認識し、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）を自身のノード装置のクラスタ情報１２８に置き換え、自身のノード装置のマージクラスタリスト１３２に格納されているエントリを削除する。クラスタ統合中でなければクラスタ統合先候補通知部１１４へノード種別判定部１０４より受け取った受信したＨｅｌｌｏパケットに含まれているクラスタ情報（ＣＩ）を渡す。
【０１９１】
ステップＳ１５０でクラスタ情報更新部１０８は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドのクラスタ識別子（ＣＩＤ）が、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）が一致するかどうかを判定する。もし、両者が一致する場合は、ステップＳ１５２に進む。また、もし両者が一致しなければ、ステップＳ１８８に進む。
【０１９２】
ステップＳ１５２でクラスタ情報更新部１０８は、自ノードが起点ノードであるかどうかを判定する。もしこの判定の結果がＹｅｓ、すなわち自ノードが起点ノードである場合には、ステップＳ１６０に進む。また、もしこの判定の結果がＮｏ、すなわち自ノードが起点ノードではない場合には、ステップＳ１５４に進む。
【０１９３】
ステップＳ１５４でクラスタ情報更新部１０８は、自ノードのクラスタ情報１２８に格納されている起点ノードのシーケンス番号（ＳＮ）を取得する。
【０１９４】
ステップＳ１５４の次のステップＳ１５６でクラスタ情報更新部１０８は、自ノードのクラスタ情報１２８に格納されている起点ノードのシーケンス番号（ＳＮ）が更新または追加されているかどうかを判定する。ステップＳ１５６の判定の結果がＹｅｓ、すなわち自ノードのクラスタ情報１２８に格納されている起点ノードのシーケンス番号（ＳＮ）が更新または追加されているか場合には、ステップＳ１５８に進む。また、ステップＳ１５６の判定の結果がＮｏ、すなわち自ノードのクラスタ情報１２８に格納されている起点ノードのシーケンス番号（ＳＮ）が更新または追加されていない場合には、ステップＳ１７２に進む。
【０１９５】
ステップＳ１５８でクラスタ情報更新部１０８は、自ノードのＴＴＬ１４４に格納されている起点ノードのＴＴＬの値をリセットし、デフォルト値に戻る。同時に、自ノードのクラスタ情報１２８に格納されているシーケンス番号（ＳＮ）の値を、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれているシーケンス番号（ＳＮ）の値に更新する。そして、Ｓ１７２に進む。
【０１９６】
ステップＳ１５２の判定でＹｅｓ、すなわち自ノードが起点ノードである場合、まず、ステップＳ１６０で自身が属するクラスタの全参加ノードを取得して、未処理の参加ノードを取得する。
【０１９７】
ステップＳ１６０の次のステップＳ１６２でクラスタ情報更新部１０８は、未処理の参加ノードが存在するかどうかを判定する。もしこの判定の結果がＮｏ、すなわち未処理の参加ノードが存在しない場合には、ステップＳ１７２に進む。もしこの判定の結果がＹｅｓ、すなわち未処理の参加ノードが存在する場合には、ステップＳ１６４に進む。
【０１９８】
ステップＳ１６４でクラスタ情報更新部１０８は、自ノードのクラスタ情報１２８に格納されている参加ノードのシーケンス番号（ＳＮ）を取得する。
ステップＳ１６４の次のステップＳ１６６でクラスタ情報更新部１０８は、自身が起点ノードであるクラスタの参加ノード（起点ノード以外のノード装置）のシーケンス番号（ＳＮ）が更新または追加されているかどうかを判定する。この判定の結果がＮｏ、すなわち自身が起点ノードであるクラスタの参加ノード（起点ノード以外のノード装置）のシーケンス番号（ＳＮ）が更新または追加されていない場合には、ステップＳ１７０に進む。また、この判定の結果がＹｅｓ、すなわち自身が起点ノードであるクラスタの参加ノード（起点ノード以外のノード装置）のシーケンス番号（ＳＮ）が更新または追加されている場合には、ステップＳ１６８に進む。
【０１９９】
ステップＳ１６８でクラスタ情報更新部１０８は、自ノードのＴＴＬ１４４に格納されている参加ノードのＴＴＬの値をリセットし、デフォルト値に戻る。同時に、自ノードのクラスタ情報１２８に格納されているシーケンス番号（ＳＮ）の値を、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれているシーケンス番号（ＳＮ）の値に更新する。そして、ステップＳ１７０に進む。
【０２００】
ステップＳ１７０では、参加ノードを処理済に設定する。そしてステップＳ１７２に進む。
【０２０１】
ステップＳ１７２でクラスタ情報更新部１０８は、Ｈｅｌｌｏパケットに含まれるクラスタ識別子（ＣＩＤ）で識別されるクラスタのノード数と、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）で識別されるクラスタのノード数で違いがあるかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ１７４に進む。この判定の結果がＮｏであれば、ステップＳ１７６に進む。
【０２０２】
ステップＳ１７４でクラスタ情報更新部１０８は、クラスタ識別子（ＣＩＤ）で識別されるクラスタのノード数に変化があった時点から一定時間のタイムアウトを計測するタイマを設定する。そして、ステップＳ１７６に進む。
【０２０３】
Ｓ１７６では、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノードの識別子（｛ＮＩＤ｝）と、自身のクラスタ情報１２８に格納されているクラスタの識別子（ＣＩＤ）で認識されるクラスタに含まれるノードの識別子（｛ＮＩＤ｝）を結合させる（マージする）。このことによって、クラスタ識別子（ＣＩＤ）で識別されるクラスタに含まれる全てのノード装置を認識する。
【０２０４】
次のステップＳ１７８でクラスタ情報更新部１０８は、自身のノード装置のフリーノードリスト１３０に含まれるクラスタ識別子（ＣＩＤ）で識別されるクラスタに参加させたいノード装置の識別子（ＮＩＤ）のリストに、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）で識別されるクラスタに含まれるノード装置の識別子（ＮＩＤ）が含まれているかどうかを判定する。
【０２０５】
ステップＳ１７８の判定の結果がＹｅｓであればステップＳ１８０に進み、Ｎｏであれば、ステップＳ１８０を処理せずにステップＳ１８２に進む。
【０２０６】
ステップＳ１８０でクラスタ情報更新部１０８は、自身のクラスタ情報１２８に格納されているクラスタの識別子（ＣＩＤ）で認識されるクラスタに含まれるノードの識別子（｛ＮＩＤ｝）と一致する、自身のノード装置のフリーノードリスト１３０に含まれるノード装置の識別子（ＮＩＤ）を削除する。そしてステップＳ１８２に進む。
【０２０７】
ステップＳ１８２でクラスタ情報更新部１０８は、自身のノード装置のマージノードリスト１３４が設定されているかどうかを判定する。もし設定されていればステップＳ１８４に進む。もし、設定されていなければクラスタ情報更新部１０８の処理を終了する。
【０２０８】
ステップＳ１８４でクラスタ情報更新部１０８は、自身のノード装置のマージノードリスト１３２に含まれるノードの識別子（｛ＮＩＤ｝）は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノードの識別子（｛ＮＩＤ｝）に含まれているかどうかを判定する、もしこの判定の結果がＹｅｓであれば、ステップＳ１８６に進む。もしこの判定の結果がＮｏであれば、クラスタ情報更新部１０８の処理を終了する。
【０２０９】
ステップＳ１８６では、自身のノード装置のマージノードリスト１３２に含まれるノードの識別子（｛ＮＩＤ｝）と自身のクラスタ情報１２８に格納されているクラスタの識別子（ＣＩＤ）で認識されるクラスタに含まれるノードの識別子（｛ＮＩＤ｝）を比較し、一致するノード装置の識別子を自身のノード装置のマージノードリスト１３２から削除して、クラスタ情報更新部１０８の処理を終了する。
【０２１０】
受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドのクラスタ識別子（ＣＩＤ）と、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）が一致しない場合、ステップＳ１８８でクラスタ情報更新部１０８は、自身のノード装置のマージクラスタリスト１３２に自身のノード装置の識別子（ＮＩＤ）が設定されているかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ１９０に進む。この判定の結果がＮｏであれば、ステップＳ１９８に進む。
【０２１１】
ステップＳ１９０でクラスタ情報更新部１０８は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノードの識別子（｛ＮＩＤ｝）に自身のノード装置の識別子（ＮＩＤ）が設定されているかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ１９２に進む。また、この判定の結果がＮｏであれば、ステップＳ１９８に進む。
【０２１２】
ステップＳ１９２では、受け取ったＨｅｌｌｏパケットの送信元ＬＳが、マージクラスタリストのＳＩＤまたは自身のクラスタ情報１２８に含まれるノード装置の識別子（ＮＩＤ）に含まれているかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ１９４に進む。また、この判定の結果がＮｏであれば、ステップＳ１９８に進む。
【０２１３】
ステップＳ１９４では、自身のクラスタ情報１２８に含まれる情報を削除し、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれる情報を自身のクラスタ情報１２８に上書きする。
【０２１４】
ステップＳ１９４の次のステップＳ１９６では、自身のノード装置のマージクラスタリスト１３２に含まれる情報を削除して、クラスタ情報更新部１０８の処理を終了する。
【０２１５】
ステップＳ１９８では、クラスタ統合先候補通知部の処理を行う。
ステップＳ１９８の処理が終わると、クラスタ情報更新部１０８の処理を終了する。
【０２１６】
図３０は、クラスタ生成部１１０の動作の例を示すフローチャートである。
ステップＳ２００でクラスタ生成部１１０は、クラスタ情報１２８のｅｎｄフラグの値がｔｒｕｅであるかを判定する。ｅｎｄフラグの値がｔｒｕｅであれば、新たなノード装置をクラスタに追加することはできない。この判定の結果がＮｏ、すなわちｅｎｄフラグの値がｆａｌｓｅであれば、新たなノード装置をクラスタに追加することができる。この判定の結果がＹｅｓ、すなわちｅｎｄフラグの値がｔｒｕｅであれば、クラスタ生成部１１０の処理は終了する。ｅｎｄフラグの値がｆａｌｓｅであれば、ステップＳ２０２に進む。
【０２１７】
ｅｎｄフラグの値がｆａｌｓｅの場合、クラスタ生成部１１０は、受信したＨｅｌｌｏパケットのフリーノードリスト（ＦＮＬ）フィールドに含まれるフリーノード情報が、自身のノード装置で作成したクラスタに参加しようとしているノード装置の識別子であるかを確認する。このため、Ｓ２０２でクラスタ生成部１１０は、受信したＨｅｌｌｏパケットのフリーノードリスト（ＦＮＬ）フィールドに含まれるクラスタ識別子（ＣＩＤ）と、クラスタ情報１２８に含まれているクラスタ識別子（ＣＩＤ）が異なるかどうかを判定する。この判定の結果がＮｏ、すなわちフリーノード情報とクラスタ情報１２８に含まれているクラスタ識別子（ＣＩＤ）が一致する場合、クラスタ生成部１１０は、自身のノード装置が生成しているクラスタに対して、参加が要求されたと認識する。そして、ステップＳ２０４に進む。この判定の結果がＹｅｓであれば、クラスタ生成部１１０の処理は終了する。
【０２１８】
ステップＳ２０４でクラスタ生成部１１０は、フリーノード情報に含まれているノード装置の識別子（ＮＩＤ）をクラスタ情報１２８に追加し、クラスタに参加させる。ステップＳ２０４の処理が終了すると、クラスタ生成部１１０の処理は終了する。
【０２１９】
図３１は、フリーノードリスト生成部１１２の動作の例を示すフローチャートである。
ステップＳ２１０およびＳ２１２はそれぞれ、ステップ２００およびＳ２０２と同様の処理である。
【０２２０】
ステップＳ２１０でフリーノードリスト生成部１１２は、クラスタ情報１２８のｅｎｄフラグの値がｔｒｕｅであるかを判定する。この判定の結果がＹｅｓ、すなわちｅｎｄフラグの値がｔｒｕｅであれば、フリーノードリスト生成部１１２の処理は終了する。ｅｎｄフラグの値がｆａｌｓｅであれば、ステップＳ２１２に進む。
【０２２１】
ステップＳ２１２でフリーノードリスト生成部１１２は、受信したＨｅｌｌｏパケットのフリーノードリスト（ＦＮＬ）フィールドに含まれるクラスタ識別子（ＣＩＤ）と、クラスタ情報１２８に含まれているクラスタ識別子（ＣＩＤ）が異なるかどうかを判定する。この判定の結果がＮｏの場合、フリーノードリスト生成部１１２は、自身のノード装置が生成しているクラスタに対して、参加が要求されたと認識する。そして、ステップＳ２１２に進む。この判定の結果がＹｅｓであれば、フリーノードリスト１１０の処理は終了する。
【０２２２】
ステップＳ２１４でフリーノードリスト生成部１１２は、受信したＨｅｌｌｏパケットのフリーノードリスト（ＦＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）が、クラスタ情報１２８に含まれているかどうかを判定する。この判定の結果がＮｏの場合、すなわちフリーノードリスト（ＦＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）が、クラスタ情報１２８に含まれてない場合、ステップＳ２１６に進む。この判定の結果がＹｅｓであれば、フリーノードリスト１１２の処理は終了する。
【０２２３】
ステップＳ２１６でフリーノードリスト生成部１１２は、フリーノードリスト（ＦＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）をフリーノードリスト１３０に追加する。ステップＳ２１６の処理が終了すると、フリーノードリスト１１２の処理は終了する。
【０２２４】
図３２は、クラスタ統合先候補通知部１１４の動作の例を示すフローチャートである。
図３２に示されている処理で各ノードは、自身が所属しているクラスタのクラスタ識別子（ＣＩＤ）と異なるクラスタ情報（ＣＩ）を含むＨｅｌｌｏパケットを受信した場合に、クラスタ統合段階に移行しているかどうかを、クラスタのノード装置の数に変化がなくなった時点からのタイマがタイムアウトしているかに基づいて判断する。クラスタ統合段階に移行していれば、自身のノード装置のクラスタ情報１２８と、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ)から両方のクラスタのノード数を合計し、上限を超えていなければ、クラスタ統合可能と判断する。クラスタ統合可能で、自身ノード装置が属するクラスタがスレーブ側クラスタであった場合は、クラスタ統合先候補（マスタ側クラスタに属するノード装置）をマージクラスタリスト（ＭＣＬ）のＳＩＤに設定する。また、起点ノードの場合はクラスタ統合受付部へ設定したマージクラスタリストを渡す。
【０２２５】
ステップＳ２２０でクラスタ統合先候補通知部１１４は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドのクラスタ識別子（ＣＩＤ）が、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）が異なるかどうかを判定する。このときのＨｅｌｌｏパケットは、クラスタ統合先候補通知としての意味を持つ。この判定の結果がＹｅｓの場合、すなわち受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドのクラスタ識別子（ＣＩＤ）が、自身のクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）が異なる場合、ステップＳ２２２に進む。
【０２２６】
ステップＳ２２２でクラスタ統合先候補通知部１１４は、ノード装置の数に変化がなくなった時点からの一定時間のタイムアウトをしているかを判断する。この判定の結果がＹｅｓの場合、クラスタ統合先候補通知部１１４は、クラスタ統合段階に移行していることを認識する。そして、ステップＳ２２４に進む。
【０２２７】
ステップＳ２２４でクラスタ統合先候補通知部１１４は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノード装置の識別子（ＮＩＤ）と、自身のクラスタ情報１２８に格納されているノード装置の識別子（ＮＩＤ）のエントリ数の合計が、クラスタあたりのノード装置の数の上限である最大クラスタノード数以下であるかを判定する。この判定の結果がＹｅｓの場合は、Ｈｅｌｌｏパケットの送信元のノード装置が属するクラスタと、自身が属するクラスタは統合可能である。そして、ステップＳ２２６に進む。
【０２２８】
ステップＳ２２６でクラスタ統合先候補通知部１１４は、自身が属するクラスタがスレーブ側であるかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２２６に進む。
【０２２９】
ステップＳ２２８でクラスタ統合先候補通知部１１４は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）が空であるかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２３０に進む。
【０２３０】
ステップＳ２３０でクラスタ統合先候補通知部１１４は、クラスタ統合先候補、すなわちマスタ側クラスタに属し、自身と隣接するノード装置をマージクラスタリスト（ＭＣＬ）のＳＩＤに設定する。
【０２３１】
ステップＳ２３０の次のＳ２３２でクラスタ統合先候補通知部１１４は、自身が起点ノードであるかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２３４に進む。
【０２３２】
ステップＳ２３４でクラスタ統合先候補通知部１１４は、クラスタ統合要求受付部１１６へ設定したマージクラスタリストを渡す。そして、クラスタ統合先候補通知部１１４の処理は終了する。
【０２３３】
また、ステップＳ２２０、Ｓ２２２、Ｓ２２４、Ｓ２２６、Ｓ２２８、Ｓ２３２の判定の結果がＮｏであれば、クラスタ統合先候補通知部１１４の処理を終了する。
【０２３４】
図３３は、クラスタ統合要求受付部１１６の動作の例を示すフローチャートである。
図３３に示されている処理で起点ノードは、他のクラスタからのクラスタ統合先候補通知が競合していないかを自身のノード装置のマージクラスタリスト１３２に含まれる情報に基づいて比較、判断し、クラスタ統合先候補通知を受け付ける。
【０２３５】
起点ノードは、クラスタ統合先候補通知を受け付けたことを受け、自身のノード装置の識別子（ＮＩＤ）をマージクラスタリスト１３２に追加する。
【０２３６】
ステップＳ２４０でクラスタ統合要求受付部１１６は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）が、自身のクラスタ情報１２８に含まれないかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２４２に進む。この判定の結果がＮｏの場合、クラスタ統合要求受付部１１６の処理を終了する。
【０２３７】
ステップＳ２４２でクラスタ統合要求受付部１１６は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子（ＮＩＤ）が未設定であるかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２４８に進む。この判定の結果がＮｏの場合、ステップＳ２４４に進む。
【０２３８】
ステップＳ２４４でクラスタ統合要求受付部１１６は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）が、自身のマージクラスタリスト１３２に含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）と同じであるかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２４６に進む。この判定の結果がＮｏの場合、クラスタ統合要求受付部１１６の処理を終了する。
【０２３９】
ステップＳ２４６でクラスタ統合要求受付部１１６は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）を、自身のマージクラスタリスト１３２に含まれるノード装置の識別子（ＮＩＤ）にマージする。
【０２４０】
ステップＳ２４２の判定の結果がＹｅｓの場合、すなわち受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子（ＮＩＤ）が未設定であると判定された場合は、ステップＳ２４８の処理を行う。
【０２４１】
ステップＳ２４８でクラスタ統合要求受付部１１６は、自身のマージクラスタリスト１３２に含まれるノード装置の識別子（ＮＩＤ）に自身のノード装置の識別子（ＮＩＤ）を設定する。そして、クラスタ統合要求受付部１１６の処理は終了する。
【０２４２】
図３４は、クラスタ統合要求更新部１１８の動作の例を示すフローチャートである。
図３４に示されている処理で参加ノードは、マージクラスタリスト(ＭＣＬ）に自身のノード装置が属するクラスタの起点ノードが設定されていることでクラスタ統合要求通知を受付けたことを判断し、自身のノード装置の識別子を自身のマージクラスタリスト１３２に追加する。
【０２４３】
ステップＳ２５０でクラスタ統合要求更新部１１８は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）が、自身のクラスタ情報１２８に含まれないかどうかを判定する。この判定の結果がＹｅｓの場合、ステップＳ２６０に進んでクラスタ統合リスト生成部１２０の処理を行い、クラスタ統合要求更新部１１８の処理は終了する。この判定の結果がＮｏの場合、ステップＳ２５２に進む。
【０２４４】
ステップＳ２５２でクラスタ統合要求更新部１１８は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子（ＮＩＤ）が未設定であるかどうかを判定する。この判定の結果がＮｏの場合、ステップＳ２５４に進む。この判定の結果がＹｅｓの場合、ステップＳ２５８に進む。
【０２４５】
ステップＳ２５８でクラスタ統合要求更新部１１８は、自身のマージクラスタリスト１３２に、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）を設定する。そして、クラスタ統合要求更新部１１８の処理は終了する。
【０２４６】
ステップＳ２５４でクラスタ統合要求更新部１１８は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドのノード装置の識別子（ＮＩＤ）が、自身のクラスタ情報１２６に含まれるかどうかを判定する。この判定の結果がＮｏの場合、クラスタ統合要求更新部１１８の処理は終了する。この判定の結果がＹｅｓの場合、ステップＳ２５６に進む。
【０２４７】
ステップＳ２５６でクラスタ統合要求更新部１１８は、自身のノード装置のマージクラスタリスト１３２に格納されるノード装置の識別子（ＮＩＤ）に自身のノード装置の識別子を追加する。そして、クラスタ統合要求更新部１１８の処理は終了する。
【０２４８】
図３５は、クラスタ統合リスト生成部１２０の動作の例を示すフローチャートである。
マスタ側の対向ノードは、自身のノード装置のクラスタ情報１２８に格納されるノード装置の識別子（ＮＩＤ）と、受信したクラスタ統合要求通知のマージクラスタリスト（ＭＣＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）とが完全に一致するかどうかを確認する。一致すれば受信したＨｅｌｌｏパケット（クラスタ統合要求通知）のマージクラスタリスト（ＭＣＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）を自身のノード装置のクラスタ情報１２８に格納されるノード装置の識別子（ＮＩＤ）に設定する。
【０２４９】
ステップＳ２７０でクラスタ統合リスト生成部１２０は、自身のノード装置のマージクラスタリスト１３２は空かどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２６２に進む。
【０２５０】
ステップＳ２７２でクラスタ統合リスト生成部１２０は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるマスタ側クラスタのノード装置の識別子（ＳＩＤ）が、自身のノード装置の識別子であるかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２７４に進む。
【０２５１】
ステップＳ２７４でクラスタ統合リスト生成部１２０は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノード装置の識別子（ＮＩＤ）と、自身のクラスタ情報１２８に格納されているノード装置の識別子（ＮＩＤ）が一致するかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２７６に進む。
【０２５２】
ステップＳ２７６でクラスタ統合リスト生成部１２０は、受信したＨｅｌｌｏパケットのクラスタ情報（ＣＩ）フィールドに含まれるノード装置の識別子（ＮＩＤ）を、自身のマージノードリスト１３４に設定する。そして、クラスタ統合リスト生成部１２０の処理を終了する。
【０２５３】
また、ステップＳ２７０、Ｓ２７２、Ｓ２７４の判定の結果がＮｏの場合は、クラスタ統合リスト生成部１２０の処理を終了する。
【０２５４】
図３６はクラスタ統合処理部１２２の動作の例を示すフローチャートである。
起点ノードは、クラスタ統合要求の競合確認し、受信したＨｅｌｌｏパケットのマージノードリスト（ＭＮＬ）に含まれるノード装置の識別子（ＮＩＤ）の数と自身のノード装置のクラスタ情報１２８に格納されているノード装置の数の合計が、クラスタあたりのノード装置の数の上限である最大クラスタノード数以下であれば、ノード装置のクラスタ情報１２８に受信したＨｅｌｌｏパケットのマージノードリスト（ＭＮＬ）に含まれるノード装置の識別子（ＮＩＤ）を追加することでクラスタ統合を実施する。
【０２５５】
ステップＳ２８０でクラスタ統合処理部１２２は、自身のノード装置のマージクラスタリスト１３２が未設定であるかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２８２に進む。
【０２５６】
ステップＳ２８２でクラスタ統合処理部１２２は、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）の数と、自身のクラスタ情報１２８に格納されているノード装置の識別子（ＮＩＤ）の数の合計が、クラスタあたりのノード装置の数の上限である最大クラスタノード数以下であるかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２８４に進む。
【０２５７】
ステップＳ２８４でクラスタ統合処理部１２２は、自身のクラスタ情報１２８に、受信したＨｅｌｌｏパケットのマージクラスタリスト（ＭＣＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）を追加して、クラスタを統合する。そして、クラスタ統合処理部１２２の処理を終了する。
【０２５８】
また、ステップＳ２８０、Ｓ２８２の判定の結果がＮｏであれば、クラスタ統合処理部１２２の処理を終了する。
【０２５９】
図３７と図３８は、クラスタ統合リスト通知部１２４の動作の例を示すフローチャートである。
【０２６０】
参加ノードは、クラスタ統合要求の競合を確認し、受信したＨｅｌｌｏパケットのマージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）をマージノードリスト１３４に含まれるノード装置の識別子（ＮＩＤ）に設定する。
【０２６１】
図３７は、複数のクラスタから統合要求通知が送られてきたとき、複数のクラスタの1つのクラスタと統合するときのクラスタ統合リスト通知部１２４の動作の例を示すフローチャートである。
【０２６２】
ステップＳ２９０でクラスタ統合リスト通知部１２４は、自身のノード装置のマージクラスタリスト１３２が空かどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２９２に進む。
【０２６３】
ステップＳ２９２でクラスタ統合リスト通知部１２４は、自身のマージノードリスト１３４が未設定であるかどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ２９４に進む。
【０２６４】
ステップＳ２９４でクラスタ統合リスト通知部１２４は、受信したＨｅｌｌｏパケットのマージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）をマージノードリスト１３４に含まれるノード装置の識別子（ＮＩＤ）に設定する。そして、クラスタ統合リスト通知部１２４の処理を終了する。
【０２６５】
また、ステップＳ２９０、Ｓ２９２の判定の結果がＮｏであれば、クラスタ統合リスト通知部１２４の処理を終了する。
【０２６６】
図３８は、複数のクラスタから統合要求通知が送られてきたとき、複数のクラスタと同時に統合するのクラスタ統合リスト通知部１２４の動作の例を示すフローチャートである。
【０２６７】
ステップＳ３００でクラスタ統合リスト通知部１２４は、ステップＳ２９０と同様の処理を行う。すなわち、自身のノード装置のマージクラスタリスト１３２が空かどうかを判定する。この判定の結果がＹｅｓであれば、ステップＳ３０２に進む。この判定の結果がＮｏであれば、クラスタ統合リスト通知部１２４の処理を終了する。
【０２６８】
ステップＳ３０２でクラスタ統合リスト通知部１２４は、ステップＳ２９４と同様の処理を行う。ステップＳ３０２でクラスタ統合リスト通知部１２４は、受信したＨｅｌｌｏパケットのマージノードリスト（ＭＮＬ）フィールドに含まれるノード装置の識別子（ＮＩＤ）をマージノードリスト１３４に含まれるノード装置の識別子（ＮＩＤ）に設定する。そして、クラスタ統合リスト通知部１２４の処理を終了する。
【０２６９】
図３９は、ＴＴＬ減算部１４２の動作の例を示すフローチャートである。
ＴＴＬ減算部１４２は、一定周期で起動され、ＴＴＬ１４４に格納されている監視対象のノード装置のＴＴＬを減算する。監視対象のノード装置は、自ノードが起点ノードであれば、自身が属するクラスタの参加ノード（起点ノード以外のノード）であり、自ノードが参加ノードであれば、自身が属するクラスタの起点ノードである。
【０２７０】
起点ノードは、監視対象（参加ノード）のＴＴＬが０になった場合、対象ノードに関する情報をクラスタ情報１２８から削除する。参加ノードは、監視対象（起点ノード）のＴＴＬが０になった場合、クラスタ情報１２８に格納されている対象ノードに関する情報をクリアし、クラスタ内のノード装置の数が閾値以上ならクラスタの自律再生、閾値未満ならクラスタの自律修復を行う。
【０２７１】
ステップＳ３１０でＴＴＬ減算部１４２は、自ノードが起点ノードであるかどうかを判定する。もしこの判定の結果がＹｅｓ、すなわち自ノードが起点ノードである場合には、ステップＳ３２４に進む。また、もしこの判定の結果がＮｏ、すなわち自ノードが起点ノードではない場合には、ステップＳ３１２に進む。
【０２７２】
ステップＳ３１２でＴＴＬ減算部１４２は、自身（参加ノード）が属するクラスタの起点ノードのＴＴＬについて、ＴＴＬ−１が０以下であるかどうかを判定する。もしこの判定がＹｅｓであれば、ステップＳ３１４に進む。もしこの判定がＮｏであれば、ステップ３２２に進む。
【０２７３】
ステップＳ３２２でＴＴＬ減算部１４２は、自身（参加ノード）が属するクラスタの起点ノードのＴＴＬの値を減算して（１だけ減らす）、ＴＴＬ減算部１４２の処理を終了する。
【０２７４】
ステップＳ３１４でＴＴＬ減算部１４２は、自身（参加ノード）が属するクラスタの起点ノードの情報を自身のクラスタ情報１２８から削除する。そして、ステップＳ３１６に進む。
【０２７５】
ステップＳ３１６でＴＴＬ減算部１４２は、自身が属するクラスタのノード装置の数が閾値以上であるかどうかを判定する。もしこの判定がＹｅｓであれば、ステップＳ３１８に進む。もしこの判定がＮｏであれば、ステップ３２０に進む。
【０２７６】
ステップＳ３１８では、自身が属するクラスタの任意のノード装置の識別子（ＮＩＤ）をクラスタ情報１２８に格納されているクラスタ識別子（ＣＩＤ）に設定する。そして、ステップＳ３２３に進む。
【０２７７】
ステップＳ３２０では、自身のクラスタ情報１２８に格納されている情報をクリアする。そして、ステップＳ３２３に進む。
【０２７８】
ステップＳ３２３でＴＴＬ減算部１４２は、クラスタ識別子（ＣＩＤ）で識別されるクラスタのノード数に変化があった時点から一定時間のタイムアウトを計測するタイマを設定する。そして、ＴＴＬ減算部１４２の処理を終了する。
【０２７９】
自ノードが起点ノードである場合、ステップＳ３１０の次にステップＳ３２４が処理される。
【０２８０】
ステップＳ３２４でＴＴＬ減算部１４２は、自身が属するクラスタの全参加ノードを取得して、未処理の参加ノードを取得する。
【０２８１】
ステップＳ３２４の次のステップＳ３２６でＴＴＬ減算部１４２は、未処理の参加ノードが存在するかどうかを判定する。もしこの判定の結果がＮｏ、すなわち未処理の参加ノードが存在しない場合には、ＴＴＬ減算部１４２の処理を終了する。もしこの判定の結果がＹｅｓ、すなわち未処理の参加ノードが存在する場合には、ステップＳ３２８に進む。
【０２８２】
ステップＳ３２８でＴＴＬ減算部１４２は、自身が起点ノードであるクラスタの参加ノード（起点ノード以外のノード装置）のＴＴＬを取得する。
【０２８３】
ステップＳ３２８の次のステップＳ３３０でＴＴＬ減算部１４２は、自身（起点ノード）が属するクラスタの参加ノードのＴＴＬについて、ＴＴＬ−１が０以下であるかどうかを判定する。もしこの判定がＹｅｓであれば、ステップＳ３３２に進む。もしこの判定がＮｏであれば、ステップＳ３３６に進む。
【０２８４】
ステップＳ３３２でＴＴＬ減算部１４２は、参加ノードの情報を自身のクラスタ情報１２８から削除する。そして、ステップＳ３３４に進む。
【０２８５】
ステップＳ３３４でＴＴＬ減算部１４２は、クラスタ識別子（ＣＩＤ）で識別されるクラスタのノード数に変化があった時点から一定時間のタイムアウトを計測するタイマを設定する。そして、ステップＳ３３８に進む。
【０２８６】
ステップＳ３３６では、参加ノードのＴＴＬの値を減算する（１だけ減らす）。
ステップＳ３３８では、参加ノードを処理済に設定する。そして、ステップＳ３２４に戻って未処理の参加ノードに対して同様の処理を行う。
【０２８７】
＜処理シーケンス＞
図４０〜４２を参照して、クラスタの起点ノードに障害が発生したとき行われるクラスタ自律再生処理の処理シーケンスの例を説明する。
【０２８８】
図４０は起点ノードに障害が発生する前のクラスタＡの状態を示す図である。クラスタＡは、ノード装置の識別子（ＮＩＤ）がＮＩＤ＝Ａ〜Ｅの５つのノード装置を含んでいる。ノード装置Ａ（識別子ＮＩＤがＡであるノード装置）が起点ノード（ゲートウェイ）である。
【０２８９】
図４１は、各ノード装置として上述のノード装置１０を用いたアドホックネットワークのクラスタにおいて、起点ノードＡに障害が発生してクラスタ自律再生処理を行った後のトポロジーを示す図である。障害が発生したノード装置Ａがクラスタから切り離され、ノード装置Ｂを起点ノードとするクラスタＢが形成さている。すなわち、以下の例では、ノード装置Ａを切り離した後のクラスタは、そのクラスタが含むノード装置の数が大（閾値以上）であり、クラスタ内のあるノード装置を起点ノードとして、自律的に再生される。
【０２９０】
図４２は図４０に示されている状態から図４１に示されている状態への遷移の処理シーケンスである。
【０２９１】
ノード装置Ｅは自身のクラスタ情報１２８のノード装置Ｅ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ａ）が送信する。Ｈｅｌｌｏパケット（ａ）のクラスタ情報（ＣＩ）フィールドには、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、１＞、＜Ｄ、１＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
なる情報が格納されている。
【０２９２】
Ｈｅｌｌｏパケット（ａ）を受けたノード装置Ｄは、自身のクラスタ情報１２８に格納されているノード装置Ｅの更新を行う更新処理（１）を行う。
【０２９３】
次にノード装置Ｄは、自身のクラスタ情報１２８のノード装置Ｄ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）しこの情報に基づいてＨｅｌｌｏパケット（ｂ）を送信する。Ｈｅｌｌｏパケット（ｂ）のクラスタ情報（ＣＩ）フィールドには、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、１＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となり、ノード装置Ｄとノード装置Ｅのシーケンス番号（ＳＮ）がカウントアップ（＋１だけ更新）されている。
【０２９４】
Ｈｅｌｌｏパケット（ｂ）を受けたノード装置Ｃは、自身のクラスタ情報１２８に格納されているノード装置Ｄとノード装置Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（２）を行う。
【０２９５】
次にノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｃ）を送信する。Ｈｅｌｌｏパケット（ｃ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０２９６】
Ｈｅｌｌｏパケット（ｃ）を受けたノード装置Ｃは、自身のクラスタ情報１２８に格納されているノード装置Ｃ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（３）を行う。
【０２９７】
次にノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｄ）を送信する。Ｈｅｌｌｏパケット（ｄ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、２＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０２９８】
Ｈｅｌｌｏパケット（ｄ）を受けた起点ノードＡは、自身のＴＴＬ１４４に格納されているノード装置Ｂ〜ＥのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ｂ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（４）を行う。
【０２９９】
起点ノードＡは、自身のクラスタ情報１２８のノード装置Ａ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｅ）を送信する。Ｈｅｌｌｏパケット（ｅ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、２＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３００】
このＨｅｌｌｏパケット（ｅ）を送信の後、起点ノードＡには障害（５）が発生するものとする。
【０３０１】
起点ノードＡからＨｅｌｌｏパケット（ｅ）を受けたノード装置Ｂは、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａのシーケンス番号（ＳＮ）の更新を行う更新処理（６）を行う。ノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｆ）を送信する。Ｈｅｌｌｏパケット（ｆ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３０２】
ノード装置ＢからＨｅｌｌｏパケット（ｆ）を受けたノード装置Ｃは、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａ〜Ｂのシーケンス番号（ＳＮ）の更新を行う更新処理（７）を行う。そして、ノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｇ）を送信する。Ｈｅｌｌｏパケット（ｇ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、３＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３０３】
ノード装置ＣからＨｅｌｌｏパケット（ｇ）を受けたノード装置Ｄも同様に、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａ〜Ｃのシーケンス番号（ＳＮ）の更新を行う更新処理（８）を行う。そして、ノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｄ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｈ）を送信する。Ｈｅｌｌｏパケット（ｈ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、３＞、＜Ｄ、３＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３０４】
ノード装置ＤからＨｅｌｌｏパケット（ｈ）を受けたノード装置Ｅも同様に、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａ〜Ｄのシーケンス番号（ＳＮ）の更新を行う更新処理（９）を行う。
【０３０５】
そしてまた、ノード装置Ｅは自身のクラスタ情報１２８のノード装置Ｅ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｉ）を送信する。Ｈｅｌｌｏパケット（ｉ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、３＞、＜Ｄ、３＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３０６】
Ｈｅｌｌｏパケット（ｉ）を受けたノード装置Ｄは、自身のクラスタ情報１２８に格納されているノード装置Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（１０）を行う。そして、ノード装置Ｄは、自身のクラスタ情報１２８のノード装置Ｄ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｊ）を送信する。Ｈｅｌｌｏパケット（ｊ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、３＞、＜Ｄ、４＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３０７】
Ｈｅｌｌｏパケット（ｊ）を受けたノード装置Ｃは、自身のクラスタ情報１２８に格納されているノード装置Ｄ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（１１）を行う。そして、ノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｋ）を送信する。Ｈｅｌｌｏパケット（ｋ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、４＞、＜Ｄ、４＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３０８】
Ｈｅｌｌｏパケット（ｋ）を受けたノード装置Ｂは、自身のクラスタ情報１２８に格納されているノード装置Ｃ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（１２）を行う。ノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｌ）を送信する。
【０３０９】
起点ノードには障害（５）が生じており、ノード装置Ｂは、起点ノードＡから更新されたシーケンス番号（ＳＮ）を受けることはない。よって、ノード装置Ｂは、次のＨｅｌｌｏの送信タイミングで、自身のクラスタ情報１２８に格納されているノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）する更新を行う更新処理を行う。また、起点ノードＡのＳＮが更新されないため、ＴＴＬ減算部１４２により、ＴＴＬ１４４に格納されている起点ノードＡのＴＴＬを一つ減算する減算処理（１３）を行う。そして、Ｈｅｌｌｏパケット（ｍ）を送信する。Ｈｅｌｌｏパケット（ｍ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、５＞、＜Ｃ、４＞、＜Ｄ、４＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３１０】
Ｈｅｌｌｏパケット（ｍ）を受けたノード装置Ｃは、自身のクラスタ情報１２８に格納されているノード装置Ｂのシーケンス番号（ＳＮ）の更新を行う更新処理を行う。また、起点ノードＡのＳＮが更新されないため、ＴＴＬ減算部１４２により、ＴＴＬ１４４に格納されている起点ノードＡのＴＴＬを一つ減算する減算処理（１４）を行う。そして、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｎ）を送信する。Ｈｅｌｌｏパケット（ｎ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、５＞、＜Ｃ、５＞、＜Ｄ、４＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３１１】
Ｈｅｌｌｏパケット（ｎ）を受けたノード装置Ｄは、自身のクラスタ情報１２８に格納されているノード装置Ｂ〜Ｃのシーケンス番号（ＳＮ）の更新を行う更新処理を行う。また、起点ノードＡのＳＮが更新されないため、ＴＴＬ減算部１４２により、ＴＴＬ１４４に格納されている起点ノードＡのＴＴＬを一つ減算する減算処理（１５）を行う。そして、自身のクラスタ情報１２８のノード装置Ｄ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｏ）を送信する。Ｈｅｌｌｏパケット（ｏ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、５＞、＜Ｃ、５＞、＜Ｄ、５＞、＜Ｅ、３＞｝、ｆａｌｓｅ＞
となる。
【０３１２】
Ｈｅｌｌｏパケット（ｏ）を受けたノード装置Ｅは、自身のクラスタ情報１２８に格納されているノード装置Ｂ〜Ｄのシーケンス番号（ＳＮ）の更新を行う更新処理を行う。また、起点ノードＡのＳＮが更新されないため、ＴＴＬ減算部１４２により、ＴＴＬ１４４に格納されている起点ノードＡのＴＴＬを一つ減算する減算処理（１６）を行う。
【０３１３】
以上の処理を、ノード装置Ｂ〜ＥのＴＴＬ１４４に格納されている起点ノードＡのＴＴＬが「０」になるまで繰り返す。
【０３１４】
起点ノードＡのＴＴＬが「０」になると、ノード装置Ｂ〜Ｅは、各自のクラスタ情報１２８のクラスタ識別子（ＣＩＤ）をノード装置Ｂの識別子である「Ｂ」に書き換え、所属するクラスタの起点ノードをノード装置Ｂとし、クラスタ情報１２８からノード装置Ａに関する情報を削除し、ノード装置Ａを切り離す処理（１７）を行う。
【０３１５】
次に、図４３〜４５を参照しながら、参加ノードに障害が発生した場合のクラスタ自律修復処理の処理シーケンスについて説明する。
【０３１６】
参加ノードに障害が発生する前のクラスタＡの状態は図４０に示されている。クラスタＡは、ノード装置の識別子（ＮＩＤ）がＮＩＤ＝Ａ〜Ｅの５つのノード装置を含んでいる。ノード装置Ａ（識別子ＮＩＤがＡであるノード装置）が起点ノード（ゲートウェイ）である。
【０３１７】
図４３は、各ノード装置として上述のノード装置１０を用いたアドホックネットワークのクラスタにおいて、参加ノードＤに障害が発生してクラスタ自律修復処理を行った後のトポロジーを示す図である。障害が発生したノード装置Ｄと、起点ノードＡに関してノード装置Ｄの反対側に配置されていたノード装置Ｅがクラスタから切り離されている。
【０３１８】
図４４は、フリーノードになったノード装置Ｅがその後、自ら起点ノードとなってクラスタ生成処理を行う（α）か、他クラスタに取り込まれる（β）様子を示している。
【０３１９】
図４５は図４０に示されている状態から図４３に示されている状態への遷移の処理シーケンスである。
【０３２０】
ノード装置Ｅは自身のクラスタ情報１２８のノード装置Ｅ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ａ）が送信する。Ｈｅｌｌｏパケット（ａ）のクラスタ情報（ＣＩ）フィールドには、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、１＞、＜Ｄ、１＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
なる情報が格納されている。
【０３２１】
Ｈｅｌｌｏパケット（ａ）を受けたノード装置Ｄは、自身のクラスタ情報１２８に格納されているノード装置Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（１）を行う。
【０３２２】
次にノード装置Ｄは、自身のクラスタ情報１２８のノード装置Ｄ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｂ）を送信する。Ｈｅｌｌｏパケット（ｂ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、１＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となり、ノード装置Ｄとノード装置Ｅのシーケンス番号（ＳＮ）がカウントアップ（＋１だけ更新）されている。
【０３２３】
この後、ノード装置Ｄには障害（２）が発生するものとする。
Ｈｅｌｌｏパケット（ｂ）を受けたノード装置Ｃは、自身のクラスタ情報１２８に格納されているノード装置Ｄとノード装置Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（３）を行う。
【０３２４】
次にノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｃ）を送信する。Ｈｅｌｌｏパケット（ｃ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、１＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３２５】
Ｈｅｌｌｏパケット（ｃ）を受けたノード装置Ｂは、自身のクラスタ情報１２８に格納されているノード装置Ｃ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（４）を行う。
【０３２６】
次にノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｄ）を送信する。Ｈｅｌｌｏパケット（ｄ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、１＞、＜Ｂ、２＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３２７】
Ｈｅｌｌｏパケット（ｄ）を受けた起点ノードＡは、自身のＴＴＬ１４４に格納されているノード装置Ｂ〜ＥのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ｂ〜Ｅのシーケンス番号（ＳＮ）の更新を行う更新処理（５）を行う。
【０３２８】
起点ノードＡは、自身のクラスタ情報１２８のノード装置Ａ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｅ）を送信する。Ｈｅｌｌｏパケット（ｅ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、２＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３２９】
起点ノードＡからＨｅｌｌｏパケット（ｅ）を受けたノード装置Ｂは、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａのシーケンス番号（ＳＮ）の更新を行う更新処理（６）を行う。ノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｆ）を送信する。Ｈｅｌｌｏパケット（ｆ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、２＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３３０】
ノード装置ＢからＨｅｌｌｏパケット（ｆ）を受けたノード装置Ｃは、自身のＴＴＬ１４４に格納されている起点ノード装置ＡのＴＴＬをリセットするリセット処理と、自身のクラスタ情報１２８に格納されているノード装置Ａ〜Ｂのシーケンス番号（ＳＮ）の更新を行う更新処理（７）を行う。そして、ノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｇ）を送信する。Ｈｅｌｌｏパケット（ｇ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、３＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３３１】
ノード装置Ｃから送られたＨｅｌｌｏパケット（ｇ）は、故障のためノード装置Ｄには届かない。
【０３３２】
このとき、ノード装置Ｅでは、Ｈｅｌｌｏパケットの送信処理を行い、自身のクラスタ情報１２８に格納されているノード装置Ｅ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）する更新を行う更新処理と、所定の時間が経過しても更新された起点ノードＡのシーケンス番号（ＳＮ）が届かないので、起点ノードＡのＴＴＬの減算する減算処理（８）を行う。
そして、いずれノード装置ＥのＴＴＬ１４４に格納されている起点ノードＡのＴＴＬが「０」になる。
【０３３３】
ノード装置Ｃは、自身のクラスタ情報１２８のノード装置Ｃ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｈ）を送信する。Ｈｅｌｌｏパケット（ｈ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、３＞、＜Ｃ、４＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３３４】
Ｈｅｌｌｏパケット（ｈ）を受けたノード装置Ｂは、自身のクラスタ情報１２８に格納されているノード装置Ｃの更新を行う更新処理（１０）を行う。そして、ノード装置Ｂは、自身のクラスタ情報１２８のノード装置Ｂ（自ノード）のシーケンス番号（ＳＮ）を１つ増加（カウントアップ）し、この情報に基づいてＨｅｌｌｏパケット（ｉ）を送信する。Ｈｅｌｌｏパケット（ｉ）のクラスタ情報（ＣＩ）フィールドは、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２＞、＜Ｂ、４＞、＜Ｃ、４＞、＜Ｄ、２＞、＜Ｅ、２＞｝、ｆａｌｓｅ＞
となる。
【０３３５】
Ｈｅｌｌｏパケット（ｉ）を受けた起点ノードＡでは、自身のクラスタ情報１２８に格納されているノード装置Ｂ〜Ｃのシーケンス番号（ＳＮ）の更新を行う更新処理を行う。
また、参加ノード装置Ｄ〜Ｅのシーケンス番号（ＳＮ）が更新されないため、ＴＴＬ減算部１４２により、自身のＴＴＬ１４４に格納されている参加ノード装置Ｄとノード装置ＥのＴＴＬをそれぞれ１つずつ減算する減算処理（１１）を行う。
【０３３６】
このような処理を繰り返すと、起点ノードＡのＴＴＬ１４４に格納されているノード装置Ｄとノード装置ＥのＴＴＬはいずれ共に「０」になる（１２）。
【０３３７】
すると、起点ノードＡは、起点ノードＡのＴＴＬ１４４に格納されているノード装置Ｄとノード装置ＥのＴＴＬが共に「０」になると、クライアント情報１２８から、ノード装置Ｄとノード装置Ｅに関する情報を削除する変更処理（１３）を行う。
【０３３８】
そして、起点ノードＡはＨｅｌｌｏパケット（ｊ）を送信する。Ｈｅｌｌｏパケット（ｊ）のクラスタ情報（ＣＩ）フィールドは、たとえば、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２４＞、＜Ｂ、２４＞、＜Ｃ、２４＞｝、ｆａｌｓｅ＞
となり、クラスタに属するノード装置からノード装置Ｄとノード装置Ｅが削除されている。
【０３３９】
次にノード装置Ｂでは、自身のクラスタ情報１２８の更新処理（１４）を行い、Ｈｅｌｌｏパケット（ｋ）を送信する。Ｈｅｌｌｏパケット（ｋ）のクラスタ情報（ＣＩ）フィールドは、たとえば、
ＣＩ：＜ＣＩＤ、｛ＮＩＤ｝、ｅｎｄ＞＝＜Ａ、｛＜Ａ、２４＞、＜Ｂ、２５＞、＜Ｃ、２４＞｝、ｆａｌｓｅ＞
となる。
【０３４０】
Ｈｅｌｌｏパケット（ｉ）を受けた起点ノードＣでは、自身のクラスタ情報１２８の更新処理（１５）を行う。
【０３４１】
このようにして図４４の状況に至る。フリーノードになったノード装置Ｅはその後、自ら起点ノードとなってクラスタ生成処理を行う（α）か、他クラスタに取り込まれる（β）。
【符号の説明】
【０３４２】
１００  ノード装置
１０２  受信部
１０４  ノード種別判定部
１０６  参加処理部
１０８  クラスタ情報更新部
１１０  クラスタ生成部
１１２  フリーノードリスト生成部
１１４  クラスタ統合先候補通知部
１１６  クラスタ統合要求受付部
１１８  クラスタ統合要求更新部
１２０  クラスタ統合リスト生成部
１２２  クラスタ統合処理部
１２４  クラスタ統合リスト通知部
１２６  ノード種別情報
１２８  クラスタ情報
１３０  フリーノードリスト
１３２  マージクラスタリスト
１３４  マージノードリスト
１３６  設定部
１３８  ハローパケット生成部
１４０  送信部
１４２  ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）減算部
１４４、  ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）
２００、２０２、２１０  Ｈｅｌｌｏパケット
３００、３０２、３０４、３０６、３０８、３１０、３１２、３１４  ＴＴＬ（Ｔｉｍｅ  Ｔｏ  Ｌｉｖｅ）
４００  ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
４０２  ＰＨＹ（Ｐｈｙｓｉｃａｌ  Ｌａｙｅｒ）チップ
４０４  タイマＩＣ
４０６  ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）
４０８  フラッシュメモリ
４１０  無線モジュール
４１２  バス
【図１】
2013171868.tif 000003
【図２】
2013171868.tif 000004
【図３】
2013171868.tif 000005
【図４】
2013171868.tif 000006
【図５】
2013171868.tif 000007
【図６】
2013171868.tif 000008
【図７】
2013171868.tif 000009
【図８】
2013171868.tif 000010
【図９】
2013171868.tif 000011
【図１０】
2013171868.tif 000012
【図１１】
2013171868.tif 000013
【図１２】
2013171868.tif 000014
【図１３】
2013171868.tif 000015
【図１４】
2013171868.tif 000016
【図１５】
2013171868.tif 000017
【図１６】
2013171868.tif 000018
【図１７】
2013171868.tif 000019
【図１８】
2013171868.tif 000020
【図１９】
2013171868.tif 000021
【図２０】
2013171868.tif 000022
【図２１】
2013171868.tif 000023
【図２２】
2013171868.tif 000024
【図２３】
2013171868.tif 000025
【図２４】
2013171868.tif 000026
【図２５】
2013171868.tif 000027
【図２６】
2013171868.tif 000028
【図２７】
2013171868.tif 000029
【図２８】
2013171868.tif 000030
【図２９Ａ】
2013171868.tif 000031
【図２９Ｂ】
2013171868.tif 000032
【図３０】
2013171868.tif 000033
【図３１】
2013171868.tif 000034
【図３２】
2013171868.tif 000035
【図３３】
2013171868.tif 000036
【図３４】
2013171868.tif 000037
【図３５】
2013171868.tif 000038
【図３６】
2013171868.tif 000039
【図３７】
2013171868.tif 000040
【図３８】
2013171868.tif 000041
【図３９】
2013171868.tif 000042
【図４０】
2013171868.tif 000043
【図４１】
2013171868.tif 000044
【図４２】
2013171868.tif 000045
【図４３】
2013171868.tif 000046
【図４４】
2013171868.tif 000047
【図４５】
2013171868.tif 000048
【手続補正書】
【提出日】平成26年10月15日(2014.10.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のノード装置を含むネットワーク中のノード装置であって、
前記ネットワーク中の前記複数のノード装置の中で、前記ノード装置が前記ネットワーク中の情報伝達のための経路に関する経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報を格納するクラスタ情報格納部と、
前記クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納するＴＴＬ格納部と、
前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信する受信部と、
前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定するシーケンス番号判定部と、
前記シーケンス番号判定部における判定で、第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うＴＴＬ減算部と、
前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すクラスタ情報更新部と、
を含むノード装置。
【請求項２】
さらに、
前記クラスタ情報格納部に格納されているクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報と、前記ノード装置自身に対して整数値として定義されるシーケンス番号に関する情報を参照して、ハローパケットを生成するハローパケット生成部と、
前記ハローパケット生成部で生成されたハローパケットを送信する送信部と、
を含み
クラスタ情報格納部は、前記ノード装置自身に対する前記シーケンス番号を格納し、前記ノード装置自身に対する前記シーケンス番号は前記送信部からハローパケットが送信される毎に更新される、請求項１に記載のノード装置。
【請求項３】
前記ノード装置が前記起点ノードであるとき、前記ＴＴＬ格納部は、前記クラスタ内に含まれる前記ノード自身以外のノード装置のＴＴＬ値を格納する、請求項１または２に記載のノード装置。
【請求項４】
前記ノード装置が前記起点ノードではないとき、前記ＴＴＬ格納部は、前記ノード自身が含まれるクラスタの前記起点ノードのＴＴＬ値を格納する、請求項１乃至３のいずれか一項に記載のノード装置。
【請求項５】
前記クラスタ情報更新部は、前記ノード装置自身が前記起点ノードであるとき、前記クラスタ内に含まれる前記ノード自身以外のノード装置である参加ノードに対するＴＴＬ値が所定の値以下であるとき、前記参加ノードの識別子を前記クラスタ情報格納部から削除する、請求項１乃至４のいずれか一項に記載のノード装置。
【請求項６】
前記クラスタ情報更新部は、前記第１のノード装置が前記起点ノードであるとき、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値以上であれば、前記第１のノード装置以外で前記クラスタに含まれるノード装置を前記起点ノードとして再定義することによって、前記クラスタを再生し、前記第１のノード装置が切り離された前記クラスタに含まれるノード装置の数が所定の値未満であれば、前記クラスタに含まれるノード装置をいかなるクラスタにも含まれないフリーノード装置として前記クラスタを開放する、請求項１乃至５のいずれか一項に記載のノード装置。
【請求項７】
ネットワーク中の前記複数のノード装置の中で、前記ノード装置が前記ネットワーク中の情報伝達のための経路に関する経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置と、前記クラスタの起点となる起点ノードに関する情報を格納することと、
前記クラスタに含まれ、前記ノード装置自身とは異なる第１のノード装置に対して整数値として定義され、所定のデフォルト値を有するＴＴＬ値を格納することと、
前記第１のノード装置に対して定義され、前記第１のノード装置が前記経路情報の通知に用いられるハローパケットを送信するごとにカウントアップされるシーケンス番号を含む前記第１のノード装置が異なるタイミングで送信する第１および第２のハローパケットを受信することと、
前記受信部によって受信された前記第１のハローパケットおよび前記第２のハローパケットに含まれている前記第１のノード装置に対する第１のシーケンス番号および第２のシーケンス番号が互いに一致するかどうかを判定することと、
第１のシーケンス番号と第２のシーケンス番号が同一であるとき、前記ＴＴＬ格納部に格納されているＴＴＬ値を減らす処理を行うこと（Ｓ３３６）と、
前記第１のノード装置に対するＴＴＬ値が所定の値以下になったとき、前記第１のノード装置の識別子を前記クラスタ情報格納部から削除することによって、前記第１のノード装置を前記クラスタから切り離すことと
を含む通信方法。
【国際調査報告】
2013171868.tif 000049
2013171868.tif 000050