以下、実施形態について、図面を参照しながら詳細に説明する。説明の順序は次のとおりである。
まず、いくつか用語の定義をしてから、本実施形態のノード装置の構成の概要について図1を参照して説明する。次に、図1のようなコンポーネントを有する複数のノード装置を含むネットワークにおける、分散協調動作の概要を、図2A、図2Bおよび図4を参照して説明する。あわせて、図3を参照して、フレーム形式の例についても説明する。
その後、ノード装置の詳細な構成について図5と図6を参照して説明する。さらに、ノード装置が利用するデータのうち、図1では省略されているデータの具体例について、図7〜図10を参照して説明する。
そして、図11A〜図20の各フローチャートを参照して、個々のノード装置の動作の詳細を説明する。個々のノード装置の動作の説明においては、適宜図2Aまたは図4を参照して、個々のノード装置の動作と、ネットワーク全体で実現される分散協調動作との関連についても説明する。その後、本実施形態のノード装置について概括し、さらに、本実施形態の利点についていくつかの技術と対比しながら説明する。最後に、本実施形態の変形例についても説明する。
ここで、本実施形態における用語についていくつか定義する。
本実施形態では、複数のノード装置がネットワーク内に含まれる。以下では、第1のノード装置と第2のノード装置がケーブルにより直接接続されている場合、第1と第2のノード装置が「隣接している」という。また、第1のノード装置にとっての第2のノード装置を「隣接ノード装置」ということがある。同様に、第2のノード装置にとっては、第1のノード装置が「隣接ノード装置」である。
また、本実施形態では、様々なフレームが処理される。フレームは、以下のようにいくつかの観点から分類される。
フレームは、図3に示す「アドホックヘッダ」を含むか否かによって分類することができる。以下では、アドホックヘッダを含むフレームを「アドホックフレーム」という。他
方、アドホックヘッダを含まないフレームの例は、例えば、周知のイーサネット(登録商標)で利用されるイーサネットフレームである。
なお、アドホックフレームは、アドホックヘッダの後に続くイーサネットフレームを含む通常フレームと、アドホックヘッダの後にその他の特定の形式の制御データを含む制御フレームに、さらに分類することもできる。制御フレームには複数の種類があってもよいが、制御フレームの一例は、後述の「ポーズフレーム」である。
また、フレームは、ネットワーク内にブロードキャストされるブロードキャストフレームと、ユニキャストされるユニキャストフレームに分類することもできる。なお、詳しくは後述するが、ポーズフレームは、例外的に、隣接ノード装置に限定してブロードキャストされる。
以下の説明においては、必要に応じて、上記のような観点からのフレームの分類を明示する。なお、文脈から分類が明らかであるか、または分類に無関係な箇所では、簡単のために単純に「フレーム」と述べる場合もある。
図1は、ノード装置の概要を説明する構成図である。
図1に示すノード装置100は、隣接ノード装置(図1には不図示)と有線接続するための複数のポート101−1〜101−x(1<x)と、フレームのルーティングを行うルーティングエンジン102を有する。
図1のポート101−1〜101−xは、本実施形態による有線アドホックネットワーク用のポートである。なお、後述の図5では、一般的なイーサネットの仕様に則った汎用LAN(Local Area Network)ポートと区別して、図1のポート101−1〜101−xのことを「有線アドホックネットワークポート」と表記している。以後、単に「ポート」と言う場合は、本実施形態による有線アドホックネットワーク用のポートという意味である。
また、ノード装置100は、ルーティングテーブル103、ブロードキャスト管理テーブル104、およびループ検出テーブル105の各テーブルを備え、ルーティングエンジン102はこれらのテーブルを参照してルーティングを行う。また、ルーティングエンジン102は、これらのテーブルの更新も行う。
図1に示すように、本実施形態のルーティングテーブル103は、「宛先」と、ポート101−1〜101−xの各々の状態を示すx個の「ポート状態」を対応付けて記憶するテーブルである。
図1には、n個のエントリを含むルーティングテーブル103が例示されている。図11Cとともに後述するように、各エントリは、ノード装置100が受信したフレームに基づいて、ルーティングテーブル103に追加されたものである。また、図12および図13とともに後述するように、各エントリは、所定の時間アクセスされない場合にはルーティングテーブル103から削除される。
ルーティングテーブル103において、例えばi番目(1≦i≦n)のエントリでは、宛先GDiに、ポート101−1〜101−xそれぞれの状態RP1i〜RPxiが対応付けられている。
ここで、宛先GDiは、ノード装置100と同様の複数のノード装置を含む有線アドホックネットワークにおいて、フレームの宛先となるノード装置を識別する識別情報である。本実施形態では、各ノード装置に、有線アドホックネットワーク内で一意な3バイトのID(IDentification)が予め割り当てられており、以下では、ノード装置に割り当てられたIDを「ノードID」という。宛先GDiは、具体的にはノードIDである。
ノード装置100が、宛先GDiへのフレームをポート101−1〜101−xのいずれかで受信し、受信したフレームを中継しようとするとき、ルーティングエンジン102は、ルーティングテーブル103を参照する。そして、ルーティングエンジン102は、ルーティングテーブル103において宛先GDiに対応付けられた状態RP1i〜RPxiに基づいて、受信したフレームを送信(すなわち出力)するポートを選択する。
ルーティングテーブル103のi番目のエントリにおいて、j番目(1≦j≦x)のポート101−jの状態RPjiは、「U」(Used)、「E」(Empty)、「L」(Loop)、「P」(Pause)、および「D」(Down)という5つの状態のうちのいずれかである。
「U」は使用状態を示す。具体的には、宛先GDiというノードIDで識別される他のノード装置へのフレームを中継するための、ノード装置100内での送信先ポートとして、ポート101−jが実際に使われている場合、状態RPjiは「U」である。つまり、「U」状態は、「送信可能」を示す状態の例である。
「E」は未使用状態を示す。具体的には、宛先GDiというノードIDで識別される他のノード装置へのフレームを中継するための、ノード装置100内での送信先ポートとして、ポート101−jが使われたことがない場合、状態RPjiは「E」である。つまり、「E」状態は、「送信可能」を示す状態の例である。
「L」はループ状態を示す。具体的には、次の2つの条件がともに成立すると、状態RPjiは「L」に更新される。
・宛先GDiというノードIDで識別される他のノード装置へのフレームを中継するための、ノード装置100内での送信先ポートとして、かつてポート101−jが使われたことがある。
・宛先GDiというノードIDで識別される他のノード装置へとポート101−jから送信したフレームが、ネットワーク内でループしてノード装置100自身に戻ってきた(すなわち、ノード装置100で再度受信された)。
なお、状態RPjiが「L」の場合、状態RPjiは、「宛先GDiへのフレームをポート101−jから送信するとループしてしまうので、宛先GDiへのフレームはポート101−jから送信すべきではない」ということを意味している。つまり「L」状態は、「送信不可」を示す状態の例である。
「P」はポーズ状態を示す。具体的には、ポート101−jから(すなわち、ポート101−jを介して接続された不図示の隣接ノード装置から)、「ポーズ要求」を受けている場合、状態RPjiは「P」となる。なお、「ポーズ要求」とは、フレームの集中などによって処理負荷が高まったノード装置が、隣接ノード装置に対して、自ノード装置へのフレームの送信を一定期間「休止」(pause)するよう求める要求である。ポーズ要求についての詳細は図16〜図19とともに後述するが、概要を説明すれば次のとおりである。
例えば、図1のノード装置100には、ポート101−jを介して、不図示の第2のノード装置が接続されているとする。また、以下では、処理負荷が所定の基準を超えた状態を「ビジー状態」という。
第2のノード装置は、ビジー状態に陥ると、複数の隣接ノード装置の各々にポーズ要求を送信する。ポーズ要求は、具体的には、上記の一定期間の長さを指定する値を含む、「ポーズフレーム」という特定の形式のアドホックフレームにより表される。
したがって、図1のノード装置100は、ポート101−jでポーズフレームを受信し、「第2のノード装置は現在ビジー状態である」と認識する。すなわち、ノード装置100は、「ポーズフレームで指定されている上記の一定期間の間は、たとえポート101−jにフレームを送信しても、第2のノード装置は過負荷のためにフレームを処理しきれないのだから、ポート101−jにフレームを送信すべきではない」と認識する。
そして、ノード装置100のルーティングエンジン102は、上記認識に基づいて、ルーティングテーブル103においてポート101−jに対応する状態RPjiを「P」に設定する。以上から明らかなとおり、「P」状態は「送信不可」を示す状態の例である。
「D」はリンクダウン状態を示す。例えば、ポート101−jに接続されたケーブルが物理的に切断されている場合など、ケーブルを搬送される信号をポート101−jにおいて電気的に検出することができない場合、状態RPjiは「D」となる。「D」状態も、「送信不可」を示す状態の例である。
なお、「P」状態と「D」状態は、フレームの宛先とは独立した概念である。しかし、本実施形態では、ルーティングテーブル103において、ある1つのポート(例えばポート101−j)の状態RPj1〜RPjnのうち一部が「P」となり、一部が「P」以外となることもある。同様に、本実施形態では、ある1つのポート(例えばポート101−j)の状態RPj1〜RPjnのうち一部が「D」となり、一部が「D」以外となることもある。なぜなら、後述のように本実施形態では、ルーティングテーブル103のエントリの更新は、フレーム受信を契機として行われるので、各エントリの更新のタイミングに時差があるからである。
続いて、図1に示す他のテーブルについても説明する。
ブロードキャスト管理テーブル104は、「MAC−SA(Media Access Contol Source Address)」と「時刻」を対応付けて記憶するテーブルである。図1には、a個のエントリを含むブロードキャスト管理テーブル104が例示されている。
図11Bとともに後述するように、各エントリは、ノード装置100が受信したブロードキャストフレームに基づいて、ブロードキャスト管理テーブル104に追加されたものである。また、図示は省略したが、後述するように、各エントリは、所定の時間アクセスされない場合には、ブロードキャスト管理テーブル104から削除される。
ブロードキャスト管理テーブル104において、例えばi番目(1≦i≦a)のエントリでは、MACアドレスMACSAiと時刻Tiが対応付けられている。ここで、MACアドレスMACSAiは、ノード装置100が受信したブロードキャストフレームの送信元ノード装置のMACアドレスである。また、時刻Tiは、当該ブロードキャストフレームをルーティングエンジン102が処理した時刻である。
ノード装置100が、ブロードキャストフレームをポート101−1〜101−xのいずれかで受信したとき、ルーティングエンジン102はブロードキャスト管理テーブル104を参照する。そして、ルーティングエンジン102は、受信したブロードキャストフレームを破棄して輻輳を防ぐか、または、受信したブロードキャストフレームを中継する(すなわち当該ブロードキャストフレームを受信したポートとは別のポートへ送信する)かを決定する。なお、詳しくは後述するように、実施形態によっては、ループ検出テーブル105のみでもブロードキャストフレームの輻輳を防止することができる。
ループ検出テーブル105は、「送信元」と「FID(Frame IDentification)」の組に、「受信ポート番号」とポート101−1〜101−xの各々の状態を示すx個の「ポート状態」を対応付けて記憶するテーブルである。
図1には、m個のエントリを含むループ検出テーブル105が例示されている。図11Bおよび図11Cとともに後述するように、各エントリは、ノード装置100が受信したフレームに基づいて、ループ検出テーブル105に追加される。また、図14および図15とともに後述するように、各エントリは、所定の時間が経過するとループ検出テーブル105から削除される。
ループ検出テーブル105において、例えばi番目(1≦i≦m)のエントリでは、送信元GSiとFIDiの組に、受信ポート番号RCVPNiと、ポート101−1〜101−xそれぞれの状態LP1i〜LPxiとが対応付けられている。
ここで、送信元GSiは、ノード装置100と同様の複数のノード装置を含む有線アドホックネットワークにおいて、フレームの送信元であるノード装置を識別する識別情報であり、具体的にはノードIDである。また、FIDiは、送信元ノード装置(すなわちノードIDがGSiのノード装置)が、送信するフレームに割り当てた、フレームを一意に識別する識別情報である。FIDiは、例えばシーケンス番号でもよい。
ノード装置100が、ポート101−1〜101−xのいずれかでフレームを受信し、受信したフレームを中継しようとするとき、ルーティングエンジン102は、ルーティングテーブル103だけでなくループ検出テーブル105も参照する。そして、ルーティングエンジン102は、ループ検出テーブル105にも基づいて、受信したフレームを送信するポートを選択する。
ループ検出テーブル105のi番目のエントリにおける受信ポート番号RCVPNiは、i番目のエントリに対応するフレームがノード装置100において受信されたときに、当該フレームを受信したポートを示す。具体的には、送信元ノード装置(つまりGSiというノードIDで識別されるノード装置)においてFIDiというFIDが割り当てられたフレームが、ノード装置100のポート101−r(1≦r≦x)で受信された場合、受信ポート番号RCVPNiはrである。
ループ検出テーブル105のi番目のエントリにおいて、j番目(1≦j≦x)のポート101−jの状態LPjiは、「U」、「E」、または「L」という3つの状態のうちのいずれかである。
「U」は、ルーティングテーブル103に関して説明したのと同様に使用状態を示す。ループ検出テーブル105においては、具体的には、次の2つの条件が成立するとき状態LPjiは「U」である
・送信元GSiというノードIDで識別される送信元ノード装置においてFIDiというFIDが割り当てられたフレームを、かつてノード装置100が中継したことがある。
・その中継の際に、ノード装置100内での送信先ポートとしてポート101−jが使われた。
「E」は、ルーティングテーブル103に関して説明したのと同様に未使用状態を示し、ループ検出テーブル105においては、具体的には、次のような意味である。すなわち、送信元GSiというノードIDで識別される送信元ノード装置においてFIDiというFIDが割り当てられたフレームをかつてノード装置100が中継したときの、送信先ポートがポート101−jでなければ、状態LPjiは「E」である。
「L」は、ルーティングテーブル103に関して説明したのと同様にループ状態を示す。ループ検出テーブル105においては、具体的には、次の2つの条件が成立するとき状態LPjiが「L」となる。
・送信元GSiというノードIDで識別される送信元ノード装置においてFIDiというFIDが割り当てられたフレームを、ポート101−jを送信先ポートとしてノード装置100が中継したことがある。
・中継後に当該フレームが再度ノード装置100で再度受信された。
なお、ルーティングテーブル103においては、「U」状態と「E」状態は「送信可能である」つまり「送信先ポートとして選択可能である」という意味では共通である。しかし、ループ検出テーブル105では、「U」状態と「E」状態は次のように峻別される。すなわち、ループ検出テーブル105における「U」状態は、仮に今後ループが検出されることがあれば、「送信不可」を意味する「L」状態に遷移させる対象を示している。それに対し、ループ検出テーブル105における「E」状態は、仮に今後ループが検出されることがあっても、当該ループの検出の時点では依然として送信先ポートとして選択可能であることを示す。
続いて、図1と同様のコンポーネントを有する複数のノード装置を含むネットワークにおける、分散協調動作の概要について、フレーム形式の例とあわせて、図2A〜図4を参照しながら説明する。
図2Aは、本実施形態のノード装置が適用されるネットワークの例を示す図である。
図2Aの有線アドホックネットワーク200は、複数のノード装置100a〜100iを含む。有線アドホックネットワーク200においてノード装置100a〜100iは、ケーブル(例えば、銅ケーブルなどの金属線ケーブル、または光ファイバケーブル)により、物理的にはメッシュ状(換言すれば格子状)に接続されている。
もちろん、有線アドホックネットワークにおける物理的な接続トポロジは、実施形態に応じて任意であり、必ずしもメッシュ状でなくてもよい。
また、ノード装置100a〜100iの各々は、図1と同様のコンポーネントを有する。なお、図1では、ノード装置100がx個のポート101−1〜101−xを有しているが、図2Aには、具体的にはx=4の例を示してある。
例えば、ノード装置100aは、4つのポート101a−1〜101a−4を有する。他のノード装置100b〜100iについても同様である。また、互いに同様のコンポーネントには、「101−1」、「101a−1」、「101b−1」などのように、「a」や「b」などの添え字を除いて同じ参照符号を割り当て、詳しい説明を省略することがある。
図2Aに示すメッシュ状の物理的なトポロジは、具体的には、次のようなケーブル配線により実現されている。
・ノード装置100aと100dは、ポート101a−1と101d−1の間のリンク215により接続されている。
・ノード装置100aと100bは、ポート101a−4と101b−1の間のリンク216により接続されている。
・ノード装置100bと100eは、ポート101b−2と101e−2の間のリンク217により接続されている。
・ノード装置100bと100cは、ポート101b−4と101c−1の間のリンク218により接続されている。
・ノード装置100cと100fは、ポート101c−3と101f−3の間のリンク219により接続されている。
・ノード装置100dと100gは、ポート101d−2と101g−2の間のリンク221により接続されている。
・ノード装置100dと100eは、ポート101d−4と101e−1の間のリンク222により接続されている。
・ノード装置100eと100hは、ポート101e−3と101h−3の間のリンク223により接続されている。
・ノード装置100eと100fは、ポート101e−4と101f−1の間のリンク224により接続されている。
・ノード装置100fと100iは、ポート101f−4と101i−4の間のリンク225により接続されている。
・ノード装置100gと100hは、ポート101g−4と101h−1の間のリンク226により接続されている。
・ノード装置100hと100iは、ポート101h−4と101i−1の間のリンク227により接続されている。
もちろん、実施形態に応じて、図2Aに例示した以外の組み合せのポート間をケーブルで接続することで図2Aと等価なメッシュトポロジを実現することも可能である。
ところで、図2Aの例では、有線アドホックネットワーク200は孤立したネットワークではなく、LANやWAN(Wide Area Network)などの他のネットワーク(以下「外部ネットワーク」という)とも接続される。
具体的には、本実施形態のノード装置100a〜100iは、図1に示したコンポーネントだけでなく、有線アドホックネットワーク200と外部ネットワークとの接続インタフェイスとして、さらにそれぞれ汎用LANポート106a〜106iを有する。図2Aでは、汎用LANポート106a〜106iを斜線で示して、有線アドホックネットワークポート101a−1〜101i−4とは区別してある。なお、本実施形態における汎用LANポート106a〜106iは有線LANポートであるが、実施形態によっては無線LANインタフェイスを代わりに用いることもできる。
例えば、図2Aの例では、有線アドホックネットワーク200は次のようにして外部ネットワークと接続される。すなわち、リンク211を介してPC(Personal Computer)201と接続されたL2SW(Layer 2 Switch)202が、ノード装置100aと100bそれぞれの汎用LANポート106aと106bに、それぞれリンク212と213を介して接続されている。また、PC203、205、206が、ノード装置100c、100g、100hそれぞれの汎用LANポート106c、106g、106hに、それぞれリンク214、228、229を介して接続されている。
なお、L2SW202は、不図示のルータや、不図示の他のPCとさらに接続されていてもよい。また、PC203、205、および206も、不図示の他の外部ネットワークに接続されていてもよい。
また、説明の便宜上、図2Aには9個のノード装置100a〜100iを含む有線アドホックネットワーク200を例示したが、実施形態によっては、例えば数千個〜数十万個といった多数のノード装置を有線アドホックネットワークが含んでいてもよい。
例えば、いたる所に配置された多数のセンサから様々な情報を収集するためのネットワークであるセンサネットワークに、本実施形態の有線アドホックネットワークが適用されてもよい。その場合、多数のセンサに対応して、有線アドホックネットワークは、数千個〜数十万個のオーダの、多数のノード装置を含んでもよい。センサネットワークでは、例えば、画像センサ、温度センサ、湿度センサ、圧力センサ、加速度センサなど、任意の種類のセンサが利用される。
図2Aも、本実施形態による有線アドホックネットワークの、センサネットワークへの適用例の1つを示している。すなわち、図2Aにおいてノード装置100eと100iそれぞれの汎用LANポート106eと106iには、LANインタフェイスを備えたセンサ204と207が、それぞれリンク220と230を介して接続されている。センサ204と207は、感知した結果を示すデータを、LANインタフェイスを介してイーサネットフレームとして出力する。これらのセンサ204と207の種類は任意である。
図2Aに示すような本実施形態による有線アドホックネットワークを利用すると、無線通信では通信困難な環境でも有線通信ならば通信可能な場合が多いため、過酷な環境においてもセンサネットワークを構築することが可能となる。
例えば、畑や崖などの土中、水田や河川や海などの水中、建物の壁や柱などの構造物中などに、センサと、汎用LANポートを介して当該センサに接続されたノード装置とが埋め込まれてもよい。そのような場合でも、ノード装置は有線接続によって他のノード装置と確実に通信することが可能である。よって、本実施形態による有線アドホックネットワークを利用すると、土中、水中、構造物中などの、無線通信が困難な環境においても、センサネットワークを構築することが可能である。
以上、図2Aにおけるネットワーク構成を説明したので、続いて、図2Aの有線アドホックネットワーク200における分散協調動作の概要を説明する。なお、個々のノード装置100a〜100iの動作の詳細は図11A〜図20のフローチャートとともに後述する。
以下では、PC203がフレームをPC205に送信する場合を例にして、障害発生時の、有線アドホックネットワーク200におけるフレーム中継経路の切り替えについて説明する。
PC203がリンク214を介してイーサネットフレームを送信すると、ノード装置100cは、イーサネットフレームを受信し、受信したイーサネットフレームにアドホックヘッダを付加する。
そして、各ノード装置が図11A〜図20のフローチャートにしたがって動作することで実現される自律的分散協調により、アドホックフレームは、有線アドホックネットワーク200において、ノード装置100cからノード装置100gへと中継されていく。そして、ノード装置100gがアドホックフレームからアドホックヘッダを取り除く。その結果得られたイーサネットフレームは、ノード装置100gからリンク228を介してPC205へと出力される。
図2Aに示した各リンクが正常である場合、ノード装置100cからノード装置100gへの中継経路として、例えば、リンク218、216、215、および221からなる経路が選択されているとする。当該経路は、下記のような分散協調によって選択される。
PC203からフレームを受信したノード装置100cは、フレームの送信先ポートとして、リンク218を介してノード装置100bと接続されたポート101c−1を選択する。すると、ノード装置100cからフレームを受信したノード装置100bが、フレームの送信先ポートとして、リンク216を介してノード装置100aと接続されたポート101b−1を選択する。
そして、ノード装置100bからフレームを受信したノード装置100aが、フレームの送信先ポートとして、リンク215を介してノード装置100dと接続されたポート101a−1を選択する。続いて、ノード装置100aからフレームを受信したノード装置100dが、フレームの送信先ポートとして、リンク221を介してノード装置100gと接続されたポート101d−2を選択する。
ところが、あるときリンク215に物理的な障害が発生したとする。リンク215の障害発生後に、PC203が再度PC205へフレームを送信しようとすると、有線アドホックネットワーク200内での中継経路は、以下のような分散協調制御により切り替えられる。
ノード装置100cは、フレームの送信先ポートとして正常時と同様にポート101c−1を選択し、ノード装置100bも、フレームの送信先ポートとして正常時と同様にポート101b−1を選択する。すると、ノード装置100aがフレームを受信する。
しかし、図2Aに示すように、ノード装置100aは、有線アドホックネットワーク200内においてノード装置100bおよび100dという2つのノード装置とだけ接続されており、ノード装置100dとの間のリンク215には障害が発生している。したがって、ノード装置100aは、リンク216を介してノード装置100bから受信したフレームを、正常なリンクを介して、ノード装置100b以外の有線アドホックネットワーク200内のノード装置に送信することができない。
そこで、ノード装置100aは、ノード装置100a自身からフレームを転送することができないことを通知するために、リンク216を介してフレームをノード装置100bに返送する。すると、ノード装置100bは、ノード装置100b自身が送信したフレームを受信する。
よって、ノード装置100bは、ルーティングテーブル103においてノード装置100gに対応付けられたポート状態情報ではポート101b−1は「L」状態(すなわちループ状態)であることを認識する。すなわちノード装置100bは、「有線アドホックネットワーク200内での最終的な宛先がノード装置100gであるフレームを中継する際には、ノード装置100aと接続されたポート101b−1へフレームを送信すべきではない」と認識する。
上記の認識にしたがい、ノード装置100bは、フレームの送信先ポートとして利用可能な、ポート101b−1以外の正常なポートを探す。この場合、正常なリンク217を介してノード装置100eと接続されたポート101b−2が見つかる。
よって、ノード装置100bは、ノード装置100aから戻されたフレームを、今度はポート101b−2へ送信する。
すると、ノード装置100eがフレームを受信する。図2Aの例では、ノード装置100eに接続されている各リンクは正常である。よって、ノード装置100eは、例えば、リンク223を介してノード装置100hと接続されているポート101e−3を、フレームの送信先ポートとして選択することができる。
この選択の結果、フレームは、ポート101e−3から送信され、リンク223を介してノード装置100hで受信される。すると、ノード装置100hは、正常なリンク226を介してノード装置100gと接続されたポート101h−1を選択し、ポート101h−1からフレームを送信する。
その結果、ノード装置100gはフレームを受信することができる。このように、今まで使用されていた経路上のリンク215に障害が発生した場合であっても、有線アドホックネットワーク200内の各ノード装置の分散協調によって、自動的に経路の切り替えが行われる。
なお、図1に示すようにルーティングテーブル103は宛先ごとにエントリを有しているので、フレームの宛先によってはノード装置100bがポート101b−1を送信先ポートとして選択する場合もある。つまり、上記のようにノード装置100bにおいて、ノード装置100gに対応してポート101b−1が「L」状態と認識された場合であっても、ノード装置100bは、ノード装置100a宛てのフレームをポート101b−1から送信することができる。このように本実施形態によれば、あるポートからのフレームの送信が可能か否かは、フレームの宛先に依存して管理される。
続いて、図2Bを参照して、以上説明した経路の切り替えを別の観点から説明する。
図2Bは障害発生時の代替経路探索を説明する概念図である。図2Bには、上記の例において有線アドホックネットワーク200内における送信元であるノード装置100cをルートノードとし、有線アドホックネットワーク200内における送信先であるノード装置100gをリーフノードとする探索木300が示してある。
探索木300における、あるノードを便宜的に「第1のノード」ということにし、第1のノードに相当する有線アドホックネットワーク200内のノード装置を「第1のノード装置」ということにする。また、第1のノード装置のルーティングテーブル103において、宛先であるノード装置100gに対応するエントリで、他のノード装置(便宜的に「第2のノード装置」という)の状態が「U」状態または「E」状態であるとする。このとき、探索木300において、第1のノードは第2のノード装置に対応する子ノードを有する。
図2Aに関して説明した、リンク215の障害発生前の中継経路は、有線アドホックネットワーク200における分散協調の結果として、図2Bの探索経路301に対応して見出された経路である。探索経路301は、探索木300におけるルートノードであるノード装置100cから、ノード装置100b、100a、および100dを経由して、探索木300におけるリーフノードであるノード装置100gにいたる経路である。
また、図2Aに関して説明した、リンク215に障害が発生したときの経路の切り替え(すなわち代替経路探索)は、図2Bの探索経路302に対応する。探索経路302は図2Bに示すようにバックトラック303を含む。
すなわち、「図2Aに関して説明した経路の切り替えは、有線アドホックネットワーク200全体として、探索木300におけるバックトラック303を含む深さ優先探索が行われることに相当する」と見なせる。バックトラック303を含む探索経路302が、リーフノードであるノード装置100gにいたると、探索は成功し、有線アドホックネットワーク200におけるフレームの中継経路が確立される。
探索木300においてノード装置100aでバックトラック303が生じているのは、図2Aの説明においてノード装置100aがフレームをノード装置100bに返送することに対応する。そして、探索木300の探索経路302により最終的に見つかった、探索木300におけるルートノードからリーフノードへの経路が、有線アドホックネットワーク200におけるノード装置100cからノード装置100gへの新たなフレーム中継経路に相当する。つまり、図2Bに示すように、ノード装置100c、100b、100e、100h、100gを通る経路が、新たなフレーム中継経路として見つかる。
以上の説明から理解されるように、送信元のノード装置100cから送信先のノード装置100gまでの経路が有線アドホックネットワーク200中に1つでも存在する限り、必ず、深さ優先探索の結果として、経路が発見される。
続いて、図2Aにおける有線アドホックネットワーク200の内側と外側でのフレームの形式の違いについて、図3を参照して説明する。図3は、フレームの形式を説明する図である。なお、本実施形態による「アドホックフレーム」は、有線アドホックネットワーク内のノード装置間で送受信されるフレームである。
図3に示すように、アドホックフレーム400は、一般的なイーサネットフレーム420の前に、本実施形態で定義される特定の形式のヘッダである「アドホックヘッダ」が付加された形式のフレームである。換言すれば、アドホックヘッダ410は、外部ネットワークであるイーサネットと、本実施形態の有線アドホックネットワークとのインタフェイスとして働く情報である。
本実施形態のアドホックヘッダ410は、図3に示すように14バイトであり、GD411、GS412、タイプ413、FID414、TTL415、長さ416、FCS417の各フィールドを含む。また、詳しくは後述するが、アドホックヘッダ410は、有線アドホックネットワーク内のノード装置により付与される。なお、以下では表記の簡単化のため、例えば「GDフィールド」を単に「GD」のように表記することがある。
3バイトのGD(Global Destination)411には、有線アドホックネットワーク内でのフレームの送信元のノード装置を、有線アドホックネットワーク内で一意に識別するための識別情報(例えばノードID)が指定される。また、3バイトのGS(Global Source)412には、有線アドホックネットワーク内でのフレームの送信先のノード装置を、有線アドホックネットワーク内で一意に識別するための識別情報(例えばノードID)が指定される。
例えば、図2Aの例で、PC203からPC205へのフレームが有線アドホックネットワーク200を経由して送信される場合、有線アドホックネットワーク200内での送信元のノード装置は、PC203と接続されたノード装置100cである。そして、有線アドホックネットワーク200内での送信先のノード装置は、PC205と接続されたノード装置100gである。
したがって、この場合、有線アドホックネットワーク200内で送信されるアドホックフレーム400では、ノード装置100cのノードIDがGD411に指定されている。また、GS412には、ノード装置100gのノードIDが指定されている。
GD411およびGS412に指定される値は、上記のように、例えば、予め各ノード装置に割り当てられたノードIDであり、ノードIDは識別番号でもよい。あるいは、有線アドホックネットワーク内の各ノード装置が同一ベンダの製品であれば、ノード装置のMACアドレスの下位3バイトを、GD411およびGS412用の識別情報として用いることもできる。なぜなら、MACアドレスの上位3バイトはOUI(Organizationally
Unique Identifier)であり、下位3バイトはベンダ内で一意であるためである。
なお、「GD」および「GS」という名称における「グローバル」という語の含意を、図2Aの例に即して説明すると、次のとおりである。
有線アドホックネットワーク200内をノード装置100cからノード装置100gへとアドホックフレーム400が送信されるとき、ノード装置100cからの直接の送信先は、ノード装置100cに隣接するノード装置(例えばノード装置100b)である。そこで、直接の送信先であるノード装置100bと、最終的な送信先であるノード装置100gを明示的に区別する場合には、有線アドホックネットワーク200内での最終的な送信先であるノード装置100gを「グローバルな送信先」という。そして、ノード装置100cと直接ケーブルで接続された、ノード装置100cに隣接するノード装置100bを「ローカルな送信先」という。
したがって、ノード装置100bにとっては、ノード装置100cは、グローバルな送信元でもあり、かつローカルな送信元でもある。また、ノード装置100gにとっては、ノード装置100cは、グローバルな送信元ではあるが、(直接ノード装置100gと100cが接続されているわけではないので)ローカルな送信元ではない。なお、図2Aからも明らかなように、有線アドホックネットワークにおいては、ローカルな送信先はフレームの送信先のポートと1対1に対応し、ローカルな送信元はフレームを受信したポートと1対1に対応する。
ここで図3の説明に戻ると、4ビットのタイプ413には、アドホックフレーム400のタイプ(種別)を識別する値が指定される。例えば、実施形態に応じて、下記に例示するようないくつかのタイプを識別する値が、タイプ413に指定される。
・通常フレーム(アドホックヘッダ410に続いて、イーサネットフレーム420を含むアドホックフレーム400の一種)
・ポーズフレーム(アドホックヘッダ410に続いて、イーサネットフレーム420ではない所定形式のデータを含むアドホックフレームの一種)
・その他のいくつかの種類の制御フレーム(アドホックヘッダ410に続いて、イーサネットフレーム420ではない所定形式のデータを含むアドホックフレームの一種)
・ノード装置が汎用LANポートを介して受け取ったブロードキャストフレーム(アドホックヘッダ410に続いて、イーサネットフレーム420を含むアドホックフレーム400の一種)
・ノード装置自身に起因するブロードキャストフレーム(アドホックヘッダ410に続いて、イーサネットフレーム420を含むアドホックフレーム400の一種)
また、12ビットのFID(Frame Identification)414には、GS412の値で識別される送信元のノード装置がアドホックフレーム400に割り当てた識別情報が指定される。FID414に指定される値は、例えば、ノード装置が不図示の内蔵カウンタ回路を用いて生成するシーケンス番号でもよい。
また、2バイトのTTL(Time To Live)415には、アドホックフレーム400の有効期間が、有線アドホックネットワーク内でのホップ数によって指定される。アドホックフレーム400が有線アドホックネットワーク内でホップするたびに、TTL415の値は、ノード装置によりカウントダウンされる。
TTL415の初期値(すなわち、GS412の値で識別される送信元のノード装置により割り当てられる値)は、本実施形態では、2バイトすべてのビットが「1」となる値(すなわち65535)である。このように大きな値がTTL415の初期値として設定されるため、本実施形態は、数十万のノード装置を含む有線アドホックネットワークにも好適に適用することができる。もちろん、実施形態に応じて、TTL415の初期値は任意である。
2バイトの長さ416には、アドホックヘッダ410以外の部分の長さ(例えば、図3に例示したアドホックフレーム400の場合はイーサネットフレーム420の長さ)をバイト単位で数えた値が指定される。
また、2バイトのFCS(Frame Check Sequence)417は、アドホックヘッダ410の、GD411から長さ416までの各フィールドから得られる、CRC(Cyclic Redundancy Check)コードなどの、誤り検出符号が指定される。
イーサネットフレーム420は、以下の各フィールドを含む。
・6バイトのMAC−DA(Media Access Control Destination Address)421
・6バイトのMAC−SA(Media Access Control Source Address)422
・2バイトのタイプ/長さ423
・46〜1500バイトの可変長のL3(Layer 3)パケット424
・4バイトのFCS425
イーサネットフレーム420の形式は周知なので詳しい説明は省略するが、例えば、図2Aの例で、有線アドホックネットワーク200を経由してPC203からPC205へフレームが送信される場合の具体例を説明すると、次のとおりである。
すなわち、PC203では、PC205のMACアドレスをMAC−DA421に指定し、PC203自身のMACアドレスをMAC−SA422に指定したイーサネットフレーム420を生成し、リンク214を介してノード装置100cに送信する。すると、ノード装置100cが、上記で説明したようなアドホックヘッダ410をイーサネットフレーム420の前に付与してアドホックフレーム400を作成する。
アドホックフレーム400は、有線アドホックネットワーク200内でノード装置100gへと送信され、ノード装置100gは、アドホックヘッダ410を除くイーサネットフレーム420を、リンク228を介してPC205に出力する。
なお、アドホックヘッダ410におけるタイプ413に、ポーズフレームやその他の制御フレームを示す値が指定されている場合、アドホックフレームは、アドホックヘッダ410の後に、イーサネットフレーム420以外の所定の形式のペイロードを含む。
続いて、図4を参照して、ブロードキャストフレームが送信されたときの、本実施形態の有線アドホックネットワーク全体の振る舞いについて説明する。図4は、ブロードキャストフレームの輻輳が防止されることを説明する図である。
図4の有線アドホックネットワーク250は、それぞれ図1のノード装置100と同様の各コンポーネントを有する複数のノード装置100p〜100tを含む。有線アドホックネットワーク250内のノード装置間は、次のように物理的に接続されている。
・ノード装置100pはノード装置100qと接続されている。
・ノード装置100qは、上記のノード装置100pに加えて、さらにノード装置100rおよび100sとも接続されている。
・ノード装置100rは、上記のノード装置100qに加えて、さらにノード装置100sおよび100tとも接続されている。
・ノード装置100sは、上記のノード装置100qと100rに加えて、さらにノー
ド装置100tとも接続されている。
・ノード装置100tは、上記のとおり、ノード装置100rおよび100sと接続されている。
例えば以上のような物理的トポロジの有線アドホックネットワーク250において、ノード装置100pからブロードキャストフレームが送信されたとする。なお、「ブロードキャストフレーム」とは、MAC−DA421にブロードキャストアドレス(つまり全ビットの値が1であるアドレス)が指定されている、イーサネットフレームまたはアドホックフレームである。
例えば、ノード装置100pは、図4には不図示の外部機器(PCまたはセンサなど)と汎用LANポートを介して接続されている。そして、当該外部機器が、MAC−DA421にブロードキャストアドレスを指定したイーサネットフレーム420を、ノード装置100pに送信する。
すると、ノード装置100pは、アドホックヘッダ410をイーサネットフレーム420の前に付与してアドホックフレーム400を作成する。ここで作成されるアドホックフレーム400は、ブロードキャストフレームである。ノード装置100pは、作成したアドホックフレーム400を、有線アドホックネットワーク250内にブロードキャストするために、ステップS101でノード装置100qに送信する。
すると、ノード装置100qは、ステップS102でブロードキャストフレームをノード装置100rに送信するとともに、ステップS103でブロードキャストフレームをノード装置100sに送信する。
また、ブロードキャストフレームをノード装置100qから受信したノード装置100rは、ステップS104でブロードキャストフレームをノード装置100sに送信する。しかし、ノード装置100sは、既にステップS103でノード装置100qからブロードキャストフレームを受信しているので、ステップS104でノード装置100rから受信したブロードキャストフレームを破棄する。
具体的には、ノード装置100sは、ステップS103で受信したブロードキャストフレームのMAC−SA422の値を、ステップS103の受信処理を行った時刻と対応付けて、図1のブロードキャスト管理テーブル104に記憶している。また、ステップS103とS104はほとんど同時に実行される。
したがって、ノード装置100sは、ステップS104でブロードキャストフレームを受信すると、受信したブロードキャストフレームのMAC−SA422の値をキーにしてブロードキャスト管理テーブル104を検索し、対応付けられた時刻を得る。そして、ステップS104を実行している現在の時刻と、得られた時刻との差が所定の時間よりも短い場合、ノード装置100sは、ステップS104で受信したブロードキャストフレームを破棄する。
また、ノード装置100sは、ステップS105として示すように、ステップS103でノード装置100qから受信したブロードキャストフレームを、ノード装置100rに送信する。しかし、ノード装置100rは、ステップS102でノード装置100qからブロードキャストフレームを受信済みであり、ステップS104でブロードキャストフレームを送信済みである。よって、ノード装置100rは、ノード装置100sからステップS105で受信したブロードキャストフレームは破棄する。ノード装置100rによる破棄は、具体的には次のように実現される。
ノード装置100rは、ステップS104で既に、ブロードキャストフレームをノード装置100sに送信している。よって、ノード装置100rは、ブロードキャストフレームのGS412の値とFID414の値を含むエントリを図1のループ検出テーブル105に有する。
ステップS105においてノード装置100rは、ノード装置100sから受信したブロードキャストフレームのGS412の値とFID414の値を検索キーにしてループ検出テーブル105を検索する。すると、ノード装置100rは、検索キーに一致するエントリが存在することを確認する。つまりノード装置100rは、「ステップS104でノード装置100r自身が送信したブロードキャストフレームが、有線アドホックネットワーク250内でループして、ノード装置100r自身に戻ってきた」と認識する。この認識の結果、ステップS105ではノード装置100rが、ノード装置100sから受信したブロードキャストフレームを破棄する。
なお、実施形態によっては、ステップS104の受信よりもステップS105の送信が先に行われる場合もありうるが、その場合ノード装置100sは、ループ検出テーブル105に基づいてブロードキャストフレームを破棄する。
また、ノード装置100rは、ステップS106として示すように、ステップS102でノード装置100qから受信したブロードキャストフレームを、ノード装置100tにも送信する。
そして、ノード装置100sは、ステップS107として示すように、ステップS103でノード装置100qから受信したブロードキャストフレームを、ノード装置100tにも送信する。しかし、ノード装置100tはステップS106で既にブロードキャストフレームを受信している。よって、ステップS104におけるノード装置100sと同様に、ノード装置100tはステップS107において、ブロードキャスト管理テーブル104を参照して、ノード装置100sから受信したブロードキャストフレームを破棄する。
また、ノード装置100tは、ステップS108として示すように、ステップS106でノード装置100rから受信したブロードキャストフレームを、ノード装置100sに送信する。しかし、ノード装置100sは、ステップS105およびS107でブロードキャストフレームを送信済みである。よって、ステップS105におけるノード装置100rと同様に、ノード装置100sはステップS108において、ループ検出テーブル105を参照して、ノード装置100tから受信したブロードキャストフレームを破棄する。
実施形態によっては、ステップS107の送信よりもステップS108の受信の方が先に行われるかもしれない。しかし、その場合も、ノード装置100sはステップS105で既にブロードキャストフレームを送信しているので、ループ検出テーブル105に基づいて適切にノード装置100tからのブロードキャストフレームを破棄することができる。
以上のようにして本実施形態によれば、個々のノード装置が適宜ブロードキャスト管理テーブル104またはループ検出テーブル105を参照して、受信したブロードキャストフレームを破棄するか否かを判断する。そして、個々のノード装置は、ブロードキャストフレームを破棄しない場合にのみ、隣接ノード装置へとブロードキャストフレームを送信する。
その結果、ブロードキャストフレームは、有線アドホックネットワーク250内の全ノード装置に届く。しかも、ブロードキャストフレームが無限に有線アドホックネットワーク250内をループし続けるという事態(すなわちブロードキャストフレームの輻輳)は防止される。輻輳の防止は、有線アドホックネットワーク250内の各ノード装置による分散協調の結果である。
以上、図1の各コンポーネントを有するノード装置を複数含む有線アドホックネットワークにおける分散協調の概要について、図2A〜図4を参照して説明した。以下では、上記のような分散協調を実現するための、個々のノード装置の具体的な構成および動作を詳しく説明する。
図5は、ノード装置のハードウェア構成図である。図5は、図1のノード装置100を実現する具体的なハードウェア構成例を示している。
図5のノード装置100は、図5には不図示の隣接ノード装置と有線接続するための複数の有線アドホックネットワークポート101−1〜101−x(図1では単に「ポート」と表記している)を備える。また、図5のノード装置100は、図5には不図示の外部機器(例えばPC、L2SW、センサなど)と有線接続するための、図2Aに例示した汎用LANポート106a〜106iと同様の、汎用LANポート106を備える。
さらに、図5のノード装置100は、有線アドホックネットワークポート101−1〜101−xのそれぞれに接続された、複数のPHY(PHYsical layer)チップ111−1〜111−xを備える。また、ノード装置100は、汎用LANポート106と接続されたL2SW(Layer 2 Switch)部112を備える。
また、ノード装置100は、図1のルーティングエンジン102を実現するFPGA(Field Programmable Gate Array)113を備え、さらにMPU(MicroProcessing Unit)114と各種記憶装置も備えている。
具体的には、ノード装置100は、FPGA113からアクセス可能な、CAM(Content Addressable Memory)115と、SRAM(Static Random Access Memory)116と、SDRAM(Synchronous Dynamic Random Access Memory)117を備える。なお、本実施形態では、CAM115の検索結果として得られるアドレスは、SRAM116のアドレスである。また、図1のルーティングテーブル103、ブロードキャスト管理テーブル104、およびループ検出テーブル105は、本実施形態では、CAM115とSRAM116により実現される。
また、ノード装置100は、MPU114からアクセス可能な、DDR(Double Data Rate)2・SDRAM118とフラッシュメモリ119を備える。不揮発性メモリの一種であるフラッシュメモリ119には、例えば、ノード装置100自身のノードID、ノード装置100自身のMACアドレス、MPU114が実行するファームウェアプログラムなどが記憶されている。DDR2・SDRAM118は、MPU114がファームウェアプログラムを実行するときのワーキングエリアとして使われる。
また、ノード装置100はさらに、L2SW部112と接続されたPHYチップ120を備えている。
そして、PHYチップ111−1〜111−xの各々は、物理層とMAC副層の間のインタフェイスであるMII(Media Independent Interface)121−1〜121−xにより、それぞれFPGA113と接続されている。また、L2SW部112とFPGA113の間も、MII122により接続されている。
FPGA113とMPU114の間は、PCI(Peripheral Component Interconnect)バス123で接続されるとともに、MII124によっても接続されている。L2SW部112に接続されたPHYチップ120は、MII125によってMPU114に接続されている。
本実施形態では、MII124によってFPGA113と接続されるMPU114の内部接続ポート114aと、MII125によってPHYチップ120と接続されるMPU114の内部接続ポート114bには、それぞれMACアドレスが割り当てられている。
なお、ノード装置100内でのフレームの転送経路は、以下のように様々である。
(1)有線アドホックネットワークポート101−i(1≦i≦x)で受信されたフレームが、PHYチップ111−iとMII121−iを介してFPGA113に入力される。そして、フレームは、FPGA113からMII121−j(1≦j≦x)を介してPHYチップ111−jへ出力され、有線アドホックネットワークポート101−jから送信される。
(2)有線アドホックネットワークポート101−i(1≦i≦x)で受信されたフレームが、PHYチップ111−iとMII121−iを介してFPGA113に入力される。そして、フレームは、MII122を介してL2SW部112に出力され、汎用LANポート106から送信される。
(3)有線アドホックネットワークポート101−i(1≦i≦x)で受信されたフレームが、PHYチップ111−iとMII121−iを介してFPGA113に入力される。そして、フレームは、MII124を介してMPU114に出力され、MPU114で処理される。
(4)汎用LANポート106で受信されたフレームが、L2SW部112とMII122を介してFPGA113に入力される。そして、フレームは、FPGA113からMII121−j(1≦j≦x)を介してPHYチップ111−jへ出力され、有線アドホックネットワークポート101−jから送信される。
(5)汎用LANポート106で受信されたフレームが、L2SW部112とPHYチップ120とMII125を介してMPU114に入力され、MPU114で処理される。
(6)MPU114がフレームを生成し、MII124を介してFPGA113に出力する。そして、フレームは、FPGA113からMII121−j(1≦j≦x)を介してPHYチップ111−jへ出力され、有線アドホックネットワークポート101−jから送信される。
(7)MPU114がフレームを生成し、MII125を介してPHYチップ120に出力する。そして、フレームは、PHYチップ120からL2SW部112に出力され、さらに汎用LANポート106から送信される。
なお、L2SW部112は、上記(7)の転送経路で受け取ったフレームからMPU114の内部接続ポート114bのMACアドレスを学習することができる。したがって、L2SW部112は、汎用LANポート106で受信されたフレームのMAC−DA421の値が内部接続ポート114bのMACアドレスと一致すれば、上記(5)の転送経路によりフレームをPHYチップ120に出力する。他方、L2SW部112は、汎用LANポート106で受信されたフレームのMAC−DA421の値が内部接続ポート114bのMACアドレスと異なれば、上記(4)の転送経路によりフレームをFPGA113に出力する。
続いて、図5の各種ハードウェアを有するノード装置100の機能について説明する。
図6は、ノード装置の機能構成図である。なお、図6には、各機能ブロックと図5のハードウェアとの関連を破線で示してあり、汎用LANポート106に関する部分は省略してある。
図6に示すように、ノード装置100は、アドホックフレーム400を受信する受信部131を備える。具体的には、ノード装置100の複数の隣接ノード装置(図6には不図示)から、それぞれアドホックフレーム400を受信する複数の受信ポート132−1〜132−xを、受信部131は含む。
なお、i番目の受信ポート132−i(1≦i≦x)は、有線アドホックネットワークポート101−iとPHYチップ111−iにより実現される。図6では、図示の便宜上、有線アドホックネットワークポート101−1〜101−xをまとめて「ポート101」と表してあり、PHYチップ111−1〜111−xをまとめて「PHYチップ111」と表してある。
また、ノード装置100は、受信部131が受信したアドホックフレーム400を、タイプや宛先などの情報に応じて分類する受信フレーム制御部133を備える。
また、ノード装置100は、ノード装置100自身を宛先とするアドホックフレーム400を処理する上位層処理部134を備える。なお「上位層」とは、アドホックフレーム400が規定されるMAC副層よりも上位の層という意味である。
受信部131が受信したアドホックフレーム400のGD411の値が、ノード装置100自身のノードIDと一致する場合、受信フレーム制御部133はアドホックフレーム400を上位層処理部134に出力する。そして、上位層処理部134は、アドホックフレーム400からイーサネットフレーム420を取り出して処理する。上位層処理部134は、MPU114、DDR2・SDRAM118、およびフラッシュメモリ119により実現される。
また、ノード装置100は、CAM115とSRAM116により実現されるテーブル格納部135を備える。テーブル格納部135には、図1のルーティングテーブル103、ブロードキャスト管理テーブル104、およびループ検出テーブル105が格納される。また、図7〜図9とともに後述する各テーブルも、テーブル格納部135に格納される。
ノード装置100はさらに、テーブル格納部135に格納される各種テーブルのエントリを作成・更新・削除することで、各種テーブルの内容を制御するテーブル制御部136を備える。テーブル制御部136は、具体的には、CAM115の検索および検索結果として得られたSRAM116のアドレスへのアクセスを行うことができる。
また、ノード装置100はさらに、ポート監視部137、ポート選択部138、タイマ139、および送信フレーム制御部140を備えている(なお、これら各部の機能は後述する)。
テーブル制御部136は、受信フレーム制御部133、ポート監視部137、ポート選択部138、タイマ139、および送信フレーム制御部140から与えられる制御情報にしたがって各種テーブルの内容を制御する。具体的な制御は、図11A〜図20のフローチャートとともに後述する。
受信フレーム制御部133、テーブル制御部136、ポート監視部137、ポート選択部138、タイマ139、および送信フレーム制御部140は、本実施形態ではFPGA113により実現される。
ノード装置100はさらに、アドホックフレーム400を送信する送信部141を備える。
具体的には、送信部141は、アドホックフレーム400をバッファリングするバッファ部142を含む。バッファ部142は、例えばSDRAM117により実現されてもよい。バッファ部142は、各送信ポート143−1〜143−xに対応してエリアがセグメント化されていてもよい。
なお、実施形態によっては、さらに受信部131が受信用の別のバッファ部を有していてもよい。
また、ノード装置100の隣接ノード装置(図6には不図示)へ、それぞれアドホックフレーム400を送信する複数の送信ポート143−1〜143−xを、送信部141は含む。送信ポート143−1〜143−xは、バッファ部142にバッファリングされたアドホックフレーム400を読み出し、図6には不図示の隣接ノード装置へ、読み出したアドホックフレーム400を送信する。
なお、i番目の送信ポート143−i(1≦i≦x)は、有線アドホックネットワークポート101−iとPHYチップ111−iにより実現される。つまり、受信ポート132−iと送信ポート143−iを実現するハードウェアは共通である。
ここで、上記では説明を省略した、ポート監視部137、ポート選択部138、タイマ139、および送信フレーム制御部140の機能について説明する。
ポート監視部137は、受信部131の各受信ポート132−1〜132−x、送信部141のバッファ部142、および送信部141の各送信ポート143−1〜143−xそれぞれの状態を監視する。
例えば、PHYチップ111−iは、有線アドホックネットワークポート101−iに接続されたリンクがダウンしているか否かを検出し、検出結果をFPGA113(あるいはFPGA113からアクセス可能な所定のレジスタなど)に出力してもよい。FPGA113により実現されるポート監視部137は、PHYチップ111−iから出力された検出結果を監視することで、受信ポート132−iおよび送信ポート143−iがリンクダウン状態か否かを監視する。
また、ポート監視部137は、バッファ部142の使用率を監視することで、ノード装置100にフレームが過度に集中していないか、すなわち、ノード装置100がビジー状態に陥っていないかを監視する。
ポート選択部138は、テーブル格納部135に格納されているテーブルを参照して、受信フレーム制御部133から出力されたフレームの送信先ポートを選択する。そして、ポート選択部138は、選択したポートを送信フレーム制御部140に指示するとともに、フレームを送信フレーム制御部140に出力する。
なお、ポート選択部138は、テーブル制御部136にCAM115を検索させてSRAM116のアドレスを得ることができ、得たアドレスを使って直接SRAM116にアクセスしてデータの参照あるいは更新をすることができる。
タイマ139は、各種テーブルにおける各エントリのエージングに利用される時刻情報をテーブル制御部136に通知する。
送信フレーム制御部140は、フレームをバッファ部142に出力する。また、送信フレーム制御部140は、バッファ部142に記憶されたフレームを、ポート選択部138が選択した送信ポート(送信ポート143−1〜143−xのいずれか)から送信するための制御を行う。
以上、図5と図6を参照して、ノード装置100のハードウェア構成と機能ブロック構成を説明したので、続いて、図1には不図示のその他のデータについて、図7〜図10を参照して説明する。
図7は、ポーズ状態テーブルの例を示す図である。図7のポーズ状態テーブル151は、例えば、図6のテーブル格納部135に格納される。ポーズ状態テーブル151に関する詳しい処理は、図11Aおよび図16とともに後述する。
ポーズ状態テーブル151は、x個のポート101−1〜101−xのそれぞれに対応するx個のエントリを有する。例えば、i番目(1≦i≦x)のポート101−iに対応するエントリでは、以下の3つの情報が対応付けられている。
・ポート101−iを識別する識別情報としての、ポート101−iのポート番号PNi
・ポート101−iを介して直接接続されている隣接ノード装置から、ポーズ要求を受けているか否かを示すポーズ状態PSi
・カウンタCounti
なお、ポート101−iを介して直接接続されている隣接ノード装置からポーズ要求を受けており、ポーズ要求で指定された期間がまだ経過していない場合は、ポーズ状態PSiの値は「P」(Pause)である。
他方、ポート101−iを介して直接接続されている隣接ノード装置からポーズ要求を受けていない場合は、ポーズ状態PSiの値は「N」(Normal)である。また、ポーズ要求を解除する通知を受けた場合にもポーズ状態PSiの値は「N」となり、ポーズ要求で指定された期間が経過した後にもポーズ状態PSiの値は「N」となる。ポーズ状態PSiは2値なので、1ビットで表すことができる。
また、カウンタCountiは、ポート101−iを介して直接接続されている隣接ノード装置からポーズ要求を受けたときに、ポーズフレームで指定されている値に設定され、その後カウントダウンされる。
図8は、ポートリンク状態テーブルの例を示す図である。図8のポートリンク状態テーブル152は、例えば、図6のテーブル格納部135に格納される。ポートリンク状態テーブル152に関する詳しい処理は、図20とともに後述する。
ポートリンク状態テーブル152は、x個のポート101−1〜101−xのそれぞれに対応するx個のエントリを有する。例えば、i番目(1≦i≦x)のポート101−iに対応するエントリでは、ポート101−iのポート番号PNiと、ポート101−iに接続されたリンクが通信可能な状態であるか否かを示すリンク状態Liが対応付けられている。
なお、ポート101−iに接続されたリンクが通信可能な状態であれば、リンク状態Liの値は「C」(Connected)であり、ポート101−iに接続されたリンクがダウンしており通信不能な状態であれば、リンク状態Liの値は「D」(Down)である。リンク状態Liは2値なので、1ビットで表すことができる。
図9は、MACテーブルの例を示す図である。図9のMACテーブル153は、例えば、図6のテーブル格納部135に格納される。
MACテーブル153の1つのエントリは、有線アドホックネットワーク内の1つのノード装置に対応する。図9には、b個のエントリを有するMACテーブル153が例示されている。例えば、MACテーブル153のi番目(1≦i≦b)のエントリでは、次の2つの情報が対応付けられている。
・有線アドホックネットワーク内のあるノード装置に接続された外部機器(例えばPCやセンサなど)のMACアドレスMACi
・MACアドレスMACiを有する上記外部機器が接続されている上記ノード装置に割り当てられている、有線アドホックネットワーク内で一意なノードIDであるNIDi
ノード装置100は、アドホックフレーム400を受信すると、MAC−SA422とGS412の組を学習する。
すなわち、テーブル制御部136は、受信したアドホックフレーム400におけるMAC−SA422とGS412の値に合致するエントリがMACテーブル153に存在するか否かを判断する。そして、もしMAC−SA422とGS412の値に合致するエントリが存在しなければ、テーブル制御部136は、MAC−SA422の値とGS412の値を対応付ける新たなエントリを作成して、MACテーブル153に追加する。
また、ノード装置100は、汎用LANポート106を介して接続された第1の外部機器からイーサネットフレーム420を受信すると、MAC−DA421の値を検索キーにしてMACテーブル153を検索する。
検索の結果エントリが見つかれば、ノード装置100は、見つかったエントリに含まれるノードIDの値をGD411に設定したアドホックヘッダ410を作成して、イーサネットフレーム420の前に付加する。つまり、MAC−DA421の値で識別される第2の外部機器と接続された、有線アドホックネットワーク内の他のノード装置のノードIDを、ノード装置100はGD411に設定する。
例えば、図2Aの例において、PC203からPC205へフレームが送信されるとき、有線アドホックネットワーク200において送信経路上にあるノード装置100bは、次のようにしてMACテーブル153の学習を行う。
上記の例では、ノード装置100bがノード装置100cから受信したアドホックフレーム400において、MAC−SA422にはPC203のMACアドレスが指定されており、GS412にはノード装置100cのノードIDが指定されている。よって、ノード装置100bは、PC203のMACアドレスとノード装置100cのノードIDの対応付けを学習し、必要に応じてMACテーブル153へのエントリ追加を行う。
また、この学習の後に、例えばPC201からL2SW202を介して、PC203宛の新たなイーサネットフレーム420をノード装置100bが受信したとする。すると、ノード装置100bは、当該新たなイーサネットフレーム420のMAC−DA421の値を検索キーにしてMACテーブル153を検索する。
すなわち、ノード装置100bは、PC203のMACアドレスを検索キーにしてMACテーブル153を検索する。その結果、ノード装置100bは、PC203と接続された有線アドホックネットワーク200内のノード装置100cのノードIDを得る。よって、ノード装置100bは、ノード装置100cのノードIDをGD411に指定したアドホックヘッダ410を生成して上記の新たなイーサネットフレーム420の前に付与することで、新たなアドホックフレーム400を生成する。そして、ノード装置100bは、当該新たなアドホックフレーム400を送信する。
なお、ノード装置100cは、PC205のMACアドレスとノード装置100gのノードIDの対応付けを学習する前に、PC205宛のイーサネットフレーム420をPC203から受信した場合、例えば次のように動作してもよい。
すなわち、ブロードキャストを示す所定の値をGD411に指定したアドホックヘッダ410を有する、ノードID問い合わせ用のアドホックフレームを、ノード装置100cは有線アドホックネットワーク200内にブロードキャストしてもよい。ノードID問い合わせ用のアドホックフレームのペイロードには、PC205のMACアドレスが含まれる。
なお、図4に例示した分散協調メカニズムのため、ノードID問い合わせ用のアドホックフレームは、有線アドホックネットワーク200内で輻輳することはない。
そして、有線アドホックネットワーク200内をブロードキャストされたフレームにより問い合わせを受けたノード装置100gは、ノード装置100cに返信する。つまり、ノード装置100gは、PC205のMACアドレスとノード装置100gのノードIDの対応付けを通知するための、特殊な制御用のアドホックフレームを返信する。その結果、ノード装置100cは、返信されたアドホックフレームから、PC205のMACアドレスとノード装置100gのノードIDの対応付けを学習し、MACテーブル153にエントリを追加する。
図10は、ポーズ状態管理データの例を示す図である。図10のポーズ状態管理データ154は、図6のポート監視部137により管理され、ノード装置100自身から隣接ノード装置へのポーズ要求およびポーズ要求の解除通知の制御に利用される。ポーズ状態管理データ154に関する詳しい処理は、図17〜図19とともに後述する。
図10に示すように、ポーズ状態管理データ154は、ポーズ状態SSと、カウンタSCountと、ポーズ開始時刻StartTimeとを含む。
ポーズ状態SSの値は、ノード装置100自身がビジー状態に陥っているとき「P」(Pause)であり、ノード装置100自身がビジー状態ではないとき「N」(Normal)である。例えば、ポート監視部137は、バッファ部142の使用率を監視する。そして、バッファ部142の使用率が所定の閾値を超えていれば、ポート監視部137は「ノード装置100自身がビジー状態である」と判定し、ポーズ状態SSの値を「P」に設定してもよい。
カウンタSCountには、ノード装置100自身から他のノード装置へとポーズ要求を送信するときに、ポーズフレームに指定する値が設定される。すなわち、カウンタSCountには、隣接ノード装置に対して「フレームの送信を休止してほしい」とノード装置100自身が要求する期間の長さが設定される。
ポート監視部137は、カウンタSCountの値を任意に設定することができる。実施形態によって、ポート監視部137は、予め決められた定数値をカウンタSCountに設定してもよいし、バッファ部142の使用率に応じた可変パラメタの値をカウンタSCountに設定してもよい。
ポーズ開始時刻StartTimeは、ノード装置100自身が隣接ノード装置へポーズ要求を送信した時刻が設定される。
以上、ノード装置100の構成および各種データ構造について説明したので、以下ではノード装置100の動作の詳細について、フローチャートを参照しながら説明する。
図11A〜図11Dは、ルーティング処理を説明するフローチャートである。図11A〜図11Dのフローチャートに無限の繰り返しループとして表現してあるとおり、ノード装置100に電源が入っている間中、FPGA113は、図11A〜図11Dの処理を実行し続ける。
ノード装置100に電源が入れられると、ステップS201で初期化が行われる。例えば、MPU114はフラッシュメモリ119からノード装置100自身のノードIDを読み出して、DDR2・SDRAM118に記憶するとともにFPGA113に出力してもよい。また、ステップS201でテーブル制御部136が各種テーブルの初期化を行ってもよい。
例えば、ステップS201の時点ではまだ何も学習されていないので、ルーティングテーブル103、ブロードキャスト管理テーブル104、ループ検出テーブル105およびMACテーブル153は、エントリを持たない状態に初期化される。また、テーブル制御部136は、ポーズ状態テーブル151の各エントリ(1≦i≦x)において、ポーズ状態PSiを「N」に設定し、カウンタCountiを0に設定してもよい。さらにテーブル制御部136は、ポートリンク状態テーブル152の各エントリ(1≦i≦x)において、リンク状態Liを「C」に設定してもよい。
また、ステップS201では、ポート監視部137が、ポーズ状態管理データ154を初期化してもよい。例えば、ポート監視部137は、ポーズ状態SSを「N」に設定し、カウンタSCountを0に設定してもよい。
続いて、ステップS202でノード装置100は、ポート101−1〜101−xのいずれかでフレームが受信されるのを待つ。
ステップS202において、例えば、ポート101−r(1≦r≦x)でフレームが受信されると、図6に示すようにフレームは受信ポート132−rから受信フレーム制御部133に出力される。さらに、図9に関して説明したMACテーブル153の学習を行うよう、受信フレーム制御部133がテーブル制御部136に指示し、テーブル制御部136はMACテーブル153の学習を行う。そして処理はステップS203に移行する。
ステップS203で受信フレーム制御部133は、ステップS202で受信したフレームがポーズフレームか否かを、受信したフレームのタイプ413に基づいて判別する。ステップS202で受信したフレームがポーズフレームの場合、処理はステップS204へ移行し、ステップS202で受信したフレームがポーズフレームでない場合、処理はステップS207へ移行する。
ステップS204で、受信フレーム制御部133は、受信したポーズフレームで指定されているポーズカウンタの値が0か否かを判断する。ポーズカウンタの値が0ならば処理はステップS205に移行し、ポーズカウンタの値が0でなければ処理はステップS206に移行する。
ステップS205は、ポーズカウンタの値が0の場合、すなわちポーズ要求の解除が通知された場合に実行される。具体的には、ステップS205で受信フレーム制御部133は、ステップS202でポーズフレームを受信したポートに対応するポーズ状態を解除し、カウンタをクリアするよう、テーブル制御部136に指示する。そしてテーブル制御部136は指示にしたがって動作する。
例えば、ステップS202において、有線アドホックネットワークポート101−r(1≦r≦x)でポーズフレームが受信された場合、ステップS205でテーブル制御部136は、受信フレーム制御部133の指示にしたがい、次のように動作する。
すなわち、テーブル制御部136は、図7のポーズ状態テーブル151において、有線アドホックネットワークポート101−rのポート番号PNrに対応付けられたポーズ状態PSrとカウンタCountrを、それぞれ「N」と0に設定する。そして、処理はステップS202に戻る。
他方、ステップS206は、ポーズカウンタの値が0でない場合、すなわち新たなポーズ要求またはポーズ延長要求を受けたときに実行される。
なお、ポーズ延長要求とはポーズ要求の1種である。過去に第1のポーズ要求を出したノード装置が、第1のポーズ要求を表すポーズフレームに指定した期間の経過後にもまだビジー状態が続いている場合に、第1のポーズ要求の解除を通知する代わりに再度第2のポーズ要求を出すことがある。この第2のポーズ要求が、ポーズ延長要求である。
具体的には、ステップS206で受信フレーム制御部133は、ステップS202でポーズフレームを受信したポートに対応するポーズ状態を「P」にし、ポーズフレームにしたがってカウンタを設定するよう、テーブル制御部136に指示する。そしてテーブル制御部136は指示にしたがって動作する。
例えば、ステップS202において、有線アドホックネットワークポート101−r(1≦r≦x)でポーズフレームが受信された場合、ステップS206でテーブル制御部136は、受信フレーム制御部133の指示にしたがい、次のように動作する。
すなわち、テーブル制御部136は、図7のポーズ状態テーブル151において、有線アドホックネットワークポート101−rのポート番号PNrに対応付けられたポーズ状態PSrを「P」に設定する。また、テーブル制御部136は、図7のポーズ状態テーブル151においてポート番号PNrに対応付けられたカウンタCountrを、ステップS202で受信したポーズフレームに指定されている値に設定する。そして、処理はステップS202に戻る。
ステップS207は、ポーズフレーム以外の種類のフレームがステップS202で受信されたときに実行される。ステップS207で受信フレーム制御部133は、ステップS202で受信したフレームがブロードキャストフレームであるか否かを判断する。
具体的には、MAC−DA421がブロードキャストアドレス(すなわち全ビットが「1」であるアドレス)であれば、受信フレーム制御部133は、受信したフレームがブロードキャストフレームであると判断し、処理は図11BのステップS208に移行する。他方、MAC−DA421がブロードキャストアドレスでなければ、処理は図11AのステップS216に移行する。
図11Bに示すステップS208〜S215は、ステップS202でブロードキャストフレームが受信されたときの処理である。
ステップS208で受信フレーム制御部133は、ステップS202で受信したフレームに該当するエントリがループ検出テーブル105にあるか否かを判断する。つまり、受信フレーム制御部133は、テーブル制御部136を介して、ステップS202で受信したフレームのGS412の値とFID414の値の組を検索キーにしてループ検出テーブル105を検索する。
検索の結果、送信元GSiがGS412の値と一致するとともにFIDiがFID414の値と一致するエントリが見つかれば(1≦i≦m)、処理はステップS209に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理はステップS210に移行する。
なお、上記のようなエントリは、存在するとしても1個だけである。
ステップS209が実行されるのは、以前ノード装置100が送信したブロードキャストフレームが再度ノード装置100において受信されたことが明らかな場合である。よって、ステップS209で受信フレーム制御部133は、ステップS202で受信したフレームを廃棄する。そして、処理はステップS202に戻る。図4の例における、ノード装置100rのステップS105の動作と、ノード装置100sのステップS108の動作は、ステップS209に相当する。
また、ステップS210で受信フレーム制御部133は、テーブル制御部136を介してブロードキャスト管理テーブル104を検索する。検索により、受信フレーム制御部133は、ステップS202で受信したフレームが、ブロードキャスト管理テーブル104にある同一MACアドレスからの所定時間(例えば10ms)以内のブロードキャストにより再度受信されたものか否かを判断する。
具体的には、受信フレーム制御部133は、テーブル制御部136を介して、ステップS202で受信したフレームのMAC−SA422の値を検索キーにして、ブロードキャスト管理テーブル104を検索する。検索の結果、現在時刻との差が所定時間(本実施形態では10ms)以内の時刻が検索キーに対応付けられているエントリが見つかれば、処理はステップS211に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理はステップS212に移行する。
ステップS211が実行されるのは、最近(本実施形態では10msという期間内)、ノード装置100が受信したブロードキャストフレームが、再度ノード装置100で受信された場合である。よって、ステップS211で受信フレーム制御部133は、ステップS202で受信したフレームを廃棄する。そして、処理はステップS202に戻る。図4の例における、ノード装置100sのステップS104の動作と、ノード装置100tのステップS107の動作は、ステップS211に相当する。
ステップS210の検索の結果、ブロードキャスト管理テーブル104にエントリが見つからない場合、受信フレーム制御部133は「過去に受信したのと同じブロードキャストフレームがステップS202で再度受信されたのではない」と判断する。よって、ステップS212では上位転送処理が行われる。
すなわち、ステップS212で受信フレーム制御部133は、フレームを上位層処理部134に出力し、上位層処理部134がフレームを処理する。図5に即して説明すれば、ステップS212ではFPGA113からMPU114へMII124を介してフレームが出力され、MPU114でフレームが処理される。
次に、ステップS213で受信フレーム制御部133は、有線アドホックネットワーク内へのブロードキャストを行うようポート選択部138に指示し、ポート選択部138にフレームを出力する。すると、ポート選択部138はステップS213で、ポート101−1〜101−xのうち、次の2つの条件をともに満たすすべてのポートを送信先ポートとして選択する。
・受信ポート(つまりステップS202でブロードキャストフレームを受信したポート)ではない。
・図7のポーズ状態テーブル151のポーズ状態が「P」ではない(つまりポーズ状態が「N」である)。
あるいは、実施形態によっては、ポート選択部138は、「図8のポートリンク状態テーブル152でリンク状態が『C』である」という条件でさらに送信先ポートを絞り込んでもよい。
ポート選択部138は、ポート101−1〜101−xの中から選択したポート(換言すれば、送信ポート143−1〜143−xの中から選択した送信ポート)を送信フレーム制御部140に指示し、フレームを送信フレーム制御部140に出力する。なお、選択されたポートの数は、0、1、または複数である。
送信フレーム制御部140は、受け取ったフレームのTTL415の値を1減らしてFCS417を再計算することで新たなアドホックヘッダ410を生成し、新たなアドホックヘッダ410を含むアドホックフレーム400をバッファ部142に出力する。そして、送信フレーム制御部140は、バッファ部142にバッファリングされたアドホックフレーム400を、送信ポート143−1〜143−xのうちで選択された送信ポートから、送信するための制御を行う。
以上のようにしてステップS213で、送信ポート143−1〜143−xのうちで選択された送信ポートからフレームの送信が行われる。すると、処理はステップS214に移行する。
ステップS214で受信フレーム制御部133は、テーブル制御部136を介して、ステップS202で受信したブロードキャストフレームに対応するエントリをブロードキャスト管理テーブル104に登録する。すなわち、ステップS214では、ステップS202で受信したブロードキャストフレームのMAC−SA422の値と、タイマ139から得られる現在時刻(つまりタイムスタンプ)とを対応付けたエントリが、ブロードキャスト管理テーブル104に追加される。
そして、ステップS215では、ポート選択部138が、ステップS213での選択結果に応じて、テーブル制御部136を介してループ検出テーブル105に新たなエントリを登録する。
ステップS215で登録される新たなエントリは次のようなものである。例えば、ステップS202においてポート101−r(1≦r≦x)でアドホックフレーム400が受信されたとする。この場合、受信されたアドホックフレーム400のGS412の値とFID414の値の組に、ポート101−rのポート番号およびポート101−1〜101x各々の状態を対応付ける新規エントリが、ステップS215でループ検出テーブル105に追加される。また、当該新規エントリがループ検出テーブル105の(m+1)番目のエントリであるとすると、当該新規エントリにおけるポート101−i(1≦i≦x)の状態LPi(m+1)は、次のように設定される。
・ポート101−iが、ステップS213で送信先ポートとして選択された場合は、状態LPi(m+1)の値は「U」である。
・それ以外の場合は、状態LPi(m+1)の値は「E」である。
なお、実施形態によっては、ステップS212〜S215の処理順を入れ替えてもよく、ステップS212〜S215が並列に実行されてもよい。
ここで、ステップS210とS211の処理の意義をより明らかにするため、図2Aを参照してさらに別の具体例を説明する。
例えば、図2AのPC206は、L3パケット424としてARP(Address Resolution Protocol)パケットを含むイーサネットフレーム420をブロードキャストする場合がある。このとき、イーサネットフレーム420のMAC−DA421には、ブロードキャストアドレスが指定されている。
ブロードキャストフレームであるイーサネットフレーム420は、リンク229を介して送信元のPC206と接続されたノード装置100hにおいてアドホックヘッダ410が付与され、アドホックフレーム400となる。ここで、アドホックヘッダ410のGS412には、ノード装置100hのノードIDが指定されており、FID414には、ノード装置100hが生成した第1のFIDが指定されている。
そして、ブロードキャストフレームであるアドホックフレーム400が、ノード装置100hから有線アドホックネットワーク200へとブロードキャストされる。具体的には、ノード装置100hは、ポート101h−1、101h−3および101h−4のそれぞれから、アドホックフレーム400を送信する(つまりブロードキャストする)。
その後、アドホックフレーム400は、例えば、リンク223とリンク217を介してノード装置100bに到達し、さらにノード装置100bからリンク216を介してノード装置100aに到達するかもしれない。
その場合、ノード装置100bは、ステップS212を実行する。その結果として、ノード装置100bは、受信したアドホックフレーム400からアドホックヘッダ410を除いたイーサネットフレーム420を、汎用LANポート106bに接続されたL2SW202へ送信する。
すると、ノード装置100bからブロードキャストフレームであるイーサネットフレーム420を受信したL2SW202は、受信したイーサネットフレーム420をブロードキャストする。すなわち、L2SW202は、イーサネットフレーム420を、リンク211を介してPC201へ送信するとともに、リンク212を介してノード装置100aにも送信する。
ところで、上記のように、ノード装置100aは、有線アドホックネットワーク200内のブロードキャストの結果として、アドホックフレーム400をリンク216を介してポート101a−4で受信している。また、ノード装置100aにおいてアドホックフレーム400は、リンク215を介してノード装置100dからさらに受信される可能性もある。
ノード装置100aが、有線アドホックネットワーク200内のノード装置100bと100dの双方から重複してブロードキャストフレームであるアドホックフレーム400を受信した場合は、後から受信された方のフレームがステップS209で破棄される。ステップS209の破棄は、ループ検出テーブル105により可能となり、ステップS209によって有線アドホックネットワーク200内でのブロードキャストフレームの輻輳は防止される。
ところが、もしブロードキャスト管理テーブル104が存在しないと、一旦有線アドホックネットワーク200の外部のL2SW202を経由したブロードキャストフレームが再度有線アドホックネットワーク200内に戻って輻輳する可能性がある。そのため、本実施形態では、ノード装置100がブロードキャスト管理テーブル104を備えている。
もしブロードキャスト管理テーブル104が存在しなければ、有線アドホックネットワーク200内のブロードキャストによりノード装置100bまたは100dからアドホックフレーム400を受信したノード装置100aは、アドホックヘッダ410を除いてイーサネットフレーム420をL2SW202に送信する。すると、L2SW202は、ブロードキャストフレームであるイーサネットフレーム420を、PC201とノード装置100bの双方に送信する。
ここで、ノード装置100bにおいてL2SW202から受信されるイーサネットフレーム420はアドホックヘッダ410を持たない。よって、ノード装置100bは、ノード装置100b自身が過去にL2SW202へ送信したブロードキャストフレームと同じイーサネットフレーム420が再度受信されたということを、ループ検出テーブル105を使って認識することはできない。
他方で、もしノード装置100bがL2SW202から受信したブロードキャストフレームを有線アドホックネットワーク200内にブロードキャストすれば、同じイーサネットフレーム420が再度ブロードキャストされてしまう。そのうえ、L2SW202とノード装置100bとノード装置100aの間で、同じブロードキャストフレームがループし続ける可能性もある。なぜなら、一旦有線アドホックネットワーク200の外部に出てから有線アドホックネットワーク200内に戻ったブロードキャストフレームには、有線アドホックネットワーク200内に戻るたびに新たなFIDが割り当てられるからである。
したがって、輻輳を防ぐためには、ノード装置100bは、ループ検出テーブル105以外の情報を利用して、アドホックヘッダ410を持たないイーサネットフレーム420同士の同一性を判定する必要がある。
本実施形態では、ブロードキャスト管理テーブル104を使うことで、ノード装置100は、アドホックヘッダ410を持たないイーサネットフレーム420同士の同一性を、MAC−SA422の値と時刻の組み合わせによって判断することができる。すなわち、ブロードキャスト管理テーブル104は、一旦有線アドホックネットワーク200の外部を経由したブロードキャストフレームが再度有線アドホックネットワーク200内に戻ってきた場合にも輻輳を防ぐことを可能とするメカニズムの一例である。
なお、上記に例示した「10ms」という値は、実施形態に応じて適宜変更することができる。例えば予備実験を行うことで、適切な値を決めてもよい。適切な値は、ブロードキャストフレームが送信される頻度や、フレームが有線アドホックネットワーク200の外部の機器(L2SW202など)を経由して再度有線アドホックネットワーク200内に戻るまでにかかる時間などによって異なる。
ここで図11Aの説明に戻って、ブロードキャストフレーム以外のフレームがステップS202で受信された場合に行われるステップS216の処理について説明する。
ステップS216で受信フレーム制御部133は、ステップS202で受信したフレームが、ノード装置100自身宛か否かを判断する。すなわち、受信フレーム制御部133は、フラッシュメモリ119からステップS201で予め読み出されているノード装置100自身のノードIDと、ステップS202で受信したアドホックフレーム400のGD411の値とが一致するか否かを判断する。
ノード装置100自身のノードIDとGD411の値が一致すれば、ステップS202で受信したフレームはノード装置100自身に宛てたものなので処理はステップS217に移行する。逆に、ノード装置100自身のノードIDとGD411の値が一致しなければ、ステップS202で受信したフレームはノード装置100自身に宛てたものではないので、フレームを他のノード装置に中継するために処理は図11CのステップS218に移行する。
ステップS217では上位転送処理が行われる。すなわち、ステップS217で受信フレーム制御部133は、フレームを上位層処理部134に出力し、上位層処理部134がフレームを処理する。図5に即して説明すれば、ステップS217ではFPGA113からMPU114へフレームが出力され、MPU114でフレームが処理される。ステップS217で上位層処理部134は、受け取ったフレームのペイロードにL3パケット424として含まれるデータを処理したり、受け取ったフレームに基づく適宜のコントロールを実行したりする。そして処理はステップS202に戻る。
さて、「ステップS202で受信したフレームはノード装置100自身に宛てたものではない」とステップS216で判断された場合、処理は図11CのステップS218に移行する。
ステップS218で受信フレーム制御部133は、ステップS202で受信したフレームに該当するエントリがループ検出テーブル105にあるか否かを判断する。つまり、受信フレーム制御部133は、テーブル制御部136を介して、ステップS202で受信したフレームのGS412の値とFID414の値の組を検索キーにしてループ検出テーブル105を検索する。
検索の結果、送信元GSiがGS412の値と一致するとともにFIDiがFID414の値と一致するエントリが見つかれば(1≦i≦m)、処理は図11DのステップS219に移行する。他方、検索の結果、上記のようなエントリが見つからなければ、処理は図11CのステップS230に移行する。
なお、上記のようなエントリは、存在するとしても1個だけである。
図11Dに示すステップS219〜S229は、過去にノード装置100自身が送信したユニキャストフレームが有線アドホックネットワーク内をループしてノード装置100に戻り、ステップS202でポート101−rにおいて受信された場合の処理である。例えば、図2Bにおいて、探索経路302でのバックトラック303の後の、ノード装置100aからフレームを受信したノード装置100bにおける処理が、図11Dに対応する。
ステップS219では、ポート選択部138が、ステップS202でフレームを受信したポートを受信ポートとして認識する。
例えば、ステップS218でエントリが見つかると、受信フレーム制御部133は、テーブル制御部136から通知されたSRAM116のアドレスを、見つかったエントリのアドレスとして、ポート選択部138に通知してもよい。そして、受信フレーム制御部133は、ポート選択部138に、ループ検出時のポート選択を行うよう指示してもよい。その結果としてポート選択部138が、ステップS219以下の処理を実行してもよい。
例えば、ステップS202でフレームがポート101−r(1≦r≦x)において受信され、ステップS218ではループ検出テーブル105のi番目のエントリが検索結果としてヒットし、ループ検出テーブル105は図1に示す形式であるとする。この場合、ステップS219でポート選択部138は、i番目のエントリにおけるポート番号RCVPNiを、ポート101−rの番号に更新する。
続いて、ステップS220では、ポート選択部138が、ステップS218で検出されたループ検出テーブル105のエントリにおいて「U」状態のポート状態を「L」状態に変更する。
例えば、検索の結果、ステップS218ではループ検出テーブル105のi番目のエントリがヒットしたとする。ここで、ステップS220は、ユニキャストされたフレームに関して実行されるステップであるから、i番目のエントリにおけるポート状態LP1i〜LPxiのうち、値が「U」であるものは、1つしかない。以下、説明の便宜上、ポート101−t(1≦t≦x)のポート状態LPtiの値が「U」であるとする。
すなわち、GS412に送信元GSiが設定され、FID414にFIDiと同じ値が設定されたアドホックフレーム400を、ポート101−tからノード装置100がかつて送信したことがあった場合、ステップS220においてポート状態LPtiの値は「U」である。そして、この場合、ステップS220において、ポート状態LPtiの値は「U」から「L」に更新される。
さらに、ステップS221でポート選択部138は、テーブル制御部136を介して、ステップS202で受信したフレームのGD411の値に対応するルーティングテーブル103のエントリを検索する。なお、本実施形態では、ルーティングテーブル103のエージング期間(すなわち各エントリの有効期間)の方が、ループ検出テーブル105のエージング期間よりも長い。そのため、ステップS221では検索の結果、必ず1つのエントリがヒットすると保証される。よって、ステップS221によりポート選択部138は、ヒットしたエントリに対応するSRAM116のアドレスをテーブル制御部136から得ることができ、以後、ヒットしたエントリに直接アクセスすることができる。
ルーティングテーブル103のエージング期間は、例えば225秒といった比較的長い時間でよい。それに対し、ループ検出テーブル105のエージング期間は、例えば1秒未満の比較的短い時間にするのが好ましい。その理由は、ルーティングテーブル103の1つのエントリは有線アドホックネットワーク内の1つのノード装置に対応するのに対し、ループ検出テーブル105の1つのエントリは1つのアドホックフレーム400に対応するためである。
つまり、ループ検出テーブル105には、ルーティングテーブル103よりもはるかに頻繁にエントリが追加されると予測される。したがって、ループ検出テーブル105のエントリ数の増えすぎによるオーバフローを防ぐために、ループ検出テーブル105のエージング期間は比較的短い時間に設定される。
なお、ループ検出テーブル105のエージング期間の長さとして適切な値は、例えば予備実験を行うなどして、有線アドホックネットワーク内でのループにかかる時間を考慮に入れて定めることが好ましい。
以下では説明の便宜上、ステップS221でルーティングテーブル103のj番目のエントリがヒットしたと仮定する。すなわち、ステップS202で受信したアドホックフレーム400のGD411の値が、ルーティングテーブル103における宛先GDjの値と一致したとする。
すると、ステップS222でポート選択部138は、現在のポートリンク状態とポーズ状態を、ルーティングテーブル103の、ステップS221で検出したエントリに反映する。つまり、ステップS222では、各ポート101−k(1≦k≦x)について、以下の操作が行われる。
・ポート101−kに対応する図7のポーズ状態テーブル151のポーズ状態PSkの値が「P」の場合、ルーティングテーブル103でヒットしたj番目のエントリにおいて、ポート101−kの状態RPkjの値が「P」に更新される。または、ルーティングテーブル103のj番目のエントリでポート101−kの状態RPkjの現在の値が「P」であり、かつポーズ状態テーブル151のポーズ状態PSkの値が「N」である場合は、状態RPkjの値が「E」に更新される。
・ポート101−kに対応する図8のポートリンク状態テーブル152のリンク状態Lkの値が「D」の場合、ルーティングテーブル103でヒットしたj番目のエントリにおいて、ポート101−kの状態RPkjの値が「D」に更新される。または、ルーティングテーブル103のj番目のエントリでポート101−kの状態RPkjの現在の値が「D」であり、かつポートリンク状態テーブル152のリンク状態Lkの値が「C」である場合は、状態RPkjの値が「E」に更新される。
なお、本実施形態では、ポーズ状態テーブル151の内容を反映する操作の後にポートリンク状態テーブル152の内容を反映する操作が行われる。よって、ポーズ状態PSkよりもリンク状態Lkの方が優先的にルーティングテーブル103に反映される。また、上記の説明から理解されるように、ポーズ状態テーブル151とポートリンク状態テーブル152はルーティングテーブル103に対する一種のマスクデータとして利用されている。
さらに、ステップS223でポート選択部138は、ルーティングテーブル103の、ステップS221で検出したエントリにおいて、注目しているポート101−tを「L」状態に設定する。つまり、ステップS220でループ検出テーブル105において「U」状態から「L」状態へと変更されたポート101−tに関して、ステップS223では、ルーティングテーブル103においても状態が「L」に設定される。具体的には、ルーティングテーブル103のj番目のエントリにおいて、ポート101−tの状態RPtjの値が「L」に更新される。
以上のステップS220〜S223により、有線アドホックネットワーク内をループして戻ってきたフレームをノード装置100が受信した場合、戻ってきたフレームと宛先が同じフレームは、以後、今までの送信先ポートからは送信されないようになる。つまり、ノード装置100はループが生じるポートを学習し、以後、ループが生じるポートへの送信を控えるようになる。その結果、有線アドホックネットワーク全体としても、無駄なトラフィックが減る。
続いて、ステップS224においてポート選択部138は、ルーティングテーブル103のj番目のエントリ内を検索し、「E」状態のポートを探す。つまり、ポート選択部138は、宛先GDjが指定されたアドホックフレーム400を中継するときの送信先ポートとしてまだ試したことのないポートであって、かつ現在使用可能な(つまり「P」状態でも「D」状態でもない)ポートを探す。
そして、ステップS225でポート選択部138は、ステップS224の検索の結果、「E」状態のポートが見つかったか否かを判断し、見つからなかった場合には処理がステップS226へ移行し、見つかった場合には処理がステップS227へ移行する。
ステップS226でポート選択部138は、ステップS219で受信ポートとして認識したポート101−rを、送信先ポートとして選択する。そして処理はステップS229に移行する。
ステップS226が実行されるのは、ステップS202においてポート101−rで受信したフレームを中継しようとしても、中継のために送信することが可能なポートが見つからない場合である。ここで「送信することが可能なポート」とは、具体的には、ループ状態でもリンクダウン状態でもなく、隣接ノード装置からポーズ要求を受けてもいないポートのことである。
つまり、ノード装置100はステップS202で受信したフレームを、受信ポートと接続された隣接ノード装置以外の他の隣接ノード装置に転送することができないとき、ステップS226が実行される。よって、ノード装置100は、受信したフレームを返送するために、ステップS202でフレームを受信したポート101−rを送信先ポートにする。
返送により、ノード装置100は、ポート101−rと接続された隣接ノード装置に対して、「ノード装置100で中継経路が袋小路になっている」ということを知らせることができる。その結果、返送されたフレームを受信した隣接ノード装置は、ループ検出テーブル105により、「宛先GDj宛てのフレームをノード装置100と接続されたポートに送信してもループしてしまう」と認識することができる。
例えば、図2Bの例で、バックトラック303によりノード装置100aから返送されたフレームを受信することでループを検出したノード装置100bにおいて、ノード装置100eとの間のリンク217がリンクダウン状態だったとする。すると、探索経路302とは異なり、さらにノード装置100bでもバックトラックが生じる。つまり、ノード装置100bは、ステップS226で、ノード装置100cと接続されたポート101b−4を送信先ポートとして選択する。
その結果、ノード装置100cは、ノード装置100bから返送されたフレームを受信する。よって、ノード装置100cは、「ノード装置100gのノードIDがGD411に設定されたアドホックフレーム400の送信先ポートとして、ノード装置100bと接続されたポート101c−1は、不適切である」と認識する。つまり、ノード装置100cのルーティングテーブル103において、ノード装置100gのノードIDに対応付けられたポート101c−1の状態は、「L」に設定される。
そして、ノード装置100cは、ポート101c−1とは別のポート101c−3をステップS225で選択する。このように、探索木300においてバックトラックが複数回繰り返されることで新たな中継経路が見つかる場合もある(なお、図2Bの探索経路302では1回バックトラックしただけで新たな中継経路が見つかっている)。
ここでステップS225の説明の続きに戻る。
ステップS224で「E」状態のポートが見つかった場合、ステップS225に続くステップS227では、ポート選択部138が、ステップS224で見つかった「E」状態のポートのうちの任意の1つ(例えば、最初に見つかったポート)を送信先ポートとして選択する。そして、ポート選択部138は、ルーティングテーブル103のj番目のエントリにおいて、送信先ポートとして選択した該当ポートの状態を「U」に設定する。
例えば、ステップS227でポート101−g(1≦g≦x)が選択されたとすると、ステップS221でヒットしたルーティングテーブル103のj番目のエントリにおいて、ポート101−gの状態RPgjの値が、「U」に設定される。
そして、ステップS228では、ポート選択部138がさらに、ループ検出テーブル105でも該当ポートを「U」状態に設定する。つまり、ステップS218で見つかったループ検出テーブル105のi番目のエントリにおいて、送信先ポートとしてステップS227で選択されたポート101−gの状態LPgiの値が、「U」に設定される。そして処理はステップS229に移行する。
ステップS229では、ステップS226またはS227で送信先ポートとして選択されたポートにフレームが送信される。
すなわち、ステップS229において、ポート選択部138は送信先ポートとして選択したポートを送信フレーム制御部140に指示し、フレームを送信フレーム制御部140に出力する。そして、送信フレーム制御部140は、受け取ったフレームのTTL415を1減らしてFCS417を再計算することで新たなアドホックヘッダ410を生成し、新たなアドホックヘッダ410を含むアドホックフレーム400をバッファ部142に出力する。さらに、送信フレーム制御部140は、バッファ部142にバッファリングされたアドホックフレーム400を、ポート選択部138により選択された送信ポート143−g(換言すればポート101−g)から送信するための制御を行う。
こうしてステップS229でポート101−gからのフレームの送信が行われ、その後、処理はステップS202に戻る。
以上のように、ループが発生したときは、ステップS227〜S229によって別の新たな中継経路が試されるか、またはステップS226とS229によってバックトラックが発生する。なお、ステップS227〜S229による新たな中継経路への切り替えは、ノード装置100内のFPGA113により数μsで行われる。
また、バックトラックが発生したとしても、例えば図2Bの探索経路302のように、バックトラックにより探索木300を遡る回数が少なければ、有線アドホックネットワーク全体として見ても、非常に短い時間で中継経路の切り替えが完了する。このように、本実施形態によれば、障害発生またはその他の理由でループが発生した場合に、非常に高速にフレームの中継経路の切り替えが実現される。
ここで図11Cの説明に戻り、ステップS218の検索でエントリが見つからなかった場合のステップS230〜S239の処理について説明する。
ステップS230でポート選択部138は、テーブル制御部136を介して、ステップS202で受信したフレームのGD411の値でルーティングテーブル103を検索する。
そして、ステップS230の検索の結果、GD411の値を各ポートの状態と対応付けたエントリがルーティングテーブル103内に見つかったか否かを、ステップS231でポート選択部138が判断する。上記のエントリが見つからなかった場合、処理はステップS232に移行し、上記のエントリが見つかった場合、処理はステップS233に移行する。なお、上記のエントリは、見つかるとしても1つしか存在しない。
ステップS232でポート選択部138は、テーブル制御部136を介してルーティングテーブル103に新規エントリを登録する。当該新規エントリにおいて、宛先の値は、ステップS202で受信したフレームのGD411の値に設定され、各ポート101−1〜101−xの状態はすべて「E」状態に設定される。そして処理はステップS233に移行する。
図11Cに関する以下の説明では、ステップS230の検索の結果見つかった1つのエントリまたはステップS232で新規に登録されたエントリのことを「注目エントリ」といい、注目エントリはルーティングテーブル103のf番目のエントリであるとする。
なお、図1の例に即して説明すれば、ステップS230で注目エントリが見つかった場合は1≦f≦nであり、ステップS232で注目エントリが登録された場合はf=n+1である。また、ステップS230またはS232の結果として、ポート選択部138は、注目エントリのSRAM116上のアドレスをテーブル制御部136から得ているので、以後、注目エントリに直接アクセスすることができる。
ステップS233でポート選択部138は、現在のポートリンク状態とポーズ状態をルーティングテーブル103の注目エントリに反映する。つまり、ステップS233では、各ポート101−k(1≦k≦x)について、ステップS222と類似の以下の操作が行われる。
・ポート101−kに対応する図7のポーズ状態テーブル151のポーズ状態PSkの値が「P」の場合、ルーティングテーブル103のf番目のエントリにおいて、ポート101−kの状態RPkfの値が「P」に更新される。または、ルーティングテーブル103のf番目のエントリでポート101−kの状態RPkfの現在の値が「P」であり、かつポーズ状態テーブル151のポーズ状態PSkの値が「N」である場合は、状態RPkfの値が「E」に更新される。
・ポート101−kに対応する図8のポートリンク状態テーブル152のリンク状態Lkの値が「D」の場合、ルーティングテーブル103のf番目のエントリにおいて、ポート101−kの状態RPkfの値が「D」に更新される。または、ルーティングテーブル103のf番目のエントリでポート101−kの状態RPkfの現在の値が「D」であり、かつポートリンク状態テーブル152のリンク状態Lkの値が「C」である場合は、状態RPkfの値が「E」に更新される。
さらにステップS234でポート選択部138は、ルーティングテーブル103の注目エントリを参照する。そしてポート選択部138は、ステップS202でフレームを受信したポート101−r(1≦r≦x)以外であり、かつ状態が「L」、「P」、「D」状態以外のポートのうちの1つを、送信先ポートとして選択する。なお、状態が「L」、「P」、「D」状態以外とは、換言すれば「E」状態または「U」状態ということである。
本実施形態では、ポート選択部138は、ステップS234において「U」状態のポートを「E」状態のポートよりも優先して選ぶ。なぜなら、「U」状態のポートは、過去に送信先ポートとして使用した実績があり、ループが発生しないことがステップS218で確認されているので、信頼性が確立されているためである。
また、ステップS234が実行されるのは、ステップS202で受信したフレームがユニキャストフレームの場合である。よって、「U」状態のポートは、注目エントリ中に存在するとしても、1個しか存在しない。
なお、ポート選択部138がステップS234で「E」状態のポートを選ぶ場合で、注目エントリ中に「E」状態のポートが複数ある場合は、ポート選択部138は、例えば、最初に見つけた「E」状態のポートを選択してもよい。
ただし、「ポート101−r以外であり、しかも注目エントリにおいて状態が『E』または『U』に設定されている」という条件を満たすポートが、存在しない可能性もある。
そこで、ステップS235でポート選択部138は、ステップS234で選択された送信先ポートがあるか否かを判断する。ステップS234で選択された送信先ポートがある場合は、処理はステップS236に移行し、ステップS234で送信先ポートが見つからなかった場合は、処理はステップS238に移行する。
ステップS236でポート選択部138は、ルーティングテーブル103の注目エントリにおける送信先ポートの状態を「U」状態に更新する。例えば、ステップS234でポート101−e(1≦e≦x)が送信先ポートとして選択された場合、ステップS236では、状態RPefの値が「U」に設定される。
そして、ステップS237でポート選択部138は、テーブル制御部136を介して、ループ検出テーブル105に新規エントリを追加登録する。当該新規エントリが例えば(m+1)番目のエントリであるとすると、当該新規エントリの各フィールドの内容は次のとおりである。
・送信元GSm+1は、ステップS202で受信したフレームのGS412の値に設定される。。
・FIDm+1は、ステップS202で受信したフレームのFID414の値に設定される。
・受信ポート番号RCVPNm+1は、ステップS202でフレームを受信したポート101−rの番号(つまりr)に設定される。
・ポート101−eに対応する状態LPe(m+1)は「U」に設定され、それ以外のポートに対応する状態はすべて「E」に設定される。
ステップS237で上記のような新規エントリがループ検出テーブル105に追加されると、処理はステップS239に移行する。
他方で、ステップS234で送信先ポートが得られなかった場合、ステップS238でポート選択部138は、ステップS202でフレームを受信したポート101−rを送信先ポートとして選択する。つまり、ステップS238は図11DのステップS226と同様のステップである。「ステップS202においてポート101−rで受信したフレームを中継しようとしても、中継のために送信することが可能なポートが見つからない」と通知するため、ステップS238ではポート101−rがフレームを返送するためのポートとして選択される。そして処理はステップS239に移行する。
ステップS239では、ステップS234またはS238で送信先ポートとして選択されたポートにフレームが送信される。ステップS239の処理は図11DのステップS229と同様なので詳しい説明は省略する。フレームの送信後、処理はステップS202に戻る。
なお、図11A〜図11Dでは説明の簡単化のため図示を省略したが、ノード装置100は、ルーティング処理においてTTL415の値に基づいてフレームを破棄する場合もある。すなわち、ステップS202で受信されたフレームのTTL415の値が1のとき、例えば次のように処理が行われる。
・図11BのステップS213では、送信フレーム制御部140がフレームを破棄し、ステップS214とS215が省略されて、処理はステップS202に戻る。
・図11DのステップS225〜S229が省略される。
・図11CのステップS230〜S239が省略される。
また、図11A〜図11Dには、図5の有線アドホックネットワークポート101−1〜101−xのいずれかで受信されるフレームに関する処理を示したが、ノード装置100は、汎用LANポート106で受信されるフレームに関する処理も行う。また、ノード装置100は、ノード装置100自身のMPU114が生成するフレームに関する処理も行う。
すなわち、イーサネットフレーム420が汎用LANポート106で受信された場合は、MAC−DA421に応じてMPU114またはFPGA113にイーサネットフレーム420が出力される。そして、ノード装置100自身を宛先とするイーサネットフレーム420はMPU114で処理される。
逆に、他のノード装置を宛先とするイーサネットフレーム420は、FPGA113においてアドホックヘッダ410が付与され、有線アドホックネットワークポート101−1〜101−xのいずれかから送信される。その際、図11CのステップS237と同様にループ検出テーブル105へのエントリの追加も行われる。また、汎用LANポート106でブロードキャストフレームを受信した場合は、FPGA113は、外部機器からのブロードキャストを表す特定の値をアドホックヘッダ410のタイプ413に設定してもよい。
また、MPU114がイーサネットフレーム420を生成した場合は、イーサネットフレーム420に対しては、MAC−DA421に応じて、以下のいずれかの処理が行われる。
・内部接続ポート114b、PHYチップ120、L2SW部112を介して、汎用LANポート106からイーサネットフレーム420が送信される。
・イーサネットフレーム420がFPGA113に出力され、アドホックヘッダ410が付与されて、有線アドホックネットワークポート101−1〜101−xのいずれかから送信される。その際、図11CのステップS237と同様にループ検出テーブル105へのエントリの追加も行われる。また、MPU114がブロードキャストフレームを生成した場合は、FPGA113は、MPU114からのブロードキャストを表す特定の値をアドホックヘッダ410のタイプ413に設定してもよい。
続いて、図11A〜図11Dの処理とは独立して行われる各種処理について、図12〜図20を参照して説明する。
図12は、ルーティングテーブルのエージングを説明するフローチャートである。図12の処理は、ルーティングテーブル103の各エントリについて、例えば予め決められた間隔で定期的に実行される。以下、図12の説明においては、ルーティングテーブル103内のあるエントリを便宜的に「注目エントリ」という。そして、注目エントリに関して図12の処理が行われる場合について説明する。
ステップS301でテーブル制御部136は、現在のノード装置100内部のタイマ139の値から、注目エントリのタイマ値を減じた差分を計算する。
なお、本実施形態では、ルーティングテーブル103の各エントリに対応するタイマが実装されている。例えば、FPGA113上に、各エントリに対応するハードウェアタイマが実装されていてもよい。実施形態によっては、代わりに、ルーティングテーブル103の各エントリが、エントリ作成時刻を示すフィールドを有していてもよい。その場合、ステップS301では、現在のノード装置100内部のタイマ139の値から、注目エン
トリのエントリ作成時刻を示すフィールドの値を減じた差分が計算される。
次に、ステップS302でテーブル制御部136は、ステップS301で得られた計算結果が、予め決められたルーティングテーブル103のエージング時間以上か否かを判断する。ステップS301で得られた差分が上記エージング時間未満であれば、図12の処理は終了する。
他方、ステップS301で得られた差分が上記エージング時間以上であれば、ステップS303でテーブル制御部136はルーティングテーブル103から注目エントリを消去し、図12の処理を終了する。
図13は、ルーティングテーブルのエントリのタイマの設定について説明するフローチャートである。図13の処理は次のような場合に行われる。
・ルーティングテーブル103内のあるエントリの内容を更新するアクセスがあった場合(例えば図11CのステップS233、S236、図11DのステップS222、S223、S227)、アクセスされたエントリに関して図13の処理が行われる。
・ルーティングテーブル103に新規エントリが追加される場合(例えば図11CのステップS232)、当該新規エントリに関して図13の処理が行われる。
・ルーティングテーブル103が検索され、検索の結果ヒットしたエントリが見つかった場合(例えば図11CのステップS230、図11DのステップS221)、ヒットしたエントリに関して図13の処理が行われる。
以下では便宜上、上記の3つの場合をまとめて、図13の処理が行われる対象のエントリを「注目エントリ」という。
ステップS401でテーブル制御部136は、注目エントリのタイマ(例えば図12に関して例示したハードウェアタイマ)に、現在のノード装置100の内部のタイマ139の値を設定する。そして図13の処理は終了する。なお、エントリ作成時刻を示すフィールドをルーティングテーブル103が有する実施形態においては、エントリ作成時刻を示すフィールドに、ステップS401で現在のタイマ139の値が設定される。
以上の図12と図13の処理により、ルーティングテーブル103の各エントリのエージングが実現される。なお、図示は省略したが、ブロードキャスト管理テーブル104に関しても、図12および図13と同様の処理により、テーブル制御部136とタイマ139が協働してエージング処理を行う。
図14は、ループ検出テーブルのエージングを説明するフローチャートである。図14の処理は、ループ検出テーブル105の各エントリについて、例えば予め決められた間隔で定期的に実行される。以下、図14の説明においては、ループ検出テーブル105内のあるエントリを便宜的に「注目エントリ」という。そして、注目エントリに関して図14の処理が行われる場合について説明する。
ステップS501でテーブル制御部136は、現在のノード装置100内部のタイマ139の値から、注目エントリのタイマ値を減じた差分を計算する。本実施形態では、ルーティングテーブル103と同様にループ検出テーブル105に関しても、各エントリに対応するタイマが実装されている。もちろん、実施形態によっては、ループ検出テーブル105の各エントリが、エントリ作成時刻を示すフィールドを有していてもよい。
続いて、ステップS502でテーブル制御部136は、ステップS501で得られた計算結果が、予め決められたループ検出テーブル105のエージング時間以上か否かを判断する。ステップS501で得られた差分が上記エージング時間未満であれば、図14の処理は終了する。
他方、ステップS501で得られた差分が上記エージング時間以上であれば、ステップS503でテーブル制御部136はループ検出テーブル105から注目エントリを消去し、図14の処理を終了する。
図15は、ループ検出テーブルのエントリのタイマの設定について説明するフローチャートである。ループ検出テーブル105の各エントリは、ルーティングテーブル103と異なり、アクセスの有無によらず、作成されてから所定の時間が経過すると消去される。そのため、図15の処理は、図11BのステップS215または図11CのステップS237で新規エントリがループ検出テーブル105に追加されるときに、当該新規エントリに関して実行される。換言すれば、図15の処理は、フレームの送信処理を契機として、フレームの送信とあわせて(より詳細には、図11BのステップS213でフレームが送信された直後、あるいは図11CのステップS239でフレームが送信される直前に)実行される。
具体的には、ステップS601でテーブル制御部136は、ループ検出テーブル105に追加される新規エントリのタイマ(例えばハードウェアタイマ)に、現在のノード装置100の内部のタイマ139の値を設定する。そして図15の処理は終了する。なお、エントリ作成時刻を示すフィールドをループ検出テーブル105が有する実施形態においては、エントリ作成時刻を示すフィールドに、ステップS601で現在のタイマ139の値が設定される。
以上の図14と図15の処理により、ループ検出テーブル105の各エントリのエージングが実現される。
図16は、ポーズ状態解除処理のフローチャートである。図16の処理は、図11AのステップS206で設定された「P」状態を解除するための処理である。また、図16の処理は、例えば予め決められた間隔で定期的に、各ポートについて実行される。以下、図16の説明においてはあるポート101−i(1≦i≦x)を「注目ポート」といい、注目ポート101−iについて図16の処理が行われる場合について説明する。
ステップS701でテーブル制御部136は、図7のポーズ状態テーブル151を参照し、注目ポート101−iに対応するポーズ状態PSiの値が「P」か否かを判定する。注目ポート101−iに対応するポーズ状態PSiの値が「P」ではなく「N」であれば、図16の処理は終了する。
他方、注目ポート101−iに対応するポーズ状態PSiの値が「P」であれば、ステップS702でテーブル制御部136は、ポーズ状態テーブル151の注目ポート101−iに対応するエントリにおいて、カウンタCountiをカウントダウンする。
続いて、ステップS703でテーブル制御部136は、ステップS702のカウントダウンの結果、カウンタCountiの値が0になったか否かを判定する。カウンタCountiの値が0になっていなければ、図16の処理は終了する。
他方、カウンタCountiの値が0になっていれば、ステップS704でテーブル制御部136は、ポーズ状態テーブル151の注目ポート101−iに対応するエントリにおいて「P」状態を解除する。すなわち、テーブル制御部136は、注目ポート101−iに対応するエントリのポーズ状態PSiに「N」を設定する。そして、図16の処理は終了する。
ステップS704によってポーズ状態が解除された後、ポーズ状態テーブル151の内容は、図11CのステップS233または図11DのステップS222においてルーティングテーブル103に反映される。
なお、ポーズ状態テーブル151は、図7に例示するように「カウンタ」フィールドを有していてもよいし、代わりハードウェアタイマによってポーズ状態テーブル151の各エントリのカウントダウンが実現されてもよい。
あるいは、ポーズ状態テーブル151は、「カウンタ」フィールドの代わりに、「P」状態からの復帰予定時刻を示す「復帰予定時刻」フィールドを有していてもよい。そして、図11AのステップS206では、ポーズフレームで指定された時間をステップS206の実行時刻に足した時刻が、テーブル制御部136により計算され、「復帰予定時刻」フィールドに記録されてもよい。そして、図16の処理は、ステップS703の判断を行う代わりに、タイマ139の現在時刻が復帰予定時刻フィールドの値よりも後の時刻であるときにステップS704が実行されるように、変形されてもよい。
図17は、ノード装置が当該ノード装置自身について行うポーズ制御処理について説明するフローチャートである。例えば、図17の処理は、予め決められた間隔で定期的に実行されてもよい。
ステップS801でポート監視部137は、図10のポーズ状態管理データ154のポーズ状態SSの値を参照し、自ノード装置100がポーズ状態か否かを判断する。ポーズ状態SSの値が「P」であるとき、処理はステップS804に移行し、ポーズ状態SSの値が「N」であるとき、処理はステップS802に移行する。
ステップS802でポート監視部137は、ノード装置100自身がビジー状態か否かを判断する。例えば、バッファ部142の使用率が所定の閾値を超えていれば、ポート監視部137はノード装置100自身がビジー状態であると判断し、処理はステップS803に移行する。逆に、バッファ部142の使用率が上記の閾値以下であれば、ポート監視部137はノード装置100自身はビジー状態ではないと判断し、図17の処理を終了する。
ステップS803では、ポーズ開始のためのポーズフレーム送信処理が行われる。詳細は図18とともに後述するが、ステップS803の処理は、隣接ノード装置にポーズ要求を出すための処理である。ステップS803の実行後、図17の処理は終了する。
さて、ステップS801でポーズ状態SSの値が「P」であったとき、ステップS804でポート監視部137は、ノード装置100自身がビジー状態か否かを、ステップS802と同様の方法で判断する。「ノード装置100自身がビジー状態である」とポート監視部137が判断すると、処理はステップS806に移行する。逆に、「ノード装置100自身はビジー状態ではない」とポート監視部137が判断すると、処理はステップS805に移行する。
ステップS805では、ポーズ解除のためのポーズフレーム送信処理が行われる。詳細は図19とともに後述するが、ステップS805の処理は、隣接ノード装置に対して過去に出したポーズ要求を解除するための通知を、隣接ノード装置に出すための処理である。ステップS805の実行後、図17の処理は終了する。
ステップS806でポート監視部137は、現在のタイマ139の値とポーズ状態管理データ154のポーズ開始時刻StartTimeとの差分を、ポーズ状態管理データ154のカウンタSCountと比較する。
そしてステップS807でポート監視部137は、上記差分が既にポーズ状態管理データ154のカウンタSCountの値に達しているか否かを判断する。
上記差分が既にカウンタSCountの値に達していれば、過去のポーズ要求においてノード装置100が隣接ノード装置に要求した時間が既に経過したにもかかわらず、まだノード装置100自身がビジー状態から復帰することができていないということである。したがって、このとき処理はステップS808に移行する。
逆に、上記差分がカウンタSCountの値よりも小さければ、過去のポーズ要求においてノード装置100が隣接ノード装置に要求した時間がまだ経過していないということなので、図17の処理は終了する。
ステップS808では、ポーズ開始のためのポーズフレーム送信処理が行われる。詳細は図18とともに後述するが、ステップS808の処理は、隣接ノード装置にポーズ延長要求を出すための処理である。ステップS808の実行後、図17の処理は終了する。
図18は、ポーズ開始処理のフローチャートである。図18の処理は、図17のステップS803またはS808から呼び出される。
ステップS901でポート監視部137は、現在のタイマ139の値(すなわちステップS901が実行される時点での現在時刻)を、図10のポーズ状態管理データ154のポーズ開始時刻StartTimeに設定する。
そして、ポート監視部137は、ステップS902でポーズフレームを生成する。上述のとおり、ポーズフレームは、アドホックヘッダ410を有するアドホックフレームの1種であり、アドホックヘッダ410の後には、イーサネットフレーム420の代わりに、少なくともポーズカウンタを含む1つ以上のフィールドを有する。
本実施形態では、例えば、ポート監視部137は、アドホックヘッダ410において、ブロードキャストを表す特殊な値をGD411に設定し、ノード装置100自身のノードIDをGS412に設定し、ポーズフレームを示す値をタイプ413に設定する。また、ポート監視部137は、新たに生成したFIDをFID414に設定し、所定の値をTTL415に設定する。ポーズフレームは隣接ノード装置宛てであるから、TTL415に設定される値は1でもよい。
なお、本実施形態ではポーズフレームの形式は、アドホックヘッダ410の後に固定長のデータが続く形式なので、長さ416には、その予め決められた固定長の値が設定される。そして、ポート監視部137は、GD411から長さ416の値にしたがって、FCS417を計算する。
また、ポート監視部137は、ステップS903において、ノード装置100自身のビジー状況によりポーズカウンタ値を決定する。例えば、ポート監視部137は、バッファ部142の使用率に応じてポーズカウンタ値を決定してもよい。
なお、ここで「ポーズカウンタ値」とは、隣接ノード装置に対してフレームの送信を休止するようノード装置100が要求する期間の長さを示す値である。換言すれば、「ポーズカウンタ値」とは、ノード装置100の隣接ノード装置が、ノード装置100と接続されたポートのポーズ状態(すなわち「P」状態)を持続する時間の長さを示す値である。実施形態によっては、ポート監視部137は、ノード装置100自身のビジー状況に依存しない、予め決められた定数値をポーズカウンタ値として利用してもよい。
そして、ポート監視部137は、ステップS903においてさらに、上記のように決定したポーズカウンタ値を、ポーズ状態管理データ154のカウンタSCountに設定する。
また、ステップS904でポート監視部137は、ポーズフレームのポーズカウンタに、ステップS903で決定したポーズカウンタ値を設定する。
最後にステップS905でポート監視部137は、ポーズフレームを送信することが可能なポートをポート選択部138に選択させ、ポーズフレームを送信フレーム制御部140に出力する。また、ポート選択部138は選択結果を送信フレーム制御部140に通知する。その結果、送信フレーム制御部140は、ポート選択部138によって選択されたポートの各々から、ポーズフレームを送信する。
なお、本実施形態においてポート選択部138は、具体的には、図8のポートリンク状態テーブル152を参照し、接続状態(つまり「C」状態)のポートを、「ポーズフレームを送信することが可能なポート」として選択する。実施形態によっては、ポート選択部138は、図8のポートリンク状態テーブル152において「C」状態であり、かつ図7のポーズ状態テーブル151においてポーズ状態ではない正常な状態(つまり「N」状態)であるポートを選択してもよい。
なお、図6に示すように、本実施形態ではポート監視部137がFPGA113により実現されるので、図18のステップS902において、ポーズフレームはFPGA113により生成される。そのため、MPU114がソフトウェアにしたがってポーズフレームを生成する場合に比べて、本実施形態では、より短い時間でポーズフレームの生成が可能である。
ポーズフレームの生成にかかる時間の短縮は、ノード装置100がビジー状態に陥ってから、隣接ノード装置においてノード装置100と接続されているポートの状態が「P」に設定されてフレームの中継経路が切り替わるまでの時間の短縮につながる。すなわち、本実施形態によれば、ポーズフレームをFPGA113が生成することにより、有線アドホックネットワーク全体における中継経路の切り替えにかかる時間が短縮される。
ノード装置100がビジー状態に陥ってポーズ要求を出すことも、有線アドホックネットワーク全体として見れば、広義の不具合の発生である。しかし、上記のように、本実施形態によれば素早く代替経路への切り替えが行われる。したがって、本実施形態の有線アドホックネットワークは、不具合発生時における中継経路の素早い切り替えが望まれるようなミッションクリティカルなシステムにも好適に適用することができる、フォールトトレラントなネットワークである。
図19は、ポーズ解除処理のフローチャートである。図19の処理は図17のステップS805から呼び出される。
ステップS1001でポート監視部137は、図10のポーズ状態管理データ154のポーズ開始時刻StartTimeをクリアする。例えば、ポート監視部137は、時刻として無効な特殊な値をポーズ開始時刻StartTimeに設定することで、ポーズ開始時刻StartTimeをクリアしてもよい。
そして、ステップS1002でポート監視部137は、図18のステップS902と同様にしてポーズフレームを生成する。
続いて、ステップS1003でポート監視部137は、ポーズ状態管理データ154のカウンタSCountをクリアする。例えば、ポート監視部137は、カウンタSCountに0を設定することで、カウンタSCountをクリアしてもよい。
また、ステップS1004では、ポート監視部137は、ポーズフレームのポーズカウンタに0を設定する。ポーズカウンタに0が設定されたポーズフレームは、ポーズ状態を解除するよう通知するためのものである。
そして、ステップS1005では、図18のステップS905と同様の処理が行われる。
すなわち、ポート監視部137は、ポーズフレームを送信することが可能なポートをポート選択部138に選択させ、ポーズフレームを送信フレーム制御部140に出力する。また、ポート選択部138は選択結果として、例えば、「C」状態のポートを送信フレーム制御部140に通知する。あるいは、ポート選択部138は、「C」状態かつ「N」状態のポートを選択してもよい。
その結果、送信フレーム制御部140は、ポート選択部138によって選択されたポートの各々から、ポーズフレームを送信する。
図20は、ポート監視処理のフローチャートである。ポート監視処理は、ポート101−1〜101−xのそれぞれに対して行われる。以下、ポート101−i(1≦i≦x)に対してポート監視処理が行われる場合を例に説明する。
ステップS1101でポート監視部137は、ポート101−iが接続状態であるか否かを判断する。例えば、ポート101−iに接続されたケーブルが通信可能な状態であるかそれともリンクダウン状態であるかを示すPHYチップ111−iの出力に基づいて、ポート監視部137はステップS1101の判断を行う。
ポート101−iに接続されたケーブルが通信可能な状態であり、ポート101−iがケーブルを介して隣接ノード装置と有効に接続された状態であれば、処理はステップS1102に移行する。他方、ポート101−iに接続されたケーブルがリンクダウン状態であれば、処理はステップS1103に移行する。
ステップS1102でポート監視部137は、テーブル制御部136を介して、図8のポートリンク状態テーブル152において、ポート101−iのリンク状態Liを、「C」状態に設定する。そして、処理はステップS1101に戻る。
また、ステップS1103でポート監視部137は、テーブル制御部136を介して、図8のポートリンク状態テーブル152において、ポート101−iのリンク状態Liを、「D」状態に設定する。そして、処理はステップS1101に戻る。
以上のようにして、図20のポート監視処理は、所定の周期で繰り返し実行される。
さて、以上のとおり図1〜図20を参照して説明した本実施形態について概括すると、下記のとおりである。
上記実施形態のノード装置100は、有線接続された第1のノード装置と第2のノード装置を含む複数のノード装置を含むネットワークの中の、第1のノード装置として用いられる。上記ネットワークの具体例は、図2Aの有線アドホックネットワーク200である。
図1や図5に示すように、第1のノード装置は、複数のポート101−1〜101−xを有する。各ポートは、複数のノード装置のうち第1のノード装置以外の他のノード装置と第1のノード装置とを有線接続するためのポートである。
また、第1のノード装置であるノード装置100は、ループ検出情報を格納するループ検出情報格納手段の具体例として、ループ検出テーブル105を有する。以下、説明の便宜上、i番目(1≦i≦m)のエントリに対応する、ノード装置100が過去に送信したフレームを「第1のフレーム」ということにする。
ポート状態LP1i〜LPxiは、ノード装置100が第1のフレームを送信したときの送信先ポートである第1のポートを複数のポートの中から判別する送信先ポート判別情報の一例である。すなわち、ポート101−1〜101−xそれぞれの状態LP1i〜LPxiは、全体として、「『U』状態のポートはどのポートであるか」を判別する情報であり、i番目のエントリにおいて「U」状態のポートとは、具体的には上記の第1のポートである。
また、送信元GSiとFIDiの組は、第1のフレームを一意に識別するための第1の識別情報の例である。このように、ループ検出テーブル105のi番目のエントリのデータは、送信先ポート判別情報と第1の識別情報とを対応付けるループ検出情報の一例である。
本実施形態における第1の識別情報は、ノード装置識別情報(具体的にはノードID)である送信元GSiと、送信元ノード装置が送信元となって送信する複数のフレームの各々を一意に識別するフレーム識別情報の一例であるFIDであるFIDiとの組である。しかし、ループ検出テーブル105は、ループしたフレームを検出するためのものであるから、フレームを一意に識別することができる任意の識別情報がノードIDとFIDの組の代わりに利用可能なことは明らかである。
また、ルーティングテーブル103は、ルーティング情報を格納するルーティング情報格納手段の一例である。ルーティング情報は、複数のノード装置の各々に対して、第1のノード装置であるノード装置100の複数のポート101−1〜101−x各々からのフレーム送信可否を示す情報である状態情報を対応付けている。
例えば、ルーティングテーブル103のj番目(1≦j≦n)のエントリに注目すると、複数のノード装置のうちの、宛先GDjというノードIDにより識別されるあるノード装置に、状態情報の具体例としての状態RP1j〜RPxjが対応付けられている。ここで、状態RP1j〜RPxjは、ポート101−1〜101−x各々からのフレーム送信可否を示す。より具体的には、「U」状態と「E」状態は「送信可能」を表し、「L」状態と「D」状態と「P」状態は「送信不可」を表す。
また、上記第1のノード装置としてのノード装置100は、隣接ノード装置である上記第2のノード装置から第2のフレームを受信する受信手段として機能する図6の受信部131を有する。なお、第2のフレームを一意に識別するための第2の識別情報の具体例は、第2のフレームに含まれる、GS412とFID414の値の組である。
また、ノード装置100が有するルーティングエンジン102は、以下の処理を行うルーティング情報更新手段としても機能する。換言すれば、テーブル制御部136とポート選択部138としてのFPGA113は、ルーティング情報更新手段の具体例である。
ルーティング情報更新手段としてのFPGA113は、第2の識別情報が第1の識別情報と一致する場合(具体的にはループ検出テーブル105でエントリがヒットする場合)には、状態情報の更新を行う。
つまり、第2のフレームの宛先である宛先ノード装置に、ルーティング情報により対応付けられている状態情報が、「第1のポートからのフレーム送信が不可である」と示すように更新される。本実施形態では、具体的には、図11DのステップS223で、宛先ノード装置に対応するルーティングテーブル103のエントリにおいて、第1のポートに対応する状態が「L」に更新されることで、「第1のポートからのフレーム送信が不可である」と示される。
そして、ノード装置100は、送信手段として機能するポート選択部138、送信フレーム制御部140、および送信部141を備える。送信手段として機能するこれら各部は、ルーティング情報により宛先ノード装置に対応付けられている状態情報に基づいて、第2のフレームを送信することが可能な第2のポートを選択し、第2のポートから第2のフレームを送信する処理を行う。本実施形態では、第2のポートは次のように選択されている。
・第2の識別情報が第1の識別情報と一致しなかった場合(つまりループが検出されなかった場合)には、ルーティングテーブル103において宛先ノード装置に対応するエントリで、「U」状態または「E」状態のポートが第2のポートとして選択される。なお、本実施形態のように、ネットワーク全体での経路の収束の速さを考慮して、ステップS234において「U」状態のポートが優先的に選ばれてもよい。
・逆に、第2の識別情報が第1の識別情報と一致した場合(つまりループが検出された場合)には、ルーティングテーブル103においてヒットした、宛先ノード装置に対応するエントリで、「E」状態のポートが第2のポートとして選択される。
また、ノード装置100が備えるポート監視部137は、複数のポートについてリンクダウン状態か否かを監視するリンクダウン監視手段として機能するとともに、第1のノード装置の負荷を監視する負荷監視手段としても機能する。負荷は、例えばバッファ部142の使用率により計測される。
受信手段としての受信部131が第2のフレームを受信すると、ルーティング情報更新手段としてのポート選択部138は、次のように状態情報を更新する。すなわち、ポート選択部138は、ルーティング情報により宛先ノード装置に対応付けられている状態情報を、「リンクダウン状態と判定されたポートからのフレーム送信が不可である」と示すように更新する。本実施形態では、ステップS222とS233に示すように、「D」状態により、「フレーム送信が不可である」と示される。
また、ポート監視部137により監視される負荷が予め決められた基準を超えた場合、ステップS803に示すように、第1のポーズフレームがポート監視部137により生成されて送信手段としての送信フレーム制御部140および送信部141により隣接ノード装置に送信される。
さらに、受信手段としての受信部131が第2のポーズフレームを隣接ノード装置のいずれかから受信した後で、上記の第2のノード装置(つまり隣接ノード装置のうちの1つ)から上記の第2のフレームを受信する場合もある。
その場合、ルーティング情報更新手段としてのポート選択部138は、ステップS222とS233に例示するように、状態情報を更新する。つまり、ポート選択部138は、ルーティング情報により宛先ノード装置に対応付けられている状態情報を、「第2のポーズフレームの送信元であるポーズ要求ノード装置と接続されている第3のポートからのフレーム送信が不可である」と示すように更新する。本実施形態では、具体的には「P」状態により、「フレーム送信が不可である」と示される。
また、送信手段としてのポート選択部138により、ルーティング情報により宛先ノード装置に対応付けられている状態情報に基づいて、「第2のフレームを送信することが可能なポートが存在しない」と判断される場合もある。その場合、送信手段としてのポート選択部138、送信フレーム制御部140、および送信部141により、第2のフレームは第2のノード装置へ返送される。
また、ブロードキャスト管理テーブル104は、ブロードキャスト管理情報格納手段の具体例である。ブロードキャスト管理テーブル104は、第1のブロードキャストフレームの送信元を識別する第1のブロードキャスト送信元情報であるMACアドレスと対応付けて、第1のブロードキャストフレームの処理時刻を示す時刻情報を格納している。
また、受信手段としての受信部131が第2のブロードキャストフレームを受信したとき、下記2つの条件が成立すれば、ステップS211のように第2のブロードキャストフレームは破棄される。
・第2のブロードキャストフレームの送信元を識別する第2のブロードキャスト送信元情報が第1のブロードキャスト送信元情報と等しい。
・上記の時刻情報と現在時刻の差が所定の時間以下である。
なお、本実施形態では受信フレーム制御部133がステップS211の破棄を実行するが、受信したフレームを中継のためにノード装置100自身から送信するか否かの判断に関わるという意味では、ステップS211は送信処理の前処理である。つまり、受信フレーム制御部133は、送信手段内において前処理を担う一部としても機能している。
ところで、本実施形態では、図11A〜図11Dの処理において、各分岐ステップは、検索結果がヒットかミスヒットか、あるいは所定のフィールドに所定の値が設定されているか否かという単純な判断である。ステップS210も、エージング時間が上記「所定の時間」と同じ10msであれば、検索結果がヒットかミスヒットかという単純な判断に帰着される。したがって、スイッチング素子(換言すれば論理演算回路、より具体的にはFPGA113)により図11A〜図11Dにおける分岐を実現することができる。
また、送信手段としてのポート選択部138が第2のポートを選択する処理は、各種情報の履歴によらないので、組み合わせ論理回路により実現することができ、具体的にはプログラマブルロジックデバイスの一例であるFPGA113により実現することができる。また、一般に、FPGAの動作は、第1のビットパターンを入力とし第2のビットパターンを出力とするルックアップテーブルによりプログラムすることができる。よって、上記の送信手段としてのFPGA113は、次のようなビットパターンを入出力とするルックアップテーブルによりプログラムすることができる。
・第1のビットパターンは、複数のポートの各々が、所定の1つ以上の送信可能状態および所定の1つ以上の送信不可状態からなる所定個数の状態のうちのいずれであるかを示す。例えば、ループが検出されない場合の処理ロジックでは、「送信可能状態」とはルーティングテーブル103における「E」状態と「U」状態を含み、「送信不可状態」とはルーティングテーブル103における「L」状態と「D」状態と「P」状態を含む。
・第2のビットパターンは、複数のポートの各々を識別するポート識別情報を示す。
同様に、ループが検出された場合の処理ロジックについては、ルーティングテーブル103において送信可能状態(「E」状態)か送信不可状態(「L」、「U」、「P」、または「D」状態)かを各ポートについて示すビットパターンを入力とすればよい。
ところで、図1〜図20を参照して説明した本実施形態には様々な長所があるので、以下に説明する。
本実施形態の第1の長所は、障害発生時の経路切り替えの所要時間が短いことである。なお、広義のネットワーク障害には、リンクの物理的な断線だけでなく、あるノード装置がビジー状態に陥って実質的にフレームを受け付けられなくなることをも含む。
障害発生時の経路切り替えの本実施形態における所要時間の短さは、本実施形態とは別の技術と比較することでより明らかになるので、以下、いくつかの技術と本実施形態とを比較する。
ネットワークを構成する際には、通信ノード装置の故障やリンクの断線といった障害が発生したときにもネットワークシステム全体がダウンしないように、回線などが冗長化されることがある。例えば、OSI(Open Systems Interconnection)のレイヤ2(つまりデータリンク層)で動作する、ループを防ぐためのプロトコルであるSTP(Spanning Tree Protocol)は冗長化されたネットワークに適用される。また、レイヤ3(つまりネットワーク層)で動作するルーティングプロトコルであるOSPF(Open Shortest Path First)も、冗長化されたネットワークに適用される。また、非特許文献1のS−wireも、メッシュ状に冗長化されたネットワークに適用可能である。
STP、OSPF、およびS−wireは、ネットワークにおける経路を選択する機能、および、障害が発生したときに経路を再計算して復旧させる機能を実現する。以下、本実施形態の利点の理解を容易にするために、比較対象であるSTP、OSPF、およびS−wireについて、やや詳しく説明する。
レイヤ2のフレームスイッチングを使った冗長化構成では、ネットワーク回線がループ(すなわち円環)状に構成される。
ここで、仮に、STPによるフレームのループ防止が行われないと仮定する。すると、スイッチ装置が物理的にはループ状に接続された構成のネットワークにおいては、ブロードキャストフレームをはじめ、ありとあらゆる通信データが、ネットワーク上を永遠に循環するおそれがある。なぜなら、レイヤ2のフレームのヘッダには、TTLフィールドがないからである。
その結果、フレームが永遠にループし続け、各スイッチ装置内のCPU(Central Processing Unit)の負荷上昇を招き、最悪の場合はCPUが暴走してしまう危険性がある。フレームがループし続けることにより、ネットワークの帯域幅が浪費され、その結果、ネットワークダウンが引き起こされる危険性もある。
STPによれば、上記のように危険なフレームの循環を防ぐため、与えられた優先順位を元に、ブリッジ間でBPDU(Bridge Protocol Data Unit)と呼ばれる制御情報がやり取りされる。その結果として各ブリッジは、フレームをブロックするポートとフレームをフォワードするポートを決定する。
各ブリッジは、適宜、あるポートをブロック状態にして、ブロック状態のポートで受信したフレームを破棄する。その結果、物理的にはケーブルによってループ状に接続されたネットワークであっても、フレームがループの中をいつまでも巡り続けるという事態は防止される。
また、OSPFでは、現在のネットワークトポロジを知るために、各ルータが、すべてのルータから情報を収集する。収集された情報は、各ルータ内のデータベースに保管される。各ルータは、データベースを参照して、SPF(Shortest Path First)アルゴリズムを使ってSPFツリーを作成し、SPFツリーからルーティングテーブルを作成する。SPFツリーの作成後にルーティングテーブルが作成されるため、OSPFによれば、ルーティングループが発生しにくい。
また、S−wireによる経路作成アルゴリズム(以下、「S−wireアルゴリズム」という)では、各ノード装置が重みをポートごと管理するテーブルを有する。重みは、フレーム転送のゴールとなるゲートウェイまでにデータが経由するノード装置数(換言すればホップ数)に基づく。フレーム転送の際、各ノード装置は、重みにしたがって送信先ポートを決定する。
そして、ノード装置の故障または断線などの何らかの理由で通信が失敗した場合は、ノード装置は、失敗した当該通信のためにフレームを送出したポートに対応する重みを更新し、他のポートからフレームを再送する。その結果、ネットワーク全体としては、各ノード装置の分散協調による経路の発見および学習が実現される。
ここで、障害発生時の経路切り替えの所要時間について比較・考察すると、本実施形態は、STP、OSPF、S−wireのいずれと比べても優位にある。
STPによれば、ブリッジは、障害時の迂回経路形成(すなわち経路切り替え)の際、「Disabled」状態、「Blocking」状態、「Listening」状態、「Learning」状態、および「Forwarding」状態という5つの状態を遷移する。デフォルトのタイマ設定によれば、「Blocking」状態の最大経過時間は20秒であり、「Listening」状態と「Learning」状態にかかる転送遅延は15秒ずつである。よって、デフォルトのタイマ設定では、最大で50(=20+15+15)秒間の通信断が発生する。
また、詳しい説明は省略するが、STPを改良したRSTP(Rapid Spanning Tree Protocol)においても、経路切り替えに1秒程度を要する。
また、OSPFによれば、ルータが内部に保持しているルーティングテーブルの再計算に時間がかかってしまうため、障害発生から復旧までに数十秒という時間が必要になることがある。その理由は、OSPFでは、最短パスを求める計算のために複雑なアルゴリズム(つまりダイクストラ法)が使われるので、ルータのCPUやメモリ資源が相当消費されるからである。
S−wireアルゴリズムにおいても、重みの計算にある程度の時間がかかるため、障害時の経路切り替えには1秒程度かかる。
ミッションクリティカルな環境においては、障害時の経路切り替え時間をなるべく短くすることが望まれ、ネットワークの用途によっては、1秒ですら長いこともある。しかし、STPにおけるパスコスト計算、OSPFにおけるダイクストラ法による計算、S−wireアルゴリズムにおける重み計算のような算術計算には、明らかに、ある程度の時間が必要である。
他方で、本実施形態では、上述のように、ルーティングテーブル103やループ検出テーブル105の更新には算術計算が不要である。なぜなら、ルーティングテーブル103やループ検出テーブル105で管理されるのは、重みや距離などの数値データではなく、離散的に表される状態だからである。
なお、数値データを使わずに状態によってポートを管理しても実用上十分なパフォーマンスが得られる理由は、本実施形態では隣接ノード同士が有線接続されており、通信品質が安定しているためである。つまり、通信品質の変動が激しい無線通信においては、通信品質の変化に応じて適切な経路を選択することが好ましいので、一般には通信品質の変化を反映する算術演算が行われるが、本実施形態では通信品質の変化を考慮する必要がない。
上記のように本実施形態では、ルーティングテーブル103やループ検出テーブル105の更新には算術計算が不要である。そのため、オン・オフのスイッチングを行う論理演算回路(具体的には例えばFPGA113)によって容易にルーティングエンジン102を実現することができる。よって、ルーティングエンジン102は、MPU114によるソフトウェア制御で実現される場合と比較して、本実施形態では、より高速に動作する。
したがって、本実施形態によれば、障害発生時における経路切り替えに要する時間は、「ある1つのノード装置100内でルーティングテーブル103が更新されるのにかかる時間」という意味では、数μsにすぎない。
もちろん、有線アドホックネットワーク全体として経路が切り替わるまでには、図2Bに例示したようなバックトラックが発生する場合もあり、その場合、ノード装置間でのフレームの返送にかかる時間もゼロではない。しかし、それでもほとんどの場合は、1秒よりも遥かに短い時間で、有線アドホックネットワーク全体として経路が切り替わる。つまり、バックトラックの回数が異常に多くない限りは、有線アドホックネットワーク全体として見たとしても、1秒よりも遥かに短い時間で経路が切り替わる。
本実施形態によれば、各ノード装置100は、ループ検出テーブル105を利用することで、何ら算術演算を行うことなしに、しかも自己完結的にループを検出し、ループが発生する経路に対応する送信先ポートを学習することができる。なおここで「自己完結的」というのは、他のノード装置との間でネットワークトポロジに関する情報をやりとりしていないことを指している。
このように、各ノード装置100は自己完結的に振る舞っているにもかかわらず、図11DのステップS226または図11CのステップS238により、有線アドホックネットワーク全体では、図2Bのような、分散協調による深さ優先探索が実現される。そして、深さ優先探索の結果として新たな経路が発見され、その新たな経路に切り替わるまでの時間が、本実施形態では、上記のように1秒よりも遥かに短い。
このように障害発生時にも短い時間で経路が切り替わるため、本実施形態による有線アドホックネットワークは、ミッションクリティカルなネットワークシステムにも好適に適用することができる。例えば、1秒間に数回〜数十回程度の頻度でデータを出力するセンサを利用したセンサネットワークに本実施形態を適用する場合、1秒よりも遥かに短い時間で経路の切り替えが完了するため、障害発生時のデータ消失の蓋然性は低い。
また、本実施形態の利点は他にもある。具体的には、本実施形態によれば、ネットワーク管理者が有線アドホックネットワークのトポロジを事前に設計したり、ノード装置100にパラメタなどを設定したりする必要がない、という点である。
設計や設定にかかる手間は、ネットワークに含まれるノード装置の数が増えるにつれて深刻化する。よって、例えばセンサネットワークなどの、ネットワーク内に多数のノード装置が含まれる応用分野では、「設計や設定をせずにすぐに使える」という特徴は、非常に好ましい特徴である。
例えば、STPやRSTPは、事前の設定を必要とせずに動作可能なように設計されたプロトコルではあるが、実用上は、事前のネットワーク設計が必要なことが多い。具体的には、ネットワーク内の適切な位置にある適切な性能の2つのノード装置が、それぞれルートブリッジと、ルートブリッジのバックアップのブリッジとなるようにしておく設計が、実用上は求められる。その理由は、ある程度ネットワークの規模が大きくなると、障害時に経路を再形成するまでの収束時間が長くなり、すべてのノード装置が同じ情報を共有するまでデータの転送は再開されないため、結果としてネットワークがダウンすることがあるためである。
また、OSPFでは、1つのネットワークを複数のエリアに分割し、各エリア内とエリア間のルーティングとに分ける、というネットワーク設計が必要であり、さらにそのネットワーク設計にしたがってルータを設定する作業が必要である。
このようなネットワーク設計が必要な理由の1つは、ネットワークの規模が大きくなるにつれ、障害やネットワークトポロジ変更の発生確率が高まり、頻繁にSPFツリーの再計算が必要となるからである。また、もう1つの理由は、ルータの増加にともない、データベースを構築するためにルータ同士が交換するLSA(Link-State Advertisement)の数が増えるためである。
そこで、OSPFを利用する場合には、ネットワークを複数のエリアに分割してマルチエリアを有するネットワークを構築することで、LSAが届く範囲を分割し、ネットワークの変化をエリア内にとどめ、パフォーマンスを向上させることが広く行われている。
他方で、本実施形態によれば、各テーブルは、空の初期状態からノード装置100により自動的に学習される。つまり、事前に各テーブルにパラメタを設定する必要がない。
また、図11A〜図20に示した各種処理は、「どのノード装置同士が接続されているか」あるいは「どのポート同士が接続されているか」ということに関係なく実現可能な処理である。つまり、本実施形態によれば、任意の仕方で複数のノード装置を有線接続するだけで、有線アドホックネットワークが構築され、分散協調により適宜経路が選択されてフレームが中継されるようになる。
そして、上記のように本実施形態によれば、新たな経路が選択されるまでのコンバージェンス(収束)に、1秒より遥かに短い時間(例えば数μs)しかかからない。換言すれば、本実施形態では、実用上問題のない範囲に収束時間を抑えるために事前にネットワーク設計を行うという必要性が、ないのである。このように、本実施形態によれば、煩雑な設計・設定作業を行わずとも、適切なパフォーマンスと冗長化が実現される。
さらに本実施形態には、ネットワーク資源を十分に利用することが可能であるという利点もある。この利点は、STPおよびRSTPと比較するとよりよく理解される。
STPおよびRSTPでは、物理的にはループ状に接続されたネットワーク上をフレームが無限にループすることがないように、平常時は、冗長化されたリンクに接続されたポートがブロック状態に設定される(すなわちブロッキング・ポートとして設定される)。換言すれば、平常時に利用される経路のほかに、平常時は利用されることがなく障害発生時にのみ利用される予備の経路が存在する。したがって、平常時は、ネットワーク資源(つまり予備の経路)が休眠している。
それに対して、本実施形態では、有線アドホックネットワーク内のリンクは、平常時用と障害発生時用で区別されているわけではないので、ネットワーク資源を休眠させることなく、十分に利用することが可能である。
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
上記実施形態では、ルーティングエンジン102がFPGA113により実現されるが、ASIC(Application Specific Integrated Circuit)によりルーティングエンジン102が実現されてもよい。または、MPU114がファームウェアプログラムを実行することでルーティングエンジン102が実現されてもよい。ファームウェアプログラムは、コンピュータ読み取り可能な任意の記憶媒体に格納されて提供されてもよい。
上記実施形態では、各種データ例をテーブル形式で示したが、テーブル形式は、CAM115というハードウェアを用いた高速な検索が実現可能な、好ましいデータ形式の一例として例示したものである。実施形態によっては、テーブル形式以外の形式で各種データをノード装置100が保持していてもよい。
また、図6のテーブル格納部135は、上記のようにCAM115とSRAM116の組み合わせにより実現されてもよいが、CAM115だけにより、またはSRAM116だけにより実現されてもよい。テーブル格納部135は、その他の任意の1種類以上の記憶装置の組み合わせによっても実現可能である。
また、図3のアドホックフレーム400の形式は一例である。アドホックヘッダ410におけるフィールドの順序や各フィールドの長さは実施形態に応じて任意である。また、タイプ413の具体的な値、ノード装置100がFID414の値を生成する方法、TTL415の初期値、FCS417の算出アルゴリズムなども、実施形態に応じて任意に定めることができる。
また、図2Aにおいて、例えばセンサ204は、ノード装置100eの外部に図示されている。しかし、実施形態によっては、センサをノード装置が内蔵してもよい。例えば、図5の各ハードウェアに加えて、さらにノード装置が内蔵センサを有してもよい。
そして、図5の汎用LANポート106の代わりに内蔵センサが、イーサネットフレーム形式のデータ(すなわち内蔵センサが感知した結果のデータ)を、L2SW部112へと出力してもよい。あるいは、内蔵センサは、感知した結果のデータをMPU114に出力し、内蔵センサが感知した結果のデータを含むイーサネットフレーム420をMPU114が生成してFPGA113に出力してもよい。
また、図2Aでは、センサ204が汎用LANポート106eを介してノード装置100eに接続されているが、センサ204とノード装置100eとの接続インタフェイスは、汎用LANポート106e以外の任意のインタフェイスでもよい。
なお、上記実施形態では、有線アドホックネットワークと外部ネットワークとの親和性を考慮して、ブロードキャスト管理テーブル104を用いたブロードキャストフレームの同一性の判定が行われる。しかしながら、外部ネットワークと接続されずに孤立して運用される有線アドホックネットワークにおいては、各ノード装置は、ブロードキャスト管理テーブル104を備えなくてもよく、図11BのステップS210、S211、S214は省略可能である。