(57)【特許請求の範囲】
【請求項１】
通信ネットワークにおいてデータのパケットを送るための転送データベースの形成方法であって、
プレフィクス内の１つまたはそれ以上のマスクされないビット値に排他的に基づいて、それぞれＴ個以下のプレフィクスを有する前記データベース内のＮ個（ここで、ＴはＮより小さい所定の値である）のプレフィクスを、Ｎに比例しＴに反比例する数に制限された数のサブデータベースに分割することと、
ポインタの第１のセットを形成することとを含み、
前記サブデータベースの少なくとも１つは１個を超えるプレフィクスを有し、ポインタの前記第１のセットのそれぞれは前記サブデータベースのそれぞれ１つを指す、前記転送データベースの形成方法。
【請求項２】
前記ポインタの第１のセットと前記ポインタの第１のセットによって指示された前記サブデータベースとの中間にあり、前記サブデータベースの対応する１つのサブデータベースを指示する、ポインタの第２のセットを再帰的に形成することをさらに含む請求項１に記載の方法。
【請求項３】
前記分割は、Ｎ個のプレフィクスの最上位ビットから開始し、Ｎ個のプレフィクスを反復的に分割することによって、ルート・ノードと複数の葉ノードとの間に延びる木を形成することを含み、各葉ノードはＴ個以下のプレフィクスを有する請求項１に記載の方法。
【請求項４】
最小プレフィクス数未満のプレフィクスを有する第１の葉ノードを、前記第１の葉ノードより前記ルート・ノードに近く配置された第２の葉ノードにマージすることをさらに含む請求項３に記載の方法。
【請求項５】
前記プレフィクスの最小数がＴ／２である請求項４に記載の方法。
【請求項６】
前記サブデータベース数はＮと（２Ｎ／Ｔ）＋１との間に制限される請求項４に記載の方法。
【請求項７】
前記形成は、Ｎ個のプレフィクスの最上位ビットから開始し、より下位のビットのビット値を各サブデータベースの最上位ビットに達するまで加算することを含む請求項１に記載の方法。
【請求項８】
それぞれの前記サブデータベースを同じ物理ブロックの別々にアクセス可能な部分に配置することをさらに含む請求項１に記載の方法。
【請求項９】
コンピュータ可読記憶媒体に記憶され請求項１に記載の方法に従って解釈されるルックアップ・テーブル。
【請求項１０】
ルータまたは交換機、または前記ルータまたは交換機のライン・カードまたは入出力ポート、または前記ルータまたは交換機のスイッチ・ファブリック内にあり請求項１に記載の方法を実行する、コンピュータまたは特殊用途向け集積回路（ＡＳＩＣ）。
【請求項１１】
処理主体によって実行されると、前記処理主体に、
プレフィクス内の１つまたはそれ以上のマスクされないビット値に排他的に基づいて、それぞれＴ個以下のプレフィクスを有する前記データベース内のＮ個（ここで、ＴはＮより小さい所定の値である）のプレフィクスを、Ｎに比例しＴに反比例する数に制限された数のサブデータベースに分割させ、
ポインタの第１のセットを形成させる命令を格納し、
前記サブデータベースの少なくとも１つは１個を超えるプレフィクスを有し、ポインタの前記第１のセットのそれぞれは前記サブデータベースのそれぞれを指す、コンピュータ可読記憶媒体。
【請求項１２】
前記処理主体によって実行されると、前記処理主体に、
前記サブデータベースのそれぞれを、データ記憶装置のそれぞれ別々の部分に配置させる命令をさらに格納する請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記処理主体に、データベース内のＮ個のプレフィクスをサブデータベースに分割させる命令は、前記処理主体に、
Ｎ個のプレフィクスの最上位ビットから開始し、Ｎ個のプレフィクスを反復的に分割することによって、ルート・ノードと複数の葉ノードとの間に延びる木を形成させる命令であり、各葉ノードはＴ個以下のプレフィクスを有する請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記処理主体によって実行されると、前記処理主体に、
最小プレフィクス数未満のプレフィクスを有する第１の葉ノードを、前記第１の葉ノードより前記ルート・ノードに近く配置された第２の葉ノードにマージさせる命令をさらに格納する請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記プレフィクスの最小数がＴ／２である請求項１４に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記サブデータベース数はＮと（２Ｎ／Ｔ）＋１との間に制限される請求項１４に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記処理主体に、ポインタの第１のセットを形成させる命令は、前記処理主体に、
Ｎ個のプレフィクスの最上位ビットから開始し、より下位のビットのビット値を各サブデータベースの最上位ビットに達するまで加算させる命令である請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記処理主体によって実行されると、前記処理主体に、
それぞれの前記サブデータベースを同じ物理ブロックの別々にアクセス可能な部分に配置させる命令をさらに格納する請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記処理主体によって実行されると、前記処理主体に、
前記ポインタの第１のセットと前記ポインタの第１のセットによって指示された前記サブデータベースとの中間にあり、前記サブデータベースのセットの対応する１つのサブデータベースを指示する、ポインタの第２のセットを再帰的に形成させる命令をさらに含む請求項１１に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・ネットワーキングに関する。より具体的には、本発明は、各サブデータベースが、ポインタ・テーブルに格納されたスピア・プレフィクスに対する最長一致サーチを行うことによって対象サブデータベースを選択するポインタ・テーブルを使用して選択可能な、所定サイズの所定数のサブデータベースに分化されたルックアップ・テーブルの転送データベースに関する。
【背景技術】
【０００２】
以下の説明および実施形態は、本項に含めることにより従来技術であるとは認められない。
【０００３】
コンピュータ・ネットワーキングは、一般に、相互接続されたコンピュータのネットワークを介したパケット通信として一般に認められている。ネットワーキングの１つの目的は、パケットを送信元から宛先に迅速に転送することである。したがって、ネットワーク自体内に、本明細書で交換可能にゲートウェイ、ブリッジ、交換機、またはルータと呼ぶ、１または複数のデバイスが存在する。
【０００４】
転送デバイスは一般にルックアップ・テーブルを含む。着信アドレスを、ルックアップ・テーブルに格納されているプレフィクス・エントリと比較する。一致するものがあれば、関連付けられた情報パケットが転送デバイスの適切なポートに送られる。ネットワークのリンクが変わると、ルーティング・プロトコルが転送デバイス間で情報を交換し、対応するルックアップ・テーブル内のプレフィクス・エントリを変更する。この変更によって、ルックアップ・テーブル内のプレフィクスだけでなく、それらのプレフィクスが指すネクスト・ホップ識別子も変更される。これにより、リンクがインターネットまたはイントラネットの様々な部分で行き来するにつれて、転送デバイスを介したルーティングを動的に変更することができる。
【０００５】
パケットに関連付けられたインターネット・プロトコル（ＩＰ）アドレスは、一般に、ネットワーク・フィールドとホスト・フィールドを含む。クラス・ベースのインターネット・アドレス指定アーキテクチャでは、ネットワーク・フィールドとホスト・フィールドに専用に割り当てられるビット数は可変である。クラスレス・ドメイン間ルーティング（Classless Inter-Domain Routing：ＣＩＤＲ）と呼ばれる、クラスを使用しないアドレス指定アーキテクチャの出現により、ネットワーク・フィールドとホスト・フィールドとの間の境界が可変になっている。クラス・アドレス指定アーキテクチャとクラスレス・アドレス指定アーキテクチャに加えて、現在、ＩＰアドレス指定インターネット・プロトコルにはいくつかのバージョンがある。たとえば、ＩＰバージョン４（ＩＰｖ４）は３２ビットのアドレス指定プレフィクスを使用するのに対し、ＩＰバージョン６（ＩＰｖ６）は１２８ビットのアドレス指定プレフィクスを使用する。たとえば、ＩＰｖ４アドレス指定を使用する場合は、転送デバイスは、ネクスト・ホップを決定する際に、３２ビットのアドレス指定フィールドのうち、先頭８、１６、または２４ビットのみを考慮に入れる。
【０００６】
ネクスト・ホップを決定する一般的な方法は、最長一致プレフィクスと呼ばれる技法を使用することである。この技法では、たとえば１９２．２．８．６４という３２ビットのＩＰアドレスを、ルックアップ・テーブル内のプレフィクス・エントリ（以下、「プレフィクス」）と対照する。プレフィクス１９２．２．０．０／１６は、プレフィクス１９２．０．０．０／８よりも、一致プレフィクスが長い。これは、主として、前者のプレフィクス長が１６ビットであり、後者のプレフィクス長が８ビットしかないことによる。この場合、転送デバイスは、パケットを送るネクスト・ホップ・アドレスを決定する際に、１９２．２＊の先頭２バイトを考慮する。
【０００７】
最長一致プレフィクス比較を行う方法は多数ある。たとえば、ポインタまたはハッシュを使用することができる。２進数列の最初の数ビットを、テーブルにポインタとして格納することができる。各ポインタ・エントリは、当該ポインタ内のプレフィクスを追跡するだけでなく、最長プレフィクス一致を実現するのに必要な後続の２進エントリも指す。ポインタはサブデータベース内の数百個のプレフィクスを指す場合があるが、多くのサブデータベースには、着信アドレスと一致するものが全くないか、またはわずかである。したがって、ヒューリスティック（発見的）ではあるが、先行ポインタを使用してプレフィクスのデータベースを分割しても、データベースの最適な分割は保証されない。さらに、この従来の技法は、最悪のルックアップ・パフォーマンスを保証しない。
【０００８】
データベースの分割に使用される他の技法としては、木構造またはトライを使用する技法がある。多くの異なる木構成があり、単純な木は、しばしば２分木と呼ばれ、より複雑な木は２分木の圧縮された形態である。木内でアドレスをサーチする場合、サーチはルート・ノードから開始する。ルート・ノードから始めて、「１」ポインタまたは「０」ポインタを辿って木内の次のノードまたは２進ビット位置に進む。たとえばアドレスが００１＊で始まる場合、サーチはルートから開始して、下方の各頂点ノードに進む。「０」分岐ポインタから開始して次の「０」分岐ポインタへと進み、最後に「１」分岐ポインタに至る。このサーチは、葉ノードに達するか、または障害が発生するまで続く。この２分木を圧縮してサーチ・オペレーションを強化することができる。パトリシア木は、分岐の長さを比較的わずかな葉ノードしかない長さに短縮するために使用される圧縮の一形態である。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記の技法の欠点は、いずれのポインタから延びるサブデータベースにもサイズの制限を設けないことである。このため、サブデータベースに対して所与の記憶量を配分することが困難であり、また同様に、（サブデータベース全体のルックアップに対する最悪ケースのわずかな保証以外は）ルックアップの性能や速度も保証しない。
【００１０】
各ノード内のプレフィクスまたはサーチ可能なサブデータベースをより最適に配分すれば、サーチをより最適に実現可能なはずである。したがって、サーチ時に対象サブデータベースのみを指すポインタとして機能する「スピア(spear)プレフィクス」を使用する、特別な形態のサーチ可能データベースを構成する必要がある。所期の配分は、各サブデータベース内のプレフィクス数に制限を設けることと、ルックアップ・テーブル内のサブデータベース数に制限を設けることを必要とする。サブデータベースの数とサブデータベースのサイズを制御することによって、ルックアップ・オペレーションがより決定性になり、最悪ルックアップ時間の保証をすることができる。制限された数のサブデータベースを、メモリなどの物理デバイスにより最適に配分することができ、その際、そのメモリの専用部分を対応するサブデータベースに合わせたサイズにすることができる。これにより、特定の１回のルックアップ時に、１個のサブデータベースのみにアクセスするだけで済むため、ルックアップ・オペレーションの電力消費が低減される。
【課題を解決するための手段】
【００１１】
上記の問題は、サブデータベースをより最適に配分することができるシステム、方法、メモリによって大部分解決される。サブデータベース内のプレフィクスの数は、Ｔ個以下に制限することが好ましく、Ｔは所望の速度および電力消費に従って選定し、通常は、データベース内の合計プレフィクス数Ｎよりもはるかに少ない。さらに、データベース内のサブデータベースの数は、Ｎに正比例し、Ｔに反比例し、Ｎ／Ｔから（２Ｎ／Ｔ）＋１までの間に制限することが好ましい。
【００１２】
データベースをサブデータベースに分割することにより、１個のサブデータベースのみをサーチするだけで済む。対象サブデータベースは、分割エンジンとも呼ぶポインタ部を使用して選択する。分割エンジンは、ポインタ群を格納するポインタ・テーブルを含む。各ポインタは、対応するプレフィクスを有し、以下、これを「スピア（ｓｐｅａｒ）プレフィクス」と呼ぶ。スピア・プレフィクスという用語を用いて、ルートからサブデータベースを突く（ｓｐｅａｒ）ために使用されるポインタの機能を示す。スピア・プレフィクスは、以下に説明するように本明細書で、最長一致スピア・プレフィクス一致によって対象サブデータベースを決定することができるようにするために固有に使用される、特殊機能プレフィクスであるという点で、通常のデータベース・プレフィクスとは区別される。説明を簡潔にするために、データベースのＮ個のプレフィクスに関連付けられたデータベース・プレフィクスを、以下、単に「プレフィクス」と呼び、ポインタ・テーブルに格納され、ポインタ部によって使用される特殊なプレフィクスを、以下「スピア・プレフィクス」と呼ぶ。
【００１３】
一実施形態によると、一方法が提供される。この方法を使用して、データベースを複数のサブデータベースに分割することによって転送データベースを形成する。サブデータベースのサイズと数とが適切に制限されていれば適切なサブデータベースを指示する、スピア・プレフィクス・エントリのセットと関連付けられたポインタとを形成することができる。ポインタは、ルート・ノードからの１と０とから成る２進数列を追跡するだけでなく、対象サブデータベースも指示する。
【００１４】
他の実施態様によると、サブデータベースに分割された転送データベース内のプレフィクスを突き止める他の方法が提供される。この方法では、たとえばポインタ・テーブル内のポインタを使用し、その中に格納されているスピア・プレフィクスの最長一致を適用する。次に、当該最長スピア・プレフィクスに関連付けられたポインタを使用して、転送データベース内の選択されたサブデータベースを指示することができる。次に、データベース・プレフィクス（または単に「プレフィクス」）の最長一致を使用して、選択されたサブデータベース内の最長プレフィクスを判断することができる。ポインタ・テーブル内の最長スピア・プレフィクスと、それによって選択されたサブデータベース内の最長プレフィクスを検出することにより、関連付けられたデータ・パケットを転送するネクスト・ホップを決定する。
【００１５】
他の実施態様によると、コンピュータ可読記憶媒体を有する転送デバイスが企図される。この記憶媒体は、分割プログラムと、ポインタ・テーブルと、ルックアップ・テーブルとを含む。ルート・ノードから複数の葉ノードに延びる分岐を有する木を形成するために分割プログラムがプロセッサによって呼び出される。次に、このプログラムは、Ｔ個未満のプレフィクスを有する各葉ノードに、葉ノード内の累積プレフィクス数を有し、ルートと葉ノードとの間のノードがＮ個のプレフィクスであるサブデータベースを形成することができる。サーチ・オペレーション時、ポインタ・テーブルにアクセスし、当該アドレスのサーチ時にポインタを入手する。ポインタ・テーブルは、ルックアップ・テーブルの、選択されたサブデータベースを含む部分のみを指示する。したがって、ポインタ・テーブルは、対応するサブデータベースを「突く（スピア）」ために使用される２分木の分岐に対応するものと考えることができ、サブデータベースは２分木の葉ノードと考えることができる。
【発明を実施するための最良の形態】
【００１６】
本発明のその他の目的および利点は、添付図面を参照し、以下の詳細な説明を読めば明らかになろう。
【００１７】
本発明には、様々な修正および代替態様が可能であるが、本発明の特定の実施形態を例として図面に示し、本明細書で詳細に説明する。しかし、図面およびその詳細な説明は、本発明を、開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲によって規定される本発明の主旨および範囲に含まれるすべての修正、同等物、および代替物を含む。
【００１８】
より効率的な転送データベースを構成し、当該データベースを使用して最長プレフィクス一致を実行する方法、装置、およびメモリ製品について説明する。転送デバイスはより迅速にパケットを転送することができるが、これは、転送データベース内の最も適切なプレフィクスをサーチする最長一致サーチが、それぞれがほぼ同じサイズ（すなわちプレフィクス数）のサブデータベース内で行われるためである。したがって、最長一致サーチは、すべてのサブデータベースではなく１個のサブデータベースでのみ行われる。選択されたサブデータベースは、ポインタ・テーブル内で特殊スピア・プレフィクスの最長一致サーチを行った結果である。スピア・プレフィクスは、データベース・プレフィクス（または単に「プレフィクス」）よりも数が大幅に少ないため、ポインタ・テーブル内で比較的少数の２進の１と０をサーチするだけで済む。ポインタ・テーブルで一致最長スピア・プレフィクスが決定した後は、１個のサブデータベースのみを使用して転送データベース内の最も適切なエントリを検出することにより、サーチ処理が大幅に迅速化される。
【００１９】
図１に、コンピュータ・ネットワーク１０内の、場合によっては多数ある転送デバイス１２を示す。コンピュータ１４間に介在するインターネットまたはイントラネットのトポロジは異なる場合がある。コンピュータ１４ａがコンピュータ１４ｂにデータ・パケットを送りたい場合、パケットは、ネットワーク１０内の１または複数の転送デバイス１２を通過しなければならない。転送デバイス１２ａがパケットを受け取る。このパケットはたとえば転送デバイス１２ｂ（またはコンピュータ１４ｂ）の宛先アドレスを含む。パケットが宛先により近い転送デバイス（またはホップ）に到達するように、ネットワーク１０内のどこにパケットを送信するかを決定することが、基本的に転送デバイス１２ａ内のルックアップ・テーブルの機能である。最適には、転送デバイス１２ａ内のルックアップ・テーブルが宛先アドレスを受け取り、そのアドレスまたはキーをルックアップ・テーブル内のプレフィクスと比較する。各プレフィクスには、ネクスト・ホップ識別子が関連付けられている。したがって、たとえば、最長プレフィクス一致比較を使用してプレフィクスが宛先と一致した後は、当該パケットは、より宛先に近いネクスト・ホップに送られる。
【００２０】
図２に、ルータ、ゲートウェイ、ブリッジ、交換機などの転送デバイス１２の一例を示す。転送デバイス１２は、しばしばパケット転送エンジンと呼ばれ、スイッチング・ファブリック２０と、複数のライン・カード２２を含む。スイッチング・ファブリック２０は、公知であり、すべてのライン・カードを相互接続するクロスバ交換機を含む。少なくとも１個のライン・カードがルーティング・プロセッサを含む。したがって、転送デバイス１２は、以下の２つの機能を実行するとみなせる。すなわち、（ｉ）発信ポートを識別するために、パケットの宛先アドレスに基づいてルートのルックアップを行い、（ｉｉ）パケットを適切な出力ポートにスイッチする。
【００２１】
ルーティング機能は、主として着信ライン・カード（たとえばライン・カード２２ａ）上で行うことができ、適切な出力ポートまたはライン・カードへのパケットのスイッチは、スイッチング・ファブリック２０内で行うことができる。パケットの宛先アドレス（Destination Address（ＤＡ））が、入出力インタフェースを介してライン・カード２２ａに入力することができる。各ライン・カードは、一般に、メディア・アクセス制御部（Media Access Controller （ＭＡＣ））２４、アドレス解決部（Address Resolution Unit（ＡＲＵ））２６、およびメモリ・デバイス２８を含む。ＭＡＣ２４は、ＣＳＭＡ／ＣＤ、ＦＤＤＩ、ＡＴＭ通信プロトコルなどの多くの異なる通信プロトコルを受け付けるように構成することができる。入力ＭＡＣ２４ａからパケットが読み取られると、スイッチング・ファブリック２０を介してパケットの進路を操作するために必要な転送制御情報が、パケットの先頭および／または最後に付加される。
【００２２】
入力ライン・カード上のＡＲＵ２６は、好ましくは、最長プレフィクス一致比較技法を使用してルーティング機能を実行する。ＡＲＵは、クラスレスまたはクラス・ベースのルーティング機能を実行することができ、可変長サブネット・マスク（Variable Length Subnet Masks:ＶＬＳＭ）に対応する。各ＡＲＵは、ＲＩＰ、ＯＳＰＦ、ＢＧＰなどの周知のルーティング・プロトコルを使用して、ネットワークのルートが追加または削除されると、再構成される。メモリ・デバイス２８は、ＤＲＡＭ、ＳＲＡＭ、コンテント・アドレス可能メモリ（Content-Addressable Memory：ＣＡＭ））など、様々な種類のランダム・アクセス・メモリ（ＲＡＭ）で実現可能であり、マスキングＣＡＭの一般的な形態は、ターナリ（３値）ＣＡＭ（Ｔｅｒｎａｒｙ  ＣＡＭまたはＴＣＡＭ）である。メモリ２８は、ルックアップ・テーブルを含むことができる。ルックアップ・テーブルをライン・カード２２内に配置すれば、着信パケットについてのルックアップをローカルで行うことができ、転送デバイス１２の中央演算処理装置に負担がかからない。
【００２３】
図３に、ルックアップ・テーブル全体の構成または構造を示す。ルックアップ・テーブルは、分割エンジンまたはポインタ部３２の後段の転送データベース３０全体と考えることができる。データベース３０は、複数のサブデータベース３４に分化または分割される。データベースをサブデータベース３４に分割するために使用される機構について、図５ないし図８を参照しながら以下に説明する。また、各サブデータベース内のプレフィクスの数を、最大プレフィクス数または閾値「Ｔ」と、最小プレフィクス数または「Ｔ／２」との間に制限する方法を説明する一例も示す。したがって、図３には、Ｔ個のプレフィクス３６を有する可能性があるサブデータベース３４ａが示されている。サブデータベース３４ｂは、最小数のプレフィクス３６を有することができる。各サブデータベース内のプレフィクス数が制御されるだけでなく、データベース３０内のサブデータベース３４の数も制御される。
【００２４】
ルックアップ・テーブルの一部として、またはルックアップ・テーブルの前段に、ポインタ部３２がある。ポインタ部３２は、ポインタのリストを有するポインタ・テーブルを含む。各ポインタは、対応するサブデータベースの適切な固有２進数列への分岐または「スピア」を表す２進数列を含む。たとえば、１つのポインタ３８は、プレフィクス０１＊を指すことができ、＊はドント・ケアまたはマスクエントリを表す。プレフィクス０１＊は、特殊な形態のプレフィクスであり、Ｎ個のデータベースとは全く異なる。プレフィクス０１＊は、本明細書に示す例ではサブデータベース３４ａを突く（spear）ように機能するため、以下、このプレフィクスをスピア・プレフィクスと呼ぶ。着信アドレス（ＤＡ）が０で始まり、次に１が続く場合、ポインタ３８はサブデータベース「Ｄ」を指す。このサブデータベースには、２進数列０１で始まり、限定された範囲の他の２進数の組合せが続く、限定された数のプレフィクスが含まれている。図３にポインタ４０として他のポインタが示されており、参照番号３４ｂで示すサブデータベース「Ｉ」を指している。サブデータベース「Ｉ」は、スピア・プレフィクス１１００で始まる２進数列であって、後続の２進順列がサブデータベース「Ｉ」のプレフィクス・エントリ数に含まれる２進数列を有することができる。図３の例で０１＊、１１００＊、および＊として示されているポインタ群は、アドレス解決全体の一部として構成され、ポインタ部３２のポインタ・テーブル内に格納される。
【００２５】
図２および図３に示す各機能単位は、ソフトウェアまたはファームウェアによって指示された一連のオペレーションを実行する、ハードワイヤード回路、特殊用途向け集積回路（ＡＳＩＣ）、１または複数の論理回路、プロセッサ、またはプログラム式コンピュータの任意の構成要素、あるいはこれらの組合せとすることができる。重要なのは、本発明が、これらの機能単位の特定の実施形態には限定されず、したがって、機能単位はハードウェア、ファームウェア、またはソフトウェアを使用してそれぞれの機能を実現することができることである。
【００２６】
図４に、転送デバイス１２内のメモリ・アロケーションの例を示す。図４に示すように、転送デバイスは、ネットワーク内の他の転送デバイスと通信する複数の入出力ポート４０を備える。メモリ２８内の分割プログラム４４をフェッチさせるために、図示された実施態様におけるパケット・プロセッサ４２が呼び出される。分割プログラムがプロセッサ４２上で実行されると、ルックアップ・テーブルのデータベースが、制限されたサイズと数のサブデータベースに分割される。データベースが分割される仕組みについては後述する。分割後、プロセッサ４２はルックアップ・テーブル４６内でサブデータベースを構成し、ポインタをポインタ・テーブル４８に格納する。アドレス・サーチを行うときは、入出力ポート４０を介して着信アドレスがポインタ・テーブル４８に送られる。
【００２７】
当該アドレスの始めの方の２進ビットのセット内の最長プレフィクスとの一致に基づいて、適切なポインタが選択される。このビット・セットは、スピア・プレフィクスを表し、ポインタは、ポインタ・テーブルに格納されているスピア・プレフィクスのセット内の最長スピア・プレフィクスとの突合せによって選択される。したがって、選択されたポインタは、ルックアップ・テーブル４６内の適切なサブデータベースを指す。当該サブデータベース内のみでさらに最長プレフィクス一致オペレーションを行って、最長一致プレフィクスを判断する。判断されると、当該最長一致プレフィクスは対応するネクスト・ホップエントリを指すことになる。図３に示すように、このルックアップ・オペレーションの結果がセレクタに送られ、セレクタは、図２のスイッチング・ファブリックによって認識可能なネクスト・ホップ識別子を選択する。このネクスト・ホップ・アドレス・セレクタを、図３に参照番号３９で示し、メモリ３８に格納されているネクスト・ホップ・テーブルを参照番号４９で示す。
【００２８】
図５に、分割プログラム４４（図４）が２分木５０を使用してポインタ・エントリまたはスピア・プレフィクスを生成する方法と、各サブデータベース内のプレフィクスとを示す。図のように、転送データベース内のプレフィクス・アドレスは、２分木データ構造５０で表すことができる。各ノードまたは頂点が、１と０とから成る２進ストリングを表す。ルート（Ｒ）は、＊として表されている空ストリングである。各ノードからは２個のポインタが出ている。最初のポインタは、現在２進ストリングと０とから成り、２番目のポインタは、現在２進ストリングと１とから成る。
【００２９】
転送データベースを制限されたサブデータベースに分化するために、一例を示す。この例では、転送データベースは、３００個のプレフィクスから成っている。代わりにＮ個のプレフィクスとしても知られている。３００個のプレフィクスの空ノードまたはルート・ノードＲから開始すると、６０個のプレフィクスがそれぞれのより上位ビット位置の０で始まることができ、２４０個のプレフィクスがより上位ビット位置の２進１で始まる。したがって、ノードＡは、６０個のプレフィクスを有することができ、ノードＢは２４０個のプレフィクスを有することができる。ルート・ノードに関連付けられたプレフィクスがもはやないため、数値３００は、「Ｘ」で示すことによって取り消される。
【００３０】
他の例を示すと、いずれのサブデータベース内にも５０以下のプレフィクスしかないようにしたい場合がある。したがって、ノードＡ、Ｂはそれぞれ５０個を超えるプレフィクスを含むため、両方のノードをさらに分割する必要がある。ノードＡのプレフィクスは、０値を有する次の２進ビットに関連付けられた１２個のプレフィクスと、関連付けられた２進値１を有する次のビットを備える４８個のプレフィクスとを含む。ノードＤにはＴ＝５０個以上のプレフィクスがないため、ノードＤはサブデータベースを表すと言え、ノードＤを指すポインタは、格納された２進数列０１＊を有することになる。したがって、ノードＤのスピア・プレフィクスは０１＊であり、したがってノードＤは、プレフィクス数がＴ未満であるためにサブデータベースになり、後述するように、プレフィクス数はＴ／２より多い。上位ビット位置の０１の比較を実現するマスキング・オペレーションによって、アドレスに４８個のプレフィクスを含むサブデータベースＤを指示させる。この４８個のプレフィクスに対してさらに最長プレフィクス一致を行う必要がある。
【００３１】
ノードＡプレフィクスをさらに分化する必要があるほかに、ノードＢプレフィクスも分割する必要がある。０である次のビット値に８個のプレフィクスを関連付けることができ、１である次のビット値に２３２個のプレフィクスを関連付けることができる。したがって、ノードＦは、図のようにさらにノードＧとＨに分割しなければならない。ノードＧとノードＨは、両者ともプレフィクス数が最大プレフィクス数を超えるため（すなわち、この例では図のようにノードＧは７０個のプレフィクスを有し、ノードＨは１６２個のプレフィクスを有する）、さらに分割する必要がある。さらに分割した後、ノードＧからノードＩとＪが生じ、各ノードのプレフィクスを最大限度プレフィクス数よりも少なくすることができる（すなわち、ノードＩは２８個のプレフィクスを有するものとして図示され、ノードＪは４２個のプレフィクスを有するものとして図示されている）。ノードＩにおけるサブデータベースとノードＪにおけるサブデータベースとを指示するために、ポインタ・テーブルにスピア・プレフィクス・ポインタを１１００＊および１１０１＊として格納する必要がある。この例では５０個である最大プレフィクス・エントリ数より少ないプレフィクスを有するノードが生成されるまで、図のようにノードＫについてさらに分割を行わなければならない。したがって、ノードＫの１５７個のプレフィクスから、ノードＯで３４個のプレフィクスを生成し、ノードＱで３８個のプレフィクス、ノードＳで４２個のプレフィクス、ノードＮで４３個のプレフィクスを生成する。
【００３２】
最大限界未満のプレフィクスとなるノードは、葉ノードとみなすことができる。したがって、この例では、葉ノードはノードＣ、Ｄ、Ｅ、Ｉ、Ｊ、Ｏ、Ｑ、Ｓ、Ｎ、Ｌを含む。しかし、すべての葉ノードがサブデータベースを含むわけではない。葉ノードによっては、最小数よりも少ない数のプレフィクスを含むものもある。たとえば、最小プレフィクス数はＴ／２個とすることができ、この例では２５個である。図５に示すように、この分割プログラムの結果、ノードＣ、Ｅ、Ｌのプレフィクスが２５個未満となる。
【００３３】
最長一致プレフィクス・オペレーションを最適化するために、２進チェーンを上方に辿って最小境界に満たないプレフィクスを含むノードをマージすることが望ましい。図のように、ノードＣ内の１２個のプレフィクスを上位のノードＡにマージすることができる。しかし、ノードＡのプレフィクスは下位のノードＣとノードＤとに移されたため、ノードＡにはプレフィクスが含まれていない。マージ・オペレーションの結果としてのノードＡのプレフィクス数は、許容最小数よりも少ないため、さらにマージを行わなければならない。２番目の破線で示すように、ノードＡからルート・ノードに再度、上方マージを行う必要がある。同じマージ・オペレーションを、ノードＥからノードＢ、ノードＢからルート・ノードＲに行う。ノードＬ内のプレフィクスも、ノードＨ、ノードＦ、次にノードＢに進む破線によって、上方にマージされる様子が示されている。もし、ノードＥからのプレフィクス数がノードＬからのプレフィクス数と合わせて２５個を超えるとすれば、マージ・オペレーションはノードＢで終了することになる。しかし、ノードＥ内の８個のプレフィクスと、ノードＬ内の５個のプレフィクスを合わせても２５個を超えず、したがって、ルート・ノードＲまで上方にマージする必要があり、ルート・ノードＲでノードＣからの１２個のプレフィクスと合わされる。上方に向かってルート・ノードＲまでマージされたプレフィクスの累積数は最小の２５個に等しいが、累積数が２５に満たない場合でも、ルート・ノードはマージ・オペレーションの例外となる。したがって、２５個未満のプレフィクスがルート・ノードまで上方に辿ってマージされた場合、空ポインタを有するルート・ノードからそれ以上の上方マージを行う必要はない。
【００３４】
分割とそれに続くマージ・オペレーションの結果、図５の２分木５０から、限定されたサブデータベースを有する８個のノードが生成される。ノードＤ、Ｉ、Ｊ、Ｏ、Ｑ、Ｓ、Ｎ、Ｒの各サブデータベース内のプレフィクス数を各ノードの右に示し、当該サブデータベースを指すポインタ・テーブル内のポインタ・エントリを各ノードの下に示す。図の例では、この８個のサブデータベースは、Ｔ個以下、Ｔ／２個以上のプレフィクスを有する。Ｔは、最長プレフィクス一致を最適に行うのに必要な分化の数に応じて任意の所定数とすることができる。さらに、サブデータベースの数は、２Ｎ／Ｔ＋１個を超えず、Ｎ／Ｔ未満でない数を選定する。図の例では、２Ｎ／Ｔ＋１＝６００／５０＋１、すなわち１３である。また、Ｎ／Ｔ＝３００／５０、すなわち６である。８個のサブディレクトリが生成されたため、８は６から１３までの境界内に収まる。
【００３５】
次に図６を参照すると、分割プログラムがさらに詳細に示されている。図６は、図４の分割プログラムによって使用される一連のステップを示す。これらのステップは、具体的には、分割プログラムの分割段階を示す。図７に、分割プログラムのマージ段階を示す。分割段階では、分割プログラムはステップ６０で開始し、木またはトライを下方に進む。ステップ６２で、上位ビット部分の値を検査し、ステップ６４に示すように、その部分の０値と１値に対応するプレフィクスが、トライを下方に辿った次のノードに関連付けられる。決定ブロック６６に示すように、分割ステップ６４の結果の各ノードを検査し、当該ノード内のプレフィクスが閾値Ｔプレフィクス数以下であるか否かを判断する。閾値以下である場合、分割オペレーションは終了し、ステップ７４に進む。それ以外の場合は、次の２進値を検査し６８、ステップ７０に示すように次のノード対に関連付けられたプレフィクスを再度分割する。次に、決定ブロック７２で、その結果の各ノード内のプレフィクスの数を検査し、その数が閾値Ｔ以下であるか否かを判断する。閾値以下の場合、分割段階は終了する。それ以外の場合、ステップ６２〜６８と同様に、すべてのノードのプレフィクス数が閾値Ｔ以下になるまでステップ６８〜７２が繰り返される。以下の疑似コードは、分割プログラムの分割段階を示し、スピアエントリ（「ＳＥ」）は制限された数のプレフィクスを含むノード（すなわちサブデータベース）を指すポインタを示し、ＴｓｐｌｉｔはＴに等しい。
アルゴリズムＳｐｌｉｔ（Ｒ，Ｔｓｐｌｉｔ）
ＬｉｓｔＰｅｎｄｉｎｇ  ＝｛Ｒ｝
Ｗｈｉｌｅ（ＬｉｓｔＰｅｎｄｉｎｇが空でない）
｛
ＬｉｓｔＰｅｎｄｉｎｇからノードＡを削除する
ｎ＝｜ｓｕｂｔｒｉｅ（Ａ）｜
Ｉｆ（ｎ＞Ｔｓｐｌｉ）｛
／＊Ａを分割する＊／
Ａの左側の子（空でない場合）と右側の子（空でない場合）をＬｉｓｔＰｅｎｄｉｎｇに入れる｝
｝
ｅｌｓｅ｛ノードＡを候補ＳＥとしてマークする｝
／＊アルゴリズムＳｐｌｉｔ（）の終わり＊／
【００３６】
図７に、分割オペレーションが終了７４した後のステップから開始される、分割プログラムのマージ段階を示す。マージ段階は、ステップ７６で分割されたプレフィクスを含む各ノードを見ることによって開始する。決定ブロック７８に示すように、ノードがたとえばＴ／２未満のプレフィクスを含む場合、当該ノードを上方にマージする必要がある。しかし、各ノードのプレフィクスがたとえば最小閾値Ｔ／２を超える場合は、ステップ８４に示すようにマージ・オペレーションが終了する。それ以外の場合、マージ・オペレーションはステップ８０に進む。決定木８２に示すように、すべてのノード内のすべてのプレフィクス数を検査して、プレフィクスが最小限界以上であることが確認されるまで、次に続くノードについて決定木７８を繰り返す。最終的に、すべてのノードを検査し、マージ・オペレーションは終了する。このマージ・オペレーションを表す疑似コードを以下に示す。ここで、Ｔｍｅｒｇｅはこの例ではＴ／２である。
アルゴリズムＭｅｒｇｅＵｓｉｎｇＲｅｃｕｒｓｉｏｎ（Ｒ，Ｔｍｅｒｇｅ）
Ｌ＝ＲｅｃｕｒｓｅＭｅｒｇｅ（Ｒ，Ｔｍｅｒｇｅ）；
Ｉｆ（Ｌが空でない［すなわち非ゼロ］）ＲをＳＥとし、ＬをそのＬＳＮとする
／＊アルゴリズムＭｅｒｇｅＵｓｉｎｇＲｅｃｕｒｓｉｏｎの終わり＊／
／＊上記のアルゴリズムで以下の再帰関数を使用する。［］のインスタンスは、このコンテキストでは該当しないため、すべて削除されたい。＊／
関数リスト［ｉｎｔ］ＲｅｃｕｒｓｅＭｅｒｇｅ（Ａ，Ｔｍｅｒｇｅ）
｛
Ｉｆ（ＡがＮＵＬＬ）ＮＵＬＬ［０］を返す；
Ｉｆ（Ａがすでにマークされた候補ＳＥ）
｛
ｉｆ（｜ｓｕｂｔｒｉｅ（Ａ）｜≧Ｔｍｅｒｇｅ）｛ＡをＳＥとしてマークする；ＮＵＬＬ［０］を返す｝
ｅｌｓｅ｛Ａ［１］を返す；｝
｝
Ｌ１＝ＲｅｃｕｒｓｅＭｅｒｇｅ（Ａ−＞ｌｅｆｔＣｈｉｌｄ，Ｔｍｅｒｇｅ）；
Ｌ２＝ＲｅｃｕｒｓｅＭｅｒｇｅ（Ａ−＞ｒｉｇｈｔＣｉｌｄ，Ｔｍｅｒｇｅ）；
Ｌ＝Ｌ１＋Ｌ２；／＊連結オペレーション［または整数の場合は整数加算オペレーション］をリストする＊／
Ｉｆ（Ａにプレフィクスがある）｛ｒｅｔ＝（｛Ａ｝＋Ｌ）［１＋Ｌ｝
ｅｌｓｅ｛ｒｅｔ＝Ｌ；｝
ｉｆ（ｒｅｔ≧Ｔｍｅｒｇｅ）
｛
／＊ｒｅｔ＜＝２＊Ｔｍｅｒｇｅ−１であることが保証される。これは、Ｔｍｅｒｇｅ「Ｔ／２」の場合、＜＝Ｔである）＊／
ＡをＳＥとしてマークし、ＬをそのＬＳＮとしてマーク；
ｒｅｔｕｒｎ  ＮＵＬＬ［０］
｝
ｅｌｓｅ  ｒｅｔｕｒｎ（ｒｅｔ）；
／＊アルゴリズムＲｅｃｕｒｓｅＭｅｇｅ（）の終わり＊／
【００３７】
分割プログラムが分割段階とマージ段階とを完了した後は、ポインタ・テーブルとルックアップ・テーブルが適切に書きこまれ、値が格納されて、ルックアップ・オペレーションに進むことができる。判断ブロック９６で一致するものが見つからない場合、ブロック９４で入手したポインタと共に格納されている、予め計算済みの現時点での最長一致を使用しなければならない。図８に、ポインタ・ルックアップ時とサブデータベース・ルックアップ時の両方で有用な処置をとることによってルックアップを進めることができる、１つの方法を示す。Ｔを大きくすれば、転送データベース内のサブデータベースの数が少なくなる。Ｔは、サーチ速度の高速化、記憶量低減、前処理時間短縮、更新時間短縮など、特定のプレフィクス一致特性を実現するために望ましい任意の値に設定することができる。したがって、Ｔに調整を加えることによって、サーチ機構に拡張性と柔軟性をもたせることができると共に、最悪サーチの保証をすることができる。
【００３８】
ステップ９０でルックアップが開始し、ステップ９２に示すように、ポインタ・テーブルで最長一致プレフィクス一致に進む。ステップ９４に示すように、最長プレフィクス一致の結果として得られたポインタを、特定のサブデータベースを指示するポインタとして選択する。次に、ステップ９６に示すように、選択されたサブデータベースに対して最長一致プレフィクス一致を行い、着信アドレスのプレフィクスと一致するプレフィクスを判断する。一致するものが見つかったら、ステップ９８に示すように、当該アドレスについてのルックアップ・オペレーションを終了する。
【００３９】
ポインタ・テーブルで最長一致プレフィクス・オペレーションを行い、次に、サブデータベースにおける最長一致プレフィクスが続く機構は、上位ビット位置から開始して２進パターンを下位ビットに向かって進むマスキング・オペレーションの結果として実現することができる。したがって、マスク長は、一致が見つかるまで縮小または短縮することができる。任意の形態のマスキングと、任意の周知の最長プレフィクス一致技法を使用することができ、それらはすべて、図８のブロック９２および９６に含まれるものと企図される。
【００４０】
以上、本明細書では、本発明について特定の実施形態を参照しながら説明した。しかし、本発明のより広義の主旨および範囲から逸脱することなく、本発明に様々な修正および変更を加えることができることが、当業者には明らかであろう。したがって、本明細書および図面は、限定的なものではなく例示的なものとみなされるべきである。
【図面の簡単な説明】
【００４１】
【図１】通信ネットワークを示す構成図である。
【図２】図１の通信ネットワーク内のパケット転送エンジン（たとえば交換機またはルータ）を示すブロック図である。
【図３】アドレスの上位ビットをポインタ・テーブル内のプレフィクスと一致させ、次に、そのアドレスの下位ビットをポインタ部によって指示されたサブデータベース内のプレフィクスと一致させることによって、アドレスに、対応するサブデータベースを指示させる、ポインタ部を示すブロック図である。
【図４】パケット・プロセッサが図３のポインタ・テーブルと、ルックアップ・テーブル内のサブデータベースを構成するために使用する分割プログラムを記憶するために使用される、ルータ内のコンピュータ記憶媒体を示すブロック図である。
【図５】Ｎ／Ｔ個以上、（２Ｎ／Ｔ）＋１個以下のサブデータベースに区分されたデータベース内のＮ個のプレフィクスを有し、２進エントリが各サブデータベースを指す、２分木を示す構成図である。
【図６】データベースを上限数のプレフィクスを有するサブデータベースに分化するために使用される分割プログラムを示す流れ図である。
【図７】プレフィクス数が、下限プレフィクス数を下回る場合に、２分木を遡ってサブデータベースをマージする分割プログラムを示す流れ図である。
【図８】ポインタ・テーブル内のプレフィクスの中から一致する最長プレフィクス検出することによって開始し、ポインタ・テーブルによって指示された１個のサブデータベース（または複数のサブデータベース）を選択し、次に、選択された１個のサブデータベース（または複数のデータベース）内のプレフィクスの中から一致する最長プレフィクスを検出する、ルックアップ・オペレーションを示す流れ図である。
【図１】
0004614946.tif 000002
【図２】
0004614946.tif 000003
【図３】
0004614946.tif 000004
【図４】
0004614946.tif 000005
【図５】
0004614946.tif 000006
【図６】
0004614946.tif 000007
【図７】
0004614946.tif 000008
【図８】
0004614946.tif 000009