(57)【特許請求の範囲】
【請求項１】
パケットに含まれ該パケットのフローの識別に使用される検索項目(DA,SA)をもとに、前記検索項目と該検索項目により識別されるフローのパケットに対して行う処理とを組み合わせたルール(11〜14)を複数備えるルール表(10)を検索し、前記パケットに対して行う処理を次定するフロー識別検索装置であって、
前記各ルールに含まれる検索項目を予め定めた複数のグループ(15,16)にグループ化したグルーブ化検索項目と、該グループ化検索項目が属するグループ及びルールをそれぞれ表す検索回数情報及び検索関連情報(Flag,Srch.Tag)とを組み合わせて保持する連想メモリ(621)と、
前記連想メモリに入力したグループ化検索項目，検索回数情報及び検索関連情報の組み合わせが該連想メモリで検索された際に行う処理と、前記連想メモリを次に検索する際に検索するルールを表す照合関連情報(Assoc.Tag)とを、前記連想メモリが保持する前記組み合わせに対応して保持する検索結果記憶装置(623)と、
前記ルール表上の各ルールに含まれる前記検索項目をグループ化して前記グループ化検索項目を生成し、生成された各グループ化検索項目が属しているルール及びグループをもとに前記検索回数情報、前記検索関連情報及び前記照合関連情報を生成して、生成された前記検索回数情報、検索関連情報及びグループ化検索項目を組み合わせて前記連想メモリに格納するとともに、生成された前記照合関連情報と該照合関連情報が示すルールに含まれる前記処理とを組み合わせて前記検索結果記憶装置に格納し、入力されたパケットから前記検索項目を取り出して前記グループ化検索項目を生成し、検索すべきグループ及びルールを表す検索回数情報及び検索関連情報と該グループに対応する前記グループ化検索項目とを前記連想メモリヘ入力して検索を行い、検索された前記連想メモリ上の組み合わせに対応して前記検索結果記憶装置が保持する前記処理及び前記照合関連情報を取得し、該処理として前記パケットに対して行う処理内容が得られるまで、次に検索すべきグループを表す検索回数情報と該グループに対応する前記グループ化検索項目と取得した前記照合関連情報とを前記連想メモリに入力して再び前記検索を行う処理装置(622)と
を有することを特徴とするフロー識別検索装置。
【請求項２】
請求項１記載のフロー識別検索装置において、前記処理装置は、前記各グループを識別するためのグループ番号を前記検索回数情報として前もって前記各グループに付与し、前記グループ化検索項目と該グループ化検索項目が属するグループに付与された前記グループ番号とを組み合わせて前記連想メモリに格納することを特徴とするフロー識別検索装置。
【請求項３】
請求項１記載のフロー識別検索装置において、
前記処理装置は、前記各ルールを識別するためのルール番号を前記検索関連情報及び前記照合関連情報としてルール毎に決定して、入力されたパケットに関して最初に検索の対象となるグループに関しては、前記グループ化検索項目と、任意のルール番号に一致するデータが設定された前記検索関連情報とを組み合わせて前記連想メモリに格納し、前記最初に検索の対象となるグループ以外の各グループに関しては、前記グループ化検索項目と、該グループ化検索項目が属するルールに付与された前記ルール番号とを組み合わせて前記連想メモリに格納することを特徴とするフロー識別検索装置。
【請求項４】
請求項３記載のフロー識別検索装置において、
前記処理装置は、前記連想メモリが保持する前記各組み合わせに関して前記連想メモリの検索を必要とする次のグループが存在する場合には、次に前記連想メモリを検索する際に検索すべきルールに付与されたルール番号と前記連想メモリの再検索を指示する処理とを組み合わせて前記検索結果記憶装置に格納し、前記各組み合わせに関して前記連想メモリの検索を必要とする次のグループが存在しない場合には、入力されたパケットに対して行うべき処理を前記検索結果記憶装置に格納することを特徴とするフロー識別検索装置。
【請求項５】
請求項１記載のフロー識別検索装置において、
前記処理装置は、前記各ルールに含まれる前記検索項目をグループ化する際、同一のグループに属する複数のグループ化検索項目が特定のデータに一致する可能性があるかどうかを調べ、一致する可能性がある場合には、該複数のグループ化検索項目のうち最も範囲が狭いグループ化検索項目を除く各グループ化検索項目について、該一致する可能性のあるグループ化検索項目の内容として前記最も範囲が狭いグループ化検索項目と同じ内容を持ち且つ該一致する可能性のあるグループ化検索項目以外のグループ化検索項目及び処理として各グループ化検索項目が属するルールと同じ内容を持つ新たなルールを生成して前記ルール表に追加し、該新たなルールが追加されたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納することを特徴とするフロー識別検索装置。
【請求項６】
請求項５記載のフロー識別検索装置において、
前記処理装置は、前記新たなルールに含まれる検索項目をグループ化する際、前記検索結果記憶装置に格納する前記照合関連情報を、前記最も範囲が狭いグループ化検索項目に対応して前記検索結果記憶装置に格納する照合関連情報と同じ内容に設定することを特徴とするフロー識別検索装置。
【請求項７】
請求項５記載のフロー識別検索装置において、
前記連想メモリは、入力された前記グループ化検索項目，前記検索回数情報及び前記検索関連情報の組み合わせが前記連想メモリに保持されている複数の組み合わせに一致する場合に、該複数の組み合わせが格納されている物理アドレスのうちの何れかを所定の基準に従い選択して検索結果として出力し、前記処理装置は、前記新たなルールが追加されたルール表を前記連想メモリ及び前記検索結果記憶装置に展開した後の検索時において、前記連想メモリに入力された前記グループ化検索項目，前記検索回数情報及び前記検索関連情報の組み合わせが前記連想メモリに保持されている複数の組み合わせに一致したときに、前記連想メモリが、該複数の組み合わせに含まれるグループ化検索項目のうち最も範囲の狭いグループ化検索項目を含む物理アドレスを検索結果として出力するように、前記新たなルールを前記ルール表上に挿入することを特徴とするフロー識別検索装置。
【請求項８】
請求項１記載のフロー識別検索装置において、
前記処理装置は、前記ルール表上におけるルールの中に、各ルールに含まれる検索項目の範囲が互いに重なり合う複数のルールが存在するかどうか調べ、該複数のルールが存在する場合には、該複数のルールのうち予め決められたルール以外の各ルールについて、該各ルールに含まれる検索項目の範囲から重なり合う範囲を除いて重なり合いのない範囲を求め、該重なり合いのない範囲に対応する新たなルールを生成して該各ルールを置き換え、該ルールの置き換えがなされたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納することを特徴とするフロー識別検索装置。
【請求項９】
請求項１記載のフロー識別検索装置において、
前記連想メモリの各物理アドレスに格納する前記検索回数情報，前記検索関連情報及び前記グループ化検索項目のビット幅の総和が前記連想メモリのビット幅に一致するように、前記検索項目がグループ化されていることを特徴とするフロー識別検索装置。
【請求項１０】
パケットに含まれ該パケットのフローの識別に使用される検索項目をもとに、前記検索項目と該検索項目により識別されるフローのパケットに対して行う処理とを組み合わせたルールを複数備えるルール表を検索し、前記パケットに対して行う処理を決定するフロー識別検索方法であって、
前記各ルールに含まれる検索項目を予め定めた複数のグループにグループ化したグループ化検索項目と、該グループ化検索項目が属するグループ及びルールをそれぞれ表す検索回数情報及び検索関連情報とを組み合わせて保持する連想メモリと、前記連想メモリに入力したグループ化検索項目，検索回数情報及び検索関連情報の組み合わせが前記連想メモリで検索されたときに行う処理と、前記連想メモリを次に検索する際に検索するルールを表す照合関連情報とを、前記連想メモリが保持する前記組み合わせに対応して保持する検索結果記憶装置とを用意するステップと、
前記ルール表上の各ルールに含まれる前記検索項目をグループ化して前記グループ化検索項目を生成し、生成された各グループ化検索項目が属しているルール及びグループをもとに前記検索回数情報、前記検索関連情報及び前記照合関連情報を生成して、生成された前記検索回数情報、検索関連情報及びグループ化検索項目を組み合わせて前記連想メモリに格納するとともに、生成された前記照合関連情報と該照合関連情報が示すルールに含まれる前記処理とを組み合わせて前記検索結果記憶装置に格納するステップと、
入力されたパケットから前記検索項目を取り出してグループ化を行い前記グループ化検索項目を生成するステップと、
最初に検索すべきグループに対応する前記グループ化検索項目と該グループを表す検索回数情報とを前記連想メモリヘ入力して検索を行わせるステップと、
前記連想メモリから出力される検索結果に対応して前記検索結果記憶装置に保持されている前記処理及び前記照合関連情報を取得するステップと、
取得した処理が前記連想メモリの再検索を示している場合には、次に検索すべきグループを表す検索回数情報，該グループに対応する前記グループ化検索項目及び取得した前記照合関連情報と同じ内容を持つ検索関連情報を前記連想メモリに入力して再度検索を行わせるステップと、
前記処理が入力されたパケットに対して行うべき処理内容を示している場合に、前記連想メモリに対する検索を終了させて該処理内容を出力するステップと
を有することを特徴とするフロー識別検索方法。
【請求項１１】
請求項１０記載のフロー識別方法において、
前記各ルールに含まれる前記検索項目をグループ化する際、同一のグループに属する複数のグループ化検索項目が特定のデータに一致する可能性があるかどうかを調べ、一致する可能性がある場合には、該複数のグループ化検索項目のうち最も範囲が狭いグループ化検索項目を除く各グループ化検索項目について、該一致する可能性のあるグループ化検索項目の内容として前記最も範囲が狭いグループ化検索項目と同じ内容を持ち且つ該一致する可能性のあるグループ化検索項目以外のグループ化検索項目及び処理として各グループ化検索項目が属するルールと同じ内容を持つ新たなルールを生成して前記ルール表に追加するステップと、該新たなルールが追加されたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納するステップとを有することを特徴とするフロー識別検索方法。
【請求項１２】
請求項１０記載のフロー識別方法において、
前記ルール表上におけるルールの中に、各ルールに含まれる検索項目の範囲が互いに重なり合う複数のルールが存在するかどうか調べ、該複数のルールが存在する場合には、該複数のルールのうち予め決められたルール以外の各ルールについて、該各ルールに含まれる検索項目の範囲から重なり合う範囲を除いて重なり合いのない範囲を求め、該重なり合いのない範囲に対応する新たなルールを生成して該各ルールを置き換えるステップと、該ルールの置き換えがなされたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納するステップとを有することを特徴とするフロー識別検索方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ルータ等のパケット転送装置においてパケット転送処理を行うに当たり、ＩＰパケット等のパケットに含まれるヘッダ情報などの情報によりそのパケットをどのように処理するかを識別するフロー識別検索装置および方法に関し、特に、パケットに対する処理を決定する際に検索するテーブル等の検索方法に関するものである。
【０００２】
【従来の技術】
従来、ＩＰルータ等のパケット転送装置においては、パケットのヘッダ（Ｐａｃｋｅｔ  ｈｅａｄｅｒ）に搭載された宛先アドレスを基に経路表を検索し、次の方路を決定していた。経路表には宛先アドレスと次の方路の関係が保持されている。このように従来のインターネット等のネットワークでは宛先アドレスのみを用いた単純な転送処理を行うだけであった。以下、この点について具体的な構成を例に挙げて説明する。
【０００３】
図１９はデータを運ぶＩＰパケットがどのように転送されるかを示すもので、図中、１はルータ、２−１，２−２，２−３はルータ１に接続されているネットワーク、３−１，３−２，３−３はルータ１とネットワーク２−１，２−２，２−３とを接続する信号線、４はＩＰパケットである。また、５−１，５−２，……５−Ａはネットワーク２−１に存在する端末、６−１，６−２，……６−Ｂはネットワーク２−２に存在する端末、７−１，７−２，……７−Ｃはネットワーク２−３に存在する端末である（なお、Ａ，Ｂ，Ｃは２以上の任意の整数である。）。
【０００４】
また、図１９におけるネットワークアドレスは慣例に従って８ビットずつ「．」で区切ってそれぞれを１０進数で記述しており、「／」の後の数値はＩＰアドレスのうち上位から何ビット分をネットワークアドレスとするかを表している。
【０００５】
ＩＰパケット４は宛先となる端末のＩＰアドレスとデータを有する。従来、ルータ１は入力されたＩＰパケット４のＩＰヘッダに記述された宛先ＩＰアドレスのみ検索し、どの信号線からＩＰパケットを送出するか決定していた。
【０００６】
しかしながら、近年、インターネットの広がりに伴い、宛先ＩＰアドレスのみを用いた従来の単純な転送処理だけは十分でなくなってきており、より高度な転送制御が必要となっている。例えば、データネットワークにおけるサービスの多様化やセキュリティーの問題に対応するため、パケットのＩＰヘッダに搭載された宛先ＩＰアドレスだけでなく送信元ＩＰアドレスやその他の情報（ＴＣＰ〔Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ〕／ＵＤＰ〔Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ〕ポート番号等）を検索し、また、ＩＰヘッダだけでなくパケット中の他のヘッダ情報を検索し、より詳細にパケットを識別してＱｏＳ（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ）制御やポリシー制御のための様々な処理を行うフロー識別に注目が集まっている。このように、フロー識別とはＱｏＳ，ＶＰＮ（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ），ファイヤーウォール等のＩＰ付加価値サービスを実現するために、ＩＰパケットのフロー毎に異なる処理を行うことを意味する。
【０００７】
ルータはフロー識別によりパケットを詳細に識別し、契約に応じた優先度を付けてパケットを送出するといった付加価値サービスを実現したり、悪意のユーザからのパケットを廃棄するといったことを実現する。より具体的には、特定のユーザからの特定のアプリケーションのパケット転送のＱｏＳを上げるためには、そのユーザの送信元アドレスとＴＣＰ／ＵＤＰポート番号を基にパケットの優先制御を行うことでＱｏＳ制御ができる。また、特定のアプリケーションの通信を禁止してパケットを廃棄する場合は、そのアプリケーションに割り当てられたＴＣＰ／ＵＤＰポート番号のパケットが転送されないようにフィルタリングすることでポリシー制御ができる。これらの処理に必要なのが次に述べるルールを格納したルール表（ポリシーテーブル（Ｐｏｌｉｃｙ  ｔａｂｌｅ）とも呼ぶ）検索である。
【０００８】
パケットを識別するための複数の検索項目（パケットヘッダのフィールド情報）としては、宛先アドレス（ＤＡ）、送信元アドレス（ＳＡ）、Ｐｒｏｔｏｃｏｌ（プロトコル識別子〔ＰＩＤ〕）、宛先ポート番号（ＤＰ）、送信元ポート番号（ＳＰ）、サービス差別化符号（ＤＳＣＰ；Ｄｉｆｆｅｒｅｎｔｉａｔｅｄ  Ｓｅｒｖｉｃｅ  Ｃｏｄｅ  Ｐｏｉｎｔ）の６つが代表的である。そして、これら検索項目に対応する情報とパケットに対する処理（Ａｃｔｉｏｎ）（最優先で送出、中優先で送出、低優先で送出、廃棄等）との組み合わせを以下、ルール（あるいはポリシー）と呼ぶが、ルールは主にネットワーク管理者によって決定され、ルータに設定される。
【０００９】
図２０は図１９のネットワーク構成を元にしたフロー識別におけるルールの一例を示すもので、図中、１０はルール表、１１，１２，１３，１４はルールである。ルール表１０は、パケットヘッダの複数のフィールド情報をキーとして検索し、そのパケットに対する処理を決めるために用いられる。本ルール１１〜１４を図１９のルータ１に設定した場合、例えばネットワーク２−１の端末５−１から、ネットワーク２−３の端末７−１へＰｒｏｔｏｃｏｌがＵＤＰで宛先ポート番号が１００のパケットを送出する場合、そのパケットの宛先アドレス、送信元アドレス、Ｐｒｏｔｏｃｏｌ、宛先ポート番号がルール１１の全検索項目と一致する（但し、ルール１１の宛先ポート番号は如何なる値にも一致するＤｏｎ’ｔｃａｒｅ）ので、ルータ１はルール１１の「処理」に記述された動作をそのパケットに行う。即ち、ルータ１はそのパケットを最優先で送出する。
【００１０】
図２１はＩＰパケットの構造と主なヘッダ情報の一例を示すものである。ＩＰパケットは、主としてローカルネットワークヘッダ２１、ＩＰヘッダ２２、上位ヘッダ（図ではＴＣＰヘッダ２３）、ユーザデータ（図ではＴＣＰデータ２４）、ローカルネットワークトレイラ２５からなるが、各ヘッダにはフロー識別に使用される可能性のある項目が複数存在する。
【００１１】
【発明が解決しようとする課題】
フロー識別の注目度が上がるに従って、より詳細にパケットを識別する必要が高まり、検索すべきヘッダの項目数も増えてきている。また、近年、導入が始まったＩＰｖ６では宛先ＩＰアドレス、送信元ＩＰアドレスはそれぞれ１２８ビット長を有し、従来のＩＰｖ４の３２ビットに比べてビット数が大幅に拡大した。検索項目の拡大とＩＰｖ６の導入によりフロー識別のための検索ビット数が増加し、現状４００ビット程度の検索が必要となってきている。
【００１２】
ルール表の検索においては、これらの全てのフィールド情報よりなるルール（エントリとも言う）の中から目的とするパケットのヘッダ情報に最も類似しあるいは一致するものを検索する必要が有る。このような検索を行う一つの方法としてルール表を上から下まで全検索する方法が考えられる。しかしながら、この方法ではルール表のルールが長くなる（ルールのビット数が多くなる）と、検索に多大の時間を要するという問題がある。
【００１３】
こうしたことから、従来、フロー識別検索方式としては、二分探索木のようなツリー構造を用いた方式や近年実用化されてきている連想メモリ（ＣＡＭ〔Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ〕）を用いた方式が採用されている。
【００１４】
図２２はツリー構造の一例を示すもので、ツリー構造を用いてＩＰアドレスを検索する場合の問題点について説明する。図中、３１はＩＰｖ４の場合のツリー構造、３２はＩＰｖ６の場合のツリー構造を示しており、ツリーを用いた場合、ＩＰｖ６のように検索ビット幅が長くなると、それだけツリーが長大化し、検索する回数が増え、メモリを参照する回数が増加し、検索速度が遅くなるという問題があった。特に、フロー識別を実現する場合、ＩＰアドレスだけではなく、その他の検索項目が必要で、検索項目が増えれば増える程、一様にツリーが長大化し、検索速度が遅くなるという問題もあった。
【００１５】
図２３は連想メモリを用いたフロー識別のようすを示すもので、図中、４１は連想メモリ、４２は連想メモリ４１に格納されているルール、４３はルールに従った処理を格納する検索結果格納メモリ、４４は検索結果格納メモリ４３に格納されている検索結果としての処理である。
【００１６】
ルール４２は連想メモリ４１上に格納し、ルール４２に従った処理４４を検索結果格納メモリ４３に格納する。検索は、検索すべき項目を連想メモリ４１へ入力して検索を行い、検索後、入力された検索項目がいずれかのルールに一致した場合には一致したルールの処理が格納されている検索結果格納メモリ４３を調べ、パケットに対して必要な処理を行っていた。
【００１７】
ところで、連想メモリは、アドレスをキーとしてアクセスするのではなく、各番地に記録された値をキーとしてアクセスすることができる記憶素子であって、入力された検索対象となるデータと連想メモリ内に格納している全てのデータを１度に比較する特徴を持っている。連想メモリの中には、各番地に‘０’と‘１’のバイナリ（Ｂｉｎａｒｙ）の値だけでなく、‘０’および‘１’のいずれにも一致する‘Ｄｏｎ’ｔ  Ｃａｒｅ’も使えるターナリー（Ｔｅｒｎａｒｙ）のものもある。このようなターナリーの連想メモリ（ＴＣＡＭ）を用いることで非常に高速なルール表の検索が可能となる。しかしながら、連想メモリは検索できるビット幅に制限があり、上述した現在必要となっている４００ビット程度の検索を行うことができる連想メモリは存在せず、ＩＰｖ６を含んだフロー識別を行うことが出来ないという問題があった。
【００１８】
また、ＴＣＡＭやＣＡＭはＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と異なり、横方向の容量拡張に適していない記憶素子である。これはＴＣＡＭ、ＣＡＭとＳＲＡＭ、ＤＲＡＭとのアクセス方法の違いに起因している。ＳＲＡＭやＤＲＡＭは番地でアクセスするので、横方向を拡張する際には、複数のバンクに分けて、同じアドレス信号を各メモリバンクに引き込むことで横方向の拡張が容易に実現できる。
【００１９】
これに対してＴＣＡＭやＣＡＭはメモリに記憶された内容でアクセスするので、内容を横方向に分割して複数のＴＣＡＭやＣＡＭのバンクに記憶しても、各ＴＣＡＭ間やＣＡＭ間の連携がとれないので、期待した結果が得られない。
【００２０】
近年、ルール表の横幅は増加の一途をたどっており、このような問題はますます顕在化する。例えば、フロー識別のルールの高度化により、より高いレイヤのヘッダ情報を必要とすることやＩＰｖ６等の長いアドレス（１２８ビット）を使うこと等により、ルール表の横幅は増加している。ＩＰｖ６の場合、上で述べた６つのフィールド情報だけでもＳＡ（１２８ｂｉｔ）、ＤＡ（１２８ｂｉｔ）、ＳＰ（１６ｂｉｔ）、ＤＰ（１６ｂｉｔ）、ＰＩＤ（８ｂｉｔ）、ＤＳＣＰ（８ｂｉｔ）であり、合計３０４ビットとなる。また、これら以外のフィールド情報も加えると上述したようにルール表の横幅は容易に４００ビット程度になる。
【００２１】
本発明の目的は、上記課題を解決し、非常に長い検索ビット幅を有するフロー識別のルールを検索可能なフロー識別検索装置および方法を実現することにある。
【００２２】
【課題を解決するための手段】
上記課題を解決するために、請求項１記載のフロー識別検索装置は、パケットに含まれ該パケットのフローの識別に使用される検索項目をもとに、前記検索項目と該検索項目により識別されるフローのパケットに対して行う処理とを組み合わせたルールを複数備えるルール表を検索し、前記パケットに対して行う処理を次定するフロー識別検索装置であって、前記各ルールに含まれる検索項目を予め定めた複数のグループにグループ化したグルーブ化検索項目と、該グループ化検索項目が属するグループ及びルールをそれぞれ表す検索回数情報及び検索関連情報とを組み合わせて保持する連想メモリと、前記連想メモリに入力したグループ化検索項目，検索回数情報及び検索関連情報の組み合わせが該連想メモリで検索された際に行う処理と、前記連想メモリを次に検索する際に検索するルールを表す照合関連情報とを、前記連想メモリが保持する前記組み合わせに対応して保持する検索結果記憶装置と、前記ルール表上の各ルールに含まれる前記検索項目をグループ化して前記グループ化検索項目を生成し、生成された各グループ化検索項目が属しているルール及びグループをもとに前記検索回数情報、前記検索関連情報及び前記照合関連情報を生成して、生成された前記検索回数情報、検索関連情報及びグループ化検索項目を組み合わせて前記連想メモリに格納するとともに、生成された前記照合関連情報と該照合関連情報が示すルールに含まれる前記処理とを組み合わせて前記検索結果記憶装置に格納し、入力されたパケットから前記検索項目を取り出して前記グループ化検索項目を生成し、検索すべきグループ及びルールを表す検索回数情報及び検索関連情報と該グループに対応する前記グループ化検索項目とを前記連想メモリヘ入力して検索を行い、検索された前記連想メモリ上の組み合わせに対応して前記検索結果記憶装置が保持する前記処理及び前記照合関連情報を取得し、該処理として前記パケットに対して行う処理内容が得られるまで、次に検索すべきグループを表す検索回数情報と該グループに対応する前記グループ化検索項目と取得した前記照合関連情報とを前記連想メモリに入力して再び前記検索を行う処理装置とを有することを特徴としている。
【００２４】
請求項２記載のフロー識別検索装置は、請求項１記載のフロー識別検索装置において、前記処理装置は、前記各グループを識別するためのグループ番号を前記検索回数情報として前もって前記各グループに付与し、前記グループ化検索項目と該グループ化検索項目が属するグループに付与された前記グループ番号とを組み合わせて前記連想メモリに格納することを特徴としている。
【００２５】
請求項３記載のフロー識別検索装置は、請求項１記載のフロー識別検索装置において、前記処理装置は、前記各ルールを識別するためのルール番号を前記検索関連情報及び前記照合関連情報としてルール毎に決定して、入力されたパケットに関して最初に検索の対象となるグループに関しては、前記グループ化検索項目と、任意のルール番号に一致するデータが設定された前記検索関連情報とを組み合わせて前記連想メモリに格納し、前記最初に検索の対象となるグループ以外の各グループに関しては、前記グループ化検索項目と、該グループ化検索項目が属するルールに付与された前記ルール番号とを組み合わせて前記連想メモリに格納することを特徴としている。
【００２６】
請求項４記載のフロー識別検索装置は、請求項３記載のフロー識別検索装置において、前記処理装置は、前記連想メモリが保持する前記各組み合わせに関して前記連想メモリの検索を必要とする次のグループが存在する場合には、次に前記連想メモリを検索する際に検索すべきルールに付与されたルール番号と前記連想メモリの再検索を指示する処理とを組み合わせて前記検索結果記憶装置に格納し、前記各組み合わせに関して前記連想メモリの検索を必要とする次のグループが存在しない場合には、入力されたパケットに対して行うべき処理を前記検索結果記憶装置に格納することを特徴としている。
【００２７】
請求項５記載のフロー識別検索装置は、請求項１記載のフロー識別検索装置において、前記処理装置は、前記各ルールに含まれる前記検索項目をグループ化する際、同一のグループに属する複数のグループ化検索項目が特定のデータに一致する可能性があるかどうかを調べ、一致する可能性がある場合には、該複数のグループ化検索項目のうち最も範囲が狭いグループ化検索項目を除く各グループ化検索項目について、該一致する可能性のあるグループ化検索項目の内容として前記最も範囲が狭いグループ化検索項目と同じ内容を持ち且つ該一致する可能性のあるグループ化検索項目以外のグループ化検索項目及び処理として各グループ化検索項目が属するルールと同じ内容を持つ新たなルールを生成して前記ルール表に追加し、該新たなルールが追加されたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納することを特徴としている。
【００２８】
請求項６記載のフロー識別検索装置は、請求項５記載のフロー識別検索装置において、前記処理装置は、前記新たなルールに含まれる検索項目をグループ化する際、前記検索結果記憶装置に格納する前記照合関連情報を、前記最も範囲が狭いグループ化検索項目に対応して前記検索結果記憶装置に格納する照合関連情報と同じ内容に設定することを特徴としている。
【００２９】
請求項７記載のフロー識別検索装置は、請求項５記載のフロー識別検索装置において、前記連想メモリは、入力された前記グループ化検索項目，前記検索回数情報及び前記検索関連情報の組み合わせが前記連想メモリに保持されている複数の組み合わせに一致する場合に、該複数の組み合わせが格納されている物理アドレスのうちの何れかを所定の基準に従い選択して検索結果として出力し、前記処理装置は、前記新たなルールが追加されたルール表を前記連想メモリ及び前記検索結果記憶装置に展開した後の検索時において、前記連想メモリに入力された前記グループ化検索項目，前記検索回数情報及び前記検索関連情報の組み合わせが前記連想メモリに保持されている複数の組み合わせに一致したときに、前記連想メモリが、該複数の組み合わせに含まれるグループ化検索項目のうち最も範囲の狭いグループ化検索項目を含む物理アドレスを検索結果として出力するように、前記新たなルールを前記ルール表上に挿入することを特徴としている。
【００３０】
請求項８記載のフロー識別検索装置は、請求項１記載のフロー識別検索装置において、前記処理装置は、前記ルール表上におけるルールの中に、各ルールに含まれる検索項目の範囲が互いに重なり合う複数のルールが存在するかどうか調べ、該複数のルールが存在する場合には、該複数のルールのうち予め決められたルール以外の各ルールについて、該各ルールに含まれる検索項目の範囲から重なり合う範囲を除いて重なり合いのない範囲を求め、該重なり合いのない範囲に対応する新たなルールを生成して該各ルールを置き換え、該ルールの置き換えがなされたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納することを特徴としている。
【００３１】
請求項９記載のフロー識別検索装置は、請求項１記載のフロー識別検索装置において、前記連想メモリの各物理アドレスに格納する前記検索回数情報，前記検索関連情報及び前記グループ化検索項目のビット幅の総和が前記連想メモリのビット幅に一致するように、前記検索項目がグループ化されていることを特徴としている。
【００３２】
請求項１０記載のフロー識別検索方法は、パケットに含まれ該パケットのフローの識別に使用される検索項目をもとに、前記検索項目と該検索項目により識別されるフローのパケットに対して行う処理とを組み合わせたルールを複数備えるルール表を検索し、前記パケットに対して行う処理を決定するフロー識別検索方法であって、前記各ルールに含まれる検索項目を予め定めた複数のグループにグループ化したグループ化検索項目と、該グループ化検索項目が属するグループ及びルールをそれぞれ表す検索回数情報及び検索関連情報とを組み合わせて保持する連想メモリと、前記連想メモリに入力したグループ化検索項目，検索回数情報及び検索関連情報の組み合わせが前記連想メモリで検索されたときに行う処理と、前記連想メモリを次に検索する際に検索するルールを表す照合関連情報とを、前記連想メモリが保持する前記組み合わせに対応して保持する検索結果記憶装置とを用意するステップと、前記ルール表上の各ルールに含まれる前記検索項目をグループ化して前記グループ化検索項目を生成し、生成された各グループ化検索項目が属しているルール及びグループをもとに前記検索回数情報、前記検索関連情報及び前記照合関連情報を生成して、生成された前記検索回数情報、検索関連情報及びグループ化検索項目を組み合わせて前記連想メモリに格納するとともに、生成された前記照合関連情報と該照合関連情報が示すルールに含まれる前記処理とを組み合わせて前記検索結果記憶装置に格納するステップと、入力されたパケットから前記検索項目を取り出してグループ化を行い前記グループ化検索項目を生成するステップと、最初に検索すべきグループに対応する前記グループ化検索項目と該グループを表す検索回数情報とを前記連想メモリヘ入力して検索を行わせるステップと、前記連想メモリから出力される検索結果に対応して前記検索結果記憶装置に保持されている前記処理及び前記照合関連情報を取得するステップと、取得した処理が前記連想メモリの再検索を示している場合には、次に検索すべきグループを表す検索回数情報，該グループに対応する前記グループ化検索項目及び取得した前記照合関連情報と同じ内容を持つ検索関連情報を前記連想メモリに入力して再度検索を行わせるステップと、前記処理が入力されたパケットに対して行うべき処理内容を示している場合に、前記連想メモリに対する検索を終了させて該処理内容を出力するステップとを有することを特徴としている。
【００３３】
請求項１１記載のフロー識別検索方法は、請求項１０記載のフロー識別方法において、前記各ルールに含まれる前記検索項目をグループ化する際、同一のグループに属する複数のグループ化検索項目が特定のデータに一致する可能性があるかどうかを調べ、一致する可能性がある場合には、該複数のグループ化検索項目のうち最も範囲が狭いグループ化検索項目を除く各グループ化検索項目について、該一致する可能性のあるグループ化検索項目の内容として前記最も範囲が狭いグループ化検索項目と同じ内容を持ち且つ該一致する可能性のあるグループ化検索項目以外のグループ化検索項目及び処理として各グループ化検索項目が属するルールと同じ内容を持つ新たなルールを生成して前記ルール表に追加するステップと、該新たなルールが追加されたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納するステップとを有することを特徴としている。
【００３４】
請求項１２記載のフロー識別検索方法は、請求項１０記載のフロー識別方法において、前記ルール表上におけるルールの中に、各ルールに含まれる検索項目の範囲が互いに重なり合う複数のルールが存在するかどうか調べ、該複数のルールが存在する場合には、該複数のルールのうち予め決められたルール以外の各ルールについて、該各ルールに含まれる検索項目の範囲から重なり合う範囲を除いて重なり合いのない範囲を求め、該重なり合いのない範囲に対応する新たなルールを生成して該各ルールを置き換えるステップと、該ルールの置き換えがなされたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納するステップとを有することを特徴としている。
【００３５】
【発明の実施の形態】
〔第１実施形態〕
発明者らは、ルール表を横方向にグループ化することで上述した課題を回避することが可能になることを見出した。
【００３６】
図１は本発明の第１実施形態によるフロー識別検索装置が組み込まれる装置の一例であるルータ１００を示すもので、図中、２００はスイッチ、３００−１，……３００−ｎはラインカード、４００−１，……４００−ｎはスイッチ２００とラインカード３００−１，……３００−ｎとを結ぶ信号線である。
【００３７】
各ラインカード３００−１，……３００−ｎは、パケット格納部５００−１，……５００−ｎと、ヘッダ検索部６００−１，……６００−ｎと、パケット処理部７００−１，……７００−ｎと、パケット格納部５００−１，……５００−ｎとヘッダ検索部６００−１，……６００−ｎとを結ぶ信号線８０１−１，……８０１−ｎと、パケット格納部５００−１，……５００−ｎとパケット処理部７００−１，……７００−ｎとを結ぶ信号線８０２−１，……８０２−ｎと、ヘッダ検索部６００−１，……６００−ｎとパケット処理部７００−１，……７００−ｎと結ぶ信号線８０３−１，……８０３−ｎとを備えている。
【００３８】
本実施形態のフロー識別検索装置はヘッダ検索部６００−１〜６００−ｎ内に組み込む。以下、入力されたパケットに対するルータ１００の処理概要を簡単に説明する。
【００３９】
あるパケットが信号線３−１から入力されたとすると、まず入力されたパケットのヘッダをヘッダ検索部６００−１で検索し、またパケット自身を信号線８０１−１を通してパケット格納部５００−１へ送出する。
【００４０】
ヘッダ検索部６００−１で行うヘッダ検索により、パケットに対して必要な処理や宛先となる信号線３−ｍ（１≦ｍ≦ｎ）を決定し、パケット処理部７００−１へ検索結果を信号線８０３−１を通して送出し、同時に検索が終了したことをパケット格納部５００−１へ信号線８０１−１を通して伝える。パケット自身を格納しているパケット格納部５００−１はヘッダ検索部６００−１におけるヘッダ検索が終了したことが通知されたら、パケットをパケット処理部７００−１へ信号線８０２−１を通して送出する。
【００４１】
パケット処理部７００−１では該当パケットの検索結果とパケット自身を受けとったら、パケットに対して必要な処理を行うとともに、宛先となる信号線３−ｍ（１≦ｍ≦ｎ）を識別する値等のヘッダ検索部６００−１の結果をパケットに対して付与し、スイッチ２００へ信号線４００−１を通して送出する。スイッチ２００は、送られてきたパケットに含まれる上記値をもとに信号線４００−ｍを通して当該パケットをラインカード３００−ｍに送出し、ラインカード３００−ｍがこのパケットを信号線３−ｍに送出する。
【００４２】
図２は本実施形態によるフロー識別検索装置の構成を示したブロック図であって、ここではフロー識別検索装置がヘッダ検索部６００に組み込まれた例を示す。図中、６１０はヘッダ抽出装置、６２０はフロー識別検索装置である。フロー識別検索装置６２０は、連想メモリ６２１と、フロー識別検索処理装置６２２と、ＤＲＡＭ，ＳＲＡＭ，ＳＳＲＡＭ（同期ＳＲＡＭ）等で構成された検索結果記憶装置６２３とからなっている。また、６２４は連想メモリ６２１とフロー識別検索処理装置６２２とを結ぶ信号線、６２５はフロー識別検索処理装置６２２と検索結果記憶装置６２３とを結ぶ信号線、６３０はヘッダ抽出装置６１０とフロー識別検索処理装置６２２を結ぶ信号線である。
【００４３】
図２を参照しながらヘッダ検索部の処理概要を示す。
【００４４】
ヘッダ抽出装置６１０は信号線３から入力されたパケットよりヘッダを抽出し、信号線６３０を通してフロー識別検索処理装置６２２へ入力する。同時にヘッダ抽出装置６１０はパケットを信号線８０１を通してパケット格納部５００（図１参照）へ送出する。フロー識別検索処理装置６２２は検索に必要なグループ化されている検索項目をヘッダから抜き出し、信号線６２４を通して連想メモリ６２１へ入力し検索を行い、検索結果としてパケットに対する処理が格納されている検索結果記憶装置６２３のメモリ上のアドレスを連想メモリ６２１から信号線６２４を通して受け取る。
【００４５】
フロー識別検索処理装置６２２は受け取った検索結果記憶装置６２３のメモリ上のアドレスを信号線６２５を通して送出し、検索結果記憶装置６２３に格納されている処理を信号線６２５を通して読みとる。再度検索が必要な場合には、検索に必要なグループ化されている検索項目をヘッダからさらに抜き出し、連想メモリ６２１へ入力し、検索結果記憶装置６２３のメモリ上のアドレスを連想メモリ６２１から受け取り、検索結果記憶装置６２３に格納されている処理を読みとる。
【００４６】
これを１つのヘッダの検索が終了するまで再帰的に行う。１つのヘッダの検索が終わったら、信号線８０３を通してパケット処理部７００（図１参照）へ最終的なフロー識別の検索結果（処理）を送出し、信号線８０１を通してパケット格納部５００へ１つのヘッダの検索が終わったことを通知する。
【００４７】
図２０で説明したルールに基づくルールのグループ化の様子および及びグループ化されたルールの検索のために各ルールに付与されるルール番号の付与例を図３に示す。
【００４８】
図中、１１ａ，１２ａ，１３ａ，１４ａは各ルール１１，１２，１３，１４（図２０を参照）にルール番号を付与したもの、１５，１６はフロー識別に必要な検索項目を２つのグループに分け、それぞれのグループに番号（ここでは０と１）を付与したものを表している。ルール番号は０から昇順に１ずつ付与する。全てのグループのビット幅は連想メモリが１回で検索できる検索ビット幅以下である必要があるため、グループの分け方はこの条件を満足するように決める。なお、グループの分け方は前もって設計者が決める。
【００４９】
図４は図３のルール及びルール番号を展開して、検索回数情報Ｆｌａｇ、検索関連情報Ｓｒｃｈ．Ｔａｇ（Ｓｅａｒｃｈ  Ｔａｇ，図３のルール番号に相当）、グループ化された検索項目、次回の検索における検索回数情報である次Ｆｌａｇ、照合関連情報Ａｓｓｏｃ．Ｔａｇ（Ａｓｓｏｃｉａｔｉｏｎ  Ｔａｇ）、処理を、連想メモリ６２１と検索結果記憶装置６２３に格納する例を示す。
【００５０】
１１ａ−１，１２ａ−１，１３ａ−１，１４ａ−１はグループ番号０に対応しており、グループ番号と同じ値０を持つ検索回数情報Ｆｌａｇとルール番号０〜３に対応した検索項目とを連想メモリに格納したもの、１１ａ−２，１２ａ−２，１３ａ−２はグループ番号１のルール番号０〜２に対応しており、グループ番号と同じ値１を持つ検索回数情報Ｆｌａｇと、ルール番号と同じ値０〜２を持つ検索関連情報Ｓｒｃｈ．Ｔａｇと、ルール番号０〜２に対応した検索項目とを連想メモリに格納したもの、１１ａ−３，１２ａ−３，１３ａ−３，１４ａ−３はグループ番号０に対応しており、次Ｆｌａｇと、ルール番号と同じ値を持つ照合関連情報Ａｓｓｏｃ．Ｔａｇと、ルール番号０〜３に対応する処理とを格納したもの、１１ａ−４，１２ａ−４，１３ａ−４はグループ番号１のルール番号０〜２に対応する処理を格納したものである。なお、図中でｘはどの値を入れても問題はないことを示す。また上述した説明から明らかなように、ある一つのルールに付与される検索関連情報Ｓｒｃｈ．Ｔａｇと照合関連情報Ａｓｓｏｃ．Ｔａｇには同じルール番号（図３参照）の値が設定されるが、本実施形態ではこれらデータがどこに格納されるかによって名称を変えている。すなわち、連想メモリ６２１に格納されるルール番号を検索関連情報Ｓｒｃｈ．Ｔａｇとし、検索結果記憶装置６２３に格納されるルール番号を照合関連情報Ａｓｓｏｃ．Ｔａｇとしている。
【００５１】
ここで、図３に基づいて図４に示した通りに連想メモリ６２１及び検索結果記憶装置６２３へ各種データを格納する際の手順について説明する。まず、図３に示したルールをグループ番号０，１の２つのグループにグループ化する。次に、ルール番号０のルールのうちグループ番号０について、検索項目である宛先アドレス及びＰｒｏｔｏｃｏｌをグループ番号と同じ値０を持つ検索回数情報Ｆｌａｇとともに連想メモリ６２１へ格納する。その際、検索関連情報Ｓｒｃｈ．ＴａｇとしてはＤｏｎ’ｔ  Ｃａｒｅを示す＊を設定する。これは、最初に連想メモリ６２１を検索する場合に、検索回数情報Ｆｌａｇの値として０を持つすべてのルールを検索対象とするためである。以上によって図４に示すデータ１１ａ−１が連想メモリ６２１に格納される。
【００５２】
次に、検索結果記憶装置６２３については、連想メモリ６２１に設定した検索回数情報Ｆｌａｇの値０に１を加算した値１を次Ｆｌａｇに設定する。また、ルール番号０と同じ値０を照合関連情報Ａｓｓｏｃ．Ｔａｇに設定する。さらに、この場合の検索回数情報Ｆｌａｇの値は最後のグループに対応する値ではないことから、さらに連想メモリ６２１の検索を行うことを指示する「再検索」を処理に設定する。そして、これら次Ｆｌａｇ，照合関連情報Ａｓｓｏｃ．Ｔａｇ，処理を組にしたデータ１１ａ−３を図４に示すように検索結果記憶装置６２３に格納する。
【００５３】
ルール番号１〜３のうちのグループ番号０についてもいま述べたルール番号０と同様のことを行って、連想メモリ６２１にデータ１２ａ−１，１３ａ−１，１４ａ−１を順次格納するとともに、検索結果記憶装置６２３にデータ１２ａ−３，１３ａ−３，１４ａ−３を順次格納する。ただし、ルール番号３に関してはグループ番号１の検索項目が図３に示すように全てＤｏｎ’ｔ  Ｃａｒｅであるため、ルール番号３かつグループ番号１のルールに関してはさらに検索を行う必要がない。したがってこの場合は、処理に「再検索」を設定する代わりに、図３のルール表に設定されている処理「廃棄」そのものを検索結果記憶装置６２３の「処理」に格納するとともに、次Ｆｌａｇには任意の値（図４ではどの値でもかまわないことを示す×）を設定する。
【００５４】
グループ番号１についてもグループ０の場合に準じて同様の処理を行う。ただし、この場合は上述したようにルール番号３については検索項目が全てＤｏｎ’ｔ  Ｃａｒｅであるため、ルール番号０〜２について処理を行い、連想メモリ６２１に対してデータ１１ａ−２，１２ａ−２，１３ａ−２を順次追加するとともに、検索結果記憶装置６２３に対してデータ１１ａ−４，１２ａ−４，１３ａ−４を順次追加する。連想メモリ６２１については、検索回数情報Ｆｌａｇとしてグループ番号と同じ１を設定するとともに、グループ番号１が最初のグループでないことから図３のルール表に設定されているルール番号をそのまま検索関連情報Ｓｒｃｈ．Ｔａｇとして設定する。一方、検索結果記憶装置６２３については、グループ番号１が最後のグループであることから、図３のルール表に記述されている処理をそのまま検索結果記憶装置６２３に設定するとともに、グループ番号１についてはそれ以上検索を行わないので次Ｆｌａｇ及び照合関連情報Ａｓｓｏｃ．Ｔａｇには任意の値を設定する。
【００５５】
図４を利用して具体的に宛先アドレスが５９．４８．１．１、ＰｒｏｔｏｃｏｌがＴＣＰ、送信元アドレスが１２２．５８．３３．１、宛先ポート番号が１０のヘッダのフロー識別検索方法を示す。
【００５６】
手順１：フロー識別検索処理装置６２２がＩＰパケットのヘッダの中でグループ番号０に属する検索項目とグループ番号１に属する検索項目を取り出す。
【００５７】
手順２：フロー識別検索処理装置６２２がＩＰパケットのヘッダ中のグループ番号０の検索項目である宛先アドレスの５９．４８．１．１とＰｒｏｔｏｃｏｌのＴＣＰとグループ番号０と同じ値０を持つ検索回数情報Ｆｌａｇと適当な値の検索関連情報Ｓｒｃｈ．Ｔａｇとを連想メモリ６２１に検索データとして入力する。
【００５８】
手順３：検索により連想メモリ６２１内に格納されているデータ１２ａ−１と入力データが一致するので、結果としてデータ１２ａ−１に関連づけられた検索結果を格納している検索結果記憶装置６２３のメモリのアドレスをフロー識別検索処理装置６２２は受け取る。
【００５９】
手順４：フロー識別検索処理装置６２２は受け取った検索結果記憶装置６２３のメモリのアドレスから、検索結果記憶億装置６２３に格納されているデータ１２ａ−３を読み取る。読みとったデータ１２ａ−３に含まれる処理の内容が「再検索」なので、フロー識別検索処理装置６２２は次Ｆｌａｇと照合関連情報Ａｓｓｏｃ．Ｔａｇを読みとり、再度検索を行う。再検索にあたって読みとったデータ１２ａ−３から次Ｆｌａｇが１で照合関連情報Ａｓｓｏｃ．Ｔａｇが１であることがわかったので、フロー識別検索処理装置６２２は、ヘッダの中のグループ番号１に属する検索項目である送信元アドレスの１２２．５８．３３．１、宛先ポート番号１０とグループ番号１と同じ値１を持つ検索回数情報Ｆｌａｇと検索関連情報Ｓｒｃｈ．Ｔａｇの値１を連想メモリ６２１に検索データとして入力する。
【００６０】
手順５：検索により連想メモリ６２１内に格納されているデータ１２ａ−２と入力データが一致するので、結果としてデータ１２ａ−２に関連づけられた検索結果を格納している検索結果記億装置６２３のメモリのアドレスをフロー識別検索処理装置６２２は受け取る。
【００６１】
手順６：フロー識別検索処理装置６２２は受け取った検索結果記憶装置６２３のメモリのアドレスから、検索結果記憶装置６２３に格納されているデータ１２ａ−４を読みとる。読みとったデータ１２ａ−４に含まれる処理の内容が「中優先で送出」であって「再検索」ではないので再度検索する必要がなく、ここで検索を終了する。
【００６２】
次に、上述したものとは若干異なる実現形態について説明する。図５に示すように、検索可能なビット幅が制限された連想メモリに入れるために、オリジナルのルール表（Ｏｒｉｇｉｎａｌ  ｒｕｌｅ  ｔａｂｌｅ）のルールを複数のブロックにグループ化し、各ブロックを連想メモリに格納して新たなルール表（Ｐｒｏｐｏｓｅｄ  ｒｕｌｅ  ｔａｂｌｅ）を作成する。その際、各ブロックがオリジナルのルールのどの位置にあるかを示すため、検索回数情報Ｆｌａｇ（相対位置識別フラグ）を一緒に格納する。さらにそれらの各ブロックが同じオリジナルのルールに属していることを示すため、検索関連情報Ｓｒｃｈ．Ｔａｇ及び照合関連情報Ａｓｓｏｃ．Ｔａｇも一緒に格納する。ルールがＤＡとＳＡの２つからなるルール表の場合の例を図６に示す。なお、上述したようにＤＡ，ＳＡはいずれも１２８ビットで構成されるが、１２８ビットの値すべてを図示することは困難であるため、ここではＤＡ，ＳＡがいずれも４ビットで構成されているものとして説明する。また、図６では図４に示した次Ｆｌａｇを設けていないが、次Ｆｌａｇの値は連想メモリに入力した検索回数情報Ｆｌａｇに１を加算すれば求められるので、かかる計算をフロー識別検索処理装置が行えば良い。
【００６３】
図６のルール表に関して、ＤＡ＝０１００、ＳＡ＝０１０１なるヘッダ情報のパケットが到着した場合は、図７に示すように、１回目の検索（１ｓｔ  ｒｏｕｎｄ  ｓｅａｒｃｈ）で、ＤＡ＝０１００を検索キーとして、これに次の２つの検索キーを併せて検索する。その２つの検索キーとは、何回目かの検索回数を表す検索回数情報Ｆｌａｇ＝１ｓｔ及び前回の検索結果との関連付けのための検索関連情報Ｓｒｃｈ．Ｔａｇ＝Ａｎｙの２つである。なお、検索関連情報Ｓｒｃｈ．Ｔａｇとして格納されている値のうち、Ａｎｙは任意のものと一致するＤｏｎ’ｔ  ｃａｒｅを意味している。また、検索キーとして入力される検索関連情報Ｓｒｃｈ．ＴａｇのＡｎｙは任意の値を入力すれば良いことを意味している。他の実現形態として、検索キーとして入力される検索関連情報Ｓｒｃｈ．ＴａｇのＡｎｙの値および連想メモリ上における検索関連情報Ｓｒｃｈ．ＴａｇのＡｎｙの値をすべて同じ値に設定することが考えられる。具体的には、連想メモリ上における検索関連情報Ｓｒｃｈ．Ｔａｇの値Ａｎｙとして例えば０を設定するとともに、１回目の検索で連想メモリへ与える検索関連情報Ｓｒｃｈ．Ｔａｇの値を同じく０とすれば良い。
【００６４】
１回目の検索キーでマッチするルールが見つかると、それに対する処理（Ａｃｔｉｏｎ）、ここでは再検索（Ｃｏｎｔｉｎｕｅ）を決定することができるとともに、それに関連することを表す照合関連情報Ａｓｓｏｃ．Ｔａｇ＝２が得られる。引き続き２回目（２ｎｄ  ｒｏｕｎｄ  ｓｅａｒｃｈ）の検索を行う。その際には検索キーＳＡ＝０１０１と一緒に、１回目の検索により得られた照合関連情報Ａｓｓｏｃ．Ｔａｇ＝２の値を検索関連情報Ｓｒｃｈ．Ｔａｇに代入して検索を行う。また、何回目かの検索回数を表す検索回数情報Ｆｌａｇ＝２ｎｄとして検索する。２回目の検索ではそれらにマッチするルールが見つかり、それに対する処理（Ａｃｔｉｏｎ）、ここでは最優先で転送（Ｈｉｇｈ  Ｐｒｉｏｒｉｔｙ）を決定することができる。
【００６５】
以上説明したように、本実施形態の構成要素は、
（１）ルール表のルールをグループ化し、該グループ化したルールの各部分をテーブル（連想メモリ）に格納する手段と、
（２）グループ化したルールの各部分のグループ化前のルール内における相対位置を示す検索回数情報Ｆｌａｇを付与する手段と、
（３）グループ化したルールの各部分間の関連を示す検索関連情報Ｓｒｃｈ．Ｔａｇ及び照合関連情報Ａｓｓｏｃ．Ｔａｇを付与する手段と、
（４）ルールに対応するヘッダ情報と検索回数情報と検索関連情報とを検索キーとして連想メモリを検索する手段とからなる。
【００６６】
なお、上述した説明では理解を容易にするために、宛先アドレスＤＡ，送信元アドレスＳＡ等のように論理的にまとまりのあるものを単位としてグループ化を行う例を示したが、本発明がこうした形態に限定されるわけではない。ルール表上の各ルールは単なるビットの羅列と見なせるため各ルールをどのようにグループ化しても良いのであって、例えば宛先アドレスを２以上のグループに分割して１００ビットはグループ番号０に格納し残りの２８ビットはグループ番号１に格納するなどしても良い。もっとも、例えば連想メモリ６２１のビット幅を２５６ビットであるとすれば、図４に示す検索回数情報Ｆｌａｇ，検索関連情報Ｓｒｃｈ．Ｔａｇ及び２つの検索項目をすべて合わせたビット数が２５６ビットとなるように各ルールをグループ化してゆくことで、連想メモリ６２１を最も効率的に使用でき、各パケットに関して連想メモリ６２１を検索する回数も最小になる。
【００６７】
〔第２実施形態〕
第１実施形態では以下のような場合に曖昧なルールが生成されてしまい、正しい検索動作を行えない場合が有る。本実施形態はかかる場合においても正しい検索動作を保証するものである。図８に曖昧なルールが生成される場合の例を示す。
【００６８】
図８の例のルール表では、ＤＡ＝１１００、ＳＡ＝１１００なるパケットが到着した場合、ルールＢ（ＤＡ＝１＊，ＳＡ＝１１＊）（ここで、＊は上述したようにＤｏｎ’ｔ  ｃａｒｅであって、それ以降のビットが「０」，「１」のいずれでも良いことを示す。）がマッチするべきところである。
【００６９】
しかしながら、図９に示すように第１実施形態では１回目の検索でＤＡ＝１１００で検索する際に、ルールＡ（ＤＡ＝１１＊，ＳＡ＝０１＊）の前半部（ＤＡ＝１１＊）がよりふさわしいものと判定して候補をルールＡに絞り込んでしまう。これは、一般的な商用の連想メモリでは、連想メモリに入力されたデータが複数のルールに一致した場合、一致したルールのうち連想メモリ上で一番上（すなわち、最も小さいアドレス）に格納されているルールの物理アドレスを出力するためである。こうしたことから、２回目の検索でＳＡ＝１１００で検索を行う際に本来マッチすべきルールＢを見逃してしまうこととなる。
【００７０】
この状況を概念的に示したものが図１０である。図１０は横軸をＤＡ、縦軸をＳＡとして、それぞれのルールＡとＢが占める領域を示したものである。１回目の検索でルールＡに候補を絞り込んでしまうのは、図１０では１ｓｔｒｏｕｎｄ  ｓｅａｒｃｈと示している両端矢印の箇所に相当する。
【００７１】
１回目の検索ではＤＡで検索を行うので図１０の横軸に沿って検索を行う。その際、ルールＡのほうがより狭い範囲でパケットのヘッダ情報（ＤＡ＝１１００）を含むので、ルールＡを候補に絞り込んでしまう。
【００７２】
パケットのヘッダ情報（ＤＡ＝１１００，ＳＡ＝１１００）はルールＢにマッチすべきものであるにもかかわらず、１回目の検索でルールＡに候補を絞り込んでいるので、２回目の検索で縦軸に沿って検索する際にはルールＡの縦軸の範囲に入っていないので、マッチするルールがないと判断してしまうことになる。
【００７３】
本実施形態は、上記のような第１実施形態におけるルール表をグループ化する際に生じる曖昧性を除去することができる。
【００７４】
本実施形態は第１実施形態を適用する際に生じる曖昧性を除去するために、オリジナルのルール表に新たに保護ルール（Ｇｕａｒｄ  ｒｕｌｅ）（保護ポリシーとも呼ぶ）と名づけるルールを挿入することがポイントである。
【００７５】
図１１は本実施形態にかかるルール表の一例を示すものである。図１１は図８のルール表に対し、第１実施形態を適用する際に生じる曖昧性を除去するために、ルールＢ’を挿入している。ルールＢ’はルールＡと同じＤＡを持ち、それ以外の部分のＳＡと処理（Ａｃｔｉｏｎ）に関してはルールＢと同じ内容を持つ。ルールＢ’を挿入することにより、ルール表をグループ化することにより生じる曖昧性を除去することができる。
【００７６】
図１２は図１１に示したオリジナルのルール表をグループ化したものを示す。ここでのポイントはルールＢ’をグループ化する際にルールＢ’の１回目の検索に用いる前半部の照合関連情報Ａｓｓｏｃ．ＴａｇをルールＡのものと同じ値（照合関連情報Ａｓｓｏｃ．Ｔａｇ＝１）とする点である。ルールＢの値（照合関連情報Ａｓｓｏｃ．Ｔａｇ＝２）でない点に注意されたい。ルールＢ’の前半部の照合関連情報Ａｓｓｏｃ．Ｔａｇ＝１とすることにより、１回目の検索ではルールＡへの候補の絞り込みが行われることなく、２回目の検索でルールＡにマッチするのか、ルールＢにマッチするのかを判定することができる。
【００７７】
なお、上述したように、連想メモリに入力されたデータが複数のルールに一致した場合は最も小さい物理アドレスが出力される。また、保護ルールの追加にあたっては一致した複数のルールのうちより範囲の狭いルールと同じ内容の保護ルールを入れている。さらに、複数のルールに一致した場合にはより狭い範囲のルールを選択しなければならない。このため、より狭い範囲のルールは当該ルールよりも広い範囲のルールよりも連想メモリ上でより上位（より小さな物理アドレス側）に格納する必要がある。したがって図１１に示したように、ルールＡ及びルールＢ’を連想メモリ上でルールＢよりも上位に格納するようにしている。
【００７８】
図１３にその時の検索の様子を示す。図１３では本実施形態によりグループ化したルール表を２回検索する様子を示している。１回目の検索では、ＤＡ＝１１００を検索キーとして、その検索キーと併せて検索関連情報Ｓｒｃｈ．Ｔａｇ＝Ａｎｙと検索回数情報Ｆｌａｇ＝１ｓｔをキーとして検索する。その結果、マッチするルールとして一行目のＡ，Ｂ’（１ｓｔ）の前半部が見つかる。それに関連することを表す照合関連情報Ａｓｓｏｃ．Ｔａｇ＝１が得られる。
【００７９】
引き続き、２回目の検索を行う。その際には検索キーＳＡ＝１１００と一緒に、１回目の検索により得られた照合関連情報Ａｓｓｏｃ．Ｔａｇ＝１の値を検索関連情報Ｓｒｃｈ．Ｔａｇに代入して検索を行う。２回目の検索では検索関連情報Ｓｒｃｈ．Ｔａｇ＝１の２つのルールが候補となる。この候補はルールＡとＢ’である。このうち、検索キーＳＡ＝１１００にマッチするのはルールＢ’である。このようにして本来の正解であるルールＢと同じ処理（Ａｃｔｉｏｎ）を導くことができる。
【００８０】
図１４は本実施形態による保護ルールの挿入の概念をグラフを用いて表したものである。図１０の例で示したルールＡとルールＢがある状況において、ルールＢと同じ内容を持つルールＢ’を保護ルールとして挿入している。図１０では、横軸方向であるＤＡについてみた場合、ルールＢはルールＡよりも広い範囲をカバーしていた。本実施形態の場合、ＤＡについては、より範囲の狭いルールＡと同じ内容を持つルールＢ’を挿入し、ＤＡ以外の項目については、そのルールＢ’は元のルールＢと同じ内容を持つものとする。さらにルールＢ’をグループ化する際に、その前半部には、１回目の検索時の結果から分かる検索関連情報の値をルールＡと同じものとする（Ｓｒｃｈ．Ｔａｇ＝１）。
【００８１】
ここで、図１５のフローチャートを参照して連想メモリ及び検索結果記憶装置へデータを格納するための手順について述べる。なお、後述する第３実施形態で説明するように、あるルールの範囲と別のルールの範囲が重なり合う場合があり得るが、こうしたルールが存在してもこれらを重なり合いのないルールに変換可能であるため、ここでは全てのルールの間に重なり合いがないものとして説明を行う。
【００８２】
図１５では手順をある程度一般化して示してあるため、最初に同図で使用している表記について説明しておく。図中、Ｒはオリジナルのルール表に含まれるルールの集合であって、Ｒ１からＲＭまでＭ個のルールから成るものとする。このルールの集合Ｒは先に仮定した通り互いに一致部分がないルールの集合である。また、Ｒｊ［１］はルールＲｊの１つ目の検索項目（例えばＤＡ）を示しており、同様にＲｊ［２］はルールＲｊの２つ目の検索項目（例えばＳＡ）を示している。また、Ｒｊ［Ｔａｇ］はルールＲｊの検索関連情報である。上述したように、検索関連情報Ｓｒｃｈ．Ｔａｇと照合関連情報Ａｓｓｏｃ．Ｔａｇはある１つのルールに関しては基本的に同じ値となるため、これらを総称してタグと呼ぶ。Ｆは連想メモリに書き込むべきルールの集合であってＦ１からＦＰまでＰ個のルールから成る。なお、Ｆｊ［１］，Ｆｊ［２］，Ｆｊ［Ｔａｇ］等の定義はルールの集合Ｒについてのものと同じである。
【００８３】
ルールの集合Ｒを連想メモリに追加する前に３つのことをしなければならない。第１にはタグを付与することであり、第２には保護ルールが必要ならばこれを追加することである。第３には、上述したように連想メモリは複数のルールに一致した場合に最も上位の物理アドレスを出力するという特質を考慮に入れて、連想メモリにルールを格納する際の順番を決めることである。これら３つのことを実施するために、ルールの集合Ｒにタグ及び保護ルールを追加し、かつ、連想メモリに格納する順番を決定したルールの集合Ｆを定義し、ルールの集合Ｒをもとにルールの集合Ｆを作製してこれを連想メモリに格納する。
【００８４】
次に、図８に示したＯｒｉｇｉｎａｌ  ｒｕｌｅ  ｔａｂｌｅをもとに図１２に示すＰｒｏｐｏｓｅｄ  ｒｕｌｅ  ｔａｂｌｅを作成する場合を例に挙げて、図１５のフローチャートに沿って処理の詳細を説明する。まず、全てのルールＲ１〜ＲＭについてＲｍ［Ｔａｇ］＝ｍ（ｍ＝１〜Ｍ）となるタグを割り振る（ステップＳ１）。これによりルールＡに関する検索関連情報Ｓｒｃｈ．Ｔａｇおよび照合関連情報Ａｓｓｏｃ．Ｔａｇがそれぞれ１に設定され、ルールＢに関する検索関連情報Ｓｒｃｈ．Ｔａｇおよび照合関連情報Ａｓｓｏｃ．Ｔａｇがそれぞれ２に設定される。次に、ルールＲ１を連想メモリに格納する表であるルールの集合Ｆに追加する。これによりルールＡがルールＦ１に設定される。またループ変数ｉ及びｊをそれぞれ１，２に初期化する（ステップＳ２）。
【００８５】
次に、以下の手順に従ってルールの集合Ｆに対し必要に応じて保護ルールを追加する。そのために、まずＲｊ［１］の示す範囲がＦｉ［１］の示す範囲を含んでいるか、あるいは、Ｒｊ［１］とＦｉ［１］が同じ範囲であるかどうかを判定する（ステップＳ３）。なお、前者の判定を行うにあたっては、Ｒｊ［１］の最小値＜Ｆｉ［１］の最小値及び最大値＜Ｒｊ［１］の最大値を満足するかどうかを判定すれば良い。具体的には、最初の検索項目であるＤＡについてルールＢがルールＡを含んでいるか或いは両者が一致しているかどうかを判定する。この場合は、ルールＢのＤＡが１＊でありルールＡのＤＡが１１＊であるため前者の包含関係が成立する。そこで、保護ルールＦ＝（Ｆｉ［１］，Ｒｊ［２］，Ｆｉ［Ｔａｇ］）をルールＦｉの隣へ追加する（ステップＳ４）。具体的には、ルールＡのＤＡ（＝１１＊），ルールＢのＳＡ（＝１１＊），ルールＡのタグ（＝１）からなるルールＢ’をルールＡの隣に追加する。次に、Ｒｊ［１］を全てのＦ［１］と比較したかどうか判定する（ステップＳ５）。この場合はルールの集合ＦがルールＦ１（およびステップＳ４で隣に追加した保護ルール）のみであるため同ステップの判定結果はＹＥＳとなることから、処理をステップＳ６に進める。なお以上述べた通り、保護ルールをルール表へ追加するにあたっては、複数のルールに一致した場合により狭い範囲を持つルールが連想メモリにより選択されるようにしている。
【００８６】
なお、ステップＳ３の判定結果がＮＯとなった場合には、ステップＳ３の場合とは逆にＦｉ［１］の示す範囲がＲｊ［１］の示す範囲を含んでいるどうかを判定（ステップＳ７）し、もしそうであれば、ステップＳ４で追加される保護ルールのＲとＦを互いに入れ替えた保護ルールＦ＝（Ｒｊ［１］，Ｆｉ［２］，Ｒｉ［Ｔａｇ］）をＦｉの上に追加する（ステップＳ８）。またステップＳ７の判定結果がＮＯであって、Ｆｉ［１］の示す範囲とＲｊ［１］の示す範囲の間に包含関係がない場合には、保護ルールの追加を行うことなく処理をステップＳ５に進める。また、ステップＳ５の判定を行ったときにルールＦ１以外のルールがルールの集合Ｆに存在する場合（ステップＳ５の判定結果がＮＯ）は、ループ変数ｉに１を加算（ステップＳ９）して処理をステップＳ３に戻し、上記同様にステップＳ３〜Ｓ８による処理を行って、ルールの集合Ｆに存在する全てのルールを対象に保護ルールの追加が必要かどうか調べる。
【００８７】
次に、以下の手順に従ってルールＲｊ自体をルールの集合Ｆに追加する。まず、ループ変数ｉを１に初期化（ステップＳ６）してから、Ｆｉ［１］の示す範囲がＲｊ［１］の示す範囲を含んでいるかあるいはこれらが一致しているかの判定を行う（ステップＳ１０）。この場合にはルールＦ１［１］の範囲（＝１１＊）がＲ２［１］の範囲（＝１＊）を含んでいないのでステップＳ１０の判定結果がＮＯとなるため、処理をステップＳ１２に進めてＲｊ［１］をすべてのＦ［１］と比較したかどうかを判定する（ステップＳ１２）。この場合もルールの集合ＦがルールＦ１およびその隣の保護ルールのみであるため、処理をステップＳ１３に進めてルールＲｊ（すなわちルールＢ）をルールの集合Ｆの最後に追加する。
【００８８】
なお、ステップＳ１０の判定結果がＹＥＳであった場合には、ルールＲｊをルールＦｉの上に追加（ステップＳ１１）したのちにステップＳ１５に処理を進める。また、ステップＳ１２の判定結果がＮＯであった場合には、ルールの集合Ｆ上における次のルールとの比較を行うために、ループ変数ｉに１加算（ステップＳ１４）して処理をステップＳ１０に戻し、同様にステップＳ１０〜Ｓ１３の処理を行う。
【００８９】
次に、上記のようにステップＳ１３を行ったのち、全てのＲｊをルールの集合Ｆに追加したかどうか判定する（ステップＳ１５）。この場合はステップＳ１３で追加したルールＢがオリジナルの表上で最後のものであるため、処理をステップＳ１７に進めてルールの集合Ｆを第１実施形態で説明した手順に従ってグループ化して連想メモリに格納する。以上述べた通り、ルールＲｊをルール表へ追加する場合においても、保護ルールを追加する場合と同様に、複数のルールに一致した場合により狭い範囲を持つルールが連想メモリにより選択されるようにしている。なお、ステップＳ１５の判定の結果、まだ追加されていないルールが残っている場合には、ループ変数ｊに１加算して次のルールを選択するとともに、ステップＳ２と同様にループ変数ｉを１に初期化する（ステップＳ１６）そして、処理をステップＳ３に戻し上述したのと同様の処理をルールＲ３以降について行ってゆく。
【００９０】
以上の説明から分かるようにルールをグループ化した際に、異なるルール間の対応するブロックで包含関係にある場合は、より範囲の狭いルールのブロックと同じ内容を持つ保護ルールを挿入することで、第１実施形態の問題点であるルールのグループ化時の曖昧性の問題を解決することができる。
【００９１】
以上の実施の形態では、説明を容易とするため、ルールがＤＡとＳＡの２つの要素からなるルール表に限定して説明したが、３つ以上の要素からなるルール表についても同様の考えが適用できる。
【００９２】
また、以上の実施の形態では、説明を容易とするため、包含関係にあるルールが２つの場合に限定して説明したが、３つ以上のルール間で包含関係があるテーブルについても同様の考えが適用できる。ルールが３つ以上存在する場合には３つ以上のルールに一致する可能性があり、候補となり得るルールが３つ以上存在することになるが、この場合も候補となり得る分だけ保護ルールを追加すれば良い。
【００９３】
さらにまた、以上の実施の形態では、説明を容易とするため、ＤＡ、ＳＡといった、内容の異なる要素単位でルールをグループ化する場合について説明したが、１つの要素をグループ化するような場合にも本発明は適用可能である。
【００９４】
〔第３実施形態〕
本実施形態では、第２実施形態で触れたようにルール間に重なり合いのある場合に必要となる処理を行うものである。オリジナルのルール表上における２つのルール間の関係は図１６に示すように３つの状態に分類される。なお、同図では説明を容易にするためにＤＡ及びＳＡからなる２次元のルールの場合を想定して説明するが、そうしても一般性を失うことはない。第１の状態はルールＥ及びＦの間における関係のように「一致部分がない」場合である。また第２の状態はルールＧ及びＨの間における関係のように「一部分が一致」する場合である。さらに第３の状態はルールＩ及びＪの間の関係のように一方のルールＩが他方のルールＪを「内包」する場合、すなわち一方のルールの範囲が他方のルールの範囲に完全に含まれる場合である。
【００９５】
一部分が一致する２つのルールの間では一致部分の処理でいずれの処理を行って良いかどうかが曖昧であるため、必ずいずれか一方のルールに従った処理を選ぶ必要がある。そのために、保守者はフロー識別検索装置に対して一致部分に関する処理を明示的に設定する。いま図１７に示したように、処理として「廃棄」を有するルールＧ＝（＊，０１＊）、および、処理として「通過」（すなわち、最優先で送出、中優先で送出、あるいは、低優先で送出などの「廃棄」以外の処理）を有するルールＨ＝（１０＊，＊）の２つのルールが存在することを想定する。この場合、これらルール間の一致部分であるルール（１０＊，０１＊）については、処理が「廃棄」，「通過」の何れであるのかを保守者が決めてフロー識別検索装置に設定する。
【００９６】
一部分が一致するルールの集合において、例えば２つのルールの一部分が一致している場合は、一方のルールを幾つかのルールに分割することによって一致部分の無いルールの集合と等価にすることができる。これにより、上述した曖昧性の問題を解決することができる。図１８は、図１７に示すルールＨを２つに分割した例を示している。図１８では、一致部分の処理がルールＧの処理に従うものと仮定しており、ルールＨをルールＨ１とルールＨ２へ分割することにより、３つのルールＧ，Ｈ１，Ｈ２間では一致部分が無くなる。なお、２つのルール間に「内包」の関係がある場合（図１６の（３）の場合）にも、いま説明した一部分一致のときと同様に分割を行うことで、一致部分がないルールの集合に変換することができる。
【００９７】
【発明の効果】
以上説明したように本発明では、検索可能なビット幅の制限された連想メモリに入れるために、オリジナルのルール表の各ルールに含まれる検索項目を複数のグループにグループ化して連想メモリに格納している。その際、各グループがオリジナルのルールのどの位置にあるかを示すため、検索回数情報を一緒に格納する。さらにそれらの各グループが同じオリジナルのルールに属していることを示すため、検索関連情報も一緒に格納する。
【００９８】
グループ化したルール表を格納した連想メモリを検索する際には、複数回連想メモリを検索する。連想メモリを検索する回数の最大はオリジナルのルール表に含まれるルールの検索項目をグループ化した数である。連想メモリの各回の検索においては、該当するパケットのヘッダ等に含まれる情報と検索回数情報と検索関連情報をキーとして連想メモリを検索する。ここで、検索回数情報は何回目の検索かを表すこととなる。検索関連情報は前回の検索時に得られた検索結果記憶装置上の照合関連情報を検索関連情報として今回の検索に用いる。初回の検索においてはこの検索関連情報が、連想メモリ上で最初に検索対象となる検索関連情報のいずれとも一致するようにする。具体的には、最初に検索対象となる連想メモリ上の検索関連情報にＤｏｎ’ｔ  Ｃａｒｅを設定するとともに、初回の検索時に連想メモリへ入力する検索関連情報として任意の値を与えれば良い。あるいは、最初に検索対象となる連想メモリ上の検索関連情報および初回の検索時に連想メモリへ入力する検索関連情報を全て同じ値に設定しても良い。
【００９９】
本発明では、検索の際、グループ番号等の検索回数情報をグループ化された検索項目と一緒に連想メモリへ入力するので、異なるグループであるが、格納されている値が偶然一致するものが連想メモリに格納されていても区別することが出来る。また検索の際、ルール番号等の検索関連情報をグループ化された検索項目と一緒に連想メモリへ入力するので、異なるルールであるが、グループ化された検索項目の値が偶然一致するものが連想メモリに格納されていても区別することが出来る。
【０１００】
また本発明では、最初のグループを検索した後に検索結果記憶装置の結果を読んだ際、次のグループの検索が必要な場合、そのルール番号等の照合関連情報が格納されているので、グループ番号等の検索関連情報をさらに生成することで、次のグループの検索の際、これらの番号を次のグループの検索対象と一緒に連想メモリへ入力し、検索することが出来る。また、次のグループの検索が不要な場合、必要な処理のみが検索結果格納装置に格納されているので、必ずしも全てのグループを検索することなく検索を終了できる。
【０１０１】
以上のように本発明では、オリジナルのルール表に含まれるルールの検索項目をグループ化したものを連想メモリに格納しており、１つのルールを複数のグループにグループ化して連想メモリに格納することになるので、連想メモリが格納できるビット幅よりもビット幅が長いルールを格納することが出来る。
【０１０２】
したがって、従来、検索可能なビット幅が短い連想メモリの制限で検索が行えなかった非常に長いビット幅を有する幅の広いルールでもフロー識別検索を行うことが出来る。しかも、連想メモリのアクセス速度は１０ナノ秒程度であり、１０Ｇｂ／ｓの回線上で４０バイトのパケットを転送するのに必要な時間３２ナノ秒よりも短く、超高速のルール表検索が可能となる。
【０１０３】
本発明において、前記各ルールに含まれる前記検索項目をグループ化する際、同一のグループに属する複数のグループ化検索項目が特定のデータに一致する可能性があるかどうかを調べ、一致する可能性がある場合には、該複数のグループ化検索項目のうち最も範囲が狭いグループ化検索項目を除く各グループ化検索項目について、該一致する可能性のあるグループ化検索項目の内容として前記最も範囲が狭いグループ化検索項目と同じ内容を有し、かつ、該一致する可能性のあるグループ化検索項目以外のグループ化検索項目及び処理として各グループ化検索項目が属するルールと同じ内容を持つ新たなルールを生成して前記ルール表に追加し、該新たなルールが追加されたルール表をもとに前記連想メモリ及び前記検索結果記憶装置に情報を格納するようにしても良い。
【０１０４】
これにより、ルール表をグループ化して連想メモリに格納する際には、グループ化することによって生じたルール間の曖昧性を防ぐことができる。
【図面の簡単な説明】
【図１】本発明の各実施形態によるフロー識別検索装置が組み込まれるルータの構成例を示すブロック図である。
【図２】本発明の各実施形態によるフロー識別検索装置を搭載したヘッダ検索部の構成例を示すブロック図である。
【図３】本発明の第１実施形態におけるルール番号及び検索項目のグループ化の例を示す説明図である。
【図４】同実施形態における連想メモリと検索結果記憶装置へのデータの格納例を示す説明図である。
【図５】同実施形態におけるルール表のグループ化の基本概念を示す説明図である。
【図６】同実施形態におけるルール表のグループ化の一例を示す説明図である。
【図７】図６のルール表に対する検索動作の一例を示す説明図である。
【図８】本発明の第１実施形態で問題が生じるルール表の一例を示す説明図である。
【図９】図８のルール表に対する検索動作の一例を示す説明図である。
【図１０】図９の検索動作における不具合が発生する概念を示すグラフである。
【図１１】本発明の第２実施形態にかかるルール表の一例を示す説明図である。
【図１２】図１１のルール表をグループ化した場合の説明図である。
【図１３】図１２のルール表に対する検索動作の一例を示す説明図である。
【図１４】同実施形態において保護ルール挿入により不具合が改善される概念を示すグラフである。
【図１５】同実施形態において、オリジナルのルール表上のルールを連想メモリへ格納する際の手順を示したフローチャートである。
【図１６】本発明の第３実施形態において２つのルールが取りうる３通りの関係を示した説明図である。
【図１７】同実施形態において２つのルールの一部分が一致している様子を示した説明図である。
【図１８】同実施形態において、図１７に示した一部分が一致する２つのルールについて一方のルールを分割する様子を示した説明図である。
【図１９】ＩＰパケットの転送のようすを示す説明図である。
【図２０】フロー識別におけるルールの一例を示す説明図である。
【図２１】ＩＰパケットの構造と主なヘッダ情報の一例を示す説明図である。
【図２２】ツリー構造の一例を示す説明図である。
【図２３】連想メモリを用いたフロー識別検索のようすを示す説明図である。
【符号の説明】
１，１００  ルータ
２−１〜２−３  ネットワーク
４  ＩＰパケット
５−１，５−２，５−Ａ  端末
６−１，６−２，６−Ｂ  端末
７−１，７−２，７−Ｃ  端末
１０  ルール表
１１〜１４  ルール
２００  スイッチ
３００−１，３００−ｎ  ラインカード
５００−１，５００−ｎ  パケット格納部
６００，６００−１，６００−ｎ  ヘッダ検索部
６１０  ヘッダ抽出装置
６２０  フロー識別検索装置
６２１  連想メモリ
６２２  フロー識別検索処理装置
６２３  検索結果記憶装置
７００−１，７００−ｎ  パケット処理部
【図１】
0003609358.tif 000002
【図２】
0003609358.tif 000003
【図３】
0003609358.tif 000004
【図４】
0003609358.tif 000005
【図５】
0003609358.tif 000006
【図６】
0003609358.tif 000007
【図７】
0003609358.tif 000008
【図８】
0003609358.tif 000009
【図９】
0003609358.tif 000010
【図１０】
0003609358.tif 000011
【図１１】
0003609358.tif 000012
【図１２】
0003609358.tif 000013
【図１３】
0003609358.tif 000014
【図１４】
0003609358.tif 000015
【図１５】
0003609358.tif 000016
【図１６】
0003609358.tif 000017
【図１７】
0003609358.tif 000018
【図１８】
0003609358.tif 000019
【図１９】
0003609358.tif 000020
【図２０】
0003609358.tif 000021
【図２１】
0003609358.tif 000022
【図２２】
0003609358.tif 000023
【図２３】
0003609358.tif 000024