(57)【要約】【課題】複数のコントローラが一つのスイッチを適切に制御することができるネットワークシステムを提供する。【解決手段】ネットワークシステムは、複数のフローテーブル４５を記憶し、フローテーブル４５に記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段４４を含むスイッチ４３と、スイッチを制御する複数のコントローラ４１とを備える。フローテーブル４５は、コントローラ４１の識別子４６を含み、フローテーブル管理手段４４は、フローテーブル４５に含まれる識別子４６が示すコントローラ４１以外による当該フローテーブル４５の参照および更新を禁止する。【選択図】図１２
2015154149.tif 000002
【特許請求の範囲】
【請求項１】
複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチと、
前記スイッチを制御する複数のコントローラとを備え、
前記フローテーブルは、前記コントローラの識別子を含み、
前記フローテーブル管理手段は、前記フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止する
ことを特徴とするネットワークシステム。
【請求項２】
フローテーブルは、優先度を示す値を含み、
フローテーブル管理手段は、パケットを受信した際に、前記優先度順に、当該パケットが前記フローテーブルに記載された条件に適合するかどうかの確認処理を行い、適合する場合には、当該フローテーブルに記載された処理を実行する
請求項１記載のネットワークシステム。
【請求項３】
フローテーブル管理手段は、パケットを受信した際に必ず実行されるフローテーブルを含む
請求項１または請求項２記載のネットワークシステム。
【請求項４】
一のフローテーブルには、暗号化されたパケットを受信した際に、当該パケットを復号することが記載されている
請求項３記載のネットワークシステム。
【請求項５】
複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチであって、
前記フローテーブルは、前記スイッチを制御するコントローラの識別子を含み、
前記フローテーブル管理手段は、前記フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止する
ことを特徴とするスイッチ。
【請求項６】
フローテーブルは、優先度を示す値を含み、
フローテーブル管理手段は、パケットを受信した際に、前記優先度順に、当該パケットが前記フローテーブルに記載された条件に適合するかどうかの確認処理を行い、適合する場合には、当該フローテーブルに記載された処理を実行する
請求項５記載のスイッチ。
【請求項７】
複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチと、前記スイッチを制御する複数のコントローラとを備えたネットワークシステムに用いられるネットワーク管理方法であって、
前記フローテーブル管理手段が、前記フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止する
ことを特徴とするネットワーク管理方法。
【請求項８】
フローテーブル管理手段が、パケットを受信した際に、フローテーブルに含まれる優先度の順に、当該パケットが前記フローテーブルに記載された条件に適合するかどうかの確認処理を行い、適合する場合には、当該フローテーブルに記載された処理を実行する
請求項７記載のネットワーク管理方法。
【請求項９】
コントローラに制御されるスイッチに搭載されたコンピュータに、
複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理処理を実行させるためのネットワーク管理プログラムであって、
前記スイッチに、
前記フローテーブル管理処理で、前記フローテーブルに含まれるコントローラの識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止させる
ことを特徴とするネットワーク管理プログラム。
【請求項１０】
コンピュータに、
フローテーブル管理処理で、パケットを受信した際に、フローテーブルに含まれる優先度順に、当該パケットが前記フローテーブルに記載された条件に適合するかどうかの確認処理をさせ、適合する場合には、当該フローテーブルに記載された処理を実行させる
請求項９記載のネットワーク管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコントローラを含むネットワークシステム、ネットワーク管理方法およびネットワーク管理プログラム、ならびに複数のコントローラに接続されたスイッチに関する。
【背景技術】
【０００２】
近年、ＮＷスイッチやルータ、ファイアウォール、ロードバランサ等のネットワーク機器の多様化が進んでいる。管理するネットワーク機器の増加に伴いネットワーク機器の管理コストが増大することが問題視されていた。また、ネットワーク構成変更の際にネットワーク全体が正しく協調して動作するように設計を見直さなければならないためネットワーク構成変更の柔軟性が低いことが問題視されていた。このような問題を解決する技術としてＯｐｅｎＦｌｏｗと呼ばれる技術が生み出された。
【０００３】
ＯｐｅｎＦｌｏｗを用いたネットワーク（以下、ＯｐｅｎＦｌｏｗネットワークと略す）は、経路計算機能を有するＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ（以下、ＯＦＣと記載する）とパケットを転送するＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ（以下、ＯＦＳと記載する）とで構成される。ＯＦＣは、ＯＦＳが送受信するパケットの経路の制御を行う。また、ＯＦＣは、ＴＣＰ／ＩＰを用いて構築される通信経路（以下、ＯｐｅｎＦｌｏｗチャネルと略す）でＯＦＳと制御情報の送受信を行う。ＯｐｅｎＦｌｏｗにより、１つ１つのネットワーク機器に対して手動で行われていた設定を、ＯＦＣ内のソフトウェアがまとめて行うことができる。これにより、ＯｐｅｎＦｌｏｗネットワークは、管理コストや構成変更コストを削減することができる。例えば、特許文献１には、ＯｐｅｎＦｌｏｗを用いたネットワークにおける制御装置について開示されている。
【０００４】
また、近年、情報通信ネットワークを構成する計算機等の各種リソースを仮想化する、仮想化技術が普及している。また、その仮想化技術を用いて、仮想化したリソースや、そのリソースの組合せ等を、インターネット等の通信ネットワークを通じてサービスとして提供する、クラウドコンピューティングが普及している。このようなクラウドコンピューティングの普及により、ユーザが、リソースを保持せず、クラウドコンピューティングを提供する事業者（以下、クラウド事業者と記載する）から提供されるリソースをサービスとして利用するケースが存在する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／１４７０５３号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ユーザが、クラウド事業者が提供するＯＦＣを利用して、ユーザ側のＯＦＳを制御する場合、ユーザ側のＯＦＳはクラウド事業者が提供するＯＦＣによって制御される。しかし、クラウド事業者が提供するサービスの範囲内では十分でない場合、つまり、ユーザがやりたいことができない場合がある。例えば、ユーザの通信を監査サーバにミラーリングする（宛先とは異なる監視サーバにパケットのコピーを届けること）といった場合である。このような場合、ユーザは、クラウド事業者が提供するサービスをそのまま利用しつつ、ミラーリングのための制御をユーザ側のＯＦＣで行えるようにしたい。しかし、複数のＯＦＣが独立して１つのＯＦＳを制御する方式には以下のような課題がある。
【０００７】
図１３は、複数のＯＦＣを含む一般的なＯｐｅｎＦｌｏｗネットワークの第１の例を示すブロック図である。図１３において、ＯＦＣ１とＯＦＣ２は、ＯＦＳ１３に接続されている。図１３に示すネットワークにおいて、ＯＦＣ１とＯＦＣ２がそれぞれＯｐｅｎＦｌｏｗチャネル１２−１、ＯｐｅｎＦｌｏｗチャネル１２−２でＯＦＳ１３に接続された場合、ＯＦＣ１とＯＦＣ２はＯＦＳ１３の経路情報を制御することは可能である。しかし、ＯＦＣ１とＯＦＣ２とが、お互いの設定内容を打消し合ってしまい制御の整合性を保つことができず、うまくＯＦＳ１３をうまく協調動作させることができない。
【０００８】
複数のＯＦＣが独立して１つのＯＦＳを制御する方式の他の例を説明する。図１４は、複数のＯＦＣを含む一般的なＯｐｅｎＦｌｏｗネットワークの第２の例を示すブロック図である。図１４に示すＯｐｅｎＦｌｏｗネットワークは、ポートの集合が仮想的な２つのＯＦＳとみなされ、仮想ＯＦＳ毎に制御するＯＦＣが異なっている。また、ＯＦＣ１は、ｐｏｒｔ１とｐｏｒｔ２の集合である仮想ＯＦＳ１３−１とＯｐｅｎＦｌｏｗチャネル１２−１で接続し、ＯＦＳ１３−１の経路情報を制御する。また、ＯＦＣ２は、ｐｏｒｔ３とｐｏｒｔ４の集合である仮想ＯＦＳ１３−２とＯｐｅｎＦｌｏｗチャネル１２−２で接続し、ＯＦＳ１３−２の経路情報を制御する。
【０００９】
しかし、図１４に示す例では、ＯＦＣ１はＯＦＳ１３−１の経路情報を制御することはできるが、ＯｐｅｎＦｌｏｗチャネルで接続していないＯＦＳ１３−２の経路情報を制御することはできない。同様に、ＯＦＣ２はＯＦＳ１３−１の経路情報を制御することはできない。また、ＯＦＣ１とＯＦＣ２がそれぞれＯｐｅｎＦｌｏｗチャネルでＯＦＳ１３−１に接続した場合、ＯＦＣ１とＯＦＣ２はＯＦＳ１３−１の経路情報を制御することが可能であるが、経路情報毎に制御するＯＦＣを振り分けることができない。すなわち、クラウド事業者がＯＦＣ２を管理しており、ユーザがＯＦＣ１を管理している場合、クラウド事業者のＯＦＣとユーザのＯＦＣが独立してユーザのＯＦＳを制御することができない。
【００１０】
そこで、本発明は、複数のコントローラが一つのスイッチを適切に制御することができるネットワークシステム、スイッチ、ネットワーク管理方法およびネットワーク管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明によるネットワークシステムは、複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチと、スイッチを制御する複数のコントローラとを備え、フローテーブルは、コントローラの識別子を含み、フローテーブル管理手段は、フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止することを特徴とする。
【００１２】
本発明によるスイッチは、複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチであって、フローテーブルは、スイッチを制御するコントローラの識別子を含み、フローテーブル管理手段は、フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止することを特徴とする。
【００１３】
本発明によるネットワーク管理方法は、複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段を含むスイッチと、スイッチを制御する複数のコントローラとを備えたネットワークシステムに用いられるネットワーク管理方法であって、フローテーブル管理手段が、フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止することを特徴とする。
【００１４】
本発明によるネットワーク管理プログラムは、コントローラに制御されるスイッチに、複数のフローテーブルを記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理処理を実行させるネットワーク管理プログラムであって、スイッチに、フローテーブル管理処理で、フローテーブルに含まれるコントローラの識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、複数のコントローラが一つのスイッチを適切に制御することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明によるネットワークシステムの実施形態の構成を示すブロック図である。
【図２】本発明によるネットワークシステムの実施形態の動作を示すフローチャートである。
【図３】第１の実施例におけるネットワーク構成を示すブロック図である。
【図４】第１の実施例におけるネットワーク構成の一部を示すブロック図である。
【図５】ＯＦＣの構成を示すブロック図である。
【図６】ＯＦＳの構成を示すブロック図である。
【図７】ＦｌｏｗＴａｂｌｅ管理部の構成を示すブロック図である。
【図８】ＦｌｏｗＴａｂｌｅの構成を示すブロック図である。
【図９】図３に示すネットワーク構成の一部を示すブロック図である。
【図１０】暗号化されたパケットの構成例を示す説明図である。
【図１１】ヘッダおよびＡＰヘッダの構成例を示す説明図である。
【図１２】本発明によるネットワークシステムの主要部の構成を示すブロック図である。
【図１３】複数のＯＦＣを含む一般的なＯｐｅｎＦｌｏｗネットワークの第１の例を示すブロック図である。
【図１４】複数のＯＦＣを含む一般的なＯｐｅｎＦｌｏｗネットワークの第２の例を示すブロック図である。
【発明を実施するための形態】
【００１７】
図１は、ネットワークシステムの実施形態の構成を示すブロック図である。なお、本実施形態では、ＯｐｅｎＦｌｏｗ１．３を用いたネットワークを前提とするが、本発明によるネットワークシステムはそのようなネットワークに限られない。本実施形態のネットワークシステムは、複数のＯＦＣ（ＯＦＣ１およびＯＦＣ２）と、ＯＦＣ１およびＯＦＣ２にＯｐｅｎＦｌｏｗチャネルで接続したＯＦＳ１３とを備える。図１において、ＯＦＣ１は、ＯＦＳ１３とＯｐｅｎＦｌｏｗチャネル１２−１で接続されＯＦＳ１３を制御する。同様に、ＯＦＣ２はＯＦＳ１３とＯｐｅｎＦｌｏｗチャネル１２−２で接続されＯＦＳ１３を制御する。
【００１８】
ＯＦＳ１３は、ｐｏｒｔ１、ｐｏｒｔ２、ｐｏｒｔ３、ｐｏｒｔ４の４つのポートを備えている。また、ＯＦＳ１３は、ＦｌｏｗＴａｂｌｅ管理部１３２を含む。また、ＯＦＳ１３は、Ｔａｂｌｅ０、ＴａｂｌｅＸ、およびＴａｂｌｅ１からＴａｂｌｅＮまでのＦｌｏｗＴａｂｌｅを保持し、各ＦｌｏｗＴａｂｌｅに記載された内容に従って、パケットを受信した際に行う動作を決定する。
【００１９】
各ＦｌｏｗＴａｂｌｅは、経路情報を保持する。Ｔａｂｌｅに付与されている数（１〜Ｎ）は、Ｔａｂｌｅの識別子であり、優先度を示す任意の値である。各Ｔａｂｌｅは、Ｔａｂｌｅの識別子とは別に優先度を示す値を有していてもよい。ＯＦＳ１３は、優先度順に、受信したパケットの読み取りを行い、パケットがＦｌｏｗＴａｂｌｅに記載された条件に適合するかどうかの確認処理を行う。適合する場合に、ＯＦＳ１３は、そのＦｌｏｗＴａｂｌｅに記載された処理を実行する。
【００２０】
また、本実施形態では、ＯＦＳ１３は、Ｔａｂｌｅ０およびＴａｂｌｅＸを含むＴａｂｌｅ群１４２と、Ｔａｂｌｅ１からＴａｂｌｅＮを含むＴａｂｌｅ群１４３とを含む。ＯＦＳ１３は、Ｔａｂｌｅ０とＴａｂｌｅＸのＯＦＣの識別子としてＯＦＣ１の識別子をあらかじめ設定する。この設定は、ＯＦＳ１３がＯＦＣ１とＯｐｅｎＦｌｏｗチャネル１２−１で接続される前に行う。また、ＯＦＳ１３は、Ｔａｂｌｅ１からＴａｂｌｅＮまでのＦｌｏｗＴａｂｌｅにＯＦＣ２の識別子をあらかじめ設定する。この設定は、ＯＦＳ１３がＯＦＣ２とＯｐｅｎＦｌｏｗチャネル２で接続される前に行う。
【００２１】
ＯＦＳ１３およびＯＦＣ１の各処理は、例えば、特定の演算処理等を行うよう設計されたハ−ドウェア、またはプログラムに従って動作するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の情報処理装置によって実現される。また、そのプログラムは、非一時的でコンピュータが読み取り可能な記憶媒体に記憶される。
【００２２】
次に、本実施形態のネットワークシステムの動作を説明する。図２は、ネットワークシステムの実施形態の動作を示すフローチャートである。ユーザは、ＯＦＳ１３が保持するＦｌｏｗＴａｂｌｅをＯＦＣと対応づける（ステップＳ１）。ＯＦＳ１３は、具体的には、自身の保持する各ＦｌｏｗＴａｂｌｅにＯＦＣの識別子（以下、ＯＦＣ識別子と略す）を追加する。また、ＯＦＳ１３は、ＦｌｏｗＴａｂｌｅに記載されているＯＦＣ識別子が示すＯＦＣ以外のＯＦＣからの、そのＦｌｏｗＴａｂｌｅの参照、更新を禁止する。
【００２３】
ＯＦＳ１３は、ＯＦＣと対応づけたＦｌｏｗＴａｂｌｅとは別のＦｌｏｗＴａｂｌｅ（以下、ＴａｂｌｅＸと記載する）を追加する（ステップＳ２）。また、ＯＦＳ１３は、ＴａｂｌｅＸに、その他のＦｌｏｗＴａｂｌｅの処理が完了したときに必ず実行する設定を行う。また、ＯＦＳ１３は、ＴａｂｌｅＸにも、その他のＦｌｏｗＴａｂｌｅと同様にＯＦＣ識別子を追加する。また、ＯＦＳ１３は、ＴａｂｌｅＸも、記載されているＯＦＣ識別子が示すＯＦＣ以外のＯＦＣからの、ＴａｂｌｅＸの参照、更新を禁止する。
【００２４】
ＯＦＳ１３は、パケットを受信した場合、優先度が最も高いＦｌｏｗＴａｂｌｅ（Ｔａｂｌｅ０）を用いてパケットのマッチング処理（条件に合致するかどうかの確認処理）を実行する（ステップＳ３）。ＯＦＳ１３は、マッチング処理として、パケットがＴａｂｌｅ０に記載された条件に合致した場合（ステップＳ４のＹＥＳ）、Ｔａｂｌｅ０に記載された処理を実行する（ステップＳ５）。
【００２５】
ＯＦＳ１３は、パケットがＴａｂｌｅ０に記載された条件に合致しない場合、Ｔａｂｌｅ０の次に優先度の高いＦｌｏｗＴａｂｌｅ（１回目は、Ｔａｂｌｅ１）のマッチング処理を実行する（ステップＳ６）。パケットがＴａｂｌｅに記載された条件に合致した場合（ステップＳ７のＹＥＳ）、ＯＦＳ１３は、そのＴａｂｌｅに記載された処理を実行する（ステップＳ８）。パケットがＴａｂｌｅに記載された条件に合致しない場合（ステップＳ７のＮＯ）、すべてのＴａｂｌｅ（Ｔａｂｌｅ１〜ＴａｂｌｅＮ）のマッチングが終了していなければ（ステップＳ９のＮＯ）、ステップＳ６に移行し、優先度の高い順にＦｌｏｗＴａｂｌｅのマッチング処理、実行を繰り返す（ステップＳ６〜ステップＳ８）。ＯＦＣの設定内容によっては、複数のＴａｂｌｅ処理をすることなく、Ｔａｂｌｅ１で処理が完了する場合がある。
【００２６】
Ｔａｂｌｅ１〜ＴａｂｌｅＮのマッチングが終了したら（ステップＳ９のＹＥＳ）、ＯＦＳ１３は、ＴａｂｌｅＸでパケットのマッチング処理を実行する（ステップＳ１０）。ＯＦＳ１３は、パケットがＴａｂｌｅＸに記載された条件に合致した場合（ステップＳ１１のＹＥＳ）、ＴａｂｌｅＸに記載された処理を実行する（ステップＳ１２）。ＯＦＳ１３は、パケットがＴａｂｌｅＸに記載された条件に合致しなかった場合（ステップＳ１１のＮＯ）、何も行わない。
【００２７】
本実施形態のネットワークシステムは、ＯＦＣ識別子を用いてＦｌｏｗＴａｂｌｅ毎にＯＦＣを対応づける、ＦｌｏｗＴａｂｌｅが優先度の高い順に処理される。また、ＯＦＳが、ＯＦＣの識別子により対応づけられたＯＦＣ以外からの、ＦｌｏｗＴａｂｌｅの参照、更新を禁止する。これにより、１つのＯＦＳをポート単位で分割することなく、複数のＯＦＣが独立してＯＦＳを制御することが可能となる。また、例えば、ＯＦＣ１とＯＦＣ２とが、お互いの設定内容を打消し合ってしまうことがない。
【００２８】
本実施形態のネットワークシステムの具体的な動作例を説明する。以下に示す例では、ＯＦＣ２は、ｐｏｒｔ１から入ってきたパケットをｐｏｒｔ４から出力するような経路をＯＦＳ１３に設定する。また、ＯＦＣ１は、ｐｏｒｔ１から入ってきたパケットをｐｏｒｔ２へミラーリングするような経路をＯＦＳ１３に設定する。
【００２９】
ｐｏｒｔ１からパケットを受信したＯＦＳ１３は、まず、ＯＦＣ１が制御するＴａｂｌｅ０でパケットを処理する。ＯＦＣ１はミラーリングするパケットのマッチ情報をＴａｂｌｅ０に登録する。このとき、ＯＦＳ１３はＴａｂｌｅ０で処理されたパケットを、コピーしｐｏｒｔ２へ出力する。
【００３０】
パケットがＴａｂｌｅ０で処理された後、ＯＦＳ１３は、ＯＦＣ２が制御するＴａｂｌｅ１でパケットを処理する。ＯＦＣ２は、経路を制御するパケットのマッチ情報をＴａｂｌｅ１にあらかじめ登録しておく。その際、複数のＦｌｏｗＴａｂｌｅで処理する必要がある場合、ＯＦＳ１３はＴａｂｌｅ１からＴａｂｌｅＮのいずれかのＴａｂｌｅでパケットを処理する。
【００３１】
ＯＦＣ２が制御するＦｌｏｗＴａｂｌｅでパケットの処理が完了するとパケットはｐｏｒｔ４から出力されるが、ＯＦＳ１３はパケットをｐｏｒｔ４から出力する前に、パケットをＴａｂｌｅＸで処理する。ＯＦＳに入力されるパケットは必ずＴａｂｌｅＸで処理される。そのため、ＯＦＣ１はＯＦＳ１３でパケットが破棄される際に、または、ＯＦＳ１３でパケットを任意のポートから出力する際に、パケットに対して処理する内容がある場合にＴａｂｌｅＸに処理の内容を登録する。前述の例であるパケットのミラーリングはＴａｂｌｅ０での処理で完結するため、ＯＦＣ１は、ＴａｂｌｅＸに何も処理内容を登録していない。よって、ＯＦＳ１３は、ＴａｂｌｅＮでパケットを処理した後、ＴａｂｌｅＸで何も行わない為、ｐｏｒｔ４からパケットを出力する。
【００３２】
（実施例１）
図３は、第１の実施例（実施例１）におけるネットワーク構成を示すブロック図である。本実施例では、図３に示すようなネットワーク構成を例として用いる。図３に示すネットワークは、パケットの経路を制御する複数のＯＦＣ１〜ＯＦＣＮとパケットを転送する複数のＯＦＳ（ＯＦＳ１３〜ＯＦＳＭ、ＯＦＳ１３’〜ＯＦＳＭ’）とを備える。また、各ＯＦＳには、ホスト（ホスト２１〜ホストＬＬ）が接続されている。
【００３３】
図４は、第１の実施例におけるネットワーク構成の一部を示すブロック図である。本実施例におけるオープンフローネットワークは、ＯＦＣ１と、ＯＦＳ１３とを備える。ＯＦＣ１とＯＦＳ１３は、ＯｐｅｎＦｌｏｗチャネル１２で接続され、ＯｐｅｎＦｌｏｗチャネル１２を通して制御用の通信を行う。
【００３４】
図５は、ＯＦＣ１の構成を示すブロック図である。ＯＦＣ１は、サーバ等により実現される。ＯＦＣ１は、経路を計算する経路計算部１１１と、ＯＦＳ１３を管理するＯＦＳ制御部１１２と、ＯＦＳのＯｐｅｎＦｌｏｗチャネルの経路を管理するＯｐｅｎＦｌｏｗチャネル管理部１１３とを含む。ＯＦＣ１は、複数のＯＦＳ１３を管理することが可能であり、ＯＦＳ１３と専用線もしくは通常のネットワークで物理的に接続されている。また、ＯＦＣ１は、ＯＦＳ１３とＯｐｅｎＦｌｏｗチャネル１２によって論理的に関係付けられている。
【００３５】
経路計算部１１１、ＯＦＳ制御部１１２およびＯｐｅｎＦｌｏｗチャネル管理部１１３は、例えば、特定の演算処理等を行うよう設計されたハ−ドウェア、またはプログラムに従って動作するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の情報処理装置によって実現される。また、そのプログラムは、非一時的でコンピュータが読み取り可能な記憶媒体に記憶される。
【００３６】
図６は、ＯＦＳ１３の構成を示すブロック図である。ＯＦＳ１３は、パケットの送受信、および解析を行うパケット処理部１３１と、パケットの経路情報の集合であるＦｌｏｗＴａｂｌｅ管理部１３２と、自身がＯＦＣ１と通信するためのポートを管理するＯｐｅｎＦｌｏｗチャネル管理部１３３とを含む。
【００３７】
パケット処理部１３１は、パケットの解析を行い、ＦｌｏｗＴａｂｌｅ管理部１３２に記憶されているＦｌｏｗＴａｂｌｅの条件に合致する場合、ＦｌｏｗＴａｂｌｅの内容に従って、パケットの送受信等の処理を行う。
【００３８】
ＦｌｏｗＴａｂｌｅ管理部１３２は、パケットの経路情報を含むＦｌｏｗＴａｂｌｅの集合を記憶し、ＦｌｏｗＴａｂｌｅの読み取りを行う。ＦｌｏｗＴａｂｌｅに含まれるＯＦＣ識別子が示すＯＦＣ以外による当該ＦｌｏｗＴａｂｌｅの参照および更新を禁止する。
【００３９】
ＦｌｏｗＴａｂｌｅ管理部１３２は、ＦｌｏｗＴａｂｌｅに記載された優先度順に読み取りを行うが、パケット処理部１３１は、ＦｌｏｗＴａｂｌｅに記載された優先度順と異なる順序で処理を行う場合がある。
【００４０】
パケット処理部１３１、ＦｌｏｗＴａｂｌｅ管理部１３２およびＯｐｅｎＦｌｏｗチャネル管理部１３３は、例えば、特定の演算処理等を行うよう設計されたハ−ドウェア、またはプログラムに従って動作するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の情報処理装置によって実現される。また、そのプログラムは、非一時的でコンピュータが読み取り可能な記憶媒体に記憶される。また、ＦｌｏｗＴａｂｌｅ１４１は、ＯＦＳ１３内の記憶領域に記憶される。
【００４１】
図７は、ＦｌｏｗＴａｂｌｅ管理部１３２の構成を示すブロック図である。ＦｌｏｗＴａｂｌｅ管理部１３２は、図７に示すように、複数のＦｌｏｗＴａｂｌｅ１４１を保持し、管理する。
【００４２】
図８は、ＦｌｏｗＴａｂｌｅ１４１の構成を示すブロック図である。ＦｌｏｗＴａｂｌｅ１４１は、各パケットに対応する経路情報が記載されたフローエントリ２０１を含む。フローエントリ２０１は、いくつあってもよく、一つであってもよい。フローエントリの数はいくつあってもよい。また、ＦｌｏｗＴａｂｌｅ１４１は、該当ＦｌｏｗＴａｂｌｅ１４１を参照、更新することのできるＯＦＣを示すＯＦＣ識別子２０２を含む。また、ＦｌｏｗＴａｂｌｅ１４１は、ＦｌｏｗＴａｂｌｅ管理部１３２で読み取りがされる順番を示すＴａｂｌｅ識別子２０３を含む。
【００４３】
Ｔａｂｌｅ識別子２０３は、あらかじめ設定される値であり、変更できない値である。Ｔａｂｌｅ識別子２０３は、０から順番に１ずつ加算される値である。ＦｌｏｗＴａｂｌｅ管理部１３２は、Ｔａｂｌｅ識別子２０３の値が小さい順につまり０から順番に全てのＦｌｏｗＴａｂｌｅ１４１のＴａｂｌｅ処理が完了するまで読み取りを行う。Ｔａｂｌｅ処理は、ＦｌｏｗＴａｂｌｅ１４１内のフローエントリ２０１にマッチし、かつ、マッチした場合のアクションが「以降のテ−ブル処理を継続する」ことでない場合に完了する。なお、異なるＦｌｏｗＴａｂｌｅ１４１が、同じＴａｂｌｅ識別子２０３の値を持つことはない。
【００４４】
また、特別なＴａｂｌｅ識別子２０３の値として、Ｘが設定される。異なるＦｌｏｗＴａｂｌｅ１４１に、Ｔａｂｌｅ識別子２０３としてＸが設定されることはない。Ｔａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１は、その他のＦｌｏｗＴａｂｌｅ１４１が処理された後に、必ず読み取られる。そのため、Ｔａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１、つまり、最初に処理されるＦｌｏｗＴａｂｌｅ１４１においてパケットがマッチしない場合でもＴａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１は、読み取られ、処理される。
【００４５】
Ｔａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１の処理は、例えば、パケットの暗号化処理、復号処理である。また、Ｔａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１の処理は、クラウド事業者が管理するＯＦＣのパケット処理の統計情報である。
【００４６】
図９は、図３に示すネットワーク構成の一部を示すブロック図である。ＯＦＣ２の構成は、ＯＦＣ１と同様である。ホスト２１、ホスト２２、およびホスト３１は、例えばＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）またはサーバ等の情報端末により実現される。ＯＦＣ１またはＯＦＣ２とＯＦＳ１３またはＯＦＳ１４との間、ＯＦＳ１３とＯＦＳ１４との間、ホスト２１、ホスト２２とＯＦＳ１３間、ホスト３１とＯＦＳ１４間はＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等で接続されている。ホスト２１とホスト２２は、それぞれ別のポートでＯＦＳ１３に接続している。
【００４７】
次に、本実施例の動作を説明する。以下に示す本実施例の動作は、ホスト２１とホスト３１間で通信を行い、その通信内容をミラーリングしたものをホスト２２が監査する場合の動作である。
【００４８】
図９に示す例では、ユーザは、ＯＦＣ１、ＯＦＳ１３、ＯＦＳ１４、ホスト２１、ホスト２２、ホスト３１を物理的に管理している。また、クラウド事業者は、ＯＦＣ２を物理的に管理している。クラウド事業者は、ホスト２１とホスト３１との間で通信を行うための経路制御を、ユーザから依頼されている。また、クラウド事業者は、ＯＦＳ１３、ＯＦＳ１４の物理的な接続状態等の経路制御に必要な情報をユーザから入手している。ユーザは、ホスト２１とホスト３１との間の通信を監査するためのホスト２２を管理しており、ホスト２２とその他のホストとの間の通信を行うための経路制御を、クラウド事業者には依頼していない。ＯＦＣ１は、ＯＦＳ１３およびＯＦＳ１４の経路情報を制御する。同様にＯＦＣ２は、ＯＦＳ１３およびＯＦＳ１４の経路情報を制御する。
【００４９】
ホスト２１とホスト３１間で通信を行う前に、ユーザは、ＯＦＳ１３のＦｌｏｗＴａｂｌｅ管理部１３２の内のＴａｂｌｅ識別子２０３の値が０とＸであるＦｌｏｗＴａｂｌｅ１４１のＯＦＣ識別子２０２に、ＯＦＣ１を示す識別子を設定する。ＯＦＣ１を示す識別子の値は、ＯＦＣ１とＯＦＣ２とを識別可能な値であれば、どのような値でもよく、例えば、ＯＦＣ１のＩＰアドレスでもよい。次に、ユーザは、Ｔａｂｌｅ識別子２０３の値が０、Ｘ以外のＦｌｏｗＴａｂｌｅのＯＦＣ識別子２０２にＯＦＣ２を示す識別子を設定する。ＯＦＣ２を示す識別子の値は、同様に、ＯＦＣ１とＯＦＣ２とを識別可能な値であれば、どのような値でもよい。
【００５０】
次に、ホスト２１とホスト３１との間で通信が行われる場合の動作を説明する。なお、ＯｐｅｎＦｌｏｗ１．３ではＯＦＳ１３が未知のパケットを受信した場合、つまり、受信したパケットがＯＦＳ１３またはＯＦＳ１４の保持するＦｌｏｗＴａｂｌｅ１４１中の全てのフローエントリの条件とマッチしなかった場合、デフォルトの動作として該当パケットは破棄する動作をする。しかし、本実施例では、ＯＦＳ１３が未知のパケットを受信した場合、ＯｐｅｎＦｌｏｗ１．３よりも以前の動作、つまり、該当パケットをＯＦＣ１およびＯＦＣ２へ転送する動作をするようにユーザがＯＦＳ１３またはＯＦＳ１４を設定しておくものとする。ＯＦＳ１３またはＯＦＳ１４の動作をＯｐｅｎ  Ｆｌｏｗ１．３のデフォルトの動作とする場合は、ＯＦＣ１が設定するＦｌｏｗＴａｂｌｅ１４１がホスト間で通信を行う前にその動作をユーザが設定しておけばよい。
【００５１】
ホスト２１が、あて先がホスト３１であるパケットを送信すると、ＯＦＳ１３は、ホスト２１と接続しているポートからそのパケットを受信する。ＯＦＳ１３は、受信したパケットを物理ポートからパケット処理部１３１へ移し、ＦｌｏｗＴａｂｌｅ管理部１３２で処理する。ＯＦＳ１３は、ＦｌｏｗＴａｂｌｅ管理部１３２のＦｌｏｗＴａｂｌｅ１４１の内、Ｔａｂｌｅ識別子２０３の値が０のＦｌｏｗＴａｂｌｅ１４１で受信したパケットと条件がマッチするフローエントリ２０１がないかどうか検索を行う。このとき、Ｔａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１には経路情報は存在していないため、ＯＦＳ１３は、ＯＦＣ１へ受信パケットを通知する。
【００５２】
ＯＦＣ１は、ＯＦＳ１３から通知されたパケットを、ＯｐｅｎＦｌｏｗチャネル管理部１１３で受信する。経路計算部１１１は、受信したパケットをミラーリングするための経路情報を計算する。ＯＦＳ制御部１１２は、計算した経路情報をＯＦＳ１３に設定する。このとき、ＯＦＣ１は、Ｔａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１にフローエントリ２０１を追加する。追加されたフローエントリ２０１の内容は、ホスト２１から受信したパケットをホスト２２に接続されている物理ポートから出力し転送するアクションと、Ｔａｂｌｅ識別子２０３の値が１となるＦｌｏｗＴａｂｌｅ１４１へ処理を継続するアクションである。
【００５３】
次に、ＯＦＣ１は、ＯＦＳ１４のＴａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１にフローエントリ２０１を追加する。追加されるフローエントリ２０１のアクションはＴａｂｌｅ識別子２０３の値が１のＦｌｏｗＴａｂｌｅ１４１のマッチング処理へと継続させるアクションである。ＯＦＣ１は、ＯＦＳ１３とＯＦＳ１４への設定が完了すると、受信したパケットをＯＦＳ１３へ通知する。
【００５４】
ＯＦＣ１から通知を受けたＯＦＳ１３は、Ｔａｂｌｅ識別子２０３の値が１のＦｌｏｗＴａｂｌｅ１４１で受信したパケットと条件がマッチするフローエントリ２０１がないか検索を行う。この検索は、ＯＦＣ１からの指示によるものである。このとき、Ｔａｂｌｅ識別子２０３の値が１のＦｌｏｗＴａｂｌｅ１４１には経路情報は存在していないため、ＯＦＳ１３はＯＦＣ２へ受信パケットを通知する。ＯＦＣ２はＯＦＳ１３から通知されたパケットを、ＯｐｅｎＦｌｏｗチャネル管理部１１３を通して受信する。
【００５５】
ＯＦＣ２は、通知として受けたパケットをホスト２１からホスト３１へ転送するための経路情報を、経路計算部１１１で計算する。ＯＦＳ制御部１１２は、その経路情報をＯＦＳ１３へ設定する。ＯＦＳ制御部１１２は、具体的には、ＯＦＳ１３のＴａｂｌｅ識別子２０３の値が０とＸ以外のＦｌｏｗＴａｂｌｅ１４１にフローエントリ２０１を追加する。ＯＦＳ制御部１１２は、追加したフローエントリ２０１にホスト３１から受信するパケットをＯＦＳ１４に接続されている物理ポートから出力するアクションを追加する。
【００５６】
次に、ＯＦＣ２は、ＯＦＳ１４のＴａｂｌｅ識別子２０３の値が０とＸ以外のＦｌｏｗＴａｂｌｅ１４１にフローエントリ２０１を追加する。追加されるフローエントリ２０１の内容は、ＯＦＳ１３に接続されているポートから受信したパケットをホスト３１に接続されているポートから出力するアクションである。ＯＦＣ２は、ＯＦＳ１３とＯＦＳ１４への設定が完了すると、受信したパケットをＯＦＳ１３へ通知する。
【００５７】
ＯＦＣ１とＯＦＣ２によるフローエントリの追加によって、ホスト２１からホスト３１へパケットに対応する経路が設定されるため、以後のパケットは追加されたフローエントリ２０１の内容に従って処理される。具体的には以下のように処理される。
【００５８】
ＯＦＳ１３は、ホスト２１からあて先がホスト３１であるパケットを受信すると、Ｔａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１中のフローエントリ２０１の内容に従って、受信したパケットをホスト２２と接続している物理ポートから出力する。ただし、ＯＦＳ１３は、Ｔａｂｌｅ識別子２０３の値が０、Ｘ以外のＦｌｏｗＴａｂｌｅ１４１でマッチング処理を継続するために、パケットのコピーを行った後に出力する。
【００５９】
次に、ＯＦＳ１３は、Ｔａｂｌｅ識別子２０３の値が１であるＦｌｏｗＴａｂｌｅ１４１中のフローエントリ２０１のアクションの内容に従って、コピーしたパケットをＯＦＳ１４に接続されている物理ポートから出力する。ただし、ＯＦＳ１３は、物理ポートから出力するアクションを実行する前にＴａｂｌｅ識別子２０３の値がＸとなるＦｌｏｗＴａｂｌｅ１４１でマッチング処理を実行する。本実施例の場合、Ｔａｂｌｅ識別子２０３の値がＸとなるＦｌｏｗＴａｂｌｅ１４１にフローエントリが存在しないため、ＯＦＳ１３はパケットをそのまま物理ポートから出力する。
【００６０】
ＯＦＳ１４は、ＯＦＳ１３からパケットを受信すると、パケットをＴａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１でマッチング処理をする。条件にマッチしたフローエントリ２０１に従って、ＯＦＳ１４は、Ｔａｂｌｅ識別子２０３の値が１であるＦｌｏｗＴａｂｌｅ１４１でマッチング処理を継続する。ＯＦＳ１４は、Ｔａｂｌｅ識別子２０３の値が１であるＦｌｏｗＴａｂｌｅ１４１中のフローエントリ２０１のアクションの内容に従って、パケットをホスト３１に接続されている物理ポートから出力する。この際、ＯＦＳ１４は、Ｔａｂｌｅ識別子２０１の値がＸであるＦｌｏｗＴａｂｌｅ１４１のマッチング処理の後にパケットを出力する。本実施例の場合、Ｔａｂｌｅ識別子２０１の値がＸとなるＦｌｏｗＴａｂｌｅ１４１にフローエントリ２０１が存在しないため、ＯＦＳ１４はパケットをそのまま物理ポートから出力する。
【００６１】
本実施形態のネットワークシステムは、ＯＦＳ１３が記憶するＦｌｏｗＴａｂｌｅ２０１に制御可能なＯＦＣ１を対応づけて、ＯＦＳ１３が対応づけられたＯＦＣ１以外によるＦｌｏｗＴａｂｌｅ２０１の参照および更新を禁止する。そのため、ＯＦＣ１が、経路情報毎に適切にＯＦＳ１３の制御をすることができる。また、１台のＯＦＳ１３に対して、ポリシーや要求の異なる複数ＯＦＣ１（運用者）が制御要求をマージした協調運用をすることができる。
【００６２】
本実施形態のネットワークシステムは、例えば、クラウド事業者のＯＦＣの制御可能なＦｌｏｗＴａｂｌｅよりも優先度の高い、つまり、先に処理されるＦｌｏｗＴａｂｌｅにユーザのＯＦＣの制御権を付与する。これにより、ユーザは、クラウド事業者の経路制御に影響を与えることなく、通信のミラーリングおよび監査等の処理を行うことができる。
【００６３】
（実施例２）
本実施例では、ＯＦＳ１３が、Ｔａｂｌｅ識別子２０１の値が０であるＦｌｏｗＴａｂｌｅ１４１に基づいてパケットの暗号化を行い、Ｔａｂｌｅ識別子２０１の値がＸであるＦｌｏｗＴａｂｌｅ１４１に基づいてパケットの復号を行う例を説明する。
【００６４】
具体的には、ユーザが、ＯＦＳ１３に暗号化、または、復号を行うポートをあらかじめ静的に設定しておく。ＯＦＳ１３は、該当ポートからパケットを受信したときにＴａｂｌｅ識別子２０３の値が０のＦｌｏｗＴａｂｌｅ１４１に基づいてパケットを暗号化する。また、ＯＦＳ１３は該当ポートからパケットを送信するときにＴａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１に基づいてパケットを復号する。
【００６５】
本実施形態のオープンネットワークシステムは、パケットの暗号化および復号をする機能を、ＯＦＳ１３に暗号化および復号の機能を追加する方法により実現できる。また、本実施形態のオープンネットワークシステムは、暗号化、復号するサーバを経由するような経路をＴａｂｌｅ識別子２０３の値が０またはＸとなるＦｌｏｗＴａｂｌｅ１４１に設定することよって実現することもできる。
【００６６】
ここで、本実施例で暗号化に使用する鍵は、２種類用意される。１つはパケット暗号化用の鍵（第１の鍵）で、もう１つは第１の鍵を暗号化するための鍵（第２の鍵）である。第１の鍵は、初期値として静的にＯＦＳ１３に設定される。または、第１の鍵は、動的に生成される鍵で、暗号化したパケットと合わせてＯＦＳ間で送受信される。第２の鍵は、静的にＯＦＳ１３に設定される。ＯＦＳ１３は、パケットを暗号化する際に、第１の鍵の鍵でパケットを暗号化した後、第２の鍵で第１の鍵を暗号化する。ＯＦＳ１３は暗号化されたパケットと暗号された鍵を合わせて、ＯＦＣ１によって設定される経路に従って転送する。
【００６７】
図１０は、暗号化されたパケットの構成例を示す説明図である。ＯＦＳ１３は、ホスト間でやり取りされるＩＰパケットのデ−タ部を暗号化し、ＩＰｉｎＩＰトンネリングによりカプセル化する。オリジナルＥｔｈｅｒヘッダは、ＯＦＳ１３が受信するパケットのＥｔｈｅｒヘッダと等しいヘッダである。コピーＩＰヘッダは、ＯＦＳ１３が受信するパケットのＩＰヘッダのプロトコル番号を９４、つまりＩＰｉｎＩＰに変更したヘッダである。
【００６８】
次のコピーＩＰヘッダは、ＯＦＳ１３が受信するパケットのＩＰヘッダのプロトコル番号を１７、つまりＵＤＰに変更したヘッダである。次のＵＤＰヘッダは、送信元ポート番号と送信先ポート番号は予約番号を入れたヘッダである。ユーザは、このパケットが暗号化されていることをクラウド事業者へ通知するため、事前に予約した番号をこの予約番号に入れる。
【００６９】
図１１は、ヘッダおよびＡＰヘッダの構成例を示す説明図である。ＯＦＳ１３が受信するパケットでは、ＩＰパケットが暗号化され、ＡＰヘッダの後ろに付与される。
【００７０】
また、パケットは、ＩＰｉｎＩＰトンネリングでＥｔｈｅｒフレ−ムがカプセル化されるため、１５００ｂｙｔｅを超えてしまう可能性があるが、ＯＦＳ１３が分割、再構築の機能を備えることにより送信する際の容量を減少することができる。この分割、再構築の機能は、一般的なＩＰプロトコルの分割、再構築処理と同様の機能である。
【００７１】
図１１に示すｋｅｙｌｅｎは、後で説明する「ｖａｒｉａｂｌｅ  ｋｅｙ」の領域サイズである。「Ｒｅｓｅｒｖｅ  ｆｏｒ  ｆｕｔｕｒｅ  ｕｓｅ」は、今後のための予約フィ−ルドである。「ｐａｃｋｅｔ  ｓｅｑｕｅｎｃｅ  ｎｕｍｂｅｒ」は、受信パケット毎のシーケンス番号であり、単調増加する。ＯＦＳ１３は、受信ポート単位で「ｐａｃｋｅｔ  ｓｅｑｕｅｎｃｅ  ｎｕｍｂｅｒ」を保持する。パケットが分割された場合、分割された両パケットのシ−ケンス番号は等しくなる。
【００７２】
「ｍｏｒｅ  ｆｒａｇｍｅｎｔ  ｆｌａｇ」は、最後のパケットかどうかを示すフィールドであり、ＩＰパケットのＭＦビットに相当する。「ｍｏｒｅ  ｆｒａｇｍｅｎｔ  ｆｌａｇ」には、分割されない場合は０がセットされる。分割される場合には、先に送信されるパケットの「ｍｏｒｅ  ｆｒａｇｍｅｎｔ  ｆｌａｇ」に１がセットされ、後のパケットの「ｍｏｒｅ  ｆｒａｇｍｅｎｔ  ｆｌａｇ」には０がセットされる。「ｆｌａｇｍｅｎｔ  ｏｆｆｓｅｔ」は、ＩＰパケットのフラグメントオフセットに相当し、分割された場合のデ−タ（暗号化済みＩＰパケット）の位置を示す。「ｖａｒｉａｂｌｅ  ｋｅｙ」は、デ−タ部、つまりＯＦＳ１３が受信したＩＰパケットを暗号化および復号するための鍵である。先に説明した通り、鍵自体も別の鍵で暗号化されている。
【００７３】
図９に示す構成例を用いて、ホスト２１とホスト３１の間の通信内容を暗号化し、復号する処理を説明する。本実施例において、ＯＦＣ２はホスト２１とホスト３１との間の経路情報をＯＦＳ１３とＯＦＳ１４に設定しているものとする。ＯＦＣ１は、ＯＦＳ１３のＴａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１に、暗号化のためのフローエントリ２０１を追加しているものとする。追加するフローエントリ２０１は、具体的には、ＯＦＳ１３がホスト２１を接続している物理ポートから受信したパケットを暗号化するアクションを実行する処理を含んでいる。このとき暗号化は別サーバを経由して暗号化されるものとする。
【００７４】
また、ＯＦＣ１は、ＯＦＳ１４のＴａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１に復号するためのフローエントリ２０１を追加しているものとする。追加されるフローエントリ２０１は、ＯＦＳ１３がホスト３１と接続している物理ポートへパケットを送信されるときにパケットを復号するアクションを実行する処理を含んでいる。この際、復号は別サーバを経由して暗号化されるものとする。
【００７５】
ＯＦＳ１３は、ホスト２１からパケットを受信するとき、Ｔａｂｌｅ識別子２０３の値が０であるＦｌｏｗＴａｂｌｅ１４１に基づいて暗号化する。暗号化処理の流れは次の通りである。ＯＦＳ１３は、受信したＩＰヘッダをコピーする。次に、ＯＦＳ１３は、パケット暗号化用の鍵を使用して、受信したパケットのＩＰパケットを暗号化する。パケット暗号化用の鍵は、ＯＦＳ１３に初期値として静的に設定された鍵、または、動的に生成される鍵である。
【００７６】
次に、ＯＦＳ１３は、パケットをカプセル化するため、図１０に示すような構成でパケットを構築する。その際、パケットのサイズが１５００ｂｙｔｅを超えた場合は分割を行う。パケット暗号化用の鍵は、鍵暗号化用の鍵を使用して暗号化される。鍵暗号化用の鍵は、ＯＦＳ１３に静的に設定された鍵である。パケット暗号化用の鍵は自身が暗号化された後、ＡＰヘッダに格納される。
【００７７】
ＯＦＳ１３は、暗号化されたパケットをＴａｂｌｅ識別子２０３の値が０、Ｘ以外のＦｌｏｗＴａｂｌｅ１４１の内容に従ってＯＦＳ１４へ転送する。次に、ＯＦＳ１４は、Ｔａｂｌｅ識別子２０３の値がＸであるＦｌｏｗＴａｂｌｅ１４１でパケットの復号を行う。次に、ＯＦＳ１４は、受信したパケットをＴａｂｌｅ識別子２０３の値が０、Ｘ以外のＦｌｏｗＴａｂｌｅ１４１の内容に従ってホスト３１に転送する。
【００７８】
パケットの復号の流れを具体的に説明する。ＯＦＳ１４は、Ｔａｂｌｅ識別子２０３の値がＸ以外のＦｌｏｗＴａｂｌｅ１４１を読み取り、処理される内容を監視する。そして、ＯＦＳ１４は、ポートへパケットを出力するアクションが実行されることを認識すると、パケットを出力する前にパケットを復号する。ＯＦＳ１４は、パケットのＡＰヘッダ中の鍵を、鍵暗号化用の鍵を使用して復号する。ＯＦＳ１４は、復号されたＡＰヘッダ中の鍵を使用して、暗号化されたＩＰパケットを復号する。ＯＦＳ１４は、ＯＦＳ１３から受信したパケットのＥｔｈｅｒｎｅｔ（登録商標）ヘッダに復号したＩＰパケットを付けて、ホスト３１へ転送する。
【００７９】
本実施例のネットワークシステムは、暗号化および復号するＦｌｏｗＴａｂｌｅが経路制御を行うクラウド事業者のＯＦＣによる参照および更新が行われないため、クラウド事業者に対してユーザの通信を秘匿することができる。
【００８０】
図１２は、本発明によるネットワークシステムの主要部の構成を示すブロック図である。ネットワークシステムは、主要な構成要素として、複数のフローテーブル４５を記憶し、フローテーブル４５に記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段４４を含むスイッチ４３と、スイッチを制御する複数のコントローラ４１とを備える。フローテーブル４５は、コントローラ４１の識別子４６を含み、フローテーブル管理手段４４は、フローテーブル４５に含まれる識別子４６が示すコントローラ４１以外による当該フローテーブル４５の参照および更新を禁止する。
【００８１】
また、上記の各実施形態には、下記の（１）〜（４）に示すネットワークシステムも開示されている。
【００８２】
（１）複数のフローテーブル（例えば、ＦｌｏｗＴａｂｌｅ１４１）を記憶し、当該フローテーブルに記載された内容に従って、パケットを受信した際に行う動作を決定するフローテーブル管理手段（例えば、ＦｌｏｗＴａｂｌｅ管理部１３２）を含むスイッチ（例えば、ＯＦＳ１３）と、スイッチを制御する複数のコントローラ（例えば、ＯＦＣ１、ＯＦＣ２）とを備え、フローテーブルは、コントローラの識別子（例えば、ＯＦＣ識別子２０２）を含み、フローテーブル管理手段は、フローテーブルに含まれる識別子が示すコントローラ以外による当該フローテーブルの参照および更新を禁止するネットワークシステム。
【００８３】
（２）ネットワークシステムは、フローテーブルが、優先度を示す値（例えば、Ｔａｂｌｅ識別子２０３）を含み、フローテーブル管理手段が、パケットを受信した際に、優先度順に、当該パケットがフローテーブルに記載された条件に適合するかどうかの確認処理を行い、適合する場合には、当該フローテーブルに記載された処理を実行するように構成されていてもよい。このようなネットワークシステムによれば、例えば、ユーザが、クラウド事業者の経路制御に影響を与えることなく、通信のミラーリングおよび監査等の処理を優先的に行うことができる。
【００８４】
（３）ネットワークシステムは、フローテーブル管理手段が、パケットを受信した際に必ず実行されるフローテーブル（例えば、ＴａｂｌｅＸ）を含むように構成されていてもよい。
【００８５】
（４）ネットワークシステムは、フローテーブル（例えば、例えば、ＴａｂｌｅＸ）には、暗号化されたパケットを受信した際に、当該パケットを復号することが記載されていてもよい。このようなネットワークシステムによれば、復号するＦｌｏｗＴａｂｌｅが経路制御を行うクラウド事業者のＯＦＣによる参照および更新が行われないため、クラウド事業者に対してユーザの通信を秘匿することができる。
【符号の説明】
【００８６】
１，２  ＯＦＣ
１３  ＯＦＳ
１２  ＯｐｅｎＦｌｏｗチャネル
４１  コントローラ
４３  スイッチ
４４  フローテーブル管理手段
４５  フローテーブル
４６  識別子
１１１  経路計算部
１１２  ＯＦＳ制御部
１１３  チャネル管理部
１３１  パケット処理部
１３２  ＦｌｏｗＴａｂｌｅ管理部
１３３  ＯｐｅｎＦｌｏｗチャネル管理部
１４１  ＦｌｏｗＴａｂｌｅ
１４２，１４３  Ｔａｂｌｅ群
２０１  フローエントリ
２０２  ＯＦＣ識別子
２０３  Ｔａｂｌｅ識別子
【図１】
2015154149.tif 000003
【図２】
2015154149.tif 000004
【図３】
2015154149.tif 000005
【図４】
2015154149.tif 000006
【図５】
2015154149.tif 000007
【図６】
2015154149.tif 000008
【図７】
2015154149.tif 000009
【図８】
2015154149.tif 000010
【図９】
2015154149.tif 000011
【図１０】
2015154149.tif 000012
【図１１】
2015154149.tif 000013
【図１２】
2015154149.tif 000014
【図１３】
2015154149.tif 000015
【図１４】
2015154149.tif 000016