(57)【要約】【課題】動的な集約ルールの変更を可能としてエントリ数の増加を抑える。【解決手段】スイッチが参照するテーブルを形成するエントリ群を供給する制御装置であって、スイッチに対応する複数のエントリを生成する生成部と、複数のエントリの内容に基づき作成された集約ルールを用いて集約された集約エントリ群をスイッチに送信する送信部と、複数のエントリと複数のエントリの生成後に生成された追加のエントリとについて、複数のエントリ及び追加のエントリの内容に基づき再作成した再集約ルールを用いて複数のエントリ及び追加のエントリを集約した再集約エントリ群を生成し、当該再集約エントリ群を送信部に送信させる再集約処理を行う制御部と、を含む。【選択図】図５
2015186213.tif 000002
【特許請求の範囲】
【請求項１】
各エントリがパケットの識別情報と前記識別情報に合致するパケットに対する動作を示す動作情報とを含むエントリ群で形成されたテーブルを有し、入力されたパケットに対応するエントリを前記テーブルから検出し、検出されたエントリ中の動作情報に従って前記入力されたパケットに対する動作を行うスイッチに対して前記エントリ群を供給する制御装置であって、
前記スイッチに対応する複数のエントリを生成する生成部と、
前記複数のエントリの内容に基づき作成された集約ルールを用いて集約された集約エントリ群を前記エントリ群として前記スイッチに送信する送信部と、
前記制御装置の内部又は外部に設けられた前記複数のエントリを記憶する記憶部から前記複数のエントリを取得する取得部と、
前記複数のエントリと前記複数のエントリの生成後に前記生成部で生成された追加のエントリとについて、前記複数のエントリ及び前記追加のエントリの内容に基づき再作成した再集約ルールを用いて前記複数のエントリ及び前記追加のエントリを集約した再集約エントリ群を生成し、当該再集約エントリ群を前記エントリ群として前記送信部に送信させる再集約処理を行う制御部と、
を含む制御装置。
【請求項２】
前記制御部は、前記追加のエントリが生成されたときに前記再集約処理を開始する
請求項１に記載の制御装置。
【請求項３】
前記制御部は、前記追加のエントリが前記集約ルールで前記集約エントリ群に集約できないときに前記再集約処理を開始する
請求項１に記載の制御装置。
【請求項４】
前記制御部は、前記集約エントリ群に前記追加のエントリを加えたエントリ数が所定値を超過するときに前記再集約処理を開始する
請求項１から３のいずれか１項に記載の制御装置。
【請求項５】
前記制御部は、前記パケットの識別情報に含まれた複数のパラメータのうち前記集約ルールで用いられたパラメータと異なるパラメータを用いる前記再集約ルールで前記複数のエントリ及び前記追加のエントリを集約する
請求項１から４のいずれか１項に記載の制御装置。
【請求項６】
前記制御部は、前記パケットの識別情報に含まれた複数のパラメータのうち前記集約ルールで用いられたパラメータを含むパラメータ候補群と異なるパラメータを用いる前記再集約ルールで前記複数のエントリ及び前記追加のエントリを集約する
請求項１から５のいずれか１項に記載の制御装置。
【請求項７】
前記制御部は、前記追加のエントリを前記集約ルールを用いて生成された前記集約エントリ群に集約することを試行したときに、前記追加のエントリに含まれるパケットの識別情報の内容が前記集約ルールを用いて２以上のエントリが集約された集約エントリと集約可能な内容であるが、当該追加のエントリに含まれる動作情報の内容が前記集約エントリに含まれる動作情報の内容と異なるときには、前記スイッチにおいて前記追加のエントリが前記集約エントリよりも優先的に使用される形態で前記追加のエントリ及び前記集約エントリ群を前記送信部に送信させる
請求項１から６のいずれか１項に記載の制御装置。
【請求項８】
前記制御装置は、オープンフロースイッチである前記スイッチにオープンフロープロト
コルを用いてエントリを供給するオープンフローコントローラである
請求項１から７のいずれか１項に記載の制御装置。
【請求項９】
各エントリがパケットの識別情報と前記識別情報に合致するパケットに対する動作を示す動作情報とを含むエントリ群で形成されたテーブルを有し、入力されたパケットに対応するエントリを前記テーブルから検出し、検出されたエントリ中の動作情報に従って前記入力されたパケットに対する動作を行うスイッチに対し、前記エントリ群を供給する制御装置のテーブル作成方法であって、
前記制御装置が、
前記スイッチに対応する複数のエントリを生成し、
前記複数のエントリの内容に基づき作成された集約ルールを用いて集約された集約エントリ群を前記エントリ群として前記スイッチに送信し、
前記制御装置の内部又は外部に設けられた前記複数のエントリを記憶する記憶部から前記複数のエントリを取得し、
前記複数のエントリ及び前記複数のエントリの生成後に生成された追加のエントリについて、前記複数のエントリ及び前記追加のエントリの内容に基づいて再作成した再集約ルールを用いて前記複数のエントリ及び前記追加のエントリを集約した再集約エントリ群を生成し、当該再集約エントリ群を前記エントリ群として送信する再集約処理を行う、
ことを含む制御装置のテーブル作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御装置、及びそのテーブル作成方法に関する。
【背景技術】
【０００２】
近年、ネットワークの分野では、Software Defined Networking（ＳＤＮ）が注目され
ている。ＳＤＮは、ソフトウェアでネットワーク全体の挙動を制御する技術である。ＳＤＮを実現する標準として、OpenFlow（オープンフロー）技術が注目されている。
【０００３】
OpenFlowネットワークは、データ転送機能を備える“OpenFlowスイッチ”（ＯＦ−ＳＷ：以下「スイッチ」と表記することもある）と、経路制御を司る“OpenFlowコントローラ”（ＯＦＣ：以下「コントローラ」と表記することもある）を備え、コントローラとスイッチとは“OpenFlowプロトコル”に従って、コミュニケーションを図る。
【０００４】
各スイッチは、自身に入力されたパケットに対する動作（アクション）を決定するための情報が記憶されたフローテーブルを備える。OpenFlowでは、“ルール（条件）”，“アクション（Action）”，及び“統計情報（Statistics）”の組が“フロー”と呼ばれる。フローテーブルは、フローに係る情報が格納されたエントリ（以下、「フローエントリ」と呼ぶ）の集合体である。
【０００５】
フローに係る情報（フローエントリ）は、コントローラによって生成され、“OpenFlowプロトコル”を用いて各スイッチに送信される。各スイッチは、コントローラから受信したフローをフローテーブルに記憶する。このように、コントローラは、コントローラ自身の配下にある各スイッチが有するフローテーブルを一元管理する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１６７３４０号公報
【特許文献２】特開２０１３−２１６７８号公報
【特許文献３】特開平１０−２９０２３２号公報
【特許文献４】特開２０００−２５３０５８号公報
【特許文献５】国際公開２０１１−１３２５６８号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
OpenFlowネットワークのスケーラビリティは、コントローラの処理能力や、各スイッチが有するフローテーブルに登録可能なフローエントリ数に依存する。フローテーブルに登録可能なフローエントリ数の上限は、スイッチが備えるメモリの容量によって規定される。
【０００８】
このため、コントローラは、スイッチへ送る複数のフローエントリを生成したときに、以下のようなフローエントリの集約を行っていた。すなわち、コントローラは、各フローエントリに含まれるパラメータを参照し、集約後のフローエントリ数が最少となる集約ルールを作成する。
【０００９】
次に、コントローラは、集約ルールに従って２以上のフローエントリを非可逆的な手法で１つの集約エントリにマージする。そして、コントローラは、集約エントリと未集約のエントリ（存在する場合）とをスイッチへ送っていた。その後、新たな（追加に係る）フ
ローエントリが作成された場合には、コントローラは、追加のフローエントリを集約ルールに従って集約できるか否かを判定し、集約できない場合に限って追加のフローエントリをスイッチに送っていた。
【００１０】
上記のようなコントローラには、以下の問題があった。すなわち、上記集約ルールで用いられるパラメータがパラメータ“Ａ”を含むと仮定する。この仮定において、追加のエントリにおけるパラメータ“Ａ”の値と上記集約エントリにおけるパラメータ“Ａ”の値とが異なる場合には、追加のエントリを集約エントリに集約できない。このため、パラメータ“Ａ”の値が異なる追加のエントリが生成される毎に、スイッチで保持するフローエントリの数が増加することが起こり得る。
【００１１】
上記問題は以下の理由によって生じていた。すなわち、エントリの集約は、テーブルのデータサイズを低減するために行われる。このため、エントリの集約が行われたときは、集約前のエントリは廃棄（消去）される。コントローラはこのような考え方に倣い、集約前のフローエントリを保持しない。このように、集約前のフローエントリが存在しないため、フローエントリ数が増加しても、集約ルールを変更することができなかった。
【００１２】
本開示は、動的な集約ルールの変更を可能としてスイッチ上のエントリ数の増加を抑えることが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本開示は、各エントリがパケットの識別情報と前記識別情報に合致するパケットに対する動作を示す動作情報とを含むエントリ群で形成されたテーブルを有し、入力されたパケットに対応するエントリを前記テーブルから検出し、検出されたエントリ中の動作情報に従って前記入力されたパケットに対する動作を行うスイッチに対して前記エントリ群を供給する制御装置であって、
前記スイッチに対応する複数のエントリを生成する生成部と、
前記複数のエントリの内容に基づき作成された集約ルールを用いて集約された集約エントリ群を前記エントリ群として前記スイッチに送信する送信部と、
前記制御装置の内部又は外部に設けられた前記複数のエントリを記憶する記憶部から前記複数のエントリを取得する取得部と、
前記複数のエントリと前記複数のエントリの生成後に前記生成部で生成された追加のエントリとについて、前記複数のエントリ及び前記追加のエントリの内容に基づき再作成した再集約ルールを用いて前記複数のエントリ及び前記追加のエントリを集約した再集約エントリ群を生成し、当該再集約エントリ群を前記エントリ群として前記送信部に送信させる再集約処理を行う制御部と、
を含む制御装置である。
【発明の効果】
【００１４】
本開示によれば、動的な集約ルールの変更を可能としてスイッチ上のエントリの増加を抑えることが可能となる。
【図面の簡単な説明】
【００１５】
【図１】図１は、関連技術に係るネットワークシステムの構成例を示す。
【図２】図２は、フローテーブルの一例を示す。
【図３】図３は、関連技術におけるコントローラによるフローエントリの集約手順の例を示す。
【図４】図４は、関連技術の問題点の説明図である。
【図５】図５は、実施形態１に係るネットワークシステムの構成例を示す。
【図６】図６は、ネットワークシステムの動作例を示すシーケンス図である。
【図７】図７は、コントローラとして動作可能な情報処理装置のハードウェア構成例を示す図である。
【図８】図８は、スイッチとして動作可能な情報処理装置のハードウェア構成例を示す図である。
【図９】図９は、図６に示したＣＰＵによる処理例を示すフローチャートである。
【図１０】図１０は、実施形態１の具体例の説明図である。
【図１１】図１１は、実施形態１の具体例の説明図である。
【図１２】図１２は、実施形態１の具体例の説明図である。
【図１３】図１３は、実施形態１の具体例の説明図である。
【図１４】図１４は、実施形態２に係るネットワークシステムの構成例を示す図である。
【図１５】図１５は、実施形態２における動作例を示すシーケンス図である。
【図１６】図１６は、実施形態２におけるＣＰＵの処理を示すフローチャートである。
【図１７】図１７は、図１６の１２及び１４の処理の具体例の説明図である。
【図１８】図１８は、実施形態３に係るネットワークシステムの構成例を示す図である。
【図１９】図１９は、実施形態３における動作例を示すシーケンス図である。
【図２０】図２０は、実施形態３におけるＣＰＵの処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施形態について説明する。実施形態の構成は例示であり、本発明は、実施形態の構成に限定されない。
【００１７】
〔関連技術〕
最初に、本開示の関連技術について説明する。図１は、関連技術に係るネットワークシステムの構成例を示す。図１において、ネットワークシステムは、クラウドマネージャ１と、コントローラ（ＯＦＣ）２と、複数のスイッチ（ＯＦ−ＳＷ）３と、複数のホスト（Host）４を含んでいる。図１では、複数のスイッチ３の例として、スイッチ＃１〜＃４が図示されている。また、複数のホスト４の例として、ホスト＃１〜＃４が例示されている。
【００１８】
クラウドマネージャ１は、各ホスト＃１〜＃４に対して、仮想マシン（ＶＭ）の生成・削除、Internet Protocol(ＩＰ)アドレスやVirtual Local Area Network(ＶＬＡＮ)−Ｉ
Ｄ付与等に関する設定要求を行う。ＶＬＡＮ−ＩＤは、仮想ＬＡＮの識別情報である。クラウドマネージャ１は、各ホスト＃１〜＃４内で生成された仮想マシンの情報（ＶＭ情報）を記憶するデータベース（ＤＢ）１１を有している。
【００１９】
図１に示す例では、ホスト＃１上で、仮想マシン（ＶＭ）１−１，ＶＭ１−２，及びＶＭ１−２が生成されている。また、ホスト＃２上で、ＶＭ２−１，及びＶＭ２−２が生成されている。また、ホスト＃３上で、ＶＭ３−１，及びＶＭ３−２が生成されている。また、ホスト＃４上で、ＶＭ４−１が生成されている。
【００２０】
各スイッチ３（スイッチ＃１〜＃４）は、フローテーブル３１を含んでいる。フローテーブル３１は、個々のフロー（スイッチに入力される個々のパケット）に対するスイッチ３の動作が記述されたエントリ（フローエントリと呼ぶ）の集合体である。
【００２１】
図２は、フローテーブル３１の一例を示す。フローテーブル３１を形成するフローエントリは、フローの識別情報（フローＩＤ）に対応する、“ルール（条件）”，“アクショ
ン(Action)”，及び“統計情報(Statistics)”を含んでいる。
【００２２】
“ルール（条件）”は、スイッチに入力されたパケットの識別条件（フローの定義条件）を示す情報であり、主にパケットのヘッダフィールドに設定されるパラメータの組み合わせで表現される。“ルール”は、“ヘッダフィールド”と呼ばれることもある。OpenFlowで規定されているパラメータには、以下のものがある。“ルール”は、「パケットの識別情報」の一例である。
・“Switch Port (Ingress Port)：受信（入力）ポート”，
・“MAC src：送信元ＭＡＣ（Media Access Control）アドレス”
・“MAC dst：宛先ＭＡＣアドレス”，
・“Eth type:プロトコル種別”，
・“ＶＬＡＮ−ＩＤ”，
・“VLAN Priority: ＶＬＡＮ  ＰＣＰ(Priority Code Point)値”，
・“IP src：ＩＰ送信元アドレス”，
・“IP dst:ＩＰ宛先アドレス”，
・“IP Protocol number:プロトコル番号”，
・“IP ToS bits：ＴｏＳ（Type of Service）値”
・“Transport src port:送信元ポート番号”，
・“Transport dst port:宛先ポート番号” 
“アクション”は、“ルール”に合致（マッチ）したパケットの処理を指定する情報である。例えば、図２に示すように、以下のようなものがある。“アクション”は「動作情報」の一例である。
・“ALL：他の全ポートへ転送”，
・“CONTROLLER:コントローラへ転送”，
・“LOCAL:特定の１ポートへ転送”
・“TABLE：フローテーブルのアクションを実行”，
・“IN_PORT：受信ポートへ送信（受信ポートから出力）”
“アクション”には、複数のアクションを定義することができる。また、“アクション”の定義がないときには、“Drop：パケットの廃棄”が行われるようにすることができる。統計情報として、或るルールに合致するパケット数やパケット量がカウントされる。このような統計情報は、アクションを実行するための条件として使用することができる。
【００２３】
スイッチ（ＯＦ−ＳＷ）３は、入力されたパケットのヘッダフィールドと“ルール”とを比較し、合致するルールが発見されると、当該ルールが記憶されたエントリ中の“アクション”を参照し、“アクション”で定義された動作を行う。例えば、スイッチ３に入力されたパケットが図２のフローＩＤ“１”のフローエントリに格納された“Ｒｕｌｅ１”に合致するときには、スイッチ３は、当該パケットを“アクション”の内容に従ってポートｐ１から送信する。なお、フローＩＤ“１”のフローエントリの統計情報は、例えば、“１０００byte”のパケットが転送されたことを意味する。
【００２４】
コントローラ（ＯＦＣ）２は、通信情報取得部２１、フローエントリ算出部２２、集約ルール作成部２３、フロー情報記憶部２４を含む。通信情報取得部２１は、クラウドマネージャ１内のＤＢ１１から仮想マシン（ＶＭ）間通信情報(各ＶＭのＩＰアドレス，ＶＬ
ＡＮ−ＩＤ等)を取得する。ＶＭ間通信情報は、当該ＶＭ間通信情報に対応するＶＭ間通
信が実際に行われる前にコントローラ２に入力される。
【００２５】
フローエントリ算出部２２は、ＶＭ間通信情報を用いて、各スイッチ３（各スイッチ＃１〜＃４）に対応するフローエントリを生成する。集約ルール作成部３３は、フローエントリ算出部２２にて生成された複数のフローエントリに対する集約ルールを作成し、集約ルールに従って複数のエントリが集約された集約エントリ群をスイッチ３毎に生成する。
各集約エントリ群は、対応するスイッチ３に送信され、各スイッチ３のフローテーブル３１に登録される。
【００２６】
また、各スイッチ３に送った集約エントリ群は、フロー情報として、フロー情報記憶部２４に記憶される。これによって、コントローラ２は、各スイッチ３のフローテーブル３１の登録内容を一元的に管理することができる。
【００２７】
集約エントリ群を受信したスイッチ３は、当該集約エントリ群をフローテーブル３１に格納（登録）する。フローテーブル３１への登録は、実際のＶＭ間通信が開始される前に行われる。これによって、スイッチ３に未知のフローに係るパケットが入力され、Packet-In処理（未知のフローに対するアクションについてコントローラ２に問い合わせを行う
動作）が発生しないようになっている。
【００２８】
図３は、関連技術におけるコントローラによるフローエントリの集約手順の例を示す。コントローラの通信情報取得部２１は、クラウドマネージャ１内のＤＢ１１からＶＭ間通信情報を取得する。図３中のテーブル（１）は、ＤＢ１１から得られたＶＭ間通信情報の一例を示す。ＶＭ通信情報として、ＶＭ１−１，ＶＭ１−２，ＶＭ１−３，ＶＭ３−１，及びＶＭ３−２のそれぞれに関して、“ＶＭ名”，“ＩＰアドレス”，“ＶＬＡＮ−ＩＤ”，及び“通信先ＶＭ”が得られた例が示されている。
【００２９】
次に、フローエントリ算出部２２が、ＶＭ間通信情報に基づいて、各スイッチ３（スイッチ＃１〜＃４）に対応するフローエントリの集合（フローテーブル）を生成する。図３中のテーブル（２）は、フローエントリ算出部２２がスイッチ＃１用のフローエントリを算出した結果を示す。テーブル（２）の例では、スイッチ＃１用の３つのフローエントリが生成されている。
【００３０】
フローエントリは、“ルール”としての“Src-IP：ＩＰ送信元アドレス”，“Dst-IP：ＩＰ宛先アドレス”及び“ＶＬＡＮ−ＩＤ”の組み合わせと、当該ルールに対応する“アクション”とを含んでいる。例えば、テーブル（２）の一番上のフローエントリは、ＩＰ送信元アドレス“10.0.0.3”，ＩＰ宛先アドレス“10.0.1.2”，ＶＬＡＮ−ＩＤ“１０”を有するパケットはポートｐ４から出力（送信）することが定義されている。
【００３１】
集約ルール作成部２３は、フローエントリ算出部２２によって生成（算出）されたフローエントリの集合に対して集約が可能か否かを判定し、例えば、フローエントリ数が最少となるパラメータに基づいてフローエントリの集約を行う。
【００３２】
テーブル（２）の例では、パラメータ“Action”の内容は共通である。また、上から２番目と３番目のフローエントリは、パラメータ“Dst-IP”の値が共通である。また、上から１番目と３番目のフローエントリは、パラメータ“VLAN-ID”の値が共通である。従っ
て、“Dst-IP”又は“VLAN-ID”を用いてフローエントリを集約可能であることが分かる
。この場合、予め定められた所定ルール（優先順序）に従って、集約に用いるパラメータを決定する。図３の例では、集約ルール作成部２３が“Dst-IP”に注目し、“Dst-IP”と“Action”とが共通のフローエントリを集約する集約ルールを作成したと仮定する。
【００３３】
図３中のテーブル（３）は、集約ルールに従ってテーブル（２）のフローエントリ群が集約された例を示す。テーブル（３）において、テーブル（２）の上から２番目と３番目のフローエントリはマージされ、１つの集約エントリに変換されている。集約されたフローエントリにおけるアスタリスク“＊”は、“Don't care(何でも良い)”を意味する（“ワイルドカード”とも呼ばれる）。
【００３４】
テーブル（３）の内容（集約エントリ群）は、スイッチ＃１へ送信されるとともに、フロー情報記憶部２４に記憶される。フロー情報記憶部２４は、各スイッチ３におけるフローテーブル３１を管理するために使用される。このため、集約前のフローエントリ、すなわち、テーブル（２）の内容は廃棄される。
【００３５】
これまでの説明で分かるように、フローエントリの集約は、集約前のフローエントリの共通部分を残し、共通部分以外の部分は“Don't care”に置き換えることでなされる非可逆的な処理である。このため、集約エントリから集約前のフローエントリを復元することはできない。
【００３６】
このため、コントローラ２は、集約ルール『“Dst-IP”と“Action”とが共通のフローエントリを集約する』を維持する。このように、関連技術では、集約前のフローエントリを復元できないので、集約ルールを変更することはできず、最初に作成された集約ルールが固定的に使用される。
【００３７】
図４は、関連技術の問題点の説明図である。図４に示すテーブル（４）は、通信情報取得部２１が、ＤＢ１１から新たに取得したＶＭ間通信情報の例を示す。テーブル（４）に含まれるエントリは、先に取得されたテーブル（１）との差分を示し、テーブル（４）は、新たに開始される３つのＶＭ間通信を示す。
【００３８】
フローエントリ算出部２２は、テーブル（４）の内容に従った新たなフローエントリを生成する。集約ルール作成部２３は、フロー情報記憶部２４に記憶されたスイッチ＃１のフローテーブルの内容（テーブル（３））を読み出し、新たなフローエントリを追加する。
【００３９】
図４中のテーブル（５）は、スイッチ＃１用のテーブル（３）に、テーブル（４）に基づき作成した新規のフローエントリが追加された状態を示す。テーブル（５）において、上から１番目および２番目のフローエントリ（破線矩形で囲まれた２つのエントリ）が追加のフローエントリに該当する。
【００４０】
集約ルール作成部２３は、テーブル（５）に対して、先に作成した集約ルールに従い、上から２番目のフローエントリと３番目のフローエントリとをマージする。しかし、上から１番目のフローエントリは、“Dst-IP”の値が異なるため、集約できない。従って、テーブル（６）に示すように、スイッチ＃１へ送る集約エントリ群の内容は、２つの集約フローエントリと、未集約の１つのフローエントリからなる３つのフローエントリを含む状態となる。このようなテーブル（６）の内容が、スイッチ＃１へ送られるとともに、フロー情報記憶部２４に記憶される。
【００４１】
従って、関連技術では、“Dst-IP”の値が異なるフローエントリが新たに生成される毎に、スイッチ＃１のフローテーブル３１におけるフローエントリ数は増加する状態となる。このように、関連技術では、最初に作成された集約ルールが固定的に使用されるため、十分なフローエントリ数の削減効果を得ることができなかった。
【００４２】
上記問題は、以下を理由として生じる。本来的に、エントリの集約は、テーブルを記憶するメモリ容量に上限があるため、テーブルのデータサイズを小さくするために行われる。従って、エントリが集約された場合には、集約前のエントリは無用のものとして廃棄されるのが通常である。既存のＬ３スイッチ、ルータ等の通信機器では、上記のような集約前のエントリの廃棄は、通常のこととして行われていた。
【００４３】
しかしながら、OpenFlowでは、コントローラ（経路制御機構）とスイッチ（パケット転
送機構）とが分離されており、それぞれを異なる物理装置に実装することができる。この場合、コントローラ側で集約前のフローエントリ群を保存しておいても、スイッチ側のメモリ容量を圧迫することがない。
【００４４】
むしろ、コントローラ側で集約前のフローエントリを保存しておけば、フローエントリが追加されたときに、集約前のフローエントリと追加のフローエントリとについて既存の集約ルールと異なる集約ルールでの再集約を試行することができる。換言すれば、フローエントリが追加された時点でフローエントリ数が最少となる集約ルールでフローエントリを再集約することが可能となる。以下に説明する実施形態は、動的な集約ルールの変更を可能とすることによって、フローエントリ数の増加を抑えることのできるコントローラについて説明する。
【００４５】
〔実施形態１〕
図５は、実施形態１に係るネットワークシステムの構成例を示す。図５において、ネットワークシステムは、クラウドマネージャ１と、コントローラ（ＯＦＣ）２Ａと、コントローラ２Ａとネットワークを介して接続された複数のスイッチ（ＯＦ−ＳＷ）３と、複数のホスト（Host）４とを含んでいる。コントローラ２Ａは、「制御装置」の一例であり、スイッチ３は「スイッチ」の一例である。
【００４６】
コントローラ２Ａは、ネットワークを介してクラウドマネージャ１及び複数のスイッチ３と接続されている。図５では、複数のスイッチ３の例示として、スイッチ＃１〜＃４が図示されている。スイッチ＃１及びスイッチ＃４のそれぞれは、スイッチ＃２及びスイッチ＃３と接続されている。
【００４７】
また、図５では、複数のホスト４の例として、ホスト＃１〜＃４が図示されている。ホスト＃１及びホスト＃２は、スイッチ＃１に接続されており、ホスト＃３及びホスト＃４は、スイッチ＃４に接続されている。
【００４８】
クラウドマネージャ１は、ネットワークを介してホスト＃１〜＃４と接続されており、関連技術と同様の構成を有する。すなわち、各ホスト＃１〜＃４に対して、仮想マシン（ＶＭ）の生成・削除、ＩＰアドレスやＶＬＡＮ−ＩＤ付与等に関する設定要求を行う。また、クラウドマネージャ１は、各ホスト＃１〜＃４内で生成された仮想マシンの情報（ＶＭ情報）を記憶するデータベース（ＤＢ）１１を備えている。
【００４９】
図５では、ホスト＃１上で、ＶＭ１−１，ＶＭ１−２，及びＶＭ１−３が生成されている。また、ホスト＃２上で、ＶＭ２−１，及びＶＭ２−２が生成されている。また、ホスト＃３上で、ＶＭ３−１，及びＶＭ３−２が生成されている。また、ホスト＃４上で、ＶＭ４−１が生成されている。
【００５０】
但し、仮想マシン（ＶＭ）は、通信を行うエンティティ（主体）の例示であり、通信を行うエンティティが仮想マシンであること、ホストが仮想マシンを生成することは必須の要件ではない。ホスト＃１〜＃４自体（実マシン）が通信エンティティであっても良い。
【００５１】
なお、クラウドマネージャ１は、例えば、ネットワークに接続されたサーバ装置であり、専用又は汎用のコンピュータを用いて実現することができる。また、各ホスト４は、パーソナルコンピュータ（ＰＣ），ワークステーション（ＷＳ），タブレット端末，スマートフォンのような、プロセッサ，メモリ及び通信インタフェースを有するコンピュータ（情報処理装置）であり、プロセッサがプログラムを実行することによって仮想マシン（ＶＭ）を形成することができる。
【００５２】
各スイッチ３（各スイッチ＃１〜＃４）は、関連技術と同様に、フローテーブル３１を含んでいる。フローテーブル３１は、フローエントリの集合体である。フローエントリのデータ構造（要素（フィールド）の内容）は、関連技術と同様である（図２参照）。各スイッチ３は、OpenFlowプロトコルに従った通信をコントローラ２Ａと行い、フローテーブル３１に登録するフローエントリをコントローラ２Ａから受け取ることができる。
【００５３】
コントローラ２Ａは、通信情報取得部２１と、フローエントリ算出部２２と、集約ルール作成部２３と、フロー情報記憶部２４Ａと、再集約処理部２５と、トポロジデータベース（トポロジＤＢ）２６とを含む。
【００５４】
通信情報取得部２１は、クラウドマネージャ１内のＤＢ１１から仮想マシン（ＶＭ）間通信情報(各ＶＭのＩＰアドレス，ＶＬＡＮ−ＩＤ等)を取得する。ＶＭ間通信情報は、当該ＶＭ間通信情報に対応するＶＭ間通信が実際に行われる前にコントローラ２に入力される。但し、上記したように、実施形態の適用範囲は、ＶＭ間通信に限定されない。ＶＭ間通信情報は、通信エンティティ（送信ホストと受信ホスト）間の通信情報の例示である。
【００５５】
フローエントリ算出部２２は、ＶＭ間通信情報を用いて、各スイッチ３用のフローエントリを生成する。フローエントリ算出部２２によって生成された各スイッチ３に対応するフローエントリの集合（フローエントリ群）は、集約前フロー情報として、フロー情報記憶部２４Ａに記憶される。フローエントリ算出部２２は、「生成部」の一例である。
【００５６】
集約ルール作成部２３は、フローエントリ算出部２２で生成された複数のフローエントリの内容を解析し、その時点でフローエントリ数が最少となる集約ルールを作成する。集約ルール作成部２３は、作成した集約ルールに従って、フローエントリの集約を行う。なお、集約ルール作成部２３は、「集約部」の一例である。
【００５７】
集約ルール作成部２３によって集約された後のフローエントリ（集約エントリ群）は、対応するスイッチ３に送られる。本実施形態では、集約後のエントリの内容（スイッチ３が保持するエントリの内容）は、コントローラ２Ａ側で保持しない。すなわち、コントローラ２Ａは、必要に応じてフロー情報記憶部２４Ａに記憶されたフロー情報（集約前のフローエントリの情報）を用いて集約後のエントリ群を生成する。もっとも、各スイッチ３に対応する集約エントリ群は、各スイッチ３におけるフローテーブル３１の登録内容を示す情報として、フロー情報記憶部２４Ａに記憶されることができる。
【００５８】
再集約処理部２５は、通信情報取得部２１で新たなＶＭ間通信情報が取得され、且つ新たなＶＭ間通信情報に基づくフローエントリがフローエントリ算出部２２で生成された場合に、再集約処理を行う。再集約処理部２５は、「制御部」の一例である。
【００５９】
トポロジＤＢ２６は、スイッチ３間の接続関係に係るトポロジ情報を記憶している。トポロジ情報は、各ＶＭ間通信に関して、パケットが通過するスイッチ３，各スイッチ３におけるパケットの受信ポート及び送信ポートを示す情報を含む。このような情報は、例えば、静的に設定されても良く、或いは、コントローラ２Ａが各スイッチ３との通信によって取得するようにしても良い。
【００６０】
＜動作例＞
図６は、ネットワークシステムの動作例を示すシーケンス図である。以下に説明する動作は、各スイッチ３のフローテーブル３１に対して実行される。図６において、通信情報取得部２１は、クラウドマネージャ１から通信情報を取得する（図６＜１＞）。通信情報取得部２１は、通信情報をフローエントリ算出部２２に与える（図６＜２＞）。
【００６１】
フローエントリ算出部２２は、通信情報を用いてフローエントリを算出する（図６＜３＞）。フローエントリ算出部２２は、算出された複数のフローエントリ（フローエントリ群）を、フロー情報として集約ルール作成部２３に送るとともに（図６＜４＞）、フロー情報記憶部２４Ａに記憶する（図６＜５＞）。
【００６２】
集約ルール作成部２３は、フローエントリ群に対する集約ルールを作成し、作成した集約ルールを用いて集約エントリ群を算出する（図６＜６＞）。集約エントリ群は、１以上の集約エントリ（複数のフローエントリのマージによって作成されたエントリ）と、１以上の集約できなかったフローエントリ（存在する場合）とを含む。集約エントリ群は、対応するスイッチ３に送信される（図６＜７＞）。
【００６３】
その後、新規の通信が発生すると（図６＜８＞）、通信情報取得部２１は、新規の通信を含む通信情報を取得し（図６＜９＞）、フローエントリ算出部２２に送る（図６＜１０＞）。フローエントリ算出部２２は、新規の通信に係るフローエントリを算出する（図６＜１１＞）。フローエントリ算出部２２は、フローエントリ群をフロー情報としてフロー情報記憶部２４に記憶する（図６＜１２＞）。
【００６４】
本動作例では、フローエントリの追加を契機として、再集約処理が実行される、このため、フローエントリ算出部２２は、フローエントリ集約の解除通知を再集約処理部２５に与える（図６＜１３＞）。再集約処理部２５は、集約前のフローエントリ群をフロー情報記憶部２４から読み出す（図６＜１４＞）。
【００６５】
再集約処理部２５は、集約前のフローエントリ群に対する集約ルールを再作成し、再作成した集約ルール（新集約ルール）を用いて再集約エントリ群を生成する（図６＜１５＞）。そして、再集約エントリ群は、対応するスイッチ３に送られる（図６＜１６＞）。なお、図６＜７＞でスイッチ３に送られる集約エントリ群や図６＜１６＞でスイッチ３に送られる再集約エントリ群は、フロー情報記憶部２４Ａに記憶されるようにしても良い。
【００６６】
＜コントローラのハードウェア構成＞
図７は、上述したコントローラ２Ａとして動作可能な情報処理装置（コンピュータ）５０のハードウェア構成例を示す図である。情報処理装置５０は、例えば、ＰＣ，ＷＳ，サーバマシンのような専用又は汎用のコンピュータを適用することができる。但し、情報処理装置５０の種類は、上記の例示に制限されない。
【００６７】
図７において、情報処理装置５０は、バスＢを介して相互に接続されたCentral Processing Unit（ＣＰＵ）５１，Random Access Memory（ＲＡＭ）５２，及びRead Only Memory（ＲＯＭ）５３を備えている。また、情報処理装置５０は、バスＢに接続されたハード
ディスクドライブ（ＨＤＤ）５４，ネットワークインタフェース（ＮＷＩ／Ｆ）５５，及び入力インタフェース（入力Ｉ／Ｆ）５６を備えている。さらに、情報処理装置５０は、バスＢに接続された出力インタフェース（出力Ｉ／Ｆ）５７，入出力インタフェース（入出力）５８，及びドライブ装置５９を備えている。
【００６８】
ＲＡＭ５２は、ＣＰＵ５１の作業領域として使用される。ＲＯＭ５３及びＨＤＤ５４のそれぞれは、プログラムやプログラムの実行に際して使用されるデータを記憶する。ＨＤＤ５４は、プログラムの実行結果として生成されたデータを記憶することもできる。ＨＤＤの代わりに、又はＨＤＤ５４に加えて、Solid State Drive（ＳＳＤ）が設けられてい
ても良い。
【００６９】
入出力Ｉ／Ｆ５８には、半導体メモリ６０が着脱自在に接続される。半導体メモリ６０は、可搬型記憶媒体の一例であり、所望のデータを記憶する。入出力Ｉ／Ｆ５８は、半導
体メモリ６０からのデータの読み出し、書き込みを行う。半導体メモリ６０は、例えばフラッシュメモリ、ＳＲＡＭ，ＵＳＢメモリである。但し、半導体メモリ６０の種別は、これらに限定されない。ドライブ装置５９は、可搬型記憶媒体の一例であるディスク記憶媒体６１からのデータの読み出し、或いはデータの書き込みを行う。ＲＡＭ５２，ＲＯＭ５３，ＨＤＤ５４，半導体メモリ６０，ディスク記憶媒体６１などは、「記憶部」、「記憶媒体」，「メモリ」，或いは「記憶装置」の一例である。
【００７０】
入力Ｉ／Ｆ５６には、入力装置６２が接続される。入力装置６２は、例えば、ボタン、キー，ポインティングデバイス（マウスなど），タッチパネルの少なくとも１つを含む。入力装置６２は、情報やデータの入力に使用される。
【００７１】
出力Ｉ／Ｆ５７には、表示装置（ディスプレイ装置）６３が接続される。表示装置６３は、各種の情報を表示する。ＮＷＩ／Ｆ５５は、通信機能を司るインタフェース回路を含み、スイッチ３やクラウドマネージャ１などとネットワークを介して接続される。ＮＷＩ／Ｆ５５は、例えば、ＬＡＮカードのようなネットワークインタフェースカードを適用することができる。ＮＷＩ／Ｆ５５は、各スイッチ３やクラウドマネージャ１とデータを送受信する「送信部」及び「受信部」として動作する。例えば、ＮＷＩ／Ｆ５５は、各スイッチ３に対して集約エントリ群や再集約エントリ群のような各スイッチ３のフローテーブル３１への登録内容を送信する送信部として動作する。
【００７２】
ＣＰＵ５１は、ＲＯＭ５３，ＨＤＤ５４，半導体メモリ６０，ディスク記憶媒体６１の少なくとも１つに記憶されたプログラムをＲＡＭ５２にロードして実行することによって、コントローラ２Ａとして動作する。ＣＰＵ５１は、「プロセッサ」或いは「制御装置」の一例である。
【００７３】
プログラムの実行によって、ＣＰＵ５１は、図５に示した通信情報取得部２１，フローエントリ算出部２２，集約ルール作成部２３，再集約処理部２５として動作する。フロー情報記憶部２４，及びトポロジ２７は、例えば、ＲＡＭ５２，ＨＤＤ５４の少なくとも１つに記憶される。
【００７４】
なお、図７に示した通信情報取得部２１，フローエントリ算出部２２，集約ルール作成部２３，再集約処理部２５の少なくとも１つは、ハードウェアで形成されていても良い。ハードウェアは、例えば、電気・電子回路、集積回路（ＩＣ，ＬＳＩ，Application Specific Integrated Circuit（ＡＳＩＣ）の少なくとも１つ）の少なくとも１つを適用する
ことができる。また、ハードウェアは、Field Programmable Gate Array（ＦＰＧＡ）の
ようなプログラマブルロジックデバイス（ＰＬＤ）を含むことができる。
【００７５】
＜スイッチのハードウェア構成例＞
図８は、スイッチ３として動作可能な情報処理装置（コンピュータ）７０のハードウェア構成例を示す図である。情報処理装置７０は、ＰＣ，ＷＳ，サーバマシンのような専用又は汎用のコンピュータや、Ｌ３スイッチ，ルータのような通信機器を適用することも可能である。但し、情報処理装置７０の種類は、上記の例示に制限されない。
【００７６】
図８において、情報処理装置７０は、バスＢ１を介して相互に接続されたＣＰＵ７１，ＲＡＭ７２，ＲＯＭ７３，及びＮＷＩ／Ｆ７４を備えている。ＲＡＭ７２は、ＣＰＵ７１の作業領域として使用される。ＲＯＭ７３は、ＣＰＵ７１によって実行されるプログラムや、プログラムの実行に際して使用されるデータを記憶する。
【００７７】
ＮＷＩ／Ｆ７４は、ネットワークを介して送信ホスト，受信ホスト，他のスイッチ３，及びコントローラ２Ａと接続される。ＮＷＩ／Ｆ７４は、通信に係る処理を司る。すなわ
ち、ＮＷＩ／Ｆ７４は、送信ホスト又は他のスイッチ３から所定の受信ポートで受信されたパケットを、ＣＰＵ７１からの指示に応じた出力ポートから送信する。これによって、パケットが次のホップに相当する他のスイッチ３又は受信ホストで受信される。
【００７８】
ＣＰＵ７１は、ＲＯＭ７３に記憶されたプログラムをＲＡＭ７２にロードして実行することによって、スイッチ３として動作する。例えば、ＲＡＭ７２には、フローテーブル３１の記憶領域が形成されており、ＮＷＩ／Ｆ７４で受信されたフローエントリがＲＡＭ７２のフローテーブル３１に記憶（登録）される。
【００７９】
ＣＰＵ７１は、ＮＷＩ／Ｆ７４でパケットが受信されると、フローテーブル３１（各フローエントリの“Rule”）を参照し、対応するフローエントリを検出する。続いて、ＣＰＵ７１は、検出したフローエントリに含まれた“Action”の内容に従ってパケットに対する動作（処理）を行う。例えば、ＣＰＵ７１は、パケットを“Action”で規定された出力ポートから送信（転送）する処理を行う。
【００８０】
＜コントローラにおける処理＞
図９は、図６に示したＣＰＵによる処理例を示すフローチャートである。図６の０１において、ＣＰＵ５１は、通信情報取得部２１として動作し、クラウドマネージャ１から通信情報を取得する。
【００８１】
次の０２において、ＣＰＵ５１は、フローエントリ算出部２２として動作し、各スイッチに対するフローエントリを算出する。このとき、ＣＰＵ５１は、算出したフローエントリ（集約前のフローエントリ群）をフロー情報記憶部２４Ａに記憶する。
【００８２】
次の０３において、ＣＰＵ５１は、集約ルール作成部２３として動作し、各スイッチ３に登録するフローエントリ数が最少となるパラメータを選択する。この選択が集約ルールの作成に該当する。ＣＰＵ５１は、選択したパラメータの値が共通のフローエントリを１つの集約エントリにマージすることで、フローエントリの集約を行う。
【００８３】
次の０４において、ＣＰＵ５１は、フローエントリの集約によって生成された集約エントリ群を各スイッチ３にＮＷＩ／Ｆ５５を介して送信する処理を行う。その後、ＣＰＵ５１は、新規の通信要求（通信情報）を待ち受ける状態になる（０５）。
【００８４】
新規の通信情報が取得されると（０５，ＹＥＳ）、ＣＰＵ５１は、フローエントリ算出部２２として動作し、新規の（追加の）フローエントリを算出する（０６）。ＣＰＵ５１は、追加のフローエントリの算出を契機として、フローエントリの集約を解除する（０７）。
【００８５】
次の０８において、ＣＰＵ５１は、再集約処理部２５として動作し、フロー情報記憶部２４Ａから集約前のフローエントリ群を読み出し、集約前のフローエントリ群と追加のフローエントリとについて、再集約処理を行う。すなわち、ＣＰＵ５１は、集約前のフローエントリ群と追加のフローエントリについて、フローエントリ数が最少となるパラメータを決定する（集約ルール再作成）。続いて、ＣＰＵ５１は、再作成した集約ルールで、集約前のフローエントリ群及び追加のフローエントリを再集約した再集約エントリ群を生成する。０７及び０８の処理は、追加のフローエントリに係るスイッチ３毎に実行される。
【００８６】
そして、次の０９において、ＣＰＵ５１は、再集約処理部２５として動作し、各スイッチ３に対してＮＷＩ／Ｆ５５を介して再集約エントリ群を送信する処理を行う。なお、図９では、０９の処理後に処理が終了するようになっているが、処理を０５に戻しても良い。
【００８７】
＜具体例＞
次に、実施形態１に係るネットワークシステム（コントローラ２Ａ）での処理の具体例について説明する。図１０〜図１３は、実施形態１の具体例の説明図である。実施形態１におけるＶＭ間通信の発生状況は、関連技術と同じである。最初に、ＶＭ１−１とＶＭ３−１との通信，ＶＭ１−２とＶＭ３−１との通信，及びＶＭ１−３とＶＭ３−２との通信が開始されると仮定する。このとき、これらの通信に係る通信情報がコントローラ２Ａの通信情報取得部２１で取得される。通信情報の内容は、図３のテーブル（１）に示す通りである。
【００８８】
すると、コントローラ２Ａのフローエントリ算出部２２が各スイッチ３用のフローエントリを作成し、集約ルール作成部２３が、集約ルールを作成し、集約ルールに従って、フローエントリ群の集約を行う。図１１のテーブル＜１＞は、スイッチ＃１について作成されたフローエントリ群を示し、テーブル＜２＞は、フローエントリ群の集約結果（集約エントリ群）を示す。集約ルールの作成及び集約の具体的な手法は、関連技術と同様であるので説明を省略する。テーブル＜２＞において、フローエントリ群は、“Dst-IP”及び“Action”の各値が共通のフローエントリが集約されている。
【００８９】
その後、新規の（追加の）通信情報として、ＶＭ２−１とＶＭ３−２との通信，ＶＭ２−２とＶＭ４−１の通信とが通信情報取得部２１で取得されたと仮定する。通信情報の内容（差分）は、図４のテーブル（４）に示す通りである。
【００９０】
すると、フローエントリ算出部２２が、追加のフローエントリとして、図１１のテーブル＜３＞における上から１番目のフローエントリと２番目のフローエントリを作成する。テーブル＜３＞は、スイッチ＃１の集約エントリ群と追加のエントリ（破線矩形で囲まれた２つのフローエントリ）とを合わせた状態を示す。
【００９１】
再集約処理部２５は、フローエントリの追加を契機として、集約エントリ群の集約を解除する。図１２は、第１の再集約方法の例を示す。再集約処理部２５は、フロー情報記憶部２４Ａから得た集約前のフローエントリ群と追加のフローエントリとを一つにまとめる（図１２のテーブル＜４＞参照）。
【００９２】
次に、再集約処理部２５は、テーブル＜４＞を参照し、集約後のフローエントリ数が最少となるパラメータを選択する。図１２に示す例では、ＶＬＡＮ−ＩＤを用いて集約した場合が、フローエントリ数が最少となることが発見される。
【００９３】
すると、再集約処理部２５は、“Dst-IP”（既存の集約ルール）の代わりに、“VLAN-ID”の値と“Action”の値が共通のフローエントリを集約エントリにマージする集約ルー
ルへの変更を行う（集約ルールの再作成）。再集約処理部２５は、再作成した集約ルールで集約を行う。この結果、図１２のテーブル＜５＞に示すように、２つの集約エントリからなる再集約エントリ群が生成される。
【００９４】
このような第１の再集約方法（パラメータの変更）によって、スイッチ＃１に登録するフローエントリ数は２となる。関連技術では、図４のテーブル（６）に示したように、フローエントリ数は３となる。よって、実施形態１によれば、再集約処理によって、フローエントリ数を低減することができる。
【００９５】
図１３は、第２の再集約方法の例を示す。集約の解除によって得られたフローエントリ群（追加のフローエントリを含む）が、図１３のテーブル＜４Ａ＞に示すような内容である場合を仮定する。この場合、ＶＬＡＮ−ＩＤに従ってフローエントリが集約しても、フ
ローエントリ数が３となってしまう（前の集約ルールと結果が異ならない）ことがあり得る。
【００９６】
再集約処理部２５は、集約ルールの作成に用いるパラメータ候補を追加する。すなわち、第１の再集約方法では、クラウドマネージャ１から取得される通信情報で得られるパラメータが、集約ルールの作成に係るパラメータ候補として用いられている。すなわち、通信情報に含まれた送信元ＩＰアドレス，宛先ＩＰアドレス及びＶＬＡＮ−ＩＤがパラメータ候補として用いられ、これらのパラメータ候補の中から集約ルールに用いるパラメータが選択されている。
【００９７】
第２の再集約方法では、パラメータ候補を追加する。例えば、図１３のテーブル＜５Ａ＞に示すように、パラメータ“In_Port（受信ポート）”を各フローエントリに追加する
。“In_Port”の情報は、トポロジＤＢ２６に予め記憶されており、再集約処理部２５は
、“In_Port”の情報を各フローエントリに設定することができる。
【００９８】
再集約処理部２５は、追加のパラメータ候補の選択によってフローエントリ数を最少にできるか否かを試行し、最少にできる場合には、当該パラメータ候補を新たな集約ルールに用いることを決定する。図１３のテーブル＜６＞は、“In_Port”に従って再集約され
た再集約エントリ群を示す。再集約によってフローエントリ数を２にすることができる。
【００９９】
なお、図１３では、“In_Port”が追加された例を示したが、“In_Port”以外のパラメータ（既にパラメータ候補として使用されていないもの）を追加することも可能である。再集約処理部２５は、上記した第１及び第２の再集約方法を用いて、フローエントリ数を最少にできる集約ルールを再作成し、集約前のフローエントリ群を再集約することができる。
【０１００】
＜実施形態１の作用効果＞
実施形態１によれば、フロー情報記憶部２４Ａに集約前のフローエントリ群を記憶しておき、フローエントリの追加を契機として、現在の集約ルール（フローエントリの集約）を解除して再集約処理が実行される。これによって、その時点のフローエントリ群の内容に応じてフローエントリ数が最少となる集約ルールでフローエントリ群を再集約することができる。
【０１０１】
結果として、各スイッチ３のフローテーブル３１には。フローエントリ数が最少となる集約ルールで再集約された集約エントリ群が登録される。これによって、フローテーブル３１に登録されるフロー数を実質的に増やすことができる。従って、各スイッチ３に収容されるホスト４の数を増やすことができ、ネットワークシステムのスケーラビリティの向上を図ることができる。
【０１０２】
実施形態１では、再集約にあたり、集約前のフローエントリ群はコントローラ２Ａで保持され、スイッチ３には保持されない。このため、スイッチ３のメモリ（ＲＡＭ７２）の容量が集約前のフローエントリの情報で圧迫されることがない。
【０１０３】
＜変形例＞
なお、実施形態１では、コントローラ２Ａの内部に設けられたフロー情報記憶部２４Ａに集約前のフローエントリの情報が記憶される例について示した。但し、集約前のフローエントリの情報は、コントローラ側で保存されていれば良い。例えば、集約前のフローエントリの情報がコントローラ２Ａの外部に設けられた記憶部に記憶され、コントローラ２Ａが必要に応じて外部の記憶部から集約前のフローエントリの情報を取得するようにしても良い。
【０１０４】
例えば、集約前のフローエントリの情報が外部装置で保存され、コントローラ２Ａが必要に応じて外部装置から集約前のフローエントリの情報を取得するようにしても良い。外部装置は、例えば、コントローラ２Ａとネットワークを介して通信可能なコンピュータ（たとえば、サーバ）や、コントローラ２Ａに着脱自在な可搬型記憶装置（例えば、半導体メモリ６０）を含む。
【０１０５】
また、実施形態１では、コントローラ２Ａとスイッチ３とが異なる物理装置上に実装される例について説明したが、コントローラ２Ａと少なくとも１つのスイッチ３とが同一の物理装置上に実装されても良い。この場合、コントローラ２Ａとスイッチ３とは物理装置内に設けられた内部ネットワーク（ネットワークの一例）で接続される。また、スイッチ３は、物理スイッチであっても良く、仮想スイッチであっても良い。
【０１０６】
また、実施形態１では、ＳＤＮネットワークの一例としてOpenFlowを示したが、スイッチがフローテーブルを持ち、コントローラがフローエントリを生成してスイッチに送る様な機構を持つ通信規格であれば、OpenFlow以外の通信規格であっても良い。例えば、I2RS
(Interface to the Routing System)に準拠するネットワークシステムに実施形態１は適用可能である。
【０１０７】
〔実施形態２〕
次に、実施形態２について説明する。実施形態２の構成は、実施形態１と共通部分を含むので、主として相違点について説明し、共通点については説明を省略する。実施形態１では、フローエントリの追加を契機に再集約処理が実行されていた。これに対し、実施形態２では、追加のフローエントリを現集約ルールで集約できない（フローエントリ数が増加する）ときに、再集約処理を実行（開始）する。
【０１０８】
図１４は、実施形態２に係るネットワークシステムの構成例を示す図である。図１４において、コントローラ２Ｂが、集約ルール判定部２７をさらに備える点で、実施形態１のコントローラ２Ａと異なっている。その他の構成については、実施形態１と同じであるので説明を省略する。
【０１０９】
図１５は、実施形態２における動作例を示すシーケンス図である。図１５のシーケンスでは、＜７Ａ＞，＜１１Ａ＞及び＜１２Ａ＞の動作が実施形態１のシーケンス（図６）に追加されている。
【０１１０】
実施形態２では、スイッチ３へ送信される集約エントリ群がフロー情報記憶部２４Ａに記憶される（図１５＜７Ａ＞）。また、実施形態２では、フローエントリ算出部２２が、フローエントリ群を集約ルール判定部２７に与える（図１５＜１１Ａ＞）。
【０１１１】
すると、集約ルール判定部２７は、既存の集約ルールで追加のフローエントリを集約可能か否かを判定する。例えば、集約ルール判定部２７は、フロー情報記憶部２４Ａから集約エントリ群及び追加のフローエントリを取得し、追加のフローエントリが集約エントリ群中の集約エントリに集約可能か否かを判定する。
【０１１２】
このとき、例えば、図４のテーブル（５）及びテーブル（６）に示したように、追加のフローエントリを既存の（現在の）集約ルールで集約エントリに集約できない場合には、フローエントリの集約が解除される（図１５＜１３＞）。その後、実施形態１と同様の再集約処理が行われる。再集約エントリ群は、フロー情報記憶部２４Ａに記憶される。
【０１１３】
なお、追加のフローエントリが集約エントリに集約可能である場合には、スイッチ３に
対する処理は行われない。フローテーブル３１の登録内容に変動が生じないからである。以上を除き、動作例は、実施形態１と同じであるので説明を省略する。
【０１１４】
実施形態２のコントローラ２Ｂは、例えば、図７に示した情報処理装置５０を適用可能である。ＣＰＵ５１は、プログラムの実行によって、集約ルール判定部２７として動作することができる。スイッチ３の構成は、実施形態１と同じである。
【０１１５】
図１６は、実施形態２におけるＣＰＵの処理を示すフローチャートである。図１６に示すフローチャートでは、１１〜１４の処理が実施形態１のフローチャート（図９）に追加されている。
【０１１６】
図１６の１１では、ＣＰＵ５１は、新規の（追加の）フローエントリは現在の集約ルールに包含可能であるか否かを判定する。例えば、ＣＰＵ５１は、フロー情報記憶部２４Ａから集約エントリ群と追加のフローエントリとを取得し、追加のフローエントリが既存の集約ルールで用いたパラメータの値と同じパラメータの値を有するか否かを判定する。追加エントリを集約ルールに包含できないとき（１１，ＮＯ）には、０７以降の処理が実行され、再集約処理が実行される。
【０１１７】
これに対し、ＣＰＵ５１は、追加のフローエントリを集約ルールに包含可能であるとき（１１，ＹＥＳ）には、追加のフローエントリの“アクション”が集約エントリの“アクション”と同一か否かを判定する（１２）。アクションが同一であれば、ＣＰＵ５１は、追加のフローエントリを現在の集約ルールに従って集約エントリにマージする（１３）。これに対し、アクションが同一でなければ、新規フローエントリを高優先度に設定する（１４）。
【０１１８】
図１７は、図１６の１２及び１４の処理の具体例の説明図である。図１７におけるテーブルＡは、或る集約エントリ群を示す。その後、追加のフローエントリとして、“Src IP=10.0.0.5”，“Dst IP=10.0.0.1”，“VLAN-ID=20”，“Action=Out=p3”のフローエン
トリが追加された場合を仮定する。
【０１１９】
追加のフローエントリは、図１７のテーブルＡにおける上側の集約エントリＸのＶＬＡＮ−ＩＤと同じ値のＶＬＡＮ−ＩＤ“２０”を有する。このため、図１６の１１の処理において、集約ルールに包含可能と判定される。しかし、当該追加のフローエントリにおける“アクション”の値“Out=p3”は、上記集約エントリＸの値“Out=p4”と異なる。このため、ＣＰＵ５１は、図１７のテーブルＢに示すように、追加のフローエントリを、集約エントリＸの上段に配置する（テーブルＢのフローエントリＹ参照）。
【０１２０】
その後、テーブルＢのような集約エントリ群が対応するスイッチ３へ送信され、フローテーブル３１に登録される。スイッチ３は、フローテーブル３１のフローエントリ群を上から順に参照する。従って、フローエントリＹがフローエントリＸよりも先に参照される。換言すれば、フローエントリＹがフローエントリＸよりも優先的に使用される。従って、テーブルＢのような集約エントリ群をスイッチ３に送ることで、追加のフローエントリを高優先度に設定したのと同じ効果を得られる。
【０１２１】
スイッチ３では、ＶＬＡＮ−ＩＤの値が“２０”であるパケットに対して、さらに、送信元ＩＤアドレス及び宛先ＩＰアドレスの参照を行い、フローエントリＸに合致する場合には、当該パケットをポート“p3”から出力する。フローエントリＸに記憶された送信元ＩＤアドレス及び宛先ＩＰアドレスを有するＶＬＡＮ−ＩＤ＝２０のパケットについては、スイッチ３は、フローエントリＸに従ってポート“p4”から出力する。これによって、“VLAN-ID=20”を持つパケットに対し、適正な転送処理を行うことができる。
【０１２２】
実施形態２によれば、実施形態１と同様の作用効果を得ることができる。さらに、実施形態２によれば、追加のフローエントリが現在の集約ルールで集約できないことを条件に、再集約処理が開始される。従って、現在の集約ルールで追加のフローエントリが集約可能であるときには、再集約処理は実行されない。これによって、無駄となる再集約処理を回避することができ、コントローラ２Ｂの計算資源を有効利用することができる。
【０１２３】
なお、実施形態２において、図１６の１１〜１３に示した処理は、０８の再集約処理において適用することが可能である。また、実施形態２では、各スイッチ３に送られる集約エントリ群（及び再集約エントリ群）がフロー情報記憶部２４Ａに記憶される例について説明したが、＜１２Ａ＞の処理で既存の集約ルールに包含可能か否かが判定できる場合には、集約エントリ群及び再集約エントリ群がフロー情報記憶部２４Ａに記憶されない構成を採用することができる。さらに、図１６に示した処理において、０９の処理及び１３の処理が終了したときには、０５に処理が戻るように変形可能である。
【０１２４】
〔実施形態３〕
次に、実施形態３について説明する。実施形態３の構成は、実施形態１及び実施形態２と共通部分を含むので、主として相違点について説明し、共通点については説明を省略する。実施形態２では、追加のフローエントリを既存の集約ルールで集約できないことを契機に再集約処理が実行されていた。これに対し、実施形態３では、フローエントリの追加によってフローエントリ数が閾値を超過したことを契機に再集約処理を実行（開始）する。
【０１２５】
図１８は、実施形態３に係るネットワークシステムの構成例を示す図である。図１８において、コントローラ２Ｃが、エントリ数閾値判定部２８をさらに備える点で、実施形態２のコントローラ２Ｂと異なっている。その他の構成については、実施形態２と同じであるので説明を省略する。
【０１２６】
図１９は、実施形態３における動作例を示すシーケンス図である。図１９のシーケンスは、＜１２Ｂ＞及び＜１２Ｃ＞の動作が実施形態２のシーケンス（図１５）に追加されている点で、実施形態２と異なる。
【０１２７】
すなわち、実施形態３では、＜１２Ａ＞において、既存の集約ルールで追加のフローエントリを集約できないと判定したときに、集約エントリ群及び追加のフローエントリに関する現在の集約ルールでの集約結果をエントリ数閾値判定部２８に与える（図１９＜１２Ｂ＞）。例えば、図４のテーブル（６）のような、集約エントリと未集約のフローエントリとの集合がエントリ数閾値判定部２８に与えられる。
【０１２８】
エントリ数閾値判定部２８は、フローテーブル３１に関するフローエントリ数の閾値を予め保持している。閾値は、例えばＨＤＤ５４に予め記憶される。エントリ数閾値判定部２８は、フローエントリの集合におけるフローエントリ数を算出し、当該フローエントリ数が閾値を超過するか否かを判定する（図１９＜１２Ｃ＞）。このとき、フローエントリ数が閾値を超過する場合には、エントリ数閾値判定部２８は、フローエントリの集約の解除を再集約処理部２５に通知する（図１９＜１３＞）。以上を除き、動作例は、実施形態２と同じであるので説明を省略する。
【０１２９】
実施形態３に係るコントローラ２Ｂも、情報処理装置５０を適用可能である。ＣＰＵ５１は、プログラムの実行によって、エントリ数閾値判定部２８として動作することができる。図２０は、実施形態３におけるＣＰＵの処理を示すフローチャートである。図２０に示すフローチャートでは、１５の処理が実施形態２のフローチャート（図１６）に追加さ
れている。
【０１３０】
１５の処理は、図１６における１１の処理と０７との処理の間に挿入されている。１５において、ＣＰＵ１５は、フローエントリ数が閾値を超過するか否かを判定する。フローエントリ数が閾値を超過する場合には（１５，ＹＥＳ）、ＣＰＵ５１は、処理を０７に進めて再集約処理を実行する。
【０１３１】
これに対し、フローエントリ数が閾値を超過しない場合（１５，ＮＯ）には、処理が０９に進み、追加のフローエントリが現在の集約ルールで集約された結果としての集約エントリ群が対応するスイッチ３に送信される。以上の処理を除き、図１９に示す処理は図１６に示す処理と同じであるので説明を省略する。
【０１３２】
実施形態３によれば、実施形態１、実施形態２と同様の作用効果を得ることができる。但し、実施形態３では、フローエントリ数が閾値を超過する場合に限って再集約処理が実行される。このように、再集約処理の頻度が低減されることで、再集約処理の頻繁な実施による計算資源の浪費、及び再集約処理に伴うスイッチ３への再集約エントリ群の送信によるネットワークリソースの浪費を回避することが可能となる。
【０１３３】
なお、実施形態３に係る図２０から１１〜１４の処理が省略されても良い。すなわち、フローエントリが追加され、且つフローエントリ数が閾値を超えることを契機として、再集約処理が実行されるようにしても良い。実施形態１〜３に記載の構成は、適宜組み合わせることが可能である。
【符号の説明】
【０１３４】
２Ａ，２Ｂ，２Ｃ・・・コントローラ
３・・・スイッチ
２２・・・フローエントリ算出部
２３・・・集約ルール作成部
２４Ａ・・・フロー情報記憶部
２５・・・再集約処理部
２７・・・集約ルール判定部
２８・・・エントリ数閾値判定部
５１・・・ＣＰＵ
５２・・・ＲＡＭ
５５・・・通信インタフェース
【図１】
2015186213.tif 000003
【図２】
2015186213.tif 000004
【図３】
2015186213.tif 000005
【図４】
2015186213.tif 000006
【図５】
2015186213.tif 000007
【図６】
2015186213.tif 000008
【図７】
2015186213.tif 000009
【図８】
2015186213.tif 000010
【図９】
2015186213.tif 000011
【図１０】
2015186213.tif 000012
【図１１】
2015186213.tif 000013
【図１２】
2015186213.tif 000014
【図１３】
2015186213.tif 000015
【図１４】
2015186213.tif 000016
【図１５】
2015186213.tif 000017
【図１６】
2015186213.tif 000018
【図１７】
2015186213.tif 000019
【図１８】
2015186213.tif 000020
【図１９】
2015186213.tif 000021
【図２０】
2015186213.tif 000022