(57)【要約】  本発明は、集中制御型ネットワークに、転送方式等による制約の少ないアンシラリデータの転送機能を付加する。通信システムは、ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信する第１のネットワークスイッチと、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持し、第２のネットワークスイッチに対して、前記アンシラリデータを含んだ制御用メッセージを送信するネットワークコントローラと、前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信し、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送する第２のネットワークスイッチと、を含む。
2015025845.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信する第１のネットワークスイッチと、
前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持し、第２のネットワークスイッチに対して、前記アンシラリデータを含んだ制御用メッセージを送信するネットワークコントローラと、
前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信し、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送する第２のネットワークスイッチと、
を含む通信システム。
【請求項２】
前記第１のネットワークスイッチと、前記第２のネットワークスイッチとが、それぞれ、
ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信し、かつ、
前記ネットワークコントローラから受信した制御用メッセージから、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に送信するパケット処理部を備える請求項１の通信システム。
【請求項３】
さらに、
インデックス情報とともに前記アンシラリデータを保持するバッファと、
前記ネットワークスイッチから受信した制御用メッセージから取り出したアンシラリデータを、前記インデックス情報とともに前記バッファに保存し、前記インデックス情報を元に前記バッファからアンシラリデータを取得し、前記第２のネットワークスイッチに送信する制御用メッセージに付加するアンシラリデータ管理部と、
を備える請求項１又は２の通信システム。
【請求項４】
前記アンシラリデータ管理部として、前記ネットワークコントローラと、前記ネットワークスイッチとのセッション情報を管理し、前記ネットワークコントローラと前記ネットワークスイッチのメッセージの送受信を中継するアンシラリデータ管理装置が設けられている請求項３の通信システム。
【請求項５】
前記制御用メッセージにて転送するパケットのアンシラリデータを含めたパケット長に書き換えたヘッダ情報と、オリジナルのパケット長との差によりアンシラリデータの位置情報を特定する請求項１から４いずれか一の通信システム。
【請求項６】
アンシラリデータをネットワークコントローラへの制御用メッセージに含める手段と、
ネットワークコントローラに対して、前記アンシラリデータを含んだ前記制御用メッセージを送信する手段と、
前記ネットワークコントローラから受信した制御用メッセージから、前記アンシラリデータを取り出して指定された宛先に送信する手段と、
を備えるネットワークスイッチ。
【請求項７】
第１のネットワークスイッチから受信した制御用メッセージからアンシラリデータを取り出して保持する手段と、
第２のネットワークスイッチに対して、前記保持したアンシラリデータを含んだ制御用メッセージを送信する手段と、
を備えるネットワークコントローラ。
【請求項８】
ネットワークコントローラとネットワークスイッチとのセッション情報を管理する手段と、
前記ネットワークコントローラと前記ネットワークスイッチの制御用メッセージの送受信を中継する手段と、
インデックス情報とともに、前記アンシラリデータを保持する手段と、
受信した制御用メッセージからアンシラリデータを取り出す手段と、
所定の生成規則を用いてインデックス情報を生成し、前記生成したインデックス情報とともに前記アンシラリデータを保持する手段と、
前記アンシラリデータを保持する手段から、前記インデックス情報に対応するアンシラリデータを取得する手段と、  
前記取得したアンシラリデータを制御用メッセージに付加する手段と、
を備えるアンシラリデータ管理装置。
【請求項９】
第１のネットワークスイッチが、ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信するステップと、
前記ネットワークコントローラが、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持するステップと、
前記ネットワークコントローラが、第２のネットワークスイッチに対して、前記アンシラリデータを含んだ制御用メッセージを送信するステップと、
前記第２のネットワークスイッチが、前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信し、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送するステップと、
を含むデータ転送方法。
【請求項１０】
第１のネットワークスイッチから、アンシラリデータを含む制御用メッセージを受信したネットワークコントローラを構成するコンピュータに、
前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持する処理と、
第２のネットワークスイッチに対して、前記アンシラリデータを付加した制御用メッセージを送信する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１３−１７０６８２号（２０１３年８月２０日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、通信システム、スイッチ、コントローラ、アンシラリデータ管理装置、データ転送方法及びプログラムに関し、特に、主たるデータとともにアンシラリデータを転送する通信システム、スイッチ、コントローラ、アンシラリデータ管理装置、データ転送方法及びプログラムに関する。
【背景技術】
【０００２】
近年、コンピュータネットワーク（以降、ネットワークと表記する）の中でも、データセンタネットワークを中心としてソフトウェアデファインドネットワーク（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｏｗｒｋ：ＳＤＮ）が利用されつつある。ＳＤＮではネットワーク処理を制御プレーン（Ｃｏｎｔｒｏｌ  Ｐｌａｎｅ：Ｃ−ｐｌａｎｅ）とデータ転送プレーン（Ｄａｔａ  Ｐｌａｎｅ：Ｄ−ｐｌａｎｅ）に分け、論理的な集中制御のアーキテクチャをとるＣ−ｐｌａｎｅからＤ−ｐｌａｎｅを制御するアーキテクチャになっている。【０００３】
このＳＤＮにおいて、Ｄ−ｐｌａｎｅを制御する仕組みとしてＯｐｅｎＦｌｏｗが存在する。ＯｐｅｎＦｌｏｗでは、Ｃ−ｐｌａｎｅとしてオープンフローコントローラ（ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ：ＯＦＣ）、Ｄ−ｐｌａｎｅとしてオープンフロースイッチ（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ：ＯＦＳ）を規定し、ＯＦＣとＯＦＳとの間の制御メッセージや、ＯＦＳが持つべき機能、ＡＰＩなどについて定めている。ＯｐｅｎＦｌｏｗの仕様については、非特許文献１、非特許文献２、および非特許文献３に詳しく記載されている。【０００４】
図２１は、ＯｐｅｎＦｌｏｗを用いて構成したデータセンタネットワークアーキテクチャＸ１を示した図である。エッジオープンフロースイッチ（Ｅｄｇｅ  ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）Ｘ１２ａ、Ｘ１２ｂにサーバ（Ｓｅｒｖｅｒ）Ｘ１０ａ、Ｘ１０ｂが接続される。エッジオープンフロースイッチＸ１２ａ、Ｘ１２ｂを互いに接続するために、１台以上のコアオープンフロースイッチ（Ｃｏｒｅ  ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）Ｘ１４が備えられる。これらスイッチを制御するオープンフローコントローラ（ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）Ｘ１６が、ネットワーク管理用リンクＸ２０を用いて接続されている。このネットワーク管理用リンクＸ２０は、セキュアチャネルと呼ばれ、ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）を用いた暗号化が推奨されている。ただし、セキュアチャネルを暗号化するかどうかはネットワークの運用者の判断に委ねられている。なお、以降、区別する必要が無い場合は、サーバＸ１０ａ、Ｘ１０ｂをひとまとめにサーバ１０と表記する。また、エッジオープンフロースイッチＸ１２ａ、Ｘ１２ｂについても、同様にオープンフロースイッチＸ１２と表記する。【０００５】
図２２は、オープンフローコントローラＸ１６の一般的な構成を示した図である。一般に、オープンフローコントローラＸ１６は、サーバ上で稼動するソフトウェアとして実現される。より詳しくは、Ｌｉｎｕｘ（登録商標）などのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：ＯＳ）の上で稼動するアプリケーションとして実現される。【０００６】
図２２を参照すると、オープンフローコントローラＸ１６は、パケット入出力モジュールＸ１６４と、復号化モジュールＸ１６６と、暗号化モジュールＸ１６８と、オープンフローメッセージ制御モジュール（ＯｐｅｎＦｌｏｗ  ｍｅｓｓａｇｅ制御モジュール）Ｘ１７０と、を備えて構成されている。【０００７】
パケット入出力モジュールＸ１６４は、一般的にはＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）などから構成されるプロトコルスタックと、ソケットＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）のようなアプリケーションインタフェースから構成される。【０００８】
復号化モジュールＸ１６６と、暗号化モジュールＸ１６８は、ネットワーク管理用リンクＸ２０を流れるパケットのデータ部分を、それぞれ復号化、暗号化するモジュールである。オープンフローではネットワーク管理用リンクＸ２０で暗号化通信を行う場合、ＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）を使用してＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットのペイロード部を暗号化する。そのため、ＯＳＩ（Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）参照モデルでは、これらの処理は、トランスポート層の上位レイヤであるセッション層に位置する。ＳＳＬの詳細については、非特許文献５などが詳しい。【０００９】
復号化モジュールＸ１６６は、パケット入出力モジュールＸ１６４から受け取ったオープンフローメッセージを復号化し、オープンフローメッセージ制御モジュールＸ１７０に渡す。【００１０】
暗号化モジュールＸ１６８は、オープンフローメッセージ制御モジュールＸ１７０から受け取ったオープンフローメッセージを暗号化し、パケット入出力モジュールＸ１６４に渡す。【００１１】
オープンフローメッセージ制御モジュールＸ１７０は、オープンフロースイッチＸ１２とのメッセージの送受信を制御するモジュールである。オープンフローでは様々な種別の制御用メッセージが既定されており、オープンフローメッセージ制御モジュールＸ１７０は、送信メッセージの構築、受信メッセージの解析などを行う。制御用メッセージについては後述する。【００１２】
図２３は、オープンフロースイッチＸ１２の一般的な構成を示した図である。オープンフロースイッチＸ１２は、パケット入力モジュールＸ１２００と、パケット転送処理モジュールＸ１２１０と、フローテーブルＸ１２２０と、オープンフローメッセージ処理モジュール（ＯｐｅｎＦｌｏｗ  ｍｅｓｓａｇｅ処理モジュール）Ｘ１２３０と、セキュアチャネル制御モジュールＸ１２４０と、パケット出力モジュールＸ１２５０と、を備えて構成される。【００１３】
パケット入力モジュールＸ１２００は、オープンフロースイッチＸ１２外部からのパケットの入力を受け取るモジュールであり、パケット出力モジュールＸ１２５０は、オープンフロースイッチ１２の外部にパケットを出力するモジュールである。実際にはこれらのモジュールは、ハードウェアスイッチのポートなどに対応する。【００１４】
パケット転送処理モジュールＸ１２１０は、パケット入力モジュールＸ１２００から入力されたパケットのパケットヘッダの情報を用いて、フローテーブルＸ１２２０を参照し、パケットに対する処理（アクション）を決定する。パケット転送処理モジュールＸ１２１０において実施する処理の例として、パケットヘッダの書き換えや、パケットを指定したポートに出力する、あるいはオープンフローコントローラＸ１６にパケットを転送する、といったものが挙げられる。また、フローテーブルＸ１２２０に該当する処理が見つからなかった場合のパケット転送処理モジュールＸ１２１０の処理の例として、オープンフローコントローラＸ１６に問い合わせを行う、という処理がある。オープンフローコントローラＸ１６に問い合わせを行う場合、パケット転送処理モジュールＸ１２１０は、オープンフローメッセージ処理モジュールＸ１２３０に、パケットの情報とともに、問い合わせの要求を出す。【００１５】
オープンフローメッセージ処理モジュールＸ１２３０は、オープンフロープロトコルで用いられるメッセージを処理するモジュールであり、パケット転送処理モジュールＸ１２１０からの要求に従って、オープンフローメッセージを構築する、あるいはオープンフローコントローラＸ１６から受け取ったオープンフローメッセージを解釈する、といった処理を行う。非特許文献２によると、オープンフローメッセージは大きく分けて、非同期メッセージ（Ａｓｙｎｃｈｒｏｎｏｕｓメッセージ）、コントローラメッセージ（Ｃｏｎｔｒｏｌｌｅｒ−ｔｏ−Ｓｗｉｔｃｈメッセージ）、対称型メッセージ（Ｓｙｍｍｅｔｒｉｃメッセージ）が既定されている。各メッセージの詳細は、非特許文献２及び非特許文献３に詳しく記載されている。【００１６】
セキュアチャネル制御モジュールＸ１２４０は、オープンフローコントローラＸ１６とオープンフロースイッチＸ１２の間の、ネットワーク管理用リンクＸ２０を流れるパケットを制御するモジュールである。例えば、セキュアチャネル制御モジュールＸ１２４０は、オープンフローメッセージ処理モジュールＸ１２３０からの要求に従って、オープンフローメッセージをオープンフローコントローラＸ１６に転送する、オープンフローコントローラＸ１６から受け取ったオープンフローメッセージをオープンフローメッセージ処理モジュールＸ１２３０に転送する、といった処理を行う。また、スイッチ管理用リンクＸ２０を流れるパケットを暗号化する場合、セキュアチャネル制御モジュールＸ１２４０は、暗号化や復号化に係る処理も実行する。【００１７】
これまで、ＯＦＳはハードウェアによるスイッチ製品が主な実現形態であったが、サーバ仮想化技術の広まりにより、サーバ内の仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）同士、あるいは仮想マシンと外部ネットワークとのパケット転送に使用される仮想スイッチ（Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ：ｖＳｗｉｔｃｈ）がＯｐｅｎＦｌｏｗに対応するようになってきた。その例として、非特許文献４に示されるＯｐｅｎ  ｖＳｗｉｔｃｈが存在する。このように、ＳＤＮで制御可能なネットワークの範囲に、サーバ内のＶＭ間ネットワークも含まれるようになってきた。【００１８】
図２４は、サーバＸ１０に構築されたサーバ仮想化環境と仮想スイッチを示した図である。図２４を参照すると、仮想マシンモニタＸ１００（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ：ＶＭＭ）の内部に仮想スイッチＸ１２０が導入されている。仮想マシンＸ１１０が通信する際には、仮想スイッチＸ１２０を介して行われる。図２３における、パケット入力モジュールＸ１２００やパケット出力モジュールＸ１２５０は、仮想スイッチＸ１２０に対するＶＭとのリンクや、サーバＸ１０が備えるイーサネット（登録商標）ポートに対応付けられる。【００１９】
図２５は、サーバＸ１０内の仮想スイッチＸ１２０を含めた、データセンタネットワークアーキテクチャＸ２を示した図である。なお、図２５では、仮想マシンＸ１１０と仮想スイッチＸ１２０の表記を、エッジオープンフロースイッチＸ１２に合わせて、それぞれ仮想マシンＸ１１０ａ、Ｘ１１０ｂ、仮想スイッチＸ１２０ａ、Ｘ１２０ｂとしている。図２５を参照すると、仮想スイッチＸ１２０とオープンフローコントローラＸ１６の間にも、ネットワーク管理用リンクＸ２０による接続が存在し、仮想スイッチＸ１２０を、オープンフローコントローラＸ１６から制御可能なアーキテクチャになっている。【００２０】
ＯｐｅｎＦｌｏｗにおいて、オープンフロースイッチＸ１２は内部に持つフローテーブルＸ１２２０に従ってパケットを処理する。このフローテーブルＸ１２２０には、パケットヘッダに含まれるヘッダ情報等で規定したマッチ条件と、パケットの出力先のポートや、パケットヘッダに対する処理（インストラクション）と、を対応付けたエントリがフローエントリとして登録されている。オープンフロースイッチＸ１２は、このフローテーブルＸ１２２０に登録されておらず、自身では処理することができないパケットについて、オープンフローコントローラＸ１６に、ネットワーク管理用リンクＸ２０を通じて問い合わせる。この問い合わせをパケットイン（Ｐａｃｋｅｔ＿ｉｎ）と呼ぶ。パケットインは、このような問い合わせの他、パケットの出力先としてオープンフローコントローラＸ１６を指定することによって起こる。【００２１】
オープンフロースイッチＸ１２は、オープンフローの仕様に従い、パケットインメッセージという形で、オープンフローコントローラＸ１６にメッセージを転送する。図２６は、パケットインメッセージＸ２００の概観を示したものである。パケットインメッセージＸ２００には、オープンフロー専用のヘッダであるオープンフローヘッダＸ２１０と、パケットインメッセージヘッダＸ２２０と、パケットインを引き起こしたパケットであるパケットデータＸ２３０と、が含まれる。パケットデータＸ２３０として、パケット本体（イーサネットフレーム）全体の場合と、パケットの一部を用いる場合と、がオープンフローで規定されている。後者の場合、オープンフロースイッチＸ１２は、パケット本体を内部でバッファリングし、パケットインメッセージヘッダＸ２２０に備えられるバッファＩＤフィールドにパケット本体の保存先を示すバッファＩＤを書き込む。なお、オープンフロースイッチＸ１２にパケットがバッファリングされていない場合、バッファＩＤフィールドには無効なバッファを示す値が書き込まれる。【００２２】
パケットインメッセージヘッダＸ２２０に含まれるその他の情報として、パケットデータＸ２３０の長さや、パケットインを引き起こした理由、などを示すフィールドが含まれる。【００２３】
オープンフローコントローラＸ１６は、パケットインメッセージＸ２００を受け取ると、パケットインを引き起こしたパケットに対する処理を決定する。必要があれば、オープンフロースイッチＸ１２に対して、Ｆｌｏｗ＿ｍｏｄメッセージによるフローエントリの追加や、パケットアウトメッセージによるパケットの転送の指示を行う。オープンフロースイッチＸ１２は、Ｆｌｏｗ＿ｍｏｄメッセージによって、フローエントリを追加されることで、以降、同じ情報を持つパケットに対して、オープンフローコントローラＸ１６に問い合わせを行うことなく、パケットに対するＤ−ｐｌａｎｅ処理を行うことができる。【００２４】
図２７は、パケットアウトメッセージＸ２５０の概略を示したものである。パケットインメッセージＸ２００と同様に、パケットアウトメッセージＸ２５０には、オープンフロー専用のヘッダであるオープンフローヘッダＸ２１０に加え、パケットアウトメッセージヘッダＸ２２５、オープンフローコントローラＸ１６がオープンフロースイッチＸ１２に転送させたいパケットのデータであるパケットデータＸ２３０が含まれる。【００２５】
パケットアウトメッセージヘッダＸ２２５には、バッファＩＤを指定するフィールドのほか、オープンフロースイッチＸ１２で実行する処理（アクション）のリスト、などを示すフィールドが含まれる。【００２６】
オープンフローコントローラＸ１６は、パケットアウトメッセージＸ２５０に、対応するパケットインメッセージＸ２００に含まれていたバッファＩＤを指定することで、パケットデータをオープンフロースイッチＸ１２に転送することなく、オープンフロースイッチＸ１２にバッファリングされているパケットデータの転送を指示することができる。オープンフロースイッチＸ１２は、このようなパケットアウトメッセージＸ２５０を受け取ると、バッファからパケットを読み出し、パケットアウトメッセージＸ２５０に従って、パケットを処理する。なお、パケットアウトメッセージＸ２５０のパケットデータＸ２３０が有効なデータの場合、パケットアウトメッセージヘッダＸ２２５のバッファＩＤのフィールドには、無効なバッファを示す値が書き込まれる。【００２７】
これらパケットイン、パケットアウトの動作については、オープンフローに対応したｖＳｗｉｔｃｈでも同様である。一方で、ｖＳｗｉｔｃｈがこれまでのオープンフロースイッチＸ１２と異なる点として、サーバ内のソフトウェアであり、一般にサーバ仮想化ソフトウェアやＯＳに組み込まれる形で利用すると言う点である。つまり、処理するデータの形式がネットワークを流れるパケットやフレームの形ではなく、ソケットバッファ構造体のように、サーバ内で利用されるデータ形式となっているということである。そのため、パケットにヘッダ情報等の形で組み込まれるデータ以外に、サーバ内の処理で利用するデータを保持することができる。このような、パケットに付随するデータをアンシラリデータ（Ａｎｃｉｌｌａｒｙ  Ｄａｔａ）と呼ぶ。【００２８】
アンシラリデータの例として、Ｌｉｎｕｘのソケットバッファ構造体に含まれるコントロールバッファ（Ｃｏｎｔｒｏｌ  Ｂｕｆｆｅｒ：ＣＢ）の領域に書き込まれるデータが挙げられる。また、アンシラリデータの別の例として、マルチテナントデータセンタにおけるテナント情報や、ネットワークのトンネリングのためのトンネル情報が挙げられる。【００２９】
特許文献１には、上記オープンフローネットワークのエッジオープンフロースイッチでパケットヘッダを変換し、コアオープンフロースイッチでは変換したパケットヘッダをマッチ条件として用いてパケットを転送し、その後、受信側ステーションが接続されたエッジオープンフロースイッチでパケットヘッダを元に戻すＰｒｏａｃｔｉｖｅ型のパケット転送を行う構成が開示されている。
【先行技術文献】
【特許文献】
【００３０】
【特許文献１】国際公開第２０１２／０９６１３１号
【非特許文献】
【００３１】
【非特許文献１】“ＯＰＥＮ  ＮＥＴＷＯＲＫＩＮＧ  ＦＯＵＮＤＡＴＩＯＮ”、［ｏｎｌｉｎｅ］、［平成２５（２０１３）年８月１２日検索］、インターネット〈http://www.opennetworking.org/〉
【非特許文献２】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”  Ｖｅｒｓｉｏｎ  １．３．１  （Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ０４）、［ｏｎｌｉｎｅ］、［平成２５（２０１３）年８月１２日検索］、インターネット〈https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.1.pdf〉
【非特許文献３】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”  Ｖｅｒｓｉｏｎ  １．０．０  （Ｗｉｒｅ  Ｐｒｏｔｏｃｏｌ  ０ｘ０１）、［ｏｎｌｉｎｅ］、［平成２５（２０１３）年８月１２日検索］、インターネット〈https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.0.0.pdf〉
【非特許文献４】“ＯＰＥＮ  ＶＳＷＩＴＣＨ  Ａｎ  Ｏｐｅｎ  Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ”、［ｏｎｌｉｎｅ］、［平成２５（２０１３）年８月１２日検索］、インターネット〈http://openvswitch.org〉
【非特許文献５】“Ｔｈｅ  Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ  （ＴＬＳ）  Ｐｒｏｔｏｃｏｌ  Ｖｅｒｓｉｏｎ  １．２”、［ｏｎｌｉｎｅ］、［平成２５（２０１３）年８月１２日検索］、インターネット〈http://tools.ietf.org/html/rfc5246〉
【発明の概要】
【発明が解決しようとする課題】
【００３２】
以下の分析は、本発明によって与えられたものである。上記背景技術で説明した通信システムの第１の問題点は、オープンフローに対応したｖＳｗｉｔｃｈにおいて、オープンフロースイッチＸ１２と同様にパケットイン、パケットアウトを実行すると、アンシラリデータがパケットアウトメッセージに含まれないために、パケットが適切に転送されないことがある、ということである。【００３３】
その理由は、オープンフローの仕様で定めるパケットインメッセージＸ２００の構造による。パケットインメッセージＸ２００には、パケット本体、すなわちイーサネットフレームのようなネットワークを流れるデータを含めることができるが、それ以外の情報を含めることができないためである。【００３４】
パケットインメッセージＸ２００は、図２６に示すとおり、オープンフローヘッダＸ２１０と、パケットインメッセージヘッダＸ２２０と、パケットデータＸ２３０と、から構成される。オープンフローヘッダＸ２１０やパケットインメッセージヘッダＸ２２０には、メッセージ種別やパケット本体の長さを示す情報などが含まれるが、アンシラリデータに関する情報を保持することはできない。また、パケットデータＸ２３０にはアンシラリデータが含まれないため、結果としてアンシラリデータはパケットインメッセージＸ２００には含まれない。また、パケットインメッセージＸ２００にアンシラリデータが含まれないのと同様に、パケットアウトメッセージＸ２５０にもアンシラリデータは含まれない（図２７参照）。【００３５】
上記背景技術で説明した通信システムでは、アンシラリデータをオープンフロースイッチＸ１２でバッファリングし、パケットインを行うと、オープンフローコントローラＸ１６は、パケットインを起こしたオープンフロースイッチＸ１２に対してのみにしか、このパケットインに対するパケットアウトを指示できない場合がある。【００３６】
このような制限があると、特許文献１に示されるような、通信を行う２つのステーション間の通信経路における、送信側ステーションが接続されたエッジオープンフロースイッチ（例えば、図２１のＸ１２ａ）でパケットヘッダを変換し、コアオープンフロースイッチ（例えば、図２１のＸ１４）では変換したパケットヘッダを用いて転送、その後、受信側ステーションが接続されたエッジオープンフロースイッチ（例えば、図２１のＸ１２ｂ）でパケットヘッダを元に戻すパケット転送方式の場合に問題となる。【００３７】
特許文献１のような転送方式を採用している場合、オープンフローコントローラＸ１６が、パケットアウトの際に、コアオープンフロースイッチを通過できるようなパケットヘッダを持つパケットを出力するパケットアウトメッセージＸ２５０を作る必要がある。この場合、オープンフローコントローラＸ１６の負荷が増大し、ＳＤＮのような集中制御のアーキテクチャにおいては、コントローラの負荷の増大はネットワーク制御に大きな影響を及ぼすことが考えられる。【００３８】
本発明は、上記オープンフローに代表される集中制御型ネットワークにおいて、転送方式等による制約を受けることなくアンシラリデータを転送できるようにする通信システム、スイッチ、コントローラ、アンシラリデータ管理装置、データ転送方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００３９】
第１の視点によれば、ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信する第１のネットワークスイッチと、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持し、第２のネットワークスイッチに対して、前記アンシラリデータを含んだ制御用メッセージを送信するネットワークコントローラと、前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信し、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送する第２のネットワークスイッチと、を含む通信システムが提供される。【００４０】
第２の視点によれば、上記に示した通信システムを構成することのできるネットワークスイッチ、ネットワークコントローラ及びアンシラリデータ管理装置が提供される。【００４１】
第３の視点によれば、第１のネットワークスイッチが、ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信するステップと、前記ネットワークコントローラが、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持するステップと、前記ネットワークコントローラが、第２のネットワークスイッチに対して、前記アンシラリデータを含んだ制御用メッセージを送信するステップと、前記第２のネットワークスイッチが、前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信し、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送するステップと、を含むデータ転送方法が提供される。本方法は、集中制御型ネットワークを構成する機器という、特定の機械に結びつけられている。【００４２】
第４の視点によれば、第１のネットワークスイッチから、アンシラリデータを含む制御用メッセージを受信したネットワークコントローラを構成するコンピュータに、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持する処理と、第２のネットワークスイッチに対して、前記アンシラリデータを付加した制御用メッセージを送信する処理と、を実行させるプログラムが提供される。なお、このプログラムは、コンピュータが読み取り可能な（非トランジエントな）記憶媒体に記録することができる。即ち、本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００４３】
本発明によれば、上記オープンフローに代表される集中制御型ネットワークに、転送方式等による制約の少ないアンシラリデータの転送機能を付加することが可能となる。
【図面の簡単な説明】
【００４４】
【図１】本発明の第１の実施形態の通信システムの構成を示す図である。
【図２】本発明の第１の実施形態のネットワークコントローラの構成を示す図である。
【図３】本発明の第１の実施形態のネットワークスイッチの構成を示す図である。
【図４】本発明の第１の実施形態のネットワークスイッチのオープンフローメッセージ処理モジュールの細部構成を示す図である。
【図５】本発明の第１の実施形態のネットワークスイッチ内部のパケットインメッセージ処理モジュールの構成例を示した図である。
【図６】アンシラリデータを含んだパケットインメッセージの構成例を示す図である。
【図７】本発明の第１の実施形態のネットワークスイッチ内部のパケットアウトメッセージ処理モジュールの構成例を示した図である。
【図８】本発明の第１の実施形態のネットワークスイッチ、ネットワークコントローラの動作を示したシーケンス図である。
【図９】図８のステップＳ１２０−１からステップＳ１２０−２までの処理を詳細に示したフローチャートである。
【図１０】図８のステップＳ１６−１からステップＳ１６−３までの処理を詳細に示したフローチャートである。
【図１１】図８のステップＳ１２０−３の処理を詳細に示したフローチャートである。
【図１２】本発明の第２の実施の形態のネットワークコントローラ内のアンシラリデータ管理モジュールの詳細構成を示した図である。
【図１３】本発明の第２の実施の形態のアンシラリデータ管理モジュールが、パケットインメッセージからアンシラリデータを抽出し、保存する処理の流れを示したフローチャートである。
【図１４】本発明の第２の実施の形態のアンシラリデータ管理モジュールが、パケットアウトメッセージにアンシラリデータを付加する処理の流れを示したフローチャートである。
【図１５】本発明の第３の実施形態のアンシラリデータ保持システムの構成を示した図である。
【図１６】本発明の第３の実施形態のアンシラリデータマネージャの構成を示した図である。
【図１７】本発明の第３の実施形態のアンシラリデータマネージャ内のアンシラリデータ管理モジュールの構成を示した図である。
【図１８】本発明の第３の実施形態のアンシラリデータマネージャ内のＳＳＬセッション管理バッファの構成例を示した図である。
【図１９】本発明の第３の実施形態のネットワークスイッチとアンシラリデータマネージャとの間、アンシラリデータマネージャとネットワークコントローラとの間で、セキュアチャネルのコネクションを設定する流れを示したシーケンス図である。
【図２０】本発明の第３の実施形態において、ＳＳＬのセッションを張り終えた後のオープンフローメッセージの処理を表したフローチャートである。
【図２１】ＯｐｅｎＦｌｏｗを用いて構成したデータセンタネットワークアーキテクチャを示した図である。
【図２２】オープンフローコントローラの一般的な構成を示した図である。
【図２３】オープンフロースイッチの一般的な構成を示した図である。
【図２４】サーバに構築されたサーバ仮想化環境と仮想スイッチを示した図である。
【図２５】サーバ内の仮想スイッチを含めた、データセンタネットワークアーキテクチャを示した図である。
【図２６】パケットインメッセージの概略を示した図である。
【図２７】パケットアウトメッセージの概略を示した図である。
【図２８】アンシラリデータ付きパケットインメッセージの概略を示した図である。
【図２９】アンシラリデータ付きパケットアウトメッセージの概略を示した図である。
【発明を実施するための形態】
【００４５】
はじめに本発明の一実施形態の概要について図面を参照して説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。また、以下の説明では、ネットワークに転送するデータの単位を「パケット」に統一して表記するが、このことは、本発明が適用されるネットワークの種類等を制限するものではない。
【００４６】
また以下の実施形態の説明では、オープンフローを例に説明するが、これは理解を助けるためのものであり、本発明をオープンフローに対応したネットワークスイッチ、ネットワークコントローラに限定することを意図するものではない。本発明は、オープンフローに限らず、ネットワークコントローラとネットワークスイッチが制御用メッセージを交換し、パケットの処理を決定する方式のネットワークに適用可能である。さらに、ＯｐｅｎＦｌｏｗ  Ｓｐｅｃｉｆｉｃａｔｉｏｎに言及する場合、非特許文献３のバージョン１．０．０の内容に基づいて説明するが、このことは、本発明が適用されるオープンフローのバージョンなどを制限するものではない。
【００４７】
以降、パケットヘッダの情報などでグルーピングされた一連のパケット群を「フロー」と表記する。例えば、宛先ＭＡＣアドレス、ＶＬＡＮ  ＩＤが一致するパケットをひとまとめにグルーピングし、そのグループに属する一連のパケット群をフローと表記する。
【００４８】
［第１の実施形態］
はじめに本発明の第１の実施形態について図面を参照して詳細に説明する。図１は、本発明の第１の実施形態の通信システムの概略構成を示す図である。図１を参照すると、２つのネットワークスイッチ１２ａ、１２ｂと、これらネットワークスイッチ１２ａ、１２ｂを制御するオープンフローコントローラ１６とが示されている。
【００４９】
上記構成において、アンシラリデータを送信する手順について説明する。まず、第１のネットワークスイッチ１２ａが、オープンフローコントローラ１６に対し、アンシラリデータを含む制御用メッセージ（例えば、上述のパケットインメッセージ）を送信する。オープンフローコントローラ１６は、前記アンシラリデータを含んだ制御用メッセージから、前記アンシラリデータを取り出して保持する。
【００５０】
上述のパケットインメッセージを受信したオープンフローコントローラ１６は、第２のネットワークスイッチ１２ｂに対して、前記アンシラリデータを含んだ制御用メッセージ（例えば、上述のパケットアウトメッセージ）を送信する。第２のネットワークスイッチ１２ｂは、前記アンシラリデータを含む制御用メッセージを前記ネットワークコントローラから受信すると、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に転送する。
【００５１】
以上により、集中制御型ネットワークに、転送方式等による制約の少ないアンシラリデータの転送機能を付加することが可能となる。なお、図１の例では、ネットワークスイッチ１２ａ、１２ｂが直接接続されているが、ネットワークスイッチ１２ａ、１２ｂの間にコアネットワークスイッチが存在してもよい。また、制御用メッセージとしては、パケットインメッセージとパケットアウトメッセージの組が典型的であるが、非特許文献２、３に記載されているベンダが定義可能な独自メッセージを用いることもできる。
【００５２】
続いて、上記機能実現するための各装置の細部構成について図面を参照して詳細に説明する。また、以下の説明では、ネットワークスイッチ１２ａ、１２ｂを特に区別しない場合、ネットワークスイッチ１２と表記する。
【００５３】
図２は、本発明の第１の実施形態のオープンフローコントローラ１６の構成を示した図である。図２を参照すると、パケット入出力モジュール１６４と、復号化モジュール１６６と、暗号化モジュール１６８と、アンシラリデータ管理モジュール（Ａｎｃｉｌｌａｒｙ  Ｄａｔａ管理モジュール）１８０と、オープンフローメッセージ制御モジュール（ＯｐｅｎＦｌｏｗ  ｍｅｓｓａｇｅ制御モジュール）１７０と、を備えた構成が示されている。パケット入出力モジュール１６４と、復号化モジュール１６６と、暗号化モジュール１６８と、オープンフローメッセージ制御モジュール（ＯｐｅｎＦｌｏｗ  ｍｅｓｓａｇｅ制御モジュール）１７０は、図２２を用いて説明したオープンフローコントローラの各要素Ｘ１６４、Ｘ１６６、Ｘ１６８、Ｘ１７０と同様であるため説明を省略する。
【００５４】
アンシラリデータ管理モジュール１８０は、復号化モジュール１６６から入力されたアンシラリデータ付きパケットインメッセージ２００（図２８）からアンシラリデータ２４０を分離し、保持するモジュールである。また、アンシラリデータ管理モジュール１８０は、オープンフローメッセージ制御モジュール１７０から入力されたパケットアウトメッセージ２５０に適切なアンシラリデータ２４０を付加し、アンシラリデータ付きパケットアウトメッセージ２５０（図２９）として、暗号化モジュール１６８に出力するモジュールである。
【００５５】
図３は、本発明の第１の実施形態のネットワークスイッチ１２の構成を示した図である。図３を参照すると、パケット入力モジュール１２００と、パケット転送処理モジュール１２１０と、フローテーブル１２２０と、オープンフローメッセージ処理モジュール（ＯｐｅｎＦｌｏｗ  ｍｅｓｓａｇｅ処理モジュール）１２３０と、セキュアチャネル制御モジュール１２４０と、パケット出力モジュール１２５０と、を備えた構成が示されている。図２３にて説明したオープンフロースイッチとの相違点は、オープンフローメッセージ処理モジュール１２３０に変更が加えられている点である。
【００５６】
図４は、本発明の第１の実施形態のネットワークスイッチ１２のオープンフローメッセージ処理モジュール１２３０の細部構成を示す図である。図４を参照すると、パケットデータ入出力モジュール１２３１と、非同期メッセージ処理モジュール（Ａｓｙｎｃｈｒｏｎｏｕｓメッセージ処理モジュール）１２３２と、コントローラメッセージ処理モジュール（Ｃｏｎｔｒｏｌｌｅｒ−ｔｏ−Ｓｗｉｔｃｈメッセージ処理モジュール）１２３３と、対称型メッセージ処理モジュール（Ｓｙｍｍｅｔｒｉｃメッセージ処理モジュール）１２３４と、オープンフローメッセージ入出力モジュール（ＯｐｅｎＦｌｏｗメッセージ入出力モジュール）１２３６と、パケットインメッセージ処理モジュール（Ｐａｃｋｅｔ−ｉｎ）１２３７と、パケットアウトメッセージ処理モジュール（Ｐａｃｋｅｔ−ｏｕｔ）１２３８と、を備えた構成が示されている。
【００５７】
なお、図４には、パケットインメッセージ２００、及びパケットアウトメッセージ２５０以外のオープンフローメッセージを処理するモジュールを示していないが、それぞれのメッセージの種別に応じて、非同期メッセージ処理モジュール１２３２、コントローラメッセージ処理モジュール１２３３、対称型メッセージ処理モジュール１２３４に、対応した個別メッセージ処理モジュール１２３９が備えられている。
【００５８】
本実施形態において、パケット転送処理モジュール１２１０は、オープンフローメッセージ処理モジュール１２３０に対してパケットインメッセージ２００の送信を要求する際に、パケット構成データに加えて、アンシラリデータも渡す。これは、例えば、ソケットバッファに格納されたデータを、すべてオープンフローメッセージ処理モジュール１２３０に渡すことで実現される。
【００５９】
パケットデータ入出力モジュール１２３１は、パケット転送処理モジュール１２１０とのデータの受け渡し、および非同期メッセージ処理モジュール１２３２、コントローラメッセージ処理モジュール１２３３、対称型メッセージ処理モジュール１２３４、とのデータやメッセージ処理要求の受け渡しを行う。この処理要求には、少なくともメッセージの種別を示す識別子が含まれる。例えば、パケットインメッセージ２００の送信要求を、パケット転送処理モジュール１２１０から受け取った場合、非同期メッセージ処理モジュール１２３２に対し、その要求とパケット構成データとアンシラリデータとを転送する。
【００６０】
コントローラメッセージ処理モジュール１２３３は、オープンフローコントローラ１６からのパケットアウトメッセージ２５０を処理した後に、パケットの出力などを行う場合に、パケット構成データやアンシラリデータをパケットデータ入出力モジュール１２３１に転送する。
【００６１】
非同期メッセージ処理モジュール１２３２は、オープンフローメッセージのうち、非同期メッセージを処理する。パケットインメッセージ２００は非同期メッセージの一例である。非同期メッセージ処理モジュール１２３２は、パケットデータ入出力モジュール１２３１から、非同期メッセージデータと、その処理要求を受け取った場合、処理するメッセージの種別に応じて、適切なメッセージ処理モジュール（パケットインメッセージ処理モジュール１２３７、または個別メッセージ処理モジュール１２３９）に対し、メッセージ処理要求とともに処理対象のデータを転送する。
【００６２】
非同期メッセージ処理モジュール１２３２に接続されたパケットインメッセージ処理モジュール１２３７または個別メッセージ処理モジュール１２３９は、オープンフローコントローラ１６に転送するメッセージを構築する。非同期メッセージ処理モジュール１２３２は、構築されたメッセージをオープンフローメッセージ入出力モジュール１２３６に転送し、オープンフローコントローラ１６へのメッセージ転送要求を発行する。
【００６３】
コントローラメッセージ処理モジュール１２３３は、オープンフローメッセージのうち、コントローラメッセージ（制御用メッセージ）を処理する。パケットアウトメッセージ２５０は、コントローラメッセージの一例である。コントローラメッセージ処理モジュール１２３３は、オープンフローメッセージ入出力モジュール１２３６（後述）から、コントローラメッセージと、その処理要求を受け取った場合、処理するメッセージの種別に応じて、適切なメッセージ処理モジュール（パケットアウトメッセージ処理モジュール１２３８、または個別メッセージ処理モジュール１２３９）に対し、メッセージ処理要求とともに処理対象のデータを転送する。
【００６４】
パケットアウトメッセージ処理モジュール１２３８は、コントローラメッセージ処理モジュール１２３３から受け取ったパケットアウトメッセージのデータをもとに、イーサネットフレームの取り出しなどの処理を行い、パケット転送処理モジュール１２１０で扱える形にパケットアウトメッセージ２５０を整形する。整形されたパケットアウトメッセージ２５０は、コントローラメッセージ処理モジュール１２３３に転送される。
【００６５】
コントローラメッセージには、パケットアウトメッセージ２５０以外に、オープンフロースイッチ１２の制御や設定を行うためのメッセージなどが含まれており、これらは、コントローラメッセージ処理モジュール１２３３に接続された、各個別メッセージ処理モジュール１２３９で処理される。
【００６６】
対称型メッセージ処理モジュール１２３４は、オープンフローメッセージのうち、対称型メッセージを処理する。対称型メッセージには、オープンフローの仕様で定められたメッセージのほか、ユーザが定義したメッセージが含まれる。対称型メッセージ処理モジュール１２３４は、パケットデータ入出力モジュール１２３１またはオープンフローメッセージ入出力モジュール１２３６から、対称型メッセージデータと、その処理要求を受け取った場合、処理するメッセージの種別に応じて、適切な個別メッセージ処理モジュール１２３９に対し、メッセージ処理要求とともに処理対象のデータを転送する。
【００６７】
オープンフローメッセージ入出力モジュール１２３６は、セキュアチャネル制御モジュール１２４０（後述）とのデータの受け渡しを行う。また、オープンフローメッセージ入出力モジュール１２３６は、非同期メッセージ処理モジュール１２３２からの、オープンフローコントローラ１６に転送するメッセージ及びその転送要求の受け取りを行う。また、オープンフローメッセージ入出力モジュール１２３６は、コントローラメッセージ処理モジュール１２３３及び対称型メッセージ処理モジュール１２３４へのオープンフローメッセージの転送を行う。また、オープンフローメッセージ入出力モジュール１２３６は、対称型メッセージ処理モジュール１２３４からの、オープンフローコントローラ１６に転送するメッセージ及びその転送要求の受け取りを行う。例えば、パケットアウトメッセージ２５０をセキュアチャネル制御モジュール１２４０から受け取った場合、オープンフローメッセージ入出力モジュール１２３６は、コントローラメッセージ処理モジュール１２３３に対し、パケットアウトメッセージ２５０と、その処理要求を転送する。
【００６８】
パケットインメッセージ処理モジュール１２３７は、非同期メッセージ処理モジュール１２３２から受け取った非同期メッセージデータを用いて、パケットインメッセージ２００を構築する。このパケットインメッセージ２００にはアンシラリデータ２４０が含まれる。アンシラリデータ２４０の含め方については後述する。構築したパケットインメッセージ２００は、非同期メッセージ処理モジュール１２３２に返される。
【００６９】
パケットアウト処理モジュール１２３８は、コントローラメッセージ処理モジュール１２３３から受け取ったパケットアウトメッセージ２５０から、イーサネットフレームやアンシラリデータ２４０、アクションなどを取り出し、パケット転送処理モジュール１２１０に渡せる形に整形する。例えば、ソケットバッファ構造体の適切な領域にデータを格納する。整形されたパケットアウトメッセージ２５０はコントローラメッセージ処理モジュール１２３３に転送される。
【００７０】
図５は、上記オープンフローメッセージ処理モジュール内のパケットインメッセージ処理モジュール１２３７の構成を示した図であり、図２８は、アンシラリデータを格納可能なパケットインメッセージ２００の構成例である。図５を参照すると、データフィールド分離モジュール１２３７．１と、イーサネットフレーム生成モジュール１２３７．２と、パケットインメッセージ構築モジュール１２３７．４と、を備えた構成が示されている。図２８を参照すると、図２６のパケットインメッセージＸ２００に、アンシラリデータ２４０が付加されている。図２６と図２８で同一の構成要素については同一の符号を付す。
【００７１】
パケットインメッセージ処理モジュール１２３７は、非同期メッセージ処理モジュール１２３２から非同期メッセージデータと、パケットインメッセージ２００の構築を求める非同期メッセージ構築要求とを受け取ることで、パケットインメッセージ２００の構築処理を開始する。なお、明示的に構築要求を出さずに、非同期メッセージデータを渡すことそれ自体を、非同期メッセージ構築要求とする方法も考えられる。
【００７２】
パケットインメッセージ２００の構築の場合、非同期メッセージデータには、パケットインメッセージヘッダ２２０を構築するのに必要な情報と、パケット構成データと、が少なくとも含まれる。パケットインメッセージヘッダ２２０を構築するのに必要な情報の例として、パケットインを起こした理由を示すデータや、パケットをバッファリングする場合のバッファＩＤなどが含まれる。パケット構成データには、パケットヘッダに使用される情報、パケットのペイロード部に含まれるデータに加え、アンシラリデータが含まれる。パケット構成データの例として、ソケットバッファの形式で保持されたデータが考えられる。
【００７３】
パケットインメッセージ２００には、図２８に示すとおり、オープンフローヘッダ２１０が含まれるが、このヘッダには、オープンフローのバージョンや、メッセージタイプ、メッセージ長、トランザクションＩＤが含まれる。これらについては、静的な値（バージョンやメッセージタイプ）、メッセージ構築時に計算される値（メッセージ長、トランザクションＩＤ）であるため、必ずしも非同期メッセージ処理モジュール１２３２が提供する必要はない。
【００７４】
データフィールド分離モジュール１２３７．１は、非同期メッセージ処理モジュール１２３２から非同期メッセージデータと非同期メッセージ構築要求とを受け取ると、非同期メッセージデータを、イーサネットフレームを構築するのに必要な情報であるフレーム情報と、パケットインメッセージヘッダ２２０を構築するのに必要なメッセージヘッダ情報と、アンシラリデータとに分離する。データフィールド分離モジュール１２３７．１は、分離したデータのうち、フレーム情報を、イーサネットフレーム生成モジュール１２３７．２に渡し、パケットインメッセージ構築モジュール１２３７．４にそれ以外のデータを渡す。
【００７５】
イーサネットフレーム生成モジュール１２３７．２は、データフィールド分離モジュール１２３７．１から渡されたフレーム情報をもとに、イーサネットフレームを構築する。フレーム情報には、ＭＡＣアドレスやＩＰアドレス、ＶＬＡＮ  ＩＤなどのヘッダ情報と、ペイロードとなるフレームデータ部が含まれる。構築したイーサネットフレームは、パケットインメッセージ構築モジュール１２３７．４に渡される。
【００７６】
パケットインメッセージ構築モジュール１２３７．４は、データフィールド分離モジュール１２３７．１から受け取ったパケットインメッセージヘッダを構築するのに必要な情報と、アンシラリデータ２４０と、イーサネットフレーム生成モジュール１２３７．２から受け取ったイーサネットフレームと、から、パケットインメッセージ２００を構築する。図２８のパケットデータ２３０は、このイーサネットフレームから構成される。
【００７７】
ここでパケットインメッセージ２００の構築手順について説明する。まず、パケットインメッセージ構築モジュール１２３７．４は、イーサネットフレームの最後にアンシラリデータ２４０を付加する。このときに、イーサネットフレームとアンシラリデータ２４０の間にパディングデータが入っても良い。パディングデータを挿入する目的の例として、アンシラリデータ２４０を格納する記憶領域のアドレスを４や８の倍数に揃えることが考えられる。このように一定の法則でパディングデータを挿入する分には、パディングデータの存在によってアンシラリデータ２４０がどこに格納されているかが分からなくなることはない。
【００７８】
次に、パケットインメッセージ構築モジュール１２３７．４は、パケットインメッセージヘッダ２２０を構築し、イーサネットフレームの先頭に付加する。パケットインメッセージヘッダ２２０には、イーサネットフレームの長さを示すフィールドが含まれるが、この値を、イーサネットフレームの長さとアンシラリデータ２４０の長さを加算したものにする。その他の情報については、非特許文献２に従い、各フィールドに値をセットする。
【００７９】
次に、パケットインメッセージ構築モジュール１２３７．４は、オープンフローヘッダ２１０を構築し、パケットインメッセージヘッダ２２０の先頭に付加する。オープンフローヘッダ２１０に含まれるメッセージ長には、アンシラリデータ２４０までを含めたデータ長を格納する。このようにすることで、図２８に示すようなパケットインメッセージ２００を構築することができる。一方で、パケットインメッセージ２００のパケットデータ２００に含まれるイーサネットフレームのヘッダに含まれる、イーサネットフレームの長さを示す値には、アンシラリデータの長さは含まれていない。これにより、オープンフローヘッダ２１０の長さの値と、パケットインメッセージヘッダ２２０の長さと、イーサネットフレーム長の値から、アンシラリデータ２４０の格納位置を求めることができる。具体的には、下記のように求める。
（アンシラリデータ２４０の開始位置）＝（オープンフローヘッダ２１０の長さ（固定値））＋（パケットインメッセージヘッダ２２０の長さ（固定値））＋（イーサネットフレームのヘッダ長（固定値））＋（ＩＰヘッダに含まれるパケット長フィールドの値）
もし、パディングが行われる場合は、パディングを挿入する方式（アンシラリデータ２４０の開始位置を４の倍数にする、など）に従って、パディング分を、上記アンシラリデータ２４０の開始位置に加算する。
【００８０】
ここで、アンシラリデータ２４０の位置を指し示す別の方法として、いくつか方式が考えられる。例えば、図６の例では、パケットインメッセージヘッダ２２０とパケットデータ２３０の間に新たにイーサネットフレームヘッダ２２２が挿入されている。このイーサネットフレームヘッダ２２２は、パケットデータ２３０に含まれるイーサネットフレームのヘッダ領域のうち、オープンフローで使用されるヘッダの情報をコピーしている。つまり、ＩＰヘッダやＴＣＰヘッダについて、パケットデータ２３０に含まれるイーサネットフレームのヘッダと同一の情報を持つ。
【００８１】
イーサネットフレームヘッダ２２２のＩＰヘッダ部に含まれるパケット長には、アンシラリデータ２４０を含んだ長さを設定する。つまり、パケットデータ２３０とアンシラリデータ２４０をイーサネットフレームヘッダ２２２で１つのイーサネットフレームとしている。パケットインメッセージヘッダ２２０やオープンフローヘッダ２１０は、イーサネットフレームヘッダ２２２をヘッダとするイーサネットフレームに基づいて構築される。結果として、パケットインメッセージヘッダ２２０のイーサネットフレームの長さを示す値や、オープンフローヘッダ２１０のメッセージ長にはアンシラリデータ２４０の長さに加えて、挿入したイーサネットフレームの長さが加算される。
【００８２】
このようにすることで、イーサネットフレームヘッダ２２２のＩＰパケットの長さを示す値から、パケットデータ２３０に含まれるイーサネットフレームのＩＰヘッダの開始位置までのバイト数と、パケットデータ２３０に含まれるイーサネットフレームのＩＰヘッダ部のパケット長の値と、を用いることで、アンシラリデータ２４０がパケットデータ２３０の最後からどこまでかを求めることができる。
【００８３】
また、アンシラリデータがトンネリングで使用する情報のように、パケットに付加する情報から構成される場合、パケットに付加してからパケットインすることが考えられる。例えば、アンシラリデータがＮＶＧＲＥ（Ｎｅｔｗｏｒｋ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ｕｓｉｎｇ  Ｇｅｎｅｒｉｃ  Ｒｏｕｔｉｎｇ  Ｅｎｃａｐｓｕｌａｔｉｏｎ）トンネルのアウターヘッダを構成するための情報のみであった場合、パケットインメッセージ２００に含まれるイーサネットフレームをＮＶＧＲＥでカプセル化する。アンシラリデータの情報はアウターヘッダに埋め込まれているため、パケットイン、パケットアウトの前後でアンシラリデータは失われない。このときに、どのようにアンシラリデータが埋め込まれたかをオープンフローコントローラ１６に通知するために、例えば、オープンフローの仕様を拡張し、オープンフローヘッダ２１０に含まれるメッセージ種別に、アンシラリデータが埋め込まれたパケットデータを持つメッセージを示す値を設定することが考えられる。
【００８４】
次に、パケットインメッセージ構築モジュール１２３７．４は、構築したパケットインメッセージ２００を、非同期メッセージ処理モジュール１２３２に転送し、パケットインメッセージ２００の構築処理を完了する。
【００８５】
このようにして構築されたパケットインメッセージ２００は、セキュアチャネル制御モジュール１２４０と、ネットワーク管理用リンク２０と、を経由して、オープンフローコントローラ１６に転送される。
【００８６】
オープンフローコントローラ１６は、パケットインメッセージ２００を受け取ると、パケットインメッセージ２００に含まれるオープンフローヘッダ２１０、パケットインメッセージヘッダ２２０、イーサネットフレーム（パケットデータ２３０）、アンシラリデータ２４０を識別可能なように保持する。例えば、オープンフローコントローラ１６内で、非特許文献３に記載されるような、オープンフローメッセージの構造体の各メンバに保存することが考えられる。この場合、アンシラリデータ２４０はイーサネットフレームと一緒に、ひとかたまりのデータとしてオープンフローコントローラ１６内で扱われるか、あるいはアンシラリデータ２４０のみ別領域に保持されることが考えられる。後者の場合、パケットインメッセージからアンシラリデータ２４０を分離する必要がある。なお、アンシラリデータ２４０の開始位置は先述の通り、メッセージヘッダ情報などから計算することができる。
【００８７】
次に、オープンフローコントローラ１６は、イーサネットフレームに含まれるヘッダ情報から、そのパケットに対するアクションを決定する。
【００８８】
次に、オープンフローコントローラ１６は、必要であれば、パケットアウトメッセージ２５０のパケットデータ２３０の領域に格納するイーサネットフレームの再構築を行う。例えば、オープンフローでネットワークが構築されたシステムにおいて、オープンフローコントローラ１６に対し、ＡＲＰ（Ａｄｄｒｅｓｓ  Ｒｅｓｏｌｕｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）パケットをパケットインし、オープンフローコントローラ１６がＡＲＰ  Ｒｅｐｌｙパケットを、ＡＲＰパケットを送出したサーバ、あるいは仮想マシンに返すという場合、パケットインメッセージ２００に含まれるイーサネットフレームはＡＲＰパケットであるが、パケットアウトメッセージ２５０に含まれるイーサネットフレームはＡＲＰ  Ｒｅｐｌｙパケットとなる。イーサネットフレームの再構築が必要になるかどうかは、システムの構成や管理ポリシーに依存する。
【００８９】
次に、オープンフローコントローラ１６は、アクションの個数やアクションに関する情報に加え、オープンフローヘッダ２１０やパケットインメッセージヘッダ２２０、構築したイーサネットフレーム、アンシラリデータ２４０の情報を用いて、図２９に示すパケットアウトメッセージ２５０を構築する。パケットアウトメッセージ２５０において、パケットアウトメッセージヘッダ２２５には、パケットインメッセージヘッダ２２０と異なり、パケットデータ２３０の長さを示すフィールドは存在しないため、オープンフローコントローラ１６内でアンシラリデータ２４０をイーサネットフレームとともにひとかたまりのデータとして扱った場合、アンシラリデータ２４０の有無に依存した処理はオープンフローコントローラ１６では発生しないようにできる。
【００９０】
オープンフローコントローラ１６は、構築したパケットアウトメッセージ２５０を、ネットワーク管理用リンク２０を介して、適切なオープンフロースイッチ１２に送出する。
【００９１】
図７は、上記オープンフローメッセージ処理モジュール内のパケットアウトメッセージ処理モジュール１２３８の構成を示した図である。図７を参照すると、オープンフローメッセージフィールド分離モジュール１２３８．１と、パケットバッファ復帰モジュール１２３８．２と、パケットデータ構築モジュール１２３８．４と、を備えた構成が示されている。
【００９２】
パケットアウトメッセージ処理モジュール１２３８は、コントローラメッセージ処理モジュール１２３３からコントローラメッセージデータと、パケットアウトメッセージ処理を示す非同期メッセージ処理要求とを受け取ることで、パケットアウトメッセージ２５０の処理を開始する。なお、明示的に処理要求を出さずに、コントローラメッセージデータを渡すことそれ自体を、コントローラメッセージ処理要求とすることも可能である。
【００９３】
パケットアウトメッセージ処理の場合、コントローラメッセージデータの一例として、パケットアウトメッセージ２５０そのものが使用されることが考えられる。このパケットアウトメッセージ２５０には、イーサネットフレームの後部にアンシラリデータが付与されている。本実施形態では、パケットアウトメッセージ２５０がパケットアウトメッセージ処理の際に、コントローラメッセージデータとしてパケットアウトメッセージ処理モジュール１２３８に渡されるものとする。
【００９４】
ここでパケットアウトメッセージ２５０を、パケットインの際にパケット転送処理モジュールから渡されたパケット構成データと同じ形式に戻す処理手順について説明する。まず、オープンフローメッセージフィールド分離モジュール１２３８．１は、コントローラメッセージ処理モジュール１２３３から、パケットアウトメッセージ２５０と、コントローラメッセージ処理要求とを受け取ると、パケットアウトメッセージ２５０を、オープンフローヘッダ２１０と、パケットアウトメッセージヘッダ２２５と、パケットデータ２３０と、アンシラリデータ２４０と、に分離する。パケットデータ２３０（イーサネットフレーム）とアンシラリデータ２４０はパケットバッファ復帰モジュール１２３８．２に渡され、パケットアウトメッセージヘッダ２２５はパケットデータ構築モジュール１２３８．４に渡される。
【００９５】
オープンフローメッセージフィールド分離モジュール１２３８．１がパケットアウトメッセージ２５０からアンシラリデータ２４０を取り出す際に、例えば、以下のように、アンシラリデータの開始位置を計算する。
（アンシラリデータ２４０の開始位置）＝（オープンフローヘッダの長さ（固定値））＋（パケットアウトメッセージヘッダ２２５の長さ（可変長））＋（イーサネットフレームのヘッダ長（固定値））＋（ＩＰヘッダに含まれるパケット長フィールドの値）
【００９６】
ここで、パケットアウトメッセージヘッダ２２５の長さは、パケットアウトメッセージ２５０に含まれる、アクションの個数と、各アクションの長さ（固定値）の情報から求めることができる。
【００９７】
また、イーサネットフレームのヘッダ長は、ＤＩＸ形式やＩＥＥＥ８０２．３形式、ＩＥＥＥ８０２．１Ｑ形式などのようにイーサネットの形式に応じて変わるため、イーサネットヘッダのソースＭＡＣアドレスフィールドに続くフィールドの値から、イーサネットの形式を識別する必要がある。
【００９８】
さらに、イーサネットフレームのペイロード部がＡＲＰ（Ａｄｄｒｅｓｓ  Ｒｅｓｏｌｕｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）フレームであった場合、オープンフローメッセージフィールド分離モジュール１２３８．１は、イーサネットヘッダの後にはＡＲＰフレームが格納されている。この場合、イーサネットヘッダのタイプフィールドの値が０ｘ０８０６であった場合には、イーサネットヘッダに続く２８バイトがＡＲＰフレームであると判断し、アンシラリデータ２４０の開始位置を求めることになる。
【００９９】
パケットバッファ復帰モジュール１２３８．２は、オープンフローメッセージフィールド分離モジュール１２３８．１から渡されたイーサネットフレームとアンシラリデータ２４０と、をパケットインの際にパケット転送処理モジュールから渡されたパケット構成データと同じ形式に戻す処理を行う。例えば、パケットデータの情報をソケットバッファの各領域にセットする。ここでは、ソケットバッファにパケットデータの情報をセットしたものとして説明する。
【０１００】
パケットバッファ復帰モジュール１２３８．２は、ソケットバッファをパケットデータ構築モジュール１２３８．４に渡す。
【０１０１】
パケットデータ構築モジュール１２３８．４は、オープンフローメッセージフィールド分離モジュールから受け取ったパケットアウトメッセージヘッダ２２５と、パケットバッファ復帰モジュール１２３８．２から受け取ったソケットバッファを、コントローラメッセージ処理モジュール１２３３に転送する。この際に、パケットアウトメッセージヘッダ２２５に含まれるアクションの情報の別領域へのコピーや、ベリファイを行うことが考えられるが、本実施形態では省略する。
【０１０２】
続いて、本実施形態の動作について図面を参照して詳細に説明する。図８は、本発明の第１の実施形態のネットワークスイッチ及びネットワークコントローラの動作を示したシーケンス図である。
【０１０３】
図８を参照すると、まず、オープンフロースイッチ１２はイーサネットフレームとアンシラリデータ２４０からパケットインメッセージ２００を構築する（ステップＳ１２０−１）。
【０１０４】
次に、オープンフロースイッチ１２は、オープンフローコントローラ１６に対し、構築したパケットインメッセージ２００を送信する（ステップＳ１２０−２）。
【０１０５】
次に、オープンフローコントローラ１６は、オープンフロースイッチ１２から受信したパケットインメッセージ２００について、パケットインメッセージ２００に含まれるイーサネットフレームの情報からアクションを決定する（ステップＳ１６−１）。
【０１０６】
次に、オープンフローコントローラ１６は、パケットインメッセージ２００に含まれるオープンフローヘッダ２１０、パケットインメッセージヘッダ２２０、イーサネットフレームの情報、アンシラリデータ２４０と、ステップＳ１６−１で決定したアクションからパケットアウトメッセージ２５０を構築する（ステップＳ１６−２）。
【０１０７】
次に、オープンフローコントローラ１６は、オープンフロースイッチ１２に対し、ステップＳ１６−２で構築したパケットアウトメッセージ２５０を送信する（ステップＳ１６−３）。このときに、パケットアウトメッセージ２５０の宛先となるオープンフロースイッチ１２は、パケットインを起こしたオープンフロースイッチ１２とは異なるオープンフロースイッチ１２でもよい。
【０１０８】
次に、パケットアウトメッセージ２５０を受け取ったオープンフロースイッチ１２は、パケットアウトメッセージ２５０からイーサネットフレーム（図２９のパケットデータ２３０）とアンシラリデータ２４０を取り出す（ステップＳ１２０−３）。
【０１０９】
続いて、図８のステップＳ１２０−１からステップＳ１２０−２までのネットワークスイッチ側の処理について詳細に説明する。図９は、図８のステップＳ１２０−１からステップＳ１２０−２までの処理を詳細に示したフローチャートである。これらの処理は、オープンフロースイッチ１２内部のパケットインメッセージ処理モジュール１２３７で実行される。
【０１１０】
まず、パケットインメッセージ処理モジュール１２３７は、非同期メッセージデータをフレーム情報と、パケットメッセージヘッダと、アンシラリデータ２４０とに分離する（ステップＦ１２０−１−１）。
【０１１１】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−１で分離したフレーム情報から、イーサネットフレームを構築する（ステップＦ１２０−１−２）。
【０１１２】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−２で構築したイーサネットフレームの末尾に、ステップＦ１２０−１−１で分離したアンシラリデータ２４０を付加する（ステップＦ１０２−１−３）。
【０１１３】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−２で構築したイーサネットフレームのサイズとアンシラリデータ２４０のサイズの合計値を求める（ステップＦ１２０−１−４）。
【０１１４】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−４で求めたサイズの合計値を用いて、パケットインメッセージヘッダ２２０を構築する（ステップＦ１２０−１−５）。
【０１１５】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−５で構築したパケットインメッセージヘッダ２２０を、ステップＦ１２０−１−２で構築したイーサネットフレームの先頭に付加する（ステップＦ１２０−１−７）。これにより、イーサネットフレームの前にパケットインメッセージヘッダ２２０が、末尾にアンシラリデータ２４０が付与された。
【０１１６】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−４で求めたサイズの合計値に、パケットインメッセージヘッダ２２０のサイズと、オープンフローヘッダ２１０のサイズを加算する（ステップＦ１２０−１−８）。
【０１１７】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−８で求めたサイズ値を用いて、オープンフローヘッダ２１０を構築する（ステップＦ１２０−１−９）。
【０１１８】
次に、パケットインメッセージ処理モジュール１２３７は、ステップＦ１２０−１−９で構築したオープンフローヘッダ２１０を、ステップＦ１２０−１−７で構築したデータの先頭に付加し、パケットインメッセージ２００を構築する（ステップＦ１２０−１−１０）。これにより、オープンフローヘッダ２１０、パケットインメッセージヘッダ２２０、パケットデータ２３０（イーサネットフレーム）、アンシラリデータ２４０から構成されるパケットインメッセージ２００が構築された（図２８参照）。
【０１１９】
次に、ステップＦ１２０−１−１０で構築されたパケットインメッセージ２００は、非同期メッセージ処理モジュール１２３２、オープンフローメッセージ入出力モジュール１２３６、セキュアチャネル制御モジュール１２４０、ネットワーク管理用リンク２０を通じて、オープンフローコントローラ１６に送信される（ステップＦ１２０−２−１）。
【０１２０】
続いて、図８のステップＳ１６−１からステップＳ１６−３までのネットワークコントローラ側の処理について詳細に説明する。図１０は、図８のステップＳ１６−１からステップＳ１６−３までの処理を詳細に示したフローチャートである。これらの処理は、オープンフローコントローラ１６で実行される。
【０１２１】
まず、オープンフローコントローラ１６は、パケットインメッセージ２００に含まれるオープンフローヘッダ２１０、パケットインメッセージヘッダ２２０、パケットデータ２３０（イーサネットフレーム）、アンシラリデータ２４０を識別可能なように保持する（ステップＦ１６−１−１）。例えば、非特許文献３に記載されているようなオープンフローメッセージ構造体の形式が考えられる。パケットインメッセージ２００中のアンシラリデータ２４０の位置は、先述の通り、求めることができる。
【０１２２】
次に、オープンフローコントローラ１６は、イーサネットフレームのヘッダ情報から、アクションを決定する（ステップＦ１６−１−２）。
【０１２３】
次に、オープンフローコントローラ１６は、イーサネットフレームの再構築が必要かどうかを判断する（ステップＦ１６−２−１）。例えば、システムを流れるＡＲＰリクエストに対して、オープンフローコントローラ１６がＡＲＰリプライを返すシステムの場合、ＡＲＰリプライのイーサネットフレームを構築する。その他、オープンフロースイッチ１２側で処理できないアクションを、オープンフローコントローラ１６で実行する場合も考えられる。これらはシステムの構成や管理ポリシーに依存する。
【０１２４】
次に、オープンフローコントローラ１６は、イーサネットフレームの再構築が必要な場合（ステップＦ１６−２−１の「必要」）、イーサネットフレームの構築を行う（ステップＦ１６−２−２）。
【０１２５】
一方、オープンフローコントローラ１６は、イーサネットフレームの再構築が不必要な場合（ステップＦ１６−２−１の「不必要」）、あるいは、イーサネットフレームの再構築を行った（ステップＦ１６−２−２）後、パケットアウトメッセージ２５０を構築する（ステップＦ１６−２−３）。このパケットアウトメッセージ２５０は、ステップＦ１６−１−２で決定したアクションの情報、イーサネットフレーム、パケットインメッセージ２００に含まれるオープンフローヘッダ２１０、パケットインメッセージヘッダ２２０、アンシラリデータ２４０を用いて作成される。ここで、イーサネットフレームは、ステップＦ１６−２−２で再構築したイーサネットフレーム、または、パケットインメッセージ２２０に含まれるイーサネットフレームのいずれかである。
【０１２６】
次に、オープンフローコントローラ１６は、ネットワーク管理用リンク２０を通じて、オープンフロースイッチ１２に対し、ステップＦ１６−２−３で構築したパケットアウトメッセージ２５０を送出する（ステップＦ１６−３−１）。
【０１２７】
なお、オープンフローコントローラ１６で、イーサネットフレームの再構築が不要であり、イーサネットフレームのヘッダ部のみを参照するシステムの場合、ステップＦ１６−１−１でアンシラリデータ２４０を識別可能なように保持する必要はない。
【０１２８】
続いて、図８のステップＳ１２０−３のネットワークスイッチ側の処理について詳細に説明する。図１１は、図８のステップＳ１２０−３の処理を詳細に示したフローチャートである。これらの処理は、オープンフロースイッチ１２内部のパケットアウトメッセージ処理モジュール１２３８で実行される。
【０１２９】
図１１を参照すると、まず、パケットアウトメッセージ処理モジュール１２３８は、パケットアウトメッセージ２５０を、オープンフローヘッダ２１０と、パケットアウトメッセージヘッダ２２５と、パケットデータ２３０と、アンシラリデータ２４０と、に分離する（ステップＦ１２０−３−１）。アンシラリデータ２４０は、オープンフローヘッダ２１０の長さや、パケットアウトメッセージヘッダ２２５の長さ、イーサネットフレームのパケットヘッダに含まれるフレーム長などの情報から、アンシラリデータ２４０の開始位置を求めることで、分離する。
【０１３０】
次に、パケットアウトメッセージ処理モジュール１２３８は、パケットデータ２３０に含まれるイーサネットフレームの形式を識別する（ステップＦ１２０−３−２）。イーサネットフレームの形式とは、例えば、ＤＩＸ形式やＩＥＥＥ８０２．３形式、ＩＥＥＥ８０２．１Ｑ形式といったイーサネットヘッダに係るものや、ＡＲＰパケットであるかどうかといったイーサネットフレームのペイロード部に係るものが挙げられる。
【０１３１】
次に、パケットアウトメッセージ処理モジュール１２３８は、ステップＦ１２０−３−１で分離したイーサネットフレームとアンシラリデータ２４０を、オープンフロースイッチ１２内で使用するパケットアウトメッセージ２５０のデータ形式に変換する（ステップＦ１２０−３−４）。このデータ形式とは、例えばソケットバッファとパケットアウトメッセージヘッダに含まれる情報をメンバとする構造体が考えられる。
【０１３２】
以上説明したように、本実施形態によれば、パケットインメッセージ２００、パケットアウトメッセージ２５０にアンシラリデータ２４０を含めることができる。そして、アンシラリデータ２４０は、オープンフローヘッダ２１０の長さ、パケットインメッセージヘッダ２２０の長さ、パケットアウトメッセージヘッダ２２５の長さ、イーサネットフレームに含まれるフレーム長の情報などを利用することによって、適切に取り出すことができる。
【０１３３】
また、本実施形態によれば、アンシラリデータ２４０をパケットインメッセージ２００に含めているため、オープンフローコントローラ１６がアンシラリデータ２４０を用いたネットワーク制御を行うことができる。例えば、アンシラリデータ２４０として、パケットを送出したアプリケーションの情報や、ユーザ情報などをコントローラに送ることができ、ＱｏＳ制御などに適用することができる。
【０１３４】
［第２の実施形態］
次に、オープンフローコントローラ１６内のアンシラリデータ管理モジュール１８０の構成に変更を加えた本発明の第２の実施形態について、図面を参照して詳細に説明する。その他、基本的な構成は第１の実施形態と同様であるので、以下第１の実施形態との相違点を中心に説明する。
【０１３５】
図１２は、本実施形態のオープンフローコントローラ１６内のアンシラリデータ管理モジュール１８０Ａの詳細構成を示す図である。図１２を参照すると、アンシラリデータ分離モジュール１８００と、アンシラリデータ付加モジュール１８２０と、アンシラリデータ保持バッファ１８４０と、を備えた構成が示されている。
【０１３６】
アンシラリデータ分離モジュール１８００は、復号化モジュール１６６から受け取ったパケットインメッセージ２００からアンシラリデータ２４０を分離する処理を行う。
【０１３７】
アンシラリデータ付加モジュール１８２０は、オープンフローメッセージ制御メッセージモジュールから受け取ったパケットアウトメッセージ２５０に、アンシラリデータ保持バッファ１８４０に保持されたアンシラリデータ２４０を付加する処理を行う。
【０１３８】
アンシラリデータ保持バッファ１８４０は、例えば、エントリＩＤをキー、アンシラリデータ２４０をバリューとするテーブルとして実現することができる。本実施形態の説明では、アンシラリデータ保持バッファ１８４０は、このようなテーブルで実現されているとして説明するが、このことは本実施の形態の構成に制限を与えるものではない。
【０１３９】
続いて、本実施形態の動作について図面を参照して詳細に説明する。図１３は、アンシラリデータ管理モジュール１８０Ａが、パケットインメッセージ２００からアンシラリデータ２４０を抽出し、保存する処理の流れを示したフローチャートである。
【０１４０】
アンシラリデータ分離モジュール１８００は、復号化モジュール１６６から受け取ったパケットインメッセージ２００からアンシラリデータ２４０を分離する（ステップＦ１８００）。アンシラリデータ２４０がパケットインメッセージ２００のどの位置に格納されているかは、第１の実施形態で示したような方法で求めることができる。
【０１４１】
次に、アンシラリデータ分離モジュール１８００は、アンシラリデータ保持バッファ１８４０内でアンシラリデータ２４０を一意に識別可能なエントリＩＤを生成する（ステップＦ１８０２）。この一意なエントリＩＤの例として、パケットインメッセージ２００を送信してきたオープンフロースイッチとのセキュアチャネルのセッションＩＤと、パケットインメッセージ２００に含まれるイーサネットヘッダを元に、ハッシュ値を用いることが考えられる。ここでは、これらの情報から３２ビット幅のハッシュ値を生成し、エントリＩＤとすることを前提に説明を進めるが、このことは本実施形態の構成に制限を与えるものではない。
【０１４２】
次に、アンシラリデータ分離モジュール１８００は、アンシラリデータ保持バッファ１８４０に、前記分離したアンシラリデータ２４０を格納する（ステップＦ１８０４）。
【０１４３】
次に、アンシラリデータ分離モジュール１８００は、このエントリＩＤ値をパケットインメッセージ２００のパケットインメッセージヘッダ２２０に含まれるバッファＩＤフィールド（３２ビット幅）に設定する（ステップＦ１８０６）。オープンフローでは、パケットインの際に、オープンフロースイッチ１２側でイーサネットフレームのバッファリングを行わない場合には、このバッファＩＤフィールドには−１（固定値）が設定されている。仮に、オープンフロースイッチ１２側でイーサネットフレームのバッファリングを行う場合、バッファＩＤを示す値が設定されているため、この場合は、アンシラリデータ保持バッファ１８４０にバッファＩＤ、あるいはオープンフローメッセージ２００のヘッダ情報であるオープンフローヘッダ２１０やパケットインヘッダ２２０も格納することで、バッファＩＤが失われることを防ぐことができる。また、このバッファＩＤ値を先のハッシュ値を求める際に使用することも考えられる。なお、エントリＩＤが３２ビット以上の場合は、パケットインメッセージを拡張し、エントリＩＤを保持できるようにすることが望ましい。
【０１４４】
次に、アンシラリデータ分離モジュール１８００は、パケットインメッセージ２００のオープンフローヘッダ２１０の、オープンフローメッセージ２００の長さを示すフィールドの値や、パケットインメッセージヘッダ２２０のイーサネットフレームの長さを示すフィールドの値を、アンシラリデータ２４０のサイズ値の分だけ減らす（ステップＦ１８０８）。第１の実施形態で示したように、このパケットインメッセージヘッダ２２０に含まれるイーサネットフレーム長のフィールドには、イーサネットフレームの長さとアンシラリデータの長さを合計した値が格納されている。
【０１４５】
次に、アンシラリデータ分離モジュール１８００は、オープンフローメッセージ制御モジュール１７０に、アンシラリデータを取り除いたパケットインメッセージ２００を転送する（ステップＦ１８１０）。
【０１４６】
オープンフローメッセージ制御モジュール１７０は、アンシラリデータ管理モジュール１８０Ａからパケットインメッセージ２００を受け取ると、本発明の第１の実施形態にて説明したように、オープンフローメッセージ２００に含まれるイーサネットフレームのヘッダ情報からアクションを決定し、パケットアウトメッセージ２５０を生成する。このパケットアウトメッセージ２５０のバッファＩＤを示す値には、アンシラリデータ保持バッファ１８４０のエントリＩＤが格納されている。
【０１４７】
次に、オープンフローメッセージ制御モジュール１７０は、アンシラリデータ管理モジュール１８０Ａに対し、前記生成したパケットアウトメッセージ２５０を転送する。
【０１４８】
オープンフローメッセージ制御モジュール１７０から転送されたパケットアウトメッセージ２５０は、アンシラリデータ管理モジュール１８０Ａを構成するアンシラリデータ付加モジュール１８２０に渡される。
【０１４９】
図１４は、アンシラリデータ付加モジュール１８２０が、パケットアウトメッセージ２５０にアンシラリデータ２４０を付加する処理の流れを示したフローチャートである。
【０１５０】
図１４を参照すると、アンシラリデータ付加モジュール１８２０は、パケットアウトメッセージ２５０のパケットアウトメッセージヘッダ２２５に含まれるバッファＩＤをエントリＩＤとして、アンシラリデータ保持バッファ１８４０を参照し、アンシラリデータ２４０を取得する（ステップＦ１８２０）。なお、エントリＩＤがバッファＩＤフィールド以外の領域に保持されている場合は、その領域から取り出すことになる。
【０１５１】
次に、アンシラリデータ付加モジュール１８２０は、取得したアンシラリデータ２４０をパケットアウトメッセージ２５０に付加する（ステップＦ１８２２）。さらに、アンシラリデータ付加モジュール１８２０は、パケットアウトメッセージ２５０に含まれるオープンフローヘッダ２１０のパケットアウトメッセージ２５０のサイズを示す値に、アンシラリデータ２４０のサイズを加算する（ステップＦ１８２６）。
【０１５２】
次に、アンシラリデータ付加モジュール１８２０は、オープンフロースイッチ１２でイーサネットフレームのバッファリングをしていない場合に、パケットアウトメッセージ２５０に含まれるパケットアウトメッセージヘッダ２２５のバッファＩＤのフィールドを、−１に書き換える（ステップＦ１８２８）。ここで、オープンフロースイッチ１２でイーサネットフレームのバッファリングをしている場合、先述したようにバッファＩＤをアンシラリデータ保持バッファ１８４０に保持するなどにより、バッファＩＤを保持する必要がある。この場合、アンシラリデータ付加モジュール１８２０は、保持していたバッファＩＤの値をパケットアウトメッセージヘッダ２２５に書き戻す処理を行うことになる。
【０１５３】
次に、アンシラリデータ付加モジュール１８２０は、暗号化モジュール１６８に対して、アンシラリデータを付加したパケットアウトメッセージ２５０を転送する（ステップＦ１８３０）。
【０１５４】
以上のように、アンシラリデータ保持バッファ１８４０を設けた第２の実施形態によれば、オープンフローメッセージ制御モジュール１７０が、アンシラリデータ２４０の存在を意識することなく、オープンフローメッセージの処理を行うことができる。つまり、既存のオープンフローメッセージ制御モジュール１７０をそのまま利用することができるという効果がある。その理由は、アンシラリデータ管理モジュール１８０Ａが、アンシラリデータ２４０が付加されたパケットインメッセージ２００からアンシラリデータ２４０を取り除き、保持し、オープンフローヘッダ２１０とパケットインメッセージヘッダ２２０に含まれる長さの情報を修正するように構成したことにある。
【０１５５】
［第３の実施形態］
続いて、オープンフローコントローラとオープンフロースイッチ（オープンフロー対応ｖＳｗｉｔｃｈ）との間に、アンシラリデータ管理マネージャ１８を配置する本発明の第３の実施形態について図面を参照して詳細に説明する。
【０１５６】
図１５は、本発明の第３の実施形態のアンシラリデータ保持システム３の構成を示した図である。図１５を参照すると、アンシラリデータ保持システム３は、１つ以上のネットワークスイッチ（Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ）１２０と、ネットワークコントローラ（ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）１６の間のネットワーク管理用リンク２０の間に、アンシラリデータ管理装置（Ａｎｃｉｌｌａｒｙ  Ｄａｔａ  Ｍａｎａｇｅｒ）１８を配置した構成が示されている。
【０１５７】
各Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０は、アンシラリデータ管理装置１８とセキュアチャネルのコネクションを張り、アンシラリデータ管理装置１８とオープンフローコントローラ１６は、このコネクションに対応するセキュアチャネルのコネクションを張る。
【０１５８】
アンシラリデータ管理装置１８は、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０からのパケットインメッセージ２００からアンシラリデータ２４０を取り除き、取り除いたアンシラリデータ２４０を保持する。そして、アンシラリデータ管理装置１８は、オープンフローコントローラ１６に対し、アンシラリデータ２４０を取り除いたパケットインメッセージ２００を送信する。
【０１５９】
また、アンシラリデータ管理装置１８は、オープンフローコントローラ１６からのパケットアウトメッセージ２５０にアンシラリデータ２４０を付加する。そして、アンシラリデータ管理装置１８は、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０に対して、前記アンシラリデータ２４０を付加したパケットアウトメッセージ２５０を送信する。
【０１６０】
図１６は、アンシラリデータ管理装置１８の詳細構成を示した図である。図２に示した第２の実施形態のオープンフローコントローラ１６との構成上の相違点は、ＳＳＬセッション管理バッファ１６５を備えている点と、アンシラリデータ管理モジュール１８０−２の細部が異なる。その他図２と同一の構成要素については同一の符号を付し、詳細な説明を省略する。
【０１６１】
図１７は、アンシラリデータ管理モジュール１８０−２の構成を示した図である。図１２のアンシラリデータ管理モジュール１８０とは、アンシラリデータ付加モジュール１８２０とアンシラリデータ分離モジュール１８００が、それぞれ復号化モジュール１６６と、暗号化モジュール１６８の両方に接続されている点で異なっている。また、図１２のアンシラリデータ管理モジュール１８０とは、メッセージ種別判別モジュール１８６０を備えている点で異なっている。その他図１２と同一の構成要素については同一の符号を付し、詳細な説明を省略する。
【０１６２】
ＳＳＬセッション管理バッファ１６５は、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とアンシラリデータ管理マネージャ１８の間のセキュアチャネル（ＳＳＬ）のコネクションと、それに対応するアンシラリデータ管理マネージャ１８とオープンフローコントローラ１６との間のセキュアチャネル（ＳＳＬ）のコネクションの対応を管理するバッファである。
【０１６３】
図１８は、ＳＳＬセッション管理バッファ１６５の構成例を示したものである。図１８を参照すると、ＳＳＬセッション管理バッファ１６５は、入力セッション識別子をキーとして、復号化モジュール１６６が受信したパケットを復号化するためのＳＳＬ鍵（復号鍵１６５２）と、暗号化モジュール１６８が送信するパケットを暗号化するＳＳＬ鍵（暗号鍵１６５４）と、暗号化モジュール１６８が送信するパケットのＴＣＰセッションの識別子（出力セッション識別子１６５６）と、を値として対応付けたエントリを格納可能なテーブルが示されている。ここで、入力セッション識別子１６５０とは、復号化モジュール１６６がパケットを受信したＴＣＰセッションの識別子である。ＴＣＰセッションの識別子としては、ソースＩＰアドレス、デスティネーションＩＰアドレス、ソースＴＣＰポート番号、デスティネーションＴＣＰポート番号の組などが考えられる。
【０１６４】
上記のようなＳＳＬセッション管理バッファ１６５は、アンシラリデータ管理マネージャ１８が、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０から受け取ったパケットインメッセージ２００を復号化し、アンシラリデータ２４０を取り除き、暗号化し、オープンフローコントローラ１６に送信する際に参照される。また、上記のようなＳＳＬセッション管理バッファ１６５は、オープンフローコントローラ１６から受け取ったパケットアウトメッセージ２５０を復号化し、アンシラリデータ２４０を付加し、暗号化し、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０に送信する際にも参照される。これにより、ＴＣＰセッションの乗せ換えが実現される。
【０１６５】
アンシラリデータ管理装置１８が中継する通信は、１つのＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０に対して、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０からオープンフローコントローラ１６の方向と、オープンフローコントローラ１６からＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０への方向の２つが存在する。そのため、ＳＳＬセッション管理バッファ１６５には、次の２つのエントリが登録される。
【０１６６】
（１）エントリ１
入力セッション識別子１６５０：Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのセッション情報
復号鍵１６５２：Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのＳＳＬ通信で使用する復号鍵
暗号鍵１６５４：オープンフローコントローラ１６とのＳＳＬ通信で使用する暗号鍵
出力セッション識別子１６５６：オープンフローコントローラ１６とのセッション情報
（２）エントリ２
入力セッション識別子１６５０：オープンフローコントローラ１６とのセッション情報
復号鍵１６５２：オープンフローコントローラ１６とのＳＳＬ通信で使用する復号鍵
暗号鍵１６５４：Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのＳＳＬ通信で使用する暗号鍵
出力セッション識別子１６５６：Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのセッション情報
【０１６７】
ここで、アンシラリデータ管理マネージャ１８とオープンフローコントローラ１６との間のセキュアチャネルを１本にまとめることが考えられる。また、アンシラリデータ管理マネージャ１８とオープンフローコントローラ１６との間のセキュアチャネルを複数本張り、２つ以上のＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのセキュアチャネルに対して、１本のセキュアチャネルを共有させるということも考えられる。
【０１６８】
これらの場合、オープンフローコントローラ１６が、どのＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０からのメッセージなのかを識別できるようにするために、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０のＩＤをパケットインメッセージ２００に付加する必要がある。また、オープンフローコントローラ１６からのパケットアウトメッセージ２５０についても、どのＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０にパケットアウトメッセージ２５０を送信するのかを識別するために、パケットアウトメッセージ２５０にＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０のＩＤを付加する必要がある。これは、パケットインメッセージ２００、あるいはパケットアウトメッセージ２５０には、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０を識別するためのＩＤを設定するフィールドが存在しないためである。
【０１６９】
復号化モジュール１６６は、パケットインメッセージ２００などのオープンフローメッセージが入力されると、オープンフローメッセージが送信されたセッションの情報を用いて、ＳＳＬセッション管理バッファ１６５を参照し、復号鍵１６５２、暗号鍵１６５４、出力セッション識別子１６５６を取得する。
【０１７０】
次に、復号化モジュール１６６は、取得した復号鍵１６５２を用いて、オープンフローメッセージを復号化し、復号化したオープンフローメッセージを、暗号鍵１６５４、出力セッション識別子１６５６の情報と共に、アンシラリデータ管理モジュール１８０−２に転送する。
【０１７１】
アンシラリデータ管理モジュール１８０−２に送られたオープンフローメッセージや暗号鍵１６５４、出力セッション識別子１６５６は、メッセージ種別判別モジュール１８６０が受け取る。
【０１７２】
メッセージ種別判別モジュール１８６０は、オープンフローメッセージのオープンフローヘッダ２１０を参照し、メッセージ種別を判別する。
【０１７３】
オープンフローメッセージがパケットインメッセージ２００である場合、メッセージ種別判別モジュール１８６０は、アンシラリデータ分離モジュール１８００に対し、オープンフローメッセージと暗号鍵１６５４と出力セッション識別子１６５６とを転送する。
【０１７４】
オープンフローメッセージがパケットアウトメッセージ２５０である場合、メッセージ種別判別モジュール１８６０は、アンシラリデータ付加モジュール１８２０に対し、オープンフローメッセージと暗号鍵１６５４と出力セッション識別子１６５６とを転送する。
【０１７５】
オープンフローメッセージがパケットインメッセージ２００でもなく、パケットアウトメッセージ２５０でもない場合、メッセージ種別判別モジュール１８６０は、暗号化モジュール１６８に対し、オープンフローメッセージと暗号鍵１６５４と出力セッション識別子１６５６とを転送する。
【０１７６】
なお、本実施形態ではアンシラリデータ２４０を持つオープンフローメッセージがパケットインメッセージ２００であり、アンシラリデータ２４０を付加する必要のあるオープンフローメッセージがパケットアウトメッセージ２５０であるものとして説明しているが、その他のオープンフローメッセージでアンシラリデータ２４０を扱う場合においても、同様の手法でアンシラリデータ２４０を保持することが可能である。
【０１７７】
例えば、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０からのオープンフローメッセージについては、アンシラリデータ２４０の有無に係らずアンシラリデータ分離モジュール１８００に転送するようにしてもよい。この場合、アンシラリデータ分離モジュール１８００は、アンシラリデータの有無をオープンフローメッセージに含まれるデータ長を示す値から求め、この値がゼロ、あるいは一定値以下である場合には、アンシラリデータが含まれないオープンフローメッセージとして判断し、アンシラリデータの分離処理を行わずにオープンフローコントローラ１６に対しオープンフローメッセージを転送する。
【０１７８】
一方、オープンフローコントローラ１６からのメッセージについてもアンシラリデータ２４０を付与することが可能である。例えば、オープンフローメッセージに付与したいアンシラリデータの識別子として、アンシラリデータ保持バッファ１８４０のエントリＩＤの値を指定することで、パケットアウトメッセージ２５０以外のオープンフローメッセージにもアンシラリデータ２４０を付与することが可能である。このとき、オープンフローメッセージによってはバッファＩＤをメッセージヘッダに指定できないものもあるため、オープンフローのベンダ独自仕様の拡張（ベンダエクステンション）として実装することが考えられる。
【０１７９】
アンシラリデータ分離モジュール１８００に転送されたオープンフローメッセージは、アンシラリデータ２４０を取り除かれる。アンシラリデータ２４０を取り除かれたオープンフローメッセージは、暗号鍵１６５４と、出力セッション識別子１６５６とともに、暗号化モジュール１６８に転送される。
【０１８０】
アンシラリデータ付加モジュール１８２０に転送されたオープンフローメッセージは、アンシラリデータ２４０を付加される。アンシラリデータ２４０が付加されたオープンフローメッセージは、暗号鍵１６５４と、出力セッション識別子１６５６とともに、暗号化モジュール１６８に転送される。
【０１８１】
暗号化モジュール１６８に転送されたオープンフローメッセージは、同時に転送された暗号鍵１６５４を用いて暗号化され、出力セッション識別子１６５６の情報に従って、適切な送信先に送信される。
【０１８２】
図１９は、本発明の第３の実施形態のＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０、アンシラリデータ管理装置１８及びオープンフローコントローラ１６の動作を示したシーケンス図である。
【０１８３】
図１９を参照すると、まず、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０は、アンシラリデータ管理装置１８に対して、ＳＳＬのコネクションを張るためのハンドシェイクを開始する（ステップＳ１２０−３−１）。このとき、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０は、ＳＳＬのコネクションを接続する相手がアンシラリデータ管理装置１８であることを意識する必要はなく、オープンフローコントローラ１６とセキュアチャネルを張る際の処理と同様である。
【０１８４】
次に、アンシラリデータ管理装置１８は、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０からＳＳＬの接続要求を受けると、オープンフローコントローラ１６に対して、ＳＳＬのコネクションを張るためのハンドシェイクを開始する（ステップＳ１８−３−１）。
【０１８５】
次に、アンシラリデータ管理装置１８と、オープンフローコントローラ１６は、ＳＳＬのコネクションを張るためのハンドシェイク処理を実行する（ステップＳ１６−３−１）。この処理の詳細は非特許文献４に詳しい。このハンドシェイク処理で、アンシラリデータ管理装置１８とオープンフローコントローラ１６との間でＳＳＬ通信に必要な暗号鍵、復号鍵が生成される。
【０１８６】
次に、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０と、アンシラリデータ管理装置１８は、ＳＳＬのコネクションを張るためのハンドシェイク処理を実行する（ステップＳ１８−３−２）。このハンドシェイク処理で、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とアンシラリデータ管理装置１８との間でＳＳＬ通信に必要な暗号鍵、復号鍵が生成される。
【０１８７】
次に、アンシラリデータ管理装置１８は、ＳＳＬセッション管理バッファ１６５に、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とのセッション情報、およびオープンフローコントローラ１６とのセッション情報とともに、ステップＳ１６−３−１と、ステップＳ１８−３−２で生成された暗号鍵、復号鍵を登録する（ステップＳ１８−３−４）。
【０１８８】
以降、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とアンシラリデータ管理装置１８との間、アンシラリデータ管理装置１８とオープンフローコントローラ１６との間でＳＳＬによる暗号化通信が行われる（ステップＳ１８−３−５、ステップＳ１６−３−３）。
【０１８９】
なお、オープンフローでは、セキュアチャネルを流れるトラフィックを暗号化せずに、オープンフロースイッチ１２とオープンフローコントローラ１６とでメッセージのやり取りを行うことも可能である。その場合、本実施の形態で触れたＳＳＬに関するモジュールの使用や処理の実行は、行わなくても良い。
【０１９０】
図２０は、ＳＳＬのセッションを張り終えた後の、復号化モジュール１６６、暗号化モジュール１６８、アンシラリデータ管理モジュール１８０−２における、オープンフローメッセージの処理を説明するためのフローチャートである。
【０１９１】
まず、復号化モジュール１６６は、オープンフローメッセージが送られてきたセッションの情報を元に、ＳＳＬセッション管理バッファ１６５を参照し、受信されたオープンフローメッセージに対応する復号鍵、暗号鍵、出力セッション識別子を取得する（ステップＦ１８００−３−１）。
【０１９２】
次に、復号化モジュール１６６は、ステップＦ１８００−３−１で取得した復号鍵を用いてオープンフローメッセージを復号化し、アンシラリデータ管理モジュール１８０−２に転送する（ステップＦ１８００−３−２）。
【０１９３】
次に、アンシラリデータ管理モジュール１８０−２が、ステップＦ１８００−３−２で復号化したオープンフローメッセージのオープンフローヘッダ２１０を参照し、メッセージ種別を判別する（ステップＦ１８００−３−３）。
【０１９４】
メッセージ種別がパケットインメッセージ２００である場合（ステップＦ１８００−３−３の「パケットインメッセージ」）、アンシラリデータ管理モジュール１８０−２は、オープンフローメッセージからアンシラリデータ２４０を取り除き、アンシラリデータ２４０をアンシラリデータ保持バッファ１８４０に格納する（ステップＦ１８００−３−４）。この処理の詳細は、本発明の第１、第２の実施形態に記載されているため、詳細な説明を省略する。
【０１９５】
一方、メッセージ種別がパケットアウトメッセージ２５０である場合（ステップＦ１８００−３−３の「パケットアウトメッセージ」）、アンシラリデータ管理モジュール１８０−２は、アンシラリデータ保持バッファ１８４０からアンシラリデータ２４０を取得し、オープンフローメッセージにアンシラリデータ２４０を付加する（ステップＦ１８００−３−５）。この処理の詳細は、本発明の第１、第２の実施形態に記載されているため、詳細な説明を省略する。
【０１９６】
また、メッセージ種別がパケットインメッセージ２００でも、パケットアウトメッセージ２５０でもない場合（ステップＦ１８００−３−３の「パケットイン／パケットアウト以外」）、アンシラリデータ管理モジュール１８０−２は、オープンフローメッセージに対して、アンシラリデータ２４０に関する処理は行わない。
【０１９７】
アンシラリデータ２４０に関する処理を完了したパケットインメッセージ２００、あるいはパケットアウトメッセージ２５０、または、パケットインメッセージ２００でもパケットアウトメッセージ２５０でもないオープンフローメッセージは、暗号化モジュール１６８に送られる。暗号化モジュール１６８は、ステップＦ１８００−３−１で取得した暗号鍵を用いて、オープンフローメッセージを暗号化し、パケット入出力モジュール１６４に転送する（ステップＦ１８００−３−６）。
【０１９８】
パケット入出力モジュール１６４は、ステップＦ１８００−３−１で取得した出力セッション識別子を用いて、ステップＦ１８００−３−６で暗号化されたオープンフローメッセージを、適切な出力先に出力する（ステップＦ１８００−３−７）。
【０１９９】
以上の処理により、アンシラリデータ２４０を失うことなく、オープンフローメッセージをＶｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０とオープンフローコントローラ１６の間でやり取りすることが可能となる。
【０２００】
以上のように、本実施形態によれば、オープンフローコントローラ１６にアンシラリデータ２４０の存在を意識させることなく、オープンフローメッセージの処理を行うことができる。その理由は、アンシラリデータ管理マネージャ１８が、パケットインメッセージ２００とパケットアウトメッセージ２５０に対して、アンシラリデータ２４０の取り外し、及び付加を行うことによって、アンシラリデータ２４０が失われないようにしているためである。
【０２０１】
また、上記した実施形態では、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０の制御を行う例を挙げて説明したが、Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ１２０の代わりに物理的なオープンフロースイッチを用いた構成にも適用することが可能である。
【０２０２】
以上、本発明の各実施形態を説明したが、本発明は、上記した各実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。例えば、上記した実施形態で用いたネットワーク構成や、スイッチの数はあくまで一例であり、その数に制約は無い。
【０２０３】
また、上記した各実施形態で用いた各装置の各部（処理手段）は、これらの装置を構成するコンピュータに、そのハードウェアを用いて、上記した各処理を実行させるコンピュータプログラムにより実現することもできる。
【０２０４】
最後に、本発明の好ましい形態を要約する。
［第１の形態］
（上記第１の視点による通信システム参照）
［第２の形態］
第１の形態の通信システムにおいて、
前記第１のネットワークスイッチと、前記第２のネットワークスイッチとが、それぞれ、
ネットワークコントローラに対し、アンシラリデータを含む制御用メッセージを送信し、かつ、
前記ネットワークコントローラから受信した制御用メッセージから、出力するパケットとアンシラリデータとをそれぞれ取り出して指定された宛先に送信するパケット処理部を備える通信システム。
［第３の形態］
第１又は第２の形態の通信システムにおいて、
さらに、
インデックス情報とともに前記アンシラリデータを保持するバッファと、
前記ネットワークスイッチから受信した制御用メッセージから取り出したアンシラリデータを、前記インデックス情報とともに前記バッファに保存し、前記インデックス情報を元に前記バッファからアンシラリデータを取得し、前記第２のネットワークスイッチに送信する制御用メッセージに付加するアンシラリデータ管理部と、
を備える通信システム。
［第４の形態］
第３の形態の通信システムにおいて、
前記アンシラリデータ管理部として、前記ネットワークコントローラと、前記ネットワークスイッチとのセッション情報を管理し、前記ネットワークコントローラと前記ネットワークスイッチのメッセージの送受信を中継するアンシラリデータ管理装置が設けられている通信システム。
［第５の形態］
第１から第４いずれか一の形態の通信システムにおいて、
前記ネットワークスイッチはオープンフロースイッチであり、前記ネットワークコントローラはオープンフローコントローラである通信システム。
［第６の形態］
第５の形態の通信システムにおいて、
前記アンシラリデータをパケットインメッセージおよびパケットアウトメッセージの最後尾にそれぞれ挿入し、パケットインメッセージに含まれるオープンフローヘッダのメッセージ長の値と、パケットインメッセージヘッダのパケットデータの長さを示す値と、パケットアウトメッセージに含まれるオープンフローヘッダのメッセージ長の値を、それぞれアンシラリデータを含めた値に変更する通信システム。
［第７の形態］
第６の形態の通信システムにおいて、
前記パケットインメッセージ及び前記パケットアウトメッセージに含まれるパケットデータのうち、前記パケットデータに含まれるイーサネットフレームのヘッダから、少なくともフレーム長を指し示す情報を含むレイヤまでのヘッダをコピーし、前記パケットデータをカプセル化し、前記パケットデータに付加したヘッダの前記フレーム長を指し示す情報を、アンシラリデータの長さを含めた値に変更する通信システム。
［第８の形態］
第６の形態の通信システムにおいて、
前記アンシラリデータの情報を用いて、前記パケットデータをカプセル化する通信システム。
［第９の形態］
第１から第４いずれか一の形態の通信システムにおいて、
前記制御用メッセージにて転送するパケットのアンシラリデータを含めたパケット長に書き換えたヘッダ情報と、オリジナルのパケット長との差によりアンシラリデータの位置情報を特定する通信システム。
［第１０の形態］
（上記第２の視点によるネットワークスイッチ参照）
［第１１の形態］
（上記第２の視点によるネットワークコントローラ参照）
［第１２の形態］
（上記第２の視点によるアンシラリデータ管理装置参照）
［第１３の形態］
（上記第３の視点によるデータ転送方法参照）
［第１４の形態］
（上記第４の視点によるプログラム参照）
なお、上記第１０〜第１４の形態は、第１の形態と同様に、第２〜第９の形態に展開することが可能である。
【０２０５】
なお、上記の特許文献および非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【産業上の利用可能性】
【０２０６】
本発明は、例えば、オープンフロープロトコルに対応したソフトウェアスイッチと、それを制御するオープンフローコントローラとを含むネットワークに適用できる。
【符号の説明】
【０２０７】
Ｘ１、Ｘ２  データセンタネットワークアーキテクチャ
３  アンシラリデータ保持システム
１０ａ、１０ｂ、Ｘ１０、Ｘ１０ａ、Ｘ１０ｂ  サーバ
１２、１２ａ、１２ｂ、Ｘ１２  オープンフロースイッチ（ネットワークスイッチ）
Ｘ１２ａ、Ｘ１２ｂ  エッジオープンフロースイッチ
１４、Ｘ１４  コアオープンフロースイッチ
１６、Ｘ１６  オープンフローコントローラ（ネットワークコントローラ）
１８  アンシラリデータ管理マネージャ
２０、Ｘ２０  ネットワーク管理用リンク
１００、Ｘ１００  仮想マシンモニタ
１１０、Ｘ１１０、Ｘ１１０ａ、Ｘ１１０ｂ  仮想マシン
１２０、１２０ａ、１２０ｂ、Ｘ１２０、Ｘ１２０ａ、Ｘ１２０ｂ  仮想スイッチ
１６４、Ｘ１６４  パケット入出力モジュール
１６５  ＳＳＬセッション管理バッファ
１６６、Ｘ１６６  復号化モジュール
１６６−２  Ｐａｃｋｅｔ＿ｉｎメッセージ復号化モジュール
１６７  Ｐａｃｋｅｔ＿ｉｎメッセージ暗号化モジュール
１６８、Ｘ１６８  暗号化モジュール
１６８−２  Ｐａｃｋｅｔ＿ｏｕｔメッセージ暗号化モジュール
１６９  Ｐａｃｋｅｔ＿ｏｕｔメッセージ復号化モジュール
１７０、Ｘ１７０  オープンフローメッセージ制御モジュール
１８０、１８０Ａ、１８０−２  アンシラリデータ管理モジュール
２００、Ｘ２００  パケットインメッセージ
２１０、Ｘ２１０  オープンフローヘッダ
２２０、Ｘ２２０  パケットインメッセージヘッダ
２２２  イーサネットフレームヘッダ
２２５、Ｘ２２５  パケットアウトメッセージヘッダ
２３０、Ｘ２３０  パケットデータ
２４０  アンシラリデータ
２５０、Ｘ２５０  パケットアウトメッセージ
１２００、Ｘ１２００  パケット入力モジュール
１２１０、Ｘ１２１０  パケット転送処理モジュール
１２２０、Ｘ１２２０  フローテーブル
１２３０、Ｘ１２３０  オープンフローメッセージ処理モジュール
１２３１  パケットデータ入出力モジュール
１２３２  非同期メッセージ処理モジュール
１２３３  コントローラメッセージ処理モジュール
１２３４  対称型メッセージ処理モジュール
１２３６  オープンフローメッセージ入出力モジュール
１２３７  パケットインメッセージ処理モジュール
１２３７．１  データフィールド分離モジュール
１２３７．２  イーサネットフレーム生成モジュール
１２３７．４  パケットインメッセージ構築モジュール
１２３８  パケットアウトメッセージ処理モジュール
１２３８．１  オープンフローメッセージフィールド分離モジュール
１２３８．２  パケットバッファ復帰モジュール
１２３８．４  パケットデータ構築モジュール
１２３９  個別メッセージ処理モジュール
１２４０、Ｘ１２４０  セキュアチャネル制御モジュール
１２５０、Ｘ１２５０  パケット出力モジュール
１６５０  入力セッション識別子
１６５２  復号鍵
１６５４  暗号鍵
１６５６  出力セッション識別子
１８００  アンシラリデータ分離モジュール
１８２０  アンシラリデータ付加モジュール
１８４０  アンシラリデータ保持バッファ
１８６０  メッセージ種別判別モジュール
【図１】
2015025845.tif 000003
【図２】
2015025845.tif 000004
【図３】
2015025845.tif 000005
【図４】
2015025845.tif 000006
【図５】
2015025845.tif 000007
【図６】
2015025845.tif 000008
【図７】
2015025845.tif 000009
【図８】
2015025845.tif 000010
【図９】
2015025845.tif 000011
【図１０】
2015025845.tif 000012
【図１１】
2015025845.tif 000013
【図１２】
2015025845.tif 000014
【図１３】
2015025845.tif 000015
【図１４】
2015025845.tif 000016
【図１５】
2015025845.tif 000017
【図１６】
2015025845.tif 000018
【図１７】
2015025845.tif 000019
【図１８】
2015025845.tif 000020
【図１９】
2015025845.tif 000021
【図２０】
2015025845.tif 000022
【図２１】
2015025845.tif 000023
【図２２】
2015025845.tif 000024
【図２３】
2015025845.tif 000025
【図２４】
2015025845.tif 000026
【図２５】
2015025845.tif 000027
【図２６】
2015025845.tif 000028
【図２７】
2015025845.tif 000029
【図２８】
2015025845.tif 000030
【図２９】
2015025845.tif 000031
【国際調査報告】
2015025845.tif 000032
2015025845.tif 000033
2015025845.tif 000034
2015025845.tif 000035