(57)【要約】【課題】フロー検索を必要とする機能が増えても、フロー検索性能を低下させずに維持できるパケット中継装置を提供する。【解決手段】パケット受信部と、スイッチと、パケット送信部と、連想メモリと、パケット検索部と、を有するパケット中継装置であって、前記パケット検索部は、実行すべきアクションを指定する情報を保持するアクションレジスタを有し、前記連想メモリの連続したアドレス範囲と前記アクションレジスタとを対応付けるアドレス範囲情報を保持し、同一の前記アクションに関連付けられたフローを識別する条件を設定する複数のフローエントリを、同一の前記アドレス範囲内の複数のアドレスに登録し、前記パケットのヘッダ情報を前記連想メモリに入力し、前記連想メモリから出力されたアドレスを含むアドレス範囲に対応する前記アクションレジスタから読み出した情報に従って、実行すべきアクションを決定し、前記決定したアクションを実行する。【選択図】図９
2015053673.tif 000002
【特許請求の範囲】
【請求項１】
パケットを中継するパケット中継装置であって、
入力回線からパケットを受信するパケット受信部と、
前記パケット受信部が受信したパケットをスイッチングするスイッチと、
前記スイッチがスイッチングしたパケットを、出力回線を介して送信するパケット送信部と、
前記パケットが属するフローを識別する条件を設定する複数のフローエントリを保持し、入力された前記パケットのヘッダ情報がいずれかの前記フローエントリの条件を満たす場合、前記条件が満たされるフローエントリのアドレスを出力する連想メモリと、
前記連想メモリの出力に基づいて、前記パケットが属するフローに関連付けられたアクションを実行するパケット検索部と、を有し、
前記パケット検索部は、
実行すべきアクションを指定する情報を保持するアクションレジスタを有し、
前記連想メモリの連続したアドレス範囲と前記アクションレジスタとを対応付けるアドレス範囲情報を保持し、
同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、同一の前記アドレス範囲内の複数のアドレスに登録し、
前記パケットのヘッダ情報を前記連想メモリに入力し、
前記連想メモリから出力されたアドレスを含むアドレス範囲を判定し、
前記判定されたアドレス範囲に対応する前記アクションレジスタから読み出した情報に従って、前記パケットに関して実行すべきアクションを決定し、
前記決定したアクションを実行することを特徴とするパケット中継装置。
【請求項２】
請求項１に記載のパケット中継装置であって、
前記複数のフローエントリの各々の優先順位を示す情報を保持し、
前記パケット検索部は、各々が同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、前記連想メモリの連続したアドレス範囲に登録することによって、第１の条件を設定する第１のフローエントリが、第２の条件を設定するフローエントリであって前記第１のフローエントリより優先順位が高い第２のフローエントリより上位のアドレスに登録される場合、前記第１の条件と前記第２の条件との重複部分を前記第１の条件から除外することによって作成した第３の条件を前記第１のフローエントリに設定することを特徴とするパケット中継装置。
【請求項３】
請求項２に記載のパケット中継装置であって、
前記パケット検索部は、
前記フローを識別する新たな条件と、前記新たな条件によって識別されるフローに関連付けられたアクションと、を特定する情報を入力される場合、前記アドレス範囲情報に基づいて、前記入力された情報によって特定されたアクションに対応付けられた前記連想メモリのアドレス範囲を特定し、
前記特定されたアドレス範囲より下位のアドレス範囲に含まれる各アドレスの前記フローエントリを、さらに下位のアドレスに移動させ、
前記フローエントリの移動によって生じた空きアドレスに、前記新たな条件を設定する新たなフローエントリを追加し、
前記フローエントリの移動及び前記新たなフローエントリの追加を反映するように前記アドレス範囲情報を更新し、
さらに、削除される前記フローエントリを特定する情報を入力される場合、前記特定されたフローエントリを前記連想メモリから削除し、
前記削除されたフローエントリより下位のアドレスのフローエントリを、上位のアドレスに移動させ、
前記フローエントリの削除及び移動を反映するように、前記アドレス範囲情報を更新することを特徴とするパケット中継装置。
【請求項４】
請求項１から３のいずれかに記載のパケット中継装置であって、
前記パケット検索部は、前記アクションごとに、前記アクションに対応するフローエントリが追加又は削除される頻度を計算し、前記計算された頻度が低いアクションを指定するアクションレジスタに対応するアドレス範囲が、前記計算された頻度が高いアクションを指定するアクションレジスタに対応するアドレス範囲より上位になるように、前記複数のフローエントリを登録することを特徴とするパケット中継装置。
【請求項５】
請求項１から３のいずれかに記載のパケット中継装置であって、
前記複数のフローエントリには、モニタリング対象となるフローを識別する条件が設定されることを特徴とするパケット中継装置。
【請求項６】
請求項１から５のいずれかに記載のパケット中継装置であって、
同一の前記アドレス範囲内に登録可能なフローエントリ数は、予め設定された所定のエントリ数以内である、パケット中継装置。
【請求項７】
請求項１から６のいずれかに記載のパケット中継装置であって、
さらに、ランダムアクセスメモリ（ＲＡＭ）を有し、
前記アクションレジスタは、実行すべきアクションのうち、所定のアクションを指定する情報を保持し、
前記ＲＡＭは、他のアクションを特定する情報を保持し、
前記パケット検索部は、前記アクションレジスタ及び前記ＲＡＭの少なくとも一方に基づいて決定されるアクションをパケットに対して実行する、パケット中継装置。
【請求項８】
入力回線からパケットを受信するパケット受信部と、前記パケット受信部が受信したパケットをスイッチングするスイッチと、前記スイッチがスイッチングしたパケットを、出力回線を介して送信するパケット送信部と、を含むパケット中継装置が実行するパケット中継方法であって、
モニタリング対象となるフローを識別する条件を含むパケットが属するフローを識別する条件を設定する複数のフローエントリを連想メモリに保持する第１手順と、
前記連想メモリの連続したアドレス範囲と実行すべきアクションを指定する情報を保持するアクションレジスタとを対応付けるアドレス範囲情報を保持する第２手順と、
同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、同一の前記アドレス範囲内の複数のアドレスに登録する第３手順と、
受信した前記パケットのヘッダ情報を前記連想メモリに入力する第４手順と、
入力された前記パケットのヘッダ情報がいずれかの前記フローエントリの条件を満たす場合、前記条件が満たされるフローエントリのアドレスを出力する第５手順と、
前記連想メモリから出力されたアドレスを含むアドレス範囲を判定する第６手順と、
前記判定されたアドレス範囲に対応する前記アクションレジスタから読み出した情報に従って、受信した前記パケットに関して実行すべきアクションを決定する第７手順と、
受信した前記パケットに関して前記決定したアクションを実行する第８手順と、を含むことを特徴とするパケット中継方法。
【請求項９】
請求項８に記載のパケット中継方法であって、
前記パケット中継装置は、前記複数のフローエントリの各々の優先順位を示す情報を保持し、
前記第３手順は、各々が同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、前記連想メモリの連続したアドレス範囲に登録することによって、第１の条件を設定する第１のフローエントリが、第２の条件を設定するフローエントリであって前記第１のフローエントリより優先順位が高い第２のフローエントリより上位のアドレスに登録される場合、前記第１の条件と前記第２の条件との重複部分を前記第１の条件から除外することによって作成した第３の条件を前記第１のフローエントリに設定する手順を含むことを特徴とするパケット中継方法。
【請求項１０】
請求項９に記載のパケット中継方法であって、
前記第３手順は、
前記フローを識別する新たな条件と、前記新たな条件によって識別されるフローに関連付けられたアクションと、を特定する情報を入力されると、前記アドレス範囲情報に基づいて、前記入力された情報によって特定されたアクションに対応付けられた前記連想メモリのアドレス範囲を特定する手順と、
前記特定されたアドレス範囲より下位のアドレス範囲に含まれる各アドレスの前記フローエントリを、さらに下位のアドレスに移動させる手順と、
前記フローエントリの移動によって生じた空きアドレスに、前記新たな条件を設定する新たなフローエントリを追加する手順と、
前記フローエントリの移動及び前記新たなフローエントリの追加を反映するように前記アドレス範囲情報を更新する手順と、を含み、
さらに、
前記第３手順は、
削除される前記フローエントリを特定する情報を入力されると、前記特定されたフローエントリを前記連想メモリから削除する手順と、
前記削除されたフローエントリより下位のアドレスのフローエントリを、上位のアドレスに移動させる手順と、
前記フローエントリの削除及び移動を反映するように、前記アドレス範囲情報を更新する手順と、を含むことを特徴とするパケット中継方法。
【請求項１１】
請求項８から１０のいずれかに記載のパケット中継方法であって、
前記第３手順は、前記アクションごとに、前記アクションに対応するフローエントリが追加又は削除される頻度を計算し、前記計算された頻度が低いアクションを指定するアクションレジスタに対応するアドレス範囲が、前記計算された頻度が高いアクションを指定するアクションレジスタに対応するアドレス範囲より上位になるように、前記複数のフローエントリを登録する手順を含むことを特徴とするパケット中継方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークにおけるパケット中継装置に関する。
【背景技術】
【０００２】
パケット中継装置は、フィルタリング及びＱｏＳ（Quality of Service）等のフロー毎に処理を指定する機能を備えている（例えば特許文献１の段落０００２）。フローとは、パケットの入力回線番号及びパケットヘッダの値などの条件によって識別されるパケットの集合である。この機能を実現するため、パケット中継装置は、パケットを受信すると、受信したパケットがいずれのフローに属するかを検索するフロー検索を実行し、パケットに対していずれの処理を行うべきか判定する。
【０００３】
さらに、パケット中継装置の高機能化に伴い、フィルタリング、ＱｏＳに加え、ミラーリング及びフロー統計機能等のモニタリング機能をはじめとする複数の機能がフロー検索を必要とするようになっている（例えば特許文献２の段落０００５）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３９３６８８３号公報
【特許文献２】特開２０１２−３４１９２号公報
【特許文献３】米国特許第６６２９０９９号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のように、パケット中継装置がフロー検索を必要とする機能を多く有する傾向にあるため、そのような機能が増加してもフロー検索の性能を低下させないフロー検索の高速化技術が求められている。従来、フロー検索は、ＣＡＭ（Content Addressable Memory、連想メモリ）という検索専用のメモリを用いて検索するＣＡＭ検索によって高速化されている（特許文献１）。
【０００６】
特許文献２には、ＣＡＭ制御部、ＣＡＭ、ＲＡＭ制御部、ＲＡＭを有するパケット転送装置が開示される。具体的には、フロー検索ＣＡＭ制御部６１３は、受信したパケットのヘッダ情報のうちひとつ以上の情報を検索キーとしてフロー検索ＣＡＭ６１４の所定ブロックを検索して、パケットが属するフローを識別するフロー検索を実行する。例えば、フロー検索ＣＡＭ制御部６１３は、検索起動フラグテーブル６１２を参照して特定されたフロー検索ＣＡＭ６１４のブロックに対しフロー検索を実行する。フロー処理ＲＡＭ制御部６１５は、フロー検索ＣＡＭ制御部６１３のフロー検索の結果得られたヒットアドレスに基づき、フロー処理ＲＡＭ６１６を検索する。フロー処理ＲＡＭ６１６は、フロー検索ＣＡＭ６１４の対応するアドレスに、フロー処理に関する情報が格納される。フロー処理判定部は、フロー検索ＣＡＭ制御部６１３及びフロー処理ＲＡＭ制御部６１５による検索結果から、フロー処理を判定する。
【０００７】
一方、CAMに一致するフローエントリが複数ある場合には、ＣＡＭは、より値の小さい上位アドレスに格納されるフローエントリのアドレスを優先して出力する。以降、アドレス値の小さくなる方向を上位、アドレス値の大きくなる方向を下位、連続したアドレス範囲をアドレス空間、アドレス空間のうち最も小さなアドレス値のアドレスを下限アドレス、アドレス空間のうち最も大きなアドレス値のアドレスを上限アドレスと称する。
【０００８】
一方、ＲＡＭ（Random Access Memory）には、ＣＡＭの各アドレスのフローエントリに一致するフローに対して行うべき処理が記載されたアクションエントリが登録されている。検索結果として得られたＣＡＭのアドレスを、ＲＡＭ制御部が、ＲＡＭの読み出しアドレスに変換してＲＡＭを読み出すことで、当該のフローに対して行うべき処理が判定される。
【０００９】
フロー検索を必要とする機能が増えると、増えた機能の数の分だけ当該機能に関するフローの条件を登録したテーブルがＣＡＭに格納される。１パケットに対し、増えた機能の数の分だけフロー検索を実行する必要があるので、フロー検索の時間が増加することによって１パケットあたりの処理性能が低下してしまう。
【００１０】
この課題を解決する技術が、米国特許第６６２９０９９号明細書（特許文献３）に開示されている。この技術によれば、１回の検索コマンドで複数の検索を同時に実行できるＣＡＭが提供されるため、フロー検索を必要とする機能が増えてもフロー検索性能は低下しない。１回の検索コマンドで複数の検索を実行する場合は、複数の検索結果が検索コマンド毎に得られる。
【００１１】
しかし、ＣＡＭ検索では、検索結果に応じてＲＡＭを読み出して当該のフローに対して行うべき処理を判定することも必要である。１回の検索コマンドで複数の検索を実行する場合は、複数の検索結果の各々に対してＲＡＭを読み出す必要があるので、検索数が増えるにつれてＲＡＭの読み出し性能がネックとなってしまい、フロー検索の性能が低下してしまう課題がある。
【００１２】
なぜならば、ＲＡＭは、ＣＡＭ検索により得られるリードコマンドを全てを一度に出力することはできず、それぞれに対するリード結果の出力後に、次のリードコマンドを処理するからである。つまり、ＲＡＭは、複数のリードコマンドに対するリード結果をシーケンシャルで出力し、複数のリード結果が出力完了するまで、次のパケットの処理が開始できない。従って、特許文献３の技術は、ＣＡＭ検索時間が短縮されたとしても、ＲＡＭでは短縮されないため、フロー検索の性能が低下してしまう。
【００１３】
本発明の目的は、上記の課題を解決し、フロー検索を必要とする機能が増えて、１回の検索コマンドで実行される検索数が増えても、ＲＡＭの読み出し性能がネックとならず、フロー検索性能を低下させずに維持できるパケット中継装置を提供することにある。
【課題を解決するための手段】
【００１４】
本発明は、上述の課題の少なくとも一部を解決するためになされたものであり、以下の形態または適用例として実現することができる。パケットを中継するパケット中継装置であって、入力回線からパケットを受信するパケット受信部と、前記パケット受信部が受信したパケットをスイッチングするスイッチと、前記スイッチがスイッチングしたパケットを、出力回線を介して送信するパケット送信部と、前記パケットが属するフローを識別する条件を設定する複数のフローエントリを保持し、入力された前記パケットのヘッダ情報がいずれかの前記フローエントリの条件を満たす場合、前記条件が満たされるフローエントリのアドレスを出力する連想メモリと、前記連想メモリの出力に基づいて、前記パケットが属するフローに関連付けられたアクションを実行するパケット検索部と、を有し、前記パケット検索部は、実行すべきアクションを指定する情報を保持するアクションレジスタを有し、前記連想メモリの連続したアドレス範囲と前記アクションレジスタとを対応付けるアドレス範囲情報を保持し、同一の前記アクションに関連付けられた前記フローを識別する条件を設定する前記複数のフローエントリを、同一の前記アドレス範囲内の複数のアドレスに登録し、前記パケットのヘッダ情報を前記連想メモリに入力し、前記連想メモリから出力されたアドレスを含むアドレス範囲を判定し、前記判定されたアドレス範囲に対応する前記アクションレジスタから読み出した情報に従って、前記パケットに関して実行すべきアクションを決定し、前記決定したアクションを実行することを特徴とする。
【発明の効果】
【００１５】
本発明の代表的な実施の形態によれば、フロー検索を必要とする機能が増えて、１回の検索コマンドで実行される検索数が増えても、ＲＡＭの読み出し性能がネックとならず、フロー検索性能を低下させずに維持できるパケット中継装置を提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態のパケット中継装置の構成例を示すブロック図である。
【図２】本発明の実施形態のフロー検索ＣＡＭに格納されたフローテーブルの構成例を示す説明図である。
【図３】本発明の実施形態の統計採取用エントリの構成例を示す説明図である。
【図４】本発明の実施形態のフロー検索ＲＡＭに格納されたアクションテーブルの構成例を示す説明図である。
【図５】本発明の実施形態のアクションエントリの構成例を示す説明図である。
【図６】本発明の実施形態のフロー統計採取部の構成例を示すブロック図である。
【図７】本発明の実施形態の確率制御カウンタテーブルの構成例を示す説明図である。
【図８】本発明の実施形態のフロー統計採取ＲＡＭの構成例を示す説明図である。
【図９】本発明の実施形態のフロー検索部の構成例を示すブロック図である。
【図１０】本発明の実施形態のアドレス比較部の構成例を示すブロック図である。
【図１１】本発明の実施形態のパケット中継装置によって実行される処理のタイムチャートである。
【図１２】本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの一例を示す説明図である。
【図１３Ａ】本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの処理の一例を示すフローチャートの第１の部分である。
【図１３Ｂ】本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの処理の一例を示すフローチャートの第２の部分である。
【図１４Ａ】本発明の実施形態のフローテーブルにおけるフローエントリの追加の処理の一例を示すフローチャートの第１の部分である。
【図１４Ｂ】本発明の実施形態のフローテーブルにおけるフローエントリの追加の処理の一例を示すフローチャートの第２の部分である。
【図１５】本発明の実施形態のフローテーブルにおけるフローエントリの削除の処理の一例を示すフローチャートである。イムチャートである。
【発明を実施するための形態】
【００１７】
以下に、本発明を実施するための実施形態を図面に従い説明する。
【００１８】
図１は、本発明の実施形態のパケット中継装置４の構成例を示すブロック図である。
【００１９】
図１に示すパケット中継装置４は、パケット受信回路４０、パケット送信回路４１、受信側パケット検索部４２、送信側パケット検索部４３、スイッチ４４、レジスタ４５、及び各種のメモリを備える。上記のパケット中継装置４のうち各種のメモリ以外の部分が一つ又は複数のＡＳＩＣによって構成され、それに各種のメモリが外付けされてもよい。受信側パケット検索部４２は、フロー検索部４２１、フロー統計採取部４２２、フロー統計機能用ＣＰＵ４２３及び経路検索部４２０を含む。送信側パケット検索部４３は、フロー検索部４３１、フロー統計採取部４３２及びフロー統計機能用ＣＰＵ４３３を含む。各種のメモリは、フロー検索部４２１によって参照されるフロー検索ＣＡＭ４２１０及びフロー検索ＲＡＭ４２１１、フロー統計採取部４２２によって参照されるフロー統計採取ＲＡＭ４２２０、経路検索部４２０によって参照される経路検索ＣＡＭ４２００及び経路検索ＲＡＭ４２０１、並びに、フロー検索部４３１によって参照されるフロー検索ＣＡＭ４３１０及びフロー検索ＲＡＭ４３１１を含む。以下、パケット中継装置４全体及びそれを構成する各部について説明する。
【００２０】
パケット中継装置４は、複数の入力回線４７と複数の出力回線４８に接続され、入力回線４７から入力したパケットをヘッダ情報に基づき特定される出力回線４８に出力する。パケット中継装置４には管理端末４６が接続されており、後述する各種のテーブルに対する設定情報は管理端末４６から入力されてレジスタ４５に一時的に蓄積され、各種のテーブルの制御部に出力されて各テーブルに設定される。パケット受信回路４０は、入力回線４７からパケットが入力すると、パケットを格納し、パケットのヘッダ情報を受信側パケット検索部４２に出力する。さらにパケット受信回路４０は、パケットが入力した入力回線を識別する入力回線番号（又は識別子）とパケットのＢｙｔｅ長を含む内部ヘッダを、パケットヘッダ情報に付加して受信側パケット検索部４２に出力してもよい。
【００２１】
受信側パケット検索部４２は、入力されたパケットヘッダ情報のうちの宛先ＩＰアドレス（ＤＩＰ：Destination IP Address）を経路検索部４２０に出力する。経路検索部４２０は、入力された宛先ＩＰアドレスを経路検索ＣＡＭ４２００に出力する。経路検索ＣＡＭ４２００には宛先ＩＰアドレスのリストを登録したテーブルが格納されており、入力された宛先ＩＰアドレスに一致する宛先ＩＰアドレスが登録されたエントリのアドレスを経路検索部４２０に出力する。
【００２２】
経路検索部４２０は、経路検索ＣＡＭ４２００から入力されたアドレスを経路検索ＲＡＭ４２０１に出力する。経路検索ＲＡＭ４２０１には、宛先ＩＰアドレスが登録された経路検索ＣＡＭ４２００のアドレスと同一のアドレスに、上述の宛先ＩＰアドレスのパケットを出力すべき出力回線と出力する際に書き換えるべき宛先ＭＡＣアドレス（ＤＭＡＣ：Destination MAC address）が登録されている。経路検索部４２０から入力されたアドレスを読み出しアドレスとして、経路検索ＲＡＭ４２０１を読み出すことによって、出力すべき出力回線と出力する際に書き換えるべき宛先ＭＡＣアドレスが得られる。
【００２３】
経路検索ＲＡＭ４２０１は、出力回線と宛先ＭＡＣアドレスを経路検索部４２０に出力する。経路検索部４２０は、出力回線と宛先ＭＡＣアドレスをパケット受信回路４０に出力し、パケット受信回路４０はパケットの内部ヘッダのうち出力回線の情報を登録し、ヘッダ情報のうち宛先ＭＡＣアドレスを書き換える。
【００２４】
上述の経路検索の処理と並行して、受信側パケット検索部４２は、入力されたパケットヘッダ情報のうちのＬ２（Ｌａｙｅｒ２）情報、Ｌ３（Ｌａｙｅｒ３）情報及びＬ４（Ｌａｙｅｒ４）情報をフロー検索部４２１に出力する。フロー検索部４２１は、受信側パケット検索部４２からパケットヘッダ情報のうちのＬ２情報、Ｌ３情報及びＬ４情報をフロー検索ＣＡＭ４２１０に出力する。フロー検索ＣＡＭ４２１０には、フローエントリのリストを登録したフローテーブル４２１００が格納されている。各フローエントリには、Ｌ２情報、Ｌ３情報及びＬ４情報によってフローを定義するフロー条件が設定されている。フロー検索ＣＡＭ４２１０は、入力されたパケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリを検索して、一致したフローエントリのアドレスをフロー検索部４２１に出力する。
【００２５】
以下では、本発明の一実施形態として、ＮｅｔＦｌｏｗをはじめとするフロー統計機能の例を用いて説明する。
【００２６】
図２は、本発明の実施形態のフロー検索ＣＡＭ４２１０に格納されたフローテーブル４２１００の構成例を示す説明図である。
【００２７】
図２のフローテーブル４２１００は、統計採取用エントリ４２１０００、統計採取用エントリ４２１００１、ＩＰｖ４登録用エントリ４２１００２、ＩＰｖ６登録用エントリ４２１００３、及び非ＩＰ登録用エントリ４２１００４といった各種のフローエントリから構成される。統計採取用エントリ４２１０００には、フロー統計を採取する個別のフローに一致するフロー条件が設定される。ＩＰｖ４登録用エントリ４２１００２には、フロー統計の採取対象として登録したい全てのＩＰｖ４フローに一致するフロー条件が設定される。ＩＰｖ６登録用エントリ４２１００３には、フロー統計の採取対象として登録したい全てのＩＰｖ６フローに一致するフロー条件が設定される。非ＩＰ登録用エントリ４２１００４には、フロー統計の採取対象として登録したい全ての非ＩＰフローに一致するフロー条件が設定される。
【００２８】
なお、ＩＰｖ４／ＩＰｖ６／非ＩＰのフローを区別せずに一つの登録用エントリが設けられてもよいし、別の条件によって登録用エントリを区別する場合には、それぞれの条件に対応するフロー条件が設定されても良い。登録用エントリを区別することによって、例えば登録処理を実行するＣＰＵを登録用エントリ毎に独立させることで負荷分散したり、登録対象とするフローの条件又はフロー数等の登録に係る条件を独立に設定したりすることが可能となる。
【００２９】
図２には二つの統計採取用エントリ（すなわち統計採取用エントリ４２１０００及び４２１００１）のみを示したが、実際のフローテーブル４２１００は任意の数の統計採取用エントリを含み得る。
【００３０】
フロー統計機能による処理の流れの概要を説明する。まず、管理端末４６からフロー統計機能による統計採取の対象としたいフロー条件をパケット中継装置４に入力する。入力されたフロー条件はレジスタ４５に一時的に蓄積され、フロー統計機能用ＣＰＵ４２３に出力される。フロー統計機能用ＣＰＵ４２３は、レジスタ４５から入力されたフロー条件を、ＩＰｖ４フローの場合はフローテーブル４２１００のＩＰｖ４登録用エントリ４２１００２に、ＩＰｖ６フローの場合はフローテーブル４２１００のＩＰｖ６登録用エントリ４２１００３に、非ＩＰフローの場合はフローテーブル４２１００の非ＩＰ登録用エントリ４２１００４に設定する。また詳細は後述するが、フロー統計機能用ＣＰＵ４２３は、これらの登録用エントリに対応するアクションを設定したエントリをフロー検索ＲＡＭ４２１１に、これらの登録用エントリに対応する統計を採取するエントリをフロー統計採取ＲＡＭ４２２０に設定する。
【００３１】
パケット中継装置４に入力されたパケット（以下、当該パケットと記載）が統計採取用エントリ４２１０００等のいずれの統計採取用エントリのフロー条件にも一致せず（又は、いずれの統計採取用エントリにもフロー条件が設定されておらず）、当該パケットがＩＰｖ４登録用エントリ４２１００２、ＩＰｖ６登録用エントリ４２１００３、非ＩＰ登録用エントリ４２１００４のいずれかのフロー条件に一致する場合、当該パケットが属するフローに関する登録要求がフロー統計機能用ＣＰＵ４２３に通知される。フロー統計機能用ＣＰＵ４２３は、当該パケットのパケットヘッダ情報に基づいて、フローテーブル４２１００の統計採取用エントリ４２１０００を、登録用エントリよりも優先的に一致と判定されるフローテーブル４２１００の未使用エントリのアドレス（すなわち、未使用エントリのアドレスのうち、いずれの登録用エントリよりも上位のアドレス）に設定する。以降、当該パケットと同一フローに属するパケットがパケット中継装置４に入力されると、登録用エントリよりも優先的に統計採取用エントリ４２１０００に一致すると判定されるので、フロー統計採取部４２２が、登録処理ではなく統計採取処理を実行する。
【００３２】
図３は、本発明の実施形態の統計採取用エントリ４２１０００の構成例を示す説明図である。
【００３３】
なお、統計採取用エントリ４２１００１、ＩＰｖ４登録用エントリ４２１００２、ＩＰｖ６登録用エントリ４２１００３、非ＩＰ登録用エントリ４２１００４も図３と同様の構成とすることができる。
【００３４】
統計採取用エントリ４２１０００には、フロー統計を採取する個別のフローに一致するフロー条件として、回線４２１００００、ＶＬＡＮ４２１０００１、ＥｔｈｅｒＴｙｐｅ４２１０００２、ＳＭＡＣ（Source MAC Address）４２１０００３、ＤＭＡＣ（Destination MAC Address）４２１０００４、ＩＰＶＥＲ（IP Version）４２１０００５、ＴＯＳ（Type Of Service）４２１０００６、ＳＩＰ（Source IP Address）４２１０００７、ＤＩＰ（Destination IP Address）４２１０００８、ＰＲＴ（Protocol）４２１０００９、ＳＰＯＲＴ（Source PORT）４２１００１０、及びＤＰＯＲＴ（Destination PORT）４２１００１１から構成される。
【００３５】
フロー検索部４２１は、フロー検索ＣＡＭ４２１０から入力されたアドレスをフロー検索ＲＡＭ４２１１に出力する。
【００３６】
図４は、本発明の実施形態のフロー検索ＲＡＭ４２１１に格納されたアクションテーブル４２１１０の構成例を示す説明図である。
【００３７】
図４のアクションテーブル４２１１０は、アクションエントリ４２１１００〜４２１１０４から構成される。入力されたパケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が登録されたフローエントリが登録されたフロー検索ＣＡＭ４２１０のアドレスと同一のフロー検索ＲＡＭ４２１１のアドレスに、検索の用途に応じて当該パケットに対して実施すべきアクションを記載したアクションエントリ４２１３が登録されている。
【００３８】
図５は、本発明の実施形態のアクションエントリ４２１１００の構成例を示す説明図である。
【００３９】
アクションエントリ４２１１００には、フロー統計を採取すべきか否かというアクションを示す統計採取フラグ４２１１０００、フロー統計を確率的に採取すべきか否かというアクションを示す確率制御フラグ４２１１００１、フロー統計を確率的に採取する際の確率制御カウンタ識別子４２１１００２、及び、当該パケットをフロー統計採取対象パケットと判断し当該パケットを識別するに相当するフロー条件をフローエントリとして登録すべきことをフロー統計機能用ＣＰＵ４２３に通知するアクションを示す登録通知フラグ４２１１００３等が登録される。これらのアクションの詳細に関しては後述する。
【００４０】
上記は検索の用途がフロー統計機能である場合の例であるが、検索の用途がミラーリングである場合には、当該パケットをミラーリングすべきか否かというアクションを示す情報、フロー統計を確率的に実施すべきというアクションを示す情報等がアクションエントリ４２１１００に登録される（図示省略）。
【００４１】
あるいは、検索の用途がフィルタリングである場合には、当該パケットを廃棄すべきか否かというアクションを示す情報がアクションエントリ４２１１００に登録される（図示省略）。
【００４２】
あるいは、検索の用途がＱｏＳの優先度判定である場合には、入力パケットに対して装置内で制御すべき優先度を示す情報がアクションエントリ４２１１００に登録される。
【００４３】
以下、検索の用途がフロー統計機能である場合について説明する。フロー検索部４２１から入力された、当該パケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリのアドレスを読み出しアドレスとして、フロー検索ＲＡＭ４２１１を読み出すことによって、フロー統計の採取に関する各種のアクションを示すアクションエントリ４２１１００の情報が得られる。フロー検索ＲＡＭ４２１１からは、アクションエントリ４２１１００の情報がフロー検索部４２１に出力される。フロー検索部４２１は、当該パケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリのアドレスとアクションエントリ４２１１００の情報とをフロー統計採取部４２２に出力する。
【００４４】
図６は、本発明の実施形態のフロー統計採取部４２２の構成例を示すブロック図である。
【００４５】
フロー統計採取部４２２は、確率制御判定部４２２１、確率制御部４２２２、確率制御カウンタテーブル４２２３及び統計採取判定部４２２４から構成される。また、フロー統計採取部４２２にはフロー統計採取ＲＡＭ４２２０が接続されている。
【００４６】
フロー検索部４２１からフロー統計採取部４２２に、当該パケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリのアドレスとアクションエントリ４２１１００の情報が入力されると、確率制御判定部４２２１は、アクションエントリ４２１１００の情報のうち確率制御フラグ４２１１００１がフロー統計の採取を確率的に実施することを示す値になっていればフロー統計の採取を確率的に実施すること、確率制御フラグ４２１１００１がフロー統計の採取を確率的に実施することを示す値になっていなければフロー統計の採取を確率的に実施しないことを判定する。
【００４７】
確率制御判定部４２２１は、フロー統計の採取を確率的に実施すると判定した場合には、アクションエントリ４２１１００の情報のうち確率制御カウンタ識別子４２１１００２を確率制御部４２２２に出力する。確率制御部４２２２は、確率制御カウンタ識別子４２１１００２を読み出しアドレスとして確率制御カウンタテーブル４２２３を読み出す。
【００４８】
図７は、本発明の実施形態の確率制御カウンタテーブル４２２３の構成例を示す説明図である。
【００４９】
確率制御カウンタテーブル４２２３は、確率制御カウンタ識別子４２１１００２毎に確率制御カウンタ４２２３０と統計採取確率４２２３５を備えた確率制御エントリ４２２３００から構成されている。パケットが入力される毎に、確率制御カウンタテーブル４２２３から、確率制御カウンタ４２２３０と統計採取確率４２２３５が確率制御部４２２２によって読み出される。統計採取確率４２２３５には、確率０〜１００％に応じて０〜１００の値が設定される。確率制御部４２２２は、確率制御カウンタを読み出す毎に一様な確率で０〜１００の値を再計算して、次のパケットに対する確率制御カウンタテーブル４２２３の読み出し処理の前に、当該パケットに対する読み出しアドレスと同一のアドレスを書き込みアドレスとして確率制御カウンタテーブル４２２３に書き戻す。
【００５０】
確率制御部４２２２によって読み出された確率制御カウンタ４２２３０と統計採取確率４２２３５は、確率制御判定部４２２１に出力される。確率制御判定部４２２１は、確率制御カウンタ４２２３０と統計採取確率４２２３５の値の大きさを比較して、確率制御カウンタ４２２３０が統計採取確率４２２３５以下である場合には、当該パケットに対し統計採取することを示す信号を統計採取判定部４２２４に出力する。確率制御カウンタ４２２３０が統計採取確率４２２３５より大きい場合には、当該パケットに対し統計採取しないことを示す信号を統計採取判定部４２２４に出力する。確率制御判定部４２２１においてフロー統計の採取を確率的に実施しないと判定された場合には、上述の処理は行われない。
【００５１】
統計採取判定部４２２４では、アクションエントリ４２１１００の情報のうち統計採取フラグ４２１１０００が統計採取すべきことを示す値であり、かつ確率制御判定部４２２１から当該パケットに対し統計採取することを示す信号が入力された場合には、当該パケットに対する統計採取を行う。アクションエントリ４２１１００の情報のうち統計採取フラグ４２１１０００が統計採取すべきことを示す値であり、かつ確率制御判定部４２２１においてフロー統計の採取を確率的に実施しないと判定された場合にも当該パケットに対
する統計採取を行う。その他の場合は、統計採取を行わない。
【００５２】
例えば、確率制御カウンタ識別子４２１１００２に従って確率制御カウンタ４２２３０が読み出された場合、０〜９９のうちいずれかが新たな確率制御カウンタ４２２３０の値として再計算される。再計算によって０〜９９のいずれの値が得られる確率も一様であるため、例えば統計採取確率４２２３５の値が５０であった場合、確率制御カウンタ４２２３０の値が５０以下となる確率は５０％である。その結果、５０％の確率でフロー統計の採取が行われる。
【００５３】
図７には、複数の確率制御カウンタ４２２３０〜４２２３４及びそれぞれに対応する統計採取確率４２２３５〜４２２３９を示す。例えば、複数の統計採取確率４２２３５〜４２２３９にそれぞれ異なる値を設定することによって、フローごとに任意の確率で統計を採取することができる。
【００５４】
統計採取判定部４２２４における統計採取の処理を説明する。統計採取判定部４２２４にはフロー統計採取ＲＡＭ４２２０が接続されている。
【００５５】
図８は、本発明の実施形態のフロー統計採取ＲＡＭ４２２０の構成例を示す説明図であ
る。
【００５６】
フロー統計採取ＲＡＭ４２２０には、フロー統計テーブル４２２００が格納される。フロー統計テーブル４２２００は、フロー検索部４２１からフロー統計採取部４２２に入力された、当該パケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリのアドレス毎に、パケット数４２２０００とＢｙｔｅ数４２２００５を採取するフィールドを備えた統計採取エントリ４２２００００から構成されている。
【００５７】
パケットが入力されると、当該パケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリのアドレスを読み出しアドレスとしてフロー統計採取ＲＡＭ４２２０が読み出され、当該パケットの属するフローのパケット数４２２０００とＢｙｔｅ数４２２００５が統計採取判定部４２２４に出力される。統計採取判定部４２２４は、読み出されたパケット数４２２０００に１を加算し、読み出されたＢｙｔｅ数４２２００５に当該パケットのパケットヘッダ情報に付加された内部ヘッダ情報に含まれる当該パケットのＢｙｔｅ長を加算する。そして、統計採取判定部４２２４は、加算後のパケット数４２２０００とＢｙｔｅ数４２２００５を、次のパケットに対するフロー統計採取ＲＡＭ４２２０の読み出し処理の前に、当該パケットに対する読み出しアドレスと同一のアドレスを書き込みアドレスとしてフロー統計採取ＲＡＭ４２２０書き戻す。これによって、統計採取判定部４２２４における統計採取の処理が完了する。
【００５８】
図８には、複数のパケット数４２２０００〜４２２００４及びそれぞれに対応するＢｙｔｅ数４２２００５〜４２２００９を示す。これらを使用することで、フロー毎に統計採取を行うことができる。
【００５９】
統計採取判定部４２２４に出力されたアクションエントリ４２１１００の情報のうち登録通知フラグ４２１１００３が登録通知すべきことを示す値である場合には、フロー統計採取部４２２は、当該パケットのパケットヘッダ情報をフロー統計機能用ＣＰＵ４２３に出力する。すると、フロー統計機能用ＣＰＵ４２３は、フロー検索ＣＡＭ４２１０に格納されたフローテーブル４２１００の統計採取用エントリ４２１０００のうち未使用エントリを検索し、当該パケットのパケットヘッダ情報に基づいて未使用エントリに当該パケットが一致するフロー条件を設定する。また、フロー統計機能用ＣＰＵ４２３は、フロー条件を設定した当該統計採取用エントリ４２１０００アドレスと同一のフロー検索ＲＡＭ４２１１のアドレスに、当該パケットに対するアクションエントリ４２１３を登録する。また、フロー統計機能用ＣＰＵ４２３は、フロー条件を設定した当該統計採取用エントリ４２１０００アドレスと同一のフロー統計採取ＲＡＭ４２２０のアドレスに、当該パケットに対する統計採取エントリ４２２００００を登録する。
【００６０】
以上の受信側のフロー統計機能の処理が完了すると、当該パケットはスイッチ４４を経由してパケット送信回路４１に出力される。パケットヘッダ情報が送信側パケット検索部４３に出力され、受信側のフロー統計機能と同様の処理が送信側においても実行される。なお、フロー統計機能は受信側と送信側の両方で実行されてもよいし、一方のみで実行さてもよい。例えば、フロー検索部４３１がフロー検索ＣＡＭ４３１０及びフロー検索ＲＡＭ４３１１を参照してフロー検索部４２１と同様の処理を実行してもよい。フロー検索部４２１によるフロー検索結果に従って、フロー統計採取部４３２がフロー統計採取部４２２と同様のフロー統計処理を実行し、フロー統計機能用ＣＰＵ４３３がフロー統計機能用ＣＰＵ４２３と同様に各種の設定処理を実行してもよい。以下の説明は、受信側パケット検索部４２を対象としているが、送信側パケット検索部４３にも適用され得る。
【００６１】
次に、受信側パケット検索部４２のフロー検索部４２１に関し、図９等を用いて説明する。
【００６２】
図９は、本発明の実施形態のフロー検索部４２１の構成例を示すブロック図である。  フロー検索部４２１は、本発明の実施形態のアドレス空間毎アクション指定部４２１２と、本発明の実施形態のアドレス範囲１用アクションレジスタ４２１２１と、本発明の実施形態のアドレス範囲２用アクションレジスタ４２１２２と、本発明の実施形態のアドレス範囲３用アクションレジスタ４２１２３と、本発明の実施形態のアドレス範囲４用アクションレジスタ４２１２４と、を備える。また、フロー検索ＣＡＭ４２１０の検索結果のアドレスは、アドレス空間毎アクション指定部４２１２の備えるアドレス比較部４２１２０に出力される。なお、アドレス範囲１用アクションレジスタ４２１２１〜アドレス範囲４用アクションレジスタ４２１２４には、それぞれ、アドレス範囲１〜アドレス範囲４に対応するアクションを指定するアクションエントリと同様の情報が格納される（図４及び図５参照）。
【００６３】
本発明の実施形態の検索の処理の流れについて説明する。フロー検索ＣＡＭ４２１０内のフローテーブルにおいて、同一アクションをもつフローエントリは、フロー検索ＣＡＭ４２１０内のフローエントリのリストにおいてアドレスの連続した空間に配置する。このようなフローテーブルを実現するためのフローエントリの並べ替えについては後述する（図１３Ａ〜図１５等参照）。また、アドレス比較部４２１２０は、アドレス範囲１用アクションレジスタ４２１２１、アドレス範囲２用アクションレジスタ４２１２２、アドレス範囲３用アクションレジスタ４２１２３、及びアドレス範囲４用アクションレジスタ４２１２４に対応するアドレス範囲の上限値と下限値を指定する情報を保持する。
【００６４】
アドレス範囲ｎ（ｎ：１〜４）用アクションレジスタには、下限値以上、上限値以下のアドレスに対するアクションエントリが設定される。この上限値と下限値とアクションは、フロー統計機能用ＣＰＵ４２３によって設定される。アドレス範囲１用アクションレジスタ４２１２１に対応する下限値をＬ１、上限値をＵ１、アドレス範囲２用アクションレジスタ４２１２２に対応する下限値をＬ２、上限値をＵ２、アドレス範囲３用アクションレジスタ４２１２３に対応する下限値をＬ３、上限値をＵ３、アドレス範囲４用アクションレジスタ４２１２４に対応する下限値をＬ４、上限値をＵ４とする。なお、各アドレス範囲に重なりは無いものとし、Ｌ１≦Ｕ１＜Ｌ２≦Ｕ２＜Ｌ３≦Ｕ３＜Ｌ４≦Ｕ４を満たすようにＬ１、Ｕ１、Ｌ２、Ｕ２、Ｌ３、Ｕ３、Ｌ４、Ｕ４が設定される。
【００６５】
なお、図９は、フロー検索の結果に応じて実行され得るアクションが４種類ある場合を一例として示している。実行され得るアクションがＮ種類ある場合には、上記のアドレス範囲１用アクションレジスタ４２１２１等と同様のアクションレジスタがＮ個用意され、それぞれのアクションレジスタに対応するアドレス範囲の上限値及び下限値が設定される。
【００６６】
図１０は、本発明の実施形態のアドレス比較部４２１２０の構成例を示すブロック図である。
【００６７】
アドレス比較部４２１２０は、アドレス範囲テーブル４２１２０１と、アドレス範囲判定部４２１２０２とを備える。アドレス範囲テーブル４２１２０１は、各アドレス範囲の上限値及び下限値を指定する情報と、各アドレス範囲とアクションレジスタとを対応付ける情報と、を含む。なお、値の小さいアドレスが上位アドレスであるため、あるアドレス範囲の上限値は、そのアドレス範囲の最下位アドレスに相当する。
【００６８】
図１０の例では、アドレス範囲テーブル４２１２０１に各アドレス範囲の上限値Ｕ１〜Ｕ４が設定されている。この例では各アドレス範囲の下限値の設定が省略されているが、上記の下限値Ｌ１〜Ｌ４の情報がさらにアドレス範囲テーブル４２１２０１に含まれてもよいし、あるアドレス範囲の上限値の下位側に隣接するアドレスが、そのアドレス範囲の下位側に隣接するアドレス範囲の下限値として扱われてもよい。この場合、最上位のアドレス範囲１の下限値はフロー検索ＣＡＭ４２１０の最上位アドレスである。また、最下位のアドレス範囲４の上限値Ｕ４の設定は省略されてもよい。その場合、アドレス範囲４の上限値は、フロー検索ＣＡＭ４２１０の最下位アドレスとなる。
【００６９】
また、この例では、アドレス範囲テーブル４２１２０１の先頭のエントリに登録されたアドレス範囲（すなわち上限値がＵ１であるアドレス範囲）が、アドレス範囲１用アクションレジスタ４２１２１に対応づけられる。同様に、アドレス範囲テーブル４２１２０１の２番目〜４番目のエントリに登録されたアドレス範囲が、それぞれ、アドレス範囲２用アクションレジスタ４２１２２〜アドレス範囲４用アクションレジスタ４２１２４に対応づけられる。
【００７０】
アドレス範囲判定部４２１２０２は、アドレス範囲テーブル４２１２０１に登録された各アドレス範囲の上限値及び下限値と、アドレス比較部４２１２０に入力されたアドレスとを比較して、入力されたアドレスがどのアドレス範囲に含まれるかを判定する。
【００７１】
以下、図９及び図１０を参照して、アドレス比較部４２１２０等が実行する処理を説明する。
【００７２】
フロー検索部４２１がフロー検索の検索対象とするパケットのパケットヘッダ情報をフロー検索ＣＡＭ４２１０に入力する。フロー検索ＣＡＭ４２１０は、入力されたパケットのＬ２情報、Ｌ３情報及びＬ４情報に一致するフロー条件が設定されたフローエントリを検索して、一致したフローエントリのアドレスをフロー検索部４２１内のアドレス空間毎アクション指定部４２１２内のアドレス比較部４２１２０に出力する。上述のフロー検索ＣＡＭ４２１０から入力されたアドレスをＡＤＲと表記する。
【００７３】
アドレス比較部４２１２０のアドレス範囲判定部４２１２０２は、ＡＤＲと、アドレス範囲ｎ用アクションレジスタに対応するアドレス範囲の上限値と下限値であるＬ１、Ｕ１、Ｌ２、Ｕ２、Ｌ３、Ｕ３、Ｌ４、Ｕ４との大小を比較して、当該アドレスがいずれのアドレス範囲ｎ用アクションレジスタに対応するかを判定する。アドレス範囲判定部４２１２０２は、Ｌ１≦ＡＤＲ≦Ｕ１であればＡＤＲに対するアクションをアドレス範囲１用アクションレジスタ４２１２１から読み出し、Ｌ２≦ＡＤＲ≦Ｕ２であればＡＤＲに対するアクションをアドレス範囲２用アクションレジスタ４２１２２から読み出し、Ｌ３≦ＡＤＲ≦Ｕ３であればＡＤＲに対するアクションをアドレス範囲３用アクションレジスタ４２１２３から読み出し、Ｌ４≦ＡＤＲ≦Ｕ４であればＡＤＲに対するアクションをアドレス範囲４用アクションレジスタ４２１２４から読み出す。以上の処理によって当該パケットのＡＤＲに対して実行すべきアクションが読み出され、アクション判定部４２１２５にて当該パケットに対して実行すべきアクションが判定されて、フロー統計採取部４２２に出力される。
【００７４】
図１１は、本発明の実施形態のパケット中継装置４によって実行される処理のタイムチャートである。具体的には、図１１は、上述の処理に関し、特にフロー検索部４２１からフロー検索の検索対象とするパケットのパケットヘッダ情報をフロー検索ＣＡＭ４２１０に入力してから、アドレス範囲ｎ用アクションレジスタを読み出すまでの処理のタイムチャートである。本実施例によるフロー検索性能の高速化の効果について説明する。
【００７５】
アクションエントリにより構成されるアクションテーブルがＲＡＭに格納されている場合と、本実施例のように、アドレス範囲毎のアクションエントリがアドレス範囲ｎ用アクションレジスタに格納される場合と比較する。
【００７６】
ＲＡＭにアクションエントリにより構成されるアクションテーブルが格納されている場合、フロー検索の機能種別数の分だけＲＡＭを読み出す回数が性能ネックとなる。一方、図１１で示すように、フロー検索を必要とする機能の数と同数のレジスタのセットをフロー検索部４２１を構成するＡＳＩＣに内蔵すればよく、機能種別数が増えても読み出し回数は変わらず性能ネックを解消することができる。
【００７７】
図９には、説明を簡単にするために、フロー検索を必要とする複数の機能のうち１つ（例えばフロー統計機能）に対応するフロー検索ＣＡＭ４２１０のフローテーブルと、それに対応するアドレス空間毎アクション指定部４２１２を示した。しかし、実際には、既に説明したように、例えばフロー検索を必要とする機能が４つある場合には、フロー検索ＣＡＭ４２１０は４つのフローテーブルを含み、一つの検索コマンドに対して４つの検索結果を出力することができる。
【００７８】
この場合、フロー検索部４２１は、それぞれの機能に対応する（すなわちそれぞれのフローテーブルに対応する）４つのアドレス空間毎アクション指定部４２１２を有してもよい。それぞれのフローテーブルにおいて、同一アクションをもつフローエントリは、フロー検索ＣＡＭ４２１０内のフローエントリのリストにおいてアドレスの連続した空間に配置される。それぞれのアドレス空間毎アクション指定部４２１２は、それぞれの機能において実行され得るアクションに対応する複数のアクションレジスタを有し、それぞれのアクションレジスタに対応するアドレス範囲が設定される。
【００７９】
その結果、フロー検索ＣＡＭ４２１０から４つの検索結果が得られると、４つのアドレス空間毎アクション指定部４２１２が並行してそれぞれの検索結果に応じたアクションレジスタへのリードコマンドを発行し、リード結果を取得し、アクションを判定することができる。これによって、図１１に示すように、１つのパケットに対する処理時間を短縮することができる。
【００８０】
上記のように、複数の機能の全てに対応する複数のアドレス空間毎アクション指定部４２１２が用意される場合には、フロー検索ＲＡＭ４２１１は不要となるが、一つ以上のアドレス空間毎アクション指定部４２１２とフロー検索ＲＡＭ４２１１が組み合わせて使用されてもよい。例えば、フロー検索部４２１が、４つの機能のうち１つ（例えばフロー統計機能）のみに対応する１つのアドレス空間毎アクション指定部４２１２を有し、その他の機能（例えばフィルタ、ＱｏＳ及びミラーリング）については従来と同様にフロー検索ＲＡＭ４２１１が使用されてもよい。その場合、フィルタ、ＱｏＳ及びミラーリングについてはフロー検索ＲＡＭ４２１１からの読み出しを順次実行する必要があるが、フロー統計機能についてはその他の機能のためのフロー検索ＲＡＭ４２１１の検索と並行してアクションレジスタを参照することができるため、処理時間を短縮することができる。
【００８１】
なお、特許文献３において、フロー検索を必要とする機能の数の分だけ外付けするＲＡＭを増やせば、機能ごとのアクションエントリの読み出しを並行して行うことが可能になるため、読み出し回数による性能ネックを解消することができる。しかし、その場合はＡＳＩＣに複数のＲＡＭを外付けする必要がある。ＡＳＩＣにＲＡＭを外付け接続するためにはＡＳＩＣの外部ピンにより接続する必要があるが、複数のＲＡＭを外付けするにはその分だけ必要なピン数が増してしまい、コストが上昇する。それに対し、本実施形態のようにレジスタにアクションエントリを格納する場合、外付けピンを必要としないので上述の課題は生じない。
【００８２】
また、レジスタにはＲＡＭのように多数のエントリを格納することはできないが、そもそもＲＡＭの場合はアドレス毎にアクションエントリを登録しているために多数のアクションエントリを登録する必要があるのに対し、本実施形態のレジスタの場合はアドレス範囲毎にアクションエントリを登録するので多数のアクションエントリを登録する必要はない。このため、多数のエントリを格納できないことは課題とならない。特にフロー検索機能の用途がフロー統計機能である場合、アクションの種別の数は統計採取有無×登録通知有無×登録用ＣＰＵ数×確率制御のレート種別数といった程度で限られている。このことは、フロー検索ＲＡＭ４２１１内の一つのアクションテーブル４２１１０に非常に多くのアクションエントリが格納されていたとしても、実際には、それらの多くの内容が同一であることを意味する。したがって、同一の内容の複数のアクションエントリを一つのレジスタに集約することによって、レジスタに格納すべきアクションエントリの数はＲＡＭに登録可能なアクションエントリ数より圧倒的に少なくなる。このため、フロー統計機能は本実施例の適用対象として適している。
【００８３】
次に、本実施形態におけるフローエントリのフロー条件の設定方法について説明する。図１２は、本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの一例を示す説明図である。
【００８４】
設定前のフローテーブルにおいて、
フローエントリ１（フロー検索ＣＡＭアドレス１）：フロー条件Ａ→アクション１
フローエントリ２（フロー検索ＣＡＭアドレス２）：フロー条件Ｂ→アクション２
フローエントリ３（フロー検索ＣＡＭアドレス３）：フロー条件Ｃ→アクション１
フローエントリ４（フロー検索ＣＡＭアドレス４）：フロー条件Ｄ→アクション１
であり、フローエントリの優先関係は
フローエントリ１＞フローエントリ２＞フローエントリ３＞フローエントリ４
（すなわち、フローエントリ１の優先順位が最も高く、フローエントリ４の優先順位が最も低い）であるものとする。
【００８５】
本発明の実施形態によれば、アクション１とアクション２を伴うフローエントリを、各々フロー検索ＣＡＭの連続したアドレス範囲に配置することとなり、
フローエントリ１（フロー検索ＣＡＭアドレス１）：フロー条件Ａ→アクション１
フローエントリ３（フロー検索ＣＡＭアドレス２）：フロー条件Ｃ→アクション１
フローエントリ４（フロー検索ＣＡＭアドレス３）：フロー条件Ｄ→アクション１
フローエントリ２（フロー検索ＣＡＭアドレス４）：フロー条件Ｂ→アクション２
と配置し直す必要がある。
【００８６】
この例において、フロー条件Ａ〜Ｄのいずれの組み合わせのいずれも互いに背反であれば、一つのパケットが複数の条件を同時に満たすことがあり得ないため、上記のようにフローエントリが並べ替えられても、実行されるアクションが変更されることはない。例えばフロー条件Ｃを満たすパケットが入力された場合、そのパケットがフロー条件Ａ、Ｂ及びＤのいずれも満たすことがないため、フローエントリがどのような順で登録されていても必ずアクション１が実行される。
【００８７】
しかし、フロー条件Ａ〜Ｄの組み合わせの少なくとも一つが互いに背反でない場合、フローエントリが並べ替えられたために実行されるアクションが変更されることがある。例えば、フロー条件Ｂ及びＣのいずれも満たすパケットが入力された場合、フローエントリが並べ替えられる前であれば先にフロー条件Ｂが判定されるため、アクション２が実行されるが、フローエントリが並べ替えられた後であればフロー条件Ｃが先に判定されるため
アクション１が実行される。
【００８８】
例えば、フローエントリ２が図２のいずれかの統計採取用エントリであり、フローエントリ３が図２のいずれかの登録用エントリである場合、上記のような並べ替えに起因するアクションの変更によって、本来は実行されるはずの統計採取が実行されなくなる。
【００８９】
このようなフローエントリの並べ替えに起因するアクションの変更を防ぐことを目的として、フローエントリ間の優先関係を維持するには、フロー条件Ｂに一致するパケットが
フローエントリ３及びフローエントリ４のいずれのフロー条件にも一致しないようにする
必要があるため、フロー条件を以下のように変更する必要がある。
フローエントリ１（フロー検索ＣＡＭのアドレス１）：フロー条件Ａ→アクション１
フローエントリ３（フロー検索ＣＡＭのアドレス２）：ｎｏｔ  フロー条件Ｂ  ａｎｄ  フロー条件Ｃ→アクション１
フローエントリ４（フロー検索ＣＡＭのアドレス３）：ｎｏｔ  フロー条件Ｂ  ａｎｄ  フロー条件Ｄ→アクション１
フローエントリ２（フロー検索ＣＡＭのアドレス４）：（ｎｏｔ  フロー条件Ｃ  ａｎｄ  ｎｏｔ  フロー条件Ｄ）  ａｎｄ  フロー条件Ｂ→アクション２
ただし、フローエントリ２の「（ｎｏｔ  フロー条件Ｃ  ａｎｄ  ｎｏｔ  フロー条件Ｄ）  ａｎｄ」の条件は省略してもよい。このように、本発明適用後のフローエントリのフロー条件は、互いに背反となる。これが図１２における本発明のフローテーブルであり、以上が設定前のフローテーブルに基づいたフローテーブルを設定する処理の流れである。
【００９０】
なお一般にフローエントリ３、フローエントリ４のようにフロー条件の論理式に付加される条件があり、またフロー条件が範囲指定を含む場合、フロー検索ＣＡＭ４２１０上に展開されるエントリ数は増加する。例えば、フロー条件Ｂが５（二進数表記で１０１）、フロー条件Ｃが４〜７（二進数表記で１ｘｘ、ｘはｄｏｎ’ｔ  ｃａｒｅ、つまり任意の値であることを示す）である場合に、ｎｏｔ  フロー条件Ｂ  ａｎｄ  フロー条件Ｃは４、６、７となり、これをフロー検索ＣＡＭ４２１０上にビットを用いた二進数として展開することで生成されるエントリは１００、１１ｘの２エントリに増加する。
【００９１】
パケット中継装置４は、フロー検索ＣＡＭ４２１０に含まれる空きフローエントリ数（すなわちまだフロー条件が設定されていない、これからフロー条件を設定できるエントリ数）を示す情報を出力し、管理端末４６がその情報を画像表示装置（図示省略）等に表示してもよい。通常、どのようなフロー条件が設定されているかが分かれば、そのフロー条件を設定するためにどれだけのフローエントリが消費されるかが推定できる。上記のように、フローエントリを並べ替えて、それに伴ってフロー条件を変更した結果、フローエントリを並べ替える前より多くのフローエントリが消費される場合があるため、空きフローエントリ数に基づいてフロー条件の変更が行われたか否かを推定することができる。例えばユーザが明示的にいくつかのフロー条件を設定した場合、そのフロー条件に基づいて消費されるフローエントリ数を計算できるが、実際にそれより多くのフローエントリが消費された場合には、上記のようなフローエントリの並べ替えとフロー条件の変更が行われたと推定することができる。
【００９２】
図１３Ａ及び図１３Ｂは、本発明の実施形態のフローテーブルにおけるフローエントリの並べ替えの処理の一例を示すフローチャートである。
【００９３】
具体的には、図１３Ａ及び図１３Ｂは、図１２に示したフローエントリの並べ替えの処理の流れを一般化したものである。図１３Ａ及び図１３Ｂでは、フローエントリ数はＮ、アクション種別はＸ、Ｙ、Ｚの３種であるものとする。設定前のフローテーブルのフローエントリ番号をｉ＝１〜Ｎとする。ここで、設定前のフローテーブルのフローエントリ番号は、各フローエントリの優先順位（すなわち各フローエントリに設定されたフロー条件の優先順位）を示す値であり、後述する並べ替えが行われる前の各フローエントリのフロー検索ＣＡＭ４２１０におけるアドレスの値に等しい。設定前のフローテーブルにおけるフローエントリｉのフロー条件をＣ０（ｉ）とする。設定前のフローテーブルのフローエントリｉに対応するアクションをＡ０（ｉ）とする。設定前のフローテーブルに本実施形態を適用後のフローテーブルのフローエントリ番号（すなわち並べ替えられた後のフロー検索ＣＡＭにおけるフローエントリのアドレス）をｊ＝１〜Ｎとする。なお、上述の通りフロー条件が範囲指定を含む場合は一般に本実施形態適用後のフローエントリ数は増加するが、ここでは説明の単純化のためフローエントリ数の増加はないものとする。
【００９４】
本実施形態適用後のフローテーブルのフローエントリｊのフロー条件をＣ（ｊ）とする。本実施形態適用後のフローテーブルのフローエントリｊのアクションをＡ（ｊ）とする。アクションＸに対応するフローエントリのみで構成されるＸフローエントリのフローエントリ数と、そのフローエントリ番号をｘとする。アクションＹに対応するフローエントリのみで構成されるＹフローエントリのフローエントリ数と、そのフローエントリ番号をｙとする。アクションＺに対応するフローエントリのみで構成されるＺフローエントリのフローエントリ数と、そのフローエントリ番号をｚとする。アクションＸとなるフローエントリｘのフロー条件をＣＸ（ｘ）とする。ＣＸ（ｘ）に関するｘ＝０〜ｘの論理積をΠ（ｘ＝０〜ｘ）とする。本実施形態適用のためのフローエントリｘのフロー条件の中間状態をＣＩＸ（ｘ）とする。本実施形態適用のためのフローエントリｙのフロー条件の中間状態をＣＩＹ（ｙ）とする。本実施形態適用のためのフローエントリｚのフロー条件の中間状態をＣＩＺ（ｚ）とする。
【００９５】
以下、設定前のフローテーブルに本発明を適用するフローチャートの一例として図１３Ａ及び図１３Ｂの処理の流れを説明する。
【００９６】
フロー統計機能用ＣＰＵ４２３は、設定前のフローテーブルに対する本発明の適用処理を開始する（ステップ６０１）。最初に、フロー統計機能用ＣＰＵ４２３は、ｉ＝１、ｊ＝１、ｘ＝０、ｙ＝０、ｚ＝０、ＣＸ（０）＝１、ＣＹ（０）＝１、ＣＺ（０）＝１とする初期化を行う（ステップ６０２）。次に、フロー統計機能用ＣＰＵ４２３は、Ａ０（ｉ）＝Ｘであるか判定する（ステップ６０３）。
【００９７】
ステップ６０３の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｘに１を加算し、Ｃ０（ｉ）にフローエントリｉより優先順位が高いフローエントリのうちアクションＹ又はＺに対応するフローエントリのフロー条件の否定条件の論理積を乗じた条件をＣＩＸ（ｘ）とする。すなわち、ＣＩＸ（ｘ）＜＝Ｃ０（ｉ）ａｎｄ（Π（ｙ＝０〜ｙ）ｎｏｔＣＹ（ｙ））ａｎｄ（Π（ｚ＝０〜ｚ）ｎｏｔＣＺ（ｚ））によってＣＩＸ（ｘ）が求められる。さらに、アクションＹ及びアクションＺに関するＣＩＹ（ｙ）及びＣＩＺ（ｚ）の演算のため、フロー統計機能用ＣＰＵ４２３は、ＣＸ（ｘ）をＣ０（ｉ）とする（ステップ６０４）。
【００９８】
ステップ６０３の判定結果がＮＯである場合には、フロー統計機能用ＣＰＵ４２３は、Ａ０（ｉ）＝Ｙであるか判定する（ステップ６０５）。ステップ６０５の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｙに１を加算し、Ｃ０（ｉ）にフローエントリｉより優先順位が高いフローエントリのうちアクションＺ又はＸに対応するフロ
ーエントリのフロー条件の否定条件の論理積を乗じた条件をＣＩＹ（ｙ）とする。すなわち、ＣＩＹ（ｙ）＜＝Ｃ０（ｉ）ａｎｄ（Π（ｚ＝０〜ｚ）ｎｏｔＣＺ（ｚ））ａｎｄ（Π（ｘ＝０〜ｘ）ｎｏｔＣＸ（ｘ））によってＣＩＹ（ｙ）が求められる。さらに、アクションＺ及びアクションＸに関するＣＩＺ（ｚ）及びＣＩＸ（ｘ）の演算のため、フロー統計機能用ＣＰＵ４２３は、ＣＹ（ｙ）をＣ０（ｉ）とする（ステップ６０６）。
【００９９】
ステップ６０５の判定結果がＮＯである場合には、フロー統計機能用ＣＰＵ４２３は、ｚに１を加算し、Ｃ０（ｉ）にフローエントリｉより優先順位が高いフローエントリのうちアクションＸ又はＹに対応するフローエントリのフロー条件の否定条件の論理積を乗じた条件をＣＩＺ（ｚ）とする。すなわち、ＣＩＺ（ｚ）＜＝Ｃ０（ｉ）ａｎｄ（Π（ｘ＝０〜ｘ）ｎｏｔＣＸ（ｘ））ａｎｄ（Π（ｙ＝０〜ｙ）ｎｏｔＣＹ（ｙ））によってＣＩＺ（ｚ）が求められる。さらに、アクションＸ及びアクションＹに関するＣＩＸ（ｘ）及びＣＩＹ（ｙ）の演算のため、フロー統計機能用ＣＰＵ４２３は、ＣＺ（ｚ）をＣ０（ｉ）とする（ステップ６０７）。
【０１００】
以上の処理を終了すると、フロー統計機能用ＣＰＵ４２３は、ｉに１を加算する（ステップ６０８）。次に、フロー統計機能用ＣＰＵ４２３は、ｉ＝Ｎ＋１であるか判定する（ステップ６０９）。ステップ６０９の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ６０３の判定処理以降の処理を繰り返す。
【０１０１】
ステップ６０９の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、Ｃ（ｊ）＝ＣＩＸ（ｊ）とし、Ａ（ｊ）＝Ｘとする（ステップ６１０）。次に、フロー統計機能用ＣＰＵ４２３は、ｊに１を加算する（ステップ６１１）。次に、フロー統計機能用ＣＰＵ４２３は、ｊ＝ｘ＋１であるか判定する（ステップ６１２）。ステップ６１２の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ６１０以降の処理を繰り返す。
【０１０２】
ステップ６１２の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、Ｃ（ｊ）＝ＣＩＹ（ｊ−ｘ）とし、Ａ（ｊ）＝Ｙとする（ステップ６１３）。次に、フロー統計機能用ＣＰＵ４２３は、ｊに１を加算する（ステップ６１４）。次に、フロー統計機能用ＣＰＵ４２３は、ｊ＝ｘ＋ｙ＋１であるか判定する（ステップ６１５）。ステップ６１５の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ６１３以降の処理を繰り返す。
【０１０３】
ステップ６１５の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、Ｃ（ｊ）＝ＣＩＺ（ｊ−ｘ−ｙ）とし、Ａ（ｊ）＝Ｚとする（ステップ６１６）。次に、フ
ロー統計機能用ＣＰＵ４２３は、ｊに１を加算する（ステップ６１７）。次に、フロー統
計機能用ＣＰＵ４２３は、ｊ＝ｘ＋ｙ＋ｚ１であるか判定する（ステップ６１８）。ステップ６１８の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ６１６以降の処理を繰り返す。
【０１０４】
ステップ６１８の判定結果がＹＥＳの場合には、本実施形態のフローテーブル作成のフローチャートの処理を完了する（ステップ６１９）。
【０１０５】
図１３Ａ及び図１３Ｂには、説明を簡単にするために、各フローエントリを３つのアドレス範囲のいずれかに登録する処理の例を示した。しかし、図９に示すように、４つのアクションが定義され、それらに対応する４つのアドレス範囲が設定される場合、図１３Ａの処理に、ステップ６０３又は６０５等と同様の分岐と、それに伴うステップ６０４、６０６又は６０７と同様の処理との組が追加され、それに合わせて図１３Ｂの処理も変更される。定義されるアクション数がさらに増えれば同様の変更がさらに必要になるが、いずれの場合も、実行される処理の概要は図１３Ａ及び図１３Ｂから理解される通りである。後述する図１４Ａ、図１４Ｂ及び図１５についても同様である。
【０１０６】
以上の図１３Ａ及び図１３Ｂの処理によれば、同一のアクションに関連付けられたフローエントリが同一のアドレス範囲内に登録されるように、フロー検索ＣＡＭ４２１０内のフローテーブルのフローエントリが並べ替えられる。これによって、フローエントリ毎ではなくフローエントリのアドレス範囲ごとにアクションエントリを保持することが可能になり、保持すべき情報量が激減するため、アクションエントリと同等の情報をＡＳＩＣ内のアクションレジスタに保持することが可能になる。これによって、搭載されるＲＡＭを増やすことなく、複数の機能に対応して実行されるべきアクションを判定する処理を並行して実行することで、処理が高速化される。
【０１０７】
さらに、この並べ替えによって、優先順位の低いフローエントリ（ここではフローエントリ１と記載）が優先順位の高いフローエントリ（ここではフローエントリ２と記載）より上位のアドレスに登録される場合には、フローエントリ１に設定されたフロー条件（ここではフロー条件１と記載）と、フローエントリ２に設定されたフロー条件（ここではフロー条件２と記載）との重複部分をフロー条件１から除外することによって生成された新たなフロー条件が、フローエントリ１に設定される。
【０１０８】
例えば、上記のフロー条件１及び２がそれぞれ図１２の例におけるフロー条件Ｃ及びＢである場合、上記の新たなフロー条件は、「フロー条件Ｃ  ａｎｄ  ｎｏｔ  Ｂ」となる。このようにフロー条件を変更することによって、優先順位の上下関係とフロー検索ＣＡＭ４２１０内のアドレスの順位の上下関係とが逆転した二つのフローエントリに設定されたフロー条件が互いに背反となるため、実行されるアクションがフローエントリの並べ替えの影響を受けなくなる。
【０１０９】
上記のように、図１３Ａ及び図１３Ｂの処理によって並べ替えられた後のフローエントリのアドレスは、各フローエントリの優先順位を表していない。このため、パケット中継装置４は、各フローエントリの優先順位を示す情報を、並べ替えが実行された後も保持し続ける。具体的には、例えば、パケット中継装置４は、並べ替えが実行される前の（すなわちアドレスの上下関係がフローエントリの優先順位の上下関係を表している）フローテーブルの各フローエントリの内容とそのアドレスとを示す情報を、図１に示したいずれかのＲＡＭ又は図示しないＲＡＭに保持してもよい。この情報は、フローテーブルに新たなフローエントリを追加するときに参照される場合がある（図１４Ａ等参照）。
【０１１０】
なお、並べ替えが行われる前のフローテーブル内のフローエントリの全ての組み合わせにおいて、フロー条件が互いに背反である場合もある。例えば、ＮｅｔＦｌｏｗをはじめとするフロー統計機能に使用されるフローテーブルの場合、図２に示すように、各統計採取用エントリには、モニタリング対象となるフローを識別する条件が設定される。
【０１１１】
図２を参照して説明したように、入力されたパケットがいずれの統計採取用エントリのフロー条件も満たさず、ＩＰｖ４登録用エントリ４２１００２等のフロー条件を満たす場合、当該パケットのヘッダ情報の少なくとも一部が、新たな統計採取用エントリのフロー条件として設定される。その結果、フローテーブル４２１００内の統計採取用エントリの全ての組み合わせのフロー条件が互いに背反となる。
【０１１２】
すなわち、入力された一つのパケットがいずれの統計採取用エントリのフロー条件も満たさない場合、及び、いずれか一つの統計採取用エントリのフロー条件を満たす場合はあるが、複数の統計採取用エントリのフロー条件を満たす場合はない。したがって、例えばフローテーブル４２１００内の複数の統計採取用エントリ４２１０００〜４２１００１等のみを並べ替える場合には、各統計採取用エントリに設定されたフロー条件を変更する必要がない。
【０１１３】
これに対して、一般に、ＱｏＳ又はフィルタリング等の対象となるフローを検索するためのフローテーブルにおいては、フロー条件が互いに背反とならないフローエントリの組み合わせが存在し得る。そのようなフローテーブルにおいては、上記の通りにフロー条件が変更される。
【０１１４】
図１３Ａ及び図１３Ｂは、フロー統計機能用ＣＰＵ４２３によって実行される。これは、本発明の実施形態の一例として、アドレス範囲に基づくアクションの判定をフロー統計機能に適用する例を示しているためである。実際には、本発明は他の機能、例えばＱｏＳ機能又はフィルタリング機能等にも適用することができる。その場合、例えば図示しないＱｏＳ機能用ＣＰＵ及びフィルタリング機能用ＣＰＵが上記と同様の処理を実行してもよいし、一つのＣＰＵが複数の機能のために上記と同様の処理を実行してもよい。後述する図１４Ａ、図１４Ｂ及び図１５に示す処理についても同様である。
【０１１５】
図１４Ａ及び図１４Ｂは、本発明の実施形態のフローテーブルにおけるフローエントリの追加の処理の一例を示すフローチャートである。
【０１１６】
図１４Ａ及び図１４Ｂでは、アクション０に対応するフローエントリ数（すなわち、アクション０に対応するアドレス範囲内のフローエントリ数）をｉとする。アクション１に対応するフローエントリ数をｊとする。アクション２に対応するフローエントリ数をｋとする。アクション０に対応するフローエントリの追加アドレスをＩとする。アクション１に対応するフローエントリの追加アドレスをＪとする。アクション２に対応するフローエントリの追加アドレスをＫとする。アクション０に対応するアドレス範囲の下限アドレス
Ｌ０＝０とする。アクション０に対応するアドレス範囲の上限アドレスＵ０＝ｉとする。アクション１に対応するアドレス範囲の下限アドレスＬ１＝ｉ＋１とする。アクション１に対応するアドレス範囲の上限アドレスＵ１＝ｉ＋ｊ＋１とする。アクション２に対応するアドレス範囲の下限アドレスＬ２＝ｉ＋ｊ＋２とする。アクション２に対応するアドレス範囲の上限アドレスＵ２＝ｉ＋ｊ＋ｋ＋２とする。初期値としてｉ＝０、ｊ＝０、ｋ＝０、Ｉ＝０、Ｊ＝１、Ｋ＝２とする。
【０１１７】
以下、フローエントリ追加の処理の流れを図１４Ａ及び図１４Ｂに沿って説明する。最初に、フローエントリ追加の指示が発行される（ステップ７０１）。この指示は、少なくとも、追加されるフローエントリに設定されるフロー条件と、そのフロー条件を満たすパケットが入力されたときに実行されるべきアクション（すなわち、追加されるフローエントリに対応するアクション）と、を指定する情報を含み、さらに、追加されるフローエン
トリの優先順位を示す情報を含んでもよい。
【０１１８】
次に、フロー統計機能用ＣＰＵ４２３は、追加フローエントリがアクション０に対応するか判定する（ステップ７０２）。
【０１１９】
ステップ７０２の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｎ＝０とする（ステップ７０３）。次に、フロー統計機能用ＣＰＵ４２３は、アドレスＵ２−ｎのフローエントリをアドレスＵ２−（ｎ−１）にコピーする（ステップ７０４）。次に、フロー統計機能用ＣＰＵ４２３は、ｎに１を加算する（ステップ７０５）。次に、フロー統計機能用ＣＰＵ４２３は、ｎ＝ｋ＋１であるか判定する（ステップ７０６）。ステップ７０６の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ７０４以降の処理を繰り返す。
【０１２０】
ステップ７０６の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｍ＝０とする（ステップ７０７）。次に、フロー統計機能用ＣＰＵ４２３は、アドレスＵ１−ｍのフローエントリをアドレスＵ１−（ｍ−１）にコピーする（ステップ７０８）。次に、フロー統計機能用ＣＰＵ４２３は、ｍに１を加算する（ステップ７０９）。次に、フロー統計機能用ＣＰＵ４２３は、ｍ＝ｊ＋１であるか判定する（ステップ７１０）。ステップ７１０判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ７０８以降の処理を繰り返す。
【０１２１】
ステップ７１０の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｉに１を加算し（ステップ７１１）、アドレスＩにフローエントリを追加し（ステップ７１２）、Ｉに１を加算し（ステップ７１３）、Ｊに１を加算し（ステップ７１４）、Ｋに１を加算する（ステップ７１５）。
【０１２２】
ステップ７０２の判定結果がＮＯである場合には、フロー統計機能用ＣＰＵ４２３は、追加フローエントリがアクション１に対応するか判定する（ステップ７１６）。ステップ７１６の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｎ＝０とする（ステップ７１７）。次に、フロー統計機能用ＣＰＵ４２３は、アドレスＵ２−ｎのフローエントリをアドレスＵ２−（ｎ−１）にコピーする（ステップ７１８）。次に、フロー統計機能用ＣＰＵ４２３は、ｎに１を加算する（ステップ７１９）。次に、フロー統計機能用ＣＰＵ４２３は、ｎ＝ｋ＋１であるか判定する（ステップ７２０）。ステップ７２０の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ステップ７１８以降の処理を繰り返す。
【０１２３】
ステップ７２０の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｊに１を加算し（ステップ７２１）、アドレスＪにフローエントリを追加し（ステップ７２２）、Ｊに１を加算し（ステップ７２３）、Ｋに１を加算する（ステップ７２４）。
【０１２４】
ステップ７１６の判定結果がＮＯである場合には、フロー統計機能用ＣＰＵ４２３は、ｋに１を加算し（ステップ７２５）、アドレスＫにフローエントリを追加し（ステップ７２６）、Ｋに１を加算する（ステップ７２７）。
【０１２５】
以上で本実施形態におけるフローエントリ追加の処理を完了する（ステップ７２８）。
【０１２６】
なお、フロー統計機能用ＣＰＵ４２３は、上記の図１４Ａ及び図１４Ｂの処理によって複数のアドレス範囲の上限値及び下限値のうち少なくとも一つが変更された場合には、その変更をアドレス範囲テーブル４２１２０１にも反映させる。この処理は、例えばステップ７２８で実行されてもよい。
【０１２７】
以上の図１４Ａ及び図１４Ｂによれば、フローエントリの追加の指示が発行された場合、追加されるフローエントリに対応するアクションに対応するフロー検索ＣＡＭ４２１０のアドレス範囲より下位のアドレス範囲のフローエントリがさらに少なくとも一つ下位のアドレスに移動し、その移動によって生じた空きアドレスに、指示されたフローエントリが追加される。さらに、この移動によるアドレス範囲の変更がアドレス範囲テーブル４２１２０１にも反映される。これによって、フローエントリが追加された場合にも、フローエントリのアドレス範囲に基づいてアクションを判定することが可能になる。
【０１２８】
ここで、フローエントリの追加の指示が、追加されるフローエントリの優先順位を示す情報を含んでいる場合、フロー統計機能用ＣＰＵ４２３は、その情報に従って、パケット中継装置４が保持している各フローエントリの優先順位を示す情報を更新してもよい。例えば、各フローエントリの優先順位を示す情報に、追加されるフローエントリの優先順位と同一の優先順位を有するフローエントリが既に登録されている場合、その既に登録されているフローエントリ及びそれより下位の優先順位を有するフローエントリの優先順位をさらに一つ下位に繰り下げ、追加されるフローエントリの優先順位を示す情報を追加してもよい。
【０１２９】
さらに、追加されるフローエントリに設定されたフロー条件と、既に登録されているいずれかのフローエントリに設定されたフロー条件とが互いに背反でない場合には、それらの条件のいずれかを変更する必要がある場合がある。この変更は、更新された各フローエントリの優先順位を示す情報に基づいて、図１３Ａ及び図１３Ｂを参照して説明した方法によって実行されるため、ここでは説明を省略する。
【０１３０】
なお、各アドレス範囲は、予め空きアドレスを含むように設定されていてもよい。その場合には、フローエントリを追加しようとするアドレス範囲に空きアドレスが残っている限り、追加を指示されたフローエントリを空きアドレスに追加すればよいため、図１４Ａ及び図１４Ｂに示す処理は実行しなくてよい。
【０１３１】
図１５は、本発明の実施形態のフローテーブルにおけるフローエントリの削除の処理の一例を示すフローチャートである。
【０１３２】
最初に、フローエントリｄを削除する指示が発行される（ステップ８００）。次に、フロー統計機能用ＣＰＵ４２３は、フローエントリｄを削除する（ステップ８０１）。次に、フロー統計機能用ＣＰＵ４２３は、ｍ＝ｄとする（ステップ８０２）。次に、フロー統計機能用ＣＰＵ４２３は、アドレスｍ＋１に登録されているフローエントリをアドレスｍにコピーする（ステップ８０３）。次に、フロー統計機能用ＣＰＵ４２３は、ｍ＜Ｕ２であるか判定する（ステップ８０４）。ステップ８０４の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、ｍに１を加算する（ステップ８０５）。次に、フロー統計機能用ＣＰＵ４２３は、ステップ８０３以降の処理を繰り返す。
【０１３３】
ステップ８０４の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ｄ≦Ｕ０であるか判定する（ステップ８０６）。ステップ８０６の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、Ｕ０から１を減算し、Ｌ１から１を減算し、Ｕ１から１を減算し、Ｌ２から１を減算し、Ｕ２から１を減算する（ステップ８０７）。
【０１３４】
ステップ８０６の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、ｄ≦Ｕ１であるか判定する（ステップ８０８）。ステップ８０８の判定結果がＹＥＳの場合には、フロー統計機能用ＣＰＵ４２３は、Ｕ１から１を減算し、Ｌ２から１を減算し、Ｕ２から１を減算する（ステップ８０９）。ステップ８０８の判定結果がＮＯの場合には、フロー統計機能用ＣＰＵ４２３は、Ｕ２から１を減算する（ステップ８１０）。以上で本実施形態におけるフローエントリ削除の処理を完了する（ステップ８１１）。
【０１３５】
なお、フロー統計機能用ＣＰＵ４２３は、上記の図１５の処理によって複数のアドレス範囲の上限値及び下限値のうち少なくとも一つが変更された場合には、その変更をアドレス範囲テーブル４２１２０１にも反映させる。この処理は、例えばステップ８１１で実行されてもよい。
【０１３６】
以上の図１５によれば、フローエントリの削除の指示が発行された場合、削除されるフローエントリに対応するアクションに対応するフロー検索ＣＡＭ４２１０のアドレス範囲より下位のアドレス範囲のフローエントリが少なくとも一つ上位のアドレスに移動する。さらに、この移動によるアドレス範囲の変更がアドレス範囲テーブル４２１２０１にも反映される。これによって、フローエントリが削除された場合にも、フローエントリのアドレス範囲に基づいてアクションを判定することが可能になる。
【０１３７】
なお、各アドレス範囲が空きアドレスを含むことが許容される場合には、削除されたフローエントリのアドレスを空きアドレスとして扱えばよいため、図１５に示す処理は実行しなくてよい。
【０１３８】
図１４Ａ、図１４Ｂ及び図１５に示したフローエントリの追加又は削除に伴うフローエントリの移動が行われる場合、追加又は削除されるフローエントリがフロー検索ＣＡＭ４２１０の上位にあるほど、移動するフローエントリの数が多くなる。フロー統計機能用ＣＰＵ４２３の負荷を軽減するためには、移動するフローエントリの数は少ない方が望ましい。このため、フロー統計機能用ＣＰＵ４２３は、アクションごとに、そのアクションに対応するフローエントリの追加又は削除が行われる頻度を計算し、その頻度が低いアクションを指定するアクションレジスタに対応するアドレス範囲が、その頻度が高いアクションを指定するアクションレジスタに対応するアドレス範囲より上位になるように、図１３Ａ及び図１３Ｂに示した各フローエントリの移動を実行してもよい。これによって、移動するフローエントリ数を抑制し、フロー統計機能用ＣＰＵ４２３の負荷を軽減することが期待できる。
【０１３９】
以上の本発明の実施形態によれば、フロー検索を必要とする機能が増えたために、１回の検索コマンドで実行される検索数が増えた場合にも、ＲＡＭの読み出し性能がネックとならず、フロー検索性能を低下させずに維持できるパケット中継装置を、ＲＡＭの増設なしに実現することができる。
【０１４０】
次に、パケット中継装置４において、アクション種別毎またはフロー毎の最大エントリ数を指定するユーザインタフェースについて説明する。本ユーザインタフェースにより、アクション種別毎またはフロー毎の統計採取上の重要度に応じて、使用可能なエントリ数資源を指定することができる。また、図１４Ａ、図１４Ｂにおけるアクション０のフローエントリ数ｉ、アクション１のフローエントリ数ｊ、アクション２のフローエントリ数ｋの各々に対する上限値を設定することができる。ユーザインターフェースは、管理端末４６が有する入力部により提供され、パケット中継装置４は、アクション種別毎またはフロー毎の最大エントリ数を指定に従って、アクション種別毎またはフロー毎の最大エントリ数を設定する。
【０１４１】
アクション種別毎またはフロー毎の最大エントリ数としては例えば、ＩＰｖ４フローを指定するＩＰｖ４フロー登録用最大エントリ数(図５の４２１００２の最大エントリ数)、フローテーブルに登録するＩＰｖ６フローを指定するＩＰｖ６フロー登録用最大エントリ数(図５の４２１００３の最大エントリ数)、フローテーブルに登録する非ＩＰフローを指定する非ＩＰフロー登録用最大エントリ数(図５の４２１００４の最大エントリ数)を指定する。登録処理を行うＣＰＵが複数あって登録処理を分散する場合、ＣＰＵ毎に登録処理を分担するフローを上記のフロー登録用エントリにより指定することができる。
【０１４２】
また、統計採取する確率を示すレート種別をアクション種別としてアクション種別毎またはフロー毎の最大エントリ数を指定する場合は、統計採取用エントリ４２１１０の確率制御フラグ４２１１００１が統計採取の確率制御を実施することを示す値であり、かつ確率制御カウンタ識別子４２１１００２が同一の値である統計採取用エントリの最大エントリ数を指定する。
【０１４３】
上記のアクション種別毎またはフロー毎の最大エントリ数を指定するユーザインタフェースは、例えば以下のような指定方法となる。
【０１４４】
[アクション種別毎またはフロー毎最大エントリ数指定コマンド] [最大エントリ数] -[エントリタイプ指定] -[対象フロー指定] -
エントリタイプとしては例えば、登録用エントリ(reg)、統計採取用エントリ(cnt)がある。登録用エントリの場合は、登録処理を実行するCPUを識別できる識別子により指定することができる。あるいは登録処理を実行するCPUを搭載する装置を収容する回線または登録処理を実行するCPUを搭載する拡張ボードを搭載するスロット番号で指定することもできる。対象フローは、パケットヘッダ情報(例えばプロトコル種別等)により指定してもよい。
【０１４５】
まず、ユーザインタフェースにより入力される、プロトコル種別毎の最大登録エントリ数を指定するコマンドの例を示す。
【０１４６】
designate_entry_num 10 -type reg -prt IPv4       ・・・１８０１
designate_entry_num 1 -type reg -prt IPv6       ・・・１８０２
designate_entry_num 3 -type reg -prt notIP       ・・・１８０３
1801に示すコマンドは、IPv4フロー(-prt IPv4)の登録用エントリ(-type reg)の最大エントリ数として、10エントリを指定するコマンド (designate_entry_num)である。1802に示すコマンドはIPv6フロー(-prt IPv6)の登録用エントリ(-type reg)の最大エントリ数として、1エントリを指定するコマンド(designate_entry_num)である。1803に示すコマンドは、非IPフロー(-prt notIP)の登録用エントリ(-type reg)の最大エントリ数として、3エントリを指定するコマンド(designate_entry_num)である。
【０１４７】
次に、ユーザインタフェースにより入力される、登録処理を実行するCPU毎の最大登録エントリ数を指定するコマンドの例を示す。
【０１４８】
designate_entry_num 10 -type reg -cpu 0       ・・・１９０１
designate_entry_num 1 -type reg -cpu 1       ・・・１９０２
designate_entry_num 3 -type reg -cpu 2       ・・・１９０３
1901に示すコマンドは、CPU0(-cpu 0)の登録用エントリ(-type reg)の最大エントリ数として、10エントリを指定するコマンド(designate_entry_num)である。1902に示すコマンドは、CPU1(-cpu 1)の登録用エントリ(-type reg)の最大エントリ数として、1エントリを指定するコマンド(designate_entry_num)である。1903に示すコマンドは、CPU2(-cpu 2)の登録用エントリ(-type reg)の最大エントリ数として、3エントリを指定するコマンド(designate_entry_num)である。
【０１４９】
最後に、ユーザインタフェースにより入力される、レート種別毎の最大統計採取エントリ数を指定するコマンドの例を示す。
【０１５０】
designate_entry_num 2000 -type cnt -prt IPv4 -rate 10%      ・・・２００１
designate_entry_num 4000 -type cnt -prt IPv4 -rate 5%      ・・・２００２
designate_entry_num 1000 -type cnt -prt IPv6 -rate 50%       ・・・２００３
2001に示すコマンドは、レート10%(-rate 10%)のIPv4フロー(-prt IPv4)の統計採取用エントリ(-type cnt)の最大エントリ数として、2000エントリを指定するコマンド(designate_entry_num) を示す。2002に示すコマンドは、レート5%(-rate 5%)のIPv4フロー(-prt IPv4)の統計採取用エントリ(-type cnt)の最大エントリ数として、4000エントリを指定するコマンド(designate_entry_num) を示す。2003に示すコマンドは、レート50%(-rate 50%)のIP6フロー(-prt IPv6)の統計採取用エントリ(-type cnt)の最大エントリ数として、1000エントリを指定するコマンド(designate_entry_num) を示す。
【０１５１】
アクション種別毎またはフロー毎の最大エントリ数が設定された場合、図１４Ａ，Ｂは以下のように変更される。フロー統計機能用ＣＰＵ４２３は、追加フローエントリがアクション0である場合（ステップ７０２のＹＥＳ）、アクションエントリ0のフローエントリ数iと設定されるアクション0の最大フローエントリ数imaxを大小比較する。比較結果がi≦imaxである場合、フロー統計機能用ＣＰＵ４２３は、フローエントリの追加処理（ステップ７０３〜７１５）を実施し、その他の場合、フローエントリの追加処理をせずに終了する。この場合、フロー統計機能用ＣＰＵ４２３は、最大フローエントリ数の指定によりフローエントリの追加がなされなかったことを示すアラートを管理端末の表示画面に出力してもよい。同様に、追加フローエントリがアクション1である場合（ステップ７１６のＹＥＳ）、フロー統計機能用ＣＰＵ４２３は、アクションエントリ1のフローエントリ数jと設定されたアクション1の最大フローエントリ数jmaxを大小比較する。比較結果がj≦jmaxである場合、フロー統計機能用ＣＰＵ４２３は、フローエントリの追加処理を実施し(ステップ７１７〜７２４)、その他の場合にはフローエントリの追加処理をせずに終了する。さらに、追加フローエントリーが、アクション０でもアクション１でもない場合、フローエントリ数kと設定される最大フローエントリ数kmaxを大小比較して、k≦kmaxである場合にはフローエントリの追加処理を実施し（ステップ７２５〜７２７）、その他の場合にはフローエントリの追加処理をせずに終了する。
【０１５２】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。また、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えてもよく、また、ある実施形態の構成に他の実施形態の構成を加えてもよい。また、各実施形態の構成の一部について、他の構成の追加・削除・置換してもよい。
【０１５３】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によってハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによってソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納してもよい。
【０１５４】
また、図面には、実施形態を説明するために必要と考えられる制御線及び情報線を示しており、必ずしも、本発明が適用された実際の製品に含まれる全ての制御線及び情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されてて
もよい。
【符号の説明】
【０１５５】
４  パケット中継装置、４０  パケット受信回路、４１  パケット送信回路、４２  受信側パケット検索部、４３  送信側パケット検索部、４４  スイッチ、４５  レジスタ、４６  管理端末、４７  入力回線、４８  出力回線、４２０  経路検索部、４２１  受信側フロー検索部、４２２  受信側フロー統計収集部、４２３  受信側フロー統計機能用ＣＰＵ、４３１  送信側フロー検索部、４３２  送信側フロー統計採取部４３３  送信側フロー統計機能用ＣＰＵ、４２００  経路検索ＣＡＭ、４２０１  経路検索ＲＡＭ、４２１０  受信側フロー検索ＣＡＭ、４２１１  受信側フロー検索ＲＡＭ、４２２０  フロー統計採取ＲＡＭ、４３１０  送信側フロー検索ＣＡＭ、４３１１  送信側フロー検索ＲＡＭ、４２２１  確率制御判定部、４２２２  確率制御部、４２２３  確率制御カウンタテーブル、４２２４  統計採取判定部、４２１２  アドレス空間毎アクション指定部、４２１２０  アドレス比較部、４２１２０１  アドレス範囲テーブル、４２１２０２  アドレス範囲判定部、４２１２１  アドレス範囲１用アクションレジスタ、４２１２２  アドレス範囲２用アクションレジスタ、４２１２３  アドレス範囲３用アクションレジスタ、４２１２４  アドレス範囲４用アクションレジスタ、４２１２５  アドレス判定部
【図１】
2015053673.tif 000003
【図２】
2015053673.tif 000004
【図３】
2015053673.tif 000005
【図４】
2015053673.tif 000006
【図５】
2015053673.tif 000007
【図６】
2015053673.tif 000008
【図７】
2015053673.tif 000009
【図８】
2015053673.tif 000010
【図９】
2015053673.tif 000011
【図１０】
2015053673.tif 000012
【図１１】
2015053673.tif 000013
【図１２】
2015053673.tif 000014
【図１３Ａ】
2015053673.tif 000015
【図１３Ｂ】
2015053673.tif 000016
【図１４Ａ】
2015053673.tif 000017
【図１４Ｂ】
2015053673.tif 000018
【図１５】
2015053673.tif 000019