図1は、実施形態にかかる通信方法の例を説明するフローチャートである。実施形態にかかる通信方法を用いて通信を行う通信装置10は、隣接する通信装置10との間でHelloフレームを送受信する。通信装置10は、有線で通信を行ってもよく、無線通信を行ってもよい。通信装置10が無線アドホックネットワーク中の装置である場合、ある通信装置に「隣接する」通信装置は、ある通信装置から送信されたフレームを受信することができる範囲内に位置する通信装置のことを指すものとする。また、ある通信装置から送信されたフレームを受信できる範囲に位置する通信装置のことを、その通信装置の「隣接ノード」と記載することがある。
ステップS1において、通信装置10は、Helloフレームを用いて、隣接ノードとの間で、経路情報と、隣接ノードを介して通信可能な通信先に付されている一意情報を交換する。ここで、一意情報は、隣接ノードを介して通信可能な通信先を識別する際に隣接ノードが使用する情報であり、かつ、その通信先に割り当てられているアドレスよりもデータ長が短い情報である。通信装置10は、その通信装置10で動作しているアプリケーションなどでフレームの送信要求が行われるまで、ステップS1の処理を継続する(ステップS2でNo)。
アプリケーションなどでフレームの送信要求が発生すると、通信装置10は、ルーティングテーブルなどを用いて、フレームの転送先を特定する(ステップS2でYes)。通信装置10は、フレームの転送先がフレームの最終宛先に対して設定した一意情報を取得済みであるかを判定する(ステップS3)。転送先が最終宛先に対して設定した一意情報を取得している場合、通信装置10は、フレームの最終宛先のアドレスを、転送先が最終宛先に設定した一意情報に置換する(ステップS3でYes、ステップS4)。
さらに、通信装置10は、フレームの生成元に対して自ノードが設定した一意情報を、転送先に通知済みであるかを判定する(ステップS5)。フレームの生成元に対して自ノードが設定した一意情報を、転送先に通知済みである場合、フレームの生成元のアドレスを自ノードが生成元に対して設定した一意情報に置換する(ステップS5でYes、ステップS6)。その後、通信装置10は、処理済みのフレームを転送先に向けて送信する(ステップS7)。
なお、ステップS3において、転送先が最終宛先に対して設定した一意情報を取得していない場合、通信装置10は、ステップS4の処理を行わずにステップS5以降の処理を行う。また、ステップS5において、フレームの生成元に対して自ノードが設定した一意情報を転送先に通知していないと判定した場合、通信装置10は、ステップS6の処理を行わずにステップS7の処理を行う。
なお、図1を参照しながら説明した処理は一例であり、通信装置10で行われる処理は、実装に応じて変更されうる。例えば、ステップS3〜S4の処理よりも前に、ステップS5〜S6の処理が行われるように変形されても良い。後述するように、Helloフレームにゲートウェイ装置として動作する通信装置10の情報以外を含めない場合は、ゲートウェイ装置の情報についてだけ、一意情報に置き換えるための処理を行ってもよい。すなわち、後述するように、ゲートウェイ装置に向けて送信されるフレームの処理の場合は、ステップS5、S6が省略され得る。また、ゲートウェイ装置から送信されたフレームについては、ステップS3、S4の処理が省略されうる。
図1を参照しながら説明したように、通信装置10は、転送先においてフレームの最終宛先や送信元をアドレスよりも短い一意情報により識別できる場合には、アドレスの代わりに一意情報を用いることにより、ヘッダのサイズを小さくすることができる。したがって、各フレームに含められるデータサイズが大きくなり、結果として、通信効率が向上する。また、1フレームあたりのペイロードを大きくすることでスループットが改善する。すなわち、アドホックネットワークにおける通信速度が向上する。
<通信装置の構成とフレームのフォーマット例>
以下の説明では、フレームの最終的な宛先を「グローバル宛先」(Global Destination、GD)と記載することがある。一方、フレームを最終的な宛先に送信するために行われる1ホップの転送の際に、転送先として指定される通信装置のことを、「ローカル宛先」(Local Destination、LD)と記載することがある。さらに、関連して、フレームの最終宛先に送信されるデータを生成した通信装置10を「グローバル送信元」(Global Source、GS)と記載することがある。また、フレームが1ホップ転送される場合の転送元の通信装置10のことを、「ローカル送信元」(Local Source、LS)と記載することもある。
図2は、通信装置10の構成の例を説明する図である。通信装置10は、受信部11、ヘッダ解析部12、転送処理部13、アプリケーション処理部14、フレーム生成部15、送信部16、制御部20、記憶部30を備える。制御部20は、抽出部21、GDID管理部22、テーブル管理部23、経路情報生成部24、タイマ25を備える。記憶部30は、リンクテーブル(Link Table、LT)31、ルーティングテーブル(routing table、RT)32、転送先テーブル33を保持し、さらに、通信装置10がゲートウェイ装置として動作するかを示す情報も記憶する。
受信部11は、他の通信装置10からフレームを受信し、受信したフレームをヘッダ解析部12に出力する。ヘッダ解析部12は、フレーム中のヘッダの情報を解析し、Helloフレームを抽出部21に出力する。また、ヘッダ解析部12は、データフレームのグローバル送信元とローカル送信元の情報を用いて、転送先テーブル33を生成する。ヘッダ解析部12は、自ノードがグローバル宛先に指定されたデータフレームをアプリケーション処理部14に出力し、自ノード以外がグローバル宛先に指定されたデータフレームを転送処理部13に出力する。転送処理部13は、入力されたフレームをグローバル宛先に向けて転送するための転送先(ローカル宛先)を、ルーティングテーブル32や転送先テーブル33を用いて決定する。転送処理部13は、特定したローカル宛先の情報を、フレーム中のデータ、グローバル宛先、グローバル送信元などの情報とともに、フレーム生成部15に出力する。アプリケーション処理部14は、入力されたフレームのデータを処理する。また、他の装置に送信するデータを、宛先などの情報とともにフレーム生成部15に出力する。フレーム生成部15は、転送処理部13、アプリケーション処理部14、または、経路情報生成部24のいずれかから、入力されたデータを含むフレームを生成する。フレーム生成部15は、生成したフレームを送信部16に出力する。送信部16は、他の装置に向けてフレームを送信する。
抽出部21は、Helloフレームで通知された情報を抽出し、テーブル管理部23に
出力する。GDID管理部22は、Helloフレームで経路情報が通知された通信先に対して、通信装置10自身が使用する一意情報(グローバル宛先ID、GDID)として使用できる値を管理する。テーブル管理部23は、抽出部21から入力された情報を用いて、ルーティングテーブル32を更新する。Helloフレームによって新たな通信先に関する経路情報が通知されると、テーブル管理部23は、GDID管理部22が保持する値から選択した値を、その通信先の識別に使用する一意情報として、ルーティングテーブル32に記録する。タイマ25は、Helloフレームの送信周期を計測する。経路情報生成部24は、Helloフレームに含める情報をルーティングテーブル32から抽出して、フレーム生成部15に出力する。
リンクテーブル31は、通信装置10に隣接する通信装置10ごとに、その通信装置10のアドレスや、その装置と自装置の間のリンクの状況などを示す値を格納する。転送先テーブル33は、受信したデータフレームのグローバル送信元をグローバル宛先と読み替えるとともに、ローカル送信元をローカル宛先に読み替えることによって得られる経路情報を記録する。すなわち、転送先テーブル33は、自ノードにフレームを送信してきた通信装置10に至る経路情報を記録する。
図3は、通信装置10のハードウェア構成の例を示す図である。通信装置10は、プロセッサ100、バス101(101a〜101c)、タイマIC104、Dynamic Random access Memory(DRAM)106、フラッシュメモリ107、無線モジュール108を備える。通信装置10は、オプションとして、PHYチップ102を含むことができる。バス101a〜101cは、プロセッサ100、PHYチップ102、タイマIC104、DRAM106、フラッシュメモリ107、および、無線モジュール108を、データの入出力が可能になるように接続する。
プロセッサ100は、Micro-Processing Unit(MPU)などの任意の処理回路である。プロセッサ100は、フラッシュメモリ107に格納されたファームウェアなどのプログラムを読み込んで処理を行う。このとき、プロセッサ100は、DRAM106をワーキングメモリとして使用できる。通信装置10において、プロセッサ100は、ヘッダ解析部12、転送処理部13、アプリケーション処理部14、フレーム生成部15、抽出部21、GDID管理部22、テーブル管理部23、経路情報生成部24として動作する。通信装置10において、DRAM106は、記憶部30として動作する。通信装置10において、無線モジュール108は、受信部11および送信部16として動作する。PHYチップ102は、有線通信に用いられる。アドホックネットワークと他のネットワーク中の装置の間の通信を中継するゲートウェイとして動作する通信装置10では、PHYチップ102を介して回線による通信が行うことができる。タイマIC104は、タイマ25として動作する。
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、通信装置10にインストールされてもよい。また、プログラムは、ネットワークからPHYチップ102や無線モジュール108を介してダウンロードされることにより通信装置10にインストールされてもよい。さらに、実施形態に応じて、DRAM106やフラッシュメモリ107以外の他の種類の記憶装置が利用されることがある。また、通信装置10は、コンピュータによって実現されても良い。
図4は、フレームのフォーマットの例を説明する図である。フレームF101は、アドホックネットワーク中で送受信されるデータフレームのフォーマットの例であり、フレームF102は、Helloフレームのフォーマットの例である。
データフレームは、フレームF101に示すように、物理ヘッダ、MAC(Media Access Control)ヘッダ、アドホックヘッダ、ペイロード、署名、FCS(Frame Check Sequence)を含み、適宜、パディングを含む。MACヘッダ中に、ローカル宛先アドレス(LD)とローカル送信元アドレス(LS)が含まれる。アドホックヘッダ中には、グローバル宛先アドレス(GD)、グローバル送信元アドレス(GS)、方向フラグが含まれる。方向フラグは、そのデータフレームがゲートウェイ装置に向けて送信されているかを示す情報である。以下の説明では、ゲートウェイ装置に向けて送信されているフレームでは、方向フラグは1に設定されるものとする。一方、ゲートウェイ装置から他の通信装置10に送信されているフレームでは、方向フラグは0に設定されるものとする。
Helloフレームも、フレームF102に示すように、物理ヘッダ、MACヘッダ、アドホックヘッダ、ペイロード、署名、FCSを含み、適宜、パディングを含む。物理ヘッダ、MACヘッダ、アドホックヘッダは、データフレームと同様である。ただし、Helloフレームでは、ローカル送信元のアドレスとグローバル送信元アドレスは、いずれも、Helloフレームを生成した装置に割り当てられたアドレスに設定される。さらに、Helloフレームのローカル宛先アドレスとグローバル宛先アドレスは、ブロードキャストアドレス(BC)に設定される。
Helloフレームのペイロードには、HelloメッセージヘッダとHelloヘッダが含まれる。Helloメッセージヘッダには、Helloフレーム中に含まれるHelloヘッダの数などの情報が含まれる。個々のHelloヘッダには、Helloフレームの送信元の通信装置10を介して通信できるグローバル宛先の情報が含まれる。図4の例では、Helloヘッダには、Helloフレームの送信元から通信できるグローバル宛先のアドレス、GDID、ホップ数、経路品質重みが含まれる。GDIDは、Helloヘッダ中にアドレスが記録されているグローバル宛先に対して、Helloフレームの送信元が設定したGDIDの値である。ホップ数は、Helloフレームの送信元からHelloヘッダ中のグローバル宛先までのホップ数である。経路品質重みは、Helloフレームの送信元から、Helloヘッダに情報が記録されているグローバル宛先までの経路の品質を示す情報である。
<第1の実施形態>
以下、第1の実施形態を、Helloフレームの処理、データフレームの転送処理、複雑なネットワークへの適用例に分けて説明する。なお、第1の実施形態では、ゲートウェイ装置として動作する通信装置10の情報は、Helloフレームで伝搬されるが、ゲートウェイ装置して動作しない通信装置10の情報はHelloフレームによって他の装置に通知されない場合について述べる。第1の実施形態は、検針システムなど、ゲートウェイとして動作しない通信装置10の数が、ゲートウェイとして動作する通信装置10の数よりも多く、各通信装置10のルーティングテーブル中の情報量を小さくすることが求められる場合に適用しやすい。
〔Helloフレームの処理〕
図5は、Helloフレームの送受信の際に行われる処理の例を説明する図である。以下の説明では、各通信装置10を区別しやすくするために、ノードA、ゲートウェイGW1など、各通信装置10の識別子を用いて説明する。以下、動作を行っているノード装置10を明確にするために、符号の最後に動作を行っているノード装置10に割り当てられているアルファベットを記載することがある。例えば、ノードAの中の受信部11を受信部11a、GW1中の転送先テーブル33を転送先テーブル33gw1などと表記することがある。さらに、図を見やすくするために、フレームに含まれている情報のうち、MACヘッダ、アドホックヘッダ、Helloヘッダなどの、フレームの一部の情報を図示し、他の情報を省略することもある。
以下、GDIDの各々について、どの通信装置10を識別するために、いずれの通信装置10で使用されるかをGDIDの添え字で表わす。GDIDの添え字は、GDIDが表わす通信装置10、ハイフン、GDIDを設定した通信装置10を連続的に表記した文字列を下付き文字で示している。例えば、ノードAがゲートウェイGW1を識別するためにゲートウェイGW1に対して設定するGDIDを、GDIDGW1−Aのように表記する。なお、GDIDで識別される通信装置10が、その通信装置10自身に付したGDIDについては、GDIDを設定した装置とGDIDで識別される装置が同じであるので、GDIDを設定した装置の情報を添え字から省略することがある。例えば、「GDIDGW1」は、ゲートウェイGW1がゲートウェイGW1自身に対して設定したGDIDの値を表わす。なお、第1の実施形態では、各ゲートウェイ装置が、自装置を識別するGDIDを0に設定し、ゲートウェイ装置以外の装置はGDIDに0以外の値を設定する場合を例とする。
図5に示すネットワークには、ゲートウェイGW1とゲートウェイGW2の2つのゲートウェイ装置が含まれる。ノードAは、ゲートウェイGW1とゲートウェイGW2のいずれにも隣接している。ノードBはノードAに隣接している。
まず、ゲートウェイGW1がフレームF1に示すHelloフレームを生成したとする。フレームF1に含まれているMACヘッダには、ローカル送信元がゲートウェイGW1であることが記録されており、Helloヘッダ1には、ゲートウェイGW1の情報が含まれる。なお、ゲートウェイGW1は、ゲートウェイGW1自身を識別するときに使用する情報として、GDIDGW1=0を、Helloヘッダ1に含める。ゲートウェイGW1は、フレームF1に示すHelloフレームを送信する。なお、MACヘッダ中のLD=BCは、ローカル宛先アドレスがブロードキャストアドレスであることを示している。
ノードAの受信部11aは、フレームF1を受信し、ヘッダ解析部12aに出力する。ヘッダ解析部12aは、フレームF1がHelloフレームであるため、抽出部21aにフレームF1を出力する。抽出部21aは、フレームF1のMACヘッダに指定されているローカル生成元(LS)の情報を、Helloフレームの送信元の情報として抽出し、さらに、Helloヘッダ1の情報を抽出する。抽出部21aは、抽出した情報をテーブル管理部23aに出力する。テーブル管理部23aは、抽出部21aから入力された情報を用いて、ルーティングテーブル32aの情報を更新する。このとき、テーブル管理部23aは、Helloフレームの送信元を、そのHelloフレームで通知されたグローバル宛先に対するローカル転送先に読み替える。
ルーティングテーブル32aには、グローバル宛先ごとに、グローバル宛先のアドレスとそのグローバル宛先を識別するために自ノードが使用するGDID、グローバル宛先に対してフレームを転送する際に使用できるローカル転送先の情報が含まれる。ローカル転送先の情報には、ローカル転送先に割当てられたアドレスと、ローカル転送先となっている通信装置10において、グローバル宛先の通信装置10の識別に使用されるGDIDが含まれる。
テーブル管理部23aは、GDID管理部22aが保持している情報を用いて、ノードAがいずれの装置にも設定していないGDIDの値から、新たに通知されたグローバル宛先の識別に使用する値を選択する。以下の例では、テーブル管理部23aは、GW1に対して、GDID=2を選択したとする。GDID管理部22aは、テーブル管理部23aが選択した値を、選択可能な値から削除する。一方、テーブル管理部23aは、Helloヘッダ1より得られた情報などを用いて、以下の情報を、ルーティングテーブル32aに記録する。
グローバル宛先(GD):GW1
GDに対して自ノードが使用するGDID:GDIDGW1−A=2
ローカル宛先(LD) :GW1
LDがGDに設定したGDID :GDIDGW1=0
このため、テーブル管理部23aの処理により、ルーティングテーブル32aの「転送先1」に関する情報が生成される。
次に、ゲートウェイGW2がフレームF2に示すHelloフレームを生成したとする。フレームF2に含まれているMACヘッダには、ローカル送信元がゲートウェイGW2であることが記録されており、Helloヘッダ1には、ゲートウェイGW2のアドレスと、GDIDGW2=0が含まれている。ゲートウェイGW2は、フレームF2に示すHelloフレームを送信する。
ノードAはフレームF2を受信する。抽出部21aは、受信部11a、ヘッダ解析部12aを介して、フレームF2を取得する。抽出部21aは、フレームF2のMACヘッダを用いて、フレームF2がゲートウェイGW2から送信されたHelloフレームであることを特定する。さらに、抽出部21aは、Helloヘッダ1の情報を抽出し、テーブル管理部23aに出力する。
テーブル管理部23aは、GDID管理部22aに含まれている情報や、抽出部21aから入力された情報を用いて、ゲートウェイGW2の識別の際にノードAが使用するGDIDを決定する。テーブル管理部23aの処理などにより、ゲートウェイGW2に対する情報は以下のとおりになったとする。
グローバル宛先(GD):GW2
GDに対して自ノードが使用するGDID:GDIDGW2−A=1
ローカル宛先(LD) :GW2
LDがGDに設定したGDID :GDIDGW2=0
テーブル管理部23aは、ゲートウェイGW2に関する情報もルーティングテーブル32aに記録する。このため、ルーティングテーブル32aの「転送先2」に示す情報が記録される。
その後、ノードAのタイマ25aにより、ノードAがHelloフレームを生成する時刻になったことが検出されたとする。経路情報生成部24aは、ルーティングテーブル32aに含まれているグローバル宛先の情報と、各グローバル宛先にノードAが設定したGDIDを、Helloフレームに含める情報として抽出する。経路情報生成部24aは、ノードAがゲートウェイ装置として動作しているかを判定する。ノードAは、ゲートウェイ装置として動作していないので、経路情報生成部24は、ノードAの情報をHelloフレームで他の装置に通知しないことを決定する。
経路情報生成部24aは、Helloフレームに含める情報をフレーム生成部15に出力する。フレーム生成部15は、経路情報生成部24から入力された情報を用いて、図5のフレームF3に示すHelloフレームを生成する。送信部16は、フレームF3を送信する。
ノードBは、フレームF3を受信する。抽出部21bは、受信部11b、ヘッダ解析部12bを介して、フレームF3を取得する。抽出部21bは、フレームF3のMACヘッダを用いて、フレームF3がノードAから送信されたHelloフレームであることを特定する。テーブル管理部23bは、Helloヘッダ1とHelloヘッダ2の情報を抽出部21bから取得すると、ゲートウェイGW1、GW2に対してノードBで使用するGDIDを決定する。さらに、テーブル管理部23bは、フレームF3で通知された情報を、ルーティングテーブル32bに記録する。このため、ルーティングテーブル32bには、以下の情報が記録される。
転送先1
グローバル宛先(GD):GW1
GDに対して自ノードが使用するGDID:GDIDGW1−B=1
ローカル宛先(LD) :A
LDがGDに設定したGDID :GDIDGW1−A=2
転送先2
グローバル宛先(GD):GW2
GDに対して自ノードが使用するGDID:GDIDGW2−B=2
ローカル宛先(LD) :A
LDがGDに設定したGDID :GDIDGW2−A=1
ルーティングテーブル32bの例を図5に示す。
ゲートウェイGW1とゲートウェイGW2もノードAに隣接しているので、ノードAから送信されたフレームF3を処理し、ノードBと同様に、ルーティングテーブル32を更新する。ただし、ゲートウェイGW1とGW2のいずれも自ノードをグローバル宛先としたHelloヘッダの情報は、ルーティングテーブル32の更新に使用しない。以後も、アドホックネットワーク中の各通信装置10は、予め決められた周期で、Helloフレームの送信を行う。また、隣接する通信装置10からHelloフレームを受信すると、通信装置10は、受信したHelloフレームを用いて、適宜、ルーティングテーブル32を更新する。
図6は、Helloフレームの受信処理の例を説明するフローチャートである。なお、図6は処理の一例であり、処理の順序は実装に応じて変更され得る。例えば、ステップS14〜S16の順序は、任意に変更され得る。
通信装置10は、Helloフレームを受信すると、抽出部21において、Helloフレーム中の各Helloヘッダのグローバル宛先(GD)の情報を抽出する(ステップS11、S12)。テーブル管理部23は、抽出されたグローバル宛先に対する登録がルーティングテーブル32中に既に存在するかを判定する(ステップS13)。
抽出されたグローバル宛先に対する登録がルーティングテーブル32中にない場合、テーブル管理部23は、Helloフレームの送信元(LS)を、グローバル宛先に宛てたフレームの転送先(LD)として記録する(ステップS13でNo、ステップS14)。さらに、テーブル管理部23は、Helloフレームの送信元がグローバル宛先に対して割り当てたGDIDを、Helloフレームの送信元に対応付けて記録する(ステップS15)。さらに、テーブル管理部23は、GDID管理部22が保持している情報を用いて、グローバル宛先を識別するために自ノードが使用するGDIDを、グローバル宛先に割り当てる(ステップS16)。テーブル管理部23は、グローバル宛先に対して割り当てたGDIDを、グローバル宛先に対応付けてルーティングテーブル32に登録する(ステップS17)。
一方、抽出されたグローバル宛先が既にルーティングテーブル32中に登録されているとする(ステップS13でYes)。この場合、テーブル管理部23は、グローバル宛先に対してHelloフレームの送信元(LS)が、ローカル宛先(LD)として登録されているかを判定する(ステップS18)。グローバル宛先に対してHelloフレームの送信元が登録されていない場合、テーブル管理部23は、Helloフレームの送信元を、グローバル宛先に宛てたフレームの転送先(LD)として記録する(ステップS18でNo、ステップS19)。その後、テーブル管理部23は、Helloフレームの送信元が、グローバル宛先に対して割り当てたGDIDを、Helloフレームの送信元に対応付けてルーティングテーブル32に記録する(ステップS20)。
ステップS18において、グローバル宛先に対してHelloフレームの送信元(LS)が、ローカル宛先(LD)として登録されていると判定した場合、テーブル管理部23は、ステップS20の処理を行う(ステップS18でYes、ステップS20)。
図7は、Helloフレームの送信処理の例を説明するフローチャートである。図7に示すフローチャートでは、変数nと定数Nが使用される。定数Nは、Helloフレームを生成する時点で、ルーティングテーブル32に記録されているグローバル宛先の総数である。変数nは、Helloフレームで通知する対象としてルーティングテーブル32から情報を抽出したグローバル宛先の数のカウントに用いられる変数である。
経路情報生成部24は、タイマ25を用いて、Helloフレームの送信時期であるかを判定し、Helloフレームの送信時期になるまで待機する(ステップS31でNo)。Helloフレームの送信時期になると、経路情報生成部24は、変数nの値を1に設定する(ステップS31でYes、ステップS32)。経路情報生成部24は、変数nが定数Nを超えたかを判定する(ステップS33)。変数nが定数N以下である場合、n番目のエントリに含まれているグローバル宛先と、自ノードがグローバル宛先に割り当てたGDIDを、Helloフレームで通知する情報に追加する(ステップS33でNo、ステップS34)。経路情報生成部24は、変数nを1つインクリメントして、ステップS33の処理に戻る(ステップS35)。
変数nが定数Nを越えた場合、経路情報生成部24は、自ノードがゲートウェイ装置として動作しているかを判定する(ステップS33でYes、ステップS36)。自ノードがゲートウェイ装置として動作している場合、経路情報生成部24は、自ノードの情報に対応付けて、自ノードを識別するGDIDをHelloフレームで通知する情報に追加する(ステップS36でYes、ステップS37)。その後、フレーム生成部15は、経路情報生成部24がHelloフレームで通知する情報として選択した情報を含むHelloフレームを生成する(ステップS38)。送信部16は、Helloフレームを送信する(ステップS39)。一方、ステップS36において、自ノードがゲートウェイ装置として動作していないと判定した場合、通信装置10は、ステップS38以降の処理を行う(ステップS36でNo)。
〔データフレームの転送処理〕
図8は、ゲートウェイ装置宛てのフレームの転送処理の例を説明する図である。図8を参照しながら、ノードBがゲートウェイGW1宛てにデータを送信する場合に行われる通信処理の例を説明する。
なお、以下の説明では、ゲートウェイとして動作していない通信装置10は、これまで経路情報を有していなかったゲートウェイ装置への経路情報を取得すると、新たに経路情報を取得したゲートウェイ装置に向けてデータフレームを送信するものとする。さらに、ノードAが保持するルーティングテーブル32aとノードBが保持するルーティングテーブル32bの情報は、図8に示す通りである。また、いずれかのゲートウェイ装置に向けて送信されたフレームでは、方向フラグ=1(上り方向)に設定されるものとする。
ノードBのアプリケーション処理部14bは、ゲートウェイGW1に送信するデータを生成したとする。アプリケーション処理部14bは、生成したデータと、宛先がゲートウェイGW1であることを示す情報を、フレーム生成部15bに出力する。フレーム生成部15bは、ルーティングテーブル32bを参照することにより、ゲートウェイGW1にフレームを送信する際には、ノードAがローカル宛先(LD)となることを特定する。さらに、フレーム生成部15bは、ノードAがゲートウェイGW1を識別する情報がGDIDGW1−A=2であることも、ルーティングテーブル32bより特定する。換言すると、フレーム生成部15bは、ゲートウェイGW1宛てのフレームの転送先であるノードAには、グローバル宛先のアドレスの代わりに、GDIDGW1−Aの値を通知すれば、グローバル宛先を通知できることを特定する。そこで、フレーム生成部15bは、以下の情報を有するヘッダに、アプリケーション処理部14bから入力されたデータをフレームのペイロードに含める。
ローカル宛先アドレス :ノードAのアドレス
ローカル送信元アドレス :ノードBのアドレス
グローバル宛先アドレス :2
グローバル送信元アドレス:ノードBのアドレス
方向フラグ :1(上り方向)
フレーム生成部15bが生成したデータフレームを、フレームF11に示す。ここで、各通信装置10のアドレスの記述には、8バイトが使用されるが、GDIDは1バイトで表記される。このため、アドホックヘッダの長さは、グローバル宛先とグローバル送信元の両方を、アドレスで表記する場合よりも7バイト短くなる。そこで、フレーム生成部15は、アドホックヘッダが短縮された分までの範囲で、ペイロード長を長くすることができる。フレーム生成部15bは、生成したフレームF11を送信部16bに出力する。送信部16bは、フレームF11をノードAに送信する。
ノードAがフレームF11を受信したとする。ヘッダ解析部12aは、フレームF11が方向フラグ=1に設定されたデータフレームであるため、フレームF11のグローバル宛先アドレスフィールドで通知されたGDIDの値で識別されるグローバル宛先を特定する。フレームF11のグローバル宛先アドレスフィールドには2が記録されている。一方、ルーティングテーブル32aに示すように、ノードAが設定したGDID=2はゲートウェイGW1を指す。そこで、ヘッダ解析部12aは、フレームF11のグローバル宛先のアドレスをゲートウェイGW1のアドレスに置き換えた上で、フレームF11のペイロードとフレームF11のヘッダの情報を、転送処理部13aに出力する。
さらに、ヘッダ解析部12aは、フレームF11をノードBから受信したことと、フレームF11のグローバル送信元がノードBであることから、グローバル宛先がノードBの場合、ローカル宛先をノードBに設定できることを認識する。ヘッダ解析部12aは、フレームF11のグローバル送信元とローカル送信元から得られた情報を、転送先テーブル33a(図9)に記録する。
転送処理部13aは、ルーティングテーブル32aを参照することにより、ゲートウェイGW1にデータを転送する際には、ゲートウェイGW1がローカル宛先(LD)となることを特定する。転送処理部13bは、データのグローバル宛先がゲートウェイGW1、ローカル宛先がゲートウェイGW1であることとともに、フレームF11に含まれていたデータを、フレーム生成部15aに出力する。フレーム生成部15aは、ゲートウェイGW1がゲートウェイGW1自身を識別する情報がGDIDGW1=0であることから、以下の情報を有するヘッダを含むフレームを生成する。
ローカル宛先アドレス :ノードGW1のアドレス
ローカル送信元アドレス :ノードAのアドレス
グローバル宛先アドレス :0
グローバル送信元アドレス:ノードBのアドレス
方向フラグ :1(上り方向)
フレーム生成部15aが生成したデータフレームを、フレームF12に示す。なお、フレームF12には、フレームF11に含まれていたデータが含まれている。送信部16aは、フレームF12をゲートウェイGW1に送信する。
ゲートウェイGW1はフレームF12を受信する。ヘッダ解析部12gw1は、フレームF12のグローバル宛先アドレスフィールドを用いて通知されたGDIDの値が0であることから、フレームF12がゲートウェイGW1宛てであると判定する。ヘッダ解析部12gw1は、フレームF12をアプリケーション処理部14gw1に出力する。ヘッダ解析部12gw1は、フレームF12のヘッダ情報を用いて、転送先テーブル33gw1を更新する。
図9は、ゲートウェイ装置から送信されたフレームの転送処理の例を説明する図である。図9を参照しながら、ゲートウェイGW1がノードB宛てにデータを送信する場合に行われる通信処理の例を説明する。
ゲートウェイGW1のアプリケーション処理部14gw1は、ノードB宛のデータを、データのグローバル宛先がノードBであることを示す情報と共に、フレーム生成部15gw1に出力する。フレーム生成部15gw1は、転送先テーブル33gw1を用いて、グローバル宛先がノードBの場合、ローカル宛先をノードAに設定することを特定する。ここで、ゲートウェイGW1は、Helloフレームを送信済みであるので、ゲートウェイGW1がゲートウェイGW1自身を識別するときに使用するGDIDを、隣接する通信装置10に通知済みである。このため、フレーム生成部15gw1は、グローバル送信元の値を、GDIDGW1=0に置換することにより、アドホックヘッダのサイズを小さくすると共に、ペイロード長を長くする。フレーム生成部15gw1での処理により生成されたフレームF21の例を図9に示す。なお、フレームF21はゲートウェイ装置から送信されるフレームであるため、フレームF21の方向フラグは0である。送信部16gw1は、フレームF21をノードAに送信する。
ノードAがフレームF21を受信したとする。ヘッダ解析部12aは、フレームF21が方向フラグ=0に設定されたデータフレームであるため、フレームF21のグローバル送信元アドレスフィールドで通知されたGDIDの値を用いて、フレームF21のグローバル送信元を特定する。すなわち、ヘッダ解析部12aは、フレームF21のローカル送信元(GW1)において、GDID=0で特定される通信装置10を特定する。このとき、ヘッダ解析部12aは、ルーティングテーブル32a中で、フレームF21のローカル送信元がローカル宛先として登録されているエントリのうち、GDIDの値とフレームF21中のグローバル送信元として通知された値が一致するものを検索する。図9に示すルーティングテーブル32aでは、LD=GW1のエントリのうちで、GDIDの値が0のエントリのグローバル宛先はゲートウェイGW1である。そこで、ヘッダ解析部12aは、フレームF21のグローバル送信元がゲートウェイGW1であることを示す情報と共に、フレームF21のデータとフレームF21のグローバル宛先の情報を、転送処理部13aに出力する。
転送処理部13aは、転送先テーブル33aを用いて、グローバル宛先がノードBの場合、ローカル宛先をノードBとすることを特定する。転送処理部13aは、ヘッダ解析部12aから入力されたデータやグローバル宛先などの情報とローカル宛先をフレーム生成部15aに通知する。フレーム生成部15aは、ノードAがゲートウェイGW1の情報を含むHelloフレームを送信済みであることから、ノードAがGDIDGW1−A=2でゲートウェイGW1を識別することを、隣接する通信装置10に通知済みであると判定する。そこで、フレーム生成部15aは、グローバル送信元の値を、GDIDGW1−A=2に置換することにより、アドホックヘッダのサイズを小さくして、フレームF22(図9)を生成する。なお、フレームF22もグローバル送信元がゲートウェイ装置であるため、フレームF22の方向フラグは0である。送信部16aは、フレームF22をノードBに送信する。
ノードBはフレームF22を受信する。ヘッダ解析部12bは、フレームF22の方向フラグ=0であるため、フレームF22のグローバル送信元アドレスフィールドで通知されたGDIDの値を用いて、フレームF22のグローバル送信元を特定する。すなわち、ヘッダ解析部12bは、ルーティングテーブル32bを用いて、フレームF22のローカル送信元(ノードA)において、GDID=2で特定される通信装置10がゲートウェイGW1であることを特定する。さらに、ヘッダ解析部12bは、フレームF22のグローバル宛先アドレスにノードBが指定されていることから、フレームF22はノードB宛であると判定する。ヘッダ解析部12bは、フレームF22のデータとフレームF22のグローバル送信元の情報を、アプリケーション処理部14bに出力する。アプリケーション処理部14bは、入力された情報を適宜処理する。
図10は、データフレームの受信処理の例を説明するシーケンス図である。図10および図11では、グローバル宛先に対して自ノードが決定したGDIDを「内部GDID」、グローバル宛先に対応付けられたローカル宛先が決定したGDIDを「LDが設定したGDID」と記載している。なお、図10は受信処理の一例であり、実装に応じて手順が変更されることがある。例えば、ステップS54〜S57の処理がステップS58〜S60の処理よりも前に行われても良い。
ヘッダ解析部12は、受信フレームを取得すると、データフレームかを判定する(ステップS51、S52)。受信フレームがデータフレームではない場合、ヘッダ解析部12は、フレームを制御部20に出力する(ステップS52でNo、ステップS53)。
受信フレームがデータフレームである場合、ヘッダ解析部12は、ゲートウェイに向けて送信されている(上り方向)フレームであるかを判定する(ステップS54)。まず、受信フレームが上り方向に転送されるデータフレームである場合について説明する(ステップS54でYes)。この場合、ヘッダ解析部12は、ルーティングテーブル32から、内部GDIDと受信フレームによりグローバル宛先アドレスとして通知されたGDIDが等しいエントリを取得する(ステップS55)。ヘッダ解析部12は、取得したエントリを用いて、フレーム中のGDIDを、グローバル宛先のアドレスに変換する(ステップS56)。さらに、ヘッダ解析部12は、受信フレームのグローバル送信元とローカル送信元の組合せを、グローバル宛先とローカル宛先の組合せとして、転送先テーブル33に登録する(ステップS57)。なお、ステップS57において、グローバル送信元はグローバル宛先に読み替えられ、ローカル送信元は、そのフレームのグローバル送信元がグローバル宛先になった場合のローカル宛先として読み替えられる。一方、受信フレームが下り方向に転送されるデータフレームである場合は、ステップS55からS57の処理は行われない(ステップS54でNo)。
次に、ヘッダ解析部12は、受信フレームがゲートウェイから送信されている(下り方向)フレームであるかを判定する(ステップS58)。受信フレームが下り方向に転送されるデータフレームである場合、ヘッダ解析部12は、受信フレームのグローバル送信元として通知されたGDIDとローカル送信元の情報の組合せを取得する(ステップS58でYes)。さらに、ヘッダ解析部12は、ルーティングテーブル32のローカル宛先とローカル宛先が設定したGDIDの組合せが、受信フレームから取得した情報の組合せと一致するエントリを、ルーティングテーブル32から取得する(ステップS59)。すなわち、ステップS59の処理により、ヘッダ解析部12は、得られたエントリ中のグローバル宛先が、受信フレームのグローバル送信元に一致することを特定する。ヘッダ解析部12は、受信フレームのグローバル送信元の情報を、ルーティングテーブル32から取得したエントリ中のグローバル宛先のアドレスに変換する(ステップS60)。なお受信フレームが上り方向に転送されるデータフレームである場合は、ステップS59、S60の処理は行われない(ステップS58でNo)。
さらにヘッダ解析部12は、受信フレームが自ノード宛のフレームであるかを判定する(ステップS61)。受信フレームが自ノード宛のフレームである場合、ヘッダ解析部12は、フレーム中のデータを、ヘッダの情報などと共に、アプリケーション処理部14に出力する(ステップS61でYes、ステップS62)。一方、受信フレームが自ノード宛のフレームではない場合、ヘッダ解析部12は、フレーム中のデータを、ヘッダの情報などと共に、転送処理部13に出力する(ステップS61でNo、ステップS63)。
図11は、データフレームの送信処理の例を説明するシーケンス図である。なお、図11は送信処理の一例であり、実装に応じて手順が変更されることがある。例えば、ステップS72〜S75の処理がステップS76以降の処理よりも後に行われても良い。
フレーム生成部15は、アプリケーション処理部14か転送処理部13からフレームの送信が要求されると、送信するフレームは上り方向に送信されるフレームであるかを判定する(ステップS71、S72)。上り方向に転送されるフレームを送信する場合、フレーム生成部15は、ルーティングテーブル32から、グローバル宛先とローカル宛先の組合せが、送信フレームと等しいエントリを取得する(ステップS72でYes、ステップS73)。フレーム生成部15は、グローバル宛先アドレスを、取得したエントリ中のローカル宛先が設定したGDIDに変換する(ステップS74)。さらに、取得したエントリのローカル宛先の値をフレームに設定する(ステップS75)。送信フレームが転送される方向が上り方向ではない場合、ステップS73〜S75の処理は行われない(ステップS72でNo)。
次に、下り方向にフレームを送信する場合、フレーム生成部15は、ルーティングテーブル32のグローバル宛先が送信フレームのグローバル送信元と等しいエントリを、ルーティングテーブル32から取得する(ステップS76でYes、ステップS77)。フレーム生成部15は、送信フレームのグローバル送信元アドレスを、取得したエントリ中のグローバル宛先に対する内部GDIDに変換する(ステップS78)。フレーム生成部15は、転送先テーブル33を参照して、送信フレームのローカル転送先を決定し、送信フレームに設定する(ステップS79)。なお、送信するフレームが転送される方向が上り方向である場合、ステップS77以降の処理は行われない(ステップS76でNo)。
〔ネットワークへの適用例〕
図12は、第1の実施形態にかかる通信方法が適用され得るネットワークの例を示す図である。図12以降では、図5〜図9での説明に使用したネットワークよりも複雑で通信装置10の数が多いネットワークでの実施例を説明する。図12を参照しながら、あるグローバル宛先に対するローカル宛先が複数存在する場合の処理の例についても説明する。
図12に示すネットワークには、ゲートウェイGW1、GW2とノードA〜Dが含まれている。図12に示すネットワークでは、ノードAは、ゲートウェイGW1、ゲートウェイGW2、ノードCに隣接しているものとする。ノードBは、ゲートウェイGW2とノードCに隣接している。ノードDはノードCに隣接しているものとする。
(1)Helloフレームを用いたアドホックネットワークの形成
図13は、Helloフレームの送受信の際に行われる処理の例を説明する図である。なお、ノードA〜Dのいずれも、図13の時点では、過去にHelloフレームを受信していない場合を例とする。ゲートウェイGW1からHelloフレームH1が送信され、ゲートウェイGW2からHelloフレームH2が送信されたとする。ノードAは、HelloフレームH1とHelloフレームH2の両方を受信すると、図5を参照しながら説明した手順と同様の処理により、ルーティングテーブル32aを更新する。このため、ノードAには、図13のルーティングテーブル32aに示す情報が記録される。
一方、ノードBもHelloフレームH2を受信する。ノードBは、HelloフレームH2で通知されたグローバル宛先であるGW2に対するローカル宛先として、HelloフレームH2のローカル送信元であるGW2を記録する。さらに、GW2がグローバル宛先である場合のローカル宛先としてのGW2に対応付けて、HelloフレームH2で通知されたローカルGDIDGW2=0という情報を、ルーティングテーブル32bに記録する。このため、ノードBのルーティングテーブル32bは、図13に示すとおりになる。
図14は、Helloフレームの送受信の際に行われる処理の例を説明する図である。図14を参照しながら、ノードAがHelloフレームH3を送信したときに行われる処理の例を説明する。HelloフレームH3の送信の際にノードAが行う処理は、図5のフレームF3の生成の際の処理として説明した処理や図7を参照しながら説明した処理と同様である。
ノードCは、HelloフレームH3を受信すると、HelloフレームH3で通知されたグローバル宛先の各々について、HelloフレームH3のローカル送信元であるノードAをローカル宛先として登録する。また、ノードAから通知されたGDIDを、グローバル宛先ごとに、LD=ノードAの場合に対応付けてルーティングテーブル32cに記録する。さらに、ノードCは、通知された各グローバル宛先に対してGDIDを設定する。このため、HelloフレームH3をノードCが受信したときのルーティングテーブル32cには、以下の情報が記録される。
転送先1
グローバル宛先(GD):GW1
GDに対してノードCが使用するGDID:GDIDGW1−C=1
ローカル宛先(LD) :A
LDがGDに設定したGDID :GDIDGW1−A=1
転送先2
グローバル宛先(GD):GW2
GDに対してノードCが使用するGDID:GDIDGW2−C=2
ローカル宛先(LD) :A
LDがGDに設定したGDID :GDIDGW2−A=2
その後、ノードBがHelloフレームH4を送信したとする。図14に示すように、HelloフレームH4には、ゲートウェイGW2に関する経路情報が含まれている。ノードCがHelloフレームH4を受信すると、抽出部21cは、ヘッダ解析部12cなどを介してHelloフレームH4を取得する。抽出部21cは、ゲートウェイGW2に関する情報を含むHelloヘッダの情報と、HelloフレームH4のローカル送信元がノードBであることを、テーブル管理部23cに通知する。テーブル管理部23cは、ゲートウェイGW2に対するエントリがルーティングテーブル32cに存在するので、ゲートウェイGW2へのローカル宛先としてノードBがルーティングテーブル32cに登録されているかを判定する。ここでは、ノードBは、ゲートウェイGW2へのローカル宛先として登録されていない。このため、テーブル管理部23cは、ノードBをゲートウェイGW2へのローカル宛先としてルーティングテーブル32cに登録する。さらに、テーブル管理部23cは、ノードBがゲートウェイGW2を識別する際に使用するGDID(GDIDGW2−B=1)もルーティングテーブル32cに登録する。ここで、ノードCにとって、ノードAを介してゲートウェイGW2に至る経路の通信状況の方が、ノードBを介してゲートウェイGW2に至る経路の通信状況よりも良好であるとする。この場合、テーブル管理部23cは、ゲートウェイGW2への転送処理の際に最優先するローカル転送先(LD1)をノードA、2番目に優先的に使用するローカル転送先(LD2)をノードBとしてルーティングテーブル32cに記録する。このため、HelloフレームH4を処理した後にノードCが保持しているルーティングテーブル32cは、図14に示すとおりになる。なお、ノードCでのHelloフレームH4の処理は、図6のステップS18〜S20の処理に相当する。
図15は、Helloフレームの送受信の際に行われる処理の例を説明する図である。ノードCは、ルーティングテーブル32cに記録されているグローバル宛先の情報を、ノードCが各グローバル宛先を識別するために使用するGDIDと共に、HelloフレームH5を用いて、隣接ノードに通知する。
ノードDがHelloフレームH5を受信したとする。ノードDは、HelloフレームH5で通知されたグローバル宛先であるGW1とGW2に対するローカル宛先として、HelloフレームH5のローカル送信元であるノードCを記録する。さらに、ノードCがGW1とGW2の各々を識別する際に使用するGDIDを記録すると共に、ノードDがこれらのグローバル宛先の識別に使用するGDIDを決定する。このため、ノードDのルーティングテーブル32dは、図15に示すとおりになる。
図16は、各通信装置10が保持するルーティングテーブル32の例を示す図である。図16は、HelloフレームH1〜H5の処理が終わった段階で、ノードA〜Dの各通信装置10が保持しているルーティングテーブル32の例を示している。なお、図15には明記していないが、ノードAとノードBも、ノードCから送信されたHelloフレームH5を受信する。このため、ノードAと、ノードBのいずれも、ノードCを介してゲートウェイGW1、GW2に達する経路の情報を、ルーティングテーブル32に保持している。ノードAとノードBでのHelloフレームH5の処理は、ノードCがHelloフレームH4を処理する場合を例として説明した処理と同様である。
(2)上り方向に転送されるデータフレームの処理
以下、アドホックネットワーク中の各通信装置10が保持するルーティングテーブル32が図16に示す状態で、ノードDからゲートウェイGW1宛てにフレームが送信される場合の転送処理の例を説明する。なお、図17以下では、図を見やすくするために、各通信装置10が保持するルーティングテーブル32の一部を抜粋して示すことがある。以下では、各通信装置10でのグローバル宛先やローカル宛先の指定に重点をおいて説明するが、各通信装置10の制御部20などで行われる処理の詳細は、図5〜図10での説明と同様である。
図17は、ゲートウェイ装置宛てのフレームの転送処理の例を説明する図である。まず、ノードDが、ゲートウェイGW1に送信するデータを生成したとする。次に、ノードDは、ルーティングテーブル32dを用いて、ゲートウェイGW1にフレームを送信する際のローカル宛先がノードCであることと、ノードCにおいてゲートウェイGW1の識別に、GDIDGW1−C=1を用いることを特定する。そこで、ノードDは、ゲートウェイGW1宛てのフレームのローカル転送先(LD)をノードC、グローバル宛先のアドレスの代わりにGD=1という値を指定したフレームF31を生成し、フレームF31をノードCに送信する。フレームF31に指定されているローカル宛先の情報とグローバル宛先の情報を図17に示す。
フレームF31を受信したノードCは、フレームF31のグローバル宛先(GD)に1が指定されているため、ノードCが付したGDIDの値が1である装置がフレームF31のグローバル宛先であると判定する。図17に示すように、GDIDGW1−C=1であるため、ノードCは、ゲートウェイGW1がフレームF31のグローバル宛先であると判定する。
図18は、ゲートウェイ装置宛てのフレームの転送処理の例を説明する図である。図18を参照しながら、ノードCで行われる転送処理を説明する。フレームF31のグローバル宛先がゲートウェイGW1であるため、ノードCは、転送フレームF32を送信する際のローカル宛先をノードAに決定する。さらに、ノードAにおいてゲートウェイGW1の識別にGDIDGW1−A=1が用いられることから、ノードCは、転送フレームF32には、グローバル宛先のアドレスの代わりにGD=1という値を指定する。なお、転送フレームF32中のデータは、フレームF31中のデータである。フレームF32に指定されているローカル宛先の情報とグローバル宛先の情報を図18に示す。ノードCは、フレームF32をノードAに送信する。
フレームF32を受信したノードAは、フレームF32のグローバル宛先(GD)に1が指定されているため、ノードAが付したGDIDの値が1である装置がフレームF32のグローバル宛先であると判定する。図18に示すように、GDIDGW1−A=1であるため、ノードAは、ゲートウェイGW1がフレームF32のグローバル宛先であると判定する。
図19は、ゲートウェイ装置宛てのフレームの転送処理の例を説明する図である。図19を参照しながら、ノードAで行われる転送処理を説明する。フレームF32のグローバル宛先がゲートウェイGW1であるため、ノードAは、転送フレームF33を送信する際のローカル宛先をゲートウェイGW1に決定する。さらに、ゲートウェイGW1においてゲートウェイGW1の識別にGDIDGW1=0が用いられることから、ノードAは、転送フレームF33のグローバル宛先のアドレスとして、GD=0という値を指定する。なお、転送フレームF33中のデータは、フレームF31に含まれていたデータである。フレームF33に指定されているローカル宛先の情報とグローバル宛先の情報を図19に示す。ノードAは、フレームF33をゲートウェイGW1に送信する。
フレームF33を受信したゲートウェイGW1は、フレームF33のグローバル宛先(GD)に0が指定されているため、ゲートウェイGW1宛てのフレームを受信したと判定し、フレームF33を処理する。
(3)下り方向に転送されるデータフレームの処理
次に、アドホックネットワーク中の各通信装置10が保持するルーティングテーブル32が図16に示す状態で、ゲートウェイGW2からノードD宛てにフレームが送信される場合の転送処理の例を説明する。なお、各通信装置10での転送先テーブル33の生成方法も、図8〜図10を参照しながら説明したとおりである。
図20は、ゲートウェイ装置から送信されたフレームの転送処理の例を説明する図である。まず、ゲートウェイGW2が、ノードDに送信するデータを生成したとする。次に、ゲートウェイGW2は、転送先テーブル33gw2を用いて、ノードDにフレームを送信する際のローカル宛先がノードBであることを特定する。ゲートウェイGW2は、Helloフレームを送信したことがあるので、ゲートウェイGW2自身をゲートウェイGW2が識別する際に使用するGDIDを隣接する通信装置10に通知済みである。そこで、ノードD宛てのフレームのローカル転送先(LD)をノードB、グローバル送信元のアドレスの代わりにGS=0という値を指定したフレームF41を生成し、フレームF41をノードBに送信する。フレームF41に指定されているアドレスの情報を図20に示す。
ノードBは、フレームF41のグローバル送信元(GS)に0が指定されているため、ゲートウェイGW2から通知されたGDIDの値が0である装置がフレームF41のグローバル送信元であると判定する。図20に示すように、GDIDGW2=0であるため、ノードBは、ゲートウェイGW2がフレームF41のグローバル送信元であると判定する。
図21は、ゲートウェイ装置から送信されたフレームの転送処理の例を説明する図である。図21を参照しながら、ノードBで行われる転送処理を説明する。フレームF41のグローバル宛先がノードDであるため、ノードBは、転送先テーブル33bを用いて、転送フレームF42を送信する際のローカル宛先をノードCに決定する。ノードBはHelloフレームを送信したことがあるので、ノードBは、ゲートウェイGW2を識別する際にGDIDGW2−B=1を使用することを、隣接する通信装置10に通知済みである。そこで、ノードD宛てのフレームのローカル転送先(LD)をノードC、グローバル送信元のアドレスの代わりにGS=1という値を指定したフレームF42を生成し、フレームF42をノードCに送信する。フレームF42に指定されているアドレスの情報を図21に示す。
ノードCは、フレームF42のグローバル送信元(GS)に1が指定されており、フレームF42のローカル送信元がノードBであるため、ノードBから通知されたGDIDの値が1である装置がフレームF42のグローバル送信元であると判定する。図21に示すように、GDIDGW2−B=1であるため、ノードCは、ゲートウェイGW2がフレームF42のグローバル送信元であると判定する。
図22は、ゲートウェイ装置から送信されたフレームの転送処理の例を説明する図である。図22を参照しながら、ノードCで行われる転送処理を説明する。フレームF42のグローバル宛先がノードDであるため、ノードCは、転送先テーブル33cを用いて、転送フレームF43を送信する際のローカル宛先をノードDに決定する。ノードCは、ゲートウェイGW2の情報を含むHelloフレームを用いて、ノードCがゲートウェイGW2を識別する際にGDIDGW2−C=2を使用することを、隣接する通信装置10に通知済みである。そこで、ノードD宛てのフレームのローカル転送先(LD)としてノードD、グローバル送信元のアドレスの代わりにGS=2という値を指定したフレームF43を生成し、フレームF43をノードDに送信する。フレームF43に指定されているアドレスの情報を図22に示す。
ノードDは、フレームF43のグローバル送信元(GS)に2が指定されており、フレームF43のローカル送信元がノードCであるため、ノードCから通知されたGDIDの値が2である装置がフレームF43のグローバル送信元であると判定する。図22に示すように、GDIDGW2−C=2であるため、ノードDは、ゲートウェイGW2がフレームF43のグローバル送信元であると判定する。また、ノードDは、フレームF43の最終宛先がノードD自身であるので、フレームF43中のデータを適宜処理する。
図23は、フレーム中のペイロードのサイズの例を説明する図である。フレームF111は、第1の実施形態が適用されていない場合のデータフレームのフォーマットの例である。フレームF111では、グローバル宛先とグローバル送信元のいずれにも、装置のアドレスが用いられている。このため、フレームF111では、グローバル宛先アドレスとグローバル送信元アドレスに各々8バイト使用することになる。制御情報が20バイトで、ローカル宛先アドレスとローカル送信元アドレスにいずれも8バイトが用いられるので、フレームF111では、アドレス情報と制御情報で8×4+20=52バイトが使用される。アドホックネットワークで使用されるフレームの大きさが127バイトであると、ペイロード長は75バイトになる。
フレームF112は、第1の実施形態を用いて上り方向に転送されるフレームのフォーマットの例を示している。フレームF112では、グローバル宛先アドレスがフレームのローカル転送先で処理可能なGDIDに設定されている。ここで、GDIDの記述には、1バイトが使用されるとすると、グローバル宛先アドレスフィールドを1バイトにすることができる。従って、フレームF112では、フレーム中のアドレス情報と制御情報に、8×3+1+20=45バイトが使用される。このため、フレームF112では、アドホックネットワークで使用されるフレームの大きさが127バイトであっても、ペイロードに82バイトを使用することができる。なお、下り方向に送信されるフレームの場合は、グローバル宛先はGDIDに変換されないが、グローバル送信元がGDIDに変換される。このため、下り方向に送信されるフレームでも、フレームF112に示したのと同様に、82バイトのペイロードを確保できる。従って、1フレームが127バイトである場合、第1の実施形態にかかる方法を用いることにより、1フレーム中のペイロードが75バイトから7バイト長くできる。換言すると、1フレームが127バイトである場合、第1の実施形態にかかる方法を用いることにより、1フレーム中のペイロードを10%程度長くすることができる。
以上説明したように、第1の実施形態によると、各通信装置10は、ゲートウェイとして動作する通信装置10に向かう方向の経路情報と共に、その通信装置10がゲートウェイ装置の識別の際に使用する一意情報(GDID)を隣接装置と交換する。このため、上り方向に転送されるフレームでは、グローバル宛先となるゲートウェイ装置を、転送先で認識されるGDIDに置き換えて通知することにより、フレーム中のヘッダに使用される領域の大きさを小さくすることができる。一方、下り方向に転送されるフレームでは、グローバル送信元となるゲートウェイの情報を、転送先の通信装置10に通知済みのGDIDに置き換えて通知することにより、フレーム中のヘッダを小さくすることができる。従って、各フレームに含められるデータの量が増大し、結果として、スループットが改善する。すなわち、アドホックネットワークにおける通信速度が向上でき、通信効率が改善できる。
なお、第1の実施形態が適用されるネットワークでは、ゲートウェイとして動作していない通信装置10同士でデータのやり取りを行う場合、ゲートウェイとして動作する通信装置10がデータの中継点となる。このため、ゲートウェイ装置以外の装置間の通信でも、第1の実施形態を適用することによって、1フレーム中のデータ量を増大できる。
ところで、ゲートウェイ装置の識別子として、GDIDを付す際に、ある1つのゲートウェイについては、ネットワーク全体で共通の値が設定されるように各ゲートウェイ装置に割り振られるGDIDをコーディネータで管理することも考えられる。しかしコーディネータを用いて、ネットワーク全体での共通の値をゲートウェイ装置に割当てる場合、ネットワークへの通信装置10の参加や脱退の際に行われる処理が複雑になる上、通信装置10のメモリを大量に消費する恐れがある。しかし、アドホックネットワークに適用される通信装置10では、メモリ容量が大きくない場合が多い。また、不特定多数の通信装置10が、アドホックネットワークに対する参加や脱退を行う可能性もある。
一方、第1の実施形態で説明したように、個々の通信装置10が自由に、その通信装置10に通知されたゲートウェイの情報を保持し、隣接ノードに自ノードが使用するGDIDを通知する場合、通信装置10にかかる負担は比較的小さい。さらに、通信装置10がアドホックネットワークに対して参加や脱退を行ったとしても、GDIDの処理に起因した処理により、通信装置10に負担がかからない。
<第2の実施形態>
第2の実施形態では、ゲートウェイ装置として動作する通信装置10の情報と、ゲートウェイ装置して動作しない通信装置10の情報のいずれも、Helloフレームによって他の装置に通知される場合の転送処理について説明する。なお、Helloフレームを受信したときに各通信装置10が行う処理は、第1の実施形態と同様である。
図24は、第2の実施形態で行われるHelloフレームの送信処理の例を説明するフローチャートである。経路情報生成部24は、Helloフレームの生成時刻になると、ステップS91〜S95の処理により、自ノードを介して通信可能な通信先の情報を、Helloフレームで隣接ノードに通知する情報として選択する。なお、ステップS91〜S95の処理は、図7のステップS31〜S35で行われる処理と同様である。
次に、経路情報生成部24は、自ノードの情報に対応付けて、自ノードが自ノード自身の識別に使用するGDIDをHelloフレームで通知する情報に追加する(ステップS96)。フレーム生成部15は、経路情報生成部24によって、Helloフレームで通知する情報として選択された情報を含むHelloフレームを生成する(ステップS97)。送信部16は、Helloフレームを送信する(ステップS98)。
図24を用いて説明したHelloフレームの送信処理では、ステップS96の処理は、ゲートウェイ装置として動作していない通信装置10でも行われる。従って、ゲートウェイ装置以外の装置に至る経路も、隣接ノード間で交換される。また、Helloフレームの受信の際の処理は、第2の実施形態でも、図6を参照しながら説明したとおりであるので、各通信装置10は、Helloフレームで通知された通信先の各々について、GDIDを割り当てる。また、Helloフレームで交換された情報はルーティングテーブル61に記録される。
図25は、各通信装置が保持するルーティングテーブルの例を示す図である。図25では、図を見やすくするために、各通信装置10が保持するルーティングテーブル61の一部を抜粋して示している。しかし、第2の実施形態では、Helloフレームの交換により、ネットワーク中の各通信装置10がネットワーク中の全ての通信装置10に至る経路情報を保持することができる。また、各通信装置10は、ネットワーク中の全ての装置について、自ノードが使用するGDIDを設定し、隣接ノードに通知しているので、いずれのフレームの送信元や最終宛先もGDIDに置き換えて転送先に通知できる。
以下、図26〜図28を参照しながら、ノードEからノードD宛てにフレームが送信される場合の転送処理の例を説明する。なお、アドホックネットワーク中の各通信装置10が保持するルーティングテーブル61は、図25に示す情報を含むものとする。また、ローカル宛先が複数ある場合、LDに続く数字が小さいローカル宛先ほど、グローバル宛先までの転送経路が良好な転送先を指しているものとする。
図26は、データフレームの転送処理の例を説明する図である。まず、ノードEが、ノードDに送信するデータを生成したとする。次に、ノードEは、ルーティングテーブル61eを用いて、ノードDにフレームを送信する際のローカル宛先として最も条件の良い転送先がノードBであることと、ノードBがGDIDD−B=1を用いてノードDを識別していることを特定する。さらに、ノードEは、Helloフレームを送信済みであるので、グローバル送信元がノードEであることを、ノードEがノードE自身に割り当てたGDIDE−E=0を用いてノードBに通知できると判定する。そこで、ノードEは、グローバル宛先(GD)にGDIDD−B=1、グローバル送信元(GS)にGDIDE−E=0を用いて、ノードD宛てのデータを含むフレームF51を生成する。フレームF51に含まれているアドレスの情報を図26に示す。
フレームF51を受信したノードBは、フレームF51のグローバル宛先(GD)に1が指定されているため、ノードBが付したGDIDの値が1である装置がフレームF51のグローバル宛先であると判定する。図26に示すように、GDIDD−B=1であるため、ノードBは、ノードDがフレームF51のグローバル宛先であると判定する。さらに、フレームF51のグローバル送信元(GS)に0が指定されているため、ローカル送信元(LS)であるノードEが付したGDIDの値が0である装置がフレームF51のグローバル送信元であると判定する。ルーティングテーブル61bには、ノードEがグローバル宛先の場合の欄に、GDIDE−E=0であることが記録されている。このため、ノードBは、フレームF51のグローバル送信元はノードEであると判定する。
図27は、データフレームの転送処理の例を説明する図である。図27を参照しながら、ノードBで行われる転送処理の例を説明する。ノードBは、ルーティングテーブル61bを用いて、ノードDにフレームを送信する際のローカル宛先として最も条件の良い転送先がノードCであることと、ノードCがGDIDD−C=2を用いてノードDを識別していることを特定する。さらに、ノードBは、Helloフレームを送信済みであるので、グローバル送信元がノードEであることを、ノードBがノードEに割り当てたGDIDE−B=2を用いてノードCに通知できると判定する。そこで、ノードBは、グローバル宛先(GD)にGDIDD−C=2、グローバル送信元(GS)にGDIDE−B=2を用いて、ノードD宛てのデータを含むフレームF52を生成する。フレームF52に含まれているアドレスの情報を図27に示す。
フレームF52を受信したノードCは、フレームF52のグローバル宛先(GD)に2が指定されているため、ノードCが付したGDIDの値が2である装置がフレームF52のグローバル宛先であると判定する。図27に示すように、GDIDD−C=2であるため、ノードCは、ノードDがフレームF52のグローバル宛先であると判定する。さらに、フレームF52のグローバル送信元(GS)に2が指定されているため、ローカル送信元(LS)であるノードBが付したGDIDの値が2である装置がフレームF52のグローバル送信元であると判定する。ルーティングテーブル61cには、ノードEがグローバル宛先の場合の欄に、GDIDE−B=2であることが記録されている。このため、ノードCは、フレームF52のグローバル送信元はノードEであると判定する。
図28は、データフレームの転送処理の例を説明する図である。図28を参照しながら、ノードCで行われる転送処理の例を説明する。ノードCは、ルーティングテーブル61cを用いて、ノードDにフレームを送信する際のローカル宛先として最も条件の良い転送先がノードDであることと、ノードDがGDIDD−D=0を用いてノードDを識別していることを特定する。さらに、ノードCは、Helloフレームを送信済みであるので、グローバル送信元がノードEであることを、ノードCがノードEに割り当てたGDIDE−C=1を用いてノードDに通知できると判定する。そこで、ノードCは、グローバル宛先(GD)にGDIDD−D=0、グローバル送信元(GS)にGDIDE−C=1を用いて、ノードD宛てのデータを含むフレームF53を生成する。フレームF53に含まれているアドレスの情報を図28に示す。
フレームF53を受信したノードDは、フレームF53のグローバル宛先(GD)に0が指定されているため、ノードDが付したGDIDの値が0である自ノードがフレームF53のグローバル宛先であると判定する。さらに、フレームF53のグローバル送信元(GS)に1が指定されているため、ローカル送信元(LS)であるノードCが付したGDIDの値が1である装置がフレームF53のグローバル送信元であると判定する。ルーティングテーブル61dには、ノードEがグローバル宛先の場合の欄に、GDIDE−C=1であることが記録されている。このため、ノードCは、フレームF53のグローバル送信元はノードEであると判定する。
以上説明したように、第2の実施形態によると、各通信装置10は、いずれの方向に送信されるフレームでも、グローバル宛先を転送先で認識されるGDIDに置き換えて通知できる。さらに、各通信装置10は、いずれの方向に送信されるフレームでも、グローバル送信元を、転送先の通信装置10に通知済みのGDIDに置き換えて通知することができる。従って、グローバル宛先とグローバル送信元のいずれも、GDIDを用いて通知することにより、フレーム中のヘッダを小さくすることができる。従って、各フレームに含められるデータの量が増大し、結果として、スループットが改善する。すなわち、アドホックネットワークにおける通信速度が向上でき、通信効率が改善できる。
<その他>
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
第2の実施形態で説明したように、ゲートウェイ装置以外の情報もHelloフレームで送受信される場合、各通信装置10は、転送先テーブル33を生成しなくても良い。転送先テーブル33を生成しない場合、通信装置10は、転送先の情報を、フレームの転送方向に関わらず、ルーティングテーブル32から検索する。また、この場合は、アドホックヘッダに方向フラグが含まれていなくても良い。
以上の説明で示したフレームのフォーマットやテーブルは一例であり、これらに含まれる情報要素や各要素のデータ長は、実装に応じて変更され得る。例えば、GDIDは1バイト以外の長さでもよい。
上述の第1および第2の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
ネットワーク中に含まれる第1の通信装置に、
隣接する第2の通信装置から、前記第2の通信装置を介してフレームを送信可能な通信先の情報と、前記第2の通信装置で前記通信先を識別する際に使用され、前記通信先に割り当てられたアドレスよりもデータ長が短い情報である一意情報を含む制御フレームを受信し、
前記通信先に前記第2の通信装置を介してデータを送信する際に、前記通信先宛のデータを含むデータフレームの宛先として前記一意情報を設定し、
前記データフレームを前記第2の通信装置に送信する
処理を実行させることを特徴とする通信プログラム。
(付記2)
前記第1の通信装置に隣接する第3の通信装置に、前記通信先に割り当てられたアドレスよりもデータ長が短く、前記第1の通信装置が前記通信先を識別する際に使用する情報として決定した他の一意情報を、前記通信先に対応付けて通知し、
前記第3の通信装置に転送する第1のフレームの送信元が前記通信先である場合、前記第1のフレームの送信元として前記他の一意情報を設定した第2のフレームを生成し、
前記第2のフレームを前記第3の通信装置に転送する
処理を前記第1の通信装置に実行させることを特徴とする付記1に記載のプログラム。
(付記3)
前記第1のフレームを前記第2の通信装置から受信した場合、前記第1のフレームの送信元アドレスが前記一意情報であることから、前記第1のフレームの送信元が前記通信先であると特定し、
前記第1のフレームのヘッダ中の前記一意情報を、前記他の一意情報に変更することにより、前記第2のフレームを生成する
処理を前記第1の通信装置に実行させることを特徴とする付記2に記載のプログラム。
(付記4)
前記第1の通信装置から前記第3の通信装置に至る経路を用いた通信の対象となる対象装置の情報と、前記対象装置に割り当てられたアドレスよりもデータ長が短く、前記第1の通信装置が前記対象装置を識別するために使用する設定値を、前記第2の通信装置に通知し、
前記対象装置が前記通信先に送信した第3のフレームを受信すると、前記第3のフレームの送信元として前記設定値を設定すると共に、前記第3のフレームの宛先として前記一意情報を設定した第4のフレームを生成し、
前記第4のフレームを前記第2の通信装置に転送する
処理を前記第1の通信装置に実行させることを特徴とする付記2または3に記載のプログラム。
(付記5)
前記第3の通信装置から、前記対象装置に割り当てられたアドレスよりもデータ長が短く、前記第3の通信装置が前記対象装置を識別するために使用する他の設定値を取得し、
前記通信先が前記対象装置に送信した第5のフレームを受信すると、前記第5のフレームの送信元として前記他の一意情報を設定すると共に、前記第5のフレームの宛先として前記他の設定値を設定した第6のフレームを生成し、
前記第6のフレームを前記第3の通信装置に送信する
処理を前記第1の通信装置に実行させることを特徴とする付記4に記載のプログラム。
(付記6)
前記第1の通信装置に、
前記制御フレームを受信すると、前記第1の通信装置が通信可能な装置への経路情報として、前記通信先のアドレス、前記第2の通信装置のアドレス、前記一意情報、および、前記他の一意情報を対応付けて記憶し、
前記第1の通信装置を介して通信可能な装置を前記第1の通信装置に隣接する装置に通知するための他の制御フレームに、前記通信先のアドレスと前記他の一意情報を含め、
前記他の制御フレームを送信する
処理を実行させることを特徴とする付記2〜5のいずれか1項に記載のプログラム。
(付記7)
ネットワーク中に含まれる第1の通信装置として動作する通信装置であって、
隣接する第2の通信装置から、前記第2の通信装置を介してフレームを送信可能な通信先の情報と、前記第2の通信装置で前記通信先を識別する際に使用され、前記通信先に割り当てられたアドレスよりもデータ長が短い情報である一意情報を含む制御フレームを受信する受信部と、
前記通信先に前記第2の通信装置を介してデータを送信する際に、前記通信先宛のデータを含むデータフレームの宛先として前記一意情報を設定する制御部と、
前記データフレームを前記第2の通信装置に送信する送信部
を備えることを特徴とする通信装置。
(付記8)
前記制御部は、前記通信先に割り当てられたアドレスよりもデータ長が短く、前記第1の通信装置が前記通信先を識別する際に使用する情報として、他の一意情報を決定し、
前記送信部は、前記他の一意情報を前記通信先に対応付けたフレームを、前記第1の通信装置に隣接する第3の通信装置に送信し、
前記制御部は、前記第3の通信装置に転送する第1のフレームの送信元が前記通信先である場合、前記第1のフレームの送信元として前記他の一意情報を設定した第2のフレームを生成するための制御を行い、
前記送信部は、前記第2のフレームを前記第3の通信装置に転送する
ことを特徴とする付記7に記載の通信装置。
(付記9)
前記制御部は、
前記受信部が前記第1のフレームを前記第2の通信装置から受信した場合、前記第1のフレームの送信元アドレスが前記一意情報であることから、前記第1のフレームの送信元が前記通信先であると特定し、
前記第1のフレームのヘッダ中の前記一意情報を、前記他の一意情報に変更することにより、前記第2のフレームを生成させる
ことを特徴とする付記8に記載の通信装置。
(付記10)
前記制御部は、前記第1の通信装置から前記第3の通信装置に至る経路を用いた通信の対象となる対象装置に対して、前記対象装置に割り当てられたアドレスよりもデータ長が短く、前記第1の通信装置が前記対象装置を識別するために使用する設定値を決定し、
前記送信部は、前記対象装置の情報と前記設定値を対応付けたフレームを、前記第2の通信装置に送信し、
前記対象装置が前記通信先に送信した第3のフレームを、前記受信部が受信すると、前記制御部は、前記第3のフレームの送信元として前記設定値を設定すると共に、前記第3のフレームの宛先として前記一意情報を設定した第4のフレームを生成するための制御を行い、
前記送信部は、前記第4のフレームを前記第2の通信装置に転送する
ことを特徴とする付記8または9に記載の通信装置。
(付記11)
前記受信部は、前記第3の通信装置から、前記対象装置に割り当てられたアドレスよりもデータ長が短く、前記第3の通信装置が前記対象装置を識別するために使用する他の設定値を含むフレームを受信し、
前記制御部は、前記通信先が前記対象装置に送信した第5のフレームを前記受信部が受信すると、前記第5のフレームの送信元として前記他の一意情報を設定すると共に、前記第5のフレームの宛先として前記他の設定値を設定した第6のフレームを生成するための制御を行い、
前記送信部は、前記第6のフレームを前記第3の通信装置に送信する
ことを特徴とする付記10に記載の通信装置。
(付記12)
前記第1の通信装置が通信可能な装置への経路情報を記憶する記憶部をさらに備え、
前記制御部は、
前記受信部が前記制御フレームを受信すると、前記通信先のアドレス、前記第2の通信装置のアドレス、前記一意情報、および、前記他の一意情報を対応付けて、前記記憶部に記憶させ、
前記第1の通信装置を介して通信可能な装置を前記第1の通信装置に隣接する装置に通知するために使用する他の制御フレームに、前記通信先のアドレスに対応付けて前記他の一意情報を含め、
前記送信部は、前記他の制御フレームを送信する
処理を実行させることを特徴とする付記8〜11のいずれか1項に記載の通信装置。
(付記13)
ネットワーク中に含まれる第1の通信装置に、
隣接する第2の通信装置から、前記第2の通信装置を介してフレームを送信可能な通信先の情報と、前記第2の通信装置で前記通信先を識別する際に使用され、前記通信先に割り当てられたアドレスよりもデータ長が短い情報である一意情報を含む制御フレームを受信し、
前記通信先に前記第2の通信装置を介してデータを送信する際に、前記通信先宛のデータを含むデータフレームの宛先として前記一意情報を設定し、
前記データフレームを前記第2の通信装置に送信する
処理を実行させることを特徴とする通信方法。
(付記14)
前記第1の通信装置に隣接する第3の通信装置に、前記通信先に割り当てられたアドレスよりもデータ長が短く、前記第1の通信装置が前記通信先を識別する際に使用する情報として決定した他の一意情報を、前記通信先に対応付けて通知し、
前記第3の通信装置に転送する第1のフレームの送信元が前記通信先である場合、前記第1のフレームの送信元として前記他の一意情報を設定した第2のフレームを生成し、
前記第2のフレームを前記第3の通信装置に転送する
処理を前記第1の通信装置に実行させることを特徴とする付記13に記載の通信方法。