WO2022097725A1 - 情報処理装置、情報処理方法及びコンピュータプログラム - Google Patents

情報処理装置、情報処理方法及びコンピュータプログラム Download PDF

Info

Publication number
WO2022097725A1
WO2022097725A1 PCT/JP2021/040841 JP2021040841W WO2022097725A1 WO 2022097725 A1 WO2022097725 A1 WO 2022097725A1 JP 2021040841 W JP2021040841 W JP 2021040841W WO 2022097725 A1 WO2022097725 A1 WO 2022097725A1
Authority
WO
WIPO (PCT)
Prior art keywords
node
bit
search
transition
value
Prior art date
Application number
PCT/JP2021/040841
Other languages
English (en)
French (fr)
Inventor
大史 浅井
Original Assignee
株式会社 Preferred Networks
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社 Preferred Networks filed Critical 株式会社 Preferred Networks
Publication of WO2022097725A1 publication Critical patent/WO2022097725A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/22Arrangements for preventing the taking of data from a data transmission channel without authorisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

[課題]検索処理を高速に行うことが可能にする。 [解決手段]本実施形態に係る情報処理装置は、検索キーにおいて参照するk(kは1以上の整数)個のビットを指定した参照情報と、前記参照情報により指定されるビットの値に応じて遷移先のノードを定めた少なくとも1つの遷移条件と、を含む複数のノードを有するデータ構造に対して、前記検索キーに合致するノードの検索を行う検索処理部を備える。少なくとも1つのノードにおける前記遷移条件の少なくとも1つは、前記参照情報により指定されるビットの少なくとも1つの特定のビットが第1値及び第2値のいずれであることを許容する。前記検索処理部は、前記少なくとも1つの遷移条件のうち前記参照情報により指定されるビットが満たしている遷移条件を特定し、特定した前記遷移条件が定めるノードに遷移することにより、前記検索キーに合致するノードの検索を行う。

Description

情報処理装置、情報処理方法及びコンピュータプログラム
 本開示は、情報処理装置、情報処理方法及びコンピュータプログラムに関する。
 インターネットが必要不可欠なインフラになってきたことにより、ネットワークセキュリティが重要になってきている。ファイヤウォールのようなネットワーク装置が、認証されていないネットワークアクセスから情報を保護するために用いられている。
 ファイヤウォール機能としてネットワーク装置にネットワークアクセス制御リスト(ACL:Access Control List)を設け、ACLに基づき、パケットのフィルタリングを行うことが一般的に行われている。ACLは、複数のレイヤの通信プロトコルのヘッダ情報を用いてパケットをフィルタリングするルールを複数集めたルールの集合である。ACLの各ルールはコンピュータ上ではビット列によって表され、ビット列は“0”、“1”以外にワイルドカード“*”を許容する。受信したパケットのヘッダ情報が各ルールにマッチングするか否かは3値マッチング問題(ternary matching problem)として一般化されることができる。
 既存のアルゴリズムは、ACLのルールをワイルドカードの前後で分割し、分割された複数の部分を用いて決定木を生成する。決定木を用いて、ヘッダ情報が各ルールにマッチングするか否か(ルールを満たすか否か)を判定する。しかしながら、このアルゴリズムは、市販のCPUでは高い性能を得ることができず、決定木の生成にも時間が要する問題があった。3値のマッチングを行う専用のデバイスとしてTCAM(Ternary Content Addressable Memory)が知られているが、消費電力、コスト、及び拡張性等に問題がある。市販のCPUで高い性能を得ることが可能なアルゴリズムの開発が要求されている。
特開2016-170818号公報
 本開示は、検索処理を高速に行うことが可能な情報処理装置、情報処理方法及びコンピュータプログラムを提供する。
 本実施形態に係る情報処理装置は、検索キーにおいて参照するk(kは1以上の整数)個のビットを指定した参照情報と、前記参照情報により指定されるビットの値に応じて遷移先のノードを定めた少なくとも1つの遷移条件と、を含む複数のノードを有するデータ構造に対して、前記検索キーに合致するノードの検索を行う検索処理部を備える。少なくとも1つのノードにおける前記遷移条件の少なくとも1つは、前記参照情報により指定されるビットの少なくとも1つの特定のビットが第1値及び第2値のいずれであることを許容する。前記検索処理部は、前記少なくとも1つの遷移条件のうち前記参照情報により指定されるビットが満たしている遷移条件を特定し、特定した前記遷移条件が定めるノードに遷移することにより、前記検索キーに合致するノードの検索を行う。
本実施形態に係る情報処理装置である通信装置の一例のブロック図。 3値マッチングテーブルの一例を示す図。 ACLの一例を示す図。 比較例として、基数木の一例を示す図。 比較例として、パトリシアトライの一例を示す図。 本実施形態に係るパームトライの一例を示す図。 パームトライにおけるノードの構造の一例を示す図。 パームトライの探索動作の一例を示すフローチャート。 kビット幅のパームトライの一部を模式的に示す図。 比較例として、3分木の例を示す図。 図10の3分木に図9のパームトライを重ねた図。 パームトライにおいて子ノードへのポインタを取得するデータ構造の例を示す図。 チャンクと、チャンクのプレフィクスと、パラメータh、gとの関係を示した表を示す図。 3ビット幅のパームトライにおけるノードの構造の一例を示す図。 第2実施形態に係るパームトライの探索動作の一例を示すフローチャート。 第2実施形態に係るパームトライの具体例を示す図。 図16のパームトライにおける部分木T1の例を示す図。 図16のパームトライにおける部分木T2の例を示す図。 図16のパームトライにおける部分木T3の例を示す図。 図16のパームトライにおける部分木T4と、部分木T4につながる部分木T5の例を示す図。 図16のパームトライにおける部分木T6の例を示す図。 図16のパームトライにおける部分木T7の例を示す図。 図16のパームトライにおける部分木T8の例を示す図。 ヌルノードを示すポインタを斜線で示した図。 図24のノード構造を圧縮した、変形例1に係るノード構造を示す図。 変形例2に係るノードの構造の例を示す図。 情報処理装置のハードウェア構成の一例を示すブロック図。
 以下、図面を参照して、本開示の実施形態について説明する。図面は、本開示の実施形態を一例として模式的に示すものであり、本開示の実施形態は、図面に開示された形態に限定されるものではない。複数の図において同一の要素には同一の符号を付し、説明済みの要素の説明は適宜省略する。
