JP2016096422A - 伝送装置、フォワーディング制御方法、及び、情報処理装置 - Google Patents

伝送装置、フォワーディング制御方法、及び、情報処理装置 Download PDF

Info

Publication number
JP2016096422A
JP2016096422A JP2014230779A JP2014230779A JP2016096422A JP 2016096422 A JP2016096422 A JP 2016096422A JP 2014230779 A JP2014230779 A JP 2014230779A JP 2014230779 A JP2014230779 A JP 2014230779A JP 2016096422 A JP2016096422 A JP 2016096422A
Authority
JP
Japan
Prior art keywords
hash
information
hash value
value
control unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2014230779A
Other languages
English (en)
Inventor
朝永 博
Hiroshi Tomonaga
博 朝永
北田 敦史
Atsushi Kitada
敦史 北田
雅美 関戸
Masami Sekido
雅美 関戸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014230779A priority Critical patent/JP2016096422A/ja
Priority to US14/926,848 priority patent/US20160142315A1/en
Publication of JP2016096422A publication Critical patent/JP2016096422A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/7453Address table lookup; Address filtering using hashing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】伝送装置のフォワーディング性能の低下を抑制する。【解決手段】入力データの識別情報から複数のハッシュ関数#1,#2を用いて複数のハッシュ値#1,#2を求め、いずれかのハッシュ値を基にフォワーディング情報FWTを参照して入力データのフォワーディングを制御し、ハッシュ関数#1,#2毎にハッシュ値がフォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報HMTに基づいて、前記参照に用いられるハッシュ値の選択を制御する。【選択図】図4

Description

