(57)【要約】【課題】パケットの転送処理に係る通信制御装置のＣＰＵへの負荷を低減する。【解決手段】通信制御装置は、制御対象の複数のスイッチそれぞれの負荷情報を受信する受信部と、所定の処理のロジックを実行するロジックデバイスと、第１の条件が負荷情報によって満たされた場合に、複数のスイッチのうちの第１のスイッチから受信されるパケットの経路情報の要求について、第１の条件が満たされた場合の経路へのパケットの出力指示を第１のスイッチに通知する処理を当該所定の処理としてロジックデバイスに実行させるプロセッサと、を備える。【選択図】図５
2019004357.tif 000002
【特許請求の範囲】
【請求項１】
制御対象の複数のスイッチそれぞれの負荷情報を受信する受信部と、
所定の処理のロジックを実行するロジックデバイスと、
第１の条件が前記負荷情報によって満たされた場合に、前記複数のスイッチのうちの第１のスイッチから受信されるパケットの経路情報の要求について、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理を前記所定の処理として前記ロジックデバイスに実行させるプロセッサと、
を備える通信制御装置。
【請求項２】
前記プロセッサは、
前記第１の条件が前記負荷情報によって満たされた場合に、前記第１のスイッチとして、前記パケットが属するフローの経路である第１の経路と前記第１の条件が満たされた場合に前記第１の経路の代わりに用いられる第２の経路との分岐点に位置するスイッチに、前記パケットの経路情報の要求の送信指示を送信し、前記第１のスイッチからの前記パケットの経路情報の要求に対して、前記第２の経路に接続される前記第１のスイッチのポートを出力ポートとして指定する前記パケットの出力指示を前記第１のスイッチに通知する処理を前記ロジックデバイスに実行させる、
請求項１に記載の通信制御装置。
【請求項３】
前記複数のスイッチ間を流れる複数のフローの種別それぞれについて、前記複数のフローの種別のそれぞれで異なる前記第１の条件と、前記第１の条件が満たされた場合の経路に関する情報と、を保持する記憶部をさらに備え、
前記プロセッサは、前記第１の条件が満たされたフローについて、前記第１のスイッチから受信されるパケットの経路情報の要求に対して、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理を前記所定の処理として前記ロジックデバイスに実行させる、
請求項１又は２に記載の通信制御装置。
【請求項４】
前記第１の条件は、前記第１の経路の混雑度に関する条件であって、
前記プロセッサは、
前記第１の経路の宛先の処理負荷に関する第２の条件が前記負荷情報によって満たされた場合に、前記第１のスイッチからのパケットの経路情報の要求を前記ロジックデバイスに入力せずに、バッファに蓄積する、
請求項２に記載の通信制御装置。
【請求項５】
前記複数のスイッチ間を流れる複数のフローの種別それぞれについて、前記複数のフローの種別のそれぞれで異なる前記第１の条件と、前記第１の条件が満たされた場合の経路の情報と、を保持し、前記複数のフローの種別のうちより優先度の低いフローの種別それぞれについては、前記第１の経路の宛先の処理負荷に関する第２の条件をさらに保持する記憶部をさらに備え、
前記プロセッサは、前記第１の条件が満たされたフローについて、前記第１のスイッチから受信されるパケットの経路情報の要求について、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理を前記所定の処理として前記ロジックデバイスに実行させ、前記第２の条件が満たされたフローについて、前記第１のスイッチからのパケットの経路情報の要求を前記ロジックデバイスに入力せずに、バッファに蓄積する、
請求項４に記載の通信制御装置。
【請求項６】
制御対象の複数のスイッチそれぞれの負荷情報を受信し、
第１の条件が前記負荷情報によって満たされた場合に、所定の処理のロジックを実行するロジックデバイスに、前記複数のスイッチのうちの第１のスイッチから受信されるパケットの経路情報の要求について、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理を前記所定の処理として実行させる、通信制御方法。
【請求項７】
プロセッサに、
制御対象の複数のスイッチそれぞれの負荷情報を受信させ、
第１の条件が前記負荷情報によって満たされた場合に、所定の処理のロジックを実行するロジックデバイスに、前記複数のスイッチのうちの第１のスイッチから受信されるパケットの経路情報の要求について、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理の前記所定の処理としての実行を指示させる、
ための通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置、通信制御方法、及び、通信制御プログラムに関する。
【背景技術】
【０００２】
例えば、ＳＤＮ（Software Defined Network）では、転送機能と制御機能とを分離させ、複数のスイッチ間の経路制御を１台のコントローラが行う。ＳＤＮでは、スイッチとコントローラ間の通信プロトコルにＯｐｅｎＦｌｏｗが用いられる。以下、ＯｐｅｎＦｌｏｗを実行するコントローラをＯＦコントローラ又はＯＦＣと表記する。ＯｐｅｎＦｌｏｗを実行するスイッチをＯＦスイッチ又はＯＦＳと表記する。
【０００３】
ＯＦスイッチは、パケットの経路情報をエントリとして含むフローテーブルを備えており、フローテーブルに従ってパケットを転送する。ＯＦコントローラは、例えば、各ＯＦスイッチのフローテーブルの設定を行うことで経路制御を行う。パケットの経路情報は、例えば、パケットの出力ポート、パケットを次に転送する転送先の情報等のいずれか、または、組合せである。
【０００４】
ＯＦスイッチは、フローテーブルにエントリのないパケットを受信すると、ＰａｃｋｅｔＩｎメッセージを使って受信パケットに関するフローテーブルのエントリをＯＦコントローラに問い合わせる。例えば、ＰａｃｋｅｔＩｎメッセージには、問合せ対象のパケット本体が含まれる。
【０００５】
ＰａｃｋｅｔＩｎメッセージの応答として、ＯＦコントローラは、フローテーブルのエントリの設定を指示するＦｌｏｗＭｏｄメッセージを、問い合わせ元のＯＦスイッチに送信する。または、ＯＦコントローラは、問合せ対象のパケットの指定のポートからの出力指示であるＰａｃｋｅｔＯｕｔメッセージを問い合わせ元のＯＦスイッチに送信する。ＰａｃｋｅｔＯｕｔメッセージには、ＰａｃｋｅｔＩｎメッセージに含まれていたパケットが含まれている。
【０００６】
以下、ＰａｃｋｅｔＩｎメッセージ、ＦｌｏｗＭｏｄメッセージ、ＰａｃｋｅｔＯｕｔメッセージ等のＯｐｅｎＦｌｏｗのメッセージは、単に、ＰａｃｋｅｔＩｎ、ＦｌｏｗＭｏｄ、ＰａｃｋｅｔＯｕｔと表記される。
【０００７】
上述のようなＰａｃｋｅｔＩｎとその応答であるＦｌｏｗＭｏｄ又はＰａｃｋｅｔＯｕｔとは、フローの経路変更にも用いられることがある。なお、フローとは、例えば、同じ識別情報を有するパケットの流れのことである。
【０００８】
例えば、ＰａｃｋｅｔＩｎとＦｌｏｗＭｏｄとを用いたフローの経路変更は、以下の通りである。まず、ＯＦコントローラは、ＯＦスイッチがＰａｃｋｅｔＩｎを用いて経路変更の対象となるフローのパケットをＯＦコントローラへと転送するように、ＯＦスイッチのフローテーブルを設定する。ＯＦスイッチへのフローテーブルの設定には、ＦｌｏｗＭｏｄが用いられる。
【０００９】
ＯＦコントローラは、ＯＦスイッチから経路変更の対象となるフローのパケットを含むＰａｃｋｅｔＩｎを受信すると、当該ＯＦスイッチにＦｌｏｗＭｏｄを送信する。当該ＯＦスイッチに送信されるＦｌｏｗＭｏｄには、経路変更の対象となるフローを別の経路に転送することを指示するフローテーブルのエントリが含まれている。ＯＦスイッチは、当該ＦｌｏｗＭｏｄを受信することによって、フローテーブルを書き換え、経路変更の対象
のフローをＦｌｏｗＭｏｄで指定された別の経路へと転送するようになる。これによって、経路変更の対象のフローの経路が変更される。
【００１０】
一方、例えば、ＰａｃｋｅｔＩｎとＰａｃｋｅｔＯｕｔとを用いたフローの経路変更は、以下の通りである。ＯＦコントローラは、ＦｌｏｗＭｏｄを用いて、ＰａｃｋｅｔＩｎを用いて経路変更の対象のフローのパケットをＯＦコントローラへと転送させるようにＯＦスイッチのフローテーブルを設定する。ＯＦコントローラは、経路変更の対象のフローのパケットを含むＰａｃｋｅｔＩｎに対して、当該パケットの出力ポートとして別の経路に接続されるポートを指定するＰａｃｋｅｔＯｕｔを送信する。
【００１１】
ＯＦスイッチは、当該ＰａｃｋｅｔＯｕｔを受信することで、当該ＰａｃｋｅｔＯｕｔに含まれている経路変更の対象のフローのパケットを、指定された別の経路に接続されるポートから出力する。これによって、経路変更の対象のフローの経路が変更される。
【００１２】
例えば、ＰａｃｋｅｔＯｕｔを用いる経路変更の方が、ＦｌｏｗＭｏｄを用いる方法よりもフローテーブルの書き換えの回数が少ない。フローテーブルの書き換えには時間を要するため、より高速な経路変更が望まれる場合には、ＰａｃｋｅｔＯｕｔを用いる経路変更が採用されることがある。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１３−１１８６９９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、ＰａｃｋｅｔＯｕｔを用いる経路変更では、経路変更の対象のフローのパケットすべてがＰａｃｋｅｔＩｎによってＯＦコントローラへと転送される。ＰａｃｋｅｔＩｎによってＯＦコントローラへと転送されたパケットの転送処理は、ＯＦコントローラのＣＰＵ（Central Processing Unit）によって行われる。そのため、ＯＦコントロ
ーラのＣＰＵの負荷が増大し、経路変更対象のフローに加え、ＯＦコントローラのＣＰＵで処理される他のフローも転送遅延が大きくなる可能性がある。
【００１５】
本発明の一態様は、パケットの転送処理に係るＣＰＵへの負荷を低減可能な通信制御装置、通信制御方法、及び、通信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の態様の一つは、複数のスイッチを制御する通信制御装置である。通信制御装置は、制御対象の複数のスイッチそれぞれの負荷情報を受信する受信部と、所定の処理のロジックを実行するロジックデバイスと、プロセッサとを備える。通信制御装置のプロセッサは、第１の条件が負荷情報によって満たされた場合に、複数のスイッチのうちの第１のスイッチから受信されるパケットの経路情報の要求について、第１の条件が満たされた場合の経路へのパケットの出力指示を第１のスイッチに通知する処理をロジックデバイスに実行させる。
【発明の効果】
【００１７】
開示の通信制御装置、通信制御方法、及び、通信制御プログラムによれば、パケットの転送処理に係る通信制御装置のＣＰＵへの負荷を低減することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、第１実施形態に係る通信システムのシステム構成の一例を示す図である。
【図２】図２は、映像配信サーバと端末との間の通信の一例を示す図である。
【図３】図３は、負荷情報パケットのフォーマットの一部の一例を示す図である。
【図４】図４は、通信パケットのフォーマットの一部の一例である。
【図５】図５は、コントローラのハードウェア構成の一例を示す図である。
【図６】図６は、コントローラの機能構成の一例を示す図である。
【図７】図７は、負荷情報管理テーブルの一例である。
【図８】図８は、トポロジ情報テーブルの一例である。
【図９】図９は、振分判定テーブルの一例である。
【図１０】図１０は、フロー管理テーブルの一例である。
【図１１Ａ】図１１Ａは、転送制御部の処理のフローチャートの一例である。
【図１１Ｂ】図１１Ｂは、転送制御部の処理のフローチャートの一例である。
【図１２】図１２は、具体例に係る通信システムの初期状態におけるスイッチ＃１、＃２、＃４、＃５のフローテーブルの一例である。
【図１３】図１３は、具体例に係る通信システムの初期状態におけるスイッチ＃３のフローテーブルの一例である。
【図１４】図１４は、優先ルートであるルート＃１が混雑し始めた場合のフローＡ、フローＢの経路の一例を示す図である。
【図１５】図１５は、図１４に示される処理後のコントローラのフロー管理テーブルの一例である。
【図１６】図１６は、図１４に示される処理後のスイッチ＃１のフローテーブルの一例である。
【図１７】図１７は、図１４の後、ルート＃１がさらに混雑してきた場合のフローＡ、フローＢの経路の一例を示す図である。
【図１８】図１８は、図１７に示される処理後のコントローラのフロー管理テーブルの一例である。
【図１９】図１９は、図１７に示される処理後のスイッチ＃１のフローテーブルの一例である。
【図２０】図２０は、図１７の後、端末へ入力されるトラフィック量が増大した場合のフローＡ、フローＢの経路の一例を示す図である。
【図２１】図２１は、図２０に示される処理後のコントローラのフロー管理テーブルの一例である。
【図２２】図２２は、図２０の後、端末へ入力されるトラフィック量が減少した場合のフローＡ、フローＢの経路の一例を示す図である。
【発明を実施するための形態】
【００１９】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００２０】
＜第１実施形態＞
図１は、第１実施形態に係る通信システム１００のシステム構成の一例を示す図である。通信システム１００は、例えば、ＳＤＮのネットワークである。通信システム１００は、例えば、ＯＦスイッチ＃１〜＃５と、ＯＦスイッチを制御するＯＦコントローラ１と、映像配信サーバ３と、端末４とを含む。ＯＦスイッチ＃１〜＃５は、区別されない場合には、ＯＦスイッチ２と表記する。以下、ＯＦコントローラ１、ＯＦスイッチ２を、それぞれ、コントローラ１、スイッチ２と称する。ＯＦコントローラ１は、「通信制御装置」の一例である。ＯＦスイッチ２は、「制御対象のスイッチ」の一例である。
【００２１】
通信システム１００では、コントローラ１とスイッチ２とが接続されるネットワークと、スイッチ２、映像配信サーバ３、及び、端末４が接続されるネットワークとは、物理的
又は論理的に分離されている。コントローラ１とスイッチ２との間の制御信号が流れるネットワークを制御プレーンという。スイッチ２間で中継されるユーザ信号が流れるネットワークをデータプレーンという。図１では、制御プレーンの通信は二重線で、データプレーンの通信は一重線で示されている。ＰａｃｋｅｔＩｎ、ＰａｃｋｅｔＯｕｔ、ＦｌｏｗＭｏｄ等のＯＦメッセージは制御プレーンを流れる。
【００２２】
映像配信サーバ３は、映像コンテンツを保持し、端末４からの要求に応じて対象の映像コンテンツを端末４に送信する。
【００２３】
図１には、コントローラ１及び各スイッチ２それぞれの接続関係、映像配信サーバ３及び端末４のＩＰ（Internet Protocol）アドレスの割り当ての一例も示されている。以下
、通信システム１００の接続関係、ＩＰアドレスの割当は、図１に示されるものを前提とする。
【００２４】
図２は、映像配信サーバ３と端末４との間の通信の一例を示す図である。図２では、簡略化のため、制御プレーンの通信は省略されている。映像配信サーバ３と端末４との間には、例えば、フローＡ、フローＢの２種類のフローが流れていることを想定する。フローＡ及びフローＢはともに、送信元を映像配信サーバ３とし、宛先を端末４とするフローである。
【００２５】
フローとは、例えば、通信システム１００内を流れる、同じ識別情報で識別されるパケットの集まりのことである。フローを識別するフロー識別情報には、例えば、少なくとも、宛先及び送信元ＩＰアドレスと、宛先及び送信元ポート番号とが用いられ、オプションとして、プロトコルタイプ、ヘッダ内の所定の情報が用いられる。
【００２６】
フローＡは、例えば、音声データ、映像データ、又は音声データ又は動画データ等のストリーミング等の低遅延が望まれるフローである。一方、フローＢは、例えば、音声データ又は映像データ等をダウンロードするような、遅延を許容可能なフローである。したがって、第１実施形態では、フローＢよりもフローＡの方が、優先度が高く設定されている。
【００２７】
映像配信サーバ３から端末４への経路には、スイッチ＃１、スイッチ＃２、スイッチ＃３の順で通過するルート＃１と、スイッチ＃１、スイッチ＃４、スイッチ＃５、スイッチ＃３の順で通過するルート＃２と、の２つの経路が存在する。例えば、ルート＃２よりもルート#１の方が経由するスイッチの数が少ないので、ルート＃１の方が転送遅延が小さ
い。そのため、第１実施形態では、ルート＃１は優先ルートとして用いられる。ルート＃２は迂回ルートとして用いられる。初期状態では、フローＡ、フローＢは優先ルートであるルート＃１を通過するように、各スイッチ２は設定されている。
【００２８】
第１実施形態では、コントローラ１は、各スイッチ２から、所定の周期で負荷情報を受信する。負荷情報は、例えば、各スイッチ２の処理負荷を示す情報である。コントローラ１は、負荷情報に基づいて、優先ルートであるルート＃１の混雑度を監視する。コントローラ１は、ルート＃１が混雑し始めると、優先度の低いフローＢの経路を優先ルートであるルート＃１から迂回ルートであるルート＃２へと変更させるように制御を行う。負荷情報は、「負荷情報」の一例である。
【００２９】
第１実施形態では、コントローラ１は、ＰａｃｋｅｔＯｕｔを用いる経路変更を行う。具体的には、コントローラ１は、優先ルートであるルート＃１のトラフィック量が所定値に達すると、ＰａｃｋｅｔＩｎによるフローＢのパケットのコントローラ１への転送をスイッチ＃１のフローテーブルに設定する。当該フローテーブルの設定は、例えば、Ｆｌｏ
ｗＭｏｄを用いて行われる。スイッチ＃１がフローテーブルの設定の対象となるのは、スイッチ＃１がルート＃１とルート＃２との分岐点に位置するスイッチ２であるためである。
【００３０】
次に、コントローラ１は、スイッチ＃１からフローＢのパケットを含むＰａｃｋｅｔＩｎを受信すると、当該パケットの出力ポートとしてルート＃２に接続するポートの指定を含むＰａｃｋｅｔＯｕｔをスイッチ＃１に送信する。これによって、フローＢの経路がルート＃１からルート＃２に変更される。
【００３１】
第１実施形態では、コントローラ１は、ＣＰＵの他にＰＬＤ（Programmable Logic Device）を備える。第１実施形態では、コントローラ１は、スイッチ＃１からのフローＢの
パケットを含むＰａｃｋｅｔＩｎに対してＰａｃｋｅｔＯｕｔで応答する処理を、コントローラ１が備えるＰＬＤに実行させる。これによって、ＰａｃｋｅｔＩｎの処理によるＣＰＵへの処理負荷を低減させることができる。
【００３２】
また、ＣＰＵによる処理はソフトウェア処理であるが、ＰＬＤによる処理はハードウェア処理であるため、ＰＬＤの方がＣＰＵよりも処理速度が速い。フローＢに関するＰａｃｋｅｔＩｎをＰＬＤが処理することによって、ルート＃２を用いて転送されるフローＢの転送遅延をより小さく抑えることができる。以下、スイッチ２からのＰａｃｋｅｔＩｎに対して迂回ルートへの出力を指示するＰａｃｋｅｔＯｕｔで応答してパケットを転送するコントローラ１の処理を、単に、パケット転送処理と称する。
【００３３】
ＰａｃｋｅｔＩｎは、「パケットの経路情報の要求」の一例である。ＰａｃｋｅｔＩｎはフローテーブルのエントリの問合せに用いられるメッセージであるので、フローテーブルのエントリは、「パケットの経路情報」の一例である。ＰａｃｋｅｔＯｕｔは、「パケットの出力指示」の一例である。ＰａｃｋｅｔＩｎを用いて経路変更の対象のフローのパケットをコントローラ１へ転送するようにスイッチ２のフローテーブルを設定するＦｌｏｗＭｏｄは、「パケットの経路情報の要求の送信指示」の一例である。パケット転送処理は、「第１のスイッチから受信されるパケットの経路情報の要求について、前記第１の条件が満たされた場合の経路への前記パケットの出力指示を前記第１のスイッチに通知する処理」の一例である。
【００３４】
＜通信システムで用いられるパケット＞
図３は、負荷情報パケットのフォーマットの一部の一例を示す図である。負荷情報パケットは、スイッチ２からコントローラ１への負荷情報の送信に用いられるパケットである。したがって、負荷情報パケットは、制御プレーンを流れるパケットである。スイッチ２は、所定の周期で負荷情報パケットをコントローラ１に送信する。負荷情報パケットの送信周期は、例えば、１秒から数十秒の間で通信システム１００の管理者によって任意に設定される。
【００３５】
図３では、負荷情報パケットのフォーマットのうち、第１実施形態に関わる一部が抽出されて示されている。負荷情報パケットは、ヘッダ部に、宛先アドレスと送信元アドレスとのフィールドを含む。宛先アドレスのフィールドには、コントローラ１のＩＰアドレスが設定される。送信元アドレスのフィールドには、スイッチ２のＩＰアドレスが設定される。
【００３６】
また、負荷情報パケットは、データ部に、ポート番号、入力／出力、負荷率のフィールドを含む。ポート番号のフィールドには、スイッチ２が備えるポートのうち対象となるポートの識別番号が格納される。
【００３７】
入力／出力のフィールドには、負荷率のフィールドに格納される情報が対象のポートの入力に関する情報であるのか、出力に関する情報であるのかを示す情報が格納される。例えば、入力／出力のフィールドに格納される、対象のポートの入力に関する情報であるのか、出力に関する情報であるのかを示す情報は、フラグである。
【００３８】
例えば、フラグが０である場合には、負荷率のフィールドに格納される情報が対象のポートの入力に関する情報であることが示される。例えば、フラグが１である場合には、負荷率のフィールドに格納される情報が対象のポートの出力に関する情報であることが示される。
【００３９】
負荷率のフィールドには、例えば、対象のポートの入力又は出力方向のパケット流量率が格納される。以下、ポートの入力方向のパケット流量率は、入力流量率と称される。ポートの出力方向のパケット流量率は、出力流量率と称される。
【００４０】
負荷情報パケットのデータ部には、例えば、スイッチ２が保持する全てのポートの入力及び出力について、ポート番号、入力／出力、負荷率のフィールドの組合せが含まれる。ただし、これに限定されず、スイッチ２は、例えば、スイッチ２が保持する全てのポートそれぞれについて、入力及び出力に関する情報を含む負荷情報パケットを作成し、コントローラ１に送信してもよい。
【００４１】
なお、負荷情報パケットで送信される情報は、ポートの入力又は出力流量率に限定されない。例えば、負荷情報パケットで、スイッチ２のＣＰＵの使用率等の情報が送信されてもよい。
【００４２】
図４は、通信パケットのフォーマットの一部の一例である。通信パケットは、ユーザデータの伝送に用いられるパケットであり、各スイッチ２が中継を行うパケットである。したがって、通信パケットは、データプレーンを流れるパケットである。図４では、通信パケットのフォーマットのうち、第１実施形態に関わる一部が抽出されて示されている。
【００４３】
通信パケットのヘッダ部には、宛先アドレス、送信元アドレス、フロー種別を示す情報を格納するフィールドが含まれている。例えば、宛先が端末４である場合には、宛先アドレスのフィールドには端末４のＩＰアドレス１０．１．１．２０が格納される。例えば、送信元が映像配信サーバ３である場合には、送信元アドレスのフィールドには映像配信サーバ３のＩＰアドレス１０．１．１．１０が格納される。
【００４４】
フロー種別を示す情報を格納するフィールドは、宛先アドレス及び送信元アドレス以外でフロー識別情報として用いられる情報を格納するフィールドを示す。例えば、フロー識別情報として、宛先及び送信元ＩＰアドレス以外に、宛先及び送信元ポート番号が用いられる場合には、フロー種別を示す情報を格納するフィールドには、宛先ポート番号と送信元ポート番号とのフィールドが相当する。
【００４５】
＜装置構成＞
図５は、コントローラ１のハードウェア構成の一例を示す図である。コントローラ１は、例えば、専用又は汎用のコンピュータである。コントローラ１は、ＣＰＵ  １０１、メモリ１０２、ＰＬＤ  １０３、ネットワークインタフェース１０４、外部記憶装置インタフェース１０５、入出力装置インタフェース１０６を備える。ＣＰＵ  １０１、メモリ１０２、ＰＬＤ  １０３、ネットワークインタフェース１０４、外部記憶装置インタフェース１０５、入出力装置インタフェース１０６は、バスによって電気的に接続される。
【００４６】
メモリ１０２は、主記憶装置として用いられる記憶装置である。メモリ１０２は、例え
ば、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）を含む。ＲＡＭは、例えば、ＤＲＡＭ（Dynamic RAM）、ＳＲＡＭ（Static RAM）、ＳＤＲＡＭ（Synchronous
DRAM）、のような半導体メモリである。メモリ１０２は、ＣＰＵ  １０１に、ＲＯＭや外部記憶装置に格納されているプログラムをロードする作業領域を提供したり、バッファとして用いられたりする。
【００４７】
外部記憶装置インタフェース１０５は、外部記憶装置とのインタフェースである。外部記憶装置は、例えば、不揮発性メモリである。不揮発性メモリは、例えば、ＥＰＲＯＭ（Erasable Programmable ROM）、又はハードディスクドライブ（Hard Disk Drive）等である。外部記憶装置は、例えば、ＯＳ（Operating System）、ＯＦコントローラ用プログラム、処理振分プログラム、その他アプリケーションプログラム等が格納される。
【００４８】
ＯＦコントローラ用プログラムは、コンピュータをＯｐｅｎＦｌｏｗのコントローラとして動作させるためのプログラムである。処理振分プログラムは、パケット転送処理をＰＬＤ  １０３に実行させるためのプログラムである。なお、外部記憶装置は、コントローラ１の内部に搭載されてもよい。
【００４９】
ＰＬＤ  １０３は、Ｉ／Ｏモジュール、論理回路、配線リソース、メモリ等の電子回路を備える電子部品である。ＰＬＤ  １０３は、プログラム可能な論理回路で、プログラムされたロジックを実行する。具体的には、ＰＬＤ  １０３は、配線リソースによるＩ／Ｏモジュール及び論理回路間の接続関係がメモリに書き込まれることによって、所定の処理のロジックを実行可能となる。ＰＬＤ  １０３のメモリに、配線リソースによるＩ／Ｏモジュール及び論理回路間の接続関係を書き込むことを、例えば、コンフィグレーションと称する。ロジックとは、例えば、処理の手順、方法、又は、内容を示す。
【００５０】
ＰＬＤ  １０３のコンフィグレーションは、例えば、コントローラ１の稼働中でも変更可能である。なお、ＰＬＤ  １０３のコンフィグレーションの変更は、例えば、ＣＰＵ  １０１によるＰＬＤのコンフィグレーション変更のためのプログラムの実行によって行われる。ＰＬＤのコンフィグレーション変更のためのプログラムは、例えば、外部記憶装置に格納されている。ＰＬＤ  １０３は、「ロジックデバイス」の一例である。ただし、「ロジックデバイス」はＰＬＤ  １０３に限定されない。「ロジックデバイス」の他の一例は、例えば、ＦＰＧＡ（Field Programmable Gate Array）である。また、「ロジックデ
バイス」はプログラミング可能な論理回路に限定されず、ＡＳＩＣ（Application Specific Integrated Circuit）等のプログラミング可能でない論理回路であってもよい。
【００５１】
ＣＰＵ  １０１は、外部記憶装置に保持されたＯＳやプログラムをメモリ１０２にロードして実行することによって、様々な処理を実行する。ＣＰＵ  １０１は、複数であってもよい。ＣＰＵ  １０１は、「プロセッサ」の一例である。
【００５２】
ネットワークインタフェース１０４は、例えば、光ケーブル、ＬＡＮ（Local Area Network）ケーブル等の有線のネットワーク回線のケーブルを接続する回路及びポートである。
【００５３】
入出力装置インタフェース１０６は、入力装置、及び、出力装置とのインタフェースである。入力装置は、例えば、キーボード、マウス等のポインティングデバイスである。出力装置は、例えば、ディスプレイ、プリンタである。
【００５４】
なお、図５に示されるコントローラ１のハードウェア構成は、一例であり、上記に限られず、実施の形態に応じて、適宜、構成要素の省略や置換、追加が可能である。例えば、コントローラ１は、ＣＰＵ  １０１の他に、ＤＳＰ（Digital Signal Processor）、ネッ
トワークプロセッサ等のプロセッサを備えてもよい。
【００５５】
スイッチ２は、例えば、専用又は汎用のコンピュータである。スイッチ２は、ハードウェア構成として、ＣＰＵ、メモリ、ネットワークインタフェース、入出力インタフェース等を備える。各ハードウェア構成要素については、概要はコントローラ１と同様であり、説明を省略する。スイッチ２は、メモリに、ＯｐｅｎＦｌｏｗスイッチ用プログラムと、負荷情報送信プログラムとを記憶する。ＯｐｅｎＦｌｏｗスイッチ用プログラムは、ＯｐｅｎＦｌｏｗによって定義されているＯｐｅｎＦｌｏｗスイッチとしての処理を実行させるためのプログラムである。負荷情報送信プログラムは、所定の周期で負荷情報をコントローラ１に送信するためのプログラムである。
【００５６】
図６は、コントローラ１の機能構成の一例を示す図である。コントローラ１は、機能構成要素として、通信部１１、負荷情報管理部１２、ＰＬＤ転送処理部１３、ＣＰＵ転送処理部１４、転送制御部１５、負荷情報管理テーブル１６、トポロジ情報テーブル１７、振分判定テーブル１８、フロー管理テーブル１９を備える。
【００５７】
通信部１１は、例えば、コントローラ１のＣＰＵ  １０１がＯＳを実行してネットワークインタフェース１０４を利用することによって達成される機能構成要素の一つである。通信部１１が接続するネットワークは制御プレーンであり、通信部１１が入出力を行うのは、制御プレーンを流れるパケットである。
【００５８】
通信部１１は、ネットワークから入力されるパケットを所定の機能構成要素に出力する。具体的には、通信部１１は、負荷情報パケット（図３参照）が入力された場合には、負荷情報パケットを負荷情報管理部１２に出力する。通信部１１は、例えば、ＰａｃｋｅｔＩｎが入力された場合には、転送制御部１５からの指示に従って、ＰａｃｋｅｔＩｎをＰＬＤ転送処理部１３又はＣＰＵ転送処理部１４に出力する。また、通信部１１は、例えば、ＰＬＤ転送処理部１３、ＣＰＵ転送処理部１４から入力されるパケットをネットワークに出力する。
【００５９】
ＰＬＤ転送処理部１３は、ＰＬＤ  １０３と、ＣＰＵ  １０１がＰＬＤ  １０３のコンフィグレーションの変更のためのプログラムを実行することとによって達成される。第１実施形態では、ＰＬＤ転送処理部１３は、転送制御部１５からの指示によって、指定されたフローについてパケット転送処理を実行する。ＰＬＤ転送処理部１３がパケット転送処理を行う場合には、ＰＬＤ転送処理部１３には通信部１１からＰａｃｋｅｔＩｎが入力され、ＰＬＤ転送処理部１３からは通信部１１にＰａｃｋｅｔＯｕｔが出力される。
【００６０】
ＣＰＵ転送処理部１４は、コントローラ１のＣＰＵ  １０１がＯＦコントローラ用プログラムを実行することによって達成される機能構成要素である。ＣＰＵ転送処理部１４は、通信部１１から、パケットの入力を受ける。ＣＰＵ転送処理部１４は、入力されたパケットに応じたＯｐｅｎＦｌｏｗコントローラとしての処理を行う。
【００６１】
ＣＰＵ転送処理部１４は、パケットバッファ１４Ｂを備えている。パケットバッファ１４Ｂは、例えば、メモリ１０２の記憶領域の一部に作成される。ＣＰＵ転送処理部１４は、転送制御部１５から指定されたフローについてのＰａｃｋｅｔＩｎが入力された場合には、当該ＰａｃｋｅｔＩｎから当該フローのパケット本体を抽出し、抽出したパケットをパケットバッファ１４Ｂに格納する。パケットバッファ１４Ｂに格納されたパケットは、転送制御部１５からの指示に従って、ＣＰＵ転送処理部１４によって、パケットバッファ１４Ｂから読み出され、ＰａｃｋｅｔＯｕｔに含められて所定のスイッチ２に送信される。
【００６２】
また、ＣＰＵ転送処理部１４は、転送制御部１５からの指示にしたがってＦｌｏｗＭｏｄを作成し、作成したＦｌｏｗＭｏｄを転送制御部１５から指定されたスイッチ２に送信する処理も行う。
【００６３】
負荷情報管理部１２、転送制御部１５、負荷情報管理テーブル１６、トポロジ情報テーブル１７、振分判定テーブル１８、及び、フロー管理テーブル１９は、例えば、それぞれ、コントローラ１のＣＰＵ  １０１が処理振分プログラムを実行することによって達成される機能構成要素の一つである。
【００６４】
負荷情報管理部１２は、通信部１１から負荷情報パケットの入力を受ける。負荷情報管理部１２は、入力された負荷情報パケットの内容で、後述の負荷情報管理テーブル１６を更新する。
【００６５】
転送制御部１５は、後述の負荷情報管理テーブル１６と振分判定テーブル１８とに基づいて、経路変更の対象となるフローを検出する。転送制御部１５は、ＰａｃｋｅｔＩｎを用いて経路変更の対象のフローのパケットをコントローラ１へ転送する設定を該当するスイッチ２に行うように、ＣＰＵ転送処理部１４に指示する。
【００６６】
また、転送制御部１５は、振分判定テーブル１８に基づいて、経路変更の対象のフローについてのパケット転送処理をＰＬＤ転送処理部１３又はＣＰＵ転送処理部１４のいずれで行うかを判定し、ＰＬＤ転送処理部１３又はＣＰＵ転送処理部１４に経路変更の対象のフローのパケット転送処理を指示する。転送制御部１５の処理の詳細は後述される。
【００６７】
図７は、負荷情報管理テーブル１６の一例である。負荷情報管理テーブル１６は、各スイッチ２から所定の周期で送信される負荷情報を保持するテーブルである。負荷情報管理テーブル１６は、例えば、コントローラ１のメモリ１０２に保持されている。図７は、負荷情報パケットが図３で示されるフォーマットである場合の負荷情報管理テーブル１６である。
【００６８】
負荷情報管理テーブル１６のエントリには、例えば、スイッチ番号、ポート番号、入力流量率、出力流量率が格納されている。入力流量率又は出力流量率は、ポートの最大転送帯域に対するパケットの入力量又は出力量の割合が百分率で示されたものである。
【００６９】
負荷情報管理テーブル１６は、各スイッチ２から負荷情報パケットが届くたびに、負荷情報管理部１２によって更新される。
【００７０】
図８は、トポロジ情報テーブル１７の一例である。トポロジ情報テーブル１７は、通信システム１００内の送信元及び宛先の各組合せについて、送信元と宛先との間に存在する経路の情報を保持する。トポロジ情報テーブル１７は、例えば、予め通信システム１００の管理者によって、メモリ１０２に保持されている。図８では、送信元としての映像配信サーバ３と宛先としての端末４との間に存在する２つの経路（図２参照）の情報が示されている。
【００７１】
トポロジ情報テーブル１７のエントリには、例えば、ルート名、通信元アドレス、宛先アドレス、スイッチ数、スイッチ番号が格納されている。トポロジ情報テーブル１７のエントリに格納されているスイッチ数は、当該経路上のスイッチ２の台数である。第１実施形態では、経由するスイッチ２の台数が最も少ない経路が優先ルートとして用いられ、その他の経路は迂回ルートとして用いられる。図８に示される例では、ルート＃１のスイッチ数は３であり、ルート＃２のスイッチ数は４であるので、ルート＃１が優先ルート、ルート＃２は迂回ルートである。ただし、経路の優先度は、経由するスイッチ２の台数に基
づくことに限定されない。
【００７２】
トポロジ情報テーブル１７のエントリに格納されているスイッチ番号は、当該経路上の各スイッチ２の識別番号である。トポロジ情報テーブル１７のエントリには、スイッチ番号とともに、当該経路上における各スイッチ２の入力ポート及び出力ポートの識別番号が格納されている。また、トポロジ情報テーブル１７のエントリに格納されているスイッチ番号は経由順で格納されている。
【００７３】
図９は、振分判定テーブル１８の一例である。振分判定テーブル１８は、通信システム１００内を流れるフローの種別ごとに、パケットの処理の振り分けルールと通信形態との対応付けとを保持する。図９では、映像配信サーバ３を送信元、端末４を宛先とするフローについての、フロー種別毎のパケットの処理の振り分けルールが示されている。
【００７４】
図９に示される例では、フロー種別は、「通常」と「低遅延」との２つが示されている。フロー種別「低遅延」のフローの方が、フロー種別「通常」のフローよりも優先度が高いフローである。フロー種別が「通常」、「低遅延」のいずれとなるかは、通信パケット内のフロー種別を示す情報を格納するフィールドの値によって判定される。また、「通常」、「低遅延」のフローの分類は、例えば、予め通信システム１００の管理者によって設定されている。
【００７５】
図９に示される例では、パケットの処理の振り分けルールとして、スイッチ＃２のポート＃１の入力流量率と、スイッチ＃３のポート＃１０の出力流量率とが用いられている。スイッチ＃２のポート＃１の入力流量率は、映像配信サーバ３と端末４間の優先ルートであるルート＃１の混雑度を測る尺度の一つとして用いられている。ルートの混雑度は、例えば、ルートの輻輳度と言い換えることができる。
【００７６】
ただし、優先ルートであるルート＃１の混雑度を測る尺度として用いられるのは、スイッチ＃２のポート＃１の入力流量率に限定されない。例えば、ルート＃１の混雑度を測る尺度として用いられるのは、ルート＃１のうちルート＃２と共通していない部分に存在するスイッチ２のポートの入力流量率又は出力流量率であればよい。また、ルート＃１の混雑具合を測る尺度として、ルート＃１のうちルート＃２と共通していない部分に存在するスイッチ２の複数のポートの入力流量率又は出力流量率を組み合わせて用いてもよい。
【００７７】
スイッチ＃３のポート＃１０の出力流量率は、端末４へ入力されるトラフィック量を測る尺度の一つとして用いられている。ただし、端末４へ入力されるトラフィック量を測る尺度として用いられるのは、スイッチ＃３のポート＃１０の出力流量率に限定されない。
【００７８】
図９に示される例では、通信形態として、３種類の通信形態が定義されている。各通信形態は、識別番号によって識別される。通信形態番号「１」の通信形態では、当該フローの転送に優先ルートが用いられる。通信形態番号「１」の通信形態では、コントローラ１は介さず、スイッチ２の転送によってパケットが転送される。初期状態では、いずれのフローも通信形態番号「１」の通信形態である。
【００７９】
通信形態番号「２」の通信形態では、当該フローの転送に迂回ルートが用いられる。通信形態番号「２」の通信形態では、当該フローのパケットをＰａｃｋｅｔＩｎによってコントローラ１に転送させ、当該フローについてパケット転送処理をＰＬＤ転送処理部１３に実行させる。
【００８０】
通信形態番号「３」の通信形態では、当該フローのパケットはコントローラ１においてバッファされる。
【００８１】
図９に示される例では、スイッチ＃２のポート＃１の入力流量率が０〜４９％で、スイッチ＃３のポート＃１０の出力流量率が０〜８９％である場合には、フロー種別「通常」のフローは、通信形態番号「１」の通信形態となることが定義されている。スイッチ＃２のポート＃１の入力流量率が５０％以上で、スイッチ＃３のポート＃１０の出力流量率が０〜８９％である場合には、フロー種別「通常」のフローは、通信形態番号「２」の通信形態となることが定義されている。スイッチ＃３のポート＃１０の出力流量率が９０％である場合には、フロー種別「通常」のフローは、通信形態番号「３」の通信形態となることが定義されている。
【００８２】
スイッチ＃２のポート＃１の入力流量率が０〜７９％である場合には、フロー種別「低遅延」のフローは、通信形態番号「１」の通信形態となることが定義されている。スイッチ＃２のポート＃１の入力流量率が８０％以上である場合には、フロー種別「低遅延」のフローは、通信形態番号「２」の通信形態となることが定義されている。
【００８３】
図９に示される振分判定テーブル１８では、優先ルートであるルート＃１が混雑し始めると、優先度の低いフロー種別「通常」のフローから迂回ルートであるルート＃２に経路変更されることが示される。例えば、スイッチ＃２のポート＃１の入力流量率が５０％以上で、優先ルートであるルート＃１が混雑し始めたことが判定される。これによって、より優先度の高いフロー種別「低遅延」のフローの転送遅延が増加することを抑制する。
【００８４】
なお、優先ルートと迂回ルートは、例えば、送信元と宛先との組み合わせごとに決められている。そのため、優先ルートの混雑度を測る尺度、及び、宛先へ入力されるトラフィック量を測る尺度として、いずれのスイッチ２のいずれのポートの負荷情報を用いるかも、送信元と宛先との組み合わせごとに適宜決められる。
【００８５】
優先ルートは、「第１の経路」の一例である。迂回ルートは、「第２の経路」、「第１の条件が満たされた場合の経路」の一例である。優先ルートの混雑度を測る尺度に関する条件は、「第１の条件」、「第１の経路の混雑度に関する条件」の一例である。宛先へ入力されるトラフィック量を測る尺度に関する条件は「第１の経路の宛先の処理負荷に関する第２の条件」の一例である。
【００８６】
より具体的には、図９に示される振分判定テーブル１８のフロー種別「通常」についての「スイッチ＃２のポート＃１の入力流量率が５０％以上」というパケットの処理の振り分けルールは、「第１の条件」の一例である。また、図９に示される振分判定テーブル１８のフロー種別「低遅延」についての「スイッチ＃２のポート＃１の入力流量率が８０％以上」というパケットの処理の振り分けルールは、「第１の条件」の他の一例である。図９に示される振分判定テーブル１８のスイッチ＃３のポート＃１０の出力流量率が９０％以上というパケットの処理の振り分けルールは、「第１の経路の宛先の処理負荷に関する第２の条件」の一例である。通信形態番号「２」の通信形態は、「第１の条件が満たされた場合の経路に関する情報」の一例である。
【００８７】
なお、図９に示される振分判定テーブル１８は一例である。通信形態は、例えば、優先ルートの混雑度を測る尺度に関する条件、又は、宛先へ入力されるトラフィック量を測る尺度に関する条件のいずれかに基づいて決定されてもよい。例えば、コントローラ１は、スイッチ＃２のポート＃１の入力流量率が５０％以上であれば、スイッチ＃３のポート＃１０の出力流量率に関わらず、該当するフローの通信形態を通信形態番号「２」に変更することを判定してもよい。
【００８８】
図１０は、フロー管理テーブル１９の一例である。フロー管理テーブル１９は、通信シ
ステム１００内を流れているフローに関する情報を保持する。フロー管理テーブル１９は、例えば、メモリ１０２に保持されている。
【００８９】
フロー管理テーブル１９のエントリには、フロー名、送信元アドレス、宛先アドレス、フロー種別、通信形態番号が格納されている。フロー管理テーブル１９のエントリのフロー種別には、例えば、「通常」、「低遅延」のいずれかが格納される。フロー管理テーブル１９のエントリの通信形態番号には、当該フローに適用されている通信形態の通信形態番号が格納されている。
【００９０】
フロー管理テーブル１９のエントリには、フロー名、送信元アドレス、宛先アドレス、フロー種別は、例えば、通信システム１００の管理者によって予め入力されている。フロー管理テーブル１９のエントリの通信形態番号は、通信形態が変更になる度に、転送制御部１５によって更新される。
【００９１】
なお、負荷情報管理テーブル１６、トポロジ情報テーブル１７、振分判定テーブル１８、フロー管理テーブル１９それぞれは、図７〜図１０に示される例に限定されない。
【００９２】
＜処理の流れ＞
図１１Ａ及び図１１Ｂは、転送制御部１５の処理のフローチャートの一例である。図１１Ａ及び図１１Ｂに示される処理は、所定の周期で実行される。図１１Ａ及び図１１Ｂに示される処理の実行周期は、例えば、１０ミリ秒から１秒の間で通信システム１００の管理者によって任意に設定される。図１１Ａ及び図１１Ｂに示される処理の実行周期は、例えば、スイッチ２の負荷情報パケットの送信周期と同じであってもよい。
【００９３】
図１１Ａ及び図１１Ｂに示される処理は、図９に示される振分判定テーブル１８において定義されている通信形態を前提とした場合の処理である。図１１Ａ及び図１１Ｂに示される処理の実行主体は、コントローラ１のＣＰＵ  １０１であるが、便宜上、ＣＰＵ  １０１が処理振分プログラムを実行することによって達成される機能構成要素である転送制御部１５を主体として説明される。
【００９４】
ＯＰ１では、転送制御部１５は、負荷情報管理テーブル１６と振分判定テーブル１８とを照らし合わせ、各フローの通信形態を判定する。ＯＰ２では、転送制御部１５は、負荷情報管理テーブル１６と振分判定テーブル１８との照らし合わせの結果、通信形態が変更となるフローが存在するか否かを判定する。通信システム１００内を流れるフローの現在の通信形態は、第１実施形態では、フロー管理テーブル１９に保持されている（図１０参照）。
【００９５】
通信形態が変更となるフローが存在する場合には（ＯＰ２：ＹＥＳ）、処理がＯＰ３に進む。通信形態が変更となるフローが存在しない場合には（ＯＰ２：ＮＯ）、図１１Ａに示される処理が終了する。
【００９６】
ＯＰ３では、転送制御部１５は、通信形態が変更となるフローの変更後の通信形態番号が「１」であるか否かを判定する。以降、通信形態が変更となるフローを、対象フローと称する。対象フローの変更後の通信形態番号が「１」である場合には（ＯＰ３：ＹＥＳ）、処理がＯＰ４に進む。対象フローの変更後の通信形態番号が「１」でない場合には（ＯＰ３：ＮＯ）、処理が図１１ＢのＯＰ１１に進む。
【００９７】
ＯＰ４からＯＰ７の処理は、対象フローの変更後の通信形態番号が「１」である場合の処理である。ＯＰ４では、転送制御部１５は、パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されているか否かを判定する。対象フローの変更前の通信形態番号が「３
」である場合には、パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されているからである。
【００９８】
パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されている場合には（ＯＰ４：ＹＥＳ）、処理がＯＰ５に進む。パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されていない場合には（ＯＰ４：ＮＯ）、処理がＯＰ６に進む。
【００９９】
ＯＰ５では、転送制御部１５は、パケットバッファ１４Ｂ内の対象フローのパケットの出力ポートとして優先ルートに接続されるポートを指定するＰａｃｋｅｔＯｕｔを該当のスイッチ２に出力するように、ＣＰＵ転送処理部１４に指示する。これによって、ＣＰＵ転送処理部１４は、パケットバッファ１４Ｂ内の対象フローのパケットの出力ポートとして優先ルートに接続されるポートを指定するＰａｃｋｅｔＯｕｔを生成し、生成したＰａｃｋｅｔＯｕｔを該当のスイッチ２に出力する。
【０１００】
ＰａｃｋｅｔＯｕｔの送信先に該当するスイッチ２は、パケットバッファ１４Ｂに蓄積されているパケットが含まれていたＰａｃｋｅｔＩｎの送信元のスイッチ２である。また、ＣＰＵ転送処理部１４によって生成されるＰａｃｋｅｔＯｕｔには、例えば、パケットバッファ１４Ｂに蓄積されている対象フローのパケットと、当該パケットの出力ポートとして優先ルートに接続されている該当のスイッチ２のポートの指定とが含まれている。該当のスイッチ２のいずれのポートが優先ルートに接続されているかは、トポロジ情報テーブル１７を参照することによって取得される。
【０１０１】
ＯＰ６では、転送制御部１５は、対象フローのパケットを優先ルートへ転送する設定を該当のスイッチ２に送信するように、ＣＰＵ転送処理部１４に指示する。ＣＰＵ転送処理部１４は、転送制御部１５からの指示を受けて、対象フローのパケットの優先ルートへの転送を該当のスイッチ２のフローテーブルに設定するＦｌｏｗＭｏｄを該当のスイッチ２に送信する。これによって、該当のスイッチ２のフローテーブルが書き換えられ、該当のスイッチ２は、対象フローのパケットを優先ルートへ転送するようになる。
【０１０２】
ＯＰ６における該当のスイッチ２は、例えば、優先ルートと迂回ルートとの分岐点に位置するスイッチ２である。該当のスイッチ２に送信されるＦｌｏｗＭｏｄには、例えば、対象フローのフロー識別情報と、出力ポートとして優先ルートに接続されている該当のスイッチ２のポートの指定とが含まれている。優先ルートと迂回ルートとの分岐点に位置するスイッチ２、及び、該当のスイッチ２のいずれのポートが優先ルートに接続されているかは、トポロジ情報テーブル１７を参照することによって取得される。
【０１０３】
ＯＰ７では、転送制御部１５は、フロー管理テーブル１９の対象フローのエントリの通信形態番号を「１」に更新する。その後、図１１Ａに示される処理が終了する。
【０１０４】
図１１Ｂに示される処理は、対象フローの変更後の通信形態番号が「２」又は「３」である場合の処理である。ＯＰ１１では、転送制御部１５は、対象フローの変更後の通信形態番号が「２」であるか否かを判定する。対象フローの変更後の通信形態番号が「２」である場合には（ＯＰ１１：ＹＥＳ）、処理がＯＰ１２に進む。対象フローの変更後の通信形態番号が「２」でない場合には（ＯＰ１１：ＮＯ）、処理がＯＰ１７に進む。
【０１０５】
ＯＰ１２からＯＰ１６の処理は、対象フローの変更後の通信形態番号が「２」である場合の処理である。ＯＰ１２では、転送制御部１５は、パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されているか否かを判定する。
【０１０６】
パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されている場合には（ＯＰ１
２：ＹＥＳ）、処理がＯＰ１３に進む。パケットバッファ１４Ｂ内に対象フローのパケットが蓄積されていない場合には（ＯＰ１２：ＮＯ）、処理がＯＰ１４に進む。
【０１０７】
ＯＰ１３では、転送制御部１５は、パケットバッファ１４Ｂ内の対象フローのパケットの出力ポートとして迂回ルートに接続されるポートを指定するＰａｃｋｅｔＯｕｔを該当のスイッチ２に出力するように、ＣＰＵ転送処理部１４に指示する。これによって、ＣＰＵ転送処理部１４は、パケットバッファ１４Ｂ内の対象フローのパケットの出力ポートとして迂回ルートに接続されるポートを指定するＰａｃｋｅｔＯｕｔを生成し、生成したＰａｃｋｅｔＯｕｔを該当のスイッチ２に出力する。ＯＰ１３の処理は、ＯＰ５の処理と同様である。
【０１０８】
ＯＰ１４では、転送制御部１５は、ＰａｃｋｅｔＩｎを用いて対象フローのパケットをコントローラ１へ転送する設定を該当のスイッチ２に送信するように、ＰＬＤ転送処理部１３に指示する。ＰＬＤ転送処理部１３は、転送制御部１５からの指示を受けて、ＰａｃｋｅｔＩｎを用いる対象フローのパケットのコントローラ１への転送を該当のスイッチ２のフローテーブルに設定するＦｌｏｗＭｏｄを該当のスイッチ２に送信する。これによって、該当のスイッチ２は、対象フローのパケットを受信すると、当該パケットをＰａｃｋｅｔＩｎに含めてコントローラ１に転送するようになる。
【０１０９】
該当のスイッチ２は、例えば、優先ルートと迂回ルートとの分岐点に位置するスイッチ２である。該当のスイッチ２に送信されるＦｌｏｗＭｏｄには、例えば、対象フローのフロー識別情報と、ＰａｃｋｅｔＩｎの送信指示又は出力ポートとしてコントローラ１に接続されている該当のスイッチ２のポートの指定とが含まれている。
【０１１０】
ＯＰ１５では、転送制御部１５は、フロー管理テーブル１９の対象フローのエントリの通信形態番号を「２」に更新する。
【０１１１】
ＯＰ１６では、転送制御部１５は、対象フローについてのパケット転送処理の実行をＰＬＤ転送処理部１３に指示する。具体的には、転送制御部１５は、対象フローについてのＰａｃｋｅｔＩｎの入力に対して、出力ポートとして迂回ルートに接続されるポートを指定するＰａｃｋｅｔＯｕｔを出力するように、ＰＬＤ転送処理部１３に指示する。ＰＬＤ転送処理部１３には、指示とともに、例えば、対象フローのフロー識別情報、ＰａｃｋｅｔＯｕｔの送信先のスイッチ２の迂回ルートに接続されているポート番号とが入力される。転送制御部１５からの指示を受けて、ＰＬＤ転送処理部１３は、ＰＬＤ  １０３のコンフィグレーションの変更を行う。
【０１１２】
また、転送制御部１５は、通信部１１に対して、対象フローのＰａｃｋｅｔＩｎをＰＬＤ転送処理部１３に出力するように指示する。その後、図１１Ｂに示される処理が終了する。
【０１１３】
ＯＰ１７では、転送制御部１５は、対象フローの変更後の通信形態番号が「３」であるか否かを判定する。対象フローの変更後の通信形態番号が「３」である場合には（ＯＰ１７：ＹＥＳ）、処理がＯＰ１８に進む。対象フローの変更後の通信形態番号が「３」でない場合には（ＯＰ１７：ＮＯ）、図１１Ｂに示される処理が終了する。
【０１１４】
ＯＰ１８からＯＰ２０の処理は、対象フローの変更後の通信形態番号が「３」である場合の処理である。
【０１１５】
ＯＰ１８では、転送制御部１５は、ＰａｃｋｅｔＩｎを用いて対象フローのパケットをコントローラ１へ転送する設定を該当のスイッチ２に送信するように、ＰＬＤ転送処理部
１３に指示する。該当のスイッチ２は、例えば、優先ルートと迂回ルートとの分岐点に位置するスイッチ２である。ＯＰ１８の処理は、ＯＰ１４の処理と同様である。
【０１１６】
ＯＰ１９では、転送制御部１５は、フロー管理テーブル１９の対象フローのエントリの通信形態番号を「３」に更新する。
【０１１７】
ＯＰ２０では、転送制御部１５は、対象フローのパケットを含むＰａｃｋｅｔＩｎの入力に対して、当該ＰａｃｋｅｔＩｎに含まれるパケットをパケットバッファ１４Ｂに蓄積するようにＣＰＵ転送処理部１４に指示する。また、転送制御部１５は、通信部１１に対して、対象フローのＰａｃｋｅｔＩｎをＣＰＵ転送処理部１４に出力するように指示する。その後、図１１Ｂに示される処理が終了する。
【０１１８】
なお、図１１ＡのＯＰ２において、通信形態が変更となるフローが複数存在する場合には、転送制御部１５は、図１１ＡのＯＰ３以降の処理、及び、図１１Ｂに示される処理を、通信形態が変更となるフローそれぞれについて繰り返し実行する。
【０１１９】
なお、図１１Ａ及び図１１Ｂに示される処理では、パケットバッファ１４Ｂ内に蓄積されているパケットの出力に係る処理（ＯＰ４、ＯＰ５、ＯＰ１２、ＯＰ１３）と、通信形態の変更に係る処理（ＯＰ６、ＯＰ７、ＯＰ１４〜ＯＰ１６）とが、一連の処理として実行されている。ただし、これに限られず、パケットバッファ１４Ｂ内に蓄積されているパケットの出力に係る処理と通信形態の変更に係る処理とは、異なる契機で実行されてもよい。例えば、ＯＰ１〜ＯＰ５、及び、ＯＰ１１〜ＯＰ１３の、パケットバッファ１４Ｂ内に蓄積されているパケットの出力に係る処理は所定の周期で実行されてもよい。例えば、ＯＰ１〜ＯＰ３、ＯＰ６〜ＯＰ７、ＯＰ１１、ＯＰ１４〜ＯＰ１６、及び、ＯＰ１７〜ＯＰ２０の通信形態の変更に係る処理は、スイッチ２からＰａｃｋｅｔＩｎが届いたことを契機に実行されてもよい。
【０１２０】
＜具体例＞
具体例として、図１に示される通信システム１００において、映像配信サーバ３から端末４へのフローＡ、フローＢの経路が変更される場合について説明する。フローＡは、フローＢよりも優先度が高く、フロー種別「低遅延」のフローである。フローＢは、フロー種別「通常」のフローである。
【０１２１】
図１２は、具体例に係る通信システム１００の初期状態におけるスイッチ＃１、＃２、＃４、＃５のフローテーブルの一例である。図１２に示されるフローテーブルには、ポート＃１から送信元アドレス１０．１．１．１０、宛先アドレス１０．１．１．２０のパケットが入力された場合には、ポート＃１０から出力することを示す登録番号「１」のエントリが格納されている（図１参照）。
【０１２２】
図１２に示されるフローテーブルが、ルート＃１とルート＃２との分岐点に位置するスイッチ＃１（図２参照）のフローテーブルである場合には、登録番号「１」のエントリは該当パケットをルート＃１に転送することが示される。出力ポートであるスイッチ＃１のポート＃１０はルート＃１に接続されているポートであるからである。すなわち、初期状態では、フローＡ、フローＢともに優先ルートであるルート＃１に転送されることが示される。
【０１２３】
図１２に示されるフローテーブルが、スイッチ＃２のフローテーブルである場合には、登録番号「１」のエントリは該当パケットをルート＃１に転送することが示される。出力ポートであるスイッチ＃２のポート＃１０はルート＃１に接続されているポートであるからである。
【０１２４】
図１２に示されるフローテーブルが、スイッチ＃４及びスイッチ＃５のフローテーブルである場合には、登録番号「１」のエントリは該当パケットをルート＃２に転送することが示される。出力ポートであるスイッチ＃４及びスイッチ＃５のポート＃１０はルート＃２に接続されているポートであるからである。
【０１２５】
図１３は、具体例に係る通信システム１００の初期状態におけるスイッチ＃３のフローテーブルの一例である。図１３に示されるフローテーブルには、ポート＃１から送信元アドレス１０．１．１．１０、宛先アドレス１０．１．１．２０のパケットが入力された場合には、ポート＃１０から出力することを示す登録番号「１」のエントリが格納されている（図１参照）。また、図１３に示されるフローテーブルには、ポート＃５から送信元アドレス１０．１．１．１０、宛先アドレス１０．１．１．２０のパケットが入力された場合には、ポート＃１０から出力することを示す登録番号「２」のエントリが格納されている（図１参照）。
【０１２６】
スイッチ＃３はルート＃１とルート＃２との合流点に位置している（図２参照）。そのため、図１３に示されるスイッチ＃３のフローテーブルには、ルート＃１から入力されるパケットを転送するための登録番号「１」のエントリと、ルート＃２から入力されるパケットを転送するための登録番号「２」のエントリとが格納されている。
【０１２７】
したがって、図１２及び図１３より、通信システム１００の初期状態において、各スイッチ２にルート＃１とルート＃２とが設定されていることが示されている。
【０１２８】
具体例において、初期状態におけるコントローラ１のフロー管理テーブル１９は、図１０に示される通りである。
【０１２９】
図１４は、優先ルートであるルート＃１が混雑し始めた場合のフローＡ、フローＢの経路の一例を示す図である。（１）コントローラ１は、スイッチ＃２から、スイッチ＃２のポート＃１の入力流量率が５０％であることを含む負荷情報を受信する。スイッチ＃２からの当該負荷情報によって、優先ルートであるルート＃１が混雑し始めたことが示される。また、コントローラ１は、スイッチ＃３から、スイッチ＃３のポート＃１０の出力流量率が５０％であることを含む負荷情報がコントローラ１に送信される。これらの負荷情報の内容は、負荷情報管理テーブル１６に反映される。
【０１３０】
（２）コントローラ１は、負荷情報管理テーブル１６と振分判定テーブル１８に基づいて、フロー種別「通常」であるフローＢの通信形態を通信形態番号「２」の通信形態に変更することを判定する（図１１Ｂ、ＯＰ１１：ＹＥＳ）。すなわち、コントローラ１は、フローＢについてのパケット転送処理をＰＬＤ転送処理部１３に実行させることを判定する。
【０１３１】
（３）コントローラ１は、ＰａｃｋｅｔＩｎを用いてフローＢのパケットをコントローラ１へ転送することをスイッチ＃１のフローテーブルに設定する（図１１Ｂ、ＯＰ１４）。スイッチ＃１は、ルート＃１とルート＃２との分岐点に位置するスイッチ２である。
【０１３２】
これによって、スイッチ＃１は、フローＡのパケットはルート＃１に、フローＢのパケットはコントローラ１へＰａｃｋｅｔＩｎによって転送するようになる。
【０１３３】
（４）コントローラ１は、フローＢのパケットの出力ポートとしてルート＃２に接続されているポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信するように、ＰＬＤ転送処理部１３を設定する（図１１Ｂ、ＯＰ１６）。スイッチ＃１からフローＢのパケッ
トがＰａｃｋｅｔＩｎによってコントローラ１へ転送されると、コントローラ１のＰＬＤ転送処理部１３は、例えば、フローＢのパケットの出力ポートとしてルート＃２に接続されるポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信する。
【０１３４】
ＰＬＤ転送処理部１３から送信されるＰａｃｋｅｔＯｕｔには、例えば、ＰａｃｋｅｔＩｎによってコントローラ１に転送されたフローＢのパケットと、出力ポートとしてスイッチ＃１のポート＃５の指定とが含まれている。
【０１３５】
スイッチ＃１は、当該ＰａｃｋｅｔＯｕｔを受信すると、当該ＰａｃｋｅｔＯｕｔに含まれるフローＢのパケットを、ルート＃２に接続するポート＃５から出力する。これによって、フローＢの経路が、ルート＃１からルート＃２へ変更される。
【０１３６】
図１５は、図１４に示される処理後のコントローラ１のフロー管理テーブル１９の一例である。コントローラ１は、フローＢの通信形態を通信形態番号「１」の通信形態から通信形態番号「２」の通信形態に変更することを判定すると、フロー管理テーブル１９のフローＢのエントリの通信形態番号を「２」に更新する（図１１Ｂ、ＯＰ１５）。そのため、図１５に示されるフロー管理テーブル１９のフローＢのエントリの通信形態番号は「２」となっている。
【０１３７】
図１６は、図１４に示される処理後のスイッチ＃１のフローテーブルの一例である。スイッチ＃１のフローテーブルは、コントローラ１から、ＰａｃｋｅｔＩｎを用いてフローＢのパケットをコントローラ１に転送するようにＦｌｏｗＭｏｄによって設定される（図１１Ｂ、ＯＰ１４）。そのため、スイッチ＃１のフローテーブルには、スイッチ＃１のポート＃１からフローＢのパケットが入力された場合には、コントローラ１に接続するポート＃２０から当該パケットを出力することを示す登録番号「２」のエントリが格納されている。
【０１３８】
なお、図１４において、フローＡに関しての説明は省略されているが、コントローラ１が、ＰａｃｋｅｔＩｎを用いてフローＢのパケットをコントローラ１へ転送するように指示するとともに、フローＡのパケットをルート#１に転送するようにスイッチ＃１に指示
してもよい。そのため、図１６に示されるスイッチ#１のフローテーブルには、スイッチ
＃１のポート＃１からフローＡのパケットが入力された場合には、ルート＃１に接続するポート＃１０に出力することを示す登録番号「１」のエントリが格納されている。
【０１３９】
ただし、フローＡのパケットのルート＃１への転送の指示は明示的になされなくともよい。登録番号の小さいエントリが優先して採用されるというフローテーブルの特徴を用いて、より小さい登録番号で、フローＢのパケットについてＰａｃｋｅｔＩｎを送信するように指示するエントリをスイッチ#１のフローブルに登録させてもよい。
【０１４０】
なお、図１４に示される処理後の、スイッチ＃２〜＃５のフローテーブルには、初期状態から変更はない。
【０１４１】
図１７は、図１４に示される処理後、ルート＃１がさらに混雑してきた場合のフローＡ、フローＢの経路の一例を示す図である。（１）コントローラ１は、スイッチ＃２から、スイッチ＃２のポート＃１の入力流量率が８０％であることを含む負荷情報を受信する。スイッチ＃２からの当該負荷情報によって、ルート＃１がさらに混雑してきたことが示される。また、コントローラ１は、スイッチ＃３から、スイッチ＃３のポート＃１０の出力流量率が８０％であることを含む負荷情報を受信する。
【０１４２】
（２）コントローラ１は、負荷情報管理テーブル１６と振分判定テーブル１８に基づい
て、フロー種別「低遅延」であるフローＡの通信形態を通信形態番号「２」の通信形態に変更することを判定する（図１１Ｂ、ＯＰ１１：ＹＥＳ）。すなわち、コントローラ１は、フローＡについてのパケット転送処理をＰＬＤ転送処理部１３に実行させることを判定する。
【０１４３】
（３）コントローラ１は、ＰａｃｋｅｔＩｎを用いてフローＡのパケットをコントローラ１へ転送することをスイッチ＃１のフローテーブルに設定する（図１１Ｂ、ＯＰ１４）。スイッチ＃１は、ルート＃１とルート＃２との分岐点に位置するスイッチ２である。
【０１４４】
これによって、スイッチ＃１は、フローＡのパケットも、フローＢのパケットも、ＰａｃｋｅｔＩｎを用いてコントローラ１へ転送するようになる。
【０１４５】
（４）コントローラ１は、フローＡのパケットの出力ポートとしてルート＃２に接続されるポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信するように、ＰＬＤ転送処理部１３を設定する（図１１Ｂ、ＯＰ１６）。スイッチ＃１からＰａｃｋｅｔＩｎを用いてフローＡのパケットがコントローラ１へ転送されると、コントローラ１のＰＬＤ転送処理部１３は、例えば、フローＡのパケットの出力ポートとしてルート＃２に接続されるポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信する。
【０１４６】
スイッチ＃１に送信されるＰａｃｋｅｔＯｕｔには、例えば、ＰａｃｋｅｔＩｎによってコントローラ１に転送されたフローＡのパケットと、出力ポートとしてスイッチ＃１のポート＃５の指定とが含まれている。
【０１４７】
スイッチ＃１は、当該ＰａｃｋｅｔＯｕｔを受信すると、当該ＰａｃｋｅｔＯｕｔに含まれるフローＡのパケットを、ルート＃２に接続されるポート＃５から出力する。これによって、フローＡの経路が、ルート＃１からルート＃２へ変更される。
【０１４８】
図１８は、図１７に示される処理後のコントローラ１のフロー管理テーブル１９の一例である。コントローラ１は、フローＡの通信形態を通信形態番号「１」の通信形態から通信形態番号「２」の通信形態に変更することを判定すると、フロー管理テーブル１９のフローＡのエントリの通信形態番号を「２」に更新する（図１１Ｂ、ＯＰ１５）。そのため、図１８に示されるフロー管理テーブル１９のフローＡのエントリの通信形態番号は「２」となっている。
【０１４９】
図１９は、図１７に示される処理後のスイッチ＃１のフローテーブルの一例である。スイッチ＃１のフローテーブルは、コントローラ１から、ＰａｃｋｅｔＩｎを用いてフローＡのパケットをコントローラ１に転送するようにＦｌｏｗＭｏｄによって設定される（図１１Ｂ、ＯＰ１４）。そのため、スイッチ＃１のフローテーブルには、スイッチ＃１のポート＃１からフローＡのパケットが入力された場合には、コントローラ１に接続するポート＃２０から出力することを示す登録番号「１」のエントリが格納されている。
【０１５０】
図２０は、図１７に示される処理後、端末４へ入力されるトラフィック量が増大した場合のフローＡ、フローＢの経路の一例を示す図である。（１）コントローラ１は、スイッチ＃２から、スイッチ＃２のポート＃１の入力流量率が８０％であることを含む負荷情報を受信する。また、コントローラ１は、スイッチ＃３から、スイッチ＃３のポート＃１０の出力流量率が９０％であることを含む負荷情報を受信する。スイッチ＃３からの当該負荷情報によって、端末４へ入力されるトラフィック量が増大したことが示される。
【０１５１】
（２）コントローラ１は、負荷情報管理テーブル１６と振分判定テーブル１８に基づいて、フロー種別「通常」であるフローＢの通信形態を通信形態番号「３」の通信形態に変
更することを判定する（図１１Ｂ、ＯＰ１７：ＹＥＳ）。すなわち、コントローラ１は、フローＢのパケットは転送せずにコントローラ１のパケットバッファ１４Ｂにバッファされるように変更することを判定する。
【０１５２】
（３）図２０では、すでに、スイッチ＃１に、ＰａｃｋｅｔＩｎを用いてフローＢのパケットをコントローラ１に転送する設定がなされている。また、コントローラ１では、フローＢのパケットをバッファするように、ＣＰＵ転送処理部１４に指示される（図１１Ｂ、ＯＰ２０）。そのため、コントローラ１は、スイッチ＃１からＰａｃｋｅｔＩｎを用いてフローＢのパケットが転送されると、フローＢのパケットをパケットバッファ１４Ｂにバッファする。
【０１５３】
これによって、フローＢの流れを一旦止め、端末４へ流入するトラフィック量を低減することができ、端末４に係る処理負荷の増大を抑制することができる。
【０１５４】
図２１は、図２０に示される処理後のコントローラ１のフロー管理テーブル１９の一例である。コントローラ１は、フローＢの通信形態が通信形態番号「２」の通信形態から通信形態番号「３」の通信形態に変更することを判定すると、フロー管理テーブル１９のフローＡのエントリの通信形態番号を「３」に更新する（図１１Ｂ、ＯＰ１９）。そのため、図２１に示されるフロー管理テーブル１９のフローＢのエントリの通信形態番号は「３」となっている。なお、図２０に示される処理によって、いずれのスイッチ２のフローテーブルも変更されない。
【０１５５】
図２２は、図２０に示される処理後、端末４へ入力されるトラフィック量が減少した場合のフローＡ、フローＢの経路の一例を示す図である。（１）コントローラ１は、スイッチ＃２から、スイッチ＃２のポート＃１の入力流量率が８０％であることを含む負荷情報を受信する。また、コントローラ１は、スイッチ＃３から、スイッチ＃３のポート＃１０の出力流量率が８０％であることを含む負荷情報を受信する。スイッチ＃３からの当該負荷情報によって、端末４へ入力されるトラフィック量が減少したことが示される。
【０１５６】
（２）コントローラ１は、負荷情報管理テーブル１６と振分判定テーブル１８に基づいて、フロー種別「通常」であるフローＢの通信形態を通信形態番号「２」の通信形態に変更することを判定する（図１１Ｂ、ＯＰ１７：ＹＥＳ）。すなわち、コントローラ１は、フローＢについてのパケット転送処理をＰＬＤ転送処理部１３に実行させることを判定する。
【０１５７】
（３）コントローラ１は、バッファされていたフローＢのパケットを読み出し、当該パケットの出力ポートとしてルート#２に接続されるポートを指定するＰａｃｋｅｔＯｕｔ
をスイッチ＃１に転送する（図１１Ｂ、ＯＰ１２：ＹＥＳ、ＯＰ１３）。
【０１５８】
（４）コントローラ１は、フローＢのパケットの出力ポートとしてルート＃２に接続されるポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信するように、ＰＬＤ転送処理部１３を設定する（図１１Ｂ、ＯＰ１６）。以降、スイッチ＃１からＰａｃｋｅｔＩｎを用いてフローＢのパケットがコントローラ１へ転送されると、コントローラ１のＰＬＤ転送処理部１３は、フローＢのパケットの出力ポートとしてルート＃２に接続されるポートを指定するＰａｃｋｅｔＯｕｔをスイッチ＃１に送信する。これによって、再び、フローＢがルート＃２を通過するようになる。
【０１５９】
その後、例えば、ルート＃１の混雑が解消された場合には、スイッチ２からの負荷情報によって、フローＡ、フローＢの通信形態が、ルート＃１によって転送を行う通信形態番号「１」の通信形態に変更されることが判定される。
【０１６０】
＜第１実施形態の作用効果＞
第１実施形態では、コントローラ１は、優先ルートが混雑してきた場合に、優先度の低いフローの経路を迂回ルートに変更する制御を行う。この経路変更は、第１実施形態では、スイッチ２に経路変更の対象のフローのパケットをＰａｃｋｅｔＩｎによってコントローラ１に転送させ、コントローラ１がＰａｃｋｅｔＯｕｔによってスイッチ２における当該パケットの出力ポートを指定することで行われる。第１実施形態では、経路変更の対象のフローについてＰａｃｋｅｔＩｎ、ＰａｃｋｅｔＯｕｔに関わるパケット転送処理を、処理速度の速いコントローラ１のＰＬＤ  １０３に実行させる。
【０１６１】
したがって、第１実施形態によれば、コントローラ１のＣＰＵ  １０１にかかる処理負荷を軽減させることができる。これによって、コントローラ１のＣＰＵ  １０１が実行する他のフローの処理に、例えば、経路変更の対象のフローについてのパケット転送処理によって処理遅延が増大する等の、影響を与えることを抑制することができる。
【０１６２】
また、ＰＬＤ  １０３による処理はハードウェア処理であって、ソフトウェア処理であるＣＰＵ  １０１による処理よりも処理速度が速い。したがって、優先ルートよりも転送遅延が大きくなる迂回ルートへコントローラ１を介してフローが転送される場合でも、当該フローの転送遅延が増加することを抑制することができる。
【０１６３】
また、第１実施形態によれば、例えば、振分判定テーブル１８において、フローの種別ごとに、パケットの振り分けルールと通信形態とが設定されている。これによって、フローの種別に応じて、優先ルートの混雑度に基づいた経路変更と、パケットの処理の振り分け先の切替とを行うことができ、きめ細かい制御を行うことができる。
【０１６４】
また、第１実施形態によれば、送信先の端末４へのトラフィックの流入量が閾値を超えると、優先度の低いフローのパケットは、コントローラ１にバッファされる。これによって、優先度の低いフローのトラフィックを減少させ、端末４の処理負荷の増大を抑制することができる。また、これによって、端末４へ流入するトラフィックの輻輳の収束速度を速めることができる。
【０１６５】
また、第１実施形態では、優先度の高いフローは、優先的に優先ルートで転送することによって、優先度の高いフローの転送遅延が増加することを抑制することができる。
【０１６６】
＜その他＞
第１実施形態では、ＰａｃｋｅｔＩｎに対象のパケット本体が含まれていることを前提として説明された。ただし、ＰａｃｋｅｔＩｎは、対象のパケット本体を含めなくても用いることができる。第１実施形態において説明された技術は、パケット本体が含まれていないＰａｃｋｅｔＩｎが用いられる場合でも適用可能である。
【０１６７】
ＰａｃｋｅｔＩｎに対象のパケットの本体が含まれていない場合には、例えば、通信形態番号「３」の通信形態において、パケットバッファ１４ＢにＰａｃｋｅｔＩｎそのものがバッファされる。
【０１６８】
また、第１実施形態は、ＯｐｅｎＦｌｏｗコントローラとＯｐｅｎＦｌｏｗスイッチとを前提に説明されたが、第１実施形態で説明された技術の適用は、ＯｐｅｎＦｌｏｗを実装するシステムに限定されない。例えば、複数のスイッチの経路制御を１台又は複数台のコントローラで行うシステムであれば、第１実施形態で説明された技術を適用可能である。
【０１６９】
＜プロセッサ＞
ＣＰＵは、ＭＰＵ（Microprocessor）、プロセッサとも呼ばれる。ＣＰＵは、単一のプロセッサに限定される訳ではなく、マルチプロセッサ構成であってもよい。また、単一のソケットで接続される単一のＣＰＵがマルチコア構成を有していても良い。上記各部の少なくとも一部の処理は、ＣＰＵ以外のプロセッサ、例えば、ＤＳＰ、ＮＰＵ（Network Processing Unit）等の専用プロセッサで行われても良い。
【０１７０】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１７１】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる非一時的な記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コ
ンピュータ等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１７２】
１        ＯｐｅｎＦｌｏｗコントローラ
２        ＯｐｅｎＦｌｏｗスイッチ
１１      通信部
１２      負荷情報管理部
１３      ＰＬＤ転送処理部
１４      ＣＰＵ転送処理部
１４Ｂ    パケットバッファ
１５      転送制御部
１６      負荷情報管理テーブル
１７      トポロジ情報テーブル
１８      振分判定テーブル
１９      フロー管理テーブル
１０１    ＣＰＵ
１０２    メモリ
１０３    ＰＬＤ
【図１】
2019004357.tif 000003
【図２】
2019004357.tif 000004
【図３】
2019004357.tif 000005
【図４】
2019004357.tif 000006
【図５】
2019004357.tif 000007
【図６】
2019004357.tif 000008
【図７】
2019004357.tif 000009
【図８】
2019004357.tif 000010
【図９】
2019004357.tif 000011
【図１０】
2019004357.tif 000012
【図１１Ａ】
2019004357.tif 000013
【図１１Ｂ】
2019004357.tif 000014
【図１２】
2019004357.tif 000015
【図１３】
2019004357.tif 000016
【図１４】
2019004357.tif 000017
【図１５】
2019004357.tif 000018
【図１６】
2019004357.tif 000019
【図１７】
2019004357.tif 000020
【図１８】
2019004357.tif 000021
【図１９】
2019004357.tif 000022
【図２０】
2019004357.tif 000023
【図２１】
2019004357.tif 000024
【図２２】
2019004357.tif 000025