(57)【特許請求の範囲】
【請求項１】
無線アドホックネットワークにおいて使用される無線通信装置のプロセッサにより実行される無線通信プログラムであって、
前記無線通信装置を識別する識別情報に基づいて、受信フレームに含まれる固定長のループ検出配列中のビットを指定し、
前記ループ検出配列中の指定されたビットが使用中でないときに、前記受信フレームが伝送されてきた経路がループではないと判定し、
前記ループ検出配列中の指定されたビットが使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定し、
前記受信フレームが伝送されてきた経路がループではないと判定されたときに、前記ループ検出配列中の指定されたビットを使用中に更新して前記受信フレームを宛先ノードへ向けて送信し、
前記受信フレームが伝送されてきた経路がループであると判定されたときに、前記受信フレームを前記受信フレームの送信元の隣接ノードへ返送する、
処理を前記プロセッサに実行させる無線通信プログラム。
【請求項２】
前記無線アドホックネットワークにおいて伝送されるフレームは、ホップ数をカウントするホップカウント値を含み、
前記受信フレームが伝送されてきた経路がループではないと判定され、且つ、前記受信フレームに付与されているホップカウント値により表されるホップ数が所定数であるときに、前記ループ検出配列および前記ホップカウント値を初期化し、ループ検出配列およびホップカウント値が初期化された前記受信フレームを宛先ノードへ向けて送信する
ことを特徴とする請求項１に記載の無線通信プログラム。
【請求項３】
前記指定する処理は、ハッシュ関数を用いて前記無線通信装置の識別情報から前記ループ検出配列中のビットを指定する
ことを特徴とする請求項１または２に記載の無線通信プログラム。
【請求項４】
前記指定する処理は、複数のハッシュ関数を用いて前記無線通信装置の識別情報から前記ループ検出配列中の複数のビットを指定し、
前記判定する処理は、前記ループ検出配列中の複数の指定されたビットがすべて使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定する
ことを特徴とする請求項３に記載の無線通信プログラム。
【請求項５】
無線アドホックネットワークにおいて使用される無線通信装置であって、
前記無線通信装置を識別する識別情報に基づいて、受信フレームに含まれる固定長のループ検出配列中のビットを指定する指定部と、
前記指定部により指定されたループ検出配列中のビットが使用中でないときに、前記受信フレームが伝送されてきた経路がループではないと判定し、前記指定部により指定されたループ検出配列中のビットが使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定する判定部と、
前記受信フレームが伝送されてきた経路がループではないと判定されたときに、前記指定部により指定されたループ検出配列中のビットを使用中に更新する更新部と、
前記受信フレームが伝送されてきた経路がループではないと判定されたときに、前記更新部によりループ検出配列が更新された受信フレームを宛先ノードへ向けて送信し、前記受信フレームが伝送されてきた経路がループであると判定されたときに、前記受信フレームを前記受信フレームの送信元の隣接ノードへ返送する送信部と、
を有する無線通信装置。
【請求項６】
前記無線アドホックネットワークにおいて伝送されるフレームは、ホップ数をカウントするホップカウント値を含み、
前記受信フレームが伝送されてきた経路がループではないと判定され、且つ、前記受信フレームに付与されているホップカウント値により表されるホップ数が所定数であるときに、前記更新部は、前記ループ検出配列および前記ホップカウント値を初期化し、前記送信部は、ループ検出配列およびホップカウント値が初期化された前記受信フレームを宛先ノードへ向けて送信する
ことを特徴とする請求項５に記載の無線通信装置。
【請求項７】
前記指定部は、ハッシュ関数を用いて前記無線通信装置の識別情報から前記ループ検出配列中のビットを指定する
ことを特徴とする請求項５または６に記載の無線通信装置。
【請求項８】
前記指定部は、複数のハッシュ関数を用いて前記無線通信装置の識別情報から前記ループ検出配列中の複数のビットを指定し、
前記判定部は、前記指定部により指定されたループ検出配列中の複数のビットがすべて使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定する
ことを特徴とする請求項７に記載の無線通信装置。
【請求項９】
無線アドホックネットワークにおいて使用される無線通信装置により実行される無線通信方法であって、
前記無線通信装置を識別する識別情報に基づいて、受信フレームに含まれる固定長のループ検出配列中のビットを指定し、
前記ループ検出配列中の指定されたビットが使用中でないときに、前記受信フレームが伝送されてきた経路がループではないと判定し、
前記ループ検出配列中の指定されたビットが使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定し、
前記受信フレームが伝送されてきた経路がループではないと判定されたときに、前記ループ検出配列中の指定されたビットを使用中に更新して前記受信フレームを宛先ノードへ向けて送信し、
前記受信フレームが伝送されてきた経路がループであると判定されたときに、前記受信フレームを前記受信フレームの送信元の隣接ノードへ返送する、
ことを特徴とする無線通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、無線通信装置、無線通信方法、および無線通信プログラムに係わる。
【背景技術】
【０００２】
複数の拠点にそれぞれ無線通信装置を配置し、基地局を設けることなく各拠点から情報を収集する無線アドホックネットワークが実用化されている。このようなシステムにおいては、例えば、サーバコンピュータは、各拠点で測定された気象情報を収集して分析することができる。
【０００３】
上述の無線アドホックネットワークにおいては、無線通信装置は、宛先アドレス（例えば、サーバコンピュータのアドレス）を付与したフレームを隣接ノードへ送信する。このフレームを受信した無線通信装置は、宛先アドレスに応じてそのフレームを転送する。このとき、無線通信装置は、宛先アドレスに応じて複数の隣接ノードの中から適切な隣接ノードを選択し、選択した隣接ノードへ受信フレームを転送する。すなわち、各無線通信装置は、転送先の隣接ノードを自律的に決定する。そして、送信元の無線通信装置から送信されたフレームは、１または複数の無線通信装置により、宛先アドレスにより指定されるノード（例えば、サーバコンピュータ）まで伝送される。
【０００４】
このように、無線アドホックネットワークシステムにおいては、送信元から宛先へフレームが伝送される経路は、システム内の１または複数の無線通信装置により自律的に決定される。このため、あるノードから送信されたフレームが１または複数のノードを経由してそのノードに戻ってくる状態（以下、ループ）が生じることがある。そして、ループが発生すると、フレームが宛先ノードまで伝送されないことがある。
【０００５】
このため、無線アドホックネットワークにおいてループを検出する方法が提案されている。たとえば、各無線通信装置は、自分が送信したフレームおよび自分が転送したフレームを識別する情報を、一定期間、メモリに記録する。そして、無線通信装置は、各受信フレームについて、その受信フレームを識別する情報がメモリに記録されているか否かを確認する。この結果、受信フレームを識別する情報がメモリに記録されていれば、無線通信装置は、フレームの伝送経路がループであると判定する。ループが検出されたときは、無線通信装置は、異なる経路を利用してフレームを送信または転送する（例えば、特許文献１）。また、上述の方法の他にもループを検出する技術が提案されている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】ＷＯ２０１１／０１３１６５号公報
【特許文献２】特表２００９−５１４２６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述のように、送信フレームおよび転送フレームを識別する情報を記録するメモリを利用すれば、無線通信装置は、ループを検出することができる。ただし、この方法でループを精度よく検出するためには、比較的長い期間に渡って送信フレームおよび転送フレームを管理する必要がある。このため、各無線通信装置は、ループ判定を行うために、大きな容量のメモリを備える必要がある。
【０００８】
本発明は、無線通信装置のメモリ使用量を大きくすることなく、無線アドホックネットワークのループを検出する方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、無線通信プログラムは、無線アドホックネットワークにおいて使用される無線通信装置のプロセッサにより実行される。この無線通信プログラムは、前記無線通信装置を識別する識別情報に基づいて、受信フレームに付与されているループ検出配列中のビットを指定し、前記ループ検出配列中の指定されたビットが使用中でないときに、前記受信フレームが伝送されてきた経路がループではないと判定し、前記ループ検出配列中の指定されたビットが使用中であるときに、前記受信フレームが伝送されてきた経路がループであると判定し、前記受信フレームが伝送されてきた経路がループではないと判定されたときに、前記ループ検出配列中の指定されたビットを使用中に更新して前記受信フレームを宛先ノードへ向けて送信し、前記受信フレームが伝送されてきた経路がループであると判定されたときに、前記受信フレームを前記受信フレームの送信元の隣接ノードへ返送する、処理を前記プロセッサに実行させる。
【発明の効果】
【００１０】
１つの側面として、無線通信装置のメモリ使用量を大きくすることなく、無線アドホックネットワークのループを検出することができる。
【図面の簡単な説明】
【００１１】
【図１】無線アドホックネットワークにおけるフレーム転送の一例を示す図である。
【図２】フレームフォーマットの一例を示す図である。
【図３】無線通信装置の機能の一例を示す図である。
【図４】隣接ノード管理テーブルおよび優先度テーブルの例を示す図である。
【図５】ＦＩＤ管理テーブルの一例を示す図である。
【図６】無線通信装置のハードウェア構成の一例を示す図である。
【図７】ハッシュ関数の特徴について説明する図である。
【図８】ブルームフィルタの処理について説明する図である。
【図９】配列の長さおよびホップ数に対する偽陽性発生確率の一例を示す図である。
【図１０】送信元ノードの無線通信装置の処理の一例を示すフローチャートである。
【図１１】フレームを受信した無線通信装置の処理の一例を示すフローチャートである。
【図１２】ループ判定方法の一例を示す図である。
【図１３】ビット検出配列を更新する方法の一例を示す図である。
【図１４】第１の実施例のフレーム転送を示す図である。
【図１５】第２の実施例のフレーム転送を示す図である。
【発明を実施するための形態】
【００１２】
図１は、本発明の１つの実施形態に係わる無線アドホックネットワークにおけるフレーム転送の一例を示す。この例では、無線アドホックネットワークは、ノードＮ１〜Ｎ７を含む。各ノードには、それぞれ無線通信装置が設けられている。なお、以下の記載では、ノードＮ１〜Ｎ７に設けられている無線通信装置を、それぞれ無線通信装置Ｎ１〜Ｎ７と呼ぶことがある。また、ノード間を接続する実線は、無線リンクを表す。
【００１３】
無線通信装置は、隣接ノードへフレームを送信することができる。また、隣接ノードからフレームを受信した無線通信装置は、その受信フレームを他の隣接ノードへ転送することができる。このとき、無線通信装置は、フレームの宛先に基づいてそのフレームを送信または転送すべき隣接ノードを決定する。すなわち、フレームが伝送される経路は、無線アドホックネットワーク内の各無線通信装置により自律的に決定される。
【００１４】
図１に示す例では、ノードＮ１に設けられている無線通信装置（すなわち、無線通信装置Ｎ１）がフレームを生成して宛先へ送信する。この例では、フレームの宛先は、ノードＮ７である。なお、以下の記載では、フレームが生成されるノードを「送信元ノード（ＧＳ：Global Source）」と呼ぶことがある。また、そのフレームの最終的な宛先を「宛先ノード（ＧＤ：Global Destination）」と呼ぶことがある。
【００１５】
Ｓ１０１〜Ｓ１０３において、無線通信装置Ｎ１により生成されたフレームは、ノードＮ２、ノードＮ３によりノードＮ４へ転送される。無線通信装置Ｎ４は、Ｓ１０４において、受信フレームをノードＮ７へ転送しようとする。しかし、ノードＮ４、Ｎ７間の無線リンクの品質が悪く、ノードＮ４から送信されるフレームはノードＮ７には到達しない。この場合、無線通信装置Ｎ４は、ノードＮ７からＡＣＫフレームを受信しないので、ノードＮ７へのフレーム送信が失敗したことを検出する。そうすると、無線通信装置Ｎ４は、他の経路を利用してフレームを転送する。
【００１６】
Ｓ１０５〜Ｓ１０６において、ノードＮ４からノードＮ５を経由してノードＮ３へフレームが転送される。ところが、無線通信装置Ｎ３がノードＮ５から受信するフレームは、無線通信装置Ｎ３が先にノードＮ４へ送信したフレームである。この場合、無線通信装置Ｎ３は、受信フレームが伝送されてきた経路がループであると判定する。そして、無線通信装置Ｎ３は、受信フレームを、その受信フレームの送信元の隣接ノードへ返送する。この例では、無線通信装置Ｎ３は、Ｓ１０７において、受信フレームをノードＮ５へ返送する。以下の記載では、ループ検出に起因して無線通信装置が受信フレームをその受信フレームの送信元の隣接ノードへ返送する動作を「バックトラック」と呼ぶことがある。
【００１７】
以下、同様に、フレームを受信した無線通信装置は、そのフレームの宛先に基づいてそのフレームを転送する隣接ノードを決定する。すなわち、Ｓ１０８〜Ｓ１１２において、ノードＮ５からノードＮ４、Ｎ３、Ｎ２、Ｎ６を経由してノードＮ７へフレームが転送される。
【００１８】
図２は、無線アドホックネットワークにおいて使用されるフレームのフォーマットの一例を示す。この例で使用されるフレームは、ＬＤフィールド、ＬＳフィールド、ＧＤフィールド、ＧＳフィールド、ＦＩＤフィールド、タイプフィールド、ＬＨフィールド、ＬＢフィールド、長さフィールド、ペイロードを含む。
【００１９】
ＬＤ（Local Destination）フィールドには、送信先の隣接ノードを識別する情報が格納される。また、ＬＳ（Local Source）フィールドには、送信元の自ノードの情報が格納される。例えば、図１に示すＳ１０１においてノードＮ１からノードＮ２へ伝送されるフレームにおいては、「ＬＤ＝Ｎ２」「ＬＳ＝Ｎ１」が設定される。また、Ｓ１０２おいてノードＮ２からノードＮ３へ伝送されるフレームにおいては、「ＬＤ＝Ｎ３」「ＬＳ＝Ｎ２」が設定される。すなわち、ＬＤフィールドおよびＬＳフィールドは、フレームを転送するノードにおいて更新される。
【００２０】
ＧＤフィールドには、フレームの最終的な宛先ノードを識別するＧＤ情報が格納される。ＧＳフィールドには、フレームを生成したノードを識別するＧＳ情報が格納される。図１に示す例では、ノードＮ１から送信されるフレームに「ＧＤ＝Ｎ７」「ＧＳ＝Ｎ１」が設定される。なお、ＧＤフィールドおよびＧＳフィールドは、フレームが伝送されている途中で更新されることはない。
【００２１】
ＦＩＤ（Frame Identifier）フィールドには、無線アドホックネットワーク内で各フレームを識別するＦＩＤが格納される。ＦＩＤは、ＧＳノードにおいて送信フレームに付与され、そのフレームが伝送されている途中で更新されることはない。よって、無線アドホックネットワーク内で伝送される各フレームは、ＧＳおよびＦＩＤの組合せにより一意に識別される。なお、ＦＩＤは、例えば、シーケンス番号により実現される。
【００２２】
タイプフィールドには、フレームの種別を表すタイプ情報が格納される。例えば、タイプ情報は、ユーザデータを格納するデータフレーム、フレーム受信を通知するＡＣＫフレームなどを表すことができる。
【００２３】
ＬＨ（Loop Hop）フィールドには、フレーム転送のホップ数をカウントするためホップカウント値が格納される。なお、ＬＨフィールドには、ＧＳノードにおいて、ホップカウント値の初期値が設定される。そして、ホップカウント値は、無線通信装置によりフレームが転送されるときにインクリメントまたはデクリメントされる。例えば、図１に示すノードＮ１から送信されるフレームに「ホップカウント値＝１０」が付与されるものとする。この場合、ホップカウント値は、ノードＮ２において「９」へ更新され、ノードＮ３において「８」へ更新される。
【００２４】
ホップカウント値は、送信元ノードからのホップ数が所定数に到達したときに、リセットされて初期値に戻る。上述の例では、ホップカウント値が「１０」から１ずつデクリメントされて「０」に到達すると、ホップカウント値はリセットされて「１０」に戻る。したがって、あるノードにおいてホップカウント値が初期化されたときは、ホップカウント値は、ホップカウント値を初期化したノードからのホップ数を表す。
【００２５】
なお、ホップカウント値の初期値および更新方法は、上述の例に限定されるものではない。例えば、ホップカウント値の初期値は、ゼロであってもよい。この場合、無線通信装置によりフレームが転送されるときに、ホップカウント値はインクリメントされる。そして、ホップカウント値が「ゼロ」から１ずつインクリメントされて「１０」に到達したときに、ホップカウント値はリセットされて「ゼロ」に戻る。
【００２６】
ＬＢ（Loop detection Bit）フィールドには、予め決められた長さのループ検出配列が格納される。初期状態においては、ループ検出配列のすべてのビットにゼロが設定される。各無線通信装置は、受信フレームに付与されているループ検出配列において、自ノードに対応する１または複数のビットを「０」から「１」に更新する。そして、ループ検出配列は、フレームが伝送される経路がループであるか否かを判定するために使用される。すなわち、無線通信装置は、受信フレームに付与されているループ検出配列を利用して、そのフレームが伝送されてきた経路がループであるか否かを判定する。ループ検出配列を利用してループを検出する方法については、後で詳しく説明する。
【００２７】
なお、ループ検出配列は、ループ判定のためのビット列の一例である。したがって、無線通信装置は、ループ判定を実行するために、必ずしも「配列」を使用しなくてもよい。すなわち、無線通信装置は、受信フレームに付与されているループ検出のためのビット列を利用して、そのフレームが伝送されてきた経路がループであるか否かを判定することができる。
【００２８】
長さフィールドには、ペイロードの長さを表す情報が格納される。ペイロードには、データが格納される。なお、無線アドホックネットワークにおいて伝送されるフレームは、他の情報要素を含んでいてもよい。
【００２９】
図３は、無線アドホックネットワークにおいて使用される無線通信装置の機能の一例を示す。無線通信装置１は、図３に示すように、受信部１１、バッファ部１２、フレーム処理部１３、上位レイヤ処理部１４、隣接ノード管理テーブル１５、優先度テーブル１６、ＦＩＤ管理テーブル１７、ループチェック部１８、送信部１９を有する。ただし、無線通信装置１は、図３に示していない他の機能をさらに備えていてもよい。
【００３０】
受信部１１は、他の無線通信装置からフレームを受信する。受信部１１により受信されたフレームは、いったんバッファ部１２に格納される。なお、受信部１１は、無線送受信モジュール内の受信器に接続されている。また、バッファ部１２は、例えば、半導体メモリにより実現される。
【００３１】
フレーム処理部１３は、受信フレームを処理する。受信フレームの宛先が無線通信装置１であるときは、フレーム処理部１３は、受信フレームを上位レイヤ処理部１４に導く。一方、受信フレームの宛先が無線通信装置１でないときは、フレーム処理部１３は、受信フレームの宛先（すなわち、ＧＤ）に基づいて、その受信フレームを転送すべき隣接ノード（すなわち、ＬＤ）を決定する。なお、無線通信装置１がフレームを生成して送信するときは、フレーム処理部１３は、新たなフレームを生成することができる。なお、フレーム処理部１３は、後述する更新部１３ａを含む。
【００３２】
上位レイヤ処理部１４は、受信フレームのペイロードに格納されているデータを処理する。また、上位レイヤ処理部１４は、無線通信装置１から送信されるデータを生成することができる。上位レイヤ処理部１４により生成されるデータは、フレーム処理部１３により送信フレームのペイロードに格納される。
【００３３】
図４（ａ）は、隣接ノード管理テーブル１５の一例を示す。隣接ノード管理テーブル１５には、無線通信装置１に隣接するノードを識別するノードＩＤが登録される。ここで、無線通信装置１は、隣接ノードを検出する機能を備えているものとする。例えば、無線通信装置１は、定期的に、隣接ノードの存在を確認する。そして、新たな隣接ノードが検出されたときは、その新たな隣接ノードが隣接ノード管理テーブル１５に登録される。尚、図４（ａ）は、図１の無線通信装置Ｎ４に設けられる隣接ノード管理テーブル１５を示している。よって、この隣接ノード管理テーブル１５には、ノードＮ３、Ｎ５、Ｎ７が登録されている。
【００３４】
図４（ｂ）は、優先度テーブル１６の一例を示す。優先度テーブル１６には、宛先（すなわち、ＧＤ）ごとに、受信フレームを転送すべき隣接ノード（すなわち、ＬＤ）が登録されている。具体的には、優先度テーブル１６には、各ＧＤに対して、優先度の高い所定数のＬＤが登録される。そして、フレーム処理部１３は、この優先度テーブル１６を参照して、受信フレームを転送すべき隣接ノードを決定する。
【００３５】
なお、図４（ｂ）は、図１の無線通信装置Ｎ４に設けられる優先度テーブル１６を示している。したがって、受信フレームの宛先がノードＮ７であるときは、無線通信装置Ｎ４は、優先度テーブル１６を参照して「ＬＤ＝Ｎ７」を得る。そうすると、無線通信装置Ｎ４は、受信フレームをノードＮ７へ転送する。ただし、図１に示す例では、ノードＮ４からノードＮ７へのフレーム送信は失敗している。このため、無線通信装置Ｎ４は、優先度テーブル１６を参照して２番目に優先度の高い隣接ノードを選択する。この結果、無線通信装置Ｎ４は、受信フレームをノードＮ５へ転送する。
【００３６】
図５は、ＦＩＤ管理テーブル１７の一例を示す。ＦＩＤ管理テーブル１７には、無線通信装置１が先に送信または転送したフレームを管理するための情報が格納される。また、ＦＩＤ管理テーブル１７のレコードは、ＦＩＤおよびＧＳの組合せに対して生成される。そして、無線通信装置１がフレームを送信または転送するときに、そのフレームのヘッダに設定されているＦＩＤ、ＧＳ情報、ＬＤ情報、ホップカウント値がそれぞれＦＩＤ管理テーブル１７のＦＩＤフィールド、ＧＳフィールド、ＬＤフィールド、ＨＯＰフィールドに書き込まれる。ＯＬＳ（Original LS）フィールドには、受信フレームの送信元の隣接ノードを表すノードＩＤが書き込まれる。さらに、ＦＩＤ管理テーブル１７には、各レコードが最後に更新された時刻が記録される。
【００３７】
フレームの伝送経路にループが発生したときには、無線通信装置１が先に送信または転送したフレームが、その無線通信装置１に戻ってくる。この場合、無線通信装置１に戻ってきたフレームのＦＩＤおよびＧＳの組は、ＦＩＤ管理テーブル１７に登録されている。このため、無線通信装置１に戻ってきたフレームに対して新たなレコードは生成されず、先に生成されている対応するレコードにおいてＬＤフィールドおよびＨＯＰフィールドが更新される。ただし、無線通信装置１にフレームが戻ってきたときに、ＯＬＳフィールドは更新されない。すなわち、ＯＬＳフィールドに格納されているノードＩＤは、無線通信装置１があるフレームを最初に受信したときの、そのフレームの送信元の隣接ノードを表す。
【００３８】
上述のように、ＦＩＤ管理テーブル１７には、無線通信装置１が送信または転送したフレームを管理するための情報が格納される。よって、無線通信装置１は、ＦＩＤ管理テーブル１７を利用してループを検出することができる。例えば、受信フレームのＦＩＤおよびＧＳの組が既にＦＩＤ管理テーブル１７に登録されているときは、無線通信装置１は、ループが発生していると判定することができる。
【００３９】
但し、この方法で無線アドホックネットワークのループを精度よく検出するためには、比較的長い期間に渡って送信フレームおよび転送フレームを管理する必要がある。一例としては、無線アドホックネットワークの最大ホップ数に対応する時間に渡って、各フレームを管理することが要求される。このため、ＦＩＤ管理テーブル１７のサイズが大きくなってしまう。したがって、本発明の実施形態の無線通信装置１は、メモリ容量を削減するために、後述する他の方法で無線アドホックネットワークのループを検出する。
【００４０】
なお、無線通信装置１は、受信フレームがバックトラックにより隣接ノードから返送されてきたフレーム（以下、バックトラックフレーム）であるか否かを判定するために、ＦＩＤ管理テーブル１７を使用してもよい。ここで、バックトラックは、無線通信装置Ｘから無線通信装置Ｙへフレームが送信され、そのフレームが無線通信装置Ｙから無線通信装置Ｘへ直接返送される動作を意味する。ここで、無線通信装置Ｘ、Ｙは互いに隣接している。このため、無線通信装置Ｘが無線通信装置Ｙへフレームを送信したときから、無線通信装置Ｘが無線通信装置Ｙからバックトラックフレームを受信するまでに要する時間は、無線アドホックネットワーク内でフレームが２ホップだけ伝送される時間に相当し、非常に短い。したがって、バックトラックフレームを検出する目的でＦＩＤ管理テーブル１７を使用する場合、無線通信装置１が送信または転送したフレームを、ＦＩＤ管理テーブル１７を用いて管理すべき期間は、比較的短くてもよい。すなわち、ループ判定のために使用する場合と比較して、バックトラックフレームを検出するために使用する場合は、ＦＩＤ管理テーブル１７のサイズは十分に小さい。
【００４１】
ループチェック部１８は、無線通信装置１がフレームを受信したときに、そのフレームが伝送されてきた経路がループであるか否かを判定する。ここで、ループチェック部１８は、後述する指定部１８ａおよび判定部１８ｂを含む。そして、ループチェック部１８による判定結果は、フレーム処理部１３に通知される。なお、フレーム処理部１３は、上述したように、受信フレームの宛先（即ち、ＧＤ）に基づいて、その受信フレームを転送すべき隣接ノード（即ち、ＬＤ）を決定する。但し、受信フレームが伝送されてきた経路がループであるとループチェック部１８により判定されたときは、フレーム処理部１３は、その受信フレームの送信元の隣接ノードへ受信フレームを返送する。すなわち、バックトラックが実行される。図１に示す例では、無線通信装置Ｎ３は、Ｓ１０６においてループを検出すると、受信フレームをノードＮ５へ返送する。
【００４２】
送信部１９は、フレーム処理部１３により生成または更新されたフレームを隣接ノードへ送信する。このとき、送信部１９は、フレームのヘッダに設定されているＬＤにより指定される隣接ノードへフレームを送信する。なお、フレーム処理部１３により更新されたフレームを隣接ノードへ送信する動作は、上述したバックトラックを含む。
【００４３】
図６は、無線通信装置１のハードウェア構成の一例を示す。無線通信装置１は、図６に示すように、プロセッサ２１、メモリ２２、無線送受信モジュール２３を含む。プロセッサ２１、メモリ２２、無線送受信モジュール２３は、例えば、バス２４により接続されている。なお、無線通信装置１は、図６に示していない他の回路要素をさらに備えていてもよい。
【００４４】
プロセッサ２１は、与えられたプログラムを実行することにより、図３に示す受信部１１、フレーム処理部１３、上位レイヤ処理部１４、ループチェック部１８、送信部１９の機能を提供することができる。ただし、受信部１１、フレーム処理部１３、上位レイヤ処理部１４、ループチェック部１８、送信部１９の機能の一部は、ハードウェア回路で実現してもよい。
【００４５】
メモリ２２は、プロセッサ２１により実行されるプログラムを格納することができる。また、メモリ２２は、バッファ部１２を提供することができる。さらに、隣接ノード管理テーブル１５、優先度テーブル１６、ＦＩＤ管理テーブル１７は、メモリ２２を利用して作成される。なお、メモリ２２は、例えば、半導体メモリにより実現される。
【００４６】
無線送受信モジュール２３は、送信器および受信器を含む。送信器は、フレーム処理部１３により生成または更新されるフレームを表す無線信号を隣接ノードへ送信することができる。受信器は、隣接ノードから送信される無線信号を終端してフレームを再生することができる。
【００４７】
このように、無線通信装置１の機能は、例えば、プロセッサを用いて無線通信プログラムを実行することにより提供される。したがって、無線通信装置１の機能は、必ずしも１つの独立したデバイスにより提供されなくてもよい。例えば、プロセッサおよびメモリを含む測定装置に無線通信プログラムを組み込めば、その測定装置は、上述した無線通信装置１の機能を提供することができる。この場合、測定装置は、組み込まれた無線通信プログラムを実行することにより、測定データを宛先へ向けて送信することができ、また、他のノードから受信するデータを宛先へ向けて転送することもできる。
【００４８】
次に、ループチェック部１８によるループ判定について説明する。ループチェック部１８は、この実施例では、ブルームフィルタを利用して無線アドホックネットワークのループを検出する。ブルームフィルタは、ハッシュ関数を利用して、与えられた要素が集合に属するか否かを判定することができる。よって、ループ判定について記載する前に、ハッシュ関数およびブルームフィルタについて簡単に説明する。
【００４９】
ハッシュ関数は、不可逆一方向関数であり、与えられたキー値に対して対応するハッシュ値を生成する。図７に示す例では、ハッシュ関数にキー値Ａが入力されると、ハッシュ値Ｘが生成されている。同様に、ハッシュ関数にキー値Ｂが入力されるとハッシュ値Ｙが生成され、ハッシュ関数にキー値Ｃが入力されるとハッシュ値Ｚが生成される。このように、ハッシュ関数に異なるキー値が入力されると、基本的に、異なるハッシュ値が生成される。ただし、ハッシュ関数に異なるキー値が入力された場合であっても、同じハッシュ値が生成されることがある。図７に示す例では、ハッシュ関数にキー値Ｄが入力されたときにも、ハッシュ値Ｘが生成されている。以下の記載では、ハッシュ関数に異なるキー値が入力されたときに、同じハッシュ値が生成されるケースを「衝突」と呼ぶことがある。
【００５０】
ハッシュ関数を利用してブルームフィルタを実現する場合、ハッシュ関数により生成されるハッシュ値は、ブルームフィルタの配列中のビット位置を指定する。配列の長さは、予め指定される。また、配列の初期状態においては、全てのビットがゼロに設定される。
【００５１】
配列の長さがｍビットである場合、あるキー値がハッシュ関数に与えられたときに生成されるハッシュ値は「１」〜「ｍ」のいずれか１つである。図８に示す例では、ｍ＝８である。尚、以下の記載では、配列中のビットが「ゼロ」である状態を「未使用」と呼び、配列中のビットが「１」である状態を「使用中」と呼ぶことがある。
【００５２】
ハッシュ関数にキー値Ａが与えられたときに、ハッシュ値として「２」が生成されるものとする。ここで、ハッシュ値は、配列中のビット位置を指定する。この結果、キー値Ａに対して、配列の第２ビットが「１（使用中）」に更新される。
【００５３】
続いて、ハッシュ関数にキー値Ｂが与えられたときにハッシュ値として「５」が生成され、ハッシュ関数にキー値Ｃが与えられたときにハッシュ値として「３」が生成されるものとする。この結果、配列の第５ビットおよび第３ビットが「１（使用中）」に更新される。
【００５４】
このような状況において、ブルームフィルタは、値Ｘが、集合「Ａ、Ｂ、Ｃ」の要素であるか否かを判定することができる。この判定を行うときは、まず、値Ｘがハッシュ関数に与えられ、対応するハッシュ値ｘが生成される。このハッシュ値ｘは、「１」〜「８」のいずれか１つである。そして、ハッシュ値ｘが「２」「３」「５」のいずれかであるときは、値Ｘが、集合「Ａ、Ｂ、Ｃ」の要素であると判定される。即ち「値Ｘは、Ａ、Ｂ、Ｃのいずれか１つに一致する」と判定される。一方、ハッシュ値ｘが「２」「３」「５」のいずれでもないときは、値Ｘが、集合「Ａ、Ｂ、Ｃ」の要素でないと判定される。すなわち「値Ｘは、Ａ、Ｂ、Ｃのいずれにも一致しない」と判定される。
【００５５】
ただし、ハッシュ関数は、図７を参照しながら説明したように、異なるキー値に対して同じハッシュ値を生成することがある。このため、実際には「値Ｘは、Ａ、Ｂ、Ｃのいずれにも一致しない」にもかかわらず、ハッシュ値ｘが「２」「３」「５」のいずれかであるケースが発生し得る。なお、このようなケースは、「偽陽性（false positive）」と呼ばれる。
【００５６】
ブルームフィルタにおいて偽陽性が発生すると、誤った判定結果が得られる。しかしながら、ブルームフィルタにおいては、偽陰性（false negative）は発生しない。このため、実際には値Ｘが集合「Ａ、Ｂ、Ｃ」に属するときに、「値Ｘは、集合「Ａ、Ｂ、Ｃ」に属しない」と判定されることはない。したがって、ブルームフィルタを利用してループ判定を行う場合、「実際にはループが発生していないにもかかわらず、ループが発生していると判定される」という誤検出は起こり得るが、「実際にはループが発生しているにもかかわらず、ループが発生していないと判定される」という検出漏れは起こらない。
【００５７】
なお、偽陽性に起因する誤検出が発生する確率（偽陽性発生確率ｐ）は、近似的に、下記（１）式で表される。
ｐ＝0.6185^(m/n)      （１）
ｍは、配列の長さ（ビット数）を表す。ｎは、配列に「１（使用中）」が追加される個数を表す。
【００５８】
本発明の実施形態の無線通信装置１は、上述のブルームフィルタを利用してループ判定を行う。ここで、ループ判定は、ある無線通信装置が送信したフレームが、その無線通信装置に戻ってくるか否かをチェックすることにより実現される。よって、具体的には、ある無線通信装置が受信したフレームが、その無線通信装置から先に送信されたフレームであるか否かをチェックすることによりループ判定が実現される。したがって、以下の動作条件に下で、ブルームフィルタを利用してループ判定が行われる。
（１）各無線通信装置は、同じハッシュ関数を使用する。
（２）各無線通信装置においてハッシュ関数に与えられるキー値は、無線通信装置を識別する識別情報（例えば、無線通信装置のＭＡＣアドレス）である。
【００５９】
ブルームフィルタは、（１）式に基づいて、偽陽性発生確率が所定の閾値よりも低くなるように設計される。一例として、無線アドホックネットワークが５００〜１０００個のノードで構成されるメッシュネットワークであるものとする。また、各ノードにおいて図１〜図４を参照しながら説明した自律的な転送処理が実行されるものとする。この場合、ある送信元ノードから所望の宛先ノードへフレームが伝送される経路の平均ホップ数は、約１０ホップであることが経験的に知られている。
【００６０】
ここで、送信元ノードから宛先ノードへフレームが伝送されるときに、各ノードにおいて配列に「１（使用中）」が追加されるものとする。そうすると、送信元ノードからｎホップ離れたノードにおける偽陽性発生確率ｐは、図９に示す通りである。このように、配列の長さが長いときは、偽陽性発生確率ｐは低くなる。また、送信元ノードからのホップ数が大きいノードでは、偽陽性発生確率ｐは高くなる。そして、ブルームフィルタは、この偽陽性発生確率ｐが所定の閾値よりも低くなるように設計される。例えば、送信元ノードから１０ホップ離れたノードにおける偽陽性発生確率ｐを１パーセントよりも低くするためには、配列の長さｍは、９６以上であることが要求される。
【００６１】
さらに、各ノードにおいてｋ個のハッシュ関数を用いてループ判定が行われる。ｋの適切な値（すなわち、偽陽性発生確率ｐを最小にする値）は、下記（２）式で表される。
ｋ＝(m/n)ln2      （２）
ｍは、配列の長さ（ビット数）を表す。ｎは、送信元ノードからのホップ数を表す。
ここで、（２）式にｍ＝９６およびｎ＝１０を与えると、ｋ＝6.554が得られる。したがって、各ノードにおいて７個のハッシュ関数を用いてループ判定が行われる。この場合、無線通信装置１は、例えば、自ノードのＭＡＣアドレスを７個のハッシュ関数に与えることにより、７個のハッシュ値を生成する。各ハッシュ値は、配列中のビット位置を指定する。そして、無線通信装置１は、受信フレームのＬＢフィールドに格納されているビット検出配列において、各ハッシュ値により指定されるビットがそれぞれ「１（使用中）」であるか否かチェックすることで、ループ判定を実行する。
【００６２】
図１０は、送信元ノードの無線通信装置の処理の一例を示すフローチャートである。なお、図１０に示すフローチャートは、無線通信装置１がフレームを生成して送信するときに実行される。以下の記載では、ホップ数をカウントするホップカウント値を「ＬＨ」と表記することがある。また、ループ検出配列を「ＬＢ」と表記することがある。
【００６３】
Ｓ１において、フレーム処理部１３は、図２に示すフレームを生成する。フレームの宛先ノードのアドレスは、ＧＤフィールドに格納される。また、送信データは、ペイロードに格納される。
【００６４】
Ｓ２において、フレーム処理部１３は、宛先ノードに基づいて、フレームを送信すべき隣接ノード（すなわち、ＬＤ）を決定する。このとき、ＬＤは、図４（ｂ）に示す優先度テーブル１６を参照することにより決定される。すなわち、フレームの宛先（すなわち、ＧＤ）に対して最も高い優先度が与えられている隣接ノードが選択される。
【００６５】
Ｓ３において、フレーム処理部１３は、フレームに付与されるホップカウント値ＬＨおよびループ検出配列ＬＢを初期化する。ホップカウント値ＬＨの初期値は、この例では、１０である。「１０」は、無線アドホックネットワークにおいて送信元ノードから所望の宛先ノードへフレームが伝送される経路の平均ホップ数に相当する。また、ループ検出配列ＬＢの初期状態においては、すべてのビットがゼロに設定される。
【００６６】
Ｓ４において、フレーム処理部１３は、無線通信装置１を識別する識別情報に基づいて生成されるループ検出ビットをループ検出配列ＬＢに追加する。この例では、無線通信装置１のＭＡＣアドレスを予め用意されているハッシュ関数に与えることにより、ループ検出配列中のビットを指定するハッシュ値が生成される。そして、ハッシュ値により指定されるビットを「１（使用中）」に設定する動作は、無線通信装置１のループ検出ビットをループ検出配列ＬＢに追加する動作に相当する。すなわち、無線通信装置１のループ検出ビットをループ検出配列ＬＢに追加する動作は、無線通信装置１のＭＡＣアドレスに対応するハッシュ値によりループ検出配列中の指定されるビットを「１（使用中）」に設定する動作により実現される。各無線通信装置がｋ個のハッシュ関数を利用してＭＡＣアドレスからｋ個のハッシュ値を生成する場合、ループ検出配列中の指定されるｋ個のビットが「１」に設定される。
【００６７】
Ｓ５において、送信部１９は、Ｓ１〜Ｓ４により生成されたフレームを隣接ノードへ送信する。すなわち、フレームは、図６に示す無線送受信モジュール２３を介して隣接ノードへ送信される。このフレームは、無線通信装置１の通信エリア内の各隣接ノードに到達する。ただし、無線通信装置は、受信フレームのＬＤフィールドに格納されているＬＤ情報が他のノードを表しているときは、その受信フレームを廃棄する。したがって、実質的には、ＬＤ情報により識別されるノードの無線通信装置のみが、フレームを受信する。
【００６８】
図１１は、隣接ノードからフレームを受信した無線通信装置の処理の一例を示すフローチャートである。なお、図１１に示すフローチャートは、無線通信装置１がフレームを受信したときに実行される。
【００６９】
Ｓ１１において、受信部１１は、隣接ノードからフレームを受信する。そして、受信部１１は、受信フレームをバッファ部１２に格納する。なお、上述したように、受信フレームのＬＤフィールドに格納されているＬＤ情報が他のノードを表しているときは、受信部１１は、その受信フレームを廃棄する。
【００７０】
Ｓ１２において、フレーム処理部１３は、受信フレームがバックトラックフレームであるか否かを判定する。ここで、フレーム処理部１３は、例えば、図５に示すＦＩＤ管理テーブル１７を利用して、受信フレームがバックトラックフレームであるか否かを判定してもよい。例えば、受信フレームのヘッダに格納されているＧＳおよびＦＩＤの組がＦＩＤ管理テーブル１７に登録されており、且つ、その組に対応するレコードに記録されているＬＤが受信フレームのヘッダに格納されているＬＳと一致するときに、フレーム処理部１３は、受信フレームがバックトラックフレームである判定する。ただし、フレーム処理部１３は、他の方法で受信フレームがバックトラックフレームであるか否かを判定してもよい。
【００７１】
受信フレームがバックトラックフレームではないときは、無線通信装置１の処理はＳ１３へ進む。Ｓ１３において、フレーム処理部１３は、受信フレームのヘッダに格納されているＧＤを参照することにより、受信フレームの最終的な宛先が他のノードであるか否かを判定する。受信フレームの最終的な宛先が自ノード（すなわち、無線通信装置１）であるときは、フレーム処理部１３は、Ｓ１４において、受信フレームを上位レイヤ処理部１４に渡す。そうすると、上位レイヤ処理部１４は、受信フレームを処理する。
【００７２】
受信フレームの最終的な宛先が他のノードであるときは、フレーム処理部１３は、Ｓ１５において、受信フレームのヘッダに格納されているホップカウント値ＬＨを１だけデクリメントする。すなわち、ＬＨ＝ＬＨ−１が実行される。
【００７３】
Ｓ１６において、ループチェック部１８は、受信フレームのヘッダに格納されているループ検出配列ＬＢおよび無線通信装置１のループ検出ビット（自ノードのループ検出ビット）を利用して、受信フレームが伝送されてきた経路がループであるか否かを判定する。ループ判定方法については、後で詳しく説明する。
【００７４】
受信フレームが伝送されてきた経路がループであると判定されたときは、フレーム処理部１３は、Ｓ１７において、受信フレームの送信元の隣接ノードへ返送するフレーム（すなわち、バックトラックフレーム）を生成する。バックトラックフレームは、受信フレームのヘッダに格納されている「ＬＳ」と「ＬＤ」とを相互に入れ替えることにより生成される。
【００７５】
受信フレームが伝送されてきた経路がループでないと判定されたときは、フレーム処理部１３は、Ｓ１８において、受信フレームの最終的な宛先に基づいて、そのフレームを転送すべき隣接ノード（すなわち、ＬＤ）を決定する。このとき、ＬＤは、図４（ｂ）に示す優先度テーブル１６を参照することにより決定される。すなわち、フレームの宛先（すなわち、ＧＤ）に対して最も高い優先度が与えられている隣接ノードが選択される。
【００７６】
Ｓ１９において、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨがゼロであるか否かを判定する。ホップカウント値ＬＨがゼロであるときは、ホップカウント値ＬＨが初期化されたノードからのホップ数が閾値（この例では、１０）に達したと判定される。この場合、フレーム処理部１３は、Ｓ２０において、受信フレームに付与されているホップカウント値ＬＨおよびループ検出配列ＬＢを初期化する。すなわち、ホップカウント値ＬＨは、１０に初期化される。また、ループ検出配列ＬＢのすべてのビットがゼロに初期化される。なお、受信フレームに付与されているホップカウント値ＬＨがゼロでないときは、Ｓ２０の処理はスキップされる。
【００７７】
Ｓ２１において、フレーム処理部１３は、受信フレームに付与されているループ検出ビットＬＢに、無線通信装置１のＭＡＣアドレスに基づいて生成されるループ検出ビットを追加する。なお、図１０のＳ４および図１１のＳ２１は、実質的に同じなので、ここでは説明を省略する。
【００７８】
Ｓ２２において、送信部１９は、Ｓ１１〜Ｓ２１、Ｓ３１〜Ｓ３３により得られるフレームを隣接ノードへ送信する。すなわち、フレームは、図６に示す無線送受信モジュール２３を介して隣接ノードへ送信される。
【００７９】
受信フレームがバックトラックフレームであったときは、無線通信装置１の処理はＳ３１へ進む。Ｓ３１において、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨおよびループ検出配列ＬＢを初期化する。すなわち、ホップカウント値ＬＨは、１０に初期化される。また、ループ検出配列ＬＢのすべてのビットがゼロに初期化される。
【００８０】
Ｓ３２において、フレーム処理部１３は、バックトラックフレームの送信元の隣接ノードを優先度テーブル１６から削除する。無線通信装置１は、優先度テーブル１６に登録されていない隣接ノードに受信フレームを転送することはない。なお、フレーム処理部１３は、バックトラックフレームの送信元の隣接ノードの優先度が低くなるように、優先度テーブル１６を更新してもよい。
【００８１】
Ｓ３３において、フレーム処理部１３は、受信フレームの最終的な宛先に基づいて、そのフレームを転送すべき隣接ノード（すなわち、ＬＤ）を決定する。このとき、ＬＤは、図４（ｂ）に示す優先度テーブル１６を参照することにより決定される。具体的には、先に選択した隣接ノードの次に優先度の高い隣接ノードが選択される。
【００８２】
このように、無線通信装置１は、受信フレームを宛先ノードへ向けて転送するときに、ホップカウント値ＬＨおよびビット検出配列ＬＢを更新する。ここで、ホップカウント値ＬＨの設定および更新は、以下の通りである。
（１）送信元ノードの無線通信装置は、ホップカウント値ＬＨを「１０」に初期化する。
（２）フレームを受信した無線通信装置は、受信フレームのホップカウント値ＬＨを１だけデクリメントする。
（３）受信フレームのホップカウント値ＬＨがゼロであったときは、無線通信装置は、ホップカウント値ＬＨを「１０」に初期化する。
【００８３】
また、ループ検出配列ＬＢの設定および更新は、以下の通りである。
（１）各無線通信装置は、ハッシュ関数に自分のＭＡＣアドレスを与えることによりハッシュ値を生成する。ハッシュ値は、ループ検出配列ＬＢの中のビットを指定する。以下の記載では、自分のＭＡＣアドレスに対応するハッシュ値により指定されるビットを「自ビット」と呼ぶことがある。
（２）送信元ノードの無線通信装置は、ループ検出配列ＬＢの各ビットを「０（未使用）」に初期化する。
（３）送信元ノードの無線通信装置は、ループ検出配列ＬＢにおいて自ビットを「１（使用中）」に更新する。
（４）フレームを受信した無線通信装置は、受信フレームのビット検出配列ＬＢにおいて自ビットが使用中であるか否かをチェックする。
（５）受信フレームのビット検出配列ＬＢにおいて自ビットが使用中であれば、無線通信装置は、受信フレームが伝送されてきた経路がループであると判定する。この場合、受信フレームは、受信フレームの送信元の隣接ノードへ返送される（バックトラック）。また、ホップカウント値ＬＨおよびループ検出配列ＬＢは、初期化される。
（６）受信フレームのビット検出配列ＬＢにおいて自ビットが使用中でなければ、無線通信装置は、受信フレームが伝送されてきた経路がループでないと判定する。この場合、無線通信装置は、ビット検出配列ＬＢに自ビットを追加した後、受信フレームを転送する。
【００８４】
なお、フレーム処理部１３の中に設けられる更新部１３ａは、ループ検出配列ＬＢおよびホップカウント値ＬＨを更新することができる。すなわち、図１１に示すフローチャートのＳ１５、Ｓ２０、Ｓ２１、Ｓ３１は、更新部１３ａにより実行される。また、ループチェック部１８の中に設けられる指定部１８ａは、無線通信装置１を識別する識別情報に基づいて、受信フレームに付与されているループ検出配列ＬＢの中のビットを指定する。この例では、指定部１８ａは、ハッシュ関数を利用してハッシュ値を生成することによって、ループ検出配列ＬＢの中のビットを指定する。さらに、ループチェック部１８の中に設けられる判定部１８ｂは、受信フレームが伝送されてきた経路がループであるか否かを判定する。すなわち、図１１に示すフローチャートのＳ１６は、判定部１８ｂにより実行される。
【００８５】
図１２は、ループ判定方法の一例を示す。この処理は、図１１のＳ１６の一例に相当する。なお、図１２に示す例では、ループ検出配列ＬＢの長さは、８ビットである。ループ検出ビットは、２ビットである。すなわち、各無線通信装置において、２個のハッシュ関数を利用して２個のハッシュ値が生成される。
【００８６】
無線通信装置１は、予めローカル配列を生成しておく。ローカル配列の長さは、ループ検出配列ＬＢと同じである。ローカル配列の各ビットは「ゼロ」である。ただし、ハッシュ値により指定されるビットは「１」である。この例では、２個のハッシュ値は、「１」および「３」である。よって、ローカル配列は、図１２に示すように、「１０１０００００」である。なお、ローカル配列は、例えば、ループチェック部１８により生成され、ループチェック部１８の中に格納される。
【００８７】
図１２（ａ）に示す例では、無線通信装置１が受信したフレームに付与されているループ検出配列ＬＢは、「０１０１１１００」である。無線通信装置１がフレームを受信すると、ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢを取得する。そして、ループチェック部１８は、ループ検出配列ＬＢとローカル配列との間でビット毎にＡＮＤ演算を実行する。この例では、演算結果配列「００００００００」が得られる。
【００８８】
ループチェック部１８は、上述のＡＮＤ演算の結果に基づいてループ判定を行う。具体的には、ループチェック部１８は、演算結果配列中の「１」の個数をカウントする。そして、演算結果配列中の「１」の個数とハッシュ関数の個数とが一致していなければ、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。
【００８９】
図１２（ｂ）に示す例では、無線通信装置１が受信したフレームに付与されているループ検出配列ＬＢは、「１０１０１１００」である。この場合、ループ検出配列ＬＢとローカル配列との間でＡＮＤ演算が実行されると、演算結果配列「１０１０００００」が得られる。そして、演算結果配列中の「１」の個数は、２個であり、ハッシュ関数の個数と一致する。そうすると、ループチェック部１８は、受信フレームが伝送されてきた経路がループであると判定する。
【００９０】
このように、受信フレームに付与されているループ検出配列ＬＢにおいて、ｋ個のハッシュ関数により指定されるすべてのビットが「１（使用中）」であるときに、無線通信装置は、ループが発生していると判定する。各無線通信装置は、受信フレームを転送するときに、ループ検出配列ＬＢに自ビットを追加する。このため、送信元ノードからのホップ数が大きいノードにおいては、ループ検出配列ＬＢの中の多くのビットが使用中となっているので、ハッシュ値の衝突（または、ブルームフィルタの偽陽性）に起因する誤検出が生じる確率が高くなる。
【００９１】
そこで、無線アドホックネットワークにおいて伝送されるフレームには、ホップ数をカウントするためのホップカウント値ＬＨが付与されている。各無線通信装置は、受信フレームに付与されているホップカウント値ＬＨを参照することにより、各受信フレームについて、送信元ノード（または、ホップカウント値ＬＨを初期化した中継ノード）からのホップ数を検出する。そして、このホップ数が所定の閾値（上述の例では、１０）に達すると、無線通信装置は、ループ検出配列ＬＢを初期化する。したがって、ハッシュ値の衝突（または、ブルームフィルタの偽陽性）に起因する誤検出は抑制される。
【００９２】
図１３は、ビット検出配列を更新する方法の一例を示す。この処理は、図１１のＳ２１の一例に相当する。なお、図１３に示す例でも、ループ検出配列ＬＢの長さは、８ビットである。また、各無線通信装置において、２個のハッシュ関数を利用して２個のハッシュ値が生成される。
【００９３】
フレーム処理部１３は、ループ検出配列ＬＢとローカル配列との間でビット毎にＯＲ演算を実行する。この例では、「０１０１１１００」と「１０１０００００」との間でＯＲ演算を実行することにより演算結果配列「１１１１１１００」が得られている。この演算結果配列は、受信フレームに付与されているループ検出配列ＬＢに自ビットを追加した状態を表している。したがって、フレーム処理部１３は、受信フレームを転送するときは、受信フレームに付与されているループ検出配列ＬＢを演算結果配列に更新する。このようにして、無線通信装置１は、自ビットが追加されたループ検出配列ＬＢを含むフレームを宛先へ向けて送信する。
【００９４】
＜第１の実施例＞
第１の実施例では、無線アドホックネットワークは、図１４に示すように、ノードＡ〜Ｇを含む。ノードＡ〜Ｇには、それぞれ本発明の実施形態の無線通信装置が設けられている。ノードＡ〜Ｇに設けられている無線通信装置を、それぞれ無線通信装置Ａ〜Ｇと呼ぶことがある。
【００９５】
フレームに付与されるループ検出配列ＬＢの長さは、７ビットである。フレームに付与されるホップカウント値ＬＨの初期値は、５である。無線通信装置Ａ〜Ｇは、それぞれ自分のＭＡＣアドレスをハッシュ関数に与えることによりハッシュ値を生成する。ここで、無線通信装置Ａ〜Ｇは、同じハッシュ関数を使用してそれぞれハッシュ値を生成する。無線通信装置Ａ〜Ｇは、それぞれ予めローカル配列を生成して保持する。ローカル配列の長さは、ループ検出配列ＬＢと同じであり、７ビットである。また、ローカル配列は、ＭＡＣアドレスに基づいて生成されたハッシュ値を表す。例えば、無線通信装置Ａにおいて生成されるハッシュ値は、「第５ビット」を指定する。この場合、無線通信装置Ａのローカル配列は、図１４に示すように、「００００１００」である。また、無線通信装置Ｂにおいて生成されるハッシュ値は、「第７ビット」を指定する。この場合、無線通信装置Ｂのローカル配列は、図１４に示すように、「００００００１」である。
【００９６】
第１の実施例では、ノードＡに設けられている無線通信装置Ａは、ノードＧへデータを送信する。以下、無線アドホックネットワークにおいてノードＡから送信されるフレームがノードＧまで転送されるシーケンスを説明する。
【００９７】
ステップ１：無線通信装置Ａは、図１０に示すフローチャートに従ってフレームを生成する。フレームの宛先（ＧＤ）は、ノードＧである。フレームの送信先の隣接ノード（ＬＤ）は、ノードＢである。ホップカウント値ＬＨは、「５」に初期化される。ループ検出配列ＬＢは、「０００００００」に初期化される。この後、フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。一例としては、ループ検出配列ＬＢ「０００００００」とローカル配列「００００１００」との間でビット毎にＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「００００１００」が生成される。そして、無線通信装置Ａは、「ＬＨ＝５」および「ＬＢ＝００００１００」が付与されたフレームをノードＢへ送信する。
【００９８】
ステップ２：無線通信装置Ｂは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「５」から「４」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「００００１００」と無線通信装置Ｂのローカル配列「００００００１」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＣ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「００００１００」とローカル配列「００００００１」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「００００１０１」が生成される。そして、無線通信装置Ｂは、「ＬＨ＝４」および「ＬＢ＝００００１０１」が付与されたフレームをノードＣへ送信する。
【００９９】
ステップ３：無線通信装置Ｃは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「４」から「３」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「００００１０１」と無線通信装置Ｃのローカル配列「１００００００」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＤ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「００００１０１」とローカル配列「１００００００」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「１０００１０１」が生成される。そして、無線通信装置Ｃは、「ＬＨ＝３」および「ＬＢ＝１０００１０１」が付与されたフレームをノードＤへ送信する。
【０１００】
ステップ４：無線通信装置Ｄは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「３」から「２」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「１０００１０１」と無線通信装置Ｄのローカル配列「０１０００００」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＥ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「１０００１０１」とローカル配列「０１０００００」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「１１００１０１」が生成される。そして、無線通信装置Ｄは、「ＬＨ＝２」および「ＬＢ＝１１００１０１」が付与されたフレームをノードＥへ送信する。
【０１０１】
ステップ５：無線通信装置Ｅは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「２」から「１」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「１１００１０１」と無線通信装置Ｅのローカル配列「００１００００」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＡ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「１１００１０１」とローカル配列「００１００００」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「１１１０１０１」が生成される。そして、無線通信装置Ｅは、「ＬＨ＝１」および「ＬＢ＝１１１０１０１」が付与されたフレームをノードＡへ送信する。
【０１０２】
ステップ６：無線通信装置Ａは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「１」から「０」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「１１１０１０１」と無線通信装置Ａのローカル配列「００００１００」との間でＡＮＤ演算を実行し、演算結果配列「００００１００」を得る。この演算結果配列は無線通信装置Ａのローカル配列を含んでいるので、ループチェック部１８は、受信フレームが伝送されてきた経路がループであると判定する。受信フレームが伝送されてきた経路がループであると判定されたときは、無線通信装置Ａは、バックトラックを実行する。具体的には、無線通信装置Ａは、ノードＥから受信したフレームをノードＥへ返送する。このとき、無線通信装置Ａは、「ＬＨ＝０」および「ＬＢ＝１１１０１０１」が付与されたフレームをノードＥへ返送する。
【０１０３】
ステップ７：無線通信装置Ｅは、図１１に示すフローチャートに従って受信フレームを処理する。ここで、無線通信装置Ｅが受信したフレームは、バックトラックフレームである。よって、図１１に示すフローチャートのＳ３１〜Ｓ３３が実行される。具体的には、フレーム処理部１３は、ホップカウント値ＬＨを「５」に初期化し、ループ検出配列ＬＢを「０００００００」に初期化する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。このとき、ステップ５で選択されたノードＡが優先度テーブル１６から削除され、次の隣接ノードが選択される。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＦ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、初期化されたループ検出配列ＬＢ「０００００００」と無線通信装置Ｅのローカル配列「００１００００」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「００１００００」が生成される。そして、無線通信装置Ｅは、「ＬＨ＝５」および「ＬＢ＝００１００００」が付与されたフレームをノードＦへ送信する。
【０１０４】
ステップ８：無線通信装置Ｆは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「５」から「４」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「００１００００」と無線通信装置Ｆのローカル配列「０００００１０」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＧ」に対して「ＬＤ＝ノードＧ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「００１００００」とローカル配列「０００００１０」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「００１００１０」が生成される。そして、無線通信装置Ｅは、「ＬＨ＝４」および「ＬＢ＝００１００１０」が付与されたフレームをノードＧへ送信する。
【０１０５】
ステップ９：無線通信装置Ｇは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームの宛先がノードＧであることを検出すると、そのフレームのペイロードに格納されているデータを上位レイヤ処理部１４に渡す。
【０１０６】
このように、本発明の実施形態の無線通信装置１は、フレームに付与されるビット検出配列ＬＢを利用して、フレームが伝送される経路がループであるか否かを判定することができる。よって、無線通信装置１は、ループ判定を行うために、過去に送信または転送したフレームを長い期間に渡って管理する必要はない。したがって、従来技術と比較して、ループ判定を行うためのメモリの容量を削減可能である。
【０１０７】
なお、ネットワーク内でフレームが転送されるときに、各ノードにおいてフレームのヘッダにノードＩＤがそれぞれ付与される方法であっても、ループ判定を行うことは可能である。ただし、この方法では、ヘッダ長が変化するので、各ノードにおけるフレーム処理が複雑になる。また、ホップ数が大きくなると、ヘッダが長くなるので、データ伝送効率が悪くなる。
【０１０８】
＜第２の実施例＞
無線アドホックネットワークの構成は、第１の実施例および第２の実施例においてほぼ同じである。ただし、第２の実施例では、無線アドホックネットワークは、図１５に示すように、ノードＡ〜Ｇに加えてノードＨを含む。
【０１０９】
無線通信装置Ｇにおいて生成されるハッシュ値は、無線通信装置Ｂにおいて生成されるハッシュ値と同じであり、「第７ビット」を指定する。よって、無線通信装置Ｇのローカル配列は、図１５に示すように、「００００００１」である。すなわち、ノードＢ、Ｇのハッシュ値は衝突する。この場合、偽陽性に起因する誤判定が生じるおそれがある。
【０１１０】
この問題に対処するために、本発明の実施形態の無線通信方法では、フレームにホップカウント値ＬＨが付与される。そして、このホップカウント値ＬＨに基づいてループ検出配列ＬＢを初期化することにより、偽陽性に起因する誤判定が抑制される。以下、無線アドホックネットワークにおいてノードＡから送信されるフレームがノードＨまで転送されるシーケンスを説明する。
【０１１１】
ステップ１〜４の処理は、第１の実施例および第２の実施例において実質的に同じである。すなわち、無線通信装置Ｅは、「ＬＨ＝２」および「ＬＢ＝１１００１０１」が付与されたフレームをノードＤから受信する。ただし、第２の実施例では、フレームの宛先はノードＨである。
【０１１２】
ステップ５：無線通信装置Ｅは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「２」から「１」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「１１００１０１」と無線通信装置Ｅのローカル配列「００１００００」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＨ」に対して「ＬＤ＝ノードＦ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「１１００１０１」とローカル配列「００１００００」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「１１１０１０１」が生成される。そして、無線通信装置Ｅは、「ＬＨ＝１」および「ＬＢ＝１１１０１０１」が付与されたフレームをノードＦへ送信する。
【０１１３】
ステップ６：無線通信装置Ｆは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「１」から「０」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「１１１０１０１」と無線通信装置Ｆのローカル配列「０００００１０」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＨ」に対して「ＬＤ＝ノードＧ」が得られるものとする。ただし、ホップカウント値ＬＨは「０」に更新されている。よって、フレーム処理部１３は、ホップカウント値ＬＨを「５」に初期化し、ループ検出配列ＬＢを「０００００００」に初期化する。その後、フレーム処理部１３は、初期化されたループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「０００００００」とローカル配列「０００００１０」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「０００００１０」が生成される。そして、無線通信装置Ｅは、「ＬＨ＝５」および「ＬＢ＝０００００１０」が付与されたフレームをノードＧへ送信する。
【０１１４】
ステップ７：無線通信装置Ｇは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームに付与されているホップカウント値ＬＨを「５」から「４」にデクリメントする。ループチェック部１８は、受信フレームに付与されているループ検出配列ＬＢ「０００００１０」と無線通信装置Ｇのローカル配列「００００００１」との間でＡＮＤ演算を実行し、演算結果配列「０００００００」を得る。この演算結果配列は「１」を含んでいないので、ループチェック部１８は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部１３は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「ＧＤ＝ノードＨ」に対して「ＬＤ＝ノードＨ」が得られるものとする。フレーム処理部１３は、ループ検出配列ＬＢに自ビットを追加する。ここでは、ループ検出配列ＬＢ「０００００１０」とローカル配列「００００００１」との間でＯＲ演算を実行することにより、更新されたループ検出配列ＬＢ「０００００１１」が生成される。そして、無線通信装置Ｇは、「ＬＨ＝４」および「ＬＢ＝０００００１１」が付与されたフレームをノードＨへ送信する。
【０１１５】
ステップ８：無線通信装置Ｈは、図１１に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部１３は、受信フレームの宛先がノードＨであることを検出すると、そのフレームのペイロードに格納されているデータを上位レイヤ処理部１４に渡す。
【０１１６】
このように、無線通信装置１は、送信元ノードからのホップ数が所定値に達すると、フレームに付与されているループ検出配列ＬＢを初期化する。図１５に示す例では、ノードＡから５ホップ離れたノードＦにおいてループ検出配列ＬＢが初期化されている。このため、無線通信装置Ｂにおいて生成されるハッシュ値および無線通信装置Ｇにおいて生成されるハッシュ値が互いに同じあっても、無線通信装置Ｇにおいて誤ったループ判定結果が回避されている。すなわち、ブルームフィルタの偽陽性に起因する誤判定が抑制される。
【符号の説明】
【０１１７】
１  無線通信装置
１１  受信部
１２  バッファ部
１３  フレーム処理部
１３ａ  更新部
１４  上位レイヤ処理部
１５  隣接ノード管理テーブル
１６  優先度テーブル
１７  ＦＩＤ管理テーブル
１８  ループチェック部
１８ａ  指定部
１８ｂ  判定部
１９  送信部
２１  プロセッサ
２２  メモリ
２３  無線送受信モジュール
【図１】
0006459558.tif 000002
【図２】
0006459558.tif 000003
【図３】
0006459558.tif 000004
【図４】
0006459558.tif 000005
【図５】
0006459558.tif 000006
【図６】
0006459558.tif 000007
【図７】
0006459558.tif 000008
【図８】
0006459558.tif 000009
【図９】
0006459558.tif 000010
【図１０】
0006459558.tif 000011
【図１１】
0006459558.tif 000012
【図１２】
0006459558.tif 000013
【図１３】
0006459558.tif 000014
【図１４】
0006459558.tif 000015
【図１５】
0006459558.tif 000016