本発明は、伝送装置、フォワーディング制御方法、及び、情報処理装置に関する。
ルータやスイッチ等のパケットを伝送するパケット装置では、受信パケットの宛先アドレスを基にフォワーディングテーブルを参照、検索して、受信パケットの転送先を決定する。
特開平3−54937号公報 特開2013−179421号公報 特開2010−50600号公報 特開2009−123050号公報 特開2004−227434号公報
パケットの宛先アドレス数が増えると、フォワーディングテーブルが肥大化する。ここで、パケット伝送装置で受信される可能性のあるパケットの宛先アドレス数は、宛先アドレスのビット数で表現可能なアドレス数の全てではなく、一部に限られることが多い。
そこで、宛先アドレスをハッシュ関数によって縮退したアドレス空間のハッシュ値に変換し、得られたハッシュ値をフォワーディングテーブルの参照(検索)キーに用いることがある。これにより、フォワーディングテーブルの肥大化を抑えることができる。
しかし、ハッシュ関数を用いて宛先アドレス空間を縮退させると、異なる宛先アドレスに対して同じハッシュ値が得られる場合がある。このようなハッシュ値の重複が生じると、1回のフォワーディングテーブルの参照ではパケットの正しい転送先を決定できない。別言すると、フォワーディングテーブルの参照回数が増える。そのため、パケット伝送装置のフォワーディング性能が低下するおそれがある。
1つの側面では、本発明の目的の1つは、伝送装置のフォワーディング性能の低下を抑制できるようにすることにある。
1つの側面において、伝送装置は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御するフォワーディング制御部と、前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、を備える。
また、1つの側面において、フォワーディング制御方法は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求め、いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御し、前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御する。
更に、1つの側面において、情報処理装置は、入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、いずれかのハッシュ値を基に、前記識別情報に対応する情報が登録されたデータベースを参照して、前記入力データに対応する情報検索を行なう情報検索部と、前記ハッシュ関数毎にハッシュ値が前記データベースの参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、を備える。
1つの側面として、伝送装置のフォワーディング性能の低下を抑制できる。
一実施形態に係るパケット伝送装置の構成例を示すブロック図である。 MACアドレスをハッシュ関数によってハッシュ演算して得られるハッシュ値によってフォワーディングテーブルを参照する例を模式的に示す図である。 図2においてハッシュ関数を複数用いる例を模式的に示す図である。 一実施形態に係るハッシュ値の管理及びMACアドレスの登録処理の一例について説明するための模式図である。 一実施形態に係るハッシュ管理テーブルの一例を示す図である。 一実施形態に係る、登録済みMACアドレスの削除に応じたハッシュ管理テーブルのエントリ削除(更新)処理を説明するための図である。 一実施形態に係る、登録済みMACアドレスの削除に応じたハッシュ管理テーブルのエントリ削除(更新)処理を説明するための図である。 一実施形態に係る、登録済みMACアドレスの削除に応じたハッシュ管理テーブルのエントリ削除(更新)処理を説明するための図である。 (A)〜(D)は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例(第1の処理例)を説明するための図である。 (A)〜(D)は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例(第2の処理例)を説明するための図である。 (A)〜(D)は、一実施形態に係る、ハッシュ値の重複が生じた場合の処理の一例(第3の処理例)を説明するための図である。 一実施形態に係る、ハッシュ関数を多段化して、フォワーディングテーブルのサイズを増加させずに、ハッシュ値の重複を処理する例を説明するための図である。 図12において、第2段のハッシュ関数を複数設けた場合の処理例を説明するための図である。 図12において、第1段のハッシュ関数を更新する場合の処理を説明するための図である。 図4においてCAM及びポインタテーブルを併用した重複処理の一例を説明するための図である。 (A)及び(B)は、ハッシュ値の演算例を説明するための図である。 (A)及び(B)は、一実施形態の効果を説明するための図である。 図1に例示するパケット伝送装置の第1構成例を示すブロック図である。 図18に例示するフォワーディング処理部の動作(宛先参照時)の一例を示すフローチャートである。 図18に例示するフォワーディング処理部の動作(アドレス登録時)の一例を示すフローチャートである。 図20に例示する登録条件判定処理の一例を示すフローチャートである。 図20に例示する重複判定処理の一例を示すフローチャートである。 図18に例示するハッシュ管理テーブル制御部によるハッシュ管理テーブルの更新処理の一例を示すフローチャートである。 図18に例示するフォワーディング処理部の動作(アドレス登録解除時)の一例を示すフローチャートである。 図1に例示するパケット伝送装置の第2構成例を示すブロック図である。 図25に例示するフォワーディング処理部の動作(アドレス登録時)の一例を示すフローチャートである。 図26に例示するハッシュ関数検索処理の一例を示すフローチャートである。 図26に例示するハッシュ関数検索処理の一例を示すフローチャートである。 図25に例示するフォワーディング処理部の動作(第1のハッシュ関数更新時)の一例を示すフローチャートである。 図1に例示するパケット伝送装置の構成例を示すブロック図である。 図1に例示するパケット伝送装置の他の構成例を示すブロック図である。
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。また、以下に説明する各種の例示的態様は、適宜に組み合わせて実施しても構わない。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
図1は、一実施形態に係るパケット伝送装置の構成例を示すブロック図である。パケット伝送装置1は、いずれかのポートを通じて受信したパケットデータ(以下「パケット」と略称することがある。)を、当該受信パケットに付与されている宛先情報に応じたポートへ出力することができる。なお、「パケット」は、通信信号の一例であり、ユーザ信号や制御信号が含まれてよい。「信号」は「データ」あるいは「情報」に読み替えてもよい。
宛先情報の一例は、パケットの宛先である通信機器や当該宛先に到達可能な経路等を識別可能な情報であってよく、そのような識別情報の一例としては、MACアドレスやIPアドレス等のアドレス情報が挙げられる。なお、「MAC」は、「Media Access Control」の略称であり、「IP」は、「Internet Protocol」の略称である。
宛先情報に応じたポートへのパケット出力は、パケットの「転送」、「フォワーディング」、あるいは、「スイッチ」と称してよい。そのため、パケット伝送装置1は、「パケットルータ」や「パケットスイッチ」等と称されてもよい。
パケットのフォワーディングは、例示的に、受信パケットの宛先情報と、フォワーディングテーブルや転送テーブル等と称される、例えば宛先情報と経路情報とを対応付けたテーブル形式のデータベースと、を基に行なわれる。経路情報には、例示的に、パケット伝送装置1の出力ポートを識別可能な情報が含まれてよい。
図1に例示するパケット伝送装置1は、例示的に、N個(Nは1以上の整数)の入出力インタフェース(IF)11−1〜11−N(#1〜#N)と、スイッチファブリック(SWF)12と、制御部13と、を備える。
なお、以下において、入出力IF11−i(#i)(i=1〜Nのいずれか)を区別しなくてよい場合は単に「入出力IF11」と称することがある。また、パケット伝送装置1は、単に「伝送装置1」と称することがある。
入出力IF11は、1又は複数の入出力ポートを有し、当該入出力ポートを通じて、パケットを送受信可能である。なお、入出力IF11の入力側は「IG(Ingress)」と称してよく、入出力IF11の出力側は「EG(Egress)」と称してよい。
SWF12は、制御部13の制御に応じて、いずれかの入出力IF11間を接続して内部的なパケットの転送経路を形成(「設定」と称してもよい。)する。SWF12は、パケット伝送装置1に搭載される入出力IF11の数(別言すると、入出力ポート数)に応じて複数設けられてもよい。
入出力IF11は、例示的に、フォワーディングテーブルFWTを有しており、IGで受信したパケットの宛先情報を基にフォワーディングテーブルFWTを参照、検索して、どの入出力IF11に受信パケットを転送すればよいかを判断、識別する。なお、フォワーディングテーブルFWTの参照、検索は、フォワーディングテーブルFWTに対する「アクセス」と総称してもよい。
フォワーディングテーブルFWTは、テーブル形式の情報(あるいはデータ)として表現されたフォワーディング情報の一例である。図1の例では、宛先情報Aのパケットは入出力IF#2へ転送し、宛先情報Bのパケットは入出力IF#1へ転送することが、入出力IF11#NのフォワーディングテーブルFWTに登録されている。なお、宛先情報Aのパケット、及び、宛先情報Bのパケットは、それぞれ便宜的に、「パケットA」及び「パケットB」と称してよい。
入出力IF#Nは、パケットAが受信されると、宛先情報Aを基にフォワーディングテーブルFWTを参照して、当該受信パケットAを入出力IF#2へ転送する、と判定する。
同様に、入出力IF#Nは、パケットBが受信されると、宛先情報Bを基にフォワーディングテーブルFWTを参照して、当該受信パケットBを入出力IF#1へ転送する、と判定する。
なお、当該判定は、「宛先判定」あるいは「宛先識別」と称してもよい。「宛先判定」に伴うフォワーディングテーブルFWTへのアクセスは、「宛先参照」あるいは「宛先検索」と称してもよい。
このような入出力IF11での宛先識別結果は、例示的に、制御部13へ与えられる。制御部13は、当該宛先識別結果に基づいて、SWF12を制御することで、受信パケットの宛先情報に応じた内部的な経路を入出力IF11間に設定する。これにより、受信パケットは、当該受信パケットに付与されている宛先情報に応じた適切な入出力IF11へ転送される。
なお、図1の例では、フォワーディングテーブルFWTに、内部的な転送先情報の一例として入出力IF11の識別情報(例えばIF番号#i)が登録されているが、複数の入出力ポートを有する入出力IF11については、入出力ポートの識別情報が登録されてよい。
制御部13は、パケット伝送装置1の全体的な動作を統括的に制御可能であり、例えば、入出力IF11の動作と、SWF12の動作と、を制御することができる。別言すると、制御部13は、入出力IF11及びSWF12との間で制御信号を送受信できる。入出力IF11に対する制御には、例示的に、フォワーディングテーブルFWTの設定や更新等の処理が含まれてよい。
なお、制御部13は、図1に例示するように、CPU(Central Processing Unit)131と、メモリ132と、を用いて実現されてよい。CPU131は、演算能力を備えたプロセッサの一例であり、プロセッサデバイスあるいはプロセッサ回路と称してもよい。
メモリ132は、記憶装置あるいは記憶媒体の一例であり、RAM(Random Access Memory)やHDD(Hard Disk Drive)等が含まれてよい。メモリ132は、RAMやHDDの一部の記憶領域に相当してもよい。
なお、伝送装置1の構成は、図1に例示する構成に限られない。例えば、フォワーディングテーブルFWTは、SWF12のような、伝送装置1の共通部に備えられていてもよい。また、伝送装置1は、「シャーシタイプ」のように機能ブロックが着脱可能な構成であってもよいし、「ピザボックスタイプ」のように機能ブロックが一体化された構成であってもよい。
以下の実施形態では、上述したように、受信パケットの転送の際に参照されるフォワーディングテーブルFWTの縮小化や参照回数(別言すると、アクセス回数)の削減について説明する。
まず、図2を参照して、伝送装置1の一例であるイーサネットスイッチにおいて、フォワーディングテーブルFWTに登録されたMACアドレスを、ハッシュ検索する動作の一例を説明する。なお、「イーサネット」は、登録商標である。
イーサネットにおいてMACアドレス空間は、48ビットであるため、48ビットで表示可能な全てのアドレスのフォワーディングテーブルFWTを用意するとなると、248=256テラ(T)ビットという膨大なアドレス空間が必要になる。
しかし、パケット伝送装置1が実際に処理するパケットのMACアドレス数は、48ビットで表示可能な数の全てではなく、その一部に限定されてよい。そこで、受信パケットの宛先MACアドレスを、ハッシュ関数によって縮退したアドレス空間のハッシュ値に変換し、得られたハッシュ値を基にフォワーディングテーブルFWTを参照する方法が、伝送装置1において採用されることがある。
例えば、パケット伝送装置1が実際に処理できればよいMACアドレス数が100万台分の通信機器のアドレス数であると仮定する。当該仮定の下では、図2中に例示するように、ハッシュ関数の一例として20ビットのCRC(以下「CRC20」と表記する。)を用いることで、MACアドレスを、20ビットで表示可能な約100万(1メガ)のハッシュ値に縮退してよい。
しかし、「ハッシュ関数」は、「要約関数」とも称されるように、入力情報を限られた情報量に振り分ける(「マッピング」又は「割り当てる」と称してもよい。)に過ぎない。そのため、ハッシュ関数を用いると、異なるMACアドレスに対して同じハッシュ値が偶発的に割り当てられることがある。これをハッシュ値の「衝突」あるいは「重複」と呼ぶ。
図2の例では、MACアドレスMAC#1のハッシュ値Aと、MACアドレスMAC#3のハッシュ値Aとが重複した様子を例示している。なお、図2において、ハッシュ値Bは、MACアドレスMAC#2のハッシュ値を表す。
このようなハッシュ値の重複が生じても、本来のMACアドレスに応じたパケットフォワーディングを可能にするためには、例示的に、ポインタ情報を用いればよい。例えば、図2中に例示するように、ハッシュ値毎のエントリを有するフォワーディングテーブルFWTにおいて、MACアドレス及び宛先IF番号等の他に、ポインタ情報をエントリ毎に保持しておく。
ポインタ情報は、例示的に、フォワーディングテーブルFWTのハッシュ値毎のエントリにおいて、MACアドレスが一致しない場合の、次の検索候補エントリを示す情報である。次の検索候補エントリが無い場合、ポインタ情報には「Null」が設定されてよい。
図2の例では、フォワーディングテーブルFWTのハッシュ値Aに対応するエントリに、ポインタ情報Zが設定されている。ポインタ情報Zは、ハッシュ値Zに対応するエントリ(MACアドレスMAC#3のエントリ)を指し示す情報である。
そして、MACアドレスMAC#1のハッシュ値Aを基にフォワーディングテーブルFWTを参照すると、ハッシュ値Aのエントリには、MAC#1が登録されているので、MACアドレスが一致する。MACアドレスが一致すれば、当該エントリに登録されている「宛先IF番号」等を基に受信パケットの転送先が判断、識別される。
MACアドレスMAC#2のハッシュ値Bについても、フォワーディングテーブルFWTのハッシュ値Bに対応するエントリにおいてMACアドレスが一致するから、当該エントリに登録されている「宛先IF番号」等を基に受信パケットの転送先が判断、識別される。
一方、重複の生じたMACアドレスMAC#3のハッシュ値Aについては、フォワーディングテーブルFWTを参照すると、ハッシュ値Aのエントリに異なるMACアドレスMAC#1が登録されているので、MACアドレスが一致しない。
そのため、当該エントリに設定されているポインタ情報Zを基に、次の検索候補エントリ(例えば、ハッシュ値Zのエントリ)を参照する。ハッシュ値Zのエントリには、MACアドレスMAC#3が登録されており、MACアドレスが一致する。したがって、当該エントリに登録されている「宛先IF番号」等を基に受信パケットの転送先が判断、識別される。
ハッシュ値に重複が生じると、このようにしてポインタ情報を基に、MACアドレスの一致するエントリが見つかるまで、フォワーディングテーブルFWTに対するアクセスが繰り返される。
そのため、最大でハッシュ値の衝突数に相当する回数だけフォワーディングテーブルFWTへのアクセスが生じる。結果的に、ハッシュ値の衝突数が増えるほどフォワーディングテーブルFWTに対するアクセス回数が増加し、パケットフォワーディングの性能(以下「フォワーディング性能」と称することがある。)が低下するおそれがある。
ハッシュ値が衝突する確率に応じてフォワーディングテーブルFWTの数を増やせば、フォワーディング性能を向上できるであろうが、ハードウェアリソースの消費量が増大する。しかも、フォワーディングテーブルFWTへのアクセス回数自体は変わらない。
そこで、ハードウェアリソースを増やさずにフォワーディング性能の低下を防ぐためには、ハッシュ値の衝突確率をできるだけ下げることが有効である。ハッシュ値の衝突確率を下げる方法の一例として、複数のハッシュ関数を用いる方法(図3参照)が挙げられる。
図3には、2つのハッシュ関数#1及び#2を用いる例を示してある。なお、図3には、ハッシュ関数#1及び#2のいずれもが、CRC20を用いてMACアドレスを縮退させるケースを例示している。ただし、ハッシュ関数#1及び#2に用いるCRCのビット数は互いに異なっていてもよい。
まず、一方のハッシュ関数#1を用いてハッシュ値#1が求められ、重複が生じてない場合は、図2に例示したように1つのハッシュ関数を用いる場合と同様に、当該ハッシュ値#1を用いてフォワーディングテーブルFWTが参照、検索される。
例えば、MACアドレスMAC#1については、ハッシュ関数#1から得られたハッシュ値#1=Aが選択されて、ハッシュ値Aを検索キーにしてフォワーディングテーブルFWTが参照、検索される。
MACアドレスMAC#2についても、ハッシュ関数#1から得られたハッシュ値#1=Bが選択されて、ハッシュ値Bを検索キーにしてフォワーディングテーブルFWTが参照、検索される。
一方、ハッシュ値の重複が生じた場合は、他方のハッシュ関数#2を用いてハッシュ値#2が求められ、ハッシュ値#2に重複が生じていなければ、当該ハッシュ関数#2のハッシュ値#2がフォワーディングテーブルFWTの検索キーに選択される。
例えば図3において、MACアドレスMAC#3に対してハッシュ関数#1からハッシュ値#1=Aが得られたとすると、当該ハッシュ値Aは、MACアドレスMAC#1のハッシュ値#1=Aと重複する。ハッシュ値Aの重複が生じると、ハッシュ関数#1は選択されず、ハッシュ関数#2が選択される。
ここで、図3の例では、ハッシュ関数#2から得られたハッシュ値#2は「D」であり、ハッシュ関数#1から得られたハッシュ値#1(A及びB)とは重複しない。そのため、ハッシュ関数#2から得られたハッシュ値#2=Dが、フォワーディングテーブルFWTの検索キーに選択、利用される。
このように、複数のハッシュ関数を階層的に用いることで、ハッシュ値の衝突確率を下げることができる。
ただし、図3の例では、パケットが到着したときの処理を考えると、ハッシュ関数#1及び#2のいずれを選択しているかを識別できない。例えば、MACアドレスMAC#1もMACアドレスMAC#3も、ハッシュ値#1はいずれも「A」であるため、ハッシュ値#1を参照しただけでは、ハッシュ関数#1及び#2のいずれを選択すればよいかを識別できない。ハッシュ値#2についても同様である。
そのため、結局、双方のハッシュ関数#1及び#2からハッシュ値#1及び#2を求めた後、フォワーディングテーブルFWTを参照し、図1に例示したようにMACアドレスが一致するエントリを選択することになる。
結果として、最大でハッシュ関数の数だけフォワーディングテーブルFWTに対するアクセスが生じ、やはりフォワーディング性能が低下するおそれがある。すなわち、ハッシュ値の衝突確率を下げるためにハッシュ関数を増やすほど、フォワーディングテーブルFWTのアクセス回数が増えてしまい、フォワーディング性能の低下が大きくなるおそれがある。別言すると、ハッシュ値の衝突確率を下げても、フォワーディング性能の低下を抑制できないおそれがある。
本実施形態では、このようなフォワーディング性能の低下をできるだけ抑制できるようにする。例えば、複数のハッシュ関数を用意し、各ハッシュ関数に対して優先度(「優先順位」と称してもよい。)を割り当てておく。
優先度は、フォワーディングテーブルFWTへのMACアドレス登録時と、フォワーディングテーブルFWTに対する宛先参照(「宛先検索」と称してもよい。)時と、で異なっていてよい。
例示的に、2つのハッシュ関数を用いる場合、各ハッシュ関数に割り当てる優先度は、MACアドレス登録時と宛先参照時とで逆転してよい。なお、アドレス登録時の優先度は、「アドレス登録優先度」と称してよく、宛先参照時の優先度は、「宛先参照優先度」と称してよい。
3つ以上のハッシュ関数を用いる場合、例えば、「宛先参照優先度」をハッシュ関数番号の降順に設定し、「アドレス登録優先度」をハッシュ関数番号の昇順に設定してよい。あるいは、逆に、「アドレス登録参照優先度」をハッシュ関数番号の降順に設定し、「宛先参照優先度」をハッシュ関数番号の昇順に設定してよい。
また、ハッシュ管理テーブル(HMT)を用意し、どのハッシュ関数を使用しているかを示す情報(「フラグ情報」と称してもよい。)を、当該ハッシュ管理テーブルに登録してよい。なお、ハッシュ管理テーブルは、テーブル形式の情報(あるいはデータ)として表現されたハッシュ管理情報の一例である。
ハッシュ値の重複が生じると、ハッシュ管理テーブルにおいて複数のフラグ情報がイネーブルになる。例示的に、フラグ情報は、「1」又は「0」のビットであってよく、「1」でイネーブル、「0」でディゼーブルを表してよい。この場合、ハッシュ管理テーブルにおいて、どのハッシュ関数を使用しているかを、ビットパターン(「ビットマップ」と称してもよい。)によって表示できる。
フラグ情報のパターンを基に、使用しているハッシュ関数を識別し、その識別結果と宛先参照時の優先度とを基に、ハッシュ値を選択する。また、以後のMACアドレス登録時には、フラグ情報のパターンが変化しないように、MACアドレスの登録可否判定を行なってよい。
以下、図4を参照して、上述したような、複数のハッシュ関数と、ハッシュ管理テーブルと、を用いた、ハッシュ値の管理及びMACアドレスの登録処理の一例について説明する。
なお、以降の説明では、MACアドレスの処理について例示するが、IPアドレスやMPLSラベル、VLANタグ等の他の宛先情報に対しても以下に説明する処理は、適用可能である。「MPLS」は、「Multi-Protocol Label Switching」の略称であり、「VLAN」は、「ViFWTual Local Area Network」の略称である。
図4の例において、2つのハッシュ関数#1及び#2は、それぞれ、図3の例と同様に、CRC20であってよく、256Tビット分のMACアドレス空間を1M(メガ)分のハッシュ値に縮退可能である。
ここで、MACアドレス登録時はハッシュ関数#1を優先的に選択し、宛先参照時はハッシュ関数#2を優先的に選択するよう、優先度を割り当てておく。また、図5の右側に例示するようなハッシュ管理テーブルHMTを用意しておく。
ハッシュ管理テーブルHMTには、例えば、ハッシュ値毎に、どのハッシュ関数を使用しているかを示す情報(例示的に、フラグ情報)が登録される。
図4の例では、MACアドレスMAC#1に対して、ハッシュ関数#1からハッシュ値#1=Aが得られ、ハッシュ関数#2からハッシュ値#2=Cが得られる。
また、MACアドレスMAC#2に対して、ハッシュ関数#1からハッシュ値#1=Bが得られ、ハッシュ関数#2からハッシュ値#2=Cが得られる。
更に、MACアドレスMAC#3に対して、ハッシュ関数#1からハッシュ値#1=Aが得られ、ハッシュ関数#2からハッシュ値#2=Dが得られる。
図5の左側に例示するテーブルは、このようにしてMACアドレスMAC#1〜MAC#3のそれぞれについて各ハッシュ関数#1及び#2から得られたハッシュ値A〜Dを、テーブル形式のデータとして表現したものである。
当該テーブルを基に、図5の右側に例示するハッシュ管理テーブルHMTにおいて、ハッシュ値毎に、ハッシュ関数#1及び#2のいずれが選択、使用されているかが管理される。
例えば、MACアドレスMAC#1〜MAC#3がフォワーディングテーブルFWTに未登録の状態で、MACアドレスMAC#1〜MAC#3の3つのパケットが、当該順序でパケット伝送装置1に到着したものと仮定する。
当該仮定の下では、最先に到着したMACアドレスMAC#1について、まずハッシュ関数#1が優先的に選択される。図4の例において、当該ハッシュ関数#1から得られたハッシュ値#1は、「A」である。
そのため、図5のハッシュ管理テーブルHMTにおいて、ハッシュ関数#1から得られたハッシュ値#1=Aのフラグ情報として「1」が「宛先参照用情報」として設定、登録される。「宛先参照用情報」は、「宛先参照用テーブル」と称してもよい。
また、ハッシュ値#1=Aの選択に応じて、図4に例示するように、フォワーディングテーブルFWTのハッシュ値Aに対応するエントリAに、MACアドレスMAC#1及び宛先IF番号等の情報が登録される。
なお、図5のハッシュ管理テーブルHMTにおける「アドレス登録用情報」については後述する。「アドレス登録用情報」は、「アドレス登録用テーブル」と称してもよい。また、図4中に例示する「ハッシュ管理#1」は、図5のハッシュ管理テーブルHMTにおける「宛先参照用情報」の第1列のエントリに示される、ハッシュ関数#1(ハッシュ値#1)のフラグ情報を抜き出して示したものに相当する。
同様に、図4中に例示する「ハッシュ管理#2」は、図5のハッシュ管理テーブルHMTにおける「宛先参照用情報」の第2列のエントリに示される、ハッシュ関数#2(ハッシュ値#2)のフラグ情報を抜き出して示したものに相当する。
次に到着したパケットのMACアドレスMAC#2についても、まずハッシュ関数#1が優先的に選択される。図4の例において、当該ハッシュ関数#1から得られたハッシュ値#1は、「B」である。
当該ハッシュ値#1=Bは、MACアドレスMAC#1のハッシュ値#1=Aとは重複しない。すなわち、図5のハッシュ管理テーブルHMTにおいて、ハッシュ値#1=Bのフラグ情報は「0」である。
そのため、MACアドレスMAC#2に対するハッシュ値#1=Bの選択が確定し、図5のハッシュ管理テーブルHMTにおいて、「宛先参照用情報」の、ハッシュ関数#1から得られたハッシュ値#1=Bのフラグ情報が「1」に設定される。
ハッシュ値#1=Bの選択に応じて、図4に例示するように、フォワーディングテーブルFWTのハッシュ値Bに対応するエントリBに、MACアドレスMAC#2及び宛先IF番号等の情報が登録される。
更に、次に到着したパケットのMACアドレスMAC#3についても、まずハッシュ関数#1が優先的に選択される。当該ハッシュ関数#1から得られたハッシュ値#1は「A」である。
ここで、当該ハッシュ値#1=Aは、ハッシュ管理テーブルHMTにおいてフラグ情報が既に「1」に設定されているため、重複発生と判定される。
そのため、MACアドレスMAC#3については、次優先度のハッシュ関数#2が選択候補になる。図4の例において、当該ハッシュ関数#2から得られたハッシュ値#2=Dである。
当該ハッシュ値#2=Dは、先着のMACアドレスMAC#1及びMAC#2のハッシュ値#1(A及びB)とは重複しない。すなわち、図5のハッシュ管理テーブルHMTにおいて、ハッシュ値#2=Dのフラグ情報は「0」である。
そのため、MACアドレスMAC#3に対するハッシュ値#2=Dの選択が確定し、図5のハッシュ管理テーブルHMTにおいて、「宛先参照用情報」の、ハッシュ関数#2から得られたハッシュ値#2=Dのフラグ情報が「1」に設定される。
ハッシュ値#2=Dの選択に応じて、図4に例示するように、フォワーディングテーブルFWTのハッシュ値Dに対応するエントリDに、MACアドレスMAC#2及び宛先IF番号等の情報が登録される。
以上のようにして、MACアドレスの登録時には、ハッシュ関数#1が優先的に使用されて、重複しない(未使用の)ハッシュ値#1が選択される。
選択済み(フラグ情報が1)のハッシュ値#1との重複が生じると、次優先度のハッシュ関数#2が選択されて、重複しない(未使用の)ハッシュ値#2が選択される。
そして、フォワーディングテーブルFWTの選択されたハッシュ値に対応するエントリに、MACアドレスや宛先IF番号等の情報が登録される。
次に、上述したようにMACアドレスがフォワーディングテーブルFWTに登録された後に、登録済みのMACアドレスを有する別のパケットが伝送装置1に到着し、当該パケットをフォワーディング処理する場合について説明する。
この場合、図5のハッシュ管理テーブルHMTにおける「宛先参照用情報」のビットパターンによって、ハッシュ関数#1及び#2のいずれを使用するかを識別できる。
例示的に、(ハッシュ値#1:ハッシュ値#2)のビットパターン=「10」でハッシュ関数#1を使用し、同ビットパターン=「01」又は「11」でハッシュ関数#2を使用することが判定(識別)される。なお、ビットパターン=「00」は、「未登録」を表す。
伝送装置1に、MACアドレスMAC#1が付与された別のパケットが到着すると、各ハッシュ関数#1及び#2からそれぞれ(ハッシュ値#1:ハッシュ値#2)=(A:C)が得られる。
当該ハッシュ値A及びCをキーに、図5のハッシュ管理テーブルHMTの「宛先参照用情報」を参照すると、(A:C)=「10」のビットパターンが得られる。
ビットパターン=「10」であるから、ハッシュ関数#1(ハッシュ値#1=A)が選択され、ハッシュ値#1=AをキーにフォワーディングテーブルFWTのエントリAが参照される。これにより、MACアドレスMAC#1のパケットの宛先IF番号等が識別される。
また、MACアドレスMAC#2のパケットが到着すると、各ハッシュ関数#1及び#2からそれぞれ(ハッシュ値#1:ハッシュ値#2)=(B:C)が得られる。
当該ハッシュ値B及びCをキーに、図5のハッシュ管理テーブルHMTの「宛先参照用情報」を参照すると、(B:C)=「10」のビットパターンが得られる。
ビットパターン=「10」であるから、ハッシュ関数#1(ハッシュ値#1=B)が選択され、ハッシュ値#1=BをキーにフォワーディングテーブルFWTのエントリBが参照される。これにより、MACアドレスMAC#2のパケットの宛先IF番号等が識別される。
更に、MACアドレスMAC#3のパケットが到着すると、各ハッシュ関数#1及び#2からそれぞれ(ハッシュ値#1:ハッシュ値#2)=(A:D)が得られる。
当該ハッシュ値A及びDをキーに、図5のハッシュ管理テーブルHMTの「宛先参照用情報」を参照すると、(A:D)=「11」のビットパターンが得られる。
ビットパターン=「11」であるから、ハッシュ関数#2(ハッシュ値#2=D)が選択され、ハッシュ値#2=DをキーにフォワーディングテーブルFWTのエントリDが参照される。これにより、MACアドレスMAC#3のパケットの宛先IF番号等が識別される。
このように、ハッシュ管理テーブルHMTを用いて、使用するハッシュ関数を識別、選択することで、ハッシュ値(例えば、A)の重複が生じても、フォワーディングテーブルFWTの参照回数を1回に抑えることができる。
ただし、上述したルールの下でハッシュ管理テーブルHMTに対する登録を行なうと、宛先参照時にハッシュ関数が誤選択される可能性がある。例えば、上述した例では、ビットパターンを基に使用するハッシュ関数を選んでいるため、その後のアドレス登録でビットパターンが変化してしまうと、正しくハッシュ関数を選べなくなる可能性がある。
例えば、MACアドレスMAC#4に対してハッシュ関数#1及び#2によって得られたハッシュ値#1及び#2が、それぞれ、ハッシュ値#1=A、ハッシュ値#2=Cとなったと仮定する。
この場合、ハッシュ管理テーブルHMTにおける「宛先参照用情報」のハッシュ値#1=Aは、フラグ情報が1であるため、選択済み(使用中)である。そのため、ハッシュ値#2=Cが選択候補になる。
しかし、ハッシュ管理テーブルHMTにおける「宛先参照用情報」に、ハッシュ値#2=Cのフラグ情報として「1」を設定、登録してしまうと、MACアドレスMAC#1及びMAC#4についてのビットマップがいずれも「11」となってしまう。
そのため、MACアドレスMAC#1に対してハッシュ値#1=Cが誤選択される可能性がある。ハッシュ値が誤選択されると、フォワーディングテーブルFWTの参照エントリにおいてMACアドレスが一致しないため、「未登録」と判定されてしまうおそれがある。
また、他の例として、別のMACアドレスMAC#5に対してハッシュ関数#1及び#2によって得られたハッシュ値#1及び#2が、それぞれ、ハッシュ値#1=C、ハッシュ値#2=Dであったと仮定する。
この場合、ハッシュ管理テーブルHMTにおける「宛先参照用情報」のハッシュ値#1=Cは、フラグ情報が「0」であり未使用を表すため、ハッシュ値#1=Cが選択候補になる。
しかし、ハッシュ値#2=Dは、MACアドレスMAC#3に対して使用中である。すなわち、ハッシュ管理テーブルHMTの「宛先参照用情報」において、ハッシュ値#2=Dのフラグ情報として「1」が登録済みである。
そのため、ハッシュ値#1=C及びハッシュ値#2=Dのフラグ情報として、それぞれ「1」を「宛先参照用情報」に登録してしまうと、MACアドレスMAC#5についてのビットマップが、MACアドレスMAC#3と同じ「11」となってしまう。
その結果、MACアドレスMAC#3に対してハッシュ値#2=Dを誤選択してしまう可能性があり、同様に、フォワーディングテーブルFWTの参照エントリにおいてMACアドレスが一致しないために、「未登録」と判定されてしまうおそれがある。
したがって、このようにハッシュ管理テーブルHMTにおいて、ハッシュ値#1及び#2のビットパターンが重複するMACアドレスについては、「重複」と判定して登録を抑止してよい。
「宛先参照用情報」への重複ビットパターンの登録を抑止するために、ハッシュ管理テーブルHMTには、図5の右側に例示するように、「宛先参照用情報」に加えて、「アドレス登録用情報」が保持されてよい。
「アドレス登録用情報」には、例示的に、フォワーディングテーブルFWTに登録された全てのMACアドレスについて、ハッシュ関数#1及び#2毎にハッシュ値#1及び#2に対応するエントリの登録有無を示す情報の一例であるフラグ情報が登録される。別言すると、当該フラグ情報は、ハッシュ値#1及び#2の使用(選択)の有無に関わらず、全てのMACアドレスについて登録されてよい。
また、選択されたハッシュ関数#1又は#2に対応するハッシュ値#1又は#2について、「使用中」(1)か「未使用」(0)かを示すフラグ情報(以下「使用フラグ」と称する。)が、「アドレス登録用情報」に登録される。
当該「アドレス登録用情報」を参照することで、「宛先参照用情報」への重複ビットパターンの登録を抑止することができ、ハッシュ値#1及び#2の正しい選択が可能になる。
例えば、図4の例において、MACアドレスMAC#4〜MAC#7をもつ4つのパケットがパケット伝送装置1に到着したと仮定する。
ここで、MACアドレスMAC#4に対してハッシュ値#1=A及びハッシュ値#2=Cが得られたとする。このとき、ハッシュ関数#1のハッシュ値#1=Aは、「アドレス登録用情報」においてフラグ情報として「1」が登録済みであるため、登録候補にならない(除外される)。
また、ハッシュ関数#2のハッシュ値#2=Cも、「アドレス登録用情報」においてフラグ情報として「1」が登録済みであるため、登録候補にならない。したがって、MACアドレスMAC#4についてのハッシュ値#1及び#2の「宛先参照用情報」への登録は「不可」と判定される。
なお、図5の例において、「宛先参照用情報」のハッシュ値Cについては、ハッシュ値#1及び#2のいずれについてもフラグ情報が「0」であるため「未使用」を示すから、登録「可」と判定してもよさそうである。
しかし、「宛先参照用情報」においてハッシュ値#2=Cのフラグ情報を「1」に設定、登録してしまうと、既述のように、MACアドレスMAC#1及び#2についてのハッシュ値#1及び#2のビットマップがそれぞれ「11」に変わってしまう。そのため、登録「不可」と判定される。
次に、MACアドレスMAC#5に対してハッシュ値#1=C及びハッシュ値#2=Dが得られたとする。ハッシュ関数#1から得られたハッシュ値#1=Cは、「アドレス登録用情報」のハッシュ値#1に対応するフラグ情報が「0」であり、使用フラグも「0」で未使用を示すから、登録候補になる。
一方、ハッシュ関数#2のハッシュ値#2=Dについては、「アドレス登録用情報」のハッシュ値#2に対応するフラグ情報として「1」が登録済みであるため、ハッシュ値#1=Cは、登録候補から除外される(取り下げられる)。
結果的に、MACアドレスMAC#5についてのハッシュ値#1及び#2の「宛先参照用情報」への登録は「不可」と判定される。
なお、MACアドレスMAC#5についても、「宛先参照用情報」のハッシュ値Cは「未使用」であるため、登録「可」と判定してもよさそうである。
しかし、MACアドレスMAC#4の場合と同様に、MACアドレスMAC#1及び#2についてのハッシュ値#1及び#2のビットマップがそれぞれ「11」に変わってしまうため、登録「不可」と判定される。
次に、MACアドレスMAC#6に対してハッシュ値#1=D及びハッシュ値#2Bが得られたとする。ハッシュ関数#1から得られたハッシュ値#1=Dは、「アドレス登録用情報」において、未登録(ハッシュ値#1のフラグ情報が「0」)であるが、使用フラグが「1」であり「使用中」を示すため、登録候補にならない。
また、ハッシュ関数#2から得られたハッシュ値#2=Bについても、「アドレス登録用情報」において、未登録(ハッシュ値#2のフラグ情報が「0」)であるが、使用フラグが「1」であり「使用中」を示すため、登録候補にならない。
したがって、MACアドレスMAC#6についてのハッシュ値#1及び#2の「宛先参照用情報」への登録は「不可」と判定される。
次に、MACアドレスMAC#7に対してハッシュ値#1=C及びハッシュ値#2=Aが得られたとする。ハッシュ関数#1から得られたハッシュ値#1=Cは、「アドレス登録用情報」において、未登録(ハッシュ値#1のフラグ情報が「0」)であり、かつ、使用フラグが「0」で「未使用」を示すので、登録候補になる。
一方、ハッシュ関数#2から得られたハッシュ値#2=Aは、「アドレス登録用情報」において、未登録(ハッシュ値#2のフラグ情報が「0」)であるが、使用フラグが「1」で「使用中」を示すので、登録候補にならない。
ここで、ハッシュ値#1=Cのフラグ情報として「1」が「宛先参照用情報」に登録されたとしても、MACアドレスMAC#1及び#2についてのハッシュ値#1及び#2のビットパターンは「10」のままで変更されない。したがって、ハッシュ値#1=Cは、「宛先参照用情報」への登録「可」と判定される。
以上のようにして、アドレス登録時には、アドレス登録優先度に従い、ハッシュ関数#1のハッシュ値#1について「アドレス登録用情報」を参照し、未登録かつ未使用であれば、当該ハッシュ値#1が登録候補となる。
そして、次優先度のハッシュ関数#2のハッシュ値#2について、「アドレス登録用情報」を参照して、使用されていないかを確認する。使用されていなければ、ハッシュ値#1及び#2の登録が確定する。
「アドレス登録用情報」を参照した結果、ハッシュ値#1が使用されていた場合や、登録候補のハッシュ値#1及び#2のいずれかのフラグ情報が「1」になっていた場合は、次優先度のハッシュ関数#2のハッシュ値#2について、登録可否の判定を行なう。
以上のように、未使用のハッシュ値の全てについて、アドレス登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数のハッシュ値は、登録不可と判定されて、登録候補から除外される。
また、使用されているハッシュ値について、アドレス登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数よりも高いアドレス選択優先度が割り当てられたハッシュ関数のハッシュ値は、登録不可と判定されて、登録候補から除外される。
以上の判定処理により、使用するハッシュ関数#1及び#2を正しく選択することができる。選択後は、ハッシュ管理テーブルHMTの内容が更新される。
宛先参照時には、ハッシュ値#1及び#2のビットパターンに基づく選択ルールに従って、ハッシュ値が選択される。例えば、宛先選択優先度に従い、ハッシュ関数#2のハッシュ値#2について、「宛先参照用情報」を参照して、フラグ情報が「1」に設定されていれば、当該ハッシュ値#2を選択する。
フラグ情報が「0」に設定されていれば、次優先度のハッシュ関数#1のハッシュ値#1についてフラグ情報を確認して、フラグ情報が「1」のハッシュ値#1が選択される。
選択されたハッシュ値を基に、フォワーディングテーブルFWTのエントリが参照、検索されて、MACアドレスに対応する宛先IF番号等が識別される。
以上のように、上述した例によれば、複数のハッシュ関数を用いてハッシュ値の重複確率を低減することができる。仮に、ハッシュ値の重複が低確率で生じても、ハッシュ管理テーブルHMT及びフォワーディングテーブルFWTのサイズ(別言すると、情報量)の増加を最小限に抑えつつ、フォワーディングテーブルFWTの参照回数の増加を抑制できる。したがって、伝送装置1のフォワーディング性能低下を抑制できる。
(エントリ削除判定)
次に、図6を参照して、登録済みMACアドレスの削除に応じたハッシュ管理テーブルHMTのエントリ削除(更新)について説明する。
図6に例示するように、ハッシュ管理テーブルHMTのハッシュ値毎に、エントリ管理カウンタ(以下「エントリカウンタ」と略称することがある。)EMCが設けられてよい。エントリ管理カウンタEMCは、例示的に、MACアドレスの登録及び削除に応じて、1ずつインクリメント(+1)及びデクリメント(−1)される。
図6の例では、3つのMACアドレスMAC#1〜MAC#3がフォワーディングテーブルFWTに登録された結果、選択候補となったハッシュ値#1及び#2(A〜D)のそれぞれについてエントリカウンタEMCのカウント値がインクリメント(+1)されている。なお、エントリカウンタEMCの初期値は、0である。
例えば、ハッシュ値#1=Aは、MACアドレスMAC#1及びMAC#3のそれぞれに対して合計2回選択候補となったので、エントリカウンタEMCのハッシュ値Aに対応するカウント値は「2」となる。
また、ハッシュ値#1=Bは、MACアドレスMAC#2に対して1回選択候補となったので、エントリカウンタEMCのハッシュ値Bに対応するカウント値は「1」となる。
同様に、ハッシュ値#2=Dは、MACアドレスMAC#3に対して1回選択候補となったので、エントリカウンタEMCのハッシュ値Dに対応するカウント値は「1」となる。
更に、ハッシュ値#2=Cは、MACアドレスMAC#1及びMAC#2のそれぞれに対して合計2回選択候補となったので、エントリカウンタEMCのハッシュ値Cに対応するカウント値は「2」となる。
そして、図7の左側に例示するように、MACアドレスMAC#3のエントリ(ハッシュ値#1=A及びハッシュ値#2=D)が削除されたと仮定する。
この場合、図7の右側に例示するように、MACアドレスMAC#3に対するハッシュ値A及びDのそれぞれに対応するエントリカウンタEMCのカウントがデクリメント(−1)される。
デクリメントの結果、ハッシュ値Dに対応するカウント値が「0」になるので、ハッシュ管理テーブルHMTのハッシュ値Dに対応するエントリが初期化(例えば、オール0)される。
別言すると、エントリ削除されるMACアドレスが選択しているハッシュ関数に対応する、「宛先参照用情報」及び「アドレス登録用情報」のフラグ情報(使用フラグを含む。)がディゼーブルされる。
その後、図8の左側に例示するように、MACアドレスMAC#1のエントリ(ハッシュ値#1=A及びハッシュ値#2=C)が削除されたと仮定する。この場合、図8の右側に例示するように、MACアドレスMAC#1に対するハッシュ値A及びCのそれぞれに対応するエントリカウンタEMCのカウントがデクリメント(−1)される。
デクリメントの結果、ハッシュ値Aに対応するカウント値が「0」になるので、ハッシュ管理テーブルHMTのハッシュ値Aに対応するエントリが初期化(例えば、オール0)される。
このようにして、登録済みMACアドレスの削除に応じて、ハッシュ管理テーブルHMTの該当エントリを正しくディゼーブルすることができる。
なお、エントリカウンタEMCは、複数のハッシュ関数に個別に用意してもよいし、複数のハッシュ関数に共用であってもよい。個別に用意するほど無駄なフラグ情報がイネーブルされることを防げる。また、1テーブルあたりの参照回数を削減できる。ただし、ハッシュ関数が増えるほどエントリカウンタEMCの数も増える。
また、エントリカウンタEMCのカウント値の最大値は、ハッシュ関数によるMACアドレス空間を縮退したハッシュ値のとり得る値の数(「ハッシュ縮退数」と称してよい。)に相当するが、全てが偏る確率は非常に低い。
そこで、カウント値の最大値は、ハッシュ縮退数よりも小さい値に設定してよい。この場合、最大値を超えた場合には、「重複」が生じたと判定してよい。これにより、エントリカウンタEMCの数を削減することができる。
図17(A)及び図17(B)を参照して、上述した実施形態による効果の一例を説明する。図17(A)は、ハッシュ関数によってMACアドレス空間が1Mエントリ分に縮退されると仮定して、フォワーディングテーブルFWTのエントリ数が1Mであることを例示している。
図17(A)のフォワーディングテーブルFWTの1エントリには、例示的に、MACアドレス(16バイト)、宛先IF番号等の参照情報(10バイト)、及び、ポインタ情報(20ビット)が含まれる。
したがって、図17(A)に例示するフォワーディングテーブルFWTの1エントリあたりの情報量は、18.5バイトであり、フォワーディングテーブルFWTのサイズは、合計で1Mエントリ×18.5バイト=18.5Mバイトである。
一方、図17(B)には、本実施形態の伝送装置1において、図17(A)のフォワーディングテーブルFWTに加えて、既述のハッシュ管理テーブルHMT及びエントリカウンタEMCが追加になることを例示している。
図17(B)に示すハッシュ管理テーブルHMTは、例示的に、1エントリあたりの、「宛先参照用情報」、「アドレス登録用情報」、「使用フラグ」として、それぞれ、1ビットの情報量を有する。また、図17(B)に示すエントリカウンタEMCは、例示的に、1エントリあたり4ビットの情報量を有する。
したがって、ハッシュ管理テーブルHMT及びエントリカウンタEMCの1エントリあたりの情報量は、例示的に、7ビットである。伝送装置1において用いるハッシュ関数の数が8であると仮定すると、8つのハッシュ関数から得られる8つのハッシュ値のそれぞれについてハッシュ管理テーブルHMT及びエントリカウンタEMCが用意される。
したがって、ハッシュ管理テーブルHMT及びエントリカウンタEMCの情報量は、8つのハッシュ関数それぞれによってMACアドレス空間がそれぞれ1Mエントリ分に縮退されると仮定して、7ビット×8×1M=56Mビット=7Mバイトである。
ここで、図17(B)に例示するハッシュ管理テーブルHMT及びエントリカウンタEMCを用いずに、フォワーディングテーブルFWTを参照(宛先参照)する場合、8つのハッシュ関数のハッシュ値が重複しなければ、宛先参照回数は最大8回である。
これに対し、図17(B)に例示するハッシュ管理テーブルHMT及びエントリカウンタEMCを用いれば、8つのハッシュ関数のハッシュ値が重複しなければ、宛先参照回数は最大1回で済む。つまり、宛先参照回数を1/8に減らすことができる。また、このときの、ハッシュ管理テーブルHMT及びエントリカウンタEMCの追加によるテーブルサイズの増加は、7Mバイト分の約30%である。
このように、テーブルサイズの増加を最小限に抑制しつつ、フォワーディングテーブルFWTに対する宛先参照(アクセス)回数を大幅に削減することができる。
(ハッシュ値重複時の処理例)
次に、図9〜図11を参照して、ハッシュ値の重複が生じた場合の処理の一例について説明する。図9は、ハッシュ値重複時の第1の処理例を示し、図10は、ハッシュ重複時の第2の処理例を示し、図11は、ハッシュ重複時の第3の処理例を示す。
低確率ではあるものの、ハッシュ値の重複が発生した場合、図2に例示したようにフォワーディングテーブルFWTにポインタ情報を登録することにより、フォワーディングテーブルFWTにおいて正しいエントリを参照できる。
この場合、ポインタ情報を辿ってフォワーディングテーブルFWTを参照する回数が増えるため、フォワーディング性能の低下が生じ得るが、重複確率が低く抑えられているので、低下の度合いは非常に小さいと考えてよい。
(第1の処理例)
図9(A)及び図9(C)に例示するように、MACアドレス#MAC#1〜#MAC#3についてのハッシュ値#1及び#2が登録済みであると仮定する。ここで、MACアドレスMAC#4について、MACアドレスMAC#1のハッシュ値#1及び#2とそれぞれ重複するハッシュ値#1=A及びハッシュ値#2=Cが得られたとする。
この場合、図9(B)に例示するように、フォワーディングテーブルFWTの未登録エントリZに、MACアドレスMAC#4及び宛先IF番号等の情報を登録し、当該エントリZを示すポインタ情報Zを、重複したハッシュ値#1=Aに対応するエントリAに登録する。
図9(D)は、MACアドレスMAC#4の登録に応じて、図9(C)に例示するハッシュ管理テーブルHMT及びエントリカウンタEMCが更新された様子を例示している。
その後、MACアドレスMAC#4のパケットが到着すると、フォワーディングテーブルFWTのエントリAが参照され、当該エントリAのMACアドレスMAC#1と異なるため、ポインタ情報Zが示すエントリZが参照される。これにより、MACアドレスMAC#4のパケットの宛先IF番号等が識別される。
(第2の処理例)
また、図10(A)及び図10(C)に例示するように、MACアドレス#MAC#1〜#MAC#3についてのハッシュ値#1及び#2が登録済みであると仮定する。ここで、MACアドレスMAC#5についてハッシュ値#1=C及びハッシュ値#2=Dが得られたとする。
この場合、ハッシュ値#2=Dは、登録済みのMACアドレスMAC#3のハッシュ値#2=Dと重複する。そこで、図10(B)に例示するように、フォワーディングテーブルFWTの未登録エントリZに、MACアドレスMAC#5及び宛先IF番号等の情報を登録する。併せて、当該エントリZを示すポインタ情報Zを、重複したハッシュ値Dに対応するエントリDに登録する。
図10(D)は、MACアドレスMAC#5の登録に応じて、図10(C)に例示するハッシュ管理テーブルHMT及びエントリカウンタEMCが更新された様子を例示している。
その後、MACアドレスMAC#5のパケットが到着すると、フォワーディングテーブルFWTのエントリDが参照され、当該エントリDのMACアドレスMAC#3と異なるため、ポインタ情報Zが示すエントリZが参照される。これにより、MACアドレスMAC#5のパケットの宛先IF番号等が識別される。
以上のようにして、ハッシュ値#1及び#2に重複が生じた場合は、フォワーディングテーブルFWTにおいて、重複の生じたハッシュ値に対応するエントリからポインタ情報によって、正しいエントリを参照することができるようになる。
なお、フォワーディングテーブルFWTにおいて、ポインタ情報を登録するエントリは、一意にどのハッシュ関数を使用するかを予め決めておき、そのハッシュ関数のハッシュ値に対応するエントリに設定してもよい。
(第3の処理例)
あるいは、更に別のハッシュ関数を用いて、どのハッシュ関数のハッシュ値に対応するエントリにポインタ情報を登録するかを決めるようにしてもよい。図11(A)〜図11(D)に、その一例を示す。
図11(A)及び図11(C)に例示するように、MACアドレス#MAC#1〜#MAC#3についてのハッシュ値#1及び#2が登録済みであると仮定する。ここで、MACアドレスMAC#6についてハッシュ値#1=D及びハッシュ値#2=Bが得られたとする。
ここでは、非限定的な一例として、MACアドレスMAC#6の最下位ビットによってハッシュ関数を選択する。例えば、最下位ビットが「0」でハッシュ関数#1を選択し、「1」でハッシュ関数#2を選ぶものと仮定する。
この場合、MACアドレスMAC#6が「5(10進)」=「101(2進)」であれば、最下位ビットが「1」であるので、ハッシュ関数#2が選ばれる。
そして、図11(B)に例示するように、選択したハッシュ関数#2のハッシュ値#2に対応するエントリ(例えば、B)に、MACアドレスMAC#6のエントリZを示すポインタ情報Zが登録される。
なお、図11(D)は、MACアドレスMAC#6の登録に応じて、図11(C)に例示するハッシュ管理テーブルHMT及びエントリカウンタEMCが更新された様子を例示している。
その後、MACアドレスMAC#6のパケットが到着すると、フォワーディングテーブルFWTのエントリBが参照され、当該エントリBのMACアドレスMAC#2と異なるため、ポインタ情報Zが示すエントリZが参照される。これにより、MACアドレスMAC#6のパケットの宛先IF番号等が識別される。
図9〜図11に例示した処理例によれば、低確率でハッシュ値に重複が発生したとしても、フォワーディングテーブルFWTの、MACアドレスに対応する該当エントリを正しく参照できるので、フォワーディング性能の低下を抑制できる。
(ハッシュ関数の多段化)
次に、図12を参照して、ハッシュ関数を多段化(例示的に、2段)して、フォワーディングテーブルFWTのサイズ(別言すると、情報量)を増加させずに、ハッシュ値の重複を処理する例について説明する。
図12において、「第1段のハッシュ値」は、既述の複数(例えば、2つ)のハッシュ関数によって得られたハッシュ値を表す。当該ハッシュ関数は、「第1段のハッシュ関数」と称してよい。
「第2段のハッシュ関数」は、例示的に、「第1段のハッシュ値」に重複が生じたときの各ハッシュ値を識別するために用いられる。「第2段のハッシュ関数」は、図12に例示するように、「第1段のハッシュ値」毎に設定されてよい。
図12の例では、「第1段のハッシュ値」の数が1M(メガ)である場合に、1Mエントリ分のハッシュ関数F(x)〜F1M(x)が、「第2段のハッシュ関数」の一例として設定可能である。なお、「第2段のハッシュ関数」は、テーブル形式のデータである「ハッシュテーブル(HT)」として設定されてよい。
ハッシュテーブルHTには、重複しない「第2段のハッシュ値」の得られる「第2段のハッシュ関数」が、登録、設定されてよい。重複しない「第2段のハッシュ値」が得られる「第2段のハッシュ関数」は、例えば、ハッシュ関数検索部HFSが、予め用意されている「第2段のハッシュ関数」群を検索することで識別、選択されてよい。
「第2段のハッシュ値」は、例示的に、「第2段のハッシュ値」毎にフォワーディングテーブルFWTへのポインタ情報が登録されたポインタテーブルPTを、参照、検索するキーに用いられる。「第2段のハッシュ値」は、図12の例では、8種類のハッシュ値#1〜#8をとり得る。
ポインタテーブルPTには、例示的に、ハッシュ値#1〜#8毎に、1M分の「第1段のハッシュ値」にそれぞれ対応した1Mエントリ分のポインタ情報が設定可能である。
「第1段のハッシュ値」及び「第2段のハッシュ値」のペアをキーにしてポインタテーブルPTを参照することで、フォワーディングテーブルFWTの、「第1段のハッシュ値」が得られたMACアドレスに応じた該当エントリを参照、識別することができる。
「第2段のハッシュ値」を追加的に用いることで、「第1段のハッシュ値」が重複しても、フォワーディングテーブルFWTにおいて該当エントリの参照、識別が可能になる。
このように、ハッシュ関数を多段化することで、フォワーディングテーブルFWTのサイズを増やさずにハッシュ空間を拡張でき、フォワーディングテーブルFWTに対する適切な宛先参照を実現できる。
図12の例では、8種類の「第2段のハッシュ値」がポインタテーブルPTに登録されているので、「第1段のハッシュ値」の重複数が8以内であれば、フォワーディングテーブルFWTを1回参照すれば、宛先IF番号等の転送先情報を識別できる。
したがって、フォワーディングテーブルFWTを増やさずに、フォワーディングテーブルFWTのアクセス回数増加に起因するフォワーディング性能の低下を抑制できる。なお、図12の例では、「第1段のハッシュ値」のエントリ数(1M)と、フォワーディングテーブルFWTのエントリ数と、が一致しているが、互いに異なっていてもよい。
(第2段のハッシュ関数のマルチ化)
上述した図12の例では、「第1段のハッシュ値」が重複したMACアドレスに対して、「第2段のハッシュ値」が重複しないような「第2段のハッシュ関数」が検索される。ここで、「第1段のハッシュ値」の重複数が多くなるほど、「第2段のハッシュ関数」の検索に時間がかかるか、あるいは検索が困難になるおそれがある。
そこで、図13に例示するように、ハッシュテーブルHTに、複数の「第2段のハッシュ関数」を登録、設定することで、「第2段のハッシュ値」が重複しない「第2段のハッシュ関数」の検索を容易にして検索時間の短縮化を図ることができる。
例えば、「第1段のハッシュ値」の最大重複数が8の場合を想定する。この場合、例示的に、3種類の「第2段のハッシュ関数Fa,Fb及びFc」を用いてよい。3種類の「第2段のハッシュ関数Fa,Fb及びFc」は、それぞれ、1M分の「第1段のハッシュ値」毎に設定されてよい。
図13の例では、「第1段のハッシュ値」の数が1Mであるとして、1つ目の「第2段のハッシュ関数Fa」の一例として1Mエントリ分の「ハッシュ関数Fa1(x)〜Fa1M(x)」がハッシュテーブルHTに設定可能である。
また、2つ目の「第2段のハッシュ関数Fb」の一例として1Mエントリ分の「ハッシュ関数b1(x)〜Fb1M(x)」がハッシュテーブルHMに設定可能である。更に、3つ目の「第2段のハッシュ関数Fc」の一例として1Mエントリ分の「ハッシュ関数c1(x)〜Fc1M(x)」がハッシュテーブルHMに設定可能である。
ここで、ハッシュ関数Faは、例示的に、重複した最大8個の「第1段のハッシュ値」を、最大4つのハッシュ値#1〜#4の第1のグループ#1と、最大4つのハッシュ値#5〜#8の第2のグループ#2と、に振り分けるために用いられてよい。
ハッシュ関数Fbは、ハッシュ関数Faによって第1のグループ#1に振り分けられた「第1段のハッシュ値」をハッシュ値#1−#4のいずれかに振り分けるために用いられてよい。
ハッシュ関数Fcは、ハッシュ関数Faによって第2のグループ#2に振り分けられた「第1段のハッシュ値」をハッシュ値#5−#8のいずれかに振り分けるために用いられてよい。
このようなハッシュ関数Fa〜Fcを用いた「第1段のハッシュ値」の振り分けによって、ハッシュ関数検索部HFSは、最大4つに振り分け可能な「第2段のハッシュ関数」を検索すればよい。
したがって、「第1段のハッシュ値」の最大分散数=8を4に削減でき、「第2段のハッシュ値」が重複しない「第2段のハッシュ関数」の検索が容易になり、検索時間の短縮化を図ることができる。
なお、図13において、ポインタテーブルPTでは、第1及び第2のグループ#1及び#2の別に、「第2段のハッシュ値」と、フォワーディングテーブルFWTへのポインタ情報と、が管理される。
ポインタテーブルPTの登録内容やサイズ、当該ポインタテーブルPTに登録されたポインタ情報によるフォワーディングテーブルFWTの参照については、図12の例と同様であってよい。
(ハッシュ関数更新)
次に、図14を参照して、「第1段のハッシュ値」の重複数が最大値(例えば、8)に近づいた場合のハッシュ関数の更新処理の一例について説明する。
「第1段のハッシュ値」の重複数が最大値に近づいた場合は、「第1段のハッシュ関数」を、より重複が生じにくい(別言すると、より偏りの少ない)ハッシュ値が得られるハッシュ関数に更新したい。
「第1段のハッシュ関数」を、パケット伝送装置1が通信中であっても通信動作に影響せずに更新できるようにするには、更新前後の「第1段のハッシュ関数」に対応してポインタテーブルPTを2面化することが考えられる。しかし、ポインタテーブルPTを記憶するメモリ等のハードウェア規模が増大する。
ここで、図14に例示するポインタテーブルPTには8Mエントリ分の空間があり、7/8以上の領域は未使用(空き)である。そこで、この空き領域を利用して、ハッシュ関数を更新する。
まず、図14において、ハッシュテーブルHTには、更新前後の「第1段のハッシュ関数」から得られた「第1段のハッシュ値」に対応して、「第2段のハッシュ関数」と、管理フラグと、を登録、設定可能である。なお、図14の例では、更新前の古い「第1段のハッシュ関数」を「Fh0(x)」、更新後の新しい「第1段のハッシュ関数」を「Fh1(x)」としてそれぞれ表現している。
「第2段のハッシュ関数」としては、更新前後の「第1段のハッシュ関数」から得られる新旧2種類の「第1段のハッシュ値」(例示的に、1M×2)のそれぞれに対応して新旧2種類のハッシュ関数が設定可能である。
図14の例では、更新前の「第1段のハッシュ値」に対応する「第2段の旧ハッシュ関数」(以下「旧関数」と略称することがある。)の一例として、最大1Mエントリ分の旧関数Fo1(x)〜Fo1(x)がハッシュテーブルHTに設定可能である。更新後の「第1段のハッシュ値」に対応する「第2段の新ハッシュ関数」(以下「新関数」と略称することがある。)についても同様である。
「管理フラグ」は、関数の更新後を表す「新」、同更新前を表す「旧」、空き状態であることを示す「空」等のフラグ情報であってよい。「管理フラグ」は、例示的に、「第2段のハッシュ値」毎に設定可能である。「管理フラグ」を参照することで、新旧いずれのハッシュ関数が選択されているかを識別可能である。
以下、関数更新時のハッシュテーブルHT及びポインタテーブルPTへの登録例について説明する。
まず、ハッシュ関数検索部HFSは、現登録済みのMACアドレスに対して「第1段のハッシュ値」をより少ない重複数で振り分け可能な、新しい1又は複数の「第1段のハッシュ関数Fh1(x)」を検索しておく。
そして、ハッシュ関数検索部HFSは、新しい「第1段のハッシュ関数Fh1(x)」から得られたハッシュ値に対応する、ポインタテーブルPTのポインタ領域に空き領域があるか否かをチェックする。
空き領域があれば、ハッシュ関数検索部HFSは、当該空き領域に割り当て可能な「第2段のハッシュ関数」を検索し、検索により得られた「第2段のハッシュ関数」をハッシュテーブルHTに登録、設定する。図14の例では、「第2段のハッシュ関数Fn1(x)」がハッシュテーブルHTに設定される。
そして、ハッシュ関数検索部HFSは、ハッシュテーブルHTにおいて、設定した新しい「第2段のハッシュ関数Fn1(x)」の新ハッシュ値に対応する「管理フラグ」を「新」に更新する。併せて、ハッシュ関数検索部HFSは、旧ハッシュ値に対応する「管理フラグ」を「空」に更新する。
また、ハッシュ関数検索部HFSは、ポインタテーブルPTにおいて、新ハッシュ値に対応するポインタ情報を登録、設定する。旧ハッシュ値に対応するポインタ情報は、ポインタテーブルPTにおいて削除されてよい。
以上の処理が、新しい「第1段のハッシュ関数」の新ハッシュ値のそれぞれについて完了するまで繰り返される。これにより、新しい「第1段のハッシュ関数」の新ハッシュ値に対し、新ポインタがポインタテーブルPTの空き領域に収まる分だけ登録される。
なお、ハッシュテーブルHT及びポインタテーブルPTにおいて空き領域が足りないため、新ハッシュ値に対する割り当てが部分的にしか行なえない場合は、いったん第1段及び第2段のハッシュ関数の全てを旧関数に戻してよい。旧関数に戻した上で、再度、「第1段のハッシュ関数」を選び直してよい。
上述した図14の例によれば、ポインタテーブルPTをマルチ化せずに、また、伝送装置1の通信動作に影響を与えずに、ハッシュ関数を、よりハッシュ値の重複が少ないハッシュ関数に、適応的に更新することが可能になる。したがって、伝送装置1の通信中にフォワーディング性能が低下することを抑制できる。
(CAMの併用)
次に、図15を参照して、図4の変形例として、ハッシュ値の重複に対して連想メモリ(CAM:Content Addressable Memory)を併用してアドレス登録及び宛先参照を行なう方法について説明する。
図15の例では、図4にて説明したようにMACアドレスMAC#1〜MAC#3が登録された後に、MACアドレスMAC#4に対して、ハッシュ関数#1によってハッシュ値#1=Aが得られ、ハッシュ関数#2によってハッシュ値#2=Cが得られる。
しかし、これらのハッシュ値#1=A及びハッシュ値#2=Cは、登録済みのMACアドレスMAC#1についてのハッシュ値#1=A及びハッシュ値#2=Cと重複する。
ハッシュ値の重複が生じたMACアドレスMAC#4は、フォワーディングテーブルFWTの或るエントリ(図15の例では、エントリE)に登録されると共に、CAMに登録される。
CAMは、入力MACアドレスに対応するアドレス値を返す。当該アドレス値は、CAM用ポインタテーブルCPTに登録された、フォワーディングテーブルFWTのエントリへのポインタ情報と対応付けられる。ポインタ情報は、ハッシュ値の重複が生じたMACアドレスMAC#4のフォワーディングテーブルFWTにおけるエントリEを示す。
宛先参照時は、ハッシュ値判定とパラレル(あるいは、シーケンシャルでもよい。)に、CAM検索を実施する。図15の例では、MACアドレスMAC#4に対するハッシュ値判定の結果はハッシュ値Aとなるが、CAMにMACアドレスMAC#4が登録されている。
そのため、CAM用ポインタテーブルCPTに示されるポインタEが選択され、フォワーディングテーブルFWTの、MACアドレスMAC#4が登録されたエントリEが参照される。
このように、ハッシュ値が重複したMACアドレスを、別途、CAMに登録しておくことで、ハッシュ値に重複が生じても、フォワーディングテーブルFWTの参照回数の増加を抑制できるので、フォワーディング性能の低下を抑制することができる。
なお、CAMの容量は、低確率ではあるが発生の可能性があるハッシュ値の重複に対応できるだけの容量があれば足りるから、ハッシュ値の重複確率に応じた限られた容量であってよい。
(ハッシュ関数の簡易化)
既述のように複数のハッシュ関数を用いる場合、それぞれが複雑な演算のハッシュ関数であると演算負荷が増大するおそれがある。
例えば図16(A)に模式的に示すように、2つのハッシュ関数#1及び#2の演算によってそれぞれハッシュ値#1及び#2を求める。
そして更に、それぞれのハッシュ値#1及び#2からハッシュ関数#3〜#5及び#6〜#8によってハッシュ値#3〜#5及び#5〜#8を求める。
この場合に、ハッシュ関数#1〜#8それぞれの演算が複雑であると、演算負荷が増大し、ハッシュ演算に用いるハードウェアリソース量が増大しかねない。
そこで、1つ(あるいは、一部)のハッシュ値はハッシュ関数から求め、他のハッシュ値は、当該ハッシュ関数から求められたハッシュ値に、より簡易な演算で求めるようにしてよい。
例えば図16(B)に模式的に示すように、1つのハッシュ値#1はCRC20のハッシュ関数によって求め、他のハッシュ値#2〜#8は、それぞれ、簡易な演算(例示的に、ハッシュ値番号に応じた所定値の加算)によって求めてよい。
図16(B)の例では、ハッシュ値#1に「+1」,「+2」,…,「+7」した値を、それぞれ、ハッシュ値#2〜#8として用いる。
これにより、異なる複数のハッシュ値を簡易な演算によって求めることができ、演算に用いるハードウェアリソース量の増大を抑制できる。
なお、簡易な演算の方式(「演算ルール」と称してもよい。)は、異なるハッシュ値(例えば図16(B)のハッシュ値#2〜#8)の一部又は全部について共通でもよいし異なっていてもよい。
(伝送装置1の第1構成例)
図18に、上述した各種の処理を実現する伝送装置1の第1構成例を示す。第1構成例は、図4〜図11に例示した処理を実現する機能的な構成例に相当すると捉えてよい。
例示的に、図18に示す伝送装置1は、アドレス抽出部81、アドレス制御メッセージ抽出部82、及び、転送先情報付与部83を備える。また、伝送装置1は、例示的に、ハッシュ演算部84、ハッシュ管理テーブル(HMT)制御部85、フォワーディングテーブル(FWT)制御部86、及び、ハッシュ登録制御部87を備える。更に、伝送装置1は、既述のハッシュ管理テーブルHMTとフォワーディングテーブルFWTとを備える。
なお、ハッシュ管理テーブルHMTに、エントリカウンタEMCが含まれてよい。ハッシュ管理テーブルHMTは、複数のハッシュ関数毎に設けられてよい。また、上記の各部81〜87は、それぞれ、フォワーディング処理部80のエレメントであると捉えてよい。「フォワーディング処理部80」は、「フォワーディング制御部80」と称してもよい。
ハッシュ管理テーブルHMT(エントリカウンタEMC)、及び、フォワーディングテーブルFWTは、メモリMEMに記憶されてよい。メモリMEMは、記憶装置あるいは記憶媒体の一例である。
ハッシュ管理テーブルHMT(エントリカウンタEMC)、及び、フォワーディングテーブルFWTは、1つのメモリMEMの異なる記憶領域に記憶されてもよいし、異なる複数のメモリMEMの記憶領域に分散的に記憶されてもよい。
アドレス抽出部81は、受信パケットから、フォワーディングテーブルFWTの参照に用いるアドレス情報(例えば、MACアドレス)を抽出する。抽出されたアドレス情報は、ハッシュ演算部84に与えられる。アドレス抽出された受信パケットは、アドレス制御メッセージ抽出部82に入力される。
アドレス制御メッセージ抽出部82は、例示的に、アドレス抽出部81からの受信パケットが、アドレス制御メッセージであった場合に、当該アドレス制御メッセージの内容(アドレス制御情報)と称してもよい。)に応じた処理を行なう。
アドレス制御メッセージの一例としては、インバンドのアドレス登録要求メッセージやインバンドのアドレス解除要求メッセージ等が挙げられる。なお、アドレス制御メッセージは、伝送装置1の制御部13からアドレス制御メッセージ抽出部82にアウトバンドの制御メッセージとして与えられてもよい。また、アドレス制御メッセージは、出力(Egress)側のインバンド情報を基に、アドレス制御メッセージ抽出部82にて、自律的に生成されてもよい。
アドレス制御メッセージ抽出部82は、アドレス登録要求メッセージが受信されると、当該メッセージから、フォワーディングテーブルFWTへの登録対象のアドレス情報と、当該アドレス情報に対する転送先情報(宛先IF番号等)と、を抽出する。
一方、アドレス解除要求メッセージが受信されると、アドレス制御メッセージ抽出部82は、解除対象のアドレス情報と、当該アドレス情報に対する転送先情報と、を抽出する。
いずれのメッセージを受信した場合も、抽出された情報は、例示的に、ハッシュ登録制御部87に与えられる。
転送先情報付与部83は、フォワーディング対象の受信パケットに、FWT制御部86から与えられる転送先情報を付与する。転送先情報を付与されたパケットは、SWF12(図1参照)に出力される。
ハッシュ演算部84は、アドレス抽出部81にて抽出されたアドレス情報を、複数(例えば、8つ)のハッシュ関数によるハッシュ演算によって複数(例えば、8つ)のハッシュ値を求める。得られたハッシュ値は、HMT制御部85に与えられる。なお、ハッシュ演算部84は、既述のハッシュ関数検索部HFSに相当する、あるいは、ハッシュ関数検索部HFSとしての機能を具備している、と捉えてよい。
HMT制御部85は、ハッシュ管理テーブルHMTを参照して、複数のハッシュ値のいずれかを選択する。選択されたハッシュ値は、FWT制御部86に与えられる。
FWT制御部86は、HMT制御部85から与えられたハッシュ値を用いてフォワーディングテーブルFWTを参照し、宛先IF番号等の転送先情報を識別する。識別された転送先情報は、転送先情報付与部83に与えられる。
ハッシュ登録制御部87は、アドレス制御メッセージ抽出部82にてアドレス制御メッセージから抽出された情報を基に、例えば、ハッシュ演算部84、HMT制御部85及びFWT制御部86を制御する。
例示的に、ハッシュ登録制御部87は、アドレス登録要求メッセージから抽出されたアドレス情報及び転送先情報の受信に応じて、当該アドレス情報のハッシュ値の演算をハッシュ演算部84に要求する。
ハッシュ演算部84は、ハッシュ登録制御部87からの要求に応じて、アドレス情報に対する複数ハッシュ値を求め、求めた複数ハッシュ値をHMT制御部85に送信する。その際、ハッシュ演算部84は、ハッシュ演算完了の旨をハッシュ登録制御部87に応答してよい。
ハッシュ登録制御部87は、ハッシュ演算部84から応答を受信すると、HMT制御部85にハッシュ管理テーブル登録要求を与えて、ハッシュ管理テーブルHMTを更新させる。また、当該更新に応じてフォワーディングテーブルFWTも更新されるよう、FWT制御部86を制御する。なお、ハッシュ演算部84及びHMT制御部85に対する要求は、並行して行なってもよい。
HMT制御部85及びハッシュ登録制御部87は、「ハッシュ制御部」の一例を成すと捉えてよい。「ハッシュ制御部」は、ハッシュ関数毎にハッシュ値がフォワーディングテーブルFWTの参照に使用されているか否かを示したハッシュ管理テーブルHMTに基づいて、前記参照に用いられるハッシュ値の選択を制御する。
FWT制御部86は、ハッシュ登録制御部87からの制御に応じて、登録要求のあったアドレス情報と、当該アドレス情報に対応する転送先情報と、をフォワーディングテーブルFWTに登録して、フォワーディングテーブルFWTを更新する。FWT制御部86は、フォワーディング制御部の一例である。
なお、ハッシュ登録制御部87は、アドレス解除要求メッセージから抽出されたアドレス情報及び転送先情報の受信に応じて、各テーブルHMT及びFWTにおいて解除要求のあったエントリを更新(例えば、初期化)するよう、各制御部85及び86を制御する。
図19〜図24に、図18に例示した構成を有する伝送装置1(フォワーディング処理部80)の動作例を示す。図19は、宛先参照時のフォワーディング処理部80の動作例を示すフローチャートである。図20〜図23は、アドレス登録時のフォワーディング処理部80の動作例を示すフローチャートである。図24は、アドレス登録解除時のフォワーディング処理部80の動作例を示すフローチャートである。
(宛先参照時の動作例)
宛先参照時には、フォワーディング処理部80は、図19に例示するフローチャートに従って動作する。当該動作によって、図4及び図5を参照して説明した宛先参照処理が可能になる。
例えば、フォワーディング処理部80は、ハッシュ演算部84によって、アドレス抽出部81にて抽出されたアドレス情報に対して、8つのハッシュ関数#1〜#8を用いてハッシュ値#1〜#8を求める(処理P11)。
そして、HMT制御部85が、各ハッシュ関数#1〜#8(別言すると、ハッシュ値#1〜#8)に対応したハッシュ管理テーブルHMTの「宛先参照用情報」をそれぞれチェックする。
例えば、HMT制御部85は、「宛先参照用情報」チェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値#1〜#8の数に対応して「n=8」に設定する(処理P12)。
そして、HMT制御部85は、まず、ハッシュ値#8についての「宛先参照用情報」のフラグ情報(ビット)が「1」であるか否かをチェックする(処理P13)。フラグ情報が「1」になっている「宛先参照用情報」があれば(処理P13でYESの場合)、HMT制御部85は、ハッシュ値#nを選択してFWT制御部86に通知する。FWT制御部86は、通知された選択ハッシュ値#nに対応するフォワーディングテーブルFWTのエントリを参照する(処理P14)。
FWT制御部86は、参照したエントリに登録されているアドレス情報と、アドレス抽出部81にて抽出されたアドレス情報と、が一致するか否かを判定する(処理P15)。なお、フォワーディングテーブルFWTに登録済みのアドレス情報を「登録アドレス」と称し、アドレス抽出部81にて抽出されたアドレス情報を「抽出アドレス」と称することがある。
登録アドレスと抽出アドレスとが一致しなければ(処理P15でNOの場合)、FWT制御部86は、参照エントリのポインタ情報が「Null」であるか否かをチェックする(処理P16)。
参照したエントリのポインタ情報が「Null」でなければ(処理P16でNOの場合)、FWT制御部86は、ポインタ情報に対応するフォワーディングテーブルFWTのエントリを参照して(処理P17)、アドレス情報の一致/不一致を判定する(処理P15)。
このようにして、FWT制御部86は、ポインタ情報を辿って、抽出アドレスに一致する登録アドレスが登録された、フォワーディングテーブルFWTのエントリを検索する(処理P15及び処理P16のNOルート)。
抽出アドレスに一致する登録アドレスが登録された、フォワーディングテーブルFWTのエントリが見つかると(処理P15でYESの場合)、FWT制御部86は、当該参照エントリの転送先情報を参照する(処理P18)。
当該転送先情報が、転送先情報付与部83に与えられて、転送先情報付与部83からSWF12へ出力されるパケットに転送先情報が付与される。
なお、処理P16において、ポインタ情報が「Null」であれば(処理P16でYESの場合)、FWT制御部86は、当該参照エントリがハッシュ値#1に対応するエントリであるか否かをチェックする(処理P19)。
参照エントリがハッシュ値#1に対応するエントリであれば(処理P19でYESの場合)、FWT制御部86は、該当エントリがフォワーディングテーブルFWTにおいて見つからない(参照不可)と判定する。参照不可との判定結果は、伝送装置1の制御部13や外部装置へエラー情報やアラーム情報等として通知してよい。
参照エントリがハッシュ値#1に対応するエントリでなければ(処理P19でNOの場合)、FWT制御部86は、ハッシュ値#1に対応する、フォワーディングテーブルFWTのエントリを参照し(処理P20)、処理P15〜P19を実施する。
また、処理P13において、ハッシュ値#nに対応する「宛先参照用情報」のフラグ情報が「0」であれば(処理P13でNOの場合)、HMT制御部85は、デクリメントカウンタのカウント値をデクリメント(n=n−1)する(処理P21)。
HMT制御部85は、カウント値がn=0になるまで(処理P22でYESと判定されるまで)、残りのハッシュ値#7〜#1の「宛先参照用情報」のフラグ情報が「1」になっているか否かを降順でチェックする(処理P22及びP13のNOルート)。
なお、降順でチェックを行なうのは、ハッシュ関数#1〜#8の「宛先参照優先度」が、例示的に、降順に設定されているからである。したがって、ハッシュ関数#1〜#8の「宛先参照優先度」が昇順に設定されていれば、フラグ情報のチェックは、昇順に行なってよい。
フラグ情報が「1」になっているハッシュ値#nが有れば(処理P13でYESの場合)、HMT制御部85は、既述の処理P14〜P20を実施する。
デクリメントカウンタのカウント値がn=0になると(処理P22でYESの場合)、全てのハッシュ値#1〜#8についての「宛先参照用情報」のフラグ情報が「0」であることが確認される。
当該確認に応じて、HMT制御部85は、ハッシュ値#1を選択してFWT制御部86に通知する。FWT制御部86は、通知された選択ハッシュ値#1に対応するフォワーディングテーブルFWTのエントリを参照して(処理P20)、処理P15以降の処理を実施する。
(アドレス登録時の動作例)
次に、図20〜図23を参照して、アドレス登録時のフォワーディング処理部80の動作例を説明する。フォワーディング処理部80が、図20〜図23に例示するフローチャートに従って動作することで、例えば図4及び図5を参照して説明したアドレス登録処理が可能になる。
例えば、アドレス制御メッセージ抽出部82(図18参照)にて、或るアドレス情報のアドレス登録要求メッセージが受信されて、登録要求のあったアドレス情報及び転送先情報がハッシュ登録制御部87に与えられたとする。
この場合、図20に例示するように、ハッシュ登録制御部87は、ハッシュ演算部84に対して、登録要求のあったアドレス情報(以下「登録要求アドレス情報」と称することがある。)に対するハッシュ値の演算を要求する。
当該要求に応じて、ハッシュ演算部84は、登録要求アドレス情報に対する複数(例えば8つ)のハッシュ値#1〜#8を複数(例えば8つ)のハッシュ関数#1〜#8によって求める(処理P31)。得られたハッシュ値#1〜#8は、HMT制御部85へ送信される。
また、ハッシュ登録制御部87は、HMT制御部85にハッシュ管理テーブル登録要求を送信する。HMT制御部85は、当該要求に応じて、いずれかのエントリカウンタEMCのエントリが最大値に到達しているか否かをチェックする(処理P32)。
いずれかのエントリカウンタEMCのエントリが最大値に到達していれば(処理P32でYESの場合)、HMT制御部85は、図9〜図11に例示したような重複判定処理(P37)を実施する。なお、重複判定処理の一例については、図22により後述する。
最大値に到達したエントリがエントリカウンタEMCに無ければ(処理P32でNOの場合)、HMT制御部85は、ハッシュ関数#1〜#8のいずれかが登録可能か否か(登録条件を満足するか)をチェックする(処理P33〜P36)。
例えば、HMT制御部85は、インクリメントカウンタのカウント値nをn=1に設定し(処理P33)、ハッシュ関数#nが登録条件を満足するか否かをチェックする(処理P34)。
登録条件を満足しなければ(処理P34でNOの場合)、HMT制御部85は、インクリメントカウンタのカウント値nをインクリメント(n=n+1)し(処理P35)、n>8(ハッシュ関数の数)を満たすか否かをチェックする(処理P36)。
n>8を満たさなければ(処理P36でNOの場合)、別言すると、登録条件のチェックが未実施のハッシュ関数があれば、HMT制御部85は、処理P34へ戻る。
n>8を満たせば(処理P36でYESの場合)、HMT制御部85は、図22により後述する重複判定処理を実施する(処理P37)。
登録条件チェックの過程で、登録条件を満足するハッシュ関数#nが見つかれば(処理P34でYESの場合)、HMT制御部85は、当該ハッシュ関数#nをハッシュ選択候補Xに設定する(処理P38)。
そして、HMT制御部85は、インクリメントカウンタのカウント値nをインクリメント(n=n+1)し(処理P39)、n>8を満たすか否かをチェックする(処理P40)。
n>8を満たさなければ(処理P40でNOの場合)、HMT制御部85は、ハッシュ関数#nが未使用か否かをチェックする(処理P41)。ハッシュ関数#nが未使用であれば、HMT制御部85は、カウント値n>8が満たされるまで、カウント値nを1ずつインクリメントしながら、未使用のハッシュ関数#nの有無をチェックする。別言すると、未使用のハッシュ関数#nの有無が昇順でチェックされる。
なお、昇順でチェックを行なうのは、ハッシュ関数#1〜#8の「アドレス登録優先度」が、例示的に、昇順に設定されているからである。したがって、ハッシュ関数#1〜#8の「アドレス登録優先度」が降順に設定されていれば、当該チェックは降順に行なってよい。
ハッシュ関数#nが未使用でなければ(処理P41でNOの場合)、HMT制御部85は、処理P34以降の処理に戻り、当該ハッシュ関数#nが登録条件を満足するか否かをチェックする。
ハッシュ関数#nの使用/未使用のチェック過程(処理P40)で、カウント値n>8が満たされれば、HMT制御部85は、ハッシュ選択候補#Xのハッシュ関数#nを選択する(処理P42)。
そして、HMT制御部85は、選択したハッシュ関数#nにてハッシュ管理テーブルHMTを更新する(処理P43)。併せて、HMT制御部85は、FWT制御部86に選択したハッシュ関数#nを通知する。FWT制御部86は、通知されたハッシュ関数#nに応じて、フォワーディングテーブルFWTのエントリを設定する(処理P44)。
以上のようにして、登録要求のあったアドレス情報に対するハッシュ管理テーブルHMT及びフォワーディングテーブルFWTの登録が完了する。
次に、図21を参照して、上述したハッシュ関数#nの登録条件判定処理(P34)の具体例について説明する。
図21に例示するように、HMT制御部85は、ハッシュ管理テーブルHMTを参照して、ハッシュ関数#n及びハッシュ値#nの「アドレス登録用情報(ビット)」が「1」(登録済み)であるか否かをチェックする(処理P51)。
「アドレス登録用情報(ビット)」が「0」(未登録)であれば(処理P51でNOの場合)、HMT制御部85は、当該ハッシュ値#nに対応する「使用フラグ」が「1」(使用中)であるか否かを更にチェックする(処理P52)。
「使用フラグ」が「0」(未使用)であれば(処理P52でNOの場合)、HMT制御部85は、当該ハッシュ関数#n(ハッシュ値#n)がハッシュ管理テーブルHMTに登録可能であると判定する(処理P53)。すなわち、図20の処理P34において登録条件を満足する(YES)と判定される。
一方、「アドレス登録用情報(ビット)」が「1」であった場合(処理P51でYESの場合)、HMT制御部85は、ハッシュ値#nが登録不可能であると判定する(処理P54)。
また、「アドレス登録用情報(ビット)」が「0」でも「使用フラグ」が「1」であれば(処理P51でNOかつ処理P52でYESの場合)、HMT制御部85は、ハッシュ値#nがやはり登録不可能であると判定する(処理P54)。
すなわち、処理P51及びP52でYESと判定されたハッシュ値#nは、登録不可能と判定され、図20の処理P34でNOと判定される。なお、上述したチェック処理P51及びP52は、順番を入れ替えてもよいし、パラレルに実施してもよい。
(重複判定処理)
次に、図22を参照して、HMT制御部85による、図20に例示した重複判定処理(P37)の一例を説明する。HMT制御部85が、図22に例示するフローチャートに従って動作することで、図9〜図11を参照して説明した「ハッシュ値重複時の処理」が可能になる。
図22に例示するように、HMT制御部85は、エントリカウンタEMCを参照して、いずれかのエントリのカウント値が最大値に到達しているか否かをチェックする(処理P61)。
最大値に到達していれば(処理P61でYESの場合)、HMT制御部85は、各ハッシュ関数#1〜#8(別言すると、ハッシュ値#1〜#8)に対応したハッシュ管理テーブルHMTの「宛先参照用情報」をそれぞれチェックする(処理P62〜P65)。
例えば、HMT制御部85は、「宛先参照用情報」チェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値#1〜#8の数に対応して「n=8」に設定する(処理P62)。
そして、HMT制御部85は、まず、ハッシュ値#8についての「宛先参照用情報」のフラグ情報(ビット)が「1」であるか否かをチェックする(処理P63)。当該フラグ情報が「0」であれば(処理P63でNOの場合)、HMT制御部85は、デクリメントカウンタのカウント値をデクリメント(n=n−1)する(処理P64)。
HMT制御部85は、カウント値がn=0になるまで(処理P65でYESと判定されるまで)、残りのハッシュ値#7〜#1の「宛先参照用情報」のフラグ情報が「1」になっているか否かを降順でチェックする(処理P65及びP63のNOルート)。なお、ハッシュ関数#1〜#8の「宛先参照優先度」が昇順に設定されていれば、当該チェックも昇順で行なってよい。
フラグ情報が「1」になっている「宛先参照用情報」があれば(処理P63でYESの場合)、HMT制御部85は、ハッシュ値Y=#nを選択する(処理P67)。
そして、HMT制御部85は、エントリカウンタEMCの、選択ハッシュ値#nに対応するエントリを更新(例えば、インクリメント)する(処理P68)。併せて、HMT制御部85は、選択ハッシュ値#nをFWT制御部86に通知する。
FWT制御部86は、通知された選択ハッシュ値#nに対応するフォワーディングテーブルFWTのエントリを更新(例えば、ポインタ情報を登録)する(処理P69)。
一方、デクリメントカウンタのカウント値がn=0になると(処理P65でYESの場合)、いずれのハッシュ値#1〜#8も選択されなかったことになる。
この場合と、エントリカウンタEMCが最大値に到達していない場合(処理P61でNOの場合)と、において、HMT制御部85は、便宜的に、ハッシュ関数Y=#1のハッシュ値#1を選択する(処理P66)。
そして、HMT制御部85は、ハッシュ管理テーブルHMT(エントリカウンタEMC)は更新せずに、フォワーディングテーブルFWTのエントリを更新(例えば、ポインタ情報を登録)する(処理P69)。
(ハッシュ管理テーブル更新処理)
次に、図23を参照して、HMT制御部85によるハッシュ管理テーブルHMTの更新処理の一例について説明する。
図23に例示するように、HMT制御部85は、ハッシュ登録制御部87からの登録要求に応じて、ハッシュ管理テーブルHMTにおける、ハッシュ値#nに対応する「アドレス登録用情報」のフラグ情報(ビット)を「1」に設定する(処理P71)。
また、HMT制御部85は、フラグ情報を「1」に設定したハッシュ値#nに対応するエントリカウンタEMCのカウント値をインクリメント(+1)する(処理P72)。
そして、HMT制御部85は、ハッシュ値#nの重複の有無をチェックする(処理P73)。チェックの結果、重複が無ければ(処理P73でNOの場合)、HMT制御部85は、選択したハッシュ値#X(図20参照)に対応する「アドレス登録用情報」の「使用フラグ」を、「使用中」を示す「1」に設定する(処理P74)。
一方、重複が有れば(処理P73でYESの場合)、「使用フラグ」の設定は行なわずに(処理P74をバイパスして)、処理を終了する。
(アドレス登録解除処理例)
次に、図24を参照して、フォワーディング処理部80によるアドレス登録解除処理の一例を説明する。なお、「アドレス登録解除」は、「アドレス解放」と称してもよい。図24に例示するフローチャートに従ってフォワーディング処理部80が動作することで、図6〜図7を参照して説明した「エントリ削除判定」処理が可能になる。
アドレス解放処理は、例示的に、図18に示した各制御部85〜87の連携によって実施される。例えば、HMT制御部85は、ハッシュ登録制御部87からのハッシュ管理テーブル登録解除要求に応じて、ハッシュ演算部84に対し、登録解除要求のあったアドレス情報に対するハッシュ値#1〜#8のハッシュ演算を要求する。
当該要求に応じて、ハッシュ演算部84は、登録解除要求のあったアドレス情報(以下「解除アドレス」ともいう。)に対するハッシュ値#1〜#8をハッシュ関数#1〜#8によって求める(処理P81)。得られたハッシュ値#1〜#8は、HMT制御部85に与えられる。
HMT制御部85は、ハッシュ登録制御部87からの登録解除要求に応じて、FWT制御部86と連携して、ハッシュ値#1〜#8の登録解除の可否をチェックして、各ハッシュ管理テーブルHMT及びフォワーディングテーブルFWTの更新を行なう。
例えば、HMT制御部85は、エントリチェック用のデクリメントカウンタのカウント値をチェック対象のハッシュ値#1〜#8の数に対応して「n=8」に設定する(処理P82)。
そして、HMT制御部85は、まず、ハッシュ値#n(=#8)に対応するエントリカウンタEMCのカウントを1減算(−1)し(処理P83)、減算結果が「0」になったか否かをチェックする(処理P84)。
チェックの結果、減算結果が0であれば(処理P84でYESの場合)、HMT制御部85は、ハッシュ管理テーブルHMTの、ハッシュ値#nに対応する「アドレス登録用情報」を初期化(例えば、オール0にクリア)する(処理P85)。
その後、HMT制御部85は、ハッシュ値#nに対応するフォワーディングテーブルFWTのエントリを参照する(処理P86)。なお、エントリカウンタEMCのカウント値の減算結果が「0」でない場合(処理P84でNOの場合)、HMT制御部85は、初期化処理P85をバイパスして、処理P86に進む。
そして、HMT制御部85は、参照したエントリの登録アドレスと解除アドレスとが一致するか否かをチェックする(処理P87)。一致しなければ(処理P87でNOの場合)、HMT制御部85は、参照エントリのポインタ情報が「Null」であるか否かを更にチェックする(処理P88)。
ポインタ情報が「Null」であれば(処理P88でYESの場合)、解除アドレスに対応するフォワーディングテーブルFWTのエントリが見つからないため、HMT制御部85は、登録解除失敗と判定する(処理P89)。登録解除失敗の判定結果は、伝送装置1の制御部13や外部装置へエラー情報やアラーム情報等として通知してよい。
一方、参照エントリのポインタ情報が「Null」でなければ(処理P88でNOの場合)、HMT制御部85は、ポインタ情報が示すフォワーディングテーブルFWTのエントリを参照する(処理P90)。
そして、HMT制御部85は、解除アドレスに一致する登録アドレスが登録されたフォワーディングテーブルFWTのエントリが見つかるまで、参照エントリのポインタ情報を辿って解除対象エントリを検索する(処理P87及びP88のNOルート)。
解除アドレスに一致する登録アドレスが登録されたエントリが見つかれば(処理P87でYESの場合)、HMT制御部85は、参照エントリがフォワーディングテーブルFWTの先頭エントリであるか否かをチェックする(処理P91)。
参照エントリが先頭エントリでなければ(処理P91でNOの場合)、HMT制御部85は、例えば1つ前のエントリのポインタ情報を参照エントリのポインタ情報に更新する(処理P93)。これにより、ポインタ情報の示すエントリの消失を回避できる。
一方、参照エントリが先頭エントリであれば(処理P91でYESの場合)、HMT制御部85は、当該先頭エントリのポインタ情報が「Null」であるか否かをチェックする(処理P92)。
先頭エントリのポインタ情報が「Null」でなければ(処理P92でNOの場合)、HMT制御部85は、当該ポインタ情報が示すエントリの登録内容を先頭エントリにコピーする(処理P94)。これにより、ポインタ情報の示すエントリの消失を回避できる。
一方、先頭エントリのポインタ情報が「Null」であれば(処理P92でYESの場合)、HMT制御部85は、ハッシュ管理テーブルHMTの、ハッシュ値#nに対応する「宛先参照用情報」及び「使用フラグ」を初期化する(処理P95)。「初期化」は、例えば、0にクリアすることである。
その後、HMT制御部85は、エントリチェック用のデクリメントカウンタのカウント値を1つ減算(n=n−1)し(処理P96)、n=0が満たされるか否かをチェックする(処理P97)。
n=0が満たされなければ(処理P97でNOの場合)、n=0が満たされるまで(処理P97でYESと判定されるまで)、HMT制御部85は、処理P83以降の処理を繰り返す。n=0が満たされれば(処理P97でYESの場合)、HMT制御部85は、処理を終了してよい。
以上のようにして、ハッシュ値#nの登録解除の可否がチェックされて、登録解除可能なハッシュ値#nに対応する、ハッシュ管理テーブルHMT及びフォワーディングテーブルFWTのエントリが初期化される。また、エントリが初期化されても、ポインタ情報の示すエントリが消失しないようにポインタ情報やエントリの更新が行なわれる。したがって、適切な宛先参照を維持できる。
(伝送装置1の第2構成例)
次に、図25を参照して、伝送装置1の第2構成例について説明する。第2構成例は、例えば図12〜図14に例示した処理を実現する機能的な構成例に相当すると捉えてよい。図25において、図18に示した符号と同一符号を付した部分は、特に断らない限り、図18にて既述の部分と同一若しくは同様の部分であると捉えてよい。
図25に示す第2構成例の伝送装置1は、図18に例示した第1構成例に比して、ハッシュ演算部84に代えてハッシュ演算部84Aを備えると共に、重複制御部88を追加的に備える点が異なる。また、第2構成例の伝送装置1は、第1構成例に比して、ハッシュテーブルHT及びポインタテーブルPTを追加的に備える点が異なる。
重複制御部88は、HMT制御部85及びハッシュ登録制御部87と共に、既述の「ハッシュ制御部」の一例を成すと捉えてよい。なお、第2構成例においても、第1構成例と同様、ハッシュ管理テーブルHMTに、エントリカウンタEMCが含まれてよい。また、図25に例示する各部81〜83,84A,85〜88は、それぞれ、フォワーディング処理部80のエレメントであると捉えてよい。
ハッシュテーブルHT、ハッシュ管理テーブルHMT(エントリカウンタEMC)、ポインタテーブルPT、及び、フォワーディングテーブルFWTは、記憶装置あるいは記憶媒体の一例であるメモリMEMに記憶されてよい。これらのテーブル(データ)は、1つのメモリMEMの異なる記憶領域に記憶されてもよいし、異なる複数のメモリMEMの記憶領域に分散的に記憶されてもよい。
ハッシュ演算部84Aは、図12〜図14に例示したように多段化されたハッシュ関数によるハッシュ演算が可能である。なお、ハッシュ演算部84Aは、既述のハッシュ関数検索部HFSに相当する、あるいは、ハッシュ関数検索部HFSとしての機能を具備している、と捉えてよい。
例示的に、ハッシュ演算部84Aは、アドレス抽出部81にて抽出されたアドレス情報に対し、第1段のハッシュ関数によって第1段のハッシュ値を求める。併せて、ハッシュ演算部84Aは、第2のハッシュ関数によって第2段のハッシュ値を求める。
第2段のハッシュ値は、第1段のハッシュ値を第2のハッシュ関数に入力して求めてもよいし、アドレス情報を第2のハッシュ関数に入力して求めてもよい。後者の場合、第1及び第2のハッシュ値は、並行して求めてもよい。
第2段のハッシュ関数は、図12に例示したように、ハッシュテーブルHTに設定、登録可能である。また、図13に例示したように、第2段のハッシュ関数は、ハッシュテーブルHTに、複数(例えば、ハッシュ関数Fa,Fb及びFc)設定、登録されてよい。
第1段のハッシュ関数によって得られた第1段のハッシュ値は、例示的に、HMT制御部85に与えられる。第2段のハッシュ関数によって得られた第2段のハッシュ値は、例示的に、重複制御部88に与えられる。第1段のハッシュ値に重複が生じた場合に、第2段のハッシュ値を用いることで、複数のアドレス情報の登録が可能になる。
重複制御部88は、宛先参照時には、HMT制御部85で選択された(第1段の)ハッシュ値と、第2段のハッシュ値と、を基に、ポインタテーブルPTを参照して、フォワーディングテーブルFWTへのポインタ情報を取得する。取得したポインタ情報は、FWT制御部86に与えられ、FWT制御部86が、当該ポインタ情報の示すフォワーディングテーブルFWTのエントリを参照する。
また、重複制御部88は、空きポインタ情報を管理しておき、アドレス登録時には、空きポインタ情報のいずれかを第2段のハッシュ値に割り当ててポインタテーブルPT(例えば図12参照)に設定、登録する。割り当てたポインタ情報は、FWT制御部86に与えられ、FWT制御部86は、当該ポインタ情報をフォワーディングテーブルFWTに登録する。
なお、第2のハッシュ値に重複が生じた場合は、重複制御部88は、重複しない第2段のハッシュ値が得られる第2段のハッシュ関数の検索をハッシュ演算部84Aに依頼してよい。
当該依頼に応じて、ハッシュ演算部84Aは、ハッシュテーブルHTにおいて、重複しないハッシュ値が得られる第2段のハッシュ関数を検索あるいは設定(更新)し、重複しない第2段のハッシュ値を再計算してよい。再計算したハッシュ値は、重複制御部88に与えられる。
重複制御部88は、ハッシュ演算部84Aから受信した第2段のハッシュ値に空きポインタ情報を割り当ててポインタテーブルPTを更新する。
なお、ハッシュ演算部84Aは、図14に例示したように、第1段のハッシュ関数を新旧2つのハッシュ関数間で切り替えてよい。第1段のハッシュ関数の切り替えに応じて、ハッシュテーブルHT及びポインタテーブルPTの更新が行なわれてよい。
以下、図26〜図29を参照して、上述した第2構成例の伝送装置1(フォワーディング処理部80)の動作例について説明する。
図26は、新規のアドレス情報(例えば、MACアドレス)の登録要求に応じたアドレス登録処理の一例を示すフローチャートである。図27及び図28は、第2段のハッシュ関数の検索処理の一例を示すフローチャートである。
図29は、第1段のハッシュ関数の更新処理の一例を示すフローチャートである。なお、図26〜図28には、図13に例示したように、第2段のハッシュ関数として、例示的に、3つのハッシュ関数Fa,Fb及びFcが用いられるケースを例示している。
例えば、図27及び図28には、3つの第2段のハッシュ関数Fa,Fb及びFcに、それぞれ、CRC12を用い、重複を最大で8つまで許容するケースを例示している。すなわち、図13に例示したように、ハッシュ関数Faを用いて、ハッシュ値を2グループに振り分け、振り分けられた2グループのハッシュ値を、2つのハッシュ関数Fb及びFcを用いてそれぞれ4つのハッシュ値に振り分けるケースである。
(アドレス登録処理)
図25に例示したフォワーディング処理部80において、アドレス制御メッセージ抽出部82からハッシュ登録制御部87に、登録対象のアドレス情報が与えられると、ハッシュ登録制御部87は、ハッシュテーブルHTの更新要求をハッシュ演算部84Aに送信する。
当該更新要求に応じて、ハッシュ演算部84Aは、図26に例示するように、ハッシュ関数Fa,Fb及びFcを検索し(処理P101〜P103)、ハッシュ関数Fb及びFcの検索が成功したか否かをチェックする(処理P104)。
ハッシュ関数Fb及びFcの検索に失敗すれば(処理P104でNOの場合)、ハッシュ関数Fb及びFcが見つかるまで(処理P104でYESと判定されるまで)、ハッシュ演算部84Aは、ハッシュ関数Fa,Fb及びFcの検索を繰り返す。
ハッシュ関数Fa,Fb及びFcの検索が成功すれば(処理P104でYESの場合)、ハッシュ演算部84Aは、ハッシュテーブルHTに、第2段のハッシュ関数Fa,Fb及びFcを登録する(処理P105)。
また、ハッシュ演算部84Aは、ハッシュ関数Fa,Fb及びFcによってそれぞれ得られる第2段のハッシュ値を重複制御部88に与える。重複制御部88は、第2段のハッシュ値のそれぞれに対応する、フォワーディングテーブルFWTへのポインタ情報をポインタテーブルPTに登録する(処理P106)。
一方、FWT制御部86は、ハッシュ登録制御部87からの転送先情報登録要求に応じて、登録要求のあった新規のアドレス情報(例えば、MACアドレス)をフォワーディングテーブルFWTに登録する(処理P107)。新規アドレス情報の登録されたエントリが、ポインタテーブルPTに登録されたポインタ情報によって示される。
(ハッシュ関数検索処理)
次に、図26に例示したハッシュ関数Fa,Fb及びFcの検索処理P101〜P103の一例について、図27及び図28を参照して説明する。図27は、ハッシュ関数Faの検索処理の一例を示すフローチャートであり、図28は、ハッシュ関数Fb(Fc)の検索処理の一例を示すフローチャートである。
なお、図27には、ハッシュ関数Fa(x)が、以下の式(1)で表される、CRC12の生成多項式であるケースを例示している。
Fa(x)=x12+A1111+…Ax+A …(1)
ただし、式(1)において、「Aj」は、自然数「A」の2進数でのj+1桁目を表す。
また、図28には、ハッシュ関数Fb(x)及びFc(x)が、それぞれ、以下の式(2)及び式(3)で表される、CRC12の生成多項式であるケースを例示している。
Fb(x)=x12+B1111+…Bx+B …(2)
Fc(x)=x12+C1111+…Cx+C …(3)
ただし、式(2)において、「Bj」は、自然数「B」の2進数でのj+1桁目を表し、式(3)において、「Cj」は、自然数「C」の2進数でのj+1桁目を表す。
(ハッシュ関数Faの検索処理例)
図27に例示するように、ハッシュ演算部84Aは、式(1)の係数AをA=1に設定した、CRC12の多項式であるハッシュ関数Fa(x)を生成する(処理P111及び処理P112)。
そして、ハッシュ演算部84Aは、第1段のハッシュ値が重複した、アドレス情報(例えば、MAC#0〜MAC#k:kは0以上の整数)に対し、式(1)によるCRC演算を行なう(処理P113)。
更に、ハッシュ演算部84Aは、MAC#0〜MAC#kのそれぞれに対する演算結果(ハッシュ値)の例えば最下位ビットが「0」又は「1」で同じである演算結果の数が、それぞれ閾値(例えば、4)以下であるか否かをチェックする(処理P114)。
別言すると、ハッシュ演算部84Aは、MAC#0〜MAC#kのそれぞれに対して得られたハッシュ値の重複数が閾値以下であるか否かをチェックする。
重複数が閾値以下であれば(処理P114でYESの場合)、ハッシュ演算部84Aは、係数A=1のハッシュ関数Fa(x)の検索に成功したと判定して、検索処理を終了する。
一方、重複数が閾値以下でなければ(処理P114でNOの場合)、ハッシュ演算部84Aは、A<212が満たされる範囲で係数Aをインクリメント(A=A+1)しながら、閾値以下の演算結果が得られるハッシュ関数Fa(x)を検索する。
当該検索処理は、処理P114のNOルートから処理P115、及び、処理P116のYESルートから処理P112〜P114に示される処理に相当する。
閾値以下の演算結果が得られるハッシュ関数Fa(x)の検索に成功すれば(処理P114でYESの場合)、ハッシュ演算部84Aは、検索処理を終了する。
なお、係数AをインクリメントしてA=212となっても、重複数が閾値以下のハッシュ関数Fa(x)が見つからなければ(処理P116でNOの場合)、ハッシュ演算部84Aは、検索に失敗したと判定して、検索処理を終了してよい。検索失敗の旨は、エラー情報やアラーム情報等として伝送装置1の制御部13や外部装置に通知されてよい。
(ハッシュ関数Fb(Fc)の検索処理例)
図28に例示するように、ハッシュ演算部84Aは、式(2)の係数BをB=1に設定した、CRC12の多項式であるハッシュ関数Fb(x)を生成する(処理P121及び処理P122)。なお、式(3)で表されるハッシュ関数Fc(x)の検索処理については、図28において、係数Bを係数Cに読み替えればよい。
そして、ハッシュ演算部84Aは、第1段のハッシュ値が例えば「0」であるアドレス情報(例えば、MAC#0〜MAC#k)に対し、式(2)によるCRC演算を行なう(処理P123)。
なお、ハッシュ関数Fc(x)の検索処理では、ハッシュ演算部84Aは、第1段のハッシュ値が「1」のアドレス情報に対し、式(3)によるCRC演算を行なえばよい。
ただし、上記の例とは逆に、第1段のハッシュ値が「1」であるアドレス情報に対し式(3)のハッシュ関数Fc(x)でCRC演算を行ない、第1段のハッシュ値が「0」のアドレス情報に対し式(2)のハッシュ関数Fb(x)でCRC演算を行なってもよい。
そして、ハッシュ演算部84Aは、MAC#0〜MAC#kのそれぞれに対する演算結果(ハッシュ値)の例えば下位2ビットが全て異なるか否かをチェックする(処理P124)。
別言すると、ハッシュ演算部84Aは、MAC#0〜MAC#kのそれぞれに対して得られたハッシュ値(0又は1)を、2ビットで表示できる4つのハッシュ値に振り分け可能か否かをチェックする(処理P124)。
ハッシュ値の下位2ビットが全て異なれば(処理P124でYESの場合)、ハッシュ演算部84Aは、ハッシュ関数Fb(x)により得られたハッシュ値の下位2ビットに対応するポインタ情報を、ポインタテーブルPTに設定、登録する(処理P125)。
ハッシュ関数Fc(x)により得られたハッシュ値についても同様である。これにより、ハッシュ演算部84Aは、ハッシュ関数Fb(x)(Fc(x))の検索が成功したとして、検索処理を終了する。
一方、処理P124において、ハッシュ値の下位2ビットが同じである演算結果が存在する場合(処理P124のNOルート)、ハッシュ演算部84Aは、ハッシュ関数Fb(x)(Fc(x))の再検索を行なう。
例えば、ハッシュ演算部84Aは、B(又はC)<212(C<212)が満たされる範囲で係数B(又はC)をインクリメントしながら、ハッシュ値の下位2ビットが全て異なる(処理P124でYESと判定される)ハッシュ関数を検索する。
当該検索処理は、処理P124のNOルートから処理P126、及び、処理P127のYESルートから処理P122〜P124に示される処理に相当する。
最終的に、ハッシュ値の下位2ビットが全て異なるハッシュ関数の検索に成功すれば(処理P124でYESの場合)、ハッシュ演算部84Aは、既述のポインタ登録処理P125を実施して、検索処理を終了する。
なお、係数B(又はC)をインクリメントしてB=212(又はC==212)となっても、処理P124の条件を満足するハッシュ関数が見つからなければ(処理P127でNOの場合)、ハッシュ演算部84Aは、検索失敗と判定して、検索処理を終了してよい。
検索失敗の旨は、エラー情報やアラーム情報等として伝送装置1の制御部13や外部装置に通知されてよい。
アドレス解放時には、重複制御部88は、ポインタテーブルPTの該当ポインタ情報を「未使用」に更新し、未使用となったポインタ情報を空きポインタ情報として、ハッシュ演算部84Aに通知(「返却」と称してもよい。)してよい。
(第1段のハッシュ関数更新処理例)
次に、図29を参照して、図25に例示したフォワーディング処理部80による第1段のハッシュ関数の更新処理の一例について説明する。フォワーディング処理部80が、図29に例示するフローチャートに従って動作することで、図14に例示したハッシュ関数更新処理を実現できる。
まず、フォワーディング処理部80において、例えばハッシュ演算部84Aは、フォワーディングテーブルFWTのエントリチェック用インクリメントカウンタのカウント値n1をn1=1に設定する(処理P131)。
なお、「n1」は、例示的に、1以上、かつ、フォワーディングテーブルFWTの最大エントリ数(例えば、1M)以下を満たす整数である。
そして、ハッシュ演算部84Aは、重複制御部88を通じてFWT制御部86に、フォワーディングテーブルFWTのn1番目のエントリが空き(未割当)であるか否かを問い合わせる(処理P132)。
問い合わせの結果、フォワーディングテーブルFWTのn1番目のエントリが空きであれば(処理P132でYESの場合)、ハッシュ演算部84Aは、入力アドレス情報(例えば、MACアドレス)を第1段の新ハッシュ関数にて演算する(処理P133)。
そして、ハッシュ演算部84Aは、ハッシュテーブルHTにおいて、第1段の新ハッシュ値である上記演算結果に対応する「管理フラグ」(図14参照)に空きがあるか否かをチェックする(処理P134)。
「管理フラグ」に空きがあれば(処理P134でYESの場合)、ハッシュ演算部84Aは、「管理フラグ」の「新」と「空」に割り振り可能な「第2段のハッシュ関数」を検索する(処理P135)。
「第2段のハッシュ関数」の検索に成功すれば(処理P136でYESの場合)、ハッシュ演算部84Aは、HMT制御部85に、「第2段のハッシュ関数」(第2段のハッシュ値)に対応するポインタ情報の更新を依頼する。
HMT制御部85は、当該ポインタ情報の更新依頼に応じて、第2段の新ハッシュ値に対応するポインタ情報をポインタテーブルPTに登録し(処理P137)、ハッシュ演算部84Aに応答を返す。
当該応答に応じて、ハッシュ演算部84Aは、ハッシュテーブルHT(図14参照)において、「第2段のハッシュ関数」を、検索に成功した新ハッシュ関数に更新し(処理P138)、新ハッシュ関数の「管理フラグ」を「新」に更新する(処理P139)。
また、ハッシュ演算部84Aは、ハッシュテーブルHT(図14参照)において、第2段の旧ハッシュ関数に対応する「管理フラグ」を「空」に更新する(処理P140)。
なお、上記の各処理P138〜P140の順序は、不問である。また、各処理P138〜P140は、並行して実施されてもよい。
各処理P138〜P140の後、ハッシュ演算部84Aは、インクリメントカウンタのカウント値n1を1つインクリメント(n1=n1+1)し(処理P141)、カウント値n1が1M分のエントリ数未満であるか否かをチェックする(処理P142)。
なお、処理P132、処理P134及び処理P136でそれぞれNOと判定された場合も、処理P141及び処理P142が実施される。
カウント値n1が1M分のエントリ数未満であれば(処理P142でYESの場合)、ハッシュ演算部84Aは、処理P132に戻り、フォワーディングテーブルFWTの次のエントリについて、上記の処理P132〜P140を実施する。
ハッシュ演算部84Aは、n1=1Mが満たされるまで(処理P142でNOと判定されるまで)、カウント値n1をインクリメント(処理P141)しながら、処理P132〜P140を繰り返す。
これにより、フォワーディングテーブルFWTの全てのエントリについて、「第1段のハッシュ関数」及び「第2段のハッシュ関数」の更新処理が実施される。
そして、ハッシュ演算部84Aは、処理P137でハッシュテーブルHTに登録されなかった(別言すると、割り当てられてなかった)ポインタ情報の有無をチェックする(処理P143)。
割り当てられなかったポインタ情報が有れば(処理P143でYESの場合)、ハッシュ演算部84Aは、インクリメントカウンタのカウント値n1を「1」に初期化して、ポインタ情報の登録を試行する(処理P132〜P142)。
最終的に、全てのポインタ情報の割り当てに成功すると(処理P143でNOの場合)、ハッシュ演算部84Aは、更新処理を終了してよい。
以上のようにして、図14に例示したハッシュ関数の更新処理が可能となる。なお、図29の例では、フォワーディングテーブルの先頭エントリから順に空きエントリの検索を行なっているが、検索順序は変更してよい。例えば、重複の多いハッシュ値に対応するエントリから順に検索を行なうようにしても構わない。
(フォワーディング処理部80の伝送装置1への実装例)
図18や図25に例示したフォワーディング処理部80としての機能は、ハードウェア回路によって伝送装置1に実装されてもよいし、ソフトウェア処理によって伝送装置1に実装されてもよい。
フォワーディング処理部80としての機能が、ハードウェア回路によって伝送装置1に実装されるケースを図30に例示し、ソフトウェア処理によって伝送装置1に実装されるケースを図31に例示する。
(ハードウェア実装)
フォワーディング処理部80としての機能は、図1に例示したパケット伝送装置1の入出力IF11のそれぞれに実装されてよい。図30の例では、フォワーディング処理部80としての機能が、各入出力IF11それぞれの入力プロトコル処理部112に実装される。
ここで、入出力IF11の構成例を説明すると、入出力IF11は、それぞれ、例示的に、物理終端部111、入力プロトコル処理部112、メモリ112a、入力QoS制御部113、メモリ113a、及び、スイッチインタフェース114を備える。また、入出力IF11は、例示的に、出力プロトコル処理部115、メモリ115a、出力QoS制御部116、及び、メモリ116aを備える。
物理終端部111は、入出力パケットの物理レイヤ処理を担当する。物理レイヤ処理には、例示的に、入力パケットのヘッダの終端(解析)処理や出力パケットへのヘッダ付与処理等が含まれてよい。
入力プロトコル処理部112は、物理終端部111でヘッダ終端処理等を施された入力パケットに対し、物理レイヤよりも上位のレイヤの通信プロトコルに応じたプロトコル処理を担当する。当該入力プロトコル処理部112に、図18や図25に例示したフォワーディング処理部80が実装されてよい。
メモリ112aは、例示的に、入力プロトコル処理部112がプロトコル処理に用いるデータを記憶する。当該データに、既述のハッシュ管理テーブルHMT(エントリカウンタEMC)、フォワーディングテーブルFWT、ハッシュテーブルHT、ポインタテーブルPT等が含まれてよい。
入力QoS制御部113は、入力プロトコル処理部112でプロトコル処理されたパケットに対してQoS(Quality of Service)制御を実施する。QoS制御の一例は、パケットの種類に応じた優先度や通信の予約帯域に従って、パケットの出力順序や出力レートを制御することである。
メモリ113aは、例示的に、入力QoS制御部113がQoS制御に用いるデータを記憶する。
スイッチインタフェース114は、入力QoS制御部113及び出力プロトコル処理部115と、SWF12との間の接続インタフェースである。例えば、スイッチインタフェース114は、入力QoS制御部113にてQoS制御されたパケットをSWF12へ出力し、SWF12から入力されたパケットを出力プロトコル処理部115へ出力する。
出力プロトコル処理部115は、スイッチインタフェース114から入力されたパケットに対し、物理レイヤよりも上位のレイヤの通信プロトコルに応じたプロトコル処理を担当する。
メモリ115aは、例示的に、出力プロトコル処理部115がプロトコル処理に用いるデータを記憶する。
出力QoS制御部116は、出力プロトコル処理部115でプロトコル処理されたパケットに対してQoS制御を実施する。
メモリ115aは、例示的に、出力プロトコル処理部115がプロトコル処理に用いるデータを記憶してよい。
なお、メモリ112a、113a、115a及び116aは、いずれも、記憶装置あるいは記憶媒体の一例であり、RAMやHDDであってよい。また、図30の例では、メモリ112a、113a、115a及び116aは、それぞれ、各部112、113、115及び116に個別のメモリであるが、一部又は全部が共用メモリであってもよい。
図30に例示した入出力IF11は、それぞれ、ハードウェア回路の一例である半導体集積回路によって実現されてよい。半導体集積回路の一例は、IC(Integrated Circuit)、LSI(Large Scale Integration)、FPGA(Field Programmable Gate Array)、ASIC(application specific integrated circuit)等である。
(ソフトウェア実装)
図30に例示した構成(ハードウェア実装)に対し、フォワーディング処理部80としての機能は、図31に例示するように、制御部13のCPU131によるソフトウェア処理として伝送装置1に実装されてよい。
例えば、CPU131がフォワーディング処理部80としての機能を実現するソフトウェア(「プログラム」と称してもよい。)やデータを、メモリ133や134から読み取って動作することで、フォワーディング処理部80としての機能が実現されてよい。メモリ133及び134は、図1に例示したメモリ132に相当すると捉えてよい。
なお、メモリ133は、例示的に、キャッシュメモリであってよく、メモリ134は、RAMやHDD等の記憶装置あるいは記憶媒体であってよい。メモリ134に記憶されたプログラムやデータは、例えば、CPU131によって読み出されてキャッシュメモリ133に展開される。キャッシュメモリ133に展開されたプログラムやデータをCPU131が読み取って動作することで、読み取ったプログラムやデータに応じた処理が具現される。
CPU131及びメモリ134は、バス変換部135にバス接続されてよい。バス変換部135は、各入出力IF11に備えられたバス変換部119との間の接続インタフェースの一例である。なお、図31において、「NIC」は、「Network Interface Card」の略称であり、入出力IF11の一例である。
バス変換部119及び135は、それぞれ、バス通信の仕様やプロトコル等が入出力IF11と制御部13との間で異なる場合に、互いの通信が適切に行なわれるように入出力信号の変換等を行なう。
入出力IF11は、それぞれ、図30に例示した物理終端部111と同一若しくは同様の物理終端部118を備えてよい。
図31の構成では、図30にて説明した入出力プロトコル処理やQoS制御も、フォワーディング処理と併せてCPU131によって実現される、と捉えてよい。
以上のように、上述したフォワーディング処理部80としての機能は、ハードウェア回路によって超高速な処理を実現したい場合に限らず、ソフトウェア処理によって処理能力を向上したい場合にも効果を発揮する。
(その他)
なお、上述した実施形態の適用対象は、パケット伝送装置等の伝送装置に限られなくてよい。例えば、上述した実施形態は、データベース参照(検索)を行なう情報処理装置に適用してもよい。情報処理装置は、パーソナルコンピュータ(PC)や、サーバコンピュータ、クラウドコンピュータ等のコンピュータであってよい。
別言すると、参照(検索)対象の情報(あるいはデータ)は、既述のフォワーディングテーブルFWTに限られず、入力データの識別情報に対応する情報やデータが登録されたデータベース(DB)であってよい。
例示的に、何らかの入力データの識別情報を検索キーにしてDB検索を行なう情報処理装置において、当該識別情報を複数のハッシュ関数によって縮退させて、既述の実施形態に例示した処理を適用してよい。
この場合、ハッシュ値の重複確率を低減でき、仮に、ハッシュ値の重複が低確率で生じても、DBサイズの増加を最小限に抑えつつ、DBの参照回数の増加を抑制できる。したがって、情報処理装置の情報検索性能の低下を抑制できる。
1 パケット伝送装置
11−1〜11−N 入出力インタフェース(IF)
12 スイッチファブリック(SWF)
13 制御部
80 フォワーディング処理部
81 アドレス抽出部
82 アドレス制御メッセージ抽出部
83 転送先情報付与部
84,84A ハッシュ演算部
85 ハッシュ管理テーブル(HMT)制御部
86 フォワーディングテーブル(FWT)制御部
87 ハッシュ登録制御部
88 重複制御部
111,118 物理終端部
112 入力プロトコル処理部
112a メモリ
113 入力QoS制御部
113a メモリ
114 スイッチインタフェース
115 出力プロトコル処理部
115a メモリ
116 出力QoS制御部
116a メモリ
119,135 バス変換部
131 CPU
132,133,134 メモリ
EMC エントリ管理カウンタ
HFS ハッシュ関数検索部
HMT ハッシュ管理テーブル
HT ハッシュテーブル
MEM メモリ
PT ポインタテーブル
FWT フォワーディングテーブル

Claims (12)

  1. 入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、
    いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御するフォワーディング制御部と、
    前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、
    を備えた、伝送装置。
  2. 前記ハッシュ管理情報は、
    前記ハッシュ関数毎に、前記使用の有無に関わらず前記各ハッシュ関数により演算されるハッシュ値の登録有無を示す情報を含み、
    前記ハッシュ制御部は、
    前記登録有無を示す情報に基づいて、新しい入力データの識別情報に対して前記ハッシュ演算部にて得られるハッシュ値の前記ハッシュ管理情報への登録可否を判定する、請求項1に記載の伝送装置。
  3. 前記ハッシュ制御部は、
    前記複数のハッシュ関数に対して、前記登録時の選択優先順位を割り当て、前記参照時には、前記選択優先順位とは逆転した優先順位で前記選択を制御する、請求項2に記載の伝送装置。
  4. 前記ハッシュ制御部は、
    未使用のハッシュ値の全てについて、前記登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数のハッシュ値を登録不可と判定する、請求項2に記載の伝送装置。
  5. 前記ハッシュ制御部は、
    使用されているハッシュ値について、前記登録時に同じハッシュ関数のハッシュ値が重複すると、当該ハッシュ関数よりも高い選択優先順位が割り当てられたハッシュ関数のハッシュ値を登録不可と判定する、請求項2に記載の伝送装置。
  6. 前記ハッシュ制御部は、
    前記ハッシュ管理情報における前記ハッシュ値の登録数を前記識別情報毎にカウントし、
    カウント値が0になると、前記識別情報に対するハッシュ値に対応した前記ハッシュ管理情報を初期化する、請求項1に記載の伝送装置。
  7. 前記フォワーディング情報は、
    選択されたハッシュ値が重複したときの次参照先となるフォワーディング情報を示すポインタ情報を含む、請求項1に記載の伝送装置。
  8. 前記複数のハッシュ関数は、
    第1のハッシュ値が得られる第1のハッシュ関数と、前記第1のハッシュ値と重複しない第2のハッシュ値が得られる第2のハッシュ関数と、を含み、
    前記ハッシュ制御部は、
    前記第1のハッシュ値と前記第2のハッシュ値とに基づく前記フォワーディング情報へのポインタ情報を基に、前記フォワーディング情報を参照する、請求項1に記載の伝送装置。
  9. 前記第2のハッシュ関数が複数であり、
    前記ハッシュ制御部は、
    前記複数の第2のハッシュ関数から得られる複数の前記第2のハッシュ値によって、前記ポインタ情報をグループ分けする、請求項8に記載の伝送装置。
  10. 前記ハッシュ制御部は、
    前記第1のハッシュ関数が、前記第1のハッシュ関数よりも偏りの少ないハッシュ値の得られる別の第1のハッシュ関数に更新されると、当該更新に応じて前記ポインタ情報を更新する、請求項8に記載の伝送装置。
  11. 入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求め、
    いずれかのハッシュ値を基にフォワーディング情報を参照して前記入力データのフォワーディングを制御し、
    前記ハッシュ関数毎にハッシュ値が前記フォワーディング情報の参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御する、フォワーディング制御方法。
  12. 入力データの識別情報から複数のハッシュ関数を用いて複数のハッシュ値を求めるハッシュ演算部と、
    いずれかのハッシュ値を基に、前記識別情報に対応する情報が登録されたデータベースを参照して、前記入力データに対応する情報検索を行なう情報検索部と、
    前記ハッシュ関数毎にハッシュ値が前記データベースの参照に使用されているか否かを示したハッシュ管理情報に基づいて、前記参照に用いられるハッシュ値の選択を制御するハッシュ制御部と、
    を備えた、情報処理装置。
JP2014230779A 2014-11-13 2014-11-13 伝送装置、フォワーディング制御方法、及び、情報処理装置 Withdrawn JP2016096422A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014230779A JP2016096422A (ja) 2014-11-13 2014-11-13 伝送装置、フォワーディング制御方法、及び、情報処理装置
US14/926,848 US20160142315A1 (en) 2014-11-13 2015-10-29 Transmission apparatus, forwarding control method, and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014230779A JP2016096422A (ja) 2014-11-13 2014-11-13 伝送装置、フォワーディング制御方法、及び、情報処理装置

Publications (1)

Publication Number Publication Date
JP2016096422A true JP2016096422A (ja) 2016-05-26

Family

ID=55962725

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014230779A Withdrawn JP2016096422A (ja) 2014-11-13 2014-11-13 伝送装置、フォワーディング制御方法、及び、情報処理装置

Country Status (2)

Country Link
US (1) US20160142315A1 (ja)
JP (1) JP2016096422A (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190026492A1 (en) * 2017-07-22 2019-01-24 Bluefox, Inc. Protected pii of mobile device detection and tracking
US11151611B2 (en) 2015-01-23 2021-10-19 Bluezoo, Inc. Mobile device detection and tracking
US11727443B2 (en) 2015-01-23 2023-08-15 Bluezoo, Inc. Mobile device detection and tracking
US10063407B1 (en) 2016-02-08 2018-08-28 Barefoot Networks, Inc. Identifying and marking failed egress links in data plane
US10313231B1 (en) 2016-02-08 2019-06-04 Barefoot Networks, Inc. Resilient hashing for forwarding packets
US10237206B1 (en) 2017-03-05 2019-03-19 Barefoot Networks, Inc. Equal cost multiple path group failover for multicast
US10404619B1 (en) 2017-03-05 2019-09-03 Barefoot Networks, Inc. Link aggregation group failover for multicast
US10313495B1 (en) * 2017-07-09 2019-06-04 Barefoot Networks, Inc. Compiler and hardware interactions to remove action dependencies in the data plane of a network forwarding element
US10721167B1 (en) 2017-10-09 2020-07-21 Barefoot Networks, Inc. Runtime sharing of unit memories between match tables in a network forwarding element

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2808694B2 (ja) * 1989-07-24 1998-10-08 株式会社日立製作所 ネットワーク間接続ブリッジ
JP4014155B2 (ja) * 2003-01-27 2007-11-28 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理装置及び方法、プログラム、データ構造、並びにコンピュータ読取り可能な記録媒体
US8161453B2 (en) * 2004-11-16 2012-04-17 Rabih Chrabieh Method and apparatus for implementing task management of computer operations
JP2010128392A (ja) * 2008-11-28 2010-06-10 Canon Inc ハッシュ処理装置及びその方法
US9020953B1 (en) * 2011-03-08 2015-04-28 Pmc-Sierra Us, Inc. Search table for data networking matching
US9148387B2 (en) * 2013-05-10 2015-09-29 Brocade Communications Systems, Inc. Hardware hash table virtualization in multi-packet processor networking systems

Also Published As

Publication number Publication date
US20160142315A1 (en) 2016-05-19

Similar Documents

Publication Publication Date Title
JP2016096422A (ja) 伝送装置、フォワーディング制御方法、及び、情報処理装置
US10623311B2 (en) Technologies for distributed routing table lookup
US20160241474A1 (en) Technologies for modular forwarding table scalability
US9148387B2 (en) Hardware hash table virtualization in multi-packet processor networking systems
US20130173868A1 (en) Generation of Activation List for Memory Translation and Memory Access Protection in Industrial Ethernet Standard
CA2832019A1 (en) Network system, switch and connected terminal detection method
JP6288596B2 (ja) データ処理方法および装置
EP2833583A1 (en) Network appliance redundancy system, control device, network appliance redundancy method and program
JP5954236B2 (ja) ネットワーク中継装置
US20160224603A1 (en) Method for Reading and Writing Forwarding Information Base, and Network Processor
US9218356B2 (en) Systems and methods for accelerating networking functionality
CN104836738A (zh) 路由硬件表项资源管理方法、装置及网络设备
EP2112787B1 (en) Data transmission between different VLANs by using MAC addresses
WO2014126094A1 (ja) 通信システム、通信方法、制御装置、制御装置の制御方法及びプログラム
US20150304215A1 (en) Packet relay apparatus, packet transfer method, and communication system
WO2022206480A1 (zh) 一种数据包发送方法及设备
CN107800628B (zh) 用在软件定义网络中的数据转发装置及数据转发方法
US10374957B2 (en) Traffic control method and apparatus
US20050240609A1 (en) Method and apparatus for setting storage groups
JP6266445B2 (ja) パケット中継装置及びパケット中継方法
JP5395833B2 (ja) 仮想ネットワークシステム及び仮想通信制御方法
US10419395B2 (en) Routing packets in a data center network
JP3199914B2 (ja) フレーム中継制御方法、及びその装置
EP3582457B1 (en) Communication device and communication method
JP2018056739A (ja) スイッチ、および通信方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170804

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20171225