(57)【要約】【課題】オープンフローネットワークにおいてオープンフローコントローラとオープンフロースイッチとの間に予備回線を設けることなくオープンフローチャネルの障害の復旧を実現する。【解決手段】複数のオープンフロースイッチおよび複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用されるオープンフロースイッチは、オープンフローコントローラとの間のリンクの障害を検出する障害検出部と、障害検出部により障害が検出されたときに、他のオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルを確立するチャネル管理部を有する。【選択図】図４
2015204533.tif 000002
【特許請求の範囲】
【請求項１】
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用されるオープンフロースイッチであって、
前記オープンフローコントローラとの間のリンクの障害を検出する障害検出部と、
前記障害検出部により障害が検出されたときに、他のオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルを確立するチャネル管理部と、
を有するオープンフロースイッチ。
【請求項２】
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用されるオープンフロースイッチであって、
前記オープンフローコントローラとの間のリンクに障害が発生した障害オープンフロースイッチから、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を受信したときに、前記障害オープンフロースイッチとの間に第１のオープンフローチャネルを確立し、前記オープンフローコントローラとの間に第２のオープンフローチャネルを確立するチャネル管理部と、
前記障害オープンフロースイッチから前記第１のオープンフローチャネルを介して受信する制御情報を前記第２のオープンフローチャネルを介して前記オープンフローコントローラへ転送し、前記オープンフローコントローラから前記第２のオープンフローチャネルを介して受信する制御情報を前記第１のオープンフローチャネルを介して前記障害オープンフロースイッチへ転送する転送部と、
を有するオープンフロースイッチ。
【請求項３】
前記オープンフローコントローラとの間のリンクの障害を検出する障害検出部をさらに有し、
前記障害検出部により障害が検出されたときに、前記チャネル管理部は、予め指定されているデフォルトオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を前記デフォルトオープンフロースイッチに送信する
ことを特徴とする請求項２に記載のオープンフロースイッチ。
【請求項４】
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用される障害復旧方法であって、
第１のオープンフロースイッチと前記オープンフローコントローラとの間のリンクに障害が発生したときに、前記第１のオープンフロースイッチから第２のオープンフロースイッチへ、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を送信し、
前記チャネル確立要求に応じて、前記第１のオープンフロースイッチと前記第２のオープンフロースイッチとの間に第１のオープンフローチャネルを確立し、前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に第２のオープンフローチャネルを確立する
ことを特徴とする障害復旧方法。
【請求項５】
前記第１のオープンフロースイッチから前記第１のオープンフローチャネルを介して伝送される制御情報を前記第２のオープンフローチャネルを介して前記オープンフローコントローラへ転送し、前記オープンフローコントローラから前記第２のオープンフローチャネルを介して伝送される制御情報を前記第１のオープンフローチャネルを介して前記第１のオープンフロースイッチへ転送するように、前記第２のオープンフロースイッチの転送回路を設定する
ことを特徴とする請求項４に記載の障害復旧方法。
【請求項６】
前記第２のオープンフローチャネルは、前記チャネル確立要求に応じて前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に確立されるコネクション上に設定される
ことを特徴とする請求項４に記載の障害復旧方法。
【請求項７】
前記第２のオープンフローチャネルは、前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に予め確立されているコネクション上に設定される
ことを特徴とする請求項４に記載の障害復旧方法。
【請求項８】
前記第１のオープンフロースイッチは、前記第１のオープンフロースイッチと前記オープンフローコントローラとの間の通信を識別する識別子を制御情報に付与して前記第１のオープンフローチャネルへ出力し、
前記オープンフローコントローラは、前記識別子を制御情報に付与して前記第２のオープンフローチャネルへ出力する
ことを特徴とする請求項４に記載の障害復旧方法。
【請求項９】
前記オープンフローコントローラは、各オープンフロースイッチのトラヒック量を表す統計情報を収集し、
前記オープンフローコントローラは、前記統計情報に基づいてトラヒック量が最も少ないオープンフロースイッチを特定し、
前記オープンフローコントローラは、特定したオープンフロースイッチを前記第１のオープンフロースイッチに通知し、
前記第１のオープンフロースイッチは、前記オープンフローコントローラにより特定されたオープンフロースイッチへ、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を送信する
ことを特徴とする請求項４に記載の障害復旧方法。
【請求項１０】
各オープンフロースイッチの負荷を表す統計情報を収集し、
前記統計情報に基づいて前記第２のオープンフロースイッチを決定し、
前記第１のオープンフロースイッチは、前記統計情報に基づいて決定された前記第２のオープンフロースイッチへ前記チャネル確立要求を送信する
ことを特徴とする請求項４に記載の障害復旧方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オープンフローネットワークにおいて使用されるオープンフロースイッチ、およびオープンフローネットワークの障害復旧方法に係わる。
【背景技術】
【０００２】
ＳＤＮ（Software Defined Networking）についての研究および開発が進められている。ＳＤＮは、ソフトウェアでネットワーク全体の挙動を制御する。そして、ＳＤＮを実現する技術の１つとしてオープンフローネットワークが注目されている。オープンフローネットワークは、オープンフローコントローラ（ＯＦＣ：Open Flow Controller）および複数のオープンフロースイッチ（ＯＦ−ＳＷ：Open Flow Switch）を含んで構成される。
【０００３】
各オープンフロースイッチは、フローテーブルを有する。フローテーブルは、１または複数のフローエントリにより構成される。各フローエントリには、対応するフローに対する動作が記述されている。具体的には、各フローエントリは、「マッチ条件」「アクション」などにより構成される。マッチ条件は、受信パケットが属するフローを識別する識別情報に相当する。アクションは、マッチ条件に適合する受信パケットに対する動作を記述する。そして、オープンフロースイッチは、受信パケットのヘッダ情報でフローテーブルのマッチ条件をサーチし、対応するアクションを実行する。
【０００４】
オープンフローコントローラは、各オープンフロースイッチのフローテーブルを一元的に管理する。また、オープンフローコントローラは、各オープンフロースイッチのフローテーブルの内容を更新することができる。
【０００５】
オープンフローネットワークの立上げ時には、オープンフローコントローラと各オープンフロースイッチとの間にそれぞれオープンフローチャネルが確立される。そして、オープンフローコントローラと各オープンフロースイッチとの間でそれぞれオープンフローチャネルを介してメッセージが伝送され、各オープンフロースイッチのフローテーブルが設定される。これにより、オープンフローコントローラの制御の下でパケット転送が実現される。また、ネットワークの動作を変更する際には、オープンフローコントローラは、必要な情報および指示を含むメッセージを対応するオープンフローチャネルを介して対応するオープンフロースイッチに送信する。そうすると、そのオープンフロースイッチは、受信したメッセージに応じてフローテーブルを更新する。
【０００６】
このように、各オープンフロースイッチは、オープンフローコントローラからオープンフローチャネルを介して受信するメッセージに基づいてフローテーブルを作成し、そのフローテーブルを利用してパケットを転送する。このため、オープンフローコントローラとオープンフロースイッチとの間に確立されているオープンフローチャネルに障害が発生すると、オープンフロースイッチは、オープンフローコントローラの制御の下でのパケット転送を実行できなくなるおそれがある。したがって、オープンフローチャネルの障害を復旧するための構成または方法が提案されている。
【０００７】
例えば、オープンフローコントローラと各オープンフロースイッチとの間の物理リンクを２重化する構成が提案されている。この場合、現用系リンク上にオープンフローチャネルが確立される。そして、現用系リンクに障害が発生したときは、予備系リンク上にオープンフローチャネルが確立される。
【０００８】
なお、関連する技術は、例えば、特許文献１〜６に記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】ＷＯ２０１１／０８３７８５号
【特許文献２】特開２０１１−１４６９８２号公報（特許第５２０７０８２号）
【特許文献３】特開２０１１−１６０３６３号公報
【特許文献４】特開２０１１−１６６３８４号公報
【特許文献５】特開２０１３−２１１７０６号公報
【特許文献６】特開２０１２−４９６７４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、オープンフローコントローラと各オープンフロースイッチとの間の物理リンクを２重化する構成では、ネットワークを構築するためのコストが増加してしまう。また、各オープンフロースイッチの物理ポートの数を増やす必要がある。
【００１１】
本発明の１つの側面に係わる目的は、オープンフローネットワークにおいてオープンフローコントローラとオープンフロースイッチとの間に予備回線を設けることなくオープンフローチャネルの障害の復旧を実現することである。
【課題を解決するための手段】
【００１２】
本発明の１つの態様のオープンフロースイッチは、複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用される。このオープンフロースイッチは、前記オープンフローコントローラとの間のリンクの障害を検出する障害検出部と、前記障害検出部により障害が検出されたときに、他のオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルを確立するチャネル管理部と、を有する。
【発明の効果】
【００１３】
上述の態様によれば、オープンフローネットワークにおいてオープンフローコントローラとオープンフロースイッチとの間に予備回線を設けることなくオープンフローチャネルの障害を復旧できる。
【図面の簡単な説明】
【００１４】
【図１】オープンフローネットワークの一例を示す図である。
【図２】フローテーブルの実施例を示す図である。
【図３】オープンフローネットワークの立上げ手順を示すシーケンス図である。
【図４】リンク障害に対する復旧手順の一例を示す図である。
【図５】ＯＦスイッチの構成の一例を示す図である。
【図６】スイッチ管理テーブルの一例を示す図である。
【図７Ａ】復旧手順の一例を示すシーケンス図（その１）である。
【図７Ｂ】復旧手順の一例を示すシーケンス図（その２）である。
【図８】多重障害に対する復旧手順の一例を示す図である。
【図９】復旧手順のバリエーションを示す図である。
【図１０】復旧手順の他のバリエーションを示す図である。
【図１１】第２の実施形態における復旧手順の一例を示す図である。
【図１２】ＯＦスイッチの統計情報について説明する図である。
【図１３Ａ】第２の実施形態の復旧手順の一例を示すシーケンス図（その１）である。
【図１３Ｂ】第２の実施形態の復旧手順の一例を示すシーケンス図（その２）である。
【図１３Ｃ】第２の実施形態の復旧手順の一例を示すシーケンス図（その３）である。
【発明を実施するための形態】
【００１５】
図１は、本発明の実施形態に係わるオープンフローネットワークの一例を示す。実施形態に係わるオープンフローネットワーク１００は、図１に示すように、複数のオープンフロースイッチ（ＯＦ−ＳＷ：Open Flow Switch）１０、及びオープンフローコントローラ（ＯＦＣ：Open Flow Controller）２０を有する。この例は、オープンフローネットワーク１００は、４台のオープンフロースイッチ１０（１０−１〜１０−４）を有する。また、各オープンフロースイッチ１０とオープンフローコントローラ２０との間には、レイヤ２スイッチ（Ｌ２−ＳＷ）３０が設けられている。
【００１６】
尚、以下の記載では、オープンフロースイッチを「ＯＦスイッチ」と呼ぶことがある。また、オープンフローコントローラを「ＯＦコントローラ」と呼ぶことがある。さらに、図面上では、ＯＦスイッチ１０−１〜１０−４を「ＯＦ−ＳＷ１」〜「ＯＦ−ＳＷ４」と表記することがある。
【００１７】
ＯＦスイッチ１０は、他の１または複数のＯＦスイッチ１０に接続されている。図１に示す実施例では、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−２およびＯＦスイッチ１０−３に接続されている。ＯＦスイッチ１０−２は、ＯＦスイッチ１０−１およびＯＦスイッチ１０−４に接続されている。ＯＦスイッチ１０−３は、ＯＦスイッチ１０−１およびＯＦスイッチ１０−４に接続されている。ＯＦスイッチ１０−４は、ＯＦスイッチ１０−２およびＯＦスイッチ１０−３に接続されている。なお、ＯＦスイッチ１０間のリンクは、例えば、光ファイバにより実現される。また、ＯＦスイッチ１０間のリンク上には、中継ノードが設けられていてもよい。
【００１８】
ＯＦスイッチ１０−１にはホスト４１が収容されている。また、ＯＦスイッチ１０−４にはホスト４２が収容されている。この実施例では、ホスト４１およびホスト４２のＩＰアドレスは、それぞれ「10.0.0.1」「10.0.0.2」である。
【００１９】
ＯＦスイッチ１０は、ＯＦコントローラ２０に接続されている。この実施例では、各ＯＦスイッチ１０は、レイヤ２スイッチ３０を介してＯＦコントローラ２０に接続されている。また、各ＯＦスイッチ１０とレイヤ２スイッチ３０との間にはそれぞれ専用の物理リンクが設けられている。ただし、オープンフローネットワーク１００において、レイヤ２スイッチ３０は必須の装置ではない。
【００２０】
ＯＦスイッチ１０は、フローテーブル１１を有する。フローテーブル１１は、１または複数のフローエントリにより構成される。各フローエントリには、対応するフローに対する動作が記述されている。
【００２１】
図２は、フローテーブル１１の実施例を示す。図２に示す例では、フローテーブル１１の各エントリは「マッチ条件」「アクション」「統計情報」を含む。「マッチ条件」は、受信パケットが属するフローを識別する。図２に示す例では、マッチ条件として送信元ホストのＩＰアドレスが記録されている。「アクション」は、マッチ条件に適合する受信パケットに対する動作を記述する。たとえば、ＯＦスイッチ１０−１（ＯＦ−ＳＷ１）のフローテーブル１１には「マッチ条件：送信元ＩＰアドレス：10.0.0.1」に対して「アクション：受信パケットをポートｐ２を介して出力する」が記録されている。「統計情報」は、マッチ条件に適合するフローに係わる統計情報を表す。図２に示す例では、ＯＦスイッチ１０を通過するフローのトラヒック量（ここでは、転送パケットのバイト数）が記録されている。
【００２２】
なお、フローテーブル１１のマッチ条件は、受信パケットの送信元ＩＰアドレスに限定されず、他の条件であってもよい。即ち、マッチ条件としては、受信パケットのヘッダ内の任意の情報を使用することができる。例えば、ポート番号、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス、仮想ＬＡＮ識別子、送信元ＩＰアドレス、宛先ＩＰアドレス、またはこれらの任意の組合せをマッチ条件として使用してもよい。
【００２３】
フローテーブル１１は、ＯＦコントローラ２０により設定され、更新される。即ち、ＯＦコントローラ２０は、各ＯＦスイッチ１０のフローテーブル１１を設定および更新することができる。例えば、ＯＦコントローラ２０は、ユーザからの要求に応じて、その要求に係わる１または複数のＯＦスイッチ１０のフローテーブル１１を設定または更新する。
【００２４】
ＯＦコントローラ２０と各ＯＦスイッチ１０との間では、それぞれオープンフローチャネル（以下、ＯＦチャネル）を介して双方向にメッセージが伝送される。図１に示す例では、ＯＦコントローラ２０とＯＦスイッチ１０−１、１０−２、１０−３、１０−４との間にそれぞれＯＦチャネルＣＨ１、ＣＨ２、ＣＨ３、ＣＨ４が設定されている。ＯＦチャネルは、例えば、ＴＣＰコネクションにより実現される。或いは、例えば、ＴＣＰコネクション上に設定される。
【００２５】
図３は、オープンフローネットワーク１００の立上げ手順の一例を示すシーケンス図である。このシーケンスは、ＯＦコントローラ２０と各ＯＦスイッチ１０との間でそれぞれ実行される。
【００２６】
コネクション確立処理においては、ＴＣＰまたはＴＬＳを利用してコネクションが確立される。すなわち、ＯＦスイッチ２０は、ＯＦコントローラ２０へコネクション確立要求メッセージを送信する。ＯＦコントローラ２０は、コネクション確立要求メッセージに対してＯＦスイッチ１０へコネクション確立応答メッセージを返送する。ＯＦスイッチ１０は、ＯＦコントローラ２０へＡＣＫメッセージを送信する。この後、ＯＦコントローラ２０とＯＦスイッチ１０との間でＨｅｌｌｏメッセージが交換される。
【００２７】
ハンドシェイク処理では、ＯＦコントローラ２０は、ＯＦスイッチ１０へFeatures要求メッセージを送信する。そうすると、ＯＦスイッチ１０は、この要求メッセージに応じてＯＦコントローラ２０へFeatures応答メッセージを返送する。Features応答メッセージは、ＯＦスイッチ１０の基本情報を含む。この基本情報は、例えば、ＯＦスイッチ１０を識別する情報（ＤＰＩＤ：Data Path ID）、ＯＦスイッチ１０がサポートする機能を表す情報などを含む。
【００２８】
フローテーブル設定処理においては、ＯＦコントローラ２０からＯＦスイッチ１０に対してFlowModメッセージが送信される。FlowModメッセージは、フローテーブル１１に格納される情報を含む。したがって、ＯＦコントローラ２０は、ＯＦスイッチ１０のフローテーブル１１を設定することができる。
【００２９】
死活監視処理では、ＯＦコントローラ２０からＯＦスイッチ１０へEcho要求メッセージが送信される。ＯＦスイッチ１０は、Echo要求メッセージを受信すると、ＯＦコントローラ２０へEcho応答メッセージを返送する。この死活監視処理は、例えば、定期的に実行される。したがって、ＯＦコントローラ２０は、Echo要求／応答メッセージに基づいて、ＯＦスイッチ１０との間のリンクの障害をモニタできる。同様に、ＯＦスイッチ１０も、Echo要求／応答メッセージに基づいて、ＯＦコントローラ２０との間のリンクの障害をモニタできる。
【００３０】
この後、ＯＦコントローラ２０は、必要に応じて、任意のタイミングでＯＦスイッチ１０へFlowModメッセージを送信することができる。また、ＯＦスイッチ１０は、ＯＦコントローラ２０に対してFlowModメッセージを要求することができる。例えば、受信パケットのヘッダ情報がフローテーブル１１のマッチ条件に適合しないときは、ＯＦスイッチ１０は、ＯＦコントローラ２０に対して問合せメッセージを送信する。この場合、ＯＦコントローラ２０は、問合せメッセージに対応するFlowModメッセージを生成してＯＦスイッチ１０へ送信する。
【００３１】
なお、ＯＦコントローラ２０は、メッセージ送受信部２１およびチャネル管理部２２を有する。メッセージ送受信部２１は、ＯＦスイッチ１０へＯＦメッセージを送信し、ＯＦスイッチ１０からＯＦメッセージを受信する。なお、ＯＦメッセージは、ＯＦスイッチ１０とＯＦコントローラ２０との間で伝送される制御情報の一例である。ＯＦメッセージの実施例は、図３を参照しながら説明した通りである。ただし、ＯＦメッセージは、図３に示すメッセージに限定されるものではない。チャネル管理部２２は、ＯＦスイッチ１０との間のＯＦチャネルを管理する。
【００３２】
上記構成のオープンフローネットワーク１００において、例えば、ホスト４１とホスト４２との間の通信が要求されたものとする。この場合、ＯＦコントローラ２０は、ホスト４１とホスト４２との間の通信を提供するパスを決定する。この実施例では、ＯＦスイッチ１０−１、１０−２、１０−４を経由するパスが指定されるものとする。この場合、ＯＦコントローラ２０は、ＯＦスイッチ１０−１、１０−２、１０−４のフローテーブル１１をそれぞれ図２に示す状態に更新する。
【００３３】
ホスト４１からホスト４２へ送信されるパケットは、ＯＦスイッチ１０−１により受信される。ＯＦスイッチ１０−１は、受信パケットのヘッダ情報（ここでは、送信元ＩＰアドレス）でフローテーブル１１を参照することにより、ポートｐ２を介してそのパケットを送出する。よって、このパケットは、ＯＦスイッチ１０−２へ転送される。同様に、ＯＦスイッチ１０−２は、このパケットをＯＦスイッチ１０−４へ転送する。また、ＯＦスイッチ１０−４は、このパケットをホスト４２へ転送する。ホスト４２は、ホスト４１から送信されるパケットを受信する。同様に、ホスト４２から送信されるパケットは、ＯＦスイッチ１０−４、１０−２、１０−１によりホスト４１へ転送される。
【００３４】
このように、ＯＦスイッチ１０は、フローテーブル１１に基づいて受信パケットを処理する。そして、フローテーブル１１は、ＯＦコントローラ２０により設定および更新される。よって、ＯＦコントローラ２０との間のリンクに障害が発生すると、ＯＦスイッチ１０は、要求されている通信サービスを提供できない。したがって、オープンフローネットワーク１００は、リンク障害を復旧させる機能を有している。
【００３５】
＜第１の実施形態＞
図４は、ＯＦスイッチ１０とＯＦコントローラ２０との間のリンク障害に対する復旧手順の一例を示す。図４に示す例では、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のリンク（実際には、ＯＦスイッチ１０−１とレイヤ２スイッチ３０との間のリンク）に障害が発生している。そして、この結果、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のＯＦチャネルＣＨ１が切断されている。この場合、ＯＦスイッチ１０−１およびＯＦコントローラ２０は、Echo要求／Echo応答を受信しないことにより、それぞれその障害を検出する。
【００３６】
ＯＦスイッチ１０−１は、ＯＦコントローラ２０との間のリンク障害を検出すると、予め指定されているプロキシＯＦスイッチとの間に新たなＴＣＰコネクションを確立する。図４に示す例では、ＯＦスイッチ１０−１に対して指定されているプロキシＯＦスイッチは、ＯＦスイッチ１０−２である。この場合、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−２との間に新たなＴＣＰコネクションを確立する。これにより、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間にＯＦチャネルＣＨ１ａが設定される。
【００３７】
続いて、ＯＦスイッチ１０−２は、ＯＦコントローラ２０との間に、ＯＦスイッチ１０−１のための新たなＴＣＰコネクションを確立する。ここで、ＯＦコントローラ２０は、ＯＦスイッチ１０−１との間のリンクに障害が発生したことを検出している。また、ＯＦコントローラ２０は、ＯＦスイッチ１０−１のプロキシＯＦスイッチがＯＦスイッチ１０−２であることを知っているものとする。そうすると、ＯＦコントローラ２０は、ＯＦスイッチ１０−２からコネクション確立要求を受信したときに、そのコネクション確立要求を許可する。これにより、ＯＦスイッチ１０−２とＯＦコントローラ２０との間にＴＣＰコネクションが確立され、ＯＦチャネルＣＨ１ｂが設定される。
【００３８】
更に、ＯＦスイッチ１０−２は、下記の処理が実行されるようにメッセージ転送部の設定を更新する。
（１）ＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１からＯＦコントローラ２０宛てのＯＦメッセージを受信したときは、そのＯＦメッセージをＯＦチャネルＣＨ１ｂを介してＯＦコントローラ２０へ転送する。
（２）ＯＦチャネルＣＨ１ｂを介してＯＦコントローラ２０からＯＦスイッチ１０−１宛てのＯＦメッセージを受信したときは、そのＯＦメッセージをＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１へ転送する。
【００３９】
なお、上述したＯＦチャネルＣＨ１ａおよびＣＨ１ｂは、例えば、仮想ＬＡＮで実現してもよい。この場合、例えば、ＯＦスイッチ１０−１とＯＦコントローラ２０との間の通信を識別する仮想ＬＡＮ識別子が予めＯＦスイッチ１０−１、ＯＦスイッチ１０−２、ＯＦコンントローラ２０に設定されている。或いは、ＯＦチャネルＣＨ１ａ、ＣＨ１ｂを設定する手順において、上述の仮想ＬＡＮ識別子がＯＦスイッチ１０−１、ＯＦスイッチ１０−２、ＯＦコンントローラ２０に設定さるようにしてもよい。なお、以下の説明では、この仮想ＬＡＮ識別子を「ＶＩＤ−ＳＷ１」と呼ぶことがある。そして、ＯＦスイッチ１０−１は、ＯＦコントローラ２０へＯＦメッセージを送信するときは、そのＯＦメッセージにＶＩＤ−ＳＷ１を付与する。また、ＯＦスイッチコントローラ２０は、ＯＦスイッチ１０−１へＯＦメッセージを送信するときは、そのＯＦメッセージにＶＩＤ−ＳＷ１付与する。さらに、ＯＦスイッチ１０−２は、下記の処理が実行されるようにメッセージ転送部の設定を更新する。
（１）ＶＩＤ−ＳＷ１が付与されたＯＦメッセージをＯＦスイッチ１０−１からＯＦチャネルＣＨ１ａを介して受信したときは、そのＯＦメッセージをＯＦチャネルＣＨ１ｂを介してＯＦコントローラ２０へ転送する。
（２）ＶＩＤ−ＳＷ１が付与されたＯＦメッセージをＯＦコントローラ２０からＯＦチャネルＣＨ１ｂを介して受信したときは、そのＯＦメッセージをＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１へ転送する。
【００４０】
このように、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のリンク障害を検出したときは、オープンフローネットワーク１００内の他のＯＦスイッチ１０をプロキシＯＦスイッチとして指定して、ＯＦコントローラ２０との間に新たなコネクションを確立する。これにより、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のＯＦチャネルが復旧する。
【００４１】
ＯＦスイッチ１０−１とＯＦコントローラ２０との間でＯＦスイッチ１０−２を経由するＯＦチャネルが復旧した後は、ＯＦスイッチ１０−１がＯＦチャネルＣＨ１ａを使用してＯＦメッセージを送信すると、そのメッセージはＯＦスイッチ１０−２によりＯＦコントローラ２０へ転送される。すなわち、ＯＦスイッチ１０−１にとっては、ＯＦスイッチ１０−２がＯＦコントローラ２０であるように見える。同様に、ＯＦコントローラ２０がＯＦチャネルＣＨ１ｂを使用してＯＦメッセージを送信すると、そのメッセージはＯＦスイッチ１０−２によりＯＦスイッチ１０−１へ転送される。すなわち、ＯＦコントローラ２０にとっては、ＯＦスイッチ１０−２がＯＦスイッチ１０−１であるように見える。
【００４２】
このように、オープンフローネットワーク１００においては、各ＯＦスイッチ１０とＯＦコントローラ２０との間に予備回線を設けていなくても、各ＯＦスイッチ１０とＯＦコントローラ２０との間のリンク障害を復旧させることが可能である。したがって、オープンフローネットワークを構築するためのコストを削減することができる。すなわち、安価な構成でリンク障害の復旧を実現できる。また、各ＯＦスイッチに予備回線のためのポートを設ける必要がないので、ＯＦスイッチのコストを削減することも可能である。
【００４３】
図５は、ＯＦスイッチ１０の構成の一例を示す。ＯＦスイッチ１０は、図５に示すように、フローテーブル１１、パケット処理部１２、プロキシ情報格納部１３、動作モード情報格納部１４、メッセージ送受信部１５、メッセージ転送部１６、チャネル管理部１７を有する。なお、この実施例では、オープンフローネットワーク１００は、パケット（または、フレーム）を伝送するものとする。また、ＯＦスイッチ１０は、他の要素を有していてもよい。
【００４４】
パケット処理部１２は、受信パケットを処理する。例えば、パケット処理部１２は、受信パケットのヘッダ情報に基づいてフローテーブル１１をサーチし、そのパケットに対するアクションを決定することができる。また、パケット処理部１２は、受信パケットのペイロードにＯＦメッセージが格納されているときは、そのパケットをメッセージ送受信部１５またはメッセージ転送部１６に渡す。
【００４５】
プロキシ情報格納部１３は、プロキシ情報および要求元情報を格納する。プロキシ情報は、ＯＦコントローラ２０との間のリンク障害が検出されたときにプロキシＯＦスイッチとして動作する他のＯＦスイッチ１０を表す。例えば、図４に示す例では、ＯＦスイッチ１０−１のプロキシ情報格納部１３には「プロキシ情報：ＯＦスイッチ１０−２」が格納されている。また、プロキシ情報は、プロキシＯＦスイッチを使用して伝送されるＯＦメッセージが属する仮想ＬＡＮを識別する仮想ＬＡＮ識別子を格納していてもよい。また、要求元情報は、ＯＦスイッチ１０に対してプロキシＯＦスイッチとして動作することを要求する他のＯＦスイッチ１０を表す。例えば、図４に示す例では、ＯＦスイッチ１０−２は、ＯＦスイッチ１０−１からプロキシＯＦスイッチとして動作することを要求されている。この場合、ＯＦスイッチ１０−２のプロキシ情報格納部１３には「要求元情報：ＯＦスイッチ１０−１」が格納される。
【００４６】
プロキシ情報は、例えば、ＯＦコントローラ２０により指定され、プロキシ情報格納部１３に予め格納されている。一方、要求元情報は、予めプロキシ情報格納部１３に格納されていてもよいし、コネクション確立時にプロキシ情報格納部１３に格納されるようにしてもよい。
【００４７】
動作モード情報格納部１４は、障害フラグおよびプロキシフラグを格納する。ＯＦスイッチ１０が通常の動作をしているとき（ここでは、ＯＦコントローラ２０との間のリンクが正常であるとき）は、障害フラグは「０」である。そして、ＯＦコントローラ２０との間のリンク障害が検出されたときに、障害フラグは「１」に更新される。また、プロキシフラグは、ＯＦスイッチ１０が他のＯＦスイッチのためのプロキシＯＦスイッチとして動作しているか否かを表す。例えば、図４に示す例では、ＯＦスイッチ１０−１の障害フラグは「１」に更新され、ＯＦスイッチ１０−２のプロキシフラグは「１」に更新される。
【００４８】
メッセージ送受信部１５は、ＯＦコントローラ２０へＯＦメッセージを送信し、ＯＦコントローラ２０からＯＦメッセージを受信する。ただし、ＯＦコントローラ２０との間のリンクに障害が発生しているときは、メッセージ送受信部１５は、プロキシＯＦスイッチへＯＦメッセージを送信し、プロキシＯＦスイッチからＯＦメッセージを受信する。
【００４９】
メッセージ送受信部１５は、メッセージ処理部１５ａおよび障害検出部１５ｂを有する。メッセージ処理部１５ａは、ＯＦコントローラ２０へ送信するＯＦメッセージを生成することができる。例えば、受信パケットのヘッダ情報がフローテーブル１１のマッチ条件に適合しないときは、メッセージ処理部１５ａは、問合せメッセージを生成してもよい。また、メッセージ処理部１５ａは、ＯＦコントローラ２０から受信するＯＦメッセージを処理する。例えば、メッセージ処理部１５ａは、ＯＦコントローラ２０から受信するＯＦメッセージに基づいてフローテーブル１１を設定または更新することができる。障害検出部１５ｂは、上述したEcho要求メッセージおよびEcho応答メッセージを利用してＯＦコントローラ２０との間のリンクの状態をモニタする。
【００５０】
メッセージ転送部１６は、転送情報に従って受信メッセージを転送する。転送情報は、例えば、他のＯＦスイッチ１０から受信するコネクション確立要求に応じて生成される。或いは、コネクション確立要求の要求元ＯＦスイッチが予め決められているときは、生成情報も予めメッセージ転送部１６に設定されていてもよい。例えば、図４に示すＯＦスイッチ１０−２に与えられる転送情報は、以下の通りである。
（１）ＯＦスイッチ１０−１からＯＦチャネルＣＨ１ａを介して受信するＯＦメッセージは、ＯＦチャネルＣＨ１ｂを介してＯＦコントローラ２０へ転送される。
（２）ＯＦコントローラ２０からＯＦチャネルＣＨ１ｂを介して受信するＯＦメッセージは、ＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１へ転送される。
【００５１】
チャネル管理部１７は、他のＯＦスイッチ１０との間にコネクションを確立してＯＦチャネルを設定することができる。また、チャネル管理部１７は、ＯＦコントローラ２０との間にコネクションを確立してＯＦチャネルを設定することができる。さらに、チャネル管理部１７は、確立したコネクション／ＯＦチャネルに応じてメッセージ転送部１６の転送情報を更新してもよい。
【００５２】
パケット処理部１２、メッセージ送受信部１５、メッセージ転送部１６、チャネル管理部１７は、例えば、プロセッサおよびメモリを用いて実現される。この場合、パケット処理部１２、メッセージ送受信部１５、メッセージ転送部１６、チャネル管理部１７の一部をハードウェア回路で実現してもよい。
【００５３】
なお、ＯＦコントローラ２０は、各ＯＦスイッチ１０の状態を管理している。例えば、ＯＦコントローラ２０は、図６に示すスイッチ管理テーブルを利用して各ＯＦスイッチ１０の状態を管理してもよい。スイッチ管理テーブルには、各ＯＦスイッチ１０について対応するプロキシＯＦスイッチが登録されている。例えば、ＯＦスイッチ１０−１のプロキシＯＦスイッチとしてＯＦスイッチ１０−２が登録されている。また、各ＯＦスイッチ１０とＯＦコントローラ２０との間のリンクの状態もスイッチ管理テーブルに記録される。図６に示す例では、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のリンクに障害が発生している状態が表されている。
【００５４】
図７Ａ〜図７Ｂは、第１の実施形態における障害復旧手順の一例を示すシーケンス図である。なお、初期立上げは、図３を参照しながら説明したように、ＯＦコントローラ２０と各ＯＦスイッチ１０との間で実行される。すなわち、ＯＦコントローラ２０と各ＯＦスイッチ１０との間でコネクション確立処理、ハンドシェイク処理、フローテーブル設定処理が実行される。
【００５５】
初期立上げが完了した後は、ＯＦコントローラ２０と各ＯＦスイッチ１０との間で死活監視処理が実行される。すなわち、ＯＦコントローラ２０と各ＯＦスイッチ１０との間でEcho要求／Echo応答が送信される。そして、この実施例では、ＯＦコントローラ２０とＯＦスイッチ１０−１との間のリンクに障害が発生する。この場合、ＯＦコントローラ２０のメッセージ送受信部２１およびＯＦスイッチ１０−１のメッセージ送受信部１５は、それぞれそのリンク障害を検出する。
【００５６】
ＯＦスイッチ１０−１において、メッセージ送受信部１５は、リンク障害の発生をチャネル管理部１７に通知する。そうすると、チャネル管理部１７は、プロキシ情報格納部１３に格納されているプロキシ情報を参照することにより、プロキシＯＦスイッチとして動作するＯＦスイッチを特定する。この実施例では、プロキシＯＦスイッチとしてＯＦスイッチ１０−２が指定されている。この場合、チャネル管理部１７は、ＯＦスイッチ１０−２へコネクション確立要求を送信する。このコネクション確立要求は、ＯＦスイッチ１０−２のチャネル管理部１７により受信される。
【００５７】
コネクション確立要求を受信すると、ＯＦスイッチ１０−２のチャネル管理部１７は、コネクション確立応答をＯＦスイッチ１０−１へ返送する。これにより、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間に新たなコネクション／ＯＦチャネルが確立される。図４に示す例では、ＯＦチャネルＣＨ１ａが確立される。
【００５８】
また、ＯＦスイッチ１０−２のチャネル管理部１７は、ＯＦコントローラ２０へコネクション確立要求を送信する。このコネクション確立要求は、ＯＦコントローラ２０のチャネル管理部２２により受信される。そうすると、チャネル管理部２２は、コネクション確立応答をＯＦスイッチ１０−２へ返送する。これにより、ＯＦスイッチ１０−２とＯＦコントローラ２０との間に新たなコネクション／ＯＦチャネルが確立される。図４に示す例では、ＯＦチャネルＣＨ１ｂが確立される。
【００５９】
ここで、ＯＦコントローラ２０は、ＯＦスイッチ１０−１との間のリンク障害を先に検出している。また、ＯＦコントローラ２０には、ＯＦスイッチ１０−１のプロキシＯＦスイッチがＯＦスイッチ１０−２であることが登録されている。すなわち、ＯＦコントローラ２０は、上記リンク障害に起因してＯＦスイッチ１０−２からコネクション確立要求が送信されてくることを予測している。よって、ＯＦコントローラ２０は、ＯＦスイッチ１０−２からコネクション確立要求を受信したときは、その要求を許可してコネクション確立応答をＯＦスイッチ１０−２へ返送する。一方、ＯＦコントローラ２０は、ＯＦスイッチ１０−２以外のＯＦスイッチ１０からコネクション確立要求を受信した場合には、その要求を却下する。したがって、予測されていないプロキシＯＦスイッチを経由するＯＦチャネルが確立されることはなく、オープンフローネットワーク１００のセキュリティが確保される。
【００６０】
このように、リンク障害が発生すると、その障害を検出したＯＦスイッチ１０−１とプロキシＯＦスイッチとして指定されているＯＦスイッチ１０−２との間、及び、ＯＦスイッチ１０−２とＯＦコントローラ２０との間にそれぞれＯＦチャネルが確立される。このとき、ＯＦスイッチ１０−１、ＯＦスイッチ１０−２、ＯＦコントローラ２０において以下の設定が行われる。
【００６１】
ＯＦスイッチ１０−１においては、障害フラグが「０」から「１」に更新される。障害フラグが「１」に設定されているときは、メッセージ送受信部１５は、生成したＯＦメッセージを、ＯＦコントローラ２０ではなくプロキシＯＦスイッチ（すなわち、ＯＦスイッチ１０−２）へ送信する。すなわち、ＯＦメッセージの送信先がＯＦコントローラ２０からＯＦスイッチ１０−２に変更される。
【００６２】
ＯＦスイッチ１０−２においては、メッセージ転送部１６の転送情報が上述したように更新される。また、プロキシフラグが「０」から「１」に更新される。プロキシフラグが「１」に設定されているときは、ＯＦスイッチ１０−２は、受信したＯＦメッセージを転送情報により指定される宛先へ転送する。
【００６３】
ＯＦコントローラ２０においては、図６に示すスイッチ管理テーブルが更新される。具体的には、ＯＦスイッチ１０−１の状態が「１：障害」に更新される。そうすると、メッセージ送受信部２１は、ＯＦスイッチ１０−１のためのＯＦメッセージを、ＯＦスイッチ１０−１ではなくプロキシＯＦスイッチ（即ち、ＯＦスイッチ１０−２）へ送信する。すなわち、ＯＦメッセージの送信先がＯＦスイッチ１０−１からＯＦスイッチ１０−２に変更される。
【００６４】
この後、オープンフローネットワーク１００においてＯＦメッセージは以下のよう伝送される。
【００６５】
ＯＦスイッチ１０−１は、ＯＦメッセージをＯＦコントローラ２０へ送信するときは、障害フラグを参照する。このとき、ＯＦスイッチ１０−１の障害フラグは「１」に設定されている。この場合、ＯＦスイッチ１０−１のＯＦメッセージ送信部１５は、生成したＯＦメッセージを、ＯＦコントローラ２０ではなくプロキシＯＦスイッチ（即ち、ＯＦスイッチ１０−２）へ送信する。すなわち、ＯＦスイッチ１０−１は、図４に示すＯＦチャネルＣＨ１ａを介してＯＦメッセージをＯＦスイッチ１０−２へ送信する。
【００６６】
ＯＦスイッチ１０−２は、ＯＦスイッチ１０−１からＯＦチャネルＣＨ１ａを介してＯＦメッセージを受信すると、プロキシフラグを参照する。このとき、ＯＦスイッチ１０−２のプロキシフラグは「１」に設定されている。この場合、ＯＦスイッチ１０−２のメッセージ転送部１６は、転送情報に基づいて、受信したＯＦメッセージをＯＦチャネルＣＨ１ｂを介してＯＦコントローラ２０へ転送する。
【００６７】
ＯＦコントローラ２０は、ＯＦメッセージをＯＦスイッチ１０−１へ送信するときは、図６に示すスイッチ管理テーブルを参照する。このとき、ＯＦスイッチ１０−１の状態は「１：障害」である。この場合、ＯＦコントローラ２０のＯＦメッセージ送信部２１は、生成したＯＦメッセージを、ＯＦスイッチ１０−１ではなくプロキシＯＦスイッチ（すなわち、ＯＦスイッチ１０−２）へ送信する。すなわち、ＯＦコントローラ２０は、図４に示すＯＦチャネルＣＨ１ｂを介してＯＦメッセージをＯＦスイッチ１０−２へ送信する。
【００６８】
ＯＦスイッチ１０−２は、ＯＦコントローラ２０からＯＦチャネルＣＨ１ｂを介してＯＦメッセージを受信すると、プロキシフラグを参照する。このとき、ＯＦスイッチ１０−２のプロキシフラグは「１」に設定されている。この場合、ＯＦスイッチ１０−２のメッセージ転送部１６は、転送情報に基づいて、受信したＯＦメッセージをＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１へ転送する。
【００６９】
ＯＦスイッチ１０−２とＯＦコントローラ２０との間のメッセージ送信は、プロキシＯＦスイッチを経由することなく行われる。すなわち、ＯＦスイッチ１０−２は、生成したＯＦメッセージをＯＦチャネルＣＨ２を介してＯＦコントローラ２０へ送信する。また、ＯＦコントローラ２０は、生成したＯＦメッセージをＯＦチャネルＣＨ２を介してＯＦスイッチ１０−２へ送信する。
【００７０】
なお、リンク障害を検出したＯＦスイッチ１０は、他のＯＦスイッチ１０へコネクション確立要求およびプロキシリクエストを送信してもよい。この場合、プロキシリクエストを受信したＯＦスイッチ１０は、そのプロキシリクエストの要求元を識別する情報をＯＦコントローラ２０へ送信してもよい。この構成によれば、各ＯＦスイッチ１０に要求元情報が格納されている必要はない。また、ＯＦコントローラ２０は、各ＯＦスイッチ１０のプロキシＯＦスイッチを管理する必要はない。
【００７１】
図８は、多重障害に対する復旧手順の一例を示す図である。この例では、先に、ＯＦスイッチ１０−１とＯＦコントローラ２０との間のリンクに障害１が発生しているものとする。この場合、図４に示す実施例と同様に、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−２を経由してＯＦコントローラ２０との間でＯＦメッセージを伝送するためのＯＦチャネルを確立する。すなわち、障害１が発生すると、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間にＯＦチャネルＣＨ１ａが設定され、ＯＦスイッチ１０−２とＯＦコントローラ２０との間にＯＦチャネルＣＨ１ｂが設定される。
【００７２】
続いて、ＯＦスイッチ１０−２とＯＦコントローラ２０との間のリンクに障害２が発生する。このとき、このリンク上には、ＯＦスイッチ１０−１のためのＯＦチャネルＣＨ１ｂおよびＯＦスイッチ１０−２のためのＯＦチャネルＣＨ２が確立されている。よって、オープンフローネットワーク１００は、ＯＦスイッチ１０−１およびＯＦスイッチ１０−２を救済する。
【００７３】
図８に示す例では、ＯＦスイッチ１０−１を救済するために、ＯＦスイッチ１０−１とＯＦスイッチ１０−３との間にＯＦチャネルＣＨ１ｃが確立され、ＯＦスイッチ１０−３とＯＦコントローラ２０との間にＯＦチャネルＣＨ１ｄが確立される。ＯＦチャネルＣＨ１ｃおよびＯＦチャネルＣＨ１ｄを確立する方法は、ＯＦチャネルＣＨ１ａおよびＯＦチャネルＣＨ１ｂを確立する方法と実質的に同じである。ただし、多重障害の復旧を実現するためには、ＯＦスイッチ１０に対して複数のプロキシＯＦスイッチ候補が指定されていることが好ましい。例えば、ＯＦスイッチ１０−１に対しては、第１のプロキシ候補としてＯＦスイッチ１０−２が指定され、第２のプロキシ候補としてＯＦスイッチ１０−３が指定されている。
【００７４】
ＯＦスイッチ１０−２を救済するためには、ＯＦスイッチ１０−２とＯＦスイッチ１０−４との間にＯＦチャネルＣＨ２ａが確立され、ＯＦスイッチ１０−４とＯＦコントローラ２０との間にＯＦチャネルＣＨ２ｂが確立される。ＯＦチャネルＣＨ２ａおよびＯＦチャネルＣＨ２ｂを確立する方法は、ＯＦチャネルＣＨ１ａおよびＯＦチャネルＣＨ１ｂを確立する方法と実質的に同じである。
【００７５】
このように、オープンフローネットワーク１００においては、障害リンクを復旧するために使用されているリンクに障害が発生した場合であっても、その障害に係わるＯＦスイッチは、さらに他のＯＦスイッチを選択することにより、ＯＦコントローラに接続することがでる。したがって、ＯＦチャネルが確立されるリンクに多重障害が発生しても、ＯＦスイッチ１０がＯＦコントローラ２０に接続できない状態となるリスクは低い。
【００７６】
なお、ＯＦコントローラと各ＯＦスイッチとの間のリンクがそれぞれ２重化されているネットワーク（以下、２重化ネットワーク）では、現用リンクに障害が発生すると、予備リンク上にＯＦチャネルが設定される。しかし、このような構成の２重化ネットワークでは、現用リンクおよび予備リンクの双方に障害が発生すると、ＯＦスイッチはＯＦコントローラに接続することはできない。したがって、２重化ネットワークと比較して、本発明の実施形態に係わる障害復旧方法は、物理リンクの本数を削減できると共に、多重障害に対する耐性が向上する。
【００７７】
上述の実施例では、障害を検出したＯＦスイッチ１０は、自分に隣接するＯＦスイッチをプロキシＯＦスイッチとして使用する。しかしながら、本発明はこの方法に限定されるものではない。すなわち、障害を検出したＯＦスイッチ１０は、自分に隣接していないＯＦスイッチをプロキシＯＦスイッチとして使用してもよい。
【００７８】
例えば、図９に示す例では、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−４をプロキシＯＦスイッチとして使用する。即ち、ＯＦスイッチ１０−１とＯＦスイッチ１０−３との間にＯＦチャネルＣＨ１ｘが確立され、ＯＦスイッチ１０−３とＯＦスイッチ１０−４との間にＯＦチャネルＣＨ１ｙが確立され、ＯＦスイッチ１０−４とＯＦコントローラ２０との間にＯＦチャネルＣＨ１ｚが確立される。この場合、ＯＦスイッチ１０−２およびＯＦスイッチ１０−３においてそれぞれ転送情報が更新される。また、各ＯＦスイッチ１０のプロキシ情報格納部１３には、プロキシＯＦスイッチとして動作するＯＦスイッチの識別子に加えて、プロキシＯＦスイッチへの経路を表す情報も格納される。
【００７９】
上述の実施例では、リンク障害を復旧させるための新たなＯＦチャネルは、先に確立されているＯＦチャネルとは別に設定される。しかしながら、本発明はこの方法に限定されるものではない。すなわち、リンク障害を復旧させるためのＯＦチャネルは、先に確立されているＯＦチャネルを利用して実現してもよい。
【００８０】
例えば、図１０に示す例では、ＯＦスイッチ１０−１のためのＯＦメッセージは、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間ではＯＦチャネルＣＨ１ａを介して伝送され、ＯＦスイッチ１０−２とＯＦコントローラ２０との間ではＯＦチャネルＣＨ２を介して伝送される。即ち、ＯＦチャネルＣＨ２は、ＯＦスイッチ１０−１のためのＯＦメッセージおよびＯＦスイッチ１０−２のためのＯＦメッセージを伝送する。このように、ＯＦスイッチ１０−１のためのＯＦメッセージは、ＯＦスイッチ１０−２のためのＯＦメッセージを伝送するために先に設定されているＯＦチャネルＣＨ２を介して伝送される。
【００８１】
この場合、ＯＦスイッチ１０−２は、ＯＦスイッチ１０−１のためのＯＦメッセージを格納するパケットと、ＯＦスイッチ１０−２のためのＯＦメッセージを格納するパケットとを識別できるものとする。そして、ＯＦスイッチ１０−２は、ＯＦチャネルＣＨ２を介してＯＦスイッチ１０−１のためのＯＦメッセージを格納するパケットを受信したときには、そのパケットをＯＦチャネルＣＨ１ａを介してＯＦスイッチ１０−１へ転送する。また、ＯＦスイッチ１０−２は、ＯＦチャネルＣＨ２を介してＯＦスイッチ１０−２のためのＯＦメッセージを格納するパケットを受信したときには、そのパケットを終端する。
【００８２】
＜第２の実施形態＞
第１の実施形態では、ＯＦコントローラ２０とＯＦスイッチ１０との間のリンクに障害が発生したときは、予め指定されているＯＦスイッチがプロキシＯＦスイッチとして動作することにより、障害復旧が行われる。第２の実施形態では、オープンフローネットワーク１００においてトラヒック量の少ないＯＦスイッチが特定され、その特定されたＯＦスイッチがプロキシＯＦスイッチとして動作する。
【００８３】
図１１は、第２の実施形態における復旧手順の一例を示す図である。ここでは、ＯＦコントローラ２０とＯＦスイッチ１０−１との間でリンク障害が発生し、図４または図７Ａに示す復旧手順が先に行われているものとする。すなわち、ＯＦスイッチ１０−２がＯＦスイッチ１０−１のプロキシＯＦスイッチとして指定され、ＯＦチャネルＣＨ１ａおよびＯＦチャネルＣＨ１ｂが設定されているものとする。
【００８４】
第２の実施形態では、ＯＦコントローラ２０は、定期的に、各ＯＦスイッチ１０のトラヒック量を確認する。ここで、ＯＦスイッチ１０は、フロー毎にトラヒック量をモニタしている。一例としては、ＯＦスイッチ１０は、フロー毎に、通過パケットのバイト数をカウントする。そして、各フローのトラヒック量は、統計情報としてフローテーブル１１に記録される。
【００８５】
図１２は、各ＯＦスイッチ１０の統計情報について説明する図である。ここでは、ＯＦスイッチ１０−２〜１０−４のフローテーブル１１が例示されている。統計情報は、この実施例では、フロー毎のトラヒック量を表している。また、各ＯＦスイッチ１０において合計トラヒック量が算出されている。
【００８６】
したがって、ＯＦコントローラ２０は、定期的に、各ＯＦスイッチ１０から統計情報を収集することにより、各ＯＦスイッチ１０のトラヒック量を確認することができる。そして、ＯＦコントローラ２０は、トラヒック量の最も少ないＯＦスイッチ１０を特定する。図１２に示す例では、ＯＦスイッチ１０−２〜１０−４の中でＯＦスイッチ１０−３のトラヒック量が最も少ない。
【００８７】
ここで、現在、ＯＦスイッチ１０−１のプロキシＯＦスイッチはＯＦスイッチ１０−２である。すなわち、プロキシＯＦスイッチとして動作しているＯＦスイッチ１０−２のトラヒック量は、オープンフローネットワーク１００内で最小ではない。この場合、ＯＦコントローラ２０は、オープンフローネットワーク１００内でトラヒック量が最も少ないＯＦスイッチがプロキシＯＦスイッチとして動作するように、ネットワーク構成を変更する。すなわち、ＯＦスイッチ１０−３がＯＦスイッチ１０−１のプロキシＯＦスイッチとして動作するように、ネットワーク構成が変更される。
【００８８】
この場合、図１１に示すように、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間に設定されているＯＦチャネルＣＨ１ａ、及び、ＯＦスイッチ１０−２とＯＦコントローラ２０との間に設定されているＯＦチャネルＣＨ１ｂが解除される。また、ＯＦスイッチ１０−１とＯＦスイッチ１０−３との間に新たなＯＦチャネルＣＨ１ｃが設定され、ＯＦスイッチ１０−３とＯＦコントローラ２０との間に新たなＯＦチャネルＣＨ１ｄが設定される。
【００８９】
図１３Ａ〜図１３Ｃは、第２の実施形態における障害復旧手順の一例を示すシーケンス図である。なお、初期立上げは、図３を参照しながら説明したように、ＯＦコントローラ２０と各ＯＦスイッチ１０との間で実行される。すなわち、ＯＦコントローラ２０と各ＯＦスイッチ１０との間でコネクション確立処理、ハンドシェイク処理、フローテーブル設定処理が実行される。
【００９０】
また、初期立上げが終了した後、ＯＦスイッチ１０−１とＯＦコントローラ２０との間でリンク障害が発生し、図７Ａに示すシーケンスによってその障害が復旧しているものとする。すなわち、ＯＦスイッチ１０−２がプロキシＯＦスイッチとして指定されている。そして、ＯＦスイッチ１０−１とＯＦスイッチ１０−２との間にＯＦチャネルＣＨ１ａが設定され、ＯＦスイッチ１０−２とＯＦコントローラ２０との間にＯＦチャネルＣＨ１ｂが設定されている。
【００９１】
上記ネットワーク構成において、ＯＦコントローラ２０は、定期的に、各ＯＦスイッチ１０−１〜１０−４に対して統計情報を要求する。ただし、図１３Ａにおいては、図面を見やすくするために、ＯＦスイッチ１０−２、１０−３に対する要求のみが表記されている。そして、各ＯＦスイッチ１０−１〜１０−４は、統計情報をＯＦコントローラ２０へ送信する。統計情報は、この実施例では、フローテーブル１１に記録されている合計トラヒック量である。
【００９２】
ＯＦコントローラ２０において、チャネル管理部２２は、各ＯＦスイッチ１０−１〜１０−４から収集した統計情報に基づいて、ＯＦスイッチ１０−１のプロキシＯＦスイッチとして動作するＯＦスイッチの最適化を実行する。即ち、ＯＦコントローラ２０は、収集した統計情報に基づいてトラヒック量の最も少ないＯＦスイッチ１０を特定する。この実施例では、ＯＦスイッチ１０−３のトラヒック量が最も少ない。この場合、現在のプロキシＯＦスイッチとトラヒック量の最も少ないＯＦスイッチとが一致していないので、ＯＦコントローラ２０は、ＯＦスイッチ１０−１に対してプロキシ変更通知を送信する。ただし、このプロキシ変更通知は、プロキシＯＦスイッチ（即ち、ＯＦスイッチ１０−２）を経由してＯＦスイッチ１０−１へ伝送される。また、このプロキシ変更通知は、トラヒック量の最も少ないＯＦスイッチ（即ち、ＯＦスイッチ１０−３）を識別する情報を含む。
【００９３】
ＯＦスイッチ１０−１のチャネル管理部１７は、プロキシ変更通知で指定されているＯＦスイッチ（即ち、ＯＦスイッチ１０−３）を経由してＯＦコントローラ２０との間でＯＦメッセージを伝送するためのＯＦチャネルを確立する。この手順は、図７Ａに示すシーケンスにおいてＯＦチャネルを確立する処理と実質的に同じである。すなわち、ＯＦスイッチ１０−１からＯＦスイッチ１０−３へＯＦチャネル確立要求が送信され、ＯＦスイッチ１０−３からＯＦスイッチ１０−１へＯＦチャネル確立応答が返送される。また、ＯＦスイッチ１０−３からＯＦコントローラ２０へＯＦチャネル確立要求が送信され、ＯＦコントローラ２０からＯＦスイッチ１０−３へＯＦチャネル確立応答が返送される。
【００９４】
この手順により、図１１に示すＯＦチャネルＣＨ１ｃおよびＯＦチャネルＣＨ１ｄが設定される。そうすると、ＯＦスイッチ１０−１のメッセージ送受信部１５は、メッセージの送信先をＯＦスイッチ１０−２からＯＦスイッチ１０−３へ変更する。このとき、メッセージ送受信部１５は、チャネル管理部１７に対してメッセージ送信先の変更を通知してもよい。また、ＯＦスイッチ１０−３のメッセージ転送部１６は、以下のように転送情報を更新する。
（１）ＯＦスイッチ１０−１からＯＦチャネルＣＨ１ｃを介して受信するＯＦメッセージは、ＯＦチャネルＣＨ１ｄを介してＯＦコントローラ２０へ転送される。
（２）ＯＦコントローラ２０からＯＦチャネルＣＨ１ｄを介して受信するＯＦメッセージは、ＯＦチャネルＣＨ１ｃを介してＯＦスイッチ１０−１へ転送される。
【００９５】
さらに、ＯＦスイッチ１０−１のチャネル管理部１７は、旧プロキシＯＦスイッチを経由するＯＦチャネルを解除する。すなわち、ＯＦスイッチ１０−１からＯＦスイッチ１０−２へＯＦチャネル解除要求が送信され、ＯＦスイッチ１０−２からＯＦスイッチ１０−１へＯＦチャネル解除応答が返送される。また、ＯＦスイッチ１０−２からＯＦコントローラ２０へＯＦチャネル解除要求が送信され、ＯＦコントローラ２０からＯＦスイッチ１０−２へＯＦチャネル解除応答が返送される。この結果、図１１に示すＯＦチャネルＣＨ１ａおよびＯＦチャネルＣＨ１ｂが解除される。
【００９６】
以降、ＯＦスイッチ１０−１は、ＯＦスイッチ１０−３を経由してＯＦコントローラ２０へＯＦメッセージを送信する。また、ＯＦコントローラ２０は、ＯＦスイッチ１０−３を経由してＯＦスイッチ１０−１へＯＦメッセージを送信する。
【００９７】
このように、第２の実施形態においては、ＯＦコントローラ２０とＯＦスイッチ１０との間のリンク障害を復旧するために、オープンフローネットワーク内で最も負荷の小さいＯＦスイッチ（或いは、使用可能なリソースが最も多く残っているＯＦスイッチ）がプロキシＯＦスイッチとして動作する。したがって、プロキシＯＦスイッチのための処理が、ホスト間のデータ転送のパフォーマンスを低下させることはない。
【００９８】
なお、上述の実施例では、トラヒック量が最小のＯＦスイッチがプロキシＯＦスイッチとして選択されているが、本発明はこの構成に限定されるものではない。例えば、予め指定されているデフォルトＯＦスイッチのトラヒック量が所定の閾値未満であれば、そのデフォルトＯＦスイッチよりもトラヒック量の少ないＯＦスイッチが存在している場合であっても、プロキシＯＦスイッチの変更を行わなくてもよい。また、プロキシＯＦスイッチを選択するためのパラメータは、トラヒック量に限定されるものではない。即ち、各ＯＦスイッチの使用可能なリソース量（例えば、プロセッサの負荷など）に基づいて、プロキシＯＦスイッチを選択してもよい。
【００９９】
＜他の実施形態＞
上述した実施例では、ＯＦメッセージは、アウトオブバンド（Out-of-band）方式でＯＦスイッチ１０とＯＦコントローラ２０との間で伝送される。しかし、本発明はこの構成に限定されるものではない。すなわち、ＯＦメッセージは、インバンド（In-band）方式でＯＦスイッチ１０とＯＦコントローラ２０との間で伝送されるようにしてもよい。ただし、インバンド方式でＯＦメッセージを送信する場合、ＯＦメッセージを格納するパケットは、フローテーブル１１に従って転送される。したがって、プロキシＯＦスイッチとして動作するＯＦスイッチ１０のフローテーブル１１は、新たに設定されるＯＦチャネルを実現するように更新される。例えば、図４に示す実施例において、ＯＦスイッチ１０−１とＯＦコントローラ２０との間でＯＦチャネルＣＨ１ａおよびＣＨ１ｂを介してＯＦメッセージを伝送するフローに対して仮想ＬＡＮ識別子「ＶＩＤ−ＳＷ１」が割り当てられているものとする。この場合、ＯＦスイッチ１０−２のフローテーブル１１において「マッチ条件：ＶＩＤ−ＳＷ１」に対して、ＯＦスイッチ１０−１とＯＦコントローラ２０との間でＯＦメッセージを転送するためのアクション情報が記録される。
【０１００】
以上記載した各実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用されるオープンフロースイッチであって、
前記オープンフローコントローラとの間のリンクの障害を検出する障害検出部と、
前記障害検出部により障害が検出されたときに、他のオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルを確立するチャネル管理部と、
を有するオープンフロースイッチ。
（付記２）
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用されるオープンフロースイッチであって、
前記オープンフローコントローラとの間のリンクに障害が発生した障害オープンフロースイッチから、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を受信したときに、前記障害オープンフロースイッチとの間に第１のオープンフローチャネルを確立し、前記オープンフローコントローラとの間に第２のオープンフローチャネルを確立するチャネル管理部と、
前記障害オープンフロースイッチから前記第１のオープンフローチャネルを介して受信する制御情報を前記第２のオープンフローチャネルを介して前記オープンフローコントローラへ転送し、前記オープンフローコントローラから前記第２のオープンフローチャネルを介して受信する制御情報を前記第１のオープンフローチャネルを介して前記障害オープンフロースイッチへ転送する転送部と、
を有するオープンフロースイッチ。
（付記３）
前記オープンフローコントローラとの間のリンクの障害を検出する障害検出部をさらに有し、
前記障害検出部により障害が検出されたときに、前記チャネル管理部は、予め指定されているデフォルトオープンフロースイッチを経由して前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を前記デフォルトオープンフロースイッチに送信する
ことを特徴とする付記２に記載のオープンフロースイッチ。
（付記４）
複数のオープンフロースイッチおよび前記複数のオープンフロースイッチを制御するオープンフローコントローラを含むオープンフローネットワークにおいて使用される障害復旧方法であって、
第１のオープンフロースイッチと前記オープンフローコントローラとの間のリンクに障害が発生したときに、前記第１のオープンフロースイッチから第２のオープンフロースイッチへ、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を送信し、
前記チャネル確立要求に応じて、前記第１のオープンフロースイッチと前記第２のオープンフロースイッチとの間に第１のオープンフローチャネルを確立し、前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に第２のオープンフローチャネルを確立する
ことを特徴とする障害復旧方法。
（付記５）
前記第１のオープンフロースイッチから前記第１のオープンフローチャネルを介して伝送される制御情報を前記第２のオープンフローチャネルを介して前記オープンフローコントローラへ転送し、前記オープンフローコントローラから前記第２のオープンフローチャネルを介して伝送される制御情報を前記第１のオープンフローチャネルを介して前記第１のオープンフロースイッチへ転送するように、前記第２のオープンフロースイッチの転送回路を設定する
ことを特徴とする付記４に記載の障害復旧方法。
（付記６）
前記第２のオープンフローチャネルは、前記チャネル確立要求に応じて前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に確立されるコネクション上に設定される
ことを特徴とする付記４に記載の障害復旧方法。
（付記７）
前記第２のオープンフローチャネルは、前記第２のオープンフロースイッチと前記オープンフローコントローラとの間に予め確立されているコネクション上に設定される
ことを特徴とする付記４に記載の障害復旧方法。
（付記８）
前記第１のオープンフロースイッチに対して、前記第２のオープンフロースイッチが予め指定されている
ことを特徴とする付記４〜７のいずれか１つに記載の障害復旧方法。
（付記９）
前記第１のオープンフロースイッチに対して、前記第１のオープンフロースイッチと前記第２のオープンフロースイッチとの間の経路が予め指定されている
ことを特徴とする付記８に記載の障害復旧方法。
（付記１０）
前記第１のオープンフロースイッチは、前記第１のオープンフロースイッチと前記オープンフローコントローラとの間の通信を識別する識別子を制御情報に付与して前記第１のオープンフローチャネルへ出力し、
前記オープンフローコントローラは、前記識別子を制御情報に付与して前記第２のオープンフローチャネルへ出力する
ことを特徴とする付記４に記載の障害復旧方法。
（付記１１）
前記オープンフローコントローラは、各オープンフロースイッチのトラヒック量を表す統計情報を収集し、
前記オープンフローコントローラは、前記統計情報に基づいてトラヒック量が最も少ないオープンフロースイッチを特定し、
前記オープンフローコントローラは、特定したオープンフロースイッチを前記第１のオープンフロースイッチに通知し、
前記第１のオープンフロースイッチは、前記オープンフローコントローラにより特定されたオープンフロースイッチへ、前記オープンフローコントローラとの間で制御情報を伝送するためのオープンフローチャネルの確立を要求するチャネル確立要求を送信する
ことを特徴とする付記４に記載の障害復旧方法。
（付記１２）
各オープンフロースイッチの負荷を表す統計情報を収集し、
前記統計情報に基づいて前記第２のオープンフロースイッチを決定し、
前記第１のオープンフロースイッチは、前記統計情報に基づいて決定された前記第２のオープンフロースイッチへ前記チャネル確立要求を送信する
ことを特徴とする付記４に記載の障害復旧方法。
【符号の説明】
【０１０１】
１０（１０−１〜１０−４）  オープンフロースイッチ（ＯＦスイッチ）
１１  フローテーブル
１５  メッセージ送受信部
１５ａ  メッセージ処理部
１５ｂ  障害検出部
１６  メッセージ転送部
１７  チャネル管理部
２０  オープンフローコントローラ（ＯＦコントローラ）
２１  メッセージ送受信部
２２  チャネル管理部
１００  オープンフローネットワーク
【図１】
2015204533.tif 000003
【図２】
2015204533.tif 000004
【図３】
2015204533.tif 000005
【図４】
2015204533.tif 000006
【図５】
2015204533.tif 000007
【図６】
2015204533.tif 000008
【図７Ａ】
2015204533.tif 000009
【図７Ｂ】
2015204533.tif 000010
【図８】
2015204533.tif 000011
【図９】
2015204533.tif 000012
【図１０】
2015204533.tif 000013
【図１１】
2015204533.tif 000014
【図１２】
2015204533.tif 000015
【図１３Ａ】
2015204533.tif 000016
【図１３Ｂ】
2015204533.tif 000017
【図１３Ｃ】
2015204533.tif 000018