(57)【要約】  パケット処理装置は、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルと、処理すべきパケットである対象パケットに格納された情報に対応するルールを、前記ルールテーブルから抽出するルール抽出部と、抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行うルール適用部と、を備えている。複数のプロセッサを備えたパケット転送装置において、パケットの処理を実行するプロセッサを複数のプロセッサの中から柔軟かつ高速に選択できるようにする。
2012105677.tif 000002
【特許請求の範囲】
【請求項１】
パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルと、
処理すべきパケットである対象パケットに格納された情報に対応するルールを、前記ルールテーブルから抽出するルール抽出部と、
抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行うルール適用部と、を備えていることを特徴とするパケット処理装置。
【請求項２】
前記第１の処理は、前記対象パケットを破棄すべきか否かを判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１に記載のパケット処理装置。
【請求項３】
前記ルール適用部は、前記第１の処理において前記対象パケットが破棄すべきパケットでない場合には、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼することを特徴とする、請求項２に記載のパケット処理装置。
【請求項４】
前記ルールテーブルは、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子、および、該パケットを含むフローを定義するフィールドを示すフロー定義フィールドを互いに関連付けるルールを保持し、
前記ルール適用部は、抽出されたルールに複数のプロセッサ識別子が含まれる場合には、前記フロー定義フィールドを参照し、該複数のプロセッサ識別子に相当する複数のプロセッサのうちのいずれかのプロセッサに対して、同一のフローに含まれるすべての対象パケットに対する前記第２の処理を依頼することを特徴とする、請求項２または３に記載のパケット処理装置。
【請求項５】
前記ルール抽出部は、前記ルールテーブルが前記対象パケットに格納された情報に対応するルールを保持していない場合には、前記ルールを設定可能なルール設定装置に該情報に適合するルールを設定するように依頼することを特徴とする、請求項２ないし４のいずれか１項に記載のパケット処理装置。
【請求項６】
前記第１の処理は、前記対象パケットの宛先を判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１に記載のパケット処理装置。
【請求項７】
前記ルール適用部は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合において、前記対象パケットの宛先が前記パケット処理装置である場合には、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼することを特徴とする、請求項６に記載のパケット処理装置。
【請求項８】
前記ルール抽出部は、抽出したルールを一時的に保持するキャッシュを有し、前記対象パケットに格納された情報に適合するルールを該キャッシュから抽出し、
前記ルール適用部は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合において、前記対象パケットに適合するルールが前記ルール抽出部により前記キャッシュから抽出されたときには、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼することを特徴とする、請求項６または７に記載のパケット処理装置。
【請求項９】
前記第１の処理は、前記対象パケットを送受信する際のトランスポートレイヤにおける制御情報を特定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４の受信処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４以下の送信処理であることを特徴とする、請求項１に記載のパケット処理装置。
【請求項１０】
前記ルールテーブルは、優先度に応じてソートされた複数のルールを保持し、
前記ルール抽出部は、前記対象パケットに格納された情報に適合する複数のルールが前記ルールテーブルに格納されている場合には、該複数のルールのうちの優先度が高いものを抽出することを特徴とする、請求項１に記載のパケット処理装置。
【請求項１１】
前記ルールテーブルのルールは、パケットに格納された情報として、送信元アドレス、宛先アドレス、送信元ポート番号、および、宛先ポート番号のうちの少なくともいずれかを含んでいることを特徴とする、請求項１に記載のパケット処理装置。
【請求項１２】
前記ルールテーブルに対して、ルールの追加、変更、または、削除を行うルール設定部をさらに備えていることを特徴とする、請求項１に記載のパケット処理装置。
【請求項１３】
複数のプロセッサのうちの一のプロセッサが、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルから、処理すべきパケットである対象パケットに格納された情報に対応するルールを抽出する工程と、
前記一のプロセッサが、抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行う工程と、を含むことを特徴とするパケット処理方法。
【請求項１４】
前記第１の処理は、前記対象パケットを破棄すべきか否かを判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１３に記載のパケット処理方法。
【請求項１５】
前記第１の処理は、前記対象パケットの宛先を判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１３に記載のパケット処理方法。
【請求項１６】
前記第１の処理は、前記対象パケットを送受信する際のトランスポートレイヤにおける制御情報を特定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４の受信処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４以下の送信処理であることを特徴とする、請求項１３に記載のパケット処理方法。
【請求項１７】
パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルから、処理すべきパケットである対象パケットに格納された情報に対応するルールを抽出する処理と、
抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行う処理と、を複数のプロセッサのうちの一のプロセッサに実行させることを特徴とするプログラム。
【請求項１８】
前記第１の処理は、前記対象パケットを破棄すべきか否かを判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１７に記載のプログラム。
【請求項１９】
前記第１の処理は、前記対象パケットの宛先を判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であることを特徴とする、請求項１７に記載のプログラム。
【請求項２０】
前記第１の処理は、前記対象パケットを送受信する際のトランスポートレイヤにおける制御情報を特定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４の受信処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４以下の送信処理であることを特徴とする、請求項１７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１１−０２２３０３号（２０１１年２月４日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。【０００２】
本発明は、パケット処理装置、パケット処理方法およびプログラムに関し、特に、複数のプロセッサを用いてパケットの送受信を行うパケット処理装置、パケット処理方法およびプログラムに関する。
【背景技術】
【０００３】
インターネットトラフィックの増加に伴い、それを支えるパケット処理装置の高速化・高性能化が進んでいる。近年、高速なネットワークインタフェースカードの普及が進んでおり、汎用サーバでも当該ネットワークインタフェースカードを使用することで、パケット処理の高速化が可能となっている。一方、プロセッサの高クロック化による高速化は消費電力増大による限界が見えてきたため、マルチコア・マルチプロセッサ化による性能向上が進んでおり、パケット処理装置での対称型マルチプロセッサの利用も一般的になっている。【０００４】
Ｌｉｎｕｘ（登録商標）等の汎用ＯＳを利用してパケット処理装置を実現した場合、高速なネットワークカードを搭載していると、送受信におけるプロセッサ処理がボトルネックとなってしまい、ワイヤレートでの通信が困難になる。仮にマルチコアプロセッサを採用していても、ネットワークインタフェースカードからの割り込み先となった単一のプロセッサ（コア）にパケットの処理が集中することにより、ボトルネックが発生し、十分な負荷分散を行うことができないという問題がある。【０００５】
この問題を解決するために、特許文献１では、処理すべきパケットのヘッダ情報に基づいて、複数のプロセッサから、そのパケットを処理するプロセッサを一意的に決定している。具体的には、パケットのヘッダの一部のフィールドからハッシュ値を算出し、得られたハッシュ値についてプロセッサ数（コア数）によるモジュロ演算を行い、プロセッサ番号を求めている。そして、求めたプロセッサ番号のプロセッサに、該パケットの処理を行わせる。ここで、プロセッサ数（コア数）によるモジュロ演算を行っているため、当該演算により、プロセッサ番号が一意に求まる。すなわち、ハッシュ値から求めた剰余（すなわち、プロセッサ番号）が異なれば、処理するプロセッサも異なることとなり、パケットの処理を複数のプロセッサ（コア）間で分散することが可能となる。したがって、単一のプロセッサ（コア）による処理がボトルネックとなることなく、負荷分散を実現することができる。【０００６】
以下、プロセッサおよびプロセッサコアを、「プロセッサ」と総称する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００２―５３８７２４号公報
【非特許文献】
【０００８】
【非特許文献１】Ｎｉｃｋ  ＭｃＫｅｏｗｎほか７名，“ＯｐｅｎＦｌｏｗ：Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ，”［ｏｎｌｉｎｅ］，［平成２２年１２月１７日検索］，インターネット〈ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｗｐ−ｌａｔｅｓｔ．ｐｄｆ〉．
【非特許文献２】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖｅｒｓｉｏｎ  １．０．０．（Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ０１），”［平成２２年１２月１７日検索］，インターネット〈ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．０．０．ｐｄｆ〉．
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記の特許文献および非特許文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者によってなされたものである。【００１０】
特許文献１に記載のパケット処理装置においては、上記のとおり、パケットのヘッダの一部のフィールドに基づいて、パケットを処理するプロセッサを一意に決定している。そのため、当該ヘッダの一部のフィールドから算出されるハッシュ値が同じであれば、モジュロ演算から求まるプロセッサ番号は常に同一となり、当該パケットを処理するプロセッサが固定されてしまう。したがって、パケットの処理を実行するプロセッサを柔軟に選択することはできないという問題がある。【００１１】
そこで、複数のプロセッサを備えたパケット転送装置において、パケットの処理を実行するプロセッサを複数のプロセッサの中から柔軟かつ高速に選択できるようにすることが課題となる。本発明の目的は、かかる課題を解決するパケット処理装置、パケット処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の第１の視点に係るパケット処理装置は、
パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルと、
処理すべきパケットである対象パケットに格納された情報に対応するルールを、前記ルールテーブルから抽出するルール抽出部と、
抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行うルール適用部と、を備えている。【００１３】
本発明の第２の視点に係るパケット処理方法は、
複数のプロセッサのうちの一のプロセッサが、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルから、処理すべきパケットである対象パケットに格納された情報に対応するルールを抽出する工程と、
前記一のプロセッサが、抽出されたルール基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行う工程と、を含む。【００１４】
本発明の第３の視点に係るプログラムは、
パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルから、処理すべきパケットである対象パケットに格納された情報に対応するルールを抽出する処理と、
抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行う処理と、を複数のプロセッサのうちの一のプロセッサに実行させる。【００１５】
なお、プログラムは、非トランジエントなコンピュータ読み取り可能記録媒体（non-transient computer-readable storage medium）に記録されたプログラム製品として提供してもよい。
【発明の効果】
【００１６】
本発明に係るパケット処理装置、パケット処理方法およびプログラムによると、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールテーブルを備えるため、該ルールテーブルのプロセッサ識別子を設定することにより、パケットの処理を実行するプロセッサを複数のプロセッサの中から柔軟に選択することができる。【００１７】
また、本発明に係るパケット処理装置およびパケット処理方法によると、該ルールテーブルから抽出した、処理すべきパケットに対応するルールに基づき、該パケットに対する第１の処理の実行と、該パケットを処理するプロセッサの選択とを1つの処理として実行するため、パケットの処理を高速に行うことができる。
【図面の簡単な説明】
【００１８】
【図１】本発明に係るパケット処理装置の構成を概略的に示すブロック図である。
【図２】第１の実施形態に係るパケット処理装置の構成を示すブロック図である。
【図３】第１の実施形態に係るパケット処理装置におけるルールテーブルを示す図である。
【図４】第１の実施形態に係るパケット処理装置の動作を示すフローチャートである。
【図５】第２の実施形態に係るパケット処理装置の構成を示すブロック図である。
【図６】第２の実施形態に係るパケット処理装置におけるルールテーブルを示す図である。
【図７】第２の実施形態に係るパケット処理装置による送信処理を示すフローチャートである。
【図８】第２の実施形態に係るパケット処理装置による受信処理を示すフローチャートである。
【図９】第２の実施形態に係るパケット処理装置による受信処理を示すフローチャートである。
【図１０】第３の実施形態に係るパケット処理装置の構成を示すブロック図である。
【図１１】第３の実施形態に係るパケット処理装置におけるルールテーブルを示す図である。
【図１２】第４の実施形態に係るパケット処理装置の構成を示すブロック図である。
【図１３】オープンフローのフローテーブルのエントリを示す図である。
【図１４】オープンフローのアクションを示す図である。
【発明を実施するための形態】
【００１９】
はじめに、本発明の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００２０】
図１を参照すると、本発明のパケット処理装置は、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブル（１１０）と、処理すべきパケットである対象パケットに格納された情報に適合するルールを、ルールテーブル（１１０）から抽出するルール抽出部（１３０）と、抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する第２の処理を依頼するルール適用部（１４０）と、を備えている。
【００２１】
本発明のパケット処理装置は、パケットに対する照合条件とパケットを処理するプロセッサとを関連付けるルールを保持するルールテーブル（１１０）を備えている。したがって、ルールテーブル（１１０）のルールに対して、照合条件およびプロセッサの識別子を直接設定することで、パケットを処理するプロセッサを柔軟に選択することができ、特許文献１のように、同一のヘッダ情報を有するパケット群を処理するプロセッサが、所定の演算規則にしたがって一意に固定されることがなくなる。また、本発明のパケット処理装置によると、ユーザはルールテーブル（１１０）に格納されたルールを書き換えることで、パケットを処理するプロセッサ選択の規則を容易に変更することができる。
【００２２】
さらに、本発明のパケット処理装置におけるルールテーブル（１１０）のルールは、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付ける。したがって、ルール抽出部（１３０）によって、対象パケットに対応するルールが抽出されると、パケットに対して実行すべき第１の処理の内容が特定されるのみならず、該パケットに対する第２の処理を実行すべきプロセッサも特定される。したがって、本発明のパケット処理装置によると、パケットに対する処理を示す処理規則をテーブルの参照によって特定し、パケットに対する処理を実行するプロセッサを別途特定する場合と比較して、パケットの処理を高速に行うことができる。
【００２３】
以上より、本発明のパケット処理装置によると、複数のプロセッサを備えたパケット転送装置において、パケットの処理を実行するプロセッサを複数のプロセッサの中から柔軟かつ高速に選択することができる。
【００２４】
なお、本発明において、下記の形態が可能である。
【００２５】
［形態１］
上記第１の視点に係るパケット処理装置のとおりである。
【００２６】
［形態２］
前記第１の処理は、前記対象パケットを破棄すべきか否かを判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であってもよい。
【００２７】
［形態３］
前記ルール適用部は、前記第１の処理において前記対象パケットが破棄すべきパケットでない場合には、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼するようにしてもよい。
【００２８】
［形態４］
前記ルールテーブルは、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子、および、該パケットを含むフローを定義するフィールドを示すフロー定義フィールドを互いに関連付けるルールを保持し、
前記ルール適用部は、抽出されたルールに複数のプロセッサ識別子が含まれる場合には、前記フロー定義フィールドを参照し、該複数のプロセッサ識別子に相当する複数のプロセッサのうちのいずれかのプロセッサに対して、同一のフローに含まれるすべての対象パケットに対する前記第２の処理を依頼するようにしてもよい。
【００２９】
［形態５］
前記ルール抽出部は、前記ルールテーブルが前記対象パケットに格納された情報に対応するルールを保持していない場合には、前記ルールを設定可能なルール設定装置に該情報に適合するルールを設定するように依頼するようにしてもよい。
【００３０】
［形態６］
前記第１の処理は、前記対象パケットの宛先を判定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には前記対象パケットに対する上位レイヤの処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には前記対象パケットに対する下位レイヤの処理であってもよい。
【００３１】
［形態７］
前記ルール適用部は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合において、前記対象パケットの宛先が前記パケット処理装置である場合には、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼するようにしてもよい。
【００３２】
［形態８］
前記ルール抽出部は、抽出したルールを一時的に保持するキャッシュを有し、前記対象パケットに格納された情報に適合するルールを該キャッシュから抽出し、
前記ルール適用部は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合において、前記対象パケットに適合するルールが前記ルール抽出部により前記キャッシュから抽出されたときには、前記対象パケットに対する前記第２の処理を前記プロセッサに依頼するようにしてもよい。
【００３３】
［形態９］
前記第１の処理は、前記対象パケットを送受信する際のトランスポートレイヤにおける制御情報を特定する処理であり、
前記第２の処理は、前記対象パケットが前記パケット処理装置で受信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４の受信処理であり、前記対象パケットが前記パケット処理装置で送信すべきパケットである場合には、特定された制御情報を用いた前記対象パケットに対するレイヤ４以下の送信処理であってもよい。
【００３４】
［形態１０］
前記ルールテーブルは、優先度に応じてソートされた複数のルールを保持し、
前記ルール抽出部は、前記対象パケットに格納された情報に適合する複数のルールが前記ルールテーブルに格納されている場合には、該複数のルールのうちの優先度が高いものを抽出するようにしてもよい。
【００３５】
［形態１１］
前記ルールテーブルのルールは、パケットに格納された情報として、送信元アドレス、宛先アドレス、送信元ポート番号、および、宛先ポート番号のうちの少なくともいずれかを含んでいてもよい。
【００３６】
［形態１２］
前記ルールテーブルに対して、ルールの追加、変更、または、削除を行うルール設定部をさらに備えていてもよい。
【００３７】
［形態１３］
上記第２の視点に係るパケット処理方法のとおりである。
【００３８】
［形態１４］
また、パケットに格納された情報、該パケットに対する第１の処理を示す処理規則、および、該パケットに対する第２の処理を行うプロセッサを識別するプロセッサ識別子を互いに関連付けるルールを保持するルールテーブルから、処理すべきパケットである対象パケットに格納された情報に対応するルールを抽出する処理と、
抽出されたルールに基づいて、前記対象パケットに対する前記処理規則に従った前記第１の処理の実行と、前記プロセッサ識別子に相当するプロセッサに対する前記第２の処理の依頼とを行う処理と、を複数のプロセッサのうちの一のプロセッサに実行させるプログラムが提供される。
【００３９】
（実施形態１）
第１の実施形態に係るパケット処理装置について、図面を参照して説明する。図２は、本実施形態に係るパケット処理装置の構成を一例として示すブロック図である。図２を参照すると、本実施形態に係るパケット処理装置は、ルールテーブル１０、ルール設定部２０、ルール抽出部３０、ルール適用部４０、処理スレッド５０、送信受付部６０、および、受信受付部７０を備えている。
【００４０】
また、本実施形態のパケット処理装置は、複数のプロセッサ（またはプロセッサコア）に対応するＯＳを搭載しており、ネットワークインタフェースデバイスを介してネットワークと接続し、ＩＰパケットに代表されるパケットの処理および上位レイヤのプロトコル処理をソフトウェア（ＯＳを含む）で行うものである。すなわち、図２に示した構成要素は、それぞれ、ソフトウェアにより実現しうる。ただし、図２の構成要素の一部または全部をハードウェアにより実現してもよい。
【００４１】
ルールテーブル１０は、送受信パケットのフィルタリングの規則を記述したフィルタリングルールとプロセッサの割り当て規則を記述したディスパッチルールを保持する。フィルタリングルールおよびディスパッチルールは、単一のテーブルで管理する。
【００４２】
図３は、ルールテーブル１０を一例として示す図である。図３を参照すると、ルールテーブル１０は、受信・送信ごとに管理される。ルールテーブル１０の各行に相当する一つのルールは、少なくとも、照合条件、アクション、および、処理プロセッサ識別子を含む。また、ルールテーブル１０の各ルールは、フロー定義フィールドを含んでいてもよい。
【００４３】
照合条件は、パケットのＬ３レイヤ以上のヘッダのフィールドに関する条件式を表す。例えば、図３の第１行目のルールは、ＴＣＰプロトコルであり、宛先ポート番号が８０番であるパケットに関するルールであることを表す。照合条件として、図３に示したプロトコル番号およびポート番号のみならず、ＩＰアドレス、ＡＨヘッダ（Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｈｅａｄｅｒ）、ＥＳＰ（Ｅｎｃａｐｓｕｌａｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｐａｙｌｏａｄ）ヘッダにおけるＳＰＩ（Ｓｅｃｕｒｉｔｙ  Ｐａｒａｍｅｔｅｒ  Ｉｎｄｅｘ）値等のさまざまなフィールドに関する条件を記述しうる。
【００４４】
アクションは、送受信パケットに対する第１の処理（第１の処理、基本処理）を示す。アクションには、例えば、パケットの処理を続行するＡＣＣＥＰＴ、パケットを破棄するＤＲＯＰが用いられる。また、アクションとして、これら２つの処理以外に、パケットの一部のデータを書き換える処理などを記述してもよい。
【００４５】
処理プロセッサ識別子は、照合条件にマッチ（適合）したパケットの処理を行うプロセッサを表す。処理プロセッサ識別子には、０個以上のプロセッサ識別子を記述することができる。
【００４６】
フロー定義フィールドは、同一のフローか否かを識別するために使用するパケットのヘッダのフィールドを表す。フロー定義フィールドは、処理プロセッサ識別子に複数のプロセッサ識別子が記載されている場合において、同一のフローに属するパケットが同一のプロセッサで処理されるように、処理プロセッサ識別子に記載の中から１つのプロセッサを選択するために用いられる。
【００４７】
ルールテーブル１０中のルールは、優先度順に整列して管理することが好ましい。
【００４８】
ルール設定部２０は、ルールテーブル１０に対してルールの追加、変更、削除等のルールの設定を行う。ルール設定部２０は、例えば、ユーザアプリケーションとして動作し、ユーザ／カーネル間のメッセージ通信を行うことで、ルールを設定する。
【００４９】
ルール抽出部３０は、送受信パケットに格納された情報とルールテーブル１０の照合条件とを照合し、マッチするルールを検索する。ルール抽出部３０は、複数のルールがマッチした場合には、例えば、マッチするルールのうちの優先度の最も高いものを検索結果として返す。
【００５０】
ルール適用部４０は、基本適用部４０１およびディスパッチ部４０２を有する。ルール適用部４０は、ルールと送受信パケットを受け取ると、基本適用部４０１において第１の処理としてフィルタリングルールが適用され、ディスパッチ部４０２においてディスパッチルールが適用される。一方、フィルタリングルールの適用により処理が中止された場合には、ディスパッチ部４０２におけるディスパッチルールの適用を行わず、そのパケットの処理を終了する。
【００５１】
基本適用部４０１は、第１の処理として、ルールにおけるアクションに関する処理を行う。ルールのアクションがＤＲＯＰである場合には、基本適用部４０１は、送受信パケットを破棄する。一方、アクションがＡＣＣＥＰＴである場合に、ディスパッチ部４０２は、ルール中の処理プロセッサ識別子に応じて送受信パケットを処理する処理プロセッサを決定し、そのプロセッサに対応する処理スレッド５０に対してパケットの処理を依頼する。
【００５２】
処理スレッド５０は、プロセッサ毎に用意されるカーネルスレッドであり、パケットに対する第２の処理として、受信パケットのレイヤ３およびレイヤ４の受信処理、送信パケットのレイヤ３およびレイヤ２の送信処理を行う。処理スレッド５０は、受信処理部５０１および送信処理部５０２を備え、処理キュー（非図示）を保持する。処理キューには、パケットと処理区分（送信／受信）が格納される。処理スレッド５０は、処理キューに格納されたパケットを順次取り出し、処理区分が送信の場合には、送信処理部５０２による送信処理をパケットに対して行う。一方、処理区分が受信の場合には、処理スレッド５０は、受信処理部５０１による受信処理をパケットに対して行う。送信処理部５０２は、送信パケットに対してレイヤ３およびレイヤ２の送信処理を行い、パケットをネットワークに送出する。一方、受信処理部５０１は、受信パケットに対して、レイヤ３およびレイヤ４の受信処理を行い、必要に応じてユーザアプリケーションに受信パケットを渡す処理を行う。
【００５３】
送信受付部６０は、ユーザアプリケーションまたはカーネル内部からの送信パケットを受け取り、送信パケットをルール抽出部３０で照合し、照合結果として得られたルールと送信パケットをルール適用部４０に渡す。
【００５４】
受信受付部７０は、ネットワークからの受信パケットを受け取り、受信パケットをルール抽出部３０で照合し、照合結果として得られたルールと受信パケットをルール適用部４０に渡す。
【００５５】
次に、本実施形態に係るパケット処理装置の動作について、図面を参照して説明する。図４は、本実施形態に係るパケット処理装置の動作を一例として示すフローチャートである。
【００５６】
図４を参照すると、ネットワークからパケットが到着すると、受信受付部７０に受信パケットが渡される。受信パケットを受け取った受信受付部７０は、ルール抽出部３０によって受信パケットにマッチするルールをルールテーブル１０から検索し（ステップＳ１）、その結果を受信パケットと共にルール適用部４０に渡す。
【００５７】
次に、ルール適用部４０は、ルールと受信パケットを受け取ると、基本適用部４０１が、第１の処理としてアクションを適用する（ステップＳ２）。ルール中のアクションがＤＲＯＰである場合には（ステップＳ３のＮｏ）、基本適用部４０１は、受信パケットを破棄し（ステップＳ４）、その受信パケットの処理を完了する。
【００５８】
一方、アクションがＡＣＣＥＰＴである場合には（ステップＳ３のＹｅｓ）、ディスパッチ部４０２は、ルールの処理プロセッサ識別子に応じて処理プロセッサを選択する（ステップＳ５のＹｅｓ、Ｓ６）。一方、ルールに処理プロセッサ識別子が指定されていない場合には（ステップＳ５のＮｏ）、ディスパッチ部４０２は、現在処理を実行中のプロセッサ（すなわち、ディスパッチ部４０２の処理を実行しているプロセッサ自身）を処理プロセッサとして選択する（ステップＳ７）。
【００５９】
次に、ディスパッチ部４０２は、決定した処理プロセッサに対応する処理スレッド５０の処理キューに受信パケットの上位プロトコルの受信処理をキューイングすることで処理を依頼する（ステップＳ８）。依頼を受けた処理スレッド５０の受信処理部５０１は、パケットに対する第２の処理として、パケット受信処理（すなわち、受信パケットに対する上位レイヤの受信処理）を実行する。
【００６０】
ステップＳ６において、フロー定義フィールドを利用する場合、指定されたフィールドのハッシュ値をもとに、処理プロセッサ識別子で指定されたプロセッサの中から処理プロセッサを決定する。特に、フロー定義フィールドとして、同一のフローを識別することができるフィールドを選択することが好ましい。これにより、同一のフローに属するパケットが複数のプロセッサに分散することを防ぐことができ、排他制御およびパケットの整列によって生じるオーバーヘッドを軽減することができる。
【００６１】
パケットの送信処理では、パケット送信時に送信パケットに対してルール照合が行われ、依頼を受けた処理スレッドがパケットの送信処理を行う点を除いて同様の処理が行われる。したがって、パケット送信時の処理シーケンスについては、説明を省略する。
【００６２】
本実施形態では、フィルタリングルール（図３の照合条件とアクションとの組）を記載したルールテーブル１０に、送受信パケットの処理を行う処理プロセッサを決定するディスパッチルール（図３の照合条件と処理プロセッサ識別子およびフロー定義フィールドとの組）を併せて記載する。また、本実施形態によると、ルールテーブル１０へのルールをユーザ側から設定することができる。したがって、処理プロセッサを選択するためのルールを一元的に管理でき、ユーザのポリシーに基づいて柔軟なプロセッサ選択を行うことができる。さらに、パケットに対するフィルタリング処理とパケットに対する第２の処理を行う処理プロセッサの選択とを１つの処理として実行するため、該パケットに対する処理時間を削減することが可能である。
【００６３】
（実施形態２）
第２の実施形態に係るパケット処理装置について、図面を参照して説明する。図５は、本実施形態に係るパケット処理装置の構成を一例として示すブロック図である。図５を参照すると、本実施形態におけるパケット処理装置は、ルールテーブル１１、ルール設定部２１、ルール抽出部３１、ルール適用部４１、処理スレッド５０、送信受付部６１、および、受信受付部７１を備えている。
【００６４】
ルールテーブル１１は、送受信パケットの宛先アドレスから転送先を決定するための経路ルール、および、送信パケットの宛先アドレス又は受信パケットの送信元アドレスから処理プロセッサを決定するためのディスパッチルールを１つのテーブルとして保持する。
【００６５】
図６は、ルールテーブル１１を一例として示す図である。図６を参照すると、ルールテーブル１１は、ネットワークアドレス（アドレスとネットマスク）、転送先のゲートウェイ、出力インタフェース、および、処理プロセッサ識別子とを関連付けて保持する。ここで、ネットワークアドレス、転送先のゲートウェイ、および、出力インタフェースの対応関係は、経路ルールの適用で用いられる。また、ネットワークアドレスと処理プロセッサ識別子との対応関係は、ディスパッチルールの適用で用いられる。ディスパッチルールは、送信パケットでは宛先アドレスに対するルール、受信パケットでは送信元アドレスに対するルールとして解釈される。
【００６６】
ルール設定部２１は、ルールテーブル１１に対して経路ルールおよびディスパッチルールの追加、変更、削除等のルールの設定を行う。ルール設定部２１は、例えば、ユーザアプリケーションとして動作し、ユーザとカーネル間でメッセージ通信を行うことで、経路ルールを設定する。
【００６７】
ルール抽出部３１は、パケットに格納されたアドレスとルールテーブル１１のネットワークアドレスとを照合し、マッチするルールを検索する。ルール抽出部３１は、最近検索した検索結果の一部を保持し、高速に検索可能な経路キャッシュ（非図示）を備えていてもよい。
【００６８】
ルール適用部４１は、基本適用部４１１およびディスパッチ部４０２を有する。ルール適用部４１は、経路ルールと送受信パケットを受け取ると、基本適用部４１１は、第１の処理として経路ルールに従った処理を行う。具体的には、送信パケットに対しては、送信パケットが経路ルール中の出力先インタフェースからゲートウェイに対して送信されるように設定する。経路ルールから受信パケットが他ホスト宛のパケットであると判断された場合には、基本適用部４１１は、受信パケットの転送処理を行う。ディスパッチ部４０２の動作については、第１の実施形態と同様であるため、詳細な説明を省略する。
【００６９】
また、処理スレッド５０の動作についても、第１の実施形態と同様であるため、詳細な説明を省略する。
【００７０】
送信受付部６１は、ユーザアプリケーションまたはカーネル内部からの送信パケットを受け取り、送信パケットの宛先アドレスに対応するルールをルール抽出部３１で検索し、検索結果として得られたルールと送信パケットをルール適用部４１に渡す。
【００７１】
受信受付部７１は、ネットワークからの受信パケットを受け取り、ルール抽出部３１において、受信パケットの宛先アドレスから経路ルールを、送信元アドレスからディスパッチルールをそれぞれ検索し、前記検索した経路ルールとディスパッチルール、及び受信パケットをルール適用部４１に渡す。ルール抽出部３１が経路キャッシュを備えている場合には、ディスパッチルールの検索を、経路キャッシュを用いて行うようにしてもよい。
【００７２】
次に、本実施形態に係るパケット処理装置の動作について、図面を参照して説明する。図７は、本実施形態に係るパケット処理装置による送信処理を一例として示すフローチャートである。
【００７３】
図７を参照すると、アプリケーションまたはカーネル内部からパケットが到着すると、送信受付部６１に送信パケットが渡される。送信パケットを受け取った送信受付部６１は、ルール抽出部３１によって、送信パケットの宛先アドレスとマッチするルールをルールテーブル１１から検索する（ステップＳ１１）。ルール抽出部３１が経路キャッシュを備えている場合には、検索結果を経路キャッシュに保持することで以降の検索を高速化することができる。送信受付部６１は、ルールの検索結果を送信パケットとともにルール適用部４１に渡す。
【００７４】
次に、ルール適用部４１は、検索されたルールと送信パケットを受け取ると、基本適用部４１１が、該ルールに基づき、第１の処理として、送信パケットに対して出力インタフェースを設定する（ステップＳ１２）。対応する経路ルールがない場合には、基本適用部４１１は、送信パケットを破棄し、送信処理を完了する。
【００７５】
一方、ディスパッチ部４０２は、ルールの処理プロセッサ識別子に応じて処理プロセッサを選択する（ステップＳ１３のＹｅｓ、Ｓ１４）。また、ディスパッチルールで処理プロセッサ識別子が指定されていない場合には（ステップＳ１３のＮｏ）、ディスパッチ部４０２は、現在処理を実行中のプロセッサ（すなわち、ディスパッチ部４０２の処理を実行しているプロセッサ自身）を処理プロセッサとして選択する（ステップＳ１５）。
【００７６】
そして、ディスパッチ部４０２は、決定した処理プロセッサに対応する処理スレッド５０の処理キューに、送信パケットの上位プロトコルの送信処理をキューイングすることで処理を依頼する（ステップＳ１６）。依頼を受けた処理スレッド５０の送信処理部５０２は、パケットに対する第２の処理としてパケットの送信処理（パケットに対する下位レイヤの送信処理）を実行する。
【００７７】
図８は、ルール抽出部３１が経路キャッシュを備えていない場合における、本実施形態に係るパケット処理装置による受信処理を一例として示すフローチャートである。ネットワークから受信パケットが到着すると、受信受付部７１はルール抽出部３１によって、受信パケットの宛先アドレスとマッチするルールをルールテーブル１１から検索する（ステップＳ２１）。
【００７８】
検索結果からパケット処理装置自身宛のパケットではないと判断された場合には（ステップＳ２２のＮｏ）、ルール適用部４１の基本適用部４１１は、受信パケットを転送して処理を終了する（ステップＳ２３）。一方、パケット処理装置自身宛のパケットと判断された場合には（ステップＳ２２のＹｅｓ）、受信受付部７１は、ルール抽出部３１を用いて、受信パケットの送信元アドレスに対応するディスパッチルールをルールテーブル１１から検索する（ステップＳ２４）。
【００７９】
ディスパッチ部４０２は、ルールの処理プロセッサ識別子に応じて処理プロセッサを選択する（ステップＳ２５のＹｅｓ、Ｓ２６）。一方、ルールに処理プロセッサ識別子が指定されていない場合には（ステップＳ２５のＮｏ）、現在処理を実行中のプロセッサ（すなわち、ディスパッチ部４０２の処理を実行しているプロセッサ自身）を処理プロセッサとして選択する（ステップＳ２７）。
【００８０】
そして、ディスパッチ部４０２は、選択された処理プロセッサに対応する処理スレッド５０の処理キューに、受信パケットの上位プロトコルの受信処理をキューイングすることで処理を依頼する（ステップＳ２８）。依頼を受けた処理スレッド５０の受信処理部５０１は、パケットに対する第２の処理としてパケットの受信処理を実行する。
【００８１】
図９は、ルール抽出部３１が経路キャッシュを備えている場合における、本実施形態に係るパケット処理装置による受信処理を一例として示すフローチャートである。図９において、ステップＳ２１からＳ２３およびステップＳ２５からＳ２８に関しては、ルール抽出部３１が経路キャッシュを備えていない場合（図８）と同様であるため、詳細な説明を省略する。図９は、図８のステップＳ２４の代わりに、ステップＳ２９およびステップＳ３０を含む点で、図８と相違する。
【００８２】
ルール抽出部３１が経路キャッシュを備えている場合には、受信受付部７１は、経路キャッシュを利用して、ディスパッチルールを検索する（ステップＳ２９）。
【００８３】
経路キャッシュにマッチするルールが保持されていない場合には（ステップＳ３０のＮｏ）、プロセッサ識別子が指定されていないものとみなして、処理が行われる。このように、高速に検索を可能な経路キャッシュにルールが保持されている場合に（ステップＳ３０のＹｅｓ）、ディスパッチルールを利用する（ステップＳ２５〜Ｓ２７）ことにより、検索に要する時間を削減することができる。
【００８４】
経路キャッシュは、送信処理における経路検索で更新される（図７のステップＳ１１）。したがって、定期的に送信が行われているアドレスからの受信パケットであれば、経路キャッシュにマッチするルールが保持されるため（図９のステップＳ３０のＹｅｓ）、ディスパッチルールに基づくプロセッサの選択（図９のステップＳ２５〜Ｓ２７）が可能となる。
【００８５】
本実施形態では、図６に示すように、ルールテーブル１１に処理プロセッサを決定するディスパッチルールを設定する。第１の実施形態におけるフィルタリング処理は、パケット処理において常に必要とされるわけではない。一方、経路の検索処理は、パケットの処理に不可欠である。したがって、本実施形態に係るパケット処理装置は、フィルタリング処理を行わない場合のパケット転送にも適用することができ、ルールテーブル１１へのルールをユーザ側から設定することにより、柔軟なプロセッサ選択を行うことが可能である。また、本実施形態に係るパケット処理装置による送信処理では、送信パケットに対して出力インタフェースを設定する処理と、該送信パケットに対する第２の処理を行うプロセッサを選択する処理とを、１つの処理として実行するため、該送信パケットに対する処理時間を削減することができる。
【００８６】
（実施形態３）
第３の実施形態に係るパケット処理装置について、図面を参照して説明する。図１０は、本実施形態に係るパケット処理装置の構成を一例として示すブロック図である。図１０を参照すると、本実施形態に係るパケット処理装置は、ルールテーブル１２、ユーザアプリケーション２２、ルール抽出部３２、ルール適用部４２、処理スレッド５２、送信受付部６２、および、受信受付部７２を備えている。
【００８７】
ルールテーブル１２は、アドレスとポート番号とソケットの対応関係を保持する。ここで、ソケットは、ＴＣＰ、ＵＤＰ等に代表されるトランスポートレイヤの接続情報に関する制御データと、該制御データと関連付けられた処理プロセッサ識別子とを保持する。
【００８８】
図１１は、本実施形態に係るパケット処理装置におけるルールテーブル１２を一例として示す図である。図１１を参照すると、ルールテーブル１２は、ソケットとして、プロトコル処理に必要な制御データ以外に、処理プロセッサ識別子を含む。
【００８９】
ユーザアプリケーション２２は、ソケットを特定するためのファイル記述子をもち、ファイル記述子を利用してシステムコール（例えば、ｓｅｔｓｏｃｋｏｐｔ）を利用し、ソケットの処理プロセッサ識別子を設定することができる。また、ユーザアプリケーション２２は、ファイル記述子を指定し、ｒｅａｄおよびｗｒｉｔｅシステムコールにより、特定のソケット（コネクション）を利用したデータの送受信を行うことができる。
【００９０】
ルール抽出部３２は、パケットに格納されている送信元のアドレスとポート番号、および、送信先のアドレスとポート番号の４つ組から、トランスポートレイヤの制御情報を表すソケットを特定する。
【００９１】
ルール適用部４２は、基本適用部４２１およびディスパッチ部４２２を有する。ルール適用部４２は、送信受付部６２または受信受付部７２から送信パケットまたは受信パケットとソケットを受け取ると、基本適用部４２１は、第１の処理として、送信パケットまたは受信パケットがソケットに保持されるトランスポートレイヤの制御情報を利用して、送信または受信の設定を行う。また、ディスパッチ部４２２は、ソケットに保持されるプロセッサ識別子に応じてプロセッサを選択し、対応する処理スレッド５２に、第２の処理として、送信パケットまたは受信パケットの送信処理または受信処理を行うように依頼する。
【００９２】
処理スレッド５２は、第１の実施形態における処理スレッド５０と同様に、プロセッサ毎に用意されるカーネルスレッドである。ただし、本実施形態では、受信処理部５２１が受信パケットに対するレイヤ４の受信処理を行い、送信処理部５２２が送信パケットに対するレイヤ４以下の送信処理を行う点において、第１の実施形態と相違する。受信処理部５２１は、最終的に、受信パケットをユーザアプリケーション２２に届ける。
【００９３】
送信受付部６２は、ユーザアプリケーション２２からファイル記述子と送信パケットを受け取る。送信受付部６２は、ファイル記述子と送信パケットを受け取ると、それが示すソケットを特定し、ルール適用部４２に渡す。
【００９４】
受信受付部７２は、ネットワークから受信パケットを受け取り、そのアドレスおよびポート番号でルールテーブル１２を検索する。また、受信受付部７２は、検索結果のソケットと受信パケットをルール適用部４２に渡す。
【００９５】
次に、本実施形態に係るパケット処理装置による送受信処理について説明する。
【００９６】
送信処理の動作は、次のとおりである。まず、ユーザアプリケーション２２はソケットを識別するためのファイル記述子と送信パケットを引数として、ｓｅｎｄシステムコールを呼び出す。ｓｅｎｄシステムコールにより、ファイル記述子と送信パケットを受け取ると、送信受付部６２は、ファイル記述子からソケットを特定する。次に、ルール適用部４２の基本適用部４２１は、第１の処理として、特定されたソケットに保持されるトランスポートレイヤの制御情報を用いて、送信パケットに対する送信の設定を行う。また、ディスパッチ部４２２は、ソケットに保持されるプロセッサ識別子から対応する処理スレッド５２を選択し、第２の処理として送信パケットの送信処理を依頼する。
【００９７】
一方、受信処理の動作は、次のとおりである。ネットワークから受信パケットが到着すると、受信受付部７２は、受信パケットのアドレスおよびポート番号をもとに、ルールテーブル１２から対応するソケットを特定する。次に、ルール適用部４２の基本適用部４２１は、第１の処理として、特定されたソケットに保持されるトランスポートレイヤの制御情報を用いて、受信パケットの受信処理の設定を行う。また、ディスパッチ部４２２は、ソケットに保持されるプロセッサ識別子から対応する処理スレッド５２を選択し、第２の処理として受信パケットの受信処理を依頼する。
【００９８】
本実施形態に係るパケット処理装置によると、ソケットが、トランスポートレイヤの接続情報に関する制御データと処理プロセッサとを関連付けて保持することにより、送信又は受信パケットに対する送信又は受信の設定と、該送信又は受信パケットに対する第２の処理を行うプロセッサの選択とを、１つの処理として実行するため、該送信又は受信パケットに対する処理時間を削減することができる。また、ｓｅｔｓｏｃｋｏｐｔ等の既存のシステムコールを利用することにより、ユーザアプリケーション２２が容易に第２の処理を行うプロセッサの設定を行うことができ、柔軟なプロセッサ選択を行うことが可能である。
【００９９】
（実施形態４）
本発明の第４の実施形態に係るパケット処理装置について、図面を参照して説明する。図１２は、本実施形態に係るパケット処理装置の構成を一例として示すブロック図である。図１２を参照すると、本実形態に係るパケット処理装置は、ルールテーブル１３、ルール抽出部３３、ルール適用部４０、処理スレッド５０、送信受付部６０、および、受信受付部７０を備えている。図１２に示した本実施形態の構成要素のうち、図２と同一の符号を付したものの動作は、第１の実施形態における構成要素の動作と同一であることから、説明を省略する。
【０１００】
ルールテーブル１３は、パケット処理装置の外部に設けられたルール設定装置２３により、ルールが設定される。ルールテーブル１３およびルール設定装置２３に対して、一例として、非特許文献１に記載されているオープンフロー（ＯｐｅｎＦｌｏｗ）技術を採用することができる。
【０１０１】
オープンフローは、通信をエンドツーエンドのフローとして捉え、フロー単位で経路制御、障害回復、負荷分散、最適化を行うものである。転送ノードとして機能するオープンフロースイッチ（ＯＦＳ：ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）は、制御サーバに位置付けられるオープンフローコントローラ（ＯＦＣ：ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）との通信用のセキュアチャネルを備え、オープンフローコントローラから適宜追加または書き換え指示されるフローテーブルに従って動作する。
【０１０２】
本実施形態におけるパケット処理装置、ルール設定装置２３、ルールテーブル１３、および、ルールテーブル１３に格納されたルールは、それぞれ、オープンフローにおけるオープンフロースイッチ、オープンフローコントローラ、フローテーブル、および、フローテーブルのエントリに相当する。
【０１０３】
図１３は、オープンフローのフローテーブルのエントリを一例として示す図である。図１３を参照すると、フローテーブルには、フロー毎に、パケットヘッダと照合する照合条件と、処理内容を定義したアクション（ａｃｔｉｏｎｓ）と、フロー統計情報（ｓｔａｔｓ）との組が定義される。
【０１０４】
図１４は、非特許文献２に定義されているアクション名とアクションの内容を一例として示す表である。ＯＵＴＰＵＴは、指定ポート（インタフェース）に出力するアクションである。ＳＥＴ＿ＶＬＡＮ＿ＶＩＤからＳＥＴ＿ＴＰ＿ＤＳＴは、パケットヘッダのフィールドを修正するアクションである。
【０１０５】
オープンフロースイッチは、パケットを受信すると、フローテーブル（図１３）から、受信パケットのヘッダ情報に適合する照合条件（ＦｌｏｗＫｅｙ）を持つエントリを検索する。検索の結果、受信パケットに適合するエントリが見つかった場合、オープンフロースイッチは、受信パケットに対して、当該エントリのアクションフィールドに記述された処理内容を実施する。一方、検索の結果、受信パケットに適合するエントリが見つからなかった場合、オープンフロースイッチは、セキュアチャネルを介して、オープンフローコントローラに対して受信パケットを転送し、受信パケットの送信元・送信先に基づいたパケットの経路の決定を依頼し、これを実現するフローエントリを受け取ってフローテーブルを更新する。このように、オープンフロースイッチは、フローテーブルに格納されたエントリを処理規則として用いてパケットを転送する。
【０１０６】
本実施形態のルールテーブル１３（図１２）は、図１３に示すように、照合条件フィールドおよびアクション（ａｃｔｉｏｎｓ）フィールドを有する。また、照合条件フィールドには、第１の実施形態におけるルールテーブル１０（図３）と同様に、照合条件が格納される。さらに、アクションフィールドには、第１の実施形態におけるルールテーブル１０（図３）と同様に、アクションおよび処理プロセッサ識別子が格納される。
【０１０７】
ルール抽出部３３は、ルールテーブル１３を参照し、処理対象のパケットに適合するルールがルールテーブル１３に存在しない場合には、オープンフローコントローラに相当するルール設定装置２３に問い合わせる。ルール設定装置２３は、ルール抽出部１３から問い合わせを受けると、アクションと処理プロセッサ識別子と関連付けたルールをルールテーブル１０のルールとして設定する。
【０１０８】
本実施形態のように、複数のプロセッサを備えたパケット処理装置をオープンフローのオープンフロースイッチとして利用することで、各オープンフロースイッチは複数のプロセッサの中からパケットの処理を実行するプロセッサを柔軟かつ高速に選択することができる。
【０１０９】
本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１１０】
１０〜１３，１１０    ルールテーブル
２０、２１    ルール設定部
２２    ユーザアプリケーション
２３    ルール設定装置
３０〜３３，１３０    ルール抽出部
４０，４１，４２，１４０    ルール適用部
４０１，４１１，４２１    基本適用部
４０２，４２２    ディスパッチ部
５０，５２    処理スレッド
５０１，５２１    受信処理部
５０２，５２２    送信処理部
６０〜６２    送信受付部
７０〜７２    受信受付部
【図１】
2012105677.tif 000003
【図２】
2012105677.tif 000004
【図３】
2012105677.tif 000005
【図４】
2012105677.tif 000006
【図５】
2012105677.tif 000007
【図６】
2012105677.tif 000008
【図７】
2012105677.tif 000009
【図８】
2012105677.tif 000010
【図９】
2012105677.tif 000011
【図１０】
2012105677.tif 000012
【図１１】
2012105677.tif 000013
【図１２】
2012105677.tif 000014
【図１３】
2012105677.tif 000015
【図１４】
2012105677.tif 000016
【国際調査報告】
2012105677.tif 000017
2012105677.tif 000018
2012105677.tif 000019