(57)【特許請求の範囲】
【請求項１】
各々がそれぞれに対応するフローに対して通信処理を行う複数の通信プロセスと、
ネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされる通信プロセスとの関連付けを規定したディスパッチルールに基づいて、前記パケットを関連する通信プロセスにディスパッチするディスパッチャと、
保存された各通信プロセスのイメージを用いて前記各通信プロセスをロールバックする制御を行う制御部と、
を備え、
前記制御部は、
設定に応じて、前記通信プロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記通信プロセスのイメージとして、記憶装置に保存する保存部と、
前記記憶装置に保存されている前記通信プロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記通信プロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによってロールバックを実行する復元部と、
を備えた、通信装置。
【請求項２】
前記制御部は、ロールバック操作のために保存された前記通信プロセスのイメージであるロールバックイメージのインテグリティ尺度を前記記憶装置に保存し、
前記制御部は、前記通信プロセスのロールバックイメージのインテグリティ尺度を計算し、今回計算されたインテグリティ尺度が、前記保存されたロールバックイメージのインテグリティ尺度と同じであるかチェックする請求項１に記載の通信装置。
【請求項３】
前記制御部は、定期的に、前記通信プロセスのロールバックイメージの更新を行うように構成されており、前記ロールバックをトリガする予め定められたイベントの発生に応じて、保存されている最新のロールバックイメージを用いて前記通信プロセスのロールバックを行う、請求項２に記載の通信装置。
【請求項４】
前記通信プロセスは、
前記ディスパッチャによってディスパッチされたパケットを受信すると、前記パケットのヘッダフィールド情報をフローを取り扱うためのルールと照合し、照合結果に基づいて前記パケットを処理するスイッチプロセスを備え、前記ルールは、パケットのヘッダフィールド情報と照合されるマッチフィールドと、一致するパケットの取り扱いを規定するアクションフィールドと、を備え、
前記制御部は、前記スイッチプロセスが１又はＮ個のフローを処理するたびに（Ｎは２以上の予め定められた整数）、又は、ロールバックをトリガするための所定のイベントの発生に応答して、ロールバックを実行するように制御する請求項１乃至３のいずれか１項に記載の通信装置。
【請求項５】
前記通信プロセスは、前記通信装置を制御するコントローラとの間で通信を行う管理プロセスを含み、
前記通信装置は、さらに、
前記ネットワークインタフェースと前記ディスパッチャとの間に配置され、フローを処理するためのルールに従ってパケット処理を行うパケット処理部を備え、
前記ディスパッチャはフローを処理するための前記ルールをモニタする請求項１乃至３のいずれか１項に記載の通信装置。
【請求項６】
前記通信プロセスは、
スイッチからのメッセージを受信すると、フローのパス上の各スイッチに適用されるフローを処理するためのルールを生成し、前記生成したルールを経路上の各スイッチに送信するコントローラプロセスを含み、
前記ルールは、前記スイッチが受信したパケットと照合されるマッチフィールドと、前記マッチフィールドと一致するパケットの前記スイッチによる取り扱いを規定するアクションフィールドと、を含み、
前記制御部は、
前記コントローラプロセスが、
前記スイッチからの要求を処理した後、
１つの操作を処理した後、
定期的に、又は、
ロールバックをトリガするための予め定められたイベントの発生に応答して、
前記コントローラプロセスのロールバックを制御する請求項１乃至３のいずれか１項に記載の通信装置。
【請求項７】
前記コントローラプロセスは、
コントローラコアプロセスと、
前記ディスパッチャの側に位置するアプリケーションインタフェースを備え、
前記コントローラプロセスのロールバックにおいて、
前記コントローラコアプロセス及び前記アプリケーションインタフェースの少なくとも一方がロールバックされるか、
前記コントローラコアプロセス及び前記アプリケーションインタフェースが別々にロールバックされる、請求項６に記載の通信装置。
【請求項８】
前記通信プロセスは、前記通信プロセスに割り当てられた環境において実行されるように構成され、
前記各通信プロセスのために配置された環境は、１つ又は複数の環境のそれぞれから隔離されている、請求項１乃至６のいずれか１項に記載の通信装置。
【請求項９】
前記制御部において、
前記保存部は、前記通信プロセスのイメージとそのインテグリティ尺度を前記記憶装置に保存し、
現在算出されている通信プロセスのインテグリティ尺度が、以前に計算され保存されたインテグリティ尺度と同じであるかどうかを検査する検証器を備え、
前記通信プロセスの現在計算されたインテグリティ尺度が、以前に計算されて保存された通信プロセスのインテグリティ尺度と同じでない場合に、
前記復元部は、保存されている前記通信プロセスのイメージを復元することによって前記通信プロセスをロールバックする請求項１乃至８のいずれか１項に記載の通信装置。
【請求項１０】
各々がそれぞれに対応するフローに対してスイッチ処理を行う複数のスイッチプロセスと、
ネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされるスイッチプロセスとの関連付けを規定したディスパッチルールに基づいて、前記パケットを関連するスイッチプロセスにディスパッチするディスパッチャと、
保存された前記スイッチプロセスのイメージを用いて各スイッチプロセスをロールバックする制御を行う制御部と、
を備え、
前記制御部は、
設定に応じて、前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記スイッチプロセスのイメージとして、記憶装置に保存する保存部と、
前記記憶装置に保存されている前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記スイッチプロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによって前記スイッチプロセスのロールバックを実行する復元部と、
を備えたスイッチ装置。
【請求項１１】
各々が１つ又は複数のスイッチの制御を行う複数のコントローラプロセスと、
スイッチと、前記スイッチからのメッセージがディスパッチされるコントローラプロセスとの関連付けを規定したディスパッチルールに基づいて、前記スイッチからのメッセージを関連するコントローラプロセスにディスパッチするディスパッチャと、
保存された各コントローラプロセスのイメージを用いて前記各コントローラプロセスをロールバックする制御を行う制御部と、
を備え、
前記制御部は、
設定に応じて、前記コントローラプロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記コントローラプロセスのイメージとして、記憶装置に保存する保存部と、
前記記憶装置に保存されている前記コントローラプロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記コントローラプロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによって前記コントローラプロセスのロールバックを実行する復元部と、
を備えたコントローラ装置。
【請求項１２】
スイッチと、
前記スイッチを制御するコントローラと、
を備え、
前記スイッチは、
各々がそれぞれに対応するフローに対してスイッチ処理を行う複数のスイッチプロセスと、
ネットワークに接続されるように構成された複数のネットワークインタフェースと、
前記ネットワークインタフェースからパケットを受信し、フローと、前記フローがディスパッチされるスイッチプロセスとの関連付けを規定したディスパッチルールに基づいて、前記パケットを関連するスイッチプロセスにディスパッチするディスパッチャと、
保存された各スイッチプロセスのイメージを用いて各スイッチプロセスをロールバックする制御を行う制御部と、
を備え、
前記制御部は、
設定に応じて、前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記スイッチプロセスのイメージとして、記憶装置に保存する保存部と、
前記記憶装置に保存されている前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記スイッチプロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによって前記スイッチプロセスのロールバックを実行する復元部と、
を備えた通信システム。
【請求項１３】
前記制御部は、前記スイッチプロセスが１又はＮ個のフローを処理するたびに（Ｎは２以上の予め定められた整数）、又は、前記スイッチプロセスのロールバックをトリガするための所定のイベントの発生に応答して、前記スイッチプロセスのロールバックを実行するように制御する請求項１２に記載の通信システム。
【請求項１４】
前記制御部において、
前記保存部は、前記スイッチプロセスのイメージとそのインテグリティ尺度を前記記憶装置に保存し、
現在算出されているスイッチプロセスのインテグリティ尺度が、以前に計算され保存されたインテグリティ尺度と同じであるかどうかを検査する検証器を備え、
前記復元部は、前記スイッチプロセスの現在計算されたインテグリティ尺度が、以前に計算されて保存されたスイッチプロセスのインテグリティ尺度と同じでない場合に、保存されている前記スイッチプロセスのイメージを復元することによって前記スイッチプロセスをロールバックする請求項１２又は１３に記載の通信システム。
【請求項１５】
前記スイッチは、前記スイッチプロセスを制御するハイパーバイザを備え、
前記ハイパーバイザは前記制御部を含む請求項１２乃至１４のいずれか１項に記載の通信システム。
【請求項１６】
前記スイッチに含まれる前記制御部は、ロールバック操作のために保存された前記スイッチプロセスのイメージであるロールバックイメージのインテグリティ尺度を前記記憶装置に保存し、
前記制御部は、前記スイッチプロセスのロールバックイメージのインテグリティ尺度を計算し、今回計算されたインテグリティ尺度が、前記保存されたロールバックイメージのインテグリティ尺度と同じであるかチェックする請求項１２乃至１５のいずれか１項に記載の通信システム。
【請求項１７】
前記制御部は、定期的に、前記スイッチプロセスのロールバックイメージの更新を行うように構成されており、前記ロールバックをトリガする予め定められたイベントの発生に応じて、保存されている最新のロールバックイメージを用いて前記スイッチプロセスのロールバックを行う請求項１６に記載の通信システム。
【請求項１８】
前記ネットワークインタフェースから受信したパケットのヘッダフィールド情報が示すフローのディスパッチルールが存在しない場合には、該フローのディスパッチルールの問い合わせをコントローラに対して行い、
前記コントローラから送信されたフローに対するディスパッチルールを受信すると、前記ディスパッチルールに基づき、前記フローに関連するスイッチプロセスを呼び出し、前記スイッチプロセスから前記コントローラに応答を送信し、
前記応答を受けた前記コントローラは、前記スイッチプロセスに対してフローに関する処理を規定したルールを作成して送信し、
前記スイッチプロセスは、前記コントローラから前記ルールを受信すると、前記ルールに基づいて前記フローに関連する１つ又は複数のパケットを処理する請求項１２乃至１７のいずれか１項に記載の通信システム。
【請求項１９】
前記スイッチプロセスは、前記スイッチを制御する前記コントローラとの間で通信を行う管理プロセスを含み、
前記スイッチは、さらに、
前記ネットワークインタフェースと前記ディスパッチャとの間に配置され、フローを処理するためのルールに従ってパケット処理を行うパケット処理部を備え、
前記ディスパッチャはフローを処理するための前記ルールをモニタする請求項１２乃至１８のいずれか１項に記載の通信システム。
【請求項２０】
前記制御部は、１つ以上の関連するスイッチプロセスの制御を行う複数のコントローラプロセスと、
前記スイッチプロセスからのメッセージがディスパッチされるコントローラプロセスとスイッチプロセスとの関連付けを定義する第１のディスパッチルールに基づいて、前記スイッチプロセスからのメッセージを関連するコントローラプロセスにディスパッチする第１のディスパッチャと、
保存されたコントローラプロセスのイメージを用いて前記コントローラプロセスのロールバックを制御する制御部と、を備えた請求項１２に記載の通信システム。
【請求項２１】
前記制御部は、
前記コントローラプロセスがスイッチからの要求を処理した後、
１つの操作を処理した後、
定期的に、又は、
ロールバックをトリガするための予め定められたイベントの発生に応答して、
前記コントローラプロセスのロールバックを実行するように制御する請求項２０に記載の通信システム。
【請求項２２】
前記コントローラは、
アプリケーションからのメッセージがディスパッチされるコントローラプロセスとアプリケーションとの関連付けを定義する第２のディスパッチルールに基づいて、アプリケーション又はより上位の層からのメッセージを、コントローラプロセスへディスパッチする第２のディスパッチャを備え、
前記コントローラプロセスは、
コアプロセスと、
前記第１のディスパッチャとインタフェースし、前記第１のディスパッチャからの要求を受信し前記コアプロセスへ供給する第１のインタフェースと、
前記第２のディスパッチャをインタフェースし、前記第２のディスパッチャからの要求を受け、前記コアプロセスへ供給する第２のインタフェースと、
を備え、
前記制御部は、前記第１及び第２インタフェース、又はコアプロセスの少なくとも一つをロールバックするか、あるいは、
前記制御部は、前記第１及び第２インタフェース、又はコアプロセスを別々にロールバックする請求項２０又は２１に記載の通信システム。
【請求項２３】
前記コントローラに含まれる前記制御部において、
前記保存部は、前記コントローラプロセスのイメージとそのインテグリティ尺度を保存し、
前記コントローラプロセスの今回計算されたインテグリティ尺度が、以前に計算されて保存されたコントローラプロセスのインテグリティ尺度と同じであるかどうかをチェックする検証器を備え、
前記コントローラプロセスの現在計算されたインテグリティ尺度が、以前に計算されて保存された前記コントローラプロセスのインテグリティ尺度と同じでないことが検出された場合、前記復元部は、保存されている前記コントローラプロセスのイメージを復元することによって前記コントローラプロセスをロールバックする請求項２０乃至２２のいずれか１項に記載の通信システム。
【請求項２４】
前記コントローラに含まれる前記制御部は、ロールバック操作のために保存された前記コントローラプロセスのイメージであるロールバックイメージのインテグリティ尺度を前記記憶装置に保存し、前記制御部は、前記コントローラプロセスのロールバックイメージのインテグリティ尺度を計算し、今回計算されたインテグリティ尺度が、前記保存されたロールバックイメージのインテグリティ尺度と同じであるかチェックする請求項２０乃至２３のいずれか１項に記載の通信システム。
【請求項２５】
前記コントローラに含まれる前記制御部は、定期的に、前記コントローラプロセスのロールバックイメージの更新を実行するように構成され、
前記制御部は、ロールバックをトリガするための予め定められたイベントの発生に応答して、保存されたコントローラプロセスの最新のロールバックイメージでロールバックを行う請求項２４に記載の通信システム。
【請求項２６】
前記スイッチに含まれる前記スイッチプロセスと、前記コントローラに含まれる前記コントローラプロセスとの少なくとも一方は、割り当てられた環境において実行されるように構成され、
前記各プロセスの環境は、１つ又は複数のプロセスの他のプロセスの１つ又は複数の環境のそれぞれから隔離されている請求項２０乃至２５のいずれか１項に記載の通信システム。
【請求項２７】
フローと、前記フローがディスパッチされるスイッチプロセスとの関連付けを規定したディスパッチルールに基づいて、受信パケットを、関連するスイッチプロセスにディスパッチし、
前記関連するスイッチプロセスは前記フローに対応するスイッチプロセスを実行し、
保存された前記スイッチプロセスのイメージを用いて前記スイッチプロセスをロールバックする制御を行い、その際、
設定に応じて、前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記スイッチプロセスのイメージとして、記憶装置に保存し、
前記記憶装置に保存されている前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記スイッチプロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによって前記スイッチプロセスのロールバックを実行する、通信方法。
【請求項２８】
前記スイッチプロセスが１又はＮ個のフロー（Ｎは２以上の所定の整数）を処理するたびに、又はロールバックをトリガする予め定められたイベントの発生に応答して、前記スイッチプロセスのロールバックを実行するように制御することを特徴とする請求項２７に記載の通信方法。
【請求項２９】
コントローラに含まれる複数のコントローラプロセスのそれぞれが、１つ又は複数の関連するスイッチプロセスの制御を実行し、
前記スイッチプロセスからのメッセージが送信されるコントローラプロセスと前記スイッチプロセスとの関連付けを定義する第１のディスパッチルールに基づいて、前記スイッチプロセスからのメッセージを関連するコントローラプロセスにディスパッチし、
保存された前記コントローラプロセスのイメージを用いて前記コントローラプロセスのロールバックの実行を制御し、その際、
設定に応じて、前記スイッチプロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記コントローラプロセスのイメージとして、記憶装置に保存し、
前記記憶装置に保存されている前記コントローラプロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記コントローラプロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによって前記コントローラプロセスのロールバックを実行する請求項２７又は２８に記載の通信方法。
【請求項３０】
前記コントローラプロセスが、
スイッチからの要求を処理した後、
１つの操作を処理した後、
定期的に、又は、
ロールバックをトリガする予め定められたイベントの発生に応答して、
前記コントローラプロセスのロールバックを実行するように制御する請求項２９に記載の通信方法。
【請求項３１】
各々がそれぞれに対応するフローに対して通信処理を行う複数の通信プロセスと、
ネットワークインタフェースからパケットを受信し、前記フローがディスパッチされる通信プロセスと、フローとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する通信プロセスにディスパッチするディスパッチ処理と、
通信プロセスの保存されたイメージを用いて前記各通信プロセスをロールバックするロールバック処理として、
前記通信プロセスの状態、又は、実行コード、又は、状態及び実行コードを、前記通信プロセスのイメージとして、記憶装置に保存する処理と、
前記記憶装置に保存されている前記通信プロセスの状態、又は、実行コード、又は、状態及び実行コードを、実行中の前記通信プロセスの既存の状態、又は、実行コード、又は、既存の状態及び実行コードに上書きすることによってロールバックを実行する処理と、
をコンピュータに処理を実行させるプログラム。
【請求項３２】
前記ロールバック処理は、
定期的に、又は、
前記通信プロセスが１又はＮ個（Ｎは２以上の所定の整数である）のフローを処理するたびに、前記通信プロセスをロールバックする請求項３１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、システム、方法、及びコンピュータプログラムに関する。
【背景技術】
【０００２】
ソフトウェアに基づいてネットワークの構成、機能、又は性能を動的に設定又は変更することができるＳＤＮ（Ｓｏｆｔｗａｒｅ  Ｄｅｓｉｇｎｅｄ  Ｎｅｔｗｏｒｋｓ）の一例であるＯｐｅｎＦｌｏｗの概要を以下に説明する。ＯｐｅｎＦｌｏｗスイッチは１つ又は複数のフローエントリを含むフローテーブルを含む。各フローエントリは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数及び受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダフィールド情報がマッチフィールドと一致する受信パケットをスイッチがどのように取り扱うかを指示するアクションを０又はそれ以上含むアクションフィールドと、を含む。ＯｐｅｎＦｌｏｗスイッチは、パケットを受信すると、そのパケットのヘッダフィールド情報を用いてフローテーブルを検索する。ミスヒット（不一致）の場合、ＯｐｅｎＦｌｏｗスイッチは、セキュアチャネルを介して該受信パケットをＯｐｅｎＦｌｏｗコントローラに転送する。
【０００３】
ＯｐｅｎＦｌｏｗコントローラは、ヘッダで指定されたパケットの送信元（ｓｏｕｒｃｅ）と宛先（ｄｅｓｔｉｎａｔｉｏｎ）に関する情報に基づいて、ネットワークトポロジ情報からパケットのパス（ｐａｔｈ：経路）を計算する。ＯｐｅｎＦｌｏｗコントローラはパス上の各ＯｐｅｎＦｌｏｗスイッチのフローエントリを生成し、各フローエントリを該パス上の各ＯｐｅｎＦｌｏｗスイッチに設定する。該パス上の各ＯｐｅｎＦｌｏｗスイッチは、ＯｐｅｎＦｌｏｗコントローラによって設定されたフローエントリのマッチフィールドと一致するヘッダを有する後続パケットを受信すると、該パス上の各ＯｐｅｎＦｌｏｗスイッチは、該フローエントリのアクションフィールドに規定されるように、パケットを次のノードに転送する。なお、ＯｐｅｎＦｌｏｗの詳細については、下記のＮＰＬ（非特許文献４）を参照することができる。
【０００４】
特にＳＤＮにおいては、攻撃に対するネットワークの脆弱性を低減するために、安全なネットワーキングに関する広範な研究開発が行われている。
【０００５】
非特許文献１には、マイクロＮＯＳ（Ｎｅｔｗｏｒｋ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）内で独立してアプリケーションを生成するという概念に基づいて、ネットワークアプリケーションの閉じ込め（ｃｏｎｔａｉｎｍｅｎｔ）及び復元力（ｒｅｓｉｌｉｅｎｃｅ）戦略を実装するＲＯＳＥＭＡＲＹコントローラが提案されている。
【０００６】
非特許文献２では、ＯｐｅｎＦｌｏｗアプリケーションの潜在的な信頼問題に対処するためのＰｅｒｍＯＦが提案されている。信頼性の乱用はネットワーク全体に影響を与えるさまざまな種類の攻撃につながる可能性がある。ＰｅｒｍＯＦでは、コントローラとアプリケーションの間で制御フローとデータの分離が確立される。ＯｐｅｎＦｌｏｗアプリケーションはコントローラカーネルから分離されている。つまり、ＯｐｅｎＦｌｏｗアプリケーションはカーネルプロシージャを呼び出すことも、カーネルメモリを直接参照することもできない。ＯｐｅｎＦｌｏｗアプリケーションとＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の間にアクセス制御レイヤが設けられている。このレイヤはコントローラカーネルによって制御されるため、ＯｐｅｎＦｌｏｗアプリケーションとＯＳとの間の望ましくないインタラクションが遮断される。
【０００７】
非特許文献３では、データプレーン層からより多くの関与を受けてＯｐｅｎＦｌｏｗネットワークのセキュリティと復元力(resilience)を向上させる新しいフレームワークであるＡＶＡＮＴ−ＧＵＡＲＤが提案されている。接続の移行により、データプレーンは制御プレーンを飽和攻撃から保護することができる。ネットワークが攻撃を受けているときに、トリガを作動させると、自動的にフロールールが挿入される。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Seungwon Shin et 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
【非特許文献４】"Openflow Switch Specification" Version 1.0.0. (Wire Protocol 0x01), Internet(URL:http://www.openflowswitch.org/documents/openflow-spec-v1.0.0.pdf)
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述した非特許文献１〜４の開示内容は、参照によって本明細書の一部に組み込まれるものとする。
【００１０】
以下の分析は、本発明者らによってなされたものである。
【００１１】
非特許文献１〜３のような関連技術では、汚染した要素又はプロセスを回復可能とする機構は提供されていない。このため、コンポーネント又はネットワークノードが汚染に感染すると、該汚染はさらにネットワーク全体に広がる可能性がある。
【００１２】
したがって、本発明の目的は、汚染状態からの回復を可能にして安全なネットワーキングを保証するシステム、装置、方法及びプログラムを提供することである。
【課題を解決するための手段】
【００１３】
本開示の一つの態様によれば、各々がそれぞれに対応するフローに対して通信処理を行う複数の通信プロセスと、ネットワークに接続されるように構成された複数のネットワークインタフェースと、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローのディスパッチ先となる通信プロセスとの関連付けを規定したディスパッチルールに基づいて、前記パケットを関連する通信プロセスにディスパッチするディスパッチャと、保存されたイメージを用いて各通信プロセスをロールバックする制御を行う制御部と、を備える通信装置が提供される。
【００１４】
本開示の別の態様によれば、スイッチと、前記スイッチを制御するコントローラと、を備え、前記スイッチは、各々がそれぞれに対応するフローに対してスイッチ処理を行う複数のスイッチプロセスと、ネットワークに接続されるように構成された複数のネットワークインタフェースと、前記ネットワークインタフェースからパケットを受信し、フローと、前記フローのディスパッチ先となるスイッチプロセスとの関連付けを規定したディスパッチルールに基づいて、前記パケットを関連するスイッチプロセスにディスパッチするディスパッチャと、保存されたイメージを用いて各スイッチプロセスをロールバックする制御を行う制御部と、備える通信システムが提供される。
【００１５】
本開示のさらなる態様によれば、フローと、前記フローのディスパッチ先となるスイッチプロセスとの関連付けを規定したディスパッチルールに基づいて、受信パケットを、関連するスイッチプロセスにディスパッチし、
前記関連するスイッチプロセスは前記フローに対応するスイッチプロセスを実行し、
前記保存されたイメージを用いて前記スイッチプロセスをロールバックする制御を行う、通信方法が提供される。
【００１６】
本開示のさらに別の態様によれば、複数の通信プロセスのそれぞれに対応するフローに対して通信処理を行う複数の通信プロセスと、ネットワークインタフェースからパケットを受信し、前記フローがディスパッチされる通信プロセスと、フローとの関連付けを定義するディスパッチルールに基づいて、前記パケットを関連する通信プロセスにディスパッチするディスパッチ処理と、通信プロセスの保存されたイメージを用いて前記各通信プロセスをロールバックするロールバック処理と、コンピュータに処理を実行させるプログラムが提供される。上記プログラムを格納した半導体ストレージ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などの非一時的なコンピュータ読み取り可能な記録媒体が提供される。
【発明の効果】
【００１７】
本発明によれば、ネットワーキングプロセスを汚染から回復可能とし安全なネットワーキングを保証可能としている。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている形態を図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。したがって、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【００１８】
【図１】本発明の例示的な実施形態におけるスイッチの構成を示す図である。
【図２】本発明の例示的な実施形態におけるロールバックを説明する図である。
【図３】本発明の例示的な実施形態におけるスイッチのシーケンスの一例を例示する図である。
【図４】本発明の例示的な実施形態におけるスイッチの変形例を例示する図である。
【図５】本発明の例示的な実施の形態におけるコントローラの構成を示す図である。
【図６】本発明の例示的な実施形態におけるコントローラの変形例を示す図である。
【図７】本発明の例示的な実施形態におけるコントローラにおけるロールバックの変形例を示す図である。
【図８】本発明の例示的な実施形態におけるスイッチプロセスにおけるロールバックシーケンスを示す図である。
【図９】本発明の例示的な実施形態におけるコントローラプロセスにおけるロールバックシーケンスを示す図である。
【図１０Ａ】例示的な実施形態におけるロールバックの変形例の手順を示す図である。
【図１０Ｂ】例示的な実施形態におけるロールバックの変化を示す図である。
【図１１】本発明の例示的な実施形態におけるハイパーバイザを示す図である。
【図１２】本発明の他の例示的な実施形態におけるスイッチの構成を示す図である。
【図１３】本発明の他の例示的な実施形態におけるコントローラの構成を示す図である。
【図１４Ａ】本発明の例示的な実施形態におけるメモリアイソレーションを示す図である。
【図１４Ｂ】ページングを示す図である。
【図１５】本発明の例示的な実施形態におけるテナントベースのネットワークアイソレーションを示す図である。
【図１６】本発明の他の例示的な実施形態におけるスイッチの変形例を示す図である。
【図１７】本発明の他の例示的な実施形態における変形例の手順を説明する図である。
【発明を実施するための形態】
【００１９】
以下、本発明例示的なの実施形態について説明する。図１は、例示的な実施形態におけるスイッチを示す。図１を参照すると、スイッチプロセス１０１（１０１Ａ−１０１Ｃ）、ハイパーバイザ１１０、ディスパッチャ１２０、及び、複数のネットワークインタフェースコントローラ（又はネットワークインタフェースカード）（ＮＩＣｓ）１３０を含むスイッチ１００が提供される。
【００２０】
ＮＩＣｓ１３０とスイッチプロセス１０１（１０１Ａ-１０１Ｃ）との間に配置されたディスパッチャ１２０は、ハイパーバイザ１１０を介して関連するスイッチプロセス１０１にフロー（ＮＩＣｓ１３０から受信したパケット）をディスパッチする。また、ディスパッチャ１２０は、スイッチプロセス１０１から受信したパケットを対応するＮＩＣ１３０に送出し、パケットをネットワークに出力する。ディスパッチャ１２０は、複数の入力ポート（図示せず）及び複数の出力ポート（図示せず）を含み、フローと、該フローに関連するスイッチプロセスとの間の対応関係を示すディスパッチルールに基づき、入力ポートで受信されたパケットをターゲット出力ポートに転送する。ディスパッチャ１２０は、コントローラを有するハードウェアスイッチによって構成してもよいし、ソフトウェアによって実現される仮想スイッチで構成してもよい。フローは、パケットの所定のヘッダフィールド、例えば、送信元（ｓｏｕｒｃｅ：ソース）インタフェース、プロトコル、ソース（送信元）ＩＰアドレス、ソース（送信元）ポート、宛先（ｄｅｓｔｉｎａｔｉｏｎ）ＩＰアドレス、及び宛先ポートのうちの１つ又は組合せによって定義することができる。
【００２１】
ハイパーバイザ１１０は、スイッチプロセスを生成する。図１では、３つのスイッチプロセス１０１Ａ−１０１Ｃが例示されているが、スイッチプロセスの数は３に限定されず、１以上の任意の整数であってもよい。
【００２２】
ハイパーバイザ１１０は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェアリソースを制御するように構成されてもよい。特に限定されないが、ハイパーバイザ１１０は、サーバ仮想化に適用する場合、仮想化されたハードウェア資源、ゲストＯＳ及びアプリケーションを含む仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）を制御するようにしてもよい。仮想化されたハードウェア資源は、例えば、仮想化されたＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、仮想化されたストレージ、仮想化されたネットワークなどを含む。
【００２３】
本実施形態では、スイッチプロセス１０１のプロセスイメージを、図示しないストレージに保存し、スイッチプロセス１０１に関連するコンテンツのハッシュ値やチェックサムなどのインテグリティ尺度（ｉｎｔｅｇｒｉｔｙ  ｍｅａｓｕｒｅ：完全性尺度、あるいは完全性測度とも称せられる）を、スイッチプロセス１０１Ａに関連してログする。そして、その後、スイッチプロセス１０１Ａに関連するコンテンツのインテグリティ尺度が再び計算され、現在計算されたインテグリティ尺度と、以前に計算されて保存されたインテグリティ尺度が同じであるかどうかをチェックすることによって、インテグリティ尺度の検証が実行される。現在計算されたインテグリティ尺度と以前に計算されて保存されたインテグリティ尺度が同じでないことが分かった場合、スイッチプロセス１０１Ａの保存されたプロセスイメージが復元される。これにより、スイッチプロセス１０１Ａのプロセスイメージは、スイッチプロセス１０１Ａに関連するコンテンツが破損する前の状態にロールバックされる。
【００２４】
スイッチ１００において、ハイパーバイザ１１０は、プロセスイメージの保存の実行、インテグリティ検証、及び保存されたプロセスイメージのターゲットプロセスへの復元を制御するように適合されたロールバック制御機能を含むようにしてもよい。
【００２５】
ハイパーバイザ１１０は、例えば１つのフロー又はＮフロー（Ｎは２以上の正の整数）を処理した後、又は定期的にスイッチプロセス１０１のロールバックを制御することができる。
【００２６】
図１を参照して説明した実施形態によれば、スイッチプロセス１０１が汚染によって損なわれた場合であっても、汚染をロールバックによって除去して、安全なネットワーキングに寄与させることができる。
【００２７】
図２に示されるように、ロールバック操作のために、保存されたプロセスイメージ３０１は、プロセスの実行コード（例えば、プロセスに割り当てられたメインメモリ上の命令コード）と状態（例えば変数、レジスタ、スタックポインタ、プロセス用に割り当てられたテーブルの情報）を含む。スイッチプロセス１０１の状態は、後述するフローテーブルを含むようにしてもよい。
【００２８】
ロールバックされるコンテンツには、次の３つのタイプがある。
（ａ）保存された状態が復元される、
（ｂ）保存された実行コードが復元される、及び、
（ｃ）保存された状態及び保存された実行コードが復元される。
【００２９】
具体的には、図２に示すように、
保存された状態３０２は、実行中のスイッチプロセスの既存の状態３０５に上書きされる、
実行中のスイッチ処理の実行コード３０６に実行コード３０３を上書きする、又は、
保存された状態３０２及び実行コード３０３は、実行中のスイッチ処理の既存の状態３０５及び実行コード３０６にそれぞれ上書きされる。
【００３０】
この構成は、ロールバック・シャットダウン・リブート（rollback-shutdown-rebooting）操作と比較して、ロールバック操作による回復プロセスの加速又は高速化に寄与する。保存された状態３０２及び／又は実行コード３０３を、実行中のスイッチ処理に戻す際には、実行中のスイッチ処理については、相互排除や同期などの制御が行われることは勿論である。
【００３１】
次に、スイッチ１００の構成及び動作について、図３及び図４を参照して説明する。
【００３２】
図３は、ディスパッチャ１２０のディスパッチルール及びスイッチ１００のスイッチプロセス１０１のフローエントリを示す。ディスパッチャ１２０は、ストレージ１２２に格納されたディスパッチルールテーブル１２１を含む。ディスパッチルールテーブル１２１は、各フローは、フローがディスパッチされるスイッチプロセスとの関連付けを指定する。なお、図３では、説明を簡単にするために、ディスパッチルールテーブル１２１のフローフィールド（条件フィールド）は、宛先ＩＰアドレスフィールドのみを用いているが、ＭＡＣ等のパケットヘッダの１つ以上の他のフィールドアドレスとＶＬＡＮ  ＩＤを使用してフローを定義してもよい。
【００３３】
ディスパッチャ１２０は、受信したＩＰパケットのＩＰヘッダの解析を行い、ＩＰヘッダの宛先ＩＰアドレスフィールドを抽出し、ディスパッチルールテーブル１２１を検索し、宛先ＩＰアドレスと一致するフローフィールドを持つディスパッチルールを見つける。図３の例では、ディスパッチルールテーブル１２１は、それぞれ、以下の３つのディスパッチルールを含む。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＸであれば、スイッチプロセスＡにパケットをディスパッチする。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＹであれば、スイッチ処理Ｂにパケットをディスパッチする。
受信したパケットヘッダの宛先ＩＰアドレスフィールドがＺであれば、パケットはスイッチプロセスＣにディスパッチされる。この例では、ディスパッチャ１２０は宛先ＩＰアドレス：Ｘの受信ＩＰパケットをスイッチプロセスＡにディスパッチする。
【００３４】
各スイッチプロセス１０１は、ストレージ１０４に格納された１つ又は複数のフローエントリを含むフローテーブル１０３を含む。フローテーブル１０３の各フローエントリは、少なくともマッチフィールド及び動作のリストを含む動作フィールドを含む。スイッチプロセス１０１は、受信したＩＰパケットのＩＰヘッダフィールド情報を用いてフローテーブル１０３を検索する。この例では、ディスパッチャ１２０によってスイッチプロセスＡにディスパッチされたＩＰパケットヘッダの宛先ＩＰアドレスＸが、フローエントリのマッチフィールドと一致していることを発見すると、スイッチプロセスＡは、フローテーブル１０３内の一致するフローエントリの動作フィールドに規定されているアクション１，２，３及び４を実行する。
【００３５】
図４は、図３を参照して説明したスイッチ１００におけるフローセットアップシーケンスの概略を例示する。
【００３６】
図４を参照すると、スイッチ１００はディスパッチされていないフローを受信する（１）。括弧内の数字１は、図４のシーケンス番号１を示し、以下のシーケンスについても同様である。未ディスパッチフローは、ディスパッチルールテーブル１２１にまだフローに対応するスイッチプロセスが割り当てられていないフロー（新規フロー）であり、不一致となる。
【００３７】
スイッチ１００は、コントローラ２００にクエリ（問い合わせ）を送信する（２）。
【００３８】
スイッチ１００からコントローラ２００に送信されるクエリは、コントローラ２００にフロー情報を通知するために、キャプチャされたパケットの少なくともパケットヘッダを含むようにしてもよい。特に制限されないが、スイッチ１００は、該クエリとして、ＯｐｅｎＦｌｏｗプロトコルを使用しセキュアチャネルを介してパケットインメッセージをコントローラ２００に送信するようにしてもよい。パケットインメッセージは、パケットがキャプチャされコントローラに転送された理由を示す理由フィールドと、該パケット（第１のパケット）のキャプチャされた部分を含む。この場合、パケットインメッセージの理由フィールドは、スイッチ１００内のディスパッチルールテーブル１２１での不一致を示すコードを含むようにしてもよい。
【００３９】
スイッチ１００からのクエリを受信すると、コントローラ２００は、クエリに含まれるパケット（第１のパケット）のＩＰパケットヘッダを解析し、新しいフローのディスパッチルールを作成する。
【００４０】
この段階では、コントローラ２００において、新たなフローに関連付けられたコントローラプロセスが未だ割り当てられていない場合がある。なお、コントローラプロセスについては、図５を参照して後述される。予め定められたデフォルトコントローラプロセスは、第１のパケットのＩＰパケットヘッダを分析し、新しいフローのディスパッチルールを作成するようにしてもよい。コントローラ２００は、作成したディスパッチルールをスイッチに送信する（３）。
【００４１】
スイッチ１００は、コントローラ２００から新しいフローのディスパッチルールを受信し、ディスパッチルールテーブル１２１を新しいフローのディスパッチルールで更新する。スイッチ１００内のハイパーバイザ１１０は、スイッチプロセス１０１を起動する。コントローラ２００から受信したディスパッチルールに定義されているスイッチプロセス１０１が既に起動されているが、新しいフローにまだ関連付けられていない場合（例えば、宛先ＩＰアドレス：Ｘ）、スイッチプロセス１０１（例えば、「プロセスＡ」）の起動（ｉｎｖｏｃａｔｉｏｎ）は省略することができる。
【００４２】
次に、スイッチ１００は、コントローラ２００に肯定応答（ＡＣＫ：Acknowledgement）を送信する（５）。
【００４３】
コントローラ２００は、スイッチ１００からのＡＣＫに応答して、コントローラ２００に設けられたストレージに格納されているネットワークトポロジ情報に基づいて新たな経路を算出し、アクションルール（フローエントリ）を作成してスイッチ１００及び経路上の不図示の１つ以上の他のスイッチに送信する（６）。コントローラ２００は、ＯｐｅｎＦｌｏｗコントローラとして、パス上のスイッチ１００のそれぞれに、パケットとマッチさせるためにとるべきアクション、マッチ条件、命令を含むＦｌｏｗＭｏｄ（Ｆｌｏｗ  Ｍｏｄｉｆｙ）メッセージを送信するようにしてもよい。
【００４４】
スイッチプロセス１０１は、ストレージ１０４内のコントローラ２００から送信されたルール（フローエントリ）でフローテーブル１０３を更新する。スイッチプロセス１０１は、第１のパケットに続き、第１のパケットと同じフローに属するパケットを処理するコントローラから受信したフローエントリに転送する（７）。コントローラ２００は、パケットアウトメッセージを使用して第１のパケットをＯｐｅｎＦｌｏｗネットワークのエッジスイッチに送信し、該エッジスイッチから該第１のパケットを宛先ノードに送信するようにしてもよい。
【００４５】
フローエントリが設定された時刻から所定の時間が経過したとき、又はフローエントリが最後に参照された時刻から所定の時間が指定された場合、フローエントリはスイッチ内で削除され、フロー削除メッセージがスイッチからＯｐｅｎＦｌｏｗプロトコルを使用して、コントローラに送信される。これは、フローの終了に対応する。すなわち、スイッチ内のフローテーブル１０３内のフローエントリの設定から、スイッチ内のフローの除去まで、フローの１つのライフサイクルを定義する。
【００４６】
次に、図４のコントローラ２００について説明する。
【００４７】
図５は、例示的な実施形態のコントローラ２００を例示する図である。図５を参照すると、ハイパーバイザ２１０は、各コントローラプロセス２０１（２０１Ａ−２０１Ｃ）の作成／終了を制御する。図５には、説明のために３つのコントローラプロセス２０１Ａ−２０１Ｃが設けられているが、コントローラプロセス２０１の数は３つに限定されず、１以上の任意の整数であってよい。
【００４８】
ディスパッチャ２２０は、ディスパッチルールに基づいて、スイッチ１００（又はスイッチプロセス１０１）からの要求（パケットインメッセージなど）を受信し、関連するコントローラプロセス２０１に該要求をディスパッチする。ディスパッチャ２２０内のディスパッチルールは、スイッチに接続されたポートＩＤとコントローラプロセスＩＤとの間の対応関係を含むことができる。スイッチに接続されたポートＩＤとコントローラプロセスＩＤとの対応関係は、コントローラプロセスとスイッチの信頼レベル（ｔｒｕｓｔ  ｌｅｖｅｌ）に基づいて決定されてもよい。対応関係は、仮想ネットワークに基づいて決定されてもよい。例えば、仮想ネットワークＡを制御するコントローラプロセスと、ネットワークＡのトラフィックを扱うスイッチプロセスとが接続される。
【００４９】
ハイパーバイザ２１０は、プロセスイメージの保存、インテグリティ検証、及び、プロセスイメージの復元のロールバック制御機能を含む。ハイパーバイザ２１０のこのロールバック制御機能は、上述したスイッチ１００のハイパーバイザ１１０のロールバック制御機能に対応する。
【００５０】
ハイパーバイザ２１０は、例えば、スイッチ１００からの要求を処理した後（又はフロー（又はＮフロー）を処理した後）に、コントローラプロセス２０１Ａ−２０１Ｃのそれぞれのロールバックを制御する。ハイパーバイザ２１０は、例えば１時間当たり、１日当たり、というように、定期的にロールバックを実行してもよい。本実施形態によれば、汚染（ｃｏｎｔａｍｉｎａｔｉｏｎ）によりコントローラプロセスが壊れても、ロールバックにより該汚染を除去してコントローラプロセスを復元することが可能となる。
【００５１】
コントローラプロセス２０１のプロセスイメージは、実行コード及び状態（プロセスに割り当てられた変数、レジスタ及びテーブルの情報）を含む。コントローラプロセスの状態は、ネットワークトポロジ情報を含んでもよい。
【００５２】
スイッチプロセス１０１のロールバックに関して、図２を参照して説明したように、コントローラプロセス２０１のロールバックは、
（ａ）保存状態が復元される、
（ｂ）保存された実行コードが復元される、
（ｃ）保存された状態及び保存された実行コードが復元される、
の３つのタイプを含む。図２に示すように、保存された状態及び／又は実行コードは、実行中のコントローラプロセス２０１の既存の状態及び／又は実行コードに上書きされる。この構成は、ロールバック・シャットダウン・リブート操作と比較して、ロールバック操作による回復プロセスの加速又は高速化に寄与する。保存された状態３０２及び／又は実行コード３０３を実行中のコントローラプロセス２０１に復元する際には、実行中のコントローラプロセス２０１に対して、相互排他及び同期などの制御が行われてもよいことは勿論である。
【００５３】
図６は、コントローラ２００の変形例を示す図である。図６に示すように、コントローラプロセス２０１Ａ−２０２Ｃは、ハイパーバイザ２１０によって起動される
【００５４】
ディスパッチャ２２０（サウスバウンド（Ｓｏｕｔｈｂｏｕｎｄ）ＡＰＩ用のディスパッチャ）は、スイッチ１００（又はスイッチ内のスイッチプロセス）から関連するサウスバウンドＡＰＩ２０３及びコントローラプロセス２０１へリクエスト（ＡＰＩ（アプリケーションプログラムインターフェイス）コール）をディスパッチする。ディスパッチャ２２０からのリクエスト（ＡＰＩコール）は、サウスバウンドＡＰＩ２０３を介してコントローラコアプロセス（コア機能）２０２に転送される。
【００５５】
ディスパッチャ２３０（ノースバウンド（Ｎｏｒｔｈｂｏｕｎｄ）ＡＰＩのためのディスパッチャ）は、アプリケーション２５０（例えばロードバランサ、ファイアウォール等）から関連するノースバウンドＡＰＩ２０４へのリクエスト２５１（ＡＰＩコール）をディスパッチする。ディスパッチャ２２０からのリクエスト（ＡＰＩコール）は、ノースバウンドＡＰＩ２０４を介してコントローラプロセス２０１に転送される。
【００５６】
サウスバウンドＡＰＩ２０３Ａ−２０３Ｃは、コントローラプロセス２０１Ａ−２０１ＣがＳＤＮスタックの最下部にあるスイッチの挙動を定義することを可能にする。ノースバウンドＡＰＩ２０４Ａ〜２０４Ｃは、コントローラプロセス２０１Ａ〜２０１Ｃとアプリケーション２０５Ａ〜２０５Ｃ又は上位層制御プログラムとの間の通信インタフェースを、ＳＤＮスタックの最上部に指定する。アプリケーション２０５Ａ−２０５Ｃは、ノースバウンドアプリケーションとも呼ばれる。
【００５７】
特に制限されないが、この実施例では、ディスパッチャ２２０及び２３０は、「テナント」に基づいて、ＡＰＩコールをディスパッチしてもよい。
【００５８】
ハイパーバイザ２１０は、例えば、スイッチ１００又はアプリケーション２５０からのパケットインメッセージなどの要求を処理した後、又はフロー（又はＮ個のフロー）を処理した後に、コントローラプロセスのロールバックを制御する。この例では、コントローラプロセスが、ウイルス等に感染した場合であっても、汚染されていないプロセスイメージにロールバックすることによって、該汚染は除去可能とされている。
【００５９】
プロセスイメージは、実行コード及び／又は状態（プロセスに割り当てられた変数、レジスタ、及びテーブルの情報）を含む。コントローラプロセス２０１の状態は、特に制限されないが、ネットワークトポロジ情報を含むことができる。この例では、ロールバックには、図５を参照して説明したコントローラ２００と同様に、
（ａ）保存状態の復元、
（ｂ）保存した実行コードの復元、及び、
（ｃ）保存した状態と保存した実行コードの復元、
が行われる。図２に示すように、保存された状態及び／又は実行コードは、実行中のコントローラプロセスの既存の状態及び／又は実行コードに上書きされる。
【００６０】
図７は、図６のコントローラプロセス２０１のロールバックの変形を示す図である。図７に、模式的に示されるように、コントローラプロセス２０１の一部は、サウスバウンドＡＰＩ２０３又はノースバウンドＡＰＩ２０４が配置されるように、別々にロールバックされてもよい。外側に配置されたサウスバウンドＡＰＩ２０３又はノースバウンドＡＰＩ２０４は、内側に配置されたコントローラコアプロセス２０２よりも外部（ネットワーク又はアプリケーション）からの汚染にさらされやすい。したがって、サウスバウンドＡＰＩ２０３又はノースバウンドＡＰＩ２０４のロールバックは、コントローラコアプロセス２０２と比較してより頻繁に実行されてもよい。
【００６１】
ロールバックは、コントローラプロセス２０１がネットワークトポロジディスカバリを実行するとき、すなわち、１つのオペレーションを処理した後に、実行されるようにしてもよい。あるいは、コントローラコアプロセス２０２のロールバックは、定期的に実行されてもよい。
【００６２】
ロールバックのタイミングは、セキュリティレベルに基づいて変更されてもよい。例えば、重要なフローを処理する１つ以上のコントローラプロセス２０１は、比較的短い間隔で保存されて検証が行われ、他のコントローラプロセスは、比較的長い間隔で保存されて検証が行なわれるようにしてもよい。
【００６３】
図８は、図１のスイッチプロセス１００のプロセスライフサイクルを示す。ステップＳ０で終了又は中断されたスイッチプロセスＮは、ハイパーバイザ１１０によってロールバックされる（保存された実行コードが復元される）（Ｓ１）。そして、保存された状態が復元される（Ｓ２）。
【００６４】
スイッチプロセスＮは、パケットを待つ（Ｓ３）。スイッチプロセスＮは、パケットを受信すると、フローテーブルを検索する。受信したパケットのパケットヘッダ情報と一致するフローエントリを見つると、スイッチプロセスＮは、一致するフローエントリのアクションフィールドに従って、受信したパケットを処理する。この場合、スイッチプロセスＮは、パケットを次のノードに転送する。スイッチプロセスＮの状態又はフローテーブルが保存され、スイッチプロセスＮの実行コードが保存される（Ｓ６）。スイッチプロセスＮは終了（ｔｅｒｍｉｎａｔｅ）又は中断（ｓｕｓｐｅｎｄ）される（Ｓ０）。他のスイッチプロセス１−Ｎ−１も、スイッチプロセスＮと同様に制御される。
【００６５】
図９は、図６のコントローラプロセス２０１のプロセスライフサイクルを例示している。終了又は中断（Ｓ０）されたコントローラプロセス（コントローラコアプロセス）Ｎ及び保存された実行コードは、ハイパーバイザ１１０によってロールバックされる（Ｓ１）。そして、保存された状態が復元される（Ｓ２）。コントローラプロセス（コントローラコアプロセス）Ｎは、サウスバウンド／ノースバウンドＡＰＩからのリクエストを待つ（Ｓ３）。コントローラプロセス（コントローラコアプロセス）Ｎは、サウスバウンド／ノースバウンドＡＰＩからリクエストを受信すると（Ｓ４）、サウスバウンド／ノースバウンドＡＰＩに決定（応答）を送信する。状態又はトポロジ情報が保存され、コントローラプロセス（コントローラコアプロセス）Ｎの実行コードが保存される（Ｓ６）。コントローラプロセス（コントローラコアプロセス）Ｎは、終了又は中断される（Ｓ０）。
【００６６】
以下、本実施形態におけるロールバック制御の変形例について説明する。ここでは、復元対象のロールバックイメージのインテグリティ検証が行われる。
【００６７】
図１０Ａは、本実施形態におけるロールバック制御の変形例の手順を示している。図１０Ａの手順は、スイッチ１００とコントローラ２００の両方におけるロールバック制御に適用することができる。
【００６８】
プロセス（スイッチプロセス１０１／コントローラプロセス２０１）は、ハイパーバイザ（１１０／２１０）によって呼び出される（Ｓ１１）。
【００６９】
状態／実行コードが保存され、ハイパーバイザ（１１０／２１０）の制御によってハッシュ値などのインテグリティ尺度が保存される（Ｓ１２）。
【００７０】
コントローラは、要求を処理するか、又はスイッチがフローを処理する（Ｓ１３）。
【００７１】
ロールバックイメージのインテグリティ尺度が計算され、保存されたインテグリティ尺度と比較される（Ｓ１２）（Ｓ１４）。
【００７２】
今回計算されたインテグリティ尺度が、保存されたインテグリティ尺度と一致しない場合（Ｓ１５のＮｏ分岐、ロールバックイメージが変更されたことを意味する）、ハイパーバイザ（１１０／２１０）はアラート（警告）を表示する（Ｓ１６）。ロールバックイメージが変更されていない場合は、ロールバックイメージを用いてプロセスが復元される（Ｓ１７）。
【００７３】
上記の実施形態では、ハイパーバイザ（１１０／２１０）は定期的にロールバックを実行するようにしてもよい。あるいは、ハイパーバイザ（１１０／２１０）は、所定のイベントが発生したときにロールバックを実行するようにしてもよい。例えば、ハイパーバイザ（１１０／２１０）は、実行中の各プロセスのインテグリティを測定するようにしてもよい。ハイパーバイザ（１１０／２１０）が汚染を識別した場合に、ハイパーバイザ（１１０／２１０）はロールバックを実行するようにしてもよい。さらに、ハイパーバイザ（１１０／２１０）は、各プロセスの動作を監視し、異常動作を実行するプロセスをロールバックするようにしてもよい。
【００７４】
図１０Ｂは、ロールバックイメージ管理の変形例を図解する。上記において、ハイパーバイザ２１０は、ハイパーバイザがプロセスを起動するたびに、ロールバックイメージを保存するが、ハイパーバイザ２１０はロールバックイメージを定期的に保存してもよい。例えば、ハイパーバイザ２１０は、特に制限されないが、ロールバックイメージを１０分間隔で保存／更新するようにしてもよい。ハイパーバイザ（１１０／２１０）は、ロールバックをトリガするための予め定められたイベント（例えば、実行中プロセスのインテグリティチェックの失敗、異常な挙動の発見など）の発生時に、最新のロールバックイメージを用いてプロセスのロールバックするようにしてもよい。
【００７５】
ロールバックイメージがスイッチプロセス１０１のフローエントリを含む場合、ロールバックイメージとして保存されたフローエントリは、スイッチプロセス１０１の現在の（既存の）フローエントリに上書きされる。この場合、スイッチプロセス１０１は、フローエントリを要求するメッセージをコントローラに送信し、現在のフローエントリを取得する。代替的に、スイッチプロセス１０１は、ロールバックイメージの復元によって上書きされないストレージ内の現在のフローエントリをレプリカとして保存し、ロールバックが完了した後、スイッチプロセス１０１は、保存されたレプリカから、現在のフローエントリを復元するようにしてもよい。コントローラプロセス２０１のロールバックイメージの状態に関しても同様である。
【００７６】
次に、スイッチ１００におけるハイパーバイザ１１０の例を説明する。図１１は、スイッチ１００におけるロールバック制御部としてのハイパーバイザ１１０の構成を示す図である。図１１では、ロールバック制御に関係したハイパーバイザ１１０の構成要素が模式的に示されており、ハイパーバイザ１１０内の他の要素は省略されている。
【００７７】
図１１を参照すると、プロセス起動／再開部１１１は、スイッチプロセス１０１を起動（再ブート）又は再開する。プロセス終了／中断部１１２は、スイッチプロセス１０１を終了又は中断する。プロセス起動／再開部１１１は、中断したスイッチプロセス１０１、すなわち、スイッチプロセス１０１のサスペンド状態を解除する。状態／コード保存部１１３は、スイッチプロセスの状態及び／又は実行コードをストレージ１１８に保存する。インテグリティ尺度計算部１１４はスイッチプロセス１０１のハッシュ値を含むインテグリティ尺度を計算する。インテグリティ尺度保存部１１５は、インテグリティ尺度計算部１１４によって今回計算されたインテグリティ尺度を保存する。インテグリティ尺度検査部１１６は、インテグリティ尺度計算部１１４によって今回計算されたインテグリティ尺度と、前に計算され保存されたインテグリティ尺度は同じであるか否かをチェック（検査）する。
【００７８】
状態／コード復元部１１７は、図２を参照して説明したように、状態コード及び／又は実行コードに、保存された状態コード及び／又は実行コードを上書きする。ロールバックコントローラ機能は、コンピュータプログラムによって実現されてもよい。図５及び図６のハイパーバイザ２１０は、コントローラプロセスのロールバック制御に関して、図１１を参照して説明したのと同じように構成してもよい。
【００７９】
図１２は、他の実施形態におけるスイッチの構成を示す図である。図１２を参照すると、スイッチプロセス１０１（１０１Ａ−１０１Ｃ）は、隔離された（アイソレーテッド）環境１０２（１０２Ａ−１０２Ｃ）で実行されるように構成されている。アイソレーション技術は、システム全体に影響を与えずにマルウェアの実行が可能な封じ込め環境を提供する。マルウェアによる被害は、隔離された環境に閉じ込められる。すなわち、スイッチプロセスがマルウェアによって損なわれたとしても、マルウェアは隔離された環境１０２に閉じ込められ、他のフローに影響を及ぼすことはできない。
【００８０】
この例示的な実施形態では、ハイパーバイザ１１０は、特に制限されないが、メモリアイソレーションを提供する。隔離された環境１０２Ａのスイッチプロセス１０１Ａに割り当てられたメモリ領域（隔離された領域）は、他の隔離された環境１０２Ｂ及び１０２Ｃの他のスイッチプロセス１０１Ｂ及び１０１Ｃに割り当てられた他のメモリ領域（隔離された領域）から隔離され、スイッチプロセス及びＯＳによって共有される共有領域を除いて、ＯＳ／ハイパーバイザ又はデバイスドライバ（図示せず）に割り当てられたメモリ領域から隔離される。
【００８１】
図１４Ａは、ハイパーバイザ又はハードウェアベースのメモリ保護の例を示す。図１４Ａに示すように、処理１，２に割当てられた隔離された領域１，２（２１、２２）は、メモリ２０内の別々のメモリ領域である．ＯＳ（ハイパーバイザ）に割り当てられたＯＳ／ハイパーバイザ領域２３は、プロセス１とプロセス２（１１、１２）に割り当てられる隔離された領域１と２（２１、２２）とは異なる。このため、ＯＳ（ハイパーバイザ）は、プロセス１１、１２から保護されている。プロセス（１１、１２）によってアドレス指定されるメモリ空間は異なるので、各プロセス（１１、１２）は、他のプロセスの隔離された領域にアクセスすることはできない。
【００８２】
特に制限されないが、ハイパーバイザ又はハードウェアベースのＭＭＵ（Memory Management Unit）は、プロセスのメモリ空間のベースアドレスが設定されるリロケーションレジスタ（図示せず）を用いて各プロセスの論理（仮想）アドレスから物理アドレスへの変換を行う。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。ＭＭＵは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあることをチェックする。これはメモリ保護機構として機能する。プロセスがアクセス権を持たないメモリ空間にアクセスする、又はプロセスに割り当てられたベースアドレスとリミットによって定義された範囲外にアクセスする等、フォルトプロセスによるメモリアクセス違反の発生をＭＭＵが検出すると、フォルトプロセスは、トラップによるアドレッシングエラーの通知を受けるか、アドレッシングエラーの通知とともにアボート（abort）される可能性がある。
【００８３】
ＭＭＵベースのメモリ保護は、図１４Ｂに示すようなページテーブルによって実現するようにしてもよい。ＭＭＵはページベースのＭＭＵに限定されず、例えば、セグメントベースのメモリ保護等も採用されてもよい
【００８４】
ページは、固定長の連続ブロックである（例えば、４ＫＢ（Kilo Bytes））。プロセスから発行される論理アドレス（仮想アドレス）３０は、ページ番号フィールド（ｎ−ｍビット）及びオフセットフィールド（ｍビット）を含む。この場合、ページサイズは２＾ｍである。＾は冪乗演算子を表し、プロセスのメモリアドレス空間は２＾ｎである。論理アドレス３０のページ番号Ｘ（上位ｎ−ｍビット）が抽出され、インデックス（ページエントリ）として、ページテーブル３１に供給される。ページテーブル３１のＸ番目のエントリに格納されている値Ｚ（ｐビット）が、ページテーブル３１から読み出される。すなわち、ページテーブル３１は、ＸからＺへのページ変換を行う。一般にＺのビット長ｐはＸのビット長ｐよりも長い。Ｚは、上位ビットとして、論理アドレス３０の下位ｍビットＹと組み合わされ、メモリ（マシンメモリ）３３に供給する物理アドレス３２が生成される。この場合、メモリ３３のＺページのオフセットアドレスＹがアクセスされる。
【００８５】
例示的な実施形態では、ハイパーバイザ１１０は、それ自身のメモリ領域に、各スイッチプロセスのページテーブルを保持するように構成されている。これによって、プロセスがページ変換（page translation）を改ざんすることが防止される。
【００８６】
スイッチプロセス及びＯＳ／ハイパーバイザによって共有される共有メモリ領域に対して、ＯＳ／ハイパーバイザは、該共有メモリ領域への書き込み操作の実行が許可されるように、アクセス制御情報に基づいて、スイッチプロセスから該共有メモリ領域への読み取り／書き込みアクセスを制御するアクセスコントローラを備えてもよい。
【００８７】
この例では、各スイッチプロセス１０１のロールバックは、前述の例示的な実施形態と同様に、フローごと（Ｎフローごと）に、ハイパーバイザ１１０による制御によって実行される。
【００８８】
ロールバック制御とプロセスアイソレーションを組み合わせることで、ネットワークセキュリティの向上に貢献することが可能である。例えば、フローの処理において汚染又は破損したスイッチプロセスは、汚染又は破損がまだ行われていない時点のプロセスイメージにロールバックされ、該スイッチプロセスの汚染は、ロールバックが実行されるまで、隔離された環境に閉じ込められており、ネットワークの安全確保に貢献する。
【００８９】
図１３は、本実施形態におけるコントローラ２００を示す図である。図１３を参照すると、ハイパーバイザ２１０は、隔離された環境２０５Ａ−２０５Ｃを作成し、隔離された環境２０５Ａ−２０５Ｃ内のコントローラプロセス２０１Ａ−２０１Ｃをそれぞれ起動する。ハイパーバイザ２１０は、スイッチ１００と同様に、隔離された環境２０５Ａ−２０５Ｃで実行されるコントローラプロセス２０１Ａ〜２０１Ｃを隔離する。
【００９０】
ディスパッチャ２２０は、ストレージ２２２に格納されたディスパッチルールに基づいて、スイッチ１００（又はスイッチプロセス１０１）からのリクエスト（パケットインメッセージなど）を受信し、該メッセージを関連付けられたコントローラプロセス２０１にディスパッチする。
【００９１】
ストレージ２２２に格納されたディスパッチルールは、スイッチに接続されたポートＩＤとコントローラプロセスＩＤとの間の対応関係を含むようにしてもよい。スイッチに接続されたポートＩＤとコントローラプロセスＩＤとの間の対応関係は、コントローラプロセス及びスイッチの信頼レベルに基づいて決定するようにしてもよい。この場合、例えば、アントラステッド（ｕｎｔｒｕｓｔｅｄ：信頼できない）スイッチプロセスからのメッセージはアントラステッド（ｕｎｔｒｕｓｔｅｄ）コントローラプロセスにディスパッチされ、トラステッド（ｔｒｕｓｔｅｄ：信頼できる）スイッチプロセスからのメッセージをトラステッド（ｔｒｕｓｔｅｄ）コントローラプロセスにディスパッチされるようにしてもよい。
【００９２】
この例では、各コントローラプロセス２０１のロールバックは、前述の例示的な実施形態と同様に、ハイパーバイザ２１０の制御によって実行される。
【００９３】
隔離された環境内で実行されるコントローラプロセスのロールバックによって、汚染された又は破損されたコントローラプロセスは、汚染又は破損をまだ受けていないプロセスイメージにロールバックされる。コントローラプロセス２０１内の汚染は、ロールバックが実行されるまで隔離された環境に閉じ込められ、ネットワークセキュリティの向上に貢献する。
【００９４】
図１５は、本実施形態に係るデータセンタの一例を示す図である。コントローラ２００は、図５、図６又は図１３を参照して説明したコントローラ２００に対応する。スイッチ１００−１及び１００−２は、それぞれ図１又は図２を参照して説明したスイッチ１００に対応する。図１５を参照すると、テナントベースのセキュリティポリシーがデータセンターネットワークで採用されている。
【００９５】
テナントＡホスト１５１−１ＡとテナントＡホスト１５１−２Ａとは、スイッチ１００−１のテナントＡ用スイッチプロセス１０１−１Ａと、スイッチ１００−２のテナントＡ用スイッチプロセス１０１−２Ａにそれぞれ接続される。スイッチ１００−１のテナントＡ用スイッチプロセス１０１−１Ａと、スイッチ１００−２のテナントＡ用スイッチプロセス１０１−２Ａは、テナントＡ用コントローラプロセス２０１−Ａに接続される。
【００９６】
テナントＢホスト１５１−１ＢとテナントＢホスト１５１−２Ｂとは、スイッチ１００−１のテナントＢ用スイッチプロセス１０１−１Ｂと、スイッチ１００−２のテナントＢ用スイッチプロセス１０１−２Ｂにそれぞれ接続される。スイッチ１００−１におけるテナントＢ用スイッチプロセス１０１−１Ｂと、スイッチ１００−２におけるテナントＢ用スイッチプロセス１０１−２Ｂは、テナントＢ用コントローラプロセス２０１−Ｂに接続されている。このネットワーク構成では、テナントネットワークＡ（Ｂ）が汚染された場合、該汚染はテナントネットワークＡ（Ｂ）に限定される。
【００９７】
この例では、上記した例示的な実施形態と同様、ハイパーバイザ１１０（図１、図１３参照、図１５には図示せず）の制御により、スイッチプロセス１０１−１Ａ、１０１−１Ｂ、１０１−２Ａ、１０１−２Ｂのそれぞれがロールバックされる。コントローラプロセス２０１−Ａ、２０１−Ｂのそれぞれのロールバックは、前述の例示的な実施形態と同様に、ハイパーバイザ２１０（図１５には図示せず）の制御によって実行される。
【００９８】
隔離された環境で実行されるプロセスのロールバックでは、ロールバックが実行されるまで、プロセス内の汚染が隔離された環境に閉じ込められ、汚染されたプロセス又は破損したプロセスは、汚染や破損の影響を受けていない以前のクリーンなプロセスイメージにロールバックされ、これにより、ネットワークのセキュリティを確保している。
【００９９】
図１６は、本実施形態の更なる変形例の構成を示す図である。図１６を参照すると、ディスパッチャ４２０が、パケット処理ハードウェア４１０と管理プロセス４０１Ａ−４０１Ｃとの間に配置される。
【０１００】
この実施形態では、パケット処理ハードウェア４１０によってパケット処理が行われ、管理プロセス４０１Ａ−４０１Ｃは、ＯｐｅｎＦｌｏｗチャネルを介して、図１６に示されていないコントローラプロセスと通信する。管理プロセス４０１Ａ−４０１Ｃのそれぞれは、パケット処理ハードウェア４１０へ／からのフローエントリを受信／削除する。その後、パケット処理ハードウェア４１０は、フローエントリに従ってそれぞれのパケットを処理する。
【０１０１】
ディスパッチャ４２０は、それぞれのフローエントリの追加及び削除をモニタする。パケット処理ハードウェア４１０は、フローエントリと一致しないパケットを受信すると、ディスパッチャ４２０に不一致を通知する。そして、ディスパッチャ４２０は、対応するディスパッチルールに従って、管理プロセス４０１Ａ―４０１Ｃのうちの対応する１つに通知を転送する。具体的には、通知は、ＩＰアドレス、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、ＶＬＡＮ（Ｖｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）タグなどのパケット情報が含んでもよい。ディスパッチャ４２０は、パケット情報とディスパッチルールとを比較して、パケットのヘッダ情報とマッチするディスパッチルールを見つけ、ディスパッチ先の管理プロセスを決定する。
【０１０２】
さらに、ディスパッチャ４２０は、１つ又は複数のフローエントリと、１つ又は複数のディスパッチルールとの間の競合（ｃｏｎｆｌｉｃｔ）をチェックするように構成されてもよい。具体的には、管理プロセス（例えば、４０１Ａ）が、１つ以上の他の管理プロセス（４０１Ｂ及び４０１Ｃ）の１つ又は複数のディスパッチルールと競合するフローエントリを追加しようとする場合、ディスパッチャ４２０は、フローエントリを拒否（ｄｅｎｙ）する。例えば、ディスパッチルールがＶＬＡＮ  ＩＤ１２３と管理プロセス４０２Ｂとを対応付けているものとする。管理プロセス４０２Ａは、マッチフィールドがＶＬＡＮ  ＩＤ＝１２３を指定したフローエントリを入力しようとすると、ディスパッチャ４２０は該フローエントリを拒否する。すなわち、ディスパッチャ４２０は、管理プロセス４０２Ａがそのフローエントリをフローテーブルに追加することを許可しない。
【０１０３】
図１７に、例示的な実施形態におけるロールバック手順の変形を示す。この手順では、まず、ハイパーバイザ（１１０／２１０）が、ロールバックイメージを用いてプロセス（スイッチプロセス／コントローラプロセス／管理プロセス）を作成する（Ｓ２１）。
【０１０４】
プロセスの作成後、ディスパッチャ（１２０／２２０／４２０）は、旧（既存）プロセスの代わりに、新プロセス（スイッチプロセス／コントローラプロセス／管理プロセス）が要求（ｒｅｑｕｅｓｔ）又はパケットを処理できるように、ディスパッチルールテーブル（１２１）内の１つ又は複数のディスパッチルールを変更する（Ｓ２２）。具体的には、ディスパッチャ（１２０／２２０／４２０）は、フローがディスパッチされるプロセスへのフローの関連付けを定義するディスパッチルール内のプロセスフィールドを、旧プロセスから新プロセスに変更する。
【０１０５】
最後に、ハイパーバイザ（１１０／２１０）は旧プロセスを終了する（Ｓ２３）。
【０１０６】
上記のロールバック手順は、ロールバックによるダウンタイムの低減に寄与することができる。その理由は、ディスパッチルールの変更（旧プロセスから新プロセスへの切り替え）は、ロールバックプロセスと比較して高速であるためである。
【０１０７】
また、上述した実施形態では、仮想マシン上で動作するプロセスをハイパーバイザが制御する構成について説明したが、ハイパーバイザを持たないプロセッサ上で動作するプロセスや、サーバ仮想化を伴わないプロセスに対しても適用可能である。また、上述した実施形態では、仮想マシン上のプロセスが、ハイパーバイザの制御により、隔離された環境で実行される構成について説明したが、本実施形態の概念は、ハイパーバイザを使用しないメモリアイソレーションなど、プロセスに隔離環境を提供することが可能なプロセッサ上で動作するプロセスに対しても適用可能である。
【０１０８】
上記実施形態では、ＯｐｅｎＦｌｏｗスイッチ及びコントローラへの適用例を説明したが、本発明の適用はＯｐｅｎＦｌｏｗネットワークに限定されるものでないことは勿論である。
【０１０９】
なお、上記非特許文献の開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１１０】
１１  プロセス１
１２  プロセス２
２０  マシンメモリ
２１  隔離された領域（Ｉｓｏａｔｅｄ  Ａｒｅａ）１
２２  隔離された領域（Ｉｓｏａｔｅｄ  Ａｒｅａ）２
２３  ＯＳ／ハイパーバイザ領域
３０  論理アドレス
３１  ページテーブル
３２  物理アドレス
３３  マシンメモリ
５１−５３  ノード
１００、１００Ａ−１００Ｃ  スイッチ
１００−１  スイッチ−１
１００−２  スイッチ−２
１０１、１０１Ａ−１０１Ｃ  スイッチプロセス
１０２、１０２Ａ−１０２Ｃ  隔離された環境（Ｉｓｏａｔｅｄ  Ｅｎｖｉｒｏｎｍｅｎｔ）
１０１−１Ａ、１０１−２Ａ  テナントＡ用スイッチプロセス
１０１−１Ｂ、１０１−２Ｂ  テナントＢ用スイッチプロセス
１０３  フローテーブル
１０４  ストレージ（記憶装置）（フローエントリ）
１０６Ａ  テナントネットワークＡ
１０６Ｂ  テナントネットワークＢ
１１０  ハイパーバイザ
１１１  プロセス起動（invocation）／再開(resume)部
１１２  プロセス終了(termination)／中断（suspend）部
１１３  状態／コード保存部
１１４  インテグリティ尺度（Integrity measure）計算部
１１５  インテグリティ尺度保存部
１１６  インテグリティ尺度検査部
１１７  状態／コード復元部
１１８  ストレージ（記憶装置）
１２０  ディスパッチャ
１２１  ディスパッチルールテーブル
１２２  ストレージ（記憶装置）
１３０  ＮＩＣｓ（ネットワークインタフェースコントローラ：複数）
１５１−１Ａ、１５１−２Ａ  テナントＡホスト
１５１−１Ｂ、１５１−２Ｂ  テナントＢホスト
２００  コントローラ
２０１、２０１Ａ−２０１Ｃ  コントローラプロセス
２０２、２０２Ａ−２０２Ｃ  コントローラコアプロセス
２０１−Ａ  テナントＡ用コントローラプロセス
２０１−Ｂ  テナントＢ用コントローラプロセス
２０３、２０３Ａ−２０３Ｃ  サウスバウンドＡＰＩ
２０４、２０４Ａ−２０４Ｃ  ノースバウンドＡＰＩ
２０５Ａ−２０５Ｃ  隔離された環境
２１０  ハイパーバイザ
２２０  ディスパッチャ（サウスバウンドＡＰＩのディスパッチャ）
２２２  ストレージ（ディスパッチルール）
２３０  ディスパッチャ（ノースバウンドＡＰＩのディスパッチャ）
２４０Ａ−２４０Ｃ  スイッチ
２４１Ａ−２４１Ｃ  リクエスト
２５０、２５０Ａ−２５０Ｃ  アプリケーション
２５１Ａ−２５１Ｃ  リクエスト
３０１  保存されたプロセスイメージ
３０２  状態
３０３  実行コード
３０４  実行中のプロセス
３０５  状態
３０６  実行コード
４０１、４０１Ａ−４０１Ｃ  管理プロセス
４１０  パケット処理ハードウェア
４２０  ディスパッチャ
【図１】
0006489239.tif 000002
【図２】
0006489239.tif 000003
【図３】
0006489239.tif 000004
【図４】
0006489239.tif 000005
【図５】
0006489239.tif 000006
【図６】
0006489239.tif 000007
【図７】
0006489239.tif 000008
【図８】
0006489239.tif 000009
【図９】
0006489239.tif 000010
【図１０Ａ】
0006489239.tif 000011
【図１０Ｂ】
0006489239.tif 000012
【図１１】
0006489239.tif 000013
【図１２】
0006489239.tif 000014
【図１３】
0006489239.tif 000015
【図１４Ａ】
0006489239.tif 000016
【図１４Ｂ】
0006489239.tif 000017
【図１５】
0006489239.tif 000018
【図１６】
0006489239.tif 000019
【図１７】
0006489239.tif 000020