図1は、本発明の1つの実施形態に係わる無線アドホックネットワークにおけるフレーム転送の一例を示す。この例では、無線アドホックネットワークは、ノードN1〜N7を含む。各ノードには、それぞれ無線通信装置が設けられている。なお、以下の記載では、ノードN1〜N7に設けられている無線通信装置を、それぞれ無線通信装置N1〜N7と呼ぶことがある。また、ノード間を接続する実線は、無線リンクを表す。
無線通信装置は、隣接ノードへフレームを送信することができる。また、隣接ノードからフレームを受信した無線通信装置は、その受信フレームを他の隣接ノードへ転送することができる。このとき、無線通信装置は、フレームの宛先に基づいてそのフレームを送信または転送すべき隣接ノードを決定する。すなわち、フレームが伝送される経路は、無線アドホックネットワーク内の各無線通信装置により自律的に決定される。
図1に示す例では、ノードN1に設けられている無線通信装置(すなわち、無線通信装置N1)がフレームを生成して宛先へ送信する。この例では、フレームの宛先は、ノードN7である。なお、以下の記載では、フレームが生成されるノードを「送信元ノード(GS:Global Source)」と呼ぶことがある。また、そのフレームの最終的な宛先を「宛先ノード(GD:Global Destination)」と呼ぶことがある。
S101〜S103において、無線通信装置N1により生成されたフレームは、ノードN2、ノードN3によりノードN4へ転送される。無線通信装置N4は、S104において、受信フレームをノードN7へ転送しようとする。しかし、ノードN4、N7間の無線リンクの品質が悪く、ノードN4から送信されるフレームはノードN7には到達しない。この場合、無線通信装置N4は、ノードN7からACKフレームを受信しないので、ノードN7へのフレーム送信が失敗したことを検出する。そうすると、無線通信装置N4は、他の経路を利用してフレームを転送する。
S105〜S106において、ノードN4からノードN5を経由してノードN3へフレームが転送される。ところが、無線通信装置N3がノードN5から受信するフレームは、無線通信装置N3が先にノードN4へ送信したフレームである。この場合、無線通信装置N3は、受信フレームが伝送されてきた経路がループであると判定する。そして、無線通信装置N3は、受信フレームを、その受信フレームの送信元の隣接ノードへ返送する。この例では、無線通信装置N3は、S107において、受信フレームをノードN5へ返送する。以下の記載では、ループ検出に起因して無線通信装置が受信フレームをその受信フレームの送信元の隣接ノードへ返送する動作を「バックトラック」と呼ぶことがある。
以下、同様に、フレームを受信した無線通信装置は、そのフレームの宛先に基づいてそのフレームを転送する隣接ノードを決定する。すなわち、S108〜S112において、ノードN5からノードN4、N3、N2、N6を経由してノードN7へフレームが転送される。
図2は、無線アドホックネットワークにおいて使用されるフレームのフォーマットの一例を示す。この例で使用されるフレームは、LDフィールド、LSフィールド、GDフィールド、GSフィールド、FIDフィールド、タイプフィールド、LHフィールド、LBフィールド、長さフィールド、ペイロードを含む。
LD(Local Destination)フィールドには、送信先の隣接ノードを識別する情報が格納される。また、LS(Local Source)フィールドには、送信元の自ノードの情報が格納される。例えば、図1に示すS101においてノードN1からノードN2へ伝送されるフレームにおいては、「LD=N2」「LS=N1」が設定される。また、S102おいてノードN2からノードN3へ伝送されるフレームにおいては、「LD=N3」「LS=N2」が設定される。すなわち、LDフィールドおよびLSフィールドは、フレームを転送するノードにおいて更新される。
GDフィールドには、フレームの最終的な宛先ノードを識別するGD情報が格納される。GSフィールドには、フレームを生成したノードを識別するGS情報が格納される。図1に示す例では、ノードN1から送信されるフレームに「GD=N7」「GS=N1」が設定される。なお、GDフィールドおよびGSフィールドは、フレームが伝送されている途中で更新されることはない。
FID(Frame Identifier)フィールドには、無線アドホックネットワーク内で各フレームを識別するFIDが格納される。FIDは、GSノードにおいて送信フレームに付与され、そのフレームが伝送されている途中で更新されることはない。よって、無線アドホックネットワーク内で伝送される各フレームは、GSおよびFIDの組合せにより一意に識別される。なお、FIDは、例えば、シーケンス番号により実現される。
タイプフィールドには、フレームの種別を表すタイプ情報が格納される。例えば、タイプ情報は、ユーザデータを格納するデータフレーム、フレーム受信を通知するACKフレームなどを表すことができる。
LH(Loop Hop)フィールドには、フレーム転送のホップ数をカウントするためホップカウント値が格納される。なお、LHフィールドには、GSノードにおいて、ホップカウント値の初期値が設定される。そして、ホップカウント値は、無線通信装置によりフレームが転送されるときにインクリメントまたはデクリメントされる。例えば、図1に示すノードN1から送信されるフレームに「ホップカウント値=10」が付与されるものとする。この場合、ホップカウント値は、ノードN2において「9」へ更新され、ノードN3において「8」へ更新される。
ホップカウント値は、送信元ノードからのホップ数が所定数に到達したときに、リセットされて初期値に戻る。上述の例では、ホップカウント値が「10」から1ずつデクリメントされて「0」に到達すると、ホップカウント値はリセットされて「10」に戻る。したがって、あるノードにおいてホップカウント値が初期化されたときは、ホップカウント値は、ホップカウント値を初期化したノードからのホップ数を表す。
なお、ホップカウント値の初期値および更新方法は、上述の例に限定されるものではない。例えば、ホップカウント値の初期値は、ゼロであってもよい。この場合、無線通信装置によりフレームが転送されるときに、ホップカウント値はインクリメントされる。そして、ホップカウント値が「ゼロ」から1ずつインクリメントされて「10」に到達したときに、ホップカウント値はリセットされて「ゼロ」に戻る。
LB(Loop detection Bit)フィールドには、予め決められた長さのループ検出配列が格納される。初期状態においては、ループ検出配列のすべてのビットにゼロが設定される。各無線通信装置は、受信フレームに付与されているループ検出配列において、自ノードに対応する1または複数のビットを「0」から「1」に更新する。そして、ループ検出配列は、フレームが伝送される経路がループであるか否かを判定するために使用される。すなわち、無線通信装置は、受信フレームに付与されているループ検出配列を利用して、そのフレームが伝送されてきた経路がループであるか否かを判定する。ループ検出配列を利用してループを検出する方法については、後で詳しく説明する。
なお、ループ検出配列は、ループ判定のためのビット列の一例である。したがって、無線通信装置は、ループ判定を実行するために、必ずしも「配列」を使用しなくてもよい。すなわち、無線通信装置は、受信フレームに付与されているループ検出のためのビット列を利用して、そのフレームが伝送されてきた経路がループであるか否かを判定することができる。
長さフィールドには、ペイロードの長さを表す情報が格納される。ペイロードには、データが格納される。なお、無線アドホックネットワークにおいて伝送されるフレームは、他の情報要素を含んでいてもよい。
図3は、無線アドホックネットワークにおいて使用される無線通信装置の機能の一例を示す。無線通信装置1は、図3に示すように、受信部11、バッファ部12、フレーム処理部13、上位レイヤ処理部14、隣接ノード管理テーブル15、優先度テーブル16、FID管理テーブル17、ループチェック部18、送信部19を有する。ただし、無線通信装置1は、図3に示していない他の機能をさらに備えていてもよい。
受信部11は、他の無線通信装置からフレームを受信する。受信部11により受信されたフレームは、いったんバッファ部12に格納される。なお、受信部11は、無線送受信モジュール内の受信器に接続されている。また、バッファ部12は、例えば、半導体メモリにより実現される。
フレーム処理部13は、受信フレームを処理する。受信フレームの宛先が無線通信装置1であるときは、フレーム処理部13は、受信フレームを上位レイヤ処理部14に導く。一方、受信フレームの宛先が無線通信装置1でないときは、フレーム処理部13は、受信フレームの宛先(すなわち、GD)に基づいて、その受信フレームを転送すべき隣接ノード(すなわち、LD)を決定する。なお、無線通信装置1がフレームを生成して送信するときは、フレーム処理部13は、新たなフレームを生成することができる。なお、フレーム処理部13は、後述する更新部13aを含む。
上位レイヤ処理部14は、受信フレームのペイロードに格納されているデータを処理する。また、上位レイヤ処理部14は、無線通信装置1から送信されるデータを生成することができる。上位レイヤ処理部14により生成されるデータは、フレーム処理部13により送信フレームのペイロードに格納される。
図4(a)は、隣接ノード管理テーブル15の一例を示す。隣接ノード管理テーブル15には、無線通信装置1に隣接するノードを識別するノードIDが登録される。ここで、無線通信装置1は、隣接ノードを検出する機能を備えているものとする。例えば、無線通信装置1は、定期的に、隣接ノードの存在を確認する。そして、新たな隣接ノードが検出されたときは、その新たな隣接ノードが隣接ノード管理テーブル15に登録される。尚、図4(a)は、図1の無線通信装置N4に設けられる隣接ノード管理テーブル15を示している。よって、この隣接ノード管理テーブル15には、ノードN3、N5、N7が登録されている。
図4(b)は、優先度テーブル16の一例を示す。優先度テーブル16には、宛先(すなわち、GD)ごとに、受信フレームを転送すべき隣接ノード(すなわち、LD)が登録されている。具体的には、優先度テーブル16には、各GDに対して、優先度の高い所定数のLDが登録される。そして、フレーム処理部13は、この優先度テーブル16を参照して、受信フレームを転送すべき隣接ノードを決定する。
なお、図4(b)は、図1の無線通信装置N4に設けられる優先度テーブル16を示している。したがって、受信フレームの宛先がノードN7であるときは、無線通信装置N4は、優先度テーブル16を参照して「LD=N7」を得る。そうすると、無線通信装置N4は、受信フレームをノードN7へ転送する。ただし、図1に示す例では、ノードN4からノードN7へのフレーム送信は失敗している。このため、無線通信装置N4は、優先度テーブル16を参照して2番目に優先度の高い隣接ノードを選択する。この結果、無線通信装置N4は、受信フレームをノードN5へ転送する。
図5は、FID管理テーブル17の一例を示す。FID管理テーブル17には、無線通信装置1が先に送信または転送したフレームを管理するための情報が格納される。また、FID管理テーブル17のレコードは、FIDおよびGSの組合せに対して生成される。そして、無線通信装置1がフレームを送信または転送するときに、そのフレームのヘッダに設定されているFID、GS情報、LD情報、ホップカウント値がそれぞれFID管理テーブル17のFIDフィールド、GSフィールド、LDフィールド、HOPフィールドに書き込まれる。OLS(Original LS)フィールドには、受信フレームの送信元の隣接ノードを表すノードIDが書き込まれる。さらに、FID管理テーブル17には、各レコードが最後に更新された時刻が記録される。
フレームの伝送経路にループが発生したときには、無線通信装置1が先に送信または転送したフレームが、その無線通信装置1に戻ってくる。この場合、無線通信装置1に戻ってきたフレームのFIDおよびGSの組は、FID管理テーブル17に登録されている。このため、無線通信装置1に戻ってきたフレームに対して新たなレコードは生成されず、先に生成されている対応するレコードにおいてLDフィールドおよびHOPフィールドが更新される。ただし、無線通信装置1にフレームが戻ってきたときに、OLSフィールドは更新されない。すなわち、OLSフィールドに格納されているノードIDは、無線通信装置1があるフレームを最初に受信したときの、そのフレームの送信元の隣接ノードを表す。
上述のように、FID管理テーブル17には、無線通信装置1が送信または転送したフレームを管理するための情報が格納される。よって、無線通信装置1は、FID管理テーブル17を利用してループを検出することができる。例えば、受信フレームのFIDおよびGSの組が既にFID管理テーブル17に登録されているときは、無線通信装置1は、ループが発生していると判定することができる。
但し、この方法で無線アドホックネットワークのループを精度よく検出するためには、比較的長い期間に渡って送信フレームおよび転送フレームを管理する必要がある。一例としては、無線アドホックネットワークの最大ホップ数に対応する時間に渡って、各フレームを管理することが要求される。このため、FID管理テーブル17のサイズが大きくなってしまう。したがって、本発明の実施形態の無線通信装置1は、メモリ容量を削減するために、後述する他の方法で無線アドホックネットワークのループを検出する。
なお、無線通信装置1は、受信フレームがバックトラックにより隣接ノードから返送されてきたフレーム(以下、バックトラックフレーム)であるか否かを判定するために、FID管理テーブル17を使用してもよい。ここで、バックトラックは、無線通信装置Xから無線通信装置Yへフレームが送信され、そのフレームが無線通信装置Yから無線通信装置Xへ直接返送される動作を意味する。ここで、無線通信装置X、Yは互いに隣接している。このため、無線通信装置Xが無線通信装置Yへフレームを送信したときから、無線通信装置Xが無線通信装置Yからバックトラックフレームを受信するまでに要する時間は、無線アドホックネットワーク内でフレームが2ホップだけ伝送される時間に相当し、非常に短い。したがって、バックトラックフレームを検出する目的でFID管理テーブル17を使用する場合、無線通信装置1が送信または転送したフレームを、FID管理テーブル17を用いて管理すべき期間は、比較的短くてもよい。すなわち、ループ判定のために使用する場合と比較して、バックトラックフレームを検出するために使用する場合は、FID管理テーブル17のサイズは十分に小さい。
ループチェック部18は、無線通信装置1がフレームを受信したときに、そのフレームが伝送されてきた経路がループであるか否かを判定する。ここで、ループチェック部18は、後述する指定部18aおよび判定部18bを含む。そして、ループチェック部18による判定結果は、フレーム処理部13に通知される。なお、フレーム処理部13は、上述したように、受信フレームの宛先(即ち、GD)に基づいて、その受信フレームを転送すべき隣接ノード(即ち、LD)を決定する。但し、受信フレームが伝送されてきた経路がループであるとループチェック部18により判定されたときは、フレーム処理部13は、その受信フレームの送信元の隣接ノードへ受信フレームを返送する。すなわち、バックトラックが実行される。図1に示す例では、無線通信装置N3は、S106においてループを検出すると、受信フレームをノードN5へ返送する。
送信部19は、フレーム処理部13により生成または更新されたフレームを隣接ノードへ送信する。このとき、送信部19は、フレームのヘッダに設定されているLDにより指定される隣接ノードへフレームを送信する。なお、フレーム処理部13により更新されたフレームを隣接ノードへ送信する動作は、上述したバックトラックを含む。
図6は、無線通信装置1のハードウェア構成の一例を示す。無線通信装置1は、図6に示すように、プロセッサ21、メモリ22、無線送受信モジュール23を含む。プロセッサ21、メモリ22、無線送受信モジュール23は、例えば、バス24により接続されている。なお、無線通信装置1は、図6に示していない他の回路要素をさらに備えていてもよい。
プロセッサ21は、与えられたプログラムを実行することにより、図3に示す受信部11、フレーム処理部13、上位レイヤ処理部14、ループチェック部18、送信部19の機能を提供することができる。ただし、受信部11、フレーム処理部13、上位レイヤ処理部14、ループチェック部18、送信部19の機能の一部は、ハードウェア回路で実現してもよい。
メモリ22は、プロセッサ21により実行されるプログラムを格納することができる。また、メモリ22は、バッファ部12を提供することができる。さらに、隣接ノード管理テーブル15、優先度テーブル16、FID管理テーブル17は、メモリ22を利用して作成される。なお、メモリ22は、例えば、半導体メモリにより実現される。
無線送受信モジュール23は、送信器および受信器を含む。送信器は、フレーム処理部13により生成または更新されるフレームを表す無線信号を隣接ノードへ送信することができる。受信器は、隣接ノードから送信される無線信号を終端してフレームを再生することができる。
このように、無線通信装置1の機能は、例えば、プロセッサを用いて無線通信プログラムを実行することにより提供される。したがって、無線通信装置1の機能は、必ずしも1つの独立したデバイスにより提供されなくてもよい。例えば、プロセッサおよびメモリを含む測定装置に無線通信プログラムを組み込めば、その測定装置は、上述した無線通信装置1の機能を提供することができる。この場合、測定装置は、組み込まれた無線通信プログラムを実行することにより、測定データを宛先へ向けて送信することができ、また、他のノードから受信するデータを宛先へ向けて転送することもできる。
次に、ループチェック部18によるループ判定について説明する。ループチェック部18は、この実施例では、ブルームフィルタを利用して無線アドホックネットワークのループを検出する。ブルームフィルタは、ハッシュ関数を利用して、与えられた要素が集合に属するか否かを判定することができる。よって、ループ判定について記載する前に、ハッシュ関数およびブルームフィルタについて簡単に説明する。
ハッシュ関数は、不可逆一方向関数であり、与えられたキー値に対して対応するハッシュ値を生成する。図7に示す例では、ハッシュ関数にキー値Aが入力されると、ハッシュ値Xが生成されている。同様に、ハッシュ関数にキー値Bが入力されるとハッシュ値Yが生成され、ハッシュ関数にキー値Cが入力されるとハッシュ値Zが生成される。このように、ハッシュ関数に異なるキー値が入力されると、基本的に、異なるハッシュ値が生成される。ただし、ハッシュ関数に異なるキー値が入力された場合であっても、同じハッシュ値が生成されることがある。図7に示す例では、ハッシュ関数にキー値Dが入力されたときにも、ハッシュ値Xが生成されている。以下の記載では、ハッシュ関数に異なるキー値が入力されたときに、同じハッシュ値が生成されるケースを「衝突」と呼ぶことがある。
ハッシュ関数を利用してブルームフィルタを実現する場合、ハッシュ関数により生成されるハッシュ値は、ブルームフィルタの配列中のビット位置を指定する。配列の長さは、予め指定される。また、配列の初期状態においては、全てのビットがゼロに設定される。
配列の長さがmビットである場合、あるキー値がハッシュ関数に与えられたときに生成されるハッシュ値は「1」〜「m」のいずれか1つである。図8に示す例では、m=8である。尚、以下の記載では、配列中のビットが「ゼロ」である状態を「未使用」と呼び、配列中のビットが「1」である状態を「使用中」と呼ぶことがある。
ハッシュ関数にキー値Aが与えられたときに、ハッシュ値として「2」が生成されるものとする。ここで、ハッシュ値は、配列中のビット位置を指定する。この結果、キー値Aに対して、配列の第2ビットが「1(使用中)」に更新される。
続いて、ハッシュ関数にキー値Bが与えられたときにハッシュ値として「5」が生成され、ハッシュ関数にキー値Cが与えられたときにハッシュ値として「3」が生成されるものとする。この結果、配列の第5ビットおよび第3ビットが「1(使用中)」に更新される。
このような状況において、ブルームフィルタは、値Xが、集合「A、B、C」の要素であるか否かを判定することができる。この判定を行うときは、まず、値Xがハッシュ関数に与えられ、対応するハッシュ値xが生成される。このハッシュ値xは、「1」〜「8」のいずれか1つである。そして、ハッシュ値xが「2」「3」「5」のいずれかであるときは、値Xが、集合「A、B、C」の要素であると判定される。即ち「値Xは、A、B、Cのいずれか1つに一致する」と判定される。一方、ハッシュ値xが「2」「3」「5」のいずれでもないときは、値Xが、集合「A、B、C」の要素でないと判定される。すなわち「値Xは、A、B、Cのいずれにも一致しない」と判定される。
ただし、ハッシュ関数は、図7を参照しながら説明したように、異なるキー値に対して同じハッシュ値を生成することがある。このため、実際には「値Xは、A、B、Cのいずれにも一致しない」にもかかわらず、ハッシュ値xが「2」「3」「5」のいずれかであるケースが発生し得る。なお、このようなケースは、「偽陽性(false positive)」と呼ばれる。
ブルームフィルタにおいて偽陽性が発生すると、誤った判定結果が得られる。しかしながら、ブルームフィルタにおいては、偽陰性(false negative)は発生しない。このため、実際には値Xが集合「A、B、C」に属するときに、「値Xは、集合「A、B、C」に属しない」と判定されることはない。したがって、ブルームフィルタを利用してループ判定を行う場合、「実際にはループが発生していないにもかかわらず、ループが発生していると判定される」という誤検出は起こり得るが、「実際にはループが発生しているにもかかわらず、ループが発生していないと判定される」という検出漏れは起こらない。
なお、偽陽性に起因する誤検出が発生する確率(偽陽性発生確率p)は、近似的に、下記(1)式で表される。
p=0.6185^(m/n) (1)
mは、配列の長さ(ビット数)を表す。nは、配列に「1(使用中)」が追加される個数を表す。
本発明の実施形態の無線通信装置1は、上述のブルームフィルタを利用してループ判定を行う。ここで、ループ判定は、ある無線通信装置が送信したフレームが、その無線通信装置に戻ってくるか否かをチェックすることにより実現される。よって、具体的には、ある無線通信装置が受信したフレームが、その無線通信装置から先に送信されたフレームであるか否かをチェックすることによりループ判定が実現される。したがって、以下の動作条件に下で、ブルームフィルタを利用してループ判定が行われる。
(1)各無線通信装置は、同じハッシュ関数を使用する。
(2)各無線通信装置においてハッシュ関数に与えられるキー値は、無線通信装置を識別する識別情報(例えば、無線通信装置のMACアドレス)である。
ブルームフィルタは、(1)式に基づいて、偽陽性発生確率が所定の閾値よりも低くなるように設計される。一例として、無線アドホックネットワークが500〜1000個のノードで構成されるメッシュネットワークであるものとする。また、各ノードにおいて図1〜図4を参照しながら説明した自律的な転送処理が実行されるものとする。この場合、ある送信元ノードから所望の宛先ノードへフレームが伝送される経路の平均ホップ数は、約10ホップであることが経験的に知られている。
ここで、送信元ノードから宛先ノードへフレームが伝送されるときに、各ノードにおいて配列に「1(使用中)」が追加されるものとする。そうすると、送信元ノードからnホップ離れたノードにおける偽陽性発生確率pは、図9に示す通りである。このように、配列の長さが長いときは、偽陽性発生確率pは低くなる。また、送信元ノードからのホップ数が大きいノードでは、偽陽性発生確率pは高くなる。そして、ブルームフィルタは、この偽陽性発生確率pが所定の閾値よりも低くなるように設計される。例えば、送信元ノードから10ホップ離れたノードにおける偽陽性発生確率pを1パーセントよりも低くするためには、配列の長さmは、96以上であることが要求される。
さらに、各ノードにおいてk個のハッシュ関数を用いてループ判定が行われる。kの適切な値(すなわち、偽陽性発生確率pを最小にする値)は、下記(2)式で表される。
k=(m/n)ln2 (2)
mは、配列の長さ(ビット数)を表す。nは、送信元ノードからのホップ数を表す。
ここで、(2)式にm=96およびn=10を与えると、k=6.554が得られる。したがって、各ノードにおいて7個のハッシュ関数を用いてループ判定が行われる。この場合、無線通信装置1は、例えば、自ノードのMACアドレスを7個のハッシュ関数に与えることにより、7個のハッシュ値を生成する。各ハッシュ値は、配列中のビット位置を指定する。そして、無線通信装置1は、受信フレームのLBフィールドに格納されているビット検出配列において、各ハッシュ値により指定されるビットがそれぞれ「1(使用中)」であるか否かチェックすることで、ループ判定を実行する。
図10は、送信元ノードの無線通信装置の処理の一例を示すフローチャートである。なお、図10に示すフローチャートは、無線通信装置1がフレームを生成して送信するときに実行される。以下の記載では、ホップ数をカウントするホップカウント値を「LH」と表記することがある。また、ループ検出配列を「LB」と表記することがある。
S1において、フレーム処理部13は、図2に示すフレームを生成する。フレームの宛先ノードのアドレスは、GDフィールドに格納される。また、送信データは、ペイロードに格納される。
S2において、フレーム処理部13は、宛先ノードに基づいて、フレームを送信すべき隣接ノード(すなわち、LD)を決定する。このとき、LDは、図4(b)に示す優先度テーブル16を参照することにより決定される。すなわち、フレームの宛先(すなわち、GD)に対して最も高い優先度が与えられている隣接ノードが選択される。
S3において、フレーム処理部13は、フレームに付与されるホップカウント値LHおよびループ検出配列LBを初期化する。ホップカウント値LHの初期値は、この例では、10である。「10」は、無線アドホックネットワークにおいて送信元ノードから所望の宛先ノードへフレームが伝送される経路の平均ホップ数に相当する。また、ループ検出配列LBの初期状態においては、すべてのビットがゼロに設定される。
S4において、フレーム処理部13は、無線通信装置1を識別する識別情報に基づいて生成されるループ検出ビットをループ検出配列LBに追加する。この例では、無線通信装置1のMACアドレスを予め用意されているハッシュ関数に与えることにより、ループ検出配列中のビットを指定するハッシュ値が生成される。そして、ハッシュ値により指定されるビットを「1(使用中)」に設定する動作は、無線通信装置1のループ検出ビットをループ検出配列LBに追加する動作に相当する。すなわち、無線通信装置1のループ検出ビットをループ検出配列LBに追加する動作は、無線通信装置1のMACアドレスに対応するハッシュ値によりループ検出配列中の指定されるビットを「1(使用中)」に設定する動作により実現される。各無線通信装置がk個のハッシュ関数を利用してMACアドレスからk個のハッシュ値を生成する場合、ループ検出配列中の指定されるk個のビットが「1」に設定される。
S5において、送信部19は、S1〜S4により生成されたフレームを隣接ノードへ送信する。すなわち、フレームは、図6に示す無線送受信モジュール23を介して隣接ノードへ送信される。このフレームは、無線通信装置1の通信エリア内の各隣接ノードに到達する。ただし、無線通信装置は、受信フレームのLDフィールドに格納されているLD情報が他のノードを表しているときは、その受信フレームを廃棄する。したがって、実質的には、LD情報により識別されるノードの無線通信装置のみが、フレームを受信する。
図11は、隣接ノードからフレームを受信した無線通信装置の処理の一例を示すフローチャートである。なお、図11に示すフローチャートは、無線通信装置1がフレームを受信したときに実行される。
S11において、受信部11は、隣接ノードからフレームを受信する。そして、受信部11は、受信フレームをバッファ部12に格納する。なお、上述したように、受信フレームのLDフィールドに格納されているLD情報が他のノードを表しているときは、受信部11は、その受信フレームを廃棄する。
S12において、フレーム処理部13は、受信フレームがバックトラックフレームであるか否かを判定する。ここで、フレーム処理部13は、例えば、図5に示すFID管理テーブル17を利用して、受信フレームがバックトラックフレームであるか否かを判定してもよい。例えば、受信フレームのヘッダに格納されているGSおよびFIDの組がFID管理テーブル17に登録されており、且つ、その組に対応するレコードに記録されているLDが受信フレームのヘッダに格納されているLSと一致するときに、フレーム処理部13は、受信フレームがバックトラックフレームである判定する。ただし、フレーム処理部13は、他の方法で受信フレームがバックトラックフレームであるか否かを判定してもよい。
受信フレームがバックトラックフレームではないときは、無線通信装置1の処理はS13へ進む。S13において、フレーム処理部13は、受信フレームのヘッダに格納されているGDを参照することにより、受信フレームの最終的な宛先が他のノードであるか否かを判定する。受信フレームの最終的な宛先が自ノード(すなわち、無線通信装置1)であるときは、フレーム処理部13は、S14において、受信フレームを上位レイヤ処理部14に渡す。そうすると、上位レイヤ処理部14は、受信フレームを処理する。
受信フレームの最終的な宛先が他のノードであるときは、フレーム処理部13は、S15において、受信フレームのヘッダに格納されているホップカウント値LHを1だけデクリメントする。すなわち、LH=LH−1が実行される。
S16において、ループチェック部18は、受信フレームのヘッダに格納されているループ検出配列LBおよび無線通信装置1のループ検出ビット(自ノードのループ検出ビット)を利用して、受信フレームが伝送されてきた経路がループであるか否かを判定する。ループ判定方法については、後で詳しく説明する。
受信フレームが伝送されてきた経路がループであると判定されたときは、フレーム処理部13は、S17において、受信フレームの送信元の隣接ノードへ返送するフレーム(すなわち、バックトラックフレーム)を生成する。バックトラックフレームは、受信フレームのヘッダに格納されている「LS」と「LD」とを相互に入れ替えることにより生成される。
受信フレームが伝送されてきた経路がループでないと判定されたときは、フレーム処理部13は、S18において、受信フレームの最終的な宛先に基づいて、そのフレームを転送すべき隣接ノード(すなわち、LD)を決定する。このとき、LDは、図4(b)に示す優先度テーブル16を参照することにより決定される。すなわち、フレームの宛先(すなわち、GD)に対して最も高い優先度が与えられている隣接ノードが選択される。
S19において、フレーム処理部13は、受信フレームに付与されているホップカウント値LHがゼロであるか否かを判定する。ホップカウント値LHがゼロであるときは、ホップカウント値LHが初期化されたノードからのホップ数が閾値(この例では、10)に達したと判定される。この場合、フレーム処理部13は、S20において、受信フレームに付与されているホップカウント値LHおよびループ検出配列LBを初期化する。すなわち、ホップカウント値LHは、10に初期化される。また、ループ検出配列LBのすべてのビットがゼロに初期化される。なお、受信フレームに付与されているホップカウント値LHがゼロでないときは、S20の処理はスキップされる。
S21において、フレーム処理部13は、受信フレームに付与されているループ検出ビットLBに、無線通信装置1のMACアドレスに基づいて生成されるループ検出ビットを追加する。なお、図10のS4および図11のS21は、実質的に同じなので、ここでは説明を省略する。
S22において、送信部19は、S11〜S21、S31〜S33により得られるフレームを隣接ノードへ送信する。すなわち、フレームは、図6に示す無線送受信モジュール23を介して隣接ノードへ送信される。
受信フレームがバックトラックフレームであったときは、無線通信装置1の処理はS31へ進む。S31において、フレーム処理部13は、受信フレームに付与されているホップカウント値LHおよびループ検出配列LBを初期化する。すなわち、ホップカウント値LHは、10に初期化される。また、ループ検出配列LBのすべてのビットがゼロに初期化される。
S32において、フレーム処理部13は、バックトラックフレームの送信元の隣接ノードを優先度テーブル16から削除する。無線通信装置1は、優先度テーブル16に登録されていない隣接ノードに受信フレームを転送することはない。なお、フレーム処理部13は、バックトラックフレームの送信元の隣接ノードの優先度が低くなるように、優先度テーブル16を更新してもよい。
S33において、フレーム処理部13は、受信フレームの最終的な宛先に基づいて、そのフレームを転送すべき隣接ノード(すなわち、LD)を決定する。このとき、LDは、図4(b)に示す優先度テーブル16を参照することにより決定される。具体的には、先に選択した隣接ノードの次に優先度の高い隣接ノードが選択される。
このように、無線通信装置1は、受信フレームを宛先ノードへ向けて転送するときに、ホップカウント値LHおよびビット検出配列LBを更新する。ここで、ホップカウント値LHの設定および更新は、以下の通りである。
(1)送信元ノードの無線通信装置は、ホップカウント値LHを「10」に初期化する。
(2)フレームを受信した無線通信装置は、受信フレームのホップカウント値LHを1だけデクリメントする。
(3)受信フレームのホップカウント値LHがゼロであったときは、無線通信装置は、ホップカウント値LHを「10」に初期化する。
また、ループ検出配列LBの設定および更新は、以下の通りである。
(1)各無線通信装置は、ハッシュ関数に自分のMACアドレスを与えることによりハッシュ値を生成する。ハッシュ値は、ループ検出配列LBの中のビットを指定する。以下の記載では、自分のMACアドレスに対応するハッシュ値により指定されるビットを「自ビット」と呼ぶことがある。
(2)送信元ノードの無線通信装置は、ループ検出配列LBの各ビットを「0(未使用)」に初期化する。
(3)送信元ノードの無線通信装置は、ループ検出配列LBにおいて自ビットを「1(使用中)」に更新する。
(4)フレームを受信した無線通信装置は、受信フレームのビット検出配列LBにおいて自ビットが使用中であるか否かをチェックする。
(5)受信フレームのビット検出配列LBにおいて自ビットが使用中であれば、無線通信装置は、受信フレームが伝送されてきた経路がループであると判定する。この場合、受信フレームは、受信フレームの送信元の隣接ノードへ返送される(バックトラック)。また、ホップカウント値LHおよびループ検出配列LBは、初期化される。
(6)受信フレームのビット検出配列LBにおいて自ビットが使用中でなければ、無線通信装置は、受信フレームが伝送されてきた経路がループでないと判定する。この場合、無線通信装置は、ビット検出配列LBに自ビットを追加した後、受信フレームを転送する。
なお、フレーム処理部13の中に設けられる更新部13aは、ループ検出配列LBおよびホップカウント値LHを更新することができる。すなわち、図11に示すフローチャートのS15、S20、S21、S31は、更新部13aにより実行される。また、ループチェック部18の中に設けられる指定部18aは、無線通信装置1を識別する識別情報に基づいて、受信フレームに付与されているループ検出配列LBの中のビットを指定する。この例では、指定部18aは、ハッシュ関数を利用してハッシュ値を生成することによって、ループ検出配列LBの中のビットを指定する。さらに、ループチェック部18の中に設けられる判定部18bは、受信フレームが伝送されてきた経路がループであるか否かを判定する。すなわち、図11に示すフローチャートのS16は、判定部18bにより実行される。
図12は、ループ判定方法の一例を示す。この処理は、図11のS16の一例に相当する。なお、図12に示す例では、ループ検出配列LBの長さは、8ビットである。ループ検出ビットは、2ビットである。すなわち、各無線通信装置において、2個のハッシュ関数を利用して2個のハッシュ値が生成される。
無線通信装置1は、予めローカル配列を生成しておく。ローカル配列の長さは、ループ検出配列LBと同じである。ローカル配列の各ビットは「ゼロ」である。ただし、ハッシュ値により指定されるビットは「1」である。この例では、2個のハッシュ値は、「1」および「3」である。よって、ローカル配列は、図12に示すように、「10100000」である。なお、ローカル配列は、例えば、ループチェック部18により生成され、ループチェック部18の中に格納される。
図12(a)に示す例では、無線通信装置1が受信したフレームに付与されているループ検出配列LBは、「01011100」である。無線通信装置1がフレームを受信すると、ループチェック部18は、受信フレームに付与されているループ検出配列LBを取得する。そして、ループチェック部18は、ループ検出配列LBとローカル配列との間でビット毎にAND演算を実行する。この例では、演算結果配列「00000000」が得られる。
ループチェック部18は、上述のAND演算の結果に基づいてループ判定を行う。具体的には、ループチェック部18は、演算結果配列中の「1」の個数をカウントする。そして、演算結果配列中の「1」の個数とハッシュ関数の個数とが一致していなければ、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。
図12(b)に示す例では、無線通信装置1が受信したフレームに付与されているループ検出配列LBは、「10101100」である。この場合、ループ検出配列LBとローカル配列との間でAND演算が実行されると、演算結果配列「10100000」が得られる。そして、演算結果配列中の「1」の個数は、2個であり、ハッシュ関数の個数と一致する。そうすると、ループチェック部18は、受信フレームが伝送されてきた経路がループであると判定する。
このように、受信フレームに付与されているループ検出配列LBにおいて、k個のハッシュ関数により指定されるすべてのビットが「1(使用中)」であるときに、無線通信装置は、ループが発生していると判定する。各無線通信装置は、受信フレームを転送するときに、ループ検出配列LBに自ビットを追加する。このため、送信元ノードからのホップ数が大きいノードにおいては、ループ検出配列LBの中の多くのビットが使用中となっているので、ハッシュ値の衝突(または、ブルームフィルタの偽陽性)に起因する誤検出が生じる確率が高くなる。
そこで、無線アドホックネットワークにおいて伝送されるフレームには、ホップ数をカウントするためのホップカウント値LHが付与されている。各無線通信装置は、受信フレームに付与されているホップカウント値LHを参照することにより、各受信フレームについて、送信元ノード(または、ホップカウント値LHを初期化した中継ノード)からのホップ数を検出する。そして、このホップ数が所定の閾値(上述の例では、10)に達すると、無線通信装置は、ループ検出配列LBを初期化する。したがって、ハッシュ値の衝突(または、ブルームフィルタの偽陽性)に起因する誤検出は抑制される。
図13は、ビット検出配列を更新する方法の一例を示す。この処理は、図11のS21の一例に相当する。なお、図13に示す例でも、ループ検出配列LBの長さは、8ビットである。また、各無線通信装置において、2個のハッシュ関数を利用して2個のハッシュ値が生成される。
フレーム処理部13は、ループ検出配列LBとローカル配列との間でビット毎にOR演算を実行する。この例では、「01011100」と「10100000」との間でOR演算を実行することにより演算結果配列「11111100」が得られている。この演算結果配列は、受信フレームに付与されているループ検出配列LBに自ビットを追加した状態を表している。したがって、フレーム処理部13は、受信フレームを転送するときは、受信フレームに付与されているループ検出配列LBを演算結果配列に更新する。このようにして、無線通信装置1は、自ビットが追加されたループ検出配列LBを含むフレームを宛先へ向けて送信する。
<第1の実施例>
第1の実施例では、無線アドホックネットワークは、図14に示すように、ノードA〜Gを含む。ノードA〜Gには、それぞれ本発明の実施形態の無線通信装置が設けられている。ノードA〜Gに設けられている無線通信装置を、それぞれ無線通信装置A〜Gと呼ぶことがある。
フレームに付与されるループ検出配列LBの長さは、7ビットである。フレームに付与されるホップカウント値LHの初期値は、5である。無線通信装置A〜Gは、それぞれ自分のMACアドレスをハッシュ関数に与えることによりハッシュ値を生成する。ここで、無線通信装置A〜Gは、同じハッシュ関数を使用してそれぞれハッシュ値を生成する。無線通信装置A〜Gは、それぞれ予めローカル配列を生成して保持する。ローカル配列の長さは、ループ検出配列LBと同じであり、7ビットである。また、ローカル配列は、MACアドレスに基づいて生成されたハッシュ値を表す。例えば、無線通信装置Aにおいて生成されるハッシュ値は、「第5ビット」を指定する。この場合、無線通信装置Aのローカル配列は、図14に示すように、「0000100」である。また、無線通信装置Bにおいて生成されるハッシュ値は、「第7ビット」を指定する。この場合、無線通信装置Bのローカル配列は、図14に示すように、「0000001」である。
第1の実施例では、ノードAに設けられている無線通信装置Aは、ノードGへデータを送信する。以下、無線アドホックネットワークにおいてノードAから送信されるフレームがノードGまで転送されるシーケンスを説明する。
ステップ1:無線通信装置Aは、図10に示すフローチャートに従ってフレームを生成する。フレームの宛先(GD)は、ノードGである。フレームの送信先の隣接ノード(LD)は、ノードBである。ホップカウント値LHは、「5」に初期化される。ループ検出配列LBは、「0000000」に初期化される。この後、フレーム処理部13は、ループ検出配列LBに自ビットを追加する。一例としては、ループ検出配列LB「0000000」とローカル配列「0000100」との間でビット毎にOR演算を実行することにより、更新されたループ検出配列LB「0000100」が生成される。そして、無線通信装置Aは、「LH=5」および「LB=0000100」が付与されたフレームをノードBへ送信する。
ステップ2:無線通信装置Bは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「5」から「4」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「0000100」と無線通信装置Bのローカル配列「0000001」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードG」に対して「LD=ノードC」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「0000100」とローカル配列「0000001」との間でOR演算を実行することにより、更新されたループ検出配列LB「0000101」が生成される。そして、無線通信装置Bは、「LH=4」および「LB=0000101」が付与されたフレームをノードCへ送信する。
ステップ3:無線通信装置Cは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「4」から「3」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「0000101」と無線通信装置Cのローカル配列「1000000」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードG」に対して「LD=ノードD」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「0000101」とローカル配列「1000000」との間でOR演算を実行することにより、更新されたループ検出配列LB「1000101」が生成される。そして、無線通信装置Cは、「LH=3」および「LB=1000101」が付与されたフレームをノードDへ送信する。
ステップ4:無線通信装置Dは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「3」から「2」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「1000101」と無線通信装置Dのローカル配列「0100000」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードG」に対して「LD=ノードE」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「1000101」とローカル配列「0100000」との間でOR演算を実行することにより、更新されたループ検出配列LB「1100101」が生成される。そして、無線通信装置Dは、「LH=2」および「LB=1100101」が付与されたフレームをノードEへ送信する。
ステップ5:無線通信装置Eは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「2」から「1」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「1100101」と無線通信装置Eのローカル配列「0010000」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードG」に対して「LD=ノードA」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「1100101」とローカル配列「0010000」との間でOR演算を実行することにより、更新されたループ検出配列LB「1110101」が生成される。そして、無線通信装置Eは、「LH=1」および「LB=1110101」が付与されたフレームをノードAへ送信する。
ステップ6:無線通信装置Aは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「1」から「0」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「1110101」と無線通信装置Aのローカル配列「0000100」との間でAND演算を実行し、演算結果配列「0000100」を得る。この演算結果配列は無線通信装置Aのローカル配列を含んでいるので、ループチェック部18は、受信フレームが伝送されてきた経路がループであると判定する。受信フレームが伝送されてきた経路がループであると判定されたときは、無線通信装置Aは、バックトラックを実行する。具体的には、無線通信装置Aは、ノードEから受信したフレームをノードEへ返送する。このとき、無線通信装置Aは、「LH=0」および「LB=1110101」が付与されたフレームをノードEへ返送する。
ステップ7:無線通信装置Eは、図11に示すフローチャートに従って受信フレームを処理する。ここで、無線通信装置Eが受信したフレームは、バックトラックフレームである。よって、図11に示すフローチャートのS31〜S33が実行される。具体的には、フレーム処理部13は、ホップカウント値LHを「5」に初期化し、ループ検出配列LBを「0000000」に初期化する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。このとき、ステップ5で選択されたノードAが優先度テーブル16から削除され、次の隣接ノードが選択される。この実施例では、「GD=ノードG」に対して「LD=ノードF」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、初期化されたループ検出配列LB「0000000」と無線通信装置Eのローカル配列「0010000」との間でOR演算を実行することにより、更新されたループ検出配列LB「0010000」が生成される。そして、無線通信装置Eは、「LH=5」および「LB=0010000」が付与されたフレームをノードFへ送信する。
ステップ8:無線通信装置Fは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「5」から「4」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「0010000」と無線通信装置Fのローカル配列「0000010」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードG」に対して「LD=ノードG」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「0010000」とローカル配列「0000010」との間でOR演算を実行することにより、更新されたループ検出配列LB「0010010」が生成される。そして、無線通信装置Eは、「LH=4」および「LB=0010010」が付与されたフレームをノードGへ送信する。
ステップ9:無線通信装置Gは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームの宛先がノードGであることを検出すると、そのフレームのペイロードに格納されているデータを上位レイヤ処理部14に渡す。
このように、本発明の実施形態の無線通信装置1は、フレームに付与されるビット検出配列LBを利用して、フレームが伝送される経路がループであるか否かを判定することができる。よって、無線通信装置1は、ループ判定を行うために、過去に送信または転送したフレームを長い期間に渡って管理する必要はない。したがって、従来技術と比較して、ループ判定を行うためのメモリの容量を削減可能である。
なお、ネットワーク内でフレームが転送されるときに、各ノードにおいてフレームのヘッダにノードIDがそれぞれ付与される方法であっても、ループ判定を行うことは可能である。ただし、この方法では、ヘッダ長が変化するので、各ノードにおけるフレーム処理が複雑になる。また、ホップ数が大きくなると、ヘッダが長くなるので、データ伝送効率が悪くなる。
<第2の実施例>
無線アドホックネットワークの構成は、第1の実施例および第2の実施例においてほぼ同じである。ただし、第2の実施例では、無線アドホックネットワークは、図15に示すように、ノードA〜Gに加えてノードHを含む。
無線通信装置Gにおいて生成されるハッシュ値は、無線通信装置Bにおいて生成されるハッシュ値と同じであり、「第7ビット」を指定する。よって、無線通信装置Gのローカル配列は、図15に示すように、「0000001」である。すなわち、ノードB、Gのハッシュ値は衝突する。この場合、偽陽性に起因する誤判定が生じるおそれがある。
この問題に対処するために、本発明の実施形態の無線通信方法では、フレームにホップカウント値LHが付与される。そして、このホップカウント値LHに基づいてループ検出配列LBを初期化することにより、偽陽性に起因する誤判定が抑制される。以下、無線アドホックネットワークにおいてノードAから送信されるフレームがノードHまで転送されるシーケンスを説明する。
ステップ1〜4の処理は、第1の実施例および第2の実施例において実質的に同じである。すなわち、無線通信装置Eは、「LH=2」および「LB=1100101」が付与されたフレームをノードDから受信する。ただし、第2の実施例では、フレームの宛先はノードHである。
ステップ5:無線通信装置Eは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「2」から「1」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「1100101」と無線通信装置Eのローカル配列「0010000」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードH」に対して「LD=ノードF」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「1100101」とローカル配列「0010000」との間でOR演算を実行することにより、更新されたループ検出配列LB「1110101」が生成される。そして、無線通信装置Eは、「LH=1」および「LB=1110101」が付与されたフレームをノードFへ送信する。
ステップ6:無線通信装置Fは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「1」から「0」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「1110101」と無線通信装置Fのローカル配列「0000010」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードH」に対して「LD=ノードG」が得られるものとする。ただし、ホップカウント値LHは「0」に更新されている。よって、フレーム処理部13は、ホップカウント値LHを「5」に初期化し、ループ検出配列LBを「0000000」に初期化する。その後、フレーム処理部13は、初期化されたループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「0000000」とローカル配列「0000010」との間でOR演算を実行することにより、更新されたループ検出配列LB「0000010」が生成される。そして、無線通信装置Eは、「LH=5」および「LB=0000010」が付与されたフレームをノードGへ送信する。
ステップ7:無線通信装置Gは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームに付与されているホップカウント値LHを「5」から「4」にデクリメントする。ループチェック部18は、受信フレームに付与されているループ検出配列LB「0000010」と無線通信装置Gのローカル配列「0000001」との間でAND演算を実行し、演算結果配列「0000000」を得る。この演算結果配列は「1」を含んでいないので、ループチェック部18は、受信フレームが伝送されてきた経路がループでないと判定する。フレーム処理部13は、受信フレームの宛先に基づいて、そのフレームを送信すべき隣接ノードを選択する。この実施例では、「GD=ノードH」に対して「LD=ノードH」が得られるものとする。フレーム処理部13は、ループ検出配列LBに自ビットを追加する。ここでは、ループ検出配列LB「0000010」とローカル配列「0000001」との間でOR演算を実行することにより、更新されたループ検出配列LB「0000011」が生成される。そして、無線通信装置Gは、「LH=4」および「LB=0000011」が付与されたフレームをノードHへ送信する。
ステップ8:無線通信装置Hは、図11に示すフローチャートに従って受信フレームを処理する。即ち、フレーム処理部13は、受信フレームの宛先がノードHであることを検出すると、そのフレームのペイロードに格納されているデータを上位レイヤ処理部14に渡す。
このように、無線通信装置1は、送信元ノードからのホップ数が所定値に達すると、フレームに付与されているループ検出配列LBを初期化する。図15に示す例では、ノードAから5ホップ離れたノードFにおいてループ検出配列LBが初期化されている。このため、無線通信装置Bにおいて生成されるハッシュ値および無線通信装置Gにおいて生成されるハッシュ値が互いに同じあっても、無線通信装置Gにおいて誤ったループ判定結果が回避されている。すなわち、ブルームフィルタの偽陽性に起因する誤判定が抑制される。