(57)【特許請求の範囲】
【請求項１】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、
前記フローエントリを、前記スイッチのフローテーブルに設定する複数のコントローラと
を具備し、
前記スイッチは、前記複数のコントローラに対し、コントローラ毎にフローテーブルを割り当て、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索し、前記複数のコントローラの各々との接続状態を確認し、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記スイッチは、接続状態が有効なコントローラから設定されたフローエントリが複数存在する場合、フローエントリ自体の優先度が最も高いものを採用し、同一の優先度のフローエントリが複数存在する場合、該フローエントリが設定されているフローテーブルの優先度が最も高いものを採用する
ネットワークシステム。
【請求項３】
請求項１又は２に記載のネットワークシステムであって、
前記複数のコントローラの各々は、前記スイッチに対して、自身へ転送させるパケットにマッチするマッチ条件と、該パケットを自身に転送する旨のアクションとを指定したパケットイン用のフローエントリを設定し、負荷分散を行う
ネットワークシステム。
【請求項４】
請求項１乃至３のいずれか一項に記載のネットワークシステムで使用されるコントローラ。
【請求項５】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定する複数のコントローラの各々と通信する手段と、
コントローラ毎に割り当てられ、前記各コントローラからフローエントリが設定されたフローテーブルを管理する手段と、
外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索する手段と、
前記各コントローラとの接続状態を確認する手段と、
該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理する手段と
を具備する
スイッチ。
【請求項６】
請求項５に記載のスイッチであって、
接続状態が有効なコントローラから設定されたフローエントリが複数存在する場合、フローエントリ自体の優先度が最も高いものを採用する手段と、
同一の優先度のフローエントリが複数存在する場合、該フローエントリが設定されているフローテーブルの優先度が最も高いものを採用する手段と
を更に具備する
スイッチ。
【請求項７】
スイッチが、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うことと、
複数のコントローラが、前記フローエントリを、前記スイッチのフローテーブルに設定することと、
前記スイッチが、前記複数のコントローラに対し、コントローラ毎にフローテーブルを割り当てることと、
前記スイッチが、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索することと、
前記スイッチが、前記複数のコントローラの各々との接続状態を確認することと、
前記スイッチが、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理することと
を含む
ネットワーク構築方法。
【請求項８】
請求項７に記載のネットワーク構築方法であって、
前記スイッチが、
接続状態が有効なコントローラから設定されたフローエントリが複数存在する場合、フローエントリ自体の優先度が最も高いものを採用することと、
同一の優先度のフローエントリが複数存在する場合、該フローエントリが設定されているフローテーブルの優先度が最も高いものを採用することとを更に含む
ネットワーク構築方法。
【請求項９】
請求項７又は８に記載のネットワーク構築方法であって、
前記複数のコントローラの各々が、前記スイッチに対して、自身へ転送させるパケットにマッチするマッチ条件と、該パケットを自身に転送する旨のアクションとを指定したパケットイン用のフローエントリを設定し、負荷分散を行うことを更に含む
ネットワーク構築方法。
【請求項１０】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定する複数のコントローラの各々と通信するステップと、
コントローラ毎に割り当てられ、前記各コントローラからフローエントリが設定されたフローテーブルを管理するステップと、
外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索するステップと、
前記各コントローラとの接続状態を確認するステップと、
該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理するステップと
をスイッチに実行させるための
プログラムを格納した記録媒体。
【請求項１１】
請求項１０に記載のプログラムであって、
接続状態が有効なコントローラから設定されたフローエントリが複数存在する場合、フローエントリ自体の優先度が最も高いものを採用するステップと、
同一の優先度のフローエントリが複数存在する場合、該フローエントリが設定されているフローテーブルの優先度が最も高いものを採用するステップと
を更にスイッチに実行させるための
プログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、特にネットワーク機器のパケット転送機能と経路制御機能を分離したネットワークシステムに関する。
【背景技術】
【０００２】
従来のネットワーク機器はブラックボックスであり、外部から負荷分散や片寄等柔軟性に富んだ制御ができない。このため、ネットワークの規模が大きくなると、システムとしての挙動の把握と改善が困難になり、設計や構成変更には多大なコストを伴うという問題があった。【０００３】
こうした課題を解決するための技術として、ネットワーク機器のパケット転送機能と経路制御機能を分離する手法が考えられている。例えば、パケット転送機能をネットワーク機器、制御機能をネットワーク機器の外部に分離した制御装置が担当することで、制御が容易になり柔軟性に富んだネットワークを構築することが可能になる。【０００４】
（ＣＵ分離型ネットワークの説明）
機能を分離したネットワークシステムの１つとして、外部の制御装置（コントロールプレーン）からノード装置（ユーザプレーン）を制御するＣＵ（Ｃ：コントロールプレーン／Ｕ：ユーザプレーン）分離型ネットワークが提案されている。【０００５】
ＣＵ分離型ネットワークの一例として、コントローラからスイッチを制御してネットワークの経路制御を行うオープンフロー（ＯｐｅｎＦｌｏｗ）技術を利用したオープンフローネットワークが挙げられる。オープンフロー技術の詳細については、非特許文献１に記載されている。なお、オープンフローネットワークは一例に過ぎない。【０００６】
（オープンフローネットワークの説明）
オープンフローネットワークでは、オープンフローコントローラ（ＯＦＣ：ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）等の制御装置が、オープンフロースイッチ（ＯＦＳ：ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）等のノード装置の経路制御に関するフローテーブル（Ｆｌｏｗ  ｔａｂｌｅ）を操作することにより、ノード装置の挙動を制御する。【０００７】
以下、記載の簡略化のため、オープンフローコントローラ（ＯＦＣ）を「コントローラ（ＯＦＣ）」と表記し、オープンフロースイッチ（ＯＦＳ）を「スイッチ（ＯＦＳ）」と表記する。【０００８】
コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）の間は、専用線やＳＳＬ（ＳｅｃｕｒｅＳｏｃｋｅｔＬａｙｅｒ）等により保護された通信路である「セキュアチャンネル」（Ｓｅｃｕｒｅ  Ｃｈａｎｎｅｌ）により接続されている。コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）とは、セキュアチャンネルを介して、オープンフロープロトコル（ＯｐｅｎＦｌｏｗ  Ｐｒｏｔｏｃｏｌ）に則った（準拠した）オープンフローメッセージ（ＯｐｅｎＦｌｏｗ  Ｍｅｓｓａｇｅ）を送受信する。【０００９】
オープンフローネットワークにおけるスイッチ（ＯＦＳ）とは、オープンフローネットワークを形成し、コントローラ（ＯＦＣ）の制御下にあるエッジスイッチ及びコアスイッチのことである。オープンフローネットワークにおける入口（Ｉｎｇｒｅｓｓ）側エッジスイッチでのパケット（ｐａｃｋｅｔ）の受信から出口（Ｅｇｒｅｓｓ）側エッジスイッチでの送信までのパケットの一連の流れをフロー（Ｆｌｏｗ）と呼ぶ。【００１０】
パケットは、フレーム（ｆｒａｍｅ）と読み替えても良い。パケットとフレームの違いは、プロトコルが扱うデータの単位（ＰＤＵ：Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔ）の違いに過ぎない。パケットは、「ＴＣＰ／ＩＰ」（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のＰＤＵである。一方、フレームは、「Ｅｔｈｅｒｎｅｔ（登録商標）」のＰＤＵである。【００１１】
フローテーブルとは、所定のマッチ条件（ルール）にマッチするパケット（通信データ）に対して行うべき所定の動作（アクション）を定義したフローエントリ（Ｆｌｏｗ  ｅｎｔｒｙ）が登録されるーブルである。【００１２】
フローエントリのルールは、パケットの各プロトコル階層のヘッダ領域（フィールド）に含まれる宛先アドレス（Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）、送信元アドレス（Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）、宛先ポート（Ｄｅｓｔｉｎａｔｉｏｎ  Ｐｏｒｔ）、送信元ポート（Ｓｏｕｒｃｅ  Ｐｏｒｔ）のいずれか又は全てを用いた様々な組み合わせにより定義され、区別可能である。なお、上記のアドレスには、ＭＡＣアドレス（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ａｄｄｒｅｓｓ）やＩＰアドレス（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ａｄｄｒｅｓｓ）を含むものとする。また、上記に加えて、入口ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）の情報も、フローエントリのルールとして使用可能である。また、フローエントリのルールとして、フローを示すパケットのヘッダ領域の値の一部（又は全部）を、正規表現やワイルドカード「＊」等で表現したものを設定することもできる。【００１３】
フローエントリのアクションは、「特定のポートに出力する」、「廃棄する」、「ヘッダを書き換える」といった動作を示す。例えば、スイッチ（ＯＦＳ）は、フローエントリのアクションに出力ポートの識別情報（出力ポート番号等）が示されていれば、これに該当するポートにパケットを出力し、出力ポートの識別情報が示されていなければ、パケットを廃棄する。或いは、スイッチ（ＯＦＳ）は、フローエントリのアクションにヘッダ情報が示されていれば、当該ヘッダ情報に基づいてパケットのヘッダを書き換える。【００１４】
オープンフローネットワークにおけるスイッチ（ＯＦＳ）は、フローエントリのルールにマッチするパケット群（パケット系列）に対して、フローエントリのアクションを実行する。【００１５】
（既存のオープンフローネットワークにおける課題）
以下に、既存のオープンフローネットワークにおける課題について説明する。【００１６】
（１）第１の課題：既存のオープンフローネットワークでは、全てのスイッチ（ＯＦＳ）をコントローラ（ＯＦＣ）が管理するため、コントローラ（ＯＦＣ）の負荷が高くなりやすく、フローエントリの設定に時間がかかってしまう場合がある。【００１７】
そのため、パケットが検出されたタイミングで全てのフローエントリを設定するのではなく、予め設定しておけるフローエントリをタイムアウトしないように設定しておき、環境が変化したタイミングでフローエントリを更新する（書き換える）というような手順をとることがある。【００１８】
この場合、コントローラ（ＯＦＣ）のみを冗長化し、１つのフローテーブルを複数のコントローラ（ＯＦＣ）で共有した場合、コントローラ（ＯＦＣ）同士が設定されたフローエントリを同期する必要があり、コントローラ（ＯＦＣ）側でフローエントリの同期機能をサポートしなければならない。【００１９】
更に、冗長構成のシステム（フォールトトレラントシステムやクラスタシステム）でコントローラ（ＯＦＣ）が構築されていると、運用系（アクティブ）と待機系（スタンバイ）との系が切り替わった場合に、旧アクティブ装置とスイッチ（ＯＦＳ）の間での同期状態と、新アクティブ装置と旧アクティブ装置間の同期状態とを一致させなければならず、そのための処理に時間がかかってしまう。なお、旧アクティブ装置とは、運用系（アクティブ）から待機系（スタンバイ）に切り替わったコントローラ（ＯＦＣ）である。また、新アクティブ装置とは、待機系（スタンバイ）から運用系（アクティブ）に切り替わったコントローラ（ＯＦＣ）である。【００２０】
（２）第２の課題：また、既存のオープンフローネットワークでは、コントローラ（ＯＦＣ）が停止した時に、影響がネットワーク全体に波及する可能性がある。このため、より自由にコントローラ（ＯＦＣ）の冗長化を行う技術が重要／必要となる。しかし、現時点では、そのような冗長化を行う技術は確立されていない。【００２１】
（３）第３の課題：また、既存のオープンフローネットワークでは、ネットワーク全体をコントローラ（ＯＦＣ）が管理する。このため、コントローラ（ＯＦＣ）の負荷が増大し、負荷分散を行うことも重要となり、必要となる。しかし、現時点では、この負荷分散に関する技術も確立されていない。【００２２】
（フローエントリ設定方式の違いによる課題）
オープンフローネットワークでは、スイッチ（ＯＦＳ）にフローエントリを設定する方式は、「Ｒｅａｃｔｉｖｅ型」と、「Ｐｒｏａｃｔｉｖｅ型」の２つの方式に大きく分けられる。【００２３】
「Ｒｅａｃｔｉｖｅ型」は、パケットイン（Ｐａｃｋｅｔ−ｉｎ）契機で、全てのフローエントリを設定する方式である。なお、パケットインとは、コントローラ（ＯＦＣ）にパケットの経路計算を要求するために、当該パケットのコピー（複製）をコントローラ（ＯＦＣ）へ転送することである。「Ｒｅａｃｔｉｖｅ型」では、コントローラ（ＯＦＣ）が「スイッチ（ＯＦＳ）からファーストパケット（該当フローエントリがない新規／最初のパケット）についての問い合わせを受けた際に、当該パケット群（フロー）の経路を計算し、スイッチ（ＯＦＳ）のフローテーブルにフローエントリを登録する。すなわち、ここでいう「Ｒｅａｃｔｉｖｅ型」とは、実際のデータ通信時に、コントローラ（ＯＦＣ）がスイッチ（ＯＦＳ）からの問い合わせに応じて行う「リアルタイムのフローエントリ登録」を指す。【００２４】
「Ｐｒｏａｃｔｉｖｅ型」は、基本的に予め設定可能なフローエントリを全て設定しておき、必要に応じてパケットイン契機等で最低限のフローエントリ設定を追加する方式である。「Ｐｒｏａｃｔｉｖｅ型」では、コントローラ（ＯＦＣ）が「事前に（データ通信が始まる前に）」所定のパケット群（フロー）の経路（パス）を計算し、スイッチ（ＯＦＳ）のフローテーブルにフローエントリを登録する。すなわち、ここでいう「Ｐｒｏａｃｔｉｖｅ型」とは、コントローラ（ＯＦＣ）が自発的に行う「事前のフローエントリ登録」を指す。【００２５】
これら２つの方式では、後者のほうが、スケーラビリティ、安定性の面で優れる。しかし、実際には、障害時の系切り替え等の際、既にフローが張られている（いくつかのパケットが既にフローとして制御されている）と考えられるため、現在のフローの状況と矛盾しないように、新アクティブ装置となったコントローラ（ＯＦＣ）が、旧アクティブ装置からフローエントリを引き継いで設定する必要がある。そのため、コントローラ（ＯＦＣ）同士で同期機構が必要となり、コントローラ（ＯＦＣ）の実装が複雑になる。また、コントローラ（ＯＦＣ）のサポートする冗長構成しか構築できない。【００２６】
また、上記のようにコントローラ（ＯＦＣ）同士が同期し、１つのコネクションを共有する場合、障害が発生して系が切り替わる際に、コントローラ（ＯＦＣ）同士の同期状況とスイッチ（ＯＦＳ）へのフローエントリ設定状況の間で差分が生じる可能性がある。【００２７】
そのため、新アクティブ装置となったコントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）との間で同期処理が必要となる。
【先行技術文献】
【非特許文献】
【００２８】
【非特許文献１】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｖｅｒｓｉｏｎ  １．１．０  Ｉｍｐｌｅｍｅｎｔｅｄ”，［ｏｎｌｉｎｅ］，Ｆｅｂｒｕａｒｙ  ２８，  ２０１１，インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．１．０．ｐｄｆ）
【発明の概要】
【００２９】
本発明の目的は、複数のコントローラとの通信機構と、コントローラ毎に割り当てられたフローテーブルを持つスイッチ（ＯＦＳ）を用いたネットワークシステムを提供することである。
【００３０】
本発明に係るネットワークシステムは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うスイッチと、フローエントリを、スイッチのフローテーブルに設定する複数のコントローラとを含む。スイッチは、複数のコントローラに対し、コントローラ毎にフローテーブルを割り当て、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索し、複数のコントローラの各々との接続状態を確認し、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理する。
【００３１】
本発明に係るスイッチは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定する複数のコントローラの各々と通信する機能部と、コントローラ毎に割り当てられ、各コントローラからフローエントリが設定されたフローテーブルを管理する機能部と、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索する機能部と、各コントローラとの接続状態を確認する機能部と、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理する機能部とを具備する。
【００３２】
本発明に係るネットワーク構築方法では、スイッチが、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う。また、複数のコントローラが、フローエントリを、スイッチのフローテーブルに設定する。また、スイッチが、複数のコントローラに対し、コントローラ毎にフローテーブルを割り当てる。また、スイッチが、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索する。また、スイッチが、複数のコントローラの各々との接続状態を確認する。また、スイッチが、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理する。
【００３３】
本発明に係るプログラムは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定する複数のコントローラの各々と通信するステップと、コントローラ毎に割り当てられ、各コントローラからフローエントリが設定されたフローテーブルを管理するステップと、外部からパケットを受信した際、全てのフローテーブルから、該パケットにマッチするフローエントリを検索するステップと、各コントローラとの接続状態を確認するステップと、該パケットにマッチしたフローエントリのうち、接続状態が無効なコントローラから設定されたフローエントリを無視し、接続状態が有効なコントローラから設定されたフローエントリのアクションに従って、該パケットを処理するステップとをスイッチに実行させるためのプログラムである。なお、本発明に係るプログラムは、記憶装置や記憶媒体に格納することが可能である。
【００３４】
スイッチが、複数のコントローラと同時に通信し、どのフローテーブルで通信を行うかスイッチ側で切り替え、コントローラ間の同期機能がなくても正しく通信を行えるようになる。
【図面の簡単な説明】
【００３５】
【図１】図１は、本発明に係るネットワークシステムの構成例を示す図である。
【図２】図２は、本発明に係るスイッチ（ＯＦＳ）の構成例を示す図である。
【図３】図３は、本発明に係るフローエントリの形式について説明するための図である。
【図４】図４は、パケット受信時の動作を示すシーケンス図である。
【図５】図５は、経路検出時の動作の一例について説明するための図である。
【図６】図６は、パケット転送時の動作の一例について説明するための図である。
【発明を実施するための形態】
【００３６】
本発明は、ＣＵ分離型ネットワークを対象としている。ここでは、ＣＵ分離型ネットワークの１つであるオープンフローネットワークを例に説明する。但し、実際には、オープンフローネットワークに限定されない。
【００３７】
［実施形態］
以下に、本発明の実施形態について添付図面を参照して説明する。
【００３８】
（システム構成）
図１を参照して、本発明に係るネットワークシステムの構成例について説明する。
【００３９】
本発明に係るネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０と、ホスト３０を含む。
【００４０】
コントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０、及びホスト３０は、それぞれ複数でも良い。例えば、複数のスイッチ（ＯＦＳ）２０の各々は、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、・・・、のように表記する。図１では、コントローラ（ＯＦＣ）１０−１、コントローラ（ＯＦＣ）１０−２、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、ホスト３０−１、及びホスト３０−２を例示している。なお、コントローラ（ＯＦＣ）１０は冗長化されている。ここでは、コントローラ（ＯＦＣ）１０−１が運用系となり、コントローラ（ＯＦＣ）１０−２が待機系となる。
【００４１】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０を管理する。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間は、専用線やＳＳＬ（ＳｅｃｕｒｅＳｏｃｋｅｔＬａｙｅｒ）等により保護された通信路である「セキュアチャンネル」で接続されている。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０は、セキュアチャンネルを経由し、オープンフロープロトコルに則った通信を行う。また、コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に到着するパケットをスイッチ（ＯＦＳ）２０がどのように処理するかについて、各パケットに対応する経路情報であるフローエントリを操作することにより制御する。コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に、多数のフローエントリを登録することになる。フローエントリの集合は、「フローテーブル」と呼ばれる表形式で管理されている。コントローラ（ＯＦＣ）１０は、配下の各スイッチ（ＯＦＳ）２０のフローテーブルの内容を管理している。例えば、コントローラ（ＯＦＣ）１０は、配下の各スイッチ（ＯＦＳ）２０のフローテーブルのマスターテーブルを保持している。
【００４２】
スイッチ（ＯＦＳ）２０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワークを介して、隣接するスイッチ（ＯＦＳ）に接続されている。更に、スイッチ（ＯＦＳ）２０は、自身がエッジスイッチ（ＯＦＳ）に該当する場合、クライアントやサーバ、或いは、オープンフローに未対応のネットワーク機器等と接続可能である。スイッチ（ＯＦＳ）２０は、フローテーブルを少なくとも１つ保持している。
【００４３】
なお、「フローテーブルを保持している」とは、そのフローテーブルを管理していることを意味する。そのフローテーブルをネットワーク経由等で管理可能であれば、実際には、そのフローテーブルが自身の内部に存在していなくても良い。すなわち、フローテーブルの保管場所は、そのフローテーブルを管理する装置の内部に限らず、外部でも良い。例えば、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０が、ネットワーク上にある同一のフローテーブルを共有することも考えられる。
【００４４】
ホスト３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワークを介して、スイッチ（ＯＦＳ）２０に接続され、スイッチ（ＯＦＳ）２０を介してネットワーク通信を行う。例えば、ホスト３０−１からホスト３０−２にアクセスする場合、ホスト３０−１がクライアントとなり、ホスト３０−２がサーバとなる。但し、実際には、ホスト３０は、クライアントやサーバに限らず、オープンフローに未対応のネットワーク機器等でも良い。
【００４５】
（スイッチ（ＯＦＳ）の構成）
図２を参照して、スイッチ（ＯＦＳ）２０の構成例について説明する。
【００４６】
スイッチ（ＯＦＳ）２０は、パケット入出力部２１と、制御部２２と、セレクタ２３と、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）と、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）と、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）を備える。なお、上記の「ｉ＝１〜ｎ」の「ｎ」は、当該スイッチ（ＯＦＳ）２０と接続されたコントローラ（ＯＦＣ）１０の台数である。
【００４７】
パケット入出力部２１は、隣接するスイッチ（ＯＦＳ）２０やホスト３０との間で、パケットを送受信する。
【００４８】
制御部２２は、スイッチ（ＯＦＳ）２０の内部制御を行う。
【００４９】
セレクタ２３は、制御部２２、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）や、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々と通信を行う。
【００５０】
フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）に含まれるフローエントリを管理（追加／更新／削除）する。フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、当該スイッチ（ＯＦＳ）２０と接続されたコントローラ（ＯＦＣ）１０毎に存在する。すなわち、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、コントローラ（ＯＦＣ）１０毎に割り当てられている。なお、実際には、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、同一の装置／回路でも良い。この場合、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）は、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々／個々のフローエントリがどのコントローラ（ＯＦＣ）１０に対応するものか判別可能であるものとする。
【００５１】
フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、フローエントリの集合である。例えば、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、経路情報を蓄積するためのデータベースである。フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、スイッチ（ＯＦＳ）２０内でユニークな優先度を持つ。フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、当該スイッチ（ＯＦＳ）２０と接続されたコントローラ（ＯＦＣ）１０毎に存在する。すなわち、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、コントローラ（ＯＦＣ）１０毎に割り当てられている。なお、実際には、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）の各々は、同一のフローテーブルでも良い。この場合、個々のフローエントリがどのコントローラ（ＯＦＣ）１０から設定されたものか判別可能にするために、コントローラ（ＯＦＣ）１０の識別用のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）等を格納するためのサブフィールド（領域）をフローエントリ内に設けることが考えられる。
【００５２】
コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、オープンフロープロトコルに則って、接続先のコントローラ（ＯＦＣ）１０と通信する。また、接続先のコントローラ（ＯＦＣ）１０との接続状態を確認する。コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、当該スイッチ（ＯＦＳ）２０と接続されたコントローラ（ＯＦＣ）１０毎に存在する。すなわち、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、コントローラ（ＯＦＣ）１０毎に割り当てられている。なお、実際には、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、同一の装置／回路でも良い。この場合、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の送受信用のキュー（Ｑｕｅｕｅ）等をコントローラ（ＯＦＣ）１０毎に割り当てるようにすることが考えられる。
【００５３】
無論、複数のコントローラ（ＯＦＣ）１０に、同一のフローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）、及びコントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）を割り当てるようにすることも可能である。例えば、複数のコントローラ（ＯＦＣ）１０をグループ化し、同一グループのコントローラ（ＯＦＣ）１０に、同一のフローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）、及びコントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）を割り当てることが考えられる。
【００５４】
なお、「割り当てる」という記載は、「対応付ける」と読み替えても良い。「コントローラ（ＯＦＣ）１０毎に割り当てられている」とは、所定の対象物と個々のコントローラ（ＯＦＣ）１０を対応付けるという意味であり、必ずしも１対１の対応関係に限らない。
【００５５】
但し、実際には、これらの例に限定されない。
【００５６】
（フローエントリの形式）
図３を参照して、本発明に係るフローエントリの形式について説明する。
【００５７】
本発明に係るフローエントリは、フローエントリ優先度２５１と、フローテーブル優先度２５２と、マッチ条件２５３と、アクション２５４の各サブフィールド（領域）を含む。
【００５８】
フローエントリ優先度２５１は、当該フローエントリ自体の優先度を示す値を格納するための領域である。フローテーブル優先度２５２は、当該フローエントリが登録されているフローテーブル自体の優先度を示す値を格納するための領域である。マッチ条件２５３は、当該フローエントリのルールを示す値を格納するための領域である。アクション２５４は、当該フローエントリのアクションを示す値を格納するための領域である。
【００５９】
なお、フローテーブルの優先度は、対応するコントローラ（ＯＦＣ）の優先度にも等しい。すなわち、フローテーブルの優先度は、コントローラ（ＯＦＣ）の優先度と読み替えることも可能である。
【００６０】
本発明に係るフローエントリはコントローラ（ＯＦＣ）１０により設定されるため、コントローラ（ＯＦＣ）１０は、本発明に係るフローエントリの各サブフィールド（領域）の値を任意に指定／変更することができる。但し、実際には、スイッチ（ＯＦＳ）２０側で指定／変更できるようにしても良い。例えば、スイッチ（ＯＦＳ）２０は、どのコントローラ（ＯＦＣ）１０と優先的に接続するか、或いは、どのコントローラ（ＯＦＣ）１０を最も信頼するかによって、フローテーブルの優先度を決めることができる。
【００６１】
無論、本発明に係るフローエントリは、上記以外のサブフィールド（領域）も含むようにすることが可能である。
【００６２】
（パケット受信時の動作）
図４を参照して、スイッチ（ＯＦＳ）２０がパケットを受信した際の動作の一例について説明する。
【００６３】
図１のネットワーク構成を例にすると、スイッチ（ＯＦＳ）２０−１がホスト３０−１からパケットを受信した際の動作に該当する。
【００６４】
（１）ステップＳ１０１
スイッチ（ＯＦＳ）２０のパケット入出力部２１は、ホスト３０からパケットを受信する。
【００６５】
（２）ステップＳ１０２
スイッチ（ＯＦＳ）２０のパケット入出力部２１は、制御部２２にパケットを送出する。
【００６６】
（３）ステップＳ１０３
スイッチ（ＯＦＳ）２０の制御部２２は、当該パケットを保留し、当該パケットに対するアクションを決めるため、セレクタ２３に対して、当該パケットのコピー（複製）を送出し、当該パケットのマッチ依頼を行う。なお、実際には、スイッチ（ＯＦＳ）２０の制御部２２は、セレクタ２３に対して、単に当該パケットのコピーを送出するのみでも良い。
【００６７】
（４）ステップＳ１０４
スイッチ（ＯＦＳ）２０のセレクタ２３は、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々に対して、当該パケットのコピーを送出し、当該パケットのマッチ依頼を行う。なお、実際には、スイッチ（ＯＦＳ）２０のセレクタ２３は、制御部２２からパケットを受け取った際に、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々に対して、当該パケットのマッチ依頼を行うものと判断するようにしても良い。
【００６８】
（５）ステップＳ１０５
スイッチ（ＯＦＳ）２０のフローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、マッチ依頼に応じて、自身が管理するフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）内を検索して、当該パケットとマッチするフローエントリが存在するか確認し、マッチするフローエントリの有無及び内容をマッチ検索結果としてセレクタ２３に応答する。
【００６９】
（６）ステップＳ１０６
スイッチ（ＯＦＳ）２０のセレクタ２３は、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々からマッチ検索結果が返ってきた際に、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々に、接続先のコントローラ（ＯＦＣ）１０との接続状態を問い合わせる。なお、実際には、スイッチ（ＯＦＳ）２０のセレクタ２３は、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々にマッチ依頼を行う（ステップＳ１０４）と同時に／前に、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々に、接続先のコントローラ（ＯＦＣ）１０との接続状態を問い合わせても良い。
【００７０】
（７）ステップＳ１０７
スイッチ（ＯＦＳ）２０のコントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、接続状態の問い合わせに応じて、接続先のコントローラ（ＯＦＣ）１０との接続状態を確認し、接続状態に関する情報をセレクタ２３に応答する。例えば、接続状態に関する情報として、接続状態にある／稼働中のコントローラ（ＯＦＣ）１０を「有効」とし、接続状態にない／停止中のコントローラ（ＯＦＣ）１０を「無効」とする。
【００７１】
（８）ステップＳ１０８
スイッチ（ＯＦＳ）２０のセレクタ２３は、接続状態に関する情報を基に、マッチ検索結果から、無効なコントローラ（ＯＦＣ）１０に対応するフローエントリを破棄／一時的に無効にし、有効なコントローラ（ＯＦＣ）１０に対応するフローエントリのみを残す。
【００７２】
（９）ステップＳ１０９
スイッチ（ＯＦＳ）２０のセレクタ２３は、フローエントリのソート（並べ替え）を行う。例えば、スイッチ（ＯＦＳ）２０のセレクタ２３は、フローエントリの優先度順に並べ替え、更に、同一優先度のフローエントリについては、フローテーブルの優先度順に並べ替える。
【００７３】
（１０）ステップＳ１１０
スイッチ（ＯＦＳ）２０のセレクタ２３は、ソート後のフローエントリの絞り込みを行う。具体的には、残っているフローエントリのうち、フローエントリの優先度が最高のものと一致するフローエントリを残し、それ以下のフローエントリを全て破棄／一時的に無効にする。
【００７４】
（１１）ステップＳ１１１
その後、スイッチ（ＯＦＳ）２０のセレクタ２３は、絞り込みが行われたフローエントリを高優先度のものから順に評価し、評価されたフローエントリのアクションに「別のスイッチ（ＯＦＳ）への転送」というアクションが指定されている場合、一度のみ制御部２２に転送依頼を行う。すなわち、「別のスイッチ（ＯＦＳ）への転送」というアクションが指定されているフローエントリについては、最初に評価されたフローエントリのみ採用する。これ以降の残りの「別のスイッチ（ＯＦＳ）への転送」というアクションが指定されているフローエントリについては無視する。
【００７５】
（１２）ステップＳ１１２
スイッチ（ＯＦＳ）２０の制御部２２は、転送依頼に応じて、保留していたパケットをパケット入出力部２１に送出する。このとき、スイッチ（ＯＦＳ）２０の制御部２２は、パケット入出力部２１の有する出力ポートのうち、別のスイッチ（ＯＦＳ）２０に転送するための出力ポートに、保留していたパケットを転送する。
【００７６】
（１３）ステップＳ１１３
スイッチ（ＯＦＳ）２０のパケット入出力部２１は、制御部２２から送出されたパケットを別のスイッチ（ＯＦＳ）２０に転送する。
【００７７】
（１４）ステップＳ１１４
スイッチ（ＯＦＳ）２０のセレクタ２３は、評価されたフローエントリのアクションに「コントローラ（ＯＦＣ）への転送」（パケットイン）というアクションが指定されている場合、当該フローエントリが登録されているフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）に対応するコントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）に、該当するパケットのコピーを転送する。
【００７８】
（１５）ステップＳ１１５
スイッチ（ＯＦＳ）２０のコントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）は、オープンフロープロトコルに則って、該当するパケットのコピーをコントローラ（ＯＦＣ）１０に転送し、パケットインを行う。例えば、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）は、スイッチ（ＯＦＳ）２０からコントローラ（ＯＦＣ）１０へのオープンフローメッセージのデータ領域に、該当するパケットのコピーを格納し、当該オープンフローメッセージをコントローラ（ＯＦＣ）１０に転送し、パケットインを行うようにしても良い。
【００７９】
すなわち、絞り込みが行われたフローエントリを高優先度のものから順に評価する際、「別のスイッチ（ＯＦＳ）への転送」というアクションについては、一度のみ行うものとする。また、「コントローラ（ＯＦＣ）への転送」（パケットイン）というアクションについては、何度行っても良い。無論、「コントローラ（ＯＦＣ）への転送」（パケットイン）というアクションについても、「別のスイッチ（ＯＦＳ）への転送」というアクションと同様に、一度のみ行うものとすることが可能である。
【００８０】
なお、実際には、ステップＳ１０８〜ステップＳ１１１の動作は、スイッチ（ＯＦＳ）２０のセレクタ２３ではなく、スイッチ（ＯＦＳ）２０の制御部２２が行うようにしても良い。この場合、スイッチ（ＯＦＳ）２０の制御部２２は、セレクタ２３から必要な情報を受け取るものとする。また、スイッチ（ＯＦＳ）２０の制御部２２とセレクタ２３は、一体化していても良い。
【００８１】
（経路検出時の動作）
図５を参照して、経路検出時の動作の一例について説明する。
【００８２】
本発明では、スイッチ（ＯＦＳ）間の通信や、ＬＬＤＰ（Ｌｉｎｋ  Ｌａｙｅｒ  Ｄｉｓｃｏｖｅｒｙ  Ｐｒｏｔｏｃｏｌ）による経路検出等、オープンフローネットワーク内の通信において、複数のコントローラ（ＯＦＣ）間でフローが混同しないように「タグＶＬＡＮ」を利用し、通信毎に、どのコントローラ（ＯＦＣ）を利用するか識別する必要がある。このため、各スイッチ（ＯＦＳ）は、接続するコントローラ（ＯＦＣ）の数だけ（台数分）、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）を占有する。
【００８３】
コントローラ（ＯＦＣ）１０の各々は、独自に経路の検出を行う。
【００８４】
まず、コントローラ（ＯＦＣ）１０の各々は、ＬＬＤＰパケットに、自身の識別用のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）を設定／付加する。ここでは、コントローラ（ＯＦＣ）１０−１は、ＬＬＤＰパケットに、自身の識別用のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）として「ＩＤ：１」を設定／付加する。また、コントローラ（ＯＦＣ）１０−２は、ＬＬＤＰパケットに、自身の識別用のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）として「ＩＤ：２」を設定／付加する。
【００８５】
コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）と、イーサタイプ（ＥｔｈｅｒＴｙｐｅ）と、「当該ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）と当該イーサタイプ（ＥｔｈｅｒＴｙｐｅ）にマッチするパケットを受信した際、当該コントローラ（ＯＦＣ）に転送（パケットイン）する」というアクションを指定したパケットイン用のフローエントリを設定する。すなわち、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）とイーサタイプ（ＥｔｈｅｒＴｙｐｅ）は、パケットイン用のフローエントリのルール（マッチ条件）となる。なお、パケットイン用のフローエントリは、基本的に、初期状態のフローエントリ（デフォルトエントリ）であるため、フローエントリの優先度を最も低く設定すると好適である。ここでは、コントローラ（ＯＦＣ）１０−１は、スイッチ（ＯＦＳ）２０−１及びスイッチ（ＯＦＳ）２０−２に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」とイーサタイプ（ＥｔｈｅｒＴｙｐｅ）「ＬＬＤＰ（０ｘ８８ＣＣ）」というマッチ条件を指定し、「コントローラ（ＯＦＣ）１０−１に転送（パケットイン）する」というアクションを指定したパケットイン用のフローエントリを設定する。また、コントローラ（ＯＦＣ）１０−２は、スイッチ（ＯＦＳ）２０−１及びスイッチ（ＯＦＳ）２０−２に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：２」とイーサタイプ（ＥｔｈｅｒＴｙｐｅ）「ＬＬＤＰ（０ｘ８８ＣＣ）」というマッチ条件を指定し、「コントローラ（ＯＦＣ）１０−２に転送（パケットイン）する」というアクションを指定したパケットイン用のフローエントリを設定する。なお、実際には、コントローラ（ＯＦＣ）１０の各々は、下記のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを送出するように指示するスイッチ（ＯＦＳ）２０に対しては、上記のパケットイン用のフローエントリを設定しなくても良い。
【００８６】
コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０の各々に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを送出するように指示する。具体的には、コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０の各々に対して、オープンフロープロトコルに則って、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを転送し、当該ＬＬＤＢパケットを送出するように指示する。但し、実際には、コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０の各々に対して、自身の識別用のＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）を通知し、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを生成して送出するように指示しても良い。ここでは、コントローラ（ＯＦＣ）１０−１は、スイッチ（ＯＦＳ）２０−１に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」付きのＬＬＤＢパケットをスイッチ（ＯＦＳ）２０−２宛の出力ポートに転送するように指示する。また、コントローラ（ＯＦＣ）１０−２は、スイッチ（ＯＦＳ）２０−２に対して、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：２」付きのＬＬＤＢパケットをスイッチ（ＯＦＳ）２０−１宛の出力ポートに転送するように指示する。
【００８７】
スイッチ（ＯＦＳ）２０の各々は、接続先のコントローラ（ＯＦＣ）１０からの指示に従って、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを送出する。更に、スイッチ（ＯＦＳ）２０の各々は、他のスイッチ（ＯＦＳ）２０から、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）付きのＬＬＤＢパケットを受信した場合、パケットイン用のフローエントリのアクションに従って、該当するコントローラ（ＯＦＣ）１０に転送（パケットイン）する。ここでは、スイッチ（ＯＦＳ）２０−１は、コントローラ（ＯＦＣ）１０−１からの指示に従って、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」付きのＬＬＤＢパケットをスイッチ（ＯＦＳ）２０−２宛の出力ポートに転送する。更に、スイッチ（ＯＦＳ）２０−１は、スイッチ（ＯＦＳ）２０−２から、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：２」付きのＬＬＤＢパケットを受信した場合、パケットイン用のフローエントリのアクションに従って、コントローラ（ＯＦＣ）１０−２に転送（パケットイン）する。また、スイッチ（ＯＦＳ）２０−２は、コントローラ（ＯＦＣ）１０−２からの指示に従って、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：２」付きのＬＬＤＢパケットをスイッチ（ＯＦＳ）２０−２宛の出力ポートに転送する。更に、スイッチ（ＯＦＳ）２０−２は、スイッチ（ＯＦＳ）２０−１から、ＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」付きのＬＬＤＢパケットを受信した場合、パケットイン用のフローエントリのアクションに従って、コントローラ（ＯＦＣ）１０−１に転送（パケットイン）する。
【００８８】
これにより、コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０に、自身の扱うＬＬＤＰパケットのみをパケットインさせることができる。また、コントローラ（ＯＦＣ）１０の各々は、管理下にあるスイッチ（ＯＦＳ）２０の各々からパケットインされた情報を基に、どのスイッチ（ＯＦＳ）のどのポートがどこに接続されているかという情報（トポロジー情報）を収集することができる。
【００８９】
（パケットイン／フロー学習時の動作）
次に、パケットイン／フロー学習時の動作の一例について説明する。
【００９０】
スイッチ（ＯＦＳ）２０の制御部２２は、外部（ホスト３０等）からフロー未学習のパケット（ファーストパケット）を受信した場合、セレクタ２３に全テーブル検索の指示（マッチ依頼）を行う。
【００９１】
スイッチ（ＯＦＳ）２０のセレクタ２３は、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々に、管理下にあるフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）への検索を依頼し、結果を収集する。
【００９２】
フロー学習時（フローエントリ未登録時／登録処理中）には、どのフローエントリともマッチしない（マッチするフローエントリが登録されていない）ため、全てのフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）でミスヒットとなる。そのため、フローテーブル管理部２４（２４−ｉ、ｉ＝１〜ｎ）の各々は、セレクタ２３に、自身の管理するフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）でミスヒットという結果を返却する。
【００９３】
スイッチ（ＯＦＳ）２０のセレクタ２３は、全てのフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）でミスヒットの場合、コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々に、パケットイン命令（指示／要求）を行う。
【００９４】
コントローラ通信部２６（２６−ｉ、ｉ＝１〜ｎ）の各々は、パケットイン命令に従い、接続中のコントローラ（ＯＦＣ）１０にパケットを転送（パケットイン）する。
【００９５】
パケットイン後、接続中のコントローラ（ＯＦＣ）１０は、オープンフローネットワークの入口から出口までの全てのスイッチ（ＯＦＳ）２０に、フローエントリを設定する。
【００９６】
このとき、コントローラ（ＯＦＣ）１０は、入口側のスイッチ（ＯＦＳ）２０−１に対して、「コントローラ（ＯＦＣ）毎に割り当てられたＶＬＡＮタグを付加する」というアクションが指定されたフローエントリを設定する。
【００９７】
また、コントローラ（ＯＦＣ）１０は、出口側のスイッチ（ＯＦＳ）２０−２に対して、「入口側のスイッチ（ＯＦＳ）で付加されたＶＬＡＮタグを除去（書き戻し）する」というアクションが指定されたフローエントリを設定する。
【００９８】
（パケット転送時の動作）
図６を参照して、パケット転送時の動作の一例について説明する。
【００９９】
スイッチ（ＯＦＳ）２０の制御部２２は、外部（ホスト３０等）から学習済みのパケットを受信した場合も、フロー学習時と同様に、セレクタ２３に全テーブル検索の指示（マッチ依頼）を行う。
【０１００】
本発明のような冗長構成の場合、フローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）のうち、複数のフローテーブルで同一優先度のフローエントリがマッチすること（異なるフローテーブルに登録されたフローエントリの優先度が同じである場合）もあるが、スイッチ（ＯＦＳ）２０のセレクタ２３は、各フローテーブルの優先度に基づいて、１つのフローテーブル（例えば、最優先のフローテーブル）を選択し、そのフローテーブルに登録されたフローエントリを採用する。
【０１０１】
スイッチ（ＯＦＳ）２０のセレクタ２３は、制御部２２に対して、パケットの転送依頼を行う。
【０１０２】
このとき、入口側のスイッチ（ＯＦＳ）２０−１の制御部２２は、外部（ホスト３０等）から受信したパケットに対して、フローエントリのアクションに従って、コントローラ（ＯＦＣ）１０−１に割り当てられたＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」を付加する。
【０１０３】
また、出口側のスイッチ（ＯＦＳ）２０−２の制御部２２は、入口側のスイッチ（ＯＦＳ）２０−１を経由したパケットに対して、フローエントリのアクションに従って、入口側のスイッチ（ＯＦＳ）２０−１で付加されたＶＬＡＮタグ（ＶＬＡＮ  ＩＤ）「ＩＤ：１」を除去（書き戻し）する。
【０１０４】
（障害時の動作）
次に、障害時の動作の一例について説明する。
【０１０５】
障害時の動作は、障害箇所によって、以下の２通りに分けることができる。
【０１０６】
（１）コントローラ（ＯＦＣ）のダウン  運用系のコントローラ（ＯＦＣ）１０が停止してしまった場合、フローテーブルのマッチ検索結果から、ダウンしたコントローラ（ＯＦＣ）１０に対応するフローテーブルのフローエントリを削除する。
【０１０７】
このとき、スイッチ（ＯＦＳ）２０は、待機系のコントローラ（ＯＦＣ）１０によりフロー学習済みであれば、そのまま待機系のコントローラ（ＯＦＣ）１０に対応するフローテーブルのフローエントリを利用し、パケットを転送することができる。また、スイッチ（ＯＦＳ）２０は、フロー未学習であれば、待機系のコントローラ（ＯＦＣ）１０を用いてパケットイン／フロー学習を行い、待機系のコントローラ（ＯＦＣ）１０からフローエントリの設定を受けることで、通信を回復することができる。
【０１０８】
（２）スイッチ（ＯＦＳ）のダウン  コントローラ（ＯＦＣ）１０は、管理下にあるスイッチ（ＯＦＳ）２０が停止した場合、当該スイッチ（ＯＦＳ）２０のダウンを検出し、当該スイッチ（ＯＦＳ）２０を除外した新しい経路を計算し、新しい経路上のスイッチ（ＯＦＳ）２０に、その経路に関するフローエントリを設定する。
【０１０９】
（障害コントローラ（ＯＦＣ）との再接続時の動作）
次に、障害が発生したコントローラ（ＯＦＣ）との再接続時の動作の一例について説明する。
【０１１０】
障害で一度ダウンしたコントローラ（ＯＦＣ）１０−１を再度接続した場合、スイッチ（ＯＦＳ）２０が、既にフロー学習済みで、待機系のコントローラ（ＯＦＣ）１０−２と接続していることがある。この場合、そのままでは、スイッチ（ＯＦＳ）２０は、再度接続されたコントローラ（ＯＦＣ）１０−１にパケットを転送（パケットイン）せず、再度接続されたコントローラ（ＯＦＣ）１０−１を用いたフローの再学習も行わない。
【０１１１】
そのため、入口側のスイッチ（ＯＦＳ）２０−１のフローエントリには、ハードタイム（Ｈａｒｄ  ｔｉｍｅ）を設定しておき、一定間隔で再学習が行われるようにしなければならない。なお、ハードタイムとは、当該フローエントリが登録されてからの有効期間である。ハードタイムとして設定された有効期間が経過した場合、ハードタイムアウト（Ｈａｒｄ  ｔｉｍｅｏｕｔ）となり、スイッチ（ＯＦＳ）２０−１は、自動的に当該フローエントリを削除する。すなわち、当該フローエントリが未登録の状態になる。
【０１１２】
例えば、ハードタイムの値を「１０分」とした場合、入口側のスイッチ（ＯＦＳ）２０−１は、フローエントリが登録されてから１０分経過すると、当該フローエントリをタイムアウトにより削除する。これにより、当該フローエントリにマッチしていたパケットが、再度フロー未学習のパケット（ファーストパケット）に戻るため、再度コントローラ（ＯＦＣ）１０−１にパケットを転送（パケットイン）し、フローの再学習を行えるようになる。
【０１１３】
このとき、入口側のスイッチ（ＯＦＳ）２０−１は、復帰したコントローラ（ＯＦＣ）１０−１と、待機系のコントローラ（ＯＦＣ）１０−２との双方にパケットを転送（パケットイン）し、フローの再学習を行う。
【０１１４】
したがって、フローエントリが登録されてから１０分経過した時点で、当該フローエントリが削除され、フローの再学習が行われる。フローの再学習が行われる際に、運用系のコントローラ（ＯＦＣ）１０−１が復帰していれば、入口側のスイッチ（ＯＦＳ）２０−１は、運用系のコントローラ（ＯＦＣ）１０−１との通信を再開する。
【０１１５】
なお、フローの再学習中に、稼働中の待機系のコントローラ（ＯＦＣ）１０−２が停止した場合は、復帰した運用系のコントローラ（ＯＦＣ）１０−１に切り替わるため、負荷はかかるものの、フローの再学習後には通信が復旧する。
【０１１６】
（負荷分散構成）
上記で説明したシステム構成では、コントローラ（ＯＦＣ）１０−１が運用系であり、コントローラ（ＯＦＣ）１０−２が待機系であり、運用系と待機系とに明確に分かれているが、スイッチ（ＯＦＳ）２０にパケットイン用のフローエントリを設定することで、コントローラ（ＯＦＣ）１０−１及びコントローラ（ＯＦＣ）１０−２の双方とも運用系にした負荷分散構成（ＡＣＴ／ＡＣＴ構成）をとることも可能である。
【０１１７】
例えば、宛先ＩＰアドレスが「１９２．１６８．１．＊／２４」のパケットをコントローラ（ＯＦＣ）１０−１で処理し、宛先ＩＰアドレスが「１９２．１６８．２．＊／２４」のパケットをコントローラ（ＯＦＣ）１０−２で処理することを所望している場合について説明する。なお、「＊」はワイルドカードを示す。
【０１１８】
この場合、コントローラ（ＯＦＣ）１０−１は、管理下にあるスイッチ（ＯＦＳ）２０に対して、宛先ＩＰアドレス「１９２．１６８．１．＊／２４」というマッチ条件と、「コントローラ（ＯＦＣ）１０−１に転送（パケットイン）する」というアクションとが指定されたパケットイン用のフローエントリを、自身に対応するフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）に設定する。
【０１１９】
また、コントローラ（ＯＦＣ）１０−２は、管理下にあるスイッチ（ＯＦＳ）２０に対して、宛先ＩＰアドレス「１９２．１６８．２．＊／２４」というマッチ条件と、「コントローラ（ＯＦＣ）１０−２に転送（パケットイン）する」というアクションとが指定されたパケットイン用のフローエントリを、自身に対応するフローテーブル２５（２５−ｉ、ｉ＝１〜ｎ）に設定する。
【０１２０】
これにより、各コントローラ（ＯＦＣ）１０には、管理下にあるスイッチ（ＯＦＳ）２０から、自身が指定したマッチ条件を満たすパケットしか送られてこなくなる。したがって、複数のコントローラ（ＯＦＣ）に処理を分散することができる。
【０１２１】
このとき、例えば、コントローラ（ＯＦＣ）１０−１が停止しても、入口側のスイッチ（ＯＦＳ）２０−１に新たにパケットが届いた際に、当該スイッチ（ＯＦＳ）２０−１のセレクタ２３は、フローエントリを評価し、無効なコントローラ（ＯＦＣ）１０−１から設定されたフローエントリを破棄／一時的に無効にし、コントローラ（ＯＦＣ）１０−２を用いてフローの再学習を行い、フローエントリの再設定を行う。このため、負荷分散構成にしていても、冗長性を保つことが可能である。
【０１２２】
（まとめ）
このように、本発明に係るネットワークシステムでは、コントローラ（ＯＦＣ）の仕様に関わらず、冗長構成、負荷分散構成をとることができる。
【０１２３】
本発明に係るネットワークシステムでは、スイッチ（ＯＦＳ）側で、フローテーブルと、コントローラ通信部とを増やすことで、同時に接続するコントローラ（ＯＦＣ）の数を自由に増加させることが可能である。
【０１２４】
本発明に係るネットワークシステムでは、コントローラ（ＯＦＣ）同士の複雑な同期機構／同期処理が不要となる。また、障害時には、停止したコントローラ（ＯＦＣ）のフローテーブルを参照しなくなる。これにより、不必要となったフローエントリの片付け（削除）や書き直し（更新）が不要となり、高速に通信を復旧することができる。
【０１２５】
（ハードウェアの例示）
以下に、本発明に係るネットワークシステムを実現するための具体的なハードウェアの例について説明する。
【０１２６】
コントローラ（ＯＦＣ）及びホストの例として、ＰＣ（パソコン）、アプライアンス（ａｐｐｌｉａｎｃｅ）、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。また、ホストの他の例として、ＩＰ電話機、携帯電話機、スマートフォン、スマートブック、カーナビ（カーナビゲーションシステム）、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット（電子機器）、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電（ｉｎｆｏｒｍａｔｉｏｎ  ｈｏｍｅ  ａｐｐｌｉａｎｃｅ）、ＯＡ（Ｏｆｆｉｃｅ  Ａｕｔｏｍａｔｉｏｎ）機器、店頭端末・高機能コピー機、デジタルサイネージ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｇｅ：電子看板）等も考えられる。なお、コントローラ（ＯＦＣ）及びホストは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、コントローラ（ＯＦＣ）及びホストは、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）でも良い。
【０１２７】
スイッチ（ＯＦＳ）の例として、ネットワークスイッチ（ｎｅｔｗｏｒｋ  ｓｗｉｔｃｈ）、ルータ（ｒｏｕｔｅｒ）、プロキシ（ｐｒｏｘｙ）、ゲートウェイ（ｇａｔｅｗａｙ）、ファイアウォール（ｆｉｒｅｗａｌｌ）、ロードバランサ（ｌｏａｄ  ｂａｌａｎｃｅｒ：負荷分散装置）、帯域制御装置（ｐａｃｋｅｔ  ｓｈａｐｅｒ）、セキュリティ監視制御装置（ＳＣＡＤＡ：Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）、ゲートキーパー（ｇａｔｅｋｅｅｐｅｒ）、基地局（ｂａｓｅ  ｓｔａｔｉｏｎ）、アクセスポイント（ＡＰ：Ａｃｃｅｓｓ  Ｐｏｉｎｔ）、通信衛星（ＣＳ：Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓａｔｅｌｌｉｔｅ）、或いは、複数の通信ポートを有する計算機等が考えられる。また、物理マシン上に構築された仮想マシン（ＶＭ）により実現される仮想スイッチでも良い。
【０１２８】
コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストは、車両や船舶、航空機等の移動体に搭載されていても良い。
【０１２９】
図示しないが、コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストの各々は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【０１３０】
上記のプロセッサの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ネットワークプロセッサ（ＮＰ：Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ（ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ）、或いは、専用の機能を有する半導体集積回路（ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等が考えられる。
【０１３１】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のリムーバブルディスクや、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等の記憶媒体（メディア）等が考えられる。また、バッファ（ｂｕｆｆｅｒ）やレジスタ（ｒｅｇｉｓｔｅｒ）等でも良い。或いは、ＤＡＳ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＦＣ−ＳＡＮ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＩＰ−ＳＡＮ（ＩＰ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等を用いたストレージ装置でも良い。
【０１３２】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の１チップ化が進んでいる。したがって、電子機器等に搭載される１チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例も考えられる。
【０１３３】
上記のインターフェースの例として、ネットワーク通信に対応した基板（マザーボード、Ｉ／Ｏボード）やチップ等の半導体集積回路、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口（コネクタ）等の通信ポート等が考えられる。
【０１３４】
また、ネットワークの例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、バックボーン（Ｂａｃｋｂｏｎｅ）、ケーブルテレビ（ＣＡＴＶ）回線、固定電話網、携帯電話網、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ａ）、３Ｇ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ）、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。
【０１３５】
なお、コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストの各々の内部の構成要素は、モジュール（ｍｏｄｕｌｅ）、コンポーネント（ｃｏｍｐｏｎｅｎｔ）、或いは専用デバイス、又はこれらの起動（呼出）プログラムでも良い。
【０１３６】
但し、実際には、これらの例に限定されない。
【０１３７】
（本発明の特徴）
以上のように、本発明は、複数のコントローラ（ＯＦＣ）との通信機構と、コントローラ（ＯＦＣ）毎に割り当てられたフローテーブルを持つスイッチ（ＯＦＳ）を用いたネットワークシステム、及びネットワーク構築方法に関する。
【０１３８】
本発明に係るスイッチ（ＯＦＳ）は、コントローラ（ＯＦＣ）との通信機構と、フローテーブルとを複数備え、複数のコントローラ（ＯＦＣ）と同時に通信し、どのフローテーブルで通信を行うかスイッチ（ＯＦＳ）側で切り替えることで、コントローラ（ＯＦＣ）間の同期機能がなくても正しく通信を行える。
【０１３９】
本発明に係るスイッチ（ＯＦＳ）は、コントローラ（ＯＦＣ）の冗長化／負荷分散のためのＡＣＴ／ＡＣＴ構成を実現するため、複数のフローテーブルのうち、どのフローテーブルを利用するか、フローテーブルの検索結果、及びコントローラ（ＯＦＣ）との接続状況から判断／選択するセレクタを備える。
【０１４０】
本発明に係るスイッチ（ＯＦＳ）は、コントローラ（ＯＦＣ）の障害をスイッチ（ＯＦＳ）側で検出し、障害が発生したコントローラ（ＯＦＣ）に対応するフローテーブルのフローエントリを破棄／一時的に無効にし、稼働中の他のコントローラ（ＯＦＣ）に対応するフローテーブルのフローエントリを用いて通信を継続する。
【０１４１】
本発明では、スイッチ（ＯＦＳ）側で、複数のコントローラ（ＯＦＣ）との通信機構と、複数のフローテーブルとを個別に対応付けているため、各コントローラ（ＯＦＣ）は、自身に割り当てられたフローテーブルを自由に使うことができる。また、他のコントローラ（ＯＦＣ）との同期処理が必要ない。そのため、自由な冗長構成、負荷分散構成を組むことができる。
【０１４２】
運用系のコントローラ（ＯＦＣ）に障害が発生しても、待機系のコントローラ（ＯＦＣ）が稼働中であれば、障害が発生したコントローラ（ＯＦＣ）に対応するフローテーブルのフローエントリを破棄／一時的に無効にすることで、稼働中のコントローラ（ＯＦＣ）で処理を継続することが可能であり、新しく運用系となったコントローラ（ＯＦＣ）が不要なフローエントリの削除等を行う必要がない。
【０１４３】
（備考）
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【０１４４】
本願は、日本特許出願番号２０１２−０４８０１４に基づいて優先権を主張する。その開示は、引用によりここに組み込まれる。
【図１】
0005935873.tif 000002
【図２】
0005935873.tif 000003
【図３】
0005935873.tif 000004
【図４】
0005935873.tif 000005
【図５】
0005935873.tif 000006
【図６】
0005935873.tif 000007