以下に、本願の開示する通信装置及び通信制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する通信装置及び通信制御方法が限定されるものではない。
図1は、通信装置を含むシステムの構成を示す概略図である。図1に示すように、通信装置1は、ネットワーク上に複数配置されている。各通信装置1は、複数の端末装置2が接続されている。さらに、通信装置1同士が接続され、端末装置2は、通信装置を介して他の端末装置2と通信を行うことが可能である。
通信装置1は、例えば、L2スイッチである。通信装置1は、端末装置2から送信されたフレームを受信し、フレーム内に格納されたアドレス情報などを基に、指定された宛先へのフレームの転送処理を行う。例えば、端末装置2がイーサネット(登録商標)フレームやIP(Internet Protocol)フレームを送信する場合を考える。この場合、通信装置1は、イーサネットフレーム内に格納されたMACアドレスやIPフレーム内に格納されたIPアドレスなどを基にフレームの転送処理を行う。
図2は、通信装置のブロック図である。図2に示すように、通信装置1は、スイッチ制御部11、回線IF(InterFace)回路12及び制御回路13を有する。
回線IF回路12は、複数の回線ポートを収容する。そして、回線IF回路12は、外部装置とのインタフェース機能、並びに、受信フレーム処理及び送信フレーム処理などを提供する。回線IF回路12は、一般的には脱着可能暗モジュールやカードとして提供される。例えば、回線IF回路12は、外部装置と接続するためのポートを複数有する。そして、回線IF回路12は、各ポートを介して他の通信装置1や端末装置2と通信を行う。
スイッチ制御部11は、通信装置1内において回線IF回路12との間でデータ信号の送受信を行う。スイッチ制御部11は、回線IF回路12の間のフレーム転送のスイッチ機能を提供する回路である。
制御回路13は、通信装置1内においてスイッチ制御部11及び回線IF回路12の間で制御信号の送受信を行う。制御回路13は、スイッチ制御部11及び回線IF回路12の各種設定、故障時のアラームの通知や統計情報の収集を実行する。本実施例では、制御回路13に、制御端末3が接続している。
制御端末3は、通信装置1のパラメータ設定などの制御を行うためのコンピュータである。制御端末3は、利用者から登録するMACアドレスの入力を受ける。そして、制御端末3は、入力されたMACアドレスを入力情報として制御回路13へ送信する。また、制御端末3は、制御回路13からデータの入力を受ける。ここで、制御端末3とスイッチ制御部11は、実際には、制御回路13を介してデータの送受信を行うが、以下では、説明の都合上、制御端末3とスイッチ制御部11とが直接データの送受信を行っているように説明する場合がある。
次に、図3を参照して、スイッチ制御部11について詳細に説明する。図3は、スイッチ制御部のブロック図である。
スイッチ制御部11は、テーブル管理部10、MACアドレステーブル20及び転送部30を有する。
MACアドレステーブル20は、バンクと呼ばれる複数の領域に分割される。MACアドレステーブル20は、バンク毎にMACアドレスとそのMACアドレスの宛先にフレームを送信する場合の送信先のポート番号との組み合わせの情報が登録される。後述するMACアドレスの登録時における衝突回避処理の時を除き、異なるバンクに同じMACアドレスが登録されることはない。すなわち、MACアドレステーブル20には、MACアドレスとポート番号とが1対1で対応付けられて登録される。MACアドレステーブル20は、例えば、図4のような状態で情報が登録される。図4は、MACアドレステーブルの一例の図である。
また、MACアドレステーブル20には、スタティックMACアドレスとダイナミックMACアドレスという2種類のMACアドレスが登録される。スタティックMACアドレスは、利用者が意図的に登録したポートとの対応が固定のMACアドレスである。ダイナミックMACアドレスは、スイッチ制御部11により適当なポート番号が対応付けられる、すなわち、流動的にポートとの対応付けが変化するMACアドレスである。このMACアドレステーブルが、「MACアドレステーブル」の一例にあたる。
転送部30は、端末装置2から送信されたフレームを回線IF回路12から受信する。そして、転送部30は、フレームに格納されているMACアドレスを取得する。次に、転送部30は、取得したMACアドレスに対応するポート番号をMACアドレステーブル20から取得する。そして、転送部30は、取得したMACアドレスに対応するポートを有する回線IF回路12へフレームを転送する。
また、転送部30は、取得したMACアドレスがMACアドレステーブル20に登録されていない場合、Floodingを行い送信先のポート番号を特定する。そして、転送部30は、取得したMACアドレス及び特定した送信先のポート番号をテーブル管理部10へ出力する。
図4に示すMACアドレステーブル20を用いた場合を例に説明する。転送部30は、例えば、受信したフレームからMACアドレスとしてMAC#Aを取得すると、MACアドレステーブル20からMAC#Aに対応するポートが2番のポートであることを把握する。そして、転送部20は、2番のポートを有する回線IF回路12へフレームを転送する。
図3に戻って説明を続ける。テーブル管理部10は、MACアドレステーブル20の登録情報を管理する。例えば、テーブル管理部10は、登録するMACアドレス及びそのMACアドレスに対応するポート番号の入力を制御端末3から受ける。テーブル管理部10は、ポート番号を基にMACアドレステーブル20における登録先のエントリを確定し、そのエントリにMACアドレスが登録されていない、すなわち空きエントリであれば、そのエントリに受信したMACアドレス及びポート番号を登録する。空きエントリでない場合、テーブル管理部10は、後で説明するエントリの衝突を回避するための衝突回避処理を行い、受信したMACアドレス及びポート番号を登録する。衝突回避処理を実行しても衝突が回避できない場合、テーブル管理部10は、登録不可の通知を制御端末3へ通知する。このように、制御端末3から入力されたMACアドレス及びそのMACアドレスに対応するポートの組み合わせで登録されたMACアドレスは、スタティックMACアドレスである。以下では、MACアドレス及びポート番号の対応をMACアドレステーブル20へ登録することを、単に「MACアドレスの登録」という。
また、テーブル管理部10は、MACアドレス及び転送部30が特定したそのMACアドレスに対応する送信先のポートの情報の入力を転送部30から受ける。そして、テーブル管理部10は、制御端末3からMACアドレス及びそのMACアドレスに対応するポート番号の入力を受けた場合と同様に、衝突回避処理などを行い、MACアドレスを登録する。
次に、図5を参照して、テーブル管理部10による衝突回避処理を含むMACアドレステーブル20の管理について詳細に説明する。図5は、テーブル管理部の詳細を示すブロック図である。
テーブル管理部10は、テーブル制御管理部101、ハッシュ部102、衝突アドレス一時管理部103、FILO(First In Last Out)バッファ104、衝突回避制御部105、空エントリ管理部106及び登録結果出力部107を有する。以下では、制御端末3が、スタティックMACアドレスをテーブル管理部10へ入力した場合で説明する。
テーブル制御管理部101は、衝突検出部111及び登録部112を有する。衝突検出部111は、MACアドレス及びポート番号の入力を制御端末3から受ける。以下では、制御端末3から受信したMACアドレスを、「受信MACアドレス」という。この受信MACアドレスが、「第1MACアドレス」の一例にあたる。
衝突検出部111は、MACアドレステーブル20における各バンクの優先度の情報を有する。そして、衝突検出部111は、受信MACアドレスの最高の優先度のバンクに対応するハッシュ計算をハッシュ部102へ指示する。
その後、衝突検出部111は、受信MACアドレスのハッシュ計算の計算結果の入力をハッシュ部102から受ける。そして、衝突検出部111は、指定したバンクにおける受信した計算結果に応じたエントリに既にMACアドレスが登録されているか否かを判定する。MACアドレスが未登録のエントリ、すなわち空きエントリの場合、衝突検出部111は、空きエントリの情報及び受信MACアドレスを登録部112に出力する。以下では、このエントリが空きエントリであるか否かを判定する処理を「衝突検出処理」という。
これに対して、エントリに既にMACアドレスが登録されている場合、衝突検出部111は、次の優先度のバンクに対応するハッシュ計算をハッシュ部102へ指示する。次に、衝突検出部111は、次のバンクに対して、最初のバンクに対する衝突検出処理と同様の処理を行う。
衝突検出部111は、空きエントリが検出される、もしくは、全てのバンクで衝突が検出されるまで、バンクの優先度にしたがって衝突検出処理を繰り返す。
いずれかのバンクで空きエントリが検出された場合、衝突検出部111は、検出した空きエントリの情報及び受信MACアドレスを登録部112へ出力する。受信MACアドレスに関して空きエントリが検出できた場合、衝突検出部111は、衝突検出処理を終了する。
これに対して、全てのバンクで衝突が発生した場合、衝突検出部111は、受信MACアドレスを衝突アドレス一時管理部103へ出力する。
さらに、衝突検出部111は、衝突の発生及び衝突が発生した各バンクのエントリの情報を衝突回避制御部105へ送信する。その後、衝突検出部111は、次に衝突検出処理を行う対象とするMACアドレスが格納されたエントリの情報を衝突回避制御部105から取得する。以下では、衝突回避制御部105から通知された衝突検出処理の対象とするMACアドレスを、「対象MACアドレス」という。
その後、衝突検出部111は、取得したエントリに登録された対象MACアドレス及びそのエントリのMACアドレステーブル20上での場所の情報のFILOバッファ104への格納を衝突アドレス一時管理部103へ指示する。以下では、FIROバッファ104に格納されているデータであるMACアドレス及びそのエントリのMACアドレステーブル20上での場所の情報をまとめて「エントリ情報」という。
そして、衝突検出部111は、バンクの優先度にしたがって、対象MACアドレスについて、衝突検出処理を繰り返す。いずれかのバンクで空きエントリが検出された場合、衝突検出部111は、検出した空きエントリの情報及び対象MACアドレスを登録部112へ出力する。対象MACアドレスに関して空きエントリが検出できた場合、衝突検出部111は、衝突検出処理を終了する。
これに対して、対象MACアドレスに関して空きエントリが検出されない場合、衝突検出部111は、対象MACアドレスでの衝突の発生及び衝突が発生した各バンクのエントリの情報を衝突回避制御部105へ送信する。その後、衝突検出部111は、新たな対象MACアドレスを衝突回避制御部105から取得し、衝突検出処理を繰り返す。
そして、FILOバッファ104に空きが無くなる前に、対象MACアドレスに関して空きエントリが検出できた場合、衝突検出部111は、検出した空きエントリの情報及び対象MACアドレスを登録部112へ出力し、衝突検出処理を終了する。
これに対して、衝突検出処理を繰り返すうちにFILOバッファ104に空きが無くなった場合、衝突検出部111は、FILOバッファ104を空にする指示を衝突アドレス一時管理部103に通知する。そして、衝突検出部111は、受信MACアドレスの登録不可を登録部112に通知し、MACアドレスの登録処理を終了する。この衝突検出部111が、「検出部」の一例にあたる。
登録部112は、受信MACアドレスに関して空きエントリが検出された場合、空きエントリの情報及び受信MACアドレスの入力を衝突検出部111から受ける。そして、登録部112は、MACアドレステーブル20の空きエントリに受信MACアドレスを登録し、MACアドレスの登録処理を終了する。
登録部112は、受信MACアドレスに関して全てのバンクで衝突が発生した場合、受信MACアドレスの入力を衝突検出部111から受ける。そして、登録部112は、自己が有する記憶領域(不図示)に受信MACアドレスを格納し保持する。
その後、登録部112は、対象MACアドレスに関して空きエントリが検出された場合、空きエントリの情報及び対象MACアドレスの入力を衝突検出部111から受ける。そして、登録部112は、MACアドレステーブル20の空きエントリに対象MACアドレスを登録する。
続いて、テーブル制御管理部101は、FILOバッファ104に格納された最終登録エントリ情報が示すMACアドレスを空きエントリに順次登録していく追出処理を行う。以下では、追出処理の詳細について説明する。
登録部112は、最終登録エントリ情報の削除を衝突アドレス一時管理部103に指示する。最終登録エントリ情報とは、FILOバッファ104が保持するエントリ情報の内、最後に格納されたエントリ情報である。ここでは、まず空きエントリが検出された対象MACアドレスに対応するエントリ情報が削除される。
さらに、登録部112は、登録した対象MACアドレスの元の登録先エントリ(以下、「元エントリ」という場合がある。)の登録内容を削除し、元エントリを空きエントリにする。その後、登録部112は、空きエントリとなったエントリの情報を空エントリ管理部106に通知する。空エントリ管理部106に通知する空きエントリの情報には、空きエントリのMACアドレステーブル20上の場所などが含まれる。
登録部112は、最終登録エントリ情報の送信を衝突アドレス一時管理部103に通知する。その後、登録部112は、最終登録エントリ情報を衝突アドレス一時管理部103から取得する。以下、登録部112が衝突アドレス一時管理部103から取得した最終登録エントリ情報が示すMACアドレスを「追出MACアドレス」という。
そして、登録部112は、空きエントリの情報を空エントリ管理部106から取得する。その後、登録部112は、空エントリ管理部106から通知された空きエントリに追出MACアドレスを登録する。
さらに、登録部112は、取得した最終登録エントリ情報からエントリの場所の情報を取得する。このエントリの場所は、追出MACアドレスの元エントリの場所にあたる。そして、登録部112は、取得したエントリの場所を基に、MACアドレステーブル20における追出MACアドレスの元エントリを抽出する。その後、登録部112は、追出MACアドレスの元エントリの登録内容を削除し、元エントリを空きエントリにする。そして、登録部112は、空きエントリとなった元エントリの情報を空エントリ管理部106に通知する。
また、登録部112は、最終登録エントリ情報のFILOバッファ104からの削除を衝突アドレス一時管理部103に指示する。これにより、登録した追出MACアドレスのエントリ情報がFILOバッファ104から削除される。
次に、登録部112は、FILOバッファ104が空になったか否かを判定する。FIOバッファ104が空になっていなければ、登録部112は、FILOバッファ104が空になるまで追出処理を繰り返す。
FILOバッファ104が空になった場合、登録部112は、空エントリ管理部106が記憶する空きエントリの情報を取得する。そして、登録部112は、自己が保持する受信MACアドレスを空きエントリに格納し、追出処理を終了する。
その後、登録部112は、受信MACアドレスの登録完了を登録結果出力部107へ通知する。これにより、テーブル制御管理部101は、MACアドレスの登録の処理を終了する。対象MACアドレス及びそれに対応する追出MACアドレスが、「第2〜第3MACアドレス」の一例にあたる。
ハッシュ部102は、MACアドレステーブル20の各バンクの優先度の情報を有する。また、ハッシュ部102は、MACアドレステーブル20の各バンクに対応するハッシュ計算式を有する。バンク毎のハッシュ計算式は、それぞれ異なる。バンク毎のハッシュ計算式が異なることにより、MACアドレスに対してハッシュ計算を用いて登録を行う場合に、あるバンクで登録できなくても、他のバンクに登録できるようになる。
ハッシュ部102は、受信MACアドレス又は対象MACアドレスのハッシュ計算の指示を衝突検出部111から受ける。ハッシュ部102は、各バンクの優先度を基にバンクを選択する。そして、ハッシュ部102は、選択したバンクに応じたハッシュ計算式を用いて指定されたMACアドレスに対するハッシュ計算を行う。その後、ハッシュ部102は、ハッシュ計算の計算結果を衝突検出部111へ出力する。
FILOバッファ104は、データの格納が遅い順に、先に出力する先読み後出しのバッファである。すなわち、FILOバッファ104では、格納しているエントリ情報のうち、最後に格納されたエントリ情報が出力される。ただし、FILOバッファ104以外にも、データの格納が遅い順にデータを取得できる記憶装置であれば他の記憶装置を用いることもできる。例えば、データの格納時刻をデータとともに保持しておき、データの取得要求に合わせて格納時刻が最も古いものを出力する記憶装置を用いてもよい。
衝突アドレス一時管理部103は、エントリ情報のFILOバッファ104への格納指示を衝突検出部111から受ける。そして、衝突アドレス一時管理部103は、衝突検出部111から受信したエントリ情報をFILOバッファ104へ格納する。
また、衝突アドレス一時管理部103は、最終登録エントリ情報の取得の指示を登録部112から受ける。そして、衝突アドレス一時管理部103は、FILOバッファ104からエントリ情報を読み出し、登録部112へ出力する。
また、衝突アドレス一時管理部103は、FILOバッファ104から最終登録エントリ情報の削除の指示を登録部112から受ける。そして、衝突アドレス一時管理部103は、FILOバッファ104の先頭のエントリ情報を削除する。
また、衝突アドレス一時管理部103は、FILOバッファ104を空にする指示を衝突検出部111から受ける。そして、衝突アドレス一時管理部103は、FILOバッファ104を空にする。
衝突回避制御部105は、MACアドレステーブル20の各バンクの優先度の情報を有する。衝突回避制御部105は、受信MACアドレス及び対象MACアドレスの衝突の発生及び衝突が発生した各バンクのエントリの情報の入力を衝突検出部111から受ける。
受信MACアドレスの衝突の場合、衝突回避制御部105は、最も優先度の高いバンクに含まれる衝突先のエントリを抽出する。また、対象MACアドレスの衝突の場合、衝突回避制御部105は、対象MACアドレスが登録されているエントリを含むバンクの次の優先度のバンクに含まれる衝突先のエントリを抽出する。また、優先度が最低のバンクを使用した場合、衝突回避制御部105は、次は最も優先度の高いバンクに戻ってエントリの抽出を行う。そして、衝突回避制御部105は、抽出したエントリの情報を衝突検出部111へ出力する。
ここで、本実施例では、バンクを均等に使用するため、優先度を順に低いものに変えていきながらエントリを抽出するバンクを選択したが、バンクの選択はこれに限らない。例えば、衝突回避制御部105は、対象MACアドレスが登録されているエントリを含むバンク以外のバンクで最も優先度が高いバンクを選択してもよい。この場合、選択されるバンクに偏りが出る場合がある。この衝突回避制御部105が、「取得部」の一例にあたる。
空エントリ管理部106は、空きエントリの情報を登録部112から取得し保持する。そして、空エントリ管理部106は、空きエントリの情報の送信要求を登録部112から受けると、保持する空きエントリの情報を登録部112へ送信し、保持する空きエントリの情報を削除する。
登録結果出力部107は、受信MACアドレスの登録不可の通知を登録部112から受信する。そして、登録結果出力部107は、受信MACアドレスの登録不可の通知を制御端末3へ出力し、利用者へ受信MACアドレスの登録不可を通知する。
また、登録結果出力部107は、受信MACアドレスの登録完了の通知を登録部112から受信する。そして、登録結果出力部107は、受信MACアドレスの登録完了の通知を制御端末3へ出力し、利用者へ受信MACアドレスの登録完了を通知する。
制御端末3は、受信MACアドレスの登録不可の通知を登録結果出力部107から受信すると、モニタへ通知内容を表示するなどして利用者に受信MACアドレスの登録不可を通知する。また、制御端末3は、受信MACアドレスの登録完了の通知を登録結果出力部107から受信すると、モニタへ通知内容を表示するなどして利用者に受信MACアドレスの登録完了を通知する。
次に、図6〜12を参照して、本実施例に係る通信装置によるMACアドレス登録処理について説明する。ここでは、1つ目の対象MACアドレスで空きエントリが検出される場合で説明する。図6は、受信MACアドレスを用いた衝突検出処理の状態を表す図である。図7は、対象MACアドレスをFILOバッファに格納した状態を表す図である。図8は、対象MACアドレスを用いた衝突検出処理の状態を表す図である。図9は、検出された空きエントリに対象MACアドレスを格納した状態を表す図である。図10は、対象MACアドレスの情報を元エントリ及びFILOバッファから削除した状態を表す図である。図11は、受信MACアドレスに対する追出処理の状態を表す図である。図12は、MACアドレスの登録処理の完了後の状態を表す図である。ここでは、MACアドレステーブル20がバンク21〜23という3つのバンクに分割されている場合で説明する。また、説明の都合上、FILOバッファ104に格納されているエントリ情報もMACアドレスで表している。さらに、ここでは、バンク21が最も優先度が高く、バンク22が次の優先度を有し、バンク23が最も低い優先度を有する場合で説明する。
衝突検出部111は、図6に示すように、MAC#Aに対してバンク21〜23毎のハッシュ計算式を用いた計算結果に対応する各バンク21〜23のエントリを確認し、バンク21〜23のいずれでも衝突が発生したことを確認する。この状態では、FILOバッファ104は空である。
そこで、衝突検出部111は、最も優先度が高いバンク21でMAC#Aと衝突したMAC#Bが格納されているエントリを対象MACアドレスとする指示を衝突回避制御部105から受ける。その後、衝突アドレス一時管理部103は、衝突検出部111からの指示を受けて、図7に示すように、対象MACアドレスであるMAC#Bのエントリ情報をFILOバッファ104に格納する。
次に、図8に示すように、衝突検出部111は、対象MACアドレスであるMAC#Bに対してバンク21〜23毎のハッシュ計算式を用いた計算結果に対応する各バンク21〜23のエントリを順次確認する。ここで、MAC#Bの計算結果は、バンク21に含まれるMAC#Bが登録されたエントリと衝突する。そこで、衝突検出部111は、次の優先度を有するバンク22を確認し、MAC#Bのハッシュ計算の計算結果に対応するエントリが空きエントリであることを検出する。これにより、衝突検出部111による衝突検出処理は終了する。
そこで、図9に示すように、登録部112は、検出した空きエントリにMAC#Bを登録する。この状態では、MACアドレステーブル20上に、MAC#Bが登録されたエントリが2つ存在する。さらに、FILOバッファ104の先頭にMAC#Bのエントリ情報が格納されている。
そこで、図10に示すように、登録部112は、MACアドレステーブル20上の対象MACアドレスの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部106は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部103は、登録部112からの指示を受けて、FILOバッファ104の先頭にあるMAC#Bのエントリ情報を削除する。そして、登録部112は、FILOバッファ104が空になったか否かを判定する。この場合は、FILOバッファ104が空になっている。
そこで、図11に示すように、登録部112は、自己が記憶するMAC#Aを、空エントリ管理部106が記憶する空きエントリに登録する。これにより登録処理が完了し、MACアドレステーブル20及びFILOバッファ104は、図12で示す状態になる。以上で、最初の対象MACアドレスで空きエントリが検出された場合のMACアドレスの登録処理が完了する。
次に、図13〜22を参照して、最初の対象MACアドレスの衝突検出処理において空きエントリが検出できなかった場合の動作について説明する。ここでは、受信MACアドレスをMAC#A、最初の対象MACアドレスをMAC#B、2番目の対象MACアドレスをMAC#Eとして説明する。図13は、最初の対象MACアドレスを用いた衝突検出処理の状態を表す図である。図14は、2番目の対象MACアドレスをFILOバッファに格納した状態を表す図である。図15は、2番目の対象MACアドレスを用いた衝突検出処理の状態を表す図である。図16は、検出された空きエントリに2番目の対象MACアドレスを格納した状態を表す図である。図17は、2番目の対象MACアドレスの情報を元エントリ及びFILOバッファから削除した状態を表す図である。図18は、最初の対象MACアドレスに対する追出処理の状態を表す図である。図19は、追出処理により空きエントリに最初の対象MACアドレスを格納した状態を表す図である。図20は、最初の対象MACアドレスの情報を元エントリ及びFILOバッファから削除した状態を表す図である。図21は、受信MACアドレスに対する追出処理の状態を表す図である。図22は、MACアドレスの登録処理の完了後の状態を表す図である。
衝突検出部111は、最初のMACアドレスであるMAC#Bに対してバンク21〜23毎のハッシュ計算式を用いた計算を行い、図13に示すように、バンク21〜23のいずれでも衝突が発生したことを確認する。
そこで、衝突検出部111は、優先度が次に高いバンク22でMAC#Bと衝突したMAC#Eが格納されているエントリを対象MACアドレスとする指示を衝突回避制御部105から受ける。その後、衝突アドレス一時管理部103は、衝突検出部111からの指示を受けて、図14に示すように、2番目の対象MACアドレスであるMAC#Eのエントリ情報をFILOバッファ104に格納する。
次に、図15に示すように、衝突検出部111は、2番目の対象MACアドレスであるMAC#Eに対してバンク21〜23毎のハッシュ計算式を用いた計算結果に対応する各バンク21〜23のエントリを順次確認する。ここでは、衝突検出部111は、バンク23におけるMAC#Eのハッシュ計算の計算結果に対応するエントリが空きエントリであることを検出する。これにより、衝突検出部111による衝突検出処理は終了する。
そこで、図16に示すように、登録部112は、検出した空きエントリにMAC#Eを登録する。この状態では、MACアドレステーブル20上に、MAC#Eが登録されたエントリが2つ存在する。さらに、FILOバッファ104の先頭にMAC#Eのエントリ情報が格納されている。
そこで、図17に示すように、登録部112は、MACアドレステーブル20上のMAC#Eの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部106は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部103は、登録部112からの指示を受けて、FILOバッファ104の先頭にあるMAC#Eの情報を削除する。
次に、登録部112は、FILOバッファ104が空になったか否かを判定する。ここでは、FILOバッファ104は空ではないので、図18に示すように、登録部112は、追出処理をさらに行い、FILOバッファ104の最終登録エントリ情報に含まれるMAC#Bを、空エントリ管理部106が記憶する空きエントリに登録する。この登録後のMACアドレステーブル20及びFILOバッファ104の状態が図19に示される状態である。この状態では、MACアドレステーブル20上に、MAC#Bが登録されたエントリが2つ存在する。さらに、FILOバッファ104の先頭にMAC#Bのエントリ情報が格納されている。
そこで、図20に示すように、登録部112は、MACアドレステーブル20上のMAC#Bの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部106は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部103は、テーブル制御管理部101からの指示を受けて、FILOバッファ104の先頭にあるMAC#Bの情報を削除する。
次に、登録部112は、FILOバッファ104が空になったか否かを判定する。ここでは、FILOバッファ104が空になっているので、図21に示すように、登録部112は、自己が記憶するMAC#Aを、空エントリ管理部106が記憶する空きエントリに登録する。この登録部112が、「格納部」の一例にあたる。
これにより、MACアドレスの登録処理が完了し、MACアドレステーブル20及びFILOバッファ104は、図22で示す状態になる。以上で、最初の対象MACアドレスに関して空きエントリが無かった場合のMACアドレスの登録処理が完了する。ここでは、2番目の対象MACアドレスに関して空きエントリが検出される場合について説明したが、2番目以降の対象MACアドレスに関して空きエントリが検出されない場合にも、同様の処理を繰り返すことで、受信MACアドレスの登録を行うことができる。
次に、図23及び24を参照して、FILOバッファ104に空きが無くなった場合テーブル管理部10の処理について説明する。図23は、FILOバッファに空きが無くなった状態の図である。また、図24は、FILOバッファを空にして元に戻した状態の図である。
テーブル管理部101が衝突検出処理を繰り返したが空きエントリが見つからない場合、FILOバッファ104にエントリ情報が蓄積され、図23に示すように、FILOバッファ104に空きが無くなる。その場合、衝突アドレス一時管理部103は、FILOバッファ103に空きが無くなったことを衝突検出部111に通知する。衝突検出部111は、衝突検出処理を停止する。
衝突検出部111は、FILOバッファ103に空きが無くなった通知を受けて、FILOバッファ103を空にする指示を衝突アドレス一時管理部103に通知する。FILOバッファ103は、FILOバッファ103を空にする。これにより、図24に示すように、FILOバッファ104は保持するエントリ情報が無くなる。またこの場合、MACアドレステーブル20のエントリに対する登録や削除は行われていない。そのため、アドレステーブル20及びFILOバッファ104は、受信MACアドレスの登録の要求を受ける前と同じ状態を維持することになり、既登録エントリの削除による瞬断は発生しない。
さらに、衝突検出部111は、受信MACアドレスの登録不可を登録部112に通知する。登録部112は、衝突検出部111からの通知を受けて、受信MACアドレスの登録不可を登録結果出力部107に通知する。登録結果出力部107は、登録部112からの指示を受けて、MACアドレスの登録不可を制御端末3へ通知する。
次に、図25を参照して、本実施例に係る通信装置によるMACアドレスの登録処理の全体的な流れについて説明する。図25は、実施例1に係る通信装置によるMACアドレスの登録処理のフローチャートである。
利用者は、操作端末3を用いて、登録したいMACアドレスをテーブル制御管理部101に入力する(ステップS1)。
衝突検出部111は、受信MACアドレスのハッシュ計算をハッシュ部102に指示する。ハッシュ部102は、バンクの優先度にしたがって受信MACアドレスのハッシュ計算を行い(ステップS2)、計算結果を衝突検出部111へ出力する。
衝突検出部111は、空きエントリがあるか否か、すなわち、全てのバンクで衝突が発生したか否かを判定する(ステップS3)。ここで、実際には衝突検出部111及びハッシュ部102によるこの衝突検出処理は、バンク毎に行われるが、ここでは、説明のため、まとめて1回のステップで表している。
空きエントリがあった場合(ステップS3:肯定)、衝突検出部111は、検出した空きエントリに受信MACアドレスを登録し(ステップS4)、MACアドレスの登録処理を終了する。
これに対して、空きエントリが無い場合(ステップS3:否定)、衝突検出部111は、衝突が発生した旨の通知を衝突した各エントリの情報とともに、衝突回避制御部105に通知する。衝突回避制御部105は、衝突先のエントリで且つFILOバッファ104に登録されていないエントリを抽出する(ステップS5)。そして、衝突回避制御部105は、抽出したエントリの情報を衝突検出部111に通知する。
衝突検出部111は、抽出されたエントリの情報の通知をテーブル制御管理部101から受け、その情報を基にMACアドレステーブル20から対象MACアドレスを取得する。そして、衝突検出部111は、抽出されたエントリのエントリ情報のFILOバッファ104への格納を衝突アドレス一時管理部103に指示する。アドレス一時管理部103は、衝突検出部111からの指示を受けて、抽出されたエントリのエントリ情報をFILOバッファ104へ格納する(ステップS6)。
次に、衝突検出部111は、対象MACアドレスのハッシュ計算をハッシュ部102に指示する。ハッシュ部102は、バンクの優先度にしたがって対象MACアドレスのハッシュ計算を行い(ステップS7)、計算結果を衝突検出部111へ出力する。
衝突検出部111は、計算結果に応じた各バンクのエントリで衝突が発生したか否かを確認する。そして、衝突検出部111は、空きエントリがあるか否か、すなわち、対象MACアドレスに関して全てのバンクで衝突が発生したか否かを判定する(ステップS8)。
空きエントリが無い場合(ステップS8:否定)、衝突検出部111は、FILOバッファ104に空きがあるか否か、すなわち、FILOバッファ104が満杯か否かの判定を衝突アドレス一時管理部103に指示する。衝突アドレス一時管理部103は、FILOバッファ104に空きがあるか否かを判定し(ステップS9)、衝突検出部111に判定結果を通知する。
FILOバッファ104に空きがある場合(ステップS9:肯定)、衝突検出部111は、ステップS5へ戻る。
これに対して、FILOバッファ104に空きが無い場合(ステップS9:否定)、衝突検出部111は、受信MACアドレスの登録不可を登録結果出力部107へ通知する。これを受けて、登録結果出力部107は、受信MACアドレスの登録不可を制御端末3へ通知する(ステップS10)。
一方、空きエントリがある場合(ステップS8:肯定)、衝突検出部111は、対象MACアドレス及び空きエントリの情報を登録部112へ出力する。そして、登録部112は、空きエントリに対象MACアドレスを登録する(ステップS11)。
次に、登録部112は、登録したMACアドレスの元エントリを空にして空きエントリにする。ここで、登録したMACアドレスとは、対象MACアドレス又は追出MACアドレスである。さらに、登録部112は、空きエントリを空エントリ管理部106に通知する(ステップS12)。
登録部112は、FILOバッファ104の先頭のエントリ情報の削除を衝突アドレス一時管理部103に指示する。衝突アドレス一時管理部103は、登録部112からの指示を受けて、FILOバッファ104の先頭のエントリ情報を削除する(ステップS13)。
登録部112は、FILOバッファ104が空か否かを衝突アドレス一時管理部103に問い合わせ、その応答にしたがってFILOバッファ104が空か否かを判定する(ステップS14)。
FILOバッファ104が空でない場合(ステップS14:否定)、登録部112は、FILOバッファ104における最終登録エントリ情報の提供を衝突アドレス一時管理部103に指示する。衝突アドレス一時管理部103は、登録部112からの指示を受けて、最終登録エントリ情報をFILOバッファ104から取得する。その後、登録部112は、最終登録エントリ情報を衝突アドレス一時管理部103から取得する(ステップS15)。
次に、登録部112は、空きエントリの情報を空エントリ管理部106から取得する。そして、登録部112は、最終登録エントリ情報に含まれるMACアドレスである追出MACアドレスを空きエントリに登録する(ステップS16)。
次に、登録部112は、最終登録エントリ情報で示されるエントリの場所を取得する(ステップS17)。その後、登録部112は、ステップS12に戻る。
これに対して、FILOバッファ104が空である場合(ステップS14:肯定)、登録部112は、空きエントリの情報を空エントリ管理部106から取得する。そして、登録部112は、自己が保持する受信MACアドレスを空きエントリに登録する(ステップS18)。
そして、登録部112は、受信MACアドレスの登録完了を登録結果出力部107へ通知する。登録結果出力部107は、受信MACアドレスの登録完了通知を制御端末3へ送信し、利用者にMACアドレスの登録完了を通知する(ステップS19)。
以上に説明したように、本実施例に係る通信装置は、バンク毎に異なるハッシュ計算を行い、空きエントリが見つからない場合、衝突先のエントリの中から1つ選んで空きエントリを検出することを繰り返す。そして、空きエントリを検出した場合、本実施例に係る通信装置は、空きエントリの検出を行ったMACアドレスを順次空きバンクに登録していく。これにより、本実施例に係る通信装置は、MACアドレス登録時の衝突による登録不可の確率を低減することができる。
また、本実施例に係る通信装置は、MACアドレステーブルを格納するメモリとしてTCAMといった高価なメモリではなく、一般的なメモリを使用した上で、衝突による登録不可の確率を低減している。そのため、本実施例に係る通信装置は、安価に大量のテーブルを管理することができる。
(変形例1)
実施例1で説明した通信装置では、一例としてバンクを等分した場合で説明した。ただし、バンクの割振り方法に特に制限はない。図26は、各バンクのサイズを変更した割振り方法の例を示す図である。また、図27は、バンク数を変更した割振り方法の例を示す図である。
ここでは、実施例1のようにバンク21、22、23の順に優先度が下がっていく場合で説明する。この場合、例えば、図26のように優先度がより高いバンクを大きくすることができる。例えば、バンク21を最大にし、バンク22を次に大きくし、バンク23を最も小さくしてもよい。このようにバンクの大きさを変更することにより、最初の衝突検出で空きエントリが検出される可能性を高くすることができる。これにより、通信装置1は衝突先のMACアドレスを用いた検出を行う確率が低くなり、処理負荷を低減することができる。
また、例えば、実施例1では3分割を例に説明したが、バンクの個数は特に制限はない。例えば、図27で示すバンク21〜26のようにバンクの数を増やした場合、バンク毎に異なるハッシュ計算式を用いるため、通信装置1では、登録するときに空きエントリが検出される確率が高くなる。そのため、バンクの数を増やすことにより、通信装置1は、次の衝突したMACアドレスを用いた検出を行わなくて済む。これにより、通信装置1は衝突先のMACアドレスを用いた検出を行う回数を低く抑えることができ、処理負荷を低減することができる。
また、図26及び27で示す分割方法を組み合わせてもよい。すなわち、MACアドレステーブル20を格納するメモリを、より細かく分割しつつ、優先度の高いバンクを大きくしてもよい。
(変形例2)
また、実施例1では、テーブル制御管理部101が、受信MACアドレスを記憶していたが、追出処理の最後にテーブル制御管理部101が取得できるのであれば受信MACアドレスの情報の保持方法はこれに限らない。例えば、FILOバッファ104に最初に受信MACアドレスのエントリ情報を格納し、その後から対象MACアドレスのエントリ情報を格納することで、受信MACアドレスの情報を保持してもよい。
さらに、実施例1では、FILOバッファ104を用いたが、受信MACアドレスが全てのバンクで衝突した後、衝突検出処理を1回だけを行う構成であれば、FILOバッファ104を設けなくてもよい。
次に、実施例2について説明する。本実施例に係る通信装置は、FILOバッファ104に空きが無くなった場合に、ダイナミックMACアドレスを格納するエントリを空にして空きエントリを作成することが実施例1と異なる。本実施例に係るテーブル管理部10も図5のブロック図で表される。以下の説明では、実施例1と同じ符号を有する各部は、特に説明の無い限り同じ機能を有するものとする。
まず、本実施例に係るテーブル管理部10も実施例1と同様に、受信MACアドレスが全てのバンクで衝突した場合、衝突先のMACアドレスを対象MACアドレスとして、衝突検出処理を繰り返す。
そして、衝突検出処理を繰り返した結果、図28に示すようにFILOバッファ104に空きが無くなることが考えられる。図28は、実施例2におけるFILOバッファに空きが無い状態を表す図である。この時、FILOバッファ104には、複数のエントリ情報が格納されている。そして、エントリ情報の中には、ダイナミックMACアドレスを含むエントリであるダイナミックエントリのエントリ情報及びスタティックMACアドレスを含むエントリであるスタティッククエントリのエントリ情報が含まれる。
図28において、MACアドレステーブル20の中でMACDynamicと記載されているエントリが、ダイナミックMACアドレスが登録されたエントリの1つである。また、FILOバッファ104の中でMACDynamicと記載されているエントリ情報が、MACアドレステーブル20の中でMACDynamicに対応するエントリ情報である。MACアドレステーブル20のエントリ及びFILOバッファ104のエントリ情報それぞれにおいて、MACDynamicであることを示すフラグが格納されている。
ここで、スタティックMACアドレスは、利用者がMACアドレスとポートとを一意に対応付ける意思を持って登録したアドレスである。そのため、スタティックMACアドレスは重要度が高く、また削除後に自動的に登録を行うことも困難である。これに対して、ダイナミックMACアドレスは、自動的にポートとMACアドレスとの対応が登録されたアドレスである。そのため、重要度は比較的低く、また削除しても自動的に登録を行うことが容易である。そこで、ダイナミックMACアドレスが登録されているエントリを空にして空きエントリを作成しても運用上の問題が発生する可能性は低い。
そこで、登録部112は、FILOバッファ104に空きが無くなった旨の通知を衝突検出部111から受けると、ダイナミックエントリのエントリ情報の検出を衝突アドレス一時管理部103に指示する。その後、登録部112は、ダイナミックエントリのエントリ情報を衝突アドレス一時管理部103から取得する。
これに対して、ダイナミックエントリのエントリ情報が見つからない場合、登録部112は、ダイナミックエントリのエントリ情報が無い旨の通知を衝突アドレス一時管理部103から受ける。この場合、登録部112は、受信MACアドレスの登録不可を登録結果出力部107へ通知する。
ダイナミックエントリのエントリ情報を取得した場合、登録部112は、FILOバッファ104の先頭のエントリ情報から取得したダイナミックエントリのエントリ情報までのエントリ情報の削除を衝突アドレス一時管理部103に指示する。
次に、登録部112は、取得したエントリ情報で示されるMACアドレステーブル20のダイナミックエントリを空にする。この時のMACアドレステーブル20及びFILOバッファ104の状態が図29で示される。図29は、ダイナミックエントリを空きエントリにした状態を表す図である。
この場合、図29に示すように、FILOバッファ104から、図28における先頭のエントリ情報であるMAC#XXのエントリ情報からMACDynamicのエントリ情報までが削除されている。この状態では、FILOバッファ104には、MAC#E及びMAC#Bのエントリ情報の2つが格納されている。また、MACアドレステーブル20では、MACDynamicが登録されていたダイナミックエントリが空きエントリである。
その後、登録部112は、MAC#E及びMAC#Bを追出MACアドレスとして追出処理を行う。そして、MAC#Bの追出処理が終わると、登録部112は、MAC#Bの元エントリである空きエントリに受信MACアドレスであるMAC#Aを登録する。この時のMACアドレステーブル20及びFILOバッファ104の状態が図30で示される。図30は、ダイナミックエントリを空きエントリにした後のMACアドレスの登録処理の完了後の状態を表す図である。
また、衝突アドレス一時管理部103は、FILOバッファ104に空きが無くなると、ダイナミックエントリのエントリ情報の検出の指示を登録部112から受ける。そして、衝突アドレス一時管理部103は、FILOバッファ104を検索し、最も古いダイナミックエントリのエントリ情報を検出する。そして、衝突アドレス一時管理部103は、検出したダイナミックエントリのエントリ情報を登録部112へ送信する。これに対して、ダイナミックエントリのエントリ情報が見つからない場合、衝突アドレス一時管理部103は、ダイナミックエントリのエントリ情報がない旨を登録部112へ通知する。
ダイナミックエントリのエントリ情報の送信後、衝突アドレス一時管理部103は、エントリ情報の削除の指示を登録部112から受ける。そして、衝突アドレス一時管理部103は、FILOバッファ104における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報を削除する。
以上のような処理を行うことで、図30に示すように、対象MACアドレスが登録されたエントリにダイナミックエントリがあれば、本実施例に係るテーブル制御管理部101は、受信MACアドレスの登録を完了することができる。
次に、図31を参照して、本実施例に係る通信装置1によるFILOバッファ104に空きが無くなった後のMACアドレスの登録処理について説明する。図31は、実施例2に係る通信装置によるMACアドレスの登録処理のフローチャートである。
FILOバッファ104に空きが無くなる(ステップS101)。
登録部112は、ダイナミックエントリのエントリ情報と通知を衝突アドレス一時管理部103に指示する。そして、登録部112は、衝突アドレス一時管理部103からの応答により、FILOバッファ104にダイナミックエントリがあるか否かを判定する(ステップS102)。
ダイナミックエントリが無い場合(ステップS102:否定)、登録部112は、受信MACアドレスの登録不可を登録結果出力部107に通知する。登録結果出力部107は、登録部112からの通知を受けて、MACアドレスの登録不可を制御端末3へ送信し、利用者に通知する(ステップS103)。
これに対して、ダイナミックエントリがある場合(ステップS102:肯定)、登録部112は、ダイナミックエントリのエントリ情報を衝突アドレス一時管理部103から取得する。本実施例では、登録部112は、FILOバッファ104の中の最も古いダイナミックエントリのエントリ情報を取得する。これにより、登録部112は、FILOバッファ104からダイナミックエントリのエントリ情報を1つ取得する(ステップS104)。
次に、登録部112は、取得したエントリ情報が示すMACアドレステーブル20上のダイナミックエントリを空きエントリにする(ステップS105)。
さらに、登録部112は、FILOバッファ104における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報の削除を衝突アドレス一時管理部103に指示する。衝突アドレス一時管理部103は、登録部112からの指示を受けて、FILOバッファ104における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報を削除する(ステップS106)。
そして、登録部112は、追出処理を行う(ステップS107)。
その後、登録部112は、受信MACアドレスの登録完了を登録結果出力部107に通知する。登録結果出力部107は、登録部112からの通知を受けて、MACアドレスの登録完了を制御端末3へ送信し、利用者に通知する(ステップS108)。
以上に説明したように、本実施例に係る通信装置は、衝突検出処理の結果、FILOバッファ104に空きが無くなった場合に、ダイナミックエントリを空きエントリにして追出処理を行い受信MACアドレスを登録する。これにより、本実施例に係る通信装置は、MACアドレス登録時の衝突による登録不可の確率をより低減することができる。