IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 新華三技術有限公司の特許一覧

特表2023-534123パケットマッチング方法、装置、ネットワークデバイスおよび媒体
<>
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図1
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図2
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図3
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図4a
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図4b
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図5a
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図5b
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図5c
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図6
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図7
  • 特表-パケットマッチング方法、装置、ネットワークデバイスおよび媒体 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-08-08
(54)【発明の名称】パケットマッチング方法、装置、ネットワークデバイスおよび媒体
(51)【国際特許分類】
   H04L 45/74 20220101AFI20230801BHJP
【FI】
H04L45/74
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022577333
(86)(22)【出願日】2021-06-25
(85)【翻訳文提出日】2022-12-15
(86)【国際出願番号】 CN2021102426
(87)【国際公開番号】W WO2022267018
(87)【国際公開日】2022-12-29
(81)【指定国・地域】
(71)【出願人】
【識別番号】518056748
【氏名又は名称】新華三技術有限公司
【氏名又は名称原語表記】NEW H3C TECHNOLOGIES CO., LTD.
(74)【代理人】
【識別番号】100147485
【弁理士】
【氏名又は名称】杉村 憲司
(74)【代理人】
【識別番号】230118913
【弁護士】
【氏名又は名称】杉村 光嗣
(74)【代理人】
【識別番号】100224683
【弁理士】
【氏名又は名称】齋藤 詩織
(72)【発明者】
【氏名】王 洋
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA01
5K030HA08
5K030HD03
5K030JA11
5K030KA05
5K030LB05
(57)【要約】
本発明実施例は、通信技術分野に関し、パケットマッチング方法、装置、ネットワークデバイスおよび媒体を提供する。本発明実施例は、N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定することと、N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチして、一時的に記憶し、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出することと、N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、バッファから第1出力インターフェースデータを取得することと、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインにおける第1データパケットを1本目のパイプラインから削除し、第2データパケットを受信した場合、第2データパケットを1本目のパイプラインに入れることと、を含む。本発明によれば、パケットマッチングを高速化することできる。
【選択図】図6
【特許請求の範囲】
【請求項1】
N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定し、前記決定木における各ノードのそれぞれは1種類のプレフィックス長を表し、かつ、各ノードのそれぞれが表するプレフィックス長は異なることと、
前記N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから前記第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、前記第1出力インターフェースデータをバッファに記憶し、メモリから前記第1出力インターフェースデータをプリフェッチすると同時に前記N本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出して、前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行し、ここで、パイプラインのハッシュ値はパイプラインにおけるデータパケットの宛先アドレスとstageが表するプレフィックス長とのハッシュ値であることと、
前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、前記バッファから前記第1出力インターフェースデータを取得することと、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインにおける第1データパケットを前記1本目のパイプラインから削除し、第2データパケットを受信した場合、前記第2データパケットを前記1本目のパイプラインに入れることと、を含む、
ことを特徴とする、パケットマッチング方法。
【請求項2】
前記方法は、前記バッファから前記第1出力インターフェースデータを取得することの後に、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、前記1本目のパイプラインのstageを前記ルートノードの右サブノードに更新し、前記1本目のパイプラインにおける出力インターフェース情報を前記第1出力インターフェースデータに更新すること、を含む、
ことを特徴とする、請求項1に記載の方法。
【請求項3】
前記方法は、前記バッファから前記第1出力インターフェースデータを取得することの後に、さらに、
前記決定木における前記ルートノードの右サブノードがヌルであるか否かを判断することと、
ヌルである場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定することと、
ヌルではない場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定することと、を含む、
ことを特徴とする、請求項1または2に記載の方法。
【請求項4】
前記方法は、さらに、
前記バッファから前記第1ハッシュ値に対応する第1出力インターフェースデータを取得することができなかった場合、前記1本目のパイプラインのstageを前記ルートノードの左サブノードに更新すること、を含む、
ことを特徴とする、請求項1に記載の方法。
【請求項5】
前記方法は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインのstageをマッチング完了に更新すること、を含み、
前記の前記1本目のパイプラインにおける第1データパケットを削除することは、
前記N本のパイプラインのstageのいずれも1回の更新を完了した後、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除すること、を含む、
ことを特徴とする、請求項1に記載の方法。
【請求項6】
パケットマッチング装置であって、
N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定する設定モジュールであって、前記決定木における各ノードのそれぞれは1種類のプレフィックス長を表し、かつ、各ノードのそれぞれが表するプレフィックス長は異なる設定モジュールと、
前記N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから前記第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、前記第1出力インターフェースデータをバッファに記憶し、メモリから前記第1出力インターフェースデータをプリフェッチすると同時に前記N本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出して、前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行すプリフェッチモジュールであって、パイプラインのハッシュ値はパイプラインにおけるデータパケットの宛先アドレスとstageが表するプレフィックス長とのハッシュ値であるプリフェッチモジュールと、
前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、前記バッファから前記第1出力インターフェースデータを取得する取得モジュールと、を含み、
前記設定モジュールは、さらに、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインにおける第1データパケットを前記1本目のパイプラインから削除し、第2データパケットを受信した場合、前記第2データパケットを前記1本目のパイプラインに入れる、
ことを特徴とする、パケットマッチング装置。
【請求項7】
前記装置は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、前記1本目のパイプラインのstageを前記ルートノードの右サブノードに更新し、前記1本目のパイプラインにおける出力インターフェース情報を前記第1出力インターフェースデータに更新する更新モジュールを含む、
ことを特徴とする、請求項6に記載の装置。
【請求項8】
前記装置は、さらに、
前記決定木における前記ルートノードの右サブノードがヌルであるか否かを判断し、ヌルである場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定し、 ヌルではない場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定する判断モジュールを含む、
ことを特徴とする、請求項6または7に記載の装置。
【請求項9】
前記装置は、さらに、
前記バッファから前記第1ハッシュ値に対応する第1出力インターフェースデータを取得することができなかった場合、前記1本目のパイプラインのstageを前記ルートノードの左サブノードに更新する更新モジュールを含む、
ことを特徴とする、請求項6に記載の装置。
【請求項10】
前記装置は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインのstageをマッチング完了に更新する更新モジュールを含み、
前記設定モジュールは、前記N本のパイプラインのstageのいずれも1回の更新を完了した後、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除する、
ことを特徴とする、請求項6に記載の装置。
【請求項11】
プロセッサと、通信インターフェイスと、記憶装置と、通信バスとを含むネットワークデバイスであって、ここで、プロセッサ、通信インターフェイス、および記憶装置は、通信バスを介して相互に通信し、
記憶装置は、コンピュータープログラムを格納し、
プロセッサは、記憶装置に格納されているプログラムを実行すると、請求項1~5のいずれか一項に記載の方法ステップを実現する、
ことを特徴とする、ネットワークデバイス。
【請求項12】
コンピューター可読記憶媒体であって、前記コンピューター可読記憶媒体にはコンピュータープログラムが記憶されており、前記コンピュータープログラムはプロセッサによって実行されると、請求項1~5のいずれか一項に記載の方法ステップを実現する、
ことを特徴とする、コンピューター可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信技術分野に関し、特に、パケットマッチング方法、装置、ネットワークデバイスおよび媒体に関する。
【背景技術】
【0002】
従来、ネットワークスイッチまたはルータなどのネットワークデバイスは、転送情報ベース(Forwarding Information Base、FIB)によってインターネットプロトコル(Internet Protocol、IP)パケットまたは名前付きデータネットワーキング(Named Data Networking、NDN)パケットの転送を指示する。パケット転送過程において、ロンゲストマッチの原則にしたがって、FIBからパケットを転送するための出力インターフェースを取得する。当該出力インターフェースが所在するFIBエントリーは、FIBにおける宛先アドレスに一致するプレフィックス長が最も長いエントリーである。
【0003】
FIBエントリーは、key-valueの形態でhash表に格納されている。ここで、プレフィックス/プレフィックス長のハッシュ値をkeyとして、プレフィックス/プレフィックス長に対応する出力インターフェースをvalueとする。パケットマッチングを高速化するために、動的決定木が導入された。決定木における各ノードのそれぞれは、1つの可能なプレフィックス長を示す。決定木のルートノードはパケットマッチング過程においてヒット率が最も高いプレフィックス長であり、他の可能なプレフィックス長は、マッチングヒット率にしたがって、高い順に当該決定木のサブノードに分布する。
【0004】
転送対象パケットを受信したと、決定木を検索することにより、転送対象パケットの宛先アドレスをマッチし、転送対象パケットに対応する出力インターフェースを取得する。即ち、宛先アドレスと決定木のノードに対応するプレフィックス長とのハッシュ値を算出して、メモリにおけるハッシュ表から当該ハッシュ値に対応する出力インターフェースが存在するか否かを検索する。ネットワークデバイスのCPUは、1つの転送対象パケットをマッチするためにメモリを複数回アクセスする必要があり、受信した転送対象パケットが多い場合、転送対象パケットのマッチング速度が遅くなってしまい、転送対象パケットを適時に転送することができない。
【発明の概要】
【課題を解決するための手段】
【0005】
本発明実施例は、パケットマッチングを高速化し、パケットを適時に転送するように、パケットマッチング方法、装置、ネットワークデバイスおよび媒体を提供することを目的とする。具体的な技術案は以下の通り。
【0006】
第1態様として、本発明は、パケットマッチング方法を提供する。前記方法は、
N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定し、前記決定木における各ノードのそれぞれは1種類のプレフィックス長を表し、かつ、各ノードのそれぞれが表するプレフィックス長は異なることと、
前記N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから前記第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、前記第1出力インターフェースデータをバッファに記憶し、メモリから前記第1出力インターフェースデータをプリフェッチすると同時に前記N本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出して、前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行し、ここで、パイプラインのハッシュ値はパイプラインにおけるデータパケットの宛先アドレスとstageが表するプレフィックス長とのハッシュ値であることと、
前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、前記バッファから前記第1出力インターフェースデータを取得することと、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインにおける第1データパケットを前記1本目のパイプラインから削除し、第2データパケットを受信した場合、前記第2データパケットを前記1本目のパイプラインに入れることと、を含む。
【0007】
1つの可能な実施形態において、前記バッファから前記第1出力インターフェースデータを取得することの後に、前記方法は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、前記1本目のパイプラインのstageを前記ルートノードの右サブノードに更新し、前記1本目のパイプラインにおける出力インターフェース情報を前記第1出力インターフェースデータに更新すること、を含む。
【0008】
1つの可能な実施形態において、前記バッファから前記第1出力インターフェースデータを取得することの後に、前記方法は、さらに、
前記決定木における前記ルートノードの右サブノードがヌルであるか否かを判断することと、
ヌルである場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定することと、
ヌルではない場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定することと、を含む。
【0009】
1つの可能な実施形態において、前記方法は、さらに、
前記バッファから前記第1ハッシュ値に対応する第1出力インターフェースデータを取得することができなかった場合、前記1本目のパイプラインのstageを前記ルートノードの左サブノードに更新すること、を含む。
【0010】
1つの可能な実施形態において、前記方法は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインのstageをマッチング完了に更新すること、を含み、
前記1本目のパイプラインにおける第1データパケットを削除することは、
前記N本のパイプラインのstageのいずれも1回の更新を完了した場合、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除すること、を含む。
【0011】
第2態様として、本発明は、パケットマッチング装置を提供する。前記装置は、
N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定する設定モジュールであって、前記決定木における各ノードのそれぞれは1種類のプレフィックス長を表し、かつ、各ノードのそれぞれが表するプレフィックス長は異なる設定モジュールと、
前記N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから前記第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、前記第1出力インターフェースデータをバッファに記憶し、メモリから前記第1出力インターフェースデータをプリフェッチすると同時に前記N本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出して、前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行するプリフェッチモジュールであって、ここで、パイプラインのハッシュ値はパイプラインにおけるデータパケットの宛先アドレスとstageが表するプレフィックス長とのハッシュ値であるプリフェッチモジュールと、
前記N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、前記バッファから前記第1出力インターフェースデータを取得する取得モジュールと、を含み、
前記設定モジュールは、さらに、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものである場合、前記1本目のパイプラインにおける第1データパケットを前記1本目のパイプラインから削除し、第2データパケットを受信した場合、前記第2データパケットを前記1本目のパイプラインに入れる。
【0012】
1つの可能な実施形態において、前記装置は、さらに、
前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、前記1本目のパイプラインのstageを前記ルートノードの右サブノードに更新し、前記1本目のパイプラインにおける出力インターフェース情報を前記第1出力インターフェースデータに更新する更新モジュールを含む。
【0013】
1つの可能な実施形態において、前記装置は、さらに、
前記決定木における前記ルートノードの右サブノードがヌルであるか否かを判断し、
ヌルである場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定し、
ヌルではない場合、前記第1出力インターフェースデータが表現した出力インターフェースは前記1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定する判断モジュールを含む。
【0014】
1つの可能な実施形態において、前記装置は、さらに、
前記バッファから前記第1ハッシュ値に対応する第1出力インターフェースデータを取得することができなかった場合、前記1本目のパイプラインのstageを前記ルートノードの左サブノードに更新する更新モジュールを含む。
【0015】
1つの可能な実施形態において、前記装置は、さらに、
第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインのstageをマッチング完了に更新する更新モジュールを含み、
前記設定モジュールは、前記N本のパイプラインのstageのいずれも1回の更新を完了した場合、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除する。
【0016】
第3態様として、本発明実施例は、ネットワークデバイスを提供する。前記ネットワークデバイスは、プロセッサと、通信インターフェイスと、記憶装置と、通信バスとを含み、プロセッサ、通信インターフェイスおよび記憶装置は、通信バスを介して相互に通信し、
記憶装置は、コンピュータープログラムを格納し、
プロセッサは、記憶装置に格納されているプログラムを実行すると、上記した第1態様に記載の方法ステップを実現する。
【0017】
第4態様として、本発明実施例は、コンピューター可読記憶媒体を提供する。当該コンピューター可読記憶媒体にはコンピュータープログラムが記憶されており、前記コンピュータープログラムはプロセッサによって実行されると、第1態様に記載の方法を実現する。
【0018】
第5態様として、本発明実施例は、命令を含むコンピュータープログラム製品を提供する。前記コンピュータープログラム製品は、コンピューターで実行されると、コンピューターに上記した第1態様に記載のデータ処理方法を実行させる。
【発明の効果】
【0019】
本発明実施例が提供するパケットマッチング方法、装置、ネットワークデバイスおよび媒体は、N本のパイプラインによってN個の第1データパケットに対してマッチングを行うことができ、N個の第1データパケットをN個のパイプラインに入れた後、N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、第1出力インターフェースデータをバッファに記憶し、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出することができる。このように、N本のパイプラインのうちの1本のパイプラインのハッシュ値を算出するごとに、非同期的にメモリから当該ハッシュ値に対応する出力インターフェースデータをプリフェッチすることに相当し、これにより、第1ハッシュ値に対応する第1出力インターフェースデータを取得することが必要である場合、メモリにアクセスする必要がなく、直接にバッファから第1出力インターフェースデータを取得することができ、パケットマッチングに必要な時間が減少される。かつ、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、当該1本目のパイプラインにおける第1データパケットを1本目のパイプラインから削除し、これによって、第2データパケットを1本目のパイプラインに入れて処理する。N本のパイプラインにおける第1データパケットをすべて転送しなければ、受信した第2データパケットを処理できない従来技術に比べて、本発明実施例では、データパケットさえパイプラインから削除されれば、第2データパケットを当該パイプラインに入れて処理を開始することができ、受信したデータパケットのマッチングおよび転送を高速化できる。
【0020】
無論、実施本願に係る製品や方法のいずれかは、上述のすべての利点を同時に達成する必要はない。
【図面の簡単な説明】
【0021】
本発明実施例及び従来技術の技術案をより明らかに説明するためには、以下、実施例及び従来技術の説明に必要となる図面について、簡単に説明する。以下の説明における図面は、本発明のある実施例に過ぎず、当業者にとって、進歩性を有する努力をせずに、これらの図面に基づいて他の図面を得ることが明らかである。
【0022】
図1図1は本発明実施例が提供する決定木の例示的な模式図である。
図2図2は本発明実施例が提供する別の決定木の例示的な模式図である。
図3図3は本発明実施例が提供する決定木を生成するためのマトリクスの例示的な模式図である。
図4図4aおよび図4bは本発明実施例が提供する決定木を生成する過程の例示的な模式図である。
図5図5a、図5bおよび図5cは本発明実施例が提供する別の決定木を生成する過程の例示的な模式図である。
図6図6は本発明実施例が提供するパケットマッチング方法のフローチャートである。
図7図7は本発明実施例が提供するパケットマッチング装置の構成模式図である。
図8図8は本発明実施例が提供するネットワークデバイスの構成模式図。
【発明を実施するための形態】
【0023】
本発明の目的、技術案および利点をより明らかに説明するためには、以下、図面及び実施例を参照して、本発明をさらに詳しく説明する。勿論、説明される実施例は単に本発明の一部の実施例に過ぎず、すべての実施例ではない。本願実施例に基づき、当業者が進歩性を有する努力をせずに想到し得るほかの実施例はすべて本願の保護範囲に属する。
【0024】
理解の便宜上、まず、本発明実施例に係る関連概念について紹介する。
【0025】
一、FIBエントリー。
【0026】
FIBエントリーは、IPv4/IPv6/NDNパケットの転送を指示する。FIBエントリーの中核的な構成は、プレフィックス/プレフィックス長+出力インターフェースである。ここで、プレフィックス長は、プレフィックスのどの部分が有効なマッチング部分であるかを示す。
【0027】
1.IPv4のFIBを例として、FIBに含まれる2つのエントリーは以下の通りである。
【0028】
Entry1:IPプレフィックス:10.0.0.0/8 出力インターフェース:インターフェイス2。
Entry2:IPプレフィックス:10.20.0.0/16 出力インターフェース:インターフェイス3。
【0029】
ここで、「10.0.0.0/8」における「10.0.0.0」はプレフィックスであり、「8」はプレフィックス長であり、受信したパケットの宛先アドレスがプレフィックスにおける「10.」に一致した場合、インターフェイス2を介してパケットを転送することを表す。
【0030】
「10.20.0.0/16」における「10.20.0.0」はプレフィックスであり、「16」はプレフィックス長であり、受信したパケットの宛先アドレスがプレフィックスにおける「10.20.」に一致した場合、インターフェイス3を介してパケットを転送することを表す。
【0031】
なお、FIBエントリーに基づいてパケットマッチングを行う際に、ロンゲストマッチの原則に従い、即ち、パケットの宛先アドレスが複数のエントリーに一致した場合、一致するエントリーのうちのプレフィックス長が最も長いエントリーにおける出力インターフェースを選択する。
【0032】
例えば、仮に受信したパケットの宛先IPアドレスが10.0.0.1である場合、当該宛先IPアドレスが上記したEntry1のみに一致するため、ネットワークデバイスは、Entry1における出力インターフェース2を当該パケットの転送インターフェイスとして選択する。
【0033】
また、例えば、仮に受信したパケットの宛先IPアドレスが10.20.0.1である場合、当該宛先IPアドレスが同時に上記したEntry1およびEntry2に一致するが、Entry2のプレフィックス長16がEntry1のプレフィックス長8より長いため、ネットワークデバイスは、Entry2における出力インターフェース3を当該パケットの転送インターフェイスとして選択する。
【0034】
2.また、NDNネットワークのFIBを例として、NDNネットワークは、IPネットワークと類似しており、IPアドレスをディレクトリ形態に変更した。ディレクトリは、テキストキャラクターをサポートするものである。
【0035】
例えば、FIBに含まれる3つのエントリーは以下の通りである。
【0036】
Entry1:NDNプレフィックス:/Book/Fiction/Science 出力インターフェース:インターフェイス1。
Entry2:NDNプレフィックス:/Book 出力インターフェース:インターフェイス2。
Entry3:NDNプレフィックス:/Shoe 出力インターフェース:インターフェイス3。
【0037】
ここで、「/」はプレフィックスを層化し、NDNのFIBもロンゲストプレフィックスマッチングの原則に従う。
【0038】
例えば、受信したパケットの宛先アドレスが/Book/Fiction/Science/BladeRunnerである場合、当該宛先アドレスがEntry1とEntry2とのどちらも一致するが、Entry1のプレフィックス長が3であり、Entry2のプレフィックス長が1であるため、ネットワークデバイスは、Entry1に含まれる出力インターフェース1を当該パケットの転送インターフェイスとする。
【0039】
また、例えば、受信したパケットの宛先アドレスが/Book/Fiction/Ancientである場合、当該宛先アドレスがEntry2に一致することを確定できるため、ネットワークデバイスは、Entry2に含まれる出力インターフェース2を当該パケットの転送インターフェイスとする。
【0040】
IPネットワークは、特別なNDNネットワークと見なすことができる。NDNは、任意のキャラクター、任意の長さのプレフィックス分割をサポートし、IPネットワークは、0/1の2種類のBitの分割をサポートし、かつIPパケットが一定的な最大プレフィックス長を有する。ここで、IPv6の最大プレフィックス長が128Bitであり、IPv4の最大プレフィックス長が32Bitである。
【0041】
二、HASH FIB
【0042】
FIBのエントリーに含まれるプレフィックス情報および出力インターフェース情報は、key-valueの形態でメモリのハッシュ表に格納されている。仮に、FIBには、以下のエントリーを含む。
【0043】
Entry1:プレフィックス/a/b/c/d/e 出力インターフェース1
Entry2:プレフィックス/a 出力インターフェース2
Entry3: プレフィックス/a/b/c/d 出力インターフェース3
Entry4:プレフィックス/f/g 出力インターフェース4
【0044】
パケットを受信した後、パケットの宛先アドレスを各エントリーにおけるプレフィックスのそれぞれにマッチし、一致する最も長いプレフィックスに対応するインターフェイスを当該パケットの転送インターフェイスとする必要がある。しかし、1つのエントリーにマッチするごとに、メモリを一回アクセスする必要があり、これにより、パケットマッチングに必要な時間が長くなってしまう。
【0045】
パケットマッチングを高速化するために、二分法によってパケットの宛先アドレスと一致するエントリーを検索することができる。宛先アドレスが/a/b/c/d/fであるパケットについて、二分法によって検索する場合、まず、プレフィックス/a/b/cをマッチしてみて、FIBのエントリーにはプレフィックス/a/b/cは存在しないことが分かる。このとき、ネットワークデバイスが/a/b/cより長いプレフィックスをマッチできないことを間違って認識した場合、ネットワークデバイスは、FIBから、より短いプレフィックスを、例えばプレフィックス/aを検索し、Entry2における出力インターフェース2を介して当該パケットを転送する。しかし、実際に、当該宛先アドレスに一致する最も長いプレフィックスがEntry3におけるプレフィックス/a/b/c/dであるはずので、パケットが間違って転送されてしまう。
【0046】
二分法によってHASH FIBを正確に検索することができない課題を解決するために、HASH FIBに仮想のエントリー(Virtual Entry)を追加することができる。
【0047】
上記したHASH FIBを例として、Entry1パスにおける仮想のエントリーに含まれるプレフィックスは/a、/a/b、/a/b/c、/a/b/c/dであり、ここで、/aおよび/a/b/c/dは既に存在しているため、追加する必要がない。Entry1にプレフィックスが/a/bと/a/b/cである2つの仮想のEntryを追加する必要がある。
【0048】
Entry2のプレフィックス長が1であるため、仮想のEntryを追加する必要がない。
【0049】
Entry3パスにおける仮想のエントリーに含まれるプレフィックスが/a、/a/b、/a/b/cであり、ここで、/aは既に存在しているため、プレフィックスが/a/b/cと/a/bである仮想のEntryを追加することができる。
【0050】
Entry4パスにおける仮想のエントリーに含まれるプレフィックスが/fであり、プレフィックスが/fである仮想のEntryを追加することができる。
【0051】
上記した仮想のEntryを追加した後、得られたHASH FIBは以下を含む。
【0052】
Entry1:プレフィックス/a/b/c/d/e 出力インターフェース1
Entry2:プレフィックス/a 出力インターフェース2
Entry3:プレフィックス/a/b/c/d 出力インターフェース3
Entry4:プレフィックス/f/g 出力インターフェース4
Entry5:プレフィックス/a/b 出力インターフェース2
Entry6:プレフィックス/a/b/c 出力インターフェース2
Entry7:プレフィックス/f 出力インターフェースがデフォルトである
【0053】
仮想のEntryを追加した後、二分法によってエントリーを検索することを実現できる。例えば、受信したパケットの宛先アドレスが/a/b/w/x/y/zである場合。HASH FIBを検索することによって、/a/b/wは存在しないことを確定できるため、/a/b/w/x/y/zについては、/a/b/wより優れたプレフィックスマッチングは必ず存在しないことを確定できる。そのため、/a/b/wから再帰的に二分検索を行うことができ、HASH FIBの検索速度を大幅に速める。搜索の回数は、N回からLog2(N)回に上げることができ、Nが最大プレフィックス長であり、例えば、IPv6ネットワークについて、Nの最大値が128である。
【0054】
三、最適決定木
【0055】
パケットマッチングをさらに高速化するために、本発明実施例では、すべての可能なプレフィックス長を決定木に生成することができる。ここで、決定木を生成する原則は、マッチングヒット率が高いプレフィックス長ほど決定木のルートノードに近く、各ノードの左サブノードが表するプレフィックス長は右サブノードのプレフィックス長より短い。
【0056】
例えば、ネットワークデバイスが受信したほとんどのパケットは長さが128であるプレフィックス(以下、Prefix128と略称する)にヒットした場合、生成された決定木は図1に示す。ここで、Prefix128がルートノードとして、他のプレフィックス長はいずれもルートノードの左ブランチであり、Ipv6パケットの最大プレフィックス長が128bitであり、128より長いプレフィックスは存在しないため、ルートノードの右サブノードがヌルである。
【0057】
Prefix128のパケットを受信した後、決定木のルートノードのマッチングが1回だけで出力インターフェースを確定することができる。
【0058】
また、例えば、ネットワークデバイスが受信したほとんどのパケットは長さが127であるプレフィックス(即ち、Prefix127である)にヒットした場合、生成された決定木は図2に示す。ここで、Prefix127がルートノードとして、Prefix128がルートノードの右サブノードとして、他のプレフィックス長はいずれもルートノードの左ブランチである。
【0059】
Prefix127のパケットを受信した後、まず、決定木のルートノードPrefix127にマッチする。このとき、マッチングが成功である。最も長いプレフィックスをマッチする原則に基づいて、さらにルートノードの右サブノードPrefix128にマッチする必要がある。このとき、マッチングが失敗であり、かつ右サブノードPrefix128には左右ブランチはないため、最終的に、Prefix127のパケットがルートノードに一致することを確定する。2回の決定木のマッチング過程で出力インターフェースを確定できる。
【0060】
上記した決定木は、転送パケットが各プレフィックス長にヒットする確率によって生成されることができる。説明の便宜上、本発明実施例に係る符号の意味は以下の通りである。
【0061】
は、パケットがPrefixXにヒットする確率を表し、
cost(m,n)は、PrefixmからPrefixnまでの最適な決定木を検索するために必要な消費ステップの期待値を表す。
【0062】
ipv6を例として、最適決定木を建築する目標は、cost(1,128)を解くこと、即ち、Prefix1からPrefix128までの最適決定木を検索するために必要な消費ステップの期待値である。
【0063】
cost(1,128)について、仮に50をルートノードとする場合、パケットは、左ブランチに入る確率がP+P+…+P49であって、右ブランチに入る確率がP50+P51+…+P128である。
【0064】
このとき、50をルートノードとする場合、消費ステップの期待値は、1+(P+P+…+P49)*Cost(1,49)+(P50+P51+…+P128)*Cost(51,128)である。
【0065】
上記した式において、1は、決定木のルートノードにマッチするために消費するステップである。Cost(1,49)は、決定木の左ブランチにマッチするために消費するステップである。Cost(51,128)は、決定木の右ブランチにマッチするために消費するステップである。
【0066】
ルートノードを選択する際に、cost(1,128)が最小であることを目標とし、即ち、決定木にマッチするために消費するステップが少ないほど、パケット全体のマッチング速度が速い。
【0067】
そのため、cost(1,128)=min(1+(P+P+…+Pj-1)*Cost(1,j-1)+(P+Pj+1+…+P128)*Cost(j+1,128))であり、ここで、1<=j<=128、かつ、j+1>128である場合、Cost(j+1,128)=0であることを規定する。
それに、Cost(1,1)、Cost(2,2)、…、Cost(n,n)について、その値を固定にして1とする。
【0068】
すると、Cost(m,n)について、その式は以下の通りである。
【0069】
Cost(m,n)=min(1+(Pm-1+P+… Pj-1)/(Pm-1++… P)*Cost(m,j-1)+(P+…P)/ (Pm-1++… P)*Cost(j+1,n))。
ここで、m<=j<=nであり、かつ、j+1>nである場合、Cost(j+1,n)=0であることを規定する。m-1が0である場合、Pm-1を0として算出する。
【0070】
パケットに対してPrefixmからPrefixnまでのマッチングを行うことは、以下2つの場合がある。1つの場合は、この時点、パケットに一致する最も長いプレフィックスがm-1であり、プレフィックスm-1より優れたマッチングがあるか否かを確定するように、cost(m,n)に入る。もう1つの場合は、パケットに一致する最も長いプレフィックスがm-1より長いため、PrefixmからPrefixnまで、より優れたマッチングを検索する必要がある。
【0071】
1つ目の場合について、パケットがm-1にヒットする確率がとても高いが、mにヒットする確率がとても低い場合、仮に、cost(m,n)を算出するときにパケットがm-1にヒットする確率を考慮しないと、cost(m,n)であるサブ決定木には、プレフィックスmに対応するノードがcost(m,n)のルートノードからとても遠い可能性があり、これによって、m-1に対して、その最も長いマッチングを確定する際に、逆により多くのステップを消費してしまう。そのため、本発明実施例では、パケットマッチングを高速化するように、cost(m,n)を算出する際に、パケットがm-1にヒットする確率をさらに考慮する必要がある。
【0072】
Cost(m,n)の定義と結び付けて、マトリクスによって最適決定木を動的に生成することができる。
【0073】
IPv6ネットワークについて、プレフィックスの最大長さが128bitであるため、128×128の1つのマトリクスを定義することができ、マトリクスの点のそれぞれは、当該ノードを表すCostおよび当該Costを算出するときに選択される分割点の2つの情報を含む。
【0074】
例えば、点(2,5)は、Cost(2,5)およびCost(2,5)を算出するときに選択される分割点を記録している。
【0075】
マトリクスによって最適決定木を算出するときに、1つのマトリクスを生成することができる。まず、マトリクスの対角線における点に対してCost(m,n)および分割点(Split)を算出し、次に、対角線全体を右へ1枠移動させ、右へ移動されて得られた斜線における各点のCost(m,n)および分割点(Split)を算出し、そして、マトリクスの対角線の右側にある点がすべて算出されたまで、右への移動を続ける。
【0076】
5×5のマトリクスを例として、算出の順は図3に示す。
【0077】
第1ラウンドは、左斜線の影にある点に対応するCostおよび分割点を左上から右下へ算出する。
第2ラウンドは、横線の影にある点に対応するCostおよび分割点を左上から右下へ算出する。
第3ラウンドは、縦線の影にある点に対応するCostおよび分割点を左上から右下へ算出する。
第4ラウンドは、右斜線の影にある点に対応するCostおよび分割点を左上から右下へ算出する。
第5ラウンドは、格子状の影にある点に対応するCostおよび分割点を算出する。
【0078】
そして、マトリクスの(1,5)からトラバーサルして、最終の決定木を得ることができる。
【0079】
仮に、ノード(1,5)のSplitが2である場合、得られた決定木の形は、図4aに示すように、ルートノードがprefix2であり、左サブノードはマトリクスにおける(1,1)に対応し、右サブノードはマトリクスにおける(3,5)に対応する。仮に、(3,5)に対応するSplitが4である場合、構築して得られた最適決定木の形は図4bのように示される。
【0080】
以下、具体例と結び付けて、最適決定木の構築方法について説明する。最も長いプレフィックスが5であることを例として、1つの5×5のマトリクスを構築する。
【0081】
ネットワークデバイスは、ヒット率が高いプレフィックス長ほどルートノードに近いように、受信したパケットが各プレフィックス長にヒットする確率を周期的に算出し、その確率に基づいて最適決定木を生成することができる。
【0082】
仮に、Prefix1にヒットする確率が20%であり、
Prefix2にヒットする確率が5%であり、
Prefix3にヒットする確率が10%であり、
Prefix4にヒットする確率が10%であり、
Prefix5にヒットする確率が55%である。
【0083】
まず、マトリクスにおける対角線にある各点のCostおよび分割点、即ち、Cost(1,1)、Cost(2,2)、…、Cost(5,5)を算出し、その値を固定にして1とし、かつ、いずれも分割点が存在しないため、算出した結果は表1のように示される。
【0084】
【表1】
【0085】
そして、Cost(1,2)、Cost(2,3)、Cost(3,4)、Cost(4,5)を算出する。
【0086】
Cost(1,2)を算出するときに、1または2を分割点として選択してよい。
1を分割点として選択した場合、Cost(1,2)は1+(20%+5%)/(20%+5%)*Cost(2,2)=2であり、
2を分割点として選択した場合、Cost(1,2)は1+20%/(20%+5%)*Cost(1,1)=1.8である。
したがって、Cost(1,2)の分割点は2であるべき、かつ、Cost(1,2)=1.8である。
【0087】
Cost(2,3)を算出するときに、2または3を分割点として選択してよい。
2を分割点として選択した場合、Cost(2,3)=1+(5%+10%)/(20%+5%+10%)*Cost(3,3)=1.42であり、
3を分割点として選択した場合、Cost(2,3)=1+(20%+5%)/(20%+5%+10%)*Cost(2,2)=1.71である。
したがって、Cost(2,3)の分割点は2であるべき、かつ、Cost(2,3)=1.42である。
【0088】
Cost(3,4)を算出するときに、3または4を分割点として選択してよい。
3を分割点として選択した場合、Cost(3,4)=1+(10%+10%)/(5%+10%+10%)*Cost(4,4)=1.8であり、
4を分割点として選択した場合、Cost(3,4)=1+(5%+10%)/(5%+10%+10%)*Cost(3,3)=1.6である。
したがって、Cost(3,4)の分割点は4であるべき、かつ、Cost(3,4)=1.6である。
【0089】
Cost(4,5)を算出するときに、4または5を分割点として選択してよい。
4を分割点として選択した場合、Cost(4,5)=1+(10%+55%)/(10%+10%+55%)*Cost(4,4)=1.86であり、
5を分割点として選択した場合、Cost(4,5)=1+(10%+10%)/(10%+10%+55%)*Cost(5,5)=1.26である。
したがって、Cost(4,5)の分割点は5であるべき、かつ、Cost(4,5)=1.26である。
【0090】
この時点、表1のマトリクスは、以下の表2のように更新された。
【0091】
【表2】
【0092】
次に、Cost(1,3)、Cost(2,4)、Cost(3,5)を算出する。
【0093】
Cost(1,3)について、1、2または3を分割点として選択してよい。
1を分割点として選択した場合、Cost(1,3)=1+(20%+5%+10%)/(20%+5%+10%)*Cost(2,3)=2.42であり、
2を分割点として選択した場合、Cost(1,3)=1+20%/(20%+5%+10%)*Cost(1,1)+(5%+10%)/(20%+5%+10%)*Cost(3,3)=2であり、
3を分割点として選択した場合、Cost(1,3)=1+(20%+5%)/(20%+5%+10%)*Cost(1,2)=2.28である。
したがって、Cost(1,3)の分割点は2であるべき、かつ、Cost(1,3)=2である。
【0094】
Cost(2,4)について、2、3または4を分割点として選択してよい。
2を分割点として選択した場合、Cost(2,4)=1+(5%+10%+10%)/(20%+5%+10%+10%)*Cost(3,4)=2.15であり、
3を分割点として選択した場合、Cost(2,4)=1+(20%+5%)/(20%+5%+10%+10%)*Cost(2,2)+(10%+10%)/(20%+5%+10%+10%)*Cost(4,4)=2であり、
4を分割点として選択した場合、Cost(2,4)=1+(20%+5%+10%)/(20%+5%+10%+10%)*Cost(2,3)=2.10である。
したがって、Cost(2,4)の分割点は3であるべき、かつ、Cost(2,4)=2である。
【0095】
Cost(3,5)について、3、4または5を分割点として選択してよい。
3を分割点として選択した場合、Cost(3,5)=1+(10%+10%+55%)/(5%+10%+10%+55%)*Cost(4,5)=2.18であり、
4を分割点として選択した場合、Cost(3,5)=1+(5%+10%)/(5%+10%+10%+55%)*Cost(3,3)+(10%+55%)/(5%+10%+10%+55%)*Cost(5,5)=2であり、
5を分割点として選択した場合、Cost(3,5)=1+(5%+10%+10%)/(5%+10%+10%+55%)*Cost(3,4)=1.5である。
したがって、Cost(3,5)の分割点は5であるべき、かつ、Cost(3,5)=1.5である。
【0096】
この時点、表2のマトリクスは、以下の表3のように更新された。
【0097】
【表3】
【0098】
次に、Cost(1,4)およびCost(2,5)を算出する。
【0099】
Cost(1,4)について、選択可能な分割点は1、2、3または4である。
1を分割点として選択した場合、Cost(1,4)=1+(20%+5%+10%+10%)/(20%+5%+10%+10%)*Cost(2,4)=3であり、
2を分割点として選択した場合、Cost(1,4)=1+(20%)/(20%+5%+10%+10%)*Cost(1,1)+(5%+10%+10%)/(20%+5%+10%+10%)*Cost(3,4)=2.33であり、
3を分割点として選択した場合、Cost(1,4)=1+(20%+5%)/(20%+5%+10%+10%)*Cost(1,2)+(10%+10%)/(20%+5%+10%+10%)*Cost(4,4)=2.44であり、
4を分割点として選択した場合、Cost(1,4)=1+(20%+5%+10%)/(20%+5%+10%+10%)*Cost(1,3)=2.55である。
したがって、Cost(1,4)の分割点は2であるべき、かつ、Cost(1,4)=2.33である。
【0100】
Cost(2,5)について、選択可能な分割点は2、3、4または5である。
2を分割点として選択した場合、Cost(2,5)=1+(5%+10%+10%+55%)/100%*Cost(3,5)=2.20であり、
3を分割点として選択した場合、Cost(2,5)=1+(20%+5%)/100%*Cost(2,2)+(10%+10%+55%)/100%*Cost(4,5)=2.195であり、
4を分割点として選択した場合、Cost(2,5)=1+(20%+5%+10%)/100%*Cost(2,3)+(10%+55%)/100%*Cost(5,5)=2.147であり、
5を分割点として選択した場合、Cost(2,5)=1+(20%+5%+10%+10%)/100%*Cost(2,4)=1.9である。
したがって、Cost(2,5)の分割点は5であるべき、かつ、Cost(2,5)=1.9である。
【0101】
この時点、表3のマトリクスは、以下の表4のように更新された。
【0102】
【表4】
【0103】
最後に、Cost(1,5)を算出し、その選択可能なSplitは1、2、3、4または5である。
1を分割点として選択した場合、Cost(1,5)=1+(20%+5%+10%+10%+55%)/100%*Cost(2,4)=3であり、
2を分割点として選択した場合、Cost(1,5)=1+20%/100%*Cost(1,1)+80%/100%*Cost(3,5)=2.4であり、
3を分割点として選択した場合、Cost(1,5)=1+25%/100%*Cost(1,2)+75%/100%*Cost(4,5)=2.395であり、
4を分割点として選択した場合、Cost(1,5)=1+35%/100%*Cost(1,3)+65%/100%*Cost(5,5)=2.35であり、
5を分割点として選択した場合、Cost(1,5)=1+45%/100%*Cost(1,4)=2.04である。
したがって、Cost(1,5)の分割点は5であるべき、かつ、Cost(1,5)=2.04である。
【0104】
この時点、表4のマトリクスは、以下の表5のように更新された。
【0105】
【表5】
【0106】
そして、マトリクスの(1,5)から、層ごとに分割点をトラバーサルして、決定木を生成する。
【0107】
まず、(1,5)の分割点が5である。このとき、木の形は、図5aに示すように、プレフィックス5がルートノードであり、ルートノードの左側ブランチがプレフィックス1~プレフィックス4であり、右側ブランチがヌルである。
【0108】
次に、マトリクスから分かるように、(1,4)の分割点が2である。この場合、決定木の形は、図5bに示すように、分割点2の左側ブランチが1であり、右側ブランチがプレフィックス3~プレフィックス4である。
【0109】
(3,4)の分割点が4であるため、決定木の形は、図5cに示すように、分割点4の左側ブランチが3であり、右側ブランチは存在しない。図5cは、生成した最適決定木である。
【0110】
本発明実施例では、前記した最適決定木が配列構造の形態でCPUのバッファに一時的に記憶されており、対応するFIBがkey-valueの形態でメモリに記憶されている。パケットマッチングの過程において、パケットに一致するプレフィックス長に対応する出力インターフェースを取得するように、メモリを頻繁にアクセスする必要があるため、パケットマッチング速度が遅くなる。
【0111】
マッチングを高速化するために、データプリフェッチ命令(Prefetch)によって、一部のメモリにおけるデータがアクセス対象となることをCPUに示唆し、CPUのメモリ管理モジュールに、メモリからアクセス対象となるデータを非同期的に取得させる。
【0112】
しかし、最適決定木の左右の2つのブランチはバランスが悪く、転送対象パケットのそれぞれに対する検索パスの長さも同じではない。そのため、例えば、パケット1とパケット2とに対して同時にマッチングを行う場合、パケット1に対して1回の決定木マッチングだけで出力インターフェースを確定できるが、パケット2に対して5回の決定木マッチングを経てから出力インターフェースを確定できる。パケット1に対してマッチングを1回だけ行って、パケット1の転送を完了できる。そのあと、実際にパケット2である1つのパケットに対してマッチングを行うことになって、プリフェッチ操作は意味がなく、依然としてパケットマッチング速度が遅い課題がある。
【0113】
上記した課題を解決するために、本発明実施例は、パケットマッチング方法を提供する。当該方法は、図6に示すように、以下のステップを含む。
【0114】
S601において、N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージ(stage)のそれぞれを決定木のルートノードに設定する。
【0115】
ここで、以下の説明における決定木は、いずれも最適決定木である。決定木における各ノードのそれぞれは、1種類のプレフィックス長を表し。Nは、CPUの処理能力に基づいて事前に設定してよく、例をとして、Nは2であってよい。
【0116】
仮に、現在のネットワークデバイスは、2つのデータパケットを受信した。前記2つのデータパケットはぞれぞれ、パケット1およびパケット2であり、パケット1およびパケット2の宛先アドレスはそれぞれ、IPv6Addr1およびIPv6Addr2である。パケット1をパイプライン1に入れ、パケット2をパイプライン2に入れてよい。パイプライン1およびパイプライン2のstageは、いずれも決定木のルートノードである。決定木のルートノードは一致確率が最も大きいプレフィックス長であるため、本発明実施例において、各転送対象パケットのそれぞれに対して決定木のルートノードからマッチングを行い、それによって、パケットマッチングを高速化することができる。
【0117】
S602において、N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、第1出力インターフェースデータをバッファに記憶し、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出し、N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行する。
【0118】
ここで、各パイプラインのハッシュ値は、当該パイプラインに含まれるデータパケットの宛先アドレスとstageに対応するプレフィックス長とのハッシュ値である。
【0119】
前記のメモリから第1出力インターフェースデータをプリフェッチする過程が非同期的な操作であり、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出することは、1本目のパイプラインの第1ハッシュ値を算出した後、CPUのスレッドが2本目のパイプラインのハッシュ値を算出し続け、それと同時に、CPUのメモリ管理モジュールが非同期的にメモリから第1出力インターフェースデータをプリフェッチし始めることを指す。
【0120】
同様に、CPUのスレッドが2本目のパイプラインのハッシュ値を算出した後、CPUのメモリ管理モジュールが第1出力インターフェースデータをプリフェッチしたか否かにかかわらず、CPUのスレッドは、第3パイプラインのハッシュ値を算出し続ける。
【0121】
前のステップの例に続いて、仮に、ルートノードのプレフィックス長がPrefixLen1である場合、ネットワークデバイスは、IPv6Addr1とPrefixLen1とのハッシュ値を算出し、HashValue1を取得する。そして、非同期的にネットワークデバイスのCPUのプリフェッチ命令を実行し、それによって、CPUのメモリ管理モジュールは、非同期的にメモリからHashValue1に対応する出力インターフェースデータを取得し、CPUのバッファに一時的に記憶する。
【0122】
ここで、前記プリフェッチ命令を実行する操作が非同期的な操作であり、即ち、CPUのスレッドがHashValue1を算出した後、IPv6Addr2とPrefixLen1とのハッシュ値を算出し続け、HashValue2を取得する。CPUのプリフェッチ命令を実行する操作は、CPUのスレッドがN本のパイプラインのうちの各パイプラインに対して逐次にハッシュ値を算出する過程に影響を及ぼさない。
【0123】
S603において、N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、バッファから第1出力インターフェースデータを取得する。
【0124】
CPUがメモリからHashValue1に対応する出力インターフェースデータを取得しておき、CPUのバッファに一時的に記憶した。そのため、ネットワークデバイスが前記N本のパイプラインのハッシュ値を算出した後、HashValue1に対応する出力インターフェースデータを取得しようとするとき、HashValue1に対応する出力インターフェースデータが既にCPUのバッファに一時的に記憶されているため、ネットワークデバイスは、バッファからHashValue1に対応する出力インターフェースデータを取得することができる。
【0125】
同様に、ネットワークデバイスは、HashValue2を算出した後も、非同期的にHashValue2に対応する出力インターフェースデータをプリフェッチし、CPUのバッファに一時的に記憶する。さらに、ネットワークデバイスがHashValue2に対応する出力インターフェースデータを取得しようとするとき、メモリにアクセスする必要がなく、直接にバッファからHashValue2に対応する出力インターフェースデータを取得することができる。
【0126】
それに応じて、ネットワークデバイスは、バッファから各パイプラインのハッシュに対応する出力インターフェースデータを逐次に取得することができる。
【0127】
S604において、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインにおける第1データパケットを第1パイプラインから削除し、第2データパケットを受信した場合、第2データパケットを1本目のパイプラインに入れる。
【0128】
各パイプラインに対して、当該パイプラインのハッシュ値に対応する出力インターフェースデータが表現した出力インターフェースは当該パイプラインにおけるデータパケットを転送するためのものである場合、当該パイプラインのハッシュ値に対応する出力インターフェースを介して当該パイプラインにおけるデータパケットを転送し、当該パイプラインにおけるデータパケットを当該パイプラインから削除する。
【0129】
本発明実施例では、1本目のパイプラインにおける第1データパケットを第1パイプラインから削除した後、第1パイプラインがアイドル状態になり、ネットワークデバイスが第2データパケットを受信した場合、またはネットワークデバイスには出力インターフェースに一致しない第2データパケットがある場合、第2データパケットを第1パイプラインに入れ、第1パイプラインのstageを決定木のルートノードに設定する。
【0130】
本発明実施例によれば、N本のパイプラインによってN個の第1データパケットに対してマッチングを行うことができ、N個の第1データパケットをN個のパイプラインに入れた後、N本のパイプラインのうちの第1パイプラインの第1ハッシュ値を算出し、非同期的にメモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、第1出力インターフェースデータをバッファに記憶し、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出することができる。このように、N本のパイプラインのうちの1本のパイプラインのハッシュ値を算出するごとに、非同期的にメモリから当該ハッシュ値に対応する出力インターフェースデータをプリフェッチすることに相当する。このように、第1ハッシュ値に対応する第1出力インターフェースデータを取得することが必要であるとき、メモリにアクセスする必要がなく、直接にバッファから第1出力インターフェースデータを取得することができ、パケットマッチングに必要な時間が減少される。かつ、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、当該1本目のパイプラインにおける第1データパケットを1本目のパイプラインから削除し、これによって、第2データパケットを1本目のパイプラインに入れて処理する。N本のパイプラインにおける第1データパケットをすべて転送しなければ、受信した第2データパケットを処理できない従来技術に比べて、本発明実施例では、データパケットさえパイプラインから削除されれば、第2データパケットを当該パイプラインに入れて処理を開始することができ、受信したデータパケットのマッチングおよび転送を高速化できる。
【0131】
ここで、本発明実施例は、メモリ内のHASH FIBの格納構造について限定しない。例として、本発明の一実施例では、FIBの要約がハッシュ表のハッシュバケット(Bucket)に格納されており、Bucketのそれぞれは64Bytesの格納スペースであり、8つのFIB要約を格納てき、FIB要約のそれぞれはタグ(TAG)とデータポインター(DATAPointer)とを含み、TAGはIPv6AddrとPrefixLenとに基づいて算出されたHASH値であり、データポインターはFIB ENTRYの実際の格納位置を指示する。
【0132】
上記した格納構造によれば、現在のネットワークデバイスが2つの第1データパケットを受信し、かつネットワークデバイスのCPUには2つのパイプラインがあることを例として、仮に、パケット1とパケット2とを受信し、パケット1とパケット2の宛先アドレスはそれぞれIPv6Addr1およびIPv6Addr2であり、パケット1をパイプライン1に入れ、パケット2をパイプライン2に入れ、決定木のルートノードがPrefixLen1である場合、上記した過程は、以下のように表される。
【0133】
HashValue1=Hash(IPv6Addr1、PrefixLen1);//IPv6Addr1とPrefixLen1とのハッシュ値を算出し、HashValue1を取得する。
Prefetch(&Bucket[HashValue1]);//HashValue1を含むBucketにアクセスしようとすることをCPUに示唆することで、CPUはBucket[HashValue1]におけるFIB要約をプリフェッチする。
HashValue2=Hash(IPv6Addr2、PrefixLen1););//IPv6Addr2とPrefixLen1とのハッシュ値を算出し、HashValue2を取得する。
Prefetch(&Bucket[HashValue2])//HashValue2を含むBucketにアクセスしようとすることをCPUに示唆することで、CPUはBucket[HashValue2]におけるFIB要約をプリフェッチする。
DataPointer1=Bucket[HashValue1];//ネットワークデバイスはBucket[HashValue1]におけるデータを取得し、このとき、Bucket[HashValue1]におけるデータが既にバッファにあるため、メモリにアクセスする必要がなく、このとき、CPUがデータを待っているという現象は発生しない。ネットワークデバイスは、Bucket[HashValue1]におけるFIB要約を取得した後、当該FIB要約にはHashValue1に対応するDataPointer1が存在するか否かを判断でき、存在する場合、その後、DataPointer1に対応する出力インターフェースデータを取得する。
Prefetch(DataPointer1);//DataPointer1にアクセスしようとすることをCPUに示唆することで、CPUはメモリからDataPointer1に対応する出力インターフェースデータをプリフェッチし、一時的に記憶する。
DataPointer2=Bucket[HashValue2];//ネットワークデバイスはBucket[HashValue2]におけるデータを取得し、このとき、Bucket[HashValue2]におけるFIB要約が既にバッファにあるため、メモリにアクセスする必要がなく、このとき、CPUがデータを待っているという現象は発生しない。ネットワークデバイスは、Bucket[HashValue2]におけるFIB要約を取得した後、当該BucketにはHashValue1に対応するDataPointer2が存在するか否かを判断でき、存在する場合、その後、DataPointer2に対応する出力インターフェースデータを取得する。
Prefetch(DataPointer2);//DataPointer2にアクセスしようとすることをCPUに示唆することで、CPUはメモリからDataPointer2に対応する出力インターフェースデータをプリフェッチし、一時的に記憶する。
Access DataPointer1;//DataPointer1に対応する出力インターフェースデータを取得し、DataPointer1に対応する出力インターフェースデータが既にバッファにあるため、このとき、メモリにアクセスする必要がなく、CPUが待っていることは発生しない。
Access DataPointer2;//DataPointer2に対応する出力インターフェースデータを取得し、DataPointer2に対応する出力インターフェースデータが既にバッファにあるため、このとき、メモリにアクセスする必要がなく、CPUが待っていることは発生しない。
Update IPv6Addr1 Stage & Output Interface;//IPv6Addr1のパケットが属するパイプラインのStageと出力インターフェースとを更新する。
Update IPv6Addr2 Stage & Output Interface//IPv6Addr2のパケットが属するパイプラインのStageと出力インターフェースとを更新する。
【0134】
これにより分かるように、ネットワークデバイスは、メモリにおけるデータを取得しようとするたびに、アクセスしようとするデータが既に取得され一時的に記憶されておく。これによって、ネットワークデバイスがデータを取得しようとする時にメモリにアクセスするための時間を節約でき、パケットマッチングを高速化することができる。
【0135】
本発明の別の実施例において、上記S603にはバッファから第1出力インターフェースデータを取得した後、当該方法は、さらに、
決定木におけるルートノードの右サブノードがヌルであるか否かを判断することと、ヌルである場合、前記第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定することと、ヌルではない場合、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定することと、を含む。
【0136】
決定木における各ノードのそれぞれに対して、当該ノードの左サブノードのプレフィックス長は、いずれも右サブノードのプレフィックス長より小さい。第1出力インターフェースデータが既に得られ、かつルートノードの右サブノードがヌルである場合、決定木にはより優れたマッチングは存在しないことを示す。そのため、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定でき、これによって、当該転送対象パケットのマッチングを完了し、第1出力インターフェースデータによって1本目のパイプラインにおける第1データパケットを転送する。
【0137】
ルートノードの右サブノードがヌルである場合、HASH FIBにはルートノードに対応するプレフィックス長より長いプレフィックス長があることを示す。ロンゲストマッチの原則にしたがって、第1パイプラインにおける第1データパケットがより長いプレフィックス長にヒットできるか否かをさらに判断する必要がある。そのため、このとき、第1データインターフェイスデータは最適なマッチングではない可能性があり、即ち、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのではない。
【0138】
本発明実施例では、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、1本目のパイプラインのstageをルートノードの右サブノードに更新し、1本目のパイプラインにおける出力インターフェース情報を第1出力インターフェースデータに更新する。これにより、次のラウンドのマッチング過程において、1本目のパイプラインにおける第1データパケットを、更新済stageが表するプレフィックス長にマッチする。
【0139】
ここで、次のラウンドのマッチング過程において、1本目のパイプラインにおける第1データパケットと更新済stageが表するプレフィックス長のハッシュ値を算出し、非同期的に当該ハッシュ値に対応する出力インターフェースデータを取得する。当該ハッシュ値に対応する出力インターフェースデータが得られない場合、前記第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものであることを示す。当該ハッシュ値に対応する出力インターフェースデータが得られた場合、1本目のパイプラインにおける出力インターフェース情報を今回取得られた出力インターフェースデータに更新する。
【0140】
本発明の別の実施例において、バッファから第1ハッシュ値に対応する第1出力インターフェースデータが得られない場合、1本目のパイプラインのstageをルートノードの左サブノードに更新する。
【0141】
ここで、バッファから第1ハッシュ値に対応する第1出力インターフェースデータが得られないと、メモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチできなかったことを示す。即ち、第1パイプラインにおける第1データパケットは決定木のルートノードが表するプレフィックス長に一致しておらず、次のラウンドのマッチング過程においてより短いプレフィックス長にマッチする必要があるため、1本目のパイプラインのstageをルートノードの左サブノードに更新することができる。
【0142】
なお、本発明実施例では、各パイプラインにおける第1データパケットに対して1回のマッチングを行った後、当該パイプラインにおけるstageに対して1回の更新を行う必要があり、1本目のパイプラインを例として、具体的に、以下の場合がある。
【0143】
場合1において、バッファから第1パイプラインの第1ハッシュ値に対応する第1出力インターフェースデータが得られ、かつ第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインのstageをマッチング完了に更新する。
【0144】
場合2において、バッファから第1パイプラインの第1ハッシュ値に対応する第1出力インターフェースデータが得られ、かつ第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、1本目のパイプラインのstageを現在のstageの右サブノードに更新する。
【0145】
例えば、1本目のパイプラインの現在のstageがルートノードである場合、1本目のパイプラインのstageをルートノードの右サブノードに更新する。
【0146】
場合3において、バッファから第1パイプラインの第1ハッシュ値に対応する第1出力インターフェースデータが得られなかった場合、第1パイプラインのstageを現在のstageの左サブノードに更新する。
【0147】
例えば、1本目のパイプラインの現在のstageがルートノードである場合、1本目のパイプラインのstageをルートノードの左サブノードに更新する。
【0148】
上記したS603において、N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、ネットワークデバイスは、バッファから各パイプラインのハッシュ値に対応する出力インターフェースデータを逐次に取得し、各パイプラインのハッシュ値に対応する出力インターフェースデータを取得する時の状況によって、パイプラインのstageを更新する。
【0149】
ここで、各パイプラインのstageを更新する方法は、本発明実施例で説明した1本目のパイプラインのstageを更新する方法と同じである。
【0150】
N本のパイプラインのうちの各パイプラインのstageのいずれも1回の更新を完了した後、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除することができる。これにより、ネットワークデバイスが受信した他のデータパケットをパイプラインに入れ、受信したデータパケットのマッチング効率および転送効率を向上することができる。
【0151】
なお、1つの場合では、N本のパイプラインのうちの各パイプラインのstageのいずれも1回の更新を完了した後、パイプラインのstagestageがマッチング完了であるパイプラインは存在しない場合、N本のパイプラインにおける第1データパケットに対して次のラウンドのマッチングを行う。次のラウンドのマッチングを行う方法は、上記したS602-S604の方法と同じである。
【0152】
別の場合では、ネットワークデバイスが受信した他のデータパケットを既にパイプラインに入れ、かつ、この時にアイドル状態であるパイプラインは存在しない場合、または、ネットワークデバイスには他の転送対象であるデータパケットは存在しない場合、N本のパイプラインのうちのデータパケットに対して次のラウンドのマッチングを行う。
【0153】
これにより分かるように、本発明実施例では、N本のパイプラインによってN本のデータパケットに対してマッチすることを実現できる。いずれか1つのデータパケットのマッチングを完了した後、当該データパケットをパイプラインから削除し、他の転送対象パケットをパイプラインに入れ、転送対象パケットのマッチングを高速化することができる。
【0154】
以下、図5cに示した決定木を例として、パイプラインを処理する過程について説明する。
【0155】
仮に、パイプラインの数量が2であり、即ち、同時処理する転送対象パケットの最大数量が2である。
【0156】
現在のネットワークデバイスには4つの転送対象パケットがある場合、受信時間の早い順で並んで、それぞれ、Packet1、Packet2、Packet3、Packet4である。仮に、各転送対象パケットがヒットできるプレフィックス長はそれぞれ以下のようにである。
【0157】
Packet1がPrefix5にヒットし、
Packet2がPrefix3にヒットし、
Packet3がPrefix5にヒットし、
Pakcet4がPrefix2にヒットする。
【0158】
また、仮に、Prefix1に対応する出口(Output interface)が1であり、Prefix2に対応する出力インターフェースが2であり、Prefix3に対応する出力インターフェースが3であり、Prefix4に対応する出力インターフェースが4であり、Prefix5に対応する出力インターフェースが5である。
【0159】
まず、Packet1とPacket2とをパイプラインに入れて、この時点、パイプラインは表6のように示される。
【0160】
【表6】
【0161】
パイプラインに対する処理(advance操作)を1回経て、Packet1の宛先アドレスがPrefix5に一致しており、かつ、図5cから分かるように、Prefix5の右サブノードがヌルであるため、Packet1がマッチング完了であり、パイプライン1のStageをマッチング完了(FINISH)に更新する。かつ、Packet2の宛先アドレスがPrefix5に一致しないため、Packet2は、次に、Prefix5の左サブノードPrefix2にマッチする必要がある。そのため、パイプライン2のStageを2に更新する。この時点、各パイプラインは表7のように示される。
【0162】
【表7】
【0163】
この時点、各パイプラインに対する1回の処理が完了しており、パイプラインのStageがマッチング完了であるか否かを検出することができる。表7から分かるように、Packet1はマッチングが完了したので、Packet1をPipeline1から削除し、出力インターフェース5を介してPacket1を転送することができる。
【0164】
Packet1をPipeline1から削除した後、Pipeline1がアイドル状態になり、Packet3をPipeline1に入れることができる。Packet2はマッチングがまだ完了しないため、Packet2がそのままPipeline2に残っている。この時点、各パイプラインは表8のように示される。
【0165】
【表8】
【0166】
パイプラインに対する処理をもう1回経た後、各パイプラインは表9のように示される。
【0167】
【表9】
【0168】
表9から分かるように、Packet3はマッチングが完了したので、Packet3をPipeline1から削除し、Packet4をPipeline1に入れる。この時点、各パイプラインは表10のように示される。
【0169】
【表10】
【0170】
パイプラインに対する処理をもう1回経た後、各パイプラインは表11のように示される。
【0171】
【表11】
【0172】
パイプラインに対する処理をもう1回経た後、各パイプラインは表12のように示される。
【0173】
【表12】
【0174】
この時点、Packet2はマッチングが完了し、Packet2をPipeline2から削除する。このとき、ネットワークデバイスには新たに受信した転送対象パケットは存在しないため、Pipeline2がヌルであり、Pipeline1に対して処理をもう1回行った後、各パイプラインは表13のように示される。
【0175】
【表13】
【0176】
処理をもう1回経た後、各パイプラインは表14のように示される。
【0177】
【表14】
【0178】
この時点、Packet1、Packet2、Packet3、Packet4に対する処理が完了した。
【0179】
上記した方法実施例に対応して、本発明実施例は、さらに、パケットマッチング装置を提供する。図7に示すように、当該装置は、
N個の第1データパケットをN本のパイプラインに入れて、各パイプラインのステージstageのそれぞれを決定木のルートノードに設定する設定モジュール701であって、決定木における各ノードのそれぞれは1種類のプレフィックス長を表し、かつ、各ノードのそれぞれが表するプレフィックス長は異なる設定モジュール701と、
N本のパイプラインのうちの1本目のパイプラインの第1ハッシュ値を算出し、非同期的にメモリから第1ハッシュ値に対応する第1出力インターフェースデータをプリフェッチし、第1出力インターフェースデータをバッファに記憶し、メモリから第1出力インターフェースデータをプリフェッチすると同時にN本のパイプラインのうちの2本目のパイプラインの第2ハッシュ値を算出して、N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出されるまで、非同期的にメモリからハッシュ値に対応する出力インターフェースデータをプリフェッチし、出力インターフェースデータをバッファに記憶し、メモリから出力インターフェースデータをプリフェッチすると同時にパイプラインのハッシュ値を算出する過程を繰り返して実行するプリフェッチモジュール702であって、ここで、パイプラインのハッシュ値はパイプラインにおけるデータパケットの宛先アドレスとstageが表するプレフィックス長とのハッシュ値であるプリフェッチモジュール702と、
N本のパイプラインのうちの各パイプラインのハッシュ値のいずれも算出される場合、バッファから第1出力インターフェースデータを取得する取得モジュール703と、を含み、
設定モジュール701は、さらに、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインにおける第1データパケットを1本目のパイプラインから削除し、第2データパケットを受信した場合、第2データパケットを1本目のパイプラインに入れる。
【0180】
任意に、当該装置は、さらに、
第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものではない場合、1本目のパイプラインのstageをルートノードの右サブノードに更新し、1本目のパイプラインにおける出力インターフェース情報を第1出力インターフェースデータに更新する更新モジュールを含む。
【0181】
任意に、当該装置は、さらに、
決定木におけるルートノードの右サブノードがヌルであるか否かを判断し、
ヌルである場合、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものであることを確定し、
ヌルではない場合、第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものではないことを確定する判断モジュールを含む。
【0182】
任意に、当該装置は、さらに、
バッファから第1ハッシュ値に対応する第1出力インターフェースデータを取得することができなかった場合、1本目のパイプラインのstageをルートノードの左サブノードに更新する更新モジュールを含む。
【0183】
任意に、当該装置は、さらに、
第1出力インターフェースデータが表現した出力インターフェースは1本目のパイプラインにおける第1データパケットを転送するためのものである場合、1本目のパイプラインのstageをマッチング完了に更新する更新モジュールを含み、
設定モジュール701は、N本のパイプラインのstageのいずれも1回の更新を完了した後、stageがマッチング完了であるパイプラインにおける第1データパケットをパイプラインから削除する。
【0184】
本発明実施例は、さらに、ネットワークデバイスを提供する。前記ネットワークデバイスは、図8に示すように、プロセッサ801と、通信インターフェイス802と、記憶装置803と、通信バス804とを含み、プロセッサ801、通信インターフェイス802、および記憶装置803は、通信バス804を介して相互に通信し、
記憶装置803は、コンピュータープログラムを格納し、
プロセッサ801は、記憶装置803に格納されているプログラムを実行すると、上記した方法実施例の方法ステップを実現する。
【0185】
前記ネットワークデバイスに言及した通信バスは、ペリフェラルコンポーネントインターコネクト(Peripheral Component Interconnect、PCI)バス、またはイーアイサ (Extended Industry Standard Architecture、EISA)バスなどであってよい。当該通信バスは、アドレスバス、データバス、コントロールバスなどに分かれてよい。表示の便宜上、図面には、1本の太線のみで表示されるが、1本のバスまた1種類のバスだけが表示されているわけではない。
【0186】
通信インターフェイスは、前記ネットワークデバイスと他のデバイスとの通信に用いられる。
【0187】
記憶装置は、ランダムアクセスメモリ(Random Access Memory、RAM)を含んでもよく、不揮発性メモリ(Non-Volatile Memory、NVM)を含んでもよく、例えば、少なくとも1つのディスクメモリを含む。任意に、記憶装置は、前記プロセッサから離れる少なくとも1つの記憶装置であってもよい。
【0188】
上記したプロセッサは、中央処理装置(Central Processing Unit、CPU)、ネットワークプロセッサ(Network Processor、NP)などの汎用プロセッサであってもよい。また、デジタル信号プロセッサ(Digital signal Processing、DSP)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、現場でプログラム可能なゲートアレイ(Field-Programmable Gate Array、FPGA)、または、他のプログラマブルロジックデバイス、ディスクリートゲートあるいはトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントであってもよい。
【0189】
本発明が提供する別の実施例では、コンピューター可読記憶媒体を提供し、当該コンピューター可読記憶媒体には、コンピュータープログラムが記憶されており、前記コンピュータープログラムは、プロセッサによって実行されると、上記したいずれか1つのパケットマッチング方法のステップを実現する。
【0190】
本発明が提供する別の実施例では、さらに、命令が含まれるコンピュータープログラム製品を提供する。前記コンピュータープログラム製品は、コンピューターで実行されると、コンピューターに実施例に記載のいずれか1つのパケットマッチング方法を実行させる。
【0191】
上記した実施例は、全部または一部的にソフトウェア、ハードウェア、ファームウェア又はそれらの組み合わせで実現できる。ソフトウェアによって実現すると、全部または一部的にコンピュータープログラム製品の形態で実現できる。前記コンピュータープログラム製品は、1つ以上のコンピューター命令を含む。コンピューターに前記コンピュータープログラム命令をロードして実行すると、本発明実施例に記載のフローまたは機能が全部または一部的に生成される。前記コンピューターは、汎用コンピューター、専用コンピューター、コンピューターネットワーク、または他のプログラマブルデバイスであってよい。前記コンピューター命令は、コンピューター可読記憶媒体に記憶されてもよく、または、1つのコンピューター可読記憶媒体から別のコンピューター可読記憶媒体に伝送されてもよい。例えば、前記コンピューター命令は、1つのウェブサイト、コンピューター、サーバーまたはデータセンターから、有線(例えば、同軸ケーブル、光ファイバ、デジタル加入者線(DSL))または無線(例えば、赤外線、ラジオ、マイクロ波など)を介して、別のウェブサイト、コンピューター、サーバーまたはデータセンターに伝送することができる。前記コンピューター可読記憶媒体は、コンピューターがアクセス可能な任意の利用可能な媒体、または1つ以上の利用可能な媒体が集積されているサーバー、データセンターなどのデータ記憶デバイスであってよい。前記利用可能な媒体は、磁気媒体(例えば、フロッピーディスク、ハードディスク、磁気テープ)、光媒体(例えば、DVD)、または半導体媒体(例えば、ソリッドステートディス Solid State Disk (SSD))などであってよい。
【0192】
なお、本明細書では、第1や第2等のような関係用語は1つのエンティティ又は操作を他のエンティティ又は操作と区別するためのものに過ぎず、必ずしもこれらのエンティティ又は操作間にこのような実際の関係又は順序があることをリクエスト又は示唆しない。また、用語「含む」、「備える」又はほかの変形は非排他的包含をカバーすることで、一連の要素を含むプロセス、方法、物品又は装置はこれらの要素を含むだけでなく、明確に列挙していないほかの要素をさらに含み、又はこのようなプロセス、方法、物品又は装置固有の要素をさらに含む。特に限定しない限り、文「1つの…を含む」により限定される要素は、前記要素を含むプロセス、方法、物品又は装置がほかの同一の要素をさらに含むことを排除するものではない。
【0193】
本明細書における各実施例は、相互に関連したように記載されており、各実施例における同一または類似な部分を相互に参照すればよく、各実施例と他の実施例との間違い点が中心に説明される。とくに、装置実施例にとって、方法実施例と基本的に同様であるため、簡単に説明したが、関連する内容は、方法実施例の説明部分に参照すればよい。
【0194】
以上は、本発明の好ましい実施例に過ぎず、本発明を限定することを意図したものではなく、本発明の精神及び原則を逸脱せずに行われる変更、同など置換、改良などは、すべて本発明の保護範囲に属する。
図1
図2
図3
図4a
図4b
図5a
図5b
図5c
図6
図7
図8
【国際調査報告】