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