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