(57)【要約】【課題】テーブルの更新時間の短縮化を図ることを可能とする。【解決手段】複数の検索キーの夫々から求まるハッシュ値と関連づけて前記複数の検索キーの夫々と対応する複数のエントリが登録されるテーブルを記憶する記憶部と、前記テーブルに登録された各エントリについてエントリの直前及び次に参照されるエントリを示すリンク情報を記憶する処理と、前記テーブルに登録されたエントリを削除するときに削除対象のエントリとリンクするエントリのリンク情報を更新する制御部と、を含むテーブル管理装置である。【選択図】図１１
2016006942.tif 000002
【特許請求の範囲】
【請求項１】
複数の検索キーの夫々から求まるハッシュ値と関連づけて前記複数の検索キーの夫々と対応する複数のエントリが登録されるテーブルを記憶する記憶部と、
前記テーブルに登録された各エントリについてエントリの直前及び次に参照されるエントリを示すリンク情報を記憶する処理と、前記テーブルに登録されたエントリを削除するときに削除対象のエントリとリンクするエントリのリンク情報を更新する制御部と、
を含むテーブル管理装置。
【請求項２】
前記制御部は、前記削除対象のエントリの直前に参照されるエントリと当該削除対象のエントリの次に参照されるエントリとが続けて参照されるように前記リンク情報を更新する
請求項１に記載のテーブル管理装置。
【請求項３】
前記制御部は、前記リンク情報を対応するエントリに含めて前記テーブルに登録する
請求項１又は２に記載のテーブル管理装置。
【請求項４】
前記テーブルは、複数のエントリを登録可能な複数の領域を含み、
前記リンク情報に含まれる各エントリを示す情報は、当該各エントリが登録された領域のアドレスである
請求項１から３のいずれか１項に記載のテーブル管理装置。
【請求項５】
前記テーブルは、複数のエントリを登録可能な複数の領域を含み、
前記複数の領域の夫々は、当該領域が空き状態か否かを示す空き情報を含み、
前記制御部は、前記空き情報を用いて追加のエントリを登録する空き状態の領域として直前及び直後の領域にエントリが登録済みである空き領域が発見されたときに、前記追加のエントリを当該空き領域に登録するとともに、当該空き領域の直前の領域に登録されているエントリが前記追加のエントリの直前に参照され、且つ当該空き領域の直後の領域に登録されているエントリが前記追加のエントリの次に参照されるようにリンク情報の更新を行う
請求項１から４のいずれか１項に記載のテーブル管理装置。
【請求項６】
前記テーブルは、それぞれ前記複数の領域で形成された複数のブロックを含み、
前記制御部は、或るハッシュ値に関して前記複数のブロック中の第１のブロックの全領域にエントリが登録された状態において、前記第１のブロックと異なる第２のブロックに前記或るハッシュ値と関連するエントリを登録するときに、登録対象のエントリに前記ハッシュ値と対応するブロック識別子を登録する
請求項４又は５に記載のテーブル管理装置。
【請求項７】
複数の検索キーの夫々から求まるハッシュ値と関連づけて前記複数の検索キーの夫々と対応する複数のエントリが登録されるテーブルをテーブル管理装置が管理する方法であって、
テーブル管理装置が、
前記テーブルに登録された各エントリについてエントリの直前及び次に参照されるエントリを示すリンク情報を記憶し、
前記テーブルに登録されたエントリを削除するときに削除対象のエントリとリンクするエントリのリンク情報を更新する
ことを含むテーブル管理装置のテーブル管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、テーブル管理装置，及びテーブル管理方法に関する。
【背景技術】
【０００２】
ネットワークを形成する通信ノードとして、例えば、ルータ，スイッチ，ゲートウェイなどを含む様々な通信機器がある。通信ノードは、エンド間を転送されるデータブロックに付与された識別情報を元に、当該識別情報に対応する転送先情報、或いはデータブロックの処理に係る情報のような目的の情報（エントリ）を取得するためのテーブルを有している。データブロックは、例えば、パケット，フレーム，セグメントなどを含む。識別情報は、例えば、Media Access Control（ＭＡＣ）アドレス，Internet Protocol（ＩＰ）
アドレス，ポート番号などを含む。
【０００３】
典型例としては、通信ノードで受信されたパケット中の宛先アドレスを用いて、当該パケットの出力ポートの識別情報（ＩＤ）をテーブルから検索することが行われている。このような検索を行う方法の一つに、Content Addressable Memory（ＣＡＭ）のような専用デバイスを用いる方法がある。
【０００４】
ＣＡＭは、登録されたレコードを記憶したアドレスを高速に出力するように形成されたハードウェアである。ＣＡＭのエントリには、ＩＰアドレス又はＩＰアドレスのプレフィクス（検索キー）が登録される。ＣＡＭとは別に、宛先ＩＰアドレスに対応する出力ポートのＩＤ（検索対象の情報）を記憶したメモリが用意される。ＣＡＭは、検索キー（エントリ）に対応する検索対象の情報が記憶された上記メモリのアドレスを出力するように設定される。
【０００５】
ＣＡＭに受信パケットの宛先ＩＰアドレス（又はプレフィクス）が入力されると、ＣＡＭは、入力された宛先ＩＰアドレスに対応するメモリのアドレスを出力する。出力されたアドレスにアクセスすることで、宛先ＩＰアドレスに対応する出力ポートのＩＤ（検索対象の情報）を取得することができる。
【０００６】
但し、ＣＡＭに登録可能なエントリ数には上限がある。上限を超えるエントリを扱う場合には、記憶容量削減のため、ハッシュ関数が適用される場合がある。この場合、テーブルは、検索キー（上記例ではＩＰアドレス）を所定のハッシュ関数（ハッシュアルゴリズム）で縮退したハッシュ値で検索される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１０-９１５０１号公報
【特許文献２】国際公開第２００９／１４４９４１号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ハッシュ値を用いてテーブルが管理される場合、例えば、１つのハッシュ値の元となる複数の検索キー（上記例ではＩＰアドレス）の夫々に対応する検索用の情報を含んだ複数のエントリをテーブルに登録することが考えられる。このようなテーブル中のエントリが削除されたとき、空き領域管理のために残りのエントリの並べ換えを実施することが考えられる。しかしながら、そのようなエントリ削除に伴う並べ換えが実施されると、テーブルの更新作業に時間がかかる問題があった。
【０００９】
一側面は、テーブルの更新時間の短縮化を図ることができる技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
一側面は、複数の検索キーの夫々から求まるハッシュ値と関連づけて前記複数の検索キーの夫々と対応する複数のエントリが登録されるテーブルを記憶する記憶部と、
前記テーブルに登録された各エントリについてエントリの直前及び次に参照されるエントリを示すリンク情報を記憶する処理と、前記テーブルに登録されたエントリを削除するときに削除対象のエントリとリンクするエントリのリンク情報を更新する制御部と、
を含むテーブル管理装置である。
【発明の効果】
【００１１】
一つの側面によれば、テーブルの更新時間の短縮化を図ることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施形態に係るテーブル管理方法の参考例を示す図である。
【図２】図２は、実施形態に係るテーブル管理方法の一例を示す説明図である。
【図３】図３は、エントリ削除時におけるブロック（エントリ管理表）の更新方法の説明図である。
【図４】図４は、上記したテーブル管理方法の適用例を示す図であり、テーブル管理方法が適用されるネットワークシステムの一例を示す。
【図５】図５は、転送ルートの検索装置，統計情報の収集装置，パケットの転送制御装置の構成例を示す図である。
【図６】図６は、ＣＰＵを形成する各コアが検索に用いるエントリ登録テーブルのデータ構造例を示す図である。
【図７】図７は、ＣＰＵ（各コア）によって実行されるエントリ検索処理の一例を示すフローチャートである。
【図８】図８は、図８は、ＣＰＵ（各コア）によって実行される空き領域検索処理の一例を示すフローチャートである。
【図９】図９は、ＣＰＵ（各コア）によって実行されるエントリ登録処理の一例を示すフローチャートである。
【図１０】図１０は、ＣＰＵ（各コア）によって実行されるエントリ登録処理の一例を示すフローチャートである。
【図１１】図１１は、図１１は、ＣＰＵ（各コア）によって実行されるエントリ削除処理の一例を示すフローチャートである。
【図１２】図１２は、ＣＰＵ（各コア）によって実行されるパケット転送処理の一例を示すフローチャートである。
【図１３】図１３は、ＣＰＵ（各コア）によって実行される統計情報収集処理の一例を示すフローチャートである。
【図１４】図１４は、ＣＰＵ（各コア）によって実行されるフィルタリング処理の一例を示すフローチャートである。
【図１５】図１５は、ＣＰＵ（各コア）によって実行される第２のエントリ検索処理の一例を示すフローチャートである。
【図１６】図１６は、ＣＰＵ（各コア）によって実行される第２の空き領域検索処理の一例を示すフローチャートである。
【図１７】図１７は、ＣＰＵ（各コア）によって実行される第２のエントリ登録処理の一例を示すフローチャートである。
【図１８】図１８は、ＣＰＵ（各コア）によって実行される第２のエントリ登録処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して実施形態について説明する。実施形態の構成は例示であり、本発明は、実施形態の構成に限定されない。
【００１４】
図１は、実施形態に係るテーブル管理方法の参考例を示す図である。図１では、検索キーの一例であるＩＰアドレスを元に目的の情報を取得するためのテーブル管理方法の一例が示されている。
【００１５】
図１に示すように、検索キーとなり得る全てのＩＰアドレスに対応するエントリがテーブルに設けられると、対象のＩＰアドレスの数に応じてメモリ空間（メモリ容量）が膨大となる場合がある。このため、対象のＩＰアドレスの縮退が行われる。縮退は、一般的に、所定のハッシュ関数を用いてＩＰアドレスをハッシュ値に変換することで行われる。これにより、各ハッシュ値について複数のＩＰアドレスがグループ化された状態となる。ハッシュ値は、「グループ識別子」の一例である。
【００１６】
そこで、メモリ上に、ハッシュ値に対応する複数のＩＰアドレスに対応するエントリ（レコード）が登録される複数のブロックを用意する。各ブロックは、各ＩＰアドレスに対応するエントリを登録可能な所定数の小ブロック（エントリを登録するための領域）で形成される。図１に示す例では、１つのブロックに１０個のエントリを登録可能な場合が示されている。各ブロックには、アドレス（例えば、メモリ上のアドレス）が割り当てられる。
【００１７】
一般的なテーブル作成方法では、ブロックを形成する複数の領域は、アドレス値が若い順で使用される。すなわち、複数の領域のうちアドレス値が最も若い領域が先頭に設定され、先頭の領域から順にエントリが登録される。図１では、１つのブロックにおける１０個の領域のうち、上から８番目の領域までにエントリＡ〜Ｈが登録され、残りの二つの領域が空き状態である様子がされている。
【００１８】
このような状態で、途中のエントリＤが削除された場合を仮定する。エントリＤの削除により、エントリＤが登録されていた領域は空き状態となる。そして、エントリＤが登録されていた領域以降は空き状態として扱われる。従って、このままの状態では、エントリＥ〜Ｈが登録されている領域が空き状態として扱われ、他のエントリで上書きされる虞がある。
【００１９】
このため、途中のエントリが削除された場合には、次のようなテーブルの更新処理が行われる。すなわち、エントリＤが削除されると、エントリＤより後にあるエントリＥ〜Ｆの夫々が１つ先頭方向に繰り上げられる（並べ換えが実施される）。
【００２０】
しかしながら、登録されたエントリ数が少なくない場合には、上記した繰り上げ処理に時間がかかる。すなわち、エントリの削除に伴うテーブルの更新時間が長くなることがあり得る。テーブルの更新中では、当該テーブルを用いたエントリ（目的の情報）の検索を行うことができない。このため、検索結果を用いる処理が遅延する虞があった。
【００２１】
例えば、テーブルがパケットの宛先ＩＰアドレスに対応する出力ポートを検索するためのルーティングテーブルであれば、出力ポートの検索ができない故にパケットの転送処理が遅延する虞があった。
【００２２】
以下に説明する実施形態では、上記した参考例における問題を解決し、エントリの削除に伴うテーブルの更新時間を短縮化し得るテーブル管理方法及びその方法を実行する装置
（テーブル管理装置）について説明する。
【００２３】
実施形態は、一例として、所定のハッシュ関数（ハッシュアルゴリズム）を用いて複数の検索キーを複数のハッシュ値に変換（縮退）し、各ハッシュ値をグループ識別子として使用する一例について説明する。縮退に使用するハッシュ関数及びハッシュアルゴリズムは既存のあらゆるものを使用可能である。
【００２４】
図２は、実施形態で使用されるエントリ登録テーブルの一例を示す図である。図２において、エントリ登録テーブル１０は、所定の記憶装置上に形成される（記憶装置に記憶される）。エントリ登録テーブル１０は、検索キーから得られるハッシュ値毎に用意された複数の（ｎ個：ｎは自然数）のブロック１１で形成される。各ブロック１１はハッシュ値で検索（インデックス）される。検索に用いるハッシュ値は、ハッシュ値全体であっても良く、ハッシュ値の一部（例えば、予め定めたハッシュ値の有効ビット数の部分）であっても良い。エントリ登録テーブル１０は、「テーブル」の一例である。
【００２５】
各ブロック１１は、エントリ管理表として使用される。各ブロック１１は、複数のエントリを登録可能な所定数（ｍ個：ｍは０を含む自然数）の領域（小ブロック）１２（領域＃１，＃２，＃３，・・・，＃ｍ-１，＃ｍ）で形成される。１つの領域１２には、“ア
ドレス”と、“登録状態”と、“情報”と、リンク情報を形成する“Ｎｅｘｔ”及び“Ｐｒｅ(Previous)"とが格納される。“アドレス”は、各領域１２のアドレスを示す。“ア
ドレス”の代わりに、エントリの識別子（ＩＤ：エントリ番号）を適用することもあり得る。
【００２６】
“アドレス”は、「領域を示す情報」の一例である。“登録状態”は、領域１２にエントリが登録されているか否か（領域１２が空き状態か否か）を示す情報である。“登録状態”は、例えば、“０（空き）”及び“１（塞）”の２値フラグで表現できる。但し、登録状態の表現形式は２値フラグに限られない。
【００２７】
“情報”は、検索キーを用いて検索を所望する情報（目的の情報）を含む。リンク情報は、検索における領域１２（エントリ）の繋がり（リンク）を示す情報であり、エントリ（領域１２）の参照順序を規定する情報でもある。
【００２８】
“Ｎｅｘｔ”は、当該領域１２の次にアクセスする領域１２のアドレスである。“Ｎｅｘｔ”は、「当該領域の次に参照される領域を示す情報」の一例である。“Ｐｒｅ”は、当該領域１２の直前にアクセスされる領域１２のアドレスである。“Ｐｒｅ”は、「当該領域の直前に参照される領域を示す情報」の一例である。以下の説明において“Ｎｅｘｔ”を「次アドレス」と称し、“Ｐｒｅ”を「直前アドレス」と称することもある。
【００２９】
各領域１２は、検索において、アドレスが若い順にアクセスされる。従って、検索時では、先頭の領域１２から始まって、各領域１２について設定されたリンク情報に従って次の領域１２が参照（アクセス）される。
【００３０】
図２の右側の表の例では、“ブロック０”のブロック１１で最も若いアドレス“Ｎ”を有する領域１２が先頭領域に設定されている。また、アドレス“Ｎ”〜“Ｎ＋４”の各領域１２に連続してエントリが登録されており、アドレス“Ｎ＋５”以降の領域１２は空き状態となっている。先頭の領域１２の直前アドレスの値には“０（なし）”が設定される。
【００３１】
アドレス“Ｎ＋１”，“Ｎ＋２”，“Ｎ＋３”，“Ｎ＋４”の各領域１２に登録された各エントリには、エントリがアドレスの若い順で参照されるように、次アドレス及び直前
アドレスが設定されている。但し、アドレス“Ｎ＋４”の領域１２の次の領域１２は空き状態であるので、アドレス“Ｎ＋４”の領域１２の次アドレスの値には、“０（なし）”が設定される。このようにすれば、エントリの登録順に対してランダムにエントリの参照が行われる場合に比べて短時間で全エントリの参照を終えることができる。
【００３２】
図３は、エントリ削除時におけるブロック１１（エントリ管理表）の更新方法の説明図である。図３の左側に示すエントリ管理表の登録例は、図２に示した内容と同じである。エントリの参照順の順方向及び逆方向を矢印で示す。但し、図３では、領域１２の数は５であり、アドレス“Ｎ”〜“Ｎ＋４”までの各領域１２にエントリが登録されていると仮定する。
【００３３】
図３の右側に示すエントリ管理表は、左側のエントリ管理表の登録状態から一例としてアドレス“Ｎ＋１”のエントリが削除される場合を示す。このとき、アドレス“Ｎ＋１”のエントリにおける次アドレス及び直前アドレスの値が参照される。次アドレスは“Ｎ＋２”であり、直前アドレスは“Ｎ”である。このため、アドレス“Ｎ”のエントリにおける次アドレスが“Ｎ＋２”に変更（更新）される。一方、アドレス“Ｎ＋２”のエントリにおける直前アドレスが“Ｎ”に変更（更新）される。
【００３４】
これによって、アドレス“Ｎ”のエントリの参照が終わると、アドレス“Ｎ＋１”を飛ばして次にアドレス“Ｎ＋２”のエントリが参照されるようになる。アドレス“Ｎ＋１”のエントリはそのまま存在しているが、検索において参照されないので削除されたのと同じ状態になる。もっとも、アドレス“Ｎ＋１”のエントリは削除されても良い。
【００３５】
上記のような更新処理では、少なくともリンク情報の更新でエントリ管理表の更新処理を終えることができ、削除対象のエントリの削除や当該エントリの削除に伴う次以降のエントリの繰り上げ処理（図１参照）は実行されない。このため、エントリ管理表の更新時間は、参考例に比べて短くすることができる。すなわち、テーブル更新処理の短縮化を図ることができる。
【００３６】
また、上記したリンク情報は、領域１２のアドレスやエントリの識別情報と紐づけて別のテーブルで管理することが可能である。但し、リンク情報をエントリに含めることで、そのような管理の手間を省くことができる一方、エントリの削除に伴い更新する対象の領域１２をエントリの参照で把握することができる。また、本実施形態では、領域１２のアドレスを管理することで、エントリを管理している。これにより、エントリに識別子を設け、エントリの識別子（エントリ番号など）と領域１２のアドレスとの対応関係を管理することを省略している。もっとも、上記したリンク情報の別管理やエントリ識別子を用いた管理を行う場合もあり得る。
【００３７】
図４は、上記したテーブル管理方法の適用例を示す図であり、テーブル管理方法が適用されるネットワークシステムの一例を示す。図４において、ネットワークシステムは、コアネットワーク１と、複数のアクセスネットワーク２０（＃１〜＃Ｎ（Ｎは自然数）と、統計情報ネットワーク３０とを備えている。本ネットワークシステムでは、データブロックの一例として、パケットが転送される。
【００３８】
コアネットワーク１は、通信回線を介して接続された複数の装置を含んでいる。装置は、ルート情報の検索装置２，分岐装置３，統計情報の収集装置４，パケットの転送制御装置５を含んでいる。コアネットワーク１は、通信回線を介して各アクセスネットワーク２０と接続されている。各アクセスネットワーク２０も、検索装置２，分岐装置３及び統計情報の収集装置４を含むことができる。
【００３９】
検索装置２は、パケットを受信し、パケットの転送ルートを検索し、転送ルートに合致する出力ポートからパケットを送出する。検索装置２は、例えば、ルータ，Ｌ３（レイヤ３）スイッチ，Ｌ２（レイヤ２）スイッチ，スイッチングＨＵＢのようなパケットやフレーム等のデータブロックの中継装置である。各アクセスネットワーク２０の検索装置２（中継装置）は、端末（ホスト）と直接に、或いは無線基地局を介して接続される。
【００４０】
分岐装置３は、コアネットワーク１と各アクセスネットワーク２０とを接続する通信回線上に挿入される。分岐装置３の先には、統計情報の収集装置４が設けられる。分岐装置３は、通信回線を流れる信号を分岐させて収集装置４に送る。分岐装置３は、例えば、通信回線が光ファイバであるときの光カプラである。但し、通信回線が金属線であるときにパケット（電気信号）を電気的に分岐させる装置であっても良い。収集装置４は、分岐装置３から分岐したパケットの受信数等のパケットに関する統計情報を収集し、統計情報ネットワーク３０へ送る。
【００４１】
パケットの転送制御装置５は、例えば、コアネットワーク１と各アクセスネットワーク２０との境界において、通信回線上に挿入される。転送制御装置５は、パケットの内容を解析し、所定のパケットに対するフィルタリング（廃棄）処理を行う。また、転送制御装置５は、パケットをその宛先と異なる所定の送信先へ送信することもあり得る。
【００４２】
収集装置４，及び転送制御装置５のそれぞれは、通信機能を有する情報処理装置（コンピュータ）であり、例えば、パーソナルコンピュータ（ＰＣ），ワークステーション（ＷＳ），サーバマシンのような専用又は汎用の情報処理装置を適用可能である。或いは、通信機器に統計情報の収集装置４や転送制御装置５の機能を実装する場合もあり得る。
【００４３】
実施形態におけるテーブル管理装置は、上記した検索装置２，収集装置４，転送制御装置５の少なくとも１つに実装可能である。但し、テーブル管理装置が適用される装置の範囲は上記に制限されない。
【００４４】
図５は、検索装置２，収集装置４，転送制御装置５の構成例を示す図である。図５には、検索装置２，収集装置４，転送制御装置５として動作可能なパケット処理装置５０についての構成例が示されている。図５において、パケット処理装置５０は、複数の入力ポート５１（＃１〜＃Ｎ）と、回線終端装置５２と、入力パケットのコアへの振分装置５３と、マルチコア０〜Ｍ（Ｍは自然数：以下単に「コア」と表記）と、パケット出力装置５４と、回線終端装置５５と、複数の出力ポート５６（＃１〜＃Ｎ）とを備えている。
【００４５】
各入力ポート５１で入力される信号は、回線終端装置５２で終端され、信号中のパケットは、振分装置５３でコア０〜Ｍのいずれかに振り分けられる。コア０〜Ｍへ振り分けられたパケットのうち、パケット処理装置５０から送信するパケットは、パケット出力装置５４へ送られ、回線終端装置５５で所定の信号形式に変換され、パケットの宛先に対応する出力ポート５６から出力される。
【００４６】
コア０〜Ｍは、マルチプロセッサ構成を有するCentral Processing Unit(ＣＰＵ)又はNetwork Processing Unit(ＮＰＵ)６１（以下ＣＰＵ６１と表記）が備えるコアの集合である。図５の左下に示すように、ＣＰＵ６１は、揮発性メモリ６２と、不揮発性メモリ６３と接続されている。揮発性メモリ６２は、例えばRandom Access Memory（ＲＡＭ）を含む。揮発性メモリ６２は、ＣＰＵ６１（各コア０〜Ｍ）の作業領域（共有メモリ）として使用される。
【００４７】
不揮発性メモリ６３は、Read Only Memory（ＲＯＭ）や、ハードディスクドライブ（ＨＤＤ），Solid State Drive（ＳＳＤ），フラッシュメモリなどの補助記憶装置の少なく
とも１つを含む。但し、不揮発性メモリ６３の種類は上記例示に限定されない。不揮発性メモリ６３は、ＣＰＵ６１によって実行されるプログラムや、プログラムの実行に際して使用されるデータを記憶する。
【００４８】
各コア０〜Ｍは、パケット受信７１と、Ｌ１（レイヤ１）検索処理７２と、Ｌ２検索処理７３と、Ｌ３検索処理７４と、Ｌ４（レイヤ４）検索処理７５とを実行する。揮発性メモリ６２には、Ｌ１登録情報７６，Ｌ２登録情報７７，Ｌ３登録情報７８，及びＬ４レイヤ情報７９が記憶されている。
【００４９】
パケット受信７１で受信されたパケットは、Ｌ１検索処理７２へ渡される。Ｌ１検索処理７２では、レイヤ１（物理層）に係る情報がＬ１登録情報７６から検索される。Ｌ２検索処理７３では、レイヤ２（データリンク層）に係る情報がＬ２登録情報７７から検索される。Ｌ３検索処理７４では、レイヤ３（インターネット層）に係る情報をＬ３登録情報から検索する。Ｌ４検索処理７５では、レイヤ４（トランスポート層）に係る情報がＬ４登録情報から検索される。但し、レイヤ１〜４の夫々の検索を行うことは必須要件ではなく、検索の目的に応じたレイヤの検索が行われるように、Ｌ１〜Ｌ４の検索処理の少なくとも一つを省略することができる。
【００５０】
Ｌ１〜Ｌ４検索処理７２〜７５で検索された情報（検索結果）は、制御振分処理８０に与えられる。制御振分処理８０では、検索結果に基づいて、パケットがパケット転送処理８１，統計収集処理８２，及びフィルタリング処理８３のいずれかに振り分けられる。
【００５１】
パケット転送処理８１では、パケットの宛先に対応する出力ポートの検索が行われ、パケットはパケット送信８４へ送られる。パケット送信８４は、パケットをパケット出力装置５４へ送る。また、パケット転送処理８１では、パケットの統計値を統計情報８６に記録（記憶）することもある。
【００５２】
統計収集処理８２では、パケットに関する情報の統計値が統計情報８６の一部として記録される。統計収集処理８２は、統計値を記録したパケットをパケット廃棄８５に送って廃棄する。フィルタリング処理８３では、パケットを所定のフィルタリング条件に従って廃棄するか転送するかが決定される。転送が決定されたパケットは、パケット送信８４へ送られる。廃棄が決定されたパケットはパケット廃棄８５へ送られ廃棄される。統計情報８６は、揮発性メモリ６２及び不揮発性メモリ６３の少なくとも一方にて記憶・保存される。統計情報８６は、適宜のタイミングで統計情報ネットワーク３０へ送信される。
【００５３】
なお、入力ポート５１の数，出力ポート５６の数，ＣＰＵ６１が備えるコアの数は適宜設定可能である。パケット処理装置５０が検索装置２，収集装置４，転送制御装置５として適宜の位置へ配置されることで、パケットの転送ルート検索，統計情報収集，パケット転送制御を実行することができる。
【００５４】
但し、検索装置２は、コアが行う処理のうち、少なくともパケット受信７１と、パケット転送処理８１と、パケット送信８４とを実行するようにされていれば良い。また、統計情報収集装置４は、コアが行う処理のうち、少なくともパケット受信７１と、統計情報聞統計収集処理８２と、パケット廃棄８５とを行うようにされていれば良い。また、転送制御装置５は、コアが行う処理のうち、パケット受信７１と、フィルタリング処理８３とを実行するようにされていれば良い。
【００５５】
コアが行う各処理は、複数のＣＰＵやＮＰＵの並列処理によってなされても良い。また、各コアで実行される処理は、集積回路（ＩＣ，ＬＳＩ，Application Specific Integrated Circuit（ＡＳＩＣ））や、プログラマブルロジックデバイス（ＰＬＤ）で実行され
るようにしても良い。ＰＬＤは、Field Programmable Gate Array（ＦＰＧＡ）やComplex
Programmable Logic Device（ＣＰＬＤ） を含む。
【００５６】
ＣＰＵ又はＮＰＵは、「プロセッサ」，「制御装置」，「制御部」の一例である。プロセッサは、Digital Signal Processor（ＤＳＰ）を含む。揮発性メモリ６２，不揮発性メモリ６３は、「記憶装置」，「記憶部」，「コンピュータ読み取り可能な記録媒体」の一例である。
【００５７】
図５に示したＣＰＵ６１及び揮発性メモリ６２は、ＣＰＵ６１がプログラムを実行することによってテーブル管理装置として動作することができる。図６は、ＣＰＵ６１を形成する各コア０〜Ｍが検索に用いるエントリ登録テーブルのデータ構造例を示す図である。
【００５８】
エントリ登録テーブル９０は、図２に示したエントリ登録テーブル１０に相当する。エントリ登録テーブル９０は、一例として、フロー情報（例えば、パケットの宛先ＩＰアドレス）を検索キーとして利用し、検索キーに対応する情報の検索に使用される。但し、検索キーは、ＩＰアドレスに限定されない。検索キーは、例えば、宛先ＩＰアドレスと宛先ポート番号（ＴＣＰ／ＵＤＰ）の組み合わせであっても良く、或いは、送信元ＩＰアドレスと宛先アドレスとの組み合わせであっても良い。このように検索キーは適宜決定可能である。
【００５９】
エントリ登録テーブル９０は、例えば、揮発性メモリ６２上に作成されている。但し、不揮発性メモリ６３上に作成されても良い。エントリ登録テーブル９０は、ＣＰＵ６１が有するコアの数に応じて設けられた複数のエリア９１を備えている。各エリア９１は、コア０〜Ｍに対して割り当てられた各コア専用の領域となっている。例えば、コア０〜Ｍに対して、各コア０〜Ｍが処理するＩＰアドレスが予め決定されている。各コア０〜Ｍは、パケット転送処理８１，統計収集処理８２，フィルタリング処理８３の実行に当たり、自身と対応するエリア９１にアクセスする。
【００６０】
各エリア９１は、１つのコアに対して割り当てられた複数のブロック９２で形成される。ブロック９２は、図２に示したブロック１１に相当する。ブロック９２は、所定のハッシュ関数を用いて検索キーである宛先ＩＰアドレスから求めたハッシュ値でインデックス（検索）される。１つのハッシュ値に対して少なくとも１つのブロック９２が割り当てられる。但し、１つのハッシュ値に対して割り当てられたブロック９２が情報で一杯になった場合には、２以上のブロックが１つのハッシュ値に対して割り当てられることもある。
【００６１】
各ブロック９２は、検索キーに対応する検索対象の情報を含むエントリがそれぞれ登録される複数の領域９３で形成される。領域９３は、図２に示した領域１２に相当する。１ブロックを形成する領域９３の数は、適宜設定可能である。各領域９３には、アドレスが割り当てられている。アドレスとして揮発性メモリ６２のアドレスが割り当てられても良い。アドレスは、エントリ番号（エントリの識別子）として使用し得る。
【００６２】
各領域９３には、１エントリ分の情報が登録される。本実施形態では、エントリには、管理情報と、検索情報（検索対象の情報）と、制御情報と、出力情報と、統計情報とが含まれる。
【００６３】
管理情報は、登録状態と、ブロック識別子と、順方向“Ｎｅｘｔ”と、逆方向“Ｐｒｅ”とを含む。登録状態は、領域９３が塞状態（エントリ登録済み）か空き状態かを示す。ブロック識別子は、ブロック９２の識別子である。ブロック識別子として、例えば、ハッシュ値の全部又は一部（ハッシュ値から所定の有効ビット数分を切り出した一部）が利用される。但し、ブロック識別子はハッシュ値と対応する（合致する）情報であれば良い。
また、ブロック識別子はオプション（省略可能）であり、後述する変形例において説明する。順方向“Ｎｅｘｔ”は、上述した次アドレスであり、逆方向“Ｐｒｅ”は、上述した直前アドレスである。
【００６４】
検索情報は、図６に示す例では、パケットのフロー情報が一例として示されている。フロー情報は、送信元ＩＰアドレスと、宛先ＩＰアドレスと、送信元ポート番号と、宛先ポート番号と、プロトコルＩＤと、入力ポート番号とを含んでいる。但し、フロー情報の内容は適宜設定可能であり、ＭＡＣアドレスやＶＬＡＮ（仮想構内交換網）-ＩＤのような
情報が含まれることもある。
【００６５】
制御情報は、フロー情報に合致するパケットに対する制御（処理）内容を示す。制御内容は、例えば、パケット転送，統計収集，フィルタリングを含む。例えば、制御情報がパケット転送であれば、フロー情報に合致するパケットを出力情報で示される出力ポートから送出することが決定される。制御情報が統計収集であれば、フロー情報に合致するパケットの統計情報を保存する。制御情報がフィルタリングであれば、例えば、フロー情報に合致するパケットを廃棄する。もっとも、さらなるフィルタ条件や転送条件が制御情報に含まれていても良い。なお、制御内容はパケット転送，統計収集，フィルタリングに限定されず、これら以外の処理内容であっても良い。
【００６６】
出力情報は、パケット転送処理８１で使用される情報であり、例えば、パケットの出力ポートを示す。統計情報は、パケットに係る統計値を示し、図５に示した統計情報８６に相当する。図６には、統計情報の一例として、パケットの受信数と、受信バイト数と、転送したパケットの数と、転送したバイト数とが示されている。但し、統計情報の種類は当該例示に限定されない。エントリ中の統計情報の格納領域は、パケットに関する統計情報の保存領域として使用される。但し、統計情報がテーブル９０以外の記憶領域に記憶されるようにしても良い。
【００６７】
なお、検索装置２は、図６に示したエントリ中の少なくとも管理情報，検索情報，出力情報を含むエントリが登録されるようになっていれば良い。収集装置４は、図６に示したエントリ中の少なくとも管理情報，検索情報，統計情報を含むエントリが登録されるようになっていれば良い。転送制御装置５は、図６に示したエントリ中の少なくとも管理情報，検索情報，制御情報（廃棄・転送）を含むエントリが登録されるようになっていれば良い。なお、エントリ登録テーブルの検索キー及びエントリに含まれる情報（検索対象の情報）は、テーブル管理装置が実装される装置の目的に合わせて適宜設定可能である。
【００６８】
以上のように、パケット処理装置５０は、ＣＰＵ６１，揮発性メモリ６２，不揮発性メモリ６３を備え、揮発性メモリ６２又は不揮発性メモリ６３は、エントリ登録テーブル（「テーブル」の一例）を記憶する。ＣＰＵ６１は、プログラムの実行を通じてエントリ登録テーブルの９０（１０）のエントリの管理を行う。このように、パケット処理装置５０（検索装置２，収集装置４，転送制御装置５）は、テーブル管理装置が実装された装置として動作する。
【００６９】
図７は、ＣＰＵ６１（各コア）によって実行されるエントリ検索処理の一例を示すフローチャートである。図７以降のフローチャートの説明では、説明を簡単にするため、図２に示したエントリ登録テーブル１０中の或るブロック１１（エントリ登録表）を用いた処理について説明する。図１２に示したエントリ中の「各種情報」は、図６に示したエントリ中の「検索情報」，「制御情報」，「統計情報」を含み得る。
【００７０】
図７の処理は、検索キーが入力されることによって開始される。入力（検索キー）は一例として、パケットに関するフロー情報であると仮定する。最初の０１において、コアは
、所定のハッシュ関数を用い、入力されたフロー情報からハッシュ値を算出する。
【００７１】
続いて、コアは、ハッシュ値に対応するブロック１１（エントリ登録表）の先頭位置（アドレス：Ｎ）を算出する（０２）。次に、コアは、先頭位置（Ｎ）の領域１２にアクセスし、当該領域１２におけるエントリの登録状態を判定する。このとき、領域１２が空き状態であれば、処理が０５に進む。これに対し、領域１２が塞状態であれば、コアは、領域１２に登録されたエントリ中の各種情報とフロー情報（入力情報）とを比較する。
【００７２】
０５の処理では、コアは、フロー情報と各種情報とが一致するか否かを判定する。フロー情報が各種情報と一致する場合には、処理が０８に進む。これに対し、フロー情報と各種情報とが一致しない場合には、処理が０６に進む。０３で領域１２が空き状態と判定され、０５の処理が行われる場合には、フロー情報が各種情報と不一致として扱われ、処理が０６に進む。
【００７３】
０６では、コアは、現在参照中の領域１２における次アドレスの値が“０（なし）”か否か（次の領域１２の有無）を判定する。このとき、次アドレスの値が“０（なし）”（次の領域１２無し）であれば、コアは、“未登録”の結果を出力する（１０）。その後、エントリ検索処理を終了する。この場合、例えば、フロー情報をエントリ登録表に登録するためのエントリ登録処理（図９）が実行される。これに対し、次アドレスの値が“０（なし）”でなければ（次の領域１２あり）、コアは、次の領域１２の情報、すなわち、当該領域１２の次アドレス“Ｎｅｘｔ”で指定されたアドレスの領域１２にアクセス（参照）し（０７）、処理を０３に戻す。０７において、次アドレス“Ｎｅｘｔ”が登録されていなければ、コアは現在の領域１２のアドレスの次のアドレスにアクセスする。
【００７４】
処理が０８に進んだ場合（検索成功）の場合には、コアは、登録済みエントリ番号として、当該領域１２のアドレスを設定し（０８）、フロー情報が既に登録済みであることをアドレスとともに出力し（０９）、エントリ検索処理を終了する。エントリのアドレスは、例えば、パケット転送処理８１，統計収集処理８２，フィルタリング処理８３の少なくとも１つに引き渡され、各処理で使用される。
【００７５】
図８は、ＣＰＵ６１（各コア）によって実行される空き領域検索処理の一例を示すフローチャートである。図８に示す処理は、例えば、フロー情報の入力によって開始される。最初の１０１〜１０３までの処理は、図７に示した０１〜０３の処理と同じであるので説明を省略する。１０３において、領域１２の登録状態が塞状態であれば、処理が１０６に進み、登録状態が空き状態であれば、処理が１０４へ進む。
【００７６】
１０４では、空き領域の検索が成功したものとして、コアは、空き状態の領域１２のアドレスを空き領域番号に設定する。そして、コアは、空き領域ありの情報と空き領域番号（領域１２のアドレス）を出力し、空き領域検索処理を終了する。
【００７７】
１０６では、コアは、現在参照（アクセス）している領域１２に登録されている［Ｎ］．Ｎｅｘｔ列（“Ｎｅｘｔ”（次アドレス））を取り出す。続いて、コアは、次アドレスの値が“０（なし）”か否かを判定する（１０７）。このとき、次アドレスの値が“０（なし）”であれば、コアは、空き領域なしの結果を出力し（１０９）、空き領域検索処理を終了する。これに対し、次アドレスの値が“０（なし）”でなければ、コアは、参照アドレスの値を次の領域１２のアドレス（現在アドレスがＮであればＮ＋１）に設定し、処理を１０３に戻す。これによって、次アドレス（Ｎ＋１）の領域１２に関して１０３以降の処理が繰り返される。
【００７８】
図９及び図１０は、ＣＰＵ６１（各コア）によって実行されるエントリ登録処理の一例
を示すフローチャートである。図９の処理は、例えば、エントリ登録対象のパケットの入力によって開始される。最初の２０１において、コアは、送信元ＩＰアドレス，宛先ＩＰアドレス，プロトコル識別子，送信元ポート番号，宛先ポート番号などをパケットからフロー情報として抽出する。但し、フロー情報は、マニュアル入力或いは他の機器との通信で入手されたものであっても良い。
【００７９】
次の２０２では、コアは、エントリ検索処理（図７）を実行する。２０３では、コアは、エントリ検索処理の結果に基づき、２０１で得たフロー情報が既にエントリ登録表に登録済みか否かを判定する。このとき、エントリ登録済みであれば、エントリ登録処理が終了する。これに対し、エントリが未登録であれば、コアは、空き領域検索処理（図８）を実行する（２０４）。
【００８０】
空き領域検索処理の結果、空き領域が発見された場合には、処理が２０７（図１０）に進む。これに対し、空き領域が発見されない場合には、コアは、空き領域がないことを出力し、登録失敗としてエントリ登録処理を終了する。
【００８１】
２０７以降の処理は、一例として、空き状態の領域１２としてアドレス“Ｎ＋１”の領域が発見された場合について説明する。２０７では、コアは、アドレス“Ｎ＋１”の領域１２に２０１の処理で得たフロー情報を設定（登録）する。
【００８２】
次に、コアは、アドレス“Ｎ＋１”の領域１２が先頭（先頭の領域１２）か否かを判定する。当該判定は、アドレス“Ｎ＋１”の領域１２に格納された直前アドレス“Ｐｒｅ”の値が“０”であるか否かを以てなされる。このとき、直前アドレスの値が０であれば処理が２１７に進み、そうでなければ処理が２１０に進む。
【００８３】
２１０では、コアはｎ、アドレス“Ｎ＋１”の領域１２が最終（最後尾の領域１２）か否かを判定する。当該判定は、アドレス“Ｎ＋１”の領域１２に格納された次アドレス“Ｎｅｘｔ”の値が“０”であるか否かを以てなされる。このとき、次アドレスの値が０であれば処理が２１９に進み、そうでなければ処理が２１１に進む。
【００８４】
２１１では、コアは、アドレス“Ｎ＋１”の領域１２の直前の領域１２（[Ｎ＋１-１]
すなわちアドレス“Ｎ”の領域１２）のアドレス“Ｎ”を、アドレス“Ｎ＋１”の領域１２の次アドレス“Ｎｅｘｔ”の値に設定する。
【００８５】
次の２１２では、コアは、アドレス“Ｎ”の領域１２で次アドレス“Ｎｅｘｔ”として設定されている“Ｎ＋２”（[Ｎ＋１-１]．Ｎｅｘｔ）の値を、アドレス“Ｎ＋１”の次
アドレス（[Ｎ＋１].Ｎｅｘｔ）に設定する。
【００８６】
次の２１３では、コアは、アドレス“Ｎ”の領域１２（[Ｎ＋１−１]）の次アドレス“Ｎｅｘｔ”に、次の領域１２のアドレス“Ｎ＋１”を設定する。次の２１４では、コアは、アドレス“Ｎ”（[Ｎ＋１−１]）の次アドレスとして設定されていたアドレス“Ｎ＋２”の領域における直前アドレス“Ｐｒｅ”に対し、アドレス“Ｎ＋１”を設定する。
【００８７】
次の２１５では、コアは、アドレス“Ｎ＋１”の領域１２における登録状態を“１（塞）”に設定する。その後、コアは、登録成功を示す情報を出力し（２１６）、エントリ登録処理を終了する。
【００８８】
ところで、処理が２１７に進んだ場合には、コアは、アドレス“Ｎ＋１”の領域１２の直前の領域１２（アドレス“Ｎ”の領域１２）における次アドレス“Ｎｅｘｔ”の値として、次の領域１２のアドレス“Ｎ＋１”を設定する。
【００８９】
次の２１８では、コアは、アドレス“Ｎ＋１”の領域１２における直前アドレス“Ｐｒｅ”の値として、直前の領域１２のアドレス“Ｎ”を設定する。その後処理が２１５に進む。
【００９０】
また、処理が２１９に進んだ場合には、コアは、アドレス“Ｎ＋１”の領域１２における直前アドレス“Ｐｒｅ”の値として、アドレス“Ｎ＋１”の領域１２の直前の領域１２のアドレス“Ｎ”を設定する。
【００９１】
次の２２０では、コアは、アドレス“Ｎ”の領域１２（[Ｎ＋１−１]）における次アドレス“Ｎｅｘｔ”の値に、次の領域１２のアドレス“Ｎ＋１”を設定する。その後、処理が２１５に進む。
【００９２】
図１１は、ＣＰＵ６１（各コア）によって実行されるエントリ削除処理の一例を示すフローチャートである。最初の３０１において、コアは、送信元ＩＰアドレス，宛先ＩＰアドレス，プロトコル識別子，送信元ポート番号，宛先ポート番号などをパケットからフロー情報として抽出する。或いは、コアはマニュアル入力や他機器との通信によって入手（取得）されたフロー情報を受け取るようにしても良い。
【００９３】
次の３０２では、コアは、フロー情報を入力としてエントリ検索処理（図７）を実行する。次の３０３では、コアは、エントリ検索処理の結果に基づき、削除対象のフロー情報に対応するエントリが登録済か否かを判定する。このとき、エントリが未登録であれば、コアは、削除成功を示す情報を出力し、エントリ削除処理を終了する。もっとも、削除成功の代わりにエントリが未登録である旨が出力されるようにしても良い。
【００９４】
エントリが登録済である場合には、処理が３０５に進む。３０５以降の処理は、一例として、アドレス“Ｎ＋１”の領域１２に削除対象のエントリが登録されている場合を仮定する。３０５において、コアは、アドレス“Ｎ＋１”の領域１２の登録状態に“０（空き）”を設定する。
【００９５】
次の３０６において、コアは、アドレス“Ｎ＋１”の領域１２に登録されている各種情報を０クリアする（削除する）。但し、３０６の処理は省略可能である。続いて、コアは、アドレス“Ｎ＋１”の領域１２がブロック１１の最後尾の領域１２（アドレス“Ｎ＋４”）か否かを判定する（３０７）。このとき、領域１２が最後尾の領域１２であれば、処理が３０９に進み、そうでなければ処理が３０８に進む。
【００９６】
３０８では、コアは、アドレス“Ｎ＋１”の領域１２における次アドレス“Ｎｅｘｔ”に設定されているアドレス“Ｎ＋１＋１＝Ｎ＋２”を参照し、アドレス“Ｎ＋２”の領域１２の直前アドレス“Ｐｒｅ”の値を、アドレス“Ｎ＋１”の領域１２の直前の領域１２のアドレス“Ｎ”に設定（更新）する。
【００９７】
次の３０９では、コアは、アドレス“Ｎ＋１”の領域１２が先頭の領域（アドレス“Ｎ”）であるか否かを判定する。このとき、アドレス“Ｎ＋１”の領域１２が先頭の領域であれば処理が３１１に進み、そうでなければ処理が３１０に進む。
【００９８】
３１０では、コアは、アドレス“Ｎ＋１”の領域１２の直前の領域１２（アドレス“Ｎ”）を参照し、当該領域１２における次アドレス“Ｎｅｘｔ”の値を、アドレス“Ｎ＋１”の領域１２の次の領域１２のアドレス“Ｎ＋２”に設定（更新）する。
【００９９】
３１１では、コアは、削除成功を示す情報を出力し、エントリ削除処理を終了する。も
っとも、削除成功の代わりにエントリが未登録である旨が出力されるようにしても良い。このようにして、エントリ削除の際には、当該エントリが登録された領域１２の前後の領域１２が連続して参照されるようにリンク情報の更新が行われる。これによって、エントリ削除に伴うエントリの並べ換え（繰り上げ）が発生しないので、テーブル（エントリ登録表）の更新を少なくとも参考例に比べて短時間で終えることができる。
【０１００】
図１２は、ＣＰＵ６１（各コア）によって実行されるパケット転送処理８１の一例を示すフローチャートである。図１２に示す処理は、パケットの受信によって開始される。最初の４０１では、コアは、パケットに含まれたフロー情報を取り出す。
【０１０１】
次の４０２で、コアは、フロー情報を入力としてエントリ検索処理（図７）を実行する。次の４０３で、コアは、エントリ検索処理の結果に基づき、フロー情報に対応するエントリが登録済か否かを判定する。このとき、エントリが登録済であれば、処理が４０４に進み、未登録であれば、処理が４０７に進む。
【０１０２】
４０４では、コアは、エントリ中の制御情報に従いパケットに対する処理を決定する。ここでは、パケット転送処理８１を行うことを決定する。そして、コアは、受信されたパケットに基づきエントリ中の統計情報（受信数，受信バイト，転送数，転送バイト：図６参照）を更新する（４０５）。さらに、コアは、エントリ中の出力ポートへパケットを転送する処理を行う（４０６）。４０６の処理が終了すると、コアは、次のパケット受信を待ち受ける状態に戻る。パケット転送処理８１により、パケットを宛先へ向けて転送することができる。
【０１０３】
４０７に処理が進んだ場合には、コアは、統計情報の更新処理、例えば、パケット廃棄数の更新を行い、その後、受信パケットを廃棄する（４０８）。その後、コアは次のパケットを待ち受ける状態となる。なお、４０５及び４０７の処理はオプションであり、実行しなくても良い。
【０１０４】
図１３は、ＣＰＵ６１（各コア）によって実行される統計収集処理８２の一例を示すフローチャートである。図１３における４０１〜４０４，４０７及び４０８の処理は、図１２で示した処理と同じであるので説明を省略する。但し、４０４において、コアは、統計収集処理８２を実行することを決定する。この場合、コアは、４０５において、パケットに基づきエントリ中の統計情報の更新処理を行う。その後、コアは、受信パケットが用済みであることから、パケットを廃棄する（４０９）。４０９の処理が終了すると、コアは、次のパケット受信を待ち受ける状態に戻る。エントリに格納された統計情報は、統計情報ネットワーク３０へ送られ、トラフィック量の監視など、適宜の目的下で使用される。
【０１０５】
図１４は、ＣＰＵ６１（各コア）によって実行されるパケット転送処理８１の一例を示すフローチャートである。図１３における４０１〜４０４，４０７及び４０８の処理は、図１２で示した処理と同じであるので説明を省略する。但し、４０４において、コアはフィルタリング処理８３を実行することを決定する。
【０１０６】
この場合、コアは、エントリ中の制御情報に基づき、受信パケットに対して転送が指定されているかフィルタ指定（すなわち廃棄）が指定されているかを判定する。転送が指定されている場合、コアは、統計情報の更新処理（４１０）及び出力ポートへのパケット転送処理（４１１）を行う。これらの処理は、図１２に示した４０５及び４０６の処理と同じであるので説明は省略する。なお、４１０の処理はオプションである。
【０１０７】
一方、コアは、受信パケットに対するフィルタ指定がなされている場合には、当該パケットに関する統計情報の更新処理を行い（４１２）、パケットを廃棄する（４１３）。こ
れにより、有害な、或いは権限のないパケットがコアネットワーク１とアクセスネットワーク２０との間を流れることを阻止できる。４１２の処理はオプションである。
【０１０８】
以上説明した実施形態によれば、エントリ登録テーブル１０（９０）のブロック１１（エントリ登録表）からエントリが削除される場合に、削除対象のエントリの直前及び直後（次）で参照されるエントリを登録した領域１２のリンク情報（次アドレス“Ｎｅｘｔ”及び直前アドレス“Ｐｒｅ”）が更新される。このような更新処理によって、ブロック１１（テーブルの一例）の更新にかかる時間を短縮することができる。これによって、更新処理の遅延が検索処理に影響を与えるのを回避することもできる。
【０１０９】
＜変形例＞
次に、実施形態の変形例として、第２のエントリ検索処理，第２の空き領域検索処理，及び第２のエントリ登録処理について説明する。第２のエントリ検索処理は、エントリ検索処理（図７）の変形例である。第２の空き領域検索処理は空き領域検索処理（図８）の変形例である。第２のエントリ登録処理は、エントリ登録処理（図９及び図１０）の変形例である。
【０１１０】
これらの処理は、以下のような状況を想定している。上記したエントリ削除処理（図１１）によれば、連続した複数の領域１２のそれぞれにエントリが登録されている場合に、途中のエントリが削除されると、削除対象のエントリに関連する（リンクする）リンク情報が更新される。このとき、リンク情報は、削除エントリを飛び越して削除エントリの前後で参照されるエントリが連続して参照されるように更新される。これにより、エントリ検索が短時間で行われるようにしている。
【０１１１】
その後、エントリが追加される場合には、エントリ登録処理（図９及び図１０）において、エントリの削除によって空き状態となった領域１２に追加の（新たな）エントリが登録される。このように、ブロック１１（複数の領域１２）は、エントリが登録された領域１２間に無駄な空き状態の領域１２ができないように管理される。換言すれば、削除によって生じた隙間の領域１２に追加のエントリを登録するようにして、ブロック１１を形成する領域１２の数が少なくなるようにしている。
【０１１２】
もっとも、１つのブロック１１を形成する領域１２の数は上限があるので、全ての領域１２にエントリが登録されると、当該ブロックには新たなエントリを登録できない状態となる。しかしながら、新たなエントリを登録する領域をエントリ登録テーブル１０（９０）外に作成すると、エントリの検索効率が低下する虞がある。或いは、新たな領域の要求を図示しないメモリ管理部に行うと、テーブル構成の更新が発生し、当該更新に時間がかかる虞がある。
【０１１３】
上記理由から、或るブロック１１がエントリで一杯になった（全ての領域１２にエントリが登録されている）場合には、他のブロック１１にハッシュ値に対応するエントリを登録するようにする。後述する第２のエントリ検索処理，第２の空き領域検索処理，及び第２のエントリ登録処理は、上記したようなエントリをブロック１１を越えて（ブロック１１間に跨がって）登録する場合の処理である。
【０１１４】
図１５は、ＣＰＵ６１（各コア）によって実行される第２のエントリ検索処理の一例を示すフローチャートである。図１５に示す第２のエントリ検索処理は、以下の点でエントリ登録処理（図７）と異なっている。
【０１１５】
すなわち、０３Ａの処理が０３と０４との間に追加（挿入）されている。また、０６のＹｅｓ判定と１０との間に０６Ａ及び０６Ｂの処理が挿入されている。第２のエントリ検
索処理で用いられるエントリ登録表では、登録されたエントリがブロック識別子を含む。ブロック識別子は、エントリに対応するハッシュ値の全部又は一部である。
【０１１６】
０３Ａの処理において、コアは、０１で得られたハッシュ値がブロック識別子と一致するか否かを判定する。ブロック識別子がハッシュ値と一致する場合には、当該エントリが検索において有効な（フロー情報（入力）と関係する）エントリとして処理が０４に進む。これに対し、ブロック識別子がハッシュ値と一致しない場合には、当該エントリが検索において無効な（フロー情報（入力）と無関係の）エントリとして処理が０５に進む。
【０１１７】
０６Ａは、０６において、ブロック１１において次の領域１２がない場合に実行される。０６Ａでは、コアは、現在の検索対象のブロック１１がエントリ登録テーブル１０（９０）における最終ブロックであるか否かを判定する。このとき、現在のブロック１１が最終ブロックであれば、処理が１０へ進む。次の検索対象のブロックがないからである。
【０１１８】
これに対し、現在のブロック１１が最終ブロックでない場合には、コアは、次の検索対象に現在のブロック１１の次にあるブロック１１を指定（設定）する（０６Ｂ）。当該指定は、例えば、次のブロック１１のアドレス（ブロックアドレス）を設定することでなされる。その後、処理が０２へ戻る。但し、次の（２巡目以降の）０２の処理では、単に次ブロックの先頭が算出されるだけで、当該次ブロックがハッシュ値と対応するか否かは判定されない。
【０１１９】
このようにして、第２のエントリ検索処理では、ハッシュ値に対応するエントリの検索がブロック１１を跨いで実行される。これによって、１つのブロック１１内に収まりきらないエントリがあっても、他のブロック１１に登録し、検索を行うことが可能となる。
【０１２０】
以上の点を除き、第２のエントリ検索処理は、図７に示したエントリ検索処理と同じであるので説明は省略する。
【０１２１】
図１６は、ＣＰＵ６１（各コア）によって実行される第２の空き領域検索処理の一例を示すフローチャートである。第２の空き領域検索処理は、１０７のＹｅｓ判定と１０９の処理との間に１０７Ａ及び１０７Ｂの処理が挿入されている点で、空き領域検索処理（図８）と異なっている。
【０１２２】
１０７にて、空き領域を検索しているブロック１１において次の領域１２がないと判定されると、１０７Ａが実行される。１０７Ａでは、コアは、現在の検索対象のブロック１１がエントリ登録テーブル１０（９０）における最終ブロックであるか否かを判定する。このとき、現在のブロック１１が最終ブロックであれば、処理が１０９へ進む。次の検索対象のブロックがないからである。
【０１２３】
これに対し、現在のブロック１１が最終ブロックでない場合には、コアは、次の検索対象に現在のブロック１１の次にあるブロック１１を指定（設定）する（１０７Ｂ）。当該指定は、例えば、次のブロック１１のアドレス（ブロックアドレス）を設定することでなされる。その後、処理が１０２へ戻る。但し、次の（２巡目以降の）１０２の処理では、単に次ブロックの先頭が算出されるだけで、当該次ブロックがハッシュ値と対応するか否かは判定されない。従って、次以降のブロック１１に登録されるエントリに対応するハッシュ値と、次以降のブロック１１に関連づけられたハッシュ値とは異なる。以上を除き、第２の空き領域検索処理は空き領域検索処理（図７）と同じであるので説明を省略する。
【０１２４】
第２の空き領域検索処理によれば、空き領域がブロック１１間に跨がって検索される。これによって、次に説明する第２のエントリ登録処理において、異なる（２以上の）ブロ
ック１１に或るハッシュ値に対応するエントリを夫々登録することが可能となる。なお、１つのハッシュ値に関連する複数のブロック１１が用意されることもあり得る。
【０１２５】
図１７及び図１８は、ＣＰＵ６１（各コア）によって実行される第２のエントリ登録処理の一例を示すフローチャートである。第２のエントリ登録処理では、図１７に示す２０２Ａ，２０４Ａのそれぞれにおいて、第２のエントリ検索処理，第２の空き領域検索処理が実行される点で、エントリ登録処理（図９）と異なっている。
【０１２６】
また、第２のエントリ登録処理では、図１８に示すように、２０７と２０８との間に２０７Ａの処理が挿入されている点で、エントリ登録処理（図１０）と異なっている。２０７Ａでは、[Ｎ＋１]、すなわち、第２の空き領域検索処理で発見された空き状態の領域１２に対し、ブロック識別子を登録（記憶）する。このとき、ブロック識別子として、第２のエントリ検索処理にて得られたハッシュ値を登録する。
【０１２７】
ハッシュ値として、ハッシュ値全体が登録されても良く、ハッシュ値から所定の有効ビット数分を切り出したハッシュ値の一部が登録されても良い。また、ブロック１１間で、ブロック識別子として登録されるハッシュ値が異なっていても良い。但し、第２のエントリ検索処理における０３Ａの判定処理で、ハッシュ値とブロック識別子とが一致するとの判定結果が得られることが条件となる。
【０１２８】
このように、変形例によれば、テーブル更新処理に時間がかからない形式で、ブロック１１に収まらないエントリを他のブロック１１に登録することができ、検索においても、エントリ検索処理（図７）とほぼ同様のロジックでエントリを検索することができる。すなわち、検索処理に際して複雑な処理を回避して、検索に時間がかかるのを回避することができる。
【０１２９】
なお、変形例において、或るハッシュ値に対応するエントリが最初に登録されるブロック１１（第１のブロックの一例）に登録される各エントリについては、ブロック識別子の登録を省略しても良い。この場合、第１のブロック１１に収まらないエントリを登録する他のブロック１１（第２のブロック）に登録される各エントリにはブロック識別子を登録する。そして、検索処理において、第１のブロック１１については、ブロック識別子とハッシュ値との一致判定（０３Ａ）を行わず、第２以降のブロック１１についてはブロック識別子とハッシュ値との一致判定を行うようにしても良い。
【符号の説明】
【０１３０】
１０，９０・・・エントリ登録テーブル
１１・・・ブロック
１２・・・領域（小ブロック）
６１・・・ＣＰＵ又はＮＰＵ
６２・・・揮発性メモリ
６３・・・不揮発性メモリ
【図１】
2016006942.tif 000003
【図２】
2016006942.tif 000004
【図５】
2016006942.tif 000005
【図６】
2016006942.tif 000006
【図９】
2016006942.tif 000007
【図１０】
2016006942.tif 000008
【図１１】
2016006942.tif 000009
【図１２】
2016006942.tif 000010
【図１３】
2016006942.tif 000011
【図１４】
2016006942.tif 000012
【図１５】
2016006942.tif 000013
【図１７】
2016006942.tif 000014
【図１８】
2016006942.tif 000015
【図３】
2016006942.tif 000016
【図４】
2016006942.tif 000017
【図７】
2016006942.tif 000018
【図８】
2016006942.tif 000019
【図１６】
2016006942.tif 000020