(57)【特許請求の範囲】
【請求項１】
それぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示する複数のコントローラと、
前記優先度に応じて前記フローエントリの設定許否を判定し、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うスイッチと
を具備し、
前記優先度は、スイッチに対して優先的にフローエントリを設定するコントローラを決める指標であり、
前記複数のコントローラのそれぞれは、前記通信経路上において、パケットデータの宛先装置側のスイッチから送信元装置のスイッチに対して順にフローエントリの設定を指示し、
前記スイッチは、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記設定されたフローエントリを上書き設定する
コンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムにおいて、
前記スイッチは、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと前記複数のコントローラのそれぞれに個別に設定する優先度とを、前記複数のコントローラのそれぞれに通知し、
前記複数のコントローラのそれぞれは、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに対して設定を指示する
コンピュータシステム。
【請求項３】
それぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示する複数のコントローラと、
前記優先度に応じて前記フローエントリの設定許否を判定し、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うスイッチと
を具備し、
前記優先度は、スイッチに対して優先的にフローエントリを設定するコントローラを決める指標であり、
前記スイッチは、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと前記複数のコントローラのそれぞれに個別に設定する優先度とを、前記複数のコントローラのそれぞれに通知し、
前記複数のコントローラのそれぞれは、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに対して設定を指示する
コンピュータシステム。
【請求項４】
請求項１から３のいずれか１項に記載のコンピュータシステムにおいて、
前記スイッチは、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記設定されたフローエントリを上書き設定する
コンピュータシステム。
【請求項５】
請求項１から４のいずれか１項に記載のコンピュータシステムにおいて、
前記スイッチは、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より低い場合、前記送信されたフローエントリの設定を拒否する
コンピュータシステム。
【請求項６】
請求項１から５のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のコントローラのそれぞれに設定される優先度は、前記複数のコントローラのそれぞれの障害発生率に応じて動的に変更される
コンピュータシステム。
【請求項７】
請求項１から６のいずれか１項に記載のコンピュータシステムで利用されるコントローラ。
【請求項８】
請求項１から６のいずれか１項に記載のコンピュータシステムで利用されるスイッチ。
【請求項９】
複数のコントローラのそれぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示するステップと、
前記スイッチが、前記優先度に応じて前記フローエントリの設定許否を判定するステップと、
前記スイッチが、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うステップと、
前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、前記スイッチに設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記スイッチに設定されたフローエントリを上書き設定するステップと
を具備し、
前記優先度は、スイッチに対して優先的にフローエントリを設定するコントローラを決める指標であり、
前記フローエントリの設定指示は、前記通信経路上において、パケットデータの宛先装置側のスイッチから送信元装置のスイッチに対して順に行われる
通信方法。
【請求項１０】
請求項９に記載の通信方法において、
前記フローエントリの設定を指示するステップは、
前記スイッチが、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと前記複数のコントローラのそれぞれに個別に設定する優先度とを、前記複数のコントローラのそれぞれに通知するステップと、
前記複数のコントローラのそれぞれが、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに対して設定を指示するステップと、
前記スイッチが、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記設定されたフローエントリを上書き設定するステップと
を備える
通信方法。
【請求項１１】
複数のコントローラのそれぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示するステップと、
前記スイッチが、前記優先度に応じて前記フローエントリの設定許否を判定するステップと、
前記スイッチが、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うステップと
を具備し、
前記優先度は、スイッチに対して優先的にフローエントリを設定するコントローラを決める指標であり、
前記フローエントリの設定を指示するステップは、
前記スイッチが、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと前記複数のコントローラのそれぞれに個別に設定する優先度とを、前記複数のコントローラのそれぞれに通知するステップと、
前記複数のコントローラのそれぞれが、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに対して設定を指示するステップと、
前記スイッチが、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記設定されたフローエントリを上書き設定するステップと
を備える
通信方法。
【請求項１２】
請求項９から１１のいずれか１項に記載の通信方法において、
前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、前記スイッチに設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記スイッチに設定されたフローエントリを上書き設定するステップを更に具備する
通信方法。
【請求項１３】
請求項９から１２のいずれか１項に記載の通信方法において、
前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、前記スイッチに設定されたフローエントリの優先度より低い場合、前記送信されたフローエントリの設定を拒否するステップを更に具備する
通信方法。
【請求項１４】
請求項９から１３のいずれか１項に記載の通信方法において、
前記複数のコントローラのそれぞれに設定される優先度は、前記複数のコントローラのそれぞれの障害発生率に応じて動的に変更される
通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム、及び通信方法に関し、特に、オープンフロー（プログラマブルフロー）技術を利用したコンピュータシステムの冗長化技術、及び通信方法に関する。
【背景技術】
【０００２】
従来、パケットの送信元から送信先への経路の決定とパケット転送処理は、経路上の複数のスイッチが行っていた。近年、データセンターといった大規模ネットワークにおいては、故障による機器の停止や規模拡大のための機器の新規追加により、ネットワーク構成の変化が常に発生している。このため、ネットワークの構成の変化に即応し適切な経路を決定するという柔軟性が必要となってきた。しかし、スイッチにおける経路決定処理のプログラムは、外部から変更することができないため、ネットワーク全体を一元的に制御及び管理することはできなかった。
【０００３】
一方、コンピュータネットワークにおいて、各スイッチの転送動作等を外部のコントローラによって一元的に制御する技術（オープンフロー）が、ＯｐｅｎＦｌｏｗ  Ｃｏｎｓｏｒｔｉｕｍによって提案されている（非特許文献１参照）。この技術に対応したネットワークスイッチ（以下、プログラマブルフロースイッチ（ＰＦＳ）と称す）は、プロトコル種別やポート番号等の詳細な情報をフローテーブルに保持し、フローの制御と統計情報の採取を行うことができる。
【０００４】
図１を参照して、オープンフローを利用したコンピュータシステムの構成及び動作を説明する。図１を参照して、本発明の関連技術によるコンピュータシステムは、プログラマブルフローコントローラ１００（以下、ＰＦＣ１００と称す）、複数のプログラマブルスイッチ１０２−１〜１０２−ｎ（以下、ＰＦＳ１０２−１〜１０２−ｎと称す）を有するスイッチ群２００、複数のホストコンピュータ１０３−１〜１０３−ｉ（以下、ホスト１０３−１〜１０３−ｉと称す）を有するホスト群３００を具備する。ただし、ｎ、ｉは２以上の自然数である。以下、ＰＦＳ１０２−１〜１０２−ｎを区別せずに総称する場合はＰＦＳ１０２と称し、ホスト１０３−１〜１０３−ｉを区別せずに総称する場合はホスト１０３と称して説明する。
【０００５】
ＰＦＣ１００は、ホスト１０３間の通信経路の設定や、経路上におけるＰＦＳ１０２に対する転送動作（中継動作）等の設定を行う。この際、ＰＦＣ１００は、ＰＦＳ１０２が保持するフローテーブルに、フロー（パケットデータ）を特定するルールと、当該フローに対する動作を規定するアクションとを対応付けたフローエントリを設定する。通信経路上のＰＦＳ１０２は、ＰＦＣ１００によって設定されたフローエントリに従って受信パケットデータの転送先を決定し、転送処理を行う。これにより、ホスト１０３は、ＰＦＣ１００によって設定された通信経路を利用して他のホスト１０３との間でパケットデータの送受信が可能となる。すなわち、オープンフローを利用したコンピュータシステムでは、通信経路を設定するＰＦＣ１００と、転送処理を行うＰＦＳ１０２とを分離され、システム全体の通信を一元的に制御及び管理することが可能となる。
【０００６】
図１を参照して、ホスト１０３−１からホスト１０３−ｉへパケット送信を行う場合、ＰＦＳ１０２−１はホスト１０３−１から受け取ったパケット内にある送信先情報（ヘッダ情報）を参照し、ＰＦＳ１０２−１内部で保持しているフローテーブルから当該ヘッダ情報に適合するエントリを探す。フローテーブルに設定されるエントリの内容については、例えば非特許文献１で規定されている。
【０００７】
ＰＦＳ１０２−１は、受信パケットデータについてのエントリがフローテーブルに記載されていない場合、当該パケットデータ（以下、ファーストパケットと称す）、又はファーストパケットのヘッダ情報をＰＦＣ１０１に転送する。ＰＦＳ１０２−１からファーストパケットを受け取ったＰＦＣ１０１はパケット内に含まれている送信元ホストや送信先ホストという情報を元に経路４００を決定する。
【０００８】
ＰＦＣ１０１は、経路４００上の全てのＰＦＳ１０２に対して、パケットの転送先を規定するフローエントリの設定を指示する（フローテーブル更新指示を発行）。経路４００上のＰＦＳ１０２は、フローテーブル更新指示に応じて、自身で管理しているフローテーブルを更新する。この後ＰＦＳ１０２は、更新したフローテーブルに従い、パケットの転送を開始することで、ＰＦＣ１０１が決定した経路４００を経由して、宛先のホスト１０３−ｉへパケットが到達するようになる。
【０００９】
一方、スイッチによって転送経路が設定されるシステムにおいて、多重化された経路から、優先度に従って適切な経路を選択利用する技術が、例えば、特開２００６−３３３１３５（特許文献１参照）、特開２０００−３２４１５４（特許文献２参照）、及び特開平４−２１５３４９（特許文献３参照）に記載されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００６−３３３１３５
【特許文献２】特開２０００−３２４１５４
【特許文献３】特開平４−２１５３４９
【非特許文献】
【００１１】
【非特許文献１】ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖｅｒｓｉｏｎ  ０．９．０  （Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ９８）    Ｊｕｌｙ  ２０，  ２００９
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ＰＦＣ１００で何らかの障害が発生した場合、ＰＦＣ１００は、経路上のＰＦＳ１０２に対するフローテーブルの更新を指示できない。この場合、ファーストパケットを受信したＰＦＳ１０２は自ら設定したタイムアウト時間までＰＦＣ１０１からのフローテーブルの更新指示を待ち続けてしまい、その間ホスト１０３間のパケット通信を行うことができない。又、ＰＦＣ１００が障害から復旧しない限り、ファーストパケットに対応する転送制御を行うことができない。
【００１３】
このため、耐障害性の観点からＰＦＣ１００を複数用意することが考えられるが、複数のＰＦＣを利用した通信経路の構築（各ＰＦＳに対するフローテーブルの更新）の方法は、未だ確立されていない。このため、オープンフロー技術を利用したコンピュータシステムでは、ＰＦＣに発生した障害に対する耐性が低いという問題がある。
【００１４】
従って、本発明による目的は、オープンフロー技術を利用したコンピュータシステムの耐障害性を向上させることにある。
【００１５】
又、本発明による他の目的は、プログラマブルフローコントローラに障害が発生した場合でも、ファーストパケットに応じた通信経路の構築とパケットデータの転送処理を早期に実行することにある。
【課題を解決するための手段】
【００１６】
上記の課題を解決するために、本発明は、以下に述べられる手段を採用する。その手段を構成する技術的事項の記述には、［特許請求の範囲］の記載と［発明を実施するための形態］の記載との対応関係を明らかにするために、［発明を実施するための形態］で使用される番号・符号が付加されている。ただし、付加された番号・符号は、［特許請求の範囲］に記載されている発明の技術的範囲を限定的に解釈するために用いてはならない。
【００１７】
本発明によるコンピュータシステムは、それぞれが、通信経路を算出し通信経路上のスイッチ（２）に対して、優先度（１４７）を付加したフローエントリの設定を指示する複数のコントローラ（１）と、優先度（１４７）に応じてフローエントリの設定許否を判定し、自身に設定されたフローエントリに適合する受信パケットに対し、自身設定されたフローエントリに従った中継動作を行うスイッチ（２）とを具備する。
【００１８】
又、本発明による通信方法は、複数のコントローラ（１）のそれぞれが、通信経路を算出し、通信経路上のスイッチ（２）に対して、優先度（１４７）を付加したフローエントリの設定を指示するステップと、スイッチ（２）が、優先度（１４７）に応じてフローエントリの設定許否を判定するステップと、スイッチ（２）が、自身に設定されたフローエントリに適合する受信パケットに対し、自身に設定されたフローエントリに従った中継動作を行うステップとを具備する。
【発明の効果】
【００１９】
本発明によれば、オープンフロー技術を利用したコンピュータシステムの耐障害性を向上させることができる。
【００２０】
又、プログラマブルフローコントローラに障害が発生した場合でも、ファーストパケットに応じた通信経路の構築とパケットデータの転送処理を早期に実行することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、従来技術によるコンピュータシステムの構成の一例を示す図である。
【図２】図２は、本発明によるコンピュータシステムの実施の形態における構成を示す図である。
【図３】図３は、本発明によるプログラマブルフローコントローラの実施の形態における構成を示す図である。
【図４】図４は、本発明によるプログラマブルフローコントローラが保持するフローテーブルの一例を示す図である。
【図５】図５は、本発明によるプログラマブルフローコントローラが保持するトポロジ情報の一例を示す図である。
【図６】図６は、本発明によるプログラマブルフローコントローラが保持する通信経路情報の一例を示す図である。
【図７】図７は、本発明によるプログラマブルフロースイッチの実施の形態における構成を示す図である。
【図８】図８は、本発明によるプログラマブルフロースイッチが保持するフローテーブルの一例を示す図である。
【図９】図９は、本発明に係るプログラマブルフロー制御を説明するための図である。
【図１０】図１０は、本発明によるコンピュータシステムの実施の形態における通信経路の構築処理（フローテーブル更新処理）及びパケット転送処理の動作を示すシーケンス図である。
【図１１】図１１は、本発明によるプログラマブルフロースイッチにおけるフローエントリ設定処理（フローテーブル更新処理）の動作を示すフロー図である。
【図１２】図１２（ａ）、（ｂ）は、本発明によるプログラマブルフロースイッチにおいて更新されたフローテーブルの一例を示す図である。
【図１３】図１３は、本発明による複数のプログラマブルフローコントローラによって算出された通信経路の一例を示す図である。
【図１４Ａ】図１４Ａは、複数のプログラマブルフローコントローラに障害が発生した場合の、通信経路の構築処理及びパケット転送処理の一例を示す図である。
【図１４Ｂ】図１４Ｂは、複数のプログラマブルフローコントローラに障害が発生した場合の、通信経路の構築処理及びパケット転送処理の一例を示す図である。
【図１５Ａ】図１５Ａは、複数のプログラマブルフローコントローラに障害が発生した場合の、通信経路の構築処理及びパケット転送処理の他の一例を示す図である。
【図１５Ｂ】図１５Ｂは、複数のプログラマブルフローコントローラに障害が発生した場合の、通信経路の構築処理及びパケット転送処理の他の一例を示す図である。
【図１６】図１６は、本発明によるプログラマブルフローコントローラの障害復旧後の通信経路の構築処理の動作を示すフロー図である。
【発明を実施するための形態】
【００２２】
以下、添付図面を参照しながら本発明の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示す。
【００２３】
（コンピュータシステムの構成）
図２を参照して、本発明によるコンピュータシステムの構成を説明する。図２は、本発明によるコンピュータシステムの実施の形態における構成を示す図である。本発明によるコンピュータシステムは、オープンフローを利用して通信経路の構築及びパケットデータの転送制御を行う。図２を参照して、本発明によるコンピュータシステムは、プログラマブルフローコントローラ１−１〜１−ｍ（以下、ＰＦＣ１−１〜１−ｍと称す）、複数のプログラマブルスイッチ２−１〜２−ｎ（以下、ＰＦＳ２−１〜２−ｎと称す）を有するスイッチ群２０、複数のホストコンピュータ３−１〜３−ｉ（以下、ホスト３−１〜３−ｉと称す）を有するホスト群３０を具備する。ただし、ｍ、ｎ、ｉは２以上の自然数である。又、ＰＦＣ１−１〜１−ｍを区別せずに総称する場合はＰＦＣ１と称し、ＰＦＳ２−１〜２−ｎを区別せずに総称する場合はＰＦＳ２と称し、ホスト３−１〜３−ｉを区別せずに総称する場合はホスト３と称して説明する。
【００２４】
ホスト３は、図示しないＣＰＵ、主記憶装置、及び外部記憶装置を備えるコンピュータ装置であり、外部記憶装置に格納されたプログラムを実行することで、他のホスト３との間で通信を行う。ホスト３間の通信は、スイッチ群２０を介して行われる。ホスト３は、実行するプログラムに応じて、Ｗｅｂサーバ、ファイルサーバ、アプリケーションサーバ、あるいはクライアント端末等に例示される機能を実現する。例えば、ホスト３がＷｅｂサーバとして機能する場合、他のホスト３（例示：クライアント端末）の要求に従い、記憶装置（図示なし）内のＨＴＭＬ文書や画像データを他のホスト３（例示：クライアント端末）に転送する。
【００２５】
ＰＦＣ１は、オープンフロー技術により、システム内におけるパケット転送に係る通信経路パケット転送処理を制御するスイッチ制御部１１を備える。オープンフロー技術とは、コントローラ（ここではＰＦＣ１）が、ルーティングポリシー（フローエントリ：フロー＋アクション）に従い、マルチレイヤ及びフロー単位の経路情報をＰＦＳ２に設定し、経路制御やノード制御を行う技術を示す（詳細は、非特許文献１を参照）。これにより、経路制御機能がルータやスイッチから分離され、コントローラによる集中制御によって最適なルーティング、トラフィック管理が可能となる。オープンフロー技術が適用されるＰＦＳ２は、従来のルータやスイッチのようにパケットやフレームの単位ではなく、ＥＮＤ２ＥＮＤのフローとして通信を取り扱う。
【００２６】
ＰＦＣ１は、ＰＦＳ２が保持するフローテーブル２３にフローエントリ（ルール＋アクション）を設定することで当該スイッチやノードの動作（例えばパケットデータの中継動作）を制御する。本発明によるＰＦＣ１は、設定経路（設定コントローラ）の優先度を加えたフローエントリを、経路上のＰＦＳ２に設定する。
【００２７】
図３を参照して、ＰＦＣ１の構成の詳細を説明する。図３は、本発明によるＰＦＣ１の構成を示す図である。ＰＦＣ１は、ＣＰＵ及び記憶装置を備えるコンピュータによって実現されることが好適である。ＰＦＣ１では、図示しないＣＰＵが記憶装置に格納されたプログラムを実行することで、図３に示すスイッチ制御部１１、フロー管理部１２、フロー生成部１３の各機能が実現される。又、ＰＦＣ１は、それぞれが図示しない記憶装置に格納されたフローテーブル１４、トポロジ情報１５、通信経路情報１６を備える。
【００２８】
スイッチ制御部１１は、フローテーブル１４に従ってＰＦＳ２毎にフローエントリ（ルール＋アクション）の設定又は削除を行う。この際、スイッチ制御部１１は、フローエントリ（ルール＋アクション情報）に優先度を対応付けてＰＦＳ２のフローテーブル２３に設定する。又、ＰＦＳ２に対するフローテーブルの更新（フローエントリの設定又は削除）は、フローの宛先装置側から送信元装置に対して順に行われる。ＰＦＳ２は、設定されたフローエントリを参照し、受信パケットのヘッダ情報に応じたルールに対応するアクション（例えばパケットデータの中継や破棄）を実行する。ルール、アクション、及び優先度の詳細は後述する。
【００２９】
図４は、ＰＦＣ１が保持するフローテーブル１４の構成の一例を示す図である。図４を参照して、フローテーブル１４には、フローエントリを特定するためのフロー識別子１４１、当該フローエントリの設定対象（ＰＦＳ２）を識別する識別子（対象装置１４２）、経路情報１４３、ルール１４４、アクション情報１４５、設定情報１４６、優先度１４７が対応付けられて設定される。フローテーブル１４には、ＰＦＣ１の制御対象となる全てのＰＦＳ２に対して生成されたフローエントリ（ルール１４４＋アクション情報１４５）が設定される。又、フローテーブル１４には、フロー毎のＱｏＳや暗号化に関する情報など、通信の扱い方が定義されても構わない。
【００３０】
ルール１４４には、例えば、ＴＣＰ／ＩＰのパケットデータにおけるヘッダ情報に含まれる、ＯＳＩ（Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）参照モデルのレイヤ１からレイヤ４のアドレスや識別子の組み合わせが規定される。例えば、図９に示すレイヤ１の物理ポート、レイヤ２のＭＡＣアドレス、レイヤ３のＩＰアドレス、レイヤ４のポート番号、ＶＬＡＮタグ（ＶＬＡＮ  ｉｄ）のそれぞれの組み合わせがルール１４４として設定される。尚、ＶＬＡＮタグには、優先順位（ＶＬＡＮ  Ｐｒｉｏｒｉｔｙ）が付与されていても良い。
【００３１】
ここで、ルール１４４に設定されるポート番号等の識別子やアドレス等は、所定の範囲で設定されても構わない。又、宛先や送信元のアドレス等を区別してルール１４４として設定されルことが好ましい。例えば、ＭＡＣ宛先アドレスの範囲や、接続先のアプリケーションを特定する宛先ポート番号の範囲、接続元のアプリケーションを特定する送信元ポート番号の範囲がルール１４４として設定される。更に、データ転送プロトコルを特定する識別子をルール１４４として設定してもよい。
【００３２】
アクション情報１４５には、例えばＴＣＰ／ＩＰのパケットデータを処理する方法が規定される。例えば、受信パケットデータを中継するか否かを示す情報や、中継する場合はその送信先が設定される。又、アクション情報１４５には、パケットデータの複製や、破棄することを指示する情報が設定されてもよい。
【００３３】
経路情報１４３は、フローエントリ（ルール１４４＋アクション情報１４５）を適用する経路を特定する情報である。これは、後述する通信経路情報１６に対応付けられた識別子である。
【００３４】
設定情報１４６は、フローエントリ（ルール１４４＋アクション情報１４５）が現在、通信経路上のＰＦＳ２に設定されているか否かを示す情報（「設定済み」又は「未設定」）を含む。設定情報１４６は、対象装置１４２や経路情報１４３に対応付けられているため、通信経路にフローエントリが設定されているか否かを確認できるとともに、通信経路上のＰＦＳ２毎にフローエントリが設定されているか否かを確認することができる。
【００３５】
本発明によるフローテーブル１４には、フローエントリ毎に対応付けられた優先度１４７が設定される。優先度１４７は、予めユーザによって設定されても良いし、ファーストパケットを受信したＰＦＳ２によって指定（設定）されても良い。又、優先度１４７は、ＰＦＣ１毎に決められた値が固定的に設定されても良いし、状況に応じて変更されても良い。例えば、ＰＦＳ２は、ファーストパケットの受信の都度、ＰＦＣ１−１〜１−ｍのそれぞれに指定する優先度１４７を変更してもよい。あるいは、ＰＦＣ１−１〜１−ｍに対し、優先度１４７として１からｍが設定される場合（“ｍ”が最も低い優先度）、障害発生回数が多いＰＦＣ１に対して低い値“ｍ”の優先度１４７を設定し、障害の発生率が低くなった場合、設定する優先度１４７を上位に上げる。ただし、状況に応じて優先度１４７を変更する場合、全てのＰＦＣ１−１〜１−ｍを監視し、ユーザによって優先度１４７が設定可能な統合装置をシステム内に設けることが好ましい。
【００３６】
又、ファーストパケットを受信したＰＦＳ２がＰＦＣ１に優先度１４７を設定する場合、当該ＰＦＳ２は、自身を主として管理するＰＦＣ１（メインコントローラ）に高い優先度１４７を付与し、予備として自身を管理するＰＦＣ１（サブコントローラ）に低い優先度を設定することが好ましい。例えば、サブコントローラとして、他のスイッチ群を主に管理するＯＦＣ１が選択される。
【００３７】
フロー管理部１２は、フロー生成部１３によって生成されたフロー（ルール１４４＋アクション情報１４５）にフロー識別子１４１をつけて記憶装置に記録する。この際、フローエントリを適用する通信経路の識別子（経路情報１４３）やフローエントリを適用するＰＦＳ２の識別子（対象装置１４２）、及び優先度１４７が、フローエントリ（ルール１４４＋アクション情報１４５）に付されて記録される。ここで、優先度１４７が、ファーストパケットとともにＰＦＳ２から通知された場合、フロー管理部１２は、この優先度１４７を、フロー生成部１３によって生成されたフローエントリに対応付けてフローテーブル１４に設定する。
【００３８】
又、フロー管理部１２は、フローテーブル１４を参照して、ファーストパケットのヘッダ情報に対応するフローエントリ（ルール１４４＋アクション情報１４５）及び、これに対応付けられた優先度１４７を抽出し、スイッチ制御部１１に通知する。スイッチ制御部１１は、通知されたフローエントリ（ルール１４４＋アクション情報１４５）及び優先度１４７を、当該フローエントリに対応付けられた対象装置１４２（ＰＦＳ２）に設定する。
【００３９】
フロー生成部１３は、ＰＦＳ２から通知されたファーストパケットのヘッダ情報から通信経路を算出し、当該通信経路上のＰＦＳ２に設定するフローエントリ（ルール１４４＋アクション情報１４５）を生成する。詳細には、フロー生成部１３は、ファーストパケットのヘッダ情報から、送信元のホスト３と宛先のホスト３を特定し、トポロジ情報１５を用いて通信経路を算出し、算出結果を通信経路情報１６として記憶装置に記録する。ここでは、通信経路の端点となるホスト３と、通信経路上のＰＦＳ２及びそれぞれの接続関係が通信経路情報１６として設定される。又、フロー生成部１３は、通信経路情報１６に基づいて通信経路上のＰＦＳ２に設定するフローエントリ（ルール１４４＋アクション情報１４５）を設定する。
【００４０】
図５は、本発明によるＰＦＣ１が保持するトポロジ情報１５の一例を示す図である。トポロジ情報１５は、ＰＦＳ２やホスト３等の接続状況に関する情報を含む。具体的には、トポロジ情報１５として、ＰＦＳ２やホスト３を特定する装置識別子１５１に、当該装置のポート数１５２やポート接続先情報１５３が対応付けられて記憶装置に記録される。ポート接続先情報１５３は、接続相手を特定する接続種別（スイッチ／ノード／外部ネットワーク）や接続先を特定する情報（ＰＦＳ２の場合はスイッチＩＤ、ホストの場合はＭＡＣアドレス、外部ネットワーク（例示：インターネット）の場合は外部ネットワークＩＤ）が含まれる。
【００４１】
図６は、本発明によるＰＦＣ１が保持する通信経路情報の一例を示す図である。通信経路情報１６は、通信経路を特定するための情報である。詳細には、通信経路情報１６として、ホスト３や外部ネットワークインタフェース（図示なし）を端点として指定する端点情報１６１と、通過するＰＦＳ２とポートの対群を指定する通過スイッチ情報１６２と、付随情報１６３とが対応付けられて記憶装置に記録される。例えば、通信経路がホスト３間を接続する経路である場合、各ホスト３のＭＡＣアドレスが端点情報１６１として記録される。通過スイッチ情報１６２は、端点情報１６１で示される端点間の通信経路上に設けられるＰＦＳ２の識別子を含む。又、通過スイッチ情報１６２は、当該ＰＦＳ２に設定されるフローエントリ（ルール１４４＋アクション情報１４５）と当該ＰＦＳ２とを対応づけるための情報を含んでも良い。付随情報１６３は、端点が変更された後の経路上のＰＦＳ２（通過スイッチ）に関する情報を含む。
【００４２】
以上のような構成により、本発明によるＰＦＣ１は、ＰＦＳ２からのファーストパケットの受信通知に応じて、当該パケットを転送させるためのフローエントリを生成するとともに、生成したフローエントリと、ＰＦＳ２から通知された優先度１４７（又は予め設定された優先度１４７）を、算出した通信経路上のＰＦＳ２に設定する。
【００４３】
図７は、本発明によるプログラマブルフロースイッチの実施の形態における構成を示す図である。ＰＦＳ２は、ＰＦＣ１によって設定（更新）されたフローテーブル２３に従って受信パケットの処理方法（アクション）を決定する。ＰＦＳ２は、転送処理部２１とフロー設定部２２を備える。転送処理部２１とフロー設定部２２は、ハードウェアで構成されても、ＣＰＵによって実行されるソフトウェアで実現してもどちらでも良い。
【００４４】
ＰＦＳ２の記憶装置には、図８に示すようなフローテーブル２３が設定される。フロー設定部２２は、ＰＦＣ１から取得したフローエントリ（ルール１４４＋アクション情報１４５）及び優先度１４７をフローテーブル２３に設定する。詳細には、フロー設定部２２は、受信パケットのヘッダ情報が、フローテーブル２３に記録されたルール１４４に適合（又は一致）しない場合、当該パケットデータをファーストパケットとして判定し、ファーストパケットを受信したことをＰＦＣ１−１〜１−ｍに通知する。この際、フロー設定部２２は、ＰＦＣ１毎に異なる優先度２４をファーストパケット（又はそのヘッダ情報）に付与し、ＰＦＣ１−１〜１−ｍのそれぞれに送信する。例えば、フロー設定部２２は、ＰＦＣ１−１には優先度２４“１”を付与したファーストパケットを送信し、ＰＦＣ１−ｍには“１”より低い優先度２４“ｍ”を付与したファーストパケットを送信する。この場合、ＰＦＳ２は、予め記憶装置に設定された優先度２４を保持することが好ましい。
【００４５】
そして、フロー設定部２２は、ファーストパケットの通知に応じてＰＦＣ１−１〜１−ｍのそれぞれから送信されるフローエントリ（ルール１４４＋アクション情報１４５）及び優先度１４７を、フローテーブル２３に設定する。ここで、送信される優先度１４７は、ＰＦＣ１毎に設定（又はＰＦＳ２によって付与）された優先度である。ＰＦＣ１から送信されたルール１４４と同じフローエントリがフローテーブル２３に存在する場合、フロー設定部２２は、ＰＦＣ１から送信された優先度１４７と、フローテーブル２３に設定されている優先度１４７とを比較し、高い優先度のフローエントリをフローテーブル２３に設定する。すなわち、フロー設定部２２は、ＰＦＣ１からのフロー設定指示に対し、送信された優先度１４７とフローテーブル２３に設定された優先度１４７とによって、フローエントリの設定許否を判定する。ここで、ＰＦＣ１からのフローエントリの優先度が高い場合、当該フローエントリによってフローテーブル２３は上書きされる。一方、フローテーブル２３内のフローエントリの優先度が高い場合、ＰＦＣ１からのフローエントリの設定は拒否され、当該フローエントリは破棄される。
【００４６】
このように、優先度の高いフローエントリを優先して上書き設定するため、ＰＦＳ２−１〜２−ｎのそれぞれには、ファーストパケットに適合するフローエントリが１つだけ設定されることとなる。
【００４７】
受信パケットのヘッダ情報が、フローテーブル２３に記録されたルール１４４に適合（一致）する場合、当該パケットデータは、転送処理部２１によって、他のＰＦＳ２又はホスト３に転送される。詳細には、転送処理部２１は、パケットデータのヘッダ情報に適合（又は一致）するルール１４４に対応するアクション情報１４５を特定する。転送処理部２１は、当該アクション情報１４５で指定された転送先のノード（ＰＦＳ２又はホスト３）に当該パケットデータを転送する。
【００４８】
具体的には、ルール１４４：ＭＡＣ送信元アドレス（Ｌ２）が“Ａ１〜Ａ３”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ１〜Ｂ３”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ１〜Ｃ３”と、アクション情報１４５：“ＰＦＳ２−２に中継”とが対応付けられているフローエントリが設定されたＰＦＳ２−１の動作を説明する。ＭＡＣ送信元アドレス（Ｌ２）が“Ａ１”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ２”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ３”であるパケットデータを受信した場合、ＰＦＳ２−１は、ヘッダ情報が当該ルール１４４に一致していると判断し、受信したパケットデータをＰＦＳ２−２に転送する。一方、ＭＡＣ送信元アドレス（Ｌ２）が“Ａ５”、ＩＰ宛先アドレス（Ｌ３）が“Ｂ２”、プロトコルが“ｈｔｔｐ”、宛先ポート番号（Ｌ４）が“Ｃ４”であるパケットデータを受信した場合、ＰＦＳ２−１は、ヘッダ情報が当該ルール１４４に一致しないと判断し、ファーストパケット受信の旨をＰＦＣ１−１〜１−ｍに通知するとともに当該ヘッダ情報及び優先度２４を各ＰＦＣ１に送信する。
【００４９】
転送処理部２１によるファーストパケットの転送処理は、フローテーブル２３にフローエントリが設定されたことをトリガとして実施されることが好ましい。例えば、ファーストパケットの転送を優先度１４７が“３”のフローエントリに従って行われた後、優先度１４７が“１”のフローエントリに書き換えられた場合、次の受信パケットは、書換え後のフローエントリに従った転送先ノードに転送される。
【００５０】
以上のように、本発明によるコンピュータシステムでは、複数のＰＦＣ３−１〜３−ｉによってフロー（パケット）を転送するための通信経路が構築されるため、ＰＦＣ３−１〜３−ｉのいずれかに障害が発生してもパケット転送が可能となる。又、ＰＦＣ３毎に異なる優先度が付与され、優先度の高いフローエントリによってＰＦＳ２のフローテーブルは上書き更新される。これにより、ＰＦＳ２には、同じルール１４４に対応するアクション情報１４５が複数設定されることなく、フローに対して常に１つのフローエントリが設定されることとなる。すなわち、複数のＰＦＣ３によってフローエントリが設定されてもＰＦＳ２に設定されるフローエントリは常に１つとなるため、ＰＦＳ２は、誤動作せずにパケットを転送することができる。
【００５１】
本発明では、フローテーブルの更新が、宛先ホスト側のＰＦＳ２から送信元ホスト側のＰＦＳ２（ファーストパケットを受信したＰＦＳ２）に向かって順に行われる。このため、ＰＦＳ２のフローテーブル２３が優先度の高いフローエントリによって上書きされたとしても、構築された通信経路は、必ず送信元ホストと宛先ホストとを結ぶ経路となる。
【００５２】
（通信経路の構築及びパケット転送動作）
図１０から図１２を参照して、本発明によるコンピュータシステムにおける通信経路の構築動作の詳細を説明する。以下では、ホスト３−１からホスト３−ｉに対してパケットデータを送信し、それぞれの間の通信経路を構築する動作について説明する。又、ここでは、ＰＦＳ２−１がホスト３−１からファーストパケットを受信するものとする。
【００５３】
図１０は、本発明によるコンピュータシステムの実施の形態における通信経路の構築処理（フローテーブル更新処理）及びパケット転送処理の動作を示すシーケンス図である。図１０を参照して、ホスト３−１からホスト３−ｉ宛のパケットデータが送信され、ホスト３−１側で最も近いＰＦＳ２−１によって受信される（ステップＳ１０１）。
【００５４】
ＰＦＳ２−１はホスト３−１から受け取ったパケット内にあるヘッダ情報（送信先情報）を参照し、ＰＦＳ２−１内部で保持しているフローテーブル２３から該当エントリを探す（ステップＳ１０２）。ここで、ヘッダ情報に対応するフローエントリがある場合、当該エントリで規定されたアクション情報１４５に基づいた転送先のノードに受信パケットを転送する（ステップＳ１０２Ｎｏ、Ｓ１１５）。一方、ヘッダ情報に対応するフローエントリがフローテーブル２３にない場合、ＰＦＳ２−１はファーストパケットを受信したと判定し、ファーストパケットの受信をＰＦＣ１−１〜１−ｍのそれぞれに通知する（ステップＳ１０２Ｙｅｓ、Ｓ１０３、Ｓ１０４）。この際、ＰＦＳ２−１は、ファーストパケット（又はヘッダ情報）及び優先度２４を対応付けてＰＦＣ１−１〜１−ｍに送信する。ここでは、一例として、ＰＦＳ２−１は、ＰＦＣ１−１に優先度２４“１”を、ＰＦＣ１−２に優先度２４“２”を、・・・ＰＦＣ１−ｍに優先度２４「ｍ」を通知する。ただし、ｍが１〜ｍで最も大きな値であり、値の小さな優先度２４を高優先とする。
【００５５】
ファーストパケットの受信通知を受け付けたＰＦＣ１−１〜１−ｍのそれぞれは、当該フロー（パケット）に対する通信経路の算出、フローエントリの生成、及びＰＦＳ２に対するフローエントリの設定（フローテーブル２３の更新）を行う（ステップＳ１０５〜Ｓ１１４）。詳細には、ＰＦＳ２−１からファーストパケットと優先度２４を受け取ったＰＦＣ１−１は、パケット内に含まれている送信元ホストや宛先ホストのＭＡＣアドレスやＩＰアドレスなど、ＯｐｅｎＦｌｏｗとして規定されている情報を元に経路を決定し、当該経路上のＰＦＳ２に設定するフローエントリを生成する（ステップＳ１０５）。
【００５６】
ＰＦＣ１−１は、生成したフローエントリにＰＦＳ２−１から通知された優先度２４“１”を付与して、宛先ホスト側のＰＦＳ２−ｎから順にフローテーブル２３の更新を行う（ステップＳ１０６〜Ｓ１０９）。詳細には、ＰＦＣ１−１は、先ず、宛先のホスト３−ｉに最も近いＰＦＳ２−ｎに対して優先度２４“１”を付与したフローエントリを送信する（ステップＳ１０６）。ＰＦＳ２−ｎは、ＰＦＣ１−１からのフローテーブルの更新指示に応じて、送信されたフローエントリを設定する（ステップＳ１０７）。同様に、ＰＦＣ１−１は、算出した経路上を送信元側に方向に遡り、１つ前のＰＦＳ２に対して順にフローテーブルを更新し、最後に送信元のホスト３−１に最も近いＰＦＳ２−１フローテーブルを更新する（ステップＳ１０８、Ｓ１０９）。
【００５７】
フローエントリの更新処理は、他のＰＦＣ１−２〜１−ｍも同様に行う。例えば、ＰＦＣ１−ｍは、生成したフローエントリにＰＦＳ２−１から通知された優先度２４“ｍ”を付与して、宛先ホスト側のＰＦＳ２−ｎから順にフローテーブル２３の更新を行う（ステップＳ１１０〜Ｓ１１２）。又、ＰＦＣ１−ｍは、算出した経路上を送信元側に方向に遡り、１つ前のＰＦＳ２に対して順にフローテーブルを更新し、最後に送信元のホスト３−１に最も近いＰＦＳ２−１フローテーブルを更新する（ステップＳ１１３、Ｓ１１４）。
【００５８】
ＰＦＣ１−１〜１−ｍによるＰＦＳ２に対するフローテーブルの更新処理は、それぞれ同期することなく独立的に実施される。ファーストパケットの受信通知を受け取るタイミングや経路計算開始時のタイミングの違いから、ネットワーク上の機器の状態が変化している可能性があり、必ずしも一致しているとは限らない。このため、ＰＦＣ１−１〜１−ｍのそれぞれが算出した通信経路や、フローエントリの設定対象となるＰＦＳ２は異なる場合がある。又、フローテーブル２３を更新処理も、ＰＦＣ２毎に設定された優先度１４７に関係ないタイミングで実施される。
【００５９】
しかし、ＰＦＳ２は、優先度２４の高いフローエントリを優先してフローテーブルに上書きするため、複数のＰＦＣ１が同期することなくフローテーブルを更新しても、ルール１４４に対応するアクション情報１４５を１つとすることができる。
【００６０】
図１１は、本発明によるプログラマブルフロースイッチにおけるフローエントリ設定処理（フローテーブル更新処理）の動作を示すフロー図である。図１１を参照して、ＰＦＳ２において実行されるフローエントリの設定処理（ステップＳ１０７、Ｓ１０９、Ｓ１１２、Ｓ１１４）の動作の詳細を説明する。
【００６１】
ＰＦＳ２は、ＰＦＣ１から送信されたフローエントリのルール１４４に一致するフローエントリがフローテーブル２３に設定されているかを判定する（ステップＳ２０１）。ここで、フローテーブル２３に該当エントリがない場合、ＰＦＣ１から受け取ったフローエントリをフローテーブル２３に設定する（ステップＳ２０１Ｎｏ、ステップＳ２０２）。この際、図１２（ａ）に示すように、ＰＦＣ１から送信されたフローエントリ（ルール１４４＋アクション情報１４５）及び優先度１４７が対応付けられてフローテーブル２３に設定される。
【００６２】
一方、フローテーブル２３に、ＰＦＳ１から送信されたフローエントリと同じルール１４４のエントリがある場合、優先度１４７の比較判定が行われる（ステップＳ２０１Ｙｅｓ、Ｓ２０３）。ここで、ＰＦＣ１から送信されたフローエントリの優先度１４７が、フローテーブル２３に設定された優先度１４７よりも低い場合、ＰＦＳ２は、ＰＦＣ１からのフローテーブルの更新指示を無視（拒否）する（フローテーブルを更新しない）（ステップＳ２０３Ｎｏ、Ｓ２０４）。一方、ＰＦＣ１から送信されたフローエントリの優先度１４７が、フローテーブル２３に設定された優先度１４７よりも高い場合、ＰＦＣ１からのフローエントリによってフローテーブルを上書きするとともに、優先度１４７を変更する（ステップＳ２０３Ｙｅｓ、Ｓ２０５）。
【００６３】
例えば、図１２（ａ）に示すようなフローテーブル２３が設定されているＰＦＳ２に、ＰＦＣ１からパケットＡに対するフローエントリ（優先度“２”）の設定が指示された場合、パケットＡに対するフローテーブル２３に設定済みのフローエントリの優先度１４７は、“１”（最優先）であるため、フローエントリの設定指示（フローテーブルの更新指示）は、無視（拒否）される。一方、ＰＦＣ１からパケットＣに対するフローエントリ（優先度“１”）の設定が指示された場合、パケットＣに対するフローテーブル２３に設定済みのフローエントリの優先度１４７は、“３”であり、通知された優先度“１”より低いため、フローエントリ及び優先度は図１２（ｂ）のように変更される。図１２（ａ）及び図１２（ｂ）に示す一例では、パケットＢ（ルール）に対するアクションとして、「ＰＦＳ２−５へ転送」が設定されていたところ、「ＰＦＳ２−９に転送」に変更され、優先度が“３”から“１”に変更される。
【００６４】
以上のように、本発明によるＰＦＳ２は、優先度１４７の高いＰＦＣ１によるフローエントリを優先してフローテーブル２３に設定するため、複数のＰＦＣ１が同期せずに独立的にフローエントリを設定しても、フローに対して１つの転送先を決定できる。
【００６５】
図１０を参照して、ファーストパケットの受信に応じてフローエントリの設定を要求したＰＦＳ２−１（以下、要求元ＰＦＳ２−１と称す）は、当該ファーストパケットに対応するフローエントリが自身のフローテーブル２３に設定されると、宛先のホスト３−ｉまでの通信経路が構築されたと判断し、ファーストパケットの転送を開始する（ステップＳ１１５）。以降、通信経路上のＰＦＳ２は、設定されたルール１４４に適合するパケットを、設定されたアクション情報１４５に従って転送する。
【００６６】
要求元ＰＦＳ２−１は、自身のフローテーブル２３にファーストパケットに対するフローエントリが設定されると同時に当該フローテーブルの転送を開始することが好ましい。この場合、要求元ＰＦＳ２−１は、優先度“１”より低い優先度１４７のフローエントリに応じてファーストパケットを転送することがある。例えば、ＰＦＣ１−３がＰＦＣ１−１より先に通信経路を構築した場合、要求元ＰＦＣ２−１は、優先度“３”のフローエントリに応じてファーストパケットを転送する。しかし、時間が経過し、ＰＦＣ１−１によって優先度１４７“１”のフローエントリが要求元ＰＦＳ２−１に設定された後は、ＰＦＣ１−１によって構築されて通信経路を介してパケット転送が行われることとなる。このように、同じルールのパケットを転送する場合でも、時間の経過に応じて優先度の高いフローエントリがＰＦＳ２のフローテーブル２３に上書きされるため、所定の期間、同ルールに従うパケットは異なる通信経路を通過して宛先のホスト３−ｉに転送される。このため、要求元ＰＦＳ２−１は、自身のフローテーブル２３が更新されてから、通信経路が安定するまでの所定の期間、ファーストパケットの送信を待機しても構わない。
【００６７】
（耐障害性）
次に、図１３から図１６を参照して、本発明によるコンピュータシステムにおける耐障害性について説明する。以下では、一例として、ホスト３−１からホスト３−２に対してパケットデータが転送され、ＰＦＳ２−１がファーストパケットを受信し、３つのＰＦＣ１−１〜１−３が通信経路を構築する場合について説明する。尚、ＰＦＣ１−１には優先度１４７“１”、ＰＦＣ１−２には優先度１４７“２”、ＰＦＣ１−３には優先度１４７“３”が付与され、優先度は“１”＞“２”＞“３”とする。
【００６８】
図１３は、本発明による複数のＰＦＣ１−１〜１−３によって算出された通信経路４０、５０、６０の一例を示す図である。ここでは、ＰＦＣ１−１によって通信経路５０が算出され、ＰＦＣ１−２によって通信経路４０が算出され、ＰＦＣ１−３によって通信経路６０が算出されるものとする。尚、通信経路４０は、ＰＦＳ２−１、２−２、２−４、２−６を経由する経路であり、通信経路５０は、ＰＦＳ２−１、２−５、２−３、２−６を経由する経路であり、通信経路６０は、ＰＦＳ２−１、２−２、２−３、２−４、２−６を経由する経路である。
【００６９】
上記のような前提条件の上で、ＰＦＣ１−１〜１−３のいずれかが通信経路の構築中に動作継続不可能状態となり、通信経路上のＰＦＳ２に対してのフローテーブルの更新指示ができなくなった場合について説明する。
【００７０】
優先度の高いＰＦＣ１−１に障害がない場合、他のＰＦＣ１−２、１−３に障害があっても、ＰＦＣ１−１によって構築された通信経路５０を介してホスト３−１、３−２間のパケット転送は行われる。例えば、通信経路５０上のＰＦＳ２に、ＰＦＣ１−１よりも先行して他のＰＦＣ１−２、１−３によってフローエントリが設定されている場合、フローテーブル２３は、高い優先度“１”のフローエントリによって上書きされるため、問題なく通信経路５０が構築される。又、ＰＦＣ１−１よりも後に、他のＰＦＣ１−２、１−３によるフローテーブルの更新が行われても、通信経路５０と共通するＯＦＳ２には高い優先度“１”のフローエントリが設定されているため、当該フローテーブルの更新は無視（拒否）される。このため、高い優先度“１”のフローエントリによって構築された通信経路５０は、変更されない。
【００７１】
又、優先度の低いＰＦＣ１−３に障害が発生した場合、その通信経路の構築順序に関わらず、高優先度のＰＦＣ１−１又はＰＦＣ１−２によってフローエントリが設定されるため、必ずホスト間の通信経路は構築される。本発明では、宛先のホスト３−２に一番近いＰＦＳ２−６から順にフローテーブルの更新指示を出しているため、矛盾なくホスト間の通信経路を構築することができる。
【００７２】
次に、図１４Ａ及び図１４Ｂを参照して、優先度の高いＰＦＣ１−１が他のＰＦＣ１に先行して通信経路５０を構築中に動作不能となった場合に構築される通信経路について説明する。
【００７３】
図１４Ａに示すように、ＰＦＣ１−１は、宛先のホスト３−２に最も近いＰＦＳ２−６から送信元のホスト３−１に向かって順にフローテーブル２３を更新し、ＰＦＳ２−５のフローテーブル２３を更新した後に何らかの障害によりフローテーブル更新処理を停止する。このとき、ＰＦＳ２−５、２−６には優先度“１”のフローエントリが設定され、ＰＦＳ２−５、２−６、ホスト３−２までの通信経路５１、５２が構築される。
【００７４】
ＰＦＣ１−１によるフローテーブルの更新開始より後に、ＰＦＣ１−２が通信経路４０の構築（フローテーブルの更新）を開始する。ＰＦＣ１−２は、宛先のホスト３−２に最も近いＰＦＳ２−６から送信元のホスト３−１に向かって順にフローテーブル２３を更新する。このとき、ＦＳ２−６には高い優先度“１”のフローエントリが既に設定されているため、これよりも低い優先度“２”のフローテーブルには更新されない。ここで、ＰＦＣ１−２に問題がなく、要求元ＰＦＳ２−１までフローテーブルの更新が終了すると、ＰＦＳ２−１、２−３、２−４には優先度“２”のフローエントリが設定される。すなわち、ＰＦＣ１−２によって、ホスト３−１からＰＦＳ２−６の間に通信経路４１が構築される。一方、ＰＦＳ２−６からホスト３−２までの間はＰＦＣ１−１によって通信経路５１が構築されているため、ホスト３−１とホスト３−２との間は、ＰＦＣ１−２によって構築された通信経路４１とＰＦＣ１−１によって構築された通信経路５１によって接続されることとなる。尚、これらの動作と前後して、ＰＦＣ１−３もフローテーブルの更新を行うが、優先度の高いフローエントリが優先的に設定されるため、通信経路６０上におけるＰＦＳ２−２以外のＰＦＳ２では、優先度“３”のフローエントリは設定されない。
【００７５】
ネットワーク環境によってＰＦＣ１毎に算出された通信経路４０、５０、６０が異なる場合でも、送信元に最も近いＰＦＳ２−６と、送信元に最も近い要求元ＰＦＳ１−１は、全ての通信経路４０、５０、６０で共通している。又、本発明では、フローテーブルの更新が、宛先ホスト側から送信元ホスト側に向かって順に行われる。このため、高優先度のＰＦＣ１（ＰＦＣ１−１）によるフローテーブルの更新が途中で停止しても、他の低優先度のＰＦＣ１（ＰＦＣ１−２）によって構築される通信経路（通信経路４１）は、必ず、高優先度のＰＦＣ１（ＰＦＣ１−１）が構築した通信経路（通信経路５１）通信経路に接続される。以上のことから、本発明によれば、優先度１４７の高いフローエントリを設定するＰＦＣ１が通信経路の構築途上で動作不能となっても、他のＰＦＣ２によって通信経路を補完することができるため、ホスト３間のパケット転送が保証される。
【００７６】
次に、図１５Ａ、図１５Ｂを参照して、優先度の高いＰＦ１−１が他のＰＦＣ１より後に通信経路の構築（フローテーブルの更新）を開始し、構築途中で動作不能となった場合の通信経路の構築動作について説明する。
【００７７】
ＰＦＣ１−２及びＰＦＣ１−３は、宛先のホスト３−２に最も近いＰＦＳ２−６から送信元のホスト３−１に向かって順にフローテーブル２３を更新する。本一例では、図１５Ａのように通信経路４２、６１が構築された段階で、ＰＦＣ１−１が通信経路の構築を開始する。図１５Ａに示すように、ＰＦＣ１−１が通信経路の構築を開始する時点において、ＰＦＳ２−６には優先度“２”のフローエントリによってＰＦＳ２−６からホスト３−２までの通信経路４２が構築され、ＰＦＳ２−４には優先度“３”のフローエントリによって、ＰＦＳ２−５からＰＦＳ２−４との間に通信経路６１が構築されている。
【００７８】
図１５Ｂを参照して、ＰＦＣ１−１は、宛先のホスト３−２に最も近いＰＦＳ２−６から送信元のホスト３−１に向かって順にフローテーブル２３を更新し、ＰＦＳ２−５のフローテーブル２３を更新した後に何らかの障害によりフローテーブル更新処理を停止する。このとき、ＰＦＳ２−５、２−６には優先度“１”のフローエントリが設定され、ＰＦＳ２−５、２−６、ホスト３−２までの通信経路５１、５２が構築される。
【００７９】
ＰＦＣ１−２は、引き続き、ＰＦＳ２−３から送信元のホスト３−１に向かって通信経路４０上におけるＰＦＳ２のフローテーブル２３を更新する。ここで、ＰＦＣ１−２に問題がなく、要求元ＰＦＳ２−１までフローテーブルの更新が終了すると、ＰＦＳ２−１、２−３には優先度“２”のフローエントリが設定される。すなわち、ＰＦＣ１−２によって、ホスト３−１からＰＦＳ２−６の間に通信経路４１が構築される。一方、ＰＦＳ２−６からホスト３−２までの間はＰＦＣ１−１によって通信経路５１が構築されているため、ホスト３−１とホスト３−２との間は、ＰＦＣ１−２によって構築された通信経路４１とＰＦＣ１−１によって構築された通信経路５１によって接続されることとなる。尚、これらの動作と前後して、ＰＦＣ１−３もフローテーブルの更新を行うが、優先度の高いフローエントリが優先的に設定されるため、通信経路６０上におけるＰＦＳ２−２以外のＰＦＳ２では、優先度“３”のフローエントリは設定されない。
【００８０】
上述と同様に、後に通信経路の構築を開始した高優先度のＰＦＣ１（ＰＦＣ１−１）によるフローテーブルの更新が途中で停止しても、他の低優先度のＰＦＣ１（ＰＦＣ１−２）によって構築される通信経路（通信経路４１）は、必ず、高優先度のＰＦＣ１（ＰＦＣ１−１）が構築した通信経路（通信経路５１）通信経路に接続される。以上のことから、本発明によれば、優先度１４７の高いフローエントリを設定するＰＦＣ１が通信経路の構築途上で動作不能となっても、他のＰＦＣ２によって通信経路を補完することができるため、ホスト３間のパケット転送が保証される。
【００８１】
最も優先度の高い優先度１４７が指定されたＰＦＣ１−１が正常である場合、フローテーブル２３の更新（高優先度のフローエントリによる上書き）によって、所定の時間の経過後、必ず通信経路５０が構築される。この場合、１つのＰＦＣ１−１によってフローを制御及び管理できるため、オープンフロー技術で提唱されたフローの一元管理が実現できる。
【００８２】
しかし、ＰＦＣ１−１に異常が発生した場合、ホスト間を接続する通信経路は、上述のように複数のＰＦＣ１によって構築されることがある。この場合、複数のＰＦＣ１によってフローが制御されることとなり、オープンフロー技術の方針である、「１つのＰＦＣ１によるフローの一元管理」に反することとなる。
【００８３】
このため、最高の優先度１４７“１”が通知されたＰＦＣ１−１が、障害から復旧した際、必ず、通信経路５０を再構築するように設定することで、他のＰＦＣ１と通信することなくＰＦＣ１−１によるフローの一元管理が実現できる。
【００８４】
図１６は、優先度１４７“１”が通知されたＰＦＣ１−１の障害復旧後の動作を示すフロー図である。障害から復旧したＰＦＣ１−１は、例えば再起動により復帰すると、ファーストパケットの転送元のＰＦＳ２（要求元ＰＦＳ２−１）に対してフローテーブル２３の更新指示をしたか否かを確認する（ステップＳ３０１）。詳細には、ＰＦＣ１−１は、再起動後、フローテーブル１４に設定された優先度１４７が“１”のフローエントリとその設定情報１４６を検索することで、該当エントリのＰＦＳ１への設定状況を確認する。
【００８５】
ここで、要求元ＰＦＳ２−１に対するフローエントリの設定を確認した場合、ＰＦＣ１−１は、経路構築完了後に動作不能となり、再起動により復帰したものと判断する（ステップＳ３０１Ｙｅｓ、Ｓ３０２）。一方、要求元ＰＦＳ２−１に対してフローエントリを設定していないことを確認した場合、ＰＦＣ１−１は、経路構築途中で動作不能になったものと判断し、通信経路５０上のＰＦＳ２にフローテーブルの更新指示を発行する（ステップＳ３０１Ｎｏ、Ｓ３０３）。この際、ファーストパケットに基づいて設定されたルール１４４を利用して、新たな通信経路を算出し、当該通信経路上のＰＦＳ２に設定するフローエントリ（ルール１４４＋アクション情報１４５）を生成してもよい。通常、障害復旧後のネットワーク環境は、障害発生時から変動しているため、新たな通信経路及びフローエントリを設定することが有効である。
【００８６】
このように障害から復旧した最高優先度が通知されたＰＦＣ１−１によって、通信経路全体のＰＦＳ２のフローテーブル２３を更新することで、フローをＰＦＣ１−１で一元管理することが可能となる。
【００８７】
ＰＦＣ１は、パケットが最も速く送信元ホスト３−１から宛先ホスト３−２へ到達できるような通信経路を算出するため、複数のＰＦＣ１が同じ通信経路を決定する場合が多い。このため、複数のＰＦＣ１で通信経路を構築する方法は、耐障害性の観点では有効な策である。このため、本発明では、複数のＰＦＣ１を用意することで耐障害性を向上させている。
【００８８】
又、本発明では、複数のＰＦＣ１からのフローテーブル更新指示が競合しても、ＰＦＳ２側でその優先度に基づいてフローテーブルの更新（上書き）許否を判定するため、矛盾することなくパケットの到達を保証する通信経路が構築される。更に、複数のＰＦＣ１のそれぞれは、独自にフローテーブルの更新指示を発行するため、コントローラ間で同期を取る必要がない。このため、コントロール間で同期を取るための待ち時間を必要としないため、経路構築までの時間を短縮することも可能となる。すなわち、本発明によれば、オープンフロー技術を利用したコンピュータシステムにおいて通信経路構築の時間を増加させることなく耐障害性を上げることが可能となる。
【００８９】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。例えば、優先度１４７に応じたフローテーブルの更新制御は、通信経路の構築（転送先の設定）だけでなく、フローの転送停止や終了（破棄）といった他の制御に対して行われても良い。これにより、複数のコントローラからの指示を矛盾することなく実行することが可能となり、耐障害性が更に向上する。
【００９０】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限らない。
【００９１】
（付記１）
それぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示する複数のコントローラと、
前記優先度に応じて前記フローエントリの設定許否を判定し、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うスイッチと
を具備する
コンピュータシステム。
【００９２】
（付記２）
付記１に記載のコンピュータシステムにおいて、
前記スイッチは、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記設定されたフローエントリを上書き設定する
コンピュータシステム。
【００９３】
（付記３）
付記１又は２に記載のコンピュータシステムにおいて、
前記スイッチは、前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、自身に設定されたフローエントリの優先度より低い場合、前記送信されたフローエントリの設定を拒否する
コンピュータシステム。
【００９４】
（付記４）
付記２又は３に記載のコンピュータシステムにおいて、
前記複数のコントローラのそれぞれは、前記通信経路上において、パケットデータの宛先装置側のスイッチから送信元装置のスイッチに対して順にフローエントリの設定を指示する
コンピュータシステム。
【００９５】
（付記５）
付記１から４のいずれか１項に記載のコンピュータシステムにおいて、
前記複数のコントローラのそれぞれがフローエントリに付加する前記優先度は、前記複数のコントローラのそれぞれで異なる値である
コンピュータシステム。
【００９６】
（付記６）
付記１から５のいずれか１項に記載のコンピュータシステムにおいて、
前記スイッチは、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと優先度とを、前記複数のコントローラに通知し、
前記複数のコントローラのそれぞれは、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに設定を指示する
コンピュータシステム。
【００９７】
（付記７）
付記１から６のいずれか１項に記載のコンピュータシステムで利用されるコントローラ。
【００９８】
（付記８）
付記１から６のいずれか１項に記載のコンピュータシステムで利用されるスイッチ。
【００９９】
（付記９）
複数のコントローラのそれぞれが、通信経路を算出し前記通信経路上のスイッチに対して、優先度を付加したフローエントリの設定を指示するステップと、
前記スイッチが、前記優先度に応じて前記フローエントリの設定許否を判定するステップと、
前記スイッチが、自身に設定されたフローエントリに適合する受信パケットに対し、前記設定されたフローエントリに従った中継動作を行うステップと
を具備する
通信方法。
【０１００】
（付記１０）
付記９に記載の通信方法において、
前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、前記スイッチに設定されたフローエントリの優先度より高い場合、前記送信されたフローエントリによって前記スイッチに設定されたフローエントリを上書き設定するステップを更に具備する
通信方法。
【０１０１】
（付記１１）
付記９又は１０に記載の通信方法において、
前記複数のコントローラのそれぞれから送信されたフローエントリの優先度が、前記スイッチに設定されたフローエントリの優先度より低い場合、前記送信されたフローエントリの設定を拒否するステップを更に具備する
通信方法。
【０１０２】
（付記１２）
付記１０又は１１に記載の通信方法において、
前記設定を指示するステップは、前記通信経路上において、パケットデータの宛先装置側のスイッチから送信元装置のスイッチに対して順にフローエントリの設定を指示するステップを備える
通信方法。
【０１０３】
（付記１３）
付記９から１２のいずれか１項に記載の通信方法において、
前記複数のコントローラのそれぞれがフローエントリに付加する前記優先度は、前記複数のコントローラのそれぞれで異なる値である
通信方法。
【０１０４】
（付記１４）
付記９から１３のいずれか１項に記載の通信方法において、
前記スイッチが、自身に設定されたフローエントリに適合しないパケットデータを受信すると、前記パケットデータと優先度とを、前記複数のコントローラに通知するステップを更に具備し、
前記設定を指示するステップは、前記前記複数のコントローラのそれぞれが、前記パケットデータのヘッダ情報に基づいて作成したフローエントリに前記通知された優先度を付加して、前記通信経路上のスイッチに設定を指示するステップを備える
コンピュータシステム。
【符号の説明】
【０１０５】
１、１−１〜１−ｍ：プログラマブルフローコントローラ（ＰＦＣ）
２、２−１〜２−ｎ：プログラマブルフロースイッチ（ＰＦＳ）
３、３−１〜３−ｉ：ホストコンピュータ（ホスト）
１１：スイッチ制御部
１２：フロー管理部
１３：フロー生成部
１４、２３：フローテーブル
１５：トポロジ情報
１６：通信経路情報
２０：スイッチ群
２１：転送処理部
２２：フロー設定部
２４、１４７：優先度
１４１：フロー識別子
１４２：対象装置
１４３：経路情報
１４４：ルール
１４５：アクション情報
１４６：設定情報
１５１：装置識別子
１５２：ポート数
１５３：ポート接続先情報
１６１：端点情報
１６２：通過スイッチ情報
１６３：付随情報
【図１】
0005488980.tif 000002
【図２】
0005488980.tif 000003
【図３】
0005488980.tif 000004
【図４】
0005488980.tif 000005
【図５】
0005488980.tif 000006
【図６】
0005488980.tif 000007
【図７】
0005488980.tif 000008
【図８】
0005488980.tif 000009
【図９】
0005488980.tif 000010
【図１０】
0005488980.tif 000011
【図１１】
0005488980.tif 000012
【図１２】
0005488980.tif 000013
【図１３】
0005488980.tif 000014
【図１４Ａ】
0005488980.tif 000015
【図１４Ｂ】
0005488980.tif 000016
【図１５Ａ】
0005488980.tif 000017
【図１５Ｂ】
0005488980.tif 000018
【図１６】
0005488980.tif 000019