以下詳細な本発明の実施例に関して説明する。なお、以下の各実施例は、処理の内容を矛盾させない範囲で適宜組み合わせることが可能である。以下、図面に基づいて各実施例について説明する。なお、以下では、自律分散型ネットワークの一例として、アドホックネットワークが利用される。
図1は、本実施例に係るアドホックネットワークシステムの図である。アドホックネットワークシステムは、複数のノードNxと、シンクノードSNと、サーバSとを含む。
サーバSとシンクノードSNとはインターネット、LAN、WANなどのネットワーク2を介して接続されている。ネットワーク2は、例えば固定ネットワークである。シンクノードSNとノードNxとは、アドホックネットワーク1を介して接続されている。なお、ノードNxは、無線通信が可能なコンピュータである。
アドホックネットワーク1内には、複数のノードNxが設けられている。図1では、代表としてノードNa〜Neを示している。以下、ノードNa乃至Neを区別する必要がない場合は、ノードNxと記す。
シンクノードSNは、アドホックネットワーク1とネットワーク2とを接続する中継機器である。シンクノードSNは、例えば、ゲートウェイ装置である。シンクノードSNは、アドホックネットワーク1のプロトコルの形式の情報とネットワーク2のプロトコルの形式の情報の両方を送受信可能である。
また、シンクノードSNは、アドホックネットワーク1とネットワーク2との間で情報をプロトコル変換する。例えば、アドホックネットワーク1内のノードNxのいずれかからサーバS宛に送信されたパケットは、シンクノードSNにてプロトコル変換される。その後、シンクノードSNが、パケットを、ネットワーク2に送信することで、パケットはサーバSに到達する。
サーバSは、アドホックネットワーク1を管理するとともに、各ノードNxからデータを収集するコンピュータである。
各ノードNxは、通信可能圏内に存在する他ノードNx、または通信可能圏内に存在するシンクノードSNと、直接通信可能な装置である。また、各ノードNxは、自ノードと直接通信可能なノードを経由することで、自ノードと直接通信不要な他ノードNxや、自ノードと直接通信不能なシンクノードSNと通信することができる。つまり、各ノードNxは、構築した経路を利用して、他のノードNxやシンクノードSNと通信する。
図1においては、点線で接続されたノードNx同士が、直接通信できる。さらに、自ノードと直接通信できるノードを、自ノードに対する隣接ノードと称する。
各ノードNxは、隣接ノードと各種パケットの送受信を行う。各種パケットの例としては、例えば、ハローパケットや、データパケットなどがある。
ハローパケットは、ブロードキャストされるパケットであって、マルチホップ転送の対象とはならないパケットである。ハローパケットは、各ノードNxが、自ノードと直接通信可能なノードに対して、自ノードの存在を通知するためのパケットである。
データパケットは、経路情報に従ってユニキャストされるパケットであって、マルチホップ転送を経て、後述のグローバルディスティネーションGDへ送られるパケットである。さらに、データパケットは、各ノードが取得したデータを含むパケットである。
図2は、各種パケットのデータ構成を説明するための図である。各種パケットは、ヘッダ情報格納部21と、ペイロードデータ格納部22とを有する。
ヘッダ情報格納部21には、ローカルソースLS、ローカルディスティネーションLD、グローバルソースGS、グローバルディスティネーションGDの情報が格納される。なお、ヘッダ情報格納部21には、さらに当該パケットの種別を示すパケットタイプ等の情報が格納されてもよい。
ローカルソースLSは、当該パケットの送信元を示す情報である。例えば、ローカルソースLSは、1ホップの通信における送信元のアドレス情報である。ローカルディスティネーションLDは、当該パケットの送信先を示す情報である。例えば、ローカルディスティネーションLDは、1ホップの通信における送信先のアドレス情報である。
グローバルソースGSは、当該パケットの経路の始点を示す情報である。例えば、グローバルソースGSは、マルチホップ通信を構成する初めの通信における送信元のアドレス情報である。グローバルディスティネーションGDは、当該パケットの経路の終点を示す情報である。例えば、グローバルディスティネーションGDは、マルチホップ通信を構成する最後の通信における送信先のアドレス情報である。
ここで、ハローパケットのような、ブロードキャスト型のパケットの場合は、ローカルディスティネーションLDとして、ブロードキャスト用のアドレスが設定される。例えば、あらかじめ用意されたアドレス「255.255.255.255」が設定される。また、ハローパケットのように、マルチホップ通信の対象外のパケットであれば、グローバルソースGSおよびグローバルディスティネーションGDは、設定されない。または、「000.000.000.000」などの架空のアドレスが設定される。
一方、データパケットのように、ユニキャスト型のパケットの場合は、構築された経路に基づき、次の送信先となるノードNxのアドレスが、ローカルディスティネーションLDとして設定される。また、データパケットのように、マルチホップ通信の対象であるパケットであれば、グローバルソースGSには、経路の始点のノードNxのアドレスが、グローバルディスティネーションGDには、経路の終点のノードNxまたはシンクノードSNのアドレスが設定される。
なお、本アドホックネットワーク1においては、各データパケットは最終的にシンクノードSNに収集されるものとする。また、本実施例においては、当該データパケットに含まれるデータはシンクノードSN経由でサーバSにより収集される。
次に、ペイロードデータ格納部22には、各パケットの毎に異なるデータが格納される。ハローパケットの場合は、例えば、シンクノードSNからのホップ数や、ハローパケットを生成した時刻の時刻情報が格納される。
また、データパケットの場合は、ペイロードデータ格納部22には、シンクノードSNへ送信すべきデータが格納される。さらに、データパケットの検証に利用される値が格納されてもよい。例えば、メッセージ認証符号(MAC)などが利用される。また、ペイロードデータ格納部22に格納されたデータは、暗号化されたデータでもよい。本実施例においては、暗号処理、データ検証処理は省略するが、セキュリティ確保のため、暗号処理、データ検証処理が適宜実施されることが望ましい。
ここで、ハローパケットを利用した経路情報の生成について、説明する。各ノードNxは、アドホックネットワーク1内における経路を、ハローパケットを用いて構築する。構築された経路は、経路情報として記憶される。経路情報は、後述するグローバルディスティネーションGDとローカルディスティネーションLDとを含む情報である。つまり、経路は、ローカルディスティネーションLD(隣接ノード)ごとに構築される。また、経路情報は、さらに、各経路の優劣を示す情報(優先順位)を含んでもよい。
各ノードNxおよびシンクノードSNは、定期的にハローパケットを送信する。まず、各ノードNxは、他のノードNxからハローパケットを受信することで、隣接ノードを把握することができる。また、各ノードNxは、各隣接ノードから受信したハローパケットに基づき、各隣接ノードを経由する経路についての経路コストを把握する。
経路コストは、自ノードからグローバルディスティネーションGDまで経路毎の品質を評価する値である。また、本実施例においては、経路コストは、自ノードからグローバルディスティネーションGDまでのホップ数に依存する。さらに、経路コストは、各隣接ノードからの単位時間当たりのハローパケットの受信数が加味されてもよい。ハローパケットには、経路コストまたは、経路コスト算出のために必要な情報の少なくとも一方が設定される。
例えば、図1において、シンクノードSNのハローパケットを、シンクノードSNに対する隣接ノードNaおよびNcが受信する。なお、ハローパケットには、ホップ数=1という経路コストを算出するための情報が含まれる。
ハローパケットを受信したノードNaは、ホップ数に「1」を加算し、「ホップ数=2」を設定したハローパケット生成する。そして、ハローパケットはブロードキャストされる。このとき、ブロードキャストされたハローパケットは、ノードNaの隣接ノードNb,Nd,Ne、シンクノードSNに受信される。同様に、ハローパケットを受信したノードNb,Nd,Neは、ホップ数に「1」を加算し、「ホップ数=3」を設定したハローパケットを、ブロードキャストする。
このとき、ノードNaは、シンクノードSNから、「ホップ数=1」というハローパケットを受信することで、シンクノードSNまでの経路のうち、直接シンクノードとパケットの授受を行う経路を把握する。そして、ノードNaは、当該経路について、経路コスト「1」を得る。なお、本実施例においては、ホップ数を経路コストとして取り扱う。しかし、これに限らず、ホップ数を用いて他の値を算出し、算出した値を経路コストとしてもよい。
また、ノードNaは、ノードNbから、「ホップ数=3」というハローパケットを受信することで、シンクノードSNまでの経路のうち、ノードNbを経由する経路を把握する。そして、ノードNaは、当該経路について、経路コスト「3」を得る。同様に、ノードNaは、シンクノードSNまでの経路のうち、ノードNdを経由する経路を把握するとともに、当該経路の経路コスト「3」を得る。
少なくとも1以上の経路が構築されたあと、各ノードNxは、各経路の経路コストに基づき、もっとも品質がよい経路を、優先経路に設定する。例えば、ノードNaは、シンクノードSNまでの経路のうち、シンクノードSNをローカルディスティネーションLDとする経路を、優先経路に設定する。
また、本実施例においては、各ノードNxは、各隣接ノードが送信したデータパケットを監視することなどにより、各隣接ノードの送信記録情報を取得する。なお、送信記録情報は、隣接ノードが送信したパケットの送信先(ローカルディスティネーションLD)に関わる情報である。
例えば、送信記録情報は、各隣接ノードが送信したデータパケットのうち、自ノードをローカルディスティネーションLDにしていたパケットの割合である。なお、当該アドホックネットワークにおいて、各ノードが一定周期でデータパケットを送信する場合には、各ノードは、割合の代わりに、各隣接ノードから受信したパケット数を利用することができる。
そして、ノードNxは、送信記録情報に基づき、各隣接ノードの優先経路を推定する。ノードNxは、自ノード以外のノードを優先経路におけるローカルディスティネーションLDとする隣接ノードを、代替経路として選択する。つまり、ノードNxは、自ノードを優先経路とする隣接ノードを代替経路に選択しない。
ノードNaが隣接ノード「Nb」「Nd」「Ne」を経由する経路を有している場合、ノードNaは、隣接ノード「Nb」「Nd」「Ne」各々の送信記録情報を取得する。例えば、ノードNbはノードNaをローカルディスティネーションLDに設定した経路を利用する割合が閾値以下であったとする。これを受けて、ノードNaは、隣接ノードNbにて選択されている優先経路は、自ノードNaを経由する経路ではないことを推定する。
よって、ノードNaが優先経路上に通信障害が発生したことを検知した場合に、隣接ノードNbを経由する経路を代替経路として選択することで、自ノードにパケットが送り返されることを防ぐことができる。
一方、隣接ノード「Nd」の送信記録情報から、ノードNdが、自ノードNaをローカルディスティネーションLDに設定した経路を利用する割合が閾値よりも大きいと判断される場合、ノードNaは、隣接ノードNdにて選択されている優先経路は、自ノードNaを経由する経路であることを推定する。
よって、ノードNaが、自ノードの優先経路上に通信障害が発生したことを検知した場合に、隣接ノードNdを経由する経路を代替経路として選択すると、データパケットはループして、自ノードNaに返却されることとなる。つまり、あらかじめループが生じる経路を特定することで、このような無駄なパケット送信を回避することができ、ネットワーク負荷の増大を防ぐことができる。
以上の通り、本実施例によれば、ノードNxは、隣接ノードにおける優先経路を推定することで、自ノードに対してデータパケットを送り返してくるような経路を代替経路として選択することを防ぐ。本実施例は、ネットワーク全体の負荷増大を防ぐことができる。
つぎに、各ノードNxの機能的構成について説明する。図3は、ノードNxの機能ブロック図である。ノードNxは、通信部10、制御部11、記憶部12を含む。
通信部10は、アドホックネットワーク1を構成するノードNxやシンクノードSNの少なくとも一部とパケットの授受を行う処理部である。制御部11は、ノードNx全体の処理を制御する処理部である。例えば、制御部11は、各種パケットの生成、経路情報の生成、送信記録情報の取得等を行う。記憶部12は、各種情報を記憶する記憶装置である。
通信部10は、受信部13および送信部14を含む。受信部13は、隣接ノードから、情報を受信する処理部である。たとえば、受信部13は、ハローパケットやデータパケットを受信する。送信部14は、隣接ノードへ、情報を送信する処理部である。たとえば、送信部14は、ハローパケットをブロードキャストしたり、データパケットを特定の隣接ノードに対して送信する。
制御部11は、生成部15、取得部16、選択部17を有する。生成部15は、受信部13が受信したハローパケットを取得し、ハローパケットに基づき、経路情報を生成する。そして、生成部15は、経路情報記憶部18に生成した経路情報を記憶する。なお、生成部15は定期的に経路情報の生成を行い、経路情報記憶部18の経路情報を更新する。
取得部16は、自ノードと直接通信可能な複数の隣接ノードの各々が送信する複数のパケットの送信先に関わる送信記録情報を取得する。例えば、取得部16は、データパケットに基づき、送信記録情報を生成する。そして、取得部16は、送信記録情報記憶部19に送信記録情報を記憶する。なお、取得部16は、定期的に送信記録情報の生成を行い、送信記録情報記憶部19の送信記録情報を更新する。
選択部17は、データパケットのローカルディスティネーションLDを選択する。そして、選択部17は、データパケットのヘッダ情報に各種アドレスを設定し、送信部14に対してデータパケットの送信を依頼する。
例えば、優先経路を利用したデータパケットの送信が失敗した場合に、選択部17は、送信記録情報に基づき、複数の隣接ノードのうち、自ノード以外を優先経路とする隣接ノードを、代替経路として選択する。
さらに、選択部17は、代替経路として選択可能な隣接ノードが存在しない場合に、送信部14を制御して、警告信号を送信させる。警告信号は、自ノードは優先経路以外にループを回避する経路を持たない旨を、隣接ノードへ知らせる信号である。あるノードから警告信号を受信したノードNxにおける選択部17は、警告信号の送信元である隣接ノードを経由する経路を、データパケットの送信経路から除外するように、経路の再構築を行う。
記憶部12は、経路情報記憶部18および送信記録情報記憶部19を有する。経路情報記憶部18は、経路情報を記憶する。なお、経路情報記憶部18は、一般的に、ルーティングテーブルとも称される。送信記録情報記憶部19は、送信記録情報を記憶する。
図4は、経路情報記憶部18が記憶するデータの例を示す図である。図4は、図1におけるノードNaの経路情報記憶部18である。
経路情報記憶部18は、グローバルディスティネーションGD、ローカルディスティネーションLD、経路コスト、優先順位、フラグを対応付けて記憶する。
グローバルディスティネーションGDには、各経路の終点となる装置のアドレスが格納される。本実施例においては、データパケットはシンクノードSNに集約されるため、グローバルディスティネーションGDには、シンクノードSNのアドレスが格納される。
ローカルディスティネーションLDは、各隣接ノードのアドレスが格納される。つまり、ローカルディスティネーションLDは、各隣接ノードを経由する各々の経路を示す。例えば、隣接ノード「SN」「Nb」「Nd」「Ne」各々のアドレスが、ローカルディスティネーションLDに格納される。
経路コストには、各経路の品質に関わる値が格納される。本実施例においては、経路コストとして、自ノードからグローバルディスティネーションGDまでのホップ数が、採用される。生成部15は、各隣接ノードから取得したハローパケットからホップ数を取得し、経路コストとして格納する。
例えば、隣接ノード「Nb」を経由する経路の場合は、経路コスト「3」が記憶される。なお、生成部15は、ホップ数に基づき経路コストを算出したのちに、経路情報記憶部18へ記憶してもよい。
優先順位には、各経路の経路コストに基づく、各経路の優劣を示す情報が格納される。本実施例においては経路コストが小さいほど、優先順位が高くなる(より小さな値となる)。例えば、経路コスト「1」である経路に対して、優先順位「1」が付与される。優先順位「1」が付与された経路は、優先経路となる。また、優先順位「2」が付与された経路は、代替経路となる。
図4の例では、隣接ノード「Nb」「Nd」「Ne」の各々をローカルディスティネーションとする経路の経路コストは、等しい。よって、3つの経路には、優先順位「2」が与えられる。ただし、送信記録情報が参照されることで、ループを生じる経路は、優先順位「2」であっても、代替経路から除外される。
フラグは、送信記録情報に基づき生成される情報であって、各経路が代替経路として選択可能であるかを示す情報である。フラグ「1」は、当該経路を、代替経路として選択可能であることを示す。一方、フラグ「0」は、当該経路を、代替経路として選択不能であることを示す。なお、初期状態においては、フラグは「1」である。
ここで、取得部16は、後述の送信記録情報記憶部19を参照し、自ノード以外を優先経路とする隣接ノードについては、フラグ「1」を設定する。ただし、経路情報記憶部18にフラグの領域を設けずとも、選択部17が送信記録情報記憶部19を参照することで、各経路が代替経路として選択可能であるかを判断することもできる。
本実施例においては、グローバルディスティネーションGD、ローカルディスティネーションLD、経路コスト、優先順位を経路情報と称する。そして、経路情報は、生成部15により生成される。経路情報記憶部18は、経路情報にさらにフラグを対応付けて記憶する。フラグは、送信記録情報に基づき設定される情報であって、取得部16がフラグを設定する。
図5は、送信記録情報記憶部19が記憶するデータの例を示す図である。なお、図5は、ノードNaにおける送信記録情報記憶部19を示す。送信記録情報記憶部19は、隣接ノードと送信記録情報とを対応付けて記憶する。
隣接ノードには、自ノードと直接通信可能なノードの情報が記憶される。受信部13がハローパケットを受信すると、生成部15は経路の構築を行うが、先に述べたとおり、ハローパケットを受信することで隣接ノードを把握することができる。生成部15は、自ノードと直接通信可能な隣接ノードを把握するたびに、送信記録情報記憶部19に、隣接ノードの情報を追加する。例えば隣接ノードのIDやアドレスが記録される。
そして、送信記録情報には、各隣接ノードによるデータパケットの送信先に関する情報が記憶される。例えば、各ノードが一定周期でデータパケットを送信するアドホックネットワークシステムであれば、自ノードがローカルディスティネーションLDに設定されたデータパケットを、一定時間内に受信した数が、送信記録情報として記憶される。
なお、データパケットのローカルソースLSに隣接ノードが設定されていればよく、グローバルソースGSは隣接ノードである必要はない。また、データパケットに再送回数が設定されている場合には、再送されたデータパケットについては、集計の対象外とする。
例えば、10分に1回データパケットを送信するアドホックネットワークシステムにおいて、取得部16は、自ノードをローカルディスティネーションLDとするデータパケットを、1時間あたりに受信した数を求める。
図5の例では、ノードNaが、隣接ノードNbから、1時間の中で、1回、自ノードNaをローカルディスティネーションLDとするデータパケットを受信したことを示している。つまり、隣接ノードNbは、1時間当たり6個のデータパケットを送信しているにも関わらず、ノードNaを経由する経路を1度しか利用していないことがわかる。
よって、ノードNbは、通常、他の経路を優先経路として利用していることが推測される。ノードNaがノードNbを経由する経路にデータパケットを送信した場合、データパケットはノードNbに受信されたのち、ノードNbの優先経路にしたがって自ノードNa以外のノードへ転送される。
一方、隣接ノードNdは、ノードNaを経由する経路を6度利用していることがわかる。よって、ノードNaは、ノードNdが自ノードNaを経由する経路を優先経路として利用していることを推測できる。したがって、ノードNaがノードNdを経由する経路にデータパケットを送信した場合、データパケットはノードNdに受信されたのち、ノードNdの優先経路にしたがって自ノードNaに転送される。つまり、ループが発生する。
ここで、取得部16は、送信記録情報に基づき、条件を満たす隣接ノードを、自ノード以外を優先経路とする隣接ノードとして特定する。例えば、送信記録情報として記憶された値が、閾値以下である場合に、取得部16は、条件を満たすと判定する。
閾値は、データパケットの送信周期と、送信記録情報の収集期間とを参照して、設定される値である。例えば、各ノードNxが10分に1回データパケットを送信するネットワークにおいて、1時間ごとに送信記録情報を集計する場合には、閾値は4に設定される。
そして、取得部16は、自ノード以外を優先経路とする隣接ノードを経由する経路については、経路情報記憶部18のフラグに「1」を設定する。一方、自ノードを優先経路とする隣接ノードを経由する経路については、経路情報記憶部18のフラグに「0」を設定する。そして、選択部17は、フラグ「1」の経路のうち、優先順位がより上位の経路を、代替経路として選択する。
一方、送信記録情報に関わるフラグ情報が格納されていない場合には、選択部17は、データパケットの送信経路を決定する際、送信記録情報が、閾値以下である隣接ノードを特定し、当該隣接ノードをローカルディスティネーションLDとする経路を、代替経路として選択する。
次に、各ノードNxが不定期でデータパケットを送信する場合の送信記録情報について説明する。図6は、他の実施例における送信記録情報記憶部19が記憶するデータの例を示す図である。
他の実施例における送信記録情報記憶部19は、隣接ノード、全データパケット数、自ノード宛データパケット数、送信記録情報を対応付けて記憶する。
隣接ノードには、自ノードと直接通信可能なノードの情報が記憶される。全データパケット数には、一定時間内に、各隣接ノードが送信したデータパケットの数が格納される。つまり、ローカルソースLSに隣接ノードのアドレスを持つデータパケットの受信数が格納される。
自ノード宛データパケット数には、ローカルディスティネーションLDに自ノードのアドレスが設定されたデータパケットの数が格納される。送信記録情報は、各隣接ノードが送信したデータパケットのうち、自ノードを経由する経路で送信されたデータパケットの割合に関する情報が格納される。つまり、全データパケット数に対する自ノード宛データパケット数の割合が格納される。
他の実施例においては、各ノードNxは無指向性のアンテナを有する。したがって、各ノードNxは、自ノードをローカルディスティネーションLDとしないデータパケットについても、受信することが可能である。
他の実施例においては、隣接ノードが送信した全データパケット数をカウントするために、受信したすべてのデータパケットを利用する。そして、取得部16は、隣接ノードごとに、隣接ノードのアドレスをローカルソースLSとするデータパケットを計数する。なお、受信したデータパケットが、自ノードをローカルディスティネーションLDとしないデータパケットである場合には、取得部16は、計数後、当該データパケットを破棄する。
また、取得部16は、隣接ノードのアドレスをローカルソースLSとするデータパケットであって、さらに、自ノードをローカルディスティネーションLDとするデータパケットについても計数する。なお、自ノードをローカルディスティネーションLDとするデータパケットである場合は、取得部16は、選択部17へ、経路の選択を依頼したうえで、当該データパケットを転送する。
そして、取得部16は、全データパケットおよび自ノードをローカルディスティネーションLDとするデータパケットの各々について、計数した値を用いて、隣接ノードが送信した全データパケット数に対する、自ノード宛データパケット数の割合を算出する。なお、本実施例においては、自ノードが受信できたデータパケットの数を、各隣接ノードが送信したデータパケットの全数とみなす。
図6の例では、隣接ノード「Nb」については、全データパケット数「10」、自ノード宛データパケット数「1」であるため、送信記録情報は「0.1」となる。隣接ノード「Nb」がノードNaを経由するデータパケットを送信する割合が低いため、隣接ノード「Nb」の優先経路は、ノードNaを経由する経路ではないと推測する。
取得部16は、条件を満たす隣接ノードを、自ノード以外を優先経路に設定するノードとして特定する。そして、取得部16は、経路情報記憶部18のフラグに「1」を設定する。一方、取得部16は、条件を満たさない隣接ノードを、自ノードを優先経路に設定するノードとして特定する。そして、取得部16は、経路情報記憶部18のフラグに「0」を設定する。
例えば、送信記録情報として記憶された値が、閾値以下である場合に、取得部16は、条件を満たすと判定する。閾値は、適宜設定される。例えば、閾値は0.6に設定される。
つぎに、各ノードNxにおける送信記録情報の取得処理について説明する。図7は、取得部16による送信記録情報の取得処理に関するフローチャートである。図7に示すフローチャートは、各ノードNxが一定周期でデータパケットを、シンクノードSNに送信するアドホックネットワークにおいて、送信記録情報を取得する場合のフローチャートである。
取得部16は、受信部13が受信したパケットを取得し、当該パケットがデータパケットであるか判定する(Op.1)。例えば、受信部13が受信したパケットに、グローバルソースGSおよびグローバルディスティネーションGDが設定されている場合に、受信したパケットはデータパケットであると判定される。また、取得部はデータパケットを受信するまで(Op.1No)、Op.1を繰り返す。
なお、取得部16は、各パケットがパケットタイプを有する場合には、当該パケットタイプから当該パケットがデータパケットであるか判定してもよい。例えば、パケットタイプが「1」であるパケットは、ハローパケットであることを示し、かつ、パケットタイプが「2」であるパケットは、データパケットを示す場合には、受信したパケットのパケットタイプが「2」である場合に、Op.1にて、取得部16は肯定の判断を行う。
次に、データパケットを受信した場合に(Op.1Yes)、取得部16は、受信したデータパケットのローカルディスティネーションLDに、自ノードのアドレスが設定されているかを判定する(Op.2)。Op.2は、ノードNxが指向性の高いアンテナを有する場合は省略してもよい。各ノードNxが無指向性のアンテナを有する場合には、自ノードのアドレスをローカルディスティネーションLDとするデータパケット以外にも、データパケットを受信することがあるため、Op.2の処理が実行される。
ローカルディスティネーションLDが自ノードのアドレスである場合には(Op.2Yes)、取得部16は、送信記録情報記憶部19を参照し、データパケットのローカルソースLSに対応する隣接ノードについて、送信記録情報を生成する(Op.3)。なお、すでに、送信記録情報が格納されている場合には、本処理において、送信記録情報は更新される。
例えば、取得部16は、図5に示した送信記録情報の例においては、受信したデータパケットのローカルソースLSに対応する隣接ノードについて、送信記録情報として記憶される受信数に1を加算する。
そして、取得部16は、送信記録情報を取得する(Op.4)。そして、取得部16は、送信記録情報が所定の条件を満たすかを判定する(Op.5)。例えば、取得部16は、送信記録情報として記憶された数値が閾値以下であるか否かを判定する。
所定の条件を満たす場合に(Op.5Yes)、取得部16は、処理を終了する。つまり、経路情報記憶部18におけるフラグは、初期状態である「1」のままとなる。一方、所定の条件を満たさない場合に(Op.5No)、取得部16は、データパケットのローカルソースLSに対応する隣接ノードについて、経路情報記憶部18におけるフラグを、「0」に設定する(Op.6)。
また、図7の例では、ローカルディスティネーションLDに自ノードのアドレスが設定されていない場合(Op.2No)については、処理をOp.1へ戻す。しかし、取得部16が図6に示す送信記録情報を取得する場合には、Op.1へ処理を戻す前に、全データパケット数に1を加算する。
なお、送信記録情報は、一定時間ごとにクリアされてもよい。この場合は、一期間前の送信記録情報に基づくフラグが、代替経路の選択に利用されることとなる。また、Op.1乃至Op.3を実施し、一定時間経過後に、Op.4乃至Op.6が実施されてもよい。つまり、各隣接ノードが一定以上のデータパケットの送信を行ったあとに、これらデータパケットの送信に関わる送信記録情報が取得される。そして、取得された送信記録情報を用いて、判定処理(Op.5)が実施されるとしてもよい。
以上のように、取得部16は、隣接ノードに関する送信記録情報を取得することができる。さらに、取得部16は、データパケットが一定周期で送信されるネットワークや、不定期で送信されるネットワークにおいても、送信記録情報を取得することができる。そして、送信記録情報を利用することで、ノードNxは、隣接ノードが、自ノードを経由する経路を優先経路として設定しているかを、把握することができる。
次に、データパケット送信時における、代替経路の選択処理について説明する。図8は、代替経路の選択処理に関するフローチャートである。まず、制御部11による制御の下、送信部14は、優先経路に対してデータパケットを送信する(Op.11)。
ここで、優先経路に対するデータパケットの送信について簡単に説明する。第一に、自ノードがグローバルソースGSとなる場合は、制御部11は、サーバSへ送信するデータを生成し、ペイロードデータ格納部22へ格納する。そして、選択部17は、経路情報記憶部18を参照し、グローバルディスティネーション「シンクノードSN」までの経路のうち、もっとも品質の良い経路を選択する。例えば、優先順位「1」の優先経路が選択される。
そして、選択部17は、選択した経路に対応するローカルディスティネーションLDを、経路情報記憶部18から取得する。そして、各種ヘッダ情報が、ヘッダ情報格納部21に設定される。なお、ローカルソースLSおよびローカルディスティネーションLDについては、自ノードのアドレスが設定される。そして、優先経路に対してデータパケットが送信される。
第二に、自ノードがローカルソースLSとなる場合(データパケットの転送を行う場合)は、選択部17は、隣接ノードから受信したデータパケットの、ヘッダ情報を書き換える。つまり、ローカルソースLSに自ノードのアドレスが、ローカルディスティネーションLDに自ノードにおける優先経路となる隣接ノードのアドレスが設定される。そして、優先経路に対して、データパケットが送信される。
次に、選択部17は、優先経路でのデータパケット送信が成功したか否かを判定する(Op.12)。例えば、データパケットの送信から一定時間以内に、選択部17は、シンクノードSNからデータパケットの受信を知らせる応答を、受信したか否かに基づき、判定を行う。一定時間以内に、応答を受信した場合は、選択部17は、優先経路でのデータパケット送信が成功したと判断する。
データパケットの送信が成功した場合は(Op.12Yes)、代替経路の選択処理は終了する。一方、データパケットの送信が成功しなかった場合は(Op.12No)、選択部17は、経路情報記憶部18を参照し、フラグが「1」である経路が存在するか否かを判定する(Op.13)。ここでは、優先経路以外で、フラグが「1」である経路が存在するか否かが判定される。なお、フラグで判定する方法以外にも、例えば、Op.13において、図7のOp.5の判定が実行されてもよい。
つまり、Op.13においては、自ノード以外を優先経路とする隣接ノードが存在するか否かが判定される。各経路におけるローカルディスティネーションLDとなる隣接ノードへデータパケットを送信したとしても、当該隣接ノードからデータパケットが自ノードへ送信されることがないような経路が存在するかが判定される。
フラグが「1」である経路が存在する場合は(Op.13Yes)、選択部17は、フラグが「1」の経路のうち、優先順位が高い経路を選択する(OP.14)。優先経路以外の経路のなかで、フラグが「1」であって、優先順位がより高い経路(優先順位が2以下の経路)が選択される。
そして、選択部17は選択した経路に基づきヘッダ情報を生成し、送信部14は、データパケットを送信する(Op.15)。そして、制御部11は、処理を終了させる。
ただし、選択部17は、優先経路同様、代替経路でのデータパケットの送信が成功したか否かを監視してもよい。そして、代替経路でのデータパケットの送信が成功しなかった場合には、他の代替経路を選択してもよい。
一方、フラグが「1」の経路が存在しない場合は(Op.13No)、選択部17は、一定時間待機する(Op.16)。そして、優先経路でデータパケットの送信を、再度試みる(Op.11)。
以上のとおり、本実施例によれば、適切な代替経路が選択される。つまり、選択部17は、自ノード以外を優先経路とする隣接ノードを、経路として選択する。したがって、自ノードにおける優先経路に障害が発生した場合に、各ノードは、当該優先経路を回避可能となる可能性の高い経路を選択することができる。
次に、優先経路以外に利用可能な代替経路が存在しない場合の各ノードの処理について説明する。図9は、警告信号の送信処理に関するフローチャートである。本実施例においては、警告信号の送信処理は、優先経路に障害を検知したタイミングで実行される。しかし、これに限らず、定期的に実行されてもよい。
まず、選択部17は、経路情報記憶部18を参照し、優先経路以外にフラグ「1」の経路があるか否かを判定する(Op.21)。優先経路以外にフラグ「1」の経路が存在しない場合(Op.21No)、制御部11の制御の下、送信部14は、警告信号を送信する(Op.22)。
警告信号は、自ノードが優先経路以外に、利用可能な代替経路を有さないことを知らせるための信号である。そして、警告信号は、隣接ノードに対して送信される。つまり、警告信号送信時点で、経路情報記憶部18にローカルディスティネーションLDとして記録された各隣接ノードに対して、警告信号が送信される。
警告信号は、各隣接ノードに対してユニキャストされてもよいし、全隣接ノードに対してブロードキャストされてもよい。また、グローバルディスティネーションGDとなる装置が複数存在する場合には、いずれのグローバルディスティネーションGDに対する警告信号であるのかを示す識別情報が、警告信号に含まれる。
次に、選択部17は、警告信号の送信先を、記憶部12に記憶する(Op.23)。例えば、警告信号送信時点で、経路情報記憶部18にローカルディスティネーションLDとして記録された各隣接ノードが、記憶部12に記憶される。そして、選択部17は、処理を終了する。
一方、優先経路以外にフラグ「1」の経路がある場合(Op.21Yes)、選択部17は、過去に警告信号を送信したか否かを判定する(Op.24)。例えば、警告信号の送信先が記憶されている場合には、過去に警告信号を送信したことが判定される。
過去に警告信号を送信している場合には(Op.24Yes)、選択部17は、新たな経路を構築したか否かを判定する(Op.25)。新たな経路とは、警告信号の送信先以外の隣接ノードをローカルディスティネーションLDとする経路である。
アドホックネットワークなどの自律分散型ネットワークにおいては、ネットワークのトポロジーの変化により、新たな経路が構築されることがある。これは、物理的にノードが追加された場合や、周囲の環境が変化したことにともない通信状況が変化した場合を含む。生成部15は、経路情報を定期的に生成するが、選択部17は、図9に示す警告信号の送信処理のタイミングで、新たな経路が経路情報記憶部18に格納されている場合には、新たな経路を構築したと判定する。例えば、警告信号の送信先として記憶されたノード以外のノードをローカルディスティネーションLDとする経路が、経路情報記憶部18に記憶されている場合に、新たな経路が構築されたことが判定される。
なお、経路情報の生成処理は、警告信号の送信処理とは独立に実行される。しかし、2つの処理が同期してもよい。つまり、一定周期ごとに経路情報が生成または更新されると、それに続いて、警告信号の送信処理が実行されてもよい。
新たな経路が構築されている場合には(Op.25Yes)、制御部11の制御の下、送信部14は、解除信号を送信する(Op.26)。解除信号は、自ノードが優先経路以外に、利用可能な代替経路を有することを知らせるための信号である。
解除信号は、過去の警告信号の送信先に対して、送信されてもよいし、解除信号送信時点で、経路情報記憶部18にローカルディスティネーションLDとして記録された各隣接ノードに対して、送信されてもよい。
一方、過去に警告信号を送信していない場合(Op.24No)や、新たな経路を構築していない場合(Op.25No)には、選択部17は処理を終了する。
以上のように、ノードNxは、優先経路以外に利用可能な代替経路を持たないことを検知した場合に、自ノードが不安定であることを隣接ノードに通知することができる。そして、新たな経路が構築された場合には、優先経路以外に利用可能な代替経路を持つことを隣接ノードに通知することができる。
次に、警告信号を受信した場合の各ノードの処理について説明する。図10は、警告信号の受信に伴う経路の再構築処理を説明するためのフローチャートである。図9に示す警告信号の送信処理を受けて、ノードNxが他のノードから警告信号を受信した場合に、図10の処理が実行される。
受信部13は、隣接ノードから警告信号を受信する(Op.31)。そして、生成部15は、受信した警告信号は、優先経路となる隣接ノードから受信した警告信号であるか否かを判定する(Op.32)。例えば、生成部15は、警告信号に設定されたローカルディスティネーションLDと、経路情報記憶部18における優先順位「1」である経路のローカルディスティネーションLDとが一致するかを判定する。
次に、受信した警告信号が、優先経路となる隣接ノードからの警告信号である場合(Op.32Yes)、生成部15は、フラグが「1」の経路が、優先経路以外に存在するか否かを判定する(Op.33)。フラグが「1」の経路が、優先経路以外に存在する場合(Op.33Yes)は、生成部15は、経路情報記憶部18における経路情報を更新する(Op.34)。つまり、生成部15は、各経路について、経路情報記憶部18に設定された優先順位を更新する。
例えば、生成部15は、優先経路となっていた経路に対応する優先順位を「99」などのあらかじめ決まった値に設定する。そして、生成部15は、優先順位「99」以外の値をもつ残りの経路について、順位が高いものから、順に「1」「2」「3」「・・・」を付与する。
一方、受信した警告信号が、優先経路となる隣接ノードからの警告信号でない場合(Op.32No)や、フラグが「1」の経路が、優先経路以外に存在しない場合(Op.33No)は、生成部15は、処理を終了する。
本実施例においては、生成部15は、受信した警告信号が、優先経路となる隣接ノードからの警告信号でない場合は、経路情報を更新する必要がないと判断する。なお、警告信号の送信元である隣接ノードをローカルディスティネーションLDとする経路の優先順位を最下位に設定するなどしてもよい。
また、本実施例においては、生成部15は、フラグが「1」の経路が、優先経路以外に存在しない場合は、経路情報を更新する必要がないと判断する。これは、自ノード以外を優先経路とする隣接ノードがない状態、つまり、利用可能な代替経路がない状態である。よって、他の経路を優先経路とすることができない状態においては、経路情報は更新しない。
ここで、警告信号の受信にともない、優先経路ではなくなった経路は、解除信号の受信によって、再度優先経路に設定される。したがって、本実施例においては、解除信号を受信した場合、生成部15は、解除信号の送信元をローカルディスティネーションLDとし、かつ優先順位に決まった値(例えば「99」)を有する経路が存在するかを判定する。そして、該当する経路が存在する場合に、生成部15は、当該経路に、再度、優先順位「1」を付与する。
以上のように、警告信号の受信を受けて、自ノードにおける経路を再構築することができる。つまり、本実施例に係るノードNxは、不安定な隣接ノードをローカルディスティネーションLDとする経路以外を優先経路とする経路情報へ更新することができる。また、ノードNxは、適切なタイミングで、品質の良い経路を、再度優先経路とすることができる。
例えば、図9に示す警告信号の送信処理が、複数のノードNxのうちの第一のノードにおける優先経路の障害検知を契機に実行される場合は、複数のノードNxのうちの警告信号を受信した第二のノードは、第一のノードにおける優先経路に障害が発生し、かつ、第一のノードは利用可能な代替経路を有しないことを把握することができる。
そして、第二のノードが第一のノードを自ノードにとっての優先経路として設定している場合には、当該優先経路を利用しても、データパケットの送信が失敗する可能性が高いことが推測できる。したがって、第二のノードは、経路情報における優先順位を更新する。つまり、第二のノードは、第一のノードをローカルディスティネーションLDとする経路以外の経路を優先経路に、再設定する。
一方、図9に示す警告信号の送信処理が定期的に実行される場合には、警告信号を受信した第二のノードは、警告信号の送信元である第一のノードにおいて、利用可能な代替経路が存在しないことを把握することができる。そして、第二のノードは、第一のノードが自ノードにとっての優先経路である場合であって、なんらかの理由で第一のノードにおける優先経路に障害が発生した場合に、データパケットの送信ができなくなる可能性があることを把握できる。
なぜなら、第一のノードは利用可能な代替経路を有しないことから、優先経路以外でのデータパケットの転送ができないためである。したがって、第二のノードは、経路情報における優先順位を更新する。つまり、第二のノードは、第一のノードをローカルディスティネーションLDとする経路以外の経路を優先経路に、再設定する。
なお、各ノードNxが、各隣接ノードに関する送信記録情報を取得するまでは、各ノードNxは、優先経路の次に品質が良い経路を、代替経路として利用してもよい。また、所定時間ごとの送信記録情報に基づき、各ノードは、代替経路として利用する隣接ノードを、定期的に選択してもよい。さらに、自ノード以外を優先経路とする隣接ノードが複数ある場合には、経路の品質がよりよい経路が選択される。
また、優先経路を選択する際にも、送信記録情報が参照されてもよい。例えば、図4におけるフラグ「1」に対応する経路で、もっとも経路コストが小さい経路が優先経路に選択されるとしてもよい。
次に、ノードNxのハードウェア構成を説明する。図11は、ノードNxのハードウェア構成の一例を示す図である。図11は、ノードNxのハードウェア構成例である。ノードNxは、無線通信機能を有するコンピュータである。ノードNxは、CPU(Central Processing Unit)101と、RAM(Random Access Memory)102と、フラッシュメモリ103と、通信装置104と、バス107とを備えている。CPU101乃至通信装置104は、バス107よってそれぞれ接続されている。
CPU101は、ノードNxの全体の制御を司る。CPU101は、RAM102にロードされたプログラムを実行することにより、制御部11などとして機能する。
RAM102は、CPU101のワークエリアとして使用される。フラッシュメモリ103は、プログラムや、経路情報、送信記録情報を記憶している。なお、フラッシュメモリ103は、記憶部12の一例である。プログラムには、例えば、フローチャートに示した各処理を実行させる為のプログラムが含まれる。例えば、図7乃至図10に示す通信処理を、ノードNxに実行させる為の制御プログラムが、フラッシュメモリ103に記憶される。
フラッシュメモリ103に記憶されたプログラムを、RAM102にロードし、CPU101が実行することで、ノードNxは、図3に記載した制御部11として機能する。また、ノードNxは、図7乃至図10に示した各種処理を実行する。
通信装置104は、マルチホップ通信によりパケットを送受信する。通信装置104は、通信部10の一例である。通信装置104は、アンテナや通信回路を含む。
ノードNxは、さらに、暗号化回路105や、センサ106を備えてもよい。暗号化回路105は、データを暗号化する場合に暗号鍵によりデータを暗号化する回路である。例えば、パケットを暗号化して送信する場合は、暗号化回路105が機能する。暗号化をソフトウェア的に実行する場合は、暗号化回路105に相当するプログラムをフラッシュメモリ103に記憶させておくことで、暗号化回路105は不要となる。
センサ106は、センサ106固有のデータを検出する。例えば、温度、湿度、水位、降水量、風量、音量、電力使用量、時間、時刻、加速度など、測定対象にあったデータを検出する。なお、CPU101が、センサ106からデータを取得することができる。例えば、センサ106が取得したデータが、データパケットのペイロードデータ格納部22に格納されて、サーバSにより収集される。
また、ノードNxは、無線通信機能を有する汎用コンピュータや、携帯電話、スマートフォンなどのコンピュータでもよい。この場合、ノードNxは、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)、通信装置、HDD(Hard Disk Drive)、入力装置、表示装置、媒体読取装置を有しており、各部はバスを介して相互に接続されている。
各種フローチャートに示した通信プログラムは、コンピュータが読み取り可能な記録媒体に記録される。コンピュータが読み取り可能な記録媒体には、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、HDD、フレキシブルディスク(FD)、磁気テープ(MT)などがある。
光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc − Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto − Optical disk)などがある。このプログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売されることが考えられる。
そして本実施例にかかる通信プログラムを実行するコンピュータは、例えば媒体読取装置が、通信プログラムを記録した記録媒体から、該プログラムを読み出す。CPUは、読み出されたプログラムをHDD若しくはROM、RAMに格納する。
CPUは、ノードNx全体の動作制御を司る中央処理装置である。そして、CPUが、通信プログラムをHDDから読み出して実行することで、CPUは、図3に示す制御部11として機能するようになる。通信プログラムはCPUとアクセス可能なROMまたはRAMに格納されていても良い。また、通信装置は、CPUの制御の下、通信部10として機能する。
さらに、HDDは、CPUの管理下で図2に示す記憶部12として機能する。つまり、HDDは、経路情報や送信記録情報を記憶する。通信プログラム同様、経路情報や送信記録情報はCPUとアクセス可能なROMまたはRAMに格納されても良い。さらに、処理の過程で生成される各種情報は、例えば、RAMに格納される。
入力装置は、各種入力を受け付ける。入力装置は、例えばキーボードやマウスである。表示装置は、各種情報を表示する。表示装置は、例えばディスプレイである。