(57)【特許請求の範囲】
【請求項１】
第１のビットストリングを第１の方向に記憶可能な第１の記憶領域と、
この第１のビットストリングと比較する複数の第２のビットストリングが第２の方向に並列に配置された比較テーブルを記憶可能な第２の記憶領域と、
この第２の記憶領域の前記第２の方向のビット列に対応する記憶領域を備えた状態記憶領域と、
前記第１の記憶領域の前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と、前記第１の方向に順番に比較し、その比較結果を前記状態記憶領域に順次反映する比較手段とを有する検索装置。
【請求項２】
前記状態記憶領域の論理和により、前記比較手段の動作を終了する出力手段をさらに有する、請求項１の検索装置。
【請求項３】
前記出力手段は、終了直前の前記比較結果を出力する、請求項２の検索装置。
【請求項４】
前記第１の記憶領域は、前記第２の方向に複数のビットを記憶する領域を備えており、
前記比較手段では、前記第１の記憶領域の前記第２の方向および前記第１の方向に並んだ各ビットが、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と前記第２の方向および前記第１の方向に順番に比較され、その結果を前記比較結果として前記状態記憶領域に順次反映する、請求項１の検索装置。
【請求項５】
異なる比較テーブルを前記第２の記憶領域に供給するテーブル供給手段と、  被検索ビットストリングから、前記第２の記憶領域に供給された第１の比較テーブルに対応する第１の部分を切り出して前記第１の記憶領域に供給するビットストリング供給手段とを有し、
前記テーブル供給手段は、前記第１の比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の比較テーブルを前記第２の記憶領域に供給し、
前記ビットストリング供給手段は、前記被検索ビットストリングから前記第２の比較テーブルに対応する第２の部分を切り出して前記第１の記憶領域に供給する、請求項１の検索装置。
【請求項６】
前記テーブル供給手段が前記異なる比較テーブルを供給する際に、前記状態記憶領域をプリセットする手段を有する、請求項５の検索装置。
【請求項７】
前記状態記憶領域の内容より、前記比較テーブルから前記第２のビットストリングを特定し、それに関連付けされたデータを出力する判定手段を有する、請求項１の検索装置。
【請求項８】
前記状態記憶領域の内容より、最終の比較テーブルから前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定手段を有する、請求項５の検索装置。
【請求項９】
前記比較テーブルを更新する手段を有する、請求項１の検索装置。
【請求項１０】
前記第１および第２のビットストリングは、パケットを管理するＩＰアドレスを少なくとも含むビットストリングである、請求項１の検索装置。
【請求項１１】
前記第２のビットストリングのうち、前記第１のビットストリングと比較する必要のあるビット位置を示す第３のビットストリングを前記第２の方向に並列に記憶可能な第３の記憶領域と、
前記状態記憶領域の論理和、または、前記比較テーブルの前記ビット列に対応する前記第３の記憶領域のビット列の論理和により前記比較手段の動作を終了すると共に、前記第３の記憶領域のビット列の論理和により終了したときはその直前の前記比較結果を出力する出力手段とを有する、請求項１の検索装置。
【請求項１２】
前記第２および第３の記憶領域は、前記第２のビットストリングとそれに対応する前記第３のビットストリングが前記第２の方向に隣接するようにアレンジされた第４の記憶領域となり、前記比較テーブルは、前記第２のビットストリングとそれに対応する前記第３のビットストリングが前記第２の方向に隣接するようにアレンジされ、さらに、前記状態記憶領域には前記第２のビットストリングの前記比較結果に隣接して前記第３のビットストリングを前記第１の方向に比較した状態が記憶されるようになっており、
さらに、異なる比較テーブルを前記第４の記憶領域に供給するテーブル供給手段と、
被検索ビットストリングから、前記第４の記憶領域に供給された第１の比較テーブルに対応する第１の部分を切り出して前記第１の記憶領域に供給するビットストリング供給手段とを有し、
前記テーブル供給手段は、前記第１の比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の比較テーブルを前記第４の記憶領域に供給し、
前記ビットストリング供給手段は、前記被検索ビットストリングから前記第２の比較テーブルに対応する第２の部分を切り出して前記第１の記憶領域に供給し、
さらに、前記状態記憶領域の内容より、最終の前記比較テーブルから前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定手段を有する請求項１１の検索装置。
【請求項１３】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を規定する下位のビットストリングと上位のビットストリングとであり、
前記第２の記憶領域に、前記下位および上位のビットストリングとが前記第２の方向にペアに並べられた前記比較テーブルを供給する手段を有し、
前記比較手段は、前記状態記憶領域に、ペアになった前記下位および上位のビットストリングと前記第１のビットストリングを比較した以下のＡからＥの結果を前記比較結果として順次反映する、請求項１の検索装置。
Ａ．前記下位および上位のビットストリングと前記第１のビットストリングが一致している全一致状態。
Ｂ．前記下位のビットストリングと前記第１のビットストリングが一致している下位一致状態。
Ｃ．前記上位のビットストリングと前記第１のビットストリングが一致している上位一致状態。
Ｄ．前記全一致状態から前記下位一致状態あるいは前記上位一致状態に移行せず、前記下位一致状態から前記第１のビットストリングが下位になり、あるいは前記上位一致状態から前記第１のビットストリングが上位になった失格状態。
Ｅ．前記下位一致状態から前記第１のビットストリングが上位になり、あるいは前記上位一致状態から前記第１のビットストリングが下位になった候補状態。
【請求項１４】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングであり、
前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する判定手段を有する、請求項１の検索装置。
【請求項１５】
請求項１に記載の検索装置と、
前記検索装置の照合結果に基づき前記第１のビットストリングを備えたデータを管理する手段とを有するデータ管理装置。
【請求項１６】
請求項１２に記載の検索装置を有し、前記第１および第２のビットストリングはパケットを管理するＩＰアドレスであり、前記第３のビットストリングはプリフィックスであり、前記判定手段からはルーティング情報が出力され、
さらに、この検索装置の出力に基づき特定されたルートに前記第１のビットストリングを備えたパケットを送信する手段を有するデータ管理装置。
【請求項１７】
請求項１の検索装置を有し、前記第１および第２のビットストリングはデータパケットが接続される前後の位置を識別するデータであり、
さらに、前記第１の記憶領域に、前方を規定する前記第１のビットストリングと後方を規定する前記第１のビットストリングとが並列に配置されるように供給するビットストリング供給手段と、
前記第２の記憶領域に、前方および後方を規定する前記第２のビットストリングのペアが前記第２の方向に隣接して並列に配置された前記比較テーブルを供給するテーブル供給手段と、
前記第１のビットストリングに対応する前記第２のビットストリングがないと、前記第１のビットストリングを前記比較テーブルに追加する手段と、
前記検索装置の出力に基づき前記データパケットを再構成する手段とを有するデータ管理装置。
【請求項１８】
請求項１３に記載の検索装置を有し、
前記検索装置に、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとして供給する手段と、
前記検索装置の出力に基づき前記第１のビットストリングを備えた前記パケットを管理する手段とを有するデータ管理装置。
【請求項１９】
請求項１４に記載の検索装置を有し、
前記検索装置に、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとして供給する手段と、
前記検索装置により近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する手段とを有するデータ管理装置。
【請求項２０】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する手段を有し、
前記管理する手段は、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項１９のデータ管理装置。
【請求項２１】
請求項１４に記載の検索装置を有し、
前記検索装置に、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスを前記第１のビットストリングとして供給する手段と、
前記検索装置により近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する手段と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する手段とを有するデータ管理装置。
【請求項２２】
第１のビットストリングと比較する複数の第２のビットストリングが並列にソーティングされた状態で配置された比較テーブルが前記第２のビットストリングの上位ビットから適当な単位で複数に分割された比較テーブルを有し、これらの分割された前記比較テーブル内では同一のビットストリングが１つに圧縮されており、さらに、
被検索ビットストリングの一部と前記分割された比較テーブルのいずれかを照合する手段と、
前記照合する手段に第１の前記分割された比較テーブルを供給するテーブル供給手段と、
前記被検索ビットストリングから前記第１の分割された比較テーブルに対応する第１の部分を切り出して前記照合する手段に供給するビットストリング供給手段とを有し、
前記テーブル供給手段は、前記第１の分割された比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の前記分割された比較テーブルを前記照合する手段に供給し、
前記ビットストリング供給手段は、前記被検索ビットストリングから前記第２の分割された比較テーブルに対応する第２の部分を切り出して前記照合する手段に供給し、さらに、
最終の前記分割された比較テーブルが供給されたときの前記照合する手段の結果から前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定手段を有する検索装置。
【請求項２３】
前記第１および第２のビットストリングはパケットを管理するＩＰアドレスであり、前記比較テーブルには、前記第２のビットストリングと並列にそれぞれの第２のビットストリングのプリフィックスが並べられ、前記第２のビットストリングおよびプレフィックスでソーティングされており、さらに、前記判定手段からはルーティング情報が出力される、請求項２２の検索装置。
【請求項２４】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を規定する下位のビットストリングと上位のビットストリングとであり、前記比較テーブルには、前記下位および上位のビットストリングとが前記第２の方向にペアに並べられ、前記下位および上位ビットストリングでソーティングされており、さらに、前記判定手段からは前記範囲に対応する情報が出力される、請求項２２の検索装置。
【請求項２５】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングであり、
前記判定手段は、前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する、請求項２２の検索装置。
【請求項２６】
請求項２２に記載の検索装置と、
前記検索装置の照合結果に基づき前記第１のビットストリングを備えたデータを管理する手段とを有するデータ管理装置。
【請求項２７】
請求項２３に記載の検索装置と、
前記検索装置の出力に基づき特定されたルートに前記第１のビットストリングを備えたパケットを送信する手段を有するデータ管理装置。
【請求項２８】
請求項２４に記載の検索装置を有し、前記第１のビットストリングはＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
さらに、前記検索装置の出力に基づき前記第１のビットストリングを備えた前記パケットを管理する手段を有するデータ管理装置。
【請求項２９】
請求項２５に記載の検索装置を有し、前記第１のビットストリングはＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
さらに、前記検索装置により近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する手段を有するデータ管理装置。
【請求項３０】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する手段を有し、
前記管理する手段は、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項２９のデータ管理装置。
【請求項３１】
請求項２５に記載の検索装置を有し、前記第１のビットストリングは、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスであり、
さらに、前記検索装置により近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する手段と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する手段とを有するデータ管理装置。
【請求項３２】
第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングを第２のビットストリングとし、複数の前記第２のビットストリングをソーティングして並列にした比較テーブルと前記第１のビットストリングとを照合する手段と、
前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する判定手段とを有する検索装置。
【請求項３３】
請求項３２に記載の検索装置と、
前記検索装置の照合結果に基づき前記第１のビットストリングを備えたデータを管理する手段とを有するデータ管理装置。
【請求項３４】
請求項３２に記載の検索装置を有し、前記第１のビットストリングはＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
さらに、前記検索装置により近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する手段を有するデータ管理装置。
【請求項３５】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する手段を有し、
前記管理する手段は、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項３４のデータ管理装置。
【請求項３６】
請求項３２に記載の検索装置を有し、前記第１のビットストリングは、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスであり、
さらに、前記検索装置により近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する手段と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する手段とを有するデータ管理装置。
【請求項３７】
第１のビットストリングが属する範囲に対応する値を出力する検索装置であって、
複数の前記値が与えられると、前記第１のビットストリングが属する範囲を、前記値の重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割する手段と、
前記第１のビットストリングと前記新たな範囲を照合する手段と、
照合された前記第１のビットストリングが属する前記新たな範囲に前記複数の値があるときは、優先度の高い前記値を出力する手段とを有する検索装置。
【請求項３８】
請求項３７に記載の検索装置を有し、
前記検索装置に対し、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットの管理用のビットストリングを前記第１のビットストリングとして供給し、前記パケットを管理するルールを前記値として受け取るビットストリング供給手段と、
前記ルールに基づき前記パケットを管理する手段であって、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する管理する手段とを有するデータ管理装置。
【請求項３９】
第１のビットストリングを第１の方向に記憶可能な第１の記憶領域と、この第１のビットストリングと比較する複数の第２のビットストリングが第２の方向に並列に配置された比較テーブルを記憶可能な第２の記憶領域と、この第２の記憶領域の前記第２の方向のビット列に対応する記憶領域を備えた状態記憶領域とを設け、
前記第１の記憶領域の前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と、前記第１の方向に順番に比較し、その比較結果を前記状態記憶領域に順次反映する比較工程を有する検索方法。
【請求項４０】
前記状態記憶領域の論理和により、前記比較工程を終了する出力工程をさらに有する、請求項３９の検索方法。
【請求項４１】
前記出力工程では、終了直前の前記比較結果が出力される、請求項４０の検索方法。
【請求項４２】
前記第１の記憶領域は、前記第２の方向に複数のビットを記憶する領域を備えており、
前記比較工程では、前記第１の記憶領域の前記第２の方向および前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と前記第２の方向および前記第１の方向に順番に比較し、その結果を前記比較結果として前記状態記憶領域に順次反映する、請求項３９の検索方法。
【請求項４３】
前記比較工程の前に、異なる比較テーブルを前記第２の記憶領域に供給するテーブル供給工程と、
被検索ビットストリングから、前記第２の記憶領域に供給された第１の比較テーブルに対応する第１の部分を切り出して前記第１の記憶領域に供給するビットストリング供給工程とを有し、
前記テーブル供給工程では、前記比較工程により、前記第１の比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の比較テーブルを前記第２の記憶領域に供給し、
前記ビットストリング供給工程では、前記被検索ビットストリングから前記第２の比較テーブルに対応する第２の部分を切り出して前記第１の記憶領域に供給する、請求項３９の検索方法。
【請求項４４】
前記異なる比較テーブルを供給する際に、前記状態記憶領域をプリセットする工程をさらに有する、請求項４３の検索方法。
【請求項４５】
前記状態記憶領域の内容より、前記比較テーブルから前記第２のビットストリングを特定し、それに関連付けされたデータを出力する判定工程をさらに有する、請求項３９の検索方法。
【請求項４６】
前記状態記憶領域の内容より、最終の比較テーブルから前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定工程を有する請求項４３の検索方法。
【請求項４７】
前記比較テーブルを更新する工程をさらに有する、請求項３９の検索方法。
【請求項４８】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を規定する下位のビットストリングと上位のビットストリングとであり、
前記第２の記憶領域に、前記下位および上位のビットストリングとが前記第２の方向にペアに並べられた前記比較テーブルを供給する工程を有し、
前記比較工程では、前記状態記憶領域に、ペアになった前記下位および上位のビットストリングと前記第１のビットストリングを比較した以下のＡからＥの結果を前記比較結果として順次反映する、請求項３９の検索方法。
Ａ．前記下位および上位のビットストリングと前記第１のビットストリングが一致している全一致状態。
Ｂ．前記下位のビットストリングと前記第１のビットストリングが一致している下位一致状態。
Ｃ．前記上位のビットストリングと前記第１のビットストリングが一致している上位一致状態。
Ｄ．前記全一致状態から前記下位一致状態あるいは前記上位一致状態に移行せず、前記下位一致状態から前記第１のビットストリングが下位になり、あるいは前記上位一致状態から前記第１のビットストリングが上位になった失格状態。
Ｅ．前記下位一致状態から前記第１のビットストリングが上位になり、あるいは前記上位一致状態から前記第１のビットストリングが下位になった候補状態。
【請求項４９】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングであり、
前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する判定工程を有する、請求項３９の検索方法。
【請求項５０】
請求項３９に記載の検索方法により、前記第１のビットストリームを照合する工程と、
その照合結果に基づき前記第１のビットストリングを備えたデータを管理する工程とを有するデータ管理方法。
【請求項５１】
請求項３９に記載の検索方法により、パケットを管理するＩＰアドレスを前記第１および第２のビットストリングとし、プリフィックスを第３のビットストリングとして、前記パケットを送信するルートを検索する工程と、
この検索する工程に基づき特定されたルートにパケットを送信する工程とを有し、
前記検索する工程では、前記第２のビットストリングとそれに対応する前記第３のビットストリングが前記第２の方向に隣接するようにアレンジされた第４の記憶領域を設け、前記比較テーブルは前記第２のビットストリングとそれに対応する前記第３のビットストリングが前記第２の方向に隣接するようにアレンジされ、さらに、前記状態記憶領域には前記第２のビットストリングの前記比較結果に隣接して前記第３のビットストリングを前記第１の方向に比較した状態が記憶される、データ管理方法。
【請求項５２】
請求項３９に記載の検索方法により、データパケットが接続される前後の位置を識別するデータを前記第１および第２のビットストリングとし、前記データパケットの前後関係を照合する工程と、
その照合結果に基づき前記データパケットを再構成する工程とを有し、
前記照合する工程では、前記第１の記憶領域に、前方を規定する前記第１のビットストリングと後方を規定する前記第１のビットストリングとが並列に配置されるように供給し、第２の記憶領域に、前方および後方を規定する前記第２のビットストリングのペアが前記第２の方向に隣接して並列に配置された前記比較テーブルを供給し、さらに、前記第１のビットストリングに対応する前記第２のビットストリングがないと、前記第１のビットストリングを前記比較テーブルに追加する、データ管理方法。
【請求項５３】
請求項４８に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとし、それが属する前記範囲を照合する工程と、
その照合結果に基づき前記第１のビットストリングを備えた前記パケットを管理する工程とを有するデータ管理方法。
【請求項５４】
請求項４９に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する工程とを有するデータ管理方法。
【請求項５５】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する工程を有し、
前記管理する工程では、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項５４のデータ管理方法。
【請求項５６】
請求項４９に記載の検索方法により、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する工程と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する工程とを有するデータ管理方法。
【請求項５７】
第１のビットストリングと比較する複数の第２のビットストリングが並列にソーティングされた状態で配置された比較テーブルを前記第２のビットストリングの上位ビットから適当な単位で複数に分割し、分割された比較テーブル内では同一のビットストリングを１つに圧縮するテーブル分割工程と、
被検索ビットストリングから第１の前記分割された比較テーブルに対応する第１の部分を切り出して前記第１の分割された比較テーブルと照合し、前記第１の分割された比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の前記分割された比較テーブルに対応する第２の部分を前記被検索ビットストリングから切り出して前記第２の分割された比較テーブルと照合する照合工程と、
最終の前記分割された比較テーブルが供給されたときの前記照合工程の結果から前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定工程とを有する検索方法。
【請求項５８】
前記第１および第２のビットストリングはパケットを管理するＩＰアドレスであり、
前記テーブル分割工程では、前記比較テーブルに、前記第２のビットストリングと並列にそれぞれの第２のビットストリングのプリフィックスを並べ、前記第２のビットストリングおよびプレフィックスでソーティングし、
前記判手工程では、ルーティング情報を出力する、請求項５７の検索方法。
【請求項５９】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を規定する下位のビットストリングと上位のビットストリングとであり、
前記テーブル分割工程では、前記比較テーブルに、前記下位および上位のビットストリングとを前記第２の方向にペアに並べ、前記下位および上位ビットストリングでソーティングし、
前記判定工程では、前記範囲に対応する情報を出力する、請求項５７の検索方法。
【請求項６０】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングであり、
前記判定工程では、前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する、請求項５７の検索方法。
【請求項６１】
請求項５７に記載の検索方法により、前記第１のビットストリームを照合する工程と、
その照合結果に基づき前記第１のビットストリングを備えたデータを管理する工程とを有するデータ管理方法。
【請求項６２】
請求項５８に記載の検索方法により、前記第１のビットストリングを有する前記パケットを送信するルートを検索する工程と、
この検索する工程に基づき特定されたルートにパケットを送信する工程とを有するデータ管理方法。
【請求項６３】
請求項５９に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとし、それが属する前記範囲を照合する工程と、
その照合結果に基づき前記第１のビットストリングを備えた前記パケットを管理する工程とを有するデータ管理方法。
【請求項６４】
請求項６０に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する工程とを有するデータ管理方法。
【請求項６５】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する工程を有し、
前記管理する工程では、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項６４のデータ管理方法。
【請求項６６】
請求項６０に記載の検索方法により、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する工程と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する工程とを有するデータ管理方法。
【請求項６７】
第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングを第２のビットストリングとし、複数の前記第２のビットストリングをソーティングして並列にした比較テーブルと前記第１のビットストリングとを照合する工程と、
前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する判定工程とを有する検索方法。
【請求項６８】
請求項６７に記載の検索方法により、前記第１のビットストリームを照合する工程と、
その照合結果に基づき前記第１のビットストリングを備えたデータを管理する工程とを有するデータ管理方法。
【請求項６９】
請求項６７に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する工程とを有するデータ管理方法。
【請求項７０】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する工程を有し、
前記管理する工程では、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項６９のデータ管理方法。
【請求項７１】
請求項６７に記載の検索方法により、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスを前記第１のビットストリングとし、それに近似の前記一方のビットストリングを照合する工程と、
近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する工程と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する工程とを有するデータ管理方法。
【請求項７２】
第１のビットストリングが属する範囲に対応する値を出力する検索方法であって、
複数の前記値が与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割する工程と、
前記第１のビットストリングと前記新たな範囲を照合する工程と、
照合された前記第１のビットストリングが属する前記新たな範囲に前記複数の値があるときは、優先度の高い前記値を出力する工程とを有する検索方法。
【請求項７３】
請求項７２に記載の検索方法により、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットの管理用のビットストリングを前記第１のビットストリングとして供給し、前記パケットを管理するルールを前記値として受け取る工程と、
前記ルールに基づき前記パケットを管理する際に、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する管理する工程とを有するデータ管理方法。
【請求項７４】
第１のビットストリングを第１の方向に記憶可能な第１の記憶領域と、この第１のビットストリングと比較する複数の第２のビットストリングが第２の方向に並列に配置された比較テーブルを記憶可能な第２の記憶領域と、この第２の記憶領域の前記第２の方向のビット列に対応する記憶領域を備えた状態記憶領域とを設け、
前記第１の記憶領域の前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と、前記第１の方向に順番に比較し、その比較結果を前記状態記憶領域に順次反映する比較工程を実行可能な命令を有する検索プログラム。
【請求項７５】
前記状態記憶領域の論理和により、前記比較工程を終了する出力工程を実行可能な命令をさらに有する、請求項７４の検索プログラム。
【請求項７６】
前記出力工程では、終了直前の前記比較結果が出力される処理を実行可能な命令をさらに有する、請求項７５の検索プログラム。
【請求項７７】
前記第１の記憶領域は、前記第２の方向に複数のビットを記憶する領域を備えており、
前記比較工程では、前記第１の記憶領域の前記第２の方向および前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と前記第２の方向および前記第１の方向に順番に比較し、その結果を前記比較結果として前記状態記憶領域に順次反映する、請求項７４の検索プログラム。
【請求項７８】
第１のビットストリングを第１の方向に記憶可能な第１の記憶領域と、この第１のビットストリングと比較する複数の第２のビットストリングが第２の方向に並列に配置された比較テーブルを記憶可能な第２の記憶領域と、この第２の記憶領域の前記第２の方向のビット列に対応する記憶領域を備えた状態記憶領域とを設け、前記第１の記憶領域の前記第１の方向に並んだ各ビットを、そのビットに対応する前記第２の記憶領域の前記第２の方向のビット列と、前記第１の方向に順番に比較し、その比較結果を前記状態記憶領域に順次反映する検索プログラムまたは装置を使用して前記第１のビットストリングを前記第２のビットストリングと比較する工程と、
この比較する工程の前に、異なる比較テーブルを前記第２の記憶領域に供給するテーブル供給工程と、
被検索ビットストリングから、前記第２の記憶領域に供給された第１の比較テーブルに対応する第１の部分を切り出して前記第１の記憶領域に供給するビットストリング供給工程とを実行可能な命令を有し、
さらに、前記テーブル供給工程では、前記比較する工程により前記第１の比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の比較テーブルを前記第２の記憶領域に供給し、
前記ビットストリング供給工程では、前記被検索ビットストリングから前記第２の比較テーブルに対応する第２の部分を切り出して前記第１の記憶領域に供給する処理を実行可能な命令を有するプログラム。
【請求項７９】
前記異なる比較テーブルを供給する際に、前記状態記憶領域をプリセットする工程を実行可能な命令をさらに有する、請求項７８のプログラム。
【請求項８０】
前記状態記憶領域の内容より、最終の比較テーブルから前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定工程を実行可能な命令をさらに有する、請求項７８のプログラム。
【請求項８１】
前記比較テーブルを更新する工程を実行可能な命令をさらに有する、請求項７８のプログラム。
【請求項８２】
前記更新する工程では、第１のビットストリングに対応する前記第２のビットストリングがないと、該第１のビットストリングを前記比較テーブルに追加する処理を実行可能な命令をさらに有する、請求項８１のプログラム。
【請求項８３】
第１のビットストリングと比較する複数の第２のビットストリングが並列にソーティングされた状態で配置された比較テーブルを前記第２のビットストリングの上位ビットから適当な単位で複数に分割し、分割された比較テーブル内では同一のビットストリングを１つに圧縮するテーブル分割工程と、
被検索ビットストリングから第１の前記分割された比較テーブルに対応する第１の部分を切り出して前記第１の分割された比較テーブルと照合し、前記第１の分割された比較テーブルに含まれる前記第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の前記分割された比較テーブルに対応する第２の部分を前記被検索ビットストリングから切り出して前記第２の分割された比較テーブルと照合する照合工程と、
最終の前記分割された比較テーブルが供給されたときの前記照合工程の結果から前記第２のビットストリングまたはそれに関連付けされたデータを出力する判定工程とを実行可能な命令を有するプログラム。
【請求項８４】
前記第１および第２のビットストリングはパケットを管理するＩＰアドレスであり、
前記テーブル分割工程では、前記比較テーブルに、前記第２のビットストリングと並列にそれぞれの第２のビットストリングのプリフィックスを並べ、前記第２のビットストリングおよびプレフィックスでソーティングし、
前記判手工程では、ルーティング情報を出力し、さらに、
前記ルーティング情報に基づき前記パケットを送信する工程を実行可能な命令をさらに有する、請求項８３のプログラム。
【請求項８５】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を規定する下位のビットストリングと上位のビットストリングとであり、
前記テーブル分割工程では、前記比較テーブルに、前記下位および上位のビットストリングとが前記第２の方向にペアに並べられ、前記下位および上位ビットストリングでソーティングし、
前記判定工程では、前記範囲に対応する情報を出力する、請求項８３のプログラム。
【請求項８６】
前記第１のビットストリングは、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
前記範囲に対応する情報に基づき、前記第１のビットストリングを備えた前記パケットを管理する工程を実行可能な命令をさらに有する、請求項８５のプログラム。
【請求項８７】
前記第２のビットストリングは、前記第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングであり、
前記判定工程では、前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する、請求項８３のプログラム。
【請求項８８】
前記第１のビットストリングは、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する工程を実行可能な命令をさらに有する、請求項８７のプログラム。
【請求項８９】
前記第１のビットストリングが属する範囲に対応する複数のルールが与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、前記新たな範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを前記第２のビットストリングとして前記比較テーブルを生成する工程を実行可能な命令をさらに有し、
前記管理する工程では、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する、請求項８８のプログラム。
【請求項９０】
前記第１のビットストリングは、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスであり、
近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する工程と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する工程とを実行可能な命令をさらに有する、請求項８７のプログラム。
【請求項９１】
第１のビットストリングが属する範囲を重複しないように規定する下位および上位のビットストリングのいずれか一方のビットストリングを第２のビットストリングとし、複数の前記第２のビットストリングをソーティングして並列にした比較テーブルと前記第１のビットストリングとを照合する工程と、
前記一方のビットストリングが前記下位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが上位方向に分離したときの最も上位の前記一方のビットストリングを近似と判断し、前記一方のビットストリングが前記上位のビットストリングであるときは前記一方のビットストリングに対して前記第１のビットストリングが下位方向に分離したときの最も下位の前記一方のビットストリングを近似と判断する判定工程とを実行可能な命令を有するプログラム。
【請求項９２】
前記第１のビットストリングは、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットを管理するためのビットストリングであり、
近似と判断された前記一方のビットストリングに対応するルールに基づき前記パケットを管理する工程とを実行可能な命令をさらに有する、請求項９１のプログラム。
【請求項９３】
前記第１のビットストリングは、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスであり、
近似と判断された前記一方のビットストリングに対応する前記データブロックと前記第１のビットストリングに対応する前記データブロックとの関係に基づき、前記第１のビットストリングに対応する前記データブロックを含む前記データブロックを再構成する工程と、
再構成された前記データブロックの前記先頭アドレスおよび末尾アドレスにより前記比較テーブルを更新する工程とを実行可能な命令をさらに有する、請求項９１のプログラム。
【請求項９４】
第１のビットストリングが属する範囲に対応する値を出力する際に、複数の前記値が与えられると、前記第１のビットストリングが属する範囲を、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割する工程と、
前記第１のビットストリングと前記新たな範囲を照合する工程と、
照合された前記第１のビットストリングが属する前記新たな範囲に前記複数の値があるときは、優先度の高い前記値を出力する工程とを実行可能な命令を有するプログラム。
【請求項９５】
前記第１のビットストリングは、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含むパケットの管理用のビットストリングであり、
前記出力する工程では、前記パケットを管理するルールが前記値として出力され、
前記ルールに基づき前記パケットを管理する際に、前記一方のビットストリングに対応する前記ルールが複数あるときは、優先度の高い前記ルールを適用する管理する工程を実行可能な命令をさらに有する、請求項９４のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＩＰアドレスなどのビットストリングを検索あるいは照合に適した装置および方法に関するものである。
【０００２】
【背景技術】
インターネットなどのコンピュータネットワークを介してデータを送受信する際には所定のプロトコルが適用され、インターネットのネットワーク層におけるプロトコルはインターネットプロトコル（ＩＰ）と呼ばれている。このＩＰは情報をパケット化して所定の目的地まで移動させるが、そのために、情報を格納したペイロードにＩＰヘッダをつけたパケットを送受信する。そして、ＩＰヘッダの情報に基づいて、各々のパケットは所定のルートに配送され、また、受信先では、ＩＰヘッダの情報に基づいてペイロードの情報が送信元の状態となるように組み立てられる。
【０００３】
また、ＩＰヘッダの情報は、ルータおよびファイアウォールなどのネットワークを管理する装置あるいはソフトウェア（プログラムあるいはプログラム製品）で参照され、ルーティング、パケットフィルタリング、ＳＰＤ（セキュリティ・ポリシーデータベース）、ポリシールーティング、ＱｏＳなどの様々な目的のために照合され、パケットの送受信あるいは転送については常に利用される。
【０００４】
たとえば、図１に示したＩＰヘッダ１に含まれるデータのうち、受信先アドレス（ディスティネーションＩＰ、以降においてはＤＩＰ）２によって送信先が特定され、それに基づいてルーティングが行われる。また、ＤＩＰ２、送信元アドレス（ソースＩＰ、以降においてはＳＩＰ）３、さらに、識別子（ＩＰアイデンティフィケーション、以降においてはＩＰＩＤ）４によりパケットが特定される。そして、フラグメントオフセット（以降においてはＯＦＦＳＥＴ）５により、パケットが断片に分割されて送信されたときに、そのフラグメント化されたパケットの前後関係が特定される。
【０００５】
パケットの受信先アドレス（ＤＩＰ）２によってパケットの出力先（インタフェース）を変える必要のあるルータなどの機器では、アドレス毎にインタフェースが規定されたルーティングテーブルに基づき高速でＤＩＰ２を判別する必要がある。また、受信先では、受信したパケットを組み立てる、あるいは再構成するために、高速でＳＩＰ３、ＤＩＰ２およびＩＰＩＤ４を判別する必要があり、さらに、ＯＦＦＳＥＴ５を見つけてデータを組み立ててトランスポート層などの上位のプロトコルに処理を引き渡す必要がある。また、パケットフィルタリングやＳＰＤ検索においてはＳＩＰ３、ＤＩＰ２などがどの範囲あるいは範疇（ルール）に属するかにより、処理を決定する必要があるので、これらのビットストリングがどのルールに属するかを高速で照合することが要求される。
【０００６】
さらに、今後、モバイルＩＰが実現されると、ルーティングテーブルは動的に変動する可能性があり、また、現状のＩＰｖ４（バージョン４）では、受信先アドレス（ＳＩＰ）２および送信元アドレス（ＤＩＰ）３は３２ビットであるのに対し、ＩＰｖ６（バージョン６）では１２８ビットに拡張される。したがって、今後、ＩＰアドレスの検索における処理速度をさらに向上させることが、インターネットなどのコンピュータネットワークを用いてデータ交換をする上で非常に重要な技術となる。
【０００７】
【発明が解決しようとする課題】
本願の発明者はＩＰアドレスの高速検索の方法として幾つかの方法を検討している。たとえば、ハッシュ関数とリスト検索を組み合わせて高速化をはかる方法がある。しかしながら、ハッシュ関数が衝突したときにリストを辿る処理がネックとなる。また、リストの先に繋がるエントリ数は予測不能なため、処理速度を見積もりしづらいという問題もある。
【０００８】
ハッシュ関数と内容アドレスメモリ（ＣＡＭ）との組み合わせは、速度的には有利だが共用マッチングメモリのためメモリ効率が異様に悪くなる。すなわち、ルーティング検索あるいはフラグメントリアセンブルといったＩＰパケットを取り扱う処理では、キー長の長い検索ではエントリ数が少なく、エントリ数の多いものは比較的キー長が短い。したがって、メモリ効率としては最悪の組み合わせとなる。また、ハッシュ関数の衝突率次第でＣＡＭエリアの必要量が決まるが、衝突率は見積もりしづらく、実データに対してシミュレーションしつつハッシュ関数を決定し、ＣＡＭ量を見積もらなければならないといったＣＡＭをハードウェアで実現する上での難しさがある。また、ＣＡＭを構成するためにハードウェアが膨大になり、非常に高価なシステムになるという問題もある。
【０００９】
そこで、本発明においては、ＩＰアドレスなどの、複数のビットデータ（バイナリデータ）が連続したビットストリングあるいはビットストリームを簡易なシステムで高速に比較、調査、検索あるいは照合できるビットストリングの検索装置および検索方法を提供することを目的としている。また、固定的な簡単な構成でハードウェア化が容易であり、さらに、高速に検索できるテーブル検索による検索装置および検索方法を提供することを目的としている。さらに、比較テーブルを部分的に分けることによって、部分テーブル検索をツリー構造で実行し、低コストで高速なビットストリングの検索を行うことができる検索装置および検索方法を提供することを目的としている。
【００１０】
そして、本発明の検索装置および検索方法をＩＰアドレス検索に適用させることにより、高速ルーティングが可能なルーティング装置および方法を実現することも本発明の目的の１つである。また、本発明の検索装置および検索方法をフラグメントリアセンブルに適用して、高速でパケットの再構成を可能にすることも本発明の目的の１つである。さらに、本発明をパケットフィルタリングやＳＰＤのルールとの照合に用い、ルータやファイアウォールなどのネットワーク上のデータ管理用の機器およびソフトウェアにおいて、高速でデータパケットを管理する技術を提供することも本発明の目的の１つである。また、ネットワーク管理用の機器およびソフトウェアに適した検索あるいは照合用のテーブル技術を作成し、更新する技術を提供することも本発明の目的としている。さらに、本発明のその他の目的については本明細書の中で詳しく記述している。
【００１１】
【課題を解決するための手段及びその作用効果】
このため、本発明においては、まず、ハードウェア化が容易な高速なテーブルサーチエンジンを提供する。本発明のビットストリングの検索装置は、第１のビットストリングを第１の方向に記憶可能な第１の記憶領域と、この第１のビットストリングと比較する複数の第２のビットストリングが第２の方向に並列に配置された比較テーブルを記憶可能な第２の記憶領域と、この第２の記憶領域の第２の方向のビット列に対応する記憶領域を備えた状態記憶領域と、第１の記憶領域の第１の方向に並んだ各ビットを、そのビットに対応する第２の記憶領域の第２の方向のビット列と、第１の方向に順番に比較し、その結果を状態記憶領域に順次反映する比較手段とを有する。したがって、本発明のビットストリングの検索方法は、第１の記憶領域の第１の方向に並んだ各ビットを、そのビットに対応する第２の記憶領域の第２の方向のビット列と、第１の方向に順番に比較し、その結果を状態記憶領域に順次反映する比較工程を有している。
【００１２】
これらの検索装置および検索方法においては、第１のビットストリングの各ビットを、それに対応する比較テーブルのビット列と一括して比較して状態記憶領域に比較結果（照合結果あるいは検索結果）を収納できる。したがって、比較テーブルに含まれた複数の第２のビットストリングと一括で比較できるので、単純なツリー方式のバイナリサーチに比較して高速にサーチできる。一方、比較テーブルをビット列にスライスしてビット列毎に比較するので、ＣＡＭのようにビットストリング全体を同時に並列に一致検索することはできないが、ビット列毎に比較すればよいので、ハードウェアの量は少なく、コンパクトで低コストになる。したがって、膨大なビット量を備えたビットストリングの検索にも十分に対応できる。
【００１３】
さらに、比較結果を順次反映して状態記憶領域に収納しているので、状態記憶領域には比較している状況が常に反映される。たとえば、状態記憶領域がすべて０になると、比較テーブルには第１のビットストリングと一致する第２のビットストリングは存在しないと意味付けることができる。したがって、状態記憶領域の論理和により、比較手段の動作あるいは比較工程を終了する機能を備えた出力手段あるいは出力工程を設けることが可能である。比較テーブルに含まれたビットストリングが一致しない場合は、比較動作を途中で止めて、次の異なる比較テーブルの検索に移行できる。このため、不必要な比較動作を省くことにより、簡単な構成で高速サーチを実現できる。さらに、出力手段あるいは出力工程では、終了直前の比較結果を出力させることも可能である。これは、後述するように、プリフィックスが設定されるＩＰアドレスによるルーティング検索では非常に有用である。
【００１４】
第１の記憶領域を水平方向、すなわち、第２の方向にも展開することが可能であり、複数の第１のビットストリングを同時に検索したり、多ビットの第１のビットストリングを部分的に水平方向に展開して検索時間を短縮することが可能である。すなわち、第１の記憶領域に、第２の方向に複数のビットを記憶する領域を設け、比較する際は、第１の記憶領域の第２の方向および第１の方向に並んだ各ビットを、そのビットに対応する第２の記憶領域の第２の方向のビット列と、第２の方向および第１の方向に順番に比較し、その結果を状態記憶領域に順次反映する。
【００１５】
ビットストリングを部分的に比較できるように分割された比較テーブルを用意し、その分割された比較テーブルを順番に第２の記憶領域に供給する手段あるいは工程を設けることにより、入力された被検出ビットストリングを分割して比較することができる。本明細書では、部分テーブル比較あるいは分割テーブル比較と呼ぶが、第１のビットストリングのビット量が多いケースや、比較対象となる第２のビットストリングが多いケースでは、高速化およびメモリの有効利用の点で非常に有用である。
【００１６】
このため、本発明においては、異なる比較テーブル、すなわち分割された比較テーブルをサーチエンジンの第２の記憶領域に供給するテーブル供給手段または工程と、供給された被検索ビットストリングから、第２の記憶領域に供給された第１の分割された比較テーブルに対応する第１の部分を切り出して第１の記憶領域に供給するビットストリング供給手段または工程とを設けている。この検索方法では、サーチエンジンにより、第１の分割された比較テーブルに含まれる第２のビットストリングが特定されると、第１の分割された比較テーブルの下位の比較テーブルのうち、特定された第２のビットストリングに対応する第２の分割された比較テーブルを第２の記憶領域に供給する。また、被検索ビットストリングからは、第２の分割された比較テーブルに対応する第２の部分を切り出して第１の記憶領域に供給する。この手順を繰り返すことにより、膨大なビット長の被検索ビットストリングであっても短時間に識別することができる。したがって、テーブルサーチエンジンを用いて、データ量の多いビットストリングであっても短時間に検索することができる。
【００１７】
本発明のビットストリングの検索装置および検索方法は、上述した工程、さらには以下で説明する工程あるいは機能を実行可能な命令を有するプログラムあるいはプログラム製品として提供することが可能である。これらのプログラムまたはプログラム製品は、ハードウェアを制御するソフトウェア（ファームウェアも含む）としてコンピュータやマイクロプロセッサなどの処理装置に読み取り可能な適当な形態の記録媒体に記録して提供することができる。また、インターネットなどの有線または無線によるコンピュータネットワークを介して伝送される媒体に埋め込んで提供できる。また、本発明のビットストリングの検索装置および検索方法は、ＬＳＩあるいはその他の専用回路によるハードウェアで実現して提供することも可能である。さらに、所定の動作を繰り返す比較手段および出力手段を含むサーチエンジンの部分をハードウェアで構成し、それらを制御しながらツリー型に検索を行う処理部分をソフトウェア、すなわちプログラムまたはプログラム製品で構成することも可能であり、専用回路の高速性とソフトウェアによるフレキシビリティな比較テーブルの管理能力とを備えた装置を提供できる。
【００１８】
さらに、異なる比較テーブルを供給する際に、状態記憶領域をプリセットする機能、状態記憶領域の内容より比較テーブルから第２のビットストリングを特定し、それに関連付けされたデータを出力する判定機能をサポートすることが望ましく、ソフトウェアでサポートすることにより比較テーブルのサイズや条件などにフレキシブルに対応できる検索装置を提供できる。特に、分割テーブルサーチにおいては、状態記憶領域の内容より、最終の比較テーブルから第２のビットストリングまたはそれに関連付けされたデータを出力する判定機能を設けることが重要である。本明細書においては、階層化された比較テーブルを上位の比較テーブルから参照し、最下層の比較テーブルを最終の比較テーブルとして参照している例を主に説明している。しかしながら、最終の比較テーブルは最下層の比較テーブルに限定されるものではなく、照合過程の最後に行き着く比較テーブルであれば良く、最下層の比較テーブルから照合を初めて上位の比較テーブルを辿り、最上位の比較テーブルを最終の比較テーブルとすることも可能である。
【００１９】
状態記憶領域をプリセットする機能を設けることにより、上流の比較テーブルの照合結果を下流の比較テーブルの照合過程に簡単に反映することができる。すなわち、状態記憶領域の状態は、次のビット列の比較結果に反映されるので、照合が進んでいる照合中に設定すれば、それに対応する第２のビットストリングの領域は比較動作において有効となり、照合が成立しなかった状態に設定すれば、それに対応する第２のビットストリングの領域は比較動作において無効となる。したがって、状態記憶領域を最初にマスクすることにより、第２の記憶領域内を有効な領域と無効な領域に区別することが可能であり、異なる比較テーブルを一括して第２の記憶領域に転送して利用できる。また、状態記憶領域を適切に設定することにより、第２の記憶領域を使い分けできるので、比較テーブルを効率良くＲＡＭなどのメモリに蓄積することができ、メモリ効率をさらに向上できる。
【００２０】
部分テーブル（分割テーブル）サーチでは、比較テーブルを分割することにより、上位の分割された比較テーブルに含まれる第２のビットストリングの上位の部分は同一となるものが多くなる。したがって、それらを１つ第２のビットストリング、すなわち、比較テーブルのエントリに圧縮することにより比較テーブルのエントリ量を削減することが可能となる。圧縮あるいは量子化されたエントリについては、そのエントリに続く下位の比較テーブルを第２の記憶領域にセットして比較を続けることにより被検索ビットストリングと同一あるいは被検索ビットストリングに最も近いエントリを特定することができる。
【００２１】
したがって、特定された第２のビットストリングに続く比較テーブルを第２の記憶領域に供給して比較動作を繰り返すことにより、ツリー構造的に比較処理を進めることができ、バックトラックが発生するのを防止できる。さらに、各々の段階の比較テーブルに含まれる第２のビットストリングの量が一定の範囲になるように比較テーブルを分割することが可能なので、第２の記憶領域の容量を固定することが容易となり、ハードウェア化するのがさらに容易となる。また、分割された比較テーブルのエントリとなる第２のビットストリングの数が圧縮されるので、第２の記憶領域や、比較対象となる複数の比較テーブルを記憶するために必要となる記憶容量は小さくなりメモリ効率も向上する。
【００２２】
このため、第１のビットストリングと比較する複数の第２のビットストリングが並列にソーティングされた状態で配置された比較テーブルを第２のビットストリングの上位ビットから適当な単位で複数に分割し、分割された比較テーブル内では同一のビットストリングを１つに圧縮するテーブル分割工程と、被検索ビットストリングから第１の分割された比較テーブルに対応する第１の部分を切り出して第１の分割された比較テーブルと照合し、第１の分割された比較テーブルに含まれる第２のビットストリングが特定されると、その第２のビットストリングに対応する第２の分割された比較テーブルに対応する第２の部分を被検索ビットストリングから切り出して第２の分割された比較テーブルと照合する照合工程と、最終の分割された比較テーブルが供給されたときの照合工程の結果から第２のビットストリングを特定し、それに関連付けされたデータを出力する判定工程とを有する検索方法あるいはプログラムは、本発明の検索装置を用いたアプリケーションとして非常に有用である。また、このツリー構造的な処理は、分割された比較テーブルに含まれる第２のビットストリングと、被検索ビットストリングの部分である第１のビットストリングとを一括して比較するような他のタイプの検索装置を用いたアプリケーションとしても有用である。
【００２３】
ビットストリングの検索あるいは照合を高速で処理することができる本発明は、デジタルデータを取り扱うすべての処理で有用である。ＭＰＥＧなどの画像データを示すビットストリームから特定のビットストリングを検索したり、膨大な文字データから特定の条件を検索するなどの多様なアプリケーションが考えられるが、特に高速性が要求されるコンピュータネットワークを対象とするデータ管理装置の分野に有効である。
【００２４】
ＩＰアドレスを比較の対象（被検索ビットストリング）とした場合、上位アドレスはネットワークを示し、下位アドレスがローカルアドレスを示す。このため、比較テーブルを分割して量子化する効果は大きく、サーチ対象となる第２のビットストリングを圧縮することができ、処理時間を大幅に短縮でき、メモリ効率も上がる。また、被検索ビットストリングのビット量が増大するにつれて、処理時間が圧縮できる効果、およびメモリ効率は大きくなり、今後、ＩＰアドレスのビット数が増えるので、非常に有用な技術となる。
【００２５】
ＩＰアドレスを被検索ビットストリングとする場合、第２のビットストリングのうち、第１のビットストリングと比較する必要のあるビット位置を示す第３のビットストリング、すなわち、プリフィックス（プリフィックスマスクあるいはサブネットマスク）も第２の方向に並列に記憶する第３の記憶領域を設けることが望ましい。そして、状態記憶領域の論理和、または、比較テーブルのビット列に対応する第３の記憶領域のビット列の論理和により比較手段の動作を終了すると共に、第３の記憶領域のビット列の論理和により終了したときはその直前の比較結果を出力することが有効である。プリフィックスがすべて０になると、その比較テーブルの第２のビットストリングには、それ以上ビットを進めて比較するべき第２のビットストリングが存在しない。したがって、その時点で比較動作を終了することにより、比較結果を得るまでの時間を短縮できる。また、比較テーブルに含まれる第２のビットストリングはすべてユニークであるので、プリフィックスがすべて０になるまで比較動作が進んでいるときは、その直前までＩＰアドレスが一致した第２のビットストリングが存在する。したがって、その比較テーブルには一致した第２のビットストリングがなかったものとするのではなく、それを候補としてさらに比較処理を進め、ルーティングを精度良く特定することができる。
【００２６】
プリフィックスを含めて比較するときは、第２および第３の記憶領域は第２のビットストリングとそれに対応する第３のビットストリングが第２の方向に隣接するようにアレンジされた第４の記憶領域を設けることが望ましい。したがって、比較テーブルも、第２のビットストリングとそれに対応する第３のビットストリングが第２の方向に隣接するようにアレンジされたものにすることが望ましい。これに対応して、状態記憶領域も、第２のビットストリングの比較結果に隣接して第３のビットストリングを並べることが望ましい。このようにアレンジすることにより、比較した結果を第１の方向に伝達しやすいので、比較手段として機能する回路および出力手段として機能する回路が組みやすくなり、高速化できる。一方、第２の記憶領域に比較テーブルを供給してセットする機能と、第１の記憶領域にビットストリングを切り出して供給する機能は、ＲＡＭなどのメモリの所定のアドレスから比較テーブルをダウンロードする処理が主になることを考えるとソフトウェアで実現することが有効である。
【００２７】
また、分割テーブルサーチを行うには、テーブル分割工程では、比較テーブルに、第２のビットストリングと並列にそれぞれの第２のビットストリングのプリフィックスを並べ、第２のビットストリングおよびプレフィックスでソーティングすることが望ましい。そして、最終の分割された比較テーブルからルーティング情報を出力する判定手段あるいは工程を設けることにより、この検索により特定されたルートにパケットを送出する機能を備えた、高速ルーティングが可能なデータ管理装置あるいは管理方法を提供できる。
【００２８】
一方、フラグメントリアセンブルにおいては、パケットを識別するビットストリングは動的に変動する。したがって、第１のビットストリングに対応する第２のビットストリングがないと、該第１のビットストリングを比較テーブルに追加して更新する機能を設けることにより、新たなパケットを識別する条件を自動的に追加できる。そして、パケットを識別するデータを比較してパケットの同一性を判断し、続いて、それらのデータパケットが接続される前後の位置を識別するデータを判断することにより、フラグメントリアセンブルを行うことができる。特に、パケットの前後を判断するデータを比較する場合は、第１の記憶領域には、前方を規定する第１のビットストリングと後方を規定する第１のビットストリングを並列に配置し、また、第２の記憶領域に、前方を規定する第２のビットストリングと、この前方を規定する第２のビットストリングに対応する後方を規定する第２のビットストリングとのペアが第２の方向に隣接して並列に配置された比較テーブルを供給することにより、前後の識別データの比較を同時に行うことができ、処理時間を短縮できる。
【００２９】
また、パケットフィルタリング、ＳＰＤ検索などにおいて、第１のビットストリングが属する範囲を照合するアプリケーションにおいても本発明は有用である。このアプリケーションでは、ＩＰアドレス、ポート番号およびプロトコルの少なくともいずれかを含む管理用の第１のビットストリングを含むパケットを、その第１のビットストリングが属する範囲のルールに基づき管理する。したがって、ビットストリングを下位（from）から上位（to）の範囲指定のフィルタリングを行う必要がある。これをビットストリングのビット毎に一々値の大小比較をやっていたのではとても高速化できない。本発明においては、高速で複数の第２のビットストリングとの比較を行うことにより、特定された範囲あるいはその範囲に設定されたルールを照合できる。したがって、ルータやサーバなどで必要となるパケットフィルタリングあるいはＳＰＤ検索といった範囲検索を高速で実行できるデータ管理装置を提供できる。
【００３０】
本明細書においては、範囲検索を最長一致検索と最長近似検索で提供する。最長一致検索では、第１のビットストリングが属する範囲を特定するために、その範囲を規定する下位のビットストリング（from）と上位のビットストリング（to）をそれらが第２の方向に対となるように並列に第２の記憶領域に配置して検索する。これらの対になった下位および上位のビットストリングと第１のビットストリングとを比較し、下位のビットストリングあるいは上位のビットストリングと第１のビットストリングが一致しているか、あるいは、不一致の場合は、下位および上位のビットストリングで規定される範囲から外れる方向に不一致となったのか、あるいは範囲に入る方向で不一致になったのかを比較結果により判別することができ、その結果を出力することにより第１のビットストリングを有するデータパケットの管理を高速で行うことができる。
【００３１】
第１のビットストリングが規定の範囲に含まれるか否かを判別するためには、比較手段あるいは比較工程で判別される状態は以下の５つに設定することが望ましい。したがって、状態記憶領域は、下位および上位のビットストリングの対ごとに、少なくとも３ビットの記憶領域を持たせることが望ましい。すなわち、状態記憶領域は、第２の方向のビット列に対応し、上下のビットストリングの対ごとに少なくとも３ビットの記憶領域を備えていることが望ましい。
【００３２】
５つの状態は次の通りである。まず、下位および上位のビットストリングと第１のビットストリングが一致している全一致状態であり、ビットストリングの照合が継続すると範囲から外れる可能性があるので、照合過程である。次に、下位のビットストリングと第１のビットストリングが一致している下位一致状態と、上位のビットストリングと第１のビットストリングが一致している上位一致状態との２つの状態であり、これらも照合を続けると範囲から外れることがあるので、照合過程である。
【００３３】
これらに対し、全一致状態から下位一致状態あるいは上位一致状態に移行しない、下位一致状態から第１のビットストリングが下位になる、さらには、上位一致状態から第１のビットストリングが上位になった失格状態は、第１のビットストリングが範囲から外れているので、照合を続けても範囲に含まれることはない。一方、下位一致状態から第１のビットストリングが上位になる、あるいは上位一致状態から第１のビットストリングが下位になった候補状態では、第１のビットストリングが範囲に入ったので、照合を続けなくても範囲内になることは明らかである。したがって、これらの失格状態および候補状態は、対象となる下位および上位のビットストリングの対（エントリ）についての照合が終了したことを示す。したがって、状態記憶領域に反映される比較結果により、上記と同様に第１のビットストリングと上下のビットストリングで表されるルールとの照合を高速で行い、その照合結果に基づき第１のビットストリングを備えたパケットを管理するデータ管理装置を提供できる。
【００３４】
この最長一致検索により、第１のビットストリングがどの範囲（ルール）に入るかを検索する処理でも、上記のように、部分テーブル（分割テーブル）でサーチすることにより、検索対象となるエントリを削減できる。このためには、テーブル分割工程では、比較テーブルに、下位および上位のビットストリングとを第２の方向にペアに並べ、下位および上位ビットストリングでソーティングする。また、判定手段あるいは工程では、最終の分割テーブルに基づき、範囲に対応する情報を出力する。さらに、全一致、下位あるいは上位一致の状態のときに、次に比較する下位の分割テーブルの対象を調整することにより、バックトラックが発生するのを最小に抑えることができる。
【００３５】
これに対し、複数のルールが与えられると、ルールの重複を許すが、範囲は相互に重複しない複数の新たな範囲に分割し、第１のビットストリングが属する新たな範囲を判断した後に、第１のビットストリングが属する新たな範囲に複数のルールがあるときは、優先度の高いルールに基づきパケットを管理する方法がある。この方法はバックトラックが発生しないので、パケットフィルタリングには非常に有効である。
【００３６】
この方法は、本明細書において最長近似検索と称している方法で検索できる。最長近似検索では、第２のビットストリングとしては、第１のビットストリングが属する重複しない範囲を規定する下位および上位のビットストリングのいずれか一方のビットストリングを選択する。そして、複数の第２のビットストリングをソーティングして並列にした比較テーブルと第１のビットストリングとを照合する。この照合過程では、上記と同様に分割テーブル検索を利用できる。照合過程において、一方のビットストリングが下位のビットストリングであるときは、一方のビットストリングに対して第１のビットストリングが上位方向に分離したときの最上位の一方のビットストリングを近似と判断し、一方のビットストリングが上位のビットストリングであるときは一方のビットストリングに対して第１のビットストリングが下位方向に分離したときの最も下位の一方のビットストリングを近似と判断する。
【００３７】
この最長近似のプロセスにより近似と判断された一方のビットストリングに対応するルールに基づきパケットを管理することが可能である。ただし、一方のビットストリングに対応するルールが複数あるときは、優先度の高いルールを適用することが必要である。
この最長近似検索は、また、ＴＣＰパケットのリアセンブルのように、データブロックの先頭アドレスおよび末尾アドレスが一致するだけでなく、前後および包含関係になることもあるフラグメント化されたデータブロックを再構成するアプリケーションにおいても有効である。このデータ管理装置においては、データブロックの先頭に対応する先頭アドレスまたは末尾に対応する末尾アドレスを第１のビットストリングとして最長近似検索を行い、近似と判断された一方のビットストリングに対応するデータブロックと第１のビットストリングに対応するデータブロックとの一致、内外接、前後および包含関係に基づき、第１のビットストリングに対応するデータブロックを含むデータブロックを再構成する。さらに、再構成されたデータブロックの先頭アドレスおよび末尾アドレスにより比較テーブルを更新する。
【００３８】
【発明を実施するための最良の形態】
以下に図面を参照して本発明の実施の形態について説明する。図２に、本発明に係るビットストリング検索装置の概略を示してある。このビットストリング検索装置１０は、ハードウェア（専用回路）によって構成されるサーチ部（サーチエンジン）２０と、それを用いて比較処理などを行うようにプログラミングされたソフトウェア（プログラムまたはプログラム製品）による処理部分３０と、さらに、比較テーブルを記憶したメモリ１１により構成されている。
【００３９】
まず、サーチエンジン２０は、第１のビットストリングφ１が第１の方向（本例では列または垂直方向）に展開される第１の記憶領域（レジスタあるいはメモリ）２１と、複数の第２のビットストリングφ２により形成された比較テーブル２３が、それら第２のビットストリングφ２が第２の方向（本例では行または水平方向）に並んで配置されるようにセットされる第２の記憶領域（レジスタあるいはメモリ）２２と、第２の記憶領域２２の行方向に延びたビット列２４に対応する記憶領域（レジスタまたはメモリ）を備えた状態記憶領域２５とを備えている。すなわち、比較テーブル２３では、第２のビットストリングφ２は第１のビットストリングφ１と同様に第１の方向に展開され、複数の第２のビットストリングφ２が第２の方向に並べて配置される。
【００４０】
サーチエンジン２０は、比較回路２６を備えており、この比較回路２６は、第１の記憶領域２１のビットＲｉを、そのビットＲｉに対応する第２の記憶領域２２のビット列２４の各ビットＡｉ、Ｂｉなどと所定の順番（本例では上位ビットから下位ビットの図面上の上から下の方向）で比較する。さらに、比較回路２６は、その比較結果で、状態記憶メモリ２５の各ビットａ、ｂを更新する。その際、直前の比較結果を示す状態記憶メモリ２５の各ビットａ、ｂの状態に基づき、あるいは反映して、状態記憶メモリ２５の各ビットａ、ｂを更新する。さらに、サーチエンジン２０は、状態記憶メモリ２５に記録された比較結果である各ビットａ、ｂの論理和を演算して比較動作を終了するための出力回路２７を備えている。
【００４１】
処理部３０は、入力あるいは供給されたビットストリング（被検索ビットストリング）φ０を、比較対象となる比較テーブル２３のビット長に合わせて切り出して第１のビットストリングφ１として供給するビットストリング供給部３１と、メモリ１１に記憶された比較テーブル２３の中から、適切な比較テーブルを選択して第２の記憶領域２２に供給して記憶領域２２の内容を更新するテーブル供給部３２と、サーチエンジン２０の出力回路２７の出力結果を判断し、比較テーブル２３の中で特定あるいは候補となった第２のビットストリング（エントリ）φ２に対応する処理を行う判定部３３とを備えている。エントリには下位の比較テーブルの情報あるいはルーティング情報などの検索装置１０の出力となる情報が付随しており、判定部３３はそれらの情報を出力することができる。テーブル供給部３２は、さらに、選択した比較テーブル２３に対応する状態ビットを、比較処理を開始する前に状態記憶メモリ２５に供給し、第２の記憶領域２２のどのエリアを比較処理に使用するかを設定する機能も備えている。
【００４２】
さらに、以下に説明する幾つかのアプリケーションにおいては、比較テーブル２３を動的に更新する必要がある。たとえば、フラグメントリアセンブルにおいては、判定部３３の結果によっては、ビットストリング供給部３１に供給されたビットストリングφ０をメモリ１１の比較テーブル２３に追加あるいは削除する必要がある。したがって、検索装置１０は、テーブル更新処理部３５を備えている。パケットの送り先（経路あるいはルート）を設定するルーティング装置（ルータ）やＳＰＤ検索用の管理装置に本例の検索装置１０を使用する場合は、基本的には比較テーブル２３は静的であり、比較テーブルが更新される頻度は少ない。しかしながら、新たな経路を追加したり、新たなルールを追加することは常にあり、そのような場合は、ルーティング情報を備えたルーティングテーブルや、範囲検索テーブルとして利用されている比較テーブル２３のエントリの追加削除を行うためにテーブル更新処理部３５が機能する。
【００４３】
図３に、本例の検索装置１０を用いてビットストリングを検索する処理の概要をフローチャートにより示してある。図３には、第１のビットストリングφ１と比較する複数の第２のビットストリングφ２が並列に配置された比較テーブルを適当な範囲で複数に分割し、その分割された比較テーブルを辿りながらツリー検索する方法を示してある。この検索処理は大きく３つに区分けすることが可能である。第２のビットストリングφ２が並列にソーティングされた状態で配置された比較テーブルを第２のビットストリングの上位ビットから適当な単位で複数に分割し、分割された比較テーブル２３（本明細書では比較テーブル２３とは主に分割された比較テーブルを示す）の中では同一のビットストリングを１つに圧縮するテーブル分割工程５０ａは、頻繁に比較テーブルが更新されない限り非定常的な処理である。しかしながら、動的に比較テーブルを更新することも可能であり、この場合は、以下の照合工程と並列に処理されることもありうる。テーブル分割工程５０ａについては、アプリケーションの説明においてさらに詳しく示してある。分割された比較テーブル２３を用いて照合を行う照合工程５０ｂは、以下においてステップ５１から５７で詳しく説明している。最終の分割された比較テーブルで特定された第２のビットストリームφ２に関連付けされたデータを出力する判定工程５０ｃはステップ５８として示してある。
【００４４】
照合工程５０ｂでは、まず、ステップ５１で、ビットストリング供給部３１により、入力されたビットストリングφ０から第１の記憶領域２１にセットする第１のビットストリングφ１を切り出してセットする（ビットストリング供給工程）。次に、ステップ５２で、テーブル供給部３２により、ビットストリングφ１に対応する比較テーブル２３をメモリ１１から選択して第２の記憶領域２２に供給し、セットする（テーブル供給工程）。さらに、ステップ５３で、テーブル供給部３２により、選択した比較テーブル２３に対応する状態ビットを状態記憶メモリ２５にセットする。これで、サーチエンジン２０でビットストリングを比較あるいは検索する準備が整ったので、ステップ５４で、サーチエンジン２０でビットストリングの比較を行う。
【００４５】
図４に、サーチエンジン２０における処理の概要を示してある。まず、比較回路２６を用いて、ステップ６５で第１の記憶領域２１のビットと、第２の記憶領域２２のビット列２４とを比較し、ステップ６６では、その結果で状態記憶メモリ２５を更新する。そして、ステップ６７の出力工程では、出力回路２７により状態記憶メモリ２５の論理和が所定の終了条件になれば、ステップ６５および６６を含む比較処理（比較工程）６８を終了して処理部３０に処理を戻す。このサーチエンジン２０のさらに詳しい機能は以下でも説明するが、サーチエンジン２０をソフトウェア（プログラム）で実現することも可能である。しかしながら、サーチエンジン２０は、予め決まった処理を繰り返し実行することになるので、専用回路化して高速で処理することが可能であり、また、いったん専用回路化しても変更の少ない機能であり経済的にも専用回路化するのに適している。
【００４６】
図３に戻って、ステップ５５で、サーチエンジン２０のサーチ結果により比較テーブル２３の特定のビットストリングφ２が特定できると、判定部３３は、ステップ５６で、そのビットストリングφ２に対応する次段（後段あるいは次のレベル）の比較テーブル２３の有無を確認する。次段の比較テーブル２３が存在する場合は、ステップ５７でその比較テーブル２３を選択し、ステップ５１に戻って、入力されたビットストリングφ０から次の第１のビットストリングφ１を切り出して同様の比較処理を行う。
【００４７】
次段の比較テーブルが存在しない場合は、そのときに第２の記憶領域２２にセットされていた比較テーブルが最終段の比較テーブルとなり、入力されたビットストリングφ０に対応する第２のビットストリングφ２（分割されていないビットストリング）が一義的に特定されたことになる。したがって、ステップ５８で、判定部３３により、特定された第２のビットストリングφ２に関連付けされている処理を行う。たとえば、ルータであれば、第２のビットストリングφ２に指定されたルーティング情報（ネクストホップ）を出力し、そのパケットを所定のルートのインタフェースに送出し、フラグメントリアセンブルを行うデータ受信装置であれば、特定されたパケット同士をリアセンブルする。
【００４８】
一方、ステップ５５で比較テーブル２３に該当する第２のビットストリングφ２がなかった場合は、ステップ５９で、同一レベルの次の比較テーブル２３の有無を確認する。同一レベルの第２のビットストリングφ２が多く、第２の記憶領域２２にセットできない場合は、同一レベルで複数の比較テーブル２３を設定することが可能であり、本例の検索装置１０はその点でも、ハードウェア化が容易であり、比較対象となるビットストリングの数に対してフレキシブルである。ステップ５９で、次の比較テーブルがある場合は、ステップ５２に戻って比較処理を続行する。
【００４９】
さらに、ステップ５９で次の比較テーブルが存在しない場合は、メモリ１１に用意された比較テーブル２３に被検索対象のビットストリングφ０に該当するビットストリングが存在しない。したがって、ステップ６１でその処理を行う。ルータであれば、ルーティングができないので、ＩＣＭＰメッセージを送出するなどの処理を行う。なお、ディフォルトルーティングは、エラー処理にならないように設定することが可能であり、これについては後述する。また、フラグメントリアセンブルを行う受信装置であれば、新しいパケットが到来したことになるので、被検索対象のビットストリングφ０をテーブル更新処理部３５に供給し、比較テーブル２３を更新する。
【００５０】
［ルーティングテーブル検索への適用］
以下では、上述したビットストリング検索装置１０をルーティングテーブル検索に使用したルータ（ルーティング装置）について説明する。図５に示すルータ１５は、ネットワーク上のパケットデータを管理する装置であり、パケットφｐの入出力を制御および管理するパケット管理機能１３と、パケットφｐの転送先を判断するためのルーティング検索機能１４と、パケットφｐを転送する条件を判断する機能１９とを備えている。ルーティング検索機能１４は、入力されたパケットの経路を示すエントリを複数備えたルーティングテーブル１４ｔを備えており、パケットφｐのＩＰヘッダ１の受信先アドレス（ＤＩＰ）２をルーティングテーブル１４ｔの各エントリ７０のＤＩＰ２と比較し、一致したＤＩＰ２のエントリに設定された経路（インタフェース）へパケット管理機能１３が送出する。
【００５１】
転送する条件を判断する機能１９は、さらに幾つかの機能に分割されており、たとえば、ネットワーク上のセキュリティーサービスを提供するＩＰセキュリティー（ＩＰｓｅｃ）機能１１０と、ネットワーク上のクオリティーサービスを提供するＱｏＳ機能１１９と、ファイアウォール機能１２０などがある。これらの条件を判断する機能１９の多くは、パケットφｐを管理するＩＰヘッダ１のビットストリングが属する範囲を検索することが要求されており、ＩＰｓｅｃ（ＳＰＤ）機能１１０ではＳＰＤテーブル１１０ｔを検索し、ＱｏＳ機能１１９ではフロー検索テーブル１１９ｔを検索し、ファイアウォール機能１２０ではパケットフィルタリングテーブル１２０ｔを検索する。
【００５２】
パケット管理機能１３は、ネットワークを介してパケットφｐを受信および／または送信可能な１つまたは複数のパケット入出力部１２ａと、受信したパケットφｐをキューイングするメモリ１２ｂとを備えている。キューイングされたパケットφｐは、ルーティング検索機能１４でルーティング先が決まり、ＳＰＤ機能１１０、ＱｏＳ機能１１９およびファイアウォール機能１２０などにおける処理が決定された後に、それらの機能で決定された適切なタイミングで、パケット管理部１３の何れかのパケット入出力部１２ａから適切なルートあるいはネクストホップに送出される。また、ＳＰＤ機能１１０などの照合結果によってはキューイングされたパケットφｐが出力されずに破棄されることもある。
【００５３】
本明細書においては、これらの機能のうち、ルーティング検索に続いて、ＳＰＤ検索を例にとってさらに詳しく説明している。まず、ルーティング検索機能１４においては、パケットφｐのＩＰヘッダ１のＤＩＰ２が被検索ビットストリングφ０となり、それに対応するルーティング情報φｒをパケット管理部あるいはパケット管理機能１３に送出する。パケット管理機能１３は、そのルーティング情報φｒに基づき選択されたルートあるいはノードにパケットφｐを送出する。この検索機能１４で被検索ビットストリングφ０を検索する場合、検索対象となるＩＰアドレスには、ネットワークプリフィックス部（以降においてはプリフィックス）と、ホスト部とがあり、プリフィックスは同一の連続したビット列であり、同一リンク上のすべてのノードに共通するように設定される。一方、ホスト部は、同一リンク上の各ノードでは一意であり、ＩＰアドレス全体は一意となっている。したがって、リンクからリンクに経路を決定する際は、プリフィックスの範囲内で経路が選択できれば十分であり、ルーティングテーブル１４ｔの各エントリにはプリフィックスも合わせて設定される。一方、複数のエントリが選択された場合は、プリフィックス長が最も長いものが最短経路でパケットを転送できる可能性が高いので、そのエントリが選択される。
【００５４】
ルーティング検索機能１４は、上述したビットストリング検索装置１０を使用可能となっており、ＤＩＰ２を第２のビットストリングφ２として採用すると共に、プリフィックスも第３のビットストリングφ３として参照しながら比較する。第２の記憶領域２２に加えて、プリフィックスφ３を比較するための第３の記憶領域を設けることは可能であり、以下に説明する比較処理を本明細書に基づいて、第２の記憶領域とは分離された第３の記憶領域で行うことは可能である。しかしながら、ＤＩＰ２（以降ではφ２）とプリフィックスφ３とを行方向（第２の方向、図２では水平方向）に並列に配置することにより、第２および第３の記憶領域を合体させて第４の記憶領域として処理することができる。そして、比較回路２６の構成なども簡略化でき、また、状態記憶メモリ２５にプリフィックスφ３の状態も同時に反映することができる。
【００５５】
このため、本例のルーティング検索機能１４に用いられる検索装置１０のサーチエンジン２０の第２の記憶領域２２は、図２に括弧で示すように、第４の記憶領域１６として拡張されている。また、状態記憶メモリ２５も、ＤＩＰφ２の比較結果を収納するビットに隣接して、プリフィックスφ３の遷移を収納するビットが設けられるように拡張された状態記憶メモリ１７となっている。また、検索装置１０の比較テーブル２３としてはルーティングテーブル１４ｔが供給される。したがって、以降では比較テーブル２３をルーティングテーブルとして参照する。このため、図６に示すように、第４の記憶領域１６に設定される比較テーブル２３も、第２のビットストリングであるＤＩＰφ２とプリフィックスφ３が行方向に並列にペアをなすように隣接して並んで配置される。そして、テーブル供給部３２が、ＤＩＰφ２とプリフィックスφ３とがペアとなって並列に配列されたルーティングテーブル２３を第４の記憶領域１６に供給する。
【００５６】
また、ツリー検索を行うように、オリジナルのルーティングテーブルを分割して、検索用のルーティングテーブル２３を生成するテーブル分割部１４ｍをルーティング検索機能１４は備えている。したがって、以降で参照する検索対象のＤＩＰφ２は、テーブル分割により分割されたＩＰアドレスである。また、被検索対象のＤＩＰφ１も、ビットストリーム供給部３１により、分割された比較テーブル２３に対応したビット長に切り出されたＩＰアドレスである。
【００５７】
第４の記憶領域１６として、行方向に３２ビット幅が確保されていると、第１レベルのルーティングテーブル２３としては、１６個のエントリ７０に相当する検索対象のＤＩＰφ２を一括で被検索対象のビットストリングである被検索ＤＩＰφ１と比較することができる。また、上述したように、第１レベルのルーティングテーブル２３のエントリの数は、実際のＤＩＰφ２（３２ビット）のルーティングテーブルのエントリの数に対応するものではなく、次段の第２レベルのルーティングテーブル２３を一意に選択できるように量子化あるいは畳み込まれたものである。したがって、本例のルーティングテーブルは、特に、第１レベルのルーティングテーブル２３は、従来のＩＰアドレスを全て規定したルーティングテーブルに対し非常に圧縮されたものになる。
【００５８】
図７に、ルーティング機能１４で使用されるサーチエンジン２０の比較回路２６の一例を示してある。この比較回路２６では、状態記憶メモリ１７に、ＤＩＰφ２と被検索ＤＩＰφ１とを列方向に順番に比較した累積論理積（ビットａ、ｃなど）と、前のプリフィックスφ３（ビットｂ、ｄなど）とが記憶されるようになっており、各ＤＩＰφ２と被検索ＤＩＰφ１とプリフィックスφ３を含む照合状態が状態記憶メモリ１７で分かるようになっている。具体的には、被検索ＤＩＰφ１の列方向のｉ番目のビットＲｉと、ＤＩＰφ２の列方向のｉ番目のビットＡｉとの照合結果をＥＸＮＯＲゲート２６ａで検出する。その結果に対し、プリフィックスφ３の列方向のｉ番目のビットＢｉの状態をＡＮＤゲート２６ｂで反映する。その結果に対し、前の比較結果あるいは照合結果である状態記憶メモリ１７のビットａの状態をＡＮＤゲート２６ｃで反映し、列方向の照合結果を累積する。その照合結果により状態記憶メモリ１７の対応するビットａを更新する。
【００５９】
さらに、ｉ番目のプリフィックスφ３のビットＢｉを反転した値と、前のプリフィックスφ３の照合結果を示す状態記憶メモリ１７のビットｂの値との論理積がＡＮＤゲート２６ｆで演算され、ＯＲゲート２６ｄを介して状態記憶メモリ１７のビットａに反映される。したがって、ビットａには累積された照合状態に加え、照合過程においてプリフィックスφ３が０に変わったことが反映される。プリフィックスφ３が０に変わるまで照合過程が継続していたことは、プリフィックスφ３が０に変わる直前までは、その状態記憶メモリのビットに対応するＤＩＰφ２と被検索ＤＩＰφ１とは照合されていたことを示している。したがって、ＯＲゲート２６ｄによりプリフィックスφ３が０に変わったことを状態記憶メモリ１７の対応するビットａに反映することにより、直前までに累積された照合結果がビットａに表される。なお、図７には、ルーティングテーブル２３のエントリ７０の１つを例に説明しているが、すべてのエントリに対して比較回路２６は上記と同様に処理し、その結果により、各エントリに対応する状態記憶メモリ１７の各ビットの値が更新される。
【００６０】
さらに、プリフィックスφ３の列方向のｉ番目のビットＢｉと、その前のプリフィックスの累積結果を示す状態記憶メモリ１７のビットｂの値とがＡＮＤゲート２６ｅにより論理積が演算され、その値により、状態記憶メモリ１７のビットｂは更新される。したがって、プリフィックスφ３の対応する状態記憶メモリ１７のビットｂはプリフィックスφ３の累積された状態が反映され、プリフィックスφ３がいったん０になると、ビットｂの値は０に固定される。
【００６１】
また、プリフィックスφ３が１から０に変わると、該当するＤＩＰφ２については、それ以降は比較する必要がなくなる。このため、本例の比較回路２６からは、ヒット信号φｈが出力され、プリフィックスφ３が０に変わったエントリをヒットした候補として認識できるようにしている。
図８には、ルーティング検索機能１４で使用されるサーチエンジン２０の出力回路２７の一例を示してある。この出力回路２７では、まず、状態記憶メモリ１７のうち、各ＤＩＰφ２のプリフィックスφ３の累積された状態が反映されるビットｂ、ｄ、ｆなどの論理和をＯＲゲート２７ａで演算する。そして、論理和が０になると比較処理を終了し、処理部３０に比較結果を返す。すべてのＤＩＰφ２のプリフィックスφ３が０になるとそれ以上の比較は不要だからである。その直前まで照合状態であったＤＩＰφ２があると、直前の照合結果は、上記のように対応するＤＩＰφ２との照合結果を示すビットａ、ｃ、ｅなどに反映される。したがって、判定部３３は、ルーティングテーブル２３の中に被検索ＤＩＰφ１に対し有効なＤＩＰφ２があったか否かを判断することが可能であり、それに応じてルーティングを設定する処理を行ったり、テーブル供給部３２により次のレベルのルーティングテーブルをセットする処理を行うことができる。
【００６２】
さらに、出力回路２７は、被検索ＤＩＰφ１と、ルーティングテーブル２３のＤＩＰφ２との累積された照合結果を示す状態記憶メモリ１７の各ビットａ、ｃ、ｅなどの論理和もＯＲゲート２７ｂで演算しており、論理和が０になると比較処理を終了する。照合結果がすべて０であれば、プリフィックスφ３が１であっても被検索ＤＩＰφ１に該当するＤＩＰφ２が記憶領域１６にセットされているルーティングテーブル２３にないことを示しており、これ以上比較処理を行う必要がないからである。したがって、出力回路２７では、ＯＲゲート２７ａおよび２７ｂの論理積をＡＮＤゲート２７ｃで演算し、その出力信号φｇを判定部３３に供給している。なお、ＯＲゲート２７ｂの出力が０になって検索を終了した場合は、同一レベルの他のルーティングテーブル２３があれば、そのテーブルを記憶領域１６にセットしてさらに比較処理を行う。同一レベルのテーブル２３がなければ、照合対象がなく、検索が失敗したことになる。
【００６３】
一方、出力信号φｇが出力されずに、ルーティングテーブル２３の最後まで照合処理が進んだ場合は、ルーティングテーブル２３のエントリは必ずユニークになるように設定されているので、いずれかのエントリ１つが特定され、そのエントリに対応するルーティングあるいは次のレベルのルーティングテーブルを設定するなどの処理が行われる。
【００６４】
図９に、サーチエンジン２０において、状態記憶メモリ１７の各エントリ７０に対応するビットのペアにより照合を進める過程を模式的に示してある。まず、ペア（たとえば、ビットａとビットｂのペア）７１が（１，１）の場合は、ＤＩＰφ２が一致し、プリフィックスφ３も１であるので照合を続ける。そして、プリフィックスφ３が１であってもＤＩＰφ２が一致しない場合、すなわち、ペア７１が（０，１）になると照合は失敗となるので、終了する。一方、プリフィックスφ３が０になるとペア７１は（１，０）となり、そのエントリが候補となる。さらに、照合が続き、次の候補が現れるとそのエントリのペア７１が（１、０）となり、先の候補のエントリのペア７１は（０，０）となって失格となる。このようにして、サーチエンジン２０では照合過程が進み、ルーティングテーブルの中に該当するエントリがあるときはそれが特定される。
【００６５】
図１０に、サーチエンジン２０の記憶領域１６に次段のルーティングテーブル２３を順番にセットしてツリー状に照合作業を進める過程を示してある。ルーティングテーブル検索機能１４においては、被検索ビットストリームφ０として供給された被検索ＤＩＰを複数段階に分けて検索し、その被検索ビットストリームφ０の先頭から最長一致するアドレスを求める。そのためにハッシュテーブルはなく、ツリー移動型の検索方法が使用される。ツリー移動型の検索方法は、サーチエンジン２０として実現されているハードウェアにより部分テーブル検索を行う処理と、ソフトウェアによりサーチエンジン２０で検索するルーティングテーブル（部分テーブル）２３を入れ替える処理とにより実現される。各段あるいは各レベルを構成する分割されたルーティングテーブル（分割テーブル）２３の列方向のビット長、さらに分割する段数は特に定める必要がなく、サーチエンジン２０の第４の記憶領域１６のビット幅（本例では３２ビット１６エントリ）を効率良く利用でき、さらに、照合結果がユニークに定まるようにすればよい。そのような分割テーブルの設定については、以下でさらに説明する。
【００６６】
このツリー移動型の検索方法では、最終段を除く上位の分割テーブル（比較テーブル、部分テーブル）２３は必ず1つの下位の分割テーブル２３を指し、複数の下位のテーブルを指すことはない。したがって、必ず１回の系列の検索で被検索ＤＩＰφ０に該当するエントリがあればヒットし、そのエントリのネクストホップ、ゲートウェイアドレスあるいはインタフェースをルーティング情報φｒとして得ることができる。そして、上位の分割テーブル２３は、量子化されて圧縮されているので、分割テーブルに含まれるエントリは非常に少なくなり、短い時間で照合できる。その結果、次のレベルの分割テーブルが続く場合も、特定されたエントリで指定される分割テーブルだけが選択されるので、同一レベルのすべての分割テーブルをサーチする必要がない。すなわち、分割テーブルを単位としたツリー構造でサーチを進めることができる。したがって、最終のエントリに到達するまでに照合するエントリの数を大幅に削減され、照合時間が非常に短い。その一方で、ヒットするエントリがルーティングテーブルに含まれていれば、１系統のサーチで必ずヒットするので、時間も一定していて、信頼性も高い。
【００６７】
さらに、検索装置１０では、テーブル供給部３２により、記憶領域１６に分割テーブルをセットするときに、状態記憶メモリ１７に値をプリセットすることにより記憶領域１６を有効活用できるようにしている。その様子を、図１１を参照しながら説明する。図１１（ａ）に示す分離型だと下位のテーブル２３のエントリが少ない場合は、テーブル２３に無駄な領域が生じ、それを記憶するメモリ１１の使用効率が悪い。これに対し、図１１（ｂ）に示すように、統合型にすると複数の上位のテーブル２３のエントリ７０が、同一の領域内に格納された下位のテーブル２３を利用できメモリ１１の使用効率が上がる。
【００６８】
ただし、同一のメモリ領域に複数のテーブル２３が格納されるので、対象外のエントリからの検索を避ける必要がある。このため、状態記憶メモリ（状態ビット）１７の初期値を図１０および図１１に示す通り対象のエントリから照合処理を引き継ぐ分割テーブル２３に該当するところのビットにのみ１を立てる。状態記憶メモリ１７の初期状態を設定することにより、図７に示した比較回路２６の論理により、該当しないテーブルはヒットすることがなく、複数の分割テーブル２３が格納されたメモリ領域を一括で第４の記憶領域１６に転送することも可能となる。したがって、メモリ１１の利用効率が上がると共に、メモリ１１から所定の分割テーブルを抽出してサーチエンジン２０の記憶領域１６にセットするハードあるいはソフトウェアの構成も簡単になり、処理速度も向上する。
【００６９】
図１１では、各々の次段のテーブルを同一のメモリ領域に格納しているが、同一のレベルのテーブルを同一のメモリ領域に格納する必要はない。１６エントリ分の記憶領域１６の余りが最小となるようにメモリ１１を分割テーブル２３で埋めるようＣＰＵによるルーティングテーブル生成アルゴリズムを工夫することができ、内蔵メモリ１１の上限を定め、その中へ分割テーブル２３を効率よく収容することができる。
【００７０】
図１２に、本例のルータ１５において、ルーティングテーブル２３にデフォルトルート７３をセットする一例を示してある。デフォルトルート７３は、たとえば、プリフィックス長が０のエントリであり、他のエントリが該当しないときに選ばれるように設定されたものである。このディフォルトエントリ７３に対応する状態記憶メモリ１７のペア７１の初期値を（１，０）にしておけば他候補が現れれば失格し、現れずに検索終了すれば候補のまま、ディフォルトルートが選ばれる。
【００７１】
図１３を参照して、テーブル分割部１４ｍでルーティングテーブル２３を分割する処理について説明する。この処理は、図３に示したテーブル分割処理５０ａに対応するものである。図１３には、上述したルーティングテーブル２３の列方向を横に、行方向を縦に、すなわち９０度回転させて示してある。したがって、各エントリ７０として、プリフィックスφ３とＤＩＰφ２とが上下に並列に配置されている。このように、上記で示した列および行方向は、向きを限定するものではなく、ビットストリングφ２をそのビットストリングの方向（第１の方向）と垂直な方向（第２の方向）に並べてテーブル２３を設定し、その垂直方向にビットスライスしながら比較あるいは照合処理を進めていくことにより、行あるいは列方向とは関係なしに、本発明を適用することができる。図１３は、全体７９がオリジナルのルーティングテーブル（分割する前）を表わし、横にＤＩＰφ２とプリフィックスφ３のペアが延び、そのようなペアが縦方向に複数並んで構成されている。
【００７２】
図中の太線で囲んだ領域Ａｋ（ｋは整数）は分割後の個々の分割テーブル２３を表わす。各分割された比較テーブル２３は、サーチエンジン２０の記憶領域１６のビット幅に対応して下位へ最大１６個の下位テーブルを持つことが可能である。図１３では、各分割テーブルの右に接するのが、その下位の分割テーブルである。分割テーブル２３に含まれる各エントリ７０は、下位の分割テーブルがユニークに定まるように、ユニークである必要がある。したがって、分割テーブルＡ０ビット幅をｂｉｔ（Ａ０）とし、ユニーク操作後の数をＵｎｉ（）とすれば、以下のようにビット幅を決める必要がある。
【００７３】
Ｕｎｉ（ｂｉｔ（Ａ０））＝  ＜１６
Ｕｎｉ（ｂｉｔ（Ａ０）＋１）＞１６    ・・・（１）
具体的なテーブル分割処理は、まず、ＤＩＰφ２とプリフィックスφ３のペアをエントリの単位としてテーブル７９をソートする。たとえば、プレフィックスを優先してソートし、比較対象となるビットの多い順に上から並べる。したがって、第４の記憶領域１６にセットする状態では、左側から昇順にソートされたエントリが一応並ぶ。上記のようにユニーク操作後のビット幅を勘案してテーブルを分割し、個々の分割テーブル２３の中でユニーク操作を行う。すなわち、同一要素、すなわち、同一のＤＩＰφ２およびプリフィックスφ３のエントリ７０を１つに圧縮する。さらに、集約された要素が多いエントリから順に上あるいは下から並べることにより、メモリ領域の利用効率は向上する。以下で説明する最長近似検索においては、ビットパターンの昇順あるいは降順であることが重要となるケースがあるが、最長一致検索ではソーティングすることによりユニーク操作ができれば良いだけであり、エントリのソート状態は意味を持たない。したがって、比較テーブルを記憶するメモリの利用効率を向上する配列にすることが望ましい。
【００７４】
同様の処理で下位のテーブルも分割することが可能である。これにより、各分割テーブル毎に同一要素のエントリを１つに圧縮することにより量子化でき、比較する対象となるエントリ数を削減することができる。また、エントリ数が少なくなるので、ルーティングテーブルを構成するデータ量も圧縮することが可能となり、メモリ１１の利用効率が向上する。そして、上述したような統合型のテーブルを採用することにより、さらにメモリ効率を向上することができる。
【００７５】
なお、下位のテーブルを分割する前に全てのプリフィックスが０のＤＩＰのエントリを除くことができる。しかしながら、最上位のテーブルでこれをやるとディフォルトルートを除くことになるので、注意が必要である。また、下から昇順にソートしているが、ソートの方向は任意であり、本例に限られるものではない。
【００７６】
［フラグメントリアセンブルへの適用］
以下では、図２に示したビットストリング検索装置１０を使用してフラグメントリアセンブルを行うデータ管理装置について説明する。このデータ管理装置は、非同期型のデータ駆動メディアプロセッサ（ＤＤＭＰ）などのデータ受信装置８０として機能する。
【００７７】
ＩＰデータグラム（パケット）は伝達経路によってはオリジナルサイズのままでは転送できず、経路途中で細分化され複数の断片ＩＰ群（断片化されたパケット）の状態で受信されることがある。したがって、受信側（受信装置）では、断片化されたＩＰ群からオリジナルのＩＰ（パケット）を再構成する必要がある。これをフラグメントリアセンブルと呼ぶ。フラグメントリアセンブルは受信ＩＰ層（ネットワーク層）における中心的処理である。
【００７８】
前述したように、個々のＩＰデータ（パケット）はＳＩＰ３と、ＤＩＰ２と、ＩＰＤＩ４により一意に識別される。したがって、受信したフラグメントリアセンブルに必要なパケットはこれらＳＩＰ３、ＤＩＰ２およびＩＰＩＤ４が同一値でのものであり、さらに、オフセット５によりオリジナルパケット（ＩＰデータ）のどの位置であったのかが示される。
【００７９】
このため、図１４に示すように、データ受信装置８０は、受信したフラグメントＩＰデータ集合に対し、同一のオリジナルＩＰデータに組み立てられるべきフラグメントＩＰデータ群（ＳＩＰ３、ＤＩＰ２およびＩＰＤＩ４が同値となるフラグメントＩＰデータ群）を識別し、分離する識別機能８１と、それぞれの分離したデータ群について個々のフラグメントＩＰデータのオフセット５により並べ替えるソート機能８２と、フラグメントＩＰデータを結合して只一つのオリジナルＩＰデータを再構成する再構成機能８３とを備えている。このリアセンブル処理の中核となるのは、前段での同一フラグメントＩＰデータ群の識別処理８１と、後段でのオフセット５によるソート処理８２であり、受信したフラグメントＩＰを１パケット処理するたびに必ず実行されるため、ＩＰ処理速度への影響が大きい。
【００８０】
上述したＤＤＭＰなどでＩＰパケットを受信するＴＣＰ／ＩＰエンジンにおいては、フラグメントＩＰデータ群管理にＩＰフラグメントコントロールブロック（ＩＰＦＣＢ）データ構造を使う。したがって、フラグメントＩＰデータがどのＩＰＦＣＢに属すべきなのか決める識別処理８１では、ＳＩＰ３−ＤＩＰ２−ＩＰＩＤ３を連結したビットストリングをキーとした完全一致検索により決定する。続いて行われるフラグメントＩＰデータがオリジナルＩＰデータのどこに位置すべきかを決定するソート処理８２では、ＩＰＦＣＢ内にあるフラグメント位置情報テーブルに対してビットストリングであるオフセット５をキーとしたソートを行い、断片ＩＰデータの挿入位置を決定する。したがって、識別処理８１では、ＩＰＦＣＢを識別するためのエントリを備えた識別テーブル８４を用意することにより本発明に係るビットストリングの検索装置１０を使用することができ、ソート処理ではオフセット５をエントリとした端点テーブル９５を用意することにより検索装置１０を使用することができる。このため、リアセンブルの処理速度を向上できると共に、ハードウェアを簡易にし、比較テーブルを格納するメモリ効率を向上することができる。
【００８１】
図１５に、ＳＩＰ３−ＤＩＰ２−ＩＰＩＤ３を連結したビットストリングを検索するための識別テーブル８４のツリー構造を示してある。ルートの第１段の比較テーブル２３としてＤＩＰ２を識別する３２ビットのテーブル２３ａを一段用意し、ルートから分岐した第２段以降にＳＩＰ３を識別するための１６ビット分割テーブル２３ｂを一段、さらに、８ビット分割テーブル２３ｃを２段設けている。さらに、その下の第５段以降の分割テーブルとして、ＩＰＩＤ４を識別するための８ビット分割テーブル２３ｄが２段設けられており、この検索ツリーで確定したＩＰＩＤ４の先が確定したＩＰＦＣＢ８５に繋がり、ＩＰデータの属するデータ群が特定される。検索するＩＰＦＣＢの識別ビットストリングは、基本的にＤＩＰ２は自ＩＰであり、ＰＰＰなどを持つ状態を考えてもバリエーションは極めて少ない。したがって、３２ビット幅の比較テーブル２３ａを用意し、さらに、最初に比較処理を行うことにより処理時間を短縮している。また、ＳＩＰ３についても一定短時間についてみると同一ＩＰの出現率が高く、それほど幅広い値となることはない。したがって、上位１６ビットの比較テーブル２３ｂについても少エントリ数であることが見込める。
【００８２】
各段のテーブル２３はパラメータとして与えられるビット長×固定エントリ数のテーブルである。したがって、図２に示した検索装置１０を識別機能８１で使用する場合は、サーチエンジン２０の第２の記録領域２２に識別テーブル８４の各段のテーブル２３あるいはそれをさらに分割したテーブルを供給することにより、ハードウェア（専用回路）により照合作業を行う。そして、ソフトウェアの処理部３０の判定部３３が検索結果を受け、テーブル供給部３２に次段テーブルのＩＤ情報を伝達する。テーブル供給部３２は、次段の比較テーブルでサーチエンジン２０の記憶領域２２を更新し、再度マッチング命令を発行することで、ツリー状に次段へと乗り移ってサーチを繰り返す。そして、最終段でＩＰＩＤが一致したエントリが示すＩＰＦＣＢの識別情報（ＩＤ）を得て最終結果とし、そのＩＰＦＣＢ−ＩＤを持って次の端点テーブルソート処理８２へと移行する。
【００８３】
図１６に、識別処理８１で使用するサーチエンジン２０の比較回路２６の構成例を示してある。本例の比較回路２６では、状態記憶メモリ２５の各ビットａおよびｂに、それに対応する各ビットストリングφ２と被検索ビットストリングφ１とを列方向に順番に比較した累積論理積が記憶される。このため、具体的には、被検索ビットストリングφ１の列方向のｉ番目のビットＲｉと、比較対象となる比較テーブル２３に含まれるビットストリングφ２の列方向のｉ番目のビットＡｉおよびＢｉとの照合結果をそれぞれ独立したＥＸＮＯＲゲート２６ａで検出する。その結果に対し、さらに、状態記憶メモリ２５の直前の状態ａおよびｂがそれぞれＡＮＤゲート２６ｂで反映され、その結果で状態記憶メモリ２５の対応するビットａおよびｂが更新される。行方向の他のビットに対しても同様の処理を行う。
【００８４】
図１７に、識別処理８１で使用されるサーチエンジン２０の出力回路２７の一例を示してある。この出力回路２７では、被検索ビットストリングφ１と、テーブル２３の検索対象のビットストリングφ２との累積された照合結果を示す状態記憶メモリ２５の各ビットａ、ｂ、ｃなどの論理和をＯＲゲート２７ｂで演算し、その論理和が０になると比較処理を終了する。照合結果がすべて０であれば、被検索ビットストリングφ１に該当するストリームφ２が記憶領域２２にセットされているテーブル２３にないことを示しており、これ以上は比較処理を行う必要がないからである。したがって、出力回路２７では、ＯＲゲート２７ｂの出力信号φｇを判定部３３に供給している。
【００８５】
照合するビット位置を移動させながら上記のような比較演算を繰り返し、パラメータとして与えられたテーブルビット長の回数演算を行う。その後、候補となるエントリ（状態記憶メモリ２５のいずれかのビットが１のエントリ）が残っているか判断し、候補があれば、その候補に指定された次テーブルへ乗り移る。このため、各分割された比較テーブル２３の構成は、図１８に示されたようになっている。すなわち、比較するビットストリングφ２が並列に記憶されたテーブルエントリ２３ｐと、各エントリに続く次段のテーブル情報２３ｑとで１つのテーブルが構成されている。テーブル情報２３ｑには、次段で指定されたテーブルのエントリのうち、サーチエンジン２０で比較処理する際に有効となるエントリを示すマスク情報９０が０から３１の数値により示されている。このマスクパターンは図１９に示すようにマスクテーブル９１で規定された値であり、第２の記憶領域２２は１６ビット幅で構成されているので、このマスクテーブル９１の範囲内で有効なエントリを指定することができる。
【００８６】
このマスクパターンは、先に図１１を参照しながら説明した統合テーブルにより多重化を行い、メモリの有効利用を図る上で有用な情報であり、比較処理をスタートするに先立って状態記憶メモリ２５にセットされる。さらに、後述するように、エントリを新たに登録したり、削除するときに、マスクパターンを入れ替えるだけでエントリの追加削除を自由に行うことも可能である。
【００８７】
ＩＰデータは次々と到来するので、新しいＩＰデータは識別処理８１では該当するものが検索できない。したがって、検索エラーとなるが、次に、テーブル更新部３５の機能を用いて、検索に失敗したビットストリングφ１を登録する必要がある。この登録プロセス（図３に示すフローチャートではステップ６１に対応）においては、検索に失敗した位置あるいはレベルのテーブルおよびそれ以下のレベルのテーブルが登録すべきツリーとなる。まず、テーブルの空きを調べ空きエントリを見つける。空きがなければ、その処理をキャンセルし、呼び出し元へ処理を差し戻す。一方、空きエントリがあるときは、その空きエントリにテーブルビット長分のデータをセットし、次段のテーブルへのポインタを設定する。さらに、次段のテーブルに移り、そこでもテーブルのビット長にあわせてデータを設定する。そして、ＩＰＩＤの最下段のテーブルでは、ＩＰＦＣＢを確保し、テーブルにはＩＰＦＣＢへのポインタを設定する。
【００８８】
一方、登録と共に削除するプロセスも必要となる。このプロセスにおいては、検索同様にツリーを辿り最後のＩＰＩＤ４の下位テーブル検索まで行う。ツリーを辿るそれぞれの段で下位との間で待ち合わせを行う。検索結果としてエントリ番号が得られるので、そのエントリを不使用（used＝0）とする。全エントリについて有効かを判定し、全エントリ無効であれば空きテーブル管理に返却する。また、空きテーブル解放を行ったかどうかのステータスを待ちあわせている上位段に通知し、上位段は下位段からの通知を受け、必要であれば自段テーブルのエントリを削除する。同様に上位へと辿り、最上位まで通知を戻していく。
【００８９】
さらに、タイムアウト削除というプロセスも必要となる。タイムアウト管理プロセスがＩＰＦＣＢのＴＴＬを調べ、タイムアウト処理を行う。そして、消すべきエントリが決定すれば削除処理を行う。削除すべきＩＰＦＣＢは、ＩＰＦＣＢに記録された検索キーを用いて削除プロセスに依頼することができる。また、タイムアウトではないが遅延状態であるエントリについては、個々のＩＰＦＣＢ内のＴＴＬを調べ、遅延状態を検出し、所定のマークをつけておくことが望ましい。
【００９０】
次に、端点テーブルを用いたソート処理８２について説明する。端点テーブル９５とは、図２０に示すように、識別処理８１により決定したＩＰＦＣＢ内に存在するオフセット５の位置情報、すなわち、ヘッドオフセット９６と、尾部オフセット９７をキーとして、断片ＩＰデータを登録したテーブルである。本例では、断片化されたフラグメントデータ毎に、これらのヘッドオフセット９６と尾部オフセット（テイルオフセット）９７とをペアで１つのエントリとして端点テーブル９５を構成している。そして、この端点テーブル９５を比較テーブル２３として検索装置１０に供給し、照合を行う。
【００９１】
このため、ソート機能８２においては、被検索ビットストリングφ０（本例では分割テーブルにしないためにビットストリングφ１となる）もヘッドオフセット９６と尾部オフセット９７とをペアで構成する。これにより、図２に示したビットストリング検索装置１０をソート処理８２に使用することが可能となる。したがって、検索装置１０のテーブル供給部３２は、サーチエンジン２０の第２の記憶領域２２に端点テーブル９５を供給し、ビットストリング供給部３１は被検索ビットストリングφ１を第１の記憶領域２１に供給する。サーチエンジン２０によりハードウェア的に、検索対象のＩＰデータのオフセット５のヘッドオフセット９６と尾部オフセット９７とを、端点テーブル９５のヘッドオフセット９６と尾部オフセット９７との間で完全一致照合することができる。
【００９２】
図２１に、ソート処理８２で使用されるサーチエンジン２０の比較回路２６の構成例を示してある。第２の記憶領域２２には、ヘッドオフセット９６と尾部オフセット９７がペアになった複数のエントリが供給され、第１の記憶領域２１にもヘッドオフセット９６および尾部オフセット９７がペアになった被検索ストリームφ１が供給される。したがって、比較回路２６では、状態記憶メモリ２５においても隣接するビットａおよびｂがペアとなる。しかしながら、ソート処理８２においては、被検索ストリームφ１のヘッドオフセット９６および尾部オフセット９７と、第２の記憶領域のエントリφ２のヘッドオフセット９６および尾部オフセット９７が同時に一致することはないので、状態記憶メモリ２５の各ビットはそれぞれ独立した意味を持つ。そして、状態記憶メモリ２５の各ビットには、第２の記憶領域２２の各エントリφ２のオフセット９６および９７と被検索ビットストリングφ１のオフセット９６および９７と個別に列方向に順番に比較した累積論理積が記憶される。
【００９３】
具体的には、図１６に示した比較回路とほぼ同様の構成であり、被検索ビットストリングφ１のペアになった列方向のｉ番目のビットＲｉおよびＲ‘ｉと、比較対象となる第２の記憶領域２２の端点テーブル９５に含まれるビットストリングφ２の列方向のペアのｉ番目のビットＡｉ、Ｂｉがそれぞれ別のＥＸＮＯＲゲート２６ａで照合され、その結果に対し、さらに、状態記憶メモリ２５の直前の状態ａおよびｂがそれぞれＡＮＤゲート２６ｂで反映され、その結果で状態記憶メモリ２５の対応するビットａおよびｂが更新される。行方向の他のビットに対しても同様の処理が行われる。受信装置８０のソート処理８２のために採用されるサーチエンジン２０の出力回路２７は、図１７で説明したものと同様になるので、ここでは説明を省略する。
【００９４】
このような構成で各フラグメントデータのオフセットを検索することにより、ヘッドオフセット９６と尾部オフセット９７との照合処理を同一のＩＰデータに対して一括して行うことができる。さらに、ヘッドオフセットおよび尾部オフセットが一致しないフラグメントデータの場合は、一致しないことが判明した段階で照合処理を終了して、そのフラグメントデータのヘッドオフセットおよび尾部オフセットを端点テーブル９５に登録する処理を行うことができる。そして、照合処理を専用回路でハードウェアによって実行できるので、短時間で照合処理を終了することができる。
【００９５】
ソート処理８２においては、サーチエンジン２０の照合結果により、判定部３３は、ヘッドオフセットについての一致エントリ（状態記憶メモリ２５のビットペアが１０のエントリ）と、尾部オフセットについての一致エントリ（状態記憶メモリ２５のビットペアが０１のエントリ）の情報を取得し、再構成するステップ８３で、それらに基づいてフラグメントデータを接合あるいは組み立てて１つのオリジナルのデータパケットを再構築できるようにする。すなわち、あるエントリのヘッドオフセットについて被検索対象のフラグメントデータのオフセットが一致している場合は、そのエントリの前に被検索フラグメントデータが接合することを意味する。また、尾部オフセットについての一致している場合は、その被検索フラグメントデータが該当エントリの後ろに接合することを意味する。そして、いずれも一致しない場合は、接合できる点を持たないフラグメントデータであり、後に照合するフラグメントデータと接合するので、そのヘッドオフセット９６および尾部オフセット９７を端点テーブル９５に登録する。このように、フラグメントの接合処理は、リスト構造のＩＰデータメモリブロックを接続する処理と、接合したエントリについて、端点テーブルの登録データの更新する処理とからなる。
【００９６】
図２２に、フラグメントデータが接合されてオリジナルデータが再構築されていく様子を示してある。まず、最初にフラグメントデータ（以下ではフラグメント）１０１Aが到着したときに識別処理８１で照合した結果、一致するＩＰＦＣＢが存在しないので、そのＩＰＦＣＢを比較テーブル２３に登録すると共に、新たに端点テーブル９５を生成して初期化し、同時に、フラグメント１０１Ａのオフセットを端点テーブル９５に登録する。図２２（ａ）は、その後、フラグメント１０１Ｆ，Ｇ，Ｘ，ＹおよびＺが到来した状態を示してある。
【００９７】
次に、図２２（ｂ）に示したように、フラグメント１０１Ｃが到来すると、分離処理８１によりＩＰＦＣＢが一致すると判断されるが、ソート処理８２においてオフセットが一致するフラグメントが検索できない。したがって、フラグメント１０１Ｃのオフセットは端点テーブル９５に新たに登録される。
図２２（ｃ）に示すように、フラグメント１０１Ｅが到来すると、識別処理８１によりＩＰＦＣＢが一致すると判断され、さらにソート処理８２において、フラグメント１０１Ｆのヘッドオフセットと一致すると判断される。したがって、フラグメント１０１Ｅはフラグメント１０１Ｆの前に接合され、さらに、そのヘッドオフセットは一致しないので、新たに端点テーブル９５に登録される。この際、前後の接続性を総合し、端点テーブル９５をフラグメント１０１Ｅおよび１０１Ｆを統合した１つのエントリに更新する。
【００９８】
図２２（ｄ）に示すように、フラグメント１０１Ｂが到来すると、識別処理８１によりＩＰＦＣＢが一致すると判断され、さらに、ソート処理８２により、フラグメント１０１Ａの尾部オフセットと、フラグメント１０１Ｃのヘッドオフセットと一致すると判断される。したがって、フラグメント１０１Ｂはフラグメント１０１Ａの後ろに接合され、フラグメント１０１Ｃがそれに続いて接合される。そして、エントリはフラグメント１０１Ａ、１０１Ｂおよび１０１Ｃが統合されたものになる。このような処理を繰り返し、次第にエントリが統合されていく。最終的には接続の結果１エントリにまとまり、リアセンブル完了し、分断される前のデータが再構築される。
【００９９】
［ＳＰＤ検索などの範囲検索への適用］
以下では、図２に示したビットストリング検索装置１０をＳＰＤ検索に使用する例について説明する。図５に示したように、ネットワーク上のデータを管理する機能としてはＳＰＤ検索機能１１０、ＱｏＳ機能１１９あるいはパケットフィルタリングを用いたファイアウォール機能１２０などがあり、これらの機能では、パケットφｐを管理するためのビットストリングに適用されるルールを識別する必要がある。したがって、ビットストリングが属する範囲検索を行う必要があり、以下で示すＳＰＤ検索の手法は、その他の範囲検索に対しても適用することができる。特に、ファイアウォールなどのようなネットワークセキュリティを専用に行う用途では、ルールを決定するエントリ数が大量である。高速サーチが要求される。
【０１００】
ＳＰＤ検索処理１１０では、検索キーとしては、ＳＩＰ（送信元アドレス）３、ＤＩＰ（受信先アドレス）２、送信元ポート番号、受信先ポート番号およびプロトコルを含んだビットストリングが被検索ビットストリングφ０として主に用いられる。そして、検索あるいは照合されたルールあるいはルールナンバφｎがパケット管理部１３に渡され、パケット管理部１３は照合されたルールに基づきパケットφｐをブロック（キューイングされたパケットを送出しない）したり、認証を求めたり、ルートを変えるなどのネットワークのセキュリティーを確保する処理を行う。
【０１０１】
プロトコル以外の４つのキーとなるアドレスあるいは番号は、それぞれの数値の範囲で指定することができ、以下の処理では、その範囲と特定のルールとを結びつけて処理する。すなわち、指定された範囲の内あるいは外でデータパケットの取り扱いやルーティング方法が異なり、転送の可否などが決定される。このようなパケットの管理は、ネットワークセキュリティに限らず、上述した他の機能、たとえば、ポリシールーティング、ＱｏＳ（Quality of Service）などにおいても同様である。
【０１０２】
図２３に、ＳＰＤ検索機能１１０のさらに詳細な構成を示してある。ここでは、データパケットφｐに含まれるＳＩＰ３、ＤＩＰ２、送信元ポート番号６、受信先ポート番号７およびプロトコル８の５つのキー１１１からなるビットストリングが、ルールの範囲内であるか否かを決定する被検索ビットストリームφ０となる。さらに、以下では、ＳＰＤ検索機能１１０の範囲検索を最長一致で行う例を示しており、このため、ＳＰＤテーブル１１０ｔとしては、各エントリとしてルールを規定する下位のビットストリング（Ｆｒｏｍビットストリング）φ２ｆおよび上位のビットストリング（Ｔｏビットストリング）φ２ｔを対にして登録したテーブルを用意している。そして、ＳＰＤテーブル１１０ｔを分割した比較したテーブル２３をテーブル供給部３２によりサーチエンジン２０の第２の記憶領域２２に供給し、ビットストリング供給部３１により被検索ビットストリームφ０を切り出した被検索あるいは被照合ビットストリームを第１の記憶領域２１に供給してビットストリングφ０が属するルールを検索する。
【０１０３】
図２３に示したＳＰＤ検索機能１１０ａでは、上述した５種類のキー１１１をそれぞれ独立した被検索ビットストリングとして、５つのキー１１１を照合するプロセスを並列に実行するようにしている。このため、被検索ビットストリングφ０を構成要素、すなわち、ＳＩＰ３、ＤＩＰ２、送信元ポート番号６、受信先ポート番号７およびプロトコル８（以降においてはＩＤ１からＩＤ５）の５つ各々の要素に対応するキー（ｋｅｙ１からｋｅｙ５）１１１に分割し、ＳＰＤテーブル１１０ｔも、それぞれのキー１１１に対応するＩＤ１からＩＤ５のルールを規定する分割された比較テーブル２３とし、検索装置１０により並列に照合する。このため、ＳＰＤテーブル１１０ｔを分割して適当な規模の分割された比較テーブル２３を生成するテーブル分割部１１４を備えている。さらに、各々の検索装置１０で照合されたルールの番号１１２の論理積を演算して残ったルールが複数あるときは、ルール選択処理１１３で、それらのルールの最小の番号のルールを優先度の高いルールとして選択する。このようにして、ルールが１つに選択されるので、次の処理１１５で選択されたルールでデータパケットの転送先を制限したり、送受信を拒否するなどの管理を行う。この処理１１５は、パケット管理部１３の処理であり、ルール選択処理１１３も含めてパケット管理部１３で行うことも可能である。
【０１０４】
図２３に示したＳＰＤ検索機能１１０ａでは、被検索ビットストリングφ０を５つのキー１１１に分けて並列に照合するので、高速に結果を得ることができる。その一方で、同時に並列的に各キーの照合を行おうとすると検索装置１０がキーの数だけ少なくとも必要となるので、回路規模が膨大となる。また、いずれかのキーの照合結果がルールに該当するものがない（ＮＧ）であっても、その他のキーについても照合作業が行われるので、効率はそれほど良くない。
【０１０５】
図２４に、異なる処理方法を用いたＳＰＤ検索機能１１０ｂを示してある。このＳＰＤ検索機能１１０ｂの全体構成は上記の並列型の検索機能と同じであるが、照合を各キーあるいはＩＤ毎に逐次行い、あるキーの照合結果で残っているルールのエントリについてのみ絞り込みながら後続のキーの照合を行う。したがって、検索装置１０を使用する回数は減り、ＳＰＤ検索機能１１０ｂの回路規模を小さくできる。また、後続のキー１１１を照合する範囲（エントリ）を絞ることができるので、照合あるいは検索効率を上げることが可能であり、並列型に比較すれば、多くのケースでは照合時間が延びるとしても短時間で照合結果を得ることもできる。この場合も複数のルールがすべての照合条件を満足する可能性があるので、ルール選択機能１１３を設け、最小の番号のルールを見つけ、処理１１５でそのルールに基づいてパケットを処理する。
【０１０６】
いずれの処理方法であっても、検索装置１０でテーブルサーチによりルールとビットストリングの照合ができるので非常に高速になり、短時間で照合結果を得ることができる。なお、上記の並列型および逐次型のＳＰＤ検索機能の構成は例示であり、これら並列型と逐次型の混合したものなどの各キーとＩＤとの比較結果の組み合わせ方式が異なるもの、あるいは、被検索ビットストリングをキーあるいはＩＤ単位では分割せずに比較照合するものなども本発明の範囲に含まれる。
【０１０７】
図２５に示すように、最長一致方式でＳＰＤ検索を行う場合、ルールの範囲を、その範囲を規定する下位のビットストリング（Ｆｒｏｍビットストリング）φ２ｆと、上位のビットストリング（Ｔｏビットストリング）φ２ｔにより表す。これらのビットストリングφ２ｆおよびφ２ｔとを並べてルールのＦｒｏｍ境界線とＴｏ境界線とを表す。両者の識別はビット位置で行い、例えばＦｒｏｍ境界線が左で、左から比較テーブル２３のビット位置を１から数えるならＦｒｏｍ境界線は比較テーブル２３の奇数ビットに、Ｔｏ境界線は比較テーブル２３の偶数ビットに必ずペアで記述される。これらのエントリの各ビットストリングあるいはその一部が一致した場合、たとえば、ホスト一致、ポート一致の場合は、両境界線は同一とする。
【０１０８】
したがって、被検索ビットストリングφ０あるいは切り出された被検索ビットストリングφ１とこれらのルールを規定するビットストリングφ２ｆおよびφ２ｔとを逐次照合した場合、その状況は図２５に示すように、実線の全一致照合過程１２５、破線のＦｒｏｍ一致照合過程１２６、一点鎖線のＴｏ一致照合過程１２７、Ｆｒｏｍ境界線とＴｏ境界線の間、すなわちルールの範囲内となる候補１２８、ルールから外れる失格１２９の５状態となる。したがって、本例のＳＰＤ検索処理１１０ａまたは１１０ｂで検索装置１０を使用する場合は、これらの５状態を状態記憶メモリ２５に３ビットで記憶させる。
【０１０９】
図２６に照合過程の遷移を示してある。全一致照合過程１２５は状態記憶メモリ２５では「１００」で表され、全一致照合過程継続の条件は被検索ビットストリングφ０のビットと、Ｆｒｏｍビットストリングφ２ｆのビットおよびＴｏビットストリングφ２ｔのビットが一致することである。
Ｆｒｏｍ一致照合過程１２６は状態記憶メモリ２５では「１０１」で表され、全一致照合過程１２５からＦｒｏｍ一致照合過程１２６への遷移の条件は、非検索ビットストリングφ１のビットと、Ｆｒｏｍビットストリングφ２ｆのビットが一致（照合）し、Ｔｏビットストリングφ２ｔのビットが不一致（非照合）になることである。
【０１１０】
Ｔｏ一致照合過程１２７は状態記憶メモリ２５では「１１０」で表され、全一致照合過程１２５からＴｏ一致照合過程１２７への遷移の条件は、非検索ビットストリングφ１のビットと、Ｆｒｏｍビットストリングφ２ｆのビットが不一致（非照合）となり、Ｔｏビットストリングφ２ｔのビットとは一致（照合）になることである。
【０１１１】
失格１２９の状態は状態記憶メモリ２５では「０００」で表され、全一致照合過程１２５から失格１２９への遷移の条件は、非検索ビットストリングφ１のビットと、Ｆｒｏｍビットストリングφ２ｆのビットが不一致（非照合）となり、また、Ｔｏビットストリングφ２ｔのビットとも不一致（非照合）になることである。Ｆｒｏｍ一致照合過程１２６から失格１２９への遷移の条件は、被検索ビットストリングφ１のビットが０となり、Ｆｒｏｍビットストリングφ２ｆのビットが１となることである。つまり被検索ビットストリングφ１が０（図２５の左）へＦｒｏｍビットストリングφ２ｆが１（図２５の右）へ遷移するときしか失格になれない。一方、Ｔｏ一致照合過程１２７から失格１２９への遷移の条件は、被検索ビットストリングφ１のビットが１となり、Ｔｏビットストリングφ２ｔのビットが０になるときである。つまり被検索ビットストリングφ１が１（図２５の右）へＴｏビットストリングφ２ｔが０（図２５の左）へ遷移するときしか失格になれない。
【０１１２】
これに対し、候補１２８の状態は状態記憶メモリ２５では「０１１」で表され、全一致照合過程１２５から候補１２８への遷移することはなく、Ｆｒｏｍ一致照合過程１２６から候補１２８への遷移の条件は、被検索ビットストリングφ１のビットが１となり、Ｆｒｏｍビットストリングφ２ｆのビットが０となることである。つまり被検索ビットストリングφ１が１（図２５の右）へＦｒｏｍビットストリングφ２ｆが０（図２５の左）へ遷移するときしか候補になれない。一方、Ｔｏ一致照合過程１２７から候補１２８への遷移の条件は、被検索ビットストリングφ１のビットが０となり、Ｔｏビットストリングφ２ｔのビットが１になるときである。つまり被検索ビットストリングφ１が０（図２５の左）へＴｏビットストリングφ２ｔが１（図２５の右）へ遷移するときしか候補になれない。
【０１１３】
このように、分割テーブル２３のエントリ７０としてルールを規定するＦｒｏｍビットストリングφ２ｆとＴｏビットストリングφ２とのペアを採用し、さらに、それらの照合状態を状態記憶メモリ２５に上記のような状態で記憶させることにより、それらのビットと、被検索ビットストリングφ１のビットとをビットストリング検索装置１０のサーチエンジン２０で、上記の他の例と同様に順次照合することができる。そして、照合結果が順次、状態記憶メモリ２５に反映されるので、その状態から被検索ビットストリングφ０がルールに属するか否かを高速で判断することが可能となる。
【０１１４】
図２７に、本例のＳＰＤ検索処理１１０ａまたは１１０ｂで使用される検索装置１０のサーチエンジン２０の記憶領域２２に次段のルーティングテーブル２３を順番にセットしてツリー状に照合作業を進める過程を模式的に示してある。サーチエンジン２０の基本的な構成は先に説明した図１０と同様であり、共通する部分の説明は省略する。本例においても複数段階に分かれて検索する。このため、ビットストリング供給部３１が被検索ビットストリングφ０を分割して第１の記憶領域２１にロードし、テーブル供給部３２が第２の記憶領域２２に分割された比較テーブル２３をロードする。そして、図３を参照して説明したように、サーチエンジン２０が、ロードされたビットストリングφ１の先頭から、ロードされた分割テーブル３２のエントリ７０と照合し、ソフトウェア処理部３０によりサーチエンジン２０で検索する分割テーブル２３を入れ替えることにより、ツリー移動による照合作業が行われ、照合結果がユニークに定まる。ただし、後述するように、複数のルールが照合される場合があり、その場合は最小の番号のルールが優先される。
【０１１５】
ルーティング検索においては、上位の分割テーブル２３で選択されたエントリと、下位の分割テーブルとは１対１で対応しており、必ず１つの下位の分割テーブル２３を指し、複数の下位のテーブルを指すことはないようにしている。しかしながら、本例の範囲検索では、ルールの範囲が重複することがあり、また、複数のルールの境界線（Ｆｒｏｍ境界あるいはＴｏ境界）が一致しており、被検索ビットストリングφ１がＦｒｏｍ一致照合過程あるいはＴｏ一致照合過程であるときは、エントリを１つに絞ることができない。したがって、図２７の状態１３０のときは、それら照合過程にある複数のエントリ７０から１つの分割テーブル２３が選択されるようにして１つの下位の分割テーブル２３を指すようにしている。このように分割テーブル２３を生成することにより、本例でも、分割テーブルを単位としたツリー構造でサーチを進めることができ、最終のエントリに到達するまでに照合するエントリの数を大幅に削減することが可能であり、照合時間が非常に短くできる。その一方で、ヒットするエントリがルーティングテーブルに含まれていれば、１系統のサーチで必ずヒットするので、信頼性も高い。
【０１１６】
しかしながら、エントリを１つに絞れない可能性を考慮し、それらのエントリに対応する下位テーブルを１つに纏めることを第１に考えた設計にすると、下位テーブルを収納するために第２の記憶領域を非常に大きなものにしなくてはならない可能性がある。その一方で、エントリを１つに絞れない確率と、それらの下位テーブルを纏めたときに非常にエントリ数が多くなる確率はそれほど高くなく、そのような低頻度の状況に対応するためにハードウェアを大きくすることは経済的でない。したがって、本例では、上記と同様にエントリ数は３２ビット幅に対応する１６個に絞っており、照合されたエントリ数が一定の値、たとえば９個を超えたような状態では下位テーブルを分けて検索のバックトラックを許す構成にしている。上記のように、バックトラックが発生する条件になる確率は非常に小さくバックトラックを許したとしても、照合速度に与える影響はほとんどない。その一方で、ハードウェアが膨大になる危険を避けることができるので経済的な選択であるといえる。
【０１１７】
図２８は、本例のＳＰＤ検索処理１１０ａまたは１１０ｂで使用されるＳＰＤテーブル１１０ｔを分割した比較テーブル２３を示している。Ｆｒｏｍビットストリングφ２ｆとＴｏビットストリングφ２ｔのペアが１つのエントリ７０となり、複数のエントリ７０が一定の方向に並ぶ。本例では、Ｆｒｏｍビットストリングφ２ｆとＴｏビットストリングφ２ｔが各々１ビット幅で、左にＦｒｏｍビット列が配置され、右にＴｏビット列が配置された２ビット幅のエントリ７０となっている。
【０１１８】
サーチエンジン２０の内部関数である比較回路２６の一例を図２９に示してある。本例では、サーチエンジン２０における検索過程の状態を示す状態記憶メモリ２５は図２６などに基づき説明したように１つのエントリ７０の状態を示すために３ビット「ａ０、ａ１、ａ２」が用いられる。このため、比較回路２６は、図２６に基づく遷移過程を実現できるような論理構成を実現するためのワイヤードロジックあるいはゲートロジックなどのハードウェアロジックであり、各エントリのビット列２４と被検索ビット列φ１のビットが入力され、状態記憶メモリ２５の内容が更新される。
【０１１９】
図３０は、サーチエンジン２０の出力回路２７の構成例である。本例では、状態記憶メモリ２５の各エントリ７０の照合過程を示す３ビットの内、第１ビットの論理和をＯＲゲート２７ｂでとり、その出力信号φｇが低レベルになることをサーチ終了の条件としている。図２６を参照すれば分かるように、状態記憶メモリ２５では、失格の状態が「０００」であり、候補の状態が「０１１」である。したがって、照合過程が終了していれば第１ビットは０になる。
【０１２０】
分割テーブル２３の照合過程において、すべてのエントリが失格であれば、被検索ビットストリングφ０が含まれるルールがないことを示しており、下位の分割テーブルの照合は不要であり、さらに、ＳＰＤ検索処理１１０ｂにおいて、これに続くキー１１１あるいはＩＤの照合作業は不要となる。一方、候補の状態があれば、そのキー１１１におけるルールが見つかったので、そのルールでパケットを管理するか、あるいは、これに続くキーあるいはＩＤの照合作業を行う。
【０１２１】
一方、分割テーブル２３の照合を終了したときに、照合過程（全一致、Ｆｒｏｍ一致あるいはＴｏ一致）であり、そのエントリに続く下位の分割テーブル２３がある場合は、テーブル供給部３２に情報を返し、ソフトウェア処理によって第２の記憶領域２２に下位の分割テーブル２３をダウンロードして次の照合作業を行う。
【０１２２】
被検索ビットストリングφ０が属するルールを検索する場合、途中の分割テーブルサーチで候補が見つかっても、照合状態が続いている場合は、その照合状態に関わるルールに含まれるか否かを最終的に確認する必要がある。したがって、下位の分割テーブル２３に照合状態を伝達する必要がある。これは、上記の一致検索においても同様であるが、本例では、照合状態を示す状態記憶メモリ２５が１エントリあたり３ビットであり、一方、分割テーブル２３の１エントリが２ビットであるのでそのままでは下位のテーブルに伝達しにくい。このため、図３１に示すように１エントリあたり、２ビットの管理情報状態ビット２９を設け、状態記憶メモリ２５の検索過程状態を示す３ビットを２ビットの情報に変換して引き継ぐようにしている。したがって、テーブル検索を開始するときは、まず、管理情報状態ビット２９の内容にしたがって、状態記憶メモリ２５の各エントリの検索過程状態ビットの３ビットを初期設定してからサーチエンジン２０により照合作業を開始する。
【０１２３】
図３２に示すように、照合作業中、あるいはテーブルサーチが終了すると、サーチエンジン２０からは次のような結果が返される。テーブルサーチの途中で出力回路２７の結果が低レベルになると、そこで検索を終了し、候補があれば終了通知と共に候補のエントリが連絡される。したがって、検索装置１０では、判定部３３が分割テーブル２３に付随する情報に含まれるルールへのインデックス情報２３Ｍを参照し、ソフトウェアによって、照合されたエントリに対応するルールＮｏが出力される。状態記憶メモリ２５の状態により、複数の候補があれば複数の候補が通知され、失格だけであれば、候補は通知されない。テーブルサーチが終了しても照合過程のエントリがあり、検索が下位の分割テーブル２３に続く場合は、上位の分割テーブル２３に付随する次のテーブルアドレス情報２３Ｌが参照され、テーブル供給部３２により、第２の記憶領域２２に新しい分割テーブルがダウンロードされる。さらに、分割テーブル２３には、その分割テーブルの縦ビット長の情報２３Ｎが含まれており、被検索ビットストリングφ０から対応するビット長のストリームφ１が切り出されて第１の記憶領域２１にセットされる。また、管理情報状態ビット２９に相当する状態ビットの情報２３Ｏも含まれており、サーチを開始するまえに状態記憶メモリ２５の各エントリのビットが初期セットされる。これらのテーブルに付随する情報のうち、候補となったルールのインデックス情報２３Ｍ以外は、テーブル供給部３２で処理され、サーチエンジン２０の初期状態を設定するために用いられる。
【０１２４】
上位の分割テーブル２３の検索結果で複数のエントリ７０が候補となっており、下位のテーブルに続く場合は複数ある下位の次テーブルアドレス情報２３Ｌとその状態ビット情報２３Ｏを参照し、下位テーブルが１つになるようであれば、各状態ビット情報の論理和（ＯＲ）を演算し、次のテーブル検索の管理情報状態ビット２９として引き継ぐ。一方、複数の下位テーブルに分割せざるを得ない場合は、一方の系列を先行してサーチエンジン２０を稼動し、一方の系列が終わってから保留にしておいたもう一方の系列をサーチエンジン２０にセットして作業を行う。したがって、この場合は、バックトラックを許すことになるが、上述したように、確率は非常に小さく、ハードウェアなどの経済性を考慮すると好ましい解決方法である。
【０１２５】
ビットストリング検索装置１０においては、このようにして、ある系列が検索終了なら保留されている系列が有るか調べ、あればこの系列の検索を続ける。保留を含め全ての検索終了なら全ての候補から候補ルールを調べる。１候補が複数のルールに対応する事もあるので、複数の候補ルールがあれば、それらを含めて照合結果として出力する。並列処理を行う図２３に示したＳＰＤ検索処理１１０ａであれば、候補ルールの論理積をとって、優先順位の最も高いルール（本例では、インデックスが最小のルール）に従った管理を行う。一方、図２４に示した逐次型のＳＰＤ検索処理１１０ｂであれば、複数候補ルールから下位のキー１１１に対応する次のＩＤの最上位の分割テーブル２３の状態ビットを設定し、候補となったルールに限定して照合作業を上記と同様に行う。そして、下位のＩＤまでの検索が終了したときに複数の候補ルールがあれば上記と同様に優先順位の高いルールにしたがった管理を行う。ＩＤを検索している過程でルールがなくなれば。その時点で該当無しとして照合を終了する。すなわち、該当するルールがないので、データパケットの転送を禁止するなどの処理を行う。ルールの優先順位は、ルールＮｏの大小に限らない適当な方法で設定できる。
【０１２６】
なお、下位の分割テーブルを記憶する際に、内蔵メモリの有効な利用方法として複数のテーブルを統合する方法があり、これは図１１に基づき説明した方法と同様につき、詳しい説明は省略する。
ＳＰＤ検索処理１１０においては、ＳＰＤテーブル１１０ｔから分割テーブル２３を作成する処理は非定常処理となる。したがって、テーブル分割部１１４の処理は、ＣＰＵを用いたソフトウェア処理とすることが望ましい。各キーあるいはＩＤ（ＤＩＰ３、受信先ポート、ＳＩＰ２、送信元ポート、プロトコル）を統合したテーブルを作成することも可能であるが、照合対象となるビットストリングが膨大になる。このため、本例では、各ＩＤに分割した処理を行っており、サーチ用の分割テーブル２３も各ＩＤ毎に作成するようにしている。図３３に示した分割テーブル２３は、ＳＩＰ２を照合するための分割テーブル２３の例であり、図１３と同様に、９０度回転した状態で示してある。Ｆｒｏｍビットストリングφ２ｆと、Ｔｏビットストリングφ２ｔが２段で１つのエントリ７０のペアとなり、縦方向はペアの個数、すなわち、エントリ７０の個数である。これらの各ペアには優先順にルールＮｏが振られている。さらに管理情報状態ビット２９のために１ビットが用意されており、これによって１つのＩＤの分割テーブル２３が形成される。そして、１つのＩＤ（キー）の分割テーブル２３の規模が大きい場合は、さらに分割テーブル２３を分割してサーチエンジン２０にセットする分割された比較テーブル２３を生成する。
【０１２７】
サーチエンジン２０は、最長一致アルゴリズムにより範囲を照合するときの問題点は、上述しているように、候補となるエントリが複数表れる点と、照合状態が続いたときは、それを複数のエントリがある場合でも継続して照合する必要があることである。したがって、分割テーブル間で、複数のエントリが照合段階であると複数の下位テーブルを検索しなければならない。さらに、候補があっても照合段階が残っていると、それぞれの下位テーブルまで検索範囲を広げ最終的な優先順位が出るまで検索を止められない。このような検索を各エントリ毎に行っていると、バックトラックが頻繁に発生する可能性があり、検索効率を下げることになる。したがって、上述したように、複数のエントリ７０が照合中になった場合でも、複数の下位テーブルを一つにまとめられるように、本例では上位のテーブルの照合段階に応じて下位テーブルの状態ビットを生成し、記憶状態メモリ２５を初期セットするようにしている。
【０１２８】
ＣＰＵで比較テーブル（分割テーブル、部分テーブル）２３を作成する事前処理では、ホスト一致、ポート一致のものはＦｒｏｍビットストリングφ２ｆおよびＴｏビットストリングφ２ｔをすべて同じにする。そして、これらのビットストリングφ２ｆおよびφ２ｔは定められた位置に配置する（例えばφ２ｆは奇数ビット位置、φ２ｔは偶数ビットｂｉｔ位置）。そして、ルールの優先順位にしたがって下から順に並べる。その次に、テーブルの優先順の高いほう（下）からエントリ７０を取り出し、下から順に照合する。自分以外（自分に来る前に）に照合したら、そのエントリ７０は照合済みのエントリに含まれるということなので、テーブル２３から除き、エントリを圧縮あるいは量子化する。
【０１２９】
このようにして分割テーブル２３を作成した後は、図１３を参照しながら説明したように、各ＩＤ内の分割テーブルの分割操作を行う。ただし、実際に照合中に下位テーブルを記憶領域２２にダウンロードするときは、上述したように、管理状態ビット２９との論理和（ｏｒ）を演算することにより、検索中にバックトラックが発生するのを最小限にすることができる。
【０１３０】
［ＳＰＤ検索などの範囲検索の異なる例］
上述したように、上記の方法ではバックトラックが発生するのを完全に無くすことはできない。そこで、範囲検索において、バックトラックの発生を防止することができる検索方法についてさらに説明する。このため、以下の検索方法では、バックトラックを発生させないように、複数のルールが与えられると、ルールの重複を許すが、相互に重複しない複数の新たな範囲に分割する処理を設け、被検索ビットストリングが属する範囲が一義的に確定するようにしている。そして、その範囲を照合するために、最長近似検索を行う。
【０１３１】
図３４に、本例のＳＰＤ検索機能１１０ｃの概略構成を示してある。ＳＰＤ検索機能１１０ｃの全体構成は図２３および図２４に示した通りであり、図３４は、ＳＰＤ検索テーブル１１０ｔを正規化し、サーチエンジン２０を備えた検索装置１０で照合する過程を抜き出して示してある。したがって、図２３および図２４で示したように、被検索ビットストリームφ０を各検索キー（ＳＩＰ３、ＤＩＰ２、送信元ポート番号６、受信先ポート番号７およびプロトコル８）で並列に照合する構成、あるいは、シーケンシャルに照合する構成を採用することも可能である。
【０１３２】
このＳＰＤ検索機能１１０ｃでは、ＳＰＤテーブル１１０ｔで与えられたルールを正規化して新たな範囲を求め、検索用の比較テーブル（バイナリ−ツリーテーブル）２３を生成する処理１３０と、被検索対象である第１のビットストリングφ１が属する新たな範囲を判断する処理１３５と、照合されたルールが複数あるときは優先度の高いルールを選択する処理１１３とを行う。そして、図５に示したデータ管理装置１５では、ＳＰＤ検索機能１１０が選択されたルールあるいはルールナンバφｎをパケット管理部１３に供給して、選択されたルールに基づきパケットを管理する処理１１５を行う。上述したように、パケット管理部１３において、ルールの優先度を判断して、パケットを管理するようにしても良い。
【０１３３】
このＳＰＤ検索機能１１０ｃにおいては、後述するように、範囲を指定する第２のビットストリングは１つにされる。したがって、照合する過程１３５は極めてシンプルとなり、先に説明した検索装置１０のハードウェアによる照合過程１３６と、ソフトウェアにより比較テーブルを入れ替えて照合過程１３６を続行する乗り移り過程１３７とをほぼそのまま使用することができる。ただし、範囲を求めるために、最長一致検索とはならず、最長近似検索となるために、判定部３３のロジックが異なるものとなる。
【０１３４】
まず、ルールを正規化して比較テーブル２３を生成する処理１３０を説明する。この処理１３０は、ルールを正規化する工程１３１と、領域テーブルを生成する工程１３２と、それを量子化してバイナリ−テーブル２３を生成する工程１３３とを備えており、ＳＰＤテーブル１１０ｔが動的には変化しないので、ソフトウェアを用い、非定常処理として実行することができる。本例において、ルールを正規化するとは、照合処理のために範囲の数値表現をＦＲＯＭ／ＴＯ表現からＦＲＯＭ／ＮＥＸＴ表現にすることを意味する。すなわち、ルールと範囲の関係を、ルールの重複は許し、範囲の重複は許さないで分割した領域表現に変換する。たとえば、Ｐｉを領域中の値とし、範囲［Ｐａ，Ｐａ´］と範囲［Ｐｘ，Ｐｘ´］が与えられたときに、Ｐａ＜Ｐｘ＜Ｐａ´の関係があるときは、［Ｐａ，Ｐｘ−１］、［Ｐｘ，Ｐａ´］、［Ｐａ´＋１，Ｐｘ´］の３つの新たな範囲を定義することにより、新たな範囲のいずれかに属することが分かれば、それに対応するルール（優先するルール）を一義的に決定することができる。すなわち、範囲［Ｐａ，Ｐａ´］は、［Ｐａ，Ｐｘ−１］および［Ｐｘ，Ｐａ´］の２つの新たな範囲に分割される。従って、ｍ個のルールが与えられたときは、領域数（新たな範囲の数）を最大で２ｍ＋１に分割することにより、重複することのない新たな範囲を設定することができる。最大となる条件は、すべてのルールの範囲のＦＲＯＭ／ＴＯがユニークな場合であり、実際は、重複することが多いために新たな範囲の数はかなり少ない。
【０１３５】
また、この新たな範囲には、ルールが与えられていない範囲も、ルールが与えられていない範囲として意味を持つことになる。したがって、図３５に示すように、ＦＲＯＭ／ＴＯによる範囲は［Ｆｒｏｍ，＊］および［Ｎｅｘｔ，＊］という範囲に変換する必要がある。つまり、ＦＲＯＭ／ＴＯのペアで１範囲を表現していたものが、Ｆｒｏｍ値／Ｎｅｘｔ値それぞれが独立領域を表現することになる。Ｆｒｏｍ値は元のルール範囲のＦｒｏｍ値と同値であり、ルール範囲の開始位置（左端点）を示す。Ｎｅｘｔ値はルール範囲のＴｏ（範囲終了位置）＋１であり、ルール範囲の右側の範囲外領域の開始位置（左端点）である。これにより、Ｆｒｏｍ値／Ｎｅｘｔ値は新たな範囲の端点として独立した存在となり、新たな範囲は常に左端点（下位のビットストリング）の１点で表現され、正規化された定義となる。すなわち、新たな範囲の右端点はＮｅｘｔ領域左端点−１で暗黙に表現される。なお、ルール領域の右端点を中心に考えて、新たな範囲を上位のビットストリングの１点で表現することも可能である。その場合は、以下の説明を上位と下位を逆転させて考えれば良い。
【０１３６】
したがって、正規化する処理１３１は次のようになる。
From  ←  From(同値)
Next  ←  To+1(To≠MAX)  or  NA（To＝MAX）
：NA＝0〜MAX範囲外の無効値として定義
その結果、図３６に示すように、ＦＲＯＭ／ＴＯのルールエントリ１４０は、ＦＲＯＭ／ＮＥＸＴのＫＥＹエントリ１４１に変換される。この際、デフォルトｋｅｙエントリとして［０，ＮＡ］を追加し、このエントリについてはルールＮｏを示すビットマップ値１４９はすべて０と設定する。すなわち、ルールが設定されていない新たな範囲をデフォルトとして定義しておく。その他の全ルールエントリに対して、ルールＮｏをビットマップ１４９に登録する。ルール１であればそのｋｅｙエントリ内のビットマップ（ｂｉｔｍａｐ［１］）を１に設定する。その他のビットマップ１４９は０である。ビットマップ１４９の幅は最大ルール数を確保すれば良く、ルール数がｎであれば、ＫＥＹエントリはデフォルトも含めｎ＋１エントリとなる。この範囲を正規化する処理は、範囲により照合されるものがルールに限定されることはなく、範囲に対応して出力する値が特定される検索であれば全ての場合に応用することができる。
【０１３７】
次に、領域分割する処理１３２では、正規化で生成されたｋｅｙ［Ｆｒｏｍ，Ｎｅｘｔ］エントリ群１４１について、領域分割を行い、図３７に示す領域テーブル１４２を作成する。この過程では、デフォルトの［０，ＮＡ］エントリから開始して、全ＫＥＹエントリについて次の操作を行う。まず、領域テーブル１４２を初期化するためにデフォルト［０，ＮＡ］エントリについては、Ｆｒｏｍの０をそのまま登録し、ＮｅｘｔのＮＡは登録しない。次に、デフォルト以外のエントリについて、Ｆｒｏｍ値を領域テーブル１４２で検索し、同じ値のエントリが存在した場合は、その領域を、ルールを追加する処理の開始位置としてマークする（ステップ１４３）。同じ値のエントリが存在しない場合は、Ｐｎ＜Ｆｒｏｍ（＜Ｐｎ＋１）となるＰｎエントリを求め、その領域を分割し、Ｆｒｏｍ値の新規なエントリを生成する（ステップ１４４）。新規なエントリはソートして登録し、ルールを示すビットマップ１４９の値は分割前のエントリを引き継ぐ。そして、分割後の新たなエントリをルール追加のための開始位置としてマークする。
【０１３８】
Ｎｅｘｔ値についても同様の処理を行う。ただし、同じ値のエントリまたはＮｅｘｔ値による新たなエントリは、ルール追加のための終了位置としてマークする。また、Ｎｅｘｔ値がＮＡならば検索はおこなわないが、ルール追加のための終了位置はラストエントリ（最大値エントリ）の次としてマークする。
このようにしてＦｒｏｍ値とＮｅｘｔ値の処理が終了すると、図３８に示すように、マークされた開始位置から終了位置手前までの領域エントリについてルールを追加してビットマップ１４９を更新する。すなわち、処理範囲内の領域エントリについてエントリ毎のビットマップ１４９と、登録するｋｅｙエントリ１４１のビットマップ１４９の論理和で領域テーブル１４２の該当するエントリのビットマップ１４９を更新する。Ｎｅｘｔ値は本来のＦＲＯＭ／ＴＯルール範囲に対して右側の範囲外領域を意味するので、その手前までがルール範囲対象となる。このようにして、範囲の重複は許さず、ルールの重複は許した領域分割が行われ、領域テーブル１４２が生成される。
【０１３９】
領域テーブル１４２をバイナリツリー化する処理１３３は、領域テーブル１４３を量子化し、検索装置１０で使用するバイナリツリーテーブル（分割された比較テーブル）２３を作成する処理であり、図３などで示したテーブル分割処理５０ａに相当する。オリジナルの比較テーブルを量子化し、分割していくプロセスは図１３などを参照して先に説明した通りであるが、本例の領域テーブル１４２はエントリ７０が１つのビットストリングで形成されているので、ソーティングする処理、さらに、分割した後の比較テーブルで同じビットストリングを圧縮する処理は簡単である。本例では、図３９に示した分割テーブル２３の状態で、左側に昇順にエントリ７０が並ぶようにソーティングされる。
【０１４０】
図３９に示す分割テーブル（分割された比較テーブル）２３は、テーブルの大きさなどを示すパラメータが格納された領域２３ｘと、エントリ（本例ではＦｒｏｍ値またはＮｅｘｔ値）７０の有効無効などが記録された初期ビット２３ｙと、エントリ７０が記録された領域２３ｚと、各エントリ毎の情報が記録されたタグ領域２３ｗとを備えている。タグ領域２３ｗには、各エントリ７０が候補となっているときに次に選択される下位テーブルのアドレスが記録される。また、最下段の分割テーブル２３では、上記にて合成されたルールを示すビットマップ１４９が記録される。
【０１４１】
最大近似検索を行う上で、エントリ７０を数値順にソートして分割テーブル２３を生成することは重要である。すなわち、本例の分割テーブル２３は、範囲を示す下位の一方のビットストリングをエントリ７０としており、さらに、図４０に示すバイナリツリーにしたがって左から右に昇順にエントリ７０が配置されている。このため、サーチエンジン２０における照合過程において、同一の分割テーブル２３で複数のエントリ７０に対し被検索ビットストリングφ１が同時にＨＩＴ−Ｒ（右倒れ一致）、すなわち、上位方向に分離したときに、最も上位のエントリ７０が正しいＨＩＴ−Ｒ領域を示す最大近似エントリとなる。したがって、検索装置１０の判定部３３では、同時にＨＩＴ−ＲしたエントリＮｏの最大のものを最大近似として選択することができる。図４０に示すように、矢印１４５の位置でＨＩＴ−Ｒした場合は、Ａ、Ｂ、Ｃの３エントリが同時にＨＩＴ−Ｒしたことになる。バイナリツリーテーブル２３が数値順にソートされていると、Ａ、Ｂ、Ｃの３候補のエントリＮｏを見れば、Ａ＜Ｂ＜Ｃであることが判明するので、エントリＣが最大近似であると確定する。
【０１４２】
同様に、上述したように、範囲を上位の一方のビットストリングで代表し、上位のビットストリングをエントリとし、ソーティングして最大近似検索用の比較テーブルを形成することも可能である。その場合は、サーチエンジン２０による照合過程において、被検索ビットストリングφ１がエントリに対して下位方向に分離したときの最下位のビットストリングを最大近似であると判断する。
【０１４３】
分割テーブル２３の照合過程で最大近似のエントリＣが判明しても、最下位の分割テーブル２３でない場合は、エントリＣに繋がる下位テーブルでさらに最大近似となるエントリを照合する処理が残ることになる。これは、矢印１４６でＨＩＴ−Ｒした場合も同様である。すなわち、矢印１４６の位置でＨＩＴ−Ｒした場合は、同じテーブル２３の中では、エントリＣのみが候補である。従って、同じテーブル２３の内での複数候補からの最大値候補を決定するのは問題ない。エントリＣは最下位のテーブルではないので、下位テーブルに繋がるが、上位のテーブルでＨＩＴ−Ｒしているために、下位のテーブルではエントリｄ〜ｇの複数のエントリのうち、最大のエントリｇが選ばれる。したがって、分割テーブル２３のパラメータ２３ｘとして、最大値エントリのＮｏ（ｍａｘ−ｎｏ）２３ｖを設けておくことにより、下位のテーブル２３で検索する際に、パラメータ２３ｖを参照することで、エントリ７０は照合することなしに最大のエントリgが最大近似のエントリとして確定する。その分割テーブル２３が最下段でなければ同様に、エントリｇのタグ領域２３ｗを参照してエントリｇに繋がる下位テーブル２３に対して同様の操作を繰り返すことが可能であり、エントリ７０を照合することなく、下位テーブル２３のパラメータ２３ｖを辿ることで、最下位テーブルまで正しく最大近似エントリを照合していくことができる。
【０１４４】
このように、比較テーブル２３をソートしておくことは有用であるが、これは、ＳＰＤ検索においては比較テーブル２３が静的に生成され変化しないので、予め最大値エントリを確定することができるという特性を利用している。したがって、動的に比較テーブル２３が変化するアプリケーション（以下に説明するＴＣＰリアセンブルではそうであるが）においては、最大のエントリを検索する処理が必要となる。しかしながら、いずれのケースでも、被検索ビットストリングφ１が属するエントリ７０はバックトラックなしで確定し、そのエントリ７０に割り当てられたルールを適用することができる。また、ビットマップ１４９に複数のルールが登録されているときは、最小のルールを優先するとすると、ビットマップ１４９でオンになっているビットのうち、最下位のビットに登録されているルールを適用することで一義的にルールも決定することができる。
【０１４５】
図４１に、図３４で示した乗り移り処理１３７のロジックを示してある。ＳＰＤ検索１１０ｃにおいて検索装置１０を使用する際に、比較テーブルを更新しながらサーチエンジン（ハードウェア）２０を用いて照合を行うためにソフトウェア処理部３０でサポートする乗り移りロジックである。まず、ステップ１５１でサーチエンジン２０の初期設定を行う。ここでは、分割された比較テーブル２３をテーブル供給部３２により第２の記憶領域２２にセットし、状態記憶メモリ２５もセットする。さらに、ビットストリング供給部３１により比較テーブル２３に対応する被検索ビットストリングφ１もセットする。そして、ステップ１５２でサーチエンジン２０を用いて照合を行う。ステップ１５３でサーチエンジン２０にセットしたテーブル２３が最終段であるか否かを判断する。比較テーブル２３が最終段であるか否かはテーブル２３のパラメータ２３ｘを参照することにより判明する。次に、状態記憶メモリ（状態レジスタ）２５の内容により、ａｌｌ失格／候補あり／照合残存を判断し、それにより処理を行う。
【０１４６】
図４２に、本例のサーチエンジン２０における比較回路２６のロジックを示してある。照合過程１６５は、状態記憶メモリ２５では「１１」で表され、被検索ビットストリングφ１のビット（ＩＤｂｉｔ）と、エントリ（Ｋｅｙ）７０のビット（Ｋｅｙｂｉｔ）が一致していることを示す。候補１６６は、状態記憶メモリ２５では「１０」で表され、照合過程１６５から、被検索ビットストリングφ１のビットが「１」となりエントリ７０のビットが「０」となったＨＩＴ−Ｒの状態を示す。失格１６７は、状態記憶メモリ２５では「００」で表され、照合過程１６５から、被検索ビットストリングφ１のビットが「０」となりエントリ７０のビットが「１」となった状態を示す。さらに、そのビット以前で候補になっていたが、他に新たな候補エントリが誕生した場合も失格となる。また、複数候補があるときに最上位以外の候補も失格となるが、その処理は比較回路２６で行っても良く、あるいは乗り移りロジック、すなわち、処理部３０においてソフトウェアで処理しても良い。
【０１４７】
これらの検索結果を用い、最終段の分割テーブル２３でなければ、乗り移りロジックでは、まず、ステップ１５４でａｌｌ失格であると、ステップ１５８で上位の比較テーブル２３で選択されていた候補のエントリがキープ候補となり、下位の比較テーブル２３に乗り移る。ａｌｌ失格の条件は、出力回路２７で状態レジスタ２５の全体値が０、あるいは状態レジスタ２５の上位ビットがすべて０であることを論理和で演算することができる。ステップ１５５で、状態レジスタ２５に候補ありを示す「１０」のエントリが１つ以上ある場合は、ステップ１５６で複数のエントリから最上位のエントリを候補としてキープする。そして、ステップ１５７で、状態レジスタ２５に「１１」のエントリが残っている場合は、そのエントリ７０に対応する下位の比較テーブル２３でサーチエンジン２０のメモリ領域２２を更新し、ステップ１５２で照合を繰り返す。
【０１４８】
一方、ステップ１５７で照合状態のエントリが残っていないときは、ステップ１５８で、キープされた候補エントリ７０の下位テーブル２３の最大エントリ２３ｖを辿ることにより、被検索ビットストリングφ１の最大近似のエントリを検索することができ、その最大近似のエントリのルールを適用することができる。
最終段のテーブル２３であれば、ステップ１５９でａｌｌ失格であると、ステップ１６３で、上位の比較テーブル２３で選択されていた候補のエントリが最大近似のエントリとなる。また、ステップ１６０で候補ありの状態になれば、ステップ１６１で複数のエントリから最上位のエントリを候補としてキープし、ステップ１６２で照合状態のエントリがなければ、ステップ１６３でその候補のエントリが最大近似となる。また、ステップ１６２で照合状態のエントリがあれば、ステップ１６４でそのエントリが最大近似となる。
【０１４９】
このように、本発明は、図５に示したＩＰセキュリティーのためのＳＰＤ検索機能１１０を最長近似検索により行うことを可能としており、バックトラックなしで範囲検索を実行することにより、上記の最長一致検索による絞込みよりもさらに高速で該当するルールを検索することができる。フロー検索を行うＱｏＳ機能１９１およびパケットフィルタリングを行うファイウォール機能１２０でもＩＰアドレスなどを含むビットストリングの範囲を絞りこむ検索が必要となる。したがって、本例と同様の構成で検索装置１０を用いて最長一致検索を行うことにより、処理を高速化することができる。
【０１５０】
ＱｏＳ機能１１９において、パケットのトラフィックを階層も含めたクラスに分類して優先順位を設けて管理するＣＢ−ＷＦＱ（Class Based Weighted Fair Queuing）をサポートする場合は、階層に合わせて分割された比較テーブルを用意し、照合過程の状況から被検索ビットストリングが属するクラスの階層を判断することも可能である。また、階層などのすべての属性まで含めて細分化されたクラスを設定し、それをルールに変わり、範囲に対応付けされた値（検索結果）とすることも可能である。この場合は、最長近似検索を最後まで行うことにより、被検索ビットストリングの属するクラスがすべての階層でわかるので、優先順位の高い階層のクラスのポリシーマップにより定義されたＱｏＳで対象となるパケットあるいはトラフィックを管理することができる。
【０１５１】
階層化されたクラスを検索する処理はＱｏＳに限定されるものではなく、コンピュータを利用した他のアプリケーションの多くに存在する。たとえば、オブジェクト指向プログラミングの承継を支えるメソッドサーチもその１つである。したがって、本発明で開示している最長一致あるいは最長近似による範囲検索を適用できる対象は広く、本発明は有用である。
【０１５２】
［ＴＣＰパケットのリアセンブルの適用例］
ＴＣＰ（Transmission Control Protocol）はインターネットのトランスポート層プロトコルであり、アプリケーション層のデータをＴＣＰセグメントに分割し、ＴＣＰヘッダをつけてネットワーク層に渡す。したがって、ＴＣＰセグメントを受信した側は、ＴＣＰセグメントを再構成してアプリケーション層のデータを生成する必要がある。このＴＣＰリアセンブル処理におけるエントリのキーはＴＣＰシーケンス番号であり、このシーケンス番号は、データストリームのバイト単位に連番で管理される。ただし、ＴＣＰセグメントは、ＡＣＫロストによる抜けや、セグメント再構成による再送がありえるので、受信するＴＣＰセグメントのシーケンス番号は完全に連続にはならい。したがって、シーケンス番号を完全一致型検索で処理することができない。そこで、本例では、上述したエントリの最長近似型検索を適用することにより、再構成によるデータ領域のオーバーラップなどを検出しながらＴＣＰセグメントを再構成する方法および装置を説明する。
【０１５３】
ＴＣＰリアセンブル処理においては、エントリのキーがシーケンス番号であるので、検索テーブルは動的更新される必要があり、上述したＳＰＤ検索のような静的に準最適な比較テーブルを生成できない。そこで、リアセンブル処理における比較テーブルはビット段数や１段あたりのビット幅を予め固定した構造で扱うことが望ましい。さらに、比較テーブルをソートする処理時間を確保することが難しいので、複数の候補となるエントリが照合された場合は、最大近似となるエントリをサーチエンジン２０を再び用いて検索することが望ましい。
【０１５４】
また、ＳＰＤ検索用の比較テーブルとの比較すると、ＳＰＤ検索では直接の検索対象である範囲を正規化した上で、範囲のオーバーラップを解消のための領域分割を行っているが、ＴＣＰリアセンブル処理では不要である。なぜなら、リアセンブル処理では、検索対象となるエントリは既に受信されたＴＣＰセグメントあるいは複数のＴＣＰセグメントがある程度の範囲で再構築されたブロックであり、各々のエントリは先頭を示すシーケンス番号とエントリの長さを示すデータを備えている。したがって、上記のＦｒｏｍ値に対応するエントリの先頭を示すシーケンス番号と、Ｎｅｘｔ値に対応する、次の先頭を示すシーケンス番号（セグメントまたはブロックの末尾＋１）という範囲の構造を採用することが可能である。さらに、ルールの重複に相当する、セグメントあるいはデータブロックのオーバーラップは、そのデータブロックが１つのデータブロックに統合表現され、エントリが吸収される。したがって、ＳＰＤ検索では、最終検索対象がオーバーラップのありうる“ルール”であったためにエントリとなる領域の再構成が必須であったのに対し、ＴＣＰリアセンブル処理では、リアセンブルそれ自体により検索対象が統合され、ストリームデータ中で既着の連続データ領域となるために、再構成が不要である。すなわち、最終目的がＳＰＤ検索の場合は適合ルール検索であったのに対し、ＴＣＰリアセンブルでは目的がリアセンブル、すなわち、連続領域の検出とその統合にあるということに起因する。
【０１５５】
図４３に、ＴＣＰリアセンブルをサポートするデータ管理装置１７０の概略構成を示してある。このデータ管理装置１７０は、サーチエンジン２０を用いて被検索対象である第１のビットストリングφ１（本例ではシーケンス番号）に最大近似のエントリを検索する処理１７１と、その検索結果に基づいてＴＰＣセグメントをリアセンブルする処理１７４と、リアセンブルされたブロックにより検索装置１０に供給する比較テーブルを更新する処理１７５とを実行可能である。検索する処理１７１は、最大近似の候補となる１または複数のエントリを検索する処理１７２と、それらの中から最大値のエントリ、すなわち、最大近似のエントリを検索する処理１７３とを備えている。エントリを検索する処理１７２では、到来済みのブロックの前後のシーケンス番号をエントリとした比較テーブル２３を生成することにより検索装置１０を使用した照合が可能となる。最大値のエントリを検索する処理１７３では、処理１７２で照合された複数のエントリを比較テーブルのエントリとすることにより検索装置１０を使用することができる。
【０１５６】
図４４に示したように、到着したＴＣＰセグメント１８０が既存あるいは既着のブロック１８１（ブロックはセグメント単体でも複数のセグメントにより再構成されたものでも良い）に接合され、ブロック１８１が拡大する。したがって、ＴＣＰセグメント１８０の先頭のシーケンス番号（Ｆｒｏｍ値、以降ではｆで示す）と末尾プラス１のシーケンス番号（Ｎｅｘｔ値、以降ではｎで示す）が被検索キー（被検索ビットストリング）φ１であり、ブロック１８１のＦｒｏｍ値ｆとＮｅｘｔ値ｎが、比較テーブルを生成するためのシーケンステーブル１７２ｔのエントリ７０となる。ブロック１８１が拡大すると、エントリ７０が削除され、セグメント１８０が既存のブロック１８１と接合しない場合はエントリ７０が増加する。
【０１５７】
パケットロストにともなうＴＣＰ再送・再構成再送により、既到着のブロック１８１と重複するセグメント１８０が再度到着することがあるため、エントリと被検索キーの完全一致照合ではリアセンブルは処理できず、既到着領域に対する重なりを検出できる最長近似照合で処理する必要があることは上述したとおりである。このため、エントリ７０となるブロック１８１のＦＲＯＭ値ｆ／ＮＥＸＴ値ｎ、および被検索キーとなるセグメント１８０のＦＲＯＭ値ｆ／ＮＥＸＴ値ｆは独立した１数値のエントリ７０と、１数値の被検索キーとして最長近似検索される。つまり、独立数値としての最長近似検索により、到着セグメント１８０のＦＲＯＭ値ｎ（被検索キー）に最も近い左側、すなわち下位側のブロック１８１のＦＲＯＭ値ｆ／ＮＥＸＴ値ｎが決定し、到着セグメント１８０のＮＥＸＴ値ｎ（被検索キー）に最も近い左側（下位側）のブロック１８０のＦＲＯＭ値ｆ／ＮＥＸＴ値ｎが決定する。これにより、到着セグメント１８０のＦＲＯＭ／ＮＥＸＴと既存のブロック１８１のＦＲＯＭ／ＮＥＸＴの位置関係が定まり、ブロック１８１に対し、到着したセグメント１８０の独立・接合・重複が判断できる。ＳＰＤ検索で説明したように、ＦＲＯＭ値ｆおよびＮＥＸＴ値ｎを右側基準（上位側基準）で検索処理することも可能である。
【０１５８】
図４５に、リアセンブル処理１７０の検索処理１７２で使用される比較テーブル２３の構成を示してある。これらの比較テーブル２３は、図３９で説明したテーブルとほぼ同じ構成であるが、最下段のテーブル２３のタグ領域２３ｗにはルールを示すビットマップに代わり、到来済みのセグメント群１７６に含まれる複数の連続したセグメント１８０を１単位としたブロック構造１８１を指すポインタとして使われる。ブロック構造１８１は、セグメント（ＳＥＧＣＢ）１８０のリスト構造で表現され、その中のセグメント１８０はリアセンブルにかけられたセグメント単位で生成される。セグメント１８０は、セグメントデータ実体であるＴＣＰストリームデータ実体（ＥＢリスト）１７９に対してペアで関連付けられており、検索後のブロック包含判断のための情報などのリアセンブルに必要なすべての情報を保持する。
【０１５９】
これらの比較テーブル２３は、更新する機能１７５により、次のように管理される。まず、予め定められた形式でメモリブロックが確保され、管理情報を設定することによりテーブルが初期化される。エントリのデフォルト登録はなく、すべてが実行時に登録され、さらには削除される。
比較テーブル２３を動的に登録削除する検索のうち、ＴＣＰリアセンブル処理では、ＴＣＢ（Transmission Control Block）別にバイナリツリーテーブル２３が生成され、相互に異なるＴＣＢに属する複数のＴＣＰパケットについては、ＴＣＢ（Ａ）に属するＴＣＰパケットあるいはセグメント１８０の検索と、ＴＣＢ（Ｂ）における比較テーブル２３の登録・削除を排他を考えずに同時に行える。ＴＣＰリアセンブル以外の処理や、ＴＣＰリアセンブルで同じＴＣＢについての複数のＴＣＰパケット（たとえば、ＴＣＢ（Ａ）に対するｎパケット）については、検索と、登録・削除は排他しなければならない。その際、バイナリツリーテーブル２３において値を更新した場合、新旧値のビット変化により、最初に変化したビットの属するテーブル以降の下位テーブル２３が移動する。このため、変化したエントリ以降は削除および登録処理になる。したがって、登録・削除との排他制御調停を考えると、はじめから削除後に登録とするほうが安全であり、ステップ１７５のテーブルの更新処理は削除および登録の順で行われることが望ましい。
【０１６０】
図４６に、更新処理１７５により、比較テーブル２３にエントリを動的に登録するプロセスを示してある。登録は上位の比較テーブル２３から下位の比較テーブル２３へと辿っていくことで行う。まず、ステップ１９０で、比較テーブル２３の既存のエントリと完全一致検索を行う。完全一致するエントリがあれば、ステップ１９１で最下位の比較テーブル２３であるか確認し、最下位の比較テーブルであれば、ステップ１９２ａで登録対象のビットデータ（ＫＥＹ）、本例であればブロック１８１のＦＲＯＭ値ｆまたはＮＥＸＴ値ｎは既に登録済みであることを通知して登録処理を終了する。一方、ステップ１９１で最下位の比較テーブルでなければ、ステップ１９２ｂでタグ情報２３ｗを辿って、ステップ１９０で次の比較テーブル２３のエントリとの一致検索を行う。
【０１６１】
ステップ１９０で完全一致するエントリがない場合は、ステップ１９３でその比較テーブル２３に空き領域があるか否かを判断する。空き領域がない場合はステップ１９４でエラー通知を出力する。空き領域があれば、ステップ１９５でその空き領域に登録対象のＫＥＹデータを書き込み、ステップ１９６で最下位の比較テーブル２３であるか否かを確認する。最下位の比較テーブル２３であれば、ステップ１９７で登録完了の通知を出力する。一方、最下位の比較テーブル２３でなければ、新たに、そのエントリに繋がる下位の比較テーブル２３を生成する必要があるので、ステップ１９８でテーブル領域を確保し、初期化して上位の比較テーブルとタグ領域２３ｗでリンクさせる。そして、ステップ１９９で、そのテーブルのエントリーをゼロにイニシャライズする。予め固定的に比較テーブル２３を割り当てておく検索については、テーブルの確保とタグのリンクは不要である。
【０１６２】
最長近似を求めるために必要な、同時ＨＩＴ−Ｒ（右倒れ一致）の最大近似エントリ確定については、比較テーブル２３にエントリを登録するときではなく、検索時に動的に確定する。つまり、ＳＰＤ検索のようなエントリのＫＥＹデータの値順にソートし、最大値エントリから順番に登録するという処理は行わない。ＳＰＤ検索では静的にエントリが決定されるのに対し、ＴＣＰリアセンブルでは動的にエントリが決定されるので、検索実行時の確定する方式としている。登録時に確定させることも可能であるが、ＴＣＰリアセンブル処理ではエントリの更新（登録）が頻繁に発生するため、登録処理時間とソフトウェア構造の複雑さが増し、登録のために比較テーブルの使用ができないテーブル排他期間が伸びる。したがって、スループットを低下させる要因となる。
【０１６３】
図４７に更新処理１７５により比較テーブル２３からエントリを削除するプロセスを示してある。削除は登録同様に完全一致型検索と同様の方式で、バイナリツリーで削除する。また、自己の比較テーブルにエントリがなくなった場合は、その比較テーブルを削除すると共にその情報を上位の比較テーブルに反映させる。したがって、図４７に示すように、上位テーブルから下位テーブルにエントリを削除する処理２００を行い、さらに上位テーブルにその結果をフィードバックする。最終的には、ステップ２００ａにおいて最上位での結果を出力する。登録処理で述べたように同時ＨＩＴ−Ｒ（右倒れ一致）のための最大近似エントリ確定は実行時確定なので、登録でこれに対応する処理がないのと同様に、削除にともなう処理もない。
【０１６４】
図４８に、各段の比較テーブル２３からエントリを削除する処理２００の内容を示してある。ステップ２０１で上位から削除処理の継続が通知されると、ステップ２０２で削除対象のＫＥＹデータを比較テーブル２３の全エントリと完全一致検索する。一致したＫＥＹデータがあると、ステップ２０３で最下位の比較テーブル２３であるか確認し、最下位の比較テーブルであれば、ステップ２０４でそのエントリを消去する。そして、ステップ２０５ですべてのエントリが消去されたか否かを確認し、エントリがなくなった場合はステップ２０６でテーブルを開放する。ただし、最上位のテーブルの場合はエントリがなくなっても開放できない。ステップ２０７でステータスを削除ＯＫにしてステップ２０８で上位の比較テーブルの処理に通知する。ステップ２０５でエントリが残っている場合は、ステップ２０９でステータスを削除不可にして、ステップ２０８で上位の比較テーブルの処理に通知する。
【０１６５】
ステップ２０３で最下位の比較テーブルでない場合は、ステップ２１０で処理をホールドして、ステップ２１１で下位の比較テーブルの消去処理を開始させる。そして、ステップ２１２で下位からのステータスバックがあると、ステップ２１３でステータス待ちを解除する。ステップ２１４でステータスをチェックし、エントリを削除可能であれば、ステップ２０４から以降の処理を行う。なお、この際、上述したように、最上位の比較テーブルはエントリがなくなってもエリアの開放は行わない。
【０１６６】
ステップ２１４で、下位からのステータスが削除不可であれば、ステップ２１５でそのままのステータスを上位の比較テーブルの削除処理に返す。また、ステップ２０２で一致するエントリが見つからなかったときもステップ２１６でエントリなしのステータスを上位の比較テーブルの削除処理に返す。
この削除処理は、エントリとそれに対応するバリュー（値）、本例ではブロック１８１のＦＲＯＭ値ｆあるいはＮＥＸＴ値ｎの関係性において、ブロック１８１の属するエントリを削除するのではなく、あるＫＥＹデータのみからエントリを削除する場合である。これに対し、エントリとバリューの関係性において、バリュー、すなわち、ブロック１８１のデータから逆引きでエントリを削除する検索の場合は、下位から上位への削除も可能である。このケースでは、バリューに属するエントリそのものを削除することになる。
【０１６７】
図４９にその処理を示してある。削除で与えられるパラメータがバリューに繋がる最下位の比較テーブル２３を指すので、その比較テーブル２３から開始し、削除対象となるＫＥＹデータを下位ビットから完全一致照合する。すなわち、ステップ２２１で削除対象となるＫＥＹデータと、比較テーブル２３のエントリとの完全一致検索を行い、一致するエントリがあれば、ステップ２２２でそのエントリを削除する。ステップ２２３でその比較テーブル２３にエントリが残っていなければ、ステップ２２４で最上段の比較テーブルでないことを確認し、ステップ２２５で比較テーブルを開放する。さらに、ステップ２２８で、その開放した比較テーブル２３とのリンクをタグ領域２３ｘで辿り、上位の比較テーブルのエントリを削除するためにステップ２２１に戻って上位の比較テーブルの削除処理を行う。
【０１６８】
ステップ２２３で比較テーブル２３に他のエントリが残っていれば、その段階で削除処理は完了し、ステップ２２６で完了を通知する。また、ステップ２２１で削除対象となるＫＹＥデータがエントリに見つからない場合は、ステップ２２７でエラー通知を出力する。なお、予め固定的に比較テーブルを割り当てておく検索については、テーブルの開放は行わず、エントリの削除のみとなる。
【０１６９】
このようにして生成され、また更新される比較テーブル２３には、エントリとしてはブロック１８１を意識しないＦＲＯＭ値ｆと、ＮＥＸＴ値ｎとが独立に登録され、図４３に示した検索処理１７２においては、セグメントのＦＲＯＭ値ｆおよびＮＥＸＴ値ｎが独立して最長近似検索される。この検索処理１７２において検索装置１０を使用する状態遷移条件、すなわち、サーチエンジン２０の比較回路２６のロジックは、図４２に示したものと同じになる。そして、図４１に示した乗り移りロジックにより分割テーブルサーチを行うことができる。
【０１７０】
検索処理１７２において、複数のエントリが候補に上がった場合は、次の処理１７３で最大値のエントリを求める必要がある。この検索では、他の照合処理において検索装置１０を使用する場合と異なり、被検索ＫＥＹ（被検索ビットストリング）は存在せず、検索処理１７２で検索された複数のエントリが比較テーブル２３として与えられ、それに含まれる複数のエントリ７０を対象にしたビット照合による状態遷移で、最大値を持つエントリを検索する。本例においては、同一の比較テーブル２３のエントリで、ＨＩＴ−Ｒした比較対象となるエントリ７０を上位ビットから比較し、大きいビット値をもつエントリが勝ち残る、ノックダウントーナメント方式である。したがって、図２に示したサーチエンジン２０と同様のハードウェアを用いる場合は、被検索ビットストリングφ１を記憶する第１の記憶領域２１を利用しないで検索を行うことが可能である。あるいは、最大値エントリ検索用のハードウェアを用意しても良い。
【０１７１】
たとえば、図５０に示すような、さらに簡易なサーチエンジン２３０を使用することができる。このサーチエンジン２３０では、状態レジスタとなる状態記憶メモリ２５は、１エントリが２ビットで最大３２エントリの構成である。検索対象エントリ７０が登録された比較テーブル２３は、上記と同様にバイナリ（ビットストリング）が縦型にビット配置された縦型テーブルである。このテーブル２３を横に１ワード（１ビット列）単位で読み込み、それぞれのビットをエントリとして比較回路２６で状態遷移演算を行い、状態レジスタ２５を更新する。
【０１７２】
図５１に、状態遷移のロジックを示してある。照合過程２３５は、状態記憶メモリ２５では「１１」で表され、全エントリが同値（全エントリが０あるいは１）、または全エントリが同値ではなく、かつ自エントリを含めビットが１のエントリが複数存在する場合に継続する。候補２３６は、状態記憶メモリ２５では「１０」で表され、照合過程２３５である全エントリが同値ではなく、かつ、唯一自エントリのみのビットが１のときに遷移する。一方、失格２３７は、状態記憶メモリ２５では「００」で表され、照合過程２３５である全エントリが同値ではなく、かつ、自エントリのビットが０のときに遷移する。
【０１７３】
サーチエンジン２３０に、状態記憶メモリ２５を一括照合して途中で照合を打ち切ることができる出力回路２７を設けることが可能である。この出力回路２７においては、候補「１０」に遷移したエントリの有無を調べ、候補のエントリがあれば、その時点でサーチを終了する。そして、候補「１０」に遷移したエントリが最大値のエントリとなる。比較テーブル２３のサーチが終了したときに、照合過程のエントリが残っていれば、下位の比較テーブル２３に乗り移って、さらに最大値のエントリの検索を行う。この最大値エントリ検索工程１７３を設けることにより、比較テーブル２３のエントリを予めソートしておかなくても、複数候補からの最大値候補を決定できる。最下位の比較テーブルでないときは、下位の比較テーブルに検索を続行することになるが、下位の比較テーブルも動的に更新されるので上記と同様に最大値エントリ検索を行って最大値エントリを決定する。
【０１７４】
検索処理１７１においてブロック１８１を意識せずに、バイナリツリー構造の部分のみを見て最長近似検索を行った後、リアセンブル処理１７４では、その結果を元に、ソフトウェアでブロック１８１のＦＲＯＭ値ｆとＮＥＸＴ値ｎのペアを意識し、既存のブロック１８１と、新規セグメント１８０との内外接合、前後および包含関係を判断する。したがって、従来のようにＴＣＰパケットあるいはセグメントをリアセンブルするためにその都度ソーティングするような時間のかかる処理は不要となり、パックトラックなしのバイナリツリーサーチにより高速に既存のブロックとの関係を絞り込むことができ、さらに、先頭および末尾を並列にサーチすることができる。
【０１７５】
一方、バイナリツリーすなわち比較テーブルを更新するという処理１７５が必要となるが、ＴＣＰでは送信側がＡＣＫを受信しないと次のパケットを送出しないため、次のバーストＴＣＰセグメントを受信するまでに、受信側ではＡＣＫを出してから比較テーブルを更新する時間は確保できる。さらに、その間に、比較テーブルのエントリの削除を行い、次のウィンドウサイズ分の比較テーブルをいくつか作ってバーストＴＣＰセグメントを待ち受けるようにすれば、バースト受信中に行う比較テーブルの更新は少なくなる。したがって、高速で既存のブロックとの関係を絞り込むことができる本例の方法であれば、比較テーブルを更新する処理時間を考慮しても、圧倒的に高速でＴＣＰパケットをリアセンブルすることができる。
【０１７６】
たとえば、図５２に示した例であると、ブロック１８１ａはＦＲＯＭ値ＡとＮＥＸＴ値Ｂを持ち、３つセグメント１８０が登録されており、それらが接合して構成されていることが分かる。それに対し、ブロック１８１ｂは、ＦＲＯＭ値ＣとＮＥＸＴ値Ｄを持ち、セグメント１８０が検索で独立であるとして単独に登録された状態である。
【０１７７】
新たなセグメント１８０ｎのＦＲＯＭ値ＸｆとＮＥＸＴ値Ｘｎとを検索したところ、Ａ＜Ｘｆ＜Ｂ、Ｃ＜Ｘｎ＜Ｄであることが分かると、ブロック１８１ａと１８１ｂの間の未着領域のセグメントであることが分かり、その間がセグメント１８０ｎで埋まり、結果としてブロック１８１ａと１８１ｂとは１つのブロックに統合される。それとともに、比較テーブル２３の更新が行われ、新両端であるＡおよびＤはタグ領域の変更は行われるがエントリ自体は残され、ＢおよびＣのエントリは削除される。
【０１７８】
セグメント１８０とブロック１８１との照合結果は図５３に示すように１６通りに分けられる。この図において、Ａ（ｘ）［ｘ＝ｆあるいはｎ］は照合結果のエントリの属性を示し、Ａ（ｎ）＝Ｆとは、ブロック１８１のＮＥＸＴ値がセグメント１８０のＦＲＯＭ値と一致あるいは最大近似（右倒一致なので、セグメントのＦＲＯＭ値が右側にある）を示す。また、Ｈ（ｘ）［ｘ＝ｆあるいはｎ］はＣ（線上一致＝同値）あるいはＲ（右倒一致＝最大近似）を示す。
【０１７９】
図５４から図５７に各ケースについて示してある。図５４（ａ）は、ｆ内接ｎ外接のケースであり、一般的には、ブロックＢｆとブロックＢｎは異なるので、登録対象のセグメント１８０でブロックＢｆ〜Ｂｎの隙間を埋める形で１つのブロック１８１を構成できる。実際には、ブロック間の隙間に該当する部分が未着のセグメントなので、その未着セグメント部分のみ登録対象のセグメント１８０のデータが採用され、既着部分はドロップされる。そして、更新処理１７５では、比較テーブル２３のブロックＢｆのＮＥＸＴ側〜ブロックＢｎのＦＲＯＭ側までのエントリが削除され、ブロックＢｆのＦＲＯＭ側およびブロックＢｎのＮＥＸＴ側のエントリは変わらない。なお、ブロックＢｆ〜Ｂｎ間のブロックＢｉは０個以上の数のブロックを示している。以下においても同様である。
【０１８０】
これに対し、例外としてブロックＢｆとブロックＢｎが等しい場合がありうる。このケースでは、下段に示すように、登録対象セグメント１８０は空セグメント（０バイト）である。よって、セグメント１８０はドロップされ、エントリは不変である。
図５４（ｂ）は、ｆ内接ｎ内接のケースである。ブロックＢｆとブロックＢｎが異なれば、登録対象のセグメント１８０により、ブロックＢｆ〜Ｂｎの隙間を埋める形で１つのブロック１８１を再構築できる。更新処理１７５では、ブロック１８１のＦＲＯＭとＮＥＸＴのエントリを除いて、その間のエントリが削除される。ブロックＢｆとブロックＢｎが同じ場合は、登録対象のセグメント１８０はブロックＢｆと完全に同じなので、既着優先により登録対象セグメント１８０がドロップされる。
【０１８１】
図５４（ｃ）は、ｆ外接ｎ外接のケースである。ブロックＢｆとブロックＢｎが一致することはありえないので、登録対象のセグメント１８０はブロックＢｆ〜Ｂｎ間の隙間を埋める形で１つのブロック１８１を統合あるいは再構成できる。エントリの更新処理は上記と同様である。
図５４（ｄ）は、ｆ外接ｎ内接のケースである。ブロックＢｆとブロックＢｎが異なれば、登録対象のセグメント１８０により、ブロックＢｆ〜Ｂｎの隙間を埋める形で１つのブロック１８１を再構築できる。エントリの更新処理は上記と同様である。ブロックＢｆとブロックＢｎが等しい場合は、登録対象セグメント１８０は空セグメントなので、セグメント１８０はドロップされる。
【０１８２】
図５５（ａ）は、ｆ内接ｎ内部のケースである。ブロックＢｆとブロックＢｎが異なれば、登録対象のセグメント１８０により、ブロックＢｆ〜Ｂｎの隙間を埋める形で１つのブロック１８１を再構築できる。エントリの更新処理は上記と同様である。ブロックＢｆとブロックＢｎが等しい場合は、登録対象セグメント１８０はブロックＢｆに含まれるので、既着優先によりドロップされる。
【０１８３】
図５５（ｂ）は、ｆ内接ｎ外部のケースである。ブロックＢｆとブロックＢｎが異なれば、登録対象のセグメント１８０により、ブロックＢｆ〜Ｂｎの隙間を埋める形で、セグメント１８０のＮＥＸＴ側ｎまでを１つのブロック１８１に統合できる。ブロックＢｆとブロックＢｎが同じ場合でも、ブロックＢｆからセグメント１８０のＮＥＸＴ側ｎまでを１つのブロック１８１として構成できる。更新処理では、ブロックＢｆのＦＲＯＭ側エントリは不変であり、セグメント１８０のＮＥＸＴ側ｎが追加され、他は削除される。
【０１８４】
図５５（ｃ）は、ｆ外接ｎ内部のケースである。ブロックＢｆとブロックＢｎが一致することはありえないので、登録対象のセグメント１８０はブロックＢｆ〜Ｂｎ間の隙間を埋める形で１つのブロック１８１を統合あるいは再構成できる。更新処理は、ｆ内接ｎ内部のケースと同様である。
図５５（ｄ）は、ｆ外接ｎ外部のケースである。ブロックＢｆとブロックＢｎが異なれば、登録対象のセグメント１８０により、ブロックＢｆ〜Ｂｎの隙間を埋める形で、セグメント１８０のＮＥＸＴ側ｎまでを１つのブロック１８１に統合できる。ブロックＢｆとブロックＢｎが同じ場合でも、ブロックＢｆからセグメント１８０のＮＥＸＴ側ｎまでを１つのブロック１８１として構成できる。更新処理は、ｆ内接ｎ外部と同じである。
【０１８５】
図５６（ａ）は、ｆ内部ｎ外接のケースである。ブロックＢｆとブロックＢｎが一致することはありえないので、登録対象のセグメント１８０はブロックＢｆ〜Ｂｎ間の隙間を埋める形で１つのブロック１８１を統合あるいは再構成できる。エントリの処理は、ｆ外接ｎ内接のケースと同様である。
図５６（ｂ）は、ｆ内部ｎ内接のケースである。ブロックＢｆからブロックＢｎまでのブロックをセグメント１８０により統合できる。あるいは、セグメント１８０がブロックＢｆより小さいので、既着優先によりドロップされる。更新処理は上記と同様である。
【０１８６】
図５６（ｃ）は、ｆ外部ｎ外接のケースである。登録対象のセグメント１８０はブロックＢｆの次のブロックＢｉ〜Ｂｎ間の隙間を埋める形で、ブロックＢｉ〜Ｂｎを１つのブロックに統合する。セグメント１８０のＦＲＯＭ側ｆがエントリとして登録され、先頭ブロックＢｉのＦＲＯＭ側からブロックＢｎのＦＲＯＭ側までのエントリが削除される。ブロックＢｉがない場合は、ブロックＢｎのＦＲＯＭ側にセグメント１８０が追加される。図５６（ｄ）は、ｆ外部ｎ内接のケースである。このケースも結果として上記と同様に処理される。
【０１８７】
図５７（ａ）は、ｆ内部ｎ内部のケースであり、ｆ内接ｎ内部と実質的に同じ処理になる。図５７（ｂ）は、ｆ内部ｎ外部のケースであり、ｆ内接ｎ外部と実質的に同じ処理になる。図５７（ｃ）は、ｆ外部ｎ内部のケースであり、実質的にｆ外部ｎ外接と同じ処理になる。
図５７（ｄ）は、ｆ外部ｎ外部のケースである。ブロックＢｆとブロックＢｎが同じでなければ、登録対象のセグメント１８０はブロックＢｆの次のブロックＢｉ〜Ｂｎ間の隙間を埋める形で、ブロックＢｉ〜Ｂｎを１つのブロックに統合し、そのブロック１８１のＦＲＯＭ側およびＮＥＸＴ側はセグメント１８０のＦＲＯＭ側およびＮＥＸＴ側となる。したがって、セグメント１８０のＦＲＯＭ側およびＮＥＸＴ側がエントリとして登録となり、先頭ブロックＢｉからブロックＢｎまでのエントリが削除される。一方、ブロックＢｆおよびブロックＢｎが同じ場合は、登録対象のセグメント１８０は、ブロックＢｆと次のブロックＢｉとの間に独立したブロックとして新規作成される。したがって、比較テーブル２３の更新処理１７５では、セグメント１８０のＦＲＯＭ側およびＮＥＸＴ側がエントリとして登録となり、削除されるエントリはない。
【０１８８】
以上に説明したように、サーチエンジン２０を用いたビットストリング検索装置は、ルーティング検索に限らず、フィルタリング、ＳＰＤ検索さらにはリアセンブルリング処理に用いることが可能である。また、検索対象となるルートやルールの数が増えるほど、比較テーブルを分割テーブル化することにより量子化することが可能であり、照合対象となるデータを削減できる効果が大きい。したがって、ハードウェアにより高速で検索処理ができるのに加えて、照合対象となるエントリの数も削減できるので、ビットストリング検索を非常に高速で処理することができる。これらの処理は、今後のルータあるいはファイアウォールなどのネットワーク上のデータパケットを管理する装置では大きなウェイトを占めるものであり、ルールなどの検索対象となる要素は増大する一方である。したがって、本発明を適用することにより、コンパクトで低コストなハードウェアによって、高速処理が可能となるので、インターネットあるいはその他のネットワークによってデータを交換する際に非常に有用な技術となる。
【０１８９】
本発明は、ルーティングなどのネットワーク関係のアプリケーションだけに限定されないことはもちろんである。たとえば、比較するビット列の水平方向（横方向、第２の方向）に４ビット、８ビットさらにはそれ以上に広げて、文字（キャラクタ）単位で高速検索するようなアプリケーションにも適用することが可能である。
【０１９０】
図５８（ａ）に、図６および図９などを参照しながら説明した１ビットモードの最長一致検索を、第２の方向（水平方向）に４ビットに拡張したときの状態遷移の概要を示してある。この最長一致４ビットモードでは、被検索ビットストリングφ１は、４ビットずつ水平方向に展開されて第１の記憶領域２１にセットされる。比較テーブル２３には、検索対象となる第２のビットストリングφ２の１ビットとプリフィックスφ３の１ビットとがペアとなって４組ずつ水平方向に展開された状態で各々のエントリ７０がセットされる。したがって、拡張された状態記憶メモリ１７の構成も比較テーブル２３に対応して図５８（ｂ）に示すように、１エントリ当り水平方向に４組（状態ビットＡ、Ｂ、ＣおよびＤ）の２ビットの情報が記録され、トータルで１エントリ当り８ビットが割り当てられる。そして、水平方向にスライスされた比較テーブル２３のビット列２４を検索あるいは比較している状態（サイクル中）では、１エントリ当り８ビットの全てに比較結果が記録され、ビット列２４の比較が終了すると（サイクル前後）、そのサイクルの比較結果が左端の２ビットに集約される。
【０１９１】
図５８（ａ）の状態遷移図のうち、Ｌ１〜Ｌ１６は状態遷移のロジックであり、それぞれの状態ビットＡ〜Ｄの定義は図９に示した通りである。これらのロジックＬ１〜Ｌ１６は、図９に示した１ビットモードの状態遷移ロジックを適用あるいは結合したものである。また、ロジックＬ１２からＬ１５は、同じサイクル内で次のビットの比較結果が得られるために次候補が現れた場合の判断も含められている。同一サイクル内で１エントリ当り複数のビットを比較すると、同一サイクル内に候補のエントリが複数現れたときに、それらを比較できない。したがって、図５８（ｃ）に示すように、サイクル終了直前に候補を示す「１０」を備えたエントリが複数ある場合は、図５８（ｄ）に示すように、それらのエントリの状態ビットを反転させ、そのうちの最大（本例では右側）のエントリの状態ビットＡを「１０」にセットすることが望ましい。エントリはソートされているので、候補がある場合は最大のエントリのみが次のサイクルでも候補となるからである。なお、図５８（ｃ）に示した状態は、第１エントリは照合過程であり、第２エントリは２番目のビットＢで候補になり、その右は前のサイクルの状態が残っている。第３エントリは３番目のビットＣで候補になり、その右は前のサイクルの状態が残っている。第４エントリは前のサイクル以前で失格となっている。
【０１９２】
このようにビットストリングφ１およびφ２を水平方向に展開すると、比較対象となるビット列２４が増加し、状態記憶メモリ２５も大きくなるが、記憶領域との入出力回数が削減できる。４ビットモードの比較結果を４クロックで出力するようにしても良い。また、比較回路２６に搭載するロジックを増加することにより、サーチエンジン２０の規模は大きくなるが、複数ビットの比較結果を１クロックあるいは少ないクロックで得ることが可能となるのでさらに高速にビットストリングを検索することが可能となる。本図には４ビットモードの状態状態遷移を示してあるが、同様に何ビットモードにも拡張することが可能である。したがって、文字や画像などのビット量の膨大なビットストリングの検索には適している。
【０１９３】
図５９（ａ）に、図３９および図４２などを参照しながら説明した１ビットモードの最長近似検索を、第２の方向（水平方向）に４ビットに拡張したときの状態遷移の概要を示してある。この最長近似４ビットモードでは、被検索ビットストリングφ１は、４ビットずつ水平方向に展開されて第１の記憶領域２１にセットされる。同様に、比較テーブル２３には、検索対象となる第２のビットストリングφ２が４ビットずつ水平方向に展開された状態で各々のエントリ７０がセットされる。したがって、状態記憶メモリ２５の構成も比較テーブル２３に対応して図５９（ｂ）に示すように、１エントリ当り水平方向に４ビットの状態ビットＥが割り当てられる。そして、水平方向にスライスされた比較テーブル２３のビット列２４を検索あるいは比較している状態（サイクル中）では、１エントリ当り４ビットの全てに比較結果が記録され、ビット列２４の比較が終了すると（サイクル前後）、そのサイクルの比較結果が左端の２ビットに集約される。
【０１９４】
図５９（ａ）の状態遷移図のうち、Ｍ１〜Ｍ９は状態遷移のロジックである。状態ビットＥの定義は基本的に図４２に示した通りであり、サイクル中に候補になると対応するビットが「０」になる。また、これらのロジックＭ１〜Ｍ９は、図４２に示した１ビットモードの状態遷移ロジックを適用あるいは結合したものである。ロジックＭ６からＭ９は、同じサイクル内で次のビットの比較結果が得られるために、次候補が現れた場合の判断も含められている。
【０１９５】
多ビットの最長近似検索でも、多ビットの最長一致検索と同様に、同一サイクル内で１エントリ当り複数のビットを比較すると、同一サイクル内に候補のエントリが複数現れたときに、それらを比較できない。したがって、図５９（ｃ）に示すように、サイクル終了直前に候補を示す１ビットだけ「０」を備えたエントリが複数ある場合は、図５９（ｄ）に示すように、それらのエントリの状態ビットを反転させ、そのうちの最大（本例では右側）のエントリの状態ビットＥの左端のビット「１０」にセットし、他のエントリは状態ビットＥを「００」にする。この最長近似検索の場合もエントリはソートされているので、候補がある場合は最大のエントリのみが次のサイクルでも候補となるからである。ソートされていない場合は、最大値エントリの検索に移行することになる可能性がある。
【０１９６】
図５９（ｃ）に示した状態は、第１エントリは照合過程、第２エントリは第１ビット不一致で候補、第３エントリは第２ビット不一致で候補、第４エントリは第３ビット不一致で候補、第５エントリは第４ビット不一致で候補、第６エントリは前のサイクル以前で失格した状態である。
この最長近似検索も本図には４ビットモードの状態状態遷移を示してあるが、同様に何ビットモードにも拡張することが可能である。したがって、上記の最長一致検索と同様に、ビット量の膨大なビットストリングの検索に適しており、さらに高速なサーチエンジンおよびサーチエンジンを用いたアプリケーションの処理装置を提供することができる。
【０１９７】
以上に説明したように、本発明においては、ハッシュ関数などを用いず、簡易な構成でハードウェア化が容易であり、さらに、高速サーチが可能なテーブル検索の構成と、そのテーブル検索を種々のアプリケーションにおいて効率良く使用するためのシステムおよび方法を開示している。上述した各アプリケーション、たとえば、ルーティング検索機能１４、ＳＰＤ検索機能１１０、ＱｏＳ機能１１９およびファイアウォール機能１２０などは、サーチエンジン２０も含めて上述した各処理あるいは各機能を実行可能な命令を備えたプログラム製品として提供することが可能である。したがって、ＣＰＵなどの汎用的な構成のハードウェアを用いて本発明を実施することが可能である。
【０１９８】
また、上述した各機能あるいは各処理の一部を専用回路化することにより処理速度をさらに高めることも可能であり、特に、サーチエンジン２０をハードウェア化することが有効であることは上述した通りである。したがって、専用回路と、専用回路を使用して上述した各処理などを実行可能なプログラムをソフトウェア（ファームウェアを含む）とを搭載したＬＳＩや回路基板、あるいはそれらを備えたシステムとして本発明を実施することも可能である。
【０１９９】
さらに、上記ではコンピュータネットワーク上の処理に本発明を適用した例を示しているが、本発明の範囲はネットワークに関連した処理あるいは機能に限定されるものではなく、大量のビットデータあるいはバイナリデータを取り扱う処理のすべてにおいて有用である。特に、ネットワーク処理と同様に、画像処理、データベース検索、オブジェクト指向システムなどの実行時において大量のデータを高速に取り扱う必要のあるシステムあるいはアプリケーションでは、ビットストリングを照合する処理が何らかの形で要求されるので、その処理に本発明を適用することにより処理速度を飛躍的に向上できる。
【０２００】
【産業上の利用の可能性】
本発明においては高速サーチが可能なテーブル検索の構成を開示しており、膨大なビット長のビットストリングであっても高速に照合することができる。したがって、ＩＰｖ６などの適用により膨大なビットストリングあるいはビットストリームを高速に処理する必要が生ずるルーティング検索機能やポリシー検索機能を備えたルータなどのネットワーク関連のデータ管理装置に本発明を提供することができる。さらに、パケットで送受信されるデータを復元するリアセンブル処理にも本発明は適している。断片化されたデータ群からオリジナルのパケットを再構成する処理がネットワーク層やトランスポート層における中心的処理なので、本発明を適用することにより、処理速度の速いネットワーク通信用のソフトウェアやＬＳＩ、さらにはそれらを備えた管理機器を提供することが可能となる。
【０２０１】
さらに、本発明を適用することによりネットワークを介して送受信あるいは転送されるデータの処理速度を低コストなシステムで大幅に向上できる。このため、インターネットを介して送受信されるデータ量が増大している状況を考慮すると、今後のネットワーク環境に適応するために有用な発明である。
【図面の簡単な説明】
【図１】  ＩＰヘッダの構成を示す図である。
【図２】  本発明に係る検索装置の概要を示す図である。
【図３】  図２に示す検索装置の処理概要を示すフローチャートである。
【図４】  サーチエンジンの処理概要を示す図である。
【図５】  パケットのルーティングを管理するデータ管理装置の概要を示す図である。
【図６】  ルーティング用の比較テーブルの構成を示す図である。
【図７】  ルーティング用の比較回路の概略を示す図である。
【図８】  ルーティング用の出力回路の概要を示す図である。
【図９】  ルーティング用の照合過程の概要を示す図である。
【図１０】  ツリー型の検索を示す図である。
【図１１】  比較テーブルを統合する様子を示す図である。
【図１２】  ディフォルトルートを設定する様子を示す図である。
【図１３】  ルーティング用の比較テーブルを分割する様子を示す図である。
【図１４】  フラグメントリアセンブルの処理を実行可能な管理装置の概要を示す図である。
【図１５】  識別処理用のツリー型の検索処理を示す図である。
【図１６】  識別処理用の比較回路の概要を示す図である。
【図１７】  識別処理用の出力回路の概要を示す図である。
【図１８】  識別処理用の比較テーブルの概要を示す図である。
【図１９】  マスクテーブルを示す図である。
【図２０】  ソート処理用の比較テーブルの概要を示す図である。
【図２１】  ソート処理用の出力回路の概要を示す図である。
【図２２】  フラグメントデータがリアセンブルされる状態を示す図である。
【図２３】  ＳＰＤ検索機能の構成例を示す図である。
【図２４】  上記と異なるＳＰＤ検索機能の構成例を示す図である。
【図２５】  範囲検索の概念を説明する図である。
【図２６】  照合過程の遷移を示す図である。
【図２７】  分割テーブルによりツリー型で照合する様子を示す図である。
【図２８】  分割テーブルのエントリを示す図である。
【図２９】  ＳＰＤ検索用の比較回路の概要を示す図である。
【図３０】  ＳＰＤ検索用の出力回路の概要を示す図である。
【図３１】  管理情報状態ビットと、状態記憶メモリの検索過程状態ビットとの関係を示す表である。
【図３２】  照合結果の出力を説明する図である。
【図３３】  ＳＰＤ検索用のテーブル分割の一例を示す図である。
【図３４】  ＳＰＤ検索機能のさらに異なる構成例を示す図である。
【図３５】  ルールを正規化する概念を示す図である。
【図３６】  ルールを正規化してキーテーブルを生成する処理を示す図である。
【図３７】  領域分割をして領域テーブルを生成する処理を示す図である。
【図３８】  領域分割の概念を示す図である。
【図３９】  分割テーブルの概要を示す図である。
【図４０】  最長近似検索の概要を示す図である。
【図４１】  近似検索の乗り移りロジックを示す図である。
【図４２】  近似検索の状態遷移を示す図である。
【図４３】  ＴＣＰリアセンブル機能を備えた管理装置の概略を示す図である。
【図４４】  リアセンブルする様子を示す図である。
【図４５】  分割テーブルの概要を示す図である。
【図４６】  エントリを登録する処理を示すフローチャートである。
【図４７】  エントリを削除する処理を示すフローチャートである。
【図４８】  エントリを削除する詳細な処理を示すフローチャートである。
【図４９】  エントリを削除する異なる例を示すフローチャートである。
【図５０】  サーチエンジンの異なる例を示す図である。
【図５１】  最大値エントリを検索する状態遷移を示す図である。
【図５２】  最長近似検索でリアセンブルする様子を示す図である。
【図５３】  検索された状態を示す図である。
【図５４】  検索された状態を模式的に示す図である。
【図５５】  検索された状態の他の例を示す図である。
【図５６】  検索された状態の他の例を示す図である。
【図５７】  検索された状態のさらに異なる例を示す図である。
【図５８】  最長一致検索の４ビットモードの状態遷移を示す図である。
【図５９】  最長近似検索の４ビットモードの状態遷移を示す図である。
【図１】
0003873027.tif 000002
【図２】
0003873027.tif 000003
【図３】
0003873027.tif 000004
【図４】
0003873027.tif 000005
【図６】
0003873027.tif 000006
【図５】
0003873027.tif 000007
【図７】
0003873027.tif 000008
【図８】
0003873027.tif 000009
【図９】
0003873027.tif 000010
【図１１】
0003873027.tif 000011
【図１０】
0003873027.tif 000012
【図１２】
0003873027.tif 000013
【図１３】
0003873027.tif 000014
【図１４】
0003873027.tif 000015
【図１５】
0003873027.tif 000016
【図１６】
0003873027.tif 000017
【図１７】
0003873027.tif 000018
【図１８】
0003873027.tif 000019
【図１９】
0003873027.tif 000020
【図２０】
0003873027.tif 000021
【図２１】
0003873027.tif 000022
【図２２】
0003873027.tif 000023
【図２３】
0003873027.tif 000024
【図２４】
0003873027.tif 000025
【図２５】
0003873027.tif 000026
【図２６】
0003873027.tif 000027
【図２７】
0003873027.tif 000028
【図２８】
0003873027.tif 000029
【図２９】
0003873027.tif 000030
【図３０】
0003873027.tif 000031
【図３１】
0003873027.tif 000032
【図３２】
0003873027.tif 000033
【図３３】
0003873027.tif 000034
【図３４】
0003873027.tif 000035
【図３５】
0003873027.tif 000036
【図３６】
0003873027.tif 000037
【図３７】
0003873027.tif 000038
【図３８】
0003873027.tif 000039
【図３９】
0003873027.tif 000040
【図４０】
0003873027.tif 000041
【図４１】
0003873027.tif 000042
【図４２】
0003873027.tif 000043
【図４３】
0003873027.tif 000044
【図４４】
0003873027.tif 000045
【図４５】
0003873027.tif 000046
【図４６】
0003873027.tif 000047
【図４７】
0003873027.tif 000048
【図４８】
0003873027.tif 000049
【図４９】
0003873027.tif 000050
【図５０】
0003873027.tif 000051
【図５１】
0003873027.tif 000052
【図５２】
0003873027.tif 000053
【図５３】
0003873027.tif 000054
【図５４】
0003873027.tif 000055
【図５５】
0003873027.tif 000056
【図５６】
0003873027.tif 000057
【図５７】
0003873027.tif 000058
【図５８】
0003873027.tif 000059
【図５９】
0003873027.tif 000060