以下に本発明の実施の形態について図面を参照しながら詳細に説明する。
(実施形態1)
図1は、本実施形態1におけるネットワーク100の構成例を示す図である。ネットワーク100は、アドホックネットワークの一例であり、複数のノード装置1を含んで構成されている。ノード装置1間には、リンクが存在しており、図1では、リンクを実線で表している。
本実施形態1においては、ネットワーク100を構成するノード装置1の種別は、少なくとも2つある。一つは「末梢ノード装置」であり、他の一つは、「中継ノード装置」である。
末梢ノード装置1は、例えば、電力メータなどの検針ノード装置や各種のセンサを具備するセンサノード装置などである。末梢ノード装置1は、データサーバの命令に従って、あるいは、自立的にセンサ等から情報を収集し、収集した情報(データフレーム)を、データサーバへ送信する装置である。
末梢ノード装置1は、図1においては、「Ni」(i=1,・・,16)として示されている。「Ni」は、末梢ノード装置1を一意に識別可能なノードID(IDentification)である。
中継ノード装置1は、末梢ノード装置1と比較して、電波出力が強く伝送レートも高い中継専用のノード装置であり、末梢ノード装置1が送信したデータフレームを中継する。中継ノード装置1は、例えば、隣接する末梢ノード装置1間の距離が離れており、末梢ノード装置1のみでネットワーク100を構成できないような場合に設置される。つまり、図1に例示するネットワーク100としては、例えば、山間部など住宅が疎なエリアのネットワークが想定される。
中継ノード装置1は、図1においては、「Sj」(j=1,2,3)として示されている。「Sj」は、中継ノード装置1を一意に識別可能なノードIDである。
なお、本実施形態1においては、中継ノード装置1がデータフレームを他の中継ノード装置1へ送信する場合には、データフレームを受信した他の中継ノード装置1は、ACKフレームを返信しないように構成されている。
リンクは、無線リンクでもよく、有線リンクでもよい。例えば、図1を参照して、末梢ノード装置N1と末梢ノード装置N2とが、他のノード装置1による中継を経ることなく、直接、通信可能な場合に、「末梢ノード装置N1と末梢ノード装置N2との間にリンクが存在する」という。
リンクは、動的に変化し、例えば、天候や遮蔽物などの影響で、ノード装置1間にリンクが新たに確立されたり、今まで確立されていたリンクが消滅したりすることがある。また、例えば、ノード装置1が可動式であれば、ノード装置1間の距離の変動によってリンクの有無が変化することもある。また、例えば、ケーブルの接続替えにより、新たなリンクが確立されたり、今まで存在していたリンクが消滅したり、ケーブルの切断等の障害によってリンクが消滅することもある。
次に、図2を参照して、本実施形態1におけるノード装置1について説明する。
図2は、本実施形態1におけるネットワーク100を構成するノード装置1の構成例を示す機能ブロック図である。
ノード装置1は、図2に示すように、通信部10と、記憶部20と、制御部30と、を備えて構成されている。
通信部10は、通信モジュールなどで構成され、他のノード装置1との間で通信を行う。例えば、通信部10は、フレームを送受信する。
記憶部20は、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリなどで構成されている。記憶部20は、制御部30を構成する、例えば、MPU(Micro-Processing Unit)のワークエリア、ノード装置1全体を制御するための動作プログラムなどの各種プログラムを格納するプログラムエリア、詳しくは後述のFIDテーブルT1、ルーティングテーブルT2などの各種データを格納するデータエリアとして機能する。また、データエリアには、自ノードIDや自ノード装置1の属性情報(例えば、ノード装置の種別を示す情報)なども格納されている。
ここで、図3と図4を参照して、データフレーム処理部33(詳しくは後述)により生成されるデータフレームのヘッダについて説明する。図3は、本実施形態1におけるデータフレームのヘッダのフォーマット例を示す図である。図4は、図3に示すフォーマット例における各フィールドの説明である。
本実施形態1におけるデータフレームのヘッダは、図3に示すように、LD(Local Destination)と、LS(Local Source)と、GD(Global Destination)と、GS(Global Source)と、FID(Frame IDentification)と、フレームタイプと、ACKフラグと、PathIDと、を含む。
LDは、送信先となる隣接ノード装置1のノードIDであり、LSとなるノード装置1のルート選択部35(詳しくは後述)が、ルーティングテーブルT2を参照して、LDを選択する。例えば、図1を参照して、末梢ノード装置N1により末梢ノード装置N2へ送信されたデータフレームのLDは、N2となる。
LSは、送信元の隣接ノード装置1のノードIDであり、LSとなるノード装置1のデータフレーム処理部33が、「LS」フィールドに自ノードIDを格納する。例えば、図1を参照して、末梢ノード装置N1により末梢ノード装置N2へ送信されたデータフレームのLSは、N1となる。
GDは、最終的な宛先となるノード装置1のノードIDである。GSは、データフレームの発行元のノード装置(以下、発行元ノード装置ともいう)1のノードIDである。例えば、図1を参照して、末梢ノード装置N1により発行されたデータフレームが、末梢ノード装置N2、中継ノード装置S1、中継ノード装置S2、中継ノード装置S3の順番で中継され、最終的に末梢ノード装置N16へと送信される場合、該データフレームのGDは、N16であり、GSは、N1である。
なお、以下では、末梢ノード装置N1により発行されたデータフレームが、末梢ノード装置N2、中継ノード装置S1、中継ノード装置S2、中継ノード装置S3の順番で中継され、最終的に末梢ノード装置N16へと送信される場合、経路<N1,N2,S1,S2,S3,N16>と表すこととする。
FIDは、フレームの発行元ノード装置1におけるフレームIDである。すなわち、発行元ノード装置1により生成されたFIDが、ヘッダの「FID」フィールドに格納される。つまり、GSとFIDとを組合せることにより、フレームを一意に識別可能なフレーム識別情報となる。
フレームタイプは、フレームの種別を示す情報であり、データフレームにおいては、フレームの種別がデータフレームであることを示す情報が、「フレームタイプ」フィールドに格納される。フレームの種別としては、本実施形態1においては、少なくとも、ハローフレームと、データフレームと、ACKフレーム(以下、単に、ACKという)の3つが存在する。
ハローフレームは、ハローフレーム生成部36(詳しくは後述)により生成され、自ノード装置1の存在を他のノード装置1に対して通知するためのフレームであり、経路作成に必要な情報を含んでいる。データフレームは、発行元ノード装置1(GS)が最終的な宛先となるノード装置1(GD)に伝達しようとしている情報を、ペイロードとして含むフレームである。ACKは、データフレームの送信先の隣接ノード装置1(LD)が、該データフレームを受信したことを、送信元のノード装置1(LS)へ通知するためのフレームである。
ACKフラグは、データフレームの受信に応答して、ACKをLSへ返信する必要があるか否かを示す情報(フラグ)である。例えば、「ACKフラグ」フィールドに格納されている値が“0”の場合には、ACKの返信が必要であることを示し、一方、“1”の場合には、ACKの返信が不必要であることを示す。なお、本実施形態1においては、ACKフラグの初期値は“0”である。すなわち、末梢ノード装置1がGSとしてデータフレームを生成する際、末梢ノード装置1のデータフレーム処理部33は、ACKフラグの値を“0”に設定する。
PathIDは、データフレームが最初に経由する中継ノード装置(以下、第1中継ノード装置という)1のノードIDであり、第1中継ノード装置1のデータフレーム処理部33が、「PathID」フィールドに自ノードIDを格納する。例えば、図1を参照して、データフレームの経路が、経路<N1,N2,S1,S2,S3,N16>である場合には、第1中継ノード装置1は、中継ノード装置S1となることから、PathIDは、S1となる。
次に、図5と図6を参照して、記憶部20のデータエリアに格納されている、FIDテーブルT1、ルーティングテーブルT2について、それぞれ、説明する。
図5は、本実施形態1におけるFIDテーブルT1の例を示す図である。本実施形態1におけるFIDテーブルT1は、データフレーム処理部33により管理されており、図5に示すように、「GS」と「FID」と「PathID」とが対応付けられているテーブルである。
図6は、ルーティングテーブルT2の例を示す図である。ルーティングテーブルT2は、リンク管理部32(詳しくは後述)により管理されており、データフレームを送信する隣接ノード装置1を選択するために必要となる情報をGDごとに管理しているテーブルである。例えば、ルーティングテーブルT2は、図6に示すように、「GD」ごとに、「LD候補」と「優先度」とが対応付けられているテーブルである。
なお、図6に例示するルーティングテーブルT2は、末梢ノード装置N1が格納するルーティングテーブルT2の例であり、優先度p1の方が優先度p2より高く設定されているものとする。
「LD候補」は、リンクが存在する隣接ノード装置1のノードIDである。「優先度」は、LD候補の中からLDを選択する際の優先度を示している。この優先度は、可変してもよく、例えば、データフレームの送信が成功したか否かに基づいて、リンク管理部32が優先度を変更するように構成してもよい。また、例えば、隣接ノード装置1へ送信したデータフレームがループしたか否かに基づいて、リンク管理部32が優先度を変更するように構成してもよい。
図2に戻り、制御部30は、例えば、MPUなどで構成され、記憶部20のプログラムエリアに格納されている動作プログラムを実行して、図2に示すように、フレーム種別特定部31と、リンク管理部32と、データフレーム処理部33と、ACK処理部34と、ルート選択部35と、ハローフレーム生成部36としての機能を実現すると共に、ノード装置1全体を制御する制御処理や詳しくは後述の中継処理などの処理を実行する。
フレーム種別特定部31は、通信部10で受信したフレームの種別を特定する。具体的には、通信部10は、フレームを受信すると、受信したフレームをフレーム種別特定部31へ出力する。そして、フレーム種別特定部31は、受信したフレームのヘッダを解析して、フレームタイプに基づいて、フレームの種別を特定する。
そして、フレーム種別特定部31は、特定したフレームの種別がハローフレームの場合には、受信したフレームをリンク管理部32へ出力し、特定したフレームの種別がデータフレームの場合には、受信したフレームをデータフレーム処理部33へ出力し、特定したフレームの種別がACKの場合には、受信したフレームをACK処理部34へ出力する。
リンク管理部32は、ルーティングテーブルT2の管理を行う。より具体的には、リンク管理部32は、受信したフレームがハローフレームの場合に、受信したハローフレームを解析し、解析結果に基づいて、ルーティングテーブルT2の更新と生成を行う。また、リンク管理部32は、ルート選択部35よりルーティングテーブルT2の生成の指示が入力されると、例えば、過去に受信したハローフレームに基づいて、生成を指示されたGDに対応するルーティングテーブルT2を生成する。
また、リンク管理部32は、ACK処理部34により通知されたデータフレームの送信が成功したか否かの判定の結果などに基づいて、ルーティングテーブルT2の優先度を変更する。例えば、リンク管理部32は、データフレームの送信が失敗したと判定された場合には、データフレームの送信が失敗したと判定された「LD候補」に対応する優先度を最も低く設定する。
データフレーム処理部33は、受信したデータフレームの処理を行う。より具体的には、データフレーム処理部33は、まず、フレーム種別特定部31よりデータフレームが入力されたか否かを判定することで、データフレームを受信したか否かを判定する。そして、データフレーム処理部33は、データフレームを受信すると、受信したデータフレームのヘッダを解析し、LDが自ノードIDと一致するか否かを判定する。そして、データフレーム処理部33は、LDが自ノードIDと一致しない場合には、受信したデータフレームを破棄し、LDが自ノードIDと一致する場合には、ACKフラグに基づいて、ACKをLSへ返信する必要があるか否かを判定する。
ACKをLSへ返信する必要がある場合には、データフレーム処理部33は、ACK処理部34に対して、ACKの生成を指示する。そして、データフレーム処理部33は、GDが自ノードIDと一致するか否かを判定する。すなわち、データフレーム処理部33は、受信したデータフレームの最終的な宛先が自ノード装置1か否かを判定する。
受信したデータフレームの最終的な宛先が自ノード装置1の場合には、データフレーム処理部33は、受信したデータフレームを上位層へ出力する。データフレームの入力に応答して、上位層は、受信したデータフレームの処理を行う。
一方、受信したデータフレームの最終的な宛先が他のノード装置1の場合には、データフレーム処理部33は、ヘッダとFIDテーブルT1とを比較し、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。すなわち、データフレーム処理部33は、同じデータフレームを既に受信したか否かを判定する。
GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあり、自ノード装置1が中継ノード装置1の場合には、データフレーム処理部33は、更に、ヘッダのPathIDが、GDとFIDとの組合せがヘッダのGDとFIDとの組合せと一致する登録のPathIDと一致するか否かを判定する。すなわち、ヘッダのGDとFIDとPathIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。
ヘッダのGDとFIDとPathIDとの組合せと一致する登録がFIDテーブルT1にある場合には、データフレーム処理部33は、受信したデータフレームはループデータであると判定する。一方、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるが、PathIDは一致しない場合には、データフレーム処理部33は、受信したデータフレームは重複データであると判定する。このように、本実施形態1では、ループデータと重複データとを区別することが可能である。
そして、データフレーム処理部33は、受信したデータフレームを重複データと判定した場合には、受信したデータを破棄し、ループデータと判定した場合には、ルート選択部35に対して、LDの再選択を指示する。この際、データフレーム処理部33は、ループする旨とループデータを送信した際のLDとを、リンク管理部32へ通知する。こうすることで、リンク管理部32は、ルーティングテーブルT2の優先度を適切に変更することが可能となる。
一方、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあったとしても、自ノード装置1が末梢ノード装置1の場合には、受信したデータフレームがループデータなのか、それとも重複データなのかの判定を行うことはしない。すなわち、本実施形態1においては、ループデータと重複データとの区別は中継ノード装置1のみで実行される。末梢ノード装置1においては、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にある場合には、受信したデータフレームをループデータと判定して、ルート選択部35に対して、LDの再選択を指示する。
一方、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1に存在しない場合には、すなわち、初めて受信したデータフレームの場合には、データフレーム処理部33は、FIDテーブルT1に登録処理を行う。
より具体的には、データフレーム処理部33は、ヘッダのPathIDがnullか否かを判定する。ヘッダのPathIDがnullではない場合には、すなわち、受信したデータフレームがいずれかの中継ノード装置1を経由している場合には、データフレーム処理部33は、ヘッダのGDとFIDとPathIDとを対応付けてFIDテーブルT1に登録する。そして、データフレーム処理部33は、受信したデータフレームの送信を行うために、ルート選択部35に対して、LDの選択を指示する。
また、ヘッダのPathIDがnullであって、すなわち、受信したデータフレームが中継ノード装置1を経由していないデータフレームであって、自ノード装置1が末梢ノード装置1の場合には、データフレーム処理部33は、ヘッダのGDとFIDとPathIDとを対応付けてFIDテーブルT1に登録する。そして、データフレーム処理部33は、受信したデータフレームの送信を行うために、ルート選択部35に対して、LDの選択を指示する。
一方、ヘッダのPathIDがnullであって、自ノード装置1が中継ノード装置1の場合には、データフレーム処理部33は、ヘッダのPathIDに自ノードIDを設定すると共に、自ノードIDと、ヘッダのGDとFIDと、を対応付けてFIDテーブルT1に登録する。すなわち、処理対象のデータフレームが最初に経由する中継ノード装置1において、ヘッダのPathIDの設定が行われる。そして、データフレーム処理部33は、受信したデータフレームの送信を行うために、ルート選択部35に対して、LDの選択を指示する。
また、データフレーム処理部33は、ルート選択部35より選択されたLDが通知されると、データフレームの送信処理を行う。より具体的には、データフレーム処理部33は、ルート選択部35より選択されたLDが通知されると、ヘッダのLSに自ノードIDを設定すると共に、ヘッダのLDにルート選択部35より選択されたLDを設定する。
この際、中継ノード装置1が他の中継ノード装置1へデータフレームを送信する場合であって、ACKフラグの値が“0”の場合には、データフレーム処理部33は、ACKフラグの値を“1”に設定する。また、中継ノード装置1が末梢ノード装置1へデータフレームを送信する場合であって、ACKフラグの値が“1”の場合には、データフレーム処理部33は、ACKフラグの値を“0”に設定する。こうすることで、中継ノード装置1が他の中継ノード装置1へデータフレームを送信する場合に、ACKの返信が不要となるように設定される。
また、この際、データフレーム処理部33は、データフレームの再送(リトライ)に備えて、データフレームを記憶部20のデータエリアに格納する。こうすることで、データフレームを再送する必要が生じた場合に、記憶部20に格納されているデータフレームに基づいて、再送するためのデータフレームを複製することが可能となる。
そして、データフレーム処理部33は、通信部10を介して、設定したLDである隣接ノード装置1へデータフレームを送信する。
また、ACK処理部34よりデータフレームの送信の失敗が通知され、更に、ルート選択部35より選択されたLDが通知されると、データフレーム処理部33は、データフレームの再送を行う。より具体的には、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを複製し、複製したデータフレームのLDをルート選択部35より選択されたLDへと変更する。そして、データフレーム処理部33は、通信部10を介して、変更後のLDである隣接ノード装置1へ複製したデータフレームを送信する。この際、ルート選択部35により選択されたLDがLSの場合には、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを削除する。また、必要に応じて、ACKフラグの設定を変更する。
更に、データフレーム処理部33は、上位層の要求に応答して、図3に例示するヘッダのデータフレームを生成し、通信部10を介して、生成したデータフレームを他のノード装置1へ送信する。ただし、中継ノード装置1は、中継専用のノード装置であることから、データフレームの生成処理を行わない。つまり、中継ノード装置1は、自らGSとして振舞うことはない。
ACK処理部34は、ACKを送受信するための処理を行う。具体的には、ACK処理部34は、データフレーム処理部よりACKの生成指示を受けると、ACKを生成し、生成したACKをLSへ返信する。
また、ACK処理部34は、データフレームを送信後、所定時間内にACKを受信した場合には、データフレームの送信が成功したと判定し、記憶部20のデータエリアに格納されている対応するデータフレームを削除する。
一方、所定時間内にACKを受信しなかった場合には、ACK処理部34は、データフレームの送信が失敗したと判定し、データフレーム処理部33とルート選択部35に対して、データフレームの送信が失敗した旨を通知する。
また、ACK処理部34は、データフレームの送信が成功したか否かの判定の結果を、リンク管理部32へ通知する。こうすることで、リンク管理部32は、データフレームの送信が成功したか否かに基づいて、ルーティングテーブルT2の優先度を変更することが可能となる。
ルート選択部35は、受信したデータフレームを他のノード装置1へ送信する必要がある場合に、ルーティングテーブルT2を参照して、データフレームの送信先となる隣接ノード装置1、すなわち、LDを選択する。そして、ルート選択部35は、選択したLDをデータフレーム処理部33へ通知する。
より具体的には、データフレーム処理部33よりLDの選択を指示された場合、あるいは、ACK処理部34よりデータフレームの送信の失敗が通知された場合に、ルート選択部35は、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定する。そして、ルート選択部35は、ルーティングテーブルT2を特定できた場合には、特定したルーティングテーブルT2の優先度に基づいて、送信先の隣接ノード装置1、すなわち、LDを選択する。
一方、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定できなかった場合には、ルート選択部35は、リンク管理部32に対し、送信対象のデータフレームのGDに対応するルーティングテーブルT2の生成を指示する。そして、ルート選択部35は、リンク管理部32により生成されたルーティングテーブルT2の優先度に基づいて、送信先の隣接ノード装置1、すなわち、LDを選択する。
例えば、送信対象のデータフレームがループデータではない場合には、すなわち、初めて受信したデータフレームの場合には、ルート選択部35は、送信元の隣接ノード装置1(LS)を除いたLD候補の中から、優先度が最も高いLD候補を、LDとして選択する。
また、例えば、送信対象のデータフレームがループデータの場合、あるいは、ACK処理部34よりデータフレームの送信の失敗が通知された場合には、ルート選択部35は、送信元の隣接ノード装置1(LS)及び既に送信を試みた隣接ノード装置1を除いたLD候補の中から、優先度が最も高いLD候補を、LDとして選択する。
この際、LDを特定できなかった場合には、ルート選択部35は、送信対象のデータフレームを送信元の隣接ノード装置1(LS)へ送り返すために、送信元の隣接ノード装置1(LS)をLDとして選択する。
ハローフレーム生成部36は、ハローフレームを所定のタイミング(例えば、定期的に)で生成し、通信部10を介して、生成したハローフレームを他のノード装置1へ送信する。
次に、図7と図8を参照して、本実施形態1における中継処理の流れについて説明する。図7と図8は、それぞれ、本実施形態1における中継処理のフローを説明するためのフローチャートの例の一部と、他の一部である。本中継処理は、データフレームの受信をトリガとして開始される。
データフレーム処理部33は、データフレームを受信したか否かを判定する(ステップS001)。データフレームを受信していないと判定した場合には(ステップS001;NO)、データフレーム処理部33は、更に、自ノード装置1がGSとして送信するデータフレームが有るか否かを判定する(ステップS101)。但し、中継ノード装置1が本中継処理を実行する場合には、上述したように、中継ノード装置1はGSとして機能しないため、ステップS101の処理は実行されない。そのため、ステップS001の処理でNOと判定された場合には、ステップS001の処理を繰り返して、データフレームの受信を待つ。
データフレーム処理部33により、自ノード装置1がGSとして送信するデータフレームは無いと判定された場合には(ステップS101;NO)、処理はステップS001の処理に戻り、前述の処理を繰り返す。一方、データフレーム処理部33により、自ノード装置1がGSとして送信するデータフレームが有ると判定された場合には(ステップS101;YES)、処理は後述のステップS102の処理へと進む。
一方、ステップS001の処理において、データフレームを受信したと判定した場合には(ステップS001;YES)、データフレーム処理部33は、受信したデータフレームのヘッダを解析し(ステップS002)、LDが自ノードIDと一致するか否かを判定する(ステップS003)。
LDが自ノードIDと一致しないと判定した場合には(ステップS003;NO)、データフレーム処理部33は、受信したデータフレームを破棄する(ステップS004)。そして、処理はステップS001の処理へと戻り、次のデータフレームの受信を待つ。
一方、LDが自ノードIDと一致すると判定した場合には(ステップS003;YES)、データフレーム処理部33は、受信したデータフレームのACKフラグに基づいて、ACKをLSへ返信する必要があるか否かを判定する(ステップS005)。
データフレーム処理部33により、ACKをLSへ返信する必要はないと判定された場合には(ステップS005;NO)、処理は後述のステップS008の処理へと進む。一方、ACKをLSへ返信する必要があると判定した場合には(ステップS005;YES)、データフレーム処理部33は、ACK処理部34に対して、ACKの生成を指示する(ステップS006)。
ACKの生成指示を受けたACK処理部34は、ACKを生成し、通信部10を介して、送信元の隣接ノード装置1(LS)へ生成したACKを送信する(ステップS007)。そして、データフレーム処理部33は、GDが自ノードIDと一致するか否かを判定する(ステップS008)。すなわち、データフレーム処理部33は、受信したデータフレームの最終的な宛先が自ノード装置1か否かを判定する。
GDが自ノードIDと一致すると判定した場合には(ステップS008;YES)、データフレーム処理部33は、受信したデータフレームを上位層へ出力し、データフレームの入力に応答して、上位層は、受信したデータフレームの処理を行う(ステップS009)。
一方、GDが自ノードIDと一致しないと判定した場合には(ステップS008;NO)、データフレーム処理部33は、ヘッダとFIDテーブルT1とを比較し(ステップS010)、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する(ステップS011)。すなわち、データフレーム処理部33は、同じデータフレームを既に受信したか否かを判定する。
GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあると判定した場合には(ステップS011;YES)、データフレーム処理部33は、更に、記憶部20のデータエリアに格納されている自ノード装置1の種別を示す情報に基づいて、自ノード装置1が中継ノード装置1であるか否かを判定する(ステップS012)。
データフレーム処理部33により、自ノード装置1は中継ノード装置1ではないと判定された場合には(ステップS012;NO),処理は後述のステップS014の処理へと進む。これは、本実施形態1においては、ループデータと重複データとの区別は中継ノード装置1においてのみ実行されるように構成されているからである。
一方、自ノード装置1は中継ノード装置1であると判定した場合には(ステップS012;YES)、データフレーム処理部33は、更に、ヘッダのPathIDが、GDとFIDとの組合せがヘッダのGDとFIDとの組合せと一致する登録のPathIDと一致するか否かを判定する(ステップS013)。すなわち、データフレーム処理部33は、ヘッダのGDとFIDとPathIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。
PathIDは一致しないと判定した場合には(ステップS013;NO)、すなわち、受信したデータフレームは重複データであると判定した場合には、データフレーム処理部33は、受信したデータフレームを破棄する(ステップS004)。
一方、PathIDも一致すると判定した場合には(ステップS013;YES)、すなわち、受信したデータフレームはループデータであると判定した場合には、データフレーム処理部33は、ルート選択部35に対して、LDの再選択を指示する(ステップS014)。
LDの再選択の指示を受けたルート選択部35は、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定し(ステップS015)、送信対象のデータフレームを送信していない「LD候補」が有るか否かを判定する(ステップS016)。
ルート選択部35により、送信対象のデータフレームを送信していない「LD候補」がまだ有ると判定された場合には(ステップS016;YES)、処理は後述のステップS107の処理へと進む。一方、送信対象のデータフレームを送信していない「LD候補」はもう無いと判定した場合には(ステップS016;NO)、ルート選択部35は、LSをLDとして選択し(ステップS017)、処理は後述のステップS108の処理へと進む。すなわち、送信元のノード装置1へ受信したデータフレームを送り返すための処理を行う。
ステップS011の処理において、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にないと判定した場合には(ステップS011;NO)、すなわち、初めて受信したデータフレームであると判定した場合には、データフレーム処理部33は、FIDテーブルT1への登録処理を実行する。
具体的には、データフレーム処理部33は、ヘッダのPathIDがnullか否かを判定する(ステップS201)。ヘッダのPathIDがnullではないと判定した場合には(ステップS201;NO)、すなわち、受信したデータフレームがいずれかの中継ノード装置1を既に経由している場合には、データフレーム処理部33は、ヘッダのGDとFIDとPathIDとを対応付けてFIDテーブルT1に登録する(ステップS301)。そして、処理は後述のステップS102の処理へと進む。
一方、ヘッダのPathIDはnullであると判定した場合には(ステップS201;YES)、すなわち、受信したデータフレームが中継ノード装置1を経由していないデータフレームである場合には、データフレーム処理部33は、更に、記憶部20のデータエリアに格納されている自ノード装置1の種別を示す情報に基づいて、自ノード装置1が中継ノード装置1であるか否かを判定する(ステップS202)。
自ノード装置1は末梢ノード装置1であると判定した場合には(ステップS202;NO)、処理はステップS301の処理へと進み、前述した処理を行う。
一方、自ノード装置1は中継ノード装置1であると判定した場合には(ステップS202;YES)、データフレーム処理部33は、ヘッダのPathIDに自ノードIDを設定すると共に(ステップS203)、自ノードIDと、ヘッダのGDとFIDと、を対応付けてFIDテーブルT1に登録する(ステップS204)。すなわち、処理対象のデータフレームが最初に経由する中継ノード装置1において、ヘッダのPathIDの設定が行われる。そして、処理は後述のステップS102の処理へと進む。
ステップS102の処理では、データフレーム処理部33は、ルート選択部35に対し、LDの選択を指示する(ステップS102)。
LDの選択指示を受けたルート選択部35は、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定し(ステップS103)、ルーティングテーブルT2を特定できたか否かを判定する(ステップS104)。ルーティングテーブルT2を特定できなかったと判定した場合には(ステップS104;NO)、ルート選択部35は、リンク管理部32に対し、送信対象のデータフレームのGDに対応するルーティングテーブルT2の生成を指示する(ステップS105)。
ルーティングテーブルT2の生成指示を受けたリンク管理部32は、生成を指示されたGDに対応するルーティングテーブルT2を生成する(ステップS106)。
そして、ルート選択部35は、ステップS015又はステップS103の処理で特定した、あるいは、ステップS106の処理で生成されたルーティングテーブルT2の優先度に基づいて、送信先の隣接ノード装置1、すなわち、LDを選択する(ステップS107)。
そして、ルート選択部35は、データフレーム処理部33に対し、選択したLDを通知する(ステップS108)。選択されたLDの通知を受けたデータフレーム処理部33は、ヘッダの設定を行う(ステップS109)。
そして、データフレーム処理部33は、通信部10を介して、設定したLD、すなわちルート選択部35により選択されたLDである隣接ノード装置1へデータフレームを送信する(ステップS110)。そして、処理はステップS001の処理へと戻り、次にデータフレームの受信を待つ。
次に、図9を参照して、本実施形態1におけるリトライ処理の流れについて説明する。図9は、本実施形態1におけるリトライ処理のフローを説明するためのフローチャートの例である。本リトライ処理は、中継処理におけるデータフレームの送信をトリガとして開始される。
なお、本リトライ処理は、中継ノード装置1が他の中継ノード装置1へデータフレームを中継する場合には実行されない。本実施形態1においては、中継ノード装置1が他の中継ノード装置1へデータフレームを中継する場合には、ACKを返信しないように構成しているからである。
データフレーム処理部33によりデータフレームが送信されると、ACK処理部34は、タイマ(不図示)をスタートさせ(ステップS401)、該データフレームの送信先の隣接ノード装置1(LD)より返信されるACKを受信したか否かを判定する(ステップS402)。
ACKを受信したと判定した場合には(ステップS402;YES)、ACK処理部34は、記憶部20のデータエリアに格納されている対応するデータフレームを削除し(ステップS403)、データフレームの送信が成功したので、リトライ処理は終了する。
一方、ACKをまだ受信していないと判定した場合には(ステップS402;NO)、ACK処理部34は、更に、タイムアウトしたか否かを判定する(ステップS501)。まだタイムアウトしていないと判定された場合には(ステップS501;NO)、処理はステップS402の処理へと戻り、前述の処理を繰り返す。
一方、タイムアウトしたと判定した場合には(ステップS501;YES)、ACK処理部34は、データフレームの送信が失敗したと判定し、データフレーム処理部33とルート選択部35に対して、データフレームの送信が失敗した旨を通知する(ステップS502)。この際、ACK処理部34は、データフレームの送信が成功したか否かの判定の結果を、リンク管理部32へ通知する。こうすることで、リンク管理部32は、データフレームの送信が成功したか否かに基づいて、ルーティングテーブルT2の優先度を変更することが可能となる。
データフレームの送信失敗の通知を受けたルート選択部35は、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定し(ステップS503)、送信対象のデータフレームを送信していない「LD候補」が有るか否かを判定する(ステップS504)。
送信対象のデータフレームを送信していない「LD候補」がまだ有ると判定した場合には(ステップS504;YES)、ルート選択部35は、LDを選択し(ステップS505)、選択したLDをデータフレーム処理部33へ通知する(ステップS506)。
ACK処理部34よりデータフレームの送信の失敗が通知され、更に、ルート選択部35より選択されたLDが通知されると、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを複製し、複製したデータフレームのLDをルート選択部35より選択されたLDへと変更する(ステップS507)。
そして、データフレーム処理部33は、通信部10を介して、変更後のLDである隣接ノード装置1へ複製したデータフレームを送信し(ステップS508)、処理はステップS401の処理へと戻り、前述の処理を繰り返す。
ステップS504の処理において、送信対象のデータフレームを送信していない「LD候補」はもう無いと判定した場合には(ステップS504;NO)、ルート選択部35は、LSをLDとして選択し(ステップS601)、選択したLDをデータフレーム処理部33へ通知する(ステップS602)。
ACK処理部34よりデータフレームの送信の失敗が通知され、更に、ルート選択部35より選択されたLDが通知されると、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを複製し、複製したデータフレームのLDをルート選択部35より選択されたLDへと変更する(ステップS603)。
そして、データフレーム処理部33は、通信部10を介して、変更後のLDである隣接ノード装置1へ複製したデータフレームを送信し(ステップS604)、記憶部20のデータエリアに格納されている対応するデータフレームを削除する(ステップS605)。こうして、データフレームは送信元の隣接ノード装置1(LS)へ送り返され、処理は終了する。
次に、図1、図6乃至図11を参照して、具体例に従って、本実施形態1における中継処理の流れについて説明する。図10は、図1に示す例に対応するタイミングチャートである。但し、図中の丸付き番号は、必ずしも時系列順に付された番号ではなく、各タイミングを識別するために付した番号である。また、これらの番号は、図1と図10と図11において、対応付けられているものとする。図11は、図10のタイミングチャートの各タイミングでの、ヘッダとFIDテーブルの内容を示す図である。
なお、同時に複数の異なるデータフレームがネットワーク100を介して、伝送され得るが、ここでは、一つのデータフレームの中継の流れに着眼して説明するものとする。また、本具体例においては、図1と図10を参照して、中継ノード装置S1より送信されたデータフレームの方が、末梢ノード装置N4より送信されたデータフレームより早く中継ノード装置S2に到達するものとする。
図1、図6、図10を参照して、タイミング1において、末梢ノード装置N1はGSとして、GDを末梢ノード装置N16としたデータフレーム(FIDをFID1とする)を生成し、優先度p1>優先度p2であることから、生成したデータフレームを末梢ノード装置N2へ送信する。タイミング1におけるデータフレームのGSとFIDとPathIDは、それぞれ、図11に示すように、N1、FID1、nullである。
図7を参照して、データフレームを受信した末梢ノード装置N2は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDもnullであり(ステップS201;YES)、末梢ノード装置N2であることから(ステップS202;NO)、受信したデータフレームのGS(N1)とFID(FID1)とPathID(null)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップS301)。
図1と図10を参照して、タイミング1において、末梢ノード装置N2は中継ノード装置S1へデータフレームを送信する。タイミング1におけるデータフレームのGSとFIDとPathIDは、中継ノード装置1を経由していないことから、それぞれ、図11に示すように、N1、FID1、nullのままである。
図7を参照して、データフレームを受信した中継ノード装置S1は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDもnullであり(ステップS201;YES)、中継ノード装置S1であることから(ステップS202;YES)、ヘッダのPathIDに自ノードIDであるS1を設定する(ステップS203)。そして、受信したデータフレームのGS(N1)とFID(FID1)と、PathID(S1)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップ204)。
図1と図10を参照して、タイミング3において、中継ノード装置S1は中継ノード装置S2へデータフレームを送信する。タイミング3におけるデータフレームのGSとFIDとPathIDは、中継ノード装置S1を経由したことから、それぞれ、図11に示すように、N1、FID1、S1となる。
図7を参照して、データフレームを受信した中継ノード装置S2は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDはS1であることから(ステップS201;NO)、受信したデータフレームのGS(N1)とFID(FID1)とPathID(S1)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップS301)。
図1と図10を参照して、タイミング4において、例えば、通信障害のために、末梢ノード装置N2より末梢ノード装置N1へ返信されたACKが欠落したとする。
図1と図10を参照して、タイミング5において、末梢ノード装置N1は、ACKが受信できないことから、末梢ノード装置N2への送信が失敗したと判定し(図9のリトライ処理のステップS501;YES)、末梢ノード装置N3へデータフレームを再送(リトライ)する。オリジナルのデータフレームと再送されたデータフレームを区別するため、再送されたデータフレームを再送データフレームと称することとする。タイミング5における再送データフレームのGSとFIDとPathIDは、それぞれ、図11に示すように、N1、FID1、nullである。
図7を参照して、再送データフレームを受信した末梢ノード装置N3は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDもnullであり(ステップS201;YES)、末梢ノード装置N3であることから(ステップS202;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とPathID(null)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップS301)。
図1と図10を参照して、タイミング6において、末梢ノード装置N3は末梢ノード装置N4へ再送データフレームを送信する。タイミング6における再送データフレームのGSとFIDとPathIDは、中継ノード装置1を経由していないことから、それぞれ、図11に示すように、N1、FID1、nullのままである。
図7を参照して、再送データフレームを受信した末梢ノード装置N4は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDもnullであり(ステップS201;YES)、末梢ノード装置N4であることから(ステップS202;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とPathID(null)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップS301)。
図1と図10を参照して、タイミング7において、末梢ノード装置N4は中継ノード装置S2へ再送データフレームを送信する。タイミング7における再送データフレームのGSとFIDとPathIDは、中継ノード装置1を経由していないことから、それぞれ、図11に示すように、N1、FID1、nullのままである。
図7と図8と図11を参照して、再送データフレームを受信した中継ノード装置S2は、GSとFIDとの組合せが一致する登録が既にFIDテーブルT1にあり(ステップS011;YES)、中継ノード装置S2であり(ステップS012;YES)、ヘッダのPathID(null)とFIDテーブルT1のPathID(S1)は一致しないことから(ステップS013;NO)、受信した再送データフレームを重複データと判定する。そして、中継ノード装置S2は、受信した再送データフレームを破棄する(ステップS004)。このようにして、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
図1と図10を参照して、タイミング8において、中継ノード装置S2は中継ノード装置S3へデータフレームを送信する。タイミング8におけるデータフレームのGSとFIDとPathIDは、中継ノード装置S1を経由したオリジナルのデータフレームであることから、それぞれ、図11に示すように、N1、FID1、S1である。
図7を参照して、データフレームを受信した中継ノード装置S3は、GSとFIDとの組合せが一致する登録がFIDテーブルT1になく(ステップS011;NO)、ヘッダのPathIDはS1であることから(ステップS201;NO)、受信したデータフレームのGS(N1)とFID(FID1)とPathID(S1)とを対応付けて、図11に示すように、FIDテーブルT1に登録する(ステップS301)。
図1と図10を参照して、タイミング9において、中継ノード装置S3はGDである末梢ノード装置N16へデータフレームを送信する。タイミング9におけるデータフレームのGSとFIDとPathIDは、中継ノード装置S1を経由したオリジナルのデータフレームであることから、それぞれ、図11に示すように、N1、FID1、S1である。
図7を参照して、データフレームを受信した末梢ノード装置N16は、ヘッダを解析し(ステップS002)、GDが自ノードIDであることから(ステップS008;YES)、受信したデータフレームを上位層へ出力する。上位層は、受信したデータフレームを処理し(ステップS009)、中継処理が終了することとなる。
上記実施形態1によれば、中継ノード装置1は、データフレームを受信すると、GSとFIDとの組合せと一致する登録がFIDテーブルT1に有るか否かを判定し、一致する登録がある場合に、PathIDに基づいて、受信したデータフレームがループデータか、それとも、重複データかを判定する。
このように構成することで、重複データとループデータとを区別することが可能となる。これにより、重複データがループデータであると誤判定されることによる誤った経路変更を防止することが可能となる。したがって、誤った経路変更によるネットワークの切断やノード装置の孤立が生じるのを防止することが可能となり、適切な経路を維持することが可能となる。
また、上記実施形態1によれば、中継ノード装置1は、受信したデータフレームが重複データである場合には、受信したデータフレームを他のノード装置1へ送信することなく破棄する。このように構成することで、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
(実施形態2)
実施形態1においては、「GS」と「FID」と「PathID」とに基づいて、ループデータと重複データとを区別する方法について説明した。本実施形態2においては、「GS」と「FID」と「リトライID」と「リトライ回数」とに基づいて、ループデータと重複データとを区別する方法について説明する。
図12は、本実施形態2におけるネットワーク100の概念図である。本実施形態2におけるネットワーク100は、図12に示すように、例えば、末梢ノード装置1のみで構成されている。このようなネットワーク100としては、例えば、住宅が密集したエリアのネットワークが想定される。もちろん、末梢ノード装置1と中継ノード装置1とが混在するネットワーク100においても、本実施形態2において説明するループデータと重複データとを区別する方法を適用することは可能である。
図13は、本実施形態2におけるネットワーク100を構成するノード装置1の構成例を示す機能ブロック図である。本実施形態2におけるノード装置1の構成は、基本的には実施形態1の場合と同じである。但し、図13に示すように、記憶部20がリトライ管理テーブルT3を更に格納する点と、制御部30がリトライカウンタ37とリトライ通知部38として更に機能する点で実施形態1の場合と異なっている。また、制御部30の共通する機能部の一部(データフレーム処理部33、ACK処理部34)が果たす役割が実施形態1の場合と若干異なっている。また、ヘッダのフォーマットとFIDテーブルT1の構成も実施形態1の場合と異なっている。
まず、図14と図15を参照して、本実施形態2におけるヘッダについて説明する。図14は、本実施形態2におけるデータフレームのヘッダのフォーマット例を示す図である。図15は、図14に示すフォーマット例における各フィールドの説明である。
本実施形態2におけるデータフレームのヘッダは、図14に示すように、LDと、LSと、GDと、GSと、FIDと、フレームタイプと、リトライIDと、リトライ回数と、を含む。LDと、LSと、GDと、GSと、FIDと、フレームタイプは、実施形態1において説明したものと同じである。
リトライIDは、データフレームを再送(リトライ)したノード装置1のノードIDである。リトライ回数は、リトライIDで特定されるノード装置1がデータフレームを再送(リトライ)した回数(リトライカウンタ37のカウンタ値)である。
次に、図16と図17を参照して、記憶部20のデータエリアに格納されている、FIDテーブルT1とリトライ管理テーブルT3について説明する。なお、本実施形態2におけるルーティングテーブルT2は、実施形態1の場合と同じである。
図16は、本実施形態2におけるFIDテーブルT1の例を示す図である。本実施形態2におけるFIDテーブルT1は、データフレーム処理部33により管理されており、図16に示すように、「GS」と「FID」と「リトライID」と「リトライ回数」とが対応付けられているテーブルである。実施形態1の場合と同様に、データフレーム処理部33は、GSとFIDとの組合せが一致する登録がFIDテーブルT1に無い場合に、FIDテーブルT1への登録処理を行う。
図17は、本実施形態2におけるリトライ管理テーブルT3の例を示す図である。なお、図17に例示するリトライ管理テーブルT3は、末梢ノード装置N5が備えるリトライ管理テーブルT3の例である。
リトライ管理テーブルT3は、データフレーム処理部33により生成・管理され、リトライ通知部38がリトライ情報(フレーム)を生成する際に、参照されるテーブルである。また、リトライ管理テーブルT3は、図17に示すように、「発生日時」と「GS」と「FID」と「LD」とが対応付けられているテーブルである。
「発生日時」欄には、データフレームを再送(リトライ)した日時を示す情報が格納される。「GS」欄には、リトライ対象となったデータフレームのGSが格納される。「FDI」欄には、リトライ対象となったデータフレームのFIDが格納される。「LD」欄には、リトライの際に選択されたLDが格納される。
例えば、図17(末梢ノード装置N5が備えるリトライ管理テーブルT3の例)を参照すると、日時DT1に、末梢ノード装置N1(GS)で発行されたFID1のデータフレームが、末梢ノード装置N5において、末梢ノード装置N11(LD)へ第一回目のリトライが実行されたことが分かる。
図13に戻り、データフレーム処理部33は、受信したデータフレームの処理を行う。より具体的には、データフレーム処理部33は、まず、フレーム種別特定部31よりデータフレームが入力されたか否かを判定することで、データフレームを受信したか否かを判定する。そして、データフレーム処理部33は、データフレームを受信すると、受信したデータフレームのヘッダを解析し、LDが自ノードIDと一致するか否かを判定する。
そして、データフレーム処理部33は、LDが自ノードIDと一致しない場合には、受信したデータフレームを破棄し、LDが自ノードIDと一致する場合には、ACK処理部34に対して、ACKの生成を指示する。そして、データフレーム処理部33は、GDが自ノードIDと一致するか否かを判定する。すなわち、データフレーム処理部33は、受信したデータフレームの最終的な宛先が自ノード装置1か否かを判定する。
受信したデータフレームの最終的な宛先が自ノード装置1の場合には、データフレーム処理部33は、受信したデータフレームを上位層へ出力する。データフレームの入力に応答して、上位層は、受信したデータフレームの処理を行う。
一方、受信したデータフレームの最終的な宛先が他のノード装置1の場合には、データフレーム処理部33は、ヘッダとFIDテーブルT1とを比較し、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。すなわち、データフレーム処理部33は、同じデータフレームを既に受信したか否かを判定する。
GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にある場合には、データフレーム処理部33は、更に、ヘッダのリトライIDと自ノードIDとが一致するか否かを判定する。すなわち、データフレーム処理部33は、受信したデータフレームが、自ノード装置1が再送したデータフレームか否かを判定する。
自ノード装置1が再送したデータフレームではない場合には、データフレーム処理部33は、更に、ヘッダのリトライIDとリトライ回数の組合せが、GDとFIDとの組合せがヘッダのGDとFIDとの組合せと一致する登録のリトライIDとリトライ回数の組合せと一致するか否かを判定する。すなわち、ヘッダのGDとFIDとリトライIDとリトライ回数との組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。
ヘッダのGDとFIDとリトライIDとリトライ回数との組合せと一致する登録がFIDテーブルT1にある場合、あるいは、受信したデータレームが自ノード装置1により再送されたデータフレームである場合には、データフレーム処理部33は、受信したデータフレームはループデータであると判定する。
一方、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるが、リトライIDとリトライ回数の内の少なくとも一方が一致しない場合には、データフレーム処理部33は、受信したデータフレームは重複データであると判定する。このように、本実施形態2では、ループデータと重複データとを区別することが可能である。
そして、データフレーム処理部33は、受信したデータフレームを重複データと判定した場合には、受信したデータを破棄し、ループデータと判定した場合には、ルート選択部35に対して、LDの再選択を指示する。この際、データフレーム処理部33は、ループする旨とループデータを送信した際のLDとを、リンク管理部32へ通知する。こうすることで、リンク管理部32は、ルーティングテーブルT2の優先度を適切に変更することが可能となる。
一方、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1に存在しない場合には、すなわち、初めて受信したデータフレームの場合には、データフレーム処理部33は、FIDテーブルT1への登録処理を行う。
より具体的には、データフレーム処理部33は、ヘッダのGDとFIDとリトライIDとリトライ回数とを対応付けてFIDテーブルT1に登録する。そして、データフレーム処理部33は、受信したデータフレームの送信を行うために、ルート選択部35に対して、LDの選択を指示する。
また、データフレーム処理部33は、ルート選択部35より選択されたLDが通知されると、データフレームの送信処理を行う。より具体的には、データフレーム処理部33は、ルート選択部35より選択されたLDが通知されると、ヘッダのLSに自ノードIDを設定すると共に、ヘッダのLDにルート選択部35より選択されたLDを設定する。
この際、データフレーム処理部33は、データフレームの再送(リトライ)に備えて、ヘッダ設定後のデータフレームを記憶部20のデータエリアに格納する。こうすることで、データフレームを再送する必要が生じた場合に、記憶部20に格納されているデータフレームに基づいて、再送するためのデータフレームを複製することが可能となる。
そして、データフレーム処理部33は、通信部10を介して、設定したLDである隣接ノード装置1へデータフレームを送信する。
また、ACK処理部34よりデータフレームの送信の失敗が通知され、更に、ルート選択部35より選択されたLDが通知されると、データフレーム処理部33は、データフレームの再送を行う。より具体的には、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを複製し、複製したデータフレームのLDをルート選択部35より選択されたLDへと変更する。そして、データフレーム処理部33は、通信部10を介して、変更後のLDである隣接ノード装置1へ複製したデータフレームを送信する。
この際、ルート選択部35により選択されたLDがLSの場合には、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを削除する。ルート選択部35により選択されたLDがLSではない場合には、すなわち、データフレームを再送(リトライ)する場合には、ヘッダのリトライIDに自ノードIDを設定すると共に、リトライ回数としてリトライカウンタ37のカウンタ値を設定する。
更に、データフレーム処理部33は、上位層の要求に応答して、図14に例示するヘッダのデータフレームを生成し、通信部10を介して、生成したデータフレームを他のノード装置1へ送信する。
また、本実施形態2においては、データフレーム処理部33は、リトライ管理テーブルT3の生成と管理を行う。より具体的には、リトライ処理が発生した際に、データフレーム処理部33は、リトライの発生日時を示す情報と、リトライ対象のデータフレームのGSとFIDと、ルート選択部35により通知されたLDと、を対応付けて、リトライ管理テーブルT3に登録する。
ACK処理部34は、ACKを送受信するための処理を行う。具体的には、ACK処理部34は、データフレーム処理部よりACKの生成指示を受けると、ACKを生成し、生成したACKをLSへ返信する。
また、ACK処理部34は、データフレームを送信後、所定時間内にACKを受信した場合には、データフレームの送信が成功したと判定し、記憶部20のデータエリアに格納されている対応するデータフレームを削除する。
一方、所定時間内にACKを受信しなかった場合には、ACK処理部34は、データフレームの送信が失敗したと判定し、データフレーム処理部33とルート選択部35に対して、データフレームの送信が失敗した旨を通知する。
また、ACK処理部34は、データフレームの送信が成功したか否かの判定の結果を、リンク管理部32へ通知する。こうすることで、リンク管理部32は、データフレームの送信が成功したか否かに基づいて、ルーティングテーブルT2の優先度を変更することが可能となる。
更に、ACK処理部34は、リトライカウンタ37を制御する。具体的には、リトライ処理を開始する際に、リトライカウンタ37を初期化し、所定時間内にACKを受信しなかった場合には、リトライカウンタ37をインクリメントする。
リトライカウンタ37は、データフレームの再送(リトライ)回数を管理するためのカウンタであり、上述したように、ACK処理部34により制御されている。なお、カウンタ値の初期値は“0”とする。
リトライ通知部38は、リトライ管理テーブルT3を参照して、所定のタイミングで、リトライ情報(フレーム)を生成し、通信部10を介して、例えば、管理サーバ(不図示)へ生成したリトライ情報を送信する。リトライ情報は、リトライ管理テーブルT3に登録されている情報(例えば、発生日時を示す情報とLD)と、自ノードIDとを含む。所定のタイミングとしては、例えば、定期的、管理サーバからの要求時などが考えられる。
次に、図18と図19を参照して、本実施形態2における中継処理の流れについて説明する。図18と図19は、それぞれ、本実施形態2における中継処理のフローを説明するためのフローチャートの例の一部と、他の一部である。本中継処理は、データフレームの受信をトリガとして開始される。
なお、実施形態1の場合と同じ処理のステップには同一の符号を付している。ここでは、実施形態1の場合と異なる部分の処理を中心に説明する。
LDが自ノードIDと一致すると判定した場合には(ステップS003;YES)、データフレーム処理部33は、ACK処理部34に対して、ACKの生成を指示する(ステップS006)。
ACKの生成指示を受けたACK処理部34は、ACKを生成し、通信部10を介して、送信元の隣接ノード装置1(LS)へ生成したACKを送信する(ステップS007)。そして、データフレーム処理部33は、GDが自ノードIDと一致するか否かを判定する(ステップS008)。すなわち、データフレーム処理部33は、受信したデータフレームの最終的な宛先が自ノード装置1か否かを判定する。
GDが自ノードIDと一致すると判定した場合には(ステップS008;YES)、データフレーム処理部33は、受信したデータフレームを上位層へ出力し、データフレームの入力に応答して、上位層は、受信したデータフレームの処理を行う(ステップS009)。
一方、GDが自ノードIDと一致しないと判定した場合には(ステップS008;NO)、データフレーム処理部33は、ヘッダとFIDテーブルT1とを比較し(ステップS010)、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する(ステップS011)。すなわち、データフレーム処理部33は、同じデータフレームを既に受信したか否かを判定する。
GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあると判定した場合には(ステップS011;YES)、データフレーム処理部33は、更に、ヘッダのリトライIDと自ノードIDとが一致するか否かを判定する(ステップS701)。すなわち、データフレーム処理部33は、受信したデータフレームが、自ノード装置1が再送したデータフレームか否かを判定する。
データフレーム処理部33により、ヘッダのリトライIDと自ノードIDとが一致すると判定された場合には(ステップS701;YES)、処理はステップS014の処理へと進む。
一方、ヘッダのリトライIDと自ノードIDとが一致しないと判定した場合には(ステップS701;NO)、データフレーム処理部33は、更に、ヘッダのリトライIDとリトライ回数との組合せが、GDとFIDとの組合せがヘッダのGDとFIDとの組合せと一致する登録のリトライIDとリトライ回数との組合せと一致するか否かを判定する(ステップS702)。すなわち、ヘッダのGDとFIDとリトライIDとリトライ回数との組合せと一致する登録がFIDテーブルT1にあるか否かを判定する。
リトライIDとリトライ回数の内の少なくとも一方は一致しないと判定した場合には(ステップS702;NO)、すなわち、受信したデータフレームは重複データであると判定した場合には、データフレーム処理部33は、受信したデータフレームを破棄する(ステップS004)。
一方、リトライIDとリトライ回数も一致すると判定した場合(ステップS702;YES)、あるいは、ヘッダのリトライIDと自ノードIDとが一致すると判定した場合には(ステップS701;YES)、すなわち、受信したデータフレームはループデータであると判定した場合には、データフレーム処理部33は、ルート選択部35に対して、LDの再選択を指示する(ステップS014)。そして、処理は実施形態1において説明したステップS015以降の処理へと進む。
ステップS011の処理において、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にないと判定した場合には(ステップS011;NO)、すなわち、初めて受信したデータフレームであると判定した場合には、データフレーム処理部33は、FIDテーブルT1への登録処理を実行する。
具体的には、データフレーム処理部33は、ヘッダのGDとFIDとリトライIDとリトライ回数とを対応付けてFIDテーブルT1に登録する(ステップS301)。そして、処理は実施形態1において説明したステップS102以降の処理へと進む。
次に、図20と図21を参照して、本実施形態2におけるリトライ処理の流れについて説明する。図20と図21は、それぞれ、本実施形態2におけるリトライ処理のフローを説明するためのフローチャートの例の一部と、他の一部である。本リトライ処理は、中継処理におけるデータフレームの送信をトリガとして開始される。
なお、実施形態1の場合と同じ処理のステップには同一の符号を付している。ここでは、実施形態1の場合と異なる部分の処理を中心に説明する。
データフレーム処理部33によりデータフレームが送信されると、ACK処理部34は、リトライカウンタ37を初期化すると共に(ステップS801)、タイマ(不図示)をスタートさせる(ステップS401)。そして、ACK処理部34は、データフレームの送信先の隣接ノード装置1(LD)より返信されるACKを受信したか否かを判定する(ステップS402)。
ACKを受信したと判定した場合には(ステップS402;YES)、ACK処理部34は、記憶部20のデータエリアに格納されている対応するデータフレームを削除し(ステップS403)、データフレームの送信が成功したので、リトライ処理は終了する。
一方、ACKをまだ受信していないと判定した場合には(ステップS402;NO)、ACK処理部34は、更に、タイムアウトしたか否かを判定する(ステップS501)。まだタイムアウトしていないと判定された場合には(ステップS501;NO)、処理はステップS402の処理へと戻り、前述の処理を繰り返す。
一方、タイムアウトしたと判定した場合には(ステップS501;YES)、ACK処理部34は、データフレームの送信が失敗したと判定し、リトライカウンタ37をインクリメントすると共に(ステップS802)、データフレーム処理部33とルート選択部35に対して、データフレームの送信が失敗した旨を通知する(ステップS502)。この際、ACK処理部34は、データフレームの送信が成功したか否かの判定の結果を、リンク管理部32へ通知する。こうすることで、リンク管理部32は、データフレームの送信が成功したか否かに基づいて、ルーティングテーブルT2の優先度を変更することが可能となる。
データフレームの送信失敗の通知を受けたルート選択部35は、送信対象のデータフレームのGDに対応するルーティングテーブルT2を特定し(ステップS503)、送信対象のデータフレームを送信していない「LD候補」が有るか否かを判定する(ステップS504)。
送信対象のデータフレームを送信していない「LD候補」がまだ有ると判定した場合には(ステップS504;YES)、ルート選択部35は、LDを選択し(ステップS505)、選択したLDをデータフレーム処理部33へ通知する(ステップS506)。
ACK処理部34よりデータフレームの送信の失敗が通知され、更に、ルート選択部35より選択されたLDが通知されると、データフレーム処理部33は、記憶部20のデータエリアに格納されている対応するデータフレームを複製し、複製したデータフレームのLDをルート選択部35より選択されたLDへと変更する(ステップS507)。
更に、データフレーム処理部33は、複製したデータフレームのリトライIDに自ノードIDを設定すると共に、リトライ回数としてリトライカウンタ37のカウンタ値を設定する(ステップS803)。
そして、データフレーム処理部33は、通信部10を介して、変更後のLDである隣接ノード装置1へ複製したデータフレームを送信し(ステップS508)、処理はステップS401の処理へと戻り、前述の処理を繰り返す。
ステップS504の処理において、ルート選択部35により、送信対象のデータフレームを送信していない「LD候補」はもう無いと判定された場合には(ステップS504;NO)、処理は実施形態1で説明したステップS601以降の処理へと進む。
次に、図6、図12、図18乃至図23を参照して、具体例に従って、本実施形態2における中継処理の流れについて説明する。図22は、図12に示す例に対応するタイミングチャートである。但し、図中の丸付き番号は、必ずしも時系列順に付された番号ではなく、各タイミングを識別するために付した番号である。また、これらの番号は、図12と図22と図23において、対応付けられているものとする。図23は、図22のタイミングチャートの各タイミングでの、ヘッダとFIDテーブルT1の内容を示す図である。
なお、同時に複数の異なるデータフレームがネットワーク100を介して、伝送され得るが、ここでは、一つのデータフレームの中継の流れに着眼して説明するものとする。また、本具体例においては、図12と図22を参照して、末梢ノード装置N1より末梢ノード装置N2へ送信されたオリジナルのデータフレームの方が、末梢ノード装置N1より末梢ノード装置N3へ再送されたデータフレームより早く、末梢ノード装置N3に到達するものとする。また、末梢ノード装置N5より末梢ノード装置N6へ送信されたオリジナルのデータフレームの方が、末梢ノード装置N5より末梢ノード装置N11へ再送されたデータフレームより早く、末梢ノード装置N6に到達するものとする。
図6、図12、図22を参照して、タイミング1において、末梢ノード装置N1はGSとして、GDを末梢ノード装置N19としたデータフレーム(FIDをFID1とする)を生成し、優先度p1>優先度p2であることから、生成したデータフレームを末梢ノード装置N2へ送信する。タイミング1におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図23に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N2は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング2において、末梢ノード装置N2は末梢ノード装置N3へデータフレームを送信する。タイミング2におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullのままである。
図18を参照して、データフレームを受信した末梢ノード装置N3は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング3において、例えば、通信障害のために、末梢ノード装置N2より末梢ノード装置N1へ返信されたACKが欠落したとする。
図12と図22を参照して、タイミング4において、末梢ノード装置N1は、ACKが受信できないことから、末梢ノード装置N2への送信が失敗したと判定し(図20のリトライ処理のステップS501;YES)、末梢ノード装置N3へデータフレームを再送(リトライ)する。タイミング4における再送データフレームのGSとFIDとリトライIDとリトライ回数は、末梢ノード装置N1における1回目の再送(リトライ)であることから、それぞれ、図23に示すように、N1、FID1、N1、“1”となる。
また、末梢ノード装置N3のFIDテーブルT1には、(N1、FID1、null、null)の登録があることから、図18と図19を参照して、末梢ノード装置N3のデータフレーム処理部33は、ステップS011の処理でYES、ステップS701の処理でNO、ステップS702の処理でNO、と判定する。つまり、末梢ノード装置N3は、受信した再送データフレームを重複データと判定し、受信した再送データフレームを破棄する(ステップS004)。このようにして、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
図12と図22を参照して、タイミング5において、末梢ノード装置N3は末梢ノード装置N4へデータフレームを送信する。タイミング5におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N4は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング6において、末梢ノード装置N4は末梢ノード装置N5へデータフレームを送信する。タイミング6におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N5は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング7において、末梢ノード装置N5は末梢ノード装置N6へデータフレームを送信する。タイミング7におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N6は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング8において、末梢ノード装置N6はGDである末梢ノード装置N19へデータフレームを送信する。タイミング8におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N19は、ヘッダを解析し(ステップS002)、GDが自ノードIDであることから(ステップS008;YES)、受信したデータフレームを上位層へ出力する。上位層は、受信したデータフレームを処理する(ステップS009)。
図12と図22を参照して、タイミング9において、例えば、通信障害のために、末梢ノード装置N6より末梢ノード装置N5へ返信されたACKが欠落したとする。
図12と図22を参照して、タイミング10において、末梢ノード装置N5は、ACKが受信できないことから、末梢ノード装置N6への送信が失敗したと判定し(図20のリトライ処理のステップS501;YES)、末梢ノード装置N11へデータフレームを再送(リトライ)する。タイミング10における再送データフレームのGSとFIDとリトライIDとリトライ回数は、末梢ノード装置N5における1回目の再送(リトライ)であることから、それぞれ、図23に示すように、N1、FID1、N5、“1”となる。
図18を参照して、再送データフレームを受信した末梢ノード装置N11は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N5)とリトライ回数(“1”)とを対応付けて、図23に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図22を参照して、タイミング11において、末梢ノード装置N11は末梢ノード装置N6へ再送データフレームを送信する。タイミング11におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図23に示すように、N1、FID1、N5、“1”である。
また、末梢ノード装置N6のFIDテーブルT1には、(N1、FID1、null、null)の登録があることから、図18と図19を参照して、末梢ノード装置N6のデータフレーム処理部33は、ステップS011の処理でYES、ステップS701の処理でNO、ステップS702の処理でNO、と判定する。つまり、末梢ノード装置N3は、受信した再送データフレームを重複データと判定し、受信した再送データフレームを破棄する(ステップS004)。このようにして、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
次に、図6、図12、図18乃至図21、図24、図25を参照して、別の具体例に従って、本実施形態2における中継処理の流れについて説明する。図24は、図12に示す例に対応する別のタイミングチャートである。但し、図中の丸付き番号は、必ずしも時系列順に付された番号ではなく、各タイミングを識別するために付した番号である。また、これらの番号は、図12と図24と図25において、対応付けられているものとする。図25は、図24のタイミングチャートの各タイミングでの、ヘッダとFIDテーブルT1の内容を示す図である。
なお、同時に複数の異なるデータフレームがネットワーク100を介して、伝送され得るが、ここでは、一つのデータフレームの中継の流れに着眼して説明するものとする。また、本具体例においては、図12と図24を参照して、末梢ノード装置N1より末梢ノード装置N3へ再送されたデータフレームの方が、末梢ノード装置N1より末梢ノード装置N2へ送信されたオリジナルのデータフレームより早く、末梢ノード装置N3に到達するものとする。また、末梢ノード装置N5より末梢ノード装置N6へ送信されたデータフレームの方が、末梢ノード装置N5より末梢ノード装置N11へ再送されたデータフレームより早く、末梢ノード装置N6に到達するものとする。
図6、図12、図24を参照して、タイミング1において、末梢ノード装置N1はGSとして、GDを末梢ノード装置N19としたデータフレーム(FIDをFID1とする)を生成し、優先度p1>優先度p2であることから、生成したデータフレームを末梢ノード装置N2へ送信する。タイミング1におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、null、nullである。
図18を参照して、データフレームを受信した末梢ノード装置N2は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信したデータフレームのGS(N1)とFID(FID1)とリトライID(null)とリトライ回数(null)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング3において、例えば、通信障害のために、末梢ノード装置N2より末梢ノード装置N1へ返信されたACKが欠落したとする。
図12と図24を参照して、タイミング4において、末梢ノード装置N1は、ACKが受信できないことから、末梢ノード装置N2への送信が失敗したと判定し(図20のリトライ処理のステップS501;YES)、末梢ノード装置N3へデータフレームを再送(リトライ)する。タイミング4における再送データフレームのGSとFIDとリトライIDとリトライ回数は、末梢ノード装置N1における1回目の再送(リトライ)であることから、それぞれ、図25に示すように、N1、FID1、N1、“1”となる。
図18を参照して、再送データフレームを受信した末梢ノード装置N3は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N1)とリトライ回数(“1”)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング2において、末梢ノード装置N2は末梢ノード装置N3へデータフレームを送信する。タイミング2におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、オリジナルのデータフレームであることから、それぞれ、図23に示すように、N1、FID1、null、nullのままである。
また、末梢ノード装置N3のFIDテーブルT1には、(N1、FID1、N1、“1”)の登録があることから、図18と図19を参照して、末梢ノード装置N3のデータフレーム処理部33は、ステップS011の処理でYES、ステップS701の処理でNO、ステップS702の処理でNO、と判定する。つまり、末梢ノード装置N3は、受信したオリジナルのデータフレームを重複データと判定し、受信したオリジナルのデータフレームを破棄する(ステップS004)。このようにして、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
図12と図24を参照して、タイミング5において、末梢ノード装置N3は末梢ノード装置N4へ再送データフレームを送信する。タイミング5における再送データフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、N1、“1”である。
図18を参照して、再送データフレームを受信した末梢ノード装置N4は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N1)とリトライ回数(“1”)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング6において、末梢ノード装置N4は末梢ノード装置N5へ再送データフレームを送信する。タイミング6における再送データフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、N、“1”である。
図18を参照して、再送データフレームを受信した末梢ノード装置N5は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N1)とリトライ回数(“1”)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング7において、末梢ノード装置N5は末梢ノード装置N6へ再送データフレームを送信する。タイミング7における再送データフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、N1、“1”である。
図18を参照して、再送データフレームを受信した末梢ノード装置N6は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N1)とリトライ回数(“1”)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング8において、末梢ノード装置N6はGDである末梢ノード装置N19へ再送データフレームを送信する。タイミング8における再送データフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、N1、“1”である。
図18を参照して、データフレームを受信した末梢ノード装置N19は、ヘッダを解析し(ステップS002)、GDが自ノードIDであることから(ステップS008;YES)、受信したデータフレームを上位層へ出力する。上位層は、受信したデータフレームを処理する(ステップS009)。
図12と図24を参照して、タイミング9において、例えば、通信障害のために、末梢ノード装置N6より末梢ノード装置N5へ返信されたACKが欠落したとする。
図12と図24を参照して、タイミング10において、末梢ノード装置N5は、ACKが受信できないことから、末梢ノード装置N6への送信が失敗したと判定し(図20のリトライ処理のステップS501;YES)、末梢ノード装置N11へデータフレームを再送(リトライ)する。タイミング10における再送データフレームのGSとFIDとリトライIDとリトライ回数は、末梢ノード装置N5における1回目の再送(リトライ)であることから、それぞれ、図25に示すように、N1、FID1、N5、“1”となる。
図18を参照して、再送データフレームを受信した末梢ノード装置N11は、GSとFIDとの組合せが一致する登録がFIDテーブルT1にないことから(ステップS011;NO)、受信した再送データフレームのGS(N1)とFID(FID1)とリトライID(N5)とリトライ回数(“1”)とを対応付けて、図25に示すように、FIDテーブルT1に登録する(ステップS301)。
図12と図24を参照して、タイミング11において、末梢ノード装置N11は末梢ノード装置N6へ再送データフレームを送信する。タイミング11におけるデータフレームのGSとFIDとリトライIDとリトライ回数は、それぞれ、図25に示すように、N1、FID1、N5、“1”である。
また、末梢ノード装置N6のFIDテーブルT1には、(N1、FID1、N1、“1”)の登録があることから、図18と図19を参照して、末梢ノード装置N6のデータフレーム処理部33は、ステップS011の処理でYES、ステップS701の処理でNO、ステップS702の処理でNO、と判定する。つまり、末梢ノード装置N3は、受信した再送データフレーム(末梢ノード装置N5が再送した)を重複データと判定し、受信した再送データフレームを破棄する(ステップS004)。このようにして、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
上記実施形態2によれば、ノード装置1は、データフレームを受信すると、GSとFIDとの組合せと一致する登録がFIDテーブルT1に有るか否かを判定し、一致する登録がある場合に、リトライIDとリトライ回数とに基づいて、受信したデータフレームがループデータか、それとも、重複データかを判定する。
このように構成することで、重複データとループデータとを区別することが可能となる。これにより、重複データがループデータであると誤判定されることによる誤った経路変更を防止することが可能となる。したがって、誤った経路変更によるネットワークの切断やノード装置の孤立が生じるのを防止することが可能となり、適切な経路を維持することが可能となる。
また、上記実施形態2によれば、ノード装置1は、受信したデータフレームが重複データである場合には、受信したデータフレームを他のノード装置1へ送信することなく破棄する。このように構成することで、ネットワーク全体におけるトラフィックの増加を抑制することが可能となる。
また、上記実施形態2によれば、ノード装置1は、リトライ処理が発生した場合に、発生日時を示す情報などをリトライ管理テーブルT3に登録し、登録した情報と自ノードIDとを含むリトライ情報を管理サーバへ送信する。このように構成することで、ネットワーク100の各リンクの通信品質に関する情報を収集することが可能となる。そして、収集したこれらの情報に基づいて、ネットワーク100を適切に維持・管理することが可能となる。
(実施形態3)
実施形態1と2においては、受信したデータフレームの最終的な宛先が自ノード装置1の場合、すなわち、GDと自ノードIDとが一致する場合には、ノード装置1は、FIDテーブルT1への登録処理を行わないように構成した。本実施形態3においては、GDと自ノードIDとが一致する場合であっても、ノード装置1は、FIDテーブルT1への登録処理を行うように構成する。本構成は、実施形態1と2のいずれにも適用可能である。
ここで、図26を参照して、本実施形態3における中継処理の流れについて説明する。図26は、本実施形態3における中継処理のフローを説明するためのフローチャートの例の一部である。本中継処理は、データフレームの受信をトリガとして開始される。
ステップS008の処理において、データフレーム処理部33は、GDと自ノードIDとが一致するか否かを判定する(ステップS008)。すなわち、データフレーム処理部33は、受信したデータフレームの最終的な宛先が自ノード装置1か否かを判定する。
データフレーム処理部33により、GDと自ノードIDとが一致しないと判定された場合には(ステップS008;NO)、処理は実施形態1(又は2)において説明したステップS010以降の処理へと進む。
一方、GDと自ノードIDとが一致すると判定した場合には(ステップS008;YES)、データフレーム処理部33は、ヘッダとFIDテーブルT1とを比較し(ステップS901)、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあるか否かを判定する(ステップS902)。すなわち、データフレーム処理部33は、同じデータフレームを既に受信し、上位層で処理したか否かを判定する。
GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にあると判定した場合には(ステップS902;YES)、すなわち、受信したデータフレームは上位層で処理済であると判定した場合には、データフレーム処理部33は、受信したデータフレームを破棄する(ステップS004)。
一方、GDとFIDとの組合せが、ヘッダのGDとFIDとの組合せと一致する登録がFIDテーブルT1にないと判定した場合には(ステップS902;NO)、実施形態1に適用する場合には、ヘッダのGSとFIDとPathIDとを対応付けてFIDテーブルT1へ登録する(ステップS903)。実施形態2に適用する場合には、ヘッダのGSとFIDとリトライIDとリトライ回数とを対応付けてFIDテーブルT1へ登録する(ステップS903)。
そして、ステップS009の処理へと移行して、データフレーム処理部33は、受信したデータフレームを上位層へ出力し、データフレームの入力に応答して、上位層は、受信したデータフレームの処理を行う(ステップS009)。
上記実施形態3によれば、ノード装置1は、GDが自ノードIDと一致するデータフレームを受信した際も、ヘッダとFIDテーブルT1とを比較し、GSとFIDとの組合せが一致する登録がFIDテーブルT1に有るか否かを判定する。そして、GSとFIDとの組合せが一致する登録がある場合には、ノード装置1は、受信したデータフレームを破棄し、GSとFIDとの組合せが一致する登録が無い場合に、ヘッダ情報をFIDテーブルT1に登録すると共に、上位層でデータ処理を行う。このように構成することで、同じデータフレームの処理を繰り返し実行するのを防ぐことが可能となる。これにより、負荷を軽減することが可能となる。
図27は、各実施形態におけるノード装置1のハードウェア構成の例を示す図である。図2(又は図13)に示すノード装置1は、例えば、図27に示す各種ハードウェアにより実現されてもよい。図27の例では、ノード装置1は、MPU201、PHY(PHYsical layer)チップ202、およびタイマIC(Integrated Circuit)203を備える。また、ノード装置1は、DRAM(Dynamic Random Access Memory)204、フラッシュメモリ205、無線通信モジュール206、および読取装置207を備える。
MPU201とPHYチップ202の間を接続する通信インタフェースは、MII/MDIO(Media Independent Interface or Management Data Input/Output)209である。MIIとMDIOはいずれも、物理層とMAC(Media Access Control sublayer)副層との間のインタフェースである。また、MPU201とタイマIC203は、I2C/PIO(Inter-Integrated Circuit or Parallel Input/Output)バス210を介して、接続されている。そして、DRAM204とフラッシュメモリ205と無線通信モジュール206と読取装置207は、PCI(Peripheral Component Interconnect)バス211を介して、MPU201に接続されている。
MPU201は、不揮発性記憶装置の一種であるフラッシュメモリ205に格納された動作プログラムをDRAM204にロードし、DRAM204をワーキングメモリとして使いながら各種処理を実行する。MPU201は、動作プログラムを実行することで、図2(又は図13)に示す制御部30の各機能部を実現することができる。
なお、上記動作を実行するための動作プログラムを、フレキシブルディスク、CD−ROM(Compact Disk-Read Only Memory)、DVD(Digital Versatile Disk)、MO(Magnet Optical disk)などのコンピュータで読み取り可能な記録媒体208に記憶して配布し、これをノード装置1の読取装置207で読み取ってコンピュータにインストールすることにより、上述の処理を実行するように構成してもよい。さらに、インターネット上のサーバ装置が有するディスク装置等に動作プログラムを記憶しておき、PHYチップ202もしくは無線通信モジュール206を介して、ノード装置1のコンピュータに動作プログラムをダウンロード等するものとしてもよい。
なお、実施形態に応じて、DRAM204やフラッシュメモリ205以外の他の種類の記憶装置が利用されてもよい。例えば、ノード装置1は、CAM(Content Addressable Memory)、SRAM(Static Random Access Memory)、SDRAM(Synchronous Dynamic Random Access Memory)などの記憶装置を有してもよい。
図2などに示すFIDテーブルT1、ルーティングテーブルT2、リトライ管理テーブルT3は、DRAM204、フラッシュメモリ205、あるいは不図示のその他の記憶装置により実現される。また、フラッシュメモリ205は、動作プログラムだけでなく、自ノードIDや自ノード装置1の属性情報(例えば、ノード装置の種別を示す情報)も記憶している。
PHYチップ202は、有線接続における物理層の処理を行う回路である。ネットワーク100が無線ネットワークの場合には、ノード装置1はPHYチップ202を備えなくてもよい。しかし、ノード装置1と外部ネットワークとの接続のために、ノード装置1はPHYチップ202を備えていてもよい。
例えば、ノード装置1は、イーサネット(登録商標)規格にしたがった有線LANポートを備え、有線LANポートに接続されたケーブルを介して外部ネットワークのゲートウェイ装置などに接続されていてもよい。
その場合、MPU201は、イーサネットフレームを生成し、MII/MDIO209を介してPHYチップ202に出力することができる。そして、PHYチップ202は、MPU201からの出力(すなわちイーサネットフレームを表す論理信号)を、ケーブルの種類に応じた信号(つまり電気信号または光信号)に変換し、ケーブルに出力する。こうして、ノード装置1はPHYチップ202を用いて外部ネットワークにデータ(例えば、フレーム)を送信することができる。
また、PHYチップ202は、ケーブルと有線LANポートを介して外部ネットワークから入力される電気信号または光信号を、論理信号に変換し、MII/MDIO209を介してMPU201に出力することもできる。こうして、ノード装置1はPHYチップ202を用いて外部ネットワークからデータ(例えば、フレーム)を受信することができる。
タイマIC203は、設定された時間が経過するまでカウントアップ動作を行い、設定された時間が経過すると割り込み信号を出力する回路である。
無線通信モジュール206は、無線接続における物理層の処理を行うハードウェアである。無線通信モジュール206は、例えば、アンテナ、ADC(Analog-to-Digital Converter)、DAC(Digital-to-Analog Converter)、変調器、復調器、符号化器、復号器などを含む。
なお、実施形態に応じて、ノード装置1のハードウェア構成は図27とは異なっていてもよく、図27に例示した規格・種類以外のその他のハードウェアをノード装置1に適用することもできる。
例えば、図2(又は図13)に示す制御部30の各機能部は、ハードウェア回路により実現されてもよい。具体的には、MPU201の代わりに、FPGA(Field Programmable Gate Array)などのリコンフィギュラブル回路や、ASIC(Application Specific Integrated Circuit)などにより、これら図2(又は図13)に示す制御部30の各機能部が実現されてもよい。もちろん、MPU201とハードウェア回路の双方により、これらの機能部が実現されてもよい。
以上において、いくつかの実施形態について説明した。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態及び代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨及び範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態を成すことができることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。
以上の実施形態1〜3を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
リンクが存在する複数の隣接するノード装置の内のいずれかの一つからデータフレームを受信する受信手段と、
前記データフレームを一意に識別可能なフレーム識別情報と、同一の前記フレーム識別情報を有するデータフレームが重複して受信された場合に、前記重複するデータフレームの内で最初に受信したデータフレームを一意に識別可能な重複データ識別情報と、が対応付けられている識別情報管理テーブルを格納する記憶手段と、
前記受信したデータフレームの最終宛先が自ノード装置か否かを判定する第1判定手段と、
前記受信したデータフレームの最終宛先が自ノード装置ではない場合に、前記受信したデータフレームの前記フレーム識別情報と一致する登録が前記識別情報管理テーブルに有るか否かを判定する第2判定手段と、
前記第2判定手段により、前記登録が前記識別情報管理テーブルに有ると判定された場合に、前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致するか否かを判定する第3判定手段と、
前記第3判定手段により一致しないと判定された場合には、前記受信したデータフレームを破棄する破棄手段と、
前記第3判定手段により一致すると判定された場合には、前記受信したデータフレームを、該データフレームの送信先としていない他の隣接するノード装置へ再送信する再送信手段と、
を備える、
ことを特徴とするノード装置。
(付記2)
自ノード装置は、中継専用の中継ノード装置であり、
前記重複データ識別情報は、前記データフレームが最初に経由した中継ノード装置を一意に識別可能な装置識別情報である、
ことを特徴とする付記1に記載のノード装置。
(付記3)
前記第2判定手段により、前記登録が前記識別情報管理テーブルには無いと判定された場合に、前記受信したデータフレームの前記フレーム識別情報と前記重複データ識別情報とを対応付けて前記識別情報管理テーブルに登録する登録手段を、さらに、備える、
ことを特徴とする付記2に記載のノード装置。
(付記4)
前記第2判定手段により、前記登録が前記識別情報管理テーブルには無いと判定された場合に、前記受信したデータフレームの前記重複データ識別情報が設定済であるか否かを判定する第4判定手段を、さらに、備え、
前記登録手段は、
前記第4判定手段により、設定済ではないと判定された場合には、前記受信したテータフレームの前記重複データ識別情報として自ノード装置の前記装置識別情報を設定すると共に、前記受信したデータフレームの前記フレーム識別情報と自ノード装置の前記装置識別情報とを対応付けて前記識別情報管理テーブルに登録する、
ことを特徴とする付記3に記載のノード装置。
(付記5)
前記重複データ識別情報は、前記重複するデータフレームを発行するノード装置を一意に識別可能な装置識別情報と、該ノード装置が前記重複するデータフレームを発行した回数を示す再送回数情報との組である、
ことを特徴とする付記1に記載のノード装置。
(付記6)
前記第2判定手段により、前記登録が前記識別情報管理テーブルには無いと判定された場合に、前記受信したデータフレームの前記フレーム識別情報と前記重複データ識別情報とを対応付けて前記識別情報管理テーブルに登録する登録手段を、さらに、備える、
ことを特徴とする付記5に記載のノード装置。
(付記7)
前記受信したデータフレームの最終宛先が自ノード装置である場合に、前記受信したデータフレームの前記フレーム識別情報と一致する登録が前記識別情報管理テーブルに有るか否かを判定する第5判定手段と、
前記第5判定手段により、前記登録が前記識別情報管理テーブルには無いと判定された場合に、前記受信したデータフレームの少なくとも前記フレーム識別情報を前記識別情報管理テーブルに登録する第2登録手段と、
を、さらに、備え、
前記破棄手段は、前記第5判定手段により、前記登録が前記識別情報管理テーブルに有ると判定された場合に、前記受信したデータフレームを破棄する、
ことを特徴とする付記1乃至6のいずれか一に記載のノード装置。
(付記8)
送信したデータフレームの送信先の隣接するノード装置より、所定時間内に、該データフレームを受信した旨の受信通知を受信したか否か判定する第6判定手段を、さらに、備え、
前記再送信手段は、前記第6判定手段により、前記受信通知を受信できなかったと判定された場合に、前記送信したデータフレームを、送信先としていない隣接するノード装置へ再送信する、
ことを特徴とする付記1乃至7のいずれか一に記載のノード装置。
(付記9)
所定のタイミングで、前記再送信の日時を示す情報と前記再送信した隣接するノード装置を一意に識別可能な装置識別情報との組と、自ノード装置の前記装置識別情報とを含むリトライ情報を生成し、生成したリトライ情報を上位装置へ送信する通知手段を、さらに、備える、
ことを特徴とする付記8に記載のノード装置。
(付記10)
リンクが存在する複数の隣接するノード装置の内のいずれかの一つからデータフレームを受信し、
前記受信したデータフレームの最終宛先が自ノード装置か否かを判定し、
前記受信したデータフレームの最終宛先が自ノード装置ではない場合に、前記受信したデータフレームの前記フレーム識別情報と一致する登録が、前記データフレームを一意に識別可能なフレーム識別情報と、同一の前記フレーム識別情報を有するデータフレームが重複して受信された場合に、前記重複するデータフレームの内で最初に受信したデータフレームを一意に識別可能な重複データ識別情報と、が対応付けられている識別情報管理テーブルに、有るか否かを判定し、
前記登録が前記識別情報管理テーブルに有る場合に、前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致するか否かを判定し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致しない場合には、前記受信したデータフレームを破棄し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致する場合には、前記受信したデータフレームを、該データフレームの送信先としていない他の隣接するノード装置へ再送信する、
ことを特徴とするデータ中継方法。
(付記11)
ノード装置のコンピュータに、
リンクが存在する複数の隣接するノード装置の内のいずれかの一つからデータフレームを受信し、
前記受信したデータフレームの最終宛先が自ノード装置か否かを判定し、
前記受信したデータフレームの最終宛先が自ノード装置ではない場合に、前記受信したデータフレームの前記フレーム識別情報と一致する登録が、前記データフレームを一意に識別可能なフレーム識別情報と、同一の前記フレーム識別情報を有するデータフレームが重複して受信された場合に、前記重複するデータフレームの内で最初に受信したデータフレームを一意に識別可能な重複データ識別情報と、が対応付けられている識別情報管理テーブルに、有るか否かを判定し、
前記登録が前記識別情報管理テーブルに有る場合に、前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致するか否かを判定し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致しない場合には、前記受信したデータフレームを破棄し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致する場合には、前記受信したデータフレームを、該データフレームの送信先としていない他の隣接するノード装置へ再送信する、
処理を実行させる、
ことを特徴とするプログラム。
(付記12)
ノード装置のコンピュータに、
リンクが存在する複数の隣接するノード装置の内のいずれかの一つからデータフレームを受信し、
前記受信したデータフレームの最終宛先が自ノード装置か否かを判定し、
前記受信したデータフレームの最終宛先が自ノード装置ではない場合に、前記受信したデータフレームの前記フレーム識別情報と一致する登録が、前記データフレームを一意に識別可能なフレーム識別情報と、同一の前記フレーム識別情報を有するデータフレームが重複して受信された場合に、前記重複するデータフレームの内で最初に受信したデータフレームを一意に識別可能な重複データ識別情報と、が対応付けられている識別情報管理テーブルに、有るか否かを判定し、
前記登録が前記識別情報管理テーブルに有る場合に、前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致するか否かを判定し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致しない場合には、前記受信したデータフレームを破棄し、
前記受信したデータフレームの重複データ識別情報と、前記登録に対応する重複データ識別情報とが一致する場合には、前記受信したデータフレームを、該データフレームの送信先としていない他の隣接するノード装置へ再送信する、
処理を実行させるプログラムを記憶した記録媒体。