(第1実施形態)
 本実施形態では、ファイヤウォールやルータ等の通信装置において、受信したパケットのヘッダ情報から検索キーを生成し、生成した検索キーを用いてネットワークアクセス制御リスト(ACL:Access Control List)から、マッチするルールを検索する。ACLは、複数のレイヤの通信プロトコルのヘッダ情報を用いてパケットを処理(フィルタリング等)するルールを複数集めたルールの集合である。検索キーとは検索のキーとなるデータである。ACLの各ルールは、検索の対象となるデータであるキーデータ(検索対象データ)と、パケットに対して行う処理(アクション)を表したバリュー等を含む。通信装置では、検索キーを満たすキーデータを有するルールを探索する。通信装置は、検索されたルールに示されるバリューが示す処理を実行する。本実施形態は、検索キーにマッチするルールを効率的又は高速に検索する技術に関連する。但し、本実施形態の適用対象はルールの検索に限定されず、情報の検索一般に可能である。例えば、住所録から検索キーにマッチする住所を含むレコードを検索することも可能である。
 図1は、本実施形態に係る情報処理装置である通信装置の一例のブロック図である。図1の通信装置1は、無線又は有線のネットワークを介して受信したパケットの中継を行うファイヤウォールやルータ等のネットワーク装置である。図1の通信装置1は、受信部11、パケット処理部12、記憶部13、検索キー生成部14、検索処理部15及び送信部16を備えている。
 受信部11は、無線又は有線のネットワークを介してパケットを受信する。パケットは情報の伝送単位の一例を示すものであり、フレーム、セグメント又はデータグラムなどに読み替えることも可能である。
 パケット処理部12は、受信したパケットに対して行う処理を決定し、決定した処理をパケットに対して行う。例えばパケットを中継すべきか(通過させるべきか)、遮断すべきかを判断する。但し、パケットに行う処理の例は中継の許可、又は遮断に限定されず、例えば、パケットの転送先の決定、 別のプロトコルでカプセル化をして転送すること、ルールに一致したパケットの統計情報(パケット数やバイト数など)の取得、転送時のパケットスケジューリングの優先度の決定、転送時のパケットのキューの決定がある。その他、パケットを一定期間保存すること、パケットに含まれるデータからファイルを生成し、ファイルが安全か否かを検証することなど、様々可能である。パケット処理部12は、パケットに対して行う処理の種類に応じて複数のエンジンを備えていてもよい。パケット処理部12は、パケットの処理を決定するために、検索キー生成部14及び検索処理部15を用いる。
 検索キー生成部14は、受信されたパケットのヘッダの情報から検索キーを生成する。検索処理部15は、検索キーに基づきACLからマッチするルールを検索し、検索されたルールに示されるアクション(処理)を示す情報をパケット処理部12に提供する。
 パケット処理部12は検索処理部15から提供された情報に基づきパケットを処理する。例えば、当該情報が中継を許可するものである場合は、パケットの転送先を決定し、決定した転送先に送信するパケットを生成して、送信部16に提供する。当該情報がパケットの中継を認めない(遮断)するものである場合は、パケットを廃棄する。パケットの送信元にパケットの中継を認めないことを示す応答パケットを生成し、応答パケットを送信部16に提供してもよい。
 送信部16はパケット処理部12から提供されたパケットを、無線又は有線のネットワークに送信する。受信部11及び送信部16は1つ以上のインタフェース(ポート)を備えていてもよい。受信部11及び送信部16でインタフェースが共通でもよいし、別々のインタフェースでもよい。ACLのルールマッチング及びマッチするルールに応じたパケット処理は、インタフェースごとに別々のACLを用いて行ってもよいし、複数又は全てのインタフェースで共通のACLを用いて行ってもよい。またACLのルールマッチングは、受信インタフェースで受信されたパケットに対してルーティング処理を行う前に行ってもよいし、ルーティング処理で送信インタフェースが決定された後に、行ってもよいし、これらの両方で行ってもよい。ルーティング処理前に行う場合、受信インタフェースで受信したパケットに対してACLのルールマッチングを行い、パケットに対する処理を決定する。通過許可であればパケットをパケット処理部12のルーティングエンジンに提供し、それ以外の場合はマッチするルールに応じた処理エンジンに渡す。ルーティング処理により送信インタフェースが決定された後に、ACLのルールマッチングを行う場合は、例えば送信インタフェースに関連するACLのルールマッチングを、送信するパケットに行い、通過許可であれば送信インタフェースにパケットを渡し、それ以外の場合は、マッチするルールに応じた処理エンジンに渡す。
 通信装置1が無線通信を行う場合は、送信部16及び受信部11にアンテナが設けられてもよい。送信部16及び受信部11は物理的に同一のインタフェースでも別々のインタフェースでもよい。
 記憶部13には、ACL、ACLの効率的に検索するためのデータ構造とである検索木(後述のパームトライ)、パケットの転送先を決定するルーティングテーブルなどが格納されている。通信装置1の受信部11、送信部16、パケット処理部12、検索キー生成部14、検索処理部15の動作の一部又は全部は、一例としてコンピュータプログラムをCPU等のプロセッサに実行させることにより実現される。この場合、コンピュータプログラムも記憶部13に格納されていてよい。記憶部13はメモリ、ハードディスク、光記憶装置など、任意の記録媒体である。
 上述のように本実施形態は、ACLにおいて検索キーにマッチするルールを効率的又は高速に検索する技術に関連する。ACLの各ルールはコンピュータ上ではビット列によって表され、ビット列は“0”、“1”以外にワイルドカード“*”を許容する。“*”は“0”でも“1”でもよいことを意味する。“*”に対応するビットを、ドントケアビットと呼ぶ。“*”を考慮する場合、受信したパケットのヘッダ情報が各ルールにマッチングするか否かは3値マッチング問題(ternary matching problem)として一般化されることができる。そこで、以下では、まず3値マッチング問題と、3値マッチング問題の適用対象であるACLの概要について説明する。
 3値マッチング問題は、各々優先度を有する複数のエントリを格納したテーブル(3値マッチングテーブル)において、検索キーにマッチする、最も優先度の高いエントリを検索することである。
 図2は、3値マッチングテーブルの一例を示す。3値マッチングテーブルの各エントリは、エントリIDと、キーデータと、アクションを示すバリューと、優先度とを含む。
 エントリIDは、各エントリを識別するIDである。図の例では、1~9の9個のエントリが示されるが、エントリ数は0以上であれば、任意の個数でよい。
 各エントリの優先度としてP1~P9が示される。優先度はPX(Xは整数)によって表される。Xの値が大きいほど、優先度が高い。図2の例では、優先度P9が最も高い優先度であり、優先度P1が最も低い優先度である。
 キーデータはビット列によって表される。ビット列は、3種類のビット値、“0”、“1”、“*”を含む。“*”はドントケアビット値であり、“0”でも“1”でもよい。例えば、キーデータ011*1000は、検索キー01101000と01111000のいずれにもマッチする。キーデータのビット長は8であるが、8より短くても、8より長くてもよい。“0”は一例として第1値及び第2値のいずれか一方に対応し、“1”はいずれか他方に対応する。
 検索キーは“0”又は“1”を含む2値のビット列であり、ドントケアビット値である“*”を含まない。検索キーは、図2の複数のエントリにマッチしてもよく、この場合、最も優先度の高いエントリを検索結果として取得する。
 バリューは、当該バリューを含むエントリが検索結果として返された場合に行う処理(アクション)を識別する値である。例えば“A9”はパケットを通過させない(パケットを遮断する)、“A1”はパケットを中継する(パケットを通過させる)などである。バリューはA1~A9の9種類の値が示されるが、バリューの値は2種類以上であればよい。
 以下、図2のテーブルを用いた検索の具体例を示す。検索キーが01110101である場合、キーデータが0*1101**と01110***の2つのエントリにマッチする。これら2つのエントリの優先度を比較し、最も大きい優先度のエントリを選択する。0*1101**のエントリの優先度はP7であり、01110***のエントリの優先度はP2である。よって、この場合、優先度の高い0*1101**のエントリを検索結果として取得する。このエントリに含まれるバリューの値A7に応じたアクションが実行される。
 3値マッチングをACLに適用する場合、各エントリがACLの各ルール(エントリ)に対応する。ACLの各エントリは、一例として通信プロトコルのレイヤ2~4のヘッダ情報によって定められる。ヘッダ情報の例として、宛先MACアドレス、送信元MACアドレス、イーサタイプ(EtherType)、IEEE802.1Q(VLAN:Virtual Local Area Network)タグ情報、送信元IPアドレス、宛先IPアドレス、プロトコル番号、送信元TCP/UDPポート番号、宛先TCP/UDPポート番号、TCPフラグ(TCP flags)などがある。これら複数の項目から選択した1つ以上の項目の値が、3値ビット列、すなわち0と1と*とのビット列によって、エントリのキーデータとして表現される。なお、IPアドレスは、通常、プレフィクス表記によってサブネットとして特定される。192.0.2.0/24であれば、192.0.2.0を表す32ビットのうちの先頭の24ビットを表す。TCPフラグは、0と1と*との3値のビット列によって表される。
 図3は、ACLの一例を示す。5個のエントリ(ルール)が示される。各エントリのエントリIDの表記は省略している。各エントリは優先度によって並べられており、一番上のエントリの優先度が最も高く、下に行くに従って小さくなる。パケットの通過(permit)/遮断(deny)の2つがバリューとして含まれる。バリューの右側にキーデータが示されている。図2の例では、簡単のため、レイヤ2のルールは省略し、レイヤ3と4のルールのみを示している。各エントリは、複数の項目を含んでいる。複数の項目は、アクション、プロトコル名(IPもしくはIPより上位の任意のプロトコル)、送信元IPアドレスのプレフィクス、送信元ポート番号(オプション)、レイヤ4に対して範囲を表す用語(例えば等しいを意味する“eq”)に続く送信元ポート番号範囲(オプション)、宛先IPアドレスのプレフィクス、範囲を表す用語に続く宛先ポート番号範囲(オプション)、TCPフラグが示す状態の用語、のうちの2つ以上を含んでいる。より詳細には、以下の通りである。
 一番上のエントリは、プロトコル名がIPであり、送信元が192.0.2.0/24の内部ネットワークであり、宛先が0.0.0.0/0のネットワークである場合、全てのパケットの通過を許可する(permit)。0.0.0.0/0は、0.0.0.0の32ビットはすべてワイルドカード“*”であること(宛先IPアドレスは何でもよいこと)を意味する。
 上から2番上のエントリは、プロトコル名がICMPであり、送信元が0.0.0.0/0のネットワークであり、宛先が192.0.2.0/24の内部ネットワークである場合、全てのパケットの通過を許可する(permit)。0.0.0.0/0は、0.0.0.0の32ビットはすべてワイルドカード“*”であること(送信元IPアドレスは何でもよいこと)を意味する。
 上から3番目のエントリは、プロトコル名がUDPであり、ポート番号が53であるDNS応答のパケットの場合、送信元のIPアドレスに拘わらず、192.0.2.0/24の内部ネットワーク宛のパケットの通過を許可する。送信元のIPアドレスが0.0.0.0/0であることは、送信元のIPアドレスが何でも良いことを意味する。
 上から4番目のエントリは、プロトコル名がTCPであり、TCPフラグが“established”を示していれば、送信元のIPアドレスに拘わらず、192.0.2.0/24の内部ネットワーク宛のパケットの通過を許可する。TCPフラグが“established”を示すことは、ACKフラグ又はRSTフラグが1になっていることを意味する。当該4番目のエントリは2つの3値マッチングエントリに変換可能であり、一方が****1****(ACK)を含み、他方が*****1***(RST)を含む。図2の例では示していないが、エントリに複数のポート番号を含む範囲が示されている場合もあり得る。この場合、当該エントリを、同様にして、複数のエントリに変換可能である。
 一番下のエントリは、プロトコル名がIPであり、192.0.2.0/24の内部ネットワーク宛のパケットであれば、送信元のIPアドレスに拘わらず、パケットの通過を拒否(deny)する。
 検索キーがACLの各エントリに一致するかどうかは、単純な方法としてACLの最上位のエントリから検索することが考えられる。この場合、nのオーダーの計算量が発生する。したがって、ACLサイズが大きい場合、この方法は効率的でない。
 検索キーに対応するエントリを検索する他の方法として、検索木が知られている。検索木の基本的なデータ構造として、ラディックス木(基数木)、パトリシアトライが知られている。これらの検索木は一般にトライ(trie)と呼ばれている。トライにおいて、あるノードの下位ノードは、当該あるノードと共通のプレフィクスを有する。それ故、トライは、プレフィクス木とも呼ばれる。
 本実施形態では、後述するパームトライ(Palmtrie)と名付けた検索木を導入する。パームトライの理解を容易にするため、基数木とパトリシアトライについて説明する。
 図4は、基数木の一例を示す。キーデータとして100,001,010が3つのノードに含まれている。基数木は2値木である。基数木の各枝(ブランチ)は親ノードのプレフィクスに1ビットを追加する。ノードの左側の枝には0、右側の枝には1が割り当てられている。深さdのノードのプレフィクスは、先頭(上位ビット側)からd番目のビットの値である。本実施形態では根ノード(ルートノード)の深さを0とする。
 基数木の探索は、各ノードで、検索キーの最上位ビットからd番目のビット値を調べることによって検索木を辿ることによって行われる。丸のノードに含まれている値は、ノードのID(エントリID)を表す。エントリが対応づいていないノードには番号(ノードID)が示されていない。エントリ2のキーデータ001はID=2のノードに対応し、エントリ3のキーデータ010はID=3のノードに対応し、エントリ1のキーデータ100はID=1のノードに対応する。葉ノード(リーフノード)である四角のノードは、ヌルノード(空ノード)を表す。ヌルノードは処理の便宜のために設けられたノードである。例えば検索キーが4ビット以上の場合、ヌルノードに分類される。ヌルノードを設けない構成も可能である。
 図5は、パトリシアトライの一例を示す。図4の基数木の例と同様に、キーデータとして100,001,010が3つのノードに含まれている。パトリシアトライは基数木を圧縮した木であり、キーデータ数(エントリ数)と、ノード(葉ノードを除く)の個数とが一致する。非葉ノード(根ノードと中間ノード)には、バリュー(アクション)と、2つの下位ノードへのポインタとが入っている。葉ノードにバリューは入っていないが、一部の葉ノードにはポインタが入っている(破線の矢印を参照)。ポインタが入っていない葉ノードはヌルノードに相当する。丸のノードに含まれている値は、ノードのID(エントリID)を表す。
 パトリシアトライでは、キーデータを含むノードにビットインデクス(図の“Bit”)が設けられている。ビットインデクスは、検索キーからビットを抽出して、分岐方向(左又は右)を決定するために用いられる参照情報である。ノードのキーデータにおいて最上位ビットからビットインデクスが示すビットまでのビット列は、該当するノードのプレフィクスを表す。キーデータのビット長をL、ノードのビットインデクスをbとすると、最上位ビットから(L-b)ビットは、当該ノードのプレフィクスである。例えばノードID=3のプレフィクスは01である。
 パトリシアトライの探索は再帰的に定義される。ノードのビットインデクスに対応する、検索キーにおけるビットを調べ、0の場合は左の枝、1の場合は右側の枝に分岐することによって探索を行う。分岐により進んだノードのビットインデクスが、分岐前のノードのビットインデクス(現在のビットインデクス)以上であれば、探索を終了する。このときのノード(分岐により進んだノード)のキーデータと、検索キーとを比較し、両者が一致する(マッチする)場合は、当該ノードの情報(例えばキーデータとバリュー)を取得する。なお、キーデータと検索キーとの比較を省略してもよい。
 例えば検索キーが001であるとする。根ノードのビットインデクスは2である。末尾ビットの位置を0番目とすると、ビットインデクス2の位置のビットは先頭の0である。このため根ノードから左側の枝に分岐する。分岐後のノードにおけるビットインデクスは1であり、ビットインデクス1の位置のビットは0である。よって、左側の枝に分岐し、根ノードに戻る。根ノードのビットインデクス2は、1つ前のノードのビットインデクス1よりも大きい。よって探索を終了し、根ノードの情報を取得する。ノードの情報は、例えばキーデータ(この例では001)、バリュー(この例では2)を含む。
 同様に、検索キーが010であるとする。根ノードのビットインデクスは2である。ビットインデクス2の位置のビットは先頭の0である。このため根ノードから左側の枝に分岐する。分岐後のノードにおけるビットインデクスは1であり、ビットインデクス1の位置のビットは1である。よって、右側の枝に分岐し、同じノードに戻る。当該ノードのビットインデクス1は、1つ前のノード(自ノード)のビットインデクス1と同じである。よって探索を終了し、当該ノードの情報を取得する。ノードの情報は、例えば、キーデータ(この例では010)、バリュー(この例では3)を含む。
 同様に、検索キーが100であるとする。根ノードのビットインデクスは2である。ビットインデクス0の位置のビットは末尾の0である。このため根ノードから右側の枝に分岐する。分岐後のノードにおけるビットインデクスは0であり、ビットインデクス0の位置のビットは0である。よって、左側の枝に分岐し、同じノードに戻る。当該ノードのビットインデクス0は、1つ前のノード(自ノード)のビットインデクス0と同じである。よって探索を終了し、当該ノードの情報を取得する。ノードの情報は、例えばキーデータ(この例では100)、バリュー(この例では1)を含む。
 パトリシアトライに新たなエントリ(新たなキーデータを含む)に応じた新規のノードを追加する場合、パトリシアトライを探索して、新たなキーデータを含むノードを追加する位置を見つければよい。探索により、ノードのプレフィクスがキーデータに合致するかを判断し、一致しない場合は、当該ノードを新たなノードによって置換する。元のノードは、新たなノードの子ノードとする。新たなノードのビットインデクスは、元のノードのキーデータと新たなノードのキーデータとの間で最上位の最も異なるビットとする。もし新たなノードからヌルノードへ進む場合は、ヌルノードにおいて新たなノードへのポインタを設け(あるいは新たなノードにおいてヌルノードへのポインタを新たなノードへのポインタに置換し)、新たなノードのビットインデクスを0にする。エントリに削除に伴うノードの削除は逆の手順で行えばよい。
 本実施形態では、パトリシアトライをベースとした新たなトライであるパームトライを導入する。パームトライは、ノードが3つ以上の分岐を有することが可能である。各枝には3値(0、1、*)の1ビット、又は3値を含む複数のビットを割り当てることができる。よって、パトリシアトライは、1及び0のいずれでもよいワイルドカード“*”を示すビットを含むキーデータを格納することができる。ワイルドカード“*”を示すビットをドントケアビット、また、ドントケアビットの値をドントケアビット値と呼ぶ。
 図6は、本実施形態に係るパームトライの一例を示す。図6のパームトライは、図2のテーブルに示した9個のエントリに基づき生成され、9個のエントリをそれぞれノード(非葉ノード)に格納している。パームトライは複数のノードを含むデータ構造である。パームトライについて、パトリシアトライと同じ説明は適宜省略する。パームトライはACLのエントリを効率的又は高速に検索するためのデータ構造として記憶部13に格納されている。
 パームトライのノードは、3つの枝を有する。左側の子ノードへの枝は0、中央の子ノードへの枝は*、右側の子ノードへの枝は1が割り当てられている。ドントケアビット値が割り当てられた枝をドントケア枝(don’t care branch)と、ドントケア枝への分岐はドントケア分岐と呼ぶ。0又は1が割り当てられた枝を完全一致枝(exact matching branch)と、完全一致枝への分岐を完全一致分岐と呼ぶ。矩形のノードは葉ノードであり、丸のノードは、根ノード又は中間ノードである。葉ノードのうち矢印付きの破線が出ている葉ノードは、当該葉ノードに遷移した際に、矢印が示すノードに遷移することを意味している。矢印付きの破線が出ていない葉ノードはヌルノードである。なお、葉ノードにはどのエントリも対応づけられていない。
 図7は、パームトライにおけるノードの構造の一例を示す図である。図の例は図2のテーブルのエントリ7に対応するノードの構造例を示している。
 パームトライのノードは、3つの枝へ分岐するための3つの子ノードへのポインタを有する。3つのポインタは、左側の枝(左側の子ノード)へのポインタ、右側の枝(右側の子ノード)へのポインタ、中央の枝(中央の子ノード)へのポインタを含む。左側の枝及び右側の枝へのポインタは完全一致用のポインタに対応し、中央の枝へのポインタはドントケア枝用のポインタに対応する。ポインタは図ではPtr1,Ptr2,Ptr3と模式的に示されている。ポインタは、参照すべきノードのメモリ上のアドレスである。なお図6において矢印付きの破線が出ている葉ノードは、矢印が示すノードのみへのポイントを保持している。当該葉ノードは、ポインタ以外の項目は保持していなくてよい。
 各ポインタの下側には各ポインタに対応する遷移条件“0”、“1”、“*”が、少なくとも1つの遷移条件として示されている。遷移条件“0”はビットインデクスが示すビットが0の場合に、満たされ、遷移条件“0”に対応するポインタ(図の例ではPtr1)が示すノードに遷移する(進む)。遷移条件“1”はビットインデクスが示すビットが1の場合に満たされ、遷移条件“1”に対応するポインタ(図の例ではPtr2)が示すノードに遷移する(進む)。遷移条件“*”はビットインデクスが示すビットが0の場合に満たされ、遷移条件“*”に対応するポインタ(図の例ではPtr3)が示すノードに遷移する(進む)。遷移条件“*”はビットインデクスが指定する1ビットが第1値及び第2値のいずれであることも許容する条件である。遷移条件“0”、“1”、は第1遷移条件に対応し、遷移条件“*”は第2遷移条件に対応する。
 またパームトライのノードは、パトリシアトライと同様、“Bit”によって示されるビットインデクスを含む。ビットインデクスは検索キーにおいて参照すべきビットを指定する。例えばBit=7は、最下位ビットを0番目として最下位ビットから数えて7番目のビットを指す。検索キーのビット長が8ビットの場合、Bit=7は、最上位ビットを示す。ビットインデクスは、検索キーにおいて参照するk(本実施形態ではk=1)個のビットを指定した参照情報の一例である。本実施形態ではk=1である。
 またパームトライのノードは、キーデータ、バリュー(アクション)、及び優先度を含む。図6のパームトライにおける丸のノード内の数値は、エントリID(ノードID)を表す。なお、エントリIDがノードに含まれていてもよい。キーデータは、2値のビット列(図におけるキーデータ(2値))と、マスク用のビット列(図におけるキーデータ(3値マスク))との組によって表現される。2値のビット列は、エントリのキーデータにおいて*を0に置換したビット列が格納される。マスク用のビット列には、エントリのキーデータにおける*を1にし、*以外のビットをすべて0にしたビット列が格納されている。2値のビット列のうち、マスク用のビット列で1に対応するビットが*であるとして内部的に解釈される。図の例ではマスク用のビット列は*の位置を1で表したが、*以外の位置を1で表し、*の位置を0で表してもよい。この場合、マスク用のビット列は11111100となる。
 パームトライへのノードの追加及び削除のアルゴリズムは基本的にパトリシアトライと同様である。ノードの追加及び削除において、ドントケアビットは0と1のいずれにも合致しない3値として扱えばよい。
 本実施形態ではパームトライを検索対象のデータ構造とする。検索キー生成部14がパケットのヘッダ情報に基づき検索キーを生成する。検索キーの生成は、パケットのヘッダ情報に基づき、ACLのエントリのキーデータと同じフォーマットで生成すればよい。パケット処理部12は、検索キーを指定した検索指示を検索処理部15に提供する。検索処理部15が検索指示に従ってパームトライの探索を開始し、検索キーに合致するノードを検索する。検索処理部15は、対象となるノードにおける複数の遷移条件のうち検索キーにおいてビットインデクスが指定するビットが満たしている遷移条件を特定する。特定した遷移条件が定めるノードに遷移する。この動作を根ノードから開始し、ノードの遷移に応じて順次行うことにより、検索キーに合致するノードの検索を行う。ビットインデクスが指定するビットが満たしている遷移条件が複数特定された場合、複数の特定した遷移条件ごとに、特定した遷移条件が定めるノードに遷移する。例えば遷移条件“0”、“1”のうちの1つと、遷移条件“*”との2つの遷移条件が特定される。検索処理部15は、遷移先のノードのビットインデクスが、当該ノードへ遷移する前のノードのビットインデクスと同じビット又は当該ビットより上位のビットを指定している場合、遷移先のノードの情報を検索結果の候補(探索結果)として取得する。この際、検索キーが当該遷移先のノードが保持するキーデータと一致する場合に、当該遷移先のノードの情報を検索結果の候補として取得してもよい。
 以下、図8を用いて、パームトライの探索アルゴリズムについて詳細に説明する。パームトライの探索は、0及び1のいずれにも合致するドントケアビットがあるため、パトリシアトライの探索とは異なる。
 図8は、パームトライの探索動作の一例を示すフローチャートである。まず対象となるノードで、ビットインデクスが示すビットを検索キーにおいて特定する(S1)。本フローの開始時は、対象となるノードは根ノートである。根ノードにおけるビットインデクスが示すビットを、検索キーにおいて特定する。
 特定したビットが0及び1のいずれであるかに拘わらず、特定したビットはドントケアビットに合致するため、ドントケアビット値“*”が対応づいた枝(ドントケア枝)を経由して、子ノードに進む(ステップS2A)。すなわち、ドントケアビット値に対応するポイントが指すノードに進む。本例では中央の子ノードに進む。ステップS2Aの動作はドントケア分岐に相当する。ドントケア分岐はパトリシアトライには無い動作である。
 さらに、上述の対象となるノードにおいて、ビットインデクスが示すビットが0及び1のいずれであるかを検索キーにおいて判定し、いずれに合致するかに応じて左側又は右側への子ノードへ進む(S2B)。すなわちビットインデクスが示すビットが0であれば、0に対応するポインタが指すノードに進む。すなわち左側の子ノードに進む。ビットインデクスが示すビットが検索キーにおいて1であれば、1に対応するポインタが指すノードに進む。すなわち右側の子ノードに進む。ステップS2Bの動作は完全一致分岐に相当する。
 このようにステップ2Aでは中央の子ノードに進み、ステップS2Bでは左側又は右側の子ノードに進む。すなわち1つのノードから複数の方向に分岐する。これにより複数の探索が並行して行われる。
 ステップS2A、S2Bで進んだ先のノード(分岐後のノード)でそれぞれ、当該ノードがヌルノードであるかを判定する(S3A、S3B)。ヌルノードは、次に進むノードへのポインタを含まないノードである。ヌルノードはキーデータ、バリュー及び優先度も含まない。ヌルノードである場合は、探索を終了する(S6A、S6B)。すなわち、探索結果としてヌルを返す。
 一方、進んだ先のノード(分岐後のノード)がヌルノードでない場合は、進んだ先のノード(分岐のノード)のビットインデクスが、進む前のノード(分岐前のノード)のビットインデクス以上か否かを判断する(S4A、S4B)。すなわち進んだ先のノードのビットインデクスが、進む前のノードのビットインデクス以上であるとのビットインデクス条件が満たされるか否かを判断する。但し、進んだ先のノードが、ヌルノードではない葉ノードの場合(図6の例では矢印付きの破線が出ている矩形のノードの場合)、葉ノードのポインタが指すノードにさらに進む。そして、進んだ先のノードのビットインデクスが、上記の進む前のノード(分岐前のノード)のインデクス以上か否かを判断する。
 進んだ先のノード(分岐後のノード)のビットインデクスが、進む前のノード(分岐前のノード)のビットインデクスより小さい場合(NO)、分岐後のノードを対象となるノードとして、ステップS1に戻る。すなわち、再帰的に上述のステップS1、S2A~S4A、S2B~S4B)を繰り返す。
 ビット分岐後のノードのビットインデクスが分岐前のインデクス以上である場合は(YES)、分岐後のノードの情報を検索結果の候補として取得し(S5A、S5B)、本探索を終了する。ノードの情報は、例えばキーデータとバリューと優先度等を含む。
 全ての探索が終了したかを判断し(S7)、まだ終了していない探索が存在する場合(NO)、待機する。全ての探索が終了した場合(S7のYES)、取得された検索結果の候補のうち最も優先度の高い候補を検索結果とする(S8)。すなわち、探索により複数の検索結果の候補が得られた場合、これら複数の候補が示す優先度を比較し、優先度が最も高い候補を検索結果として選択する。検索結果を含むノードが、検索キーに合致するノードとなる。検索結果の候補が1つの場合は、当該候補を検索結果として取得する。検索結果は、少なくともノードのバリューを含み、その他、キーデータ又は優先度の少なくとも一方を含んでもよい。
 以下、図6のパームトライに基づき、01110101の検索キーに対する検索を行う動作の具体例を、上述の図8のフローチャートを参照しつつ、説明する。以下、ノードXと記載した場合エントリID(ノードID)=Xのノードを意味する。例えばノード2は、エントリID=2を有する根ノードである。
 まず根ノードであるノード2において、ビットインデクスは7である(S1)。ドントケア枝へ進み(S2A)、進んだ先のノードはヌルノードであるため、本探索を終了する(S3A、S6A)。
 一方、検索キー(01110101)においてビットインデクス7が示すビットは0(最上位ビットの値)であるため、ノード2から左側のノード3に進む(S2B)。ノード3はヌルノードではなく(S3BのNO)、ノード3のビットインデクス(=6)は、ノード2のビットインデクス(=7)より小さいため(S4BのNO)、ノード3を対象となるノードとする(S1)。
 ノード3からドントケア枝を経由してノード5に進む(S2A)。ノード5はヌルノードではなく(S3AのNO)、ノード5のビットインデクス(=0)は、ノード3のビットインデクス(=6)より小さいため(S4AのNO)、ノード5を対象となるノードとする(S1)。
 ノード5からドントケア枝を経由して子ノードに進み(S2A)、子ノードはヌルノードではなく(S3AのNO)、ポインタを有する葉ノードであるため、ポイントが指すノード(すなわちノード5自身)へ進む。進んだ先のノード5のビットインデクスは、進む前のノード(ノード5自身)のビットインデクスと同じであるため(S4AのYES)、ノード5の情報を検索結果の候補として取得し(S5A)、本探索を終了する(S6A)。まだ他の探索が終了していないため待機する(S7のNO)。
 上述のノード5においてビットインデクスは0であり、検索キー(01110101)においてビットインデクス0が示すビットの値(最下位ビットの値)は1であるため、右側の子ノードに進む(S2B)。子ノードはヌルノードであるため(S3BのYES)、本探索を終了する(S6B)。まだ他の探索が終了していないため待機する(S7のNO)。
 上述のノード3において、ビットインデクスは6であり、検索キー(01110101)においてビットインデクス6が示すビットの値は1であるため、右側のノード7に進む(S2B)。ノード7はヌルノードではなく(S3BのNO)、ノード7のビットインデクス(=5)は、ノード3のビットインデクス(=6)より小さいため(S4BのNO)、ノード7を対象となるノードとする(S1)。
 ノード7からドントケア枝を経由して子ノードに進み(S2A)、子ノードはヌルノードであるため(S3AのYES)、本探索を終了する(S6A)。まだ他の探索が終了していないため待機する(S7のNO)。
 上述のノード7において、ビットインデクスは5であり、検索キー(01110101)においてビットインデクス5が示すビットの値は1であるため、右側のノード8に進む(S2B)。ノード8はヌルノードではなく(S3BのNO)、ノード8のビットインデクス(=4)は、ノード7のビットインデクス(=5)より小さいため(S4BのNO)、ノード8を対象となるノードとする(S1)。
 ノード8からドントケア枝を経由してノード1に進む(S2A)。ノード1はヌルノードではなく(S3AのNO)、ノード1のビットインデクス(=0)は、ノード8のビットインデクス(=4)より小さいため(S4AのNO)、ノード1を対象となるノードとする(S1)。
 ノード1からドントケア枝を経由して子ノードに進み(S2A)、子ノードはヌルノードであるため(S3AのYES)、本探索を終了する(S6A)。まだ他の探索が終了していないため待機する(S7のNO)。
 ノード1において、ビットインデクスは0であり、検索キー(01110101)においてビットインデクス0が示すビットの値(最下位ビットの値)は1であるため、右側の子ノードに進む(S2B)。子ノードはヌルノードであるため(S3BのYES)、本探索を終了する(S6B)。まだ他の探索が終了していないため待機する(S7のNO)。
 上述のノード8において、ビットインデクスは4であり、検索キー(01110101)においてビットインデクス4が示すビットの値は1であるため、右側のノードに進む(S2B)。進んだノードはポインタを有する葉ノードであるため、ポインタが指すノード(すなわち自ノード8)へ戻る。戻った先のノード8のビットインデクス(=4)は、戻る前のノード8のビットインデクス(=4)と同じである。よって、ノード8の情報を検索結果の候補として取得し(S5A)、本探索を終了する(S6A)。
 全て探索が終了したため(S7のYES)、探索された全ての検索結果の候補の優先度を比較し、最も優先度の高い候補を検索結果とする(S8)。本例ではノード5の情報と、ノード8の情報とが検索結果の候補として取得された。ノード5の優先度は図2のテーブルから優先度P7である。一方、ノード8の優先度は優先度P2である。よって、ノード5の優先度の方がノード8の優先度より高いため、ノード5の情報を検索結果として取得する。すなわちノード5が、検索キーに合致するノードであり、ノード5の情報が取得される。ノード5のエントリのバリューはA5であり、バリューA5の情報がパケット処理部12に渡される。パケット処理部12は、バリューA5が示す処理(アクション)をパケットに対して実行する。
 以上、本実施形態によればパームトライを検索対象のデータ構造として生成し、パームトライを検索することにより、ドントケアビットを含むキーデータの検索を少ない計算量で高速に行うことができる。図2又は図3に示したようなリストを1つ1つ順番に検索する場合に比べて、計算量を大幅に削減することができる。例えばリスト検索ではnのオーダーの計算量であるのに対して、パームトライを用いた検索では
