(57)【要約】  オープンフローネットワークには複数のコントローラ（１）が配置される。コントローラ（１）は、負荷管理テーブル（１５３）と負荷制御部（１４）を備える。負荷管理テーブル（１５３）は、オープンフローネットワークに存在するスイッチ（２）毎に、当該スイッチ（２）を管理するコントローラ（１）に所定時間毎に送信したメッセージ数、及び当該スイッチ（２）の所定時間毎の受信パケット数、の少なくとも一方を管理する。負荷制御部（１４）は、所定イベント発生時に、負荷管理テーブル（１５３）に基づき、処理負荷が第１閾値以上のコントローラ（１）を検出し、検出したコントローラ（１）が管理対象とするスイッチ（２）の少なくとも一つを他のコントローラ（１）の管理対象に切り替える。
2013114490.tif 000002
【特許請求の範囲】
【請求項１】
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラであって、
オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備えるコントローラ。
【請求項２】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御手段は、前記処理負荷が第１閾値以上のコントローラを検出することを特徴とする、請求項１に記載のコントローラ。
【請求項３】
前記負荷制御手段は、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、請求項２に記載のコントローラ。
【請求項４】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御手段は、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項２に記載のコントローラ。
【請求項５】
前記負荷制御手段は、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項２または請求項３に記載のコントローラ。
【請求項６】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項１乃至請求項５のいずれか１項に記載のコントローラ。
【請求項７】
前記負荷制御手段は、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラが管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１乃至請求項６のいずれか１項に記載のコントローラ。
【請求項８】
オープンフローネットワーク上のトポロジ情報を管理するトポロジ更新手段を更に備え、
前記トポロジ更新手段は、前記所定イベントの発生時に、前記負荷制御部の処理に先立ち、接続障害の生じている管理対象の前記スイッチを検出し、検出した当該スイッチの接続障害を解消する、ことを特徴とする請求項1乃至請求項７のいずれか１項に記載のコントローラ。
【請求項９】
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を備える負荷分散方法。
【請求項１０】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御ステップでは、前記処理負荷が第１閾値以上のコントローラを検出することを特徴とする、ことを特徴とする請求項９に記載の負荷分散方法。
【請求項１１】
前記負荷制御ステップでは、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、ことを特徴とする請求項１０に記載の負荷分散方法。
【請求項１２】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御ステップでは、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項１１に記載の負荷分散方法。
【請求項１３】
前記負荷制御ステップでは、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項１０または請求項１１に記載の負荷分散方法。
【請求項１４】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項９乃至請求項１３のいずれか１項に記載の負荷分散方法。
【請求項１５】
前記負荷制御ステップでは、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラの各々が管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１０乃至請求項１４のいずれか１項に記載の負荷分散方法。
【請求項１６】
コンピュータに、
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法を実行させるプログラムを格納した非一時的なコンピュータ可読媒体であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を実行させるプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項１７】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御ステップでは、前記処理負荷が第１閾値以上のコントローラを検出する、ことを特徴とする請求項１６に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項１８】
前記負荷制御ステップでは、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、ことを特徴とする請求項１７に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項１９】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御ステップでは、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項１８に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項２０】
前記負荷制御ステップでは、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項１７または請求項１８に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項２１】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項１６乃至請求項２０のいずれか１項に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項２２】
前記負荷制御ステップでは、前記所定イベントとしてオープンフローネットワーク上への前記スイッチの追加またはオープンフローネットワーク上の前記スイッチの削除が生じた場合、前記負荷管理テーブルの更新を行った後に前記第１閾値との比較処理を行う、ことを特徴とする請求項２１に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項２３】
前記負荷制御ステップでは、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラの各々が管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１６乃至請求項２２のいずれか１項に記載のプログラムを格納した非一時的なコンピュータ可読媒体。
【請求項２４】
フローテーブルに従ってオープンフローネットワーク上のパケット転送を行う複数のスイッチ装置と、
前記複数のスイッチの一部を管理する複数のコントローラと、を備えるコンピュータシステムであって、
前記複数のコントローラの各々は、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備える、コンピュータシステム。
【請求項２５】
オープンフローネットワーク上でのスイッチ装置を管理する複数のコントローラ装置の負荷を分散させる制御装置であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備える制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコントローラ、負荷分散方法、プログラムを格納した非一時的なコンピュータ可読媒体、コンピュータシステム、制御装置に関し、特にオープンフローネットワークにかかるコントローラ、負荷分散方法、プログラムを格納した非一時的なコンピュータ可読媒体、コンピュータシステム、制御装置に関する。
【背景技術】
【０００２】
ＯｐｅｎＦｌｏｗ（オープンフロー）ネットワークは、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレスやＩＰアドレス、ポート番号の組み合わせによって決定される一連の通信を"フロー"として定義し、フロー単位での経路制御を実現するネットワーク制御技術である。ＯｐｅｎＦｌｏｗネットワークは、パケットの経路計算を行うコントローラ（ＯＦＣ：ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）と、パケットの転送を行うスイッチ（ＯＦＳ：ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）と、スイッチに接続される端末と、から構成される。【０００３】
スイッチは、フロー単位にパケットの転送経路や転送方法等を記述したフローテーブルを有する。コントローラは、スイッチ上のフローテーブルのエントリにパケットの転送ルールを設定する。スイッチは、フローテーブルに設定された転送ルールに従ってパケットの転送を行う。【０００４】
コントローラと各スイッチの間には、セキュアチャネルと呼ばれるＳＳＬ／ＴＬＳ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ／Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ）またはＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）の接続が確立される。セキュアチャネルを介して、ＯｐｅｎＦｌｏｗプロトコルのメッセージの送受信が行われる。【０００５】
スイッチは、端末からパケットを受信すると、フローテーブルのヘッダフィールド（Ｈｅａｄｅｒ  Ｆｉｅｌｄ属性）を参照し、パケットのヘッダ情報を適合するヘッダフィールドを持つエントリを検索する。エントリが存在する場合、スイッチは、エントリの統計情報（Ｃｏｕｎｔｅｒｓ属性）を更新し、指定された処理（Ａｃｔｉｏｎｓ属性）を実行する。エントリが存在しない場合、スイッチは、当該パケットをコントローラに送信する（Ｐａｃｋｅｔ  Ｉｎメッセージ）。【０００６】
コントローラは、Ｐａｃｋｅｔ  Ｉｎメッセージを受信すると、パケットの経路計算を行う。コントローラは、経路計算に応じて、スイッチ上のフローテーブルに当該パケットに対応するエントリを追加する（Ｆｌｏｗ  Ｍｏｄメッセージ）。そして、コントローラは、当該パケットをスイッチに送信する（Ｐａｃｋｅｔ  Ｏｕｔメッセージ）。【０００７】
ＯｐｅｎＦｌｏｗネットワークにおいて、スイッチに接続される端末数が増加する場合、スイッチからコントローラに送信されるＰａｃｋｅｔ  Ｉｎメッセージが増加する。Ｐａｃｋｅｔ  Ｉｎメッセージが増加する場合、単一のコントローラではメッセージを処理しきれなくなる可能性がある。そこで、コントローラがスイッチから受信するメッセージ数を分散させるために、ＯｐｅｎＦｌｏｗネットワーク上に複数のコントローラを設置することが望ましい。【０００８】
ＯｐｅｎＦｌｏｗネットワーク内に複数のコントローラを導入する場合、各コントローラに管理対象のスイッチを割り当てる。コントローラは、管理対象のスイッチとのみメッセージの送受信を行う。これにより、コントローラがスイッチから受信するメッセージ数を分散させることができる。【０００９】
ＯｐｅｎＦｌｏｗネットワーク上に複数のコントローラを設置した場合、コントローラがスイッチ内のフローテーブルに転送ルールを設定する際に、以下に示す経路情報及びトポロジ情報が必要となる。そのため、コントローラは、お互いに情報の同期処理を行う。【００１０】
（１）経路情報
ＯｐｅｎＦｌｏｗネットワーク内の最短経路を示す情報である。コントローラがトポロジ情報から算出する。
（２）トポロジ情報
ＯｐｅｎＦｌｏｗネットワーク内のスイッチの接続情報を表す情報である。各コントローラは、管理対象のスイッチの各々に対して定期的にＬＬＤＰ（Ｌｉｎｋ  Ｌａｙｅｒ  Ｄｉｓｃｏｖｅｒｙ  Ｐｒｏｔｏｃｏｌ）等のクエリパケットを送信することにより取得する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１１−１６６６９２号公報
【非特許文献】
【００１２】
【非特許文献１】OpenFlow Switch Specification Version 1.1.0 Implemented (Wire Protocol 0x02) February 28, 2011, [平成２４年１月１６日検索]、インターネット＜URL: http://www.openflow.org/documents/openflow-spec-v1.1.0.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述のように、ＯｐｅｎＦｌｏｗネットワークには、複数のコントローラを設けることができる。これにより、コントローラの負荷分散を図ることが可能となる。しかしながら、以下の理由（１）及び（２）により、単純にコントローラに略同数のスイッチを割り当てるだけでは、各コントローラの負荷が均等化されないという問題がある。【００１４】
（１） スイッチの使用状況
各管理対象のスイッチからコントローラに送信されるメッセージ数は、スイッチ毎に異なる。さらに、当該メッセージ数は、時間帯によっても変化する。
（２） ネットワーク構成（トポロジ）の更新
各管理対象のスイッチからコントローラに送信されるメッセージ数は、スイッチ間の接続障害、スイッチの追加／削除等によるトポロジの変化に応じて変化する。【００１５】
本発明は、上述した問題を鑑みてなされたものであり、複数のコントローラが配置されたＯｐｅｎＦｌｏｗネットワークにおいて、各コントローラの負荷を均等化することができるコントローラ、負荷分散方法、プログラムを格納した非一時的なコンピュータ可読媒体、コンピュータシステム、制御装置を提供することを主たる目的とする。
【課題を解決するための手段】
【００１６】
本発明にかかるコントローラの一態様は、
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラであって、
オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備えるものである。【００１７】
本発明にかかる負荷分散方法の一態様は、
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を備えるものである。【００１８】
本発明にかかるプログラムを格納した非一時的なコンピュータ可読媒体の一態様は、
コンピュータに、
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法を実行させるプログラムであって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を実行させる、ものである。【００１９】
本発明にかかるコンピュータシステムの一態様は、
フローテーブルに従ってオープンフローネットワーク上のパケット転送を行う複数のスイッチ装置と、
前記複数のスイッチの一部を管理する複数のコントローラと、を備えるコンピュータシステムであって、
前記複数のコントローラの各々は、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、を備える、ものである。【００２０】
本発明にかかる制御装置の一態様は、
オープンフローネットワーク上でのスイッチ装置を管理する複数のコントローラ装置の負荷を分散させる制御装置であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備えるものである。
【発明の効果】
【００２１】
本発明では、複数のコントローラが配置されたＯｐｅｎＦｌｏｗネットワークにおいて、各コントローラの負荷を均等化することができるコントローラ、負荷分散方法、プログラムを格納した非一時的なコンピュータ可読媒体、コンピュータシステム、制御装置を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】実施の形態１にかかるオープンフローネットワークの構成を示すブロック図である。
【図２】実施の形態１にかかるコントローラの構成を示すブロック図である。
【図３】実施の形態１にかかる負荷管理テーブルの構成を示す概念図である。
【図４】実施の形態１にかかるスイッチの構成を示すブロック図である。
【図５】実施の形態１にかかるコントローラの制御動作を示すフローチャートである。
【図６】実施の形態１にかかるコントローラによる負荷情報の更新処理を示すフローチャートである。
【図７】実施の形態１にかかるコントローラによる負荷分散処理を示すフローチャートである。
【図８】実施の形態１にかかるオープンフローネットワークにおけるスイッチ追加処理を示すフローチャートである。
【図９】実施の形態１にかかるスイッチのコントローラ情報取得処理を示すフローチャートである。
【図１０】実施の形態１にかかるオープンフローネットワークにおけるスイッチ削除処理を示すフローチャートである。
【図１１】実施の形態１にかかるオープンフローネットワークの構成を示すブロック図である。
【図１２】実施の形態１にかかる負荷管理テーブルの構成を示す具体例である。
【図１３】実施の形態１にかかる負荷管理テーブルの構成を示す具体例である。
【図１４】実施の形態１にかかるオープンフローネットワークの構成を示すブロック図である。
【図１５】実施の形態１にかかるコントローラのハードウェア構成を示すブロック図である。
【図１６】本発明にかかるオープンフローネットワークの構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。まず、本実施の形態が扱うオープンフローネットワークの概要を説明する。図１は、本実施の形態が扱うオープンフローネットワークの構成を示すブロック図である。
【００２４】
オープンフローネットワークは、複数のコントローラ１（１−１、１−２）と、複数のスイッチ２（２−１〜２−４）と、複数の端末（３−１〜３−８）から構成される。コントローラ１−１は、スイッチ２−１及びスイッチ２−２を管理、すなわちこれらのスイッチのフローテーブルの制御等を行う。同様に、コントローラ１−２は、スイッチ２−３及びスイッチ２−４を管理、すなわちこれらのスイッチのフローテーブルの制御等を行う。なお、コントローラ１−１、１−２は、任意の数のスイッチを管理できることは勿論である。以下の記載では、コントローラ１−１と１−２を特に区別しない場合、単に「コントローラ１」と記載する。
【００２５】
スイッチ２−１は、内部にフローテーブルを有する。スイッチ２−１は、端末３−１、３−２、または他のスイッチ２−２からパケットを受信し、受信したパケットをフローブルに従って転送する装置である。なお、スイッチ２−１は、任意の数の端末からパケットを受信できることは勿論である。スイッチ２−２〜２−４についてもスイッチ２−１と同様の構成である。以下の記載では、スイッチ２−１〜２−４を特に区別しない場合、「スイッチ２」と記載する。
【００２６】
端末３−１は、パケットをやり取りする端末である。端末３−１は、例えば一般的なパーソナルコンピュータ、携帯電話等が該当する。端末３−２〜３−７についても同様である。以下の記載では、端末３−１〜３−８を特に区別しない場合、「端末３」と記載する。
【００２７】
続いて、図２を参照して、コントローラ１の内部構成及び動作について説明する。図２は、コントローラ１の内部構成を示すブロック図である。コントローラ１は、メッセージ制御部１１と、経路制御部１２と、トポロジ更新部１３と、負荷制御部１４と、ネットワーク情報記憶部１５と、を備える。コントローラ２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等を備えるコンピュータであればよい。
【００２８】
ネットワーク情報記憶部１５は、経路情報１５１と、トポロジ情報１５２と、負荷管理テーブル１５３と、を記憶する記憶部である。経路情報１５１とは、各スイッチ２がパケットをどのように送信するかを示す、いわゆるフロー情報を含む情報である。トポロジ情報１５２は、オープンフローネットワークの構成を示す情報である。負荷管理テーブル１５３は、各コントローラ１の負荷がどの程度であるかを把握できる情報を保持するテーブルである。負荷管理テーブル１５３については、図３を参照して後述する。
【００２９】
ネットワーク情報記憶部１５内の各情報は、全てのコントローラ１において同期される（変更情報を互いに通知する）。そのため、あるコントローラ１において、ネットワーク情報記憶部１５内の各情報が更新された場合、他のコントローラ１のネットワーク情報記憶部１５内の各情報も更新される。
【００３０】
メッセージ制御部１１は、管理対象のスイッチ２とオープンフローネットワークプロトコルに定められた各種のメッセージの送受信を行う処理部である。メッセージ制御部１１は、受信したメッセージに応じて各処理部（経路制御部１２、トポロジ更新部１３、負荷制御部１４）に各種処理の実行を指示する。
【００３１】
経路制御部１２は、スイッチ２からＰａｃｋｅｔ  Ｉｎメッセージを、メッセージ制御部１１を介して受信する。経路制御部１２は、Ｐａｃｋｅｔ  Ｉｎメッセージの受信時にトポロジ情報１５２を参照し、当該Ｐａｃｋｅｔ  Ｉｎメッセージにかかる経路計算を行う。そして、経路制御部１２は、算出した経路に応じて経路情報１５１を更新する。
【００３２】
トポロジ更新部１３は、管理対象のスイッチ２に対して、クエリパケットを送信する。トポロジ更新部１３は、当該クエリパケットの送信によりスイッチ２の接続情報を取得する。トポロジ更新部１３は、取得した接続情報に応じて、トポロジ情報１５２を更新する。
【００３３】
負荷制御部１４は、負荷管理テーブル１５３の負荷情報を参照、及び更新する。そして、負荷制御部１４は、所定のイベント（一定時間の経過、スイッチ２の追加／削除等）が生じた場合に各コントローラ１の処理負荷を算出し、処理負荷が高いコントローラ１を検出する。そして、負荷制御部１４は、検出したコントローラ１の処理負荷を分散させるべきか否かを判定し、処理負荷を分散させるべきと判断した場合には当該コントローラ１の管理するスイッチ２の一部を、処理負荷の低いコントローラ１の管理に切り替える。当該処理負荷の分散処理の詳細は、図６、図７を参照して後述する。
【００３４】
図３は、負荷管理テーブル１５３の構成を示す概念図である。負荷管理テーブル１５３は、スイッチＩＤ、コントローラＩＤ、ホップ数、受信メッセージ数、受信パケット数を属性とするテーブルである。負荷管理テーブル１５３には、オープンフローネットワーク上に存在するスイッチ毎にエントリが設けられる。
【００３５】
スイッチＩＤとは、オープンフローネットワーク内でスイッチ２を一意に識別するための属性である。スイッチＩＤは、負荷管理テーブル１５３の主キーとなる情報である。スイッチＩＤは、例えば、スイッチ２のＭＡＣアドレスの４８ビットと、実装依存の１２ビットからなるデータパスＩＤから構成する。データパスＩＤは、コントローラ１とスイッチ２との間のセキュアチャネルの確立後、オープンフロープロトコルのＦｅａｔｕｒｅｓ／Ｒｅｐｌｙメッセージのやり取りにより取得することができる。
【００３６】
コントローラＩＤは、オープンフローネットワーク内において、コントローラ１を一意に識別するための属性である。コントローラＩＤには、例えばコントローラ１のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスを使用すればよい。
【００３７】
ホップ数は、コントローラ１とスイッチ２との間のホップ数（通過する通信装置数）を示す属性である。
【００３８】
受信メッセージ数は、コントローラ１がスイッチ２から受信した所定時間当たりのメッセージ数を示す属性である。スイッチ２からコントローラ１がメッセージを受信する毎に、受信メッセージ数はインクリメント（１ずつ加算）される。
【００３９】
受信パケット数は、コントローラ１の管理対象とするスイッチ２が、端末３または隣接するスイッチ２から受信したパケット数を設定するための属性である。オープンフロープロトコルのＳｔａｔｉｓｔｉｃｓ  Ｒｅｑｕｅｓｔ／Ｒｅｐｌｙメッセージの送受信により、コントローラ１は、スイッチ２内の各ポートの所定時間当たりの受信パケット数を把握することができる。
【００４０】
続いて、図４を参照して、本実施の形態にかかるスイッチ２の内部構成、及び動作について説明する。図４は、本実施の形態にかかるスイッチ２の内部構成を示すブロック図である。
【００４１】
スイッチ２は、パケット制御部２１と、メッセージ制御部２２と、を備える。また、スイッチ２は、フローテーブル２３と、スイッチＩＤ２４と、コントローラ情報２５と、を記憶する。コントローラ情報２５は、コントローラＩＤ２５１と、ホップ数２５２と、を備えている。
【００４２】
パケット制御部２１は、端末３または隣接するスイッチ２からパケットを受信した際に、フローテーブル２３を参照する。パケット制御部２１は、フローテーブル２３を参照することにより受信したパケットの転送先を決定し、当該パケットを転送する。オープンフローネットワーク上に新たなスイッチ２を追加する場合、パケット制御部２１は、隣接するスイッチ２にクエリパケットを送信し、コントローラ情報２５を取得する。
【００４３】
メッセージ制御部２２は、コントローラ１内のメッセージ制御部１１とオープンフロープロトコルに規定されたメッセージの送受信を行う。コントローラ１からＦｌｏｗ  Ｍｏｄメッセージを受信した場合、メッセージ制御部２２は、受信メッセージに応じてフローテーブル２３を更新する。さらに、メッセージ制御部２２は、コントローラ１との間にセキュアチャネルを確立する際には、スイッチＩＤ２４をコントローラ１に送信する。
【００４４】
フローテーブル２３は、コントローラ１から設定される情報である。フローテーブル２３は、通信フロー単位のパケットの転送経路や転送方法等が記載される。詳細は、例えば非特許文献１を参照されたい。
【００４５】
スイッチＩＤ２４は、スイッチ２を一意に特定する識別情報である。コントローラＩＤ２５１は、フローテーブル２３を制御するコントローラ１のコントローラＩＤを示す情報である。ホップ数２５２は、スイッチ２とコントローラ１との間のホップ数である。
【００４６】
続いて、図５〜図７を参照して、コントローラ１の動作について説明する。上述したようにコントローラ１内の負荷制御部１４は、所定イベント（所定時間の経過等）が生じた場合に各コントローラ１の負荷を分散させる処理（負荷分散処理）を行う。以下、当該所定イベント発生時の各動作、及び負荷分散処理の詳細について説明する。
【００４７】
図５は、コントローラ１の制御動作を示すフローチャートである。コントローラ１は、所定時間の待ち合わせを行う（ステップＡ１）。所定時間の経過後、コントローラ１は、負荷情報の更新処理（図６）を実行する（ステップＡ２）。
【００４８】
図６は、コントローラ１による負荷情報の更新処理の詳細を示すフローチャートである。はじめに、コントローラ１内のトポロジ制御部１３は、管理対象のスイッチ１の各々に対してクエリパケットを送信し、スイッチ１の各ポートの接続情報を取得する（ステップＢ１）。クエリパケットの送受信により、接続障害のあるスイッチ１（以下、接続障害の生じたスイッチ１をスイッチＳ０と記載する）を検出した場合（ステップＢ２：Ｙｅｓ）、トポロジ制御部１３は、負荷制御部１４に当該スイッチＳ０を通知する。通知を受けた負荷制御部１４は、オープンフローネットワーク内の各コントローラ１の処理負荷を計算し、処理負荷が最小のコントローラ１（以下、負荷が最小のコントローラ１をコントローラＣ０と記載する）のコントローラＩＤを取得する（ステップＢ３）。なお、処理負荷の算出方法は、図７を参照して後述する。
【００４９】
そして、負荷制御部１４は、負荷管理テーブル１５３のスイッチＳ０のエントリのコントローラＩＤ属性に、コントローラＣ０のコントローラＩＤを設定する（ステップＢ４）。さらに、コントローラＣ０内の負荷制御部１４は、セキュアチャネルを介してスイッチＳ０のコントローラＩＤ２５１にコントローラＣ０のコントローラＩＤを設定する（ステップＢ５）。
【００５０】
さらに、負荷制御部１４は、管理対象のスイッチ２の各々から受信パケット数を取得し、負荷管理テーブル１５３に設定する（ステップＢ６、Ｂ７）。この時、トポロジの変化により使用されなくなったポートの受信パケット数は、使用しない。上述のステップＢ１〜Ｂ７により、接続障害がなく、かつ受信パケット数が取得できた状態となる。この状態において、コントローラの負荷分散処理（ステップＢ８）が実行される。当該負荷分散処理（ステップＢ８）の詳細を図７に示す。
【００５１】
負荷制御部１４は、負荷管理テーブル１５３を参照し、各コントローラ１の処理負荷を算出する。負荷制御部１４は、例えば受信メッセージ数と受信パケット数を乗算することにより数値情報の処理負荷を算出する。そして、負荷制御部１４は、処理負荷が最大のコントローラ１（以下の記載ではコントローラＣ１と記載する）のコントローラＩＤを取得する（ステップＣ１）。
【００５２】
なお、処理負荷は、必ずしも数値情報である必要はなく、所定閾値を基準とした「高」「中」「低」等の情報であっても良い。
【００５３】
負荷制御部１４は、コントローラＣ１の処理負荷が所定閾値（第１閾値）以下であるか否かを判定する（ステップＣ２）。所定閾値以下である場合（ステップＣ２：Ｙｅｓ）、負荷制御部１４は、処理を終了する。
【００５４】
一方、コントローラＣ１の処理負荷が所定閾値以下ではない場合（ステップＣ２：Ｎｏ）、負荷制御部１４は、処理負荷が最小のコントローラ１（以下の記載ではコントローラＣ２と記載する）を選択し、コントローラＩＤを取得する（ステップＣ３）。
【００５５】
また、負荷制御部１４は、コントローラＣ１の管理対象のスイッチ２のうち、処理負荷に与える影響が相対的に小さいスイッチ２（以下の記載ではスイッチＳ１とする）を選択し、スイッチＩＤを取得する（ステップＣ４）。換言すると処理負荷に与える影響が低い順序でスイッチ２を選択する。例えば、ステップＣ４を初めて実行する場合、負荷制御部１４は、処理負荷に与える影響が最も小さいスイッチ２をスイッチＳ１として選択する。
【００５６】
負荷制御部１４は、スイッチＳ１のホップ数を負荷管理テーブル１５３から取得し、取得したホップ数が閾値（第２閾値）以上であるか否かを判定する（ステップＣ５）。ホップ数が閾値以上ではない場合（ステップＣ５：Ｎｏ）、負荷制御部１４は、ステップＣ４から処理を再開する。この際、負荷制御部１４は、直前のステップＣ４で選択したスイッチＳ１の次に処理負荷が小さいスイッチ２を選択する。
【００５７】
一方、ホップ数が閾値以上である場合（ステップＣ５：Ｙｅｓ）、負荷制御部１４は、負荷管理テーブル１５３において、スイッチＳ１のエントリのコントローラＩＤ属性にコントローラＣ２のコントローラＩＤを設定する（ステップＣ６）。さらに、負荷制御部１４は、セキュアチャネルを経由して、スイッチＳ１のコントローラＩＤ２５１にコントローラＣ２のコントローラＩＤを設定する（ステップＣ７）。
【００５８】
ステップＣ７の終了後、負荷制御部１４は、ステップＣ１から処理を再開する。
【００５９】
なお、上述の処理では、負荷制御部１４は、所定閾値（第１閾値）との比較により、コントローラＣ１を選択したが必ずしもこれに限られない。たとえば、負荷制御部１４は、もっとも処理負荷が高いコントローラ１を無条件でコントローラＣ１に選択してもよい。すなわち、負荷制御部１４は、任意の基準により処理負荷を分散させるべきコントローラ１を選択すればよい。
【００６０】
上述の処理において、ホップ数の判定を行ったが、必ずしもこれに限られず、ホップ数の判定を行わず、最も処理負荷の小さいスイッチ２を上述のスイッチＳ１と決定しても良い。しかしながら、ホップ数を考慮することにより、単なる処理負荷の分散のみならず、ネットワーク構成の複雑化を防ぐという効果も奏する。
【００６１】
また、上述の説明では、スイッチ２の切り替え対象のコントローラ１（Ｃ２）として、処理負荷が最も小さいコントローラ１を選択したが、必ずしもこれに限られず、処理負荷が所定値以下の任意のコントローラ１を選択しても良い。しかしながら、処理負荷が相対的に小さい順序でコントローラ１を選択していくことにより、最も処理負荷を平均化することができる。
【００６２】
続いて、図８及び図９を参照して、オープンフローネットワーク上に新たなスイッチ２を追加した場合の各装置（コントローラ１、スイッチ２）の処理について説明する。図８は、スイッチ２の追加処理を示すフローチャートである。
【００６３】
まず、追加対象のスイッチ２内のパケット制御部２１は、隣接するスイッチ２からコントローラ情報２５を取得するために、コントローラ情報取得処理を実行する（ステップＤ１）。当該コントローラ情報取得処理を図９に示し、説明する。
【００６４】
追加対象のスイッチ２内のパケット制御部２１は、隣接するスイッチ２に対してクエリパケットをブロードキャスト送信する。パケット制御部２１は、これによりコントローラ情報２５を受信する（ステップＥ１）。複数のスイッチ２からコントローラ情報２５を受信した場合（ステップＥ２：Ｙｅｓ）、パケット制御部２１は、ホップ数２５２が最小の値であるコントローラ情報２５を選択する（ステップＥ３）。そして、パケット制御部２１は、メッセージ制御部２２を介してコントローラ１と通信を行い、コントローラ１までのホップ数２５２を取得する（ステップＥ４）。
【００６５】
再び、図８を参照する。コントローラ情報２５を取得（ステップＤ１）した後に、スイッチ２内のメッセージ制御部２２は、コントローラ情報２５のコントローラＩＤ２５１を参照し、当該コントローラＩＤ２５１の特定するコントローラ１とセキュアチャネルを確立する（ステップＤ２）。
【００６６】
そして、メッセージ制御部２２は、コントローラ１の負荷管理テーブル１５３から他のコントローラ１のコントローラＩＤを取得し、セキュアチャネルを確立する（ステップＤ３、Ｄ４）。
【００６７】
オープンフローネットワークに存在する各コントローラ１内の負荷制御部１４は、負荷管理テーブル１５３に追加対象のスイッチ１のエントリを追加する（ステップＤ５）。この際、管理テーブル１５３のスイッチＩＤ属性には、追加対象のスイッチ２のスイッチＩＤ２４の値を設定する。管理テーブル１５３のホップ数属性には、追加対象のスイッチ２のホップ数２５２の値を設定する。管理テーブル１５３の受信メッセージ属性及び受信パケット数属性には、０を設定する。そして、負荷情報の更新処理（上述の図６の処理）を実行する（ステップＤ６）。
【００６８】
続いて、図１０を参照して、オープンフローネットワーク上からスイッチ２を削除した場合の各装置（コントローラ１、スイッチ２）の処理について説明する。図１０は、スイッチ２の削除処理を示すフローチャートである。
【００６９】
スイッチ２内のメッセージ制御部２２は、オープンフローネットワーク上の全てのコントローラ１とのセキュアチャネルを切断する（ステップＦ１）。これに応じて、各コントローラ１内の負荷制御部１４は、負荷管理テーブル１５３から削除対象のスイッチ２のエントリを削除する（ステップＦ２）。そして、上述した負荷情報の更新処理（上述の図６の処理）を実行する（ステップＦ３）。
【００７０】
続いて、図１１〜１４を参照して、図７に示すコントローラ１の負荷分散処理の具体例について説明する。図１１は、負荷分散処理前のオープンフローネットワークの構成を示すブロック図である。図１２は、負荷分散処理前の負荷管理テーブル１５３の構成を示す概念図である。
【００７１】
負荷制御部１４は、オープンフローネットワーク内に存在するコントローラ（コントローラＡ及びＢ）の処理負荷を算出する（ステップＣ１）。ここでは、各コントローラの処理負荷は、以下の式から算出するものとする。
【００７２】
算出対象のコントローラＣの処理負荷  ＝（コントローラＣの受信メッセージ数／全コントローラの受信メッセージ数）  ＊  （コントローラＣの管理対象スイッチの受信パケット数／全スイッチの受信パケット数の合計）
【００７３】
図１２を参照すると、コントローラＡの処理負荷は、受信メッセージ数の合計値が１２０であり、受信パケット数の合計値が８００であるため、（５０／１２０）＊（３００／８００）≒０．１６となる。同様に、コントローラＢの処理負荷は、（７０／１２０）＊（５００／８００）≒０．３６となる。よって、負荷制御部１４は、処理負荷が最大のコントローラとしてコントローラＢを選択する（ステップＣ１）。
【００７４】
なお、上述の算出方法は、あくまで一例であり、他の算出方法を用いても良い。例えば、乗算式の右辺または左辺（もしくは双方）に重み係数をかけても良い。また、乗算に限らず加算により処理負荷を算出しても良い。すなわち、負荷制御部１４は、負荷管理テーブル１５３内の情報に応じて各コントローラ１の処理負荷を算出すればよい。なお、精度は下がるものの、負荷制御部１４は、負荷管理テーブル１５３内の受信メッセージ数、受信パケット数の少なくとも一方を用いれば、各コントローラ１の処理負荷の傾向を把握することができる。
【００７５】
負荷制御部１４は、選択したコントローラＢの処理負荷が、所定閾値以下であるか否かを判定する（ステップＣ２）。ここで、閾値が０．３である場合、負荷制御部１４は、コントローラＢの処理負荷は閾値以下ではないと判断する（ステップＣ２：Ｎｏ）。そして、負荷制御部１４は、処理負荷が最小のコントローラとしてコントローラＡを選択する（ステップＣ３）。
【００７６】
続いて、負荷制御部１４は、コントローラＢが管理対象とするスイッチのうち、処理負荷に与える影響が最小のスイッチＩＤを取得する。図１２を参照すると、スイッチＣの処理負荷に与える影響は、（５／１２０）＊（１００／８００）≒０．０１である。スイッチＤの処理負荷に与える影響は、（３０／１２０）＊（２００／８００）≒０．０６である。スイッチＥの処理負荷に与える影響は、（１５／１２０）＊（１００／８００）≒０．０２である。スイッチＦの処理負荷に与える影響は、（２０／１２０）＊（１００／８００）≒０．０２である。よって、負荷制御部１４は、処理負荷に与える影響が最小のスイッチとしてスイッチＣを選択する（ステップＣ４）。
【００７７】
負荷制御部１４は、負荷管理テーブル１５３を参照し、スイッチＣのホップ数が閾値か否かを判定する（ステップＣ５）。閾値が２であるとした場合、負荷制御部１４は、スイッチＣのホップ数は閾値以上と判定する（ステップＣ５：Ｙｅｓ）。
【００７８】
負荷制御部１４は、負荷管理テーブル１５３上のスイッチＣのエントリのコントローラＩＤ属性に対して、コントローラＢのコントローラＩＤを設定する（ステップＣ６）。そして、負荷制御部１４は、セキュアチャネルを経由して、スイッチＣのコントローラＩＤ２５１にコントローラＢのコントローラＩＤを設定する（スイッチＣ７）。当該処理を終了した時点の負荷管理テーブル１５３を図１３に示す。下線部分が変更点である。なお、管理対象の変更に伴いホップ数の値も変わり得るが、ここでは変更は生じないものとする。
【００７９】
そして、負荷制御部１４は、再度、オープンフローネットワーク内に存在するコントローラ（コントローラＡ及びＢ）の処理負荷を算出する（ステップＣ１）。
【００８０】
図１３を参照すると、コントローラＡの処理負荷は、受信メッセージ数の合計値が１２０であり、受信パケット数の合計値が８００であるため、（５５／１２０）＊（４００／８００）≒０．２３となる。同様に、コントローラＢの処理負荷は、（６５／１２０）＊（４００／８００）≒０．２７となる。よって、負荷制御部１４は、処理負荷が最大のコントローラとしてコントローラＢを選択する（ステップＣ１）。
【００８１】
負荷制御部１４は、選択したコントローラＢの処理負荷が、所定閾値以下であるか否かを判定する（ステップＣ２）。閾値が０．３であるため、負荷制御部１４は、コントローラＢの処理負荷は閾値以下と判断し（ステップＣ２：Ｙｅｓ）、処理を終了する。図１４は、負荷分散処理前のオープンフローネットワークの構成を示すブロック図である。
【００８２】
続いて、本実施の形態にかかるオープンフローネットワークの効果について説明する。負荷制御部１４は、スイッチ２の使用状態や、オープンフローネットワークのトポロジに応じてコントローラ１の処理負荷を分散している。そのため、特定のコントローラ１に処理負荷が偏る状態を回避することができ、精度の高い負荷分散を実現することができる。
【００８３】
さらに、コントローラ１は、オープンフローネットワーク上へのスイッチ２の追加／削除が生じた場合、負荷分散の実行前にトポロジ情報の更新（上述のステップＢ１〜Ｂ７）を行う。これにより、オープンフローネットワーク上における各装置の接続状態が最新の状態となった後に負荷分散を行うことができる。
【００８４】
＜実施の形態２＞
本発明にかかる実施の形態２にかかるコントローラ１は、上述した図７の負荷分散処理において、各コントローラの管理対象スイッチ数を考慮することを特徴とする。以下、実施の形態１と異なる点を説明する。
【００８５】
負荷制御部１４は、上述の図７における各コントローラ１の処理負荷を以下の式により算出する。
【００８６】
算出対象のコントローラＣの処理負荷  ＝  （コントローラＣの管理対象スイッチ数／オープンフローネットワーク内の全スイッチ数）  ＊  （コントローラＣの受信メッセージ数／全コントローラの受信メッセージ数）  ＊  （コントローラＣの管理対象スイッチの受信パケット数／全スイッチの受信パケット数の合計）
【００８７】
続いて、図１１〜１４を参照して、本実施の形態にかかるコントローラ１の負荷分散処理（図７）の具体例について説明する。図１１は、負荷分散処理前のオープンフローネットワークの構成を示すブロック図である。図１２は、負荷分散処理前の負荷管理テーブル１５３の構成を示す概念図である。
【００８８】
図１２を参照すると、コントローラＡの処理負荷は、スイッチ総数が６であり、受信メッセージ数の合計値が１２０であり、受信パケット数の合計値が８００であるため、（２／６）＊（５０／１２０）＊（３００／８００）≒０．０５となる。同様に、コントローラＢの処理負荷は、（４／６）＊（７０／１２０）＊（５００／８００）≒０．２４となる。よって、負荷制御部１４は、処理負荷が最大のコントローラとしてコントローラＢを選択する（ステップＣ１）。
【００８９】
負荷制御部１４は、選択したコントローラＢの処理負荷が、所定閾値以下であるか否かを判定する（ステップＣ２）。ここで、閾値が０．２である場合、負荷制御部１４は、コントローラＢの処理負荷は閾値以下ではないと判断する（ステップＣ２：Ｎｏ）。そして、負荷制御部１４は、処理負荷が最小のコントローラとしてコントローラＡを選択する（ステップＣ３）。
【００９０】
続いて、負荷制御部１４は、コントローラＢが管理対象とするスイッチのうち、処理負荷に与える影響が最小のスイッチＩＤを取得する。図１２を基に、負荷制御部１４は、以下のように処理負荷に与える影響を算出する。
スイッチＣ：  （５／１２０）＊（１００／８００）
スイッチＤ：  （３０／１２０）＊（２００／８００）
スイッチＥ：  （１５／１２０）＊（１００／８００）
スイッチＦ：  （２０／１２０）＊（１００／８００）
【００９１】
よって、負荷制御部１４は、処理負荷に与える影響が最小のスイッチとしてスイッチＣを選択する（ステップＣ４）。負荷制御部１４は、負荷管理テーブル１５３を参照し、スイッチＣのホップ数が閾値以上か否かを判定する（ステップＣ５）。閾値が２であるとした場合、負荷制御部１４は、スイッチＣのホップ数は閾値以上と判定する（ステップＣ５：Ｙｅｓ）。
【００９２】
負荷制御部１４は、負荷管理テーブル１５３上のスイッチＣのエントリのコントローラＩＤ属性に対して、コントローラＢのコントローラＩＤを設定する（ステップＣ６）。そして、負荷制御部１４は、セキュアチャネルを経由して、スイッチＣのコントローラＩＤ２５１にコントローラＢのコントローラＩＤを設定する（スイッチＣ７）。当該処理を終了した時点の負荷管理テーブル１５３を図１３に示す。下線部分が変更点である。
【００９３】
そして、負荷制御部１４は、再度、オープンフローネットワーク内に存在するコントローラ（コントローラＡ及びＢ）の処理負荷を算出する（ステップＣ１）。
【００９４】
図１３を参照すると、コントローラＡの処理負荷は、スイッチ総数が６であり、受信メッセージ数の合計値が１２０であり、受信パケット数の合計値が８００であるため、（３／６）＊（５５／１２０）＊（４００／８００）≒０．１１となる。同様に、コントローラＢの処理負荷は、（３／６）＊（６５／１２０）＊（４００／８００）≒０．１３となる。よって、負荷制御部１４は、処理負荷が最大のコントローラとしてコントローラＢを選択する（ステップＣ１）。
【００９５】
負荷制御部１４は、選択したコントローラＢの処理負荷が、所定閾値以下であるか否かを判定する（ステップＣ２）。閾値が０．２であるため、負荷制御部１４は、コントローラＢの処理負荷は閾値以下と判断し（ステップＣ２：Ｙｅｓ）、処理を終了する。図１４は、負荷分散処理前のオープンフローネットワークの構成を示すブロック図である。
【００９６】
本実施の形態においても、特定のコントローラ１に負荷が偏る状態を回避することができ、精度の高い負荷分散を実現することができる。上述のように負荷制御部１４は、スイッチ総数と、各コントローラ１が管理対象とするスイッチの数と、の関係も考慮して負荷分散を行っている。そのため、ネットワークの接続状態も考慮した負荷分散を行う（すなわちネットワーク上の管理スイッチ数の偏りを回避した負荷分散を行う）ことができる。
【００９７】
以上、本発明を上記実施形態に即して説明したが、上記実施形態の構成にのみ限定されるものではなく、本願特許請求の範囲の請求項の発明の範囲内で当業者であればなし得る各種変形、修正、組み合わせを含むことは勿論である。
【００９８】
上述のコントローラ１内の各処理部（メッセージ制御部１１、経路制御部１２、トポロジ更新部１３、及び負荷制御部１４）の処理は、任意のコンピュータ内で動作するプログラムとして実現することが可能である。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９９】
図１５は、コントローラ１のハードウェア構成例を示す図である。中央処理装置（ＣＰＵ）４０１とメモリ４０２とを含んでいる。ＣＰＵ４０１とメモリ４０２とは、バスを介して補助記憶装置としてのハードディスク装置（ＨＤＤ）４０３に接続される。ハードディスク装置４０３等の記憶媒体にはオペレーティングシステムと共同してＣＰＵ４０１等に命令を与え、この通信制御カード１００の各部の機能を実施するためのコンピュータ・プログラムを記憶することができる。すなわち、プログラムがメモリ４０２上に展開され、ＣＰＵ４０１がプログラムに従って処理を行い、他のハードウェア構成と協働することによって、コントローラ１の各ブロックが構成されている。そして、コントローラ１による各処理は、ＣＰＵ４０１において所定のプログラムが実行されることで実現される。
【０１００】
図１６は、本発明の概略を図示したブロック図である。オープンフローネットワークには、複数のコントローラ１と、複数のスイッチ２が存在する。各コントローラ１は、負荷管理テーブル１５３と、負荷制御部１４と、を備える。
【０１０１】
負荷管理テーブル１５３は、オープンフローネットワークに存在するスイッチ２毎に、スイッチ２を管理するコントローラに所定時間毎に送信したメッセージ数、及びスイッチ２の所定時間毎の受信パケット数、の少なくとも一方を管理する。すなわち、負荷管理テーブル１５３は、オープンフローネットワーク固有の負荷情報を保持する。負荷制御部１４は、所定イベント発生時に、負荷管理テーブル１５３を参照し、処理負荷が第１閾値以上のコントローラ１を検出する。処理負荷は、例えば受信パケット数と受信メッセージ数の乗算により算出する。負荷制御部１４は、検出したコントローラ１が管理対象とするスイッチ２の少なくとも一つを他のコントローラ１の管理対象に切り替える。
【０１０２】
上述の構成であっても、負荷制御部１４は、スイッチ２の使用状態や、オープンフローネットワークのトポロジに応じてコントローラ１の負荷を分散することができる。すなわち、特定のコントローラ１に負荷が偏る状態を回避することができる。
【０１０３】
なお、上述した説明では、コントローラ１内に負荷管理テーブル１５３と負荷制御部１４が存在するものとして説明したが必ずしもこれに限られない。例えば、各コントローラ１に対してスイッチ２の管理を指示する制御装置をオープンフローネットワーク内に設ける構成であっても良い。制御装置は、負荷管理テーブル１５３と負荷制御部１４を備える。制御装置が、各コントローラ１の処理負荷を算出し、処理負荷の高いコントローラ１の管理するスイッチ２を他のコントローラ１の管理に切り替えることによっても上述した効果を奏することができる。
【０１０４】
この出願は、２０１２年２月２日に出願された日本出願特願２０１２−０２０６９５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１０５】
１  コントローラ
１１  メッセージ制御部
１２  経路制御部
１３  トポロジ更新部
１４  負荷制御部
１５  ネットワーク情報記憶部
１５１  経路情報
１５２  トポロジ情報
１５３  負荷管理テーブル
２  スイッチ
２１  パケット制御部
２２  メッセージ制御部
２３  フローテーブル
２４  スイッチＩＤ
２５  コントローラ情報
２５１  コントローラＩＤ
２５２  ホップ数
３  端末
４０１  ＣＰＵ
４０２  メモリ
４０３  ＨＤＤ 
【図１】
2013114490.tif 000003
【図２】
2013114490.tif 000004
【図３】
2013114490.tif 000005
【図４】
2013114490.tif 000006
【図５】
2013114490.tif 000007
【図６】
2013114490.tif 000008
【図７】
2013114490.tif 000009
【図８】
2013114490.tif 000010
【図９】
2013114490.tif 000011
【図１０】
2013114490.tif 000012
【図１１】
2013114490.tif 000013
【図１２】
2013114490.tif 000014
【図１３】
2013114490.tif 000015
【図１４】
2013114490.tif 000016
【図１５】
2013114490.tif 000017
【図１６】
2013114490.tif 000018
【手続補正書】
【提出日】平成26年6月17日(2014.6.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラであって、
オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備えるコントローラ。
【請求項２】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御手段は、前記処理負荷が第１閾値以上のコントローラを検出することを特徴とする、請求項１に記載のコントローラ。
【請求項３】
前記負荷制御手段は、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、請求項２に記載のコントローラ。
【請求項４】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御手段は、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項２に記載のコントローラ。
【請求項５】
前記負荷制御手段は、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項２または請求項３に記載のコントローラ。
【請求項６】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項１乃至請求項５のいずれか１項に記載のコントローラ。
【請求項７】
前記負荷制御手段は、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラが管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１乃至請求項６のいずれか１項に記載のコントローラ。
【請求項８】
オープンフローネットワーク上のトポロジ情報を管理するトポロジ更新手段を更に備え、
前記トポロジ更新手段は、前記所定イベントの発生時に、前記負荷制御手段の処理に先立ち、接続障害の生じている管理対象の前記スイッチを検出し、検出した当該スイッチの接続障害を解消する、ことを特徴とする請求項１乃至請求項７のいずれか１項に記載のコントローラ。
【請求項９】
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を備える負荷分散方法。
【請求項１０】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御ステップでは、前記処理負荷が第１閾値以上のコントローラを検出することを特徴とする、ことを特徴とする請求項９に記載の負荷分散方法。
【請求項１１】
前記負荷制御ステップでは、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、ことを特徴とする請求項１０に記載の負荷分散方法。
【請求項１２】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御ステップでは、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項１１に記載の負荷分散方法。
【請求項１３】
前記負荷制御ステップでは、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項１０または請求項１１に記載の負荷分散方法。
【請求項１４】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項９乃至請求項１３のいずれか１項に記載の負荷分散方法。
【請求項１５】
前記負荷制御ステップでは、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラの各々が管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１０乃至請求項１４のいずれか１項に記載の負荷分散方法。
【請求項１６】
コンピュータに、
オープンフローネットワーク上の複数のスイッチの一部を管理するコントローラの負荷分散方法を実行させるプログラムであって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を持つ負荷管理テーブルを管理する管理ステップと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御ステップと、
を実行させるプログラム。
【請求項１７】
前記処理負荷は、大きいほど負荷が高いことを示す数値情報であり、
前記負荷制御ステップでは、前記処理負荷が第１閾値以上のコントローラを検出する、ことを特徴とする請求項１６に記載のプログラム。
【請求項１８】
前記負荷制御ステップでは、前記処理負荷が相対的に小さい前記コントローラを切り替え先として選択する、ことを特徴とする請求項１７に記載のプログラム。
【請求項１９】
前記負荷管理テーブルは、オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチと当該スイッチを管理するコントローラとのホップ数の情報を管理し、
前記負荷制御ステップでは、前記処理負荷に与える影響が相対的に小さく、かつ、前記ホップ数が第２閾値以上の前記スイッチを切り替え対象として選択する、ことを特徴とする請求項１８に記載のプログラム。
【請求項２０】
前記負荷制御ステップでは、前記処理負荷を前記メッセージ数と前記受信パケット数との乗算から算出する、ことを特徴とする請求項１７または請求項１８に記載のプログラム。
【請求項２１】
前記所定イベントは、一定時間の経過、オープンフローネットワーク上への前記スイッチの追加、オープンフローネットワーク上への前記スイッチの削除、のいずれかを含む、ことを特徴とする請求項１６乃至請求項２０のいずれか１項に記載のプログラム。
【請求項２２】
前記負荷制御ステップでは、前記所定イベントとしてオープンフローネットワーク上への前記スイッチの追加またはオープンフローネットワーク上の前記スイッチの削除が生じた場合、前記負荷管理テーブルの更新を行った後に第１閾値との比較処理を行う、ことを特徴とする請求項２１に記載のプログラム。
【請求項２３】
前記負荷制御ステップでは、前記受信メッセージ数、前記受信パケット数に加え、前記コントローラの各々が管理対象とする前記スイッチの台数に基づいて、各コントローラの処理負荷を算出する、ことを特徴とする請求項１６乃至請求項２２のいずれか１項に記載のプログラム。
【請求項２４】
フローテーブルに従ってオープンフローネットワーク上のパケット転送を行う複数のスイッチと、
前記複数のスイッチの一部を管理する複数のコントローラと、を備えるコンピュータシステムであって、
前記複数のコントローラの各々は、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備える、コンピュータシステム。
【請求項２５】
オープンフローネットワーク上でのスイッチを管理する複数のコントローラ装置の負荷を分散させる制御装置であって、
前記オープンフローネットワークに存在する前記スイッチ毎に、当該スイッチを管理するコントローラに所定時間毎に送信したメッセージ数、及び当該スイッチの所定時間毎の受信パケット数、の少なくとも一方を管理する負荷管理テーブルと、
所定イベント発生時に、前記負荷管理テーブルに基づき、処理負荷を分散させるべきコントローラを検出し、検出した前記コントローラが管理対象とする前記スイッチの少なくとも一つを他のコントローラの管理対象に切り替える負荷制御手段と、
を備える制御装置。
【国際調査報告】
2013114490.tif 000019
2013114490.tif 000020