(57)【特許請求の範囲】
【請求項１】
アドレスを表す占有ノードとアドレスを表さない空ノードとを含む単純トライを、すべてのノードがアドレスを表す二分トライに変換する方法において、
ａ）ｉは整数として、前記単純トライで占有ノードを有する最低レベルを見出し、該最低レベルをｉとするステップと、
ｂ）ｉ−１に対応するレベルにおける各ノードを検査するステップと、
ｃ）レベルｉ−１に空ノードがある場合、該空ノードの深いほうのサブトライのボトムからプレフィクスを上方に移動するステップと、
ｄ）前記ステップａ）〜ｃ）をルートノードに到達するまで繰り返すステップと、
を有することを特徴とする方法。
【請求項２】
アドレスが格納された単純トライ内の各ノードを訪れる確率は既知として、該単純トライを、探索あたりの期待ステップ数が最小である二分トライに変換する方法において、
動的計画法を使用し、
ａ）ボトムアッププロセスを用いて各ノードαに対して、Ａα［ｉ］は最小期待探索ステップ数を保持し、
Ａα［ｉ］＝ｆ（Ａβ，Ａγ，Ｐβ，Ｐγ）
であり、β及びγは、αの左及び右の子であり、Ｐβ及びＰγは、αが既に訪れられたと仮定した場合に探索中にβ及びγが訪れられる確率を表すとして、αをルートとするサブトライからｉ個のノードが昇格すると仮定して配列Ａαを計算するステップと、
ｂ）各Ａα［ｉ］に対応する最適サブトライを生成するためにβ及びγから昇格させなければならないプレフィクス数を各Ａα［ｉ］に関連づけるステップと、
ｃ）配列Ａ及び該配列Ａに関連づけられたプレフィクス数に基づいて、ルートノードが、プレフィクスを保持していない場合に１個のプレフィクスを要求し、プレフィクスを保持している場合に０個のプレフィクスを要求することにより、ルートから再帰的にトップダウンに、子ノードに対してプレフィクスを昇格させる要求を発行するステップと、
を有することを特徴とする方法。
【請求項３】
前記二分トライはいずれのノードも空でないようにプレフィクスが格納されることを特徴とする請求項１または２に記載の方法。
【請求項４】
第１のプレフィクスは、ルートノードを割り当て、該ルートノードに該プレフィクスを置くことによって、空トライに挿入されることを特徴とする請求項３記載の方法。
【請求項５】
ｋは０より大きい整数であるとして、ｋビットからなり、ｂ0，ｂ1，...，ｂk-1の表示を有する、第１のプレフィクス以外のプレフィクスの挿入は、
ａ）前記トライのルートノードをカレントノードに指定し、ｂn＝ｂ0と置き、前記プレフィクスをカレントプレフィクスとして指定するステップと、
ｂ）カレントノードに既にカレントプレフィクスが格納されている場合には挿入を終了するステップと、
ｃ）ｂn＝０の場合にカレントノードの左の子を検査し、ｂn＝１の場合にカレントノードの右の子を検査するステップと、
ｄ）新たなノードを割り当て、左の子及び右の子のいずれかが存在しない場合にカレントプレフィクスを入れ、該新たなノードをカレントノードに指定するステップと、
ｅ）ｎ＝ｎ＋１の代入を行うステップと、
ｆ）ｎ＝ｋになるまで前記ステップｂ〜ｅを繰り返すステップと、
ｇ）カレントノードに以前に格納されたプレフィクスをカレントプレフィクスで置き換え、該以前に格納されたプレフィクスをカレントプレフィクスに指定し、前記ステップｂ〜ｇを繰り返すステップと、
を有するプロセスを用いて行われることを特徴とする請求項３記載の方法。
【請求項６】
ｋは０より大きい整数であるとして、ｋビットからなり、ｂ0，ｂ1，...，ｂk-1の表示を有するアドレスのＬＭＰを求める前記トライの探索は、
ａ）ルートノードが一致プレフィクスを有する場合、ルートノードをカレントノード及びＬＭＰノードに指定し、ｂn＝ｂ0と置くステップと、
ｂ）カレントノードをＬＭＰノードに指定し、カレントノードが一致プレフィクスを有しかつ該一致プレフィクスがＬＭＰノードより長い場合、該ＬＭＰノードを下方に移動するステップと、
ｃ）ｂn＝０の場合にカレントノードの左の子をカレントノードに指定し、ｂn＝１の場合にカレントノードの右の子をカレントノードに指定するステップと、
ｄ）ｎ＝ｎ＋１とするステップと、
ｅ）カレントノードがトライの最低レベルになるまで前記ステップｂ〜ｄを繰り返すステップと、
ｆ）最低のトライに対応するプレフィクスが一致する場合に該プレフィクスをＬＭＰとして選択するステップと、
を有するプロセスを用いて行われることを特徴とする請求項３記載の方法。
【請求項７】
アドレスに対応するプレフィクスの前記トライにおける削除は、
ａ）前記プレフィクスに対応する一致ノードを探索するステップと、
ｂ）前記一致ノードが葉ノードである場合に前記一致ノードを削除してプロセスを終了するステップと、
ｃ）前記一致ノードが葉ノードでない場合、前記一致ノードを削除して前記一致ノードの一方の子を上方に移動し、該一方の子を削除するステップと、
ｄ）葉ノードが削除されるまで前記ステップｂ〜ｃを繰り返すステップと、
を有するプロセスを用いて行われることを特徴とする請求項３記載の方法。
【請求項８】
前記アドレスはインターネットアドレスであり、前記二分トライはＩＰルータにあることを特徴とする請求項１記載の方法。
【請求項９】
コンピュータに、アドレスを表す占有ノードとアドレスを表さない空ノードとを含む単純トライをすべてのノードがアドレスを表す二分トライに変換する方法を実装するためのプログラムを記録したコンピュータ読み取り可能記録媒体において、
ａ）ｉは整数として、前記単純トライで占有ノードを有する最低レベルを見出し、該最低レベルをｉとするステップと、
ｂ）ｉ−１に対応するレベルにおける各ノードを検査するステップと、
ｃ）レベルｉ−１に空ノードがある場合、該空ノードの深いほうのサブトライのボトムからプレフィクスを上方に移動するステップと、
ｄ）前記ステップａ）〜ｃ）をルートノードに到達するまで繰り返すステップと、
を有することを特徴とするプログラムを記録したコンピュータ読み取り可能記録媒体。
【請求項１０】
コンピュータに、アドレスが格納された単純トライ内の各ノードを訪れる確率は既知として、該単純トライを探索あたりの期待ステップ数が最小である二分トライに変換する方法を実装するためのプログラムを記録したコンピュータ読み取り可能記録媒体において、
動的計画法を使用し、
ａ）ボトムアッププロセスを用いて各ノードαに対して、Ａα［ｉ］は最小期待探索ステップ数を保持し、
Ａα［ｉ］＝ｆ（Ａβ，Ａγ，Ｐβ，Ｐγ）
であり、β及びγは、αの左及び右の子であり、Ｐβ及びＰγは、αが既に訪れられたと仮定した場合に探索中にβ及びγが訪れられる確率を表すとして、αをルートとするサブトライからｉ個のノードが昇格すると仮定して配列Ａαを計算するステップと、
ｂ）各Ａα［ｉ］に対応する最適サブトライを生成するためにβ及びγから昇格させなければならないプレフィクス数を各Ａα［ｉ］に関連づけるステップと、
ｃ）配列Ａ及び該配列Ａに関連づけられたプレフィクス数に基づいて、ルートノードが、プレフィクスを保持していない場合に１個のプレフィクスを要求し、プレフィクスを保持している場合に０個のプレフィクスを要求することにより、ルートから再帰的にトップダウンに、子ノードに対してプレフィクスを昇格させる要求を発行するステップと、
を有することを特徴とするプログラムを記録したコンピュータ読み取り可能記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、アドレスに関するプレフィクスを効率的に格納することに関する。特に、本発明は、トライ（ｔｒｉｅ）の各ノードに１個のプレフィクスが格納されて空のノードがないようなバイナリ・トライ（ｂｉｎａｒｙ  ｔｒｉｅ、以下「二分トライ」という。）方式でアドレスに関するプレフィクスを格納することに関する。本発明は、二分トライ方式でアドレスに関するプレフィクスを格納する方法として実現される。また、本発明は、前記二分トライ方式でネットワークアドレスに関するプレフィクスを格納する方法、前記二分トライ方式でネットワークアドレスが格納されるネットワーキングシステムとして実現される。更に、本発明は、前記二分トライ方式でコンピュータがアドレスを格納することを可能にするコンピュータプログラム製品として実現される。
【０００２】
【従来の技術】
アドレス及びアドレスに関するプレフィクスを効率的に格納することは、複数のアドレスを使用するシステムにとって重要である。なお、この「従来の技術」のセクションでは、多くのインターネットアプリケーションで使用されるルータに関連するフォワーディングテーブルについて説明するが、説明される技術及び原理は複数のアドレスに関するプレフィクスを格納するためのテーブルが必要とされるような任意のシステムに適用される。また、ネットワーキングシステムでは、多数のネットワークアドレスを効率的に格納することが必要となる。
【０００３】
ＩＰアドレスは一般に３２ビットを有する。ＩＰデータグラムは、ソース（送信元）及びデスティネーション（宛先）の両方のＩＰアドレスを含む。ルータで、着信ＩＰデータグラムは次のホップ（これは一般に近くのマシンである。）へ転送されなければならない。ルータは、自己のルーティングテーブルを参照することによって、次のホップを決定する。この手続きをＩＰフォワーディング（ＩＰ  ｆｏｒｗａｒｄｉｎｇ）、あるいはテーブルルックアップ（ｔａｂｌｅ  ｌｏｏｋｕｐ）という。なお、フォワーディングは、ルート（経路）を計算することとは異なる（ルート計算は、例えば呼ルーティングであり、ルーティングアルゴリズムによって扱われる。）。ＩＰフォワーディングは、一般的なデータグラムにとって、最も時間のかかるタスクとなる場合がある。
【０００４】
ＩＰの最近のバージョンにおけるデータグラムのフォワーディングは、ＩＰアドレスプレフィクスのセットの格納に基づいている。その各アドレスは、ＩＰを使用するネットワーキングシステム内の次のホップに対応する。ＩＰデータグラムがネットワーキングシステム内のルータに到着すると、デスティネーションアドレスが、ルータのフォワーディングテーブル内に格納されているプレフィクスと照合される。デスティネーションＩＰアドレスと一致する最長のプレフィクスを見つけ、そのプレフィクスの次ホップ情報が、このデータグラムを転送するために使用される。この問題は、最長一致プレフィクス（ＬＭＰ：Ｌｏｎｇｅｓｔ  Ｍａｔｃｈｉｎｇ  Ｐｒｅｆｉｘ）問題と呼ばれる。直ちにわかるように、アドレスに関するプレフィクスの効率的な格納がＬＭＰ問題を解決する際の重要なファクタである。
【０００５】
ＩＰを使用するネットワーキングシステム内のルータのフォワーディングテーブルにプレフィクスを格納する従来技術の１つは、ＣＩＤＲ（ｃｌａｓｓ−ｌｅｓｓ  Ｉｎｔｅｒ−Ｄｏｍａｉｎ  Ｒｏｕｔｉｎｇ）として知られている（Ｖ．  Ｆｕｌｌｅｒ，  Ｔ．  Ｌｉ，  Ｊ．  Ｙｕ，  ａｎｄ  Ｋ．  Ｖａｒａｄｈａｎ，  ”Ｃｌａｓｓｌｅｓｓ  ｉｎｔｅｒ−ｄｏｍａｉｎ  ｒｏｕｔｉｎｇ  （ＣＩＤＲ）：  Ａｎ  ａｄｄｒｅｓｓ  ａｓｓｉｇｎｍｅｎｔ  ａｎｄ  ａｇｇｒｅｇａｔｉｏｎ  ｓｔｒａｔｅｇｙ”，  ＲＦＣ−１５１９，  Ｓｅｐｔｅｍｂｅｒ  １９９３、を参照）。このアプローチは、インターネット内のアドレスを格納するテーブルのサイズを縮小することを意図している。ＣＩＤＲ以前のＩＰフォワーディング法は、デスティネーションネットワーク番号を容易に抽出することができるように、アドレスフォーマットを固定することに基づいていた。データグラムは、各デスティネーションネットワークに関連する次ホップに転送された。各ルータ上で、ネットワークごとに１個のフォワーディングテーブルが必要とされる。このような格納領域が要求されることは、インターネット上のネットワーク数が増大するにつれて問題となった。ＣＩＤＲは、単一のプレフィクスのもとで同じ次ホップ情報のＩＰアドレスをまとめることによって（そのようにまとめることが可能なとき）、これらのフォワーディングテーブルのサイズを縮小する。
【０００６】
次に示す表１は、６個のプレフィクスのセットを含むフォワーディングテーブルの例である。
【表１】
0003570323.tif 000002
【０００７】
上記の転送プロセスの例として、表１を考える。この表は、プレフィクスのセットを含み、各プレフィクスには次ホップが関係づけられる。次ホップ情報は一般に、次のルータのＩＰアドレスと、出力物理インタフェースからなる。例えば、あるＩＰデータグラムのデスティネーションアドレスが「４．１２３．３３．１２」である場合、左端の８ビットは「０００００１００」である。このアドレスに対して、表１のＬＭＰは「００００」であり、これは次ホップがＨ０であることを示す。もう１つの例として、デスティネーションアドレス「１０９．１２．１２．１２」では、左端の８ビットは「０１１０１１０１」である。このアドレスは、「０１１０１」及び「０１１０１１」の両方に一致する。後者のプレフィクスのほうが長いので、次ホップはＨ３となる。
【０００８】
情報の格納及び探索に関する初期の研究のかなりの部分は、通常は少ない修正だけで、ＬＭＰ問題に適用可能である。特に、キーの直接比較ではなく、キーの２進表示に基づく探索法は、このような場合に一般的になっている。Ｋｎｕｔｈは、さまざまなこのような「ディジタル探索」アプローチについて概説している（Ｄ．  Ｅ．  Ｋｎｕｔｈ，  ”Ｔｈｅ  Ａｒｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｐｒｏｇｒａｍｍｉｎｇ：  Ｖｏｌｕｍｅ  ３，  Ｓｏｒｔｉｎｇ  ａｎｄ  Ｓｅａｒｃｈｉｎｇ”，  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，  ｓｅｃｏｎｄ  ｅｄ．，  １９９８、を参照）。
【０００９】
トライ構造は、任意のレベルにおける分岐が、トライのノードに格納されている値の一部のみによって決定されるような木構造の一種である。Ｆｒｅｄｋｉｎのトライ構造はエレガントであるが、メモリの使用が非効率的であり、格納されているプレフィクスよりも多くのノードを必要とする可能性がある（Ｅ．  Ｆｒｅｄｋｉｎ，  ”Ｔｒｉｅ  ｍｅｍｏｒｙ”，  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ，  ｖｏｌ．３，  ｐｐ．４９０−５００，  １９６０、を参照）。Ｍｏｒｒｉｓｏｎのパトリシアトライ（Ｐａｔｒｉｃｉａ  ｔｒｉｅ）は、テーブルエントリに関連づけられておらず１個の子しか有しない各トライノードを除去することによってこの問題点を改善している（Ｄ．  Ｍｏｒｒｉｓｏｎ，  ”Ｐａｔｒｉｃｉａ−ｐｒａｃｔｉｃａｌ  ａｌｇｏｒｉｔｈｍ  ｔｏ  ｒｅｔｒｉｅｖｅ  ｉｎｆｏｒｍａｔｉｏｎ  ｃｏｄｅｄ  ｉｎ  ａｌｐｈａｎｕｍｅｒｉｃ”，  Ｊｏｕｒｎａｌ  ｏｆ  ｔｈｅ  ＡＣＭ，  ｖｏｌ．１５，  ｎｏ．４，  ｐｐ．５１５−５３４，  Ｏｃｔｏｂｅｒ  １９６８、を参照）。Ｍｏｒｒｉｓｏｎ及びＦｒｅｄｋｉｎによってそれぞれ提案されたこれらの２つの構造は、ＩＰフォワーディングに関する最近の研究の多くに影響を与えている。図１９に、従来のトライ構造の一例を示す。図２０に、従来のトライ構造、及び、等価な従来のパトリシアトライ構造の一例を示す。図１９及び図２０において、黒丸のノードはプレフィクスを格納しており、白丸のノードはプレフィクスを格納していない。
【００１０】
ＩＰフォワーディングを扱うための最近の提案は、さまざまな設計目標を念頭において最適化されている。これらのアプローチのうちのいくつかは、テーブルの更新（すなわち、挿入及び削除）よりもルックアップ（すなわち探索）の速度に重きを置いている（以下の文献を参照）。
・Ｍ．  Ｄｅｇｅｒｍａｒｋ，  Ａ．  Ｂｒｏｄｎｉｋ，  Ｓ．  Ｃａｒｌｓｓｏｎ，  ａｎｄ  Ｓ．  Ｐｉｎｋ，  ”Ｓｍａｌｌ  ｆｏｒｗａｒｄｉｎｇ  ｔａｂｌｅｓ  ｆｏｒ  ｆａｓｔ  ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＡＣＭ  ＳＩＧＣＯＭＭ’９７，  ｐｐ．３−１４，  １９９７
・Ｂ．  Ｌａｍｐｓｏｎ，  Ｖ．  Ｓｒｉｎｉｖａｓａｎ，  ａｎｄ  Ｇ．  Ｖａｒｇｈｅｓｅ，  ”ＩＰ  ｌｏｏｋｕｐｓ  ｕｓｉｎｇ  ｍｕｌｔｉｗａｙ  ａｎｄ  ｍｕｌｔｉｃｏｌｕｍｎ  ｓｅａｒｃｈ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＩＥＥＥ  ＩＮＦＯＣＯＭ’９８，  ｐｐ．１２４８−１２５６，  １９９８
・Ｓ．  Ｎｉｌｓｓｏｎ  ａｎｄ  Ｇ．  Ｋａｒｌｓｓｏｎ，  ”Ｆａｓｔ  ａｄｄｒｅｓｓ  ｌｏｏｋｕｐ  ｆｏｒ  Ｉｎｔｅｒｎｅｔ  ｒｏｕｔｅｒｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＩＥＥＥ  Ｂｒｏａｄｂａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ９８，  Ａｐｒｉｌ  １９９８
・Ｈ．  Ｈ．−Ｙ．  Ｔｚｅｎｇ，  ”Ｌｏｎｇｅｓｔ  ｐｒｅｆｉｘ  ｓｅａｒｃｈ  ｕｓｉｎｇ  ｃｏｍｐｒｅｓｓｅｓ  ｔｒｅｅｓ”，  ｉｎ  ＧＬＯＢＥ−ＣＯＭ’９８，  Ｇｌｏｂａｌ  Ｉｎｔｅｒｎｅｔ  Ｍｉｎｉ  Ｃｏｎｆｅｒｅｎｃｅ，  ｐｐ．８８−９３，  Ｎｏｖｅｍｂｅｒ  １９９８
・Ｍ．  Ｗａｌｄｖｏｇｅｌ，  Ｇ．  Ｖａｒｇｈｅｓｅ，  Ｊ．  Ｔｕｒｎｅｒ，  ａｎｄ  Ｂ．  Ｐｌａｔｔｎｅｒ，  ”Ｓｃａｌａｂｌｅ  ｈｉｇｈ  ｓｐｅｅｄ  ＩＰ  ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＡＣＭ  ＳＩＧＣＯＭＭ’９７，  ｐｐ．２５−３６，  １９９７。
【００１１】
ルックアップの速度に重きを置く理由は、ルーティング更新はかなり頻繁にあるが、ルーティングプロトコルは更新に適応するのに数分間かかることがあるためである。ルータ上のフォワーディングテーブルは、現在のシステムでは、毎秒高々１回より多くは変更する必要がない。従って、ルータ上の他の場所にある何らかの動的ルーティングテーブル構造（これがフォワーディングテーブルを定期的に更新する）を使用することが考えられる。
【００１２】
現在では、探索速度に重きを置くことにより、不均衡な設計が生じており、これは、インターネットの現在及び将来の需要と調和していない。Ｌａｂｏｖｉｔｚ  ｅｔ  ａｌ．は、インターネットコアルータは一般に、１９９６年には、毎日３百万〜６百万の更新情報を交換していると指摘している（Ｃ．  Ｌａｂｏｖｉｔｚ，  Ｇ．  Ｒ．  Ｍａｌａｎ，  ａｎｄ  Ｆ．  Ｊａｈａｎｉａｎ，  ”Ｉｎｔｅｒｎｅｔ  ｒｏｕｔｉｎｇ  ｉｎｓｔａｂｉｌｉｔｙ”，  ＩＥＥＥ／ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｎｅｔｗｏｒｋｉｎｇ，  ｖｏｌ．６，  ｎｏ．５，  ｐｐ．５１５−５２８，  Ｏｃｔｏｂｅｒ  １９９８、を参照）。インターネットが成長するにつれて、また、モビリティ（移動性）に対するサポートが拡大するにつれて、効率的に更新することが可能なフォワーディングテーブルに対する需要は更に増大することが予想される。
【００１３】
最近、ＩＰフォワーディング問題に関する多くの研究がある。本明細書では、ソフトウェアアプローチに注目する。なお、多くのソフトウェアアプローチは、ハードウェアに効率的に実装することが可能である。本発明のこのようなハードウェア実装の１つについても説明する。いくつかのこのようなアプローチの比較は、Ｆｉｌｉｐｐｉ  ｅｔ  ａｌ．の研究に見られる（Ｅ．  Ｆｉｌｉｐｐｉ，  Ｖ．  Ｉｎｎｏｃｅｎｔｉ，  ａｎｄ  Ｖ．  Ｖｅｒｃｅｌｌｏｎｅ，  ”Ａｄｄｒｅｓｓ  ｌｏｏｋｕｐ  ｓｏｌｕｔｉｏｎｓ  ｆｏｒ  ｇｉｇａｂｉｔ  ｓｗｉｔｃｈ／ｒｏｕｔｅｒ”，  ｉｎ  ＧＬＯＢＥＣＯＭ’９８，  Ｇｌｏｂａｌ  Ｉｎｔｅｒｎｅｔ  Ｍｉｎｉ  Ｃｏｎｆｅｒｅｎｃｅ，  ｐｐ．８２−８７，  Ｎｏｖｅｍｂｅｒ  １９９８、を参照）。
【００１４】
Ｄｅｇｅｒｍａｒｋ  ｅｔ  ａｌ．には、市販のプロセッサで実行するために最適化されたアプローチについて記載されている。Ｄｅｇｅｒｍａｒｋ  ｅｔ  ａｌ．では、効率的な動作を提供するため、テーブルデータを小さく保ちながら、同時に、テーブルを探索するのに必要なメモリアクセス数を最小にしようとする（Ｍ．  Ｄｅｇｅｒｍａｒｋ，  Ａ．  Ｂｒｏｄｎｉｋ，  Ｓ．  Ｃａｒｌｓｓｏｎ，  ａｎｄ  Ｓ．  Ｐｉｎｋ，  ”Ｓｍａｌｌ  ｆｏｒｗａｒｄｉｎｇ  ｔａｂｌｅｓ  ｆｏｒ  ｆａｓｔ  ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＡＣＭ  ＳＩＧＣＯＭＭ’９７，  ｐｐ．３−１４，  １９９７、を参照）。この格納方法は、３２個のトライレベルのそれぞれに対して１回のメモリアクセスを実行するのではなく、３個だけのレベルでプレフィクス木（実質的にはトライ）を探索することによって、（メモリ利用率を犠牲にして）メモリアクセス数を低減する。プレフィクス木構造では、あるレベルの探索においてはいくつかのビットパターンしか可能性がない。そのため、Ｄｅｇｅｒｍａｒｋ  ｅｔ  ａｌ．は、データ圧縮法を利用することを可能にしている。彼らの例では利益はやや限定されているが（彼らは実質的に１６ビットのビットベクトルを１０ビットだけで格納することを可能にしているが、これは、データ構造全体の１つのコンポーネントに対してのみである）、彼らの圧縮アプローチは注目すべきものである。このアドレス格納方法は、効率的な更新をサポートするようには設計されていない。
【００１５】
Ｗａｌｄｖｏｇｅｌ  ｅｔ  ａｌ．（Ｍ．  Ｗａｌｄｖｏｇｅｌ，  Ｇ．  Ｖａｒｇｈｅｓｅ，  Ｊ．  Ｔｕｒｎｅｒ，  ａｎｄ  Ｂ．  Ｐｌａｔｔｎｅｒ，  ”Ｓｃａｌａｂｌｅ  ｈｉｇｈ  ｓｐｅｅｄ  ＩＰ  ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＡＣＭ  ＳＩＧＣＯＭＭ’９７，  ｐｐ．２５−３６，  １９９７、を参照）には、トライ構造を探索するためのもう１つのアプローチが記載されている。彼らのアプローチは、トライのルートから出発して下方に進むのではなく、中間レベルから出発し、そこに見出した情報に依存して上方または下方に進む。１つのレベルはハッシュ法により高速に探索される。トライ内にあるノードのみが格納される。１つのレベルが探索されて一致がない場合、より短いプレフィクスしか可能性がないことがわかる。他方、ハッシュ表におけるヒットは、最長一致プレフィクスが見つかったこと、または、さらに長いプレフィクスを求めてさらに深く探索すべきことのいずれかを意味する。しかし、重要なアイデアは、必ずしもトライのあらゆるレベルを探索する必要がないことである。このアプローチは極めてスケーラブルであり、ｂビットのプレフィクスに対してｌｏｇ（ｂ）レベルの探索しか必要としない。良好なハッシュ関数（高速に計算可能であり、さらに、ノード間に一様分布可能なもの）の選択は、ここでは説明しないが、重要な問題である。また、この構造は、事前計算を非常に利用し、効率的な更新をサポートしない。しかし、このアプローチは、Ｐａｒｔｒｉｄｇｅ  ｅｔ  ａｌ．によって設計された特定のＩＰルータで使用されている（Ｃ．  Ｐａｒｔｒｉｄｇｅ，  Ｐ．  Ｐ．  Ｃａｒｖｅｙ，  Ｅ．  Ｂｕｒｇｅｓｓ，  Ｉ．  Ｃａｓｔｉｎｅｙｒａ，  Ｔ．  Ｃｌａｒｋｅ，  Ｌ．  Ｇｒａｈａｍ，  Ｍ．  Ｈａｔｈａｗａｙ，  Ｐ．  Ｈｅｒｍａｎ，  Ａ．  Ｋｉｎｇ，  Ｓ．  Ｋｏｈａｌｍｉ，  Ｔ．  Ｍａ，  Ｊ．  Ｍｃａｌｌｅｎ，  Ｔ．  Ｍｅｎｄｅｚ，  Ｗ．  Ｃ．  Ｍｉｌｌｉｋｅｎ，  Ｒ．  Ｐｅｔｔｙｊｏｈｎ，  Ｊ．  Ｒｏｋｏｓｚ，  Ｊ．  Ｓｅｅｇｅｒ，  Ｍ．  Ｓｏｌｌｉｎｓ，  Ｓ．  Ｓｔｏｒｃｈ，  Ｂ．  Ｔｏｂｅｒ，  Ｇ．  Ｄ．  Ｔｒｏｘｅｌ，  Ｄ．  Ｗａｉｔｚｍａｎ，  ａｎｄ  Ｓ．  Ｗｉｎｔｅｒｂｌｅ，  ”Ａ  ５０−Ｇｂ／ｓ  ＩＰ  ｒｏｕｔｅｒ”，  ＩＥＥＥ／ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｎｅｔｗｏｒｋｉｎｇ，  ｖｏｌ．６，  ｎｏ．３，  ｐｐ．２３７−２４８，  Ｊｕｎｅ  １９９８、を参照）。
【００１６】
Ｎｉｌｓｓｏｎ  ａｎｄ  Ｋａｒｌｓｓｏｎは、二分トライのｉ個の完全なレベルを次数２１の単一のノードで置換するパトリシアトライの変形を利用している（Ｓ．  Ｎｉｌｓｓｏｎ  ａｎｄ  Ｇ．  Ｋａｒｌｓｓｏｎ，  ”Ｆａｓｔ  ａｄｄｒｅｓｓ  ｌｏｏｋｕｐ  ｆｏｒ  Ｉｎｔｅｒｎｅｔ  ｒｏｕｔｅｒｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ＩＥＥＥ  Ｂｒｏａｄｂａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ９８，  Ａｐｒｉｌ  １９９８、を参照）。このアプローチは非常に密なテーブルを生じるが、これも効率的更新をサポートするようには設計されていない。トライを圧縮することにより探索あたりの平均メモリアクセス数を低減するもう１つのアプローチは、Ｔｚｅｎｇ（Ｈ．  Ｈ．−Ｙ．  Ｔｚｅｎｇ，  ”Ｌｏｎｇｅｓｔ  ｐｒｅｆｉｘ  ｓｅａｒｃｈ  ｕｓｉｎｇ  ｃｏｍｐｒｅｓｓｅｓ  ｔｒｅｅｓ”，  ｉｎ  ＧＬＯＢＥ−ＣＯＭ’９８，  Ｇｌｏｂａｌ  Ｉｎｔｅｒｎｅｔ  Ｍｉｎｉ  Ｃｏｎｆｅｒｅｎｃｅ，  ｐｐ．８８−９３，  Ｎｏｖｅｍｂｅｒ  １９９８、を参照）に記載されている。
【００１７】
Ｌａｍｐｓｏｎ  ｅｔ  ａｌ．は、ＬＭＰ問題を二分探索の変形と見なすことにより、ＬＭＰ問題へのかなり異なるアプローチを提案している（Ｂ．  Ｌａｍｐｓｏｎ，  Ｖ．  Ｓｒｉｎｉｖａｓａｎ，  ａｎｄ  Ｇ．  Ｖａｒｇｈｅｓｅ，  ”ＩＰ  ｌｏｏｋｕｐｓ  ｕｓｉｎｇ  ｍｕｌｔｉｗａｙ  ａｎｄ  ｍｕｌｔｉｃｏｌｕｍｎ  ｓｅａｒｃｈ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＩＥＥＥ  ＩＮＦＯＣＯＭ’９８，  ｐｐ．１２４８−１２５６，  １９９８、を参照）。プレフィクスはＩＰアドレスの範囲を表すため、プレフィクスは、２個のＩＰアドレス、すなわち、その範囲の最小値及び最大値によって表すことができる。ｐ個のプレフィクスに対して（高々）２ｐ個の境界アドレスをソートすることによって、実質的に、アドレスのバケット（バケット内の各アドレスは同じ次ホップを有する）を定義する。このアプローチは極めてメモリ効率が良いが、挿入及び削除は比較的非効率的なオペレーションである。
【００１８】
Ｓｒｉｎｉｖａｓａｎ  ａｎｄ  Ｖａｒｇｈｅｓｅは、周知のプレフィクス拡張法を活用している。これは、メモリ必要量を増大させフォワーディングテーブルの更新を困難にする可能性があるという犠牲のもとで、一般的な探索におけるメモリアクセス数を低減する（Ｖ．  Ｓｒｉｎｉｖａｓａｎ  ａｎｄ  Ｇ．  Ｖａｒｇｈｅｓｅ，  ”Ｆａｓｔｅｒ  ＩＰ  ｌｏｏｋｕｐｓ  ｕｓｉｎｇ  ｃｏｎｔｒｏｌｌｅｄ  ｐｒｅｆｉｘ  ｅｘｐａｎｓｉｏｎ”，  ｉｎ  ＡＣＭ  ＳＩＧＭＥＴＲＩＣＳ’９８，  ｐｐ．１−１０，  Ｊｕｎｅ  １９９８、を参照）。この論文の主要な寄与は、メモリ利用率を最小にする探索法を与える動的計画法に基づく形式的アプローチの記述である。プレフィクス拡張に基づく同様の方式が、Ｇｕｐｔａ  ｅｔ  ａｌ．（Ｐ．  Ｇｕｐｔａ，  Ｓ．  Ｌｉｎ，  ａｎｄ  Ｎ．  ＭｃＫｅｏｗｎ，  ”Ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ  ｉｎ  ｈａｒｄｗａｒｅ  ａｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ  ｓｐｅｅｄｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＩＥＥＥ  ＩＮＦＯＣＯＭ’９８，  ｐｐ．１２４０−１２４７，  １９９８、を参照）に記載されている。しかし、彼らのアプローチは、最適性よりも、提案したハードウェア実装に焦点を置いている。
【００１９】
以上説明した従来のアプローチは、主にルックアップ速度を最適化するように設計されている。これらのアプローチとは異なり、ＤＰトライ（ＤＰ−Ｔｒｉｅ）に関するＤｏｅｒｉｎｇｅｒ  ｅｔ  ａｌ．の研究は、ルックアップ速度とともに、フォワーディングテーブル更新速度も最適化しようとしている（Ｗ．  Ｄｏｅｒｉｎｇｅｒ，  Ｇ．  Ｋａｒｊｏｔｈ，  ａｎｄ  Ｍ．  Ｎａｓｓｅｈｉ，  ”Ｒｏｕｔｉｎｇ  ｏｎ  ｌｏｇｅｓｔ−ｍａｔｃｈｉｎｇ  ｐｒｅｆｉｘｅｓ”，  ＩＥＥＥ／ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｎｅｔｗｏｒｋｉｎｇ，  ｖｏｌ．４，  ｎｏ．１，  ｐｐ．８６−９７，  Ｆｅｂｒｕａｒｙ  １９９６、を参照）。彼らのアプローチはパトリシアトライの変形であり、探索とともに、効率的な挿入及び削除のアルゴリズムを定義したものである。注意すべき点であるが、フォワードテーブルによって定期的にアクセスされる最新のルーティングテーブルを維持することによって、ルックアップ速度に重きを置くアプローチを補完するために、ＤＰトライのようなより動的な構造を使用することができる。
【００２０】
【発明が解決しようとする課題】
ますます拡大するアプリケーション（特にネットワーキングアプリケーション）の需要に適応するために、アドレスに関するプレフィクスを格納するための、少なくとも以下の基準を満たす構造及び方法が要求される。
・効率的でスケーラブルなメモリ使用；
・その構造は、効率的で単純な挿入、削除、及び探索オペレーションをサポートすること；
・その構造は、パイプライン化ハードウェア実装をサポートすること。
【００２１】
【課題を解決するための手段】
従来技術における課題を解決するため、本発明の目的は、アドレスに関するプレフィクスを格納する方法を提供することである。本発明のもう１つの目的は、ネットワーキングシステムにおいてネットワークアドレスに関するプレフィクスを格納する方法を提供することである。本発明のもう１つの目的は、効率的にアドレスに関するプレフィクスを格納するネットワーキングシステムを提供することである。本発明のさらにもう１つの目的は、ネットワーキングシステムにおけるルータに関連するコンピュータが、アドレスに関するプレフィクスを効率的に格納することを可能にするコンピュータプログラム製品を提供することである。
【００２２】
本発明の目的を実現するため、アドレスのセットに関するプレフィクスのセットを格納する方法が提供される。この方法は、二分トライ方式でプレフィクスを格納する。前記二分トライ内の各ノードは、前記プレフィクスのうちの少なくとも１つに関連づけられ、前記二分トライ内のいずれのノードも空でない。
【００２３】
好ましくは、第１のプレフィクスは、ルートノードを割り当て、該ルートノードに該プレフィクスを置くことによって、空トライに挿入される。
【００２４】
好ましくは、第１のプレフィクス以外のプレフィクス（ｋビットからなり、ｂ０，ｂ１，．．．，ｂｋ−１の表示を有し、ｋは０より大きい整数である）は、以下のプロセスを用いて挿入される。
・前記トライのルートノードをカレントノードに指定し、ｂｎ＝ｂ０と置き、前記プレフィクスをカレントプレフィクスとして指定するステップ；
・カレントノードに既にカレントプレフィクスが格納されている場合には挿入を終了するステップ；
・ｂｎ＝０の場合にカレントノードの左の子を検査し、ｂｎ＝１の場合にカレントノードの右の子を検査するステップ；
・新たなノードを割り当て、左の子及び右の子のいずれかが存在しない場合にカレントプレフィクスを入れ、この新たなノードをカレントノードに指定するステップ；
・ｎ＝ｎ＋１の代入を行うステップ；
・ｎ＝ｋになるまで繰り返すステップ；及び
・カレントノードに以前に格納されたプレフィクスをカレントプレフィクスで置き換え、この以前に格納されたプレフィクスをカレントプレフィクスに指定し、上記ステップを繰り返すステップ。
【００２５】
好ましくは、トライは、アドレス（ｋビットからなり、ｂ０，ｂ１，．．．，ｂｋ−１の表示を有し、ｋは０より大きい整数である）のＬＭＰを求めて、以下のプロセスを用いて探索される。
・ルートノードが一致プレフィクスを有する場合、ルートノードをカレントノード及びＬＭＰノードに指定し、ｂｎ＝ｂ０と置くステップ；
・カレントノードをＬＭＰノードに指定し、カレントノードが一致プレフィクスを有しかつ当該一致プレフィクスがＬＭＰノードより長い場合、このＬＭＰノードを下方に移動するステップ；
・ｂｎ＝０の場合にカレントノードの左の子をカレントノードに指定し、ｂｎ＝１の場合にカレントノードの右の子をカレントノードに指定するステップ；
・ｎ＝ｎ＋１とするステップ；
・カレントノードがトライの最低レベルになるまで上記ステップを繰り返すステップ；及び
・最低のトライに対応するプレフィクスが一致する場合に該プレフィクスをＬＭＰとして選択するステップ。
【００２６】
好ましくは、アドレスに対応するプレフィクスは、以下のプロセスを用いて前記トライにおいて削除される。
・前記プレフィクスに対応する一致ノードを探索するステップ；
・前記一致ノードが葉ノードである場合に前記一致ノードを削除してプロセスを終了するステップ；
・前記一致ノードが葉ノードでない場合、前記一致ノードを削除して前記一致ノードの一方の子を上方に移動し、当該一方の子を削除するステップ；及び
・葉ノードが削除されるまで上記ステップを繰り返すステップ。
【００２７】
好ましくは、最悪の場合の探索における深さを最小にするために、トライは平衡化される。
【００２８】
本発明のもう１つの特徴によれば、アドレスが格納された単純トライを、すべてのノードがアドレスを表す深さ最適サブトライに変換する方法が提供される。この方法は以下のステップを有する。
・前記単純トライで占有ノードを有する最低レベルを見出し、該最低レベルをｉ（ｉは整数）とするステップ；
・ｉ−１に対応するレベルにおける各ノードを検査するステップ；
・レベルｉ−１に空ノードがある場合、該空ノードの深いほうのサブトライのボトムからプレフィクスを上方に移動するステップ；及び
・ルートノードに到達するまで上記の併合を続けるステップ。
【００２９】
本発明のさらにもう１つの特徴によれば、アドレスが格納された単純トライ（該単純トライ内の各ノードを訪れる確率は既知）を、探索あたりの期待ステップ数が最小である探索最適トライに変換する方法が提供される。この方法は、動的計画法を使用し、以下のステップを有する。
・ボトムアッププロセスを用いて各ノードαに対して配列Ａαを計算するステップ。ただし、αをルートとするサブトライからｉ個のノードが昇格すると仮定してＡα［ｉ］は最小期待探索ステップ数を保持し、
Ａα［ｉ］＝ｆ（Ａβ，Ａγ，Ｐβ，Ｐγ）
であり、β及びγはαの左及び右の子であり、Ｐβ及びＰγはαが既に訪れられたと仮定した場合に探索中にβ及びγが訪れられる確率を表す；
・各Ａα［ｉ］に対応する最適サブトライを生成するためにβ及びγから昇格させなければならないプレフィクス数を各Ａα［ｉ］に関連づけるステップ；
・ルートから再帰的にトップダウンに、子ノードに対してプレフィクスを昇格させる要求を発行するように操作するステップ。ルートノードは、プレフィクスを保持していない場合に１個のプレフィクスを要求し、プレフィクスを保持している場合に０個のプレフィクスを要求し、該要求は、配列Ａ及び該配列Ａに関連づけられたプレフィクス数に基づく。
【００３０】
好ましくは、格納されたプレフィクスはインターネットアドレスに関連し、前記トライはＩＰルータにある。
【００３１】
本発明のさらにもう１つの特徴によれば、複数のルータを有するネットワーキングシステムが提供される。各ルータはアドレス記憶領域を有し、各アドレス記憶領域には、前記ネットワーキングシステムに対応するネットワークアドレスに関するプレフィクスのセットが二分トライの形式で格納される。前記二分トライは複数のノードを有し、各ノードは前記ネットワークアドレスのうちの少なくとも１つのプレフィクスに関連づけられ、前記二分トライ内のいずれのノードも空でない。
【００３２】
好ましくは、最悪の場合の探索における深さを最小にするために、二分トライは平衡化される。
【００３３】
本発明のさらにもう１つの特徴によれば、コンピュータ読み取り可能媒体を含むコンピュータプログラム製品が提供される。このプログラムは、ネットワーキングシステムに関連する１つ以上のコンピュータが、該ネットワーキングシステム内の各ルータに二分トライ方式でアドレスのセットを格納することを可能にする。前記二分トライ内の各ノードには、前記アドレスのうちの少なくとも１つのプレフィクスが関連づけられ、前記二分トライ内のいずれのノードも空でない。
【００３４】
好ましくは、前記コンピュータプログラム製品において、最悪の場合の探索における深さを最小にするために、二分トライは平衡化される。
【００３５】
本発明のさらにもう１つの特徴によれば、二分トライ方式でアドレスのセットを格納するシステムが提供される。前記二分トライ内の各ノードには、前記アドレスのうちの少なくとも１つのプレフィクスが関連づけられる。前記システムはパイプラインを有し、該パイプラインは複数の段を有し、該複数の段のうちの各段は、前記二分トライ内の１つのレベルに対応し、該段は本質的に、メモリコンポーネントと、ラッチのバンクと、単純なロジックとからなり、前記ラッチのバンクは、１個のプレフィクスと、１個のデスティネーションＩＰアドレスと、適当なノードを指す１個のポインタと、対応する段のタスクを指示する命令と、該命令の状態に関する情報を含むステートとを格納する。
【００３６】
好ましくは、前記パイプラインの各段は、入力及び出力の情報を保持するラッチと、１つのレベルにおけるノードに対応する情報を含むメモリと、未使用のノードアドレスへのポインタを含むスタックと、コンパレータとを有する。
【００３７】
【発明の実施の形態】
設計目標に関しては、本発明のアプローチはＤｏｅｒｉｎｇｅｒ  ｅｔ  ａｌ．のＤＰトライと多くの共通点を有するが、以下のようないくつかの注目すべき相違点がある。
・探索、挿入、及び削除のアルゴリズムは、ＤＰトライのものよりもかなり単純である。
・本発明におけるノードは、ＤＰトライノードに比べて比較的単純である。各ＤＰトライノードは、他のノードへの３個のポインタ、２個のプレフィクス、及び、０からＩＰアドレス内のビット数までの範囲の整数を表すことができなければならない１個のインデックス値とを必要とする。本発明におけるノードは、１個のプレフィクスと、他のノードへの２個のポインタを含む。
・ＤＰトライは一般に、プレフィクス数より多くのノードを有する。これらの「オーバーヘッド」ノードは、テーブルを探索するのに必要な情報を格納する。本発明にはオーバーヘッドノードはない。
【００３８】
ＤＰトライの構造は、テーブル内のプレフィクスのみに依存し、プレフィクスの挿入及び削除の順序には依存しない。本発明で使用されるトライの構造は一般に、挿入及び削除の順序に依存する。
【００３９】
直観的には、本発明は、トライ法の変形である。本発明は、すべてのノードが１個のプレフィクスに関連づけられるまで、トライの上方に向かってプレフィクスを移動することによって、テーブルエントリに関連づけられていないノードを消去する。このようなアプローチは、好ましい効果を有する。第１に、このようなアプローチは、メモリ使用量を低減する。第２に、このようなアプローチは、トライをより「浅く」することにより、探索あたりのメモリルックアップを少なくする可能性がある。
【００４０】
例として、図１に、深さ最適ｂｏｎｓａｉ（セクションＩＶＣ．１で詳述する）と、ｍａｅ−ｅａｓｔフォワーディングテーブル（セクションＩＶＤで詳述する）に対する、トライプレフィクス分布、トライノード分布、及びプレフィクス／ノード分布を示す。トライのレベルは０（ルート）から３２（プレフィクスの最大長）までラベルづけられている。本発明は、必要なノード数を大幅に低減し、さらに、プレフィクスはトライの上方に移動することにより、探索あたりのステップ数が低減される。
【００４１】
［ＩＶＡ．ｂｏｎｓａｉ］
本発明の好ましい実施例はｂｏｎｓａｉと名づけられる。ｂｏｎｓａｉは、インターネットアドレスに関するプレフィクスを格納する。ｂｏｎｓａｉは二分トライであり、各ノードは対応するプレフィクスを有する。挿入、探索、及び削除のオペレーションについて、いくつかの実装の問題とともに、以下で詳細に説明する。ｂｏｎｓａｉは、ここで説明するいくつかの不変表明を有する。以下は、コレラの不変表明が挿入及び削除のオペレーションのもとで成り立つことを示す証明である。
【００４２】
補助定理１（ｂｏｎｓａｉ不変表明）
ｂｏｎｓａｉは、以下の性質を有する。
１．ｂｏｎｓａｉは、ルーティングテーブルエントリを表すノードのみを含むという意味で、「パックされた」トライである；
２．ＩＰアドレスに一致する可能性のあるすべてのプレフィクスは、一般的なトライ方式でｂｏｎｓａｉを降下することによって、すなわち、ＩＰアドレスの第ｉビットを用いてｂｏｎｓａｉのレベルｉでとられる方向を選択することによって、求められる。
【００４３】
［ＩＶＡ．１  挿入］
第１のプレフィクスが空トライに挿入されると、ルートノードが割り当てられ、そのノードのプレフィクスポインタが適当に設定される。その後の挿入は、最初の空き位置が見つかるまで通常の方法でトライ構造を降下して行われる。２進表示ｂ０，ｂ１，．．．，ｂｋ−１を有するｋビットのプレフィクスが挿入される場合、アルゴリズムはルートノードから出発する。ｂ０＝０の場合、ルートノードの左の子が検査される。そうでない場合、右の子が検査される。左（右）の子が存在しない場合、１つのノードがその位置に割り当てられ、プレフィクスがそこに置かれる。左（右）の子が既に存在する場合、ビットｂ１が子ノードのコンテクストで検査される。１個のプレフィクスの１個のコピーのみがトライ内で許される。複数のコピーが挿入される場合、それはトライを降下中に発見され、現在の挿入は、トライを変更することなく停止される。図２に、プレフィクスのシーケンスが挿入された後のｂｏｎｓａｉの状態を示す。
【００４４】
しかし、すべてのプレフィクスがトライを降下して葉ノードとなるわけではない。例えば、図２に示すトライにプレフィクス０１を挿入することを考える。プレフィクス１００１１を有するノードの０−子（０−ｃｈｉｌｄ）、及び、プレフィクス０１１００を有するノードの１−子（１−ｃｈｉｌｄ）をたどった後、トライをさらに降下する方法はない。プレフィクスｘができる限りトライを降下し、既にプレフィクスｙを有するノードを見つけた場合、プレフィクスｙは追い出され、あたかもｙが挿入されていたかのように、トライをさらに降下することを可能にする。なお、挿入は、多くのプレフィクスを追い出す可能性があるが、この手続きは、最悪の場合でも、Ｏ（ｄ）回のオペレーション（ただし、ｄはトライの深さ）しか必要としない。例えば、図３に、０１プレフィクスが挿入された後のトライ例の状態を示す。０１プレフィクスは０１００プレフィクスを追い出し、０１００プレフィクスはトライを２レベル降下し、そこで葉ノードを生成する。
【００４５】
［ＩＶＡ．２  探索］
ＩＰアドレスが与えられた場合にｂｏｎｓａｉを探索することはかなり直観的である。挿入について説明した上記のセクションで述べたように、トライを通常のように降下する。降下の各ステップで、ＩＰアドレスが、格納されているプレフィクスと一致するかどうかの比較を行う。一致する場合、かつ、そのプレフィクスが前に発見した一致よりも長い場合、トライのさらに低いレベルが探索される間はそのノードへのポインタが運ばれる。トライを降下する間に１つのＩＰアドレスがいくつかのプレフィクスに一致する可能性もあるが、すべての可能な一致はその経路にある。
【００４６】
このアプローチの１つの結果は、トライの各レベルで、格納されているプレフィクスとの比較が必要となることである。このような比較は、純粋なトライ方式では必要でないものであり、一定の割合のコストが加わる。
【００４７】
図２のｂｏｎｓａｉで、ＩＰアドレス０１００００００．．．のＬＭＰを探索することを考える。ルートノードでは、プレフィクス１００１１との一致はない。０−子を訪れるが、プレフィクス０１１００との一致はない。そのノードの１−子を訪れると、プレフィクス０１００との一致があるため、このプレフィクスが記憶される。最後に、そのノードの０−子を訪れると、今度もプレフィクス０１０との一致が見つかる。しかし、この新しい一致は、前の一致よりも短い。さらにトライを降下することができないため、０１００がＬＭＰでなければならない。
【００４８】
［ＩＶＡ．３  削除］
挿入及び探索の場合と同様に、削除オペレーションでも、プレフィクスとの一致を探索してトライを降下する。削除すべきプレフィクスが葉ノードにある場合、そのプレフィクスは削除され、そのノードはトライから除去され、その親ノードの子ポインタのうちの１つの更新が必要となる。しかし、削除すべきプレフィクスが葉ではないノードに対応する場合、トライ構造を維持するように注意しなければならない。重要な点は、そのノードのサブトライ内の任意のプレフィクスが、削除されたプレフィクスを置き換える可能性があることである。置換を選択するには多くの方法があるが、本発明では、容易にパイプライン化可能なものが選択される。最終的に葉ノードに到達するまで、子ノードに対応するプレフィクスが上方に移動し、その子のうちの１つのプレフィクスと置換される。その後、その葉ノード（そのプレフィクスは親ノードに移動した）を削除することができる。このような場合、プレフィクスがトライを上方に「パーコレート（浸透）する（ｐｅｒｃｏｌａｔｅ）」とみなすことができる。なお、削除されるのは常に葉ノードである。
【００４９】
１個のノードに２個の子がある場合、左または右のいずれの子のプレフィクスを上方にパーコレートさせるかを選択する可能性がある。（ノードが１個しか子を有しない場合、選択の余地はない。）選択の余地がある場合、静的アプローチ（例えば、０−子を優先する）、または、動的なアプローチ（例えば、ランダム選択）を使用する可能性がある。
【００５０】
例えば、図３からプレフィクス０１１００を削除することを考える。このプロセス及び結果として得られるトライを図４に示す。このプロセスは、ルートノードから出発するが、プレフィクス１００１１との一致はない。次に、ルートノードの０−子を訪れると、削除すべき一致プレフィクスが見つかる。０−子または１−子のいずれかのプレフィクスをパーコレートすることができる。１−子を優先すると仮定すると、０１が上方にパーコレートする。次に、さらに０−子または１−子のいずれかのプレフィクスをパーコレートすることができる。今度は０−子を優先すると仮定すると、０１０が上方にパーコレートする。このノードは１個の子しか有しないため、０１００が上方にパーコレートする。葉ノードに到達したので、この葉ノードが削除される。
【００５１】
［ＩＶ．Ｂ  最適ｂｏｎｓａｉトライ］
ｂｏｎｓａｉオペレーションの１つの結果は、トライの構造が、挿入及び削除のオペレーションの順序に（一般的には）依存することである。例えば、図５のｂｏｎｓａｉは、図２のｂｏｎｓａｉと同じプレフィクスを含む。しかし、図５のｂｏｎｓａｉのほうが、プレフィクスの平均深さが小さい。従って、何らかの性能メトリックを最適化するようにトライを操作することが可能である。例えば、最悪の場合の探索の深さを最小にするように、トライをできるだけ平衡化することが好ましいことがある。あるいは、平均の場合の探索の深さを最小にするのが好ましい場合もある。
【００５２】
注意すべき点であるが、最悪の場合の探索を最小にすることと平均の場合の探索を最小にすることとは衝突する基準である。例えば、図６に示す２個の小さいｂｏｎｓａｉ構造を考える。すべてのＩＰアドレスに対して一様な確率を仮定すると、トライ（ａ）を探索するための期待比較数は２となる。すべての探索は正確に２回の比較を必要とするからである。トライ（ｂ）の場合、期待比較数は（５０％）（１）＋（２５％）（２）＋（２５％）（３）＝１．７５となる。
【００５３】
一様分布を仮定すると、不平衡トライのほうが、平衡トライよりも、平均の場合の探索性能は良好である。もちろん、一様分布の改定は、実際のルータでは妥当でない。しかし、確率分布が既知であるか、あるいは、推定可能（例えば、探索中にノードがアクセスされるごとに記録することによって）である場合、平均の場合の挙動を最適化するようにトライを調節することが可能である。最適ｂｏｎｓａｉの計算は、それぞれの挿入または削除のオペレーションの後には時間がかかりすぎるかもしれないが、最適化基準をより良く満たすように定期的にｂｏｎｓａｉを再構成することは合理的である。
【００５４】
以下のセクションでは、２種類の最適ｂｏｎｓａｉを計算する方法の好ましい実施例について説明する。第１の実施例は、全体の深さが最小のｂｏｎｓａｉトライを計算する欲張り法（ｇｒｅｅｄｙ  ａｌｇｏｒｉｔｈｍ）である。第２の実施例は、デスティネーションＩＰアドレスの任意の分布に基づいて、最小の期待探索ステップ数のｂｏｎｓａｉを導出する動的計画法アプローチである。
【００５５】
まず、最適化方法に関連する用語について説明する。空ノードとは、ルーティングテーブルエントリを表さないトライノードである。占有ノードは、エントリを表す。サブトライは、いくつかのレベルのノードからなり、レベルｉのノードは、そのサブトライのルートからｉホップにある。サブトライのルートはレベル０の唯一のノードである。ノードを表すのにギリシア文字を用いる。ノードαのレベルをｄαで表す。このレベルに対するルートノードは文脈から明らかなはずである。あるサブトライのルートノードがαで表される場合、これは、αをルートとするサブトライ全体を表すのにも使用することがある。この場合も、その意味は文脈から明らかなはずである。αをルートとする任意のサブトライに対して、ｗαｉで、レベルｉ以下のプレフィクスの総数を表す。ｗαｉを、αをルートとするサブトライのレベルｉの重みという。例えば、αが図２の完全トライのルートノードである場合、ｗα０＝８、ｗα１＝７、ｗα２＝５、ｗα３＝２、及び、すべてのｉ≧４に対して、ｗαｉ＝０である。βを、プレフィクス０１００のノードとすると、ｗβ０＝３、ｗβ１＝２、及び、すべてのｉ≧２に対して、ｗβｉ＝０である。サブトライが文脈から明らかなとき、サブトライを表すのにｗｉも用いられる。最後に、サブトライの深さとは、最も深いノードのレベルである。
【００５６】
［ＩＶＢ．１  深さ最適ｂｏｎｓａｉ］
ここでは欲張り法について説明する。このアルゴリズムは、単純なトライから出発して、ルーティングテーブルエントリを表さないすべてのノードを除去することによってそのトライを圧縮し、深さが最小で平均ノード（プレフィクス）レベルが最小のｂｏｎｓａｉを生成する。この好ましい実施例を、深さ最適ｂｏｎｓａｉと呼ぶ。深さ最適サブトライとは、同じプレフィクスのセットを有する他のいかなるサブトライも、任意のｉに対して、より小さいｗｉを有しないようなサブトライである。
【００５７】
このアルゴリズムは、ボトムアップで動作する。空ノード及び占有ノードの両方を含む、ルーティングテーブルの基本トライ構造から、深さ最適サブトライへと再帰的に併合される。占有ノードがあるトライの最低レベルが見出される。これをレベルｉとする。（このレベルに見出されるすべてのノードは必ず占有ノードである。）レベルｉ−１におけるトライの各ノードを検査する。（トライ内の任意のレベルにノードが存在するためには、そのノードは占有ノードであるか、または、少なくとも１つの占有子孫を有していなければならない。）レベルｉ−１において、ノードが占有ノードである場合、サブトライの併合は不可能であるため、何のアクションもとられない。そのノードが空である場合、これは、そのサブトライのうちの１つからプレフィクスを上方に移動（昇格）させ、レベルｉ−１をルートとする深さ最適サブトライを得ることができることを意味する。図７に示すように、任意の（占有）ノードにおいて、深いほうのサブトライの最低レベルから昇格すべきものが選択される。いずれのサブトライも同じ深さである場合、いずれかのサブトライの最低レベルから１個のノードが任意に選択される。この併合プロセスは、ルートノードに到達するまで、トライのレベルを上って続けられる。
【００５８】
補助定理２（深さ最適サブトライ不変表明）
上記のアルゴリズムを使用すると、それぞれの深さ最適サブトライは以下の性質を有する。
１．サブトライ内のすべてのプレフィクスは、トライ内のサブトライルートノードの位置によって表される共通のサブストリングを有し、そのサブストリングを共有するすべてのプレフィクスはそのサブトライ内にある。
２．サブトライは、レベル重みｗｉを小さくすることができるようにプレフィクスを再配置することが不可能であるという意味で、深さ最適である。
【００５９】
証明：レベルｉ、すなわち、もとのトライ内の最も深い（占有）ノードのレベルから出発して、トライのレベルに関する帰納法を用いる。
【００６０】
レベルｉのノードαは占有ノードでなければならず、子を有することはできない。この場合、補題２の不変表明が維持されることは明らかである。次に、レベルｊをルートとするすべてのサブトライが不変表明を維持すると仮定すると、レベルｊ−１をルートとするすべてのサブトライが不変表明を維持することが示される。レベルｊ−１のノードαは、占有ノードであるか空ノードであるかのいずれかである。
【００６１】
αが占有ノードである場合、任意のｉに対してｗｉを小さくするような、αをルートとするサブトライの構造に対する変形はない。これは背理法により証明される。あるｗｉを改善するようなサブトライの再編成が存在すると仮定する。この再編成は、αに対応するプレフィクスをより低いレベルに移動することは含み得ない。そのプレフィクスは既に可能な最低レベルにあるので、これは第１のサブトライ不変表明に違反することになるからである。従って、この再編成は、αに対応するプレフィクスをそのままにして実行されなければならない。あるサブトライから別のサブトライにプレフィクスを移動することは不可能となる。サブトライのルートノードは、ネストすることができない相異なるプレフィクスを表すからである。これは、与えられた現在のプレフィクスに対して、左のサブトライまたは右のサブトライのいずれかを改善することができることを意味するが、これは、サブトライの併合が深さ最適であるという仮定に反する。
【００６２】
αが空である場合、アルゴリズムは、さらに深いサブトライの最低レベルから、αの位置をとるように、プレフィクスδを選択する。βを、αの左の深さ最適サブトライのルートとし、γを、αの右の深さ最適サブトライのルートとする。一般性を失うことなく、サブトライβがγより深いと仮定する。δを昇格させることにより、結果として得られる、αをルートとするサブトライでは、ｗα０＝１、及び、ｗβｉ−１が０より大きいようなすべてのｉに対してｗαｉ＝ｗβｉ−１＋ｗγｉ−１−１である。実際、δの昇格の結果、左サブトライでは、レベル重みｗβｉが、それぞれの０でない重みに対して１だけ低くなる。結果として得られるサブトライが深さ最適であることを証明するため、δの代わりに他のノードεを昇格させることにより、優位な（さらに深さの小さい）サブトライを得ることはできないことを示さなければならない。εはβをルートとするサブトライ内にあると仮定する。εの昇格が優位であるためには、結果として得られる左サブトライが、あるレベルｊに対してｗβｉ−１より小さいレベル重みを有していなければならない。しかし、プレフィクスの挿入はレベル重みに高々１しか加えない。従って、εのない左サブトライから出発してεを挿入した場合、レベルｊの重みがｗβｉより小さい、新しい（完全な）左サブトライが生成される。これは、左サブトライに対する深さ最適の仮定に反する。こうして、最低レベルにあるプレフィクスを昇格させること以外には、いかなるノードもサブトライを改善することはない。同様の議論が、εが右サブトライからのものであると仮定した場合にも成り立つ。
【００６３】
補題２の結果は、このアルゴリズムが、上記の意味で深さ最適なｂｏｎｓａｉトライを生成することである。また、ｂｏｎｓａｉトライ内のレベル数が最小になること、及び、ノードの平均深さが最小になることも示すことができる。
【００６４】
［ＩＶＢ．２  探索最適ｂｏｎｓａｉ］
このセクションでは、探索あたりの期待ステップ数が最小のｂｏｎｓａｉトライを計算する動的計画法の実施例について説明する。このアプローチは、デスティネーションＩＰアドレスの任意の分布を仮定する。構造は、任意の探索で各ノードを訪れる確率が既知であるように拡張された単純トライとして出発する。（例えば、ルートノードはあらゆる探索で訪れなければならないため、その確率は１に設定される。）実際には、この確率分布は時間とともに変化する可能性がある。しかし、分布は、単純トライの各探索で訪れられるノードを記録することによって、任意の所望の時間周期で容易に推定することができる。
【００６５】
動的計画法は、問題が最適な部分構造及び重なり合う部分問題の両方を示すために、ここでは有用である（Ｔ．  Ｈ．  Ｃｏｒｍｅｎ，  Ｃ．  Ｅ．  Ｌｅｉｓｅｒｓｏｎ，  ａｎｄ  Ｒ．  Ｌ．  Ｒｉｖｅｓｔ，  ”Ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ａｌｇｏｒｉｔｈｍｓ”，  ＭＩＴ  Ｐｒｅｓｓ，  １９９０、を参照）。この好ましい実施例では、単純トライの低いレベルから出発し、適当にプレフィクスを昇格させることによって上方に進む。しかし、任意のサブトライから昇格させなければならないプレフィクスの数は直ちにはわからない。従って、このアプローチは２段階を使用する。
【００６６】
第１段階では、単純トライ内の各ノードαに対して、Ａαを計算する。ｉ個のプレフィクスがこのサブトライから昇格すると仮定すると、Ａα［ｉ］は、このサブトライに対する最適（最小）の期待探索ステップ数を保持することになる。これらの配列はどのくらい大きくする必要があるであろうか。ノードは、その直接の祖先にプレフィクスを昇格させることしかできないため、ノードαは、ｄα個より多くのノードの昇格を考慮する必要はない。従って、Ａα［ｉ］の値は０≦ｉ≦ｄαの範囲にある。注意すべき点であるが、アレイ要素に対して、実現不可能な昇格の数を表す特殊な値が存在しなければならない。例えば、最初に３個のプレフィクスしか含まないサブトライから４個のプレフィクスを昇格させることは不可能である。これらのアレイの計算中に（これはボトムアッププロセスである）、最適なサブトライを生成するために左及び右の両方のサブトライから昇格させなければならないプレフィクスの数も、保持しなければならない。アレイが計算された後、最適構造を発見して対応するｂｏｎｓａｉを生成するために、第２段階がトップダウンで実行される。ルートノード（これは、いかなるプレフィクスも昇格させる必要がない）から出発して、各ノードは、いくつかのプレフィクスを昇格させる要求をその左及び右の子に対して発行し、その数に基づいて、最適なサブトライを生成する。
【００６７】
Ａ配列の計算である第１段階を考える。図８に、基本的な状況を示す。サブトライのルートノードをα、左の子をβ、右の子をγで表す。Ａαを計算するためには、Ａβ及びＡγの情報とともに、それぞれの子が訪れられる確率（ルートノードが既に訪れられたと仮定して）が必要である。それらの確率をｐβ及びｐγで表す。（なお、左及び右の両方の子が存在する場合、ｐβ＋ｐγは１に等しくなる。）
【００６８】
まず、ノードαが既にプレフィクスを含む場合を考える。Ａα［０］に対応するサブトライ構造は直ちにわかる。これは、左または右のいずれのサブトライからもノードが昇格しない場合である。Ａα［０］＝１＋ｐβＡβ［０］＋ｐγＡγ［０］となる。Ａα［１］の計算では、考慮すべき２つの可能性がある。すなわち、左から１及び右から０の昇格、または、左から０及び右から１の昇格の場合である。最良の選択は、ｐβＡβ［１］＋ｐγＡγ［０］またはｐβＡβ［０］＋ｐγＡγ［１］のいずれの値のほうが小さいかに依存する。この手続きは、Ａαの必要なすべての値が計算されるまで続けられる。一般に、０≦ｉ≦ｄαの範囲内で、
【数１】
0003570323.tif 000003
である。この場合も、最小のＡα［ｉ］を生成したｊ及びｋの値も保持しなければならない。
【００６９】
αが空の場合、プレフィクスをαに昇格させる必要があるとともに、プレフィクスをαより上に昇格させる必要もある。αから０個のプレフィクスを昇格させることでさえ、２つのサブトライのうちの一方から１個のプレフィクスの昇格を必要とする。最良の選択は、ｐβＡβ［１］＋ｐγＡγ［０］またはｐβＡβ［０］＋ｐγＡγ［１］のいずれの値のほうが小さいかに依存する。一般に、０≦ｉ≦ｄαの範囲内で、
【数２】
0003570323.tif 000004
である。
【００７０】
［ＩＶ．Ｃ  実験結果及び解析］
実験では、ＩＰＭＡ（Ｉｎｔｅｒｎｅｔ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｅａｓｕｒｅｍｅｎｔ  ａｎｄ  Ａｎａｌｙｓｉｓ）のウェブサイトで入手可能ないくつかのインターネットフォワーディングテーブル（ｈｔｔｐ：／／ｎｉｃ．ｍｅｒｉｔ．ｅｄｕ／ｉｐｍａ／のＩＰＭＡ（Ｉｎｔｅｒｎｅｔ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｅａｓｕｒｅｍｅｎｔ  ａｎｄ  Ａｎａｌｙｓｉｓ  Ｐｒｏｊｅｃｔ）を参照）を使用する。これらのフォワーディングテーブルは、毎日更新されており、ＩＰフォワーディング実験の標準になっている。ここで使用するデータは、１９９８年８月１７日からのものである。ＩＰデータグラムデスティネーションの現実的な分布をシミュレートするために、ｆｉｘ−ｗｅｓｔからの実際のデータグラムデスティネーションＩＰアドレスのトレースを使用する。このトレースは、１９９７年２月２２に記録された、２，１４６，５７３個のアドレス（５分間分）を含む。このトレースは、ＮＬＡＮＲ（Ｎａｔｉｏｎａｌ  Ｌａｂｏｒａｔｏｒｙ  ｆｏｒ  Ａｐｐｌｉｅｄ  Ｎｅｔｗｏｒｋ  Ｒｅｓｅａｒｃｈ）で入手可能である（ｈｔｔｐ：／／ｗｗｗ．ｎｌａｎｒ．ｎｅｔ／ＮＡ／のＮＬＡＮＲ（Ｎａｔｉｏｎａｌ  Ｌａｂｏｒａｔｏｒｙ  ｆｏｒ  Ａｐｐｌｉｅｄ  Ｎｅｔｗｏｒｋ  Ｒｅｓｅａｒｃｈ）を参照）。なお、このトレースは、ＩＰＭＡページで入手可能なフォワーディングテーブルを有するルータから集められたものではない。
【００７１】
ｂｏｎｓａｉの次の４つのメトリックを考える。
・深さ；
・ノード／プレフィクスの平均レベル；
・デスティネーションＩＰアドレスの一様分布を仮定した場合の、探索あたりの期待ステップ（すなわち比較）数；
・ｆｉｘ−ｗｅｓｔトレースによって規定されるデスティネーションＩＰアドレスの分布を仮定した場合の、探索あたりの期待ステップ数。
【００７２】
表２に、５個の地点のルーティングテーブルのいくつかの記述を与える。各サイトごとに、ｂｏｎｓａｉ内のノード数に等しい、テーブル内のプレフィクスの数がリストされている。また、与えられたフォワーディングテーブルに関して、ｆｉｘ−ｗｅｓｔのヒット率及びミス率もリストされている。上述したように、トレースはこれらのフォワーディングテーブルに関連しておらず、かなりの割合のミスの確率が生じている。
【００７３】
表２は、１９９８年８月１７日の、５つの地点におけるルーティングテーブルのメトリックである。１９９７年２月２２日正午ごろのｆｉｘ−ｗｅｓｔからのデスティネーションＩＰアドレスの５分間のヒット率及びミス率を示す。トレースは２，１４６，５７３個のＩＰデータグラムを含む。
【表２】
0003570323.tif 000005
【００７４】
表３は、プレフィクスがランダム順序で挿入された場合の１００個のｂｏｎｓａｉの情報を含む。各メトリックごとに、最小値、平均値、及び最大値を示す。すべてのルータでかなり一貫性のある挙動が注目される。ｐａｉｘの数が一般にやや小さいが、これはｐａｉｘが保持しているプレフィクスが少ないことによる。ｂｏｎｓａｉは一般に、深さは約２４であるが、ノードの平均レベルは、大きいテーブルでは約１８である。また、探索あたりの平均比較数は、ｆｉｘ−ｗｅｓｔトレースの場合よりも一様分布の場合のほうがずっと小さい。この理由は、一様分布は、大きい割合のデスティネーションアドレスがｂｏｎｓａｉの非常に疎な領域にあることを仮定しており、そこでは可能な一致がほとんどないためである。この現象についてはこのセクションで後で詳細に説明する。
【００７５】
表３は、各地点の１００個のｂｏｎｓａｉの統計であり、プレフィクスはランダム順序で挿入された。
【表３】
0003570323.tif 000006
【００７６】
深さ最適ｂｏｎｓａｉに対するメトリックを表４にリストする。すべての場合で、深さ最適ｂｏｎｓａｉは、１００個のランダムなｂｏｎｓａｉのうちの最良のものよりも浅い。また、深さ最適ｂｏｎｓａｉは、最小の平均ノードレベルを有する。興味深い点であるが、深さ最適ｂｏｎｓａｉは、探索あたりの比較数に関しては平均ランダムｂｏｎｓａｉより悪い。直観的には、これが起こる理由は、トライの深いノードは、深さを加える可能性があるが、トライの情報のノードよりも探索中に訪れられる可能性が低いためである。
【００７７】
表４は、各地点の深さ最適ｂｏｎｓａｉの統計である。
【表４】
0003570323.tif 000007
【００７８】
表５は、探索最適ｂｏｎｓａｉのデータを含む。この最適化では、深さ及び平均ノードレベルはランダムｂｏｎｓａｉの場合より悪いが、探索あたりの比較数に関しては実質的な利益がある。この場合も、これは、深さと探索時間の間のトレードオフを示す。
【００７９】
表５は、各地点の探索最適ｂｏｎｓａｉ（トレースの分布に対する）の統計である。
【表５】
0003570323.tif 000008
【００８０】
相異なるｂｏｎｓａｉアプローチの間の直接の比較を容易にするため、深さ（図９）、平均ノードレベル（図１０）、及び、ｆｉｘ−ｗｅｓｔトレースに対する探索あたりの平均比較数（図１１）の棒グラフを添付している。注意すべき点であるが、深さ最適ｂｏｎｓａｉは、深さ及び平均ノードレベルの両方に関して、他のアプローチに比べて注意程度であるが一貫性のある効果を有する。ランダム挿入と比較して深さの改善は４％〜１１％の範囲であるが、平均ノードレベルの改善は１％〜２％の範囲である。また、注意すべき点であるが、探索最適ｂｏｎｓａｉは、これらのメトリックに関しては、平均ランダムｂｏｎｓａｉより悪い。
【００８１】
しかし、探索あたり平均比較数に関するデータは、探索最適ｂｏｎｓａｉの利点を示している。平均ランダムｂｏｎｓａｉと比較しての改善は９％〜１３％の範囲である。また、注意すべき点であるが、深さ最適ｂｏｎｓａｉは、このメトリックに関しては、ｍａｅ−ｗｅｓｔフォワーディングテーブルの場合のランダムｂｏｎｓａｉよりはわずかに性能が良いものの、比較的性能が悪い。
【００８２】
一般に、この結果は、プレフィクスのランダム挿入は、考慮されるすべてのメトリックに関して、適当な性能を提供することを示唆している。
【００８３】
これらの実験結果の解釈に関していくつかの注意事項がある。第１に、トレースは、検査されたルータからとったものではなく、完全に別の地点からのものである。従って、このトレースが現実的な分布を提供する程度については議論の余地がある。しかし、性能に対する効果を考えるときに、ミスは必ずしも問題とはならない。ミスでさえも完全ｂｏｎｓａｉ探索を必要とするからである。すなわち、ミスは必ずしも性能と無関係ではない。
【００８４】
もう１つの問題は、性能に影響を及ぼす可能性のあるＩＰアドレスの割当てに関するいくつかの特殊事項がある。例えば、
・フォワーディングテーブルは、クラスＤのＩＰアドレス（これは「１１１０」で始まり、マルチキャストに使用される）や、クラスＥのＩＰアドレス（これは「１１１１０」で始まり、将来の使用のために予約されている）に対するエントリを有しない。
・ｆｉｘ−ｗｅｓｔトレースはクラスＥアドレスを有しないが、２５，７１９個（約１．２％）のデスティネーションアドレスはクラスＤである。
・一様分布は、クラスＤ及びクラスＥのアドレスが、それぞれ約６．３％及び３．１％の頻度で可能であることを仮定する。
ｂｏｎｓａｉは、クラスＤやクラスＥのアドレスに対するプレフィクスを含まないため、「１１１０」及び「１１１１０」のロケーション以下のノードを有することはない。実際、クラスＤまたはＥのアドレスのみが、「１１１」で始まることができる。従って、クラスＤ及びＥの探索は平均よりも高速である（ｂｏｎｓａｉの高々３レベルが探索されることになる）。同様の効果は、アドレス空間の他の領域にも見られる。いずれのフォワーディングテーブルも、「１１１」や「０１０」で始まるプレフィクスを含まず、各テーブルは、「０１１」で始まるプレフィクスを１個しか含まない。（「０１１」で始まるエントリはすべての場合に１２７／２５５であり、これはループバックテストのために予約されている。）
【００８５】
プレフィクス及びＩＰデスティネーションアドレス分布の重要性に照らして、実際のフォワーディングテーブル及び実際のトレースを調べることは価値がある。図１２に、プレフィクスの第１バイトのドット１０進表記法（ｄｏｔｔｅｄ  ｄｅｃｉｍａｌ  ｎｏｔａｔｉｏｎ）に基づく、ｍａｅ−ｅａｓｔフォワーディングテーブルのプレフィクスの分布を示す。線形スケール及び対数スケールの両方を示す。このデータは、クラスＣプレフィクスが他に比べてずっと一般的であることを示している。クラスＡアドレスはほとんどないが、クラスＢアドレスはある範囲内でかなり均一に分布している。この場合も、これらの分布は、トライ方式にとって重要な結果を有する。例えば、ｂｏｎｓａｉの左側は右側に比べて非常に疎に埋められることになる。また、同様の議論は、トライの下方でも成り立つ。
【００８６】
図１３に、ｆｉｘ−ｗｅｓｔトレースのデスティネーションＩＰアドレスの第１バイトの分布を示す。このデータも、一様分布はトラフィックの良好なモデルではないことを示している。クラスＢ及びクラスＣのトラフィックはクラスＡよりもずっと大きい。実際、２つのバイト（１０進表記で１２８及び１９２）は、すべてのデスティネーションアドレスの３分の１より多くを占める。
【００８７】
［ＩＶＤ．パイプライン実装］
ここまでの議論は暗黙のうちにソフトウェア実装に集中していたが、ｂｏｎｓａｉの好ましい実施例は、専用ハードウェア実装にも向いている。スループットは、メモリアクセスあたり１探索程度にまで高くすることができる。挿入及び削除は、パイプラインの２クロックサイクル以下のストールで実行可能である。このセクションでは、ｂｏｎｓａｉのパイプライン実装の好ましい実施例について説明する。注意すべき点であるが、パイプライン化方法は、ｂｏｎｓａｉには限定されない。多くのＬＭＰ探索アプローチも同様にしてパイプライン化することができる。Ｇｕｐｔａ  ｅｔ  ａｌ．には１つの例が記載されている（しかしこれらのアプローチの多くの場合、挿入及び削除には問題がある。Ｐ．  Ｇｕｐｔａ，  Ｓ．  Ｌｉｎ，  ａｎｄ  Ｎ．  ＭｃＫｅｏｗｎ，  ”Ｒｏｕｔｉｎｇ  ｌｏｏｋｕｐｓ  ｉｎ  ｈａｒｄｗａｒｅ  ａｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ  ｓｐｅｅｄｓ”，  ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ＩＥＥＥ  ＩＮＦＯＣＯＭ’９８，  ｐｐ．１２４０−１２４７，  １９９８、を参照）。
【００８８】
図１４において、ｂｏｎｓａｉの抽象的パイプラインを考える。１個のパイプライン段は、メモリコンポーネント、何らかの単純なロジック（論理回路）、及びラッチのバンクからなる。最も単純な実装では、各段でｂｏｎｓａｉの１レベルを処理し、深さｄのｂｏｎｓａｉではｄ個の段が必要となる。（段数を少なくするには、深さ最適ｂｏｎｓａｉを構成することが有効となり得る。）段０への入力で、探索の場合にはデスティネーションＩＰアドレスが入力され、挿入または削除の場合にはプレフィクスが入力される。パイプラインが探索、挿入、及び削除を区別することを可能にする小さい命令コードも送られる。
【００８９】
この説明のために、このパイプラインはｂｏｎｓａｉの各レベルごとに１個の段を有すると仮定する。各段の前のラッチは、以下の情報を格納することになる。
・挿入及び削除の場合に入力として、また、探索の場合に出力として使用されるプレフィクスＰ。
・探索の場合に入力として使用されるデスティネーションＩＰアドレスＤ。
・現在のレベルの適当なノードを指すポインタＲ。
・パイプラインのこの段が探索、挿入、または削除のいずれを実行しているのかを示す命令Ｉ。
・現在の命令の状態に関する情報を含むステートＳ。例えば、探索中には、前の一致見つかっているかどうかを知る必要があり、削除中には、この時点で削除ではなくプレフィクスを昇格させている可能性もある。
【００９０】
パイプラインの各段の基本ハードウェアは以下のものを含む。
・上記のような、関連する入力及び出力の情報を保持するラッチ。
・そのレベルのノードに関する情報を含むメモリ。ノードは固定サイズであり、１個のプレフィクス及び２個のポインタを含む。ノードへの書き込みの際には、ノードのプレフィクスへの書き込みまたは２個の子ポインタのうちの一方への書き込みのみが可能である。
・後続の段の未使用ノードアドレスへのポインタを含むスタック（またはその他の構造体）。例えば、挿入中には、ノードは子のためにメモリを割り当てる必要が生じることがある。同様に、削除中には、ノードは子のためのメモリを解放しなければならないことがある。メモリ管理は、ノードが固定サイズであることにより極めて単純である。
・例えばプレフィクス一致をチェックするためあるいはプレフィクス長を比較するためのコンパレータ。
・マルチプレクサや論理ゲートのような、さまざまな基本構成ブロック。
【００９１】
注意すべき点であるが、パイプラインにおける後続の命令は独立であるが、場合によってはパイプラインをストールさせる必要がある。これは、挿入または削除中にのみ起こり得るが、２クロックサイクルより長いストールは決して生じない。
【００９２】
パイプライン設計の完全な記述はここでは不適当であるが、設計に必要なものに対する感じをつかむために、いくつかの特定の場合に必要なハードウェアについて調べる。図１５に、探索中に可能性のあるオペレーションの詳細な例を示す。この時点で、関連するノードが段ｉに存在し、もう１つの関連するノードが段ｉ＋１に存在すると仮定する。デスティネーションＩＰアドレスが段ｉのプレフィクスに一致するかどうかがチェックされる。プレフィクスが一致する場合、かつ、これがいずれの前の一致よりも長い場合、次のノードの適当なポインタとともに次の段に送られる。
【００９３】
挿入されるプレフィクスが最初の空ノードに入るときに、挿入の簡単な場合が起こる。これは、パイプラインにおける１ストールで実行可能である。このストールは、新しい葉ノードの親に新しいポインタを書き込むために必要となる。図１６にこの場合を示す。まず、メモリが読み出され、適当な子ノードがないことがわかる。新しいノードに対するポインタがポインタスタックに割り当てられる。このポインタは、（第２のクロックサイクル中に）メモリに書き戻され、また、挿入されるべきプレフィクスとともに後続の段に送られる。もう１つの場合は、挿入により別のプレフィクスが追い出されるときに生じる。プレフィクスが段ｉで追い出される場合、これは段ｉにおける２回のメモリアクセスを必要とする。すなわち、追い出されるプレフィクスの読み出しと、それに続く、挿入されるプレフィクスの書き込みとである。これは、パイプラインの１回のストールで実行可能である。なお、パイプラインの下流でこの挿入に対してさらに多くのプレフィクスが追い出される場合であっても、これ以上のストールは不要である。
【００９４】
削除のほうが困難である。レベルｉで削除されるプレフィクスはレベルｉ−１におけるポインタ更新を必要とし、これは、段間のバイパスハードウェアを必要とすることになるからである。レベルｉは、クロックサイクルｊの期間中に読み出される。レベルｉ−１は、クロックサイクルｊ＋１の期間中に書き込まれる（なお、親ノードへのポインタがラッチに保存されていなければならない）。一般に、削除されるプレフィクスの子を昇格させる必要がある。段ｉ＋１はクロックサイクルｊ＋１において読み出され、クロックサイクルｊ＋２の期間中に段ｉに書き戻される。このアクションの開始を図１７に示す。段ｉには一致がないことがわかる。注意すべき点であるが、子が存在するため、プレフィクスを昇格させる必要がある。書き戻しに必要なバイパスハードウェアは明確化のために図示していない。最悪の場合、削除は２クロックサイクルのストールを余儀なくされる。
【００９５】
この設計の１つの問題点は、ｂｏｎｓａｉレベルあたりのノード数の不均衡であり、これは、パイプライン段によって必要とされるメモリサイズの不均衡に対応する。例えば図１に示すように、あるレベルにはノードがなく他には数千のノードがある。１つの段に必要なメモリが不十分なときにｂｏｎｓａｉの１レベルを数個の連続するパイプライン段に分割するのは比較的容易であるが、依然として、ルート付近のレベルは非常に限定された量のメモリしか必要としない。
【００９６】
［ＩＶＥ．ｂｏｎｓａｉを用いたネットワークシステム］
図１８に、本発明によるネットワークシステムの好ましい実施例の実装を示す。このネットワークシステムは、複数のホスト１８．１０〜１８．１３を有する。各ホストは対応するルータ１８．２０〜１８．２３を有する。アドレスのプレフィクスは、ｂｏｎｓａｉトライを用いてルータに格納される。ｂｏｎｓａｉトライは、上記のように、ｂｏｎｓａｉトライ内の各ノードに１個のプレフィクスが格納されいずれのノードも空でないようにアドレスに関するプレフィクスが格納された二分トライの実現である。
【００９７】
【発明の効果】
本発明の効果は以下の通りである。
・メモリ使用は効率的かつスケーラブルである。ｂｏｎｓａｉ（後述する）は、各プレフィクスごとに１個のノードしか使用せず、各ノードは２個のノードポインタ及び１個のプレフィクスポインタを有する。ノード及びプレフィクスを配列に格納するのは容易である。従って、ポインタサイズをｌｏｇ（ｐ）ビット（ただし、ｐは格納されるプレフィクスの数）に制限することが可能である。
・構造は、効率的で単純な挿入、削除、及び探索オペレーションをサポートする。ＩＰアドレスのビット数をｂとした場合、アルゴリズムはＯ（ｂ）時間を必要とする。
・本発明によるプレフィクス格納方法は、挿入オペレーションの順序に依存する。本発明は、複数の最適性基準を備える。第１の基準は、全体の深さが最小の二分トライを計算する欲張り法である。第２の基準は、探索ごとの期待ステップ数が最小のｂｏｎｓａｉトライを導出する動的計画法アプローチである。この探索最適ｂｏｎｓａｉアプローチは、ＩＰデスティネーションアドレスの任意の分布を仮定することが可能である。
・本発明は、パイプライン化ハードウェア実装に特に適している。スループットは、メモリアクセスあたり１回の探索（すなわち、１つの最小プレフィクス一致）程度にまで高めることが可能である。挿入及び削除は、パイプラインにおける２クロックサイクル以下のストールで実行可能である。
【００９８】
本発明に対するその他の修正や変形は、上記の記載から当業者には明らかである。すなわち、本明細書では、本発明のいくつかの実施例のみについて具体的に説明したが、明らかなように、本発明の技術思想及び技術的範囲から離れることなく、さまざまな変形を行うことが可能である。
【図面の簡単な説明】
【図１】ｍａｅ−ｅａｓｔプレフィクスのプレフィクス分布、ノード分布、及び深さ最適分布の図である。
【図２】シーケンス（１００１１，０１１００，１１１１，０１００，０１１１１０，１０１００，０１０，０００１１）の挿入後の、本発明の好ましい実施例の図である。
【図３】プレフィクス０１の挿入後の好ましい実施例の図である。
【図４】プレフィクス０１１００の削除後の好ましい実施例の図である。
【図５】図２と同じプレフィクスであるが、異なる挿入シーケンス（０１００，０１，１００１１，０００１１１，０１０，１０１００，１１１１，０１１１１０）の場合の好ましい実施例の図である。
【図６】２つの可能なｂｏｎｓａｉ構造の図である。
【図７】２つの深さ最適サブトライの併合の図である。
【図８】探索最適サブトライの図である。
【図９】ランダム、深さ最適、及び探索最適サブトライの深さの図である。
【図１０】ランダム、深さ最適、及び探索最適ｂｏｎｓａｉの平均ノードレベルの図である。
【図１１】ランダム、深さ最適、及び探索最適ｂｏｎｓａｉの探索あたり平均比較数の図である。
【図１２】ｍａｅ−ｅａｓｔフォワーディングテーブルのプレフィクスの第１バイトの分布の図である。
【図１３】ｆｉｘ−ｗｅｓｔが記録したデスティネーションＩＰアドレスの第１バイトの分布の図である。
【図１４】ｂｏｎｓａｉのパイプライン実装の例を示す図である。
【図１５】図１４のパイプライン実装を用いた段ｉにおける探索の例を示す図である。
【図１６】図１４のパイプライン実装を用いた段ｉにおける挿入の例を示す図である。
【図１７】図１４のパイプライン実装を用いた段ｉにおける削除の例を示す図である。
【図１８】本発明により効率的な方法でアドレスに関するプレフィクスを格納するルータを有するネットワークシステムの実施例の図である。
【図１９】従来のトライ構造の例を示す図である。
【図２０】従来のトライ構造、及び、等価な従来のパトリシアトライ構造の例を示す図である。
【符号の説明】
１８．１０〜１８．１３  ホスト
１８．２０〜１８．２３  ルータ
【図１】
0003570323.tif 000009
【図２】
0003570323.tif 000010
【図３】
0003570323.tif 000011
【図４】
0003570323.tif 000012
【図５】
0003570323.tif 000013
【図６】
0003570323.tif 000014
【図７】
0003570323.tif 000015
【図８】
0003570323.tif 000016
【図９】
0003570323.tif 000017
【図１０】
0003570323.tif 000018
【図１１】
0003570323.tif 000019
【図１２】
0003570323.tif 000020
【図１３】
0003570323.tif 000021
【図１４】
0003570323.tif 000022
【図１５】
0003570323.tif 000023
【図１６】
0003570323.tif 000024
【図１７】
0003570323.tif 000025
【図１８】
0003570323.tif 000026
【図１９】
0003570323.tif 000027
【図２０】
0003570323.tif 000028