(57)【要約】【課題】複数のネットワークスイッチを管理する複数のコントローラのうち、特定のコントローラに負荷が偏ることを抑制する。【解決手段】複数のコントローラ３１−１〜３１−３のいずれかによって管理されるネットワークスイッチ４−１は、当該ネットワークスイッチ４−１を管理するコントローラ３１−１の負荷に応じて、未知のフローの入力信号に対する処理方法を変更する。【選択図】図１０
2017130840.tif 000002
【特許請求の範囲】
【請求項１】
入力されたフローの信号を前記フローに対して登録されたルールに従って処理するネットワークスイッチであって、複数のコントローラのうちの第１コントローラによって管理されるネットワークスイッチにおいて、
前記第１コントローラの負荷を監視する負荷モニタと、
前記負荷モニタで監視された前記負荷に応じて、前記ルールが未登録である未知のフローの入力信号に対する処理方法を変更する制御部と、
を備えた、ネットワークスイッチ。
【請求項２】
前記制御部は、
前記第１コントローラの負荷が閾値を超過していると、前記未知のフローに対する前記ルールを前記第１コントローラに問い合わせずに、前記未知のフローの入力信号を隣接ネットワークスイッチに転送する、請求項１に記載のネットワークスイッチ。
【請求項３】
前記制御部は、
前記第１コントローラの負荷が閾値を超過していなければ、前記第１コントローラに、前記未知のフローの入力信号に対する前記ルールを問い合わせる、請求項２に記載のネットワークスイッチ。
【請求項４】
前記制御部は、
前記複数のコントローラのうち、前記第１コントローラとは異なる第２コントローラが管理する前記隣接ネットワークスイッチを、前記未知のフローの入力信号の転送先に選ぶ、請求項２に記載のネットワークスイッチ。
【請求項５】
前記負荷モニタは、
前記未知のフローの入力信号の転送先候補となる複数の隣接ネットワークスイッチのそれぞれを管理する複数の第２コントローラの負荷を監視し、
前記制御部は、
前記複数の第２コントローラのうち、負荷が相対的に低い第２コントローラが管理する前記隣接ネットワークスイッチを、前記未知のフローの入力信号の転送先に選ぶ、請求項２に記載のネットワークスイッチ。
【請求項６】
前記負荷モニタは、
前記未知のフローの入力信号の転送先候補となる複数の隣接ネットワークスイッチのそれぞれを管理する複数の第２コントローラの負荷を監視し、
前記制御部は、
前記複数の第２コントローラのうち、負荷の低い第２コントローラが管理する隣接ネットワークスイッチへ、負荷の高い第２コントローラが管理する隣接ネットワークスイッチよりも、前記未知のフローの信号の転送量が多くなるように、前記未知のフローの入力信号の転送を制御する、請求項２に記載のネットワークスイッチ。
【請求項７】
前記制御部は、
前記隣接ネットワークスイッチに転送する前記未知のフローの入力信号に、複数のネットワークスイッチでの受信毎に減算されるＴＴＬ（time to live）値を設定し、前記ＴＴＬ値が減算によって０となった前記未知のフローの入力信号を廃棄する、請求項２に記載のネットワークスイッチ。
【請求項８】
前記負荷モニタは、
前記未知のフローの入力信号の転送先候補となる複数の隣接ネットワークスイッチのそれぞれを管理する複数の第２コントローラの負荷を監視し、
前記制御部は、
前記複数の第２コントローラの負荷がいずれも閾値を超過していると、前記未知のフローの入力信号をメモリにバッファし、
前記負荷が前記閾値を超過しない第２コントローラが発見されると、前記バッファした信号を、前記発見された第２コントローラが管理する隣接ネットワークスイッチへ転送する、請求項２に記載のネットワークスイッチ。
【請求項９】
複数のネットワークスイッチを複数のコントローラによって管理するネットワーク制御装置であって、
前記複数のコントローラの負荷を監視する負荷モニタと、
第１のネットワークスイッチへ前記第１のネットワークスイッチを管理する第１コントローラの負荷を示す情報を通知する通知部と、
を備えた、ネットワーク制御装置。
【請求項１０】
前記通知部は、
前記第１のネットワークスイッチに接続された第２のネットワークスイッチを管理する第２コントローラの負荷を示す情報を、前記第１のネットワークスイッチへ通知する、請求項９に記載のネットワーク制御装置。
【請求項１１】
入力されたフローの信号を前記フローに対して登録されたルールに従って処理する複数のネットワークスイッチと、
前記複数のネットワークスイッチを複数のコントローラによって管理するネットワーク制御装置と、を備え、
前記ネットワーク制御装置は、前記各コントローラが管理する１又は複数の前記ネットワークスイッチへ、当該ネットワークスイッチを管理するコントローラの負荷を示す情報を通知し、
前記通知を受けたネットワークスイッチは、
前記負荷を示す情報に応じて、前記ルールが未登録である未知のフローの入力信号に対する処理方法を変更する、ネットワークシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載する技術は、ネットワークスイッチ、ネットワーク制御装置、及び、ネットワークシステムに関する。
【背景技術】
【０００２】
近年、コンピューティングリソースの仮想化が進み、ネットワークにおいて、オンデマンドで仮想コンピュータを配備できるようになったことに伴って、ＳＤＮ（Software Defined Networking）が注目されている。
【０００３】
ＳＤＮは、ネットワークをソフトウェアでオンデマンドに設定、変更あるいは制御することが可能な技術の一例である。ＳＤＮでは、コントローラが複数のネットワークスイッチを管理、制御する。
【０００４】
ＳＤＮを実現可能な通信プロトコルの有力な候補の１つに、オープンフロープロトコル（ＯＦＰ）がある。コントローラは、ＯＦＰを用いて各ネットワークスイッチと通信することで、各ネットワークスイッチの管理や制御を行なうことができる。
【０００５】
なお、ＯＦＰをサポートするコントローラは、ＯＦコントローラ（ＯＦＣ）と称されることがある。また、ＯＦＰをサポートするネットワークスイッチは、ＯＦスイッチ（ＯＦ−ＳＷ）と称されることがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１７０７１８号公報
【特許文献２】国際公開第２０１３／１１４４９０号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ネットワーク規模の増大に伴ってＯＦＣが管理するＯＦスイッチの数が増えると、ＯＦＣの負荷が高くなり過ぎて、ＯＦＣの安定的な運用に支障が生じ、ひいてはネットワークの安定的な運用にも支障が生じるおそれがある。
【０００８】
そこで、複数のＯＦＣを論理的な１つのコントローラとして形成し、ＯＦＣ間で負荷分散を図ることが試みられることがある。しかし、特定のＯＦスイッチから、当該ＯＦスイッチを管理するＯＦＣに対して、複数の要求や問い合わせ等のメッセージ送信が一斉に発生すると、特定のＯＦＣに負荷が集中してＯＦＣ間に負荷の偏りが生じ得る。
【０００９】
例えば、ＯＦスイッチは、フローテーブルに未登録である未知のフローの信号が入力されると、自スイッチを管理するＯＦＣに、フローテーブルのエントリを、パケットイン（Packet-in）メッセージを用いて問い合わせる。
【００１０】
複数の未知のフローの信号がＯＦスイッチに入力されると、当該ＯＦスイッチから複数のパケットインメッセージがＯＦＣに送信されるため、当該ＯＦＣにおけるパケットインメッセージの処理負荷が増大する。その結果、ＯＦＣ間に負荷の偏りが生じ得る。
【００１１】
１つの側面では、本明細書の記載する技術の目的の１つは、複数のネットワークスイッチを複数のコントローラによって管理するネットワークシステムにおいて、特定のコントローラに負荷が偏ることを抑制できるようにすることにある。
【課題を解決するための手段】
【００１２】
１つの側面において、ネットワークスイッチは、入力されたフローの信号を前記フローに対して登録されたルールに従って処理するネットワークスイッチであって、複数のコントローラのうちの第１コントローラによって管理されてよい。当該ネットワークスイッチは、負荷モニタと、制御部と、を備えてよい。負荷モニタは、前記第１コントローラの負荷を監視してよい。制御部は、前記負荷モニタで監視された前記負荷に応じて、前記ルールが未登録である未知のフローの入力信号に対する処理方法を変更してよい。
【発明の効果】
【００１３】
１つの側面として、複数のネットワークスイッチを管理する複数のコントローラのうち、特定のコントローラに負荷が偏ることを抑制できる。
【図面の簡単な説明】
【００１４】
【図１】一実施形態に係る通信システムの構成例を示す図である。
【図２】図１に例示した通信システムにおいてＯＦ−ＳＷに未知のフローのパケットが入力された場合の処理例を説明するための図である。
【図３】図２の例において特定のＯＦＣに負荷が偏るケースの一例を説明するための図である。
【図４】一実施形態に係る分散コントローラ及びＯＦ−ＳＷの構成例を示すブロック図である。
【図５】一実施形態に係るＯＦＣ負荷情報の通知に用いるＯＦＰ拡張メッセージのフォーマット例を示す図である。
【図６】一実施形態に係る次段ＯＦ−ＳＷ情報の通知に用いるＯＦＰ拡張メッセージのフォーマット例を示す図である。
【図７】一実施形態に係るＯＦ−ＳＷのハードウェア構成例を示すブロック図である。
【図８】第１実施例に係る分散コントローラの動作例を示すフローチャートである。
【図９】第１実施例に係る分散コントローラの動作例を示すフローチャートである。
【図１０】第１実施例においてＯＦ−ＳＷに新規フローのパケットが入力された場合の処理例を説明するための図である。
【図１１】第１実施例に係る新規フロー転送先判定情報の一例である次段ＯＦ−ＳＷ情報を示す図である。
【図１２】第１実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【図１３】第２実施例に係る新規フロー転送先判定情報の一例である次段ＯＦ−ＳＷ情報及びマスターＯＦＣ情報の一例を示す図である。
【図１４】第２実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【図１５】第３実施例に係る通信システムの構成例及び動作例を説明するための図である。
【図１６】第３実施例に係る新規フロー転送先判定情報の一例である次段ＯＦ−ＳＷ情報、マスターＯＦＣ情報、及び、ＯＦＣ負荷情報を示す図である。
【図１７】第３実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【図１８】第４実施例に係る新規フロー転送先判定情報の一例である次段ＯＦ−ＳＷ情報、マスターＯＦＣ情報、及び、ＯＦＣ負荷情報を示す図である。
【図１９】第４実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【図２０】第５実施例に係る通信システムの構成例及び動作例を説明するための図である。
【図２１】第５実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【図２２】図２１に例示したＴＴＬ（time to live）処理の一例を示すフローチャートである。
【図２３】第６実施例に係る通信システムの構成例及び動作例を説明するための図である。
【図２４】第６実施例に係る通信システムの構成例及び動作例を説明するための図である。
【図２５】第６実施例に係る新規フロー転送先判定情報の一例である次段ＯＦ−ＳＷ情報、マスターＯＦＣ情報、及び、ＯＦＣ負荷情報を示す図である。
【図２６】第６実施例に係るＯＦ−ＳＷの動作例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照して実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。また、以下に説明する各種の例示的態様は、適宜に組み合わせて実施しても構わない。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１６】
図１は、一実施形態に係る通信システムの構成例を示す図である。「通信システム」は、「ネットワークシステム」と称してもよい。図１に示すように、通信システム１は、例示的に、ネットワーク２と、コントローラ３と、を備えてよい。
【００１７】
例示的に、ネットワーク２は、ＳＤＮをサポートするネットワークであってよく、コントローラ３は、オープンフロープロトコル（ＯＦＰ）をサポートするネットワークコントローラであってよい。
【００１８】
ネットワーク２には、ネットワークエレメント（ＮＥ）の一例として、複数のネットワーク機器４−１〜４−Ｎ（Ｎは２以上の整数）が備えられてよい。図１には、Ｎ＝４の例を示している。
【００１９】
ネットワーク機器４−ｋ（ｋは、１〜Ｎのいずれか）は、ＯＦＰをサポートするネットワークスイッチであってよい。ＯＦＰをサポートする「ネットワークスイッチ」は、「ＯＦスイッチ（ＯＦ−ＳＷ）」と称してよい。
【００２０】
「ＯＦ−ＳＷ４−ｋ」を区別しなくてよい場合は、「ＯＦ−ＳＷ４」と略記することがある。ＯＦ−ＳＷ４によって形成されたネットワーク２は、「ＯＦネットワーク２」と称されてもよい。
【００２１】
コントローラ３は、例示的に、ＯＦネットワーク２を形成する複数のＯＦ−ＳＷ４を集中的に制御することが可能である。例えば、コントローラ３は、ＯＦ−ＳＷ４のそれぞれと通信可能に接続されて、ＯＦ−ＳＷ４間の通信を制御してよい。
【００２２】
コントローラ３とＯＦ−ＳＷ４との間の接続には、ＴＣＰ（Transmission Control Protocol）やＴＬＳ（Transport Layer Security）が適用されてよい。別言すると、コントローラ３とＯＦ−ＳＷ４との間には、ＴＣＰやＴＬＳの「セッション」又は「チャネル」が設定、確立されてよい。「セッション」又は「チャネル」は、論理的な通信路の一例と捉えてよい。
【００２３】
「セッション」又は「チャネル」を通じてＯＦＰベースの制御信号（「メッセージ」と称してもよい。）がコントロールプレーン（ＣＰ）にて送受信されてよい。ＯＦＰベースのメッセージが送受信される「セッション」又は「チャネル」は、便宜的に、「ＯＦセッション」又は「ＯＦチャネル」と称してよい。
【００２４】
ＯＦ−ＳＷ４間の通信は、例示的に、データプレーンにおけるデータの転送であり、「データフロー」又は単に「フロー」と称してもよい。「フロー」で転送されるデータあるいは信号は、パケットデータであってよい。パケットデータは、単に「パケット」と略称してよい。
【００２５】
「フロー」とは、パケットが有するヘッダ情報（例えば、イーサネット（登録商標）アドレス、ＶＬＡＮタグ、ＩＰアドレス、ＴＣＰ／ＵＤＰポート番号等）の任意の組み合わせにより識別されるデータの集合体であると捉えてよい。
【００２６】
「ＶＬＡＮ」は、「virtual local area network」の略称である。「ＩＰ」は、「Internet protocol」の略称である。「ＴＣＰ」は、「transmission control protocol」の略称であり、「ＵＤＰ」は、「user datagram protocol」の略称である。
【００２７】
例えば図１に例示するように、ＯＦ−ＳＷ４−１にホスト５−１（ホスト＃１）が接続され、ＯＦ−ＳＷ４−４にホスト５−２（ホスト＃２）が接続され、ホスト５−１及び５−２間で通信が行なわれることを想定する。
【００２８】
なお、「ホスト」は、パケット等のデータを送受信可能な通信機器の一例である。「ホスト」は、ＯＦネットワーク２を形成するＯＦ−ＳＷ４のいずれにも接続され得る。また、１台のＯＦ−ＳＷ４に対して複数の「ホスト」が接続される場合もある。
【００２９】
図１の例において、ホスト５−１及び５−２間のフローは、ＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路、あるいは、ＯＦ−ＳＷ４−１、４−２及び４−４を経由する経路で、ＯＦ−ＳＷ４間を転送されてよい。
【００３０】
ＯＦネットワーク２におけるフローの経路は、「データパス」と称されてよい。「データパス」は、ＯＦ−ＳＷ４のそれぞれに割り当てられた「データパス識別子」（data path ID, DPID）を基に識別されてよい。
【００３１】
コントローラ３は、ＯＦ−ＳＷ４間のフローを一元的に管理、制御してよい。例えば、コントローラ３は、ＯＦ−ＳＷ４が記憶するフローテーブルのエントリを一元的に管理、制御してよい。
【００３２】
ＯＦ−ＳＷ４間のフローを制御するために、コントローラ３は、ＯＦネットワーク２のトポロジ情報を検出してよい。トポロジ情報は、ＯＦネットワーク２におけるＯＦ−ＳＷ４間の接続関係を識別可能にする情報の一例である。トポロジ情報を基に、ＯＦネットワーク２についての経路計算等がコントローラ３において実施されてよい。
【００３３】
例えば、コントローラ３は、ＯＦネットワーク２のトポロジ情報を基に、ＯＦネットワーク２全体としての省電力化を図る経路制御（「省電力経路制御」と略称してよい。）等の、高度なトラフィックエンジニアリングを実現できる。
【００３４】
また、コントローラ３による制御の単位を「フロー」とし、既存のレイヤ構造を有する、いずれのネットワークの組み合わせにおいてもデータの流れを「フロー」で表現することよって、レイヤに依存しない通信制御が可能となる。
【００３５】
なお、「オープンフロー（ＯＦ）」は、ＯＦＰ等の特有のプロトコルを処理してネットワークを制御する技術の一例である。これに対し、「ＳＤＮ」は、ＯＦの概念を既存のネットワークプロトコルにまで拡張して、ＯＦＰをサポートしていないＮＥでも制御を可能にする技術の一例である。
【００３６】
コントローラ３には、図１に例示するように、複数のＯＦＣ３１−１〜３１−ｎ（ｎは２以上の整数）で「クラスタ」を形成し、論理的には１つのコントローラとして動作する「分散コントローラ」が適用されてよい。
【００３７】
分散コントローラ３は、ネットワーク制御装置の一例である。ＯＦＣ３１−１〜３１−ｎは、いずれも、ＯＦＰをサポートするコントローラの一例である。
【００３８】
非限定的な一例として、図１には、ｎ＝３のケース、すなわち、３つのＯＦＣ３１−１〜３１−３の「クラスタ」で１つの分散コントローラ３が構成された例を示している。分散コントローラ３は、「コントローラクラスタ３」と称してもよい。コントローラクラスタ３は、各スイッチ４からは論理的な１つのコントローラとして認識される。
【００３９】
コントローラクラスタ３を形成する個々のＯＦＣ３１−ｉ（ｉは１〜ｎのいずれか）は、便宜的に、「エレメントコントローラ」あるいは「コントローラコンポーネント」と称してもよい。例示的に、サーバ等のコンピュータが、ＯＦＣ３１−ｉに該当してよい。なお、ＯＦＣ３１−１〜３１−ｎを区別しなくてよい場合、単に「ＯＦＣ３１」と略記することがある。
【００４０】
複数のＯＦＣ３１−ｉは、例示的に、互いに通信することが可能であり、複数のＯＦ−ＳＷ４の管理や制御を分担してよい。したがって、図１に例示する通信システム１は、複数のスイッチ４を複数のＯＦＣ３１で分散的に管理又は制御するシステムの一例である。
【００４１】
図１において、ＯＦＣ３１−１は、例示的に、ＯＦ−ＳＷ４−１及び４−２の管理を担当してよい。ＯＦＣ３１−２は、例示的に、ＯＦ−ＳＷ４−３の管理を担当してよい。ＯＦＣ３１−３は、例示的に、ＯＦ−ＳＷ４−４の管理を担当してよい。
【００４２】
ＯＦＣ３１−ｉは、管理を担当するＯＦ−ＳＷ４にとっての「マスターＯＦＣ３１−ｉ」と称されてよい。例えば図１の例において、ＯＦＣ３１−１は、ＯＦ−ＳＷ４−１及び４−２にとってのマスターＯＦＣに相当する。ＯＦＣ３１−２は、ＯＦ−ＳＷ４−３にとってのマスターＯＦＣに相当する。ＯＦＣ３１−３は、ＯＦ−ＳＷ４−４にとってのマスターＯＦＣに相当する。
【００４３】
ＯＦ−ＳＷ４は、例示的に、コントロールプレーンにおいてマスターＯＦＣ３１との間でＯＦチャネル（図１の点線参照）を形成し、ＯＦチャネルにてマスターＯＦＣ３１と通信することが可能である。
【００４４】
上述したごとくネットワークコントローラ３に、「コントローラクラスタ」として構成された「分散コントローラ」を適用することで、ネットワークコントローラ３のスケーラビリティや耐障害性を向上できる。
【００４５】
ただし、ネットワークコントローラ３を成す複数のＯＦＣ３１のうちの特定のＯＦＣ３１に、負荷（load）が集中又は偏るケースが生じ得る。ＯＦＣ３１の負荷は、ＯＦＣ３１の動作を司るＣＰＵ（Central Processing Unit）等のプロセッサの使用率や、ＯＦＣ３１が動作に応じてアクセスするモリの使用率等に基づいて判断、決定されてよい。
【００４６】
複数のＯＦＣ３１間で負荷の偏りが低減されるように、分散コントローラ３において負荷分散制御を実施することで、分散コントローラ３の安定的な運用が可能になる。
【００４７】
図２及び図３を参照して、分散コントローラ３において特定のＯＦＣ３１−ｉ（例えばＯＦＣ３１−１）に負荷が偏るケースの一例について説明する。
【００４８】
例示的に、ホスト５−１及び５−２間で通信を開始するケースを想定する。例えば、ホスト５−１がホスト５−２宛にパケットを送信すると（図２の符号Ｍ１参照）、当該パケットは、ＯＦ−ＳＷ４−１に入力される。
【００４９】
ここで、ＯＦ−ＳＷ４のそれぞれは、「フローテーブル」を有している。「フローテーブル」には、「フロー」単位に、「ルール」と、「ルール」に関連付けられた「アクション」と、が登録されてよい。
【００５０】
ＯＦ−ＳＷ４にパケットが入力されると、ＯＦ−ＳＷ４は、「フローテーブル」を参照し、「フローテーブル」に登録されている「ルール」にマッチした「アクション」を実行する。
【００５１】
入力パケットに対応する「ルール」が「フローテーブル」に未登録であった場合、別言すると、ＯＦ−ＳＷ４にとって未知のフローのパケットが入力された場合、ＯＦ−ＳＷ４は、分散コントローラ３に対して「ルール」を問い合わせてよい。なお、ＯＦ−ＳＷ４にとって「未知のフロー」は、「新規フロー」と称してもよい。
【００５２】
「問い合わせ」には、ＯＦＰの「パケットイン（Packet-in）メッセージ」（以下「パケットイン」と略称することがある。）が用いられてよい。パケットインに、ＯＦ−ＳＷ４に入力された新規フローのパケットが含められてよい。
【００５３】
例えば、ホスト５−１からＯＦ−ＳＷ４−１に入力されたパケットに対応する「ルール」が、ＯＦ−ＳＷ４−１の「フローテーブル」に未登録であれば、ＯＦ−ＳＷ４−１は、分散コントローラ３に対してパケットインを送信する（図２の符号Ｍ２参照）。
【００５４】
当該パケットインは、例示的に、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１にて受け付けられる。マスターＯＦＣ３１−１は、受け付けたパケットインに含まれているパケットに基づいてフローの経路計算を行ない、計算結果を基に決定した経路に位置するＯＦ−ＳＷ４に対してフローの経路設定を行なう。
【００５５】
決定した経路に、他のＯＦＣ３１−２又は３１−３が管理するＯＦ−ＳＷ４が存在すれば、ＯＦＣ３１−１は、ＯＦＣ間通信によって、他のマスターＯＦＣ３１−２又は３１−３に、経路計算及びフローの経路設定を依頼してよい。
【００５６】
図２の例では、マスターＯＦＣ３１−１がパケットインを受信したことを契機に、経路計算によってＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路がフローの経路設定対象に決定されることを想定する。
【００５７】
そのため、ＯＦ−ＳＷ４−１、４−３及び４−４に対して、それぞれを管理するマスターＯＦＣ３１−１、３１−２及び３１−３が、フローの経路設定を行なう。フローの経路設定には、フロー変更（flow modification, FlowMod）メッセージが用いられてよい（図２の符号Ｍ３参照）。
【００５８】
ＯＦ−ＳＷ４−１、４−３及び４−４は、それぞれ、管理元のマスターＯＦＣ３１からフロー変更メッセージが受信されると、当該メッセージに設定されている「ルール」を「フローテーブル」に設定、登録する。
【００５９】
以後、ホスト５−１からホスト５−２宛に送信されたパケットは、ＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路でホスト５−２へ転送される（図２の符号Ｍ４参照）。
【００６０】
なお、「フローテーブル」に登録される「ルール」には、例示的に、マッチ条件（match rules）が記述され、マッチ条件に対して「アクション」が指定されてよい。「アクション」には、入力パケットの転送に限らず、その他の動作が指定されてもよい。例えば、入力パケットの特定のヘッダフィールドを書き換える動作が「アクション」において指定されてもよい。
【００６１】
このように、分散コントローラ３は、いずれかのＯＦ−ＳＷ４からのパケットインの受信に応じて、フローの経路計算を行ない、経路計算によって決定した経路に位置するＯＦ−ＳＷ４に対して、管理担当のＯＦＣ３１によってフローの経路設定を行なう。
【００６２】
したがって、ＯＦ−ＳＷ４−１が発行したパケットインを受け付けたＯＦＣ３１−１に着目すると、ＯＦＣ３１−１には、パケットインの処理負荷、経路計算負荷、及び、フロー変更メッセージを発行する処理負荷が発生する。
【００６３】
これに対し、ＯＦＣ３１−２及び３１−３には、経路計算負荷、及び、フロー変更メッセージを発行する処理負荷が発生する。ＯＦＣ３１−２及び３１−３は、管理対象外のＯＦ−ＳＷ４−１が送信したパケットインを処理しないため、ＯＦＣ３１−１よりも処理負荷が低いと云える。
【００６４】
ここで、図３に例示するように、ＯＦ−ＳＷ４−１に対して複数（図３の例では２つ）の新規フローのパケットがホスト５−１から入力されることを想定してみる（符号Ｍ１１及びＭ２１参照）。また、いずれの新規フローについても、経路計算によってＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路が経路設定対象に決定されると仮定する。
【００６５】
例えば図３おいて、符号Ｍ１４を付した実線矢印が、新規の第１のフローのパケットに対して経路計算によって決定された経路で第１のフローのパケットが転送されることを表す。また、符号Ｍ２４を付した点線矢印が、新規の第２のフローのパケットに対して経路計算によって決定された経路で第２のフローのパケットが転送されることを表す。
【００６６】
この場合、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１には、複数のパケットインのそれぞれに対して、パケットインの処理負荷、経路計算負荷、及び、フロー変更メッセージを発行する処理負荷が生じる。
【００６７】
なお、図３において、符号Ｍ１２は、第１のフローのパケットに対するパケットインの送信を表し、符号Ｍ１３は、第１のフローのパケットに対するフロー変更メッセージの送信を表している。
【００６８】
また、符号Ｍ２２は、第２のフローのパケットに対するパケットインの送信を表し、符号Ｍ２３は、第２のフローのパケットに対するフロー変更メッセージの送信を表している。なお、「Ｍｘｙ」（ｘ及びｙは、いずれも正の整数）は、ｘ番目のフローについてのｙ番目の処理を表すと捉えてよい（以降、同様。）
【００６９】
一方、他のＯＦＣ３１−２及び３１−３には、複数のパケットイン（符号Ｍ１２及びＭ２２参照）を受け付けたＯＦＣ３１−１の依頼に応じて、経路計算負荷、及び、フロー変更メッセージを発行する処理負荷が生じる（符号Ｍ１３及びＭ２３参照）。
【００７０】
ＯＦＣ３１−２及び３１−３には、パケットインの処理負荷は生じないので、ＯＦＣ３１−１に比べて低負荷となり、ＯＦＣ３１−１に負荷が偏ることになる。
【００７１】
このように、複数の新規フローのパケットが入力されたＯＦ−ＳＷ４から複数のパケットインがマスターＯＦＣ３１に送信されると、当該マスターＯＦＣ３１に負荷が集中し易い。負荷の集中したマスターＯＦＣ３１は、分散コントローラ３としての処理性能のボトルネックになり得る。
【００７２】
そこで、本実施形態では、新規フローのパケットがＯＦ−ＳＷ４に入力された場合、当該ＯＦ−ＳＷ４が、管理元のマスターＯＦＣ３１の負荷状況に応じて、パケットインの送信可否を制御する。
【００７３】
例えば、新規フローのパケットが入力されたＯＦスイッチは、マスターＯＦＣ３１の負荷を確認し、負荷が閾値以下であれば、マスターＯＦＣ３１宛にパケットインを送信してよい。
【００７４】
負荷が閾値を超えていれば、ＯＦ−ＳＷ４は、パケットインをマスターＯＦＣ３１宛に送信しなくてよい。代替的に、ＯＦ−ＳＷ４は、新規フローの入力パケットを次段（「隣接」と称してもよい。）のＯＦ−ＳＷ４に転送してよい。
【００７５】
当該新規フローのパケットについてのパケットインは、当該パケットの転送を受けた次段のＯＦ−ＳＷ４によって発行され得る。なお、「次段のＯＦ−ＳＷ４」は、例示的に、着目ＯＦ−ＳＷ４の出力ポートに通信可能に接続されている他のＯＦ−ＳＷ４である。
【００７６】
新規フローのパケットが転送された次段のＯＦ−ＳＷ４を管理するマスターＯＦＣ３１の負荷も閾値を超えていれば、パケット転送を受けたＯＦ−ＳＷ４も、パケットインを発行せずに、更に次段のＯＦ−ＳＷ４へ入力パケットを転送してよい。
【００７７】
このように、ＯＦ−ＳＷ４が、マスターＯＦＣ３１の負荷状況に応じて、新規フローに対するパケットインの送信を抑止し、次段のＯＦ−ＳＷ４へ当該パケットを転送することで、ＯＦＣ３１間の負荷の偏りを低減して負荷分散を図ることができる。
【００７８】
ＯＦ−ＳＷ４が、マスターＯＦＣ３１の負荷を確認できるように、分散コントローラ３は、各ＯＦ−ＳＷ４に対して、マスターＯＦＣ３１の負荷を示す情報（「負荷情報」と略称してよい。）を送信（「通知」と称してもよい。）してよい。
【００７９】
また、ＯＦ−ＳＷ４が、次段のＯＦ−ＳＷ４を認識できるように、分散コントローラ３は、例えば各ＯＦ−ＳＷ４の出力ポートに通信可能に接続されている他のＯＦ−ＳＷ４の情報を、各ＯＦ−ＳＷ４に通知してよい。
【００８０】
当該情報は、便宜的に、「次段ＯＦ−ＳＷ情報」と称してよい。次段ＯＦ−ＳＷ情報は、例示的に、分散コントローラ３において、トポロジ情報を基に生成することができる。トポロジ情報には、ＯＦ−ＳＷ４とホストとの接続関係を示す情報が含まれてよい。
【００８１】
ＯＦ−ＳＷ４とホストとの接続関係を示す情報は、例示的に、ネットワーク管理者によって設定されてよい。次段ＯＦ−ＳＷ情報には、ＯＦ−ＳＷ４とホストとの接続関係を示す情報は含まれなくてよい。別言すると、ＯＦ−ＳＷ４からホストへは未知フローの入力パケットを転送しなくてよい。そのため、ＯＦ−ＳＷ４による未知フローの入力パケットの転送先候補からホストは除外されてよい。
【００８２】
次段ＯＦ−ＳＷ情報は、ＯＦ−ＳＷ４が備える出力ポート毎に生成されてよく、当該出力ポートに接続されているＯＦ−ＳＷ４の識別情報が含まれてよい。ＯＦ−ＳＷ４の識別情報は、例示的に、既述のデータパス識別子（ＤＰＩＤ）であってよい。
【００８３】
（分散コントローラ及びＯＦスイッチの構成例）
図４に、一実施形態に係る分散コントローラ３及びＯＦ−ＳＷ４の機能的な構成例を示す。
【００８４】
図４に示すように、分散コントローラ３は、例示的に、既述の複数のＯＦＣ３１−１〜３１−ｎと、ＯＦＣ負荷モニタ３２と、ＯＦＣ負荷通知部３３と、トポロジ処理部３４と、記憶装置３５と、を備えてよい。
【００８５】
一方、ＯＦ−ＳＷ４は、例示的に、ＯＦＣ負荷取得部４１と、トポロジ取得部４２と、フロー転送判定部４３と、フローテーブル４４と、を備えてよい。
【００８６】
分散コントローラ３において、ＯＦＣ負荷モニタ３２は、例示的に、各ＯＦＣ３１の負荷をモニタする。ＯＦＣ３１の負荷は、例えば、ＣＰＵ等のプロセッサの使用率、及び、ＯＦＣ３１が動作に応じてアクセスするモリの使用率の一方又は双方によって表されてよい。ＯＦＣ負荷モニタ３２のモニタ結果を「ＯＦＣ負荷情報」と称してよい。
【００８７】
ＯＦＣ負荷通知部３３は、例示的に、分散コントローラ３が管理するＯＦ−ＳＷ４のいずれかに、ＯＦＣ負荷情報を通知する。ＯＦＣ負荷情報の通知は、定期的に行なわれてもよいし不定期に行なわれてもよい。
【００８８】
ＯＦＣ負荷情報を定期的に通知する場合、通知の周期は、ＯＦＣ３１の負荷に影響を与えない程度に長い周期に設定されてよい。ＯＦＣ負荷情報を不定期に通知する例としては、いずれかのＯＦ−ＳＷ４からの要求に応じて、ＯＦＣ負荷情報を要求元のＯＦ−ＳＷ４へ返信することが挙げられる。
【００８９】
ＯＦＣ負荷情報の通知は、例示的に、ＯＦＰメッセージを拡張したメッセージ（便宜的に「ＯＦＰ拡張メッセージ」と称してよい。）を用いてＯＦＰにて行なわれてもよいし、ＯＦＰとは異なるプロトコルのメッセージを用いて行なわれてもよい。
【００９０】
図５に、非限定的な一例として、ＯＦＣ負荷情報の通知に用いるＯＦＰ拡張メッセージのフォーマット例を示す。図５に示すＯＦＰ拡張メッセージは、例示的に、８バイトのＯＦヘッダフィールドと、４バイトのペイロードフィールドと、を有する。
【００９１】
ＯＦヘッダフィールドに、ＯＦＣ負荷情報の宛先ＯＦ−ＳＷ４のアドレス情報が設定されてよく、ペイロードフィールドに、ＯＦＣ負荷情報が設定されてよい。
【００９２】
なお、或るＯＦ−ＳＷ４宛に送信するＯＦＣ負荷情報には、当該ＯＦ−ＳＷ４を管理するマスターＯＦＣ３１の負荷情報に限らず、当該マスターＯＦＣ３１とは異なる他のマスターＯＦＣ３１の負荷情報が含まれてよい。
【００９３】
例えば、第１のＯＦ−ＳＷ４に対して、当該第１のＯＦ−ＳＷ４を管理する第１のマスターＯＦＣ３１の負荷情報に限らず、当該第１のＯＦ−ＳＷ４の次段に位置する第２のＯＦ−ＳＷを管理する第２のマスターＯＦＣ３１の負荷情報が通知されてもよい。
【００９４】
トポロジ処理部３４は、例示的に、ＯＦネットワーク２のトポロジ情報を基に、ＯＦ−ＳＷ４それぞれの出力ポートに接続された次段のＯＦ−ＳＷ４の情報（例えば、ＤＰＩＤ）を抽出し、抽出した情報を各ＯＦ−ＳＷ４に通知してよい。
【００９５】
次段ＯＦ−ＳＷ情報の通知は、ＯＦＣ負荷情報の通知と同様に、例示的に、ＯＦＰ拡張メッセージを用いてＯＦＰにて行なわれてもよいし、ＯＦＰとは異なるプロトコルのメッセージを用いて行なわれてもよい。
【００９６】
図６に、非限定的な一例として、次段ＯＦ−ＳＷ情報の通知に用いるＯＦＰ拡張メッセージのフォーマット例を示す。図６に示すＯＦＰ拡張メッセージは、例示的に、８バイトのＯＦヘッダフィールドと、ペイロードフィールドと、を有する。
【００９７】
ＯＦヘッダフィールドに、次段ＯＦ−ＳＷ情報の宛先ＯＦ−ＳＷ４のアドレス情報が設定されてよく、ペイロードフィールドに、次段ＯＦ−ＳＷ４の台数分の次段ＯＦ−ＳＷ情報が設定されてよい。１台あたりの次段ＯＦ−ＳＷ情報は、例示的に、８バイトの情報で表されてよい。
【００９８】
なお、トポロジ処理部３４は、当該次段のＯＦ−ＳＷ４を管理するマスターＯＦＣ３１の情報（便宜的に「マスターＯＦＣ情報」と略称してよい。）を、各ＯＦ−ＳＷ４に通知してもよい。マスターＯＦＣ情報には、例示的に、ＯＦＣ３１を識別可能な情報が用いられればよい。
【００９９】
次段ＯＦ−ＳＷ情報及びマスターＯＦＣ情報の一方又は双方の通知は、例示的に、ＯＦネットワーク２のトポロジ情報に変更が生じた場合に限って実施されてよい。当該通知をトポロジ情報に変更が生じた場合に限ることで、トポロジ処理部３４の処理負荷増大を抑制できる。
【０１００】
記憶装置３５は、例示的に、ＯＦネットワーク２のトポロジ情報を記憶する。記憶装置３５には、例示的に、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等が適用されてよい。
【０１０１】
一方、ＯＦ−ＳＷ４において、ＯＦＣ負荷取得部４１は、例示的に、分散コントローラ３のＯＦＣ負荷通知部３３と通信して、当該ＯＦスイッチ４を管理するマスターＯＦＣ３１のＯＦＣ負荷情報を受信、取得する。
【０１０２】
なお、ＯＦＣ負荷取得部４１は、ＯＦＣ負荷通知部３３と通信して、自ＳＷ４のマスターＯＦＣ３１のＯＦＣ負荷情報に加えて、次段ＯＦ−ＳＷ４を管理する別のＯＦＣ３１のＯＦＣ負荷情報を受信、取得してもよい。
【０１０３】
自ＳＷ４のマスターＯＦＣ３１は、第１コントローラの一例であり、自ＳＷ４に接続された別のＯＦ−ＳＷ４のマスターＯＦＣ３１は、第２コントローラの一例である。自ＳＷ４に接続された他のＯＦ−ＳＷ４が複数存在する場合、それぞれを管理するマスターＯＦＣ３１がいずれも第２コントローラに相当すると捉えてよい。
【０１０４】
例えば、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１が第１コントローラに相当し、ＯＦ−ＳＷ４−１に接続された他のＯＦ−ＳＷ４−２及び４−３のマスターＯＦＣ３１−３及び３１−２がいずれも第２コントローラに相当すると捉えてよい。
【０１０５】
ＯＦＣ負荷取得部４１は、第１コントローラの負荷情報を取得することによって、第１コントローラの負荷を監視してよく、併せて、第２コントローラの負荷情報を取得することによって、第２コントローラの負荷を監視してよい。したがって、ＯＦＣ負荷取得部４１は、第１コントローラの負荷、又は、第１及び第２コントローラの負荷を監視する「負荷モニタ」の一例である。
【０１０６】
トポロジ取得部４２は、例示的に、分散コントローラ３のトポロジ処理部３４と通信して、次段ＯＦ−ＳＷ情報（場合によっては、次段ＯＦ−ＳＷ情報、及び、次段ＯＦ−ＳＷ４のマスターＯＦＣ情報）を受信、取得する。
【０１０７】
フロー転送判定部４３は、例示的に、ＯＦＣ負荷情報及び次段ＯＦ−ＳＷ情報に基づいて、次段のＯＦ−ＳＷ４に、新規フローの入力パケットを転送するか否かを判定する。複数の次段ＯＦ−ＳＷ４が転送先候補として存在する場合、フロー転送判定部４３は、次段ＯＦ−ＳＷ４それぞれのマスターＯＦＣ３１のＯＦＣ負荷情報に基づいて、転送先ＯＦ−ＳＷ４（別言すると、入力パケットを転送する出力ポート）を判定、決定してよい。
【０１０８】
フロー転送判定部４３、あるいは、フロー転送判定部４３及びトポロジ取得部４２は、マスターＯＦＣ３１の負荷に応じて、新規フローの入力パケットに対する処理方法を変更する制御部の一例である。「処理方法を変更」することは、「アクションを変更する」ことと捉えてもよい。
【０１０９】
処理方法を変更する制御の一例は、マスターＯＦＣ３１の負荷に応じて、当該ＯＦＣ３１にパケットインを送信するか、パケットインを送信せずに新規フローの入力パケットを次段のＯＦ−ＳＷ４に転送するか、を制御することであってよい。
【０１１０】
（ＯＦ−ＳＷのハードウェア構成例）
次に、図７を参照して、ＯＦ−ＳＷ４のハードウェア構成例について説明する。図７に示すように、ＯＦ−ＳＷ４は、例示的に、プロセッサ４１１と、メモリ４１２と、ネットワークインタフェース（ＮＷ−ＩＦ）４１３と、を備えてよい。プロセッサ４１１、メモリ４１２、及び、ＮＷ−ＩＦ４１３は、互いに通信可能に通信バス４１４にて接続されてよい。
【０１１１】
プロセッサ４１１は、ＯＦ−ＳＷ４の全体的な動作を制御する制御部の一例である。プロセッサ４１１には、例示的に、ＣＰＵやＤＳＰ（Digital Signal Processor）等の、演算処理能力を備えた演算処理装置又は演算処理回路を適用してよい。
【０１１２】
プロセッサ４１１は、例示的に、メモリ４１２に記憶されたプログラムやデータを適宜に読み取って動作することにより、ＯＦ−ＳＷ４としての機能を具現する。「プログラム」は、「ソフトウェア」あるいは「アプリケーション」と称してもよい。
【０１１３】
プロセッサ４１１の動作に応じて、図４に例示した、ＯＦＣ負荷取得部４１、トポロジ取得部４２、及び、フロー転送判定部４３の各機能が具現されてよい。
【０１１４】
メモリ４１２は、例示的に、既述のプログラムやデータを記憶する。メモリ４１２は、記憶デバイスあるいは記憶媒体の一例であり、ＲＡＭ（Random Access Memory）やフラッシュメモリ、ＳＳＤ（Solid State Drive）、ＨＤＤ（Hard Disk Drive）等が適用されてよい。
【０１１５】
メモリ４１２に記憶されるデータには、分散コントローラ３から取得した、ＯＦＣ負荷情報、次段ＯＦ−ＳＷ情報、及び、次段ＯＦ−ＳＷ４のマスターＯＦＣ情報と、図４に例示したフローテーブル４４と、が含まれてよい。
【０１１６】
フローテーブル４４は、例示的に、フロー転送判定部４３によるフロー転送の判定に用いられる経路情報の一例である。経路情報は、例えば既述のように、分散コントローラ３（例示的に、マスターＯＦＣ３１）によって計算されてＯＦスイッチ４に設定されてよい。
【０１１７】
ＮＷ−ＩＦ４１３は、例示的に、分散コントローラ３、及び、他のＯＦ−ＳＷ４との通信を可能にするインタフェースであり、既述のパケットインやフロー変更メッセージの送受信が可能である。
【０１１８】
例えば、ＮＷ−ＩＦ４１３は、受信処理に着目すれば、分散コントローラ３がＯＦ−ＳＷ４宛に送信したメッセージを受信する受信部の一例であり、また、他のＯＦ−ＳＷ４が送信したメッセージやパケットを受信する受信部の一例でもある。
【０１１９】
また、ＮＷ−ＩＦ４１３は、送信処理に着目すれば、パケットインを分散コントローラ３宛に送信する送信部の一例であり、また、フロー転送判定部４３の判定結果に応じて、他のＯＦ−ＳＷ４へパケットを転送する転送部の一例でもある。
【０１２０】
（動作例）
以下、上述した一実施形態に係る通信システム１の幾つかの動作例を説明する。
【０１２１】
（第１実施例）
図８及び図９は、上述した分散コントローラ３の動作例を示すフローチャートである。図８には、ＯＦＣ負荷情報の送信に関わる処理例が示され、図９には、次段ＯＦ−ＳＷ情報の送信に関わる処理例が示されている。
【０１２２】
（ＯＦＣ負荷情報の送信処理例）
図８に例示するように、分散コントローラ３は、管理対象のＯＦ−ＳＷ４のいずれかから、ＯＦＣ負荷情報の要求が受信されるか否かを監視してよい（処理Ｓ１１）。当該監視は、例示的に、ＯＦＣ負荷通知部３３（図４参照）にて実施されてよい。
【０１２３】
ＯＦＣ負荷情報の要求が受信されれば（処理Ｓ１１でＹＥＳ）、ＯＦＣ負荷通知部３３は、ＯＦＣ負荷モニタ３２で得られたＯＦＣ負荷情報を、要求元のＯＦ−ＳＷ４宛に送信してよい（処理Ｓ１３）。
【０１２４】
ＯＦＣ負荷情報の要求が受信されていなければ（処理Ｓ１１でＮＯ）、ＯＦＣ負荷通知部３３は、ＯＦＣ負荷情報の送信周期が到来したか否かを確認してよい（処理Ｓ１２）。ＯＦＣ負荷情報の送信周期は、予め分散コントローラ３に対して設定されてよく、例示的に、ＯＦＣ負荷通知部３３にて、設定に応じた周期をカウントするタイマによって監視することができる。
【０１２５】
送信周期の到来に応じて（処理Ｓ１２でＹＥＳ）、ＯＦＣ負荷通知部３３は、ＯＦＣ負荷モニタ３２で得られたＯＦＣ負荷情報を、分散コントローラ３の管理下の各ＯＦ−ＳＷ４宛に送信してよい。
【０１２６】
送信周期が未到来であれば（処理Ｓ１２でＮＯ）、ＯＦＣ負荷通知部３３は、上述した処理Ｓ１１に移行してよい。
【０１２７】
（次段ＯＦ−ＳＷ情報の送信処理例）
分散コントローラ３は、上述したＯＦＣ負荷情報の送信に関わる処理例の前又は後に、あるいは、並行して、図９に例示する処理を実行してよい。
【０１２８】
図９に例示するように、分散コントローラ３は、例えばトポロジ処理部３４（図４参照）によって、記憶装置３５に記憶されたトポロジ情報から、管理下の各ＯＦ−ＳＷ４についての次段ＯＦ−ＳＷ情報を抽出してよい（処理Ｓ２１）。
【０１２９】
その際、トポロジ処理部３４は、各ＯＦ−ＳＷ４をいずれのＯＦＣ３１が管理しているかを示す情報（便宜的に「ＯＦＣ対ＳＷ対応情報」と称してよい。）から、次段ＯＦ−ＳＷ４のマスターＯＦＣ情報を併せて抽出してもよい。ＯＦＣ対ＳＷ対応情報は、例示的に、記憶装置３５に記憶されてよい。
【０１３０】
次段ＯＦ−ＳＷ情報の抽出に応じて、トポロジ処理部３４は、抽出した次段ＯＦ−ＳＷ情報を、分散コントローラ３の管理下の各ＯＦ−ＳＷ４宛に送信してよい（処理Ｓ２２）。次段ＯＦ−ＳＷ４のマスターＯＦＣ情報が抽出されていれば、トポロジ処理部３４は、当該マスターＯＦＣ情報を、次段ＯＦ−ＳＷ情報と併せて各ＯＦ−ＳＷ４宛に送信してもよい。
【０１３１】
その後、トポロジ処理部３４は、トポロジ情報に変更が生じたか否かを監視してよい（処理Ｓ２３）。トポロジ情報に変更が生じていれば（処理Ｓ２３でＹＥＳ）、トポロジ処理部３４は、再度、処理Ｓ２１及びＳ２２を実施してよい。トポロジ情報に変更が生じていなければ（処理Ｓ２３でＮＯ）、トポロジ処理部３４は、監視を継続してよい。
【０１３２】
図８及び図９に例示した処理によって、各ＯＦ−ＳＷ４は、分散コントローラ３から、ＯＦＣ負荷情報及び次段ＯＦ−ＳＷ情報（又は、追加で次段ＯＦ−ＳＷ４のマスターＯＦＣ情報）をそれぞれＯＦＣ負荷取得部４１及びトポロジ取得部４２にて取得できる。
【０１３３】
したがって、各ＯＦ−ＳＷ４は、新規フローのパケットが入力された場合に、マスターＯＦＣ３１の負荷に応じて、当該ＯＦＣ３１に対するパケットインの送信可否を抑制したり、入力パケットを次段ＯＦ−ＳＷ４に転送したりすることが可能となる。
【０１３４】
（新規フローパケット処理例）
以下、図１０〜図１２を参照して、ＯＦ−ＳＷ４に新規フローのパケットが入力された場合の処理例について説明する。
【０１３５】
図１０は、図３に例示したケースと同様に、ＯＦ−ＳＷ４−１に対して複数（図１０の例では２つ）の新規フローのパケットがホスト５−１から入力されることを想定したケースを示している。
【０１３６】
また、いずれのフローについても、経路計算によってＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路（実線矢印Ｍ１４及び点線矢印Ｍ２４参照）が経路設定対象に決定されると仮定する。
【０１３７】
なお、図１０の例において、ＯＦ−ＳＷ４−１に付した符号Ｐ１〜Ｐ３は、いずれも、ＯＦ−ＳＷ４−１のポート番号（「ポート識別情報」と称してもよい。）を表す。ＯＦ−ＳＷ４の「ポート」は、物理的なポートでもよいし、論理的なポートでもよい。例示的に、符号Ｐ１は、ＯＦ−ＳＷ４−１の入力ポートを表し、符号Ｐ２及びＰ３は、ＯＦ−ＳＷ４−１の出力ポートを表す。
【０１３８】
図１０の例において、ＯＦ−ＳＷ４−１の入力ポートＰ１は、ホスト５−１に接続されており、ＯＦ−ＳＷ４−１の一方の出力ポートＰ２は、ＯＦ−ＳＷ４−３に接続されており、ＯＦ−ＳＷ４−１の他方の出力ポートＰ３は、ＯＦ−ＳＷ４−２に接続されている。
【０１３９】
図１１は、当該接続関係において、ＯＦ−ＳＷ４−１が分散コントローラ３から取得した次段ＯＦ−ＳＷ情報の一例を示す図である。なお、図１１に例示する情報は、新規フローの入力パケットの転送先の判定（又は決定）に用いられるから、便宜的に、「新規フロー転送先判定情報」と称してもよい。
【０１４０】
図１１に例示するように、新規フロー転送先判定情報は、ＯＦ−ＳＷ４−１の出力ポートＰ２及びＰ３のそれぞれに接続されているＯＦ−ＳＷ４−３及び４−２の識別情報（例示的に、ＤＰＩＤ）を含んでよい。なお、図１１において、「ＤＰＩＤ＃２」はＯＦ−ＳＷ４−２の識別情報を表し、「ＤＰＩＤ＃３」はＯＦ−ＳＷ４−３の識別情報を表す。
【０１４１】
図１２は、ＯＦ−ＳＷ４（例えば、ＯＦ−ＳＷ４−１）の動作例を示すフローチャートである。
【０１４２】
新規の第１のフローのパケットがＯＦ−ＳＷ４−１に入力されると、ＯＦ−ＳＷ４−１は、フロー転送判定部４３にて、マスターＯＦＣ３１−１のＯＦＣ負荷情報（例示的に、ＣＰＵ使用率）が閾値を超過しているか否かを確認してよい（処理Ｓ３１）。
【０１４３】
マスターＯＦＣ３１−１のＯＦＣ負荷情報が閾値を超過していなければ（処理Ｓ３１でＮＯ）、ＯＦ−ＳＷ４−１は、分散コントローラ３（マスターＯＦＣ３１−１）宛にパケットインを送信してよい（処理Ｓ３５、図１０の符号Ｍ１２）。
【０１４４】
マスターＯＦＣ３１−１は、ＯＦ−ＳＷ４−１からのパケットインの受信に応じて、図２に例示したケースと同様に、他のマスターＯＦＣ３１−２及び３１−３と連携して、第１のフローの経路計算と当該フローの経路設定とを実施してよい。
【０１４５】
例えば、ＯＦ−ＳＷ４−１、４−３及び４−４に対して、それぞれを管理するマスターＯＦＣ３１−１、３１−２及び３１−３が、フロー変更メッセージを送信してよい（図１０の符号Ｍ１３参照）。
【０１４６】
フロー変更メッセージによって、ＯＦ−ＳＷ４−１、４−３及び４−４のフローテーブル４４にそれぞれ第１のフローのパケットに対する「ルール」が登録される。以後、ホスト５−１からホスト５−２宛に送信された第１のフローのパケットは、ＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路でホスト５−２へ転送される（図１０の実線矢印Ｍ１４参照）
【０１４７】
一方、マスターＯＦＣ３１−１のＯＦＣ負荷情報が閾値を超過している場合（図１２の処理Ｓ３１でＹＥＳ）、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、出力ポートに接続されている次段のＯＦ−ＳＷ４が存在するか否かを確認してよい（処理Ｓ３２）。
【０１４８】
例えば、上述した第１のフローについてのパケットインの処理のためにマスターＯＦＣ３１−１の負荷情報が閾値を超過していることがある。この場合、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、次段ＯＦ−ＳＷ情報を基に、次段のＯＦ−ＳＷ４が存在するか否かを確認してよい。
【０１４９】
確認の結果、次段のＯＦ−ＳＷ４が存在すれば（図１２の処理Ｓ３２でＹＥＳ）、ＯＦ−ＳＷ４−１は、マスターＯＦＣ３１−１宛にパケットインを送信せずに、新規の第２のフローの入力パケットを次段のＯＦ−ＳＷ４へ転送してよい（処理Ｓ３３）。
【０１５０】
図１０及び図１１の例では、ＯＦ−ＳＷ４−１の出力ポートＰ２及びＰ３にそれぞれＯＦ−ＳＷ４−３及び４−２が接続されているから、図１２の処理Ｓ３２でＹＥＳと判定される。
【０１５１】
したがって、ＯＦ−ＳＷ４−１は、マスターＯＦＣ３１−１宛にパケットインを送信せずに、ＯＦ−ＳＷ４−３及び４−２のいずれか一方へ、第２のフローの入力パケットを転送してよい。図１０では、非限定的な一例として、出力ポートＰ２を通じてＯＦ−ＳＷ４−３へ、第２のフローの入力パケットが転送される（符号Ｍ２１参照）。
【０１５２】
なお、図１２の処理Ｓ３２において、次段のＯＦ−ＳＷ４が存在しない場合（処理Ｓ３２でＮＯ）、ＯＦ−ＳＷ４は、新規フロー（第１及び第２のフローのいずれでもよい）の入力パケットを廃棄してよい（処理Ｓ３４）。
【０１５３】
次段ＯＦ−ＳＷ４が存在しない場合には、新規フローのパケット転送先候補が「ホスト」である場合が含まれてよい（以降、同様。）。廃棄されたパケットは、例示的に、ＴＣＰの再送処理によって、新規フローのパケット送信元であるホスト５−１から再送されてよい。
【０１５４】
ＯＦ−ＳＷ４−１から新規の第２のフローのパケット転送を受けたＯＦ−ＳＷ４−３は、ＯＦ−ＳＷ４−１と同様に、図１２のフローチャートに従って動作してよい。
【０１５５】
例えば、マスターＯＦＣ３１−２のＯＦＣ負荷情報が閾値を超過していなければ（図１２の処理Ｓ３１でＮＯ）、ＯＦ−ＳＷ４−３が、パケットインをマスターＯＦＣ３１−２宛に送信することになる（処理Ｓ３５、図１０の符号Ｍ２２）。
【０１５６】
マスターＯＦＣ３１−２は、ＯＦ−ＳＷ４−２からのパケットインの受信に応じて、他のマスターＯＦＣ３１−１及び３１−３と連携して、第２のフローの経路計算と当該フローの経路設定とを実施する。
【０１５７】
例えば、ＯＦ−ＳＷ４−１、４−３及び４−４に対して、それぞれを管理するマスターＯＦＣ３１−１〜３１−３が、フロー変更メッセージを送信する（図１０の符号Ｍ２３参照）。
【０１５８】
フロー変更メッセージによって、ＯＦ−ＳＷ４−１、４−３及び４−４のフローテーブル４４にそれぞれ第２のフローのパケットに対する「ルール」が登録される。以後、ホスト５−１からホスト５−２宛に送信された第２のフローのパケットは、ＯＦ−ＳＷ４−１、４−３及び４−４を経由する経路でホスト５−２へ転送される（図１０の点線矢印Ｍ２４参照）。
【０１５９】
なお、ＯＦ−ＳＷ４−３は、マスターＯＦＣ３１−２のＯＦＣ負荷情報が閾値を超過している場合、次段ＯＦ−ＳＷ４が存在すれば、ＯＦ−ＳＷ４−１から転送された新規フローのパケットを、当該次段のＯＦ−ＳＷ４へ更に転送してよい。
【０１６０】
以上のように、ＯＦ−ＳＷ４は、マスターＯＦＣ３１の負荷が閾値を超過しており高負荷な状態であれば、新規フローの入力パケットに対するパケットインをマスターＯＦＣ３１に送信せずに、当該入力パケットを次段のＯＦ−ＳＷ４へ転送する。
【０１６１】
したがって、特定のＯＦＣ３１に負荷が集中して負荷の偏りが生じることを抑制できる。別言すると、ＯＦＣ３１間の負荷分散を確実に達成することができる。よって、分散コントローラ３の安定的な運用が可能になる。
【０１６２】
（第２実施例）
次に、図１３及び図１４を参照して、ＯＦ−ＳＷ４に新規フローのパケットが入力された場合の、第２実施例に係る処理例について説明する。
【０１６３】
第１実施例では、新規フローの入力パケットの転送先ＯＦ−ＳＷ４として、転送元ＯＦ−ＳＷ４を管理するマスターＯＦＣ３１と同じマスターＯＦＣ３１によって管理されているＯＦ−ＳＷ４が選択される可能性がある。
【０１６４】
例えば図１０において、ＯＦ−ＳＷ４−１は、出力ポートＰ３に接続されたＯＦ−ＳＷ４−２を、新規フローの入力パケットの転送先に選ぶことが可能である。ここで、ＯＦ−ＳＷ４−２のマスターＯＦＣ３１−１は、転送元ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１でもある。
【０１６５】
そのため、管理元が同じマスターＯＦＣ３１−１であるＯＦ−ＳＷ４−１からＯＦ−ＳＷ４−２に新規フローの入力パケットを転送しても、ＯＦＣ３１間の負荷が分散されない可能性がある。
【０１６６】
そこで、第２実施例では、新規フローのパケットの転送元ＯＦ−ＳＷ４が、当該パケットの転送先に、転送元のＯＦ−ＳＷ４を管理するマスターＯＦＣ３１とは異なるマスターＯＦＣ３１が管理するＯＦ−ＳＷ４を選べるようにする。
【０１６７】
転送元ＯＦ−ＳＷ４のマスターＯＦＣ３１と、転送先候補である次段ＯＦ−ＳＷ４のマスターＯＦＣ３１と、が同じか否かは、既述の次段ＯＦ−ＳＷ４についてのマスターＯＦＣ情報に基づいて判定できる。
【０１６８】
図１３に、図１０に例示したケースでの次段ＯＦ−ＳＷ情報及びマスターＯＦＣ情報の一例を示す。図１３に例示する情報は、「新規フロー転送先判定情報」の第２実施例である。別言すると、「新規フロー転送先判定情報」は、次段ＯＦ−ＳＷ情報と、マスターＯＦＣ情報と、を情報要素に含んでよい。
【０１６９】
次段ＯＦ−ＳＷ情報は、図１１の例と同様に、次段ＯＦ−ＳＷ４のＤＰＩＤによって表されてよい。マスターＯＦＣ情報には、次段ＯＦ−ＳＷ４−３のマスターＯＦＣ３１−２の識別情報と、次段ＯＦ−ＳＷ４−２のマスターＯＦＣ３１−１の識別情報と、が含まれてよい。
【０１７０】
ＯＦ−ＳＷ４−１の例えばフロー転送判定部４３が、図１３に例示する新規フロー転送先判定情報を参照する。当該参照によって、ＯＦ−ＳＷ４−１は、ＯＦ−ＳＷ４−１の出力ポートＰ２及びＰ３に接続されたＯＦ−ＳＷ４−３及び４−２のマスターＯＦＣがそれぞれＯＦＣ３１−２及び３１−１であることを認識できる。
【０１７１】
したがって、ＯＦ−ＳＷ４−１は、新規フローの入力パケットの転送先を、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１とは異なるマスターＯＦＣ３１−２が管理する次段ＯＦ−ＳＷ４−３に選ぶことができる。
【０１７２】
図１４に、第２実施例に係るＯＦ−ＳＷ４の動作例をフローチャートにて示す。図１４に例示する処理Ｓ４１、Ｓ４２、及び、Ｓ４４〜Ｓ４６は、それぞれ、図１２に例示した処理Ｓ３１〜Ｓ３５と同様でよい。
【０１７３】
図１０に例示したケースにおいて、新規フローのパケット転送先候補の次段ＯＦ−ＳＷ４が存在する場合、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、処理Ｓ４２でＹＥＳと判定する。
【０１７４】
当該判定に応じて、フロー転送判定部４３は、図１３に例示したマスターＯＦＣ情報を基に、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１とは異なるＯＦＣ３１をマスターＯＦＣとするＯＦ−ＳＷ４が存在するか否かを確認してよい（処理Ｓ４３）。
【０１７５】
確認の結果、マスターＯＦＣ３１−１とは異なるＯＦＣ３１をマスターＯＦＣとするＯＦ−ＳＷ４が存在すれば（処理Ｓ４３でＹＥＳ）、フロー転送判定部４３は、当該ＯＦ−ＳＷ４へ新規フローの入力パケットを転送してよい（処理Ｓ４４）。
【０１７６】
図１０及び図１３の例では、次段ＯＦ−ＳＷ４−２及び４−３のうち、ＯＦ−ＳＷ４−３のマスターＯＦＣ３１−２が、ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１とは異なるので、ＯＦ−ＳＷ４−３に、新規フローの入力パケットが転送されることになる。
【０１７７】
なお、マスターＯＦＣ３１−１とは異なるＯＦＣ３１をマスターＯＦＣとするＯＦ−ＳＷ４が存在しなければ（処理Ｓ４３でＮＯ）、フロー転送判定部４３は、新規フローの入力パケットを廃棄してよい（処理Ｓ４５）。廃棄されたパケットは、例示的に、ＴＣＰの再送処理によって、新規フローのパケット送信元であるホスト５−１から再送されてよい。
【０１７８】
以上のように、第２実施例によれば、ＯＦ−ＳＷ４は、新規フローの入力パケットを次段のＯＦ−ＳＷ４へ転送する際、自ＳＷ４のマスターＯＦＣ３１とは異なるＯＦＣ３１をマスターＯＦＣとするＯＦ−ＳＷ４を転送先に選ぶ。したがって、第１実施例に比して、更に確実にＯＦＣ３１間の負荷分散を図ることができる。
【０１７９】
（第３実施例）
次に、図１５〜図１７を参照して、ＯＦ−ＳＷ４に新規フローのパケットが入力された場合の、第３実施例に係る処理例について説明する。
【０１８０】
第３実施例では、新規フローのパケットの転送先候補としての次段ＯＦ−ＳＷ４が複数存在する場合に、ＯＦ−ＳＷ４は、当該複数のＯＦ−ＳＷ４それぞれのマスターＯＦＣ３１の負荷を比較してよい。そして、ＯＦ−ＳＷ４は、負荷の相対的に低いＯＦＣ３１が管理する次段ＯＦ−ＳＷ４を転送先に選んでよい。
【０１８１】
図１５に、第３実施例に係る通信システム１の構成例を示す。図１５において、ホスト５−１、ホスト５−２、及び、ＯＦ−ＳＷ４−１〜４−４の接続関係は、図３及び図１０に例示した接続関係と同一若しくは同様である。
【０１８２】
ただし、図１５の例において、ＯＦ−ＳＷ４−１を管理するマスターＯＦＣは、ＯＦＣ３１−１であり、ＯＦ−ＳＷ４−２及び４−４を管理するマスターＯＦＣは、ＯＦＣ３１−３であり、ＯＦ−ＳＷ４−３を管理するマスターＯＦＣは、ＯＦＣ３１−２である。
【０１８３】
また、第３実施例では、非限定的な一例として、ＯＦ−ＳＷ４−１に対して３つの新規フローのパケットがホスト５−１から入力されることを想定する。
【０１８４】
図１５において、新規の第１のフローのパケット（符号Ｍ１１参照）がＯＦ−ＳＷ４−１に入力された時点で、マスターＯＦＣ３１−１の負荷（例示的に、ＣＰＵ使用率）が閾値（例えば、７０％）を超過していなかったと仮定する。この場合、ＯＦ−ＳＷ４−１は、マスターＯＦＣ３１−１へパケットインを送信する。
【０１８５】
しかし、新規の第２のフローのパケットがＯＦ−ＳＷ４−１に入力された時点では、マスターＯＦＣ３１−１の負荷が、例えば第１のフローについてのパケットインの処理のために、閾値を超過したと仮定する。
【０１８６】
この場合、ＯＦ−ＳＷ４−１は、例えば第１又は第２実施例と同様にして、マスターＯＦＣ３１−１へ第２のフローについてのパケットインを送信せずに、次段ＯＦ−ＳＷ４へ第２のフローの入力パケットを転送する。
【０１８７】
図１５の例では、ＯＦ−ＳＷ４−１は、第２のフローの入力パケット（符号Ｍ２１参照）を、次段ＯＦ−ＳＷ４−３へ転送する。当該ＯＦ−ＳＷ４−３は、マスターＯＦＣ３１−２の負荷が閾値を超過していなければ、第２のフローについてのパケットインをマスターＯＦＣ３１−２へ送信する（符号Ｍ２２参照）。
【０１８８】
第１及び第２のフローについてのパケットインの処理に応じて、各ＯＦＣ３１−１〜３１−３の負荷（例示的に、ＣＰＵ使用率）が、それぞれ、８０％、６０％及び２０％になったと仮定する。
【０１８９】
なお、ＣＰＵ使用率＝８０％の状態は、例示的に、負荷が閾値である７０％を超過した状態にあり、ＣＰＵ使用率＝６０％及びＣＰＵ使用率＝２０％は、負荷が閾値を超過していない状態にあると捉えてよい。
【０１９０】
この場合にＯＦ−ＳＷ４−１が、例えばメモリ４１２（図７参照）に記憶する情報の一例を図１６に示す。図１６に例示する情報は、「新規フロー転送先判定情報」の第３実施例である。
【０１９１】
別言すると、第３実施例の新規フロー転送先判定情報は、次段ＯＦ−ＳＷ情報、マスターＯＦＣ情報、及び、ＯＦＣ負荷情報を情報要素に含んでよい。
【０１９２】
次段ＯＦ−ＳＷ情報は、第１実施例（例えば図１１）と同様でよく、マスターＯＦＣ情報は、第２実施例（図１３）と同様に、次段ＯＦ−ＳＷ４を管理するマスターＯＦＣ３１の識別情報であってよい。ＯＦＣ負荷情報は、次段ＯＦ−ＳＷ４を管理するマスターＯＦＣ３１の負荷情報であってよい。
【０１９３】
上述したＯＦＣ３１−１〜３１−３の負荷状態において、ＯＦ−ＳＷ４−１に対して、更に、新規の第３のフローのパケットが入力されたと仮定する。
【０１９４】
この場合、ＯＦ−ＳＷ４は、第２実施例と同様にして、当該ＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１とは異なるＯＦＣ３１をマスターＯＦＣとする次段ＯＦ−ＳＷ４が存在するか否かを、図１６に例示した新規フロー転送先判定情報を基に、確認してよい。
【０１９５】
ここで、図１５及び図１６の例では、ＯＦＣ３１−１とは異なるＯＦＣ３１−２及び３１−３をそれぞれマスターＯＦＣとする２つのＯＦ−ＳＷ４−３及び４−２が存在する。別言すると、新規フローの入力パケットの転送先候補がＯＦ−ＳＷ４−３及び４−２の２つ存在する。
【０１９６】
この場合、ＯＦ−ＳＷ４−１は、転送先候補であるＯＦ−ＳＷ４−３及び４−２のマスターＯＦＣ３１−２及びＯＦＣ３１−３のＯＦＣ負荷情報を比較して、負荷の低い方のＯＦＣ３１が管理するＯＦ−ＳＷ４を転送先に選択、決定してよい。
【０１９７】
図１５及び図１６の例では、ＯＦＣ３１−２の負荷よりもＯＦＣ３１−３の負荷の方が低いため、ＯＦ−ＳＷ４−１は、負荷の低いＯＦＣ３１−３が管理するＯＦ−ＳＷ４−２へ、新規の第３フローの入力パケットを転送してよい（図１５の符号Ｍ３１参照）。
【０１９８】
ＯＦ−ＳＷ４−２は、新規フロー転送先判定情報においてマスターＯＦＣ３１−２のＯＦＣ負荷情報を確認すると、図１５及び図１６の例では閾値を超過していない。したがって、ＯＦ−ＳＷ４−１は、新規の第３のフローについてのパケットインを、マスターＯＦＣ３１−２宛に送信してよい（図１５の符号Ｍ３２参照）。
【０１９９】
以上のようにして、ＯＦ−ＳＷ４−１に対して３つの新規フローのパケットが入力されても、各フローについてのパケットインは、ＯＦ−ＳＷ４−１〜４−３からそれぞれ異なるＯＦＣ３１−１〜３１−３宛に分散的に送信される。したがって、ＯＦＣ３１−１〜３１−３間の負荷分散が実現される。
【０２００】
以上の動作例を実現可能なＯＦ−ＳＷ４の第３実施例に係る処理例を、図１７にてフローチャートにて例示する。図１７に例示する処理Ｓ５１〜Ｓ５３、Ｓ５５、及び、Ｓ５６は、それぞれ、第２実施例（図１４）に例示した処理Ｓ４１〜Ｓ４３、Ｓ４５、及び、Ｓ４６と同様でよい。
【０２０１】
図１５及び図１６に例示したケースにおいて、新規フローのパケット転送先候補としてＯＦ−ＳＷ４−１のマスターＯＦＣ３１−１とは異なるＯＦＣ３１−３及び３１−２をマスターＯＦＣとするＯＦ−ＳＷ４−３及び４−２が存在する。そのため、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、処理Ｓ５３でＹＥＳと判定する。
【０２０２】
当該判定に応じて、フロー転送判定部４３は、図１６に例示したＯＦＣ負荷情報を基に、負荷が相対的に低いＯＦＣ３１−３をマスターＯＦＣとする次段ＯＦ−ＳＷ４−２を転送先に選択してよい。当該選択に応じて、フロー転送判定部４３は、選択したＯＦ−ＳＷ４−２へ、新規フローの入力パケットを転送してよい（処理Ｓ５４）。
【０２０３】
以上のように、第３実施例によれば、新規フローのパケットの転送先候補としての次段ＯＦ−ＳＷ４が複数存在する場合に、ＯＦ−ＳＷ４は、マスターＯＦＣ３１の負荷が相対的に低いＯＦＣ３１が管理するＯＦ−ＳＷ４を転送先に選ぶ。
【０２０４】
したがって、第１及び第２実施例に比して、更に確実にＯＦＣ３１間の負荷分散を図ることができる。また、新規フローのパケットが次々にＯＦ−ＳＷ４を転送される確率を低減できるから、パケットインの処理遅延を抑制することもできる。
【０２０５】
（第４実施例）
上述した第３実施例のように、新規フローの入力パケットの転送先候補である次段ＯＦ−ＳＷ４が複数存在する場合、ＯＦ−ＳＷ４（例えば、フロー転送判定部４３）は、複数の次段ＯＦ−ＳＷ４に対して新規フローのパケットを振り分けて転送してもよい。
【０２０６】
例えば図１５及び図１６に示したケースにおいて、ＯＦ−ＳＷ４−１は、負荷が低いＯＦＣ３１−３に管理されているＯＦ−ＳＷ４−２へ、負荷が高いＯＦＣ３１−２に管理されているＯＦ−ＳＷ４−３よりも多くのパケットを転送してよい。別言すると、ＯＦ−ＳＷ４−１は、新規フローの信号の転送量がＯＦ−ＳＷ４−３よりもＯＦ−ＳＷ４−２の方が多くなるように、新規フローの入力信号の転送を制御してよい。
【０２０７】
例えば図１８に示すように、図１６と同様、ＯＦＣ３１−２の負荷（例示的にＣＰＵ使用率）が６０％であり、ＯＦＣ３１−３の負荷が２０％であったと仮定する。
【０２０８】
この場合、ＯＦ−ＳＷ４−１は、ＯＦＣ３１−２及び３１−３の負荷の逆比（１：３）となるように、新規フローの入力パケット（別言すると、トラフィック）を、ＯＦ−ＳＷ４−３及び４−２に振り分けて転送してよい（図１９の処理Ｓ６４）。
【０２０９】
なお、図１９の処理Ｓ６１〜Ｓ６３、Ｓ６５及びＳ６６は、それぞれ、第３実施例（図１７）の処理Ｓ５１〜Ｓ５３、Ｓ５５及びＳ５６と同様でよい。
【０２１０】
第４実施例によれば、新規フローのトラフィックが、転送先候補の次段ＯＦ−ＳＷ４を管理するＯＦＣ３１の負荷に応じて振り分けて転送されるので、ＯＦＣ３１の負荷分散を図りつつ、パケットインの処理遅延を抑制できる。
【０２１１】
（第５実施例）
上述した第１〜第４実施例において、転送先候補の複数のＯＦ−ＳＷ４をそれぞれ管理する複数のＯＦＣの負荷がいずれも閾値を超過している場合が有り得る。その場合、各ＯＦ−ＳＷ４が、次段ＯＦ−ＳＷ４へ、新規フローのパケット転送を繰り返してしまい、パケット転送のループが生じる可能性がある。
【０２１２】
第５実施形態では、当該ループの発生を抑止する例について、図２０〜図２２を参照して説明する。
【０２１３】
図２０は、第５実施例に係る通信システム１の構成例を示す図である。図２０において、ホスト５−１、ホスト５−２、及び、ＯＦ−ＳＷ４−１〜４−４の接続関係は、図１５に例示した接続関係と同一若しくは同様である。
【０２１４】
ホスト５−１から新規フローのパケットが入力されたＯＦ−ＳＷ４は、第１〜第４実施例と同様にして次段ＯＦ−ＳＷ４−３へ転送する際、転送するパケットのヘッダフィールドにＴＴＬ（time to live）値（例示的に、正の整数）を設定してよい。
【０２１５】
ここで、新規フローのパケットが入力された初段のＯＦ−ＳＷ４−１を除いた各ＯＦ−ＳＷ４は、新規フローのパケットを受信すると、ヘッダフィールドのＴＴＬ値を「−１」減算してよい。
【０２１６】
減算によりＴＴＬ値が「０」となったパケットについては、更なるパケット転送は行なわずに、ＴＴＬ値が「０」となったことを検出したＯＦ−ＳＷ４が廃棄してよい。
【０２１７】
例えば図２０に示すように、初段のＯＦ−ＳＷ４−１がＴＴＬ値＝４を設定して転送したパケット（符号Ｍ２１参照）が、ＯＦ−ＳＷ４−３、４−４、及び、４−２を経由する経路で転送されて、ＯＦ−ＳＷ４−１に戻るケースを想定する。
【０２１８】
当該ケースでは、ＯＦ−ＳＷ４−３、４−４、４−２、及び、４−１において、それぞれＴＴＬ値が「−１」減算されるから（符号Ｍ２２〜Ｍ２５参照）、初段のＯＦ−ＳＷ４−１に戻ったパケットのＴＴＬ値は「０」となる。したがって、ＯＦ−ＳＷ４−１は、当該パケットの更なる転送は行なわずに、当該パケットを廃棄してよい。
【０２１９】
図２１及び図２２は、上述したループ転送を回避する処理が可能なＯＦ−ＳＷ４の動作例を示すフローチャートである。
【０２２０】
図２１に例示する処理Ｓ７１〜Ｓ７３、Ｓ７５及びＳ７６は、それぞれ、図１９に例示した処理Ｓ６１〜Ｓ６３、Ｓ６５及びＳ６６と同様でよい。図２１に例示する処理Ｓ７４では、上述したＴＴＬ値の処理（便宜的に「ＴＴＬ処理」と略称してよい。）が実行される。
【０２２１】
図２２がＴＴＬ処理（Ｓ７４）の一例を示すフローチャートである。図２２に例示するように、ＯＦ−ＳＷ４（フロー転送判定部４３）は、転送する新規フローのパケットのヘッダフィールドにＴＴＬ値が設定されているか否かを確認してよい（処理Ｓ７４１）。
【０２２２】
ＴＴＬ値が設定されていなければ（処理Ｓ７４１でＮＯ）、ＯＦ−ＳＷ４は、転送する新規フローのパケットフィールドにＴＴＬ値を設定して次段ＯＦ−ＳＷ４へ転送してよい（処理Ｓ７４５）。当該処理Ｓ７４５は、初段のＯＦ−ＳＷ４−１による処理に相当すると捉えてよい。
【０２２３】
一方、ＴＴＬ値が設定されていれば（処理Ｓ７４１でＹＥＳ）、ＯＦ−ＳＷ４は、ＴＴＬ値を「−１」減算して（処理Ｓ７４２）、ＴＴＬ値が「０」になったか否かを確認してよい（処理Ｓ７４３）。
【０２２４】
減算したＴＴＬ値が「０」でなければ（処理Ｓ７４３でＮＯ）、ＯＦ−ＳＷ４は、減算したＴＴＬ値を、転送する新規フローのパケットのヘッダフィールドに設定して次段のＯＦ−ＳＷ４へ転送してよい（処理Ｓ７４５）。
【０２２５】
一方、減算したＴＴＬ値が「０」であれば（処理Ｓ７４３でＹＥＳ）、ＯＦ−ＳＷ４は、当該新規フローの入力パケットを次段ＯＦ−ＳＷ４へ転送せずに、廃棄してよい（処理Ｓ７４４）。廃棄されたパケットについては、例示的に、ＴＣＰの再送処理によって、新規フローのパケット送信元（図２０の例であれば、ホスト５−１）から再送されてよい。
【０２２６】
以上のように、第５実施例によれば、いずれのＯＦＣ３１も負荷が閾値を超過した高負荷な状態において、パケット転送のループが生じることを抑止することができるので、ＯＦネットワーク２における通信リソースが浪費されてしまうことを抑制できる。
【０２２７】
（第６実施例）
第６実施例では、ＯＦＣ３１の負荷がいずれも閾値を超過している場合、ＯＦ−ＳＷ４において、新規フローの入力パケットをメモリ４１２にバッファしてよい。ＯＦ−ＳＷ４は、自ＳＷ４のマスターＯＦＣ３１とは異なる別のＯＦＣ３１の負荷を監視し、負荷が閾値以下の他のＯＦＣ３１を発見すれば、当該他のＯＦＣ３１が管理する次段ＯＦ−ＳＷ４へ、バッファしたパケットを転送してよい。
【０２２８】
以下、図２３〜図２７を参照して、第６実施例の動作例について説明する。
図２３に例示するように、ＯＦ−ＳＷ４−１に対してホスト５−１からＯＦ−ＳＷ４−１にとって新規のフローのパケットが入力されると仮定する（図２３の符号Ｍ１１参照）。
【０２２９】
なお、当該新規フローは、ＯＦ−ＳＷ４−１に対して入力された単一のフローと捉えてもよいし、ＯＦ−ＳＷ４−１に対して入力された複数のフローの１つに着目したフローと捉えてもよい。
【０２３０】
ＯＦ−ＳＷ４−１は、新規フローのパケット入力に応じて、例えばフロー転送判定部４３によって、マスターＯＦＣ３１−１の負荷と、次段ＯＦ−ＳＷ４−２及び４−３それぞれのマスターＯＦＣ３１−３及び３１−２の負荷を確認する。
【０２３１】
ここで、各ＯＦＣ３１−１〜３１−３の負荷（例えばＣＰＵ使用率）は、例示的に、図２３に示すように、８０％であり、閾値（例えば７０％）を超過していると仮定する。この場合、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、新規フローの入力パケットをメモリ４１２にバッファしてよい。
【０２３２】
その後、例えば図２４及び図２５に示すように、ＯＦＣ３１−２の負荷が例えば２０％となり閾値以下に低下したと仮定する。ＯＦ−ＳＷ４−１のフロー転送判定部４３は、図２５に例示する新規フロー転送先判定情報におけるＯＦＣ負荷情報を参照することで、ＯＦＣ３１−２の負荷が閾値以下に低下していることを検出できる。
【０２３３】
したがって、ＯＦ−ＳＷ４−１のフロー転送判定部４３は、メモリ４１２にバッファした、新規フローの入力パケットをメモリ４１２から読み出して、ＯＦＣ３１−２をマスターＯＦＣとする次段ＯＦ−ＳＷ４−２へ転送してよい（図２４の符号Ｍ２２参照）。
【０２３４】
ＯＦ−ＳＷ４−２は、ＯＦ−ＳＷ４−１から転送された新規フローのパケット入力に応じて、例えばフロー転送判定部４３によって、新規フロー転送先判定情報を参照して、マスターＯＦＣ３１−２のＯＦＣ負荷情報を確認してよい。
【０２３５】
この場合、ＯＦＣ３１−２の負荷は２０％であり閾値を超過していないので、ＯＦ−ＳＷ４−２から転送された新規フローの入力パケットに対するパケットインをＯＦＣ３１−２宛に送信してよい（図２４の符号Ｍ２３参照）。
【０２３６】
図２６に、上述した動作例をフローチャートにて示す。図２６に例示する処理Ｓ８１〜Ｓ８３、Ｓ８９及びＳ９０は、それぞれ、図２１に例示した処理Ｓ７１〜Ｓ７３、Ｓ７５及びＳ７６と同様でよい。
【０２３７】
処理Ｓ８３において、ＯＦ−ＳＷ４のフロー転送判定部４３は、自ＳＷ４のマスターＯＦＣ３１とは異なる別のＯＦＣ３１をマスターＯＦＣとする次段ＯＦ−ＳＷ４が存在することを確認したと仮定する（処理Ｓ８３でＹＥＳ）。
【０２３８】
この場合、フロー転送判定部４３は、新規フロー転送先判定情報において、当該次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過しているか否かを更に確認してよい（処理Ｓ８４）。
【０２３９】
当該確認の結果、当該次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過していれば（処理Ｓ８４でＹＥＳ）、フロー転送判定部４３は、新規フローの入力パケットを廃棄してよい（処理Ｓ８９）。廃棄されたパケットは、例示的に、ＴＣＰの再送処理によって、新規フローのパケット送信元（例えば、ホスト５−１）から再送されてよい。
【０２４０】
一方、次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過していなければ（処理Ｓ８４でＮＯ）、フロー転送判定部４３は、自ＳＷ４のメモリ４１２の使用量又は使用率が閾値を超過しているか否かを更に確認してよい（処理Ｓ８５）。
【０２４１】
当該確認の結果、自ＳＷ４のメモリ４１２の使用量又は使用率が閾値を超過していれば（処理Ｓ８５でＹＥＳ）、別言すると、空きメモリ容量が不足していれば、フロー転送判定部４３は、新規フローの入力パケットを廃棄してよい（処理Ｓ８９）。廃棄されたパケットは、例示的に、ＴＣＰの再送処理によって、新規フローのパケット送信元（例えば、ホスト５−１）から再送されてよい。
【０２４２】
一方、自ＳＷ４のメモリ４１２の使用量又は使用率が閾値を超過していなければ（処理Ｓ８５でＮＯ）、別言すると、空きメモリ容量が不足していなければ、フロー転送判定部４３は、新規フローの入力パケットをメモリ４１２にバッファしてよい（処理Ｓ８６）。
【０２４３】
その後、フロー転送判定部４３は、新規フロー転送先判定情報において、当該次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過しているか否かを、再度、確認してよい（処理Ｓ８７）。
【０２４４】
当該確認の結果、次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過していれば（処理Ｓ８４でＹＥＳ）、フロー転送判定部４３は、処理Ｓ８５以降の処理を繰り返してよい。
【０２４５】
一方、次段ＯＦ−ＳＷ４のマスターＯＦＣ３１の負荷が閾値を超過していなければ（処理Ｓ８７でＮＯ）、フロー転送判定部４３は、メモリ４１２にバッファしたパケットを読み出して、当該次段ＯＦ−ＳＷ４へ転送してよい（処理Ｓ８８）。
【０２４６】
以上のように、第６実施例によれば、ＯＦ−ＳＷ４は、負荷が閾値を超過していないＯＦＣ３１が発見されるまで、新規フローの入力パケットをメモリ４１２にバッファしてパケット転送を待機する。したがって、ＯＦＣ３１間の負荷分散を図りつつ、新規フローのパケット廃棄率を低減できる。
【符号の説明】
【０２４７】
１  通信システム
２  ＯＦネットワーク
３  分散コントローラ
３１−１〜３１−ｎ  ＯＦＣ
３２  ＯＦＣ負荷モニタ
３３  ＯＦＣ負荷通知部
３４  トポロジ処理部
３５  記憶装置
４−１〜４−Ｎ  ＯＦ−ＳＷ
４１  ＯＦＣ負荷取得部
４２  トポロジ取得部
４３  フロー転送判定部
４４  フローテーブル
４１１  プロセッサ
４１２  メモリ
４１３  ＮＷ−ＩＦ
５−１，５−２  ホスト
【図１】
2017130840.tif 000003
【図２】
2017130840.tif 000004
【図３】
2017130840.tif 000005
【図４】
2017130840.tif 000006
【図５】
2017130840.tif 000007
【図６】
2017130840.tif 000008
【図７】
2017130840.tif 000009
【図８】
2017130840.tif 000010
【図９】
2017130840.tif 000011
【図１０】
2017130840.tif 000012
【図１１】
2017130840.tif 000013
【図１２】
2017130840.tif 000014
【図１３】
2017130840.tif 000015
【図１４】
2017130840.tif 000016
【図１５】
2017130840.tif 000017
【図１６】
2017130840.tif 000018
【図１７】
2017130840.tif 000019
【図１８】
2017130840.tif 000020
【図１９】
2017130840.tif 000021
【図２０】
2017130840.tif 000022
【図２１】
2017130840.tif 000023
【図２２】
2017130840.tif 000024
【図２３】
2017130840.tif 000025
【図２４】
2017130840.tif 000026
【図２５】
2017130840.tif 000027
【図２６】
2017130840.tif 000028