Figure JPOXMLDOC01-appb-M000001
のオーダーの計算量で済む。またパームトライでは新たなエントリが追加又は既存のエントリが削除される場合にもノードの追加及び削除をパトリシアトライと同様の手法で容易に行うことができ、拡張性にも優れている。
 (第2実施形態)
 第1実施形態では、検索キーに対して1ビット単位で3値の判定(0,1,*)を行うことにより探索を行った。すなわちビットインデクス(参照情報)によって特定するkビットのkが1であった。第2実施形態では、k以上のビット幅(マルチビットストライド:multibit stride)の単位で探索を行うパームトライ(拡張パームトライ)を提供する。すなわちビットインデクスによって特定するkビットのkが2以上であるパームトライを提供する。k以上のビット幅のビットの群をチャンクと呼ぶ。検索キーにおいて指定するチャンクをキーチャンクと呼ぶ。拡張パームトライを用いることで、木(パームトライ)の深さを浅くし、探索のステップ数を低減できるため、検索速度を一層向上させることができる。
 マルチビット幅に対応したパームトライを生成する簡単な方法は、3通りに分岐するように3値木を拡張することである。例えばk=3であれば、1つのビットが0,1,*の3通りあるため、1つのノードから27通りに分岐する木を生成する。例えば、000、001、・・・、111、00*、***・・・の27通りに分岐する木を生成する。しかしながら、この方法では多くの子ノードが発生する問題がある。
 例えば、27個の子ノードのうち、8個のノードは完全一致用のノードである。すなわち8個のノードは、対象となる3ビットのすべてにおいて、2値(0又は1)を有する。つまり、8個のノードは、ドントケアビット値*を含まない3ビットの値の枝(完全一致枝)につながるノードである。よって、検索キーにおける対象となる3ビットのビット群(3ビット幅のキーチャンク)に対して、8個のノードのうちの1つのノードのみが選択される。一方、27個の子ノードのうちの残りの19個のノードは、対象の3ビットにおいて1つ以上のドントケアビットの枝につながるノードである。したがって、単純には、検索キーにおいて対象となる3ビット幅のキーチャンクに対して、19個のドントケア枝(3ビットのうちの1つ以上がドントケアビット*である枝)に対する探索が必要である。19個のうちの11個は、キーチャンクにおける1及び0のビットのマッチングを行うことによって探索を排除することは可能であるが、残りの7個のノードについては、下位の探索が必要となる。
 本実施形態ではキーチャンクに含まれるビット(k=3の場合、3つのビット)のうち最上位のドントケアビットに着目することで、子ノードの数を低減したパームトライ(拡張パームトライ)を提供し、ドントケア岐に対する探索を簡単に行う手法を提供する。
 具体的には、キーチャンクにおける最下位ビット以外のビットで1個以上のドントケアビットを含む複数のドントケア枝を1つのドントケア枝に組み合わせる。組み合わされた1つのドントケア枝は、最下位ビットに1つのみのドントケアビットをもつことを許容する。組み合わされたドントケア枝は部分木につながる。組み合わされたドントケア枝のビット幅サイズ(ストライドサイズ)は、1以上k以下である。どのドントケア枝を組み合わせるかはパームトライの生成の元となるエントリ群に依存してもよい。
 例えばk=3の場合に、0*0,0**、0*1の枝を組み合わせて、2ビットである0*の枝とする(3ビットの最上位ビットはいずれも0である)。0*は、3ビットのうち上位側の2ビットに対応する。
 また、1*0,1**、1*1の枝を組み合わせて、2ビットである1*の枝とする(3ビットの最上位ビットはいずれも1である)。1*は、3ビットのうち上位側の2ビットに対応する。
 また、*00,*01,*10,*11,*0*、*1*、**0,**1,***を組み合わせて、1ビットである*の枝とする(3ビットの最上位ビットはいずれも*である)。*は、3ビットのうち最上位の1ビットに対応する。
 その他に、例えば3ビットチャンクの最下位ビットにドントケアビットを有する4つの枝(00*、01*、10*、11*)が残る。以上の結果、ドントケアビットを含む19個のドントケア枝が、7個のドントケア枝に減らされる。
 図9は、kビット幅のパームトライを模式的に示す。図の例ではk=3である。なお、図9のパームトライは説明用に例示したものであり、図2のテーブルのエントリは反映させられていない。
 図10は、比較例として、3分木の例を示す。3分木では全てのノードで、1ビットの判定を行い、3通り(0,1,*)に分岐させられている。
 図11は、図10の3分木に図9のパームトライを重ねたもので、3分木とパームトライの構造の違いを比較しやすくしたものである。但し、図11においては、図9の部分木(破線で示す三角)の表記は見やすさのため省略している。
 図9のパームトライにおいて下側の8個の黒丸のノードは、根ノードから完全一致枝につながる子ノードである。根ノードからこれらの子ノードにつながる8個の完全一致枝には左から順番に000,001,010,011,100,101,110,111が割り当てられている。すなわち、左から順番にこれら8個のノードは000,001,010,011,100,101,110,111を、プレフィクスとして有する。完全一致枝につながるノードを完全一致ノードと呼ぶ。以下の説明で、XXX(Xは0又は1又は*)の枝につながる子ノードをXXXのノードを記載する場合がある。例えば010のノードは、010を割り当てられた枝につながる子ノードである。
 パームトライにおいて7個の斜線が施された丸は、ドントケア枝につながる子ノード(ドントケアの遷移条件(第2遷移条件)が満たされる場合に遷移するノード)である。ドントケア枝は矢印付きの実線で示されている。ドントケア枝につながるノードをドントケアノードと呼ぶ。ドントケア枝に割り当てられた複数ビット(3ビット以下のビット数)は最下位にドントケアビットを有する。
 完全一致ノードの全部又は一部、及びドントケアノードの全部又は一部には、ビットインデクス、ポインタ、キーデータ、バリュー、優先度が含まれている。ポインタのみを含む、完全一致ノード又はドントケアノードも存在し得る。ビットインデクス、ポインタ、キーデータ、バリュー、優先度のいずれも含まないノード(ヌルノード)も存在し得る。検索キーにおいてビットインデクスが示すビットから、上位側に向けてk個のビットが、ビットインデクスによって特定されるk個のビット(kビットチャンク)である。ビットインデクスによって特定されるk個のビットが、検索キーにおいて遷移条件の成否の判定の対象とするチャンク(kビットチャンク)となる。例えば、ビット幅k=3の場合において、検索キーが01101000であり、ビットインデクスが5であるとき、5~7ビット目である011が、ビットインデクスによって特定されるkビットチャンクである。すなわち011が、検索キーにおいて遷移条件の成否の判定の対象となる3ビットチャンクとなる。但し、最下位を0ビット目としている。
 図9のパームトライを探索する場合、対象となるノードにおいて、検索キーにおけるkビットチャンクに対して、8個の完全一致ノードから1つの完全一致ノードが選択される。さらに、7個のドントケアノードのうち、k個のドントケアノードが探索される(探索の手順は後述する)。一部のノード(完全一致ノード及び一部のドントケアノード)の下側には破線の三角が示され、この三角は、当該一部のノードを根ノードとする部分木を表している。パームトライの構造は、パームトライを生成する元となるキーデータセットに依存し、図示している部分木の一部が存在しない場合もあり得る。部分木の探索は、部分木の根ノードから行われる。部分木の構成は、図9の木のうち破線で示す部分木以外の構成部分と同様である。
 矢印付きの実線は、前述したようにドントケア枝に対応し、ドントケアノードの探索手順を表している。例えば3ビットチャンクが011の場合、01*、0*、*の順でドントケアノードが探索される。これについて詳細に説明すると以下の通りである。検索キーにおいて対象となる3ビットチャンクに対して右ビットシフト演算を行うことによって、ドントケア枝に割り当てられているビットのうち最下位の*ビットを除いたプレフィクスが得られる。
 例えば、検索キーにおける対象となる3ビットチャンクが011であるとする。右ビットシフト演算により01となり、この01は、01*から*を除いたものに一致する。したがって、01*のドントケアノードからドントケアノードの探索を開始し、次に0*のドントケアノード、その次に、*のドントケアノードを探索する。なお、探索の順序は逆でもよいし、その他の順序でもよい。図には011の完全一致ノードから01*のドントケアノードにつながる矢印付きの実線が示されており、011の完全一致ノードの後、01*のドントケアノードに進むことを示している。また01*のドントケアノードから0*のドントケアノードにつながる矢印付きの実線が示されており、ドントケアノード01*の後、ドントケアノード0*に進むことを示している。また0*のドントケアノードから*のドントケアノードにつながる矢印付きの実線が示されており、ドントケアノード0*の後、ドントケアノード0*に進むことを示している。01*と0*と*とは、いずれも最下位のビットがドントケアビットである(すなわち、最下位のビットが1及び0のいずれであることも許容されている)。なおここでは完全一致ノードの探索を先に行う例を示したが、これに限定されず、ドントケアノードの探索を先に行ってもよい。
 ドントケア枝のビット幅サイズは、組み合わせるドントケア枝のkビットにおける最上位のドントケアビットの位置に応じて変化する。前述した0*0,0**、0*1の枝を組み合わせて、0*の枝とする場合に、最上位のドントケアビットは最上位から2番目なので、ビット幅サイズは2である。1*0,1**、1*1の枝を組み合わせて、1*の枝とする場合、最上位のドントケアビットは最上位から2番目なので、ビット幅サイズは2である。*00,*01,*10,*11,*0*、*1*、**0,**1,***を組み合わせて、*の枝とする場合、最上位のドントケアビットは最上位ビットなので、ビット幅サイズは1である。
 但し、検索キーのチャンクを示すビット幅サイズはkビットの固定長であるが、探索の際は、kビットチャンクの一部が、ドントケア枝のkビット幅以下のビットに対して判定に用いられ得る。このため、判定の際にキーの長さ(ビット幅)に関するミスマッチが生じる場合がある。
 そこで、本実施形態では、検索キーにおける最下位のチャンク(下位ビット側のチャンク)に対するビットインデクスとして、―k(“-”はマイナス)より大きい負の値を許容する。k=3であれば、-1と、-2を許容する。負の値のビットインデクスによって特定されるkビットのうち、実際には存在しないビットは、検索キーからチャンクを抽出する際は、0として扱う。
 本実施形態に係るkビット幅のパームトライは、完全一致枝用の2個の子ノードと、ドントケア枝用の2-1個の子ノードを有する。効率的な探索を行うためには、検索キーのチャンク、又は当該チャンクから計算される値に基づき、探索する枝(遷移先のノード)を高速に特定できることが望ましい。
 図12は、本実施形態に係るパームトライのノードにおいて子ノードへのポインタを取得するためのデータ構造の例を示す。2つの連続配列(contiguous array)の例が示される。図12の上の連続配列は、完全一致枝用であり、図12の下の連続配列は、ドントケア枝用である。連続配列はメモリ上の連続する領域に格納された配列である。連続配列における複数の要素はメモリ上に一定サイズで連続して配置されている。連続配列の下側のカッコ付きの番号は、連続配列の各要素のインデクス(以下、配列インデクス)である。配列インデクスを指定することで、要素を指定することができる。指定された要素に格納されたポインタ(アドレス)に進むことで、次のノードに進むことができる。
 完全一致枝用の連続配列においては、検索キーにおいて対象となるチャンク(k=3であれば、3ビット幅のチャンク)によって1つの要素が特定される。検索キーにおいて対象となるチャンクが“100”であれば、遷移条件“100”が満たされ、“100”の要素に格納されたポインタ(アドレス)が示すノードに進む。
 ドントケア枝用の連続配列においては、連続配列において特定すべき配列インデクス(yとする)が、以下の式(1)で算出される。すなわち式(1)により、ビットインデクスで指定されるkビット幅のビット列に対して用いる配列インデクスが算出される。
 y=2+g-1  ・・・(1)
 ここで“チャンクのプレフィクス”を定義する。“チャンクのプレフィクス”は、kビットのチャンクのうち先頭側からドントケアビット値(*)が現れるまでの部分である。
 hは、チャンクのプレフィクスにおいて先頭側の2値(0又は1)の長さを示すパラメータである。換言すると、hは、チャンクのプレフィクスのうち先頭ビットからドントケアビット値(*)より前までの長さ(ビット長)である。
 gは、チャンクのプレフィクスにおいて先頭側の2値の部分を10進数で表した値を示すパラメータである。
 図13は、k=3の場合に、チャンクと、チャンクのプレフィクスと、hと、gとの関係を示した表である。例えば、チャンク0*1の場合、先頭側から*までの部分“0*”がチャンクのプレフィクスである。チャンクのプレフィクスにおいて*より前の部分は“0”のみであるため、hは1である。*より前の部分である“0”を10進数で表すと0であるためgは0である。よって、y=1である。したがって、あるノードからドントケア枝を進む場合に、ドントケア枝のkビットチャンクが0*1である場合、ドントケア用の連続配列において配列インデクスが[1]の要素に格納されたポインタが示すノードに進めばよい。
 同様に、チャンクが10*の場合、先頭側から*までの部分“10*”がチャンクのプレフィクスである。チャンクのプレフィクスにおいて*より前の部分は“10”であるため、hは2である。*より前の部分である“10”を10進数で表すと2であるため、gは2である。よってy=5である。したがって、あるノードからドントケア枝を進む場合に、ドントケア枝のkビットチャンクが10*である場合、ドントケア用の連続配列において配列インデクスが[5]の要素に格納されたポインタが示すノードに進めばよい。
 これによりドントケア枝用の遷移条件を満たす要素を高速に特定できるため、効率的なノードの探索が可能となる。
 図14は、k(k=3)のビット幅のパームトライにおけるノードの構造の一例を示す図である。パームトライのノードは、前述した完全一致枝用の連続配列と、ドントケア枝用の連続配列とを有する。完全一致枝用の遷移条件は、ビットインデクスで特定されるkビットのそれぞれが第1値又は第2値のいずれか一方であることを定めた第1遷移条件に対応する。ドントケア枝用の遷移条件は、ビットインデクスで特定されるビットの少なくとも1つの特定のビットが第1値及び第2値のいずれであることも許容する第2遷移条件に対応する。ビットインデクスは、検索キーにおいて参照するk(本実施形態ではk=3)個のビットを指定する参照情報の一例である。
 また第1実施形態と同様、ノードは、ビットインデクス、2値のビット列(図のキーデータ(2値))、マスク用のビット列(図のキーデータ(3値マスク))、バリュー、優先度を有する。第1実施形態ではビットインデクスによって1つのビットを指定したが、本実施形態では3ビットを指定する場合を想定する。その他の項目の説明は第1実施形態と同じであるため詳細な説明を省略する。
 検索キー生成部14の動作は第1実施形態と同様である。検索処理部15の動作もkが1から3になったことに起因する動作を除けば、基本的に第1実施形態と同様である。本実施形態ではドントケア枝の探索に関しては、前述した効率的な方法により、最大で3個の枝の探索を部分木ごとに行う。
 図15は、第2実施形態に係るパームトライの探索動作の一例を示すフローチャートである。まず対象となるノードで、ビットインデクスにより特定されるkビット幅のビットチャンクを検索キーのチャンクとする(S11)。本フローの開始時は、対象となるノードは、パームトライの根ノードである。本実施形態ではkビット幅のチャンクは連続するk個のビットとするが、離散的に配置されたk個のビットをkビットチャンクとすることも排除されない。
 対象となるノードにおいて、チャンクに対して遷移条件を満たす(チャンクに合致する)完全一致ノードを特定し、特定した完全一致ノードに進む(S12)。またチャンクに対して遷移条件を満たすドントケアノード(例えば3つ)を特定し、特定したドントケアノードに進む(同S12)。ドントケアノードの特定は、前述した方法により効率的に行われる。
 ステップS12から進んだノード(完全一致ノード及びドントケアノード)がヌルノードか否かを判定する(S13)。ヌルノードである場合は(S13のYES)、当該ノードでの探索を終了する(S18)。すなわち、探索結果としてヌルを返す。
 一方、進んだ先のノードがヌルノードでない場合は、当該ノードが部分木を有するかを判断する(S14)。部分木を有する場合は、当該ノードを根ノードとする部分木に対して、本フローチャートの処理を再帰的に実行する(S15)。部分木を有さない場合(S14のNO)又はステップS15の後、進んだ先のノードのビットインデクスが、進む前のノードのビットインデクス以上か否かを判断する(S16)。すなわち、進んだ先のノードのビットインデクスが、進む前のノードのビットインデクス以上であるとのビットインデクス条件が満たされるか否かを判断する。但し、進んだ先のノードが、ヌルノードではない葉ノードの場合、葉ノードのポインタが指すノードにさらに進む。そして、進んだ先のノードのビットインデクスが、上記の進む前のノードのインデクス以上か否かを判断する。
 進んだ先のノードのビットインデクスが、進む前のインデクス以上である場合は(S16のYES)、進んだ先のノードの情報を検索結果の候補として取得し(S17)、本探索を終了する。検索キーがノードのキーデータに合致することを確認できた場合に、検索結果の候補として取得してもよい。ノードの情報は、例えばキーデータとバリューと優先度等を含む。一方、ステップS16において進んだ先のノードのビットインデクスが、進む前のノードのビットインデクスより小さい場合(S16のNO)、ステップS18に進む。
 全ての探索が終了したかを判断し(S19)、まだ終了していない探索が存在する場合(NO)、待機する。全ての探索が終了した場合(S19のYES)、取得された検索結果の候補のうち最も優先度の高い候補を検索結果とする(S20)。すなわち、探索により複数の検索結果の候補が得られた場合、これら複数の候補が示す優先度を比較し、優先度が最も高い候補を検索結果として選択する。検索結果を含むノードが、検索キーに合致するノードとなる。検索結果の候補が1つの場合は、当該候補を検索結果として取得する。検索結果は、少なくともノードのバリューを含み、その他、キーデータ又は優先度の少なくとも一方を含んでもよい。
 以下、本実施形態に係るパームトライの探索の具体例を説明する。
 図16は、図2に示すテーブルの複数のエントリ1~9に対して生成したkビット幅のパームトライ(拡張パームトライ)の例を示す。矢印付きの実線は、図9の例と同様、ドントケア枝に対する探索手続(探索順序)の一例を表している。ノードの番号はノードID(図2のテーブルのエントリID)に対応する。“Bit”はビットインデクスである。
 図17は、図16のパームトライにおける部分木T1の例を示す。図18は、図16のパームトライにおける部分木T2の例を示す。図19は、図16のパームトライにおける部分木T3の例を示す。図20は、図16のパームトライにおける部分木T4と、部分木T4につながる部分木T5の例を示す。図21は、図16のパームトライにおける部分木T6の例を示す。図22は、図16のパームトライにおける部分木T7の例を示す。図23は、図16のパームトライにおける部分木T8の例を示す。
 図16のパームトライにおいて8ビットの検索キー01110101に対する探索を行う例を説明する。
 根ノードであるノード2のビットインデクスは5であり、最下位ビットを0ビット目として、7~5ビット目の3ビットである011が、検索キー01110101においてチャンクとして特定される。前述した方法により探索すべきドントケア枝として01*、0*、*を割り当てられたドントケア枝を特定し、これらのドントケア枝を探索する。
 まず01*のノード(つまり上位3ビットとして01*のプレフィクスを有するノード)は、次のノード5へのポインタを有するのみで、部分木を有さないため、0*のノード5に進む。
 ノード5は8ビットの上位2ビットとして0*のプレフィクスを有する。ノード5のビットインデクスは-2であり、0~―2ビット目の3ビットである100が、検索キー01110101におけるチャンクとして特定される。-2ビット目、-1ビット目は前述したように0として扱う。ノード5の部分木T2(図18参照)においてチャンクに合致するドントケア枝を探索すると、*が割り当てられたドントケア枝が見つかる。このドントケア枝を進んだ先のノード(葉ノード)は自ノード5を示しており、ビットインデクス条件(進んだ後のノードのビットインデクスが、進む前のビットインデクス以上)を満たしている。また検索キーはノード5のキーデータに合致する。よって、ノード5の情報を検索結果の候補として取得する。ノード5から、部分木T2において100が割り当てられた完全一致枝を進むとヌルノードとなり、探索結果としてヌルを返す。
 次に、ノード2から*のノード(つまり上位1ビットとして*のプレフィクスを有するノード)に進むと、このノードはヌルノードであるため、探索結果としてヌルを返す。
 一方、根ノードであるノード2から完全一致枝を探索すると、011を割り当てられた枝が見つかり、この枝からノード8に進む。ノード8のビットインデクスは2であり、検索キー01110101において4~2ビット目の3ビットである101が、検索キー01110101のチャンクとして特定される。ノード8の部分木T4(図21参照)において10*のノードへ進むと、進んだ先のノード(葉ノード)は自ノード8を示すポインタを有する葉ノードであり、自ノード8へ戻る。ビットインデクス条件が満たされ、また検索キーはノード5のキーデータに合致する。よって、ノード8の情報を検索結果の候補として取得する。一方、ノード8から、101が割り当てられた完全一致枝を進むとヌルノードになるため、探索結果としてヌルを返す。
 一方、ノード8から、1*のノードに進むとこのノードはヌルノードであり、次に、*のノード1に進む。ノード1のビットインデクスは-1である。検索キー01110101において1~-1ビット目である101が特定される。すなわち1~0ビット目は末尾の2つのビットの01である。-1ビット目は存在しないため、前述したように0として扱う。よって01と0を結合して010となる。部分木T4につながる部分木T5において、010に対するドントケア枝及び完全一致枝に対する子ノードは全てヌルである。なお、部分木T5においてドントケアノードは全てヌルであるため省略している。
 以上からノード5の情報とノード8の情報との2つが検索結果の候補として得られた。これら2つの候補の優先度を比較すると、ノード5の情報の優先度P7は、ノード8の情報の優先度P2より高いため、ノード5の情報が検索結果として取得される。
 以上、本実施形態によれば、複数のドントケア枝を組み合わせて1つの枝としたことにより、k(kは2以上の整数)ビット幅の単位で探索を行う場合の木の深さを浅くしたパームトライを実現できる。このパームトライを用いることで、探索のステップ数を低減できるため、検索速度を向上させることができる。また検索キーのチャンクから、探索すべきk個のドントケアノードのポインタを高速に特定できるため、検索速度を向上させることができる。
