(57)【特許請求の範囲】
【請求項１】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、
前記スイッチに対して制御メッセージを送信して前記フローエントリの設定を行い、前記スイッチに設定した前記フローエントリと同一のフローエントリを保持し、フローエントリ単位で同期状態を管理し、フローエントリが非同期の場合、前記スイッチとの間で、特定のフローエントリを優先して同期するコントローラとを含み、
前記スイッチが前記特定のフローエントリの同期後に、パケットを処理する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記特定のフローエントリは、フローエントリのルールに、ブロードキャストアドレス、マルチアドレス、又は、ワイルドカードを含む
ネットワークシステム。
【請求項３】
請求項１又は２に記載のネットワークシステムであって、
前記コントローラ及び前記スイッチの各々は、
フローエントリの集合であり、フローエントリ毎に、該フローエントリの同期状態を示す同期フラグの欄が設けられたフローテーブルを保持する手段と、
一部のフローエントリを特殊エントリとし、特殊エントリの同期状態を示す特殊エントリ同期フラグを保持する手段と、
セキュアチャネルの通信切断を検知した場合、全フローエントリの同期フラグ及び特殊エントリ同期フラグの値を偽（ｆａｌｓｅ）に更新する手段と
を具備する
ネットワークシステム。
【請求項４】
請求項３に記載のネットワークシステムであって、
前記コントローラは、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）であることを検知した際、特殊エントリを同期して、前記コントローラ自身及び前記スイッチの各々に対して、同期した特殊エントリの同期フラグ及び特殊エントリ同期フラグの値を真（ｔｒｕｅ）に更新する手段と、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）であるが、前記スイッチが受信したパケットと特殊エントリがマッチしない場合、受信パケットと送信元・送信先がマッチするフローエントリを同期して、前記コントローラ自身及び前記スイッチの各々に対して、同期したフローエントリの同期フラグを真（ｔｒｕｅ）に更新する手段と
を更に具備する
ネットワークシステム。
【請求項５】
請求項３又は４に記載のネットワークシステムであって、
前記スイッチは、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）である場合、受信パケットを破棄する手段と、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）である場合、前記スイッチのフローテーブルから、受信パケットがマッチするフローエントリを検索する手段と、
検索の結果、受信パケットにマッチする特殊エントリが見つかったか確認する手段と、
受信パケットにマッチする特殊エントリが見つからない場合、受信パケットに送信元・送信先がマッチするフローエントリが見つかったか確認する手段と、
受信パケットに送信元・送信先がマッチするフローエントリが見つかった場合、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）であるか確認する手段と、
受信パケットに送信元・送信先がマッチするフローエントリが見つからなかった場合、或いは、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）である場合、受信パケットに関係するフローエントリを前記コントローラに問い合わせ、応答を待つ手段と、
受信パケットにマッチするフローエントリのうち、最も優先度の高いフローエントリを選択し、選択されたフローエントリのアクションを参照し、記載されている内容に従ってパケットを処理する手段と
を更に具備する
ネットワークシステム。
【請求項６】
請求項１乃至５のいずれか一項に記載のネットワークシステムで使用されるコントローラ。
【請求項７】
請求項１乃至５のいずれか一項に記載のネットワークシステムで使用されるスイッチ。
【請求項８】
スイッチが、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うことと、
コントローラが、前記スイッチに対して制御メッセージを送信して前記フローエントリの設定を行うことと
前記コントローラが、前記スイッチに設定したフローエントリと同一のフローエントリを保持し、フローエントリ単位で同期状態を管理し、フローエントリが非同期の場合、前記スイッチとの間で、特定のフローエントリを優先して同期することと、
前記スイッチが前記特定のフローエントリの同期後に、パケットを処理することと
を含む
経路情報同期方法。
【請求項９】
請求項８に記載の経路情報同期方法であって、
前記コントローラ及び前記スイッチの各々が、
フローエントリの集合でありフローエントリ毎に該フローエントリの同期状態を示す同期フラグの欄が設けられたフローテーブルを保持するステップと、
一部のフローエントリを特殊エントリとし、特殊エントリの同期状態を示す特殊エントリ同期フラグを保持するステップと、
セキュアチャネルの通信切断を検知した場合、全フローエントリの同期フラグ及び特殊エントリ同期フラグの値を（ｆａｌｓｅ）に更新するステップと
を含む
経路情報同期方法。
【請求項１０】
請求項９に記載の経路情報同期方法であって、
前記コントローラが、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）であることを検知した際、特殊エントリを同期して、前記コントローラ自身及び前記スイッチの各々に対して、同期した特殊エントリの同期フラグ及び特殊エントリ同期フラグの値を真（ｔｒｕｅ）に更新するステップと、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）であるが、前記スイッチが受信したパケットと特殊エントリがマッチしない場合、受信パケットと送信元・送信先がマッチするフローエントリを同期して、前記コントローラ自身及び前記スイッチの各々に対して、同期したフローエントリの同期フラグを真（ｔｒｕｅ）に更新するステップと
を更に含む
経路情報同期方法。
【請求項１１】
請求項９又は１０に記載の経路情報同期方法であって、
前記スイッチが、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）である場合、受信パケットを破棄するステップと、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）である場合、前記スイッチのフローテーブルから、受信パケットがマッチするフローエントリを検索するステップと、
検索の結果、受信パケットにマッチする特殊エントリが見つかったか確認するステップと、
受信パケットにマッチする特殊エントリが見つからない場合、受信パケットに送信元・送信先がマッチするフローエントリが見つかったか確認するステップと、
受信パケットに送信元・送信先がマッチするフローエントリが見つかった場合、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）であるか確認するステップと、
受信パケットに送信元・送信先がマッチするフローエントリが見つからなかった場合、或いは、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）である場合、受信パケットに関係するフローエントリを前記コントローラに問い合わせ、応答を待つステップと、
受信パケットにマッチするフローエントリのうち、最も優先度の高いフローエントリを選択し、選択されたフローエントリのアクションを参照し、記載されている内容に従ってパケットを処理するステップと
を更に含む
経路情報同期方法。
【請求項１２】
請求項８乃至１１のいずれか一項に記載の経路情報同期方法におけるコントローラの処理を、電子機器に実行させるためのプログラムを格納した記憶媒体。
【請求項１３】
請求項８乃至１１のいずれか一項に記載の経路情報同期方法におけるスイッチの処理を、電子機器に実行させるためのプログラムを格納した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、特に経路情報のエントリを同期するネットワークシステムに関する。
【背景技術】
【０００２】
［ＣＵ分離型ネットワークシステムの説明］
ネットワークシステムの制御方式の１つとして、外部の制御装置（コントロールプレーン）からノード装置（ユーザプレーン）を制御するＣＵ（Ｃ：コントロールプレーン／Ｕ：ユーザプレーン）分離型ネットワークシステムが提案されている。【０００３】
ＣＵ分離型ネットワークシステムの一例として、コントローラからスイッチを制御してネットワークシステムの経路制御を行うオープンフロー（ＯｐｅｎＦｌｏｗ）技術を利用したオープンフローネットワークシステムが挙げられる。オープンフロー技術の詳細については、非特許文献１に記載されている。なお、オープンフローネットワークシステムは一例に過ぎない。【０００４】
［オープンフローネットワークシステムの説明］
オープンフローネットワークシステムでは、従来のスイッチの機構が、経路の決定処理を外部からプログラミングすることで変更可能としたモジュールであるオープンフローコントローラ（ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ：ＯＦＣ）と、パケット転送処理のみを行うモジュールであるオープンフロースイッチ（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ：ＯＦＳ）とに分離されている。【０００５】
以下、記載の簡略化のため、オープンフローコントローラを「コントローラ（ＯＦＣ）」と表記し、オープンフロースイッチを「スイッチ（ＯＦＳ）」と表記する。【０００６】
オープンフローネットワークシステムでは、コントローラ（ＯＦＣ）が、スイッチ（ＯＦＳ）のフローテーブルを操作することによりスイッチ（ＯＦＳ）の挙動を制御する。【０００７】
コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）の間は、コントローラ（ＯＦＣ）がオープンフロープロトコルに準拠した制御メッセージを用いてスイッチ（ＯＦＳ）を制御するためのセキュアチャネル（Ｓｅｃｕｒｅ  Ｃｈａｎｎｅｌ）により接続されている。【０００８】
オープンフローネットワークシステムにおけるスイッチ（ＯＦＳ）とは、オープンフローネットワークを形成し、コントローラの制御下にあるエッジスイッチ及びコアスイッチのことである。オープンフローネットワークにおける入力側エッジスイッチでのパケット（ｐａｃｋｅｔ）の受信から出力側エッジスイッチでの送信までのパケットの一連の流れをフロー（Ｆｌｏｗ）と呼ぶ。【０００９】
パケットは、フレーム（ｆｒａｍｅ）と読み替えても良い。パケットとフレームの違いは、プロトコルが扱うデータの単位（ＰＤＵ：Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔ）の違いに過ぎない。パケットは、「ＴＣＰ／ＩＰ」（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のＰＤＵである。一方、フレームは、「Ｅｔｈｅｒｎｅｔ（登録商標）」のＰＤＵである。【００１０】
フローテーブルとは、所定の条件（ルール）に適合（マッチ）するパケット（通信データ）に対して行うべき所定の動作（アクション）を定義したフローエントリ（Ｆｌｏｗ  ｅｎｔｒｙ）が登録されたテーブルである。【００１１】
フローエントリのルールは、パケットの各プロトコル階層のヘッダ領域に含まれる送信先アドレス（Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）、送信元アドレス（Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）、送信先ポート（Ｄｅｓｔｉｎａｔｉｏｎ  Ｐｏｒｔ）、送信元ポート（Ｓｏｕｒｃｅ  Ｐｏｒｔ）のいずれか又は全てを用いた様々な組み合わせにより定義され、区別可能である。なお、上記のアドレスには、ＭＡＣアドレス（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ａｄｄｒｅｓｓ）やＩＰアドレス（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ａｄｄｒｅｓｓ）を含むものとする。また、上記に加えて、入口ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）の情報も、フローエントリのルールとして使用可能である。また、フローエントリのルールとして、フローを示すパケットのヘッダ領域の値の一部（又は全部）を、正規表現やワイルドカード「＊」等で表現したものを設定することもできる。【００１２】
フローエントリのアクションは、「特定のポートに出力する」、「廃棄する」、「ヘッダを書き換える」といった動作を示す。例えば、スイッチは、フローエントリのアクションに出力ポートの識別情報（出力ポート番号等）が示されていれば、これに該当するポートにパケットを出力し、出力ポートの識別情報が示されていなければ、パケットを破棄する。或いは、スイッチは、フローエントリのアクションにヘッダ情報が示されていれば、当該ヘッダ情報に基づいてパケットのヘッダを書き換える。【００１３】
オープンフローネットワークシステムにおけるスイッチ（ＯＦＳ）は、フローエントリのルールに適合するパケット群（パケット系列）に対して、フローエントリのアクションを実行する。【００１４】
現在のところ、オープンフロー技術は、研究段階から実用段階への過渡期にある。実用化に向けて、データセンター等の大規模ネットワークにおける運用試験等が実施されている。この中で、スケーラビリティに関わる問題が顕在化しており、フローエントリの同期に関する問題もその１つである。例えば、全スイッチ・全フローエントリの同期を行えば、障害発生時やクラスタスイッチ時に発生するサービス縮退時間が非常に長くなるという問題がある。そのため、このような問題を改善するための技術が望まれている。
【先行技術文献】
【非特許文献】
【００１５】
【非特許文献１】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖｅｒｓｉｏｎ  １．１．０  Ｉｍｐｌｅｍｅｎｔｅｄ”，［ｏｎｌｉｎｅ］，Ｆｅｂｒｕａｒｙ  ２８，  ２０１１，インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．１．０．ｐｄｆ）
【発明の概要】
【００１６】
本発明の目的は、オープンフローネットワークシステム等のＣＵ分離型ネットワークシステムにおいて、フローテーブルを構成するフローエントリ一つ一つの同期状態を管理し、フローエントリ毎に同期（フローテーブルの部分的同期）を行うネットワークシステムを提供することである。
【００１７】
本発明に係るネットワークシステムは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、スイッチに対して制御メッセージを送信し、フローエントリの設定を行うコントローラとを含む。コントローラは、スイッチに設定したフローエントリと同一のフローエントリを保持し、フローエントリ単位で同期状態を管理し、フローエントリが非同期の場合、スイッチとの間で、特定のフローエントリを優先して同期する。
【００１８】
本発明に係る経路情報同期方法では、スイッチは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う。また、コントローラは、スイッチに対して制御メッセージを送信し、フローエントリの設定を行う。このとき、コントローラは、スイッチに設定したフローエントリと同一のフローエントリを保持し、フローエントリ単位で同期状態を管理し、フローエントリが非同期の場合、スイッチとの間で、特定のフローエントリを優先して同期する。
【００１９】
本発明に係るプログラムは、上記の経路情報同期方法におけるコントローラ又はスイッチの処理を、計算機等の電子機器に実行させるためのプログラムである。なお、本発明に係るプログラムは、記憶装置や記憶媒体に格納することが可能である。
【００２０】
これにより、オープンフローネットワークシステム等のＣＵ分離型ネットワークシステムにおいて、障害発生時やクラスタスイッチ時に発生するサービス縮退時間を減少させる。
【図面の簡単な説明】
【００２１】
【図１】基本的なオープンフローネットワークシステムの構成例を示す図である。
【図２】フローエントリの仕様（形式）について説明するための図である。
【図３】フローエントリ追加登録時の手順について説明するための図である。
【図４】フローエントリ削除時の手順について説明するための図である。
【図５】コントローラ（ＯＦＣ）のクラスタスイッチ処理について説明するための図である。
【図６】「ａｕｄｉｔ処理」（同期処理）の実装例について説明するための図である。
【図７】本発明に係るフローテーブルの仕様（形式）について説明するための図である。
【図８】本発明に係るネットワークシステムの構成例を示す図である。
【図９】セキュアチャネル監視部の動作を示すフローチャートである。
【図１０】部分同期処理部の動作を示すフローチャートである。
【図１１】パケット処理部の動作を示すフローチャートである。
【図１２】経路計算部の動作を示すフローチャートである。
【図１３】パケット到達時の実際の動作について説明するための図である。
【図１４】他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細について説明するための図である。
【図１５】サービス縮退時間を短縮できる理由について説明するための図である。
【発明を実施するための形態】
【００２２】
＜前提＞
本発明は、ＣＵ分離型ネットワークシステムを対象としている。ここでは、ＣＵ分離型ネットワークシステムの１つであるオープンフローネットワークシステムを例に説明する。但し、実際には、オープンフローネットワークシステムに限定されない。
【００２３】
［オープンフローネットワークシステムの構成］
図１を参照して、基本的なオープンフローネットワークシステムの構成例について説明する。
【００２４】
基本的なオープンフローネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０と、ホスト３０を含む。
【００２５】
コントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０、及びホスト３０は、それぞれ複数台でも良い。例えば、複数のスイッチ（ＯＦＳ）２０の各々は、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、・・・、のように表記する。
【００２６】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）を管理する。
【００２７】
スイッチ（ＯＦＳ）２０は、ネットワークを構成する。
【００２８】
ホスト３０は、スイッチ（ＯＦＳ）２０に接続され、スイッチ（ＯＦＳ）２０を介してネットワーク通信を行う。
【００２９】
コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間は、ＳＳＬ（ＳｅｃｕｒｅＳｏｃｋｅｔＬａｙｅｒ）により保護された通信路である「セキュアチャネル」で接続されている。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０は、セキュアチャネルを経由し、オープンフロープロトコルに則った通信を行う。
【００３０】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に到着するパケットをスイッチ（ＯＦＳ）２０がどのように処理するかについて、フローエントリを操作することにより制御する。
【００３１】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に、多数のフローエントリを登録することになる。
【００３２】
フローエントリの集合は、「フローテーブル」と呼ばれる表形式で管理されている。
【００３３】
各スイッチ（ＯＦＳ）２０は、フローテーブルを少なくとも１つ保持している。コントローラ（ＯＦＣ）１０は、配下の各スイッチ（ＯＦＳ）２０のフローテーブルと同じ内容のフローテーブルを全て保持している。すなわち、コントローラ（ＯＦＣ）１０は、各スイッチ（ＯＦＳ）２０のフローテーブルのマスターテーブルを保持している。
【００３４】
なお、「フローテーブルを保持している」とは、そのフローテーブルを管理していることを意味する。そのフローテーブルをネットワーク経由等で管理可能であれば、実際には、そのフローテーブルが自身の内部に存在していなくても良い。すなわち、フローテーブルの保管場所は、そのフローテーブルを管理する装置の内部に限らず、外部でも良い。例えば、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０が、ネットワーク上にある同一のフローテーブルを共有することも考えられる。
【００３５】
フローエントリの仕様（形式）は、オープンフロー規約により定められている。
【００３６】
［フローエントリの仕様（形式）］
図２を参照して、フローエントリの仕様（形式）について説明する。
【００３７】
フローエントリは、ルールの欄と、統計情報の欄と、アクションの欄を含む。
【００３８】
ルールの欄には、フローエントリのルールとして、ＯＳＩ参照モデルのＬ１（レイヤ１：物理層）からＬ４（レイヤ４：トランスポート層）までの情報（属性値）を任意に組み合わせて指定することができる。なお、ルールの欄には、ブロードキャストアドレスやマルチキャストアドレスを指定することができる。また、「＊」や「？」といったワイルドカードを使用することもできる。
【００３９】
統計情報の欄には、「当該エントリにマッチしたパケットの総数」や、「最後にマッチしてから経過した時間」等の統計情報が格納されている。
【００４０】
アクションの欄には、フローエントリのアクションとして、「パケットをスイッチＡに転送する」、「パケットをホストＢに転送する」、或いは「パケットを廃棄する」等の処理の内容を指定することができる。
【００４１】
スイッチ（ＯＦＳ）２０は、ルールの欄に記述された内容にマッチするパケットを、アクションの欄に記述された内容に従って処理する。
【００４２】
コントローラ（ＯＦＣ）１０は、このようなフローエントリをスイッチ（ＯＦＳ）２０に登録することで、マッチするパケットに対する処理を制御できるのである。
【００４３】
単純な例を示せば、コントローラ（ＯＦＣ）１０は、「１０．３４．７６．１３１のアドレスを持つホストから、１０．３４．８１．１００のアドレスを持つホストのポート２２宛に送出されたパケットについては、廃棄する」といった内容を、フローエントリとしてスイッチ（ＯＦＳ）２０に登録することができる。この場合、フローエントリのルールは、「送信元ＩＰアドレス＝１０．３４．７６．１３１」、「送信先ＩＰアドレス＝１０．３４．８１．１００」、及び「送信先ポート番号＝２２」となる。また、フローエントリのアクションは、「廃棄」となる。
【００４４】
スイッチ（ＯＦＳ）２０は、パケットが到着した時、当該パケットのヘッダ情報（送信元情報や送信先情報等）を読み取り、自身のフローテーブルの中から、マッチするルールを持つフローエントリ（以下、マッチするフローエントリと呼ぶ）を検索する。
【００４５】
検索の結果、マッチするフローエントリが見つかった場合、スイッチ（ＯＦＳ）２０は、そのフローエントリのアクションに記載されている通りにパケットを処理する。なお、複数のフローエントリが見つかった場合、見つかったフローエントリのうち、最も優先度が高いフローエントリに従い、パケットを処理する。
【００４６】
また、検索の結果、マッチするフローエントリが見つからなかった場合、スイッチ（ＯＦＳ）２０は、当該パケットを「ファーストパケット」と判断し、当該パケットのコピー（複製）をコントローラ（ＯＦＣ）１０に転送することで、当該パケットをどのように処理すべきかについてコントローラ（ＯＦＣ）１０に問い合わせる。
【００４７】
なお、「ファーストパケット」とは、初めてスイッチ（ＯＦＳ）２０に到着したパケット（新規パケット）であり、既存のフローエントリに適合しないパケット（未登録パケット）のことである。
【００４８】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０から問い合わせを受けた場合、経路計算を行い、問い合わせを受けたパケットを送信先まで転送するための最適な経路を導出する。
【００４９】
また、コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０のフローテーブルに、導出した経路を構成するためのフローエントリを新規に追加登録する。このとき、コントローラ（ＯＦＣ）１０は、自身のフローテーブルにも同じフローエントリを新規に追加登録する。
【００５０】
スイッチ（ＯＦＳ）２０は、コントローラ（ＯＦＣ）１０から新規に追加登録されたフローエントリに従って、当該パケット及び以降の同一フローのパケットを処理する。
【００５１】
オープンフローネットワークにおいて、送信元ホストから送信先ホストに到達するための経路は、公知となっている「ダイクストラのアルゴリズム」（ダイクストラ法に基づく経路探索アルゴリズム）により求めることができる。
【００５２】
このとき、経路計算の入力として、以下の（１）、（２）に示す２つの情報が与えられる必要がある。
【００５３】
（１）トポロジー情報
トポロジー情報は、当該ネットワークを構成するホストやスイッチ等の接続情報であり、ネットワーク管理者等により事前に登録されている情報である。
【００５４】
（２）フローエントリ情報
フローエントリ情報は、各スイッチに既に登録されているフローエントリ全般の情報である。
【００５５】
フローエントリ情報が入力として与えられないまま経路計算した場合や、入力として与えられた情報が誤っていた場合、経路計算の結果として導出した経路に基づくフローエントリと、既存のフローエントリとの組み合わせにより、ループ経路が形成される危険性がある。
【００５６】
従って、コントローラ（ＯＦＣ）１０は、配下のスイッチ（ＯＦＳ）２０のフローテーブルと同一の内容のフローテーブルを保持し、経路計算を実行する毎に必要な情報を参照できるようにしている。
【００５７】
図１の例では、コントローラ（ＯＦＣ）１０は、自身のフローテーブルを保持しているが、それぞれスイッチ（ＯＦＳ）２０のフローテーブルと同一の内容のものである。
【００５８】
コントローラ（ＯＦＣ）１０が常に正しい計算を行うことができるためには、自身のフローテーブルの内容と、スイッチ（ＯＦＳ）２０のフローテーブルの内容が、常に同じ内容になっている必要がある。
【００５９】
従って、いずれかのフローテーブルが更新される場合には、両方の同期状態が保たれるように更新する必要がある。
【００６０】
フローテーブルの更新の例として、フローエントリの「追加登録」と「削除」が挙げられる。
【００６１】
［フローエントリ追加登録時の手順］
図３を参照して、フローエントリ追加登録時の手順について説明する。
【００６２】
フローエントリが追加登録されるのは、スイッチ（ＯＦＳ）２０がファーストパケットを受け取り、コントローラ（ＯＦＣ）１０に経路を問い合わせ、コントローラ（ＯＦＣ）１０がスイッチ（ＯＦＳ）２０に新規フローエントリを追加登録する場合である。
【００６３】
（１）ステップＳ１１
例えば、ホストＡからホストＢ宛のパケットがスイッチ（ＯＦＳ）２０に到着する。スイッチ（ＯＦＳ）２０は、当該パケットを受信する。
【００６４】
（２）ステップＳ１２
スイッチ（ＯＦＳ）２０は、自身のフローテーブルから、当該パケットにマッチするフローエントリを検索する。当該パケットがファーストパケットである場合、マッチするフローエントリが見つからないため、コントローラ（ＯＦＣ）１０に当該パケットの転送経路を問い合わせる。
【００６５】
（３）ステップＳ１３
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０からの問い合わせに応じて、当該パケットの転送経路を計算する。
【００６６】
（４）ステップＳ１４
コントローラ（ＯＦＣ）１０は、計算結果として導き出したフローエントリを、自身のフローテーブルに追加登録する。
【００６７】
（５）ステップＳ１５
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に対して、フローエントリの追加登録を指示する制御メッセージを送信する。
【００６８】
（６）ステップＳ１６
スイッチ（ＯＦＳ）２０は、フローエントリの追加登録を指示する制御メッセージに基づいて、自身のフローテーブルにフローエントリを新規に追加登録する。
【００６９】
（７）ステップＳ１７
スイッチ（ＯＦＳ）２０は、新規に追加登録されたフローエントリ内に記載された内容に従い、当該パケットの転送処理を行う。
【００７０】
以上から、コントローラ（ＯＦＣ）１０側で保持するフローテーブルと、スイッチ（ＯＦＳ）２０側で保持するフローテーブルとに対して、同期して追加登録処理が行われることがわかる。
【００７１】
しかし、（４）ステップＳ１４が完了してから（６）ステップＳ１６が完了するまでの間に、セキュアチャネルが切断される等の障害が発生した場合には、同期が不可能となるため、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の両者のフローテーブルに差異が生じる。
【００７２】
［フローエントリ削除時の手順］
図４を参照して、フローエントリ削除時の手順について説明する。
【００７３】
上記の「フローエントリ追加登録時の手順」に示したように、スイッチ（ＯＦＳ）２０にファーストパケットが到着するたびに、フローエントリが新規に追加登録される。
【００７４】
しかし、フローテーブルの格納領域は有限であることから、際限なく追加登録することはできない。
【００７５】
従って、ある一定時間以上マッチしなかったフローエントリを削除する処理を行うことで、フローエントリ数を一定数以下に収めるようにする。
【００７６】
（１）ステップＳ２１
スイッチ（ＯＦＳ）２０は、自身のフローテーブルから、一定時間以上マッチしなかったフローエントリを検索し、そのフローエントリを削除する。
【００７７】
（２）ステップＳ２２
スイッチ（ＯＦＳ）２０は、そのフローエントリを削除したという旨の通知を、コントローラ（ＯＦＣ）１０に送信する。
【００７８】
（３）ステップＳ２３
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０からの通知に基づいて、自身のフローテーブルから、そのフローエントリに対応するフローエントリを削除する。
【００７９】
以上から、コントローラ（ＯＦＣ）１０側で保持するフローテーブルと、スイッチ（ＯＦＳ）２０側で保持するフローテーブルとに対して、同期して削除処理が行われることがわかる。
【００８０】
しかし、（１）ステップＳ２１が完了してから（３）ステップＳ２３が完了するまでの間に、セキュアチャネルが切断される等の障害が発生した場合、両者のフローテーブルに差異が生じる。
【００８１】
なお、（２）ステップＳ２２では、非同期のメッセージが送信されることが、オープンフローの規約により定められている。
【００８２】
以上説明したように、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０のそれぞれで保持されるフローテーブルは、基本的には同期状態を保ちながら更新されるが、セキュアチャネルが切断された場合には差異が生じ得ることがわかる。
【００８３】
従って、正確な経路計算を行うためには、生じた差異を修正する処理が必要となる。生じた差異を修正する処理を、ここでは「ａｕｄｉｔ処理」（同期処理）と呼ぶ。
【００８４】
「ａｕｄｉｔ処理」では、コントローラ（ＯＦＣ）１０側で保持するフローテーブルを正確な情報（真の情報）とし、スイッチ（ＯＦＳ）２０側で保持するフローテーブルに生じた差異を修正する（同期する）。
【００８５】
「ａｕｄｉｔ処理」には、以下の（１）〜（３）のような困難さが伴う。
【００８６】
（１）「ａｕｄｉｔ処理」自体が負荷の高い処理であること。
【００８７】
（２）「ａｕｄｉｔ処理」が完了するまで、正確な経路計算を行うことができないこと。
【００８８】
（３）「ａｕｄｉｔ処理」の完了／未完了に関わらず、スイッチ（ＯＦＳ）２０にパケットが到着し続けるため、差分の修正前にファーストパケットが到着する可能性があること。
【００８９】
「ａｕｄｉｔ処理」では、管理するスイッチ（ＯＦＳ）２０の台数分のフローテーブルについて差分を修正する必要がある。
【００９０】
そもそも、各スイッチ（ＯＦＳ）２０のフローテーブルに含まれるフローエントリの数が膨大であり、差分を照合・修正する処理には相応の時間を要する。
【００９１】
従って、大規模ネットワークになればなるほど、「ａｕｄｉｔ処理」の処理量は大きくなる。
【００９２】
また、一般的に、一対のフローテーブルにおいて発生する差異の量は、セキュアチャネルが切断されている時間間隔が長ければ長いほど大きくなる。
【００９３】
以上の理由より、大規模ネットワークにおいて、コントローラ（ＯＦＣ）１０がクラスタスイッチ処理を行う場合等は、高負荷な「ａｕｄｉｔ処理」が必要となる典型的な例となる。
【００９４】
なお、クラスタスイッチ処理とは、クラスタシステム（Ｃｌｕｓｔｅｒ  ｓｙｓｔｅｍ）やフォールトトレラントシステム（Ｆａｕｌｔ  ｔｏｌｅｒａｎｔ  ｓｙｓｔｅｍ）等のように、運用系（Ａｃｔｉｖｅ）と待機系（Ｓｔａｎｄｂｙ）のノードにより構成されたシステムで、ノードの役割を切り替える処理である。
【００９５】
［コントローラ（ＯＦＣ）のクラスタスイッチ処理］
図５を参照して、コントローラ（ＯＦＣ）１０がクラスタスイッチ処理を行う場合について説明する。
【００９６】
図５に示すように、コントローラ（ＯＦＣ）１０を運用系（Ａｃｔｉｖｅ）から待機系（Ｓｔａｎｄｂｙ）へ切り替える場合、高負荷な「ａｕｄｉｔ処理」が必要となる。
【００９７】
このような場合に、上記の（１）〜（３）のような「ａｕｄｉｔ処理」の困難さが、実際の問題現象として顕在化することがある。
【００９８】
従来の「ａｕｄｉｔ処理」は、基本的にフローテーブル単位で同期処理を行うものであり、フローエントリ単位で同期処理を行う仕組みや手法については提案されていなかった。
【００９９】
［ａｕｄｉｔ処理の実装例］
図６を参照して、フローテーブル単位で同期させる「ａｕｄｉｔ処理」のいくつかの実装例（実装例Ａ、Ｂ、Ｃ）と、それぞれの場合に発生し得る問題点について説明する。
【０１００】
［実装例Ａ］
全フローテーブルの「ａｕｄｉｔ処理」が完了するまでファーストパケットをペンディング（保留）させる。
【０１０１】
例えば、セキュアチャネル切断後、コントローラ（ＯＦＣ）１０は、「ａｕｄｉｔ処理」をスイッチ（ＯＦＳ）２０一台分ずつ行い、Ｎ台分が完了してから経路計算を開始する。「ａｕｄｉｔ処理」の途中にスイッチ（ＯＦＳ）２０にファーストパケットが到着した場合、経路計算処理が必要となる。しかし、「ａｕｄｉｔ処理」の途中であるため、即座に経路計算すると、計算結果が不正確となる可能性がある。従って、「ａｕｄｉｔ処理」が完了するまで経路計算をペンディング（保留）にする。そうして「ａｕｄｉｔ処理」が完了したら、到着順に経路計算し、パケットを処理してゆく。ペンディング（保留）中のファーストパケットはスイッチ（ＯＦＳ）２０内のキュー（ｑｕｅｕｅ）に貯めておくことになる。
【０１０２】
この実装例Ａでは、ネットワーク規模が小さく「ａｕｄｉｔ処理」に掛かる時間が十分短い場合や、トラフィック量が少なく到着するファーストパケットの数が少数である場合には致命的な問題はおきない。経路計算ペンディング（保留）に由来するネットワーク遅延のみが発生する（図６の実装例Ａの成功ケース）。
【０１０３】
しかし、ネットワーク規模が大きくて「ａｕｄｉｔ処理」に長い時間を要する場合や、トラフィック量が多くて多数のファーストパケットがスイッチ（ＯＦＳ）２０に到着する場合には、スイッチ（ＯＦＳ）２０内のキューが溢れてしまう。こうなった場合、スイッチ（ＯＦＳ）２０がダウン（停止）し、ユーザからはネットワークがダウンした状態となる。また、装置復旧の手間が発生し、復旧するまでユーザはネットワークを使用できなくなる（図６の実装例Ａの失敗ケース）。
【０１０４】
［実装例Ｂ］
全フローテーブルの「ａｕｄｉｔ処理」が完了するまでファーストパケットを受け付けない。
【０１０５】
実装例Ｂは、実装例Ａを改良したものである。
【０１０６】
例えば、セキュアチャネル切断後、コントローラ（ＯＦＣ）１０は、フローテーブルの差分を修正する処理を、スイッチ（ＯＦＳ）２０毎に（一台分ずつ）行い、Ｎ台分が完了してから経路計算を開始する。これは、実装例Ａと同じである。
【０１０７】
また、「ａｕｄｉｔ処理」の途中にファーストパケットが到着した場合、即座に経路計算すると、結果が不正確となる可能性がある。しかし、ペンディング（保留）にしておき、スイッチ（ＯＦＳ）２０内のキューに貯めておくと、キューが溢れてスイッチ（ＯＦＳ）２０がダウンする可能性がある。よって、「ａｕｄｉｔ処理」中は、スイッチ（ＯＦＳ）２０は、到着したファーストパケットを破棄するものとする。こうすることで、スイッチ（ＯＦＳ）２０がダウンすることはなくなる。
【０１０８】
しかし、「ａｕｄｉｔ処理」中、スイッチ（ＯＦＳ）２０がファーストパケットを破棄してしまい、パケットが送信先に到達しないため、ユーザからはネットワークがダウンした状態に見える（図６の実装例Ｂ）。
【０１０９】
［実装例Ｃ］
最低限の「ａｕｄｉｔ処理」が完了するまではファーストパケットを受け付けない。
【０１１０】
なお、最低限の「ａｕｄｉｔ処理」の完了後はファーストパケットを受け付けて経路計算を実行する。
【０１１１】
実装例Ｃは、実装例Ａ、実装例Ｂを更に改良したものであり、ネットワークダウンの時間を短縮できる。
【０１１２】
例えば、セキュアチャネル切断後、コントローラ（ＯＦＣ）１０は、フローテーブル内のフローエントリのうち、ブロードキャスト（ＢＣ）／マルチキャスト（ＭＣ）のフローエントリのみを他のフローエントリに先んじて同期する。
【０１１３】
ブロードキャスト（ＢＣ）のフローエントリ（以下、ＢＣエントリ）とは、フローエントリのルールにおいて、送信先アドレスにブロードキャストアドレスが指定されているフローエントリである。
【０１１４】
マルチキャスト（ＭＣ）のフローエントリ（以下、ＭＣエントリ）とは、フローエントリのルールにおいて、送信先アドレスにマルチキャストアドレスが指定されているフローエントリである。
【０１１５】
最初に、コントローラ（ＯＦＣ）１０は、自身のフローテーブルと、スイッチ（ＯＦＳ）２０のフローテーブルとの間で、ＢＣエントリ／ＭＣエントリを同期することで、最低限のパケット転送を可能にする。
【０１１６】
また、ＢＣエントリ／ＭＣエントリ同期処理中には、スイッチ（ＯＦＳ）２０は、到着したファーストパケットを破棄する。
【０１１７】
コントローラ（ＯＦＣ）１０は、ＢＣエントリ／ＭＣエントリ同期処理が完了した後、スイッチ（ＯＦＳ）２０から、スイッチ（ＯＦＳ）２０に到着したファーストパケットの問い合わせを受け入れ、順次処理してゆく。
【０１１８】
この時点では、全フローエントリが同期した訳ではないため、経路計算が不正確である可能性があるが、ペンディング（保留）にしておくことで、スイッチ（ＯＦＳ）２０がダウンする可能性があるため、スイッチ（ＯＦＳ）２０に到着したファーストパケットの問い合わせを受け入れ、順次、経路計算を実行する。また、経路計算と平行して、残りのフローエントリの同期処理を進める。
【０１１９】
結果的に、実装例Ｂに比べて、（障害レベルの高い）ネットワークダウンの期間を短縮できるが、一方で、経路計算が不正確となる期間が発生してしまう可能性がある（図６の実装例Ｃ）。
【０１２０】
また、実装例Ｃでは、経路計算と平行して「ａｕｄｉｔ処理」を行うため、「ａｕｄｉｔ処理」に掛かる時間の総計が増加する。従って、実装例Ｂに比べて、サービスの縮退時間が増加する可能性がある（図６の実装例Ｃの「増加」部分）。
【０１２１】
以上のように、上記の（１）〜（３）のような「ａｕｄｉｔ処理」の困難さのため、特に大規模なネットワーク構成で、クラスタスイッチ処理を行う場合や、セキュアチャネルが切断するような障害が発生した場合に、サービス縮退時間が発生する。従って、このような状況において、サービス縮退時間を短縮する手法が求められる。
【０１２２】
＜実施形態＞
以下に、本発明の実施形態について添付図面を参照して説明する。
【０１２３】
ファーストパケットがスイッチ（ＯＦＳ）に到着し、その経路を計算するに当たって、必要となるフローエントリは限られている。
【０１２４】
当該パケットの送信元・送信先にマッチするフローエントリだけが必要であり、マッチしないものは計算結果に何ら影響を及ぼすことがない。
【０１２５】
従って、あるファーストパケットに対する経路計算において、全てのフローテーブル・全てのフローエントリが同期されている必要はない。当該ファーストパケットにマッチするエントリだけが事前に同期されていれば十分である。すなわち、完全なａｕｄｉｔ処理ではなく、部分的なａｕｄｉｔ処理（部分ａｕｄｉｔ処理）を実行するだけで十分である。
【０１２６】
上記の実装例Ａ、実装例Ｂでは、コントローラ（ＯＦＣ）は、Ｎ台分の全フローテーブルの同期が完了したか、或いは、完了していないかの２状態のみを管理していた。
【０１２７】
上記の実装例Ｃにおいて、コントローラ（ＯＦＣ）は、フローテーブルの内のＢＣエントリ／ＭＣエントリについて、Ｎ台分が全て同期完了したか、或いはしていないかの２状態のみを管理していた。
【０１２８】
従って、実際には経路計算に必要とはならないフローエントリまで同期させた上で、経路計算を行っていたことになる。
【０１２９】
本発明では、図７のように、フローエントリ毎に、そのフローエントリの同期状態を示す「同期フラグ」の欄をフローテーブルに設ける。
【０１３０】
［本発明に係るフローテーブルの仕様（形式）］
図７を参照して、本発明に係るフローテーブルの仕様（形式）について説明する。
【０１３１】
本発明に係るフローテーブルは、ルールの欄と、統計情報の欄と、アクションの欄と、同期フラグの欄を含む。
【０１３２】
ルールの欄には、フローエントリのルールとして、ＯＳＩ参照モデルのＬ１（レイヤ１：物理層）からＬ４（レイヤ４：トランスポート層）までの情報（属性値）を任意に組み合わせて指定することができる。なお、ルールの欄には、ブロードキャストアドレスやマルチキャストアドレスを指定することができる。また、「＊」や「？」といったワイルドカードを使用することもできる。
【０１３３】
統計情報の欄には、「当該エントリにマッチしたパケットの総数」や、「最後にマッチしてから経過した時間」等の統計情報を格納することができる。
【０１３４】
アクションの欄には、フローエントリのアクションとして、「パケットをスイッチＡに転送する」、「パケットをホストＢに転送する」、或いは「パケットを廃棄する」等の処理の内容を指定することができる。
【０１３５】
同期フラグの欄には、「真」（ｔｒｕｅ）／「偽」（ｆａｌｓｅ）のいずれかの値が入力されるものとする。
【０１３６】
「真」（ｔｒｕｅ）は、そのフローエントリが既に同期済みであると保証できることを示す値である。
【０１３７】
「偽」（ｆａｌｓｅ）は、そのフローエントリが同期済みであると保証できないことを示す値である。
【０１３８】
このフローテーブルの内容は、コントローラ（ＯＦＣ）及びスイッチ（ＯＦＳ）の両方に共通である。
【０１３９】
また、コントローラ（ＯＦＣ）及びスイッチ（ＯＦＳ）の両方に、この同期フラグの値を操作するための「同期フラグ変更部」を設ける。これにより、コントローラ（ＯＦＣ）及びスイッチ（ＯＦＳ）のそれぞれのフローエントリの同期状態を管理できるようにする。
【０１４０】
また、コントローラ（ＯＦＣ）に、特定のパケットにマッチするフローエントリだけを同期するための「部分同期処理部」を設ける。これにより、ファーストパケット到着時に、必要な分だけフローエントリを同期することを可能にし、不要なペンディング（保留）時間を発生させず、正確に経路計算を行うことができるようにする。
【０１４１】
結果として、実装例Ｃで発生していた経路計算が不正確となる期間がなくなり、サービス縮退時間の総量を短縮させることが可能となる。
【０１４２】
上記の実装例Ｃでは、ＢＣエントリ／ＭＣエントリを最初に同期させた。
【０１４３】
本発明では、ＢＣエントリ／ＭＣエントリに加え、ワイルドカードエントリも最初に同期させる。
【０１４４】
ワイルドカードエントリとは、フローエントリのルールにおいて、送信先ＭＡＣアドレス（ｄｓｔ  ＭＡＣ）、送信元ＭＡＣアドレス（ｓｒｃ  ＭＡＣ）、送信先ＩＰアドレス（ｄｓｔ  ＩＰ）、及び送信元ＩＰアドレス（ｓｒｃ  ＩＰ）の４つの欄（特定４欄）のうち少なくとも１つでワイルドカードが使用されているフローエントリを指すものとする。
【０１４５】
ここでは、ＢＣエントリ／ＭＣエントリ／ワイルドカードエントリを、「特殊エントリ」と呼ぶ。
【０１４６】
また、特殊エントリではないフローエントリを、「通常エントリ」と呼ぶ。
【０１４７】
通常エントリは、特定４欄で１つもワイルドカードが使用されずに具体的な値が入力されているものであり、アドレス記入欄にブロードキャストアドレスやマルチキャストアドレスが入力されていないものである。
【０１４８】
また、スイッチ（ＯＦＳ）は、特殊エントリ全同期フラグを持つ。
【０１４９】
特殊エントリ全同期フラグは、設定済みのＢＣエントリ／ＭＣエントリ／ワイルドカードエントリが、全て同期している場合に「真」（ｔｒｕｅ）となり、そうでない場合に「偽」（ｆａｌｓｅ）となるものである。
【０１５０】
あるパケットがスイッチ（ＯＦＳ）に到着した場合に、当該パケットに特定４欄がマッチする通常エントリをフローテーブルから検索した場合、当該パケットに特定４欄がマッチする通常エントリを０個以上検出する。
【０１５１】
［ネットワーク構成］
図８を参照して、本発明に係るネットワークシステムの構成例について詳細に説明する。
【０１５２】
本発明に係るネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０と、ホスト３０を含む。
【０１５３】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）を管理する。
【０１５４】
スイッチ（ＯＦＳ）２０は、ネットワークを構成する。
【０１５５】
ホスト３０は、スイッチ（ＯＦＳ）２０に接続され、スイッチ（ＯＦＳ）２０を介してネットワーク通信を行う。
【０１５６】
コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間は、セキュアチャネルで接続されている。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０は、セキュアチャネルを経由し、オープンフロープロトコルに則った通信を行う。
【０１５７】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に到着するパケットをスイッチ（ＯＦＳ）２０がどのように処理するかについて、フローエントリを操作することにより制御する。
【０１５８】
スイッチ（ＯＦＳ）２０は、フローテーブルを少なくとも１つ保持している。コントローラ（ＯＦＣ）１０は、配下の全てのスイッチ（ＯＦＳ）２０のフローテーブルと同じ内容のフローテーブルを保持している。すなわち、コントローラ（ＯＦＣ）１０は、配下のスイッチ（ＯＦＳ）２０毎のフローテーブルのマスターテーブルを保持している。スイッチ（ＯＦＳ）２０のフローテーブルは、コントローラ（ＯＦＣ）１０のフローテーブルのコピー（複製）である。
【０１５９】
また、コントローラ（ＯＦＣ）１０は、管理するスイッチ（ＯＦＳ）毎に、特殊エントリ全同期フラグを持つ。
【０１６０】
［コントローラ（ＯＦＣ）の構成］
次に、コントローラ（ＯＦＣ）１０の構成例について説明する。
【０１６１】
コントローラ（ＯＦＣ）１０は、セキュアチャネル監視部１１と、フローテーブル管理部１２と、部分同期処理部１３と、経路計算部１４を備える。
【０１６２】
セキュアチャネル監視部１１は、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０との間で通信を行うためのセキュアチャネルを監視し、通信が途絶えた場合にそれを検出する。
【０１６３】
フローテーブル管理部１２は、コントローラ（ＯＦＣ）１０のフローテーブルを管理する。
【０１６４】
なお、フローテーブル管理部１２は、同期フラグ変更部１２１を含む。
【０１６５】
同期フラグ変更部１２１は、コントローラ（ＯＦＣ）１０のフローテーブル内の同期フラグの値を変更する。
【０１６６】
部分同期処理部１３は、コントローラ（ＯＦＣ）１０のフローテーブルと、スイッチ（ＯＦＳ）２０のフローテーブルとの間で、特殊エントリであるＢＣエントリ／ＭＣエントリ／ワイルドカードエントリを同期する。すなわち、部分同期処理部１３は、全てのフローエントリを同期させる処理（完全ａｕｄｉｔ処理）ではなく、特殊エントリのみ先に同期させる処理（部分ａｕｄｉｔ処理）を行う。
【０１６７】
経路計算部１４は、スイッチ（ＯＦＳ）にファーストパケットが到着した際に、スイッチ（ＯＦＳ）からの経路計算要求を受けて、当該パケットに対するフローエントリを導出する。このとき、経路計算の入力として、コントローラ（ＯＦＣ）１０のフローテーブルを参照する。
【０１６８】
［スイッチ（ＯＦＳ）の構成］
次に、スイッチ（ＯＦＳ）２０の構成例について説明する。
【０１６９】
スイッチ（ＯＦＳ）２０は、セキュアチャネル監視部２１と、フローテーブル管理部２２と、部分同期処理部２３と、パケット処理部２４を備える。
【０１７０】
セキュアチャネル監視部２１は、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０との間で通信を行うためのセキュアチャネルを監視し、通信が途絶えた場合にそれを検出する。
【０１７１】
フローテーブル管理部２２は、スイッチ（ＯＦＳ）２０のフローテーブルを更新する。
【０１７２】
なお、フローテーブル管理部２２は、同期フラグ変更部２２１を含む。
【０１７３】
同期フラグ変更部２２１は、スイッチ（ＯＦＳ）２０のフローテーブルの同期フラグの値を変更する。
【０１７４】
部分同期処理部２３は、コントローラ（ＯＦＣ）１０のフローテーブルと、スイッチ（ＯＦＳ）２０のフローテーブルとの間で、特殊エントリであるＢＣエントリ／ＭＣエントリ／ワイルドカードエントリを同期する。
【０１７５】
パケット処理部２４は、ホストやスイッチから受けたパケットについて、スイッチ（ＯＦＳ）２０のフローテーブルから、マッチするフローエントリを検索し、マッチするフローエントリが検出された場合、マッチするフローエントリのアクションに記載された内容に従ってパケットを処理する。例えば、ホストや他のスイッチへのパケットの転送や、パケットの破棄等の処理を行う。また、マッチするフローエントリが検出されなかった場合（ファーストパケットの場合）、コントローラ（ＯＦＣ）１０に、ファーストパケットのコピーを転送することで経路計算を依頼し、コントローラ（ＯＦＣ）１０からのフローエントリの追加登録を待ち、フローエントリの追加登録があれば、追加登録されたフローエントリのアクションに記載された内容に従って適宜パケットを処理する。
【０１７６】
［セキュアチャネル監視部の動作］
図９を参照して、コントローラ（ＯＦＣ）１０のセキュアチャネル監視部１１、及び、スイッチ（ＯＦＳ）２０のセキュアチャネル監視部２１の動作について説明する。
【０１７７】
なお、セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０のそれぞれの装置が起動し、セキュアチャネルの通信が開始してから、動作を開始する。
【０１７８】
（１）ステップＡ１
セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、セキュアチャネルを監視する。
【０１７９】
（２）ステップＡ２
次に、セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、通信が途絶えたか否かの判断を行う。通信が正常に行われている場合は、監視を継続する。
【０１８０】
（３）ステップＡ３
セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、通信の切断を検知した場合、フローテーブルに含まれる全フローエントリ（特殊エントリ及び通常エントリの全て）の同期フラグの値を「偽」（ｆａｌｓｅ）に更新する。
【０１８１】
例えば、コントローラ（ＯＦＣ）１０のセキュアチャネル監視部１１は、セキュアチャネルの通信切断を検知した場合、フローテーブル管理部１２に、コントローラ（ＯＦＣ）１０のフローテーブルの同期フラグの欄を全て「偽」（ｆａｌｓｅ）に更新する旨を指示する。フローテーブル管理部１２の同期フラグ変更部１２１は、指示に応じて、コントローラ（ＯＦＣ）１０のフローテーブルの同期フラグの欄を全て「偽」（ｆａｌｓｅ）に更新する。このフローテーブルは、当該セキュアチャネルで接続されていたスイッチ（ＯＦＳ）２０のフローテーブルに対応する。
【０１８２】
また、スイッチ（ＯＦＳ）２０のセキュアチャネル監視部２１は、セキュアチャネルの通信切断を検知した場合、フローテーブル管理部２２に、スイッチ（ＯＦＳ）２０のフローテーブルの同期フラグの欄を全て「偽」（ｆａｌｓｅ）に更新する旨を指示する。フローテーブル管理部２２の同期フラグ変更部２２１は、指示に応じて、スイッチ（ＯＦＳ）２０のフローテーブルの同期フラグの欄を全て「偽」（ｆａｌｓｅ）に更新する。
【０１８３】
（４）ステップＡ４
次に、セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、特殊エントリ全同期フラグの値を「偽」（ｆａｌｓｅ）に更新する。
【０１８４】
例えば、コントローラ（ＯＦＣ）１０のセキュアチャネル監視部１１は、セキュアチャネルの通信切断を検知した場合、コントローラ（ＯＦＣ）１０の特殊エントリ全同期フラグの値を「偽」（ｆａｌｓｅ）に更新する。この特殊エントリ全同期フラグは、当該セキュアチャネルで接続されていたスイッチ（ＯＦＳ）２０の特殊エントリ全同期フラグに対応する。
【０１８５】
また、スイッチ（ＯＦＳ）２０のセキュアチャネル監視部２１は、セキュアチャネルの通信切断を検知した場合、スイッチ（ＯＦＳ）２０の特殊エントリ全同期フラグの値を「偽」（ｆａｌｓｅ）に更新する。
【０１８６】
（５）ステップＡ５
その後、セキュアチャネル監視部１１及びセキュアチャネル監視部２１は、セキュアチャネル通信の再開を待ち合わせてから、通信の監視を再開する。
【０１８７】
［部分同期処理部の動作］
図１０を参照して、コントローラ（ＯＦＣ）１０の部分同期処理部１３、及び、スイッチ（ＯＦＳ）２０の部分同期処理部２３の動作について説明する。
【０１８８】
ここでは、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０のそれぞれの特殊エントリ全同期フラグの値が「真」（ｔｒｕｅ）から「偽」（ｆａｌｓｅ）に更新されたものとする。
【０１８９】
（１）ステップＢ１
コントローラ（ＯＦＣ）１０の部分同期処理部１３は、特殊エントリ全同期フラグの更新を検知して動作（部分ａｕｄｉｔ処理）を開始する。例えば、部分同期処理部１３は、特殊エントリ全同期フラグの値が「真」（ｔｒｕｅ）から「偽」（ｆａｌｓｅ）に更新された場合に動作するイベントハンドラのような形式で実装される。まず、部分同期処理部１３は、コントローラ（ＯＦＣ）１０のフローテーブルを参照し、全ての特殊エントリを検索する。特殊エントリとは、ＢＣエントリ／ＭＣエントリ／ワイルドカードエントリを指す。ＢＣエントリは、ルールにブロードキャストアドレスが記載されたものである。ＭＣエントリは、ルールにマルチキャストアドレスが記載されたものである。ワイルドカードエントリは、ルールの特定４欄で、「＊」か「？」が、１つ以上記載されているものである。従って、単純な検索となる。
【０１９０】
（２）ステップＢ２
次に、部分同期処理部１３は、検索して見つかった全ての特殊エントリの同期フラグの値を「真」（ｔｒｕｅ）に更新する。
【０１９１】
（３）ステップＢ３
次に、部分同期処理部１３は、検索して見つかった全ての特殊エントリの情報を特殊エントリ同期要求に付与してスイッチ（ＯＦＳ）２０に通知することで、スイッチ（ＯＦＳ）２０に特殊エントリの同期を要求し、スイッチ（ＯＦＳ）２０からの同期完了の応答の待ち合わせをする。
【０１９２】
（４）ステップＢ４
スイッチ（ＯＦＳ）２０の部分同期処理部２３は、コントローラ（ＯＦＣ）１０の部分同期処理部１３から、特殊エントリの情報が付与された特殊エントリ同期要求（特殊エントリの情報の通知）を受けて、特殊エントリ同期処理を開始する。
【０１９３】
（５）ステップＢ５
部分同期処理部２３は、スイッチ（ＯＦＳ）２０のフローテーブルから、特殊エントリ同期要求に付与されていた全ての特殊エントリを検索し、検索して見つかった全ての特殊エントリを削除する。
【０１９４】
（６）ステップＢ６
次に、部分同期処理部２３は、特殊エントリ同期要求に付与されていた全ての特殊エントリを、スイッチ（ＯＦＳ）２０のフローテーブルに追加登録し、追加登録された特殊エントリの同期フラグの値を「真」（ｔｒｕｅ）に更新する。
【０１９５】
（７）ステップＢ７
次に、部分同期処理部２３は、スイッチ（ＯＦＳ）２０の特殊エントリ全同期フラグの値を「真」（ｔｒｕｅ）に更新する。
【０１９６】
（８）ステップＢ８
次に、部分同期処理部２３は、コントローラ（ＯＦＣ）１０に対し、特殊エントリ同期処理の完了を通知する。
【０１９７】
（９）ステップＢ９
コントローラ（ＯＦＣ）１０の部分同期処理部１３は、スイッチ（ＯＦＳ）２０の部分同期処理部２３から特殊エントリ同期処理完了の通知を受けて、コントローラ（ＯＦＣ）１０の特殊エントリ全同期フラグの値を「真」（ｔｒｕｅ）に更新する。
【０１９８】
［パケット処理部の動作］
図１１を参照して、スイッチ（ＯＦＳ）２０のパケット処理部２４の動作について説明する。
【０１９９】
（１）ステップＣ１
スイッチ（ＯＦＳ）２０のパケット処理部２４は、ホストや他のスイッチから転送されたパケットを受信した場合、動作を開始し、特殊エントリ全同期フラグの値が「真」（ｔｒｕｅ）であるか確認する。
【０２００】
（２）ステップＣ２
パケット処理部２４は、特殊エントリ全同期フラグの値が「偽」（ｆａｌｓｅ）の場合、当該パケットを破棄する。
【０２０１】
（３）ステップＣ３
パケット処理部２４は、特殊エントリ全同期フラグの値が「真」（ｔｒｕｅ）の場合、当該パケットのヘッダ情報等を参照し、当該パケットのＬ１〜Ｌ４の情報（属性値）を調べ、スイッチ（ＯＦＳ）２０のフローテーブルからマッチするフローエントリを検索する。この検索では、特殊エントリ及び通常エントリの全てが検索の対象となる。
【０２０２】
（４）ステップＣ４
パケット処理部２４は、検索の結果、当該パケットに（ルール全体が）マッチする特殊エントリが見つかったか確認する。
【０２０３】
（５）ステップＣ５
パケット処理部２４は、当該パケットに（ルール全体が）マッチする特殊エントリが見つからない場合、当該パケットに特定４欄がマッチする通常エントリが見つかったか確認する。
【０２０４】
（６）ステップＣ６
パケット処理部２４は、当該パケットに特定４欄がマッチする通常エントリが見つかった場合、見つかった通常エントリの同期フラグの値が「真」（ｔｒｕｅ）であるか確認する。
【０２０５】
（７）ステップＣ７
パケット処理部２４は、検索の結果、当該パケットに特定４欄がマッチする通常エントリが見つからなかった場合、或いは、見つかった通常エントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）である場合、コントローラ（ＯＦＣ）１０に経路計算要求を送信し、その経路計算の完了を待ち合わせる。コントローラ（ＯＦＣ）１０の経路計算部１４は、経路計算要求に応じて、経路計算を行い、経路計算の結果として、スイッチ（ＯＦＳ）２０のフローテーブルに、同期フラグの値が「真」（ｔｒｕｅ）である通常エントリを１つ追加登録する。或いは、経路計算部１４は、同期フラグの値が「偽」（ｆａｌｓｅ）となっている通常エントリに対して、同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新する。また、コントローラ（ＯＦＣ）１０の部分同期処理部１３は、経路計算の過程で、必要に応じて、部分同期処理を実行する。なお、スイッチ（ＯＦＳ）２０側での通常エントリの追加登録は、コントローラ（ＯＦＣ）１０からの指示に応じて、スイッチ（ＯＦＳ）２０のフローテーブル管理部２２が行う。また、スイッチ（ＯＦＳ）２０側での同期フラグの値の更新は、コントローラ（ＯＦＣ）１０からの指示に応じて、フローテーブル管理部２２の同期フラグ変更部２２１が行う。
【０２０６】
（８）ステップＣ８
パケット処理部２４は、マッチするフローエントリのうち、最も優先度の高いフローエントリを選択し、選択されたフローエントリのアクションを参照し、記載されている内容に従ってパケットを処理する。例えば、パケット処理部２４は、「パケットをホストや他のスイッチに転送する」、或いは、「パケットを廃棄する」といった処理を行う。
【０２０７】
［経路計算部の動作］
図１２を参照して、コントローラ（ＯＦＣ）１０の経路計算部１４の動作について説明する。
【０２０８】
（１）ステップＤ１
コントローラ（ＯＦＣ）１０の経路計算部１４は、スイッチ（ＯＦＳ）２０から発行された経路計算要求を受信する（ステップＣ７参照）。経路計算部１４は、この経路計算要求に応じて、動作を開始する。なお、この経路計算要求には、少なくとも、元々スイッチ（ＯＦＳ）２０が受信して目下の経路計算の対象となっているパケット（ファーストパケット）の送信先・送信元のＬ１〜Ｌ４の情報（属性値）が格納されているものとする。実際には、経路計算要求には、ファーストパケットのコピー（複製）を格納しても良い。
【０２０９】
（２）ステップＤ２
経路計算部１４は、受信した経路計算要求から、ファーストパケットのＬ１〜Ｌ４の送信元・送信先のＬ１〜Ｌ４の情報（属性値）を取り出す（抽出する）。
【０２１０】
（３）ステップＤ３
経路計算部１４は、同期フラグの値が「真」（ｔｒｕｅ）であり、取り出したＬ１〜Ｌ４の情報（属性値）に特定４欄がマッチする通常エントリを、コントローラ（ＯＦＣ）１０のフローテーブルから検索する。
【０２１１】
（４）ステップＤ４
経路計算部１４は、検索の結果、同期フラグの値が「真」（ｔｒｕｅ）であり、取り出したＬ１〜Ｌ４の情報（属性値）に特定４欄がマッチする通常エントリが１つ以上見つかったか確認する。
【０２１２】
（５）ステップＤ５
経路計算部１４は、同期フラグの値が「真」（ｔｒｕｅ）であり、取り出したＬ１〜Ｌ４の情報（属性値）に特定４欄がマッチする通常エントリが１つ以上見つかった場合、見つかった通常エントリのうち、当該ファーストパケットに特定４欄だけでなくルール全てがマッチする通常エントリがあるか否か確認する。
【０２１３】
（６）ステップＤ６
経路計算部１４は、ルール全てがマッチする通常エントリが１つ以上見つかった場合、見つかった全ての通常エントリの同期フラグの欄を「真」（ｔｒｕｅ）に更新する。
【０２１４】
（７）ステップＤ７
経路計算部１４は、見つかった全ての通常エントリを、スイッチ（ＯＦＳ）２０に通知する。例えば、経路計算部１４は、見つかった全ての通常エントリをスイッチ（ＯＦＳ）２０のフローテーブルに登録するための制御メッセージを、スイッチ（ＯＦＳ）２０に送信する。
【０２１５】
（８）ステップＤ８
経路計算部１４は、マッチする通常エントリが検索されない場合は、ファーストパケットの転送先を記述した通常エントリを新たにスイッチ（ＯＦＳ）２０に登録する必要があり、経路計算が必要となる。このとき、経路計算部１４は、経路計算に先立って、コントローラ（ＯＦＣ）１０が持つ全てのフローテーブル（配下の全てのスイッチ（ＯＦＳ）のフローテーブル）から、ファーストパケットに関連する全ての通常エントリを収集する。すなわち、経路計算部１４は、同期済み／未同期の状態や、特殊エントリ／通常エントリの区別なく、ファーストパケットに特定４欄がマッチする全ての通常エントリを、コントローラ（ＯＦＣ）１０が持つ全てのフローテーブルから検索し、同期する。
【０２１６】
（９）ステップＤ９
経路計算部１４は、経路計算を実行する。ここでは、経路計算部１４は、ダイクストラのアルゴリズムにより経路を計算する。経路計算の入力として、「トポロジー情報」及び「通常エントリ情報」の２つが揃っている必要がある。トポロジー情報は、当該ネットワークを構成するホストやスイッチ等の接続情報であり、ネットワーク管理者等により事前にコントローラ（ＯＦＣ）１０に登録されている。通常エントリ情報は、各スイッチに既に登録された通常エントリのうち、当該パケットがマッチする全ての通常エントリの情報であり、経路計算の際に収集したものである。従って、この時点で経路の計算が可能となっている。経路計算部１４は、経路計算の結果として、配下のスイッチ（ＯＦＳ）２０に登録する通常エントリを得る。
【０２１７】
（１０）ステップＤ１０
経路計算部１４は、経路計算の結果として得られた通常エントリを、コントローラ（ＯＦＣ）１０のフローテーブルに追加登録する。例えば、経路計算部１４は、コントローラ（ＯＦＣ）１０のフローテーブル管理部１２に、当該通常エントリをコントローラ（ＯＦＣ）１０のフローテーブルに追加登録する旨を指示する。このとき、コントローラ（ＯＦＣ）１０のフローテーブル管理部１２の同期フラグ変更部１２１は、コントローラ（ＯＦＣ）１０のフローテーブルに追加登録された通常エントリの同期フラグの値を「真」（ｔｒｕｅ）に更新しておく。
【０２１８】
（１１）ステップＤ１１
次に、経路計算部１４は、コントローラ（ＯＦＣ）１０のフローテーブルに対して追加登録した通常エントリを、スイッチ（ＯＦＳ）２０のフローテーブルに反映する。例えば、経路計算部１４は、スイッチ（ＯＦＳ）２０に対して制御メッセージを送信し、スイッチ（ＯＦＳ）２０のフローテーブル管理部２２に、当該通常エントリをスイッチ（ＯＦＳ）２０のフローテーブルに追加登録する旨を指示する。スイッチ（ＯＦＳ）２０のフローテーブル管理部２２は、指示に応じて、当該通常エントリをスイッチ（ＯＦＳ）２０のフローテーブルに追加登録する。このとき、スイッチ（ＯＦＳ）２０のフローテーブル管理部２２の同期フラグ変更部２２１は、スイッチ（ＯＦＳ）２０のフローテーブルに追加登録された通常エントリの同期フラグの値を「真」（ｔｒｕｅ）に更新しておく。
【０２１９】
以上の処理より、コントローラ（ＯＦＣ）１０は、パケット転送に必要となる通常エントリの追加登録・同期を完了し、スイッチ（ＯＦＳ）２０は、ステップＣ８でのパケット転送の実行が可能となる。
【０２２０】
［パケット到達時の実際の動作］
図１３、図１４を参照して、スイッチ（ＯＦＳ）２０にパケットが到達した時の実際の動作について説明する。
【０２２１】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０を管理しているものとする。任意のタイミングでスイッチ（ＯＦＳ）２０にパケットが到着したとする。この場合に、当該パケットにマッチするフローエントリが、どのような状態になっているかについて一覧を示したのが、図１３に示す「パターン１」から「パターン５」である。
【０２２２】
図１３、図１４の中央の横線（区切り線）より上部（コントローラ（ＯＦＣ）側）には、コントローラ（ＯＦＣ）１０のフローテーブル内のフローエントリの中で、当該パケットに関連するフローエントリを示している。
【０２２３】
図１３、図１４の中央の横線（区切り線）より下部（スイッチ（ＯＦＳ）側）には、スイッチ（ＯＦＳ）２０のフローテーブル内のフローエントリの中で、当該パケットに関連するフローエントリを示している。
【０２２４】
ここで、当該パケットに関連するフローエントリとは、パケットに（ルール全体が）マッチする特殊エントリ一式と、パケットに特定４欄がマッチする通常エントリ一式を指す。
【０２２５】
なお、「グレー」（塗り潰し）のフローエントリは、ファーストパケットに（ルール全体が）マッチする特殊エントリを示している。
【０２２６】
また、「白色」（無色）のフローエントリは、同期フラグの値が「真」（ｔｒｕｅ）の通常エントリを示している。
【０２２７】
また、「斜線」が引かれているフローエントリは、同期フラグの値が「偽」（ｆａｌｓｅ）の通常エントリを示している。
【０２２８】
また、「★印」がついているフローエントリは、ファーストパケットに特定４欄がマッチする通常エントリを示している。
【０２２９】
図１３に示した例において、コントローラ（ＯＦＣ）１０が自身のフローテーブルからファーストパケットがマッチするフローエントリを検索した場合、各々のフローテーブルにおいて、０個以上の「特殊エントリ」を検出する。このとき、検出された特殊エントリは必ず同期状態となっており、同期フラグの値は「真」（ｔｒｕｅ）となっている。
【０２３０】
スイッチ（ＯＦＳ）２０は、これらの特殊エントリと全く同じ内容のエントリを保持している。それらのエントリは同期状態となっており、同期フラグの値は「真」（ｔｒｕｅ）となっている。
【０２３１】
一方で、コントローラ（ＯＦＣ）１０／スイッチ（ＯＦＳ）２０が各々のフローテーブルからファーストパケットがマッチするフローエントリを検索した場合、各々のフローテーブルにおいて、０個以上の「特定４欄がマッチする通常エントリ」を検出する。このとき、検出された通常エントリの同期状態（及び同期フラグの値）は様々である。検出された通常エントリの同期状態として、パターン１からパターン５の組み合わせが考えられる。
【０２３２】
［パターン１］
パターン１は、通常エントリが同期済みで、特定４欄がマッチするケースを示す。すなわち、スイッチ（ＯＦＳ）２０のフローテーブルに、コントローラ（ＯＦＣ）１０のフローテーブル内の通常エントリと対応する同期済みの通常エントリが存在し、それらの同期済みの通常エントリの中に、受信パケットに特定４欄がマッチする通常エントリが存在する場合である。
【０２３３】
この場合は、経路計算が不要である。
【０２３４】
例えば、図１１のステップＣ８に示したように、スイッチ（ＯＦＳ）２０は、マッチするフローエントリのうち、最も優先度の高いフローエントリを選択し、選択されたフローエントリのアクションを参照し、記載されている内容に従ってパケットを処理する。
【０２３５】
［パターン２］
パターン２は、通常エントリが同期済みであるが、特定４欄がマッチしないケースを示す。すなわち、スイッチ（ＯＦＳ）２０のフローテーブルに、コントローラ（ＯＦＣ）１０のフローテーブル内の通常エントリと対応する同期済みの通常エントリが存在するが、それらの同期済みの通常エントリの中に、受信パケットに特定４欄がマッチする通常エントリが存在しない場合である。
【０２３６】
この場合は、経路計算が必要となる。
【０２３７】
例えば、図１２のステップＤ８〜ステップＤ１１に示したように、コントローラ（ＯＦＣ）１０は、経路計算の結果として得られた通常エントリを、自身のフローテーブルに登録し、スイッチ（ＯＦＳ）２０のフローテーブルに反映する。
【０２３８】
このとき、図１２のステップＤ８に示したように、コントローラ（ＯＦＣ）１０は、ネットワークを構成する他のスイッチ（ＯＦＳ）に対しても、ファーストパケットにマッチするフローエントリを収集する必要がある。また、コントローラ（ＯＦＣ）１０は、他のスイッチ（ＯＦＳ）に対する同期処理において、未同期のフローエントリを収集した場合は、他のスイッチ（ＯＦＳ）の未同期のフローエントリも同時に同期することになる。
【０２３９】
他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細については、図１４を用いて後に説明する。
【０２４０】
［パターン３］
パターン３は、通常エントリが未同期であるが、特定４欄がマッチするケースを示す。すなわち、スイッチ（ＯＦＳ）２０のフローテーブルに、コントローラ（ＯＦＣ）１０のフローテーブル内の通常エントリと対応する未同期の通常エントリが存在し、それらの未同期の通常エントリの中に、受信パケットに特定４欄がマッチする通常エントリが存在する場合である。
【０２４１】
この場合も、経路計算は必要ではない。
【０２４２】
例えば、図１１のステップＣ６において、スイッチ（ＯＦＳ）２０は、見つかった通常エントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）であるため、図１１のステップＣ７に示したように、コントローラ（ＯＦＣ）１０に経路計算要求を送信し、その経路計算の完了を待ち合わせる。
【０２４３】
ところが、コントローラ（ＯＦＣ）１０側では、改めて計算するまでもなく、未同期のフローエントリが見つかることになる。
【０２４４】
この場合、コントローラ（ＯＦＣ）１０は、見つかった未同期の通常エントリの同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新する。そして、その通常エントリを、同期フラグの値を「真」（ｔｒｕｅ）としてスイッチ（ＯＦＳ）２０に反映する。このとき、コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に既に登録されている未同期の通常エントリを上書きする形で更新し、この通常エントリの同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新する。これにより、スイッチ（ＯＦＳ）２０に既に登録されている未同期の通常エントリは、同期済みの通常エントリとなる。
【０２４５】
スイッチ（ＯＦＳ）２０は、同期済みとなった通常エントリに従って、パケット転送が可能となる。
【０２４６】
［パターン４］
パターン４は、通常エントリが未同期で、特定４欄がマッチしないケースを示す。すなわち、スイッチ（ＯＦＳ）２０のフローテーブルに、コントローラ（ＯＦＣ）１０のフローテーブル内の通常エントリと対応する未同期の通常エントリが存在するが、未同期の通常エントリの中に、受信パケットに特定４欄がマッチする通常エントリが存在しない場合である。
【０２４７】
この場合は、経路計算が必要となる。
【０２４８】
例えば、図１１のステップＣ５において、検索の結果、当該パケットに特定４欄がマッチする通常エントリが見つからない場合、或いは、当該パケットに特定４欄がマッチする通常エントリが見つかったとしても、図１１のステップＣ６において、見つかった通常エントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）である場合、図１１のステップＣ７に示したように、コントローラ（ＯＦＣ）１０に経路計算要求を送信し、その経路計算の完了を待ち合わせる。
【０２４９】
コントローラ（ＯＦＣ）１０は、経路計算要求に応じて、経路計算を行い、経路計算の結果として、スイッチ（ＯＦＳ）２０のフローテーブルに、同期フラグの値が「真」（ｔｒｕｅ）である通常エントリを１つ追加登録する。
【０２５０】
このとき、図１２のステップＤ８に示したように、コントローラ（ＯＦＣ）１０は、ネットワークを構成する他のスイッチ（ＯＦＳ）に対しても、ファーストパケットにマッチするフローエントリを収集する必要がある。また、コントローラ（ＯＦＣ）１０は、他のスイッチ（ＯＦＳ）に対する同期処理において、未同期のフローエントリを収集した場合は、他のスイッチ（ＯＦＳ）の未同期のフローエントリも同時に同期することになる。
【０２５１】
他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細については、図１４を用いて後に説明する。
【０２５２】
［パターン５］
パターン５は、通常エントリ自体が存在しないケースを示す。すなわち、同期状態に関係なく、スイッチ（ＯＦＳ）２０のフローテーブルに、コントローラ（ＯＦＣ）１０のフローテーブル内の通常エントリと対応する通常エントリが存在しない場合である。
【０２５３】
この場合は、経路計算が必要となる。
【０２５４】
例えば、図１１のステップＣ５において、検索の結果、当該パケットに特定４欄がマッチする通常エントリが見つからない場合、図１１のステップＣ７に示したように、コントローラ（ＯＦＣ）１０に経路計算要求を送信し、その経路計算の完了を待ち合わせる。
【０２５５】
コントローラ（ＯＦＣ）１０は、経路計算要求に応じて、経路計算を行い、経路計算の結果として、スイッチ（ＯＦＳ）２０のフローテーブルに、同期フラグの値が「真」（ｔｒｕｅ）である通常エントリを１つ追加登録する。
【０２５６】
このとき、図１２のステップＤ８に示したように、コントローラ（ＯＦＣ）１０は、ネットワークを構成する他のスイッチ（ＯＦＳ）に対しても、ファーストパケットにマッチするフローエントリを収集する必要がある。また、コントローラ（ＯＦＣ）１０は、他のスイッチ（ＯＦＳ）に対する同期処理において、未同期のフローエントリを収集した場合は、他のスイッチ（ＯＦＳ）の未同期のフローエントリも同時に同期することになる。
【０２５７】
他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細については、図１４を用いて後に説明する。
【０２５８】
［他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細］
次に、図１４を参照して、他のスイッチ（ＯＦＳ）のフローエントリを収集する動作の詳細について説明する。なお、この動作は、図１２のステップＤ８の動作に相当する。
【０２５９】
ここでは、コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０から受け取ったパケットに対して、経路を計算しようとしているものとする。また、コントローラ（ＯＦＣ）１０は、ネットワークを構成する他のスイッチ（ＯＦＳ）として、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、スイッチ（ＯＦＳ）２０−３の３台のスイッチを管理しているものとする。
【０２６０】
コントローラ（ＯＦＣ）１０は、経路を計算するに当たって、既にスイッチ（ＯＦＳ）２０−１〜スイッチ（ＯＦＳ）２０−３に登録されていてファーストパケットに関連するフローエントリを収集する。
【０２６１】
図１４は、その際のスイッチ（ＯＦＳ）２０−１〜スイッチ（ＯＦＳ）２０−３のフローエントリの状態を図示したものである。
【０２６２】
（１）スイッチ（ＯＦＳ）２０−１のフローエントリの状態
スイッチ（ＯＦＳ）２０−１は、ファーストパケットに関連するフローエントリの全てが既に登録され、同期されている。
【０２６３】
この場合、コントローラ（ＯＦＣ）１０は、単にコントローラ（ＯＦＣ）１０のフローテーブルから、同じファーストパケットに関連するフローエントリを収集するだけで良い。
【０２６４】
（２）スイッチ（ＯＦＳ）２０−２のフローエントリの状態
スイッチ（ＯＦＳ）２０−２は、ファーストパケットに関連するフローエントリの一部が未だ登録されていない。ここでは、コントローラ（ＯＦＣ）１０のフローテーブルにおいて、同期フラグの値が「偽」（ｆａｌｓｅ）の通常エントリが１つ余分に存在する。
【０２６５】
この場合、コントローラ（ＯＦＣ）１０は、この通常エントリの同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新し、その同期フラグの値が「真」（ｔｒｕｅ）に更新された通常エントリをスイッチ（ＯＦＳ）２０−２に追加登録する。
【０２６６】
なお、コントローラ（ＯＦＣ）１０は、この通常エントリがスイッチ（ＯＦＳ）２０−２に既に登録されており、単に同期されていないだけである場合、この通常エントリの同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新し、スイッチ（ＯＦＳ）２０−２に既に登録されている通常エントリを上書きする形でスイッチ（ＯＦＳ）２０−２に追加登録する。これにより、スイッチ（ＯＦＳ）２０−２に既に登録されている通常エントリの同期フラグの値を「偽」（ｆａｌｓｅ）から「真」（ｔｒｕｅ）に更新する。
【０２６７】
（３）スイッチ（ＯＦＳ）２０−３のフローエントリの状態
スイッチ（ＯＦＳ）２０−３は、ファーストパケットに関連するフローエントリの一部が未だ同期されていない。ここでは、スイッチ（ＯＦＳ）２０−３のフローテーブルにのみ、同期フラグの値が「偽」（ｆａｌｓｅ）の通常エントリが１つ存在する。
【０２６８】
この場合、コントローラ（ＯＦＣ）１０は、この通常エントリがスイッチ（ＯＦＳ）２０−３に登録されていないものと判断し、この通常エントリをスイッチ（ＯＦＳ）２０−３から削除する。
【０２６９】
このように、コントローラ（ＯＦＣ）１０は、元々スイッチ（ＯＦＳ）に登録されていた未同期のフローエントリが存在する場合は、それらを削除する。
【０２７０】
これにより、必要となるフローエントリ情報が同期した状態で揃い、コントローラ（ＯＦＣ）１０は経路計算可能となる。
【０２７１】
経路計算の結果として得られたフローエントリを、図１２のステップＤ１０、Ｄ１１に示すように、コントローラ（ＯＦＣ）１０／各スイッチ（ＯＦＳ）のそれぞれのフローテーブルに登録する。
【０２７２】
このとき、コントローラ（ＯＦＣ）１０／各スイッチ（ＯＦＳ）の状態は、図１３に示した「パターン２」、「パターン４」、或いは「パターン５」の状態になっている。
【０２７３】
まず、コントローラ（ＯＦＣ）１０は、自身のフローエントリに、経路計算の結果として得られたフローエントリを、同期フラグの値を「真」（ｔｒｕｅ）にして登録する。
【０２７４】
次に、コントローラ（ＯＦＣ）１０は、各スイッチ（ＯＦＳ）のフローエントリにも、経路計算の結果として得られたフローエントリを、同期フラグの値を「真」（ｔｒｕｅ）として登録する。
【０２７５】
このとき、経路計算の結果として得られたフローエントリが、既に登録済みの特殊エントリに包含されるような内容である場合がある。この場合は、当該フローエントリを、その登録済みの特殊エントリより優先度を高くして登録するものとする。これは、スイッチ（ＯＦＳ）に同じパケットが再度到着した場合に、到着したパケットが、登録済みの特殊エントリよりも先に、経路計算の結果として得られたフローエントリにマッチするようにするために必要となる工夫である。
【０２７６】
＜本発明による効果＞
以下に、本発明による効果について説明する。
【０２７７】
本発明では、「エントリ同期フラグ変更処理」、及び、「部分同期処理」により、フローエントリ単位で同期状態を管理することが可能となるため、フローエントリ単位で同期することが可能になる。
【０２７８】
また、本発明では、「エントリ同期フラグ変更処理」、及び、「部分同期処理」により、経路計算に必要なフローエントリだけを選択して同期することが可能になる。これにより、計算に不必要なエントリの同期を待ち合わせる必要がなくなるため、経路計算に当たって不要な待ち時間がなくなる。
【０２７９】
また、本発明では、従来発生していた計算結果が不正確となる期間を無くすことが可能になったため、クラスタスイッチ時等セキュアチャネルが切断するような場合に発生するサービス縮退時間を短縮できる。
【０２８０】
［サービス縮退時間の短縮の理由］
図１５を参照して、サービス縮退時間を短縮できる理由について説明する。
【０２８１】
本発明では、コントローラ（ＯＦＣ）は、「ａｕｄｉｔ処理」（同期処理）の最初に、ＢＣエントリ／ＭＣエントリに加えて、ワイルドカードエントリを同期する。スイッチ（ＯＦＳ）は、「ａｕｄｉｔ処理」の間に到着したファーストパケットを破棄する。
【０２８２】
従って、上記の実装例Ｃに比べ、ワイルドカードエントリの同期処理の分だけ、パケットを破棄するまでの期間が少し長くなる。
【０２８３】
しかし、一方で、経路計算が不正確となる期間がなくなるため、結果として、サービス縮退時間の総量が大幅に減少する。
【０２８４】
＜ハードウェアの例示＞
以下に、本発明に係るネットワークシステムを実現するための具体的なハードウェアの例について説明する。
【０２８５】
コントローラ（ＯＦＣ）１０及びホスト３０の例として、ＰＣ（パソコン）、アプライアンス（ａｐｐｌｉａｎｃｅ）、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。また、ホスト３０の例として、携帯電話機、スマートフォン、スマートブック、カーナビ（カーナビゲーションシステム）、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット（電子機器）、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電（ｉｎｆｏｒｍａｔｉｏｎ  ｈｏｍｅ  ａｐｐｌｉａｎｃｅ）、ＯＡ（Ｏｆｆｉｃｅ  Ａｕｔｏｍａｔｉｏｎ）機器、店頭端末・高機能コピー機、デジタルサイネージ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｇｅ：電子看板）等も考えられる。なお、コントローラ（ＯＦＣ）１０及びホスト３０は、端末やサーバに限らず、中継機器や周辺機器でも良い。また、コントローラ（ＯＦＣ）１０及びホスト３０は、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）でも良い。
【０２８６】
スイッチ（ＯＦＳ）２０の例として、ネットワークスイッチ（ｎｅｔｗｏｒｋ  ｓｗｉｔｃｈ）、ルータ（ｒｏｕｔｅｒ）、プロキシ（ｐｒｏｘｙ）、ゲートウェイ（ｇａｔｅｗａｙ）、ファイアウォール（ｆｉｒｅｗａｌｌ）、ロードバランサ（ｌｏａｄ  ｂａｌａｎｃｅｒ：負荷分散装置）、帯域制御装置（ｐａｃｋｅｔ  ｓｈａｐｅｒ）、セキュリティ監視制御装置（ＳＣＡＤＡ：Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）、ゲートキーパー（ｇａｔｅｋｅｅｐｅｒ）、基地局（ｂａｓｅ  ｓｔａｔｉｏｎ）、アクセスポイント（ＡＰ：Ａｃｃｅｓｓ  Ｐｏｉｎｔ）、通信衛星（ＣＳ：Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓａｔｅｌｌｉｔｅ）、或いは、複数の通信ポートを有する計算機等が考えられる。また、物理マシン上に構築された仮想マシン（ＶＭ）により実現される仮想スイッチでも良い。
【０２８７】
コントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０、及びホスト３０は、車両や船舶、航空機等の移動体に搭載されていても良い。
【０２８８】
図示しないが、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０の各々は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【０２８９】
上記のプロセッサの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ネットワークプロセッサ（ＮＰ：Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ（ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ）、或いは、専用の機能を有する半導体集積回路（ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等が考えられる。
【０２９０】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のリムーバブルディスクや、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等の記憶媒体（メディア）等が考えられる。また、バッファ（ｂｕｆｆｅｒ）やレジスタ（ｒｅｇｉｓｔｅｒ）等でも良い。或いは、ＤＡＳ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＦＣ−ＳＡＮ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＩＰ−ＳＡＮ（ＩＰ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等を用いたストレージ装置でも良い。
【０２９１】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の１チップ化が進んでいる。従って、電子機器等に搭載される１チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例も考えられる。
【０２９２】
上記のインターフェースの例として、ネットワーク通信に対応した基板（マザーボード、Ｉ／Ｏボード）やチップ等の半導体集積回路、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口（コネクタ）等の通信ポート等が考えられる。
【０２９３】
また、ネットワークの例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、バックボーン（Ｂａｃｋｂｏｎｅ）、ケーブルテレビ（ＣＡＴＶ）回線、固定電話網、携帯電話網、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ａ）、３Ｇ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ）、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。
【０２９４】
なお、コントローラ（ＯＦＣ）１０及びスイッチ（ＯＦＳ）２０の各々の内部の構成要素は、モジュール（ｍｏｄｕｌｅ）、コンポーネント（ｃｏｍｐｏｎｅｎｔ）、或いは専用デバイス、又はこれらの起動（呼出）プログラムでも良い。
【０２９５】
但し、実際には、これらの例に限定されない。
【０２９６】
＜本発明の特徴＞
本発明では、オープンフローネットワークにおいて、コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）とのフローテーブルの同期処理を改善する。具体的には、コントローラ（ＯＦＣ）が、それぞれのフローテーブルを構成するフローエントリの同期状態を、フローエントリ単位で管理し、特定のフローエントリのみ先にスイッチ（ＯＦＳ）側と同期できるようにした。これにより、障害発生時やクラスタスイッチ時に発生するサービス縮退時間を減少させる効果が得られる。
【０２９７】
本発明は、オープンフローネットワークにおけるフローテーブルの同期処理の用途に適用できる。すなわち、ＣＵ分離型ネットワークシステムにおいて、制御装置とノード装置との間での経路情報の同期処理の用途に適用できる。
【０２９８】
＜付記＞
上記の実施形態の一部又は全部は、以下の付記のように記載することも可能である。但し、実際には、以下の記載例に限定されない。
【０２９９】
［付記１］
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、
当該スイッチに対して制御メッセージを送信し、当該フローエントリの設定を行うコントローラと
を含み、
当該コントローラは、当該スイッチに設定したフローエントリと同一のフローエントリを保持し、フローエントリ単位で同期状態を管理し、フローエントリが非同期の場合、当該スイッチとの間で、特定のフローエントリを優先して同期する
ネットワークシステム。
【０３００】
［付記２］
付記１に記載のネットワークシステムであって、
当該コントローラ及び当該スイッチの各々は、
フローエントリの集合であり、フローエントリ毎に、当該フローエントリの同期状態を示す同期フラグの欄が設けられたフローテーブルを保持する機能部と、
一部のフローエントリ（ブロードキャスト／マルチキャストのフローエントリ、及びワールドカードを含むフローエントリ等）を特殊エントリとし、特殊エントリの同期状態を示す特殊エントリ同期フラグを保持する機能部と、
セキュアチャネルの通信切断を検知した場合、全フローエントリの同期フラグ及び特殊エントリ同期フラグの値を偽（ｆａｌｓｅ）に更新する機能部と
を具備する
ネットワークシステム。
【０３０１】
［付記３］
付記２に記載のネットワークシステムであって、
当該コントローラは、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）であることを検知した際、特殊エントリを同期して、当該コントローラ自身及び当該スイッチの各々に対して、同期した特殊エントリの同期フラグ及び特殊エントリ同期フラグの値を真（ｔｒｕｅ）に更新する機能部と、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）であるが、当該スイッチが受信したパケットと特殊エントリがマッチしない場合、受信パケットと送信元・送信先がマッチするフローエントリを同期して、当該コントローラ自身及び当該スイッチの各々に対して、同期したフローエントリの同期フラグを真（ｔｒｕｅ）に更新する機能部と
を更に具備する
ネットワークシステム。
【０３０２】
［付記４］
付記２又は３に記載のネットワークシステムであって、
当該スイッチは、
特殊エントリ同期フラグの値が偽（ｆａｌｓｅ）である場合、受信パケットを破棄する機能部と、
特殊エントリ同期フラグの値が真（ｔｒｕｅ）である場合、当該スイッチのフローテーブルから、受信パケットがマッチするフローエントリを検索する機能部と、
検索の結果、受信パケットにマッチする特殊エントリが見つかったか確認する機能部と、
受信パケットにマッチする特殊エントリが見つからない場合、受信パケットに送信元・送信先がマッチするフローエントリが見つかったか確認する機能部と、
受信パケットに送信元・送信先がマッチするフローエントリが見つかった場合、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）であるか確認する機能部と、
受信パケットに送信元・送信先がマッチするフローエントリが見つからなかった場合、或いは、見つかったフローエントリの同期フラグの値が「真」（ｔｒｕｅ）でなく「偽」（ｆａｌｓｅ）である場合、受信パケットに関係するフローエントリを当該コントローラに問い合わせ、応答を待つ機能部と、
受信パケットにマッチするフローエントリのうち、最も優先度の高いフローエントリを選択し、選択されたフローエントリのアクションを参照し、記載されている内容に従ってパケットを処理する機能部と
を更に具備する
ネットワークシステム。
【０３０３】
＜備考＞
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【０３０４】
なお、本出願は、日本出願番号２０１２−００６１０５に基づく優先権を主張するものであり、日本出願番号２０１２−００６１０５における開示内容は引用により本出願に組み込まれる。
【図１】
0005842933.tif 000002
【図２】
0005842933.tif 000003
【図３】
0005842933.tif 000004
【図４】
0005842933.tif 000005
【図５】
0005842933.tif 000006
【図６】
0005842933.tif 000007
【図７】
0005842933.tif 000008
【図８】
0005842933.tif 000009
【図９】
0005842933.tif 000010
【図１０】
0005842933.tif 000011
【図１１】
0005842933.tif 000012
【図１２】
0005842933.tif 000013
【図１３】
0005842933.tif 000014
【図１４】
0005842933.tif 000015
【図１５】
0005842933.tif 000016