(57)【要約】【課題】転送装置において受信パケットから学習した転送制御情報を生成できるようにする。【解決手段】転送システム(2)は複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を生成して送信する転送制御装置と(図13,10)、転送制御装置から第１の転送制御情報を受信して記憶部に保存し、受信したパケットについて記憶部を参照して、パケットが第１の条件を満たす場合、学習処理に従って、パケットのネットワーク識別子含む第２の条件で実行される転送処理を含む第２の転送制御情報を生成して記憶部に保存し、パケットを転送処理に従って処理する転送装置(図14,20;図15,524,528,532-536)と、を含む。【選択図】図１
2016171469.tif 000002
【特許請求の範囲】
【請求項１】
複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を生成して送信する転送制御装置と、
前記転送制御装置から前記第１の転送制御情報を受信して記憶部に保存し、受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する転送装置と、
を含む転送システム。
【請求項２】
前記転送装置は、受信した別のパケットについて前記記憶部を参照して、前記別のパケットが前記第２の条件を満たす場合、前記別のパケットを前記転送処理に従って処理するものであることを特徴とする、請求項１に記載の転送システム。
【請求項３】
前記第２の転送制御情報は、前記第１の転送制御情報よりも参照の優先度が高いものであることを特徴とする、請求項１または２に記載の転送システム。
【請求項４】
前記転送装置は、受信した別のパケットについて前記記憶部を参照して、前記別のパケットが前記第２の条件を満たさず前記第１の条件を満たす場合、前記学習処理に従って、前記別のパケットのネットワーク識別子を含む第３の条件で実行される前記転送処理を含む第３の転送制御情報を生成して前記記憶部に保存し、前記別のパケットを前記転送処理に従って転送するものであることを特徴とする、請求項１乃至３のいずれかに記載の転送システム。
【請求項５】
前記転送装置は、生成した前記第２の転送制御情報を前記転送制御装置に送信し、
前記転送制御装置は、前記第２の転送制御情報を受信して前記転送制御装置の記憶部に保存するものであることを特徴とする、請求項１乃至７のいずれかに記載の転送システム。
【請求項６】
転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶する記憶部と、
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理部と、
を含む転送装置。
【請求項７】
転送装置が、
転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶し、
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理を実行する転送方法。
【請求項８】
転送装置が、
転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶し、
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理を実行するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転送システム、転送装置、転送方法、およびプログラムに関する。
【背景技術】
【０００２】
オープンフロー（OpenFlow）は、ＯＮＦ（Open Networking Foundation）によって標準化されたＳＤＮ（Software-Defined Networking、ソフトウェア定義ネットワーク）用のプロトコルである。オープンフローでは、従来のネットワーク装置における、データ転送機能（Ｄプレーン）を有するパケット転送部と、経路制御機能（Ｃプレーン）を有する転送制御部とが、オープンフロー・スイッチとオープンフロー・コントローラとして分離される。オープンフロー・コントローラとオープンフロー・スイッチの間の通信には、オープンフロー・プロトコルが使用される。また、オープンフローでは、ネットワーク管理者は、オープンフロー・コントローラを適切に設計し実装することによって、オープンフロー・スイッチを所望の形態で制御することができる。そのために、オープンフロー・スイッチは、オープンフロー・コントローラによって決定されたフロー・エントリを保持するフローテーブルを有する。フロー・エントリには、例えば、受信パケットの種別を識別するための情報またはマッチ条件、および各種別のパケットに対するアクションまたは処理が記述される。
【０００３】
既知の通信システムにおいて、フロー制御ネットワーク内の制御サーバが、フロー・スイッチからフロー・エントリの問い合わせを受け付ける。この場合、このフロー・エントリがパケットの宛先ＭＡＣアドレスを変更するものであるとき、制御サーバは、このパケットの宛先ＩＰアドレス（Ｌ３装置）へＡＲＰリクエストを送信する。このＡＲＰリクエストの応答を受信したＬ２スイッチが、この応答に示されているＬ３装置のＭＡＣアドレスと、その応答を受信したポートのポート番号とを、ＭＡＣアドレス・テーブルに追加する。それによって、フロー制御ネットワークとＩＰネットワークとをＬ２スイッチで接続する場合に、フロー・スイッチがパケットの宛先ＭＡＣアドレスを変更したときでも、Ｌ２スイッチにおいてフラッディングが発生しないようにする。
【０００４】
既知の別の通信システムは、レイヤ２スイッチ等の第１のノードと、オープンフロー・スイッチ相当の複数の第２のノードと、第１のノードにパケット転送経路に従ったパケット転送動作を行わせる制御装置とを含んでいる。制御装置は、所定のパケット転送経路の第１のノードの下流側の位置の第２のノードから第１のノードに向けて、第１のノードより下流側のノードを送信元とする宛先学習パケットを受信させて、第１のノードにパケット転送経路に従ったパケット転送動作を行わせる。それによって、レイヤ２スイッチに代表されるノードと、オープンフロー・スイッチに代表されるノードとが混在する環境でも、通信システムは、意図した経路に従ったパケット転送を行うことができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−  ３９１８８号公報
【特許文献２】特表２０１３−５３７７６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
既知のオープンフロー・プロトコルでは、オープンフロー・スイッチに多数のフロー・エントリが設定される場合、オープンフロー・コントローラからオープンフロー・スイッチへのフロー・エントリの転送時間が長く、オープンフロー・スイッチの設定時間が長い。
【０００７】
発明者たちは、転送制御装置から送信される転送制御情報に、新しく受信した種類のパケットに対して新しい転送制御情報を生成する学習処理を導入すれば、転送装置の設定時間を短くすることができる、と認識した。
【０００８】
１つの観点では、本発明の目的は、転送装置において受信パケットから学習した条件を含む転送制御情報を生成できるようにすることである。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を生成して送信する転送制御装置と、転送制御装置から第１の転送制御情報を受信して記憶部に保存し、受信したパケットについて記憶部を参照して、パケットが第１の条件を満たす場合、学習処理に従って、パケットのネットワーク識別子を含む第２の条件で実行される転送処理を含む第２の転送制御情報を生成して記憶部に保存し、パケットを転送処理に従って処理する転送装置と、を含む転送システムが提供される。
【発明の効果】
【００１０】
本発明の一観点によれば、転送装置において受信パケットから学習した条件を含む転送制御情報を生成することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、オープンフロー・コントローラ、および複数のオープンフロー・スイッチを含む転送システムの概略的な構成（configuration）の例を示している。
【図２】図２は、オープンフロー・コントローラの概略的な構成（configuration）の例を示している。
【図３】図３は、オープンフロー・スイッチの概略的な構成（configuration）の例を示している。
【図４】図４は、オープンフロー・コントローラのプロセッサの概略的な構成（configuration）の例を示している。
【図５】図５は、オープンフロー・スイッチのプロセッサの概略的な構成（configuration）の例を示している。
【図６】図６は、オープンフロー・コントローラとオープンフロー・スイッチの間で送受信される、オープンフロー・メッセージを含む制御用のパケットの構造の例を示している。
【図７Ａ】図７Ａは、オープンフロー・メッセージとしてのフローＭＯＤメッセージの構造の例を示している。図７Ｂは、図７Ａのアクション・フィールドに記述されるアクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤ（学習アクション）の構造の例を示している。図７Ｃは、図７Ａのアクション・フィールドに記述されるアクションＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲ（実験的アクション）の構造の例を示している。
【図７Ｂ】(図7Aで説明)
【図７Ｃ】(図7Aで説明)
【図８】図８は、オープンフロー・メッセージとしてのＦＬＯＷ＿ＬＥＡＲＮＥＤ（学習内容通知）メッセージの構造の例を示している。
【図９Ａ】図９Ａ〜９Ｄは、オープンフロー・スイッチにおける、通常の形態での、複数のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。
【図９Ｃ】(図9Aで説明)
【図１０】図１０Ａ〜１０Ｃは、オープンフロー・スイッチにおける、通常の形態での、複数のアドレスを表す１つのフロー・エントリを含む別のフローテーブルによるパケット処理の例を示している。
【図１１Ａ】図１１Ａ〜１１Ｃは、オープンフロー・スイッチにおける、実施形態での、学習型のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。
【図１１Ｂ】(図11Aで説明)
【図１１Ｃ】(図11Aで説明)
【図１２Ａ】図１２Ａ〜１２Ｄは、オープンフロー・スイッチにおける、実施形態での、別の学習型のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。
【図１２Ｂ】(図12Aで説明)
【図１２Ｃ】(図12Aで説明)
【図１２Ｄ】(図12Aで説明)
【図１３】図１３は、オープンフロー・コントローラによって実行される、学習アルゴリズムを含むフロー・エントリを生成して送信するための処理のフローチャートの例を示している。
【図１４】図１４は、オープンフロー・スイッチによって実行される、学習アルゴリズムを含むフロー・エントリを受信し、フロー・エントリをフローテーブルに設定するための処理のフローチャートの例を示している。
【図１５】図１５は、オープンフロー・スイッチによって実行される、フローテーブルに基づいて受信パケットを処理するためのフローチャートの例を示している。
【図１６】図１６は、オープンフロー・コントローラによって実行される、オープンフロー・コントローラにおけるオープンフロー・スイッチ用のフローテーブルの更新のための処理のフローチャートの例を示している。
【図１７】図１７は、オープンフロー・コントローラによって実行される、オープンフロー・スイッチから統計情報を収集するための処理のフローチャートの例を示している。
【発明を実施するための形態】
【００１２】
発明の目的および利点は、請求の範囲に具体的に記載された構成要素および組み合わせによって実現され達成される。
前述の一般的な説明および以下の詳細な説明は、典型例および説明のためのものであって、本発明を限定するためのものではない、と理解される。
【００１３】
本発明の非限定的な実施形態を、図面を参照して説明する。図面において、同様のコンポーネントおよび要素には同じ参照番号が付されている。
【００１４】
ＳＤＮ（Software-Defined Networking）は、コントロール・レイヤまたはＣプレーンにおけるオープンフロー・コントローラがインフラストラクチャ・レイヤまたはＤプレーンにおけるオープンフロー・スイッチを制御する構造を有する。オープンフロー・コントローラと各オープンフロー・スイッチの間では、例えばオープンフロー・プロトコルを制御用のプロトコルとして用いて、制御回線網を介して通信が行われる。一方、インターネットの詳細な帯域制御およびセキュリティ強化のニーズに対処するために、ユーザ毎およびサービスを提供するサーバ毎の統計情報の収集が求められることがある。オープンフローでは、ネットワーク管理者は、オープンフロー・スイッチを通過するパケットの統計情報を、例えば送信元ＩＰアドレス毎に取得するために、送信元ＩＰアドレス毎のフロー・エントリを作成してフローテーブルに予め設定する。
【００１５】
一方、ネットワーク管理者が、例えば、個々のユーザ毎のフロー・エントリをオープンフロー・スイッチに設定して個々のユーザの統計情報を収集する場合、設定するフロー・エントリ数が多くなる。オープンフロー・スイッチに設定するフロー・エントリ数が多くなると、オープンフロー・スイッチの設定に要する時間が長くなる。そうすると、オープンフロー・スイッチの稼働中にオープンフロー・スイッチが故障した場合、パケット転送ができない時間または転送サービスの中断時間が長くなる。また、オープンフロー・スイッチに設定するフロー・エントリの数が多くなると、フロー・エントリの設定時に必要な制御回線の帯域が増大するので、制御回線の帯域を予め広く確保しておく必要があり、制御回線の維持費用が高くなる。
【００１６】
発明者たちは、オープンフロー・プロトコルを拡張して、個々の受信パケットの種類からマッチ条件を学習して得られた新しいフロー・エントリを作成する学習処理を含むフロー・エントリを、オープンフロー・スイッチに導入すればよい、と認識した。この場合、学習処理は、フローテーブルに規定されていない種類の受信パケットの転送方法を、オープンフロー・コントローラに問い合わせることなく、受信パケットから学習して、学習で得たマッチ条件を含むフロー・エントリをフローテーブルに設定する。
【００１７】
実施形態の目的は、１つのフロー・エントリに基づく学習処理によって複数のフロー・エントリを設定することができるようにすることである。
【００１８】
また、実施形態の別の目的は、複数のフロー・エントリの設定に必要なオープンフロー・スイッチの設定時間を短くすることである。
【００１９】
また、実施形態のさらに別の目的は、オープンフロー・スイッチの運用中にオープンフロー・スイッチが故障した場合に発生し得るパケット転送サービスの中断時間をより短くすることである。
【００２０】
また、実施形態のさらに別の目的は、確保する制御回線の帯域を小さくして制御回線の維持コストを低くできるようにすることである。
【００２１】
これらの目的は、実施形態によって達成することができる。
【００２２】
図１は、オープンフロー・コントローラ１０、および複数のオープンフロー・スイッチ２０、２２、．．．２４を含む転送システム２の概略的な構成（configuration）の例を示している。
【００２３】
図１において、オープンフロー・コントローラ１０は、制御回線網５を介してオープンフロー・スイッチ２０〜２４に接続されている。オープンフロー・コントローラ（制御器）１０は、転送制御装置であり、制御回線網５中のＬ２（レイヤ２）スイッチ５２を介して、各オープンフロー・スイッチ２０〜２４にフロー・エントリを送信する。オープンフロー・スイッチ２０〜２４の各々は、パケットの転送装置であり、受信したオープンフロー・エントリを自己のフローテーブルに設定する。
【００２４】
各オープンフロー・スイッチ２０〜２４は、それぞれの複数の通信ポートがネットワーク７に接続されており、自己のフローテーブルにおける各フロー・エントリのマッチ条件に従って、対応するアクション（処理）を実行して統計情報を生成する。各オープンフロー・スイッチ２０〜２４は、例えば、入力ポートで受信したパケットの送信元および／または宛先ＩＰアドレスに応じてフローテーブルにおけるマッチ条件に従って、受信パケットを、指定された出力ポートを介してネットワーク７に転送する。その際、各オープンフロー・スイッチ２０〜２４は、マッチ条件毎に、例えば、処理または転送したパケットのパケット数、バイト数、等の統計情報をフローテーブルに保存する。統計情報は、ネットワーク７の通信業者またはネットワーク・ユーザによって利用されてもよい。
【００２５】
ネットワーク７は、例えば、インターネット、ＩＳＤＮ、パケット網、専用ネットワーク、等を含んでいてもよい。
【００２６】
図２は、オープンフロー・コントローラ１０の概略的な構成（configuration）の例を示している。
【００２７】
図２において、オープンフロー・コントローラ１０は、例えば、内部バスを介して接続された、プロセッサ１０２、記憶部１０４、通信部１１２および入出力部（Ｉ／Ｏ）１１６を含んでいる。
【００２８】
プロセッサ１０２は、コンピュータ用のＣＰＵ（Central Processing Unit）であってもよい。記憶部１０４は、主記憶装置および補助記憶装置を含んでいる。主記憶装置は、半導体メモリ等の記憶装置を含んでいる。補助記憶装置は、例えば、フラッシュ・メモリのような半導体メモリおよび／またはハードディスク・ドライブ（ＨＤＤ）を含んでいてもよい。
【００２９】
入出力部１１６は、例えば、それぞれの入出力端子１２８を介して、液晶表示装置のような表示装置、キーボードおよびポインティング・デバイスのような入力装置、等に接続することができる。
【００３０】
通信部１１２には、複数の制御ポート１２２が設けられている。通信部１１２は、それぞれの制御ポート１２２を介し、制御回線網５中のＬ２スイッチ５２を介してオープンフロー・スイッチ２０〜２４に接続される。
【００３１】
オープンフロー・コントローラ１０は、外付けドライブ１６０に接続可能であってもよい。ドライブ１６０は、ソフトウェアまたはプログラムが記録された例えば光ディスクまたは磁気ディスクのような記録媒体１６４を読み取るためのものであってもよい。そのソフトウェアは、例えば、ＯＳ、データベース管理システム（ＤＢＭＳ）、通信制御用のアプリケーション・プログラム、等を含んでいてもよい。
【００３２】
プロセッサ１０２は、例えば集積回路として実装された専用のプロセッサであってもよい。また、プロセッサ１０２は、記憶部１０４に格納されたＯＳおよび通信用のアプリケーション・プログラムに従って動作するものであってもよい。アプリケーション・プログラムは、記録媒体１６４に格納されていて、ドライブ１６０によって記録媒体１６４から読み出されてオープンフロー・コントローラ１０にインストールされてもよい。
【００３３】
図３は、オープンフロー・スイッチ２０〜２４の概略的な構成（configuration）の例を示している。
【００３４】
図３において、オープンフロー・スイッチ２０〜２４の各々は、例えば、内部バスを介して接続された、プロセッサ２０２、記憶部２０４、通信部２１２および入出力部（Ｉ／Ｏ）２１６を含んでいる。
【００３５】
プロセッサ２０２は、コンピュータ用のＣＰＵ（Central Processing Unit）であってもよい。記憶部２０４は、主記憶装置および補助記憶装置を含んでいる。主記憶装置は、半導体メモリ等の記憶装置を含んでいる。補助記憶装置は、例えば、フラッシュ・メモリのような半導体メモリを含んでいてもよい。プロセッサ２０２は、例えば集積回路として実装された専用のプロセッサであってもよい。
【００３６】
入出力部２１６は、例えば、それぞれの入出力端子２２８を介して、液晶表示装置のような表示装置、キーボードおよびポインティング・デバイスのような入力装置、等に接続することができる。
【００３７】
通信部２１２には、制御ポート２２２および複数の通信ポート２２４が設けられている。通信ポート２２４は、複数の入力ポートまたは入力部および複数の出力ポートまたは出力部、または複数の入出力ポートまたは入出力部を含んでいる。通信部２１２は、それぞれの制御ポート２２２を介し、制御回線網５中のＬ２スイッチ５２を介してオープンフロー・コントローラ１０に接続される。また、通信部２１２は、通信ポート２２４を介して、ネットワーク７上のノード装置、ルータ装置、および／またはその他のネットワーク通信装置に接続することができる。
【００３８】
オープンフロー・スイッチ２０〜２４は、外付けドライブ２６０に接続可能であってもよい。ドライブ２６０は、ソフトウェアまたはプログラムが記録された例えば光ディスクまたは磁気ディスクのような記録媒体２６４を読み取るためのものであってもよい。そのソフトウェアは、例えば、ＯＳ、データベース管理システム（ＤＢＭＳ）、通信用のアプリケーション・プログラム、等を含んでいてもよい。
【００３９】
プロセッサ２０２は、例えば集積回路として実装された専用のプロセッサであってもよい。また、プロセッサ２０２は、記憶部２０４に格納されたＯＳおよび通信用のアプリケーション・プログラムに従って動作するものであってもよい。アプリケーション・プログラムは、記録媒体２６４に格納されていて、ドライブ２６０によって記録媒体２６４から読み出されてオープンフロー・スイッチ２０〜２４にインストールされてもよい。代替形態として、アプリケーション・プログラムは、例えばオープンフロー・コントローラ１０または通信用のサーバ等からダウンロードされてオープンフロー・スイッチ２０〜２４にインストールされてもよい。
【００４０】
オープンフロー・スイッチ２０〜２４の記憶部２０４は、後で説明するように、フローテーブルを保持している。また、オープンフロー・コントローラ１０は、後で説明するように、オープンフロー・スイッチ２０〜２４に送信したフロー・エントリと、オープンフロー・スイッチ２０〜２４から受信したフロー・エントリとを記憶部１０４の対応するフローテーブルに保存する。
【００４１】
図４は、オープンフロー・コントローラ１０のプロセッサ１０２の概略的な構成（configuration）の例を示している。
【００４２】
プロセッサ１０２は、例えば、制御部１０２０、フロー・エントリ生成部１０２４、統計情報収集部１０２６、フローテーブル同期処理部１０２８、学習アルゴリズム生成部１０３０、およびその他の処理部１０３２を含んでいる。制御部１０２０は、フロー・エントリ生成部１０２４、統計情報収集部１０２６、フローテーブル同期処理部１０２８、学習アルゴリズム生成部１０３０および処理部１０３２に制御信号を供給して、これらの要素の動作を制御してもよい。
【００４３】
フロー・エントリ生成部１０２４は、管理者の操作に従って、オープンフロー・スイッチ２０〜２４に送信されるフロー・エントリを生成する。統計情報収集部１０２６は、オープンフロー・スイッチ２０〜２４から送信された統計情報をフロー・エントリ毎に収集して、記憶部１０４におけるオープンフロー・スイッチ２０〜２４毎のフローテーブルに保存する。フローテーブル同期処理部１０２８は、オープンフロー・スイッチ２０〜２４との間で、相互のフローテーブルのフロー・エントリが一致するように同期処理を行う。学習アルゴリズム生成部１０３０は、オープンフロー・スイッチ２０〜２４に送信されるフロー・エントリの処理内容に含まれる学習処理用の学習アルゴリズムを生成する。
【００４４】
図５は、オープンフロー・スイッチ２０〜２４のプロセッサ２０２の概略的な構成（configuration）の例を示している。
【００４５】
プロセッサ２０２は、例えば、制御部２０２０、フローテーブル参照部２０２４、パケット転送部２０２６、パケットイン・メッセージ生成部２０２８、およびフロー・エントリ設定部２０３０、を含んでいる。プロセッサ２０２は、さらに、例えば、受信パケット自己展開部２０３２、学習内容通知メッセージ生成部２０３４、およびその他の処理部２０３６を含んでいる。制御部２０２０は、フローテーブル参照部２０２４、パケット転送部２０２６、パケットイン・メッセージ生成部２０２８、およびフロー・エントリ設定部２０３０に制御信号を供給して、これらの要素の動作を制御してもよい。制御部２０２０は、さらに、受信パケット自己展開部２０３２、学習内容通知メッセージ生成部２０３４および処理部２０３６に制御信号を供給して、これらの要素の動作を制御してもよい。
【００４６】
フローテーブル参照部２０２４は、パケットの受信に応答して、受信パケットについて記憶部２０４内のフローテーブルを参照する。パケット転送部２０２６は、受信したパケットを、通信ポート２２４中の指定された出力ポートに出力してネットワーク７上の他のノードへ転送する。パケットイン・メッセージ生成部２０２８は、受信パケットについてオープンフロー・コントローラ１０に問い合わせるためのパケットイン・メッセージを生成する。ここで、パケットイン・メッセージは、例えば、処理法がフローテーブルに示されていない受信パケットの処理法を、オープンフロー・コントローラ１０に問い合わせるためのメッセージである。フロー・エントリ設定部２０３０は、オープンフロー・コントローラ１０から受信したまたは学習処理で生成したフロー・エントリをフローテーブルに登録または設定する。受信パケット自己展開部２０３２は、学習処理の学習アルゴリズムに従って、受信パケットを自己展開して、受信パケットに対応するマッチ条件を生成する。学習内容通知メッセージ生成部２０３４は、オープンフロー・コントローラ１０との間でフローテーブルを同期化するために、学習によって生成してフローテーブルに設定したフロー・エントリを通知するためのメッセージを生成する。
【００４７】
図６は、オープンフロー・コントローラ１０とオープンフロー・スイッチ２０〜２４の間で送受信される、オープンフロー・メッセージを含む制御用のパケットの構造の例を示している。
【００４８】
図６において、制御用のパケットは、例えば、イーサネット（登録商標）ヘッダ、ＩＰヘッダ、ＴＣＰヘッダ、およびＴＣＰデータとしてのオープンフロー・メッセージを含んでいる。
【００４９】
図７Ａは、オープンフロー・メッセージとしてのフローＭＯＤメッセージの構造の例を示している。フローＭＯＤメッセージはフローテーブルの更新要求である。
【００５０】
フローＭＯＤメッセージは、例えば、共通ヘッダ部、およびフローＭＯＤ情報を含んでいる。フローＭＯＤ情報は、例えば、マッチ（match）情報、および命令（instructions）情報配列を含んでいる。命令情報配列は、ｎ個の命令（情報）を含んでいる。マッチ情報は、例えば、マッチ種別、およびｏｘｍフィールドを含んでいる。各命令は、例えば、命令種別、およびアクション・フィールドを含んでいる。実施形態によるアクション・フィールドの記述の例として、アクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤ（学習アクション）、およびＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲ（実験的アクション）の２種類が考えられる。アクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤは、次に説明する図７Ｂに例示するような新たに追加されるアクションである。また、アクションＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲは、次に説明する図７Ｃに例示するような実験的な追加アクションとして提案されるアクションである。
【００５１】
図７Ｂは、図７Ａのアクション・フィールドに記述されるアクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤ（学習アクション）の構造の例を示している。
【００５２】
アクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤは、例えば、タイプ（type）、および学習アクション（learning_action）を含んでいる。学習アクション（learning_action）は、例えば、ｌｅａｒｎｉｎｇ＿ｉｄ（学習アクションを示す識別情報の値）、ｐｒｉｏｒｉｔｙ（フローの優先度）、ｎ個の学習マッチ・タイプ（learning_match_type）情報を含んでいる。各学習マッチ・タイプは、例えば、ｏｘｍフィールド（学習するマッチ条件の種類を示す値）を含んでいる。
【００５３】
図７Ｃは、図７Ａのアクション・フィールドに記述されるアクションＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲ（実験的アクション）の構造の例を示している。
【００５４】
アクションＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲは、例えば、図７ＢのアクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤの各フィールドに加えて、ｅｘｐｅｒｉｍｅｎｔｅｒ（ＯＮＦに申請する学習アクションのタイプ番号）を含んでいる。
【００５５】
このように、オープンフロー・スイッチ２０〜２４に実行させる学習処理の内容を表す学習アクションは、フローＭＯＤメッセージにおいてアクションＯＦＰＡＴ＿ＬＥＡＲＮＥＤとＯＦＰＡＴ＿ＥＸＰＥＲＩＭＥＮＴＥＲの２種類のいずれかで記述することができる。
【００５６】
図８は、オープンフロー・メッセージとしてのＦＬＯＷ＿ＬＥＡＲＮＥＤ（学習内容通知または学習済みフロー通知）メッセージの構造の例を示している。フローＬＥＡＲＮＥＤメッセージは、オープンフロー・スイッチ２０〜２４における学習済みフローの内容を通知するためのメッセージである。
【００５７】
ＦＬＯＷ＿ＬＥＡＲＮＥＤメッセージは、例えば、共通ヘッダ部、およびフローＬＥＡＲＮＥＤ情報を含んでいる。ＦＬＯＷ＿ＬＥＡＲＮＥＤ情報は、例えば、ｌｅａｒｎｉｎｇ＿ｉｄ（学習アクションを示す識別情報の値）、ＯＸＭ ＴＬＶヘッダ、およびＯＸＭペイロードを含んでいる。ｌｅａｒｎｉｎｇ＿ｉｄ、ＯＸＭ ＴＬＶヘッダ、およびＯＸＭペイロードは、受信パケットによるマッチ条件の学習に使用された学習アクションの学習マッチ・タイプ情報配列の長さ分だけ繰り返される。
【００５８】
次は、通常のマッチ条件およびアクションを含むフロー・エントリによる、オープンフロー・スイッチ２０の動作について説明する。
【００５９】
図９Ａ〜９Ｄは、オープンフロー・スイッチ２０における、通常の形態での、複数のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。
【００６０】
図９Ａは、オープンフロー・コントローラ１０によってオープンフロー・スイッチ２０に設定されたフローテーブルの例を示している。
【００６１】
図９Ａのフローテーブルのフロー・エントリにおいて、マッチ条件として一連の２５５個の送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．１／３２〜１９２．１６８．１．２５５／３２が設定されるものとする。そのために、オープンフロー・コントローラ１０がオープンフロー・スイッチ２０に２５５個のフロー・エントリを送信し、オープンフロー・スイッチ２０が２５５個のフロー・エントリを図９Ａのフローテーブルに設定する。また、図９Ａのフローテーブルの各フロー・エントリにおいて、受信パケットについてマッチ条件が満たされた場合に実行される対応するアクションとしてポート番号“２”の出力ポートへの出力処理“ｏｕｔｐｕｔ＝２”が設定されている。ここで、マッチ条件は、対応するアクションの実行条件である。アクションは、受信パケットをポート番号“２”の出力ポートに出力することを表す。各フロー・エントリにおいて、統計情報の初期値は、例えばパケット数＝０パケット（packet）である。
【００６２】
図９Ａのフローテーブルでは、多数のフロー・エントリがオープンフロー・コントローラ１０からオープンフロー・スイッチ２０に制御回線網５を介して送信される。従って、フロー・エントリの送信にかかる時間が長く、フロー・エントリの送信で使用される制御回線網５の帯域幅が大きい。また、オープンフロー・スイッチ２０のフローテーブルに設定されるフロー・エントリが多いので、オープンフロー・スイッチ２０におけるフロー・エントリの設定時間も長い。
【００６３】
図９Ｂにおいて、オープンフロー・スイッチ２０（またはそのプロセッサ２０２）は、入力ポートで受信したパケットを解析して、受信パケットが、フローテーブル中の各行のフロー・エントリ中のいずれかのマッチ条件を満たすかどうかを判定する。この場合、最初の受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．１、および宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、受信パケットはフローテーブルの最初の行のフロー・エントリのマッチ条件ｓｒｃ＿ｉｐ＝１９２．１６８．１．１／３２を満たすので、受信パケットはポート番号“２”の出力ポートに出力される。また、最初の行のフロー・エントリの統計情報として、パケット数＝１パケット（packet）が記録される（破線）。
【００６４】
図９Ｃにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、受信パケットが、フローテーブル中の各行のフロー・エントリ中のいずれかのマッチ条件を満たすかどうかを判定する。この場合も、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．１、および宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、図９Ｂの場合と同様に、受信パケットはポート番号“２” の出力ポートに出力され、図９Ｃのフローテーブルにおける最初の行のフロー・エントリの統計情報としてパケット数＝２パケット（packet）が記録される（破線）。
【００６５】
図９Ｄにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、受信パケットが、フローテーブル中の各行のフロー・エントリ中のいずれかのマッチ条件を満たすかどうかを判定する。この場合、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．２、および宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、受信パケットは、図９Ｃのフローテーブルにおける２番目の行のフロー・エントリのマッチ条件ｓｒｃ＿ｉｐ＝１９２．１６８．１．２／３２を満たすので、受信パケットはポート番号“２”の出力ポートに出力される。また、フローテーブルにおける２番目の行のフロー・エントリの統計情報として、パケット数＝１パケット（packet）が記録される（破線）。
【００６６】
図１０Ａ〜１０Ｃは、オープンフロー・スイッチ２０における、通常の形態での、複数のアドレスを表す１つのフロー・エントリを含む別のフローテーブルによるパケット処理の例を示している。
【００６７】
図１０Ａは、オープンフロー・コントローラ１０によってオープンフロー・スイッチ２０に設定されたフローテーブルの例を示している。
【００６８】
図１０Ａのフローテーブルのフロー・エントリにおいて、マッチ条件として、範囲指定された送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４が設定されるものとする。ここで、“／２４”はサブネットマスクを表している。また、ｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４は、送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．１／３２〜１９２．１６８．１．２５５／３２の範囲の一連の２５５個のＩＰアドレスを含んでいる。それによって、連続する数値のＩＰアドレスが、サブネットマスクで簡潔に表現できる。この場合、オープンフロー・コントローラ１０がオープンフロー・スイッチ２０に１個のフロー・エントリを送信し、オープンフロー・スイッチ２０が１個のフロー・エントリを図１０Ａのフローテーブルに設定すればよい。また、図１０Ａのフローテーブルのフロー・エントリにおいて、受信パケットについてマッチ条件が満たされた場合に実行される対応するアクションとしてポート番号“２”の出力ポートへの出力処理“ｏｕｔｐｕｔ＝２”が設定されている。この場合、受信パケットが、ポート番号“２”の出力ポートに出力される。フロー・エントリにおいて、統計情報の初期値は、例えばパケット数＝０パケット（packet）である。
【００６９】
図１０Ｂにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、入力ポートで受信したパケットを解析して、受信パケットが、フローテーブル中の各行のフロー・エントリ中のいずれかのマッチ条件を満たすかどうかを判定する。この場合、受信パケットにおいて、図９Ａと同様に、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．１、および宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、受信パケットはフローテーブルのフロー・エントリのマッチ条件ｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４を満たすので、受信パケットはポート番号“２”の出力ポートに出力される。図１０Ｂのフロー・エントリの統計情報として、パケット数＝１パケット（packet）が記録される（破線）。
【００７０】
図１０Ｃにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、受信パケットが、フローテーブル中の各行のフロー・エントリ中のいずれかのマッチ条件を満たすかどうかを判定する。この場合、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．２、および宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、図９Ｄの場合と同様に、受信パケットはフローテーブルのフロー・エントリのマッチ条件ｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４を満たすので、受信パケットはポート番号“２”の出力ポートに出力される。また、図１０Ｃのフロー・エントリの統計情報として、パケット数＝２パケット（packet）が記録される（破線）。従って、マッチ条件としてアドレスが範囲指定された場合、範囲指定されたアドレス範囲全体について、１つの統計情報が生成され、個々のアドレスについて統計情報が生成されることはない。
【００７１】
次は、実施形態によるマッチ条件およびアクションを含むフローによる、オープンフロー・スイッチ２０の動作について説明する。この場合、アクションは、学習アクションまたは学習処理を含んでいる。
【００７２】
図１１Ａ〜１１Ｃは、オープンフロー・スイッチ２０における、実施形態での、学習型のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。この場合、学習型のフロー・エントリは、学習アクションまたは学習処理を含んでいる。
【００７３】
図１１Ａは、オープンフロー・コントローラ１０によってオープンフロー・スイッチ２０に設定された学習型のフロー・エントリを含むフローテーブルの例を示している。
【００７４】
オープンフロー・コントローラ１０は、オープンフロー・スイッチ２０のフローテーブルに複数のフロー・エントリを設定するために、学習アルゴリズムを含む１つの学習型のフロー・エントリまたは転送制御情報を、オープンフロー・スイッチ２０に送信する。次いで、オープンフロー・スイッチ２０は、受信した１つの学習型のフロー・エントリをフローテーブルに設定する。それによって、図１１Ａのように、フローテーブルにフロー・エントリが設定される。
【００７５】
図１１Ａのフローテーブルのフロー・エントリにおいて、マッチ条件として、ネットワーク識別子としての送信元ＩＰアドレスｓｒｃ＿ｉｐ＝ｘｘ／２４が設定されるものとする。また、図１１Ａのフローテーブルのフロー・エントリにおいて、マッチ条件が満たされた場合に実行される対応するアクションとして学習処理“ｌｅａｒｎｉｎｇ”および出力処理“ｏｕｔｐｕｔ＝２”が設定されている。
【００７６】
学習処理“ｌｅａｒｎｉｎｇ”の内容は、例えば、次の３つの項目を含んでいる。
（１）“ｌｅａｒｎｇ＿ｉｄ＝１”、
（２）“ｐｒｉｏｒｉｔｙ＝３０００”、
（３）“ｌｅａｒｎｉｎｇ＿ｍａｔｃｈ＿ｔｙｐｅ＝［ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰＶ４＿ＳＲＣ，ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰＶ４＿ＤＳＴ，ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰ＿ＰＲＯＴＯ］”。
【００７７】
ここで、“ｌｅａｒｎｇ＿ｉｄ＝１”は、学習アクションを示す識別情報の値であり、この場合の値は“１”である。“ｐｒｉｏｒｉｔｙ＝３０００”は、学習処理によって生成されるフローの優先度である。学習マッチ・タイプ“ｌｅａｒｎｉｎｇ＿ｍａｔｃｈ＿ｔｙｐｅ”は、学習アクション等のアクションを実行するためのマッチ条件が記述されることを表している。“ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰＶ４＿ＳＲＣ”は、そのマッチ条件の一部として、受信パケットの送信元アドレスがコピーされて使用されることを表す。“ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰＶ４＿ＤＳＴ”は、そのマッチ条件の一部として、受信パケットの宛先アドレスがコピーされて使用されることを表す。“ＯＦＰＸＭＴ＿ＯＦＢ＿ＩＰ＿ＰＲＯＴＯ”は、そのマッチ条件の一部として、受信パケットのプロトコル・タイプがコピーされて使用されることを表す。
【００７８】
図１１Ａのフローテーブルでは、１つの学習型のフロー・エントリがオープンフロー・コントローラ１０からオープンフロー・スイッチ２０に制御回線網５を介して送信される。従って、学習型のフロー・エントリの送信にかかる時間は短く、学習型のフロー・エントリの送信で使用される制御回線網５の帯域幅は小さい。また、オープンフロー・スイッチ２０のフローテーブルに設定される学習型のフロー・エントリの数は少なくて済む。従って、オープンフロー・スイッチ２０における学習型のフロー・エントリの設定時間も短い。
【００７９】
図１１Ｂにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、最初に受信したパケットを解析して、フロー・エントリの優先度順に、受信パケットが、フローテーブル中の各行のフロー・エントリのいずれかのマッチ条件を満たすかどうかを判定する。この場合、最初の受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝ｘｘ、宛先ＩＰアドレスｄｓｔ＿ｉｐ＝ｙｙ、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、受信パケットはフローテーブルの優先度１のフロー・エントリのマッチ条件ｓｒｃ＿ｉｐ＝ｘｘ／２４を満たすので、学習アクションまたは学習処理が実行される。
【００８０】
学習アクションにおいて、図１１Ｂのフローテーブルにおいて、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプに基づく新しいマッチ条件を含む新しいフロー・エントリが生成される。その際、学習アクションの学習マッチ・タイプに従って、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプが取り出されて、新しいフロー・エントリのマッチ条件として、フローテーブルに書き込まれる。
【００８１】
この場合、新しいフロー・エントリのマッチ条件は、ネットワーク識別子としての送信元ＩＰアドレスｓｒｃ＿ｉｐ＝ｘｘ/３２、ネットワーク識別子としての宛先ＩＰアドレスｄｓｔ＿ｉｐ＝ｙｙ/３２、およびプロトコル・タイプｉｐ＿ｔｙｐｅ＝６となる。また、新しいフロー・エントリには、学習アクションで指定された優先度“３０００”、および、マッチ条件を動作条件とする、学習型のフロー・エントリの残りのアクション“ｏｕｔｐｕｔ＝２”が設定される。
【００８２】
それによって、オープンフロー・スイッチ２０において、学習処理の内容に基づいて受信パケットから学習された各種類の受信パケットのマッチ条件を含む新しいフロー・エントリが生成されて、新しいフロー・エントリがフローテーブルに設定できる。
【００８３】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、学習アクション以外の残りのアクション“ｏｕｔｐｕｔ＝２”を実行する。従って、受信パケットがポート番号“２”の出力ポートに出力されて転送される。オープンフロー・スイッチ２０（プロセッサ２０２）は、さらに、優先度“１”および“３０００”のフロー・エントリに、統計情報として、処理されたパケット数＝１パケット（packet）を記録する（破線）。
【００８４】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、追加した新しいフロー・エントリにおける、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含む学習内容通知メッセージを、オープンフロー・コントローラ１０に送信する。オープンフロー・コントローラ１０（プロセッサ１０２）は、受信した学習内容通知メッセージから、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を取り出す。次いで、オープンフロー・コントローラ１０（プロセッサ１０２）は、取り出した学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含むフロー・エントリを、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルに保存する。
【００８５】
それによって、オープンフロー・スイッチ２０のフローテーブルと、オープンフロー・コントローラ１０におけるオープンフロー・スイッチ２０用のフローテーブルとが、一致し、同期化される。このようなフローテーブル同期化のための、図１１Ｂの学習内容通知メッセージの送信は、学習型のフロー・エントリのマッチ条件を満たす異なる種類のパケットが受信されたときに発生し、従って時間的に分散して発生する。従って、学習内容通知メッセージの送信に使用される制御回線網５の帯域幅は小さくて済む。また、オープンフロー・スイッチ２０からオープンフロー・コントローラ１０への学習内容通知メッセージの送信が遅延しても、オープンフロー・スイッチ２０によって提供されるパケット転送サービスがその影響を受けることはない。
【００８６】
図１１Ｃにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、フロー・エントリの優先度順に、受信パケットが、フローテーブル中の各フロー・エントリのいずれかのマッチ条件を満たすかどうかを判定する。この場合も、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝ｘｘ、宛先ＩＰアドレスｄｓｔ＿ｉｐ＝ｙｙ、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。
【００８７】
従って、オープンフロー・スイッチ２０（プロセッサ２０２）は、先ず、受信パケットのヘッダ等を、図１１Ｂで生成された高い優先度“３０００”のフロー・エントリのマッチ条件と比較する。受信パケットは、優先度“３０００”のフロー・エントリのマッチ条件を満たすので、対応するアクションに従って受信パケットがポート番号“２”の出力ポートに出力されて転送される。この場合、優先度“３０００”のフロー・エントリに、統計情報として、その時点までに処理されたパケットのパケット数＝２パケット（packet）が記録される（破線）。
【００８８】
このようにして、学習型のフロー・エントリに従って、マッチ条件ｓｒｃ＿ｉｐ＝ｘｘ／２４を満たす新しいパケットが受信される度に、学習アクションが実行されて、優先度の高い新しいフロー・エントリが生成される。それによって、フローテーブルに追加されたそれぞれのフロー・エントリ毎に統計情報が得られるようになる。フローテーブルにおける各フロー・エントリの統計情報は、後で、オープンフロー・コントローラ１０によって収集される。
【００８９】
図１２Ａ〜１２Ｄは、オープンフロー・スイッチ２０における、実施形態での、別の学習型のフロー・エントリを含むフローテーブルによるパケット処理の例を示している。
【００９０】
図１２Ａは、オープンフロー・コントローラ１０によってオープンフロー・スイッチ２０に設定された別の学習型のフロー・エントリを含むフローテーブルの例を示している。
【００９１】
オープンフロー・コントローラ１０は、オープンフロー・スイッチ２０のフローテーブルに複数のフロー・エントリを設定するために、学習アルゴリズムを含む別の１つの学習型のフロー・エントリまたは転送制御情報を、オープンフロー・スイッチ２０に送信する。次いで、オープンフロー・スイッチ２０は、受信した１つの学習型のフロー・エントリをフローテーブルに設定する。それによって、図１２Ａのように、フローテーブルにフロー・エントリが設定される。
【００９２】
図１２Ａのフローテーブルのフロー・エントリにおいて、マッチ条件が設定されている。この場合、マッチ条件は、範囲指定された送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４、範囲指定された宛先ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１０．０／２４、およびプロトコル・タイプ“ｉｐ＿ｔｙｐｅ＝６”を含んでいる。この場合、ｓｒｃ＿ｉｐ＝１９２．１６８．１．０／２４は、送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．１／３２〜１９２．１６８．１．２５５／３２の範囲の一連の２５５個のＩＰアドレスを含んでいる。また、ｓｒｃ＿ｉｐ＝１９２．１６８．１０．０／２４は、宛先ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１０．１／３２〜ｓｒｃ＿ｉｐ＝１９２．１６８．１０．２５５／３２の範囲の一連の２５５個のＩＰアドレスを含んでいる。
【００９３】
また、図１２Ａのフローテーブルのフロー・エントリにおいて、マッチ条件が満たされた場合に実行される対応するアクションとして学習処理“ｌｅａｒｎｉｎｇ”および出力処理“ｏｕｔｐｕｔ＝２”が設定されている。学習処理“ｌｅａｒｎｉｎｇ”の内容は、例えば、図１１Ａの場合と同様である。
【００９４】
図１２Ｂにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、最初に受信したパケットを解析して、フロー・エントリの優先度順に、受信パケットが、フローテーブル中の各行のフロー・エントリのいずれかのマッチ条件を満たすかどうかを判定する。この場合、最初の受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．１、宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。従って、受信パケットはフローテーブルの優先度“１”のフロー・エントリのマッチ条件を満たすので、学習アクションが実行される。
【００９５】
学習アクションにおいて、図１２Ｂのフローテーブルにおいて、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプに基づく新しいマッチ条件を含む新しいフロー・エントリが生成される。その際、学習アクションの学習マッチ・タイプに従って、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプが取り出されて、新しいフロー・エントリのマッチ条件として、フローテーブルに書き込まれる。
【００９６】
この場合、新しいフロー・エントリのマッチ条件は、マッチ条件送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．１／３２、宛先ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１０．２／３２、およびプロトコル・タイプ“ｉｐ＿ｔｙｐｅ＝６”となる。また、新しいフロー・エントリには、学習アクションで指定された優先度“３０００”、および、マッチ条件を動作条件とする、学習型のフロー・エントリの残りのアクション“ｏｕｔｐｕｔ＝２”が設定される。
【００９７】
それによって、オープンフロー・スイッチ２０において、学習処理の内容に基づいて受信パケットから学習した各種類の受信パケットのマッチ条件を含む新しいフロー・エントリが、生成されてフローテーブルに設定できる。
【００９８】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、学習アクション以外の残りのアクション“ｏｕｔｐｕｔ＝２”を実行する。従って、受信パケットがポート番号“２”の出力ポートに出力されて転送される。オープンフロー・スイッチ２０（プロセッサ２０２）は、さらに、優先度“１”および“３０００”のフロー・エントリに、統計情報として、処理されたパケット数＝１パケット（packet）を記録する（破線）。
【００９９】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、追加した新しいフロー・エントリにおける、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含む学習内容通知メッセージを、オープンフロー・コントローラ１０に送信する。オープンフロー・コントローラ１０（プロセッサ１０２）は、受信した学習内容通知メッセージから、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を取り出す。次いで、オープンフロー・コントローラ１０（プロセッサ１０２）は、取り出した学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含むフロー・エントリを、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルに保存する。
【０１００】
それによって、オープンフロー・スイッチ２０のフローテーブルと、オープンフロー・コントローラ１０におけるオープンフロー・スイッチ２０用のフローテーブルとが、一致し、同期化される。
【０１０１】
図１２Ｃにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、フロー・エントリの優先度順に、受信パケットが、フローテーブル中の各フロー・エントリのいずれかのマッチ条件を満たすかどうかを判定する。この場合も、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．１、宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。
【０１０２】
従って、オープンフロー・スイッチ２０（プロセッサ２０２）は、先ず、受信パケットのヘッダ等を、図１２Ｂで生成された高い優先度“３０００”のフロー・エントリのマッチ条件と比較する。受信パケットは、優先度“３０００”のフロー・エントリのマッチ条件を満たすので、対応するアクションに従って受信パケットがポート番号“２”の出力ポートに出力されて転送される。この場合、優先度“３０００”のフロー・エントリに、統計情報として、その時点までに処理されたパケットのパケット数＝２パケット（packet）が記録される（破線）。
【０１０３】
図１２Ｄにおいて、オープンフロー・スイッチ２０（プロセッサ２０２）は、次に受信したパケットを解析して、フロー・エントリの優先度順に、受信パケットが、フローテーブル中の各フロー・エントリのいずれかのマッチ条件を満たすかどうかを判定する。この場合、受信パケットにおいて、送信元ＩＰアドレスがｓｒｃ＿ｉｐ＝１９２．１６８．１．２、宛先ＩＰアドレスがｄｓｔ＿ｉｐ＝１９２．１６８．１０．２、プロトコル・タイプがｉｐ＿ｔｙｐｅ＝６であるものとする。
【０１０４】
従って、オープンフロー・スイッチ２０（プロセッサ２０２）は、先ず、受信パケットのヘッダ等を、図１２Ｂで生成された高い優先度“３０００”のフロー・エントリのマッチ条件と比較する。この場合、受信パケットは、優先度“３０００”のフロー・エントリのマッチ条件を満たさない。
【０１０５】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、受信パケットのヘッダ等を、次に高いまたは低い優先度“１”の学習型のフロー・エントリのマッチ条件と比較する。この場合、受信パケットは、優先度“１”の学習型のフロー・エントリのマッチ条件を満たすので、学習アクションが実行される。
【０１０６】
学習アクションにおいて、図１２Ｄのフローテーブルにおいて、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプに基づく新しいマッチ条件を含む新しいフロー・エントリが生成される。その際、学習アクションの学習マッチ・タイプに従って、受信パケットの送信元アドレス、宛先アドレス、およびプロトコル・タイプが取り出されて、新しいフロー・エントリのマッチ条件として、フローテーブルに書き込まれる。
【０１０７】
この場合、新しいフロー・エントリのマッチ条件は、マッチ条件送信元ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１．２／３２、宛先ＩＰアドレスｓｒｃ＿ｉｐ＝１９２．１６８．１０．２／３２、およびプロトコル・タイプ“ｉｐ＿ｔｙｐｅ＝６”となる。また、新しいフロー・エントリには、学習アクションで指定された優先度“３０００”、および、マッチ条件を動作条件とする、学習型のフロー・エントリの残りのアクション“ｏｕｔｐｕｔ＝２”が設定される。
【０１０８】
それによって、オープンフロー・スイッチ２０において、学習処理の内容に基づいて別の受信パケットから学習した別の種類の受信パケットのマッチ条件を含む別の新しいフロー・エントリが、生成されてフローテーブルに設定できる。
【０１０９】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、学習アクション以外の残りのアクション“ｏｕｔｐｕｔ＝２”を実行する。従って、受信パケットがポート番号“２”の出力ポートに出力されて転送される。オープンフロー・スイッチ２０（プロセッサ２０２）は、さらに、優先度“１”のフロー・エントリに、統計情報として、処理されたパケット数＝２パケット（packet）を記録する（破線）。また、オープンフロー・スイッチ２０（プロセッサ２０２）は、優先度“３０００”の新しいフロー・エントリに、統計情報として、処理されたパケット数＝１パケット（packet）を記録する（破線）。
【０１１０】
次いで、オープンフロー・スイッチ２０（プロセッサ２０２）は、新たに追加したフロー・エントリにおける、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含む学習内容通知メッセージを、オープンフロー・コントローラ１０に送信する。次いで、オープンフロー・コントローラ１０（プロセッサ１０２）は、受信した学習内容通知メッセージから、学習アクション識別情報、優先度、および学習したマッチ条件（破線）を取り出す。次いで、オープンフロー・コントローラ１０（プロセッサ１０２）は、取り出した学習アクション識別情報、優先度、および学習したマッチ条件（破線）を含むフロー・エントリを、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルに保存する。
【０１１１】
このようにして、学習型のフロー・エントリに従って、学習型のフロー・エントリのマッチ条件を満たす異なる種類のパケットが受信される度に、異なるマッチ条件を含む優先度の高い新しいフロー・エントリが生成されてフローテーブルに設定できる。それによって、異なるフロー・エントリ毎に統計情報が得られるようになる。
【０１１２】
その後、オープンフロー・コントローラ１０（プロセッサ１０２）は、オープンフロー・スイッチ２０のフローテーブルの統計情報を要求する統計情報要求メッセージを、オープンフロー・スイッチ２０に送信する。オープンフロー・スイッチ２０（プロセッサ２０２）は、統計情報要求メッセージの受信に応答して、自己のフローテーブルの各フロー・エントリの統計情報を取り出し、取り出した統計情報を含む応答メッセージをオープンフロー・コントローラ１０に送信する。オープンフロー・コントローラ１０（プロセッサ１０２）は、受信した各フロー・エントリの統計情報を、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルに各フロー・エントリに対応する統計情報を保存する。
【０１１３】
図１２Ａのフローテーブルでも、図１１Ａの場合と同様に、１つの学習型のフロー・エントリがオープンフロー・コントローラ１０からオープンフロー・スイッチ２０に制御回線網５を介して送信される。従って、学習型のフロー・エントリの送信にかかる時間は短く、学習型のフロー・エントリの送信で使用される制御回線網５の帯域幅は小さい。また、オープンフロー・スイッチ２０のフローテーブルに設定される学習型のフロー・エントリの数は少なくて済む。従って、オープンフロー・スイッチ２０における学習型のフロー・エントリの設定時間も短い。
【０１１４】
また、図１２Ｂおよび１２Ｄでも、フローテーブルの同期化のための学習内容通知メッセージの送信に使用される帯域幅は、図１１Ｂの場合と同様である。即ち、オープンフロー・スイッチ２０からオープンフロー・コントローラ１０へのフローテーブルの同期化のための学習内容通知メッセージの送信は、学習型のフロー・エントリのマッチ条件を満たす異なる種類のパケットが受信されたときに発生する。即ち、学習内容通知メッセージの送信は、時間的に分散して発生する。従って、学習内容通知メッセージの送信に使用される制御回線網５の帯域幅は小さくて済む。また、オープンフロー・スイッチ２０からオープンフロー・コントローラ１０への学習内容通知メッセージの送信が遅延しても、オープンフロー・スイッチ２０によって提供される転送サービスがその影響を受けることはない。
【０１１５】
次は、オープンフロー・コントローラ１０による、学習アルゴリズムを含むフロー・エントリの生成および送信について説明する。
【０１１６】
図１３は、オープンフロー・コントローラ１０によって実行される、学習アルゴリズムを含むフロー・エントリを生成して送信するための処理のフローチャートの例を示している。
【０１１７】
図１３を参照すると、ステップ５０２において、オープンフロー・コントローラ１０のプロセッサ１０２（またはその学習アルゴリズム生成部１０３０）は、管理者の操作に従って、学習型のフロー・エントリを生成するための学習アルゴリズムを生成する。
【０１１８】
ステップ５０４において、プロセッサ１０２（またはそのフロー・エントリ生成部１０２４）は、管理者の操作に従って、生成された学習アルゴリズムをアクションとして含む学習型のフロー・エントリまたは転送制御情報を生成する。ここで、学習型のフロー・エントリは、学習アクションに加えて、例えばポートへの出力処理のような他の転送処理のアクションを含んでいる。次いで、プロセッサ１０２（フロー・エントリ生成部１０２４）は、生成したフロー・エントリを、制御ポート１２２を介しＬ２スイッチ５２を介してオープンフロー・スイッチ２０に送信する。
【０１１９】
次は、オープンフロー・スイッチ２０による、学習アルゴリズムを含むフロー・エントリの受信および設定について説明する。
【０１２０】
図１４は、オープンフロー・スイッチ２０によって実行される、学習アルゴリズムを含むフロー・エントリを受信し、フロー・エントリをフローテーブルに設定するための処理のフローチャートの例を示している。
【０１２１】
図１４を参照すると、ステップ５１２において、オープンフロー・スイッチ２０のプロセッサ２０２（またはそのフロー・エントリ設定部２０３０）は、制御ポート２２２を介して、学習型のフロー・エントリをオープンフロー・コントローラ１０から受信する。ここで、学習型のフロー・エントリは、学習（learning）アクションに加えて、例えばポートへの出力処理のような他の転送処理のアクションを含んでいる。
【０１２２】
ステップ５１４において、プロセッサ２０２（フロー・エントリ設定部２０３０）は、受信したフロー・エントリを自己のフローテーブルに設定する。その際、フローテーブルのアクションとして、学習アクションに加えて、例えばポートへの出力処理のような他の転送処理のアクションが書き込まれる。
【０１２３】
次は、オープンフロー・スイッチ２０によるフローテーブルに基づく受信パケットの処理について説明する。その際、学習型のフロー・エントリにおける学習アクションの内容に従って、受信パケットからマッチ条件が学習され、学習されたマッチ条件を含む新しいフロー・エントリがフローテーブルに追加される。
【０１２４】
図１５は、オープンフロー・スイッチ２０によって実行される、フローテーブルに基づいて受信パケットを処理するためのフローチャートの例を示している。ここで、フローテーブルは学習アクションを含む学習型のフロー・エントリを含んでいる。学習型のフロー・エントリに基づいて受信パケットが処理されてマッチ条件が学習され、そのマッチ条件を含むフロー・エントリがフローテーブルに追加設定される。
【０１２５】
図１５を参照すると、ステップ５２２において、プロセッサ２０２（またはそのパケット転送部２０２６）は、通信ポート２２４中の入力ポートから新しいパケットを受信する。
【０１２６】
ステップ５２４において、プロセッサ２０２（またはそのフローテーブル参照部２０２４）は、記憶部２０４におけるフローテーブルを参照して、フローテーブルのフロー・エントリ中に、受信パケットとマッチ（合致）するマッチ条件があるかどうかを判定する。その際、フローテーブルにおける各フロー・エントリは、それぞれの優先度の高い順に参照されてマッチ条件が判定される。ここで、学習型のフロー・エントリの優先度は、上述したように、学習アクションにより受信パケットから学習して生成されたマッチ条件を含むフロー・エントリの優先度より低い。従って、学習処理で生成されたフロー・エントリは、学習型のフロー・エントリより優先して、受信パケットがマッチ条件とマッチするかどうかが判定される。受信パケットとマッチするマッチ条件がないと判定された場合は、手順はステップ５２６に進む。受信パケットとマッチするマッチ条件があると判定された場合は、手順はステップ５２８に進む。
【０１２７】
ステップ５２６において、プロセッサ２０２（またはそのパケットイン・メッセージ生成部２０２８）は、受信パケットの処理のしかたを問い合わせるためのパケットイン・メッセージを生成してオープンフロー・コントローラ１０に送信する。パケットイン・メッセージは、制御ポート２２２を介しＬ２スイッチ５２を介してオープンフロー・コントローラ１０に送信される。パケットイン・メッセージの送信は、通常の形態の既知の動作である。その後、手順は図１５のルーチンを出る。
【０１２８】
ステップ５２８において、プロセッサ２０２（またはその受信パケット自己展開部２０３２）は、受信パケットとマッチしたマッチ条件を含むフロー・エントリのアクションに、学習アクションがあるかどうかを判定する。フロー・エントリのアクションに学習アクションがないと判定された場合は、手順はステップ５３０に進む。フロー・エントリのアクションに学習アクションがあると判定された場合は、手順はステップ５３２に進む。
【０１２９】
ステップ５３０において、プロセッサ２０２（パケット転送部２０２６または処理部２０３６）は、フロー・エントリに含まれるアクションを実行する。ここで、アクションは、学習アクション以外のアクションである。例えば、プロセッサ２０２（パケット転送部２０２６）は、アクションとして、受信パケットを、指定された出力ポートに出力してネットワーク７上の他のノードへ転送する。次いで、プロセッサ２０２（パケット転送部２０２６または処理部２０３６）は、フロー・エントリに新しい統計情報を書き込んで、統計情報を更新する。その後、手順は図１５のルーチンを出る。
【０１３０】
ステップ５３２において、プロセッサ２０２（受信パケット自己展開部２０３２）は、入力ポートから受け取った受信パケットを自己展開して、受信パケットから新しいマッチ条件を学習する。その際、受信パケットのヘッダ等から、学習アクションの学習マッチ・タイプで規定された情報、例えば、送信元アドレス、宛先アドレスおよびプロトコル・タイプが、学習したマッチ条件として抽出されてもよい。
【０１３１】
ステップ５３４において、プロセッサ２０２（フロー・エントリ設定部２０３０）は、記憶部２０４のフローテーブルに、学習したマッチ条件を動作条件として有しかつ学習アクション以外のアクションを含む新しいフロー・エントリを追加設定する。それによって、プロセッサ２０２は、受信パケットの種類毎に異なるフロー・エントリを生成してフローテーブルに設定することができる。
【０１３２】
ステップ５３６において、プロセッサ２０２（パケット転送部２０２６または処理部２０３６）は、学習アクション以外の他のアクションを実行する。例えば、プロセッサ２０２（パケット転送部２０２６）は、他のアクションとして、受信パケットを、指定された出力ポートに出力してネットワーク７上の他のノードへ転送する。次いで、プロセッサ２０２（パケット転送部２０２６または処理部２０３６）は、フロー・エントリに新しい統計情報を書き込んで、学習型のフロー・エントリおよび新しく追加されたフロー・エントリの統計情報を更新する。このようにして、新しいフロー・エントリの統計情報が、生成され、または更新されるようになる。
【０１３３】
ステップ５３０および５３６において実行されるアクションは、受信パケットの特定の出力ポートへの出力以外のアクションであってもよい。そのようなアクションには、例えば、指定されたフィールドの書換え、パケットの破棄、入れるキューの指定、ヘッダの付与または削除、等が含まれる。フィールドの書換えには、例えば、ネットワーク識別子としての、送信元および／または宛先のＩＰアドレスまたはＭＡＣアドレスの書換え、送信元および／または宛先のＴＣＰまたはＵＤＰポート番号の書換え、および／または優先度の書換ええが含まれる。また、フィールドの書換えには、例えば、ＶＬＡＮタグの書換え、および／またはＭＰＬＳ（Multi Protocol Label Switching）タグの書換えが含まれる。
【０１３４】
ステップ５３８において、プロセッサ２０２（またはその学習内容通知メッセージ生成部２０３４）は、学習したマッチ条件を含む新しいフロー・エントリの情報を含む学習内容通知メッセージを、オープン・コントローラ１０に送信する。その際、学習内容通知メッセージは、制御ポート２２２を介しＬ２スイッチ５２を介して、オープン・コントローラ１０に送信される。その後、手順は図１５のルーチンを出る。
【０１３５】
ステップ５３８で送信された学習内容通知メッセージは、オープンフロー・コントローラ１０において、後で説明するように、オープンフロー・スイッチ２０用のフローテーブルに追加される。それによって、オープンフロー・スイッチ２０におけるフローテーブルと、オープンフロー・コントローラ１０におけるオープンフロー・スイッチ２０用のフローテーブルとが、一致して、同期化できる。上述したように、このようなフローテーブル同期化のための学習内容通知メッセージの送信に使用される制御回線の帯域幅は小さい。
【０１３６】
このように、オープンフロー・スイッチ２０は、受信パケットに応じて受信パケットを処理して、受信パケットの種類に応じて、異なる新しいフロー・エントリを生成してフローテーブルに設定することができる。また、オープンフロー・スイッチ２０は、異なるフロー・エントリ毎に処理された受信パケットに関する統計情報を取ることができるようになる。
【０１３７】
次は、オープンフロー・コントローラ１０による、オープンフロー・コントローラ１０におけるオープンフロー・スイッチ２０用のフローテーブルの更新のための処理について説明する。
【０１３８】
図１６は、オープンフロー・コントローラ１０によって実行される、オープンフロー・コントローラ１０の記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルの更新のための処理のフローチャートの例を示している。
【０１３９】
ステップ５４２において、プロセッサ１０２（またはそのフローテーブル同期処理部１０２８）は、オープンフロー・スイッチ２０から、Ｌ２スイッチ５２を介し制御ポート１２２を介して学習内容通知メッセージを受信する。
【０１４０】
ステップ５４４において、プロセッサ１０２（フローテーブル同期処理部１０２８）は、学習内容通知メッセージからフロー・エントリの情報を取り出して、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルに保存する。それによって、オープンフロー・スイッチ２０とオープンフロー・コントローラ１０の双方のフローテーブルが、互いに一致するように設定されまたは同期化される。オープンフロー・スイッチ２０からオープンフロー・コントローラ１０への学習内容通知メッセージの送信が遅延しても、オープンフロー・コントローラ１０での同期化が遅延するだけで、オープンフロー・スイッチ２０での転送サービスが影響を受けることはない。
【０１４１】
次は、オープンフロー・コントローラ１０による、オープンフロー・スイッチ２０におけるフローテーブルの統計情報の収集について説明する。
【０１４２】
図１７は、オープンフロー・コントローラ１０によって実行される、オープンフロー・スイッチ２０から統計情報を収集するための処理のフローチャートの例を示している。
【０１４３】
図１７を参照すると、ステップ５５２において、オープンフロー・コントローラ１０のプロセッサ１０２（またはその統計情報収集部１０２６）は、統計情報を要求する統計情報要求メッセージをオープンフロー・スイッチ２０に送信する。統計情報要求メッセージは、制御ポート２２２を介しＬ２スイッチ５２を介してオープンフロー・スイッチ２０に送信される。
【０１４４】
ステップ５５４において、オープンフロー・スイッチ２０のプロセッサ２０２（フローテーブル参照部２０２４または処理部２０３６）は、オープンフロー・コントローラ１０から、統計情報要求メッセージを受信する。
【０１４５】
ステップ５５６において、プロセッサ２０２（フローテーブル参照部２０２４）は、フローテーブルにおける各フロー・エントリの統計情報を取り出す。代替形態として、フローテーブルの全てのフロー・エントリの情報が、それぞれの統計情報と共に取りだされてもよい。
【０１４６】
ステップ５５８において、プロセッサ２０２（フローテーブル参照部２０２４または処理部２０３６）は、取り出した統計情報を含む応答メッセージを、オープンフロー・コントローラ１０に送信する。
【０１４７】
ステップ５６０において、オープンフロー・コントローラ１０のプロセッサ１０２（統計情報収集部１０２６）は、オープンフロー・スイッチ２０から、統計情報を含む応答メッセージを受信する。
【０１４８】
ステップ５６２において、プロセッサ１０２（統計情報収集部１０２６）は、応答メッセージから統計情報を取り出して、記憶部１０４におけるオープンフロー・スイッチ２０用のフローテーブルの各フロー・エントリに保存する。
【０１４９】
このようにして、オープンフロー・コントローラ１０は、オープンフロー・スイッチ２０で学習によって生成されて設定された各フロー・エントリに関する統計情報を、オープンフロー・スイッチ２０から収集することができる。
【０１５０】
以上の説明では、学習型フロー・エントリおよび学習処理で生成されるそれぞれのフロー・エントリにおけるマッチ条件に、ネットワーク識別子としての送信元および／または宛先ＩＰアドレスのようなＩＰアドレスのマッチが含まれる場合について説明した。一方、実施形態は、これに限定されることなく、学習型フロー・エントリおよび学習処理で生成されるフロー・エントリにおけるマッチ条件に、例えば、ＭＡＣアドレス、ＶＬＡＮ（Virtual LAN）タグ等の他のネットワーク識別子のマッチが含まれる場合にも適用できる。
【０１５１】
このように、実施形態によれば、オープンフロー・コントローラ１０は、オープンフロー・スイッチ２０に学習型のフロー・エントリを設定する。それによって、オープンフロー・コントローラ１０は、受信パケットの種類に応じた学習型の１つのフロー・エントリに基づく学習処理によって複数のフロー・エントリをフローテーブルに設定することができる。
【０１５２】
また、実施形態によれば、オープンフロー・コントローラ１０は、オープンフロー・スイッチ２０での受信パケットの種類に応じた個々のフロー・エントリを、オープンフロー・スイッチ２０のフローテーブルに短い時間で設定することができる。それによって、オープンフロー・コントローラ１０は、オープンフロー・スイッチの運用中にオープンフロー・スイッチが故障した場合に発生し得るパケット転送サービスの中断時間をより短くすることができる。
【０１５３】
また、実施形態によれば、オープンフロー・コントローラ１０およびオープンフロー・スイッチ２０を管理する通信事業者は、オープンフロー・コントローラ１０とオープンフロー・スイッチ２０の間で確保される制御回線の帯域幅を小さくすることができる。それによって、通信事業者は、オープンフロー・コントローラ１０とオープンフロー・スイッチ２０の間の制御回線の維持コストを低くすることができる。
【０１５４】
ここで挙げた全ての例および条件的表現は、発明者が技術促進に貢献した発明および概念を読者が理解するのを助けるためのものであり、ここで具体的に挙げたそのような例および条件に限定することなく解釈され、また、明細書におけるそのような例の編成は本発明の優劣を示すこととは関係ない、と理解される。本発明の実施形態を詳細に説明したが、本発明の精神および範囲から逸脱することなく、それに対して種々の変更、置換および変形を施すことができる、と理解される。
【０１５５】
以上の実施例を含む実施形態に関して、さらに以下の付記を開示する。
（付記１）複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を生成して送信する転送制御装置と、
前記転送制御装置から前記第１の転送制御情報を受信して記憶部に保存し、受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する転送装置と、
を含む転送システム。
（付記２）前記転送装置は、受信した別のパケットについて前記記憶部を参照して、前記別のパケットが前記第２の条件を満たす場合、前記別のパケットを前記転送処理に従って処理するものであることを特徴とする、付記１に記載の転送システム。
（付記３）前記第２の転送制御情報は、前記第１の転送制御情報よりも参照の優先度が高いものであることを特徴とする、付記１または２に記載の転送システム。
（付記４）前記転送装置は、前記第１の転送制御情報および前記第２の転送制御情報に従って処理されたパケットに関する統計情報を保存するものであることを特徴とする、付記１乃至３のいずれかに記載の転送システム。
（付記５）前記転送装置は、受信した別のパケットについて前記記憶部を参照して、前記別のパケットが前記第２の条件を満たさず前記第１の条件を満たす場合、前記学習処理に従って、前記別のパケットのネットワーク識別子を含む第３の条件で実行される前記転送処理を含む第３の転送制御情報を生成して前記記憶部に保存し、前記別のパケットを前記転送処理に従って転送するものであることを特徴とする、付記１乃至４のいずれかに記載の転送システム。
（付記６）前記転送装置は、前記第１の転送制御情報、前記第２の転送制御情報および前記第３の転送制御情報に従って処理されたパケットに関する統計情報を保存するものであることを特徴とする、付記５に記載の転送システム。
（付記７）前記転送処理は、受信した前記パケットを、指定された出力部に出力するものであることを特徴とする、付記１乃至６のいずれかに記載の転送システム。
（付記８）前記転送装置は、生成した前記第２の転送制御情報を前記転送制御装置に送信し、
前記転送制御装置は、前記第２の転送制御情報を受信して前記転送制御装置の記憶部に保存するものであることを特徴とする、付記１乃至７のいずれかに記載の転送システム。
（付記９）転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶する記憶部と、
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理部と、
を含む転送装置。
（付記１０）転送装置が、
転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶し
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子を含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理を実行する転送方法。
（付記１１）転送装置が、
転送制御装置から受信した、複数のネットワーク識別子を表す情報を含む第１の条件で実行される学習処理および転送処理を含む第１の転送制御情報を記憶し
受信したパケットについて前記記憶部を参照して、前記パケットが前記第１の条件を満たす場合、前記学習処理に従って、前記パケットのネットワーク識別子含む第２の条件で実行される前記転送処理を含む第２の転送制御情報を生成して前記記憶部に保存し、前記パケットを前記転送処理に従って処理する処理を実行するためのプログラム。
【符号の説明】
【０１５６】
２  転送システム
５  制御回線網
５２  Ｌ２スイッチ
７  ネットワーク
１０  オープンフロー・コントローラ
１０２  プロセッサ
１０４  記憶部
２０、２２、２４  オープンフロー・スイッチ
２０２  プロセッサ
２０４  記憶部
【図１】
2016171469.tif 000003
【図２】
2016171469.tif 000004
【図３】
2016171469.tif 000005
【図４】
2016171469.tif 000006
【図５】
2016171469.tif 000007
【図６】
2016171469.tif 000008
【図７Ａ】
2016171469.tif 000009
【図７Ｂ】
2016171469.tif 000010
【図７Ｃ】
2016171469.tif 000011
【図８】
2016171469.tif 000012
【図９Ａ】
2016171469.tif 000013
【図９Ｃ】
2016171469.tif 000014
【図１０】
2016171469.tif 000015
【図１１Ａ】
2016171469.tif 000016
【図１１Ｂ】
2016171469.tif 000017
【図１１Ｃ】
2016171469.tif 000018
【図１２Ａ】
2016171469.tif 000019
【図１２Ｂ】
2016171469.tif 000020
【図１２Ｃ】
2016171469.tif 000021
【図１２Ｄ】
2016171469.tif 000022
【図１３】
2016171469.tif 000023
【図１４】
2016171469.tif 000024
【図１５】
2016171469.tif 000025
【図１６】
2016171469.tif 000026
【図１７】
2016171469.tif 000027