(変形例1)
 変形例1では、上述した第2実施形態のノードのサイズを低減する(ノードを圧縮する)。第2実施形態の図14で示したノードの構造では、完全一致枝用のポインタと、ドントケア枝用のポインタとをそれぞれ最大個数用意していた。このため、ポインタが示すノードがヌルノードの場合も、ヌルノードのメモリ領域を確保しておく必要がある。また配列サイズも大きくなる。本変形例では、配列のサイズを低減し、ヌルノードのメモリ領域を節約する。
 図24は、第2実施形態と同様のノード構造においてヌルノードを示すポインタを斜線で示した例を示す。
 図25は、図24のノード構造を圧縮した、変形例1に係るノード構造を示す。完全一致枝用に、ベースアドレス(Base1)とビットマップとが設けられる。ビットマップは、図24と同じ遷移条件の順番で、遷移先のノードがヌルノードの場合を0、非ヌルノードの場合を1によって示している。例えばビットマップの一番左のビットは遷移条件“000”に対応し、遷移先のノードはヌルノードである。左から3番目のビットは遷移条件“010”に対応し、遷移先のノードは非ヌルノードである。遷移先のノードが非ヌルノードである場合、ベースアドレスに、該当する遷移条件に対応するビットの左側にある1の個数に応じたオフセットを加算することで、ポインタ(遷移先のノードのアドレス)を算出する。ポインタの算出式は、以下の式(2)である。
 ポインタ=Base1+オフセット値×(左側にある1の個数)  式(2)
 例えばビットマップの左から3番目のビットに対応する遷移条件“010”の場合、左側にある1の個数はゼロであるため、ベースアドレス(Base1)がポインタとなる。例えばビットマップの左から5番目のビットに対応する遷移条件“100”の場合、左側にある1の個数は1つであるため、ベースアドレス+オフセット値がポインタとなる。遷移条件“001”の場合は、遷移先のノードは、ビットマップの値が0であるからヌルノードであると判定し、遷移を行わない。
 このように、特定した遷移条件の順番に応じたオフセットと、ベースアドレス(Base1)とに基づき、遷移先のノードのアドレスを算出する。これによりヌルノードのメモリ領域を確保する必要がないため、メモリ領域を節約できる。
 ドントケア枝用も同様に、ベースアドレス(Base2)とビットマップとが設けられる。ビットマップは、図24と同じ遷移条件の順番で、遷移先のノードがヌルノードの場合を0、非ヌルノードの場合を1によって示している。例えばビットマップの左から2番目のビットに対応する遷移条件“0*”の場合、遷移先のノードはヌルノードである。ビットマップの一番左のビットに対応する遷移条件“*”の場合、遷移先のノードは非ヌルノードである。遷移先のノードが非ヌルノードである場合、ベースアドレス(Base2)に、該当する遷移条件に対応するビットの左側にある1の個数に応じたオフセットを加算することで、ポインタ(遷移先のノードのアドレス)を算出する。ポインタの算出式は、以下の式(3)である。
 ポインタ=Base2+オフセット値×(左側にある1の個数)  式(3)
 例えば遷移条件“*”の場合、左側にある1の個数はゼロであるため、ベースアドレス(Base2)がポインタとなる。
 このように、特定した遷移条件の順番に応じたオフセットと、ベースアドレス(Base2)とに基づき、遷移先のノードのアドレスを算出する。これによりヌルノードのメモリ領域を確保する必要がないため、メモリ領域を節約できる。
