(57)【特許請求の範囲】
【請求項１】
複数のノード装置を含むネットワーク中のノード装置であって、
隣接するノード装置である隣接ノード装置からパケットを受信する受信部と、
ネットワーク中の前記複数のノード装置の中で、経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置の装置識別情報を記録したクラスタ情報を生成するクラスタ生成部と、
前記経路情報の通知に用いられるハローパケットに、前記クラスタに含まれているノード装置の数が閾値に達しているかを表す情報を格納した第１のハローパケットを生成するハローパケット生成部と、
前記第１のハローパケットをブロードキャスト送信する送信部
を備え、
クラスタに所属していないフリーノード装置から、前記フリーノード装置を識別する装置識別情報を含む第２のハローパケットを受信すると、前記クラスタ生成部は、前記クラスタ情報に記録されたノード装置の数が閾値に達するまで、前記フリーノード装置の装置識別情報を前記クラスタ情報に追加する
ことを特徴とするノード装置。
【請求項２】
前記クラスタ情報に記録されたノード装置の数が前記閾値に達すると、前記ハローパケット生成部は、前記クラスタに含まれているノード装置の数が閾値に達したことを表す情報を含み、前記クラスタとは異なる別のクラスタの生成を要求する第３のハローパケットを生成し、
前記送信部が前記第３のハローパケットを送信することにより、前記第３のハローパケットを受信したフリーノード装置に、前記別のクラスタの生成の開始と、前記別のクラスタに含まれるノード装置の特定を要求する
ことを特徴とする請求項１に記載のノード装置。
【請求項３】
前記ハローパケット生成部が、前記クラスタ情報に記録された情報を含む第４のハローパケットを生成し、前記送信部が前記第４のハローパケットをクラスタ内のノード装置に送信することにより、前記第４のハローパケットを受信したクラスタ内のノード装置に、前記クラスタ情報に追加されたノード装置を通知する
ことを特徴とする請求項１もしくは２に記載のノード装置。
【請求項４】
複数のノード装置を含むネットワーク中のノード装置であって、
隣接するノード装置である隣接ノード装置からパケットを受信する受信部と、
経路情報の通知に用いられるハローパケットに、前記経路情報を相互に記憶するノード装置のグループであるクラスタに参加しているノード装置を特定するクラスタ情報と、前記クラスタに含まれているノード装置の数が閾値に達していないことを表す情報を含むパケットである第１のハローパケットを受信し、さらに、前記クラスタ情報に前記ネットワーク中の前記ノード装置を識別する装置識別情報が含まれていない場合、前記クラスタに参加することを決定する参加処理部と、
前記ネットワーク中の前記ノード装置がクラスタへの参加を要求することを前記隣接ノード装置に通知するために、前記クラスタを識別するクラスタ識別情報と前記装置識別情報を対応付けた情報を含む第２のハローパケットを生成するハローパケット生成部と、
前記ハローパケット生成部で生成されたハローパケットをブロードキャスト送信する送信部
を含むことを特徴とするノード装置。
【請求項５】
前記クラスタに含まれているノード装置の数が前記閾値に達していることを表す情報を含む第３のハローパケットが受信されると、前記参加処理部は、前記クラスタとは異なる別のクラスタの生成を開始するとともに、前記別のクラスタに含まれるノード装置を特定するリストを生成し、
前記ハローパケット生成部は、前記別のクラスタを識別するクラスタ識別情報を含む第４のハローパケットを生成する
ことを特徴とする請求項４に記載のノード装置。
【請求項６】
前記参加処理部は、前記第２のハローパケットがブロードキャストされた後に、前記クラスタ情報を含む第３のハローパケットを受信すると、前記第３のハローパケット中のクラスタ情報に前記装置識別情報が含まれているかを確認し、
前記第３のハローパケット中のクラスタ情報に前記装置識別情報が含まれている場合、前記参加処理部は、
前記ネットワーク中の前記ノード装置が前記クラスタに含まれることを認識すると共に、
前記第３のハローパケット中のクラスタ情報を、前記ネットワーク中のノード装置が所属しているクラスタと同一のクラスタに所属している各ノード装置の装置識別情報を記録するクラスタリストに記録する
ことを特徴とする請求項４に記載のノード装置。
【請求項７】
複数のノード装置を含むネットワーク中のノード装置であって、
隣接するノード装置である隣接ノード装置からパケットを受信する受信部と、
経路情報の通知に用いられるハローパケットに、前記経路情報を相互に記憶するノード装置のグループであるクラスタに参加しているノード装置を特定するクラスタ情報と、前記クラスタに含まれているノード装置の数が閾値に達していないことを表す情報を含むパケットである第１のハローパケットを受信し、さらに、前記クラスタ情報に前記ネットワーク中の前記ノード装置を識別する装置識別情報が含まれていない場合、前記クラスタに参加することを決定する参加処理部と、
前記ネットワーク中の前記ノード装置がクラスタへの参加を要求することを前記隣接ノード装置に通知するために、前記クラスタを識別するクラスタ識別情報と前記装置識別情報を対応付けた情報を含む第２のハローパケットを生成するハローパケット生成部と、
前記ハローパケット生成部で生成されたハローパケットをブロードキャスト送信する送信部と、
前記クラスタに所属していないフリーノード装置であって、かつ、前記クラスタへの参加を要求している要求ノード装置の装置識別情報を記録するフリーノードリストと、
受信した第４のハローパケットに、前記クラスタ情報に記録されていないノード装置の装置識別情報と、前記クラスタ識別情報とを対応付けた参加要求情報が含まれていると、前記参加要求情報を前記フリーノードリストに加えるノードリスト生成部
をさらに備え、
前記ハローパケット生成部が、前記フリーノードリストを含む第５のハローパケットを生成し、前記送信部が前記第５のハローパケットを送信することにより、前記隣接ノード
に前記要求ノード装置を通知する
ことを特徴とするノード装置。
【請求項８】
前記ノードリスト生成部は、前記クラスタ情報に記録されているノード装置の数と前記フリーノードリストに記録されているノード装置の合計値が、前記クラスタに含まれるノード装置の数の上限を表す閾値を超えないように、前記フリーノードリストに記録するノード装置の数を調整する
ことを特徴とする請求項７に記載のノード装置。
【請求項９】
起点ノードは、前記起点ノードを含むクラスタに含まれるノード装置の識別情報を記録したクラスタ情報を生成し、
前記クラスタに含まれるノード装置の数が閾値に達するまで、経路情報の通知に用いられるハローパケットに、前記クラスタを識別する第１の識別情報と、前記クラスタに含まれているノード装置の数が閾値に達していないことを表す情報を含めた第１のハローパケットをブロードキャストし、
クラスタに所属していないフリーノードは、前記第１のハローパケットを受信すると、前記第１の識別情報と前記フリーノードを識別する第２の識別情報を対応付けたリストを、前記フリーノードの経路情報を含む第２のハローパケットに含めてブロードキャストし、
前記起点ノードは、前記クラスタに含まれるノード装置の数が閾値に達するまで、前記リストを用いて認識した前記フリーノードの識別情報を前記クラスタ情報に含め、
前記クラスタに参加している参加ノードは、前記クラスタに含まれるノードに至る経路を記憶する
ことを特徴とする通信方法。
【請求項１０】
前記起点ノードは、前記クラスタに含まれるノードの数が前記閾値に達すると、前記第１の識別情報と前記クラスタのノード数が前記閾値に達していることを通知する通知情報を含む第３のハローパケットをブロードキャストし、
前記通知情報を含むハローパケットを受信したフリーノードは、前記クラスタとは異なる別のクラスタの起点として、前記別のクラスタの生成を開始するとともに、前記別のクラスタに含まれるノード装置を特定する
ことを特徴とする請求項９に記載の通信方法。
【請求項１１】
前記参加ノードは、前記第１の識別情報を含む第４のハローパケットをブロードキャストし、
前記第４のハローパケットを受信したフリーノードは、前記第４のハローパケットに、前記クラスタのノード数が前記閾値に達していることを通知する通知情報が含まれていない場合、前記第１の識別情報、および、前記第４のハローパケットを受信したフリーノードを識別する第３の識別情報を対応付けた第２のリストを含む第５のハローパケットをブロードキャストし、
前記第５のハローパケットを受信した前記参加ノードは、前記第２のリストを含むハローパケットをブロードキャストし、
前記起点ノードは、前記第２のリストを含むハローパケットを受信すると、前記クラスタに含まれるノードの数が閾値に達していない場合、前記第３の識別情報で識別されるフリーノードを前記クラスタに含める
ことを特徴とする請求項９もしくは１０に記載の通信方法。
【請求項１２】
複数のノード装置を含むネットワーク中のノード装置に、
隣接するノード装置である隣接ノード装置からパケットを受信し、
経路情報の通知に用いられるハローパケットに、前記経路情報を相互に記憶するノード装置のグループであるクラスタに参加しているノード装置を特定するクラスタ情報と、前記クラスタに含まれているノード装置の数が閾値に達していないことを表す情報を含むパケットである第１のハローパケットを受信し、さらに、前記クラスタ情報に前記ネットワーク中の前記ノード装置を識別する装置識別情報が含まれていない場合、前記クラスタに参加することを決定し、
前記ネットワーク中の前記ノード装置がクラスタへの参加を要求することを前記隣接ノード装置に通知するために、前記クラスタを識別するクラスタ識別情報と前記装置識別情報を対応付けた情報を含む第２のハローパケットを生成し、
生成したハローパケットをブロードキャスト送信し、
受信した第４のハローパケットに、前記クラスタ情報に記録されていないノード装置の装置識別情報と、前記クラスタ識別情報とを対応付けた参加要求情報が含まれている場合、前記クラスタに所属していないフリーノード装置であって、かつ、前記クラスタへの参加を要求している要求ノード装置の装置識別情報を記録するフリーノードリストに、前記参加要求情報を加え、
前記フリーノードリストを含む第５のハローパケットを生成し、
前記第５のハローパケットを送信することにより、前記隣接ノードに前記要求ノード装置を通知する
処理を行わせることを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークに属する複数のノード装置の間での通信方法と、ノード装置に関する。
【背景技術】
【０００２】
無線アドホックネットワークに属するノード装置は、ルーティング情報を伝播させるために、Ｈｅｌｌｏパケットを用いる。例えば、図１に示すアドホックネットワークに属するノード装置Ａは、ノード装置Ａが保持しているルーティング情報を含むＨｅｌｌｏパケットを生成し、周期的にブロードキャストする。Ｈｅｌｌｏパケットを受信したノード装置Ｂは、ノード装置Ｂが保持しているルーティング情報と、Ｈｅｌｌｏパケットに含まれている情報を比較し、ノード装置Ｂが保持していなかったルーティング情報をＨｅｌｌｏパケットから取得する。さらに、ノード装置Ｂは、Ｈｅｌｌｏパケットから経路の品質情報も取得し、なるべく品質情報の良い経路を用いて通信を行う。この品質情報には、ループ情報も含まれている。このように、アドホックネットワークに属するノード装置は、Ｈｅｌｌｏパケットを用いて、ネットワーク中に含まれている他のノード装置への経路情報を学習し、得られた最適経路を用いて通信を行う。ここで、アドホックネットワークに含まれている各ノード装置は、アドホックネットワーク中の他の全てのノード装置までの経路をルーティングテーブル中に保持する。例えば、ノード装置Ａは、アドホックネットワーク中のノード装置Ａ以外のノード装置の各々への経路情報をルーティングテーブルに保持する。このため、ノード装置Ａは、例えば、ノード装置Ｂを介してノード装置Ｃにデータパケットを送信することができる。このようなアドホックネットワークに用いられるノード装置には、パケットの最終宛先ごとに中継先とするノードについての重み付け情報を格納する重み付けテーブルを備えるノード装置も含まれる。このノード装置では、パケットを転送する際に、パケットの宛先ノードに対応付けられた重み付けテーブルを参照して、パケットを中継するための宛先とするノードを特定する。【０００３】
しかし、各ノード装置がアドホックネットワーク中の他の全てのノード装置までの経路をルーティングテーブル中に保持する方法では、ネットワーク中のノード装置の数が増加すると、ルーティングテーブルの大きさが大きくなってしまう。そこで、ネットワーク中のノード装置をクラスタに分け、各ノード装置が同一のクラスタ内のノード装置までの経路情報をルーティングテーブルに記憶する方法が考案されている。【０００４】
関連する技術として、記憶装置、グループ分割装置、通信経路選択装置、中継装置を備えた無線通信装置が考案されている。この無線通信装置では、記憶装置に記憶された経路情報に基づいて無線通信装置が属するクラスタを決定し、その結果を記憶装置に記憶する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００９／１３０９１８号
【特許文献２】特開２００３−７８５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
クラスタの生成の際には制御パケットが使用される。例えば、背景技術で述べた、記憶装置に記憶された経路情報に基づいて無線通信装置が属するクラスタを決定する無線通信装置は、クラスタに参加する場合とクラスタから離脱する場合に、制御パケットを送受信する。制御パケットがユニキャスト送信される場合や、ネットワーク中の全てのノード装置に向けてフラッディングされる場合は、制御パケットの送受信や中継処理により、ネットワーク中のノード装置の負荷が増大してしまうという問題がある。【０００７】
本発明では、アドホックネットワーク中のノード装置にかかる負荷を小さくすることを目的とする。
【課題を解決するための手段】
【０００８】
ノード装置は、複数のノード装置を含むネットワーク中のノード装置であって、受信部、クラスタ生成部、ハローパケット生成部、送信部を備える。受信部は、隣接するノード装置である隣接ノード装置からパケットを受信する。クラスタ生成部は、ネットワーク中の前記複数のノード装置の中で、経路情報を記憶するノード装置のグループであるクラスタに含まれるノード装置の装置識別情報を記録したクラスタリストを生成する。ハローパケット生成部は、前記経路情報の通知に用いられるハローパケットに、前記クラスタを識別するクラスタ識別情報を格納した第１のハローパケットを生成する。送信部は、前記第１のハローパケットをブロードキャスト送信する。前記クラスタ生成部は、クラスタに所属していないフリーノード装置から、前記フリーノード装置を識別する装置識別情報と前記クラスタ識別情報が対応付けられた情報を含む第２のハローパケットを受信することがある。この場合、前記クラスタ生成部は、前記クラスタリストに記録されたノード装置の数が閾値に達するまで、前記フリーノード装置の装置識別情報を前記クラスタリストに追加する。
【発明の効果】
【０００９】
アドホックネットワーク中のノード装置にかかる負荷が小さくなる。
【図面の簡単な説明】
【００１０】
【図１】アドホックネットワークの例を示す図である。
【図２】クラスタが生成されたネットワークの例を示す図である。
【図３】ノード装置の構成の例を示す図である。
【図４】ハローパケットのフォーマットの例を示す図である。
【図５】ノード種別判定部が記憶するテーブルの例を示す図である。
【図６】ノード装置のハードウェア構成の例を示す図である。
【図７】クラスタが形成される前のアドホックネットワークの例を示す図である。
【図８】クラスタの生成の際に行われる動作の例を説明するシーケンス図である。
【図９】クラスタが形成された後のアドホックネットワークの例を示す図である。
【図１０】クラスタ生成部の動作の例を説明するフローチャートである。
【図１１】ノードリスト生成部の動作の例を説明するフローチャートである。
【図１２】クラスタリスト更新部の動作の例を説明するフローチャートである。
【図１３】参加処理部の動作の例を説明するフローチャートである。
【図１４】第２および第３の実施形態に係るアドホックネットワークの例を示す図である。
【図１５】第２の実施形態に係るクラスタの生成の際に行われる動作の例を説明するシーケンス図である。
【図１６】第３の実施形態に係るクラスタの生成の際に行われる動作の例を説明するシーケンス図である。
【発明を実施するための形態】
【００１１】
図２はクラスタが生成されたネットワークの例を示す。図２に示すアドホックネットワークには、ノードＮ１〜Ｎ１４の１４台のノード装置が含まれており、隣接するノード装置は実線で結ばれている。以下の説明では、複数のノード装置が互いにパケットを送受信できる距離に位置することを「隣接する」と記載する。また、あるノード装置から送信されたパケットを受信できる範囲に位置するノード装置のことを、そのノード装置の「隣接ノード」と記載することがある。例えば、あるノード装置から送信されたハローパケットは、送信元のノード装置の隣接ノードで受信される。以下の説明で、ハローパケットは、ネットワークの経路情報を通知するために用いられるパケットであるものとする。ここで、経路情報には、隣接ノードを特定する情報と、隣接ノードがルーティングテーブルに保持している経路情報が含まれる。
【００１２】
図２では、アドホックネットワークに含まれるノードのうち、ノードＮ４が起点ノードに指定されているものとする。「起点ノード」とは、クラスタの生成を開始するノード装置であり、起点ノード自身を含むクラスタを生成する。この例では、ノードＮ４は、ノードＮ４を含むクラスタＣ１を生成する。また、ノードＮ４がクラスタの生成を開始した時点では、ノードＮ１〜Ｎ３、Ｎ５〜Ｎ１４は、いずれもクラスタに所属していない。以下の説明では、クラスタに所属していないノード装置のことを「フリーノード」と記載することがある。
【００１３】
起点ノードは、生成しているクラスタの識別子とそのクラスタに参加しているノード装置の識別子を含むハローパケットを、ブロードキャスト送信する。フリーノードは、起点ノードから送信されたハローパケットにより生成中のクラスタの識別子を認識する。さらに、フリーノードは、クラスタに参加する場合、参加するクラスタの識別子とそのフリーノードの識別子を対応付けた情報を含むハローパケットを生成し、生成したハローパケットをブロードキャスト送信する。図２の例では、ノードＮ４に隣接するノードＮ１、Ｎ３、Ｎ５、Ｎ６は、起点ノードＮ４から送信されてきたハローパケットを受信することにより、生成が開始されたクラスタＣ１の識別子を認識する。ノードＮ１、Ｎ３、Ｎ５、Ｎ６はクラスタに所属していないので、クラスタＣ１の識別子を認識すると、クラスタＣ１に参加することを決定する。そこで、ノードＮ１、Ｎ３、Ｎ５、Ｎ６は、ハローパケットにより、それぞれのノードの識別子とクラスタＣ１の識別子を対応付けた情報をブロードキャスト送信する。
【００１４】
起点ノードＮ４は、生成したクラスタＣ１の識別子に対応付けてノードの識別子が通知されると、クラスタＣ１への参加の要求を受信したと認識する。そこで、起点ノードＮ４は、受信したハローパケットにより、生成中のクラスタに参加するノードを認識し、認識したノードをクラスタに加える。クラスタに加えられたノード装置は、そのノード装置がクラスタに含まれていることを、起点ノードからのハローパケットで確認する。以下の説明では、クラスタに参加しているノードを「参加ノード」と記載することがある。参加ノードは、参加しているクラスタの識別子を含むハローパケットをブロードキャストする。フリーノードは、参加ノードで生成されたハローパケットから生成中のクラスタの識別子を認識すると、前述の手順によりクラスタに参加する。これらの処理は、クラスタに含まれるノード装置の数が閾値に達するまで繰り返される。
【００１５】
クラスタに含まれるノード装置の数が閾値に達すると、起点ノードは、新たなクラスタの生成を要求する情報（生成要求）を含むハローパケットをブロードキャスト送信する。生成要求を受信した参加ノードは、受信した生成要求を含めたハローパケットを生成してブロードキャスト送信する。生成要求を含むハローパケットを受信したフリーノードは、新たな起点ノードとして動作して、クラスタの生成を開始する。図２の例では、閾値は７であり、ノードＮ１〜Ｎ７がクラスタＣ１に参加した後で、生成要求を含むハローパケットがブロードキャスト送信される。生成要求を含むハローパケットを受信したノードＮ８は、新たなクラスタＣ２の生成を開始し、クラスタＣ１と同様の方法によりクラスタＣ２が生成される。クラスタが生成されると、各ノード装置は、同一のクラスタ内の他のノード装置に至る経路をルーティングテーブルに記録する。
【００１６】
このように、実施形態にかかる方法では、クラスタの生成に用いられる情報は、ハローパケットにより送受信される。このため、クラスタ生成時にノード装置がパケットを送受信することにより発生する負荷は、クラスタの生成のために特別な制御パケットが用いられる場合に比べて小さい。さらに、クラスタが生成されると、各ノード装置は、アドホックネットワークに含まれる全てのノード装置までの経路を記憶しなくても良い。このため、各ノード装置のルーティングテーブルの大きさは、アドホックネットワークがクラスタに分割されていない場合に比べて小さくなる。このため、各ノード装置において、経路情報を記憶することにより生じる負荷の大きさも軽減される。また、クラスタの生成に用いられる情報は、ハローパケットにより送受信されるため、制御パケットを用いる場合に比べてクラスタを生成するために行われる情報の送受信による帯域の消費量が少なくて良い。従って、制御パケットを用いる場合に比べてデータの送受信に用いることができる帯域が大きくなる。
【００１７】
＜装置構成＞
図３は、ノード装置１０の構成の例を示す。ノード装置１０は、受信部１１、送信部１２、設定部２１、ノード種別判定部２２、参加処理部２３、クラスタリスト更新部２４、クラスタ生成部２５、ノードリスト生成部２６、ハローパケット生成部２７を備える。さらに、ノード装置１０は、ノード種別情報３１、クラスタリスト３２、フリーノードリスト３３を記憶する。
【００１８】
受信部１１は、隣接するノード装置１０から送信されたパケットを受信し、ハローパケットをノード種別判定部２２に出力する。送信部１２は、パケットを隣接するノード装置１０に送信する。例えば、送信部１２は、ハローパケット生成部２７で生成されたハローパケットを隣接するノード装置１０に送信する。
【００１９】
図４は、ハローパケットのフォーマットの例を示す。図４（ａ）に示すように、ハローパケットは、ヘッダとペイロードを含む。ヘッダは、Ｔｙｐｅフィールド、グローバル宛先（Global Destination、ＧＤ）フィールド、グローバル送信元（Global Source、ＧＳ）フィールド、ローカル送信元（Local Source、ＬＳ）フィールド、ローカル宛先（Local Destination、ＬＤ）フィールドを含む。以下の説明で、「グローバル宛先」は、パケットの最終的な宛先のノード装置１０を示すものとする。一方、「ローカル宛先」は、パケットをグローバル宛先に送信するために行われる１ホップの転送の際に、宛先として指定されるノード装置１０を示す。「ローカル送信元」は、パケットが１ホップ転送される場合の転送元のノード装置１０を指す。「グローバル送信元」は、パケットを生成したノード装置１０を示す。ハローパケットは、送信元のノード装置１０の隣接ノード装置にブロードキャストされるので、ＧＤとＬＤは、全ての隣接ノードを表すブロードキャストアドレスであり、ＧＳとＬＳはハローパケットを生成したノード装置１０のアドレスである。Ｔｙｐｅフィールドは、ペイロードに含まれるデータの種類を示す情報を記録する。ハローパケットの場合、Ｔｙｐｅフィールドの値はハローパケットを特定する値に設定される。受信部１１は、Ｔｙｐｅフィールドの値を用いてハローパケット識別し、ノード種別判定部２２に出力する。
【００２０】
ペイロードには、Ｈｅｌｌｏヘッダの数を表す情報、Ｈｅｌｌｏヘッダ、クラスタリストフィールド、フリーノードリストフィールドが含まれる。各々のＨｅｌｌｏヘッダは経路情報を含む。経路情報は、ハローパケットを生成するノード装置１０のルーティングテーブル（図示せず）に経路が記憶されているＧＤの識別子が含まれる。
【００２１】
クラスタリストフィールドには、ハローパケットの送信元のノード装置１０に保持されているクラスタリスト３２の情報が記録される。以下の説明では、クラスタリストフィールドに記録されている情報を「クラスタ情報」と記載することがある。クラスタリストの例を図４（ｂ）に示す。クラスタリストには、クラスタ識別子（ＣＩＤ、cluster identifier）と、クラスタ識別子で識別されるクラスタに含まれているノード装置の識別子（装置識別子、ＮＩＤ、node identifier）のリスト、ｅｎｄフラグが記録される。ｅｎｄフラグは、クラスタ識別子で識別されるクラスタに新たなノード装置１０が参加することができるかを示す情報である。ｅｎｄフラグの情報が「ｔｒｕｅ」である場合、クラスタに含まれているノード数が閾値に達しているため、クラスタに新たなノード装置１０が参加することができない。後述するように、ｅｎｄフラグ＝ｔｒｕｅのクラスタリスト３２が含まれているハローパケットは、新たなクラスタの生成を要求するための情報（生成要求）として用いられる。一方、ｅｎｄフラグの情報が「ｆａｌｓｅ」である場合、クラスタに含まれているノード数が閾値に達していないため、クラスタに新たなノード装置１０が参加することができる。従って、クラスタリスト３２は、クラスタに含まれるノードと、クラスタにノード装置１０の追加が可能であるかが記録されている。なお、図４（ｂ）に示すように、クラスタリスト３２に含まれる装置識別子の数は任意である。また、クラスタリスト３２は、ｅｎｄフラグを含まなくても良い。ｅｎｄフラグはクラスタのノード数が上限であるかを示す値である。従って、クラスタリスト３２にｅｎｄフラグが含まれない場合、ノード装置１０は、例えば、クラスタリストに含まれているノードＩＤの数などを用いて、新たなノード装置１０がクラスタに参加可能かを判断することができる。これ以降はクラスタリスト３２にｅｎｄフラグが含まれている場合を例として説明する。
【００２２】
フリーノードリストフィールドには、ハローパケットの送信元のノード装置１０に備えられたフリーノードリスト３３中の情報が記録される。以下の説明では、フリーノードリストフィールドに記録されている情報を「フリーノード情報」と記載することがある。フリーノードリスト３３の例を図４（ｃ）に示す。フリーノードリスト３３には、フリーノードの識別子と、そのフリーノードが参加しようとするクラスタのクラスタ識別子を対にした情報が含まれる。なお、フリーノードリスト３３が含むフリーノードの識別子とクラスタの識別子の組合せの数は、任意である。
【００２３】
設定部２１は、ノード装置１０を起点ノード、参加ノード、フリーノードのいずれかに設定し、ノード装置１０の種別を特定する情報を、ノード種別情報３１に記録する。ノード種別情報３１は、ノード装置１０の種別を特定できる任意の形式の情報である。
【００２４】
ノード種別判定部２２は、受信部１１からハローパケットが入力されると、ノード種別情報３１にアクセスすることにより、ノード装置１０の種別を認識する。以下の説明では、ノード種別判定部２２は、図５に示すようなテーブルを記憶するものとする。図５のテーブルでは、ノードの種別と、ハローパケット中のクラスタ情報およびフリーノード情報の出力先が関係付けられている。ノード種別判定部２２は、図５のテーブルの欄に丸で示した出力先に、クラスタ情報やフリーノード情報を出力する。例えば、フリーノード中のノード種別判定部２２は、受信したハローパケット中のクラスタ情報を参加処理部２３に出力する。参加ノード中のノード種別判定部２２は、クラスタ情報をクラスタリスト更新部２４に出力し、フリーノード情報をノードリスト生成部２６に出力する。起点ノード中のノード種別判定部２２は、受信したハローパケット中のフリーノード情報をクラスタ生成部２５に出力する。
【００２５】
ノード装置１０が起点ノードである場合、フリーノード情報を入力されたクラスタ生成部２５は、フリーノード情報中のクラスタ識別子と起点ノードが生成したクラスタの識別子が一致するかを確認する。両者が一致する場合、クラスタ生成部２５は、自ノードで生成したクラスタへの参加要求を受信したと認識する。そこで、クラスタ中に含まれているノード装置１０の数が閾値より小さい場合、クラスタ生成部２５は、フリーノード情報に含まれているノード装置１０をクラスタに追加し、クラスタリスト３２を更新する。
【００２６】
ノード装置１０が参加ノードである場合、ノードリスト生成部２６がフリーノード情報を処理し、クラスタリスト更新部２４がクラスタ情報を処理する。なお、以下の説明では、参加ノードが所属しているクラスタのことを「所属クラスタ」と記載することがある。
【００２７】
クラスタリスト更新部２４は、ハローパケットで通知されたクラスタ情報が所属クラスタについての情報であるかを確認するために、クラスタ情報に含まれているクラスタ識別子と所属クラスタの識別子が一致するかを確認する。両者が一致する場合は所属クラスタの情報が通知されているので、クラスタリスト更新部２４は、クラスタリスト３２をクラスタ情報に合わせて更新する。さらに、クラスタリスト更新部２４は、フリーノードリスト３３からクラスタ情報に含まれているノードに関するエントリを削除する。一方、ノードリスト生成部２６は、フリーノード情報が入力されると、フリーノード情報に含まれているノードの識別子をフリーノードリスト３３に追加する。
【００２８】
ノード装置１０がフリーノードである場合、参加処理部２３がクラスタ情報を処理する。参加処理部２３は、クラスタへの参加の要求と参加の確認を行う。参加処理部２３は、ハローパケットを受信すると、クラスタ情報に含まれているクラスタ識別子とｅｎｄフラグの値を確認する。さらに、参加処理部２３は、自ノードの装置識別子を含むエントリがフリーノードリスト３３に保持されているかを確認する。自ノードが既にクラスタへの参加を要求している場合、フリーノードリスト３３に自ノードの装置識別子を含むエントリが含まれている。一方、フリーノードリスト３３に自ノードの装置識別子を含むエントリがない場合は、自ノードはクラスタへの参加を要求していない。そこで、参加処理部２３は、参加が可能なクラスタ（ｅｎｄフラグ＝ｆａｌｓｅ）に参加を要求するために、クラスタ情報中のクラスタ識別子と自ノードの識別子の組合せをフリーノードリスト３３に記録する。
【００２９】
一方、フリーノードリスト３３に自ノードの装置識別子を含むエントリが含まれている場合、自ノードは既にクラスタへの参加を要求している。そこで、参加処理部２３は、クラスタに参加できたかを確認するために、クラスタ情報に自ノードの識別子が含まれているかを確認する。クラスタ情報に自ノードの識別子が含まれている場合、参加処理部２３は、自ノードはクラスタに参加していると判断してクラスタリストを更新し、フリーノードリスト３３のエントリを削除する。また、クラスタ情報中のｅｎｄフラグが「ｔｒｕｅ」である場合、参加処理部２３はフリーノードリストのエントリを削除する。フリーノードリストに自ノードの装置識別子が含まれていない場合に、同様にｅｎｄフラグが「ｔｒｕｅ」であるクラスタ情報を受信すると、自ノードを起点ノードに指定して、ノード種別情報３１の情報を変更し、さらに、クラスタリスト３２を生成する。
【００３０】
ハローパケット生成部２７は、ハローパケットを生成し、送信部１２に出力する。ハローパケットのフォーマットは、図４の通りである。また、ハローパケット生成部２７は、クラスタリスト３２とフリーノードリスト３３を用いてハローパケットを生成する。なお、参加ノードもしくは起点ノードに備えられたハローパケット生成部２７は、ルーティングテーブルに記録されている情報も、ハローパケットに含めることができる。
【００３１】
図６は、ノード装置１０のハードウェア構成の例を示す図である。ノード装置１０は、MicroProcessingUnit（ＭＰＵ）１００、バス１０１（１０１ａ〜１０１ｃ）、PHYsical layer（ＰＨＹ）チップ１０２、タイマＩＣ１０４、Dynamic Random access Memory（ＤＲＡＭ）１０６、フラッシュメモリ１０７、無線モジュール１０８を備える。バス１０１ａ〜１０１ｃは、ＭＰＵ１００、ＰＨＹチップ１０２、タイマＩＣ１０４、ＤＲＡＭ１０６、フラッシュメモリ１０７、無線モジュール１０８の間でデータの入出力が可能になるように接続する。
【００３２】
ＭＰＵ１００は、フラッシュメモリ１０７に格納されたファームウェアなどのプログラムを読み込んで処理を行う。このとき、ＭＰＵ１００は、ＤＲＡＭ１０６をワーキングメモリとして使用できる。ＭＰＵ１００は、設定部２１、ノード種別判定部２２、参加処理部２３、クラスタリスト更新部２４、クラスタ生成部２５、ノードリスト生成部２６、および、ハローパケット生成部２７として動作する。ＤＲＡＭ１０６は、ノード種別情報３１、クラスタリスト３２、フリーノードリスト３３、ルーティングテーブルを記憶し、さらに、ＭＰＵ１００での処理に用いられる情報を記憶できる。なお、ノード種別情報３１はフラッシュメモリ１０７に格納されていても良い。この場合、起動後に、フラッシュメモリ１０７に格納されているノード種別情報３１がＤＲＡＭ１０６に読み込まれる。ＰＨＹチップ１０２や無線モジュール１０８は、受信部１１および送信部１２として動作する。ここで、ＰＨＹチップ１０２はオプションであり、ノード装置１０は、ＰＨＹチップ１０２を介して回線による通信を行うことができる。例えば、Ｌ３ネットワークとアドホックネットワークとの間のゲートウェイとして動作するノード装置１０は、Ｌ３ネットワーク中のノード装置とＰＨＹチップ１０２を用いて通信することができる。タイマＩＣ１０４は、ハローパケットを送信する時刻を決定する際に用いられる。ハローパケット生成部２７や送信部１２は、タイマＩＣ１０４から得られた時刻情報に基づいてハローパケットを送信するタイミングを決定することができる。
【００３３】
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置１０にインストールされてもよい。または、プログラムは、ネットワークからＰＨＹチップ１０２や無線モジュール１０８を介してダウンロードされることによりノード装置１０にインストールされてもよい。また、実施形態に応じて、ＤＲＡＭ１０６やフラッシュメモリ１０７以外の他の種類の記憶装置が利用されることがある。また、ノード装置１０は、コンピュータによって実現されても良い。
【００３４】
＜第１の実施形態＞
図７に、アドホックネットワークの例を示す。図７に示すネットワークには、ノードＧＷ、ノードＡ〜Ｄの５つのノードが含まれている。図７では、隣接ノード同士を実線で結んでいる。例えば、ノードＧＷの隣接ノードは、ノードＡであり、ノードＡの隣接ノードは、ノードＧＷとノードＢである。同様に、ノードＣの隣接ノードはノードＢとノードＤである。以下の説明では、アドホックネットワークが形成されたときに、ノードＧＷが起点ノードに設定され、ノードＡ〜Ｄはフリーノードに設定されたものとする。
【００３５】
図８は、クラスタの生成の際に行われる動作の例を説明するシーケンス図である。以下、図８を参照しながら、図７のネットワークでクラスタが生成される場合について、個々のノード装置１０の動作を説明する。以下の説明では、クラスタ中のノード装置１０の数の上限（閾値）が３である場合を例として説明するが、クラスタ中のノード装置１０の数の上限は、１以上の任意の整数に変更されることがある。さらに、以下の説明では、クラスタの識別子は、そのクラスタを生成した起点ノードのＩＤであるものとする。例えば、ノードＧＷが起点ノードとなっているクラスタの識別子はＧＷである。また、以下の記載では、クラスタを特定する際に、「クラスタ」という文字列の後にクラスタの識別子を続けた文字列を用いることがあるものとする。例えば、クラスタ識別子がＧＷであるクラスタを「クラスタＧＷ」と記載することがある。なお、図８では図を見やすくするために、ハローパケットを受信したノードでクラスタリスト（ＣＬ）３２やフリーノードリスト（ＦＮＬ）３３が更新されない場合、ハローパケットの送受信を表す矢印を省略している。
【００３６】
（１）ノードＧＷの設定部２１は、ノードＧＷを起点ノードに設定し、ノードＧＷが起点ノードであることを示す情報をノード種別情報３１に格納する。さらに、設定部２１は、クラスタＧＷとクラスタＧＷの情報を記録するクラスタリスト３２を生成する。ここで、設定部２１は、クラスタＧＷを識別する識別子（ＧＷ）とクラスタＧＷに含まれるノードをクラスタリスト３２に記録し、ｅｎｄフラグを「ｆａｌｓｅ」（ｆ）に設定する。
【００３７】
（２）ノードＧＷのハローパケット生成部２７は、ハローパケットを生成する。ハローパケット生成部２７は、ヘッダ中のＧＳとＬＳをノードＧＷのアドレスにし、ＧＤとＬＤを全ての隣接ノードを表すブロードキャストアドレスに設定する。さらに、ハローパケット生成部２７は、クラスタリスト３２に記録されている情報を、クラスタリストフィールドに格納する。このため、ノードＧＷは、ハローパケットにより、クラスタ識別子ＧＷとｅｎｄフラグ＝ｆａｌｓｅという情報を隣接ノードに通知することができる。
【００３８】
ノードＧＷは起点ノードである。また、フリーノードリスト３３中にエントリが含まれていないため、ノードＧＷのハローパケット生成部２７は、フリーノード情報をハローパケットに含めない。さらに、この時点ではルーティングテーブルが生成されていないので、ハローパケット生成部２７は、ルーティングテーブルの経路情報をハローパケットに含めない。従って、ノードＧＷは、ハローパケットにより、ノードＧＷが隣接ノードであることを、ハローパケットを受信するノード装置１０に、経路情報として通知する。ハローパケット生成部２７は、生成したハローパケットを送信部１２に出力する。送信部１２は、ハローパケットをブロードキャスト送信する。
【００３９】
（３）ノードＡはノードＧＷの隣接ノードであるので、ノードＧＷから送信されたハローパケットを受信する。ノードＡのノード種別判定部２２は、受信部１１を介してハローパケットを受信すると、ノード種別情報３１を用いてノードＡがフリーノードに設定されていることを認識する。そこで、ノード種別判定部２２は、ハローパケットに含まれているクラスタ情報を参加処理部２３に出力する。参加処理部２３は、クラスタ情報中のｅｎｄフラグの値が「ｆａｌｓｅ」であるので、クラスタＧＷに含まれているノード装置１０の数が閾値未満であると認識する。そこで、参加処理部２３は、ノードＡをクラスタＧＷに参加させることを決定し、ノードＡのＩＤとクラスタＧＷの識別子を対応付けてフリーノードリスト３３に格納する。
【００４０】
（４）ノードＡのハローパケット生成部２７は、ハローパケットを生成する。このとき、ハローパケット生成部２７は、フリーノードリスト３３に記録されている情報を、フリーノード情報として、フリーノードリストフィールドに格納する。このため、ノードＡは、ノードＡがクラスタＧＷに参加しようとしていることを、ハローパケットにより隣接ノードに通知することができる。
【００４１】
この時点では、ノードＡはいずれのクラスタにも所属しておらず、クラスタリスト３２に情報が記録されていないため、ハローパケット生成部２７は、クラスタ情報をハローパケットに含めない。また、ノードＡではルーティングテーブルも生成されていないので、ハローパケットにはルーティングテーブルからの経路情報も含まれない。従って、ハローパケットにより、ノードＡは、ノードＡが隣接していることを、隣接ノードに経路情報として通知する。さらに、ハローパケット生成部２７は、ヘッダ中のＧＳとＬＳを自ノードのアドレスに設定し、ＧＤとＬＤを全ての隣接ノードを表すブロードキャストアドレスに設定する。ハローパケット生成部２７は、生成したパケットを送信部１２に出力する。ノードＡの送信部１２は、ハローパケットをブロードキャスト送信する。
【００４２】
（５）ノードＧＷとノードＢは、ノードＡが送信したハローパケットを受信する。ノードＧＷのノード種別判定部２２は、ノードＧＷが起点ノードであることを確認すると、受信したハローパケットのフリーノード情報をクラスタ生成部２５に出力する。クラスタ生成部２５は、フリーノード情報に含まれているクラスタ識別子が生成したクラスタの識別子と一致しているかを確認する。フリーノード情報に含まれているクラスタ識別子が生成したクラスタの識別子と一致している場合、クラスタ生成部２５は、フリーノード情報に含まれている識別子で識別されるノード装置１０を、生成したクラスタに加えることができるかを確認する。
【００４３】
ここでは、クラスタ生成部２５は、クラスタ識別子がＧＷであるかを確認する。手順（４）で述べたように、ノードＡの識別子はクラスタＧＷの識別子に対応付けられているので、クラスタ生成部２５は、ノードＡをクラスタＧＷに加える。クラスタ生成部２５は、ノードＧＷが保持しているクラスタリスト３２にノードＡの識別子（Ａ）を加える。クラスタ生成部２５は、ノードＡが加わった後でクラスタＧＷに含まれているノードの数を閾値と比較する。このときは、クラスタＧＷにはノードＧＷとＡが含まれているので、クラスタＧＷ中のノード装置１０の数は閾値を越えていない。そこで、クラスタ生成部２５は、ｅｎｄフラグの値を「ｆａｌｓｅ」のままにする。
【００４４】
一方、ノードＢは、フリーノードであるため、ノードＢのノード種別判定部２２は、ノードＡから受信したハローパケットからクラスタ情報を抽出して参加処理部２３に出力しようとする。しかし、手順（４）でノードＡが送信したハローパケットにはクラスタ情報が含まれていない。そこで、ノードＢはクラスタの生成に関する処理を終了する。
【００４５】
（６）ノードＧＷのハローパケット生成部２７は、ハローパケットを生成する。ヘッダの設定は手順（２）と同様である。ハローパケット生成部２７は、クラスタリスト３２に記録されている情報を、クラスタリストフィールドに格納する。今回生成されるハローパケットのクラスタ情報により、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ
ｅｎｄフラグ＝ｆａｌｓｅ
という情報が隣接ノードに通知される。生成されたハローパケットは、ブロードキャスト送信される。
【００４６】
（７）ノードＡがノードＧＷからハローパケットを受信すると、ノードＡのノード種別判定部２２は、ハローパケット中のクラスタ情報を参加処理部２３に出力する。参加処理部２３は、クラスタ情報に含まれているクラスタ識別子、クラスタに含まれるノード、および、ｅｎｄフラグの値を確認する。ここで、ノードＡは、手順（４）で送信したハローパケットを用いてクラスタＧＷへの参加を要求しているので、参加処理部２３は、クラスタに含まれるノードの識別子を確認することにより、クラスタＧＷにノードＡが加えられたかを確認する。今回ノードＡが受信したハローパケットのクラスタ情報には、クラスタＧＷに参加しているノードはノードＧＷとノードＡであることが記録されている。そこで、参加処理部２３は、ノードＡがクラスタＧＷに参加したことを認識して、クラスタリスト３２を更新する。更新後のクラスタリスト３２に含まれている情報は、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ
ｅｎｄフラグ＝ｆａｌｓｅ
となる。
【００４７】
参加処理部２３は、ノード種別情報３１を更新することにより、ノードＡの設定をフリーノードから参加ノードに変更する。さらに、参加処理部２３は、フリーノードリスト３３とクラスタ情報を比較し、クラスタ情報に含まれているノードをフリーノードリスト３３から削除する。ここでは、手順（３）でノードＡがフリーノードリスト３３に記録されたが、その後に受信したクラスタ情報にノードＡが含まれている。そこで、参加処理部２３は、フリーノードリスト３３からノードＡのエントリを削除する。
【００４８】
（８）ノードＡのハローパケット生成部２７は、ハローパケットを生成する。このとき、ハローパケット生成部２７は、クラスタリスト３２に記録されている情報を、クラスタ情報として、クラスタリストフィールドに格納する。このため、ノードＡは、クラスタＧＷに参加していること、クラスタＧＷに含まれるノード装置１０、および、クラスタＧＷにまだノード装置１０が参加できることを、ハローパケットを用いて隣接ノード装置に通知することができる。なお、この時点では、ノードＡはフリーノードリスト３３にフリーノードの情報を保持していないので、ハローパケットのフリーノードリストフィールドにはフリーノード情報が含まれない。ハローパケットのヘッダの設定は手順（４）と同様である。生成されたハローパケットはブロードキャスト送信される。
【００４９】
（９）ノードＧＷとノードＢは、ノードＡが送信したハローパケットを受信する。ノードＢはフリーノードであるため、ノードＢのノード種別判定部２２は、受信したハローパケット中のクラスタ情報を参加処理部２３に出力する。クラスタ情報に含まれているｅｎｄフラグの値は「ｆａｌｓｅ」であるので、参加処理部２３は、クラスタＧＷに含まれているノード装置１０の数が閾値未満であることを認識する。そこで、参加処理部２３は、ノードＢをクラスタＧＷに参加させることを決定し、ノードＢの識別子とクラスタＧＷの識別子を対応付けてフリーノードリスト３３に格納する。
【００５０】
一方、ノードＧＷでは、手順（５）で述べたように、ハローパケット中のフリーノード情報が確認される。手順（８）で生成されたハローパケットにはフリーノード情報が含まれていないので、ノードＧＷのクラスタ生成部２５は特に処理を行わない。
【００５１】
（１０）ノードＢのハローパケット生成部２７は、ハローパケットを生成する。ここで生成されるハローパケットがブロードキャスト送信されることにより、ノードＢがクラスタＧＷに参加しようとしていることが、ノードＢの隣接ノードに通知される。
【００５２】
（１１）ノードＡのノード種別判定部２２は、ノードＢから送信されたハローパケットを受信する。ノードＡは手順（７）で参加ノードに設定されているので、ノードＡのノード種別判定部２２は、図５に示すように、フリーノード情報をノードリスト生成部２６に出力する。ノードリスト生成部２６は、フリーノード情報に含まれている情報を用いてノードＡのフリーノードリスト３３を更新する。従って、更新後のノードＡのフリーノードリスト３３には、ノードＢのＩＤとクラスタＧＷの識別子の組合せが格納される。
【００５３】
（１２）ノードＡのハローパケット生成部２７は、ハローパケットを生成する。このとき、ハローパケット生成部２７は、クラスタリスト３２中の情報を、クラスタ情報として、クラスタリストフィールドに格納し、フリーノードリスト３３中の情報をフリーノード情報としてフリーノードリストフィールドに格納する。従って、ノードＡは、ノードＢがクラスタＧＷに参加しようとしていることをハローパケットによってブロードキャストする。
【００５４】
（１３）ノードＧＷとノードＢは、ノードＡが送信したハローパケットを受信する。ノードＧＷのノード種別判定部２２は、ハローパケットから抽出したフリーノード情報をクラスタ生成部２５に出力する。クラスタ生成部２５は、手順（５）でノードＡをクラスタＧＷに加えたときと同様の処理により、ノードＢをクラスタＧＷに追加する。クラスタ生成部２５は、ノードＢが加わった後でクラスタＧＷに含まれているノードの数を閾値と比較する。このときは、クラスタＧＷにはノードＧＷ、Ａ、Ｂが含まれているので、クラスタＧＷ中のノード装置１０の数は、閾値と一致する。そこで、クラスタ生成部２５は、ｅｎｄフラグの値を「ｔｒｕｅ」に変更する。この処理により、ノードＧＷのクラスタリスト３２は、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ、Ｂ
ｅｎｄフラグ＝ｔｒｕｅ
のように更新される。
【００５５】
一方、ノードＢはフリーノードであるため、ノードＢのノード種別判定部２２は、ノードＡから受信したハローパケットからクラスタ情報を抽出すると、クラスタ情報を参加処理部２３に出力する。クラスタ情報に含まれている情報は手順（９）でノードＢが受信したハローパケットのクラスタ情報と同じであるため、ノードＢは処理を終了する。
【００５６】
（１４）ノードＧＷは、手順（６）と同様にハローパケットを生成し、生成したハローパケットをブロードキャスト送信する。
【００５７】
（１５）ノードＡがノードＧＷからハローパケットを受信すると、ノードＡのノード種別判定部２２は、ハローパケットに含まれているクラスタ情報をクラスタリスト更新部２４に出力する。今回ノードＡが受信したハローパケットのクラスタ情報には、クラスタＧＷに参加しているノードはノードＧＷ、Ａ、Ｂであることが記録されている。そこで、クラスタリスト更新部２４は、クラスタ情報に合せてクラスタリスト３２を更新する。更新後のクラスタリスト３２に含まれている情報は、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ、Ｂ
ｅｎｄフラグ＝ｔｒｕｅ
となる。
【００５８】
クラスタリスト更新部２４は、フリーノードリスト３３とクラスタ情報を比較し、クラスタ情報に含まれているノードをフリーノードリスト３３から削除する。ここでは、手順（１１）でノードＢがフリーノードリスト３３に記録されたが、その後に受信したクラスタ情報にノードＢが含まれている。そこで、クラスタリスト更新部２４は、フリーノードリスト３３からノードＢのエントリを削除する。
【００５９】
（１６）ノードＡのハローパケット生成部２７は、手順（８）と同様に、ハローパケットを生成し、ブロードキャスト送信する。
【００６０】
（１７）ノードＢがノードＡからハローパケットを受信すると、ノードＢのノード種別判定部２２は、ハローパケットに含まれているクラスタ情報を参加処理部２３に出力する。以後、手順（７）でノードＡの参加処理部２３が行う動作と同様の動作を、ノードＢの参加処理部２３が行うことにより、クラスタリスト３２とフリーノードリスト３３が更新される。クラスタリスト３２には、いずれのエントリも含まれなくなり、更新後のクラスタリスト３２に含まれている情報は、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ、Ｂ
ｅｎｄフラグ＝ｔｒｕｅ
となる。さらに、ノードＢの設定は、フリーノードから参加ノードに変更される。
【００６１】
（１８）ノードＢのハローパケット生成部２７は、手順（８）で述べた処理と同様の処理によりハローパケットを生成し、ブロードキャスト送信する。
【００６２】
（１９）ノードＡ、Ｃは、ノードＢが送信したハローパケットを受信する。ノードＡでは、ノードＢから受信したハローパケットによってはクラスタリスト３２とフリーノードリスト３３のいずれも変更されない。
【００６３】
ノードＣはフリーノードであるため、ノードＣのノード種別判定部２２は、受信したハローパケットからクラスタ情報を抽出すると、クラスタ情報を参加処理部２３に出力する。クラスタ情報に含まれているｅｎｄフラグの値は「ｔｒｕｅ」であるので、参加処理部２３は、クラスタＧＷに含まれているノード装置１０の数が閾値に達していることを認識する。そこで、参加処理部２３は、ノードＣをクラスタＧＷに参加させることができないと認識し、ノードＣを起点ノードに設定する。また、参加処理部２３はノード種別情報３１の値を変更するとともに、ノードＣを含むクラスタＣを生成する。このときに生成されたクラスタリスト３２に含まれる情報は、
クラスタ識別子：Ｃ
クラスタＣに参加しているノード：Ｃ
ｅｎｄフラグ＝ｆａｌｓｅ
となる。
【００６４】
（２０）ノードＣは、手順（２）でノードＧＷが行った処理と同様の処理によりハローパケットを生成し、ブロードキャストする。
【００６５】
（２１）ノードＤは、手順（３）でノードＡが行った処理と同様の処理によりフリーノードリスト３３を更新する。更新後のフリーノードリスト３３には、ノードＤの識別子とクラスタＣの識別子が対応付けられている。さらに、ノードＤは、手順（４）と同様の処理によりハローパケットを生成し、ブロードキャストする。この処理により、ノードＤはクラスタＣに参加しようとしていることを、ハローパケットにより隣接ノードに通知することができる。
【００６６】
（２２）ノードＣは、ノードＤから送信されたハローパケットを受信すると、手順（５）で説明したノードＧＷの処理と同様の処理により、ノードＤをクラスタＣに追加する。さらに、ノードＣは、手順（６）で説明したノードＧＷの処理と同様の処理により、ハローパケットをブロードキャスト送信する。
【００６７】
（２３）ノードＤは、ノードＣからハローパケットを受信すると、クラスタリスト３２とフリーノードリスト３３を更新し、参加ノードに設定を変更する。このときの動作は、手順（７）で説明したノードＡの動作と同様である。
【００６８】
以上説明した手順（１）〜（２３）により、図９に示すようにクラスタＧＷとクラスタＣが生成される。クラスタが生成されると、各ノード装置は、所属クラスタに含まれる他のノード装置に至る経路をルーティングテーブルに記録する。ルーティングテーブルの生成には、ハローパケットのヘッダ、経路情報、クラスタ情報中のクラスタ識別子が用いられる。各ノード装置は、ハローパケット中のクラスタ情報に含まれているクラスタ識別子が所属クラスタの識別子である場合、経路情報に記録されているノードかヘッダ中のＬＳをルーティングテーブルのＧＤとし、ハローパケットのＬＳをルーティングテーブルのＬＤとする。
【００６９】
図１０は、クラスタ生成部２５の動作の例を説明するフローチャートである。クラスタ生成部２５は、クラスタリスト（ＣＬ）３２のｅｎｄフラグの値がｔｒｕｅであるかを確認することにより、新たなノード装置１０をクラスタに追加できるかを確認する（ステップＳ１）。ｅｎｄフラグの値がｔｒｕｅではない場合、新たなノード装置１０をクラスタに追加することができる。そこで、クラスタ生成部２５は、入力されたフリーノード情報が、自ノードで生成したクラスタに参加しようとしているノードを特定できる情報であるかを確認する。このため、クラスタ生成部２５は、フリーノード情報に含まれているクラスタ識別子と、クラスタリスト３２に含まれているクラスタ識別子を比較する（ステップＳ１でＮｏ、ステップＳ２）。フリーノード情報と、クラスタリスト３２で含まれているクラスタ識別子が一致した場合、クラスタ生成部２５は、自ノードが生成しているクラスタに対して参加が要求されたと認識する（ステップＳ２でＮｏ）。そこで、クラスタ生成部２５は、フリーノード情報に含まれているノード識別子で識別されるノードを、クラスタに追加する（ステップＳ３）。一方、ステップＳ１、２のいずれかでＹｅｓと判定された場合は、クラスタ生成部２５は、新たなノード装置１０をクラスタに追加せずに処理を終了する。
【００７０】
図１１は、ノードリスト生成部２６の動作の例を説明するフローチャートである。ステップＳ１１、Ｓ１２は、ステップＳ１、Ｓ２と同様の処理である。ステップＳ１１によりノードリスト生成部２６は、参加ノードの所属クラスタに、新たなノード装置１０を追加できるかを確認する。フリーノード情報と、クラスタリスト３２に含まれているクラスタ識別子が一致した場合、ノードリスト生成部２６は、所属クラスタに対して参加が要求されたと認識する。そこで、ノードリスト生成部２６は、フリーノード情報に含まれているノードの識別子が、クラスタリスト３２に記録されているかを確認する（ステップＳ１３）。フリーノード情報に含まれているノードの識別子が、クラスタリスト３２に記録されていない場合、フリーノード情報に含まれているノードの識別子をフリーノードリスト３３に加える（ステップＳ１３でＮｏ、ステップＳ１４）。一方、ステップＳ１１〜Ｓ１３のいずれかでＹｅｓと判定された場合、ノードリスト生成部２６は処理を終了する。
【００７１】
図１２は、クラスタリスト更新部２４の動作の例を説明するフローチャートである。クラスタリスト更新部２４は、クラスタ情報に含まれているクラスタ識別子と、クラスタリスト３２に含まれているクラスタ識別子を比較する（ステップＳ２１）。クラスタ情報とクラスタリスト３２でクラスタ識別子が一致した場合、クラスタリスト更新部２４は、入力されたクラスタ情報が所属クラスタに関する情報であると認識する（ステップＳ２１でＮｏ）。そこで、クラスタリスト更新部２４は、クラスタ情報に合せてクラスタリスト３２を更新する（ステップＳ２２）。さらに、クラスタリスト更新部２４は、フリーノードリスト３３に含まれているノードの識別子のうち、クラスタ情報に含まれている識別子のエントリをフリーノードリスト３３から削除する。また、自ノードのクラスタ情報のｅｎｄフラグがｔｒｕｅであるときも、フリーノードリスト３３に含まれているエントリを削除する（ステップＳ２３）。ここで、自ノードのクラスタ情報のｅｎｄフラグがｔｒｕｅである場合のフリーノードリスト３３からのエントリの削除は、所属クラスタにノード装置１０を追加することができないために行われる。一方、クラスタ情報とクラスタリスト３２でクラスタ識別子が一致しない場合、クラスタリスト更新部２４は、ステップＳ２２とＳ２３の処理を行わずに処理を終了する（ステップＳ２１のＹｅｓ）。
【００７２】
図１３は、参加処理部２３の動作の例を説明するフローチャートである。参加処理部２３は、フリーノードリスト３３に自ノードのエントリがあるかを確認する（ステップＳ３１）。フリーノードリスト３３に自ノードのエントリがない場合、クラスタ情報に含まれているｅｎｄフラグの値が「ｔｒｕｅ」であるかを確認する（ステップＳ３１でＮｏ、ステップＳ３２）。ｅｎｄフラグの値が「ｔｒｕｅ」でない場合、参加処理部２３は、自ノードの識別子をクラスタ情報に含まれているクラスタ識別子に対応付けてフリーノードリスト３３に記録する（ステップＳ３２でＮｏ、ステップＳ３３）。ｅｎｄフラグの値が「ｔｒｕｅ」である場合、参加処理部２３は、自ノードが起点ノードとして動作できるようにクラスタリスト３２を生成する（ステップＳ３２でＹｅｓ、ステップＳ３４）。このとき、クラスタリスト３２には、自ノードの識別子がクラスタ識別子として記録され、新たに生成されたクラスタには、自ノードが含まれる。さらに、参加処理部２３は、自ノードの設定を起点ノードに変更する（ステップＳ３５）。
【００７３】
一方、フリーノードリスト３３に自ノードのエントリがある場合、参加処理部２３は、クラスタ情報に自ノードの識別子が含まれているかを確認する（ステップＳ３６）。クラスタ情報に自ノードの識別子が含まれている場合、参加処理部２３は、フリーノードリスト３３から自ノードのエントリを削除し、クラスタ情報に含まれているノードの情報をクラスタリスト３２に記録する（ステップＳ３６でＹｅｓ、ステップＳ３７）。さらに、参加処理部２３は、自ノードの設定を参加ノードに変更する（ステップＳ３８）。一方、クラスタ情報に自ノードの識別子が含まれていない場合、参加処理部２３は、クラスタ情報に含まれているｅｎｄフラグの値が「ｔｒｕｅ」であるかを確認する（ステップＳ３６でＮｏ、ステップＳ３９）。クラスタ情報に含まれているｅｎｄフラグの値が「ｔｒｕｅ」でない場合、参加処理部２３は処理を終了する（ステップＳ３９でＮｏ）。一方、クラスタ情報に含まれているｅｎｄフラグの値が「ｔｒｕｅ」である場合、参加処理部２３は、参加を要求したクラスタのノード装置１０の数が閾値に達したため、自ノードがクラスタに参加できなかったことを認識する（ステップＳ３９でＹｅｓ）。そこで、参加処理部２３は、フリーノードリスト３３から自ノードのエントリを削除する（ステップＳ４０）。ステップＳ３９、Ｓ４０の処理が行われる場合については、後で詳しく説明する。
【００７４】
以上説明したように、実施形態にかかる方法では、クラスタを生成する際に用いられる情報がハローパケットによって送受信される。従って、クラスタ生成のためにハローパケット以外の制御パケットが使用される場合に比べて、制御パケットの送受信のために使用されるネットワーク中の帯域が少なくなる。従って、実施形態にかかる方法を用いることにより、ユーザデータを含むパケットの送受信に使用できる帯域を増やすことができる。
【００７５】
さらに、実施形態にかかる方法を用いると、アドホックネットワークに含まれる各ノード装置１０が自律的に参加するクラスタを決定し、クラスタへの参加要求を行う。このため、例えば起点ノードが選択したノード装置１０をクラスタに参加させることによりクラスタが生成される場合に比べ、クラスタの生成を行うために起点ノードが行う処理が軽減されている。従って、起点ノードとして用いられるノード装置１０の処理能力が低くてもクラスタを生成できることになるので、処理能力の低いノード装置１０で形成されたアドホックネットワークでもクラスタの生成を行うことができる。
【００７６】
また、クラスタの生成に用いられる制御情報がハローパケットで伝播されるため、制御情報がフラッディングされることを防ぐことができる。従って、ノード装置１０の処理リソース（ＭＰＵ１００やＤＲＡＭ１０６）の使用量も抑えることができる。
【００７７】
さらに、起点ノードは、生成しているクラスタのノード装置１０の数が閾値以下になるように調整する。このため、クラスタの生成後にルーティングテーブルに記憶する経路の数は閾値が小さいほど小さくなる。従って、ノード装置１０がネットワーク中の他のノード装置１０に至る経路を記憶する負担も軽減される。
【００７８】
＜第２の実施形態＞
本実施形態では、フリーノード情報により参加を要求してきたノードがクラスタに参加できない場合の処理を説明する。図１４は、アドホックネットワークの例を示す。図１４に示すアドホックネットワークには、ノードＧＷ、ノードＡ〜Ｅの６つのノードが含まれている。図１４では、図７と同様に隣接ノード同士を実線で結んでいる。
【００７９】
図１５は、クラスタの生成の際に行われる動作の例を説明するシーケンス図である。図１５では、図１４に示すアドホックネットワークのうちで、ノードＧＷ、Ａ、Ｂ、Ｅの間で送受信されるハローパケットに基づいて行われる動作を示す。以下の説明では、クラスタ中のノード装置１０の数の上限（閾値）が３であるが、ノードＧＷとノードＡが参加した状態のクラスタＧＷに、ノードＢとノードＥの２つのノード装置１０が参加を要求した場合に行われる処理について説明する。なお、この例でも閾値が３である場合を例として説明するが、クラスタ中のノード装置１０の数は、１以上の任意の整数とすることができる。図１５の手順（３１）〜（３７）は、図８を参照しながら説明した手順（１）〜（７）と同様である。
【００８０】
（３８）ノードＡのハローパケット生成部２７は、ハローパケットを生成する。ハローパケットの生成方法、および、生成されたハローパケットに含まれる情報は、図８を参照しながら説明した手順（８）と同様である。生成されたハローパケットは、ノードＡからブロードキャスト送信される。このため、ノードＡの隣接ノードであるノードＧＷ、Ｂ、Ｅは、ノードＡから送信されたハローパケットを受信する。
【００８１】
（３９）ノードＢはフリーノードであるため、ノードＢのノード種別判定部２２は、受信したハローパケットからクラスタ情報を抽出すると、クラスタ情報を参加処理部２３に出力する。クラスタ情報中のｅｎｄフラグの値は「ｆａｌｓｅ」であるので、参加処理部２３は、クラスタＧＷに参加できる可能性があることを認識する。そこで、参加処理部２３は、ノードＢをクラスタＧＷに参加させるために、ノードＢのＩＤとクラスタＧＷの識別子を対応付けてフリーノードリスト３３に格納する。
【００８２】
（４０）ノードＥもフリーノードであるため、ノードＥでも、ノードＡから受信したハローパケットに含まれていたクラスタ情報を、参加処理部２３が処理する。クラスタ情報中のｅｎｄフラグの値は「ｆａｌｓｅ」であるので、ノードＥの参加処理部２３も、ノードＢの参加処理部２３と同様に、ノードＥがクラスタＧＷに参加できる可能性があることを認識する。そこで、ノードＥの参加処理部２３も、ノードＥをクラスタＧＷに参加させるためにフリーノードリスト３３を更新する。この更新処理により、ノードＥの識別子とクラスタＧＷの識別子の組み合わせがフリーノードリスト３３に格納される。
【００８３】
（４１）ノードＢのハローパケット生成部２７は、ハローパケットを生成する。ここで生成されるハローパケットには、ノードＢのフリーノードリスト３３の情報が含まれる。従って、ノードＢは、ハローパケットをブロードキャスト送信することにより、ノードＢがクラスタＧＷに参加しようとしていることを、ノードＢの隣接ノード（ノードＡ、Ｃ）に通知する。
【００８４】
（４２）ノードＥのハローパケット生成部２７も、ハローパケットを生成する。ここで生成されるハローパケットには、ノードＥのフリーノードリスト３３の情報が含まれる。従って、ノードＥは、ノードＥがクラスタＧＷに参加しようとしていることを、ハローパケットを用いて隣接ノード（ノードＡ）に通知する。
【００８５】
（４３）ノードＡのノードリスト生成部２６は、ノードＢから受信したハローパケット中のフリーノード情報により、ノードＢがクラスタＧＷに参加しようとしていることを認識する。さらに、ノードリスト生成部２６は、ノードＥから受信したハローパケット中のフリーノード情報により、ノードＥもクラスタＧＷに参加しようとしていることを認識する。そこで、ノードリスト生成部２６は、ノードＢとＥの両方について、それぞれクラスタＧＷの識別子と対応付けてフリーノードリスト３３に記録する。
【００８６】
（４４）ノードＡのハローパケット生成部２７は、ハローパケットを生成してブロードキャスト送信する。ノードＡが送信したハローパケットのフリーノード情報には、ノードＢとノードＥの両方がクラスタＧＷに参加しようとしていることが記録される。
【００８７】
（４５）ノードＧＷのノード種別判定部２２は、ハローパケットから抽出したフリーノード情報をクラスタ生成部２５に出力する。クラスタ生成部２５は、フリーノード情報から、ノードＢとノードＥの両方がクラスタＧＷに参加しようとしていることを認識する。クラスタ生成部２５は、閾値が３であることと、クラスタＧＷに既にノードＧＷとノードＡが参加していることから、一方のノード装置１０をクラスタＧＷに参加させることができるが、他方をクラスタＧＷに含めることができないことを認識する。そこで、クラスタ生成部２５は、クラスタＧＷへの参加を要求してきたノードのうちの１つをクラスタＧＷに参加させるノードに選択する。クラスタに加えるノードを選択するときにクラスタ生成部２５が用いる選択方法は、任意である。以下の説明では、クラスタ生成部２５はノードＢをクラスタＧＷに参加させるノードとして選択したものとする。クラスタ生成部２５は選択したノードＢをクラスタＧＷに追加する。この処理により、クラスタ生成部２５は、クラスタリスト３２の情報を以下のように変更する。
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ、Ｂ
ｅｎｄフラグ＝ｔｒｕｅ
【００８８】
（４６）ノードＧＷは、手順（６）と同様にハローパケットを生成し、生成したハローパケットをブロードキャスト送信する。
【００８９】
（４７）ノードＡがノードＧＷからハローパケットを受信すると、ノードＡのクラスタリスト更新部２４は、ハローパケット中のクラスタ情報を用いてクラスタリスト３２とフリーノードリスト３３を更新する。その後、ノードＡのハローパケット生成部２７は、ハローパケットを生成してブロードキャスト送信する。ノードＡが送信したハローパケットのクラスタ情報には、ノードＧＷ、ノードＡ、および、ノードＢがクラスタＧＷに参加していることが記録されている。さらに、ｅｎｄフラグはｔｒｕｅに設定されている。
【００９０】
（４８）ノードＢがノードＡからハローパケットを受信すると、ノードＢの参加処理部２３は、ノードＢがクラスタＧＷに参加したことを認識する。そこで、参加処理部２３は、クラスタリスト３２とフリーノードリスト３３を更新し、さらに、ノードＢの設定を参加ノードに変更する。
【００９１】
（４９）ノードＥがノードＡからハローパケットを受信すると、ノードＥの参加処理部２３は、ノードＥがクラスタＧＷに参加していないことと、クラスタＧＷにノード装置１０が追加されないこと（ｅｎｄフラグ＝ｔｒｕｅ）を認識する。そこで、参加処理部２３は、手順（４２）で送信したハローパケットにより参加を要求したクラスタには参加できないため、他のクラスタに参加できるように、フリーノードリスト３３のエントリを削除する。この処理により、ノードＥはクラスタＧＷ以外の他のクラスタに参加しているノード装置１０からハローパケットを受信できれば、他のクラスタに参加を要求できるようになる。
【００９２】
（５０）ノードＡは、手順（４７）と同様にハローパケットをブロードキャスト送信する。
【００９３】
（５１）ノードＥはノードＡからハローパケットを受信する。受信したハローパケットのクラスタ情報には、クラスタＧＷを識別する識別子と、クラスタＧＷにはノード装置１０を追加できないことを示す情報（ｅｎｄフラグ＝ｔｒｕｅ）が含まれている。ここで、ノードＥは、手順（４９）でフリーノードリスト３３のエントリを削除した後に、クラスタＧＷ以外のクラスタに所属するノード装置１０からのハローパケットを受信できなかったものとする。すると、ノードＥの参加処理部２３は、ノードＥを起点ノードに設定し、ノードＥを含むクラスタを生成する。
【００９４】
（５２）一方、ノードＢ、Ｃ、Ｄでは、手順（１８）〜（２３）で説明した処理が行われることにより、クラスタＣが生成される。
以上の手順により、参加を要求したクラスタに参加できない場合でも、ノード装置１０は、他のクラスタに参加を要求することができる。また、参加を要求できるクラスタが無いと判断した場合、ノード装置１０は、起点ノードとしてクラスタの生成を開始できる。さらに、本実施形態でも、これらの処理に用いられる情報は、いずれも、ハローパケットにより送受信される。従って、クラスタ生成のためにハローパケット以外の制御パケットが使用される場合に比べて、制御パケットの送受信のために使用されるネットワーク中の帯域が少なくなる。
【００９５】
＜第３の実施形態＞
本実施形態では、参加ノードが、参加を要求するノードとして通知するノード装置１０の数を、なるべくクラスタに参加できるノード数の上限を超えないように制限する場合のクラスタの生成について説明する。
【００９６】
本実施形態では、参加ノードがフリーノード情報を含むハローパケットを受信すると、参加ノードのノードリスト生成部２６は、ハローパケットで通知されたノードの全てが所属クラスタに参加できるかを確認する。ハローパケットで通知されたノードの全てが所属クラスタに参加できない場合、ノードリスト生成部２６は、所属クラスタに参加させるために起点ノードに通知するノードを選択し、選択したノードの識別子をフリーノードリスト３３に記録する。
【００９７】
図１６は、クラスタの生成の際に行われる動作の例を説明するシーケンス図である。以下、図１６を参照しながら詳しい手順を説明する。図１６でも、図１５と同様に、図１４に示すアドホックネットワークのうちで、ノードＧＷ、Ａ、Ｂ、Ｅの間で送受信されるハローパケットに基づいて行われる動作を示す。以下の説明でも、図１５と同様に、クラスタへの参加を要求したノード装置１０の数が、クラスタに所属できるノード数の上限を越えた場合について説明する。
【００９８】
図１６の手順（６１）〜（７２）は、図１５を参照しながら説明した手順（３１）〜（４２）と同様である。
【００９９】
（７３）ノードＡのノードリスト生成部２６は、ノードＢから受信したハローパケット中のフリーノード情報により、ノードＢがクラスタＧＷに参加しようとしていることを認識する。さらに、ノードリスト生成部２６は、ノードＥから受信したハローパケット中のフリーノード情報により、ノードＥもクラスタＧＷに参加しようとしていることを認識する。ノードリスト生成部２６は、クラスタリスト３２を参照することにより、クラスタＧＷに参加しているノード装置１０の数を確認する。ここでは、クラスタリスト３２に含まれている情報は、
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ
ｅｎｄフラグ＝ｆａｌｓｅ
であり、クラスタＧＷに含まれるノード数は２である。一方、クラスタＧＷに参加できるノード数の上限は３である。そこで、ノードリスト生成部２６は、ノードＢとノードＥのいずれかしかクラスタＧＷに参加できないことを認識し、クラスタＧＷに参加しようとしているノードとして通知するノード装置１０を選択する。ここでは、ノードリスト生成部２６はノードＢを選択したものとする。なお、クラスタに加えるノードを選択するときにクラスタ生成部２５が用いる選択方法は任意である。ノードリスト生成部２６は、フリーノードリスト３３にノードＢの識別子とクラスタＧＷの識別子を対応付けて記録する。
【０１００】
（７４）ノードＡのハローパケット生成部２７は、ハローパケットを生成してブロードキャスト送信する。ノードＡが送信したハローパケットのフリーノード情報には、ノードＢがクラスタＧＷに参加しようとしていることが記録される。
【０１０１】
（７５）ノードＧＷのノード種別判定部２２は、ハローパケットから抽出したフリーノード情報をクラスタ生成部２５に出力する。クラスタ生成部２５は、フリーノード情報から、ノードＢがクラスタＧＷに参加しようとしていることを認識する。クラスタ生成部２５は、閾値が３であることと、クラスタＧＷに既にノードＧＷとノードＡが参加していることから、ノードＢをクラスタＧＷに参加させる。この処理により、クラスタ生成部２５は、クラスタリスト３２の情報を以下のように変更する。
クラスタ識別子：ＧＷ
クラスタＧＷに参加しているノード：ＧＷ、Ａ、Ｂ
ｅｎｄフラグ＝ｔｒｕｅ
【０１０２】
手順（７６）〜（８１）の処理は、図１５を参照しながら説明した手順（４６）〜（５１）と同様である。さらに、ノードＢ、Ｃ、Ｄでは、手順（１８）〜（２３）で説明した処理が行われることにより、クラスタＣが生成されるものとする。
【０１０３】
本実施形態では、ノードリスト生成部２６は、受信したフリーノード情報中の装置識別子からフリーノードリスト３３に追加する装置識別子を選択し、選択した装置識別子をフリーノードリスト３３に追加する。従って、本実施形態では、ノードリスト生成部２６の動作のうち図１１のステップＳ１４は、「受信したフリーノード情報中の装置識別子から選択した装置識別子をフリーノードリスト３３に追加する」という動作に変更される。ここで、ノードリスト生成部２６が装置識別子を選択する方法は任意である。例えば、ノードリスト生成部２６は、先に認識した装置識別子を優先的にフリーノードリスト３３に追加することができる。また、ハローパケットに通信品質情報が含まれている場合、ノードリスト生成部２６は、通信品質が良好なノード装置１０の装置識別子を優先的にフリーノードリスト３３に追加することもできる。なお、本実施形態でもノードリスト生成部２６はステップＳ１１〜Ｓ１３の動作を行い、ステップＳ１１〜Ｓ１３は、図１１を参照しながら説明したとおりである。
【０１０４】
本実施形態では、参加要求の数がクラスタに参加できるノード数の上限を超えているかを参加ノードが確認し、上限を超える参加通知を参加ノードが起点ノードに通知しない。このため、起点ノードの負担をさらに軽減することができる。
【０１０５】
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。例えば、以上の説明では、クラスタ識別子が起点ノードの識別子と一致している場合を例として説明したが、クラスタ識別子は、個々のクラスタを一意に識別できる任意の形式の識別子とすることができる。
【符号の説明】
【０１０６】
１０  ノード装置
１１  受信部
１２  送信部
２１  設定部
２２  ノード種別判定部
２３  参加処理部
２４  クラスタリスト更新部
２５  クラスタ生成部
２６  ノードリスト生成部
２７  ハローパケット生成部
３１  ノード種別情報
３２  クラスタリスト
３３  フリーノードリスト
１００  ＭＰＵ
１０１  バス
１０２  ＰＨＹチップ
１０４  タイマＩＣ
１０６  ＤＲＡＭ
１０７  フラッシュメモリ
１０８  無線モジュール
【図１】
0005839041.tif 000002
【図２】
0005839041.tif 000003
【図３】
0005839041.tif 000004
【図４】
0005839041.tif 000005
【図５】
0005839041.tif 000006
【図６】
0005839041.tif 000007
【図７】
0005839041.tif 000008
【図８】
0005839041.tif 000009
【図９】
0005839041.tif 000010
【図１０】
0005839041.tif 000011
【図１１】
0005839041.tif 000012
【図１２】
0005839041.tif 000013
【図１３】
0005839041.tif 000014
【図１４】
0005839041.tif 000015
【図１５】
0005839041.tif 000016
【図１６】
0005839041.tif 000017