(57)【特許請求の範囲】
【請求項１】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、
前記フローエントリを、前記スイッチのフローテーブルに設定するコントローラと
を含み、
前記スイッチは、自身のフローテーブルの空き状況を前記コントローラに通知し、
前記コントローラは、前記スイッチのフローテーブルの空き状況を考慮して経路計算を行い、前記スイッチのフローテーブルの使用率を改善するコントローラであって、前記スイッチが仮想スイッチであり、前記スイッチのフローテーブルの空きが所定の閾値を下回っている場合、前記スイッチが仮想スイッチとして動作している物理マシンに対して、新たな仮想スイッチのインスタンスを作成し、前記スイッチとブリッジすることにより、前記スイッチのフローテーブルを拡張する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記スイッチは、オープンフロープロトコルに則ったオープンフローメッセージのうち、前記スイッチから前記コントローラに向かうメッセージである非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）を利用して、自身のフローテーブルの空き状況を前記コントローラに通知し、
前記コントローラは、前記非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）を解析して、前記スイッチのフローテーブルの空き状況を記録する
ネットワークシステム。
【請求項３】
請求項２に記載のネットワークシステムであって、
前記スイッチは、前記非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）のうち、タイプ領域（ｔｙｐｅ  ｆｉｅｌｄ）、コード領域（ｃｏｄｅ  ｆｉｅｌｄ）、データ領域（ｄａｔａ  ｆｉｅｌｄ）の組を含む既存のメッセージであるエラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）を拡張し、タイプ領域（ｔｙｐｅ  ｆｉｅｌｄ）にリソース使用状況を記録し、コード領域（ｃｏｄｅ  ｆｉｅｌｄ）にフローテーブルを記録し、データ領域（ｄａｔａ  ｆｉｅｌｄ）に空き状況を記録し、前記コントローラに送信する
ネットワークシステム。
【請求項４】
請求項２に記載のネットワークシステムであって、
前記スイッチは、前記非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）として、前記スイッチから前記コントローラにリソースの使用状況を通知するためのメッセージを新たに定義し、前記コントローラに送信する
ネットワークシステム。
【請求項５】
請求項１乃至４のいずれか一項に記載のネットワークシステムであって、
前記コントローラは、前記スイッチのフローテーブルの空きが所定の閾値を下回っているか確認し、下回っている場合、前記スイッチを除外したトポロジ情報を基に、経路を再計算し、算出された経路上のスイッチにフローエントリを分散する
ネットワークシステム。
【請求項６】
請求項１乃至５のいずれか一項に記載のネットワークシステムで使用されるスイッチ。
【請求項７】
請求項１乃至５のいずれか一項に記載のネットワークシステムで使用されるコントローラ。
【請求項８】
スイッチが、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うことと、
コントローラが、前記フローエントリを、前記スイッチのフローテーブルに設定することと、
前記スイッチが、自身のフローテーブルの空き状況を前記コントローラに通知することと、
前記コントローラが、前記スイッチのフローテーブルの空き状況を考慮して経路計算を行い、前記スイッチのフローテーブルの使用率を改善することと、
前記スイッチが仮想スイッチであり、前記スイッチのフローテーブルの空きが所定の閾値を下回っている場合、前記スイッチが仮想スイッチとして動作している物理マシンに対して、新たな仮想スイッチのインスタンスを作成し、前記スイッチとブリッジすることにより、前記スイッチのフローテーブルを拡張することと
を含む
リソース使用率改善方法。
【請求項９】
請求項８に記載のリソース使用率改善方法を、スイッチに実行させるためのプログラムを格納した記録媒体。
【請求項１０】
請求項８に記載のリソース使用率改善方法を、コントローラに実行させるためのプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、特にネットワーク機器のパケット転送機能と経路制御機能を分離したネットワークシステムに関する。
【背景技術】
【０００２】
従来のネットワーク機器はブラックボックスであり、外部から負荷分散や片寄等柔軟性に富んだ制御ができない。このため、ネットワークの規模が大きくなると、システムとしての挙動の把握と改善が困難になり、設計や構成変更には多大なコストを伴うことが問題であった。【０００３】
こうした課題を解決するための技術として、ネットワーク機器のパケット転送機能と経路制御機能を分離する手法が考えられている。例えば、パケット転送機能をネットワーク機器、制御機能をネットワーク機器の外部に分離した制御装置が担当することで、制御が容易になり柔軟性に富んだネットワークを構築することが可能になる。【０００４】
［ＣＵ分離型ネットワークの説明］
機能を分離したネットワークシステムの１つとして、外部の制御装置（コントロールプレーン）からノード装置（ユーザプレーン）を制御するＣＵ（Ｃ：コントロールプレーン／Ｕ：ユーザプレーン）分離型ネットワークが提案されている。【０００５】
ＣＵ分離型ネットワークの一例として、コントローラからスイッチを制御してネットワークの経路制御を行うオープンフロー（ＯｐｅｎＦｌｏｗ）技術を利用したオープンフローネットワークが挙げられる。オープンフロー技術の詳細については、非特許文献１に記載されている。なお、オープンフローネットワークは一例に過ぎない。【０００６】
［オープンフローネットワークの説明］
オープンフローネットワークでは、オープンフローコントローラ（ＯＦＣ：ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）等の制御装置が、オープンフロースイッチ（ＯＦＳ：ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）等のノード装置の経路制御に関するフローテーブル（Ｆｌｏｗ  ｔａｂｌｅ）を操作することにより、ノード装置の挙動を制御する。【０００７】
以下、記載の簡略化のため、オープンフローコントローラ（ＯＦＣ）を「コントローラ（ＯＦＣ）」と表記し、オープンフロースイッチ（ＯＦＳ）を「スイッチ（ＯＦＳ）」と表記する。【０００８】
コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）の間は、専用線やＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）等により保護された通信路である「セキュアチャンネル」（Ｓｅｃｕｒｅ  Ｃｈａｎｎｅｌ）により接続されている。コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）とは、セキュアチャンネルを介して、オープンフロープロトコル（ＯｐｅｎＦｌｏｗ  Ｐｒｏｔｏｃｏｌ）に則った（準拠した）オープンフローメッセージ（ＯｐｅｎＦｌｏｗ  Ｍｅｓｓａｇｅ）を送受信する。【０００９】
オープンフローネットワークにおけるスイッチ（ＯＦＳ）とは、オープンフローネットワークを形成し、コントローラ（ＯＦＣ）の制御下にあるエッジスイッチ及びコアスイッチのことである。オープンフローネットワークにおける入力側エッジスイッチ（Ｉｎｇｒｅｓｓ）でのパケット（ｐａｃｋｅｔ）の受信から出力側エッジスイッチ（Ｅｇｒｅｓｓ）での送信までのパケットの一連の流れをフロー（Ｆｌｏｗ）と呼ぶ。【００１０】
パケットは、フレーム（ｆｒａｍｅ）と読み替えても良い。パケットとフレームの違いは、プロトコルが扱うデータの単位（ＰＤＵ：Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔ）の違いに過ぎない。パケットは、「ＴＣＰ／ＩＰ」（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のＰＤＵである。一方、フレームは、「Ｅｔｈｅｒｎｅｔ（登録商標）」のＰＤＵである。【００１１】
フローテーブルとは、所定のマッチ条件（ルール）に適合するパケット（通信データ）に対して行うべき所定の動作（アクション）を定義したフローエントリ（Ｆｌｏｗ  ｅｎｔｒｙ）が登録されたテーブルである。【００１２】
フローエントリのルールは、パケットの各プロトコル階層のヘッダ領域（フィールド）に含まれる宛先アドレス（Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）、送信元アドレス（Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）、宛先ポート（Ｄｅｓｔｉｎａｔｉｏｎ  Ｐｏｒｔ）、送信元ポート（Ｓｏｕｒｃｅ  Ｐｏｒｔ）のいずれか又は全てを用いた様々な組み合わせにより定義され、区別可能である。なお、上記のアドレスには、ＭＡＣアドレス（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ａｄｄｒｅｓｓ）やＩＰアドレス（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ａｄｄｒｅｓｓ）を含むものとする。また、上記に加えて、入口ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）の情報も、フローエントリのルールとして使用可能である。また、フローエントリのルールとして、フローを示すパケットのヘッダ領域の値の一部（又は全部）を、正規表現やワイルドカード「＊」等で表現したものを設定することもできる。【００１３】
フローエントリのアクションは、「特定のポートに出力する」、「廃棄する」、「ヘッダを書き換える」といった動作を示す。例えば、スイッチ（ＯＦＳ）は、フローエントリのアクションに出力ポートの識別情報（出力ポート番号等）が示されていれば、これに該当するポートにパケットを出力し、出力ポートの識別情報が示されていなければ、パケットを廃棄する。或いは、スイッチ（ＯＦＳ）は、フローエントリのアクションにヘッダ情報が示されていれば、当該ヘッダ情報に基づいてパケットのヘッダを書き換える。【００１４】
オープンフローネットワークにおけるスイッチ（ＯＦＳ）は、フローエントリのルールに適合するパケット群（パケット系列）に対して、フローエントリのアクションを実行する。【００１５】
［既存のオープンフローネットワークにおける問題］
オープンフローネットワークにおいて、スイッチ（ＯＦＳ）が持つフローエントリの数が設定可能な数を示す上限値を超えると、それ以上、フローエントリを設定することができない。その結果、適切なパケット処理を行うことができない事態が発生し、パケットの欠落、もしくは全てのパケットがコントローラ（ＯＦＣ）を経由することによる遅延が発生する。【００１６】
先に説明したように、オープンフローネットワークは、パケットをヘッダ（Ｌ１〜Ｌ４）の各フィールドの組み合わせで表現したフローとして扱う。各フィールドは、ワイルドカードを用いて集約可能である。フローの管理は、スイッチ（ＯＦＳ）が備えるフローテーブルで行う。フローテーブルは、フローエントリの集合である。フローエントリは、整合情報（ルール）、集計情報（統計情報）、指示情報（アクション）の組で示される。フローテーブルは、パケットが集約される前提で十分な容量が確保されているが、Ｗｅｂサービスのロードバランシング等の用途では、送信元のＩＰアドレスや宛先のポート番号でパケットを分別する必要があり、その結果、管理するフローが散逸することによって、フローテーブルが溢れてしまう可能性がある。【００１７】
なお、オープンフローネットワークにおいて、スイッチ（ＯＦＳ）は、自身のフローエントリに関連付けられた２つのタイムアウト時間の組み合わせに従って、そのフローエントリを削除する。１つは、指定した時間が経過するとフローエントリを削除するタイムアウトである。もう１つは指定した時間内にパケットのマッチがない場合にフローエントリを削除するタイムアウトである。したがって、フローテーブルに空きがなくなった場合は、いずれかのタイムアウトで空きができるまで新規フローエントリが追加されることはなく、その間、フローテーブルにマッチするフローエントリがないパケットは、予め指定されたルールに従って、廃棄されるかコントローラ（ＯＦＣ）に指示を仰ぐかのいずれかとなる。【００１８】
スイッチ（ＯＦＳ）として利用可能な既存のネットワーク機器の１つであるルータにおいて、こうした課題を解決する技術が、特許文献１（特開２００１−２４４９６４号公報）に開示されている。特許文献１においては、複数のルータを管理するネットワーク管理装置が、メモリ負荷等が高いルータを回避する経路を計算し、各ルータの経路テーブルを設定する。しかし、ルータの経路テーブルは、送信元と宛先のＩＰアドレス、すなわちＬ３相当の情報で構成されており、オープンフローネットワークのように粒度の高いパケットの制御はできない。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開２００１−２４４９６４号公報
【非特許文献】
【００２０】
【非特許文献１】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｖｅｒｓｉｏｎ  １．１．０  Ｉｍｐｌｅｍｅｎｔｅｄ”，［ｏｎｌｉｎｅ］，Ｆｅｂｒｕａｒｙ  ２８，  ２０１１，インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．１．０．ｐｄｆ）
【発明の概要】
【００２１】
本発明の目的は、オープンフローネットワーク等の機能分離型ネットワークにおいて、パケット処理のルールに関するフローエントリの管理領域枯渇に伴う性能劣化やパケット欠落を防止するネットワークシステムを提供することである。
【００２２】
本発明に係るネットワークシステムは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、フローエントリを、スイッチのフローテーブルに設定するコントローラとを含む。スイッチは、自身のフローテーブルの空き状況をコントローラに通知する。コントローラは、スイッチのフローテーブルの空き状況を考慮して経路計算を行い、スイッチのフローテーブルの使用率を改善する。
【００２３】
本発明に係るリソース使用率改善方法では、スイッチは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う。また、コントローラは、フローエントリを、スイッチのフローテーブルに設定する。このとき、スイッチは、自身のフローテーブルの空き状況をコントローラに通知する。また、コントローラは、スイッチのフローテーブルの空き状況を考慮して経路計算を行い、スイッチのフローテーブルの使用率を改善する。
【００２４】
本発明に係るプログラムは、上記のリソース使用率改善方法における処理を、スイッチやコントローラに実行させるためのプログラムである。なお、本発明に係るプログラムは、記憶装置や記憶媒体に格納することが可能である。
【００２５】
オープンフローネットワーク等の機能分離型ネットワークにおいて、パケット処理のルールに関するフローエントリの管理領域枯渇に伴う性能劣化やパケット欠落を防止する。
【図面の簡単な説明】
【００２６】
【図１】図１は、本発明の第１実施形態に係るネットワークシステムの構成例を示す図である。
【図２】図２は、本発明の第１実施形態におけるフローテーブルの空き状況の通知時の処理の流れを示すフローチャートである。
【図３】図３は、本発明の第１実施形態におけるファーストパケット到着時の処理の流れを示すフローチャートである。
【図４】図４は、本発明の第２実施形態に係るネットワークシステムの構成例を示す図である。
【図５】図５は、本発明の第２実施形態におけるフローテーブルの空き状況の通知時の処理の流れを示すフローチャートである。
【図６】図６は、本発明の第２実施形態におけるファーストパケット到着時の処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２７】
本発明は、ＣＵ分離型ネットワークを対象としている。ここでは、ＣＵ分離型ネットワークの１つであるオープンフローネットワークを例に説明する。但し、実際には、オープンフローネットワークに限定されない。
【００２８】
＜第１実施形態＞
以下に、本発明の第１実施形態について添付図面を参照して説明する。
【００２９】
［システム構成］
最初に、図１を参照して、本発明に係るネットワークシステムの構成例について説明する。
【００３０】
本発明に係るネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０を含む。
【００３１】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０を管理する。
【００３２】
スイッチ（ＯＦＳ）２０は、ネットワークを構成する。
【００３３】
コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間は、専用線やＳＳＬ（ＳｅｃｕｒｅＳｏｃｋｅｔＬａｙｅｒ）等により保護された通信路である「セキュアチャンネル」で接続されている。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０は、セキュアチャンネルを経由し、オープンフロープロトコルに則ったオープンフローメッセージ１００を用いて通信を行う。
【００３４】
また、スイッチ（ＯＦＳ）２０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワークを介して、隣接するスイッチ（ＯＦＳ）２０に接続されている。更に、スイッチ（ＯＦＳ）２０は、自身がエッジスイッチに該当する場合、ホスト（クライアントやサーバ）、或いは、オープンフローに未対応のネットワーク機器等と接続可能である。
【００３５】
［コントローラ（ＯＦＣ）の構成］
次に、コントローラ（ＯＦＣ）１０の構成例について説明する。
【００３６】
コントローラ（ＯＦＣ）１０は、ネットワーク管理部１１と、経路計算部１２と、通信処理部１３を備える。
【００３７】
ネットワーク管理部１１は、スイッチ（ＯＦＳ）２０により構成されるネットワークに関する情報を管理する。
【００３８】
経路計算部１２は、ネットワーク管理部１１により管理されている情報を基に、スイッチ（ＯＦＳ）２０から受信したパケットの経路（通信経路）を計算する。
【００３９】
通信処理部１３は、セキュアチャンネルを介して、スイッチ（ＯＦＳ）２０とオープンフローメッセージの送受信を行う。また、通信処理部１３は、計算の結果として得られた経路を基に、フローエントリを作成し、フローエントリをスイッチ（ＯＦＳ）２０に設定するためのオープンフローメッセージを作成する。或いは、スイッチ（ＯＦＳ）２０から、フローエントリの変更等に関するオープンフローメッセージを受信し、ネットワーク管理部１１により管理されている情報の変更等を行う。
【００４０】
［ネットワーク管理部の詳細］
次に、ネットワーク管理部１１の詳細について説明する。
【００４１】
ネットワーク管理部１１は、トポロジ管理テーブル１１１と、スイッチ（ＯＦＳ）管理テーブル１１２と、経路管理テーブル１１３と、フロー管理テーブル１１４を保持する。
【００４２】
トポロジ管理テーブル１１１は、スイッチ（ＯＦＳ）同士の接続状況を示すトポロジ情報（Ｎｅｔｗｏｒｋ  ｔｏｐｏｌｏｇｙ）の集合である。ここでは、経路計算部１２は、トポロジ管理テーブル１１１に含まれるトポロジ情報を基に、最適な経路を計算する。
【００４３】
スイッチ（ＯＦＳ）管理テーブル１１２は、コントローラ（ＯＦＣ）１０が管理するスイッチ（ＯＦＳ）２０の状態を管理する。ここでは、「スイッチ（ＯＦＳ）の状態」とは、フローテーブルの空き状況を指す。フローテーブルの空き状況とは、例えば、全フローエントリ数に占める空きフローエントリ数の割合を指す。
【００４４】
経路管理テーブル１１３は、経路内に含まれるスイッチ（ＯＦＳ）のリストを管理する。
【００４５】
フロー管理テーブル１１４は、コントローラ（ＯＦＣ）１０の管理下にある（管理対象の）全てのスイッチ（ＯＦＳ）２０のフローテーブルに設定されたフローエントリに関する情報を管理する。例えば、全てのスイッチ（ＯＦＳ）２０のフローテーブルのマスターテーブルを管理する。
【００４６】
［スイッチ（ＯＦＳ）管理テーブルの詳細］
次に、スイッチ（ＯＦＳ）管理テーブル１１２の詳細について説明する。
【００４７】
スイッチ（ＯＦＳ）管理テーブル１１２は、スイッチ（ＯＦＳ）状態情報の集合である。スイッチ（ＯＦＳ）状態情報は、スイッチ（ＯＦＳ）ＩＤ１１２１と、スイッチ状態（ＯＦＳ）１１２２の組で示される。
【００４８】
スイッチ（ＯＦＳ）ＩＤ１１２１は、スイッチ（ＯＦＳ）２０を識別するための情報である。スイッチ状態（ＯＦＳ）１１２２は、当該スイッチ（ＯＦＳ）２０のフローテーブルの空き状況等を示す情報である。
【００４９】
［経路管理テーブルの詳細］
次に、経路管理テーブル１１３の詳細について説明する。
【００５０】
経路管理テーブル１１３は、経路管理情報の集合である。経路管理情報は、経路ＩＤ１１３１と、スイッチ（ＯＦＳ）リスト１１３２の組で示される。
【００５１】
経路ＩＤ１１３１は、経路計算の結果として得られた経路を識別するための情報である。スイッチ（ＯＦＳ）リスト１１３２は、経路上のスイッチ（ＯＦＳ）２０を示すリストである。
【００５２】
［フロー管理テーブルの詳細］
次に、フロー管理テーブル１１４の詳細について説明する。
【００５３】
フロー管理テーブル１１４は、フロー管理情報の集合である。フロー管理情報は、フローＩＤ１１４１と、経路ＩＤ１１４２と、スイッチ（ＯＦＳ）ＩＤ１１４３の組で示される。
【００５４】
フローＩＤ１１４１は、スイッチ（ＯＦＳ）２０に設定したフローエントリを識別するための情報である。経路ＩＤ１１４２は、当該フローエントリの根拠となった経路を識別するための情報である。スイッチ（ＯＦＳ）ＩＤ１１４３は、当該フローエントリが設定されたスイッチ（ＯＦＳ）２０を識別するための情報である。
【００５５】
［スイッチ（ＯＦＳ）の構成］
次に、スイッチ（ＯＦＳ）２０の構成例について説明する。
【００５６】
スイッチ（ＯＦＳ）２０は、オープンフロー処理部２１と、フローテーブル管理部２２を含む。
【００５７】
オープンフロー処理部２１は、受信したパケットに対する処理を行う。また、オープンフロー処理部２１は、セキュアチャンネルを介して、コントローラ（ＯＦＣ）１０とオープンフローメッセージの送受信を行う。例えば、オープンフロー処理部２１は、パケットを受信した際、当該パケットがスイッチ（ＯＦＳ）２０のフローテーブルに含まれるフローエントリとマッチするか確認する。マッチしない場合、セキュアチャンネルを介して、コントローラ（ＯＦＣ）１０に、当該パケットの経路計算とフローエントリの設定を要求するためのオープンフローメッセージを送信し、応答としてフローエントリを設定するためのオープンフローメッセージを受信する。マッチする場合、当該パケットに対して、当該フローエントリに指定されたアクションを実行する。
【００５８】
フローテーブル管理部２２は、フローテーブル２２１を保持する。フローテーブル２２１は、スイッチ（ＯＦＳ）２０のフローテーブルである。ここでは、フローテーブル管理部２２は、フローテーブル２２１に含まれるフローエントリを管理（追加／更新／削除）する。
【００５９】
［フローテーブルの詳細］
次に、フローテーブル２２１の詳細について説明する。
【００６０】
フローテーブル２２１は、フローエントリの集合である。フローエントリは、整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１と、集計情報（Ｃｏｕｎｔｅｒｓ）２２１２と、指示情報（Ｉｎｓｔｒｕｃｔｉｏｎｓ）２２１３の組で示される。
【００６１】
整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１は、当該フローエントリのルールに相当する情報であり、スイッチ（ＯＦＳ）２０が受信したパケットを照合・識別するための情報である。整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１は、パケットの入力ポートとパケットのヘッダ情報のフィールドを用いて指定される。整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１の各フィールドは、ワイルドカードで集約可能である。
【００６２】
集計情報（Ｃｏｕｎｔｅｒｓ）２２１２は、当該フローエントリにマッチしたパケットの数を記録する統計情報である。
【００６３】
指示情報（Ｉｎｓｔｒｕｃｔｉｏｎｓ）２２１３は、当該フローエントリのアクションに相当する情報であり、受信したパケットに対する処理を示す情報である。パケットに対する処理の例として、パケットを出力ポートとなる物理ポートや仮想ポートに転送する転送処理（Ｓｅｎｄ）や、パケットを廃棄する廃棄処理（Ｄｒｏｐ）等がある。
【００６４】
［整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）の詳細］
次に、整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１の詳細について説明する。
【００６５】
整合情報（Ｍａｔｃｈ  Ｆｉｅｌｄｓ）２２１１は、入力ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）、メタデータ（Ｍｅｔａ  ｄａｔａ）、送信元ＭＡＣアドレス（Ｅｔｈｅｒ  ｓｒｃ）、送信先ＭＡＣアドレス（Ｅｔｈｅｒ  ｄｓｔ）、イーサタイプ（Ｅｔｈｅｒ  ｔｙｐｅ）、仮想ＬＡＮ識別子（ＶＬＡＮ  ｉｄ）、仮想ＬＡＮ優先度（ＶＬＡＮ  ｐｒｉｏｒｉｔｙ）、ＭＰＬＳラベル（ＭＰＬＳ  ｌａｂｅｌ）、ＭＰＬＳトラフィッククラス（ＭＰＬＳ  ｔｒａｆｆｉｃ  ｃｌａｓｓ）、送信元ＩＰアドレス（ＩＰ  ｓｒｃ）、送信先ＩＰアドレス（ＩＰ  ｄｓｔ）、ＩＰプロトコル（ＩＰ  Ｐｒｏｔｏｃｏｌ）、ＩＰサービスタイプ（ＩＰ  ＴｏＳ  ｂｉｔｓ）、送信元ポート（ＴＣＰ／ＵＤＰ  ｓｒｃ  Ｐｏｒｔ）、及び送信先ポート（ＴＣＰ／ＵＤＰ  ｄｓｔ  Ｐｏｒｔ）等の情報を用いて指定される。
【００６６】
入力ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）は、最初に本パケットを受信したポートを示す。メタデータ（Ｍｅｔａ  ｄａｔａ）は、本パケットに関する情報を示す。送信元ＭＡＣアドレス（Ｅｔｈｅｒ  ｓｒｃ）、送信先ＭＡＣアドレス（Ｅｔｈｅｒ  ｄｓｔ）、イーサタイプ（Ｅｔｈｅｒ  ｔｙｐｅ）は、それぞれ、送信元ＭＡＣアドレス、送信先ＭＡＣアドレス、上位層のプロトコルを識別するための１６ビットの情報を示す。ＭＰＬＳ（Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ）は、ラベルスイッチング方式を用いたパケット転送技術である。ＭＰＬＳラベル（ＭＰＬＳ  ｌａｂｅｌ）は、ＩＰヘッダの代わりに利用される固定長の識別標識を示す。ＭＰＬＳトラフィッククラス（ＭＰＬＳ  ｔｒａｆｆｉｃ  ｃｌａｓｓ）は、異なるクラス又は優先順位の特定と識別を行うための情報を示す。送信元ＩＰアドレス（ＩＰ  ｓｒｃ）、送信先ＩＰアドレス（ＩＰ  ｄｓｔ）、ＩＰプロトコル（ＩＰ  Ｐｒｏｔｏｃｏｌ）、ＩＰサービスタイプ（ＩＰ  ＴｏＳ  ｂｉｔｓ）は、それぞれ、送信元ＩＰアドレス、送信先ＩＰアドレス、ＩＰプロトコル番号、ＴＯＳオクテット（ＩＰパケットのヘッダ中に含まれる８ビットのオクテット部分）を示す。ＴＯＳオクテットは、通信のサービス品質（ＱｏＳ）を制御する目的で、処理の優先度を指定するために使う。送信元ポート（ＴＣＰ／ＵＤＰ  ｓｒｃ  Ｐｏｒｔ）、及び送信先ポート（ＴＣＰ／ＵＤＰ  ｄｓｔ  Ｐｏｒｔ）は、それぞれ、送信元ポート番号、送信先ポート番号を示す。
【００６７】
［オープンフローメッセージの詳細］
次に、オープンフローメッセージ１００の詳細について説明する。
【００６８】
オープンフローメッセージ１００は、スイッチ制御メッセージ（Ｃｏｎｔｒｏｌｌｅｒ  ｔｏ  Ｓｗｉｔｃｈ）１０１、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２、対称メッセージ（ｓｙｍｍｅｔｒｉｃ）１０３の３種類のメッセージに大別できる。
【００６９】
スイッチ制御メッセージ（Ｃｏｎｔｒｏｌｌｅｒ  ｔｏ  Ｓｗｉｔｃｈ）１０１は、コントローラ（ＯＦＣ）１０からスイッチ（ＯＦＳ）２０へ向かうメッセージである。例えば、スイッチ制御メッセージ（Ｃｏｎｔｒｏｌｌｅｒ  ｔｏ  Ｓｗｉｔｃｈ）１０１は、スイッチ（ＯＦＳ）２０の状態の問い合わせ（Ｍｏｄｉｆｙ−Ｓｔａｔｅ／Ｒｅａｄ−Ｓｔａｔｅ）、フローテーブルの変更（Ｐａｃｋｅｔ−ｏｕｔ）等に関するメッセージである。
【００７０】
非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２は、スイッチ（ＯＦＳ）２０からコントローラ（ＯＦＣ）１０に向かうメッセージである。例えば、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２は、ファーストパケット到着通知（Ｐａｃｋｅｔ−ｉｎ）、フローエントリ削除通知（Ｆｌｏｗ−Ｒｅｍｏｖｅｄ）、スイッチ制御メッセージ（Ｃｏｎｔｒｏｌｌｅｒ  ｔｏ  Ｓｗｉｔｃｈ）１０１の実行結果の通知（Ｐｏｒｔ−ｓｔａｔｕｓ／Ｅｒｒｏｒ）等に関するメッセージである。なお、ファーストパケットとは、スイッチ（ＯＦＳ）２０のフローテーブルにマッチするフローエントリが存在しないパケットのことである。
【００７１】
対称メッセージ（ｓｙｍｍｅｔｒｉｃ）１０３は、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間の通信路確立等のネゴシエーション（通信条件に関する情報交換）に使用される同期型のメッセージである。
【００７２】
［フローテーブルの空き状況の通知］
次に、本発明の要点である「フローテーブルの空き状況の通知」について説明する。
【００７３】
本発明では、スイッチ（ＯＦＳ）２０は、オープンフローメッセージ１００を利用して、自身のフローテーブルの空き状況をコントローラ（ＯＦＣ）１０に通知する。
【００７４】
具体的には、スイッチ（ＯＦＳ）２０のオープンフロー処理部２１が、オープンフローメッセージ１００として、スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況をコントローラ（ＯＦＣ）１０に通知するためのメッセージ（フローテーブルの空き状況通知メッセージ）を送信する。
【００７５】
このメッセージの要件として、フローテーブル２２１の空き状況を記録可能であることが挙げられる。
【００７６】
前述したように、オープンフローメッセージ１００において、コントローラ（ＯＦＣ）−スイッチ（ＯＦＳ）間のメッセージは、スイッチ制御メッセージ（Ｃｏｎｔｒｏｌｌｅｒ  ｔｏ  Ｓｗｉｔｃｈ）１０１、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２、対称メッセージ（ｓｙｍｍｅｔｒｉｃ）１０３の３種類に大別できる。
【００７７】
本発明の用途に適したメッセージは、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２である。
【００７８】
フローテーブル２２１の空き状況の通知用のメッセージとして、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２において、「既存のメッセージの拡張」や、「新たなメッセージの追加」を行うことが考えられる。
【００７９】
（１）既存のメッセージの拡張
フローテーブル２２１の空き状況の通知用のメッセージとして、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２の既存のメッセージを拡張する。ここでは、既存のメッセージとしてエラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）を利用する。
【００８０】
既存のメッセージとしてエラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）を利用する理由は、次の通りである。まず、エラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）は、タイプ領域（ｔｙｐｅ  ｆｉｅｌｄ）、コード領域（ｃｏｄｅ  ｆｉｅｌｄ）、データ領域（ｄａｔａ  ｆｉｅｌｄ）の組を含んでおり（各領域を有しており）、その構造上、フローテーブルの空き状況を記録可能である。また、フローテーブルを修正した際の結果として、空き状況を通知できる。
【００８１】
例えば、エラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）を利用する場合、タイプ領域（ｔｙｐｅ  ｆｉｅｌｄ）にリソース使用状況を記録し、コード領域（ｃｏｄｅ  ｆｉｅｌｄ）にフローテーブルを記録し、データ領域（ｄａｔａ  ｆｉｅｌｄ）に空き状況を記録すること等が考えられる。
【００８２】
但し、フローテーブルの空き状況自体はエラーではないため、エラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）のメッセージの意味合いに「ずれ」（齟齬）が生じる。メッセージの意味合いの「ずれ」を回避する場合、既存のメッセージであるエラーメッセージ（Ｅｒｒｏｒ  ｍｅｓｓａｇｅ）を拡張して利用するのではなく、新たなメッセージを追加する。
【００８３】
（２）新たなメッセージの追加
フローテーブル２２１の空き状況の通知用のメッセージとして、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２に新たなメッセージを追加する。
【００８４】
新たなメッセージを追加する場合、スイッチ（ＯＦＳ）２０からコントローラ（ＯＦＣ）１０にリソースの使用状況を通知するためのメッセージを、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２として新たに定義する。
【００８５】
コントローラ（ＯＦＣ）１０の通信処理部１３や、スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、セキュアチャンネルを介して、上記のような非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を送受信する。
【００８６】
スイッチ（ＯＦＳ）２０は、上記のような非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を送信し、コントローラ（ＯＦＣ）１０に対して、自身のフローテーブル２２１の空き状況を通知する。コントローラ（ＯＦＣ）１０は、上記のような非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を受信した際、メッセージを解析し、スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況を認識・把握し、スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況に関する情報を内部で管理する。
【００８７】
また、コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０からフローテーブルの空き状況を通知された場合、フローテーブルの空きを予め設定されている閾値Ａ（第１の閾値）と比較し、フローテーブルの空きがその閾値Ａ（第１の閾値）を下回るようであれば、そのフローエントリ数が減少するような代替経路を設定した上で、元の経路を削除する。すなわち、コントローラ（ＯＦＣ）１０の経路計算部１２は、当該スイッチ（ＯＦＳ）２０を経由する経路について、スイッチ（ＯＦＳ）２０を経由しない代替経路を計算し、代替経路上のスイッチ（ＯＦＳ）２０のフローテーブル２２１にフローエントリを追加すると共に、元の経路上のスイッチ（ＯＦＳ）２０のフローテーブル２２１からフローエントリを削除する。これにより、強制的にスイッチ（ＯＦＳ）２０のフローテーブルの空き状況を改善することができる。
【００８８】
また、コントローラ（ＯＦＣ）１０は、ファーストパケット到着通知を受けて新たな経路を計算する際に、スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況を考慮して（空き状況に応じて）新たな経路を計算する。すなわち、コントローラ（ＯＦＣ）１０は、フローテーブル２２１の空きが予め設定している閾値Ｂ（第２の閾値）を下回るスイッチ（ＯＦＳ）を除いたトポロジを基に、経路を計算する。これにより、スイッチ（ＯＦＳ）２０のフローエントリの増加を抑制することが可能となる。
【００８９】
「フローテーブルの空きが閾値を下回っている」とは、フローテーブルに十分な容量が確保されていない状況を指す。例えば、フローテーブルに設定されているフローエントリ数が規定値を超過している状況を指す。
【００９０】
閾値Ａ（第１の閾値）と閾値Ｂ（第２の閾値）は、同じ値であっても良い。
【００９１】
また、コントローラ（ＯＦＣ）１０は、Ｌ１〜Ｌ４等のフローテーブルの情報を基に、経路の分散を行うことができる。例えば、同一の送信元ＩＰアドレスと送信先ＩＰアドレス（Ｌ３相当）であっても、ポート情報（Ｌ４相当）や、フローテーブルのフローエントリ毎に管理されている統計情報を基に、より細かい制御を実施可能である。
【００９２】
［フローテーブルの空き状況の通知時の処理］
図２を参照して、スイッチ（ＯＦＳ）２０がコントローラ（ＯＦＣ）１０にフローテーブル２２１の空き状況を通知する際の処理の流れについて説明する。
【００９３】
（１）ステップＳ１０１
スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、常時／定期的に／コントローラ（ＯＦＣ）１０からの指示・要求に応じて、フローテーブル管理部２２のフローテーブル２２１を監視し、フローテーブル２２１の空き状況を確認する。
【００９４】
（２）ステップＳ１０２
スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、フローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を送信して、コントローラ（ＯＦＣ）１０に、自身のフローテーブル２２１の空き状況を通知する。フローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２は、フローテーブルの空き状況通知メッセージである。
【００９５】
（３）ステップＳ１０３
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０から、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を受信する。
【００９６】
（４）ステップＳ１０４
コントローラ（ＯＦＣ）１０の通信処理部１３は、受信した非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を解析して、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況に関する情報を抽出・取得し、その情報をネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２に記録する。
【００９７】
（５）ステップＳ１０５
コントローラ（ＯＦＣ）１０の経路計算部１２は、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を参照し、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空きを予め設定されている閾値Ａ（第１の閾値）と比較し、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っているか確認する。なお、コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っていない場合（ステップＳ１０５でＮｏ）、フローテーブル２２１に十分な容量が確保されており、影響がないため、処理を終了する。
【００９８】
（６）ステップＳ１０６
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っている場合（ステップＳ１０５でＹｅｓ）、ネットワーク管理部１１の経路管理テーブル１１３を参照し、当該スイッチ（ＯＦＳ）２０を経由する経路を検索する。なお、コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１のフローエントリ毎の統計情報や、Ｌ１〜Ｌ４情報に基づいて、当該スイッチ（ＯＦＳ）２０を経由する経路を検索することが可能である。
【００９９】
（７）ステップＳ１０７
コントローラ（ＯＦＣ）１０の経路計算部１２は、当該スイッチ（ＯＦＳ）２０を経由する経路が存在するか確認する。なお、コントローラ（ＯＦＣ）１０の経路計算部１２は、当該スイッチ（ＯＦＳ）２０を経由する経路が存在しない場合（ステップＳ１０７でＮｏ）、当該スイッチ（ＯＦＳ）２０が既存の経路に含まれておらず、影響がないため、処理を終了する。
【０１００】
（８）ステップＳ１０８
コントローラ（ＯＦＣ）１０の経路計算部１２は、当該スイッチ（ＯＦＳ）２０を経由する経路が存在する場合（ステップＳ１０７でＹｅｓ）、ネットワーク管理部１１のトポロジ管理テーブル１１１を参照し、当該スイッチ（ＯＦＳ）２０を通るフローが他のスイッチ（ＯＦＳ）２０を経由するように、当該スイッチ（ＯＦＳ）２０を除外したトポロジ情報を基に、経路を再計算する。
【０１０１】
（９）ステップＳ１０９
コントローラ（ＯＦＣ）１０の経路計算部１２は、経路の算出に成功したか確認する。なお、コントローラ（ＯＦＣ）１０の経路計算部１２は、経路の算出に失敗した場合（ステップＳ１０９でＮｏ）、処理を終了する。例えば、当該スイッチ（ＯＦＳ）２０がエッジスイッチである場合、除外すれば、始点となるスイッチ（ＯＦＳ）２０が存在しないため、経路の算出に失敗する。
【０１０２】
（１０）ステップＳ１１０
コントローラ（ＯＦＣ）１０の通信処理部１３は、経路の算出に成功した場合（ステップＳ１０９でＹｅｓ）、新たな経路上の全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル変更メッセージ「Ｆｌｏｗ＿ｍｏｄ」（Ｆｌｏｗ  Ｔａｂｌｅ  Ｍｏｄｉｆｉｃａｔｉｏｎ  Ｍｅｓｓａｇｅｓ）の「ａｄｄ／ｍｏｄｉｆｙ」を送信し、新たな経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１に新たなフローエントリを設定する。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３は、経路の末尾（送信先側）のスイッチ（ＯＦＳ）２０から順にフローエントリを設定する。その理由は、経路の先頭（送信元側）のスイッチ（ＯＦＳ）２０から順にフローエントリを設定すると、経路上の全てのスイッチ（ＯＦＳ）２０へのフローエントリの設定が完了する前に、パケットの転送等が開始されてしまうからである。
【０１０３】
（１１）ステップＳ１１１
更に、コントローラ（ＯＦＣ）１０の通信処理部１３は、元の経路上の全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル変更メッセージ「Ｆｌｏｗ＿ｍｏｄ」の「ｄｅｌｅｔｅ」を送信し、元の経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１から、元のフローエントリを削除する。当然、元の経路に含まれていた通知元のスイッチ（ＯＦＳ）２０のフローテーブル２２１からも、元のフローエントリを削除する。これにより、通知元のスイッチ（ＯＦＳ）２０のフローテーブル２２１の空きが増加する。
【０１０４】
なお、実際には、当該経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１に新たなフローエントリを設定する前に、元の経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１から、元のフローエントリを削除しても良い。
【０１０５】
上記の処理を、通知元のスイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況が閾値Ａ（第１の閾値）を上回るまで続けることで、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況を強制的に改善することができる。
【０１０６】
［ファーストパケット到着時の処理］
次に、図３を参照して、ファーストパケット到着時に、コントローラ（ＯＦＣ）１０が、フローの経路を計算する際に、スイッチ（ＯＦＳ）２０のフローテーブル２２１の溢れを抑制する動作について説明する。
【０１０７】
通常、オープンフローネットワークでは、スイッチ（ＯＦＳ）２０は、フローテーブル２２１にマッチするフローエントリが存在しないパケット（ファーストパケット）を受信した際、コントローラ（ＯＦＣ）１０に、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」（ファーストパケット到着通知とパケットヘッダ情報）を送信し、経路計算を要求する。
【０１０８】
（１）ステップＳ２０１
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０から、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」（ファーストパケット到着通知とパケットヘッダ情報）を受信する。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３は、管理下にある全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル２２１の空き状況の通知（フローテーブルの空き状況通知メッセージの送信）を指示・要求しても良い。この場合、コントローラ（ＯＦＣ）１０の通信処理部１３は、フローテーブル２２１の空き状況の通知に応じて、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を更新する。
【０１０９】
（２）ステップＳ２０２
コントローラ（ＯＦＣ）１０の経路計算部１２は、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」を受信した際に、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を参照して、管理下にある全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況を把握する。
【０１１０】
（３）ステップＳ２０３
コントローラ（ＯＦＣ）１０の経路計算部１２は、管理下にある全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１の空きを予め設定されている閾値Ｂ（第２の閾値）と比較し、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在するか確認する。
【０１１１】
（４）ステップＳ２０４
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在しない場合（ステップＳ２０３でＮｏ）、通常通り、全てのトポロジ情報を基に、経路を計算する。
【０１１２】
（５）ステップＳ２０５
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在する場合（ステップＳ２０３でＹｅｓ）、ネットワーク管理部１１のトポロジ管理テーブル１１１を参照し、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０を除外したトポロジ情報を基に、経路の計算を行う。
【０１１３】
（６）ステップＳ２０６
コントローラ（ＯＦＣ）１０の経路計算部１２は、経路の算出に成功したか確認する。
【０１１４】
（７）ステップＳ２０７
コントローラ（ＯＦＣ）１０の経路計算部１２は、経路の算出に失敗した場合（ステップＳ２０６でＮｏ）、除外したスイッチ（ＯＦＳ）２０を含むトポロジ情報を基に、経路を再計算する。例えば、除外したスイッチ（ＯＦＳ）２０がエッジスイッチである場合、除外すれば、始点となるスイッチ（ＯＦＳ）２０が存在しないため、経路の算出に失敗する。この場合、閾値Ｂ（第２の閾値）は、「０」以外の値であると好適である。閾値Ｂ（第２の閾値）が「０」である場合、下回った時点で、除外したスイッチ（ＯＦＳ）２０のフローテーブル２２１の空きが全くない状況となり、新たな経路に係る新たなフローエントリの設定に支障をきたす可能性があるためである。但し、新たな経路に係る新たなフローエントリを設定する前に、元の経路に係る古いフローエントリを削除する場合、フローテーブル２２１の空きが発生するため、閾値Ｂ（第２の閾値）が「０」であっても良い。
【０１１５】
（８）ステップＳ２０８
コントローラ（ＯＦＣ）１０の通信処理部１３は、経路の算出に成功した場合（ステップＳ２０６でＹｅｓ）、又は、経路の再計算後（ステップＳ２０７の後）、或いは、通常の経路の計算後（ステップＳ２０４の後）、新たな経路上の全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル変更メッセージ「Ｆｌｏｗ＿ｍｏｄ」の「ａｄｄ／ｍｏｄｉｆｙ」を送信し、新たな経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１に新たなフローエントリを設定する。
【０１１６】
（９）ステップＳ２０９
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０からの応答メッセージ等に基づいて、新たなフローエントリの設定の完了を確認し、ネットワーク管理部１１の経路管理テーブル１１３とフロー管理テーブル１１４のそれぞれを更新し、新たな経路とそのフローエントリの情報を記録する。
【０１１７】
（１０）ステップＳ２１０
コントローラ（ＯＦＣ）１０の通信処理部１３は、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」の送信元のスイッチ（ＯＦＳ）２０に対して、パケット出力メッセージ「Ｐａｃｋｅｔ＿Ｏｕｔ」（パケット送信指示）を送信し、パケット送信を指示する。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３は、新たな経路に送信元のスイッチ（ＯＦＳ）２０が含まれていない（除外されている）場合、送信元のスイッチ（ＯＦＳ）２０に対して、新たな経路の先頭のスイッチ（ＯＦＳ）２０へパケットを送信するように指示する。
【０１１８】
［本実施形態の効果］
以下に、本実施形態の効果について説明する。
【０１１９】
本実施形態では、オープンフローに代表されるような、制御機能と転送機能が分離されたネットワーク機器で構成されるネットワークにおいて、パケット処理のルールに関するフローエントリを管理するフローテーブルの空き状況を把握した上で、経路及びフローエントリを決定することで、テーブル溢れに起因する性能低下やパケット消失を未然に防止する。
【０１２０】
また、本実施形態では、テーブル溢れが生じた場合、該当するネットワーク機器を経由するフローを他のネットワーク機器に分散させることで、テーブル溢れに起因する性能低下やパケット消失を防止する。
【０１２１】
また、本実施形態では、フローの分散をフローテーブルの情報（統計情報、Ｌ１〜Ｌ４パケットヘッダ情報）に基づいて行うことで、より細やかな負荷分散の制御を実現可能である。
【０１２２】
また、本実施形態では、テーブルの空き状況以外のリソースについて適用することで、リソースの使用状況について柔軟な経路選択を行うことができる。
【０１２３】
スイッチ（ＯＦＳ）がハードウェアスイッチとして実装されている場合、リソースの動的な拡張は非常に困難（或いは不可能）であるため、本実施形態が有効となる。
【０１２４】
＜第２実施形態＞
以下に、本発明の第２実施形態について添付図面を参照して説明する。
【０１２５】
スイッチ（ＯＦＳ）が仮想スイッチのようにソフトウェアとして実装されている場合、リソースの拡張が容易である特性を利用して、フローテーブルに空きがない場合の動作を定義することができる。
【０１２６】
本実施形態では、図２のステップＳ１０５において、スイッチ（ＯＦＳ）のフローテーブルの空きが閾値Ａ（第１の閾値）を下回っている場合に、新たな仮想スイッチのインスタンスを作成し、既存の仮想スイッチとブリッジ（橋渡し、結び付け）することにより、フローテーブルを拡張する。すなわち、既存の仮想スイッチと新たな仮想スイッチを連携させることで、新たな仮想スイッチのフローテーブルの分だけ、フローテーブルの容量が増加する。
【０１２７】
コントローラ（ＯＦＣ）は、スイッチ（ＯＦＳ）が仮想スイッチのようにソフトウェアとして動作しているハードウェア（ネットワーク機器等の物理マシン）のリソース（ＣＰＵ、メモリ、ＮＩＣ等）の使用状況を見て、このようなフローテーブルの拡張を実施するか否か判断する。
【０１２８】
［システム構成］
図４を参照して、本実施形態に係るネットワークシステムの構成例について説明する。
【０１２９】
本実施形態に係るネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０を含む。
【０１３０】
本実施形態では、スイッチ（ＯＦＳ）２０は、仮想スイッチであるものとする。なお、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０の内部構成については、基本的に、第１実施形態と同じである。
【０１３１】
［フローテーブルの空き状況の通知時の処理］
図５を参照して、スイッチ（ＯＦＳ）２０が仮想スイッチである場合におけるフローテーブルの空き状況の通知時の処理について説明する。
【０１３２】
（１）ステップＳ３０１
スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、常時／定期的に／コントローラ（ＯＦＣ）１０からの指示・要求に応じて、フローテーブル管理部２２のフローテーブル２２１を監視し、フローテーブル２２１の空き状況を確認する。
【０１３３】
（２）ステップＳ３０２
スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、フローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を送信して、コントローラ（ＯＦＣ）１０に、自身のフローテーブル２２１の空き状況を通知する。フローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２は、フローテーブルの空き状況通知メッセージである。
【０１３４】
（３）ステップＳ３０３
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０から、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況に関する非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を受信する。
【０１３５】
（４）ステップＳ３０４
コントローラ（ＯＦＣ）１０の通信処理部１３は、受信した非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓ）１０２を解析して、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況に関する情報を抽出・取得し、その情報をネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２に記録する。
【０１３６】
（５）ステップＳ３０５
コントローラ（ＯＦＣ）１０の経路計算部１２は、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を参照し、当該スイッチ（ＯＦＳ）２０のフローテーブル２２１の空きを予め設定されている閾値Ａ（第１の閾値）と比較し、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っているか確認する。なお、コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っていない場合（ステップＳ３０５でＮｏ）、フローテーブル２２１に十分な容量が確保されており、影響がないため、処理を終了する。
【０１３７】
（６）ステップＳ３０６
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ａ（第１の閾値）を下回っている場合（ステップＳ３０５でＹｅｓ）、当該スイッチ（ＯＦＳ）２０が仮想スイッチのようにソフトウェアとして動作しているハードウェアのリソースの使用状況に十分な余裕があるか確認する。なお、リソースの使用状況に十分な余裕がない場合（ステップＳ３０６でＮｏ）、フローテーブルの拡張を断念し、第１実施形態と同様に、当該スイッチ（ＯＦＳ）２０を経由する経路を検索し、経路が存在する場合、当該スイッチ（ＯＦＳ）２０を除外したトポロジ情報を基に、経路を再計算する処理を行う（図２のステップＳ１０６に移行）。或いは、当該スイッチ（ＯＦＳ）２０への新たなフローエントリの設定は不可能であると判断して、そのまま処理を終了するようにしても良い。
【０１３８】
（７）ステップＳ３０７
コントローラ（ＯＦＣ）１０の通信処理部１３は、リソースの使用状況に十分な余裕がある場合（ステップＳ３０６でＹｅｓ）、当該ハードウェアに対して、新たな仮想スイッチのインスタンスを作成し、当該スイッチ（ＯＦＳ）２０（既存の仮想スイッチ）とブリッジするようにする。すなわち、経路上では、新たな仮想スイッチは、当該スイッチ（ＯＦＳ）２０と同一視される。
【０１３９】
なお、コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０が仮想スイッチのようにソフトウェアとして動作しているハードウェアのリソースの使用状況に十分な余裕がある限り、当該ハードウェアに対して、新たな仮想スイッチのインスタンスをいくつ作成しても良い。
【０１４０】
以降、スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、パケットを受信した際、まず自身のフローテーブル２２１を検索し、受信したパケットとマッチするフローエントリが存在しない場合、新たな仮想スイッチのフローテーブル２２１を検索する。新たな仮想スイッチのフローテーブル２２１にも、受信したパケットとマッチするフローエントリが存在しない場合、コントローラ（ＯＦＣ）１０に、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」（ファーストパケット到着通知とパケットヘッダ情報）を送信し、経路計算を要求する。
【０１４１】
また、スイッチ（ＯＦＳ）２０のオープンフロー処理部２１は、当該スイッチ（ＯＦＳ）２０（既存の仮想スイッチ）が経路から除外された場合や、新たな仮想スイッチのフローテーブル２２１が空になった場合、当該スイッチ（ＯＦＳ）２０が仮想スイッチのようにソフトウェアとして動作しているハードウェアに対して、ブリッジしている仮想スイッチの削除要求を行い（新たな仮想スイッチを削除し）、新たな仮想スイッチを削除した旨をコントローラ（ＯＦＣ）１０に通知しても良い。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３が、当該ハードウェアに対して、新たな仮想スイッチを削除するようにしても良い。
【０１４２】
［ファーストパケット到着時の処理］
図６を参照して、スイッチ（ＯＦＳ）２０が仮想スイッチである場合におけるファーストパケット到着時の処理について説明する。
【０１４３】
（１）ステップＳ４０１
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０から、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」（ファーストパケット到着通知とパケットヘッダ情報）を受信する。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３は、管理下にある全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル２２１の空き状況の通知（フローテーブルの空き状況通知メッセージの送信）を指示・要求しても良い。この場合、コントローラ（ＯＦＣ）１０の通信処理部１３は、フローテーブル２２１の空き状況の通知に応じて、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を更新する。
【０１４４】
（２）ステップＳ４０２
コントローラ（ＯＦＣ）１０の経路計算部１２は、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」を受信した際に、ネットワーク管理部１１のスイッチ（ＯＦＳ）管理テーブル１１２を参照して、管理下にある全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１の空き状況を把握する。
【０１４５】
（３）ステップＳ４０３
コントローラ（ＯＦＣ）１０の経路計算部１２は、管理下にある全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１の空きを予め設定されている閾値Ｂ（第２の閾値）と比較し、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在するか確認する。
【０１４６】
（４）ステップＳ４０４
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在する場合（ステップＳ４０３でＹｅｓ）、該当するスイッチ（ＯＦＳ）２０が仮想スイッチのようにソフトウェアとして動作しているハードウェアのリソースの使用状況に十分な余裕があるか確認する。なお、コントローラ（ＯＦＣ）１０の通信処理部１３は、リソースの使用状況に十分な余裕がない場合（ステップＳ４０４でＮｏ）、フローテーブルの拡張を断念し、第１実施形態と同様に、該当するスイッチ（ＯＦＳ）２０を除外したトポロジ情報を基に、経路を再計算する処理を行う（図３のステップＳ２０５に移行）。或いは、該当するスイッチ（ＯＦＳ）２０への新たなフローエントリの設定は不可能であると判断して、そのまま処理を終了するようにしても良い。
【０１４７】
（５）ステップＳ４０５
コントローラ（ＯＦＣ）１０の通信処理部１３は、リソースの使用状況に十分な余裕がある場合（ステップＳ４０４でＹｅｓ）、当該ハードウェアに対して、新たな仮想スイッチのインスタンスを作成し、当該スイッチ（ＯＦＳ）２０（既存の仮想スイッチ）とブリッジするようにする。すなわち、経路上では、新たな仮想スイッチは、当該スイッチ（ＯＦＳ）２０と同一視される。
【０１４８】
（６）ステップＳ４０６
コントローラ（ＯＦＣ）１０の経路計算部１２は、フローテーブル２２１の空きが閾値Ｂ（第２の閾値）を下回っているスイッチ（ＯＦＳ）２０が存在しない場合（ステップＳ４０３でＮｏ）、或いは、新たな仮想スイッチのインスタンスを作成した場合（ステップＳ４０５の後）、通常通り、全てのトポロジ情報を基に、経路を計算する。
【０１４９】
（７）ステップＳ４０７
コントローラ（ＯＦＣ）１０の通信処理部１３は、新たな経路上の全てのスイッチ（ＯＦＳ）２０に対して、フローテーブル変更メッセージ「Ｆｌｏｗ＿ｍｏｄ」の「ａｄｄ／ｍｏｄｉｆｙ」を送信し、新たな経路上の全てのスイッチ（ＯＦＳ）２０のフローテーブル２２１に新たなフローエントリを設定する。
【０１５０】
（８）ステップＳ４０８
コントローラ（ＯＦＣ）１０の通信処理部１３は、スイッチ（ＯＦＳ）２０からの応答メッセージ等に基づいて、新たなフローエントリの設定の完了を確認し、ネットワーク管理部１１の経路管理テーブル１１３とフロー管理テーブル１１４のそれぞれを更新し、新たな経路とそのフローエントリの情報を記録する。
【０１５１】
（９）ステップＳ４０９
コントローラ（ＯＦＣ）１０の通信処理部１３は、パケット入力メッセージ「Ｐａｃｋｅｔ＿Ｉｎ」の送信元のスイッチ（ＯＦＳ）２０に対して、パケット出力メッセージ「Ｐａｃｋｅｔ＿Ｏｕｔ」（パケット送信指示）を送信し、パケット送信を指示する。このとき、コントローラ（ＯＦＣ）１０の通信処理部１３は、新たな経路に送信元のスイッチ（ＯＦＳ）２０が含まれていない（除外されている）場合、送信元のスイッチ（ＯＦＳ）２０に対して、新たな経路の先頭のスイッチ（ＯＦＳ）２０へパケットを送信するように指示する。
【０１５２】
［本実施形態の効果］
以下に、本実施形態の効果について説明する。
【０１５３】
本実施形態では、経路の再計算、新たなフローエントリの設定、古いフローエントリの削除等を行うことなく、フローテーブルの溢れを抑制することができる。そのため、第１実施形態と比べて、コントローラ（ＯＦＣ）の負担（リソース消費量）を軽減することができる。
【０１５４】
＜各実施形態の関係＞
なお、上記の各実施形態は、組み合わせて実施することも可能である。例えば、本発明に係るネットワークシステムにおいて、上記の各実施形態に対応するスイッチ（ＯＦＳ）が混在している状況が考えられる。
【０１５５】
＜ハードウェアの例示＞
以下に、本発明に係るネットワークシステムを実現するための具体的なハードウェアの例について説明する。
【０１５６】
コントローラ（ＯＦＣ）の例として、ＰＣ（パソコン）、アプライアンス（ａｐｐｌｉａｎｃｅ）、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。なお、コントローラ（ＯＦＣ）は、端末やサーバに限らず、中継機器や周辺機器でも良い。また、コントローラ（ＯＦＣ）は、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）でも良い。
【０１５７】
スイッチ（ＯＦＳ）の例として、ネットワークスイッチ（ｎｅｔｗｏｒｋ  ｓｗｉｔｃｈ）、ルータ（ｒｏｕｔｅｒ）、プロキシ（ｐｒｏｘｙ）、ゲートウェイ（ｇａｔｅｗａｙ）、ファイアウォール（ｆｉｒｅｗａｌｌ）、ロードバランサ（ｌｏａｄ  ｂａｌａｎｃｅｒ：負荷分散装置）、帯域制御装置（ｐａｃｋｅｔ  ｓｈａｐｅｒ）、セキュリティ監視制御装置（ＳＣＡＤＡ：Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）、ゲートキーパー（ｇａｔｅｋｅｅｐｅｒ）、基地局（ｂａｓｅ  ｓｔａｔｉｏｎ）、アクセスポイント（ＡＰ：Ａｃｃｅｓｓ  Ｐｏｉｎｔ）、通信衛星（ＣＳ：Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓａｔｅｌｌｉｔｅ）、或いは、複数の通信ポートを有する計算機等が考えられる。また、物理マシン上に構築された仮想マシン（ＶＭ）により実現される仮想スイッチでも良い。
【０１５８】
コントローラ（ＯＦＣ）、及びスイッチ（ＯＦＳ）は、車両や船舶、航空機等の移動体に搭載されていても良い。
【０１５９】
図示しないが、コントローラ（ＯＦＣ）、及びスイッチ（ＯＦＳ）の各々は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【０１６０】
上記のプロセッサの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ネットワークプロセッサ（ＮＰ：Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ（ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ）、或いは、専用の機能を有する半導体集積回路（ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等が考えられる。
【０１６１】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のリムーバブルディスクや、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等の記憶媒体（メディア）等が考えられる。また、バッファ（ｂｕｆｆｅｒ）やレジスタ（ｒｅｇｉｓｔｅｒ）等でも良い。或いは、ＤＡＳ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＦＣ−ＳＡＮ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＩＰ−ＳＡＮ（ＩＰ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等を用いたストレージ装置でも良い。
【０１６２】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の１チップ化が進んでいる。したがって、電子機器等に搭載される１チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例も考えられる。
【０１６３】
上記のインターフェースの例として、ネットワーク通信に対応した基板（マザーボード、Ｉ／Ｏボード）やチップ等の半導体集積回路、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口（コネクタ）等の通信ポート等が考えられる。
【０１６４】
また、ネットワークの例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、バックボーン（Ｂａｃｋｂｏｎｅ）、ケーブルテレビ（ＣＡＴＶ）回線、固定電話網、携帯電話網、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ａ）、３Ｇ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ）、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。
【０１６５】
なお、コントローラ（ＯＦＣ）、及びスイッチ（ＯＦＳ）の各々の内部の構成要素は、モジュール（ｍｏｄｕｌｅ）、コンポーネント（ｃｏｍｐｏｎｅｎｔ）、或いは専用デバイス、又はこれらの起動（呼出）プログラムでも良い。
【０１６６】
但し、実際には、これらの例に限定されない。
【０１６７】
＜本発明の特徴＞
以上のように、本発明では、パケット処理のルールに関するフローエントリの管理領域枯渇に伴う性能劣化やパケット欠落を防止する。
【０１６８】
本発明は、オープンフローネットワークに代表されるように、制御機能と転送機能を分離したネットワーク機器で構成されるネットワークを対象とする。
【０１６９】
また、本発明では、フローエントリの数が抑えられるように、パケットの経路を決定する。
【０１７０】
また、本発明では、フローエントリの数が一定値を越えた場合に、代替ネットワーク機器に、フローエントリを分散する。
【０１７１】
また、本発明では、フローエントリの統計情報やＬ１〜Ｌ４パケットヘッダ情報を基に、フローエントリの分散を行う。
【０１７２】
また、本発明では、フローテーブルの空き状況を考慮して経路計算を行い、フローテーブルの使用率を改善する。
【０１７３】
また、本発明では、フローテーブルに空きがなくなった場合に既存フローの置き換えを行う。フローの置き換えには、フローエントリの統計情報やＬ１〜Ｌ４パケットヘッダ情報を利用し、細やかな負荷分散を実現する。
【０１７４】
＜備考＞
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【０１７５】
なお、本出願は、日本特許出願番号２０１２−０３４０９５に基づく優先権を主張するものであり、日本特許出願番号２０１２−０３４０９５における開示内容は引用により本出願に組み込まれる。
【図１】
0005850131.tif 000002
【図２】
0005850131.tif 000003
【図３】
0005850131.tif 000004
【図４】
0005850131.tif 000005
【図５】
0005850131.tif 000006
【図６】
0005850131.tif 000007