(変形例2)
 本変形例2では、あるノードから遷移する遷移する可能性がある他の全てのノードのうち最大の優先度の情報を当該ノードに保持させる。最大の優先度が、当該ノードの優先度より低い場合、当該ノードから他のノードへの遷移を行わない。これにより無駄な探索を省略し、処理を高速化できる。
 図26は、変形例2に係るノードの構造の例を示す。当該ノードから遷移する遷移する可能性がある他のノードのうち最大の優先度の情報が保持されている。図の例では最大優先度がP4である。当該ノードに処理が進んだ場合、まず当該ノードの優先度を、最大優先度と比較し、当該ノードの優先度が最大優先度より高い場合は、以降の探索を省略する。図子の例では、最大の優先度P4がノードの優先度P7より低いため、このノードから他のノードへの探索は行わない。
 変形例2の拡張例として、遷移条件ごとに、遷移条件に応じた遷移先のノード以降で遷移する可能性のあるすべてのノードのうちの最大優先度を保持してもよい。この場合、自ノードの優先度より高い優先度の遷移条件のみ、当該遷移条件が満たされた場合にノード遷移を行う。
(変形例3)
 第2実施形態で記載したように、進んだ先のノードのビットインデクスが進む前のビットインデクス以上の場合にビットインデクス条件が満たされ、進んだ先のノードの情報が検索結果の候補として特定された。例えば図21では、110の葉ノードからノード4に進んだ際に、ノード4の情報が検索結果の候補(検索キーに合致するノード)として特定された。ノード4の情報を110の葉ノードに格納しておき、葉ノードからノード4への遷移を省略することで、探索の演算を簡単にできる。つまり、遷移先のノード(ノード4)へ遷移する前のノード(110の葉ノード)に、検索キーに合致するノード4の情報を含める。検索処理部15は、ノード4へ遷移せずに、110のノードから、ノード4の情報を取得し、取得した情報に基づき検索キーに合致するノードを特定する。
 例えば110のノード(上位ノードへの遷移を有する葉ノード)に、当該ノードが葉ノードであるとの情報(検索キーに合致する上位ノードの情報が検索結果として保持されていることを示す情報)と、ノード4の情報とを格納しておく。ノード4の情報は、例えばノード4のバリューと優先度を含み、その他、キーデータを含んでもよい。ノードの処理を行う際、葉ノードであるとの情報が格納されている場合には、葉ノードに保持されている検索結果の候補を取得し、以降の探索を省略する。図21の例では、検索処理部15は、110のノードの処理において、葉ノードであるとの情報が格納されていることを検出した場合、110のノードに格納されているノード4の情報を検索結果の候補として取得する。
