(57)【特許請求の範囲】
【請求項１】
ノードに接続され、被検索データを有するリーフ、並びに、前段および次段の少なくとも一方に接続され、検索データの桁を指すビット番号を有するノードにより構成される検索木で、前記検索データに対応する被検索データを検索するデータ検索装置において、
検索データの、対象ノードのビット番号が指す桁の値に基づいて次段のノードの中から次の対象ノードを検索する処理と、前記対象ノードに接続されるリーフの被検索データと検索データとを所定の桁について比較する処理とを並列して実行する処理手段と、
前記処理手段での比較により所定の桁について前記被検索データと前記検索データとが一致した場合に前記被検索データを保持するデータ保持手段と、
前記処理手段での検索により前記次段のノードが存在しない場合、および、前記処理手段での比較により所定の桁について前記被検索データと前記検索データとが一致しない場合に、前記データ保持手段が最後に保持した被検索データを検索結果として出力する出力手段と
を備えることを特徴とするデータ検索装置。
【請求項２】
ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータを記憶する第１のリーフ情報記憶手段とを備え、
処理手段は、前記ノード情報記憶手段から、対象ノードに対応する前記ビット番号を読み出し、そのビット番号が指す桁の値に基づいて前記次段のノードへのポインタを前記ノード情報記憶手段から読み出して前記次段のノードの中から次の対象ノードを検索するとともに、前記第１のリーフ情報記憶手段から、前記対象ノードに接続されるリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータにより指定された桁についてその被検索データと検索データとを比較する
ことを特徴とする請求項１記載のデータ検索装置。
【請求項３】
ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、ノードに対応して、そのノードに接続されたリーフへのポインタを記憶する第２のリーフ情報記憶手段と、リーフに対応して、被検索データ、およびその被検索データに付随するデータを記憶する第３のリーフ情報記憶手段とを備え、
処理手段は、前記ノード情報記憶手段から、対象ノードに対応する前記ビット番号を読み出し、そのビット番号が指す桁の値に基づいて前記次段のノードへのポインタを前記ノード情報記憶手段から読み出して前記次段のノードの中から次の対象ノードを検索するとともに、前記第２のリーフ情報記憶手段から、前記対象ノードに接続されるリーフへのポインタを読み出し、そのポインタに基づいて前記第３のリーフ情報記憶手段から、そのリーフの前記被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータより指定された桁についてその被検索データと検索データとを比較する
ことを特徴とする請求項１記載のデータ検索装置。
【請求項４】
処理手段は、対象ノードのビット番号に基づいて、ノードに接続されるリーフの被検索データと検索データとを比較する桁を決定する
ことを特徴とする請求項１記載のデータ検索装置。
【請求項５】
ノードに対応して、ビット番号、および、次段のノードが末端のノードであり、かつリーフを接続されたものである場合にはそのリーフへのポインタ、そうでない場合には前記次段のノードへのポインタを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータを記憶する第１のリーフ情報記憶手段とを備え、
処理手段は、前記ノード情報記憶手段から、対象ノードに対応する前記ビット番号を読み出し、そのビット番号が指す桁の値に基づいて前記次段のノードへのポインタまたは前記リーフへのポインタを前記ノード情報記憶手段から読み出して前記次段のノードの中から次の対象ノードを検索するとともに、前記第１のリーフ情報記憶手段から、前記対象ノードに接続されるリーフまたは前記末端のノードに接続されたリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータにより指定された桁についてその被検索データと検索データとを比較する
ことを特徴とする請求項１記載のデータ検索装置。
【請求項６】
ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータへのポインタを記憶する第４のリーフ情報記憶手段と、前記被検索データに付随するデータを記憶する第５のリーフ情報記憶手段とを備え、
処理手段は、前記ノード情報記憶手段から、対象ノードに対応する前記ビット番号を読み出し、そのビット番号が指す桁の値に基づいて前記次段のノードへのポインタを前記ノード情報記憶手段から読み出して前記次段のノードの中から次の対象ノードを検索するとともに、前記第４のリーフ情報記憶手段から、前記対象ノードに接続されるリーフの被検索データおよびその被検索データに付随するデータへのポインタを読み出し、所定の桁についてその被検索データと検索データとを比較し、検索により前記次段のノードが存在しない場合および比較により所定の桁について前記被検索データと前記検索データとが一致しない場合に前記被検索データに付随するデータへのポインタに基づいて前記第５のリーフ情報記憶手段からその被検索データに付随するデータを読み出し、
データ保持手段は、前記処理手段での比較により所定の桁について前記被検索データと前記検索データとが一致した場合に、前記被検索データを保持し、
出力手段は、前記処理手段での検索により前記次段のノードが存在しない場合、および前記処理手段での比較により所定の桁について前記被検索データと前記検索データとが一致しない場合に、前記データ保持手段に最後に保持した被検索データおよび前記処理手段により読み出されたその被検索データに付随するデータを検索結果として出力する
ことを特徴とする請求項１記載のデータ検索装置。
【請求項７】
ノードに接続され、被検索データを有するリーフ、並びに、前段および後段の少なくとも一方に接続され、検索データの桁を指すビット番号を有するノードにより構成される検索木で、前記検索データに対応する被検索データを検索するデータ検索方法において、
検索データの、対象ノードのビット番号が指す桁の値に基づいて次段のノードの中から次の対象ノードを検索する検索処理と、前記対象ノードに接続されるリーフの被検索データと検索データとを所定の桁について比較する比較処理とを並列して実行するステップと、
前記比較処理により所定の桁について前記被検索データと前記検索データとが一致した場合に前記被検索データを保持するステップと、
前記検索処理により前記次段のノードが存在しない場合、および、前記比較処理により所定の桁について前記被検索データと前記検索データとが一致しない場合に、最後に保持した被検索データを検索結果として出力するステップと
を備えることを特徴とするデータ検索方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、例えば、中継するパケットに付加されたインターネットプロトコル（ＩＰ）層の宛先アドレス（宛先ＩＰアドレス）を検査し、中継先を決定するルータなどのインターネットの中継装置に適用されるデータ検索装置およびデータ検索方法であって、ノードに接続され、パケットの宛先ネットワークアドレスなどの被検索データを有するリーフ、並びに、前段および次段の少なくとも一方に接続され、パケットの宛先アドレスである検索データの桁を指すビット番号を有するノードにより構成される検索木において、検索データに対応する被検索データを検索するデータ検索装置およびデータ検索方法に関するものである。
【０００２】
【従来の技術】
図１１は、従来のルータなどに記憶されたルーティングテーブルの一例を示す図である。図１１において、１は宛先ネットワークＩＰアドレスであり、２は、各宛先ネットワークＩＰアドレス１に対応して設けられているネットワークマスクであり、４は、各宛先ネットワークＩＰアドレス１に対応して設けられている中継先アドレスである。そして、１つの宛先ネットワークＩＰアドレス１、１つのネットワークマスク２、および１つの中継先アドレス４により１つのエントリ６−ｉ（ｉ＝１〜７）が構成される。なお、図中のアドレスおよびマスクは１６進数で表されており、「０ｘ」は１６進数であることを示すものである。
【０００３】
このようなルーティングテーブルを有するルータなどの中継装置においては、ネットワークを介してパケットを受け取ると、そのパケットに付加された宛先ＩＰアドレスを検索データとして抽出し、ルーティングテーブルの各エントリ６−１〜６−７に対して、次の関係式が成り立つか否かを判断し、この関係式が成り立つエントリに含まれる中継先アドレス４に向けてそのパケットを送出する。
（宛先ＩＰアドレス）＆（ネットワークマスク）
＝（宛先ネットワークＩＰアドレス）
ただし、「＆」は、ビットごとの論理積を計算する演算子である。
【０００４】
例えば、宛先ＩＰアドレスが０ｘ８００５００００〜０ｘ８００５ＦＦＦＦのいずれかである場合には、宛先ネットワークＩＰアドレス１が０ｘ８００５００００であり、ネットワークマスク２が０ｘＦＦＦＦ００００であり、中継先アドレス４が０ｘ８００５０７２２であるエントリ６−２について上記関係式が成立するので、宛先ＩＰアドレスが０ｘ８００５００００〜０ｘ８００５ＦＦＦＦのいずれかであるパケットは、アドレスが０ｘ８００５０７２２である中継先に向けて送出される。
【０００５】
さらに、複数のエントリについて上記関係式が成立する場合には、ネットワークマスク２について値が１であるビット数の最も多いエントリが選択される。なお、このことはロンゲストマッチングと呼ばれる。
【０００６】
例えば、検索データであるパケットの宛先ＩＰアドレスが０ｘ８０２０９０００である場合、図１１において、エントリ６−１，６−３，６−５について上記関係式が成立するので、値が１であるビットの最も多いネットワークマスク２を有するエントリ６−５が選択され、そのパケットは、アドレスが０ｘ８０２０９２０Ｂである中継先に向けて送出される。
【０００７】
次に、例えば「Ａ  Ｔｒｅｅ−Ｂａｓｅｄ  Ｐａｃｋｅｔ  Ｒｏｕｔｉｎｇ  Ｔａｂｌｅ  ｆｏｒ  Ｂｅｒｋｅｌｅｙ  Ｕｎｉｘ」（Ｓｋｌｏｗｅｒ著、Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｃａｌｉｆｏｒｎｉａ  Ｂｅｒｋｅｌｅｙ、１９９４年）に記載のパトリシアツリーを利用したルーティングテーブルについて説明する。図１２は、図１１のルーティングテーブルと同一のルーティング情報を有するパトリシアツリーの一例を示す図であり、図１３は、従来のデータ検索方法について説明するフローチャートである。
【０００８】
図１２において、３ａ〜３ｋは、パトリシアツリーのノードであり、６は検索データであり、５ａ〜５ｇは、上記エントリ６−１〜６−７をデータとしてそれぞれ有するリーフである。ただし、図１２のリーフ５ａ〜５ｇには、中継先アドレス４の記載が省略されている。
【０００９】
図１２に示すパトリシアツリーにおいては、ノード３ａが頂点のノードであり、リーフ５ａを接続されている。そして、ノード３ａにはビット番号「０」が割り当てられている。このビット番号ｉは、次段のノードを探索するときに使用され、検索データのＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側から第ｉ番目のビットの値に応じてノードが選択される。図１２においては、検索データのＭＳＢ側から第ｉ番目のビットの値が「１」である場合には、右側に接続された次段のノードが選択され、その第ｉ番目のビットの値が「０」である場合には、左側に接続された次段のノードが選択される。
【００１０】
リーフ５ａには、図１１のエントリ６−１と同一の宛先ネットワークＩＰアドレス１ａ、ネットワークマスク２ａ、および中継先アドレス４（図示せず）が保持されている。
【００１１】
次に、ノード３ｈが次段右側のノードとしてノード３ａに接続され、ビット番号「１」を割り当てられている。そして、ノード３ｊが次段右側のノードとしてノード３ｈに接続され、ビット番号「１９」を割り当てられ、ノード３ｉが次段左側のノードとしてノード３ｈに接続され、ビット番号「１０」を割り当てられている。さらに、ノード３ｇが次段右側のノードとしてノード３ｊに接続され、ビット番号「２４」を割り当てられ、エントリ６−７と同一のデータを保持するリーフ５ｇを接続されている。また、ノード３ｆが次段左側のノードとしてノード３ｊに接続され、ビット番号「２０」を割り当てられ、エントリ６−６と同一のデータを保持するリーフ５ｆを接続されている。
【００１２】
同様に、ノード３ｃが次段右側のノードとしてノード３ｉに接続され、ビット番号「１６」を割り当てられ、エントリ６−３と同一のデータを保持するリーフ５ｃを接続されている。また、ノード３ｂが次段左側のノードとしてノード３ｉに接続され、ビット番号「１６」を割り当てられ、エントリ６−２と同一のデータを保持するリーフ５ｂを接続されている。
【００１３】
さらに、ノード３ｋが次段右側のノードとしてノード３ｃに接続され、ビット番号「１９」を割り当てられ、ノード３ｅが次段右側のノードとしてノード３ｋに接続され、ビット番号「２０」を割り当てられ、エントリ６−５と同一のデータを保持するリーフ５ｅを接続されており、ノード３ｄが次段左側のノードとしてノード３ｋに接続され、ビット番号「２０」を割り当てられ、エントリ６−４と同一のデータを保持するリーフ５ｄを接続されている。
【００１４】
次に、このようなパトリシアツリーとして記憶されているリーフ５ａ〜５ｇのデータから、検索データに応じた所望のデータを検索するときの処理について、図１３のフローチャートを参照して説明する。
【００１５】
まず、ステップＳＴ１において、検索位置（対象ノード）が頂点のノード（図１２では、ノード３ａ）に設定される。
【００１６】
次に、ステップＳＴ２において、その対象ノードにリーフが接続されているか否かが判断され、リーフが接続されていると判断された場合には、ステップＳＴ３においてそのリーフの有するデータがスタックに記憶される。リーフが接続されていないと判断された場合には、ステップＳＴ３はスキップされる。
【００１７】
そして、ステップＳＴ４において、検索データのうちの、ＭＳＢから、対象ノードに割り当てられているビット番号だけＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側のビットの値が１であるか否かが判断される。そのビットの値が１である場合には、ステップＳＴ５において、対象ノードの次段右側にノードがあるか否かが判断され、対象ノードの次段右側にノードがあると判断された場合、ステップＳＴ６において、対象ノードが、その次段右側のノードに移動される。一方、そのビットの値が０である場合には、ステップＳＴ７において、対象ノードの次段左側にノードがあるか否かが判断され、対象ノードの次段左側にノードがあると判断された場合、ステップＳＴ８において、対象ノードが、その次段左側のノードに移動される。そして、ステップＳＴ６の処理またはステップＳＴ８の処理が終了した後、ステップＳＴ２に戻り、次の対象ノードに対してステップＳＴ２〜ステップＳＴ８の処理が同様に実行される。
【００１８】
ステップＳＴ５において対象ノードの次段右側にノードがないと判断されるか、あるいは、ステップＳＴ７において対象ノードの次段左側にノードがないと判断された場合には、ステップＳＴ９に進む。
【００１９】
そして、ステップＳＴ９において、スタックにリーフのデータが記憶されているか否かが判断され、リーフのデータがある場合には、ステップＳＴ１０において、そのリーフのデータである宛先ネットワークＩＰアドレスとネットワークマスクを読み出し、ステップＳＴ１１において、その宛先ネットワークＩＰアドレスとネットワークマスク、および検索データとしての宛先ＩＰアドレスについて、上記関係式が成立するか否かが判断される。
【００２０】
そして、その関係式が成立した場合には、ステップＳＴ１２において、検索データとしての宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスが、そのリーフのデータに確定される。
【００２１】
一方、ステップＳＴ１１において上記関係式が成立しない場合には、ステップＳＴ９に戻り、スタックに記憶したリーフのデータを順次読み出し、上記関係式が成立するまで、同様の処理が実行される。なお、スタックに記憶したリーフのデータがすべて読み出され、スタックに記憶されているリーフのデータがなくなった場合には、ステップＳＴ９において、リーフのデータがないと判断され、検索処理が終了する。なお、この場合、検索に失敗したことになる。ただし、リーフ５ａのようにデフォルトの中継先のためのデータを設けておくことにより、中継先が必ず確定されるようにすることができる。
【００２２】
このようにして、各パケットに付加されている宛先ＩＰアドレスを検索データとして、宛先ネットワークアドレスや中継先アドレスが検索される。
【００２３】
ここで、具体的な検索の例として、中継装置に図１２のパトリシアツリーが記憶されており、検索データである宛先ＩＰアドレスが０ｘ８０２０Ａ３２４である場合における検索処理について説明する。なお、この宛先ＩＰアドレスを２進数で表記すると、１０００  ００００  ００１０  ００００  １０１０  ００１１  ００１０  ０１００となる。
【００２４】
まず、検索位置（対象ノード）がノード３ａに設定される（ステップＳＴ１）。次に、その対象ノードであるノード３ａにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ａにはリーフ５ａが接続されているので、そのリーフの有するデータ（エントリ６−１と同一のデータ）がスタックに記憶される（ステップＳＴ３）。
【００２５】
そして、ノード３ａに割り当てられているビット番号が０であるので、検索データのうちの、ＭＳＢの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢの値が１であるので、対象ノードであるノード３ａの次段右側にノードがあるか否かが判断される（ステップＳＴ５）。ノード３ａの次段右側にはノード３ｈがあるので、対象ノードが、ノード３ａからノード３ｈへ移動される（ステップＳＴ６）。
【００２６】
そして、対象ノードであるノード３ｈにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ｈにはリーフが接続されていないので、ステップＳＴ３の処理がスキップされる。ノード３ｈに割り当てられているビット番号が１であるので、検索データのうちの、ＭＳＢから第１番目のビットの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢから第１番目のビットの値は０であるので、対象ノードであるノード３ｈの次段左側にノードがあるか否かが判断される（ステップＳＴ７）。ノード３ｈの次段左側にはノード３ｉがあるので、対象ノードが、ノード３ｈからノード３ｉへ移動される（ステップＳＴ８）。
【００２７】
さらに、対象ノードであるノード３ｉにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ｉにはリーフが接続されていないので、ステップＳＴ３の処理がスキップされる。ノード３ｉに割り当てられているビット番号が１０であるので、検索データのうちの、ＭＳＢから第１０番目のビットの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢから第１０番目のビットの値が１であるので、対象ノードであるノード３ｉの次段右側にノードがあるか否かが判断される（ステップＳＴ５）。ノード３ｉの次段右側にはノード３ｃがあるので、対象ノードが、ノード３ｉからノード３ｃへ移動される（ステップＳＴ６）。
【００２８】
さらに、対象ノードであるノード３ｃにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ｃにはリーフ５ｃが接続されているので、そのリーフ５ｃの有するデータ（エントリ６−３と同一のデータ）がスタックに記憶される（ステップＳＴ３）。次に、ノード３ｃに割り当てられているビット番号が１６であるので、検索データのうちの、ＭＳＢから第１６番目のビットの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢから第１６番目のビットの値が１であるので、対象ノードであるノード３ｃの次段右側にノードがあるか否かが判断される（ステップＳＴ５）。ノード３ｃの次段右側にはノード３ｋがあるので、対象ノードが、ノード３ｃからノード３ｋへ移動される（ステップＳＴ６）。
【００２９】
さらに、対象ノードであるノード３ｋにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ｋにはリーフが接続されていないので、ステップＳＴ３の処理がスキップされる。ノード３ｋに割り当てられているビット番号が１９であるので、検索データのうちの、ＭＳＢから第１９番目のビットの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢから第１９番目のビットの値が０であるので、対象ノードであるノード３ｋの次段左側にノードがあるか否かが判断される（ステップＳＴ７）。ノード３ｋの次段左側にはノード３ｄがあるので、対象ノードが、ノード３ｋからノード３ｄへ移動される（ステップＳＴ８）。
【００３０】
さらに、対象ノードであるノード３ｄにリーフが接続されているか否かが判断される（ステップＳＴ２）。ノード３ｄにはリーフ５ｄが接続されているので、そのリーフ５ｄの有するデータ（エントリ６−４と同一のデータ）がスタックに記憶される（ステップＳＴ３）。次に、ノード３ｄに割り当てられているビット番号が２０であるので、検索データのうちの、ＭＳＢから第２０番目のビットの値が１であるか否かが判断される（ステップＳＴ４）。検索データのＭＳＢから第２０番目のビットの値が０であるので、対象ノードであるノード３ｄの次段左側にノードがあるか否かが判断される（ステップＳＴ７）。ノード３ｄの次段左側にはノードがないので、対象ノードの移動は行われない。
【００３１】
この時点で、エントリ６−４と同一のデータ、エントリ６−３と同一のデータ、エントリ６−１と同一のデータがスタックに記憶されている。
【００３２】
次に、スタックにリーフのデータが記憶されているか否かが判断され（ステップＳＴ９）、この時点で３つのデータがあるので、最後に記憶したエントリ６−４と同一のデータである宛先ネットワークＩＰアドレス（＝０ｘ８０２０８０００）とネットワークマスク（＝０ｘＦＦＦＦＦ０００）を読み出し（ステップＳＴ１０）、その宛先ネットワークＩＰアドレスとネットワークマスク、および検索データとしての宛先ＩＰアドレスについて、上記関係式が成立するか否かが判断される（ステップＳＴ１１）。
【００３３】
ここで、（０ｘ８０２０Ａ３２４）＆（０ｘＦＦＦＦＦ０００）＝０ｘ８０２０Ａ０００≠０ｘ８０２０８０００であるので、上記関係式が成立しないと判断し（ステップＳＴ１１）、次に、エントリ６−３と同一のデータである宛先ネットワークＩＰアドレス（＝０ｘ８０２０００００）とネットワークマスク（＝０ｘＦＦＦＦ００００）が読み出され（ステップＳＴ１０）、その宛先ネットワークＩＰアドレスとネットワークマスク、および検索データとしての宛先ＩＰアドレスについて、上記関係式が成立するか否かが判断される（ステップＳＴ１１）。
【００３４】
ここで、（０ｘ８０２０Ａ３２４）＆（０ｘＦＦＦＦ００００）＝０ｘ８０２０００００であるので、上記関係式が成立したと判断し、検索データとしての宛先ＩＰアドレス（＝０ｘ８０２０Ａ３２４）に対応する、宛先ネットワークＩＰアドレスや中継先アドレスが、そのリーフのデータ（すなわち、エントリ６−３と同一のデータ）に確定される（ステップＳＴ１２）。
【００３５】
このようにして、図１２に示すパトリシアツリーとしてルーティングテーブルが記憶され、検索データである宛先ＩＰアドレスが０ｘ８０２０Ａ３２４である場合には、宛先ネットワークＩＰアドレスとして０ｘ８０２０００００が選択され、中継先アドレスとして０ｘ８０２０８４３Ｅが選択される。
【００３６】
なお、その他、本発明に関連する事項が例えば特開昭６３−２９１１１７号公報、特開平２−１０２１号公報、特開平３−８０８３号公報、特開平４−３１６２４４号公報、および特開平８−３２０８７７号公報に記載されているが、これらより本発明を導出することは困難である。
【００３７】
【発明が解決しようとする課題】
従来のデータ検索方法は以上のように構成されているので、対象ノードの移動ができなくなるまで、リーフのデータを記憶しながら対象ノードを移動させていった後に、記憶したリーフのデータと検索データとを順次比較していく必要があり、検索に要する時間を短縮することが困難であるなどの課題があった。
【００３８】
この発明は上記のような課題を解決するためになされたもので、検索データの、対象ノードのビット番号に対応するビットの値に基づいて次段のノードを検索する検索処理と、対象ノードに接続されるリーフのデータと検索データとを比較する比較処理とを並列して実行して、ハードウェアによる処理に適した、検索に要する時間を短縮することが可能なデータ検索装置およびデータ検索方法を得ることを目的とする。
【００３９】
【課題を解決するための手段】
この発明に係るデータ検索装置は、検索データの、対象ノードのビット番号が指す桁の値に基づいて次段のノードの中から次の対象ノードを検索する処理と、対象ノードに接続されるリーフの被検索データと検索データとを所定の桁について比較する処理とを並列して実行する処理手段と、処理手段での比較により所定の桁について被検索データと検索データとが一致した場合に被検索データを保持するデータ保持手段と、処理手段での検索により次段のノードが存在しない場合、および、処理手段での比較により所定の桁について被検索データと検索データとが一致しない場合に、データ保持手段が最後に保持した被検索データを検索結果として出力する出力手段とを備えるものである。
【００４０】
この発明に係るデータ検索装置は、ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータを記憶する第１のリーフ情報記憶手段とを備え、処理手段により、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第１のリーフ情報記憶手段から、対象ノードに接続されるリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータにより指定された桁についてその被検索データと検索データとを比較するものである。
【００４１】
この発明に係るデータ検索装置は、ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、ノードに対応して、そのノードに接続されたリーフへのポインタを記憶する第２のリーフ情報記憶手段と、リーフに対応して、被検索データ、およびその被検索データに付随するデータを記憶する第３のリーフ情報記憶手段とを備え、処理手段により、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第２のリーフ情報記憶手段から、対象ノードに接続されるリーフへのポインタを読み出し、そのポインタに基づいて第３のリーフ情報記憶手段から、そのリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータより指定された桁についてその被検索データと検索データとを比較するものである。
【００４２】
この発明に係るデータ検索装置は、対象ノードのビット番号に基づいて、ノードに接続されるリーフの被検索データと検索データとを比較する桁を決定するものである。
【００４３】
この発明に係るデータ検索装置は、ノードに対応して、ビット番号、および、次段のノードが末端のノードであり、かつリーフを接続されたものである場合にはそのリーフへのポインタ、そうでない場合には次段のノードへのポインタを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータを記憶する第１のリーフ情報記憶手段とを備え、処理手段により、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタまたはリーフへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第１のリーフ情報記憶手段から、対象ノードに接続されるリーフまたは末端のノードに接続されたリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータにより指定された桁についてその被検索データと検索データとを比較するものである。
【００４４】
この発明に係るデータ検索装置は、ノードに対応して、ビット番号と、次段のノードへのポインタとを記憶するノード情報記憶手段と、リーフに対応して、被検索データおよびその被検索データに付随するデータへのポインタを記憶する第４のリーフ情報記憶手段と、被検索データに付随するデータを記憶する第５のリーフ情報記憶手段とを備え、処理手段により、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第４のリーフ情報記憶手段から、対象ノードに接続されるリーフの被検索データおよびその被検索データに付随するデータへのポインタを読み出し、所定の桁についてその被検索データと検索データとを比較し、検索により次段のノードが存在しない場合および比較により所定の桁について被検索データと検索データとが一致しない場合に被検索データに付随するデータへのポインタに基づいて第５のリーフ情報記憶手段からその被検索データに付随するデータを読み出し、データ保持手段により、処理手段での比較により所定の桁について被検索データと検索データとが一致した場合に、被検索データを保持し、出力手段により、処理手段での検索により次段のノードが存在しない場合、および処理手段での比較により所定の桁について被検索データと検索データとが一致しない場合に、データ保持手段に最後に保持した被検索データおよび処理手段により読み出されたその被検索データに付随するデータを検索結果として出力するものである。
【００４５】
この発明に係るデータ検索方法は、検索データの、対象ノードのビット番号が指す桁の値に基づいて次段のノードの中から次の対象ノードを検索する検索処理と、対象ノードに接続されるリーフの被検索データと検索データとを所定の桁について比較する比較処理とを並列して実行するステップと、比較処理により所定の桁について被検索データと検索データとが一致した場合に被検索データを保持するステップと、検索処理により次段のノードが存在しない場合、および、比較処理により所定の桁について被検索データと検索データとが一致しない場合に、最後に保持した被検索データを検索結果として出力するステップとを備えるものである。
【００４６】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１は、この発明の実施の形態１によるデータ検索装置の構成例を示すブロック図である。図２は、実施の形態１によるデータ検索装置のノード用メモリに記憶されるデータの一例を示す図である。図３は、実施の形態１によるデータ検索装置のリーフ用メモリに記憶されるデータの一例を示す図である。
【００４７】
図１において、３０は、パトリシアツリーなどの検索木におけるノードの情報を記憶するノード用メモリ（ノード情報記憶手段）である。ノード用メモリ３０は、ノード毎に、次段左側にノードがあるか否かを示すフラグ３０６、次段右側にノードがあるか否かを示すフラグ３０７、次段左側のノードのビット番号３０４、次段右側のノードのビット番号３０５、次段左側のノードへのポインタ３０２、および次段右側のノードへのポインタ３０３で構成されるレコード３０１を記憶している。なお、フラグ３０６，３０７の値は、ノードがある場合１に設定され、そうでない場合０に設定される。また、ポインタは、そのノードの情報が記憶されている場所のアドレスである。
【００４８】
例えば図１２の検索木のノードに対応する情報は、図２に示すような値として記憶される。図２においては、アドレス０に初期情報（処理の最初に参照される情報）が記憶され、アドレス２，３にノード３ａに対応するレコード３０１が記憶され、アドレス４，５にノード３ｄに対応するレコード３０１が記憶され、アドレス６，７にノード３ｃに対応するレコード３０１が記憶されており、さらに、アドレス８，９にノード３ｈに対応するレコード３０１が記憶され、アドレス１０，１１にノード３ｋに対応するレコード３０１が記憶され、アドレス１２，１３にノード３ｉに対応するレコード３０１が記憶され、以下同様に、残りのノードに対応する情報が記憶されている。例えばノード３ａの次段右側にはノードがないので、アドレス２には、フラグ３０６が０であるレコード３０１が記憶されている。このレコード３０１のビット番号３０４、および次段右側のノードへのポインタ３０２は、特に有意ではないので、値０に設定されている。
【００４９】
３１は、パトリシアツリーなどの検索木におけるリーフの情報を記憶するリーフ用メモリ（第１のリーフ情報記憶手段）である。リーフ用メモリ３１は、リーフ毎に、被検索データとしての宛先ネットワークＩＰアドレス３１２、被検索データに付随するデータとしてのネットワークマスク３１３および被検索データに付随するデータとしての中継先アドレス３１４で構成されるエントリ３１１を記憶している。なお、リーフ用メモリ３１における各エントリ３１１のアドレスは、そのエントリに対応するリーフが接続されるノードに対応するレコード３０１のノード用メモリ３０におけるアドレスを２分の１にした値の端数を切り捨てた値になるように設定されている。なお、リーフを有さないノードに対応するリーフ用メモリ３１の記憶場所には、有意な情報は記憶されていない（ここでは値０が記憶される）。
【００５０】
例えば図１２の検索木のリーフに対応する情報は、図３に示すような値として記憶される。図３においては、アドレス０には、初期情報（処理の最初に参照される情報）に対応して、リーフなしを示す値０が記憶され、アドレス１にノード３ａに接続されたリーフ５ａに対応するエントリ３１１が記憶され、アドレス２にノード３ｄに接続されたリーフ５ｄに対応するエントリ３１１が記憶され、アドレス３にノード３ｃに接続されたリーフ５ｃに対応するエントリ３１１が記憶されている。さらに、ノード３ｈ、ノード３ｋ、およびノード３ｉにはリーフが接続されていないので、アドレス４〜６には値０が記憶されている。以下同様に、残りのノードに対応してそれぞれ値が記憶されている。例えば、アドレス１には、リーフ５ａに対応して、宛先アドレス３１２が０ｘ００００００００であり、ネットワークマスク３２３が０ｘ００００００００であり、中継先アドレスが０ｘ８０００Ａ８０４であるエントリ３１１が記憶されている。
【００５１】
３３は、ノード用メモリ３０およびシフタ３４に供給されるアドレスを一時的に記憶するレジスタ（処理手段）である。３４は、ノード用メモリ３０に供給されるアドレスをＬＳＢ側に１ビットだけシフトさせ、シフト後の値をアドレスとしてリーフ用メモリ３１に供給するシフタ（処理手段）である。なお、このシフタ３４は、入力の各ビットを、そのビットから１ビットだけＬＳＢ側のビットとして単に出力し、入力のＬＳＢの値を切り捨てるようにしてもよい。
【００５２】
３２は、検索データである宛先ＩＰアドレスを受け取り、ノード用メモリ３０およびリーフ用メモリ３１から適宜情報を読み出し、後述のようにして、その宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスを選択し、検索結果として出力する制御回路（処理手段、データ保持手段、出力手段）である。なお、制御回路３２は、互いに独立して動作する図示せぬ検索処理部と比較処理部を有し、検索処理部で後述の検索処理を実行し、比較処理部で後述の比較処理を実行する。
【００５３】
次に動作について説明する。
図４は、この発明の実施の形態１によるデータ検索装置の動作について説明するフローチャートである。
【００５４】
まずステップＳＴ２１において、制御回路３２は、検索位置（対象ノード）を頂点のノードに設定する。このとき、制御回路３２は、レジスタ３３に初期のアドレスとして０を記憶させ、ノード用メモリ３０のアドレス０に記憶された初期情報を読み出し、その情報のうちの頂点のノードのアドレスに基づいて、頂点のノードの情報を読み出す。このとき、ノード用メモリ３０により、頂点のノードに対応するフラグ３０６またはフラグ３０７、およびビット番号３０４またはビット番号３０５が制御回路３２に出力され、次段左側のノードへのポインタ３０２または次段右側のノードへのポインタ３０３がレジスタ３３に出力されるとともに、リーフ用メモリ３１により、頂点のノードに対応するエントリ３１１が制御回路３２に出力される。
【００５５】
次に、ステップＳＴ２２〜ステップＳＴ２６の検索処理と、ステップＳＴ２７〜ステップＳＴ２９の比較処理が並列して実行される。すなわち、制御回路３２は、検索処理部で検索処理を実行し、比較処理部で比較処理を実行する。
【００５６】
まずステップＳＴ２２においては、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードのビット番号だけＬＳＢ側のビットの値が１であるか否かを判断する。そのビットの値が１である場合には、制御回路３２の検索処理部は、レジスタ３３に供給された次の対象ノードのアドレスのＬＳＢを０から１に変更する。なお、ノード用メモリ３０の偶数アドレスには、各ノードについての次段左側のノードの情報が記憶されており、奇数アドレスには、次段右側のノードの情報が記憶されている。したがって、レジスタ３３に記憶されたアドレスのＬＳＢを０から１に変更することにより、次の対象ノードとしての次段右側のノードの情報がノード用メモリ３０より出力される。
【００５７】
ステップＳＴ２３において、制御回路３２の検索処理部は、ノード用メモリ３０より供給されたその次段右側のノードの情報のうちのフラグ３０７に基づいて、対象ノードの次段右側にノードがあるか否かを判断し、対象ノードの次段右側にノードがあると判断した場合、ステップＳＴ２４において、対象ノードが、その次段右側のノードに移動されたことになる。
【００５８】
一方、そのビットの値が０である場合には、制御回路３２の検索処理部は、レジスタ３３に記憶されたアドレスを特に変更しない。したがって、次の対象ノードとしての次段左側のノードの情報がノード用メモリ３０より出力される。
【００５９】
ステップＳＴ２５において、制御回路３２の検索処理部は、ノード用メモリ３０より供給されたその次段左側のノードの情報のうちのフラグ３０６に基づいて、対象ノードの次段左側にノードがあるか否かを判断し、対象ノードの次段左側にノードがあると判断した場合、ステップＳＴ２６において、対象ノードが、その次段左側のノードに移動されたことになる。
【００６０】
このようにして、ステップＳＴ２２〜ステップＳＴ２６の検索処理が実行される。この検索処理と並列に比較処理が実行される。まず、レジスタ３３に記憶された対象ノードのアドレスに対応してシフタ３４によりアドレスがリーフ用メモリ３１に供給され、対象ノードに対応するエントリ３１１が制御回路３２の比較処理部に供給される。
【００６１】
そして、ステップＳＴ２７において、制御回路３２の比較処理部は、そのエントリ３１１のデータがすべて０であるか否かを判断し、そのエントリ３１１のデータのいずれかが０ではないと判断した場合、すなわち、対象ノードにリーフがあると判断した場合、ステップＳＴ２８において、リーフ用メモリ３１より供給されたエントリ３１１の各データに基づいて、次の関係式が成り立つか否かを判断する。
（検索データ）＆（ネットワークマスク）
＝（宛先ネットワークＩＰアドレス）
そして、この関係式が成り立つと判断した場合、ステップＳＴ２９において、制御回路３２の比較処理部は、そのリーフのエントリ３１１を記憶する。
【００６２】
なお、ステップＳＴ２７において供給されたエントリのデータがすべて０である場合には、ステップＳＴ２８およびステップＳＴ２９の処理はスキップされ、ステップＳＴ２８において上記関係式が成り立たない場合には、ステップＳＴ２９の処理はスキップされる。
【００６３】
このようにして、ステップＳＴ２７〜ステップＳＴ２９の比較処理が実行される。そして、検索処理および比較処理が完了すると、ステップＳＴ３０に進む。
【００６４】
ステップＳＴ３０において、制御回路３２は、比較処理部によりステップＳＴ２８の処理を実行したか否かを判断し、ステップＳＴ２８の処理を実行していない（すなわち、対象ノードにリーフがない）と判断した場合、次の対象ノードに対して、ステップＳＴ２２〜ステップＳＴ２９の処理を同様に実行する。
【００６５】
一方、ステップＳＴ２８の処理を実行した（すなわち、対象ノードにリーフがある）と判断した場合、ステップＳＴ３１において、制御回路３２は、ステップＳＴ２８において上記関係式が成り立ったか否かを判断し、ステップＳＴ２８において上記関係式が成り立たったと判断した場合、同様に、次の対象ノードに対して、ステップＳＴ２２〜ステップＳＴ２９の処理を実行する。
【００６６】
そして、ステップＳＴ２３において次の対象ノードである次段右側のノードがないと判断されるか、あるいは、ステップＳＴ２５において次の対象ノードである次段左側のノードがないと判断された場合、および、ステップＳＴ３１においてステップＳＴ２８の処理により上記関係式が成り立たなかったと判断した場合、ステップＳＴ３２において、制御回路３２は、比較処理部にリーフのエントリ３１１が記憶されているか否かを判断し、リーフのエントリ３１１が記憶されている場合には、ステップＳＴ３３において、そのリーフのエントリ３１１である宛先ネットワークＩＰアドレス、ネットワークマスクおよび中継先アドレスを、検索データである宛先ＩＰアドレスに対応するものとして出力する。
【００６７】
なお、記憶されているリーフのデータがない場合には、ステップＳＴ３２においてリーフのデータがないと判断され、検索処理が終了する。この場合、検索に失敗したことになり、例えば、該当するエントリがない旨の情報が検索結果として出力される。ただし、リーフ５ａのようにデフォルトの中継先のためのデータを設けておくことにより、中継先が必ず確定されるようにすることができる。
【００６８】
このようにして、各パケットに付加されている宛先ＩＰアドレスを検索データとして、宛先ネットワークＩＰアドレスや中継先アドレスが検索される。
【００６９】
ここで、具体的な検索の例として、中継装置に図１２のパトリシアツリーに対応するデータが図２および図３に示すようにノード用メモリ３０およびリーフ用メモリ３１に記憶されており、検索データである宛先ＩＰアドレスが０ｘ８０２０Ａ３２４である場合における検索処理について説明する。なお、この宛先ＩＰアドレスを２進数で表記すると、１０００  ００００  ００１０  ００００  １０１０  ００１１  ００１０  ０１００となる。
【００７０】
まず、制御回路３２は、検索位置（対象ノード）を頂点のノードに設定する。このとき、制御回路３２は、レジスタ３３に初期のアドレスとして０を記憶させ、ノード用メモリ３０のアドレス０に記憶された初期情報（フラグ３０６＝１，頂点のノード３ａのビット番号３０４＝０，頂点のノード３ａへのポインタ３０２＝２）を読み出す。このとき、その情報のうちの頂点のノードのアドレス（＝２）がレジスタ３３に供給され、フラグ３０６（＝１）とビット番号３０４（＝０）は制御回路３２に供給される。そして、制御回路３２は、レジスタ３３のＬＳＢの値を０から１に変更する。
【００７１】
次に、次の対象ノードの検索処理と、対象ノードのリーフのデータと検索データとの比較処理が並列して実行される。
【００７２】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ａのビット番号（＝０）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビット（すなわちＭＳＢ）の値が１であるので、制御回路３２の検索処理部は、レジスタ３３に供給された次の対象ノードのアドレスのＬＳＢを０から１に変更する。したがって、次に、ノード３ａに対する情報のうちの、アドレス３に記憶された次段右側のノード（ノード３ｈ）の情報（フラグ３０７＝１，次段右側のノード（ノード３ｈ）のビット番号３０５＝１，次段右側のノード（ノード３ｈ）へのポインタ３０３＝８）がノード用メモリ３０より出力される。
【００７３】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０７の値が１であるので、対象ノードであるノード３ａの次段右側にノードがあると判断する（ステップＳＴ２３）。ここで、対象ノードが、その次段右側のノード３ｈに移動されたことになる（ステップＳＴ２４）。
【００７４】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１により、アドレス１に記憶された頂点のノード３ａに対応するエントリ３１１（宛先ネットワークＩＰアドレス３１２＝０ｘ００００００００，ネットマスク３１３＝０ｘ００００００００，中継先アドレス３１４＝０ｘ８０００Ａ８０４）が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ａに対応するエントリ３１１のデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリ３１１のデータのうちの中継アドレスの値が０ではないので、すなわち対象ノードであるノード３ａにリーフがあるので、リーフ用メモリ３１より供給されたエントリ３１１の各データに基づいて、次の関係式が成り立つか否かを判断する（ステップＳＴ２８）。（検索データ）＆（ネットワークマスク）
＝（宛先ネットワークＩＰアドレス）
【００７５】
ここで（０ｘ８０２０Ａ３２４）＆（０ｘ００００００００）＝（０ｘ００００００００）であるので関係式が成り立つと判断し、制御回路３２の比較処理部は、そのリーフのエントリ３１１を記憶する（ステップＳＴ２９）。
【００７６】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立ったので（ステップＳＴ３１）、さらに検索処理および比較処理が実行される。
【００７７】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ｈのビット番号（＝１）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビットの値が０であるので、次に、ノード３ｈに対する情報のうちの、アドレス８に記憶された次段左側のノード（ノード３ｉ）の情報（フラグ３０６＝１，次段左側のノード（ノード３ｉ）のビット番号３０４＝１０，次段左側のノード（ノード３ｉ）へのポインタ３０２＝１２）がノード用メモリ３０より出力される。
【００７８】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０６の値が１であるので、対象ノードであるノード３ｈの次段左側にノードがあると判断する（ステップＳＴ２５）。ここで、対象ノードが、その次段左側のノード３ｉに移動されたことになる（ステップＳＴ２６）。
【００７９】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１によりアドレス４に記憶されたノード３ｈに対応するエントリ３１１が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ｈに対応するエントリのデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリのデータのうちの中継アドレスの値が０であるので、すなわち対象ノードであるノード３ｈにリーフがないので、ここで比較処理を完了する。
【００８０】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立つか否かの判断が実行されていないので（ステップＳＴ３０）、さらに検索処理および比較処理が実行される。
【００８１】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ｉのビット番号（＝１０）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビットの値が１であるので、制御回路３２の検索処理部は、レジスタ３３に供給された次の対象ノードのアドレスのＬＳＢを０から１に変更する。したがって、次に、ノード３ｉに対する情報のうちの、アドレス１３に記憶された次段右側のノード（ノード３ｃ）の情報（フラグ３０７＝１，次段右側のノード（ノード３ｃ）のビット番号３０５＝１６，次段右側のノード（ノード３ｃ）へのポインタ３０３＝６）がノード用メモリ３０より出力される。
【００８２】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０７の値が１であるので、対象ノードであるノード３ｉの次段右側にノードがあると判断する（ステップＳＴ２３）。ここで、対象ノードが、その次段右側のノード３ｃに移動されたことになる（ステップＳＴ２４）。
【００８３】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１によりアドレス６に記憶されたノード３ｉに対応するエントリ３１１が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ｉに対応するエントリ３１１のデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリ３１１のデータがすべて０であるので、すなわち対象ノードであるノード３ｉにリーフがないので、ここで比較処理を完了する。
【００８４】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立つか否かの判断が実行されていないので（ステップＳＴ３０）、さらに検索処理および比較処理が実行される。
【００８５】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ｃのビット番号（＝１６）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビットの値が１であるので、次に、ノード３ｃに対する情報のうちの、アドレス７に記憶された次段右側のノード（ノード３ｋ）の情報（フラグ３０７＝１，次段右側のノード（ノード３ｋ）のビット番号３０５＝１９，次段右側のノード（ノード３ｋ）へのポインタ３０３＝１０）がノード用メモリ３０より出力される。
【００８６】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０７の値が１であるので、対象ノードであるノード３ｃの次段右側にノードがあると判断する（ステップＳＴ２３）。ここで、対象ノードが、その次段右側のノード３ｋに移動されたことになる（ステップＳＴ２４）。
【００８７】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１によりアドレス３に記憶されたノード３ｃに対応するエントリ３１１が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ｃに対応するエントリ３１１のデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリ３１１のデータのうちの宛先ネットワークＩＰアドレス、ネットワークマスクおよび中継アドレスの値が０ではないので、すなわち対象ノードであるノード３ｃにリーフがあるので、リーフ用メモリ３１より供給されたエントリの各データに基づいて、次の関係式が成り立つか否かを判断する（ステップＳＴ２８）。
（検索データ）＆（ネットワークマスク）
＝（宛先ネットワークＩＰアドレス）
【００８８】
ここで（０ｘ８０２０Ａ３２４）＆（０ｘＦＦＦＦ００００）＝（０ｘ８０２０００００）であるので関係式が成り立つと判断し、制御回路３２の比較処理部は、そのリーフのエントリ３１１を記憶する（ステップＳＴ２９）。
【００８９】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立ったので（ステップＳＴ３１）、さらに検索処理および比較処理が実行される。
【００９０】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ｋのビット番号（＝１９）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビットの値が０であるので、次に、ノード３ｋに対する情報のうちの、アドレス１０に記憶された次段左側のノード（ノード３ｄ）の情報（フラグ３０６＝１，次段左側のノード（ノード３ｄ）のビット番号３０４＝２０，次段左側のノード（ノード３ｄ）へのポインタ３０２＝４）がノード用メモリ３０より出力される。
【００９１】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０６の値が１であるので、対象ノードであるノード３ｋの次段左側にノードがあると判断する（ステップＳＴ２３）。ここで、対象ノードが、その次段左側のノード３ｄに移動されたことになる（ステップＳＴ２４）。
【００９２】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１によりアドレス５に記憶されたノード３ｋに対応するエントリ３１１が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ｋに対応するエントリ３１１のデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリ３１１のデータがすべて０であるので、すなわち対象ノードであるノード３ｋにリーフがないので、ここで比較処理を完了する。
【００９３】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立つか否かの判断が実行されてないので（ステップＳＴ３０）、さらに検索処理および比較処理が実行される。
【００９４】
まず、検索処理において、制御回路３２の検索処理部は、検索データのうちの、ＭＳＢから対象ノードであるノード３ｄのビット番号（＝２０）だけＬＳＢ側のビットの値が１であるか否かを判断する（ステップＳＴ２２）。そのビットの値が０であるので、次に、ノード３ｄに対する情報のうちの、アドレス４に記憶された次段左側のノードの情報（フラグ３０６＝０，次段左側のノードのビット番号３０４＝０，次段左側のノードへのポインタ３０２＝０）がノード用メモリ３０より出力される。
【００９５】
制御回路３２の検索処理部は、ノード用メモリ３０より供給されたそのフラグ３０６の値が０であるので、対象ノードであるノード３ｃの次段左側にノードがないと判断する（ステップＳＴ２３）。ここで検索処理を完了する。
【００９６】
この検索処理と並列に比較処理が実行される。比較処理においては、リーフ用メモリ３１によりアドレス２に記憶されたノード３ｄに対応するエントリ３１１が制御回路３２に出力される。そして、制御回路３２の比較処理部は、対象ノードであるノード３ｄに対応するエントリ３１１のデータがすべて０であるか否かを判断し（ステップＳＴ２７）、そのエントリ３１１のデータのうちの宛先ネットワークＩＰアドレス、ネットワークマスクおよび中継アドレスの値が０ではないので、すなわち対象ノードであるノード３ｄにリーフがあるので、リーフ用メモリ３１より供給されたエントリの各データに基づいて、次の関係式が成り立つか否かを判断する（ステップＳＴ２８）。
（検索データ）＆（ネットワークマスク）
＝（宛先ネットワークＩＰアドレス）
【００９７】
ここで（０ｘ８０２０Ａ３２４）＆（０ｘＦＦＦＦＦ０００）＝（０ｘ８０２０Ａ０００）≠（０ｘ８０２０８０００）であるので関係式が成り立たないと判断する。したがって、ここで比較処理を完了する。
【００９８】
このようにして、比較処理が実行される。そして、検索処理および比較処理が完了すると、上記関係式が成り立たなかったので（ステップＳＴ３１）、検索処理および比較処理が終了される。
【００９９】
そして、制御回路３２は、比較処理部にリーフのデータが記憶されているか否かを判断し（ステップＳＴ３２）、リーフ５ｃのエントリ３１１が記憶されているので、そのリーフ５ｃのエントリ３１１である宛先ネットワークＩＰアドレス（＝０ｘ８０２０００００）、ネットワークマスク（＝０ｘＦＦＦＦ００００）および中継先アドレス（＝０ｘ８０２０８４３Ｅ）を、検索データである宛先ＩＰアドレス（＝０ｘ８０２０Ａ３２４）に対応するものとして出力する（ステップＳＴ３３）。
【０１００】
このようにして、宛先ＩＰアドレス（０ｘ８０２０Ａ３２４）を検索データとしたときの宛先ネットワークアドレスや中継先アドレスが検索される。
【０１０１】
以上のように、この実施の形態１によれば、検索データの、対象ノードのビット番号に対応するビットの値に基づいて次段のノードを検索する検索処理と、対象ノードに接続されるリーフのデータと検索データとを比較する比較処理とを並列して実行するようにしたので、ハードウェアによる処理に適した、検索に要する時間を短縮することができるという効果が得られる。
【０１０２】
すなわち、従来のデータ検索方法においては、常に末端のノードまで検索処理を実行し、その後、スタックされたリーフのデータと検索データとの比較処理を順次実行しているが、この実施の形態においては、ノード毎に検索処理と比較処理が並列に実行されるので、比較処理により上記関係式が成り立たなくなった時点のノードまでで検索処理および比較処理を終了することができ、処理時間を短縮することができるという効果が得られる。また、検索処理と比較処理とは互いに独立しているため、すなわち両者の間でデータの授受が不要な処理であるため、専用ハードウェア（検索処理部および比較処理）により並列処理が簡単に実行することができるという効果が得られる。さらに、この実施の形態においては、従来のデータ検索方法のようにスタックを必要としないので、専用ハードウェアによる装置の実現がより簡単になる。そして、専用ハードウェアにより処理を実行することにより、いわゆるコンピュータを使用したソフトウェアでの処理に比較して、処理時間をさらに短縮することができるという効果が得られる。
【０１０３】
例えば、１つのノードに対して、ノード用メモリ３０およびリーフ用メモリ３１へのアクセスが１回ずつ実行されるので、そのアクセス時間以下の時間で制御回路３２における処理を実行すれば、例えば１回のアクセス時間が１０ナノ秒であるメモリを使用すると、３２ビット長のＩＰアドレスが宛先アドレス、宛先ネットワークアドレスに採用されている場合、検索に要する時間は６４０（＝（１０＋１０）×３２）ナノ秒以下になる。
【０１０４】
なお、実施の形態１においては、リーフの有無を、リーフ用メモリ３１からの各データの値がすべて０であるか否かで判断しているが、リーフ用メモリ３１に記憶されている各エントリ３１１にリーフの有無を示すフラグを設け、そのフラグの値に基づいてリーフの有無を判断するようにしてもよい。
【０１０５】
また、実施の形態１においては、１つのノードに対して、ノード用メモリ３０の２つのワード（２つのアドレスによる記憶場所）を使用しているが、１ワードのビット数が大きいメモリを使用して、１つのノードに対して１つのワードを使用するようにしてもよい。その場合、シフタ３４を削除することができる。
【０１０６】
実施の形態２．
図５は、この発明の実施の形態２によるデータ検索装置の構成例を示すブロック図である。実施の形態２によるデータ検索装置は、実施の形態１によるデータ検索装置のリーフ用メモリ３１をリーフ用メモリ４１に、制御回路３２を制御回路４２に変更したものであるので、そのリーフ用メモリ４１および制御回路４２についてだけ説明する。
【０１０７】
４１は、パトリシアツリーなどの検索木におけるリーフの情報を記憶するリーフ用メモリである。リーフ用メモリ４１は、リーフ毎に、宛先ネットワークＩＰアドレス３１２および中継先アドレス３１４で構成されるエントリ４１１を記憶している。なお、リーフ用メモリ４１における各エントリ４１１のアドレスは、そのエントリ４１１に対応するリーフが接続されるノードに対応するレコード３０１のノード用メモリ３０におけるアドレスを２分の１にした値の端数を切り捨てた値になるように設定されている。リーフを有さないノードに対応するリーフ用メモリ４１の記憶場所には、有意な情報は記憶されていない（ここでは値０が記憶される）。
【０１０８】
４２は、検索データである宛先ＩＰアドレスを受け取り、ノード用メモリ３０およびリーフ用メモリ４１から適宜情報を読み出し、後述のようにして、その宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスを選択し、検索結果として出力する制御回路（処理手段、データ保持手段、出力手段）である。なお、制御回路４２は、制御回路３２と同様に、互いに独立して動作する図示せぬ検索処理部と比較処理部を有し、検索処理部で検索処理を実行し、比較処理部で比較処理を実行する。
【０１０９】
次に動作について説明する。
この実施の形態２によるデータ検索装置においては、制御回路４２が、対象ノードのビット番号から、その対象ノードに接続されるリーフのデータの１つであるネットワークマスクを生成する。すなわち、制御回路４２は、ノード用メモリ３０より次段左側のノードのビット番号３０４、または次段右側のノードのビット番号３０５を供給されると、比較処理部において、その次段左側のノードに接続されるリーフのデータの一部としてのネットワークマスクを、ＭＳＢ側のビット番号３０４，３０５だけの各ビットの値を１とし、その他のビットの値を０として生成する。例えば、次段右側のノードのビット番号３０５が１６である場合、ネットワークマスクとして０ｘＦＦＦＦ００００が生成される。
【０１１０】
なお、この実施の形態２による制御回路４２の比較処理部は、リーフ用メモリ４１より供給された宛先ネットワークＩＰアドレスおよび中継先アドレスの値が０である場合に、リーフがないと判断する。したがって、実際にはリーフがない場合において、上述のようにネットワークマスクが生成されても特に問題は生じない。
【０１１１】
その他の動作については実施の形態１によるものと同様であるので、その説明を省略する。
【０１１２】
以上のように、この実施の形態２によれば、リーフ用メモリ４１にネットワークマスクを記憶しないので、リーフ用メモリ４１の記憶容量を低減することができ、装置のコストを低減することができるという効果が得られる。
【０１１３】
なお、実施の形態２においては、リーフの有無を、リーフ用メモリ４１からの各データの値がすべて０であるか否かで判断しているが、リーフ用メモリ４１に記憶されている各エントリ４１１にリーフの有無を示すフラグを設け、そのフラグの値に基づいてリーフの有無を判断するようにしてもよい。
【０１１４】
実施の形態３．
図６は、この発明の実施の形態３によるデータ検索装置の構成例を示すブロック図である。図において、４１Ａは、パトリシアツリーなどの検索木におけるリーフの情報を記憶するリーフ用メモリ（第３のリーフ情報記憶手段）である。リーフ用メモリ４１Ａは、リーフ毎に、宛先ネットワークＩＰアドレス３１２および中継先アドレス３１４で構成されるエントリ４１１を記憶している。なお、リーフ用メモリ４１Ａは、リーフ用メモリ３１，４１とは異なり、実際に存在するリーフに対するエントリのみを記憶している。
【０１１５】
５０は、各ノードに対応して、そのノードに接続されるリーフの有無を表すフラグ５０３およびそのリーフへのポインタ５０２で構成されるレコード５０１を記憶するリーフポインタ用メモリ（第２のリーフ情報記憶手段）である。５３は、リーフポインタ用メモリ５０より読み出されるアドレスを一時的に記憶し、リーフ用メモリ４１Ａに供給するレジスタ（処理手段）である。
【０１１６】
５２は、検索データである宛先ＩＰアドレスを受け取り、ノード用メモリ３０、リーフポインタ用メモリ５０、およびリーフ用メモリ４１Ａから適宜情報を読み出し、後述のようにして、その宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスを選択し、検索結果として出力する制御回路（処理手段、データ保持手段、出力手段）である。なお、制御回路５２は、制御回路３２，４２と同様に、互いに独立して動作する図示せぬ検索処理部と比較処理部を有し、検索処理部で検索処理を実行し、比較処理部で比較処理を実行する。
【０１１７】
その他の構成要素については、実施の形態２によるものと同様であるので、その説明を省略する。
【０１１８】
次に動作について説明する。
この実施の形態３においては、リーフポインタ用メモリ５０より、リーフの有無を表すフラグ５０３が制御回路５２に供給され、そのリーフへのポインタ５０２（リーフ用メモリ４１Ａにおいて、そのリーフに対応するエントリ４１１が記憶されているアドレス）がレジスタ５３に供給される。そして、そのポインタ５０２がリーフ用メモリ４１Ａに供給され、そのリーフに対応するエントリ４１１（宛先ネットワークＩＰアドレス３１２および中継先アドレス３１４）が制御回路５２に供給される。そして、制御回路５２の比較処理部は、比較処理において、フラグ５０３の値に基づいて、リーフの有無を判断する。
【０１１９】
その他の動作については実施の形態２によるものと同様であるので、その説明を省略する。
【０１２０】
以上のように、この実施の形態３によれば、実際に存在するリーフのみに対応してエントリを記憶するようにしたので、リーフ用メモリ４１Ａの記憶容量を低減することができ、装置のコストを低減することができるという効果が得られる。なお、その代わりにリーフポインタ用メモリ５０が必要になるが、リーフ用メモリ４１Ａのビット幅（ＩＰアドレスが３２ビットの場合、６４ビット）に比較して、リーフポインタ用メモリ５０のビット幅（例えば、リーフ用メモリ４１Ａのアドレスが１６ビットの場合、１７ビット）が小さいため、総合的にメモリの記憶容量を低減することができる。
【０１２１】
なお、実施の形態３においては、リーフ用メモリ４１Ａよりエントリ４１１が制御回路５２に供給され、比較処理が終了した後に、次のノードのデータがノード用メモリ３０およびリーフポインタ用メモリ５０より制御回路５２に供給されるが、リーフ用メモリ４１Ａからのエントリの読み出しと、ノード用メモリ３０およびリーフポインタ用メモリ５０からの次のノードのデータの読み出しとを同時に行い、さらに、それらの読出しの処理と比較処理とをパイプライン化するようにしてもよい。
【０１２２】
実施の形態４．
図７は、この発明の実施の形態４によるデータ検索装置の構成例を示すブロック図である。図８は、実施の形態４によるデータ検索装置のノード用メモリに記憶されるデータの一例を示す図である。図９は、実施の形態４によるデータ検索装置のリーフ用メモリに記憶されるデータの一例を示す図である。
【０１２３】
図７において、７０は、パトリシアツリーなどの検索木におけるノードの情報を記憶するノード用メモリ（ノード情報記憶手段）である。ノード用メモリ７０は、ノード毎に、次段左側のノードが末端のノード（すなわち、次段にノードを有さないノード）であり、かつリーフを有するか否かを示すフラグ７０８、次段右側のノードが末端のノードであり、かつリーフを有するか否かを示すフラグ７０９、次段左側にノードがあるか否かを示すフラグ３０６、次段右側にノードがあるか否かを示すフラグ３０７、次段左側のノードのビット番号３０４、次段右側のノードのビット番号３０５、ポインタ７０２、およびポインタ７０３で構成されるレコード７０１を記憶している。ただし、末端のノードに対するレコード７０１は記憶されていない。なお、フラグ３０６，３０７の値は、ノードがある場合１に設定され、そうでない場合０に設定される。また、フラグ７０８，７０９の値は、次段のノードが末端であり、かつリーフを有する場合１に設定され、そうでない場合０に設定される。なお、上記ポインタとは、そのノードの情報が記憶されている場所のアドレスである。
【０１２４】
なお、ポインタ７０２は、フラグ７０８が０である場合、次段左側のノードへのポインタ（ノード用メモリ７０において次段左側のノードのレコード７０１が記憶されているアドレス）であり、フラグ７０８が１である場合、次段左側の末端のノードに接続されるリーフへのポインタ（リーフ用メモリ３１Ａにおいて次段左側の末端のノードに接続されたリーフのエントリ３１１が記憶されているアドレスの２倍の値）である。ポインタ７０３は、フラグ７０９が０である場合、次段右側のノードへのポインタ（ノード用メモリ７０において次段右側のノードのレコード７０１が記憶されているアドレス）であり、フラグ７０９が１である場合、次段右側の末端のノードに接続されるリーフへのポインタ（リーフ用メモリ３１Ａにおいて次段右側の末端のノードに接続されたリーフのエントリ３１１が記憶されているアドレスの２倍の値）である。
【０１２５】
例えば図１２の検索木のノードに対応する情報は、図８に示すような値として記憶される。図８においては、アドレス０に初期情報（処理の最初に参照される情報）が記憶され、アドレス２，３にノード３ａに対応するレコード７０１が記憶され、アドレス４，５にノード３ｃに対応するレコード７０１が記憶され、アドレス６，７にノード３ｈに対応するレコード７０１が記憶されており、さらに、アドレス８，９にノード３ｋに対応するレコード７０１が記憶され、アドレス１０，１１にノード３ｉに対応するレコード７０１が記憶され、以下同様に、残りのノードに対応するレコード７０１が記憶されている。そして、アドレス８，９，１０に記憶されたポインタ７０２，７０３は、末端のノードに接続されたリーフへのポインタである。これらの値が２５６、２５８および２６０であるので、末端のノードに接続されたリーフ５ｄ，５ｅ，５ｂに対応するエントリ３１１は、リーフ用メモリ３１Ａのアドレス１２８，１２９，１３０にそれぞれ記憶されている。
【０１２６】
３１Ａは、パトリシアツリーなどの検索木におけるリーフの情報を記憶するリーフ用メモリ（第１のリーフ情報記憶手段）である。リーフ用メモリ３１Ａは、リーフ用メモリ３１と同様に、リーフ毎に、宛先ネットワークＩＰアドレス３１２、ネットワークマスク３１３、および中継先アドレス３１４で構成されるエントリを記憶している。ただし、リーフ用メモリ３１Ａでは、末端のノードに接続されたリーフのエントリ３１１は、上述のフラグ７０８，７０９が１である場合のポインタ７０２，７０３に関連づけて記憶されている。
【０１２７】
例えば図１２の検索木のリーフに対応する情報は、図９に示すような値として記憶される。図９においては、アドレス０には、初期情報（処理の最初に参照される情報）に対応して、リーフなしを示す値０が記憶され、アドレス１にノード３ａに接続されたリーフ５ａに対応するエントリ３１１が記憶され、アドレス２にノード３ｃに接続されたリーフ５ｃに対応するエントリ３１１が記憶される。さらに、ノード３ｈ、ノード３ｋ、およびノード３ｉにはリーフが接続されていないので、アドレス３〜５には値０が記憶されている。以下同様に、残りのノードに対応してそれぞれ値が記憶されている。そして、アドレス１２８，１２９，１３０に、末端のノードに接続されたリーフ５ｄ，５ｅ，５ｂに対応するエントリ３１１がそれぞれ記憶されている。
【０１２８】
７２は、検索データである宛先ＩＰアドレスを受け取り、ノード用メモリ７０およびリーフ用メモリ３１Ａから適宜情報を読み出し、後述のようにして、その宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスを選択し、検索結果として出力する制御回路（処理手段、データ保持手段、出力手段）である。なお、制御回路７２は、制御回路３２と同様に、互いに独立して動作する図示せぬ検索処理部と比較処理部を有し、検索処理部で検索処理を実行し、比較処理部で比較処理を実行する。
【０１２９】
その他の構成要素については、実施の形態１によるものと同様であるので、その説明を省略する。
【０１３０】
次に動作について説明する。
この実施の形態４においては、ノード用メモリ７０より、フラグ７０８，７０９、フラグ３０６，３０７，ビット番号３０４，３０５が制御回路７２に供給され、ポインタ７０２，７０３がレジスタ３３に供給される。そして、制御回路７２は、フラグ７０８，７０９の値に基づいて、対象ノードが末端のノードであるのか否かを判断する。
【０１３１】
その他の動作については実施の形態１によるものと同様であるので、その説明を省略する。
【０１３２】
以上のように、この実施の形態４によれば、ノード用メモリ７０に、次段のノードが末端のノードであり、かつリーフを有するか否かを示すフラグ７０８，７０９を記憶するとともに、その末端のノードの有するリーフへのポインタ７０２，７０３を記憶するようにしたので、末端のノードに対するレコード７０１をノード用メモリ７０に記憶する必要がなくなり、メモリの記憶容量を低減することができ、装置のコストを低減することができるという効果が得られる。
【０１３３】
実施の形態５．
図１０は、この発明の実施の形態５によるデータ検索装置の構成例を示すブロック図である。図において、８１は、パトリシアツリーなどの検索木におけるリーフの情報を記憶するリーフ用メモリ（第４のリーフ情報記憶手段）である。リーフ用メモリ８１は、リーフ毎に、宛先ネットワークＩＰアドレス３１２およびエントリ情報へのポインタ８１２（エントリ情報用メモリ８０においてそのリーフのデータである中継先アドレスなどのエントリ情報が記憶されているアドレス）で構成されるエントリ８１１を記憶している。なお、リーフ用メモリ８１における各エントリのアドレスは、そのエントリに対応するリーフが接続されるノードに対応するレコード３０１のノード用メモリ３０におけるアドレスを２分の１にした値の端数を切り捨てた値になるように設定されている。リーフを有さないノードに対応するエントリ８１１の宛先ネットワークＩＰアドレス３１２およびエントリ情報へのポインタ８１２は、値０に設定される。
【０１３４】
８０は、リーフ毎に、中継先アドレス３１４などのエントリ情報を記憶するエントリ情報用メモリ（第５のリーフ情報記憶手段）である。ただし、リーフがない場合、エントリ情報へのポインタ８１２として０が記憶されるので、アドレス０には、有意な情報は記憶されない。８３は、リーフ用メモリ８１より供給されるアドレス（エントリ情報へのポインタ８１２）が０でない場合、そのアドレスを一時的に記憶し、制御回路８２から所定の信号が供給されると、そのアドレスをエントリ情報用メモリ８０に供給するアドレス記憶部（処理手段）である。
【０１３５】
８２は、検索データである宛先ＩＰアドレスを受け取り、ノード用メモリ３０、リーフ用メモリ８１、およびエントリ情報用メモリ８０から適宜情報を読み出し、後述のようにして、その宛先ＩＰアドレスに対応する宛先ネットワークＩＰアドレスや中継先アドレスを選択し、検索結果として出力する制御回路（処理手段、データ保持手段、出力手段）である。なお、制御回路８２は、制御回路３２，４２と同様に、互いに独立して動作する図示せぬ検索処理部と比較処理部を有し、検索処理部で検索処理を実行し、比較処理部で比較処理を実行する。
【０１３６】
その他の構成要素については実施の形態２によるものと同様であるので、その説明を省略する。
【０１３７】
次に動作について説明する。
この実施の形態５においては、対象ノードに接続されたリーフのデータである宛先ネットワークＩＰアドレス３１２がリーフ用メモリ８１より制御回路８２に供給され、その宛先ネットワークＩＰアドレス３１２と同一のエントリ８１１に属するポインタ８１２が、その値が０ではない場合には、アドレス記憶部８３に記憶される。そして、検索データに対応する宛先ネットワークＩＰアドレス３１２が確定した後に、制御回路８２は、所定の信号をアドレス記憶部８３に供給し、記憶しているアドレスをエントリ情報用メモリ８０に供給させる。そして、確定した宛先ネットワークＩＰアドレス３１２に対応した中継先アドレス３１４が、エントリ情報用メモリ８０より制御回路８２に供給される。
【０１３８】
そして、制御回路８２は、確定した宛先ネットワークＩＰアドレスおよびエントリ情報用メモリ８０からの中継先アドレス３１４を検索結果として出力する。また、制御回路８２は、エントリ情報へのポインタ８１２の値が０ではない場合、リーフがあると判断し、そうでない場合、リーフがないと判断する。
【０１３９】
その他の動作については実施の形態２によるものと同様であるので、その説明を省略する。
【０１４０】
以上のように、この実施の形態５によれば、中継先アドレスなどのエントリ情報を検索処理および比較処理が終了した後に１回読み出すだけであるので、検索処理および比較処理ごとにエントリ情報の授受を実行しなくても済み、処理時間を短縮することができるという効果が得られる。さらに、この実施の形態５においては、エントリ情報として中継先アドレスだけが記憶されているが、他の情報を追加してもよい。そして、他の情報が追加された場合、エントリ情報の読み出し回数が低減されたことによる上記効果がより顕著になる。
【０１４１】
なお、上記実施の形態１〜５においては、各ノードのビット番号に対応して値を検査するビット数を１としているが、このときに複数のビット数ｎを検査するようにしてもよい。その場合には、１つのノードに、最大２のｎ乗の次段のノードが接続される（すなわち検索木をマルチウェイツリーとする）ようにしてもよい。
【０１４２】
【発明の効果】
以上のように、この発明によれば、検索データの、対象ノードのビット番号が指す桁の値に基づいて次段のノードの中から次の対象ノードを検索する検索処理と、対象ノードに接続されるリーフの被検索データと検索データとを所定の桁について比較する比較処理とを並列して実行し、比較処理により所定の桁について被検索データと検索データとが一致した場合に被検索データを保持し、検索処理により次段のノードが存在しない場合、および、比較処理により所定の桁について被検索データと検索データとが一致しない場合に、最後に保持した被検索データを検索結果として出力するように構成したので、ハードウェアによる処理に適した、検索に要する時間を短縮することができるという効果がある。ひいては、本発明をルータなどのパケット中継装置に適用することにより、パケットの中継を迅速に実行することができるという効果がある。
【０１４３】
この発明によれば、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第２のリーフ情報記憶手段から、対象ノードに接続されるリーフへのポインタを読み出し、そのポインタに基づいて第３のリーフ情報記憶手段から、そのリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータより指定された桁についてその被検索データと検索データとを比較するように構成したので、第３のリーフ情報記憶手段の記憶容量を低減することができ、装置のコストを低減することができるという効果がある。
【０１４４】
この発明によれば、対象ノードのビット番号に基づいて、ノードに接続されるリーフの被検索データと検索データとを比較する桁を決定するように構成したので、第１のリーフ情報記憶手段の記憶容量を低減することができ、装置のコストを低減することができるという効果がある。
【０１４５】
この発明によれば、処理手段により、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタまたは末端のノードに接続されたリーフへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第１のリーフ情報記憶手段から、対象ノードに接続されるリーフまたは末端のノードに接続されたリーフの被検索データおよびその被検索データに付随するデータを読み出し、その被検索データに付随するデータにより指定された桁についてその被検索データと検索データとを比較するように構成したので、末端のノードに対するデータをノード情報記憶手段に記憶する必要がなくなり、メモリの記憶容量を低減することができ、装置のコストを低減することができるという効果がある。
【０１４６】
この発明によれば、ノード情報記憶手段から、対象ノードに対応するビット番号を読み出し、そのビット番号が指す桁の値に基づいて次段のノードへのポインタをノード情報記憶手段から読み出して次段のノードの中から次の対象ノードを検索するとともに、第４のリーフ情報記憶手段から、対象ノードに接続されるリーフの被検索データおよびその被検索データに付随するデータへのポインタを読み出し、所定の桁についてその被検索データと検索データとを比較し、検索により次段のノードが存在しない場合および比較により所定の桁について被検索データと検索データとが一致しない場合に被検索データに付随するデータへのポインタに基づいて第５のリーフ情報記憶手段からその被検索データに付随するデータを読み出し、上記比較により所定の桁について被検索データと検索データとが一致した場合に、被検索データを保持し、上記検索により次段のノードが存在しない場合、および上記比較により所定の桁について被検索データと検索データとが一致しない場合に、最後に保持した被検索データおよび読み出されたその被検索データに付随するデータを検索結果として出力するように構成したので、付随するデータを検索処理および比較処理が終了した後に１回読み出すだけで済み、検索処理および比較処理ごとにその付随するデータの授受を実行しなくても済み、処理時間を短縮することができるという効果がある。
【図面の簡単な説明】
【図１】この発明の実施の形態１によるデータ検索装置の構成例を示すブロック図である。
【図２】この発明の実施の形態１によるデータ検索装置のノード用メモリに記憶されるデータの一例を示す図である。
【図３】この発明の実施の形態１によるデータ検索装置のリーフ用メモリに記憶されるデータの一例を示す図である。
【図４】この発明の実施の形態１によるデータ検索装置の動作について説明するフローチャートである。
【図５】この発明の実施の形態２によるデータ検索装置の構成例を示すブロック図である。
【図６】この発明の実施の形態３によるデータ検索装置の構成例を示すブロック図である。
【図７】この発明の実施の形態４によるデータ検索装置の構成例を示すブロック図である。
【図８】この発明の実施の形態４によるデータ検索装置のノード用メモリに記憶されるデータの一例を示す図である。
【図９】この発明の実施の形態４によるデータ検索装置のリーフ用メモリに記憶されるデータの一例を示す図である。
【図１０】この発明の実施の形態５によるデータ検索装置の構成例を示すブロック図である。
【図１１】従来のルータなどに記憶されたルーティングテーブルの一例を示す図である。
【図１２】図１１のルーティングテーブルと同一のルーティング情報を有するパトリシアツリーの一例を示す図である。
【図１３】従来のデータ検索方法について説明するフローチャートである。
【符号の説明】
３０，７０  ノード用メモリ（ノード情報記憶手段）、３１，３１Ａ  リーフ用メモリ（第１のリーフ情報記憶手段）、３２，４２，５２，７２，８２  制御回路（処理手段、データ保持手段、出力手段）、３３，５３  レジスタ（処理手段）、３４  シフタ（処理手段）、４１Ａ  リーフ用メモリ（第３のリーフ情報記憶手段）、５０  リーフポインタ用メモリ（第２のリーフ情報記憶手段）、８０  エントリ情報用メモリ（第５のリーフ情報記憶手段）、８１  リーフ用メモリ（第４のリーフ情報記憶手段）、８３  アドレス記憶部（処理手段）。
【図１】
0003547625.tif 000002
【図２】
0003547625.tif 000003
【図３】
0003547625.tif 000004
【図４】
0003547625.tif 000005
【図５】
0003547625.tif 000006
【図６】
0003547625.tif 000007
【図７】
0003547625.tif 000008
【図８】
0003547625.tif 000009
【図９】
0003547625.tif 000010
【図１０】
0003547625.tif 000011
【図１１】
0003547625.tif 000012
【図１２】
0003547625.tif 000013
【図１３】
0003547625.tif 000014