(57)【要約】【課題】ネットワーク処理負荷の低減を伴う、整合性を持つロールバックプロトコルを有する通信システムの提供。【解決手段】通信装置は、第１のプロセスを第２のプロセスにロールバックするロールバック制御部と、前記第１のプロセスおよび前記第２のプロセスによって共有される１つ以上のネットワーク状態を記憶する記憶部とを備え、前記第２のプロセスは１つ以上のネットワーク状態を前記第１のプロセスから引き継ぐことが可能であり、前記ロールバック制御部は、前記第２のプロセスによって引き継がれる前記１つ以上のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む。【選択図】図１
2019530267.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロセスを第２のプロセスにロールバックするロールバック制御部と、
前記第１のプロセス及び前記第２のプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、
を備え、前記第２のプロセスは前記１つ又は複数のネットワーク状態を前記第１のプロセスから引き継ぐことが可能であり、
前記ロールバック制御部は、
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む、ことを特徴とする通信装置。
【請求項２】
前記ネットワーク状態制御部は、前記第２のプロセスによって引き継がれるネットワーク状態の更新を、前記第２のプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせるように制御する、ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記ネットワーク状態制御部は、前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新するように制御する、ことを特徴とする請求項１記載の通信装置。
【請求項４】
前記ネットワーク状態制御部は、前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のプロセスがアイドル状態のときに更新するように制御する、ことを特徴とする請求項１記載の通信装置。
【請求項５】
バッファと、
ロールバックのタイミングを制御するように構成されたタイミング制御部と、
をさらに備え、
前記ロールバック制御部は、
前記第１のプロセスが前記ロールバック中にイベントを処理しているときに、前記バッファが、前記第１のプロセス宛に送信された１つ又は複数の受信イベントのすべてを格納するように設定してイベントバッファリングを開始するように制御し、
前記ロールバック制御部は、
前記タイミング制御部の制御の下、前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへの稼働プロセスの切り替えを行い、
前記ロールバック制御部は、
前記イベントバッファリングの開始から前記バッファに格納された前記１つ又は複数のイベントのすべてを、前記第１のプロセスから切り替えられた前記第２のプロセスに送信し、前記イベントバッファリングを終了するように制御する、ことを特徴とする請求項１乃至４のいずれか１項に記載の通信装置。
【請求項６】
マッチ条件と前記マッチ条件に対応する受信信号がディスパッチされるターゲットプロセスとの間の対応関係を定義するディスパッチルールに基づいて、受信した信号を関連するプロセスにディスパッチするディスパッチャをさらに備える、ことを特徴とする請求項５記載の通信装置。
【請求項７】
前記イベントバッファリングにおいて、前記ロールバック制御部は、前記第１のプロセスが前記イベントを処理している間に受信され、前記第１のプロセスにディスパッチされるべき１つ又は複数のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、
前記１つ又は複数のパケットは前記１つ又は複数のイベントに対応し、
前記バッファは、前記バッファに提供される前記１つ又は複数のパケットを格納し、
前記ロールバック制御部は、
前記第１のプロセスによる前記イベントの処理が完了すると、前記ディスパッチャをして、前記ディスパッチルールにおいて前記ターゲットプロセスとして定義されている前記第１のプロセスを、前記第１のプロセスから切り替えた前記第２のプロセスに変更するように、
制御する、ことを特徴とする請求項６記載の通信装置。
【請求項８】
前記第１及び第２のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、
前記第１及び第２のプロセスのそれぞれのために設けられた前記隔離された環境は、他の少なくとも１つのプロセスのために設けられた少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項１乃至７のいずれか１項に記載の通信装置。
【請求項９】
フローベースのパケット転送に適合された１つ又は複数のスイッチを制御するコントローラ装置であって、
第１のコントローラプロセスを第２のコントローラプロセスにロールバックするロールバック制御部と、
前記第１のコントローラプロセス及び前記第２のコントローラプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、
を備え、
前記ロールバック制御部は、
前記第２のコントローラプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む、ことを特徴とするコントローラ装置。
【請求項１０】
前記ネットワーク状態制御部は、前記第２のコントローラプロセスによって引き継がれるネットワーク状態の更新を、前記第２のコントローラプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせるように制御する、ことを特徴とする請求項９記載のコントローラ装置。
【請求項１１】
前記ネットワーク状態制御部は、前記第２のコントローラプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新するように制御する、ことを特徴とする請求項９記載のコントローラ装置。
【請求項１２】
前記ネットワーク状態制御部は、前記第２のコントローラプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のコントローラプロセスがアイドル状態のときに更新するように制御する、ことを特徴とする請求項９記載のコントローラ装置。
【請求項１３】
前記ロールバック制御部は、前記第１のコントローラプロセスをロールバックする前記第２のコントローラプロセスを作成し、
前記コントローラ装置は、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
前記スイッチに接続されるように適合されたネットワークインタフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるターゲットコントローラプロセスとの間の対応関係を定義するディスパッチルールに基づいて、関連するコントローラプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャとをさらに備え、
前記第２のコントローラプロセスを作成した後に、前記ロールバック制御部は、前記第１のコントローラプロセスが受信したパケットに関連するイベントを処理中であると判断した場合、
前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のコントローラプロセスにディスパッチされるべき１つ又は複数のパケットのすべてを格納するように前記バッファを設定してバッファリングを開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記第１のコントローラプロセスから前記第２のコントローラプロセスへの稼働プロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ又は複数のパケットのすべてを、前記第１のコントローラプロセスから切り替えられた前記第２のコントローラプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とする請求項９乃至１２のいずれか１項に記載のコントローラ装置。
【請求項１４】
前記バッファリングの開始時に、前記ロールバック制御部は、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記第１のコントローラプロセスにディスパッチされるべき１つ又は複数のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、前記バッファに提供される前記１つ又は複数のパケットすべてを格納し、
前記ロールバック制御部は、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記ディスパッチャをして、前記ディスパッチルールにおいて前記ターゲットコントローラプロセスとして定義されている前記第１のコントローラプロセスを、前記第１のコントローラプロセスから切り替えられた前記第２のコントローラプロセスに変更するよう制御する、ことを特徴とする請求項１３記載のコントローラ装置。
【請求項１５】
前記第１及び第２のコントローラプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１及び第２のコントローラプロセスのそれぞれのために設けられた前記隔離された環境は、他の少なくとも１つのプロセスのために設けられた少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項９乃至１４のいずれか１項に記載のコントローラ装置。
【請求項１６】
フローベースのパケット転送に適合されたスイッチ装置であって、
第１のスイッチプロセスを第２のスイッチプロセスにロールバックするロールバック制御部と、
前記第２のスイッチプロセスは１つ又は複数のネットワーク状態を前記第１のスイッチプロセスから引き継ぐことが可能であり、前記第１のスイッチプロセス及び前記第２のスイッチプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、
を備え、
前記ロールバック制御部は、
前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む、ことを特徴とするスイッチ装置。
【請求項１７】
前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれるネットワーク状態の更新を、前記第２のスイッチプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせるように制御する、ことを特徴とする請求項１６記載のスイッチ装置。
【請求項１８】
前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新するように制御する、ことを特徴とする請求項１６記載のスイッチ装置。
【請求項１９】
前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のスイッチプロセスがアイドル状態のときに更新するように制御する、ことを特徴とする請求項１６記載のスイッチ装置。
【請求項２０】
前記ロールバック制御部は、前記第１のスイッチプロセスをロールバックする前記第２のスイッチプロセスを作成し、
前記スイッチ装置は、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインタフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるターゲットスイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、関連するスイッチプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャとをさらに備え、
前記第２のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第１のスイッチプロセスが受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のスイッチプロセスにディスパッチされるべき１つ又は複数のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、第１のスイッチプロセスによる前記イベントの処理が完了すると、第１のスイッチプロセスから第２のスイッチプロセスへの稼働プロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ又は複数のパケットのすべてを、第１のスイッチプロセスから切り替えられた第２のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とする請求項１６乃至１９のいずれか１項に記載のスイッチ装置。
【請求項２１】
前記バッファリングの開始時に、前記ロールバック制御部は、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記第１のスイッチプロセスにディスパッチされるべき１つ又は複数のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、自身に提供される前記１つ又は複数のパケットすべてを格納し、
前記ロールバック制御部は、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて対象スイッチプロセスとして定義されている前記第１のスイッチプロセスを、前記第１のスイッチプロセスから切り替えられた前記第２のスイッチプロセスに変更するよう制御する、ことを特徴とする請求項２０記載のスイッチ装置。
【請求項２２】
前記第１及び第２のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１及び第２のプロセスのそれぞれのために設けられた前記隔離された環境は、他の少なくとも１つのプロセスのために設けられた少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項２０又は２１記載のスイッチ装置。
【請求項２３】
フローベースのパケット転送用にそれぞれ適合された１つ又は複数のスイッチと、
請求項９乃至１５のいずれか１項に記載のコントローラ装置と、
を備える、ことを特徴とする通信システム。
【請求項２４】
前記スイッチは、
第１のスイッチプロセスを第２のスイッチプロセスにロールバックするロールバック制御部と、
前記第２のスイッチプロセスは１つ又は複数のネットワーク状態を前記第１のスイッチプロセスから引き継ぐことが可能であり、前記第１のスイッチプロセス及び前記第２のスイッチプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、
を含み、
前記ロールバック制御部は、
前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む、ことを特徴とする請求項２３記載の通信システム。
【請求項２５】
前記スイッチの前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれるネットワーク状態の更新を、前記第２のスイッチプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせるように制御する、ことを特徴とする請求項２４記載の通信システム。
【請求項２６】
前記スイッチの前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新するように制御する、ことを特徴とする請求項２４記載の通信システム。
【請求項２７】
前記スイッチの前記ネットワーク状態制御部は、前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のスイッチプロセスがアイドル状態のときに更新するように制御する、ことを特徴とする請求項２４記載の通信システム。
【請求項２８】
第１のプロセスを第２のプロセスにロールバックし、
前記第１のプロセス及び前記第２のプロセスは、記憶部に記憶された状態を共有し、前記第２のプロセスは、前記記憶部に記憶された１つ又は複数のネットワーク状態を引き継ぐことが可能であり、
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御する、ことを特徴とするロールバック方法。
【請求項２９】
前記第２のプロセスによって引き継がれるネットワーク状態の更新を、前記第２のプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせる、ことを特徴とする請求項２８記載のロールバック方法
【請求項３０】
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新する、ことを特徴とする請求項２８記載のロールバック方法。
【請求項３１】
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のプロセスがアイドル状態のときに更新する、ことを特徴とする請求項２８記載のロールバック方法。
【請求項３２】
第１のプロセスを第２のプロセスにロールバックし、
前記第１のプロセス及び前記第２のプロセスは、記憶部に記憶された状態を共有し、前記第２のプロセスは、前記記憶部に記憶された１つ又は複数のネットワーク状態を引き継ぐことが可能であり、
前記ロールバック後に、前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御すること、を含む処理をコンピュータに実行させるプログラム。
【請求項３３】
前記第２のプロセスによって引き継がれるネットワーク状態の更新を、前記第２のプロセスが前記ネットワーク状態を使用する前のタイミングに遅らせる、ことを特徴とする請求項３２記載のプログラム。
【請求項３４】
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを確率的に更新する、ことを特徴とする請求項３２記載のプログラム。
【請求項３５】
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つを、前記第２のプロセスがアイドル状態のときに更新する、ことを特徴とする請求項３２記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、システム、ロールバック方法及びプログラムに関する。
【背景技術】
【０００２】
ＳＤＮ（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｗｏｒｋ）アーキテクチャでは、コントロールプレーンとデータプレーンが分離され、ネットワークインテリジェンスとその状態が論理的に集中化され、基盤となるネットワークインフラストラクチャがアプリケーションから抽象化される。その結果、これ迄にないプログラマビリティ、自動化、ネットワーク制御が提供され、通信事業者は、例えば、変化する環境やニーズに容易に適応できる、高度にスケーラブルで柔軟なネットワークが構築可能である（非特許文献１）。図１９に示されるように、ＳＤＮアーキテクチャは、通常、ＳＤＮコントローラ１と、ＳＤＮノースバウンドインタフェース６を介してＳＤＮコントローラ１に接続されたＳＤＮアプリケーション２と、ＳＤＮコントローラ１にＳＤＮコントロールデータプレーンインタフェース（ＳＤＮサウスバウンドインタフェース７）を介して接続されたネットワーク要素３とを含む。ＳＤＮコントローラ１は、ＳＤＮノースバウンドインタフェース６を介してＳＤＮアプリケーション２（ノースバウンドアプリケーション）から指示、または要件を受信し、受信した指示または要件を、ＳＤＮサウスバウンドインタフェース７を介してネットワーク要素３に中継する。また、ＳＤＮコントローラ１は、記憶装置（データベース）４内のネットワーク要素３のネットワーク状態を抽出し、管理する。ネットワーク要素３は、パケットデータの転送および処理の機能を実行するスイッチを含む場合もある。これに限定されるものではないが、ネットワークポリシー５は、例えば、一連の要件を満たすポリシーベースの仮想ネットワークを動的に作成するために使用される。ネットワークポリシー５が、あるウェブサイトからのダウンロードトラフィックなどの経路のトラフィック制御が、午前９時から午後１時まで、ノードＮ１及びノードＮ２間の通過を許さないというポリシーである場合、ネットワークポリシー５は、例えば、ＳＤＮアプリケーション２によって、ＳＤＮコントローラ１が使用するフォーマットに適合した転送規則に変換され、ＳＤＮコントローラ１に提供される。ＳＤＮコントローラ１は、提供されたネットワークポリシーと、記憶装置４にネットワーク状態として記憶されているネットワークトポロジに基づき、経路計算を行うことができる。以下にＳＤＮの一つの例として、オープンフロー（ＯｐｅｎＦｌｏｗ）の概要を示す。なお、オープンフローは、ＳＤＮで利用可能な唯一のプロトコルではない。
【０００３】
スイッチ（図１９のネットワーク要素３に対応、ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ（ＯＦＳ）とも称される）は、１つまたは複数のフローエントリを含むフローテーブルを備える。各フローエントリは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数や受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダフィールド情報がマッチフィールドと一致する受信パケットをどのように処理すべきかスイッチに指示する、ゼロ又はそれ以上のアクションを示すアクションフィールドとを含む。パケットを受信すると、スイッチは、受信パケットのヘッダフィールド情報を用いて、自らのフローテーブルを検索する。ミスヒット（不一致）の場合、スイッチは、セキュアチャネルを介して、Ｐａｃｋｅｔ−Ｉｎメッセージを用いて受信パケット（第１のパケット）をコントローラ（ＳＤＮコントローラ）に送信する。
【０００４】
Ｐａｃｋｅｔ−Ｉｎメッセージを受信すると、コントローラ（図１９のＳＤＮコントローラに対応）は、第１のパケットの送信元と宛先の情報に基づき、ネットワークトポロジ情報を参照してパケットの経路を算出する。当該経路に基づき、コントローラは経路上に配置された各スイッチに対してフローエントリを生成し、フロー変更（Ｆｌｏｗ−Ｍｏｄ）メッセージを経路上に配置された各スイッチに送信することにより、生成されたフローエントリをそれぞれのスイッチに対して設定する。コントローラにより設定されたフローエントリのマッチフィールドに一致するヘッダを有する、第１のパケットに続く少なくとも１つのパケットを受信すると、経路上の各スイッチは、上記少なくとも１つのパケットを、例えば、フローエントリのアクションフィールドに定義されているように、次のノードに転送する。オープンフローの詳細は、以下の非特許文献２に記載されている。
【０００５】
特許文献１に、以下の構成が開示されている。コントローラは、当該コントローラに保持されているフローテーブルと、スイッチ（オープンフロースイッチ）のフローテーブルと間の差異を修正するためのａｕｄｉｔ処理（同期処理）を行う。これは、コントローラとスイッチ間でフローテーブルが同期されていることは、コントローラによる正確な経路計算の前提条件だからである。しかし、最初のパケットのための経路計算に必要なフローエントリには制限がある。即ち、最初のパケットの送信元および宛先と一致する１つ以上のフローエントリが、経路計算のための同期には必要である。経路計算のために、全てのフローテーブルの全てのフローエントリを必ず同期しなければならない必要はない。コントローラは、同期が必要なフローエントリのみに対してａｕｄｉｔ処理を実行する。
【０００６】
特許文献２には、以下の構成が開示されている。障害復旧後のネットワーク環境は、その障害の発生時点から変更または更新されており、新たな通信経路またはフローエントリを設定することが有効である。コントローラは、優先度を付加したフローエントリをスイッチに設定し、スイッチは、優先度に応じてフローエントリを設定するか否かを決定する。
【０００７】
特許文献３には、スイッチのフローエントリに異常が見つかった場合、コントローラが、別のスイッチの関連するフローテーブル（フローエントリ）をロールバックするように制御する構成が開示されている。
【０００８】
ＳＤＮアーキテクチャとは関係はなく、冗長化システムに関するものだが、特許文献４には、稼働中のプログラムが実行するフィールドデバイスの監視や制御を妨げないようなタイミングで、上記稼働中のプログラムの代替プログラムへの切り替えが可能な構成が開示されている。稼働中のプログラムが、高精度なリアルタイム処理を実行している場合には、そのリアルタイム処理が完了するまで、代替プログラムへの切り替えタイミングを遅らせる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２０１３／１０８７６１号
【特許文献２】特開２０１１−１６６３８４号公報
【特許文献３】特表２０１３−５４５３２１号公報（ＰＣＴ出願の翻訳）
【特許文献４】国際公開第２０１５／０３７１１６号
【非特許文献】
【００１０】
【非特許文献１】“Software-Defined Networking: The New Norm for Networks,” ONF White Paper April 13, 2012 Internet ＜URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/white-papers/wp-sdn-newnorm.pdf＞
【非特許文献２】“OpenFlow Switch Specification Version 1.5.0 (Protocol version 0x06),” December 19, 2014, Internet ＜URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.0.noipr.pdf＞
【非特許文献３】Naga Katta, Haoyu Zhang, Michael Freedman, and Jennifer Rexford, “Ravana: controller fault-tolerance in software-defined networking,” Proceedings of the 1st ACM SIGCOMM Symposium on Software Defined Networking Research (SOSR '15), June 17-18, 2015
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記特許文献１−４及び非特許文献１−３の全開示内容は、引用をもって本明細書に組み込み記載されているものとする。
【００１２】
以下の分析は、本発明の発明者によってなされたものである。
【００１３】
ＳＤＮでは、スイッチプロセスやコントローラプロセスなどの処理が持続的に実行される。
【００１４】
プロセスがマルウェアなどによって侵害されると、その損害は時間が経過しても残る可能性がある。非特許文献１や２のような関連技術では、異常が生じた要素またはプロセスの回復を可能にする仕組みが、何も提供されていない。したがって、ある要素や、スイッチ、コントローラなどのネットワークノードが侵害されると、損害がネットワーク全体にさらに広がる可能性がある。
【００１５】
スイッチプロセスまたはコントローラプロセスを、以前に保存したバージョンに後進復帰するロールバックを使用して、プロセスを元の状態に戻すことができる。
【００１６】
プロセスにおける侵害されたコードは、コントローラプロセスなどのプロセスの実行ロールバックによって削除できる。しかし、悪質なプロセス（例えば、図１９のＳＤＮコントローラ１による）は、図１９の記憶装置４に記憶されたネットワーク状態を侵害し、ロールバックによって元の状態に戻ったプロセスが、侵害されたネットワーク状態を用いて間違った決定をすることになる。
【００１７】
ネットワーク状態の異常を除去するために、ネットワーク状態を、以前に保存された状態にロールバック（または消去）することが考えられる。しかし、以前に保存された状態にロールバックされたネットワーク状態は、現在の状態と同期していない可能性がある。ロールバック処理によってロールバックされたネットワーク状態を使用すると、ネットワーク状態のロールバック状態と現在の状態との間の矛盾により、処理の誤動作を導く可能性もある。その理由は、ロールバックされた、以前に保存されたネットワーク状態が、その以前の保存のタイミングからロールバックタイミングまでのネットワーク状態への更新を反映しない可能性があるからである。従って、ロールバックされたプロセスは、以前に保存された状態にロールバックされたネットワーク状態をそのまま使用することはできず、ロールバックされたネットワーク状態を現在の状態と一致する状態に更新する必要がある。
【００１８】
もう一つ考えられる可能性は、プロセスにおいて、ロールバック後に新しいネットワーク状態を取得することである。しかし、コントローラプロセスなどの処理において、スイッチなどのネットワーク要素からネットワーク状態を取得するのにも時間を要し、ネットワーク状態の取得中にネットワークの動作に問題が生じる可能性があり、場合によってはネットワークが利用できなくなることもある。コントローラプロセスによるネットワーク状態の取得中に、例えば、数秒または数分のネットワークダウンを引き起こす場合がある。
【００１９】
非特許文献３には、アプリケーションを制御するための無欠陥の集中コントローラの抽象化を提供する、Ｒａｖａｎａと称される耐障害性（フォールトトレラント：ｆａｕｌｔ−ｔｏｌｅｒａｎｔ）のＳＤＮコントローラプラットフォームが開示されている。物理的に分離されたコントローラ間のフェールオーバーを前提とするＲａｖａｎａは、矛盾を防ぐために以下の仕組みを展開する。
−  スイッチイベントのバッファリングと再送信（スイッチイベントは失われない）
−  ログにおけるイベントＩＤとフィルタリング（２回以上処理されるイベントは存在しない）
−  マスタは、イベントを共有ログにシリアル化する（複製はイベントを同じ順序で処理する）
−  イベントログの２段階レプリケーションと決定論的再実行（複製は同じ内部状態を構築する）
−  スイッチからのＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ；遠隔手続き呼出）確認応答（コントローラコマンドは失われない）
−  スイッチにおいてのコマンドＩＤとフィルタリング（コマンドは繰り返し実行されない）
Ｒａｖａｎａは、トランザクションが全ての複製において全体的に順序付けされ、システム全体で厳密に一度だけ実行されることを保証する。また、Ｒａｖａｎａは、ロールバックやコマンドの繰り返し実行に頼らずに、スイッチの状態を正しく処理できる。
【００２０】
しかし、上記のＲａｖａｎａの仕組みは複雑すぎる。
【００２１】
本発明者らは、ネットワーク状態のロールバックにおける問題に対する解決策を考案した。
【００２２】
従って、本発明は、ネットワーク負荷の増大を抑制しつつ、安全なネットワーキングを確保するためのロールバックにおける不整合の発生を防止することが可能なシステム、装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２３】
本発明の第１の側面によれば、第１のプロセスを第２のプロセスにロールバックするロールバック制御部と、前記第１のプロセス及び前記第２のプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、を備え、前記第２のプロセスは前記１つ又は複数のネットワーク状態を前記第１のプロセスから引き継ぐことが可能であり、
前記ロールバック制御部は、前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む通信装置が提供される。
【００２４】
本発明の第２の側面によれば、フローベースのパケット転送に適合された１つ又は複数のスイッチを制御するコントローラ装置であって、第１のコントローラプロセスを第２のコントローラプロセスにロールバックするロールバック制御部と、前記第１のコントローラプロセス及び前記第２のコントローラプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、を備え、前記ロールバック制御部は、前記第２のコントローラプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含むコントローラ装置が提供される。
【００２５】
本発明の第３の側面によれば、フローベースのパケット転送に適合されたスイッチ装置であって、第１のスイッチプロセスを第２のスイッチプロセスにロールバックするロールバック制御部と、前記第２のスイッチプロセスは１つ又は複数のネットワーク状態を前記第１のスイッチプロセスから引き継ぐことが可能であり、前記第１のスイッチプロセス及び前記第２のスイッチプロセスによって共有される１つ又は複数のネットワーク状態を記憶する記憶部と、を備え、前記ロールバック制御部は、前記第２のスイッチプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御するネットワーク状態制御部を含む、スイッチ装置が提供される。
【００２６】
本発明の第４の側面によれば、それぞれ第３の側面による、１つ以上のスイッチ装置と第２の側面によるコントローラ装置と、を備える通信システムが提供される。
【００２７】
本発明の第５の側面によれば、第１のプロセスを第２のプロセスにロールバックし、
前記第１のプロセス及び前記第２のプロセスは、記憶部に記憶された状態を共有し、前記第２のプロセスは、前記記憶部に記憶された１つ又は複数のネットワーク状態を引き継ぐことが可能であり、
前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御する、ロールバック方法が提供される。
【００２８】
本発明の第６の側面によれば、第１のプロセスを第２のプロセスにロールバックし、
前記第１のプロセス及び前記第２のプロセスは、記憶部に記憶された状態を共有し、前記第２のプロセスは、前記記憶部に記憶された１つ又は複数のネットワーク状態を引き継ぐことが可能であり、
前記ロールバック後に、前記第２のプロセスによって引き継がれる前記１つ又は複数のネットワーク状態のうち少なくとも１つに対して遅延更新を提供するように制御すること、を含む処理をコンピュータに実行させるプログラムが提供される。
【００２９】
本発明の第７の側面によれば、本発明の第６の側面によるプログラムが記憶されている、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、又はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ａｎｄ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ハードディスクドライブ（ＨＤＤ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）又はＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などの半導体記憶装置のようなコンピュータが読み取り可能な記録媒体または非一時的な記録媒体が提供される。
【発明の効果】
【００３０】
本発明によれば、ネットワーク負荷の増大を抑制しつつ、安全なネットワーキングを確保するためのロールバックにおける不整合の発生を防止することが可能になる。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている最良の形態の単なる例示により、本発明の実施形態のみを図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。従って、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【００３１】
【図１】本発明の第１の例示的な実施形態における通信装置の構成を示す図である。
【図２】本発明の第１の例示的な実施形態のロールバック方式を模式的に示す図である。
【図３】比較例のロールバック方式を模式的に示す図である。
【図４】本発明の第１の例示的な実施形態のロールバック方式を模式的に示す図である。
【図５】本発明の第２の例示的な実施形態における通信装置の構成を示す図である。
【図６】本発明の第２の例示的な実施形態における通信装置の動作を示す図である。
【図７】本発明の第３の例示的な実施形態におけるコントローラの構成を示す図である。
【図８】本発明の第３の例示的な実施形態におけるスイッチの構成を示す図である。
【図９】本発明の第３の例示的な実施形態におけるロールバックを示す図である。
【図１０】本発明の第３の例示的な実施形態のロールバックにおけるイベントバッファリングを示す図である。
【図１１】本発明の第３の例示的な実施形態におけるロールバック制御部（ハイパーバイザ）の構成を示す図である。
【図１２】本発明の第３の例示的な実施形態におけるロールバック動作を示す図である。
【図１３】本発明の第３の例示的な実施形態におけるスイッチのディスパッチテーブルを示す図である。
【図１４】本発明の第４の例示的な実施形態におけるコントローラを示す図である。
【図１５】本発明の第４の例示的な実施形態におけるスイッチの構成を示す図である。
【図１６】本発明の第４の例示的な実施形態におけるテナントベースのネットワークを示す図である。
【図１７Ａ】本発明の実施形態におけるメモリアイソレーションを示す図である。
【図１７Ｂ】ページングを示す図である。
【図１８】サーバコンピュータを示す図である。
【図１９】ＳＤＮアーキテクチャを示す図である。
【発明を実施するための形態】
【００３２】
以下、本発明の例示的な実施形態について説明する。
【００３３】
［第１の例示的な実施形態］
図１は、第１の例示的な実施形態による通信装置（ネットワークノード）を示す図である。図１を参照すると、通信装置１０は、ネットワーク状態を記憶する記憶部１３と、ロールバック部１５１及びネットワーク状態更新制御部１５２を含むロールバック制御部１５と、メッセージ又はパケットをネットワークとの間で送受信するネットワークインタフェースカード（ＮＩＣ）（ネットワークインタフェースコントローラ）１７とを備えている。
【００３４】
ロールバック部１５１は、ロールバックされる第１のプロセス１１を、第２のプロセス１２にロールバックする制御を実行するように構成されている。第２のプロセス１２は、新たに作成されたプロセスでもよい。第２のプロセス１２の機能および動作は、第１のプロセス１１の機能および動作と同じである。
【００３５】
本実施形態において、プロセスのロールバックは、ロールバックされる第１のプロセス１１から第２のプロセス１２への、稼働中のプロセスの切り替えとして実施されてもよい。
【００３６】
ロールバック部１５１は、第１のプロセス１１から第２のプロセス１２に、稼働中のプロセスを切り替えた後、第１のプロセス１１を終了させる制御を行ってもよい。
【００３７】
あるいは、第２のプロセス１２は、第１のプロセス１１の以前に保存されたイメージのプロセスであってもよい。
【００３８】
第１のプロセス１１を、以下では、「旧プロセス１１」と表示又は称することができる。第１のプロセス１１をロールバックするために新たに作成された第２のプロセス１２を、以下では「新プロセス１２」と表示し、称することができる。
【００３９】
旧プロセス１１は、記憶部１３に記憶されるネットワーク状態を書き込み、更新する。ロールバックにおいて、ネットワーク状態は、新プロセス１２により引き継がれる。新プロセス１２の作成から、旧プロセス１１から新プロセス１２への切り替えまでの期間中、新プロセス１２と旧プロセス１１は、記憶部１３に格納されたネットワーク状態を共有することができる。
【００４０】
記憶部１３は、旧プロセス１１により記憶部１３に記憶されたネットワーク状態を新プロセス１２に引き継がせるためのネットワーク状態共有メカニズムとして機能してもよい。即ち、旧プロセス１１から新プロセス１２への切替時点において、新プロセス１２は、記憶部１３に記憶された状態の最新の更新へのアクセスが可能である。ロールバック時に旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替えた後、新プロセス１２は、記憶部１３に格納されたネットワーク状態を読み出し、書き込む（更新する）ことができる。記憶部１３は、ハードディスクドライブ（ＨＤＤ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、又はＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ａｎｄ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの半導体記憶装置を備えることができるが、これに限定されるものではない。
【００４１】
第１のプロセス１１の侵害されたコード（イメージ）は、第１のプロセス１１から第２のプロセス１２へのロールバックによって除去できる。記憶部１３に記憶されたネットワーク状態が、侵害を受けた旧プロセス１１によって生成される場合がある。従って、ロールバックされるフローエントリなどのネットワーク状態は、確認され更新される必要がある。記憶部１３に記憶されたネットワーク状態を引き継ぐ新プロセス１２は、旧プロセス１１により記憶部１３に格納されたネットワーク状態を確認し、更新する必要がある。
【００４２】
上述の通り、コントローラプロセスなど新たなプロセスが、ネットワーク状態を安全な形に更新するために、スイッチなど全ての必要なネットワーク要素からネットワーク状態を取得するには、時間がかかり、ネットワークリソース（負荷）と処理負荷を必要とする。新プロセス（コントローラプロセス）によるこの操作は、数秒または数分間ネットワークを利用不可にする可能性がある。例えば、ネットワークトポロジの更新のために、新プロセス（コントローラプロセス）は、各スイッチのポートが接続されているホストに関する情報であるホスト位置情報の最新の情報を得る必要がある。これは、新プロセス（コントローラプロセス）側にとって、帯域幅などのネットワークリソースを必要とし、負荷が高くなる可能性がある。
【００４３】
本実施形態においては、ネットワーク状態更新制御部１５２は、旧プロセス１１から新プロセス１２に引き継がれたネットワーク状態の更新において、ネットワーク及び新プロセス１２への負荷を軽減するように制御する。
【００４４】
ネットワーク状態更新制御部１５２は、必ずしも旧プロセス１１から新プロセス１２へのロールバックと共にネットワーク状態の更新が開始せず、旧プロセス１１から新プロセス１２へのロールバックの後かつ新プロセス１２がネットワーク状態を使用する前のタイミングまで遅延するように制御する。未使用のネットワーク状態は、更新されないままでもよい（ロールバック（Ｌａｚｙ  Ｒｏｌｌｂａｃｋ））。この方法では、ネットワーク状態の更新に遅延が生じるが、新プロセス１２は、ネットワーク状態の更新に必要な負荷が軽減された状態で、安全な新しいネットワーク状態にアクセス（使用）することができる。
【００４５】
記憶部１３に記憶されているネットワーク状態は、更新フラグフィールドを各エントリに有していてもよいが、これに限定されるものではない。ネットワーク状態更新制御部１５２は、旧プロセス１１から新プロセス１２へのロールバックのタイミングで、新プロセス１２に引き継がれた各ネットワーク状態に関連付けられた各更新フラグを消去（リセット）するように構成されていてもよい。
【００４６】
新プロセス１２が、記憶部１３に格納されたネットワーク状態にアクセスする際、新プロセス１２は、各ネットワーク状態の更新フラグの値をチェックしてもよい。ネットワーク状態の更新フラグが消去されたまま（オフ状態）である場合、新プロセス１２は、ネットワーク状態更新制御部１５２の制御の下、ネットワークノードにおいて関連するネットワーク状態を検索し取得する。記憶部１３のネットワーク状態を、ネットワークノードから取得した新たなネットワーク状態で更新した後、ネットワーク状態更新制御部１５２は、このネットワーク状態に関連付けられた更新フラグを更新完了状態（オン状態）に設定してもよい。  新プロセス１２は、検索によって更新されたネットワーク状態にアクセスできてもよい。これに限定されるものではないが、ネットワーク状態更新制御部１５２は、検索によるネットワーク状態の更新が完了するまで、検索により更新されていないネットワーク状態に新プロセス１２がアクセスできないように制御するように構成されていてもよい。
【００４７】
ネットワーク状態が確率的に更新されるようにネットワーク状態更新制御部１５２が制御する変形例もある。
【００４８】
例えば、新プロセスが記憶部１３に記憶されたネットワーク状態を使用しようとするとき、ネットワーク状態更新制御部１５２は、例えば、サイコロ振りをシミュレートする、１から６までの整数をランダムに生成するサイコロゲームを行ってもよい。ランダムに生成された整数が所定の数になった場合、新プロセス１２は、ネットワークノードの検索によって得られた新しいネットワーク状態で、記憶部１３に記憶されたネットワーク状態を更新してもよく、もしそうでない場合、新プロセス１２は、記憶部１３に格納されているネットワーク状態の更新をせず、記憶部１３に記憶されている、未だ検索により更新されていないネットワーク状態を使用する。
【００４９】
あるいは、生成された０から１の乱数が所定のサブレンジ、例えば、［０．０〜０．１］内である場合、新プロセス１２は、ネットワークノードの検索によって得られた新しいネットワーク状態で、記憶部１３に記憶されたネットワーク状態を更新してもよいが、生成された乱数がサブレンジ［０．１〜１．０］内にある場合、新プロセス１２はネットワーク状態の更新を実行せず、記憶部１３に格納されている、異常を持つ可能性のあるネットワーク状態を使用する。この場合、ネットワーク状態が更新される確率は１／１０である。あるいは、新プロセス１２によって引き継がれるネットワーク状態に、ある順序で整数を割り当て、ランダムに生成された整数に一致する数を割り当てられたネットワーク状態のみが更新されるように、ランダムに生成された整数に応じてネットワーク状態を更新してもよい。さらに、新プロセス１２に引き継がれるネットワーク状態の更新は、ある確率論的モデルに基づいて制御されてもよい。また、新プロセス１２に引き継がれるネットワーク状態の確率的更新を実施するために、他のいずれの方法を採用してもよい。
【００５０】
新プロセス１２に引き継がれたネットワーク状態に存在する異常は、時間の経過とともに確率的に除去される。異常を持つネットワーク状態が使用されるため、ネットワーク状態の確率的な更新は完璧な解決策ではないが、ネットワーク状態の検索に必要とされる処理負荷及びネットワーク負荷を時間的に分散（平滑化）することに寄与し、結果として、負荷のピークを除去できる。
【００５１】
もう一つの変形例として、ネットワーク状態更新制御部１５２は、新プロセスがアイドル状態にあるときにネットワーク状態を更新する制御を行ってもよい。新プロセス１２が、未だネットワークノードの検索により更新されていない、異常を持つネットワーク状態を使用する場合があるが、この方法の利点は、更新がアイドル時間中にのみ実行されるので、新プロセス１２の応答時間が悪化しないことである。ネットワーク状態更新制御部１５２は、上述したネットワーク状態の更新制御の方式を任意に組み合わせて採用することができる。図１において、通信装置１０は、図示しないメモリに格納されたコンピュータプログラムの指示をフェッチし実行することにより処理を行うプロセッサを備えていてもよい。旧プロセス１１及び新プロセス１２はそれぞれ、そのプロセッサ上で動作するプロセスであってもよい。ロールバック制御部１５のロールバック部１５１及びネットワーク状態更新制御部１５２は、プロセッサによって実行されるコンピュータプログラムによって実現されてもよい。通信装置１０は、サーバ仮想化環境を提供するハイパーバイザなどの仮想化メカニズムを備えたサーバとして実現されてもよく、旧プロセス１１及び新プロセス１２は、上記サーバ仮想化環境において仮想マシン（ＶＭ）上で動作するように構成することができる。
【００５２】
図２は、本実施形態によるロールバック動作を模式的に示す図である。記憶部１３のネットワーク状態は、旧プロセス１１と新プロセス１２とで共有される。プロセスのロールバックのタイミングで、記憶部１３に記憶されたネットワーク状態は、新プロセス１２により引き継がれる。旧プロセス１１は、新プロセス１２へのプロセス切り替えによってロールバックされ、旧プロセス１１は終了する。旧プロセス１１のプロセスイメージは、新プロセス１２のプロセスイメージに切り替えられる。例えば、仮想メモリにプロセスとして割り当てられたプロセスイメージは、例えば、以下を含む。
−  プログラムコード（実行される指示）
−  プログラムデータ
−  スタック（ユーザスタックとカーネルスタック）
−  プロセス制御ブロック（プロセスを管理するためにオペレーティングシステムが必要とする情報）
旧プロセス１１及び新プロセス１２は、冗長構成と見なしてもよく、旧プロセス１１がアクティブなプロセス、新プロセス１２が待機プロセスであるシステムを、新プロセス１２がアクティブなプロセス、旧プロセス１１が待機プロセスになるシステムに切り替える。プロセスイメージの代わりに、旧プロセス１１のＶＭ（仮想マシン）イメージを新プロセス１２のＶＭイメージに切り替えてもよい。
【００５３】
図２に示すように、旧プロセス１１により書き込まれ更新された最新のネットワーク状態は、ロールバックされたネットワーク状態に最新の更新が反映されていない可能性があるというロールバックの矛盾を解決できる形で、新プロセス１２により引き継がれる。新プロセス１２により引き継がれたネットワーク状態は、上述したように遅延更新またはレイジーロールバックされる。
【００５４】
図１のネットワーク状態更新制御部１５２は、上述したように、新プロセス１２がネットワーク状態を使用する前のタイミングで実行されるネットワーク状態の更新を制御する。新プロセス１２が記憶部１３に記憶されたネットワーク状態を使用しようとするとき、もしそれぞれのネットワーク状態に対応する更新フラグが「リセット」状態にある場合、新プロセス１２は、ネットワーク状態更新制御部１５２の制御の下、不図示のネットワークノードからネットワーク状態を取得する。新プロセス１２は、ネットワーク状態に関する問い合わせのメッセージを、ＮＩＣ１７を介して不図示のネットワークノードに送信する要求を、ネットワーク状態更新制御部１５２に発行するように構成されてもよい。記憶部に記憶されたネットワーク状態は、それぞれ、ネットワーク状態が関連付けられているネットワークノードを示すネットワークノード識別情報の項目を有してもよい。ネットワーク状態更新制御部１５２は、関連するネットワークノードからネットワーク状態（新しいネットワーク状態）を受信すると、検索の結果として取得した上記新たなネットワーク状態を、要求に対する応答として新プロセス１２に返し、新プロセス１２は、記憶部１３内のロールバックされたネットワーク状態を、上記新しいネットワーク状態で更新してもよい。ネットワーク状態更新制御部１５２は、このネットワーク状態の更新フラグを「Ｓｅｔ」状態（更新完了状態）に設定してもよい。あるいは、ネットワーク状態更新制御部１５２は、ネットワークノードからネットワーク状態（新しいネットワーク状態）を受信すると、記憶部１３に格納されており、まだ更新されていないネットワーク状態を、検索の結果として取得した上記新たなネットワーク状態で更新し、このネットワーク状態の更新フラグを「Ｓｅｔ」状態（更新完了状態）に設定し、要求に対する応答として、上記ネットワーク状態の更新の完了を新プロセス１２に通知してもよい。新プロセス１２は、検索によって更新された記憶部１３内のネットワーク状態へのアクセスが可能になる。
【００５５】
図３は、本実施形態を採用しない比較例の動作を模式的に示す図である。記憶部１３のネットワーク状態は、旧プロセス１１と新プロセス１２とで共有される。ロールバックのタイミングで、  旧プロセス１１により更新されたネットワーク状態は、新プロセス１２により引き継がれる。旧プロセス１１のプロセスイメージは、新プロセス１２のプロセスイメージへのプロセス切り替えによってロールバックされる。図３では、ロールバック後に、記憶部１３に記憶されたネットワーク状態を更新するための、ネットワークノードまたはスイッチ上のネットワーク状態の検索が実行される。図３に示すロールバック方式は、ネットワークノードまたはスイッチ上のネットワーク状態の検索中に、ネットワーク負荷の増加によりネットワーク性能が低下したり、ネットワークが利用できなくなる可能性があるという欠点を持つ。
【００５６】
図４は、第１の例示的な実施形態が適用可能な別のロールバック方式を模式的に示す図である。図４を参照すると、ロールバックタイミングＴ２において、図１のロールバック部１５１は、前のタイミングＴ１で以前に保存された旧プロセス１１のプロセスイメージに新プロセス１２をロールバックする。旧プロセス１１のＶＭ（仮想マシン）イメージをタイミングＴ１でバックアップし、ロールバックタイミングＴ２において、バックアップされたＶＭイメージを新プロセス１２として回復してもよい。新プロセス１２は、旧プロセス１１により更新されたネットワーク状態を引き継ぐ。旧プロセス１１から新プロセス１２への切り替えの後、旧プロセス１１は終了する。新プロセス１２が旧プロセス１１から引き継ぐ、記憶部１３に格納されたネットワーク状態を、新プロセス１２がネットワーク状態を使用する前に、確率的、又はアイドルモード中に更新してもよい。
【００５７】
［第２の例示的な実施形態］
図５は、第２の例示的な実施形態による通信装置（ネットワークノード）を示す図である。図５を参照すると、通信装置１０は、記憶部１３と、図１のロールバック制御部１５に対応するロールバック制御部１５と、バッファ１６と、タイミング制御部１４と、図１のＮＩＣ１７に対応するネットワークインタフェースカード（ネットワークインタフェースコントローラ）１７とを含む。
【００５８】
ロールバック制御部１５は、旧プロセス１１から新プロセス１２へのプロセスのロールバックを制御する。本実施形態では、ロールバックされる旧プロセス１１から、新規に作成された新プロセス１２への切り替えとして、プロセスのロールバックを行ってもよい。
【００５９】
ロールバック制御部１５は、旧プロセス１１から新プロセス１２に稼働しているプロセスを切り替えた後、旧プロセス１１を終了する制御を行う。
【００６０】
旧プロセス１１と新プロセス１２とは、記憶部１３を共有する。具体的には、旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替えるまで、旧プロセス１１が記憶部１３のネットワーク状態を読み込み、更新（書き込み）し、新プロセス１２の作成から、旧プロセス１１から新プロセス１２への稼働中プロセスの切り替えまでの期間は、新プロセス１２は、記憶部１３に記憶されたネットワーク状態の読み取りアクセス権のみを有するようにしてもよい。新プロセス１２の作成から、旧プロセス１１から新プロセス１２への切り替えまでの期間中、記憶部１３に格納されたネットワーク状態は、新プロセス１２と旧プロセス１１とで共有することができる。
【００６１】
このように、記憶部１３は、旧プロセス１１により記憶部１３に格納されたネットワーク状態を新プロセス１２に引き継がせるための状態共有メカニズムとして機能する。即ち、旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替える前に、新プロセス１２は記憶部１３に格納されているネットワーク状態の最新の更新情報を取得することが可能である。旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替えた後、ロールバック制御部１５（図１のネットワーク状態更新制御部１５２）は、上述の通り、新プロセス１２がネットワーク状態を使用する前に、または確率的に、またはアイドルモード中に、ネットワーク状態の遅延更新を実行するように制御する。
【００６２】
タイミング制御部１４は、ロールバック制御部１５によるロールバック動作のタイミングを制御するように構成されている。タイミング制御部１４は、例えば、トランザクションをアトミックにするために、旧プロセス１１によるイベント処理の完了を待つように制御する。旧プロセス１１から新プロセス１２への稼働中のプロセスの切り替えは、旧プロセス１１によるイベント処理が完了する時点までタイミング制御部１４により延期される。
【００６３】
バッファ１６は、ロールバック制御部１５により有効／無効に制御されるイベントバッファリングの機能を有する。バッファ１６は、ロールバックされる旧プロセス１１がイベントを処理中の場合、ＮＩＣ１７によって受信され、旧プロセス１１を宛先とする、少なくとも１つのイベント（パケット）を格納できる。より具体的には、旧プロセス１１がロールバック中に受信したパケットに関連するイベントを処理している場合、ロールバック制御部１５は、旧プロセス１１が上記イベントを処理している間に受信した、旧プロセス１１宛ての、１つ以上のパケットの全てをバッファ１６に格納するような設定でイベントバッファリングを開始する。バッファ１６は、着信イベント（パケット）をＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ；先入れ先出し）方式で格納し、イベントの着信順序を保持するように構成されてもよい。
【００６４】
上述の通り開始されたイベントバッファリングは、以下のように終了できる。
旧プロセス１１によるイベントの処理が完了すると、タイミング制御部１４の制御の下、ロールバック制御部１５は、旧プロセス１１から新プロセス１２へ稼働中のプロセスの切り替えを行い、ロールバック制御部１５は、イベントバッファリングの開始時から記憶部１３に記憶されている１つ以上のイベントの全てを、旧プロセス１１から切り替えられた新プロセス１２に送信するように制御し、ロールバック制御部１５はバッファ１６を制御してイベントバッファリングを停止させる。その後、ＮＩＣ１７が受信した、旧プロセス１１宛のイベントは、バッファ１６に格納されずに、現在稼働中の新プロセス１２に転送される。
【００６５】
通信装置１０は、図１９を参照して説明したＳＤＮアーキテクチャにおいて、ＳＤＮコントローラまたはネットワーク要素（スイッチ、ロードバランサ、またはファイアウォール）として構成することができるが、これに限定されない。
【００６６】
図５に示す構成は、旧プロセス１１から新プロセス１２へのロールバック後のネットワーク状態を更新するためのネットワーク検索によるネットワーク性能の低下防止を可能にし、またロールバックにおけるイベントの不規則化などの矛盾の発生も防止する。
【００６７】
旧プロセス１１によるイベント処理（例えば、Ｐａｃｋｅｔ−Ｉｎメッセージ）の実行中に、旧プロセス１１が新プロセス１２にロールバックされた場合、旧プロセス１１によるイベント処理は完了せず、そのイベントは失われる。
【００６８】
また、プロセスが、ロールバック中に当該プロセス宛のイベントを受信できない場合、イベント損失が発生することもある。
【００６９】
本実施形態によるイベントバッファリング機能は、イベントの順序を保持し、イベント損失の発生を防止して、ロールバック動作においてイベントの整合性を保証する働きをする。
【００７０】
ロールバックの別のタイプの矛盾として、ネットワーク状態に矛盾が生じる可能性がある。例えば、フローエントリなどのネットワーク状態が、ロールバック動作中に旧プロセス１１により行われた更新を反映していない、最後に保存されたネットワーク状態にロールバックされると、新プロセス１２は、更新を反映していない最後に保存されたネットワーク状態に基づいて処理を実行することになり、誤った処理や誤動作の原因となる。
【００７１】
本実施形態によれば、状態共有メカニズムは、これらの欠点の回避に寄与することができる。ロールバック中に、新プロセス１２が、旧プロセス１１により更新された、記憶部１３内の最新のネットワーク状態を引き継ぐことを可能にする状態共有メカニズムは、旧プロセス１１のネットワーク状態と新プロセス１２のネットワーク状態との不一致の発生を防止する役割を果たす。
【００７２】
本実施形態では、旧プロセス１１から新プロセス１２に切り替えた後、記憶部１３を用いて旧プロセス１１からネットワーク状態を引き継ぐ新プロセス１２は、ネットワーク状態を徐々に更新してもよい。旧プロセス１１から新プロセス１２に切り替える前に、旧プロセス１１により記憶部１３に記憶され、引き継がれたネットワーク状態に異常が生じていた場合、ネットワーク状態は、新プロセス１２によって徐々に復元されてもよい。例えば、新しいフローへの応答として、クリーンな新しいネットワーク状態が生成された場合、新プロセス１２は、例えば、異常の生じたネットワーク状態をこの新しいネットワーク状態（クリーン）で更新してもよい。新プロセス１２は、新プロセス１２が旧プロセス１１から引き継いだネットワーク状態を使用する前に更新してもよい。新プロセス１２は、旧プロセス１１から引き継いだネットワーク状態を確率的に更新してもよい。あるいは、新プロセス１２は、アイドル状態において、旧プロセス１１から引き継いだ状態を更新してもよい。
【００７３】
図６は、図５のロールバック制御部の動作を説明するための図である。
【００７４】
ロールバック制御部１５は、新プロセス１２を作成する（Ｓ１０１）。旧プロセス１１と新プロセス１２とで、ネットワーク状態を共有する（Ｓ１０２）。
【００７５】
旧プロセス１１が、稼働中のプロセスとしてイベント処理を実行中である場合、ロールバック制御部１５はイベントバッファリングを開始する（Ｓ１０３）。旧プロセス１１宛の、１つまたは複数の受信パケットは、バッファ１６にバッファリングされる。
【００７６】
ロールバック制御部１５は、タイミング制御部１４からの指示に従って、旧プロセス１１によるイベント処理の完了を待つ（Ｓ１０４）。
【００７７】
旧プロセス１１がイベント処理を完了すると、ロールバック制御部１５は、  旧プロセス１１から新プロセス１２に切り替える（Ｓ１０５）。
【００７８】
ロールバック制御部１５は、イベントバッファリングを終了し、受信したイベントを新プロセス１２に送る（Ｓ１０６）。
【００７９】
ロールバック制御部１５は、ネットワーク状態のレイジーロールバックを制御する（Ｓ１０７）。ロールバック制御部１５は、例えば、新プロセス１２が旧プロセス１１から引き継ぐネットワーク状態の更新を、新プロセス１２がネットワーク状態を使用するタイミングまで遅らせるように制御してもよい。
【００８０】
図１８は、図１を参照して説明したコンピュータ装置の機能を実現するコンピュータシステムを示す図である。例えば、サーバシステムなどのコンピュータシステム３００は、プロセッサ３０１と、プログラムを記憶するランダムアクセスメモリ、ハードディスクドライブ（ＨＤＤ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、またはＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の少なくとも一つを含むストレージ３０２と、通信インタフェース３０３とを含む。
図１のバッファ１６と記憶部１３は、ストレージ３０２により実現されてもよい。プロセッサ３０１は、コンピュータシステム３００を図５の通信装置１０として機能させるために、ロールバック制御部１５と、タイミング制御部１４と、旧プロセス１１と、新プロセス１２との機能を実現するストレージ３０２に格納されたプログラムを実行する。
【００８１】
［第３の例示的な実施形態］
図７は、第３の例示的な実施形態による、ＳＤＮアーキテクチャにおけるコントローラの構成を示す図である。第３の例示的な実施形態では、図５の通信装置１０をＳＤＮコントローラに適用する。
【００８２】
図７を参照すると、ＳＤＮコントローラ１００は、サーバコンピュータなどのコンピュータシステム上に構成されてもよく、旧コントローラプロセス１０１（第１のコントローラプロセス）と、新コントローラプロセス１０２（第２のコントローラプロセス）と、旧コントローラプロセス１０１と新コントローラプロセス１０２とが共有するネットワーク状態などの状態を記憶する記憶部１０３とを含む。図７において、旧コントローラプロセス１０１、新コントローラプロセス１０２、記憶部１０３、バッファ１０６は、それぞれ、図５の旧プロセス１１、新プロセス１２、記憶部１３、バッファ１６に対応する。タイミング制御部１０４、ハイパーバイザ１０５、ＮＩＣ１０７は、それぞれ、図５のタイミング制御部１４、ロールバック制御部１５、ＮＩＣ１７に対応する。記憶部１０３に記憶され、旧コントローラプロセス１０１と新コントローラプロセス１０２とが共有するネットワーク状態は、ネットワークトポロジと、フローエントリと、およびホスト位置情報とを含むが、これに限定されない。
【００８３】
ＳＤＮコントローラ１００はさらに、仮想マシン（ＶＭ）にハードウェア仮想化を提供するためのサーバ仮想化インフラストラクチャを実現するハイパーバイザ１０５（仮想マシンモニタ）を含む。ハイパーバイザ１０５は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されている。これに限定されるものではないが、ハイパーバイザ１０５は、このようなサーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストＯＳと、アプリケーションとを含む仮想マシン（ＶＭ）を制御してもよく、仮想化ハードウェア資源は、例えば、仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想化ストレージと、仮想化ネットワークとを含む。
【００８４】
ハイパーバイザ１０５は、仮想マシンの作成および終了を担当する。旧コントローラプロセス１０１及び新コントローラプロセス１０２は、それぞれハイパーバイザ１０５によって作成された仮想マシン（ＶＭ）上で実行される。ハイパーバイザ１０５は、少なくとも１つの仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当てる。ハイパーバイザ１０５は、図１及び図５を参照して説明したロールバック制御部１５の機能を備えてもよい。ハイパーバイザ１０５は、新コントローラプロセス１０２をインスタンス化するための仮想マシンの作成の制御、旧コントローラプロセス１０１から新コントローラプロセス１０２への稼働中のプロセスの切り替え、新コントローラプロセス１０２により引き継がれるネットワーク状態の遅延更新（レイジーロールバック）を行う。
【００８５】
仮想マシン上で動作するように構成されたコントローラプロセスは、仮想ＳＤＮコントローラとして機能してもよい。コントローラプロセスは、例えば、スイッチ２００（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ：ＯＦＳ）からＰａｃｋｅｔ−Ｉｎメッセージを受信すると、関連するパケットの経路を計算し、経路上の各スイッチ２００に対してフローエントリを生成し、Ｆｌｏｗ−Ｍｏｄメッセージを用いて経路上の各スイッチ２００について生成されたフローエントリを設定する。
【００８６】
ＳＤＮコントローラ１００はさらに、ディスパッチルールテーブル１１０に格納されたディスパッチルールに基づいて、スイッチ２００から受信したパケットまたはオープンフローメッセージを対象のコントローラプロセスにディスパッチするディスパッチャ１０８を含む。コントローラプロセスは、ネットワーク制御モジュールのネットワーク制御プロキシとして機能してもよい。この場合、対象のコントローラプロセスを選択するディスパッチャ１０８は、ネットワーク制御のプロキシとして機能する。
【００８７】
ディスパッチルールテーブル１１０のディスパッチルールは、受信パケットのマッチ条件（フロー情報の項目）と、当該マッチ条件に対応する受信パケット又はメッセージのディスパッチ先の対象コントローラプロセスとの対応関係（マッピング）を定義する。ディスパッチャ１０８は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件（フロー情報の項目）を比較し、受信パケットのヘッダフィールド情報がマッチするマッチ条件に関連付けられた対象コントローラプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象コントローラプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレス、
宛先または送信元ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）宛先または送信元ポート番号、又は
上記の内、少なくとも２つの組み合わせ、又は
パケットを受信したコントローラ１００の物理ポート番号
【００８８】
コントローラプロセスは仮想マシン（ＶＭ）上で動作するため、仮想マシン（ＶＭ）に仮想的に割り当てられた仮想ＩＰアドレス又は仮想ＭＡＣアドレスが使用される。ディスパッチャ１０８は、ディスパッチルールテーブルにおいて、受信したパケットのヘッダフィールド情報を検索し、マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つかった場合、ディスパッチャ１０８は、受信パケットを対応する対象コントローラプロセスに転送する。マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つからない場合、ディスパッチャ１０８は、受信パケットを破棄するか、あるいは、例えば、不図示の維持管理端末により、受信パケットのために新しいディスパッチルールを作成するようにしてもよい。
【００８９】
ディスパッチャ１０８は、複数の入力ポート（不図示）および複数の出力ポート（不図示）を含んでもよく、受信したパケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義するディスパッチルールに基づき、その入力ポートで受信したパケットを対象となる出力ポートに転送する。ディスパッチャ１０８は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、図７において、ディスパッチャ１０８は、ハイパーバイザ１０５の前段に配置されているが、ディスパッチャ１０８が、ハイパーバイザ１０５に制御される仮想スイッチとして構成され、ハイパーバイザ１０５と、仮想マシン上で動作するコントローラプロセスとの間に配置される別の構成もあり得る。ディスパッチャ１０８は、ソケット（Ｕｎｉｘ（登録商標）ソケット、ネットワークソケット）、ＰＩＰＥ、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【００９０】
ＳＤＮコントローラ１００は、ディスパッチャ１０８に接続されたバッファ１０６をさらに含む。バッファ１０６は、旧コントローラプロセス１０１がロールバック中にイベントの処理を実行している場合、スイッチ２００から受信され、旧コントローラプロセス１０１にディスパッチされる少なくとも１つのイベント（例えば、少なくとも１つのオープンフローメッセージ）を格納する。旧コントローラプロセス１０１が処理中の処理を完了すると、これまでバッファ１０６にバッファリングされていた上記少なくとも１つのイベントが取り出され、ディスパッチャ１０８により新コントローラプロセス１０２にディスパッチされる。バッファ１０６は、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ；先入れ先出し）メモリを含んでもよい。バッファ１０６は、パケットがイベントバッファリングモードでディスパッチされる前に上記パケットを格納するようにディスパッチャ１０８内に構成されてもよい。
【００９１】
ＳＤＮコントローラ１００は、タイミング制御部１０４と、管理制御部１０９とをさらに備える。タイミング制御部１０４は、旧コントローラプロセス１０１がロールバック中にイベントの処理を実行している場合、スイッチ２００から受信したイベントをバッファ１０６にバッファリングするタイミングを制御し、ロールバック時に旧コントローラプロセス１０１から新コントローラプロセス１０２に切り替えるタイミングも制御する。
【００９２】
管理制御部１０９は、ハイパーバイザ１０５を介してコントローラプロセスを管理する。管理制御部１０９は、タイミング制御部１０４と、ハイパーバイザ１０５と、ディスパッチャ１０８とに接続されている。管理制御部１０９は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ／スケールダウン又はスケールイン／スケールアウトなどのパフォーマンス管理を行う。また、管理制御部１０９は、スイッチ２００内の管理制御部に接続されている。
【００９３】
スイッチ２００との間でメッセージを送受信するために、少なくとも１つのスイッチと通信するＮＩＣ１０７が提供される。
【００９４】
また、バッファ１１２を有するノースバウンドＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）ディスパッチャ１１１が提供される。ノースバウンドアプリケーション（図１９の２）は、ノースバウンドＡＰＩを介してノード間のトポロジを操作することができる。ノースバウンドＡＰＩは、スイッチに接続されたホスト情報を参照するためのＡＰＩと、フローエントリの直接操作のためのＡＰＩと、スイッチデバイス情報を参照するためのＡＰＩなどを含んでもよいが、これに限定されるものではない。ノースバウンドＡＰＩディスパッチャ１１１は、ノースバウンドＡＰＩ要求を、不図示のノースバウンドＡＰＩを含むコントローラプロセスにディスパッチする。ノースバウンドＡＰＩは、コントローラプロセスとノースバウンドＡＰＩディスパッチャ１１１との間に配置されてもよい。ノースバウンドＡＰＩディスパッチャ１１１は、ＳＤＮアプリケーションなどＳＤＮコントローラモジュールへのプロキシとして機能してもよい。
【００９５】
バッファ１１２は、旧コントローラプロセス１０１がロールバック中にイベント処理を実行している場合、ＦＩＦＯ方式で旧コントローラプロセス１０１にディスパッチされる、少なくとも１つのノースバウンドＡＰＩ要求を一時的に格納する。旧コントローラプロセス１０１が処理を完了すると、バッファ１１２にバッファリングされていた上記少なくとも１つのノースバウンドＡＰＩ要求は、ノースバウンドＡＰＩディスパッチャ１１１により取り出され、新コントローラプロセス１０２へ転送される。
【００９６】
ハイパーバイザ１０５は、ロールバックを制御してもよい。図７のロールバック制御部１５は、ハイパーバイザ１０５内のコントローラとして実現されてもよい。ロールバックにおいて、ハイパーバイザ１０５が新コントローラプロセス１０２を作成し開始する。記憶部１０３内のネットワーク状態は、旧コントローラプロセス１０１と新コントローラプロセス１０２とで共有される。ネットワーク状態には、例えば、フローエントリと、ネットワークトポロジと、ホスト位置情報とが含まれるが、これに限定されない。
【００９７】
旧コントローラプロセス１０１がロールバック中にイベントを処理している場合、ディスパッチャ１０８は、スイッチから受信し、旧コントローラプロセス１０１宛に送信されたＰａｃｋｅｔ−Ｉｎメッセージ又はＦｌｏｗ−Ｒｅｍｏｖｅｄメッセージ（スイッチ内のフローエントリのライフサイクルが期限切れしたことをコントローラに通知するためのメッセージ）などのオープンフローメッセージ（イベント）の少なくとも１つの着信パケットをディスパッチせず、上記少なくとも１つの着信パケットを一時的にバッファ１０６に格納する。この場合、ノースバウンドアプリケーションから旧コントローラプロセス１０１宛の少なくとも１つの着信ノースバウンドＡＰＩ要求も、一時的にバッファ１１２に格納される。
【００９８】
タイミング制御部１０４の制御の下、旧コントローラプロセス１０１がイベントの処理を終了すると、ハイパーバイザ１０５は旧コントローラプロセス１０１を終了する。
【００９９】
ディスパッチャ１０８は、バッファ１０６に格納されている上記少なくとも１つのオープンフローメッセージ（イベント）を新コントローラプロセス１０２に転送する。バッファ１１２に格納された上記少なくとも１つのノースバウンドＡＰＩ要求も、新コントローラプロセス１０２に転送される。
【０１００】
ディスパッチャ１０８は、パケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義する、ディスパッチルールテーブル１１０内のディスパッチルールの内容を更新する。ディスパッチャ１０８は、ディスパッチルールテーブル１１０において対象コントローラプロセスとして定義されていた旧コントローラプロセス１０１を新コントローラプロセス１０２に変更する。
【０１０１】
ハイパーバイザ１０５は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
−  コントローラプロセスがスイッチからの要求を処理した後、
−  １つの操作を処理した後、
−  定期的に、又は、
−  ロールバックの契機となる所定のイベントの発生に応答して、
ロールバックの契機となるイベントの例は、完全性チェックを用いたコントローラプロセスの異常の検出などである。ハイパーバイザ１０５の１つの機能として実現されるロールバック制御部１５は、新コントローラプロセス１０２が旧コントローラプロセス１０１から引き継ぐネットワーク状態のレイジーロールバックを制御してもよい。より具体的には、ハイパーバイザ１０５（ロールバック制御部１５）は、新コントローラプロセス１０２がネットワーク状態を使用する前に、又は確率的に、又は新コントローラプロセス１０２がアイドル状態にあるときに、ネットワーク状態が更新されるように制御してもよい。
【０１０２】
図８は、第３の例示的な実施形態によるスイッチの構成を示す図である。図８のスイッチ２００は、図７のスイッチ２００（オープンフロースイッチ）に対応する。図８を参照すると、スイッチ２００は、サーバコンピュータ上に構成され、旧スイッチプロセス２０１（第１のスイッチプロセス）と、新スイッチプロセス２０２（第２のスイッチプロセス）と、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有されるネットワーク状態を記憶する記憶部２０３とを含む。図８において、旧スイッチプロセス２０１、新スイッチプロセス２０２、記憶部２０３、バッファ２０６は、それぞれ、図５の旧プロセス１１、新プロセス１２、記憶部１３、バッファ１６に対応してもよい。タイミング制御部２０４、ハイパーバイザ２０５、ＮＩＣ／パケット転送エンジン２０７のＮＩＣは、それぞれ、タイミング制御部１４、ロールバック制御部１５、ＮＩＣ１７に対応してもよい。記憶部２０３に記憶され、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有されるネットワーク状態は、フローエントリを含む。
【０１０３】
スイッチ２００は、ハイパーバイザ２０５（仮想マシンモニタ）を含む。旧スイッチプロセス２０１と新スイッチプロセス２０２は、ハイパーバイザ２０５によって作成された仮想マシン（ＶＭ）上でそれぞれ実行されてもよい。ハイパーバイザ２０５は、少なくとも１つの仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当ててもよい。仮想マシン上で動作するスイッチプロセスは、上述のオープンフロースイッチとして機能する。ハイパーバイザ２０５は、図１及び図５を参照して説明したロールバック制御部１５の機能を備えていてもよい。ハイパーバイザ２０５は、新スイッチプロセス２０２をインスタンス化するための仮想マシンの作成の制御、旧スイッチプロセス２０１から新スイッチプロセス２０２への稼働中のプロセスの切り替え、新スイッチプロセス２０２により引き継がれるネットワーク状態の遅延更新（レイジーロールバック）を行う。
【０１０４】
スイッチ２００は、（別のスイッチ又はネットワークノードからの）パケット、又は（ＮＩＣ／パケット転送エンジン２０７からの）オープンフローメッセージをディスパッチするディスパッチャ２０８をさらに含む。さらに、ディスパッチャ２０８は、ディスパッチルールテーブル２１０に格納されたディスパッチルールに基づき、コントローラから受信したＰａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージなどのオープンフローメッセージを対象スイッチプロセスにディスパッチする。ディスパッチルールテーブル２１０のディスパッチルールは、マッチ条件（フロー情報の項目）と、上記マッチ条件（フロー情報の項目）に対応する受信パケットのディスパッチ先である対象スイッチプロセスとの対応関係（マッピング）を定義する。ディスパッチャ２０８は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件（フロー情報の項目）を比較し、受信パケットのヘッダフィールド情報がマッチするマッチ条件に関連付けられた対象スイッチプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象スイッチプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレス、
宛先または送信元ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス、
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）宛先または送信元ポート番号、又は
上記の内、少なくとも２つの組み合わせ、又は
パケットを受信したスイッチ２００の物理ポート番号。
【０１０５】
スイッチプロセスは仮想マシン（ＶＭ）上で動作するため、仮想マシン（ＶＭ）に仮想的に割り当てられた仮想ＩＰアドレス又は仮想ＭＡＣアドレスが使用される。ディスパッチャ２０８は、ディスパッチルールテーブル２１０において、受信したパケットのパケットヘッダフィールドに指定されている宛先アドレスを検索し、宛先アドレスが受信パケットのパケットヘッダに指定されている宛先アドレスと一致するディスパッチルールが見つかった場合、ディスパッチャ２０８は、受信パケットを対応する対象スイッチプロセスに転送する。なお、図８において、ディスパッチャ２０８は、ハイパーバイザ２０５の前段に配置されているが、ハイパーバイザ２０５が、ディスパッチャ２０８を仮想スイッチなどの仮想ハードウェア資源として提供する構成も採用可能である。ディスパッチャ２０８は、ソケット（Ｕｎｉｘ（登録商標）ソケット、ネットワークソケット）、ＰＩＰＥ、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【０１０６】
ディスパッチャ２０８は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、図８において、ディスパッチャ２０８は、ＮＩＣ２０７とハイパーバイザ２０５の間に配置されているが、ディスパッチャ２０８が、ハイパーバイザ２０５に制御される仮想スイッチとして構成され、ハイパーバイザ２０５とコントローラプロセスとの間に配置される別の構成もあり得る。
【０１０７】
スイッチ２００は、ディスパッチャ２０８に接続されたバッファ２０６をさらに含む。バッファ２０６は、旧スイッチプロセス２０１がロールバック中にイベントの処理を実行している場合、スイッチから受信され、旧スイッチプロセス２０１にディスパッチされる少なくとも１つのイベント（例えばオープンフローメッセージ）を、ＦＩＦＯ方式でイベント順序を保持するように格納する。旧スイッチプロセス２０１が処理中の処理を完了すると、これまでバッファ２０６にバッファリングされていた上記少なくとも１つのイベントが取り出され、ディスパッチャ２０８により新スイッチプロセス２０２にディスパッチされる。
【０１０８】
スイッチ２００は、タイミング制御部２０４と、管理制御部２０９とをさらに備える。タイミング制御部２０４は、旧スイッチプロセス２０１がロールバック中にイベントの処理を実行している場合、スイッチから受信したイベント（パケット）をバッファ２０６にバッファリングするタイミングを制御し、ロールバック時に旧スイッチプロセス２０１から新スイッチプロセス２０２に切り替えるタイミングも制御する。
【０１０９】
管理制御部２０９は、ハイパーバイザ２０５を介してコントローラプロセスを管理する。管理制御部２０９は、タイミング制御部２０４と、ハイパーバイザ２０５と、ディスパッチャ２０８とに接続されている。管理制御部２０９は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ／スケールダウン又はスケールイン／スケールアウトなどのパフォーマンス管理を行う。また、管理制御部２０９は、スイッチ内の管理制御部に接続されている。
【０１１０】
図８において、ＮＩＣ／パケット転送エンジン２０７は、他のスイッチやＳＤＮコントローラとのメッセージ及びパケットの送受信のため、他のスイッチ及びＳＤＮコントローラと通信する。パケット転送エンジンは、フローエントリに基づくパケットのパケット転送処理に指定されたエンジンである。ＮＩＣは、複数の単一ポートＮＩＣとして、又はマルチポートＮＩＣとして構成することができる。
【０１１１】
図８のロールバック制御部１５は、ハイパーバイザ２０５に実装されてもよい。ハイパーバイザ２０５はロールバックを以下のように制御する。
【０１１２】
ロールバック処理において、ハイパーバイザ２０５が新スイッチプロセス２０２を作成し開始（起動）する。記憶部２０３内のネットワーク状態は、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有される。ネットワーク状態には、例えば、フローエントリが含まれるが、これに限定されない。
【０１１３】
旧スイッチプロセス２０１がロールバック中にイベントを処理している場合、ディスパッチャ２０８は、別のスイッチ又はＳＤＮコントローラから受信し、旧スイッチプロセス２０１宛に送信された少なくとも１つの着信オープンフローメッセージ（イベント）を転送せず、上記少なくとも１つの着信オープンフローメッセージ（イベント）を一時的にバッファ２０６に格納する。バッファ２０６には、別のスイッチから転送されたパケットと、ＳＤＮコントローラから送信されたＦｌｏｗ−Ｍｏｄメッセージなどのオープンフローメッセージとが、旧スイッチプロセスによるイベント処理が完了するまで一時的に格納される。
【０１１４】
旧スイッチプロセス２０１がイベントの処理を終了すると、タイミング制御部２０４の制御の下、ハイパーバイザ２０５は旧スイッチプロセス２０１を終了する。
【０１１５】
ディスパッチャ２０８は、バッファ２０６に格納されている上記少なくとも１つのオープンフローメッセージ（イベント）を新スイッチプロセス２０２に転送する。
【０１１６】
ディスパッチャ２０８は、図１３に示す通り、ディスパッチルールテーブル２１０内のディスパッチルールの内容を更新する。ディスパッチャ２０８は、ディスパッチルールテーブル２１０内のディスパッチルールを、宛先ＩＰアドレスＸ→旧スイッチプロセス２０１から、宛先ＩＰアドレスＸ→新スイッチプロセス２０２に変更する。パケットヘッダの宛先ＩＰアドレスフィールドがＸであるパケットが受信されると、当該パケットは新スイッチプロセス２０２にディスパッチされる。図１３を参照すると、スイッチプロセス２０１は、ディスパッチャ２０８によりディスパッチされたパケットを受信すると、パケットのヘッダフィールド情報を、スイッチプロセス２０１のフローテーブル２０３のフローエントリと照合する。スイッチプロセス２０１のフローテーブル２０３のフローエントリは、受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの処理を定義するアクションフィールドとを含む。図１３のフローエントリは、受信パケットのヘッダの宛先ＩＰアドレスがＸである場合、スイッチプロセス２０１はアクション１を実行するというルールを定義する。ディスパッチルールテーブル２１０のディスパッチルールにおけるマッチ条件は、受信パケットのヘッダの宛先ＩＰアドレスに限定されないことは勿論である。ディスパッチルールにおけるマッチ条件は、宛先／送信元ＩＰアドレス、宛先／送信元ＭＡＣアドレス、ＴＣＰ／ＵＤＰ宛先または送信元ポート番号、または上記のうち少なくとも２つの項目の組み合わせを含むように構成されてもよい。フローテーブル２０３のフローエントリのマッチフィールドについても同様である。ディスパッチルールのマッチ条件は、パケットが受信されたスイッチ２００のポート番号を含んでもよい。
ディスパッチャ２０８は、ＮＩＣ／パケット転送エンジン２０７によって引き渡されたＰａｃｋｅｔ−Ｉｎメッセージを受信した場合、Ｐａｃｋｅｔ−Ｉｎメッセージは最初のパケットを含むため、ディスパッチャ２０８は、最初のパケットのヘッダフィールド情報を参照してＰａｃｋｅｔ−Ｉｎメッセージを対象スイッチプロセスにディスパッチし、対象スイッチプロセスは、Ｐａｃｋｅｔ−Ｉｎメッセージをコントローラに転送する。
【０１１７】
ハイパーバイザ２０５は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
−  スイッチプロセスがＳＤＮコントローラからのメッセージを処理した後、
−  １つの操作を処理した後、
−  定期的に、又は
−  ロールバックの契機となる所定のイベントの発生に応答して、
ロールバックの契機となるイベントの例は、完全性チェックを用いたスイッチプロセスの異常の検出などである。ハイパーバイザ２０５は、スイッチプロセスが１つ又はＮ個のフローを処理するたびに（Ｎは２以上の所定の整数）、又は、ロールバックの契機となる所定のイベントの発生に応じて、スイッチプロセスのロールバックを実行してもよい。図８のハイパーバイザ２０５の制御の下、仮想マシン上で動作するスイッチプロセスと、図７のハイパーバイザ１０５の制御の下、仮想マシン上で動作するコントローラプロセスは、ハイパーバイザ２０５及びハイパーバイザ１０５が統一ハイパーバイザとして実装された同じサーバコンピュータ上で提供されてもよい。ハイパーバイザ２０５の１つの機能として実現されるロールバック制御部１５は、新スイッチプロセス２０２が旧スイッチプロセス２０１から引き継ぐネットワーク状態のレイジーロールバックを制御してもよい。より具体的には、ハイパーバイザ２０５（ロールバック制御部１５）は、新スイッチプロセス２０２がネットワーク状態を使用する前に、又は確率的に、又は新スイッチプロセス２０２がアイドル状態にあるときに、ネットワーク状態が更新されるように制御を行ってもよい。
【０１１８】
図９は、図７のコントローラにおけるロールバックを示す図である。イベントの結果をアトミックにするために、ロールバック（旧コントローラプロセス１０１から新コントローラプロセス１０２への切り替え）は、旧コントローラプロセス１０１がイベント処理を終了したときに実行される。また、旧コントローラプロセス１０１は、旧コントローラプロセス１０１がイベント処理を完了した後に終了する。図９の例では、オープンフローメッセージ（イベント１）が、旧コントローラプロセス１０１にディスパッチされ、旧コントローラプロセス１０１は、オープンフローメッセージのイベント処理の完了と共に応答（２）を返す。イベント処理が完了すると、新しいイベント（３）が新コントローラプロセス１０２にディスパッチされる。
【０１１９】
図１０は、本実施形態によるロールバックにおけるイベントバッファリングを示す図である。ロールバック中のイベント損失を防止するために、イベントバッファリングのためのバッファ１０６が提供されている。イベントバッファリングは、イベントが旧コントローラプロセス１０１により処理されている間に実行される。
【０１２０】
図１０の例では、イベント１が旧コントローラプロセス１０１により処理されている間に受信されたイベント２がバッファ１０６にバッファリングされる。イベント１の処理が完了した後、即ち、旧コントローラプロセス１０１によるイベント１の処理の応答が出力されると、バッファリングされたイベント２は新コントローラプロセス１０２に送られる。このようにして、イベントの損失を防ぐことができる。バッファ１０６は、ＦＩＦＯ型バッファとして構成されてもよい。図１０のイベントバッファリングの仕組みを、図８を参照して説明したスイッチ２００に適用できるのは勿論である。
【０１２１】
図１１は、図７のＳＤＮコントローラ１００のハイパーバイザ１０５に実装されたロールバック制御部１５の一例を示す図である。図１１を参照すると、ロールバック制御部１５は、新プロセス作成部１５１−１と、イベントバッファリング開始部１５１−２と、旧プロセス終了部１５１−３と、イベントバッファリング停止部１５１−４と、図１のネットワーク状態更新制御部１５２に対応するネットワーク状態更新制御部１５２とを備える。新プロセス作成部１５１−１と、イベントバッファリング開始部１５１−２と、旧プロセス終了部１５１−３と、イベントバッファリング停止部１５１−４とは、図１のロールバック部１５１を構成する。図８のスイッチ２００のハイパーバイザ２０５は、図１１に示す構成と同じように構成されたロールバック制御部を含んでもよい。
【０１２２】
図１２は、図７のハイパーバイザ１０５に実装されたロールバック制御部１５の動作を説明するための図である。図１２を参照すると、ロールバックが開始されたとき、新プロセス作成部１５１−１は、新コントローラプロセス１０２を作成する（Ｓ２０１）。ロールバック制御部１５は、システム完全性の測定に基づいて、旧コントローラプロセス１０１の異常の検出時にロールバックを開始するように構成されてもよい。あるいは、ロールバック制御部１５は、ＳＤＮコントローラに接続された維持管理端末（不図示）から発行されたコマンドに基づいてロールバックを開始するように構成されてもよい。これに限定されないが、旧コントローラプロセス１０１が現在の稼働中のプロセスである一方、新プロセス作成部１５１−１は、待機プロセスとして新コントローラプロセス１０２を作成してもよい。即ち、旧コントローラプロセス１０１がアクティブ状態（実行状態）にある間、新コントローラプロセス１０２は、処理遷移図において待機状態に保たれてもよい。
【０１２３】
旧コントローラプロセス１０１と新コントローラプロセス１０２は、ネットワークトポロジ、スイッチのフローエントリ、ホスト位置情報（スイッチのポートに接続されたホスト）などのネットワーク状態が格納されている記憶部１０３を共有する（Ｓ２０２）。
【０１２４】
旧コントローラプロセス１０１がイベント処理を行っていない場合（Ｓ２０３の「Ｎｏ」分岐）、旧プロセス終了部１５１−３は旧プロセスを終了し、新コントローラプロセス１０２が稼働中のプロセスとなる。
【０１２５】
旧コントローラプロセス１０１がイベント処理中であると判断された場合（Ｓ２０３、「Ｙｅｓ」分岐）、イベントバッファリング開始部１５１−２は、イベントバッファリングを開始する（Ｓ２０５）。
【０１２６】
タイミング制御部１０４の制御の下、旧コントローラプロセス１０１によるイベント処理の完了を待つ（Ｓ２０６−Ｓ２０７）。
【０１２７】
旧コントローラプロセス１０１によるイベント処理が完了すると、旧プロセス終了部１５１−３は旧プロセスを終了し、新コントローラプロセス１０２が稼働中のプロセスとなる（Ｓ２０８）。
【０１２８】
イベントバッファリング停止部１５１−４は、ディスパッチャ１０８に、イベントバッファリングの開始から受信し、バッファ１０６に格納されていた旧コントローラプロセス１０１宛ての少なくとも１つのイベントを新コントローラプロセス１０２に送信させる制御を行い、その後イベントバッファリングを停止する（Ｓ２０９）。
【０１２９】
ディスパッチャ１０８は、ディスパッチルールのマッチ条件に関連する対象コントローラプロセスフィールドを、旧コントローラプロセス１０１から新コントローラプロセス１０２に変更する（Ｓ２１０）。これ以降、受信したイベントはディスパッチャ１０８によって新コントローラプロセス１０２にディスパッチされる。
【０１３０】
ネットワーク状態更新制御部１５２は、新コントローラプロセス１０２がネットワーク状態を使用する前に、又は確率的に、又は新コントローラプロセス１０２がアイドル状態にあるときに、記憶部１０３に格納されたネットワーク状態が更新されるように制御する（Ｓ２１１）。
【０１３１】
図８のスイッチ２００のハイパーバイザ２０５は、図１２に示す方法と同じ方法で動作するように構成されてもよい。
【０１３２】
［第４の例示的な実施形態］
図１４は、第４の例示的な実施形態によるＳＤＮコントローラ１００を示す図である。図１４において、ハイパーバイザ１０５は、隔離環境１２１及び１２２を制御および管理し（隔離環境１２１及び１２２の作成など）、隔離環境１２１、１２２で実行されるコントローラプロセスを管理する（旧コントローラプロセス１０１及び新コントローラプロセス１０２の作成および終了）。ディスパッチャ１０８は、ハイパーバイザ１０５と隔離環境との間に配置される。図１４では、これに限定されるものではないが、テナント毎にコントローラプロセスが割り当てられているものとする。即ち、例えば、テナントＡとキャリア（通信事業者）との契約に基づいて、少なくとも１つのコントローラプロセスＡがテナントＡに割り当てられる。ディスパッチャ１０８は、テナントのためにネットワークチャネル制御への制御プロキシとして機能するオープンフローチャネルプロキシとして機能する。
【０１３３】
ディスパッチャ１０８は、テナントネットワークと対象コントローラプロセスとの対応関係を定義するディスパッチルールテーブルに基づき、テナントＡネットワークに属するスイッチから、テナントＡに割り当てられたコントローラプロセスにオープンフローメッセージをディスパッチする。第４の例示的な実施形態において、コントローラプロセスが隔離環境で実行される以外のＳＤＮコントローラの特徴は、他のＳＤＮコントローラと同様である。
【０１３４】
図１５は、第４の例示的な実施形態におけるスイッチを示す図である。ハイパーバイザ２０５は、隔離環境２２１、２２２を提供し、隔離環境２２１、２２２において実行されるスイッチプロセス（旧スイッチプロセス２０１、新スイッチプロセス２０２）を作成／終了する制御を行う。スイッチプロセスは、図５に示すように、テナントごとに割り当てられてもよい。即ち、テナントＡとキャリアとの契約に基づいて、少なくとも１つのスイッチプロセスが、例えばテナントＡのテナントネットワークに割り当てられる。
【０１３５】
ＮＩＣ１０７とハイパーバイザ２０５との間に配置されたディスパッチャ２０８は、ハイパーバイザ２０５を介して、フロー（ＮＩＣ２０７の１つから受信したパケット）を対応するスイッチプロセスにディスパッチする。また、ディスパッチャ２０８は、スイッチプロセス２０１から受信したパケットを、対応するＮＩＣ２０７にディスパッチして、上記パケットをネットワークに出力する。スイッチプロセスが隔離環境で実行される以外のスイッチの特徴は、第２の例示的な実施形態におけるスイッチと同様である。
【０１３６】
隔離技術は、隔離された環境でプロセスが実行される技術である。隔離技術では、システム全体に影響を与えないようにマルウェアを動作させる封じ込め環境を提供する。
【０１３７】
図１６は、図１４に示すＳＤＮコントローラを使用するテナントベースのネットワークを示す図である。なお、図１６では、説明の便宜上、３つのスイッチ（スイッチプロセス）２００Ａ−２００Ｃが設けられているが、スイッチプロセスの数は勿論３つに限定されず、１以上の任意の整数でよい。
【０１３８】
図１６を参照すると、例えば、マルウェアによる被害が隔離環境１２１Ｃに封じ込められているとする。即ち、コントローラプロセス１０１Ｃがマルウェア１２４により侵害されたとしても、マルウェア１２４は隔離環境１２１Ｃ及びテナントＣのネットワークに封じ込められており、他のフロー又はテナントネットワークＢおよびＣに影響を及ぼすことはできない。この場合、コントローラプロセス１０１Ｃは、上記実施形態で説明した動作に応じて、新コントローラプロセス１０２Ｃにロールバックされる。
【０１３９】
以下、本実施形態による隔離環境について説明する。
【０１４０】
本実施形態では、これに限定されないが、ハイパーバイザ１０５がメモリアイソレーションを提供する。隔離環境１２１Ａのコントローラプロセス１０１Ａに割り当てられたメモリ領域（隔離領域）は、他の隔離環境１２１Ｂ及び１２１Ｃの他のコントローラプロセス１０１Ｂ及び１０１Ｃに割り当てられた他のメモリ領域（隔離領域）から隔離されており、コントローラプロセスおよびＯＳによって共有される共有領域を除いて、ＯＳ／ハイパーバイザ又はデバイスドライバ（不図示）に割り当てられたメモリ領域からも隔離されている。
【０１４１】
図１７Ａは、ハイパーバイザまたはハードウェアベースのメモリ保護の例を示す図である。図１７Ａに示すように、プロセス４１１、４１２にそれぞれ割り当てられた隔離領域４２１、４２２は、メモリ４２０内の別々のメモリ領域である。ＯＳ（ハイパーバイザ）に割り当てられたＯＳ／ハイパーバイザ領域４２３は、プロセス４１１及び４１２に割り当てられた隔離領域４２１及び４２２とは別であり、したがって、ＯＳ（ハイパーバイザ）は、プロセス４１１、４１２から保護されている。プロセス４１１及び４１２によってアドレス指定されるメモリ空間は別々であるので、プロセス４１１及び４１２のそれぞれは、他のプロセスの隔離領域へのメモリアクセスを有することができない。
【０１４２】
これに限定されないが、ハイパーバイザやハードウェアベースのＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）は、プロセスのメモリ空間のベースアドレスが設定されたリロケーションレジスタ（不図示）を用いて、各プロセスの論理（仮想）アドレスから物理アドレスへのアドレス変換を行ってもよい。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。また、ＭＭＵは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあるか否かチェックする。これはメモリ保護の仕組みとして機能する。ＭＭＵは、故障処理によるメモリアクセス違反の発生を検出すると、例えば、プロセスのアクセス権を持たないメモリ空間へのアクセス、又は、ベースアドレスにより定義された範囲やプロセスに割り当てられた制限外のアクセスを検出した場合、故障処理は、例外処理によりアドレス指定エラーを通知されるか、アドレス指定エラーの通知で中断される。
【０１４３】
ＭＭＵベースのメモリ保護は、図１７Ｂに示すページテーブルによって実現されてもよい。なお、ＭＭＵは、ページベースのＭＭＵに限定されず、例えば、セグメントベースのメモリ保護が採用されてもよい。ページは固定長の連続ブロックである（例えば、４ＫＢ（Ｋｉｌｏ  Ｂｙｔｅｓ））。プロセスから発行される論理アドレス（仮想アドレス）４３０は、ページ番号フィールド（ｎ−ｍビット）及びオフセットフィールド（ｍビット）を含む。この場合、ページサイズは２＾ｍであり、＾はべき乗演算子を表し、プロセスのメモリアドレス空間は２＾ｎである。論理アドレス４３０のページ番号Ｘ（上位ｎ−ｍビット）が抽出され、インデックス（ページエントリ）としてページテーブル４３１に供給される。ページテーブル４３１のＸ番目のエントリに格納されている値Ｚ（ｐビット）が、ページテーブル４３１から読み出される。即ち、ページテーブル４３１は、ＸからＺへのページ変換を行う。一般にＺのビット長ｐはＸのビット長ｐよりも長い。Ｚは、上位ビットとして、論理アドレス４３０の下位ｍビットＹと組み合わされ、メモリ（マシンメモリ）４３３に供給する物理アドレス４３２が生成される。この場合、メモリ４３３のＺページのオフセットアドレスＹがアクセスされる。
【０１４４】
図１４〜図１６を参照すると、ハイパーバイザ１０５及び２０５は、それぞれのメモリ領域に、各スイッチプロセスのページテーブルを保持するように構成されてもよい。これによって、プロセスがページ変換を改ざんすることが防止される。スイッチプロセス及びＯＳ／ハイパーバイザによって共有される共有メモリ領域に対して、ＯＳ／ハイパーバイザのみが共有領域への書き込み操作を実行することができるように、アクセス制御情報に基づいて、スイッチプロセスから共有領域への読み取り／書き込みアクセスを制御するアクセスコントローラが設けられてもよい。
【０１４５】
ハイパーバイザ１０５及び２０５は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されてもよい。これに限定されるものではないが、ハイパーバイザ１０５及び２０５は、サーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストＯＳと、アプリケーションとを含む仮想マシン（ＶＭ）を制御してもよく、仮想化ハードウェア資源は、例えば、仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想化ストレージと、仮想化ネットワークとを含む。
【０１４６】
上述した実施形態では、仮想マシン上で動作するプロセスをハイパーバイザが制御する構成について説明したが、実施形態の概念は、ハイパーバイザやサーバ仮想化を使用しないプロセッサ上で動作するプロセスにも適用してもよい。また、上記実施形態では、隔離された環境で仮想マシン上のプロセスの実行をハイパーバイザによって制御する構成について説明したが、実施形態の概念は、ハイパーバイザを使用しないメモリアイソレーションなどにより、隔離された環境をプロセスへ提供できるように構成されたプロセッサ上で動作するプロセスにも適用してもよい。
【０１４７】
また、上記実施形態では、スイッチやコントローラへの適用例について説明したが、本発明の適用はオープンフローネットワークに限定されないことは勿論である。
【０１４８】
上記の特許文献１−４および非特許文献１−３の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲内において種々の開示要素（各補足の各要素、各例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし選択が可能である。即ち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１４９】
１  ＳＤＮコントローラ
２  ＳＤＮアプリケーション
３  ネットワーク要素
４  記憶装置（記憶部）
５  ネットワークポリシー
６  ＳＤＮノースバウンドインタフェース
７  ＳＤＮサウスバウンドインタフェース
１０  通信装置（ノード）
１１  旧プロセス（第１のプロセス）
１２  新プロセス１２（第２のプロセス）
１３  記憶部
１４  タイミング制御部
１５  ロールバック制御部
１６  バッファ
１７  ＮＩＣ（ネットワークインタフェースカード）
１００  ＳＤＮコントローラ
１０１、１０１Ａ、１０１Ｂ、１０１Ｃ  旧コントローラプロセス（第１のコントローラプロセス）
１０２、１０２Ｃ  新コントローラプロセス（第２のコントローラプロセス）
１０３  記憶部
１０４  タイミング制御部
１０５  ハイパーバイザ
１０６  バッファ
１０７  ＮＩＣ
１０８  ディスパッチャ
１０９  管理制御部
１１０  ディスパッチルールテーブル
１１１  ノースバウンドＡＰＩディスパッチャ
１１２  バッファ
１２１、１２１Ａ、１２１Ｂ、１２１Ｃ、１２２  隔離環境
１２４  マルウェア
１５１  ロールバック部
１５１−１  新プロセス作成部
１５１−２  イベントバッファリング開始部
１５１−３  旧プロセス終了部
１５１−４  イベントバッファリング停止部
１５２  ネットワーク状態更新制御部
２００  スイッチ
２０１  旧スイッチプロセス（第１のスイッチプロセス）
２０２  新スイッチプロセス（第２のスイッチプロセス）
２０３  記憶部
２０４  タイミング制御部
２０５  ハイパーバイザ
２０６  バッファ
２０７  ＮＩＣ／パケット転送エンジン
２０８  ディスパッチャ
２０９  管理制御部
２１０  ディスパッチルールテーブル
２２１、２２２  隔離環境
３００  コンピュータシステム
３０１  プロセッサ
３０２  ストレージ（メモリ）
３０３  通信インタフェース
４１１  プロセス（プロセス１）
４１２  プロセス（プロセス２）
４２０  メモリ
４２１  隔離領域（隔離領域１）
４２２  隔離領域（隔離領域２）
４２３  ＯＳ／ハイパーバイザ領域
４３０  論理アドレス（仮想アドレス）
４３１  ページテーブル
４３２  物理アドレス
４３３  メモリ
【図１】
2019530267.tif 000003
【図２】
2019530267.tif 000004
【図３】
2019530267.tif 000005
【図４】
2019530267.tif 000006
【図５】
2019530267.tif 000007
【図６】
2019530267.tif 000008
【図７】
2019530267.tif 000009
【図８】
2019530267.tif 000010
【図９】
2019530267.tif 000011
【図１０】
2019530267.tif 000012
【図１１】
2019530267.tif 000013
【図１２】
2019530267.tif 000014
【図１３】
2019530267.tif 000015
【図１４】
2019530267.tif 000016
【図１５】
2019530267.tif 000017
【図１６】
2019530267.tif 000018
【図１７Ａ】
2019530267.tif 000019
【図１７Ｂ】
2019530267.tif 000020
【図１８】
2019530267.tif 000021
【図１９】
2019530267.tif 000022
【国際調査報告】
2019530267.tif 000023
2019530267.tif 000024
2019530267.tif 000025