(第3実施形態)
 前述した実施形態における各装置(情報処理装置又は通信装置)の一部又は全部は、ハードウェアで構成されていてもよいし、CPU(Central Processing Unit)、又はGPU(Graphics Processing Unit)等が実行するソフトウェア(プログラム)の情報処理で構成されてもよい。ソフトウェアの情報処理で構成される場合には、前述した実施形態における各装置の少なくとも一部の機能を実現するソフトウェアを、フレキシブルディスク、CD-ROM(Compact Disc-Read Only Memory)、又はUSB(Universal Serial Bus)メモリ等の非一時的な記憶媒体(非一時的なコンピュータ可読媒体)に収納し、コンピュータに読み込ませることにより、ソフトウェアの情報処理を実行してもよい。また、通信ネットワークを介して当該ソフトウェアがダウンロードされてもよい。さらに、ソフトウェアがASIC(Application Specific Integrated Circuit)、又はFPGA(Field Programmable Gate Array)等の回路に実装されることにより、情報処理がハードウェアにより実行されてもよい。
 ソフトウェアを収納する記憶媒体の種類は限定されるものではない。記憶媒体は、磁気ディスク、又は光ディスク等の着脱可能なものに限定されず、ハードディスク、又はメモリ等の固定型の記憶媒体であってもよい。また、記憶媒体は、コンピュータ内部に備えられてもよいし、コンピュータ外部に備えられてもよい。
 図27は、前述した実施形態における各装置(情報処理装置又は通信装置)のハードウェア構成の一例を示すブロック図である。各装置は、一例として、プロセッサ91と、主記憶装置92(メモリ)と、補助記憶装置93(メモリ)と、ネットワークインタフェース94と、デバイスインタフェース95と、を備え、これらがバス96を介して接続されたコンピュータ90として実現されてもよい。
 図27のコンピュータ90は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、図27では、1台のコンピュータ90が示されているが、ソフトウェアが複数台のコンピュータにインストールされて、当該複数台のコンピュータそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、コンピュータそれぞれがネットワークインタフェース94等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、前述した実施形態における各装置(情報処理装置又は通信装置)は、1又は複数の記憶装置に記憶された命令を1台又は複数台のコンピュータが実行することで機能を実現するシステムとして構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台のコンピュータで処理し、この処理結果を端末に送信するような構成であってもよい。
 前述した実施形態における各装置(情報処理装置又は通信装置)の各種演算は、1又は複数のプロセッサを用いて、又は、ネットワークを介した複数台のコンピュータを用いて、並列処理で実行されてもよい。また、各種演算が、プロセッサ内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介してコンピュータ90と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実行されてもよい。このように、前述した実施形態における各装置は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
 プロセッサ91は、コンピュータの制御装置及び演算装置を含む電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、又はASIC等)であってもよい。また、プロセッサ91は、専用の処理回路を含む半導体装置等であってもよい。プロセッサ91は、電子論理素子を用いた電子回路に限定されるものではなく、光論理素子を用いた光回路により実現されてもよい。また、プロセッサ91は、量子コンピューティングに基づく演算機能を含むものであってもよい。
 プロセッサ91は、コンピュータ90の内部構成の各装置等から入力されたデータやソフトウェア(プログラム)に基づいて演算処理を行い、演算結果や制御信号を各装置等に出力することができる。プロセッサ91は、コンピュータ90のOS(Operating System)や、アプリケーション等を実行することにより、コンピュータ90を構成する各構成要素を制御してもよい。
 前述した実施形態における各装置(情報処理装置又は通信装置)は、1又は複数のプロセッサ91により実現されてもよい。ここで、プロセッサ91は、1チップ上に配置された1又は複数の電子回路を指してもよいし、2つ以上のチップあるいは2つ以上のデバイス上に配置された1又は複数の電子回路を指してもよい。複数の電子回路を用いる場合、各電子回路は有線又は無線により通信してもよい。
 主記憶装置92は、プロセッサ91が実行する命令及び各種データ等を記憶する記憶装置であり、主記憶装置92に記憶された情報がプロセッサ91により読み出される。補助記憶装置93は、主記憶装置92以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ、不揮発性メモリのいずれでもよい。前述した実施形態における各装置(情報処理装置又は通信装置)において各種データを保存するための記憶装置は、主記憶装置92又は補助記憶装置93により実現されてもよく、プロセッサ91に内蔵される内蔵メモリにより実現されてもよい。例えば、前述した実施形態における記憶部は、主記憶装置92又は補助記憶装置93により実現されてもよい。
 記憶装置(メモリ)1つに対して、複数のプロセッサが接続(結合)されてもよいし、単数のプロセッサが接続されてもよい。プロセッサ1つに対して、複数の記憶装置(メモリ)が接続(結合)されてもよい。前述した実施形態における各装置(情報処理装置又は通信装置)が、少なくとも1つの記憶装置(メモリ)とこの少なくとも1つの記憶装置(メモリ)に接続(結合)される複数のプロセッサで構成される場合、複数のプロセッサのうち少なくとも1つのプロセッサが、少なくとも1つの記憶装置(メモリ)に接続(結合)される構成を含んでもよい。また、複数台のコンピュータに含まれる記憶装置(メモリ))とプロセッサによって、この構成が実現されてもよい。さらに、記憶装置(メモリ)がプロセッサと一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
 ネットワークインタフェース94は、無線又は有線により、通信ネットワーク97に接続するためのインタフェースである。ネットワークインタフェース94は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース94により、通信ネットワーク97を介して接続された外部装置98Aと情報のやり取りが行われてもよい。なお、通信ネットワーク97は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか、又は、それらの組み合わせであってよく、コンピュータ90と外部装置98Aとの間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
 デバイスインタフェース95は、外部装置98Bと直接接続するUSB等のインタフェースである。
 外部装置98Aはコンピュータ90とネットワークを介して接続されている装置である。外部装置98Bはコンピュータ90と直接接続されている装置である。
 外部装置98A又は外部装置98Bは、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、又はタッチパネル等のデバイスであり、取得した情報をコンピュータ90に与える。また、パーソナルコンピュータ、タブレット端末、又はスマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
 また、外部装置98A又は外部装置98Bは、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、CRT(Cathode Ray Tube)、PDP(Plasma Display Panel)、又は有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末、又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
 また、外部装置98Aまた外部装置98Bは、記憶装置(メモリ)であってもよい。例えば、外部装置98Aはネットワークストレージ等であってもよく、外部装置98BはHDD等のストレージであってもよい。
 また、外部装置98A又は外部装置98Bは、前述した実施形態における各装置(情報処理装置又は通信装置)の構成要素の一部の機能を有する装置でもよい。つまり、コンピュータ90は、外部装置98A又は外部装置98Bの処理結果の一部又は全部を送信又は受信してもよい。
 本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c、又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
 本明細書(請求項を含む)において、「データを入力として/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、各種データそのものを入力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を入力として用いる場合を含む。また「データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合、当該データのみに基づいて当該結果が得られる場合を含むとともに、当該データ以外の他のデータ、要因、条件、及び/又は状態等にも影響を受けて当該結果が得られる場合をも含み得る。また、「データを出力する」旨が記載されている場合、特に断りがない場合、各種データそのものを出力として用いる場合や、各種データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、各種データの中間表現等)を出力とする場合も含む。
 本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
 本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ又は専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造が動作Bを実際に実行するように構築(implemented)されていればよい。
 本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」及び有する「(having)等)」が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
 本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」又は「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
 本明細書において、ある実施例の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施例についても当該効果が得られると理解されるべきである。但し当該効果の有無は、一般に種々の要因、条件、及び/又は状態等に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件、及び/又は状態等が満たされたときに実施例に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
 本明細書(請求項を含む)において、「最大化(maximize)」等の用語が用いられる場合は、グローバルな最大値を求めること、グローバルな最大値の近似値を求めること、ローカルな最大値を求めること、及びローカルな最大値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最大値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最小化(minimize)」等の用語が用いられる場合は、グローバルな最小値を求めること、グローバルな最小値の近似値を求めること、ローカルな最小値を求めること、及びローカルな最小値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最小値の近似値を確率的又はヒューリスティックに求めることを含む。同様に、「最適化(optimize)」等の用語が用いられる場合は、グローバルな最適値を求めること、グローバルな最適値の近似値を求めること、ローカルな最適値を求めること、及びローカルな最適値の近似値を求めることを含み、当該用語が用いられた文脈に応じて適宜解釈されるべきである。また、これら最適値の近似値を確率的又はヒューリスティックに求めることを含む。
 本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、又は電子回路を含む装置等を含んでよい。
 本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置(メモリ)のうち個々の記憶装置(メモリ)は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。
 以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更、置き換え及び部分的削除等が可能である。例えば、前述した全ての実施形態において、数値又は数式を説明に用いている場合は、一例として示したものであり、これらに限られるものではない。また、実施形態における各動作の順序は、一例として示したものであり、これらに限られるものではない。
