(57)【要約】  本発明の実施形態が、複数のルールに基づいて、分類木を構築するための方法を提供する。各ルールは、異なる優先順位レベルを有する複数のフィールドを含む。複数のルールに従って、受信されたパケットの単一パス分類を提供するように、分類木が構築される。分類木は、レベルごとに構築され、ここで、各レベルは優先順位レベルのうちの１つを表す。分類木の単一のレベルを構築するステップは、以下の：次に高い優先順位レベルから受信された論理的決定経路のそれぞれについて、それぞれの部分木を作成するステップ、を含む。部分木は、それぞれ次に高い優先順位レベルのノードに関連付けられたルールを満足するのに必要なノードおよび関連した論理的決定経路のみを含む。単一のレベルを構築するステップは、さらに以下の：最低位以外の各優先順位レベルについて、現在の優先順位レベル内のノードから次に低い優先順位レベルへの論理的決定経路を作成するステップ、を含む。
2012507930.tif 000002
【特許請求の範囲】
【請求項１】
複数のルールに従って、受信されたパケットの単一パス分類を可能にするように構成された分類木構造を構築するための方法であって、各ルールが、それに関連付けられた複数のフィールドを有し、各フィールドが、それに関連付けられた優先順位レベルを有し、
方法が、トップ優先順位レベルについて、
トップ優先順位レベルのフィールド内で、各一意の値についてノードを作成するステップと、
トップ優先順位レベル内のノードのそれぞれについて、対応するノードの値に一致する１つまたは複数のルールのそれぞれの集合を識別するステップと、
作成されたノードからヘッドノードを選択するステップと、
トップ優先順位レベル内でヘッドノードから他のノードへの論理的決定経路を作成するステップと、
トップ優先順位レベル内のノードから次に低い優先順位レベルへの論理的決定経路を作成するステップと
を実行するステップを含み、いずれの残りの優先順位レベルのそれぞれについて、
次に高い優先順位レベルから受信された論理的決定経路のそれぞれについて、それぞれ次に高い優先順位レベルのノードに関連付けられたルールを満足するのに必要なノードおよび関連した論理的決定経路のみを含む、それぞれの部分木を作成するステップと、
最低位以外の各優先順位レベルについて、現在の優先順位レベル内のノードから次に低い優先順位レベルへの論理的決定経路を作成するステップと
を実行するステップを含む、方法。
【請求項２】
少なくとも１つの論理的決定経路がワイルドカードノードを含む、請求項１に記載の方法。
【請求項３】
少なくとも１つの論理的決定経路が一致しないノードを含む、請求項１に記載の方法。
【請求項４】
それぞれの部分木を作成するステップが、部分木のトップレベルを構築するステップを含み、
部分木のトップレベルを構築するステップが、
複数のルールの部分集合のトップレベルのフィールド内で、各一意の値についてノードを作成するステップと、
トップレベル内のノードのそれぞれについて、対応するノードの値に一致する１つまたは複数のルールのそれぞれの集合を、複数のルールの部分集合を使用して識別するステップと、
作成されたノードからヘッドノードを選択するステップと、
トップレベル内でヘッドノードから他のノードへの論理的決定経路を作成するステップと、
トップ優先順位レベル内のノードから次に低い優先順位レベルへの論理的決定経路を作成するステップとを含み、
複数のルールの部分集合が、トップレベルの次に高い優先順位レベルを有するノードの一致するルールを含み、部分木に関連付けられている、
請求項１に記載の方法。
【請求項５】
トップ優先順位レベル内でヘッドノードから他のノードへの論理的決定経路を作成するステップが、
ヘッドノードの値よりも大きな値を有する、トップ優先順位レベルのノードを含む第１のノードグループを形成するステップと、
ヘッドノードの値よりも小さな値を有する、トップ優先順位レベルのノードを含む第２のノードグループを形成するステップと、
第１のノードグループからヘッドノードの第１の子を選択するステップと、
第２のノードグループからヘッドノードの第２の子を選択するステップと
を含む、請求項１に記載の方法。
【請求項６】
第１の子が、ヘッドノードの値と比較して次に大きな値を有するノードであり、第２の子が、ヘッドノードの値と比較して次に小さな値を有するノードであり、トップ優先順位レベル内でヘッドノードから他のノードへの論理的決定経路を作成するステップが、
第１のノードグループの各ノードについて、最も大きな値を有するノードを除いて、そのノードの値と比較したときに、値が次に大きな値である子ノードを選択するステップと、
第２のノードグループの各ノードについて、最も小さな値を有するノードを除いて、そのノードの値と比較したときに、値が次に小さな値である子ノードを選択するステップと、
をさらに含む、請求項５に記載の方法。
【請求項７】
各フィールドがそれに関連付けられた異なる優先順位レベルを有する、複数のパケットフィールドを含むデータパケットを受信するステップと、
複数の分類ルールを表す分類木構造の単一パスを介して、データパケットに一致する分類ルールを決定するステップであって、分類木構造は複数のレベルを含み、分類木のトップレベルが最も高い優先順位レベルに対応し、分類木構造のそれぞれ次のレベルが次に低い優先順位レベルに対応する、決定するステップと
を含む、着信データパケットを分類するための方法であって、
決定するステップが、
パケットフィールドを選択するステップであって、選択されたパケットフィールドが最も高い優先順位レベルに関連付けられる、選択するステップと、
トップレベルにおけるルートノードより開始して、ボトムレベルに向かって移動しながら、レベルごとに、分類木構造内でデータパケットに対応する論理的決定経路に沿って進むステップであって、分類木構造の各レベルについて、
選択されたパケットフィールドの値を、分類構造の現在のレベル内を通る論理的決定経路のノードと比較して、選択されたパケットフィールドとしての値と同じ値を有する一致するノードを見つけ、一致するノードが、分類木構造の次に低いレベルへの論理的決定経路を定義し、
最低位以外の各レベルについて、一致するノードを見つけ次第、次に低い優先順位レベルを有するパケットフィールドを選択する、進むステップと、
ボトムレベルの一致するノードを見つけ次第、見つかった一致するノードに関連付けられた分類ルールを、データパケットに一致する分類ルールとして提供するステップと
を含む、
方法。
【請求項８】
データパケットの論理的決定経路が、複数のレベルのうちの１つにおいて一致しないノードに到達した場合に、データパケットが一致する分類ルールを有さないという情報を提供するステップをさらに含む、請求項７に記載の方法。
【請求項９】
現在のレベル内で論理的決定経路を決定するステップが、
論理的決定経路の次のノードを決定するために、現在のレベルのヘッドノードの値を、対応するパケットフィールドの値と比較するステップであって、現在のレベルがトップレベルであるときに、ヘッドノードがルートノードであり、現在のレベルがトップレベルではないときに、ヘッドノードは前のレベルにおける論理的決定経路によって定義される、比較するステップと、
ヘッドノードの値がパケットフィールドの値よりも小さいことを判定次第、ルートノードの値よりも大きな値を有する、ヘッドノードの第１の子を、次のノードとして選択するステップと、
ヘッドノードの値がパケットフィールドの値よりも大きいことを判定次第、ルートノードの値よりも小さな値を有する、ヘッドノードの第２の子を、次のノードとして選択するステップと
を含む、請求項７に記載の方法。
【請求項１０】
現在のレベル内で論理的決定経路を決定するステップが、
論理的決定経路が、現在のレベル内で、一致するノードまたは一致しないノードに到達するまで、現在のレベル内で論理的決定経路の次のノードを選択するステップをさらに含み、
先行するノードの値がパケットフィールドの値よりも小さい場合に、次のノードが先行するノードの第１の子であり、
先行するノードの値がパケットフィールドの値よりも大きい場合に、次のノードが先行するノードの第２の子である、
請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信の分野に関し、より詳細には、通信システムで使用するためのデータパケットの分類に関する。
【背景技術】
【０００２】
ネットワーク通信は、さまざまなネットワークデバイス（たとえば、ルータ、スイッチ、端末など）の間でトランスポートされる、パケットなどの情報ユニットを分類することをしばしば必要とする。たとえば、パケットは、ネットワークパーティションニング、グループモビリティトラッキング、セキュリティの制御および実施、サービス品質サポート、その他などのさまざまな用途をサポートするために、検査され、分類されてもよい。特に、ネットワークコンポーネントは、パケットが、ドロップされるべきか、その宛先に送信されるべきか、再ルーティングされるべきか、修正されるべきか、遮断されるべきかどうか、その他などの、パケットに適用されるべき措置を決定するために、分類ルールを使用して、着信パケットを検査し、分類することができる。そのようなルールの複雑性およびカスタマイズのしやすさのために、分類プロセスは、通常、ソフトウエアアプリケーションとして実装される。しかしながら、そのようなアプリケーションのパフォーマンスは、アプリケーションを実行する中央処理装置（ＣＰＵ）の限定された処理力により、および分類ルールの柔軟な性質によってもたらされるアプリケーションの拡大された複雑性により、しばしば遅くなる。
【０００３】
遅いパフォーマンスを改善するために、ルールの複雑性にしばしば制約が実施される。たとえば、ルールは、２分探索木に容易に編成され得る集合に限定されてもよい。しかしながら、完全一致制約のために、十分な複雑度のルールは、単一の木ではなく、複数の木において編成されなければならない。複数の木を探索することは、単一の木を探索することよりも著しく遅いことから、２分探索木を使用する利点を最大利用することが妥協策とされる。
【０００４】
別のよくあるアプローチが、ハッシュテーブルを利用することであり、それは、分類ルールのルックアップキーを、実際のルールの位置に関連付けられた統計的に好都合なハッシュインデックスに変換することを含む。ハッシュテーブルは実装が容易であるものの、所望の分類能力を実装するには、完全一致制約のために、異なるテーブルにまたがる複数のパス（ｐａｓｓ）が必要とされる。さらに、うまくいく一致は、それが存在したとしても保証はされない。
【発明の概要】
【課題を解決するための手段】
【０００５】
複数の分類ルールを使用して、データパケットを分類し、分類構造を構築するための方法およびシステムの実施形態により、先行技術におけるさまざまな不完全性が取り組まれる。一実施形態は、分類木構造を構築するための方法を提供する。分類木構造は、複数のルールに従って、受信されたパケットの単一パス分類を可能にするように構成されている。各ルールは、複数のフィールドに関連付けられており、ここで、各フィールドは優先順位レベルを有する。分類木構造を構築するための方法は、トップ優先順位レベルを構築するステップを含む。トップ優先順位レベルを構築するために、トップ優先順位レベルフィールドのフィールドの値に対応するノードが作成され、ここで、いくつかのフィールドの値が同じである場合は、１つのノードのみが作成される。作成されたノードのそれぞれについて、ノードの値に一致するルールのそれぞれの集合が識別される。トップ優先順位レベルを構築するステップのプロセスは、さらに、以下の：作成されたノードの中からヘッドノードを選択するステップ、トップ優先順位レベル内でヘッドノードから他のノードまでの論理的決定経路（ｐａｔｈ）を作成するステップ、およびトップ優先順位レベルのノードから次に低い優先順位レベルまでの論理的決定経路を作成するステップを含む。
【０００６】
分類木構造を構築するための方法は、レベルごとに、分類木構造の残りの優先順位レベルを構築するステップをさらに含む。残りの優先順位レベルのそれぞれは、以下のやり方で構築される。次に高い優先順位レベルから受信された論理的決定経路のそれぞれについて、それぞれの部分木が作成され、ここで、部分木は、それぞれ次に高い優先順位レベルのノードに関連付けられたルールを満足するのに必要なノードおよび関連した論理的決定経路のみを含む。さらに、残りの優先順位レベルが最も低い優先順位レベルでないとき、現在の優先順位レベル内のノードから次に低い優先順位レベルまでの論理的決定経路が作成される。
【０００７】
別の実施形態は、着信データパケットを分類するための方法を提供する。方法は、異なる優先順位レベルに関連付けられた複数のパケットフィールドを含むデータパケットを受信するステップを含む。方法は、分類構造の単一パスを介して、データパケットに一致する分類ルールを決定するステップをさらに含む。分類構造は複数のレベルを含み、ここで、各レベルはパケットフィールドに関連付けられた優先順位レベルの１つに対応する。分類構造内のレベルは、分類構造のトップからボトムまで、降順優先順位に従って並べられている。
【０００８】
方法は、分類構造の各レベルについて、トップレベルより開始してボトムレベルに向かって移動しながら、レベルごとに、対応する優先順位レベルを有するパケットフィールドの値が、分類構造のレベル内でのパケットに対する論理的決定経路のノードと比較されて、一致するノードを見つけることをさらに含む。一致するノードは、パケットフィールドと同じ値を有するノードである。最低位以外の各優先順位レベルについて、一致するノードが見つかった場合、そのような一致するノードが、分類構造の次のレベルへの論理的決定経路を定義する。最も低い優先順位レベルでは、一致するノードを見つけることにより分類プロセスが完了し、ここで、最も低い優先順位レベルの一致するノードは、パケットに一致する分類ルールを識別する。
【０００９】
さらに本発明の別の実施形態は、パケットプロセッサを提供する。パケットプロセッサは、分類構造を記憶するためのメモリと、メモリに記憶された分類構造を使用して、着信データパケットに一致する分類ルールを決定するように構成されたプロセッサとを含む。分類構造は、複数の分類ルールを表し、ここで、各ルールは複数のフィールドを有する。各フィールドは、異なる優先順位レベルに関連付けられている。分類構造は、複数のレベルを含み、ここで、トップレベルは最も高い優先順位レベルを有し、各次のレベルが次に低い優先順位レベルを有する。データパケットは、複数のパケットフィールドを含み、ここで、フィールドは分類構造の優先順位レベルに対応する優先順位レベルを有する。
【００１０】
パケットプロセッサは、分類構造の単一パスを介して、一致する分類ルールを決定するように構成されている。特に、パケットプロセッサは、分類構造の各レベルについて、トップレベルより開始してボトムレベルに向かって移動しながら、レベルごとに、対応する優先順位レベルを有するパケットフィールドの値を、分類構造のレベル内でのパケットに対する論理的決定経路のノードと比較して、一致するノードを見つけるように構成されている。一致するノードは、パケットフィールドと同じ値を有するノードである。最低位以外の各優先順位レベルについて、一致するノードが見つかった場合、そのような一致するノードが、分類構造の次のレベルへの論理的決定経路を定義する。最も低い優先順位レベルでは、一致するノードを見つけることにより分類プロセスが完了し、ここで、パケットプロセッサは最も低い優先順位レベルの一致するノードを使用して、パケットに一致する分類ルールを識別する。
【００１１】
さまざまな実施形態の教示は、添付の図面を併用して、以下の詳細な説明を検討することによって、容易に理解され得る。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に従った、データパケットを分類するためのシステムのハイレベル図である。
【図２】本発明の一実施形態に従った、分類ルールを含むテーブルを示す図である。
【図３Ａ】本発明の一実施形態に従った、分類構造とそのレベルの図である。
【図３Ｂ】本発明の一実施形態に従った、分類構造とそのレベルの図である。
【図３Ｃ−１】本発明の一実施形態に従った、分類構造とそのレベルの図である。
【図３Ｃ−２】本発明の一実施形態に従った、分類構造とそのレベルの図である。
【図４Ａ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｂ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｃ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｄ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｅ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｆ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図４Ｇ】本発明の一実施形態に従って、分類構造を構成するための方法の流れ図である。
【図５Ａ】本発明の一実施形態に従って、データパケットを分類するための方法を示す図である。
【図５Ｂ】本発明の一実施形態に従って、データパケットを分類するための方法を示す図である。
【発明を実施するための形態】
【００１３】
理解を容易にするために、可能であれば、図面に共通である同一の要素を表すのに同一の参照番号が使用されている。
【００１４】
ルータ、スイッチ、ファイヤーウォール、端末などのネットワークコンポーネントは、データを用いて実行されるのに必要であるさらなる措置を決定するために、着信データトラフィックを検査することがしばしば必要とされる。本発明のさまざまな実施形態のコンテキストでは、インターネットプロトコル（ＩＰ）パケットなどのデータパケットが、特殊な分類構造に編成されるあらかじめ定義された分類ルールに従って、分類される。各ルールは、受信されたパケットと比較されるクライテリアを定義し、一方で、ルールがパケットに適用可能（すなわち、一致する）であるとき、ルールに関連付けられた措置が、取られるべき１つまたは複数の措置を定義する。ルールのクライテリア（すなわち、ルールのフィールドの値）と、パケットの対応する値とが一致するときに、ルールは、パケットに適用可能である。
【００１５】
以下では、本発明の実施形態への参照がなされる。しかしながら、本発明は、いかなる詳細に説明される実施形態にも限定されないことに留意されたい。代わりに、以下の特徴および要素のあらゆる組合せが、それぞれに異なる実施形態に関連していてもいなくても、本発明を実装し、実践することを想到させる。さらに、さまざまな実施形態において、本発明は、先行技術に勝る多数の効果を提供する。本発明の実施形態は、他の考え得るソリューションに勝る、および／または先行技術に勝る利点を達成することができるが、所与の実施形態によって特定の利点が達成されるか否かということは、本発明を限定することではない。したがって、以下の態様、特徴、実施形態、および効果は、例示に過ぎず、各請求項において明示的に列挙されている場合を除いて、添付の特許請求の範囲の要素または限定とはみなされない。同様に、「本発明」への参照は、本明細書において開示されるいかなる発明的な主題の一般化としても解釈されず、各請求項において明示的に列挙されている場合を除いて、添付の特許請求の範囲の要素または限定とはみなされない。
【００１６】
本発明の一実施形態は、コンピュータシステムで使用されるためのプログラム製品として実装される。プログラム製品のプログラムは、（本明細書で説明される方法を含む）実施形態の機能を定義し、さまざまなコンピュータ可読記憶媒体に含まれてもよい。例示的なコンピュータ可読記憶媒体は、以下の：（ｉ）そこに情報が永続的に記憶される、書き込み不可能な記憶媒体（たとえば、ＣＤ−ＲＯＭドライブによって読み出し可能なＣＤ−ＲＯＭディスクなどの、コンピュータ内で読み出し専用のメモリデバイス）、（ｉｉ）そこに変更可能な情報が記憶される、書き込み可能な記憶媒体（たとえば、ディスケットドライブまたはハードディスクドライブ内のフロッピーディスク）、を含むがそれらに限定されない。そのようなコンピュータ可読記憶媒体は、本発明の機能を指示するコンピュータ可読命令を保持するときに、本発明の実施形態である。他の媒体には、ワイヤレス通信ネットワークを含むコンピュータネットワークまたは電話ネットワークを介してなど、それを介して情報がコンピュータに伝達される、通信媒体が含まれる。後者の実施形態は、とりわけ、インターネットおよび他のネットワークへ、かつインターネットおよび他のネットワークから、情報を伝送することを含む。そのような通信媒体は、本発明の機能を指示するコンピュータ可読命令を保持するときに、本発明の実施形態である。大まかには、コンピュータ可読記憶媒体および通信媒体が、本明細書においてコンピュータ可読媒体と呼ばれてよい。
【００１７】
一般的に、本発明の実施形態を実装するために実行されるルーチンは、オペレーティングシステム、または特定のアプリケーション、コンポーネント、プログラム、モジュール、オブジェクト、もしくは一連の命令の一部であってよい。本発明のコンピュータプログラムは、ネイティブコンピュータによって、マシン可読フォーマットに、ひいては実行可能な命令に変換されることになる、多数の命令から典型的に構成される。また、プログラムは、プログラムにローカルに常駐する、またはメモリ中もしくは記憶デバイス上に見られる、変数およびデータ構造から構成される。加えて、本明細書で説明されるさまざまなプログラムは、本発明の特定の実施形態においてそれらのプログラムが実装されるアプリケーションに基づいて、識別され得る。しかしながら、以下に続くあらゆる特定のプログラム用語は、単に便宜的に使用されており、したがって、本発明は、そのような用語によって特定される、かつ／または含意されるいかなる特定のアプリケーションにおいてのみの使用に限定されるべきではないことが理解されるべきである。
【００１８】
図１は、本発明の一実施形態に従った、データパケットを分類するためのシステム１００のハイレベル図を図示する。詳細には、システム１００は、複数の送信元デバイス（送信元１１０と総称される、送信元１１０１、送信元１１０２、および送信元１１０ｚなど）と、ルータ１２０と、パケットプロセッサ１３０と、ネットワーク１４０と、複数の宛先デバイス（宛先１５０と総称される、宛先１５０１、宛先１５０２、および宛先１５０ｙなど）とを含む。パケットが、ネットワーク１４０を介して、送信元１１０と宛先１５０との間で送信されるとき、ルータ１２０は、そのようなパケットをインターセプトし、分類し、さらに処理するために、パケットをパケットプロセッサ１３０に提供することができる。一実施形態では、パケットプロセッサ１３０は、ネットワークルータ１２０またはネットワーク１４０のどちらかによってパケットプロセッサ１３０に宛先変更されたパケットについての統計を収集し、次いでネットワーク管理システム（図示せず）に対して、結果を要約する。ネットワーク管理システムは、そのような情報を使用して、パケット分類ルールを構成し、管理することができる。
【００１９】
示されるように、パケットプロセッサ１３０は、入力／出力デバイス１３２（たとえば、モニタ、キーボード、マウス、モデム、プリンタなど）と、中央処理装置（ＣＰＵ）１３４と、メモリ１３６とを含む。パケット分類装置１３８および分類構造１３９が、メモリ１３６中に配置される。一般的に、３分探索木などの分類構造１３９は、パケット分類装置１３８によって使用されるパケット分類ルールを編成して、着信パケットを解析し、措置があれば、どの措置（たとえば、パケットをドロップする、再ルーティングする、その他）か、かつ、どの種類のデータパケット（たとえば、ある宛先アドレスを有するパケット）が適用されるべきかを決定する。各ルールは、さまざまなパケットフィールドに対応する複数のクライテリア／フィールドを含み、一致するパケットに適用可能な措置に関連付けられていてもよい（より詳細には以下で説明される）。パケットは、ルールのクライテリア／フィールドが、パケットの対応するフィールドの値に一致するときに、ルールに一致する。パケット分類装置１３８が、ルールと着信パケットとの間でうまくいく一致を判定した場合、ルールに関連付けられた措置がパケットに適用される（たとえば、パケットは遮断されてよい）。しかしながら、パケット分類装置１３８がうまくいく一致は存在しないと判定したときは、代わりに、デフォルトの措置が適用される（たとえば、パケットはドロップされる）。
【００２０】
図１では、パケットプロセッサ１３０、パケット分類装置１３８、および分類構造１３９は、ルータ１２０またはネットワーク１４０から切り離されて示されているが、一実施形態では、パケットプロセッサ１３０、パケット分類装置１３８、および分類構造１３９は、すべてまたは任意の組合せで、ルータ１２０内で、または代替的にはネットワーク１４０内で実装される。別の実施形態では、パケット分類装置１３８および／または分類構造１３９は、ネットワークデータを受信し、伝達するネットワークコンポーネント（たとえば、スイッチングエンジン、ルータなど）内で、またはそのようなネットワークコンポーネントと通信するデバイス内で実装される。ネットワークコンポーネントは、特定のネットワーク内のデータ経路に、またはさまざまなネットワークに接続するデータ経路に配置されてもよい。さらに、パケット分類装置１３８および分類構造１３９は、必ずしも一緒に配置されず、２つ以上の分類構造１３９および／またはパケット分類装置１３８が使用されてもよい。
【００２１】
図２は、本発明の一実施形態に従った、分類ルールを含むテーブル２００を図示する。一実施形態では、ルールは、ルールが特定のパケットに適用されるべきかどうかを決定するための一致部と、そのパケットに実行されることになる措置を定義するための措置部との、２つの部分を含む。一致部は、通常、データパケットの対応するフィールドと比較される複数のフィールド（クライテリア）を含み、ここで、ルールのフィールドと対応するパケットフィールドとの完全な一致は、ルールの措置部分が、パケットに適用されるべきであることを示す。措置部は、一般的に、パケットに実行されてよい１つまたは複数の措置を定義し、たとえば措置は、パケットをドロップすること、パケットを再ルーティングすること、パケットを遮断すること、パケットを再定義または修正すること、パケットをその宛先に送信することなどである。
【００２２】
テーブル２００は、ルール１−４の一致部を図示し、ここで、そのような各部は３つのフィールド、すなわち、フィールド１、２、および３を含む。一実施形態では、ルール内のフィールドの順序が、そのようなフィールドの優先順位を定義する。たとえば、テーブル２００の各ルールについて、フィールド１列のフィールドは、フィールド２列のフィールドよりも高い優先順位を有し、フィールド２列のフィールドは、フィールド３列のフィールドよりも高い優先順位を有する。言い換えれば、フィールド２列のフィールドがデータパケットの対応するフィールドと比較される前に、フィールド１列のフィールドがデータパケットの対応するフィールドと比較される。しかしながら、上記で説明したやり方において、テーブル中でルールを編成すること、およびフィールドの優先順位を定義することは、便宜上のことに過ぎないことに留意されたい。たとえば、フィールド１列のフィールドが、フィールド３列のフィールドよりも高い優先順位を有してもよく、しかしフィールド２列のフィールドよりも低い優先順位を有してもよい。さらに、ルールまたはそれらの部分をテーブルとして編成することは、便利ではあるが、必須ではない。たとえば、ルールはリストとして編成されてもよい。
【００２３】
各図示された文字、すなわち、テーブル２００に含まれる「Ａ」、「Ｂ」、「Ｃ」、および「＊」は、フィールドの値を表す。一般的に言えば、ルールにおける各フィールドは、パケットのフィールドまたはサブパートを表し、ここで、そのような各フィールド／サブパートは、ネットワークプロトコル層（たとえば、オープンシステムインターコネクション（ＯＳＩ）ネットワークプロトコルの層、トランスミッションコントロールプロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ネットワークの層など）のうちの１つを表すパケットデータを含む。一実施形態では、ルールのフィールドは、送信元および／または宛先メディアアクセスコントロール（ＭＡＣ）アドレス、送信元および／または宛先イーサネットハードウェアアドレス（ＥＨＡ）、送信元および／または宛先ＩＰアドレス、送信元および／または宛先ポート、プロトコルＩＤ、ユーザデータプロトコル（ＵＤＰ）ポート、ＴＣＰポート、仮想ローカルエリアネットワーク（ＶＬＡＮ）タグ、ペイロードタイプ、および他のデータのタイプのうちの１つまたは複数を表す。典型的に、そのようなデータは、異なるネットワークプロトコル層に対応するパケットのヘッダ／フッタにおいて見出されてよい。
【００２４】
ルールのフィールドは、あるＭＡＣアドレスなどの特定の値、またはワイルドカードなどの特殊な値を含むことができる。各ルールは、さまざまな特定の値および／または特殊な値を含む複数のフィールドを含むことができる。図２では、特定の値は、「Ａ」などの文字によって示され、一方で、特殊な値は、「＊」（ワイルドカードの値）などの記号によって示される。ルールが、ワイルドカードの値を有する１つまたは複数のフィールドを含むとき、着信パケットの各対応するフィールドは、任意の値を含むことができ、ルールのすべての他のフィールドとパケットとが一致する場合、ルールは、やはりパケットに一致することになる。言い換えれば、ルールが１つまたは複数のワイルドカードのフィールドを含むとき、特定のルールがパケットに適用されるべきであるかどうかは、ルールのワイルドカードのフィールドに対応するパケットフィールドの値に左右されない。
【００２５】
図２に示されるように、分類ルールは衝突することがあり、または言い換えれば、いくつかのパケットは２つ以上のルールに一致することがある。たとえば、テーブル２００では、ルール１、２、および４が衝突する可能性がある。より詳細には、着信パケットがその対応するフィールドにおいて［Ａ、Ｂ、Ｃ］の値を有する場合、そのようなパケットは、ルール１、２、および４のそれぞれに一致する。しかしながら、その対応するフィールドにおいて［Ａ、Ｂ、Ｄ］の値を有する着信パケットは、ルール２にしか一致せず、一方、［Ｃ、Ｂ、Ｃ］の値を有するパケットは、ルール４にしか一致しない。同様に、ルール３および４は衝突する可能性がある（たとえば、［Ｂ、Ｃ、Ｃ］パケット）。一方で、ルール２および３は、相互に排他的であり、それらのルール両方に同時に一致することができるパケットは存在しないことを意味する。
【００２６】
以下に説明するように、１つの一致を見つけることは、分類プロセスを完了するために、通常は十分である。よって、上記で説明した例を使用すると、［Ａ、Ｂ、Ｃ］の値を有するパケットが分類されてルール１に一致する場合、分類プロセスは、そのパケットがルール２および４にもまた一致することができたとしても、停止する。一実施形態では、衝突するルールが優先され、分類構造１３９は、最も高い優先順位を有する一致するルールが最初に発見されるようなやり方において編成される。たとえば、一実施形態では、ルールが特定的であるほど、そのようなルールが高い優先順位を有する。したがって、テーブル２００では、ワイルドカードの値を有さないルール１が、１つのワイルドカードの値を有するルール２よりも、高い優先順位を有することになる。同時に、１つのワイルドカードの値を有するルール２は、２つのワイルドカードの値を有するルール４よりも、高い優先順位を有することになる。
【００２７】
図３Ａ−図３Ｃは、本発明の一実施形態に従った、分類構造３００とそのレベルを図示する。示されるように、分類構造３００は、図２のテーブル２００に含まれる分類ルールを編成する（分類構造を構成するための方法は、図４Ａ−図４Ｇに関してより詳細に以下で説明される）。典型的に、分類構造３００はレベルごとに構成され、ここで、分類構造３００のレベルが高いほど、それが表すフィールドの優先順位は高くなる。一実施形態では、分類構造３００は、着信パケットを分類するために、パケットプロセッサ１３０によって使用される。図５Ａおよび図５Ｂに関して以下でより詳細に説明される分類プロセスは、着信パケットの対応するフィールドについて一致または不一致を各レベルで決定する分類構造３００の１つのレベルから進む。言い換えれば、パケットの分類プロセスは、一致する分類ルールが見つかるまで、または、パケットに一致する分類ルールはないと判定されるまで、そのパケットに対応する分類木内の論理的決定経路に沿って進む。
【００２８】
図３Ａ−３Ｃの例示的な実施形態では、分類構造３００は、テーブル２００の列を表すレベルによる３分探索木である。一般的に、３分探索木は、各ノードが３つまでの枝、すなわち、現在のノードの値よりも大きな値のための右枝、現在のノードの値に等しい値のための中枝、および現在のノードの値よりも小さな値のための左枝を有することができる探索木である。本発明の一実施形態では、分類構造の中枝は、木の現在のレベルにおいて、うまくいく一致が見つかった（すなわち、着信パケットフィールドに適用可能なルールが識別された）こと、および、分類プロセスが木の次のレベルにおいて（すなわち、次のパケットフィールドに）続いてもよいことを示す。
【００２９】
一実施形態では、２つの追加的なタイプのノードが導入される。第１のタイプは、一致しないノード、すなわち、末端のうまくいかない一致を示すノード（以下、「Ｘ」ノードと称される）である。一実施形態では、そのようなノードが分類プロセスの間に到達されると、分類プロセスは停止され、着信パケットがいかなる利用可能なルールにも完全に一致しないことを示す情報が提供される。
【００３０】
もう１つのタイプは、ワイルドカードノード、すなわち、木の現在のレベルにおいてうまくいく一致を常に示すノード（以下、「＊」ノードと称される）である。言い換えれば、ワイルドカードノードの値は、それが比較されるあらゆる値と等しくてよい。ワイルドカードノードの値はまた、任意の他のノードの値よりも大きくても、小さくてもよい。一実施形態では、そのようなノードが分類プロセスの間に到達されるとき、分類プロセスは、分類木３００の次のレベルを続ける。ワイルドカードノードが、分類木３００の最も低いレベルに到達されると、着信パケットと対応するルールとの間のうまくいく一致を示す情報が提供される。
【００３１】
図３Ａは、分類木３００の最も高いレベル、すなわちトップレベル３１０を図示する。トップレベル３１０は、テーブル２００のフィールド１列を表す。フィールド１列は、それらのそれぞれの分類ルールにおいて最も高い優先順位フィールドを有するフィールドを含む。図２に図示されるように、分類ルールのフィールド１は、以下の値：「Ａ」（ルール１および２）、「Ｂ」（ルール３）、および「＊」（ルール４）、を含むことができる。分類木３００のトップレベル３１０は、これらの値のそれぞれについての１つまたは複数のノード、すなわち、値「＊」を有するノード３１２および３１８、値「Ａ」を有するノード３１４、および値「Ｂ」を有するノード３１６を含む。
【００３２】
示されるように、ノード３１４は、分類木３００のルートノードである。典型的には、分類木３００のルートノードは、分類木３００のトップレベルにおいて利用可能な値の中で、およそ中央（中間）値を有する。ルートノードの値に中央値を選択することにより、よりバランスのとれた木を構成することが可能になる。というのは、ノードのうちのおよそ半分が、ルートノードの値よりも小さな値を有することになり、ノードのうちのおよそ半分がルートノードの値よりも大きな値を有することになるからである。しかしながら、他の選択もまた可能である。たとえば、一実施形態では、ルートノードは、ランダムに選択される。別の実施形態では、ルートノードは、メジアン値を有するノードである。
【００３３】
図示されるように、ノード３１４の左ポインタが、ノード３１４の値（すなわち「Ａ」）よりも小さな値（すなわち「＊」）を有するノード３１２を指し示す。ノード３１４の右ポインタが、その値（すなわち「Ｂ」）がノード３１４の値（すなわち「Ａ」）よりも大きな値であるノード３１６を指し示す。ワイルドカードの値は、任意の値よりも大きくても小さくてもよいことから、ノード３１６の右ポインタおよび左ポインタの両方が、ワイルドカードの値を有するノード３１８を指し示す。しかしながら、ノード３１６の右ポインタおよび左ポインタは、単一のノード３１８を指し示しているが、一実施形態では、ノードの右ポインタおよび左ポインタは、それぞれワイルドカードの値を有する２つの異なるノードを指し示すことに留意されたい。
【００３４】
各ノードはまた、そのノードに関連付けられた１つまたは複数のルール（すなわち一致するルール）を有し、ここで、ノードの値は関連付けられた分類ルールのそれぞれの対応するフィールドの値に一致する。したがって、ルール１および２が、それらのフィールド１において値「Ａ」を有し、ルール４が、そのフィールド１においてワイルドカードの値を有するので、ノード３１４は、テーブル２００の３つのルール、すなわち、ルール１、２、および４に関連付けられている。同様に、ルール３が、そのフィールド１において値「Ｂ」を有し、一方、ルール４がそのフィールド１においてワイルドカードの値を有するので、ノード３１２および３１８は、ルール４に関連付けられ、ノード３１６は、ルール３および４に関連付けられている。しかしながら、図３Ａには、２つのワイルドカードノード、すなわち、ノード３１２および３１８が示されているが、一実施形態では、分類構造は１つのワイルドカードノードのみを含むことに留意されたい。そのような一実施形態では、ワイルドカードノードに先行するノード（たとえばノード３１４および３１６）は、単に同じワイルドカードノードを指し示す。たとえば、２つの独立したノードとしてノード３１２および３１８を有する代わりに、ノード３１２が削除されてもよく、ノード３１４が、ノード３１６の左ポインタと同様に、ノード３１８を指し示すその左ポインタを有してもよい。
【００３５】
図３Ｂは、分類木３００の最初の２つのレベル、すなわち、トップレベル３１０およびミドルレベル３２０を図示する。ミドルレベル３２０は、テーブル２００のフィールド２列を表す。フィールド２列は、それらのそれぞれの分類ルールにおいて、優先順位の第２のレベルを有するフィールドを含む。図２に示されるように、分類ルールのフィールド２は、以下の値：「Ｂ」（ルール１および２）、「Ｃ」（ルール３）、および「＊」（ルール４）、を含むことができる。よって、分類木３００のミドルレベル３２０は、これらの値のそれぞれについての１つまたは複数のノード、すなわち、値「＊」を有するノード３２１、３２２、３２４、３２５、３２７、および３２８、値「Ｂ」を有するノード３２３、ならびに値「Ｃ」を有するノード３２６を含む。
【００３６】
上記で触れたように、分類プロセスは、ノード３１２とノード３２１との間の枝などの中枝（２本矢印によって示されている）のうちの１つを介して、１つのレベルから別のレベルへと進む。ノードの中枝は、ノードの値が着信パケットの対応するフィールドに一致する場合に、分類プロセスが取る論理的決定経路の一部を表す。たとえば、着信パケットがそのフィールド１において値「Ａ」を有する場合、分類プロセスは、ノード３１４と３２３との間の枝を介して、トップレベル３１０からミドルレベル３２０へと移動する。
【００３７】
通常、分類ルールのうちの少なくともいくつかが、同じフィールドにおいて異なる値を有する（たとえば、ルール１のフィールド１が値「Ａ」を有し、ルール３のフィールド１が値「Ｂ」を有する）。結果として、１つのレベルにおいて着信パケットに関連して検討されてよいルールの集合が、先行するレベルにおいて着信パケットに関連して検討されてよいルールの部分集合を表す。より詳細には、トップレベルにおいて、着信パケットは、すべての利用可能な分類ルールのうちのいずれかに、場合によって一致することがある。しかしながら、トップレベルにおいて、着信パケットの最も高い優先順位のフィールドがトップレベルのノードのうちの１つの値に一致されていることから、ミドルレベルにおいて、着信パケットは、着信パケットの最も高い優先順位のフィールドと同じ値を有するルールのみに、すなわち、一致されたトップレベルのノードに関連付けられたルールに、潜在的に一致することができる。たとえば、着信パケットがフィールド１において値「Ｂ」を有する場合、分類プロセスは、ノード３１６と３２６との間の中枝を介して、ミドルレベル３２０へと移動する。パケットのフィールド１が値「Ｂ」を有するので、それらのフィールド１において値「Ａ」を有するルール１および２は、場合によって着信パケットに一致することができない。よって、着信パケットは、ノード３１６に関連付けられたルール、すなわち、ルール３および４のみと比較される。
【００３８】
一般的に、ミドルレベル３２０は、複数の部分木、または部分木のトップレベルとして見られてよく、ここで、ミドルレベルノードは部分木のトップレベルを形成する。図３Ｃに示されるように、一実施形態に従って、ミドルレベルおよびボトムレベルのノードによって形成される探索部分木は、以下である：第１の部分木が、ノード３２１、３３１、３４５を含み、第２の部分木がノード３２２、３２３、３２４、３３２、３３３、３３４、３３５、３３６、および３４５を含み、第３の部分木がノード３２５、３２５、３２７、３３７、３３８、３３９、および３４５を含み、第４の部分木がノード３２８、３４０、および３４５を含む。たとえば、ノード３２２、３２３、および３２４は、第２の部分木のトップレベルを形成する。各部分木のトップレベルは、すべての分類ルール（すなわち、テーブル２００）の代わりに、対応する親ノードに関連付けられたルールを使用して、トップレベル３１０と同様に構成される。たとえば、第２の部分木のトップレベルを構成するために、ノード３１４に関連付けられたルール（すなわち、ルール１、２、および４）が使用される。
【００３９】
図３Ｃは、分類木３００のすべての３つのレベル、すなわち、トップレベル３１０、ミドルレベル３２０、およびボトムレベル３３０を図示する。ボトムレベル３３０は、テーブル２００のフィールド３列を表す。フィールド３列は、それらのそれぞれの分類ルールにおいて、優先順位の第３のレベルを有するフィールドを含む。図２に図示されるように、分類ルールのフィールド３は、以下の値：「Ｃ」（ルール１、３、および４）ならびに「＊」（ルール２）、を含むことができる。よって、分類木３００のボトムレベル３３０は、これらの値のそれぞれについての１つまたは複数のノード、すなわち、値「Ｃ」を有するノード３３１、３３２、３３４、３３６、３３７、３３８、３３９、および３４０、ならびに値「＊」を有するノード３３３および３３５を含む。
【００４０】
一実施形態では、分類木３００はまた、「Ｘ」ノード３４５（一致しないノード）、すなわち、着信パケットが分類ルールのうちのいずれにも一致しないことを示すノードを含むことができる。図示された分類木３００では、「Ｘ」ノードはボトムレベル３３０においてのみ存在するが、分類ルールの初期集合に応じて、「Ｘ」ノードは、分類木３００のいずれのレベルにも存在することができる。たとえば、そのフィールド１においてワイルドカードの値を持ったテーブル２００の分類ルールがない場合、分類木３００は、トップレベル３１０において「Ｘ」ノードを有していたことになる。さらに、一実施形態では、１つのみの「Ｘ」ノード（たとえば、分類構造３００につき１つの「Ｘ」ノード）が実装される。そのような実施形態では、「Ｘ」ノードに先行するノード（たとえば、ノード３３１、３３６、３４０、その他）が、同じ「Ｘ」ノードを指し示す（または同じ「Ｘ」ノードに関連付けられる）。代替的には、分類構造の各レベルは、１つの「Ｘ」ノードしか有さなくてよい。ワイルドカードノードはいずれのパケットフィールドの値にも一致するので、ワイルドカードノードは、「Ｘ」ノードを指し示すことができないことに留意されたい。
【００４１】
ボトムレベル３３０は、ミドルレベル３２０と同様に構築される。より詳細には、ミドルレベル３２０と同様に、ボトムレベル３３０は、複数の部分木のトップレベルとして見られてよい。ボトムレベル３３０は、分類木３００の最後のレベルであることから、そのような各部分木はトップレベルのみを含み、ここで、分類木３００のボトムレベルのノードは、そのようなトップレベルを形成する。図３Ｃに示されるように、探索部分木は以下である：第１の部分木はノード３３１および３４５を含み、第２の部分木はノード３３２および３４５を含み、第３の部分木はノード３３３、３３４、および３３５を含み、第４の部分木はノード３３６および３４５を含み、第５の部分木はノード３３７および３４５を含み、第６の部分木はノード３３８および３４５を含み、第７の部分木はノード３３９および３４５を含み、第８の部分木はノード３４０および３４５を含む。たとえば、ノード３３３、３３４、および３３５は、第３の部分木のトップレベルおよび部分木そのものを形成する。ミドルレベル３２０と同様に、部分木の各トップレベルは、すべての分類ルール（すなわち、テーブル２００）の代わりに、対応する親ノードに関連付けられたルールを使用して、トップレベル３１０のように構成される。たとえば、第３の部分木のトップレベルを構成するために、ノード３２３に関連付けられたルール（すなわち、ルール１、２、および４）が使用される。
【００４２】
上記で説明したやり方で、分類木３００は、テーブル２００のすべてのルールを組み入れる。たとえば、ルール１は、ノード３１４、３２３、および３３４によって表され、ルール２は、ノード３１４、３２３、３２２および３２４によって表される、などである。図５Ａおよび図５Ｂに関してより詳細に以下で説明されるように、そのような分類木は着信パケットを分類するために使用され、ここで、分類木の１つのレベルから別のレベルへと移動しながら、パケットフィールドが１つずつ解析される。一実施形態では、パケット分類プロセスを完了するノードを導く分類木内の経路が、論理的決定経路とみなされ、ここで、その経路内のノードは論理的決定点である。よって、説明されるように、分類木３００は、複数の論理的決定経路を表し、ここで、分類木３００に含まれる各論理的決定経路は、分類木３００によって表される分類ルールに基づいて、着信パケットの単一パス分類を提供するために必要である。
【００４３】
図４Ａから図４Ｇは、本発明の一実施形態に従って、分類木３００などの分類構造を構成するための方法４００の流れ図を図示する。一般的に、図示された方法４００は、分類ルールの集合を使用して分類木を作成するステップを提供し、ここで、作成された分類木は、集合の各分類ルールを組み入れて、着信パケットに単一パス分類を提供する。方法４００の説明を容易にするために、図２および図３に図示されるテーブル２００の分類ルールおよび対応する分類木３００が使用され、以下では実施例１と称される。
【００４４】
方法は、複数の分類ルールが受信されるステップ４０２より開始される。上記で説明されたように、そのようなルールは、図２のテーブル２００のようなテーブル内で編成されてもよい。典型的に、分類ルールは、たとえばテーブル内で、フィールドごとに照合され、ここで、各フィールドは優先順位レベルを有する。このやり方で、行が分類ルールを表しているテーブルにおいて分類ルールが編成されるとき、そのようなテーブルの各列は、同じ優先順位レベルを有するフィールドを含むことになる。
【００４５】
ステップ４０３で、最も高い優先順位レベルを有する受信された分類ルールのフィールドが選択されて、現在のレベルに関連付けられる。たとえば、テーブル２００の分類ルールの中から、フィールド１列において見出されるルール１−４のフィールドが、ステップ４０３で選択されることになる。一般的に、現在のレベルは、分類木の１つのレベルに対応する分類ルールのフィールドを表す。たとえば、分類木のトップレベルが構築される間に、現在のレベルは、トップレベルによって表されるフィールドに関連付けられる。ステップ４０４で、選択されたフィールドの値の中で識別された各一意の値について、分類木のノードが作成される。言い換えれば、フィールドが一意の値を有する場合、対応するノードが作成され、一方で、いくつかのフィールドが同じ値を有する場合は、１つのみの対応するノードが作成される。したがって、実施例１では、ステップ４０４で、「Ａ」、「Ｂ」、および「＊」の値をそれぞれ有する３つのノードが作成されることになる。作成されたノードは、分類木のトップレベルを形成する。
【００４６】
しかしながら、図３Ａ−３Ｃにおいて、２つのワイルドカードノード、すなわち、ノード３１２および３１８が、トップレベル３１０に含まれるように示されていることに留意されたい。代替的には、かつ図４Ａ−図４Ｇの実施形態に定義されるように、ノード３１２およびノード３１８のうちの１つのみが作成される。図３Ｃで見られるように、ノード３１２またはノード３１８は、同一の対応する部分木を：３１２→３２１→３３１→３４５、および３１８→３２８→３４０→３４５、を有する。よって、図４Ａ−図４Ｇの実施形態に従って構築されている実施例１の分類木のトップレベルは、ノード３１８が除去され、ノード３１６の左ポインタおよび右ポインタがノード３１２を指し示している状態で、図３Ａのトップレベル３１０として想像されてもよい。
【００４７】
ステップ４０５で、作成されたノードの中で中央値を有するノードが決定され、ヘッドノードに関連付けられる。一実施形態では、ノードのうちのおよそ半分がそのノードの値よりも小さな値を有し、ノードのうちのおよそ半分がそのノードの値よりも大きな値を有する場合に、ノードは中央値を有する。したがって、実施例１では、そのような値は「Ａ」である。「Ａ」は、「＊」よりも大きく、「Ｂ」よりも小さく、したがって、値「Ａ」を有するノード３１４がヘッドノードである。しかしながら、別の実施形態では、値「Ａ」ではなく、値「Ｂ」が中央値として決定されることになるやり方で（「Ｂ」はＡよりも大きく、「＊」よりも小さい）、中央値が定義される。さらに別の実施形態では、ステップ４０５で、ランダムなノードが選択される。
【００４８】
ステップ４０６で、ヘッドノードに関連付けられた、１つまたは複数の一致するルールが識別される。一致するルールとは、その現在のレベルのフィールドにおいて、ヘッドノードの値（すなわち中央値）またはワイルドカードの値（すなわち「＊」）を有する分類ルールである。実施例１では、ルール１および２が、現在のレベルのフィールド、フィールド１おいて「Ａ」値を有し、ルール４が、現在のレベルのフィールド、フィールド１おいて「＊」値を有するので、ヘッドノード３１４に関連付けられた一致するルールは、ルール１、２、および４である。
【００４９】
ヘッドノードの左枝および右枝を作成するために、ステップ４０７で、左ノードおよび右ノードの集合が作成される。左ノードの集合は、その値が中央値よりも小さいノードを含む（たとえば、実施例１では、左ノードの集合は、中央値「Ａ」よりも小さい「＊」値を有するノード３１２を含むことになる）。右ノードの集合は、中央値よりも大きな値を有するノードを含む（たとえば、実施例１では、右ノードの集合は、中央値「Ａ」よりも大きい「Ｂ」値を有するノード３１６、およびオプションで、別の「＊」ノード、ノード３１８を含むことになる）。ステップ４０８で、ヘッドノードは、現在のノードに関連付けられる。一般的には、現在のノードとは、その左枝および／または右枝が現在決定されているところのノードである。言い換えれば、現在のノードにより、方法４００は、分類木のノードをあちこちに移動して、ノード間の関係を定義することが可能になる。
【００５０】
ステップ４０９から４１７は、左ノードの集合のノードに基づいて、ヘッドノードの左枝を識別するステップを提供する。一般的に言えば、図４Ａ−図４Ｇの例示的な実施形態では、左ノードの集合のノードの中で最も大きな値を有するノードより開始して、ノードの値が減少する順序で、左ノードの集合のノードが、ヘッドノードの左枝を形成する。ステップ４０９で、現在のノードに関連付けられたノードが、左ノードの集合の値の中で最も小さな値を有するかどうかが判定される。最も小さな値を有する場合、左ノードの集合のすべての作成されたノードは解析されており、左枝のノード間の関係は定義されており、したがって、方法４００は、ステップ４１６へと進む。
【００５１】
現在のノードの値が、左ノードの集合のノードの中で最も小さな値ではないとき（ステップ４０９）、左枝のノード間のすべての関係が定義されているわけではない。よって、ステップ４１０で、現在のノードの値と比較して次に小さな値を有するノードが、左ノードの集合のノードの中から選択される。たとえば、左ノードの集合が、ノード［Ａ、Ｂ、Ｃ］を含み、現在のノードの値がＣである場合、ステップ４１０で、値Ｂを有するノードが選択されることになる。しかしながら、現在のノードの値がＢである場合、選択されるノードの値はＡである。
【００５２】
ステップ４１１で、現在のノードがヘッドノードではないと判定された場合、ステップ４１３で、現在のノードの左ポインタおよび右ポインタが、選択されたノードに関連付けられる。しかしながら、現在のノードがヘッドノードである場合、ステップ４１２で、現在のノードの左ポインタのみが、選択されたノードに関連付けられる。ステップ４１４で、選択されたノードのための一致するルールが識別される。より詳細には、現在のレベルのフィールドにおいて、選択されたノードと同じ値、またはワイルドカードの値を有する分類ルールが、一致するルールとして、識別され、選択されたノードに関連付けられる。ステップ４１５で、選択されたノードは、現在のノードに関連付けられ、方法は、ステップ４０９に戻る。このやり方で、方法４００は、左枝のすべてのノード間の関係が定義されるまで、ノードの値が減少する順序で、左枝のノードに沿って移動する。
【００５３】
ステップ４１６で、現在のノードの値がワイルドカードの値（すなわち「＊」）であるかどうかが判定される。ワイルドカードの値でない場合、現在のレベルにおいてワイルドカードのフィールドはなく、したがって、いずれのトップレベルのノードの値にも一致しない、現在のレベルの値を有する着信パケットが存在してもよい。よって、ステップ４１７で、図３Ｃのノード３４５などの、特殊な「Ｘ」ノードが左枝に追加される。より詳細には、現在のノードの右ポインタおよび左ポインタが、「Ｘ」ノードに関連付けられる（「Ｘ」ノードを指し示す）。上記で説明したように、一実施形態では、そのような「Ｘ」ノードは、着信パケットについて一致するルールが見つけられなかったこと、および分類プロセスが停止されるべきことを示す。
【００５４】
しかしながら、現在のノードの値が、ワイルドカードの値であるとき、「Ｘ」ノードは左枝に追加されない。というのは、いずれの着信パケットも現在のノードに一致することになり、分類プロセスは、単純に次の木のレベルへと進むことになるからである。通常、ワイルドカードノードを含む分類木のレベルは、「Ｘ」ノードを有することはなく、逆も同様である。さらに、ワイルドカードノードは、普通、左枝または右枝を有さない。
【００５５】
ステップ４１８で、ヘッドノードは現在のノードに関連付けられて、ヘッドノードの右枝を構築するのを可能にする。ステップ４１８からステップ４２８は、ステップ４０９からステップ４１７に類似したやり方で、右ノードの集合のノードに基づいて、ヘッドノードの右枝を識別するステップを提供する。一般的に言えば、図４Ａ−図４Ｇの例示的な実施形態では、右ノードの集合のノードの中で最も小さな値を有するノードより開始して、ノードの値が増加する順序で、右ノードの集合のノードが、ヘッドノードの右枝を形成する。ステップ４１９で、現在のノードに関連付けられたノードが、右ノードの集合の値の中で最も大きな値を有するかどうかが判定される。最も大きな値を有する場合、右ノードの集合のすべての作成されたノードは解析されており、右枝のノード間の関係は定義されており、したがって、方法４００は、ステップ４１６へと進む。
【００５６】
現在のノードの値が、右ノードの集合のノードの中で最も大きな値ではないとき（ステップ４１９）、右枝のノード間のすべての関係が定義されているわけではない。よって、ステップ４２０で、現在のノードの値と比較して次に大きな値を有するノードが、右ノードの集合のノードの中から選択される。たとえば、右ノードの集合が、ノード［Ａ、Ｂ、Ｃ］を含み、現在のノードの値がＡである場合、ステップ４２０で、値Ｂを有するノードが選択されることになる。しかしながら、現在のノードの値がＢである場合、選択されるノードの値はＣである。
【００５７】
ステップ４２１で、現在のノードがヘッドノードではないと判定された場合、ステップ４２３で、現在のノードの左ポインタおよび右ポインタが、選択されたノードに関連付けられる。しかしながら、現在のノードがヘッドノードである場合、ステップ４２２で、現在のノードの右ポインタのみが、選択されたノードに関連付けられる。ステップ４２４で、選択されたノードのための一致するルールが識別される。より詳細には、現在のレベルのフィールドにおいて、ワイルドカードの値、または選択されたノードと同じ値を有する分類ルールが、一致するルールとして、識別され、選択されたノードに関連付けられる。ステップ４２５で、選択されたノードは、現在のノードに関連付けられ、方法は、ステップ４１９に戻る。このやり方で、方法４００は、右枝のすべてのノード間の関係が定義されるまで、ノードの値が増加する順序で、右枝のノードに沿って移動する。
【００５８】
ステップ４２６で、左ノードの集合がワイルドカードノードを含むかどうかが判定される。ワイルドカードノードを含まない場合、現在のレベルにおいてワイルドカードのフィールドはなく、したがって、いずれのトップレベルのノードの値にも一致しない、現在のレベルの値を有する着信パケットが存在してもよい。よって、ステップ４２７で、現在のノードの右ポインタおよび左ポインタが「Ｘ」ノードに関連付けられる。しかしながら、左ノードの集合がワイルドカードノードを含むとき、いずれの着信パケットもそのようなノードに一致される可能性があるので、「Ｘ」ノードは、左枝に追加されない。分類プロセスが、左枝に沿って、または右枝に沿って論理的決定経路を取るにせよ、少なくとも１つの分類ルールが現在のレベルのフィールドにおいてワイルドカードの値を有する場合、特定の値の一致が既に見つかっていない限り、着信パケットの対応するフィールドは、ワイルドカードのフィールドに一致されるべきである。よって、ステップ４２８で、現在のノードの左ポインタおよび右ポインタが、左ノードの集合のワイルドカードノードに関連付けられる。
【００５９】
一般的に、上記で説明した方法４００のステップ４０３からステップ４２８は、分類木のトップレベルを構築するステップを提供する。ステップ４２９からステップ４６２は、分類木の残りのレベルを構築するステップ、および分類木のレベル間の関係を定義するステップを提供して、分類木の構成を完成する。ステップ４２９で、現在のレベルが最も低い優先順位レベルのフィールドに関連付けられているかどうかが判定される。言い換えれば、ステップ４２９は、分類木のすべてのレベルが構築されているかどうかを判定する。分類木のすべてのレベルが構築されていない場合、ステップ４３１で、分類木の次のレベルを表すフィールドが選択される。より詳細には、分類木にまだ表されていないフィールドの中で最も高い優先順位レベルを有する分類ルールのフィールドが、選択されて、次のレベルに関連付けられる。実施例１では、そのようなフィールドは、テーブル２００のフィールド２列において見出される。一般的に、次のレベルは、分類木の単一レベルによって、すなわち、現在のレベルのノードの子によって表される分類ルールのフィールドを表す。
【００６０】
一般的に、反復されるステップ４３２−４３４を通して、現在のレベルのノードと次のレベルのノードとの関係が定義される。より詳細には、ステップ４３２で、いずれのノードにもまだ関連付けられていない、次のレベルのポインタ（すなわち、ノードの中枝を示すポインタ）を有する現在のレベルのノードが選択される。一実施形態では、そのような選択はランダムであり、一方で、別の実施形態では、現在のレベルのノードは、それらの値の順に１つずつ選択される。
【００６１】
ステップ４３３で、次のレベルのノードのプールが作成され、ここで、プールの中のノードは、選択された現在のレベルのノードが一致された後にのみ、分類プロセスの間に到達されてよい。一般的に、作成されたプールは、ノードの中枝を介して、選択された現在のレベルのノードに関連付けられた、分類部分木のトップレベルのノードを含む。より詳細には、選択されたノードの一致するルールの次のレベルのフィールドの中で一意の値ごとに、そのような値を有するノードが作成される。言い換えれば、ノードの作成されたプールは、分類ルールの次のレベルのフィールドの部分集合を表し、ここで、選択された現在のレベルのノードは制約条件として働く。ステップ４３４で、作成されたノードの中でヘッドノードが決定される。図示された実施形態では、ヘッドノードは、作成されたノードの値の中で中央値を有するノードである。決定されたヘッドノードは、選択された現在のレベルのノードの次のレベルのポインタに関連付けられる。
【００６２】
ステップ４３５からステップ４６０は、上記で説明したステップ４０６から４２８に類似しているが、わずかな変更がある。一般的には、これらのステップは、分類部分木のトップレベルを構築するステップを提供し、ここで、決定されたヘッドノードは、そのような部分木のそれぞれのルートノードである。よって、ステップ４３５で、決定されたヘッドノードに関連付けられた１つまたは複数の一致するルールが識別され、ここで、一致するルールは、その現在のレベルのフィールドにおいて、中央値またはワイルドカードの値（すなわち「＊」）を有する分類ルールである。しかしながら、一致するルールがすべての利用可能な分類ルールから選択されるステップ４０６とは異なり、ステップ４３５では、次のレベルのヘッドノードのための一致するルールは、ヘッドノードの親ノード（たとえば、選択された現在のレベルのノード）の一致するルールのみを含む分類ルールの集合を使用して、決定される。
【００６３】
次のレベルのヘッドノードの左枝および右枝を作成するために、ステップ４３６で、左ノードおよび右ノードの集合が作成され、ここで、左ノードの集合は、その値が中央値よりも小さいノードを含み、右ノードの集合は、中央値よりも大きな値を有するノードを含む。ステップ４３７で、次のレベルのヘッドノードが、現在のノードに関連付けられる。
【００６４】
ステップ４０９からステップ４１７と同様に、ステップ４３８からステップ４４４は、左ノードの集合のノードに基づいて、次のレベルのヘッドノードの左枝を識別するステップを提供する。ステップ４３８で、現在のノードに関連付けられたノードが、左ノードの集合の値の中で最も小さな値を有するかどうかが判定される。最も小さな値を有する場合、左ノードの集合のすべての作成されたノードは解析されており、左枝のノード間の関係は定義されており、したがって、方法４００は、ステップ４５７へと進む。
【００６５】
現在のノードの値が、左ノードの集合のノードの中で最も小さな値ではないとき（ステップ４３８）、左枝のノード間のすべての関係が定義されているわけではない。よって、ステップ４３９で、現在のノードの値と比較して次に小さな値を有するノードが、左ノードの集合のノードの中から選択される。ステップ４４０で、現在のノードがヘッドノードではないと判定された場合、ステップ４４２で、現在のノードの左ポインタおよび右ポインタが、選択されたノードに関連付けられる。しかしながら、現在のノードがヘッドノードである場合は、ステップ４４１で、現在のノードの左ポインタのみが、選択されたノードに関連付けられる。ステップ４４３で、選択されたノードのための一致するルールが識別される。より詳細には、次のレベルのフィールドにおいて、選択されたノードと同じ値、またはワイルドカードの値を有する選択された現在のレベルのノードの一致するルールの中の分類ルールが、一致するルールとして、識別され、選択されたノードに関連付けられる。ステップ４４４で、選択されたノードは現在のノードに関連付けられ、方法はステップ４３９に戻る。
【００６６】
左枝の最後のノードが到達されるとき、現在のノードは、左枝の最後のノードであり、その値は、左ノードの集合の最も小さな値である。ステップ４４５で、現在のノードの値がワイルドカードの値（すなわち「＊」）であるかどうかが判定される。ワイルドカードの値でない場合、分類部分木を構築するのに使用される分類ルールの中の次のレベルにおいて、ワイルドカードのフィールドはなく、したがって、いずれの部分木のトップレベルのノードの値にも一致しない、次のレベルの値を有する着信パケットが存在してもよい。しかしながら、これは、次のレベルのフィールドにおいて、ワイルドカードの値を有する分類ルールの初期集合の中での、分類ルールの存在を妨げないことに留意されたい。
【００６７】
左ノードの集合における唯一のノードがヘッドノードであるとき、現在のノードはまた、左ノードの集合の最も小さな値を有してよい。典型的に、分類木が構築されているとき、分類部分木を構築するために使用されるいくつかの分類ルールは、分類木のそれぞれ次のレベルにおいて減少する。結果として、それぞれのレベルにおける異なるフィールドの値の数もまた減少する。したがって、最終的に、左ノードの集合および／または右ノードの集合は、１つのノード、すなわちヘッドノードのみを含むことになる。よって、ステップ４４６で、現在のノードがヘッドノードであるかどうかが判定される。ヘッドノードである場合、ヘッドノードは、左ノードの集合の中で唯一のノードであり、したがって、ステップ４４８で、その左ポインタが、特殊な「Ｘ」ノードに関連付けられる。ヘッドノードでない場合、ステップ４４７で、現在のノードの左ポインタおよび右ポインタの両方が、「Ｘ」ノードに関連付けられる。
【００６８】
ステップ４４９で、ヘッドノードが現在のノードに関連付けられて、ヘッドノードの右枝の作成を可能にする。ステップ４１８から４２８と同様に、ステップ４５０からステップ４６０は、右ノードの集合のノードに基づいて、次のレベルのヘッドノードの右枝を識別するステップを提供する。より詳細には、ステップ４５０で、現在のノードに関連付けられたノードが、右ノードの集合の値の中で最も大きな値を有するかどうかが判定される。最も大きな値を有する場合、右ノードの集合のすべての作成されたノードは、解析されており、右枝のノード間の関係は定義されており、したがって、方法４００は、ステップ４５７へと進む。
【００６９】
現在のノードの値が、右ノードの集合のノードの中で最も大きな値ではないとき（ステップ４５０）、右枝のノード間のすべての関係が定義されているわけではない。よって、ステップ４５１で、現在のノードの値と比較して次に大きな値を有するノードが、右ノードの集合のノードの中から選択される。ステップ４５２で、現在のノードがヘッドノードではないと判定された場合、ステップ４５４で、現在のノードの左ポインタおよび右ポインタが、選択されたノードに関連付けられる。しかしながら、現在のノードがヘッドノードである場合、ステップ４５３で、現在のノードの右ポインタのみが、選択されたノードに関連付けられる。ステップ４５５で、選択されたノードのための一致するルールが識別される。より詳細には、次のレベルのフィールドにおいて、選択されたノードと同じ値、またはワイルドカードの値を有する分類ルールが、一致するノードとして、識別され、選択されたノードに関連付けられる。
【００７０】
ステップ４５６で、選択されたノードが現在のノードに関連付けられ、方法はステップ４５０に戻る。このやり方で、方法４００は、右枝のすべてのノード間の関係が定義されるまで、ノードの値が増加する順序で、右枝のノードに沿って移動する。現在のノードの値が、右ノードの集合のノードの中で最も大きな値である場合、方法はステップ４５７へと進む。これは、右ノードの枝の最後のノードが到達されたとき、または右ノードの集合の唯一のノードがヘッドノードであるときのいずれかで発生してよい。右ノードの集合および左ノードの集合の唯一のノードがヘッドノードであり、その値がワイルドカードの値であるとき、ヘッドノードの右ポインタおよび左ポインタを、いずれのノードにも関連付ける必要はない。というのは、着信パケットの対応するフィールドと比較するために１つの値のみが存在し、この値はいずれの値にも一致するからである。よって、一実施形態では、ステップ４５７で、現在のノードの値がワイルドカードの値であるかどうかが判定され、ワイルドカードの値である場合、方法は、現在のレベルのノードと次のレベルのノードとの関係を定義するステップを単純に続行する。
【００７１】
現在のノードの値が、ワイルドカードの値ではないとき、ステップ４５７で、左ノードの集合がワイルドカードノードを含むかどうかが判定される。左ノードの集合がワイルドカードノードを含むとき、「Ｘ」ノードは右枝に追加されず、しかしその代わりに、ステップ４６０で、現在のノードの左ポインタおよび右ポインタが、左ノードの集合のワイルドカードノードに関連付けられる。左ノードの集合が、ワイルドカードノードを含まないとき、ステップ４５９で、現在のノードの右ポインタおよび左ポインタが、それ以前に関連付けられていない場合（たとえば、左ノードの集合がヘッドノードのみを含むとき、ポインタでなくヘッドが、左枝の処理の間に「Ｘ」ノードに既に関連付けられていることがある）、「Ｘ」ノードに関連付けられる。
【００７２】
ステップ４６１で、現在のレベルの各ノードと、次のレベルのノードとの関係が定義されているかどうかが判定される。現在のレベルのうちの少なくとも１つのノードが、次のレベルのノードに関連付けられていない次のレベルのポインタを有するとき、方法４００は、ステップ４３２に戻る。このやり方で、ステップ４３２からステップ４６１は、現在のレベルの各ノードが次のレベルのノードに関連付けられるまで、反復する。次いで、ステップ４６２で、次のレベルのフィールドが現在のレベルに関連付けられ、方法４００はステップ４２９に戻って、分類木の次のレベルを処理する。言い換えれば、ステップ４６２で、次のレベルが現在のレベルとなる。
【００７３】
ステップ４２９で、現在のレベルが、最も低い優先順位レベルのフィールドに関連付けられていると判定された場合、分類ルールのすべてのフィールドは、解析されており、対応するレベルによって分類木に表されている。よって、方法４００はステップ４３０で終了する。このやり方で、複数の決定経路を有する分類木が構成される。上記で説明されたように、一実施形態では、構成された分類木は、着信パケットの単一パス分類を提供するために必要な論理的決定経路のみを含む。
【００７４】
しかしながら、分類ルールの同じ集合について、分類木が構成される方法の複数の変形が可能であることに留意されたい。たとえば、上記で説明したように、ヘッドノードの左枝および右枝は、順序付けられたノードの集合を使用して構築され、したがって、各ノードの現在のレベルにおいて、左ポインタおよび右ポインタが同じノードに関連付けられた枝を、効果的に作成する。別の実施形態では、たとえば、ステップ４１０および４２０で説明されたように、次に小さい／大きいノードを選択する代わりに、未解析なまま残されたノードの中で中央値を有するノードが選択される。このやり方で、いくつかのノードの左ポインタおよび右ポインタが、異なるノードに関連付けられることになる。さらに、各レベルで分類プロセスが取ることになる経路（論理的決定経路）は、典型的に、上記で説明された分類木においてよりも短いものになる。しかしながら、たとえば、ワイルドカードノードおよび／または「Ｘ」ノードへのいくつかのポインタは、著しく増加することがある。さらに、上記の説明においては、ノード間の関係はポインタを使用して定義されるが、他の手段、たとえば、親または子（たとえば、左の子、中央の子、右の子）としてノードを識別するステップ、および特定のノード間の関連付けが使用されてもよいことに留意されたい。
【００７５】
図５Ａおよび５Ｂは、本発明の一実施形態に従って、パケットを分類するための方法５００を図示する。図示された方法５００は、図３Ａ−図３Ｃに関して上記で説明された分類木３００などの、分類構造を使用する。方法５００は、ステップ５０５にて開始される。ステップ５１０で、パケットが受信される。ステップ５１５で、２つの変数、すなわち、現在のレベルおよび現在のノードに、初期値が割り当てられる。たとえば、一実施形態では、そのような値は、分類木の、トップレベル（たとえば、図３Ａ−図３Ｃのトップレベル３１０）およびヘッドノード（たとえばノード３１４）それぞれである。一般的に、現在のレベルは、方法５００に従って現在解析されている分類木のレベル（たとえば、トップレベル３１０、ミドルレベル３２０、またはボトムレベル３３０）を表す。現在のノードは、方法５００に従って現在解析されている分類木のノード（たとえば、ノード３１２、３２６、３３６、その他）を表す。
【００７６】
ステップ５２０で、現在のフィールドが、現在のレベルに対応するパケットフィールドに関連付けられる。上記で説明したように、分類木３００のレベルは、分類ルールのフィールドの優先順位レベルに対応する。現在のフィールドは、現在解析されている木のレベルに対応する優先順位レベルを有するパケットフィールドの値を表す。たとえば、パケットのフィールドが［Ｂ、Ｃ、Ａ］の値を有し、ここで、Ｂは最も高い優先順位を有するフィールドの値であり、Ａは最も低い優先順位を有するフィールドの値であり（実施例２）、方法５００が分類木の第２のレベル（たとえば、ミドルレベル３２０）を解析している段階である場合、現在のフィールドは、値「Ｂ」を有することになる。
【００７７】
ステップ５２５および５５５で、現在のフィールドの値が現在のノードの値と比較されて、現在のノードのどの枝（左、中、または右）が、または言い換えれば、どの論理的決定経路が取られて、分類プロセスを続行するべきかを決定する。現在のフィールドの値が、現在のノードの値と等しくない限り、方法５００はステップ５５５へと進む。ステップ５５５は、現在のフィールドの値が、現在のノードの値よりも大きいかまたは小さいかを判定するステップを提供する。この実施形態の分類木の基本的な構造により、現在のフィールドの値が現在のノードの値よりも小さい場合に、一致するノードが、それが存在する場合には、現在のノードの左枝に沿ったどこかに位置される。よって、方法５００は、ステップ５８０へと進み、ここで、現在のノードの左ポインタに関連付けられたノードが識別される（すなわち左の子）。反対に、現在のフィールドの値が現在のノードの値よりも大きい場合に、一致するノードが、それが存在する場合には、現在のノードの右枝に沿ったどこかに位置される。よって、方法５００は、ステップ５６０へと進み、ここで、現在のノードの右ポインタに関連付けられたノードが識別される（すなわち右の子）。
【００７８】
上記で説明された実施例２を検討する。トップレベル３１０、および、とりわけ受信されたパケット［Ｂ、Ｃ、Ａ］に関連して、ノード３１４を解析するために、ノード３１４の値、すなわち「Ａ」が、現在のフィールドの値、すなわち「Ｂ」と比較される。「Ｂ」は、「Ａ」よりも大きいので、以下でより詳細に説明されるとおり、分類プロセスは、ノード３１６へのノード３１４の右枝に沿って移動することになり、次いでノード３１６の値が現在のフィールドの値と比較されることになる。
【００７９】
一実施形態では、すべての着信パケットが、一致する分類ルールを有することになるわけではない。そのような実施形態では、分類木は、特殊な「Ｘ」ノードを含むことができ、「Ｘ」ノードは、特定のパケットの分類プロセスの間に到達された場合に、その着信パケットが、分類木に表されているいずれの分類ルールにも一致しないことを示すことになり、したがって、分類プロセスは停止されてよい。よって、図５の方法５００はステップ５６５を含み、ここで、ステップ５６０またはステップ５８０において識別されたノードが、「Ｘ」ノードであるかどうかが判定される。「Ｘ」ノードである場合、ステップ５７０で、ルールを適用するのに関与するコンポーネントに不一致データが提供され、方法５００はステップ５５０で終了する。
【００８０】
一実施形態では、不一致データは、着信パケットが分類木に表されている分類ルールのいずれにも一致しないことを単純に示す。別の実施形態では、追加的な情報が提供される。たとえば、そのような情報は、部分的に一致するルールのリスト、一致されている受信されたパケットのフィールドのリスト、「Ｘ」ノードが到達されている分類木のレベルなどを含むことができる。
【００８１】
以下の例、実施例３を検討する。着信パケットのフィールドが［Ｄ、Ｃ、Ａ］の値を有し、ここで、Ｄは最も高い優先順位を有するフィールドの値であり、Ａは最も低い優先順位を有するフィールドの値であると仮定されたい。方法５００を適用すると、パケットの最初の２つのフィールドは、うまく一致される、すなわち「Ｄ」はノード３１８に、「Ｃ」はノード３２８に一致される。しかしながら、パケットの最後のフィールド、すなわち「Ａ」については、一致が首尾良く見出されないことがある。この特定な例において、ボトムレベル３３０で解析のために利用可能な唯一のノードであるノード３４０は、値「Ｃ」を有する。「Ａ」は、「Ｃ」よりも小さいので（ステップ５５５）、ステップ５８０で、ノード３４０の左ポインタに関連付けられたノードが決定され、すなわちノード３４５である。ノード３４５は、「Ｘ」ノードであり（ステップ５６５）、したがって、不一致データが提供される（ステップ５７０）。そのようなデータは、最初の２つのパケットフィールドの値「Ｄ」および「Ｃ」が、ルール４（たとえば、最後に一致したノード、ノード３２８に関連付けられたルール）に一致すること、分類木３００のボトムレベル３３０で不一致が判定されたことなどの情報を含むことができる。
【００８２】
ステップ５６５に戻って、このステップで、ステップ５６０またはステップ５８０で識別されたノードが、「Ｘ」ノードではないと判定された場合、ステップ５９０で、識別されたノードは現在のノードとなり、方法５００は、ステップ５２５に戻る。このやり方で、方法５００の分類プロセスは、ステップ５２５で現在のレベルの一致するノードが見つかるまで、または「Ｘ」ノード５６５が到達されるまで、１つのノードから別のノードへと進み、ここで、ノードは同じレベル（または言い換えれば、分類木の１つのレベル内で形成された論理的決定経路に沿った）のノードである。したがって、上記で説明された実施例１において、トップレベル３２０および第１のパケットフィールドが解析されるとき、最初、現在のノードの変数は、ヘッドノード３１４に等しい。第１のパケットフィールドの値「Ｂ」は、ノード３１４の値よりも大きいので、現在のノードの変数には、新たな値、すなわち、ノード３１４の右の子であるノード３１６が割り当てられる。この割り当てにより、パケットの第１のフィールドの値とノード３１６の値との比較が可能になり、したがって、第１のパケットフィールドをノード３１６に一致させる。
【００８３】
ステップ５２５で、現在のフィールドの値が現在のノードの値に等しい（すなわち、一致する）ことが判定された場合、方法５００は、ステップ５３０へと進む。これは、パケットフィールドのうちの１つが、分類ルールのうちの少なくとも１つに一致されていることを意味する。よって、分類プロセスは、現在のノードの中枝によって形成された論理的決定経路に沿って、分類木の次のレベルに続く。したがって、上の実施例２では、そのような一致が、第１のパケットのフィールドの値「Ｂ」とノード３１６との間、および第２のパケットのフィールドの値「Ｃ」とノード３２６との間に見出されることになる。
【００８４】
ステップ５３０で、現在のノードが、ボトムレベル（たとえば、ボトルレベル３３０）のノードであるかどうかが判定される。現在のレベルがボトムレベルである場合、分類木の各レベルは検討されている。言い換えれば、ボトムレベルのノードは、受信されたパケットの最も低い優先順位のフィールドに一致するので、パケットは分類されており、一致するルールは見出されている。一致するルールは、現在のノードに関連付けられたルールである。ステップ５４５で、そのようなルールが、ルールを適用するのに関与するコンポーネントに提供され、方法５００は、ステップ５５０で終了する。
【００８５】
たとえば、Ａが最も高い優先順位を有するフィールドの値であり、Ｂが最も低い優先順位を有するフィールドの値である、［Ａ、Ｂ、Ｃ］のフィールドの値を有するパケットを考える（実施例３）。さらに、方法５００が、現在ボトムレベル３３０およびノード３３４を解析している段階であることを考える。よって、現在のレベルはボトムレベル３３０を表し、現在のノードはノード３３４を表す。したがって、現在のノードの値（すなわち「Ｃ」）は、現在のフィールドの値（すなわち「Ｃ」）に等しい。というのは、パケットの第３のフィールドが、ボトムレベルに対応するフィールドであるからである。さらに、現在のレベルはボトムレベルであるので、パケットのすべてのフィールドは一致されており、すなわち、「Ａ」とノード３１４とが、「Ｂ」とノード３２３とが、および「Ｃ」とノード３３４とが一致されている。したがって、一致する分類ルールは、ボトムレベルの一致するノード（すなわち、ノード３１４）に関連付けられたルールであり、テーブル２００のルール１である。
【００８６】
よって、本発明の実施形態は、常に具体的な結果を提供する単一パス分類を可能にするようなやり方で、複数の分類ルールに基づいて、単一の分類構造を構成するための方法を提供する。本明細書において、さまざまな実施形態が示され、詳細に説明されてきたが、当業者であれば、説明された教示をなおも組み込む、多くの他の変更された実施形態を容易に工夫することができる。
【図１】
2012507930.tif 000003
【図２】
2012507930.tif 000004
【図３Ａ】
2012507930.tif 000005
【図３Ｂ】
2012507930.tif 000006
【図３Ｃ−１】
2012507930.tif 000007
【図３Ｃ−２】
2012507930.tif 000008
【図４Ａ】
2012507930.tif 000009
【図４Ｂ】
2012507930.tif 000010
【図４Ｃ】
2012507930.tif 000011
【図４Ｄ】
2012507930.tif 000012
【図４Ｅ】
2012507930.tif 000013
【図４Ｆ】
2012507930.tif 000014
【図４Ｇ】
2012507930.tif 000015
【図５Ａ】
2012507930.tif 000016
【図５Ｂ】
2012507930.tif 000017
【国際調査報告】
2012507930.tif 000018
2012507930.tif 000019
2012507930.tif 000020