(57)【特許請求の範囲】
【請求項１】
複数の領域に分割され、各前記領域毎に異なるハッシュ関数を用いて、ＭＡＣアドレスをハッシュして得られた値に対応するエントリが記憶されたＭＡＣアドレステーブルと、
前記各ハッシュ関数を用いて、入力された第１ＭＡＣアドレスをハッシュして得られた値に対応する第１エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出し、且つ、前記各ハッシュ関数を用いて、後述する第２ＭＡＣアドレスをハッシュして得られた値に対応する第２エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出する検出部と、
前記ＭＡＣアドレステーブルの各領域に前記第１エントリがそれぞれ存在すると検出された場合、何れかの領域にある前記第１エントリに格納されている前記第２ＭＡＣアドレスを取得する取得部と、
前記ＭＡＣアドレステーブルの何れの領域にも前記第２エントリが存在しないと検出された場合、前記第２エントリに前記第２ＭＡＣアドレスを格納し、前記第１エントリに前記第１ＭＡＣアドレスを格納する格納部と、
を備えたことを特徴とする通信装置。
【請求項２】
前記取得部は、前記ＭＡＣアドレステーブルの各領域に前記第２エントリがそれぞれ存在すると検出された場合、何れかの領域にある前記第２エントリに格納されている第３ＭＡＣアドレスを取得し、
前記検出部は、取得された第３ＭＡＣアドレスをハッシュして得られた値に対応する第３エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出し
前記格納部は、前記ＭＡＣアドレステーブルの何れの領域にも前記第３エントリが存在しないと検出された場合、前記第３エントリに前記第３ＭＡＣアドレスを格納し、前記第２エントリに前記第２ＭＡＣアドレスを格納し、前記第１エントリに前記第１ＭＡＣアドレスを格納する
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記取得部は、入力されたＭＡＣアドレスをハッシュして得られた値に対応するエントリが、前記ＭＡＣアドレステーブルの何れの領域にも存在しなくなるまで、前記エントリに格納されたＭＡＣアドレスを取得し、
前記格納部は、前記第２ＭＡＣアドレス又は前記第３ＭＡＣアドレスをハッシュして得られた値に対応するエントリが、前記ＭＡＣアドレステーブルの何れの領域にも存在しないと検出された場合、当該エントリから検出順に、入力が遅い順のＭＡＣアドレスを順次格納していく
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記第２ＭＡＣアドレスを記憶する記憶部をさらに備え、
前記格納部は、前記記憶部から前記第２ＭＡＣアドレスを取得して前記第２エントリに格納し、前記第２ＭＡＣアドレスを前記第１エントリ及び前記記憶部から削除し、その後、前記第１ＭＡＣアドレスを前記第１エントリに格納する
ことを特徴とする請求項１〜３のいずれか１つに記載の通信装置。
【請求項５】
前記ＭＡＣアドレステーブルには、ＭＡＣアドレスと出力先との固定の対応又は変更可能な対応が登録され、
前記格納部は、前記記憶部にアドレスを記憶する空きが無くなった場合、前記記憶部が記憶するアドレスの内、前記変更可能な対応が前記ＭＡＣアドレステーブルに登録されている可変アドレスを選択し、前記可変アドレスの登録を前記ＭＡＣアドレステーブルから削除し、前記記憶部に格納されているＭＡＣアドレスのうち前記可変アドレス以後に登録されたＭＡＣアドレスを削除し、さらに、前記記憶部に最も新しく格納された第１最新ＭＡＣアドレスを取得し、前記第１最新ＭＡＣアドレスを前記可変アドレスをハッシュして得られた値に対応する第１最新エントリに格納し、前記第１最新ＭＡＣアドレスを前記第１最新エントリ及び前記記憶部から削除し、その後、前記記憶部に格納されているＭＡＣアドレスのうち最も新しく格納された第２最新ＭＡＣアドレスを取得し、前記第２最新ＭＡＣアドレスを前記第１最新エントリに格納するとともに、前記第２最新ＭＡＣアドレスをハッシュして得られた値に対応する第２最新ＭＡＣエントリ及び前記記憶部から削除する処理を繰り返す
ことを特徴とする請求項４に記載の通信装置。
【請求項６】
前記取得部は、前記ＭＡＣアドレステーブルの各領域に前記第２エントリがそれぞれ存在すると検出された場合、前記第１エントリの何れかから前記第２ＭＡＣアドレス以外の第３ＭＡＣアドレスを取得し、
前記検出部は、前記第３ＭＡＣアドレスをハッシュして得られた値に対応する第３エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出し、
前記格納部は、前記第３エントリが、前記ＭＡＣアドレステーブルの何れの領域にも存在しないと検出された場合、前記第３エントリに前記第３ＭＡＣアドレスを格納し、前記第２エントリに前記第２ＭＡＣアドレスを格納し、前記第１エントリに前記第１ＭＡＣアドレスを格納する
ことを特徴とする請求項１に記載の通信装置。
【請求項７】
通信装置が、
複数の領域に分割されたＭＡＣアドレステーブルであって、領域毎に異なるハッシュ関数を用いて、ＭＡＣアドレスをハッシュして得られた値に対応するエントリが記憶された該ＭＡＣアドレステーブルの各領域に、該各ハッシュ関数を用いて、前記通信装置に入力された第１ＭＡＣアドレスをハッシュして得られた値に対応する第１エントリが存在するか検出し、
前記ＭＡＣアドレステーブルの各領域に前記第１エントリがそれぞれ存在する場合、何れかの領域にある前記第１エントリに格納されている第２ＭＡＣアドレスを取得し、
前記ＭＡＣアドレステーブルの各領域に、前記各ハッシュ関数を用いて、前記第２ＭＡＣアドレスをハッシュして得られた値に対応する第２エントリが存在するか検出し、
前記ＭＡＣアドレステーブルの何れの領域にも前記第２エントリが存在しなければ、前記第２エントリに前記第２ＭＡＣアドレスを格納し、前記第１エントリに前記第１ＭＡＣアドレスを格納する、
ことを特徴とする通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置及び通信制御方法に関する。
【背景技術】
【０００２】
ＬＡＮ（Local  Area  Network）におけるノード間の通信には、通信の中継を行うＬ（Layer）２スイッチなどの通信装置が利用されている。Ｌ２スイッチは、フレーム転送を行うためにＭＡＣ（Media  Access  Control）学習機能を有する。
【０００３】
すなわち、ＭＡＣ学習機能を採用するスイッチは、フレームが受信された場合に、フレームを受信したポートと、フレームの送信元となる端末のＭＡＣアドレスとの対応関係をＭＡＣ学習テーブルと呼ばれるテーブルに格納する。そして、スイッチは、ＭＡＣ学習テーブルに格納されたＭＡＣアドレスを宛先とするフレームを他のポートから受信した場合に、ＭＡＣ学習テーブルに学習済みであるポートから受信フレームを転送する。
【０００４】
そして、ネットワークに多くの電子機器が接続された場合、ＬＡＮサービスを提供する通信装置の処理量が増大する。処理量が増大するということは、通信装置が制御すべきエントリ数が増大することを表している。
【０００５】
通信装置は、ＭＡＣアドレスを学習する場合、処理の高速化などの理由から、ＴＣＡＭ（Ternary  Content  Addressable  Memory）を用いることや、ハッシュアルゴリズムを利用いてＭＡＣアドレステーブルの管理を行うことが多い。
【０００６】
ＴＣＡＭを用いた場合、エントリ登録が確実に可能となるという利点がある。しかし、ＴＣＡＭは、汎用の揮発性デバイスに比べて、高価であり、消費電力も多く、大量のエントリ登録には不向きである。
【０００７】
一方、ハッシュアルゴリズムを用いてＭＡＣアドレステーブルの管理を行う通信装置では、汎用の揮発性メモリが利用可能であり、コストを抑えることができる。さらに、このような通信装置では、ハッシュ計算式によってＭＡＣアドレステーブルが縮退されるためエントリの衝突が発生するが、少ない資源で大量のエントリを管理することが可能である。
【０００８】
従来、衝突が発生した場合、通信装置は、既登録エントリを削除し、新しいエントリを登録する。既登録エントリが削除されると、そのエントリに対応するＭＡＣアドレスに対するＭＡＣアドレステーブルを使用した通信が困難となる。この状態を既登録エントリの「瞬断」という場合がある。そして、通信装置は、Ｆｌｏｏｄｉｎｇを行う。この場合、意図しないポートにまで情報が送信されてしまう。Ｆｌｏｏｄｉｎｇは、利用者が意図的に登録したＭＡＣアドレスであるＳｔａｔｉｃＭＡＣであっても実行されてしまうため、セキュリティが低下するという問題がある。
【０００９】
なお、ハッシュアルゴリズムを用いたＭＡＣアドレスの管理技術として、例えば、ＭＡＣアドレステーブルを複数のバンクに分割していずれかのバンクにハッシュ計算したアドレスを登録する従来技術がある。また、ハッシュ計算したアドレスの登録において、登録する場所が無い場合に再順序付けを行う従来技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−３３４１１４号公報
【特許文献２】特表２００３−５１０９６３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、ＭＡＣアドレステーブルを複数のバンクに分けて管理する従来技術であっても、衝突が発生した場合には従来技術と同様の処理を行うため、既登録エントリを削除せずに空きエントリへ新しいエントリを登録する確率を向上させることは困難である。また、衝突により登録する場所が無い場合に再順序付けを行う従来技術であっても、再順序付けを行っても空きエントリに登録できないおそれがあり、既登録エントリを削除せずに空きエントリへ新しいエントリを登録する確率を向上させることは困難である。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、既登録エントリを削除せずに空きエントリへ新しいエントリを登録する確率を向上させる通信装置及び通信制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する通信装置及び通信制御方法は、一つの態様において、ＭＡＣアドレステーブルが、複数の領域に分割され、各前記領域毎に異なるハッシュ関数を用いて、ＭＡＣアドレスをハッシュして得られた値に対応するエントリが記憶される。検出部は、前記各ハッシュ関数を用いて、入力された第１ＭＡＣアドレスをハッシュして得られた値に対応する第１エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出し、且つ、前記各ハッシュ関数を用いて、後述する第２ＭＡＣアドレスをハッシュして得られた値に対応する第２エントリが、前記ＭＡＣアドレステーブルの各領域に存在するか検出する。取得部は、前記ＭＡＣアドレステーブルの各領域に前記第１エントリがそれぞれ存在すると検出された場合、何れかの領域にある前記第１エントリに格納されている前記第２ＭＡＣアドレスを取得する。格納部は、前記ＭＡＣアドレステーブルの何れの領域にも前記第２エントリが存在しないと検出された場合、前記第２エントリに前記第２ＭＡＣアドレスを格納し、前記第１エントリに前記第１ＭＡＣアドレスを格納する。
【発明の効果】
【００１４】
本願の開示する通信装置及び通信制御方法の一つの態様によれば、既登録エントリを削除せずに空きエントリへ新しいエントリを登録する確率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、通信装置を含むシステムの構成を示す概略図である。
【図２】図２は、通信装置のブロック図である。
【図３】図３は、スイッチ制御部のブロック図である。
【図４】図４は、ＭＡＣアドレステーブルの一例の図である。
【図５】図５は、テーブル管理部の詳細を示すブロック図である。
【図６】図６は、受信ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図７】図７は、対象ＭＡＣアドレスをＦＩＬＯバッファに格納した状態を表す図である。
【図８】図８は、対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図９】図９は、検出された空きエントリに対象ＭＡＣアドレスを格納した状態を表す図である。
【図１０】図１０は、対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。
【図１１】図１１は、受信ＭＡＣアドレスに対する追出処理の状態を表す図である。
【図１２】図１２は、ＭＡＣアドレスの登録処理の完了後の状態を表す図である。
【図１３】図１３は、最初の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図１４】図１４は、２番目の対象ＭＡＣアドレスをＦＩＬＯバッファに格納した状態を表す図である。
【図１５】図１５は、２番目の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図１６】図１６は、検出された空きエントリに２番目の対象ＭＡＣアドレスを格納した状態を表す図である。
【図１７】図１７は、２番目の対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。
【図１８】図１８は、最初の対象ＭＡＣアドレスに対する追出処理の状態を表す図である。
【図１９】図１９は、追出処理により空きエントリに最初の対象ＭＡＣアドレスを格納した状態を表す図である。
【図２０】図２０は、最初の対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。
【図２１】図２１は、受信ＭＡＣアドレスに対する追出処理の状態を表す図である。
【図２２】図２２は、ＭＡＣアドレスの登録処理の完了後の状態を表す図である。
【図２３】図２３は、ＦＩＬＯバッファに空きが無くなった状態の図である。
【図２４】図２４は、ＦＩＬＯバッファを空にして元に戻した状態の図である。
【図２５】図２５は、実施例１に係る通信装置によるＭＡＣアドレスの登録処理のフローチャートである。
【図２６】図２６は、各バンクのサイズを変更した割振り方法の例を示す図である。
【図２７】図２７は、バンク数を変更した割振り方法の例を示す図である。
【図２８】図２８は、実施例２におけるＦＩＬＯバッファに空きが無い状態を表す図である。
【図２９】図２９は、ダイナミックエントリを空きエントリにした状態を表す図である。
【図３０】図３０は、ダイナミックエントリを空きエントリにした後のＭＡＣアドレスの登録処理の完了後の状態を表す図である。
【図３１】図３１は、実施例２に係る通信装置によるＭＡＣアドレスの登録処理のフローチャートである。
【図３２】図３２は、実施例３における受信ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図３３】図３３は、実施例３における最初の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図３４】図３４は、実施例３における２番目の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【図３５】図３５は、通信装置のハードウェア構成の一例の図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する通信装置及び通信制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する通信装置及び通信制御方法が限定されるものではない。
【実施例１】
【００１７】
図１は、通信装置を含むシステムの構成を示す概略図である。図１に示すように、通信装置１は、ネットワーク上に複数配置されている。各通信装置１は、複数の端末装置２が接続されている。さらに、通信装置１同士が接続され、端末装置２は、通信装置を介して他の端末装置２と通信を行うことが可能である。
【００１８】
通信装置１は、例えば、Ｌ２スイッチである。通信装置１は、端末装置２から送信されたフレームを受信し、フレーム内に格納されたアドレス情報などを基に、指定された宛先へのフレームの転送処理を行う。例えば、端末装置２がイーサネット（登録商標）フレームやＩＰ（Internet  Protocol）フレームを送信する場合を考える。この場合、通信装置１は、イーサネットフレーム内に格納されたＭＡＣアドレスやＩＰフレーム内に格納されたＩＰアドレスなどを基にフレームの転送処理を行う。
【００１９】
図２は、通信装置のブロック図である。図２に示すように、通信装置１は、スイッチ制御部１１、回線ＩＦ（InterFace）回路１２及び制御回路１３を有する。
【００２０】
回線ＩＦ回路１２は、複数の回線ポートを収容する。そして、回線ＩＦ回路１２は、外部装置とのインタフェース機能、並びに、受信フレーム処理及び送信フレーム処理などを提供する。回線ＩＦ回路１２は、一般的には脱着可能暗モジュールやカードとして提供される。例えば、回線ＩＦ回路１２は、外部装置と接続するためのポートを複数有する。そして、回線ＩＦ回路１２は、各ポートを介して他の通信装置１や端末装置２と通信を行う。
【００２１】
スイッチ制御部１１は、通信装置１内において回線ＩＦ回路１２との間でデータ信号の送受信を行う。スイッチ制御部１１は、回線ＩＦ回路１２の間のフレーム転送のスイッチ機能を提供する回路である。
【００２２】
制御回路１３は、通信装置１内においてスイッチ制御部１１及び回線ＩＦ回路１２の間で制御信号の送受信を行う。制御回路１３は、スイッチ制御部１１及び回線ＩＦ回路１２の各種設定、故障時のアラームの通知や統計情報の収集を実行する。本実施例では、制御回路１３に、制御端末３が接続している。
【００２３】
制御端末３は、通信装置１のパラメータ設定などの制御を行うためのコンピュータである。制御端末３は、利用者から登録するＭＡＣアドレスの入力を受ける。そして、制御端末３は、入力されたＭＡＣアドレスを入力情報として制御回路１３へ送信する。また、制御端末３は、制御回路１３からデータの入力を受ける。ここで、制御端末３とスイッチ制御部１１は、実際には、制御回路１３を介してデータの送受信を行うが、以下では、説明の都合上、制御端末３とスイッチ制御部１１とが直接データの送受信を行っているように説明する場合がある。
【００２４】
次に、図３を参照して、スイッチ制御部１１について詳細に説明する。図３は、スイッチ制御部のブロック図である。
【００２５】
スイッチ制御部１１は、テーブル管理部１０、ＭＡＣアドレステーブル２０及び転送部３０を有する。
【００２６】
ＭＡＣアドレステーブル２０は、バンクと呼ばれる複数の領域に分割される。ＭＡＣアドレステーブル２０は、バンク毎にＭＡＣアドレスとそのＭＡＣアドレスの宛先にフレームを送信する場合の送信先のポート番号との組み合わせの情報が登録される。後述するＭＡＣアドレスの登録時における衝突回避処理の時を除き、異なるバンクに同じＭＡＣアドレスが登録されることはない。すなわち、ＭＡＣアドレステーブル２０には、ＭＡＣアドレスとポート番号とが１対１で対応付けられて登録される。ＭＡＣアドレステーブル２０は、例えば、図４のような状態で情報が登録される。図４は、ＭＡＣアドレステーブルの一例の図である。
【００２７】
また、ＭＡＣアドレステーブル２０には、スタティックＭＡＣアドレスとダイナミックＭＡＣアドレスという２種類のＭＡＣアドレスが登録される。スタティックＭＡＣアドレスは、利用者が意図的に登録したポートとの対応が固定のＭＡＣアドレスである。ダイナミックＭＡＣアドレスは、スイッチ制御部１１により適当なポート番号が対応付けられる、すなわち、流動的にポートとの対応付けが変化するＭＡＣアドレスである。このＭＡＣアドレステーブルが、「ＭＡＣアドレステーブル」の一例にあたる。
【００２８】
転送部３０は、端末装置２から送信されたフレームを回線ＩＦ回路１２から受信する。そして、転送部３０は、フレームに格納されているＭＡＣアドレスを取得する。次に、転送部３０は、取得したＭＡＣアドレスに対応するポート番号をＭＡＣアドレステーブル２０から取得する。そして、転送部３０は、取得したＭＡＣアドレスに対応するポートを有する回線ＩＦ回路１２へフレームを転送する。
【００２９】
また、転送部３０は、取得したＭＡＣアドレスがＭＡＣアドレステーブル２０に登録されていない場合、Ｆｌｏｏｄｉｎｇを行い送信先のポート番号を特定する。そして、転送部３０は、取得したＭＡＣアドレス及び特定した送信先のポート番号をテーブル管理部１０へ出力する。
【００３０】
図４に示すＭＡＣアドレステーブル２０を用いた場合を例に説明する。転送部３０は、例えば、受信したフレームからＭＡＣアドレスとしてＭＡＣ＃Ａを取得すると、ＭＡＣアドレステーブル２０からＭＡＣ＃Ａに対応するポートが２番のポートであることを把握する。そして、転送部２０は、２番のポートを有する回線ＩＦ回路１２へフレームを転送する。
【００３１】
図３に戻って説明を続ける。テーブル管理部１０は、ＭＡＣアドレステーブル２０の登録情報を管理する。例えば、テーブル管理部１０は、登録するＭＡＣアドレス及びそのＭＡＣアドレスに対応するポート番号の入力を制御端末３から受ける。テーブル管理部１０は、ポート番号を基にＭＡＣアドレステーブル２０における登録先のエントリを確定し、そのエントリにＭＡＣアドレスが登録されていない、すなわち空きエントリであれば、そのエントリに受信したＭＡＣアドレス及びポート番号を登録する。空きエントリでない場合、テーブル管理部１０は、後で説明するエントリの衝突を回避するための衝突回避処理を行い、受信したＭＡＣアドレス及びポート番号を登録する。衝突回避処理を実行しても衝突が回避できない場合、テーブル管理部１０は、登録不可の通知を制御端末３へ通知する。このように、制御端末３から入力されたＭＡＣアドレス及びそのＭＡＣアドレスに対応するポートの組み合わせで登録されたＭＡＣアドレスは、スタティックＭＡＣアドレスである。以下では、ＭＡＣアドレス及びポート番号の対応をＭＡＣアドレステーブル２０へ登録することを、単に「ＭＡＣアドレスの登録」という。
【００３２】
また、テーブル管理部１０は、ＭＡＣアドレス及び転送部３０が特定したそのＭＡＣアドレスに対応する送信先のポートの情報の入力を転送部３０から受ける。そして、テーブル管理部１０は、制御端末３からＭＡＣアドレス及びそのＭＡＣアドレスに対応するポート番号の入力を受けた場合と同様に、衝突回避処理などを行い、ＭＡＣアドレスを登録する。
【００３３】
次に、図５を参照して、テーブル管理部１０による衝突回避処理を含むＭＡＣアドレステーブル２０の管理について詳細に説明する。図５は、テーブル管理部の詳細を示すブロック図である。
【００３４】
テーブル管理部１０は、テーブル制御管理部１０１、ハッシュ部１０２、衝突アドレス一時管理部１０３、ＦＩＬＯ（First  In  Last  Out）バッファ１０４、衝突回避制御部１０５、空エントリ管理部１０６及び登録結果出力部１０７を有する。以下では、制御端末３が、スタティックＭＡＣアドレスをテーブル管理部１０へ入力した場合で説明する。
【００３５】
テーブル制御管理部１０１は、衝突検出部１１１及び登録部１１２を有する。衝突検出部１１１は、ＭＡＣアドレス及びポート番号の入力を制御端末３から受ける。以下では、制御端末３から受信したＭＡＣアドレスを、「受信ＭＡＣアドレス」という。この受信ＭＡＣアドレスが、「第１ＭＡＣアドレス」の一例にあたる。
【００３６】
衝突検出部１１１は、ＭＡＣアドレステーブル２０における各バンクの優先度の情報を有する。そして、衝突検出部１１１は、受信ＭＡＣアドレスの最高の優先度のバンクに対応するハッシュ計算をハッシュ部１０２へ指示する。
【００３７】
その後、衝突検出部１１１は、受信ＭＡＣアドレスのハッシュ計算の計算結果の入力をハッシュ部１０２から受ける。そして、衝突検出部１１１は、指定したバンクにおける受信した計算結果に応じたエントリに既にＭＡＣアドレスが登録されているか否かを判定する。ＭＡＣアドレスが未登録のエントリ、すなわち空きエントリの場合、衝突検出部１１１は、空きエントリの情報及び受信ＭＡＣアドレスを登録部１１２に出力する。以下では、このエントリが空きエントリであるか否かを判定する処理を「衝突検出処理」という。
【００３８】
これに対して、エントリに既にＭＡＣアドレスが登録されている場合、衝突検出部１１１は、次の優先度のバンクに対応するハッシュ計算をハッシュ部１０２へ指示する。次に、衝突検出部１１１は、次のバンクに対して、最初のバンクに対する衝突検出処理と同様の処理を行う。
【００３９】
衝突検出部１１１は、空きエントリが検出される、もしくは、全てのバンクで衝突が検出されるまで、バンクの優先度にしたがって衝突検出処理を繰り返す。
【００４０】
いずれかのバンクで空きエントリが検出された場合、衝突検出部１１１は、検出した空きエントリの情報及び受信ＭＡＣアドレスを登録部１１２へ出力する。受信ＭＡＣアドレスに関して空きエントリが検出できた場合、衝突検出部１１１は、衝突検出処理を終了する。
【００４１】
これに対して、全てのバンクで衝突が発生した場合、衝突検出部１１１は、受信ＭＡＣアドレスを衝突アドレス一時管理部１０３へ出力する。
【００４２】
さらに、衝突検出部１１１は、衝突の発生及び衝突が発生した各バンクのエントリの情報を衝突回避制御部１０５へ送信する。その後、衝突検出部１１１は、次に衝突検出処理を行う対象とするＭＡＣアドレスが格納されたエントリの情報を衝突回避制御部１０５から取得する。以下では、衝突回避制御部１０５から通知された衝突検出処理の対象とするＭＡＣアドレスを、「対象ＭＡＣアドレス」という。
【００４３】
その後、衝突検出部１１１は、取得したエントリに登録された対象ＭＡＣアドレス及びそのエントリのＭＡＣアドレステーブル２０上での場所の情報のＦＩＬＯバッファ１０４への格納を衝突アドレス一時管理部１０３へ指示する。以下では、ＦＩＲＯバッファ１０４に格納されているデータであるＭＡＣアドレス及びそのエントリのＭＡＣアドレステーブル２０上での場所の情報をまとめて「エントリ情報」という。
【００４４】
そして、衝突検出部１１１は、バンクの優先度にしたがって、対象ＭＡＣアドレスについて、衝突検出処理を繰り返す。いずれかのバンクで空きエントリが検出された場合、衝突検出部１１１は、検出した空きエントリの情報及び対象ＭＡＣアドレスを登録部１１２へ出力する。対象ＭＡＣアドレスに関して空きエントリが検出できた場合、衝突検出部１１１は、衝突検出処理を終了する。
【００４５】
これに対して、対象ＭＡＣアドレスに関して空きエントリが検出されない場合、衝突検出部１１１は、対象ＭＡＣアドレスでの衝突の発生及び衝突が発生した各バンクのエントリの情報を衝突回避制御部１０５へ送信する。その後、衝突検出部１１１は、新たな対象ＭＡＣアドレスを衝突回避制御部１０５から取得し、衝突検出処理を繰り返す。
【００４６】
そして、ＦＩＬＯバッファ１０４に空きが無くなる前に、対象ＭＡＣアドレスに関して空きエントリが検出できた場合、衝突検出部１１１は、検出した空きエントリの情報及び対象ＭＡＣアドレスを登録部１１２へ出力し、衝突検出処理を終了する。
【００４７】
これに対して、衝突検出処理を繰り返すうちにＦＩＬＯバッファ１０４に空きが無くなった場合、衝突検出部１１１は、ＦＩＬＯバッファ１０４を空にする指示を衝突アドレス一時管理部１０３に通知する。そして、衝突検出部１１１は、受信ＭＡＣアドレスの登録不可を登録部１１２に通知し、ＭＡＣアドレスの登録処理を終了する。この衝突検出部１１１が、「検出部」の一例にあたる。
【００４８】
登録部１１２は、受信ＭＡＣアドレスに関して空きエントリが検出された場合、空きエントリの情報及び受信ＭＡＣアドレスの入力を衝突検出部１１１から受ける。そして、登録部１１２は、ＭＡＣアドレステーブル２０の空きエントリに受信ＭＡＣアドレスを登録し、ＭＡＣアドレスの登録処理を終了する。
【００４９】
登録部１１２は、受信ＭＡＣアドレスに関して全てのバンクで衝突が発生した場合、受信ＭＡＣアドレスの入力を衝突検出部１１１から受ける。そして、登録部１１２は、自己が有する記憶領域（不図示）に受信ＭＡＣアドレスを格納し保持する。
【００５０】
その後、登録部１１２は、対象ＭＡＣアドレスに関して空きエントリが検出された場合、空きエントリの情報及び対象ＭＡＣアドレスの入力を衝突検出部１１１から受ける。そして、登録部１１２は、ＭＡＣアドレステーブル２０の空きエントリに対象ＭＡＣアドレスを登録する。
【００５１】
続いて、テーブル制御管理部１０１は、ＦＩＬＯバッファ１０４に格納された最終登録エントリ情報が示すＭＡＣアドレスを空きエントリに順次登録していく追出処理を行う。以下では、追出処理の詳細について説明する。
【００５２】
登録部１１２は、最終登録エントリ情報の削除を衝突アドレス一時管理部１０３に指示する。最終登録エントリ情報とは、ＦＩＬＯバッファ１０４が保持するエントリ情報の内、最後に格納されたエントリ情報である。ここでは、まず空きエントリが検出された対象ＭＡＣアドレスに対応するエントリ情報が削除される。
【００５３】
さらに、登録部１１２は、登録した対象ＭＡＣアドレスの元の登録先エントリ（以下、「元エントリ」という場合がある。）の登録内容を削除し、元エントリを空きエントリにする。その後、登録部１１２は、空きエントリとなったエントリの情報を空エントリ管理部１０６に通知する。空エントリ管理部１０６に通知する空きエントリの情報には、空きエントリのＭＡＣアドレステーブル２０上の場所などが含まれる。
【００５４】
登録部１１２は、最終登録エントリ情報の送信を衝突アドレス一時管理部１０３に通知する。その後、登録部１１２は、最終登録エントリ情報を衝突アドレス一時管理部１０３から取得する。以下、登録部１１２が衝突アドレス一時管理部１０３から取得した最終登録エントリ情報が示すＭＡＣアドレスを「追出ＭＡＣアドレス」という。
【００５５】
そして、登録部１１２は、空きエントリの情報を空エントリ管理部１０６から取得する。その後、登録部１１２は、空エントリ管理部１０６から通知された空きエントリに追出ＭＡＣアドレスを登録する。
【００５６】
さらに、登録部１１２は、取得した最終登録エントリ情報からエントリの場所の情報を取得する。このエントリの場所は、追出ＭＡＣアドレスの元エントリの場所にあたる。そして、登録部１１２は、取得したエントリの場所を基に、ＭＡＣアドレステーブル２０における追出ＭＡＣアドレスの元エントリを抽出する。その後、登録部１１２は、追出ＭＡＣアドレスの元エントリの登録内容を削除し、元エントリを空きエントリにする。そして、登録部１１２は、空きエントリとなった元エントリの情報を空エントリ管理部１０６に通知する。
【００５７】
また、登録部１１２は、最終登録エントリ情報のＦＩＬＯバッファ１０４からの削除を衝突アドレス一時管理部１０３に指示する。これにより、登録した追出ＭＡＣアドレスのエントリ情報がＦＩＬＯバッファ１０４から削除される。
【００５８】
次に、登録部１１２は、ＦＩＬＯバッファ１０４が空になったか否かを判定する。ＦＩＯバッファ１０４が空になっていなければ、登録部１１２は、ＦＩＬＯバッファ１０４が空になるまで追出処理を繰り返す。
【００５９】
ＦＩＬＯバッファ１０４が空になった場合、登録部１１２は、空エントリ管理部１０６が記憶する空きエントリの情報を取得する。そして、登録部１１２は、自己が保持する受信ＭＡＣアドレスを空きエントリに格納し、追出処理を終了する。
【００６０】
その後、登録部１１２は、受信ＭＡＣアドレスの登録完了を登録結果出力部１０７へ通知する。これにより、テーブル制御管理部１０１は、ＭＡＣアドレスの登録の処理を終了する。対象ＭＡＣアドレス及びそれに対応する追出ＭＡＣアドレスが、「第２〜第３ＭＡＣアドレス」の一例にあたる。
【００６１】
ハッシュ部１０２は、ＭＡＣアドレステーブル２０の各バンクの優先度の情報を有する。また、ハッシュ部１０２は、ＭＡＣアドレステーブル２０の各バンクに対応するハッシュ計算式を有する。バンク毎のハッシュ計算式は、それぞれ異なる。バンク毎のハッシュ計算式が異なることにより、ＭＡＣアドレスに対してハッシュ計算を用いて登録を行う場合に、あるバンクで登録できなくても、他のバンクに登録できるようになる。
【００６２】
ハッシュ部１０２は、受信ＭＡＣアドレス又は対象ＭＡＣアドレスのハッシュ計算の指示を衝突検出部１１１から受ける。ハッシュ部１０２は、各バンクの優先度を基にバンクを選択する。そして、ハッシュ部１０２は、選択したバンクに応じたハッシュ計算式を用いて指定されたＭＡＣアドレスに対するハッシュ計算を行う。その後、ハッシュ部１０２は、ハッシュ計算の計算結果を衝突検出部１１１へ出力する。
【００６３】
ＦＩＬＯバッファ１０４は、データの格納が遅い順に、先に出力する先読み後出しのバッファである。すなわち、ＦＩＬＯバッファ１０４では、格納しているエントリ情報のうち、最後に格納されたエントリ情報が出力される。ただし、ＦＩＬＯバッファ１０４以外にも、データの格納が遅い順にデータを取得できる記憶装置であれば他の記憶装置を用いることもできる。例えば、データの格納時刻をデータとともに保持しておき、データの取得要求に合わせて格納時刻が最も古いものを出力する記憶装置を用いてもよい。
【００６４】
衝突アドレス一時管理部１０３は、エントリ情報のＦＩＬＯバッファ１０４への格納指示を衝突検出部１１１から受ける。そして、衝突アドレス一時管理部１０３は、衝突検出部１１１から受信したエントリ情報をＦＩＬＯバッファ１０４へ格納する。
【００６５】
また、衝突アドレス一時管理部１０３は、最終登録エントリ情報の取得の指示を登録部１１２から受ける。そして、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４からエントリ情報を読み出し、登録部１１２へ出力する。
【００６６】
また、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４から最終登録エントリ情報の削除の指示を登録部１１２から受ける。そして、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４の先頭のエントリ情報を削除する。
【００６７】
また、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４を空にする指示を衝突検出部１１１から受ける。そして、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４を空にする。
【００６８】
衝突回避制御部１０５は、ＭＡＣアドレステーブル２０の各バンクの優先度の情報を有する。衝突回避制御部１０５は、受信ＭＡＣアドレス及び対象ＭＡＣアドレスの衝突の発生及び衝突が発生した各バンクのエントリの情報の入力を衝突検出部１１１から受ける。
【００６９】
受信ＭＡＣアドレスの衝突の場合、衝突回避制御部１０５は、最も優先度の高いバンクに含まれる衝突先のエントリを抽出する。また、対象ＭＡＣアドレスの衝突の場合、衝突回避制御部１０５は、対象ＭＡＣアドレスが登録されているエントリを含むバンクの次の優先度のバンクに含まれる衝突先のエントリを抽出する。また、優先度が最低のバンクを使用した場合、衝突回避制御部１０５は、次は最も優先度の高いバンクに戻ってエントリの抽出を行う。そして、衝突回避制御部１０５は、抽出したエントリの情報を衝突検出部１１１へ出力する。
【００７０】
ここで、本実施例では、バンクを均等に使用するため、優先度を順に低いものに変えていきながらエントリを抽出するバンクを選択したが、バンクの選択はこれに限らない。例えば、衝突回避制御部１０５は、対象ＭＡＣアドレスが登録されているエントリを含むバンク以外のバンクで最も優先度が高いバンクを選択してもよい。この場合、選択されるバンクに偏りが出る場合がある。この衝突回避制御部１０５が、「取得部」の一例にあたる。
【００７１】
空エントリ管理部１０６は、空きエントリの情報を登録部１１２から取得し保持する。そして、空エントリ管理部１０６は、空きエントリの情報の送信要求を登録部１１２から受けると、保持する空きエントリの情報を登録部１１２へ送信し、保持する空きエントリの情報を削除する。
【００７２】
登録結果出力部１０７は、受信ＭＡＣアドレスの登録不可の通知を登録部１１２から受信する。そして、登録結果出力部１０７は、受信ＭＡＣアドレスの登録不可の通知を制御端末３へ出力し、利用者へ受信ＭＡＣアドレスの登録不可を通知する。
【００７３】
また、登録結果出力部１０７は、受信ＭＡＣアドレスの登録完了の通知を登録部１１２から受信する。そして、登録結果出力部１０７は、受信ＭＡＣアドレスの登録完了の通知を制御端末３へ出力し、利用者へ受信ＭＡＣアドレスの登録完了を通知する。
【００７４】
制御端末３は、受信ＭＡＣアドレスの登録不可の通知を登録結果出力部１０７から受信すると、モニタへ通知内容を表示するなどして利用者に受信ＭＡＣアドレスの登録不可を通知する。また、制御端末３は、受信ＭＡＣアドレスの登録完了の通知を登録結果出力部１０７から受信すると、モニタへ通知内容を表示するなどして利用者に受信ＭＡＣアドレスの登録完了を通知する。
【００７５】
次に、図６〜１２を参照して、本実施例に係る通信装置によるＭＡＣアドレス登録処理について説明する。ここでは、１つ目の対象ＭＡＣアドレスで空きエントリが検出される場合で説明する。図６は、受信ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。図７は、対象ＭＡＣアドレスをＦＩＬＯバッファに格納した状態を表す図である。図８は、対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。図９は、検出された空きエントリに対象ＭＡＣアドレスを格納した状態を表す図である。図１０は、対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。図１１は、受信ＭＡＣアドレスに対する追出処理の状態を表す図である。図１２は、ＭＡＣアドレスの登録処理の完了後の状態を表す図である。ここでは、ＭＡＣアドレステーブル２０がバンク２１〜２３という３つのバンクに分割されている場合で説明する。また、説明の都合上、ＦＩＬＯバッファ１０４に格納されているエントリ情報もＭＡＣアドレスで表している。さらに、ここでは、バンク２１が最も優先度が高く、バンク２２が次の優先度を有し、バンク２３が最も低い優先度を有する場合で説明する。
【００７６】
衝突検出部１１１は、図６に示すように、ＭＡＣ＃Ａに対してバンク２１〜２３毎のハッシュ計算式を用いた計算結果に対応する各バンク２１〜２３のエントリを確認し、バンク２１〜２３のいずれでも衝突が発生したことを確認する。この状態では、ＦＩＬＯバッファ１０４は空である。
【００７７】
そこで、衝突検出部１１１は、最も優先度が高いバンク２１でＭＡＣ＃Ａと衝突したＭＡＣ＃Ｂが格納されているエントリを対象ＭＡＣアドレスとする指示を衝突回避制御部１０５から受ける。その後、衝突アドレス一時管理部１０３は、衝突検出部１１１からの指示を受けて、図７に示すように、対象ＭＡＣアドレスであるＭＡＣ＃Ｂのエントリ情報をＦＩＬＯバッファ１０４に格納する。
【００７８】
次に、図８に示すように、衝突検出部１１１は、対象ＭＡＣアドレスであるＭＡＣ＃Ｂに対してバンク２１〜２３毎のハッシュ計算式を用いた計算結果に対応する各バンク２１〜２３のエントリを順次確認する。ここで、ＭＡＣ＃Ｂの計算結果は、バンク２１に含まれるＭＡＣ＃Ｂが登録されたエントリと衝突する。そこで、衝突検出部１１１は、次の優先度を有するバンク２２を確認し、ＭＡＣ＃Ｂのハッシュ計算の計算結果に対応するエントリが空きエントリであることを検出する。これにより、衝突検出部１１１による衝突検出処理は終了する。
【００７９】
そこで、図９に示すように、登録部１１２は、検出した空きエントリにＭＡＣ＃Ｂを登録する。この状態では、ＭＡＣアドレステーブル２０上に、ＭＡＣ＃Ｂが登録されたエントリが２つ存在する。さらに、ＦＩＬＯバッファ１０４の先頭にＭＡＣ＃Ｂのエントリ情報が格納されている。
【００８０】
そこで、図１０に示すように、登録部１１２は、ＭＡＣアドレステーブル２０上の対象ＭＡＣアドレスの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部１０６は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部１０３は、登録部１１２からの指示を受けて、ＦＩＬＯバッファ１０４の先頭にあるＭＡＣ＃Ｂのエントリ情報を削除する。そして、登録部１１２は、ＦＩＬＯバッファ１０４が空になったか否かを判定する。この場合は、ＦＩＬＯバッファ１０４が空になっている。
【００８１】
そこで、図１１に示すように、登録部１１２は、自己が記憶するＭＡＣ＃Ａを、空エントリ管理部１０６が記憶する空きエントリに登録する。これにより登録処理が完了し、ＭＡＣアドレステーブル２０及びＦＩＬＯバッファ１０４は、図１２で示す状態になる。以上で、最初の対象ＭＡＣアドレスで空きエントリが検出された場合のＭＡＣアドレスの登録処理が完了する。
【００８２】
次に、図１３〜２２を参照して、最初の対象ＭＡＣアドレスの衝突検出処理において空きエントリが検出できなかった場合の動作について説明する。ここでは、受信ＭＡＣアドレスをＭＡＣ＃Ａ、最初の対象ＭＡＣアドレスをＭＡＣ＃Ｂ、２番目の対象ＭＡＣアドレスをＭＡＣ＃Ｅとして説明する。図１３は、最初の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。図１４は、２番目の対象ＭＡＣアドレスをＦＩＬＯバッファに格納した状態を表す図である。図１５は、２番目の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。図１６は、検出された空きエントリに２番目の対象ＭＡＣアドレスを格納した状態を表す図である。図１７は、２番目の対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。図１８は、最初の対象ＭＡＣアドレスに対する追出処理の状態を表す図である。図１９は、追出処理により空きエントリに最初の対象ＭＡＣアドレスを格納した状態を表す図である。図２０は、最初の対象ＭＡＣアドレスの情報を元エントリ及びＦＩＬＯバッファから削除した状態を表す図である。図２１は、受信ＭＡＣアドレスに対する追出処理の状態を表す図である。図２２は、ＭＡＣアドレスの登録処理の完了後の状態を表す図である。
【００８３】
衝突検出部１１１は、最初のＭＡＣアドレスであるＭＡＣ＃Ｂに対してバンク２１〜２３毎のハッシュ計算式を用いた計算を行い、図１３に示すように、バンク２１〜２３のいずれでも衝突が発生したことを確認する。
【００８４】
そこで、衝突検出部１１１は、優先度が次に高いバンク２２でＭＡＣ＃Ｂと衝突したＭＡＣ＃Ｅが格納されているエントリを対象ＭＡＣアドレスとする指示を衝突回避制御部１０５から受ける。その後、衝突アドレス一時管理部１０３は、衝突検出部１１１からの指示を受けて、図１４に示すように、２番目の対象ＭＡＣアドレスであるＭＡＣ＃Ｅのエントリ情報をＦＩＬＯバッファ１０４に格納する。
【００８５】
次に、図１５に示すように、衝突検出部１１１は、２番目の対象ＭＡＣアドレスであるＭＡＣ＃Ｅに対してバンク２１〜２３毎のハッシュ計算式を用いた計算結果に対応する各バンク２１〜２３のエントリを順次確認する。ここでは、衝突検出部１１１は、バンク２３におけるＭＡＣ＃Ｅのハッシュ計算の計算結果に対応するエントリが空きエントリであることを検出する。これにより、衝突検出部１１１による衝突検出処理は終了する。
【００８６】
そこで、図１６に示すように、登録部１１２は、検出した空きエントリにＭＡＣ＃Ｅを登録する。この状態では、ＭＡＣアドレステーブル２０上に、ＭＡＣ＃Ｅが登録されたエントリが２つ存在する。さらに、ＦＩＬＯバッファ１０４の先頭にＭＡＣ＃Ｅのエントリ情報が格納されている。
【００８７】
そこで、図１７に示すように、登録部１１２は、ＭＡＣアドレステーブル２０上のＭＡＣ＃Ｅの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部１０６は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部１０３は、登録部１１２からの指示を受けて、ＦＩＬＯバッファ１０４の先頭にあるＭＡＣ＃Ｅの情報を削除する。
【００８８】
次に、登録部１１２は、ＦＩＬＯバッファ１０４が空になったか否かを判定する。ここでは、ＦＩＬＯバッファ１０４は空ではないので、図１８に示すように、登録部１１２は、追出処理をさらに行い、ＦＩＬＯバッファ１０４の最終登録エントリ情報に含まれるＭＡＣ＃Ｂを、空エントリ管理部１０６が記憶する空きエントリに登録する。この登録後のＭＡＣアドレステーブル２０及びＦＩＬＯバッファ１０４の状態が図１９に示される状態である。この状態では、ＭＡＣアドレステーブル２０上に、ＭＡＣ＃Ｂが登録されたエントリが２つ存在する。さらに、ＦＩＬＯバッファ１０４の先頭にＭＡＣ＃Ｂのエントリ情報が格納されている。
【００８９】
そこで、図２０に示すように、登録部１１２は、ＭＡＣアドレステーブル２０上のＭＡＣ＃Ｂの元エントリの情報を削除し、空きエントリとする。この時、空エントリ管理部１０６は、空きエントリの情報を記憶する。さらに、衝突アドレス一時管理部１０３は、テーブル制御管理部１０１からの指示を受けて、ＦＩＬＯバッファ１０４の先頭にあるＭＡＣ＃Ｂの情報を削除する。
【００９０】
次に、登録部１１２は、ＦＩＬＯバッファ１０４が空になったか否かを判定する。ここでは、ＦＩＬＯバッファ１０４が空になっているので、図２１に示すように、登録部１１２は、自己が記憶するＭＡＣ＃Ａを、空エントリ管理部１０６が記憶する空きエントリに登録する。この登録部１１２が、「格納部」の一例にあたる。
【００９１】
これにより、ＭＡＣアドレスの登録処理が完了し、ＭＡＣアドレステーブル２０及びＦＩＬＯバッファ１０４は、図２２で示す状態になる。以上で、最初の対象ＭＡＣアドレスに関して空きエントリが無かった場合のＭＡＣアドレスの登録処理が完了する。ここでは、２番目の対象ＭＡＣアドレスに関して空きエントリが検出される場合について説明したが、２番目以降の対象ＭＡＣアドレスに関して空きエントリが検出されない場合にも、同様の処理を繰り返すことで、受信ＭＡＣアドレスの登録を行うことができる。
【００９２】
次に、図２３及び２４を参照して、ＦＩＬＯバッファ１０４に空きが無くなった場合テーブル管理部１０の処理について説明する。図２３は、ＦＩＬＯバッファに空きが無くなった状態の図である。また、図２４は、ＦＩＬＯバッファを空にして元に戻した状態の図である。
【００９３】
テーブル管理部１０１が衝突検出処理を繰り返したが空きエントリが見つからない場合、ＦＩＬＯバッファ１０４にエントリ情報が蓄積され、図２３に示すように、ＦＩＬＯバッファ１０４に空きが無くなる。その場合、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０３に空きが無くなったことを衝突検出部１１１に通知する。衝突検出部１１１は、衝突検出処理を停止する。
【００９４】
衝突検出部１１１は、ＦＩＬＯバッファ１０３に空きが無くなった通知を受けて、ＦＩＬＯバッファ１０３を空にする指示を衝突アドレス一時管理部１０３に通知する。ＦＩＬＯバッファ１０３は、ＦＩＬＯバッファ１０３を空にする。これにより、図２４に示すように、ＦＩＬＯバッファ１０４は保持するエントリ情報が無くなる。またこの場合、ＭＡＣアドレステーブル２０のエントリに対する登録や削除は行われていない。そのため、アドレステーブル２０及びＦＩＬＯバッファ１０４は、受信ＭＡＣアドレスの登録の要求を受ける前と同じ状態を維持することになり、既登録エントリの削除による瞬断は発生しない。
【００９５】
さらに、衝突検出部１１１は、受信ＭＡＣアドレスの登録不可を登録部１１２に通知する。登録部１１２は、衝突検出部１１１からの通知を受けて、受信ＭＡＣアドレスの登録不可を登録結果出力部１０７に通知する。登録結果出力部１０７は、登録部１１２からの指示を受けて、ＭＡＣアドレスの登録不可を制御端末３へ通知する。
【００９６】
次に、図２５を参照して、本実施例に係る通信装置によるＭＡＣアドレスの登録処理の全体的な流れについて説明する。図２５は、実施例１に係る通信装置によるＭＡＣアドレスの登録処理のフローチャートである。
【００９７】
利用者は、操作端末３を用いて、登録したいＭＡＣアドレスをテーブル制御管理部１０１に入力する（ステップＳ１）。
【００９８】
衝突検出部１１１は、受信ＭＡＣアドレスのハッシュ計算をハッシュ部１０２に指示する。ハッシュ部１０２は、バンクの優先度にしたがって受信ＭＡＣアドレスのハッシュ計算を行い（ステップＳ２）、計算結果を衝突検出部１１１へ出力する。
【００９９】
衝突検出部１１１は、空きエントリがあるか否か、すなわち、全てのバンクで衝突が発生したか否かを判定する（ステップＳ３）。ここで、実際には衝突検出部１１１及びハッシュ部１０２によるこの衝突検出処理は、バンク毎に行われるが、ここでは、説明のため、まとめて１回のステップで表している。
【０１００】
空きエントリがあった場合（ステップＳ３：肯定）、衝突検出部１１１は、検出した空きエントリに受信ＭＡＣアドレスを登録し（ステップＳ４）、ＭＡＣアドレスの登録処理を終了する。
【０１０１】
これに対して、空きエントリが無い場合（ステップＳ３：否定）、衝突検出部１１１は、衝突が発生した旨の通知を衝突した各エントリの情報とともに、衝突回避制御部１０５に通知する。衝突回避制御部１０５は、衝突先のエントリで且つＦＩＬＯバッファ１０４に登録されていないエントリを抽出する（ステップＳ５）。そして、衝突回避制御部１０５は、抽出したエントリの情報を衝突検出部１１１に通知する。
【０１０２】
衝突検出部１１１は、抽出されたエントリの情報の通知をテーブル制御管理部１０１から受け、その情報を基にＭＡＣアドレステーブル２０から対象ＭＡＣアドレスを取得する。そして、衝突検出部１１１は、抽出されたエントリのエントリ情報のＦＩＬＯバッファ１０４への格納を衝突アドレス一時管理部１０３に指示する。アドレス一時管理部１０３は、衝突検出部１１１からの指示を受けて、抽出されたエントリのエントリ情報をＦＩＬＯバッファ１０４へ格納する（ステップＳ６）。
【０１０３】
次に、衝突検出部１１１は、対象ＭＡＣアドレスのハッシュ計算をハッシュ部１０２に指示する。ハッシュ部１０２は、バンクの優先度にしたがって対象ＭＡＣアドレスのハッシュ計算を行い（ステップＳ７）、計算結果を衝突検出部１１１へ出力する。
【０１０４】
衝突検出部１１１は、計算結果に応じた各バンクのエントリで衝突が発生したか否かを確認する。そして、衝突検出部１１１は、空きエントリがあるか否か、すなわち、対象ＭＡＣアドレスに関して全てのバンクで衝突が発生したか否かを判定する（ステップＳ８）。
【０１０５】
空きエントリが無い場合（ステップＳ８：否定）、衝突検出部１１１は、ＦＩＬＯバッファ１０４に空きがあるか否か、すなわち、ＦＩＬＯバッファ１０４が満杯か否かの判定を衝突アドレス一時管理部１０３に指示する。衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４に空きがあるか否かを判定し（ステップＳ９）、衝突検出部１１１に判定結果を通知する。
【０１０６】
ＦＩＬＯバッファ１０４に空きがある場合（ステップＳ９：肯定）、衝突検出部１１１は、ステップＳ５へ戻る。
【０１０７】
これに対して、ＦＩＬＯバッファ１０４に空きが無い場合（ステップＳ９：否定）、衝突検出部１１１は、受信ＭＡＣアドレスの登録不可を登録結果出力部１０７へ通知する。これを受けて、登録結果出力部１０７は、受信ＭＡＣアドレスの登録不可を制御端末３へ通知する（ステップＳ１０）。
【０１０８】
一方、空きエントリがある場合（ステップＳ８：肯定）、衝突検出部１１１は、対象ＭＡＣアドレス及び空きエントリの情報を登録部１１２へ出力する。そして、登録部１１２は、空きエントリに対象ＭＡＣアドレスを登録する（ステップＳ１１）。
【０１０９】
次に、登録部１１２は、登録したＭＡＣアドレスの元エントリを空にして空きエントリにする。ここで、登録したＭＡＣアドレスとは、対象ＭＡＣアドレス又は追出ＭＡＣアドレスである。さらに、登録部１１２は、空きエントリを空エントリ管理部１０６に通知する（ステップＳ１２）。
【０１１０】
登録部１１２は、ＦＩＬＯバッファ１０４の先頭のエントリ情報の削除を衝突アドレス一時管理部１０３に指示する。衝突アドレス一時管理部１０３は、登録部１１２からの指示を受けて、ＦＩＬＯバッファ１０４の先頭のエントリ情報を削除する（ステップＳ１３）。
【０１１１】
登録部１１２は、ＦＩＬＯバッファ１０４が空か否かを衝突アドレス一時管理部１０３に問い合わせ、その応答にしたがってＦＩＬＯバッファ１０４が空か否かを判定する（ステップＳ１４）。
【０１１２】
ＦＩＬＯバッファ１０４が空でない場合（ステップＳ１４：否定）、登録部１１２は、ＦＩＬＯバッファ１０４における最終登録エントリ情報の提供を衝突アドレス一時管理部１０３に指示する。衝突アドレス一時管理部１０３は、登録部１１２からの指示を受けて、最終登録エントリ情報をＦＩＬＯバッファ１０４から取得する。その後、登録部１１２は、最終登録エントリ情報を衝突アドレス一時管理部１０３から取得する（ステップＳ１５）。
【０１１３】
次に、登録部１１２は、空きエントリの情報を空エントリ管理部１０６から取得する。そして、登録部１１２は、最終登録エントリ情報に含まれるＭＡＣアドレスである追出ＭＡＣアドレスを空きエントリに登録する（ステップＳ１６）。
【０１１４】
次に、登録部１１２は、最終登録エントリ情報で示されるエントリの場所を取得する（ステップＳ１７）。その後、登録部１１２は、ステップＳ１２に戻る。
【０１１５】
これに対して、ＦＩＬＯバッファ１０４が空である場合（ステップＳ１４：肯定）、登録部１１２は、空きエントリの情報を空エントリ管理部１０６から取得する。そして、登録部１１２は、自己が保持する受信ＭＡＣアドレスを空きエントリに登録する（ステップＳ１８）。
【０１１６】
そして、登録部１１２は、受信ＭＡＣアドレスの登録完了を登録結果出力部１０７へ通知する。登録結果出力部１０７は、受信ＭＡＣアドレスの登録完了通知を制御端末３へ送信し、利用者にＭＡＣアドレスの登録完了を通知する（ステップＳ１９）。
【０１１７】
以上に説明したように、本実施例に係る通信装置は、バンク毎に異なるハッシュ計算を行い、空きエントリが見つからない場合、衝突先のエントリの中から１つ選んで空きエントリを検出することを繰り返す。そして、空きエントリを検出した場合、本実施例に係る通信装置は、空きエントリの検出を行ったＭＡＣアドレスを順次空きバンクに登録していく。これにより、本実施例に係る通信装置は、ＭＡＣアドレス登録時の衝突による登録不可の確率を低減することができる。
【０１１８】
また、本実施例に係る通信装置は、ＭＡＣアドレステーブルを格納するメモリとしてＴＣＡＭといった高価なメモリではなく、一般的なメモリを使用した上で、衝突による登録不可の確率を低減している。そのため、本実施例に係る通信装置は、安価に大量のテーブルを管理することができる。
【０１１９】
（変形例１）
実施例１で説明した通信装置では、一例としてバンクを等分した場合で説明した。ただし、バンクの割振り方法に特に制限はない。図２６は、各バンクのサイズを変更した割振り方法の例を示す図である。また、図２７は、バンク数を変更した割振り方法の例を示す図である。
【０１２０】
ここでは、実施例１のようにバンク２１、２２、２３の順に優先度が下がっていく場合で説明する。この場合、例えば、図２６のように優先度がより高いバンクを大きくすることができる。例えば、バンク２１を最大にし、バンク２２を次に大きくし、バンク２３を最も小さくしてもよい。このようにバンクの大きさを変更することにより、最初の衝突検出で空きエントリが検出される可能性を高くすることができる。これにより、通信装置１は衝突先のＭＡＣアドレスを用いた検出を行う確率が低くなり、処理負荷を低減することができる。
【０１２１】
また、例えば、実施例１では３分割を例に説明したが、バンクの個数は特に制限はない。例えば、図２７で示すバンク２１〜２６のようにバンクの数を増やした場合、バンク毎に異なるハッシュ計算式を用いるため、通信装置１では、登録するときに空きエントリが検出される確率が高くなる。そのため、バンクの数を増やすことにより、通信装置１は、次の衝突したＭＡＣアドレスを用いた検出を行わなくて済む。これにより、通信装置１は衝突先のＭＡＣアドレスを用いた検出を行う回数を低く抑えることができ、処理負荷を低減することができる。
【０１２２】
また、図２６及び２７で示す分割方法を組み合わせてもよい。すなわち、ＭＡＣアドレステーブル２０を格納するメモリを、より細かく分割しつつ、優先度の高いバンクを大きくしてもよい。
【０１２３】
（変形例２）
また、実施例１では、テーブル制御管理部１０１が、受信ＭＡＣアドレスを記憶していたが、追出処理の最後にテーブル制御管理部１０１が取得できるのであれば受信ＭＡＣアドレスの情報の保持方法はこれに限らない。例えば、ＦＩＬＯバッファ１０４に最初に受信ＭＡＣアドレスのエントリ情報を格納し、その後から対象ＭＡＣアドレスのエントリ情報を格納することで、受信ＭＡＣアドレスの情報を保持してもよい。
【０１２４】
さらに、実施例１では、ＦＩＬＯバッファ１０４を用いたが、受信ＭＡＣアドレスが全てのバンクで衝突した後、衝突検出処理を１回だけを行う構成であれば、ＦＩＬＯバッファ１０４を設けなくてもよい。
【実施例２】
【０１２５】
次に、実施例２について説明する。本実施例に係る通信装置は、ＦＩＬＯバッファ１０４に空きが無くなった場合に、ダイナミックＭＡＣアドレスを格納するエントリを空にして空きエントリを作成することが実施例１と異なる。本実施例に係るテーブル管理部１０も図５のブロック図で表される。以下の説明では、実施例１と同じ符号を有する各部は、特に説明の無い限り同じ機能を有するものとする。
【０１２６】
まず、本実施例に係るテーブル管理部１０も実施例１と同様に、受信ＭＡＣアドレスが全てのバンクで衝突した場合、衝突先のＭＡＣアドレスを対象ＭＡＣアドレスとして、衝突検出処理を繰り返す。
【０１２７】
そして、衝突検出処理を繰り返した結果、図２８に示すようにＦＩＬＯバッファ１０４に空きが無くなることが考えられる。図２８は、実施例２におけるＦＩＬＯバッファに空きが無い状態を表す図である。この時、ＦＩＬＯバッファ１０４には、複数のエントリ情報が格納されている。そして、エントリ情報の中には、ダイナミックＭＡＣアドレスを含むエントリであるダイナミックエントリのエントリ情報及びスタティックＭＡＣアドレスを含むエントリであるスタティッククエントリのエントリ情報が含まれる。
【０１２８】
図２８において、ＭＡＣアドレステーブル２０の中でＭＡＣＤｙｎａｍｉｃと記載されているエントリが、ダイナミックＭＡＣアドレスが登録されたエントリの１つである。また、ＦＩＬＯバッファ１０４の中でＭＡＣＤｙｎａｍｉｃと記載されているエントリ情報が、ＭＡＣアドレステーブル２０の中でＭＡＣＤｙｎａｍｉｃに対応するエントリ情報である。ＭＡＣアドレステーブル２０のエントリ及びＦＩＬＯバッファ１０４のエントリ情報それぞれにおいて、ＭＡＣＤｙｎａｍｉｃであることを示すフラグが格納されている。
【０１２９】
ここで、スタティックＭＡＣアドレスは、利用者がＭＡＣアドレスとポートとを一意に対応付ける意思を持って登録したアドレスである。そのため、スタティックＭＡＣアドレスは重要度が高く、また削除後に自動的に登録を行うことも困難である。これに対して、ダイナミックＭＡＣアドレスは、自動的にポートとＭＡＣアドレスとの対応が登録されたアドレスである。そのため、重要度は比較的低く、また削除しても自動的に登録を行うことが容易である。そこで、ダイナミックＭＡＣアドレスが登録されているエントリを空にして空きエントリを作成しても運用上の問題が発生する可能性は低い。
【０１３０】
そこで、登録部１１２は、ＦＩＬＯバッファ１０４に空きが無くなった旨の通知を衝突検出部１１１から受けると、ダイナミックエントリのエントリ情報の検出を衝突アドレス一時管理部１０３に指示する。その後、登録部１１２は、ダイナミックエントリのエントリ情報を衝突アドレス一時管理部１０３から取得する。
【０１３１】
これに対して、ダイナミックエントリのエントリ情報が見つからない場合、登録部１１２は、ダイナミックエントリのエントリ情報が無い旨の通知を衝突アドレス一時管理部１０３から受ける。この場合、登録部１１２は、受信ＭＡＣアドレスの登録不可を登録結果出力部１０７へ通知する。
【０１３２】
ダイナミックエントリのエントリ情報を取得した場合、登録部１１２は、ＦＩＬＯバッファ１０４の先頭のエントリ情報から取得したダイナミックエントリのエントリ情報までのエントリ情報の削除を衝突アドレス一時管理部１０３に指示する。
【０１３３】
次に、登録部１１２は、取得したエントリ情報で示されるＭＡＣアドレステーブル２０のダイナミックエントリを空にする。この時のＭＡＣアドレステーブル２０及びＦＩＬＯバッファ１０４の状態が図２９で示される。図２９は、ダイナミックエントリを空きエントリにした状態を表す図である。
【０１３４】
この場合、図２９に示すように、ＦＩＬＯバッファ１０４から、図２８における先頭のエントリ情報であるＭＡＣ＃ＸＸのエントリ情報からＭＡＣＤｙｎａｍｉｃのエントリ情報までが削除されている。この状態では、ＦＩＬＯバッファ１０４には、ＭＡＣ＃Ｅ及びＭＡＣ＃Ｂのエントリ情報の２つが格納されている。また、ＭＡＣアドレステーブル２０では、ＭＡＣＤｙｎａｍｉｃが登録されていたダイナミックエントリが空きエントリである。
【０１３５】
その後、登録部１１２は、ＭＡＣ＃Ｅ及びＭＡＣ＃Ｂを追出ＭＡＣアドレスとして追出処理を行う。そして、ＭＡＣ＃Ｂの追出処理が終わると、登録部１１２は、ＭＡＣ＃Ｂの元エントリである空きエントリに受信ＭＡＣアドレスであるＭＡＣ＃Ａを登録する。この時のＭＡＣアドレステーブル２０及びＦＩＬＯバッファ１０４の状態が図３０で示される。図３０は、ダイナミックエントリを空きエントリにした後のＭＡＣアドレスの登録処理の完了後の状態を表す図である。
【０１３６】
また、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４に空きが無くなると、ダイナミックエントリのエントリ情報の検出の指示を登録部１１２から受ける。そして、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４を検索し、最も古いダイナミックエントリのエントリ情報を検出する。そして、衝突アドレス一時管理部１０３は、検出したダイナミックエントリのエントリ情報を登録部１１２へ送信する。これに対して、ダイナミックエントリのエントリ情報が見つからない場合、衝突アドレス一時管理部１０３は、ダイナミックエントリのエントリ情報がない旨を登録部１１２へ通知する。
【０１３７】
ダイナミックエントリのエントリ情報の送信後、衝突アドレス一時管理部１０３は、エントリ情報の削除の指示を登録部１１２から受ける。そして、衝突アドレス一時管理部１０３は、ＦＩＬＯバッファ１０４における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報を削除する。
【０１３８】
以上のような処理を行うことで、図３０に示すように、対象ＭＡＣアドレスが登録されたエントリにダイナミックエントリがあれば、本実施例に係るテーブル制御管理部１０１は、受信ＭＡＣアドレスの登録を完了することができる。
【０１３９】
次に、図３１を参照して、本実施例に係る通信装置１によるＦＩＬＯバッファ１０４に空きが無くなった後のＭＡＣアドレスの登録処理について説明する。図３１は、実施例２に係る通信装置によるＭＡＣアドレスの登録処理のフローチャートである。
【０１４０】
ＦＩＬＯバッファ１０４に空きが無くなる（ステップＳ１０１）。
【０１４１】
登録部１１２は、ダイナミックエントリのエントリ情報と通知を衝突アドレス一時管理部１０３に指示する。そして、登録部１１２は、衝突アドレス一時管理部１０３からの応答により、ＦＩＬＯバッファ１０４にダイナミックエントリがあるか否かを判定する（ステップＳ１０２）。
【０１４２】
ダイナミックエントリが無い場合（ステップＳ１０２：否定）、登録部１１２は、受信ＭＡＣアドレスの登録不可を登録結果出力部１０７に通知する。登録結果出力部１０７は、登録部１１２からの通知を受けて、ＭＡＣアドレスの登録不可を制御端末３へ送信し、利用者に通知する（ステップＳ１０３）。
【０１４３】
これに対して、ダイナミックエントリがある場合（ステップＳ１０２：肯定）、登録部１１２は、ダイナミックエントリのエントリ情報を衝突アドレス一時管理部１０３から取得する。本実施例では、登録部１１２は、ＦＩＬＯバッファ１０４の中の最も古いダイナミックエントリのエントリ情報を取得する。これにより、登録部１１２は、ＦＩＬＯバッファ１０４からダイナミックエントリのエントリ情報を１つ取得する（ステップＳ１０４）。
【０１４４】
次に、登録部１１２は、取得したエントリ情報が示すＭＡＣアドレステーブル２０上のダイナミックエントリを空きエントリにする（ステップＳ１０５）。
【０１４５】
さらに、登録部１１２は、ＦＩＬＯバッファ１０４における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報の削除を衝突アドレス一時管理部１０３に指示する。衝突アドレス一時管理部１０３は、登録部１１２からの指示を受けて、ＦＩＬＯバッファ１０４における先頭のエントリ情報から検出したダイナミックエントリのエントリ情報までのエントリ情報を削除する（ステップＳ１０６）。
【０１４６】
そして、登録部１１２は、追出処理を行う（ステップＳ１０７）。
【０１４７】
その後、登録部１１２は、受信ＭＡＣアドレスの登録完了を登録結果出力部１０７に通知する。登録結果出力部１０７は、登録部１１２からの通知を受けて、ＭＡＣアドレスの登録完了を制御端末３へ送信し、利用者に通知する（ステップＳ１０８）。
【０１４８】
以上に説明したように、本実施例に係る通信装置は、衝突検出処理の結果、ＦＩＬＯバッファ１０４に空きが無くなった場合に、ダイナミックエントリを空きエントリにして追出処理を行い受信ＭＡＣアドレスを登録する。これにより、本実施例に係る通信装置は、ＭＡＣアドレス登録時の衝突による登録不可の確率をより低減することができる。
【実施例３】
【０１４９】
次に、実施例３について説明する。本実施例に係る通信装置は、受信ＭＡＣアドレスが衝突した衝突先のエントリに登録されているＭＡＣアドレスを順次対象ＭＡＣアドレスとして衝突検出処理を行うことが実施例１と異なる。本実施例に係るテーブル管理部１０も図５のブロック図で表される。以下の説明では、実施例１と同じ符号を有する各部は、特に説明の無い限り同じ機能を有するものとする。
【０１５０】
衝突検出部１１１は、受信ＭＡＣアドレスであるＭＡＣ＃Ａに対するハッシュ計算の計算結果をハッシュ部１０２から取得し、各バンクで衝突が発生するか否かを判定する。この場合、図３２に示すように、テーブル制御管理部１０１は、バンク２１〜２３の全てのバンクで衝突の発生を検出する。図３２は、実施例３における受信ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【０１５１】
次に、衝突検出部１１１は、ＭＡＣ＃Ａを登録部１１２に記憶させる。そして、衝突検出部１１１は、衝突先のエントリの中から一つ選択されたエントリ情報を衝突回避制御部１０５から取得する。そして、衝突検出部１１１は、取得したエントリに登録されているＭＡＣアドレスを最初の対象ＭＡＣアドレスとして取得する。ここでは、衝突検出部１１１は、最初の対象ＭＡＣアドレスとしてＭＡＣ＃Ｂを取得する。衝突検出部１１１は、ＭＡＣ＃Ｂに対するハッシュ計算の計算結果をハッシュ部１０２から取得し、各バンクで衝突が発生するか否かを判定する。この場合、図３３に示すように、衝突検出部１１１は、バンク２１〜２３の全てのバンクで衝突の発生を検出する。図３３は、実施例３における最初の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。
【０１５２】
衝突検出部１１１は、ＭＡＣ＃Ｂのエントリのエントリ情報をＦＩＬＯバッファ１０４に格納する指示を衝突アドレス一時管理部１０３へ送信する。次に、衝突検出部１１１は、衝突先のエントリの中から選択されたＭＡＣ＃Ｂ以外のエントリのエントリ情報を衝突回避制御部１０５から取得する。そして、衝突検出部１１１は、取得したエントリに登録されているＭＡＣアドレスを２番目の対象ＭＡＣアドレスとして取得する。ここでは、衝突検出部１１１は、バンク２２のＭＡＣ＃Ｃを２番目の対象ＭＡＣアドレスとして取得する。衝突検出部１１１は、ＭＡＣ＃Ｃに対するハッシュ計算の計算結果をハッシュ部１０２から取得し、各バンクで衝突が発生するか否かを判定する。この場合、図３４に示すように、衝突検出部１１１は、バンク２２で登録可能なエントリを検出する。図３４は、実施例３における２番目の対象ＭＡＣアドレスを用いた衝突検出処理の状態を表す図である。このように、テーブル制御管理部１０１は、空きエントリが検出できるまで衝突検出処理を繰り返す。
【０１５３】
そして、空きエントリを検出後、登録部１１２は、実施例１と同様に追出処理を行い、最終的に受信ＭＡＣアドレスであるＭＡＣ＃Ａを登録する。
【０１５４】
衝突回避制御部１０５は、衝突の発生及び衝突が発生した各バンクのエントリの情報の入力を衝突検出部１１１から受ける。そして、衝突回避制御部１０５は、バンクの優先順位にしたがい、エントリを選択し、そのバンクのエントリの情報を衝突検出部１１１へ送信する。その後、受信ＭＡＣアドレスの衝突先のエントリがなくなるまで、衝突回避制御部１０５は、衝突の発生の通知を受けて、１つ前に選んだバンクの次の優先順位を持つバンクを選択し、そのバンクの衝突先のエントリのエントリ情報を衝突検出部１１１に通知する。ここでは、衝突回避制御部１０５は、最初にバンク２１のＭＡＣ＃Ｂが登録されているエントリを選びそのエントリ情報を通知し、次にバンク２２のＭＡＣ＃Ｃが登録されているエントリを選びそのエントリ情報を通知する。
【０１５５】
ここで、ＭＡＣ＃Ａの衝突先のエントリを全て対象ＭＡＣアドレスとしても空きエントリが見つからない場合が考えられる。その場合、衝突回避制御部１０５は、ＭＡＣ＃ＢやＭＡＣ＃Ｃの衝突先のエントリの中で未だ対象エントリとしていないエントリを選択し、衝突検出部１１１はその選択にしたがって衝突検出処理を繰り返えしてもよい。
【０１５６】
以上に説明したように、本実施例に係る通信装置は、衝突先のエントリを順番に対象エントリとして衝突検出処理を繰り返す。このように対象エントリの選択には他の方法を用いることもできる。
【０１５７】
（ハードウェア構成）
次に、図３５を参照して、各実施例に係る通信装置１のハードウェア構成について説明する。図３５は、通信装置のハードウェア構成の一例の図である。図３５のハードウェア構成は、例えば、ソフトウェアを用いて図２，３及び５の各部の機能を実現する場合をあらわす。
【０１５８】
通信装置１は、ＣＰＵ９１、ＲＡＭ（Random  Access  Memory）９２、ＦＩＬＯバッファ用ＲＡＭ９３及びポート９４を有する。ＲＡＭ９２、ＦＩＬＯバッファ用ＲＡＭ９３及びポート９４は、バスによりＣＰＵ９１に接続する。
【０１５９】
ＲＡＭ９２は、図２に例示した回線ＩＦ回路１２及び制御回路１３の機能を実現するプログラムを記憶する。また、ＲＡＭ９２は、スイッチ制御部１１の機能、すなわち、図３に例示した転送部３０、テーブル管理部１０の機能を実現するプログラムを記憶する。より詳しくは、ＲＡＭ９２は、テーブル管理部１０の機能として、図５に例示するテーブル制御管理部１０１、衝突検出部１１１及び登録部１１２の機能を実現するプログラムを記憶する。また、ＲＡＭ９２は、ハッシュ部１０２、衝突アドレス一時管理部１０３、衝突回避制御部１０５及び空エントリ管理部１０６の機能を実現するプログラムを記憶する。このように、ＲＡＭ９２は、上述した各プログラムを含む各種プログラムを記憶する。さらに、ＲＡＭ９２は、ＭＡＣアドレステーブル２０を記憶する。
【０１６０】
ＦＩＬＯバッファ用ＲＡＭ９３は、ＦＩＬＯバッファ１０４の機能を有する。
【０１６１】
ＣＰＵ９１は、ＲＡＭ９２から各種プログラムを読み出して実行することで、回線ＩＦ回路１２、制御回路１３及びスイッチ制御部１１の機能を実現する。詳しくは、ＣＰＵ９１及びＲＡＭ９２は、スイッチ制御部１１の機能として、テーブル管理部１０及び転送部３０の機能を実現する。より詳しくは、ＣＰＵ９１及びＲＡＭ９２は、テーブル管理部１０の機能として、テーブル制御管理部１０１、ハッシュ部１０２、衝突アドレス一時管理部１０３、衝突回避制御部１０５及び空エントリ管理部１０６の機能を実現する。特に、ＣＰＵ９１及びＲＡＭ９２は、テーブル制御管理部１０１の機能として、衝突検出部１１１及び登録部１１２の機能を実現する。
【０１６２】
ただし、ここでは各部の機能をソフトウェアで実現する場合で説明したが、これと異なり組み込み回路などのハードウェアを用いて各部の機能を実現してもよい。
【符号の説明】
【０１６３】
１  通信装置
２  端末装置
３  制御端末
１０  テーブル管理部
１１  スイッチ制御部
１２  回線ＩＦ回路
１３  制御回路
２０  ＭＡＣアドレステーブル
３０  転送部
１０１  テーブル制御管理部
１０２  ハッシュ部
１０３  衝突アドレス一時管理部
１０４  ＦＩＬＯバッファ
１０５  衝突回避制御部
１０６  空エントリ管理部
１０７  登録結果出力部
１１１  衝突検出部
１１２  登録部
【図１】
0006520259.tif 000002
【図２】
0006520259.tif 000003
【図３】
0006520259.tif 000004
【図４】
0006520259.tif 000005
【図５】
0006520259.tif 000006
【図６】
0006520259.tif 000007
【図７】
0006520259.tif 000008
【図８】
0006520259.tif 000009
【図９】
0006520259.tif 000010
【図１０】
0006520259.tif 000011
【図１１】
0006520259.tif 000012
【図１２】
0006520259.tif 000013
【図１３】
0006520259.tif 000014
【図１４】
0006520259.tif 000015
【図１５】
0006520259.tif 000016
【図１６】
0006520259.tif 000017
【図１７】
0006520259.tif 000018
【図１８】
0006520259.tif 000019
【図１９】
0006520259.tif 000020
【図２０】
0006520259.tif 000021
【図２１】
0006520259.tif 000022
【図２２】
0006520259.tif 000023
【図２３】
0006520259.tif 000024
【図２４】
0006520259.tif 000025
【図２５】
0006520259.tif 000026
【図２６】
0006520259.tif 000027
【図２７】
0006520259.tif 000028
【図２８】
0006520259.tif 000029
【図２９】
0006520259.tif 000030
【図３０】
0006520259.tif 000031
【図３１】
0006520259.tif 000032
【図３２】
0006520259.tif 000033
【図３３】
0006520259.tif 000034
【図３４】
0006520259.tif 000035
【図３５】
0006520259.tif 000036