(57)【要約】【課題】伝送装置のフォワーディング性能の低下を抑制する。【解決手段】入力データの識別情報から複数のハッシュ関数＃１，＃２を用いて複数のハッシュ値＃１，＃２を求め、いずれかのハッシュ値を基にフォワーディング情報ＦＷＴを参照して入力データのフォワーディングを制御し、ハッシュ関数＃１，＃２毎にハッシュ値がフォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報ＨＭＴに基づいて、前記参照に用いられるハッシュ値の選択を制御する。【選択図】図４
2016096422.tif 000002
【特許請求の範囲】
【請求項１】
入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、
いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御するフォワーディング制御部と、
前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、
を備えた、伝送装置。
【請求項２】
前記ハッシュ管理情報は、
前記ハッシュ関数毎に、前記使用の有無に関わらず前記各ハッシュ関数により演算されるハッシュ値の登録有無を示す情報を含み、
前記ハッシュ制御部は、
前記登録有無を示す情報に基づいて、新しい入力データの識別情報に対して前記ハッシュ演算部にて得られるハッシュ値の前記ハッシュ管理情報への登録可否を判定する、請求項１に記載の伝送装置。
【請求項３】
前記ハッシュ制御部は、
前記複数のハッシュ関数に対して、前記登録時の選択優先順位を割り当て、前記参照時には、前記選択優先順位とは逆転した優先順位で前記選択を制御する、請求項２に記載の伝送装置。
【請求項４】
前記ハッシュ制御部は、
未使用のハッシュ値の全てについて、前記登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数のハッシュ値を登録不可と判定する、請求項２に記載の伝送装置。
【請求項５】
前記ハッシュ制御部は、
使用されているハッシュ値について、前記登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数よりも高い選択優先順位が割り当てられたハッシュ関数のハッシュ値を登録不可と判定する、請求項２に記載の伝送装置。
【請求項６】
前記ハッシュ制御部は、
前記ハッシュ管理情報における前記ハッシュ値の登録数を前記識別情報毎にカウントし、
カウント値が０になると、前記識別情報に対するハッシュ値に対応した前記ハッシュ管理情報を初期化する、請求項１に記載の伝送装置。
【請求項７】
前記フォワーディング情報は、
選択されたハッシュ値が重複したときの次参照先となるフォワーディング情報を示すポインタ情報を含む、請求項１に記載の伝送装置。
【請求項８】
前記複数のハッシュ関数は、
第１のハッシュ値が得られる第１のハッシュ関数と、前記第１のハッシュ値と重複しない第２のハッシュ値が得られる第２のハッシュ関数と、を含み、
前記ハッシュ制御部は、
前記第１のハッシュ値と前記第２のハッシュ値とに基づく前記フォワーディング情報へのポインタ情報を基に、前記フォワーディング情報を参照する、請求項１に記載の伝送装置。
【請求項９】
前記第２のハッシュ関数が複数であり、
前記ハッシュ制御部は、
前記複数の第２のハッシュ関数から得られる複数の前記第２のハッシュ値によって、前記ポインタ情報をグループ分けする、請求項８に記載の伝送装置。
【請求項１０】
前記ハッシュ制御部は、
前記第１のハッシュ関数が、前記第１のハッシュ関数よりも偏りの少ないハッシュ値の得られる別の第１のハッシュ関数に更新されると、当該更新に応じて前記ポインタ情報を更新する、請求項８に記載の伝送装置。
【請求項１１】
入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求め、
いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御し、
前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御する、フォワーディング制御方法。
【請求項１２】
入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、
いずれかのハッシュ値を基に、前記識別情報に対応する情報が登録されたデータベースを参照して、前記入力データに対応する情報検索を行なう情報検索部と、
前記ハッシュ関数毎にハッシュ値が前記データベースの参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、
を備えた、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、伝送装置、フォワーディング制御方法、及び、情報処理装置に関する。
【背景技術】
【０００２】
ルータやスイッチ等のパケットを伝送するパケット装置では、受信パケットの宛先アドレスを基にフォワーディングテーブルを参照、検索して、受信パケットの転送先を決定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平３−５４９３７号公報
【特許文献２】特開２０１３−１７９４２１号公報
【特許文献３】特開２０１０−５０６００号公報
【特許文献４】特開２００９−１２３０５０号公報
【特許文献５】特開２００４−２２７４３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
パケットの宛先アドレス数が増えると、フォワーディングテーブルが肥大化する。ここで、パケット伝送装置で受信される可能性のあるパケットの宛先アドレス数は、宛先アドレスのビット数で表現可能なアドレス数の全てではなく、一部に限られることが多い。
【０００５】
そこで、宛先アドレスをハッシュ関数によって縮退したアドレス空間のハッシュ値に変換し、得られたハッシュ値をフォワーディングテーブルの参照（検索）キーに用いることがある。これにより、フォワーディングテーブルの肥大化を抑えることができる。
【０００６】
しかし、ハッシュ関数を用いて宛先アドレス空間を縮退させると、異なる宛先アドレスに対して同じハッシュ値が得られる場合がある。このようなハッシュ値の重複が生じると、１回のフォワーディングテーブルの参照ではパケットの正しい転送先を決定できない。別言すると、フォワーディングテーブルの参照回数が増える。そのため、パケット伝送装置のフォワーディング性能が低下するおそれがある。
【０００７】
１つの側面では、本発明の目的の１つは、伝送装置のフォワーディング性能の低下を抑制できるようにすることにある。
【課題を解決するための手段】
【０００８】
１つの側面において、伝送装置は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御するフォワーディング制御部と、前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、を備える。
【０００９】
また、１つの側面において、フォワーディング制御方法は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求め、いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御し、前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御する。
【００１０】
更に、１つの側面において、情報処理装置は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、いずれかのハッシュ値を基に、前記識別情報に対応する情報が登録されたデータベースを参照して、前記入力データに対応する情報検索を行なう情報検索部と、前記ハッシュ関数毎にハッシュ値が前記データベースの参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、を備える。
【発明の効果】
【００１１】
１つの側面として、伝送装置のフォワーディング性能の低下を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】一実施形態に係るパケット伝送装置の構成例を示すブロック図である。
【図２】ＭＡＣアドレスをハッシュ関数によってハッシュ演算して得られるハッシュ値によってフォワーディングテーブルを参照する例を模式的に示す図である。
【図３】図２においてハッシュ関数を複数用いる例を模式的に示す図である。
【図４】一実施形態に係るハッシュ値の管理及びＭＡＣアドレスの登録処理の一例について説明するための模式図である。
【図５】一実施形態に係るハッシュ管理テーブルの一例を示す図である。
【図６】一実施形態に係る、登録済みＭＡＣアドレスの削除に応じたハッシュ管理テーブルのエントリ削除（更新）処理を説明するための図である。
【図７】一実施形態に係る、登録済みＭＡＣアドレスの削除に応じたハッシュ管理テーブルのエントリ削除（更新）処理を説明するための図である。
【図８】一実施形態に係る、登録済みＭＡＣアドレスの削除に応じたハッシュ管理テーブルのエントリ削除（更新）処理を説明するための図である。
【図９】（Ａ）〜（Ｄ）は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例（第１の処理例）を説明するための図である。
【図１０】（Ａ）〜（Ｄ）は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例（第２の処理例）を説明するための図である。
【図１１】（Ａ）〜（Ｄ）は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例（第３の処理例）を説明するための図である。
【図１２】一実施形態に係る、ハッシュ関数を多段化して、フォワーディングテーブルのサイズを増加させずに、ハッシュ値の重複を処理する例を説明するための図である。
【図１３】図１２において、第２段のハッシュ関数を複数設けた場合の処理例を説明するための図である。
【図１４】図１２において、第１段のハッシュ関数を更新する場合の処理を説明するための図である。
【図１５】図４においてＣＡＭ及びポインタテーブルを併用した重複処理の一例を説明するための図である。
【図１６】（Ａ）及び（Ｂ）は、ハッシュ値の演算例を説明するための図である。
【図１７】（Ａ）及び（Ｂ）は、一実施形態の効果を説明するための図である。
【図１８】図１に例示するパケット伝送装置の第１構成例を示すブロック図である。
【図１９】図１８に例示するフォワーディング処理部の動作（宛先参照時）の一例を示すフローチャートである。
【図２０】図１８に例示するフォワーディング処理部の動作（アドレス登録時）の一例を示すフローチャートである。
【図２１】図２０に例示する登録条件判定処理の一例を示すフローチャートである。
【図２２】図２０に例示する重複判定処理の一例を示すフローチャートである。
【図２３】図１８に例示するハッシュ管理テーブル制御部によるハッシュ管理テーブルの更新処理の一例を示すフローチャートである。
【図２４】図１８に例示するフォワーディング処理部の動作（アドレス登録解除時）の一例を示すフローチャートである。
【図２５】図１に例示するパケット伝送装置の第２構成例を示すブロック図である。
【図２６】図２５に例示するフォワーディング処理部の動作（アドレス登録時）の一例を示すフローチャートである。
【図２７】図２６に例示するハッシュ関数検索処理の一例を示すフローチャートである。
【図２８】図２６に例示するハッシュ関数検索処理の一例を示すフローチャートである。
【図２９】図２５に例示するフォワーディング処理部の動作（第１のハッシュ関数更新時）の一例を示すフローチャートである。
【図３０】図１に例示するパケット伝送装置の構成例を示すブロック図である。
【図３１】図１に例示するパケット伝送装置の他の構成例を示すブロック図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。また、以下に説明する各種の例示的態様は、適宜に組み合わせて実施しても構わない。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１４】
図１は、一実施形態に係るパケット伝送装置の構成例を示すブロック図である。パケット伝送装置１は、いずれかのポートを通じて受信したパケットデータ（以下「パケット」と略称することがある。）を、当該受信パケットに付与されている宛先情報に応じたポートへ出力することができる。なお、「パケット」は、通信信号の一例であり、ユーザ信号や制御信号が含まれてよい。「信号」は「データ」あるいは「情報」に読み替えてもよい。
【００１５】
宛先情報の一例は、パケットの宛先である通信機器や当該宛先に到達可能な経路等を識別可能な情報であってよく、そのような識別情報の一例としては、ＭＡＣアドレスやＩＰアドレス等のアドレス情報が挙げられる。なお、「ＭＡＣ」は、「Media Access Control」の略称であり、「ＩＰ」は、「Internet Protocol」の略称である。
【００１６】
宛先情報に応じたポートへのパケット出力は、パケットの「転送」、「フォワーディング」、あるいは、「スイッチ」と称してよい。そのため、パケット伝送装置１は、「パケットルータ」や「パケットスイッチ」等と称されてもよい。
【００１７】
パケットのフォワーディングは、例示的に、受信パケットの宛先情報と、フォワーディングテーブルや転送テーブル等と称される、例えば宛先情報と経路情報とを対応付けたテーブル形式のデータベースと、を基に行なわれる。経路情報には、例示的に、パケット伝送装置１の出力ポートを識別可能な情報が含まれてよい。
【００１８】
図１に例示するパケット伝送装置１は、例示的に、Ｎ個（Ｎは１以上の整数）の入出力インタフェース（ＩＦ）１１−１〜１１−Ｎ（＃１〜＃Ｎ）と、スイッチファブリック（ＳＷＦ）１２と、制御部１３と、を備える。
【００１９】
なお、以下において、入出力ＩＦ１１−ｉ（＃ｉ）（ｉ＝１〜Ｎのいずれか）を区別しなくてよい場合は単に「入出力ＩＦ１１」と称することがある。また、パケット伝送装置１は、単に「伝送装置１」と称することがある。
【００２０】
入出力ＩＦ１１は、１又は複数の入出力ポートを有し、当該入出力ポートを通じて、パケットを送受信可能である。なお、入出力ＩＦ１１の入力側は「ＩＧ（Ingress）」と称してよく、入出力ＩＦ１１の出力側は「ＥＧ（Egress）」と称してよい。
【００２１】
ＳＷＦ１２は、制御部１３の制御に応じて、いずれかの入出力ＩＦ１１間を接続して内部的なパケットの転送経路を形成（「設定」と称してもよい。）する。ＳＷＦ１２は、パケット伝送装置１に搭載される入出力ＩＦ１１の数（別言すると、入出力ポート数）に応じて複数設けられてもよい。
【００２２】
入出力ＩＦ１１は、例示的に、フォワーディングテーブルＦＷＴを有しており、ＩＧで受信したパケットの宛先情報を基にフォワーディングテーブルＦＷＴを参照、検索して、どの入出力ＩＦ１１に受信パケットを転送すればよいかを判断、識別する。なお、フォワーディングテーブルＦＷＴの参照、検索は、フォワーディングテーブルＦＷＴに対する「アクセス」と総称してもよい。
【００２３】
フォワーディングテーブルＦＷＴは、テーブル形式の情報（あるいはデータ）として表現されたフォワーディング情報の一例である。図１の例では、宛先情報Ａのパケットは入出力ＩＦ＃２へ転送し、宛先情報Ｂのパケットは入出力ＩＦ＃１へ転送することが、入出力ＩＦ１１＃ＮのフォワーディングテーブルＦＷＴに登録されている。なお、宛先情報Ａのパケット、及び、宛先情報Ｂのパケットは、それぞれ便宜的に、「パケットＡ」及び「パケットＢ」と称してよい。
【００２４】
入出力ＩＦ＃Ｎは、パケットＡが受信されると、宛先情報Ａを基にフォワーディングテーブルＦＷＴを参照して、当該受信パケットＡを入出力ＩＦ＃２へ転送する、と判定する。
【００２５】
同様に、入出力ＩＦ＃Ｎは、パケットＢが受信されると、宛先情報Ｂを基にフォワーディングテーブルＦＷＴを参照して、当該受信パケットＢを入出力ＩＦ＃１へ転送する、と判定する。
【００２６】
なお、当該判定は、「宛先判定」あるいは「宛先識別」と称してもよい。「宛先判定」に伴うフォワーディングテーブルＦＷＴへのアクセスは、「宛先参照」あるいは「宛先検索」と称してもよい。
【００２７】
このような入出力ＩＦ１１での宛先識別結果は、例示的に、制御部１３へ与えられる。制御部１３は、当該宛先識別結果に基づいて、ＳＷＦ１２を制御することで、受信パケットの宛先情報に応じた内部的な経路を入出力ＩＦ１１間に設定する。これにより、受信パケットは、当該受信パケットに付与されている宛先情報に応じた適切な入出力ＩＦ１１へ転送される。
【００２８】
なお、図１の例では、フォワーディングテーブルＦＷＴに、内部的な転送先情報の一例として入出力ＩＦ１１の識別情報（例えばＩＦ番号＃ｉ）が登録されているが、複数の入出力ポートを有する入出力ＩＦ１１については、入出力ポートの識別情報が登録されてよい。
【００２９】
制御部１３は、パケット伝送装置１の全体的な動作を統括的に制御可能であり、例えば、入出力ＩＦ１１の動作と、ＳＷＦ１２の動作と、を制御することができる。別言すると、制御部１３は、入出力ＩＦ１１及びＳＷＦ１２との間で制御信号を送受信できる。入出力ＩＦ１１に対する制御には、例示的に、フォワーディングテーブルＦＷＴの設定や更新等の処理が含まれてよい。
【００３０】
なお、制御部１３は、図１に例示するように、ＣＰＵ（Central Processing Unit）１３１と、メモリ１３２と、を用いて実現されてよい。ＣＰＵ１３１は、演算能力を備えたプロセッサの一例であり、プロセッサデバイスあるいはプロセッサ回路と称してもよい。
【００３１】
メモリ１３２は、記憶装置あるいは記憶媒体の一例であり、ＲＡＭ（Random Access Memory）やＨＤＤ（Hard Disk Drive）等が含まれてよい。メモリ１３２は、ＲＡＭやＨＤＤの一部の記憶領域に相当してもよい。
【００３２】
なお、伝送装置１の構成は、図１に例示する構成に限られない。例えば、フォワーディングテーブルＦＷＴは、ＳＷＦ１２のような、伝送装置１の共通部に備えられていてもよい。また、伝送装置１は、「シャーシタイプ」のように機能ブロックが着脱可能な構成であってもよいし、「ピザボックスタイプ」のように機能ブロックが一体化された構成であってもよい。
【００３３】
以下の実施形態では、上述したように、受信パケットの転送の際に参照されるフォワーディングテーブルＦＷＴの縮小化や参照回数（別言すると、アクセス回数）の削減について説明する。
【００３４】
まず、図２を参照して、伝送装置１の一例であるイーサネットスイッチにおいて、フォワーディングテーブルＦＷＴに登録されたＭＡＣアドレスを、ハッシュ検索する動作の一例を説明する。なお、「イーサネット」は、登録商標である。
【００３５】
イーサネットにおいてＭＡＣアドレス空間は、４８ビットであるため、４８ビットで表示可能な全てのアドレスのフォワーディングテーブルＦＷＴを用意するとなると、２４８＝２５６テラ（Ｔ）ビットという膨大なアドレス空間が必要になる。
【００３６】
しかし、パケット伝送装置１が実際に処理するパケットのＭＡＣアドレス数は、４８ビットで表示可能な数の全てではなく、その一部に限定されてよい。そこで、受信パケットの宛先ＭＡＣアドレスを、ハッシュ関数によって縮退したアドレス空間のハッシュ値に変換し、得られたハッシュ値を基にフォワーディングテーブルＦＷＴを参照する方法が、伝送装置１において採用されることがある。
【００３７】
例えば、パケット伝送装置１が実際に処理できればよいＭＡＣアドレス数が１００万台分の通信機器のアドレス数であると仮定する。当該仮定の下では、図２中に例示するように、ハッシュ関数の一例として２０ビットのＣＲＣ（以下「ＣＲＣ２０」と表記する。）を用いることで、ＭＡＣアドレスを、２０ビットで表示可能な約１００万（１メガ）のハッシュ値に縮退してよい。
【００３８】
しかし、「ハッシュ関数」は、「要約関数」とも称されるように、入力情報を限られた情報量に振り分ける（「マッピング」又は「割り当てる」と称してもよい。）に過ぎない。そのため、ハッシュ関数を用いると、異なるＭＡＣアドレスに対して同じハッシュ値が偶発的に割り当てられることがある。これをハッシュ値の「衝突」あるいは「重複」と呼ぶ。
【００３９】
図２の例では、ＭＡＣアドレスＭＡＣ＃１のハッシュ値Ａと、ＭＡＣアドレスＭＡＣ＃３のハッシュ値Ａとが重複した様子を例示している。なお、図２において、ハッシュ値Ｂは、ＭＡＣアドレスＭＡＣ＃２のハッシュ値を表す。
【００４０】
このようなハッシュ値の重複が生じても、本来のＭＡＣアドレスに応じたパケットフォワーディングを可能にするためには、例示的に、ポインタ情報を用いればよい。例えば、図２中に例示するように、ハッシュ値毎のエントリを有するフォワーディングテーブルＦＷＴにおいて、ＭＡＣアドレス及び宛先ＩＦ番号等の他に、ポインタ情報をエントリ毎に保持しておく。
【００４１】
ポインタ情報は、例示的に、フォワーディングテーブルＦＷＴのハッシュ値毎のエントリにおいて、ＭＡＣアドレスが一致しない場合の、次の検索候補エントリを示す情報である。次の検索候補エントリが無い場合、ポインタ情報には「Ｎｕｌｌ」が設定されてよい。
【００４２】
図２の例では、フォワーディングテーブルＦＷＴのハッシュ値Ａに対応するエントリに、ポインタ情報Ｚが設定されている。ポインタ情報Ｚは、ハッシュ値Ｚに対応するエントリ（ＭＡＣアドレスＭＡＣ＃３のエントリ）を指し示す情報である。
【００４３】
そして、ＭＡＣアドレスＭＡＣ＃１のハッシュ値Ａを基にフォワーディングテーブルＦＷＴを参照すると、ハッシュ値Ａのエントリには、ＭＡＣ＃１が登録されているので、ＭＡＣアドレスが一致する。ＭＡＣアドレスが一致すれば、当該エントリに登録されている「宛先ＩＦ番号」等を基に受信パケットの転送先が判断、識別される。
【００４４】
ＭＡＣアドレスＭＡＣ＃２のハッシュ値Ｂについても、フォワーディングテーブルＦＷＴのハッシュ値Ｂに対応するエントリにおいてＭＡＣアドレスが一致するから、当該エントリに登録されている「宛先ＩＦ番号」等を基に受信パケットの転送先が判断、識別される。
【００４５】
一方、重複の生じたＭＡＣアドレスＭＡＣ＃３のハッシュ値Ａについては、フォワーディングテーブルＦＷＴを参照すると、ハッシュ値Ａのエントリに異なるＭＡＣアドレスＭＡＣ＃１が登録されているので、ＭＡＣアドレスが一致しない。
【００４６】
そのため、当該エントリに設定されているポインタ情報Ｚを基に、次の検索候補エントリ（例えば、ハッシュ値Ｚのエントリ）を参照する。ハッシュ値Ｚのエントリには、ＭＡＣアドレスＭＡＣ＃３が登録されており、ＭＡＣアドレスが一致する。したがって、当該エントリに登録されている「宛先ＩＦ番号」等を基に受信パケットの転送先が判断、識別される。
【００４７】
ハッシュ値に重複が生じると、このようにしてポインタ情報を基に、ＭＡＣアドレスの一致するエントリが見つかるまで、フォワーディングテーブルＦＷＴに対するアクセスが繰り返される。
【００４８】
そのため、最大でハッシュ値の衝突数に相当する回数だけフォワーディングテーブルＦＷＴへのアクセスが生じる。結果的に、ハッシュ値の衝突数が増えるほどフォワーディングテーブルＦＷＴに対するアクセス回数が増加し、パケットフォワーディングの性能（以下「フォワーディング性能」と称することがある。）が低下するおそれがある。
【００４９】
ハッシュ値が衝突する確率に応じてフォワーディングテーブルＦＷＴの数を増やせば、フォワーディング性能を向上できるであろうが、ハードウェアリソースの消費量が増大する。しかも、フォワーディングテーブルＦＷＴへのアクセス回数自体は変わらない。
【００５０】
そこで、ハードウェアリソースを増やさずにフォワーディング性能の低下を防ぐためには、ハッシュ値の衝突確率をできるだけ下げることが有効である。ハッシュ値の衝突確率を下げる方法の一例として、複数のハッシュ関数を用いる方法（図３参照）が挙げられる。
【００５１】
図３には、２つのハッシュ関数＃１及び＃２を用いる例を示してある。なお、図３には、ハッシュ関数＃１及び＃２のいずれもが、ＣＲＣ２０を用いてＭＡＣアドレスを縮退させるケースを例示している。ただし、ハッシュ関数＃１及び＃２に用いるＣＲＣのビット数は互いに異なっていてもよい。
【００５２】
まず、一方のハッシュ関数＃１を用いてハッシュ値＃１が求められ、重複が生じてない場合は、図２に例示したように１つのハッシュ関数を用いる場合と同様に、当該ハッシュ値＃１を用いてフォワーディングテーブルＦＷＴが参照、検索される。
【００５３】
例えば、ＭＡＣアドレスＭＡＣ＃１については、ハッシュ関数＃１から得られたハッシュ値＃１＝Ａが選択されて、ハッシュ値Ａを検索キーにしてフォワーディングテーブルＦＷＴが参照、検索される。
【００５４】
ＭＡＣアドレスＭＡＣ＃２についても、ハッシュ関数＃１から得られたハッシュ値＃１＝Ｂが選択されて、ハッシュ値Ｂを検索キーにしてフォワーディングテーブルＦＷＴが参照、検索される。
【００５５】
一方、ハッシュ値の重複が生じた場合は、他方のハッシュ関数＃２を用いてハッシュ値＃２が求められ、ハッシュ値＃２に重複が生じていなければ、当該ハッシュ関数＃２のハッシュ値＃２がフォワーディングテーブルＦＷＴの検索キーに選択される。
【００５６】
例えば図３において、ＭＡＣアドレスＭＡＣ＃３に対してハッシュ関数＃１からハッシュ値＃１＝Ａが得られたとすると、当該ハッシュ値Ａは、ＭＡＣアドレスＭＡＣ＃１のハッシュ値＃１＝Ａと重複する。ハッシュ値Ａの重複が生じると、ハッシュ関数＃１は選択されず、ハッシュ関数＃２が選択される。
【００５７】
ここで、図３の例では、ハッシュ関数＃２から得られたハッシュ値＃２は「Ｄ」であり、ハッシュ関数＃１から得られたハッシュ値＃１（Ａ及びＢ）とは重複しない。そのため、ハッシュ関数＃２から得られたハッシュ値＃２＝Ｄが、フォワーディングテーブルＦＷＴの検索キーに選択、利用される。
【００５８】
このように、複数のハッシュ関数を階層的に用いることで、ハッシュ値の衝突確率を下げることができる。
【００５９】
ただし、図３の例では、パケットが到着したときの処理を考えると、ハッシュ関数＃１及び＃２のいずれを選択しているかを識別できない。例えば、ＭＡＣアドレスＭＡＣ＃１もＭＡＣアドレスＭＡＣ＃３も、ハッシュ値＃１はいずれも「Ａ」であるため、ハッシュ値＃１を参照しただけでは、ハッシュ関数＃１及び＃２のいずれを選択すればよいかを識別できない。ハッシュ値＃２についても同様である。
【００６０】
そのため、結局、双方のハッシュ関数＃１及び＃２からハッシュ値＃１及び＃２を求めた後、フォワーディングテーブルＦＷＴを参照し、図１に例示したようにＭＡＣアドレスが一致するエントリを選択することになる。
【００６１】
結果として、最大でハッシュ関数の数だけフォワーディングテーブルＦＷＴに対するアクセスが生じ、やはりフォワーディング性能が低下するおそれがある。すなわち、ハッシュ値の衝突確率を下げるためにハッシュ関数を増やすほど、フォワーディングテーブルＦＷＴのアクセス回数が増えてしまい、フォワーディング性能の低下が大きくなるおそれがある。別言すると、ハッシュ値の衝突確率を下げても、フォワーディング性能の低下を抑制できないおそれがある。
【００６２】
本実施形態では、このようなフォワーディング性能の低下をできるだけ抑制できるようにする。例えば、複数のハッシュ関数を用意し、各ハッシュ関数に対して優先度（「優先順位」と称してもよい。）を割り当てておく。
【００６３】
優先度は、フォワーディングテーブルＦＷＴへのＭＡＣアドレス登録時と、フォワーディングテーブルＦＷＴに対する宛先参照（「宛先検索」と称してもよい。）時と、で異なっていてよい。
【００６４】
例示的に、２つのハッシュ関数を用いる場合、各ハッシュ関数に割り当てる優先度は、ＭＡＣアドレス登録時と宛先参照時とで逆転してよい。なお、アドレス登録時の優先度は、「アドレス登録優先度」と称してよく、宛先参照時の優先度は、「宛先参照優先度」と称してよい。
【００６５】
３つ以上のハッシュ関数を用いる場合、例えば、「宛先参照優先度」をハッシュ関数番号の降順に設定し、「アドレス登録優先度」をハッシュ関数番号の昇順に設定してよい。あるいは、逆に、「アドレス登録参照優先度」をハッシュ関数番号の降順に設定し、「宛先参照優先度」をハッシュ関数番号の昇順に設定してよい。
【００６６】
また、ハッシュ管理テーブル（ＨＭＴ）を用意し、どのハッシュ関数を使用しているかを示す情報（「フラグ情報」と称してもよい。）を、当該ハッシュ管理テーブルに登録してよい。なお、ハッシュ管理テーブルは、テーブル形式の情報（あるいはデータ）として表現されたハッシュ管理情報の一例である。
【００６７】
ハッシュ値の重複が生じると、ハッシュ管理テーブルにおいて複数のフラグ情報がイネーブルになる。例示的に、フラグ情報は、「１」又は「０」のビットであってよく、「１」でイネーブル、「０」でディゼーブルを表してよい。この場合、ハッシュ管理テーブルにおいて、どのハッシュ関数を使用しているかを、ビットパターン（「ビットマップ」と称してもよい。）によって表示できる。
【００６８】
フラグ情報のパターンを基に、使用しているハッシュ関数を識別し、その識別結果と宛先参照時の優先度とを基に、ハッシュ値を選択する。また、以後のＭＡＣアドレス登録時には、フラグ情報のパターンが変化しないように、ＭＡＣアドレスの登録可否判定を行なってよい。
【００６９】
以下、図４を参照して、上述したような、複数のハッシュ関数と、ハッシュ管理テーブルと、を用いた、ハッシュ値の管理及びＭＡＣアドレスの登録処理の一例について説明する。
【００７０】
なお、以降の説明では、ＭＡＣアドレスの処理について例示するが、ＩＰアドレスやＭＰＬＳラベル、ＶＬＡＮタグ等の他の宛先情報に対しても以下に説明する処理は、適用可能である。「ＭＰＬＳ」は、「Multi-Protocol Label Switching」の略称であり、「ＶＬＡＮ」は、「ViＦＷＴual Local Area Network」の略称である。
【００７１】
図４の例において、２つのハッシュ関数＃１及び＃２は、それぞれ、図３の例と同様に、ＣＲＣ２０であってよく、２５６Ｔビット分のＭＡＣアドレス空間を１Ｍ（メガ）分のハッシュ値に縮退可能である。
【００７２】
ここで、ＭＡＣアドレス登録時はハッシュ関数＃１を優先的に選択し、宛先参照時はハッシュ関数＃２を優先的に選択するよう、優先度を割り当てておく。また、図５の右側に例示するようなハッシュ管理テーブルＨＭＴを用意しておく。
【００７３】
ハッシュ管理テーブルＨＭＴには、例えば、ハッシュ値毎に、どのハッシュ関数を使用しているかを示す情報（例示的に、フラグ情報）が登録される。
【００７４】
図４の例では、ＭＡＣアドレスＭＡＣ＃１に対して、ハッシュ関数＃１からハッシュ値＃１＝Ａが得られ、ハッシュ関数＃２からハッシュ値＃２＝Ｃが得られる。
【００７５】
また、ＭＡＣアドレスＭＡＣ＃２に対して、ハッシュ関数＃１からハッシュ値＃１＝Ｂが得られ、ハッシュ関数＃２からハッシュ値＃２＝Ｃが得られる。
【００７６】
更に、ＭＡＣアドレスＭＡＣ＃３に対して、ハッシュ関数＃１からハッシュ値＃１＝Ａが得られ、ハッシュ関数＃２からハッシュ値＃２＝Ｄが得られる。
【００７７】
図５の左側に例示するテーブルは、このようにしてＭＡＣアドレスＭＡＣ＃１〜ＭＡＣ＃３のそれぞれについて各ハッシュ関数＃１及び＃２から得られたハッシュ値Ａ〜Ｄを、テーブル形式のデータとして表現したものである。
【００７８】
当該テーブルを基に、図５の右側に例示するハッシュ管理テーブルＨＭＴにおいて、ハッシュ値毎に、ハッシュ関数＃１及び＃２のいずれが選択、使用されているかが管理される。
【００７９】
例えば、ＭＡＣアドレスＭＡＣ＃１〜ＭＡＣ＃３がフォワーディングテーブルＦＷＴに未登録の状態で、ＭＡＣアドレスＭＡＣ＃１〜ＭＡＣ＃３の３つのパケットが、当該順序でパケット伝送装置１に到着したものと仮定する。
【００８０】
当該仮定の下では、最先に到着したＭＡＣアドレスＭＡＣ＃１について、まずハッシュ関数＃１が優先的に選択される。図４の例において、当該ハッシュ関数＃１から得られたハッシュ値＃１は、「Ａ」である。
【００８１】
そのため、図５のハッシュ管理テーブルＨＭＴにおいて、ハッシュ関数＃１から得られたハッシュ値＃１＝Ａのフラグ情報として「１」が「宛先参照用情報」として設定、登録される。「宛先参照用情報」は、「宛先参照用テーブル」と称してもよい。
【００８２】
また、ハッシュ値＃１＝Ａの選択に応じて、図４に例示するように、フォワーディングテーブルＦＷＴのハッシュ値Ａに対応するエントリＡに、ＭＡＣアドレスＭＡＣ＃１及び宛先ＩＦ番号等の情報が登録される。
【００８３】
なお、図５のハッシュ管理テーブルＨＭＴにおける「アドレス登録用情報」については後述する。「アドレス登録用情報」は、「アドレス登録用テーブル」と称してもよい。また、図４中に例示する「ハッシュ管理＃１」は、図５のハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」の第１列のエントリに示される、ハッシュ関数＃１（ハッシュ値＃１）のフラグ情報を抜き出して示したものに相当する。
【００８４】
同様に、図４中に例示する「ハッシュ管理＃２」は、図５のハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」の第２列のエントリに示される、ハッシュ関数＃２（ハッシュ値＃２）のフラグ情報を抜き出して示したものに相当する。
【００８５】
次に到着したパケットのＭＡＣアドレスＭＡＣ＃２についても、まずハッシュ関数＃１が優先的に選択される。図４の例において、当該ハッシュ関数＃１から得られたハッシュ値＃１は、「Ｂ」である。
【００８６】
当該ハッシュ値＃１＝Ｂは、ＭＡＣアドレスＭＡＣ＃１のハッシュ値＃１＝Ａとは重複しない。すなわち、図５のハッシュ管理テーブルＨＭＴにおいて、ハッシュ値＃１＝Ｂのフラグ情報は「０」である。
【００８７】
そのため、ＭＡＣアドレスＭＡＣ＃２に対するハッシュ値＃１＝Ｂの選択が確定し、図５のハッシュ管理テーブルＨＭＴにおいて、「宛先参照用情報」の、ハッシュ関数＃１から得られたハッシュ値＃１＝Ｂのフラグ情報が「１」に設定される。
【００８８】
ハッシュ値＃１＝Ｂの選択に応じて、図４に例示するように、フォワーディングテーブルＦＷＴのハッシュ値Ｂに対応するエントリＢに、ＭＡＣアドレスＭＡＣ＃２及び宛先ＩＦ番号等の情報が登録される。
【００８９】
更に、次に到着したパケットのＭＡＣアドレスＭＡＣ＃３についても、まずハッシュ関数＃１が優先的に選択される。当該ハッシュ関数＃１から得られたハッシュ値＃１は「Ａ」である。
【００９０】
ここで、当該ハッシュ値＃１＝Ａは、ハッシュ管理テーブルＨＭＴにおいてフラグ情報が既に「１」に設定されているため、重複発生と判定される。
【００９１】
そのため、ＭＡＣアドレスＭＡＣ＃３については、次優先度のハッシュ関数＃２が選択候補になる。図４の例において、当該ハッシュ関数＃２から得られたハッシュ値＃２＝Ｄである。
【００９２】
当該ハッシュ値＃２＝Ｄは、先着のＭＡＣアドレスＭＡＣ＃１及びＭＡＣ＃２のハッシュ値＃１（Ａ及びＢ）とは重複しない。すなわち、図５のハッシュ管理テーブルＨＭＴにおいて、ハッシュ値＃２＝Ｄのフラグ情報は「０」である。
【００９３】
そのため、ＭＡＣアドレスＭＡＣ＃３に対するハッシュ値＃２＝Ｄの選択が確定し、図５のハッシュ管理テーブルＨＭＴにおいて、「宛先参照用情報」の、ハッシュ関数＃２から得られたハッシュ値＃２＝Ｄのフラグ情報が「１」に設定される。
【００９４】
ハッシュ値＃２＝Ｄの選択に応じて、図４に例示するように、フォワーディングテーブルＦＷＴのハッシュ値Ｄに対応するエントリＤに、ＭＡＣアドレスＭＡＣ＃２及び宛先ＩＦ番号等の情報が登録される。
【００９５】
以上のようにして、ＭＡＣアドレスの登録時には、ハッシュ関数＃１が優先的に使用されて、重複しない（未使用の）ハッシュ値＃１が選択される。
【００９６】
選択済み（フラグ情報が１）のハッシュ値＃１との重複が生じると、次優先度のハッシュ関数＃２が選択されて、重複しない（未使用の）ハッシュ値＃２が選択される。
【００９７】
そして、フォワーディングテーブルＦＷＴの選択されたハッシュ値に対応するエントリに、ＭＡＣアドレスや宛先ＩＦ番号等の情報が登録される。
【００９８】
次に、上述したようにＭＡＣアドレスがフォワーディングテーブルＦＷＴに登録された後に、登録済みのＭＡＣアドレスを有する別のパケットが伝送装置１に到着し、当該パケットをフォワーディング処理する場合について説明する。
【００９９】
この場合、図５のハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」のビットパターンによって、ハッシュ関数＃１及び＃２のいずれを使用するかを識別できる。
【０１００】
例示的に、（ハッシュ値＃１：ハッシュ値＃２）のビットパターン＝「１０」でハッシュ関数＃１を使用し、同ビットパターン＝「０１」又は「１１」でハッシュ関数＃２を使用することが判定（識別）される。なお、ビットパターン＝「００」は、「未登録」を表す。
【０１０１】
伝送装置１に、ＭＡＣアドレスＭＡＣ＃１が付与された別のパケットが到着すると、各ハッシュ関数＃１及び＃２からそれぞれ（ハッシュ値＃１：ハッシュ値＃２）＝（Ａ：Ｃ）が得られる。
【０１０２】
当該ハッシュ値Ａ及びＣをキーに、図５のハッシュ管理テーブルＨＭＴの「宛先参照用情報」を参照すると、（Ａ：Ｃ）＝「１０」のビットパターンが得られる。
【０１０３】
ビットパターン＝「１０」であるから、ハッシュ関数＃１（ハッシュ値＃１＝Ａ）が選択され、ハッシュ値＃１＝ＡをキーにフォワーディングテーブルＦＷＴのエントリＡが参照される。これにより、ＭＡＣアドレスＭＡＣ＃１のパケットの宛先ＩＦ番号等が識別される。
【０１０４】
また、ＭＡＣアドレスＭＡＣ＃２のパケットが到着すると、各ハッシュ関数＃１及び＃２からそれぞれ（ハッシュ値＃１：ハッシュ値＃２）＝（Ｂ：Ｃ）が得られる。
【０１０５】
当該ハッシュ値Ｂ及びＣをキーに、図５のハッシュ管理テーブルＨＭＴの「宛先参照用情報」を参照すると、（Ｂ：Ｃ）＝「１０」のビットパターンが得られる。
【０１０６】
ビットパターン＝「１０」であるから、ハッシュ関数＃１（ハッシュ値＃１＝Ｂ）が選択され、ハッシュ値＃１＝ＢをキーにフォワーディングテーブルＦＷＴのエントリＢが参照される。これにより、ＭＡＣアドレスＭＡＣ＃２のパケットの宛先ＩＦ番号等が識別される。
【０１０７】
更に、ＭＡＣアドレスＭＡＣ＃３のパケットが到着すると、各ハッシュ関数＃１及び＃２からそれぞれ（ハッシュ値＃１：ハッシュ値＃２）＝（Ａ：Ｄ）が得られる。
【０１０８】
当該ハッシュ値Ａ及びＤをキーに、図５のハッシュ管理テーブルＨＭＴの「宛先参照用情報」を参照すると、（Ａ：Ｄ）＝「１１」のビットパターンが得られる。
【０１０９】
ビットパターン＝「１１」であるから、ハッシュ関数＃２（ハッシュ値＃２＝Ｄ）が選択され、ハッシュ値＃２＝ＤをキーにフォワーディングテーブルＦＷＴのエントリＤが参照される。これにより、ＭＡＣアドレスＭＡＣ＃３のパケットの宛先ＩＦ番号等が識別される。
【０１１０】
このように、ハッシュ管理テーブルＨＭＴを用いて、使用するハッシュ関数を識別、選択することで、ハッシュ値（例えば、Ａ）の重複が生じても、フォワーディングテーブルＦＷＴの参照回数を１回に抑えることができる。
【０１１１】
ただし、上述したルールの下でハッシュ管理テーブルＨＭＴに対する登録を行なうと、宛先参照時にハッシュ関数が誤選択される可能性がある。例えば、上述した例では、ビットパターンを基に使用するハッシュ関数を選んでいるため、その後のアドレス登録でビットパターンが変化してしまうと、正しくハッシュ関数を選べなくなる可能性がある。
【０１１２】
例えば、ＭＡＣアドレスＭＡＣ＃４に対してハッシュ関数＃１及び＃２によって得られたハッシュ値＃１及び＃２が、それぞれ、ハッシュ値＃１＝Ａ、ハッシュ値＃２＝Ｃとなったと仮定する。
【０１１３】
この場合、ハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」のハッシュ値＃１＝Ａは、フラグ情報が１であるため、選択済み（使用中）である。そのため、ハッシュ値＃２＝Ｃが選択候補になる。
【０１１４】
しかし、ハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」に、ハッシュ値＃２＝Ｃのフラグ情報として「１」を設定、登録してしまうと、ＭＡＣアドレスＭＡＣ＃１及びＭＡＣ＃４についてのビットマップがいずれも「１１」となってしまう。
【０１１５】
そのため、ＭＡＣアドレスＭＡＣ＃１に対してハッシュ値＃１＝Ｃが誤選択される可能性がある。ハッシュ値が誤選択されると、フォワーディングテーブルＦＷＴの参照エントリにおいてＭＡＣアドレスが一致しないため、「未登録」と判定されてしまうおそれがある。
【０１１６】
また、他の例として、別のＭＡＣアドレスＭＡＣ＃５に対してハッシュ関数＃１及び＃２によって得られたハッシュ値＃１及び＃２が、それぞれ、ハッシュ値＃１＝Ｃ、ハッシュ値＃２＝Ｄであったと仮定する。
【０１１７】
この場合、ハッシュ管理テーブルＨＭＴにおける「宛先参照用情報」のハッシュ値＃１＝Ｃは、フラグ情報が「０」であり未使用を表すため、ハッシュ値＃１＝Ｃが選択候補になる。
【０１１８】
しかし、ハッシュ値＃２＝Ｄは、ＭＡＣアドレスＭＡＣ＃３に対して使用中である。すなわち、ハッシュ管理テーブルＨＭＴの「宛先参照用情報」において、ハッシュ値＃２＝Ｄのフラグ情報として「１」が登録済みである。
【０１１９】
そのため、ハッシュ値＃１＝Ｃ及びハッシュ値＃２＝Ｄのフラグ情報として、それぞれ「１」を「宛先参照用情報」に登録してしまうと、ＭＡＣアドレスＭＡＣ＃５についてのビットマップが、ＭＡＣアドレスＭＡＣ＃３と同じ「１１」となってしまう。
【０１２０】
その結果、ＭＡＣアドレスＭＡＣ＃３に対してハッシュ値＃２＝Ｄを誤選択してしまう可能性があり、同様に、フォワーディングテーブルＦＷＴの参照エントリにおいてＭＡＣアドレスが一致しないために、「未登録」と判定されてしまうおそれがある。
【０１２１】
したがって、このようにハッシュ管理テーブルＨＭＴにおいて、ハッシュ値＃１及び＃２のビットパターンが重複するＭＡＣアドレスについては、「重複」と判定して登録を抑止してよい。
【０１２２】
「宛先参照用情報」への重複ビットパターンの登録を抑止するために、ハッシュ管理テーブルＨＭＴには、図５の右側に例示するように、「宛先参照用情報」に加えて、「アドレス登録用情報」が保持されてよい。
【０１２３】
「アドレス登録用情報」には、例示的に、フォワーディングテーブルＦＷＴに登録された全てのＭＡＣアドレスについて、ハッシュ関数＃１及び＃２毎にハッシュ値＃１及び＃２に対応するエントリの登録有無を示す情報の一例であるフラグ情報が登録される。別言すると、当該フラグ情報は、ハッシュ値＃１及び＃２の使用（選択）の有無に関わらず、全てのＭＡＣアドレスについて登録されてよい。
【０１２４】
また、選択されたハッシュ関数＃１又は＃２に対応するハッシュ値＃１又は＃２について、「使用中」（１）か「未使用」（０）かを示すフラグ情報（以下「使用フラグ」と称する。）が、「アドレス登録用情報」に登録される。
【０１２５】
当該「アドレス登録用情報」を参照することで、「宛先参照用情報」への重複ビットパターンの登録を抑止することができ、ハッシュ値＃１及び＃２の正しい選択が可能になる。
【０１２６】
例えば、図４の例において、ＭＡＣアドレスＭＡＣ＃４〜ＭＡＣ＃７をもつ４つのパケットがパケット伝送装置１に到着したと仮定する。
【０１２７】
ここで、ＭＡＣアドレスＭＡＣ＃４に対してハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｃが得られたとする。このとき、ハッシュ関数＃１のハッシュ値＃１＝Ａは、「アドレス登録用情報」においてフラグ情報として「１」が登録済みであるため、登録候補にならない（除外される）。
【０１２８】
また、ハッシュ関数＃２のハッシュ値＃２＝Ｃも、「アドレス登録用情報」においてフラグ情報として「１」が登録済みであるため、登録候補にならない。したがって、ＭＡＣアドレスＭＡＣ＃４についてのハッシュ値＃１及び＃２の「宛先参照用情報」への登録は「不可」と判定される。
【０１２９】
なお、図５の例において、「宛先参照用情報」のハッシュ値Ｃについては、ハッシュ値＃１及び＃２のいずれについてもフラグ情報が「０」であるため「未使用」を示すから、登録「可」と判定してもよさそうである。
【０１３０】
しかし、「宛先参照用情報」においてハッシュ値＃２＝Ｃのフラグ情報を「１」に設定、登録してしまうと、既述のように、ＭＡＣアドレスＭＡＣ＃１及び＃２についてのハッシュ値＃１及び＃２のビットマップがそれぞれ「１１」に変わってしまう。そのため、登録「不可」と判定される。
【０１３１】
次に、ＭＡＣアドレスＭＡＣ＃５に対してハッシュ値＃１＝Ｃ及びハッシュ値＃２＝Ｄが得られたとする。ハッシュ関数＃１から得られたハッシュ値＃１＝Ｃは、「アドレス登録用情報」のハッシュ値＃１に対応するフラグ情報が「０」であり、使用フラグも「０」で未使用を示すから、登録候補になる。
【０１３２】
一方、ハッシュ関数＃２のハッシュ値＃２＝Ｄについては、「アドレス登録用情報」のハッシュ値＃２に対応するフラグ情報として「１」が登録済みであるため、ハッシュ値＃１＝Ｃは、登録候補から除外される（取り下げられる）。
【０１３３】
結果的に、ＭＡＣアドレスＭＡＣ＃５についてのハッシュ値＃１及び＃２の「宛先参照用情報」への登録は「不可」と判定される。
【０１３４】
なお、ＭＡＣアドレスＭＡＣ＃５についても、「宛先参照用情報」のハッシュ値Ｃは「未使用」であるため、登録「可」と判定してもよさそうである。
【０１３５】
しかし、ＭＡＣアドレスＭＡＣ＃４の場合と同様に、ＭＡＣアドレスＭＡＣ＃１及び＃２についてのハッシュ値＃１及び＃２のビットマップがそれぞれ「１１」に変わってしまうため、登録「不可」と判定される。
【０１３６】
次に、ＭＡＣアドレスＭＡＣ＃６に対してハッシュ値＃１＝Ｄ及びハッシュ値＃２Ｂが得られたとする。ハッシュ関数＃１から得られたハッシュ値＃１＝Ｄは、「アドレス登録用情報」において、未登録（ハッシュ値＃１のフラグ情報が「０」）であるが、使用フラグが「１」であり「使用中」を示すため、登録候補にならない。
【０１３７】
また、ハッシュ関数＃２から得られたハッシュ値＃２＝Ｂについても、「アドレス登録用情報」において、未登録（ハッシュ値＃２のフラグ情報が「０」）であるが、使用フラグが「１」であり「使用中」を示すため、登録候補にならない。
【０１３８】
したがって、ＭＡＣアドレスＭＡＣ＃６についてのハッシュ値＃１及び＃２の「宛先参照用情報」への登録は「不可」と判定される。
【０１３９】
次に、ＭＡＣアドレスＭＡＣ＃７に対してハッシュ値＃１＝Ｃ及びハッシュ値＃２＝Ａが得られたとする。ハッシュ関数＃１から得られたハッシュ値＃１＝Ｃは、「アドレス登録用情報」において、未登録（ハッシュ値＃１のフラグ情報が「０」）であり、かつ、使用フラグが「０」で「未使用」を示すので、登録候補になる。
【０１４０】
一方、ハッシュ関数＃２から得られたハッシュ値＃２＝Ａは、「アドレス登録用情報」において、未登録（ハッシュ値＃２のフラグ情報が「０」）であるが、使用フラグが「１」で「使用中」を示すので、登録候補にならない。
【０１４１】
ここで、ハッシュ値＃１＝Ｃのフラグ情報として「１」が「宛先参照用情報」に登録されたとしても、ＭＡＣアドレスＭＡＣ＃１及び＃２についてのハッシュ値＃１及び＃２のビットパターンは「１０」のままで変更されない。したがって、ハッシュ値＃１＝Ｃは、「宛先参照用情報」への登録「可」と判定される。
【０１４２】
以上のようにして、アドレス登録時には、アドレス登録優先度に従い、ハッシュ関数＃１のハッシュ値＃１について「アドレス登録用情報」を参照し、未登録かつ未使用であれば、当該ハッシュ値＃１が登録候補となる。
【０１４３】
そして、次優先度のハッシュ関数＃２のハッシュ値＃２について、「アドレス登録用情報」を参照して、使用されていないかを確認する。使用されていなければ、ハッシュ値＃１及び＃２の登録が確定する。
【０１４４】
「アドレス登録用情報」を参照した結果、ハッシュ値＃１が使用されていた場合や、登録候補のハッシュ値＃１及び＃２のいずれかのフラグ情報が「１」になっていた場合は、次優先度のハッシュ関数＃２のハッシュ値＃２について、登録可否の判定を行なう。
【０１４５】
以上のように、未使用のハッシュ値の全てについて、アドレス登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数のハッシュ値は、登録不可と判定されて、登録候補から除外される。
【０１４６】
また、使用されているハッシュ値について、アドレス登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数よりも高いアドレス選択優先度が割り当てられたハッシュ関数のハッシュ値は、登録不可と判定されて、登録候補から除外される。
【０１４７】
以上の判定処理により、使用するハッシュ関数＃１及び＃２を正しく選択することができる。選択後は、ハッシュ管理テーブルＨＭＴの内容が更新される。
【０１４８】
宛先参照時には、ハッシュ値＃１及び＃２のビットパターンに基づく選択ルールに従って、ハッシュ値が選択される。例えば、宛先選択優先度に従い、ハッシュ関数＃２のハッシュ値＃２について、「宛先参照用情報」を参照して、フラグ情報が「１」に設定されていれば、当該ハッシュ値＃２を選択する。
【０１４９】
フラグ情報が「０」に設定されていれば、次優先度のハッシュ関数＃１のハッシュ値＃１についてフラグ情報を確認して、フラグ情報が「１」のハッシュ値＃１が選択される。
【０１５０】
選択されたハッシュ値を基に、フォワーディングテーブルＦＷＴのエントリが参照、検索されて、ＭＡＣアドレスに対応する宛先ＩＦ番号等が識別される。
【０１５１】
以上のように、上述した例によれば、複数のハッシュ関数を用いてハッシュ値の重複確率を低減することができる。仮に、ハッシュ値の重複が低確率で生じても、ハッシュ管理テーブルＨＭＴ及びフォワーディングテーブルＦＷＴのサイズ（別言すると、情報量）の増加を最小限に抑えつつ、フォワーディングテーブルＦＷＴの参照回数の増加を抑制できる。したがって、伝送装置１のフォワーディング性能低下を抑制できる。
【０１５２】
（エントリ削除判定）
次に、図６を参照して、登録済みＭＡＣアドレスの削除に応じたハッシュ管理テーブルＨＭＴのエントリ削除（更新）について説明する。
【０１５３】
図６に例示するように、ハッシュ管理テーブルＨＭＴのハッシュ値毎に、エントリ管理カウンタ（以下「エントリカウンタ」と略称することがある。）ＥＭＣが設けられてよい。エントリ管理カウンタＥＭＣは、例示的に、ＭＡＣアドレスの登録及び削除に応じて、１ずつインクリメント（＋１）及びデクリメント（−１）される。
【０１５４】
図６の例では、３つのＭＡＣアドレスＭＡＣ＃１〜ＭＡＣ＃３がフォワーディングテーブルＦＷＴに登録された結果、選択候補となったハッシュ値＃１及び＃２（Ａ〜Ｄ）のそれぞれについてエントリカウンタＥＭＣのカウント値がインクリメント（＋１）されている。なお、エントリカウンタＥＭＣの初期値は、０である。
【０１５５】
例えば、ハッシュ値＃１＝Ａは、ＭＡＣアドレスＭＡＣ＃１及びＭＡＣ＃３のそれぞれに対して合計２回選択候補となったので、エントリカウンタＥＭＣのハッシュ値Ａに対応するカウント値は「２」となる。
【０１５６】
また、ハッシュ値＃１＝Ｂは、ＭＡＣアドレスＭＡＣ＃２に対して１回選択候補となったので、エントリカウンタＥＭＣのハッシュ値Ｂに対応するカウント値は「１」となる。
【０１５７】
同様に、ハッシュ値＃２＝Ｄは、ＭＡＣアドレスＭＡＣ＃３に対して１回選択候補となったので、エントリカウンタＥＭＣのハッシュ値Ｄに対応するカウント値は「１」となる。
【０１５８】
更に、ハッシュ値＃２＝Ｃは、ＭＡＣアドレスＭＡＣ＃１及びＭＡＣ＃２のそれぞれに対して合計２回選択候補となったので、エントリカウンタＥＭＣのハッシュ値Ｃに対応するカウント値は「２」となる。
【０１５９】
そして、図７の左側に例示するように、ＭＡＣアドレスＭＡＣ＃３のエントリ（ハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｄ）が削除されたと仮定する。
【０１６０】
この場合、図７の右側に例示するように、ＭＡＣアドレスＭＡＣ＃３に対するハッシュ値Ａ及びＤのそれぞれに対応するエントリカウンタＥＭＣのカウントがデクリメント（−１）される。
【０１６１】
デクリメントの結果、ハッシュ値Ｄに対応するカウント値が「０」になるので、ハッシュ管理テーブルＨＭＴのハッシュ値Ｄに対応するエントリが初期化（例えば、オール０）される。
【０１６２】
別言すると、エントリ削除されるＭＡＣアドレスが選択しているハッシュ関数に対応する、「宛先参照用情報」及び「アドレス登録用情報」のフラグ情報（使用フラグを含む。）がディゼーブルされる。
【０１６３】
その後、図８の左側に例示するように、ＭＡＣアドレスＭＡＣ＃１のエントリ（ハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｃ）が削除されたと仮定する。この場合、図８の右側に例示するように、ＭＡＣアドレスＭＡＣ＃１に対するハッシュ値Ａ及びＣのそれぞれに対応するエントリカウンタＥＭＣのカウントがデクリメント（−１）される。
【０１６４】
デクリメントの結果、ハッシュ値Ａに対応するカウント値が「０」になるので、ハッシュ管理テーブルＨＭＴのハッシュ値Ａに対応するエントリが初期化（例えば、オール０）される。
【０１６５】
このようにして、登録済みＭＡＣアドレスの削除に応じて、ハッシュ管理テーブルＨＭＴの該当エントリを正しくディゼーブルすることができる。
【０１６６】
なお、エントリカウンタＥＭＣは、複数のハッシュ関数に個別に用意してもよいし、複数のハッシュ関数に共用であってもよい。個別に用意するほど無駄なフラグ情報がイネーブルされることを防げる。また、１テーブルあたりの参照回数を削減できる。ただし、ハッシュ関数が増えるほどエントリカウンタＥＭＣの数も増える。
【０１６７】
また、エントリカウンタＥＭＣのカウント値の最大値は、ハッシュ関数によるＭＡＣアドレス空間を縮退したハッシュ値のとり得る値の数（「ハッシュ縮退数」と称してよい。）に相当するが、全てが偏る確率は非常に低い。
【０１６８】
そこで、カウント値の最大値は、ハッシュ縮退数よりも小さい値に設定してよい。この場合、最大値を超えた場合には、「重複」が生じたと判定してよい。これにより、エントリカウンタＥＭＣの数を削減することができる。
【０１６９】
図１７（Ａ）及び図１７（Ｂ）を参照して、上述した実施形態による効果の一例を説明する。図１７（Ａ）は、ハッシュ関数によってＭＡＣアドレス空間が１Ｍエントリ分に縮退されると仮定して、フォワーディングテーブルＦＷＴのエントリ数が１Ｍであることを例示している。
【０１７０】
図１７（Ａ）のフォワーディングテーブルＦＷＴの１エントリには、例示的に、ＭＡＣアドレス（１６バイト）、宛先ＩＦ番号等の参照情報（１０バイト）、及び、ポインタ情報（２０ビット）が含まれる。
【０１７１】
したがって、図１７（Ａ）に例示するフォワーディングテーブルＦＷＴの１エントリあたりの情報量は、１８．５バイトであり、フォワーディングテーブルＦＷＴのサイズは、合計で１Ｍエントリ×１８．５バイト＝１８．５Ｍバイトである。
【０１７２】
一方、図１７（Ｂ）には、本実施形態の伝送装置１において、図１７（Ａ）のフォワーディングテーブルＦＷＴに加えて、既述のハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣが追加になることを例示している。
【０１７３】
図１７（Ｂ）に示すハッシュ管理テーブルＨＭＴは、例示的に、１エントリあたりの、「宛先参照用情報」、「アドレス登録用情報」、「使用フラグ」として、それぞれ、１ビットの情報量を有する。また、図１７（Ｂ）に示すエントリカウンタＥＭＣは、例示的に、１エントリあたり４ビットの情報量を有する。
【０１７４】
したがって、ハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣの１エントリあたりの情報量は、例示的に、７ビットである。伝送装置１において用いるハッシュ関数の数が８であると仮定すると、８つのハッシュ関数から得られる８つのハッシュ値のそれぞれについてハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣが用意される。
【０１７５】
したがって、ハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣの情報量は、８つのハッシュ関数それぞれによってＭＡＣアドレス空間がそれぞれ１Ｍエントリ分に縮退されると仮定して、７ビット×８×１Ｍ＝５６Ｍビット＝７Ｍバイトである。
【０１７６】
ここで、図１７（Ｂ）に例示するハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣを用いずに、フォワーディングテーブルＦＷＴを参照（宛先参照）する場合、８つのハッシュ関数のハッシュ値が重複しなければ、宛先参照回数は最大８回である。
【０１７７】
これに対し、図１７（Ｂ）に例示するハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣを用いれば、８つのハッシュ関数のハッシュ値が重複しなければ、宛先参照回数は最大１回で済む。つまり、宛先参照回数を１／８に減らすことができる。また、このときの、ハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣの追加によるテーブルサイズの増加は、７Ｍバイト分の約３０％である。
【０１７８】
このように、テーブルサイズの増加を最小限に抑制しつつ、フォワーディングテーブルＦＷＴに対する宛先参照（アクセス）回数を大幅に削減することができる。
【０１７９】
（ハッシュ値重複時の処理例）
次に、図９〜図１１を参照して、ハッシュ値の重複が生じた場合の処理の一例について説明する。図９は、ハッシュ値重複時の第１の処理例を示し、図１０は、ハッシュ重複時の第２の処理例を示し、図１１は、ハッシュ重複時の第３の処理例を示す。
【０１８０】
低確率ではあるものの、ハッシュ値の重複が発生した場合、図２に例示したようにフォワーディングテーブルＦＷＴにポインタ情報を登録することにより、フォワーディングテーブルＦＷＴにおいて正しいエントリを参照できる。
【０１８１】
この場合、ポインタ情報を辿ってフォワーディングテーブルＦＷＴを参照する回数が増えるため、フォワーディング性能の低下が生じ得るが、重複確率が低く抑えられているので、低下の度合いは非常に小さいと考えてよい。
【０１８２】
（第１の処理例）
図９（Ａ）及び図９（Ｃ）に例示するように、ＭＡＣアドレス＃ＭＡＣ＃１〜＃ＭＡＣ＃３についてのハッシュ値＃１及び＃２が登録済みであると仮定する。ここで、ＭＡＣアドレスＭＡＣ＃４について、ＭＡＣアドレスＭＡＣ＃１のハッシュ値＃１及び＃２とそれぞれ重複するハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｃが得られたとする。
【０１８３】
この場合、図９（Ｂ）に例示するように、フォワーディングテーブルＦＷＴの未登録エントリＺに、ＭＡＣアドレスＭＡＣ＃４及び宛先ＩＦ番号等の情報を登録し、当該エントリＺを示すポインタ情報Ｚを、重複したハッシュ値＃１＝Ａに対応するエントリＡに登録する。
【０１８４】
図９（Ｄ）は、ＭＡＣアドレスＭＡＣ＃４の登録に応じて、図９（Ｃ）に例示するハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣが更新された様子を例示している。
【０１８５】
その後、ＭＡＣアドレスＭＡＣ＃４のパケットが到着すると、フォワーディングテーブルＦＷＴのエントリＡが参照され、当該エントリＡのＭＡＣアドレスＭＡＣ＃１と異なるため、ポインタ情報Ｚが示すエントリＺが参照される。これにより、ＭＡＣアドレスＭＡＣ＃４のパケットの宛先ＩＦ番号等が識別される。
【０１８６】
（第２の処理例）
また、図１０（Ａ）及び図１０（Ｃ）に例示するように、ＭＡＣアドレス＃ＭＡＣ＃１〜＃ＭＡＣ＃３についてのハッシュ値＃１及び＃２が登録済みであると仮定する。ここで、ＭＡＣアドレスＭＡＣ＃５についてハッシュ値＃１＝Ｃ及びハッシュ値＃２＝Ｄが得られたとする。
【０１８７】
この場合、ハッシュ値＃２＝Ｄは、登録済みのＭＡＣアドレスＭＡＣ＃３のハッシュ値＃２＝Ｄと重複する。そこで、図１０（Ｂ）に例示するように、フォワーディングテーブルＦＷＴの未登録エントリＺに、ＭＡＣアドレスＭＡＣ＃５及び宛先ＩＦ番号等の情報を登録する。併せて、当該エントリＺを示すポインタ情報Ｚを、重複したハッシュ値Ｄに対応するエントリＤに登録する。
【０１８８】
図１０（Ｄ）は、ＭＡＣアドレスＭＡＣ＃５の登録に応じて、図１０（Ｃ）に例示するハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣが更新された様子を例示している。
【０１８９】
その後、ＭＡＣアドレスＭＡＣ＃５のパケットが到着すると、フォワーディングテーブルＦＷＴのエントリＤが参照され、当該エントリＤのＭＡＣアドレスＭＡＣ＃３と異なるため、ポインタ情報Ｚが示すエントリＺが参照される。これにより、ＭＡＣアドレスＭＡＣ＃５のパケットの宛先ＩＦ番号等が識別される。
【０１９０】
以上のようにして、ハッシュ値＃１及び＃２に重複が生じた場合は、フォワーディングテーブルＦＷＴにおいて、重複の生じたハッシュ値に対応するエントリからポインタ情報によって、正しいエントリを参照することができるようになる。
【０１９１】
なお、フォワーディングテーブルＦＷＴにおいて、ポインタ情報を登録するエントリは、一意にどのハッシュ関数を使用するかを予め決めておき、そのハッシュ関数のハッシュ値に対応するエントリに設定してもよい。
【０１９２】
（第３の処理例）
あるいは、更に別のハッシュ関数を用いて、どのハッシュ関数のハッシュ値に対応するエントリにポインタ情報を登録するかを決めるようにしてもよい。図１１（Ａ）〜図１１（Ｄ）に、その一例を示す。
【０１９３】
図１１（Ａ）及び図１１（Ｃ）に例示するように、ＭＡＣアドレス＃ＭＡＣ＃１〜＃ＭＡＣ＃３についてのハッシュ値＃１及び＃２が登録済みであると仮定する。ここで、ＭＡＣアドレスＭＡＣ＃６についてハッシュ値＃１＝Ｄ及びハッシュ値＃２＝Ｂが得られたとする。
【０１９４】
ここでは、非限定的な一例として、ＭＡＣアドレスＭＡＣ＃６の最下位ビットによってハッシュ関数を選択する。例えば、最下位ビットが「０」でハッシュ関数＃１を選択し、「１」でハッシュ関数＃２を選ぶものと仮定する。
【０１９５】
この場合、ＭＡＣアドレスＭＡＣ＃６が「５（１０進）」＝「１０１（２進）」であれば、最下位ビットが「１」であるので、ハッシュ関数＃２が選ばれる。
【０１９６】
そして、図１１（Ｂ）に例示するように、選択したハッシュ関数＃２のハッシュ値＃２に対応するエントリ（例えば、Ｂ）に、ＭＡＣアドレスＭＡＣ＃６のエントリＺを示すポインタ情報Ｚが登録される。
【０１９７】
なお、図１１（Ｄ）は、ＭＡＣアドレスＭＡＣ＃６の登録に応じて、図１１（Ｃ）に例示するハッシュ管理テーブルＨＭＴ及びエントリカウンタＥＭＣが更新された様子を例示している。
【０１９８】
その後、ＭＡＣアドレスＭＡＣ＃６のパケットが到着すると、フォワーディングテーブルＦＷＴのエントリＢが参照され、当該エントリＢのＭＡＣアドレスＭＡＣ＃２と異なるため、ポインタ情報Ｚが示すエントリＺが参照される。これにより、ＭＡＣアドレスＭＡＣ＃６のパケットの宛先ＩＦ番号等が識別される。
【０１９９】
図９〜図１１に例示した処理例によれば、低確率でハッシュ値に重複が発生したとしても、フォワーディングテーブルＦＷＴの、ＭＡＣアドレスに対応する該当エントリを正しく参照できるので、フォワーディング性能の低下を抑制できる。
【０２００】
（ハッシュ関数の多段化）
次に、図１２を参照して、ハッシュ関数を多段化（例示的に、２段）して、フォワーディングテーブルＦＷＴのサイズ（別言すると、情報量）を増加させずに、ハッシュ値の重複を処理する例について説明する。
【０２０１】
図１２において、「第１段のハッシュ値」は、既述の複数（例えば、２つ）のハッシュ関数によって得られたハッシュ値を表す。当該ハッシュ関数は、「第１段のハッシュ関数」と称してよい。
【０２０２】
「第２段のハッシュ関数」は、例示的に、「第１段のハッシュ値」に重複が生じたときの各ハッシュ値を識別するために用いられる。「第２段のハッシュ関数」は、図１２に例示するように、「第１段のハッシュ値」毎に設定されてよい。
【０２０３】
図１２の例では、「第１段のハッシュ値」の数が１Ｍ（メガ）である場合に、１Ｍエントリ分のハッシュ関数Ｆ１（ｘ）〜Ｆ１Ｍ（ｘ）が、「第２段のハッシュ関数」の一例として設定可能である。なお、「第２段のハッシュ関数」は、テーブル形式のデータである「ハッシュテーブル（ＨＴ）」として設定されてよい。
【０２０４】
ハッシュテーブルＨＴには、重複しない「第２段のハッシュ値」の得られる「第２段のハッシュ関数」が、登録、設定されてよい。重複しない「第２段のハッシュ値」が得られる「第２段のハッシュ関数」は、例えば、ハッシュ関数検索部ＨＦＳが、予め用意されている「第２段のハッシュ関数」群を検索することで識別、選択されてよい。
【０２０５】
「第２段のハッシュ値」は、例示的に、「第２段のハッシュ値」毎にフォワーディングテーブルＦＷＴへのポインタ情報が登録されたポインタテーブルＰＴを、参照、検索するキーに用いられる。「第２段のハッシュ値」は、図１２の例では、８種類のハッシュ値＃１〜＃８をとり得る。
【０２０６】
ポインタテーブルＰＴには、例示的に、ハッシュ値＃１〜＃８毎に、１Ｍ分の「第１段のハッシュ値」にそれぞれ対応した１Ｍエントリ分のポインタ情報が設定可能である。
【０２０７】
「第１段のハッシュ値」及び「第２段のハッシュ値」のペアをキーにしてポインタテーブルＰＴを参照することで、フォワーディングテーブルＦＷＴの、「第１段のハッシュ値」が得られたＭＡＣアドレスに応じた該当エントリを参照、識別することができる。
【０２０８】
「第２段のハッシュ値」を追加的に用いることで、「第１段のハッシュ値」が重複しても、フォワーディングテーブルＦＷＴにおいて該当エントリの参照、識別が可能になる。
【０２０９】
このように、ハッシュ関数を多段化することで、フォワーディングテーブルＦＷＴのサイズを増やさずにハッシュ空間を拡張でき、フォワーディングテーブルＦＷＴに対する適切な宛先参照を実現できる。
【０２１０】
図１２の例では、８種類の「第２段のハッシュ値」がポインタテーブルＰＴに登録されているので、「第１段のハッシュ値」の重複数が８以内であれば、フォワーディングテーブルＦＷＴを１回参照すれば、宛先ＩＦ番号等の転送先情報を識別できる。
【０２１１】
したがって、フォワーディングテーブルＦＷＴを増やさずに、フォワーディングテーブルＦＷＴのアクセス回数増加に起因するフォワーディング性能の低下を抑制できる。なお、図１２の例では、「第１段のハッシュ値」のエントリ数（１Ｍ）と、フォワーディングテーブルＦＷＴのエントリ数と、が一致しているが、互いに異なっていてもよい。
【０２１２】
（第２段のハッシュ関数のマルチ化）
上述した図１２の例では、「第１段のハッシュ値」が重複したＭＡＣアドレスに対して、「第２段のハッシュ値」が重複しないような「第２段のハッシュ関数」が検索される。ここで、「第１段のハッシュ値」の重複数が多くなるほど、「第２段のハッシュ関数」の検索に時間がかかるか、あるいは検索が困難になるおそれがある。
【０２１３】
そこで、図１３に例示するように、ハッシュテーブルＨＴに、複数の「第２段のハッシュ関数」を登録、設定することで、「第２段のハッシュ値」が重複しない「第２段のハッシュ関数」の検索を容易にして検索時間の短縮化を図ることができる。
【０２１４】
例えば、「第１段のハッシュ値」の最大重複数が８の場合を想定する。この場合、例示的に、３種類の「第２段のハッシュ関数Ｆａ，Ｆｂ及びＦｃ」を用いてよい。３種類の「第２段のハッシュ関数Ｆａ，Ｆｂ及びＦｃ」は、それぞれ、１Ｍ分の「第１段のハッシュ値」毎に設定されてよい。
【０２１５】
図１３の例では、「第１段のハッシュ値」の数が１Ｍであるとして、１つ目の「第２段のハッシュ関数Ｆａ」の一例として１Ｍエントリ分の「ハッシュ関数Ｆａ１（ｘ）〜Ｆａ１Ｍ（ｘ）」がハッシュテーブルＨＴに設定可能である。
【０２１６】
また、２つ目の「第２段のハッシュ関数Ｆｂ」の一例として１Ｍエントリ分の「ハッシュ関数ｂ１（ｘ）〜Ｆｂ１Ｍ（ｘ）」がハッシュテーブルＨＭに設定可能である。更に、３つ目の「第２段のハッシュ関数Ｆｃ」の一例として１Ｍエントリ分の「ハッシュ関数ｃ１（ｘ）〜Ｆｃ１Ｍ（ｘ）」がハッシュテーブルＨＭに設定可能である。
【０２１７】
ここで、ハッシュ関数Ｆａは、例示的に、重複した最大８個の「第１段のハッシュ値」を、最大４つのハッシュ値＃１〜＃４の第１のグループ＃１と、最大４つのハッシュ値＃５〜＃８の第２のグループ＃２と、に振り分けるために用いられてよい。
【０２１８】
ハッシュ関数Ｆｂは、ハッシュ関数Ｆａによって第１のグループ＃１に振り分けられた「第１段のハッシュ値」をハッシュ値＃１−＃４のいずれかに振り分けるために用いられてよい。
【０２１９】
ハッシュ関数Ｆｃは、ハッシュ関数Ｆａによって第２のグループ＃２に振り分けられた「第１段のハッシュ値」をハッシュ値＃５−＃８のいずれかに振り分けるために用いられてよい。
【０２２０】
このようなハッシュ関数Ｆａ〜Ｆｃを用いた「第１段のハッシュ値」の振り分けによって、ハッシュ関数検索部ＨＦＳは、最大４つに振り分け可能な「第２段のハッシュ関数」を検索すればよい。
【０２２１】
したがって、「第１段のハッシュ値」の最大分散数＝８を４に削減でき、「第２段のハッシュ値」が重複しない「第２段のハッシュ関数」の検索が容易になり、検索時間の短縮化を図ることができる。
【０２２２】
なお、図１３において、ポインタテーブルＰＴでは、第１及び第２のグループ＃１及び＃２の別に、「第２段のハッシュ値」と、フォワーディングテーブルＦＷＴへのポインタ情報と、が管理される。
【０２２３】
ポインタテーブルＰＴの登録内容やサイズ、当該ポインタテーブルＰＴに登録されたポインタ情報によるフォワーディングテーブルＦＷＴの参照については、図１２の例と同様であってよい。
【０２２４】
（ハッシュ関数更新）
次に、図１４を参照して、「第１段のハッシュ値」の重複数が最大値（例えば、８）に近づいた場合のハッシュ関数の更新処理の一例について説明する。
【０２２５】
「第１段のハッシュ値」の重複数が最大値に近づいた場合は、「第１段のハッシュ関数」を、より重複が生じにくい（別言すると、より偏りの少ない）ハッシュ値が得られるハッシュ関数に更新したい。
【０２２６】
「第１段のハッシュ関数」を、パケット伝送装置１が通信中であっても通信動作に影響せずに更新できるようにするには、更新前後の「第１段のハッシュ関数」に対応してポインタテーブルＰＴを２面化することが考えられる。しかし、ポインタテーブルＰＴを記憶するメモリ等のハードウェア規模が増大する。
【０２２７】
ここで、図１４に例示するポインタテーブルＰＴには８Ｍエントリ分の空間があり、７／８以上の領域は未使用（空き）である。そこで、この空き領域を利用して、ハッシュ関数を更新する。
【０２２８】
まず、図１４において、ハッシュテーブルＨＴには、更新前後の「第１段のハッシュ関数」から得られた「第１段のハッシュ値」に対応して、「第２段のハッシュ関数」と、管理フラグと、を登録、設定可能である。なお、図１４の例では、更新前の古い「第１段のハッシュ関数」を「Ｆｈ０（ｘ）」、更新後の新しい「第１段のハッシュ関数」を「Ｆｈ１（ｘ）」としてそれぞれ表現している。
【０２２９】
「第２段のハッシュ関数」としては、更新前後の「第１段のハッシュ関数」から得られる新旧２種類の「第１段のハッシュ値」（例示的に、１Ｍ×２）のそれぞれに対応して新旧２種類のハッシュ関数が設定可能である。
【０２３０】
図１４の例では、更新前の「第１段のハッシュ値」に対応する「第２段の旧ハッシュ関数」（以下「旧関数」と略称することがある。）の一例として、最大１Ｍエントリ分の旧関数Ｆｏ１（ｘ）〜Ｆｏ１（ｘ）がハッシュテーブルＨＴに設定可能である。更新後の「第１段のハッシュ値」に対応する「第２段の新ハッシュ関数」（以下「新関数」と略称することがある。）についても同様である。
【０２３１】
「管理フラグ」は、関数の更新後を表す「新」、同更新前を表す「旧」、空き状態であることを示す「空」等のフラグ情報であってよい。「管理フラグ」は、例示的に、「第２段のハッシュ値」毎に設定可能である。「管理フラグ」を参照することで、新旧いずれのハッシュ関数が選択されているかを識別可能である。
【０２３２】
以下、関数更新時のハッシュテーブルＨＴ及びポインタテーブルＰＴへの登録例について説明する。
【０２３３】
まず、ハッシュ関数検索部ＨＦＳは、現登録済みのＭＡＣアドレスに対して「第１段のハッシュ値」をより少ない重複数で振り分け可能な、新しい１又は複数の「第１段のハッシュ関数Ｆｈ１（ｘ）」を検索しておく。
【０２３４】
そして、ハッシュ関数検索部ＨＦＳは、新しい「第１段のハッシュ関数Ｆｈ１（ｘ）」から得られたハッシュ値に対応する、ポインタテーブルＰＴのポインタ領域に空き領域があるか否かをチェックする。
【０２３５】
空き領域があれば、ハッシュ関数検索部ＨＦＳは、当該空き領域に割り当て可能な「第２段のハッシュ関数」を検索し、検索により得られた「第２段のハッシュ関数」をハッシュテーブルＨＴに登録、設定する。図１４の例では、「第２段のハッシュ関数Ｆｎ１（ｘ）」がハッシュテーブルＨＴに設定される。
【０２３６】
そして、ハッシュ関数検索部ＨＦＳは、ハッシュテーブルＨＴにおいて、設定した新しい「第２段のハッシュ関数Ｆｎ１（ｘ）」の新ハッシュ値に対応する「管理フラグ」を「新」に更新する。併せて、ハッシュ関数検索部ＨＦＳは、旧ハッシュ値に対応する「管理フラグ」を「空」に更新する。
【０２３７】
また、ハッシュ関数検索部ＨＦＳは、ポインタテーブルＰＴにおいて、新ハッシュ値に対応するポインタ情報を登録、設定する。旧ハッシュ値に対応するポインタ情報は、ポインタテーブルＰＴにおいて削除されてよい。
【０２３８】
以上の処理が、新しい「第１段のハッシュ関数」の新ハッシュ値のそれぞれについて完了するまで繰り返される。これにより、新しい「第１段のハッシュ関数」の新ハッシュ値に対し、新ポインタがポインタテーブルＰＴの空き領域に収まる分だけ登録される。
【０２３９】
なお、ハッシュテーブルＨＴ及びポインタテーブルＰＴにおいて空き領域が足りないため、新ハッシュ値に対する割り当てが部分的にしか行なえない場合は、いったん第１段及び第２段のハッシュ関数の全てを旧関数に戻してよい。旧関数に戻した上で、再度、「第１段のハッシュ関数」を選び直してよい。
【０２４０】
上述した図１４の例によれば、ポインタテーブルＰＴをマルチ化せずに、また、伝送装置１の通信動作に影響を与えずに、ハッシュ関数を、よりハッシュ値の重複が少ないハッシュ関数に、適応的に更新することが可能になる。したがって、伝送装置１の通信中にフォワーディング性能が低下することを抑制できる。
【０２４１】
（ＣＡＭの併用）
次に、図１５を参照して、図４の変形例として、ハッシュ値の重複に対して連想メモリ（ＣＡＭ：Content Addressable Memory）を併用してアドレス登録及び宛先参照を行なう方法について説明する。
【０２４２】
図１５の例では、図４にて説明したようにＭＡＣアドレスＭＡＣ＃１〜ＭＡＣ＃３が登録された後に、ＭＡＣアドレスＭＡＣ＃４に対して、ハッシュ関数＃１によってハッシュ値＃１＝Ａが得られ、ハッシュ関数＃２によってハッシュ値＃２＝Ｃが得られる。
【０２４３】
しかし、これらのハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｃは、登録済みのＭＡＣアドレスＭＡＣ＃１についてのハッシュ値＃１＝Ａ及びハッシュ値＃２＝Ｃと重複する。
【０２４４】
ハッシュ値の重複が生じたＭＡＣアドレスＭＡＣ＃４は、フォワーディングテーブルＦＷＴの或るエントリ（図１５の例では、エントリＥ）に登録されると共に、ＣＡＭに登録される。
【０２４５】
ＣＡＭは、入力ＭＡＣアドレスに対応するアドレス値を返す。当該アドレス値は、ＣＡＭ用ポインタテーブルＣＰＴに登録された、フォワーディングテーブルＦＷＴのエントリへのポインタ情報と対応付けられる。ポインタ情報は、ハッシュ値の重複が生じたＭＡＣアドレスＭＡＣ＃４のフォワーディングテーブルＦＷＴにおけるエントリＥを示す。
【０２４６】
宛先参照時は、ハッシュ値判定とパラレル（あるいは、シーケンシャルでもよい。）に、ＣＡＭ検索を実施する。図１５の例では、ＭＡＣアドレスＭＡＣ＃４に対するハッシュ値判定の結果はハッシュ値Ａとなるが、ＣＡＭにＭＡＣアドレスＭＡＣ＃４が登録されている。
【０２４７】
そのため、ＣＡＭ用ポインタテーブルＣＰＴに示されるポインタＥが選択され、フォワーディングテーブルＦＷＴの、ＭＡＣアドレスＭＡＣ＃４が登録されたエントリＥが参照される。
【０２４８】
このように、ハッシュ値が重複したＭＡＣアドレスを、別途、ＣＡＭに登録しておくことで、ハッシュ値に重複が生じても、フォワーディングテーブルＦＷＴの参照回数の増加を抑制できるので、フォワーディング性能の低下を抑制することができる。
【０２４９】
なお、ＣＡＭの容量は、低確率ではあるが発生の可能性があるハッシュ値の重複に対応できるだけの容量があれば足りるから、ハッシュ値の重複確率に応じた限られた容量であってよい。
【０２５０】
（ハッシュ関数の簡易化）
既述のように複数のハッシュ関数を用いる場合、それぞれが複雑な演算のハッシュ関数であると演算負荷が増大するおそれがある。
【０２５１】
例えば図１６（Ａ）に模式的に示すように、２つのハッシュ関数＃１及び＃２の演算によってそれぞれハッシュ値＃１及び＃２を求める。
【０２５２】
そして更に、それぞれのハッシュ値＃１及び＃２からハッシュ関数＃３〜＃５及び＃６〜＃８によってハッシュ値＃３〜＃５及び＃５〜＃８を求める。
【０２５３】
この場合に、ハッシュ関数＃１〜＃８それぞれの演算が複雑であると、演算負荷が増大し、ハッシュ演算に用いるハードウェアリソース量が増大しかねない。
【０２５４】
そこで、１つ（あるいは、一部）のハッシュ値はハッシュ関数から求め、他のハッシュ値は、当該ハッシュ関数から求められたハッシュ値に、より簡易な演算で求めるようにしてよい。
【０２５５】
例えば図１６（Ｂ）に模式的に示すように、１つのハッシュ値＃１はＣＲＣ２０のハッシュ関数によって求め、他のハッシュ値＃２〜＃８は、それぞれ、簡易な演算（例示的に、ハッシュ値番号に応じた所定値の加算）によって求めてよい。
【０２５６】
図１６（Ｂ）の例では、ハッシュ値＃１に「＋１」，「＋２」，…，「＋７」した値を、それぞれ、ハッシュ値＃２〜＃８として用いる。
【０２５７】
これにより、異なる複数のハッシュ値を簡易な演算によって求めることができ、演算に用いるハードウェアリソース量の増大を抑制できる。
【０２５８】
なお、簡易な演算の方式（「演算ルール」と称してもよい。）は、異なるハッシュ値（例えば図１６（Ｂ）のハッシュ値＃２〜＃８）の一部又は全部について共通でもよいし異なっていてもよい。
【０２５９】
（伝送装置１の第１構成例）
図１８に、上述した各種の処理を実現する伝送装置１の第１構成例を示す。第１構成例は、図４〜図１１に例示した処理を実現する機能的な構成例に相当すると捉えてよい。
【０２６０】
例示的に、図１８に示す伝送装置１は、アドレス抽出部８１、アドレス制御メッセージ抽出部８２、及び、転送先情報付与部８３を備える。また、伝送装置１は、例示的に、ハッシュ演算部８４、ハッシュ管理テーブル（ＨＭＴ）制御部８５、フォワーディングテーブル（ＦＷＴ）制御部８６、及び、ハッシュ登録制御部８７を備える。更に、伝送装置１は、既述のハッシュ管理テーブルＨＭＴとフォワーディングテーブルＦＷＴとを備える。
【０２６１】
なお、ハッシュ管理テーブルＨＭＴに、エントリカウンタＥＭＣが含まれてよい。ハッシュ管理テーブルＨＭＴは、複数のハッシュ関数毎に設けられてよい。また、上記の各部８１〜８７は、それぞれ、フォワーディング処理部８０のエレメントであると捉えてよい。「フォワーディング処理部８０」は、「フォワーディング制御部８０」と称してもよい。
【０２６２】
ハッシュ管理テーブルＨＭＴ（エントリカウンタＥＭＣ）、及び、フォワーディングテーブルＦＷＴは、メモリＭＥＭに記憶されてよい。メモリＭＥＭは、記憶装置あるいは記憶媒体の一例である。
【０２６３】
ハッシュ管理テーブルＨＭＴ（エントリカウンタＥＭＣ）、及び、フォワーディングテーブルＦＷＴは、１つのメモリＭＥＭの異なる記憶領域に記憶されてもよいし、異なる複数のメモリＭＥＭの記憶領域に分散的に記憶されてもよい。
【０２６４】
アドレス抽出部８１は、受信パケットから、フォワーディングテーブルＦＷＴの参照に用いるアドレス情報（例えば、ＭＡＣアドレス）を抽出する。抽出されたアドレス情報は、ハッシュ演算部８４に与えられる。アドレス抽出された受信パケットは、アドレス制御メッセージ抽出部８２に入力される。
【０２６５】
アドレス制御メッセージ抽出部８２は、例示的に、アドレス抽出部８１からの受信パケットが、アドレス制御メッセージであった場合に、当該アドレス制御メッセージの内容（アドレス制御情報）と称してもよい。）に応じた処理を行なう。
【０２６６】
アドレス制御メッセージの一例としては、インバンドのアドレス登録要求メッセージやインバンドのアドレス解除要求メッセージ等が挙げられる。なお、アドレス制御メッセージは、伝送装置１の制御部１３からアドレス制御メッセージ抽出部８２にアウトバンドの制御メッセージとして与えられてもよい。また、アドレス制御メッセージは、出力（Egress）側のインバンド情報を基に、アドレス制御メッセージ抽出部８２にて、自律的に生成されてもよい。
【０２６７】
アドレス制御メッセージ抽出部８２は、アドレス登録要求メッセージが受信されると、当該メッセージから、フォワーディングテーブルＦＷＴへの登録対象のアドレス情報と、当該アドレス情報に対する転送先情報（宛先ＩＦ番号等）と、を抽出する。
【０２６８】
一方、アドレス解除要求メッセージが受信されると、アドレス制御メッセージ抽出部８２は、解除対象のアドレス情報と、当該アドレス情報に対する転送先情報と、を抽出する。
【０２６９】
いずれのメッセージを受信した場合も、抽出された情報は、例示的に、ハッシュ登録制御部８７に与えられる。
【０２７０】
転送先情報付与部８３は、フォワーディング対象の受信パケットに、ＦＷＴ制御部８６から与えられる転送先情報を付与する。転送先情報を付与されたパケットは、ＳＷＦ１２（図１参照）に出力される。
【０２７１】
ハッシュ演算部８４は、アドレス抽出部８１にて抽出されたアドレス情報を、複数（例えば、８つ）のハッシュ関数によるハッシュ演算によって複数（例えば、８つ）のハッシュ値を求める。得られたハッシュ値は、ＨＭＴ制御部８５に与えられる。なお、ハッシュ演算部８４は、既述のハッシュ関数検索部ＨＦＳに相当する、あるいは、ハッシュ関数検索部ＨＦＳとしての機能を具備している、と捉えてよい。
【０２７２】
ＨＭＴ制御部８５は、ハッシュ管理テーブルＨＭＴを参照して、複数のハッシュ値のいずれかを選択する。選択されたハッシュ値は、ＦＷＴ制御部８６に与えられる。
【０２７３】
ＦＷＴ制御部８６は、ＨＭＴ制御部８５から与えられたハッシュ値を用いてフォワーディングテーブルＦＷＴを参照し、宛先ＩＦ番号等の転送先情報を識別する。識別された転送先情報は、転送先情報付与部８３に与えられる。
【０２７４】
ハッシュ登録制御部８７は、アドレス制御メッセージ抽出部８２にてアドレス制御メッセージから抽出された情報を基に、例えば、ハッシュ演算部８４、ＨＭＴ制御部８５及びＦＷＴ制御部８６を制御する。
【０２７５】
例示的に、ハッシュ登録制御部８７は、アドレス登録要求メッセージから抽出されたアドレス情報及び転送先情報の受信に応じて、当該アドレス情報のハッシュ値の演算をハッシュ演算部８４に要求する。
【０２７６】
ハッシュ演算部８４は、ハッシュ登録制御部８７からの要求に応じて、アドレス情報に対する複数ハッシュ値を求め、求めた複数ハッシュ値をＨＭＴ制御部８５に送信する。その際、ハッシュ演算部８４は、ハッシュ演算完了の旨をハッシュ登録制御部８７に応答してよい。
【０２７７】
ハッシュ登録制御部８７は、ハッシュ演算部８４から応答を受信すると、ＨＭＴ制御部８５にハッシュ管理テーブル登録要求を与えて、ハッシュ管理テーブルＨＭＴを更新させる。また、当該更新に応じてフォワーディングテーブルＦＷＴも更新されるよう、ＦＷＴ制御部８６を制御する。なお、ハッシュ演算部８４及びＨＭＴ制御部８５に対する要求は、並行して行なってもよい。
【０２７８】
ＨＭＴ制御部８５及びハッシュ登録制御部８７は、「ハッシュ制御部」の一例を成すと捉えてよい。「ハッシュ制御部」は、ハッシュ関数毎にハッシュ値がフォワーディングテーブルＦＷＴの参照に使用されているか否かを示したハッシュ管理テーブルＨＭＴに基づいて、前記参照に用いられるハッシュ値の選択を制御する。
【０２７９】
ＦＷＴ制御部８６は、ハッシュ登録制御部８７からの制御に応じて、登録要求のあったアドレス情報と、当該アドレス情報に対応する転送先情報と、をフォワーディングテーブルＦＷＴに登録して、フォワーディングテーブルＦＷＴを更新する。ＦＷＴ制御部８６は、フォワーディング制御部の一例である。
【０２８０】
なお、ハッシュ登録制御部８７は、アドレス解除要求メッセージから抽出されたアドレス情報及び転送先情報の受信に応じて、各テーブルＨＭＴ及びＦＷＴにおいて解除要求のあったエントリを更新（例えば、初期化）するよう、各制御部８５及び８６を制御する。
【０２８１】
図１９〜図２４に、図１８に例示した構成を有する伝送装置１（フォワーディング処理部８０）の動作例を示す。図１９は、宛先参照時のフォワーディング処理部８０の動作例を示すフローチャートである。図２０〜図２３は、アドレス登録時のフォワーディング処理部８０の動作例を示すフローチャートである。図２４は、アドレス登録解除時のフォワーディング処理部８０の動作例を示すフローチャートである。
【０２８２】
（宛先参照時の動作例）
宛先参照時には、フォワーディング処理部８０は、図１９に例示するフローチャートに従って動作する。当該動作によって、図４及び図５を参照して説明した宛先参照処理が可能になる。
【０２８３】
例えば、フォワーディング処理部８０は、ハッシュ演算部８４によって、アドレス抽出部８１にて抽出されたアドレス情報に対して、８つのハッシュ関数＃１〜＃８を用いてハッシュ値＃１〜＃８を求める（処理Ｐ１１）。
【０２８４】
そして、ＨＭＴ制御部８５が、各ハッシュ関数＃１〜＃８（別言すると、ハッシュ値＃１〜＃８）に対応したハッシュ管理テーブルＨＭＴの「宛先参照用情報」をそれぞれチェックする。
【０２８５】
例えば、ＨＭＴ制御部８５は、「宛先参照用情報」チェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値＃１〜＃８の数に対応して「ｎ＝８」に設定する（処理Ｐ１２）。
【０２８６】
そして、ＨＭＴ制御部８５は、まず、ハッシュ値＃８についての「宛先参照用情報」のフラグ情報（ビット）が「１」であるか否かをチェックする（処理Ｐ１３）。フラグ情報が「１」になっている「宛先参照用情報」があれば（処理Ｐ１３でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ値＃ｎを選択してＦＷＴ制御部８６に通知する。ＦＷＴ制御部８６は、通知された選択ハッシュ値＃ｎに対応するフォワーディングテーブルＦＷＴのエントリを参照する（処理Ｐ１４）。
【０２８７】
ＦＷＴ制御部８６は、参照したエントリに登録されているアドレス情報と、アドレス抽出部８１にて抽出されたアドレス情報と、が一致するか否かを判定する（処理Ｐ１５）。なお、フォワーディングテーブルＦＷＴに登録済みのアドレス情報を「登録アドレス」と称し、アドレス抽出部８１にて抽出されたアドレス情報を「抽出アドレス」と称することがある。
【０２８８】
登録アドレスと抽出アドレスとが一致しなければ（処理Ｐ１５でＮＯの場合）、ＦＷＴ制御部８６は、参照エントリのポインタ情報が「Ｎｕｌｌ」であるか否かをチェックする（処理Ｐ１６）。
【０２８９】
参照したエントリのポインタ情報が「Ｎｕｌｌ」でなければ（処理Ｐ１６でＮＯの場合）、ＦＷＴ制御部８６は、ポインタ情報に対応するフォワーディングテーブルＦＷＴのエントリを参照して（処理Ｐ１７）、アドレス情報の一致／不一致を判定する（処理Ｐ１５）。
【０２９０】
このようにして、ＦＷＴ制御部８６は、ポインタ情報を辿って、抽出アドレスに一致する登録アドレスが登録された、フォワーディングテーブルＦＷＴのエントリを検索する（処理Ｐ１５及び処理Ｐ１６のＮＯルート）。
【０２９１】
抽出アドレスに一致する登録アドレスが登録された、フォワーディングテーブルＦＷＴのエントリが見つかると（処理Ｐ１５でＹＥＳの場合）、ＦＷＴ制御部８６は、当該参照エントリの転送先情報を参照する（処理Ｐ１８）。
【０２９２】
当該転送先情報が、転送先情報付与部８３に与えられて、転送先情報付与部８３からＳＷＦ１２へ出力されるパケットに転送先情報が付与される。
【０２９３】
なお、処理Ｐ１６において、ポインタ情報が「Ｎｕｌｌ」であれば（処理Ｐ１６でＹＥＳの場合）、ＦＷＴ制御部８６は、当該参照エントリがハッシュ値＃１に対応するエントリであるか否かをチェックする（処理Ｐ１９）。
【０２９４】
参照エントリがハッシュ値＃１に対応するエントリであれば（処理Ｐ１９でＹＥＳの場合）、ＦＷＴ制御部８６は、該当エントリがフォワーディングテーブルＦＷＴにおいて見つからない（参照不可）と判定する。参照不可との判定結果は、伝送装置１の制御部１３や外部装置へエラー情報やアラーム情報等として通知してよい。
【０２９５】
参照エントリがハッシュ値＃１に対応するエントリでなければ（処理Ｐ１９でＮＯの場合）、ＦＷＴ制御部８６は、ハッシュ値＃１に対応する、フォワーディングテーブルＦＷＴのエントリを参照し（処理Ｐ２０）、処理Ｐ１５〜Ｐ１９を実施する。
【０２９６】
また、処理Ｐ１３において、ハッシュ値＃ｎに対応する「宛先参照用情報」のフラグ情報が「０」であれば（処理Ｐ１３でＮＯの場合）、ＨＭＴ制御部８５は、デクリメントカウンタのカウント値をデクリメント（ｎ＝ｎ−１）する（処理Ｐ２１）。
【０２９７】
ＨＭＴ制御部８５は、カウント値がｎ＝０になるまで（処理Ｐ２２でＹＥＳと判定されるまで）、残りのハッシュ値＃７〜＃１の「宛先参照用情報」のフラグ情報が「１」になっているか否かを降順でチェックする（処理Ｐ２２及びＰ１３のＮＯルート）。
【０２９８】
なお、降順でチェックを行なうのは、ハッシュ関数＃１〜＃８の「宛先参照優先度」が、例示的に、降順に設定されているからである。したがって、ハッシュ関数＃１〜＃８の「宛先参照優先度」が昇順に設定されていれば、フラグ情報のチェックは、昇順に行なってよい。
【０２９９】
フラグ情報が「１」になっているハッシュ値＃ｎが有れば（処理Ｐ１３でＹＥＳの場合）、ＨＭＴ制御部８５は、既述の処理Ｐ１４〜Ｐ２０を実施する。
【０３００】
デクリメントカウンタのカウント値がｎ＝０になると（処理Ｐ２２でＹＥＳの場合）、全てのハッシュ値＃１〜＃８についての「宛先参照用情報」のフラグ情報が「０」であることが確認される。
【０３０１】
当該確認に応じて、ＨＭＴ制御部８５は、ハッシュ値＃１を選択してＦＷＴ制御部８６に通知する。ＦＷＴ制御部８６は、通知された選択ハッシュ値＃１に対応するフォワーディングテーブルＦＷＴのエントリを参照して（処理Ｐ２０）、処理Ｐ１５以降の処理を実施する。
【０３０２】
（アドレス登録時の動作例）
次に、図２０〜図２３を参照して、アドレス登録時のフォワーディング処理部８０の動作例を説明する。フォワーディング処理部８０が、図２０〜図２３に例示するフローチャートに従って動作することで、例えば図４及び図５を参照して説明したアドレス登録処理が可能になる。
【０３０３】
例えば、アドレス制御メッセージ抽出部８２（図１８参照）にて、或るアドレス情報のアドレス登録要求メッセージが受信されて、登録要求のあったアドレス情報及び転送先情報がハッシュ登録制御部８７に与えられたとする。
【０３０４】
この場合、図２０に例示するように、ハッシュ登録制御部８７は、ハッシュ演算部８４に対して、登録要求のあったアドレス情報（以下「登録要求アドレス情報」と称することがある。）に対するハッシュ値の演算を要求する。
【０３０５】
当該要求に応じて、ハッシュ演算部８４は、登録要求アドレス情報に対する複数（例えば８つ）のハッシュ値＃１〜＃８を複数（例えば８つ）のハッシュ関数＃１〜＃８によって求める（処理Ｐ３１）。得られたハッシュ値＃１〜＃８は、ＨＭＴ制御部８５へ送信される。
【０３０６】
また、ハッシュ登録制御部８７は、ＨＭＴ制御部８５にハッシュ管理テーブル登録要求を送信する。ＨＭＴ制御部８５は、当該要求に応じて、いずれかのエントリカウンタＥＭＣのエントリが最大値に到達しているか否かをチェックする（処理Ｐ３２）。
【０３０７】
いずれかのエントリカウンタＥＭＣのエントリが最大値に到達していれば（処理Ｐ３２でＹＥＳの場合）、ＨＭＴ制御部８５は、図９〜図１１に例示したような重複判定処理（Ｐ３７）を実施する。なお、重複判定処理の一例については、図２２により後述する。
【０３０８】
最大値に到達したエントリがエントリカウンタＥＭＣに無ければ（処理Ｐ３２でＮＯの場合）、ＨＭＴ制御部８５は、ハッシュ関数＃１〜＃８のいずれかが登録可能か否か（登録条件を満足するか）をチェックする（処理Ｐ３３〜Ｐ３６）。
【０３０９】
例えば、ＨＭＴ制御部８５は、インクリメントカウンタのカウント値ｎをｎ＝１に設定し（処理Ｐ３３）、ハッシュ関数＃ｎが登録条件を満足するか否かをチェックする（処理Ｐ３４）。
【０３１０】
登録条件を満足しなければ（処理Ｐ３４でＮＯの場合）、ＨＭＴ制御部８５は、インクリメントカウンタのカウント値ｎをインクリメント（ｎ＝ｎ＋１）し（処理Ｐ３５）、ｎ＞８（ハッシュ関数の数）を満たすか否かをチェックする（処理Ｐ３６）。
【０３１１】
ｎ＞８を満たさなければ（処理Ｐ３６でＮＯの場合）、別言すると、登録条件のチェックが未実施のハッシュ関数があれば、ＨＭＴ制御部８５は、処理Ｐ３４へ戻る。
【０３１２】
ｎ＞８を満たせば（処理Ｐ３６でＹＥＳの場合）、ＨＭＴ制御部８５は、図２２により後述する重複判定処理を実施する（処理Ｐ３７）。
【０３１３】
登録条件チェックの過程で、登録条件を満足するハッシュ関数＃ｎが見つかれば（処理Ｐ３４でＹＥＳの場合）、ＨＭＴ制御部８５は、当該ハッシュ関数＃ｎをハッシュ選択候補Ｘに設定する（処理Ｐ３８）。
【０３１４】
そして、ＨＭＴ制御部８５は、インクリメントカウンタのカウント値ｎをインクリメント（ｎ＝ｎ＋１）し（処理Ｐ３９）、ｎ＞８を満たすか否かをチェックする（処理Ｐ４０）。
【０３１５】
ｎ＞８を満たさなければ（処理Ｐ４０でＮＯの場合）、ＨＭＴ制御部８５は、ハッシュ関数＃ｎが未使用か否かをチェックする（処理Ｐ４１）。ハッシュ関数＃ｎが未使用であれば、ＨＭＴ制御部８５は、カウント値ｎ＞８が満たされるまで、カウント値ｎを１ずつインクリメントしながら、未使用のハッシュ関数＃ｎの有無をチェックする。別言すると、未使用のハッシュ関数＃ｎの有無が昇順でチェックされる。
【０３１６】
なお、昇順でチェックを行なうのは、ハッシュ関数＃１〜＃８の「アドレス登録優先度」が、例示的に、昇順に設定されているからである。したがって、ハッシュ関数＃１〜＃８の「アドレス登録優先度」が降順に設定されていれば、当該チェックは降順に行なってよい。
【０３１７】
ハッシュ関数＃ｎが未使用でなければ（処理Ｐ４１でＮＯの場合）、ＨＭＴ制御部８５は、処理Ｐ３４以降の処理に戻り、当該ハッシュ関数＃ｎが登録条件を満足するか否かをチェックする。
【０３１８】
ハッシュ関数＃ｎの使用／未使用のチェック過程（処理Ｐ４０）で、カウント値ｎ＞８が満たされれば、ＨＭＴ制御部８５は、ハッシュ選択候補＃Ｘのハッシュ関数＃ｎを選択する（処理Ｐ４２）。
【０３１９】
そして、ＨＭＴ制御部８５は、選択したハッシュ関数＃ｎにてハッシュ管理テーブルＨＭＴを更新する（処理Ｐ４３）。併せて、ＨＭＴ制御部８５は、ＦＷＴ制御部８６に選択したハッシュ関数＃ｎを通知する。ＦＷＴ制御部８６は、通知されたハッシュ関数＃ｎに応じて、フォワーディングテーブルＦＷＴのエントリを設定する（処理Ｐ４４）。
【０３２０】
以上のようにして、登録要求のあったアドレス情報に対するハッシュ管理テーブルＨＭＴ及びフォワーディングテーブルＦＷＴの登録が完了する。
【０３２１】
次に、図２１を参照して、上述したハッシュ関数＃ｎの登録条件判定処理（Ｐ３４）の具体例について説明する。
【０３２２】
図２１に例示するように、ＨＭＴ制御部８５は、ハッシュ管理テーブルＨＭＴを参照して、ハッシュ関数＃ｎ及びハッシュ値＃ｎの「アドレス登録用情報（ビット）」が「１」（登録済み）であるか否かをチェックする（処理Ｐ５１）。
【０３２３】
「アドレス登録用情報（ビット）」が「０」（未登録）であれば（処理Ｐ５１でＮＯの場合）、ＨＭＴ制御部８５は、当該ハッシュ値＃ｎに対応する「使用フラグ」が「１」（使用中）であるか否かを更にチェックする（処理Ｐ５２）。
【０３２４】
「使用フラグ」が「０」（未使用）であれば（処理Ｐ５２でＮＯの場合）、ＨＭＴ制御部８５は、当該ハッシュ関数＃ｎ（ハッシュ値＃ｎ）がハッシュ管理テーブルＨＭＴに登録可能であると判定する（処理Ｐ５３）。すなわち、図２０の処理Ｐ３４において登録条件を満足する（ＹＥＳ）と判定される。
【０３２５】
一方、「アドレス登録用情報（ビット）」が「１」であった場合（処理Ｐ５１でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ値＃ｎが登録不可能であると判定する（処理Ｐ５４）。
【０３２６】
また、「アドレス登録用情報（ビット）」が「０」でも「使用フラグ」が「１」であれば（処理Ｐ５１でＮＯかつ処理Ｐ５２でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ値＃ｎがやはり登録不可能であると判定する（処理Ｐ５４）。
【０３２７】
すなわち、処理Ｐ５１及びＰ５２でＹＥＳと判定されたハッシュ値＃ｎは、登録不可能と判定され、図２０の処理Ｐ３４でＮＯと判定される。なお、上述したチェック処理Ｐ５１及びＰ５２は、順番を入れ替えてもよいし、パラレルに実施してもよい。
【０３２８】
（重複判定処理）
次に、図２２を参照して、ＨＭＴ制御部８５による、図２０に例示した重複判定処理（Ｐ３７）の一例を説明する。ＨＭＴ制御部８５が、図２２に例示するフローチャートに従って動作することで、図９〜図１１を参照して説明した「ハッシュ値重複時の処理」が可能になる。
【０３２９】
図２２に例示するように、ＨＭＴ制御部８５は、エントリカウンタＥＭＣを参照して、いずれかのエントリのカウント値が最大値に到達しているか否かをチェックする（処理Ｐ６１）。
【０３３０】
最大値に到達していれば（処理Ｐ６１でＹＥＳの場合）、ＨＭＴ制御部８５は、各ハッシュ関数＃１〜＃８（別言すると、ハッシュ値＃１〜＃８）に対応したハッシュ管理テーブルＨＭＴの「宛先参照用情報」をそれぞれチェックする（処理Ｐ６２〜Ｐ６５）。
【０３３１】
例えば、ＨＭＴ制御部８５は、「宛先参照用情報」チェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値＃１〜＃８の数に対応して「ｎ＝８」に設定する（処理Ｐ６２）。
【０３３２】
そして、ＨＭＴ制御部８５は、まず、ハッシュ値＃８についての「宛先参照用情報」のフラグ情報（ビット）が「１」であるか否かをチェックする（処理Ｐ６３）。当該フラグ情報が「０」であれば（処理Ｐ６３でＮＯの場合）、ＨＭＴ制御部８５は、デクリメントカウンタのカウント値をデクリメント（ｎ＝ｎ−１）する（処理Ｐ６４）。
【０３３３】
ＨＭＴ制御部８５は、カウント値がｎ＝０になるまで（処理Ｐ６５でＹＥＳと判定されるまで）、残りのハッシュ値＃７〜＃１の「宛先参照用情報」のフラグ情報が「１」になっているか否かを降順でチェックする（処理Ｐ６５及びＰ６３のＮＯルート）。なお、ハッシュ関数＃１〜＃８の「宛先参照優先度」が昇順に設定されていれば、当該チェックも昇順で行なってよい。
【０３３４】
フラグ情報が「１」になっている「宛先参照用情報」があれば（処理Ｐ６３でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ値Ｙ＝＃ｎを選択する（処理Ｐ６７）。
【０３３５】
そして、ＨＭＴ制御部８５は、エントリカウンタＥＭＣの、選択ハッシュ値＃ｎに対応するエントリを更新（例えば、インクリメント）する（処理Ｐ６８）。併せて、ＨＭＴ制御部８５は、選択ハッシュ値＃ｎをＦＷＴ制御部８６に通知する。
【０３３６】
ＦＷＴ制御部８６は、通知された選択ハッシュ値＃ｎに対応するフォワーディングテーブルＦＷＴのエントリを更新（例えば、ポインタ情報を登録）する（処理Ｐ６９）。
【０３３７】
一方、デクリメントカウンタのカウント値がｎ＝０になると（処理Ｐ６５でＹＥＳの場合）、いずれのハッシュ値＃１〜＃８も選択されなかったことになる。
【０３３８】
この場合と、エントリカウンタＥＭＣが最大値に到達していない場合（処理Ｐ６１でＮＯの場合）と、において、ＨＭＴ制御部８５は、便宜的に、ハッシュ関数Ｙ＝＃１のハッシュ値＃１を選択する（処理Ｐ６６）。
【０３３９】
そして、ＨＭＴ制御部８５は、ハッシュ管理テーブルＨＭＴ（エントリカウンタＥＭＣ）は更新せずに、フォワーディングテーブルＦＷＴのエントリを更新（例えば、ポインタ情報を登録）する（処理Ｐ６９）。
【０３４０】
（ハッシュ管理テーブル更新処理）
次に、図２３を参照して、ＨＭＴ制御部８５によるハッシュ管理テーブルＨＭＴの更新処理の一例について説明する。
【０３４１】
図２３に例示するように、ＨＭＴ制御部８５は、ハッシュ登録制御部８７からの登録要求に応じて、ハッシュ管理テーブルＨＭＴにおける、ハッシュ値＃ｎに対応する「アドレス登録用情報」のフラグ情報（ビット）を「１」に設定する（処理Ｐ７１）。
【０３４２】
また、ＨＭＴ制御部８５は、フラグ情報を「１」に設定したハッシュ値＃ｎに対応するエントリカウンタＥＭＣのカウント値をインクリメント（＋１）する（処理Ｐ７２）。
【０３４３】
そして、ＨＭＴ制御部８５は、ハッシュ値＃ｎの重複の有無をチェックする（処理Ｐ７３）。チェックの結果、重複が無ければ（処理Ｐ７３でＮＯの場合）、ＨＭＴ制御部８５は、選択したハッシュ値＃Ｘ（図２０参照）に対応する「アドレス登録用情報」の「使用フラグ」を、「使用中」を示す「１」に設定する（処理Ｐ７４）。
【０３４４】
一方、重複が有れば（処理Ｐ７３でＹＥＳの場合）、「使用フラグ」の設定は行なわずに（処理Ｐ７４をバイパスして）、処理を終了する。
【０３４５】
（アドレス登録解除処理例）
次に、図２４を参照して、フォワーディング処理部８０によるアドレス登録解除処理の一例を説明する。なお、「アドレス登録解除」は、「アドレス解放」と称してもよい。図２４に例示するフローチャートに従ってフォワーディング処理部８０が動作することで、図６〜図７を参照して説明した「エントリ削除判定」処理が可能になる。
【０３４６】
アドレス解放処理は、例示的に、図１８に示した各制御部８５〜８７の連携によって実施される。例えば、ＨＭＴ制御部８５は、ハッシュ登録制御部８７からのハッシュ管理テーブル登録解除要求に応じて、ハッシュ演算部８４に対し、登録解除要求のあったアドレス情報に対するハッシュ値＃１〜＃８のハッシュ演算を要求する。
【０３４７】
当該要求に応じて、ハッシュ演算部８４は、登録解除要求のあったアドレス情報（以下「解除アドレス」ともいう。）に対するハッシュ値＃１〜＃８をハッシュ関数＃１〜＃８によって求める（処理Ｐ８１）。得られたハッシュ値＃１〜＃８は、ＨＭＴ制御部８５に与えられる。
【０３４８】
ＨＭＴ制御部８５は、ハッシュ登録制御部８７からの登録解除要求に応じて、ＦＷＴ制御部８６と連携して、ハッシュ値＃１〜＃８の登録解除の可否をチェックして、各ハッシュ管理テーブルＨＭＴ及びフォワーディングテーブルＦＷＴの更新を行なう。
【０３４９】
例えば、ＨＭＴ制御部８５は、エントリチェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値＃１〜＃８の数に対応して「ｎ＝８」に設定する（処理Ｐ８２）。
【０３５０】
そして、ＨＭＴ制御部８５は、まず、ハッシュ値＃ｎ（＝＃８）に対応するエントリカウンタＥＭＣのカウントを１減算（−１）し（処理Ｐ８３）、減算結果が「０」になったか否かをチェックする（処理Ｐ８４）。
【０３５１】
チェックの結果、減算結果が０であれば（処理Ｐ８４でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ管理テーブルＨＭＴの、ハッシュ値＃ｎに対応する「アドレス登録用情報」を初期化（例えば、オール０にクリア）する（処理Ｐ８５）。
【０３５２】
その後、ＨＭＴ制御部８５は、ハッシュ値＃ｎに対応するフォワーディングテーブルＦＷＴのエントリを参照する（処理Ｐ８６）。なお、エントリカウンタＥＭＣのカウント値の減算結果が「０」でない場合（処理Ｐ８４でＮＯの場合）、ＨＭＴ制御部８５は、初期化処理Ｐ８５をバイパスして、処理Ｐ８６に進む。
【０３５３】
そして、ＨＭＴ制御部８５は、参照したエントリの登録アドレスと解除アドレスとが一致するか否かをチェックする（処理Ｐ８７）。一致しなければ（処理Ｐ８７でＮＯの場合）、ＨＭＴ制御部８５は、参照エントリのポインタ情報が「Ｎｕｌｌ」であるか否かを更にチェックする（処理Ｐ８８）。
【０３５４】
ポインタ情報が「Ｎｕｌｌ」であれば（処理Ｐ８８でＹＥＳの場合）、解除アドレスに対応するフォワーディングテーブルＦＷＴのエントリが見つからないため、ＨＭＴ制御部８５は、登録解除失敗と判定する（処理Ｐ８９）。登録解除失敗の判定結果は、伝送装置１の制御部１３や外部装置へエラー情報やアラーム情報等として通知してよい。
【０３５５】
一方、参照エントリのポインタ情報が「Ｎｕｌｌ」でなければ（処理Ｐ８８でＮＯの場合）、ＨＭＴ制御部８５は、ポインタ情報が示すフォワーディングテーブルＦＷＴのエントリを参照する（処理Ｐ９０）。
【０３５６】
そして、ＨＭＴ制御部８５は、解除アドレスに一致する登録アドレスが登録されたフォワーディングテーブルＦＷＴのエントリが見つかるまで、参照エントリのポインタ情報を辿って解除対象エントリを検索する（処理Ｐ８７及びＰ８８のＮＯルート）。
【０３５７】
解除アドレスに一致する登録アドレスが登録されたエントリが見つかれば（処理Ｐ８７でＹＥＳの場合）、ＨＭＴ制御部８５は、参照エントリがフォワーディングテーブルＦＷＴの先頭エントリであるか否かをチェックする（処理Ｐ９１）。
【０３５８】
参照エントリが先頭エントリでなければ（処理Ｐ９１でＮＯの場合）、ＨＭＴ制御部８５は、例えば１つ前のエントリのポインタ情報を参照エントリのポインタ情報に更新する（処理Ｐ９３）。これにより、ポインタ情報の示すエントリの消失を回避できる。
【０３５９】
一方、参照エントリが先頭エントリであれば（処理Ｐ９１でＹＥＳの場合）、ＨＭＴ制御部８５は、当該先頭エントリのポインタ情報が「Ｎｕｌｌ」であるか否かをチェックする（処理Ｐ９２）。
【０３６０】
先頭エントリのポインタ情報が「Ｎｕｌｌ」でなければ（処理Ｐ９２でＮＯの場合）、ＨＭＴ制御部８５は、当該ポインタ情報が示すエントリの登録内容を先頭エントリにコピーする（処理Ｐ９４）。これにより、ポインタ情報の示すエントリの消失を回避できる。
【０３６１】
一方、先頭エントリのポインタ情報が「Ｎｕｌｌ」であれば（処理Ｐ９２でＹＥＳの場合）、ＨＭＴ制御部８５は、ハッシュ管理テーブルＨＭＴの、ハッシュ値＃ｎに対応する「宛先参照用情報」及び「使用フラグ」を初期化する（処理Ｐ９５）。「初期化」は、例えば、０にクリアすることである。
【０３６２】
その後、ＨＭＴ制御部８５は、エントリチェック用のデクリメントカウンタのカウント値を１つ減算（ｎ＝ｎ−１）し（処理Ｐ９６）、ｎ＝０が満たされるか否かをチェックする（処理Ｐ９７）。
【０３６３】
ｎ＝０が満たされなければ（処理Ｐ９７でＮＯの場合）、ｎ＝０が満たされるまで（処理Ｐ９７でＹＥＳと判定されるまで）、ＨＭＴ制御部８５は、処理Ｐ８３以降の処理を繰り返す。ｎ＝０が満たされれば（処理Ｐ９７でＹＥＳの場合）、ＨＭＴ制御部８５は、処理を終了してよい。
【０３６４】
以上のようにして、ハッシュ値＃ｎの登録解除の可否がチェックされて、登録解除可能なハッシュ値＃ｎに対応する、ハッシュ管理テーブルＨＭＴ及びフォワーディングテーブルＦＷＴのエントリが初期化される。また、エントリが初期化されても、ポインタ情報の示すエントリが消失しないようにポインタ情報やエントリの更新が行なわれる。したがって、適切な宛先参照を維持できる。
【０３６５】
（伝送装置１の第２構成例）
次に、図２５を参照して、伝送装置１の第２構成例について説明する。第２構成例は、例えば図１２〜図１４に例示した処理を実現する機能的な構成例に相当すると捉えてよい。図２５において、図１８に示した符号と同一符号を付した部分は、特に断らない限り、図１８にて既述の部分と同一若しくは同様の部分であると捉えてよい。
【０３６６】
図２５に示す第２構成例の伝送装置１は、図１８に例示した第１構成例に比して、ハッシュ演算部８４に代えてハッシュ演算部８４Ａを備えると共に、重複制御部８８を追加的に備える点が異なる。また、第２構成例の伝送装置１は、第１構成例に比して、ハッシュテーブルＨＴ及びポインタテーブルＰＴを追加的に備える点が異なる。
【０３６７】
重複制御部８８は、ＨＭＴ制御部８５及びハッシュ登録制御部８７と共に、既述の「ハッシュ制御部」の一例を成すと捉えてよい。なお、第２構成例においても、第１構成例と同様、ハッシュ管理テーブルＨＭＴに、エントリカウンタＥＭＣが含まれてよい。また、図２５に例示する各部８１〜８３，８４Ａ，８５〜８８は、それぞれ、フォワーディング処理部８０のエレメントであると捉えてよい。
【０３６８】
ハッシュテーブルＨＴ、ハッシュ管理テーブルＨＭＴ（エントリカウンタＥＭＣ）、ポインタテーブルＰＴ、及び、フォワーディングテーブルＦＷＴは、記憶装置あるいは記憶媒体の一例であるメモリＭＥＭに記憶されてよい。これらのテーブル（データ）は、１つのメモリＭＥＭの異なる記憶領域に記憶されてもよいし、異なる複数のメモリＭＥＭの記憶領域に分散的に記憶されてもよい。
【０３６９】
ハッシュ演算部８４Ａは、図１２〜図１４に例示したように多段化されたハッシュ関数によるハッシュ演算が可能である。なお、ハッシュ演算部８４Ａは、既述のハッシュ関数検索部ＨＦＳに相当する、あるいは、ハッシュ関数検索部ＨＦＳとしての機能を具備している、と捉えてよい。
【０３７０】
例示的に、ハッシュ演算部８４Ａは、アドレス抽出部８１にて抽出されたアドレス情報に対し、第１段のハッシュ関数によって第１段のハッシュ値を求める。併せて、ハッシュ演算部８４Ａは、第２のハッシュ関数によって第２段のハッシュ値を求める。
【０３７１】
第２段のハッシュ値は、第１段のハッシュ値を第２のハッシュ関数に入力して求めてもよいし、アドレス情報を第２のハッシュ関数に入力して求めてもよい。後者の場合、第１及び第２のハッシュ値は、並行して求めてもよい。
【０３７２】
第２段のハッシュ関数は、図１２に例示したように、ハッシュテーブルＨＴに設定、登録可能である。また、図１３に例示したように、第２段のハッシュ関数は、ハッシュテーブルＨＴに、複数（例えば、ハッシュ関数Ｆａ，Ｆｂ及びＦｃ）設定、登録されてよい。
【０３７３】
第１段のハッシュ関数によって得られた第１段のハッシュ値は、例示的に、ＨＭＴ制御部８５に与えられる。第２段のハッシュ関数によって得られた第２段のハッシュ値は、例示的に、重複制御部８８に与えられる。第１段のハッシュ値に重複が生じた場合に、第２段のハッシュ値を用いることで、複数のアドレス情報の登録が可能になる。
【０３７４】
重複制御部８８は、宛先参照時には、ＨＭＴ制御部８５で選択された（第１段の）ハッシュ値と、第２段のハッシュ値と、を基に、ポインタテーブルＰＴを参照して、フォワーディングテーブルＦＷＴへのポインタ情報を取得する。取得したポインタ情報は、ＦＷＴ制御部８６に与えられ、ＦＷＴ制御部８６が、当該ポインタ情報の示すフォワーディングテーブルＦＷＴのエントリを参照する。
【０３７５】
また、重複制御部８８は、空きポインタ情報を管理しておき、アドレス登録時には、空きポインタ情報のいずれかを第２段のハッシュ値に割り当ててポインタテーブルＰＴ（例えば図１２参照）に設定、登録する。割り当てたポインタ情報は、ＦＷＴ制御部８６に与えられ、ＦＷＴ制御部８６は、当該ポインタ情報をフォワーディングテーブルＦＷＴに登録する。
【０３７６】
なお、第２のハッシュ値に重複が生じた場合は、重複制御部８８は、重複しない第２段のハッシュ値が得られる第２段のハッシュ関数の検索をハッシュ演算部８４Ａに依頼してよい。
【０３７７】
当該依頼に応じて、ハッシュ演算部８４Ａは、ハッシュテーブルＨＴにおいて、重複しないハッシュ値が得られる第２段のハッシュ関数を検索あるいは設定（更新）し、重複しない第２段のハッシュ値を再計算してよい。再計算したハッシュ値は、重複制御部８８に与えられる。
【０３７８】
重複制御部８８は、ハッシュ演算部８４Ａから受信した第２段のハッシュ値に空きポインタ情報を割り当ててポインタテーブルＰＴを更新する。
【０３７９】
なお、ハッシュ演算部８４Ａは、図１４に例示したように、第１段のハッシュ関数を新旧２つのハッシュ関数間で切り替えてよい。第１段のハッシュ関数の切り替えに応じて、ハッシュテーブルＨＴ及びポインタテーブルＰＴの更新が行なわれてよい。
【０３８０】
以下、図２６〜図２９を参照して、上述した第２構成例の伝送装置１（フォワーディング処理部８０）の動作例について説明する。
【０３８１】
図２６は、新規のアドレス情報（例えば、ＭＡＣアドレス）の登録要求に応じたアドレス登録処理の一例を示すフローチャートである。図２７及び図２８は、第２段のハッシュ関数の検索処理の一例を示すフローチャートである。
【０３８２】
図２９は、第１段のハッシュ関数の更新処理の一例を示すフローチャートである。なお、図２６〜図２８には、図１３に例示したように、第２段のハッシュ関数として、例示的に、３つのハッシュ関数Ｆａ，Ｆｂ及びＦｃが用いられるケースを例示している。
【０３８３】
例えば、図２７及び図２８には、３つの第２段のハッシュ関数Ｆａ，Ｆｂ及びＦｃに、それぞれ、ＣＲＣ１２を用い、重複を最大で８つまで許容するケースを例示している。すなわち、図１３に例示したように、ハッシュ関数Ｆａを用いて、ハッシュ値を２グループに振り分け、振り分けられた２グループのハッシュ値を、２つのハッシュ関数Ｆｂ及びＦｃを用いてそれぞれ４つのハッシュ値に振り分けるケースである。
【０３８４】
（アドレス登録処理）
図２５に例示したフォワーディング処理部８０において、アドレス制御メッセージ抽出部８２からハッシュ登録制御部８７に、登録対象のアドレス情報が与えられると、ハッシュ登録制御部８７は、ハッシュテーブルＨＴの更新要求をハッシュ演算部８４Ａに送信する。
【０３８５】
当該更新要求に応じて、ハッシュ演算部８４Ａは、図２６に例示するように、ハッシュ関数Ｆａ，Ｆｂ及びＦｃを検索し（処理Ｐ１０１〜Ｐ１０３）、ハッシュ関数Ｆｂ及びＦｃの検索が成功したか否かをチェックする（処理Ｐ１０４）。
【０３８６】
ハッシュ関数Ｆｂ及びＦｃの検索に失敗すれば（処理Ｐ１０４でＮＯの場合）、ハッシュ関数Ｆｂ及びＦｃが見つかるまで（処理Ｐ１０４でＹＥＳと判定されるまで）、ハッシュ演算部８４Ａは、ハッシュ関数Ｆａ，Ｆｂ及びＦｃの検索を繰り返す。
【０３８７】
ハッシュ関数Ｆａ，Ｆｂ及びＦｃの検索が成功すれば（処理Ｐ１０４でＹＥＳの場合）、ハッシュ演算部８４Ａは、ハッシュテーブルＨＴに、第２段のハッシュ関数Ｆａ，Ｆｂ及びＦｃを登録する（処理Ｐ１０５）。
【０３８８】
また、ハッシュ演算部８４Ａは、ハッシュ関数Ｆａ，Ｆｂ及びＦｃによってそれぞれ得られる第２段のハッシュ値を重複制御部８８に与える。重複制御部８８は、第２段のハッシュ値のそれぞれに対応する、フォワーディングテーブルＦＷＴへのポインタ情報をポインタテーブルＰＴに登録する（処理Ｐ１０６）。
【０３８９】
一方、ＦＷＴ制御部８６は、ハッシュ登録制御部８７からの転送先情報登録要求に応じて、登録要求のあった新規のアドレス情報（例えば、ＭＡＣアドレス）をフォワーディングテーブルＦＷＴに登録する（処理Ｐ１０７）。新規アドレス情報の登録されたエントリが、ポインタテーブルＰＴに登録されたポインタ情報によって示される。
【０３９０】
（ハッシュ関数検索処理）
次に、図２６に例示したハッシュ関数Ｆａ，Ｆｂ及びＦｃの検索処理Ｐ１０１〜Ｐ１０３の一例について、図２７及び図２８を参照して説明する。図２７は、ハッシュ関数Ｆａの検索処理の一例を示すフローチャートであり、図２８は、ハッシュ関数Ｆｂ（Ｆｃ）の検索処理の一例を示すフローチャートである。
【０３９１】
なお、図２７には、ハッシュ関数Ｆａ（ｘ）が、以下の式（１）で表される、ＣＲＣ１２の生成多項式であるケースを例示している。
【０３９２】
Ｆａ（ｘ）＝ｘ１２＋Ａ１１ｘ１１＋…Ａ１ｘ＋Ａ０  …（１）
ただし、式（１）において、「Ａｊ」は、自然数「Ａ」の２進数でのｊ＋１桁目を表す。
【０３９３】
また、図２８には、ハッシュ関数Ｆｂ（ｘ）及びＦｃ（ｘ）が、それぞれ、以下の式（２）及び式（３）で表される、ＣＲＣ１２の生成多項式であるケースを例示している。
【０３９４】
Ｆｂ（ｘ）＝ｘ１２＋Ｂ１１ｘ１１＋…Ｂ１ｘ＋Ｂ０  …（２）
Ｆｃ（ｘ）＝ｘ１２＋Ｃ１１ｘ１１＋…Ｃ１ｘ＋Ｃ０  …（３）
ただし、式（２）において、「Ｂｊ」は、自然数「Ｂ」の２進数でのｊ＋１桁目を表し、式（３）において、「Ｃｊ」は、自然数「Ｃ」の２進数でのｊ＋１桁目を表す。
【０３９５】
（ハッシュ関数Ｆａの検索処理例）
図２７に例示するように、ハッシュ演算部８４Ａは、式（１）の係数ＡをＡ＝１に設定した、ＣＲＣ１２の多項式であるハッシュ関数Ｆａ（ｘ）を生成する（処理Ｐ１１１及び処理Ｐ１１２）。
【０３９６】
そして、ハッシュ演算部８４Ａは、第１段のハッシュ値が重複した、アドレス情報（例えば、ＭＡＣ＃０〜ＭＡＣ＃ｋ：ｋは０以上の整数）に対し、式（１）によるＣＲＣ演算を行なう（処理Ｐ１１３）。
【０３９７】
更に、ハッシュ演算部８４Ａは、ＭＡＣ＃０〜ＭＡＣ＃ｋのそれぞれに対する演算結果（ハッシュ値）の例えば最下位ビットが「０」又は「１」で同じである演算結果の数が、それぞれ閾値（例えば、４）以下であるか否かをチェックする（処理Ｐ１１４）。
【０３９８】
別言すると、ハッシュ演算部８４Ａは、ＭＡＣ＃０〜ＭＡＣ＃ｋのそれぞれに対して得られたハッシュ値の重複数が閾値以下であるか否かをチェックする。
【０３９９】
重複数が閾値以下であれば（処理Ｐ１１４でＹＥＳの場合）、ハッシュ演算部８４Ａは、係数Ａ＝１のハッシュ関数Ｆａ（ｘ）の検索に成功したと判定して、検索処理を終了する。
【０４００】
一方、重複数が閾値以下でなければ（処理Ｐ１１４でＮＯの場合）、ハッシュ演算部８４Ａは、Ａ＜２１２が満たされる範囲で係数Ａをインクリメント（Ａ＝Ａ＋１）しながら、閾値以下の演算結果が得られるハッシュ関数Ｆａ（ｘ）を検索する。
【０４０１】
当該検索処理は、処理Ｐ１１４のＮＯルートから処理Ｐ１１５、及び、処理Ｐ１１６のＹＥＳルートから処理Ｐ１１２〜Ｐ１１４に示される処理に相当する。
【０４０２】
閾値以下の演算結果が得られるハッシュ関数Ｆａ（ｘ）の検索に成功すれば（処理Ｐ１１４でＹＥＳの場合）、ハッシュ演算部８４Ａは、検索処理を終了する。
【０４０３】
なお、係数ＡをインクリメントしてＡ＝２１２となっても、重複数が閾値以下のハッシュ関数Ｆａ（ｘ）が見つからなければ（処理Ｐ１１６でＮＯの場合）、ハッシュ演算部８４Ａは、検索に失敗したと判定して、検索処理を終了してよい。検索失敗の旨は、エラー情報やアラーム情報等として伝送装置１の制御部１３や外部装置に通知されてよい。
【０４０４】
（ハッシュ関数Ｆｂ（Ｆｃ）の検索処理例）
図２８に例示するように、ハッシュ演算部８４Ａは、式（２）の係数ＢをＢ＝１に設定した、ＣＲＣ１２の多項式であるハッシュ関数Ｆｂ（ｘ）を生成する（処理Ｐ１２１及び処理Ｐ１２２）。なお、式（３）で表されるハッシュ関数Ｆｃ（ｘ）の検索処理については、図２８において、係数Ｂを係数Ｃに読み替えればよい。
【０４０５】
そして、ハッシュ演算部８４Ａは、第１段のハッシュ値が例えば「０」であるアドレス情報（例えば、ＭＡＣ＃０〜ＭＡＣ＃ｋ）に対し、式（２）によるＣＲＣ演算を行なう（処理Ｐ１２３）。
【０４０６】
なお、ハッシュ関数Ｆｃ（ｘ）の検索処理では、ハッシュ演算部８４Ａは、第１段のハッシュ値が「１」のアドレス情報に対し、式（３）によるＣＲＣ演算を行なえばよい。
【０４０７】
ただし、上記の例とは逆に、第１段のハッシュ値が「１」であるアドレス情報に対し式（３）のハッシュ関数Ｆｃ（ｘ）でＣＲＣ演算を行ない、第１段のハッシュ値が「０」のアドレス情報に対し式（２）のハッシュ関数Ｆｂ（ｘ）でＣＲＣ演算を行なってもよい。
【０４０８】
そして、ハッシュ演算部８４Ａは、ＭＡＣ＃０〜ＭＡＣ＃ｋのそれぞれに対する演算結果（ハッシュ値）の例えば下位２ビットが全て異なるか否かをチェックする（処理Ｐ１２４）。
【０４０９】
別言すると、ハッシュ演算部８４Ａは、ＭＡＣ＃０〜ＭＡＣ＃ｋのそれぞれに対して得られたハッシュ値（０又は１）を、２ビットで表示できる４つのハッシュ値に振り分け可能か否かをチェックする（処理Ｐ１２４）。
【０４１０】
ハッシュ値の下位２ビットが全て異なれば（処理Ｐ１２４でＹＥＳの場合）、ハッシュ演算部８４Ａは、ハッシュ関数Ｆｂ（ｘ）により得られたハッシュ値の下位２ビットに対応するポインタ情報を、ポインタテーブルＰＴに設定、登録する（処理Ｐ１２５）。
【０４１１】
ハッシュ関数Ｆｃ（ｘ）により得られたハッシュ値についても同様である。これにより、ハッシュ演算部８４Ａは、ハッシュ関数Ｆｂ（ｘ）（Ｆｃ（ｘ））の検索が成功したとして、検索処理を終了する。
【０４１２】
一方、処理Ｐ１２４において、ハッシュ値の下位２ビットが同じである演算結果が存在する場合（処理Ｐ１２４のＮＯルート）、ハッシュ演算部８４Ａは、ハッシュ関数Ｆｂ（ｘ）（Ｆｃ（ｘ））の再検索を行なう。
【０４１３】
例えば、ハッシュ演算部８４Ａは、Ｂ（又はＣ）＜２１２（Ｃ＜２１２）が満たされる範囲で係数Ｂ（又はＣ）をインクリメントしながら、ハッシュ値の下位２ビットが全て異なる（処理Ｐ１２４でＹＥＳと判定される）ハッシュ関数を検索する。
【０４１４】
当該検索処理は、処理Ｐ１２４のＮＯルートから処理Ｐ１２６、及び、処理Ｐ１２７のＹＥＳルートから処理Ｐ１２２〜Ｐ１２４に示される処理に相当する。
【０４１５】
最終的に、ハッシュ値の下位２ビットが全て異なるハッシュ関数の検索に成功すれば（処理Ｐ１２４でＹＥＳの場合）、ハッシュ演算部８４Ａは、既述のポインタ登録処理Ｐ１２５を実施して、検索処理を終了する。
【０４１６】
なお、係数Ｂ（又はＣ）をインクリメントしてＢ＝２１２（又はＣ＝＝２１２）となっても、処理Ｐ１２４の条件を満足するハッシュ関数が見つからなければ（処理Ｐ１２７でＮＯの場合）、ハッシュ演算部８４Ａは、検索失敗と判定して、検索処理を終了してよい。
検索失敗の旨は、エラー情報やアラーム情報等として伝送装置１の制御部１３や外部装置に通知されてよい。
【０４１７】
アドレス解放時には、重複制御部８８は、ポインタテーブルＰＴの該当ポインタ情報を「未使用」に更新し、未使用となったポインタ情報を空きポインタ情報として、ハッシュ演算部８４Ａに通知（「返却」と称してもよい。）してよい。
【０４１８】
（第１段のハッシュ関数更新処理例）
次に、図２９を参照して、図２５に例示したフォワーディング処理部８０による第１段のハッシュ関数の更新処理の一例について説明する。フォワーディング処理部８０が、図２９に例示するフローチャートに従って動作することで、図１４に例示したハッシュ関数更新処理を実現できる。
【０４１９】
まず、フォワーディング処理部８０において、例えばハッシュ演算部８４Ａは、フォワーディングテーブルＦＷＴのエントリチェック用インクリメントカウンタのカウント値ｎ１をｎ１＝１に設定する（処理Ｐ１３１）。
【０４２０】
なお、「ｎ１」は、例示的に、１以上、かつ、フォワーディングテーブルＦＷＴの最大エントリ数（例えば、１Ｍ）以下を満たす整数である。
【０４２１】
そして、ハッシュ演算部８４Ａは、重複制御部８８を通じてＦＷＴ制御部８６に、フォワーディングテーブルＦＷＴのｎ１番目のエントリが空き（未割当）であるか否かを問い合わせる（処理Ｐ１３２）。
【０４２２】
問い合わせの結果、フォワーディングテーブルＦＷＴのｎ１番目のエントリが空きであれば（処理Ｐ１３２でＹＥＳの場合）、ハッシュ演算部８４Ａは、入力アドレス情報（例えば、ＭＡＣアドレス）を第１段の新ハッシュ関数にて演算する（処理Ｐ１３３）。
【０４２３】
そして、ハッシュ演算部８４Ａは、ハッシュテーブルＨＴにおいて、第１段の新ハッシュ値である上記演算結果に対応する「管理フラグ」（図１４参照）に空きがあるか否かをチェックする（処理Ｐ１３４）。
【０４２４】
「管理フラグ」に空きがあれば（処理Ｐ１３４でＹＥＳの場合）、ハッシュ演算部８４Ａは、「管理フラグ」の「新」と「空」に割り振り可能な「第２段のハッシュ関数」を検索する（処理Ｐ１３５）。
【０４２５】
「第２段のハッシュ関数」の検索に成功すれば（処理Ｐ１３６でＹＥＳの場合）、ハッシュ演算部８４Ａは、ＨＭＴ制御部８５に、「第２段のハッシュ関数」（第２段のハッシュ値）に対応するポインタ情報の更新を依頼する。
【０４２６】
ＨＭＴ制御部８５は、当該ポインタ情報の更新依頼に応じて、第２段の新ハッシュ値に対応するポインタ情報をポインタテーブルＰＴに登録し（処理Ｐ１３７）、ハッシュ演算部８４Ａに応答を返す。
【０４２７】
当該応答に応じて、ハッシュ演算部８４Ａは、ハッシュテーブルＨＴ（図１４参照）において、「第２段のハッシュ関数」を、検索に成功した新ハッシュ関数に更新し（処理Ｐ１３８）、新ハッシュ関数の「管理フラグ」を「新」に更新する（処理Ｐ１３９）。
【０４２８】
また、ハッシュ演算部８４Ａは、ハッシュテーブルＨＴ（図１４参照）において、第２段の旧ハッシュ関数に対応する「管理フラグ」を「空」に更新する（処理Ｐ１４０）。
【０４２９】
なお、上記の各処理Ｐ１３８〜Ｐ１４０の順序は、不問である。また、各処理Ｐ１３８〜Ｐ１４０は、並行して実施されてもよい。
【０４３０】
各処理Ｐ１３８〜Ｐ１４０の後、ハッシュ演算部８４Ａは、インクリメントカウンタのカウント値ｎ１を１つインクリメント（ｎ１＝ｎ１＋１）し（処理Ｐ１４１）、カウント値ｎ１が１Ｍ分のエントリ数未満であるか否かをチェックする（処理Ｐ１４２）。
【０４３１】
なお、処理Ｐ１３２、処理Ｐ１３４及び処理Ｐ１３６でそれぞれＮＯと判定された場合も、処理Ｐ１４１及び処理Ｐ１４２が実施される。
【０４３２】
カウント値ｎ１が１Ｍ分のエントリ数未満であれば（処理Ｐ１４２でＹＥＳの場合）、ハッシュ演算部８４Ａは、処理Ｐ１３２に戻り、フォワーディングテーブルＦＷＴの次のエントリについて、上記の処理Ｐ１３２〜Ｐ１４０を実施する。
【０４３３】
ハッシュ演算部８４Ａは、ｎ１＝１Ｍが満たされるまで（処理Ｐ１４２でＮＯと判定されるまで）、カウント値ｎ１をインクリメント（処理Ｐ１４１）しながら、処理Ｐ１３２〜Ｐ１４０を繰り返す。
【０４３４】
これにより、フォワーディングテーブルＦＷＴの全てのエントリについて、「第１段のハッシュ関数」及び「第２段のハッシュ関数」の更新処理が実施される。
【０４３５】
そして、ハッシュ演算部８４Ａは、処理Ｐ１３７でハッシュテーブルＨＴに登録されなかった（別言すると、割り当てられてなかった）ポインタ情報の有無をチェックする（処理Ｐ１４３）。
【０４３６】
割り当てられなかったポインタ情報が有れば（処理Ｐ１４３でＹＥＳの場合）、ハッシュ演算部８４Ａは、インクリメントカウンタのカウント値ｎ１を「１」に初期化して、ポインタ情報の登録を試行する（処理Ｐ１３２〜Ｐ１４２）。
【０４３７】
最終的に、全てのポインタ情報の割り当てに成功すると（処理Ｐ１４３でＮＯの場合）、ハッシュ演算部８４Ａは、更新処理を終了してよい。
【０４３８】
以上のようにして、図１４に例示したハッシュ関数の更新処理が可能となる。なお、図２９の例では、フォワーディングテーブルの先頭エントリから順に空きエントリの検索を行なっているが、検索順序は変更してよい。例えば、重複の多いハッシュ値に対応するエントリから順に検索を行なうようにしても構わない。
【０４３９】
（フォワーディング処理部８０の伝送装置１への実装例）
図１８や図２５に例示したフォワーディング処理部８０としての機能は、ハードウェア回路によって伝送装置１に実装されてもよいし、ソフトウェア処理によって伝送装置１に実装されてもよい。
【０４４０】
フォワーディング処理部８０としての機能が、ハードウェア回路によって伝送装置１に実装されるケースを図３０に例示し、ソフトウェア処理によって伝送装置１に実装されるケースを図３１に例示する。
【０４４１】
（ハードウェア実装）
フォワーディング処理部８０としての機能は、図１に例示したパケット伝送装置１の入出力ＩＦ１１のそれぞれに実装されてよい。図３０の例では、フォワーディング処理部８０としての機能が、各入出力ＩＦ１１それぞれの入力プロトコル処理部１１２に実装される。
【０４４２】
ここで、入出力ＩＦ１１の構成例を説明すると、入出力ＩＦ１１は、それぞれ、例示的に、物理終端部１１１、入力プロトコル処理部１１２、メモリ１１２ａ、入力ＱｏＳ制御部１１３、メモリ１１３ａ、及び、スイッチインタフェース１１４を備える。また、入出力ＩＦ１１は、例示的に、出力プロトコル処理部１１５、メモリ１１５ａ、出力ＱｏＳ制御部１１６、及び、メモリ１１６ａを備える。
【０４４３】
物理終端部１１１は、入出力パケットの物理レイヤ処理を担当する。物理レイヤ処理には、例示的に、入力パケットのヘッダの終端（解析）処理や出力パケットへのヘッダ付与処理等が含まれてよい。
【０４４４】
入力プロトコル処理部１１２は、物理終端部１１１でヘッダ終端処理等を施された入力パケットに対し、物理レイヤよりも上位のレイヤの通信プロトコルに応じたプロトコル処理を担当する。当該入力プロトコル処理部１１２に、図１８や図２５に例示したフォワーディング処理部８０が実装されてよい。
【０４４５】
メモリ１１２ａは、例示的に、入力プロトコル処理部１１２がプロトコル処理に用いるデータを記憶する。当該データに、既述のハッシュ管理テーブルＨＭＴ（エントリカウンタＥＭＣ）、フォワーディングテーブルＦＷＴ、ハッシュテーブルＨＴ、ポインタテーブルＰＴ等が含まれてよい。
【０４４６】
入力ＱｏＳ制御部１１３は、入力プロトコル処理部１１２でプロトコル処理されたパケットに対してＱｏＳ（Quality of Service）制御を実施する。ＱｏＳ制御の一例は、パケットの種類に応じた優先度や通信の予約帯域に従って、パケットの出力順序や出力レートを制御することである。
【０４４７】
メモリ１１３ａは、例示的に、入力ＱｏＳ制御部１１３がＱｏＳ制御に用いるデータを記憶する。
【０４４８】
スイッチインタフェース１１４は、入力ＱｏＳ制御部１１３及び出力プロトコル処理部１１５と、ＳＷＦ１２との間の接続インタフェースである。例えば、スイッチインタフェース１１４は、入力ＱｏＳ制御部１１３にてＱｏＳ制御されたパケットをＳＷＦ１２へ出力し、ＳＷＦ１２から入力されたパケットを出力プロトコル処理部１１５へ出力する。
【０４４９】
出力プロトコル処理部１１５は、スイッチインタフェース１１４から入力されたパケットに対し、物理レイヤよりも上位のレイヤの通信プロトコルに応じたプロトコル処理を担当する。
【０４５０】
メモリ１１５ａは、例示的に、出力プロトコル処理部１１５がプロトコル処理に用いるデータを記憶する。
【０４５１】
出力ＱｏＳ制御部１１６は、出力プロトコル処理部１１５でプロトコル処理されたパケットに対してＱｏＳ制御を実施する。
【０４５２】
メモリ１１５ａは、例示的に、出力プロトコル処理部１１５がプロトコル処理に用いるデータを記憶してよい。
【０４５３】
なお、メモリ１１２ａ、１１３ａ、１１５ａ及び１１６ａは、いずれも、記憶装置あるいは記憶媒体の一例であり、ＲＡＭやＨＤＤであってよい。また、図３０の例では、メモリ１１２ａ、１１３ａ、１１５ａ及び１１６ａは、それぞれ、各部１１２、１１３、１１５及び１１６に個別のメモリであるが、一部又は全部が共用メモリであってもよい。
【０４５４】
図３０に例示した入出力ＩＦ１１は、それぞれ、ハードウェア回路の一例である半導体集積回路によって実現されてよい。半導体集積回路の一例は、ＩＣ（Integrated Circuit）、ＬＳＩ（Large Scale Integration）、ＦＰＧＡ（Field Programmable Gate Array）、ＡＳＩＣ（application specific integrated circuit）等である。
【０４５５】
（ソフトウェア実装）
図３０に例示した構成（ハードウェア実装）に対し、フォワーディング処理部８０としての機能は、図３１に例示するように、制御部１３のＣＰＵ１３１によるソフトウェア処理として伝送装置１に実装されてよい。
【０４５６】
例えば、ＣＰＵ１３１がフォワーディング処理部８０としての機能を実現するソフトウェア（「プログラム」と称してもよい。）やデータを、メモリ１３３や１３４から読み取って動作することで、フォワーディング処理部８０としての機能が実現されてよい。メモリ１３３及び１３４は、図１に例示したメモリ１３２に相当すると捉えてよい。
【０４５７】
なお、メモリ１３３は、例示的に、キャッシュメモリであってよく、メモリ１３４は、ＲＡＭやＨＤＤ等の記憶装置あるいは記憶媒体であってよい。メモリ１３４に記憶されたプログラムやデータは、例えば、ＣＰＵ１３１によって読み出されてキャッシュメモリ１３３に展開される。キャッシュメモリ１３３に展開されたプログラムやデータをＣＰＵ１３１が読み取って動作することで、読み取ったプログラムやデータに応じた処理が具現される。
【０４５８】
ＣＰＵ１３１及びメモリ１３４は、バス変換部１３５にバス接続されてよい。バス変換部１３５は、各入出力ＩＦ１１に備えられたバス変換部１１９との間の接続インタフェースの一例である。なお、図３１において、「ＮＩＣ」は、「Network Interface Card」の略称であり、入出力ＩＦ１１の一例である。
【０４５９】
バス変換部１１９及び１３５は、それぞれ、バス通信の仕様やプロトコル等が入出力ＩＦ１１と制御部１３との間で異なる場合に、互いの通信が適切に行なわれるように入出力信号の変換等を行なう。
【０４６０】
入出力ＩＦ１１は、それぞれ、図３０に例示した物理終端部１１１と同一若しくは同様の物理終端部１１８を備えてよい。
【０４６１】
図３１の構成では、図３０にて説明した入出力プロトコル処理やＱｏＳ制御も、フォワーディング処理と併せてＣＰＵ１３１によって実現される、と捉えてよい。
【０４６２】
以上のように、上述したフォワーディング処理部８０としての機能は、ハードウェア回路によって超高速な処理を実現したい場合に限らず、ソフトウェア処理によって処理能力を向上したい場合にも効果を発揮する。
【０４６３】
（その他）
なお、上述した実施形態の適用対象は、パケット伝送装置等の伝送装置に限られなくてよい。例えば、上述した実施形態は、データベース参照（検索）を行なう情報処理装置に適用してもよい。情報処理装置は、パーソナルコンピュータ（ＰＣ）や、サーバコンピュータ、クラウドコンピュータ等のコンピュータであってよい。
【０４６４】
別言すると、参照（検索）対象の情報（あるいはデータ）は、既述のフォワーディングテーブルＦＷＴに限られず、入力データの識別情報に対応する情報やデータが登録されたデータベース（ＤＢ）であってよい。
【０４６５】
例示的に、何らかの入力データの識別情報を検索キーにしてＤＢ検索を行なう情報処理装置において、当該識別情報を複数のハッシュ関数によって縮退させて、既述の実施形態に例示した処理を適用してよい。
【０４６６】
この場合、ハッシュ値の重複確率を低減でき、仮に、ハッシュ値の重複が低確率で生じても、ＤＢサイズの増加を最小限に抑えつつ、ＤＢの参照回数の増加を抑制できる。したがって、情報処理装置の情報検索性能の低下を抑制できる。
【符号の説明】
【０４６７】
１  パケット伝送装置
１１−１〜１１−Ｎ  入出力インタフェース（ＩＦ）
１２  スイッチファブリック（ＳＷＦ）
１３  制御部
８０  フォワーディング処理部
８１  アドレス抽出部
８２  アドレス制御メッセージ抽出部
８３  転送先情報付与部
８４，８４Ａ  ハッシュ演算部
８５  ハッシュ管理テーブル（ＨＭＴ）制御部
８６  フォワーディングテーブル（ＦＷＴ）制御部
８７  ハッシュ登録制御部
８８  重複制御部
１１１，１１８  物理終端部
１１２  入力プロトコル処理部
１１２ａ  メモリ
１１３  入力ＱｏＳ制御部
１１３ａ  メモリ
１１４  スイッチインタフェース
１１５  出力プロトコル処理部
１１５ａ  メモリ
１１６  出力ＱｏＳ制御部
１１６ａ  メモリ
１１９，１３５  バス変換部
１３１  ＣＰＵ
１３２，１３３，１３４  メモリ
ＥＭＣ  エントリ管理カウンタ
ＨＦＳ  ハッシュ関数検索部
ＨＭＴ  ハッシュ管理テーブル
ＨＴ  ハッシュテーブル
ＭＥＭ  メモリ
ＰＴ  ポインタテーブル
ＦＷＴ  フォワーディングテーブル
【図１】
2016096422.tif 000003
【図２】
2016096422.tif 000004
【図３】
2016096422.tif 000005
【図４】
2016096422.tif 000006
【図５】
2016096422.tif 000007
【図６】
2016096422.tif 000008
【図７】
2016096422.tif 000009
【図８】
2016096422.tif 000010
【図９】
2016096422.tif 000011
【図１０】
2016096422.tif 000012
【図１１】
2016096422.tif 000013
【図１２】
2016096422.tif 000014
【図１３】
2016096422.tif 000015
【図１４】
2016096422.tif 000016
【図１５】
2016096422.tif 000017
【図１６】
2016096422.tif 000018
【図１７】
2016096422.tif 000019
【図１８】
2016096422.tif 000020
【図１９】
2016096422.tif 000021
【図２０】
2016096422.tif 000022
【図２１】
2016096422.tif 000023
【図２２】
2016096422.tif 000024
【図２３】
2016096422.tif 000025
【図２４】
2016096422.tif 000026
【図２５】
2016096422.tif 000027
【図２６】
2016096422.tif 000028
【図２７】
2016096422.tif 000029
【図２８】
2016096422.tif 000030
【図２９】
2016096422.tif 000031
【図３０】
2016096422.tif 000032
【図３１】
2016096422.tif 000033