(57)【特許請求の範囲】
【請求項１】
各々がそれぞれに対応するフローに対して通信処理を実行する複数の通信プロセスを備え、
前記通信プロセスは、受信したパケットのヘッダフィールド情報と、ヘッダフィールド情報に対応する処理を規定したフローエントリと照合し、照合結果に基づいて前記パケットを処理するスイッチプロセスであり、
前記複数のスイッチプロセスの各々は、前記スイッチプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
各々がネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記複数のネットワークインタフェースと前記複数のスイッチプロセスとの間に配置され、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する前記スイッチプロセスにディスパッチするディスパッチャと、
を備え、
前記ディスパッチャは、前記スイッチプロセスから受信したパケットを対応する前記ネットワークインタフェースから前記ネットワークに出力する、通信装置。
【請求項２】
前記ネットワークインタフェースから受信したパケットのヘッダフィールド情報が示すフローに対するディスパッチルールが存在しない場合、前記フローに対するディスパッチルールの問い合わせを、前記通信装置を制御するコントローラに送信する送信部と、
前記コントローラから送信された、前記フローに対するディスパッチルールを受け取ると、隔離された環境を作り、前記隔離された環境内に前記フローに関連するスイッチプロセスを起動し、前記コントローラに応答を送る制御部と、
を備え、
前記スイッチプロセスは、前記コントローラから前記フローを処理するためのルールであるフローエントリを受信すると、前記フローエントリに基づいて前記フローに関連する１つまたは複数のパケットを処理する請求項１に記載の通信装置。
【請求項３】
前記通信プロセスは、
暗号文の復号時に測定されたシステムインテグリティが、平文の暗号化時に測定されたシステムインテグリティと同一であると判断した場合に、前記暗号文の平文への復号を可能にする制御を行うインテグリティ制御部を備えた請求項１又は２に記載の通信装置。
【請求項４】
通信装置を制御するコントローラ内の関連するコントローラプロセスと通信を行う複数の管理プロセスを備え、
前記複数の管理プロセスの各々は、前記管理プロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数の管理プロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
各々がネットワークに接続されるように構成された複数のネットワークインタフェースと、
ディスパッチャと、
前記複数のネットワークインタフェースと前記ディスパッチャとの間に配置され、フローを処理するためのフローエントリに従ってパケット処理を行うパケット処理部と、
を備え、
前記管理プロセスは、前記パケット処理部へのフローエントリの受信と削除を行い、
前記ディスパッチャは、前記パケット処理部と前記複数の管理プロセスとの間に配置され、前記フローエントリの追加、削除を監視し、
前記パケット処理部は、前記フローエントリと一致しないパケットを受信すると、前記ディスパッチャに不一致を通知し、
前記ディスパッチャは、前記不一致の通知に含まれる前記パケットのヘッダフィールド情報に一致するディスパッチルールに従って対応する前記管理プロセスに前記不一致を通知する、通信装置。
【請求項５】
各々がそれぞれに対応するフローに対して通信処理を実行する複数の通信プロセスを備え、
前記通信プロセスは、
スイッチからのメッセージを受信すると、フローのパス上の各スイッチに適用される前記フローを処理するためのルールであるフローエントリを生成し、生成した前記フローエントリを前記パス上の各スイッチに送信するコントローラプロセスであり、
前記ルールは、前記スイッチが受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、一致したパケットの前記スイッチによる取り扱いを規定するアクションフィールドとを含み、
前記複数のコントローラプロセスの各々は、前記コントローラプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のコントローラプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
前記複数のスイッチからのメッセージをそれぞれ入力する複数のポートを有し、スイッチと、前記スイッチのメッセージがディスパッチされるコントローラプロセスとの関連付けを定義するディスパッチルールに基づいて、前記スイッチからのメッセージを、関連する前記コントローラプロセスにディスパッチするディスパッチャと、
を備えた通信装置。
【請求項６】
前記通信プロセスから前記複数の通信プロセスで共有される共有リソースへのアクセスを制御するアクセス制御モジュールを備えた請求項１、２、３、５のいずれか１項に記載の通信装置。
【請求項７】
各々がそれぞれに対応するフローに対してスイッチ処理を実行する複数のスイッチプロセスを備え、
前記スイッチプロセスは、受信したパケットのヘッダフィールド情報と、ヘッダフィールド情報に対応する処理を規定したフローエントリと照合し、照合結果に基づいて前記パケットを処理し、
前記複数のスイッチプロセスの各々は、前記スイッチプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
各々がネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記複数のネットワークインタフェースと前記複数のスイッチプロセスとの間に配置され、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する前記スイッチプロセスにディスパッチするディスパッチャと、
を備え、
前記ディスパッチャは、前記スイッチプロセスから受信したパケットを対応する前記ネットワークインタフェースから前記ネットワークに出力する、スイッチ装置。
【請求項８】
各々が１つまたは複数の関連するスイッチプロセスを制御する複数のコントローラプロセスを備え、
前記複数のコントローラプロセスの各々は、前記コントローラプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のコントローラプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
前記コントローラプロセスは、スイッチからのメッセージを受信すると、フローのパス上の各スイッチに適用される前記フローを処理するためのルールであるフローエントリを生成し、生成した前記フローエントリを前記パス上の各スイッチに送信し、
さらに、
前記複数のスイッチからのメッセージをそれぞれ入力する複数のポートを有し、スイッチと、前記スイッチからのメッセージがディスパッチされるコントローラプロセスとの関連付けを定義するディスパッチルールに基づいて、前記スイッチからのメッセージを、関連するコントローラプロセスにディスパッチするディスパッチャと、
を備えたコントローラ装置。
【請求項９】
スイッチと、
前記スイッチを制御するコントローラと、
を備え、
前記スイッチは、
各々がそれぞれに対応するフローに対してスイッチ処理を実行する複数のスイッチプロセスを備え、
前記スイッチプロセスは、受信したパケットのヘッダフィールド情報と、ヘッダフィールド情報に対応する処理を規定したフローエントリと照合し、照合結果に基づいて前記パケットを処理し、
前記複数のスイッチプロセスの各々は、前記スイッチプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
ネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記複数のネットワークインタフェースと前記複数のスイッチプロセスとの間に配置され、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する前記スイッチプロセスにディスパッチするディスパッチャと、
を備え、
前記ディスパッチャは、前記スイッチプロセスから受信したパケットを対応する前記ネットワークインタフェースから前記ネットワークに出力する通信システム。
【請求項１０】
前記スイッチは、
前記ネットワークインタフェースと前記ディスパッチャとの間に配置され、フローを扱うためのルールに従ってパケット処理を行うパケット処理部を備え、
前記ディスパッチャは、フローを扱うための前記ルールを監視する請求項９に記載の通信システム。
【請求項１１】
前記コントローラは、
各々が１つまたは複数の関連するスイッチプロセスを制御する複数のコントローラプロセスを備え、
前記複数のコントローラプロセスの各々は、前記コントローラプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のコントローラプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
前記スイッチと、前記スイッチからのメッセージがディスパッチされるコントローラプロセスとの関連付けを定義するディスパッチルールに基づいて、前記スイッチからのメッセージを、関連するコントローラプロセスにディスパッチする第１のディスパッチャを備えた請求項９又は１０に記載の通信システム。
【請求項１２】
前記コントローラは、
前記第１のディスパッチャと前記コントローラプロセスとの間の第１のインタフェースを備え、
前記メッセージは前記第１のインタフェースを介して前記コントローラプロセスにディスパッチされ、前記第１のインタフェースと前記コントローラプロセスは共通に前記隔離された環境に配置され、さらに、
アプリケーションと、前記アプリケーションからのメッセージがディスパッチされるコントローラプロセスとの関連付けを定義する第２ディスパッチルールに基づいて、アプリケーションまたは上位レイヤからのメッセージを関連するコントローラプロセスにディスパッチする第２のディスパッチャと、
前記第２のディスパッチャと前記コントローラプロセスとの間の第２のインタフェースと、
を含み、
前記アプリケーションからの前記メッセージは、前記第２のインタフェースを介して前記コントローラプロセスにディスパッチされ、前記第２のインタフェースと前記コントローラプロセスは共通に前記隔離された環境に配置される請求項１１に記載の通信システム。
【請求項１３】
前記コントローラは、
前記スイッチプロセスからの予め定められたメッセージを受信すると、前記フローのパス上の各スイッチプロセスに適用されるフローを取り扱うためのルールを生成し、
前記ルールは、前記スイッチプロセスで受信されたパケットのパケットフィールド情報と照合されるマッチフィールドと、一致したパケットの前記スイッチプロセスによる取扱いを規定するアクションフィールドと、
を含み、
前記ルールを前記フローの前記パス上の各スイッチプロセスに送信する送信部を備えた請求項１１又は１２に記載の通信システム。
【請求項１４】
前記コントローラは、
前記ネットワークインタフェースから受信したパケットのヘッダフィールド情報が示すフローのディスパッチルールが前記スイッチに存在しない場合に、前記スイッチから送信されたクエリを受信すると、前記フローのディスパッチルールを作成するディスパッチルール生成部と、
前記フローの前記ディスパッチルールを前記スイッチに送信する送信部と、を備えた請求項１１乃至１３のいずれか１項に記載の通信システム。
【請求項１５】
前記スイッチの前記ディスパッチャが、前記ネットワークインタフェースからパケットを受信し、
受信したパケットのヘッダフィールド情報によって示されるフローが前記ディスパッチルールに登録されていないことを発見すると、前記スイッチは、前記フローのディスパッチルールの問い合わせを前記コントローラに送信し、
前記コントローラは、前記スイッチから問い合わせを受信すると、前記フローのディスパッチルールを作成して前記ディスパッチルールを前記スイッチに送信し、
前記スイッチは、前記コントローラから送信された前記ディスパッチルールを受信すると、隔離された環境を作成し、必要に応じて隔離された環境内でスイッチプロセスを呼び出し、前記コントローラに応答を送信し、
前記コントローラは、前記スイッチから前記応答を受信すると、パケットのヘッダフィールド情報と照合されるマッチフィールドと、一致するパケットの取り扱いを指示するアクションフィールドとを含むルールを作成し、前記ルールを、前記隔離された環境で起動された前記スイッチプロセスに送信し、
前記スイッチプロセスは、前記コントローラから前記フローの前記ルールを受信すると、前記ルールに基づいて、前記フローに関連付けられる１つまたは複数のパケットを処理する請求項９に記載の通信システム。
【請求項１６】
前記スイッチプロセスおよび前記コントローラプロセスの少なくとも一方は、
暗号文の復号時に測定されたシステムインテグリティが、平文の暗号化時に測定されたシステムインテグリティであると判断した場合に、前記暗号文の平文への復号を可能にする制御を行うインテグリティ制御部を備えた請求項１１に記載の通信システム。
【請求項１７】
前記コントローラに含まれる前記第１のディスパッチャは、第１のディスパッチルールとして、テナント情報を用いて、スイッチプロセスから関連するコントローラプロセスへのディスパッチを実行する、請求項１１乃至１４のいずれか１項に記載の通信システム。
【請求項１８】
フローと、前記フローがディスパッチされるスイッチプロセスとの関連付けを定義するディスパッチルールに基づいて、スイッチのディスパッチャにそれぞれ入力された各フローのパケットを、前記スイッチに含まれる関連するスイッチプロセスにディスパッチし、
前記スイッチに含まれる複数のスイッチプロセスのうち前記関連するスイッチプロセスは、受信したパケットのヘッダフィールド情報と、ヘッダフィールド情報に対応する処理を規定したフローエントリと照合し、照合結果に基づいて前記パケットを処理し、
前記ディスパッチャは、前記スイッチプロセスからのパケットを対応するネットワークに出力し、
各スイッチプロセスは、前記スイッチプロセスごとに割り当てられた環境で実行され、
各スイッチプロセスに配置される前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置される１つ又は複数の環境の各々から隔離されている、通信方法。
【請求項１９】
前記スイッチプロセスからメッセージを受信したコントローラでは、前記メッセージを、前記スイッチプロセスと前記スイッチプロセスからのメッセージがディスパッチされるコントローラプロセスとの関連付けを規定するディスパッチルールに基づいて、関連するコントローラプロセスにディスパッチし、
前記コントローラに含まれる複数のコントローラプロセスのうち前記関連するコントローラプロセスは、前記メッセージに基づき、前記スイッチプロセスに対して制御処理を実行し、
前記コントローラプロセスの各々は、前記コントローラプロセスごとに割り当てられた環境で実行され、一つのコントローラプロセスに配置される前記環境は、他の１つ又は複数のコントローラプロセスに対して配置される１つ又は複数の環境の各々から隔離されている、請求項１８に記載の通信方法。
【請求項２０】
前記スイッチは、受信したパケットをディスパッチするにあたり、前記受信したパケットのヘッダフィールド情報が示すフローがディスパッチルールに登録されていないと判断した場合に、
前記フローのディスパッチルールの問い合わせを前記コントローラに送信し、
前記コントローラは、前記スイッチから問い合わせを受信すると、前記フローのディスパッチルールを作成し、前記ディスパッチルールを前記スイッチに送信し、
前記スイッチは、前記コントローラから送信された前記ディスパッチルールを受信すると、隔離された環境を作成し、必要に応じて前記隔離された環境でスイッチプロセスを起動し、前記コントローラに応答を送信し、
前記コントローラは、前記スイッチから前記応答を受信すると、フローを扱うためのルールを作成し、前記ルールを、前記隔離された環境で起動されたスイッチプロセスに送信し、
前記ルールは、パケットのヘッダフィールド情報と照合されるマッチフィールドと、一致するパケットの取り扱いを規定するアクションフィールドとを含み、
前記スイッチは、前記コントローラから前記フローに対するルールを受信すると、前記ルールに基づいて、前記フローに関連する１つまたは複数のパケットを処理する請求項１９に記載の通信方法。
【請求項２１】
前記スイッチプロセスおよび前記コントローラプロセスのうちの少なくとも１つは、インテグリティの測定を行い、インテグリティ制御部で、暗号文の復号時に測定されたシステムインテグリティが、平文の暗号化時に測定されたシステムインテグリティと同一であると判断した場合に、前記暗号文の平文への復号を可能にする制御を行う請求項１９に記載の通信方法。
【請求項２２】
各々が、それぞれに対応するフローに対して通信処理を実行する複数のスイッチプロセスと、
前記スイッチプロセスは、受信したパケットのヘッダフィールド情報と、ヘッダフィールド情報に対応する処理を規定したフローエントリと照合し、照合結果に基づいて前記パケットを処理し、
前記複数のスイッチプロセスの各々は、前記スイッチプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
さらに、
各々がネットワークに接続されるように構成された複数のネットワークインタフェースと前記複数のスイッチプロセスとの間に配置され、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する前記スイッチプロセスにディスパッチし、前記スイッチプロセスから受信したパケットを対応する前記ネットワークインタフェースから前記ネットワークに出力するディスパッチプロセスと、
をコンピュータに実行させるプログラム。
【請求項２３】
各々が１つまたは複数の関連するスイッチプロセスを制御する複数のコントローラプロセスと、
前記複数のコントローラプロセスの各々は、前記コントローラプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のコントローラプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、
前記コントローラプロセスは、スイッチからのメッセージを受信すると、フローのパス上の各スイッチに適用される前記フローを処理するためのルールであるフローエントリを生成し、生成した前記フローエントリを前記パス上の各スイッチに送信し、
さらに、
前記複数のスイッチからのメッセージをそれぞれ入力する複数のポートを有し、スイッチと、前記スイッチからのメッセージがディスパッチされるコントローラプロセスとの関連付けを定義するディスパッチルールに基づいて、前記スイッチからのメッセージを、関連するコントローラプロセスにディスパッチするディスパッチプロセスと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、システム、方法、及びコンピュータプログラムに関する。
【背景技術】
【０００２】
ソフトウェアに基づいてネットワークの構成、機能、又は性能を動的に設定又は変更することができるＳＤＮ(Software Designed Networks)の一例であるＯｐｅｎＦｌｏｗの概要を以下に説明する。ＯｐｅｎＦｌｏｗスイッチは１つ又は複数のフローエントリを含むフローテーブルを含む。各フローエントリは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数及び受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダフィールド情報がマッチフィールドと一致する受信パケットをスイッチがどのように取り扱うかを指示するアクションを０又はそれ以上含むアクションフィールドと、を含む。ＯｐｅｎＦｌｏｗスイッチは、パケットを受信すると、そのパケットのヘッダフィールド情報を用いてフローテーブルを検索する。ミスヒット（不一致）の場合、ＯｐｅｎＦｌｏｗスイッチは、セキュアチャネルを介して該受信パケットをＯｐｅｎＦｌｏｗコントローラに転送する。
【０００３】
ＯｐｅｎＦｌｏｗコントローラは、ヘッダで指定されたパケットの送信元（ｓｏｕｒｃｅ）と宛先（ｄｅｓｔｉｎａｔｉｏｎ）に関する情報に基づいて、ネットワークトポロジ情報からパケットのパス（ｐａｔｈ：経路）を計算する。ＯｐｅｎＦｌｏｗコントローラはパス上の各ＯｐｅｎＦｌｏｗスイッチのフローエントリを生成し、各フローエントリを該パス上の各ＯｐｅｎＦｌｏｗスイッチに設定する。該パス上の各ＯｐｅｎＦｌｏｗスイッチは、ＯｐｅｎＦｌｏｗコントローラによって設定されたフローエントリのマッチフィールドと一致するヘッダを有する後続パケットを受信すると、該パス上の各ＯｐｅｎＦｌｏｗスイッチは、該フローエントリのアクションフィールドに規定されるように、パケットを次のノードに転送する。なお、ＯｐｅｎＦｌｏｗの詳細については、下記のＮＰＬ（非特許文献６）を参照することができる。
【０００４】
特にＳＤＮにおいては攻撃に対するネットワークの脆弱性を低減するために、安全なネットワーキングに関する広範な研究開発が行われている。
【０００５】
非特許文献１には、マイクロＮＯＳ（Ｎｅｔｗｏｒｋ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）内で独立してアプリケーションを生成するという概念に基づいて、ネットワークアプリケーションの閉じ込め（ｃｏｎｔａｉｎｍｅｎｔ）及び復元力（ｒｅｓｉｌｉｅｎｃｅ）戦略を実装するＲＯＳＥＭＡＲＹコントローラが提案されている。
【０００６】
非特許文献２では、ＯｐｅｎＦｌｏｗアプリケーションの潜在的な信頼問題に対処するためのＰｅｒｍＯＦが提案されている。信頼性の乱用はネットワーク全体に影響を与えるさまざまな種類の攻撃につながる可能性がある。ＰｅｒｍＯＦでは、コントローラとアプリケーションの間で制御フローとデータの分離が確立される。ＯｐｅｎＦｌｏｗアプリケーションはコントローラカーネルから分離されている。つまり、ＯｐｅｎＦｌｏｗアプリケーションはカーネルプロシージャを呼び出すことも、カーネルメモリを直接参照することもできない。ＯｐｅｎＦｌｏｗアプリケーションとＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の間にアクセス制御レイヤが設けられている。このレイヤはコントローラカーネルによって制御されるため、ＯｐｅｎＦｌｏｗアプリケーションとＯＳとの間の望ましくないインタラクションが遮断される。
【０００７】
非特許文献３では、データプレーン層からより多くの関与を受けてＯｐｅｎＦｌｏｗネットワークのセキュリティと復元力を向上させる新しいフレームワークであるＡＶＡＮＴ−ＧＵＡＲＤが提案されている。接続の移行により、データプレーンは制御プレーンを飽和攻撃から保護することができる。ネットワークが攻撃を受けているときに、トリガを作動させると、自動的にフロールールが挿入される。
【０００８】
非特許文献４には、セキュリティ・センシティブなコードモジュールに対して、該コードモジュールを呼び出すＯＳ又はアプリケーションを信頼することなく、安全な実行環境を提供するためのＴｒｕｓｔＶｉｓｏｒと呼ばれる安全なハイパーバイザが開示されている。ＴｒｕｓｔＶｉｓｏｒは、信頼できないコモディティ・プラットフォームであっても、安全性に敏感（security-sensitive：セキュリティ・センシティブ）なコードとデータをマルウェアから保護するように設計されている。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Seungwon Shin st al., "Rosemary: A Robust, Secure, and High-performance Network Operating System", CCS '14
【非特許文献２】Xitao Wen et al., "Towards a secure controller platform for openflow applications", HotSDN '13
【非特許文献３】Seungwon Shin et al., "AVANT-GUARD: scalable and vigilant switch flow management in software-defined networks", CCS '13
【非特許文献４】Jonathan M. McCune et al., "TrustVisor: Efficient TCB Reduction and Attestation", March 9, 2009, (revised March 10, 2010) CMU-CyLab-09-003, CyLab Carnegie Mellon University Pittsburgh, PA 15213
【非特許文献５】Jan Medved, Reinaldo Penno, OpenDaylight Update, November 2013, Internet <URL:http://www.ietf.org/proceedings/88/slides/slides-88-netconf-6.pdf>
【非特許文献６】"Openflow Switch Specification" Version 1.0.0. (Wire Protocol 0x01), Internet <URL:http://www.openflowswitch.org/documents/openflow-spec-v1.0.0.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述した非特許文献１−６の開示内容は、本明細書の一部を構成するものとする。
【００１１】
以下の分析は、本発明者らによってなされたものである。
【００１２】
非特許文献１、２はノースバウンド（ｎｏｒｔｈｂｏｕｎｄ）ＡＰＩのアクセス制御を行う。非特許文献３は、メッセージをフィルタリングすることによって制御プレーンに対するＤｏＳ（Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ）攻撃を防止する。
【００１３】
しかしながら、これらのセキュリティ機構では、例えば、損害(damage)を１つのネットワークコンポーネント又はエレメントに閉じ込める(confine)ことができないかもしれない。この場合、汚染されたコンポーネントがネットワーク全体に損害を与え、ネットワークのセキュリティが低下する可能性がある。セキュリティ機構が損害を１つのネットワークに閉じ込めることができず、他のネットワークに損害及ばないようにすることができない場合も同じことが言えるであろう。
【００１４】
上記を考慮して、本発明の目的は、安全なネットワーキング環境を保証する装置、方法、プログラム及びシステムを提供することにある。
【課題を解決するための手段】
【００１５】
本開示の一つの態様によれば、各々がそれぞれに対応するフローに対して通信処理を実行する複数の通信プロセスを備え、前記複数の通信プロセスの各々は、前記通信プロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数の通信プロセスに対して配置された１つ又は複数の環境の各々から隔離されており、さらに、ネットワークに接続されるように構成された複数のネットワークインタフェースと、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する通信プロセスにディスパッチするディスパッチャと、を備えた通信装置が提供される。
【００１６】
本開示の別の態様によれば、スイッチと、前記スイッチを制御するコントローラと、
を備え、前記スイッチは、各々がそれぞれに対応するフローに対してスイッチ処理を実行する複数のスイッチプロセスを備え、前記複数のスイッチプロセスの各々は、前記スイッチプロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置された１つ又は複数の環境の各々から隔離されており、さらに、ネットワークに接続されるように構成された複数のネットワークインタフェースと、前記ネットワークインタフェースからパケットを受信し、フローとディスパッチされるスイッチプロセスとの関連付けを定義するディスパッチルールに基づいて、関連するスイッチプロセスに前記パケットをディスパッチするディスパッチャと、を備えた通信システムが提供される。
【００１７】
本開示のさらなる態様によれば、フローと、前記フローがディスパッチされるスイッチプロセスとの関連付けを定義するディスパッチルールに基づいて、スイッチで受信したパケットを、前記スイッチに含まれる関連するスイッチプロセスにディスパッチし、
前記スイッチに含まれる複数のスイッチプロセスのうち前記関連するスイッチプロセスは対応するフローに対してスイッチ処理を行い、
各スイッチプロセスは、前記スイッチプロセスごとに割り当てられた環境で実行され、
各スイッチプロセスに配置される前記環境は、残りの１つ又は複数のスイッチプロセスに対して配置される１つ又は複数の環境の各々から隔離されている、通信方法が提供される。
【００１８】
本開示のさらに別の態様によれば、各々が、それぞれに対応するフローに対して通信処理を実行する複数の通信プロセスと、前記複数の通信プロセスの各々は、前記通信プロセスごとに割り当てられた環境で実行され、前記環境は、残りの１つ又は複数の通信プロセスに対して配置された１つ又は複数の環境の各々から隔離されており、さらに、
前記ネットワークインタフェースからパケットを受信し、フローとディスパッチされる通信プロセスとの関連付けを定義するディスパッチルールに基づいて、関連する通信プロセスに前記パケットをディスパッチするディスパッチプロセスと、をコンピュータに実行させるプログラムが提供される。さらに、上記プログラムを格納した半導体記憶装置、ＣＤ(Compact Disk)、ＤＶＤ(Digital Versatile Disk)などの非一時的なコンピュータ読み取り可能な記録媒体（a non-transitory computer readable recording medium）が提供される。
【発明の効果】
【００１９】
本発明によれば、安全なネットワーキングを保証するために、ネットワーキングプロセスが互いに分離される。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている形態を図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。したがって、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【００２０】
【図１】本発明の例示的な実施形態におけるスイッチの構成を例示する図である。
【図２】本発明の例示的な実施形態におけるスイッチの一例を例示する図である。
【図３】本発明の例示的な実施形態におけるシーケンスの一例を例示する図である。
【図４】本発明の例示的な実施形態におけるスイッチの変形例を例示する図である。
【図５】本発明の例示的な実施形態におけるスイッチの一例を説明する図である。
【図６】本発明の例示的な実施形態におけるコントローラを例示する図である。
【図７】本発明の例示的な実施形態におけるコントローラの変形例を例示する図である。
【図８】本発明の例示的な実施形態におけるコントローラの変形例を例示する図である。
【図９Ａ】本発明の例示的な実施形態におけるコントローラの他の変形例を例示する図である。
【図９Ｂ】本発明の例示的な実施形態におけるスイッチの他の変形例を例示する図である。
【図９Ｃ】本発明の例示的な実施形態におけるアクセス制御情報の一例を示す図である。
【図１０】ＯｐｅｎＤａｙＬｉｇｈｔにおけるＭｏｄｅｌ−Ｄｒｉｖｅｎ  ＳＡＬに適用される例示的な実施形態のアクセス制御の一例を例示する図である。
【図１１Ａ】本発明の例示的な実施形態におけるメモリアイソレーションを例示する図である。
【図１１Ｂ】ページングを例示する図である。
【図１２】本発明の例示的な実施形態におけるテナントベースのネットワークアイソレーションを例示する図である。
【図１３】本発明の他の例示的な実施形態におけるスイッチを例示する図である。
【発明を実施するための形態】
【００２１】
以下、本発明の例示的な実施形態について説明する。図１は、例示的な実施形態におけるスイッチを示す。スイッチ１００は、プロセス・アイソレーション・システム（Ｐｒｏｃｅｓｓ  Ｉｓｏｌａｔｉｏｎ  Ｓｙｓｔｅｍ）を実現するように構成され、プロセスは、隔離された環境（ｉｓｏｌａｔｅｄ  ｅｎｖｉｒｏｎｍｅｎｔ）で実行される。図１を参照すると、スイッチ１００は、隔離された環境１０１で実行されるスイッチプロセス１０２、ハイパーバイザ１１０、ディスパッチャ１２０、及び複数のネットワークインタフェースコントローラ（又はネットワークインタフェースカード）（ＮＩＣｓ）１３０を含む。
【００２２】
ＮＩＣｓ１３０と複数のスイッチプロセス１０２との間に配置されたディスパッチャ１２０は、フロー（ＮＩＣｓ１３０から受信したパケット）を関連するスイッチプロセス１０２にディスパッチする。また、ディスパッチャ１２０は、スイッチプロセス１０２から受信したパケットを対応するＮＩＣ１３０に送出し、パケットをネットワークに出力する。ディスパッチャ１２０は、複数の入力ポート（図示せず）及び複数の出力ポート（図示せず）を含み、フローと、該フローに関連するスイッチプロセスとの間の対応関係を示すディスパッチルールに基づき、入力ポートで受信されたパケットをターゲットの出力ポートに転送する。ディスパッチャ１２０は、コントローラを有するハードウェアスイッチによって構成してもよいし、ソフトウェアによって実現される仮想スイッチで構成してもよい。フローは、パケットの所定のヘッダフィールド、例えば、ソース（ｓｏｕｒｃｅ：送信元）インタフェース、プロトコル、ソース（送信元）ＩＰアドレス、ソース（送信元）ポート、宛先（ｄｅｓｔｉｎａｔｉｏｎ）ＩＰアドレス、及び宛先ポートのうちの１つ又は組合せによって定義されてもよい。
【００２３】
ハイパーバイザ１１０は、隔離された環境１０１とスイッチプロセス１０２を生成する。図１では、３つの隔離された環境１０１と３つのスイッチプロセス１０２が例示されているが、隔離された環境１０１と３つのスイッチプロセス１０２は３に限定されず、１以上の任意の整数であってもよい。
【００２４】
ハイパーバイザ１１０は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェアリソースを制御するように構成されてもよい。特に制限されないが、サーバ仮想化技術に適用する場合、ハイパーバイザ１１０は、仮想化されたハードウェア資源、ゲストＯＳ及びアプリケーションを含む仮想マシン（ＶＭ）を制御するようにしてもよい。仮想化されたハードウェア資源は、例えば、仮想化されたＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、仮想化されたストレージ、仮想化されたネットワークなどを含む。
【００２５】
アイソレーション技術（Ｉｓｏｌａｔｉｏｎ  ｔｅｃｈｎｏｌｏｇｙ）では、プロセスが隔離された環境で実行される。アイソレーション技術は、マルウェア１０５がシステム全体に影響を与えることなく動作するように封じ込め環境（ｃｏｎｔａｉｎｍｅｎｔ  ｅｎｖｉｒｏｎｍｅｎｔ）を提供する。マルウェアによって行われたいかなる損害も、例えば隔離された環境１０１Ｃに封じ込まれる。つまり、スイッチ１０２Ｃがマルウェア１０５によって汚染されたとしても、マルウェア１０５は隔離された環境１０１に限定され、他のフローに影響を与えることはできない。
【００２６】
本実施形態では、ハイパーバイザ１１０は、特に制限されるものではないが、メモリアイソレーションを提供する。隔離された環境１０１Ａ内のスイッチプロセス１０２Ａに割り当てられたメモリ領域（隔離された領域）は、他の隔離された環境１０１Ｂ、１０１Ｃ内の他のスイッチプロセス１０２Ｂ、１０２Ｃに割り当てられた他のメモリ領域（隔離された領域）から隔離されるとともに、スイッチプロセス及びＯＳによって共有される共有領域を除いて、ＯＳ／ハイパーバイザ又はデバイスドライバ（図示せず）に割り当てられた他のメモリ領域（隔離された領域）から隔離されている。
【００２７】
図１１Ａは、ハイパーバイザ又はハードウェアベースのメモリ保護（ｍｅｍｏｒｙ  ｐｒｏｔｅｃｔｉｏｎ）の例を図解する。図１１Ａに示すように、プロセス１、２に割当てられた隔離された領域１（ｉｓｏｌａｔｅｄ  ａｒｅａ１、２）（２１、２２）は、メモリ２０内の別々のメモリ領域である。ＯＳ（ハイパーバイザ）に割り当てられたＯＳ／ハイパーバイザ領域２３は、プロセス１とプロセス２（１１、１２）に割り当てられた隔離された領域１と２（２１、２２）とは異なる。このため、ＯＳ（ハイパーバイザ）はプロセス１１、１２から保護されている。またプロセス（１１、１２）によってアドレスされるメモリ空間は互いに異なるので、各プロセス（１１、１２）は、他のプロセスの隔離された領域へメモリアクセスをすることはできない。
【００２８】
特に制限されないが、ハイパーバイザ又はハードウェアベースのＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）は、プロセスのメモリ空間のベースアドレスが設定されるリロケーションレジスタ（図示せず）を用いて各プロセスの論理（仮想）アドレスから物理アドレスへの変換を行う。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。ＭＭＵは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあることをチェックする。これはメモリ保護機構として機能する。プロセスがアクセス権を持たないメモリ空間にアクセスする、又はプロセスに割り当てられたベースアドレスとリミットによって定義された範囲外にアクセスする等、欠陥（ｆａｕｌｔ）プロセスによるメモリアクセス違反の発生をＭＭＵが検出すると、欠陥プロセスは、トラップにより、アドレッシングエラーの通知を受けるか、あるいは、アドレッシングエラーの通知とともにアボート（ａｂｏｒｔ）される可能性がある。
【００２９】
ＭＭＵベースのメモリ保護は、図１１Ｂに示すようなページテーブルによって実現するようにしてもよい。ＭＭＵはページベースのＭＭＵに限定されず、例えば、セグメントベースのメモリ保護も採用されてもよい
【００３０】
ページは、固定長の連続ブロックである（例えば、４ＫＢ（Ｋｉｌｏ  Ｂｙｔｅｓ））。プロセスから発行される論理アドレス（仮想アドレス）３０は、ページ番号フィールド（ｎ−ｍビット）及びオフセットフィールド（ｍビット）を含む。この場合、ページサイズは２＾ｍである。＾は冪乗演算子を表し、プロセスのメモリアドレス空間は２＾ｎである。論理アドレス３０のページ番号Ｘ（上位ｎ−ｍビット）が抽出され、インデックス（ページエントリ）として、ページテーブル３１に供給される。ページテーブル３１のＸ番目のエントリに格納されている値Ｚ（ｐビット）が、ページテーブル３１から読み出される。すなわち、ページテーブル３１は、ＸからＺへのページ変換を行う。一般にＺのビット長ｐはＸのビット長ｐよりも長い。Ｚは、上位ビットとして、論理アドレス３０の下位ｍビットＹと組み合わされ、メモリ（マシンメモリ）３３に供給する物理アドレス３２が生成される。この場合、メモリ３３のＺページのオフセットアドレスＹがアクセスされる。
【００３１】
本実施形態では、ハイパーバイザ１１０は、それ自身のメモリ領域に、各スイッチプロセスのページテーブルを保持するように構成されてもよい。これによって、プロセスがページ変換（ｐａｇｅ  ｔｒａｎｓｌａｔｉｏｎ）を改ざんすることが防止される。
【００３２】
スイッチプロセス及びＯＳ／ハイパーバイザによって共有される共有メモリ領域に対して、ＯＳ／ハイパーバイザは、共有領域への書き込み操作を実行することができるように、アクセス制御情報に基づいて、スイッチプロセスから共有領域への読み取り／書き込みアクセスを制御するアクセスコントローラを備えてもよい。
【００３３】
図２は、ディスパッチャ１２０のルール及びスイッチ１００のスイッチプロセス１０２のフローエントリを図解する。ディスパッチャ１２０は、ストレージ１２２に格納されたディスパッチルールテーブル１２１を含む。ディスパッチルールテーブル１２１は、１つ以上のディスパッチルールを含む。ディスパッチルールは、フローフィールドのフローと、プロセスフィールドにおいて、該フローがディスパッチされるスイッチプロセスとの関連付けを規定する。なお、図２では、説明の容易のため、ディスパッチルールテーブル１２１のフローフィールド（条件フィールド）は、宛先（Dest）ＩＰアドレスフィールドのみを用いているが、パケットヘッダの１つ以上の他のフィールドを使用してフローを定義してもよい。
【００３４】
ディスパッチャ１２０は、受信したＩＰパケットのＩＰヘッダの解析を行い、ＩＰヘッダの宛先ＩＰアドレスフィールドを抽出し、ディスパッチルールテーブル１２１を検索し、宛先ＩＰアドレスと一致するフローフィールドを持つディスパッチルールを見つける。図２の例では、ディスパッチルールテーブル１２１は、それぞれ、以下の３つのディスパッチルールを含む。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＸであれば、スイッチプロセスＡにパケットをディスパッチする。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＹであれば、スイッチ処理Ｂにパケットをディスパッチする。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＺであれば、パケットはスイッチプロセスＣにディスパッチされる。
この例では、ディスパッチャ１２０は宛先ＩＰアドレス：Ｘの受信ＩＰパケットをスイッチプロセスＡにディスパッチする。
【００３５】
各スイッチプロセス１０２は、ストレージ１０４に格納された１つ又は複数のフローエントリを含むフローテーブル１０３を含む。フローテーブル１０３の各フローエントリは、少なくともマッチフィールド及び動作のリストを含む動作（ａｃｔｉｏｎ）フィールドを含む。スイッチプロセス１０２は、受信したＩＰパケットのＩＰヘッダフィールド情報を用いてフローテーブル１０３を検索する。この例では、スイッチプロセスＡは、ディスパッチャ１２０によってスイッチプロセスＡにディスパッチされたＩＰパケットヘッダの宛先ＩＰアドレスＸが、フローエントリのマッチフィールドと一致することを発見すると、スイッチプロセスＡは、フローテーブル１０３内の一致するフローエントリの動作フィールドに規定されているアクション１、２、３及び４を実行する。
【００３６】
図３は、図２を参照して説明したスイッチ１００におけるフローセットアップシーケンスの概略を例示する。
【００３７】
スイッチ１００は、未ディスパッチ（un-dispatched）フローを受信する（１）。括弧内の数字１は、図３のシーケンス番号１を示し、以下のシーケンスについても同様である。未ディスパッチフローは、ディスパッチルールテーブル１２１にまだフローに対応するスイッチプロセスが割り当てられていないフロー（新規フロー）であり、照合の結果、不一致となる。
【００３８】
スイッチ１００は、コントローラ２００にクエリ（問い合わせ）を送信する（２）。より詳しくは、スイッチ１００において、ディスパッチャ１２０がディスパッチルールテーブル１２１内の新しいフローに対応するエントリを見つけられなかった場合、ディスパッチャ１２０はディスパッチ失敗（不一致：ｎｏ−ｍａｔｃｈ）をハイパーバイザ１１０に通知する。ハイパーバイザ１１０は、送信機として、通信ネットワークを介して新しいフローのディスパッチルールのクエリをコントローラ２００に送信する。図２に示すように、例えば「Ｄｅｓｔ  ＩＰ  Ｘ＝＞プロセスＡ」のようなディスパッチルールが、ディスパッチルールテーブル１２１内のパケットヘッダの宛先ＩＰアドレス：Ｘによって示されるフローに対して存在しない場合、スイッチ１００は、新しいフロー（宛先ＩＰアドレス：Ｘ）のディスパッチルールに対するクエリを送信する。
【００３９】
スイッチ１００からコントローラ２００に送られるクエリは、コントローラ２００にフロー情報を通知するために、捕捉されたパケットの少なくともパケットヘッダを含むようにしてもよい。本発明を特に制限するものではないが、スイッチ１００は、ＯｐｅｎＦｌｏｗプロトコルを使用してセキュアチャネルを介してパケットインメッセージを、例えばクエリとしてコントローラ２００に送信するようにしてもよい。パケットインメッセージは、パケットがキャプチャされコントローラに転送された理由を示す理由フィールドと、該パケット（第１のパケット）のキャプチャされた部分を含む。この場合、パケットインメッセージの理由フィールドは、スイッチ１００内のディスパッチルールテーブル１２１での不一致を示すコードを含むことができる。
【００４０】
スイッチ１００からのクエリを受信すると、コントローラ２００は、クエリに含まれるパケット（第１のパケット）のＩＰパケットヘッダを解析し、新しいフローのディスパッチルールを作成する。より詳しくは、コントローラ２００内のディスパッチルール生成部（図示せず）は、例えば、ディスパッチルール「Ｄｅｓｔ  ＩＰ  Ｘ＝＞プロセスＡ」を新規フロー（宛先ＩＰアドレス：Ｘ）に対して作成する。
【００４１】
この段階では、コントローラ２００において、新たなフローに関連付けられたコントローラプロセスが未だ割り当てられていない場合がある（コントローラプロセスについて、図６を参照して説明する）。この場合、予め定められた制御部又はデフォルトコントローラプロセスは、第１のパケットのＩＰパケットヘッダを解析し、新しいフローのディスパッチルールを作成するようにしてもよい。コントローラ２００は、作成したディスパッチルールをスイッチに送信する（３）。
【００４２】
スイッチ１００は、コントローラ２００から新しいフローのディスパッチルールを受信し、ディスパッチルールテーブル１２１を、ディスパッチルール、例えば：「Ｄｅｓｔ  ＩＰ  Ｘ  ＝＞プロセスＡ」で更新する。新しいフロー（例えば、宛先ＩＰアドレス：Ｘ）に割り当てられたスイッチプロセス（例えば「プロセスＡ」）はスイッチ１００にまだ存在しないことから、スイッチ１００は、隔離された環境１０１を作成し、スイッチプロセス１０２を起動する（４）。図１のハイパーバイザ１１０は、隔離された環境１０１の作成とスイッチプロセス１０２の起動（invocation）を担当する制御部として機能する。スイッチプロセス１０２（例えば、「プロセスＡ」）が、隔離された環境１０１で既に起動されているが、新しいフロー（宛先ＩＰアドレス：Ｘ）に関連付けられていない場合には、隔離された環境１０１の作成及びスイッチプロセス１０２（例えば「プロセスＡ」）の起動は省略される。
【００４３】
次に、スイッチ１００は、コントローラ２００に肯定応答（ＡＣＫ:：Acknowledgement）を送信する（５）。
【００４４】
コントローラ２００は、スイッチ１００からのＡＣＫに応答して、コントローラ２００に設けられたストレージに格納されたネットワークトポロジ情報に基づいて新たな経路を算出し、アクションルール（フローエントリ）を作成してスイッチ１００、及び、パス（経路）上の１つ以上の他のスイッチ（不図示）に送信する。この段階では、コントローラ２００において、新しいフローに関連付けられたコントローラプロセス（図６を参照して後で説明する）が既に割り当てられ、起動されている場合、該コントローラプロセスは新しいパスを計算し、アクションルールをスイッチ１００に送信する。Ｏｐｅｎｆｌｏｗシステムでは、コントローラ２００は、一致するパケット（ＯｐｅｎＦｌｏｗ  １.ｙ、ｙ＝０）、又はマッチ条件と命令（例えばＯｐｅｎＦｌｏｗ  １.ｙ、ｙ＝１、２、３．０、又は３．１の場合）を特定するアクションを含むＦｌｏｗＭＯＤメッセージをパス上のスイッチ１００のそれぞれに送信する。
【００４５】
スイッチプロセス１０２は、コントローラ２００から送信されたルール（フローエントリ）にて、ストレージ１０４のフローテーブル１０３を更新する。スイッチプロセス１０２は、第１のパケットに続いて第１のパケットと同じフローに属するパケットを、コントローラから受信したフローエントリにしたがって制御する（７）。コントローラ２００は、パケットアウトメッセージを用いて第１のパケットをＯｐｅｎＦｌｏｗネットワークのエッジスイッチに送信し、第１のパケットをエッジスイッチから宛先ノードに送信するようにしてもよい。
【００４６】
図４は、例示的な実施形態の変形例を示す。この例では、セキュリティ対策をプロセスに選択的に適用してパフォーマンスを向上させる。具体的には、トラステッド（ｔｒｕｓｔｅｄ：信頼できる）スイッチプロセス及びアントラステッド（ｕｎｔｒｕｓｔｅｄ：信頼できない）スイッチプロセスを配備するようにしてもよい。
【００４７】
トラステッド・スイッチプロセス１０２Ａ及び１０２Ｂはそれらが隔離された環境１０１Ａ、１０１Ｂに作成されるとき、及び、該隔離された環境１０１Ａ、１０１Ｂで稼働するときにも、アテスト（ａｔｔｅｓｔ：検証）が行われる。このため、トラステッド・スイッチプロセス１０２Ａ及び１０２Ｂは低速である。
【００４８】
一方、隔離された環境１０１Ｃ内のアントラステッド・スイッチプロセス１０２Ｃは、アテストされず、ランタイム保護を受けることもないが、高速である。重要／機密フロー１及び２は、トラステッド・スイッチプロセス１０２Ａ及び１０２Ｂに割り当てられる。
【００４９】
図５は、プロセスの実行時におけるセキュリティ対策の一例としてのインテグリティメジャ（ｉｎｔｅｇｒｉｔｙ  ｍｅａｓｕｒｅ）の例を図解したものである。このセキュリティ対策は、図４のトラステッド・スイッチプロセス１０２Ａ及び１０２Ｂで採用されてもよい。図５は、説明のためにのみ、いくつかの変更を加えて、非特許文献４のＦｉｇ．４から引用したものである。
【００５０】
スイッチプロセス（アプリケーションＡ）は、非特許文献４のレガシーＯＳなどのＯＳから完全に隔離された独立型セキュリティセンシティブコードブロック１１０に含まれる関数ｆｏｏ（）を呼び出す。ブロック１１０は、非特許文献４に従ってＰＡＬ（Ｐｉｅｃｅｓ  ｏｆ  Ａｐｐｌｉｃａｔｉｏｎ  Ｌｏｇｉｃ）と称せられる。
【００５１】
（１）入力パラメータは、アプリケーション（信頼できないコード）からＰＡＬ１１０にマーシャリング（ｍａｒｓｈａｌｉｎｇ）される。
【００５２】
（２）ＰＡＬ１１０内の関数ｆｏｏは、以前に作成された秘密を復号（解読）するためにインテグリティメジャ（ｉｎｔｅｇｒｉｔｙ  ｍｅａｓｕｒｅ）モジュール１１１のアンシール（Ｕｎｓｅａｌ）コマンド（ＨＶ＿Ｕｎｓｅａｌ（））を呼び出す。図５のインテグリティメジャモジュール１１１は、非特許文献４のμＴＰＭ（ｍｉｃｒｏ  Ｔｒｕｓｔｅｄ  Ｐｌａｔｆｏｒｍ  Ｍｏｄｕｌｅ）に対応する。
【００５３】
（３）ＰＡＬのｆｏｏがその目的：ｄｏＷｏｒｋ（）を実行した後、センシティブな状態は、インテグリティメジャモジュール１１１：ＨＶ＿Ｓｅａｌ（）を使用して再び封印することができる。
【００５４】
（４）ＰＡＬ１１０内の関数ｆｏｏからの結果（出力）は、関数ｆｏｏ（）を呼び出したアプリケーションに案内される。
【００５５】
マーシャリング（ｍａｒｓｈａｌｉｎｇ）は、Ｊａｖａ（登録商標）オブジェクトからＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）データへの作成を指定してもよいし、アンマーシャリング（ｕｎｍａｒｓｈａｌｉｎｇ）は、ＸＭＬデータからＪａｖａ（登録商標）スクリプトを作成することを指定してもよい（ただし、これに限定されない）。
【００５６】
ＨＶ＿Ｕｎｓｅａｌ（）及びＨＶ＿Ｓｅａｌ（）を実行するインテグリティメジャモジュール１１１は、ハイパーバイザ１１０に実装してもよい。ＨＶ＿Ｕｎｓｅａｌ（）は、システムが正しい状態にある場合にのみ、暗号文を復号することができる。システム内の関連するファイルが改ざんされると、システムが正しい状態にないため、ＨＶ＿Ｕｎｓｅａｌ（）は暗号文の復号に失敗する。このため、攻撃者が平文を読み取ることを禁止する。
【００５７】
インテグリティメジャモジュール１１１（μＴＰＭ）は、インテグリティ（完全性、あるいは整合性とも訳される）を測定し、システム（インテグリティ）が正しい状態にあるか否かを判断するように構成される。インテグリティメジャモジュール１１１は、ファイルを封印（暗号化）するために使用されるインテグリティ値としてハッシュ値を保持することができる。現在保持しているハッシュ値とファイルを封印するために以前に使用されたハッシュ値が同じであることを見つけると、インテグリティメジャモジュール１１１は、システム状態が開封（Ｕｎｓｅａｌｉｎｇ）の実行を許可する権利があるものとみなす。
【００５８】
インテグリティメジャモジュール１１１の仕組みは、ＨＶ＿Ｓｅａｌ実行時のシステム状態（インテグリティ）と、ＨＶ＿Ｕｎｓｅａｌ実行時のシステム状態（インテグリティ）が同一に保たれていることを保証する。すなわち、ＨＶ＿Ｕｎｓｅａｌが実行された時点のファイルが、ＨＶ＿Ｓｅａｌが実行された時点から変更された状態であれば、ＨＶ＿Ｕｎｓｅａｌは、ＨＶ＿Ｓｅａｌで暗号化されたファイルの暗号文を、復号（ｄｅｃｒｙｐｔ）することはできない。
【００５９】
関数ｆｏｏでは、最初にＨＶ＿Ｕｎｓｅａｌによる復号化が実行され、ＨＶ−Ｓｅａｌによる暗号化が、ＥＸＩＴ又は呼び出し元に戻る前の最後に実行される。インテグリティが保たれると、図５のように、ＨＶ＿Ｕｎｓｅａｌによって、暗号文を、ｄｏＷｏｒｋによる読み書きが許可されている平文に復号化することができる。つまり、関数ｆｏｏにおいてだけ、封印された値を開封して使用することができ、他のプロセスや他の関数では封印された値を使用することはできない。ＰＡＬ、μＴＰＭ、ＨＶ＿ｓｅａｌ、ＨＶ＿Ｕｎｓｅａｌなどの詳細については非特許文献４が参照される。
【００６０】
コード又はデータへの再書き込みを防止することができる上記インテグリティメジャ機構は、メモリアイソレーションと共に、プロセスに、侵入保護などの実行時保護（ｒｕｎｔｉｍｅ  ｐｒｏｔｅｃｔｉｏｎ）を提供するのに有効である。
【００６１】
図４のトラステッド・スイッチプロセス１０２内のコードの少なくとも一部は、図５で説明したように、コードが開封（Ｕｎｓｅａｌｉｎｇ）と封印（Ｓｅａｌｉｎｇ）との間に挟まれたファンクションを呼び出す構成としてもよく、コードはレガシーＯＳから完全に隔離されて配置され、インテグリティを確保する。
【００６２】
図６は、本実施形態におけるコントローラ２００を例示する図である。図６を参照すると、ハイパーバイザ２１０は、隔離された環境２０１Ａ−２０１Ｃを作成し、隔離された環境２０１Ａ−２０１Ｃ内のコントローラプロセス２０２Ａ−２０２Ｃをそれぞれ起動する。ハイパーバイザ２１０は、コントローラ１００Ａと同様にコントローラプロセス２０２Ａ−２０２Ｃを隔離する。
【００６３】
ディスパッチャ２２０は、スイッチ１００からメッセージ（パケットインメッセージなど）を受信し、ストレージ２２２に格納されたディスパッチルールテーブルに基づいて、メッセージを関連するコントローラプロセス２０２にディスパッチする。
【００６４】
ストレージ２２２に記憶されたディスパッチルールテーブルは、スイッチに接続されたポートＩＤとコントローラプロセスＩＤとの間の対応をそれぞれ規定する１つ又は複数のディスパッチルールを含むようにしてもよい。特に制限されないが、スイッチに接続されるポートＩＤとコントローラプロセスＩＤとの対応関係は、コントローラプロセスとスイッチの信頼度に基づいて決定されてもよい。アントラステッド（信頼できない）スイッチからのメッセージは、図４に示されるように、アントラステッド（信頼できない）コントローラプロセスにディスパッチされ、トラステッド（信頼できる）スイッチプロセスからのメッセージは、図４に示されるように、トラステッド（信頼できる）コントローラプロセスにディスパッチされるようにしてもよい。
【００６５】
図６のコントローラプロセス２０２内のコードの少なくとも一部は、図５で説明したように、インテグリティを確保するために、ＯＳから完全に隔離されて位置し、開封（Ｕｎｓｅａｌｉｎｇ）と封印（Ｓｅａｌｉｎｇ）との間に挟まれたコードを持つ関数を呼び出すように構成してもよい。
【００６６】
図７は、コントローラ２００の変形例を例示する図である。図７を参照すると、コントローラプロセス２０２Ａ−２０２Ｃは、隔離された環境２０１Ａ−２０１Ｃ内のハイパーバイザ２１０によってそれぞれ起動される。ハイパーバイザ２１０は、コントローラプロセス２０２Ａ−２０２Ｃをスイッチ１００と同様に分離する。この例では、特に制限されるものではないが、各テナントにはコントローラプロセスが割り当てられている。
【００６７】
ディスパッチャ２３０（サウスバウンド（ｓｏｕｔｈｂｏｕｎｄ）ＡＰＩ用ディスパッチャ）は、スイッチ１００（又はスイッチ内のスイッチプロセス）から、関連付けられたサウスバウンドＡＰＩ２０３及びコントローラプロセス２０２に、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）コール（パケット）をディスパッチする。ディスパッチャ２３０からのＡＰＩコールは、サウスバウンドＡＰＩ２０３を介してコントローラプロセス２０２に転送される。
【００６８】
ディスパッチャ２４０（ノースバウンド（ｎｏｒｔｈｂｏｕｎｄ）ＡＰＩのディスパッチャ）は、アプリケーション２５０（例えば、ロードバランサ、ファイアウォールなど）からのＡＰＩコールを、関連するノースバウンドＡＰＩ２０４にディスパッチする。ディスパッチャ２３０からのＡＰＩコールは、ノースバウンドＡＰＩ２０４を介してコントローラプロセス２０２に転送される。
【００６９】
サウスバウンドＡＰＩ２０３（２０３Ａ−２０３Ｃ）の各々は、コントローラプロセス２０２（２０２Ａ−２０２Ｃ）がＳＤＮスタックの最下部にあるスイッチの挙動を定義することを可能にする。ノースバウンドＡＰＩ２０４（２０４Ａ−２０４Ｃ）の各々は、コントローラプロセス２０２（２０２Ａ−２０２Ｃ）とアプリケーション２５０（２５０Ａ−２５０Ｃ）又はＳＤＮスタックの最上部における上位レイヤ制御プログラムとの間の通信インタフェースを指定する。アプリケーション２５０（２５０Ａ−２５０Ｃ）は、ノースバウンドアプリケーションとも呼ばれる。
【００７０】
この例では、ディスパッチャ２３０、２４０は、「テナント」に基づいてＡＰＩコールをディスパッチするが、これに限定されるものではない。図７において、ディスパッチャ２３０、２４０がディスパッチルールとして使用したテナント情報は、簡単のため、ストレージ２６０に共通に格納されている。ディスパッチャ２３０がスイッチ１００（スイッチプロセス）からのメッセージをディスパッチするために使用するディスパッチルール、及びノースバウンドアプリケーション２５０からＡＰＩコールをディスパッチするためにディスパッチャ２４０によって使用されるディスパッチルールは、必ずしも同一である必要はないし、必ずしも同じ記憶装置に記憶される必要はないことは勿論である。
【００７１】
図８は、図７を参照して説明した例に適用されるテナントベースのセキュリティポリシを説明するための図である。図８は、ストレージ２６０に格納されたテナント情報の一例を示す。セキュリティポリシは、テナントに関連して管理されてもよい。
【００７２】
データセンタでは、テナント（顧客）ごとに独立した仮想ネットワークが提供される。各テナントは、契約に従って割り当てられた単一のコントローラを有することができる。セキュリティポリシ（セキュリティコース）は、テナントの契約情報に関連して管理されるようにしてもよい。図８では、説明のためにのみ、高レベルセキュリティコースを備えたテナントＡセキュリティ契約２６１Ａと、低レベルセキュリティコースを有するテナントＢセキュリティ契約２６１Ｂとが格納されている。
【００７３】
高レベルのセキュリティコースと低レベルのセキュリティコースのためのセキュリティポリシが用意されている。コントローラ及びコントローラに接続されたスイッチを保護するためのセキュリティレベルは、テナントのセキュリティ契約に基づいて決定されてもよい。図８では、説明のためにのみ、プロセス検証を伴うテナントＡ２６２Ａのセキュリティポリシと、プロセス検証が行われないテナントＢ２６２Ｂのセキュリティポリシがストレージ２６０に格納されている。
【００７４】
プロセス検証を伴うテナントのセキュリティポリシは、例えば、図５を参照して説明したインテグリティメジャを使用して実現することができる。テナントＡ宛てのメッセージがディスパッチャ２３０によってディスパッチされるコントローラプロセス２０２のコードの一部は、セキュリティポリシ２６２Ａに基づいて、図５で説明したように、隔離された環境で、コードが開封（Ｕｎｓｅａｌｉｎｇ）と封印（Ｓｅａｌｉｎｇ）に挟まれた関数（ｆｕｎｃｔｉｏｎ）の関数呼び出し（ｆｕｎｃｔｉｏｎ  ｃａｌｌ）を含むようにしてもよい。
【００７５】
図９Ａは、コントローラ２００の変形例を例示する。図９Ａを参照すると、隔離された環境２０１Ａ−２０１Ｃに設けられたコントローラプロセス２０２Ａ−２０２Ｃは、アクセス制御モジュール２７０を介してストレージ２８０に格納された共有情報にアクセスする。
【００７６】
アクセス制御モジュール２７０は、共有オブジェクト毎に、ＡＣＥ（Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ｅｎｔｉｔｙ）等のアクセス制御情報を格納しているストレージ２９０が接続されている。ストレージ２９０内のアクセス制御情報は、例えば、コントローラプロセス又はコントローラプロセスのグループに対して、ページ単位又はオブジェクト単位で、ストレージ２８０に格納された共有情報に対するアクセス可能／不可能又は許可されたアクセスタイプ情報を含むようにしてもよい。あるいは、ストレージ２９０内のアクセス制御情報は、各コントローラプロセスに対して、図９Ｃに示すように、コントローラプロセスに許可されるアクセスアドレス範囲（開始アドレス及び終了アドレスによって定義される）及びアクセスタイプを含むことができる。
【００７７】
アクセス制御モジュール２７０は、コントローラプロセス２０２Ａ−２０２Ｃのいずれかからアクセスコマンド（リード／ライト）とアクセスアドレスとを含むアクセス要求を受信すると、ストレージ２８０内の共有情報へのアクセスであるかチェックする。ストレージ２８０内の共有情報へのアクセスである場合、アクセス制御モジュール２７０は、ストレージ２９０に格納されているアクセス制御情報に基づき、該アクセス要求が許可されているか否かを確認する。チェックの結果、該アクセス要求が許可されている場合、コントローラプロセスから共有情報（共有領域）へのアクセスはイネーブルとされる。アクセス要求のチェックの結果、アクセス要求が許可されていない場合、コントローラプロセスから共有情報（共有領域）へのアクセスは、ディスエーブルとされる。例えば、コントローラプロセス２０２Ａ及び２０２Ｂが信頼できるネットワークに属し、コントローラプロセス２０２Ｃが信頼できないネットワークに属する場合、コントローラプロセス２０２Ａ及び２０２Ｂは、共有情報の所定のアドレス範囲をリード、及びライトすることが可能であり、コントローラプロセス２０２Ｃはリードのみが可能とされる。
【００７８】
アクセス制御モジュール２７０は、ハイパーバイザ２１０に含まれてもよい。共有情報を記憶するストレージ２８０は、半導体メモリ（ＲＡＭ（ランダムアクセスメモリ）、又はＥＥＰＲＯＭ（ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ａｎｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）など）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などが挙げられる。
【００７９】
上述したアクセス制御は、図９Ｂに示すように、スイッチ１００にも実装するようにしてもよい。図９Ｂを参照すると、隔離された環境１０１Ａ−１０１Ｃに設けられたスイッチプロセス１０２Ａ−１０２Ｃは、アクセス制御モジュール１７０を介して、ストレージ１８０に格納された共有情報にアクセスすることができる。ストレージ１８０に格納された共有情報には、ＯＳ／ハイパーバイザ及びスイッチプロセス１０２Ａ−１０２Ｃによって共有される。アクセス制御モジュールを用いたアクセス制御は、ストレージに格納された共有情報以外の共有リソースにも適用してもよい。
【００８０】
図１０は、例示的な実施形態の変形を示す。図１０は、非特許文献５から、Ｍｏｄｅｌ−Ｄｒｉｖｅｎ  ＳＡＬ（Ｓｅｒｖｉｃｅ  Ａｂｓｔｒａｃｔｉｏｎ  Ｌａｙｅｒ）への移行から、いくつかの吹き出し（ｍａｒｋｕｐ  ｂａｌｌｏｏｎｓ）を追加して引用されている。ＯｐｅｎＤａｙｌｉｇｈｔにおけるＭｏｄｅｌ−Ｄｒｉｖｅｎ  ＳＡＬ（ＭＤ−ＳＡＬ）は、データの交換又は変換を抽象化するフレームワークの１つである。ＭＤ−ＳＡＬにおいては、図１０に示すように、ネットワーク機器（ＮＥ）情報、管理対象トポロジなどの情報がツリー構造のデータモデルとしてデータストアに格納されている。
【００８１】
例示的な実施形態では、ＭＤ−ＳＡＬ内のデータストアにアクセス制御が適用される。具体的には、ＯｐｅｎＤａｙｌｉｇｈｔのＭＤ−ＳＡＬは、図９Ａのストレージ２８０に共有情報として記憶され、コントローラプロセス２０２Ａ−２０２Ｃによって共有される。図１０において、
−  ＢＧＰ−ＬＳ：Ｂｏｒｄｅｒ  Ｇａｔｅｗａｙ  Ｐｒｏｔｏｃｏｌ−Ｌｉｎｋ  Ｓｔａｔｕｓ、
ボーダーゲートウェイプロトコル（ＢＧＰ）は、インターネット上の自律システム（ＡＳ）間で、ルーティング及び到達可能性情報を交換するように設計された標準化された外部ゲートウェイプロトコルである。
−  ＰＣＥＰ：Ｐａｔｈ  Ｃｏｍｐｕｔａｔｉｏｎ  Ｅｌｅｍｅｎｔ  （ＰＣＥ）Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ（ＩＥＴＦ  （Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）  ＲＦＣ（Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ）  ５４４０）．
−  ＯＦ  ｘ．ｙ：ＯｐｅｎＦｌｏｗプロトコルバージョンｘ．ｙ（１．０や１．３など）。
−  ＯＦ−Ｃｏｎｆｉｇ：ＯｐｅｎＦｌｏｗ管理及び設定プロトコル。
−  ＯＶＳＤＢ：Ｏｐｅｎ  ｖＳｗｉｔｃｈ  Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｐｒｏｔｏｃｏｌ、
特にＯｐｅｎ  ｖＳｗｉｔｃｈの実装を管理するオープンソースのコンポーネントＯｐｅｎ  ｖＳｗｉｔｃｈ（仮想スイッチ）。
−  ＮＥＴＣＯＮＦ：ネットワーク構成プロトコル（ＩＥＴＦ  ＲＦ６２４１）。ＮＥＴＣＯＮＦは、ネットワークデバイスの設定をインストール、操作、及び削除するためのメカニズムを提供する。
−  ＲＥＳＴＣＯＮＦは、ＲＥＳＴ形式でデータストアにアクセスするためのプロトコル。
−  ＮＢ  ＲＥＳＴ  ＡＰＩ：ノースバウンドＲＥＳＴ  ＡＰＩはＯｐｅｎＤａｙｌｉｇｈｔ  ＡＰＩである。
【００８２】
ストレージ２８０に共有情報として格納されたＭＤ−ＳＡＬ内のノードには、どのプロセスが読み書きが許可されるかを指定するアクセス制御情報が設けられている。図１０では、ＯｐｅｎＦｌｏｗ又はｖＳｗｉｔｃｈ（仮想スイッチ）に関連する参照番号５１、５２、及び５３によって指定されるノード／フロー上に、それぞれマークアップバルーンに示されるようなアクセス制御リストが提供される。この例では、権限のないコントローラプロセスがＭＤ−ＳＡＬのノード情報にアクセスできないように制御される。
【００８３】
図１２は、本実施形態に係るデータセンタの一例を例示する図である。コントローラ２００は、図６又は図７を参照して説明したコントローラ２００に対応する。スイッチ１００−１及び１００−２は、図１から図４を参照して説明したスイッチ１００にそれぞれ対応する。テナントベースのセキュリティポリシは、データセンタネットワークで採用される。
【００８４】
テナントＡのホスト３０１−１ＡとテナントＡのホスト３０１−２Ａとは、スイッチ１００−１のテナントＡ用のスイッチプロセス１０２−１Ａに接続され、スイッチ１００−２のテナントＡのスイッチプロセス１０２−２Ａにそれぞれ接続されてテナントネットワークＡを形成する。スイッチ１００−１におけるテナントＡ用スイッチプロセス１０２−１Ａと、スイッチ１００−２におけるテナントＡのスイッチプロセス１０２−２Ａは、テナントＡのコントローラプロセス２０２−Ａに接続される。
【００８５】
テナントＢのホスト３０１−１ＢとテナントＢのホスト３０１−２Ｂとは、スイッチ１００−１のテナントＢのスイッチプロセス１０２−１Ｂと、スイッチ１００−２のテナントＢのスイッチプロセス１０２−２Ｂにそれぞれ接続され、テナントネットワークＢを形成する。スイッチ１００−１内のテナントＢ用のスイッチプロセス１０２−１Ｂと、スイッチ１００−２内のテナントＢのスイッチプロセス１０２−２Ｂは、テナントＢのコントローラプロセス２０２−Ｂに接続される。このネットワーク構成では、テナントネットワークＡが汚染されたとすると、該汚染がテナントネットワークＡに閉じ込められ、テナントネットワークＢ又はテナントネットワーク全体に広がることを防止することができる。
【００８６】
図１３は、本実施形態の更なる変形例の構成を例示する図である。図１３を参照すると、ディスパッチャ４２０が、パケット処理ハードウェア４１０と管理プロセス４０２Ａ−４０２Ｃとの間に配置される。
【００８７】
この実施形態では、パケット処理ハードウェア４１０によってパケット処理が実行され、管理プロセス４０２Ａ−４０２Ｃは、それぞれ、ＯｐｅｎＦｌｏｗチャネルを介して、図１３には示されていないコントローラ内の関連コントローラプロセスと通信する。管理プロセス４０２Ａ−４０２Ｃのそれぞれは、パケット処理ハードウェア４１０へのフローエントリを受信／削除する。次に、パケット処理ハードウェア４１０は、フローエントリに従ってそれぞれのパケットを処理する。
【００８８】
ディスパッチャ４２０は、それぞれのフローエントリの追加及び削除を監視する。パケット処理ハードウェア４１０は、フローエントリと一致しないパケットヘッダを有するパケットを受信すると、ディスパッチャ４２０に対して不一致を通知する。そして、ディスパッチャ４２０は、通知を、対応するディスパッチルールに従って対応する管理プロセス４０２Ａ−４０２Ｃに転送する。より詳しくは、通知は、ＩＰアドレス、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、ＶＬＡＮ（Ｖｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）タグなどの受信パケットのヘッダフィールド情報を含み、ディスパッチャ４２０はディスパッチルールを検索して、パケットのヘッダフィールド情報に一致するルールを検索し、管理プロセスを決定する。
【００８９】
さらに、ディスパッチャ４２０は、１つ又は複数のフローエントリと１つ又は複数のディスパッチルールとの間の競合をチェックするように構成されてもよい。具体的には、管理プロセス（例えば、４０２Ａ）が、１つ又は複数の他の管理プロセス（４０２Ｂ、４０２Ｃ）の１つ又は複数のディスパッチルールと競合するフローエントリを追加しようとする場合、ディスパッチャ４２０は、該フローエントリを拒否する。例えば、ディスパッチルールがＶＬＡＮ  ＩＤ１２３と管理プロセス４０２Ｂとを対応付けているものとし、管理プロセス４０２ＡがマッチフィールドがＶＬＡＮ  ＩＤ＝１２３を指定したフローエントリを入力しようとすると、ディスパッチャ４２０は、フローエントリを拒否する。すなわち、ディスパッチャ４２０は、管理プロセス４０２Ａがフローテーブルにフローエントリを追加することを許可しない。
【００９０】
また、上述した実施形態では、隔離された環境でプロセスの実行をハイパーバイザによって制御する構成について説明したが、実施形態の概念は、ハイパーバイザを使用しないメモリアイソレーションなどにより、隔離された環境をプロセスへ提供するように構成とされたプロセッサ上で実行されるプロセスにも適用するようにしてもよい。また、上記実施形態では、ＯｐｅｎＦｌｏｗスイッチやコントローラへの適用例について説明したが、本発明の適用はＯｐｅｎＦｌｏｗネットワークに限定されないことは勿論である。
【００９１】
上記非特許文献の各開示は、参照により本明細書に組み込まれる。各実施形態及び各実施形態の変更及び調整は、本発明の全体的な開示（請求項を含む）の範囲内で可能であり、本発明の基本的な技術的思想に基づくものである。開示される様々な要素（各補足の各要素、各例の各要素、各図の各要素などを含む）の様々な組合せ及び選択は、本発明の請求の範囲内で可能である。すなわち、本発明は、特許請求の範囲及び技術的思想を含む全体的な開示によって、当業者によってなされ得る様々な変形及び修正を含むことは勿論である。
【符号の説明】
【００９２】
１１  プロセス１
１２  プロセス２
２０  マシンメモリ
２１  分離領域１
２２  分離領域２
２３  ＯＳ／ハイパーバイザ領域
３０  論理アドレス
３１  ページテーブル
３２  物理アドレス
３３  マシンメモリ
５１−５３  ノード／フロー
１００  スイッチ
１００−１  スイッチ−１
１００−２  スイッチ−２
１０１、１０１Ａ−１０１Ｃ  隔離された環境（ｉｓｏｌａｔｅｄ  ｅｎｖｉｒｏｎｍｅｎｔ）
１０２、１０２Ａ−１０２Ｃ  スイッチプロセス
１０２−１Ａ、１０２−２Ａ  テナントＡ用のスイッチプロセス
１０２−１Ｂ、１０２−２Ｂ  テナントＢ用のスイッチプロセス
１０３、１０３Ａ−１０３Ｃ  フローテーブル（状態）
１０４  ストレージ（フローエントリ）
１０５  マルウェア（汚染）
１０６Ａ  テナントネットワークＡ
１０６Ｂ  テナントネットワークＢ
１１０  ハイパーバイザ
１２０  ディスパッチャ
１２１  ディスパッチルールテーブル
１２２  ストレージ（ディスパッチルール）
１３０  ＮＩＣ
１７０  アクセス制御モジュール
１８０  ストレージ（共有情報）
１９０  ストレージ（アクセス制御情報）
２００  コントローラ
２０１Ａ−２０１Ｃ  隔離された環境
２０２Ａ−２０２Ｃ  コントローラプロセス
２０２−Ａ  テナントＡのコントローラプロセス
２０２−Ｂ  テナントＢのコントローラプロセス
２０３Ａ−２０３Ｃ  サウスバウンドＡＰＩ
２０４Ａ−２０４Ｃ  ノースバウンドＡＰＩ
２１０  ハイパーバイザ
２２０  ディスパッチャ
２２２  ストレージ（ディスパッチルール）
２３０  サウスバウンドＡＰＩディスパッチャ
２４０  ノースバウンドＡＰＩディスパッチャ
２５０Ａ−２５０Ｃ  アプリケーション
２６０  ストレージ（テナント情報）
２７０  アクセス制御モジュール
２８０  ストレージ（共有情報）
２９０  ストレージ（アクセス制御情報）
３０１−１Ａ、３０１−２Ａ  テナントＡのホスト
３０１−１Ｂ、３０１−２Ｂ  テナントＢのホスト
４０１Ａ−４０１Ｃ  隔離された環境
４０２Ａ−４０２Ｃ  管理プロセス
４１０  パケット処理ハードウェア
４２０  ディスパッチャ
【図１】
0006569741.tif 000002
【図２】
0006569741.tif 000003
【図３】
0006569741.tif 000004
【図４】
0006569741.tif 000005
【図５】
0006569741.tif 000006
【図６】
0006569741.tif 000007
【図７】
0006569741.tif 000008
【図８】
0006569741.tif 000009
【図９Ａ】
0006569741.tif 000010
【図９Ｂ】
0006569741.tif 000011
【図９Ｃ】
0006569741.tif 000012
【図１０】
0006569741.tif 000013
【図１１Ａ】
0006569741.tif 000014
【図１１Ｂ】
0006569741.tif 000015
【図１２】
0006569741.tif 000016
【図１３】
0006569741.tif 000017