図1に、本発明の実施形態の構成を示す。パケット処理装置10は、コントロールプレーン(control plane)の制御ソフトウェア7からの指示により、ユーザプレーンのパケットを処理する装置である。パケット処理装置10は、登録部1,第1検索テーブル2,第2検索テーブル3,パケット受信部4,検索部5,パケット送信部6を備える。また、パケット処理装置10は、ルータ装置8及びルータ装置9と接続されている。
パケット受信部4は、ルータ装置9からのパケットを受信し、そのパケットの正常性を確認後に検索部5へ供給する。パケット送信部6は、後述の処理を経たパケットをルータ装置8へ転送する。
登録部1は、第1検索テーブル2及び第2検索テーブル3を用いて、制御ソフトウェア7から指示されるアドレスの登録処理を行う。この登録処理については、後に詳細に説明する。
第1検索テーブル2及び第2検索テーブル3は、ルータ装置9からのパケットを転送する際に、そのパケットのヘッダ情報から宛先アドレスを割り出すためのアドレステーブルである。本実施形態におけるヘッダ情報は、パケットのヘッダに記述される発信元アドレスである。また、宛先アドレスとは、本実施形態では、パケットの終着点となるノードのアドレスである。すなわち、本実施形態の各テーブルは、パケットの発信元アドレス(始点)をもとに、そのパケットの終着点を割り出すために用いられる。
本実施形態の第1検索テーブル2には、検索キーとなるインデックス値と宛先アドレスとの組み合わせが登録される。本実施形態のインデックス値は、発信元アドレスを用いたハッシュ関数演算により得られる値(以下、「ハッシュ値」と記す。)である。
他方の第2検索テーブル3には、ヘッダ情報と宛先アドレスとの組み合わせが登録される。本実施形態の第2検索テーブル3は、連想メモリ(CAM:Content Addressable Memory)を含むメモリ装置に形成されており、上記の第1検索テーブル2よりも高速に検索を実施することができる。
検索部5は、パケット受信部4が受信したパケットの発信元アドレスを用いて、第1検索テーブル2及び第2検索テーブル3を検索する。そして、検索により得られた宛先アドレスを転送パケットに設定する。その転送パケットは、パケット送信部6によりルータ装置8へ転送される。
図2に示すフローチャートに沿って、パケット処理装置10におけるアドレス登録の手順を説明する。パケット処理装置10は、コントロールプレーン(7)から登録を指示されたヘッダ情報としての発信元アドレスと、これに組み合わせる宛先アドレスとを入力する(ステップS1)。そして、入力した発信元アドレスを用いて、インデックス値としてのハッシュ値を算出する(ステップS2)。
パケット処理装置10は、第1検索テーブル2の既存のエントリの中に、算出したハッシュ値と同じものがあるかどうか、すなわちハッシュテーブルにおける衝突(collision)の有無を確認する。その結果、算出したハッシュ値が既存のエントリと衝突しない場合は(ステップS3:No)、そのハッシュ値と宛先アドレスとの組み合わせを、新たなエントリとして第1検索テーブル2へ登録する(ステップS4)。
一方、算出したハッシュ値が既存のエントリと衝突する場合(ステップS3:Yes)、パケット処理装置10は、その既存エントリに宛先アドレスが登録されているかどうかを確認する。第1検索テーブル2における宛先登録の有無については、後に説明する。上記の既存エントリに宛先アドレスが登録されていない場合(ステップS5:No)、パケット処理装置10は、今回入力された発信元アドレス(ヘッダ情報)と宛先アドレスとの組み合わせを、そのまま第2検索テーブル3へ登録する(ステップS8)。
上記の既存エントリに宛先アドレスがある場合(ステップS5:Yes)、パケット処理装置10は、その既存のエントリが表す発信元アドレスと宛先アドレスとの組み合わせを第2検索テーブル3へ登録する(ステップS6)。そして、上記の既存エントリから宛先アドレスを削除する(ステップS7)。これにより、第1検索テーブル2における上記の既存エントリには、インデックスのハッシュ値のみが残される。
また、パケット処理装置10は、今回入力された発信元アドレス(ヘッダ情報)と宛先アドレスとの組み合わせを、そのまま第2検索テーブル3へ登録する(ステップS8)。
このように、ハッシュ値が同一となるエントリは、第1検索テーブル2に替えて、高速検索が可能な第2検索テーブル3へ登録される。これにより、インデックス値が同一となる複数のエントリが第1検索テーブル2に登録されることを回避できる。一方、第1検索テーブル2から排除されるアドレス群は、もとの状態、すなわち発信元アドレスと宛先アドレスの組み合わせで第2検索テーブル3に登録される。この第2検索テーブル3には、CAMが利用されることから、発信元アドレスから宛先アドレスを高速に検索することができる。
図3を参照して、上記の登録処理に関する具体例を挙げる。同図は、登録部1が、第1検索テーブル2及び第2検索テーブル3へのアドレス登録を行う様子を示したものである。なお、図示の各テーブル(2,3)の形式は概念的なものであり、実際のテーブル形式は図示のものに限らない。
図3の第1検索テーブル2には、例えば、「発信元A」や「発信元B」に関するインデックスのハッシュ値と、それらとペアの宛先アドレス(A1,B1)のエントリが登録されている。また、同テーブルの「発信元C」のエントリでは、宛先アドレスが削除され、インデックスのハッシュ値が残されている。この「発信元C」のエントリは、前述した衝突が発生したエントリである。
一方、第2検索テーブル3には、「発信元C」及び「発信元D」に関する宛先アドレス(C1,D1)が登録されている。このうち、「宛先アドレスC1」は、第1検索テーブル2の「発信元C」のエントリから削除されて第2検索テーブル3に登録し直された宛先アドレスである。
「発信元D」は、「発信元C」のあとで登録されたものであり、本例では、そのハッシュ値が「発信元C」のハッシュ値と同一であると仮定している。この場合、図3に示すように、「発信元D」のアドレス登録は、第1検索テーブル2でなく第2検索テーブル3にて行われる。これら「発信元C」及び「発信元D」のように、ハッシュ値が同一となる場合、それらの宛先アドレスは第1検索テーブル2ではなく、第2検索テーブル3へ登録される。
なお、衝突が発生した「発信元C」に関し、第1検索テーブル2にインデックス(ハッシュ値)を残しておく理由は、「発信元C」の新たなアドレス登録を行う際に、そのアドレスを第2検索テーブル3へ登録するよう制御するためである。すなわち、「発信元C」の新たなエントリが第1検索テーブル2へ登録されることを防ぐために、このテーブルに「発信元C」のインデックスを残しておく。その結果、第1検索テーブル2に新たな「発信元C」のエントリを登録しようとしても、残されたインデックスにより衝突が起きるので、新たなアドレスは自動的に第2検索テーブル3へ登録される。
仮に、第1検索テーブル2から「発信元C」のエントリを完全に削除すると、新たな「発信元C」の登録時に衝突が発生しないので、その新たなエントリが第1検索テーブル2に登録される。そうすると、新たな登録内容が、すでに第2検索テーブル3に登録されている内容と重複するという不都合が生じる。よって、衝突が発生した「発信元C」エントリについては、意図的な衝突を目的として、エントリごと削除せずに、インデックスのハッシュ値を残しておく。
図4に示すフローチャートに沿って、パケット処理装置10におけるアドレス検索およびパケット転送に関する処理を説明する。
パケット処理装置10は、転送すべきパケットがルータ装置9(図1)から入力されると(ステップA101)、そのパケットのヘッダから発信元アドレスを認識する。そして、認識した発信元アドレスを用いて、前述の第1検索テーブル2及び第2検索テーブル3を同時的に検索する(ステップA102)。
より具体的には、第1検索テーブル2による検索では、転送パケットの発信元アドレスについてハッシュ値を算出し、そのハッシュ値をキーとして宛先アドレスを検索する。また、第2検索テーブル3による検索では、転送パケットの発信元アドレスが、そのままCAM(連想メモリ)に入力され、各ビットが同時的にマッチング処理される。そして、マッチングの結果から宛先アドレスを特定する。
なお、前述したように、ある発信元アドレスとペアの宛先アドレスは、第1検索テーブル2および第2検索テーブル3の何れか一方に登録される。よって、第1検索テーブル2と第2検索テーブル3とをパラレルに検索することができる。そして、今回の転送パケットの発信元事前に登録が行われていれば、何れかのテーブル(2,3)から宛先アドレスが検出される。
このように、第1検索テーブル2の検索と、第2検索テーブル3の検索とを並行させることで、パケット転送時におけるパケット処理装置10のスループットの低下を防止できる。
上記検索の結果、宛先アドレスの検出に成功した場合(ステップA103:Yes)、パケット処理装置10は、検出された宛先アドレスを転送パケットのヘッダに設定し、そのパケットをルータ装置8(図1)へ転送する(ステップA104)。また、検出に失敗した場合(ステップA103:No)、すなわち何れのテーブル(2,3)からも宛先アドレスが検出されなかった場合は、パケットを廃棄する(ステップA105)。
このように、本実施形態のパケット処理装置10は、発信元/宛先の組み合わせを第1検索テーブル2および第2検索テーブル3の何れか一方に登録するよう制御する。また、第1検索テーブル2で衝突が発生するエントリについては、CAMによる第2検索テーブル3へ登録するよう制御する。そして、第1検索テーブル2と第2検索テーブル3とをパラレルに検索する。したがって、パケット転送時におけるパケット処理装置10のスループット低下を抑制することができる。
また、第2検索テーブル3に登録されるアドレスは、登録対象の全てではなく、第1検索テーブル2にて衝突が発生するアドレスのみである。よって、この第2検索テーブル3を形成するためのCAMの大型化を防ぐことができ、その結果、パケット処理装置10の小型化及び省電力が可能となる。
本発明は、上記実施形態に限定されるものではない。本発明の実施は、本発明の請求の範囲内において、適宜変更が可能である。例えば、第2検索テーブル3に関し、上記実施形態ではCAM(連想メモリ)を用いたが、ハードウェアとして汎用のメモリ(RAM)を使用した二次元検索のテーブルであってもよい。
二次元検索の技術としては、例えば、非特許文献1に記載されている「Hi-Cuts」(Hierarchical Intelligent Cuttings)と称される技術を適用することができる。ハッシュテーブル(2)による検索が一次元検索である一方で、「Hi-Cuts」による検索は、二次元検索である。この「Hi-Cuts」は、決定木(decision Tree)方式の一種であり、一般には、次のような手順をとる。
あるフィールド(次元)を領域分割し、分割した領域内のルール収容数が閾値(パラメータ:binth)以下になるように設定する。そして、ルール数が閾値binth以下の領域に対し、各ルールについての線形検索を実施する。
また、領域の分割数についての最大値を規定しておく。その最大値の分、分割しても領域内に閾値binthを超過する数のルールが存在する場合、別フィールド(次元)での領域分割を実施する。そして、各領域内のルール数が閾値以下になるよう、領域分割とフィールド選択とを実施する。その際、いったん選択したフィールドを、改めて選択し直して細分割しても良い。また、各領域間で同じルールが出現してもよい。
インデックス値を算出するための一方向関数について、上記実施形態ではハッシュ関数を適用したが、これに限らず、他の一方向関数であってもよい。
ヘッダ情報と宛先アドレスとの組み合わせに関し、上記実施形態では、パケット発信元アドレス(始点)と宛先アドレス(終着点)との組み合わせであったが、これに限らず、例えば、パケットの送信先(終着点)と転送先(中継点)の組み合わせであってもよい。
本発明は、パケット処理装置(10)の動作手順に対応したコンピュータプログラム、及び、そのプログラムを格納した記録媒体として実施することができる。
本出願は、2008年3月3日に日本出願された特願2008−051876を基礎とする優先権を主張し、その開示の内容を全て本明細書に取り込むものである。