本実施例1のアドホックネットワークの構成について説明する。図1は、本実施例1にかかるアドホックネットワークの構成を示す図である。図1に示すように、このアドホックネットワークは、GW(Gate Way)1、ノード100a〜100cを有する。このノード100a〜100cは、無線通信端末の一例である。GW1、各ノード100a〜100cは、隣接のノードと無線により接続する。例えば、GW1は、ノード100a、100bに接続される。ノード100aは、GW1、ノード100cに接続される。ノード100bは、GW1、ノード100cに接続される。ノード100cは、ノード100a、100bに接続される。実施例1では、ノード100a〜100cをまとめて、ノード100と表記する。
ノード100は、ハローパケット(Hello packet)を送受信することで、通信経路を構築する。ノード100は、通信経路を構築する場合に、複数種類の評価パラメータのうち、一種類の評価パラメータを用いて評価値を算出し、通信経路の優先順位を判定する。その一方で、ノード100は、他の評価パラメータを参照し、状況に応じて、問題のある通信経路を除外する。ノード100は、優先順位の高い通信経路を選択し、データ転送を行う。
例えば、ノード100は、無線リンク品質の評価値を算出して、通信経路の優先順位を判定する。また、ノード100は、ネットワーク負荷が所定の負荷を超えた通信経路を除外して、残りの通信経路の優先順位を変更する。本実施例1では一例として、無線リンク品質が良いほど、評価値の値は小さくなるものとする。また、ネットワーク負荷が低いほど、ネットワーク負荷の値が小さくなるものとする。
次に、ノード100が送受信するハローパケットのデータ構造について説明する。図2は、実施例1のハローパケットのデータ構造の一例を示す図である。図2に示すように、このハローパケットは、目的地、転送先、ΣPavを有する。このうち、「目的地」は、通信経路の目的地のノードのアドレスが格納される。「転送先」は、ハローパケットの送信元となるノードのアドレスが格納される。ΣPavは、ハローパケットの「目的地」のノードから「転送先」のノードまでの無線リンク品質の評価値の合計値を格納する。
次に、図1に示したノード100の構成について説明する。図3は、本実施例1にかかるノードの構成を示す機能ブロック図である。図3に示すように、このノード100は、無線通信部110、入力部120、表示部130、記憶部140、制御部150を有する。
無線通信部110は、隣接するノードとの間で無線によりデータ通信する装置である。例えば、無線通信部110は、無線リンクモジュールなどに対応する。制御部150は、この無線通信部110を介して、隣接するノードとの間でハローパケット等を送受信する。
入力部120は、各種の情報をノード100に入力するための入力装置である。例えば、入力部120は、キーボード、マウス、タッチパネル等に対応する。表示部130は、各種の情報を表示する表示装置である。例えば、表示部130は、ディスプレイ、タッチパネル等に対応する。
記憶部140は、例えば、ワークテーブル140a、通信経路テーブル140bを記憶する。この記憶部140は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
ワークテーブル140aは、ハローパケットの情報を一時的に格納するテーブルである。図4は、実施例1のワークテーブルのデータ構造の一例を示す図である。図4に示すように、このワークテーブル140aは、目的地、転送先、ΣPav、Pav、Ptrを有する。このうち、目的地、転送先は、図2に示したハローパケットの目的地、転送先を格納する。Pavは、転送先のノードと自ノード100との間の無線リンク品質の平均値を格納する。Ptrは、転送先のノードのトラフィック負荷を格納する。ΣPavは、ハローパケットのΣPavの値とワークテーブル140aのPavの値とを加算した値が格納される。
通信経路テーブル140bは、通信経路の情報を記憶するテーブルである。図5は、実施例1の通信経路テーブルのデータ構造の一例を示す図である。図5に示すように、この通信経路テーブル140bは、目的地、転送先、Pav、ΣPav、Ptr、優先順位を対応づけて記憶する。
図5において、目的地は、パケットの目的地を示す。転送先は、目的地にパケットを送信する場合の転送先を示す。Pavは、転送先のノードと自ノード100との間の無線リンク品質の平均値に対応する。ΣPavは、自ノードから目的地のノードまでの無線リンク品質の評価値を合計した値となる。Ptrは、転送先のノードのトラフィック負荷に対応する。
優先順位は、目的地を同一とする通信経路が複数存在する場合に、各通信経路の優劣を示すものである。例えば、図5では、目的地「GW1」に対する通信経路が2つ存在する。具体的には、転送先を「ノード100b」とする通信経路と、転送先を「100a」とする通信経路が存在する。ここで、転送先を「ノード100b」とする通信経路の優先順位が「2」、転送先を「ノード100a」とする通信経路の優先順位が「1」であるため、転送先を「ノード100a」とする通信経路のほうが、優先順位が高い。
なお、図5では説明の便宜上、目的地、転送先にノードの名称を示したが、ノードの
アドレスを登録してもよい。
制御部150は、検出部150a、経路判定部150b、変更部150c、ハローパケット作成部150dを有する。例えば、制御部150は、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部150は、例えば、CPUやMPU(Micro Processing Unit)等の電子回路に対応する。
検出部150aは、隣接のノードとの間におけるハローパケットの送受信時において、隣接のノードと自ノード100との間の無線リンク品質の平均値を検出する。また、検出部150aは、隣接のノードとの間におけるハローパケットの送受信時において、該隣接のノードのネットワーク負荷を検出する。
検出部150aが、無線リンク品質の平均値を検出する処理の一例について説明する。検出部150aは、RSSI(Received Signal Strength Indication)の機能を有し、ハローパケットを受信した場合に、ハローパケットの受信信号強度を検出する。検出部150aは、受信信号強度と、評価値とを対応づけたテーブルを保持し、このテーブルと、検出した受信信号強度とを比較して、評価値を判定する。評価値は、受信信号強度が大きいほど、小さな値となる。検出部150aは、複数回評価値を判定し、各評価値の平均値を算出することで、Pavを算出し、算出したPavをワークテーブル140aに格納する。
検出部150aが、ネットワーク負荷を検出する処理の一例について説明する。検出部150aは、隣接のノードに対する最大の通信帯域の情報を保持しており、現在の通信帯域の占有率を基にして、ネットワーク負荷を検出する。検出部150aは、占有率と、ネットワーク負荷の値とを対応づけたテーブルを保持し、このテーブルと、占有率とを比較して、ネットワーク負荷を判定する。ネットワーク負荷の値Ptrは、占有率が大きいほど、大きな値となる。検出部150aは、検出したPtrを、ワークテーブル140aに格納する。
また、検出部150aは、ハローパケットを受信した場合には、ハローパケットに含まれる情報を、ワークテーブル140aに格納し、ワークテーブル140aのレコードに基づいて、通信経路テーブル140bを更新する。
検出部150aが、通信経路テーブル140bを更新する処理の一例について説明する。まず、検出部150aは、ハローパケットに基づいて、ワークテーブル140aを更新する。具体的に、検出部150aは、ハローパケットを受信し、ハローパケットに含まれる目的地を、ワークテーブル140aの目的地に設定する。また、検出部150aは、ハローパケットのΣPavの値に、ワークテーブル140aのPavの値を加算したものを、ワークテーブル140aのΣPavに格納する。検出部140aは、ワークテーブル140aの転送先に、ハローパケットの送信元のノードを設定する。なお、上記処理により、検出部150aは、ワークテーブル140aのPav、Ptrを設定済みとする。
続いて、検出部150aは、ワークテーブル140aに基づいて、通信経路テーブル140bを更新する。具体的に、検出部150aは、ワークテーブル140aに含まれる目的地、転送先、Pav、ΣPav、Ptrを、通信経路テーブル140bに設定する。
経路判定部150bは、通信経路テーブル140bを基にして、目的地毎に優先順位を設定し、パケットの経路を判定する処理部である。
経路判定部150bが、優先順位を設定する処理について説明する。経路判定部150bは、通信経路テーブル140bを参照し、同一の目的地毎に、ΣPavを比較する。そして、経路判定部150bは、ΣPavの値が小さいレコードの優先順位から順に、昇順で、値を割り当てる。図5に示す例では、1段目、2段目の目的地が同一であり、1段目のΣPavの値よりも、2段目のΣPavの値の方が小さい。この場合には、経路判定部150bは、2段目の優先順位を1、1段目の優先順位を2に設定する。
経路判定部150bは、転送対象となるパケットを受信した場合には、通信経路テーブル140bの優先順位に基づいて転送先を判定し、パケットを転送先のノードに転送する。例えば、パケットの目的地を「GW1」とすると、図5に示す例では、2段目のレコードの優先順位の方が高い。このため、経路判定部150bは、パケットをノード100aに転送する。
更新部150cは、通信経路テーブル140bのPtrを参照し、Ptrが所定の閾値を超えた場合に、Ptrが閾値を超えたレコードを除外し、優先順位を設定し直す処理部である。例えば、閾値を95とする。図6は、更新部の処理を説明するための図である。図6に示すように、通信経路テーブル140bの2段目のPtrが100となり、閾値を超えている。変更部150cは、通信経路テーブル140bの2段目のレコードを除外して、優先順位を、ΣPavの小さなものから昇順に振り直す。図6の下段に示すように、更新部150cは、1段目のレコードの優先順位を1に設定する。
ハローパケット作成部150dは、通信経路テーブル140bに基づいて、ハローパケットを作成し、ハローパケットをブロードキャストする処理部である。例えば、ハローパケット作成部150dは、クロックイベントが発生する度に、ハローパケットを作成し、ハローパケットをブロードキャストする。
ハローパケット作成部150dがハローパケットを作成する処理の一例について説明する。ハローパケット作成部150dは、通信経路テーブル140bを参照し、目的地毎にレコードをグループ分けする。ハローパケット作成部150dは、ハローパケットの目的地に、グループに共通の目的地を設定し、ハローパケットの転送先に自ノード100を設定する。そして、ハローパケット作成部150dは、ハローパケットのΣPavに、グループに含まれるΣPavのうち最小のΣPavを設定することで、ハローパケットを作成する。ハローパケット作成部150dは、グループ毎にハローパケットを作成する。
なお、ハローパケット作成部150dは、通信経路テーブル140bに情報が格納されていない場合には、目的地、転送先を自ノード100に設定し、ΣPavの値を0に設定したハローパケットをブロードキャストする。
次に、本実施例1にかかるノード100の処理手順について説明する。図7は、実施例1にかかる通信経路テーブルを更新する処理の処理手順を示すフローチャートである。例えば、図7に示す処理は、ハローパケットを受信したことを契機に実行される。
図7に示すように、ノード100は、ハローパケットを受信していない場合には(ステップS101,No)、処理を終了する。一方、ノード100は、ハローパケットを受信した場合には(ステップS101,Yes)、ハローパケットに情報が含まれるか否かを判定する(ステップS102)。ノード100は、ハローパケットに情報が含まれない場合には(ステップS102,No)、ステップS115に移行する。
ノード100は、ハローパケットに情報が含まれる場合には(ステップS102,Yes)、「目的地」または「転送先」が自アドレスであるか否かを判定する(ステップS103)。ノード100は、「目的地」または「転送先」が自アドレスである場合には(ステップS103,Yes)、ステップS113に移行する。
一方、ノード100は、「目的地」または「転送先」が自アドレスでない場合は(ステップS103,No)、ワークテーブル140aにレコードを新規作成する(ステップS104)。ノード100は、ワークテーブル140aの「目的地」にハローパケットに含まれる「目的地」を設定する(ステップS105)。
ノード100は、ワークテーブル140aの「転送先」に、ハローパケットの送信元ノードのアドレスを設定する(ステップS106)。ノード100は、ワークテーブル140aの「Pav」にハローパケットのやり取りで計算した「Pav」を格納する(ステップS107)。ノード100は、ワークテーブル140aの「Ptr」にハローパケットのやり取りで計算した「Ptr」を格納する(ステップS108)。
ノード100は、ハローパケットに含まれるΣPavと、ワークテーブル140aのPavとを加算したものを、ワークテーブル140aのΣPavとして格納する(ステップS109)。ノード100は、通信経路テーブル140bに、同一の「目的地」および「転送先」のレコードが存在しない場合には(ステップS110,No)、ワークテーブル140aに作成したレコードを、通信経路テーブル140bに新規追加する(ステップS111)。そして、ノード100は、ステップS113に移行する。
一方、ノード100は、通信経路テーブル140bに、同一の「目的地」および「転送先」のレコードが存在する場合には(ステップS110,Yes)、上書きする(ステップS112)。ノード100は、受信したパケットに未処理がある場合には(ステップS113,Yes)、未処理の情報を取得し(ステップS114)、ステップS103に移行する。
一方、ノード100は、受信したパケットに未処理がない場合には(ステップS113,No)、ΣPavに基づいて優先順位を判定し(ステップS115)、Ptrに基づいて優先順位を変更する(ステップS116)。
次に、本実施例1にかかるノード100がハローパケットを送信する処理について説明する。図8は、ハローパケットを送信する処理の処理手順を示すフローチャートである。例えば、図8に示す処理は、クロックイベントが発生したことを契機にして実行される。
図8に示すように、ノード100は、クロックイベントがない場合には(ステップS150,No)、再度ステップS150に移行する。一方、ノード100は、クロックイベントがある場合には(ステップS150,Yes)、通信経路テーブル140bに情報が存在するか否かを判定する(ステップS151)。
ノード100は、通信経路テーブル140bに情報が存在しない場合には(ステップS151,No)、ステップS154に移行する。一方、ノード100は、通信経路テーブル140bに情報が存在する場合には(ステップS151,Yes)、通信経路テーブル140bを検索し、同一の「目的地」毎にグループ分けする(ステップS152)。
ノード100は、グループ内の優先順位を比較して、優先順位が1となるレコードを抽出し、ハローパケットのヘッダに追加する(ステップS153)。そして、ノード100は、ハローパケットを送信する(ステップS154)。
次に、本実施例1にかかるアドホックネットワークがハローパケットを送受信して、通信経路テーブルを更新する一連の処理の一例について説明する。図9は、本実施例1にかかるアドホックネットワークが通信経路テーブルを更新する処理手順の一例を示すフローチャートである。
図9に示すように、GW1はハローパケットを送信する(ステップS201)。ノード100aは、GW1からハローパケットを受信し(ステップS202)、通信経路テーブル140bを更新する(ステップS203)。ステップS203によって更新されたノード100aの通信経路テーブル140bは、例えば、図10に示すものとなる。図10は、ノード100aの通信経路テーブルの一例を示す図である。ノード100aは、ハローパケットを送信する(ステップS204)。
ノード100bは、GW1からハローパケットを受信し(ステップS205)、通信経路テーブルを更新する(ステップS206)。ステップS206によって更新されたノード100bの通信経路テーブルは、例えば、図11に示すものとなる。図11は、ノード100bの通信経路テーブルの一例を示す図である。ノード100bは、ハローパケットを送信する(ステップS207)。
ノード100cは、ノード100a、100bからハローパケットを受信し(ステップS208)、通信経路テーブルを更新する(ステップS209)。ステップS209によって更新されたノード100cの通信経路テーブルは、例えば、図12に示すものとなる。図12は、ノード100cの通信経路テーブルの一例を示す図(1)である。ノード100cは、ハローパケットを送信する(ステップS210)。
ノード100aは、ハローパケットを送信する(ステップS211)。ノード100cは、ハローパケットを受信し(ステップS212)、通信経路テーブルを更新する(ステップS213)。ステップS212において、ノード100aのトラフィック負荷が増加したものとする。ステップS213によって更新されたノード100cの通信経路テーブルは、例えば、図13に示すものとなる。図13は、ノード100cの通信経路テーブルの一例を示す図(2)である。図13に示すように、ノード100cは、2段目のPtrが閾値を超えたため、優先順位1を1段目に変更する。ノード100cは、ハローパケットを送信する(ステップS214)。
次に、本実施例1にかかるアドホックネットワークの効果について説明する。アドホックネットワークに含まれるノード100は、自ノード100から目的地のノードに至る無線リンク品質の評価値を算出して、通信経路の優先順位を設定し、パケットの転送先を判定する。その一方で、隣接するノードのネットワーク負荷を監視し、ネットワーク負荷に応じて、パケットの優先順位を変更することで、パケットの転送先を変更する。このため、適切な通信経路を判定することができる。例えば、ネットワーク負荷が許容範囲内で、かつ、無線リンク品質のよい経路を判定できる。
本実施例2のアドホックネットワークの構成について説明する。図14は、本実施例2にかかるアドホックネットワークの構成を示す図である。図14に示すように、このアドホックネットワークは、GW1,2、ノード200d〜200hを有する。このノード200d〜200hは、無線通信端末の一例である。このGW1,2、ノード200d〜200hは、隣接ノードと無線により接続する。例えば、GW1は、ノード200d、ノード200eに接続する。GW2は、ノード200gに接続する。ノード200dは、GW1、ノード200fに接続する。ノード200eは、GW1、ノード200f,200gに接続する。ノード200fは、ノード200d,200hに接続する。ノード200gは、GW2、ノード200e,200hに接続する。ノードhは、ノード200f,200gに接続する。実施例2では、ノード200d〜200hをまとめて、ノード200と表記する。
ノード200は、ハローパケットを送受信することで、通信経路を構築する。ノード200は、通信経路を構築する場合に、複数種類の評価パラメータのうち、一種類の評価パラメータを用いて評価値を算出し、通信経路の優先順位を判定する。その一方で、ノード200は、他の評価パラメータを参照し、状況に応じて、通信経路の優先順位を変更する。ノード200は、優先順位の高い通信経路を選択し、データ転送を行う。
例えば、ノード200は、無線リンク品質の評価値を算出して、通信経路の優先順位を判定する。また、ノード200は、ネットワーク負荷が所定の負荷を超えた通信経路を除外して、残りの通信経路の優先順位を変更する。本実施例2では一例として、無線リンク品質が良いほど、評価値の値は小さくなるものとする。また、ネットワーク負荷が低いほど、ネットワーク負荷の値が小さくなるものとする。
更に、ノード200は、図14に示すように、複数のGW1,2が通信経路に存在する場合には、自ノード200からGWに至る通信経路のネットワーク負荷に基づいて、GWを選択する。例えば、自ノード200からGW1のネットワーク負荷よりも、自ノード200からGW2のネットワーク負荷の方が大きい場合には、ノード200は、GW1を利用する。
次に、ノード200が送受信するハローパケットのデータ構造について説明する。図15は、実施例2のハローパケットのデータ構造の一例を示す図である。図15に示すように、このハローパケットは、目的地、転送先、ΣPav、ΣPtrを有する。このうち、「目的地」は、通信経路の目的地のアドレスが格納される。「転送先」は、ハローパケットの送信元となるノードのアドレスが格納される。ΣPavは、ハローパケットの「目的地」のノードから「転送先」のノードまでの無線リンク品質の評価値の合計値を格納する。ΣPtrは、ハローパケットの「目的地」のノードから「転送先」のノードまでのネットワーク負荷の合計値を格納する。
次に、図14に示したノード200の構成について説明する。図16は、本実施例2にかかるノードの構成を示す機能ブロック図である。図16に示すように、このノード200は、無線通信部210、入力部220、表示部230、記憶部240、制御部250を有する。
無線通信部210は、隣接するノードとの間で無線によりデータ通信する装置である。例えば、無線通信部210は、無線リンクモジュールなどに対応する。制御部250は、この無線通信部210を介して、隣接するノードとの間でハローパケット等を送受信する。
入力部220は、各種の情報をノード200に入力するための入力装置である。例えば、入力部220は、キーボード、マウス、タッチパネル等に対応する。表示部230は、各種の情報を表示する表示装置である。例えば、表示部230は、ディスプレイ、タッチパネル等に対応する。
記憶部240は、例えば、ワークテーブル240a、通信経路テーブル240bを記憶する。この記憶部240は、例えば、RAM、ROM、フラッシュメモリなどの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
ワークテーブル240aは、ハローパケットの情報を一時的に格納するテーブルである。図17は、実施例2のワークテーブルのデータ構造の一例を示す図である。図17に示すように、このワークテーブル240aは、目的地、転送先、Pav、ΣPav、Ptr、ΣPtrを有する。このうち、目的地、転送先は、図15に示したハローパケットの目的地、転送先を格納する。Pavは、転送先のノードと自ノード200との間の無線リンク品質の平均値を格納する。Ptrは、転送先のノードのトラフィック負荷を格納する。ΣPavは、ハローパケットのΣPavの値とワークテーブル240aのPavの値とを加算した値が格納される。ΣPtrは、ハローパケットのΣPtrの値とワークテーブル240aのPtrの値とを加算した値が格納される。
通信経路テーブル240bは、通信経路の情報を記憶するテーブルである。図18は、実施例2の通信経路テーブルのデータ構造の一例を示す図である。図18に示すように、この通信経路テーブル240bは、目的地、転送先、Pav、ΣPav、Ptr、ΣPtr、優先順位を対応づけて記憶する。
図18において、目的地は、パケットの目的地を示す。転送先は、目的地にパケットを送信する場合の転送先を示す。Pavは、転送先のノードと自ノード200との間の無線リンク品質の平均値に対応する。ΣPavは、自ノード200から目的地のノードまでの無線リンク品質の評価値を合計した値となる。Ptrは、転送先のノードのトラフィック負荷に対応する。ΣPtrは、自ノード200から目的地のノードまでのネットワーク負荷の合計値に対応する。
優先順位は、目的地を同一とする通信経路が複数存在する場合に、各通信経路の優劣を示すものである。例えば、図18に示す例では、目的地「GW1」に対応する通信経路が2つ存在する。具体的には、転送先を「ノード200f」とする通信経路と、転送先を「200g」とする通信経路が存在する。ここで、転送先を「ノード200g」とする通信経路の優先順位が「1」、転送先を「ノード200f」とする通信経路の優先順位が「2」であるため、転送先を「ノード200g」とする通信経路のほうが、優先順位が高い。
また、図18に示す例では、目的地に2種類のGW1,2が存在する。優先順位が1となるGW1,2のΣPtrを比較すると、GW2のΣPtrの方が大きいため、GW2に至る通信経路のネットワーク負荷が、GW1に至る通信経路のネットワーク負荷よりも大きい。このため、ノード200は、GW1、2のうち、GW1を選択して、データ通信を行う。
なお、図18では説明の便宜上、目的地、転送先にノードの名称を示したが、ノードのアドレスを登録してもよい。
制御部250は、検出部250a、経路判定部250b、変更部250c、ハローパケット作成部250dを有する。例えば、制御部250は、ASICや、FPGAなどの集積装置に対応する。また、制御部250は、例えば、CPUやMPU等の電子回路に対応する。
検出部250aは、隣接のノードとの間におけるハローパケットの送受信時において、隣接のノードと自ノード200との間の無線リンク品質の平均値を検出する。また、検出部250aは、隣接のノードとの間におけるハローパケットの送受信時において、該隣接のノードのネットワーク負荷を検出する。
検出部250aが、無線リンク品質の平均値を検出する処理は、実施例1の検出部150aと同様である。検出部250aは、無線リンク品質の評価値Pavを、ワークテーブル240aに格納する。
検出部250aが、ネットワーク負荷を検出する処理は、実施例1の検出部150aと同様である。検出部250aは、ネットワーク負荷Ptrを、ワークテーブル240aに格納する。
また、検出部250aは、ハローパケットを受信した場合には、ハローパケットに含まれる情報を、ワークテーブル240aに格納し、ワークテーブル240aのレコードに基づいて、通信経路テーブル240bを更新する。
検出部250aが、通信経路テーブル240bを更新する処理の一例について説明する。まず、検出部250aは、ハローパケットに基づいて、ワークテーブル240aを更新する。具体的に、検出部250aは、ハローパケットを受信し、ハローパケットに含まれる目的地を、ワークテーブル240aの目的地に設定する。検出部250aは、ハローパケットのΣPavの値に、ワークテーブル240aのPavの値を加算したものを、ワークテーブル240aのΣPavに格納する。検出部250aは、ハローパケットのΣPtrの値に、ワークテーブル240aのPtrの値を加算したものを、ワークテーブル240aのΣPtrに格納する。検出部250aは、ワークテーブル240aの転送先に、ハローパケットの送信元のノードを設定する。なお、上記処理により、検出部250aは、ワークテーブル240aのPav、Ptrを設定済みとする。
続いて、検出部250aは、ワークテーブル240aに基づいて、通信経路テーブル240bを更新する。具体的に、検出部250aは、ワークテーブル240aに含まれる目的地、転送先、Pav、ΣPav、Ptr、ΣPtrを、通信経路テーブル240bに設定する。
経路判定部250bは、経路通信テーブル240bを基にして、目的地毎に優先順位を設定し、パケットの経路を判定する処理部である。
経路判定部250bが、優先順位を設定する処理について説明する。経路判定部250bは、通信経路テーブル240bを参照し、同一の目的地毎に、ΣPavを比較する。そして、経路判定部250bは、ΣPavの値が小さいレコードの優先順位から順に、昇順で、値を割り当てる。図5に示す例では、1段目、2段目の目的地が同一であり、1段目のΣPavの値よりも、2段目のΣPavの値の方が小さい。この場合には、経路判定部250bは、2段目の優先順位を1、1段目の優先順位を2に設定する。
また、経路判定部250bは、通信経路テーブル240bの目的地に複数種類のGWが登録されている場合には、優先順位が1となるGWのΣPtrを比較して、利用するGWを一つ選択する。具体的に、経路判定部250bは、ΣPtrの小さい方のGWを選択する。経路判定部250bは、GW宛のパケットを受信した場合には、選択した側のGWに向けて、パケットを転送する。
例えば、図18に示す例では、経路判定部250bは、2段目のΣPtrと、3段目のΣPtrとを比較すると、3段目のΣPtrの方が小さいので、GW1を選択する。このため、経路判定部250bは、GW宛のパケットを受信した場合には、ノード200gにパケットを転送する。
変更部250cは、通信経路テーブル240bのPtrを参照し、Ptrが所定の閾値を超えた場合に、Ptrが閾値を超えたレコードを除外し、優先順位を設定し直す処理部である。変更部250cの具体的な処理は、実施例1の変更部150cと同様である。
ハローパケット作成部250dは、通信経路テーブル240bに基づいて、ハローパケットを作成し、ハローパケットをブロードキャストする処理部である。例えば、ハローパケット作成部250dは、クロックイベントが発生する度に、ハローパケットを作成し、ハローパケットをブロードキャストする。
ハローパケット作成部250dがハローパケットを作成する処理の一例について説明する。ハローパケット作成部250dは、通信経路テーブル240bを参照し、目的地毎にレコードをグループ分けする。ハローパケット作成部250dは、ハローパケットの目的地に、グループに共通の目的地を設定し、ハローパケットの転送先に自ノード200を設定する。そして、ハローパケット作成部250dは、ハローパケットのΣPavに、グループに含まれるΣPavのうち最小のΣPavを設定する。また、ハローパケット作成部250dは、ハローパケットのΣPtrに、グループに含まれるΣPtrのうち最小のΣPtrを設定する。このように、ハローパケット作成部250dは、目的地、転送先、ΣPav、ΣPtrをハローパケットに設定することでハローパケットを作成する。
次に、本実施例2にかかるノード200の処理手順について説明する。図19は、本実施例2にかかる通信経路テーブルを更新する処理の処理手順を示すフローチャートである。例えば、図19に示す処理は、ハローパケットを受信したことを契機にして実行される。
図19に示すように、ノード200は、ハローパケットを受信していない場合には(ステップS301,No)、処理を終了する。一方、ノード200は、ハローパケットを受信した場合には(ステップS301,Yes)、ハローパケットに情報が含まれるか否かを判定する(ステップS302)。ノード200は、ハローパケットに情報が含まれない場合には(ステップS302,No)、ステップS316に移行する。
ノード200は、ハローパケットに情報が含まれる場合には(ステップS302,Yes)、「目的地」または「転送先」が自アドレスであるか否かを判定する(ステップS303)。ノード200は、「目的地」または「転送先」が自アドレスである場合には(ステップS303,Yes)、ステップS314に移行する。
一方、ノード200は、「目的地」または「転送先」が自アドレスでない場合は(ステップS303,No)、ワークテーブル240aにレコードを新規作成する(ステップS304)。ノード200は、ワークテーブル240aの「目的地」にハローパケットに含まれる「目的地」を設定する(ステップS305)。
ノード200は、ワークテーブル240aの「転送先」に、ハローパケットの送信元ノードのアドレスを設定する(ステップS306)。ノード200は、ワークテーブル240aの「Pav」にハローパケットのやり取りで計算した「Pav」を格納する(ステップS307)。ノード200は、ワークテーブル240aの「Ptr」にハローパケットのやり取りで計算した「Ptr」を格納する(ステップS308)。
ノード200は、ハローパケットに含まれるΣPavと、ワークテーブル240aのPavとを加算したものを、ワークテーブル240aのΣPavとして格納する(ステップS309)。ノード200は、ハローパケットに含まれるΣPtrと、ワークテーブル240aのPtrとを加算したものを、ワークテーブル240aのΣPtrとして格納する(ステップS310)。
ノード200は、通信経路テーブル240bに、同一の「目的地」および「転送先」のレコードが存在しない場合には(ステップS311,No)、ワークテーブル240aに作成したレコードを、通信経路テーブル240bに新規追加する(ステップS312)。そして、ノード200は、ステップS314に移行する。
一方、ノード200は、通信経路テーブル240bに、同一の「目的地」および「転送先」のレコードが存在する場合には(ステップS311,Yes)、上書きする(ステップS313)。ノード200は、受信したパケットに未処理がある場合には(ステップS314,Yes)、未処理の情報を取得し(ステップS315)、ステップS303に移行する。
一方、ノード200は、受信したパケットに未処理がない場合には(ステップS314,No)、ΣPavに基づいて優先順位を判定する(ステップS316)。ノード200は、優先順位が1のGWを抽出し(ステップS317)、ΣPtrの小さいGWを抽出し、GWを選択する(ステップS318)。
次に、本実施例2にかかるアドホックネットワークがハローパケットを送受信して、通信経路テーブルを更新する処理の一例について説明する。図20は、本実施例2にかかるアドホックネットワークが通信経路テーブルを更新する処理手順の一例を示すフローチャートである。
図20に示すように、GW1はハローパケットを送信する(ステップS401)。ノード200dは、GW1からハローパケットを受信し(ステップS402)、通信経路テーブルを更新する(ステップS403)。ステップS403によって更新されたノード200dの通信経路テーブルは、例えば、図21に示すものとなる。図21は、ノード200dの通信経路テーブルの一例を示す図である。ノード200dは、ハローパケットを送信する(ステップS404)。
ノード200eは、GW1からハローパケットを受信し(ステップS405)、通信経路テーブルを更新する(ステップS406)。ステップS406によって更新されたノード200eの通信経路テーブルは、例えば、図22に示すものとなる。図22は、ノード200eの通信経路テーブルの一例を示す図である。ノード200eは、ハローパケットを送信する(ステップS407)。
ノード200fは、ノード200dからハローパケットを受信し(ステップS408)、通信経路テーブルを更新する(ステップS409)。ステップS409によって更新されたノード200fの通信経路テーブルは、例えば、図23に示すものとなる。図23は、ノード200fの通信経路テーブルの一例を示す図(1)である。ノード200fは、ハローパケットを送信する(ステップS410)。
ノード200fは、ノード200eからハローパケットを受信し(ステップS411)、通信経路テーブルを更新する(ステップS412)。ステップS412によって更新されたノード200fの通信経路テーブルは、例えば、図24に示すものとなる。図24は、ノード200eの通信経路テーブルの一例を示す図(2)である。
ノード200gは、ノード200eからハローパケットを受信し(ステップS413)、通信経路テーブルを更新する(ステップS414)。ステップS414によって更新されたノード200gの通信経路テーブルは、例えば、図25に示すものとなる。図25は、ノード200gの通信経路テーブルの一例を示す図(1)である。
ノード200hは、ノード200fからハローパケットを受信し(ステップS415)、通信経路テーブルを更新する(ステップS416)。ステップS416によって更新されるノード200hの通信経路テーブルは、例えば、図26に示すものとなる。図26は、ノード200hの通信経路テーブルの一例を示す図(1)である。
GW2はハローパケットを送信する(ステップS417)。ノード200gは、GW2からハローパケットを受信し(ステップS418)、通信経路テーブルを更新する(ステップS419)。ステップS419によって更新されるノード200gの通信経路テーブルは、例えば、図27に示すものとなる。図27は、ノード200gの通信経路テーブルの一例を示す図(2)である。ノード200gは、ハローパケットを送信する(ステップS420)。
ノード200hは、ハローパケットを受信し(ステップS421)、通信経路テーブルを更新する(ステップS422)。ステップS422によって更新されるノード200hの通信経路テーブルは、例えば、図28に示すものとなる。図28は、ノード200hの通信経路テーブルの一例を示す図(2)である。
次に、本実施例2にかかるアドホックネットワークの効果について説明する。アドホックネットワークに含まれるノード200は、通信経路テーブル240bに複数のGWが含まれる場合には、GWに至る通信経路のネットワーク負荷に基づいて、利用するGWを選択する。このため、ネットワーク負荷の少ない通信経路を利用して、GWとパケットを送受信することができる。
ところで、ノード100、200の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ノード100、200の具体的形態は図示のものに限られず、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、図3の各処理部150a〜150dの機能をまとめてもよい。
上記実施例1,2に示したノード100,200の機能は、既知のPC(Personal Computer)またはPDA(Personal Digital Assistants)などの情報処理装置に、ノードに対応する各機能を搭載することによって実現することもできる。図29は、実施例1、2にかかるノードを構成するコンピュータのハードウェア構成を示す図である。
図29に示すように、このコンピュータ300は、各種演算処理を実行するCPU301と、ユーザからのデータの入力を受け付ける入力装置302と、ディスプレイ303とを有する。また、コンピュータ300は、記憶媒体からプログラム等を読み取る読み取り装置304と、他の装置と接続するためのインターフェース装置305とを有する。また、コンピュータ300は、他の装置と無線により接続する無線通信装置306と、各種情報を一時記憶するRAM307と、ハードディスク装置308とを有する。各装置301〜308は、バス309に接続される。
ハードディスク装置308には、検出プログラム、経路判定プログラム、変更プログラムなどの各種のプログラムが記憶される。
CPU301は、ハードディスク装置308に記憶された各プログラムを読み出して、RAM307に展開し、各種の処理を行う。また、これらのプログラムは、コンピュータを図3の検出部150a、経路判定部150b、変更部150cとして機能させることができる。
なお、上記のプログラムは、必ずしもハードディスク装置308に格納されている必要はない。例えば、CD−ROM等の記憶媒体に記憶されたプログラムを、コンピュータ300が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等に接続された記憶装置に、各プログラムを記憶させておいてもよい。この場合、コンピュータ300がこれらから各プログラムを読み出して実行するようにしてもよい。