(57)【特許請求の範囲】
【請求項１】
フローテーブルを参照してパケット処理を行うスイッチと、
前記スイッチの前記フローテーブルを制御するコントローラと
を備え、
前記フローテーブル中の各エントリは、マッチ条件とアクションを示し、
前記スイッチは、前記フローテーブルを参照して、前記マッチ条件にマッチする受信パケットに対して前記アクションで指定される処理を実行し、
前記コントローラは、
エントリ制御ブロックと、
フローテーブル設定ブロックと
を備え、
前記フローテーブルにおいて、前記アクションが前記コントローラへの前記受信パケットの転送に変更されるエントリは、対象エントリであり、
前記エントリ制御ブロックは、前記対象エントリの前記マッチ条件にマッチするパケットが前記コントローラに転送された場合に前記コントローラにかかる負荷を予測し、
前記負荷が許容値以内の場合、前記フローテーブル設定ブロックは、前記スイッチに対して、前記対象エントリの前記アクションの変更を指示し、
前記負荷が前記許容値を超える場合、前記エントリ制御ブロックは、前記負荷が前記許容値以内となるまでエントリ分割処理を繰り返し、
前記エントリ分割処理において、
前記エントリ制御ブロックは、前記対象エントリを複数の分割後エントリに分割し、前記対象エントリの前記マッチ条件を複数の条件に分割し、前記複数の分割後エントリの前記マッチ条件を前記複数の条件のそれぞれに設定し、
前記フローテーブル設定ブロックは、前記スイッチに対して、前記複数の分割後エントリを前記フローテーブルに設定することを指示し、
前記エントリ制御ブロックは、前記複数の分割後エントリのいずれかを新たに前記対象エントリに設定する
スイッチネットワークシステム。
【請求項２】
請求項１に記載のスイッチネットワークシステムであって、
前記コントローラは更に、フロー処理ブロックを備え、
前記対象エントリの前記アクションが前記コントローラへの前記受信パケットの転送に変更された後、前記フロー処理ブロックは、前記対象エントリの前記マッチ条件にマッチするパケットを前記スイッチから受け取り、
前記フロー処理ブロックは、前記受け取ったパケットに応答して、前記受け取ったパケットのフローに関する新規エントリを決定し、
前記フローテーブル設定ブロックは、前記スイッチに対して、前記新規エントリを前記フローテーブルに設定することを指示する
スイッチネットワークシステム。
【請求項３】
請求項２に記載のスイッチネットワークシステムであって、
前記エントリ制御ブロックは、タイムアウトが発生したエントリを検出し、
前記フローテーブル設定ブロックは、前記スイッチに対して、前記検出されたエントリを前記フローテーブルから削除することを指示する
スイッチネットワークシステム。
【請求項４】
請求項３に記載のスイッチネットワークシステムであって、
前記対象エントリの変更前の前記アクションは第１アクションであり、
前記新規エントリは、
前記アクションが前記第１アクションである第１新規エントリと、
前記アクションが前記第１アクションと異なる第２アクションである第２新規エントリと
を含み、
前記第１新規エントリにタイムアウトが発生した場合、前記エントリ制御ブロックは、前記第１新規エントリの削除と、前記対象エントリの前記アクションの前記第２アクションへの変更を決定し、
前記フローテーブル設定ブロックは、前記スイッチに対して、前記第１新規エントリの削除と、前記対象エントリの前記アクションの前記第２アクションへの変更を指示する
スイッチネットワークシステム。
【請求項５】
請求項１乃至４のいずれか一項に記載のスイッチネットワークシステムであって、
統計情報は、前記フローテーブルのエントリ毎にマッチ状況を示し、
前記エントリ制御ブロックは、前記統計情報に基づいて前記負荷を予測する
スイッチネットワークシステム。
【請求項６】
請求項５に記載のスイッチネットワークシステムであって、
前記スイッチが前記統計情報を作成する
スイッチネットワークシステム。
【請求項７】
スイッチのフローテーブルを制御するコントローラであって、
前記フローテーブル中の各エントリは、マッチ条件とアクションを示し、
前記スイッチは、前記フローテーブルを参照し、前記マッチ条件にマッチする受信パケットに対して前記アクションで指定される処理を実行し、
前記コントローラは、
エントリ制御ブロックと、
フローテーブル設定ブロックと
を備え、
前記フローテーブルにおいて、前記アクションが前記コントローラへの前記受信パケットの転送に変更されるエントリは、対象エントリであり、
前記エントリ制御ブロックは、前記対象エントリの前記マッチ条件にマッチするパケットが前記コントローラに転送された場合に前記コントローラにかかる負荷を予測し、
前記負荷が許容値以内の場合、前記フローテーブル設定ブロックは、前記スイッチに対して、前記対象エントリの前記アクションの変更を指示し、
前記負荷が前記許容値を超える場合、前記エントリ制御ブロックは、前記負荷が前記許容値以内となるまでエントリ分割処理を繰り返し、
前記エントリ分割処理において、
前記エントリ制御ブロックは、前記対象エントリを複数の分割後エントリに分割し、前記対象エントリの前記マッチ条件を複数の条件に分割し、前記複数の分割後エントリの前記マッチ条件を前記複数の条件のそれぞれに設定し、
前記フローテーブル設定ブロックは、前記スイッチに対して、前記複数の分割後エントリを前記フローテーブルに設定することを指示し、
前記エントリ制御ブロックは、前記複数の分割後エントリのいずれかを新たに前記対象エントリに設定する
コントローラ。
【請求項８】
スイッチのフローテーブルをコントローラによって制御する制御方法であって、
前記フローテーブル中の各エントリは、マッチ条件とアクションを示し、
前記スイッチは、前記フローテーブルを参照し、前記マッチ条件にマッチする受信パケットに対して前記アクションで指定される処理を実行し、
前記フローテーブルにおいて、前記アクションが前記コントローラへの前記受信パケットの転送に変更されるエントリは、対象エントリであり、
前記制御方法は、
前記対象エントリの前記マッチ条件にマッチするパケットが前記コントローラに転送された場合に前記コントローラにかかる負荷を予測するステップと、
前記負荷が許容値以内の場合、前記スイッチに対して、前記対象エントリの前記アクションの変更を指示するステップと、
前記負荷が前記許容値を超える場合、前記負荷が前記許容値以内となるまでエントリ分割処理を繰り返すステップと
を含み、
前記エントリ分割処理は、
前記対象エントリを複数の分割後エントリに分割し、前記対象エントリの前記マッチ条件を複数の条件に分割し、前記複数の分割後エントリの前記マッチ条件を前記複数の条件のそれぞれに設定するステップと、
前記スイッチに対して、前記複数の分割後エントリを前記フローテーブルに設定することを指示するステップと、
前記複数の分割後エントリのいずれかを新たに前記対象エントリに設定するステップと
を含む
制御方法。
【請求項９】
請求項８に記載の制御方法を前記コントローラに実行させる制御プログラムが記録された記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチとコントローラを含むスイッチネットワークシステムを制御する技術に関する。
【背景技術】
【０００２】
非特許文献１（Ｎｉｃｋ  ＭｃＫｅｏｗｎ  ｅｔ  ａｌ．，  “ＯｐｅｎＦｌｏｗ：  Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ”，  ＡＣＭ  ＳＩＧＣＯＭＭ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｒｅｖｉｅｗ，  Ｖｏｌ．  ３８，  Ｎｏ．  ２，  ２００８．  （ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｗｐ−ｌａｔｅｓｔ．ｐｄｆ））に、「オープンフロー（ＯｐｅｎＦｌｏｗ）」という技術が記載されている。オープンフローでは、フロー単位で経路制御、障害回復、負荷分散、最適化が行われる。オープンフローでは、転送ノードとして機能するオープンフロースイッチと、そのオープンフロースイッチを制御するオープンフローコントローラが用いられる。【０００３】
オープンフロースイッチは、「マッチ条件」と「アクション」との対応関係を示すフローテーブルを備え、このフローテーブルに従って動作する。具体的には、オープンフロースイッチは、パケットを受け取ると、フローテーブルを参照し、受信パケットにマッチするエントリをフローテーブルから検索する。受信パケットにマッチするエントリがフローテーブルに登録されている場合、オープンフロースイッチは、当該マッチエントリのアクションで指定されている処理を、受信パケットに対して実行する。典型的には、オープンフロースイッチは、アクションで指定されている出力ポートに受信パケットを転送する。【０００４】
オープンフロースイッチのフローテーブルを制御するのが、オープンフローコントローラである。すなわち、オープンフローコントローラは、新規エントリの追加、エントリ変更、エントリ削除などをオープンフロースイッチに指示し、それにより、オープンフロースイッチの動作を制御する。例えば、マッチエントリがフローテーブルに無い場合、オープンフロースイッチは、オープンフローコントローラに経路設定を要求する。この経路設定要求に応答して、オープンフローコントローラは、当該受信パケットのフローの経路を設計する。そして、オープンフローコントローラは、設計経路に沿ったパケット転送が実現されるように、設計経路上の各スイッチに対して、新規エントリの追加を指示する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｎｉｃｋ  ＭｃＫｅｏｗｎ  ｅｔ  ａｌ．，  “ＯｐｅｎＦｌｏｗ：  Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ”，  ＡＣＭ  ＳＩＧＣＯＭＭ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｒｅｖｉｅｗ，  Ｖｏｌ．  ３８，  Ｎｏ．  ２，  ２００８．  （ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｗｐ−ｌａｔｅｓｔ．ｐｄｆ）
【発明の概要】
【０００６】
上記オープンフローのようなスイッチとコントローラとが分離したスイッチネットワークシステムに関して、本願発明者は、次のような課題を見出した。
【０００７】
コントローラを介して所望のスイッチのフローテーブルの内容を設定したい場合がある。その場合、まず、その所望のスイッチにコントローラへパケットを送らせる。そして、そのパケットに応答して、コントローラが所定のアプリケーション処理を実行し、所望のスイッチのフローテーブルの設定を行う。
【０００８】
しかしながら、所望のスイッチからコントローラへパケットを送らせる場合、大量のトラヒックがコントローラに流入する可能性がある。一般に、コントローラ上のアプリケーション処理は、汎用ＣＰＵがソフトウェアを実行することにより実現され、スイッチにおいてハードウェアにより実現されるパケット転送処理に比べてはるかに遅い。従って、スイッチが大量のトラヒックをコントローラに転送した場合、コントローラ側ではその大量のトラヒックを処理しきれない。その結果、コントローラの処理負荷が増大し、他の重要な制御処理ができなくなる。
【０００９】
コントローラでは、他の重要な制御処理ができなくなることを防止するため、パケット受信のタスクの優先度が下げられる場合がある。あるいは、パケット受信キューのサイズを調整することにより、過剰なトラヒック流入が防止されることもある。しかしながら、そのような方法では、重要な情報を含むパケットを取りこぼしてしまう可能性がある。
【００１０】
本発明の１つの目的は、スイッチのフローテーブルを制御する際に、コントローラへの過剰なトラヒック流入を防ぐことにある。
【００１１】
本発明の１つの観点において、スイッチネットワークシステムが提供される。そのスイッチネットワークシステムは、フローテーブルを参照してパケット処理を行うスイッチと、そのスイッチのフローテーブルを制御するコントローラと、を備える。フローテーブル中の各エントリは、マッチ条件とアクションを示す。スイッチは、フローテーブルを参照して、マッチ条件にマッチする受信パケットに対してアクションで指定される処理を実行する。フローテーブルにおいて、アクションが「コントローラへの受信パケットの転送」に変更されるエントリは、対象エントリである。
【００１２】
コントローラは、エントリ制御ブロックと、フローテーブル設定ブロックと、を備える。エントリ制御ブロックは、対象エントリのマッチ条件にマッチするパケットがコントローラに転送された場合にコントローラにかかる負荷を予測する。その負荷が許容値以内の場合、フローテーブル設定ブロックは、スイッチに対して、対象エントリのアクションの変更を指示する。一方、負荷が許容値を超える場合、エントリ制御ブロックは、負荷が許容値以内となるまでエントリ分割処理を繰り返す。エントリ分割処理において、エントリ制御ブロックは、対象エントリを複数の分割後エントリに分割し、対象エントリのマッチ条件を複数の条件に分割し、複数の分割後エントリのマッチ条件を複数の条件のそれぞれに設定する。フローテーブル設定ブロックは、スイッチに対して、複数の分割後エントリをフローテーブルに設定することを指示する。エントリ制御ブロックは、複数の分割後エントリのいずれかを新たに対象エントリに設定する。
【００１３】
本発明の他の観点において、スイッチのフローテーブルを制御するコントローラが提供される。フローテーブル中の各エントリは、マッチ条件とアクションを示す。スイッチは、フローテーブルを参照し、マッチ条件にマッチする受信パケットに対してアクションで指定される処理を実行する。フローテーブルにおいて、アクションが「コントローラへの受信パケットの転送」に変更されるエントリは、対象エントリである。
【００１４】
コントローラは、エントリ制御ブロックと、フローテーブル設定ブロックと、を備える。エントリ制御ブロックは、対象エントリのマッチ条件にマッチするパケットがコントローラに転送された場合にコントローラにかかる負荷を予測する。その負荷が許容値以内の場合、フローテーブル設定ブロックは、スイッチに対して、対象エントリのアクションの変更を指示する。一方、負荷が許容値を超える場合、エントリ制御ブロックは、負荷が許容値以内となるまでエントリ分割処理を繰り返す。エントリ分割処理において、エントリ制御ブロックは、対象エントリを複数の分割後エントリに分割し、対象エントリのマッチ条件を複数の条件に分割し、複数の分割後エントリのマッチ条件を複数の条件のそれぞれに設定する。フローテーブル設定ブロックは、スイッチに対して、複数の分割後エントリをフローテーブルに設定することを指示する。エントリ制御ブロックは、複数の分割後エントリのいずれかを新たに対象エントリに設定する。
【００１５】
本発明の更に他の観点において、スイッチのフローテーブルをコントローラによって制御する制御方法が提供される。フローテーブル中の各エントリは、マッチ条件とアクションを示す。スイッチは、フローテーブルを参照し、マッチ条件にマッチする受信パケットに対してアクションで指定される処理を実行する。フローテーブルにおいて、アクションが「コントローラへの受信パケットの転送」に変更されるエントリは、対象エントリである。
【００１６】
制御方法は、（Ａ）対象エントリのマッチ条件にマッチするパケットがコントローラに転送された場合にコントローラにかかる負荷を予測するステップと、（Ｂ）負荷が許容値以内の場合、スイッチに対して、対象エントリのアクションの変更を指示するステップと、（Ｃ）負荷が許容値を超える場合、負荷が許容値以内となるまでエントリ分割処理を繰り返すステップと、を含む。エントリ分割処理は、（ａ）対象エントリを複数の分割後エントリに分割し、対象エントリのマッチ条件を複数の条件に分割し、複数の分割後エントリのマッチ条件を複数の条件のそれぞれに設定するステップと、（ｂ）スイッチに対して、複数の分割後エントリをフローテーブルに設定することを指示するステップと、（ｃ）複数の分割後エントリのいずれかを新たに対象エントリに設定するステップと、を含む。
【００１７】
本発明の更に他の観点において、上記制御方法をコントローラに実行させる制御プログラムが提供される。
【００１８】
本発明によれば、スイッチのフローテーブルを制御する際に、コントローラへの過剰なトラヒック流入を防ぐことが可能となる。その結果、コントローラの処理負荷の増大が抑制され、他の重要な制御処理ができなくなるといった事態が未然に防がれる。
【図面の簡単な説明】
【００１９】
上記及び他の目的、長所、特徴は、次の図面と共に説明される本発明の実施の形態により明らかになるであろう。【００２０】
【図１】図１は、本発明の実施の形態に係るスイッチネットワークシステムの構成例を示すブロック図である。
【図２】図２は、本実施の形態に係るスイッチ及びコントローラの構成例を示すブロック図である。
【図３】図３は、本実施の形態におけるフローテーブルを示す概念図である。
【図４】図４は、本実施の形態に係るコントローラのハードウェア構成例を示すブロック図である。
【図５】図５は、本実施の形態に係るスイッチ処理を示すフローチャートである。
【図６】図６は、本実施の形態に係る負荷予測及びエントリ分割処理を含む処理を示すフローチャートである。
【図７】図７は、本実施の形態に係るエントリ削除処理を含む処理を示すフローチャートである。
【図８】図８は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図９】図９は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図１０】図１０は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図１１】図１１は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図１２】図１２は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図１３】図１３は、本実施の形態に係る処理の具体例を説明するための概念図である。
【図１４】図１４は、本実施の形態に係る処理の具体例を説明するための概念図である。
【発明を実施するための形態】
【００２１】
添付図面を参照して、本発明の実施の形態を説明する。
【００２２】
１．構成
図１は、本実施の形態に係るスイッチネットワークシステム１の構成例を示すブロック図である。スイッチネットワークシステム１は、スイッチ１０、サーバ２０、及びコントローラ１００を備えている。複数のスイッチ１０は、ネットワーク内に分散的に配置されている。スイッチ１０間はリンク（回線）で接続されており、複数のスイッチ１０によってスイッチネットワークが構成されている。このスイッチネットワークが、複数のサーバ２０間に介在している。
【００２３】
各スイッチ１０は、フローテーブルを備えており、そのフローテーブルに従ってパケット処理を行う。そのフローテーブルの制御を行うのが、コントローラ１００である。コントローラ１００は、制御回線５を介してスイッチ１０に接続されており、制御回線５を介して各スイッチ１０のフローテーブルを設定する機能を有している。コントローラ１００は、フローテーブルの設定を通してスイッチ１０の動作を制御することによって、ネットワーク通信を適宜制御することができる。このような処理を実現するためのコントローラ１００とスイッチ１０との間のインタフェース方式としては、例えば、Ｏｐｅｎｆｌｏｗ（http://www.openflowswitch.org/を参照）が挙げられる。この場合、「Ｏｐｅｎｆｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ」がコントローラ１００となり、「Ｏｐｅｎｆｌｏｗ  Ｓｗｉｔｃｈ」が各スイッチ１０となる。
【００２４】
本実施の形態に係るスイッチネットワークシステム１は、例えば、データセンター（data center）に適用される。
【００２５】
図２は、本実施の形態に係るスイッチ１０及びコントローラ１００の構成例を示すブロック図である。
【００２６】
スイッチ１０は、スイッチ処理ブロック１１、統計情報作成ブロック１２、記憶ブロック１３、制御インタフェース１４、及び複数のポート１５を備えている。外部からパケットが入力されるポート１５は入力ポートであり、パケットが外部に出力されるポート１５は出力ポートである。スイッチ処理ブロック１１は、入力ポートから出力ポートへのパケット転送等、スイッチの主要な処理を行う。制御インタフェース１４は、制御回線５を介してコントローラ１００に接続されており、コントローラ１００との間で通信を行う際のインタフェースとなる。
【００２７】
記憶ブロック１３には、フローテーブルＴＢＬが格納されている。図３に示されるように、フローテーブルＴＢＬは、少なくとも１つのエントリを備えており、各エントリは「マッチ条件」と「アクション」を示している。「マッチ条件」は、入力ポート、送信元ＭＡＣアドレス、宛先ＭＡＣアドレス、送信元ＩＰアドレス、宛先ＩＰアドレス、Ｌ４プロトコル識別子、送信元Ｌ４ポート番号、宛先Ｌ４ポート番号などのパラメータの組み合わせで構成される。「アクション」は、マッチ条件にマッチするパケットに対して実行される処理内容を示す。
【００２８】
スイッチ処理ブロック１１は、入力ポートを通してパケットを受信すると、記憶ブロック１３に格納されているフローテーブルＴＢＬを参照する。そして、スイッチ処理ブロック１１は、受信パケットのヘッダ情報などに基いて、受信パケットがいずれかのエントリのマッチ条件にマッチするか否かを調べる。つまり、スイッチ処理ブロック１１は、受信パケットにマッチするエントリをフローテーブルＴＢＬから検索する。受信パケットがいずれかのエントリのマッチ条件にマッチした場合、スイッチ処理ブロック１１は、該当エントリのアクションで指定される処理を、受信パケットに対して実行する。典型的には、アクションはパケットの出力ポート（転送先）を示しており、スイッチ処理ブロック１１は、その出力ポートに受信パケットを転送する。
【００２９】
記憶ブロック１３には、更に、統計情報ＳＴＡが格納されている。統計情報ＳＴＡは、フローテーブルＴＢＬのエントリ毎にマッチ状況を示す。マッチ状況は、各エントリにマッチしたパケットの数、すなわち、各エントリのマッチ回数を含む。マッチ状況は、マッチしたパケットのバイト数を含んでいてもよい。フローテーブルＴＢＬと統計情報ＳＴＡは、１つのテーブルにまとめられていてもよい。
【００３０】
この統計情報ＳＴＡを作成するのが、スイッチ１０の統計情報作成ブロック１２である。統計情報作成ブロック１２は、スイッチ処理ブロック１１によるパケット処理状況に基いて、統計情報ＳＴＡを作成する。例えば、統計情報作成ブロック１２は、フローテーブルＴＢＬのエントリ毎に統計カウンタを有し、その統計カウンタを用いてマッチ回数をカウントする。また、統計情報作成ブロック１２は、ｓＦｌｏｗ（登録商標）やＮｅｔＦｌｏｗ（登録商標）といったサンプリングベースの統計処理技術によっても実現され得る。
【００３１】
コントローラ１００は、パケット受信ブロック１１０、フロー処理ブロック１２０、統計情報収集ブロック１３０、エントリ制御ブロック１４０、フローテーブル設定ブロック１５０、及び制御インタフェース１６０を備えている。制御インタフェース１６０は、制御回線５を介して各スイッチ１０に接続されており、各スイッチ１０との間で通信を行う際のインタフェースとなる。
【００３２】
パケット受信ブロック１１０は、制御インタフェース１６０を介して、スイッチ１０からパケットを受け取る。パケット受信ブロック１１０は、受け取ったパケットをフロー処理ブロック１２０に渡す。フロー処理ブロック１２０は、受け取ったパケットに基いてフローを識別し、当該フローに対して様々なアプリケーション処理を行う。アプリケーション処理の例として、経路設計や負荷分散が挙げられる。そして、フロー処理ブロック１２０は、スイッチ１０のフローテーブルＴＢＬの設定変更を、フローテーブル設定ブロック１５０に指示する。フローテーブルＴＢＬの設定変更の内容は、アプリケーション処理に応じて様々である。
【００３３】
統計情報収集ブロック１３０は、制御インタフェース１６０を介して、スイッチ１０から統計情報ＳＴＡを受け取る。統計情報収集ブロック１３０は、受け取った統計情報ＳＴＡをエントリ制御ブロック１４０に渡す。エントリ制御ブロック１４０は、統計情報ＳＴＡ等に基いて、後述される「負荷予測」や「エントリ分割処理」を実行する。そして、エントリ制御ブロック１４０は、スイッチ１０のフローテーブルＴＢＬの設定変更を、フローテーブル設定ブロック１５０に指示する。
【００３４】
フローテーブル設定ブロック１５０は、フロー処理ブロック１２０やエントリ制御ブロック１４０からの指示に従って、スイッチ１０のフローテーブルＴＢＬの設定変更を行う。具体的には、フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、スイッチ１０に対してフローテーブルＴＢＬの設定を指示する。その指示内容としては、新規エントリの追加、エントリ変更、エントリ削除などが挙げられる。
【００３５】
図４は、コントローラ１００のハードウェア構成例を示している。コントローラ１００は、ＣＰＵ（Central
Processing Unit）１０１、メモリ１０２、二次記憶装置１０３、ネットワークインタフェース１０４等を備える計算機である。上述のパケット受信ブロック１１０、フロー処理ブロック１２０、統計情報収集ブロック１３０、エントリ制御ブロック１４０、フローテーブル設定ブロック１５０、及び制御インタフェース１６０は、ＣＰＵ１０１が制御プログラムを実行することにより実現される。制御プログラムは、コンピュータ（ＣＰＵ１０１）によって実行されるコンピュータプログラムであり、メモリ１０２に格納される。また、制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
【００３６】
２．処理フロー
２−１．スイッチ処理
図５は、本実施の形態に係るスイッチ処理を示すフローチャートである。スイッチ１０は、あるフローのパケットを受信する（ステップＳ１１）。具体的には、スイッチ処理ブロック１１が、入力ポートを通してパケットを受信する。入力ポートからパケットを受け取ると、スイッチ処理ブロック１１は、受信パケットのヘッダ情報を抽出する。そして、スイッチ処理ブロック１１は、抽出したヘッダ情報と入力ポートを検索キーとして用いて、受信パケットにマッチするエントリをフローテーブルＴＢＬから検索する（ステップＳ１２）。
【００３７】
受信パケットにマッチするエントリがフローテーブルＴＢＬに有る場合（ステップＳ１３；Ｙｅｓ）、スイッチ処理ブロック１１は、該当エントリのアクションで指定される処理を、受信パケットに対して実行する（ステップＳ１４）。典型的には、アクションはパケットの出力ポート（転送先）を示しており、スイッチ処理ブロック１１は、その出力ポートに受信パケットを転送する。一方、受信パケットにマッチするエントリがフローテーブルＴＢＬに無い場合（ステップＳ１３；Ｎｏ）、スイッチ処理ブロック１１は、制御インタフェース１４を介して、受信パケット（あるいは受信パケットのヘッダ情報）をコントローラ１００に送信する（ステップＳ１５）。受信パケット（あるいは受信パケットのヘッダ情報）をコントローラ１００に送信したスイッチ１０は、以下「要求元スイッチ」と参照される。
【００３８】
コントローラ１００のフロー処理ブロック１２０は、制御インタフェース１６０及びパケット受信ブロック１１０を介して、スイッチ１０から受信パケット（あるいは受信パケットのヘッダ情報）を受け取る。それに応答して、フロー処理ブロック１２０は、フロー識別を行い、当該フローに対して様々なアプリケーション処理を行う（ステップＳ１００）。アプリケーション処理の例として、要求元スイッチから宛先までの経路設計が挙げられる。そして、フロー処理ブロック１２０は、必要なスイッチ１０のフローテーブルＴＢＬの設定変更を、フローテーブル設定ブロック１５０に指示する。フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、必要なスイッチ１０に対してフローテーブルＴＢＬの設定を指示する。
【００３９】
コントローラ１００から指示を受けた各スイッチ１０は、その指示に従って、自身のフローテーブルＴＢＬの設定を行う（ステップＳ１６）。その指示内容としては、新規エントリの追加、エントリ変更、エントリ削除などが挙げられる。その後、コントローラ１００は、受信パケット（あるいは受信パケットのヘッダ情報）を要求元スイッチに返送する。
【００４０】
２−２．負荷予測及びエントリ分割処理
コントローラ１００を介して、スイッチ１０のフローテーブルＴＢＬ中のあるエントリの内容を変更したい場合がある。例えば、多数のフローにマッチするワイルドカードエントリ（wildcard entry）に関して、一部のフローに対するアクションを変えたい場合がある。内容が変更されるエントリは、以下「対象エントリ」と参照される。この場合、対象エントリのアクションが、一旦、「コントローラ１００への受信パケットの転送」に変更される。コントローラ１００は、スイッチ１０からパケットを受け取ると、所定のアプリケーション処理を実行し、それにより、フローテーブルＴＢＬの内容を所望のものに設定する。
【００４１】
しかしながら、対象エントリのアクションが「コントローラ１００への受信パケットの転送」に変更されている期間、その対象エントリのマッチ条件にマッチする全てのパケットがコントローラ１００に転送される。これは、コントローラ１００の処理負荷の増大を招く。特に、対象エントリがワイルドカードエントリの場合、大量のトラヒックがコントローラ１００に流入し、最悪の場合、コントローラ１００は他の重要な制御処理ができなくなる。
【００４２】
このような事態を未然に防ぐため、本実施の形態に係るコントローラ１００は、「負荷予測」及び「エントリ分割処理」を行う。図６を参照して、「負荷予測」及び「エントリ分割処理」を説明する。
【００４３】
ステップＳ１１０：
統計情報収集ブロック１３０は、制御インタフェース１６０を介して、スイッチ１０から統計情報ＳＴＡを定期的に受け取る。統計情報収集ブロック１３０は、受け取った統計情報ＳＴＡをエントリ制御ブロック１４０に渡す。
【００４４】
ステップＳ１２０：
エントリ制御ブロック１４０は、対象エントリのマッチ条件にマッチするパケットがコントローラ１００に転送された場合にコントローラ１００（ＣＰＵ１０１）にかかる負荷を予測する。このとき、エントリ制御ブロック１４０は、上記統計情報ＳＴＡに基いて負荷を予測する。具体的には、統計情報ＳＴＡは、所定期間内に対象エントリにマッチしたパケットの数やバイト数といった統計量を示している。よって、エントリ制御ブロック１４０は、それら統計量を統合することによって、パケットレートや帯域を計算することができる。更に、エントリ制御ブロック１４０は、予め用意されたパケットレートと負荷との対応表を参照することによって、ＣＰＵ１０１にかかる負荷を予測することができる。
【００４５】
ステップＳ１３０：
エントリ制御ブロック１４０は、予測負荷と許容値との比較を行い、予測負荷が許容値以内に収まっているか否かを判定する。
【００４６】
ステップＳ１４０：
予測負荷が許容値以内の場合（ステップＳ１３０；Ｙｅｓ）、エントリ制御ブロック１４０は、対象エントリの設定変更を、フローテーブル設定ブロック１５０に指示する。更に、フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、スイッチ１０に対して、対象エントリのアクションの変更を指示する。具体的には、フローテーブル設定ブロック１５０は、スイッチ１０に対して、対象エントリのアクションを「コントローラ１００への受信パケットの転送」に変更することを指示する。スイッチ１０は、指示に従って、対象エントリのアクションを「コントローラ１００への受信パケットの転送」に変更する。
【００４７】
ステップＳ１５０：
一方、予測負荷が許容値を超える場合（ステップＳ１３０；Ｎｏ）、エントリ制御ブロック１４０は、「エントリ分割処理」を実行する。具体的には、エントリ分割処理（ステップＳ１５０）は、次のステップＳ１５１〜Ｓ１５３を含む。
【００４８】
ステップＳ１５１：
エントリ制御ブロック１４０は、対象エントリを、複数の部分エントリに分割する。各部分エントリのアクションは、対象エントリのアクションと同一である。一方、部分エントリのマッチ条件にマッチするマッチ範囲は、対象エントリのマッチ条件にマッチするマッチ範囲の一部である。つまり、エントリ制御ブロック１４０は、対象エントリのマッチ条件（マッチ範囲）も複数の条件（範囲）に分割し、複数の部分エントリのそれぞれのマッチ条件を複数の条件のそれぞれに設定する。例えば、エントリ制御ブロック１４０は、対象エントリのマッチ条件で示されているＩＰアドレス範囲を複数の部分範囲に分割し、それら複数の部分範囲を複数の部分エントリのそれぞれのマッチ条件として設定する。部分エントリは、以下、「分割後エントリ」と参照される。
【００４９】
ステップＳ１５２：
エントリ制御ブロック１４０は、ステップＳ１５１で得られた複数の分割後エントリを設定することを、フローテーブル設定ブロック１５０に指示する。更に、フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、スイッチ１０に対して、複数の分割後エントリをフローテーブルＴＢＬに設定することを指示する。スイッチ１０は、指示に従って、複数の分割後エントリをフローテーブルＴＢＬに設定する。
【００５０】
ステップＳ１５３：
エントリ制御ブロック１４０は、複数の分割後エントリのうちいずれかを、新たな対象エントリとして設定する。つまり、エントリ制御ブロック１４０は、対象エントリを更新する。その後、処理は、ステップＳ１１０に戻る。
【００５１】
このようにして、エントリ制御ブロック１４０は、対象エントリに関連する予測負荷が許容値以内となるまで、エントリ分割処理（ステップＳ１５０）を繰り返す。
【００５２】
ステップＳ１６０：
上記ステップＳ１４０において、対象エントリのアクションは「コントローラ１００への受信パケットの転送」に変更される。その後、スイッチ１０において対象エントリのマッチ条件にマッチする受信パケットは、コントローラ１００へ送られる。コントローラ１００のフロー処理ブロック１２０は、制御インタフェース１６０及びパケット受信ブロック１１０を介して、スイッチ１０からそれら受信パケットを受け取る。このとき、上述の通り対象エントリに関連する予測負荷は許容値以内となっているため、過剰なトラヒック流入は発生しないことが期待される。
【００５３】
ステップＳ１７０：
フロー処理ブロック１２０は、受け取ったパケットに応答して、所定のアプリケーション処理を実行し、新たなフローテーブルＴＢＬの内容を決定する。具体的には、フロー処理ブロック１２０は、受け取ったパケットのフロー識別を行い、当該フローに関する所望の新規エントリを決定する。
【００５４】
ステップＳ１８０：
フロー処理ブロック１２０は、新規エントリの設定を、フローテーブル設定ブロック１５０に指示する。フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、スイッチ１０に対して、新規エントリをフローテーブルＴＢＬに設定することを指示する。スイッチ１０は、指示に従って、新規エントリをフローテーブルＴＢＬに設定する。このようにして、フローテーブルＴＢＬの内容が所望のものに変更される。
【００５５】
以上に説明されたように、本実施の形態によれば、スイッチ１０のフローテーブルＴＢＬの内容が変更される際、コントローラ１００は、自身が受け取る可能性のあるトラヒック量を予測する。そして、コントローラ１００は、流入トラヒックを処理しきれないと判断した場合、エントリ分割処理を実行し、対象エントリのマッチ範囲を小さくする。これにより、コントローラ１００への過剰なトラヒック流入を防ぐことが可能となる。その結果、コントローラ１００の処理負荷の増大が抑制され、他の重要な制御処理ができなくなるといった事態が未然に防がれる。また、重要な情報を含むパケットを取りこぼしてしまうといった事態も防止される。
【００５６】
２−３．エントリ削除処理
次に、図７を参照して、エントリ削除処理を説明する。
【００５７】
ステップＳ２１０：
コントローラ１００のエントリ制御ブロック１４０は、統計情報と内蔵タイマを用いることにより、「無トラヒック期間」をエントリ毎に計測する。無トラヒック期間とは、トラヒックが流れない期間である。
【００５８】
ステップＳ２２０：
あるエントリに関して、無トラヒック期間が所定の閾値を超えた場合、すなわち、タイムアウトが発生した場合、処理はステップＳ２３０に進む。
【００５９】
ステップＳ２３０：
エントリ制御ブロック１４０は、タイムアウトが発生したエントリを検出すると、当該検出エントリの削除をフローテーブル設定ブロック１５０に指示する。またこのとき、エントリ集約等が必要であれば、エントリ制御ブロック１４０は合わせてフローテーブル設定ブロック１５０に指示する。
【００６０】
ステップＳ２４０：
フローテーブル設定ブロック１５０は、制御インタフェース１６０を介して、スイッチ１０に対して、フローテーブルＴＢＬの設定を指示する。具体的には、フローテーブル設定ブロック１５０は、スイッチ１０に対して、上記検出エントリをフローテーブルＴＢＬから削除することを指示し、必要に応じてエントリ集約を指示する。スイッチ１０は、指示に従って、フローテーブルＴＢＬの設定を行う。
【００６１】
３．処理例
図８〜図１４を参照して、フローテーブルＴＢＬの操作の一例を説明する。図８〜図１４の各々は、フローテーブルＴＢＬに含まれるエントリ番号（＃）、優先度（ｐｒｉ）、マッチ条件及びアクションと、統計情報ＳＴＡに含まれるマッチ回数（カウント値）を示している。尚、マッチ条件は、送信元ＩＰアドレスの範囲で与えられている。そのアドレス範囲の表記は、プレフィックス表記であり、［アドレス範囲の最初のＩＰアドレス］／［プレフィックス値］である。プレフィックス値は、サブネットマスクの「１」の数を表している。アクションは、パケットの出力先を示している。
【００６２】
図８は、初期状態を示している。初期状態では、３個のエントリ＃１〜＃３がある。このうちエントリ＃１が、上述の「対象エントリ」であるとする。また、エントリ分割判定のための許容値は、「カウント値＝１０００」であるとする。
【００６３】
図８において、対象エントリ＃１のカウント値は許容値を超えている。従って、図９に示されるように、対象エントリ＃１は、２個の部分エントリ（分割後エントリ）＃４、＃５に分割される（ステップＳ１５０）。ここで、対象エントリ＃１のマッチ条件「１０．０．０．０／９」が２分割され、分割後のマッチ条件「１０．０．０．０／１０」、「１０．６４．０．０／１０」が分割後エントリ＃４、＃５のそれぞれに割り当てられていることに留意されたい。一方、アクションや優先度は、対象エントリ＃１と分割後エントリ＃４、＃５とで同一である。その後、分割後エントリ＃４が、新たな対象エントリに設定される。
【００６４】
図９において、対象エントリ＃４のカウント値は許容値を超えている。従って、図１０に示されるように、対象エントリ＃４は、２個の部分エントリ（分割後エントリ）＃６、＃７に分割される（ステップＳ１５０）。ここでも、対象エントリ＃４のマッチ条件「１０．０．０．０／１０」が２分割され、分割後のマッチ条件「１０．０．０．０／１１」、「１０．３２．０．０／１１」が分割後エントリ＃６、＃７のそれぞれに割り当てられていることに留意されたい。一方、アクションや優先度は、対象エントリ＃４と分割後エントリ＃６、＃７とで同一である。その後、分割後エントリ＃６が、新たな対象エントリに設定される。
【００６５】
図１０において、対象エントリ＃６のカウント値は許容値以内である。従って、図１１に示されるように、対象エントリ＃６のアクションが、「ｐｏｒｔ１」から「ｃｏｎｔｒｏｌｌｅｒ（＝コントローラ１００へのパケット転送）」に変更される（ステップＳ１４０）。これにより、対象エントリ＃６のマッチ条件「１０．０．０．０／１１」にマッチするパケットが、コントローラ１００に転送されることになる。
【００６６】
その後、図１２に示されるように、対象エントリ＃６にマッチするパケットに応答して、２つの新規エントリ＃８、＃９が追加されるとする（ステップＳ１６０〜Ｓ１８０）。新規エントリ＃８は、送信元ＩＰアドレスが「１０．１．１．１」であるパケットに応答して作成されたものであり、マッチ条件が「１０．１．１．１」であるイグザクトマッチエントリである。同様に、新規エントリ＃９は、送信元ＩＰアドレスが「１０．１．１．２」であるパケットに応答して作成されたものであり、マッチ条件が「１０．１．１．２」であるイグザクトマッチエントリである。また、新規エントリ＃８は、対象エントリ＃６の変更前のアクション「ｐｏｒｔ１（第１アクション）」と同じアクションを有しており、既存フローに対応している。一方、新規エントリ＃９は、「ｐｏｒｔ１」と異なる「ｐｏｒｔ２（第２アクション）」をアクションとして有しており、新規のフローに対応している。
【００６７】
その後、新規エントリ＃８にタイムアウトが発生したとする。この場合、図１３に示されるように、新規エントリ＃８がフローテーブルＴＢＬから削除される（ステップＳ２３０〜Ｓ２４０）。
【００６８】
ここで、旧アクション「ｐｏｒｔ１」を有する新規エントリ＃８が無くなったため、それ以外の新規エントリ＃９が対象エントリ＃６に集約される。具体的には、図１４に示されるように、対象エントリ＃６のアクションが、新規エントリ＃９のアクション「ｐｏｒｔ２」に変更される（ステップＳ３０〜Ｓ２４０）。更に、新規エントリ＃９は削除される。
【００６９】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【００７０】
本出願は、２０１０年１月５日に出願された日本国特許出願２０１０−０００３６８を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
0005637148.tif 000002
【図２】
0005637148.tif 000003
【図３】
0005637148.tif 000004
【図４】
0005637148.tif 000005
【図５】
0005637148.tif 000006
【図６】
0005637148.tif 000007
【図７】
0005637148.tif 000008
【図８】
0005637148.tif 000009
【図９】
0005637148.tif 000010
【図１０】
0005637148.tif 000011
【図１１】
0005637148.tif 000012
【図１２】
0005637148.tif 000013
【図１３】
0005637148.tif 000014
【図１４】
0005637148.tif 000015