(57)【要約】【課題】ループを含む経路の使用を抑制する。【解決手段】複数のノード装置を含むネットワーク中の第１のノード装置は、経路情報フレームを送信する。経路情報フレームは、第１のノード装置からフレームを送信できる宛先ノード装置と、宛先ノード装置宛のフレームを第１のノード装置が送信する送信先を対応付けた経路情報を含む。第１のノード装置に隣接する第２のノード装置は、経路情報フレームを受信する。第２のノード装置は、第２のノード装置から、第１のノード装置と送信先を経由して宛先ノード装置に至る経路にループが含まれるかを判定する。第２のノード装置は、ループが含まれないと判定した経路の生成に用いられた経路情報を記憶し、記憶している経路を用いて送信処理を行う。【選択図】図１
2014099771.tif 000002
【特許請求の範囲】
【請求項１】
複数のノード装置を含むネットワーク中の第１のノード装置は、前記第１のノード装置からフレームを送信できる宛先ノード装置と、前記宛先ノード装置宛のフレームを前記第１のノード装置が送信する送信先を対応付けた経路情報を含む経路情報フレームを送信し、
前記第１のノード装置に隣接する第２のノード装置は、
前記経路情報フレームを受信し、
前記第２のノード装置から、前記第１のノード装置と前記送信先を経由して前記宛先ノード装置に至る経路にループが含まれるかを判定し、
ループが含まれないと判定した経路の生成に用いられた経路情報を記憶し、
記憶している経路を用いて送信処理を行う
ことを特徴とする通信方法。
【請求項２】
前記第２のノード装置は、
前記第２のノード装置からのフレームの送信に使用する経路の情報を格納するルーティングテーブルを保持し、
前記第２のノード装置から前記第１のノード装置と前記送信先を経由して前記宛先ノード装置に至る経路にループが含まれる場合、前記ルーティングテーブル中に、前記宛先ノード装置宛のフレームの転送先として前記第１のノード装置が登録されているかを判定し、
前記ルーティングテーブル中に、前記宛先ノード装置宛のフレームの転送先として前記第１のノード装置が登録されている場合、前記宛先ノード装置宛のフレームの転送先から前記第１のノード装置を削除する
ことを特徴とする請求項１に記載の通信方法。
【請求項３】
前記第２のノード装置は、前記送信先が前記第２のノード装置である場合に、前記第２のノード装置から前記第１のノード装置と前記送信先を経由して前記宛先ノード装置にいたる経路にループが含まれていると判定する
ことを特徴とする請求項１または２に記載の通信方法。
【請求項４】
前記経路情報フレームは、前記経路情報フレームを生成したノード装置から前記宛先ノード装置までの経路の品質を表す品質情報をさらに含み、
前記第２のノード装置は、
前記第１のノード装置が前記宛先ノード装置宛のフレームを第３のノード装置に送信することと、前記第３のノード装置を経由して前記宛先ノード装置に至る第１の経路の品質を示す第１の品質情報を含む経路情報フレームを、前記第１のノード装置から受信すると、前記第１のノード装置を前記宛先ノード装置宛のフレームの転送先の候補とし、
前記第２のノード装置に隣接する第４のノード装置から、前記第４のノード装置が前記宛先ノード装置宛のフレームを第５のノード装置に送信することと、前記第５のノード装置を経由して前記宛先ノード装置に至る第２の経路の品質を示す第２の品質情報を含む経路情報フレームを受信すると、前記第１の品質情報と前記第２の品質情報を比較し、
前記第１の品質情報が前記第２の品質情報よりも良好である場合、前記第１のノード装置を前記宛先ノード装置宛のフレームの転送先とする
ことを特徴とする請求項１〜３のいずれか１項に記載の通信方法。
【請求項５】
前記第１のノード装置は、前記第１のノード装置と前記第３のノード装置との間の通信に失敗すると、前記第１の品質情報よりも経路の品質が悪いことを表す第３の品質情報を前記第１の経路に対応付けた経路情報フレームを送信し、
前記第２のノード装置は、
前記第３の品質情報を含む経路情報フレームを受信すると、前記第３の品質情報と前記第２の品質情報を比較し、
前記第３の品質情報により表される品質が前記第２の品質情報により表される品質よりも悪い場合、前記宛先ノード装置宛のフレームの転送先を、前記第１のノード装置から前記第４のノード装置に変更する
ことを特徴とする請求項４に記載の通信方法。
【請求項６】
前記第２のノード装置は、前記宛先ノード装置宛のフレームを前記第１の経路を用いて転送している間は、前記宛先ノード装置のフレームの転送先が前記第１のノード装置であることを表す経路情報フレームを送信し、
前記第１のノード装置は、前記宛先ノード装置宛のフレームの転送先が前記第１のノード装置であることを表す経路情報フレームを前記第２のノード装置から受信している間は、前記第２のノード装置を前記宛先ノード装置宛のフレームの送信先として使用せず、
前記第２のノード装置は、前記宛先ノード装置宛のフレームの転送に使用する経路を前記第１の経路から前記第２の経路に変更すると、前記宛先ノード装置のフレームの転送先が前記第４のノード装置であることを表す経路情報フレームを送信し、
前記第１のノード装置は、前記宛先ノード装置宛のフレームの転送先が前記第４のノード装置であることを表す経路情報フレームを前記第２のノード装置から受信すると、前記第２のノード装置を前記宛先ノード装置宛のフレームの送信先の候補とする
ことを特徴とする請求項４または５に記載の通信方法。
【請求項７】
複数のノード装置を含むネットワーク中の第１のノード装置に、
前記第１のノード装置に隣接する第２のノード装置から、前記第２のノード装置からフレームを送信できる宛先ノード装置と、前記宛先ノード装置宛のフレームを前記第２のノード装置が送信する送信先を対応付けた経路情報を含む経路情報フレームを受信し、
前記第１のノード装置から前記第２のノード装置と前記送信先を経由して前記宛先ノード装置にいたる経路にループが含まれているかを判定し、
ループが含まれていないと判定された経路の生成に用いられた経路情報を記憶し、
記憶されている経路を用いた送信処理を行う
処理を行わせることを特徴とする通信プログラム。
【請求項８】
複数のノード装置を含むネットワーク中の第１のノード装置であって、
前記第１のノード装置に隣接する第２のノード装置から、前記第２のノード装置からフレームを送信できる宛先ノード装置と、前記宛先ノード装置宛のフレームを前記第２のノード装置が送信する送信先を対応付けた経路情報を含む経路情報フレームを受信する受信部と、
前記第１のノード装置から前記第２のノード装置と前記送信先を経由して前記宛先ノード装置にいたる経路にループが含まれているかを判定する処理を行う経路情報処理部と、
ループが含まれていないと判定された経路の生成に用いられた経路情報を記憶する記憶部と、
前記記憶部に記憶されている経路を用いた送信処理を行う送信部
を備えることを特徴とするノード装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノード装置を含むネットワークで行われる通信に関する。
【背景技術】
【０００２】
アドホックネットワークは、ネットワークを形成するノード装置が追加もしくは削除された場合でも、動的にネットワークが形成されるため、利便性が高い。アドホックネットワークに参加するノード装置は他のノード装置との間でＨｅｌｌｏフレームを送受信することにより、動的にネットワークを形成することができる。ここで、Ｈｅｌｌｏフレームには、Ｈｅｌｌｏフレームの送信元のノード装置の情報と、送信元のノード装置からフレームの転送が可能な宛先ごとに、宛先のノード装置の識別子と送信元のノード装置から宛先のノード装置までの経路の品質情報が含まれている。
【０００３】
関連する技術として、各転送装置が予め設定された他の転送装置とピアを確立する前に、各々保持している転送経路情報を交換するシステムが考案されている。転送装置は、転送経路情報に自分の識別子がない場合にピアを確立する。
【０００４】
送信対象フレームと、送信先の隣接ノード装置と、ホップ数１以下の範囲で送信対象フレームの起源として認識されるノード装置それぞれの識別情報を、フレームを送信するノード装置が対応付けて記憶する送信方法も考案されている。この方法では、ノード装置は、受信フレームの識別情報が送信済みのフレームの識別情報と等しい場合、受信フレームの最終宛先に対応付けて記憶している送信可能性情報を更新する。送信可能性情報は、複数の隣接ノード装置それぞれへの送信可能性を示す。ノード装置は、受信フレームの識別情報と対応付けられている送信先への送信可能性を「送信不能」に更新する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２４４９７７号公報
【特許文献２】国際公開第２０１１／０１３１６５号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ノード装置は、ある宛先のノード装置に至る経路が複数得られた場合、経路の品質情報を用いて転送先を決定する。ここで、品質情報は、隣接するノード装置間での電波の受信強度など、経路中に含まれるリンクの状況を示す情報を用いて計算されている。しかし、品質情報を用いても、ノード装置は、経路内にループが含まれているかを判定することはできない。このため、ノード装置がフレームの送信先として選択したノード装置を経由した経路にループが含まれていて、通信効率が悪くなることがある。
【０００７】
本発明は、１つの側面では、ループを含む経路の使用を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態にかかる方法では、複数のノード装置を含むネットワーク中の第１のノード装置は、経路情報フレームを送信する。経路情報フレームは、前記第１のノード装置からフレームを送信できる宛先ノード装置と、前記宛先ノード装置宛のフレームを前記第１のノード装置が送信する送信先を対応付けた経路情報を含む。前記第１のノード装置に隣接する第２のノード装置は、前記経路情報フレームを受信する。第２のノード装置は、前記第２のノード装置から、前記第１のノード装置と前記送信先を経由して前記宛先ノード装置に至る経路にループが含まれるかを判定する。第２のノード装置は、ループが含まれないと判定した経路の生成に用いられた経路情報を記憶し、記憶している経路を用いて送信処理を行う。
【発明の効果】
【０００９】
ループを含む経路の使用を防止できる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係る通信方法の例を示す図である。
【図２】ノード装置の構成の例を示す図である。
【図３】リンクテーブルの例を示す図である。
【図４】ルーティングテーブルの例を示す図である。
【図５】ノード装置のハードウェア構成の例を示す図である。
【図６】フレームのフォーマットの例を示す図である。
【図７】ネットワークの例を示す図である。
【図８】第１の実施形態で行われる処理の例を説明するシーケンス図である。
【図９】各ノード装置で生成される経路の例を示す図である。
【図１０】データフレームの転送経路の例を示す図である。
【図１１】ノード装置に障害が発生したときに行われる転送の例を示す図である。
【図１２】転送経路が変更される場合の処理の例を説明するシーケンス図である。
【図１３】フレームの転送ができない場合の処理の例を示す図である。
【図１４】ノード装置で行われる動作の例を説明するフローチャートである。
【図１５】ルーティングテーブルの更新処理の例を説明するフローチャートである。
【図１６】第２の実施形態で行われる処理の例を説明するシーケンス図である。
【発明を実施するための形態】
【００１１】
図１は、実施形態に係る通信方法の例を示す図である。図１は、ノードａ〜ｅとゲートウェイ装置（ＧＷ）の６つのノード装置が参加しているアドホックネットワークの例を示す。図１では、理解しやすくするために、互いに隣接するノード装置を実線で結んでいる。ここで、あるノード装置に「隣接する」ノード装置は、あるノード装置から送信されたフレームを受信することができる範囲内に位置するノード装置のことを指すものとする。また、あるノード装置から送信されたフレームを受信できる範囲に位置するノード装置のことを、そのノード装置の「隣接ノード装置」と記載することがある。
【００１２】
アドホックネットワークに含まれる各ノード装置は、経路情報フレームを送受信することにより、経路情報を取得する。経路情報フレームは、経路情報フレームの送信元のノード装置がフレームを送信することができる宛先のノード装置の識別子と、宛先のノード装置ごとの転送先のノード装置の識別子を含む。つまり、経路情報フレームの送信元のノード装置１０は、経路情報フレームを用いて、フレームの最終的な宛先別にフレームの転送先を、隣接ノードに通知する。
【００１３】
以下、図１に示すアドホックネットワークで行われる経路情報の取得方法の例について説明する。ここでは、ノードａは、ＧＷとの間での経路情報フレーム５の送受信により、ノードａがＧＷに隣接していることを認識しているものとする。
【００１４】
（Ａ１）ノードａは、経路情報フレーム５ａを用いて、ＧＷ宛にフレームを送信できることと、ＧＷ宛のフレームの転送先はＧＷであることを、隣接ノード装置に通知する。
【００１５】
（Ａ２）ノードｂは、ノードａから経路情報フレーム５ａを受信すると、ノードｂ、ノードａ、ノードａから通知された転送先を経由して最終的な宛先に至る経路にループが含まれるかを判定する。ここで、ノードａから通知された転送先と最終的な宛先が一致する場合は、ノードａが最終的な宛先に隣接していることを意味する。このため、Ｈｅｌｌｏフレームで通知された転送先と最終的な宛先が一致しても、ループとは判定されない。
ノードａから通知された経路情報を用いると、ノードｂ、ノードａ、ＧＷの順にフレームが転送されるので、経路中にループが発生しない。そこで、ノードｂは、ＧＷ宛のフレームをノードａに転送することができると判定する。ノードｂは、ノードａから通知された情報をルーティングテーブル２２ｂに記録する。ルーティングテーブル２２ｂにおいて、「ＧＤ」はグローバル宛先（Global Destination）を表し、「ＬＤ」はローカル宛先（Local Destination）を表す。ここで、「グローバル宛先」は、フレームの最終的な宛先を指す。また、「ローカル宛先」は、フレームを最終的な宛先に送信するために行われる１ホップの転送の際に、宛先として指定されるノード装置のことを指す。従って、経路情報フレームは、グローバル宛先（ＧＤ）ごとに、経路情報フレームを生成したノード装置がフレームの転送先とするローカル宛先（ＬＤ）を通知しているといえる。なお、「ＬＤ１」は、ローカル宛先のうちで転送先として優先的に選択されるノード装置１０を指すものとする。
【００１６】
（Ａ３）次に、ノードｂは、経路情報フレーム５ｂを用いて、ノードｂがＧＷ宛のフレームをノードａに転送することを隣接ノード装置に通知する。
【００１７】
（Ａ４）ノードｃは、ノードｂから受信した経路情報フレーム５ｂ中の情報を用いて、ノードｃ、ノードｂ、ノードａを経由してＧＷに至る経路にループが含まれるかを判定する。ノードｃは判定対象の経路にループを発見しないので、ＧＷ宛のフレームをノードｂに転送することができると判定する。そこで、ノードｃは、ルーティングテーブル２２ｃに示す情報を記録する。
【００１８】
（Ａ５）次に、ノードｃはルーティングテーブル２２ｃに示す情報を用いて、ノードｃがＧＷ宛のフレームをノードｂに送信することを、図１中の経路情報フレーム５ｃを用いて隣接ノードに通知する。
【００１９】
（Ａ６）ノードｂは、ノードｃの隣接ノードなので、経路情報フレーム５ｃを受信する。そこで、ノードｂは、ノードｃから受信した経路情報を用いてノードｂからＧＷ宛のフレームを送信した場合の経路にループが発生するかを判定する。この場合、判定対象の経路は、ノードｂ、ノードｃ、ノードｂの順にノード装置を経由してＧＷに到達するので、ループを含んでいる。そこで、ノードｂは、ノードｂがＧＷ宛のフレームをノードｃに送信すると、ノードｃとノードｂの間でループが発生すると判定し、ルーティングテーブル２２ｂにはノードｃから通知されたＧＷへの経路を記録しない。
【００２０】
（Ａ７）その後、ノードｂがＧＷ宛のフレームを送信しようとするとき、ノードｂは、ルーティングテーブル２２ｂを参照して転送先を決定する。ここで、ルーティングテーブル２２ｂには、ＧＷをグローバル宛先とするフレームの転送先の候補としてはノードｃが記録されていないので、ノードｂはノードｃにフレームを送信しない。ノードｂからＧＷに宛てたフレームは、ノードｂとノードｃの間のループ経路を経由しないので、ノードｂとノードｃの間のリンクは、他の通信に使用され得る。
【００２１】
このように、実施形態に係る通信方法では、経路情報フレーム５を受信したノード装置は、ループを含むことが検出できた経路をフレームの送信に使用しないため、ネットワーク中の通信が効率化される。
【００２２】
なお、ここでは、ノードｂの動作を例として説明したが、ノードａもノードｂと同様に通知された経路にループが含まれているかを判定する。従って、手順（Ａ３）でノードｂから送信された経路情報フレーム５ｂを受信したノードａは、ノードｂにＧＷ宛のフレームを送信するとノードａに戻ってくると判定するので、ノードｂから通知されたＧＷ宛の経路を記憶しない。
【００２３】
＜装置構成＞
以下、経路情報フレームとしてＨｅｌｌｏフレームが使用される場合を例として説明する。なお、経路情報フレームは、複数のノード装置の間でネットワークの経路情報を共有するために使用される任意のフレームとすることができ、Ｈｅｌｌｏフレームは、経路情報フレームの例である。
【００２４】
図２は、ノード装置１０の構成の例を示す。ノード装置１０は、フレーム受信部１１、フレーム情報解析部１２、経路情報処理部１３、アプリケーション処理部１４、Ｈｅｌｌｏフレーム生成部１５、転送処理部１６、フレーム送信部１７、記憶部２０を備える。記憶部２０は、リンクテーブル２１とルーティングテーブル２２を有する。さらに、記憶部２０は、フレーム情報解析部１２、経路情報処理部１３、アプリケーション処理部１４、Ｈｅｌｌｏフレーム生成部１５、転送処理部１６の処理で使用するデータを保持することができる。
【００２５】
フレーム受信部１１は、ノード装置１０に送信されてきたフレームを受信する。フレーム受信部１１は、受信したフレームをフレーム情報解析部１２に出力する。フレーム情報解析部１２は、入力されたフレームに含まれているアドホックヘッダ中のフレームタイプフィールドを確認する。フレームタイプフィールドの値は、フレームの種類によって異なり、例えば、Ｈｅｌｌｏフレームとデータフレームでは、異なる値となっている。フレーム情報解析部１２は、予め、ノード装置１０が受信する可能性があるフレームの種類の各々に対応するフレームタイプフィールドの値を記憶することができ、また、適宜、記憶部２０から取得することもできる。フレーム情報解析部１２は、Ｈｅｌｌｏフレームを経路情報処理部１３に出力し、データフレームをアプリケーション処理部１４に出力する。
【００２６】
経路情報処理部１３は、Ｈｅｌｌｏフレームから、Ｈｅｌｌｏフレームを生成したノード装置１０に割り当てられたアドレス、グローバル宛先アドレスとローカル宛先アドレスの組み合わせを取得する。経路情報処理部１３は、自ノードからＨｅｌｌｏフレームの送信元と、組み合わせ中のローカル宛先を経由してグローバル宛先に至る経路にループが含まれているかを判定する。経路情報処理部１３は、組み合わせに含まれているローカル宛先アドレスが自ノードに割り当てられたアドレスではない場合、経路中にループが含まれないと判定する。そこで、経路情報処理部１３は、グローバル宛先アドレスにＨｅｌｌｏフレームの送信元を対応付けてルーティングテーブル２２に記録する。一方、ローカル宛先アドレスが自ノードに割り当てられたアドレスと一致すると、経路情報処理部１３は、経路中にループが含まれると判定する。この場合、経路情報処理部１３は、ローカルアドレスとグローバルアドレスの組み合わせに基づいてルーティングテーブル２２を更新しない。なお、組み合わせに含まれているローカル宛先アドレスとグローバル宛先アドレスが一致することも有り得る。組み合わせに含まれているローカル宛先アドレスとグローバル宛先アドレスが一致することは、Ｈｅｌｌｏフレームの送信元は、グローバル宛先が割り当てられたノード装置１０に隣接していることを示す。このため、組み合わせ中のローカル宛先アドレスとグローバル宛先アドレスが一致しても、経路情報処理部１３は、ループが含まれるとは判定しない。
【００２７】
経路情報処理部１３は、ルーティングテーブル２２に加えて、リンクテーブル２１も更新する。経路情報処理部１３は、Ｈｅｌｌｏフレームの受信間隔の測定、Ｈｅｌｌｏフレームの受信強度の測定、Ｈｅｌｌｏフレームの送信元との間のリンクの状況を示す値（復路リンク重み）の計算なども行う。ここで、経路情報処理部１３が計算する復路リンク重みは、Ｈｅｌｌｏフレームの送信元から自ノードに向けた方向でのリンクの状況を示す。例えば、復路リンク重みは、Ｈｅｌｌｏフレームの受信間隔が理論値に近く、受信強度が大きいほど、小さな値になるように計算される。経路情報処理部１３は、Ｈｅｌｌｏフレームの受信間隔、受信強度などをリンクテーブル２１に記録する。また。経路情報処理部１３は、隣接ノード装置１０からＨｅｌｌｏフレームで通知された復路リンク重みもリンクテーブル２１に記録する。
【００２８】
図３は、リンクテーブル２１の例を示す。図３の例では、Ｈｅｌｌｏフレームの受信間隔、受信強度、隣接ノード装置１０から通知された復路リンク重みに加えて、データの再送回数もＨｅｌｌｏフレームの送信元に対応付けて記録されている。また、受信間隔と受信強度については、それぞれ、平均値と分散値が含まれる。なお、図３では、Ｈｅｌｌｏフレームの送信元を、Ｈｅｌｌｏフレームのローカル送信元（Local Source、ＬＳ）と表している。「ローカル送信元」とは、フレームが１ホップ転送される場合の転送元のノード装置１０である。一方、フレームを生成したノード装置１０を「グローバル送信元」（Global Source、ＧＳ）と記載することがある。Ｈｅｌｌｏフレームは送信元のノード装置１０から１ホップのノード装置１０にブロードキャストされるので、Ｈｅｌｌｏフレームの場合、ローカル送信元とグローバル宛先はいずれも、Ｈｅｌｌｏフレームを生成したノード装置１０である。
【００２９】
図４（ａ）は、ルーティングテーブル２２の例を示す。ルーティングテーブル２２は、１つのグローバル宛先に対して、１つ以上の任意の数のローカル宛先を記録することができる。例えば、図４（ａ）に示すように、ルーティングテーブル２２は、１つのグローバル宛先に対して、３つ以下のローカル宛先を対応付けて記憶することができる。さらに、ルーティングテーブル２２は、例えば、経路のホップ数や経路中に含まれる各リンクの受信電波強度などを用いて計算された経路の品質を表す情報を、グローバル宛先とローカル宛先の組合せごとに記録することができる。品質情報の計算方法は、実装に応じて選択される。ルーティングテーブル２２の更新方法については後で詳しく説明する。
【００３０】
アプリケーション処理部１４は、フレーム情報解析部１２から入力されたフレームのうちの自ノード宛のフレームを、アプリケーションにより処理する。一方、フレーム情報解析部１２から入力されたフレームのグローバル宛先が他のノード装置１０である場合、アプリケーション処理部１４は、転送処理部１６にフレームを出力する。さらに、アプリケーション処理部１４は、予め、Ｈｅｌｌｏフレームの送信周期を記憶している。アプリケーション処理部１４は、Ｈｅｌｌｏフレームを生成するタイミングをＨｅｌｌｏフレーム生成部１５に通知する。
【００３１】
Ｈｅｌｌｏフレーム生成部１５は、アプリケーション処理部１４からＨｅｌｌｏフレームを生成する時刻が通知されると、Ｈｅｌｌｏフレームを生成する。Ｈｅｌｌｏフレームについては、後で詳しく説明する。Ｈｅｌｌｏフレーム生成部１５は、Ｈｅｌｌｏフレームをフレーム送信部１７に出力する。
【００３２】
転送処理部１６は、アプリケーション処理部１４から入力されたフレームのグローバル宛先に応じて、ローカル宛先を決定して、アドホックヘッダを生成する。フレームのフォーマットについては後述する。転送処理部１６は、ローカル宛先を決定する際に、ルーティングテーブル２２を参照する。転送処理部１６は、アドホックヘッダを付加したフレームを、フレーム送信部１７に出力する。フレーム送信部１７は、Ｈｅｌｌｏフレーム生成部１５または転送処理部１６から入力されたフレームを、フレームのローカル宛先に送信する。例えば、Ｈｅｌｌｏフレームのローカル宛先は隣接する全てのノード装置１０であるので、フレーム送信部１７は、Ｈｅｌｌｏフレームをブロードキャスト送信する。
【００３３】
図５は、ノード装置１０のハードウェア構成の例を示す図である。ノード装置１０は、プロセッサ１００、バス１０１（１０１ａ〜１０１ｃ）、タイマＩＣ１０４、Dynamic Random access Memory（ＤＲＡＭ）１０６、フラッシュメモリ１０７、無線モジュール１０８を備える。ノード装置１０は、オプションとして、ＰＨＹチップ１０２を含むことができる。バス１０１ａ〜１０１ｃは、プロセッサ１００、ＰＨＹチップ１０２、タイマＩＣ１０４、ＤＲＡＭ１０６、フラッシュメモリ１０７、および、無線モジュール１０８を、データの入出力が可能になるように接続する。
【００３４】
プロセッサ１００は、MicroProcessing Unit（ＭＰＵ）などの任意の処理回路である。プロセッサ１００は、フラッシュメモリ１０７に格納されたファームウェアなどのプログラムを読み込んで処理を行う。このとき、プロセッサ１００は、ＤＲＡＭ１０６をワーキングメモリとして使用できる。ノード装置１０において、プロセッサ１００は、フレーム情報解析部１２、経路情報処理部１３、アプリケーション処理部１４、Ｈｅｌｌｏフレーム生成部１５、転送処理部１６として動作する。ノード装置１０において、ＤＲＡＭ１０６は、記憶部２０として動作し、リンクテーブル２１とルーティングテーブル２２を保持する。ノード装置１０において、無線モジュール１０８は、フレーム受信部１１およびフレーム送信部１７として動作する。ＰＨＹチップ１０２は、有線通信に用いられる。アドホックネットワークと他のネットワーク中の装置の間の通信を中継するゲートウェイとして動作するノード装置１０では、ＰＨＹチップ１０２を介して回線による通信を行うことができる。
【００３５】
タイマＩＣ１０４は、Ｈｅｌｌｏフレームを送信する間隔の計測や、隣接するノード装置１０からＨｅｌｌｏフレームを受信する間隔を計測するときに用いられる。つまり、タイマＩＣ１０４は、経路情報処理部１３やアプリケーション処理部１４などの一部として動作する。
【００３６】
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置１０にインストールされてもよい。または、プログラムは、ネットワークからＰＨＹチップ１０２や無線モジュール１０８を介してダウンロードされることによりノード装置１０にインストールされてもよい。また、実施形態に応じて、ＤＲＡＭ１０６やフラッシュメモリ１０７以外の他の種類の記憶装置が利用されることがある。また、ノード装置１０は、コンピュータによって実現されても良い。
【００３７】
＜フレームのフォーマット例＞
図６（ａ）にＨｅｌｌｏフレームのフォーマットの例を示す。Ｈｅｌｌｏフレームのアドホックヘッダには、ローカル宛先アドレス、ローカル送信元アドレス、タイプ、フレームサイズなどの情報が含まれている。Ｈｅｌｌｏフレームでは、ローカル宛先アドレスは全ての隣接ノードを表すブロードキャストアドレスに設定される。また、Ｈｅｌｌｏフレームのローカル送信元アドレスは、Ｈｅｌｌｏフレームを生成したノード装置１０に割り当てられたアドレスとなる。タイプはフレームの種類を一意に特定できる値である。
【００３８】
図６（ａ）に示すＨｅｌｌｏフレームには、アドホックヘッダの他、圧縮ヘッダ、Ｈｅｌｌｏメッセージヘッダ、Ｈｅｌｌｏヘッダ、署名などの情報も含まれる。圧縮ヘッダは、Ｈｅｌｌｏフレームに含まれているデータの圧縮に関する情報を含む。Ｈｅｌｌｏメッセージヘッダには、Ｈｅｌｌｏヘッダ数が含まれる。Ｈｅｌｌｏヘッダ数は、Ｈｅｌｌｏフレームの送信元のノード装置１０がルーティングテーブル２２に記憶しているグローバル宛先の数と同数である。
【００３９】
Ｈｅｌｌｏヘッダには、グローバル宛先アドレス、ローカル宛先アドレス、ノードタイプ、ホップ数、死活監視状態情報、経路品質重み、復路リンク重みが含まれる。Ｈｅｌｌｏヘッダ中のローカル宛先アドレスは、同じＨｅｌｌｏヘッダ中のグローバル宛先アドレスにフレームを転送するときの転送先となるノード装置１０である。Ｈｅｌｌｏフレームの送信元のノード装置１０が、Ｈｅｌｌｏヘッダ中のグローバル宛先までの複数の経路を保持している場合、転送に使用される確率が最も高いノード装置１０のアドレスがＨｅｌｌｏヘッダのローカル宛先アドレスとして記録される。例えば、ノードｂからＧＷまでの経路として、ノードｂは、転送先をノードａとする経路と、転送先をノードｅとする経路を保持しているとする。ここで、転送先をノードａとする経路の通信状況が、転送先をノードｅとする経路の通信状況よりも良好である場合、ノードｂは、グローバル宛先がＧＷであるＨｅｌｌｏヘッダ中のローカル宛先アドレスをノードａのアドレスに設定する。以下、ローカル宛先について説明するときに、文字列ＬＤの後に、そのローカル宛先の優先度を表す数字を続けて記載することがある。例えば、ノードｂからノードａを経由してＧＷに至る経路の状況が、ノードｂからノードｅを経由してＧＷに至る経路の状況よりも良好な場合、ＧＤ＝ＧＷの経路では、ノードａがＬＤ１、ノードｅがＬＤ２となる。
【００４０】
ホップ数フィールドは、Ｈｅｌｌｏフレームの送信元からＨｅｌｌｏヘッダ中のグローバル宛先までのホップ数を記録する。１つのグローバル宛先に対して複数のローカル宛先がある場合、ＬＤ１を経由する経路のホップ数がＨｅｌｌｏヘッダに記録される。Ｈｅｌｌｏヘッダ中のノードタイプは、Ｈｅｌｌｏヘッダ中のグローバル宛先に指定された装置がゲートウェイとして動作しているかを特定するために使用される。経路品質重みは、経路に含まれている全リンクの通信実績値の和であり、経路の通信品質の計算に用いられる。経路品質重みについても、１つのグローバル宛先に対して複数のローカル宛先がある場合、ＬＤ１を経由する経路についての値がＨｅｌｌｏヘッダに記録される。復路リンク重みフィールドは、Ｈｅｌｌｏヘッダのグローバル宛先がＨｅｌｌｏフレームの送信元の隣接ノードである場合に用いられる。復路リンク重みフィールドは、Ｈｅｌｌｏヘッダのグローバル宛先のノードからＨｅｌｌｏフレームの送信元が受信したＨｅｌｌｏフレームの受信品質を表す。
【００４１】
図６（ｂ）は、データフレームのフォーマットの例を示す。データフレームは、アドホックヘッダ、データヘッダ、ペイロードを含む。アドホックヘッダに含まれる情報要素は、Ｈｅｌｌｏフレームと同様である。データヘッダには、データフレームのグローバル宛先アドレスと、グローバル送信元アドレスが含まれる。ペイロードには送受信されるデータが記録される。
【００４２】
＜第１の実施形態＞
図７は、ネットワークの例を示す図である。図８は、第１の実施形態で行われる処理の例を説明するシーケンス図である。以下、図７に示すアドホックネットワークにおいてＨｅｌｌｏフレームが送受信される場合に行われる処理の例を説明する。図７の例では、アドホックネットワークは、ネットワーク３１に接続されている。ネットワーク３１は、サーバ３２を含む。アドホックネットワークに参加しているノード装置１０は、ネットワーク３１とアドホックネットワークとの間のゲートウェイとして動作するノード装置を介して、サーバ３２と通信できる。
【００４３】
図７に示すように、ノードａはＧＷに隣接しているので、ノードａは、グローバル宛先がＧＷの場合、ローカル宛先をＧＷに設定する。ノードｅは、グローバル宛先がＧＷの場合、ローカル宛先としてはノードｂとノードｆを設定できるが、ここでは、ノードｆをローカル宛先とする経路の方がノードｂをローカル宛先とする経路よりも状況が良い経路であるとする。すなわち、ノードｅでは、ＧＤ＝ＧＷの場合、ノードｆがＬＤ１、ノードｂがＬＤ２となる。ノードｃおよびノードｄは、グローバル宛先がＧＷの場合、ローカル宛先をノードｂに設定するものとする。
【００４４】
なお、手順の番号は、図７、図８、および、図１０に示す括弧つきの番号に対応しているものとする。また、以下の説明では、動作を行っているノード装置１０を明確にするために、符号の最後に動作を行っているノード装置１０に割り当てられているアルファベットを記載することがある。例えば、ノードｂの中の経路情報処理部１３を、「経路情報処理部１３ｂ」と表記することがある。
【００４５】
（１）ノードａのアプリケーション処理部１４ａは、Ｈｅｌｌｏフレーム生成部１５ａにＨｅｌｌｏフレームの生成を要求する。Ｈｅｌｌｏフレーム生成部１５ａは、以下の情報要素を含むＨｅｌｌｏフレームを生成し、フレーム送信部１７ａを介してブロードキャスト送信する。このため、ノードａは、グローバル宛先がＧＷのフレームをＧＷに送信することを、Ｈｅｌｌｏフレームを用いてノードａの隣接ノード装置１０に通知できる。
Ｈｅｌｌｏフレームの送信元        ：ノードａ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ＧＷ
以下の図で、「Ｈｅｌｌｏフレーム」という文字列の後の括弧中の最初の値は、Ｈｅｌｌｏヘッダ中のグローバル宛先を示すものとする。一方、括弧中の２番目の値は、最初の値で示したグローバル宛先に当てたフレームを転送する際に、Ｈｅｌｌｏフレームの生成元のノード装置１０がローカル宛先に指定するノード装置１０を示す。
【００４６】
（２）ノードｂのフレーム受信部１１ｂは、受信したＨｅｌｌｏフレームをフレーム情報解析部１２ｂに出力する。フレーム情報解析部１２ｂは、アドホックヘッダに含まれているタイプの値に基づいて、入力されたフレームがＨｅｌｌｏフレームであると判定すると、入力されたフレームを経路情報処理部１３ｂに出力する。経路情報処理部１３ｂは、Ｈｅｌｌｏフレームの送信元について得られた情報をリンクテーブル２１ｂに記録する。例えば、経路情報処理部１３ｂは、手順（１）で受信したフレームを用いて、図３のＮｏ．１の情報をリンクテーブル２１ｂに記録したとする。なお、図３のＮｏ．１に記録されている復路リンク重みは、以前にノードｂがブロードキャストしたＨｅｌｌｏフレームをノードａが受信したときに計算された値である。従って、図３のＮｏ．１に記録されている復路リンク重みは、ノードｂからノードａに向けてフレームが送信されるときのリンクの状況を示す。
【００４７】
経路情報処理部１３ｂは、ノードａからノードｂに向けてフレームが送信される場合の復路リンク重みを計算する。復路リンク重みは、Ｈｅｌｌｏフレームの受信間隔の平均値と分散値、Ｈｅｌｌｏフレームの受信強度の平均値と分散値、Ｈｅｌｌｏフレームの送信元へのフレームの再送回数などにより求められる。経路情報処理部１３ｂは、Ｈｅｌｌｏフレームの受信間隔を予め記憶しており、Ｈｅｌｌｏフレームの受信間隔の平均値が予め記憶している受信間隔に近いほど、復路リンク重みの値を小さくする。また、Ｈｅｌｌｏフレームの受信強度の平均値が大きいほど、経路情報処理部１３ｂは、復路リンク重みの値を小さくする。さらに、経路情報処理部１３ｂは、Ｈｅｌｌｏフレームの受信間隔とＨｅｌｌｏフレームの受信強度のいずれについても分散値が小さいほど、復路リンク重みの値を小さくする。再送回数は小さいほど、リンク重みの値が小さくなる。
【００４８】
さらに、経路情報処理部１３ｂは、ノードｂから、Ｈｅｌｌｏフレームの送信元とＨｅｌｌｏヘッダ中のローカル宛先を経由してＨｅｌｌｏヘッダ中のグローバル宛先に至る経路にループが含まれているかを判定する。このとき、経路情報処理部１３ｂは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｂであるかによって、ループの有無を判定する。ここでは、Ｈｅｌｌｏヘッダ中のローカル宛先がＧＷであるので、経路情報処理部１３ｂは、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれていないと判定する。そこで、経路情報処理部１３ｂは、ノードａ経由のＧＷへの経路をルーティングテーブル２２に記録する。
【００４９】
また、経路情報処理部１３ｂは、ノードａを経由してＧＷに至る経路について評価値を計算する。評価値は、Ｈｅｌｌｏヘッダ中の経路品質重みと、Ｈｅｌｌｏフレームの送信元から通知されてきた自ノードに関する復路リンク重みを用いて計算される。経路情報処理部１３ｂは、ノードａから送信されたＨｅｌｌｏフレームにＧＤ＝ノードｂのＨｅｌｌｏヘッダが含まれているかを判定する。ＧＤ＝ノードｂのＨｅｌｌｏヘッダがＨｅｌｌｏフレームに含まれている場合、経路情報処理部１３ｂは、ＧＤ＝ノードｂのＨｅｌｌｏヘッダの復路リンク重みと、ＧＤ＝ＧＷの経路品質重みを用いて、評価値を求める。経路情報処理部１３ｂは、得られた評価値を、ノードｂからノードａを経由してＧＷに至る経路の品質情報とする。経路品質重みが経路の状況が比較的良いことを示す値であり、さらに、Ｈｅｌｌｏフレームの送信元との間のリンクの状況も良好である場合、そのＨｅｌｌｏヘッダで通知される経路の状態は比較的良好である。ここでは、評価値、Ｈｅｌｌｏヘッダ中の経路品質重みと、Ｈｅｌｌｏフレームの送信元との間のリンク重みのいずれも、小さい値ほど、経路の状況が良いことを示すものとする。なお、評価値の計算式は実装に応じて任意に決定される。ここでは、経路情報処理部１３ｂは、図４（ａ）のＮｏ．１−１の経路を記録したものとする。
【００５０】
（３）ノードｅのＨｅｌｌｏフレーム生成部１５ｅは、アプリケーション処理部１４ｅの要求に応じて、以下のようなＬＤ１を経由する経路の情報をＨｅｌｌｏヘッダに含めたＨｅｌｌｏフレームを生成する。そこで、ノードｅは、グローバル宛先がＧＷのフレームをノードｆに送信することを、ノードｅの隣接ノード装置１０に通知できる。
Ｈｅｌｌｏフレームの送信元        ：ノードｅ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードｆ
【００５１】
（４）ノードｂの経路情報処理部１３ｂは、ノードｅで生成されたＨｅｌｌｏフレームを、手順（２）と同様に取得する。経路情報処理部１３ｂは、Ｈｅｌｌｏフレームの送信元についての情報をリンクテーブル２１ｂに記録する。ここでは、経路情報処理部１３ｂが図３のＮｏ．３の情報をリンクテーブル２１ｂに記録するものとする。
【００５２】
さらに、経路情報処理部１３ｂは、ノードｂから、ノードｅ、ノードｆを経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ｂは、ＧＤ＝ＧＷのＨｅｌｌｏヘッダ中のローカル宛先がノードｅであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれないと判定する。経路情報処理部１３ｂは、ノードｅを経由してＧＷにフレームを送信できると判定し、ノードｅ経由のＧＷへの経路をルーティングテーブル２２に記録する。ここでは、経路情報処理部１３ｂは、図４（ａ）のＮｏ．１−２の経路を記録するものとする。
【００５３】
（５）ノードｃは、ＬＤ１を経由する経路の情報をＨｅｌｌｏヘッダに含めたＨｅｌｌｏフレームを生成する。そこで、ノードｃは、以下の情報要素を含むＨｅｌｌｏフレームを用いて、グローバル宛先がＧＷのフレームをノードｂに送信することを、ノードｃの隣接ノード装置１０に通知できる。
Ｈｅｌｌｏフレームの送信元        ：ノードｃ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードｂ
【００５４】
（６）ノードｂの経路情報処理部１３ｂは、ノードｃで生成されたＨｅｌｌｏフレームを、手順（２）と同様に取得する。経路情報処理部１３ｂは、Ｈｅｌｌｏフレームの送信元についての情報をリンクテーブル２１ｂに記録する。ここでは、図３のＮｏ．２の情報がリンクテーブル２１ｂに記録されたものとする。
【００５５】
さらに、経路情報処理部１３ｂは、ノードｂから、ノードｃ、ノードｂの順にノード装置１０を経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ｂは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｂであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれると判定する。そこで、ループを含む経路を記憶することを避けるため、経路情報処理部１３ｂは、ノードｃから受信したＨｅｌｌｏフレームに含まれている情報を、ルーティングテーブル２２ｂに記録せずに破棄する。
【００５６】
ノードｄもノードｃと同様に、グローバル宛先をＧＷ、ＬＤ１をノードｂに設定したＨｅｌｌｏヘッダを含むＨｅｌｌｏフレームを生成して、ノードｄの隣接ノード装置１０に送信する（図７）。ノードｂは、ノードｄから受信したＨｅｌｌｏフレームも、ノードｃから受信したＨｅｌｌｏフレームと同様に処理する。従って、ノードｂが、ノードａ、ｃ〜ｅで生成されたＨｅｌｌｏフレームを用いることにより、経路情報処理部１３ｂは、図３に示すリンクテーブル２１ｂと図４（ａ）に示すルーティングテーブル２２ｂを生成することができる。
【００５７】
（７）経路情報処理部１３ｂは、ルーティングテーブル２２ｂに記録されているローカル宛先について、それぞれの経路の評価値を比較し、評価値が小さい順に優先度を高くする。なお、優先度が高いほど、ＬＤの後に続く数字が小さくなる。
【００５８】
ここでは、経路情報処理部１３ｂは、ＧＷがグローバル宛先である場合、ノードａを転送先とする経路の方が、ノードｅを転送先とする経路よりも良好であり、優先度が高いと判定したとする。従って、経路情報処理部１３ｂは、ＧＤ＝ＧＷの経路について、ノードａをＬＤ１、ノードｅをＬＤ２とする。
【００５９】
図９は、各ノード装置１０で生成される経路の例を示す。ノードａ、ｃ〜ｅ、ＧＷも、図７と図８の手順（１）〜（７）を参照しながら説明したのと同様の方法により、アドホックネットワーク中の各ノード装置１０への経路を取得する。図９の例では、ノードａ〜ｆで保持されているルーティングテーブル２２から、グローバル宛先がＧＷの経路についてのローカル宛先を抜粋して示している。
【００６０】
ここで、ノードaは、ＧＷをローカル宛先としてルーティングテーブル２２ａに記録するが、ノードｂをＧＷへの経路のローカル宛先として記録しない。これは、ノードｂがＬＤ１をノードａとしたＨｅｌｌｏフレームをブロードキャストするためである。ノードａがノードｂから通知された経路を用いると、ノードａはグローバル宛先がＧＷであるフレームを、ノードａからノードｂに送信し、さらにノードｂから受信し直してＧＷに送信することになる。そこで、ノードａは、ノードｂから通知されたＧＷまでの経路を用いてノードａからフレームを送信すると、ループが発生すると判定し、ノードｂから受信した経路の情報を破棄する。同様に、ノードｆも、ノードｆをＬＤ１に設定したＧＷ宛の経路がノードｅから通知されるため、ノードｅをＧＷ宛の経路のローカル宛先に記録しない。
【００６１】
（８）次に、ノードｂのアプリケーション処理部１４ｂは、ＧＷ宛のデータを生成したとする。アプリケーション処理部１４ｂは、生成したデータを転送処理部１６ｂに出力する。転送処理部１６ｂは、ルーティングテーブル２２ｂを参照して、以下のようなアドレスの情報を含むデータフレームを生成する。
グローバル送信元  ：ノードｂ
グローバル宛先    ：ＧＷ
ローカル宛先      ：ノードａ
ローカル送信元    ：ノードｂ
転送処理部１６ｂは、生成したデータフレームをフレーム送信部１７ｂに出力する。フレーム送信部１７ｂは、図１０に示すように、ノードａにデータフレームを送信する。
【００６２】
（９）ノードａのフレーム受信部１１ａは、ノードｂから受信したデータフレームをフレーム情報解析部１２ａに出力する。フレーム情報解析部１２ａは、アドホックヘッダのタイプを参照することにより、データフレームをアプリケーション処理部１４ａに出力する。アプリケーション処理部１４ａは、グローバル宛先がノードａではないので、転送処理部１６ａにデータフレームを出力する。転送処理部１６ａは、ルーティングテーブル２２ａを参照することにより、データフレームのアドレス情報を以下のように変更する。
グローバル送信元  ：ノードｂ
グローバル宛先    ：ＧＷ
ローカル宛先      ：ＧＷ
ローカル送信元    ：ノードａ
転送処理部１６ａは、生成したデータフレームをフレーム送信部１７ａに出力する。フレーム送信部１７ａは、図１０に示すように、ＧＷにデータフレームを送信する。
【００６３】
（１０）次に、ノードｂが手順（８）と同様にＧＷ宛のデータフレームを生成し、ノードａに送信したとする。
【００６４】
（１１）ノードｂから手順（１０）で送信されたデータフレームを受信する前に、ノードａに障害が発生したとする。
【００６５】
（１２）ノードｂのアプリケーション処理部１４ｂは、ノードａにデータフレームを送信してから一定の時間以内にデータフレームのＧＷへの送信が成功したことを確認できない場合、ノードａを経由するＧＷへの経路に障害が発生したと判定する。そこで、アプリケーション処理部１４ｂは、転送処理部１６ｂに、ＬＤ２を使用した経路でのデータフレームの再送を要求する。
【００６６】
（１３）転送処理部１６ｂは、ルーティングテーブル２２ｂを参照して、以下のようなアドレスの情報を含むデータフレームを生成する。
グローバル送信元  ：ノードｂ
グローバル宛先    ：ＧＷ
ローカル宛先      ：ノードｅ
ローカル送信元    ：ノードｂ
転送処理部１６ｂは、生成したデータフレームをフレーム送信部１７ｂに出力する。フレーム送信部１７ｂは、ノードｅにデータフレームを送信する。
【００６７】
（１４）ノードｅは、ノードｂから受信したＧＷ宛のフレームを、手順（９）のノードａと同様の処理により、ノードｆに送信する。ノードｆも、手順（９）のノードａと同様の処理により、フレームをＧＷに送信する。
【００６８】
このように、図８を参照しながら手順（１）〜（１４）で説明した処理により、アドホックネットワーク中のノード装置１０のいずれかで障害が発生しても、ループを含まない迂回ルートによってフレームがグローバル宛先に向けて送信される。このため、アドホックネットワーク中の無駄なトラフィックが削減されて、効率的に通信が行われる。図８と図１０を参照しながらノードｂで生成されたデータフレームの転送の例について説明したが、他のノード装置１０で生成されたＧＷ宛のフレームについても同様に処理される。
【００６９】
図１１は、ノード装置１０に障害が発生したときに行われる転送の例を説明する図である。例えば、図８を参照しながら説明した手順（１２）でノードａに障害が発生していることをノードｂが検出した後で、ノードｄからＧＷ宛のフレームが送信された場合について説明する。なお、図１１に示す手順（Ｄ１）〜（Ｄ４）は、手順（１２）の後に行われていれば良く、手順（１３）、（１４）と並行して行われても良い。
【００７０】
（Ｄ１）ノードｄのアプリケーション処理部１４ｄがＧＷ宛のデータを転送処理部１６ｄに出力すると、転送処理部１６ｄはルーティングテーブル２２ｄを参照して、グローバル宛先をＧＷ、ローカル宛先をノードｂに設定したフレームを生成する。
【００７１】
（Ｄ２）ノードｂのアプリケーション処理部１４ｂは、フレーム受信部１１ｂ、フレーム情報解析部１２ｂを介して、ノードｄで生成されたフレームを取得する。アプリケーション処理部１４ｂは、ノードｂ宛のフレームを受信しなかったと判定すると、フレームを転送処理部１６ｂに出力する。ここで、アプリケーション処理部１４ｂは、ノードａの障害を検出していることも転送処理部１６ｂに通知する。すると、転送処理部１６ｂは、ルーティングテーブル２２ｂではグローバル宛先がＧＷの場合はＬＤ１がノードａであるが、ノードａにフレームを転送できないと判定する。そこで、転送処理部１６ｂは、ＬＤ２であるノードｅをローカル宛先に指定することにより、フレームに以下のアドレス情報を付加する。
グローバル送信元  ：ノードｄ
グローバル宛先    ：ＧＷ
ローカル宛先      ：ノードｅ
ローカル送信元    ：ノードｂ
ノードｂは、ノードｄから受信したＧＷ宛のフレームをノードｅに転送する。
【００７２】
（Ｄ３）ノードｅのアプリケーション処理部１４ｅは、フレーム受信部１１ｅとフレーム情報解析部１２ｅを介して、フレームを取得する。フレームのグローバル宛先がＧＷなので、アプリケーション処理部１４ｅは、転送処理部１６ｅにフレームを出力する。転送処理部１６ｅは、ルーティングテーブル２２ｅを参照して、フレームのローカル宛先をノードｆに決定する。フレームは、ノードｆに転送される。
【００７３】
（Ｄ４）ノードｆは、ノードｅと同様の処理により、ノードｅから受信したフレームをＧＷに送信する。
図１２は、転送経路が変更される場合の処理の例を説明するシーケンス図である。図１２を参照しながら、ノードａでの障害の発生と、ノードａの復旧に伴って行われる経路の変更の例を説明する。図１２の最初の時点でもノードｅは、グローバル宛先がＧＷの場合のＬＤ１をノードｆ、ＬＤ２をノードｂに設定しているとする。ノードｅが保持するルーティングテーブル２２ｅの例を、図４（ｂ）に示す。また、ノードｃは、グローバル宛先がＧＷのときのＬＤ１がノードｂであるものとする。
【００７４】
（２１）図１１に示すようにノードａに障害が発生すると、ノードｂからノードａへのフレームの再送回数が大きくなる。さらに、ノードｂはノードａからＨｅｌｌｏフレームを受信することができない。再送回数の増大やＨｅｌｌｏフレームを受信できないことなどに基づいて、経路情報処理部１３ｂは、リンクテーブル２１ｂを更新する。また、経路情報処理部１３ｂは、ノードｂとノードａの間のリンクの状況の悪化に伴って、ノードａを経由する経路についての評価値を更新する。これらの処理により、ノードｂからノードａを経由してＧＷに至る経路の評価値が示す状況の方が、ノードｂからノードｅを経由してＧＷに至る経路の評価値が示す状況よりも悪くなったとする。すると、経路情報処理部１３ｂは、グローバル宛先がＧＷの経路について、ＬＤ１をノードｅ、ＬＤ２をノードａに変更する。
【００７５】
ノードａをＬＤ２にした後もノードａが復旧しないと、ノードｂとノードａの間のリンクの状況がさらに悪化する。経路情報処理部１３ｂは、ノードｂがノードａからＨｅｌｌｏフレームを受信できない期間が一定以上になると、リンクテーブル２１ｂからノードａのエントリを削除する。さらに、経路情報処理部１３ｂは、ルーティングテーブル２２ｂからも、ノードａまでの経路の削除や、ノードａをローカル宛先に設定した経路の削除を行う。このため、図１２に示すように、ノードｂのＧＤ＝ＧＷの経路ではＬＤ１がノードｅに設定され、ＬＤ２の設定が消去される。
【００７６】
（２２）ノードｂのアプリケーション処理部１４ｂは、Ｈｅｌｌｏフレームを生成する時刻になると、Ｈｅｌｌｏフレーム生成部１５ｂにＨｅｌｌｏフレームの生成を要求する。Ｈｅｌｌｏフレーム生成部１５ｂは、以下の情報要素を含むＨｅｌｌｏフレームを用いて、グローバル宛先がＧＷのフレームをノードｅに送信することを、ノードｂの隣接ノード装置１０に通知できる。
Ｈｅｌｌｏフレームの送信元        ：ノードｂ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードｅ
【００７７】
（２３）ノードｅの経路情報処理部１３ｅは、フレーム受信部１１ｅとフレーム情報解析部１２ｅを介して、ノードｂで生成されたＨｅｌｌｏフレームを取得する。経路情報処理部１３ｅは、ノードｂから受信したＨｅｌｌｏフレームに含まれる経路にループが含まれているかを判定する。例えば、経路情報処理部１３ｅは、ノードｅ、ノードｂ、ノードｅの順にノード装置１０を経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ｅは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｅであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれると判定する。
【００７８】
そこで、ループを含む経路を記憶することを避けるため、経路情報処理部１３ｅは、処理対象のＨｅｌｌｏヘッダで表される経路の情報が、ルーティングテーブル２２ｅに含まれているかを判定する。ルーティングテーブル２２ｅには、図４（ｂ）に示すように、ＧＤ＝ＧＷ、ＬＤ２＝ノードｂの経路がＮｏ．１−２に記録されている。そこで、経路情報処理部１３ｅは、図４（ｃ）に示すように、ＧＤ＝ＧＷでＬＤ２＝ノードｂの経路のエントリを、ルーティングテーブル２２ｅから削除する。すなわち、ノードｅは、ノードｂがＧＷ宛のフレームの送信に優先的に使用する経路を変更したことにより、ルーティングテーブル２２ｅを変更する。
【００７９】
（２４）その後、ノードａが障害から復帰したとする。
【００８０】
（２５）ノードｂは、手順（２２）と同様に、ＧＤ＝ＧＷ、ＬＤ１＝ノードｅの情報を含むＨｅｌｌｏフレームを、ノードｂの隣接ノード装置１０にブロードキャストする。
【００８１】
（２６）ノードａの経路情報処理部１３ａは、ノードｂで生成されたＨｅｌｌｏフレームを、フレーム受信部１１ａとフレーム情報解析部１２ａを介して取得する。経路情報処理部１３ａは、ノードａから、ノードｂ、ノードｅを経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ａは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｅであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれないと判定する。経路情報処理部１３ａは、ノードｂを経由してＧＷにフレームを送信できると判定し、ノードｂ経由のＧＷへの経路をルーティングテーブル２２に記録する。
【００８２】
さらに、経路情報処理部１３ａは、ＧＷからのＨｅｌｌｏフレームにより、ノードａがＧＷに隣接していることも特定する。経路情報処理部１３ａは、ＧＤ＝ＧＷのフレームをＧＷに送信する場合の経路品質と、ノードｂに転送する場合の経路の品質を比較する。ここでは、ＧＤ＝ＧＷのフレームをＧＷに送信する場合の経路の品質の方が良かったとする。すると、経路情報処理部１３ａは、ＧＷ宛のフレームの送信先をＬＤ１＝ＧＷ、ＬＤ２＝ノードｂに設定する。
【００８３】
（２７）ノードａのアプリケーション処理部１４ａは、Ｈｅｌｌｏフレームを生成する時刻になると、Ｈｅｌｌｏフレーム生成部１５ａにＨｅｌｌｏフレームの生成を要求する。Ｈｅｌｌｏフレーム生成部１５ａは、以下の情報要素を含むＨｅｌｌｏフレームを用いて、グローバル宛先がＧＷのフレームをＧＷに送信することを、ノードａの隣接ノード装置１０に通知できる。
Ｈｅｌｌｏフレームの送信元        ：ノードａ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ＧＷ
【００８４】
（２８）ノードｂの経路情報処理部１３ｂは、ノードａから送信されたＨｅｌｌｏフレームを用いて、ノードａの情報をリンクテーブル２１ｂに登録する。さらに、経路情報処理部１３ｂは、ノードｂからノードａとＧＷを経由するＧＷまでの経路にループが含まれるかを判定する。このとき、経路情報処理部１３ｂは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｂではないので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれていないと判定する。そこで、経路情報処理部１３ｂは、ノードａを経由してＧＷにフレームを送信できると判定し、ノードａ経由のＧＷへの経路をルーティングテーブル２２ｂに記録する。このとき、既にノードｅをＬＤ１としてＧＷに至る経路がルーティングテーブル２２ｂに登録されているので、ノードａはＧＷに至る経路のＬＤ２として登録される。
【００８５】
（２９）ノードａは、手順（２７）と同様にＨｅｌｌｏフレームをブロードキャストする。
【００８６】
（３０）ノードｂの経路情報処理部１３ｂは、ノードａから送信されたＨｅｌｌｏフレームを用いて、ノードｂとノードａの間の復路リンク重みやＨｅｌｌｏフレームの受信に関する観測値を更新する。また、経路情報処理部１３ｂは、リンクの状況の変化に応じて、ルーティングテーブル２２ｂの経路の評価値も更新する。ここで、ノードｂとノードａの間で繰り返しＨｅｌｌｏフレームを送受信できたことにより、ノードｅを経由してＧＷに至る経路の品質情報よりも、ノードａを経由してＧＷに至る経路の品質情報のほうが良くなったとする。すると、経路情報処理部１３ｂは、ＧＤ＝ＧＷのフレームについての設定を、ＬＤ１をノードａ、ＬＤ２をノードｅとする。
【００８７】
（３１）ノードｂのＨｅｌｌｏフレーム生成部１５ｂは、アプリケーション処理部１４ｂからの要求により、以下の情報要素を含むＨｅｌｌｏフレームを生成する。
Ｈｅｌｌｏフレームの送信元        ：ノードｂ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードａ
すなわち、Ｈｅｌｌｏフレーム生成部１５ｂは、グローバル宛先がＧＷのフレームをノードａに送信することをノードｂの隣接ノード装置１０に通知できるＨｅｌｌｏフレームを生成する。
【００８８】
（３２）ノードａの経路情報処理部１３ａは、ノードｂで生成されたＨｅｌｌｏフレームを取得すると、ノードａから、ノードｂ、ノードａの順にノード装置１０を経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ａは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードａであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれると判定する。
【００８９】
そこで、ループを含む経路を記憶することを防止するため、経路情報処理部１３ａは、ＧＤ＝ＧＷでＬＤ２＝ノードｂの経路のエントリを、ルーティングテーブル２２ａから削除する。
【００９０】
（３３）ノードｅの経路情報処理部１３ｅは、ノードｂで生成されたＨｅｌｌｏフレームを取得すると、ノードｅから、ノードｂ、ノードａの順にノード装置１０を経由してＧＷに至る経路にループが含まれているかを判定する。ここで、経路情報処理部１３ｅは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードａであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれていないと判定する。そこで、経路情報処理部１３ｅは、ノードｂをＧＷ宛の経路のＬＤ２に登録する。
【００９１】
手順（２１）〜（３３）で説明したように、アドホックネットワーク中のノード装置１０は、隣接するノード装置１０がグローバル宛先へのフレームの転送経路を変更することにより、ルーティングテーブル２２を更新できる。このため、隣接ノード装置１０での経路の変更に伴って、ノード装置１０がフレームの転送経路を動的に変更することができ、フレームがループを含む経路で転送されることを防止できる。また、障害が起こったノード装置１０が復帰すると、経路の状況に応じて、復帰したノード装置１０を経由する経路を用いたフレームの転送が再開される。このため、アドホックネットワーク中で効率的にフレームが転送される。
【００９２】
図１３は、フレームの転送ができない場合の処理の例を示す。図１３に示すアドホックネットワークにおいて、ノードａとノードｅの両方に同時期に障害が発生したとする。すると、ノードｂは、図１２の手順（２１）で説明した処理をノードａとノードｅの両方に対して行うことにより、ルーティングテーブル２２ｂからＧＷに至る経路を削除する。その後、ノードｄがＧＷをグローバル宛先としたフレームをノードｂに送信したとする。すると、アプリケーション処理部１４ｂは、転送処理部１６ｂにノードｄから受信したフレームの転送を要求する。しかし、ＧＷを宛先とした経路がルーティングテーブル２２ｂから削除されているので、転送処理部１６ｂは、フレームを転送できないと判定する。そこで、転送処理部１６ｂは、フレームをローカル送信元に転送する（バックトラック）。ここでは、ノードｂがノードｄから受信したフレームが、ノードｂからノードｄに送信される。ノードｄは、バックトラック処理が行われたことを検出すると、宛先へのフレームの送信ができないと判定して、処理を終了する。なお、バックトラック処理が行われたことを検出するために、各ノード装置１０の転送処理部１６では、フレームごとにフレームを識別する識別番号とフレームの転送先を対応付けた情報を保持しているものとする。
【００９３】
図１４は、ノード装置１０で行われる動作の例を説明するフローチャートである。フレーム情報解析部１２は、フレーム受信部１１を介して受信したフレームのタイプを判定することにより、受信フレームを振り分ける（ステップＳ１）。フレーム情報解析部１２は、データフレームなど、Ｈｅｌｌｏフレーム以外のフレームをアプリケーション処理部１４に出力する。アプリケーション処理部１４は、入力されたフレームのグローバル宛先が自ノードであるかを判定する（ステップＳ２）。アプリケーション処理部１４は、自ノード宛のフレームを処理する（ステップＳ２でＹｅｓ、ステップＳ３）。一方、グローバル宛先が自ノードではない場合、アプリケーション処理部１４は、フレームを転送処理部１６に出力する。転送処理部１６は、フレームのグローバル宛先までの経路がルーティングテーブル２２に登録されているかを判定する（ステップＳ２でＮｏ、ステップＳ４）。フレームのグローバル宛先までの経路がルーティングテーブル２２に登録されていない場合、転送処理部１６は、フレームのローカル送信元にフレームを送り返す（ステップＳ４でＮｏ、ステップＳ５）。フレームのグローバル宛先までの経路がルーティングテーブル２２に登録されている場合、転送処理部１６は、ローカル宛先を決定し、フレーム送信部１７を介してフレームを転送する（ステップＳ４でＹｅｓ、ステップＳ６）。
【００９４】
一方、フレーム情報解析部１２は、Ｈｅｌｌｏフレームを経路情報処理部１３に出力する（ステップＳ１でＨｅｌｌｏ受信）。経路情報処理部１３は、Ｈｅｌｌｏフレームの受信間隔や受信強度などを用いて、リンク品質を計算する（ステップＳ７）。経路情報処理部１３は、リンクテーブル２１を更新する（ステップＳ８）。さらに、経路情報処理部１３は、ルーティングテーブル２２を更新する（ステップＳ９）。
【００９５】
図１５はルーティングテーブル２２の更新処理の例を説明するフローチャートである。経路情報処理部１３は、変数ｎを１に設定する（ステップＳ２１）。経路情報処理部１３は、ｎ番目のＨｅｌｌｏヘッダをＨｅｌｌｏフレームから抽出する（ステップＳ２２）。経路情報処理部１３は、Ｈｅｌｌｏヘッダ中の経路情報のローカル宛先が自ノードであるかを判定する（ステップＳ２３）。
【００９６】
Ｈｅｌｌｏヘッダ中の経路情報のローカル宛先が自ノードではない場合、経路情報処理部１３は、処理対象のＨｅｌｌｏヘッダで通知された経路がルーティングテーブル２２にすでに登録されているかを判定する（ステップＳ２３でＮｏ、ステップＳ２４）。処理対象のＨｅｌｌｏヘッダで通知された経路がルーティングテーブル２２にすでに登録されている場合、経路情報処理部１３は、Ｈｅｌｌｏヘッダで通知された経路の品質情報を更新する（ステップＳ２５）。処理対象のＨｅｌｌｏヘッダで通知された経路が登録されていない場合、経路情報処理部１３は、ルーティングテーブル２２に新たな経路の情報を追加できるかを判定する（ステップＳ２６）。ルーティングテーブル２２に新たな経路の情報を追加できる場合、経路情報処理部１３は、ルーティングテーブル２２に処理対象のＨｅｌｌｏヘッダで通知された経路の情報を記録する（ステップＳ２６でＹｅｓ、ステップＳ２８）。すなわち、経路情報処理部１３は、Ｈｅｌｌｏヘッダで通知されたグローバルアドレスをルーティングテーブル２２のＧＤとし、対応するローカル送信先アドレス（ＬＤ）をＨｅｌｌｏフレームの送信元とする。さらに、経路情報処理部１３は、経路の品質情報を登録する。
【００９７】
一方、１つのグローバル宛先に対応付けて登録できるローカル宛先の数の上限まで経路が登録されている場合、ステップＳ２６でＮｏと判定される。すると、経路情報処理部１３は、処理対象のＨｅｌｌｏヘッダで通知された経路の通信条件が、ルーティングテーブル２２に登録されている経路の通信条件よりも良好であるかを判定する（ステップＳ２７）。処理対象のＨｅｌｌｏヘッダで通知された経路の通信条件が、ルーティングテーブル２２に登録されている経路の通信条件よりも良好である場合、通知された経路についてステップＳ２８の処理が行われる（ステップＳ２７でＹｅｓ、ステップＳ２８）。なお、この場合は、ルーティングテーブル２２に記録されている経路のうち、最も条件の悪い経路が削除される。ステップＳ２５またはステップＳ２８の処理によりルーティングテーブル２２の情報を変更すると、経路情報処理部１３は、経路の優先順位を決定する（ステップＳ２９）。一方、処理対象のＨｅｌｌｏヘッダで通知された経路の通信条件が、ルーティングテーブル２２中の経路の通信条件よりも悪い場合、経路情報処理部１３は、Ｈｅｌｌｏヘッダで通知された経路をルーティングテーブル２２に登録しない（ステップＳ２７でＮｏ）。
【００９８】
Ｈｅｌｌｏヘッダ中の経路情報のローカル宛先が自ノードである場合、経路情報処理部１３は、処理対象のＨｅｌｌｏヘッダで通知された経路がルーティングテーブル２２にすでに登録されているかを判定する（ステップＳ２３でＹｅｓ、ステップＳ３０）。ここで、経路情報処理部１３は、ＨｅｌｌｏヘッダのＧＤであるノード装置１０への転送先として、ルーティングテーブル２２において、Ｈｅｌｌｏフレームの送信元が含まれているかを判定する。ＨｅｌｌｏヘッダのＧＤへの転送先にＨｅｌｌｏフレームの送信元が含まれている場合、経路情報処理部１３は、その経路をルーティングテーブル２２から削除する（ステップＳ３０でＹｅｓ、ステップＳ３１）。
【００９９】
ステップＳ２１〜Ｓ３１の処理が終わると、経路情報処理部１３は、Ｈｅｌｌｏフレームに含まれている全てのＨｅｌｌｏヘッダを処理したかを判定する（ステップＳ３２）。全てのＨｅｌｌｏヘッダを処理していない場合、経路情報処理部１３は、ｎの値を１つインクリメントして、ステップＳ２２以降の処理を繰り返す（ステップＳ３２でＮｏ、ステップＳ３３）。一方、全てのＨｅｌｌｏヘッダの処理が終わると、経路情報処理部１３は処理を終了する（ステップＳ３２でＹｅｓ）。
【０１００】
第１の実施形態によると、図８を参照しながら説明した処理により、アドホックネットワーク中のノード装置１０のいずれかで障害が発生しても、ループを含まない迂回ルートによってフレームがグローバル宛先に向けて送信される。さらに、図１２を参照しながら説明したように、ノード装置１０は、隣接するノード装置１０での転送経路の変更に伴って、ルーティングテーブル２２を更新する。このため、隣接ノード装置１０での経路の変更により、フレームの転送経路にループが発生することを防ぐことができる。また、障害が起こったノード装置１０が復帰すると、経路の状況に応じて、復帰したノード装置１０を経由する経路を用いたフレームの転送が再開される。このため、アドホックネットワーク中で効率的にフレームが転送される。
【０１０１】
第１の実施形態では、各ノード装置１０は、自ノードにフレームを転送しようとしているノード装置１０を、フレームの送信先としないようにルーティングテーブル２２を生成しているといえる。このため、ノード装置１０が送信したフレームは、再度、同じノード装置１０を経由せずに最終宛先に送信される。従って、第１の実施形態により、無駄なトラフィックを削減して無線リソースを有効に活用できる。さらに、アドホックネットワーク中の輻輳を防止することができるので、システム全体の安定性も高められる。
【０１０２】
＜第２の実施形態＞
図１６は、第２の実施形態で行われる処理の例を説明するシーケンス図である。第２の実施形態では、経路の状況が悪化したことを検出したノード装置１０の隣接ノード装置１０が、経路の状況の悪化を検出したノード装置１０を避けてフレームを転送する場合について説明する。
【０１０３】
第２の実施形態でもＨｅｌｌｏフレームの送受信やルーティングテーブル２２の生成は、第１の実施形態と同様に行われる。図１６の処理が開始される時点では、ノードｂにおいて、グローバル宛先がＧＷの場合のＬＤ１はノードａ、ＬＤ２はノードｅであるとする。ノードｅでは、グローバル宛先がＧＷの場合のＬＤ１はノードｆ、ＬＤ２はノードｂであるとする。ノードａでは、グローバル宛先がＧＷのときのＬＤ１がＧＷであり、ノードｃでは、グローバル宛先がＧＷのときのＬＤ１がノードｂであるものとする。
【０１０４】
（４１）ノードａのアプリケーション処理部１４ａは、ＧＷとの間のリンクが切れたことを検出する。経路情報処理部１３ａは、リンクの切断に伴って、リンクテーブル２１ａやルーティングテーブル２２ａを更新する。
【０１０５】
（４２）ノードａのＨｅｌｌｏフレーム生成部１５ａは、アプリケーション処理部１４ａからの要求により、以下の情報要素を含むＨｅｌｌｏフレームを生成する。
Ｈｅｌｌｏフレームの送信元        ：ノードａ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ＧＷ
Ｈｅｌｌｏヘッダ中の品質情報      ：品質劣化
すなわち、Ｈｅｌｌｏフレーム生成部１５ａは、グローバル宛先がＧＷのフレームをＧＷに送信することと、ノードａを経由するＧＷ宛の経路の品質が劣化していることを、ノードａの隣接ノード装置１０に通知できるＨｅｌｌｏフレームを生成する。
【０１０６】
ノードｂの経路情報処理部１３ｂは、ノードａから受信したＨｅｌｌｏフレームに基づいて、ノードａを経由したＧＷまでの経路の品質情報を更新する。
その後も、ノードａは、ＧＷとの間のリンクが回復するまで、Ｈｅｌｌｏフレームを用いて、ノードａを経由してＧＷに至る経路の品質が劣化していることを、ノードａの隣接ノード装置１０に通知し続ける。ノードｂでは、ルーティングテーブル２２ｂの品質情報の更新が続けられる。
【０１０７】
（４３）ノードｂにおいて、経路情報処理部１３ｂがルーティングテーブル２２ｂの品質情報の更新を続けたことにより、ノードａを経由してＧＷに至る経路の品質よりも、ノードｅを経由してＧＷに至る経路の品質情報の方が良くなったとする。すると、経路情報処理部１３ｂは、ＧＤ＝ＧＷの経路について、ＬＤ１をノードｅ、ＬＤ２をノードａに変更する。
【０１０８】
（４４）ノードｂのＨｅｌｌｏフレーム生成部１５ｂは、アプリケーション処理部１４ｂの要求に応じて、以下の情報要素を含むＨｅｌｌｏフレームを生成する
Ｈｅｌｌｏフレームの送信元        ：ノードｂ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードｅ
ノードｂは、Ｈｅｌｌｏフレームを用いて、グローバル宛先がＧＷのフレームをノードｅに送信することを、ノードｂの隣接ノード装置１０に通知する。
【０１０９】
（４５）ノードｅの経路情報処理部１３ｅは、ノードｂで生成されたＨｅｌｌｏフレームを取得する。経路情報処理部１３ｅは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｅであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれると判定する。
【０１１０】
そこで、ループを含む経路を記憶することを避けるため、経路情報処理部１３ｅは、処理対象のＨｅｌｌｏヘッダで通知された経路を使用する経路の情報をルーティングテーブル２２ｅから削除する。このため、ノードｅは、ＧＷ宛のフレームのＬＤ１の情報はノードｆのまま変更しないが、ＬＤ２の情報を削除する。
【０１１１】
（４６）ノードａの経路情報処理部１３ａは、ノードｂで生成されたＨｅｌｌｏフレームを取得する。経路情報処理部１３ａは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｅであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれないと判定する。経路情報処理部１３ａは、ノードｂを経由してＧＷにフレームを送信できると判定し、ノードｅ経由のＧＷへの経路をルーティングテーブル２２に記録する。このため、ＧＷ宛のフレームの送信先としてＬＤ１＝ＧＷ、ＬＤ２＝ノードｂがルーティングテーブル２２ａに記録される。
【０１１２】
（４７）ノードｂは、手順（４４）で述べたようにＨｅｌｌｏフレームを送信し続ける。ノードｂからＨｅｌｌｏフレームを受信するたびに、ノードａは、ノードｂを経由したＧＷまでの経路の品質情報を更新する。
【０１１３】
（４８）ノードａにおいて、経路情報処理部１３ａがルーティングテーブル２２ａの品質情報の更新を続けたことにより、ノードａからＧＷに至る経路の品質よりも、ノードｂを経由してＧＷに至る経路の品質情報の方が良くなったとする。すると、経路情報処理部１３ａは、ＬＤ１をノードｂ、ＬＤ２をＧＷに変更する。
【０１１４】
（４９）ノードａのＨｅｌｌｏフレーム生成部１５ａは、アプリケーション処理部１４ａの要求に応じて、以下の情報要素を含むＨｅｌｌｏフレームを生成する
Ｈｅｌｌｏフレームの送信元        ：ノードａ
Ｈｅｌｌｏヘッダ中のグローバル宛先：ＧＷ
Ｈｅｌｌｏヘッダ中のＬＤ１        ：ノードｂ
ノードａは、Ｈｅｌｌｏフレームを用いて、グローバル宛先がＧＷのフレームをノードｂに送信することを、ノードａの隣接ノード装置１０に通知する。
【０１１５】
（５０）ノードｂの経路情報処理部１３ｂは、ノードａで生成されたＨｅｌｌｏフレームを取得する。経路情報処理部１３ｂは、Ｈｅｌｌｏヘッダ中のローカル宛先がノードｂであるので、処理対象のＨｅｌｌｏヘッダによって通知された経路にはループが含まれると判定する。
【０１１６】
そこで、ループを含む経路を記憶することを避けるため、経路情報処理部１３ｂは、処理対象のＨｅｌｌｏヘッダで通知された経路を含む経路の情報をルーティングテーブル２２ｂから削除する。このため、ノードｂでは、ＧＷ宛のフレームのＬＤ１はノードｅのまま変更しないが、ＬＤ２の情報を削除する。
【０１１７】
手順（５０）の処理が終わった段階で、ノードａにおいて、グローバル宛先をＧＷに指定したフレームが生成されたとする。すると、ノードａで生成されたフレームは、ノードａからノードｂ、ノードｅ、ノードｆを経由して、ＧＷに送信される。
【０１１８】
このように、第２の実施形態では、リンクの切断などの障害を検出したノード装置１０は、そのノード装置１０を経由する経路が選択されにくくなるように、経路品質が劣悪であることをＨｅｌｌｏフレームで隣接ノード装置１０に通知する。このため、第２の実施形態では、品質が悪化したリンクを含む経路が選択されにくくなる。さらに、第１の実施形態と同様に、ルーティングテーブル２２に登録されている経路を選択すれば、送信したフレームを転送先のノード装置１０から再度受信することなく、フレームをグローバル宛先に転送できる。従って、効率的に通信が行われる。
【０１１９】
第２の実施形態によると、無線環境の変動により一時的にリンクが切断された場合でも、最終的な宛先までのフレームの到達可能性を高めることができる。なお、第２の実施形態においても、切断されたリンクが復旧すると、品質情報が良好であることが記録されているＨｅｌｌｏフレームを複数回にわたって送受信することにより、リンクの切断前の通信経路が復旧されうる。
【０１２０】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１２１】
第１の実施形態と第２の実施形態を組み合わせることができる。
リンクテーブル２１やルーティングテーブル２２に含まれる情報要素は、実装に応じて変更される場合がある。同様に、フレームのフォーマットも実装に応じて変更されることがあるものとする。
【０１２２】
上記の例では、アドホックネットワークと他のネットワーク中の装置の間の通信を中継するゲートウェイとして動作するノード装置１０がグローバル宛先であるフレームを例として動作を説明した。しかし、グローバル宛先はアドホックネットワーク中の任意のノード装置１０とすることができる。いずれのノード装置１０がグローバル宛先である場合も、前述の方法により、ループを含む経路はルーティングテーブル２２に登録されない。
【符号の説明】
【０１２３】
５  経路情報フレーム
１０  ノード装置
１１  フレーム受信部
１２  フレーム情報解析部
１３  経路情報処理部
１４  アプリケーション処理部
１５  Ｈｅｌｌｏフレーム生成部
１６  転送処理部
１７  フレーム送信部
２０  記憶部
２１  リンクテーブル
２２  ルーティングテーブル
３１  ネットワーク
３２  サーバ
１００  プロセッサ
１０１  バス
１０２  ＰＨＹチップ
１０４  タイマＩＣ
１０６  ＤＲＡＭ
１０７  フラッシュメモリ
１０８  無線モジュール
【図１】
2014099771.tif 000003
【図２】
2014099771.tif 000004
【図３】
2014099771.tif 000005
【図４】
2014099771.tif 000006
【図５】
2014099771.tif 000007
【図６】
2014099771.tif 000008
【図８】
2014099771.tif 000009
【図１２】
2014099771.tif 000010
【図１４】
2014099771.tif 000011
【図１５】
2014099771.tif 000012
【図１６】
2014099771.tif 000013
【図７】
2014099771.tif 000014
【図９】
2014099771.tif 000015
【図１０】
2014099771.tif 000016
【図１１】
2014099771.tif 000017
【図１３】
2014099771.tif 000018