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