(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022089049
(43)【公開日】2022-06-15
(54)【発明の名称】パケット識別装置、パケット処理装置、パケット識別方法、及びプログラム
(51)【国際特許分類】
H04L 45/74 20220101AFI20220608BHJP
【FI】
H04L12/741
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2020201270
(22)【出願日】2020-12-03
(71)【出願人】
【識別番号】399035766
【氏名又は名称】エヌ・ティ・ティ・コミュニケーションズ株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】小原 泰弘
(72)【発明者】
【氏名】上野 幸杜
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA04
5K030KA05
5K030LB05
5K030MA04
(57)【要約】
【課題】ネットワークにおける様々な場所で容易に実装することが可能なパケット識別技術を提供する。
【解決手段】パケット識別装置において、パケットを入力する入力部と、前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別部と、前記ルール集合を出力する出力部とを備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
パケットを入力する入力部と、
前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別部と、
前記ルール集合を出力する出力部と
を備えるパケット識別装置。
【請求項2】
前記マッチルールビットマップの各ビットが、1つのルールIDに対応する
請求項1に記載のパケット識別装置。
【請求項3】
前記マッチルールビットマップは、1つのビットも属性にマッチしない所定サイズのビットマップであるアンマッチビットマップを省略する連長圧縮を適用した圧縮ビットマップである
請求項1又は2に記載のパケット識別装置。
【請求項4】
前記論理演算は論理積演算であり、前記パケット識別部は、前記複数の属性の圧縮ビットマップ間で、少なくとも1つの属性に前記アンマッチビットマップが存在する場合に、当該アンマッチビットマップのビット位置における論理積演算をスキップする
請求項3に記載のパケット識別装置。
【請求項5】
前記パケット識別部は、各オフセットに該当する次セグメントの位置を記載したジャンプテーブルを参照することにより、前記スキップを行う
請求項4に記載のパケット識別装置。
【請求項6】
請求項1ないし5のうちいずれか1項に記載のパケット識別装置を備えるパケット処理装置。
【請求項7】
パケット識別装置が実行するパケット識別方法であって、
パケットを入力する入力ステップと、
前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別ステップと、
前記ルール集合を出力する出力ステップと
を備えるパケット識別方法。
【請求項8】
コンピュータを、請求項1ないし5のうちいずれか1項に記載のパケット識別装置における各部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パケットの属性にマッチするルールを選択するパケット識別技術に関連するものである。
【背景技術】
【0002】
ルータや、ミドルボックス(FW、VPN、DPI等)では、パケット識別(Packet Classification)技術が必要であり、パケット識別に関する様々な技術が提案されている。例えばTCAMで高速にパケット識別を行うことができるが、発熱問題や、社会からのソフトウェア化の要望から、新しいソフトウェアアルゴリズムの技術が求められている。しかしながら、現状では、TCAMでは200Mlps程度、ソフトウェアアルゴリズムでは200Klps程度と、約1000倍の性能の開きがある。
【0003】
従来のパケット識別ソフトウェアアルゴリズムは、性能の遅さに加え、アルゴリズムの複雑さが問題であり、実装が困難、最適化・高速化が困難、更なる多次元化が困難であるという問題点がある。
【先行技術文献】
【特許文献】
【0004】
【非特許文献】
【0005】
【非特許文献1】https://sdm.lbl.gov/fastbit/、令和2年11月9日検索
【発明の概要】
【発明が解決しようとする課題】
【0006】
パケットの識別は、クライアント、ルータ、ミドルボックスサーバ、アプリケーションサーバ、それらをサポートするハイパーバイザ等のネットワークのあらゆる場所で必要とされる可能性が高い。しかし、従来技術のように複雑で重い処理を必要とするパケット識別の技術は、必要な場所に挿入することが困難である場合がある。
【0007】
本発明は上記の点に鑑みてなされたものであり、ネットワークにおける様々な場所で容易に実装することが可能なパケット識別技術を提供することを目的とする。
【課題を解決するための手段】
【0008】
開示の技術によれば、パケットを入力する入力部と、
前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別部と、
前記ルール集合を出力する出力部と
を備えるパケット識別装置が提供される。
【発明の効果】
【0009】
開示の技術によれば、ネットワークにおける様々な場所で容易に実装することが可能なパケット識別技術が提供される。
【図面の簡単な説明】
【0010】
【
図1】本発明の実施の形態におけるパケット識別装置の構成図である。
【
図2】パケット識別装置を適用したパケット処理装置の構成の一例を示す図である。
【
図3】パケット識別装置の動作を説明するためのフローチャートである。
【
図4】各次元でマッチしたルール集合を示すfastbitから、パケットに対応するルール集合を求める処理の概要を示す図である。
【
図5】fastbitの構成を説明するための図である。
【
図7】次元間の論理積の計算の例を説明するための図である。
【
図8】論理積の計算手順の例を示すフローチャートである。
【
図9】次元間の論理積の計算の例を説明するための図である。
【
図10】パケット識別装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0011】
以下、図面を参照して本発明の実施の形態(本実施の形態)を説明する。以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下で説明する実施の形態に限られるわけではない。
【0012】
(装置構成例)
図1に、本実施の形態におけるパケット識別装置100の構成例を示す。
図1に示すように、本実施の形態におけるパケット識別装置100は、パケット識別部110、記憶部120、入力部130、出力部140を備える。
【0013】
本実施の形態におけるパケット識別装置100が実行するパケット識別処理とは、入力されたパケットの1以上の属性にマッチするルールを選択(決定)する処理である。
【0014】
記憶部120は、検索の対象となる検索対象データ(複数のルール)が格納されている。入力部130は、パケットを入力する。パケット識別部110は、記憶部120に格納されているデータを検索することにより、パケットの1以上の属性にマッチするルールを選択する。出力部140は、パケット識別部110により選択されたルール集合を出力する。パケット識別部110の処理の詳細については後述する。
【0015】
図2に、パケット識別装置100を、ルータ等のパケット処理装置200に適用する場合における、当該パケット処理装置200の構成例を示す。
【0016】
図2に示すように、パケット処理装置200は、パケット処理部210、ルール決定部220、及び複数のインタフェース(IF)を有する。パケット処理部210は、IFを介してパケットを受信し、ルール決定部220により決定されたルールに従ってパケットを処理し、宛先(ネクストホップ)に対応するIFからパケットを出力する。
図3には、パケットをIF-Aから受信し、IF-Bから出力する例が示されている。
【0017】
ルール決定部220は、
図1に示したパケット識別装置100に相当する。ルータのパケットフォワーディングを行う場合を例にとって説明すると、ルール決定部220は、ルールの集合に相当するルーティングテーブル(フォワーディングテーブル)を保持しており、パケット処理部210からパケットを受け取り、当該パケットの1以上の属性に基づきフォワーディングテーブルを検索することにより、当該パケットに対してマッチした1以上のルールを決定し、当該ルールの情報をパケット処理部210に出力する。
【0018】
パケット処理部210は、ルール決定部220により決定されたルールに従って、パケットを処理する。ここでの「ルール」は、パケットに対する処理内容であり、例えば、アドレス変換内容(ソースのローカルアドレスをグローバルアドレスに変換等)、パケットの送出先のインタフェース等である。
【0019】
なお、パケット識別装置100は、ルータに限られない様々な装置(機能)に適用可能である。例えば、クライアント端末、ミドルボックスサーバ、アプリケーションサーバ、それらをサポートするハイパーバイザ等に適用可能である。
【0020】
(パケット識別装置100の基本動作例)
次に、
図3のフローチャートを参照して、パケット識別装置100の基本的な動作例を説明する。
【0021】
<S101>
S101において、入力部130からパケットが入力される。
【0022】
<S102>
S102において、パケット識別部110は、記憶部120に格納されたルールの集合を検索することにより、入力されたパケットの1以上の属性のそれぞれについて、マッチする1以上のルールを選択する。
【0023】
パケットの属性については特定のものに限定されないが、本実施の形態におけるパケットの属性とは、始点IPアドレス(Src IP Addr)、終点IPアドレス(Dst IP Addr)、プロトコル番号(Proto)、始点ポート番号(Src Port)、終点ポート番号(Dst Port)の5つであり、これらは5-tuple等と呼ばれる。
【0024】
パケット識別部110は、各属性を検索の「次元」として扱うので、5-tupleを属性として使用する場合であれば5次元検索となる。パケットの属性として、5-tupleに加えて、又は5-tupleのうちの1以上の属性に代えて、TOS等を利用することも可能である。
【0025】
記憶部120に格納されている検索対象データは、基本的にはキーとルールからなる。キーは属性とのマッチングを行うための情報である。ただし、検索対象データのデータ構造は特定のデータ構造に限定されない。木構造(例:Poptrie(特許文献1))であってもよいし、配列構造であってもよいし、これら以外の構造であってもよい。
【0026】
パケット識別部110は、各次元の属性をキーとして、検索対象データを検索し、各次元の検索結果を表すビットマップを取得する。このビットマップは、マッチしたルール集合を表すビットマップなので、これをマッチルールビットマップと呼ぶことにする。
【0027】
マッチルールビットマップにおいて、1つのビットが1つのルールに対応する。説明の便宜上、ルールが全部で10個あるとし、各ルールがルールID=0、1、2、…、9で表されるものとする。また、マッチルールビットマップの最初のビットを0番目のビットとし、n番目のビットがルールID=nのルールに対応するものとする。また、マッチしたルールをビット1で表し、マッチしなかったルールをビット0で表すものとする。なお、ルールID=nのルールをルール#nと表記する場合がある。
【0028】
S102の検索の結果、例えば、Src IP Addrに対して、ルール#0、ルール#2、ルール#7、ルール#9がマッチしたとすると、Src IP Addrに対するマッチルールビットマップは、「1010000101」となる。例として、ここでは、下記のように各次元の属性に対するマッチルールビットマップが得られたものとする。
【0029】
Src IP Addr:1010000101
Dst IP Addr:0010000101
Proto: 0010110100
Src Port: 1010000101
Dst Port: 1010100111
<S103、S104>
S103において、パケット識別部110は、5つの次元間の論理積(logical AND)をとり、その結果を入力パケットに対する最終的なルール集合として出力部140から出力する。
【0030】
論理積なので、あるルールに関して、5つの次元のうち1つでも0があればそのルールについての結果は0(マッチしない)になる。例えば、上記の例の場合、5つの次元間の論理積の結果となるルールマッチビットマップは、「0010000100」となる。従って、ルール#2とルール#7が、入力パケットに適用するルール集合として決定される。
【0031】
なお、本実施の形態では、マッチルールビットマップ間の論理演算として論理積の演算を行っているが、これは一例である。ルールの定義やパケット処理内容に応じて、マッチルールビットマップ間の論理演算として、論理和、排他的論理和等の演算を行うこととしてもよい。
【0032】
(実施例)
以下、実施例として、パケット識別装置100のより具体的な動作例を説明する。
【0033】
上述したS102の検索処理において、各次元の属性にマッチするルールを探す母集団となるルールのセット、つまり、パケット識別装置100の記憶部120に格納される検索対象データは、数万(10K)から数十万(100K)のルールエントリになることが想定される。
【0034】
例えば、パケット識別装置100として動作するミドルボックスは、受信するトラフィックのパケットひとつひとつに対して、数万程度のルールエントリから、マッチするエントリを探すという検索処理を実行する。受信するトラフィックは数十Gbpsレベルを想定し、処理のパケット頻度にして数Mppsから数十Mppsとなる。本実施例に係るパケット識別装置100はこのような高速な処理を行うことが可能である。
【0035】
本実施例では、ルール群を表現するビットマップ(前述したマッチルールビットマップ)として、fastbitを用いる。ただし、fastbitを用いることは必須ではない。fastbitを用いなくても本発明を実施することは可能である。例えば、連長(run-length)圧縮を用いる、fastbit以外のビットマップを本発明に適用してもよい。
【0036】
以下の説明において、検索のキーとなる属性は、前述した例と同様に、始点IPアドレス(Src IP Addr)、終点IPアドレス(Dst IP Addr)、プロトコル番号(Proto)、始点ポート番号(Src Port)、終点ポート番号(Dst Port)の5-tupleであるとする。
【0037】
図4に、fastbitを用いる場合における、S102とS103の処理のイメージを示す。
図4に示すとおり、S102において、パケット識別部110は、各次元の属性にマッチするルールを検索し、検索結果に対応するfastbitを取得する。
【0038】
より具体的には、本実施例では、ルールセットから予めfastbitを作成しておき、パケットが到着したら当該パケットから検索キーを作成し、検索キーを用いて検索対象のデータ構造を検索し、検索結果として、複数のfastbitを取得する。
【0039】
S103において、パケット識別部110は、上記のようにして取得された複数のfastbitに対して、次元間のfastbitの論理積(logical AND)を取って、最終的なパケットにマッチするルール集合を表すfastbitを生成する。
【0040】
各次元の属性に基づく検索の対象となる検索対象データのデータ構造として任意のデータ構造を利用することができる。例えば、Src IP Addr、Dst IP Addrの2つにはPoptrie(特許文献1)を使い、残りの次元については、配列(Proto[256]、src_port[65536]、dst_port[65536])を使用してもよい。
【0041】
fastbitは、非特許文献1等に開示されているデータ圧縮技術である。本実施例では、fastbitを、そのデータ圧縮技術により生成されたビットマップの意味に使用する。fastbitや、その他の連長圧縮を適用するビットマップを総称して圧縮ビットマップと呼んでもよい。
【0042】
fastbitは前述したマッチルールビットマップの一例であり、fastbitに対する処理方法は、前述した基本動作例において説明したマッチルールビットマップに対する処理方法と基本的に同じである。fastbitにおいても、fastbitが表すビットマップの各ビットが、1つのルールに対応する。ある次元の属性をキーとした検索により、あるルールがマッチした場合、その次元に対応するfastbitにおけるそのルールに対応するビットが1になる。マッチしない場合はそのビットは0である。次元間でfastbitの論理積を計算することで、目的の結果を得ることができる。
【0043】
ただし、fastbitでは、連長圧縮を用いて無駄な部分を省略できるため、スペース効率が良く、より効率的で高速な動作が可能である。例えば、数十万ルールの集合から検索された検索結果を1つのfastbitで表す場合において、0が連続する場合や、同じビットパターンが繰り返す場合に、ビットマップを省略できるので、数十万ビット長よりも大幅に少ないビット長で検索結果を表現することができる。
【0044】
<fastbitの内部構造例>
図5に、fastbitの内部構造例を示す。
図5に示すように、fastbitは、1以上のセグメント(segment)の配列である。
【0045】
各セグメントは、ビットマップ(bitmap)、オフセット(offset)、リピート長(repeat_len)を有する。ビットマップの各ビットは1つのルールに対応する。ビットマップのサイズは特定のサイズに限定されないが、例えば、64ビットである。ビットマップのサイズとして、64ビットの他、128ビット(gcc拡張)、256ビット(AVX-2)、512ビット(AVX-512)等、AND命令を実行できるレジスタのサイズの単位のサイズを採用してもよい。
図5には、一例として、32ビット長のビットマップが示されている。
【0046】
オフセットは、そのセグメントにおけるビットマップが、何個のビットマップの後のビットマップであるかを示す値である。リピート長は、そのセグメントのビットマップと同じパターンが何個連続するかを示す値である。
【0047】
本実施例では、全部の値が0であるビットマップはスキップできる。つまり、ビットマップの全体が0の場合は、連長圧縮によりセグメントごと省略できる。ビットマップが0xffffffff(全ルールが該当)等の特定のパターンを含み、それが連続する場合には、repeat_lenにより、連長圧縮される。
【0048】
例えば、簡単のために、ビットマップのサイズが4、fastbit=(セグメント[0],セグメント[1])、各セグメントの内容が下記のとおりである場合を想定する。
【0049】
セグメント[0]:ビットマップ=0010、オフセット=1、リピート長=1
セグメント[1]:ビットマップ=0110、オフセット=3、リピート長=2
この場合、上記のfastbitは、「0000|0010|0000|0110|0110」というビットマップ(圧縮なしの表現)に対応する。なお、ここでは分かり易くするために、4ビット毎に|を入れて示している。
【0050】
図6を参照して、本実施例の「オフセット」について例を用いて説明する。
図6(a)、(b)はいずれも、圧縮していないビット列全体(=ルール集合全体)のイメージを示している。また、ビット列全体が、所定サイズの複数のビットマップ(
図6の例では7個)からなることが示されている。
【0051】
図6(a)において、ビットマップAに着目した場合、ビットマップAのオフセットは2である。また、
図6(b)において、ビットマップAのオフセットは1であり、ビットマップBのオフセットは2である。ここで、ビットマップAのビット列とビットマップBのビット列が同じであるとすれば、ビットマップAとビットマップBを一つのセグメントで表すことができる。この場合、
図6(b)のビットマップAとビットマップBを表現するセグメントにおいては、オフセット=1、リピート長=2となり、「オフセット=2」は登場しないが、このような場合でも、本実施例では、あるビットマップの「オフセット」を、そのビットマップが、何個のビットマップの後にあるかを示すものとして使用する。
【0052】
fastbitにおける(ビットマップサイズ、オフセット、ビットマップ内のビット位置)と、ルールIDとの間には下記の関係がある。つまり、下記の関係式により、fastbitのビットマップにおける値が1のビットから、マッチしたルールのルールIDを特定できる。ビット位置とは、ビットマップの中の何番目のビットかを示す値であり、ビットマップの最初のビット位置の値は0である。また、リピート長が1よりも大きい場合には、そのリピート長を適用した後のビット位置となる。
【0053】
ルールID=ビットマップサイズ×オフセット+ビット位置
例えば、上述したビットマップサイズが4である場合の例において、セグメント[1]のビットマップにおける0番目のビットに対応するルールIDは、4×3+0=12となる。
【0054】
上述したように、fastbitにおいて、ルールにマッチしなかったルール集合(0のビット列)は、ビットマップのサイズの単位で省略できる。つまり、最後に該当するルールに対応するビットが存在するセグメントが最後のセグメントとなり、それ以降のセグメントを記述する必要はない。また、途中の非該当ルール集合も、省略(欠落)することができる。
【0055】
例えば、全部で100万のルールセットにおいて、ルールID=1024のルールだけがマッチしたことを表すfastbitは、1024bit目を含むセグメント1つだけを含む構成要素1の配列となる。
【0056】
このケースにおいて、ビットマップサイズが64である場合、検索結果を示すfastbitは、オフセットが16となるセグメントを1つだけ含み、そのセグメントのビットマップの最初のビット(0-th bit)が1となる。つまり、64×16=1024なので、該当セグメントの最初のビットがルールID=1024のルールに該当する。
【0057】
<次元間の論理積の計算について>
あるルールに対応する複数次元間の複数ビットのうち、1つでも0があれば結果は0になる。従って、複数次元間のfastbitのうち、ビットマップの値の全部が0になるセグメント(つまり省略されるセグメント)が存在する位置のビットマップについては論理積の演算を省略(スキップ)してよい。
【0058】
このことを、
図7を参照して説明する。
図7に示す例は、第1次元~第3次元の3つの次元を有する例である。また、説明のために、各次元において、圧縮していないビット列全体(=ルール集合全体)のイメージを示している。また、ビット列全体が、所定サイズの複数のビットマップからなることが示されている。
図7の3つのビット列において、縦方向に同じ位置にあるビットマップは、同じルールID集合に対応するビットマップである。
【0059】
また、
図7には、各ビットマップのオフセットが示されている。例えば、第1次元のセグメント0のビットマップのオフセットは1であり、第2次元のセグメント0のビットマップのオフセットは10000である。
【0060】
図7の例では、斜線が付けられているビットマップには、値が1のビットが含まれている。空白のビットマップは値が全部0である。値が全部0のビットマップはセグメントとしては省略されるので、第1次元のfastbitは、セグメント[0]とセグメント[1]からなり、セグメント[0]=(ビットマップ,オフセット=1,リピート長=1)、セグメント[1]=(ビットマップ,オフセット=10004,リピート長=1)である。
【0061】
第2次元、第3次元でも同様であり、第2次元のfastbitはセグメント[0]~[1]からなり、第3次元のfastbitもセグメント[0]~[1]からなる。
【0062】
論理積の計算において、オフセット0~オフセット10003の位置のビットマップに関しては、いずれかの次元において、全部の値が0のビットマップが存在するので、パケット識別部110は、オフセット0~オフセット10003のビットマップに関して、次元間のビットマップ間の論理積の計算をスキップする(計算を行わない)。
【0063】
従って、パケット識別部110は、最初に、第1次元~第3次元のセグメント[1]のビットマップ間で論理積を計算する。次も同様にして、オフセットが同一となる第1次元~第3次元のセグメントのビットマップ間で論理積を計算する。
【0064】
図8は、上記のような処理をフローチャートで示した図である。パケット識別部110は、
図8のフローチャートの手順で、論理積の計算を行う。
【0065】
パケット識別部110は、各次元において、S201において、全次元間でオフセットが同一のビットマップを有するセグメントの検出を行う。本例では、昇順の方向で処理を行なっているが、これは一例である。降順でも、順不同でも、オフセットが同一のセグメントが検出できればどのような順番の処理でも構わない。
【0066】
図7の例では、最初に、全次元でオフセット=10004となるビットマップを有するセグメントが検出される。具体的には、第1次元のセグメント[1]、第2次元のセグメント[1]、第3次元のセグメント[1]が該当する。
【0067】
S202において、パケット識別部110は、オフセットが同一のビットマップ間で論理積を計算する。
【0068】
処理はS201に戻り、オフセットが同一のビットマップを有する次のセグメントの検出を行う。論理積演算対象のセグメントは存在しなければ、処理を終了する。
【0069】
図9は、論理積の演算の他の例を示している。
図9においても、第1次元、第2次元、及び第3次元の間における論理積の計算を示している。また、
図9において、横に長いセグメントは、リピート長が大きなセグメントのイメージを示しており、セグメント間の隙間は、全部が0のビットマップが存在すること(つまり、セグメントが省略されている)ことを示している。
【0070】
図9の例では、第1次元、第2次元、及び第3次元において、セグメント[0]のオフセットが同一(例えば0)であり、パケット識別部110は、第1次元、第2次元、及び第3次元それぞれのセグメント[0]のビットマップ間の論理積をとる。簡単のためにビットマップサイズが8であり、第1次元、第2次元、及び第3次元のビットマップがそれぞれ、00000100、10000100、01100101、であるとすると、論理積の結果は00000100となる。
【0071】
図9の例では、00000100が、論理積演算結果のfastbitにおけるセグメント[0]であることが示されている。
【0072】
第1~3次元でオフセットが一致したので論理積を実施したが、結果のビットマップが0であったので、計算結果のfastbitのセグメント[1]としては記載されなかった、ということを
図9では表している。パケット識別部110は、論理積の演算の後、前述したように論理積演算のスキップを行って、次に、次元間でオフセットが同一であるセグメントとして、第1次元のセグメント[3]、第2次元のセグメント[3]、及び第3次元のセグメント[3]を検出し、それらのビットマップ間で論理積をとる。ビットマップサイズが8であり、第1次元、第2次元、及び第3次元のビットマップがそれぞれ、00100001、11100000、00101100、であるとすると、論理積の結果は00100000となる。
【0073】
図9の例では、00100000が、論理積演算結果のfastbitにおけるセグメント[1]であることが示されている。
【0074】
全次元でオフセットが同一のビットマップを有するセグメントを特定する処理(例:
図7における、第1次元のセグメント1、第1次元のセグメント1、第3次元のセグメント1を特定)に関しては、例えば、オフセット0から順番に、各次元でセグメント有無のチェックを行うことにより実行してもよいし、予めテーブル(ジャンプテーブルと呼ぶ)を計算し、そのジャンプテーブルを参照することで実行してもよい。
【0075】
ジャンプテーブルに関して、
図7を例にとって説明する。パケット識別部110は、各fastbitについて、独立に、オフセットの値が与えられたときに、次に対象とすべきセグメントの値(つまり、少なくとも1つの1があるビットマップのセグメント)を事前に計算する。例えば、
図7の第1次元のfastbitについて、オフセット2を調査するのであれば、オフセット2~10003は該当しないので(つまり、全部が0のビットマップに該当するため)、セグメント[1](オフセット10004)までスキップできることを、事前に計算できる。このように使える事前計算の結果を保持するのがジャンプテーブルである。
【0076】
例えば、
図7の例において、第1次元のfastbitでは、オフセット0->セグメント[0](オフセット1)、オフセット2、....10002、10003->セグメント[1](オフセット10003)という内容を持つジャンプテーブルとなる。ここで、「オフセット2、....10002、10003->セグメント[1](オフセット10003)」は、オフセット2、....10002、10003のいずれを見る場合(参照する場合)でも、スキップの先がオフセット10004であることを意味する。例えば、最初にオフセット2を参照した場合、一気にオフセット10004までスキップする。
【0077】
第2次元のfastbitでは、オフセット0、1、、、、9999->セグメント[0](オフセット10000)、オフセット10001、10002、10003->セグメント[1](オフセット10004)という内容を持つジャンプテーブルとなり、同様にして、第3次元のfastbitでは、オフセット1、.....、10003->セグメント[1](オフセット10004)の内容を持つジャンプテーブルとなる。
【0078】
ジャンプテーブルを用いて、論理積を取るために同一オフセットを持つセグメントを探すときの動作例を、
図7を参照して説明する。
【0079】
パケット識別部110は、まず、各次元のカレントセグメントを各次元のセグメント[0]とし、各次元のセグメント[0]のオフセットを調べる。第1次元のオフセット=1、第2次元のオフセット=10000、第3次元のオフセット=0であるので、これらのうちの最大値が、第2次元のオフセット=10000であることを検知する。
【0080】
パケット識別部110は、オフセットを1ずつ検索することなく、最大のオフセットである10000まで飛ぶ。第1次元のジャンプテーブルを参照することにより、オフセット10000から次のセグメントがセグメント[1](オフセット10004)であることがわかり、そこまで飛んで、第1次元のカレントセグメントをセグメント[1]とする。
【0081】
同様にして、第3次元のジャンプテーブルを参照することにより、オフセット10000から次のセグメントがセグメント[1](オフセット10004)であることがわかり、そこまで飛んで、第3次元のカレントセグメントをセグメント[1]とする。
【0082】
現在の第1~第3次元のカレントセグメントは、第1次元=セグメント[1]、第2次元=セグメント[0]、第3次元=セグメント[1]である。これらのセグメントのオフセットは同一ではないので、上記と同様に処理を進め、次の第1次元~第3次元のカレントセグメントは、第1次元=セグメント[1]、第2次元=セグメント[1]、第3次元=セグメント[1]となる。これらのオフセットは同一(10004)なので、論理積演算を実行する。
【0083】
その後、第1次元=セグメント[2]、第2次元=セグメント[2]、第3次元=セグメント[2]をカレントセグメントとして、上記と同様の処理が進められる。
【0084】
<計算量について>
本実施例において、パケット識別部110は、次元毎の検索処理と、次元間の検索結果の論理積演算を行うが、次元間の検索結果の論理積演算が最も重い(時間のかかる)処理となる。
【0085】
すなわち、次元毎の検索の計算量は、O(log N)(木の場合)もしくはO(1)(配列の場合)であるが、論理積演算の計算量については、N(数十万ルールセット)の中で、マッチするルール数がMであるとすると、O(M)となる。ルール数が増えればマッチするルール数も増えていく(一定の割合でルールはマッチする、つまりN=c*M)とすると、論理積演算の計算量はO(N)となる。本実施例では、この大きい計算量の処理を、できるだけ最適化して高速化することが可能である。
【0086】
(ハードウェア構成例)
パケット識別装置100は、専用のハードウェアで実現してもよいし、汎用のコンピュータとソフトウェアで実現してもよい。汎用のコンピュータを使用する場合において、パケット識別装置100は、コンピュータに内蔵されるCPUやメモリ等のハードウェア資源を用いて、パケット識別装置100で実施される処理に対応するプログラムを実行することによって実現することが可能である。
【0087】
上記プログラムは、コンピュータが読み取り可能な記録媒体(可搬メモリ等)に記録して、保存したり、配布したりすることが可能である。また、上記プログラムをインターネットや電子メール等、ネットワークを通して提供することも可能である。
【0088】
図10は、上記コンピュータのハードウェア構成例を示す図である。
図10のコンピュータは、それぞれバスBで相互に接続されているドライブ装置1000、補助記憶装置1002、メモリ装置1003、CPU1004、インタフェース装置1005、表示装置1006、入力装置1007、出力装置1008等を有する。なお、これらのうち、一部の装置を備えないこととしてもよい。例えば、表示を行わない装置は、表示装置1006を備えなくてもよい。
【0089】
当該コンピュータでの処理を実現するプログラムは、例えば、CD-ROM又はメモリカード等の記録媒体1001によって提供される。プログラムを記憶した記録媒体1001がドライブ装置1000にセットされると、プログラムが記録媒体1001からドライブ装置1000を介して補助記憶装置1002にインストールされる。但し、プログラムのインストールは必ずしも記録媒体1001より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置1002は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0090】
メモリ装置1003は、プログラムの起動指示があった場合に、補助記憶装置1002からプログラムを読み出して格納する。CPU1004は、メモリ装置1003に格納されたプログラムに従って、パケット識別装置100に係る機能を実現する。インタフェース装置1005は、ネットワークに接続するためのインタフェースとして用いられる。表示装置1006はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置1007はキーボード及びマウス、ボタン、又はタッチパネル等で構成され、様々な操作指示を入力させるために用いられる。出力装置1008は演算結果を出力する。
【0091】
(実施の形態の効果)
本実施の形態に係るパケット識別装置100では、ルールIDを1ビットとして扱うビットマップに対する論理演算を行うというシンプルなアルゴリズムでパケット識別を実現しているので、高速であり、ネットワークにおける様々な場所で容易に実装することが可能である。
【0092】
また、本実施の形態に係るパケット識別装置100により、CPUレジスタ長等の基盤アーキテクチャの性能改善を比較的容易に実現できる。また、シンプルなアルゴリズムを用いるので、拡張性、最適可能性が高く、ルールの検索結果をビットマップで表現できればよいので、複雑なポリシーをシンプルに実現できる(例えば、7-9等、2の冪乗のバウンダリにそぐわない範囲のルール等も容易に実現できる)。また、検索の次元を増やすことも容易に実現可能である。
【0093】
(実施の形態のまとめ)
本明細書には、少なくとも下記各項のパケット識別装置、パケット処理装置、パケット識別方法、及びプログラムが開示されている。
(第1項)
パケットを入力する入力部と、
前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別部と、
前記ルール集合を出力する出力部と
を備えるパケット識別装置。
(第2項)
前記マッチルールビットマップの各ビットが、1つのルールIDに対応する
第1項に記載のパケット識別装置。
(第3項)
前記マッチルールビットマップは、1つのビットも属性にマッチしない所定サイズのビットマップであるアンマッチビットマップを省略する連長圧縮を適用した圧縮ビットマップである
第1項又は第2項に記載のパケット識別装置。
(第4項)
前記論理演算は論理積演算であり、前記パケット識別部は、前記複数の属性の圧縮ビットマップ間で、少なくとも1つの属性に前記アンマッチビットマップが存在する場合に、当該アンマッチビットマップのビット位置における論理積演算をスキップする
第3項に記載のパケット識別装置。
(第5項)
前記パケット識別部は、各オフセットに該当する次セグメントの位置を記載したジャンプテーブルを参照することにより、前記スキップを行う
第4項に記載のパケット識別装置。
(第6項)
第1項ないし第5項のうちいずれか1項に記載のパケット識別装置を備えるパケット処理装置。
(第7項)
パケット識別装置が実行するパケット識別方法であって、
パケットを入力する入力ステップと、
前記パケットの複数の属性のそれぞれについて、検索対象データを検索し、属性にマッチしたルール集合を表すマッチルールビットマップを取得し、前記複数の属性のマッチルールビットマップ間で論理演算を行うことにより、前記パケットに適用するルール集合を決定するパケット識別ステップと、
前記ルール集合を出力する出力ステップと
を備えるパケット識別方法。
(第8項)
コンピュータを、第1項ないし第5項のうちいずれか1項に記載のパケット識別装置における各部として機能させるためのプログラム。
【0094】
以上、本実施の形態について説明したが、本発明はかかる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0095】
100 パケット識別装置
110 パケット識別部
120 記憶部
130 入力部
140 出力部。
200 パケット処理装置
210 パケット処理部
220 ルール決定部
1000 ドライブ装置
1001 記録媒体
1002 補助記憶装置
1003 メモリ装置
1004 CPU
1005 インタフェース装置
1006 表示装置
1007 入力装置
1008 出力装置