(57)【要約】【課題】コントローラの経路再設定処理に利用可能なリソースの有効利用を図って、経路再設定に伴うコントローラの負荷の低減と経路再設定の時間短縮と、を図る。【解決手段】コントローラは、複数のネットワークスイッチによって形成される経路の障害検出に応じて、障害が検出された経路を通るデータフローの経路を再設定するための経路再設定方法を、障害が検出された経路を通るデータフロー数（Ｎ）とコントローラの負荷（Ｘ，Ｙ）とに基づいて変化させてよい。【選択図】図１０
2017059885.tif 000002
【特許請求の範囲】
【請求項１】
複数のネットワークスイッチを制御するコントローラであって、
前記コントローラの負荷をモニタするモニタと、
前記複数のネットワークスイッチによって形成される経路の障害を検出する検出部と、
前記障害が検出された経路を通るデータフローの経路を再設定するための経路再設定方法を、前記障害が検出された経路を通るデータフロー数と前記負荷とに基づいて変化させる制御部と、
を備えた、コントローラ。
【請求項２】
前記経路再設定方法は、第１の方法と、前記第１の方法に対して経路再設定の処理負荷は高いが処理時間は短い第２の方法と、を含み、
前記制御部は、前記障害が検出された経路を通るデータフロー数と前記負荷とに基づいて、前記第１の方法と、前記第２の方法と、の少なくとも一方を選択する、請求項１に記載のコントローラ。
【請求項３】
前記第１の方法は、
前記障害が検出された経路に位置するネットワークスイッチのそれぞれから、前記障害が検出された経路についてのデータフローのフローエントリを削除して、新経路を計算し、計算された前記新経路に位置するネットワークスイッチのそれぞれに対して前記新経路についてのデータフローのフローエントリを設定する方法であり、
前記第２の方法は、
前記障害が検出された経路に位置するネットワークスイッチのそれぞれから、前記障害が検出された経路についてのデータフローのフローエントリを削除し、前記フローエントリを削除されたネットワークスイッチから未知のデータフローのデータ受信を示すメッセージを受信する毎に、前記未知のデータフロー単位で新経路を計算し、前記メッセージの送信元ネットワークスイッチに対して前記新経路についてのフローエントリを設定する方法である、請求項２に記載のコントローラ。
【請求項４】
前記制御部は、
経路計算するデータフロー数と前記負荷との関係を示す情報を基に、前記障害が検出された経路を通るデータフロー数の経路計算に応じた前記負荷の変動量を推定する、請求項２又は３に記載のコントローラ。
【請求項５】
前記制御部は、
前記変動量を含まない前記負荷が第１閾値以上の場合に、前記第２の方法を選択し、
前記変動量を含む前記負荷が前記第１閾値以下の場合に、前記第１の方法を選択する、請求項４に記載のコントローラ。
【請求項６】
前記制御部は、
前記変動量を含む前記負荷が前記第１閾値を超える場合、前記障害が検出された経路を通るデータフロー数のうち、前記変動量の前記第１閾値を超える部分に相当するデータフロー数について前記第２の方法を選択し、前記変動量の前記第１閾値を超えない部分に相当するデータフロー数について前記第１の方法を選択する、請求項４に記載のコントローラ。
【請求項７】
前記制御部は、
前記変動量を含む前記負荷が前記第１閾値を超える場合、前記障害が検出された経路を通るデータフロー数の全部について前記第２の方法を選択する、請求項５に記載のコントローラ。
【請求項８】
前記変動量には、前記第２の方法において、前記障害が検出された経路の再設定のために前記コントローラによってフローエントリを削除されたネットワークスイッチから受信される、未知のデータフローのデータ受信を示すメッセージの受信処理に応じた変動量が含まれる、請求項４〜６のいずれか１項に記載のコントローラ。
【請求項９】
前記制御部は、
前記第１の方法において、前記削除の対象であるデータフロー数が第２閾値以上である場合、前記削除を実施する候補ネットワークスイッチを、前記障害が検出された経路を通るデータフローの始点に相当する始点ネットワークスイッチに制限する、請求項３に記載のコントローラ。
【請求項１０】
前記制御部は、
前記始点ネットワークスイッチでの前記フローエントリの削除に応じて前記始点ネットワークスイッチの処理負荷が第３閾値以上になる場合、前記始点ネットワークスイッチに加えて、前記障害が検出された経路を通るデータフローにおいて前記始点ネットワークスイッチの次段に位置するネットワークスイッチを、前記候補ネットワークスイッチに加える、請求項９に記載のコントローラ。
【請求項１１】
前記制御部は、
前記障害が検出された経路を通るデータフローのトラフィック量に関する統計情報に基づいて、前記第１の方法において、優先的に前記経路再設定を行なうデータフローを決定する、請求項２〜１０のいずれか１項に記載のコントローラ。
【請求項１２】
複数のネットワークスイッチを制御するコントローラの負荷をモニタし、
複数のネットワークスイッチによって形成される経路の障害を前記コントローラによって検出し、
前記コントローラは、前記障害が検出された経路を通るデータフローの経路を再設定するための経路再設定方法を、前記障害が検出された経路を通るデータフロー数と前記モニタされた負荷とに基づいて変化させる、経路再設定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載する技術は、コントローラ及び経路再設定方法に関する。
【背景技術】
【０００２】
近年、コンピューティングリソースの仮想化が進み、ネットワークにおいて、オンデマンドで仮想コンピュータを配備できるようになったことに伴って、ＳＤＮ（Software Defined Networking）が注目されている。
【０００３】
ＳＤＮは、ネットワークをソフトウェアでオンデマンドに設定あるいは変更することが可能な技術である。１つのコントローラで複数のネットワークスイッチを管理、制御するようなネットワークに、ＳＤＮを適用することも検討されている。
【０００４】
そのようなネットワークにおいてＳＤＮを実現可能な通信プロトコルの有力な候補の１つに、オープンフロー（ＯＦ）プロトコルがある。コントローラは、ＯＦプロトコルを用いて各ネットワークスイッチと通信することで、各ネットワークスイッチの管理や制御を行なうことができる。
【０００５】
なお、ＯＦプロトコルをサポートするコントローラは、ＯＦコントローラ（ＯＦＣ）と称されることがある。また、ＯＦプロトコルをサポートするネットワークスイッチは、ＯＦスイッチ（ＯＦ−ＳＷ）と称されることがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−１３８２４４号公報
【特許文献２】国際公開第２０１１／０４３３７９号
【特許文献３】国際公開第２０１１／０４３３６３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＯＦＣと複数のＯＦスイッチとを備えたＯＦネットワークにおいて経路障害が生じた場合、ＯＦＣは、障害の生じた経路のデータフローを新経路に位置するＯＦスイッチに再設定する処理（「障害復旧処理」と称してもよい。）を行なう。
【０００８】
しかし、障害復旧対象のデータフロー数によっては、ＯＦＣが過負荷になり、障害復旧に長時間を要することがある。また、ＯＦＣの負荷に余裕があるのに、経路再設定処理に利用可能なリソースの有効利用が図られずに、障害復旧が長期化することもある。
【０００９】
１つの側面では、本明細書の記載する技術の目的の１つは、コントローラの経路再設定処理に利用可能なリソースの有効利用を図って、経路再設定に伴うコントローラの負荷の低減と経路再設定の時間短縮と、を図ることにある。
【課題を解決するための手段】
【００１０】
１つの側面において、コントローラは、複数のネットワークスイッチを制御するコントローラであり、モニタと、検出部と、制御部と、を備えてよい。モニタは、前記コントローラの負荷をモニタしてよい。検出部は、前記複数のネットワークスイッチによって形成される経路の障害を検出してよい。制御部は、前記障害が検出された経路を通るデータフローの経路を再設定するための経路再設定方法を、前記障害が検出された経路を通るデータフロー数と前記負荷とに基づいて変化させてよい。
【００１１】
また、１つの側面において、経路再設定方法は、複数のネットワークスイッチを制御するコントローラの負荷をモニタし、また、複数のネットワークスイッチによって形成される経路の障害を前記コントローラによって検出してよい。前記コントローラは、前記障害が検出された経路を通るデータフローの経路を再設定するための経路再設定方法を、前記障害が検出された経路を通るデータフロー数と前記モニタされた負荷とに基づいて変化させてよい。
【発明の効果】
【００１２】
１つの側面として、コントローラの経路再設定処理に利用可能なリソースの有効利用を図って、経路再設定に伴うコントローラの負荷の低減と経路再設定の時間短縮と、を図ることができる。
【図面の簡単な説明】
【００１３】
【図１】一実施形態に係る通信システムの構成例を示すブロック図である。
【図２】図１に例示したＯＦスイッチ（＃１）におけるフローテーブルの一例を示す図である。
【図３】図１に例示したＯＦスイッチ（＃３）におけるフローテーブルの一例を示す図である。
【図４】図１に例示した通信システムにおける障害復旧処理の一例を説明するための図である。
【図５】（Ａ）は、「プロアクティブ方法」による障害復旧処理の時間的な流れの一例を示す図であり、（Ｂ）は、「リアクティブ方法」による障害復旧処理の時間的な流れの一例を示す図である。
【図６】図１に例示したオープンフローコントローラ（ＯＦＣ）において、フロー数Ｎの経路計算がＣＰＵ使用率に与えるインパクトを推定するためのデータの一例を示す図である。
【図７】図１に例示したＯＦＣにおいて、障害復旧対象のフロー数とＣＰＵ使用率とに応じて適応的に障害復旧方法を選択する例を説明するための模式図である。
【図８】図１に例示したＯＦＣの機能的な構成例を示すブロック図である。
【図９】図８に例示した障害復旧方法選択部で障害復旧方法の選択に用いられる判定基準の一例を示す図である。
【図１０】図１及び図８に例示したＯＦＣの動作例を示すフローチャートである。
【図１１】図１及び図８に例示したＯＦＣのハードウェア構成例を示すブロック図である。
【図１２】図１に例示したＯＦスイッチの機能的な構成例を示すブロック図である。
【図１３】図１及び図１２に例示したＯＦスイッチのハードウェア構成例を示すブロック図である。
【図１４】第１変形例を説明するための図である。
【図１５】第１変形例のＯＦＣの動作例を示すフローチャートである。
【図１６】第２変形例を説明するための図である。
【図１７】第２変形例のＯＦＣの動作例を示すフローチャートである。
【図１８】第３変形例に係るＯＦＣが管理するフローテーブルの一例を示す図である。
【図１９】第４変形例に係る障害復旧方法の選択例を説明するための模式図である。
【図２０】第４変形例に係るＯＦＣの動作例を示すフローチャートである。
【図２１】第５変形例に係る障害復旧方法の選択例を説明するための模式図である。
【図２２】第５変形例に係るＯＦＣの動作例を示すフローチャートである。
【図２３】第６変形例に係るＯＦＣの動作例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。また、以下に説明する各種の例示的態様は、適宜に組み合わせて実施しても構わない。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１５】
図１は、一実施形態に係る通信システムの構成例を示すブロック図である。図１に示すように、通信システム１（便宜的に「ネットワーク１」と称してもよい。）は、例示的に、通信機器（「ネットワーク機器」と称してもよい。）の一例である複数のネットワークスイッチ２−１〜２−ｎ（＃１〜＃ｎ）と、コントローラ３と、を備えてよい。
【００１６】
なお、「ｎ」は、２以上の整数であり、図１の例ではｎ＝６である。ネットワークスイッチ２−ｉ（ｉ＝１〜ｎのいずれか）を区別しなくてよい場合は「ネットワークスイッチ２」あるいは単に「スイッチ２」と略記することがある。ネットワークスイッチ２は、ネットワーク１のエレメント（ＮＥ）と称してもよい。
【００１７】
スイッチ２のそれぞれは、例示的に、オープンフロープロトコル（ＯＦＰ）をサポートしてよい。ＯＦＰは、通信プロトコルの一例である。ＯＦＰをサポートするスイッチ２は、「ＯＦスイッチ（ＯＦ−ＳＷ）２」と称してよい。
【００１８】
ＯＦスイッチ２は、図１に例示するように、メッシュ状に接続されてメッシュネットワークを形成してよい。ただし、複数のＯＦスイッチ２によって形成されるネットワーク（便宜的に「ＯＦネットワーク」と称してよい。）の形態（「トポロジ」と称してよい。）は、メッシュネットワークに限られない。
【００１９】
図１の例では、ＯＦスイッチ＃１のポート「ｐ１」が、ＯＦスイッチ＃３のポート「ｐ１」に接続され、ＯＦスイッチ＃２のポート「ｐ１」がＯＦスイッチ＃３のポート「ｐ３」に接続されている。
【００２０】
また、ＯＦスイッチ＃３のポート「ｐ２」は、ＯＦスイッチ＃４のポート「ｐ１」に接続され、ＯＦスイッチ＃３のポート「ｐ４」は、ＯＦスイッチ＃５のポート「ｐ１」に接続されている。
【００２１】
更に、ＯＦスイッチ＃４のポート「ｐ２」は、ＯＦスイッチ＃６のポート「ｐ１」に接続され、ＯＦスイッチ＃５のポート「ｐ２」は、ＯＦスイッチ＃６のポート「ｐ２」に接続されている。
【００２２】
なお、ＯＦスイッチ＃ｉのポート「ｐｘ」（ｘは、自然数であり、図１の例ではｘ＝１〜４のいずれかである。）は、ポート番号を表し、ＯＦスイッチ＃ｉに備えられたポートを識別可能な情報の一例である。
【００２３】
ＯＦネットワークのエッジに位置するＯＦスイッチ２には、１又は複数のホストマシン４−ｊ（ｊは１〜ｍのいずれかであり、ｍは２以上の整数である。）（＃ｊ）が接続されてよい。ホストマシン４−ｊは、「通信機器」の一例である。
【００２４】
例えば図１に示すように、ＯＦスイッチ２−１には、２台のホストマシン４−１及び４−２がポート「ｐ２」及び「ｐ３」にそれぞれ接続されてよい。ＯＦスイッチ２−２には、１台のホストマシン４−３が接続されてよい。また、ＯＦスイッチ２−６には、２台のホストマシン４−４及び４−５がポート「ｐ３」及び「ｐ４」にそれぞれ接続されてよい。
【００２５】
ホストマシン４−ｊは、ＯＦネットワークを介して互いに通信することが可能である。別言すると、ホストマシン４−ｊのいずれかから送信されたデータは、ＯＦネットワークにおいて、１又は複数のＯＦスイッチ２を経由して、通信相手のホストマシン４−ｋへ転送（「フォワーディング」と称してもよい。）される。なお、「ｋ」は１〜ｍのいずれかであり、ｋ≠ｊを満たす整数である。
【００２６】
例えば、ホストマシン４−１及び４−２は、それぞれ、図１中に点線及び一点鎖線で示すように、ＯＦスイッチ＃１−＃３−＃４−＃６を経由するルートで、ホストマシン４−４と通信することが可能である。
【００２７】
また、ホストマシン４−３は、図１中に二点鎖線で示すように、ＯＦスイッチ＃２−＃３−＃４−＃６を経由するルートで、ホストマシン４−５と通信することが可能である。
【００２８】
なお、図１の例において、ホストマシン４−１〜４−５には、それぞれ、アドレス情報の一例として「10.1.1.1」、「10.2.2.2」、「10.3.3.3」、「10.4.4.4」、及び、「10.5.5.5」が割り当てられている。
【００２９】
また、以下において、ホストマシン４−ｊを区別しなくてよい場合は「ホストマシン４」と略記することがある。また、ホストマシン４は、便宜的に、「ホスト４」と略称してもよい。
【００３０】
コントローラ３は、例示的に、ＯＦネットワークを形成する複数のＯＦスイッチ２に、制御ネットワーク６を介して通信可能に接続されて、各ＯＦスイッチ２を集中的に管理、制御することが可能である。
【００３１】
コントローラ３による各ＯＦスイッチ２の管理や制御に関わる通信は、便宜的に、「制御通信」又は「コントロールプレーンの通信」と称してよい。「コントロールプレーンの通信」は、便宜的に、「ＣＰ通信」と略称してよい。「ＣＰ通信」に用いられる信号やメッセージは、「制御信号」又は「制御メッセージ」と称してよい。「ＣＰ通信」には、ＯＦプロトコルを用いてよい。
【００３２】
ＯＦプロトコルを用いたＣＰ通信が可能なコントローラ３は、「オープンフローコントローラ（ＯＦＣ）３」と称してよい。ＯＦＣ３と各ＯＦスイッチ２とを接続する制御ネットワーク６には、例示的に、ＴＣＰ（Transmission Control Protocol）やＴＬＳ（Transport Layer Security）が適用されてよい。別言すると、ＯＦＣ３と各ＯＦスイッチ２との間には、ＴＣＰやＴＬＳの「セッション」が設定、確立されてよい。
【００３３】
ＯＦスイッチ２間の通信は、例示的に、データプレーンにおけるデータの転送であり、「データフロー」又は単に「フロー」と称してもよい。「フロー」で転送されるデータは、信号の一例であり、例示的に、パケットデータであってよい。パケットデータは、単に「パケット」と略称してよい。
【００３４】
ＯＦＣ３は、ＣＰを構成し、各ＯＦスイッチ２は、データプレーン（ＤＰ）を構成する、と捉えてよい。別言すると、ＯＦスイッチ２とＯＦＣ３と間のＣＰ通信にＯＦプロトコルを用いることで、ＣＰとＤＰとの分離が可能である。
【００３５】
なお、ＯＦＣ３、ＯＦスイッチ２の一部又は全部、及び、ホスト４の一部又は全部は、物理的なコンピュータやサーバ等の物理マシンによって実現されてもよいし、仮想マシンによって実現されてもよい。
【００３６】
ＯＦＣ３は、ＯＦスイッチ２間のフローを一元的に管理、制御してよい。例えば、ＯＦＣ３は、ＯＦスイッチ２が記憶するフローテーブルのエントリを集中的あるいは一元的に管理、制御してよい。
【００３７】
ＯＦスイッチ２間のフローを制御するために、ＯＦＣ３は、ＯＦネットワークのトポロジ情報を検出してよい。トポロジ情報は、ＯＦネットワークにおけるＯＦスイッチ２間の接続関係を識別可能にする情報の一例である。トポロジ情報を基に、ＯＦネットワークについての経路計算等がＯＦＣ３において実施されてよい。
【００３８】
例えば、ＯＦＣ３は、ＯＦネットワークのトポロジ情報を基に、ＯＦネットワーク全体の省電力化を図ることが可能な経路制御等の、高度なトラフィックエンジニアリングを実現できる。
【００３９】
また、ＯＦＣ３による制御の単位を「フロー」とし、既存のレイヤ構造を有する、いずれのネットワークの組み合わせにおいてもデータの流れを「フロー」で表現することよって、レイヤに依存しない通信制御が可能となる。
【００４０】
ＯＦスイッチ２間のパケット転送は、例示的に、各ＯＦスイッチ２に記憶された「フローテーブル」に従って実施される。「フローテーブル」には、複数のフローエントリが登録、記憶されてよい。
【００４１】
フローエントリのそれぞれには、ＯＦスイッチ２間を流れるパケットのフロー単位に、「マッチ条件（match rules）」と、「マッチ条件」に対する「アクション」と、が規定されてよい。「アクション」には、受信パケットの特定の出力ポートへの転送（フォワーディング）や、受信パケットの特定のヘッダフィールドの書き換え、パケット破棄等が指定されてよい。
【００４２】
ＯＦスイッチ２にパケットが入力されると、ＯＦスイッチ２は、「フローテーブル」を参照し、「フローテーブル」に登録されている「ルール」にマッチした「アクション」を実行する。
【００４３】
入力パケットに対応する「ルール」が「フローテーブル」に未登録であった場合、別言すると、受信パケットが「フローテーブル」との関係で未知のパケットであった場合、ＯＦスイッチ２は、ＯＦＣ３宛に「ルール」を問い合わせてよい。
【００４４】
当該問い合わせには、「パケットイン（Packet-in）メッセージ」と呼ばれる制御メッセージが用いられてよい。なお、「パケットインメッセージ」は、単に「パケットイン」と称されてよい。パケットインは、ＯＦスイッチ２がフローテーブルに未登録のデータフローのパケット（未知パケット）を受信したことに応じてＯＦＣ３宛に送信する信号の一例である。
【００４５】
ＯＦＣ３は、ＯＦスイッチ２からパケットインを受信すると、当該パケットインに含められている未知パケットに対応する「ルール」を、パケットインの送信元ＯＦスイッチ２に送信してよい。
【００４６】
「ルール」の送信には、フロー変更（flow modification, FlowMod）メッセージと呼ばれる制御メッセージが用いられてよい。フロー変更メッセージは、ＯＦＣ３がＯＦスイッチ２宛に送信する信号の一例である。
【００４７】
ＯＦスイッチ２は、ＯＦＣ３からのフロー変更メッセージの受信に応じて、当該メッセージに設定されている「ルール」を「フローテーブル」に設定、登録する。
【００４８】
以上のようにして、ＯＦＣ３は、パケットインに対応するフローの経路を決定し、決定した経路に位置するＯＦスイッチ２に対して「フローテーブル」におけるフローエントリの設定、登録を行なうことができる。
【００４９】
そのため、ＯＦＣ３には、図１に例示するように、経路計算部３１とフローエントリ管理部３２とが備えられてよい。フローエントリ管理部３２は、「フローテーブル管理部３２」と言い換えてもよい。
【００５０】
上述したパケットインに対応するフローの経路計算が、経路計算部３１にて実施されてよい。また、上述した各ＯＦスイッチ２の「フローテーブル」におけるフローエントリの設定、登録が、フローエントリ管理部３２によって実施されてよい。
【００５１】
なお、「パケットイン」によって、ＯＦスイッチ２がＤＰで受信した未知パケットをＯＦＣ３に通知できるから、様々な通信プロトコルのパケットをＯＦスイッチ２間のＤＰにおいて転送することが許容される。また、ＯＦＰでは、「パケットイン」に対して「パケットアウトメッセージ」（便宜的に「パケットアウト」と略称してよい。）も規定されている。
【００５２】
「パケットアウト」は、ＯＦＣ３がＯＦスイッチ２間のＤＰにパケットを送出することを指示するために用いられる。パケットアウトによって、ＯＦスイッチ２から様々な通信プロトコルのパケットを送出させることが可能である。
【００５３】
例えば、ＤＰにおいてリンクレイヤディスカバリプロトコル（ＬＬＤＰ）機能を提供する場合、ＯＦＣ３は、ＬＬＤＰパケットを含むパケットアウトをＯＦスイッチ２宛に送信してよい。
【００５４】
当該パケットアウトの受信に応じて、ＯＦスイッチ２は、パケットアウトで指定されているポート（一部でもよいし全部でもよい）からＤＰへＬＬＤＰパケットを送出することができる。
【００５５】
図２に、図１に例示したＯＦスイッチ＃１におけるフローテーブルの一例を示し、図３に、図１に例示したＯＦスイッチ＃３におけるフローテーブルの一例を示す。なお、図２及び図３は、図１に例示したように、ホスト＃１−＃４間、ホスト＃２−＃４間、及び、ホスト＃３−＃５間で、それぞれ、通信が行なわれる場合の、フローテーブルの一例を示す。
【００５６】
図２に例示するように、ＯＦスイッチ＃１のフローテーブルには、３つのフロー識別子（ＩＤ）＝＃１〜＃３に対応したフローエントリが登録されている。各フローエントリには、「マッチ条件」として宛先アドレス情報が記述され、「マッチ条件」に対応する「アクション」として出力ポート番号が記述されている。
【００５７】
例えば、ＯＦスイッチ＃１は、フローＩＤ＃１によって識別されるフローにて、宛先アドレス情報にホスト＃１のアドレス情報「10.1.1.1」を有するパケットを受信すると、当該パケットを出力ポート「ｐ２」へ出力する。
【００５８】
ＯＦスイッチ＃１の出力ポート「ｐ２」は、ホスト＃１に接続されているから、当該パケットはホスト＃１へ転送される。
【００５９】
また、ＯＦスイッチ＃１は、フローＩＤ＃２によって識別されるフローにて、宛先アドレス情報にホスト＃２のアドレス情報「10.2.2.2」を有するパケットを受信すると、当該パケットを出力ポート「ｐ３」へ出力する。
【００６０】
ＯＦスイッチ＃１の出力ポート「ｐ３」は、ホスト＃２に接続されているから、当該パケットはホスト＃２へ転送される。
【００６１】
同様に、ＯＦスイッチ＃１は、フローＩＤ＃３によって識別されるフローにて、宛先アドレス情報にホスト＃４のアドレス情報「10.4.4.4」を有するパケットを受信すると、当該パケットを出力ポート「ｐ１」へ出力する。
【００６２】
ＯＦスイッチ＃１の出力ポート「ｐ１」は、ホスト＃４に向かう経路に位置するＯＦスイッチ＃３のポート「ｐ１」に接続されているから、当該パケットはＯＦスイッチ＃３へ転送される。
【００６３】
一方、図３に例示するように、ＯＦスイッチ＃３のフローテーブルには、５つのフローＩＤ＝＃１〜＃５に対応したフローエントリが登録されている。ＯＦスイッチ＃１のフローテーブルと同様に、各フローエントリには、「マッチ条件」として宛先アドレス情報が記述され、「マッチ条件」に対応する「アクション」として出力ポート番号が記述されている。
【００６４】
例えば、ＯＦスイッチ＃３は、フローＩＤ＃１によって識別されるフローにて、宛先アドレス情報にホスト＃１のアドレス情報「10.1.1.1」を有するパケットを受信すると、当該パケットを出力ポート「ｐ１」へ出力する。
【００６５】
出力ポート「ｐ１」は、ホスト＃１が接続されたＯＦスイッチ＃１のポート「ｐ１」に接続されているから、当該パケットはＯＦスイッチ＃１に転送される。ＯＦスイッチ＃１では、図２に例示したように、アドレス情報「10.1.1.1」を有するパケットは出力ポート「ｐ２」に出力するから、当該パケットはホスト＃１へ転送される。
【００６６】
また、ＯＦスイッチ＃３は、フローＩＤ＃２によって識別されるフローにて、宛先アドレス情報にホスト＃２のアドレス情報「10.2.2.2」を有するパケットを受信すると、当該パケットを出力ポート「ｐ１」へ出力する。
【００６７】
ＯＦスイッチ＃３のポート「ｐ１」は、ホスト＃２が接続されたＯＦスイッチ＃１のポート「ｐ１」に接続されているから、当該パケットはＯＦスイッチ＃１に転送される。ＯＦスイッチ＃１では、図２に例示したように、アドレス情報「10.2.2.2」を有するパケットは出力ポート「ｐ３」に出力するから、当該パケットはホスト＃２へ転送される。
【００６８】
同様に、ＯＦスイッチ＃３は、フローＩＤ＃３によって識別されるフローにて、宛先アドレス情報にホスト＃３のアドレス情報「10.3.3.3」を有するパケットを受信すると、当該パケットを出力ポート「ｐ３」へ出力する。
【００６９】
ＯＦスイッチ＃３の出力ポート「ｐ３」は、ホスト＃３が接続されたＯＦスイッチ＃２のポート「ｐ１」に接続されているから、当該パケットはＯＦスイッチ＃２へ転送される。
【００７０】
ＯＦスイッチ＃２には、アドレス情報「10.3.3.3」を有するパケットは出力ポート「ｐ２」に出力するフローエントリ（図示省略）が登録されている。したがって、当該パケットは出力ポート「ｐ２」に接続されたホスト＃３へ転送される。
【００７１】
また、ＯＦスイッチ＃３は、フローＩＤ＃４によって識別されるフローにて、宛先アドレス情報にホスト＃４のアドレス情報「10.4.4.4」を有するパケットを受信すると、当該パケットを出力ポート「ｐ２」へ出力する。
【００７２】
ＯＦスイッチ＃３の出力ポート「ｐ２」は、ホスト＃４に向かう経路に位置するＯＦスイッチ＃３のポート「ｐ１」に接続されているから、当該パケットはＯＦスイッチ＃３へ転送される。
【００７３】
同様に、ＯＦスイッチ＃３は、フローＩＤ＃５によって識別されるフローにて、宛先アドレス情報にホスト＃５のアドレス情報「10.5.5.5」を有するパケットを受信すると、当該パケットを出力ポート「ｐ２」へ出力する。
【００７４】
以上のようにして、ＯＦスイッチ２は、フローテーブルのフローエントリに従って受信パケットのフォワーディングを行なう。
【００７５】
次に、上述したＯＦネットワークにおいて、或るフローが通る経路に障害が発生した場合の障害復旧方法について、図４を参照して説明する。なお、図４では、例示的に、ホスト＃１−＃４間のフローが通る経路についてＯＦスイッチ＃４で障害が発生した場合を想定している。
【００７６】
障害復旧方法には、「プロアクティブ（proactive）方法」及び「リアクティブ（reactive）方法」と呼ばれる２つの方法を適用できる。なお、経路障害の復旧は、以下に説明するとおり、経路の再設定によって行なわれるから、「障害復旧方法」は、「経路再設定方法」と称してもよい。
【００７７】
「プロアクティブ方法」では、障害発生が検出された経路（例えば、ＯＦスイッチ＃４）を通るフローの代替経路をＯＦＣ３にて再計算し、代替経路のフローエントリを、代替経路に位置する各ＯＦスイッチ２に再設定する。
【００７８】
なお、「代替経路」は、「迂回経路」又は「新経路」と称してもよい。「新経路」に対して、障害発生が検出されたＯＦスイッチ２を通過するフローの経路は、「旧経路」と称してよい。また、障害発生が検出されたＯＦスイッチ２は、便宜的に「障害箇所」と称してもよい。
【００７９】
例えば図４に示すように、ＯＦＣ３は、ＯＦスイッチ＃４に障害が発生したことを検出すると（ＳＴＥＰ１）、例えばフローエントリ管理部３２において、障害発生を検出したＯＦスイッチ＃４を通過する対象フローを抽出する（ＳＴＥＰ２）。
【００８０】
なお、ＯＦスイッチ２に障害が発生したことは、ＯＦＣ３とＯＦスイッチ２との間でセッションが確立した後に、確立したセッションを通じて死活監視のための信号をＯＦＣ３とスイッチ２との間で互いに送受信することで、ＯＦＣ３において検出できる。
【００８１】
例えば、ＯＦＣ３は、確立したセッションを通じてエコーリクエスト（Echo Request）をＯＦスイッチ２宛に定期的に送信してよい。ＯＦスイッチ２から当該エコーリクエストに対する応答であるエコーリプライ（Echo Reply）を所定時間内に受信できない場合に、ＯＦＣ３は、ＯＦスイッチ２に障害が発生したと判断してよい。
【００８２】
ＯＦＣ３は、ＳＴＥＰ２で抽出した対象フローのフローエントリを、当該対象フローが通過する各ＯＦスイッチ２（図４の例では、ＯＦスイッチ＃１、＃３、及び、＃６）におけるフローテーブルから削除するよう指示してよい（ＳＴＥＰ３）。当該削除指示には、フロー変更メッセージが用いられてよい。
【００８３】
併せて、ＯＦＣ３は、例えば経路計算部３１によって、対象フローの新経路を、ＯＦネットワークのトポロジ情報を基に計算して決定してよい（ＳＴＥＰ５）。図４の例では、ＯＦスイッチ＃１−＃３−＃５−＃６を経由する経路が新経路に決定されている。
【００８４】
そして、ＯＦＣ３は、新経路に位置する各ＯＦスイッチ＃１、＃３、＃５、＃６のフローテーブルに、ホスト＃１−＃４間の新経路のフローエントリを設定、登録する（ＳＴＥＰ６）。これにより、旧経路のフローが新経路にて救済されて障害が復旧する（ＳＴＥＰ７）。なお、新経路のフローエントリの設定、登録にも、フロー変更メッセージが用いられてよい。
【００８５】
一方、「リアクティブ方法」では、上述したＳＴＥＰ１〜ＳＴＥＰ３についてはプロアクティブ方法と同様にして実施されてよい。
【００８６】
ＳＴＥＰ３で旧経路のフローエントリが各ＯＦスイッチ＃１、＃３、及び、＃６のフローテーブルから削除された後に、ＯＦスイッチ＃１、＃３、及び、＃６のいずれかで、旧経路のフローのパケットが受信されると、当該パケットは未知パケットとして扱われる。
【００８７】
未知パケットの検出に応じて、ＯＦスイッチ２は、未知パケットを含むパケットインをＯＦＣ３宛に送信してよい。別言すると、新経路への経路再設定のためにＯＦＣ３によってフローエントリを削除されたＯＦスイッチ２は、未知のデータフローのパケット受信を示すメッセージをＯＦＣ３宛に送信してよい。
【００８８】
ＯＦＣ３は、パケットインを受信（ＳＴＥＰ４）する毎に、例えば経路計算部３１において、未知パケットのフロー単位で、新経路の計算を行なってよい（ＳＴＥＰ５）。
【００８９】
そして、ＯＦＣ３は、パケットインの受信毎に計算した新経路のフローエントリを、各パケットインの送信元ＯＦスイッチ２それぞれにおけるフローテーブルに設定、登録する（ＳＴＥＰ６）。これにより、旧経路のフローが新経路にて救済されて障害が復旧する（ＳＴＥＰ７）。
【００９０】
「プロアクティブ方法」では、図５（Ａ）に模式的に例示するように、上述したＳＴＥＰ２〜６の一連の処理が実施されるため、障害の影響を受けた全経路をまとめて復旧することができる。
【００９１】
これに対し、「リアクティブ方法」では、図５（Ｂ）に模式的に例示するように、ＳＴＥＰ２及び３の後、ＳＴＥＰ３でフローエントリが削除されたフローの数だけ、パケットインの受信毎に、ＳＴＥＰ４〜６が繰り返し実施される。
【００９２】
以上のように、「プロアクティブ方法」は、「リアクティブ方法」に比して、障害復旧にかかる時間を短縮化して高速な障害復旧が可能である反面、ＯＦＣ３の負荷が上昇し易い、と云える。これに対し、「リアクティブ方法」は、「プロアクティブ方法」に比して、障害復旧にかかる時間は長期化し易いものの、ＯＦＣ３の負荷は低負荷に抑制し易い、と云える。
【００９３】
そこで、本実施形態では、「プロアクティブ方法」と「リアクティブ方法」とのそれぞれの利点を活かした障害復旧を可能とすることについて検討する。なお、「プロアクティブ方法」は、「第１の方法」の一例であり、「リアクティブ方法」は、「第２の方法」の一例である。
【００９４】
第２の方法の一例である「リアクティブ方法」は、第１の方法の一例である「プロアクティブ方法」よりも、同じデータフロー数に対する経路再設定の処理負荷が低く、かつ、処理時間が長い方法の一例である。
【００９５】
例えば、ＯＦＣ３は、ＯＦＣ３の負荷と障害復旧対象のフロー数とに基づいて、障害復旧対象のフローの全部又は一部について、「プロアクティブ方法」と「リアクティブ方法」とを、適応的に選択して障害復旧を行なう。これにより、ＯＦＣ３の負荷上昇を抑えつつ、障害復旧にかかる時間の短縮化を図ることができる。
【００９６】
ＯＦＣ３の負荷を示す指標には、例示的に、ＯＦＣ３のＣＰＵ使用率や、ＯＦＣ３のメモリ使用率を用いることができ、また、ＣＰＵ使用率とメモリ使用率とを複合的に用いることも可能である。
【００９７】
以下では、非限定的な一例として、ＯＦＣ３の負荷を示す指標に、ＣＰＵ使用率を用いる。なお、ＣＰＵは、「Central Processing Unit」の略称である。ＣＰＵ使用率は、「ＣＰＵ利用率」あるいは「ＣＰＵ負荷」と言い換えてもよい。
【００９８】
例えば図６に示すように、ＯＦＣ３において、Ｎ個（Ｎは自然数）のフローの経路計算に対してＣＰＵの処理能力のＸ（Ｎ）［％］が使用されることを予め求めておく。
【００９９】
Ｘ（Ｎ）は、別言すると、フロー数Ｎの経路計算がＣＰＵ使用率に与える変動量を示す。なお、「Ｘ（Ｎ）」は、単に「Ｘ」と略記することがある。ＣＰＵ使用率Ｘは、実測値でもよいし、実測値を基にした推定値でもよい。
【０１００】
説明の便宜のために、以下では、ＣＰＵ使用率Ｘに推定値を用いる。別言すると、ＯＦＣ３は、障害復旧対象のフロー数ＮからＣＰＵ使用率の変動量（Ｘ）を推定できる。
【０１０１】
したがって、障害復旧対象のフロー数Ｎに対するＣＰＵ使用率の変動量（Ｘ）を、簡易的に求めることができ、変動量Ｘを求めるためのＯＦＣ３の負荷を抑えることができる。
【０１０２】
以下において、推定値としてのＣＰＵ使用率Ｘは、便宜的に、「ＣＰＵ使用率Ｘ（推定値）」あるいは「ＣＰＵ負荷推定値Ｘ」と表記することがある。これに対して、ＯＦＣ３の現在のＣＰＵ使用率（Ｙ％）は、便宜的に、「ＣＰＵ使用率Ｙ（現在値）」と表記することがある。
【０１０３】
ＣＰＵ使用率Ｙは、フロー数Ｎの経路計算に応じたＣＰＵ使用率の変動量（Ｘ）を含まない、ＯＦＣ３の負荷を示すと捉えてよい。また、Ｘ＋Ｙは、フロー数Ｎの経路計算に応じたＣＰＵ使用率の変動量（Ｘ）を含む、ＯＦＣ３の負荷を示すと捉えてよい。
【０１０４】
障害復旧時において、ＯＦＣ３は、障害復旧対象のフロー数Ｎを取得し、当該フロー数Ｎに対するＣＰＵ使用率Ｘ（推定値）を取得する。併せて、ＯＦＣ３は、ＣＰＵ使用率Ｙ（現在値）を取得する。
【０１０５】
そして、ＯＦＣ３は、例えば、ＣＰＵ使用率Ｘ及びＹと、閾値Ａ（％）と、の比較によって、障害復旧方法の選択を行なう。なお、閾値Ａは、ＯＦＣ３の負荷に関する第１閾値の一例である。
【０１０６】
例示的に、ＯＦＣ３は、図７に模式的に例示するように、Ｙ≧Ａ（条件１）が満たされれば、高負荷状態にあると判断して、障害復旧対象のＮ個のフローの全てについて低負荷動作が可能な「リアクティブ方法」を選択してよい。
【０１０７】
また、Ｘ＋Ｙ≦Ａ（条件２）が満たされれば、ＣＰＵ負荷に余裕があるため、障害復旧対象のＮ個のフローの全てについて高速復旧動作が可能な「プロアクティブ方法」を障害復旧方法に選択してよい。
【０１０８】
更に、Ｘ＋Ｙ＞Ａ（条件３）が満たされれば、ＯＦＣ３は、「ハイブリッド方法」を障害復旧方法に選択してよい。「ハイブリッド方法」は、「プロアクティブ方法」と「リアクティブ方法」とを複合的に用いる方法である。
【０１０９】
例えば、「ハイブリッド方法」では、Ｎ個のフローのうちの一部のフロー（例えば、Ｍ個のフロー）については、高速復旧動作が可能な「プロアクティブ方法」を選択する。残りのフロー（例えば、Ｎ−Ｍ個）については、低負荷動作が可能な「リアクティブ方法」を選択する。
【０１１０】
ただし、「Ｍ」は１≦Ｍ＜Ｎを満たす整数である。「Ｍ個のフロー」は、「プロアクティブ方法」で障害復旧を実施しても、Ｘ＋Ｙ≦Ａを満たすことが可能と推定される範囲のフロー数に相当すると捉えてもよい。別言すると、「Ｎ−Ｍ個のフロー」は、「プロアクティブ方法」で障害復旧を実施すると、Ｘ＋Ｙ＞Ａとなるフロー数に相当すると捉えてもよい。
【０１１１】
このように、ＯＦＣ３は、ＣＰＵ負荷が高負荷状態にならなければ、高速復旧動作が可能な「プロアクティブ方法」を選択してよい。一方、ＣＰＵ負荷が高負荷状態にある場合あるいは障害復旧動作によって高負荷状態になると推定される場合には、Ｎ個のフローの少なくとも一部については低負荷動作が可能な「リアクティブ方法」を選択してよい。
【０１１２】
（ＯＦＣの構成例）
次に、上述したような適応的な障害復旧方法の選択が可能なＯＦＣ３の構成例について、図８〜図１０を参照して説明する。
【０１１３】
図８は、上述したＯＦＣ３の機能的な構成例を示すブロック図である。
図８に示すように、ＯＦＣ３は、例示的に、既述の経路計算部３１及びフローエントリ管理部３２を備えるほか、ＯＦスイッチ障害検出部３３、トポロジ更新部３４、及び、トポロジ情報データベース（ＤＢ）３５を備えてよい。また、ＯＦＣ３は、パケットイン受信部３６、フローエントリ設定部３７、ＣＰＵ使用率モニタ３８、及び、障害復旧方法選択部３９を備えてよい。
【０１１４】
ＯＦスイッチ障害検出部３３は、例示的に、既述の死活監視を用いて、ＯＦＣ３が管理、制御の対象とするＯＦスイッチ２のいずれかに障害が発生したことを検出する。
【０１１５】
トポロジ更新部３４は、例示的に、ＯＦスイッチ障害検出部３３での障害検出に応じて、トポロジ情報ＤＢ３５におけるトポロジ情報を更新する。トポロジ情報に基づいて、経路計算部３１において、障害復旧対象のフローについての新経路の計算が実施されてよい。また、経路計算部３１によって求められた新経路に応じて、フローエントリ管理部３２において、フローテーブルのフローエントリが登録、更新されてよい。
【０１１６】
パケットイン受信部３６は、例示的に、ＯＦＣ３が管理、制御の対象とするスイッチ２のいずれかがＯＦＣ３宛に送信したパケットインを受信する。「リアクティブ方法」では、既述のように、パケットイン受信部３６でのパケットインの受信に応じて、経路計算部３１による経路計算が実施されてよい。
【０１１７】
フローエントリ設定部３７は、例示的に、フローエントリ管理部３２で管理されているフローエントリに従って、該当ＯＦスイッチ２におけるフローテーブルに対してフローエントリの設定や更新を行なう。ＯＦスイッチ２に対するフローエントリの設定や更新には、既述のフロー変更（FlowMod）メッセージが用いられてよい。
【０１１８】
ＣＰＵ使用率モニタ３８は、例示的に、ＯＦＣ３のＣＰＵ使用率Ｙ（現在値）をモニタする。
【０１１９】
障害復旧方法選択部３９は、例示的に、ＣＰＵ使用率モニタ３８からＣＰＵ使用率Ｙ（現在値）を取得し、また、フローエントリ管理部３２から障害復旧対象のフロー数（Ｎ）を取得して、フロー数Ｎに対するＣＰＵ負荷推定値Ｘ（図６参照）を求める。
【０１２０】
そして、障害復旧方法選択部３９は、図７にて説明したように、ＣＰＵ使用率Ｙ及びＣＰＵ負荷推定値Ｘと閾値Ａとの比較によって、障害復旧方法を選択する。例えば障害復旧方法選択部３９は、図９に例示する判定基準（「選択基準」と称してもよい。）に従って障害復旧方法を選択してよい。
【０１２１】
例示的に、障害復旧方法選択部３９は、ＣＰＵ使用率（Ｙ）が既に高い状態で、障害復旧対象のフロー数（Ｎ）も多い場合、別言すると、図７にて説明した条件１（Ｙ≧Ａ）が満たされる場合には、「リアクティブ方法」を選択してよい。
【０１２２】
また、ＣＰＵ使用率（Ｙ）が低い状態で、障害復旧対象のフロー数（Ｎ）も少ない場合、別言すると、図７にて説明した条件２（Ｘ＋Ｙ≦Ａ）が満たされる場合には、障害復旧方法選択部３９は、「プロアクティブ方法」を選択してよい。
【０１２３】
更に、ＣＰＵ使用率（Ｙ）が低い状態でも障害復旧対象のフロー数（Ｎ）が多いために、図７にて説明した条件３（Ｘ＋Ｙ＞Ａ）が満たされる場合には、障害復旧方法選択部３９は、「ハイブリッド方法」を選択してよい。
【０１２４】
また、ＣＰＵ使用率（Ｙ）が高い状態で、障害復旧対象のフロー数（Ｎ）が少ない場合には、図７にて説明した条件３（Ｘ＋Ｙ＞Ａ）が満たされることもあるし、条件２（Ｘ＋Ｙ≦Ａ）が満たされることもある。
【０１２５】
障害復旧方法選択部３９は、条件３が満たされる場合には、「ハイブリッド方法」を選択してよく、条件２が満たされる場合には、「プロアクティブ方法」を選択してよい。別言すると、ＣＰＵ使用率が高い状態であっても障害復旧対象のフロー数が少なければ、「プロアクティブ方法」を選択するケースがあってよい。
【０１２６】
（ＯＦＣの動作例）
以下、図１０のフローチャートを参照して、上述したＯＦＣ３の動作例について説明する。
【０１２７】
図１０に例示するように、ＯＦＣ３は、ＯＦスイッチ障害検出部３３にて、いずれかのＯＦスイッチ２に障害が発生したことが検出されると、フローエントリ管理部３２にて、障害発生が検出されたＯＦスイッチ２を通過するフローのフローエントリを削除する。
【０１２８】
フローエントリ管理部３２でのフローエントリの削除に応じて、ＯＦＣ３は、削除したフローエントリを、障害箇所を通るフローに関連するＯＦスイッチ２のフローテーブルからも削除する（処理Ｐ１１）。例えば、ＯＦＣ３は、フローエントリ設定部３７によって、該当ＯＦスイッチ２宛にフロー変更メッセージを送信して、該当フローエントリの削除を指示してよい。
【０１２９】
その後、ＯＦＣ３は、障害復旧方法選択部３９において、障害復旧対象のフロー数（Ｎ）をフローエントリ管理部３２から取得し、取得したフロー数（Ｎ）に対するＣＰＵ負荷推定値（Ｘ）を取得する（処理Ｐ１２）。
【０１３０】
併せて、障害復旧方法選択部３９は、ＣＰＵ使用率モニタ３８から現在のＣＰＵ使用率（Ｙ）を取得する（処理Ｐ１３）。なお、処理Ｐ１２と処理Ｐ１３との順序は逆でもよい。また、処理Ｐ１２と処理Ｐ１３とはパラレルに実施されてもよい。
【０１３１】
そして、障害復旧方法選択部３９は、ＣＰＵ使用率Ｙと閾値Ａとを比較して、Ｙ≧Ａ（条件１）を満たすか否かを判定する（処理Ｐ１４）。Ｙ≧Ａが満たされれば（処理Ｐ１４でＹＥＳ）、障害復旧方法選択部３９は、低負荷動作が可能な「リアクティブ方法」を選択する（処理Ｐ１５）。
【０１３２】
ＯＦＣ３は、障害復旧方法選択部３９で選択された「リアクティブ方法」に従って障害復旧処理を実施する（処理Ｐ１９）。例えば、ＯＦＣ３は、パケットイン受信部３６でのパケットインの受信に応じて、経路計算部３１において、未知パケットのフロー単位で、新経路の計算を行なう。
【０１３３】
そして、ＯＦＣ３は、新経路のフローエントリを、新経路に位置する各ＯＦスイッチ２のフローテーブルに設定、登録する。これにより、旧経路のフローが新経路にて救済されて障害が復旧する。
【０１３４】
一方、処理Ｐ１４での閾値判定において、Ｙ≧Ａが満たされなければ（処理Ｐ１４でＮＯ）、障害復旧方法選択部３９は、Ｘ＋Ｙ≦Ａ（条件２）が満たされるか否かを判定してよい（処理Ｐ１６）。
【０１３５】
Ｘ＋Ｙ≦Ａ（条件２）が満たされれば（処理Ｐ１６でＹＥＳ）、障害復旧方法選択部３９は、「プロアクティブ方法」を選択する（処理Ｐ１７）。
【０１３６】
ＯＦＣ３は、障害復旧方法選択部３９で選択された「プロアクティブ方法」に従って障害復旧処理を実施する（処理Ｐ１９）。例えば、ＯＦＣ３は、経路計算部３１によって、障害復旧対象のフローの新経路をトポロジ情報に基づいて計算する。
【０１３７】
そして、ＯＦＣ３は、新経路に位置する各ＯＦスイッチ２のフローテーブルに、新経路のフローエントリを設定、登録する。これにより、旧経路のフローが新経路にて救済されて障害が復旧する。
【０１３８】
なお、処理Ｐ１６での閾値判定において、Ｘ＋Ｙ≦Ａが満たされなければ（処理Ｐ１６でＮＯ）、障害復旧方法選択部３９は、Ｘ＋Ｙ＞Ａ（条件３）が満たされると判定して、「ハイブリッド方法」を選択してよい。
【０１３９】
ＯＦＣ３は、障害復旧方法選択部３９で選択された「ハイブリッド方法」に従って障害復旧処理を実施する（処理Ｐ１９）。
【０１４０】
例えば、ＯＦＣ３は、障害復旧対象のＮ個のフローのうちの一部のフロー（例えば、Ｍ個のフロー）については、高速復旧動作が可能な「プロアクティブ方法」によって復旧処理を実施してよい。残りのフロー（例えば、Ｎ−Ｍ個）については、障害復旧方法選択部３９は、低負荷動作が可能な「リアクティブ方法」によって障害復旧処理を実施してよい。
【０１４１】
以上のように、上述した実施形態によれば、ＯＦネットワークの障害復旧を行なう際、ＯＦＣ３は、ＯＦＣ３の負荷と障害復旧対象のフロー数とに応じた障害復旧方法を適応的に選択できる。したがって、ＯＦＣ３の負荷が障害復旧処理に伴って過負荷になることを抑制できる。
【０１４２】
また、ＯＦＣ３の負荷に余裕があるにも関わらず、障害復旧処理に、低負荷で動作可能であるが時間のかかる「リアクティブ方法」が選ばれてしまうことを抑制できる。したがって、ＯＦＣ３のＣＰＵ処理能力やメモリ容量等の、障害復旧処理に利用可能なリソースの有効利用を図ることができる。よって、障害復旧時間の短縮化を図ることもできる。
【０１４３】
（ＯＦＣのハードウェア構成例）
次に、図１１を参照して、上述したＯＦＣ３のハードウェア構成例について説明する。図１１に示すように、ＯＦＣ３は、例示的に、ＣＰＵ３０１、ＲＡＭ（Random Access Memory）３０２、ＲＯＭ（Read Only Memory）３０３、ＨＤＤ（Hard Disc Drive）３０４、及び、ネットワークインタフェース（ＮＷ−ＩＦ）３０５を備えてよい。
【０１４４】
また、ＯＦＣ３は、例示的に、入力インタフェース（ＩＦ）３０６、出力ＩＦ３０７、入出力ＩＦ３０８、及び、ドライブ装置３０９の全部又は一部をオプションとして備えてよい。
【０１４５】
ＣＰＵ３０１、ＲＡＭ３０２、ＲＯＭ３０３、ＨＤＤ３０４、各ＩＦ３０５〜３０８、及び、ドライブ装置３０９は、例示的に、通信バス３１０に接続されて、ＣＰＵ３０１を介して相互に通信が可能であってよい。
【０１４６】
ＣＰＵ３０１は、演算能力を備えたプロセッサ回路又はプロセッサデバイスの一例である。プロセッサ回路又はプロセッサデバイスの一例として、ＣＰＵ３０１に代えて、他の演算処理装置、例えばＭＰＵ（Micro Processing Unit）等の集積回路（Integrated Circuit, IC）や、ＤＳＰ（Digital Signal Processor）が用いられてもよい。演算能力を備えたプロセッサ回路又はプロセッサデバイスは、「コンピュータ」と称してもよい。
【０１４７】
ＲＡＭ３０２及びＲＯＭ３０３は、いずれも、種々のデータやプログラムを記憶するメモリの一例である。「プログラム」は、「ソフトウェア」あるいは「アプリケーション」と称されてもよい。
【０１４８】
ＲＡＭ３０２は、ＣＰＵ３０１のワークメモリとして用いられてよい。例えば、ＲＯＭ３０３やＨＤＤ３０４に記憶されたデータやプログラムが、ＲＡＭ３０２に展開されて、ＣＰＵ３０１の演算に用いられてよい。
【０１４９】
ＨＤＤ３０４は、記憶装置の一例であり、種々のデータやプログラムを記憶する。記憶装置の他の一例としては、ソリッドステートドライブ（ＳＳＤ）等の半導体ドライブ装置や、フラッシュメモリ等の不揮発性メモリ等が挙げられる。したがって、ＨＤＤ３０４は、ＳＳＤやフラッシュメモリに代替されてもよい。
【０１５０】
ＨＤＤ３０４に記憶されるプログラムには、図８に例示したＯＦＣ３としての各種機能の全部又は一部を実現可能なプログラム（便宜的に「ＯＦＣプログラム」と称してよい。）が含まれてよい。なお、ＯＦＣプログラムを成すプログラムコードの全部又は一部は、ＲＯＭ３０３に記憶されてもよいし、オペレーティングシステム（ＯＳ）の一部として記述されてもよい。
【０１５１】
ＨＤＤ３０４に記憶されるデータには、トポロジ情報（ＤＢ３５）や、フローエントリ管理部３２によって管理されるフローテーブル、図６に例示した、フロー数（Ｎ）に対するＣＰＵ負荷推定値（Ｘ）の情報、ＣＰＵ使用率の判定閾値（Ａ）等が含まれてよい。
【０１５２】
ＣＰＵ３０１が、ＨＤＤ３０４に記憶されたＯＦＣプログラムを例えばＲＡＭ３０２に展開して実行することにより、ＯＦＣ３としての各種機能が具現される。なお、ＲＡＭ３０２、ＲＯＭ３０３及びＨＤＤ３０４は、便宜的に、ＯＦＣ３の「記憶部３１１」と総称してよい。
【０１５３】
プログラムやデータは、コンピュータ読取可能な記録媒体８０に記録された形態で提供されてよい。記録媒体の一例としては、フレキシブルディスク、ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ，ＭＯ，ＤＶＤ、ブルーレイディスク、ポータブルハードディスク等が上げられる。また、ＵＳＢ（Universal Serial Bus）メモリ等の半導体メモリ７０も記録媒体８０の一例である。
【０１５４】
半導体メモリ７０に記憶されたプログラムやデータは、例示的に、入出力ＩＦ３０８を通じてＣＰＵ３０１に読み出されてよい。また、記録媒体８０に記憶されたプログラムやデータは、例示的に、ドライブ装置３０９を通じてＣＰＵ３０１に読み出されてよい。
【０１５５】
なお、プログラムやデータは、サーバ等から通信回線を介してＯＦＣ３に提供（ダウンロード）されてもよい。例えば、ＮＷ−ＩＦ３０５を通じてプログラムやデータがＯＦＣ３に提供されてよい。また、プログラムやデータは、入力装置５０から入力ＩＦ３０６を通じてＯＦＣ３に提供されてもよい。
【０１５６】
ＮＷ−ＩＦ３０５は、例示的に、ＯＦスイッチ２との間の接続及び通信を可能にする通信インタフェースの一例である。ＮＷ−ＩＦ３０５には、例示的に、既述のＴＣＰやＴＬＳをサポートするインタフェースが適用されてよい。
【０１５７】
入力ＩＦ３０６には、例示的に、入力装置５０が接続されてよい。入力装置５０の一例は、キーボードや、マウス、操作ボタン、マイクロフォン等である。
【０１５８】
出力ＩＦ３０７には、例示的に、出力装置の一例としての表示装置６０が接続されてよい。表示装置６０には、液晶ディスプレイ等が適用されてよい。タッチパネル式の液晶ディスプレイは、入力装置５０にも該当すると捉えてよい。なお、出力ＩＦ３０７には、出力装置の他の一例として、プリンタやスピーカ等が接続されてもよい。
【０１５９】
入力装置５０は、ＯＦＣ３のオペレータによる、ＯＦＣ３に対する設定の登録や変更、ＯＦＣ３の各種操作やデータの入力等の作業に用いられてよい。出力装置の一例である表示装置６０は、ＯＦＣ３のオペレータによる設定の確認やオペレータに対する各種通知等の出力に用いられてよい。
【０１６０】
なお、図１１に例示するＯＦＣ３のハードウェア構成例は、あくまでも例示であり、ＯＦＣ３においてハードウェアの増減が適宜に行なわれてよい。例えば、任意のハードウェアブロックの追加や削除、分割、任意の組み合わせでの統合、バスの追加又は削除等が、ＯＦＣ３において、適宜に行なわれてよい。
【０１６１】
（ＯＦスイッチの構成例）
次に、図１２を参照して、上述したＯＦスイッチ２の機能的な構成例について説明する。図１２に示すように、ＯＦスイッチ２は、例示的に、ＯＦプロトコル処理部２１、フローテーブル２２、フローテーブル検索部２３、及び、アクション処理部２４を備えてよい。
【０１６２】
ＯＦプロトコル処理部２１は、例示的に、ＯＦＣ３との間でＯＦプロトコルに基づく送受信処理を実施する。例えば、ＯＦプロトコルの送信処理には、既述のパケットインを含む制御メッセージの送信処理が含まれてよい。一方、ＯＦプロトコルの受信処理には、ＯＦＣ３が送信した、既述のフロー変更メッセージやパケットアウトを含む制御メッセージの受信処理が含まれてよい。
【０１６３】
フローテーブル２２は、例示的に、図２及び図３にて説明したフローエントリを記憶する。ＯＦプロトコル処理部２１でのフロー変更メッセージの受信処理に応じて、フローテーブル２２に、フローエントリが設定、登録されてよい。
【０１６４】
テーブル検索部２３は、例示的に、ホスト４又は他のＯＦスイッチ２から受信したパケットに条件がマッチするフローエントリをフローテーブル２２において検索し、ヒットしたフローエントリに従って受信パケットを宛先に応じた出力ポートに転送する。
【０１６５】
アクション処理部２４は、テーブル検索部２３から転送された受信パケットを、フローエントリに指定された「アクション」に従った処理を行なう。「アクション」には、パケットの転送（フォワーディング）や破棄（ドロップ）等を指定できる。
【０１６６】
なお、テーブル検索部２３にて受信パケットに対するフローエントリがヒットしなかった場合、当該受信パケットは、未知パケットと扱われ、例えばアクション処理部２４からＯＦプロトコル処理部２１へ転送されてよい。ＯＦプロトコル処理部２１は、未知パケットを既述のパケットインにてＯＦＣ３宛に送信してよい。
【０１６７】
（ＯＦスイッチのハードウェア構成例）
次に、図１３を参照して、上述したＯＦスイッチ２のハードウェア構成例について説明する。図１３に示すように、ＯＦスイッチ２は、例示的に、ＣＰＵ２０１、ＲＡＭ２０２、ＲＯＭ２０３、及び、ＮＷ−ＩＦ２０５を備えてよい。
【０１６８】
ＣＰＵ２０１、ＲＡＭ２０２、ＲＯＭ２０３、及び、ＮＷ−ＩＦ２０５は、例示的に、通信バス２１０に接続されて、ＣＰＵ２０１を介して相互に通信が可能であってよい。
【０１６９】
ＣＰＵ２０１は、ＯＦＣ３のＣＰＵ３０１と同様に、演算能力を備えたプロセッサ回路又はプロセッサデバイスの一例である。ＣＰＵ２０１は、他の演算処理装置、例えばＭＰＵ等のＩＣや、ＤＳＰに代替されてもよい。
【０１７０】
ＲＡＭ２０２及びＲＯＭ２０３は、いずれも、種々のデータやプログラムを記憶するメモリの一例である。
【０１７１】
ＲＡＭ２０２は、ＣＰＵ２０１のワークメモリとして用いられてよい。例えば、ＲＯＭ２０３に記憶されたデータやプログラムが、ＲＡＭ２０２に展開されて、ＣＰＵ２０１の演算に用いられてよい。
【０１７２】
ＲＯＭ２０３に記憶されるプログラムには、図１２に例示したＯＦスイッチ２としての各種機能の全部又は一部を実現可能なプログラム（便宜的に「ＯＦスイッチプログラム」と称してよい。）が含まれてよい。
【０１７３】
ＲＡＭ２０２には、既述のフローテーブルが記憶されてよい。フローテーブルは、ＲＡＭ２０２とは異なる、ＯＦスイッチ２に備えられた不揮発性メモリ（図示省略）に記憶されてもよい。
【０１７４】
ＣＰＵ２０１が、ＲＯＭ２０３に記憶されたＯＦスイッチプログラムを例えばＲＡＭ２０２に展開して実行することにより、ＯＦスイッチ２としての各種機能が具現される。なお、ＲＡＭ２０２及びＲＯＭ２０３は、便宜的に、ＯＦスイッチ２の「記憶部２１１」と総称してよい。
【０１７５】
ＮＷ−ＩＦ２０５は、例示的に、ホスト４、他のＯＦスイッチ２、及び、ＯＦＣ３のいずれかとの間の接続及び通信を可能にする通信インタフェースの一例である。例示的に、ＮＷ−ＩＦ２０５には、ホスト４及び他のＯＦスイッチ２との間のＤＰ通信に関して、ＴＣＰ／ＩＰをサポートするインタフェースが含まれてよい。また、ＯＦＣ３との間のＣＰ通信に関して、ＴＣＰやＴＬＳをサポートするインタフェースが、ＮＷ−ＩＦ２０５に含まれてよい。
【０１７６】
（第１変形例）
次に、図１４及び図１５を参照して、上述した実施形態の第１変形例について説明する。第１変形例では、ＯＦＣ３がＯＦスイッチ２におけるフローエントリを削除する際の処理負荷を低減する例について説明する。
【０１７７】
図１０の処理Ｐ１１において、ＯＦＣ３が障害箇所を通るフローに関連する全てのＯＦスイッチ２におけるフローエントリを制限無く削除の対象にすると、削除対象のフロー数が多過ぎると、ＯＦＣ３の負荷が高くなり過ぎるおそれがある。
【０１７８】
ＯＦＣ３の負荷が高くなり過ぎると、障害復旧が遅延したり、障害復旧が完了しなかったりするおそれがある。
【０１７９】
そこで、第１変形例では、図１４に模式的に例示するように、フローエントリを削除する候補のＯＦスイッチ２を、障害箇所（例えば、ＯＦスイッチ＃４）を通るフローの始点に相当するＯＦスイッチ２（例えば、ＯＦスイッチ＃１）に制限してよい。
【０１８０】
これにより、ＯＦＣ３がＯＦスイッチ２から削除するフローエントリ数を削減することができ、ＯＦＣ３のフローエントリ削除に伴う処理負荷を低減することができる。なお、障害箇所を通るフローの始点に相当するＯＦスイッチ２は、便宜的に、「始点ＯＦスイッチ２」と称してよい。
【０１８１】
図１５に、その動作例をフローチャートにて示す。図１５に例示するように、ＯＦＣ３は、例えばフローエントリ管理部３２（図８参照）において、障害箇所を通るフロー数Ｋを取得する（処理Ｐ２１）。なお、「Ｋ」は自然数であり、例示的に、Ｋ≧Ｎ（障害復旧対象のフロー数）である。
【０１８２】
そして、ＯＦＣ３は、例示的に、フローエントリ管理部３２において、フロー数Ｋと閾値βとを比較して、Ｋ≧βであるか否かを判定する（処理Ｐ２２）。「β」は、第２閾値の一例であり、自然数である。
【０１８３】
「β」は、例示的に、ＯＦＣ３が、β個のフロー数のフローエントリを連続的に削除する処理を、関連する複数のＯＦスイッチ２に対して実行すると、ＯＦＣ３の負荷（例えば、ＣＰＵ使用率Ｙ）が高負荷状態（Ｙ＞Ａ）になると判断してよい値に相当する。なお、閾値βは、例示的に、図１１に例示した記憶部３１１に記憶されてよい。
【０１８４】
閾値判定の結果、Ｋ≧βであれば（処理Ｐ２２でＹＥＳ）、ＯＦＣ３は、例示的に、フローエントリ管理部３２において、障害箇所を通るフローの始点に相当するＯＦスイッチ２に限ってフローエントリの削除対象に決定してよい。当該決定に応じて、ＯＦＣ３は、例えばフローエントリ設定部３７によって、始点ＯＦスイッチ２に限って、フローエントリの削除を指示するフロー変更メッセージを送信してよい（処理Ｐ２３）。
【０１８５】
一方、閾値判定の結果、Ｋ＜βであれば（処理Ｐ２２でＮＯ）、ＯＦＣ３は、障害箇所を通るフローに関連する全てのＯＦスイッチ２を、フローエントリの削除対象に決定してよい。当該決定に応じて、ＯＦＣ３は、例えばフローエントリ設定部３７によって、障害箇所を通るフローに関連する全てのＯＦスイッチ２に対して、フローエントリの削除を指示するフロー変更メッセージを送信してよい（処理Ｐ２４）。
【０１８６】
なお、削除される旧フローと障害復旧後の新フローとで「マッチ条件」が同一でも「アクション」が異なるＯＦスイッチ２（例えば、ＯＦスイッチ＃３）については、ＯＦＣ３は、旧フローエントリの削除後に、新フローエントリを登録してよい。
【０１８７】
ただし、ＯＦＣ３は、ＯＦスイッチ＃３において、旧フローエントリを残したまま、新フローエントリの優先度を旧フローエントリよりも高くしてフローテーブルに登録してもよい。この場合、ＯＦＣ３は、ＯＦスイッチ＃３について、フローの優先度管理を実施してよい。
【０１８８】
新旧のフローで「マッチ条件」及び「アクション」が共に同一となるＯＦスイッチ２（例えば、ＯＦスイッチ＃２）については、ＯＦＣ３は、当該ＯＦスイッチ＃２における旧フローのフローエントリを削除せずに残しておいてもよい。
【０１８９】
あるいは、ＯＦスイッチ＃２における旧フローのフローエントリは、タイムアウトに応じて自動消去されてもよいし、ＯＦＣ３の負荷が閾値を下回った際にＯＦＣ３が削除してもよい。
【０１９０】
（第２変形例）
上述した第１変形例では、削除対象のフロー数が多すぎて始点ＯＦスイッチ２において削除するフローエントリが大量になる場合が有り得る。始点ＯＦスイッチ２にフローエントリの削除処理が集中すると、始点ＯＦスイッチ２の負荷が高くなり過ぎて削除処理に遅延が生じるおそれがある。
【０１９１】
そこで、始点ＯＦスイッチ２で削除するフローエントリが多すぎる場合には、フローエントリの削除処理を、始点ＯＦスイッチ２を含む複数のＯＦスイッチ２（ただし、障害復旧対象のフローが通るＯＦスイッチ２の一部）で分散的に実施してよい。
【０１９２】
例えば図１６に模式的に示すように、削除対象のフローエントリの一部を始点ＯＦスイッチ＃１で削除し、残りのフローエントリの削除を次段のＯＦスイッチ＃２で実施してよい。
【０１９３】
これにより、フローエントリの削除処理を複数のＯＦスイッチ２にて並列化でき、削除処理の高速化を図ることができる。
【０１９４】
図１７に、第２変形例の動作例をフローチャートにて例示する。図１７に例示するように、ＯＦＣ３は、第１変形例と同様に、例えばフローエントリ管理部３２（図８参照）において、障害箇所を通るフロー数Ｋを取得する（処理Ｐ３１）。
【０１９５】
そして、ＯＦＣ３は、第１変形例と同様に、フローエントリ管理部３２において、フロー数Ｋと閾値βとを比較して、Ｋ≧βであるか否かを判定してよい（処理Ｐ３２）。
【０１９６】
閾値判定の結果、Ｋ≧βであれば（処理Ｐ３２でＹＥＳ）、ＯＦＣ３は、フローエントリ管理部３２において、フロー数Ｋと閾値γと比較して、Ｋ≧γであるか否かを更に判定してよい（処理Ｐ３３）。
【０１９７】
なお、「γ」は、γ＜βを満たす自然数である。「γ」は、例示的に、ＯＦＣ３が、γ個のフロー数のフローエントリを連続的に削除する処理を１つのＯＦスイッチ２に対して指示すると、当該ＯＦスイッチ２の負荷が削除処理に応じて（第３）閾値以上の高負荷状態になると判断してよい値に相当する。
【０１９８】
閾値判定の結果、Ｋ＜γであれば（処理Ｐ３３でＮＯ）、ＯＦＣ３は、始点ＯＦスイッチ２に対してフロー数Ｋのフローエントリの削除処理を実行しても始点ＯＦスイッチ２の負荷は高負荷状態にはならないと判断してよい。
【０１９９】
したがって、ＯＦＣ３は、第１変形例と同様に、フローエントリ管理部３２において、始点ＯＦスイッチ＃１に限ってフローエントリの削除対象に決定してよい。当該決定に応じて、ＯＦＣ３は、例えばフローエントリ設定部３７によって、始点ＯＦスイッチ＃１に限って、フローエントリの削除を指示するフロー変更メッセージを送信してよい（処理Ｐ３４）。
【０２００】
一方、処理Ｐ３３での閾値判定の結果、Ｋ≧γであれば（処理Ｐ３３でＹＥＳ）、ＯＦＣ３は、始点ＯＦスイッチ＃１に対してフロー数Ｋのフローエントリの削除処理を実行すると、始点ＯＦスイッチ＃１の負荷が高負荷状態になると判断してよい。
【０２０１】
そのため、ＯＦＣ３は、フローエントリ管理部３２において、障害箇所を通るフローの始点ＯＦスイッチ＃１に加えて、当該フローの次段のＯＦスイッチ＃２をフローエントリの削除対象に決定してよい。
【０２０２】
別言すると、ＯＦＣ３は、始点ＯＦスイッチ＃１に加えて、障害復旧対象のフローにおいて始点ＯＦスイッチ＃１の次段に位置するＯＦスイッチ＃２を、フローエントリの削除を実行する候補ＯＦスイッチ２に加えてよい。
【０２０３】
そして、ＯＦＣ３は、例えばフローエントリ設定部３７によって、ＯＦスイッチ＃１に対して、Ｋ個のフローの一部のフローエントリの削除を指示し、また、ＯＦスイッチ＃２に対して、残りのフローエントリの削除を指示してよい（処理Ｐ３５）。
【０２０４】
これにより、フローエントリの削除を、始点ＯＦスイッチ＃１と次段のＯＦスイッチ＃２とで分散又は分担して実施することができる。
【０２０５】
なお、処理Ｐ３２での閾値判定の結果、Ｋ＜βであった場合（処理Ｐ３２でＮＯ）、ＯＦＣ３は、第１変形例と同様に、障害箇所を通るフローに関連する全てのＯＦスイッチ２を、フローエントリの削除対象に決定してよい。当該決定に応じて、ＯＦＣ３は、例えばフローエントリ設定部３７によって、障害箇所を通るフローに関連する全てのＯＦスイッチ２に対して、フローエントリの削除を指示するフロー変更メッセージを送信してよい（処理Ｐ３６）。
【０２０６】
上述した例では、フローエントリの削除処理を分担するＯＦスイッチ２の数が「２」であるが、始点ＯＦスイッチ＃１を含む３以上（ただし、障害復旧対象のフローが通るＯＦスイッチ２の数未満）のＯＦスイッチ２で削除処理を分担してもよい。
【０２０７】
（第３変形例）
ＯＦＣ３は、「プロアクティブ方法」で障害復旧を実施する場合、障害復旧対象の複数のフローを所定の優先度に従って復旧処理してよい。なお、「プロアクティブ方法」で障害復旧を実施する場合には、障害復旧対象の複数のフローの全てを「プロアクティブ方法」で復旧する場合に限らず、「ハイブリッド方法」において一部のフローを「プロアクティブ方法」で障害復旧する場合が含まれてよい。また、障害復旧の優先度は、例示的に、トラフィック量が多いフローほど優先して復旧処理する優先度であってよい。
【０２０８】
例えば図１８に示すように、ＯＦＣ３は、フローエントリ管理部３２において、フロー毎にトラフィック量の統計情報をフローテーブルにて管理しておいてよい。図１８の例では、フロー（ＩＤ）毎に、単位時間あたりのトラフィック量（バイト）の統計情報がフローテーブルにて管理されている。
【０２０９】
なお、フロー毎のトラフィック量の統計情報をＯＦスイッチ２から取得するために、ＯＦＣ３は、例示的に、統計情報を要求するメッセージをＯＦスイッチ２宛に送信してよい。当該メッセージは、統計情報要求メッセージと称されてよく、例示的に「StatsRequest」と表記されてよい。
【０２１０】
ＯＦスイッチ２は、統計情報要求メッセージの受信に応じて、フロー毎のトラフィック量の統計情報を含めた応答メッセージを生成してＯＦＣ３宛に送信してよい。統計情報要求メッセージに対する応答メッセージは、例示的に、「StatsReply」と表記されてよい。
【０２１１】
ＯＦＣ３は、ＯＦスイッチ２から当該応答メッセージを受信することにより、ＯＦスイッチ２における、フロー毎のトラフィック量の統計情報を取得できる。
【０２１２】
そして、ＯＦＣ３は、例えば障害復旧方法選択部３９において、「プロアクティブ方法」を選択した場合、トラフィック量が設定閾値を超えるフローは、他のフローよりも優先度が高いと判断してよい。
【０２１３】
当該判断に応じて、障害復旧方法選択部３９は、優先度の高いフローを優先的に復旧処理してよい。例えば図１８の例では、障害復旧方法選択部３９は、フローＩＤ＝＃２、フローＩＤ＝＃３、及び、フローＩＤ＝＃１の順に、障害復旧処理を実施してよい。
【０２１４】
このように、トラフィック量の統計情報が多いフローほど優先して復旧処理することで、トラフィック量が多く障害発生の影響が大きいと考えられるフローの復旧時間を短縮化することができる。
【０２１５】
（第４変形例）
既述の実施形態では、図７にて例示したように、ＯＦＣ３において、条件３（Ｘ＋Ｙ＞Ｙ）が満たされる場合には、一律に「ハイブリッド方法」が選択される例について説明した。
【０２１６】
第４変形例では、図１９に例示するように、条件３が満たされる場合に、更に条件３−１及び３−２によって、「ハイブリッド方法」及び「リアクティブ方法」のいずれかが選択される例について説明する。
【０２１７】
条件３−１及び３−２は、例示的に、「障害復旧に高速性が求められるか否か」を示した条件である。条件３−１及び３−２を示す情報は、例示的に、ＯＦＣ３の記憶部３１１に記憶されてよい。
【０２１８】
例えば、「障害復旧に高速性が求められる」条件３−１が満たされる場合には、障害復旧方法選択部３９（図８参照）は、「ハイブリッド方法」を選択してよい。「ハイブリッド方法」では、障害復旧対象の複数フローの一部を、高速復旧動作が可能な「プロアクティブ方法」にて復旧処理するから、障害復旧対象の複数フローの全部を「リアクティブ方法」で復旧処理するよりも高速な復旧が可能である。
【０２１９】
これに対し、「障害復旧に高速性が求められない」条件３−２が満たされる場合、障害復旧方法選択部３９は、障害復旧対象のフローの全部について低負荷動作が可能な「リアクティブ方法」を復旧処理方法に選択してよい。
【０２２０】
以下、図２０を参照して、第４変形例のＯＦＣ３の動作例について説明する。図２０において、処理Ｐ４１〜Ｐ４７及びＰ１９は、図１０にて説明した処理Ｐ１１〜Ｐ１７及びＰ１９とそれぞれ同一若しくは同様でよい。
【０２２１】
例えば、ＯＦＣ３は、障害復旧方法選択部３９において、条件１（Ｙ≧Ａ）が満たされれば（処理Ｐ４４でＹＥＳ）、低負荷動作が可能な「リアクティブ方法」を選択してよい（処理Ｐ４５）。
【０２２２】
条件１が満たされず条件２（Ｘ＋Ｙ≦Ａ）が満たされれば（処理Ｐ４４でＮＯ及び処理Ｐ４６でＹＥＳ）、障害復旧方法選択部３９は、高速復旧動作が可能な「プロアクティブ方法」を選択してよい（処理Ｐ４７）。
【０２２３】
Ｘ＋Ｙ＞Ａであるために条件２が満たされなければ（処理Ｐ４６でＮＯ）、障害復旧方法選択部３９は、障害復旧に高速性が求められるか否か、別言すると、条件３−１又は条件３−２が満たされるか、を更に判定してよい（処理Ｐ４８）。
【０２２４】
障害復旧に高速性が求められる場合（処理Ｐ４８でＹＥＳ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローについて「ハイブリッド方法」を障害復旧方法に選択してよい（処理Ｐ４９）。
【０２２５】
例えば、障害復旧方法選択部３９は、Ｎ個のフローのうちのＭ個のフローについては、高速復旧動作が可能な「プロアクティブ方法」を選択し、残りの（Ｎ−Ｍ）個のフローについては、低負荷動作が可能な「リアクティブ方法」を選択してよい。
【０２２６】
一方、障害復旧に高速性が求められない場合（処理Ｐ４８でＮＯ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローの全部に対して「リアクティブ方法」を障害復旧方法に選択してよい（処理Ｐ５０）。
【０２２７】
これにより、Ｘ＋Ｙ＞Ａが満たされてＯＦＣ３が高負荷状態である場合は、障害復旧対象の全フローが「リアクティブ方法」で復旧処理される。この場合、「ハイブリッド方法」に比べて、障害復旧に時間はかかるが、ＯＦＣ３の負荷を低く抑えることができる。
【０２２８】
（第５変形例）
次に、図２１及び図２２を参照して、既述の実施形態の第５変形例について説明する。図２１は、図７及び図１９と同様に、ＯＦＣ３（例えば、障害復旧方法選択部３９）における障害復旧方法の選択条件の一例を示す図である。
【０２２９】
第５変形例では、「リアクティブ方法」を選択すると、ＯＦＣ３においてパケットインの受信処理に応じた負荷が発生するため、当該負荷（便宜的に「パケットイン処理負荷」と称してよい。）を障害復旧方法の選択条件に考慮してよい。
【０２３０】
例えば、ＯＦＣ３が高負荷状態であると判断してよい既述の閾値Ａ［％］よりも低い閾値Ｂ［％］をＯＦＣ３において設定しておく。閾値Ｂは、例示的に、閾値Ａに対してパケットイン処理負荷分のマージンを考慮して設定されてよい。閾値Ｂは、ＯＦＣ３の記憶部３１１に記憶されてよい。
【０２３１】
ＯＦＣ３は、例えば障害復旧方法選択部３９において、Ｙ≧Ｂ（条件１）が満たされれば「リアクティブ方法」、Ｘ＋Ｙ≦Ｂ（条件２）が満たされれば「プロアクティブ方法」、Ｘ＋Ｙ＞Ｂ（条件３）が満たされれば「ハイブリッド方法」をそれぞれ選択してよい。
【０２３２】
「ハイブリッド方法」では、例示的に、障害復旧対象のＮ個のフローのうち、（Ｍ−α）個のフローについては「プロアクティブ方法」を選択し、残りの（Ｎ−Ｍ＋α）個のフローについては「リアクティブ方法」を選択してよい。「α」は、例示的に、Ｘ（Ｍ−α）＋Ｙ＝Ｂ［％］を満足するフロー数を表す。
【０２３３】
以下、図２２のフローチャートを参照して、第５変形例のＯＦＣ３の動作例について説明する。図２２において、処理Ｐ５１〜Ｐ５３及びＰ１９は、それぞれ、図１０にて説明した処理Ｐ１１〜Ｐ１３及びＰ１９と同一若しくは同様でよい。
【０２３４】
ＯＦＣ３は、例えば障害復旧方法選択部３９において、ＣＰＵ負荷推定値Ｘと現在のＣＰＵ使用率Ｙとを取得すると、まず、Ｙ≧Ｂ（条件１）が満たされるか否かを判定してよい（処理Ｐ５４）。
【０２３５】
Ｙ≧Ｂ（条件１）が満たされれば（処理Ｐ５４でＹＥＳ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローの全部について、低負荷動作が可能な「リアクティブ方法」を選択してよい（処理Ｐ５５）。
【０２３６】
一方、Ｙ≧Ｂ（条件１）が満たされなければ（処理Ｐ５４でＮＯ）、別言すると、Ｙ＜Ｂであれば、障害復旧方法選択部３９は、Ｘ＋Ｙ≦Ｂ（条件２）が満たされるか否かを更に判定してよい（処理Ｐ５６）。
【０２３７】
Ｘ＋Ｙ≦Ｂ（条件２）が満たされれば（処理Ｐ５６でＹＥＳ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローの全部について、高速復旧動作が可能な「プロアクティブ方法」を選択してよい（処理Ｐ５７）。
【０２３８】
Ｘ＋Ｙ≦Ｂ（条件２）が満たされなければ（処理Ｐ５６でＮＯ）、別言すると、Ｘ＋Ｙ＞Ｂであれば、障害復旧方法選択部３９は、「ハイブリッド方法」を選択してよい（処理Ｐ５８）。例えば、障害復旧方法選択部３９は、既述のとおり、（Ｍ−α）個のフローについては「プロアクティブ方法」を選択し、残りの（Ｎ−Ｍ＋α）個のフローについては「リアクティブ方法」を選択してよい。
【０２３９】
以上のように、第５変形例によれば、ＯＦＣ３のパケットイン処理負荷を障害復旧方法の選択条件に加えるので、「リアクティブ方法」を障害復旧方法に選んでも、パケットイン処理負荷によってＯＦＣ３の負荷が高負荷状態に陥ることを抑制できる。
【０２４０】
（第６変形例）
上述した第５変形例の「パケットイン処理負荷を障害復旧方法の選択条件に加える」態様は、第４変形例（例えば図２０）に適用してもよい。例えば、障害復旧方法選択部３９は、Ｘ＋Ｙ≧Ｂが満たされる場合に、障害復旧に高速性が求められるか否かによって、「ハイブリッド方法」及び「リアクティブ方法」のいずれかを選択してよい。
【０２４１】
図２３に、第６変形例の動作例をフローチャートにて例示する。図２３と図２０との比較で容易に理解できるように、図２３は、図２０の処理Ｐ４４及び処理Ｐ４６での閾値Ａを用いた判定処理を、処理Ｐ６４及びＰ６６において閾値Ｂを用いた判定処理に置き換えたフローチャートに相当する。
【０２４２】
なお、図２３の処理Ｐ６１〜Ｐ６３、Ｐ６５、Ｐ６７、及び、Ｐ６８〜Ｐ７０は、それぞれ、図２０の処理Ｐ４１〜Ｐ４３、Ｐ４５、Ｐ４７、及び、Ｐ４８〜Ｐ５０と同一若しくは同様でよい。
【０２４３】
例えば、ＯＦＣ３は、障害復旧方法選択部３９において、Ｙ≧Ｂが満たされれば（処理Ｐ６４でＹＥＳ）、低負荷動作が可能な「リアクティブ方法」を選択してよい（処理Ｐ６５）。
【０２４４】
Ｙ≧Ｂが満たされずＸ＋Ｙ＜Ｂが満たされれば（処理Ｐ６４でＮＯ及び処理Ｐ６６でＹＥＳ）、障害復旧方法選択部３９は、高速復旧動作が可能な「プロアクティブ方法」を選択してよい（処理Ｐ６７）。
【０２４５】
Ｘ＋Ｙ≧Ａであれば（処理Ｐ６６でＮＯ）、障害復旧方法選択部３９は、障害復旧に高速性が求められるか否かを更に判定してよい（処理Ｐ６８）。
【０２４６】
障害復旧に高速性が求められる場合（処理Ｐ６８でＹＥＳ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローについて「ハイブリッド方法」を選択してよい（処理Ｐ６９）。
【０２４７】
例えば、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローのうち、（Ｍ−α）個のフローについては「プロアクティブ方法」を選択し、残りの（Ｎ−Ｍ＋α）個のフローについては「リアクティブ方法」を選択してよい。
【０２４８】
一方、障害復旧に高速性が求められない場合（処理Ｐ６８でＮＯ）、障害復旧方法選択部３９は、障害復旧対象のＮ個のフローの全部に対して「リアクティブ方法」を障害復旧方法に選択してよい（処理Ｐ７０）。
【０２４９】
以上のように、第６変形例によれば、第４変形例と同様の作用効果を得ることができるほか、第５変形例と同様に、「リアクティブ方法」を障害復旧方法に選んでも、パケットイン処理負荷によってＯＦＣ３の負荷が高負荷状態に陥ることを抑制できる。
【符号の説明】
【０２５０】
１  通信システム（ネットワーク）
２−１〜２−ｎ  ネットワークスイッチ
２１  ＯＦプロトコル処理部
２２  フローテーブル
２３  テーブル検索部
２４  アクション処理部
２０１  ＣＰＵ
２０２  ＲＡＭ
２０３  ＲＯＭ
２０５  ネットワークインタフェース（ＮＷ−ＩＦ）
２１０  通信バス
２１１  記憶部
３  コントローラ
３１  経路計算部
３２  フローエントリ管理部
４−１〜４−ｍ  ホストマシン
６  制御ネットワーク
３３  ＯＦスイッチ障害検出部
３４  トポロジ更新部
３５  トポロジ情報データベース（ＤＢ）
３６  パケットイン受信部
３７  フローエントリ設定部
３８  ＣＰＵ使用率モニタ
３９  障害復旧方法選択部
８０  記録媒体
３０１  ＣＰＵ
３０２  ＲＡＭ
３０３  ＲＯＭ
３０４  ＨＤＤ
３０５  ネットワークインタフェース（ＮＷ−ＩＦ）
３０６入力インタフェース（ＩＦ）
３０７  出力ＩＦ
３０８  入出力ＩＦ
３０９  ドライブ装置
３１０  通信バス
３１１  記憶部
５０  入力装置
６０  表示装置
７０  半導体メモリ
【図１】
2017059885.tif 000003
【図２】
2017059885.tif 000004
【図３】
2017059885.tif 000005
【図４】
2017059885.tif 000006
【図５】
2017059885.tif 000007
【図６】
2017059885.tif 000008
【図７】
2017059885.tif 000009
【図８】
2017059885.tif 000010
【図９】
2017059885.tif 000011
【図１０】
2017059885.tif 000012
【図１１】
2017059885.tif 000013
【図１２】
2017059885.tif 000014
【図１３】
2017059885.tif 000015
【図１４】
2017059885.tif 000016
【図１５】
2017059885.tif 000017
【図１６】
2017059885.tif 000018
【図１７】
2017059885.tif 000019
【図１８】
2017059885.tif 000020
【図１９】
2017059885.tif 000021
【図２０】
2017059885.tif 000022
【図２１】
2017059885.tif 000023
【図２２】
2017059885.tif 000024
【図２３】
2017059885.tif 000025