(57)【要約】【課題】フレームの送受信の失敗を防止しやすくする。【解決手段】ノードは、第１の上りデータを受信した場合、下りルーティングテーブルのエントリとして第１の上りデータの送信元と、第１の上りデータの転送元と、第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録する。ノードは新たに他のノードから第２の上りデータを受信した場合に、下りルーティングテーブル中に含まれるエントリ数が上限に達しているかを判定する。ノードは、下りルーティングテーブル中に含まれるエントリ数が上限に達していると判定した場合、下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して他のノードを下りデータの送信先としたエントリを登録するかを決定する。このとき、ノードは、第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、エントリを登録するかを決定する。【選択図】図２
2018042122.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに配置されるノードによって実行されるプログラムであって、
前記ノードに、
第１の上りデータを受信した場合に、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録し、
新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中に含まれるエントリ数が上限に達しているかを判定し、
前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する、
処理を実行させることを特徴とするネットワーク経路構築プログラム。
【請求項２】
前記下りルーティングテーブルに含まれるエントリの中から、上りデータの転送に使用可能な転送先数が相対的に大きいエントリを選択し、
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択したエントリに含まれている転送先数以下である場合、選択した前記エントリを削除し、
前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録する、
処理を前記ノードに実行させることを特徴とする請求項１に記載のネットワーク経路構築プログラム。
【請求項３】
選択した前記エントリを削除する場合、選択した前記エントリでの下りデータの転送先に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を送信する、
処理を前記ノードに実行させることを特徴とする請求項２に記載のネットワーク経路構築プログラム。
【請求項４】
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択した前記エントリに含まれている転送先数を越えている場合、前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録しないことを決定し、
前記第２の上りデータの転送元に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を送信する、
処理を前記ノードに実行させることを特徴とする請求項２に記載のネットワーク経路構築プログラム。
【請求項５】
前記ノードが上りデータを第１のノードに転送した後で、前記第１のノードから、前記第１のノードとは異なるノードを前記ノードでの上りデータの転送先にすることを要求する他の変更要求を受信すると、上りデータの転送先を前記第１のノードから第２のノードに変更し、
前記第２のノードを介した前記ノード宛の下りデータの転送経路を生成するために、上りデータを前記第２のノードに転送する、
処理を前記ノードに実行させることを特徴とする請求項１〜４のいずれか１項に記載のネットワーク経路構築プログラム。
【請求項６】
データを受信する受信部と、
第１の上りデータを前記受信部が受信した場合に、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録する制御部
を備え、
新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中のエントリ数が上限に達しているかを判定し、
前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記制御部は、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する
ことを特徴とするノード装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークでの経路構築に関する。
【背景技術】
【０００２】
アドホックネットワークは、ネットワークを形成するノード装置が追加もしくは削除された場合でも、動的にネットワークが形成されるため、利便性が高い。アドホックネットワークは、センサネットワークや検針システムなどにも使用されることがある。この場合、アドホックネットワーク中のノード装置で得られた情報は、センサの情報や検針結果などを処理する装置を含む他のネットワークに、ゲートウェイとして動作するノード装置（ゲートウェイ装置）を介して送信されることが多い。アドホックネットワーク中の各ノード装置がゲートウェイ装置を介して他のネットワークに情報を提供する場合、各ノード装置は、アドホックネットワーク中のゲートウェイ装置にフレームを送信するための経路情報を、Ｈｅｌｌｏフレームを用いて取得する。ここで、Ｈｅｌｌｏフレームには、Ｈｅｌｌｏフレームの送信元のノード装置を介してフレームの転送が可能なゲートウェイ装置の情報が含まれている。
【０００３】
図１は、アドホックネットワークでの通信例を説明する図である。図１に示すアドホックネットワークには、ノードＡ〜Ｉ、Ｘが含まれており、ノードＸがゲートウェイ装置として動作するとする。Ｈｅｌｌｏフレームを用いて、各ノード装置は、ノードＸに至る経路を記憶している。例えば、ノードＤは、テーブルＴ１に示すように、ノードＸを宛先とするフレームは、ノードＢ、Ａ、Ｃのいずれかに転送可能であることを記憶している。
【０００４】
アドホックネットワークで送受信されるフレームには、フレームの最終宛先アドレス、フレームの送信元アドレス、フレームの転送先のアドレス、フレームの転送元のアドレスが含まれる。例えば、各ノード装置は、フレームの最終宛先にゲートウェイ装置が指定されたフレームを受信すると、ルーティングテーブルを使用して、最終宛先に指定されたゲートウェイ装置にフレームを転送できる装置の中からフレームの転送先を決定する。
【０００５】
フレームの転送の際に、ノード装置は、フレームの転送元のアドレスを、フレームの送信元アドレスに宛てたフレームを受信したときのための経路情報として記憶する。例えば、ノードＤは、ノードＨで生成されたノードＸ宛のフレームをノードＨから受信すると、ノードＨ宛のフレームをノードＨに転送できることを記憶すると共に、受信したフレームをテーブルＴ１の情報を用いて転送する。ノードＥで生成されたノードＸ宛のフレームをノードＥから受信した場合や、ノードＦで生成されたノードＸ宛のフレームをノードＦから受信した場合も、ノードＤは同様に処理を行う。このため、ノードＤは、ノードＤを介してノードＸと通信しているノードへの経路情報をテーブルＴ２に示すように保持することができる。ここで、経路情報に記録可能なエントリ数が予め決められているケースがある。この場合、各ノード装置は、保持可能なエントリ数の経路情報を記憶している状態で新たな経路情報を取得したときに、取得済みのエントリを削除して、新たに取得した経路情報を記憶する。例えば、経路情報のエントリの上限数が３であり、ノードＤがテーブルＴ２を保持している状態で、ノードＤがノードＧからノードＧで生成されたノードＸ宛のフレームを受信したとする。すると、ノードＤは、取得済みのノードの経路情報を削除して、ノードＧへの経路を記憶する。図１の例では、ノードＤはノードＨへの経路情報を削除して、ノードＧへの経路情報を保持することにより、テーブルＴ２をテーブルＴ３に更新している。
【０００６】
関連する技術として、ゲートウェイ装置への上り通信を行うための経路を、Ｈｅｌｌｏフレームを用いて評価し、上り通信の経路に基づいて、下り経路を構築する通信方法が提案されている（例えば、特許文献１など）。他のノード装置からの制御パケットに基づいて上り経路テーブルを作成し、受信した上りパケット中に含まれる生成元と転送元のアドレス情報に基づいて、下り経路テーブルを生成する装置も提案されている（例えば、特許文献２など）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１３／１３３１８５号
【特許文献２】特開２０１０−８７６６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
経路情報に記録可能なエントリ数が予め決められているために、取得済みの経路情報を削除して新たな経路情報を保持する場合、ノード装置は、経路情報を削除済みの装置に宛てたフレームを受信することもある。この場合、ノード装置は受信フレームの転送先の情報を保持していないので、フレームを廃棄するか転送元に送り返す。ここで、通信可能な隣接ノード装置の数が少ないノード装置の場合、そのノード装置の情報が隣接ノード装置で削除されると、通信経路が無くなることによりフレームの受信に失敗するおそれもある。例えば、隣接ノード装置が１台しかないノード装置への経路情報が削除されると、隣接ノード装置が１台しかないノード装置では、隣接ノード装置の経路情報が新たに更新されて自ノードが登録されるまで、フレームを受信しなくなってしまう。関連する技術として述べたいずれの通信方法を用いた場合も、同様の問題が発生しうる。
【０００９】
本発明は、１つの側面として、フレームの送受信の失敗を防止しやすくすることを目的とする。
【課題を解決するための手段】
【００１０】
実施形態にかかるネットワーク経路構築プログラムは、ネットワークに配置されるノードによって実行される。プログラムは、前記ノードに、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録させる。この処理は、前記ノードが第１の上りデータを受信した場合に行われる。前記ノードは新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中に含まれるエントリ数が上限に達しているかを判定する。前記ノードは、前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する。このとき、前記ノードは、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記他のノードを下りデータの送信先としたエントリを登録するかを決定する。
【発明の効果】
【００１１】
フレームの送受信の失敗を防止しやすくなる。
【図面の簡単な説明】
【００１２】
【図１】アドホックネットワークでの通信例を説明する図である。
【図２】実施形態にかかる通信方法の適用例を説明する図である。
【図３】実施形態にかかる通信方法の例を説明するフローチャートである。
【図４】ノード装置の構成の例を説明する図である。
【図５】ノード装置のハードウェア構成の例を説明する図である。
【図６】アドホックネットワークの生成方法の例を説明する図である。
【図７】アドホックネットワークの生成方法の例を説明する図である。
【図８】アドホックネットワークの生成方法の例を説明する図である。
【図９】アドホックネットワークの例を説明する図である。
【図１０】下りルーティングテーブルの更新処理の例を説明する図である。
【図１１】下りルーティングテーブルの更新処理の例を説明する図である。
【図１２】下りルーティングテーブルの更新処理の例を説明する図である。
【図１３】下りルーティングテーブルのエントリ数が上限に達したときの処理の例を説明する図である。
【図１４】上り方向のフレームの転送先での処理の例を説明する図である。
【図１５】下り方向の経路情報を削除されたノード装置がデータ転送経路を生成するための処理の例を説明する図である。
【図１６】下り方向のデータの転送例を説明する図である。
【図１７】ノード装置の処理の例を説明するフローチャートである。
【図１８】ルーティング処理の例を説明するフローチャートである。
【図１９】下りルーティングテーブルの更新処理の例を説明するフローチャートである。
【図２０】経路変更要求フレームを受信したノード装置の処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
以下の説明では、フレームの最終的な宛先を「グローバル宛先」（Global Destination、ＧＤ）と記載することがある。一方、フレームを最終的な宛先に送信するために行われる１ホップの転送の際に、転送先として指定されるノード装置のことを、「ローカル宛先」（Local Destination、ＬＤ）と記載することがある。さらに、関連して、フレームの最終宛先に送信されるフレームを生成したノード装置を「グローバル送信元」（Global Source、ＧＳ）と記載することがある。また、フレームが１ホップ転送される場合の転送元のノード装置のことを、「ローカル送信元」（Local Source、ＬＳ）と記載することもある。さらに、あるノード装置１０からフレームを転送する方向を記載する際に、ゲートウェイ装置に向かう方向を「上り方向」と記載し、ゲートウェイ装置とは逆に向かう方向を「下り方向」と記載することがある。また、ゲートウェイ装置に向けて転送されるフレームを「上りフレーム」と記載する。一方、ゲートウェイ装置から他のノード装置１０に送信されるフレームなど、ゲートウェイ装置に向かう方向とは逆方向に転送されるフレームを「下りフレーム」と記載する。
【００１４】
図２は、実施形態にかかる通信方法の適用例を説明する図である。図２に示すアドホックネットワークには、ノード装置１０ａ〜１０ｉ、１０ｇｗが含まれており、ノード装置１０ｇｗがゲートウェイ装置として動作するとする。以下の説明では、アドホックネットワーク中の各ノード装置１０に割り当てられたアドレスをそのノード装置１０を表わす丸の中に記載する。例えば、図２の例では、ノード装置１０ａに割り当てられたアドレスはＡであり、ノード装置１０ｇｗに割り当てられたアドレスはＧＷである。さらに、ゲートウェイ装置以外のノード装置１０（１０ａ〜１０ｉ）では、下り方向の経路のエントリを３つまで保持できるとする。
【００１５】
ノード装置１０は、有線で通信を行ってもよく、無線通信を行ってもよい。ノード装置１０が無線アドホックネットワーク中の装置である場合、あるノード装置１０に「隣接する」通信装置は、あるノード装置１０から送信されたフレームを受信することができる範囲内に位置する通信装置のことを指すものとする。また、あるノード装置１０から送信されたフレームを受信できる範囲に位置するノード装置１０のことを、そのノード装置１０の「隣接ノード」と記載することがある。図２では、隣接するノード装置１０間を実線で結んでいる。
【００１６】
図２に示すネットワーク中の各ノード装置１０は、Ｈｅｌｌｏフレームを用いて、ノード装置１０ｇｗに至る経路を取得する。例えば、ノード装置１０ｄは、テーブルＴ１１に示すように、ノード装置１０ｇｗを宛先とするフレームを、ノード装置１０ｂ、１０ａ、１０ｃのいずれかに転送可能であることを記憶している。
【００１７】
実施形態にかかる方法では、ゲートウェイ装置のフレームの転送処理を行う各ノード装置１０は、フレーム中にそのノード装置１０がゲートウェイ装置宛のフレームを転送可能な転送先の数を記録する。ここで、下り方向の経路情報は、ゲートウェイ装置宛のフレームの送信元とそのフレームの転送元の組み合わせである。このため、あるノード装置１０からゲートウェイ装置宛のフレームを転送可能な転送先の数は、そのノード装置１０に下り方向のフレームを転送可能な装置数となる。
【００１８】
例えば、ノード装置１０ｈにとって、ノード装置１０ｇｗ宛のフレームを転送可能な転送先はノード装置１０ｄの１台である。そこで、ノード装置１０ｈは、ノード装置１０ｇｗ宛のフレームに、ノード装置１０ｈがノード装置１０ｇｗ宛のフレームを転送可能な転送先の数が１つであることを含めた上で、フレームをノード装置１０ｄに転送する（矢印Ａ１１）。すると、ノード装置１０ｄは、ノード装置１０ｈから受信したフレームを用いて、ノード装置１０ｈ宛のフレームをノード装置１０ｈに転送できることと、ノード装置１０ｈに下り方向のフレームを転送可能な装置数は１台であることを認識する。すなわち、ノード装置１０ｄは、ノード装置１０ｈに対してのフレームがノード装置１０ｄ以外からはノード装置１０ｈに転送されないことを認識する。ノード装置１０ｄは、ノード装置１０ｈからの情報を用いて、フレームの宛先（ＧＤ）、転送先（ＬＤ）、転送先の装置がゲートウェイ装置宛のパケットを転送可能な装置数（ＬＤ数）を、テーブルＴ１２の１番目のエントリに示すように記憶する。さらに、ノード装置１０ｄは、ノード装置１０ｇｗ宛のフレームを転送する。
【００１９】
次に、ノード装置１０ｅは、ノード装置１０ｇｗ宛のフレームに、ノード装置１０ｅがノード装置１０ｇｗ宛のフレームを転送可能な転送先の数が３つであることを含めた上で、フレームをノード装置１０ｄに転送したとする（矢印Ａ１２）。すると、ノード装置１０ｄは、ノード装置１０ｅから受信したフレームを用いて、テーブルＴ１２の２番目のエントリを生成すると共に、フレームの転送処理を行う。さらに、矢印Ａ１３に示す転送処理によりノード装置１０ｄがノード装置１０ｆから受信したフレームについても同様の処理を行った結果、ノード装置１０ｄは、下り方向の経路情報として、テーブルＴ１２の情報を保持したとする。
【００２０】
この状態で、ノード装置１０ｇは、ノード装置１０ｇｗ宛のフレームに、ノード装置１０ｇがノード装置１０ｇｗ宛のフレームを転送可能な転送先の数が２つであることを含めた上で、フレームをノード装置１０ｄに転送したとする（矢印Ａ１４）。すると、ノード装置１０ｄは、ノード装置１０ｇに至る経路の情報を記録しようとするが、既に、ノード装置１０ｄは下り方向の経路情報として、３つの経路の情報を記憶している。
【００２１】
ノード装置１０ｄは、記憶している経路での転送先の各々に対応付けられたノード装置１０ｇｗ宛のフレームのＬＤ数と、新たな経路の特定に使用したフレームで通知されたＬＤ数に応じて、記憶する経路を決定する。ここで、新たな経路の特定に使用したフレームで通知されたＬＤ数は、新たな経路の特定に使用したフレームの転送元のノード装置１０において、ゲートウェイ装置宛のフレームを転送可能な転送先の数である。ゲートウェイ装置宛のフレームを転送可能な転送先の数が多いノード装置１０は、そのノード装置１０宛の下り方向のフレームを転送可能な装置数が多いことになる。従って、ノード装置１０ｄにおいてそのノード装置１０への転送経路が記憶されていなくても、他のノード装置１０からそのノード装置１０にフレームが転送される可能性がある。そこで、ノード装置１０は、ゲートウェイ装置宛のフレームを転送可能な転送先の数が少ないノード装置１０を介する経路を優先的に記憶する。
【００２２】
図２の例では、ゲートウェイ装置として動作しているノード装置１０ｇｗ宛のフレームを転送可能な転送先の数は、ノード装置１０ｈでは１つ、ノード装置１０ｅとノード装置１０ｆで３つ、ノード装置１０ｇでは２つである。このため、ノード装置１０ｄは、ノード装置１０ｇｗ宛のフレームを転送可能な転送先の数が３つであるノード装置１０ｅの情報を削除して、ノード装置１０ｇへの経路情報を記憶する。このため、テーブルＴ１２は、テーブルＴ１３に示すように変更される。
【００２３】
図３は、実施形態にかかる通信方法の例を説明するフローチャートである。ゲートウェイとして動作しているノード装置１０ｇｗ以外のノード装置１０は、図３に示す処理によって下り方向の経路を記憶する。図３では、下り方向の経路情報は下りルーティングテーブルに記憶されているとする。
【００２４】
ノード装置１０は、上りフレームを受信する（ステップＳ１）。ノード装置１０は、受信したフレームの送信元と転送元の組み合わせの情報が下りルーティングテーブルに未登録であるかを判定する（ステップＳ２）。送信元と転送元の組み合わせが下りルーティングテーブルに未登録である場合、ノード装置１０は、下りルーティングテーブルのエントリ数が上限に達しているかを判定する（ステップＳ２でＹｅｓ、ステップＳ３）。下りルーティングテーブルのエントリ数が上限に達している場合、ノード装置１０は、下りルーティングテーブル中の全てのエントリで、上り方向のフレームの転送先数は受信フレームで通知された転送先数未満かを判定する（ステップＳ３でＹｅｓ、ステップＳ４）。ここで、ノード装置１０は、下りルーティングテーブルのエントリ数が上限に達すると、上り方向のフレームの転送先の数が相対的に小さいノード装置を経由する経路を優先的に記憶する。下りルーティングテーブル中の全てのエントリで、上り方向のフレームの転送先は受信フレームで通知された転送先数未満である場合、受信した上りフレームの送信元に至る経路よりも下りルーティングテーブル中の経路を優先する（ステップＳ４でＹｅｓ）。そこで、ノード装置１０は、受信フレームの送信元への経路情報を、下りルーティングテーブルに登録しないことを決定する（ステップＳ５）。
【００２５】
下りルーティングテーブル中に、上り方向のフレームの転送先が受信フレームで通知された転送先数以上のエントリがある場合、ノード装置１０は、そのエントリ中の経路よりも、受信した上りフレームの送信元に至る経路を優先する（ステップＳ４でＮｏ）。そこで、ノード装置１０は、上り方向のフレームの転送先の数が、受信フレームで通知された値以上のエントリの１つを削除し、受信フレームの送信元に至る経路を、下りルーティングテーブルに登録する（ステップＳ６）。
【００２６】
エントリ数が上限に達していない場合、ノード装置１０は、受信フレームの転送元、転送元での上りフレームの転送可能な装置数、受信フレームの送信元の情報を下りルーティングテーブルに記録する（ステップＳ３でＮｏ、ステップＳ５）。
【００２７】
このように、ゲートウェイ装置以外の各ノード装置１０は、ゲートウェイ装置宛のフレームの転送先が相対的に小さい装置を経由する経路を優先的に保持することにより、特定のノード装置１０へのフレームの送信に失敗する可能性を低くしている。
【００２８】
例えば、図１と図２のケースを比較して、実施形態にかかる通信方法でフレームの送信に失敗する可能性が低くなっていることを説明する。図１では、実施形態にかかる方法が用いられていない。このため、ノードＤにおいてノードＨに至る経路の情報が削除された後では、ノードＤは、ノードＨ宛のフレームを受信しても、受信フレームに適用する転送経路を記憶していないので、転送処理を行わない。このため、ノードＨは、ノードＤが経路情報に新たにノードＨに至る経路を登録し直すまで、フレームを受信しなくなってしまう。
【００２９】
一方、実施形態にかかる方法を用いると、図２に示すように、ノード装置１０ｈの経路は、ゲートウェイ装置宛のフレームの転送先が相対的に小さい装置（ノード装置１０ｈ）を介しているので、ノード装置１０ｄによって削除されない。このため、ノード装置１０ｄがノード装置１０ｇに至る経路を下りルーティングテーブルに保持した後に、ノード装置１０ｇｗからノード装置１０ｈ宛のフレームを受信しても、テーブルＴ１３を用いて、受信フレームをノード装置１０ｈに転送することができる。なお、ノード装置１０ｄは、テーブルＴ１３中には、ノード装置１０ｅ宛てのフレームに対する経路情報を保持していないが、ノード装置１０ｅは複数のノード装置１０と通信可能である。このため、ノード装置１０ｄは、ノード装置１０ｄ以外のノード装置１０からノード装置１０ｅ宛てのフレームを受信できる可能性がある。従って、実施形態にかかる方法を用いることにより、フレームの送受信に失敗しにくくなる。
【００３０】
＜装置構成＞
図４は、ノード装置１０の構成の例を説明する図である。ノード装置１０は、通信部２０、制御部３０、記憶部４０を備える。通信部２０は、受信部２１と送信部２２を有する。制御部３０は、振分処理部３１、経路生成部３２、ルーティング処理部３３、アプリケーション処理部３４、ＨＥＬＬＯ制御部３５、送信処理部３６を有する。記憶部４０は、リンクテーブル４１、上りルーティングテーブル４２、下りルーティングテーブル４３を有する。
【００３１】
リンクテーブル４１は、通信装置１０に隣接する通信装置１０ごとに、その通信装置１０のアドレスや、その装置と自装置の間のリンクの状況などを示す値を格納する。上りルーティングテーブル４２は、そのノード装置１０からゲートウェイ装置に至る経路の情報を格納する。下りルーティングテーブル４３は、ゲートウェイ装置で生成されたフレームなどの下り方向に転送されるフレームの転送に用いられる経路情報を記憶する。ゲートウェイとして動作していないノード装置１０ａ〜１０ｉでは、下りルーティングテーブル４３に含められるエントリ数には上限がある。一方、ゲートウェイ装置として動作するノード装置１０ｇｗでは、下りルーティングテーブル４３のエントリ数に上限は設けられていないとする。従って、ゲートウェイ装置（ノード装置１０ｇｗ）はアドホックネットワーク中の自装置以外の全てのノード装置１０に対する経路情報を保持しているとする。
【００３２】
受信部２１は、他のノード装置１０やゲートウェイ装置からフレームを受信し、受信したフレームを振分処理部３１に出力する。振分処理部３１は、フレームのヘッダ中の情報などを解析することにより、受信したフレームの種類を特定するとともに、受信したフレームの種類に応じて出力先を振り分ける。例えば、データフレームを受信した場合、振分処理部３１は、受信フレームをルーティング処理部３３に出力する。一方、Ｈｅｌｌｏフレームなどの経路情報を含むフレームを受信すると、振分処理部３１は、受信したフレームを経路生成部３２に出力する。ルーティング処理部３３は、入力されたフレームをグローバル宛先に向けて転送するための転送先（ローカル宛先）を、上りルーティングテーブル４２か下りルーティングテーブル４３を用いて決定する。ルーティング処理部３３は、特定したローカル宛先の情報を用いて転送用のフレームを生成すると、生成したフレームを送信処理部３６に出力する。なお、自装置宛のフレームが入力された場合、ルーティング処理部３３は、フレーム中のデータをアプリケーション処理部３４に出力する。アプリケーション処理部３４は、入力されたフレームのデータを処理する。また、アプリケーション処理部３４は、他の装置に送信するデータを、宛先などの情報とともにルーティング処理部３３に出力する。ＨＥＬＬＯ制御部３５は、定期的にＨｅｌｌｏフレームを生成し、送信処理部３６に出力する。送信処理部３６は、ルーティング処理部３３や、ＨＥＬＬＯ制御部３５から入力されたＨｅｌｌｏフレームに対して、適宜、暗号化やフォーマットの変換などを行う。送信部２２は、他の装置に向けてフレームを送信する。
【００３３】
図５は、ノード装置１０のハードウェア構成の例を説明する図である。ノード装置１０は、プロセッサ１００、バス１０１（１０１ａ〜１０１ｃ）、タイマＩＣ１０４、Dynamic Random access Memory（ＤＲＡＭ）１０６、フラッシュメモリ１０７、無線モジュール１０８を備える。ノード装置１０は、オプションとして、ＰＨＹチップ１０２を含むことができる。バス１０１ａ〜１０１ｃは、プロセッサ１００、ＰＨＹチップ１０２、タイマＩＣ１０４、ＤＲＡＭ１０６、フラッシュメモリ１０７、および、無線モジュール１０８を、データの入出力が可能になるように接続する。
【００３４】
プロセッサ１００は、Micro-Processing Unit（ＭＰＵ）などの任意の処理回路である。プロセッサ１００は、フラッシュメモリ１０７に格納されたファームウェアなどのプログラムを読み込んで処理を行う。このとき、プロセッサ１００は、ＤＲＡＭ１０６をワーキングメモリとして使用できる。ノード装置１０において、プロセッサ１００は、制御部３０として動作する。ノード装置１０において、ＤＲＡＭ１０６やフラッシュメモリ１０７は、記憶部４０として動作する。ノード装置１０において、無線モジュール１０８は、通信部２０として動作する。ＰＨＹチップ１０２は、有線通信に用いられる。アドホックネットワークと他のネットワーク中の装置の間の通信を中継するゲートウェイ装置として動作するノード装置１０は、ＰＨＹチップ１０２を介して回線による通信が行うことができる。タイマＩＣ１０４は、ＨＥＬＬＯ制御部３５などでの処理に使用される。
【００３５】
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置１０にインストールされてもよい。また、プログラムは、ネットワークからＰＨＹチップ１０２や無線モジュール１０８を介してダウンロードされることにより通信装置１０にインストールされてもよい。さらに、実施形態に応じて、ＤＲＡＭ１０６やフラッシュメモリ１０７以外の他の種類の記憶装置が利用されることがある。また、ノード装置１０は、コンピュータによって実現されても良い。
【００３６】
＜実施形態＞
以下、実施形態にかかる通信処理を、アドホックネットワークの生成、データフレームの送受信処理と下り方向の経路情報の取得、通信経路の変更を伴う処理に分けて説明する。以下の説明では、動作を行っているノード装置１０を明確にするために、符号の最後に動作を行っているノード装置１０に割り当てられているアルファベットを記載することがある。例えば、ルーティング処理部３３ａはノード装置１０ａ中のルーティング処理部３３であり、下りルーティングテーブル４３ｇｗは、ゲートウェイ装置として動作するノード装置１０ｇｗが保持する下りルーティングテーブル４３である。
【００３７】
（１）アドホックネットワークの生成
図６は、アドホックネットワークの生成方法の例を説明する図である。アドホックネットワークに含まれているノード装置１０は、定期的に、隣接するノード装置１０とＨｅｌｌｏフレームを送受信することにより、アドホックネットワークを形成する。Ｈｅｌｌｏフレームの送信時刻になると、ノード装置１０ｇｗのＨＥＬＬＯ制御部３５ｇｗは、ノード装置１０ｇｗの情報を含むＨｅｌｌｏフレームを、隣接するノード装置１０に送信する。このため、図６に示すようにノード装置１０ｇｗに隣接するノード装置１０ａ〜１０ｃにＨｅｌｌｏフレームが送信される。
【００３８】
ここで、Ｈｅｌｌｏフレームには、Ｈｅｌｌｏフレームの送信元のアドレス、Ｈｅｌｌｏフレームの送信元がゲートウェイであるかを示す情報、Ｈｅｌｌｏフレームの送信元からゲートウェイ装置に至る経路の情報などが含まれている。例えば、ノード装置１０ｇｗが送信するＨｅｌｌｏフレームには、以下の情報が含まれている。
グローバル送信元アドレス  ：ＧＷ（ノード装置１０ｇｗ）
ゲートウェイ装置か        ：Ｙｅｓ
Ｈｅｌｌｏフレームには、さらに、Ｈｅｌｌｏフレームの送信元を介したときのゲートウェイまでの品質情報も記録される。
【００３９】
次に、Ｈｅｌｌｏフレームを受信したときのノード装置１０の動作を、ノード装置１０ａを例として説明する。ノード装置１０ａの受信部２１ａは、受信したＨｅｌｌｏフレームを、振分処理部３１ａに出力する。振分処理部３１ａは、タイプフィールドの値を用いて、Ｈｅｌｌｏフレームを経路生成部３２ａに出力する。経路生成部３２ａは、Ｈｅｌｌｏフレームの送信元に関する情報や、Ｈｅｌｌｏフレームの受信強度などの情報を、リンクテーブル４１ａに記録する。さらに、経路生成部３２ａは、Ｈｅｌｌｏフレームを用いて上りルーティングテーブル４２ａを更新する。
【００４０】
上りルーティングテーブル４２ａ−１は、ノード装置１０ｇｗから送信されたＨｅｌｌｏフレームを受信したときにノード装置１０ａが保持する上りルーティングテーブル４２ａの例である。ノード装置１０ｇｗから送信されたＨｅｌｌｏフレームには、Ｈｅｌｌｏフレームの送信元がゲートウェイであることが記録されている。このため、経路生成部３２ａは、ノード装置１０ｇｗのアドレス（ＧＷ）を上りルーティングテーブル４２ａのグローバル宛先（ＧＤ）に記録する。
【００４１】
次に、ローカル宛先の情報を上りルーティングテーブル４２ａに記録する際の処理を説明する。ここで、上りルーティングテーブル４２には、ゲートウェイ装置に至る１つ以上で所定の数以下のローカル宛先を記録することができる。ゲートウェイ装置宛のフレームの転送先が複数ある場合、優先順位を「ＬＤ」の後に続く数字で表すものとする。例えば、「ＬＤ１」は、ローカル宛先のうちで転送先として優先的に選択されるノード装置１０を指し、「ＬＤ２」は、ローカル宛先のうちで転送先として２番目に優先的に選択されるノード装置１０を指す。ローカル宛先の優先順位は、経路のホップ数や経路中に含まれる各リンクの受信電波強度などを用いて計算された経路の品質を表す情報を用いて決定される。図６の段階では、経路生成部３２ａは、ゲートウェイとして動作するノード装置１０ｇｗとの間の経路を１つしか認識していないので、ＬＤ１のアドレスとして、ＧＷを記録する。
【００４２】
ノード装置１０ｇｗから送信されたＨｅｌｌｏフレームを受信したノード装置１０ｂとノード装置１０ｃも、ノード装置１０ａと同様に処理を行う。このため、ノード装置１０ｂは上りルーティングテーブル４２ｂ−１を保持し、ノード装置１０ｃは、上りルーティングテーブル４２ｃ−１を保持する。
【００４３】
図７は、図６を参照しながら説明した処理後に、ノード装置１０ｂがＨｅｌｌｏフレームを送信した場合の例を示す。ノード装置１０ｂで行われるＨｅｌｌｏフレームの生成は、ノード装置１０ｇｗでの処理と同様である。このため、ノード装置１０ｂから送信されるＨｅｌｌｏフレームには、以下の情報が含まれる。
グローバル送信元アドレス  ：Ｂ（ノード装置１０ｂ）
ゲートウェイ装置か        ：Ｎｏ
通信可能なゲートウェイ装置のアドレス：ＧＷ（ノード装置１０ｇｗ）
通信可能なゲートウェイ装置までの経路の品質情報
ノード装置１０ｂから送信されたＨｅｌｌｏフレームは、図７に示すように、ノード装置１０ａ、１０ｃ、１０ｄ、１０ｇｗに到達したとする。
【００４４】
ノード装置１０ｄ中の経路生成部３２ｄは、受信部２１ｄと振分処理部３１ｄを介して、Ｈｅｌｌｏフレームを取得する。経路生成部３２ｄは、ノード装置１０ｂから送信されたＨｅｌｌｏフレームを受信すると、Ｈｅｌｌｏフレームの送信元であるノード装置１０ｂを介してゲートウェイ装置ノード装置１０ｇｗと通信できることを特定する。そこで、経路生成部３２ｄは、上りルーティングテーブル４２ｄ−１に示すように、グローバル宛先をＧＷに設定すると共に、ＧＤ＝ＧＷのエントリ中のローカル宛先の設定をＬＤ１＝Ｂにする。
【００４５】
ノード装置１０ａ中の経路生成部３２ａは、受信部２１ａと振分処理部３１ａを介して、Ｈｅｌｌｏフレームを取得する。経路生成部３２ａは、ノード装置１０ｂから送信されたＨｅｌｌｏフレームを受信すると、Ｈｅｌｌｏフレームの送信元であるノード装置１０ｂを介してゲートウェイ装置ノード装置１０ｇｗと通信できることを特定する。ここで、上りルーティングテーブル４２ａ−１（図６）には、既に、ノード装置１０ｇｗに至る経路が記録されている。そこで、経路生成部３２ａは、上りルーティングテーブル４２ａ−１にＬＤ１として記録されているノード装置１０ｇｗを介する経路と、受信したＨｅｌｌｏフレームの送信元であるノード装置１０ｂを介する経路の品質情報を比較する。経路生成部３２ａは、比較処理の結果、良好な方の経路でのローカル宛先をＬＤ１、２番目に良好な経路でのローカル宛先をＬＤ２とする。図７の例では、経路生成部３２ａは、ノード装置１０ｇｗに至る経路のＬＤ１をＧＷ、ノード装置１０ｇｗに至る経路のＬＤ２をＢに設定したとする。このため、上りルーティングテーブル４２ａ−１（図６）は、上りルーティングテーブル４２ａ−２に示すように更新される。
【００４６】
ノード装置１０ｃにおいても、ノード装置１０ｂから送信されたＨｅｌｌｏフレームを受信すると、ノード装置１０ａと同様の処理が行われるので、上りルーティングテーブル４２ｃ−１（図６）は、上りルーティングテーブル４２ｃ−２に更新される。
【００４７】
図８は、図７を参照しながら説明した処理後に、ノード装置１０ｄがＨｅｌｌｏフレームを送信した場合の例を示す。ノード装置１０ｄから送信されるＨｅｌｌｏフレームには、以下の情報が含まれる。
グローバル送信元アドレス  ：Ｄ（ノード装置１０ｄ）
ゲートウェイ装置か        ：Ｎｏ
通信可能なゲートウェイ装置のアドレス：ＧＷ（ノード装置１０ｇｗ）
通信可能なゲートウェイ装置までの経路の品質情報
ノード装置１０ｄから送信されたＨｅｌｌｏフレームは、図８に示すように、ノード装置１０ａ〜１０ｃ、１０ｅ〜１０ｉに到達したとする。ノード装置１０ｄから送信されたＨｅｌｌｏフレームを受信したノード装置１０ａ〜１０ｃ、１０ｅ〜１０ｉの各々は、図６、図７を参照しながら説明した処理と同様の処理により、上りルーティングテーブル４２を更新する。上りルーティングテーブル４２ａ−３は、ノード装置１０ａがノード装置１０ｄから送信されたＨｅｌｌｏフレームを受信したときに行った処理により得られた上りルーティングテーブル４２ａの例である。上りルーティングテーブル４２ｈ−１は、ノード装置１０ｈがノード装置１０ｄから送信されたＨｅｌｌｏフレームを受信したときに行った処理により得られた上りルーティングテーブル４２ｈの例である。なお、ノード装置１０ｅ〜１０ｇおよび１０ｉも、ノード装置１０ｄから送信されたＨｅｌｌｏフレームを処理することにより、上りルーティングテーブル４２ｈ−１と同じ情報を上りルーティングテーブル４２に記録する。
【００４８】
図６〜図８を参照しながら説明したように、各ノード装置１０がＨｅｌｌｏフレームの送受信を行うことにより、アドホックネットワーク中の各ノード装置１０がノード装置１０ｇｗにフレームを送信するための経路を取得する。この結果、例えば、図９に示すようなアドホックネットワークが形成される。図９では、各ノード装置１０とそのノード装置１０にとっての隣接ノード装置とのリンクを実線で示している。
【００４９】
図９に示す時点では、いずれのノード装置１０からもデータフレームが送信されていないが、全てのノード装置１０がＨｅｌｌｏフレームを送信したことにより、各ノード装置１０で上りルーティングテーブル４２が更新されているとする。図９に、アドホックネットワーク中のノード装置１０が保持する上りルーティングテーブル４２の例と下りルーティングテーブル４３の例を示す。以下の図では、図を見やすくするために、１つのグローバル宛先へのフレームの転送に使用可能なローカル宛先が複数ある場合、優先順位の高いローカル宛先から順にアドレスを記載し、ＬＤ１〜ＬＤ３の記載を省略することがある。例えば、図９中の上りルーティングテーブル４２ｄでは、ＧＤ＝ＧＷに対してのローカル宛先は、ＬＤ１＝Ｂ、ＬＤ２＝Ａ、ＬＤ３＝Ｃであることを示している。図９の時点では、いずれのノード装置１０もデータフレームを送信していないので、いずれのノード装置１０においても、下りルーティングテーブル４３には経路情報が記録されていない。図９の時点において、ノード装置１０ｄは上りルーティングテーブル４２ｄを保持しており、ノード装置１０ｂは上りルーティングテーブル４２ｂを保持しているとする。また、ノード装置１０ｅは上りルーティングテーブル４２ｅ−１を保持し、ノード装置１０ｆは上りルーティングテーブル４２ｆを保持する。さらに、ノード装置１０ｇは上りルーティングテーブル４２ｇを保持し、ノード装置１０ｈは上りルーティングテーブル４２ｈを保持する。
【００５０】
（２）データフレームの送受信処理と下り方向の経路情報の取得
図１０は、下りルーティングテーブル４３の更新処理の例を説明する図である。図６〜図９を参照しながら説明した処理によりアドホックネットワークが生成された後で、データフレームの送受信が行われる場合について説明する。データフレームには、アドレス情報、データフレームの転送元であるノード装置１０がノード装置１０ｇｗ宛てのフレームの転送に使用可能なローカル宛先の数（ＬＤ数）と、削除情報、ペイロードが含まれる。削除情報は、データフレームの転送元において、経路情報を削除したノード装置１０の情報である。
【００５１】
例えば、ノード装置１０ｈ中のアプリケーション処理部３４ｈがノード装置１０ｇｗ宛てのデータを生成したとする。アプリケーション処理部３４ｈは、生成したデータをそのデータの宛先の情報とともにルーティング処理部３３ｈに出力する。ルーティング処理部３３ｈは、データを含むフレームの転送先の情報を、上りルーティングテーブル４２ｈを参照して特定する。図１０の例では、ノード装置１０ｇｗのアドレスはＧＷであるので、アドレスＤが割り当てられたノード装置１０ｄが、フレームの転送先となる。ルーティング処理部３３ｈは、得られた結果と、アプリケーション処理部３４ｈから入力されたデータを用いて、データフレームＦ１を生成する。データフレームＦ１では、グローバル宛先アドレス＝ＧＷ、ローカル宛先アドレス＝Ｄ、グローバル送信元アドレス＝Ｈ、ローカル送信元アドレス＝Ｈに設定されている。データフレームＦ１の場合は、転送元がデータフレームＦ１の送信元でもあるので、削除情報は設定されていない。さらに、ノード装置１０ｈが保持する上りルーティングテーブル４２ｈでは、ＧＷ宛てのフレームのローカル宛先の数は１つである。このため、データフレームＦ１では、ＬＤ数＝１に設定される。ルーティング処理部３３ｈは、生成したデータフレームＦ１を、送信処理部３６ｈと送信部２２ｈを介してノード装置１０ｄに送信する（矢印Ａ２１）。
【００５２】
ノード装置１０ｄの受信部２１ｄは、データフレームＦ１を受信すると、振分処理部３１ｄに出力する。振分処理部３１ｄは、データフレームＦ１をルーティング処理部３３ｄに出力する。ルーティング処理部３３ｄは、データフレームＦ１を取得すると、グローバル宛先をキーとして上りルーティングテーブル４２ｄを検索する。ルーティング処理部３３ｄは、データフレームＦ１のグローバル宛先が上りルーティングテーブル４２ｄにあることから、データフレームＦ１を上り方向に転送するフレームであると判定する。
【００５３】
すると、ルーティング処理部３３ｄは、データフレームＦ１の送信元に至る経路の情報が下りルーティングテーブル４３ｄ−１（図９）に記録されているかを判定する。下りルーティングテーブル４３ｄ−１には、いずれのノード装置１０への経路情報も記録されていない。そこで、ルーティング処理部３３ｄは、データフレームＦ１のグローバル送信元をグローバル宛先、データフレームＦ１のローカル送信元をローカル宛先として、下りルーティングテーブル４３ｄに記録する。このため、下りルーティングテーブル４３ｄ−１（図９）は下りルーティングテーブル４３ｄ−２に示すように更新される。
【００５４】
上りルーティングテーブル４２ｄには、ノード装置１０ｇｗ宛てのフレームの転送先のうちで最優先するノード装置１０のアドレスがＢであることが記録されている。そこで、ルーティング処理部３３ｄは、データフレームＦ１中のデータの転送先をノード装置１０ｂに決定する。図１０の例では、上りルーティングテーブル４２ｄ中のローカル宛先のエントリ数は３である。そこで、ルーティング処理部３３ｄは、データフレームＦ１のローカル宛先をノード装置１０ｂに設定するとともに、ＬＤ数を３に更新することによってデータフレームＦ２を生成する。ルーティング処理部３３ｄは、生成したデータフレームＦ２を、送信部２２ｄを介してノード装置１０ｂに送信する（矢印Ａ２２）。
【００５５】
ノード装置１０ｂのルーティング処理部３３ｂは、受信部２１ｂと振分処理部３１ｂを介して、データフレームＦ２を取得する。ルーティング処理部３３ｂは、データフレームＦ２のグローバル宛先をキーとして上りルーティングテーブル４２ｂを検索する。ルーティング処理部３３ｂは、データフレームＦ２のグローバル宛先が上りルーティングテーブル４２ｂにあることから、データフレームＦ２を上り方向に転送するフレームであると判定する。
【００５６】
ルーティング処理部３３ｂは、データフレームＦ２の送信元であるノード装置１０ｈに至る経路の情報が下りルーティングテーブル４３ｂ−１（図９）に記録されていないと判定する。すると、ルーティング処理部３３ｂは、データフレームＦ２のグローバル送信元をグローバル宛先、データフレームＦ２のローカル送信元をローカル宛先として、下りルーティングテーブル４３ｂに記録する。このため、下りルーティングテーブル４３ｂ−１（図９）は下りルーティングテーブル４３ｂ−２に示すように更新される。
【００５７】
上りルーティングテーブル４２ｂには、ノード装置１０ｇｗ宛てのフレームの転送先のうちで最優先するノード装置１０のアドレスがＧＷであることが記録されている。そこで、ルーティング処理部３３ｂは、データフレームＦ２中のデータの転送先をノード装置１０ｇｗに決定する。図１０の例では、上りルーティングテーブル４２ｂ中のローカル宛先のエントリ数は３である。そこで、ルーティング処理部３３ｂは、データフレームＦ２のローカル宛先をノード装置１０ｇｗに設定するとともに、ＬＤ数に３を設定することによってデータフレームＦ３を生成する。ルーティング処理部３３ｂは、生成したデータフレームＦ３を、送信部２２ｂを介してノード装置１０ｇｗに送信する（矢印Ａ２３）。
【００５８】
ノード装置１０ｇｗのルーティング処理部３３ｇｗは、受信部２１ｇｗと振分処理部３１ｇｗを介して、データフレームＦ３を取得する。ルーティング処理部３３ｇｗは、データフレームＦ３のグローバル宛先が自ノードのアドレスであるので、データフレームＦ３に含まれているデータをアプリケーション処理部３４ｇｗに出力する。すると、アプリケーション処理部３４ｇｗは入力されたデータを処理する。
【００５９】
さらに、ルーティング処理部３３ｇｗは、データフレームＦ３の送信元であるノード装置１０ｈに至る経路の情報が下りルーティングテーブル４３ｇｗに記録されているかを判定する。ここで、ゲートウェイとして動作するノード装置１０ｇｗの下りルーティングテーブル４３は、エントリ数の上限が設定されておらず、ノード装置１０ｇｗに上り方向のデータフレームを送信してきたグローバル送信元に至る経路が記録される。このため、下りルーティングテーブル４３ｇｗには、他のノード装置１０での上りルーティングテーブル４２と同様に、グローバル宛先とローカル宛先の組み合わせが含まれていればよい。ルーティング処理部３３ｇｗは、データフレームＦ３に含まれていたアドレス情報を用いて、下りルーティングテーブル４３ｇｗ−１を生成する。
【００６０】
図１１は、ノード装置１０ｅがノード装置１０ｇｗにデータフレームを送信した場合について、下りルーティングテーブル４３の更新処理の例を説明する図である。ノード装置１０ｅがノード装置１０ｇｗ宛てのデータを含むフレームを生成するときに行う処理は、図１０を参照しながら説明したノード装置１０ｈでの処理と同様である。ノード装置１０ｅではデータフレームＦ１１が生成されたとする。データフレームＦ１１では、グローバル宛先アドレス＝ＧＷ、ローカル宛先アドレス＝Ｄ、グローバル送信元アドレス＝Ｅ、ローカル送信元アドレス＝Ｅに設定されている。データフレームＦ１１の場合は、転送元がデータフレームＦ１１の送信元であるので、削除情報は設定されていない。ノード装置１０ｅが保持する上りルーティングテーブル４２ｅでは、ＧＷ宛てのフレームのローカル宛先の数は３つであるので、データフレームＦ１１では、ＬＤ数＝３に設定される。ルーティング処理部３３ｅは、データフレームＦ１１を、送信部２２ｅを介してノード装置１０ｄに送信する（矢印Ａ３１）。
【００６１】
ノード装置１０ｄは、図１０を参照しながら説明した処理と同様に、ノード装置１０ｅから送信されたデータフレームＦ１１を処理する。例えば、ルーティング処理部３３ｄは、上りルーティングテーブル４２ｄを用いて、データフレームＦ１１中のデータの転送先をノード装置１０ｂに決定するとともに、下りルーティングテーブル４３ｄ−２（図１０）の情報を更新する。更新後の下りルーティングテーブル４３ｄ−３には、データフレームＦ１１の送信元であるノード装置１０ｅに至る経路の情報が記録されている。ルーティング処理部３３ｄは、データフレームＦ１１のローカル宛先をノード装置１０ｂに設定するとともに、ＬＤ数を３に更新することによってデータフレームＦ１２を生成し、データフレームＦ１２を、ノード装置１０ｂに送信する（矢印Ａ３２）。
【００６２】
ノード装置１０ｂは、図１０を参照しながら説明した処理と同様に、データフレームＦ１２を処理する。このため、下りルーティングテーブル４３ｂ−３には、データフレームＦ１２の送信元であるノード装置１０ｅに至る経路の情報が記録される。ルーティング処理部３３ｂは、データフレームＦ１２のローカル宛先をノード装置１０ｇｗに設定するとともに、ＬＤ数を３に更新することによってデータフレームＦ１３を生成し、データフレームＦ１３を、ノード装置１０ｇｗに送信する（矢印Ａ３３）。
【００６３】
ノード装置１０ｇｗは、図１０を参照しながら説明した処理と同様の処理を行う。このため、データフレームＦ１３に含まれているデータはアプリケーション処理部３４ｇｗで処理される。さらに、下りルーティングテーブル４３ｇｗ−１（図１０）には、ノード装置１０ｅの情報が追加されるので、下りルーティングテーブル４３ｇｗ−２に示すように更新される。
【００６４】
図１２は、ノード装置１０ｆがノード装置１０ｇｗにデータフレームを送信した場合について、下りルーティングテーブル４３の更新処理の例を説明する図である。ノード装置１０ｆがノード装置１０ｇｗ宛てのデータを含むフレームを生成するときに行う処理は、図１０を参照しながら説明したノード装置１０ｈでの処理と同様である。ノード装置１０ｆではデータフレームＦ２１が生成されたとする。データフレームＦ２１では、グローバル宛先アドレス＝ＧＷ、ローカル宛先アドレス＝Ｄ、グローバル送信元アドレス＝Ｆ、ローカル送信元アドレス＝Ｆに設定されている。データフレームＦ２１では、削除情報は設定されていない。上りルーティングテーブル４２ｆ中のＧＷ宛てのフレームのローカル宛先の数は３つであるので、データフレームＦ２１では、ＬＤ数＝３に設定される。ルーティング処理部３３ｆは、データフレームＦ２１をノード装置１０ｄに送信する（矢印Ａ４１）。
【００６５】
ノード装置１０ｄは、図１０を参照しながら説明した処理と同様に、データフレームＦ２１を処理する。例えば、ルーティング処理部３３ｄは、上りルーティングテーブル４２ｄを用いて、データフレームＦ２１中のデータの転送先をノード装置１０ｂに決定するとともに、下りルーティングテーブル４３ｄ−３（図１１）の情報を更新する。更新後の下りルーティングテーブル４３ｄ−４には、データフレームＦ２１のグローバル送信元であるノード装置１０ｆに至る経路の情報が記録されている。ルーティング処理部３３ｄは、データフレームＦ２１のローカル宛先をノード装置１０ｂに設定するとともに、ＬＤ数を３に更新することによってデータフレームＦ２２を生成し、データフレームＦ２２を、ノード装置１０ｂに送信する（矢印Ａ４２）。
【００６６】
ノード装置１０ｂは、図１０を参照しながら説明した処理と同様に、データフレームＦ２２を処理する。このため、下りルーティングテーブル４３ｂ−４には、データフレームＦ２２のグローバル送信元であるノード装置１０ｆに至る経路の情報が記録される。ルーティング処理部３３ｂは、データフレームＦ２２のローカル宛先をノード装置１０ｇｗに設定するとともに、ＬＤ数を３に更新することによってデータフレームＦ２３を生成し、データフレームＦ２３を、ノード装置１０ｇｗに送信する（矢印Ａ４３）。
【００６７】
ノード装置１０ｇｗは、図１０を参照しながら説明した処理と同様の処理を行う。このため、データフレームＦ２３に含まれているデータはアプリケーション処理部３４ｇｗで処理される。さらに、下りルーティングテーブル４３ｇｗ−２（図１１）には、ノード装置１０ｅの情報が追加されるので、下りルーティングテーブル４３ｇｗ−３に示すように更新される。
【００６８】
（３）通信経路の変更を伴う処理
図１３は、下りルーティングテーブルのエントリ数が上限に達したときの処理の例を説明する図である。図１３では、ノード装置１０ｄとノード装置１０ｂで下りルーティングテーブル４３のエントリ数が上限に達した状況下で、ノード装置１０ｇがノード装置１０ｇｗにデータフレームを送信した場合を例として説明する。
【００６９】
ノード装置１０ｇがノード装置１０ｇｗ宛てのデータを含むフレームを生成するときに行う処理は、他のノード装置１０での処理と同様である。ノード装置１０ｇではデータフレームＦ３１が生成されたとする。データフレームＦ３１では、グローバル宛先アドレス＝ＧＷ、ローカル宛先アドレス＝Ｄ、グローバル送信元アドレス＝Ｇ、ローカル送信元アドレス＝Ｇに設定されている。データフレームＦ３１では、削除情報は設定されていない。上りルーティングテーブル４２ｇ中のＧＷ宛てのフレームのローカル宛先の数は２つであるので、データフレームＦ３１では、ＬＤ数＝２に設定される。ルーティング処理部３３ｇは、データフレームＦ３１をノード装置１０ｄに送信する（矢印Ａ５１）。
【００７０】
ノード装置１０ｄ中のルーティング処理部３３ｄは、他のデータフレームを受信したときの処理と同様に、上りルーティングテーブル４２ｄを用いて、データフレームＦ３１中のデータの転送先をノード装置１０ｂに決定する。
【００７１】
さらに、ルーティング処理部３３ｄは、データフレームＦ３１のグローバル送信元であるノード装置１０ｇに至る経路の情報が下りルーティングテーブル４３ｄ−４（図１２）に記録されているかを判定する。下りルーティングテーブル４３ｄ−４には、ノード装置１０ｇへの経路情報は記録されていないが、既に、下りルーティングテーブル４３ｄ−４には、上限数分のエントリが記録されている。そこで、ルーティング処理部３３ｄは、データフレームＦ３１中のＬＤ数を下りルーティングテーブル４３ｄ−４中のエントリのＬＤ数と比較する。この比較処理は、ノード装置１０ｇｗ宛てのフレームの転送に使用可能なＬＤ数が少ないノード装置１０を経由している経路を優先的に下りルーティングテーブル４３ｄに記録するために行われる。
【００７２】
図１３の例では、データフレームＦ３１中のＬＤ数は２であるので、ノード装置１０ｇがノード装置１０ｇｗ宛てのフレームの転送に使用可能なローカル宛先の数は２である。一方、下りルーティングテーブル４３ｄ−４の１番目のエントリには、ＬＤ＝Ｈの場合にＬＤ数が１であることが記録されている。従って、ノード装置１０ｈがノード装置１０ｇｗ宛てのフレームの転送に使用可能なローカル宛先の数は１である。同様に、下りルーティングテーブル４３ｄ−４の２番目のエントリには、ＬＤ＝Ｅの場合にＬＤ数が３であることが記録され、３番目のエントリには、ＬＤ＝Ｆの場合にＬＤ数が３であることも記録されている。従って、ノード装置１０ｅとノード装置１０ｆでは、ノード装置１０ｇｗ宛てのフレームの転送に使用可能なローカル宛先の数は３である。そこで、ルーティング処理部３３ｄは、ノード装置１０ｅやノード装置１０ｆを介して受信しているフレームのグローバル送信元に至る経路よりも、ノード装置１０ｇを介して受信するフレームのグローバル送信元に至る経路を優先することを決定する。すなわち、ルーティング処理部３３ｄは、ノード装置１０ｅかノード装置１０ｆのいずれかをＬＤとするエントリの情報を削除して、ノード装置１０ｇをＬＤとするエントリを下りルーティングテーブル４３ｄに記録することを決定する。図１３の例では、ノード装置１０ｅ（Ｅ）をＬＤとするエントリの方が、ノード装置１０ｆ（Ｆ）をＬＤとするエントリよりも先に登録されているので、ルーティング処理部３３ｄは、ノード装置１０ｅをＬＤとするエントリを削除することを決定する。ルーティング処理部３３ｄは、ノード装置１０ｅをＬＤとするエントリを下りルーティングテーブル４３ｄから削除した後、ノード装置１０ｇをＬＤとするエントリを追加する。このため、下りルーティングテーブル４３ｄ−４（図１３）は下りルーティングテーブル４３ｄ−５に示すように更新される。
【００７３】
次に、ルーティング処理部３３ｄでの転送対象のフレームの生成について説明する。ノード装置１０ｄは、下りルーティングテーブル４３ｄの更新の後で、既に削除した経路のグローバル宛先に宛てたフレームを受信しても、転送処理に失敗してしまう。このため、ルーティング処理部３３ｄは、ノード装置１０ｄが削除したノード装置１０ｅに至る経路の情報を、ノード装置１０ｇｗ宛てのフレームの転送先に通知するために、削除情報をデータフレームに含める。図１３の例では、ノード装置１０ｅ（Ｅ）宛ての経路が削除されている。そこで、ルーティング処理部３３ｄは、データフレームＦ３１のローカル宛先をノード装置１０ｂに設定し、ＬＤ数を３に更新した上で、削除情報をノード装置１０ｅのアドレス（Ｅ）に設定することにより、データフレームＦ３２を生成する。ルーティング処理部３３ｄは、生成したデータフレームＦ３２を、送信部２２ｄを介してノード装置１０ｂに送信する（矢印Ａ５２）。
【００７４】
矢印Ａ５２の処理が終わった時点では、ノード装置１０ｅは、ノード装置１０ｇｗ宛てのフレームのローカル宛先として最優先する転送先（ＬＤ１）をノード装置１０ｄに設定している。このため、ノード装置１０ｅがノード装置１０ｇｗ宛てのフレームをノード装置１０ｄに転送する設定のままにしておくと、ノード装置１０ｅは、ノード装置１０ｇｗ宛てのフレームをノード装置１０ｄ以外に転送しない。すなわち、ノード装置１０ｄがノード装置１０ｅを介した経路を保持していないにも関わらず、ノード装置１０ｄ以外のノード装置１０でもノード装置１０ｅの経路が認識されなくなるおそれがある。例えば、矢印Ａ５２の時点では、ノード装置１０ｉやノード装置１０ｆなどには、ノード装置１０ｅから上り方向のフレームが転送されていないので、ノード装置１０ｄ、１０ｆ、１０ｉのいずれもノード装置１０ｅに至る下り方向の経路を保持していない。そこで、ノード装置１０ｄ中のルーティング処理部３３ｄは、ノード装置１０ｅに対して、ノード装置１０ｄをノード装置１０ｇｗ宛てのフレームの転送の際のＬＤ１に指定しないことを要求するための経路変更要求フレームを生成する。
【００７５】
図１３のＦ３３は、経路変更要求フレームの例である。経路変更要求フレームは、アドレス情報、変更要求情報、ペイロードを含む。変更要求情報は、経路変更要求フレームの宛先のノード装置１０に、経路変更要求フレームの送信元をＬＤ１から除外することを要求する経路のグローバル宛先アドレスを表す情報である。Ｆ３３の例では、ノード装置１０ｄは、ノード装置１０ｅからノード装置１０ｇｗに至る経路でノード装置１０ｄを最優先の転送先としないことを要求するために、変更要求情報＝ＧＷとする。経路変更要求フレームのペイロードは、経路変更要求フレームの送信元をＬＤ１として使用しないことを要求することを表す任意の情報とできる。図１３の例では、ペイロードには、ＬＤ１使用不可フラグが含まれ、ＬＤ１使用不可フラグ＝ＯＮに設定される。Ｆ３３に示す経路変更要求フレームのグローバル送信元アドレスとローカル送信元アドレスは、いずれもノード装置１０ｄのアドレス（Ｄ）に設定される。一方、Ｆ３３に示す経路変更要求フレームのグローバル宛先アドレスとローカル宛先アドレスは、いずれもノード装置１０ｅのアドレス（Ｅ）に設定される。ルーティング処理部３３ｄは、生成した経路変更要求フレームＦ３３を、送信部２２ｄを介してノード装置１０ｅに送信する（矢印Ａ５３）。
【００７６】
図１４は、下り方向の経路情報を削除したノード装置の情報を上り方向のノード装置に通知したときに、上り方向のフレームの転送先で行われる処理の例を説明する図である。図１４を参照しながら、図１３で説明した処理後に行われるデータフレームの転送とノード装置１０ｂやノード装置１０ｇｗでの処理についても説明する。
【００７７】
ノード装置１０ｂ中のルーティング処理部３３ｂは、受信部２１ｂと振分処理部３１ｂを介して、データフレームＦ３２（図１３）を取得する。ルーティング処理部３３ｂは、データフレームＦ３２に削除情報が含まれているので、削除情報で指定されたアドレスＥをグローバル宛先としている経路の情報を下りルーティングテーブル４３ｂ−４（図１２）から削除する。さらに、データフレームＦ３２のグローバル送信元の情報が下りルーティングテーブル４３ｂ−４に含まれていないため、ルーティング処理部３３ｂは、データフレームＦ３３のグローバル送信元（Ｇ）の情報を下りルーティングテーブル４３ｂに追加する。このため、下りルーティングテーブル４３ｂ−４は、下りルーティングテーブル４３ｂ−５（図１４）に示すように更新される。
【００７８】
さらに、ルーティング処理部３３ｂは、上りルーティングテーブル４２ｂを用いて、データフレームＦ３２中のデータの転送先をノード装置１０ｇｗに決定する。図１４の例では、上りルーティングテーブル４２ｂ中のローカル宛先のエントリ数は３である。そこで、ルーティング処理部３３ｂは、データフレームＦ３２のローカル宛先をノード装置１０ｇｗに設定するとともに、ＬＤ数に３を設定することによってデータフレームＦ４１を生成する。ルーティング処理部３３ｂは、データフレームＦ４１を、送信部２２ｂを介してノード装置１０ｇｗに送信する（矢印Ａ６１）。
【００７９】
ノード装置１０ｇｗ中のルーティング処理部３３ｇｗは、受信部２１ｇｗと振分処理部３１ｇｗを介して、データフレームＦ４１を取得する。ルーティング処理部３３ｇｗは、データフレームＦ４１に削除情報が含まれているので、削除情報で指定されたアドレスＥをグローバル宛先としている経路の情報を下りルーティングテーブル４３ｇｗ−３（図１２）から削除する。さらに、データフレームＦ４１のグローバル送信元（Ｇ）の情報が下りルーティングテーブル４３ｇｗ−３に含まれていないため、ルーティング処理部３３ｇｗは、データフレームＦ４１のグローバル送信元の情報を下りルーティングテーブル４３ｇｗに追加する。このため、下りルーティングテーブル４３ｇｗ−３は、下りルーティングテーブル４３ｇｗ−４に示すように更新される。
【００８０】
図１５は、下り方向の経路情報を削除されたノード装置がデータ転送経路を生成するための処理の例を説明する図である。図１５を参照しながら、経路変更要求フレームを受信したノード装置１０で行われる処理と、経路変更要求フレームを受信したノード装置１０から上り方向の経路が再設定される場合の処理の例を説明する。
【００８１】
ノード装置１０ｅの受信部２１ｅは、経路変更要求フレームを受信する。受信部２１ｅは、経路変更要求フレームを振分処理部３１ｅに出力する。振分処理部３１ｅは、経路変更要求フレームを経路生成部３２ｅに出力する。経路生成部３２ｅは、経路変更要求フレームを取得すると、経路変更要求フレームのグローバル送信元であるノード装置１０ｄから、ノード装置１０ｄをＧＷ宛てのフレームのＬＤ１にしないことを要求されたと認識する。そこで、経路生成部３２ｅは、上りルーティングテーブル４２ｅにおいて、ノード装置１０ｄをＧＷ宛てのフレームの転送先から削除する。従って、上りルーティングテーブル４２ｅ−１（図１２）は、上りルーティングテーブル４２ｅ−２に示すように更新される。
【００８２】
経路生成部３２ｅは、経路変更要求フレームを取得したことから、これまでノード装置１０ｇｗのＬＤ１に設定されていたノード装置１０ｄでのノード装置１０ｅ宛ての経路が削除されたことを認識する。そこで、経路生成部３２ｅは、新たにノード装置１０ｅ宛ての下り方向の経路を生成するために、ノード装置１０ｇｗ宛てのフレームの送信をルーティング処理部３３ｅに要求する。ルーティング処理部３３ｅは、上りルーティングテーブル４２ｅ−２を参照して、ノード装置１０ｇｗ宛のフレームの転送先と、上りルーティングテーブル４２ｅ−２中のエントリ数を特定する。ルーティング処理部３３ｅは、特定した情報を用いて、ダミーデータを含むデータフレームＦ５１を生成したとする。データフレームＦ５１では、グローバル宛先アドレス＝ＧＷ、ローカル宛先アドレス＝Ｉ、グローバル送信元アドレス＝Ｅ、ローカル送信元アドレス＝Ｅに設定されている。データフレームＦ５１では、削除情報は設定されていない。上りルーティングテーブル４２ｅ−２中のＧＷ宛てのフレームのローカル宛先の数は２つであるので、データフレームＦ５１では、ＬＤ数＝２に設定される。ルーティング処理部３３ｅは、データフレームＦ５１をノード装置１０ｉに送信する（矢印Ａ７１）。
【００８３】
ノード装置１０ｉでのデータフレームＦ５１に対する処理は、図１０などを参照しながら説明したノード装置１０ｄでの処理と同様である。このため、ルーティング処理部３３ｉは、上りルーティングテーブル４２ｉを用いて、データフレームＦ５１中のデータの転送先をノード装置１０ａに決定する。さらに、ルーティング処理部３３ｉは、下りルーティングテーブル４３ｉに、ノード装置１０ｅに至る経路の情報を登録する。ルーティング処理部３３ｉは、データフレームＦ５１のローカル宛先をノード装置１０ａに変更するとともに、ＬＤ数を３に更新することによってデータフレームＦ５２を生成し、データフレームＦ５２を、ノード装置１０ａに送信する（矢印Ａ７２）。
【００８４】
ノード装置１０ａでのデータフレームＦ５２に対する処理は、ノード装置１０ｉでのデータフレームＦ５１に対する処理と同様である。このため、ルーティング処理部３３ａは、上りルーティングテーブル４２ａを用いて、データフレームＦ５２中のデータの転送先をノード装置１０ｇｗに決定する。さらに、ルーティング処理部３３ａは、下りルーティングテーブル４３ａに、ノード装置１０ｅに至る経路の情報を登録する。ルーティング処理部３３ａは、データフレームＦ５２のローカル宛先をノード装置１０ｇｗに変更するとともに、ＬＤ数を３に更新することによってデータフレームＦ５３を生成し、データフレームＦ５３を、ノード装置１０ｇｗに送信する（矢印Ａ７３）。
【００８５】
ノード装置１０ｇｗは、図１０を参照しながら説明した処理と同様の処理を行う。このため、データフレームＦ５３に含まれているデータはアプリケーション処理部３４ｇｗで処理される。さらに、下りルーティングテーブル４３ｇｗ−４（図１４）には、ノード装置１０ｅの情報が追加されるので、下りルーティングテーブル４３ｇｗ−５に示すように更新される。
【００８６】
図１６は、下り方向のデータの転送例を説明する図である。図１６を参照しながら、下りルーティングテーブル４３中のエントリ数が上限に達した後で下りルーティングテーブル４３に登録されたノード装置１０と、下りルーティングテーブル４３から一度削除された経路のグローバル宛先への転送処理の例を説明する。
【００８７】
図１２〜図１５を参照しながら説明した処理により、ノード装置１０ｇｗ、ノード装置１０ａ、ノード装置１０ｂ、ノード装置１０ｄ、ノード装置１０ｉの各々が備える下りルーティングテーブル４３は、図１６に示す通りとなる。まず、この状態で、ゲートウェイ装置として動作しているノード装置１０ｇｗが、ノード装置１０ｈにデータフレームを送信する場合を説明する。
【００８８】
ノード装置１０ｇｗ中のアプリケーション処理部３４ｇｗは、ノード装置１０ｈ宛のデータを生成すると、ルーティング処理部３３ｇｗに出力する。ルーティング処理部３３ｇｗは、下りルーティングテーブル４３ｇｗ−５を用いて、ノード装置１０ｈのアドレスＨに対応付けられたローカル宛先アドレスがＢであることを特定する。ルーティング処理部３３ｇｗは、データフレームのグローバル宛先アドレスをＨ、ローカル宛先アドレスをＢに設定したデータフレームを、送信部２２ｇｗを介して送信する。このため、データフレームはノード装置１０ｂに転送される。
【００８９】
ノード装置１０ｂ中のルーティング処理部３３ｂは、受信部２１ｂと振分処理部３１ｂを介して、データフレームを取得する。ルーティング処理部３３ｂは、下りルーティングテーブル４３ｂ−５を用いて、グローバル宛先アドレス＝Ｈに対応付けられたローカル宛先アドレスがＤであることを特定する。ルーティング処理部３３ｂは、データフレームのローカル宛先アドレスをＤに変更したデータフレームを、送信部２２ｂを介して送信する。このため、データフレームはノード装置１０ｄに転送される。
【００９０】
ノード装置１０ｄ中のルーティング処理部３３ｄは、受信部２１ｄと振分処理部３１ｄを介して、データフレームを取得する。ルーティング処理部３３ｄは、下りルーティングテーブル４３ｄ−５を用いて、グローバル宛先アドレス＝Ｈに対応付けられたローカル宛先アドレスがＨであることを特定する。ルーティング処理部３３ｄは、データフレームのローカル宛先アドレスをＨに変更したデータフレームを、送信部２２ｄを介して送信する。このため、データフレームは、最終的な宛先であるノード装置１０ｈに転送される。従って、ノード装置１０ｈ宛のフレームは、矢印Ａ８１に示すように、ノード装置１０ｇｗから、ノード装置１０ｂ、ノード装置１０ｄを介して、ノード装置１０ｈに到達する。
【００９１】
次に、ゲートウェイ装置として動作しているノード装置１０ｇｗが、ノード装置１０ｅにデータフレームを送信する場合を説明する。ノード装置１０ｇｗは、ノード装置１０ｈ宛のデータフレームの生成の際の処理と同様の処理により、ノード装置１０ｅ宛てのデータフレームを生成する。このため、データフレームでは、下りルーティングテーブル４３ｇｗ−５に基づいて、グローバル宛先アドレス＝Ｅ、ローカル宛先アドレス＝Ａに設定される。このため、ノード装置１０ｅ宛てのデータフレームはノード装置１０ａに転送される。
【００９２】
ノード装置１０ａ中のルーティング処理部３３ａは、受信部２１ａと振分処理部３１ａを介して、データフレームを取得する。ルーティング処理部３３ａは、下りルーティングテーブル４３ａを用いて、グローバル宛先アドレス＝Ｅに対応付けられたローカル宛先アドレスがＩであることを特定する。ルーティング処理部３３ａは、データフレームのローカル宛先アドレスをＩに変更したデータフレームを送信する。このため、データフレームはノード装置１０ｉに転送される。
【００９３】
ノード装置１０ｉ中のルーティング処理部３３ｉは、受信部２１ｉと振分処理部３１ｉを介して、データフレームを取得する。ルーティング処理部３３ｉは、下りルーティングテーブル４３ｉを用いて、グローバル宛先アドレス＝Ｅに対応付けられたローカル宛先アドレスがＥであることを特定する。ルーティング処理部３３ｉは、データフレームのローカル宛先アドレスをＥに変更したデータフレームを送信する。このため、データフレームは、最終的な宛先であるノード装置１０ｅに転送される。従って、ノード装置１０ｅ宛のフレームは、矢印Ａ８２に示すように、ノード装置１０ｇｗから、ノード装置１０ａ、ノード装置１０ｉを介して、ノード装置１０ｅに到達する。
【００９４】
このように、実施形態にかかる方法では、下りルーティングテーブル４３中のエントリ数が上限に達した後で登録された経路と、下りルーティングテーブル４３から一度削除された経路のいずれのグローバル宛先に対してもフレームを送信することができる。このため、ゲートウェイ装置として動作していないノード装置１０が保持する下りルーティングテーブル４３に含められるエントリ数に上限が設定されていても、下り方向のフレームの送信に失敗する可能性が低くなっている。
【００９５】
（４）フローチャート
以下、図１７〜図２０のフローチャートを参照しながら、各ノード装置１０で行われる処理の例を説明する。
【００９６】
図１７は、ノード装置１０の処理の例を説明するフローチャートである。ＨＥＬＬＯ制御部３５は、Ｈｅｌｌｏフレームの送信タイミングであるかを判定する（ステップＳ１１）。Ｈｅｌｌｏフレームの送信タイミングである場合、ＨＥＬＬＯ制御部３５は、Ｈｅｌｌｏフレームを生成し、送信部２２を介して送信する（ステップＳ１１でＹｅｓ、ステップＳ１２）。
【００９７】
Ｈｅｌｌｏフレームの送信タイミングではない場合、ルーティング処理部３３は、他のノード装置１０へ送信するデータがあるかを判定する（ステップＳ１１でＮｏ、ステップＳ１３）。他のノード装置１０へ送信するデータがある場合、ルーティング処理部３３は、データフレームの生成処理を行う（ステップＳ１３でＹｅｓ、ステップＳ１６）。生成されたデータフレームは、ルーティング処理部３３でのルーティング処理により、ローカル宛先に向けて転送される（ステップＳ１８）。
【００９８】
他のノード装置１０へ送信するデータが無い場合、振分処理部３１は、他のノード装置１０からフレームを受信しているかを判定する（ステップＳ１３でＮｏ、ステップＳ１４）。他のノード装置１０からフレームを受信している場合、振分処理部３１は、フレームの種類を特定すると共に、フレームを振り分ける（ステップＳ１４でＹｅｓ、ステップＳ１５）。受信したフレームが経路変更要求フレームである場合、振分処理部３１は、受信フレームを経路生成部３２に出力する（ステップＳ１５で経路変更要求）。経路生成部３２は、経路変更要求フレームの処理を行うことにより、適宜、上りルーティングテーブル４２の更新などを行う（ステップＳ１９）。受信したフレームがデータフレームである場合、振分処理部３１は、受信フレームをルーティング処理部３３に出力する（ステップＳ１５でデータ）。このため、受信フレームは、ルーティング処理部３３でのルーティング処理と送信部２２での送信処理により、グローバル宛先に向けて転送される（ステップＳ１８）。受信したフレームがＨｅｌｌｏフレームである場合、振分処理部３１は、受信フレームを経路生成部３２に出力する（ステップＳ１５でＨＥＬＬＯ）。経路生成部３２は、Ｈｅｌｌｏフレームの処理を行うことにより、適宜、上りルーティングテーブル４２の更新などを行う（ステップＳ１７）。
【００９９】
図１８は、ルーティング処理の例を説明するフローチャートである。図１８は、図１７中のステップＳ１８の詳細の例である。ルーティング処理部３３は、入力されたフレームが自装置宛のフレームであるかを判定する（ステップＳ２１）。入力されたフレームが自装置宛ではない場合、ルーティング処理部３３は、フレームのグローバル宛先をキーとして上りルーティングテーブル４２中のグローバル宛先の情報を検索し、ヒットするか判定する（ステップＳ２１でＮｏ、ステップＳ２２）。上りルーティングテーブル４２中に、フレームのグローバル宛先を含むエントリがある場合、ルーティング処理部３３は、フレーム中の上り方向のＬＤ数を更新し、送信部２２を介して、更新後のフレームを送信する（ステップＳ２２でYes、ステップＳ２３）。ルーティング処理部３３は、処理対象としたフレームのグローバル送信元が自装置であるかを判定する（ステップＳ２４）。処理対象としたフレームのグローバル送信元が自装置である場合、ルーティング処理部３３は処理を終了する（ステップＳ２４でＹｅｓ）。一方、処理対象としたフレームのグローバル送信元が自装置ではない場合、ルーティング処理部３３は、下りルーティングテーブル４３の更新処理を行う（ステップＳ２４でＮｏ、ステップＳ２５）。
【０１００】
次に、入力されたフレームのグローバル宛先を含むエントリが上りルーティングテーブル４２中のＧＤに含まれていない場合（ステップＳ２２でＮｏ）について説明する。この場合、入力されたフレームは下り方向に転送されるフレームである可能性がある。そこで、ルーティング処理部３３は、フレームのグローバル宛先をキーとして下りルーティングテーブル４３中のグローバル宛先の情報を検索し、ヒットするか判定する（ステップＳ２６）。入力されたフレームのグローバル宛先を含むエントリが下りルーティングテーブル４３中のＧＤに含まれている場合、ルーティング処理部３３は、下りルーティングテーブル４３中の経路情報を用いて、フレームを送信する（ステップＳ２６でＹｅｓ、ステップＳ２７）。入力されたフレームのグローバル宛先を含むエントリが下りルーティングテーブル４３中のＧＤに含まれていない場合、ルーティング処理部３３は、処理対象のフレームのグローバル送信元が自装置であるかを判定する（ステップＳ２６でＮｏ、ステップＳ２８）。ルーティング処理部３３は、処理対象のフレームのグローバル送信元が自装置ではない場合、フレームの転送元（ＬＳ）に、受信したフレームを送り返す（ステップＳ２８でＮｏ、ステップＳ２９）。一方、処理対象のフレームのグローバル送信元が自装置である場合、ルーティング処理部３３は、宛先エラーであることを、アプリケーション処理部３４に通知して処理を終了する（ステップＳ２８でＹｅｓ、ステップＳ３２）。
【０１０１】
一方、ルーティング処理部３３に入力されたフレームが自装置宛のフレームであるとする（ステップＳ２１でＹｅｓ）。この場合、ルーティング処理部３３は、入力されたフレームが上り方向に送信されたフレームであるかを判定する（ステップＳ３０）。入力されたフレームが上り方向に送信されたフレームである場合、ルーティング処理部３３は、入力されたフレーム中のアドレスの情報を用いて、下りルーティングテーブル４３の更新処理を行う（ステップＳ３１）。フレームのグローバル宛先アドレスがＧＷの場合、上り方向のフレームである。換言すると、ステップＳ３１の処理は、ゲートウェイ装置として動作しているノード装置１０ｇｗによって行われる。さらに、ルーティング処理部３３は、自装置宛のフレームの受信をアプリケーション処理部３４に通知すると共に、フレーム中のデータをアプリケーション処理部３４に出力する（ステップＳ３２）。
【０１０２】
自装置宛のフレームを受信したノード装置１０がゲートウェイ装置ではない場合、ルーティング処理部３３に入力されたフレームは下り方向のフレームである（ステップＳ３０でＮｏ）。この場合、ルーティング処理部３３は、フレーム中のデータをアプリケーション処理部３４に出力して処理を終了する（ステップＳ３２）。
【０１０３】
図１９は、下りルーティングテーブル４３の更新処理の例を説明するフローチャートである。図１９は、図１８中のステップＳ２５やステップＳ３１での処理の詳細の例である。ルーティング処理部３３は、データフレームに削除情報が含まれているかを判定する（ステップＳ４１）。データフレームに削除情報が含まれている場合、ルーティング処理部３３は、下りルーティングテーブル４３から削除情報で指定されたノード装置１０への経路情報を削除する（ステップＳ４１でＹｅｓ、ステップＳ４２）。ルーティング処理部３３は、データフレームに削除情報が含まれていない場合（ステップＳ４１でＮｏ）か、ステップＳ４２の処理後、データフレームのグローバル宛先への経路が下りルーティングテーブル４３に含まれているかを判定する（ステップＳ４３）。データフレームのグローバル送信元への経路が下りルーティングテーブル４３に含まれている場合、ルーティング処理部３３は、下りルーティングテーブル４３において、データフレームのグローバル送信元に至る経路のローカル宛先（ＬＤ）の情報を更新する。このとき、ルーティング処理部３３は、データフレームの転送元を、データフレームのグローバル送信元への経路でのローカル宛先とする（ステップＳ４３でYes、ステップＳ４４）。
【０１０４】
データフレームのグローバル送信元への経路が下りルーティングテーブル４３に含まれていない場合、ルーティング処理部３３は、下りルーティングテーブル４３中のエントリ数が上限に達しているかを判定する（ステップＳ４５）。下りルーティングテーブル４３中のエントリ数が上限に達していないと判定されたとする（ステップＳ４５でＮｏ）。この場合、ルーティング処理部３３は、下りルーティングテーブル４３中のＧＤにデータフレームの送信元（ＧＳ）、ＬＤにデータフレームの転送元（ＬＳ）を記録し、さらに、データフレーム中のＬＤ数をＬＤ数として登録する（ステップＳ４６）。
【０１０５】
一方、下りルーティングテーブル４３中のエントリ数が上限に達していると判定されたとする（ステップＳ４５でＹｅｓ）。この場合、ルーティング処理部３３は、下りルーティングテーブル４３中で、ＬＤ数が多く、登録されてから時間が経過しているエントリを特定する（ステップＳ４７）。例えば、図１２〜図１６などの例で示した下りルーティングテーブル４３では、エントリを登録順に示しているので、テーブルの最初に近いエントリほど、登録されてから時間が経過していることになる。ルーティング処理部３３は、データフレームで通知されたＬＤ数は、ステップＳ４７で特定したエントリのＬＤ数よりも大きいかを判定する（ステップＳ４８）。データフレームで通知されたＬＤ数は、ステップＳ４７で特定したエントリのＬＤ数と同じかそれ以下である場合、ルーティング処理部３３は、下りルーティングテーブル４３を更新する（ステップＳ４８でＮｏ）。ルーティング処理部３３は、ステップＳ４７で特定したエントリを削除する。さらに、ルーティング処理部３３は、下りルーティングテーブル４３中のＧＤにデータフレームの送信元（ＧＳ）、ＬＤにデータフレームの転送元（ＬＳ）を記録し、さらに、データフレーム中のＬＤ数をＬＤ数として登録する（ステップＳ４９）。経路生成部３２は、削除したエントリ中に含まれていたローカル宛先に宛てて、経路変更要求フレームを送信する（ステップＳ５０）。
【０１０６】
データフレームで通知されたＬＤ数が、ステップＳ４７で特定したエントリのＬＤ数よりも大きい場合、ルーティング処理部３３は、下りルーティングテーブル４３を更新しない（ステップＳ４８でＹｅｓ）。ルーティング処理部３３は、受信したデータフレームの転送元に宛てて経路変更要求フレームを送信する（ステップＳ５１）。
【０１０７】
図２０は、経路変更要求フレームを受信したノード装置の処理の例を説明するフローチャートである。経路生成部３２は、経路変更要求フレーム内のグローバル宛先（ＧＤ）をキーとして上りルーティングテーブル４２のグローバル宛先情報（ＧＤ情報）を検索し、ヒットしたかを判定する（ステップＳ６１）。いずれのエントリもヒットしない場合、経路生成部３２は処理を終了する（ステップＳ６１でＮｏ）。一方、ヒットしたエントリがある場合、ヒットしたエントリのＬＤ１を使用不可とし、ヒットしたエントリ中の他のローカル宛先から新たなＬＤ１を決定する（ステップＳ６２）。ルーティング処理部３３は、ヒットしたエントリのグローバル宛先に宛てたデータフレームを生成し、送信部２２を介して送信する（ステップＳ６３）。なおステップＳ６３で送信されるデータフレーム中のデータは、実際にフレームのグローバル宛先で使用されるデータであっても良く、また、ダミーデータであっても良い。
【０１０８】
以上説明したように、実施形態にかかる方法を用いると、ゲートウェイとして動作していない各ノード装置１０は、ゲートウェイ装置宛のフレームの転送先が相対的に小さい装置を介した経路を優先的に記憶している。このため、隣接するノード装置１０数が少ないノード装置１０への送信の失敗が発生する可能性が低くなる。
【０１０９】
さらに、ノード装置１０は、下りルーティングテーブル４３からエントリを削除する際に、エントリが削除される下り方向の経路でのローカル宛先となるノード装置１０に対して、上り方向のフレームの転送先の変更を要求する。このため、転送先の変更を要求されたノード装置１０は、自ノードを介した下り方向の経路が削除されたことを認識することができる。そこで、転送先の変更を要求されたノード装置１０は、新たな経路を生成するために、上り方向のフレームを送信することにより、自装置を介したフレームの転送処理や自装置でのフレームの受信に失敗する可能性を低くしている。
【０１１０】
実施形態にかかる経路構築方法により、特定のノード装置１０に上り方向のフレームの転送経路が集中しても、下りルーティングテーブル４３のエントリ数に応じて、上り方向のフレームの転送経路の切り替えが行われる。このため、上り方向のフレームが特定のノード装置１０に集中する状態が長期間に及ぶことを避けられる。従って、下り方向のフレームの転送経路が消失することによって下り方向のフレームの転送処理に失敗する可能性を低くできる。このため、フレームの転送の失敗等に基づいて、アドホックネットワークを再構築する状況を避けやすくなり、サービスの向上が実現される。
【０１１１】
なお、実施形態にかかる方法は、Ｈｅｌｌｏフレームを用いた転送経路の集中の回避方法よりも、転送経路の集中が早く解消されるという利点がある。例えば、Ｈｅｌｌｏフレームに、Ｈｅｌｌｏフレームを送信したノードが上りフレームの転送先として推奨されるかを表わすパラメータを設定することで経路の集中を分散させることが提案されていた。この場合、パラメータがＨｅｌｌｏフレームの送信元を上りフレームの転送先として推奨していなければ、Ｈｅｌｌｏフレームを受信したノードはＨｅｌｌｏフレームの送信元を上りフレームの転送先に指定しない。しかし、Ｈｅｌｌｏフレームによりパラメータの情報がネットワーク全体に伝搬し、下りルーティングテーブルに反映されるまでには時間がかかるので、パラメータの情報がネットワーク全体に伝搬する前に下り方向のフレームの送受信に失敗するケースがあった。
【０１１２】
一方、実施形態にかかる方法では、図１２〜図１６などを参照しながら説明したように、下りルーティングテーブル４３のエントリの上限数以上の上り経路が集中した時点で、経路の切り替えが行われるので、転送経路の集中が早い時点で回避できる。このため、下り方向のフレームの送受信の失敗が起こりにくく、アドホックネットワークの再構築も発生しにくい。
【０１１３】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１１４】
図１２〜図１６の説明では、削除されるエントリでのフレームの転送先とフレームの送信元が同じ場合を例としたが、これは一例に過ぎない。例えば、図９に示すアドホックネットワークに、さらに、ノード装置１０ｅを介して通信可能なノード装置１０ｊが含まれているネットワークがあるとする。また、ノード装置１０ｊは、ノード装置１０ｅ、ノード装置１０ｄ、ノード装置１０ｂを介してノード装置１０ｇｗと通信しているとする。この状態で、ノード装置１０ｄでの下りルーティングテーブル４３ｄ中のエントリ数が上限を超えたために、ノード装置１０ｊを送信先とする経路がノード装置１０ｄで削除されたとする。この場合、ノード装置１０ｄでのノード装置１０ｊ宛のフレームの転送先はノード装置１０ｅである。そこで、ノード装置１０ｄは、ノード装置１０ｅに対して、上り方向のフレームの転送先にノード装置１０ｄを指定しないことを要求するための経路変更要求を送信する。すると、ノード装置１０ｅは、上り方向のフレームの転送先を図１３〜図１５を参照しながら説明した手順で変更するので、ノード装置１０ｊからのフレームも、ノード装置１０ｅでの転送経路の変更に伴ってノード装置１０ｄを介さなくなる。従って、経路が図１５に示すように変更された場合、経路変更後は、ノード装置１０ｊは、ノード装置１０ｅ、ノード装置１０ｉ、ノード装置１０ａを介して、ノード装置１０ｇｗにフレームを送信できる。また、ノード装置１０ｇｗからノード装置１０ｊ宛のフレームは、ノード装置１０ａ、ノード装置１０ｉ、ノード装置１０ｅを介して、ノード装置１０ｊに到達する。
【０１１５】
以上の説明で記載したフレーム中の情報要素は一例であり、実装に応じて、フレーム中の情報要素は変更され得る。例えば、Ｈｅｌｌｏフレームの送信元がゲートウェイであるかを示す情報として、ゲートウェイからのホップ数が使用されても良い。さらに、上りルーティングテーブル４２や下りルーティングテーブル４３に含まれている情報要素も、実装に応じて変更され得る。
【０１１６】
上述の実施形態に関し、さらに以下の付記を開示する。
（付記１）
ネットワークに配置されるノードによって実行されるプログラムであって、
前記ノードに、
第１の上りデータを受信した場合に、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録し、
新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中に含まれるエントリ数が上限に達しているかを判定し、
前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する、
処理を実行させることを特徴とするネットワーク経路構築プログラム。
（付記２）
前記下りルーティングテーブルに含まれるエントリの中から、上りデータの転送に使用可能な転送先数が相対的に大きいエントリを選択し、
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択したエントリに含まれている転送先数以下である場合、選択した前記エントリを削除し、
前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録する、
処理を前記ノードに実行させることを特徴とする付記１に記載のネットワーク経路構築プログラム。
（付記３）
選択した前記エントリを削除する場合、選択した前記エントリでの下りデータの転送先に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を送信する、
処理を前記ノードに実行させることを特徴とする付記２に記載のネットワーク経路構築プログラム。
（付記４）
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択した前記エントリに含まれている転送先数を越えている場合、前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録しないことを決定し、
前記第２の上りデータの転送元に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を送信する、
処理を前記ノードに実行させることを特徴とする付記２に記載のネットワーク経路構築プログラム。
（付記５）
前記ノードが上りデータを第１のノードに転送した後で、前記第１のノードから、前記第１のノードとは異なるノードを前記ノードでの上りデータの転送先にすることを要求する他の変更要求を受信すると、上りデータの転送先を前記第１のノードから第２のノードに変更し、
前記第２のノードを介した前記ノード宛の下りデータの転送経路を生成するために、上りデータを前記第２のノードに転送する、
処理を前記ノードに実行させることを特徴とする付記１〜４のいずれか１項に記載のネットワーク経路構築プログラム。
（付記６）
データを受信する受信部と、
第１の上りデータを前記受信部が受信した場合に、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録する制御部
を備え、
新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中のエントリ数が上限に達しているかを判定し、
前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記制御部は、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する
ことを特徴とするノード装置。
（付記７）
前記制御部は、
前記下りルーティングテーブルに含まれるエントリの中から、上りデータの転送に使用可能な転送先数が相対的に大きいエントリを選択し、
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択したエントリに含まれている転送先数以下である場合、選択した前記エントリを削除し、
前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録する、
ことを特徴とする付記６に記載のノード装置。
（付記８）
データの送信処理を行う送信部をさらに備え、
前記制御部は、選択した前記エントリを削除する場合、選択した前記エントリでの下りデータの転送先に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を生成し、
前記送信部は前記変更要求を送信する、
ことを特徴とする付記７に記載のノード装置。
（付記９）
前記制御部は、
前記第２の上りデータにより前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数として通知された値が、選択した前記エントリに含まれている転送先数を越えている場合、前記他のノードを下りデータの送信先としたエントリを前記下りルーティングテーブルに登録しないことを決定し、
前記第２の上りデータの転送元に、上りデータの転送先を前記ノードとは異なるノードに変更することを要求する変更要求を生成し、
前記送信部は前記変更要求を送信する、
ことを特徴とする付記７に記載のノード装置。
（付記１０）
前記送信部が上りデータを第１のノードに転送した後で、前記第１のノードから、前記第１のノードとは異なるノードを前記ノードでの上りデータの転送先にすることを要求する他の変更要求を前記受信部が受信すると、前記制御部は、
上りデータの転送先を前記第１のノードから第２のノードに変更し、
前記第２のノードを介した前記ノード宛の下りデータの転送経路を生成するために、前記第２のノードを転送先に指定した上りデータを生成し、
前記送信部は、前記第２のノードを転送先に指定した上りデータを送信する、
ことを特徴とする付記６〜９のいずれか１項に記載のノード装置。
（付記１１）
ネットワークに配置されるノードが、
第１の上りデータを受信した場合に、下りルーティングテーブルのエントリとして前記第１の上りデータの送信元であるノードと、前記第１の上りデータの転送元と、前記第１の上りデータの転送元が上りデータの転送に使用可能な転送先数を登録し、
新たに他のノードから第２の上りデータを受信した場合に、前記下りルーティングテーブル中に含まれるエントリ数が上限に達しているかを判定し、
前記下りルーティングテーブル中に含まれるエントリ数が前記上限に達していると判定した場合、前記第２の上りデータの転送元が上りデータの転送に使用可能な転送先数に応じて、前記下りルーティングテーブルに登録済のエントリの少なくともいずれか１つを削除して前記他のノードを下りデータの送信先としたエントリを登録するかを決定する、
処理を実行することを特徴とするネットワーク経路構築方法。
【符号の説明】
【０１１７】
１０  ノード装置
２０  通信部
２１  受信部
２２  送信部
３０  制御部
３１  振分処理部
３２  経路生成部
３３  ルーティング処理部
３４  アプリケーション処理部
３５  ＨＥＬＬＯ制御部
３６  送信処理部
４０  記憶部
４１  リンクテーブル
４２  上りルーティングテーブル
４３  下りルーティングテーブル
１００  プロセッサ
１０１  バス
１０２  ＰＨＹチップ
１０４  タイマＩＣ
１０６  ＤＲＡＭ
１０７  フラッシュメモリ
１０８  無線モジュール
【図１】
2018042122.tif 000003
【図２】
2018042122.tif 000004
【図３】
2018042122.tif 000005
【図４】
2018042122.tif 000006
【図５】
2018042122.tif 000007
【図６】
2018042122.tif 000008
【図７】
2018042122.tif 000009
【図８】
2018042122.tif 000010
【図９】
2018042122.tif 000011
【図１０】
2018042122.tif 000012
【図１１】
2018042122.tif 000013
【図１２】
2018042122.tif 000014
【図１３】
2018042122.tif 000015
【図１４】
2018042122.tif 000016
【図１５】
2018042122.tif 000017
【図１６】
2018042122.tif 000018
【図１７】
2018042122.tif 000019
【図１８】
2018042122.tif 000020
【図１９】
2018042122.tif 000021
【図２０】
2018042122.tif 000022