1 情報処理装置(通信装置)
11 受信部
12 パケット処理部
13 記憶部
14 検索キー生成部
15 検索処理部
16 送信部
90 コンピュータ
91 プロセッサ
92 主記憶装置
93 補助記憶装置
94 ネットワークインタフェース
95 デバイスインタフェース
96 バス
97 通信ネットワーク
98A 外部装置
98B 外部装置
140 一時記憶部

Claims (16)

  1.  検索キーにおいて参照するk(kは1以上の整数)個のビットを指定した参照情報と、前記参照情報により指定されるビットの値に応じて遷移先のノードを定めた少なくとも1つの遷移条件と、を含む複数のノードを有するデータ構造に対して、前記検索キーに合致するノードの検索を行う検索処理部を備え、
     少なくとも1つのノードにおける前記遷移条件の少なくとも1つは、前記参照情報により指定されるビットの少なくとも1つの特定のビットが第1値及び第2値のいずれであることを許容し、
     前記検索処理部は、前記少なくとも1つの遷移条件のうち前記参照情報により指定されるビットが満たしている遷移条件を特定し、特定した前記遷移条件が定めるノードに遷移することにより、前記検索キーに合致するノードの検索を行う
     情報処理装置。
  2.  前記検索処理部は、前記参照情報により指定されるビットが満たしている遷移条件が複数存在する場合、複数の特定した遷移条件ごとに、特定した前記遷移条件が定めるノードに遷移する
     請求項1に記載の情報処理装置。
  3.  前記少なくとも1つの遷移条件は、少なくとも1つの第1遷移条件と、少なくとも1つの第2遷移条件とを含み、
     第1遷移条件は、前記参照情報により指定されるビットのそれぞれが第1値又は第2値のいずれか一方であることを定めており、
     前記第2遷移条件は、前記参照情報により指定されるビットの少なくとも特定のビットが前記第1値及び前記第2値のいずれであることを許容している
     請求項1又は2に記載の情報処理装置。
  4.  前記検索処理部は、前記参照情報により指定されるビットの右ビットシフト演算に基づき、前記参照情報により指定されるビットが満たしている前記第2遷移条件を特定する
     請求項3に記載の情報処理装置。
  5.  前記参照情報により指定される前記k個のビットは、前記検索キーに含まれる複数のビットのうち連続するk個のビットである
     請求項1~4のいずれか一項に記載の情報処理装置。
  6.  前記ノードは、バリューと、優先度とを有し、
     前記検索処理部は、検索により見つかった複数のノードに含まれるバリューを検索結果の候補として取得し、
     前記検索処理部は、前記複数のノードの優先度に基づき、複数の前記候補から選択した1つを、前記検索結果とする
     請求項1~5のいずれか一項に記載の情報処理装置。
  7.  前記少なくとも1つの遷移条件は、複数の第2遷移条件を含み、
     前記複数の第2遷移条件が前記第1値及び前記第2値のいずれであることを許容するビットは互いに異なっている
     請求項3に記載の情報処理装置。
  8.  前記複数の第2遷移条件は、前記参照情報により指定されるビットの最下位のビットのみが前記第1値及び前記第2値のいずれであることを許容する
     請求項7に記載の情報処理装置。
  9.  前記検索処理部は、遷移先のノードの参照情報が、前記遷移先のノードへ遷移する前のノードの参照情報と同じビット又は前記ビットより上位のビットを指定している場合、前記遷移先のノードを前記検索キーに合致するノードとする
     請求項1~8のいずれか一項に記載の情報処理装置。
  10.  前記ノードはキーデータを有し、
     前記検索処理部は、前記検索キーに一致するキーデータを有するノードを前記検索キーに合致するノードとする
     請求項1~9のいずれか一項に記載の情報処理装置。
  11.  前記ノードは、前記遷移条件が定めるノード以降に遷移する可能性があるノードのうち最大の優先度を有しており、
     前記検索処理部は、前記最大の優先度が前記ノードの優先度より低い場合、前記遷移条件が定めるノードへの遷移を行わない
     請求項6に記載の情報処理装置。
  12.  前記ノードは、前記少なくとも1つの遷移条件の順番に関する情報と、ベースアドレスとを含み、
     前記検索処理部は、特定した前記遷移条件の順番に応じたオフセットと、前記ベースアドレスとに基づき、特定した前記遷移条件が定める遷移先のノードのアドレスを算出し、算出したアドレスに基づき前記遷移先のノードに遷移する
     請求項1~11のいずれか一項に記載の情報処理装置。
  13.  前記遷移先のノードへ遷移する前のノードは、前記検索キーに合致する前記遷移先のノードの情報を含み、
     前記検索処理部は、前記遷移先のノードへ遷移する前のノードから、前記遷移先のノードの情報を取得し、取得した情報に基づき、前記遷移先のノードを前記検索キーに合致するノードとして特定する
     請求項9に記載の情報処理装置。
  14.  パケットを受信する受信部と、
     前記パケットのヘッダに基づき前記検索キーを生成する生成部と、
     前記検索処理部は、前記検索キーに基づき前記データ構造における前記ノードの検索を行い、
     前記ノードはパケットに対して行う処理を示すバリューを含み、
     前記検索で見つかったノードに含まれるバリューに応じた処理を前記パケットに対して行うパケット処理部を備えた
     請求項1~13のいずれか一項に記載の情報処理装置。
  15.  検索キーにおいて参照するk(kは1以上の整数)個のビットを指定した参照情報と、前記参照情報により指定されるビットの値に応じて遷移先のノードを定めた少なくとも1つの遷移条件と、を含む複数のノードを有するデータ構造に対して、前記検索キーに合致するノードの検索を行うステップを備え、
     少なくとも1つのノードにおける前記遷移条件の少なくとも1つは、前記参照情報により指定されるビットの少なくとも1つが第1値及び第2値のいずれであることを許容し、 前記ステップは、前記少なくとも1つの遷移条件のうち前記参照情報により指定されるビットが満たしている遷移条件を特定し、特定した前記遷移条件が定めるノードに遷移する行うことにより、前記検索キーに合致するノードの検索を行う
     情報処理方法。
  16.  検索キーにおいて参照するk(kは1以上の整数)個のビットを指定した参照情報と、前記参照情報により指定されるビットの値に応じて遷移先のノードを定めた少なくとも1つの遷移条件と、を含む複数のノードを有するデータ構造に対して、前記検索キーに合致するノードの検索を行うステップをコンピュータに実行させ、
     少なくとも1つのノードにおける前記遷移条件の少なくとも1つは、前記参照情報により指定されるビットの少なくとも1つの特定のビットが第1値及び第2値のいずれであることも許容し、
     前記ステップは、前記少なくとも1つの遷移条件のうち前記参照情報により指定されるビットが満たしている遷移条件を特定し、特定した前記遷移条件が定めるノードに遷移することにより、前記検索キーに合致するノードの検索を行う
     コンピュータプログラム。
