(57)【特許請求の範囲】
【請求項１】
パケット転送装置と、
前記パケット転送装置とネットワークを介して接続され、前記パケット転送装置で受信されるパケットの処理内容を前記パケット転送装置へ送る制御装置とを備え、
前記パケット転送装置は、
前記制御装置から受信された前記パケットの処理内容を記憶する記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されておらず且つ蓄積が指定されたパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部とを含み、
前記制御装置は、
前記問い合わせメッセージを受信した場合に前記問い合わせメッセージ中の各パケットに対応する処理内容を前記パケット転送装置へ送信する処理を行う処理部を含む
パケット転送システム。
【請求項２】
前記制御部は、前記バッファへの蓄積対象のパケット中の所定情報と同一の情報を含むパケットが既に前記バッファに蓄積されている場合には、前記蓄積対象のパケットを廃棄する
請求項１に記載のパケット転送システム。
【請求項３】
前記制御部は、前記パケット転送装置で受信され、前記記憶部に処理内容が記憶されておらず、且つ前記蓄積の指定もないパケットのうち所定のパケットについては前記バッファに蓄積することなく前記所定のパケットを単独で含んだ第２の問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う
請求項１又は２に記載のパケット転送システム。
【請求項４】
制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置であって、
前記パケットの処理内容を記憶する記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されておらず且つ蓄積が指定されたパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部と
を含むパケット転送装置。
【請求項５】
制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置であって、
前記パケットの処理内容を記憶する記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されていないパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部と
を含むパケット転送装置。
【請求項６】
制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置のメッセージ送信制御方法であって、
パケット転送装置が、
受信されたパケットのうち前記パケットの処理内容が記憶されておらず且つ蓄積が指定されたパケットをバッファに蓄積し、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する
ことを含むパケット転送装置のメッセージ送信制御方法。
【請求項７】
制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置のメッセージ送信制御方法であって、
パケット転送装置が、
受信されたパケットのうち前記パケットの処理内容が記憶されていないパケットをバッファに蓄積し、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する
ことを含むパケット転送装置のメッセージ送信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、パケット転送システム，及びパケット転送装置に関する。
【背景技術】
【０００２】
近年、ネットワークの分野では、Software Defined Networking（ＳＤＮ）が注目され
ている。ＳＤＮは、ソフトウェアでネットワーク全体の挙動を制御する技術である。ＳＤＮを実現する標準として、OpenFlow（オープンフロー）技術が注目されている。
【０００３】
OpenFlowネットワークは、データ転送機能を備える“OpenFlowスイッチ”（ＯＦＳ：以下「スイッチ」と表記することもある）と、経路制御を司る“OpenFlowコントローラ”（ＯＦＣ：以下「コントローラ」と表記することもある）を備え、コントローラとスイッチとは“OpenFlowプロトコル”に従って、コミュニケーションを図る。
【０００４】
各スイッチは、自身に入力されたパケットに対する動作（アクション）を決定するための情報が記憶されたフローテーブルを備える。フローテーブルは、“マッチ条件（パケットの識別条件）”及び“アクション（Action：パケットの処理内容）”を含んだエントリ（フローエントリ）の集合体である。
【０００５】
フローエントリは、コントローラによって作成され、“OpenFlowプロトコル”を用いて各スイッチに送信される。各スイッチは、コントローラから受信したフローエントリをフローテーブルに記憶する。このように、コントローラは、コントローラ自身の配下にある各スイッチが有するフローテーブルを一元管理する。
【０００６】
各スイッチは、受信されたパケットに対応するフローエントリが自身のフローテーブルに登録されていない場合には、“PacketIn”と呼ばれるメッセージをコントローラへ送信する。PacketInはパケットに対する処理内容をコントローラに問い合わせる問い合わせメッセージである。
【０００７】
コントローラは、“PacketIn”メッセージに含まれたパケットに対応するフローエントリを作成し、スイッチへ送る。スイッチは、フローエントリを自身のフローテーブルに登録する。これによって、スイッチは、同様のパケットの受信時に、対応するフローエントリ中の“アクション”の内容に従ってパケットを処理することができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１０／１１６６０６号公報
【特許文献２】特表２０１４−５０２７９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
“PacketIn”メッセージの送信は、パケット毎に実行される。一方で、対応するフローエントリがフローテーブルに登録されていないパケットをスイッチがバースト的に受信することが起こり得る。この場合、スイッチは、各パケットに対する“PacketIn”メッセージをコントローラへ送信する。これによって、スイッチとコントローラとの間でのメッセージのやりとりに使用されるネットワークの負荷が増大する虞があった。
【００１０】
一側面は、パケット転送装置とその制御装置とを結ぶネットワークの負荷を低減可能な
技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
一つの側面は、パケット転送装置と、
前記パケット転送装置とネットワークを介して接続され、前記パケット転送装置で受信されるパケットの処理内容を前記パケット転送装置へ送る制御装置とを備え、
前記パケット転送装置は、
前記制御装置から受信された前記パケットの処理内容を記憶した記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されておらず且つ蓄積が指定されたパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部とを含み、
前記制御装置は、
前記問い合わせメッセージを受信した場合に前記問い合わせメッセージ中の各パケットに対応する処理内容を前記パケット転送装置へ送信する処理を行う処理部を含む
パケット転送システムである。
【発明の効果】
【００１２】
一側面によれば、パケット転送装置とその制御装置とを結ぶネットワークの負荷を低減することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施形態におけるOpenFlow（ＯＦ）ネットワークシステムの一例を模式的に示す図である。
【図２】図２は、コントローラ及びスイッチのそれぞれとして適用可能な情報処理装置のハードウェア構成例を示す図である。
【図３】図３は、情報処理装置のＣＰＵがプログラムを実行することによって動作するコントローラ（ＯＦＣ）の機能を模式的に示す。
【図４】図４は、情報処理装置のＣＰＵがプログラムを実行することによって動作するスイッチ（ＯＦＳ）の機能を模式的に示す。
【図５】図５は、コントローラ（ＣＰＵ）で実行される処理（PacketIn制御条件メッセージ作成処理）の一例を示すフローチャートである。
【図６】図６は、PacketIn制御条件メッセージの一例の説明図である。
【図７】図７は、PacketIn制御条件メッセージの一例の説明図であり、アクションタイプの一覧を示す。
【図８】図８は、スイッチにおけるPacketIn制御条件メッセージ（拡張FlowMod）の受信時における処理例を示すフローチャートである。
【図９】図９は、フローテーブルを形成する１エントリ（フローエントリ）に含まれる情報を示す図である。
【図１０】図１０は、スイッチにおける、パケット受信時における処理例を示すフローチャートである。
【図１１】図１１は、スイッチにおける、パケット受信時における処理例を示すフローチャートである。
【図１２】図１２は、通常のPacketInメッセージのフォーマットを示す。
【図１３】図１３は、集約PacketInメッセージ送信処理の一例を示すフローチャートである。
【図１４】図１４は、集約PacketInメッセージのフォーマット例を示す図である。
【図１５】図１５は、コントローラにおけるPacketInメッセージ（集約PacketInメッセージ）の受信処理を示す図である。
【図１６】図１６は、実施形態１の作用効果の説明図である。
【図１７】図１７は、イーサネットフレームのフォーマットを示し、ＴＣＰヘッダ，ＩＰヘッダ，イーサネットヘッダ，ＦＣＳのサイズを示す。
【図１８】図１８は、実施形態２の第１のケースにおけるスイッチの動作例を示すフローチャートである。
【図１９】図１９は、実施形態２の第２のケースにおけるスイッチの動作例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して実施形態について説明する。実施形態の構成は例示であり、実施形態の構成に限定されない。
【００１５】
〔実施形態１〕
実施形態１では、一例として、コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）とが制御ネットワークで接続されたOpenFlow（ＯＦ）ネットワークシステムについて説明する。実施形態１のＯＦネットワークシステムでは、フローテーブルに処理内容としてバッファへの蓄積が指定されたパケットをバッファに蓄積し、バッファに蓄積された複数のパケットを一纏めにした集約PacketInメッセージを生成し、PacketInメッセージを含んだパケットをコントローラ１へ送る。これによって、制御ネットワークへ送信されるパケット数を低減し、制御ネットワークの負荷低減を図る。
【００１６】
また、実施形態１では、コントローラ１が、バッファへ蓄積するパケットと、バッファへ蓄積することなくPacketInメッセージでコントローラ１へ送信するパケットとを指定可能とする。PacketIn制御に係る指定は、一例として、FlowModメッセージを拡張した拡張FlowModメッセージで行われる例について説明する。  
【００１７】
＜OpenFlowネットワークシステムの構成例＞
【００１８】
図１は、実施形態におけるOpenFlow（ＯＦ）ネットワークシステムの一例を模式的に示す図である。図１において、ＯＦネットワークシステムは、コントローラ（ＯＦＣ）１と、コントローラ１の制御下にある（コントローラ１によって制御される）少なくとも１つのスイッチ（ＯＦＳ）２とで形成される。図１の例では、２つのスイッチ２が制御ネットワーク３を介してコントローラ１に接続されている。但し、スイッチ２の数は適宜設定可能である。コントローラ１は、「パケット転送装置の制御装置」の一例であり、スイッチ２は、「パケット転送装置」の一例である。
【００１９】
図１の例では、複数のスイッチ２Ａ，２Ｂが例示されている。スイッチ２Ａはスイッチ２Ｂと接続されている。以下の説明において、スイッチ２Ａ，２Ｂを区別しない場合には、スイッチ２と表記する。各スイッチ２は、ルータ５のような中継装置を介してホスト（端末）６と接続される。或いは各スイッチ２は、直接にホスト（端末）６と接続されることもある。また、各スイッチ２は、基地局を介して無線端末であるホスト６と接続されることもある。但し、スイッチ２がホスト６を収容しない場合もある。  
【００２０】
スイッチ２Ａは、非ＯＦネットワーク４（４Ａ）と接続されており、スイッチ２Ｂは、非ＯＦネットワーク４（４Ｂ）と接続されている。非ＯＦネットワーク４は、OpenFlowと異なる規格で構築されたネットワークである。
【００２１】
上記構成によって、例えば、非ＯＦネットワーク４Ａから各スイッチ２Ａ，２Ｂを通って非ＯＦネットワーク４Ｂへ至るパケット、又は逆方向を流れるパケットの転送が行われる。或いは、各非ＯＦネットワーク４Ａ，４Ｂからのパケットがスイッチ２Ａ，２Ｂを介
してホスト６へ転送される。もちろん、スイッチ２Ａに接続されたホスト６とスイッチ２Ｂに接続されたホスト６との間でのパケット通信も可能である。
【００２２】
コントローラ１は、各スイッチ２との間でＯＦプロトコルに基づくメッセージを送受信するためのセッションを確立する。セッションの確立手順は、例えば以下の通りである。最初に、スイッチ２は、コントローラ１との間でTransmission Control Protocol（ＴＣ
Ｐ）のハンドシェイク手順（３ウェイハンドシェイク）を行い、ＴＣＰセッションを確立する。
ＴＣＰセッションは、「セッション」の一例である。
【００２３】
次に、スイッチ２は、コントローラ１との間でＯＦ規格に基づくハンドシェイク手順を行う。ハンドシェイク手順の中で、スイッチ２とコントローラ１とは、Hellowメッセージと呼ばれるメッセージを相互に交換する。続いて、スイッチ２は、“features request”と呼ばれるスイッチ２の情報を含んだメッセージを送り、コントローラ１は、“features
request”の応答メッセージ(“features reply”と呼ばれる)を返信する。これによって、ＯＦ規格に基づくハンドシェイクが成立する。その後、スイッチ２とコントローラ１とは、echoメッセージを相互に送り、セッションを維持する。
【００２４】
＜コントローラ，スイッチのハードウェア構成例＞
図２は、コントローラ１及びスイッチ２の夫々として適用可能な情報処理装置１０のハードウェア構成例を示す図である。図２に示す情報処理装置１０は、一例として、パーソナルコンピュータ（ＰＣ），ワークステーション（ＷＳ），サーバマシンのような専用又は汎用のコンピュータが備えるハードウェアアーキテクチャを備えている。但し、情報処理装置１０の種類は、上記の例示に制限されない。また、スイッチ２は、既存のルータやスイッチ（Ｌ２スイッチ，Ｌ３スイッチなど）が備えるハードウェア構成を用い、スイッチ２として動作するためのソフトウェア（プログラム）を実装することによって実装可能である。
【００２５】
図２において、情報処理装置１０は、バスＢを介して相互に接続されたCentral Processing Unit（ＣＰＵ）１１と、主記憶装置（メインメモリ）１２と、補助記憶装置１３と
、ネットワークインタフェース（ＮＷＩ／Ｆ）１４及び１５と、入力装置１６と、出力装置１７と、入出力（Input／Output：I/O）装置１８とを備えている。
【００２６】
主記憶装置１２は、例えば、Random Access Memory（ＲＡＭ）１２と、Read Only Memory（ＲＯＭ）１３とを含んでいる。主記憶装置１２は、ＣＰＵ１１の作業領域として使用される。補助記憶装置１３は、ＣＰＵ１１によって実行されるプログラムやプログラムの実行に際して使用されるデータを記憶した不揮発性記憶媒体（不揮発性メモリ）である。不揮発性記憶媒体は、例えば、ハードディスクドライブ（ＨＤＤ），Solid State Drive
（ＳＳＤ），Electrically Erasable Programmable Read-Only Memory（ＥＥＰＲＯＭ）
，フラッシュメモリ，コンパクトフラッシュ等から少なくとも１つが選択される。但し、不揮発性記憶媒体の種類は上記例示に限定されない。主記憶装置１２及び補助記憶装置１３の夫々は、「記憶部」、「メモリ」、「記憶装置」、「コンピュータ読み取り可能な記憶媒体」の一例である。
【００２７】
各ＮＷＩ／Ｆ（通信Ｉ／Ｆ）１４，１５は、通信機能を司るインタフェース回路を含む。例えば、ＮＷＩ／Ｆとして、ＬＡＮ（構内交換網）カードのようなネットワークインタフェースカード（ＮＩＣ）を適用することができる。各ＮＷＩ／Ｆ１４，１５は、「送信装置」、「受信装置」、「通信装置」の一例である。なお、図２では、２つのＮＷＩ／Ｆ１４，１５を例示しているが、ＮＷＩ／Ｆの数は、収容する通信回線の数に応じて１以上の適宜の数を有していれば良い。
【００２８】
入力装置１６は、情報やデータの入力に使用される。入力装置１６は、例えば、キー，ボタン，ポインティングデバイス（マウスなど），タッチパネルなどの少なくとも１つを含む。入力装置１６は、マイクロフォンのような音声入力装置を含むことができる。  
【００２９】
出力装置１７は、情報の出力に使用される。例えば、出力装置１７は、ディスプレイ装置（表示装置）である。出力装置１７として、音声出力装置（スピーカ）や印刷装置（プリンタ）を含む場合もある。
【００３０】
Ｉ／Ｏ装置１８は、情報処理装置１０と他の情報処理装置とを接続するための入出力制御を行う装置（回路）であり、例えば、ＯＦネットワークの保守者の端末１９が接続される。Ｉ／Ｏ装置１８は、保守者の端末１９と通信を行う通信インタフェース（ＮＷＩ／Ｆ）であっても良い。  
【００３１】
ＣＰＵ１１は、補助記憶装置１３に記憶されたプログラムを主記憶装置１２にロードして実行する。これによって、ＣＰＵ１１は、コントローラ（ＯＦＣ）の動作を実行したり、スイッチ（ＯＦＳ）の動作を実行したりすることができる。ＣＰＵ１１は、「プロセッサ」，「制御装置」，「制御部」の一例である。プロセッサの語は、ＣＰＵの他、Digital Signal Processor（ＤＳＰ）やNetwork Processing Unit（ＮＰＵ）を含む。
【００３２】
＜コントローラ（ＯＦＣ）の構成例＞
図３は、情報処理装置１０のＣＰＵ１１がプログラムを実行することによって動作するコントローラ（ＯＦＣ）１の機能を模式的に示す。コントローラ１は、処理部２１と、処理部２１と接続された記憶部２２，入出力装置２３，及びＯＦＳとの通信部２４とを備えた装置として動作する。
【００３３】
コントローラ１は、各スイッチ２が受信するパケットに対して行う処理内容（動作（アクション））を定義した制御情報を生成する。制御情報は、ＯＦにおいて「フロー」と呼ばれる。フローは、少なくとも“マッチ条件（「ルール」とも呼ばれる）”及び“アクション（Action）”を含む。フローは、さらに“統計情報（Statistics）”を含むこともある。“マッチ条件”は、各スイッチ２で受信されるパケットの識別条件（パケットフローの識別条件）を示す情報（パケットフローの識別情報）であり、主にパケットのヘッダフィールドに設定されるパラメータの組み合わせで表現される。
【００３４】
“アクション”には、マッチ条件に合致するパケットに対する動作（処理）内容が定義される。“アクション”として複数の動作を定義することができる。また、“アクション”の定義がないときには、“Drop：パケットの廃棄”が行われるようにすることもできる。“統計情報”として、“マッチ条件”に合致するパケット数やパケット量がカウントされる。このような統計情報は、“アクション”を実行するための条件として使用することができる。
【００３５】
コントローラ１は、１つのフローを１エントリとしたエントリ（フローエントリ）の集合体（「フローテーブル」と呼ばれる）をスイッチ２毎に作成する。コントローラ１は、スイッチ２に対応するフローエントリを含むメッセージ（「FlowMod」と呼ばれる）を作
成する。FlowModメッセージは、各スイッチ２との間で確立したセッションを用いて各ス
イッチ２に送信される。
【００３６】
各スイッチ２は、コントローラ１から受信されたFlowModメッセージ中のフローエント
リを各スイッチ２が備えるフローテーブルに登録する。各スイッチ２は、パケットを受信すると、パケットと合致するマッチ条件を含むフローエントリをフローテーブルから検索
する。このとき、パケットと合致する（パケットに対応する）フローエントリが発見された場合には、当該フローエントリ中の“アクション”の定義に従ってパケットを処理する。このように、各スイッチ２は、コントローラ１（制御装置）が指定したパケットの処理内容に従って自装置で受信されるパケットの処理を行う。
【００３７】
これに対し、パケットに対応するフローエントリがない場合には、スイッチ２は、当該パケットの処理内容を問い合わせるメッセージ（PacketIn）を生成し、コントローラ１へ送信する。PacketInメッセージには、問い合わせに係るパケットが含まれる。
【００３８】
コントローラ１は、PacketInメッセージを受信すると、PacketInメッセージ中のパケットに対する経路計算を行い、経路計算結果に応じたフローを作成し、当該フロー（フローエントリ）を含んだFlowModメッセージを作成し、スイッチ２へ送信する。
【００３９】
図３において、入出力装置２３は、図２に示したＩ／Ｏ装置１８の機能であり、保守者から入力される情報を処理部２１に受け渡す。入力情報は、例えば、パケットのフロー情報や、PacketIn制御条件を示す情報を含む。パケットのフロー情報は、例えば、送信元及び宛先ＩＰアドレス，送信元及び宛先ポート番号，プロトコルＩＤなどを含む。また、入出力装置２３は、処理部２１からの情報を保守者へ向けて出力する。但し、保守者からの情報入力及び保守者への情報出力は、図２に示した入力装置１６及び出力装置１７の少なくとも一方を用いて行うこともできる。
【００４０】
処理部２１は、図２に示したＣＰＵ１１の機能である。処理部２１は、一例として、パケット処理規則の計算処理２１１と、パケット処理規則の作成処理２１２と、ＯＦメッセージ処理（メッセージ処理）２１３とを実行する。
【００４１】
計算処理２１１では、保守者から入力されたパケットのフロー情報を元に、ＯＦネットワークにおけるパケットの転送経路が計算される。作成処理２１２では、計算処理２１１で計算された転送経路に基づいて、各スイッチ２へ送信するフロー（フローエントリ）を作成する処理が実行される。
【００４２】
メッセージ処理２１３では、各スイッチ２と送受信されるメッセージに対する処理が実行される。例えば、メッセージ処理２１３では、作成処理２１２で作成されたフローエントリを含んだFlowModメッセージを作成し、スイッチ２へ送信する処理が行われる。或い
は、メッセージ処理２１３では、スイッチ２から受信されたPacketInメッセージ中のパケットを計算処理２１１での経路計算のために計算処理２１１に渡す処理が行われる。
【００４３】
通信部２４は、例えば、図２に示したＮＷＩ／Ｆ１４又は１５の機能であり、ＯＦメッセージを含んだパケットの送受信処理を司る。ＯＦメッセージは、少なくとも上記したFlowModメッセージ及びPacketInメッセージを含む。通信部２４は、各スイッチ２から受信
されるPacketInメッセージを処理部２１へ渡す処理や、処理部２１から渡されたFlowMod
メッセージを宛先のスイッチ２へ送信する処理を実行する。
【００４４】
記憶部２２は、図２に示した主記憶装置１２及び補助記憶装置１３の少なくとも一方の機能である。記憶部２２は、受信ＯＦメッセージの記憶領域２２１と、パケット処理規則の記憶領域２２２とを含む。記憶領域２２１には、PacketInメッセージが記憶される。PacketInメッセージは、計算処理２１１や作成処理２１２での処理に使用される。記憶領域２２２には、処理部２１で作成された各スイッチ２のフローテーブル（各スイッチ２向けのフローエントリの集合体）が記憶される。  
【００４５】
＜スイッチ（ＯＦＳ）の構成例＞
図４は、情報処理装置１０のＣＰＵ１１がプログラムを実行することによって動作するスイッチ（ＯＦＳ）２の機能を模式的に示す図である。スイッチ２は、処理部３１と、処理部３１と接続された記憶部３２，入出力装置３３，及びコントローラ１（ＯＦＣ）との通信部３４，通信部３５とを備えた装置として動作する。
【００４６】
入出力装置３３は、図２に示したＩ／Ｏ装置１８の機能であり、保守者と処理部３１との間での情報の受け渡しを司る。但し、情報の受け渡しは、図２に示した入力装置１６及び出力装置１７を用いて行われても良い。
【００４７】
通信部３４は、図２に示した例えばＮＷＩ／Ｆ１４の機能である。通信部３４は、ＯＦメッセージ（PacketInメッセージ，FlowModメッセージなど）を含んだパケットの送受信
処理を行う。通信部３４は、コントローラ１と処理部３１との間で、ＯＦメッセージ（PacketInメッセージ，FlowModメッセージなど）の受け渡しを行う。
【００４８】
通信部３５は、図２に示した例えばＮＷＩ／Ｆ１５の機能である。通信部３５は、複数のポート３５１を含んでいる。各ポート３５１は、ルータ（スイッチ）５やホスト（端末）６と接続されている。通信部３５は、処理部３１から受け取ったパケットを宛先に対応するポート３５１から送信したり、各ポート３５１で受信されたパケットを処理部３１へ渡したりする処理を行う。
【００４９】
記憶部３２は、図２に示した主記憶装置１２及び補助記憶装置１３の少なくとも一方の機能である。記憶部３２は、例えば、受信パケットの記憶領域３２１と、パケット処理規則の記憶領域３２２とを含む。記憶領域３２１は、通信部３５で受信されたパケット一時的に蓄積する複数のバッファを含む。複数のバッファは、パケットの転送処理などのためにパケットを一時的に蓄積する第１のバッファと、後述する集約PacketInメッセージで一纏めにしてコントローラ１へ送る複数のパケットを蓄積するための第２のバッファとを含む。記憶領域３２２には、スイッチ２がコントローラ１から受信したフローエントリの集合体であるフローテーブルが記憶される。
【００５０】
本実施形態では、フローテーブルには、“アクション”で定義される処理内容（アクションタイプ）の相違に基づく２種類のフローエントリが登録される。一つは、“アクション”としてPacketInに係る動作（PacketIn制御条件）が定義されたフローエントリである。もう一つは、PacketInに係る動作以外の動作が“アクション”として定義されたフローエントリである。後者を第１のフローエントリと称し、前者を第２のフローエントリと称する。第１のフローエントリに含まれるマッチ条件を第１のフローと称し、第２のフローエントリに含まれるマッチ条件を第２のフローと称することもある。
【００５１】
処理部３１は、図２に示したＣＰＵ１１の機能である。処理部３１は、例えば、ＯＦメッセージ処理３１１と、パケット処理規則の比較処理３１２と、パケット処理３１３と、タイマ３１４とを実行する。  
【００５２】
ＯＦメッセージ処理３１１では、FlowModメッセージでコントローラ１から供給された
フローエントリを記憶領域３２２中のフローテーブルに登録する処理が行われる。また、ＯＦメッセージ処理３１１では、PacketInメッセージや後述する集約PacketInメッセージを作成してコントローラ１へ送る処理が実行される。
【００５３】
比較処理３１２では、通信部３５で受信されたパケットと、フローテーブルに登録された各フローエントリのマッチ条件との比較（マッチング）が実行される。比較結果は、パケット処理３１３に渡される。パケット処理３１３では、比較結果に応じたパケットの処理を行う。
【００５４】
すなわち、比較結果として、パケットとマッチするマッチ条件を含んだフローエントリが発見された場合には、パケット処理３１３では、パケットに対し発見されたフローエントリ中の“アクション”で定義された処理を行う。例えば、発見されたフローエントリが第２のフローエントリであれば、当該エントリ中の“アクション”で定義された内容に基づきPacketIn に係る処理が実行される。すなわち、パケットが第２のバッファに蓄積さ
れたり、パケットを含むPacketInの作成がＯＦメッセージ処理３１１に指示されたりする。
【００５５】
これに対し、発見されたフローエントリが第１のフローエントリであれば、当該エントリ中の“アクション”に基づき、パケットを所定の出力ポートへ転送したり、パケットを廃棄したりする処理がなされる。
【００５６】
＜動作例＞  
以下、上述したコントローラ１及びスイッチ２における動作例について説明する。図５は、コントローラ１（ＣＰＵ１１）で実行される処理（PacketIn制御条件メッセージの送信処理）の一例を示すフローチャートである。
【００５７】
図５に示す処理は、例えば、保守者がPacketIn制御条件を示す情報をコントローラ１へ入力することによって開始される。PacketIn制御条件として、保守者は所定のパケットについて、第２のバッファに蓄積し集約PacketInメッセージでコントローラ１へ送るか第２のバッファに蓄積すること無く直ちに通常のPacketInで送る（即時のPacketIn）かを指定することができる。集約PacketInメッセージは、「（第１の）問い合わせメッセージ」の一例であり、通常のPacketInメッセージは、「第２の問い合わせメッセージ」の一例である。
【００５８】
保守者は、将来において、スイッチ２を用いて転送されるパケットのフロー情報を知っている。保守者は、そのようなパケットのフローを、即時性の高いパケットのフローと即時性が低いフローとに分類し、即時性の高いフローについては即時のPacketInを指定し、即時性が低いフローについては集約PacketIn（まとめてPacketIn）を指定する。
【００５９】
即時性の高いパケットのフローは、例えば、音声通信や動画配信に使用されるパケットのフローである。一方、即時性が低いパケットのフローは、Ｗｅｂサイトのブラウジングや電子メールの転送に使用されるパケットである。
【００６０】
所定のパケットに対するPacketIn制御条件は、入出力装置２３（Ｉ／Ｏ装置１８）を介して処理部２１（ＣＰＵ１１）に入力される。以下の動作例の説明は、ＣＰＵ１１の処理として説明する。
【００６１】
最初の０１では、ＣＰＵ１１は、入力情報（PacketIn制御条件）を受信する。次の０２では、ＣＰＵ１１は、作成処理２１２を行い、入力情報を元にPacketIn制御条件メッセージを作成する。図６及び図７は、PacketIn制御条件メッセージの一例の説明図である。
【００６２】
PacketIn制御条件メッセージは、OpenFlowで規格されたFlowModメッセージを拡張する
ことによって作成することができる。制御条件メッセージは、ヘッダ部と、パラメータ“match（マッチ条件）”と、パラメータ“thresholdSize（閾値サイズ）”と、パラメータ“Cycle（周期）”とを含む。パラメータ“thresholdSize（閾値サイズ）”と、パラメータ“Cycle（周期）”とは、FlowModの拡張により含められたパラメータである。
【００６３】
ヘッダ部は、ＯＦプロトコルにおける共通ヘッダ部である。パラメータ“match”は、
マッチ条件（パケットの識別条件）を示し、第１及び第２のフローエントリにおけるマッチ条件を示す。
【００６４】
マッチ条件は、パケットのフロー情報で設定することができる。フロー情報は、ＴＣＰやＵＤＰのポート番号（宛先及び送信元），ＩＰアドレス（宛先及び送信元），プロトコルＩＤ，ＭＡＣアドレス（宛先及び送信元），ＶＬＡＮ（仮想構内交換網）−ＩＤなどのヘッダ情報を含む。
【００６５】
マッチ条件は、例えば、上記したヘッダ情報中のパラメータの組み合わせで設定される。例えば、即時性の低いパケットについて第２のバッファへの蓄積を指定する場合には、以下のようなマッチ条件が指定される。すなわち、Ｗｅｂサイトのブラウジングに係るパケットについては、ポート番号として“８０”（HyperText Transfer Protocol：ＨＴＴ
Ｐ）が指定されたマッチ条件が設定される。また、電子メールに係るパケットであれば、マッチ条件として各種のメールサービスに応じたポート番号が指定される。これに対し、即時性の高いパケットについては、保守者が認識しているパケットのヘッダ情報を用いたマッチ条件が設定される。
【００６６】
マッチ条件として、上記したポート番号やアドレスの固定値だけでなく、ポート番号やアドレスの範囲を指定することもできる。これによって、１つのフローエントリで複数のパケットに対するPacketInの制御を行うことができる。但し、１つのPacketIn制御条件メッセージにおいて、即時のPacketInを行うパケットと集約PacketInを行うパケットとの双方を指定することはできない。
【００６７】
パラメータ“thresholdSize”は、第２のバッファに蓄積されるパケットの合計サイズ
に対する閾値を示す。パラメータ“Cycle”は、集約PacketInメッセージを送信する周期
を示す。スイッチ２において、“thresholdSize”及び “Cycle”の各値は、後述する“buffer_id”で指定される第２のバッファと紐づけされ、当該第２のバッファに対して適用される。
【００６８】
制御条件メッセージは、さらに、アクション情報を含む。アクション情報は、“command（コマンド）”，“timeout（タイムアウト：寿命）”，“priority（優先度）”，“buffer_id（バッファＩＤ）”，“out_port（アウトポート）”及びフラグの各パラメータ
を含む。パラメータ“command”は、スイッチ２におけるフローテーブルに対する振る舞
い（フローテーブルへのフローエントリの追加，フローエントリの内容変更，フローエントリの削除）を示す情報である。
【００６９】
パラメータ“timeout”は、フローエントリのフローテーブルにおける保存期間を示す
。保存期間が過ぎたフローエントリはフローテーブルから削除される。パラメータ“priority”は、フローエントリの優先度を示す。例えば、同一のマッチ条件を含む複数のフローエントリが登録されることがあり、そのときにいずれのフローエントリを優先的に使用するかを決定するために使用される。
【００７０】
パラメータ“buffer_id”は、バッファの識別子（ＩＤ）である。本実施形態では、集
約PacketInメッセージで送信するパケットの蓄積に用いるバッファ（第２のバッファ）を指定するために使用される。バッファＩＤの使い分けにより、集約PacketInメッセージに含める複数のパケットを蓄積するための複数の第２のバッファを設定することができる。
【００７１】
“out_port”は、コマンド“command”が削除（delete）の場合に使用される。すなわ
ち、“out_port”と一致するフローエントリがフローテーブルから削除される。フラグは固定値が設定される。
【００７２】
アクション情報には、具体的なアクション内容が定義される。アクション内容としてｎ個（ｎは自然数）を定義することができ、複数のアクションを定義することができる。１つのアクションに関して、少なくともアクションタイプ“type”と、サイズ“length”とが指定される。アクションタイプは、処理内容を示し、サイズ“length”は、アクションのサイズ（メッセージ中での“アクション”情報の相対位置）を示す。
【００７３】
図７には、アクションタイプとして採り得るパラメータの一覧が示されている。具体的には、アクションタイプとして“Forward（フォワード）”，“Enqueue（エンキュー）”，“Drop（ドロップ）”，“Modify-field（モディファイフィールド）”，“OutPut”が例示される。“Forward（フォワード）”及び“Enqueue（エンキュー）”は、実施形態におけるPacketIn制御のために使用されるアクションタイプである。“Forward”及び“Enqueue”は、「指定情報」、「第２の処理内容」の一例である。“Forward”及び“Enqueue”以外のアクションタイプは、「（第１の）処理内容」の一例である。“Forward”が指
定されたマッチ条件は、「転送指定情報」の一例であり、“Enqueue”が指定されたマッ
チ条件は「蓄積指定情報」の一例である。
【００７４】
“Forward（フォワード）”は、パケットを通常のPacketInにてコントローラ１へ転送
することを示す。“Forward”は、所定のパケット（例えば、即時性が高いパケット）を
通常のPacketInでコントローラ１へ送る場合に指定される。
【００７５】
“Enqueue”は、パケットを“buffer_id”で指定されたバッファ（第２のバッファ）へ格納（蓄積）することを示す。“Enqueue”は、所定のパケット（例えば、即時性の低い
パケット）を第２のバッファに蓄積し、集約PacketInで送る場合に指定される。
【００７６】
“Drop（ドロップ）”は、マッチ条件にマッチするパケットを廃棄する場合に指定される。“Modify-field（モディファイフィールド）”は、フローテーブルの指定フィールドを変更する場合に指定される。“OutPut”は指定したポートからパケットを出力する場合に指定される。  
【００７７】
図５に戻って、PacketIn制御条件メッセージが作成されると、ＣＰＵ１１は、メッセージ処理２１３として、PacketIn制御条件メッセージの送信処理を行う（０３）。これによって、PacketIn制御条件メッセージは、通信部２４から送出され、制御ネットワーク３を介して宛先のスイッチ２で受信される。
【００７８】
図８は、スイッチ２におけるPacketIn制御条件メッセージ（拡張FlowMod）の受信時に
おける処理例を示すフローチャートである。図８の１１において、スイッチ２の処理部３１（ＣＰＵ１１）は、通信部３４で受信されたPacketIn制御条件メッセージを受信する。
【００７９】
次の１２において、ＣＰＵ１１は、ＯＦメッセージ処理３１１を行い、PacketIn制御条件メッセージ中のフローエントリを記憶領域３２２のフローテーブルへ登録する。図９は、フローテーブルを形成する１エントリ（フローエントリ）に含まれる情報を示す図である。図９に示すように、フローエントリは、マッチ条件と、アクションと、統計情報と、その他オプションとを含む。
【００８０】
マッチ条件は、上述したパケットの識別条件であり、統計情報は、マッチ条件にマッチしたパケット数やバイト数などである。アクションは、パケット出力などのマッチ条件にマッチしたパケットに対するスイッチ２の振る舞いを示す。その他オプションは、フローエントリの優先度（“priority”）や、寿命（“timeout”）などを示す。
【００８１】
図８に戻って、ＣＰＵ１１は、１２で登録したフローエントリ中のアクションが“Enqueue”であり、且つPacketIn制御条件メッセージにおいて、“cycle”値が設定されていた場合には、タイマ２１４を用いてPacketIn制御タイマを起動する。すなわち、集約PacketInメッセージを送る周期の計時を開始する。また、ＣＰＵ１１は、PacketIn制御条件メッセージに“thresholdSize”が指定されている場合には、その値を記憶部３２の所定記憶
領域に設定する。
【００８２】
なお、“cycle”や“thresholdSize”の値は、PacketIn制御条件メッセージ毎に設定しなくても良い。すなわち、或るPacketIn制御条件メッセージで或る“buffer_id”に対し
て“cycle”や“thresholdSize”が一旦指定されると、スイッチ２は当該“buffer_id”
で指定された第２のバッファに関して“cycle”や“thresholdSize”で指定された値を使用し続ける。その後に受信されたPacketIn制御条件メッセージで同一の“buffer_id”に
対して“cycle”や“thresholdSize”が指定されていれば、周期や閾値を当該PacketIn制御メッセージ中の値で更新する。このような処理がなされても良い。
【００８３】
図１０及び図１１は、スイッチ２における、パケット受信時における処理例を示すフローチャートである。図１０の２１において、処理部３１（ＣＰＵ１１）は、ＯＦメッセージ処理３１１を行い、通信部３５で受信されたパケットを受け取る。
【００８４】
次の２２において、ＣＰＵ１１は、比較処理３１２を行い、記憶部３２の記憶領域３２２にあるフローテーブルからパケットにマッチするマッチ条件を含んだフローエントリを検索する。次の２３では、ＣＰＵ１１は、パケットとマッチするマッチ条件（フローエントリ）があるか否かを判定する。
【００８５】
２３において、パケットとマッチするマッチ条件（フローエントリ）がない場合、すなわち、パケットに対応する処理内容がフローテーブルに登録されていない場合には、処理が２４へ進む、これに対し、パケットにマッチするマッチ条件（フローエントリ）がある場合には、処理が２５へ進む。
【００８６】
処理が２４へ進んだ場合には、通常の方法でコントローラ１へPacketInが送信される。パケットに対する即時性が高いか低いかが不明であるからである。この場合、ＣＰＵ１１は、ＯＦメッセージ処理３１１を行い、当該パケットを含むPacketInメッセージを生成して通信部３４へ送る。通信部３４は、PacketInメッセージを含むパケットをコントローラ１へ制御ネットワーク３を介して送る。
【００８７】
図１２は、通常のPacketInメッセージのフォーマットを示す。PacketInメッセージは、共通ヘッダと、データフレームとを有する。データフレームには、パケットデータのサイズ（メッセージ中での相対位置）を示す“length”と、パケットデータを示す“packetData”とが含まれる。パケットデータは、受信パケット全体を含んでも良く、パケットのヘッダのようなパケットの一部（部分）であっても良い。要は、PacketInにコントローラ１でのフローエントリ作成に要する情報が含まれていれば良い。また、パケットの“packetData”に格納される部分のみが第２のバッファに格納されるようにしても良い。この場合、第２のバッファの記憶容量を節約することができる。
【００８８】
図１０に戻って、２５へ処理が進んだ場合には、ＣＰＵ１１は、検索されたエントリ（パケットとマッチするフローエントリ）中のアクションを参照する。このとき、アクションの内容が即時（Forward）であれば処理が２７に進む。アクションの内容が集約（Enqueue）であれば処理が２９に進む。アクションの内容がForward及びEnqueue以外であれば、処理が２８へ進む。
【００８９】
２７に処理が進んだ場合には、ＣＰＵ１１は、パケット処理３１３及びＯＦメッセージ処理３１１として、当該パケットを第２のバッファに蓄積することなく当該パケットを含んだPacketInメッセージを作成し、コントローラ１へ送る処理を行う。これによって、即時性の高いパケットについてのフローエントリがスイッチ２へ登録されるタイミングを早めることができる。
【００９０】
２８へ処理が進んだ場合には、ＣＰＵ１１は、パケット処理３１３として、アクションの内容に応じたパケットに対する処理を行う。例えば、パケットをアクションで指定された出力ポート（ポート３５１）へ送る処理を行う。  
【００９１】
２９へ処理が進んだ場合には、ＣＰＵ１１は、パケット処理３１３として、PacketIn制御条件メッセージの“buffer_id”で指定されたバッファ（第２のバッファ）において、
同一のパケットが既に登録されているか否かをチェックし、同一のパケット（パケット中の所定情報が同一のパケット）が第２のバッファに蓄積されているか否かを判定する（３０）。
【００９２】
上記判定は、パケットに含まれる所定情報が同一か否かを以てなされる。例えばパケットのヘッダを比較し、ヘッダ中の所定情報（所定パラメータ）が同一か否かを以てなされる。例えば、パケットの送信元及び宛先ＩＰアドレス，送信元及び宛先ポート番号，送信元及び宛先ＭＡＣアドレス，プロトコルＩＤが同一か否かを以てパケットの同一性判定が行われる。但し、パケットの同一性判定に用いるパラメータは上記例に限定されない。換言すれば、本実施形態では、パケットの同一とは、パケットに含まれたパケットの送受信に関する所定の情報が同一であることを意味し、パケットのペイロードに格納されたユーザデータまでの同一は要求されない。但し、ヘッダ情報だけでなくペイロードに格納されたデータを含めてパケットの同一性が判断されることはあり得る。
【００９３】
３０において、同一のパケットが既に蓄積されている場合には、ＣＰＵ１１は、パケット処理３１３として、パケットを破棄（廃棄）する（３１）。同一のパケットに対する無駄なフロー計算等がコントローラ１で重複して実行されるのを回避するためである。また、送信対象のパケットの数が減ることで、単位時間当たりの集約PacketInの送信回数を減らすことを期待できる。これに対し、同一のパケットが蓄積されていなければ、ＣＰＵ１１は、パケットを第２のバッファに蓄積（格納）する（３２）。
【００９４】
次の３３（図１１）では、ＣＰＵ１１は、タイマ３１４を用いたPacketin制御タイマが満了しているか否かを判定する。このとき、Packetin制御タイマが満了している場合には、処理が３６へ進む。これに対し、Packetin制御タイマが満了していない場合には、処理が３４へ進む。
【００９５】
３４では、ＣＰＵ１１は、バッファに蓄積されているパケットの合計サイズをチェックし、合計サイズが閾値（“thresholdSize”で指定された値）を超過するか否かを判定す
る（３５）。このとき、合計サイズが閾値を超過しない場合には、処理が２１へ戻り、次の受信パケットに対する処理へ進む。これに対し、合計サイズが閾値を超過する場合には、処理が３６へ進む。なお、３５の判定において、合計サイズが閾値以上か否かの判定がなされるようにしても良い。
【００９６】
３６では集約PacketInメッセージ送信処理が実行される。図１３は、集約PacketInメッセージ送信処理の一例を示すフローチャートである。図１３の３６１では、ＣＰＵ１１は、第２のバッファに格納（蓄積）されているパケットを収集する。
【００９７】
次の３６２では、ＣＰＵ１１は、集約PacketInメッセージのデータフレーム部へ全パケ
ットを格納する。図１４は、集約PacketInメッセージのフォーマット例を示す図である。図１４に示すように、集約PacketInメッセージでは、通常のPacketInメッセージ（図１２）のデータフレーム部が拡張されて、所定数ｎ（ｎは自然数）のパケットデータ及びサイズを格納可能となっている。すなわち、複数のパケットを１つのPacketInに格納することができる。各“length”は、メッセージ中の“packetData”の相対位置を示す。
【００９８】
図１３に戻って、次の３６３では、ＣＰＵ１１は、集約PacketInメッセージをコントローラ１へ送信する処理を行う。集約PacketInは、通信部３４から制御ネットワーク３を通じてコントローラ１で受信される。
【００９９】
なお、PacketIn制御タイマによる集約PacketInの送信タイミング制御と、閾値に基づく集約PacketInの送信タイミング制御とは、双方が実行されることは必須要件ではなく、少なくとも一方が実行されるようにしても良い。また、PacketIn制御タイマの計時は、図１０及び図１１の処理から独立して（並列に）実行されるようにしても良い。
【０１００】
図１５は、コントローラ１におけるPacketInメッセージ（集約PacketInメッセージ）の受信処理を示す図である。図１５における４１で、コントローラ１の処理部２１（ＣＰＵ１１）は、通信部２４を介してPacketInメッセージ（集約PacketInメッセージ）を受信する。
【０１０１】
次の４２で、ＣＰＵ１１は、PacketIn中のパケット“length”及び“packetData”を用いて、パケットに対する経路計算を行い、対応するフローエントリを作成する。次の４３で、ＣＰＵ１１は、フローエントリを含むFlowModメッセージを作成し、宛先（問い合わ
せ元）のスイッチ２へ送信する処理を行う。
【０１０２】
次の４４では、ＣＰＵ１１は、PacketIn中の全てのパケット（“packetData”）に対する４２及び４３の処理が終了したか否かを判定する。処理が終了していない場合（４４，Ｎ（集約PacketInの場合））には、ＣＰＵ１１は、“length”を用いてPacketIn中の次のパケットを指定し、処理を４２に戻す。これに対し、処理が終了している場合（４４，Ｙ）には、ＣＰＵ１１は図１５の処理を終了する。なお、上記処理では、各パケットに対するフローエントリの作成処理がシーケンシャルに実行される例を示したが、各パケットに対するフロー計算やフローエントリ作成が並列に実行されるようにしても良い。
【０１０３】
なお、フローテーブルに登録された第２のフローエントリを削除する場合、コントローラ１は、当該第２のフローエントリを削除するためのFlowModメッセージを作成しスイッ
チ２へ送信する。スイッチ２（ＣＰＵ１１）は、FlowModメッセージに従って、フローテ
ーブルから第２のフローエントリを削除する。
【０１０４】
また、第２のフローエントリには、同じマッチ条件を有する第１のフローエントリよりも低い優先度“priority”が設定される。スイッチ２のフローテーブルにおいて、同じマッチ条件を有する第１のフローエントリと第２のフローエントリが登録されている場合には、第１のフローエントリが優先的に使用される。これによって、第１のフローエントリが存在するパケットについてPacketInが送信されることが回避される。
【０１０５】
＜実施形態１の作用効果＞
実施形態１によれば、図１６に示すように、コントローラ１がスイッチ２に対し、PacketIn制御条件メッセージ（拡張FlowMod）を送信し、通常のPacketInで送るパケットと、
第２のバッファに一時蓄積し集約PacketInで送るパケットと指定する指定情報を含んだ第２のフローエントリを送る（図１６＜１＞）。第２のフローエントリは、フローテーブルに登録される。
【０１０６】
その後、スイッチ２で受信されたパケットのうち、第１のフローエントリ（PacketIn制御条件（Forward及びEnqueue）以外の処理内容がアクションタイプで設定されたエントリ）が登録されていないパケット、すなわち、未知のパケットが受信されたとき、スイッチ２は以下の処理を行う。
【０１０７】
すなわち、パケットが第２のフローエントリにおいて、Enqueue（第２のバッファへの
蓄積）が指定されたパケットであれば、第２のバッファに蓄積される。その後、複数のパケットが一纏めにされた集約PacketInに含まれてコントローラ１へ送信される（図１６＜２＞）。これによって、制御ネットワーク３へのトラフィック量の削減を図り、制御ネットワークへの負荷を低減することができる。
【０１０８】
また、第２のフローエントリにおいて、Forward（即時のPacketIn）が指定されたパケ
ットについては、第２のバッファに蓄積されることなく、通常のPacketInメッセージに含まれてコントローラ１へ送信される（図１６＜３＞）。これによって、即時性の高いパケットについて、第１のフローエントリがフローテーブルに登録されるタイミングを早めることができる。
【０１０９】
トラフィック削減（制御ネットワーク負荷低減）の効果として、以下のようなデータを示すことができる。出願人が開発したソフトウェアによるスイッチで、サイズの異なるパケットに関して１秒当たりのパケット数（Packet/Second:pps）、及び帯域（Mbit/Second:Mbps）を測定したところ、以下のデータが得られた。
（１）サイズ６４[byte]の場合：２００１０２[pps]，１０２．４５[Mbps]
（２）サイズ１４５０[byte]の場合：９５８０５[pps]，１１１１．３４[Mbps]
【０１１０】
上記のデータによれば、サイズが大きく、パケット数が少ない程、帯域が大きくなる特性が認められた。このような特性は、通常のルータやスイッチに対しても当てはまる。上記結果を踏まえた上で、ＴＣＰ−ＳＹＮパケット，Dynamic Host Configuration Protocol（ＤＨＣＰ）リクエストパケットを例として集約PacketInを送信する場合について説明
する。ＴＣＰ−ＳＹＮパケット、及びＤＨＣＰリクエストパケットは、パケットの送受信が開始される際に最初に転送されるパケットの例である。
【０１１１】
PacketInの共通ヘッダ部のサイズは８バイトである、ＴＣＰ−ＳＹＮパケットのサイズは６０バイトである。ＤＨＣＰリクエストのサイズは３００バイトである。図１７は、イーサネットフレームのフォーマットを示し、ＴＣＰヘッダ，ＩＰヘッダ，イーサネットヘッダ，ＦＣＳ（Frame Check Sequence）のサイズを示す。
【０１１２】
図１７において、上記のように、PacketInの共通ヘッダ部のサイズは８バイトである。ＴＣＰヘッダのサイズは２０バイトである。ＭＳＳ（Maximum Segment Size）は、ＴＣＰユーザデータで受信可能なセグメントサイズの最大値を示す。ＩＰヘッダは２０バイトである。ＭＴＵ（Maximum Transmission Unit）は、一回のデータ転送で送信可能なＩＰデ
ータグラムの最大サイズを示す。ＭＴＵは、４６〜１５００[byte]の値を採る。ＩＰデータグラムの先頭側にイーサネットヘッダ（１４バイト）が付与され、最後尾にＦＣＳ（４バイト）が付与される。イーサネットフレームのサイズは、６４〜１５１８[byte]となる。
【０１１３】
ＭＴＵ（最大１５００バイト）のうち、ＩＰヘッダとＴＣＰヘッダとが４０バイトを占める。残りの可変長データの格納領域において、PacketInの共通ヘッダ部が８バイトを占める。残りのバイト数（１４５２バイト）においてＴＣＰ−ＳＹＮパケットをまとめる場合では、１つの集約PacketInで、約２４個のＴＣＰ−ＳＹＮパケットを送信することがで
きる。一方、残りのバイト数（１４５２バイト）においてＤＨＣＰリクエストをまとめる場合では、１つの集約PacketInで約４個のＤＨＣＰリクエストを送信することができる。
【０１１４】
このように、実施形態で説明した集約PacketInを用い、PacketInを含むパケットのサイズを大きくし、PacketInの送信数を減らすことで、制御ネットワーク３の帯域を大きくすることができる。すなわち、制御ネットワーク３の負荷を低減することができる。
【０１１５】
＜変形例＞
なお、実施形態１では、所定のパケットに対する第２のバッファへの蓄積、及び即時のPacketInを指定する情報は、PacketIn制御条件メッセージを用いてスイッチ２へ伝達されている。そして、これらの指定情報は、第２のフローエントリとしてフローテーブルに登録されている。但し、上記指定情報は、拡張FlowMod以外のメッセージを用いてコントロ
ーラ１からスイッチ２へ伝達されるようにしても良い。或いは、上記指定情報は、保守者がスイッチ２のフローテーブルに直接に（例えばマニュアルで）入力するようにしても良い。また、上記指定情報は、フローテーブルと異なる記憶領域にて記憶されるようにしても良い。もっとも、実施形態１で説明した拡張FlowMod及びフローテーブルを用いること
で、ＯＦの規格の枠組みを適用し、開発量を少なくすることができる。
【０１１６】
〔実施形態２〕
次に、実施形態２について説明する。実施形態２は、実施形態１と共通点を含むので、主として相違点について説明し、共通点については説明を省略する。実施形態１では、スイッチ２のフローテーブルに第１及び第２のフローエントリが登録されていないパケットが受信された場合には、当該パケットを含む通常のPacketInが送信されていた。実施形態２では、第１及び第２のフローエントリが登録されていないパケットを、集約PacketInメッセージでの送信対象（第２のバッファへの蓄積対象）とする。実施形態２では、PacketIn制御条件メッセージを使用しない場合（第１のケース）と、PacketIn制御条件メッセージを使用する場合（第２のケース）とについて説明する。
【０１１７】
＜第１のケース＞  
図１８は、実施形態２の第１のケースにおけるスイッチ２の動作例を示すフローチャートである。第１のケースでは、PacketIn制御条件メッセージが使用されない。このため、スイッチ２のフローテーブルには、実施形態１で説明した第１のフローエントリが登録され、第２のフローエントリは登録されない。また、第１のケースでは、第１実施形態で説明した“buffer_id”，“thresholdSize”，及び“cycle”のような第２のバッファ制御
用のパラメータは、例えば、保守者がスイッチ２に入力し、スイッチ２のＣＰＵ１１が設定を行う。
【０１１８】
図１８の５１において、スイッチ２の処理部３１（ＣＰＵ１１）は、通信部３５で受信されたパケットを受信する。次の５２において、ＣＰＵ１１は、記憶部３２の記憶領域３２２にあるフローテーブルからパケットにマッチするマッチ条件を含んだフローエントリ（第１のフローエントリ）を検索する。次の５３では、ＣＰＵ１１は、パケットとマッチするマッチ条件（フローエントリ）があるか否かを判定する。
【０１１９】
５３において、パケットにマッチするマッチ条件（フローエントリ）がある場合には、ＣＰＵ１１は、当該フローエントリ中の“アクション”に従ってパケットを処理する（５４）。これに対し、パケットとマッチするマッチ条件（フローエントリ）がない場合、すなわち、パケットに対応する処理内容がフローテーブルに登録されていない場合には、処理が５５へ進む、
【０１２０】
処理が５５へ進んだ場合には、ＣＰＵ１１は、記憶部３２に記憶されているPacketIn集
約制御フラグをチェックし、PacketIn集約制御フラグがオンかオフかを判定する（５６）。ここに、PacketIn集約制御フラグは、スイッチ２において、未知のパケット（フローテーブルにフローエントリが登録されていないパケット）について集約PacketInメッセージを用いたパケットの集約を実行するか否かを示すフラグである。
【０１２１】
ＣＰＵ１１は、PacketIn集約制御フラグがオフであれば、PacketIn集約制御、すなわち、未知のパケットの第２のバッファへの蓄積を行わず、通常のPacketIn処理を実行する（５７）。これに対し、PacketIn集約制御フラグがオンであれば、ＣＰＵ１１は、処理を５８に進める。なお、PacketIn集約制御フラグを用いたオンオフ判定はオプションであり、５３の処理でパケットに対応するフローエントリが無ければ直ちに処理が５８に進むようにしても良い。PacketIn集約制御フラグのオンオフ制御によって、例えば、制御ネットワーク３のトラフィック量に応じて集約PacketInを利用し、トラフィック量を減らすことが可能となる。
【０１２２】
処理が５８に進むと、ＣＰＵ１１は、パケットの蓄積が指定された第２のバッファ（“buffer_id”で指定）に、同一のパケットが既に蓄積されているか否かを判定する。この
とき、同一のパケットが第２のバッファに蓄積されている場合には、ＣＰＵ１１は、パケットを廃棄する（５９）。これに対し、同一のパケットが蓄積されていなければ、ＣＰＵ１１は、パケットを第２のバッファに蓄積（格納）する（６０）。
【０１２３】
次の６１では、ＣＰＵ１１は、タイマ３１４を用いたPacketin制御タイマが満了しているか否かを判定する。このとき、Packetin制御タイマが満了している場合には、処理が６３へ進む。これに対し、Packetin制御タイマが満了していない場合には、処理が６２へ進む。
【０１２４】
６２では、ＣＰＵ１１は、第２のバッファに蓄積されているパケットの合計サイズが閾値（“thresholdSize”で指定された値）を超過するか否かを判定する。このとき、合計
サイズが閾値を超過しない場合には、処理が５１へ戻り、次の受信パケットに対する処理へ進む。これに対し、合計サイズが閾値を超過する場合には、処理が６３へ進む。
【０１２５】
６３では、図１３を用いて説明した集約PacketInメッセージ送信処理が実行される。集約PacketInメッセージ送信処理の内容は実施形態１と同じであるので説明を省略する。以上を除き、第１のケースは実施形態１と同じであるので説明を省略する。
【０１２６】
第１のケースでは、未知のパケット（フローテーブルに処理内容が登録されていないパケット）が第２のバッファに蓄積され、第２のバッファに蓄積された複数のパケットの集合を含む集約PacketInメッセージがコントローラ１へ送信される。第１のケースでも、制御ネットワーク３を介してコントローラ１へ送信されるPacketInを含むパケットサイズを大きくし、送信数（パケット数）を減らすことができる。このため、実施形態１と同様に、制御ネットワーク３の負荷を低減することができる。
【０１２７】
＜第２のケース＞  
次に、実施形態２における第２のケースについて説明する。第２のケースでは、実施形態１と同様に、PacketIn制御条件メッセージが使用され、所定パケットに対する第２のフローエントリがスイッチ２のフローテーブルに登録される。但し、実施形態１と異なり、フローテーブルに第１及び第２のフローエントリが登録されていないパケット（未知のパケット）も、第２のバッファへの蓄積対象（集約PacketInでの送信対象）となる。
【０１２８】
図１９は、第２のケースにおけるスイッチ２のパケット受信時における処理を示すフローチャートである。図１９に示す処理は、図１５に示した処理とほぼ同様であるので、同
じ処理については同じ番号を付してある。図１９の２３において、フローテーブルからパケットにマッチするマッチ条件（フローエントリ）が発見されない場合には、２９へ処理が進む。そして、同一のパケットが既に蓄積されていなければ、パケットが第２のバッファへ蓄積される（３２）。
【０１２９】
第２のバッファへの蓄積は、第２のフローエントリでアクションタイプ“Enqueue”が
指定されたパケットについても実行される（２６，集約）。これに対し、第２のフローエントリでアクションタイプ“Forward”が指定されたパケットについては、通常のPacketInでの送信が行われる（２７）。従って、第２のケースでは、即時性の高いパケットにつ
いてのみ、第２のフローエントリが登録されるようにしても良い。これにより、例えば、フローエントリを記憶する記憶装置の容量を節約できる。なお、図１９の結合子（丸数字の１及び２）は、図１１の結合子と結合している。
【０１３０】
以上の説明を除き、第２のケースは実施形態１と同じであるので説明を省略する。第２のケースでは、未知のパケット及び第２のバッファへの蓄積が指定されたパケットが第２のバッファに蓄積され、集約PacketInメッセージでコントローラ１へ送信される。この場合でも、実施形態１と同様に、制御ネットワーク３へ送信するPacketInの数を減らし、制御ネットワーク３の負荷を低減することができる。
【０１３１】
なお、実施形態では、OpenFlowのＯＦＣ及びＯＦＳを例示として挙げたが、コントローラ（制御装置）及びスイッチ（パケット転送装置）は、ＯＦＣ及びＯＦＳに限定されない。上記した実施形態は、以下の付記を開示する。以下の付記は適宜組み合わせることができる。
【０１３２】
（付記１）  パケット転送装置と、
前記パケット転送装置とネットワークを介して接続され、前記パケット転送装置で受信されるパケットの処理内容を前記パケット転送装置へ送る制御装置とを備え、
前記パケット転送装置は、
前記制御装置から受信された前記パケットの処理内容を記憶した記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されておらず且つ蓄積が指定されたパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部とを含み、
前記制御装置は、
前記問い合わせメッセージを受信した場合に前記問い合わせメッセージ中の各パケットに対応する処理内容を前記パケット転送装置へ送信する処理を行う処理部を含む
パケット転送システム。（１）  
【０１３３】
（付記２）  前記制御部は、前記バッファへの蓄積対象のパケット中の所定情報と同一の情報を含むパケットが既に前記バッファに蓄積されている場合には、前記蓄積対象のパケットを廃棄する
付記１に記載のパケット転送システム。（２）
【０１３４】
（付記３）  前記制御部は、前記受信部で受信され、前記記憶部に処理内容が記憶されておらず、且つ前記蓄積の指定もないパケットのうち所定のパケットについては前記バッファに蓄積することなく前記所定パケットを単独で含んだ第２の問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う
付記１又は２に記載のパケット転送システム。（３）
【０１３５】
（付記４）  前記所定のパケットは、前記バッファに蓄積することなく前記第２の問い合わせメッセージでの送信が指定されたパケットを含む
付記３に記載のパケット転送システム。
【０１３６】
（付記５）  前記制御部は、前記制御装置から受信される蓄積指定情報であって前記バッファへの蓄積が指定されるパケットを示す蓄積指定情報に従って、前記蓄積指定情報に対応するパケットを前記バッファに蓄積する
付記１から４のいずれか１項に記載のパケット転送システム。
【０１３７】
（付記６）  前記制御部は、前記制御装置から受信される転送指定情報であって前記バッファへ蓄積することなく前記第２の問い合わせメッセージにて送信するパケットを示す転送指定情報に従って、前記転送指定情報に対応するパケットを含む前記第２の問い合わせメッセージを送信する処理を行う
付記４又は５に記載のパケット転送システム。
【０１３８】
（付記７）  前記蓄積指定情報は、前記制御装置から前記パケット転送装置へ送信される、パケットの処理内容を送信するためのメッセージに含まれ、前記記憶部において第２の処理内容として記憶される
付記５又は６に記載のパケット転送システム。
【０１３９】
（付記８）  前記転送指定情報は、前記制御装置から前記パケット転送装置へ送信される、パケットの処理内容を送信するためのメッセージに含まれ、前記記憶部において第２の処理内容として記憶される
付記６又は７に記載のパケット転送システム。
【０１４０】
（付記９）  前記制御部は、所定時間を計時するタイマが満了したときに前記バッファに蓄積されている複数のパケットを含んだ前記問い合わせメッセージを送信する
付記１から８のいずれか１項に記載のパケット転送システム。
【０１４１】
（付記１０）  前記制御部は、前記バッファに蓄積された複数のパケットの合計サイズが所定値を越えたときに前記バッファに蓄積されている複数のパケットを含んだ前記問い合わせメッセージを送信する
付記１から９のいずれか１項に記載のパケット転送システム。
【０１４２】
（付記１１）    制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置であって、
前記パケットの処理内容を記憶する記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されておらず且つ蓄積が指定されたパケットを蓄積するバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部と
を含むパケット転送装置。（４）
【０１４３】
（付記１２）  制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置であって、
前記パケットの処理内容を記憶する記憶部と、
受信されたパケットのうち前記記憶部に処理内容が記憶されていないパケットを蓄積す
るバッファと、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する処理を行う制御部と
を含むパケット転送装置。（５）
【０１４４】
（付記１３）  制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置のメッセージ送信制御方法であって、
パケット転送処理装置が、
受信されたパケットのうち前記パケットの処理内容が記憶されておらず且つ蓄積が指定されたパケットをバッファに蓄積し、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する
ことを含むパケット転送装置のメッセージ送信制御方法。（６）
【０１４５】
（付記１４）  制御装置とネットワークを介して接続され、前記制御装置が指定したパケットの処理内容に従って自装置で受信されるパケットに対する処理を行うパケット転送装置のメッセージ送信制御方法であって、
受信されたパケットのうち前記パケットの処理内容が記憶されていないパケットをバッファに蓄積し、
前記バッファに蓄積された複数のパケットの夫々の処理内容を問い合わせる問い合わせメッセージであって前記複数のパケットの集合を含んだ問い合わせメッセージを前記制御装置へ前記ネットワークを介して送信する
ことを含むパケット転送装置のメッセージ送信制御方法。（７）
【符号の説明】
【０１４６】
１・・・OpenFlowコントローラ（ＯＦＣ）
２・・・OpenFlowスイッチ（ＯＦＳ）
３・・・制御ネットワーク
１０・・・情報処理装置（コンピュータ）
１１・・・ＣＰＵ（プロセッサ）
１２・・・主記憶装置
１３・・・補助記憶装置
１４，１５・・・ネットワークインタフェース
１８・・・入出力装置
２１，３１・・・処理部
２２，３２・・・記憶部
２４・・・ＯＦＳ通信部
３４・・・ＯＦＣ通信部
３２１・・・受信パケット記憶部（バッファ）
【図１】
0006424496.tif 000002
【図２】
0006424496.tif 000003
【図３】
0006424496.tif 000004
【図４】
0006424496.tif 000005
【図５】
0006424496.tif 000006
【図６】
0006424496.tif 000007
【図７】
0006424496.tif 000008
【図８】
0006424496.tif 000009
【図９】
0006424496.tif 000010
【図１０】
0006424496.tif 000011
【図１１】
0006424496.tif 000012
【図１２】
0006424496.tif 000013
【図１３】
0006424496.tif 000014
【図１４】
0006424496.tif 000015
【図１５】
0006424496.tif 000016
【図１６】
0006424496.tif 000017
【図１７】
0006424496.tif 000018
【図１８】
0006424496.tif 000019
【図１９】
0006424496.tif 000020