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