PCT/JP2021/040841 2020-11-06 2021-11-05 情報処理装置、情報処理方法及びコンピュータプログラム WO2022097725A1 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2020-186097 2020-11-06
JP2020186097A JP2024022699A (ja) 2020-11-06 2020-11-06 情報処理装置、情報処理方法及びコンピュータプログラム

Publications (1)

Publication Number Publication Date
WO2022097725A1 true WO2022097725A1 (ja) 2022-05-12

Family

ID=81458336

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2021/040841 WO2022097725A1 (ja) 2020-11-06 2021-11-05 情報処理装置、情報処理方法及びコンピュータプログラム

Country Status (2)

Country Link
JP (1) JP2024022699A (ja)
WO (1) WO2022097725A1 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030123459A1 (en) * 2001-09-17 2003-07-03 Heng Liao Efficiency masked matching
US6662184B1 (en) * 1999-09-23 2003-12-09 International Business Machines Corporation Lock-free wild card search data structure and method
WO2009004796A1 (ja) * 2007-07-03 2009-01-08 S.Grants Co., Ltd. ビット列検索方法及びプログラム
JP2015162024A (ja) * 2014-02-26 2015-09-07 日本電信電話株式会社 検索木生成・検索装置及び方法及びプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6662184B1 (en) * 1999-09-23 2003-12-09 International Business Machines Corporation Lock-free wild card search data structure and method
US20030123459A1 (en) * 2001-09-17 2003-07-03 Heng Liao Efficiency masked matching
WO2009004796A1 (ja) * 2007-07-03 2009-01-08 S.Grants Co., Ltd. ビット列検索方法及びプログラム
JP2015162024A (ja) * 2014-02-26 2015-09-07 日本電信電話株式会社 検索木生成・検索装置及び方法及びプログラム

Also Published As

Publication number Publication date
JP2024022699A (ja) 2024-02-21

Similar Documents

Publication Publication Date Title
US10764181B2 (en) Pipelined evaluations for algorithmic forwarding route lookup
CN108370352B (zh) 使用网络处理器的高速灵活分组分类
US9495479B2 (en) Traversal with arc configuration information
US8180803B2 (en) Deterministic finite automata (DFA) graph compression
US7949683B2 (en) Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8819217B2 (en) Intelligent graph walking
CN105122745B (zh) 用于网络设备的高效最长前缀匹配技术
US9398033B2 (en) Regular expression processing automaton
US20150242429A1 (en) Data matching based on hash table representations of hash tables
CN110301120A (zh) 流分类装置、方法和系统
US20140237097A1 (en) Receiving data packets
JP5807676B2 (ja) パケット分類器、パケット分類方法、及びパケット分類プログラム
US11258707B1 (en) Systems for building data structures with highly scalable algorithms for a distributed LPM implementation
Chang et al. Range-enhanced packet classification design on FPGA
WO2022097725A1 (ja) 情報処理装置、情報処理方法及びコンピュータプログラム
US8166536B1 (en) Transformation of network filter expressions to a content addressable memory format
JP5673667B2 (ja) パケット分類器、パケット分類方法、パケット分類プログラム
US20230275979A1 (en) Packet filtering using binary search trees
US11245625B2 (en) Generating entries in a content addressable memory of a network device
US9032142B2 (en) System and method for storing integer ranges in a memory
CN116471344B (zh) 一种数据报文的关键字提取方法、装置及介质
Neji et al. Managing hybrid packet filter's specifications
JP3443356B2 (ja) パケット分類装置
JP2006115068A (ja) パケット処理装置

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 21889277

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 21889277

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP