(57)【要約】【課題】ハッシュテーブルを用いて入力パケットの識別を行う場合において、コリジョン発生時におけるコリジョンレコードの線形検索にかかる時間を低減する。【解決手段】パケット処理装置１００は、入力パケットの入力値のハッシュ値を計算し、このハッシュ値をキーとしてハッシュテーブル１６０を検索する。ハッシュテーブル１６０は各レコードの検索ヒット回数を記録する。そして、ソート部１５０は、所定周期で、ハッシュテーブル１００の同じハッシュ値をもつレコード群（コリジョンレコード）を、検索ヒット回数が多い順にソートしておく。そして、パケット処理装置１００は、新たな入力パケットを受信したとき、このソート後のハッシュテーブル１６０を検索する。【選択図】図３
2014036369.tif 000002
【特許請求の範囲】
【請求項１】
パケットの入力を受け付けるパケット入力部と、
前記パケットの所定のエリアの値を入力値として、この入力値のハッシュ値を計算するハッシュ値計算部と、
前記ハッシュ値ごとに、前記ハッシュ値に対応するレコードと、前記レコードを持つパケットに対し実行すべきアクションと、前記ハッシュ値に対応するレコードの検索頻度とを対応付けて示したハッシュテーブルを記憶する記憶部と、
前記計算したハッシュ値をキーとして、前記ハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索するハッシュ値比較部と、
前記パケットに対し、前記アクションが検索された場合、前記検索されたアクションを実行し、前記アクションが検索されなった場合、デフォルトのアクションの実行処理を行うアクション実行部と、
前記入力値と同じ値を持つレコードを発見したとき、前記ハッシュテーブルにおける前記レコードの検索頻度を加算することで更新する統計情報更新部と、
前記ハッシュテーブルにおいて、前記ハッシュ値に対応する２以上のレコードがあるコリジョンレコードのエントリリストそれぞれについて、前記エントリリスト内のレコードを検索頻度が多い順にソートし、前記ハッシュテーブルにおける検索頻度の値をクリアして、前記ハッシュテーブルの更新を行うソート部と、
前記アクションの実行後のパケットを出力するパケット出力部とを備え、
前記パケット入力部経由で新たなパケットが入力されたとき、
前記ハッシュ値比較部は、
前記新たな入力パケットの所定のエリアの値を入力値として前記ハッシュ値計算部により計算されたハッシュ値をキーとして、前記更新されたハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索することを特徴とするパケット処理装置。
【請求項２】
前記ハッシュテーブルのコリジョンレコードに、前記計算したハッシュ値に対応するレコードがないパケットを所定の頻度で受信したとき、前記入力パケットを所定のサンプリングレートでサンプリングし、前記サンプリングした入力パケットの入力値のハッシュ値ごとに、前記ハッシュ値に対応するレコードである非該当レコード群を非該当レコードバッファに蓄積する非該当レコード蓄積処理部と、
前記非該当レコードバッファにおける非該当レコードごとに、当該レコードの出現頻度を集計し、前記集計した非該当レコードの出現頻度が所定の閾値以上のレコードの出現頻度に、前記サンプリングレートの逆数を乗算した補正統計値を計算し、前記非該当レコードのハッシュ値ごとに、前記非該当レコードと、前記非該当レコードに対応するアクションと、前記計算した補正統計値とを示したエントリを非該当レコードハッシュテーブルに格納する非該当レコードバッファ統計部と、
前記非該当レコードバッファおよび前記非該当レコードハッシュテーブルをクリアする非該当レコードクリア部と、
をさらに備え、
前記記憶部は、
前記非該当レコードバッファと、前記非該当レコードハッシュテーブルとをさらに備え、
前記ソート部は、さらに、
前記非該当レコードハッシュテーブルに格納されたエントリのうち、前記補正統計値が所定の閾値以上のエントリを前記ハッシュテーブルのコリジョンレコードに追加し、
前記非該当レコードクリア部は、
前記ソート部により、前記補正統計値が所定の閾値以上のエントリが前記ハッシュテーブルのコリジョンレコードに追加されたとき、前記非該当レコードバッファおよび前記非該当レコードハッシュテーブルをクリアすることを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記パケット処理装置は、
前記非該当レコード蓄積処理部における前記入力パケットのサンプリングレートを計算するサンプリングレート計算部をさらに備え、
前記サンプリングレート計算部は、
前記非該当レコードバッファに割り当てられた記憶容量が少ないほど、前記サンプリングレートを低くすることを特徴とする請求項２に記載のパケット処理装置。
【請求項４】
前記サンプリングレート計算部は、
前記ハッシュテーブルに前記計算したハッシュ値に対応するレコードがないパケットの受信頻度が高いほど、前記サンプリングレートを低くすることを特徴とする請求項２または請求項３に記載のパケット処理装置。
【請求項５】
前記ハッシュテーブルから前記検索頻度が所定の閾値に満たないエントリを削除する非該当レコード削除部をさらに備えることを特徴とする請求項１ないし請求項４のいずれか１項に記載のパケット処理装置。
【請求項６】
ハッシュ値ごとに、前記ハッシュ値に対応するレコードと、前記レコードを持つパケットに対し実行すべきアクションと、前記ハッシュ値に対応するレコードの検索頻度とを対応付けて示したハッシュテーブルを記憶する記憶部を備えるパケット処理装置が、
パケットの入力を受け付けるステップと、
前記パケットの所定のエリアの値を入力値として、この入力値のハッシュ値を計算するステップと、
前記計算したハッシュ値をキーとして、前記ハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索するステップと、
前記パケットに対し、前記アクションが検索された場合、前記検索されたアクションを実行し、前記アクションが検索されなった場合、デフォルトのアクションの実行処理を行うステップと、
前記入力値と同じ値を持つレコードを発見したとき、前記ハッシュテーブルにおける前記レコードの検索頻度を加算することで更新するステップと、
前記ハッシュテーブルにおいて、前記ハッシュ値に対応する２以上のレコードがあるコリジョンレコードのエントリリストそれぞれについて、前記エントリリスト内のレコードを検索頻度が多い順にソートし、前記ハッシュテーブルにおける検索頻度の値をクリアして、前記ハッシュテーブルの更新を行うステップと、
前記アクションの実行後のパケットを出力するステップとを実行し、
前記ハッシュテーブルの更新後、新たなパケットが入力されたとき、
前記新たな入力パケットの所定のエリアの値を入力値として計算されたハッシュ値をキーとして、前記更新されたハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索することを特徴とするパケット処理方法。
【請求項７】
前記記憶部は、
非該当レコードバッファと、前記非該当レコードのハッシュ値ごとに、前記非該当レコードと、前記非該当レコードに対応するアクションと、補正統計値とを示した非該当レコードハッシュテーブルとをさらに備え、
前記パケット処理装置が、
前記ハッシュテーブルのコリジョンレコードに、前記計算したハッシュ値に対応するレコードがないパケットを所定の頻度で受信したとき、前記入力パケットを所定のサンプリングレートでサンプリングし、前記サンプリングした入力パケットの入力値のハッシュ値ごとに、前記ハッシュ値に対応するレコードである非該当レコード群を前記非該当レコードバッファに蓄積するステップと、
前記非該当レコードバッファにおける非該当レコードごとに、当該レコードの出現頻度を集計し、前記集計した非該当レコードの出現頻度が所定の閾値以上のレコードの出現頻度に、前記サンプリングレートの逆数を乗算した前記補正統計値を計算し、前記非該当レコードのハッシュ値ごとに、前記非該当レコードと、前記非該当レコードに対応するアクションと、前記計算した補正統計値とを示したエントリを前記非該当レコードハッシュテーブルに格納するステップと、
前記非該当レコードハッシュテーブルに格納されたエントリのうち、前記補正統計値が所定の閾値以上のエントリを前記ハッシュテーブルのコリジョンレコードに追加するステップと、
前記補正統計値が所定の閾値以上のエントリが前記ハッシュテーブルのコリジョンレコードに追加されたとき、前記非該当レコードバッファおよび前記非該当レコードハッシュテーブルをクリアするステップと、
をさらに実行することを特徴とする請求項６に記載のパケット処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、IP（Internet Protocol）ネットワーク上に配備されるDPI（Deep Packet Inspection）や従量課金向けのパケットカウント装置等、IPパケットの識別結果を基に、IPパケットの転送や廃棄、統計情報の収集等を行うパケット処理技術に関する。
【背景技術】
【０００２】
DPI装置やパケットカウンタ装置は、大量かつ多様な入力パケットをリアルタイムに識別する機能が求められる。ここでDPI装置は、IPパケットのペイロード部を監視し、内容に応じたアクション（例えば、リダイレクトや廃棄、通常の転送）を選択する装置で、一例としてはURL（Uniform Resource Locator）フィルタリング装置が挙げられる。また、パケットカウンタ装置は、IPパケットのヘッダ部、特に送信元／宛先IPアドレスフィールドを監視し、特定のIPアドレスやプレフィックスを検出した場合に、そのIPアドレスまたはプレフィックスごとに通過バイト数やパケット数等を計量し、従量課金の元情報として供する装置である。
【０００３】
先に挙げた入力パケットのリアルタイムな識別機能を、特殊なハードウェアによらず汎用のCPU（Central Processing Unit）を用いて実装する場合、入力値のハッシュ値を検索インデックスとしたハッシュテーブルを用いることが一般的である。ハッシュテーブルは、入力パケットの評価箇所(例えば、DPI装置の場合はHTTP（HyperText Transfer Protocol）で取得するURI（Uniform Resource Identifier）が相当。従量課金向けのパケットカウント装置の場合は、課金ユーザを識別可能な送信元／宛先IPアドレス等が相当する)のハッシュ値を検索インデックスとしたものである。このようなハッシュテーブルを用いた検索は、比較対象データ全体を線形検索する場合と比較して、処理の大幅な高速化を実現できる。
【０００４】
ここで、検索にハッシュテーブルを用いる場合、異なる入力値であっても同じハッシュ値になることがある。これを衝突 (コリジョン、collision) と呼ぶ。このコリジョンが発生した場合、ハッシュテーブル上の同じハッシュ値をもつ複数の要素（ここではコリジョンレコードと呼ぶ）を線形検索することが考えられる（非特許文献１参照）。
【０００５】
例えば、図１に例示するように、入力パケットが「http://www.example.com/」であり、このハッシュ値が「0011」の場合、ハッシュテーブルのインデックス値（ハッシュ値）が「0011」であるレコードは複数ある。つまりコリジョンが発生している。この場合、各装置は、ハッシュ値「0011」のレコード（コリジョンレコード）を線形検索する。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】ハッシュテーブルに対する攻撃手法のはなし、[online]、[平成２４年７月9日検索]、インターネット、<URL: http://codezine.jp/article/detail/6396 >
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、コリジョン発生時にハッシュテーブルの線形検索を行うことは、装置の処理負荷が大きい。ここで、コリジョンを避けるために、ハッシュテーブルに用いるハッシュ関数の選択において、分散性のよい関数を用いるようにしたり、ハッシュ値のビット長を長くとるようにしたりすることも考えられる。しかし、パケット識別には高速処理が必須とされるため、ハッシュテーブルに用いるハッシュ関数の選択肢は限定される。また、ハッシュテーブルに用いるハッシュ値のビット長を長くとればコリジョンの発生確率を低減できるが、ハッシュテーブルの必要メモリ量が増えてしまう。したがって、ハッシュテーブルを用いて入力パケットの識別を行う場合において、ハッシュテーブルがハッシュレコードを含みコリジョン発生時にコリジョンレコードの線形検索を行うことは避けられない。
【０００８】
そこで本発明は、ハッシュテーブルを用いて入力パケットの識別を行う場合において、コリジョン発生時にハッシュテーブルの検索にかかる時間を低減することを目的とする。
【課題を解決するための手段】
【０００９】
前記した課題を解決するため、本発明のパケット処理装置を以下の構成とした。すなわち、パケット処理装置は、パケットの入力を受け付けるパケット入力部と、前記パケットの所定のエリアの値を入力値として、この入力値のハッシュ値を計算するハッシュ値計算部と、前記ハッシュ値ごとに、前記ハッシュ値に対応するレコードと、前記レコードを持つパケットに対し実行すべきアクションと、前記ハッシュ値に対応するレコードの検索頻度とを対応付けて示したハッシュテーブルを記憶する記憶部と、前記計算したハッシュ値をキーとして、前記ハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索するハッシュ値比較部と、前記パケットに対し、前記アクションが検索された場合、前記検索されたアクションを実行し、前記アクションが検索されなった場合、デフォルトのアクションの実行処理を行うアクション実行部と、前記入力値と同じ値を持つレコードを発見したとき、前記ハッシュテーブルにおける前記レコードの検索頻度を加算することで更新する統計情報更新部と、前記ハッシュテーブルにおいて、前記ハッシュ値に対応する２以上のレコードがあるコリジョンレコードのエントリリストそれぞれについて、前記エントリリスト内のレコードを検索頻度が多い順にソートし、前記ハッシュテーブルにおける検索頻度の値をクリアして、前記ハッシュテーブルの更新を行うソート部と、前記アクションの実行後のパケットを出力するパケット出力部とを備え、前記パケット入力部経由で新たなパケットが入力されたとき、前記ハッシュ値比較部は、前記新たな入力パケットの所定のエリアの値を入力値として前記ハッシュ値計算部により計算されたハッシュ値をキーとして、前記更新されたハッシュテーブルにおける前記ハッシュ値に対応する１以上のレコードの中から、前記入力値と同じ値を持つレコードに対応するアクションを検索する。
【００１０】
このようにすることで、ハッシュテーブルを用いて入力パケットの識別を行う場合において、コリジョン発生時にハッシュテーブルの検索にかかる時間を低減できる。
【００１１】
また、本発明のパケット処理装置は、前記ハッシュテーブルのコリジョンレコードに、前記計算したハッシュ値に対応するレコードがないパケットを所定の頻度で受信したとき、前記入力パケットを所定のサンプリングレートでサンプリングし、前記サンプリングした入力パケットの入力値のハッシュ値ごとに、前記ハッシュ値に対応するレコードである非該当レコード群を非該当レコードバッファに蓄積する非該当レコード蓄積処理部と、前記非該当レコードバッファにおける非該当レコードごとに、当該レコードの出現頻度を集計し、前記集計した非該当レコードの出現頻度が所定の閾値以上のレコードの出現頻度に、前記サンプリングレートの逆数を乗算した補正統計値を計算し、前記非該当レコードのハッシュ値ごとに、前記非該当レコードと、前記非該当レコードに対応するアクションと、前記計算した補正統計値とを示したエントリを非該当レコードハッシュテーブルに格納する非該当レコードバッファ統計部と、前記非該当レコードバッファおよび前記非該当レジードハッシュテーブルをクリアする非該当レコードクリア部と、をさらに備え、前記記憶部は、前記非該当レコードバッファと、前記非該当レコードハッシュテーブルとをさらに備え、前記ソート部は、さらに、前記非該当レコードハッシュテーブルに格納されたエントリのうち、前記補正統計値が所定の閾値以上のエントリを前記ハッシュテーブルのコリジョンレコードに追加し、前記非該当レコードクリア部は、前記ソート部により、前記補正統計値が所定の閾値以上のエントリが前記ハッシュテーブルのコリジョンレコードに追加されたとき、前記非該当レコードバッファおよび前記非該当レジードハッシュテーブルをクリアする。
【００１２】
このようにすることで、パケット処理装置が、ハッシュテーブルのコリジョンレコードにレコードがヒットしない入力パケット（非該当パケット）を所定の頻度以上で受信するようになった場合でも、ハッシュテーブルの検索にかかる時間が長くなってしまうことを抑制できる。
【００１３】
また、本発明のパケット処理装置は、前記非該当レコード蓄積処理部における前記入力パケットのサンプリングレートを計算するサンプリングレート計算部をさらに備え、前記サンプリングレート計算部は、前記非該当レコードバッファに割り当てられた記憶容量が少ないほど、前記サンプリングレートを低くする。
【００１４】
このようにすることで、パケット処理装置は、非該当レコードバッファにデータがあふれてしまうことを抑制できる。
【００１５】
また、本発明のパケット処理装置の前記サンプリングレート計算部は、前記ハッシュテーブルに前記計算したハッシュ値に対応するレコードがないパケットの受信頻度が高いほど、前記サンプリングレートを低くする。
【００１６】
このようにすることで、パケット処理装置は、非該当レコードバッファにデータがあふれてしまうことをさらに抑制できる。なお、ここでいう受信頻度とは、単位時間あたりのパケットの受信回数である。
【００１７】
また、本発明のパケット処理装置は、前記ハッシュテーブルから前記検索頻度が所定の閾値に満たないエントリを削除する非該当レコード削除部をさらに備える。
【００１８】
このようにすることで、パケット処理装置は、ハッシュテーブルの限られた記憶容量を有効活用できる。
【発明の効果】
【００１９】
本発明によれば、ハッシュテーブルを用いて入力パケットの識別を行う場合において、コリジョン発生時におけるハッシュテーブルの線形検索を高速に行うことができる。
【図面の簡単な説明】
【００２０】
【図１】入力パケットのハッシュ値を用いたハッシュテーブルの検索を概念的に示した図である。
【図２】本発明の第１の実施の形態のパケット処理装置の処理内容を概念的に説明した図である。
【図３】本発明の第１の実施の形態のパケット処理装置の構成例を示した図である。
【図４】本発明の第２の実施の形態のパケット処理装置の処理内容を概念的に説明した図である。
【図５】本発明の第２の実施の形態のパケット処理装置の構成例を示した図である。
【発明を実施するための形態】
【００２１】
以下、本発明を実施するための形態（以下、実施の形態という）について、第１の実施の形態および第２の実施の形態に分けて説明する。なお、以下の説明において、各実施の形態のパケット処理装置１００（図３参照）の処理対象パケットは、例えば、IP（Internet Protocol）パケットであるものとする。パケット処理装置１００は、例えば、DPI(Deep Packet Inspection)装置や従量課金向けのパケットカウント装置である。
【００２２】
＜第１の実施の形態＞
まず、図２を用いて、第１の実施の形態のパケット処理装置１００の処理概要を説明する。パケット処理装置１００は、パケットの入力を受け付けると、ハッシュ関数を用いて入力パケットの評価箇所に対応するハッシュ値を計算する。例えば、パケット処理装置１００は、HTTP（HyperText Transfer Protocol）で取得するURI（Uniform Resource Identifier）の「www.example.com」のハッシュ値を計算する。そして、パケット処理装置１００は、このハッシュ値をキーとしてハッシュテーブル１６０から入力パケットに対し実行すべき処理（アクション）を検索する。例えば、入力パケットの評価箇所に「www.example.com」が記載されている場合、「www.example.com」に対するハッシュ値として「0011」を計算する。そして、パケット処理装置１００は、ハッシュ値「0011」をキーとして、ハッシュテーブル１６０を検索し、このハッシュ値「0011」に対応するレコードが１つであれば、そのレコードに対するアクションを実行する。一方、図２に例示するようにハッシュ値「0011」に対応するレコードが複数あるとき、このレコードの中から「www.example.com」のレコードを線形検索する。つまり、パケット処理装置１００はコリジョンレコードの中から「www.example.com」のレコードを上から順に検索する。そして、パケット処理装置１００は、ハッシュテーブル１６０にそのレコードに対し実行すべきアクションを見つけると、このアクションを実行する。
【００２３】
ここでパケット処理装置１００は、ハッシュテーブル１６０の検索を行うたび、ハッシュテーブル１６０でヒットしたレコードの統計値の値を更新する。例えば、パケット処理装置１００は、ハッシュテーブル１６０から「www.example.com」のレコードを検索したとき、この「www.example.com」の統計値（検索頻度）の値を１加算する。このようにすることで、ハッシュテーブル１６０には各レコードの検索頻度が記録されることになる。
【００２４】
その後、パケット処理装置１００は、所定期間ごとに、このハッシュテーブル１６０のコリジョンレコード（符号２０１参照）検索頻度順にレコードをソートする。例えば、ハッシュ値「0011」に対応するレコードが「computer.example.net、web.example.org、cccc.example.jp、www.example.com」であり、それぞれの検索頻度が「8,21,1,89」であった場合、パケット処理装置１００は、これらのレコードを検索頻度が高い順に「www.example.com、web.example.org、computer.example.net、cccc.example.jp」という順に並べ替える。これにより、パケット処理装置１００がハッシュテーブル１６０の検索時に、コリジョンが発生し、線形検索を行った場合でも、すぐに該当レコードを発見できる可能性が高くなる。これにより、ハッシュテーブル１６０の検索時間を低減できる。
【００２５】
＜構成＞
次に、パケット処理装置１００を詳細に説明する。図３に示すようにパケット処理装置１００は、パケット入力部１１０と、ハッシュ値計算部１２０と、パケット処理部１３０と、周期制御部１４０と、ソート部１５０と、ハッシュテーブル１６０と、パケット出力部１７０とを備える。以下、各部の機能を説明する。
【００２６】
パケット入力部１１０は、入力パケットのチェックサム等を評価した後、この入力パケットをハッシュ値計算部１２０に転送する。
【００２７】
ハッシュ値計算部１２０は、入力パケットの評価箇所（例えば、DPI装置の場合はHTTPで取得するURIが相当する。従量課金向けのパケットカウント装置の場合は、課金ユーザを識別可能な送信元または宛先のIPアドレス等が相当する)のハッシュ値を計算する。
【００２８】
パケット処理部１３０は、ハッシュ値計算部１２０で計算された入力パケットのハッシュ値をキーとして、ハッシュテーブル１６０から、この入力パケットに対し実行すべきアクションを検索して実行し、パケット出力部１７０へ出力する。また、パケット処理部１３０は、ハッシュテーブル１６０の検索を行うごとにハッシュテーブル１６０における当該入力パケットのレコードの統計値を更新する。
【００２９】
このパケット処理部１３０は、ハッシュ値比較部１３１と、アクション実行部１３２と、統計情報更新部１３３とを備える。
【００３０】
ハッシュ値比較部１３１は、ハッシュ値計算部１２０で計算した入力パケットのハッシュ値をキーとして、ハッシュテーブル１６０からこの入力パケットの評価箇所の内容（入力値）と同じ内容のレコードを検索し、このレコードに対応付けられた（ハッシュテーブル１６０で指定された）アクションを検出する。ここで、ハッシュ値比較部１３１が、ハッシュ値をキーとした検索でコリジョンレコードを検出した場合（つまり、同じハッシュ値に対し、複数のレコードを発見した場合）、線形検索を行い、ハッシュテーブル１６０上にマッチするレコードを検索する。ここで、ハッシュ値比較部１３１が、ハッシュテーブル１６０上にマッチするレコードを見つけた場合、指定されたアクションを実行するようアクション実行部１３２へ指示する。一方、ハッシュ値比較部１３１において、マッチするレコードがないと判断した場合、アクション実行部１３２に対し、設定されたデフォルトのアクションを実行するよう指示する。例えば、パケット処理装置１００がDPI装置の場合、ハッシュ値比較部１３１は、アクション実行部１３２に対し、パケットをそのまま転送するよう指示する。また、パケット処理装置１００がパケットカウント装置の場合、ハッシュ値比較部１３１は、アクション実行部１３２に対し、パケットを廃棄するよう指示する。なお、ハッシュテーブル１６０が統計情報更新部１３３により更新されたとき、ハッシュ値比較部１３１は、この更新されたハッシュテーブル１６０を検索する。つまり、ハッシュ値比較部１３１は、更新後のハッシュテーブル１６０から、入力パケットの入力値のハッシュ値に対応する１以上のレコードから入力値と同じ値を持つレコードを検索し、このレコードに対応するアクションを検出する。
【００３１】
アクション実行部１３２は、ハッシュ値比較部１３１から指示されたアクションを入力パケットに対し実行する。例えば、アクション実行部１３２は、パケットを廃棄したり、そのまま転送したり、所定の装置へリダイレクトしたりする。
【００３２】
統計情報更新部１３３は、ハッシュテーブル１６０においてレコードの検索がされるたびに、ハッシュテーブル１６０における当該レコードの統計値を更新する。ここでの統計値は、検索頻度等であり、例えば、ハッシュ値比較部１３１において、入力値と同じ値を持つレコードを発見したとき、ハッシュテーブル１６０におけるレコードの統計値を加算することで更新する。
【００３３】
周期制御部１４０は、ソート部１５０（および後記する図５のソート部１５０Ａ、非該当レコードバッファ統計部１８２）がハッシュテーブル１６０のコリジョンレコードをソートするときの契機を与える。
【００３４】
ソート部１５０は、ハッシュテーブル１６０において、同じハッシュ値に対応する２以上のレコードがある（つまりコリジョンレコードがある）エントリリストそれぞれについて、エントリリスト内のレコードを検索頻度が高い順にソートして、ハッシュテーブル１６０の更新を行う。また、ソート部１５０はソートを行った後、ハッシュテーブル１６０における検索頻度の値をクリアする。
【００３５】
ハッシュテーブル１６０は、ハッシュ値ごとに、このハッシュ値に対応するレコードと、レコードを持つパケットに対し実行すべきアクションと、ハッシュ値に対応するレコードの統計値（例えば、検索頻度）とを対応付けて示した情報である。例えば、図３に示すハッシュ値「0011」に対応するレコードは「computer.example.net、web.example.org、cccc.example.jp、www.example.com」であり、それぞれのレコードに対し実行すべきアクションは「Redirect to A、Discard、Redirect to B、Redirect to C」であり、統計値は「8、21、1、89」であることを示す。なお、図３に例示したハッシュテーブル１６０は、ソート部１５０によるソートがまだ行われていない状態であり、ソート後は、図２の符号２０１に示すように各レコードが統計値の高いものから上に並んだ状態になる。なお、ここではハッシュテーブル１６０における各レコードの統計値として、検索頻度を用いることとしたが、検索頻度以外の統計値、例えば、検索ヒット回数等を用いるようにしてもよい。なお、パケット処理装置１００がパケットカウント装置である場合、パケットのカウンタ情報そのものをハッシュテーブル１６０の統計情報として用いるようにしてもよい。
【００３６】
パケット出力部１７０は、アクション実行部１３２でアクション実行後のパケットを整形し、IP網等経由で外部装置へ出力する。
【００３７】
このようなパケット処理装置１００によれば、ハッシュテーブル１６０におけるコリジョンレコードは検索頻度が高い順にソートされているので、コリジョンレコードを線形検索する場合でも、線形検索による検索を高速に行える確率が高くなる。
【００３８】
なお、前記したパケット入力部１１０およびパケット出力部１７０は、IP網等のネットワーク経由で通信を行うための通信インタフェースや入出力インタフェースから構成される。また、ハッシュ値計算部１２０と、パケット処理部１３０と、周期制御部１４０と、ソート部１５０とは、このパケット処理装置１００が備えるＣＰＵ（Central Processing Unit。図示省略）によるプログラム実行処理や、専用回路等により実現される。さらに、ハッシュテーブル１６０は、パケット処理装置１００の記憶部（図示省略）に記憶される。この記憶部は、ＲＡＭ（Random Access Memory）、ＨＤＤ（Hard Disk Drive）、フラッシュメモリ等の記憶媒体から構成される。なお、パケット処理装置１００をプログラム実行処理により実現する場合、記憶部には、このパケット処理装置１００の機能を実現するためのプログラムが格納される。
【００３９】
＜第２の実施の形態＞
次に、図４を用いて、第２の実施の形態の概要を説明する。第２の実施の形態のパケット処理装置１００Ａ（図５参照）は、ハッシュテーブル１６０のコリジョンレコードを検索しても、レコードがヒットしないパケット（非該当パケット）を所定の頻度以上で受信するようになった場合、ハッシュテーブル１６０にこの非該当パケットのレコードを登録することを特徴とする。以下、図５を参照しながら、パケット処理装置１００Ａの処理を簡単に説明する。
【００４０】
まず、このパケット処理装置１００Ａは、ハッシュテーブル１６０におけるコリジョンレコードが無制限に多くなることを回避する必要がある。このため、パケット処理装置１００Ａはコリジョンレコードの線形検索の結果、マッチしないパケットを受信した場合、ハッシュテーブル１６０に即座に登録せず、所定のサンプリングレートでパケットをサンプリングし、データ量を減らした上でバッファ（非該当レコードバッファ１６１）に蓄積する。そして、パケット処理装置１００Ａは所定のタイミングで、バッファ内の非該当レコードを集計し、それぞれの出現頻度（統計値）をカウントし、非該当レコードハッシュテーブル１６２に登録する。その後、パケット処理装置１００Ａは、非該当レコードハッシュテーブル１６２のレコードのうち、出現頻度が所定の閾値を超えるレコードを、ハッシュテーブル１６０に追加登録し、第１の実施の形態で述べたようなソート処理を行う。
【００４１】
このようにすることで、パケット処理装置１００Ａにおいて受信するパケットの傾向が変わった場合でも、ハッシュテーブル１６０の線形検索により検索時間が長くなってしまうことを抑制できる。
＜構成＞
パケット処理装置１００Ａを、図５を用いて詳細に説明する。前記した第１の実施の形態と同様の構成要素は、同じ符号を付して説明を省略する。パケット処理装置１００Ａは、第１の実施の形態のパケット処理装置１００（図３参照）の構成に非該当レコード蓄積処理部１８０と、サンプリングレート計算部１８１と、非該当レコードバッファ１６１と、非該当レコードバッファ統計部１８２と、非該当レコードハッシュテーブル１６２と、非該当レコード削除部１８３と、非該当レコードクリア部１８４とを付加した構成となっている。また、パケット処理装置１００Ａは、図３のソート部１５０に代えてソート部１５０Ａを備える。
【００４２】
非該当レコード蓄積処理部１８０と、サンプリングレート計算部１８１と、非該当レコードバッファ統計部１８２と、非該当レコード削除部１８３と、非該当レコードクリア部１８４とは、このパケット処理装置１００Ａが備えるＣＰＵ（図示省略）によるプログラム実行処理や、専用回路等により実現される。さらに、非該当レコードバッファ１６１および非該当レコードハッシュテーブル１６２用の記憶領域は、パケット処理装置１００Ａの備える記憶部（図示省略）の所定領域に用意される。
【００４３】
非該当レコード蓄積処理部１８０は、パケット処理部１３０におけるハッシュテーブル１６０のコリジョンレコードの線形検索の結果、入力パケットのハッシュ値に対応するレコードがないパケット（つまり、非該当レコードのパケット）を所定の頻度（出現頻度の閾値）以上で受信するようになったとき、この非該当レコードのパケットを所定のサンプリングレートでサンプリングする。そして、非該当レコード蓄積処理部１８０は、このサンプリングした入力パケットの入力値（レコード）と、入力値のハッシュ値とを対応付けて非該当レコードバッファ１６１（詳細は後記）に蓄積する。なお、非該当レコード蓄積処理部１８０が用いる非該当レコードのパケットの出現頻度の閾値は、非該当レコードバッファ１６１にデータがあふれないよう、非該当レコードバッファ１６１の記憶容量等に応じて設定される。
【００４４】
サンプリングレート計算部１８１は、非該当レコード蓄積処理部１８０における入力パケットのサンプリングレートを計算する。このサンプリングレート計算部１８１は、例えば、非該当レコードバッファ１６１に割り当てられた記憶容量が少ないほど、サンプリングレートを低くする。また、サンプリングレート計算部１８１は、非該当レコードのパケットの受信頻度が高いほど、サンプリングレートを低くする。このようにすることで、非該当レコードバッファ１６１に非該当レコードがあふれてしまうことを抑制できる。
【００４５】
非該当レコードバッファ１６１は、非該当レコードを蓄積する。この非該当レコードバッファ１６１は、例えば、図５に示すように、パケットの入力値（レコード）と、そのハッシュ値とを対応付けた情報を、当該パケットの受信順に蓄積したものである。
【００４６】
非該当レコードバッファ統計部１８２は、周期制御部１４０から指示されたタイミングで非該当レコードバッファ１６１における非該当レコードごとに、当該非該当レコードの出現頻度を集計する。そして、非該当レコードバッファ統計部１８２は、集計した非該当レコードの出現頻度が所定の閾値以上のレコードがあるとき、このレコードの出現頻度に、非該当レコード蓄積処理部１８０が用いたサンプリングレートの逆数を乗算した補正統計値を計算する。これにより、レコードの実際の出現頻度が分かる。その後、非該当レコードバッファ統計部１８２は、非該当レコードのハッシュ値ごとに、非該当レコードと、非該当レコードに対応するアクションと、計算した補正統計値（統計値）とを対応付けたエントリを非該当レコードハッシュテーブル１６２（後記）に格納する。なお、非該当レコードバッファ統計部１８２において用いる出現頻度の閾値は、ハッシュテーブル１６０におけるコリジョンレコードが無制限に大きくならないように調整された値とする。
【００４７】
非該当レコードハッシュテーブル１６２は、非該当レコードのハッシュ値ごとに、この非該当レコードと、この非該当レコードに対応するアクションと、この非該当レコードの補正統計値（統計値）とを示したテーブルである。
【００４８】
非該当レコード削除部１８３は、ハッシュテーブル１６０から検索頻度が所定の閾値に満たないエントリを削除する。
【００４９】
なお、ソート部１５０Ａは、周期制御部１４０から指示されたタイミングで非該当レコードハッシュテーブル１６２に格納されたエントリのうち、補正統計値が所定の閾値以上のエントリをハッシュテーブル１６０のコリジョンレコードに追加する。そして、ソート部１５０Ａは、第１の実施の形態で述べたとおり、コリジョンレコードのレコード群を出現頻度が高い順にソートする。
【００５０】
非該当レコードクリア部１８４は、ソート部１５０Ａにより非該当レコードのエントリがハッシュテーブル１６０のコリジョンレコードに追加されたとき、非該当レコードバッファ１６１および非該当レコードハッシュテーブル１６２をクリアする。
【００５１】
このようにすることで、パケット処理装置１００Ａにおいて、ハッシュテーブル１６０に登録されていないレコードを持つ入力パケットを頻繁に受信するようになった場合でも、ハッシュテーブル１６０に追加して登録し、出現頻度が高い順にソートするので、ハッシュテーブル１６０の検索時間が長くなってしまうことを抑制できる。
【００５２】
＜処理手順＞
次に、図５を参照しつつ、パケット処理装置１００Ａの処理手順を説明する。
【００５３】
まず、パケット処理装置１００Ａのパケット入力部１１０は、入力パケットのチェックサム等を評価した後、ハッシュ値計算部１２０に転送する（Ｓ１）。
【００５４】
ハッシュ値計算部１２０は、入力パケットの評価箇所のハッシュ値を計算する（Ｓ２）。
【００５５】
ハッシュ値比較部１３１は、ハッシュ値計算部１２０で計算された入力パケットのハッシュ値をキーとして、ハッシュテーブル１６０からこの入力パケットの評価箇所の内容（入力値）と同じ内容のレコードを検索し、このレコードに対応付けられた（指定された）アクションを検出する。ここで、ハッシュ値比較部１３１が、ハッシュ値をキーとした検索でコリジョンレコードを検出した場合（つまり、同じハッシュ値に対し、複数のレコードを発見した場合）、線形検索を行い、マッチするレコードを検索する。そして、ハッシュ値比較部１３１がマッチするレコードを見つけた場合、指定されたアクションの実行指示をアクション実行部１３２へ出力する。一方、マッチするレコードがない場合、このパケット処理部１３０に設定されたデフォルトのアクションの実行指示をアクション実行部１３２へ出力する（Ｓ３）。
【００５６】
アクション実行部１３２は、ハッシュ値比較部１３１から出力されたアクションを入力パケットに対し実行する。例えば、パケットを廃棄したり、パケット出力部１７０経由でそのまま転送したり、所定の装置へリダイレクトしたりする（Ｓ４）。
【００５７】
統計情報更新部１３３は、ハッシュテーブル１６０においてレコードの検索がされるたびに、ハッシュテーブル１６０における当該レコードの統計値を更新する。ここでの統計値は、例えば、検索頻度であり、例えば、ハッシュ値比較部１３１において、入力値と同じ値を持つレコードを発見したとき、ハッシュテーブル１６０におけるレコードの統計値を加算することで更新する（Ｓ５）。
【００５８】
非該当レコード蓄積処理部１８０は、ハッシュテーブル１６０にマッチするレコードがない入力パケット（非該当レコードの入力パケット）を所定の頻度以上で受信するようになったとき、この入力パケットを所定のサンプリングレートでサンプリングする。このサンプリングレートはサンプリングレート計算部１８１で計算された値である。そして、非該当レコード蓄積処理部１８０は、サンプリングした入力パケットのハッシュ値と入力パケットの評価箇所の内容（レコード）とを対応付けた情報を非該当レコードバッファ１６１に蓄積する（Ｓ６）。
【００５９】
例えば、サンプリングレート計算部１８１は、非該当レコードバッファ１６１の容量や、非該当レコードの入力パケットの受信頻度から、サンプリングレートをパケットの受信１００００回に１回と計算した場合を考える。この場合、非該当レコード蓄積処理部１８０は、非該当レコードのパケットを、受信１００００回に１回の頻度でサンプリングする。そして、非該当レコード蓄積処理部１８０は、このサンプリングしたパケットのハッシュ値とレコードとを非該当レコードバッファ１６１に蓄積する。
【００６０】
非該当レコードバッファ統計部１８２は、周期制御部１４０から指示されたタイミングで非該当レコードバッファ１６１における非該当レコードごとに、当該レコードの出現頻度を集計する。そして、非該当レコードバッファ統計部１８２は、集計した非該当レコードの出現頻度が所定の閾値以上のレコードがあるとき、このレコードの出現頻度に、非該当レコード蓄積処理部１８０が用いたサンプリングレートの逆数を乗算した補正統計値を計算する。その後、非該当レコードバッファ統計部１８２は、非該当レコードのハッシュ値ごとに、非該当レコードと、非該当レコードに対応するアクションと、計算した補正統計値（統計値）とを対応付けたエントリを非該当レコードハッシュテーブル１６２に格納する（Ｓ７）。
【００６１】
例えば、非該当レコードバッファ統計部１８２は、非該当レコードバッファ１６１に蓄積された非該当レコードの出現頻度を集計し、集計した非該当レコードの出現頻度が所定の閾値以上のレコードがあるとき、そのそれぞれのレコードの出現頻度に１００００を乗じて補正統計値を計算する。非該当レコードバッファ統計部１８２は、非該当レコードのハッシュ値ごとに、非該当レコードと、非該当レコードに対応するアクションと、計算した補正統計値（統計値）とを対応付けたエントリを非該当レコードハッシュテーブル１６２に格納する。
【００６２】
その後、ソート部１５０Ａは、周期制御部１４０から指示されたタイミングで非該当レコードハッシュテーブル１６２に格納されたエントリのうち、補正統計値（統計値）が所定の閾値以上のエントリをハッシュテーブル１６０のコリジョンレコードに追加する。そして、ソート部１５０Ａは、周期制御部１４０から指示されたタイミングでハッシュテーブル１６０の統計値が高い順にソートすることで更新する（Ｓ８）。
【００６３】
例えば、非該当レコードハッシュテーブル１６２のハッシュ値「0011」のレコード「dddd.example.co.jp」の統計値が「20」であり、前記した所定の閾値が「15」である場合、このレコードの統計値は閾値以上なので、ソート部１５０Ａは、ハッシュ値「0011」のレコード「dddd.example.co.jp」と統計値「20」とをハッシュテーブル１６０に追加する。そして、ソート部１５０Ａは、周期制御部１４０から指示されたタイミングでハッシュテーブル１６０の統計値が高い順にレコードをソートする。このようにすることで、ハッシュテーブル１６０に非該当レコードが追加され、かつ、この非該当レコードを含むコリジョンレコードについて統計値が高いものほど上位に配置されることになる。これにより、パケット処理装置１００Ａが、ハッシュテーブル１６０のコリジョンレコードにレコードがヒットしない入力パケット（非該当パケット）を所定の頻度以上で受信するようになった場合でも、すぐに検索ヒットする可能性を高めることができる。つまり、パケット処理装置１００Ａは、入力パケット（非該当パケット）を所定の頻度以上で受信するようになった場合でも、ハッシュテーブル１６０の検索時間が増加してしまうことを抑制できる。また、非該当レコードクリア部１８４は、ソート部１５０Ａにより、ハッシュテーブル１６０に非該当レコードのコリジョンレコードに追加されたとき、非該当レコードバッファ１６１および非該当レコードハッシュテーブル１６２をクリアする。
【００６４】
なお、非該当レコード削除部１８３は、周期制御部１４０から指示されたタイミングでハッシュテーブル１６０から検索頻度が所定の閾値に満たないエントリを削除する（Ｓ９）。これにより、ハッシュテーブル１６０の限られた記憶容量を有効活用できる。
【符号の説明】
【００６５】
１００，１００Ａ  パケット処理装置
１１０  パケット入力部
１２０  ハッシュ値計算部
１３０  パケット処理部
１３１  ハッシュ値比較部
１３２  アクション実行部
１３３  統計情報更新部
１４０  周期制御部
１５０，１５０Ａ  ソート部
１６０  ハッシュテーブル
１６１  非該当レコードバッファ
１６２  非該当レコードハッシュテーブル
１７０  パケット出力部
１８０  非該当レコード蓄積処理部
１８１  サンプリングレート計算部
１８２  非該当レコードバッファ統計部
１８３  非該当レコード削除部
【図１】
2014036369.tif 000003
【図２】
2014036369.tif 000004
【図３】
2014036369.tif 000005
【図４】
2014036369.tif 000006
【図５】
2014036369.tif 000007