(57)【特許請求の範囲】
【請求項１】
フローテーブルを備えるノードと、
前記フローテーブル中のフローエントリを設定するコントローラと
を備え、
前記フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われるパケット処理を指定し、
前記ノードが受信した受信パケットがマッチするフローエントリは、ヒットエントリであり、
前記フローテーブル中に前記ヒットエントリが存在する場合、前記ノードは、前記ヒットエントリで指定される前記パケット処理を前記受信パケットに対して行い、
前記フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、前記ノードは、前記第１フローエントリを前記フローテーブルから消去し、
前記消去条件は、前記第１フローエントリの設定後に前記第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む
というフロー通信システムであって、
前記フローテーブル中に設定される各フローエントリは、更に、処理残量をパラメータとして有し、
前記コントローラは、新たなフローエントリを設定する際、前記処理残量を前記所定の消去単位長に初期設定し、
前記ノードは、前記第１フローエントリが前記ヒットエントリとなった場合、前記第１フローエントリの前記処理残量をチェックし、
前記処理残量が前記受信パケットのパケット長以上である場合、前記ノードは、前記第１フローエントリの前記処理残量を前記受信パケットのパケット長分だけ減らし、
前記処理残量が前記受信パケットのパケット長未満の場合、前記消去条件が満たされ、前記ノードは前記第１フローエントリを前記フローテーブルから消去する
フロー通信システム。
【請求項２】
請求項１に記載のフロー通信システムであって、
前記フローテーブル中に前記ヒットエントリが存在しない場合、あるいは、前記消去条件が満たされた場合、前記ノードは、前記受信パケットを第１パケットとして前記コントローラに転送し、
前記コントローラは、前記第１パケットの受信に応答して、前記第１パケットを処理するための新たなフローエントリを前記フローテーブルに設定する
フロー通信システム。
【請求項３】
請求項２に記載のフロー通信システムであって、
複数のメッセージが単一フローによって通信され、
前記コントローラは、前記複数のメッセージの各々のメッセージ長に基づいて、前記所定の消去単位長を決定し、前記複数のメッセージ毎に異なるフローエントリを順番に設定する
フロー通信システム。
【請求項４】
請求項３に記載のフロー通信システムであって、
前記メッセージ長は、メッセージヘッダ内で示されており、
前記第１パケットのパケットデータの先頭に前記メッセージヘッダが存在する場合、前記コントローラは、前記メッセージヘッダに基づいて前記新たなフローエントリを設定し、その後、前記第１パケットを前記ノードに返送する
フロー通信システム。
【請求項５】
請求項４に記載のフロー通信システムであって、
前記第１パケットのパケットデータの先頭に前記メッセージヘッダが存在しない場合、前記コントローラは、前記第１パケットを第２パケットと第３パケットとに分割し、
前記第２パケットは、前記第１パケットの前記パケットデータのうち前記メッセージヘッダまでの部分をパケットデータとして有し、
前記第３パケットは、前記第１パケットの前記パケットデータのうち前記メッセージヘッダ以降の部分をパケットデータとして有し、
前記コントローラは、前記第２パケットに対して適用すべき前記パケット処理を指示しながら、前記第２パケットを前記ノードに返送し、
前記コントローラは、前記メッセージヘッダに基づいて前記新たなフローエントリを設定し、その後、前記第３パケットを前記ノードに返送する
フロー通信システム。
【請求項６】
請求項１に記載のフロー通信システムであって、
前記ノードは、オープンフロースイッチであり、
前記コントローラは、オープンフローコントローラである
フロー通信システム。
【請求項７】
フローテーブルを管理するテーブル管理部と、
受信パケットに対してパケット処理を行うパケット処理部と
を備え、
前記フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われる前記パケット処理を指定し、
前記受信パケットがマッチするフローエントリは、ヒットエントリであり、
前記フローテーブル中に前記ヒットエントリが存在する場合、前記パケット処理部は、前記ヒットエントリで指定される前記パケット処理を前記受信パケットに対して行い、
前記フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、前記テーブル管理部は、前記第１フローエントリを前記フローテーブルから消去し、
前記消去条件は、前記第１フローエントリの設定後に前記第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む
というノードであって、
前記フローテーブル中に設定される各フローエントリは、更に、処理残量をパラメータとして有し、
前記フローテーブルに新たなフローエントリが設定される際、前記処理残量は、前記所定の消去単位長に初期設定され、
前記第１フローエントリが前記ヒットエントリとなった場合、前記テーブル管理部は、前記第１フローエントリの前記処理残量をチェックし、
前記処理残量が前記受信パケットのパケット長以上である場合、前記テーブル管理部は、前記第１フローエントリの前記処理残量を前記受信パケットのパケット長分だけ減らし、
前記処理残量が前記受信パケットのパケット長未満の場合、前記消去条件が満たされ、前記テーブル管理部は前記第１フローエントリを前記フローテーブルから消去する
ノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フローテーブルを用いたフロー通信システムに関する。
【背景技術】
【０００２】
非特許文献１（Ｎｉｃｋ  ＭｃＫｅｏｗｎ  ｅｔ  ａｌ．，  “ＯｐｅｎＦｌｏｗ：  Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ”，  ＡＣＭ  ＳＩＧＣＯＭＭ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｒｅｖｉｅｗ，  Ｖｏｌ．  ３８，  Ｎｏ．  ２，  ２００８）に、「オープンフロー（ＯｐｅｎＦｌｏｗ）」という技術が記載されている。一般的に、オープンフローでは、フロー単位で経路制御、障害回復、負荷分散、最適化が行われる。オープンフローでは、転送ノードとして機能するオープンフロースイッチ（ＯＦＳ）と、そのオープンフロースイッチを制御するオープンフローコントローラ（ＯＦＣ）が用いられる。
【０００３】
図１を参照して、オープンフローにおける一般的なパケット処理を説明する。オープンフロースイッチは、フローテーブルを有しており、そのフローテーブルに従ってパケット処理を行う。フローテーブル中の各フローエントリは、マッチ条件（Ｋｅｙ）、アクション（Ａｃｔｉｏｎ）、統計情報（Ｓｔａｔ）、タイムアウト値（Ｔｉｍｅｏｕｔ）といったフィールドを有している。マッチ条件は、パケットヘッダを構成するフィールドの組み合わせで表され、受信パケットが当該フローエントリにマッチするか否かを判定するために用いられる。アクションは、マッチ条件にマッチするパケットに対して行われるパケット処理の内容（例：指定ポートへの出力）を示している。
【０００４】
オープンフロースイッチは、あるフローに属するパケットを受信すると、フローテーブルを参照し、当該受信パケットにマッチするマッチ条件を有するフローエントリを検索する。受信パケットにマッチするフローエントリは、以下「ヒットエントリ」と参照される。フローテーブルにヒットエントリが未だ設定されていない場合（ｍｉｓｓ）、オープンフロースイッチは、当該受信パケットをエントリ設定要求（第１パケット）としてオープンフローコントローラに送信する。
【０００５】
オープンフローコントローラは、オープンフロースイッチからエントリ設定要求（第１パケット）を受け取る。第１パケットの受信に応答して、オープンフローコントローラは、その第１パケットを処理するための新規フローエントリを作成し、その新規フローエントリをオープンフロースイッチのフローテーブルに設定する。具体的には、オープンフローコントローラは、新規フローエントリをフローテーブルに追加するようオープンフロースイッチに指示し、オープンフロースイッチは、その指示に従って新規フローエントリをフローテーブルに追加する。
【０００６】
その後、オープンフローコントローラは、第１パケットをオープンフロースイッチに返送する。オープンフロースイッチは、その第１パケットを受信パケットとして再度受け取る。このとき、第１パケットにマッチするヒットエントリが、フローテーブルに存在している（ｈｉｔ）。この場合、オープンフロースイッチは、当該ヒットエントリのアクションで指定されている処理を、受信パケットに対して実行する。それ以降、第１パケットと同じフローに属するパケットは、オープンフローコントローラを介することなく、同じヒットエントリに従って処理されることになる。
【０００７】
尚、あるフローエントリが新たに設定された時刻から所定の時間が経過した場合、あるいは、あるフローエントリが最後にヒットエントリとなった時刻から所定の時間が経過した場合、当該フローエントリはフローテーブルから消去される。その所定の時間を指定するのが、各フローエントリ中のタイムアウト値（Ｔｉｍｅｏｕｔ）である。すなわち、オープンフロースイッチは、各フローエントリのタイムアウトを監視し、あるフローエントリのタイムアウトが発生した場合、当該フローエントリをフローテーブルから消去（削除）する。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Ｎｉｃｋ  ＭｃＫｅｏｗｎ  ｅｔ  ａｌ．，  “ＯｐｅｎＦｌｏｗ：  Ｅｎａｂｌｉｎｇ  Ｉｎｎｏｖａｔｉｏｎ  ｉｎ  Ｃａｍｐｕｓ  Ｎｅｔｗｏｒｋｓ”，  ＡＣＭ  ＳＩＧＣＯＭＭ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｒｅｖｉｅｗ，  Ｖｏｌ．  ３８，  Ｎｏ．  ２，  ２００８．  （ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｗｐ−ｌａｔｅｓｔ．ｐｄｆ）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本願発明者は、次の点に着目した。図１で示されたような一般的なオープンフローの場合、単一フローに属するパケット列に対して、同じパケット処理が実施される。逆に言えば、単一フローに属するパケット列に対して、条件によって、異なるパケット処理（異なる出力ポートに出力する等）を実施することはできない。例えば、複数のメッセージが単一フローで伝送される場合に、メッセージ毎に異なるスイッチ処理を行うことはできない。
【００１０】
本発明の１つの目的は、単一フローに属するパケット列に対して、複数種類のパケット処理を実施することができる技術を提供することにある。
【課題を解決するための手段】
【００１１】
本発明の１つの観点において、フロー通信システムが提供される。フロー通信システムは、フローテーブルを備えるノードと、フローテーブル中のフローエントリを設定するコントローラと、を備える。フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われるパケット処理を指定する。ノードが受信した受信パケットがマッチするフローエントリは、ヒットエントリである。フローテーブル中にヒットエントリが存在する場合、ノードは、ヒットエントリで指定されるパケット処理を受信パケットに対して行う。フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、ノードは、第１フローエントリをフローテーブルから消去する。その消去条件は、第１フローエントリの設定後に第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む。
【００１２】
本発明の他の観点において、ノードが提供される。そのノードは、フローテーブルを管理するテーブル管理部と、受信パケットに対してパケット処理を行うパケット処理部と、を備える。フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われるパケット処理を指定する。受信パケットがマッチするフローエントリは、ヒットエントリである。フローテーブル中にヒットエントリが存在する場合、パケット処理部は、ヒットエントリで指定されるパケット処理を受信パケットに対して行う。フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、テーブル管理部は、第１フローエントリをフローテーブルから消去する。その消去条件は、第１フローエントリの設定後に第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む。
【発明の効果】
【００１３】
本発明によれば、単一フローに属するパケット列に対して、複数種類のパケット処理を実施することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】図１は、一般的なオープンフローを説明するための概念図である。
【図２】図２は、本発明の実施の形態に係るフロー通信を示す概念図である。
【図３】図３は、本発明の実施の形態に係るフロー通信を示す概念図である。
【図４】図４は、本発明の実施の形態に係るフロー通信システムの構成を示すブロック図である。
【図５】図５は、本発明の実施の形態に係るフローテーブルを示す概念図である。
【図６】図６は、本発明の実施の形態に係るノードによる処理を示すフローチャートである。
【図７】図７は、本発明の実施の形態に係るコントローラによる処理を示すフローチャートである。
【図８】図８は、本発明の実施の形態に係るフロー通信システムにおける第１の処理例を示している。
【図９】図９は、本発明の実施の形態においてフラグメントが必要なパケットを説明するための概念図である。
【図１０】図１０は、本発明の実施の形態に係るフロー通信システムにおける第２の処理例を示している。
【図１１】図１１は、本発明の実施の形態の第１の応用例を示している。
【図１２】図１２は、本発明の実施の形態の第１の応用例における処理を示している。
【図１３】図１３は、本発明の実施の形態の第２の応用例を示している。
【図１４】図１４は、本発明の実施の形態の第２の応用例における処理を示している。
【発明を実施するための形態】
【００１５】
添付図面を参照して、本発明の実施の形態を説明する。
【００１６】
１．概要
図２は、本発明の実施の形態に係るフロー通信を概念的に示している。図２において、Ａ個のパケットＰ−１１〜Ｐ−１Ａからなる第１パケット群と、Ｂ個のパケットＰ−２１〜Ｐ−２Ｂからなる第２パケット群とは、同一フローに属しているとする。
【００１７】
本実施の形態によれば、それら第１パケット群と第２パケット群に対して、それぞれ異なるパケット処理（Ａｃｔｉｏｎ１，Ａｃｔｉｏｎ２）を適用することが可能である。それを実現するために、第１パケット群があるフローエントリに従って処理されると、当該フローエントリはフローテーブルから消去される。その後、第２パケット群を処理するための別のフローエントリが新たに設定される。これにより、第１パケット群と第２パケット群に対して、それぞれ異なるパケット処理を適用することが可能となる。
【００１８】
すなわち、本実施の形態によれば、フローエントリをフローテーブルから消去する条件として、従来のタイムアウト（Ｔｉｍｅｏｕｔ）とは別に、パケット処理量に依存する新たな消去条件が導入される。その新たな消去条件は、「あるフローエントリによって処理されたパケット量が、所定の量を超えること」である。より詳細には、新たな消去条件は、「あるフローエントリの設定後に当該フローエントリにマッチした全ての受信パケットのパケット長の総和が、所定の消去単位長を超えること」である。これにより、同一フローに属するパケット列に対して、消去単位長毎に、パケット処理を変えることが可能となる。
【００１９】
一例として、図３に示されるように、複数のメッセージ（Ｍ１，Ｍ２）が単一フローによって通信される場合を考える。ここで、メッセージとは、パケットよりも上位層（典型的にはアプリケーション層）が送受信するデータの単位のことである。メッセージの例として、ＨＴＴＰのリクエストやレスポンスが挙げられる。本実施の形態によれば、複数のメッセージが同一フローで伝送される場合に、メッセージ毎にパケット処理を変えることができる。例えば、図３に示されるように、パケットＰ−１１〜Ｐ−１Ａに分割されて伝送されるメッセージＭ１には、パケット処理Ａｃｔｉｏｎ１が適用される。そのパケット処理Ａｃｔｉｏｎ１を指定するフローエントリに関する消去単位長は、メッセージＭ１のメッセージ長に応じた値に設定されればよい。その結果、メッセージＭ１に対するパケット処理が完了すると、当該フローエントリが消去される。そして、その後、第２メッセージＭ２を処理するために、新たなフローエントリがフローテーブルに設定される。その新たなフローエントリに関する消去単位長は、メッセージＭ２のメッセージ長に設定されればよい。
【００２０】
以上に説明されたように、本実施の形態によれば、単一フローに属するパケット列に対して、複数種類のパケット処理を実施することが可能となる。
【００２１】
２．構成
図４は、本実施の形態に係るフロー通信システム１の構成を示すブロック図である。フロー通信システム１は、ノード１０及びコントローラ２０を備えている。ノード１０とコントローラ２０は、互いに通信可能に接続されている。例えば、オープンフローの場合、ノード１０はオープンフロースイッチ（ＯＦＳ）であり、コントローラ２０はオープンフローコントローラ（ＯＦＣ）である。
【００２２】
ノード１０は、フローテーブルＴＢＬを有しており、そのフローテーブルＴＢＬに従ってパケット処理を行う。より詳細には、ノード１０は、テーブル管理部１１、パケット処理部１２、コントローラ通信部１３、及びＮ個のポート１５−１〜１５−Ｎを備えている。テーブル管理部１１は、フローテーブルＴＢＬの管理を行う。テーブル管理部１１は記憶装置を含んでおり、フローテーブルＴＢＬはその記憶装置に格納されている。パケット処理部１２は、ポート１５（入力ポート）を通してパケットを受信する。また、パケット処理部１２は、フローテーブルＴＢＬを参照して、その受信パケットに対してパケット処理を行う。更に、パケット処理部１２は、ポート１５（出力ポート）を通してパケットを送信する。コントローラ通信部１３は、コントローラ２０との通信機能を有している。オープンフローの場合、ＳｅｃｕｒｅＣｈａｎｎｅｌがコントローラ通信部１３に相当する。
【００２３】
コントローラ２０は、フローテーブルＴＢＬ中のフローエントリを設定する。
【００２４】
図５は、本実施の形態に係るフローテーブルＴＢＬを示す概念図である。フローテーブルＴＢＬは、０個以上のフローエントリ（ＥＮＴ１，ＥＮＴ２，ＥＮＴ３・・・）を有する。各フローエントリＥＮＴは、マッチ条件（Ｋｅｙ）、アクション（Ａｃｔｉｏｎ）、統計情報（Ｓｔａｔ）、タイムアウト値（Ｔｉｍｅｏｕｔ）といったフィールドを有している。マッチ条件は、パケットヘッダを構成するフィールドの組み合わせで表され、受信パケットが当該フローエントリＥＮＴにマッチするか否かを判定するために用いられる。アクションは、マッチ条件にマッチするパケットに対して行われるパケット処理の内容（例：指定ポートへの出力）を示している。
【００２５】
本実施の形態によれば、各フローエントリＥＮＴは、更に、“Ｂｙｔｅ＿ｅｘｐｉｒｅ”というパラメータを有している。このＢｙｔｅ＿ｅｘｐｉｒｅは、当該フローエントリＥＮＴが消去されるまでに許容されるパケット処理量である。つまり、Ｂｙｔｅ＿ｅｘｐｉｒｅは、エントリ消去までの「処理残量」に相当する。あるフローエントリＥＮＴが新規に設定される場合、このＢｙｔｅ＿ｅｘｐｉｒｅは、上述の所定の消去単位長に初期設定される。そして、当該フローエントリＥＮＴがヒットエントリとなるたびに、Ｂｙｔｅ＿ｅｘｐｉｒｅは、受信パケットのパケット長分だけ減らされる。このＢｙｔｅ＿ｅｘｐｉｒｅが受信パケットのパケット長未満になることは、上述の「消去条件」が満たされることに相当する。従って、その場合、当該フローエントリＥＮＴがフローテーブルＴＢＬから消去される。
【００２６】
３．処理フロー
以下、本実施の形態に係るフロー通信システムによる処理フローを説明する。図６は、ノード１０による処理を示すフローチャートである。図７は、コントローラ２０による処理を示すフローチャートである。
【００２７】
図４〜図７を適宜参照して、図８に示される処理例を説明する。図８に示される処理例では、複数のメッセージ（Ｍ１，Ｍ２）が単一フローによって通信される。ここで、各メッセージ（可変長（ＴＬＶ：Ｔｙｐｅ−Ｌｅｎｇｔｈ−Ｖａｌｕｅ）メッセージ）のメッセージ長はパケット長よりも長く、各メッセージは複数のパケットに分割されて伝送される。例えば、パケット長は１５００バイトであり、メッセージ長は７３００バイトである。尚、メッセージ長は、各メッセージの先頭にあるメッセージヘッダ（図中、符号“ｈ”で表されている）内で示されている。
【００２８】
まず、ノード１０のパケット処理部１２は、メッセージＭ１の最初のパケットを受け取る（ステップＳ１０）。パケットを受け取ると、パケット処理部１２は、フローテーブルＴＢＬを参照し、当該受信パケットにマッチするマッチ条件を有するフローエントリを検索する（ステップＳ１１）。受信パケットにマッチするフローエントリは、以下「ヒットエントリ」と参照される。
【００２９】
現段階では、フローテーブルＴＢＬにヒットエントリが存在しないとする（ステップＳ１２；Ｎｏ）。この場合、パケット処理部１２は、受信パケットを第１パケット（エントリ設定要求）とし、その第１パケットをコントローラ通信部１３を介してコントローラ２０に転送する（ステップＳ１７）。
【００３０】
コントローラ２０は、ノード１０から第１パケットを受信する（ステップＳ２０）。次に、コントローラ２０は、第１パケットに基づいて、第１パケットの分割が必要か否かを判断する（ステップＳ２１）。図８に示される処理例では、パケットの分割は不要であるとする（ステップＳ２１；Ｎｏ）。この場合、コントローラ２０は、第１パケットに基づいて、第１パケットを処理するための新規フローエントリＥＮＴをフローテーブルＴＢＬに設定する（ステップＳ２２）。
【００３１】
より詳細には、コントローラ２０はまず、第１パケットを処理するための新規フローエントリＥＮＴを作成する。このとき、コントローラ２０は、新規フローエントリＥＮＴのＢｙｔｅ＿ｅｘｐｉｒｅの初期値（消去単位長）を決定する。本例では、メッセージ毎にパケット処理を変えるために、消去単位長はメッセージ長に応じた値に設定される。そのために、コントローラ２０は、第１パケットのパケットデータの先頭にあるメッセージヘッダを参照してメッセージ長（＝７３００バイト）を取得し、そのメッセージ長に応じた消去単位長にＢｙｔｅ＿ｅｘｐｉｒｅを初期設定する。例えば、パケットヘッダ長による増加分を考慮して、消去単位長（Ｂｙｔｅ＿ｅｘｐｉｒｅの初期値）は７５００バイトに決定される。そして、コントローラ２０は、新規フローエントリＥＮＴをフローテーブルＴＢＬに追加するよう、ノード１０に指示する。
【００３２】
ノード１０のコントローラ通信部１３は、コントローラ２０からエントリ設定指示を受け取り、そのエントリ設定指示をテーブル管理部１１に渡す。テーブル管理部１１は、そのエントリ設定指示に従って、新規フローエントリＥＮＴをフローテーブルＴＢＬに追加する（ステップＳ１８）。その後、コントローラ２０は、第１パケットをノード１０に返送する（ステップＳ２３）。
【００３３】
ノード１０のパケット処理部１２は、第１パケットを受信パケットとして再度受け取る（ステップＳ１０）。パケット処理部１２は、受信パケットにマッチするヒットエントリをフローテーブルＴＢＬから検索する（ステップＳ１１）。今回は、フローテーブルＴＢＬにヒットエントリが存在している（ステップＳ１２；Ｙｅｓ）。
【００３４】
ヒットエントリが存在する場合、テーブル管理部１１は、当該ヒットエントリのＢｙｔｅ＿ｅｘｐｉｒｅをチェックする（ステップＳ１３）。具体的には、テーブル管理部１１は、ヒットエントリのＢｙｔｅ＿ｅｘｐｉｒｅが受信パケットのパケット長ＬＥＮ（＝１５００バイト）以上か否かをチェックする。ヒットエントリのＢｙｔｅ＿ｅｘｐｉｒｅが受信パケットのパケット長ＬＥＮ以上である場合（ステップＳ１３；Ｙｅｓ）、テーブル管理部１１は、ヒットエントリのＢｙｔｅ＿ｅｘｐｉｒｅを当該パケット長ＬＥＮの分だけ減らす（ステップＳ１４）。そして、パケット処理部１２は、当該ヒットエントリのアクションで指定されているパケット処理を、受信パケットに対して実行する（ステップＳ１５）。
【００３５】
このようにして、第１パケットに続くパケットは、コントローラ２０を介することなく、同じフローエントリＥＮＴに従って処理されることになる。また、フローエントリＥＮＴがヒットエントリとなるたびに、当該フローエントリＥＮＴのＢｙｔｅ＿ｅｘｐｉｒｅはパケット長ＬＥＮ（＝１５００バイト）ずつ減っていく。図８に示される例では、メッセージＭ１の全てのパケットに対する処理が完了したときに、フローエントリＥＮＴのＢｙｔｅ＿ｅｘｐｉｒｅは“０”になっている。
【００３６】
次に、ノード１０のパケット処理部１２は、メッセージＭ２の最初のパケットを受け取る（ステップＳ１０）。この場合、フローテーブルＴＢＬにヒットエントリは存在する（ステップＳ１２；Ｙｅｓ）が、当該ヒットエントリのＢｙｔｅ＿ｅｘｐｉｒｅは受信パケットのパケット長ＬＥＮ未満である（ステップＳ１３；Ｎｏ）。これは、当該フローエントリＥＮＴに関する消去条件が満たされたことを意味する。従って、テーブル管理部１１は、当該フローエントリＥＮＴをフローテーブルＴＢＬから消去する（ステップＳ１６）。更に、パケット処理部１２は、受信パケットを第１パケット（エントリ設定要求）とし、その第１パケットをコントローラ通信部１３を介してコントローラ２０に転送する（ステップＳ１７）。その後、メッセージＭ２に関しても同様の処理が実行される。
【００３７】
このように、本例によれば、複数のメッセージ毎に異なるフローエントリが順番に設定される。その結果、複数のメッセージが同一フローで伝送される場合であっても、メッセージ毎にパケット処理を変えることが可能となる。
【００３８】
次に、他の処理例を説明する。複数のメッセージが同一フローで伝送される場合、メッセージ境界を含むパケットが存在し得る。例えば図９に示されるように、ある１つのパケットＰＡのパケットデータに、メッセージＭ１のデータとメッセージＭ２のデータの両方が含まれる場合があり得る。具体的には、そのパケットＰＡのパケットデータの前半部分にはメッセージＭ１の最後尾のデータがあり、その後半部分にはメッセージＭ２のメッセージヘッダを含む先頭のデータがある。この場合、メッセージ毎にパケット処理を変えるためには、当該パケットＰＡの分割（フラグメント）が必要となる。
【００３９】
図１０は、そのようなパケットＰＡの分割が行われる場合の処理例を示している。図１０に示される処理例において、ノード１０がパケットＰＡを受信したとき、消去条件が満たされており、そのパケットＰＡが第１パケットとしてコントローラ２０に転送されるとする。
【００４０】
コントローラ２０は、ノード１０からパケットＰＡ（第１パケット）を受信する（ステップＳ２０）。次に、コントローラ２０は、パケットＰＡに基づいて、パケットＰＡの分割が必要か否かを判断する（ステップＳ２１）。本例では、パケットＰＡのパケットデータの先頭にメッセージヘッダが存在していない。この場合、コントローラ２０は、パケット分割が必要であると判断し（ステップＳ２１；Ｙｅｓ）、パケットＰＡを前半パケットＰＢと後半パケットＰＣに分割する（ステップＳ２４）。前半パケットＰＢは、パケットＰＡのパケットデータのうちメッセージヘッダまでの前半部分をパケットデータとして有する。一方、後半パケットＰＣは、パケットＰＡのパケットデータのうちメッセージヘッダ以降の部分をパケットデータとして有する。
【００４１】
コントローラ２０は、前半パケットＰＢをノード１０に返送する（ステップＳ２５）。このとき、前半パケットＰＢにマッチするフローエントリＥＮＴは既に消去されているため、コントローラ２０は、前半パケットＰＢに対して適用すべきパケット処理を合わせて指示する。ノード１０のパケット処理部１２は、その指示に従って、前半パケットＰＢを処理する。
【００４２】
一方、コントローラ２０は、後半パケットＰＣに基づいて、後半パケットＰＣを処理するための新規フローエントリＥＮＴをフローテーブルＴＢＬに設定する（ステップＳ２６）。このとき、コントローラ２０は、後半パケットＰＣのパケットデータの先頭にあるメッセージヘッダを参照してメッセージ長を取得し、そのメッセージ長に応じた消去単位長にＢｙｔｅ＿ｅｘｐｉｒｅを初期設定する。新規フローエントリＥＮＴがフローテーブルＴＢＬに追加された後、コントローラ２０は、後半パケットＰＣをノード１０に返送する（ステップＳ２７）。その後半パケットＰＣは、新規フローエントリＥＮＴに従って処理される。このようにして、メッセージ毎にパケット処理を変えることが可能となる。
【００４３】
尚、パケットヘッダ長を考慮せずに、メッセージ長そのものが消去単位長に設定されてもよい。この場合、早めに消去条件が満たされることになるが、特に問題ない。
【００４４】
また、本実施の形態は、タイムアウトに依存するエントリ消去処理と併用されてもよい。
【００４５】
４．応用例
４−１．第１の応用例
図１１及び図１２は、本実施の形態の第１の応用例を示している。第１の応用例は、単一ＴＣＰフローに複数のＨＴＴＰメッセージ（Ｍ１，Ｍ２）が多重された場合のロードバランス処理に関する。ノード１０はオープンフロースイッチ（ＯＦＳ）であり、コントローラ２０はオープンフローコントローラ（ＯＦＣ）である。キープアライブオプションの場合、１つのＴＣＰコネクションに複数のＨＴＴＰメッセージが入る。オープンフローコントローラ２０は、各ＨＴＴＰメッセージのメッセージヘッダに基づいて、当該ＨＴＴＰメッセージのパケットの配送先サーバ４０を決定する。そして、オープンフローコントローラ２０は、ＨＴＴＰメッセージ毎に、配送先サーバ４０をＴＣＰディスパッチャ３０に指示する。ＴＣＰディスパッチャ３０は、それぞれのパケットを、指定された配送先サーバ４０に配送する。例えば、ＨＴＴＰメッセージＭ１はサーバ４０−１に配送され、ＨＴＴＰメッセージＭ２はサーバ４０−２に配送される。このように、単一ＴＣＰフローに複数のＨＴＴＰメッセージが多重された場合であっても、ロードバランス処理が可能となる。
【００４６】
４−２．第２の応用例
図１３及び図１４は、本実施の形態の第２の応用例を示している。第２の応用例は、単一ＴＣＰフローに複数のｉＳＣＳＩ  ＬＵＮのフローが多重された場合に関する。特定のｉＳＣＳＩ  ＬＵＮのフローだけを優先的に配送するために、本実施の形態が適用可能である。ノード１０はＮＩＣであり、コントローラ２０はｖｓｗｉｔｃｈである。ｖｓｗｉｔｃｈ２０は、ヘッダを参照して、それぞれのＰＤＵを載せるフロー（通常フローあるいは優先フロー）を決定する。そして、ｖｓｗｉｔｃｈ２０は、特定のｉＳＣＳＩ  ＬＵＮのみを優先フローにする。
【００４７】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【００４８】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００４９】
（付記１）
フローテーブルを備えるノードと、
前記フローテーブル中のフローエントリを設定するコントローラと
を備え、
前記フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われるパケット処理を指定し、
前記ノードが受信した受信パケットがマッチするフローエントリは、ヒットエントリであり、
前記フローテーブル中に前記ヒットエントリが存在する場合、前記ノードは、前記ヒットエントリで指定される前記パケット処理を前記受信パケットに対して行い、
前記フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、前記ノードは、前記第１フローエントリを前記フローテーブルから消去し、
前記消去条件は、前記第１フローエントリの設定後に前記第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む
フロー通信システム。
【００５０】
（付記２）
付記１に記載のフロー通信システムであって、
前記フローテーブル中に設定される各フローエントリは、更に、処理残量をパラメータとして有し、
前記コントローラは、新たなフローエントリを設定する際、前記処理残量を前記所定の消去単位長に初期設定し、
前記ノードは、前記第１フローエントリが前記ヒットエントリとなった場合、前記第１フローエントリの前記処理残量をチェックし、
前記処理残量が前記受信パケットのパケット長以上である場合、前記ノードは、前記第１フローエントリの前記処理残量を前記受信パケットのパケット長分だけ減らし、
前記処理残量が前記受信パケットのパケット長未満の場合、前記消去条件が満たされ、前記ノードは前記第１フローエントリを前記フローテーブルから消去する
フロー通信システム。
【００５１】
（付記３）
付記１又は２に記載のフロー通信システムであって、
前記フローテーブル中に前記ヒットエントリが存在しない場合、あるいは、前記消去条件が満たされた場合、前記ノードは、前記受信パケットを前記第１パケットとして前記コントローラに転送し、
前記コントローラは、前記第１パケットの受信に応答して、前記第１パケットを処理するための新たなフローエントリを前記フローテーブルに設定する
フロー通信システム。
【００５２】
（付記４）
付記３に記載のフロー通信システムであって、
複数のメッセージが単一フローによって通信され、
前記コントローラは、前記複数のメッセージの各々のメッセージ長に基づいて、前記所定の消去単位長を決定し、前記複数のメッセージ毎に異なるフローエントリを順番に設定する
フロー通信システム。
【００５３】
（付記５）
付記４に記載のフロー通信システムであって、
前記メッセージ長は、メッセージヘッダ内で示されており、
前記第１パケットのパケットデータの先頭に前記メッセージヘッダが存在する場合、前記コントローラは、前記メッセージヘッダに基づいて前記新たなフローエントリを設定し、その後、前記第１パケットを前記ノードに返送する
フロー通信システム。
【００５４】
（付記６）
付記５に記載のフロー通信システムであって、
前記第１パケットのパケットデータの先頭に前記メッセージヘッダが存在しない場合、前記コントローラは、前記第１パケットを第２パケットと第３パケットとに分割し、
前記第２パケットは、前記第１パケットの前記パケットデータのうち前記メッセージヘッダまでの部分をパケットデータとして有し、
前記第３パケットは、前記第１パケットの前記パケットデータのうち前記メッセージヘッダ以降の部分をパケットデータとして有し、
前記コントローラは、前記第２パケットに対して適用すべき前記パケット処理を指示しながら、前記第２パケットを前記ノードに返送し、
前記コントローラは、前記メッセージヘッダに基づいて前記新たなフローエントリを設定し、その後、前記第３パケットを前記ノードに返送する
フロー通信システム。
【００５５】
（付記７）
付記１乃至６のいずれか一項に記載のフロー通信システムであって、
前記ノードは、オープンフロースイッチであり、
前記コントローラは、オープンフローコントローラである
フロー通信システム。
【００５６】
（付記８）
フローテーブルを管理するテーブル管理部と、
受信パケットに対してパケット処理を行うパケット処理部と
を備え、
前記フローテーブル中に設定される各フローエントリは、マッチ条件にマッチするパケットに対して行われる前記パケット処理を指定し、
前記受信パケットがマッチするフローエントリは、ヒットエントリであり、
前記フローテーブル中に前記ヒットエントリが存在する場合、前記パケット処理部は、前記ヒットエントリで指定される前記パケット処理を前記受信パケットに対して行い、
前記フローテーブル中のあるフローエントリである第１フローエントリに関する消去条件が満たされた場合、前記テーブル管理部は、前記第１フローエントリを前記フローテーブルから消去し、
前記消去条件は、前記第１フローエントリの設定後に前記第１フローエントリにマッチした全ての受信パケットのパケット長の総和が所定の消去単位長を超えることを含む
ノード。
【００５７】
（付記９）
付記８に記載のノードであって、
前記フローテーブル中に設定される各フローエントリは、更に、処理残量をパラメータとして有し、
前記フローテーブルに新たなフローエントリが設定される際、前記処理残量は、前記所定の消去単位長に初期設定され、
前記第１フローエントリが前記ヒットエントリとなった場合、前記テーブル管理部は、前記第１フローエントリの前記処理残量をチェックし、
前記処理残量が前記受信パケットのパケット長以上である場合、前記テーブル管理部は、前記第１フローエントリの前記処理残量を前記受信パケットのパケット長分だけ減らし、
前記処理残量が前記受信パケットのパケット長未満の場合、前記消去条件が満たされ、前記テーブル管理部は前記第１フローエントリを前記フローテーブルから消去する
ノード。
【００５８】
本出願は、２０１１年２月１７日に出願された日本国特許出願２０１１−０３１７３７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００５９】
１    フロー通信システム
１０    ノード
１１    テーブル管理部
１２    パケット処理部
１３    コントローラ通信部
１５    ポート
２０    コントローラ
ＴＢＬ    フローテーブル
【図１】
0005884822.tif 000002
【図２】
0005884822.tif 000003
【図３】
0005884822.tif 000004
【図４】
0005884822.tif 000005
【図５】
0005884822.tif 000006
【図６】
0005884822.tif 000007
【図７】
0005884822.tif 000008
【図８】
0005884822.tif 000009
【図９】
0005884822.tif 000010
【図１０】
0005884822.tif 000011
【図１１】
0005884822.tif 000012
【図１２】
0005884822.tif 000013
【図１３】
0005884822.tif 000014
【図１４】
0005884822.tif 000015