(57)【特許請求の範囲】
【請求項１】
複数のノード装置を含むアドホックネットワークにおけるノード装置であって、
自ノード装置に隣接する第１のノード装置から転送された、第２のノード装置を送信元とするデータを受信する受信手段と、
前記第２のノード装置を最終宛先に設定した送信データを作成する送信データ作成手段と、
前記送信データを、前記第１のノード装置以外の自ノード装置に隣接する隣接ノード装置へ送信する送信手段と、
前記第１のノード装置以外の自ノードに隣接する全ての隣接ノード装置へ送信した前記送信データを再び自ノード装置で受信したか、または、前記隣接ノードへの送信に失敗したときに、自ノード装置と前記第２のノード装置との間に、前記第１のノード装置以外の隣接ノード装置を経由してデータ送受信する迂回経路が存在しないと判定する判定手段、
を備えることを特徴とするノード装置。
【請求項２】
データの最終宛先に対応付けて、自ノード装置に隣接する隣接ノード装置毎に、自ノード装置から該最終宛先へのデータ送信可能性を表す送信可能性情報を記憶する第１の記憶手段を更に備え、
前記判定手段は、前記第２のノード装置を前記データ最終宛先として対応付けられた前記送信可能性情報を参照して、前記第１のノード装置以外の全ての隣接ノード装置の送信可能性情報が送信不能であるか否かを判定することで、自ノード装置と前記第２のノード装置との間に、前記迂回経路が存在しないと判定する
ことを特徴とする請求項１記載のノード装置。
【請求項３】
前記送信手段は、前記第２のノード装置を前記最終宛先とする前記隣接ノード装置毎の前記送信可能性情報に基づいて、前記第１のノード装置以外で、該送信可能性情報が送信可能を示す隣接ノード装置を選択し、該隣接ノード装置へ前記送信データを送信する
ことを特徴とする請求項２に記載のノード装置。
【請求項４】
前記送信データを識別するデータ識別情報と、前記送信データの送信先である隣接ノード装置を識別する送信先隣接ノード識別情報とを対応付けて記憶する第２の記憶手段と、
前記送信手段により前記第１のノード装置以外の隣接ノード装置へ送信した前記送信データを自ノード装置が受信したとき、前記第２の記憶手段を参照し、該受信した送信データのデータ識別情報に対応づけられた隣接ノード識別情報を特定し、前記第１の記憶手段において前記第２のノード装置が前記最終宛先である前記送信可能性情報のうち、該特定した隣接ノード識別情報の前記送信可能性を送信不能に更新する更新手段を更に備える
ことを特徴とする請求項２に記載のノード装置。
【請求項５】
前記データ作成手段は、前記受信手段が受信した受信データに設定された最終宛先が自ノード装置である場合に、前記送信データを作成する
ことを特徴とする請求項１に記載のノード装置。
【請求項６】
前記判定手段の前記迂回経路が存在しないとの判定に基づき、該迂回経路が存在しないことを示す通知データを前記第２のノード装置を最終宛先に設定して、前記第１のノード装置に送信する通知手段
をさらに備えることを特徴とする請求項１に記載のノード装置。
【請求項７】
前記受信手段が、受信したデータが、前記第２のノード装置からの自ノードを最終宛先として設定されており、かつ、該第２のノード装置が前記送信データを受信した旨を示す受信応答データであることに基づいて、前記送信手段による前記送信データの送信を終了する
ことを特徴とする請求項１に記載のノード装置。
【請求項８】
複数のノード装置を含むアドホックネットワークにおけるノード装置であって、
特定の他のノード装置を最終宛先に設定して、該他のノード装置から自ノード装置に対して両ノード間の通信経路を特定するための調査データを送信するように要求する調査要求データを作成して送信する要求送信手段と、
前記自ノード装置が最終宛先として設定され、前記他のノード装置が送信元として設定された前記調査データを受信したことに基づき、自ノード装置と該他のノード装置との間に、他の特定のノード装置に隣接する少なくとも２以上の隣接ノードのそれぞれから経由してデータを送受信できる迂回経路が存在すると判定する判定手段、
を備えたことを特徴とするノード装置。
【請求項９】
前記調査データを受信したときに、前記他のノード装置を最終宛先として設定した、該調査データの受信を示す応答データを送信する応答手段、
をさらに備えることを特徴とする請求項８に記載のノード装置。
【請求項１０】
複数のノード装置を含むアドホックネットワークにおけるノード装置により使用される迂回経路調査方法であって、
自ノード装置に隣接する第１のノード装置から転送された、第２のノード装置を送信元とするデータを受信し、
前記第２のノード装置を最終宛先に設定した送信データを作成し、
前記送信データを、前記第１のノード装置以外の自ノード装置に隣接する隣接ノード装置へ送信し、
前記第１のノード装置以外の自ノードに隣接する全ての隣接ノード装置へ送信した前記送信データを再び自ノード装置で受信したか、または、前記隣接ノードへの送信に失敗したときに、自ノード装置と前記第２のノード装置との間に、前記第１のノード装置以外の隣接ノード装置を経由してデータ送受信する迂回経路が存在しないと判定する、
ことを特徴とする迂回経路調査方法。
【請求項１１】
データの最終宛先に対応付けて、自ノード装置に隣接する隣接ノード装置毎に、自ノード装置から該最終宛先へのデータ送信可能性を表す送信可能性情報を第１の記憶手段に記憶し、
前記第２のノード装置を前記データ最終宛先として対応付けられた前記送信可能性情報を参照して、前記第１のノード装置以外の全ての隣接ノード装置の送信可能性情報が送信不能であるか否かを判定することで、自ノード装置と前記第２のノード装置との間に、前記迂回経路が存在しないと判定する
ことを特徴とする請求項１０記載の迂回経路調査方法。
【請求項１２】
前記第２のノード装置を前記最終宛先とする前記隣接ノード装置毎の前記送信可能性情報に基づいて、前記第１のノード装置以外で、前記送信可能性情報が送信可能を示す隣接ノード装置を選択し、該隣接ノード装置へ前記送信データを送信する
ことを特徴とする請求項１１に記載の迂回経路調査方法。
【請求項１３】
前記送信データを識別するデータ識別情報と、前記送信データの送信先である隣接ノード装置を識別する送信先隣接ノード識別情報とを対応付けて第２の記憶手段に記憶し、
前記第１のノード装置以外の隣接ノード装置へ送信した前記送信データを自ノード装置が受信したとき、前記第２の記憶手段を参照し、該受信した送信データのデータ識別情報に対応づけられた隣接ノード識別情報を特定し、前記第１の記憶手段において前記第２のノード装置が前記最終宛先である前記送信可能性情報のうち、該特定した隣接ノード識別情報の前記送信可能性を送信不能に更新する
ことを特徴とする請求項１１に記載の迂回経路調査方法。
【請求項１４】
前記受信データに設定された最終宛先が自ノード装置である場合に、前記送信データを作成する
ことを特徴とする請求項１０に記載の迂回経路調査方法。
【請求項１５】
前記迂回経路が存在しないとの判定に基づき、該迂回経路が存在しないことを示す通知データを前記第２のノード装置を最終宛先に設定して、前記第１のノード装置に送信する
ことを特徴とする請求項１０に記載の迂回経路調査方法。
【請求項１６】
受信したデータが、前記第２のノード装置からの自ノードを最終宛先として設定されており、かつ、該第２のノード装置が前記送信データを受信した旨を示す受信応答データであることに基づいて、前記送信データの送信を終了する
ことを特徴とする請求項１０に記載の迂回経路調査方法。
【請求項１７】
複数のノード装置を含むアドホックネットワークにおけるノード装置により使用される迂回経路調査方法であって、
特定の他のノード装置を最終宛先に設定して、該他のノード装置から自ノード装置に対して両ノード間の通信経路を特定するための調査データを送信するように要求する調査要求データを作成して送信し、
前記自ノード装置が最終宛先として設定され、前記他のノード装置が送信元として設定された前記調査データを受信したことに基づき、自ノード装置と該他のノード装置との間に、他の特定のノード装置に隣接する少なくとも２以上の隣接ノードのそれぞれから経由してデータを送受信できる迂回経路が存在すると判定する、
ことを特徴とする迂回経路調査方法。
【請求項１８】
前記調査データを受信したときに、前記他のノード装置を最終宛先として設定した、該調査データの受信を示す応答データを送信する
ことを特徴とする請求項１７に記載の迂回経路調査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノード装置を含むネットワークにおいて、迂回経路を調査するノード装置および方法に係わる。
【背景技術】
【０００２】
複数のノード装置を含むネットワークの１つの形態として、アドホックネットワークが実用化されている。アドホックネットワークでは、各ノード装置において自律的な経路選択が行われる。すなわち、アドホックネットワークの各ノード装置は、ルータまたはスイッチとして動作する機能を備えている。ここで、各ノード装置は、隣接するノード装置とメッセージ等を授受することにより、周辺のネットワーク構成を認識することができる。したがって、アドホック（特に、無線アドホック）方式を採用すると、ネットワーク全体を管理する管理装置を設けることなく、ネットワークを構築したい環境にノード装置を配置するだけで、所望のネットワークを構築することができる。さらに、アドホックネットワークでは、ノード装置の追加または削除が容易であり、ネットワーク構成を容易に変更することができる。なお、従来より、経路再構築をせずに経路上にない新たなノード装置を加えてコネクションを更新できる無線通信システムが提案されている（例えば、特許文献１）。【０００３】
ところで、ネットワークは、一般に、障害が発生した場合であっても通信を継続できるようにするために、迂回経路（或いは、冗長経路または代替経路）を有していることが好ましい。特に、無線ネットワークでは、電波環境に応じてリンクが一時的に切断されることもあり、迂回経路の有無を予め確認しておくことは重要である。このため、従来より、複数のノード装置で構成されるネットワーク通信におけるリンク障害時に、分散型の自動迂回ルーティングにより障害を回復する技術が提案されている。（例えば、特許文献２）
ところが、アドホックネットワークでは、ネットワーク全体に渡って通信経路を正確に認識することは困難である。したがって、アドホックネットワークにおいては、各通信経路に対してそれぞれ迂回経路が存在しているか否かを確認することは容易ではない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−１３５４８２号公報
【特許文献２】特開平３−１１７１４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、アドホックネットワークにおいて、任意の通信経路に対して迂回経路の有無を調査するノード装置または方法を提供することである。
【課題を解決するための手段】
【０００６】
本発明の１つの態様のノード装置は、複数のノードを含むアドホックネットワークにおいて、自ノード装置に隣接する第１のノード装置から転送された、第２のノード装置を送信元とするデータを受信する受信手段と、前記第２のノード装置を最終宛先に設定した送信データを作成する送信データ作成手段と、前記送信データを、前記第１のノード装置以外の自ノード装置に隣接する隣接ノード装置へ送信する送信手段と、前記第１のノード装置以外の自ノードに隣接する全ての隣接ノード装置へ送信した前記送信データを再び自ノード装置で受信したか、または、前記隣接ノードへの送信に失敗したときに、自ノード装置と前記第２のノード装置との間に、前記第１のノード装置以外の隣接ノード装置を経由してデータ送受信する迂回経路が存在しないと判定する判定手段、を備える。【０００７】
本発明の他の態様のノード装置は、複数のノード装置を含むアドホックネットワークにおいて、特定の他のノード装置を最終宛先に設定して、該他のノード装置から自ノード装置に対して両ノード間の通信経路を特定するための調査データを送信するように要求する調査要求データを作成して送信する要求送信手段と、前記自ノード装置が最終宛先として設定され、前記他のノード装置が送信元として設定された前記調査データを受信したことに基づき、自ノード装置と該他のノード装置との間に、他の特定のノード装置に隣接する少なくとも２以上の隣接ノードのそれぞれから経由してデータを送受信できる迂回経路が存在すると判定する判定手段、を備える。
【発明の効果】
【０００８】
実施形態の構成または方法によれば、アドホックネットワークにおいて、任意の通信経路に対して迂回経路の有無を調査することができる。
【図面の簡単な説明】
【０００９】
【図１】ネットワーク構成の第１の例を示す図である。
【図２】ネットワーク構成の第２の例を示す図である。
【図３】実施形態におけるノード装置の構成を示す機能ブロック図である。
【図４】実施形態におけるノード装置のハードウェア構成を示す図である。
【図５】１つのノード装置に注目して重みの学習について説明する図である。
【図６】図１のネットワークにおいて動的かつ自律分散的に経路が選択される様子を説明する図である。
【図７】フレームの例を示す図である。
【図８】図３のバッファ部に格納されるデータの例を示す図である。
【図９】図３の隣接ノード管理テーブルの例を示す図である。
【図１０】図３の重み付けテーブルの例を示す図である。
【図１１】図１０の重み付けテーブルの変化を説明する図である。
【図１２】図３のＦＩＤ管理テーブルの例を示す図（その１）である。
【図１３】図３のＦＩＤ管理テーブルの例を示す図（その２）である。
【図１４】フレーム受信処理のフローチャートである。
【図１５】図１４のステップＳ２０３におけるハローフレーム受信処理のフローチャートである。
【図１６】ハローフレーム送信処理のフローチャートである。
【図１７】隣接ノード管理テーブルのエージング処理のフローチャートである。
【図１８】重み付けテーブルのエージング処理のフローチャートである。
【図１９】ＦＩＤ管理テーブルのエージング処理のフローチャートである。
【図２０】図１４のステップＳ２０５におけるデータフレーム受信処理のフローチャート（その１）である。
【図２１】図１４のステップＳ２０５におけるデータフレーム受信処理のフローチャート（その２）である。
【図２２】図１４のステップＳ２０５におけるデータフレーム受信処理のフローチャート（その３）である。
【図２３】図１４のステップＳ２０５におけるデータフレーム受信処理のフローチャート（その４）である。
【図２４】図２１のステップＳ８１２ａにおける重み付けテーブル調整処理のフローチャートである。
【図２５】図１４のステップＳ２０６におけるＡＣＫフレーム受信処理のフローチャートである。
【図２６】ＡＣＫフレームがタイムアウト時刻までに受信されない場合の処理を示すフローチャートである。
【図２７】ノード装置がＧＳとなってデータフレームを送信する場合の送信処理のフローチャート（その１）である。
【図２８】ノード装置がＧＳとなってデータフレームを送信する場合の送信処理のフローチャート（その２）である。
【図２９】ＧＳにもなりうるノード装置が、データフレーム受信処理の一部として図２３の処理の代わりに行う処理のフローチャートである。
【図３０】ハローフレームの送受信による隣接ノードの認識および図６の経路選択を示すタイミングチャートである。
【図３１】迂回経路について説明する図である。
【図３２】迂回経路を調整する方法の概要を説明する図である。
【図３３】調査要求ノード装置の動作を示すフローチャートである。
【図３４】調査実行ノード装置の動作を示すフローチャートである。
【図３５】調査実行ノード装置が備える隣接ノード管理テーブルの実施例である。
【図３６】迂回経路が存在するときの調査手順を示す図である。
【図３７】迂回経路が存在しないときの調査手順を示す図である。
【発明を実施するための形態】
【００１０】
以下、発明の実施形態について、図面を参照しながら説明する。具体的には、まず、実施形態に係るネットワークの構成、各ノード装置の構成および動作について説明する。その後、実施形態に係るネットワークにおいて、任意の通信経路に対して迂回経路の有無を検出する方法について説明する。
【００１１】
図１はネットワーク構成の第１の例を示す図である。図１のネットワーク１は、以下の実施形態を適用することが可能なアドホックネットワークの一例であり、複数のノード装置を含む。なお、以下では、ネットワークトポロジの観点からの説明においては、「ノード装置」を単に「ノード」ということもある。
【００１２】
ネットワーク１内の各ノード装置には、ネットワーク１内で一意な識別情報（以下、「ノードＩＤ（identification）」という）が予め割り当てられている。以下では、参照符号「Ｎｉ」がノードＩＤを示すものとし、例えば、ノードＩＤとしてＮｉが割り当てられたノード装置を「ノード装置Ｎｉ」のように参照する。なお、以下では、ノード装置Ｎｉにとって自分自身に割り当てられたノードＩＤであるＮｉを、ノード装置Ｎｉの「自ノードＩＤ」ともいう（図１では１≦ｉ≦７）。
【００１３】
また、図１ではリンクを実線で表している。具体的には、ネットワーク１のトポロジは次のとおりである。すなわち、ノード装置Ｎ１とＮ２の間、ノード装置Ｎ２とＮ３の間、ノード装置Ｎ２とＮ６の間、ノード装置Ｎ３とＮ４の間、ノード装置Ｎ３とＮ５の間、ノード装置Ｎ４とＮ５の間、ノード装置Ｎ４とＮ７の間、およびノード装置Ｎ６とＮ７の間に、各々リンクが存在する。
【００１４】
なお、以下で「リンク」とは、無線リンクでもよく、有線リンクでもよい。ノード装置ＮｉとＮｊが、他のノード装置Ｎｋによる中継を経ずに直接、無線により情報を通信しあうことができるとき、「ノード装置ＮｉとＮｊの間に無線リンクが存在する」という（図１では１≦ｉ，ｊ，ｋ≦７）。また、ノード装置ＮｉとＮｊの間が直接ケーブルで接続されており、ノード装置ＮｉとＮｊがケーブルを介して情報を通信しあうことができるとき、「ノード装置ＮｉとＮｊの間に有線リンクが存在する」という。
【００１５】
また、ノード装置ＮｉとＮｊの間に無線または有線のリンクが存在するとき、「ノード装置ＮｉとＮｊは互いに隣接している」という。換言すれば、ノード装置Ｎｉにとってノード装置Ｎｊは隣接ノード装置であり、ノード装置Ｎｊにとってノード装置Ｎｉは隣接ノード装置である。
【００１６】
なお、図１のネットワーク１には、新たなノード装置が追加されることもありうるし、ノード装置Ｎ１〜Ｎ７のいずれかが撤去されてネットワーク１からは消滅することもありうる。また、リンクは固定的ではなく、動的に変化しうる。
【００１７】
例えば、天候や遮蔽物などの影響で、ノード装置ＮｉとＮｊの間に無線リンクが新たに確立されたり、今まで確立されていた無線リンクが消滅したりすることがある。ノード装置が可動式であれば、ノード装置間の距離の変動によってリンクの有無が変化することもある。また、ケーブルの接続替えにより、新たな有線リンクが確立されたり、今まで存在していた有線リンクが消滅したりすることがあり、ケーブルの切断等の障害によって有線リンクが消滅することもある。
【００１８】
以下に説明する実施形態によれば、このようにノードやリンクが動的に変化する環境においても、データが送信される時点でのネットワーク１の状況に応じて、利用可能で適切な経路が動的に見出されて選択されながら、データの送信が行われる。しかも、動的に変化するネットワーク１全体のトポロジを各ノード装置Ｎ１〜Ｎ７が認識する必要なしに、動的なトポロジの変化に応じた経路選択が自律分散的に実現される。
【００１９】
ところで、詳しくは図７とともに後述するが、以下ではノード装置間で通信手順（プロトコル）に従って送受信されるデータの単位であるＰＤＵ（Protocol Data Unit）、および、送受信対象のデータそのものを「フレーム」と称する。ネットワーク１内でのデータの送受信はフレームを用いて行われるが、フレームの、ネットワーク１内における最初の送信元のノード装置を以下では「ＧＳ（Global Source）」といい、この送信元のノード装置（ＧＳ）で設定された、このフレームの宛先のノード装置を以下では「ＧＤ（Global
Destination）」という。なお、ＧＤは、実施形態のネットワーク上でのフレーム伝送において、最終宛先ノードを表す。
【００２０】
例えば、ノード装置Ｎ１がＧＳでノード装置Ｎ７がＧＤの場合、ネットワーク１においてノード装置Ｎ１とＮ７は隣接していないので、他のノード装置によってフレームが中継され、その結果として、フレームはノード装置Ｎ７に到達する。例えば、フレームは、ノード装置Ｎ１からノード装置Ｎ２へ送信され、ノード装置Ｎ２からノード装置Ｎ６へ送信され、ノード装置Ｎ６からノード装置Ｎ７へ送信されるかもしれない。以下では経路を、〈Ｎ１，Ｎ２，Ｎ６，Ｎ７〉のようなタプル（tuple）で表す。
【００２１】
経路〈Ｎ１，Ｎ２，Ｎ６，Ｎ７〉の例において、例えばノード装置Ｎ１からノード装置Ｎ２へフレームが送信されるとき、フレームの最終的な宛先は、ＧＤであるノード装置Ｎ７だが、フレームの直接的な宛先は、ノード装置Ｎ１に隣接するノード装置Ｎ２である。以下では、このように互いに隣接する２つのノード装置間でのフレームの送信において、フレームの送信元のノード装置を「ＬＳ（Local Source）」といい、フレームの宛先のノード装置を「ＬＤ（Local Destination）」という。なお、ＬＳは、実施形態のネットワーク上でのフレーム伝送において、送信元隣接ノードを表す。
【００２２】
例えば、上記のようにフレームがノード装置Ｎ１からノード装置Ｎ２とＮ６を経由してノード装置Ｎ７へと中継される場合のＬＳとＬＤは次のとおりである。すなわち、ＧＳでもあるノード装置Ｎ１から、ノード装置Ｎ１に隣接するノード装置Ｎ２へと、最初にフレームが送信されるとき、ＬＳはノード装置Ｎ１であり、ＬＤはノード装置Ｎ２である。続いて、ノード装置Ｎ２から、ノード装置Ｎ２に隣接するノード装置Ｎ６へと、フレームが送信されるとき、ＬＳはノード装置Ｎ２であり、ＬＤはノード装置Ｎ６である。そして、ノード装置Ｎ６から、ノード装置Ｎ６に隣接しておりＧＤでもあるノード装置Ｎ７へとフレームが送信されるとき、ＬＳはノード装置Ｎ６であり、ＬＤはノード装置Ｎ７である。
【００２３】
なお、ネットワーク１内の１つまたは複数のノード装置が、ネットワーク１とは別のネットワーク（以下「外部ネットワーク」という）に属する不図示のネットワーク機器と接続されていてもよい。
【００２４】
例えば、データ管理サーバを含む外部ネットワークのゲートウェイ装置に、有線リンクまたは無線リンクによってノード装置Ｎ７が接続されていてもよい。そして、ノード装置Ｎ７がＧＤとして指定されてネットワーク１内で送信されるデータは、ノード装置Ｎ７からゲートウェイ装置を介してデータ管理サーバに送信され、データ管理サーバで管理されてもよい。
【００２５】
続いて、図２を参照して他のネットワークの例について説明する。図２は、ネットワーク構成の第２の例を示す図である。図２のネットワーク２も、以下の実施形態を適用することが可能なアドホックネットワークの一例であり、複数のノード装置を含む。また、図１のネットワーク１と同様に、ネットワーク２も、不図示の外部ネットワークと接続されていてもよい。
【００２６】
ネットワーク２はノード装置Ｎ１０１〜Ｎ１２０を含む。図２は、ノード装置Ｎ１０１〜Ｎ１２０のうち、１つのノード装置Ｎ１０５に注目して表現した図である。すなわち、太い実線の丸で示したノード装置Ｎ１０５は、直接通信することが可能な、隣接する３つのノード装置Ｎ１０７、Ｎ１１１、およびＮ１１２の存在とノードＩＤさえ認識していればよく、ネットワーク２全体のトポロジを認識する必要はない。ノード装置Ｎ１０５は、ネットワーク２のトポロジどころか、ネットワーク２内に存在するノード装置の個数を認識する必要もないし、ノード装置Ｎ１０５に隣接していないノード装置のノードＩＤを予め知っている必要もない。
【００２７】
図２では、ノード装置Ｎ１０５が認識する部分を実線で表し、ノード装置Ｎ１０５が認識する必要のない部分を破線で表してある。すなわち、図２では、ノード装置Ｎ１０５から見てホップ数１以内の範囲に存在する以下のものだけが、実線で示してある。
・ノード装置Ｎ１０５自身
・ノード装置Ｎ１０５に隣接する３つのノード装置Ｎ１０７、Ｎ１１１、およびＮ１１２
・ノード装置Ｎ１０５を３つの隣接ノード装置Ｎ１０７、Ｎ１１１、およびＮ１１２にそれぞれ接続する３本のリンク
【００２８】
以下に説明する実施形態によれば、ネットワーク内の各ノード装置は、上記のノード装置Ｎ１０５のように、隣接ノード装置さえ認識していればよい。したがって、ネットワークの規模が増大しても「各ノード装置がネットワークトポロジを認識するために制御情報の通信を行い、制御情報の通信のせいでネットワークの負荷が高まり、通信システム全体としての性能が悪化する」といった事態に陥ることはない。
【００２９】
以下、図３〜図３０を参照しながら、実施形態に係るネットワークの構成、各ノード装置の構成および動作について説明する。その後、実施形態のネットワークにおいて迂回経路を調査する方法について説明する。
【００３０】
図３は、実施形態におけるノード装置の構成を示す機能ブロック図である。図１または図２の各ノード装置は、具体的には、例えば図３に示されるノード装置１００である。
ノード装置１００は、フレームを受信する受信部１０１と、フレームを送信する送信部１０２を備える。また、ノード装置１００は、フレームの送信のために用いる各種情報を格納するため、隣接ノード管理テーブル１０３、重み付けテーブル１０４、ＦＩＤ（Frame IDentification）管理テーブル１０５、及び、調査履歴テーブル１１２を備える。
【００３１】
ノード装置１００はさらに、受信部１０１が受信したフレームの種類を判別するフレーム分岐処理部１０６を備える。詳しい形式は図７とともに後述するが、この実施形態では、「データフレーム」、「ハローフレーム」、および「ＡＣＫ（ACKnowledgment）フレーム」という少なくとも３種類のフレームが使われる。
【００３２】
ノード装置１００は、ＡＣＫフレームに関する処理を行うＡＣＫ処理部１０７と、ハローフレームの受信に応じて処理を行うリンク管理部１０８を備える。また、ノード装置１００は、データフレームの受信に応じた処理を行うために、バッファ部１０９とデータフレーム処理部１１０を備えている。ノード装置１００はさらに、上位層処理部１１１、ハローフレーム生成部１１２、およびＦＩＤ生成部１１３も備えている。
【００３３】
ノード装置１００の各部は以下のように動作する。
受信部１０１がフレームを受信し、受信したフレームをフレーム分岐処理部１０６に出力する。すると、フレーム分岐処理部１０６がフレームの種別を判別する。
【００３４】
ハローフレームが受信された場合、フレーム分岐処理部１０６は、受信されたハローフレームをリンク管理部１０８に出力する。リンク管理部１０８は、隣接ノード管理テーブル１０３を管理しており、さらに、重み付けテーブル１０４の管理にも関与している。
【００３５】
ここで、ハローフレームは、制御情報を通信するための制御フレームの一種であり、具体的には、ノード装置１００が自分自身の存在を他のノード装置に通知するためのフレームである。よって、詳しくは図１５とともに後述するとおり、リンク管理部１０８は、ハローフレームの受信を契機として隣接ノード装置の存在を認識し、認識結果を隣接ノード管理テーブル１０３に反映させる。すなわち、隣接ノード管理テーブル１０３は、ノード装置１００に隣接する他のノード装置を、ノード装置１００が記憶しておくためのテーブルである。
【００３６】
なお、ネットワークの状況は動的に変化しうるので、場合によっては、今まで隣接ノード装置としてリンク管理部１０８に認識されていた他のノード装置が、隣接ノード装置として認識不能となるかもしれない。よって、詳しくは図１７とともに後述するとおり、リンク管理部１０８は、隣接ノード装置として認識不能となったノード装置に関するエントリを隣接ノード管理テーブル１０３から削除するためのエージング処理も行う。
【００３７】
また、この実施形態においてリンク管理部１０８は、隣接ノード装置の変化にともなって重み付けテーブル１０４の追加、削除、あるいは更新を行う。
ここで、重み付けテーブル１０４は、フレームをどの隣接ノード装置に送信するかを決定するための情報をＧＤごとに管理するためのテーブルである。図３にはＭ個のＧＤそれぞれに対応して設けられた重み付けテーブル１０４−１〜１０４−Ｍが示されている。本明細書において「重み付けテーブル１０４」とは、重み付けテーブル１０４−１〜１０４−Ｍの総称である。また、ノード装置１００の運用が開始される時点では、重み付けテーブル１０４は存在せず、Ｍ＝０である。
【００３８】
具体的には、重み付けテーブル１０４は、「最終的にフレームをＧＤに到達させるためには、ノード装置１００自身はどの隣接ノード装置をＬＤとして選択することができるか」ということをＧＤごとに管理している。換言すれば、重み付けテーブル１０４は、フレームのＧＤごとに、ノード装置１００に隣接する１つ以上のノード装置に関して、ＬＤとして選択する際の優先度を、重みとして表して保持している。
【００３９】
別の観点から言えば、ある隣接ノード装置が「ＬＤとして選択可能である」とは、当該隣接ノード装置へのフレームの送信可能性が「送信可能」であることを意味する。また、ある隣接ノード装置が「ＬＤとして選択不能である」とは、当該隣接ノード装置へのフレームの送信可能性が「送信不能」であることを意味し、当該隣接ノード装置の優先度が、「送信不能」に対応する所定の最低優先度であることを意味する。
【００４０】
したがって、ネットワークの状況の変化に応じてノード装置１００の隣接ノード装置が変化すると、リンク管理部１０８は、詳しくは図１５および図１７とともに後述するとおり、隣接ノード装置の変化に応じて重み付けテーブル１０４を追加、更新、または削除する。
【００４１】
また、ＡＣＫフレームが受信された場合、フレーム分岐処理部１０６は、受信されたＡＣＫフレームをＡＣＫ処理部１０７に出力する。ここで、ＡＣＫフレームは、制御フレームの一種であり、ノード装置１００が送信したデータフレームのＬＤであるノード装置から、ノード装置１００に、データフレームの受信を通知するためのフレームである。
【００４２】
したがって、ＡＣＫフレームの受信は、データフレームの送信が成功したことを意味し、所定の時間が経過してもＡＣＫフレームが受信されずにタイムアウトとなることは、データフレームの送信に失敗したことを意味する。ＡＣＫ処理部１０７は、後述の図２５に示すＡＣＫフレーム受信のタイムアウト監視を行う。
【００４３】
バッファ部１０９は、データフレームの送信失敗と再送に備えて、データフレームを格納している。よって、詳しくは図２５とともに後述するとおり、ＡＣＫ処理部１０７は、ＡＣＫフレームの受信を契機としてデータフレームの送信成功を認識すると、不要になったデータフレームをバッファ部１０９から削除可能な状態にする。この後、所定の時間が経過した時点で、バッファ部１０９からＡＣＫフレームに対応するデータフレームが削除される。また、ＡＣＫ処理部１０７はデータフレームの送信の成否をデータフレーム処理部１１０に通知する。
【００４４】
また、データフレームが受信された場合、フレーム分岐処理部１０６は、受信されたデータフレームをバッファ部１０９に格納するとともに、後述の図２０〜図２３の処理を行うようデータフレーム処理部１１０に依頼する。
【００４５】
ここで、データフレームは、ＧＳであるノード装置が、ＧＤであるノード装置に伝達しようとするデータを、ペイロードとして含むフレームである。換言すれば、この実施形態におけるフレームが定義される層よりも上位の層で定義されるプロトコルのＰＤＵが、ペイロードとしてデータフレームに含まれる。
【００４６】
上位層処理部１１１は、ノード装置１００がＧＳまたはＧＤである場合に、データフレームにペイロードとして含まれる上位層のＰＤＵを処理する。ここで、上位層処理部１１１は、実施形態のネットワーク上の迂回経路を調査する機能を実現するために、要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃ、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆを備える。なお、これらの要素１１１ａ〜１１１ｆの動作については、後で説明する。
【００４７】
フレーム分岐処理部１０６からデータフレームの処理の依頼を受けたデータフレーム処理部１１０の動作の概要は、以下のとおりである。
データフレーム処理部１１０は、受信部１０１が受信したデータフレームに対するＡＣＫフレームの送信を送信部１０２に依頼する。また、データフレーム処理部１１０は、受信されたデータフレームのＧＤの値がノード装置１００の自ノードＩＤと等しいか否かを判断する。そして、受信されたデータフレームのＧＤの値がノード装置１００の自ノードＩＤと異なる場合、データフレーム処理部１１０は、ＦＩＤ管理テーブル１０５を参照することにより、今回の受信が下記（Ａ１）と（Ａ２）のどちらに該当するのかを判断する。
【００４８】
（Ａ１）過去にノード装置１００がＬＳとなって送信したデータフレームが、ネットワーク内を中継されているうちにノード装置１００に戻ってきて、受信部１０１で受信された。
【００４９】
（Ａ２）上記（Ａ１）以外の新たなデータフレームが受信部１０１で受信された。
データフレーム処理部１１０は、今回の受信が（Ａ２）に該当すると判断すると、重み付けテーブル１０４を参照して、受信したデータフレームを転送するためにＬＤとして指定する隣接ノード装置を選択し、データフレームの転送を送信部１０２に依頼する。
【００５０】
他方、データフレーム処理部１１０は、今回の受信が（Ａ１）に該当すると判断すると、過去にＬＤとして選択した隣接ノード装置が、適切なＬＤではなかったと認識し、認識の結果を重み付けテーブル１０４に反映させる。そして、データフレーム処理部１１０は、重み付けテーブル１０４を参照して、ＬＤとして選択可能な隣接ノード装置が他にまだ残っているか否かを判断する。
【００５１】
データフレーム処理部１１０は、また、ＡＣＫ処理部１０７からのデータフレーム送信成功あるいは送信失敗の通知を受け、該データフレームのＬＤとして選択した隣接ノード装置が適切か否かの認識をし、その認識結果を重み付けテーブル１０４に反映させる。
【００５２】
なお、ノード装置１００に隣接する、あるノード装置Ｎｉが「ＬＤとして選択可能である」とは、直感的には「隣接ノード装置ＮｉをＬＤとして選択してみて、フレームが成功裡にＧＤまで到達するか否かを試してみる価値がある」という意味である。具体的には、ノード装置Ｎｉが「ＬＤとして選択可能である」とは、「下記（Ｂ１）でもなく下記（Ｂ２）でもない」という意味である。なお、「選択可能」という語の、より詳細な意味については、後述の図５に関する説明と、図２２に関する（Ｆ１）〜（Ｆ２）と（Ｇ１）〜（Ｇ４）の説明から明らかである。
【００５３】
（Ｂ１）ノード装置１００が隣接ノード装置Ｎｉを過去にＬＤとして選択した結果、ループ等の何らかの失敗が発生したことがあり、「ノード装置ＮｉはＬＤとして不適切である」と既に判明している。
【００５４】
（Ｂ２）今回受信部１０１が受信したデータフレームを、かつて受信部１０１が初めて受信したときのＬＳ（以下「Original Local Source」と称し、「ＯＬＳ」と略す）が、ノード装置Ｎｉであった。
【００５５】
データフレーム処理部１１０は、もしＬＤとして選択可能な隣接ノード装置が他にまだ残っていれば、選択可能な隣接ノード装置を選んでＬＤとして指定し、データフレームの転送を送信部１０２に依頼する。逆に、ＬＤとして選択可能な隣接ノード装置がもう残っていなければ、データフレーム処理部１１０は、下記（Ｃ１）または（Ｃ２）のように動作する。
【００５６】
（Ｃ１）今回受信したデータフレームのＧＳがノード装置１００以外である場合、データフレーム処理部１１０は、ＯＬＳへデータフレームを返送するため、ＯＬＳをＬＤとして選択し、データフレームの転送を送信部１０２に依頼する。この動作は、ＯＬＳである隣接ノード装置に「ノード装置１００をＬＤとして選択することは不適切である」と認識させるための動作であり、後述するとおり経路探索におけるバックトラックに相当する。
【００５７】
（Ｃ２）今回受信したデータフレームのＧＳがノード装置１００自身である場合、このデータフレームを元々生成したのは上位層処理部１１１である。よって、データフレーム処理部１１０は、上位層処理部１１１に対してデータフレームの送信失敗を通知し、バッファ部１０９に格納されているデータフレームを破棄する。
【００５８】
なお、以上のようなデータフレーム処理部１１０の動作を実現するためには、データフレーム処理部１１０は上記（Ａ１）と（Ａ２）の区別をすることが必要である。そのため、この実施形態では、データフレームを一意に識別することのできるフレーム識別情報が各データフレームに含まれており、フレーム識別情報をＦＩＤ管理テーブル１０５が記憶している。
【００５９】
この実施形態でのフレーム識別情報は、具体的には、データフレームのＧＳであるノード装置のノードＩＤと、ＦＩＤとの組み合わせである。ＦＩＤは、ある１つのノード装置がＧＳとなって送信する複数のフレームの各々を一意に識別する識別情報であり、例えば所定のビット数のシーケンス番号でもよいし、タイムスタンプでもよい。
【００６０】
つまり、個々のノード装置は独立にＦＩＤを生成するため、異なる複数のノード装置が偶然同じＦＩＤを生成することもありうる。しかし、フレーム識別情報は、ＦＩＤ単独ではなく、データフレームのＧＳであるノード装置のノードＩＤと、ＦＩＤとの組み合わせである。そして、ノードＩＤは、上記のとおりネットワーク内でノード装置を一意に識別する情報である。したがって、たとえ異なる複数のノード装置が偶然同じＦＩＤを生成したとしても、異なるノード装置がそれぞれＧＳとなって送信したフレームは、異なるフレーム識別情報を有するので、区別可能である。
【００６１】
なお、フレーム識別情報は、データフレームが１つ以上のノード装置を経由してネットワーク内を転送されても、データフレームを中継するノード装置によって書き換えられることはなく、したがって変化しない。データフレーム処理部１１０は、送信部１０２に送信を依頼したデータフレームのフレーム識別情報をＦＩＤ管理テーブル１０５に記録することにより、後にデータフレームがノード装置１００自身に戻ってきたとき、上記（Ａ１）に該当すると認識することができる。
【００６２】
なお、ノード装置１００は、フレームの受信を契機としないその他の処理も行う。具体的には、ハローフレーム生成部１１２が、ＦＩＤ生成部１１３の生成するＦＩＤを利用して定期的にハローフレームを生成し、送信部１０２に出力する。すると送信部１０２がハローフレームを送信するので、ノード装置１００は、ノード装置１００自身の存在を定期的に周囲に通知することができる。
【００６３】
また、上位層処理部１１１は任意のタイミングで、データフレームにペイロードとして含めて送信する対象のデータをデータフレーム処理部１１０に出力することができる。すると、データフレーム処理部１１０は、上位層処理部１１１の要求に応じてデータフレームを生成し、送信部１０２にデータフレームの送信を指示する。こうして、ノード装置１００は、自らＧＳとなることができる。
【００６４】
図４は、実施形態におけるノード装置のハードウェア構成を示す図である。図３のノード装置１００は、例えば図４に示す各種ハードウェアにより実現されてもよい。
図４の例では、ノード装置１００は、ＭＰＵ（MicroProcessing Unit）２０１、ＰＨＹ（PHYsical layer）チップ２０２、およびタイマＩＣ（Integrated Circuit）２０３を備える。また、ノード装置１００は、ＤＲＡＭ（Dynamic Random access Memory）２０４、フラッシュメモリ２０５、および無線モジュール２０６を備える。
【００６５】
ＭＰＵ２０１とＰＨＹチップ２０２の間を接続する通信インタフェースは、ＭＩＩ／ＭＤＩＯ（Media Independent Interface or Management Data Input/Output）２０７である。ＭＩＩとＭＤＩＯはいずれも、物理層とＭＡＣ副層（Media Access Control sublayer）との間のインタフェースである。また、ＭＰＵ２０１とタイマＩＣ２０３は、Ｉ２Ｃ／ＰＩＯ（Inter-Integrated Circuit or Parallel Input/Output）バス２０８を介して接続されている。そして、ＤＲＡＭ２０４とフラッシュメモリ２０５と無線モジュール２０６は、ＰＣＩ（Peripheral Component Interconnect）バス２０９を介してＭＰＵ２０１に接続されている。
【００６６】
ＭＰＵ２０１は、不揮発性記憶装置の一種であるフラッシュメモリ２０５に格納されたファームウェアなどのプログラムをＤＲＡＭ２０４にロードし、ＤＲＡＭ２０４をワーキングメモリとして使いながら各種処理を実行する。ＭＰＵ２０１は、プログラムを実行することで、図３のフレーム分岐処理部１０６、ＡＣＫ処理部１０７、リンク管理部１０８、データフレーム処理部１１０、上位層処理部１１１、ハローフレーム生成部１１２、およびＦＩＤ生成部１１３として動作することができる。
【００６７】
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置１００にインストールされてもよい。または、プログラムは、ネットワークからＰＨＹチップ２０２もしくは無線モジュール２０６を介してダウンロードされ、ノード装置１００にインストールされてもよい。
【００６８】
なお、実施形態に応じて、ＤＲＡＭ２０４やフラッシュメモリ２０５以外の他の種類の記憶装置が利用されてもよい。例えば、ノード装置１００は、ＣＡＭ（Content Addressable Memory）、ＳＲＡＭ（Static Random Access Memory）、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの記憶装置を有してもよい。
【００６９】
図３の隣接ノード管理テーブル１０３、重み付けテーブル１０４、ＦＩＤ管理テーブル１０５、バッファ部１０９および調査履歴テーブル１１２は、ＤＲＡＭ２０４、フラッシュメモリ２０５、あるいは不図示のその他の記憶装置により実現される。また、フラッシュメモリ２０５は、プログラムだけでなく、ノード装置１００のノードＩＤなど、ノード装置１００に固有の情報も記憶している。
【００７０】
ＰＨＹチップ２０２は、有線接続における物理層の処理を行う回路である。この実施形態は無線ネットワークに適用されるので、ノード装置１００はＰＨＹチップ２０２を備えなくてもよい。しかし、ノード装置１００と外部ネットワークとの接続のために、ノード装置１００はＰＨＹチップ２０２を備えていてもよい。
【００７１】
例えば、ノード装置１００は、イーサネット（登録商標）規格にしたがった有線ＬＡＮポートを備え、有線ＬＡＮポートに接続されたケーブルを介して外部ネットワークのゲートウェイ装置などに接続されていてもよい。
【００７２】
その場合、ＭＰＵ２０１は、イーサネットフレームを生成し、ＭＩＩ／ＭＤＩＯ２０７を介してＰＨＹチップ２０２に出力することができる。そして、ＰＨＹチップ２０２は、ＭＰＵ２０１からの出力（すなわちイーサネットフレームを表す論理信号）を、ケーブルの種類に応じた信号（つまり電気信号または光信号）に変換し、ケーブルに出力する。こうして、ノード装置１００はＰＨＹチップ２０２を用いて外部ネットワークにデータを送信することができる。
【００７３】
また、ＰＨＹチップ２０２は、ケーブルと有線ＬＡＮポートを介して外部ネットワークから入力される電気信号または光信号を、論理信号に変換し、ＭＩＩ／ＭＤＩＯ２０７を介してＭＰＵ２０１に出力することもできる。こうして、ノード装置１００はＰＨＹチップ２０２を用いて外部ネットワークからデータを受信することができる。
【００７４】
無線モジュール２０６は、無線接続における物理層の処理を行うハードウェアである。無線モジュール２０６は、例えば、アンテナ、ＡＤＣ（Analog-to-Digital Converter）、ＤＡＣ（Digital-to-Analog Converter）、変調器、復調器、符号化器、復号器などを含む。
【００７５】
この実施形態では、図３の受信部１０１と送信部１０２は、図４の無線モジュール２０６により実現される。つまり、この実施形態では、ネットワーク内のリンクは無線リンクである。
【００７６】
タイマＩＣ２０３は、設定された時間が経過するまでカウントアップ動作を行い、設定された時間が経過すると割り込み信号を出力する。例えば、タイマＩＣ２０３は、隣接ノード管理テーブル１０３、重み付けテーブル１０４、ＦＩＤ管理テーブル１０５のエージング処理をそれぞれ所定の間隔で実行するための割り込み信号を出力してもよい。
【００７７】
なお、実施形態に応じて、ノード装置のハードウェア構成は図４とは異なっていてもよく、図４に例示した規格・種類以外のその他のハードウェアをノード装置に利用することもできる。
【００７８】
例えば、図３のフレーム分岐処理部１０６、ＡＣＫ処理部１０７、リンク管理部１０８、データフレーム処理部１１０、上位層処理部１１１、ハローフレーム生成部１１２、またはＦＩＤ生成部１１３は、ハードウェア回路により実現されてもよい。具体的には、ＭＰＵ２０１の代わりに、ＦＰＧＡ（Field Programmable Gate Array）などのリコンフィギュラブル回路や、ＡＳＩＣ（Application Specific Integrated Circuit）などにより、これら図３の各部が実現されてもよい。もちろん、ＭＰＵ２０１とハードウェア回路の双方により、図３の各部が実現されてもよい。
【００７９】
なお、以下の説明においては、説明の明確化のため、図３および図４の各部の参照符号の後にノードＩＤを付けた参照符号を用いることがある。例えば、ノード装置Ｎ１が有する図３の隣接ノード管理テーブル１０３を「１０３−Ｎ１」という参照符号で参照する場合がある。
【００８０】
続いて、個々のノード装置の動作の概要について図５を参照して説明し、個々のノード装置の動作の結果としてネットワーク全体として実現される経路選択について図６を参照して説明する。
【００８１】
図５は、１つのノード装置に注目して重みの学習について説明する図である。図５には、ネットワーク３内の６つのノード装置が「ノードα」〜「ノードζ」として抜粋されて示されている。図５に示すように、ノードβにはノードα、γ、δ、ε、およびζが隣接しており、図５では下記５本のリンクが実線で示されている。
・ノードβとαの間のリンクＬβ，α
・ノードβとγの間のリンクＬβ，γ
・ノードβとδの間のリンクＬβ，δ
・ノードβとεの間のリンクＬβ，ε
・ノードβとζの間のリンクＬβ，ζ
【００８２】
また、図５において雲の形で模式的に表現されたネットワーク３ａは、ネットワーク３のうちの一部分である。ネットワーク３ａは、具体的には、ノードδとζの間を直接的に接続するリンク、または、１つ以上の不図示のノードと２本以上の不図示のリンクを介してノードδとζの間を間接的に接続する経路を含む。
【００８３】
以下では、図５においてノードβに注目し、ノードβにおける重みの学習について説明する。
あるとき、ノードβが、ネットワーク３内の不図示のあるノード（以下、便宜的に「ノードη」という）をＧＤとするデータフレーム３０１を、リンクＬβ，αを介してノードαから受信する。ノードβは図３の重み付けテーブル１０４を有しており、このうちノードηに対応する重み付けテーブルを、図５の説明では便宜的に「１０４−ｈ」という参照符号で参照する。
【００８４】
詳しくは図１０および図１１とともに後述するが、ＧＤごとに管理される重み付けテーブル１０４のそれぞれは、隣接ノードと重みの対応付けを記憶している。ノードβにはノードα、γ、δ、ε、およびζが隣接しているので、重み付けテーブル１０４−ｈでは、ノードαと重みＷα、ノードγと重みＷγ、ノードδと重みＷδ、ノードεと重みＷε、およびノードζと重みＷζが、それぞれ対応付けられている。
【００８５】
説明の便宜上、ノードβがノードαからデータフレーム３０１を受信した時点での重み付けの関係が、式（１）のとおりであったとする。
Ｗγ＜Ｗδ＜Ｗε＜Ｗζ        （１）
以下、この実施形態においては説明の便宜上、重みが０以上１以下の値をとり、重みの値が小さいほど当該重みに対応するノードの優先度が高いことを示すものとする。
【００８６】
したがって、式（１）に基づいてノードβは、最も軽い重みＷγと対応付けられたノードγの優先度が、隣接ノードγ、δ、ε、およびζの中で最も高いことを認識する。よって、ノードβは、データフレーム３０１を転送するためのＬＤとして、隣接ノードγ、δ、ε、およびζの中から、まずノードγを選択し、ノードγにデータフレーム３０１を送信する。
【００８７】
ここで、ノードβからノードγへの送信が失敗すると、ノードβは、「ノードηをＧＤとするデータフレームの送信時にノードγをＬＤとして選択することは不適切である」と学習する。そして、学習の結果として、ノードβは、ノードγの優先度を下げる。すなわち、ノードβは、重みＷγの値を大きくする。
【００８８】
送信失敗には何種類かあり、具体的には、ノードβは下記（Ｄ１）または（Ｄ２）のようにして、「ノードηをＧＤとするデータフレームの送信時にノードγをＬＤとして選択することは不適切である」と学習する。
【００８９】
（Ｄ１）リンク障害の場合
ノードβがデータフレーム３０１をノードγに転送した時点で、偶然リンクＬβ，γ、あるいは、ノードγに障害が発生していると、ノードβはノードγへの送信が失敗したと認識する。
【００９０】
例えばリンクＬβ，γが無線リンクである場合、ノードγからデータフレーム３０１に対するＡＣＫフレームが所定時間内に返信されてこなければ、ノードβはタイムアウトして、「ノードγへのデータフレーム３０１の送信に失敗した」と判断する。そして、ノードβは、「ノードηをＧＤとするデータフレームの送信時にノードγをＬＤとして選択することは不適切である」と学習し、ＬＤとして選択したノードγに対応付けられた重みＷγの値を大きくする。
【００９１】
なお、無線リンクはその品質環境が変化しやすいため、リンク障害が再び解消されている可能性がある。そのため、この実施形態においては、リンク障害時に一挙に重みＷγを最大値にするのではなく、所定の値だけ大きくすることにしている。このようにすれば、１回のリンク障害発生だけでそのＬＤが不適切となることを防ぐことができる。
【００９２】
（Ｄ２）ノードγからノードβにデータフレーム３０１が戻ってくる場合
ノードβは、一旦、ノードγへのデータフレーム３０１の送信に成功する。例えば、ノードβは、データフレーム３０１に対するＡＣＫフレームをノードγから受け取ることで、ノードγへのデータフレーム３０１の送信が成功したことを認識する。よって、一旦ノードβは、ＬＤとして選択したノードγに対応付けられた重みＷγの値を小さくする。
【００９３】
しかしながら、その後、ノードγからノードηまでデータフレーム３０１を転送することのできる経路がネットワーク３内で見つからなければ、後述するバックトラック動作により、ノードγはノードβにデータフレーム３０１を送り返す。例えば、ノードγがノードβにのみ隣接している場合、ノードγはノードηまでデータフレーム３０１を転送することのできる経路を見つけることができない。また、ノードγがノードβ以外にいくつかのノードに隣接している場合でも、ネットワーク３のトポロジによっては、ノードγからノードηまで到達不能なこともある。
【００９４】
ノードγがバックトラック動作を行うと、ノードβは、ノードβ自身が過去にノードγに送信したデータフレーム３０１をノードγから受信するので、「ノードγへの送信が失敗した」と認識することができる。認識の結果、ノードβは、「ノードηをＧＤとするデータフレームの送信時にノードγをＬＤとして選択することは不適切である」と学習し、ＬＤとして選択したノードγに対応付けられた重みＷγの値を大きくする。
【００９５】
この実施形態では、（Ｄ２）のように、ノードβ自身が過去に送信したデータフレーム３０１を受信することでノードβが送信失敗を認識する場合、ノードβは具体的には重みＷγの値を最大値に設定する。
【００９６】
以下では説明の便宜上、図５の例において（Ｄ２）のようにしてノードβが送信失敗を認識し、重みＷγの値を最大値に設定したとする。その結果、式（２）が成立する。
Ｗδ＜Ｗε＜Ｗζ＜Ｗγ          （２）
続いてノードβは、ＧＤである不図示のノードηへデータフレーム３０１を到達させるため、不適切と判明したノードγ以外の隣接ノードをＬＤとして選択し、データフレーム３０１の再送信を試みる。具体的には式（２）に基づいて、ノードβは、現時点で最も軽い重みＷδと対応付けられたノードδをＬＤとして選択し、ノードδにデータフレーム３０１を送信する。
【００９７】
図５の例では、データフレーム３０１に対するＡＣＫフレームをノードβがノードδから受信し、ノードβは送信の成功を認識する。送信の成功を認識すると、ノードβは、ＬＤとして選択したノードδに対応付けられた重みＷδの値を小さくする。その結果、やはり式（２）が成立する。
【００９８】
続いて、データフレーム３０１はネットワーク３ａを介してノードδからノードζに到達したとする。そして、ノードζがＬＤとしてノードβを選択したとする。
すると、ノードβは、ノードβ自身が過去にノードδに送信したデータフレーム３０１をノードζから受信するので、「ノードδへの送信は、ループの存在により失敗した」と認識することができる。認識の結果、ノードβは、「ノードηをＧＤとするデータフレームの送信時にノードδをＬＤとして選択することは不適切である」と学習し、重みＷδの値を大きくする。
【００９９】
ここで、ループして戻ってきたデータフレーム３０１をノードβがノードζから受信する場合も、「ノードβ自身が過去に送信したデータフレーム３０１を受信することでノードβが送信失敗を認識する」という点では上記（Ｄ２）の場合と同様である。したがって、ノードβは、「ノードηをＧＤとするデータフレームの送信時にノードδをＬＤとして選択することは不適切である」と学習し、ＬＤとして選択したノードδに対応付けられた重みＷδの値を最大値に設定する。その結果、式（３）が成立する。
Ｗε＜Ｗζ＜Ｗγ＝Ｗδ          （３）
図５には、ノードζから同一データフレーム３０１を受信して重み付けを更新した結果の新しい重み付けの関係として、式（３）を示してある。
【０１００】
続いてノードβは、ＧＤである不図示のノードηへデータフレーム３０１を到達させるため、不適切と判明したノードγおよびδ以外の隣接ノードをＬＤとして選択し、データフレーム３０１の再送信を試みる。具体的には式（３）に基づいて、ノードβは、現時点で最も軽い重みＷεと対応付けられたノードεをＬＤとして選択し、ノードεにデータフレーム３０１を送信する。
【０１０１】
図５の例では、データフレーム３０１に対するＡＣＫフレームをノードβがノードεから受信し、ノードβは送信の成功を認識する。送信の成功を認識すると、ノードβは、ＬＤとして選択したノードεに対応付けられた重みＷεの値を小さくする。その結果、やはり式（３）が成立する。
【０１０２】
ここで仮に、ノードεからバックトラックによってデータフレーム３０１がノードβへと返信されることがないとする。また、データフレーム３０１がネットワーク３内をループして、ノードβのいずれかの隣接ノードからノードβに送信され、ノードβで受信されることもないとする。
【０１０３】
すると、式（３）から、ノードβは、データフレーム３０１と同じくノードηをＧＤとする別のデータフレームを隣接ノードα、γ、δ、ζのいずれかから受け取った場合に、最も軽い重みＷεと対応付けられたノードεをＬＤとして優先して選択するようになる。
【０１０４】
図６は、図１のネットワーク１において動的かつ自律分散的に経路が選択される様子を説明する図である。具体的には、図６は、ノード装置Ｎ１がＧＳとなって、ノード装置Ｎ７をＧＤとして指定したデータフレームを送信する場合の、ネットワーク１内での経路選択の様子を示す。
【０１０５】
図６には図１のネットワーク１と、ノード装置Ｎ４とＮ７の間で発生した障害が示されている。また、図６の１２本の太い矢印は、ネットワーク１内で経路が動的に選択されながらデータフレームがＧＳ（すなわちノード装置Ｎ１）からＧＤ（すなわちノード装置Ｎ７）まで転送される様子を表す。
【０１０６】
なお、以下では、ノード装置Ｎｉの重み付けテーブル１０４−Ｎｉのうち、ノード装置Ｎ７に対応するものを便宜的に「１０４−ｈｉ−Ｎｉ」という参照符号で参照することにする（１≦ｉ≦６）。
【０１０７】
また、図６の説明においては、特に断らない限りデータフレームの送信が成功してＡＣＫフレームが返信されるものとし、ＡＣＫフレームの返信については省略して説明を簡略化する。ＡＣＫフレームの返信も含めた一連の処理の流れは、図３０とともに後述する。
【０１０８】
ステップＳ１０１で、ＧＳであるノード装置Ｎ１は、唯一ノード装置Ｎ１に隣接するノード装置Ｎ２をＬＤとして選択し、データフレームをノード装置Ｎ２に送信する。
ノード装置Ｎ２には、ステップＳ１０１で送信されたデータフレームのＬＳであるノード装置Ｎ１のほかに、ノード装置Ｎ３とＮ６が隣接している。そして、この２つの隣接ノード装置Ｎ３とＮ６のうちでノード装置Ｎ３の方が、重み付けテーブル１０４−ｈ２−Ｎ２において、より軽い重みと対応付けられているとする。
【０１０９】
すると、ステップＳ１０２でノード装置Ｎ２は、ステップＳ１０１で受信したデータフレームを転送するためのＬＤとしてノード装置Ｎ３を選択し、ノード装置Ｎ３にデータフレームを送信する。
【０１１０】
ノード装置Ｎ３には、ステップＳ１０２で送信されたデータフレームのＬＳであるノード装置Ｎ２のほかに、ノード装置Ｎ４とＮ５が隣接している。そして、この２つの隣接ノード装置Ｎ４とＮ５のうちでノード装置Ｎ４の方が、重み付けテーブル１０４−ｈ３−Ｎ３において、より軽い重みと対応付けられているとする。
【０１１１】
すると、ステップＳ１０３でノード装置Ｎ３は、ステップＳ１０２で受信したデータフレームを転送するためのＬＤとしてノード装置Ｎ４を選択し、ノード装置Ｎ４にデータフレームを送信する。
【０１１２】
ノード装置Ｎ４には、ステップＳ１０３で送信されたデータフレームのＬＳであるノード装置Ｎ３のほかに、ノード装置Ｎ５とＮ７が隣接している。そして、この２つの隣接ノード装置Ｎ５とＮ７のうちでノード装置Ｎ７の方が、重み付けテーブル１０４−ｈ４−Ｎ４において、より軽い重みと対応付けられているとする。
【０１１３】
すると、ステップＳ１０４でノード装置Ｎ４は、ステップＳ１０３で受信したデータフレームを転送するためのＬＤとして、ＧＤでもあるノード装置Ｎ７を選択し、ノード装置Ｎ７にデータフレームを送信する。
【０１１４】
しかし、図６に示すように、ノード装置Ｎ４がノード装置Ｎ７にデータフレームを送信した時点で、ノード装置Ｎ４とＮ７の間のリンクには障害が発生しており、したがって送信は失敗する。すなわち、ノード装置Ｎ４は、所定時間待機してもノード装置Ｎ７からＡＣＫフレームが返信されてこないため、タイムアウトし、送信失敗を認識する。
【０１１５】
なお、ステップＳ１０４におけるノード装置Ｎ４は、図５でノードγへのデータフレームの送信に上記（Ｄ１）のようにして失敗したノードβに相当する。よって、ノード装置Ｎ４は、送信失敗に応じて重み付けテーブル１０４−ｈ４−Ｎ４を更新する（具体的には、ステップＳ１０４の送信でのＬＤであるノード装置Ｎ７に対応付けられた重みの値を大きくする）。
【０１１６】
そして、ステップＳ１０５でノード装置Ｎ４は、ステップＳ１０３で受信したデータフレームを転送するためのＬＤとして、まだ試していない他の隣接ノード装置Ｎ５を選択し、ノード装置Ｎ５にデータフレームを送信する。
【０１１７】
ノード装置Ｎ５には、ステップＳ１０５で送信されたデータフレームのＬＳであるノード装置Ｎ４のほかには、ノード装置Ｎ３のみが隣接している。
そこで、ステップＳ１０６でノード装置Ｎ５は、ステップＳ１０５で受信したデータフレームを転送するためのＬＤとしてノード装置Ｎ３を選択し、ノード装置Ｎ３にデータフレームを送信する。
【０１１８】
すると、ステップＳ１０６でノード装置Ｎ３は、「ノード装置Ｎ３自身がステップＳ１０３で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップＳ１０６におけるノード装置Ｎ３は、図５においてループしてきたデータフレームをノードζから受信したノードβに相当する。よって、ノード装置Ｎ３は、図５と同様にして重み付けテーブル１０４−ｈ３−Ｎ３を更新する（具体的には、ステップＳ１０３の送信のＬＤであるノード装置Ｎ４に対応付けられた重みの値を最大値に設定する）。
【０１１９】
そして、ステップＳ１０７でノード装置Ｎ３は、ＯＬＳ（すなわち、ステップＳ１０２で最初に当該データフレームをノード装置Ｎ３が受信したときのＬＳであるノード装置Ｎ２）以外の隣接ノード装置の中から、まだＬＤとして試していないものを探す。ここで、ＯＬＳ以外の隣接ノード装置はノード装置Ｎ４とＮ５であり、ノード装置Ｎ４はステップＳ１０３で選択済みである。
【０１２０】
よって、ステップＳ１０７でノード装置Ｎ３は、未選択のノード装置Ｎ５をＬＤとして選択し、ノード装置Ｎ５にデータフレームを送信する。つまり、ステップＳ１０７におけるノード装置Ｎ３は、図５においてノードεをＬＤとして選択しなおしてノードεにデータフレームを送信するノードβに相当する。
【０１２１】
すると、ステップＳ１０７でノード装置Ｎ５は、「ノード装置Ｎ５自身がステップＳ１０６で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップＳ１０７におけるノード装置Ｎ５は、図５においてノードγへのデータフレームの送信に（Ｄ２）のようにして失敗したノードβに相当する。よって、ノード装置Ｎ５は、図５と同様にして重み付けテーブル１０４−ｈ５−Ｎ５を更新する（具体的には、ステップＳ１０６の送信のＬＤであるノード装置Ｎ３に対応付けられた重みの値を最大値に設定する）。
【０１２２】
そして、ノード装置Ｎ５にとって、ＯＬＳ（すなわちステップＳ１０５で最初に当該データフレームをノード装置Ｎ５が受信したときのＬＳであるノード装置Ｎ４）以外で隣接しているノード装置は、既に送信失敗と判明したノード装置Ｎ３のみである。したがって、もはやＬＤとして選択可能な隣接ノード装置がない。
【０１２３】
よってステップＳ１０８でノード装置Ｎ５は、ＯＬＳであるノード装置Ｎ４にデータフレームを送り返す。ステップＳ１０８はバックトラック動作であり、バックトラック動作によってノード装置Ｎ５は、「ノード装置Ｎ７をＧＤとするデータフレームの送信においては、ノード装置Ｎ５自身から先の経路は袋小路（dead end）になっている」ということをノード装置Ｎ４に知らせることができる。
【０１２４】
すると、ステップＳ１０８でノード装置Ｎ４は、「ノード装置Ｎ４自身がステップＳ１０５で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップＳ１０８におけるノード装置Ｎ４は、図５においてノードγへのデータフレームの送信に（Ｄ２）のようにして失敗したノードβに相当する。よって、ノード装置Ｎ４は、図５と同様にして重み付けテーブル１０４−ｈ４−Ｎ４を更新する（具体的には、ステップＳ１０５の送信のＬＤであるノード装置Ｎ５に対応付けられた重みの値を最大値に設定する）。
【０１２５】
しかし、図５のノードβには、ノードγへのデータフレームの送信に失敗しても、まだＬＤとして選択可能なノードδ等が残っていたが、図６のステップＳ１０８のノード装置Ｎ４にとっては、ＬＤとして選択可能な隣接ノード装置が残っていない。すなわち、ＯＬＳ以外の２つの隣接ノード装置Ｎ７とＮ５は、ステップＳ１０４とＳ１０５でそれぞれＬＤとして選択済みであり、両者とも送信失敗という結果になることが既に判明している。
【０１２６】
したがって、ステップＳ１０９でノード装置Ｎ４は、ＯＬＳであるノード装置Ｎ３にデータフレームを送り返す。ステップＳ１０９もバックトラック動作であり、ノード装置Ｎ４はノード装置Ｎ３に「ノード装置Ｎ７をＧＤとするデータフレームの送信においては、ノード装置Ｎ４自身から先の経路は袋小路になっている」ということを知らせることができる。
【０１２７】
すると、ステップＳ１０９でノード装置Ｎ３は、「ノード装置Ｎ３自身がステップＳ１０７で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップＳ１０９におけるノード装置Ｎ４は、図５においてループしてきたデータフレームをノードζから受信したノードβに相当する。よって、ノード装置Ｎ３は、図５と同様にして重み付けテーブル１０４−ｈ３−Ｎ３を更新する（具体的には、ステップＳ１０７の送信のＬＤであるノード装置Ｎ５に対応付けられた重みの値を最大値に設定する）。
【０１２８】
しかし、図５のノードβには、ノードδへのデータフレームの送信が失敗すると判明しても、まだＬＤとして選択可能なノードεが残っていたが、図６のステップＳ１０９のノード装置Ｎ３にとっては、ＬＤとして選択可能な隣接ノード装置が残っていない。すなわち、ＯＬＳ以外の２つの隣接ノード装置Ｎ４とＮ５は、ステップＳ１０３とＳ１０７でそれぞれＬＤとして選択済みであり、両者とも送信失敗という結果になることが既に判明している。
【０１２９】
したがって、ステップＳ１１０でノード装置Ｎ３は、ＯＬＳであるノード装置Ｎ２にデータフレームを送り返す。ステップＳ１１０もバックトラック動作であり、ノード装置Ｎ３はノード装置Ｎ２に「ノード装置Ｎ７をＧＤとするデータフレームの送信においては、ノード装置Ｎ３自身から先の経路は袋小路になっている」ということを知らせることができる。
【０１３０】
すると、ステップＳ１１０でノード装置Ｎ２は、「ノード装置Ｎ２自身がステップＳ１０２で送信したのと同じデータフレームを受信した」と認識する。つまり、ステップＳ１１０におけるノード装置Ｎ２は、図５でノードγへのデータフレームの送信に（Ｄ２）のようにして失敗したノードβに相当する。よって、ノード装置Ｎ２は、図５と同様にして重み付けテーブル１０４−ｈ２−Ｎ２を更新する（具体的には、ステップＳ１０２の送信のＬＤであるノード装置Ｎ３に対応付けられた重みの値を最大値に設定する）。
【０１３１】
そして、ステップＳ１１１でノード装置Ｎ２は、データフレームを転送するためのＬＤとして、まだ試していない他の隣接ノード装置Ｎ６を選択し、ノード装置Ｎ６にデータフレームを送信する。
【０１３２】
ノード装置Ｎ６には、ステップＳ１１１で送信されたデータフレームのＬＳであるノード装置Ｎ２のほかには、ＧＤでもあるノード装置Ｎ７のみが隣接している。
そこで、ステップＳ１１２でノード装置Ｎ６は、ステップＳ１１１で受信したデータフレームを転送するためのＬＤとしてノード装置Ｎ７を選択し、ノード装置Ｎ７にデータフレームを送信する。
【０１３３】
以上のようにして、ネットワーク１内に障害が発生しても、各ノード装置が自律分散的に振る舞うことで、データフレームは成功裡にＧＤまで到達する。
また、データフレームの転送において、局所的に不適切なノード装置がＬＤとして選択されても、最終的にはネットワーク全体としては、ＧＳからＧＤに至る経路が選択される。なぜなら、各ノード装置がＬＤとして選択可能なノード装置を次々と選択し、選択可能なノード装置がなくなればバックトラック動作をするからである。
【０１３４】
具体的には、図６の例では、ステップＳ１０２でノード装置Ｎ２がノード装置Ｎ３をＬＤとして選択したことは、結果的には不適切であるとステップＳ１１０で判明する。しかし、ステップＳ１０３〜Ｓ１１０の動作により、ネットワーク１全体としては、最終的にはＧＳからＧＤに至る経路〈Ｎ１，Ｎ２，Ｎ６，Ｎ７〉の選択に成功する。
【０１３５】
こうして選択された経路は学習され、次回以降のデータフレームの転送の効率化に寄与する。学習による効率化について具体的に説明すれば次のとおりである。
ステップＳ１１０でのデータフレームの受信の結果、ノード装置Ｎ２は重み付けテーブル１０４−ｈ２−Ｎ２の学習を行い、ノード装置Ｎ３に対応付けられた重みを最大値に設定している。したがって、ノード装置Ｎ２は、ノード装置Ｎ７をＧＤとする新たなデータフレームを隣接ノード装置Ｎ１から受信すると、最初からノード装置Ｎ６をＬＤとして選択する。つまり、ネットワーク１全体としては、自律分散的な学習の結果、バックトラックを含む試行錯誤なしに、データフレームを効率的に経路〈Ｎ１，Ｎ２，Ｎ６，Ｎ７〉によりＧＤまで送信することが可能となる。
【０１３６】
さらに、この実施形態によれば、不適切なＬＤの選択の影響または局所的な障害の影響は、ネットワーク１全体には及ばず、局所的に限定される。すなわち、この実施形態によれば、例えばノード装置Ｎ４とＮ７の間のリンクに障害が発生しても、代替経路を問い合わせるための制御フレームがネットワーク１全体の全ノード装置へとフラッディングされたりはしない。よって、この実施形態によれば、障害やループが局所的に発生しても、ネットワーク１全体にブロードキャストストームを引き起こすといった事態には陥らない。
【０１３７】
また、図６の例においてノード装置Ｎ１は、ノード装置Ｎ４とＮ７の間のリンクの障害や、ループ〈Ｎ３，Ｎ４，Ｎ５，Ｎ３〉については全く認識することがないのは明らかである。このことは、不適切なＬＤの選択や局所的な障害の影響が、局所的に限定され、ネットワーク１全体には及ばないということを意味している。
【０１３８】
問題の影響が局所的に限定されるということは、局所的な問題がネットワーク１全体にポジティブにフィードバックされて発散することがないということであり、ネットワーク１が系として安定しているということである。問題が局所的に限定されることの別の例を挙げれば、例えば以下のとおりである。
【０１３９】
例えば、仮にネットワーク１においてノード装置Ｎ５とＮ７の間にもリンクが存在し、重み付けテーブル１０４−ｈ５−Ｎ５においてノード装置Ｎ３よりもノード装置Ｎ７の方が軽い重みに対応づけられているとする。すると、ステップＳ１０５の直後にノード装置Ｎ５がノード装置Ｎ７をＬＤとして選択してデータフレームをノード装置Ｎ７に送信する。その結果、ステップＳ１０８〜Ｓ１１２の送信は行われず、ノード装置Ｎ１だけでなくノード装置Ｎ２とＮ３も、障害の発生を全く認識しない。このように、リンクの障害やループの発生などの問題は、問題が生じた場所に応じて最小限の局所的な範囲にしか影響を及ぼさない。
【０１４０】
続いて、以上説明したノード装置１００の構成および動作、ならびにネットワーク１全体で実現される自律分散協調動作について、更に詳細に説明してゆく。
この実施形態におけるデータフレームは、図７のデータフレーム３０２のように、ＬＤ、ＬＳ、ＧＤ、ＧＳ、ＦＩＤ、タイプ、長さの各フィールドを含むヘッダと、ペイロードとを含む。例えば図５のデータフレーム３０１も、データフレーム３０２と同様の形式である。
【０１４１】
データフレーム３０２のＬＤフィールド、ＬＳフィールド、ＧＤフィールド、およびＧＳフィールドには、データフレーム３０２のＬＤ、ＬＳ、ＧＤ、およびＧＳである各ノード装置のノードＩＤがそれぞれ指定される。また、データフレーム３０２のＦＩＤフィールドには、データフレーム３０２のＧＳであるノード装置が生成してデータフレーム３０２に割り当てたＦＩＤが指定される。
【０１４２】
データフレーム３０２のタイプフィールドには、「データフレーム」というタイプを示す所定の定数が指定される。また、データフレーム３０２の長さフィールドには、ペイロードの長さが指定される。データフレーム３０２のペイロードは、データフレーム３０２が定義されるプロトコルよりも上位の層のプロトコルのＰＤＵである。
【０１４３】
例えば、ＭＡＣ副層を仮想的にさらに２つの副層に分割することを想定する。この実施形態のフレームは、この仮想的な２つの副層のうちの下の方の副層で定義されてもよく、すなわち、ＭＡＣ副層で定義される他のプロトコル（例えばイーサネットなど）のＰＤＵをペイロードに含んでもよい。換言すれば、この実施形態のフレームは、第２層で定義されるイーサネットフレームをカプセル化するフレームであってもよい。この場合、上位層処理部１１１はイーサネットフレームを処理する処理部であるから、公知のＭＡＣチップを用いて実現することもできる。
【０１４４】
以下では説明の便宜上、データフレーム３０２のペイロードは、ＭＡＣ層プロトコルのフレーム（具体的には例えばイーサネットフレーム）であるものとする。
しかし、もちろん実施形態によっては、データフレーム３０２のペイロードは、ネットワーク層（第３層）以上で定義されるプロトコルのＰＤＵであってもよいし、特定の通信プロトコルとは無関係な生のデータであってもよい。例えば、データフレーム３０２のペイロードがＩＰ（Internet Protocol）データグラムであってもよい。この場合、上位層処理部１１１はＩＰデータグラムを処理する処理部である。
【０１４５】
データフレーム３０２の形式は以上説明したとおりであるが、具体的な値を使ってより詳しく例示すれば、データフレーム３０３および３０４のごとくである。
データフレーム３０３は、図６のステップＳ１０２でノード装置Ｎ２がノード装置Ｎ３に送信するデータフレームである。データフレーム３０３の具体的な内容は以下のとおりである。
【０１４６】
・ＬＤフィールドには、ステップＳ１０２の送信においてＬＤとして選択されたノード装置Ｎ３のノードＩＤ（すなわちＮ３）が指定されている。
・ＬＳフィールドには、ステップＳ１０２の送信におけるＬＳであるノード装置Ｎ２のノードＩＤ（すなわちＮ２）が指定されている。
【０１４７】
・ＧＤフィールドには、ＧＳであるノード装置Ｎ１がステップＳ１０１の送信のときに指定したノード装置Ｎ７のノードＩＤ（すなわちＮ７）が指定されている。
・ＧＳフィールドには、ＧＳであるノード装置Ｎ１のノードＩＤ（すなわちＮ１）が指定されている。
【０１４８】
・ＦＩＤフィールドには、ＧＳであるノード装置Ｎ１が生成したＦＩＤ（以下Ｆａとする）が指定されている。
・タイプフィールドには、「データフレーム」というタイプを示す所定の定数Ｄが指定されている。例えば、タイプは２ビットによって表すこともでき、Ｄ＝（００）２でもよい。
【０１４９】
・長さフィールドには、データフレーム３０２のペイロードの長さＰａが指定される。なお、長さは例えばバイト単位で表されてもよいし、その他の単位で表されてもよい。
・ペイロードとして、ＭＡＣ層プロトコルのフレーム（例えばイーサネットフレーム）が含まれる。
【０１５０】
また、データフレーム３０３を受信したノード装置Ｎ３が図６のステップＳ１０３でノード装置Ｎ４に送信するのが、図７のデータフレーム３０４である。データフレーム３０４の具体的な内容は以下のとおりである。
【０１５１】
・ＬＤフィールドには、ステップＳ１０３の送信においてＬＤとして選択されたノード装置Ｎ４のノードＩＤ（すなわちＮ４）が指定されている。つまり、転送にあたって、ノード装置Ｎ３はＬＤフィールドを書き換える。
【０１５２】
・ＬＳフィールドには、ステップＳ１０３の送信におけるＬＳであるノード装置Ｎ３のノードＩＤ（すなわちＮ３）が指定されている。つまり、転送にあたって、ノード装置Ｎ３はＬＳフィールドを書き換え、自ノードＩＤを設定する。
【０１５３】
・ＧＤ、ＧＳ、ＦＩＤ、タイプ、長さの各フィールドと、ペイロードの内容は、ノード装置Ｎ３が受信したデータフレーム３０３と同じである。
また、この実施形態におけるハローフレームは、図７のハローフレーム３１１のように、ＬＤ、ＬＳ、ＧＤ、ＧＳ、ＦＩＤ、タイプの各フィールドを含むヘッダを有するが、ペイロードを持たない。ハローフレーム３１１の具体例はハローフレーム３１２であり、ハローフレーム３１２は後述の図３０のステップＳ１２０３でノード装置Ｎ３により送信されるものである。
【０１５４】
ハローフレーム３１１のＬＤフィールドには、ハローフレーム３１１を送信するノード装置に隣接するすべてのノード装置へのブロードキャストを表す特殊な値が指定される。なおここでの「ブロードキャスト」は「隣接するすべてのノード装置へのブロードキャスト」であり、「ネットワーク１全体へのフラッディング」ではないので注意されたい。
【０１５５】
以下、説明の便宜上、この実施形態においてはノードＩＤが３バイトで表されるものとし、「０ｘ」は１６進数を表すものとする。また、０ｘ００００００と０ｘＦＦＦＦＦＦは予約されており、通常のノードＩＤとしては使われないものとする。
【０１５６】
この実施形態におけるすべてのハローフレームでは、ハローフレーム３１２と同様、ＬＤフィールドに、当該ハローフレームを送信するノード装置に隣接するすべてのノード装置へのブロードキャストを表す特殊な値として、０ｘＦＦＦＦＦＦが指定されている。
【０１５７】
ハローフレーム３１１のＬＳフィールドには、ハローフレーム３１１を送信するノード装置自身のノードＩＤが指定される。よって、ノード装置Ｎ３が送信するハローフレーム３１２のＬＳフィールドには、ノード装置Ｎ３のノードＩＤであるＮ３が指定される。
【０１５８】
また、この実施形態におけるすべてのハローフレームでは、ＧＤフィールドに、ヌル（null）を表す特殊な値０ｘ００００００が指定される。なぜなら、ハローフレームは隣接ノード装置が利用するだけであり、転送されないからである。
【０１５９】
ハローフレーム３１１のＧＳフィールドには、ＬＳフィールドと同じく、ハローフレーム３１１を送信するノード装置自身のノードＩＤが指定される。よって、ハローフレーム３１２のＧＳフィールドには、ノード装置Ｎ３のノードＩＤであるＮ３が指定される。
【０１６０】
ハローフレーム３１１のＦＩＤフィールドには、ハローフレーム３１１を送信するノード装置が生成してハローフレーム３１１に割り当てたＦＩＤが指定される。同様に、ハローフレーム３１２のＦＩＤフィールドには、ハローフレーム３１２を送信するノード装置Ｎ３が生成してハローフレーム３１２に割り当てたＦＩＤ（以下Ｆｂとする）が指定される。
【０１６１】
ハローフレーム３１１のタイプフィールドには、「ハローフレーム」というタイプを示す所定の定数が指定される。具体的には、「ハローフレーム」というタイプは、ハローフレーム３１２に例示するように所定の定数Ｈにより表され、例えばＨ＝（１０）２でもよい。
【０１６２】
また、この実施形態におけるＡＣＫフレームは、図７のＡＣＫフレーム３２１のように、ＬＤ、ＬＳ、ＧＤ、ＧＳ、ＦＩＤ、タイプの各フィールドを含むヘッダを有するが、ペイロードを持たない。ＡＣＫフレーム３２１の具体例はＡＣＫフレーム３２２である。また、ＡＣＫフレーム３２２は、図６のステップＳ１０２でノード装置Ｎ２がノード装置Ｎ３にデータフレーム３０３を送信したとき、ノード装置Ｎ３がノード装置Ｎ２に返信するＡＣＫフレームである。後述の図３０では、このノード装置Ｎ３からノード装置Ｎ２へのＡＣＫフレーム３２２の返信をステップＳ１０２ａとして表している。
【０１６３】
ＡＣＫフレーム３２１のＬＤフィールドには、ＡＣＫフレーム３２１の送信の契機となったデータフレームを送信した隣接ノード装置のノードＩＤが指定される。よって、例えばＡＣＫフレーム３２２のＬＤフィールドには、ＡＣＫフレーム３２２をノード装置Ｎ３が送信する契機となったデータフレーム３０３を送信した、ノード装置Ｎ３の隣接ノード装置Ｎ２のノードＩＤであるＮ２が指定される。
【０１６４】
ＡＣＫフレーム３２１のＬＳフィールドには、ＡＣＫフレーム３２１を送信するノード装置自身のノードＩＤが指定される。よって、ノード装置Ｎ３が送信するＡＣＫフレーム３２２のＬＳフィールドには、ノード装置Ｎ３のノードＩＤであるＮ３が指定される。
【０１６５】
また、ハローフレームと同様にＡＣＫフレームも転送されないので、この実施形態におけるすべてのＡＣＫフレームでは、ＧＤフィールドに、ヌルを表す特殊な値０ｘ００００００が指定される。
【０１６６】
ＡＣＫフレーム３２１のＧＳフィールドとＦＩＤフィールドには、ＡＣＫフレーム３２１の送信の契機となったデータフレームのＧＳフィールドとＦＩＤフィールドの値がコピーされる。上記のように、ＧＳフィールドとＦＩＤフィールドの値の組み合わせにより、データフレームがネットワーク内で一意に識別される。よって、ＡＣＫフレーム３２１を送信するノード装置が、受信したデータフレームから値をコピーすることで、ＡＣＫフレーム３２１がどのデータフレームに対するものなのかを、ＡＣＫフレーム３２１を受信したノード装置において識別することが可能となる。
【０１６７】
よって、例えばデータフレーム３０３の受信を契機として送信されるＡＣＫフレーム３２２では、ＧＳフィールドとＦＩＤフィールドの値は、データフレーム３０３と同じく、それぞれＮ１とＦａである。
【０１６８】
ＡＣＫフレーム３２１のタイプフィールドには、「ＡＣＫフレーム」というタイプを示す所定の定数が指定される。具体的には、「ＡＣＫフレーム」というタイプは、ＡＣＫフレーム３２２に例示するように所定の定数Ａにより表され、例えばＡ＝（１１）２でもよい。
【０１６９】
なお、図７に示したフレームの形式は一例にすぎず、実施形態に応じて、フレームに含まれるフィールドの並び順は適宜決めることができ、また、不図示の他のフィールドをフレームが含んでいてもよい。また、フレームがＦＣＳ（Frame Check Sequence）などのトレイラをさらに含んでいてもよい。
【０１７０】
また、以下では記載の簡単化のため、混乱のおそれがない場合は、例えば「ＬＤフィールド」を単に「ＬＤ」と称することもある。他のフィールドについても同様である。
図８は、図３のバッファ部１０９に格納されるデータの例を示す図である。バッファ部１０９は、受信部１０１が受信した個々のデータフレームにそれぞれ対応する複数のエントリを含む。そして、各エントリは、タイムアウト時刻と受信したデータフレームを含む。
【０１７１】
図８は、ノード装置Ｎ３のバッファ部１０９−Ｎ３内のあるエントリを例示している。具体的には、図６のステップＳ１０２において、ノード装置Ｎ２からノード装置Ｎ３が図７のデータフレーム３０３を受信すると、バッファ部１０９−Ｎ３には、タイムアウト時刻ＴＩ３，ｊとデータフレーム３０３とを含むエントリが作成される。バッファ部１０９におけるエントリの作成の詳細は、図１４とともに後述する。また、タイムアウト時刻ＴＩ３，ｊの意味は次のとおりである。
【０１７２】
ノード装置Ｎ３は、ステップＳ１０２で受信したデータフレーム３０３のヘッダを、ステップＳ１０３で図７のデータフレーム３０４のように書き換える。そしてノード装置Ｎ３は、ステップＳ１０３でデータフレーム３０４を送信する。
【０１７３】
図８のタイムアウト時刻ＴＩ３，ｊは、ノード装置Ｎ３が、データフレーム３０４を送信した後、データフレーム３０４に対するＡＣＫフレームの受信をいつまで待つのかを示す。つまり、ノード装置Ｎ３は、タイムアウト時刻ＴＩ３，ｊまでにデータフレーム３０４に対するＡＣＫフレームをノード装置Ｎ４から受信することができなければ、タイムアウトして、ノード装置Ｎ４へのデータフレーム３０４の送信に失敗したと判断する。
【０１７４】
なお、詳しくは図２２、図２６、および図２８に示すように、バッファ部１０９に設定されるタイムアウト時刻は、上書きされることもある。
例えば、図６のステップＳ１０４でノード装置Ｎ７へのデータフレームの送信に失敗したノード装置Ｎ４は、ステップＳ１０５において、ノード装置Ｎ３から受信したデータフレームに対応するバッファ部１０９−Ｎ４内のタイムアウト時刻を更新する。更新後のタイムアウト時刻は、具体的には、ステップＳ１０５でノード装置Ｎ５に送信したデータフレームへのＡＣＫフレームの受信をいつまでノード装置Ｎ４が待つかを表す。
【０１７５】
図９は、図３の隣接ノード管理テーブル１０３の例を示す図である。隣接ノード管理テーブル１０３には、ノードＩＤフィールドと最終更新時刻フィールドがある。
例えば、図１のネットワーク１では、ノード装置Ｎ２にはノード装置Ｎ１、Ｎ３、およびＮ６が隣接している。したがって、ノード装置Ｎ２の隣接ノード管理テーブル１０３−Ｎ２は、これら３つの隣接ノード装置Ｎ１、Ｎ３、およびＮ６にそれぞれ対応する３つのエントリがある。そして、隣接ノード装置Ｎｉ（ｉ＝１，３，６）に対応する各エントリにおいて、ノードＩＤフィールドには隣接ノード装置ＮｉのノードＩＤであるＮｉが格納されており、最終更新時刻フィールドには、当該エントリが最後に更新された時刻ＴＡ２，ｉが格納されている。
【０１７６】
また、図１のネットワーク１では、ノード装置Ｎ３にはノード装置Ｎ２、Ｎ４、およびＮ５が隣接している。したがって、ノード装置Ｎ３の隣接ノード管理テーブル１０３−Ｎ３は、これら３つの隣接ノード装置Ｎ２、Ｎ４、およびＮ５にそれぞれ対応する３つのエントリがある。そして、隣接ノード装置Ｎｉ（ｉ＝２，４，５）に対応する各エントリにおいて、ノードＩＤフィールドには隣接ノード装置ＮｉのノードＩＤであるＮｉが格納されており、最終更新時刻フィールドには、当該エントリが最後に更新された時刻ＴＡ３，ｉが格納されている。
【０１７７】
図１０は、図３の重み付けテーブル１０４の例を示す図である。図１０は、具体例として、図１のノード装置Ｎ３の重み付けテーブル１０４−Ｎ３を示している。
図３に示すとおり、「重み付けテーブル１０４」とは、ＧＤごとに管理される複数の重み付けテーブル１０４−１〜１０４−Ｍの総称である。各重み付けテーブル１０４−ｉ（１≦ｉ≦Ｍ）は、対応するＧＤを記憶している。
【０１７８】
そして、各重み付けテーブル１０４−ｉ（１≦ｉ≦Ｍ）は１つ以上のエントリを有し、各エントリは、最終更新時刻フィールドとＬＤフィールドと重みフィールドを有する。最終更新時刻フィールドには重みの学習のためにエントリが最後に更新された時刻が格納され、ＬＤフィールドには隣接ノード装置のノードＩＤが格納され、重みフィールドには当該隣接ノード装置に対応付けられた重みの値が格納される。
【０１７９】
図１０の例では、１枚目の重み付けテーブル１０４−１−Ｎ３は、ノード装置Ｎ７がＧＤとして指定されているデータフレームの送信用のテーブルなので、ＧＤとしてノード装置Ｎ７のノードＩＤであるＮ７を記憶している。
【０１８０】
また、図１のネットワーク１では、ノード装置Ｎ３にはノード装置Ｎ２、Ｎ４、およびＮ５が隣接している。したがって、重み付けテーブル１０４−１−Ｎ３は、これら３つの隣接ノード装置Ｎ２、Ｎ４、およびＮ５にそれぞれ対応する３つのエントリを有する。重み付けテーブル１０４−１−Ｎ３において隣接ノード装置Ｎｉ（ｉ＝２，４，５）に対応する各エントリの内容は、次のとおりである。
【０１８１】
・最終更新時刻フィールドには、エントリの最終更新時刻ＴＷ３，７，ｉが格納されている。
・ＬＤフィールドには、隣接ノード装置ＮｉのノードＩＤであるＮｉが格納されている。
【０１８２】
・重みフィールドには、隣接ノード装置Ｎｉに対応付けられる重みＷ３，７，ｉが格納されている。
すなわち、重みＷ３，７，ｉは、ノード装置Ｎ７（つまり重み付けテーブル１０４−１−Ｎ３に対応するＧＤ）をＧＤとして指定するデータフレームをノード装置Ｎ３が送信する場合に参照される、隣接ノード装置Ｎｉに対応する重みである。
【０１８３】
同様に、図１０の例では、２枚目の重み付けテーブル１０４−２−Ｎ３は、ノード装置Ｎ４がＧＤとして指定されているデータフレームの送信用のテーブルなので、ＧＤとしてノード装置Ｎ４のノードＩＤであるＮ４を記憶している。
【０１８４】
そして、図１のネットワーク１では、ノード装置Ｎ３にはノード装置Ｎ２、Ｎ４、およびＮ５が隣接しているので、重み付けテーブル１０４−２−Ｎ３も、これら３つの隣接ノード装置Ｎ２、Ｎ４、およびＮ５にそれぞれ対応する３つのエントリを有する。重み付けテーブル１０４−１−Ｎ３において隣接ノード装置Ｎｉ（ｉ＝２，４，５）に対応する各エントリの内容は、次のとおりである。
【０１８５】
・最終更新時刻フィールドには、エントリの最終更新時刻ＴＷ３，４，ｉが格納されている。
・ＬＤフィールドには、隣接ノード装置ＮｉのノードＩＤであるＮｉが格納されている。
【０１８６】
・重みフィールドには、隣接ノード装置Ｎｉに対応付けられる重みＷ３，４，ｉが格納されている。
もちろん、重み付けテーブル１０４−Ｎ３には、さらに別のＧＤと対応づけられた重み付けテーブル１０４−ｊ−Ｎ３（ｊ＞２）が含まれていてもよい。
【０１８７】
なお、次の点は注意すべきである。すなわち、重み付けテーブル１０４は、同一のＧＤであれば、たとえＦＩＤとＧＳの組み合わせが異なるデータフレームを送信したとしても、送信の度に、送信先となったＬＤの重みが更新される。例えば、あるデータフレームの送信時に、リンク障害のため特定のＬＤの重みが大きくなっても（優先度が低くなっても）、すぐに別データフレーム（ＧＤとＬＤは同一）の送信で、リンク障害が解消されていて送信成功となれば、該ＬＤの重みは小さくなる（優先度は高くなる）。逆に、複数の異なるデータフレーム（ＧＤとＬＤは同一）が立て続けに、リンク障害のため送信失敗となれば、たとえ同一のＦＩＤとＧＳの組み合わせのデータフレームは１度しか送信を試していなくても、該当のＬＤの重みが最大値になってしまうこともありうる。
【０１８８】
図１１は、図１０の重み付けテーブル１０４−１−Ｎ３の変化を説明する図である。図１１の例では、Ｔａ＜Ｔｂ＜Ｔｃ＜Ｔｄ＜Ｔｅである。
例えば、図６のステップＳ１０２でノード装置Ｎ２からデータフレームを受信した時点では、ノード装置Ｎ３の重み付けテーブル１０４−Ｎ３には、ノード装置Ｎ７に対応する重み付けテーブル１０４−１−Ｎ３が存在しなかったとする。そして、ステップＳ１０２の受信を契機として、以下のような内容の新たな重み付けテーブル１０４−１−Ｎ３が重み付けテーブル１０４−Ｎ３に作成されたとする。
【０１８９】
・３つのエントリの最終更新時刻はいずれも時刻Ｔａである。
・３つのエントリにおいて、隣接ノード装置Ｎｉ（ｉ＝２，４，５）に対応付けられる重みＷ３，７，ｉは、いずれも０．５である。
【０１９０】
なお、図６に関しては説明の簡単化のため、「２つの隣接ノード装置Ｎ４とＮ５のうちでノード装置Ｎ４の方が、重み付けテーブル１０４−ｈ３−Ｎ３において、より軽い重みと対応付けられているとする」と説明した。つまり、図１０と図１１はｈ３＝１の例であり、図６の説明ではＷ３，７，４＜Ｗ３，７，５と仮定している。
【０１９１】
しかし、例えば図１１に示すように、Ｗ３，７，２＝Ｗ３，７，４＝Ｗ３，７，５＝０．５という場合もありうる。図１１の例では、ノード装置Ｎ４とＮ５が同じ重み０．５に対応付けられているので、ノード装置Ｎ３はステップＳ１０３での送信のＬＤとしてノード装置Ｎ４とＮ５のいずれを選ぶこともできるが、仮に、図６の例と同様に、ノード装置Ｎ４をＬＤとして選んだとする。
【０１９２】
すると、ステップＳ１０３でノード装置Ｎ３がノード装置Ｎ４にデータフレームを送信する。その後、図３０においてステップＳ１０３ａとして示すようにノード装置Ｎ４がノード装置Ｎ３にＡＣＫフレームを送信すると、ノード装置Ｎ３は、ノード装置Ｎ４へのデータフレームの送信が成功したと認識する。
【０１９３】
そして、図５の例と同様にして、ノード装置Ｎ３は、ノード装置Ｎ４に対応付けられた重みＷ３，７，４の値を小さくする。図１１の例では、具体的には、ノード装置Ｎ３はＷ３，７，４の値を０．５から０．４に更新する。また、ノード装置Ｎ３は、ノード装置Ｎ４に対応するエントリの最終更新時刻フィールドに、現在時刻Ｔｂを設定する。
【０１９４】
その後、図６に示すように、ノード装置Ｎ３はステップＳ１０６で再び同一のデータフレームを受信する。その結果、ノード装置Ｎ３は、図６に関して説明したように、重み付けテーブル１０４−１−Ｎ３においてノード装置Ｎ４と対応付けられている重みＷ３，７，４の値を、０．４から最大値である１．０に更新する。また、ノード装置Ｎ３は、ノード装置Ｎ４に対応するエントリの最終更新時刻フィールドに、現在時刻Ｔｃを設定する。
【０１９５】
続いて、図６のステップＳ１０７に示すように、ノード装置Ｎ３はノード装置Ｎ５をＬＤとして選択してデータフレームを送信する。その後、図３０においてステップＳ１０７ａとして示すようにノード装置Ｎ５がノード装置Ｎ３にＡＣＫフレームを送信すると、ノード装置Ｎ３は、ノード装置Ｎ５へのデータフレームの送信が成功したと認識する。
【０１９６】
そして、図５の例と同様にして、ノード装置Ｎ３は、ノード装置Ｎ５に対応付けられた重みＷ３，７，５の値を小さくする。図１１の例では、具体的には、ノード装置Ｎ３はＷ３，７，５の値を０．５から０．４に更新する。また、ノード装置Ｎ３は、ノード装置Ｎ５に対応するエントリの最終更新時刻フィールドに、現在時刻Ｔｄを設定する。
【０１９７】
その後、図６に示すように、ノード装置Ｎ３はステップＳ１０９で再び同一のデータフレームを受信する。その結果、図６に関して説明したように、重み付けテーブル１０４−１−Ｎ３においてノード装置Ｎ５と対応付けられている重みＷ３，７，５の値を、０．４から最大値である１．０に更新する。また、ノード装置Ｎ３は、ノード装置Ｎ５に対応するエントリの最終更新時刻フィールドに、現在時刻Ｔｅを設定する。
【０１９８】
以上のように、重み付けテーブル１０４−１−Ｎ３は、ＡＣＫフレームの受信を契機として、あるいは、送信済みのデータフレームと同一のデータフレームの受信を契機として、更新される。
【０１９９】
図１２と図１３は、図３のＦＩＤ管理テーブル１０５の例を示す図である。図１２と図１３に示すように、ＦＩＤ管理テーブル１０５には、ＦＩＤ、ＧＳ、ＬＤ、ＯＬＳ、最終更新時刻の各フィールドがある。
【０２００】
ＦＩＤ管理テーブル１０５におけるＦＩＤフィールドとＧＳフィールドは、データフレームを一意に識別するためのフィールドであり、受信したデータフレームのＦＩＤフィールドとＧＳフィールドから値がそれぞれコピーされる。
【０２０１】
ＦＩＤ管理テーブル１０５のＬＤフィールドには、ＦＩＤフィールドとＧＳフィールドの値により識別されるデータフレームを送信するために、最後にＬＤとして選択した隣接ノード装置のノードＩＤが格納される。
【０２０２】
また、ＦＩＤ管理テーブル１０５のＯＬＳフィールドには、ＦＩＤフィールドとＧＳフィールドの値により識別されるデータフレームを最初に受信したときに当該データフレームのＬＳフィールドに指定されていた隣接ノード装置のノードＩＤが格納される。ＯＬＳフィールドは、データフレームの転送のためにＬＤを選択するにあたって、ＬＤの候補の中からＯＬＳを除くためにも利用され、バックトラック動作のときのＬＤを決定するためにも利用される。
そして、ＦＩＤ管理テーブル１０５の最終更新時刻フィールドには、エントリが最後に更新された時刻が格納される。
【０２０３】
さて、図１２と図１３は、図６のステップＳ１０１〜Ｓ１１２での各ノード装置のＦＩＤ管理テーブル１０５を具体例として示している。以下、ステップＳ１０１〜Ｓ１１２がそれぞれ実行される時刻をＴＦ１０１〜ＴＦ１１２と表す。
【０２０４】
ステップＳ１０１でノード装置Ｎ１がノード装置Ｎ２にデータフレームを送信するとき、ノード装置Ｎ１はＦＩＤ管理テーブル１０５−Ｎ１に新たなエントリＥ１を作成する。
そして、ノード装置Ｎ１は、エントリＥ１のＦＩＤフィールドとＧＳフィールドに、送信したデータフレームのＦＩＤとＧＳの値を設定する。
【０２０５】
ここで、データフレームのＧＳとＦＩＤの値は、前述のとおり、データフレームがネットワーク１内を転送されても書き換えられない。したがって、図６でネットワーク１内をステップＳ１０１〜Ｓ１１２で送信されるデータフレームのＦＩＤとＧＳの値は、図７のデータフレーム３０３および３０４と同じく、それぞれＦａとＮ１である。よって、ステップＳ１０１でノード装置Ｎ１は、エントリＥ１のＦＩＤフィールドとＧＳフィールドに、それぞれＦａとＮ１という値を設定する。
【０２０６】
なお、以下の各ステップＳ１０２〜Ｓ１１２で他のノード装置がそれぞれのＦＩＤ管理テーブル１０５のエントリのＦＩＤフィールドとＧＳフィールドに設定する値も、同じくＦａとＮ１である。よって、以下ではＦＩＤフィールドとＧＳフィールドに関する説明を省略する。
【０２０７】
また、ステップＳ１０１でノード装置Ｎ１は、ＬＤとして選択したノード装置Ｎ２のノードＩＤであるＮ２を、エントリＥ１のＬＤフィールドに設定する。
ところで、ＧＳとＦＩＤの値の組により一意に識別される、ある特定のデータフレームに関して、ＯＬＳとは、当該特定のデータフレームを最初に受信したときの当該特定のデータフレームのＬＳに指定されたノードＩＤで識別される隣接ノード装置のことである。
【０２０８】
しかしこのようにＯＬＳを定義すると、例えばノード装置Ｎ１がＧＳとなってデータフレームを送信する場合に、ノード装置Ｎ１自身にとっては、送信したデータフレームに関してＯＬＳが未定義となってしまう。そこで、以下ではＯＬＳの定義を拡張する。具体的には、「ノード装置Ｎｉ自身がＧＳとなってデータフレームを送信する場合には、当該データフレームに関するノード装置Ｎｉ自身にとってのＯＬＳとは、ノード装置Ｎｉ自身である」と定義する。
【０２０９】
換言すれば、ＯＬＳとは、ノード装置Ｎｉ自身が直接認識しているネットワークの範囲内において、ノード装置Ｎｉにとってデータフレームの起源として認識されるノード装置である。なおここで、「ノード装置Ｎｉ自身が直接認識しているネットワークの範囲」とは、ノード装置Ｎｉから見てホップ数１以下の範囲であり、具体的にはノード装置Ｎｉ自身と、ノード装置Ｎｉの隣接ノード装置のみが含まれる。例えば、図２の例では、ノード装置Ｎ１０５自身が直接認識しているネットワークの範囲のみが実線で示されている。
【０２１０】
以上の拡張されたＯＬＳの定義より、ステップＳ１０１でノード装置Ｎ１がエントリＥ１のＯＬＳフィールドに設定する値は、ノード装置Ｎ１自身のノードＩＤ（すなわちＮ１）である。ノード装置Ｎ１は、もし今後ＧＳの値がＮ１でＦＩＤの値がＦａのデータフレームを受信することがあれば、以上のようにして作成したエントリＥ１に基づいて、「かつてノード装置Ｎ１自身が送信したデータフレームを受信した」と認識することができる。
【０２１１】
また、ステップＳ１０１でノード装置Ｎ１は、現在時刻ＴＦ１０１をエントリＥ１の最終更新時刻フィールドに設定する。なお、以下の各ステップＳ１０２〜Ｓ１１２で他のノード装置がそれぞれのＦＩＤ管理テーブル１０５のエントリの最終更新時刻フィールドに設定する値は、同様に、各ステップＳ１０２〜Ｓ１１２が実行される時刻ＴＦ１０２〜ＴＦ１１２である。よって、以下では最終更新時刻フィールドに関する説明も省略する。
【０２１２】
そして、ステップＳ１０１でノード装置Ｎ１からデータフレームを受信したノード装置Ｎ２は、ステップＳ１０２でノード装置Ｎ３にデータフレームを送信するときにＦＩＤ管理テーブル１０５−Ｎ２に新たなエントリＥ２を作成する。そして、ノード装置Ｎ２はエントリＥ２において、ＯＬＳフィールドにはＮ１と設定し、ＬＤフィールドにはＮ３と設定する。
【０２１３】
続いて、ステップＳ１０２でノード装置Ｎ２からデータフレームを受信したノード装置Ｎ３は、ステップＳ１０３でノード装置Ｎ４にデータフレームを送信するときにＦＩＤ管理テーブル１０５−Ｎ３に新たなエントリＥ３を作成する。そして、ノード装置Ｎ３はエントリＥ３において、ＯＬＳフィールドにはＮ２と設定し、ＬＤフィールドにはＮ４と設定する。
【０２１４】
続いて、ステップＳ１０３でノード装置Ｎ３からデータフレームを受信したノード装置Ｎ４は、ステップＳ１０４でノード装置Ｎ７にデータフレームを送信するときにＦＩＤ管理テーブル１０５−Ｎ４に新たなエントリＥ４を作成する。そして、ノード装置Ｎ４はエントリＥ４において、ＯＬＳフィールドにはＮ３と設定し、ＬＤフィールドにはＮ７と設定する。
【０２１５】
ところが、ステップＳ１０４での送信は、ノード装置Ｎ４とＮ７の間のリンクの障害のために失敗する。すなわち、ノード装置Ｎ４は、ノード装置Ｎ７からＡＣＫフレームを受信することができないため、タイムアウトする。その結果、ノード装置Ｎ４は、ステップＳ１０５のように、他の隣接ノード装置Ｎ５を次のＬＤとして再選択し、ノード装置Ｎ５にデータフレームを送信する。
【０２１６】
ここで、ステップＳ１０４とＳ１０５でそれぞれ送信されるデータフレームは、ＦＩＤの値がＦａでありＧＳの値がＮ１であるから、同一のデータフレームである。したがって、ステップＳ１０５でノード装置Ｎ４は、新たなエントリを作成するのではなく、既存のエントリＥ４を更新する。
【０２１７】
具体的には、ステップＳ１０５でノード装置Ｎ４は、エントリＥ４において、ＬＤフィールドの値をＮ５に上書きする。なお、ＧＳの値がＮ１でＦＩＤの値がＦａである同じデータフレームをノード装置Ｎ４が何度送信しようとも、「ノード装置Ｎ４が当該データフレームを最初に受信したのはノード装置Ｎ３からである」という事実は変わらない。よって、エントリＥ４のＯＬＳフィールドの値は、書き換えられることはなく、Ｎ３のままである。
【０２１８】
続いて、ステップＳ１０５でノード装置Ｎ４からデータフレームを受信したノード装置Ｎ５は、ステップＳ１０６でノード装置Ｎ３にデータフレームを送信するときにＦＩＤ管理テーブル１０５−Ｎ５に新たなエントリＥ５を作成する。そして、ノード装置Ｎ５はエントリＥ５において、ＯＬＳフィールドにはＮ４と設定し、ＬＤフィールドにはＮ３と設定する。
【０２１９】
そして、ステップＳ１０６でノード装置Ｎ５からデータフレームを受信したノード装置Ｎ３は、受信したデータフレームのＧＳとＦＩＤの値をキーにしてＦＩＤ管理テーブル１０５−Ｎ３を検索し、エントリＥ３を見つける。エントリＥ３が見つかったことから、ノード装置Ｎ３は、「ノード装置Ｎ３自身がかつてステップＳ１０３で送信したのと同一のデータフレームをステップＳ１０６で受信した」と認識することができる。
【０２２０】
したがって、ノード装置Ｎ３は、次のステップＳ１０７でデータフレームをノード装置Ｎ５に送信するに際して、ＦＩＤ管理テーブル１０５−Ｎ３に新たなエントリを作成するのではなく、既存のエントリＥ３を更新する。具体的には、ステップＳ１０７でノード装置Ｎ３は、エントリＥ３において、ＬＤフィールドの値をＮ５に上書きする。なお、エントリＥ３のＯＬＳフィールドの値は書き換えられることはなく、Ｎ２のままである。
【０２２１】
すると、ステップＳ１０７でノード装置Ｎ３からデータフレームを受信したノード装置Ｎ５は、受信したデータフレームのＧＳとＦＩＤの値をキーにしてＦＩＤ管理テーブル１０５−Ｎ５を検索し、エントリＥ５を見つける。エントリＥ５が見つかったことから、ノード装置Ｎ５は、「ノード装置Ｎ５自身がかつてステップＳ１０６で送信したのと同一のデータフレームをステップＳ１０７で受信した」と認識することができる。
【０２２２】
したがって、ノード装置Ｎ５は、次のステップＳ１０８でデータフレームをノード装置Ｎ４に送信するに際して、ＦＩＤ管理テーブル１０５−Ｎ５に新たなエントリを作成するのではなく、既存のエントリＥ５を更新する。具体的には、ステップＳ１０８でノード装置Ｎ５は、エントリＥ５において、ＬＤフィールドの値をＮ４に上書きする。なお、エントリＥ５のＯＬＳフィールドの値は書き換えられることはなく、Ｎ４のままである。
【０２２３】
すると、ステップＳ１０８でノード装置Ｎ５からデータフレームを受信したノード装置Ｎ４は、受信したデータフレームのＧＳとＦＩＤの値をキーにしてＦＩＤ管理テーブル１０５−Ｎ４を検索し、エントリＥ４を見つける。エントリＥ４が見つかったことから、ノード装置Ｎ４は、「ノード装置Ｎ４自身がかつてステップＳ１０５で送信したのと同一のデータフレームをステップＳ１０８で受信した」と認識することができる。
【０２２４】
したがって、ノード装置Ｎ４は、次のステップＳ１０９でデータフレームをノード装置Ｎ３に送信するに際して、ＦＩＤ管理テーブル１０５−Ｎ４に新たなエントリを作成するのではなく、既存のエントリＥ４を更新する。具体的には、ステップＳ１０９でノード装置Ｎ４は、エントリＥ４において、ＬＤフィールドの値をＮ３に上書きする。なお、エントリＥ４のＯＬＳフィールドの値は書き換えられることはなく、Ｎ３のままである。
【０２２５】
すると、ステップＳ１０９でノード装置Ｎ４からデータフレームを受信したノード装置Ｎ３は、受信したデータフレームのＧＳとＦＩＤの値をキーにしてＦＩＤ管理テーブル１０５−Ｎ３を検索し、エントリＥ３を見つける。エントリＥ３が見つかったことから、ノード装置Ｎ３は、「ノード装置Ｎ３自身がかつてステップＳ１０３で送信したのと同一のデータフレームをステップＳ１０９で受信した」と認識することができる。
【０２２６】
したがって、ノード装置Ｎ３は、次のステップＳ１１０でデータフレームをノード装置Ｎ２に送信するに際して、ＦＩＤ管理テーブル１０５−Ｎ３に新たなエントリを作成するのではなく、既存のエントリＥ３を更新する。具体的には、ステップＳ１１０でノード装置Ｎ３は、エントリＥ３において、ＬＤフィールドの値をＮ２に上書きする。なお、エントリＥ３のＯＬＳフィールドの値は書き換えられることはなく、Ｎ２のままである。
【０２２７】
すると、ステップＳ１１０でノード装置Ｎ３からデータフレームを受信したノード装置Ｎ２は、受信したデータフレームのＧＳとＦＩＤの値をキーにしてＦＩＤ管理テーブル１０５−Ｎ２を検索し、エントリＥ２を見つける。エントリＥ２が見つかったことから、ノード装置Ｎ２は、「ノード装置Ｎ２自身がかつてステップＳ１０２で送信したのと同一のデータフレームをステップＳ１１０で受信した」と認識することができる。
【０２２８】
したがって、ノード装置Ｎ２は、次のステップＳ１１１でデータフレームをノード装置Ｎ６に送信するに際して、ＦＩＤ管理テーブル１０５−Ｎ２に新たなエントリを作成するのではなく、既存のエントリＥ２を更新する。具体的には、ステップＳ１１１でノード装置Ｎ２は、エントリＥ２において、ＬＤフィールドの値をＮ６に上書きする。なお、エントリＥ２のＯＬＳフィールドの値は書き換えられることはなく、Ｎ１のままである。
【０２２９】
そして、ステップＳ１１１でノード装置Ｎ２からデータフレームを受信したノード装置Ｎ６は、ステップＳ１１２でノード装置Ｎ７にデータフレームを送信するときにＦＩＤ管理テーブル１０５−Ｎ６に新たなエントリＥ６を作成する。そして、ノード装置Ｎ６はエントリＥ６において、ＯＬＳフィールドにはＮ２と設定し、ＬＤフィールドにはＮ７と設定する。
【０２３０】
続いて、図１４〜図２９のフローチャートを参照して、ノード装置１００の動作の詳細を説明する。
図１４は、フレーム受信処理のフローチャートである。フレーム受信処理は、ノード装置１００に電源が入れられると開始される。
【０２３１】
ステップＳ２０１で受信部１０１は、フレームを受信するまで待機する。つまり、受信部１０１は、フレームを受信していなければステップＳ２０１を繰り返す。フレームを受信すると、受信部１０１は受信したフレームをフレーム分岐処理部１０６に出力し、処理はステップＳ２０２に移行する。
【０２３２】
ステップＳ２０２では、フレーム分岐処理部１０６が、ステップＳ２０１で受信部１０１が受信したフレームのタイプフィールドの値を参照し、フレームのタイプを判定する。受信したフレームのタイプがハローフレームの場合、処理はステップＳ２０３に移行し、データフレームの場合、処理はステップＳ２０４に移行し、ＡＣＫフレームの場合、処理はステップＳ２０６に移行する。
【０２３３】
ステップＳ２０３では、受信されたハローフレームをフレーム分岐処理部１０６がリンク管理部１０８へ出力し、リンク管理部１０８が図１５のハローフレーム受信処理を行う。そして処理はステップＳ２０１に戻る。もちろん、図４のＭＰＵ２０１が図３の各部に対応する複数のタスクを並行して実行するマルチタスク環境では、フレーム分岐処理部１０６がハローフレームを出力したら、ハローフレーム受信処理の終了を待たずに処理がステップＳ２０１に移行してもよい。
【０２３４】
また、ステップＳ２０４では、フレーム分岐処理部１０６が、ステップＳ２０１で受信されたデータフレームをバッファ部１０９に格納する。つまり、フレーム分岐処理部１０６は、バッファ部１０９内に新たなエントリの領域を確保し、確保した領域にステップＳ２０１で受信されたデータフレームを格納する。また、フレーム分岐処理部１０６は、次のステップＳ２０５のためにデータフレームからＧＳとＦＩＤの値を取り出して記憶しておく。
【０２３５】
なお、図８のとおりバッファ部１０９はタイムアウト時刻フィールドを有するが、ステップＳ２０４の時点では、タイムアウト時刻はまだ設定されない。
そして、ステップＳ２０５でフレーム分岐処理部１０６は、データフレーム処理部１１０にデータフレーム受信処理を行うよう指示する。指示に際してフレーム分岐処理部１０６は、ステップＳ２０４で記憶しておいたデータフレームのＧＳとＦＩＤの値をデータフレーム処理部１１０に通知する。
【０２３６】
なお、ノード装置１００がＧＳとならないタイプの装置である場合（すなわち、ノード装置１００が中継ノード装置である場合）、データフレーム受信処理は図２０〜２３のとおりである。他方、ノード装置１００がＧＳにもなりうるタイプの装置である場合、データフレーム受信処理は、図２０〜２２、２９のとおりである。
【０２３７】
データフレーム処理部１１０が指示にしたがってデータフレーム受信処理を行うと、処理はステップＳ２０１に戻る。もちろん、マルチタスク環境では、フレーム分岐処理部１０６がデータフレーム処理部１１０にデータフレーム受信処理を行うよう指示したら、データフレーム受信処理の終了を待たずに処理がステップＳ２０１に移行してもよい。
【０２３８】
また、ステップＳ２０６では、受信されたＡＣＫフレームをフレーム分岐処理部１０６がＡＣＫ処理部１０７へ出力し、ＡＣＫ処理部１０７が図２５のＡＣＫフレーム受信処理を行う。そして処理はステップＳ２０１に戻る。もちろん、マルチタスク環境では、フレーム分岐処理部１０６がＡＣＫフレームを出力したら、ＡＣＫフレーム受信処理の終了を待たずに処理がステップＳ２０１に移行してもよい。
【０２３９】
図１５は、図１４のステップＳ２０３におけるハローフレーム受信処理のフローチャートである。図１５の処理は、フレーム分岐処理部１０６からハローフレームがリンク管理部１０８に出力されると開始される。
【０２４０】
ステップＳ３０１でリンク管理部１０８は、受信したハローフレームのＬＳと同じ値をノードＩＤとして持つエントリが、隣接ノード管理テーブル１０３（図９参照）に存在するか否かを判断する。エントリが見つかれは処理はステップＳ３０２に移行し、エントリが見つからなければ処理はステップＳ３０３に移行する。
【０２４１】
なお、図１５の説明における「受信したハローフレーム」とは、図１４のステップＳ２０１で受信部１０１が受信したハローフレームである。つまり、図１５の説明における「受信したハローフレーム」とは、ステップＳ２０２でフレーム分岐処理部１０６がリンク管理部１０８に出力して図１５の処理の開始の契機となったハローフレームである。
【０２４２】
ステップＳ３０２でリンク管理部１０８は、ステップＳ３０１で見つかったエントリの最終更新時刻として、現在時刻を設定する。そして、図１５の処理は終了する。
例えば、ノード装置Ｎ２においてステップＳ３０２が実行された結果として、図９のように隣接ノード管理テーブル１０３−Ｎ２において、Ｎ１というノードＩＤに対応する最終更新時刻フィールドの値がＴＡ２，１と更新される。その結果、ノード装置Ｎ２は「時刻ＴＡ２，１にはノード装置Ｎ２がノード装置Ｎ１を隣接ノード装置として認識可能な状況であった」と記憶しておくことができる。
【０２４３】
他方、ステップＳ３０１でエントリが見つからない場合は、今まで隣接ノード装置として認識していなかった新たなノード装置からハローフレームが受信されたということである。よって、続くステップＳ３０３〜Ｓ３０８において、当該新たなノード装置を隣接ノード装置として登録するための処理が行われる。
【０２４４】
ステップＳ３０３でリンク管理部１０８は、隣接ノード管理テーブル１０３に新規エントリを追加する。
そして、ステップＳ３０４でリンク管理部１０８は、ステップＳ３０３で追加した新規エントリに、受信したハローフレームのＬＳの値と現在時刻を設定する。例えば、図７のハローフレーム３１２を初めて受信したとき、ノード装置Ｎ２は、新規エントリのノードＩＤフィールドに、ハローフレーム３１２のＬＳの値であるＮ３を設定し、新規エントリの最終更新時刻フィールドに現在時刻を設定する。
【０２４５】
続いて、ステップＳ３０５でリンク管理部１０８は、重み付けテーブル１０４−１〜１０４−Ｍ（図１０と図１１を参照）の中に、まだ注目していない重み付けテーブル１０４−ｉ（１≦ｉ≦Ｍ）があるか否かを判断する。既にすべての重み付けテーブル１０４−１〜１０４−Ｍに注目し終わっていれば、図１５の処理は終了し、まだ注目していない重み付けテーブル１０４−ｉがあれば、処理はステップＳ３０６に移行する。
【０２４６】
ステップＳ３０６でリンク管理部１０８は、重み付けテーブル１０４−１〜１０４−Ｍのうちでまだ注目していないものの中から、次の重み付けテーブルに注目する。以下では説明の便宜上、ステップＳ３０６では重み付けテーブル１０４−ｉが注目されたとする。
【０２４７】
そして、ステップＳ３０７でリンク管理部１０８は、注目している重み付けテーブル１０４−ｉに新規エントリを追加する。
さらに、ステップＳ３０８でリンク管理部１０８は、ステップＳ３０７で追加した新規エントリのＬＤ、重み、最終更新時刻の各フィールドに、受信したハローフレームのＬＳの値と、初期重み付け値と、現在時刻を、それぞれ設定する。初期重み付け値は、実施形態に応じて任意に決められる定数である。
【０２４８】
この実施形態では、上記のとおり重みの値は０以上１以下であり、１はＬＤとして選択不能なことを示す特別な値であるから、初期重み付け値は、０以上１未満の任意の値でよい。より具体的には、初期重み付け値は、例えば０．５でもよい。例えば、図１１の１番上に示した重み付けテーブル１０４−１−Ｎ３の最初のエントリは、次のようにして作成されたものであってもよい（ただし、正確にはその場合、最初のエントリの最終更新時刻には、他の２つのエントリの最終更新時刻Ｔａとは異なる値が設定され、図１１とまったく同じとはならない）。
【０２４９】
・ＧＤとしてノード装置Ｎ７に対応付けられた重み付けテーブル１０４−１−Ｎ３が既に存在している。
・しかし、ノード装置Ｎ３は、ノード装置Ｎ２を隣接ノード装置として今まで認識していなかった。
【０２５０】
・ノード装置Ｎ３は、ノード装置Ｎ２から初めてハローフレームを受信した。
・以上の状況において、ステップＳ３０６では重み付けテーブル１０４−１−Ｎ３が注目された。
【０２５１】
・よって、ステップＳ３０８では、新規エントリのＬＤフィールドに、受信したハローフレームのＬＳの値であるＮ２が設定され、新規エントリの重みフィールドに、初期重み付け値である０．５が設定された。
ステップＳ３０８の実行後、処理はステップＳ３０５に戻る。
【０２５２】
図１６は、ハローフレーム送信処理のフローチャートである。図１６の処理は、図１４の処理とは独立して並行に、ハローフレーム生成部１１２により実行される。具体的には、ノード装置１００に電源が入れられると、ハローフレーム生成部１１２が図１６の処理を開始する。
【０２５３】
ステップＳ４０１でハローフレーム生成部１１２は、現在時刻が送信予定時刻であるか否かを判断する。現在時刻が送信予定時刻であれば処理はステップＳ４０２に移行し、現在時刻が送信予定時刻でなければ処理はステップＳ４０１に戻る。つまり、ハローフレーム生成部１１２は送信予定時刻まで待機する。
【０２５４】
例えば、基準時刻Ｔｒｅｆとハローフレームの送信間隔ΔＴｈｅｌｌｏが予め決められていてもよい。また、ハローフレーム生成部１１２は、例えば図４のＭＰＵ２０１のクロックに基づいて現在時刻Ｔｎｏｗを参照することができる。ハローフレーム生成部１１２は、式（４）のＺが整数のときのみ、「現在時刻は送信予定時刻である」と判断してもよい。
Ｚ＝（Ｔｒｅｆ−Ｔｎｏｗ）／ΔＴｈｅｌｌｏ  （４）
【０２５５】
例えば、基準時刻Ｔｒｅｆは予め決められた定数でもよいし、ノード装置１００に電源が入れられた時刻でもよい。また、送信間隔ΔＴｈｅｌｌｏは実施形態に応じて適宜決めることができ、例えば１０秒などの比較的長い時間でもよい。
【０２５６】
ステップＳ４０２では、ハローフレーム生成部１１２がＦＩＤ生成部１１３に新たなＦＩＤの生成を要求し、ＦＩＤ生成部１１３が新たなＦＩＤを生成する。例えば、ＦＩＤはシーケンス番号でもよく、ＦＩＤ生成部１１３はカウンタ回路を使って実現されてもよい。もちろん、ＦＩＤ生成部１１３はＭＰＵ２０１がプログラムを実行することで実現されてもよい。
【０２５７】
ステップＳ４０２ではさらに、ＦＩＤ生成部１１３が生成したＦＩＤを用いてハローフレーム生成部１１２がハローフレームを生成する。
例えば、図７のハローフレーム３１２は、次のようにして生成される。すなわち、ノード装置Ｎ３のＦＩＤ生成部１１３−Ｎ３が、新たなＦＩＤとしてＦｂという値を生成する。すると、ノード装置Ｎ３のハローフレーム生成部１１２−Ｎ３は、新たなハローフレーム３１２を生成する。
【０２５８】
その際、ハローフレーム生成部１１２−Ｎ３は、ハローフレーム３１２において、ＬＤに０ｘＦＦＦＦＦＦという所定の値を設定し、ＬＳとＧＳに自ノードＩＤであるＮ３を設定し、ＧＤに０ｘ００００００という所定の値を設定する。また、ハローフレーム生成部１１２−Ｎ３は、ハローフレーム３１２において、ＦＩＤにはＦＩＤ生成部１１３−Ｎ３により生成された値Ｆｂを設定し、タイプには所定の値Ｈを設定する。
【０２５９】
以上のようにしてステップＳ４０２でハローフレームが生成されると、続いて、ステップＳ４０３においてハローフレーム生成部１１２は、生成したハローフレームの送信を送信部１０２に依頼し、送信部１０２がハローフレームを送信する。そして、処理はステップＳ４０１に戻る。
【０２６０】
続いて、各種テーブルのエージング処理について図１７〜図１９を参照して説明する。各エージング処理は、例えば、図４のタイマＩＣ２０３からの割り込み信号を契機として開始されてもよい。
【０２６１】
図１７は、隣接ノード管理テーブル１０３のエージング処理のフローチャートである。例えば、タイマＩＣ２０３が所定の間隔Ｉａで割り込み信号をリンク管理部１０８に出力し、割り込み信号を契機としてリンク管理部１０８が所定の間隔Ｉａで図１７の処理を行ってもよい。
【０２６２】
ステップＳ５０１でリンク管理部１０８は、隣接ノード管理テーブル１０３（図９を参照）の１つ目のエントリに注目する。以下、図１７に関する説明においては、リンク管理部１０８が注目している隣接ノード管理テーブル１０３のエントリを「注目エントリ」という。
【０２６３】
続いてステップＳ５０２でリンク管理部１０８は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇａ以上か否かを判断する。なお、実施形態によって、Ｇａ＝Ｉａでもよいし、Ｇａ＜Ｉａでもよいし、Ｇａ＞Ｉａでもよい。
【０２６４】
現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇａ以上であれば、処理はステップＳ５０３に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇａ未満であれば、処理はステップＳ５０５に移行する。
【０２６５】
ステップＳ５０３でリンク管理部１０８は、注目エントリのノードＩＤと同じ値をＬＤとして有するエントリを、重み付けテーブル１０４から削除する。
例えば、注目エントリが、図９の隣接ノード管理テーブル１０３−Ｎ３の３番目のエントリである場合、注目エントリのノードＩＤの値はＮ５である。したがって、ステップＳ５０３でリンク管理部１０８は、重み付けテーブル１０４−１−Ｎ３〜１０４−Ｍ−Ｎ３のそれぞれから、ＬＤの値がＮ５であるエントリを削除する。例えば、ステップＳ５０３では、図１０の重み付けテーブル１０４−１−Ｎ３の３つ目のエントリと、重み付けテーブル１０４−２−Ｎ３の３つ目のエントリが削除される。
【０２６６】
そして、ステップＳ５０４でリンク管理部１０８は、注目エントリを隣接ノード管理テーブル１０３から削除する。そして処理はステップＳ５０５に移行する。
ステップＳ５０５でリンク管理部１０８は、まだ注目していないエントリが隣接ノード管理テーブル１０３に残っているか否かを判断する。リンク管理部１０８が、隣接ノード管理テーブル１０３のすべてのエントリに注目し終わっていれば、図１７の処理は終了する。他方、まだリンク管理部１０８が注目していないエントリが隣接ノード管理テーブル１０３に残っていれば、処理はステップＳ５０６に移行する。
【０２６７】
ステップＳ５０６でリンク管理部１０８は、隣接ノード管理テーブル１０３のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップＳ５０２に戻る。
【０２６８】
以上の図１７のエージング処理により、ノード装置１００は、今まで隣接ノード装置として認識していたノード装置からのハローフレームの受信が途絶えると、「当該ノード装置は、もはやノード装置１００に隣接していない」と認識することができるようになる。つまり、図１７の処理により、ノード装置１００は、潜在的なＬＤの候補としての隣接ノード装置を、環境の変化に追従して適切に管理することができるようになる。
【０２６９】
なお、上記の所定の間隔Ｉａおよび所定の値Ｇａは、環境の変化しやすさなどに応じて、実施形態によって適宜決められることが望ましい。なお、この実施形態では、ネットワーク内のすべてのノード装置に同じハローフレームの送信間隔ΔＴｈｅｌｌｏが設定されており、隣接ノード管理テーブル１０３のエージング時間である上記の所定の値Ｇａは、Ｇａ＞ΔＴｈｅｌｌｏを満たす。
【０２７０】
図１８は、重み付けテーブル１０４のエージング処理のフローチャートである。例えば、タイマＩＣ２０３が所定の間隔Ｉｗで割り込み信号をデータフレーム処理部１１０に出力し、割り込み信号を契機としてデータフレーム処理部１１０が所定の間隔Ｉｗで図１８の処理を行ってもよい。
【０２７１】
ステップＳ６０１でデータフレーム処理部１１０は、重み付けテーブル１０４（図１０と図１１を参照）のうち１枚目の重み付けテーブル１０４−１に注目する。以下、図１８に関する説明においては、データフレーム処理部１１０が注目している重み付けテーブルを、「１０４−ｉ」という参照符号で表し（１≦ｉ≦Ｍ）、「注目テーブル」という。ステップＳ６０１の実行直後はｉ＝１である。
【０２７２】
続いてステップＳ６０２でデータフレーム処理部１１０は、注目テーブル１０４−ｉの１つ目のエントリに注目する。以下、注目テーブルのうちでデータフレーム処理部１１０が注目しているエントリを「注目エントリ」という。
【０２７３】
続いてステップＳ６０３でデータフレーム処理部１１０は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｗ以上か否かを判断する。なお、実施形態によって、Ｇｗ＝Ｉｗでもよいし、Ｇｗ＜Ｉｗでもよいし、Ｇｗ＞Ｉｗでもよい。
【０２７４】
現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｗ以上であれば、処理はステップＳ６０４に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｗ未満であれば、処理はステップＳ６０５に移行する。
【０２７５】
ステップＳ６０４でデータフレーム処理部１１０は、注目テーブル１０４−ｉから注目エントリを削除する。そして処理はステップＳ６０５に移行する。
ステップＳ６０５でデータフレーム処理部１１０は、注目テーブル１０４−ｉにまだ注目していないエントリが残っているか否かを判断する。データフレーム処理部１１０が注目テーブル１０４−ｉのすべてのエントリに注目し終わっていれば、処理はステップＳ６０７に移行する。他方、まだデータフレーム処理部１１０が注目していないエントリが注目テーブル１０４−ｉに残っていれば、処理はステップＳ６０６に移行する。
【０２７６】
ステップＳ６０６でデータフレーム処理部１１０は、注目テーブル１０４−ｉ内のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップＳ６０３に戻る。
【０２７７】
ステップＳ６０７でデータフレーム処理部１１０は、注目テーブル１０４−ｉにエントリが存在するか否かを判断する。ステップＳ６０３〜Ｓ６０６の繰り返しの結果、注目テーブル１０４−ｉにエントリがなくなった場合は、処理はステップＳ６０８に移行する。他方、注目テーブル１０４−ｉに１つ以上エントリが存在すれば、処理はステップＳ６０９に移行する。
【０２７８】
ステップＳ６０８でデータフレーム処理部１１０は、エントリの存在しない注目テーブル１０４−ｉを削除する。そして、処理はステップＳ６０９に移行する。
ステップＳ６０９でデータフレーム処理部１１０は、まだ注目していない重み付けテーブルが重み付けテーブル１０４の中に残っているか否かを判断する。データフレーム処理部１１０が、すべての重み付けテーブル１０４−１〜１０４−Ｍに注目し終わっていれば、図１８の処理は終了する。他方、まだデータフレーム処理部１１０が注目していない重み付けテーブル１０４−ｊ（１≦ｊ≦Ｍ）が重み付けテーブル１０４の中に残っていれば、処理はステップＳ６１０に移行する。
【０２７９】
ステップＳ６１０でデータフレーム処理部１１０は、重み付けテーブル１０４の中でまだ注目していない次の重み付けテーブル１０４−ｊに注目する（すなわち、重み付けテーブル１０４−ｊを注目テーブル１０４−ｉとして選ぶ）。そして処理はステップＳ６０２に戻る。
【０２８０】
以上の図１８のエージング処理により、ノード装置１００は、「過去の障害の影響が累積されて、どの隣接ノード装置もＬＤとして選択することが不能となる」といった事態に陥らずに済む。
【０２８１】
例えば、図６の例において、ステップＳ１１２の後、ノード装置Ｎ６とＮ７の間のリンクに障害が発生し、ノード装置Ｎ４とＮ７の間のリンクが障害から復旧したという状況を想定する。もし図１８のエージング処理が行われないと、実際には障害からの復旧により、例えば経路〈Ｎ１，Ｎ２，Ｎ３，Ｎ４，Ｎ７〉でのデータフレームの送信が可能になっていても、自律分散協調の結果としてこの経路が選択されることがなくなってしまう。しかし、図１８のエージング処理が行われれば、上記で想定した状況において、経路〈Ｎ１，Ｎ２，Ｎ３，Ｎ４，Ｎ７〉が選択されうるようになる。
【０２８２】
なお、上記の所定の間隔Ｉｗおよび所定の値Ｇｗは、環境の変化しやすさなどに応じて、実施形態によって適宜決められることが望ましい。
【０２８３】
図１９は、ＦＩＤ管理テーブル１０５のエージング処理のフローチャートである。例えば、タイマＩＣ２０３が所定の間隔Ｉｆで割り込み信号をデータフレーム処理部１１０に出力し、割り込み信号を契機としてデータフレーム処理部１１０が所定の間隔Ｉｆで図１９の処理を行ってもよい。
【０２８４】
ステップＳ７０１でデータフレーム処理部１１０は、ＦＩＤ管理テーブル１０５（図１２と図１３を参照）のうち１つ目のエントリに注目する。以下、図１９に関する説明においては、データフレーム処理部１１０が注目しているエントリを「注目エントリ」という。
【０２８５】
続いてステップＳ７０２でデータフレーム処理部１１０は、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｆ以上か否かを判断する。なお、実施形態によって、Ｇｆ＝Ｉｆでもよいし、Ｇｆ＜Ｉｆでもよいし、Ｇｆ＞Ｉｆでもよい。
【０２８６】
また、図２１のステップＳ８０７に関して後述する理由から、この実施形態では、重み付けテーブル１０４のエージング時間である所定の値Ｇｗと、ＦＩＤ管理テーブル１０５のエージング時間である所定の値Ｇｆは、Ｇｆ＜Ｇｗを満たす。
【０２８７】
現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｆ以上であれば、処理はステップＳ７０３に移行する。他方、現在時刻と、注目エントリの最終更新時刻との差が、所定の値Ｇｆ未満であれば、処理はステップＳ７０４に移行する。
【０２８８】
ステップＳ７０３でデータフレーム処理部１１０は、注目エントリをＦＩＤ管理テーブル１０５から削除する。そして処理はステップＳ７０４に移行する。
そして、ステップＳ７０４でデータフレーム処理部１１０は、まだ注目していないエントリがＦＩＤ管理テーブル１０５に残っているか否かを判断する。データフレーム処理部１１０がＦＩＤ管理テーブル１０５のすべてのエントリに注目し終わっていれば、図１９の処理は終了する。他方、まだデータフレーム処理部１１０が注目していないエントリがＦＩＤ管理テーブル１０５に残っていれば、処理はステップＳ７０５に移行する。
【０２８９】
ステップＳ７０５でデータフレーム処理部１１０は、ＦＩＤ管理テーブル１０５のまだ注目していないエントリの中で、次のエントリに注目する。そして処理はステップＳ７０２に戻る。
【０２９０】
以上の図１９のエージング処理により、「ＦＩＤ管理テーブル１０５のエントリが増え続けて記憶領域を使い尽くしてしまう」といった事態を防ぐことができる。
なお、上記の所定の値Ｇｆは、例えば、何度もバックトラックが生じる最悪ケースにおいてデータフレームがＧＳからＧＤに到達するのにかかると予測される時間の長さ以上になるよう、決められていてもよい。一般には、ネットワークの規模が大きいほど、所定の値Ｇｆも大きく設定しておくことが望ましい。
【０２９１】
図２０〜図２３は、図１４のステップＳ２０５におけるデータフレーム受信処理のフローチャートである。なお、説明の便宜上、まず、ノード装置１００がＧＳとはならず中継ノード装置である場合のデータフレーム受信処理について、図２０〜図２３を参照して説明する。ノード装置１００がＧＳにもなりうるタイプの場合については、図２３の部分が後述の図２９の処理に置き換わる。
【０２９２】
図１４のステップＳ２０５でフレーム分岐処理部１０６からデータフレーム受信処理を行うよう指示されると、データフレーム処理部１１０は図２０の処理を開始する。なお、前述のとおり、フレーム分岐処理部１０６からの指示は、受信したデータフレームのＧＳとＦＩＤの値の通知をともなっている。
【０２９３】
ステップＳ８０１でデータフレーム処理部１１０は、受信したデータフレームのＬＤの値が自ノードＩＤであるか否かを判断する。受信したデータフレームのＬＤの値が自ノードＩＤでなければ、処理はステップＳ８０２に移行し、受信したデータフレームのＬＤの値が自ノードＩＤであれば、処理はステップＳ８０３に移行する。
【０２９４】
なお、データフレーム受信処理の説明において、「受信したデータフレーム」とは、図１４のステップＳ２０１で受信部１０１が受信し、ステップＳ２０４でバッファ部１０９に格納され、図２０の処理の開始の契機となったデータフレームのことである。
【０２９５】
また、フレーム分岐処理部１０６は、データフレーム受信処理の開始をデータフレーム処理部１１０に指示するとき、受信したデータフレームのＧＳとＦＩＤの値をデータフレーム処理部１１０に通知している。よって、データフレーム処理部１１０は、通知されたＧＳとＦＩＤの値をキーにしてバッファ部１０９を検索することで、受信したデータフレームを含むエントリを見つけることができる。したがって、データフレーム処理部１１０は、見つけたエントリから、受信したデータフレームのヘッダに含まれる各フィールドの値を読み出すことができる。
【０２９６】
正確には、ステップＳ８０１では、データフレーム処理部１１０はまず、以上のようにして、受信したデータフレームのヘッダに含まれる各フィールドの値をバッファ部１０９から読み出して記憶する。そして、記憶したＬＤの値（すなわち受信したデータフレームのＬＤの値）を自ノードＩＤと比較する。なお、ノード装置１００自身のノードＩＤである自ノードＩＤは、例えば、図４のフラッシュメモリ２０５に予め記録されているので、データフレーム処理部１１０は自ノードＩＤを参照することができる。
【０２９７】
受信したデータフレームのＬＤの値が自ノードＩＤと異なるとき、ノード装置１００はノード装置１００自身には無関係なデータフレームを偶然受信したということである。よって、ステップＳ８０２でデータフレーム処理部１１０は、受信したデータフレームを破棄する。つまり、データフレーム処理部１１０は、ステップＳ８０１で見つけたバッファ部１０９のエントリを削除する。そして、データフレーム受信処理は終了する。
【０２９８】
他方、受信したデータフレームのＬＤの値が自ノードＩＤと等しい場合は、ステップＳ８０３でデータフレーム処理部１１０は、ＡＣＫフレームを生成し、ＡＣＫフレームの送信を送信部１０２に依頼する。そして、送信部１０２がＡＣＫフレームを送信する。
【０２９９】
例えば、図７のデータフレーム３０３をノード装置Ｎ３が受信すると、ノード装置Ｎ３のデータフレーム処理部１１０−Ｎ３は、ステップＳ８０３において図７のＡＣＫフレーム３２２を生成する。そして、送信部１０２−Ｎ３がＡＣＫフレーム３２２を送信する。
【０３００】
具体的には、データフレーム処理部１１０−Ｎ３は、受信したデータフレーム３０３のＬＳの値であるＮ２をＡＣＫフレーム３２２のＬＤに設定し、自ノードＩＤ（すなわちノード装置Ｎ３自身のノードＩＤであるＮ３）をＡＣＫフレーム３２２のＬＳに設定する。また、ＡＣＫフレーム３２２は、対応するデータフレーム３０３のＬＳであるノード装置Ｎ２以外には無関係なので、データフレーム処理部１１０−Ｎ３は、ＡＣＫフレーム３２２のＧＤには、ヌルを表す特殊な値０ｘ００００００を設定する。
【０３０１】
また、データフレーム処理部１１０−Ｎ３は、ＡＣＫフレーム３２２を受信したノード装置Ｎ２が「ＡＣＫフレーム３２２はデータフレーム３０３に対するＡＣＫフレームである」と認識することができるように、ＡＣＫフレーム３２２のＧＳとＦＩＤを設定する。すなわち、データフレーム処理部１１０−Ｎ３は、ＡＣＫフレーム３２２のＧＳとＦＩＤに、それぞれ、受信したデータフレーム３０３のＧＳとＦＩＤの値Ｎ１とＦａを設定する。
【０３０２】
そして、データフレーム処理部１１０−Ｎ３は、ＡＣＫフレーム３２２のタイプとして、「ＡＣＫフレーム」を示す所定の値Ａを設定する。ステップＳ８０３では、以上のようにしてデータフレーム処理部１１０−Ｎ３がＡＣＫフレーム３２２を生成し、送信部１０２−Ｎ３がＡＣＫフレーム３２２を送信する。
【０３０３】
続いて、ステップＳ８０４でデータフレーム処理部１１０は、受信したデータフレームのＧＤの値が自ノードＩＤであるか否かを判断する。受信したデータフレームのＧＤの値が自ノードＩＤであれば、処理はステップＳ８０５に移行する。他方、受信したデータフレームのＧＤの値が自ノードＩＤと異なれば、処理は図２１のステップＳ８０６に移行する。
【０３０４】
ステップＳ８０５でデータフレーム処理部１１０は、上位層処理部１１１に、受信したデータフレームを渡し、データフレーム受信処理を終了する。具体的には、データフレーム処理部１１０は、ステップＳ８０１で見つけたバッファ部１０９のエントリを上位層処理部１１１に出力し、当該エントリをバッファ部１０９から削除する。そしてデータフレーム受信処理は終了する。
【０３０５】
例えば、図６のステップＳ１１２でデータフレームをノード装置Ｎ６から受信したノード装置Ｎ７では、受信したデータフレームは上位層処理部１１１−Ｎ７に出力され、上位層処理部１１１−Ｎ７において処理される。
【０３０６】
なお、受信したデータフレーム全体を渡すのではなく、上層処理部１１１の処理において必要なペイロードを少なくとも含む部分データを、ステップＳ８０１で見つけたバッファ部１０９のエントリから取り出して上位層処理部１１１に出力するようにしてもよい。
【０３０７】
図２１のステップＳ８０６以降の処理は、受信したデータフレームのＬＤの値が自ノードＩＤと等しく、かつ受信したデータフレームのＧＤの値が自ノードＩＤと異なる場合に実行される。
【０３０８】
ステップＳ８０６でデータフレーム処理部１１０は、受信したデータフレームのＦＩＤとＧＳの値を検索キーとして用いて、ＦＩＤ管理テーブル１０５を検索する。なお、上記のように、受信したデータフレームのＦＩＤとＧＳの値は、図２０の処理の開始時にフレーム分岐処理部１０６から通知されている。
【０３０９】
続いて、ステップＳ８０７でデータフレーム処理部１１０は、ステップＳ８０６の検索の結果エントリがヒットしたか否かを判断する。エントリがヒットした場合、ノード装置１００が以前送信したことのあるデータフレームと同じデータフレームが受信されたということなので、処理はステップＳ８０８に移行する。他方、エントリがヒットしなかった場合、ノード装置１００が送信したことのないデータフレームが受信されたということなので、処理はステップＳ８１０に移行する。
【０３１０】
なお、正確には、「ノード装置１００が以前送信したことのあるデータフレームと同じデータフレームが受信されたが、検索対象のエントリは既にエージングにより消滅してしまった」という場合も、エントリはヒットしない。このような場合が生じないように、ネットワーク内でバックトラックが繰り返される最悪の時間の見積もりなどに基づいて、適切にＦＩＤ管理テーブル１０５のエージング時間Ｇｆが定められることが望ましい。
【０３１１】
ステップＳ８０８でデータフレーム処理部１１０は、ステップＳ８０６の検索でヒットしたＦＩＤ管理テーブル１０５のエントリのＬＤとＯＬＳの値を取り出し、例えば図４のＤＲＡＭ２０４などの記憶領域に記憶する。
【０３１２】
続いてステップＳ８０９でデータフレーム処理部１１０は、受信したデータフレームのＧＤの値に対応する重み付けテーブル（以下、図２１〜２３の説明においては「１０４−ｉ」という参照符号で参照する）を次のように更新する。すなわち、データフレーム処理部１１０は、重み付けテーブル１０４−ｉにおいて、ステップＳ８０８で取り出したＬＤに対応する重みを、最大値に変更する。なお、この実施形態では重みの最大値は１である。重みの変更後、処理はステップＳ８１７に移行する。
【０３１３】
なお、ステップＳ８０７、Ｓ８０８、Ｓ８０９と処理が進む場合、ステップＳ８０８で取り出したＬＤに対応するエントリが、受信したデータフレームのＧＤの値に対応する重み付けテーブル１０４−ｉに存在することが、ステップＳ８０９では保証されている。その理由は以下のとおりである。
【０３１４】
図１２と図１３に関して説明したように、ＦＩＤ管理テーブル１０５のエントリにおいて最終更新時刻は、データフレームの送信時に設定される。また、図１９に関して説明したように、ＦＩＤ管理テーブル１０５のエージング時間Ｇｆは、例えば、最悪ケースで予測される時間以上に設定される。よって、ノード装置１００が過去に送信したデータフレームがネットワーク内を巡ってノード装置１００で受信されるとき、当該データフレームに対応するエントリは、まだＦＩＤ管理テーブル１０５に残っていることが保証される。
【０３１５】
そして、図１１に関して説明したように、データフレームが送信されてＡＣＫフレームが返信されると、重みが更新され、重み付けテーブル１０４−１〜１０１−Ｍ内の各エントリにおいては、重みが更新されるときに最終更新時刻も設定される。
【０３１６】
したがって、時系列を追うと下記（Ｅ１）〜（Ｅ５）の順となる。
（Ｅ１）ＧＤの値がＮＧＤで、ＧＳの値がＮＧＳで、ＬＤの値がＮＬＤで、ＦＩＤの値がＦｃのデータフレームがノード装置１００から送信される。このとき、ＦＩＤ管理テーブル１０５において最終更新時刻が設定される。例えば、図６のノード装置Ｎ３において、ステップＳ１０３で図１２のエントリＥ３に最終更新時刻Ｔ１０３が設定される。
【０３１７】
（Ｅ２）上記データフレームに対するＡＣＫフレームが受信されると、ノード装置ＮＧＤに対応する重み付けテーブル１０４−ｉにおいて、ＬＤフィールドの値がＮＬＤであるエントリの重みが更新される。このとき、当該エントリの最終更新時刻が設定される。例えば、ノード装置Ｎ３において、図１１に示すようにステップＳ１０３ａで重み付けテーブル１０４−１−Ｎ３の、ＬＤフィールドの値がＮ４であるエントリの最終更新時刻がＴｂに設定される。
【０３１８】
（Ｅ３）ＧＳの値がＮＧＳで、ＦＩＤの値がＦｃの同じデータフレームが、ノード装置１００で受信される。例えば、図６のステップＳ１０６でノード装置Ｎ３がデータフレームを受信する。なお、データフレームのＧＤの値は中継に際して書きかえられることはないので、（Ｅ３）で受信されるデータフレームのＧＤの値は、上記（Ｅ１）より当然、ＮＧＤである。
【０３１９】
（Ｅ４）上記（Ｅ１）の時点から、ＦＩＤ管理テーブル１０５のエージング時間Ｇｆが経過する。
（Ｅ５）上記（Ｅ２）の時点から、重み付けテーブル１０４のエージング時間Ｇｗが経過する。
【０３２０】
以上のとおり、（Ｅ３）の時点は（Ｅ５）の時点より前である。よって、（Ｅ３）の時点では、ノード装置ＮＧＤに対応する重み付けテーブル１０４−ｉにおいて、ＬＤフィールドの値がＮＬＤであるエントリの存在が保証される。
【０３２１】
例えば、上記の例では、重み付けテーブル１０４−１−Ｎ３の、ＬＤフィールドの値がＮ４であるエントリの存在が、図６のステップＳ１０６の時点保証されている。なお、ここでの「ステップＳ１０６の時点」とは、より詳しくは、ステップＳ１０６での受信を契機とするデータフレーム受信処理に含まれるステップＳ８０９の処理を、ノード装置Ｎ３が実行する時点のことである。
【０３２２】
したがって、図２１のステップＳ８０６の検索でＦＩＤ管理テーブル１０５にエントリが見つかった場合、ステップＳ８０９では必ず、ステップＳ８０８で取り出したＬＤに対応するエントリが、重み付けテーブル１０４−ｉに存在する。よって、ステップＳ８０９でデータフレーム処理部１１０は、存在が保証されているエントリにおいて、重みの値を最大値に設定している。
【０３２３】
逆に、ステップＳ８０６の検索でエントリが見つからなかった場合、ステップＳ８１０でデータフレーム処理部１１０は、受信したデータフレームのＬＳの値を、例えば図４のＤＲＡＭ２０４などの記憶領域に、ＯＬＳとして記憶する。
【０３２４】
そして、ステップＳ８１１でデータフレーム処理部１１０は、受信したデータフレームのＧＤの値を検索キーとして用いて、重み付けテーブル１０４を検索する。
続いて、ステップＳ８１２でデータフレーム処理部１１０は、ステップＳ８１１の検索の結果、テーブルがヒットしたか否かを判断する。
【０３２５】
受信したデータフレームのＧＤの値に対応する重み付けテーブルが重み付けテーブル１０４の中に存在すれば、処理はステップＳ８１２ａに移行する。なお、ステップＳ８０９で導入した「１０４−ｉ」という参照符号は、受信したデータフレームのＧＤの値に対応する重み付けテーブルを指すので、ステップＳ８１１の検索の結果ヒットしたテーブルも、「重み付けテーブル１０４−ｉ」である。
【０３２６】
他方、受信したデータフレームのＧＤの値に対応する重み付けテーブルが重み付けテーブル１０４の中に存在しなければ、処理はステップＳ８１３に移行する。
ステップＳ８１２ａでデータフレーム処理部１１０は、ステップＳ８１１の検索でヒットした重み付けテーブル１０４−ｉを調整する。ステップＳ８１２ａの重み付けテーブル調整処理は、詳しくは図２４とともに後述するが、エージング処理の副作用を中和する処理である。
【０３２７】
ステップＳ８１２ａの結果、隣接ノード管理テーブル１０３で管理されているすべての隣接ノード装置に対応するエントリが重み付けテーブル１０４−ｉに存在することが保証される。そして、処理はステップＳ８１７に移行する。
【０３２８】
ステップＳ８１３でデータフレーム処理部１１０は、受信したデータフレームのＧＤの値に対応する新規重み付けテーブルを追加する。なお、ステップＳ８１３で追加されるテーブルも、「重み付けテーブル１０４−ｉ」である。
【０３２９】
そして、ステップＳ８１４でデータフレーム処理部１１０は、新規重み付けテーブル１０４−ｉにおいて、受信したデータフレームのＧＤの値を、重み付けテーブル１０４−ｉのＧＤとして設定する。
【０３３０】
さらに、ステップＳ８１５でデータフレーム処理部１１０は、隣接ノード管理テーブル１０３のエントリ数と同数の新規エントリを、新規重み付けテーブル１０４−ｉに作成する。
【０３３１】
そして、ステップＳ８１６でデータフレーム処理部１１０は、ステップＳ８１５で作成した各エントリに、それぞれ、隣接ノード管理テーブル１０３の各エントリのノードＩＤと、初期重み付け値と、現在時刻を設定する。
【０３３２】
なお、以上のステップＳ８１１〜Ｓ８１６の具体例を挙げれば、以下のとおりである。
例えば、図６のステップＳ１０２でノード装置Ｎ２から図７のデータフレーム３０３を受信したとき、ノード装置Ｎ３の重み付けテーブル１０４−Ｎ３には、図１１の重み付けテーブル１０４−１−Ｎ３が存在しなかったとする。すると、ノード装置Ｎ３が受信したデータフレーム３０３のＧＤの値であるＮ７を検索キーにしてノード装置Ｎ３のデータフレーム処理部１１０−Ｎ３がステップＳ８１１で重み付けテーブル１０４−Ｎ３を検索しても、テーブルはヒットしない。
【０３３３】
そこで、データフレーム処理部１１０−Ｎ３は、ステップＳ８１３で新たに重み付けテーブル１０４−１−Ｎ３を作成し、ステップＳ８１４で重み付けテーブル１０４−１−Ｎ３のＧＤにＮ７を設定する。そして、データフレーム処理部１１０−Ｎ３は、ステップＳ８１５で、図９の隣接ノード管理テーブル１０３−Ｎ３と同数の（すなわち３つの）新規エントリを重み付けテーブル１０４−１−Ｎ３に作成する。
【０３３４】
ここで、隣接ノード管理テーブル１０３−Ｎ３の各エントリのノードＩＤは、図１０のとおり、Ｎ２とＮ４とＮ５である。よって、ステップＳ８１６でデータフレーム処理部１１０−Ｎ３は、ステップＳ８１５で作成した３つのエントリそれぞれに、ＬＤとしてＮ２とＮ４とＮ５を設定する。また、データフレーム処理部１１０−Ｎ３は、これら３つのエントリの重みフィールドに、いずれも０．５という初期重み付け値を設定し、これら３つのエントリの最終更新時刻フィールドに、いずれも現在時刻を設定する。
【０３３５】
以上のステップＳ８１３〜Ｓ８１６の結果として、図１１の１段目のような重み付けテーブル１０４−１−Ｎ３が重み付けテーブル１０４−Ｎ３の中に追加される。
ここで、具体例の説明から図２１の処理一般の説明に戻る。ステップＳ８１７が実行されるのは、ステップＳ８０９の実行後、ステップＳ８１６の実行後、またはステップＳ８１１の検索においてテーブルがヒットしたとステップＳ８１２で判断された後である。よって、ステップＳ８１７の実行時には、受信したデータフレームのＧＤの値に対応する重み付けテーブル１０４−ｉの存在が保証されている。
【０３３６】
そこで、ステップＳ８１７においてデータフレーム処理部１１０は、受信したデータフレームのＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、ＯＬＳとは異なるＬＤのうちで最小の重みと対応付けられているＬＤの値を取得する。
【０３３７】
つまり、データフレーム処理部１１０は、重み付けテーブル１０４−ｉにおいて、ステップＳ８０８またはＳ８１０で記憶したＯＬＳの値とは異なる値をＬＤとして有するエントリの中から、重みの値が最小のものを選択する。そして、データフレーム処理部１１０は、選択したエントリのＬＤと重みの値を、例えば図４のＤＲＡＭ２０４などの記憶領域に記憶する。
【０３３８】
続いて、ステップＳ８１８でデータフレーム処理部１１０は、下記の２つの条件（Ｆ１）と（Ｆ２）のいずれかが成立するか否かを判断する。
（Ｆ１）ステップＳ８１７（または後述のＳ８２９）で取得したＬＤの値に対応する重みが、重みの最大値（この実施形態では１．０）である。
【０３３９】
（Ｆ２）ステップＳ８０８またはＳ８１０で記憶したＯＬＳの値とは異なるＬＤへのデータフレームの転送がすべて失敗した（ただし、重み付けテーブル１０４−ｉにおけるＬＤが、もともとＯＬＳしか存在しなかった場合も含む）。
【０３４０】
条件（Ｆ１）または（Ｆ２）が成立する場合、もはやＬＤとして選択可能な隣接ノード装置は残っていないので、処理は図２３のステップＳ８３０に移行する。
他方、条件（Ｆ１）と（Ｆ２）のいずれも成立しない場合、まだＬＤとして選択可能な隣接ノード装置が残っている。換言すれば、（Ｇ１）〜（Ｇ４）のいずれにも該当しない隣接ノード装置が、少なくとも１つは存在する。そして、ＬＤとして選択可能な隣接ノード装置のノードＩＤが、ステップＳ８１７（または後述のＳ８２９）で取得されている。
【０３４１】
（Ｇ１）当該隣接ノード装置から先の経路が袋小路またはループになっている、と判断されたため、当該隣接ノード装置は最大値の重みと対応付けられている。
（Ｇ２）過去に当該隣接ノード装置への同一ＧＤ宛てのデータフレームの送信に失敗した結果が累積したため、当該隣接ノード装置は最大値の重みと対応付けられている。
【０３４２】
（Ｇ３）今回のデータフレーム受信処理において当該隣接ノード装置へのデータフレームの送信を試した結果として、「送信失敗」と判明した。すなわち、データフレームを送信した隣接ノード装置から、所定時間が経っても、ＡＣＫフレームを受信することができなかった。
【０３４３】
（Ｇ４）当該隣接ノード装置はＯＬＳである。
そこで、ステップＳ８１８で条件（Ｆ１）と（Ｆ２）のいずれも成立しないと判断されると、処理はステップＳ８１９に移行する。ステップＳ８１９以降の処理は、取得済みのＬＤの値で識別される隣接ノード装置へのデータフレームの転送を試みる処理である。
【０３４４】
ステップＳ８１９でデータフレーム処理部１１０は、以下のようにして新たなデータフレームを作成して送信部１０２に出力し、作成されたデータフレームを送信部１０２が送信する。
【０３４５】
具体的には、データフレーム処理部１１０は、ステップＳ８１７（または後述のＳ８２９）で取得したＬＤの値を新たなデータフレームのＬＤに指定し、自ノードＩＤを新たなデータフレームのＬＳに指定する。また、データフレーム処理部１１０は、受信したデータフレームからＧＤ、ＧＳ、ＦＩＤ、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。なお、「受信したデータフレーム」とは、上記のとおり、ステップＳ８０１で見つかったバッファ部１０９内のエントリに格納されているデータフレームである。
【０３４６】
ステップＳ８１９での送信後、処理はステップＳ８２０に移行し、データフレーム処理部１１０がバッファ部１０９のタイムアウト時刻を更新する。すなわち、データフレーム処理部１１０は、バッファ部１０９において、受信したデータフレームを格納しているエントリのタイムアウト時刻に、式（５）の時刻Ｔｔｉｍｅｏｕｔを設定する。
Ｔｔｉｍｅｏｕｔ＝Ｔｎｏｗ＋Ｔｗａｉｔ    （５）
なお、式（５）において時刻Ｔｎｏｗは現在時刻であり、時間ＴｗａｉｔはＡＣＫフレーム待ち時間である。
【０３４７】
そして、ステップＳ８２１でデータフレーム処理部１１０は、ステップＳ８０６のＦＩＤ管理テーブル１０５の検索においてエントリがヒットしているか、または、後述するステップＳ８２３、および、ステップＳ８２４で、ＦＩＤ管理テーブル１０５に新規エントリを追加して値を設定しているか否かを確認する。つまり、受信したデータフレームのＧＳとＦＩＤの値に等しい値を、ＧＳおよびＦＩＤとして有するエントリが、ＦＩＤ管理テーブル１０５に存在するか否かを、データフレーム処理部１１０は確認する。
【０３４８】
ステップＳ８０６の検索でエントリがヒットしているか、ステップＳ８２３およびステップＳ８２４でＦＩＤ管理テーブル１０５に新規エントリを追加して値を設定していれば、今回のデータフレーム受信処理は、過去にノード装置１００自身が送信したのと同じデータフレームの受信を契機とする処理である。よって、データフレーム処理部１１０は続いてステップＳ８２２を実行する。他方、ステップＳ８０６の検索でエントリがヒットしておらず、かつ、ステップＳ８２３およびステップＳ８２４でＦＩＤ管理テーブル１０５に新規エントリを追加して値を設定していなければ、ノード装置１００は、初めて受信するデータフレームの初めての転送を試みているところである。よって、処理はステップＳ８２３に移行する。
【０３４９】
ステップＳ８２２でデータフレーム処理部１１０は、ステップＳ８０６の検索でヒットしたエントリを更新する。具体的には、データフレーム処理部１１０は、ステップＳ８０６の検索でヒットしたエントリにおいて、ＬＤフィールドには、ステップＳ８１９で送信したデータフレームのＬＤの値を設定し、最終更新時刻フィールドには、現在時刻を設定する。そして、処理はステップＳ８２５に移行する。
【０３５０】
また、ステップＳ８２３でデータフレーム処理部１１０は、ＦＩＤ管理テーブル１０５に新規エントリを追加する。
そして、次のステップＳ８２４でデータフレーム処理部１１０は、新規エントリに値を設定する。具体的には、データフレーム処理部１１０は、新規エントリにおいて、ＦＩＤとＧＳとＬＤの各フィールドには、それぞれステップＳ８１９で送信したデータフレームの値をコピーする。また、データフレーム処理部１１０は、新規エントリにおいて、最終更新時刻フィールドには現在時刻を設定し、ＯＬＳフィールドには、ステップＳ８１０で記憶したＯＬＳの値をコピーする。そして、処理はステップＳ８２５に移行する。
【０３５１】
ステップＳ８２５でデータフレーム処理部１１０は、ステップＳ８１９における送信の成否の通知を待つ。
例えば、データフレーム処理部１１０が、所定のプログラムのスレッドを実行する図４のＭＰＵ２０１により実現される場合、ステップＳ８２５ではスレッドがスリープしてもよい。その場合、「送信成功」または「送信失敗」の通知は、スレッドを起こす処理である。
【０３５２】
ステップＳ８１９における送信が成功した場合は、ステップＳ８１９で送信したデータフレームにおいてＬＤとして指定されている隣接ノード装置からＡＣＫフレームが返信される。そして、ＡＣＫ処理部１０７が後述の図２５の処理を行い、データフレーム処理部１１０に「送信成功」を通知する。
【０３５３】
また、ステップＳ８１９における送信の失敗とは、ステップＳ８１９で送信したデータフレームにおいてＬＤとして指定されている隣接ノード装置からのＡＣＫフレームが、式（５）の時刻Ｔｔｉｍｅｏｕｔになってもノード装置１００で受信されないことである。ＡＣＫフレームの受信は、ＡＣＫ処理部１０７による後述の図２６の処理により監視されており、ＡＣＫフレームがタイムアウト時刻Ｔｔｉｍｅｏｕｔになっても受信されないと、ＡＣＫ処理部１０７がデータフレーム処理部１１０に「送信失敗」を通知する。
【０３５４】
データフレーム処理部１１０が、ステップＳ８２５での待機の後、ＡＣＫ処理部１０７から「送信成功」または「送信失敗」の通知を受けると、処理はステップＳ８２６に移行する。
【０３５５】
ステップＳ８２６でデータフレーム処理部１１０は、ＡＣＫ処理部１０７から受けた通知に基づいて、ステップＳ８１９の送信が成功したか否かを判断する。送信が成功した場合、処理はステップＳ８２７に移行し、送信が失敗した場合、処理はステップＳ８２８に移行する。
【０３５６】
送信が成功した場合、ステップＳ８２７でデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ８１９で送信したデータフレームのＧＤとＬＤの組に対応する重みを小さくする。ここで、データフレームのＧＤは転送によって書き換えられないことに注意して換言すれば、ステップＳ８２７でデータフレーム処理部１１０は、受信したデータフレームのＧＤに対応する重み付けテーブル１０４−ｉにおいて、重みの更新を行う。
【０３５７】
つまり、データフレーム処理部１１０は、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値をＬＤとして有するエントリを重み付けテーブル１０４−ｉで探し、見つかったエントリの重みの値を小さくする。重みの値を小さくすることは、対応するＬＤの優先度を上げることである。
【０３５８】
ここで、見つかったエントリの現在の重みの値をＷｃｕｒｒｅｎｔとすると、ステップＳ８２７でデータフレーム処理部１１０は、見つかったエントリの重みの値を例えば式（６）のＷｒｅｖｉｓｅｄに更新してもよい。
Ｗｒｅｖｉｓｅｄ＝ｍａｘ（Ｗｍｉｎ，
Ｗｃｕｒｒｅｎｔ−ΔＷｓｕｃｃｅｓｓ）    （６）
なお、式（６）において、Ｗｍｉｎは重みの最小値であり、この実施形態ではＷｍｉｎ＝０である。また、ΔＷｓｕｃｃｅｓｓは、送信が成功したときに重みを減らす所定の量であり、実施形態に応じて適宜値を決めることができる。例えば、ΔＷｓｕｃｃｅｓｓ＝０．１でもよい。
【０３５９】
さらに、データフレーム処理部１１０はステップＳ８２７で、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値をＬＤとして有する重み付けテーブル１０４−ｉのエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
【０３６０】
他方、送信が失敗した場合、ステップＳ８２８でデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ８１９で送信したデータフレームのＧＤとＬＤの組に対応する重みを大きくする。つまり、ステップＳ８２８でデータフレーム処理部１１０は、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値をＬＤとして有するエントリを重み付けテーブル１０４−ｉで探し、見つかったエントリの重みの値を大きくする。重みの値を大きくすることは、対応するＬＤの優先度を下げることである。
【０３６１】
例えば、ステップＳ８２８でデータフレーム処理部１１０は、見つかったエントリの重みの値を式（７）のＷｒｅｖｉｓｅｄに更新してもよい。
Ｗｒｅｖｉｓｅｄ＝ｍｉｎ（Ｗｍａｘ，
Ｗｃｕｒｒｅｎｔ＋ΔＷｆａｉｌｕｒｅ）      （７）
なお、式（７）において、Ｗｍａｘは重みの最大値であり、この実施形態ではＷｍａｘ＝１である。また、ΔＷｆａｉｌｕｒｅは、送信が失敗したときに重みを増やす所定の量であり、実施形態に応じて適宜値を決めることができる。例えば、ΔＷｆａｉｌｕｒｅ＝０．１でもよい。もちろん、ΔＷｆａｉｌｕｒｅ≠ΔＷｓｕｃｃｅｓｓでもよい。
【０３６２】
なお、データフレーム処理部１１０はステップＳ８２８で、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値を、例えば図４のＤＲＡＭ２０４などのワークエリアに「転送に失敗したＬＤ」として記憶する。例えば、データフレーム処理部１１０は、ＤＲＡＭ２０４上の線形リストをステップＳ８１７で空に初期化し、ステップＳ８２８の実行のたびに、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値を保持する要素を線形リストに追加してもよい。もちろん、「転送に失敗したＬＤ」の記憶のために配列など他のデータ構造が使われてもよい。
【０３６３】
さらに、データフレーム処理部１１０はステップＳ８２８で、ステップＳ８１７（または後述のステップＳ８２９）で取得したＬＤの値をＬＤとして有する重み付けテーブル１０４−ｉのエントリにおいて、最終更新時刻に現在時刻を設定する。そして処理はステップＳ８２９に移行する。
【０３６４】
ステップＳ８２９でデータフレーム処理部１１０は、今までにＬＤとして試していない他の選択可能な隣接ノード装置を探す。具体的には、データフレーム処理部１１０は、受信したデータフレームのＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、転送に失敗したＬＤ以外で、かつＯＬＳとは異なるＬＤのうちで、最小の重みと対応付けられているＬＤの値を取得する。なお、転送に失敗したＬＤは、ステップＳ８２８において例えば図４のＤＲＡＭ２０４などのワークエリアに、例えば線形リストなどの形で、記憶されている。
【０３６５】
つまり、データフレーム処理部１１０は、重み付けテーブル１０４−ｉにおいて、（Ｈ１）かつ（Ｈ２）である値をＬＤとして有するエントリの中から、重みの値が最小のものを選択する。そして、データフレーム処理部１１０は、選択したエントリのＬＤと重みの値を、例えば図４のＤＲＡＭ２０４などの記憶領域に記憶する。
【０３６６】
（Ｈ１）過去にステップＳ８１７またはＳ８２９で取得したＬＤの値とは異なる値
（Ｈ２）ステップＳ８０８またはＳ８１０で記憶したＯＬＳの値とは異なる値
したがって、例えば、ステップＳ８２８で０．２に更新された重みと対応付けられた隣接ノード装置は、ステップＳ８２９でＬＤとして選択されず、ステップＳ８２９では０．２より大きな、０．８などの重みの隣接ノード装置が選択されることもありうる。
【０３６７】
以上のステップＳ８１７〜Ｓ８２９の具体例を挙げれば、以下のとおりである。例えば、図６のノード装置Ｎ４には、ノード装置Ｎ３、Ｎ５、およびＮ７が隣接している。そして、図１２のとおり、ノード装置Ｎ４のＦＩＤ管理テーブル１０５−Ｎ４のエントリＥ４のＯＬＳの値は、Ｎ３である。
【０３６８】
図６の例では、ノード装置Ｎ４のデータフレーム処理部１１０−Ｎ４が、最初にステップＳ８１７でＬＤの値Ｎ７を取得するので、ステップＳ１０４のようにノード装置Ｎ７へのデータフレームの送信が行われる。しかし、図６に示すとおりステップＳ１０４の送信は失敗するので、データフレーム処理部１１０−Ｎ４はステップＳ８２６で「送信失敗」と判断する。
【０３６９】
すると、データフレーム処理部１１０−Ｎ４がステップＳ８２９を実行する時点で、転送に失敗したＬＤ（すなわちＮ７）以外で、かつＯＬＳ（すなわちＮ３）とは異なるＬＤの値は、Ｎ５のみである。よって、ステップＳ８２９ではＬＤの値Ｎ５が取得される。
【０３７０】
こうしてステップＳ８２９でＬＤの値が取得されると、処理はステップＳ８２９からステップＳ８１８へ戻る。
よって、上記のノード装置Ｎ４の例では、ステップＳ８２９の後、再度ステップＳ８１８〜Ｓ８２６が実行される。そして、図６にステップＳ１０５として示すように、今度はステップＳ８２６で「送信成功」と判断され、ステップＳ８２７が実行されて、データフレーム受信処理が終了する。
【０３７１】
なお、ステップＳ８２８で、例えば式（７）のように重みを更新することの影響について具体例を挙げて説明すれば、以下のとおりである。
例えば、図２のネットワーク２において、ノード装置Ｎ１０６が隣接ノード装置Ｎ１０８から、ノード装置Ｎ１１８をＧＤとして指定する第１のデータフレームを時刻Ｔｒｃｖ１に受信したとする。そして、時刻Ｔｒｃｖ１にノード装置Ｎ１０６には、ノード装置Ｎ１１８に対応する重み付けテーブル１０４−ｇ１０６−Ｎ１０６が存在したとする。また、時刻Ｔｒｃｖ１の重み付けテーブル１０４−ｇ１０６−Ｎ１０６においては、ノード装置Ｎ１０２には重み０．４が、ノード装置Ｎ１０３には重み０．７が、ノード装置Ｎ１０７には重み０．１が、ノード装置Ｎ１０８には重み０．５が、それぞれ対応付けられていたとする。
【０３７２】
すると、ステップＳ８１７では、最小の重み０．１と対応付けられているノード装置Ｎ１０７がＬＤとして選択される。ところが、ステップＳ８１９でデータフレームが送信されるとき、偶然、ノード装置Ｎ１０６とＮ１０７の間に遮蔽物が置かれるなどの理由で、一時的に、ノード装置Ｎ１０６とＮ１０７の無線リンクが通信不能になったとする。
【０３７３】
すると、ＡＣＫフレームが返信されないので、ステップＳ８２８では、ノード装置Ｎ１０７の重みが０．１から０．２に更新される。そして、ステップＳ８２９では、重み０．４と対応付けられているノード装置Ｎ１０２がＬＤとして選択される。ここで、ステップＳ８１９におけるデータフレームの送信が成功し、ノード装置Ｎ１０２からＡＣＫフレームが返信されたとする。すると、ステップＳ８２７でノード装置Ｎ１０２の重みが０．４から０．３に更新され、データフレーム受信処理が終了する。
【０３７４】
ここで、ノード装置Ｎ１０６からノード装置Ｎ１０２へ送信された第１のデータフレームは、ノード装置Ｎ１０６にバックトラックすることなく、ノード装置Ｎ１１８に到達したとする。つまり、重み付けテーブル１０４−ｇ１０６−Ｎ１０６においては、第１のデータフレームの転送にともなって重みが１に更新されるエントリはなかったとする。
【０３７５】
すると、ノード装置Ｎ１０６が、その後の時刻Ｔｒｃｖ２に、同じくノード装置Ｎ１１８をＧＤとして指定する第２のデータフレームを今度はノード装置Ｎ１０３から受信したとき、重み付けテーブル１０４−ｇ１０６−Ｎ１０６の内容は次のとおりである。すなわち、ノード装置Ｎ１０２には重み０．３が、ノード装置Ｎ１０３には重み０．７が、ノード装置Ｎ１０７には重み０．２が、ノード装置Ｎ１０８には重み０．５が、それぞれ対応付けられている。
【０３７６】
よって、ステップＳ８１７では、第１のデータフレームの転送に失敗したとはいえ、なお最小の重みと対応付けられているノード装置Ｎ１０７が、ＬＤとして選択される。そして、もし時刻Ｔｒｃｖ２にノード装置Ｎ１０６とＮ１０７の間の無線リンクの通信品質が好転しており、ステップＳ８１９での第２のデータフレームの送信が成功すれば、ステップＳ８２７でノード装置Ｎ１０７の重みは再度０．１に戻る。
【０３７７】
ここで、第２のデータフレームのノード装置Ｎ１０７への転送の結果、バックトラックが生じないものとすると、ノード装置Ｎ１０７の重みは０．１のままである。よって、さらにその後の時刻Ｔｒｃｖ３に、同じくノード装置Ｎ１１８をＧＤとして指定する第３のデータフレームを、ノード装置Ｎ１０７以外の隣接ノード装置からノード装置Ｎ１０６が受信すれば、ＬＤとして最も優先的に選択されるのは、やはりノード装置Ｎ１０７である。
【０３７８】
このように、ステップＳ８２９で重みを急激に最大値に設定するのではなく少しだけ大きくすると、重み付けテーブル１０４が通信環境の変化に過剰に反応することはない。よって、同じノード装置をＧＤとして指定する複数のデータフレームを次々とノード装置Ｎ１０６が受信しているうちに、一時的に障害の生じていたリンクが障害から回復すれば、環境の好転に追従して、過去の学習結果が再びＬＤの選択に活かされるようになる。つまり、上記の例では、ＬＤとして適切だと過去に学習済みのノード装置Ｎ１０７が、再びＬＤとして優先的に選択されるようになる。
【０３７９】
あるいは、時刻Ｔｒｃｖ２においてノード装置Ｎ１０６とＮ１０７の間の無線リンクが障害から復旧していない場合もありうる。その場合、第２のデータフレームの送信時のＬＤとして、一旦は重み０．２のノード装置Ｎ１０７が選択されるが、ＡＣＫフレームが受信されないために、ノード装置Ｎ１０７の重みは０．３に更新される。そして、最終的には重み０．３と対応付けられたノード装置Ｎ１０２がＬＤとして選択され、送信が成功して重みが０，２に更新されることもありうる。
【０３８０】
すると、時刻Ｔｒｃｖ３に、例えばノード装置Ｎ１０３から、ノード装置Ｎ１０６が第３のデータフレームを受信すると、重み０．２に対応付けられたノード装置Ｎ１０２がＬＤとして選択され、また送信が成功し、ノード装置Ｎ１０２の重みが０．１になるかもしれない。そして、その後しばらくは、ノード装置Ｎ１１８をＧＤとして指定するデータフレームのＬＤとして、ノード装置Ｎ１０６はノード装置Ｎ１０２を選択し続けるかもしれない。
【０３８１】
しかし、さらにその後、ノード装置Ｎ１０６とＮ１０２の間の無線リンクに障害が生じたとすると、ノード装置Ｎ１０２からはＡＣＫフレームが返信されてこない。するとステップＳ８２９でＬＤの再選択が行われる。
【０３８２】
その場合、時刻Ｔｒｃｖ１以前にＬＤとして好適であると学習されていたノード装置Ｎ１０７が、重み０．５や０．７と対応付けられており相対的にＬＤとしてあまり適切ではないノード装置Ｎ１０８やＮ１０３よりも、優先的にＬＤとして選ばれる。その理由は、第１と第２のデータフレームの送信時の重みの学習は、ステップＳ８２８に示すように重みをなだらかに変化させるものであり、ノード装置Ｎ１０７の重みは、なおノード装置Ｎ１０８やＮ１０３の重みよりも小さいからである。
【０３８３】
そして、この時点でノード装置Ｎ１０６とＮ１０７の間の無線リンクが障害から復旧していれば、再度、ノード装置Ｎ１０７の重み０．２に減らされる。このように、多少復旧に時間がかかっても、一時的な環境の変化が過剰に重み付けテーブル１０４に反映されないため、過去の学習の成果が緩やかに反映される。したがって、適切なＬＤが選択される蓋然性も高まる。
【０３８４】
以上のとおり、一時的な障害の影響を過剰に受けないようにするため、ステップＳ８２８では、少しだけ重みが調整されるのである。
【０３８５】
さてここで、ステップＳ８１８の分岐の説明に戻る。ステップＳ８１８で２つの条件（Ｆ１）と（Ｆ２）のいずれかが成立すると判断されると、もはやＬＤとして選択可能な隣接ノード装置は残っていないので、処理は図２３のステップＳ８３０に移行する。
【０３８６】
ステップＳ８３０でデータフレーム処理部１１０は、以下のようにして新たなデータフレームを作成して送信部１０２に出力し、作成されたデータフレームを送信部１０２が送信する。
【０３８７】
具体的には、データフレーム処理部１１０は、ステップＳ８０８またはＳ８１０で記憶したＯＬＳの値を新たなデータフレームのＬＤに指定し、自ノードＩＤを新たなデータフレームのＬＳに指定する。また、データフレーム処理部１１０は、受信したデータフレームからＧＤ、ＧＳ、ＦＩＤ、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。なお、「受信したデータフレーム」とは、上記のとおり、ステップＳ８０１で見つかったバッファ部１０９内のエントリに格納されているデータフレームである。ステップＳ８３０で行われる送信処理が、すなわち、バックトラック動作である。
【０３８８】
なお、ステップＳ８３０の送信の具体例は、図６のステップＳ１１０である。
ステップＳ８３０での送信後、処理はステップＳ８３１に移行する。ステップＳ８３１でデータフレーム処理部１１０は、受信したデータフレームのＦＩＤとＧＳの値を検索キーとして用いてＦＩＤ管理テーブル１０５を検索する。
【０３８９】
そして、ステップＳ８３２でデータフレーム処理部１１０は、ステップＳ８３１の検索の結果、エントリがヒットしたか否かを判断する。エントリがヒットしていれば処理はステップＳ８３３に移行し、エントリがヒットしていなければ処理はステップＳ８３４に移行する。
【０３９０】
なお、ステップＳ８０７で「エントリがヒットした」と判断されている場合に、ステップＳ８３１の検索の結果見つかるエントリは、ステップＳ８０６の検索の結果見つかったエントリである。また、ステップＳ８０７で「エントリがヒットしなかった」と判定され、かつステップＳ８２３において新規エントリが作成された場合は、ステップＳ８３１の検索の結果、ステップＳ８２３で作成された新規エントリが見つかる。
【０３９１】
ステップＳ８３２で「エントリがヒットしなかった」と判断されるのは、（Ｉ１）かつ（Ｉ２）の場合であり、換言すれば、（Ｊ１）かつ（Ｊ２）の場合である。
（Ｉ１）ステップＳ８０７で「エントリがヒットしなかった」と判断された。
（Ｉ２）１回目にステップＳ８１８が実行された直後に、ステップＳ８３０に処理が移行した。
【０３９２】
（Ｊ１）ノード装置１００が今までに受信したことのないデータフレームが受信された。
（Ｊ２）受信したデータフレームのＧＳの値に対応する重み付けテーブル１０４−ｉでは、すべてのＬＤに最大値の重みが対応付けられている。
【０３９３】
ステップＳ８３３でデータフレーム処理部１１０は、ステップＳ８３１の検索の結果ヒットしたエントリを更新する。具体的には、データフレーム処理部１１０は、ヒットしたエントリにおいて、ＬＤには、ヒットしたエントリ自身のＯＬＳの値をコピーし、最終更新時刻には、現在時刻を設定する。そして処理はステップＳ８３６に移行する。
【０３９４】
他方、ステップＳ８３４では、データフレーム処理部１１０はＦＩＤ管理テーブル１０５に新規エントリを追加する。
そして、次のステップＳ８３５でデータフレーム処理部１１０は、ステップＳ８３４で追加した新規エントリに値を設定する。具体的には、データフレーム処理部１１０は、新規エントリにおいて、ＦＩＤとＧＳには、受信したデータフレームの値をそれぞれコピーし、最終更新時刻には、現在時刻を設定し、ＯＬＳとＬＤには、受信したデータフレームのＬＳの値をコピーする。そして処理はステップＳ８３６に移行する。
【０３９５】
ステップＳ８３６でデータフレーム処理部１１０は、ステップＳ８３０で送信したデータフレームに関する送信成否の通知を待つ。そして、「送信成功」または「送信失敗」の通知をデータフレーム処理部１１０がＡＣＫ処理部１０７から受けると、処理はステップＳ８３７に移行する。ステップＳ８３６はステップＳ８２５と類似しているので、詳しい説明は省略する。
【０３９６】
そして、ステップＳ８３７でデータフレーム処理部１１０は、ステップＳ８３０におけるデータフレームの送信が成功したか否かを判断する。送信が失敗した場合、処理はステップＳ８３８に移行し、送信が成功した場合、処理はステップＳ８３９に移行する。
【０３９７】
ステップＳ８３８が実行されるのは、（Ｋ１）かつ（Ｋ２）という、例外的な場合である。
（Ｋ１）ＯＬＳ以外のすべての隣接ノード装置が、（Ｋ１−１）または（Ｋ１−２）である。
（Ｋ１−１）最大値の重みと対応付けられている。
（Ｋ１−２）ＬＤとして指定してデータフレームを送信すると、送信に失敗する。
（Ｋ２）ＯＬＳへのデータフレームの送信（つまりバックトラック動作）は失敗した。
【０３９８】
この場合、データフレーム処理部１１０はステップＳ８３８で、受信したデータフレームを破棄する。すなわち、データフレーム処理部１１０は、ステップＳ８０１で見つけたエントリをバッファ部１０９から削除する。そして、データフレーム受信処理は終了する。
【０３９９】
なお、ステップＳ８３８の影響について、具体例とともに説明すれば以下のとおりである。
例えば、図６のステップＳ１１０は、ノード装置Ｎ３がステップＳ８３０で行う送信である。図６の例では、ステップＳ１１０でのノード装置Ｎ３からノード装置Ｎ２へのデータフレームの送信に対して、ノード装置Ｎ２がＡＣＫフレームをノード装置Ｎ３に返信する。
【０４００】
ここで、逆に、ステップＳ１１０の時点でノード装置Ｎ２とＮ３の間のリンクに障害が発生し、ステップＳ１１０（すなわちステップＳ８３０）でノード装置Ｎ３が送信したデータフレームが、ノード装置Ｎ２には届かなかったと仮定する。すると、当然ノード装置Ｎ３がノード装置Ｎ２からＡＣＫフレームを受信することもないので、ノード装置Ｎ３は、ステップＳ８３７で「送信失敗」と判断し、ステップＳ８３８を実行する。つまり、ステップＳ１０１でノード装置Ｎ１が送信したデータフレームは、ＧＤであるノード装置Ｎ７に到達する前に、ネットワーク１内で消滅してしまう。
【０４０１】
しかも、ノード装置Ｎ２にとっては、「ステップＳ１０２で送信が成功した後、どの隣接ノード装置からも同じデータフレームは受信されていない」という状態である。したがって、ノード装置Ｎ２には、「ＧＤとしてノード装置Ｎ７が指定されているとき、ノード装置Ｎ２がＬＤとしてノード装置Ｎ３を選択することは不適切である」とは認識されない。つまり、図６の例のように、ノード装置Ｎ２が「ＧＤとしてノード装置Ｎ７が指定されているとき、ノード装置Ｎ２はＬＤとしてノード装置Ｎ６を選択するのが適切である」と学習することはできない。
【０４０２】
その結果、ＧＤとしてノード装置Ｎ７が指定されている新たな別のデータフレームをノード装置Ｎ２が受信した場合（またはそのようなデータフレームをノード装置Ｎ２がＧＳとなって送信する場合）、ノード装置Ｎ２は、ＬＤとしてノード装置Ｎ３を選択する。
【０４０３】
仮に、その時点でもまだノード装置Ｎ２とＮ３の間のリンクが障害から復旧していなければ（例えば、悪い電波状況が続いていれば）、ノード装置Ｎ２から送信されたデータフレームがノード装置Ｎ３には届かない。したがって、ノード装置Ｎ２はＡＣＫフレームを受信することができず、図２２のステップＳ８２６で「送信失敗」と判断する。
【０４０４】
その結果、ノード装置Ｎ２はステップＳ８２８で、ＧＤであるノード装置Ｎ７に対応する重み付けテーブル１０４−ｈ２−Ｎ２（この参照符号は図６の説明と同様）においてノード装置Ｎ２に対応する重みを大きくする。そして、ノード装置Ｎ２は、続くステップＳ８２９で、ＬＤとしてノード装置Ｎ６を再選択する。
【０４０５】
このように、データフレームがネットワーク１内のノード装置Ｎ３においてステップＳ８３８で破棄されると、破棄されたデータフレームに関するＯＬＳである他のノード装置Ｎ２における重み付けテーブル１０４−ｈ２−Ｎ２の学習が、遅れることがある。
【０４０６】
しかしながら、上記の例示から明らかなとおり、ノード装置Ｎ２における学習は単に少し遅れるだけである。ノード装置Ｎ２は、先のデータフレームと同じくノード装置Ｎ７をＧＤとする次のデータフレームを受信した後、その受信を契機とする一連の処理により、適切な重みを学習することができる。つまり、複数のデータフレームが次々に流通するネットワーク１全体の動作として見れば、ＯＬＳへのバックトラックのためのデータフレームの送信失敗により局所的に重みの学習が遅れるノード装置があっても、学習の遅れはすぐに挽回することができる。
【０４０７】
ここで、図２３のフローチャートの説明に戻る。ステップＳ８３９は、ＯＬＳへのデータフレームの送信に成功した場合に実行される。
ステップＳ８３９でデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ８３０で送信したデータフレームのＧＤとＬＤの組に対応する重みを小さくする。換言すれば、データフレーム処理部１１０は、受信したデータフレームのＧＤに対応する重み付けテーブル１０４−ｉにおいて、送信したデータフレームのＬＤ（つまりステップＳ８０８またはＳ８１０で記憶したＯＬＳ）に対応する重みを更新する。
【０４０８】
ステップＳ８３９の詳細はステップＳ８２７と同様なので詳しい説明は省略するが、データフレーム処理部１１０は、例えば式（６）を使って重みを更新してもよい。データフレーム処理部１１０はさらに、重み付けテーブル１０４−ｉの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
【０４０９】
続いて、図２４を参照して、図２１のステップＳ８１２ａの重み付けテーブル調整処理の詳細を説明する。なお、図２４の重み付けテーブル調整処理は、後述の図２７のステップＳ１１０８ａでも呼び出される。図２４の説明において「ヒットした重み付けテーブル１０４−ｉ」とは、図２１のステップＳ８１１の検索または図２７のステップＳ１１０７の検索でヒットしたテーブルを意味する。
【０４１０】
ステップＳ８５１でデータフレーム処理部１１０は、隣接ノード管理テーブル１０３（図９参照）の１つ目のエントリに注目する。なお、以下の図２４の説明において、データフレーム処理部１１０が注目している隣接ノード管理テーブル１０３のエントリを「注目エントリ」という。
【０４１１】
次に、ステップＳ８５２では、ヒットした重み付けテーブル１０４−ｉに注目エントリのノードＩＤの値をＬＤとして含むエントリがあるか否かを、データフレーム処理部１１０が判断する。ヒットした重み付けテーブル１０４−ｉに、注目エントリのノードＩＤの値をＬＤとして含むエントリがあれば、処理はステップＳ８５５に移行する。逆に、ヒットした重み付けテーブル１０４−ｉに、注目エントリのノードＩＤの値をＬＤとして含むエントリがなければ、処理はステップＳ８５３に移行する。
【０４１２】
ステップＳ８５３でデータフレーム処理部１１０は、ヒットした重み付けテーブル１０４−ｉに新規エントリを追加する。
続いてステップＳ８５４でデータフレーム処理部１１０は、ステップＳ８５３で重み付けテーブル１０４−ｉに追加した新規エントリに値を設定する。つまり、データフレーム処理部１１０は、新規エントリにおいて、隣接ノード管理テーブル１０３の注目エントリのノードＩＤの値をＬＤフィールドに、初期重み付け値を重みフィールドに、現在時刻を最終更新時刻フィールドに、それぞれ設定する。
【０４１３】
なお、ステップＳ８５４における初期重み付け値は、図１５のステップＳ３０８における初期重み付け値とは異なる。具体的には、ステップＳ８５４での初期重み付け値は、ヒットした重み付けテーブル１０４−ｉの重みフィールドにおいて、１未満の重みのうちの最大値である。
【０４１４】
例えば、ヒットした重み付けテーブル１０４−ｉの重みフィールドに４つのエントリが存在し、それぞれの重みフィールドの値が０．４、０．７、１、および０．５であれば、ステップＳ８５４での初期重み付け値は、０．７である。なお、ヒットした重み付けテーブル１０４−ｉの重みフィールドの値が、全エントリで１の場合は、ステップＳ８５４での初期重み付け値は、１未満の任意の値であり、例えば図１５のステップＳ３０８での初期重み付け値と同様に０．５でもよい。
【０４１５】
以上のような初期重み付け値をステップＳ８５４で用いることにより、重み付けテーブル１０４−ｉの既存のエントリに反映されている学習結果が優先的に考慮される。その結果、経路が必要以上に変動することがなくなり、換言すれば、経路が安定する。
【０４１６】
例えば、４つのエントリの重みフィールドの値がそれぞれ０．４、０．７、１、および０．５である上記の例において、ステップＳ８５４で初期重み付け値として図１５のステップＳ３０８と同様に０．５が使われるとする。すると、重みが何も学習されていない隣接ノード装置（すなわちステップＳ８５３で追加された新規エントリにＬＤとしてノードＩＤが記録されている隣接ノード装置）が、重みが０．７の隣接ノード装置よりも優先的にＬＤとして選択されてしまう。つまり、今までの学習の蓄積としての重み０．７が無視されてしまう。
【０４１７】
そこで、この実施形態では、重みが何も学習されていない隣接ノード装置が、重みが学習済みの隣接ノード装置よりも優先的にＬＤとして選択されることを防ぎ、今までの学習結果を優先的に考慮するために、上記のように定義される初期重み付け値が利用される。
【０４１８】
ステップＳ８５５でデータフレーム処理部１１０は、隣接ノード管理テーブル１０３にまだ注目していないエントリが残っているか否かを判断する。データフレーム処理部１１０が隣接ノード管理テーブル１０３のすべてのエントリに注目し終えていれば、図２４の処理は終了する。他方、まだデータフレーム処理部１１０が注目していないエントリが隣接ノード管理テーブル１０３に残っていれば、処理はステップＳ８５６に移行する。
【０４１９】
そして、ステップＳ８５６でデータフレーム処理部１１０は、隣接ノード管理テーブル１０３のまだ注目していないエントリのうち、次のエントリに注目する。そして処理はステップＳ８５２に戻る。
【０４２０】
なお、図２４の処理の意義は以下のとおりである。
重み付けテーブル１０４−ｉにおけるエントリごとのエージング処理の副作用として、図２４の処理の直前には、次のような状況の可能性もある。すなわち、隣接ノード管理テーブル１０３に登録されているある隣接ノード装置のノードＩＤを、ＬＤとして有するエントリが、重み付けテーブル１０４−ｉに存在しない可能性がある。
【０４２１】
ここで、ノード装置１００の隣接ノード装置は、データフレームを送信する際にデータフレーム処理部１１０が選択するＬＤの潜在的な候補である。よって、ヒットした重み付けテーブル１０４−ｉのＬＤフィールドにおいて全隣接ノード装置が網羅されるようにすることが、ノード装置１００の適切な動作のためには望ましい。
【０４２２】
以上の図２４の重み付けテーブル調整処理によれば、エージング処理の副作用として生じる可能性のある上記のような状況が解消される。つまり、隣接ノード管理テーブル１０３に登録されているすべてのノードＩＤが、ヒットした重み付けテーブル１０４−ｉにＬＤとして登録されていることが、保証される。
【０４２３】
以上、図２０〜２４を参照して、図１４のステップＳ２０５におけるデータフレーム受信処理について詳しく説明した。続いて、データフレーム受信処理のステップＳ８２６およびＳ８３７における送信成否の通知に関連する処理について、図２５と図２６を参照して説明する。
【０４２４】
図２５は、図１４のステップＳ２０６におけるＡＣＫフレーム受信処理のフローチャートである。図２５の処理は、フレーム分岐処理部１０６からＡＣＫフレームがＡＣＫ処理部１０７に出力されると開始される。
【０４２５】
ステップＳ９０１でＡＣＫ処理部１０７は、フレーム分岐処理部１０６から受け取ったＡＣＫフレームのＬＤの値が自ノードＩＤと等しいか否かを判断する。ＡＣＫフレームのＬＤの値が自ノードＩＤと等しければ、処理はステップＳ９０２に移行し、ＡＣＫフレームのＬＤの値が自ノードＩＤと異なれば、図２５の処理は終了する。ＡＣＫ処理部１０７も、例えばフラッシュメモリ２０５などに予め格納された自ノードＩＤを参照することができる。
【０４２６】
例えば、図６のステップＳ１０５でノード装置Ｎ４が送信したデータフレームに対するＡＣＫフレームを、図３０にステップＳ１０５ａとして示すようにノード装置Ｎ５が送信すると、無関係なノード装置Ｎ３もＡＣＫフレームを受信する。なぜなら、ノード装置Ｎ３はノード装置Ｎ５に隣接しているからである。
【０４２７】
しかし、ノード装置Ｎ３のＡＣＫ処理部１０７−Ｎ３は、ステップＳ９０１の判断の結果、直ちに図２５の処理を終了するので、ノード装置Ｎ３は、ノード装置Ｎ３と無関係なＡＣＫフレームによる副作用を受けることはない。
【０４２８】
ステップＳ９０２でＡＣＫ処理部１０７は、ＡＣＫフレームのＧＳとＦＩＤの値から、ＡＣＫフレームに対応する送信済みのデータフレームを特定する。
例えば、図６のステップＳ１０２でノード装置Ｎ２がノード装置Ｎ３へ送信する図７のデータフレーム３０３に対して、ノード装置Ｎ３は図７のＡＣＫフレーム３２２をノード装置Ｎ２に返信する。ここで、ＡＣＫフレーム３２２の受信を契機にノード装置Ｎ２のＡＣＫ処理部１０７−Ｎ２が図２５の処理を行う場合について詳しく説明すると、以下のとおりである。
【０４２９】
ＡＣＫ処理部１０７−Ｎ２は、ステップＳ９０２において、ＡＣＫフレーム３２２のＧＳとＦＩＤの値（すなわちＮ１とＦａ）を取り出す。また、バッファ部１０９−Ｎ２は、図８と同様の形式であるから、バッファ部１０９−Ｎ２には、ノード装置Ｎ２から送信済みのデータフレーム３０３が格納されている。よって、ＡＣＫ処理部１０７−Ｎ２は、取り出したＧＳとＦＩＤの値（すなわちＮ１とＦａ）をキーにしてバッファ部１０９−Ｎ２のエントリを検索し、データフレーム３０３を含むエントリを特定する。
【０４３０】
続いて、ステップＳ９０３でＡＣＫ処理部１０７は、ステップＳ９０２で特定した送信済みのデータフレームをバッファ部１０９から削除可能な状態にする。つまり、ステップＳ９０２の検索で見つかったエントリを、ＡＣＫ処理部１０７はバッファ部１０９から削除可能な状態にする。その後、所定の時間が経過した時点で、バッファ部１０９からＡＣＫフレームに対応するデータフレームが削除される。
【０４３１】
また、ステップＳ９０４でＡＣＫ処理部１０７は、ステップＳ９０２で特定した送信済みのデータフレームに関して、データフレーム処理部１１０に「送信成功」を通知する。そして、図２５の処理は終了する。
【０４３２】
例えば、データフレーム処理部１１０は、図４のＭＰＵ２０１がプログラムを実行することにより実現されていてもよい。その場合、ＭＰＵ２０１をデータフレーム処理部１１０として機能させるスレッドは、データフレームの送信後、ＡＣＫフレームを受信するまでスリープしていてもよい。ステップＳ９０４における「送信成功」の通知は、スリープしているスレッドを起こす処理である。
【０４３３】
なお、ステップＳ９０４の通知は、ステップＳ９０２で特定したデータフレームのＧＳとＦＩＤの値の通知をともなう。例えば上記の例においては、ＡＣＫ処理部１０７−Ｎ２は、データフレーム３０３を識別するためのＧＳとＦＩＤの値（すなわちＮ１とＦａ）も、データフレーム処理部１１０に通知する。
【０４３４】
図２６は、ＡＣＫフレームがタイムアウト時刻までに受信されない場合の処理を示すフローチャートである。図２６の処理は、例えば、図４のタイマＩＣ２０３が所定の間隔で発生させる割り込み信号を契機として、定期的に行われる。
【０４３５】
ステップＳ１００１でＡＣＫ処理部１０７は、バッファ部１０９（図８を参照）の１つ目のエントリに注目する。以下、図２６に関する説明においては、ＡＣＫ処理部１０７が注目しているバッファ部１０９のエントリを「注目エントリ」という。
【０４３６】
続いてステップＳ１００２でＡＣＫ処理部１０７は、現在時刻と注目エントリのタイムアウト時刻フィールドの値を比較する。そして、現在時刻がタイムアウト時刻以降であれば、処理はステップＳ１００３に移行する。他方、現在時刻がまだタイムアウト時刻に達していなければ、処理はステップＳ１００５に移行する。
【０４３７】
ステップＳ１００３でＡＣＫ処理部１０７は、バッファ部１０９の注目エントリに格納されているデータフレームに関して、「送信失敗」をデータフレーム処理部１１０に通知する。ステップＳ１００３の通知は、図２５のステップＳ９０４の通知と同様に、具体的には、例えばスリープしているスレッドを起こす処理であってもよい。
【０４３８】
また、ステップＳ９０４の通知と同様に、ステップＳ１００３の通知も、データフレームのＧＳとＦＩＤの値の通知をともなう。具体的には、ＡＣＫ処理部１０７は、注目エントリに格納されているデータフレームのＧＳとＦＩＤの値を読み取り、読み取ったＧＳとＦＩＤの値によりデータフレームを特定して、特定したデータフレームの「送信失敗」をデータフレーム処理部１１０に通知する。
【０４３９】
なお、送信失敗の場合、データフレーム処理部１１０が今までＬＤとして試していない隣接ノード装置を新たなＬＤとして選択してデータフレームの再送を試みることがある。よって、ステップＳ１００３の時点では、注目エントリはバッファ部１０９から削除されない。
【０４４０】
続いてステップＳ１００４でＡＣＫ処理部１０７は、注目エントリのタイムアウト時刻に、式（５）の時刻Ｔｔｉｍｅｏｕｔを設定する。そして、処理はステップＳ１００５に移行する。
【０４４１】
ステップＳ１００５では、まだ注目していないエントリがバッファ部１０９に残っているか否かをＡＣＫ処理部１０７が判断する。ＡＣＫ処理部１０７が、バッファ部１０９のすべてのエントリに注目し終わっていれば、図２６の処理は終了する。他方、まだＡＣＫ処理部１０７が注目していないエントリがバッファ部１０９に残っていれば、処理はステップＳ１００６に移行する。
【０４４２】
ステップＳ１００６でＡＣＫ処理部１０７は、バッファ部１０９の中でまだ注目していない次のエントリに注目する。そして処理はステップＳ１００２に戻る。
ところで、図２０〜図２３を参照して説明したデータフレーム受信処理は、上記のとおり、ノード装置１００がＧＳとならないタイプのノード装置である場合の例である。以下では、図２７〜図２９を参照して、ＧＳとなりうるタイプのノード装置に特有の処理について説明する。
【０４４３】
図２７と図２８は、ノード装置１００がＧＳとなってデータフレームを送信する場合の送信処理のフローチャートである。図２７の処理は、上位層処理部１１１からデータフレーム処理部１１０への要求を契機として開始される。
【０４４４】
ステップＳ１１０１でデータフレーム処理部１１０は、上位層処理部１１１から、上位層処理部１１１における上位層のプロトコルの処理の結果として、データフレームのＧＤの値とペイロードを取得する。
【０４４５】
例えば、「上位層のプロトコル」がイーサネットプロトコルであってもよい。その場合、上位層処理部１１１は、この実施形態で定義されるデータフレームのペイロードとして、イーサネットフレームをデータフレーム処理部１１０に出力する。また、上位層処理部１１１は、この実施形態におけるデータフレームのＧＤに設定する値を、データフレーム処理部１１０に通知する。
【０４４６】
そして、データフレーム処理部１１０は、上位層処理部１１１から取得したペイロードを含む新たなデータフレームを作成し、作成したデータフレームのＧＤに、上位層処理部１１１から取得した値を設定する。例えば、図６の例では、ノード装置Ｎ１のデータフレーム処理部１１０−Ｎ１は、上位層処理部１１１−Ｎ１からＧＤの値としてＮ７を取得し、データフレームのＧＤにＮ７と設定する。
【０４４７】
続いて、ステップＳ１１０２でデータフレーム処理部１１０は、ステップＳ１１０１で取得したペイロードの長さを求め、作成したデータフレームの長さフィールドに設定する。例えば、図６の例では、図７のデータフレーム３０２と３０３に例示するように、ペイロードの長さはＰａであるから、ノード装置Ｎ１のデータフレーム処理部１１０−Ｎ１は、作成したデータフレームの長さフィールドにＰａと設定する。
【０４４８】
そして、ステップＳ１１０３でデータフレーム処理部１１０は、作成したデータフレームのＧＳとＬＳに自ノードＩＤを設定する。例えば、図６の例では、ノード装置Ｎ１のデータフレーム処理部１１０−Ｎ１は、作成したデータフレームのＧＳとＬＳにそれぞれＮ１と設定する。
【０４４９】
そして、ステップＳ１１０４でデータフレーム処理部１１０は、ＦＩＤ生成部１１３に新たなＦＩＤの生成を要求する。するとＦＩＤ生成部１１３が新たなＦＩＤを生成してデータフレーム処理部１１０に出力するので、データフレーム処理部１１０は、生成されたＦＩＤを作成したデータフレームのＦＩＤフィールドに設定する。
【０４５０】
さらに、ステップＳ１１０５でデータフレーム処理部１１０は、「データフレーム」を示す所定の値Ｄ（図７を参照）を、作成したデータフレームのタイプフィールドに設定する。なお、以上のステップＳ１１０２〜Ｓ１１０５の実行順序は順不同である。
【０４５１】
以上のようにして、送信するデータフレームを作成し終わると、ステップＳ１１０６でデータフレーム処理部１１０は、作成したデータフレームをバッファ部１０９に格納する。すなわち、データフレーム処理部１１０は、バッファ部１０９内に新たなエントリの領域を確保し、確保した領域に、作成したデータフレームを格納する。なお、図８に示すようにバッファ部１０９にはタイムアウト時刻フィールドがあるが、この時点ではタイムアウト時刻は設定されない。
【０４５２】
続いてステップＳ１１０７でデータフレーム処理部１１０は、ステップＳ１１０１で上位層処理部１１１から指定されたＧＤの値を用いて重み付けテーブル１０４を検索する。
そしてステップＳ１１０８でデータフレーム処理部１１０は、指定されたＧＤの値に対応する重み付けテーブルが、ステップＳ１１０７の検索の結果としてヒットしたか否かを判断する。指定されたＧＤの値に対応する重み付けテーブルがヒットした場合、処理はステップＳ１１０８ａに移行し、指定されたＧＤの値に対応する重み付けテーブルが存在しない場合、処理はステップＳ１００９に移行する。
【０４５３】
ステップＳ１１０８ａでデータフレーム処理部１１０は、図２４の重み付けテーブル調整処理を行い、エージング処理の副作用を中和する。そして、処理はステップＳ１１１０に移行する。
【０４５４】
ステップＳ１１０９でデータフレーム処理部１１０は、ステップＳ１１０１で指定されたＧＤの値に対応する新規重み付けテーブルを重み付けテーブル１０４の中に追加する。具体的には、図２１のステップＳ８１３〜Ｓ８１６と類似の処理をデータフレーム処理部１１０はステップＳ１１０９で行う。
【０４５５】
すなわち、データフレーム処理部１１０はステップＳ１１０９で、上位層処理部１１１から指定されたＧＤの値に対応する新規重み付けテーブルを追加し、新規重み付けテーブルにおいて、上位層処理部１１１から指定されたＧＤの値をＧＤとして設定する。さらに、データフレーム処理部１１０は、隣接ノード管理テーブル１０３と同数の新規エントリを新規重み付けテーブル内に作成する。そして、データフレーム処理部１１０は、作成した各エントリに、それぞれ、隣接ノード管理テーブル１０３の各エントリのノードＩＤと初期重み付け値と現在時刻を設定する。
【０４５６】
なお、以下では説明の便宜上、ステップＳ１１０１で指定されたＧＤの値に対応する重み付けテーブルを、「１０４−ｉ」という参照符号で参照する。すなわち、重み付けテーブル１０４−ｉは、ステップＳ１１０７の検索でヒットしたテーブルまたはステップＳ１１０９で追加されたテーブルである。
【０４５７】
以上のようにして、重み付けテーブル１０４−ｉがヒットしたとステップＳ１１０８で判断された後、またはステップＳ１１０９で重み付けテーブル１０４−ｉが作成された後、処理はステップＳ１１１０に移行する。
【０４５８】
そして、ステップＳ１１１０でデータフレーム処理部１１０は、上位層処理部１１１から指定されたＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、最小の重みと対応付けられているＬＤの値を取得する。なお、図１１に例示するように、重み付けテーブル１０４−ｉにおいて複数のエントリが同じ最小の重みを有する場合もありうる。その場合、データフレーム処理部１１０は、最小の重みと対応付けられている複数のＬＤの値のうち任意の１つをステップＳ１１１０で選択して取得する。なお、上位層処理部１１１によりＯＬＳのノードＩＤが指定されている場合には、このＯＬＳのノードＩＤを除くＬＤの値を取得する。データフレーム処理部１１０は、取得したＬＤの値および対応する重みの値を、例えば図４のＤＲＡＭ２０４などの記憶領域に記憶する。
【０４５９】
続いて、処理は図２８のステップＳ１１１１に移行し、ステップＳ１１１１でデータフレーム処理部１１０は、下記の２つの条件（Ｌ１）から（Ｌ３）のいずれかが成立するか否かを判断する。
【０４６０】
（Ｌ１）ステップＳ１１１０で取得したＬＤの値に対応する重みが、重みの最大値（この実施形態では、具体的には１．０）である。
（Ｌ２）重み付けテーブル１０４−ｉに登録されているすべてのＬＤへの送信が、いずれも失敗した。
（Ｌ３）上層処理部１１１により指定されたＯＬＳがある場合であって、重み付けテーブル１０４−ｉに登録されている、この指定されたＯＬＳを除くすべてのＬＤへの送信が、いずれも失敗した。
【０４６１】
条件（Ｌ１）から（Ｌ３）のいずれかが成立する場合、もはやＬＤとして選択可能な隣接ノード装置は残っていないので、処理はステップＳ１１１２に移行する。
他方、条件（Ｌ１）から（Ｌ３）のいずれも成立しない場合、まだＬＤとして選択可能な隣接ノード装置が残っている。換言すれば、データフレーム受信処理のステップＳ８１８に関して説明した（Ｇ１）〜（Ｇ３）のいずれにも該当しない隣接ノード装置が、少なくとも１つは存在する。そして、ＬＤとして選択可能な隣接ノード装置のノードＩＤが、ステップＳ１１１０（または後述のステップＳ１１２５）で取得されている。そこで、ステップＳ１１１１で条件（Ｌ１）と（Ｌ２）のいずれも成立しないと判断されると、処理は  ステップＳ１１１４に移行する。
【０４６２】
条件（Ｌ１）または（Ｌ２）が成立する場合、ステップＳ１１１２でデータフレーム処理部１１０は、データフレームを破棄する。つまり、データフレーム処理部１１０は、ステップＳ１１０６で新たに作成してデータフレームを格納したエントリを、バッファ部１０９から削除する。
【０４６３】
そして、続くステップＳ１１１３でデータフレーム処理部１１０は、上位層処理部１１１に「送信失敗」を通知する。つまり、データフレーム処理部１１０は、どの隣接ノード装置にもデータフレームを成功裡に送信することはできなかったことを、上位層処理部１１１に通知する。そして図２７〜図２８の処理が終了する。
【０４６４】
他方、ステップＳ１１１１において、条件（Ｌ１）と（Ｌ２）のいずれも成立しないと判断されると、取得済みのＬＤの値で識別される隣接ノード装置へのデータフレームの転送を試みる処理が、ステップＳ１１１４〜Ｓ１１２５で行われる。
【０４６５】
ステップＳ１１１４では、データフレーム処理部１１０が、ステップＳ１１０６でバッファ部１０９に格納したデータフレームのＬＤに、ステップＳ１１１０または後述のステップＳ１１２５で取得したＬＤの値を設定する。そして、データフレーム処理部１１０は、ＬＤの値を設定したデータフレームの送信を、送信部１０２に依頼する。すると、送信部１０２がデータフレームを送信する。
【０４６６】
続いてステップＳ１１１５でデータフレーム処理部１１０は、ステップＳ１１０６でデータフレームを格納したバッファ部１０９内のエントリのタイムアウト時刻に、式（５）の時刻Ｔｔｉｍｅｏｕｔを設定する。
【０４６７】
そして、ステップＳ１１１６でデータフレーム処理部１１０は、自ノードＩＤと、ステップＳ１１０４でＦＩＤ生成部１１３が生成したＦＩＤを使ってＦＩＤ管理テーブル１０５を検索する。
【０４６８】
次にステップＳ１１１７でデータフレーム処理部１１０は、ステップＳ１１１６のＦＩＤ管理テーブル１０５の検索においてエントリがヒットしたか否かを判断する。なお、ステップＳ１１１７が１回目に実行される場合には「エントリがヒットしなかった」と判断され、ステップＳ１１１７が２回目以降に実行されるときは「エントリがヒットした」と判断される。
【０４６９】
ステップＳ１１１６の検索でエントリがヒットしていれば、処理はステップＳ１１１８に移行する。他方、ステップＳ１１１６の検索でエントリがヒットしていなければ、処理はステップＳ１１１９に移行する。
【０４７０】
ステップＳ１１１８でデータフレーム処理部１１０は、ステップＳ１１１６の検索でヒットしたエントリを更新する。具体的には、データフレーム処理部１１０は、ステップＳ１１１６の検索でヒットしたエントリにおいて、ＬＤフィールドには、ステップＳ１１１４で送信したデータフレームのＬＤの値を設定し、最終更新時刻フィールドには、現在時刻を設定する。そして、処理はステップＳ１１２１に移行する。
【０４７１】
また、ステップＳ１１１９でデータフレーム処理部１１０は、ＦＩＤ管理テーブル１０５に新規エントリを追加する。
そして、次のステップＳ１１２０でデータフレーム処理部１１０は、新規エントリに値を設定する。具体的には、データフレーム処理部１１０は、新規エントリにおいて、ＦＩＤとＧＳとＬＤの各フィールドには、それぞれステップＳ１１１４で送信したデータフレームの値をコピーする。また、データフレーム処理部１１０は、新規エントリにおいて、最終更新時刻フィールドには現在時刻を設定し、ＯＬＳフィールドには、上位層処理部１１１により、ＯＬＳのノードＩＤが指定されている場合には、指定されたノードＩＤを設定し、上位層処理部１１１によりＯＬＳのノードＩＤが指定されていない場合には自ノードＩＤをコピーする。
【０４７２】
例えば、図１２に示した、ノード装置Ｎ１のＦＩＤ管理テーブル１０５−Ｎ１のエントリＥ１は、ノード装置Ｎ１のデータフレーム処理部１１０−Ｎ１が以上の処理により作成したものである。
【０４７３】
ステップＳ１１２１でデータフレーム処理部１１０は、ステップＳ１１１４における送信の成否の通知を待つ。ステップＳ１１２１の詳細は、図２２のステップＳ８２５と同様である。データフレーム処理部１１０が、ステップＳ１１２１での待機の後、ＡＣＫ処理部１０７から「送信成功」または「送信失敗」の通知を受けると、処理はステップＳ１１２２に移行する。
【０４７４】
ステップＳ１１２２でデータフレーム処理部１１０は、ＡＣＫ処理部１０７から受けた通知に基づいて、ステップＳ１１１４の送信が成功したか否かを判断する。送信が成功した場合、処理はステップＳ１１２３に移行し、送信が失敗した場合、処理はステップＳ１１２４に移行する。
【０４７５】
送信が成功した場合、ステップＳ１１２３でデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ１１１４で送信したデータフレームのＧＤとＬＤの組に対応する重みを小さくする。
【０４７６】
つまり、データフレーム処理部１１０は、上位層処理部１１１から指定されたＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、送信したデータフレームのＬＤに対応する重みを、例えば式（６）を使って更新する。データフレーム処理部１１０はさらに、重み付けテーブル１０４−ｉの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、図２７〜図２８の処理は終了する。
【０４７７】
逆に、送信が失敗した場合、ステップＳ１１２４でデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ１１１４で送信したデータフレームのＧＤとＬＤの組に対応する重みを大きくする。
【０４７８】
つまり、データフレーム処理部１１０は、上位層処理部１１１から指定されたＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、送信したデータフレームのＬＤに対応する重みを、例えば式（７）を使って更新する。
【０４７９】
なお、データフレーム処理部１１０はステップＳ１１２４でさらに、送信したデータフレームのＬＤの値を、例えば図４のＤＲＡＭ２０４などのワークエリアに「送信に失敗したＬＤ」として記憶する。図２２のステップＳ８２８と同様に、「送信に失敗したＬＤ」の記憶のためには、線形リストや配列などのデータ構造が利用されてもよい。
【０４８０】
また、データフレーム処理部１１０はステップＳ１１２４でさらに、重み付けテーブル１０４−ｉの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、処理はステップＳ１１２５に移行する。
【０４８１】
ステップＳ１１２５でデータフレーム処理部１１０は、今までにＬＤとして試していない他の選択可能な隣接ノード装置を探す。具体的には、データフレーム処理部１１０は、上位層処理部１１１から指定されたＧＤの値に対応する重み付けテーブル１０４−ｉにおいて、送信に失敗したＬＤ以外のＬＤのうちで、最小の重みと対応付けられているＬＤの値を取得する。ここで、送信に失敗したＬＤは、ステップＳ１１２４において例えば図４のＤＲＡＭ２０４などのワークエリアに、例えば線形リストや配列の形で記憶されている。
【０４８２】
つまり、データフレーム処理部１１０は、重み付けテーブル１０４−ｉにおいて、過去にステップＳ１１１０またはＳ１１２５で取得されていないＬＤの値のうちで、最小の重みと対応付けられているものを取得する。データフレーム処理部１１０は、取得したＬＤの値および対応する重みの値を、例えば図４のＤＲＡＭ２０４などの記憶領域に記憶する。そして、処理はステップＳ１１１１に戻る。
【０４８３】
図２９は、ＧＳにもなりうるノード装置１００が、データフレーム受信処理の一部として図２３の処理の代わりに行う処理のフローチャートである。
ノード装置１００がＧＳにもなりうるタイプの装置である場合、データフレーム受信処理におけるステップＳ８０１〜Ｓ８２９は、ノード装置１００が中継ノード装置である場合と同様であり、図２０〜図２２に示したとおりである。しかし、ノード装置１００がＧＳにもなりうるタイプの装置の場合は、図２２のステップＳ８１８においてデータフレーム処理部１１０が「条件（Ｆ１）と（Ｆ２）のいずれかが成立する」と判断すると、処理は図２９のステップＳ８３０ａに移行する。
【０４８４】
ステップＳ８３０ａでデータフレーム処理部１１０は、受信したデータフレームのＧＳの値が自ノードＩＤであるか否かを判断する。受信したデータフレームのＧＳの値が自ノードＩＤと異なれば、処理はステップＳ８３０ｂに移行し、受信したデータフレームのＧＳの値が自ノードＩＤであれば、処理はステップＳ８３０ｃに移行する。
【０４８５】
ステップＳ８３０ｂでデータフレーム処理部１１０は、以下のようにして新たなデータフレームを作成して送信部１０２に出力し、作成されたデータフレームを送信部１０２が送信する。
【０４８６】
具体的には、データフレーム処理部１１０は、ステップＳ８０８またはＳ８１０で記憶したＯＬＳの値を新たなデータフレームのＬＤに指定し、自ノードＩＤを新たなデータフレームのＬＳに指定する。また、データフレーム処理部１１０は、受信したデータフレームからＧＤ、ＧＳ、ＦＩＤ、タイプ、長さの各フィールドの値と、ペイロードを、新たなデータフレームにコピーする。データフレームの送信後、処理はステップＳ８３１ａに移行する。
【０４８７】
また、ステップＳ８３０ｃでは、データフレーム処理部１１０は、上位層処理部１１１に「送信失敗」を通知する。通知にあたって、データフレーム処理部１１０は、例えば受信したデータフレームから上層処理部１１１の処理において必要な、ペイロードまたはペイロードの一部を含む部分データを取り出し、上位層処理部１１１に出力してもよい。すると、上位層処理部１１１はどのデータの送信に失敗したのかを、データフレーム処理部１１０から受け取ったデータの内容に基づいて認識することができる。送信失敗の通知の後、処理はステップＳ８３８ａに移行する。
【０４８８】
さて、ステップＳ８３１ａでは、データフレーム処理部１１０が、受信したデータフレームのＦＩＤとＧＳの値を検索キーとして用いてＦＩＤ管理テーブル１０５を検索する。なお、以下のステップＳ８３１ａ〜Ｓ８３９ａは、それぞれ図２３のステップＳ８３１〜Ｓ８３９と類似のステップである。
【０４８９】
次のステップＳ８３２ａでデータフレーム処理部１１０は、ステップＳ８３１ａの検索の結果、エントリがヒットしたか否かを判断する。エントリがヒットしていれば処理はステップＳ８３３ａに移行し、エントリがヒットしていなければ処理はステップＳ８３４ａに移行する。
【０４９０】
なお、ステップＳ８０７で「エントリがヒットした」と判断されている場合に、ステップＳ８３１ａの検索の結果見つかるエントリは、ステップＳ８０６の検索の結果見つかったエントリである。また、ステップＳ８０７で「エントリがヒットしなかった」と判定され、かつステップＳ８２３において新規エントリが作成された場合は、ステップＳ８３１ａの検索の結果、ステップＳ８２３で作成された新規エントリが見つかる。
【０４９１】
ステップＳ８３２ａで「エントリがヒットしなかった」と判断されるのは、（Ｍ１）かつ（Ｍ２）の場合である。
（Ｍ１）ステップＳ８０７で「エントリがヒットしなかった」と判断された。
（Ｍ２）１回目にステップＳ８１８が実行された直後に、ステップＳ８３０ａに処理が移行した。
【０４９２】
ステップＳ８３３ａでデータフレーム処理部１１０は、ステップＳ８３１ａの検索の結果ヒットしたエントリを更新する。具体的には、データフレーム処理部１１０は、ヒットしたエントリにおいて、ＬＤには、ヒットしたエントリ自身のＯＬＳの値をコピーし、最終更新時刻には、現在時刻を設定する。そして処理はステップＳ８３６ａに移行する。
【０４９３】
他方、ステップＳ８３４ａでは、データフレーム処理部１１０はＦＩＤ管理テーブル１０５に新規エントリを追加する。
そして、次のステップＳ８３５ａでデータフレーム処理部１１０は、ステップＳ８３４ａで追加した新規エントリに値を設定する。具体的には、データフレーム処理部１１０は、新規エントリにおいて、ＦＩＤとＧＳには、受信したデータフレームの値をそれぞれコピーし、最終更新時刻には、現在時刻を設定し、ＯＬＳとＬＤには、受信したデータフレームのＬＳの値をコピーする。そして処理はステップＳ８３６ａに移行する。
【０４９４】
ステップＳ８３６ａでデータフレーム処理部１１０は、ステップＳ８３０ｂで送信したデータフレームに関する送信成否の通知を待つ。そして、「送信成功」または「送信失敗」の通知をデータフレーム処理部１１０がＡＣＫ処理部１０７から受けると、処理はステップＳ８３７ａに移行する。
【０４９５】
ステップＳ８３７ａでデータフレーム処理部１１０は、ステップＳ８３０ｂにおけるデータフレームの送信が成功したか否かを判断する。送信が失敗した場合、処理はステップＳ８３８ａに移行し、送信が成功した場合、処理はステップＳ８３９ａに移行する。
【０４９６】
ステップＳ８３８ａが実行されるのは、（Ｎ１）または（Ｎ２）の場合である。
（Ｎ１）ノード装置１００自身がＧＳとなって送信したデータフレームがバックトラックによりノード装置１００に戻ってきて受信されたのであり、かつ、ノード装置１００の隣接ノード装置はすべて（Ｎ１−１）または（Ｎ１−２）である。
（Ｎ１−１）最大値の重みと対応付けられている。
（Ｎ１−２）ＬＤとして指定してデータフレームを送信すると、送信に失敗する。
【０４９７】
（Ｎ２）受信したデータフレームのＧＳは、ノード装置１００以外の他のノード装置であり、かつ、ＯＬＳ以外のすべての隣接ノード装置が（Ｎ２−１）または（Ｎ２−２）であり、かつ、ＯＬＳへのデータフレームの送信は失敗した。
（Ｎ２−１）最大値の重みと対応付けられている。
（Ｎ２−２）ＬＤとして指定してデータフレームを送信すると、送信に失敗する。
【０４９８】
この場合、データフレーム処理部１１０はステップＳ８３８ａで、受信したデータフレームを破棄する。すなわち、データフレーム処理部１１０は、ステップＳ８０１で見つけたエントリをバッファ部１０９から削除する。そして、データフレーム受信処理は終了する。
【０４９９】
他方、ステップＳ８３９ａは、ノード装置１００ではない別のノード装置がＧＳであるデータフレームに関して、ノード装置１００からノード装置１００のＯＬＳへの送信が成功した場合に実行される。ステップＳ８３９ａでデータフレーム処理部１１０は、重み付けテーブル１０４において、ステップＳ８３０ｂで送信したデータフレームのＧＤとＬＤの組に対応する重みを小さくする。換言すれば、データフレーム処理部１１０は、受信したデータフレームのＧＤに対応する重み付けテーブル１０４−ｉにおいて、送信したデータフレームのＬＤ（つまりステップＳ８０８またはＳ８１０で記憶したＯＬＳ）に対応する重みを更新する。
【０５００】
例えば、ステップＳ８２９やＳ８３９と同様に、データフレーム処理部１１０は、式（６）を使って重みを更新してもよい。データフレーム処理部１１０はさらに、重み付けテーブル１０４−ｉの、重みを更新したエントリにおいて、最終更新時刻に現在時刻を設定する。そして、データフレーム受信処理は終了する。
【０５０１】
図３０は、ハローフレームの送受信による隣接ノードの認識と図６の経路選択とを示すタイミングチャートである。
図１のネットワーク１において、各ノード装置Ｎ１〜Ｎ７は、独立してそれぞれ図１６のハローフレーム送信処理を行う。どのノード装置が先にハローフレームを送信するかは任意であるが、図３０の例では、まずステップＳ１２０１でノード装置Ｎ２が図１６のステップＳ４０３を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Ｎ２に隣接するノード装置Ｎ１、Ｎ３、およびＮ６でそれぞれ受信される。そして、ノード装置Ｎ１、Ｎ３、およびＮ６は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ２を隣接ノード装置として認識する。
【０５０２】
また、図３０の例では、続いてステップＳ１２０２で、ノード装置Ｎ４が図１６のステップＳ４０３を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Ｎ４に隣接するノード装置Ｎ３、Ｎ５、およびＮ７でそれぞれ受信される。そして、ノード装置Ｎ３、Ｎ５、およびＮ７は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ４を隣接ノード装置として認識する。
【０５０３】
さらに、ステップＳ１２０３では、ノード装置Ｎ３が図１６のステップＳ４０３を実行し、図７のハローフレーム３１２を送信する。すると、ハローフレーム３１２はノード装置Ｎ３に隣接するノード装置Ｎ２、Ｎ４、およびＮ５でそれぞれ受信される。そして、ノード装置Ｎ２、Ｎ４、およびＮ５は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ３を隣接ノード装置として認識する。
【０５０４】
また、ステップＳ１２０４では、ノード装置Ｎ７が図１６のステップＳ４０３を実行し、ハローフレームを送信する。なお、ステップＳ１２０４の時点では、ノード装置Ｎ４とＮ７の間のリンクには障害がまだ生じていないものとする。よって、ハローフレームはノード装置Ｎ７に隣接するノード装置Ｎ４とＮ６でそれぞれ受信される。そして、ノード装置Ｎ４とＮ６は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ７を隣接ノード装置として認識する。
【０５０５】
また、ステップＳ１２０５では、ノード装置Ｎ１が図１６のステップＳ４０３を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Ｎ１に隣接するノード装置Ｎ２で受信される。そして、ノード装置Ｎ２は、図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ１を隣接ノード装置として認識する。
【０５０６】
さらに、ステップＳ１２０６では、ノード装置Ｎ６が図１６のステップＳ４０３を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Ｎ６に隣接するノード装置Ｎ２とＮ７でそれぞれ受信される。そして、ノード装置Ｎ２とＮ７は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ６を隣接ノード装置として認識する。
【０５０７】
そして、ステップＳ１２０７では、ノード装置Ｎ５が図１６のステップＳ４０３を実行し、ハローフレームを送信する。すると、ハローフレームはノード装置Ｎ５に隣接するノード装置Ｎ３とＮ４でそれぞれ受信される。そして、ノード装置Ｎ３とＮ４は、それぞれ図１４のステップＳ２０３で図１５のハローフレーム受信処理を呼び出して実行し、ノード装置Ｎ５を隣接ノード装置として認識する。
【０５０８】
以上のステップＳ１２０１〜Ｓ１２０７により、図１および図６に示すネットワーク１内のノード装置Ｎ１〜Ｎ７は、それぞれ隣接ノード装置を認識し、隣接ノード管理テーブル１０３−Ｎ１〜１０３−Ｎ７を更新する。また、図１５に示すように、ノード装置Ｎ１〜Ｎ７は、ハローフレームの受信を契機として、場合によっては重み付けテーブル１０４−Ｎ１〜１０４−Ｎ７）を更新することもある。
【０５０９】
その後、ステップＳ１２０８でノード装置Ｎ４とＮ７の間のリンクに障害が発生する。
また、障害の発生とは関係なく、ステップＳ１０１でノード装置Ｎ１が、ノード装置Ｎ７をＧＤとして指定するデータフレームを、ノード装置Ｎ２をＬＤとして指定して送信する。つまり、ステップＳ１０１でノード装置Ｎ１は、図２７〜２８の処理を行う。
【０５１０】
すると、データフレームを受信したノード装置Ｎ２は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ２がＡＣＫフレームを送信することが、図３０ではステップＳ１０１ａとして表現されている。
【０５１１】
他方、ノード装置Ｎ１は、図２８のステップＳ１１２１でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ１は、ステップＳ１０１ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ１１２１の待機を終え、ステップＳ１１２２とＳ１１２３を実行し、図２８の処理を終える。
【０５１２】
また、ステップＳ１０１ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ２は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ３を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０２に相当する。なお、図７には、ステップＳ１０２で送信されるデータフレーム３０３が例示されている。
【０５１３】
すると、データフレームを受信したノード装置Ｎ３は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ３がＡＣＫフレームを送信することが、図３０ではステップＳ１０２ａとして表現されている。なお、図７には、ステップＳ１０２ａで送信されるＡＣＫフレーム３２２が例示されている。
【０５１４】
他方、ノード装置Ｎ２は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ２は、ステップＳ１０２ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５１５】
また、ステップＳ１０２ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ３は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ４を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０３に相当する。なお、図７には、ステップＳ１０３で送信されるデータフレーム３０４が例示されている。
【０５１６】
すると、データフレームを受信したノード装置Ｎ４は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ４がＡＣＫフレームを送信することが、図３０ではステップＳ１０３ａとして表現されている。
【０５１７】
他方、ノード装置Ｎ３は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ３は、ステップＳ１０３ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５１８】
また、ステップＳ１０３ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ４は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ７を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０４に相当する。
【０５１９】
しかし、ステップＳ１２０８でノード装置Ｎ４とＮ７の間のリンクには障害が発生しており、データフレームはノード装置Ｎ７に到達しない。そのため、図３０ではステップＳ１０４の矢印は、途中から破線になっている。
【０５２０】
ノード装置Ｎ４は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。しかし、ノード装置Ｎ７からＡＣＫフレームが受信されないため、ノード装置Ｎ４は、定期的に実行している図２６の処理のステップＳ１００３において、ノード装置Ｎ７へのデータフレームの送信が失敗したと認識する。
【０５２１】
その結果、ノード装置Ｎ４は、ステップＳ８２５の待機を終え、ステップＳ８２６、Ｓ８２８、Ｓ８２９、Ｓ８１８の処理を順に実行する。そして、ノード装置Ｎ４は、続くステップＳ８１９において、ＬＤとしてノード装置Ｎ５を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０５に相当する。
【０５２２】
すると、データフレームを受信したノード装置Ｎ５は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ５がＡＣＫフレームを送信することが、図３０ではステップＳ１０５ａとして表現されている。
【０５２３】
他方、ノード装置Ｎ４は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ４は、ステップＳ１０５ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５２４】
また、ステップＳ１０５ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ５は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ３を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０６に相当する。
【０５２５】
すると、データフレームを受信したノード装置Ｎ３は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ３がＡＣＫフレームを送信することが、図３０ではステップＳ１０６ａとして表現されている。
【０５２６】
他方、ノード装置Ｎ５は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ５は、ステップＳ１０６ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５２７】
また、ステップＳ１０６ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ３は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ５を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１０７に相当する。
【０５２８】
すると、データフレームを受信したノード装置Ｎ５は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ５がＡＣＫフレームを送信することが、図３０ではステップＳ１０７ａとして表現されている。
【０５２９】
他方、ノード装置Ｎ３は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ３は、ステップＳ１０７ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５３０】
また、ステップＳ１０７ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ５は、ステップＳ８０４以降の処理を続行する。具体的には、処理が図２２のステップＳ８１８から図２３のステップＳ８３０へと進み、ノード装置Ｎ５はステップＳ８３０で、ＯＬＳであるノード装置Ｎ４をＬＤとして指定してデータフレームを送信する。ステップＳ８３０での送信が、図３０のステップＳ１０８に相当する。
【０５３１】
すると、データフレームを受信したノード装置Ｎ４は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ４がＡＣＫフレームを送信することが、図３０ではステップＳ１０８ａとして表現されている。
【０５３２】
他方、ノード装置Ｎ５は、図２３のステップＳ８３６でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ５は、ステップＳ１０８ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８３６の待機を終え、ステップＳ８３７とＳ８３９を実行し、図２３の処理を終える。
【０５３３】
また、ステップＳ１０８ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ４は、ステップＳ８０４以降の処理を続行する。具体的には、処理が図２２のステップＳ８１８から図２３のステップＳ８３０へと進み、ノード装置Ｎ４はステップＳ８３０で、ＯＬＳであるノード装置Ｎ３をＬＤとして指定してデータフレームを送信する。ステップＳ８３０での送信が、図３０のステップＳ１０９に相当する。
【０５３４】
すると、データフレームを受信したノード装置Ｎ３は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ３がＡＣＫフレームを送信することが、図３０ではステップＳ１０９ａとして表現されている。
【０５３５】
他方、ノード装置Ｎ４は、図２３のステップＳ８３６でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ４は、ステップＳ１０９ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８３６の待機を終え、ステップＳ８３７とＳ８３９を実行し、図２３の処理を終える。
【０５３６】
また、ステップＳ１０９ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ３は、ステップＳ８０４以降の処理を続行する。具体的には、処理が図２２のステップＳ８１８から図２３のステップＳ８３０へと進み、ノード装置Ｎ３はステップＳ８３０で、ＯＬＳであるノード装置Ｎ２をＬＤとして指定してデータフレームを送信する。ステップＳ８３０での送信が、図３０のステップＳ１１０に相当する。
【０５３７】
すると、データフレームを受信したノード装置Ｎ２は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ２がＡＣＫフレームを送信することが、図３０ではステップＳ１１０ａとして表現されている。
【０５３８】
他方、ノード装置Ｎ３は、図２３のステップＳ８３６でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ３は、ステップＳ１１０ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８３６の待機を終え、ステップＳ８３７とＳ８３９を実行し、図２３の処理を終える。
【０５３９】
また、ステップＳ１１０ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ２は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ６を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１１１に相当する。
【０５４０】
すると、データフレームを受信したノード装置Ｎ６は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ６がＡＣＫフレームを送信することが、図３０ではステップＳ１１１ａとして表現されている。
【０５４１】
他方、ノード装置Ｎ２は、図２２のステップＳ８２５でＡＣＫフレームの受信を待っている。そして、ノード装置Ｎ２は、ステップＳ１１１ａで送信されるＡＣＫフレームを受信すると、図１４のステップＳ２０６から図２５の処理を呼び出して実行し、その結果、ステップＳ８２５の待機を終え、ステップＳ８２６とＳ８２７を実行し、図２２の処理を終える。
【０５４２】
また、ステップＳ１１１ａに示すように図２０のステップＳ８０３でＡＣＫフレームを送信したノード装置Ｎ６は、ステップＳ８０４以降の処理を続行し、図２２のステップＳ８１９で、ＬＤとしてノード装置Ｎ７を指定してデータフレームを送信する。ステップＳ８１９での送信が、図３０のステップＳ１１２に相当する。
【０５４３】
すると、データフレームを受信したノード装置Ｎ７は、図１４のステップＳ２０５から図２０〜２３の処理を呼び出して実行する。図２０のステップＳ８０３でノード装置Ｎ７がＡＣＫフレームを送信することが、図３０ではステップＳ１１２ａとして表現されている。
【０５４４】
以上説明した一連の処理により、ネットワーク１全体では、たとえステップＳ１２０８で障害が発生しようとも、ノード装置Ｎ１〜Ｎ７の自律分散協調の結果として、動的に経路〈Ｎ１，Ｎ２，Ｎ６，Ｎ７〉が選択され、学習される。すなわち、以上の一連の処理によりノード装置Ｎ１〜Ｎ６では重み付けテーブル１０４−Ｎ１〜１０４−Ｎ６が更新されている。
【０５４５】
したがって、ステップＳ１１２ａの後には、学習の結果として、ノード装置Ｎ７をＧＤとして指定するデータフレームは、図６のようにネットワーク１内で試行錯誤的にバックトラックしながら転送される代わりに、初めから効率よく転送される。具体例をいくつか挙げれば、下記のとおりである。
【０５４６】
（Ｐ１）ノード装置Ｎ１がＧＳとなって、ノード装置Ｎ７をＧＤとして指定するデータフレームを隣接するノード装置Ｎ２に送信すると、ノード装置Ｎ２は、学習された重み付けテーブル１０４−Ｎ２に基づき、最初からＬＤとしてノード装置Ｎ６を選択する。そして、データフレームはノード装置Ｎ６からＧＤであるノード装置Ｎ７へと送信される。
【０５４７】
（Ｐ２）同様に、ノード装置Ｎ２がＧＳとなって、ノード装置Ｎ７をＧＤとして指定するデータフレームを送信するときも、ノード装置Ｎ２は、学習された重み付けテーブル１０４−Ｎ２に基づき、最初からＬＤとしてノード装置Ｎ６を選択する。そして、データフレームはノード装置Ｎ６からＧＤであるノード装置Ｎ７へと送信される。
【０５４８】
（Ｐ３）ノード装置Ｎ５がＧＳとなって、ノード装置Ｎ７をＧＤとして指定するデータフレームを送信するとき、ノード装置Ｎ５は、学習された重み付けテーブル１０４−Ｎ５に基づき、バックトラックの生じたノード装置Ｎ３ではなく、ノード装置Ｎ４を最初にＬＤとして選択する。以下同様にして、ノード装置Ｎ４はＬＤとしてノード装置Ｎ３を選択し、ノード装置Ｎ３はＬＤとしてノード装置Ｎ２を選択し、ノード装置Ｎ２はＬＤとしてノード装置Ｎ６を選択し、ノード装置Ｎ６はＬＤとしてノード装置Ｎ７を選択する。
【０５４９】
（Ｐ４）ノード装置Ｎ３がＧＳとなって、ノード装置Ｎ７をＧＤとして指定するデータフレームを送信するとき、ノード装置Ｎ３は、学習された重み付けテーブル１０４−Ｎ３に基づき、ノード装置Ｎ２をＬＤとして選択する。したがって、データフレームは、最初から効率よく経路〈Ｎ３，Ｎ２，Ｎ６，Ｎ７〉に沿って転送される。
【０５５０】
以上のように実施形態によれば、図６のようにバックトラックによってネットワーク１内で試行錯誤的かつ動的に経路が選択されると、バックトラックの過程で経由した各ノード装置において、重み付けテーブル１０４の重みという形で、適切な経路が学習される。よって、ＧＤとして同じくノード装置Ｎ７が指定されたデータフレームが今後送信される場合には、上記（Ｐ１）〜（Ｐ４）の例のように、学習の結果にしたがって、経路選択が効率化される。
【０５５１】
＜迂回経路の調査＞
上記構成のネットワーク（アドホックネットワーク）においては、各ノード装置が自律的に経路を探索する。ここで、実施形態のノード装置は、図１０に示す重み付けテーブル１０４を用いて、ＧＤ（最終宛先）毎に、１または複数の候補経路を管理している。そして、ノード装置は、ＧＤへ転送すべきフレームを受信すると、第１候補の経路を利用してそのフレームを転送する。このとき、第１候補の経路が不通であれば、ノード装置は、第２候補、第３候補、．．．を利用して転送処理を行う。したがって、高いデータ到達率が実現される。
【０５５２】
ところが、無線通信においては、ノイズやフェージング等の影響で一時的に品質が劣化して、リンクが切断されることがある。また、通信経路に新たに建物が建設されるなどすると、恒常的にリンクが遮断されることもある。このため、ネットワーク全体を管理するためには、ネットワーク管理装置は、全ノードから定期的に経路情報を収集し、各ノードの位置および経路情報に基づいてトポロジマップを作成する。そして、ネットワーク管理装置は、トポロジマップを利用してpingコマンドまたはtracerouteコマンド等を実行することにより、所望のノードへの経路を調査する。
【０５５３】
しかし、pingコマンドおよびtracerouteコマンドは、基本的に、各ノード装置がそれぞれ第１候補の経路を選択したときの経路調査を行う。すなわち、これらのコマンドを利用する手順では、迂回経路を考慮した経路調査を行うことは困難である。
【０５５４】
図３１は、ネットワーク構成の第４の例を用いて迂回経路について説明する図である。図１のネットワーク４は、本実施形態を適用することが可能なアドホックネットワークの一例であり、複数のノード装置を含む。なお、以下では、ネットワークトポロジの観点からの説明においては、「ノード装置」を単に「ノード」ということもある。ネットワーク４内の各ノード装置は参照符号で示すノードＩＤが予め割り当てられている。図３１において、ノードＡ〜Ｆ、Ｘ、Ｙ、Ｓは、それぞれ、図１〜図３０を参照しながら説明したノード装置の機能を備えている。ただし、ノードＳは、ネットワークを管理する機能を備えるサーバ装置またはゲートウェイ装置である。
【０５５５】
図３１（ａ）は、各ノードから経路情報を収集することにより作成されたトポロジマップを示す。この例では、ノードＳにノードＦが接続されている。また、ノードＦには、ノードＤ、Ｙ、Ｅが接続されている。ノードＳ、Ｆ間、ノードＦ、Ｄ間、ノードＦ、Ｙ間、ノードＦ、Ｅ間には、１または複数のノードが設けられていてもよい。ノードＹには、さらにノードＤ、Ｅ、Ｘも接続している。ノードＸには、ノードＡ、Ｂが接続されている。そして、ノードＡにはノードＣが接続され、ノードＢにもノードＣが接続されている。
【０５５６】
上記トポロジマップにおいて、例えば、ノードＦ、Ｙ間には、少なくとも３本の経路が存在している。このため、ノードＦ、Ｙ間の３本の経路のうちの１本に障害が発生したとしても、他の経路を利用して通信を継続することができる。これに対して、ノードＹ、Ｘ間には、少なくともトポロジマップ上では、１本の経路しか存在していない。このため、仮に、図３１（ｂ）に示すように、ノードＹ、Ｘ間のリンクが切断されてしまうと、ノードＡ〜Ｃ、Ｘは、他のノードと通信を行うことができず、孤立する可能性がある。
【０５５７】
ただし、上記トポロジマップは、例えば、各ノードの第１候補の経路を表す経路情報を収集することで作成されている。このため、このトポロジマップは、必ずしも全ての経路を表しているわけではない。即ち、トポロジマップ上には存在しないが、図３１（ｃ）に示すように、ノードＤ、Ｘ間に迂回経路が存在している可能性もある。この場合、ノードＡ〜Ｃ、Ｘは、ノードＹ、Ｘ間のリンクが切断されたとしても、他のノードと通信を行うことができる。
【０５５８】
ネットワーク管理者は、一般に、図３１（ｂ）に示すような孤立ノードの発生を事前に回避することが求められる。このため、ネットワーク管理者は、ノードＹ、Ｘ間の経路に対して迂回経路が存在するか否かを調査し、そのような迂回経路が存在しないときは、新たなノードを追加する等の対策を実施することになる。
【０５５９】
そこで、実施形態に係る迂回経路調査では、所望の経路に対して、迂回経路が存在するか否かが調査される。この場合、ネットワーク管理者は、例えば、上述のようなトポロジマップを参照して、ノード孤立を引き起こすおそれのある経路を抽出し、その経路に対して迂回経路の有無を調査する旨の指示を入力する。そうすると、実施形態の迂回経路調査方法により、迂回経路の有無が判定される。
【０５６０】
なお、ノード数が非常に多い大規模なネットワークでは、経路情報の収集およびトポロジマップの作成には長い時間が必要となる。例えば、ノード数が１０００万個であり、１つのノードから経路情報を取得するための時間が０．１秒とする。この場合、全ノードから経路情報を収集してトポロジマップを作成するためには、約１２日を要する。そうすると、トポロジマップにより表わされる経路状態は、現在の経路状態と異なっている可能性がある。特に、無線ネットワークでは、電波環境の変化等に起因して、トポロジマップにより表わされる経路状態は、現在の経路状態と異なっている可能性が高くなる。この意味でも、所望の経路に対して迂回経路が存在するか否かを調査することは重要である。
【０５６１】
図３２は、ネットワーク４において、迂回経路を調査する方法の概要を説明する図である。ここでは、ネットワーク管理者は、迂回経路を調査するための指示を、ノード装置Ｓに入力するものとする。また、ノードＹ、Ｘ間の経路（以下、経路ＹＸ）に対して迂回経路が存在するか否かを調査するものとする。この場合、実施形態の迂回経路調査方法は、例えば、以下の手順で実施される。なお、図３２において、ノード間を接続する実線は、経路情報を収集することにより検出されている経路を表し、ノード間を接続する破線（図３２では、ノードＤ、Ａ間に描かれている）は、経路情報の収集によっては検出されなかった経路を表している。
【０５６２】
（１）ネットワーク管理者は、トポロジマップを参照し、ノードの孤立を引き起こすおそれのある経路を抽出する。以下では、この経路を「調査対象経路」と呼ぶことがある。図３２に示す例では、経路ＹＸが調査対象経路として抽出されるものとする。そして、ネットワーク管理者は、ノード装置Ｓに、調査対象経路の両端のノードの中でノード装置Ｓから遠い方のノードを指定する迂回経路調査指示を入力する。この例では、ノードＸを指定する迂回経路調査指示が入力される。なお、ネットワーク管理者は、迂回経路調査指示においてノードを指定する代わりに、調査対象経路（この例では、経路ＹＸ）を指定してもよい。この場合、ノード装置Ｓは、ノードＹおよびノードＸの位置に基づいて、ノード装置Ｓから遠い方のノードを検出することができる。
【０５６３】
（２）ノード装置Ｓは、迂回経路調査指示が入力されると、調査要求ノード装置として動作する。以下、ノード装置Ｓを「調査要求ノード装置Ｓ」と呼ぶことにする。調査要求ノード装置Ｓは、迂回経路調査指示により指定されたノードに対して迂回経路調査を要求するフレームを送信する。この例では、ノードＸに対して迂回経路調査を要求するフレームが送信される。この迂回経路調査を要求するフレームを以降の説明では「調査要求フレーム」と表現する。なお、調査要求フレームは、例えば、図７を参照しながら説明したデータフレームの１つとして伝送される。
【０５６４】
（３）ノード装置Ｘは、調査要求フレームを受信すると、調査実行ノード装置として動作する。以下、ノード装置Ｘを「調査実行ノード装置Ｘ」と呼ぶことにする。調査実行ノード装置Ｘは、調査要求フレームのＯＬＳ（オリジナル送信元隣接ノード）を検出する。ＯＬＳは、ノード装置があるフレームを最初に受信したときに、そのフレームを送信した隣接ノードを意味する。ここで、実施形態に係るネットワークにおいては、調査要求フレームは、基本的に、各ノード装置が第１候補の経路を選択することにより調査実行ノード装置Ｘへ伝送される。よって、図３２に示す例では、調査要求フレームのＯＬＳは、ノードＹである。そして、調査実行ノード装置Ｘは、調査要求フレームのＯＬＳを記憶する。
【０５６５】
（４）調査実行ノード装置Ｘは、調査要求フレームをネットワーク４内で最初に送信した調査要求ノード装置Ｓを最終宛先として、調査フレームを送信する。このとき、調査実行ノード装置Ｘは、調査実行ノード装置Ｘの隣接ノードの中で、調査要求フレームのＯＬＳ以外の隣接ノードへ調査フレームを送信する。図３２に示す例では、調査実行ノード装置Ｘの隣接ノードは、ノードＹ、Ａ、Ｂである。ここで、ノードＹは、調査要求フレームのＯＬＳである。よって、この場合、調査実行ノード装置Ｘは、調査要求ノード装置Ｓを最終宛先として、ノードＡおよびノードＢへ迂回経路を調査するためのフレームを送信する。この迂回経路を調査するためのフレームを以降の説明では「調査フレーム」と表現する。なお、調査フレームは、例えば、図７を参照しながら説明したデータフレームの１つとして伝送される。
【０５６６】
（５ａ）調査要求ノード装置Ｓは、調査フレームを受信したときは、経路ＹＸに対して迂回経路が存在すると判定する。すなわち、調査フレームは、上述したように、調査実行ノード装置Ｘから調査要求フレームのＯＬＳ以外の隣接ノードへ送信される。図３２に示す例では、調査フレームは、調査実行ノード装置Ｘから、ノードＹへ送信されることなく、ノードＡ、Ｂへ送信される。よって、調査要求ノード装置Ｓにより受信される調査フレームは、調査実行ノード装置Ｘから経路ＹＸ以外の経路を介して伝送されて調査要求ノード装置Ｓへ到達したはずである。したがって、調査要求ノード装置Ｓは、調査フレームを受信したときは、経路ＹＸに対して迂回経路が存在すると判定できる。なお、図３２に示す例では、調査実行ノード装置Ｘから送信された調査フレームは、ノードＡおよびノードＤを介して調査要求ノード装置Ｓへ到達している。この後、調査要求ノード装置Ｓは、調査実行ノード装置Ｘへ、調査フレームに対応する受信応答フレームを送信する。
【０５６７】
（５ｂ）調査要求ノード装置Ｓは、調査要求フレームを送信したときから所定時間内に調査フレームを受信できなかったときは、経路ＹＸに対して迂回経路が存在しないと判定する。なお、迂回経路が存在しないと判定されたときは、ネットワーク管理者は、迂回経路を実現するための中継ノードの設置を検討することができる。
【０５６８】
（６ａ）調査実行ノード装置Ｘは、調査要求ノード装置Ｓから調査フレームに対応する受信応答フレームを受け取ると、調査要求ノード装置Ｓへの調査フレームの送信が成功したと判定する。すなわち、調査実行ノード装置Ｘは、調査要求ノード装置Ｓとの間に迂回経路が存在すると判定する。
【０５６９】
（６ｂ）調査実行ノード装置Ｘは、調査要求ノード装置Ｓから調査フレームに対応する受信応答フレームを受信できなかったときは、調査要求ノード装置Ｓへの調査フレームの送信が失敗したと判定する。この場合、調査実行ノード装置Ｘは、調査要求ノード装置Ｓとの間に迂回経路が存在しないと判定する。
【０５７０】
このように、実施形態の迂回経路調査方法においては、調査要求ノード装置Ｓが調査実行ノード装置Ｘとの間の迂回経路の有無を調査すると共に、調査実行ノード装置Ｘも、調査要求ノード装置Ｓとの間の迂回経路の有無を調査することができる。すなわち、前者の場合は、ノード装置Ｓが、ノード装置Ｘを調査対象ノード装置として、迂回経路調査を行っている。また、後者の場合は、ノード装置Ｘが、ノード装置Ｓを調査対象ノード装置として、迂回経路調査を行っている。ただし、実施形態の説明では、便宜上、調査要求フレームを生成して送信するノード装置を「調査要求ノード装置」と呼び、調査要求フレームに応じて調査フレームを生成して送信するノード装置を「調査実行ノード装置」と呼ぶことにする。
【０５７１】
上述した調査要求ノード装置および調査実行ノード装置の動作は、例えば、図３に示す上位層処理部１１１により実現される。上位層処理部１１１は、上述した迂回経路調査を実行するために、要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃ、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆを備える。要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃ、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆは、例えば、ソフトウェアプログラムを実行することにより実現される。ただし、要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃ、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆの一部または全部が、ハードウェア回路により実現されてもよい。
【０５７２】
ノード装置が調査要求ノード装置（図３２では、ノード装置Ｓ）として動作する場合、上位層処理部１１１は、要求フレーム送信部１１１ａおよび判定部１１１ｂを備える。要求フレーム送信部１１１ａは、ネットワーク管理者からの入力に応じて、調査実行ノード装置（図３２では、ノード装置Ｘ）を最終宛先として、調査実行ノード装置に対して調査フレームの送信を要求する調査要求フレームを送信する。調査要求フレームは、調査実行ノード装置に、調査実行ノード装置の隣接ノードの中で調査要求フレームを中継した送信元隣接ノード以外の隣接ノードへ、調査要求ノード装置を最終宛先とする調査フレームの送信を要求する。したがって、調査実行ノード装置は、調査要求フレームを受信すると、その要求に応じて調査フレームを送信する。そして、判定部１１１ｂは、調査実行ノード装置から送信される調査フレームを受信すると、調査実行ノード装置との間に迂回経路が存在すると判定する。
【０５７３】
また、ノード装置が調査要求ノード装置として動作する場合、上位層処理部１１１は、応答フレーム送信部１１１ｃを備えるようにしてもよい。この場合、応答フレーム送信部１１１ｃは、調査フレームを受信したときに、調査実行ノード装置に対して受信応答フレームを送信する。
【０５７４】
一方、ノード装置が調査実行ノード装置（図３２では、ノード装置Ｘ）として動作する場合、上位層処理部１１１は、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆを備える。検出部１１１ｄは、フレーム送信元ノード装置（図３２では、ノード装置Ｓ）から送信された第１のフレームを受信したときに、その第１のフレームを中継した送信元隣接ノードを検出する。調査フレーム送信部１１１ｅは、フレーム送信元ノード装置を最終宛先とする第２のフレームを、検出部１１１ｄにより検出された送信元隣接ノード以外の隣接ノードへ送信する。そして、判定部１１１ｆは、第２のフレームの送信が失敗したときに、フレーム送信元ノード装置との間に迂回経路が存在しないと判定する。ここで、第１のフレーム、第２のフレームは、それぞれ、調査要求フレーム、調査フレームに相当する。また「第２のフレームの送信が失敗」とは、この例では、第２のフレームがフレーム送信元ノード装置に到着しないことを意味する。この場合、第２のフレームの送信の成功／失敗は、例えば、フレーム送信元ノード装置からの応答の有無に基づいて認識される。なお、上位層処理部１１１は、判定部１１１ｆにより「フレーム送信元ノード装置との間に迂回経路が存在しない」と判定されたときは、その判定結果をフレーム送信元ノード装置に通知するようにしてもよい。
【０５７５】
なお、ノード装置が調査要求ノード装置として動作する場合、上位層処理部１１１は、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆを備えなくてもよい。また、ノード装置が調査実行ノード装置として動作する場合、上位層処理部１１１は、要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃを備えなくてもよい。ただし、各ノード装置は、それぞれ調査実行ノード装置として指定される可能性がある。したがって、各ノード装置の上位層処理部１１１は、特に限定されるものではないが、検出部１１１ｄ、調査フレーム送信部１１１ｅ、判定部１１１ｆを備えていることが好ましい。一方、調査要求ノード装置は、例えば、ネットワーク管理に係わるサーバ装置として動作するノード装置により実現される。よって、要求フレーム送信部１１１ａ、判定部１１１ｂ、応答フレーム送信部１１１ｃは、例えば、サーバ装置にのみ設けるようにしてもよい。
【０５７６】
図３３は、調査要求ノード装置の動作を示すフローチャートである。この処理は、例えば、ネットワーク管理者により迂回経路調査指示が入力されたときに実行される。迂回経路調査指示は、この例では、調査実行ノード装置を指示するものとする。
【０５７７】
ステップＳ１４０１において、上位層処理部１１１は、迂回経路調査に係わる各種変数を初期化する。例えば、調査実行ノード装置からの応答が得られるまで調査要求フレームを所定回数繰り返し送信する場合には、調査要求フレームの送信回数をカウントする変数が初期化される。
【０５７８】
ステップＳ１４０２において、要求フレーム送信部１１１ａは、迂回経路調査要求を表すデータ（inspection request）を調査要求フレームのペイロードとして作成し、調査実行ノード装置をＧＤとして指定してデータフレーム処理部１１０に渡す。
【０５７９】
すると、上述した図２７に示すフローチャートに従って、例えば、図３２に示す例において、ノードＦがノードＳに隣接しているものとし、図２７のフローチャートのステップＳ１１１０でノードＦが取得されたときは、図７に示すフォーマットを有する以下のような調査要求フレームが作成され送信される。
ＬＤ：Ｆ
ＬＳ：Ｓ
ＧＤ：Ｘ
ＧＳ：Ｓ
ＦＩＤ：ノード装置Ｓが管理する一意の値（例えば、シーケンス番号）
タイプ：Ｄ（データ）
長さ：ペイロードの長さ
ペイロード：迂回経路調査要求を表すデータ（inspection request）
なお、本実施形態では、ペイロードに”inspection request”という文字列そのものが入っている場合に調査要求フレームとして認識する例を説明するが、迂回経路調査要求を表す特定の数値や文字を含む識別コードであっても良い。
【０５８０】
そして、要求フレーム送信部１１１ａは、調査要求フレームに対する応答フレームの受信のタイムアウト監視を行なうタイマの計時をスタートさせる。そして、この調査実行ノード装置のノードＩＤとタイムアウト監視開始時刻とを対応付けて調査履歴テーブル１１２に記憶する。
【０５８１】
なお、各ノード装置は、隣接ノードからフレームを受信すると、図１〜図３０を参照しながら説明したように、その受信フレームのヘッダに基づいて自律的に経路を選択して転送処理を行う。これにより、調査要求ノード装置から送信される調査要求フレームは、ＧＤとして指定されている調査実行ノード装置へ転送される。そして、調査実行ノード装置は、調査要求フレームを受信すると、後で図３４を参照しながら説明するが、調査要求ノード装置をＧＤとして調査フレームを送信する。調査フレームは、データフレームの１つであり、図７に示すフォーマットを有するものとする。
【０５８２】
ステップＳ１４０３において、判定部１１１ｂは、上記タイマのタイムアウト、および、調査実行ノード装置からのデータフレームの受信のいずれかの事象の発生を待つ。調査実行ノード装置からのデータフレームとは、この例では、受信フレームのヘッダに設定されている「ＧＳ」が調査実行ノード装置であり、受信フレームのヘッダに設定されている「ＧＤ」が調査要求ノード装置である、調査実行ノード装置から送信される調査フレーム、または、調査応答フレームを表す。受信フレームのタイプが「データ」である場合に、図１４に示すフローチャートにおいてステップＳ２０５のデータフレーム受信処理が実行される。データフレーム受信処理においては、図２０に示すように、受信フレームに設定されているＧＤが自分自身（すなわち、調査要求ノード装置）であれば、ステップＳ８０５の処理により、受信フレームが上位層処理部１１１に渡される。このようにして上位層処理部１１１に渡された受信フレームのヘッダに設定されているＧＳを、調査履歴テーブル１１２に記憶した調査実行ノード装置のノードＩＤと比較することで、判定部１１１ｂは調査実行ノード装置からのデータフレームの受信を検出する。また、タイマのカウント期間は、ネットワークの規模に依存するが、フレームが任意のノードまで伝送されるために要すると見込まれる時間に対して十分に長い期間（例えば、３０秒程度）が設定される。そして、タイマのタイムアウト、または、調査実行ノード装置からのデータフレームの受信を検出すると、処理はステップＳ１４０３に移行する。
【０５８３】
ステップＳ１４０４において、判定部１１１ｂは、ステップＳ１４０３で検出されたのは調査実行ノード装置からのデータフレームの受信であるか否かを判定する。Ｓ１４０３で調査実行ノード装置からのデータフレームの受信が検出されたときは、ステップＳ１４０４において、判定部１１１ｂはステップＳ１４０３で検出されたのは調査実行ノード装置からのデータフレームの受信であると判定し（Ｓ１４０４：Ｙｅｓ）、処理はステップＳ１４０５に移行する。一方、ステップＳ１４０３でタイムアウトが検出されたときは、判定部１１１ｂはステップＳ１４０３で検出されたのは調査実行ノード装置からのデータフレームの受信ではないと判定し（Ｓ１４０４：Ｎｏ）、処理はステップＳ１４０８に移行する。
【０５８４】
ステップＳ１４０５において、上位層処理部１１１の判定部１１１ｂは、受信フレームのペイロードを解読する。
そして、ステップＳ１４０６において、判定部１１１ｂは、ステップＳ１４０５で解読されたペイロードは迂回経路調査を表すデータ（inspection）であるか否かによって、受信フレームが調査フレームか否かを判定する。ステップＳ１４０５において解読されたペイロードが迂回経路調査を表すデータ（inspection）であった場合、判定部１１１ｂは、ステップＳ１４０６において、受信フレームは調査フレームであると判定し（ステップＳ１４０６：Ｙｅｓ）、処理はステップＳ１４０７に移行する。
【０５８５】
ステップＳ１４０７において、判定部１１１ｂは、調査実行ノード装置との間に迂回経路が存在すると判定する。そして、判定部１１１ｂは、迂回経路が存在することを表す情報を出力する。
【０５８６】
一方、ステップＳ１４０５において解読されたペイロードが迂回経路調査を表すデータ（inspection）ではなかった場合、ステップＳ１４０６において、判定部１１１は、受信フレームは調査フレームではないと判定し（Ｓ１４０６：Ｎｏ）、処理はステップＳ１４０９に移行する。
【０５８７】
ステップＳ１４０９において、判定部１１１ｂは、ステップＳ１４０５で解読されたペイロードは迂回経路が存在しないことを表すデータ（dead end）であるか否かにより、受信フレームが調査結果フレームか否かを判定する。
【０５８８】
ステップＳ１４０５において解読されたペイロードは、迂回経路が存在しないことを表すデータ（dead end）である場合には、ステップＳ１４０９において、判定部１１１ｂは、受信フレームは調査結果フレームであると判定し（ステップＳ１４０７：Ｙｅｓ）、処理はステップＳ１４１０に移行する。
【０５８９】
ステップＳ１４０５において解読されたペイロードが、迂回経路が存在しないことを表すデータ（dead end）ではない場合には、ステップＳ１４０９において、判定部１１１ｂは、受信フレームは調査結果フレームではないと判定し（ステップＳ１４０９：Ｎｏ）、処理はステップＳ１４０３に戻る。
【０５９０】
ステップＳ１４１０において、判定部１１１ｂは、調査実行ノード装置との間に迂回経路が存在しないと判定する。そして、判定部１１１ｂは、迂回経路が存在しないことを表す情報を出力し、図３３の処理は終了する。
【０５９１】
判定部１１１ｂの判定結果は、例えば、調査要求ノード装置または調査要求ノードに接続されるサーバコンピュータの表示装置に表示される。或いは、判定部１１１ｂの判定結果は、調査要求ノード装置または調査要求ノードに接続されるサーバコンピュータが備える記憶装置に格納される。また、この判定結果、判定理由及び判定したときの時刻を調査実行ノード装置のノードＩＤと対応付けて調査履歴テーブル１１２に記憶したり、或いは、調査履歴テーブル１１２から、この調査実行ノード装置のノードＩＤおよびこのノードＩＤと対応付けて記憶されたデータを削除したりするよう構成しても良い。このように構成することによって、例えば一度に複数のノード装置について迂回経路の調査を要求する場合に、ステップＳ１４０３での、受信フレームのＧＳと比較すべき調査履歴テーブル１１２に記憶した調査実行ノード装置のノードＩＤの候補を、迂回経路の調査結果が未判定のものに絞り込むことが可能となる。
【０５９２】
ステップＳ１４０８において、応答フレーム送信部１１１ｃは、迂回経路調査終了指示を表すデータ（abort）を受信応答フレームのペイロードとして作成し、調査実行ノード装置をＧＤとして指定して、データフレーム処理部１１０に渡す。
【０５９３】
すると、上述した図２７に示すフローチャートに従って、例えば、図３２に示す例において、ノードＦがノードＳに隣接しているものとし、図２７のフローチャートのステップＳ１１１０でノードＦが取得されたときは、図７に示すフォーマットを有する、下記のような受信応答フレームが作成され送信される。
ＬＤ：Ｆ
ＬＳ：Ｓ
ＧＤ：Ｘ
ＧＳ：Ｓ
ＦＩＤ：ノード装置Ｓが管理する一意の値（例えば、シーケンス番号）
タイプ：Ｄ（データ）
長さ：ペイロードの長さ
ペイロード：迂回経路調査終了指示を表すデータ（abort）
なお、本実施形態では、ペイロードに”abort”という文字列そのものが入っている場合に受信応答フレームとして認識する例を説明するが、迂回経路調査終了指示を表す特定の数値や文字を含む識別コードであっても良い。
【０５９４】
そして図３３の処理は終了する。
このように、調査要求ノード装置は、調査実行ノード装置へ調査要求フレームを送信し、その応答としての調査フレームを受信できるか否かに応じて、調査実行ノード装置との間に迂回経路が存在するか否かを調査する。これにより、ネットワーク管理者は、所望の経路（特に、１つのリンク切断によってノード孤立が発生するおそれのある経路）に対して迂回経路の有無を容易に知ることができる。したがって、ノードの孤立を未然に防ぐことができる。
【０５９５】
図３４は、調査実行ノード装置の動作を示すフローチャートである。この処理は、例えば、隣接ノードからフレームを受信したときに実行される。
ステップＳ１３０１において、上位層処理部１１１は、データフレームを受信すると、受信フレームが調査要求フレームか否かを判定する。調査要求フレームは、この例では、図３３を参照しながら説明したように、データフレームとして伝送される。したがって、受信フレームのタイプが「データ」であれば、図１４に示すフローチャートにおいてステップＳ２０５のデータフレーム受信処理が実行される。データフレーム受信処理においては、図２０に示すように、受信フレームのＧＤが自分自身（すなわち、調査実行ノード装置）であれば、ステップＳ８０５が実行され、受信フレームが上位層処理部１１１に渡される。そして、上位層処理部１１１は、この受信フレームのペイロードを解読し、迂回経路調査要求を表すデータ（inspection request）であるか否かをチェックすることにより、受信フレームが調査要求フレームか否かをチェックする。そして、上位層処理部１１１が受信フレームは調査要求フレームであると判定すると（Ｓ１３０１：Ｙｅｓ）、処理はステップＳ１３０２に移行する。一方、上位層処理部１１１が受信フレームは調査要求フレームであると判定すると（Ｓ１３０１：Ｙｅｓ）、図３４の処理は終了する。
【０５９６】
ステップＳ１３０２において、検出部１１１ｄは、受信した調査要求フレームのＯＬＳ（オリジナル送信元隣接ノード）を検出する。調査要求フレームのＯＬＳは、この調査要求フレームを最初に受信したときに、その調査要求フレームを送信した隣接ノードを表す。また、受信フレームの送信元隣接ノードは、受信フレームのヘッダに設定されている「ＬＳ」により識別される。図３２に示す例では、調査実行ノード装置Ｘの検出部１１１ｄは、調査要求フレームのＯＬＳとして、ノードＹを検出する。そして、検出部１１１ｄは、調査要求フレームのヘッダに設定されているＧＳ（調査要求ノード装置のノードＩＤ）及び検出した調査要求フレームのＯＬＳを調査テーブル１１２に保存する。
【０５９７】
ステップＳ１３０７において、調査フレーム送信部１１１ｅは、迂回経路調査を表すデータ（inspection）を調査フレームのペイロードとして作成し、ＧＤ、ＯＬＳを指定してデータフレーム処理部１１０に渡す。この調査フレームの最終宛先（ＧＤ）は、調査要求フレームに設定されたＧＳである調査要求ノード装置である。また、ＯＬＳはステップＳ１３０２で調査履歴テーブル１１２に保存した、調査要求フレームのＯＬＳである。
【０５９８】
すると、上述した図２７に示すフローチャートに従って、例えば、図３２に示す例において、図２７のフローチャートのステップＳ１１１０でノードＡが取得されたときは、図７に示すフォーマットを有する、下記のような調査フレームが作成され送信される。
ＬＤ：Ａ
ＬＳ：Ｘ
ＧＤ：Ｓ
ＧＳ：Ｘ
ＦＩＤ：ノード装置Ｘが管理する一意の値（例えば、シーケンス番号）
タイプ：Ｄ（データ）
長さ：ペイロードの長さ
ペイロード：迂回経路調査を表すデータ（inspection）
なお、本実施形態では、ペイロードに”inspection”という文字列そのものが入っている場合に調査フレームとして認識する例を説明しているが、迂回経路調査を表す特定の数値や文字を含む識別コードであっても良い。
データフレーム処理部１１０の動作については既に説明したため詳細は割愛するが、調査要求ノード装置と調査実行ノード装置との間に、調査要求フレームを調査実行ノード装置に送信した調査実行ノード装置の隣接ノード装置と、調査実行ノード装置との間の経路（リンク）を迂回する迂回経路が存在する場合は、この調査フレームは、その迂回経路を介して調査要求ノード装置へ伝送される。そして、調査要求ノード装置がこの調査フレームを受信すると、図３３のステップＳ１４０４において「Ｙｅｓ」と判定される。そうすると、調査要求ノード装置により、図３３のステップＳ１４０７以降の処理において、調査要求ノード装置を送信元（ＧＳ）、調査実行ノード装置を最終宛先（ＧＤ）とする受信応答フレームが送信される。受信応答フレームは、上述したように、迂回経路調査終了指示を表すデータを含んでいる。
【０５９９】
ステップＳ１３０８において、調査フレーム送信部１１１ｅは、調査要求ノード装置からのデータフレームの受信、および、調査フレームの送信失敗の通知のいずれかの事象の発生を待つ。調査要求ノード装置からのデータフレームとは、この例では、「ＧＳ」が調査要求ノード装置であり、「ＧＤ」が調査実行ノード装置である、受信応答フレームを表す。受信フレームのタイプが「データ」である場合に、図１４に示すフローチャートにおいてステップＳ２０５のデータフレーム受信処理が実行される。データフレーム受信処理においては、図２０に示すように、受信フレームのＧＤが自分自身（すなわち、調査要求ノード装置）であれば、ステップＳ８０５の処理により、受信フレームが上位層処理部１１１に渡される。このようにして上位層処理部１１１に渡された受信フレームのＧＳを、調査履歴テーブル１１２に記憶した調査要求ノード装置のノードＩＤと比較することで、判定部１１１ｂは調査要求ノード装置からのデータフレームの受信を検出する。
【０６００】
また、調査フレームの送信失敗の通知とは、迂回経路が存在しない場合に、図２８に示すフローチャートのステップＳ１１１３や、図２９に示すフローチャートのステップＳ８３０ｃの処理により通知される調査フレームの送信失敗の通知を表す。そして、調査要求ノード装置からのデータフレームの受信、または、調査フレームの送信失敗の通知を検出すると、処理はステップＳ１３０９に移行する。
【０６０１】
ステップＳ１３０９において、判定部１１１ｆは、ステップＳ１３０８で検出されたのは、調査要求ノード装置からのデータフレームか否かをチェックする。Ｓ１３０８で調査要求ノード装置からのデータフレームの受信が検出されたときは、ステップＳ１３０５において、判定部１１１ｆは、ステップＳ１３０４で検出されたのは調査要求ノード装置からのデータフレームであると判定し（Ｓ１３０５：Ｙｅｓ）、処理はステップＳ１３１１に移行する。
【０６０２】
ステップＳ１３１１において、判定部１１１ｆは、受信フレームのペイロードを解読する。
そして、ステップＳ１３１２において、判定部１１１ｆは、ステップＳ１３１１において解読されたペイロードが迂回経路調査終了指示を表すデータ（abort）であるか否かによって、受信フレームが受信応答フレームか否かをチェックする。
【０６０３】
ステップＳ１３１１において解読されたペイロードが迂回経路調査終了指示を表すデータ（abort）である場合には、判定部１１１ｆは、ステップ１３１２において、受信フレームは受信応答フレームであると判定し（ステップＳ１３１２：Ｙｅｓ）、図３４の処理を終了する。ここで、受信応答フレームは、調査要求ノード装置に調査フレームが到着したときに生成される。すなわち、調査要求ノード装置と調査実行ノード装置との間に、調査要求フレームを調査実行ノード装置に送信した調査実行ノード装置の隣接ノード装置と、調査実行ノード装置との間の経路（リンク）を迂回する迂回経路が存在するときに、受信応答フレームが生成される。したがって、判定部１１１ｆは、受信応答フレームを受信したときは、迂回経路が存在すると判定する。
【０６０４】
一方、Ｓ１３０８で調査フレームの送信失敗の通知が検出されたときは、ステップＳ１３０９において、判定部１１１ｆは、ステップＳ１３０８で検出されたのは調査要求ノード装置からのデータフレームではないと判定し（Ｓ１３０９：Ｎｏ）、処理はステップＳ１３１３に移行する。
【０６０５】
ステップＳ１３１３において、判定部１１１ｆは、調査要求ノード装置との間に迂回経路が存在しないと判定する。そして、判定部１１１ｆは、迂回経路が存在しないことを表す情報を出力する。
【０６０６】
ステップＳ１３１４において、判定部１１１ｆは、迂回経路が存在しないことを表すデータ（dead end）を調査結果フレームのペイロードとして作成し、ＧＤを指定してデータフレーム処理部１１０に渡す。この調査フレームの最終宛先（ＧＤ）は、調査要求ノード装置である。
【０６０７】
すると、上述した図２７に示すフローチャートに従って、調査フレームが作成され送信される。調査結果フレームは、この例では、迂回経路が存在しないと判定されたときに送信される。このため、図２７に示すフローチャートのステップＳ１１１０では、調査要求フレームを受信したときのＯＬＳにより識別されるノードがＬＤとして取得されることになる。そして、例えば、図３２に示す例においては、ステップＳ１１１０でノードＹが取得され、図７に示すフォーマットを有する、下記のような調査フレームが作成され送信される。
ＬＤ：Ｙ
ＬＳ：Ｘ
ＧＤ：Ｓ
ＧＳ：Ｘ
ＦＩＤ：ノード装置Ｘが管理する一意の値（例えば、シーケンス番号）
タイプ：Ｄ（データ）
長さ：ペイロードの長さ
ペイロード：迂回経路が存在しないことを表すデータ（dead end）
なお、本実施形態では、ペイロードに” dead end”という文字列そのものが入っている場合に調査結果フレームとして認識する例を説明するが、迂回経路が存在しないことを表す特定の数値や文字を含む識別コードであっても良い。
【０６０８】
そして図３４の処理は終了する。なお、この終了に際し、判定部１１１ｆは、この判定結果、判定理由及び判定したときの時刻を調査要求ノード装置のノードＩＤと対応付けて調査履歴テーブル１１２に記憶したり、或いは、調査履歴テーブル１１２から、この調査要求ノード装置のノードＩＤおよびこのノードＩＤと対応付けて記憶されたデータを削除したりするよう構成しても良い。このように構成することによって、例えば複数のノード装置から迂回経路の調査要求を受信した場合に、ステップＳ１３０１での、受信フレームのＧＳと比較すべき調査履歴テーブル１１２に記憶した調査要求ノード装置のノードＩＤの候補を、迂回経路の調査結果が未判定のものに絞り込むことが可能となる。
そして、調査要求ノード装置は、調査結果フレームを受信すると、調査要求ノード装置と調査実行ノード装置との間に、調査要求フレームを調査実行ノード装置に送信した調査実行ノード装置の隣接ノード装置と、調査実行ノード装置との間の経路（リンク）を迂回する迂回経路が存在しないことを認識する。
【０６０９】
なお、調査要求ノード装置および調査実行ノード装置以外のノード装置の動作は、図１〜図３０を参照しながら説明した通りである。したがって、ノード装置は、自律的に経路選択を行うことにより、調査要求ノード装置から送信される調査要求フレームおよび受信応答フレームを調査実行ノード装置へ転送することができる。また、ノード装置は、自律的に経路選択を行うことにより、調査実行ノード装置から送信される調査フレームおよび調査結果フレームを調査要求ノード装置へ転送することができる。
【０６１０】
また、図３３〜図３４に示す例では、調査要求ノード装置は、調査フレームを受信すると、調査実行ノードへ受信応答フレームを送信する。そして、調査実行ノード装置は、この受信応答フレームを受信すると、調査フレームを送信する処理を停止する。しかし、実施形態の迂回経路調査方法は、この手順に限定されるものではない。すなわち、調査実行ノード装置は、受信応答フレームに係わらず、すべての隣接ノード（調査要求フレームのＯＬＳを除く）に調査フレームを送信してもよい。この場合、調査実行ノード装置に隣接するすべての隣接ノードについて、迂回経路が存在するか否かを調査することができる。また、調査要求ノード装置は、調査フレームを受信したときに、受信応答フレームを送信しなくてもよい。ただし、この場合、調査実行ノード装置は、調査フレームが調査要求ノード装置に到着したか否かを認識することはできない。
【０６１１】
さらに、上述の例では、調査実行ノード装置は、各隣接ノードに対して１つずつ順番に調査フレームを送信するが、実施形態の迂回経路調査方法は、これに限定されるものではない。すなわち、調査実行ノード装置は、２以上の隣接ノードに同時に調査フレームを送信してもよい。或いは、調査実行ノード装置は、すべての隣接ノード（調査要求フレームのＯＬＳを除く）に同時に調査フレームを送信してもよい。
【０６１２】
さらに、上述の例では、迂回経路調査フレーム（調査要求フレーム、調査フレーム、受信応答フレーム、調査結果フレーム）は、図７に示すデータフレームの一形態として実現されている。しかし、実施形態の迂回経路調査方法は、これに限定されるものではない。すなわち、迂回経路調査フレームは、図７に示すデータフレームとは別の「タイプ」が割り当てられた専用フレームで実現されてもよい。
【０６１３】
図３６は、迂回経路が存在するときの調査手順を示す図である。ここでは、経路ＳＦ、ＦＤ、ＦＹ、ＦＥ、ＤＹ、ＥＹ、ＹＸ、ＸＡ、ＸＢ、ＡＣ、ＢＣが存在しているものとする。また、トポロジマップには表わされていないが、ノードＤ、Ａ間も通信可能であるものとする。そして、ノードＳが調査要求ノード装置であり、ノードＸが調査実行ノード装置であるものとする。
【０６１４】
この場合、まず、調査要求ノード装置Ｓから調査実行ノード装置Ｘへ迂回経路調査要求が送信される。このとき、調査実行ノード装置Ｘは、迂回経路調査要求のＯＬＳとして「ノードＹ」を検出する。
【０６１５】
調査実行ノード装置Ｘは、調査要求ノード装置Ｓを最終宛先として、ノードＹ以外の隣接ノードへ調査フレームを送信する。ここでは、調査実行ノード装置Ｘは、調査ノードをノードＡへ送信している。
【０６１６】
ノード装置Ａは、調査フレームの最終宛先がノードＡではなくノードＳであることを検出すると、フレーム転送処理を行う。この場合、ノード装置Ａの重み付けテーブル１０４の状態によっては、転送先としてノードＣが選択される可能性もあるが、ここでは、説明を簡単にするために、転送先としてノードＤが選択されるものとする。そうすると、ノード装置Ａは、調査実行ノード装置Ｘから送信された調査フレームをノードＤへ転送する。
【０６１７】
ノード装置Ｄおよび他のノード装置の動作は、基本的に、ノード装置Ａと同じである。したがって、調査実行ノード装置Ｘから送信された調査フレームは、調査要求ノード装置Ｓに到着する。
【０６１８】
調査要求ノード装置Ｓは、調査実行ノード装置Ｘから送信された調査フレームを受信すると、調査要求ノード装置Ｓと調査実行ノード装置Ｘとの間に、経路ＹＸを含む経路の他に、経路ＹＸを含まない迂回経路が存在すると判定する。さらに、調査要求ノード装置Ｓは、調査フレームに対応する受信応答フレームを利用して、調査実行ノード装置Ｘへ調査終了通知を送信する。
【０６１９】
調査実行ノード装置Ｘは、調査フレームに対応する調査終了通知を受け取る。これにより、調査実行ノード装置Ｘも、調査要求ノード装置Ｓと調査実行ノード装置Ｘとの間に、経路ＹＸを含まない迂回経路が存在することを認識できる。そして、調査実行ノード装置Ｘは、迂回経路調査を終了する。すなわち、以降、調査フレームは送信されなくなる。
【０６２０】
図３７は、迂回経路が存在しないときの調査手順を示す図である。この実施例でも、経路ＳＦ、ＦＤ、ＦＹ、ＦＥ、ＤＹ、ＥＹ、ＹＸ、ＸＡ、ＸＢ、ＡＣ、ＢＣが存在しているものとする。ただし、この実施例では、他のノード間には通信経路が存在しないものとする。そして、図３６に示す手順と同様に、調査要求ノード装置Ｓから調査実行ノード装置Ｘへ迂回経路調査要求が送信され、調査実行ノード装置Ｘは、ノードＹ以外の隣接ノードへ調査フレームを送信する。
【０６２１】
調査実行ノード装置Ｘは、隣接ノード管理テーブル１０３を参照し、調査フレームの送信先を選択する。この例では、調査実行ノード装置Ｘの隣接ノード管理テーブル１０３には、ノードＡ、Ｂ、Ｙが記録されているものとする。ただし、ノードＹは、迂回経路調査要求のＯＬＳなので、調査フレームの送信先として選択されることはない。すなわち、調査フレームの送信先は、ノードＡ、Ｂである。そして、調査実行ノード装置Ｘの調査フレーム送信部１１１ｄは、まず、ノードＡを選択するものとする。すなわち、調査フレームは、ノードＡへ送信されるものとする。
【０６２２】
ノード装置Ａは、図３６に示す例と同様に、調査フレームの最終宛先がノードＡではなくノードＳであることを検出すると、フレーム転送処理を行う。ここでは、ノード装置Ａは、転送先としてノードＣを選択するものとする。そうすると、ノード装置Ａは、調査実行ノード装置Ｘから送信された調査フレームをノードＣへ転送する。
【０６２３】
ノード装置Ｃおよびノード装置Ｂの動作は、基本的に、ノード装置Ａと同じである。すなわち、ノード装置Ｃは調査フレームをノード装置Ｂへ転送し、ノード装置Ｂは調査フレームを調査実行ノード装置Ｘへ転送する。
【０６２４】
調査実行ノード装置Ｘは、ノード装置Ｂから調査フレームを受信すると、図２０に示すステップＳ８０１から図２１に示すステップＳ８１７の処理を実行することにより、調査フレームの転送先を選択する。なお、この一連の処理の中のステップＳ８０９の処理により、ノードＡの重みが最大値に変更される。ここで、調査実行ノード装置Ｘには、ノードＡ、Ｙ、Ｂが隣接している。そして、調査実行ノード装置Ｘは、以下の理由により、調査フレームの転送先としてノードＢを選択する。
【０６２５】
すなわち、ノードＡは、この調査フレームが調査実行ノード装置Ｘから最初に送信されたときのＬＤであり、調査実行ノード装置ＸのＦＩＤ管理テーブル１０５に記録されている。したがって、調査実行ノード装置Ｘは、この調査フレームをノードＡに転送することはできない。
【０６２６】
また、ノードＹは、調査要求ノード装置Ｓから送信された迂回経路調査要求のＯＬＳであり、調査フレームの送信先から除外されている。なお、迂回経路調査要求のＯＬＳを調査フレームの送信先から除外する手順は、例えば、図３４のステップＳ１３０３において上位層処理部１１１によりＯＬＳを指定し、この指定に基づき図２７のＳ１１１０でこの指定されたＯＬＳとは異なるＬＤが取得されることにより実行される。この実施形態以外にも、上位層処理部１１１は、例えば、迂回経路調査を実施している期間（図３４のフローチャートの処理を実行している期間）、一時的に、重み付け管理テーブル１０４において、迂回経路調査要求のＯＬＳの重みを最大（＝1.0）に設定するようにしてもよい。この場合、図３７に示す例では、調査実行ノード装置Ｘが備える重み付け管理テーブル１０４の「ＧＤ＝ノードＳ」のエントリにおいて、「ＬＤ＝ノードＹ」に対応する重みを最大にすればよい。そうすると、調査実行ノード装置Ｘのデータフレーム処理部１１０は、ノード装置Ｂから調査フレームを受信したときに、転送先としてノードＹを選択することはない。
【０６２７】
このようにして調査フレームは、調査実行ノード装置ＸからノードＢへ送信される。この後、この調査フレームは、ノードＣおよびノードＡを経由し、再び調査実行ノード装置Ｘに戻ってくる。
【０６２８】
調査実行ノード装置Ｘは、ノード装置Ａから調査フレームを受信すると、図２０に示すステップＳ８０１から図２２に示すステップＳ８１７の処理を再び実行することにより、調査フレームの転送先をサーチする。この一連の処理の中のステップＳ８０９の処理により、ノードＢの重みが最大値に変更される。そのため、この時点では、隣接ノード管理テーブル１０３には調査要求フレームのＯＬＳであるＹ以外の調査フレームの転送先は残っていないので、図２２に示すステップＳ８１８で「Ｙｅｓ」と判定される。そうすると、調査実行ノード装置Ｘはこの調査フレームのＧＳなので、図２９に示すフローチャートが実行され、ステップＳ８３０ａで「Ｙｅｓ」と判定される。したがって、ステップＳ８３０ｃにより、データフレーム処理部１１０から上位層処理部１１１に「送信失敗」が通知される。
【０６２９】
調査実行ノード装置Ｘの判定部１１１ｆは、上述のようにしてデータフレーム処理部１１０から「送信失敗」が通知されると、図３４のステップＳ１３０５で「Ｎｏ」と判定される。この結果、判定部１１１ｆは、ステップＳ１３０６で、調査要求ノード装置Ｓとの間に迂回経路が存在しないと判定する。
【０６３０】
この後、調査実行ノード装置Ｘは、上記調査結果を調査要求ノード装置Ｓに通知する。このとき、調査実行ノード装置Ｘは、調査要求ノード装置Ｓを最終宛先として、調査結果フレームをノードＹへ送信する。これにより、調査要求ノード装置Ｓは、迂回経路が存在しないことを認識できる。なお、調査要求ノード装置Ｓは、迂回経路調査要求に対応する調査フレームを所定時間内に受信できないことによっても、迂回経路が存在しないこと認識できる。
【０６３１】
なお、上述の手順では、図３７を参照しながら説明したように、調査実行ノード装置ＸからノードＡへ送信された調査フレームが、ノードＣ、Ｂを順番に経由して調査実行ノード装置Ｘに戻ってきたときに、「ノードＡへの送信は失敗」と判定されている。しかし、調査実行ノード装置Ｘは、ノードＡへ調査フレームを送信すると共に、上記転送手順の中でノードＢにも調査フレームを送信している。そして、調査実行ノード装置ＸからノードＢへ送信された調査フレームは、ノードＣ、Ａを順番に経由して調査実行ノード装置Ｘに戻ってきている。すなわち、ノードＢへの送信も失敗に終わっている。したがって、調査実行ノード装置Ｘは、図３７に示す１つの転送手順が実行されたときに、「ノードＡおよびノードＢへの送信は、いずれも失敗」と判定するようにしてもよい。この場合、調査実行ノード装置Ｘの判定部１１１ｆは、図３７に示す１つの転送手順が実行されたときに、調査要求ノードＳとの間に迂回経路が存在しないと判定するようにしてもよい。
【０６３２】
このように、実施形態の迂回経路調査方法においては、ネットワーク管理者により指定される対象通信ノードが、監視サーバからの要求に応じて、迂回経路調査を実行する。これにより、監視サーバと対象通信ノードとの間に迂回経路が存在するか否かが調査される。したがって、ネットワーク管理者は、所望の通信ノードについて孤立する危険性を即座に判断できる。そして、孤立する可能性が高い通信ノードが検出されたときは、ネットワーク管理者は、通信ノードを追加する等の方策を実施することで、通信障害を未然に防ぐことができる。
【０６３３】
また、本実施例の説明においては、上層処理部１１１により迂回経路調査にかかる処理を実行させることで、データフレーム処理部１１０に迂回経路調査にかかる処理の負荷をかけることなく、データフレームの転送処理に専念させることが出来るが、本実施例の要旨を逸脱しない範囲で各種の変形が可能である。例えば、この迂回経路調査に掛かる処理の一部または全部をデータフレーム処理部１１０に実行させるよう構成してもよい。
【０６３４】
また、迂回経路調査にかかる各種のフレームをデータフレームの１つとして説明してきたが、迂回経路調査を示すデータタイプを付与し、図１４に示すフレーム分岐処理部１０６によるステップＳ２０２のフレームのタイプチェックにおいて、迂回経路調査にかかるフレームもデータフレームとしてデータフレーム処理部１１０に渡すよう構成してもよい。このように構成することで、データフレーム処理部１１０がバッファ部１０９から未処理の受信フレームの選択に際し、フレームタイプを参照し、迂回経路調査にかかるフレームと通常のデータフレームを識別していずれかを優先的に選択・処理することが可能となる。また、上位処理部１１１の判定部１１１ｂや判定部１１１ｆにおいてペイロードを解読することなく迂回経路調査にかかるフレームであることが識別可能である。
【図１】
0005408337.tif 000002
【図２】
0005408337.tif 000003
【図３】
0005408337.tif 000004
【図４】
0005408337.tif 000005
【図５】
0005408337.tif 000006
【図６】
0005408337.tif 000007
【図７】
0005408337.tif 000008
【図８】
0005408337.tif 000009
【図９】
0005408337.tif 000010
【図１０】
0005408337.tif 000011
【図１１】
0005408337.tif 000012
【図１２】
0005408337.tif 000013
【図１３】
0005408337.tif 000014
【図１４】
0005408337.tif 000015
【図１５】
0005408337.tif 000016
【図１６】
0005408337.tif 000017
【図１７】
0005408337.tif 000018
【図１８】
0005408337.tif 000019
【図１９】
0005408337.tif 000020
【図２０】
0005408337.tif 000021
【図２１】
0005408337.tif 000022
【図２２】
0005408337.tif 000023
【図２３】
0005408337.tif 000024
【図２４】
0005408337.tif 000025
【図２５】
0005408337.tif 000026
【図２６】
0005408337.tif 000027
【図２７】
0005408337.tif 000028
【図２８】
0005408337.tif 000029
【図２９】
0005408337.tif 000030
【図３０】
0005408337.tif 000031
【図３１】
0005408337.tif 000032
【図３２】
0005408337.tif 000033
【図３３】
0005408337.tif 000034
【図３４】
0005408337.tif 000035
【図３５】
0005408337.tif 000036
【図３６】
0005408337.tif 000037
【図３７】
0005408337.tif 000038