(57)【要約】  サーバとの間が複数の中継装置によって中継可能なように構成されているネットワーク中のノード装置は、受信部、ウェイト番号生成部、記憶部、選択部、および、送信部を備える。受信部は、隣接ノード装置からフレームを受信する。ウェイト番号生成部は、複数の中継装置の中のそれぞれの中継装置を起点としたときの隣接ノード装置までのホップ数が、隣接ノード装置からの同期要求と共に通知されると、ホップ数をインクリメントしたウェイト番号を中継装置ごとに生成する。記憶部は、生成されたウェイト番号を、中継装置を識別する識別子と対応付けてそれぞれ記憶する。選択部は、記憶部に記憶されているウェイト番号が相対的に小さい中継装置を選択する。送信部は、選択された中継装置を中継先に指定し、サーバを宛先に指定したデータフレームを送信する。
2013042207.tif 000002
【特許請求の範囲】
【請求項１】
サーバとの間が複数の中継装置によって中継可能なように構成されているネットワーク中のノード装置であって、
隣接ノード装置からフレームを受信する受信部と、
前記複数の中継装置の中のそれぞれの中継装置を起点としたときの前記隣接ノード装置までのホップ数が、前記隣接ノード装置からの同期要求と共に通知されると、前記ホップ数をインクリメントしたウェイト番号を前記中継装置ごとに生成するウェイト番号生成部と、
生成された前記ウェイト番号を前記中継装置を識別する識別子と対応付けてそれぞれ記憶する記憶部と、
前記記憶部に記憶されているウェイト番号が相対的に小さい中継装置を選択する選択部と、
選択された中継装置を中継先に指定し、前記サーバを宛先に指定したデータフレームを送信する送信部
を備えることを特徴とするノード装置。
【請求項２】
前記受信部で受信された受信フレームから、前記受信フレームの宛先である宛先ノード装置に割り振られた宛先ウェイト番号と、前記宛先ウェイト番号の起点とされた中継装置を識別する宛先識別子を取得し、前記宛先識別子に対応付けて前記記憶部に記憶されているウェイト番号を前記宛先ウェイト番号と比較した結果により、前記受信フレームのルーティングを行うルーティング部をさらに備え、
前記宛先ウェイト番号のほうが大きい場合、前記ルーティング部は、前記宛先識別子で識別される中継装置を起点としたウェイト番号が前記記憶部に記憶されているウェイト番号よりも大きな隣接ノード装置に、前記受信フレームを送信できるかを判定し、
前記受信フレームが送信できないと判定した場合、前記ルーティング部は、ループを検出したと判断する
ことを特徴とする請求項１に記載のノード装置。
【請求項３】
前記宛先ウェイト番号のほうが小さい場合、前記ルーティング部は、前記宛先識別子で識別される中継装置を起点としたウェイト番号が前記記憶部に記憶されているウェイト番号よりも小さな隣接ノード装置に、前記受信フレームを送信できるかを判定し、
前記受信フレームが送信できないと判定した場合、前記ルーティング部は、ループを検出したと判断する
ことを特徴とする請求項２に記載のノード装置。
【請求項４】
前記隣接ノード装置の通信状態を監視すると共に、通信障害を検出する障害検出部
を備え、
前記障害検出部により通信障害が検出されると、前記ウェイト番号生成部は、前記記憶部に記憶されている前記通信障害が検出された隣接ノードから受信した同期要求を用いて生成された生成ウェイト番号を初期値に変更し、
前記選択部は、対応付けられている生成ウェイト番号が前記初期値ではない中継装置の中で、前記対応付けられている生成ウェイト番号が相対的に小さい中継装置を選択する
ことを特徴とする請求項１〜３のいずれか１項に記載のノード装置。
【請求項５】
複数のネットワークポートを備え、
前記記憶部には、前記複数のネットワークポートを介して接続されている複数の隣接ノード装置について、前記複数の隣接ノードの各々で生成されたウェイト番号である隣接ウェイト番号を、前記隣接ウェイト番号の生成に用いられたホップ数をカウントする際の起点とされた中継装置を識別する識別子、および、前記隣接ウェイト番号を含むフレームを受信したネットワークポートの番号に対応付けて記録されており、
前記障害検出部により通信障害が検出されたときに、前記通信障害を起こしていない隣接ノード装置についての中継装置を起点とした隣接ウェイト番号が前記中継装置を起点とした生成ウェイト番号よりも大きいポートから、前記中継装置を起点とするウェイト番号の初期化を要求するフレームを生成する初期化要求部
をさらに備え、
前記送信部が前記初期化を要求するフレームを送信する
ことを特徴とする請求項４に記載のノード装置。
【請求項６】
前記複数の中継装置のうちの第１の中継装置と前記サーバの間で通信障害が発生したことが通知されると、前記初期化要求部は、前記隣接ノード装置に、前記第１の中継装置に対応付けられたウェイト番号の初期化を要求するフレームを生成し、
前記ウェイト番号生成部は、前記第１の中継装置に対応付けられているウェイト番号を初期化する
ことを特徴とする請求項５に記載のノード装置。
【請求項７】
データの宛先であるサーバとの間が複数の中継装置によって中継可能なように構成されているネットワークに所属する第１のノード装置に隣接する第２のノード装置による通信方法であって、
前記第１のノード装置から、同期の要求とともに、前記複数の中継装置の中の第１の中継装置から前記第１のノード装置までのホップ数である第１のウェイト番号が通知されると、前記第１のウェイト番号をインクリメントして第２のウェイト番号を生成し、
前記第２のウェイト番号を前記第１の中継装置を識別する第１の識別子に対応付けて記憶し、
前記第２のノード装置に隣接する第３のノード装置から、同期の要求とともに、前記複数の中継装置の中の第２の中継装置から前記第３のノード装置までのホップ数である第３のウェイト番号が通知されると、前記第３のウェイト番号をインクリメントして第４のウェイト番号を生成し、
前記第４のウェイト番号を前記第２の中継装置を識別する第２の識別子に対応付けて記憶し、
前記第２のウェイト番号が前記第４のウェイト番号より小さい場合、前記第２のノード装置は、前記第１の中継装置を中継先に指定して、データフレームを前記サーバに送信する
ことを特徴とする通信方法。
【請求項８】
前記第１のノード装置は、前記第１の中継装置から前記第１のノード装置に隣接する第４のノード装置までのホップ数である第５のウェイト番号を、前記第４のノード装置から取得し、
前記第１のノード装置は、前記第２のノード装置から前記データフレームを受信すると、前記第１のウェイト番号と前記第５のウェイト番号を比較し、
前記第５のウェイト番号が前記第１のウェイト番号より小さい場合、前記第１のノード装置は、前記データフレームを前記第４のノード装置に転送する
ことを特徴とする請求項７に記載の通信方法。
【請求項９】
前記第１のノード装置は、前記第１の中継装置を起点としたホップ数が前記第１のウェイト番号よりも小さいノード装置に、前記第２のノード装置から受信したデータフレームを送信できない場合、前記データフレームを前記第２のノード装置に送信し、
前記第２のノード装置は、前記サーバを宛先としたフレームに対応付けた前記第１のノード装置に接続したポートの状態を、ループ状態に設定する
ことを特徴とする請求項８に記載の通信方法。
【請求項１０】
前記第１の中継装置と前記サーバの間で通信障害が発生すると、前記第１の中継装置は、前記第１の中継装置を起点とするホップ数を用いて算出されたウェイト番号の初期化を要求する初期化フレームをブロードキャスト送信し、
前記第２のノード装置は、前記初期化フレームを受信すると、前記第２のウェイト番号を初期値に設定すると共に、前記サーバに宛てたフレームの中継先に前記第１の中継装置を指定しない
ことを特徴とする請求項７〜９のいずれか１項に記載の通信方法。
【請求項１１】
前記第２のノード装置は、前記第３のノード装置に同期を求める際に、前記第２のウェイト番号を前記第１の中継装置に対応付けて前記第３のノード装置に通知し、
前記第３のノード装置は、前記第２のウェイト番号をインクリメントして得られた第６のウェイト番号を前記第１の中継装置と対応付けて記憶し、
前記第２のノード装置で障害が発生すると、前記第３のノード装置は、前記第２のウェイト番号と前記第６のウェイト番号を比較し、
前記第３のノード装置は、前記第６のウェイト番号が前記第２のウェイト番号よりも大きいことを認識すると、前記第６のウェイト番号を初期値に設定すると共に、前記第１の中継装置を前記サーバ宛てのフレームを送信する際の中継先に指定しない
ことを特徴とする請求項７〜１０のいずれか１項に記載の通信方法。
【請求項１２】
前記第２のノード装置は、前記第１のノード装置に通信障害が発生すると、前記第１のノード装置に前記通信障害が発生したことを、前記第１の中継装置に通知し、
前記第１の中継装置は、前記第１のノード装置で通信障害が発生したことを前記第２の中継装置に通知し、
前記第１の中継装置は、前記第１の中継装置を起点とするホップ数を用いて算出されたウェイト番号の再計算を要求するフレームをブロードキャストし、
前記第２の中継装置は、前記第２の中継装置を起点とするホップ数を用いて算出されたウェイト番号の再計算を要求するフレームをブロードキャストし、
前記第２のノード装置は、新たに計算されたウェイト番号を用いて、前記サーバとの間の通信の中継先を決定する
ことを特徴とする請求項７〜１１のいずれか１項に記載の通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノード装置を含むネットワークにおける通信に関する。
【背景技術】
【０００２】
自律分散型ネットワークの例として、有線アドホックネットワークが挙げられる。有線アドホックネットワークは、例えば、センサーネットワークに適用されることがある。この場合、アドホックネットワークを形成している個々のセンサーは、建物や橋梁などの構造物内への埋め込みが可能であり、さらに、土中や水中などの無線ネットワークの運用が困難である箇所への設置が可能である。また、有線アドホックネットワークは、有線によりデータの送受信が行われるため、故障の発生による切断の検出が容易であるなどの利点がある。【０００３】
アドホックネットワークを構築する際には、経路選択、障害発生時の制御などの技術も求められる。経路選択の例として、ネットワーク中の各ゲートウェイと各ノード装置に予めグループＩＤを設定しておき、各ノード装置は同じグループＩＤが割り当てられているゲートウェイに到達する経路の中で最も通信品質が良好な経路を選択する方法が知られている。また、ループの検出方法も考案されている。この方法では、第１のノード装置は、第１のポートから第１のフレームを送信するとともに、第１のポートを判別する情報と第１のフレームを識別する第１の識別情報を対応付けて格納する。第１のノード装置は、第２のノード装置から第２のフレームを受信すると、第２のフレームを識別する第２の識別情報と第１の識別情報を比較し、両者が一致すると、ループを検出したと判断する。さらに、移動端末が経路検索により選択した１つのゲートウェイノードを介して外部ネットワークと通信し、通信中に経路断の通知を受信すると、再度経路を検索してゲートウェイノードを選択する方法も知られている。移動端末は、新たに選択したゲートウェイノードを介して外部ネットワークとの通信を継続する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−７７１１９号公報
【特許文献２】国際公開第２０１０／１３１２８８号
【特許文献３】国際公開第２００６／０４８９３６号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
背景技術で述べた方法によりゲートウェイが選択されると、ノード装置から最もホップ数が小さいゲートウェイが選択されないことがあり、選択されたゲートウェイまでのホップ数が大きいために、経路が冗長になることが多かった。さらに、背景技術で述べた経路の選択方法では、選択されたゲートウェイまでの経路についてもホップ数が最小の経路が選択されずに冗長な経路が選択されてしまうことがある。【０００６】
本発明は、ネットワーク中の個々のノード装置が最短の経路を用いて通信を行うことができるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
サーバとの間が複数の中継装置によって中継可能なように構成されているネットワーク中のノード装置は、受信部、ウェイト番号生成部、記憶部、選択部、および、送信部を備える。受信部は、隣接ノード装置からフレームを受信する。ウェイト番号生成部は、前記複数の中継装置の中のそれぞれの中継装置を起点としたときの前記隣接ノード装置までのホップ数が、前記隣接ノード装置からの同期要求と共に通知されると、前記ホップ数をインクリメントしたウェイト番号を前記中継装置ごとに生成する。記憶部は、生成された前記ウェイト番号を前記中継装置を識別する識別子と対応付けてそれぞれ記憶する。選択部は、前記記憶部に記憶されているウェイト番号が相対的に小さい中継装置を選択する。送信部は、選択された中継装置を中継先に指定し、前記サーバを宛先に指定したデータフレームを送信する。
【発明の効果】
【０００８】
ネットワーク中の個々のノード装置は、最短の経路を用いて通信する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るネットワークの例を示す図である。
【図２】センサー中継ノードの構成の例を示す図である。
【図３】ルーティング制御部の構成の例を示す図である。
【図４】ウェイト番号テーブルの例を示す図である。
【図５】ノード管理テーブルの例を示す図である。
【図６】ネットワークの例とウェイト番号の決定の例を示す図である。
【図７】フレームのフォーマットの例を説明する図である。
【図８】ウェイト番号テーブルの例を示す図である。
【図９】ウェイト番号テーブルの例を示す図である。
【図１０】各センサー中継ノードで決定された中継先の例を示す図である。
【図１１】基幹中継ノードが記憶するテーブルの例を示す図である。
【図１２】ウェイト番号テーブルの例を示す図である。
【図１３Ａ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１３Ｂ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１３Ｃ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１３Ｄ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１３Ｅ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１３Ｆ】フレームを受信したときのセンサー中継ノードの動作の例を説明するフローチャートである。
【図１４】中継先の基幹中継ノードを選択する際の選択部の動作の例を説明するフローチャートである。
【図１５】基幹中継ノードとサーバの間の回線で障害が発生した場合の例を示す図である。
【図１６】各センサー中継ノードで決定された中継先の例を示す図である。
【図１７】基幹中継ノードの故障を発見したときに中継先の基幹中継ノードを変更した場合の例を示す図である。
【図１８】ウェイト番号の初期化の例を説明する図である。
【図１９】ウェイト番号の初期化の例を説明する図である。
【図２０】ウェイト番号の初期化の例を説明する図である。
【図２１】ウェイト番号の初期化の例を説明する図である。
【図２２】ウェイト番号の初期化の例を示す図である。
【図２３】ウェイト番号の変更の例を示す図である。
【図２４Ａ】隣接するセンサー中継ノードが故障した場合のセンサー中継ノードの動作の例を説明するフローチャートである。
【図２４Ｂ】隣接するセンサー中継ノードが故障した場合のセンサー中継ノードの動作の例を説明するフローチャートである。
【図２５】基幹中継ノードが記憶するテーブルの例を示す図である。
【図２６】ウェイト番号が再決定された場合の例を示す図である。
【図２７】ウェイト番号が再決定された場合の例を示す図である。
【図２８】第５の実施形態でのセンサー中継ノードの動作の例を説明するフローチャートである。
【図２９】第５の実施形態での基幹中継ノードの動作の例を説明するフローチャートである。
【図３０】中継先の基幹中継ノードを選択する際の選択部の動作の例を説明するフローチャートである。
【図３１】センサー中継ノードの動作の例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
図１は、実施形態に係るネットワークの例を示す。図１に示すネットワークには、ノードＮ１〜Ｎ８の８台のノード装置と、ゲートウェイＧＷ１およびＧＷ２の２台のゲートウェイ装置を含むアドホックネットワーク、ハブ５、サーバ１が含まれる。サーバ１は、ハブ５とゲートウェイ装置を介してノード装置との間でフレームを送受信する。以下の説明では、アドホックネットワークに含まれる個々のノード装置は、隣接するノード装置もしくはゲートウェイまでの経路は記憶しているが、ネットワークに含まれているその他の装置への経路は記憶していないものとする。
【００１１】
ノード装置は、隣接するノード装置との間でゲートウェイ装置からのホップ数を含むフレームを送受信することにより、ＧＷ１からノード装置までのホップ数と、ＧＷ２からノード装置までのホップ数を求める。例えば、ノードＮ４は、ゲートウェイＧＷ２に隣接しているので、ゲートウェイＧＷ２からのホップ数が１であることをノードＮ３とＮ８に通知する。すると、ノードＮ３とＮ８は、ノードＮ４に隣接しているので、ゲートウェイＧＷ２からのホップ数が２であることを認識し、各々に隣接するノードに通知する。
【００１２】
以下の説明では、いずれかのゲートウェイ装置からノード装置までのホップ数の最小値のことを「ウェイト番号」と記載することがある。例えば、ノードＮ４は、ゲートウェイＧＷ２に隣接しているので、ゲートウェイＧＷ２を起点としたノードＮ４のウェイト番号は１である。さらに、ノードＮ８はノードＮ４に隣接しているので、ゲートウェイＧＷ２を起点としたノードＮ８のウェイト番号は２となる。一方、ゲートウェイＧＷ１からノードＮ８までの最短経路の１つは、ＧＷ１からＮ１、Ｎ２、Ｎ３、Ｎ７を経てＮ８に到達する経路である。このため、ゲートウェイＧＷ１を起点としたノードＮ８のウェイト番号は５となる。
【００１３】
ノード装置は、サーバ１にフレームを送信する際に、ウェイト番号が最小のゲートウェイ装置を、サーバ１への中継先に指定する。例えば、ノードＮ８がサーバ１にフレームを送信するときは、ゲートウェイＧＷ２を起点としたノードＮ８のウェイト番号（＝２）と、ゲートウェイＧＷ１を起点としたノードＮ８のウェイト番号（＝５）を比較する。ここでは、ゲートウェイＧＷ２を起点としたウェイト番号のほうが、ゲートウェイＧＷ１を起点としたウェイト番号よりも小さい。そこで、ノードＮ８は、ゲートウェイＧＷ２を中継先に指定する。このため、例えば、ノードＮ８から送信されたフレームが図１の破線の矢印（Ａ）で示すような、冗長な経路によりサーバ１に送信されることを防ぐことができる。
【００１４】
このように、アドホックネットワークに含まれる各ノードは、最小のホップ数で到達できるゲートウェイ装置を経由してサーバ１にアクセスするため、サーバ１までの経路を短くすることができる。
【００１５】
さらに、サーバ１宛てのフレームを転送する際に、個々のノードは、中継先のゲートウェイ装置を起点としたウェイト番号が小さいノードを、転送先に選択する。例えば、ノードＮ８からゲートウェイＧＷ２を中継先に指定して送信されたフレームは、ノードＮ４に送信されるとゲートウェイＧＷ２に送信される。しかし、ノードＮ７に送信されると、ゲートウェイＧＷ２を起点としたノードＮ７のウェイト番号（＝３）は、ゲートウェイＧＷ２を起点としたノードＮ８のウェイト番号（＝２）よりも大きいため、フレームはゲートウェイＧＷ２に送信されずにノードＮ８に送り返される。従って、ノードＮ８からサーバ１に向けて送信されるフレームは、図１の実線の矢印（Ｂ）に示すように、最短経路を介してサーバ１に送信される。
【００１６】
＜装置構成＞
以下の例では、ノード装置はセンサーを備え、他のノード装置からサーバ１に向けて送信されるフレームを中継する装置（センサー中継ノード１０）であるものとする。一方、ゲートウェイ装置は、センサーを備えておらず、ノード装置から受信したフレームの中継を行う装置（基幹中継ノード）であるものとする。
【００１７】
図２は、センサー中継ノード１０の構成の例を示す。センサー中継ノード１０は、有線アドホックネットワークポート１１（１１ａ〜１１ｃ）、汎用ポート１２、アドホックルーティング制御デバイス２０、Central Processing Unit（ＣＰＵ）４０を備える。ノード装置はさらに、digital input/digital output（ＤＩ／ＤＯ）端子１３、Electrically Erasable and Programmable Read Only Memory（ＥＥＰＲＯＭ）１４、センサー接続ポート１５（１５ａ〜１５ｃ）も備える。
【００１８】
有線アドホックネットワークポート１１は、他のセンサー中継ノード１０または基幹中継ノード５０（図６参照）との間で送受信されるアドホックフレームをカプセル化したイーサネットフレームのデータを終端し、送受信フレームの符号化または復号を行う。センサー中継ノード１０が備える有線アドホックネットワークポート１１の数は任意であるが、以下の説明では、ポートＰ１、Ｐ２、Ｐ３の３ポートを備える場合を例として説明する。有線アドホックネットワークポート１１は、送信フレームを一時保持するバッファメモリを備えることができる。以下の記載では、有線アドホックネットワークポート１１を「ポート」または「受信ポート」など記載することもあるものとする。汎用ポート１２は、例えばＬＡＮ（ローカルエリアネットワーク）を終端する。
【００１９】
アドホックルーティング制御デバイス２０は、例えば、ＦＰＧＡ（Field Programmable Gate Array）やＳＲＡＭ（Static Random Access Memory）により実現される。アドホックルーティング制御デバイス２０は、受信フレーム制御部２１、送信フレーム制御部２２、汎用ポート制御部２３、ＣＰＵインタフェース２４、フレーム処理部２６、ルーティング制御部３０を備える。さらに、アドホックルーティング制御デバイス２０は、ＦＩＤ（Frame ID）テーブル２７、ＰＳ（Port Status）テーブル２８、ノード管理テーブル２９も備える。また、ＣＰＵインタフェース２４はレジスタ２５を有する。
【００２０】
受信フレーム制御部２１は、有線アドホックネットワークポート１１ａ〜１１ｃからフレームデータを受信する。受信フレーム制御部２１は、宛先が他のセンサー中継ノード１０であるフレームをルーティング制御部３０に出力する。フレームの宛先が自ノードである場合、受信フレーム制御部２１は、フレームをＣＰＵインタフェース２４に出力する。ＣＰＵインタフェース２４は、受信フレーム制御部２１から入力されたフレームを、ＣＰＵ４０に出力する。なお、ＣＰＵ４０への出力に際して、ＣＰＵインタフェース２４は、適宜、レジスタ２５を使用する。
【００２１】
ルーティング制御部３０は、ウェイト番号を用いたルーティング処理を行う。ルーティング制御部３０の構成の例を図３に示す。ルーティング制御部３０は、ウェイト番号制御部３１（３１ａ〜３１ｃ）、障害検出部３６、初期化要求部３７、ルーティング部３８を備える。ウェイト番号制御部３１ａは、ウェイト番号生成部３２、記憶部３４、選択部３５を備え、記憶部３４にウェイト番号テーブル３３を有する。ウェイト番号制御部３１ａ〜３１ｃは、互いに異なる基幹中継ノード５０を起点とするウェイト番号を処理するものとする。例えば、ウェイト番号制御部３１ａは基幹中継ノード５０ａを起点としたウェイト番号を処理し、ウェイト番号制御部３１ｂは基幹中継ノード５０ｂを起点とするウェイト番号を処理する。図３では、単に図を見やすくするために、ウェイト番号制御部３１ｂ、３１ｃについては詳細を示していないが、ウェイト番号制御部３１ｂと３１ｃのいずれもウェイト番号制御部３１ａと同様の構成を有する。ウェイト番号生成部３２は、隣接するセンサー中継ノード１０から受信したフレームに含まれているウェイト番号をインクリメントすることにより、ウェイト番号生成部３２が備えられているセンサー中継ノード１０に割り当てられるウェイト番号を決定する。
【００２２】
図４（ａ）は、ウェイト番号テーブル３３の例を示す。なお、図４（ａ）に示す例は、初期化された状態のウェイト番号テーブル３３であり、データは記録されていない。ウェイト番号テーブル３３は、ウェイト番号生成部３２が決定したウェイト番号と、ポートＰ１〜Ｐ３の各々を介して接続されたセンサー中継ノード１０のウェイト番号を記憶する。このとき、ウェイト番号生成部３２は、ウェイト番号を決定する際の基準位置として用いられた基幹中継ノード５０を識別する識別子（送信元基幹中継番号）と対応付けてウェイト番号を記憶する。さらに、ウェイト番号テーブル３３には、ウェイト番号の決定に用いたフレームを受信したポートのポート番号も記録される。以下、ウェイト番号の決定に用いたフレームを受信したポートのことを「マスターポート」と記載することがある。図３ではウェイト番号テーブル３３を１つ図示しているが、ウェイト番号テーブル３３は、ネットワークに含まれている基幹中継ノード５０の数と同数備えられている。個々のウェイト番号テーブル３３は１つの基幹中継ノード５０を起点としたときのウェイト番号に関する情報を格納するものとする。
【００２３】
選択部３５は、サーバ１宛てのフレームを送信する際に中継先として指定する基幹中継ノード５０を、ウェイト番号テーブル３３を用いて決定する。また、選択部３５は、選択した結果をノード管理テーブル２９に記録する。ノード管理テーブル２９の例を図５に示す。図５の例では、ノード管理テーブル２９には、選択部３５で選択された基幹中継ノード５０を識別する識別子が記録されているが、実装に応じて他の任意の情報もノード管理テーブル２９に含められることがある。ウェイト番号テーブル３３の生成方法や使用方法、選択部３５の動作などについては、後で詳しく説明する。
【００２４】
障害検出部３６は、隣接するセンサー中継ノード１０の状況を監視し、隣接するセンサー中継ノード１０との通信に障害が発生すると、障害の発生を検出する。障害検出部３６は障害が発生したことを初期化要求部３７に通知する。初期化要求部３７は、障害が発生したことによって変動するウェイト番号を特定し、特定したウェイト番号を初期化する。さらに、初期化要求部３７は、隣接するセンサー中継ノード１０に対して、適宜、ウェイト番号の初期化を要求する。障害検出部３６と初期化要求部３７の動作については後で詳しく説明する。
【００２５】
ルーティング部３８は、受信フレーム制御部２１からルーティング制御部３０に入力されたフレームの転送先のポートを特定する。ルーティング部３８は、ＰＳテーブル２８、ＦＩＤテーブル２７、および、ウェイト番号テーブル３３を参照して転送先のポートを決定する。ここで、ＰＳテーブル２８は、フレームを転送可能なポートを宛先ごとに記憶しているテーブルである。ＰＳテーブル２８は、フレームの宛先アドレスに対応付けて、その宛先にフレームを転送することができるポートの番号が対応付けられている任意の形式とすることができる。ルーティング部３８は、転送するフレームを、転送先のポート番号を通知する情報と共に、送信フレーム制御部２２に出力する。
【００２６】
ＦＩＤテーブル２７は、ループの検出に用いられる。ＦＩＤテーブル２７は、受信したことがあるフレームの送信元アドレスとＦＩＤフィールドの値の組み合わせに対応付けて、有線アドホックネットワークポート１１の使用状況を記録している。有線アドホックネットワークポート１１の使用状況は、有線アドホックネットワークポート１１からのリンクが無い（リンク断）、ループ（ループ状態）、未使用、宛先へフレームの送信に使用している（送信中ポート）など、各ループの接続情報を示す。なお、有線アドホックネットワークポート１１の使用状況は、フレームの送信元アドレスとＦＩＤフィールドの値の組み合わせに応じて決定される。例えば、ノードＮ１から送信されたＦＩＤ＝１のフレームの宛先がノードＮ４であったとする。ノードＮ２のポートＰ１からノードＮ４へフレームを送信できる場合、送信元がノードＮ１でＦＩＤ＝１のフレームに対応付けられた使用状況は、ノードＮ２のポートＰ１では「送信中ポート」になる。一方、ノードＮ１から送信されたＦＩＤ＝２のフレームの宛先がノードＮ５であるとする。さらに、ノードＮ２のポートＰ１からノードＮ５へフレームを送信しても、ループが発生しているために送信したフレームをノードＮ２が他のノード装置から再度、受信してしまうとする。この場合、送信元がノードＮ１でＦＩＤ＝２のフレームに対応付けられた使用状況は、ノードＮ２のポートＰ１では「ループ状態」になる。また、送信元がノードＮ１でＦＩＤ＝１のフレームを転送したことが無いポートでは、送信元がノードＮ１でＦＩＤ＝１のフレームに対応付けられた使用状況は「未使用」となる。
【００２７】
さらに、ＦＩＤテーブル２７は、エントリごとに１つのＬｏｏｐフラグを含む。ここで、Ｌｏｏｐフラグは、エントリに記録されている送信元アドレスとＦＩＤの組合せで特定されるフレームの宛先に至る経路上に、自ノードが存在するかを示す。Ｌｏｏｐフラグ＝１の場合、エントリに記録されている送信元アドレスとＦＩＤの組合せで特定されるフレームの宛先のノードに至る経路に自ノードが存在しないことを示す。すなわち、Ｌｏｏｐフラグ＝１は、自ノードがフレームの宛先に向けてそのフレームを転送できないことを示す。一方、Ｌｏｏｐフラグ＝０の場合、エントリに記録されている送信元アドレスとＦＩＤの組合せで特定されるフレームの宛先のノードに至る経路に自ノードが存在することを示す。すなわち、Ｌｏｏｐフラグ＝０は、自ノードがフレームの宛先に向けてそのフレームを転送できることを示す。
【００２８】
ルーティング部３８は、フレームを転送する前に、送信元アドレスとＦＩＤフィールドの値の組み合わせが、ＦＩＤテーブル２７のいずれかのエントリと一致するかを確認する。ＦＩＤテーブル２７中のエントリと一致すると、ルーティング部３８は既に受信したフレームを受信したと判断して転送を行わない。このとき、ルーティング部３８は、フレームの送信元アドレスとＦＩＤフィールドの値の組み合わせに対応付けて、フレームの宛先に転送できないことを記録する。例えば、ルーティング部３８は、Ｌｏｏｐフラグをエントリごとに設け、ループを検出した場合、対応するエントリのＬｏｏｐフラグを「１」に設定する。すると、Ｌｏｏｐフラグが１に設定されたエントリに記録されている送信元アドレスとＦＩＤの組合せを含むフレームについては、ルーティング部３８は転送を行わずに、受信したポートからフレームを返送する。一方、ＦＩＤテーブル２７には一致するエントリが無い場合、ルーティング部３８は、フレームの宛先をキーとしてＰＳテーブル２８を検索する。フレームの宛先がＰＳテーブル２８に記録されている場合は、ＰＳテーブル２８に指定されているポートから出力させることによりフレームを転送する。
【００２９】
また、ルーティング部３８は、転送するフレームの宛先のノードに割り振られているウェイト番号と、自ノードに割り振られているウェイト番号を用いて、転送先を決定することもできる。フレームの宛先に割り振られているウェイト番号が、自ノードのウェイト番号よりも大きい場合、ルーティング部３８は、自ノードよりも大きなウェイト番号が割り振られているノードに接続されているポートから、転送対象のフレームを転送する。一方、自ノードよりも大きなウェイト番号が割り振られているノードに接続されているポートが無い場合、ルーティング部３８は、ループを検出したと判断する。そこで、ルーティング部３８は、フレームを受信したポートから返送することにより、送信元のノード装置に向けて返送する。ループが検出されると、転送の対象とされたフレームの送信元アドレスとＦＩＤフィールドの値に基づいて、ＦＩＤテーブル２７中のポートの使用状態が「ループ状態」に変更される。
【００３０】
次に、フレームの宛先に割り振られているウェイト番号が、自ノードのウェイト番号よりも小さい場合のルーティング部３８の動作について述べる。この場合、ルーティング部３８は、自ノードよりも小さなウェイト番号が割り振られているノード装置に接続されているポートから、転送対象のフレームを転送する。自ノードよりも小さなウェイト番号が割り振られているノード装置に接続されているポートが無い場合、ルーティング部３８は、ループを検出したと判断する。ループを検出した場合、ルーティング部３８は、処理対象のフレームを送信元のノード装置に向けて返送する。また、ＦＩＤテーブル２７のポートに関する情報も更新される。
【００３１】
受信フレームの宛先に割り振られているウェイト番号が、自ノードのウェイト番号と一致する場合、ノード装置は、フレームの宛先が自ノードであるかを確認する。フレームの宛先が自ノードである場合、受信フレームは、適宜、ＣＰＵ４０などで処理される。一方、宛先が自ノードでなく、さらに、受信フレームの宛先に割り振られているウェイト番号が、自ノードのウェイト番号と一致する場合、ルーティング部３８は、ループを検出したと判断する。ループを検出した場合に行われる処理は前述のとおりである。
【００３２】
フレーム処理部２６は、ＣＰＵインタフェース２４がＣＰＵ４０から取得した情報を含むフレームを生成し、ルーティング制御部３０や送信フレーム制御部２２に出力する。送信フレーム制御部２２は、ルーティング制御部３０や送信フレーム制御部２２から入力されたフレームを、送信先に応じて、有線アドホックネットワークポート１１に出力する。
【００３３】
ＣＰＵ４０は、センサー中継ノード１０に備えられているセンサー（図示せず）から取得した情報を処理する。ＣＰＵ４０は、ＦＰＧＡインタフェース４１、ＤＩ／ＤＯインタフェース４２、センサーインタフェース４３を備える。ＦＰＧＡインタフェース４１は、ＣＰＵインタフェース２４との間で、センサー情報やセンサー制御情報等を送受信する。センサーインタフェース４３は、センサー接続ポート１５を介して、センサーとの間で情報を送受信する。ここで、センサーは、温度センサー、風速センサー、照度センサー、人感センサー、電力検針メーター、加速度センサー、ひずみセンサー、監視カメラなどを含む任意のセンサーであっても良く、実装に応じて選択される。センサーインタフェース４３は、ＥＥＰＲＯＭ１４とも接続されている。ＥＥＰＲＯＭ１４は、各種センサー情報やセンサー制御情報を、適宜、記憶する。ＤＩ／ＤＯインタフェース４２にはＤＩ／ＤＯ端子１３が接続される。ＤＩ／ＤＯ端子１３は、データ入力端子およびデータ出力端子として動作する。
【００３４】
センサーにより検出された情報や測定されたデータは、センサーインタフェース４３からＦＰＧＡインタフェース４１を介して、ＣＰＵインタフェース２４に出力される。ＣＰＵインタフェース２４は、入力されたデータ等をフレーム処理部２６に出力する。なお、ＣＰＵ４０は、ＦＰＧＡインタフェース４１を介して受信したセンサー制御情報に基づいて、センサー制御情報により指定されたセンサー装置を制御する。
【００３５】
＜第１の実施形態＞
以下、第１の実施形態を、ウェイト番号の決定方法、中継先の基幹中継ノード５０の決定方法、および、中継先が決定された後のフレームの送受信に分けて説明する。
【００３６】
〔ウェイト番号と中継先の基幹中継ノードの決定方法〕
図６は、ネットワークの例とウェイト番号の決定の例を示す。図６に示すネットワークでは、アドホックネットワークは、基幹中継ノード５０ａ〜５０ｃの３台の基幹中継ノード５０を介してサーバ１と接続されている。以下の説明では、「ＩＤ＝Ｘのセンサー中継ノード１０」（ここでＸは任意の整数）のことを、表記を短くするために「ノードＮＸ」と記載することがある。例えば、「ＩＤ＝１のセンサー中継ノード１０」のことを「ノードＮ１」と表記する。また、図６のアドホックネットワークには、ノードＮ１〜Ｎ２１のセンサー中継ノード１０が含まれている。なお、図６はネットワークの例であり、センサー中継ノード１０や基幹中継ノード５０の数は、実装に応じて変更されうる。
【００３７】
図７に、図６のネットワークで送受信されるフレームのフォーマットの例を示す。図７では、同期要求フレーム、同期要求応答フレーム、ヘルスフレーム、状態通知フレーム、データフレームのフォーマットの例を示している。個々のフレームに含まれる情報とフレームに基づいて行われる処理などについては後で詳しく説明するが、いずれの種類のフレームも、ウェイト番号に関する情報を格納するフィールドを含み、さらに、ＭＡＣ（Media Access Control）ヘッダ、アドホックヘッダ、データフィールド、Frame Check Sequence（ＦＣＳ）を含む。
【００３８】
ＭＡＣヘッダは、ＤＳＴ  ＩＤ（DeSTination ID）フィールド、ＳＲＣ  ＩＤ（Source ID）フィールド、およびＴＹＰＥフィールドを含む。ＤＳＴ  ＩＤフィールドには、フレームの宛先に割り振られている６バイトのＭＡＣアドレスが設定される。ＳＲＣ  ＩＤフィールドには、送信元の装置に割り振られている６バイトのＭＡＣアドレスが設定される。ＴＹＰＥフィールドには、２バイトの上位プロトコル識別番号が設定され、例えば、０ｘ８８４７の値が設定される。なお、「０ｘ」は、それに続く数値が１６進数であることを示す。
【００３９】
アドホックヘッダは、ＫＩＮＤフィールド、ＦＩＤフィールド、ＴＴＬフィールド、およびＬｅｎｇｔｈフィールドを有する。ＫＩＮＤフィールドには、アドホックフレームの種別を表す２バイトのデータが設定される。ＦＩＤフィールドには、例えばシーケンシャル番号である２バイトのフレーム識別ＩＤが設定される。ＴＴＬ（Time To Live）フィールドには、フレームがアドホックネットワークの中に存在することができる上限時間を示す２バイトのデータが設定される。Ｌｅｎｇｔｈフィールドには、フレーム中のデータの長さを示す２バイトの値が設定される。ＦＣＳは、フレーム中の誤り検出および訂正をするための冗長符号である。
【００４０】
以下、図６に示すネットワークを例として、ウェイト番号の決定方法の例と、サーバ１宛てのフレームを送信する際に中継先とする基幹中継ノード５０を選択する方法の例を説明する。以下の説明では、基幹中継ノード５０ａ〜５０ｃの各々には、基幹中継番号が割り当てられており、個々の基幹中継ノード５０は割り当てられた基幹中継番号を記憶しているものとする。ここでは、基幹中継ノード５０ａの基幹中継番号は「０」、基幹中継ノード５０ｂの基幹中継番号は「１」、基幹中継ノード５０ｃの基幹中継番号は「２」であるものとする。また、図６に含まれている各センサー中継ノード１０に書き込まれたウェイト番号は、以下で説明する手順で得られたウェイト番号である。「＃０：」の後の数字は、基幹中継ノード５０ａを基点としたウェイト番号を表す。「＃１：」の後の数字は、基幹中継ノード５０ｂ、「＃２：」の後の数字は、基幹中継ノード５０ｃを基点としたウェイト番号を表すものとする。
【００４１】
（１）基幹中継ノード５０ａは、図７（ａ）に示すような同期要求フレームを生成する。同期要求フレームには、送信元基幹中継番号と送信元ウェイト番号が含まれる。基幹中継ノード５０ａは、送信元基幹中継番号を「０」、送信元ウェイト番号を０ｘ００に設定する。送信元基幹中継番号＝０かつ送信元ウェイト番号＝０は、基幹中継ノード５０ａを基点としたホップ数が０であることを意味し、基幹中継ノード５０ａのことを表す。
【００４２】
同期要求フレームはブロードキャスト送信されるため、ＤＳＴ  ＩＤフィールドには、ブロードキャストアドレスが設定される。基幹中継ノード５０は、同期要求フレームのＳＲＣ  ＩＤフィールドに、基幹中継ノード５０ａのアドレスを記録する。ＫＩＮＤは同期要求フレームであることを示す値に設定される。ここでは、ＫＩＮＤ＝１であるものとする。
【００４３】
（２）基幹中継ノード５０ａが同期要求フレームをブロードキャスト送信すると、ノードＮ１が同期要求フレームを受信する。ここで、ノードＮ１は、ポートＰ１を介して同期要求フレームを受信したものとする。ノードＮ１の受信フレーム制御部２１は、ポートＰ１を介して受信したフレームのＫＩＮＤフィールドを確認する。ＫＩＮＤフィールドの値がＫＩＮＤ＝１であると、受信フレーム制御部２１は、同期要求フレームを受信したと判断して、受信フレームをウェイト番号制御部３１ａに出力する。このとき、送信フレーム制御部２２は、受信ポート番号もウェイト番号制御部３１ａに出力するものとする。
【００４４】
ウェイト番号生成部３２は、ウェイト番号制御部３１ａに入力された同期要求フレームの送信元ウェイト番号を１つインクリメントして、ノードＮ１のウェイト番号を求める。さらに、ウェイト番号生成部３２は、同期要求フレームの送信元基幹中継番号が０であることを確認すると、生成したウェイト番号＝１（０ｘ０１）の起点は、基幹中継ノード５０ａであると認識する。ウェイト番号生成部３２は、生成したウェイト番号が、既にウェイト番号テーブル３３に記録されているウェイト番号よりも小さい場合、生成したウェイト番号を用いてウェイト番号テーブル３３を更新する。例えば、ノードＮ１において、送信元基幹中継番号＝０のウェイト番号テーブル３３が図４（ａ）のとおりであるとする。この場合、ウェイト番号生成部３２は、ウェイト番号の欄に記録されている値である０ｘＦＦと、生成したウェイト番号０ｘ０１を比較する。ここでは、生成したウェイト番号のほうが小さいので、ウェイト番号生成部３２は、送信元基幹中継番号＝０のウェイト番号テーブル３３中のウェイト番号を、０ｘ０１に更新する。このとき、ウェイト番号生成部３２は、ウェイト番号の決定に用いたフレームを受信したポートをマスターポートとして認識する。例えば、ノードＮ１の例では、ポートＰ１から受信した同期要求フレームに基づいてウェイト番号が決定されるので、マスターポートはポートＰ１となる。なお、ウェイト番号＝１は、基幹中継ノード５０ａからノードＮ１のセンサー中継ノード１０までの最短ホップ数が１であることを示す。
【００４５】
さらに、ウェイト番号生成部３２は、同期要求フレームの受信ポートがポートＰ１であることから、ポートＰ１を介して接続されているノードのウェイト番号が０であることを認識する。すなわち、ウェイト番号生成部３２は、ポートＰ１を介して基幹中継ノード５０と接続されていることを認識する。ウェイト番号生成部３２は、得られた情報を送信元基幹中継番号＝０のウェイト番号テーブル３３に記録する。従って、送信元基幹中継番号＝０のウェイト番号テーブル３３は、図４（ｂ）に示すように変更される。
【００４６】
なお、ウェイト番号テーブル３３中のタイマーは、接続先のウェイト番号が有効であるかを確認するために用いられるものとする。ウェイト番号生成部３２は、各ポートに接続されている接続先のウェイト番号が確認されるたびに、タイマーの値をｔ１にセットし、時間の経過と共にタイマーの値を小さくしていくものとする。タイマー値が０になると、接続先のウェイト番号の情報は無効とされる。
【００４７】
（３）次に、ノードＮ１のウェイト番号生成部３２は、隣接するセンサー中継ノード１０に送信するための同期要求フレームを生成する。生成される同期要求フレームでは、ＳＲＴ  ＩＤフィールドにノードＮ１のアドレスが設定され、送信元ウェイト番号は１に設定される。また、送信元基幹中継番号は０とされる。ウェイト番号生成部３２は、生成した送信元基幹中継番号＝０の同期要求フレームを、ノードＮ１の全てのポートから送信するように送信フレーム制御部２２に要求する。
【００４８】
（４）ノードＮ１のポートＰ１〜Ｐ３から、手順（３）で生成された同期要求フレームが送信されると、ノードＮ２とノードＮ８が同期要求フレームを受信する。ノードＮ２とノードＮ８は、それぞれ、手順（２）で説明した処理を行い、送信元基幹中継番号＝０のウェイト番号テーブル３３を更新する。ここでは、ノードＮ２とノードＮ８のいずれも、基幹中継ノード５０ａからの最短ホップ数は２であるため、ウェイト番号は２に設定される。ここで、ノードＮ２とノードＮ８のそれぞれが、ポートＰ１を介して同期要求フレームを受信したとする。この場合、ノードＮ２とノードＮ８のいずれでも、送信元基幹中継番号＝０のウェイト番号テーブル３３は、図４（ｃ）に示すように更新される。
【００４９】
（５）基幹中継ノード５０ａは、手順（４）でポートＰ１を介してノードＮ１から送信された同期要求フレームを受信するが、基幹中継ノード５０ａは同期要求フレームを用いた処理は行わない。
【００５０】
（６）ノードＮ２とノードＮ８は、ウェイト番号テーブル３３の更新が終わると、隣接するセンサー中継ノード１０に同期要求フレームを送信する。ここで行われる動作は、手順（３）で述べた動作と同様である。従って、ノードＮ２は、ノードＮ１、Ｎ３、Ｎ９に、基幹中継ノード５０ａを基点としたノードＮ２のウェイト番号が２であることを通知して、同期を要求する。また、ノードＮ８は、ノードＮ１、Ｎ９、Ｎ１５に、基幹中継ノード５０ａを基点としたノードＮ８のウェイト番号が２であることを通知するとともに、同期を要求する。
【００５１】
（７）一方、ノードＮ１は、ノードＮ２からポートＰ２を介して同期要求フレームを受信する。ノードＮ１のウェイト番号生成部３２は、同期要求フレームの送信元ウェイト番号を１つインクリメントして、得られた値を、ウェイト番号テーブル３３に記録されている値と比較する。このとき、ウェイト番号生成部３２は、処理対象の同期要求フレームの送信元基幹中継番号（＝０）と同じ送信元基幹中継番号に対応付けられているウェイト番号テーブル３３に記録されているウェイト番号を比較対象とする。ここでは、ノードＮ１に対して算出されたウェイト番号は３となる。図４（ｂ）に示すように、送信元基幹中継番号＝０のウェイト番号として、１が登録されているので、ウェイト番号生成部３２は、ウェイト番号テーブル３３の中のウェイト番号を更新しない。
【００５２】
また、ウェイト番号生成部３２は、ノードＮ２から受信した同期要求フレームに基づいて、基幹中継ノード５０ａを基点としたノードＮ２のウェイト番号が２であることを認識している。ノードＮ２からの同期要求フレームは、ポートＰ２から受信されているため、ノードＮ１において、ポートＰ２の情報は、図８に示すように更新される。
【００５３】
ノードＮ１は、ポートＰ３を介してノードＮ８から受信した同期要求フレームについても、ノードＮ２から受信した同期要求フレームと同様に処理する。ノードＮ８から受信した同期要求フレームの処理によっては、基幹中継ノード５０ａを基点としたノードＮ１のウェイト番号は変更されないが、ノードＮ１は、基幹中継ノード５０ａを基点としたノードＮ８のウェイト番号が２であることを認識する。そこで、ウェイト番号生成部３２は、送信元基幹中継番号＝０のウェイト番号テーブル３３のポートＰ３の情報を、図８に示すように更新する。
【００５４】
（８）隣接するセンサー中継ノード１０の間で、送信元基幹中継番号＝０の同期要求フレームが送受信されることにより、アドホックネットワークに含まれる全てのセンサー中継ノード１０で基幹中継ノード５０ａを基点としたウェイト番号が求められる。なお、個々のセンサー中継ノード１０で行われる処理は、手順（２）〜（７）と同様である。基幹中継ノード５０ａを基点としたウェイト番号を、図６に「＃０：」に続く数字として示す。図６に示されるように、各センサー中継ノード１０の「＃０：」に続くウェイト番号は、基幹中継ノード５０ａからの最短ホップ数となる。
【００５５】
（９）次に、基幹中継ノード５０ｂも同期要求フレームを生成してブロードキャスト送信する。基幹中継ノード５０ｂで生成された同期要求フレームには、送信元基幹中継番号＝１、送信元ウェイト番号＝０ｘ００が設定されている。送信元基幹中継番号＝１かつ送信元ウェイト番号＝０は、基幹中継ノード５０ｂを基点としたホップ数が０であることを表す。
【００５６】
（１０）ノードＮ４は、基幹中継ノード５０ｂから送信元基幹中継番号＝１の同期要求フレームを受信すると、送信元基幹中継番号＝１のウェイト番号テーブル３３を更新する。更新の手順は、手順（２）で説明した手順と同様である。さらに、ノードＮ４は、手順（３）で説明した手順と同様の手順により、ノードＮ４に隣接するセンサー中継ノード１０（ノードＮ３およびＮ５）に、同期要求フレームを送信する。
【００５７】
隣接するセンサー中継ノード１０の間で、送信元基幹中継番号＝１の同期要求フレームが送受信されることにより、各々のセンサー中継ノード１０において、図６に「＃１：」に対応付けて示すようなウェイト番号が求められる。各センサー中継ノード１０の「＃１：」の後に記載されたウェイト番号は、基幹中継ノード５０ｂからの最短ホップ数となる。
【００５８】
（１１）基幹中継ノード５０ｃも同期要求フレームを生成してブロードキャスト送信する。基幹中継ノード５０ｃで生成された同期要求フレームには、送信元基幹中継番号＝２、送信元ウェイト番号＝０ｘ００が設定されている。送信元基幹中継番号＝２かつ送信元ウェイト番号＝０は、基幹中継ノード５０ｃを基点としたホップ数が０であることを表す。
【００５９】
（１２）ノードＮ７は、基幹中継ノード５０ｃから送信元基幹中継番号＝２の同期要求フレームを受信すると、送信元基幹中継番号＝２のウェイト番号テーブル３３を更新する。更新の手順は、手順（２）で説明した手順と同様である。さらに、ノードＮ７は、手順（３）で説明した手順と同様の手順により、ノードＮ７に隣接するセンサー中継ノード１０（ノードＮ６、Ｎ１４）に、同期要求フレームを送信する。
【００６０】
隣接するセンサー中継ノード１０の間で、送信元基幹中継番号＝２の同期要求フレームが送受信されることにより、各々のセンサー中継ノード１０において、図６に「＃２：」に対応付けて示すようなウェイト番号が求められる。各センサー中継ノード１０の「＃２：」の後に記載されたウェイト番号は、基幹中継ノード５０ｃからの最短ホップ数となる。
【００６１】
（１３）手順（１）〜（１２）が終わったときにノードＮ１が保持するウェイト番号テーブル３３を図９に示す。図９（ａ）は、基幹中継ノード５０ａを基点としたときのウェイト番号テーブル３３である。また、図９（ｂ）は基幹中継ノード５０ｂ、図９（ｃ）は基幹中継ノード５０ｃを基点としたときのウェイト番号テーブル３３である。
【００６２】
（１４）基幹中継ノード５０ａ〜５０ｃの各々についてウェイト番号が決定されると、選択部３５は、基幹中継ノード５０ごとにウェイト番号を比較し、ウェイト番号が最小の基幹中継ノード５０を決定する。決定された基幹中継ノード５０は、そのセンサー中継ノード１０からサーバ１に送信するフレームの中継先として用いられる。選択部３５は、決定した基幹中継ノード５０をノード管理テーブル２９（図５）に記録する。例えば、ノードＮ１では、ウェイト番号は、
基幹中継ノード５０ａを起点としたウェイト番号：１
基幹中継ノード５０ｂを起点としたウェイト番号：４
基幹中継ノード５０ｃを起点としたウェイト番号：７
となっている。そこで、ノードＮ１の選択部３５は、基幹中継ノード５０ａを中継先とすることを決定し、ノード管理テーブル２９に記録する。他のセンサー中継ノード１０においても同様に基幹中継ノード５０が選択される。
【００６３】
図１０に各センサー中継ノード１０で決定された中継先の例を示す。ここで、太線で囲まれているウェイト番号がセンサー中継ノード１０ごとのウェイト番号の最小値であり、太線で囲まれているウェイト番号の起点となった基幹中継ノード５０がサーバ１への中継先として用いられる。図１０の例では、ノードＮ１、Ｎ２、Ｎ８、Ｎ９、Ｎ１５、Ｎ１６は、基幹中継ノード５０ａを中継先とする。また、ノードＮ３、Ｎ４、Ｎ５、Ｎ１０、Ｎ１１、Ｎ１２、Ｎ１７、Ｎ１８、Ｎ１９は、基幹中継ノード５０ｂを中継先とする。ノードＮ６、Ｎ７、Ｎ１３、Ｎ１４、Ｎ２０、Ｎ２１は、基幹中継ノード５０ｃを中継先とする。なお、以下では、基幹中継ノード５０を中継先に指定したセンサー中継ノード１０は、基幹中継ノード５０にとって「管理対象」のセンサー中継ノード１０であると記載することがある。
【００６４】
（１５）センサー中継ノード１０は、中継先とする基幹中継ノード５０に対して、同期要求応答フレームを送信する。同期要求応答フレームは、宛先の基幹中継ノード５０に対して、送信元のセンサー中継ノード１０によりサーバ１への中継先に指定されることを通知するために用いられる。同期要求応答フレームのフォーマットの例を図７（ｂ）に示す。同期要求応答フレームの宛先は、中継先に指定される基幹中継ノード５０のアドレス、送信先ウェイト番号は０に設定される。また、送信元ウェイト番号も記録される。また、同期要求応答フレームでは、ＫＩＮＤフィールドの値はＫＩＮＤ２であるものとする。さらに、同期要求応答フレームには、サーバ１への中継先に指定される基幹中継ノード５０に割り振られた送信元基幹中継番号も記録される。選択部３５は、同期要求応答フレームを生成し、生成した同期要求応答フレームを宛先とする基幹中継ノード５０に向けて送信する。例えば、ノードＮ１が基幹中継ノード５０ａあてに同期要求応答フレームを送信したとする。
【００６５】
（１６）基幹中継ノード５０ａは、ノードＮ１から同期要求応答フレームを受信すると、同期要求応答フレームの送信元アドレスと、送信元のセンサー中継ノード１０のウェイト番号を対応付けて記憶する。基幹中継ノード５０ａは、例えば、図１１（ａ）に示すようなテーブルに、ノードＮ１のアドレスとノードＮ１のウェイト番号を対応付けて記憶することができる。なお、図１１（ａ）では、テーブルを見やすくするために管理対象のノードのアドレスは、「Ｎ１」などのように、センサー中継ノード１０に割り振られた番号を用いて表している。
【００６６】
（１７）ノードＮ１以外のセンサー中継ノード１０も、同様に同期要求応答フレームを中継先の基幹中継ノード５０に向けて送信する。ここで、基幹中継ノード５０に隣接していないセンサー中継ノード１０から送信された同期要求応答フレームは、アドホックネットワーク中の他のセンサー中継ノード１０を経由して基幹中継ノード５０に送信される。このとき、送信元のセンサー中継ノード１０は、送信先の基幹中継ノード５０を起点としたウェイト番号が小さいセンサー中継ノード１０に向けて同期要求応答フレームを送信するものとする。選択部３５は、同期要求応答フレームを出力するポートを決定する際に、適宜、ウェイト番号テーブル３３を参照することができる。
【００６７】
図１２は、図６のようにウェイト番号が割り振られた場合にノードＮ２が備える送信元基幹中継番号＝０のウェイト番号テーブル３３の例を示す。ノードＮ２が基幹中継ノード５０ａに同期要求応答フレームを送信する場合、図１２に示すウェイト番号テーブル３３を確認する。選択部３５は、ポートＰ１〜Ｐ３の接続先のウェイト番号を比較して、ポートＰ１に接続されているセンサー中継ノード１０のウェイト番号がノードＮ２のウェイト番号よりも小さいことを認識する。そこで、ノードＮ２の選択部３５は、同期要求応答フレームをポートＰ１から出力することを送信フレーム制御部２２に要求する。ノードＮ２は、同期要求応答フレームをポートＰ１から基幹中継ノード５０ａに向けて送信する。
【００６８】
（１８）ノードＮ１は、ノードＮ２から同期要求応答フレームを受信する。すると、ノードＮ１のルーティング部３８は、同期要求応答フレームの送信元基幹中継番号と、ノードＮ１が中継先としている基幹中継ノード５０の基幹中継番号が一致するかを確認する。ここでは、両者が一致するので、ノードＮ１は、受信した同期要求応答フレームを転送することを決定する。ルーティング部３８は、ウェイト番号を確認し、受信したフレームを出力するポートを決定する。この場合、ルーティング部３８は、図９（ａ）に示すウェイト番号テーブル３３を参照して、ポートＰ１から受信フレームを出力する。また、ルーティング部３８は、出力したフレームの宛先と出力先のポートを対応付けてＰＳテーブル２８に記録する。従って、ノードＮ１では、基幹中継ノード５０ａへの出力ポートがＰＳテーブル２８に記録される。
【００６９】
（１９）基幹中継ノード５０ａは、ノードＮ１のポートＰ１に接続されているため、手順（１８）の処理により、ノードＮ２が送信元である同期要求応答フレームを受信する。基幹中継ノード５０ａは、手順（１６）と同様にノードＮ２の情報を記憶する。
【００７０】
（２０）ノードＮ１、Ｎ２以外のセンサー中継ノード１０からも、同期要求応答フレームが送信される。ここで、同期要求応答フレームの送信元のセンサー中継ノード１０で行われる動作は、手順（１７）と同様である。また、同期要求応答フレームを中継するセンサー中継ノード１０の動作は、手順（１８）と同様である。同期要求応答フレームにより、基幹中継ノード５０ａ〜５０ｃは、各々がサーバ１との通信を中継する対象のノードを認識する。例えば、図１０のように中継先が選択された場合、基幹中継ノード５０ａは、図１１（ｂ）に示すテーブルを記憶する。個々の基幹中継ノード５０は、管理対象のセンサー中継ノード１０をサーバ１に報告する。サーバ１は、センサー中継ノード１０にフレームを送信する際には、基幹中継ノード５０から通知された情報に基づいて、フレームを送信する基幹中継ノード５０を決定する。
【００７１】
なお、以上で述べた方法は、ウェイト番号や中継先の基幹中継ノード５０を決定する方法の例であり、実装に応じて変更されることがある。例えば、前述の説明では、基幹中継ノード５０ａを起点としたウェイト番号の決定が終わった後に基幹中継ノード５０ｂを起点としたウェイト番号が決定され、その後、基幹中継ノード５０ｃを起点としたウェイト番号が決定されていた。しかし、基幹中継ノード５０ａを起点としたウェイト番号の決定が終わる前に、基幹中継ノード５０ｂや５０ｃを起点としたウェイト番号の決定が開始されても良い。また、ウェイト番号の決定の際に起点とする基幹中継ノード５０は、任意の方法で選択される。
【００７２】
図１３Ａ〜図１３Ｆは、フレームを受信したときのセンサー中継ノード１０の動作の例を説明するフローチャートである。図１３Ａは、中継先の基幹中継ノード５０を決定する際にセンサー中継ノード１０で行われる手順を説明している。センサー中継ノード１０は、フレームを受信すると、フレーム中の送信元基幹中継番号とＫＩＮＤフィールドの値を確認し、受信したフレームが同期要求フレームかを判断する（ステップＳ１〜Ｓ３）。受信フレームが同期要求フレームではない場合については、図１３Ｂ〜図１３Ｆを参照しながら後で説明する。
【００７３】
同期要求フレームを受信すると、ウェイト番号生成部３２は、同期要求フレームの送信元基幹中継番号に対応する基幹中継ノード５０を起点としたときのウェイト番号テーブル３３について、フレームを受信したポートの情報を更新する。すなわち、同期要求フレームを受信したポートの接続先のウェイト番号を、同期要求フレーム中の送信元ウェイト番号にする（ステップＳ４）。また、ステップＳ４で更新した接続先のウェイト番号に対応付けられているタイマーをリスタートする（ステップＳ５）。さらに、ウェイト番号生成部３２は、既に受信したフレームと同一のフレームを受信したかを、ＦＩＤテーブル２７を参照して確認する（ステップＳ６）。すなわち、受信したフレームのＳＲＣ  ＩＤフィールドの値とＦＩＤフィールドの値の組み合わせが、ＦＩＤテーブル２７に登録されているかを判断する。ＳＲＣ  ＩＤフィールドの値とＦＩＤフィールドの値の組み合わせが、ＦＩＤテーブル２７に登録されている場合、ウェイト番号生成部３２は、既に受信したフレームを受信したと判断する（ステップＳ６でＹｅｓ）。この場合、ウェイト番号生成部３２は、受信フレームを削除する（ステップＳ７）。
【００７４】
ＳＲＣ  ＩＤフィールドの値とＦＩＤフィールドの値の組み合わせが、ＦＩＤテーブル２７に登録されていない場合、ウェイト番号生成部３２は、フレームを受信したノード（自ノード）のウェイト番号についての処理を行う（ステップＳ６でＮｏ）。なお、ステップＳ８〜Ｓ１３の処理では、受信フレームの送信元基幹中継番号に対応する基幹中継ノード５０を起点としたウェイト番号についての処理が行われる。
【００７５】
ウェイト番号生成部３２は、受信したフレーム中の送信元ウェイト番号が初期値（０ｘＦＦ）であるかを確認する（ステップＳ８）。受信したフレーム中の送信元ウェイト番号が初期値である場合、ウェイト番号生成部３２は、フレームを受信したノードのウェイト番号を初期値に更新する（ステップＳ８でＹｅｓ、ステップＳ９）。一方、受信したフレーム中の送信元ウェイト番号が初期値でない場合、ウェイト番号生成部３２は、フレームを受信したノードのウェイト番号は、受信フレームのウェイト番号を１つインクリメントした値よりも大きいかを確認する（ステップＳ１０）。フレームを受信したノードのウェイト番号が受信フレームのウェイト番号を１つインクリメントした値よりも大きい場合、受信フレームにより最短ホップ数が更新されることを意味する（ステップＳ１０でＹｅｓ）。そこで、ウェイト番号生成部３２は、自ノードのウェイト番号を受信フレームのウェイト番号を１つインクリメントした値に更新し、さらに、マスターポートをフレームの受信ポートに更新する（ステップＳ１１、Ｓ１２）。一方、フレームを受信したノードのウェイト番号が受信フレームのウェイト番号を１つインクリメントした値以下の場合、受信フレームを用いても最短ホップ数が更新されない（ステップＳ１０でＮｏ）。そこで、ステップＳ１０でＮｏと判断されると、自ノードのウェイト番号は更新されない。
【００７６】
その後、ウェイト番号生成部３２は、同期要求フレームのウェイト番号を自ノードのウェイト番号に差し替え、ＳＲＣ  ＩＤを自ノードのアドレスに変更した上で、全ポートから送信する（ステップＳ１３）。また、ウェイト番号を用いてサーバ１への中継先の基幹中継ノード５０を決定すると、決定した基幹中継ノード５０に同期要求応答フレームを送信する（ステップＳ１４）。
【００７７】
図１４は、中継先の基幹中継ノード５０を選択する際の選択部３５の動作の例を説明するフローチャートである。選択部３５は、ネットワーク中の全ての基幹中継ノード５０を起点としたウェイト番号が決定されると、選択部３５は、最小のウェイト番号を示す変数ｍに０ｘＦＦを設定する（ステップＳ８１）。また、選択部３５は、中継先に選択される基幹中継ノード５０に割り振られた基幹中継番号を特定するための変数ｎを０に設定する（ステップＳ８２）。次に、選択部３５は、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍより小さいかを判定する（ステップＳ８３）。基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍより小さい場合、選択部３５は、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号をｍの値に設定する（ステップＳ８４）。次に、選択部３５は、ｎの値を１つインクリメントする（ステップＳ８５）。一方、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍ以上である場合（ステップＳ８３でＮｏ）、ステップＳ８４とＳ８５の処理は行われない。その後、選択部３５は、ｎの値を基幹中継ノード５０の総数から１を引いた数と比較し、両者が一致するまでステップＳ８３〜Ｓ８６の処理を繰り返す。両者が一致すると、選択部３５は、ｎに設定されている値と同じ基幹中継番号が割り振られている基幹中継ノード５０を中継先に選択する。
【００７８】
〔中継先が決定された後のフレームの送受信〕
中継先が決定されると、センサー中継ノード１０は、隣接するセンサー中継ノード１０に向けて定期的にヘルスフレームを送信する。ヘルスフレームは、送信元のセンサー中継ノード１０が正常に動作していることを、隣接ノードに通知するために使用される。また、ウェイト番号に変動があった場合、ヘルスフレームにより変更後のウェイト番号が通知される。
【００７９】
ヘルスフレームの例を図７（ｃ）に示す。ヘルスフレームでは、ＤＳＴ  ＩＤフィールドに、送信元のセンサー中継ノード１０に隣接する全てのセンサー中継ノード１０を表すアドレスが設定される。また、送信元基幹中継番号と送信元基幹中継番号に対応する基幹中継ノード５０を起点とするウェイト番号も、ヘルスフレームにより通知される。図７（ｃ）では送信元基幹中継番号とウェイト番号が１組含まれているので、センサー中継ノード１０は複数のヘルスフレームを用いることにより、各基幹中継ノード５０からのウェイト番号を取得できる。ここで、ヘルスフレーム中の送信元基幹中継番号は、送信元のセンサー中継ノード１０により任意の基準で選択された基幹中継ノード５０とすることができる。例えば、センサー中継ノード１０は、中継先に決定した基幹中継ノード５０を示す送信元基幹中継番号と、中継先の基幹中継ノード５０を起点としたウェイト番号をヘルスフレームにより通知することができる。また、ヘルスフレームの場合、ＫＩＮＤフィールドの値はＫＩＮＤ３であるものとする。
【００８０】
図１３Ａと図１３Ｂを参照しながら、ヘルスフレームを受信した場合のセンサー中継ノード１０の動作の例を説明する。受信フレームが同期要求フレームではない場合、図１３ＡのステップＳ３でＮｏと判定され、図１３ＢのステップＳ２１において、受信フレームがヘルスフレームであるか判定される（ステップＳ２１）。ここでは、受信フレームがヘルスフレームであったとする（ステップＳ２１でＹｅｓ）。すると、ウェイト番号生成部３２により、ステップＳ２２、Ｓ２３の処理が行われる。この処理は図１３Ａを参照しながら説明したステップＳ４、Ｓ５と同様の処理である。
【００８１】
ウェイト番号生成部３２は、受信したヘルスフレーム中の送信元ウェイト番号が初期値（０ｘＦＦ）であるかを確認する（ステップＳ２４）。ここでは、送信元ウェイト番号が初期値ではない場合（ステップＳ２４でＮｏ）について説明し、送信元ウェイト番号が初期値である場合については後述する。送信元ウェイト番号が初期値ではない場合、ウェイト番号生成部３２は、フレームを受信したノード（自ノード）のウェイト番号についての処理を行う。なお、ステップＳ２５〜Ｓ２９では、受信フレームの送信元基幹中継番号に対応する基幹中継ノード５０を起点としたウェイト番号についての処理が行われる。
【００８２】
ウェイト番号生成部３２は、自ノードのウェイト番号は、受信フレームのウェイト番号を１つインクリメントした値よりも大きいかを確認する（ステップＳ２５）。フレームを受信したノードのウェイト番号は、受信フレームのウェイト番号を１つインクリメントした値以下の場合、ステップＳ１に戻る（ステップＳ２５でＮｏ）。
【００８３】
フレームを受信したノードのウェイト番号が受信フレームのウェイト番号を１つインクリメントした値よりも大きい場合は、自ノードが中継先を決定した後に、より短い経路が発見されたことを示す。このため、ヘルスフレームによりウェイト番号が変更される（ステップＳ２６、Ｓ２７）。ステップＳ２６、Ｓ２７は、図１３Ａを参照しながら説明したステップＳ１１、Ｓ１２と同様である。その後、ウェイト番号生成部３２は、ヘルスフレームを生成して全ポートから出力する（ステップＳ２８）。また、自ノードのウェイト番号が更新されると、ウェイト番号生成部３２は、ウェイト番号を用いてサーバ１への中継先の基幹中継ノード５０を決定する。中継先の基幹中継ノード５０が変更されると、ウェイト番号生成部３２は、基幹中継ノード５０に状態通知フレームを送信する（ステップＳ２９）。
【００８４】
次に、センサー中継ノード１０とサーバ１の間で行われるデータフレームの送受信について説明する。データフレームの例を図７（ｄ）に示す。データフレームでは、ＤＳＴ  ＩＤフィールドに、宛先のサーバ１もしくはセンサー中継ノード１０を表すアドレスが設定される。また、送信元基幹中継番号と送信元基幹中継番号に対応する基幹中継ノード５０を起点としたときの送信先のウェイト番号も、データフレームに含まれる。センサー中継ノード１０からサーバ１にデータフレームが送信される場合、送信先ウェイト番号には中継先とする基幹中継ノード５０のウェイト番号、すなわち、０が設定される。一方、サーバ１から特定のセンサー中継ノード１０にデータフレームが送信される場合、送信先ウェイト番号は、基幹中継ノード５０によって設定される。基幹中継ノード５０は、サーバ１から受信したデータフレームの宛先をキーとして、図１１に示したようなウェイト番号のテーブルを検索し、管理対象のセンサー中継ノード１０のウェイト番号を取得する。基幹中継ノード５０は、取得したウェイト番号をデータフレームに記録し、処理後のデータフレームをセンサー中継ノード１０に転送する。
【００８５】
データフレームがサーバ１に向けて送信される場合、送信元のセンサー中継ノード１０は、自ノードのウェイト番号よりも小さいウェイト番号が割り当てられているノードに接続されたポートから、データフレームを送信する。また、データフレームを中継するセンサー中継ノード１０も、自ノードのウェイト番号よりも小さいウェイト番号が割り当てられているノードに接続されたポートから、データフレームを送信する。
【００８６】
一方、データフレームがサーバ１から特定のセンサー中継ノード１０に向けて送信される場合、基幹中継ノード５０は、隣接するセンサー中継ノード１０に、データフレームを送信する。さらに、データフレームを中継するセンサー中継ノード１０は、自ノードのウェイト番号よりも大きいウェイト番号が割り当てられているノードに接続されたポートから、データフレームを送信する。
【００８７】
さらに、データフレームがサーバ１に向けて送信される場合と、特定のセンサー中継ノード１０に向けて送信される場合のいずれも、データフレームを中継するノードのウェイト番号生成部３２は、ＦＩＤテーブル２７を用いてループの発生をチェックしている。
【００８８】
図１３Ａ、図１３Ｂ、図１３Ｃ、図１３Ｅ、および、図１３Ｆを参照しながら、データフレームが転送される場合の処理の例を説明する。データフレームを受信したセンサー中継ノード１０においても、図１３ＡのステップＳ１〜Ｓ３の処理が行われる。受信されたフレームがデータフレームである場合、ステップＳ３において、Ｎｏと判定され、図１３ＢのステップＳ２１の判断が行われる。受信フレームがヘルスフレームではない場合、ステップＳ２１でもＮｏと判定され、図１３ＣのステップＳ３１において、受信フレームが削除通知であるかの判断が行われる。削除通知は、制御フレームの一種であり、削除通知については後述する。データフレームが受信された場合、ステップＳ３１でＮｏと判定されるので、ステップＳ３８において、データフレームの宛先が自ノードであるかが判定される。データフレームの宛先が自ノードである場合、データフレーム中のデータはＣＰＵインタフェース２４を介してＣＰＵ４０に出力され、処理が行われる（ステップＳ３８でＹｅｓ）。一方、データフレームの宛先が自ノードではない場合（ステップＳ３８でＮｏ）、図１３Ｅと図１３Ｆに示すルーティング処理が行われる。
【００８９】
ルーティング部３８は、データフレームに送信元基幹中継番号が記録されているかを確認する（ステップＳ５１）。データフレームに送信元基幹中継番号が含まれていない場合、ルーティング部３８は、データフレームを受信ポートに返送する（ステップＳ５２）。次に、ルーティング部３８は、データフレームから、ＳＲＣ  ＩＤとＦＩＤを取得し、取得したＳＲＣ  ＩＤとＦＩＤをキーとして、ＦＩＤテーブル２７を検索する（ステップＳ５３）。ＦＩＤテーブル２７にヒットするエントリが無い場合、ルーティング部３８は、データフレームの宛先アドレスをキーとしてＰＳテーブル２８を検索する（ステップＳ５３でＮｏ、ステップＳ５４）。ＰＳテーブル２８中にヒットするエントリが有る場合、ルーティング部３８は、得られたエントリにデータフレームを送信可能なポートとして記録されているポートからデータフレームを送信することを決定する（ステップＳ５４でＹｅｓ）。そこで、ルーティング部３８は、ＦＩＤテーブル２７に、データフレームのＳＲＣ  ＩＤとＦＩＤを含むエントリを生成する（ステップＳ６７）。また、ルーティング部３８は、生成したエントリに、データフレームを送信するポートの番号を「送信中ポート」として記録する。その後、ルーティング部３８は、送信ポートを送信フレーム制御部２２に通知し、データフレームを送信フレーム制御部２２から送信させる（ステップＳ６８）。
【００９０】
ＰＳテーブル２８中にヒットするエントリが無い場合、ルーティング部３８は、データフレームを受信したポート以外にリンク断とはなっていない有線アドホックネットワークポート１１があるかを、送信フレーム制御部２２に問い合わせる（ステップＳ５４でＮｏ）。リンク断でないポートがない場合、ルーティング部３８は、データフレームのルーティングができないと判断し、データフレームを受信ポートから出力する（ステップＳ５５でＮｏ、ステップＳ５６）。リンク断でないポートがある場合、ルーティング部３８は、受信フレームに設定されている送信先ウェイト番号が初期値（０ｘＦＦ）であるか判定する（ステップＳ５５でＹｅｓ、ステップＳ６０）。
【００９１】
データフレームの送信先ウェイト番号が初期値である場合、ルーティング部３８は、ウェイト番号を用いたルーティング処理は実行しない（ステップＳ６０でＹｅｓ）。ルーティング部３８は、送信フレーム制御部２２から通知されたポートが複数ある場合には、若番（若しくは老番等と条件を統一させる）のポートを選択する（ステップＳ６５）。次に、ルーティング部３８は、受信フレームの宛先アドレスに対応するエントリをＰＳテーブル２８に生成し、ステップＳ６５で選択したポートを「送信中ポート」に設定する（ステップＳ６６）。
【００９２】
一方、ステップＳ５３で、ＦＩＤテーブル２７にヒットするエントリが見つかった場合、ルーティング部３８は、以前に一度受信して他のセンサー中継ノード１０に送信したフレームが、再び戻ってきたと判断する（ステップＳ５３でＹｅｓ）。この場合、ルーティング部３８は、ＦＩＤテーブル２７で「送信中ポート」とされているポートの状態を「ループポート」に変更する（ステップＳ５７）。ここで、あるポートが「ループポート」に設定されることは、そのポートからは宛先アドレスにフレームを送信できないことを意味するものとする。続いて、ルーティング部３８は、データフレームの宛先アドレスをキーとしてＰＳテーブル２８を検索し、得られたエントリにおいて「送信中ポート」に設定されているポートに対して「ループ状態」を設定する（ステップＳ５８）。次に、ルーティング部３８は、ＰＳテーブル２８上の該当するエントリを検索することにより、「未使用状態」に設定されているポートがあるかを判定する（ステップＳ５９）。
【００９３】
未使用ポートがない場合（ステップＳ５９でＮｏ）ルーティング部３８は、ＦＩＤテーブル２７から、受信フレームの送信元アドレスに対応付けられたエントリを抽出し、そのエントリのＲｘＰｏｒｔ（受信ポート）を取得する（ステップＳ７２）。そして、ルーティング部３８は、抽出された最初の受信ポートに、受信フレームを戻して送信する（ステップＳ７３）。
【００９４】
一方、未使用ポートがある場合（ステップＳ５９でＹｅｓ）、ルーティング部３８は、その未使用ポートを選択して送信処理を行うために、ステップＳ６０の処理を行う。受信フレームのウェイト番号が初期値である場合（ステップＳ６０でＹｅｓ）、ステップＳ６５〜Ｓ６８の処理が行われる。受信フレームのウェイト番号が初期値ではない場合（ステップＳ６０でＮｏ）、ルーティング部３８は、受信フレーム内の送信先ウェイト番号が、自ノードのウェイト番号よりも大きいか否かを判定する（ステップＳ６１）。受信フレーム内の送信先ウェイト番号が、自ノードのウェイト番号よりも大きい場合、ルーティング部３８は、自ノードよりもサーバ１から遠いセンサー中継ノード１０に向けてフレームを中継することを認識する。そこで、ルーティング部３８は、自ノードのウェイト番号よりも大きなウェイト番号が割り当てられているノードに接続されているポートからフレームの送信が可能であるかを確認する（ステップＳ６２）。自ノードのウェイト番号よりも大きなウェイト番号が割り当てられているノードに接続されているポートからフレームを送信できる場合（ステップＳ６２でＹｅｓ）、ステップＳ６５〜Ｓ６８の処理が行われる。一方、自ノードよりも大きなウェイト番号が割り当てられているノードにフレームを送信できない場合（ステップＳ６２でＮｏ）、ルーティング部３８は、ＦＩＤテーブル２７のＬｏｏｐフラグが“ＯＮ”となっているかを判定する（ステップＳ６９）。Ｌｏｏｐフラグが“ＯＮ”である場合、データフレームの宛先となっているセンサー中継ノード１０は、自ノードの接続先には存在しないことが既に記録されている（ステップＳ６９でＹｅｓ）。そこで、ルーティング部３８は、データフレームを受信したポートに返送する（ステップＳ７０）。
【００９５】
一方、Ｌｏｏｐフラグが“ＯＦＦ”である場合、データフレームの宛先となっているセンサー中継ノード１０は、自ノードの接続先には存在しないことがＦＩＤテーブル２７には記録されていない（ステップＳ６９でＮｏ）。そこで、ルーティング部３８は、ＦＩＤテーブル２７のＬｏｏｐフラグを“ＯＮ”にする（ステップＳ７１）。その後、ルーティング部３８は、ＦＩＤテーブル２７を受信フレームの送信元アドレス（ＳＲＣ  ＩＤ）をキーとしてエントリを検索し、ヒットしたエントリのＲｘＰｏｒｔ（受信ポート）を特定する（ステップＳ７２）。ルーティング部３８は、抽出された最初の受信ポートに、受信フレームを戻して送信する（ステップＳ７３）。
【００９６】
次に、ステップＳ６１の判定がＮＯの場合には、ルーティング部３８は、受信フレーム内の送信先ウェイト番号が自ノードのウェイト番号よりも小さいかを判定する（ステップＳ６３）。受信フレーム内の送信先ウェイト番号が、自ノードのウェイト番号よりも小さい場合、ルーティング部３８は、自ノードよりもサーバ１に近いセンサー中継ノード１０に向けてフレームを中継することを認識する（ステップＳ６３でＹｅｓ）。受信フレーム内の送信先ウェイト番号が自ノードのウェイト番号よりも小さい場合、そこで、ルーティング部３８は、自ノードのウェイト番号よりも小さなウェイト番号が割り当てられているノードに接続されているポートからフレームの送信が可能であるかを確認する（ステップＳ６４）。自ノードのウェイト番号よりも小さなウェイト番号が割り当てられているノードに接続されているポートからフレームを送信できる場合（ステップＳ６４でＹｅｓ）、ステップＳ６５〜Ｓ６８の処理が行われる。
【００９７】
一方、自ノードのウェイト番号よりも小さなウェイト番号が割り当てられているノードに接続されているポートからフレームを送信できない場合（ステップＳ６４でＮｏ）、ステップＳ６９〜Ｓ７３を参照しながら説明した処理が行われる。また、ステップＳ６３で、受信フレーム内の送信先ウェイト番号が自ノードのウェイト番号よりも小さくないと判定された場合、ステップＳ６９〜Ｓ７３を参照しながら説明した処理が行われる。
【００９８】
以上説明した中継先の選択方法とルーティング方法を用いることにより、センサー中継ノード１０は、最短ホップ数によりフレームをサーバ１との間で送受信できる。すなわち、前述のとおり、ウェイト番号を用いて中継先の基幹中継ノード５０が決定され、個々のセンサー中継ノード１０から最短のホップ数で到達できる基幹中継ノード５０が中継先に選択される。さらに、中継先に選択された基幹中継ノード５０までの経路も、最短ホップ数の経路とされる。このときの経路の選択は、受信フレーム内の送信先ウェイト番号、自ノードのウェイト番号、および、ポート毎の接続先ノードのウェイト番号に基づいて行われる。さらに、本実施形態にかかる方法では、センサー中継ノード１０が最短ホップ数で到達できる基幹中継ノード５０を中継先とするので、特定の基幹中継ノード５０への処理の集中を防ぐことができる。
【００９９】
＜第２の実施形態＞
第２の実施形態では、基幹中継ノード５０とサーバ１の間で障害が発生した場合の復旧方法について説明する。図１５は、図１０に示すように中継先が決定されていたときに、基幹中継ノード５０ｂとサーバ１の間の回線で障害が発生した場合の例を示す。以下、図１５に示すように障害が発生した場合に行われる処理を例として説明する。なお、第２の実施形態においても、中継先が決定された後のフレームのルーティングは、第１の実施形態と同様に行われる。
【０１００】
（２１）基幹中継ノード５０ｂとサーバ１の間の回線に障害が発生すると、基幹中継ノード５０は、障害の発生を検出する。基幹中継ノード５０ｂは、例えば、サーバ１との間で定期的に信号を送受信しており、一定時間を越えて信号がサーバ１から受信できなかったときに、サーバ１と基幹中継ノード５０ｂの間に障害が発生したと判定することができる。
【０１０１】
（２２）基幹中継ノード５０ｂは、隣接するセンサー中継ノード１０がノードＮ４であることを特定する。この処理は、例えば、前述の手順（１９）で同期要求応答フレームにより、センサー中継ノード１０ｂまでのウェイト番号が１であることを通知したセンサー中継ノード１０を基幹中継ノード５０ｂが特定することにより行われる。基幹中継ノード５０ｂは、ノードＮ４に対して、基幹中継ノード５０ｂを起点としたウェイト番号の初期値（０ｘＦＦ）への変更を要求する。このとき、基幹中継ノード５０ｂは、基幹中継ノード５０ｂの基幹中継番号＝１を合せてノードＮ４に通知するものとする。
【０１０２】
（２３）基幹中継ノード５０ｂとサーバ１の間での障害が通知される前は、ノードＮ４のウェイト番号は、
基幹中継ノード５０ａを起点としたウェイト番号：４
基幹中継ノード５０ｂを起点としたウェイト番号：１
基幹中継ノード５０ｃを起点としたウェイト番号：４
である。
【０１０３】
ノードＮ４が基幹中継ノード５０ｂからウェイト番号の変更の要求を受信すると、ノードＮ４のウェイト番号生成部３２は、要求に応じてウェイト番号を初期化する。この処理により、ノードＮ４のウェイト番号は、
基幹中継ノード５０ａを起点としたウェイト番号：４
基幹中継ノード５０ｂを起点としたウェイト番号：０ｘＦＦ
基幹中継ノード５０ｃを起点としたウェイト番号：４
となる。
【０１０４】
（２４）ノードＮ４の選択部３５は、ウェイト番号を比較して、中継先の基幹中継ノード５０を決定する。中継先の基幹中継ノード５０を決定する方法は、図１４を参照しながら説明した方法と同様である。この処理により、選択部３５は、基幹中継ノード５０ａを中継先に選択する。
【０１０５】
（２５）ノードＮ４の選択部３５は、基幹中継ノード５０ａに向けて状態通知フレームを送信する。状態通知フレームの例を図７（ｅ）に示す。状態通知フレームではＫＩＮＤフィールドの値がＫＩＮＤ５に設定されるものとする。また、状態通知フレームの宛先は、新たに中継先とされる基幹中継ノード５０であり、送信先ウェイト番号は０に設定される。送信元ウェイト番号は、状態通知を送信するセンサー中継ノード１０のウェイト番号である。この例では、送信元ウェイト番号は４、宛先アドレスは、基幹中継ノード５０ａのアドレスに設定される。さらに、状態通知フレームには、送信元基幹中継番号が含まれている。選択部３５は、送信元基幹中継番号の値を０に設定する。
【０１０６】
選択部３５は、新たに中継先とした基幹中継ノード５０ａに対応付けられたウェイト番号テーブル３３を確認することにより、ノードＮ４よりも基幹中継ノード５０ａに近いセンサー中継ノード１０がノードＮ３であることを特定する。そこで、選択部３５は、ノードＮ３に接続されているポートを介して送信することを送信フレーム制御部２２に要求し、中継先を基幹中継ノード５０ａに変更したことを通知しようとする。
【０１０７】
（２６）ノードＮ３のルーティング部３８は、受信したフレームのＫＩＮＤフィールドがＫＩＮＤ５であることを認識すると、状態通知フレームを受信したと認識する。状態通知フレームの場合は、中継先の変更を通知するフレームであるため、自ノードの中継先とは異なる基幹中継ノード５０が宛先とされている可能性がある。そこで、ルーティング部３８は、ノードＮ３のＦＩＤテーブル２７やＰＳテーブル２８を参照せずに、状態通知フレーム中の送信元基幹中継番号を取得し、得られた送信元基幹中継番号に対応付けられたウェイト番号テーブル３３に基づいて転送先を決定する。ここでは、送信元基幹中継番号＝０の状態通知フレームを受信しているので、ルーティング部３８は、基幹中継ノード５０ａのウェイト番号テーブル３３を確認することにより、ノードＮ３よりも小さいウェイト番号が割り当てられているポートを認識する。ルーティング部３８は、認識したポートから状態通知フレームを出力することにより、状態通知フレームをノードＮ２に転送する。
【０１０８】
ノードＮ２でも同様にルーティング部３８が転送処理を行い、ノードＮ１に状態通知フレームを転送する。ノードＮ１は、状態通知フレームを基幹中継ノード５０ａに転送する。基幹中継ノード５０ａは、受信した状態通知フレームに基づき、管理対象のノードにノードＮ４を加える。さらに、ノードＮ４が新たに基幹中継ノード５０ａの管理対象となったことをサーバ１に通知することにより、以後はノードＮ４宛てのフレームを基幹中継ノード５０ａが中継することをサーバ１に認識させる。
【０１０９】
（２７）ノードＮ４の初期化要求部３７は、ヘルスフレーム（図７（ｃ））を隣接するノードＮ３とＮ５に送信することにより、ウェイト番号の変更を通知する。ここで、初期化要求部３７は、ヘルスフレームの送信元基幹中継番号を１、送信元ウェイト番号を０ｘＦＦに設定する。
【０１１０】
（２８）ノードＮ４からのヘルスフレームを受信する前は、ノードＮ３のウェイト番号は、
基幹中継ノード５０ａを起点としたウェイト番号：３
基幹中継ノード５０ｂを起点としたウェイト番号：２
基幹中継ノード５０ｃを起点としたウェイト番号：５
となっている。
【０１１１】
ノードＮ３は、受信したヘルスフレームを解析することにより、基幹中継ノード５０ｂを起点としたときのノードＮ４のウェイト番号が０ｘＦＦに変更されたことを認識する。さらに、ノードＮ３のウェイト番号生成部３２は、基幹中継ノード５０ｂを起点としたときのウェイト番号を０ｘＦＦ（初期値）に変更する。すなわち、ウェイト番号を、
基幹中継ノード５０ａを起点としたウェイト番号：３
基幹中継ノード５０ｂを起点としたウェイト番号：０ｘＦＦ
基幹中継ノード５０ｃを起点としたウェイト番号：５
に変更する。
【０１１２】
（２９）ノードＮ３の選択部３５は、変更後のウェイト番号を用いて、中継先の基幹中継ノード５０を決定する。中継先の基幹中継ノード５０を決定する方法や、中継先の変更を通知する方法は、手順（２４）〜（２６）と同様である。さらに、ノードＮ３は、隣接するノードＮ２とＮ１０にヘルスフレームを送信し、基幹中継ノード５０ｂを起点とするウェイト番号が変更されたことを通知する。
【０１１３】
（３０）ノードＮ５でも、同様に基幹中継ノード５０ｂを起点とするウェイト番号の変更と状態通知フレームの送信が行われる。これらの処理は、手順（２４）〜（２７）で説明した動作と同様である。また、その他のノードにおいてもウェイト番号の変更が行われ、ウェイト番号の変更に伴い中継先の基幹中継ノード５０が変更される場合、手順（２４）〜（２７）と同様に処理される。一方、ノードＮ２などのように、ウェイト番号が変更されても中継先の基幹中継ノード５０が変更されない場合、状態通知フレームは生成されない。しかし、中継先の基幹中継ノード５０が変更されない場合でも、ウェイト番号を変更したことは、隣接するノードにヘルスフレームにより通知される。
【０１１４】
図１６は、手順（２１）〜（３０）の処理が行われた後の、各センサー中継ノード１０の中継先を示す。図１６に示すように、ノードＮ３、Ｎ４、Ｎ１０、Ｎ１１、Ｎ１７、Ｎ１８は、中継先を基幹中継ノード５０ｂから基幹中継ノード５０ａに変更する。また、ノードＮ５、Ｎ１２、Ｎ１９は、中継先を基幹中継ノード５０ｂから基幹中継ノード５０ｃに変更する。
【０１１５】
第２の実施形態において、ヘルスフレームを受信したセンサー中継ノード１０の動作の例を、図１３Ａ、図１３Ｂ、図１３Ｄを参照しながら説明する。フレームを受信すると、センサー中継ノード１０では図１３ＡのステップＳ１〜Ｓ３の処理が行われ、ステップＳ３においてＮｏと判定される。なお、ステップＳ１〜３の処理は、既に説明したとおりである。すると、図１３ＢのステップＳ２１の処理に進み、ヘルスフレームを受信したかの判定が行われる。ここでは、ヘルスフレームが受信されているので、ステップＳ２２において、ヘルスフレームを受信したポートの接続先のウェイト番号が、ヘルスフレーム中の送信元ウェイト番号に基づいて変更される。さらに、ステップＳ２３、Ｓ２４の処理が行われる。ステップＳ２３、２４の処理は、既に説明したとおりである。
【０１１６】
ステップＳ２４において、受信したヘルスフレームの送信元ウェイト番号が初期値であると判定されると、図１３Ｄの処理が行われる。まず、ウェイト番号生成部３２は、中継先に指定している基幹中継ノード５０を起点とした自ノードのウェイト番号を初期化する（ステップＳ４１）。さらに、ウェイト番号生成部３２は、中継先に指定している基幹中継ノード５０に関連付けられたウェイト番号テーブル３３において、マスターポートの値を初期化する（ステップＳ４２）。その後、センサー中継ノード１０は、全てのポートからヘルスフレームを送信する（ステップＳ４３）。さらに、センサー中継ノード１０は、変更後のウェイト番号に基づいて中継先とする基幹中継ノード５０を決定し、基幹中継ノード５０を変更した場合、新たに中継先とした基幹中継ノード５０に状態通知フレームを送信する（ステップＳ４４）。
【０１１７】
このように、基幹中継ノード５０とサーバ１の間の回線に障害が発生すると、基幹中継ノード５０からの通知を契機として、個々のセンサー中継ノード１０においてウェイト番号が変更される。さらに、個々のセンサー中継ノード１０は、変更後のウェイト番号に基づいて中継先の基幹中継ノード５０を決定し、中継先を変更した場合は新たに中継先とした基幹中継ノード５０に中継先に指定したことを通知する。このため、障害が発生しても、自律的に障害から復旧し、いずれのセンサー中継ノード１０も最短ホップ数で到達できる基幹中継ノード５０を中継先として、最短ホップ数でのルーティングを行うことができる。
【０１１８】
＜第３の実施形態＞
第３の実施形態では、基幹中継ノード５０に障害が発生した場合の動作について説明する。以下、図１０に示すように中継先が選択されているときに、基幹中継ノード５０ｂに障害が発生した場合の処理を例として説明する。なお、第３の実施形態においても、中継先が決定された後のフレームのルーティングは、第１の実施形態と同様に行われる。
【０１１９】
（４１）基幹中継ノード５０ｂで故障が発生すると、基幹中継ノード５０ｂに隣接しているノードＮ４は、基幹中継ノード５０ｂとの間でヘルスフレームを送受信できなくなる。ヘルスフレームが一定時間以上、基幹中継ノード５０ｂから受信できない場合、ノードＮ４の障害検出部３６は、基幹中継ノード５０ｂが故障したと判断する。
【０１２０】
（４２）障害検出部３６は、基幹中継ノード５０ｂが故障したことをウェイト番号生成部３２と初期化要求部３７に通知する。ウェイト番号生成部３２は、基幹中継ノード５０ｂを起点としたウェイト番号を初期化する。また、初期化要求部３７は、隣接するセンサー中継ノード１０に対して、基幹中継ノード５０ｂを起点としたウェイト番号の初期化を要求する。以降の処理は、第２の実施形態の手順（２４）以降の処理と同様である。
【０１２１】
図１７に、基幹中継ノード５０の故障を発見したときに中継先の基幹中継ノード５０を変更した場合の例を示す。このように、基幹中継ノード５０に隣接したセンサー中継ノード１０が、ヘルスフレームを用いて基幹中継ノード５０の動作を監視することにより、基幹中継ノード５０の故障を発見したときにも、自律的に経路や中継先の変更が行われる。
【０１２２】
＜第４の実施形態＞
次に、センサー中継ノード１０に障害が発生した場合の処理について説明する。以下、図１０に示すように中継先が選択されているときに、ノードＮ５のセンサー中継ノード１０に障害が発生した場合の処理を例として説明する。
【０１２３】
（５１）ノードＮ５で故障が発生すると、ノードＮ５に隣接しているノードＮ４、Ｎ１２、Ｎ６は、ノードＮ５との間でヘルスフレームを送受信できなくなる。ヘルスフレームが一定時間以上、ノードＮ５から受信できない場合、ノードＮ４、Ｎ１２、Ｎ６の障害検出部３６は、隣接するセンサー中継ノード１０が故障したと判断する。
【０１２４】
（５２）隣接するセンサー中継ノード１０が故障したと判断した場合、障害検出部３６はヘルスフレームが受信できないポートを特定する。例えば、図１８（ａ）に示すように、ノードＮ４のポートＰ３にノードＮ５が接続されているとすると、ノードＮ４の障害検出部３６は、ウェイト番号テーブル３３からポートＰ３に接続されているノードのウェイト番号を取得し、ノードＮ４のウェイト番号と比較する。さらに、障害検出部３６は、比較結果のうち、故障したノードよりも大きなウェイト番号が設定されている場合、ウェイト番号を初期化する。すなわち、故障したノードを介して自ノードが通信する可能性がある基幹中継ノード５０を起点とするウェイト番号を初期化する。
【０１２５】
例えば、基幹中継ノード５０ａを起点としたウェイト番号は、ノードＮ４では４であるが、ポートＰ１に接続されているノードでは５である。基幹中継ノード５０ｂを起点としたウェイト番号は、ノードＮ４では１であるが、ポートＰ１に接続されているノードでは２である。さらに、基幹中継ノード５０ｃを起点としたウェイト番号は、ノードＮ４では４であるが、ポートＰ１に接続されているノードでは３である。この場合、ノードＮ４は、基幹中継ノード５０ａ、５０ｂについてはノードＮ５を介さずに通信できるが、基幹中継ノード５０ｃに最短ホップ数でアクセスするためには、ノードＮ５を経由することを示す。しかし、経由するノードとなるノードＮ５が故障しているので、基幹中継ノード５０ｃは中継先として指定することが無いように、障害検出部３６は、基幹中継ノード５０ｃを起点としたウェイト番号を初期化する。ノードＮ４において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３は、図１８（ｂ）に示すように更新される。
【０１２６】
（５３）ノードＮ１２では、基幹中継ノード５０ａ〜５０ｃのいずれの基幹中継ノード５０を起点としたウェイト番号もノードＮ５よりも大きい。このため、ノードＮ１２では、基幹中継ノード５０ａ〜５０ｃのいずれの基幹中継ノード５０を起点としたウェイト番号も初期化される。ノードＮ１２において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３は、図１８（ｃ）に示すように更新される。
【０１２７】
（５４）ノードＮ４の初期化要求部３７は、故障したノードを介したフレームの送信を依頼されることを防ぐために、初期化要求を行う。初期化要求部３７は、障害検出部３６で初期化したウェイト番号の基点と同じ基幹中継ノード５０が起点とされたウェイト番号が、自ノードに設定されていたウェイト番号よりも大きい場合、そのウェイト番号の初期化要求を行う。例えば、ノードＮ４は、基幹中継ノード５０ｃを起点としたウェイト番号を初期化したので、初期化要求部３７は、基幹中継ノード５０ｃに対応するウェイト番号テーブル３３を確認する。初期化要求部３７は、基幹中継ノード５０ｃに対応するウェイト番号テーブル３３において、初期化の前のノードＮ４のウェイト番号よりも大きなウェイト番号が設定されているポートから、基幹中継ノード５０ｃを起点とするウェイト番号の初期化を要求する。図１９（ａ）の例では、ノードＮ４の初期化要求部３７は、ノードＮ３に基幹中継ノード５０ｃを起点としたウェイト番号の初期化を要求する。
【０１２８】
ノードＮ３のウェイト番号生成部３２は、基幹中継ノード５０ｃを起点としたウェイト番号の初期化を要求されると、要求に応じてウェイト番号を初期化する。ノードＮ３において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３は、図１９（ｂ）に示すように更新される。また、基幹中継ノード５０ｃを起点としたウェイト番号の初期化の要求を受けたことと、基幹中継ノード５０ｃを起点としたノードＮ３の初期化前のウェイト番号を、初期化要求部３７に通知しておく。
【０１２９】
（５５）ノードＮ１２も、ノードＮ４と同様に初期化の要求を行う。このため、ノードＮ１２では、基幹中継ノード５０ａ〜５０ｃを起点としたウェイト番号の初期化をノードＮ１９に求める。図１９（ｄ）に、ノードＮ１９において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３の変更例を示す。なお、ノードＮ１９でもノードＮ３と同様の処理が行われる。
【０１３０】
（５６）一方、ノードＮ１２は、ノードＮ１１に対して、基幹中継ノード５０ｂ、５０ｃを起点としたウェイト番号の初期化を求める。図１９（ｃ）に、ノードＮ１１において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３の変更例を示す。なお、ノードＮ１１でもノードＮ３と同様の処理が行われる。
【０１３１】
（５７）ノードＮ３の初期化要求部３７は、基幹中継ノード５０ｃに対応付けられたウェイト番号テーブル３３について、各ポートの出力先のノードのウェイト番号を、自ノードについて初期化の前に決定されていたウェイト番号と比較する。初期化要求部３７は、比較の結果、自ノードの初期化の前のウェイト番号よりも大きなウェイト番号のノードに接続されているポートから、初期化の要求を出力する。ここでは、ノードＮ３は、ノードＮ２、Ｎ１０に対して基幹中継ノード５０ｃを起点としたウェイト番号の初期化を要求する。図２０（ａ）は、ノードＮ１０に対しての初期化の要求が行われた場合の様子を示す。また、図２０（ｂ）に、ノードＮ１０において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３の変更例を示す。
【０１３２】
（５８）ノードＮ１１の初期化要求部３７は、ノードＮ３と同様の処理を行った結果、ノードＮ１８に対して、基幹中継ノード５０ａ〜５０ｃを起点としたウェイト番号の初期化を要求する。ノードＮ１９の初期化要求部３７も、ノードＮ１８に対して、基幹中継ノード５０ａ、５０ｂを起点としたウェイト番号の初期化を要求する。また、図２０（ｃ）に、ノードＮ１８において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３の変更例を示す。
【０１３３】
（５９）ノードＮ１７も、ノードＮ１０、Ｎ１８から初期化の要求を受けると、図２１（ａ）に示すようにウェイト番号テーブル３３を変更する。また、図２１（ｂ）に、ノードＮ１７において基幹中継ノード５０ｃを起点とするウェイト番号テーブル３３の変更例を示す。
【０１３４】
（６０）その他のセンサー中継ノード１０においても同様にウェイト番号の変更が行われる。その結果、図２２に示すようにウェイト番号が変更される。図２２において、矢印の左側の値はノードＮ５の障害が発生する前に各センサー中継ノード１０に割り当てられていたウェイト番号であり、矢印の右側の値はノードＮ５に障害が発生したことにより決定されたウェイト番号である。
【０１３５】
（６１）次に、ヘルスフレームを受信したセンサー中継ノード１０は、ヘルスフレームに含まれている送信元ウェイト番号が初期値ではない場合、受信したウェイト番号に基づいて、自ノードのウェイト番号を変更する。ヘルスフレームに含まれている送信元ウェイト番号に基づいてウェイト番号を変更する方法は、図１３ＢのステップＳ２５〜Ｓ２９を参照しながら説明した方法と同様である。例えば、ノードＮ１１から基幹中継ノード５０ａを起点としたウェイト番号が５であると、ノードＮ１２のウェイト番号生成部３２は、基幹中継ノード５０ａを起点としたノードＮ１２のウェイト番号を６に決定する。図２３に、ウェイト番号の変更の例を示す。
【０１３６】
（６２）手順（６１）で変更されたウェイト番号に従って、選択部３５は、中継先の基幹中継ノード５０を決定する。中継先の基幹中継ノード５０の選択方法は、図１４を参照しながら説明した方法と同様である。さらに、中継先を変更した場合に新たな中継先として指定したことを基幹中継ノード５０に通知する方法は、第２の実施形態と同様である。この例では、手順（６１）の処理により、ノードＮ１９は中継先を、基幹中継ノード５０ｂから５０ｃに変更する。
【０１３７】
図２４Ａと図２４Ｂは、隣接するセンサー中継ノード１０が故障した場合のセンサー中継ノード１０の動作の例を説明するフローチャートである。なお、図２４Ａと図２４Ｂに示す処理は一例であり、例えば、ステップＳ９２とＳ９３の組合せ、ステップＳ９４とＳ９５の組合せ、および、ステップＳ９６とＳ９７の組合せの順序は任意に変更できる。障害検出部３６は、ウェイト番号テーブル３３のタイマーがタイムアウトするまでの間にフレームの送受信が無かった場合、タイムアウトしたポートに接続されているノードが故障したと判断する。そこで、障害検出部３６は、処理対象とされた基幹中継ノード５０の数を計数するための変数ｋを０に設定する（ステップＳ９１）。障害検出部３６は、タイムアウトしたタイマーはポートＰ１に対応付けられていたかを確認する（ステップＳ９２）。ポートＰ１に対応付けられたタイマーがタイムアウトした場合、障害検出部３６は、基幹中継番号＝ｋのウェイト番号テーブル３３において、ポートＰ１に接続されているノードのウェイト番号を初期化する（ステップＳ９２でＹｅｓ、ステップＳ９３）。一方、ポートＰ１に対応付けられたタイマーがタイムアウトしていない場合、ポートＰ１に接続されているノードのウェイト番号は更新されない。
【０１３８】
次に、障害検出部３６は、タイムアウトしたタイマーはポートＰ２に対応付けられていたかを確認する（ステップＳ９４）。ポートＰ２に対応するタイマーがタイムアウトした場合、障害検出部３６は、基幹中継番号＝ｋのウェイト番号テーブル３３において、ポートＰ２に接続されているノードのウェイト番号を初期化する（ステップＳ９４でＹｅｓ、ステップＳ９５）。さらに、障害検出部３６は、タイムアウトしたタイマーはポートＰ３に対応付けられていたかを確認する（ステップＳ９６）。ポートＰ３に対応付けられたタイマーがタイムアウトした場合、障害検出部３６は、基幹中継番号＝ｋのウェイト番号テーブル３３において、ポートＰ３に接続されているノードのウェイト番号を初期化する（ステップＳ９６でＹｅｓ、ステップＳ９７）。
【０１３９】
次に、障害検出部３６は、マスターポートに設定されていたポートでウェイト番号が初期化されているかを確認する（ステップＳ９８）。マスターポートでウェイト番号が初期化されていることは、最短ホップ数が変更されることを意味する。そこで、マスターポートのウェイト番号が初期化されている場合、基幹中継番号＝ｋの基幹中継ノード５０を起点とした自ノードのウェイト番号を初期化し、マスターポートの設定も初期化する（ステップＳ９９、Ｓ１００）。その後、ｋの値を１つインクリメントして、基幹中継ノード５０の総数から１つ引いた値とｋの値を比較する（ステップＳ１０１、Ｓ１０２）。基幹中継ノード５０の総数から１つ引いた値とｋの値が一致するまでステップＳ９１〜Ｓ１０２の処理が繰り返される。基幹中継ノード５０の総数から１つ引いた値とｋの値が一致すると、センサー中継ノード１０は、ウェイト番号を含むヘルスフレームを、隣接するセンサー中継ノード１０に送信する（ステップＳ１０３）。ヘルスフレームを送受信することにより、ウェイト番号の初期化やウェイト番号の再決定が終わると、センサー中継ノード１０は、得られたウェイト番号を用いて中継先の基幹中継ノード５０を再決定する（ステップＳ１０４）。さらに、センサー中継ノード１０は、変更後の基幹中継ノード５０に向けて状態通知フレームを送信する（ステップＳ１０５）。基幹中継ノード５０は、状態通知フレームを受信することにより、センサー中継ノード１０において行われた基幹中継ノード５０の変更を認識する。
【０１４０】
このように、本実施形態によると、センサー中継ノード１０に故障が発生した場合でも、正常に動作しているいずれのセンサー中継ノード１０も最短ホップ数で到達できる基幹中継ノード５０を中継先とし、最短ホップ数でのルーティングを行うことができる。
【０１４１】
＜第５の実施形態＞
次に、センサー中継ノード１０に障害が発生した場合に、基幹中継ノード５０からの要求によってウェイト番号を設定する方法について説明する。
【０１４２】
図２５は、基幹中継ノード５０が記憶するテーブルの例を示す図である。本実施形態では、基幹中継ノード５０同士が制御情報を送受信することにより、全ての基幹中継ノード５０が共通のテーブルを記憶する。このため、基幹中継ノード５０は、管理対象ではないセンサー中継ノード１０についても、そのセンサー中継ノード１０を管理する基幹中継ノード５０を認識している。例えば、図２５では、基幹中継ノード５０ａ（基幹中継番号＝０）は、ノードＮ４が基幹中継ノード５０ｂ（基幹中継番号＝１）に管理されていることを認識している。また、あるセンサー中継ノード１０で故障が発生した場合、故障が発生したことを通知する情報を受信した基幹中継ノード５０は、他の基幹中継ノード５０に故障の発生を、故障したセンサー中継ノード１０のＩＤと共に通知する。センサー中継ノード１０での通知を認識すると、各基幹中継ノード５０は、ウェイト番号の再決定を要求する。各センサー中継ノード１０は、再決定されたウェイト番号に応じて中継先の基幹中継ノード５０を決定する。
【０１４３】
以下、具体例を挙げて、本実施形態で行われる動作を説明する。ここでも、図１０に示すように中継先が選択されているときに、ノードＮ５のセンサー中継ノード１０に障害が発生した場合の処理を例とする。
【０１４４】
（７１）ノードＮ５の障害が発生したことが検出は、第４の実施形態の手順（５１）と同様に行われる。従って、ノードＮ４、Ｎ１２、Ｎ６がノードＮ５での障害の発生を検出する。
【０１４５】
（７２）障害の発生を検出したセンサー中継ノード１０は、そのセンサー中継ノード１０が中継先としている基幹中継ノード５０に対して、障害の発生を通知するフレーム送信する。障害の発生を通知するフレームは、障害が発生したセンサー中継ノード１０をアドホックネットワークから削除することを要求するメッセージである。そこで、以下の記載では、障害の発生を通知するフレームのことを「削除通知」と記載する。削除通知を受信したセンサー中継ノード１０は、基幹中継ノード５０に向けて削除通知を転送する。
【０１４６】
ここでは、ノードＮ４とＮ１２は、基幹中継ノード５０ｂに対して、ノードＮ５に障害が発生したことを通知する。一方、ノードＮ６は、基幹中継ノード５０ｃに対して、ノードＮ５に障害が発生したことを通知する。
【０１４７】
（７３）障害の発生が通知された基幹中継ノード５０ｂは、基幹中継ノード５０ａと５０ｃに対して、ノードＮ５に障害が発生したことを通知する。また、基幹中継ノード５０ｃも、ノードＮ６から削除通知を受信すると、基幹中継ノード５０ａと５０ｂに対して、ノードＮ５に障害が発生したことを通知する。このため、ネットワーク中の基幹中継ノード５０ａ〜５０ｃの各々は、ノードＮ５での障害の発生を認識する。
【０１４８】
（７４）ノードＮ５で障害が発生したことが通知されると、基幹中継ノード５０は、同期要求フレームを用いて、各センサー中継ノード１０にウェイト番号の再設定を要求する。ウェイト番号の決定方法は、第１の実施形態で説明した方法と同様である。ただし、ここでは、ノードＮ５に障害が発生しているので、ノードＮ５からは同期要求フレームが出力されない。図２６に、基幹中継ノード５０ｃから出力された同期要求フレームに基づいてウェイト番号が再決定された場合の例を示す。
【０１４９】
（７５）基幹中継ノード５０ａ、５０ｂも同様に、センサー中継ノード１０に同期要求フレームを出力することにより、ウェイト番号の再決定を要求する。図２７に、基幹中継ノード５０ａ〜５０ｃの各々を起点としたときのウェイト番号が再決定された場合の例を示す。
【０１５０】
（７６）ウェイト番号が決定されると、選択部３５は、中継先とする基幹中継ノード５０を決定する。中継先の基幹中継ノード５０の選択方法は、図１４を参照しながら説明した方法と同様である。さらに、中継先を変更した場合に新たな中継先として指定したことを基幹中継ノード５０に通知する方法は、第２の実施形態と同様である。図２７の例でも、ノードＮ５の障害に基づいて経路が変更されるため、ノードＮ１９は中継先を、基幹中継ノード５０ｂから５０ｃに変更する。
【０１５１】
図２８は、第５の実施形態でのセンサー中継ノード１０の動作の例を説明するフローチャートである。センサー中継ノード１０は、隣接するセンサー中継ノード１０で障害が発生したことを検出したかを判定する（ステップＳ１１１）。隣接するセンサー中継ノード１０での障害の発生を検出していない場合、隣接するセンサー中継ノード１０からタイムアウトの前にヘルスフレームを受信できたかを判定する（ステップＳ１１１でＮｏ、ステップＳ１１２）。タイムアウトの前にヘルスフレームを受信できた場合、センサー中継ノード１０は、ステップＳ１１１の処理に戻る（ステップＳ１１２でＹｅｓ）。タイムアウト前にヘルスフレームを受信できなかった場合、センサー中継ノード１０は、基幹中継ノード５０に削除通知を送信する（ステップＳ１１２でＹｅｓ、ステップＳ１１３）。ここで、削除通知には、ヘルスフレームを受信できなかったセンサー中継ノード１０を識別する識別子が含まれているものとする。また、ステップＳ１１１で隣接するセンサー中継ノード１０での障害の発生を検出した場合も、センサー中継ノード１０は、基幹中継ノード５０に削除通知を送信する（ステップＳ１１１でＹｅｓ、ステップＳ１１３）。その後、センサー中継ノード１０は、基幹中継ノード５０から同期要求フレームを受信するまで待機する（ステップＳ１１４）。同期要求フレームを受信すると、センサー中継ノード１０は、ウェイト番号を再決定する（ステップＳ１１５）。ウェイト番号の再決定は、第１の実施形態でウェイト番号を決定した場合と同様に行われる。その後、センサー中継ノード１０は、再決定したウェイト番号に基づいて、中継先の基幹中継ノード５０を決定し、状態通知フレームを送信する（ステップＳ１１６）。
【０１５２】
図２９は、第５の実施形態での基幹中継ノード５０の動作の例を説明するフローチャートである。基幹中継ノード５０は、センサー中継ノード１０から削除通知を受信したかを判定する（ステップＳ１２１）。削除通知を受信していない場合、基幹中継ノード５０は、他の基幹中継ノード５０から、削除同期化通知を受信したかを確認する（ステップＳ１２２）。ここで、「削除同期化通知」は、センサー中継ノード１０の故障を認識した基幹中継ノード５０が、他の基幹中継ノード５０にセンサー中継ノード１０の障害を通知するために用いる制御フレームである。削除同期化通知には、障害が発生したセンサー中継ノード１０の識別子が含まれている。削除同期化通知を受信していない場合、基幹中継ノード５０は、基幹中継ノード５０と接続されているセンサー中継ノード１０との間でヘルスフレームの応答がタイムアウトしていないかを確認する（ステップＳ１２３）。ヘルスフレームの応答がタイムアウトしていない場合、基幹中継ノード５０は、ステップＳ１２１に戻る（ステップＳ１２３でＮｏ）。一方、ステップＳ１２１〜Ｓ１２３のいずれかでＹｅｓと判定された場合、基幹中継ノード５０は、他の基幹中継ノード５０に削除同期化通知を送信する（ステップＳ１２４）。その後、基幹中継ノード５０は、センサー中継ノード１０に同期要求フレームを送信し、ウェイト番号の再決定を要求する（ステップＳ１２５）。基幹中継ノード５０は、センサー中継ノード１０から同期応答フレームを受信する。さらに、基幹中継ノード５０は、受信した同期応答フレームを、他の基幹中継ノード５０にも転送する。各基幹中継ノード５０は、アドホックネットワークに含まれる全てのセンサー中継ノード１０からの同期応答フレームを受信するまで、同期応答フレームの受信と転送を繰り返す（ステップＳ１２６）。全てのセンサー中継ノード１０からの同期応答フレームを受信すると、基幹中継ノード５０はステップＳ１２１以降の処理を繰り返す（ステップＳ１２６でＹｅｓ）。
【０１５３】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１５４】
図３０は、中継先の基幹中継ノード５０を選択する際の選択部３５の動作の例を説明するフローチャートである。選択部３５は、ネットワーク中の全ての基幹中継ノード５０を起点としたウェイト番号が決定されると、選択部３５は、最小のウェイト番号を示す変数ｍに０ｘＦＦを設定する（ステップＳ１３１）。また、選択部３５は、中継先に選択される基幹中継ノード５０に割り振られた基幹中継番号を特定するための変数ｎを、基幹中継ノード５０の総数に設定する（ステップＳ１３２）。次に、選択部３５は、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍより小さいかを判定する（ステップＳ１３３）。基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍより小さい場合、選択部３５は、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号をｍの値に設定する（ステップＳ１３４）。次に、選択部３５は、ｎの値を１つデクリメントする（ステップＳ１３５）。一方、基幹中継番号＝ｎの基幹中継ノード５０を起点としたときのウェイト番号がｍ以上である場合（ステップＳ１３３でＮｏ）、ステップＳ１３４とＳ１３５の処理は行われない。選択部３５は、ｎの値が１になるまでステップＳ８３〜Ｓ８６の処理を繰り返す。ｎの値が１になると、選択部３５は、ｎに設定されている値と同じ基幹中継番号が割り振られている基幹中継ノード５０を中継先に選択する。
【０１５５】
さらに、ヘルスフレームのフォーマットを図７（ｆ）に示すように変形することもできる。図７（ｆ）に示すヘルスフレームでは、ネットワーク中の複数の基幹中継ノード５０各々を起点としたときのウェイト番号を一度に１つのフレームで送信できる。なお、この場合、フレーム中のウェイト番号の順序と基幹中継ノード５０が一意に対応付けられるように予めフォーマットが決定されているものとする。
【０１５６】
また、センサー中継ノード１０が自律的にウェイト番号を変更する場合でも、センサー中継ノード１０が基幹中継ノード５０に削除要求を送信するように変形される場合もある。図３１は、センサー中継ノード１０の動作の例を示すフローチャートである。ステップＳ１４１〜Ｓ１４３は、図２８を参照しながら説明したステップＳ１１１〜１１３と同様である。次に、センサー中継ノード１０は、障害が検出されたポートをマスターポートとしてウェイト番号が設定されているかを確認する（ステップＳ１４４）。障害が検出されたポートがマスターポートであった場合、センサー中継ノード１０は、マスターポートを未使用に更新し、さらに、自ノードのウェイト番号を初期値に更新する（ステップＳ１４５、Ｓ１４６）。センサー中継ノード１０は、全てのポートからヘルスフレームを送信する（ステップＳ１４７）。さらに、センサー中継ノード１０の各ポートに接続されている接続先のウェイト番号を比較して、ウェイト番号が小さいポートを特定する（ステップＳ１４８）。センサー中継ノード１０は、特定したポートの接続先のウェイト番号を１つインクリメントした値を自ノードのウェイト番号とする（ステップＳ１４９）。また、センサー中継ノード１０は、マスターポートを、ステップＳ１４８で特定したポートに設定する（ステップＳ１５０）。センサー中継ノード１０は、自ノードのウェイト番号を変更するなどの状態変化の後でヘルスフレームを送信していなければ、隣接するセンサー中継ノード１０にヘルスフレームを送信する（ステップＳ１５１、Ｓ１５２）。また、センサー中継ノード１０は、基幹中継ノード５０に状態通知フレームを送信する（ステップＳ１５３）。その後、センサー中継ノード１０は、全てのポートからヘルスフレームを受信できたかを確認し、受信が終了していれば、ステップＳ１４１に戻る（ステップＳ１５４でＹｅｓ）。一方、ヘルスフレームの受信が終了していない場合、センサー中継ノード１０は、ヘルスフレームの受信を待ってステップＳ１４４以降の処理を繰り返す（ステップＳ１５５）。
【符号の説明】
【０１５７】
１  サーバ
５  ハブ
１０  センサー中継ノード
１１  有線アドホックネットワークポート
１２  汎用ポート
１３  ＤＩ／ＤＯ端子
１４  ＥＥＰＲＯＭ
１５  センサー接続ポート
２０  アドホックルーティング制御デバイス
２１  受信フレーム制御部
２２  送信フレーム制御部
２３  汎用ポート制御部
２４  ＣＰＵインタフェース
２５  レジスタ
２６  フレーム処理部
２７  ＦＩＤテーブル
２８  ＰＳテーブル
２９  ノード管理テーブル
３０  ルーティング制御部
３１  ウェイト番号制御部
３２  ウェイト番号生成部
３３  ウェイト番号テーブル
３４  記憶部
３５  選択部
３６  障害検出部
３７  初期化要求部
３８  ルーティング部
４０  ＣＰＵ
４１  ＦＰＧＡインタフェース
４２  ＤＩ／ＤＯインタフェース
４３  センサーインタフェース
【図１】
2013042207.tif 000003
【図２】
2013042207.tif 000004
【図３】
2013042207.tif 000005
【図４】
2013042207.tif 000006
【図５】
2013042207.tif 000007
【図６】
2013042207.tif 000008
【図７】
2013042207.tif 000009
【図８】
2013042207.tif 000010
【図９】
2013042207.tif 000011
【図１０】
2013042207.tif 000012
【図１１】
2013042207.tif 000013
【図１２】
2013042207.tif 000014
【図１３Ａ】
2013042207.tif 000015
【図１３Ｂ】
2013042207.tif 000016
【図１３Ｃ】
2013042207.tif 000017
【図１３Ｄ】
2013042207.tif 000018
【図１３Ｅ】
2013042207.tif 000019
【図１３Ｆ】
2013042207.tif 000020
【図１４】
2013042207.tif 000021
【図１５】
2013042207.tif 000022
【図１６】
2013042207.tif 000023
【図１７】
2013042207.tif 000024
【図１８】
2013042207.tif 000025
【図１９】
2013042207.tif 000026
【図２０】
2013042207.tif 000027
【図２１】
2013042207.tif 000028
【図２２】
2013042207.tif 000029
【図２３】
2013042207.tif 000030
【図２４Ａ】
2013042207.tif 000031
【図２４Ｂ】
2013042207.tif 000032
【図２５】
2013042207.tif 000033
【図２６】
2013042207.tif 000034
【図２７】
2013042207.tif 000035
【図２８】
2013042207.tif 000036
【図２９】
2013042207.tif 000037
【図３０】
2013042207.tif 000038
【図３１】
2013042207.tif 000039
【手続補正書】
【提出日】平成26年4月2日(2014.4.2)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2013042207.tif 000040
【国際調査報告】
2013042207.tif 000041
2013042207.tif 000042
2013042207.tif 000043
2013042207.tif 000044