(57)【要約】【課題】入力されたパケットによるバッファ溢れを回避するパケット処理装置を提供することを目的とする。【解決手段】パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信するパケット送信部１３０と、パケットを格納するバッファ１１０と、を有し、パケット送信部１３０は、フローテーブルに未定義のパケットが入力されたときに、バッファ１１０の利用率が閾値を超えている場合、未定義のパケットを他のパケット処理装置に送信し、バッファ１１０の利用率が閾値以下の場合、未定義のパケットをバッファ１１０に格納するとともに、未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理装置である。【選択図】図２
2015080175.tif 000002
【特許請求の範囲】
【請求項１】
パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信するパケット送信部と、
パケットを格納するバッファと、を有し、
前記パケット送信部は、前記フローテーブルに未定義のパケットが入力されたときに、前記バッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理装置。
【請求項２】
前記バッファの利用率を監視する監視部を備え、
前記パケット送信部は、前記監視部によって監視される前記バッファの利用率が前記閾値を超えている場合、前記未定義のパケットを前記他のパケット処理装置に送信することを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記パケット送信部は、前記未定義のパケットを前記他のパケット処理装置に送信する場合、送信する前記未定義のパケットに前記パケット処理装置を識別する識別情報を付与し、
前記他のパケット処理装置は、前記識別情報が付与された識別情報付パケットが入力された場合、前記識別情報付パケットの処理方法を問い合わせるメッセージ及び前記識別情報を所定のポートに送信し、前記メッセージ及び前記識別情報に基づいて前記識別情報付パケットが送信先に到達するまでの経路上に配置された前記パケット処理装置に送信された、前記識別情報付パケットの処理方法を受信することを特徴とする請求項１又は２に記載のパケット処理装置。
【請求項４】
パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップを実行するパケット処理方法であって、
前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理方法。
【請求項５】
パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップをコンピュータに実行させるためのパケット処理プログラムであって、
前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置、パケット処理方法及びパケット処理プログラムに関する。
【背景技術】
【０００２】
ＯｐｅｎＦｌｏｗを採用した通信システムが知られている。ＯｐｅｎＦｌｏｗを採用した通信システムは、パケット処理装置としてのＯｐｅｎＦｌｏｗスイッチとコントローラ（以下、ＯｐｅｎＦｌｏｗコントローラという。）とを含んでいる（例えば、非特許文献１参照）。
【０００３】
ＯｐｅｎＦｌｏｗスイッチは、非特許文献１に示されるように、フローテーブルを備えている。フローテーブルは、入力されたパケットの処理方法が定義される表である。したがって、ＯｐｅｎＦｌｏｗスイッチにパケットが入力されると、フローテーブルに定義された内容に従って、パケットが処理される。パケットの処理としては、例えば転送や破棄などがある。
【０００４】
一方、フローテーブルに定義されていないパケットがＯｐｅｎＦｌｏｗスイッチに入力されると、ＯｐｅｎＦｌｏｗスイッチはパケットの処理方法をＯｐｅｎＦｌｏｗコントローラに問い合わせる。ＯｐｅｎＦｌｏｗスイッチはＯｐｅｎＦｌｏｗコントローラから送信された処理方法を受信し、受信した処理方法に従ってパケットを処理する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】OpenFlow Switch Specification Version 1.0.0 (Wire Protocol 0x01). [online]. December 31, 2009. [retrieved on 2013-06-24]. Retrieved from the Internet:<URL:ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．０．０．ｐｄｆ>.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ＯｐｅｎＦｌｏｗスイッチがパケットの処理方法をＯｐｅｎＦｌｏｗコントローラに問い合わせている間、ＯｐｅｎＦｌｏｗスイッチに入力されたパケットは、ＯｐｅｎＦｌｏｗスイッチが備えているバッファに記憶される。バッファは、一定の記憶容量を有している。ところが、バッファがパケットを記憶している間に、フローテーブルに定義されていない別のパケットがさらにＯｐｅｎＦｌｏｗスイッチに入力されると、バッファの記憶容量を上回る場合がある。この場合、パケットがバッファから溢れるバッファ溢れが発生する。バッファ溢れが発生すると、入力された別のパケットは破棄される。別のパケットが破棄されると、別のパケットの送信元にその旨が通知されて別のパケットの再送が実行される。この結果、例えば転送時間の増大や転送効率の劣化といった問題が生じる。
【０００７】
そこで、１つの側面では、本発明は、入力されたパケットによるバッファ溢れを回避するパケット処理装置、パケット処理方法及びパケット処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本明細書に開示のパケット処理装置は、パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信するパケット送信部と、パケットを格納するバッファと、を有し、前記パケット送信部は、前記フローテーブルに未定義のパケットが入力されたときに、前記バッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理装置である。
【０００９】
本明細書に開示のパケット処理方法は、パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップを実行するパケット処理方法であって、前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理方法である。
【００１０】
本明細書に開示のパケット処理プログラムは、パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップをコンピュータに実行させるためのパケット処理プログラムであって、前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理プログラムである。
【発明の効果】
【００１１】
本明細書に開示のパケット処理装置、パケット処理方法及びパケット処理プログラムによれば、入力されたパケットによるバッファ溢れを回避することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、第１実施形態における通信システムの概略的な構成を示す図である。
【図２】図２（ａ）は、ＯｐｅｎＦｌｏｗスイッチのブロック図の一例である。図２（ｂ）は、ＯｐｅｎＦｌｏｗコントローラのブロック図の一例である。
【図３】図３（ａ）は、フローテーブルの一例である。図３（ｂ）は、ルールの一例である。図３（ｃ）は、アクションの定義の一例である。
【図４】図４は、ＯｐｅｎＦｌｏｗスイッチのハードウェア構成の一例である。
【図５】図５は、ＯｐｅｎＦｌｏｗコントローラのハードウェア構成の一例である。
【図６】図６は、ＯｐｅｎＦｌｏｗスイッチの動作の一例を示すフローチャートである。
【図７】図７は、ＯｐｅｎＦｌｏｗコントローラの動作の一例を示すフローチャートである。
【図８】図８は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図９】図９は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図１０】図１０は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図１１】図１１は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図１２】図１２は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図１３】図１３は、第１実施形態における通信システムの動作の一例を説明するための図である。
【図１４】図１４は、第１実施形態における通信システムの動作の一例を示すシーケンス図である。
【図１５】図１５は、第２実施形態における通信システムの動作の一例を説明するための図である。
【図１６】図１６は、第２実施形態における通信システムの動作の一例を説明するための図である。
【図１７】図１７は、第２実施形態における通信システムの動作の一例を説明するための図である。
【図１８】図１８は、第２実施形態における通信システムの動作の一例を説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を参照して説明する。
【００１４】
（第１実施形態）
図１は、第１実施形態における通信システムＳ１の概略的な構成を示す図である。
通信システムＳ１は、図１に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２及びＯｐｅｎＦｌｏｗコントローラ２００を備えている。
ＯｐｅｎＦｌｏｗスイッチ１００−１とＯｐｅｎＦｌｏｗスイッチ１００−２は互いに通信回線によって接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２は、それぞれＯｐｅｎＦｌｏｗコントローラ２００と制御回線によって接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−１は、通信回線によって送信ホスト３００とも接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−２は、通信回線によって受信ホスト４００とも接続されている。通信回線及び制御回線は、例えば光ファイバやメタルケーブルといったケーブル類である。このような有線接続に代えて、無線接続が利用されてもよい。
【００１５】
ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２は、それぞれ入力されたパケットを処理する。パケットの処理としては、上述した転送や破棄のほか、例えばパケットヘッダの修正（又は書換）などがある。例えば、送信ホスト３００から送信されたパケットがＯｐｅｎＦｌｏｗスイッチ１００−１に入力された場合、ＯｐｅｎＦｌｏｗスイッチ１００−１は入力されたパケットをＯｐｅｎＦｌｏｗスイッチ１００−２に転送する。ＯｐｅｎＦｌｏｗスイッチ１００−１から転送されたパケットがＯｐｅｎＦｌｏｗスイッチ１００−２に入力された場合、ＯｐｅｎＦｌｏｗスイッチ１００−２は入力されたパケットを受信ホスト４００に転送する。この結果、送信ホスト３００から送信されたパケットは、受信ホスト４００に到達する。尚、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２の詳細については、後述する。
【００１６】
ＯｐｅｎＦｌｏｗコントローラ２００は、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２の動作を制御する。例えば、ＯｐｅｎＦｌｏｗコントローラ２００は、ＯｐｅｎＦｌｏｗスイッチ１００−１からパケットの処理方法の問い合わせを受信すると、そのパケットの処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に送信する。ＯｐｅｎＦｌｏｗスイッチ１００−１は、受信したパケットの処理方法に従って、パケットを処理する。ＯｐｅｎＦｌｏｗスイッチ１００−１が受信したパケットをＯｐｅｎＦｌｏｗスイッチ１００−２に転送した場合、ＯｐｅｎＦｌｏｗスイッチ１００−２は、受信したパケットの処理方法に従って、パケットを処理する。
【００１７】
上述した問い合わせは、例えばＰａｃｋｅｔＩｎメッセージに基づいて行われる。ＰａｃｋｅｔＩｎメッセージは、ＯｐｅｎＦｌｏｗスイッチ１００−１が未定義のパケットを受信したことをＯｐｅｎＦｌｏｗコントローラ２００に通知するメッセージである。上述したパケットの処理方法の送信は、例えばＦｌｏｗＭｏｄメッセージに基づいて行われる。ＦｌｏｗＭｏｄメッセージは、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に新たなフローエントリを登録（又は追加）したり、既存のフローエントリを変更又は削除したりするメッセージである。尚、ＯｐｅｎＦｌｏｗコントローラ２００及びフローエントリの詳細については、後述する。また、ＰａｃｋｅｔＩｎメッセージ及びＦｌｏｗＭｏｄメッセージを含む各種メッセージは、ＯｐｅｎＦｌｏｗプロトコルによって定められている。
【００１８】
送信ホスト３００は、パケットを送信するホスト装置である。受信ホスト４００は、パケットを受信するホスト装置である。ホスト装置としては、例えばサーバ装置がある。送信ホスト３００は、パケット送信以外にも各種の処理を実行する。受信ホスト４００は、パケット受信以外にも各種の処理を実行する。
【００１９】
続いて、図２及び図３を参照して上述したＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２及びＯｐｅｎＦｌｏｗコントローラ２００の詳細について説明する。
【００２０】
図２（ａ）は、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２のブロック図の一例である。図２（ｂ）は、ＯｐｅｎＦｌｏｗコントローラ２００のブロック図の一例である。図３（ａ）は、フローテーブルの一例である。図３（ｂ）は、ルールの一例である。図３（ｃ）は、アクションの定義の一例である。
【００２１】
まず、図２（ａ）及び図３（ａ）〜図３（ｃ）を参照してＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２について説明する。尚、ＯｐｅｎＦｌｏｗスイッチ１００−１とＯｐｅｎＦｌｏｗスイッチ１００−２は基本的に同様の構成であるため、一例としてＯｐｅｎＦｌｏｗスイッチ１００−１をＯｐｅｎＦｌｏｗスイッチ１００として説明する。
ＯｐｅｎＦｌｏｗスイッチ１００は、図２（ａ）に示すように、バッファ１１０、フローテーブル記憶部１２０、パケット送信部１３０パケット送信部１３０、及びバッファ利用率監視部１５０を備えている。
【００２２】
バッファ１１０は、ＯｐｅｎＦｌｏｗスイッチ１００に入力されたパケットを格納する。より詳しくは、パケット送信部１３０によってパケットが処理されるまで、バッファ１１０はパケットを記憶する。すなわち、バッファ１１０はパケットを一時的に記憶する。バッファ１１０は、一定の記憶容量を有している。このため、バッファ１１０が自身の記憶容量を上回るパケットを記憶しようとすると、バッファ１１０はパケットを記憶しきれず、バッファ溢れが発生する。バッファ溢れは例えばパケットロスとも呼ばれる。
【００２３】
フローテーブル記憶部１２０は、フローテーブルを記憶する。フローテーブルは、図３（ａ）に示すように、少なくとも１つのフローエントリを含んでいる。フローエントリは、フローIdentification（フローＩＤ）、ルール、アクション及び統計情報を備えている。フローＩＤは、フローエントリを識別する識別情報である。ルールは、パケットヘッダとのマッチング条件を表している。具体的には図３（ｂ）に示すように、ルールは、スイッチポート、ＭＡＣ送信元アドレス、・・・、ＴＣＰ送信元ポート番号、ＴＣＰ宛先ポート番号といった各種の属性を備えている。尚、属性が同じパケットの集合は例えばフローと呼ばれる。ＯｐｅｎＦｌｏｗスイッチ１００に入力されたパケットのパケットヘッダとルールとが属性毎に比較されて、両者が一致した場合に、後述するアクションが実行される。一致は一部一致と完全一致のいずれでもよい。アクションは、パケットヘッダとルールが一致した場合に実行されるパケット処理を定義する。アクションは、図３（ｃ）に示すように、パケットを受信したポート以外の他のポートへの転送を定義する「ＡＬＬ」、ＯｐｅｎＦｌｏｗコントローラ２００への転送を定義する「ＣＯＮＴＲＯＬＬＥＲ」等に類別される。アクションに何も登録されていない場合、入力されたパケットは破棄される。統計情報は、フローテーブルのフローエントリ毎のマッチング状況を表している。例えば、マッチング状況は一致したパケットのバイト数を含んでいる。パケットのバイト数とともに一致したパケットのパケット数が含まれていてもよい。
【００２４】
パケット送信部１３０は、フローテーブルに基づいてＯｐｅｎＦｌｏｗスイッチ１００に入力されたパケットを送信する。より詳しくは、パケットが入力されると、パケット送信部１３０はフローテーブル記憶部１２０を参照し、入力されたパケットのパケットヘッダがいずれかのルールと一致するか否かを判断する。パケット送信部１３０は、入力されたパケットのパケットヘッダがいずれかのルールと一致すると判断した場合、そのルールを含むフローエントリのアクションを実行する。すなわち、パケット送信部１３０は定義された処理方法に従ってパケット処理を実行する。この結果、入力されたパケットは転送されたり破棄されたりする。一方、パケット送信部１３０は、入力されたパケットのパケットヘッダがいずれのルールとも一致しないと判断した場合、入力されたパケットをバッファ１１０に格納する。その後、パケット送信部１３０は、未定義のパケットの処理方法を問い合わせるＰａｃｋｅｔＩｎメッセージを所定のポートに送信する。この結果、ＰａｃｋｅｔＩｎメッセージがＯｐｅｎＦｌｏｗコントローラ２００に送信される。
【００２５】
バッファ利用率監視部１５０は、バッファ１１０の利用率を監視する。利用率は例えばバッファ１１０の記憶容量（Ｂｙｔｅｓ）に対する記憶されたパケットのバイト数（Ｂｙｔｅｓ）の割合の百分率（％）で定められる。バッファ利用率監視部１５０は、バッファ１１０の利用率がバッファ溢れに近い利用率であるか否かを判断する。具体的には、まずバッファ溢れに近い利用率であるか否かを判断するための特定の閾値（％）が定められる。バッファ利用率監視部１５０は利用率が当該特定の閾値を越えている場合に、バッファ１１０の利用率がバッファ溢れに近い利用率であると判断する。バッファ利用率監視部１５０は利用率が特定の閾値を越えている状態から当該特定の閾値以下になった場合に、バッファ１１０の利用率がバッファ溢れから遠ざかった利用率であると判断する。バッファ１１０の利用率がバッファ溢れに近い利用率であると判断された場合、バッファ利用率監視部１５０はその旨をパケット送信部１３０に通知する。バッファ１１０の利用率がバッファ溢れから遠ざかった利用率であると判断された場合、バッファ利用率監視部１５０はその旨をパケット送信部１３０に通知する。尚、バッファ利用率監視部１５０を、ＯｐｅｎＦｌｏｗスイッチ１００に含めず、ＯｐｅｎＦｌｏｗコントローラ２００又はＯｐｅｎＦｌｏｗスイッチ１００とは別体のサーバ装置に含めてもよい。この場合、ＯｐｅｎＦｌｏｗコントローラ２００又は別体のサーバ装置からバッファ１１０の利用率が監視される。
【００２６】
次に、図２（ｂ）を参照してＯｐｅｎＦｌｏｗコントローラ２００について説明する。
ＯｐｅｎＦｌｏｗコントローラ２００は、図２（ｂ）に示すように、ＯｐｅｎＦｌｏｗスイッチ識別部２１０及び経路設定部２２０を備えている。
【００２７】
ＯｐｅｎＦｌｏｗスイッチ識別部２１０は、ＯｐｅｎＦｌｏｗスイッチ１００から送信されたＰａｃｋｅｔＩｎメッセージを受信する。ＯｐｅｎＦｌｏｗスイッチ識別部２１０は、受信したＰａｃｋｅｔＩｎメッセージに含まれたパケットヘッダを経路設定部２２０に送信する。また、ＯｐｅｎＦｌｏｗスイッチ識別部２１０は、受信したＰａｃｋｅｔＩｎメッセージにＯｐｅｎＦｌｏｗスイッチ１００を識別する識別情報が含まれている場合、当該識別情報に基づいて、パケットが通過したＯｐｅｎＦｌｏｗスイッチ１００を識別する。
【００２８】
経路設定部２２０は、パケットが経由する経路を設定する。設定はＯｐｅｎＦｌｏｗスイッチ１００に対して行われる。ＯｐｅｎＦｌｏｗコントローラ２００が複数のＯｐｅｎＦｌｏｗスイッチ１００の動作を制御している場合には、設定はすべてのＯｐｅｎＦｌｏｗスイッチ１００に対して行われる。これにより、パケットが経由する経路が特定される。経路設定部２２０はＯｐｅｎＦｌｏｗスイッチ識別部２１０からパケットヘッダを受信すると、受信したパケッドヘッダに基づいて、該パケッドヘッダを含むパケットの処理方法を生成する。例えば、通信システムＳ１に含まれる各ＯｐｅｎＦｌｏｗスイッチ１００の通信負荷が分散するように転送経路が生成される。経路設定部２２０は、生成した処理方法を含むＦｌｏｗＭｏｄメッセージをＯｐｅｎＦｌｏｗスイッチ１００に送信する。ＦｌｏｗＭｏｄメッセージは、ＯｐｅｎＦｌｏｗスイッチ１００（パケット送信部１３０）に受信される。パケット送信部１３０は、ＦｌｏｗＭｏｄメッセージに含まれる処理方法をフローテーブル記憶部１２０に登録する。すなわち、パケットの処理方法を定義するフローエントリがフローテーブルに追加される。パケット送信部１３０は、フローテーブル記憶部１２０を参照し、追加されたフローエントリに基づいてバッファ１１０に記憶されたパケットを処理する。
【００２９】
続いて、図４を参照して、ＯｐｅｎＦｌｏｗスイッチ１００のハードウェア構成について説明する。
【００３０】
図４は、ＯｐｅｎＦｌｏｗスイッチ１００のハードウェア構成の一例である。
ＯｐｅｎＦｌｏｗスイッチ１００は、Central Processing Unit（ＣＰＵ）１００ａ、Random Access Memory（ＲＡＭ）１００ｂ、Read Only Memory（ＲＯＭ）１００ｃ及びネットワークインタフェース（ネットワークＩ／Ｆ）１００ｄを含んでいる。これらの各機器１００ａ〜１００ｄは、バス１００ｅによって互いに接続されている。少なくともＣＰＵ１００ａとＲＡＭ１００ｂとが協働することによってコンピュータが実現される。コンピュータに、Application Specific Integrated Circuit（ＡＳＩＣ、特定用途向け集積回路）又はField Programmable Gate Array（ＦＰＧＡ）を含めてもよい。また、ＣＰＵ１００ａに代えて、ＣＰＵ１００ａとパケット処理専用のハードウェア回路とを含むNetwork Processing Unit（ＮＰＵ）が利用されてもよい。
【００３１】
ＲＡＭ１００ｂは、バッファ１１０及びフローテーブル記憶部１２０を実現する。ＲＡＭ１００ｂがバッファ１１０を実現し、ＲＡＭ１１０ｂと異なる別のＲＡＭがフローテーブル記憶部１２０を実現してもよい。ネットワークＩ／Ｆ１００ｄは、例えばポートとPhysical Layer Chip（ＰＨＹチップ）とを備えている。ネットワークＩ／Ｆ１００ｄには、別のＯｐｅｎＦｌｏｗスイッチ１００、ＯｐｅｎＦｌｏｗコントローラ２００並びに送信ホスト３００もしくは受信ホスト４００が接続される。
【００３２】
上述したＲＡＭ１００ｂは、ＲＯＭ１００ｃに記憶されたプログラムを読み込む。読み込まれたプログラムをＣＰＵ１００ａが実行することにより、上述したパケット送信部１３０及びバッファ利用率監視部１５０が実現される。また、読み込まれたプログラムをＣＰＵ１００ａが実行することにより、後述するＯｐｅｎＦｌｏｗスイッチ１００によるパケット処理方法が実行される。尚、プログラムは、後述するフローチャートに応じたものとすればよい。パケット送信部１３０は、ＣＰＵ１００ａに代えてＡＳＩＣ又はＦＰＧＡによって実現されてもよい。
【００３３】
続いて、図５を参照して、ＯｐｅｎＦｌｏｗコントローラ２００のハードウェア構成について説明する。尚、送信ホスト３００及び受信ホスト４００についても基本的にＯｐｅｎＦｌｏｗコントローラ２００の構成と同様の構成を有する。
【００３４】
図５は、ＯｐｅｎＦｌｏｗコントローラ２００のハードウェア構成の一例である。尚、図４に示されるＯｐｅｎＦｌｏｗスイッチ１００の各機器と同様の構成には対応する符号を付し、その説明を省略する。
ＯｐｅｎＦｌｏｗコントローラ２００は、少なくともＣＰＵ２００ａ、ＲＡＭ２００ｂ、ＲＯＭ２００ｃ及びネットワークＩ／Ｆ２００ｄを含んでいる。ＯｐｅｎＦｌｏｗコントローラ２００は、必要に応じて、Hard Disc Drive（ＨＤＤ）２００ｅ、入力Ｉ／Ｆ２００ｆ、出力Ｉ／Ｆ２００ｇ、入出力Ｉ／Ｆ２００ｈ及びドライブ装置２００ｉの少なくとも１つを含んでいてもよい。これらの各機器２００ａ〜２００ｉは、バス２００ｊによって互いに接続されている。
【００３５】
入力Ｉ／Ｆ２００ｆには、入力装置５１０が接続される。入力装置としては、例えばキーボードやマウスなどがある。
出力Ｉ／Ｆ２００ｇには、表示装置５２０が接続される。表示装置としては、例えばタッチパネル方式を含む液晶ディスプレイがある。
入出力Ｉ／Ｆ２００ｈには、半導体メモリ５３０が接続される。半導体メモリ５３０としては、例えばUniversal Serial Bus（ＵＳＢ）メモリやフラッシュメモリなどがある。入出力Ｉ／Ｆ２００ｈは、半導体メモリ５３０に記憶されたプログラムやデータを読み取る。
入力Ｉ／Ｆ２００ｆ及び入出力Ｉ／Ｆ２００はそれぞれ、例えばＵＳＢポートを備えている。出力Ｉ／Ｆ２００ｇは、例えばディスプレイポートを備えている。
【００３６】
ドライブ装置２００ｉには、可搬型記録媒体５４０が挿入される。可搬型記録媒体５４０としては、例えばCompact Disc（ＣＤ）−ＲＯＭ、Digital Versatile Disc（ＤＶＤ）といったリムーバブルディスクがある。ドライブ装置２００ｉは、可搬型記録媒体５４０に記録されたプログラムやデータを読み込む。
【００３７】
上述したＲＡＭ２００ｂは、ＲＯＭ２００ｃ、ＨＤＤ２００ｅ及び半導体メモリ５３０の少なくとも１つに記憶されたプログラムを読み込む。ＲＡＭ２００ｂは、可搬型記録媒体５４０に記録されたプログラムを読み込む。読み込まれたプログラムをＣＰＵ２００ａが実行することにより、上述したＯｐｅｎＦｌｏｗスイッチ識別部２１０及び経路設定部２２０が実現される。尚、プログラムは、後述するフローチャートに応じたものとすればよい。
【００３８】
続いて、図６乃至図１３を参照して、通信システムＳ１の動作について説明する。
【００３９】
図６は、ＯｐｅｎＦｌｏｗスイッチ１００の動作の一例を示すフローチャートである。図７は、ＯｐｅｎＦｌｏｗコントローラ２００の動作の一例を示すフローチャートである。図８乃至図１３は、第１実施形態における通信システムＳ１の動作の一例を説明するための図である。
【００４０】
まず、図６に示すように、パケット送信部１３０は、フローテーブルに未定義のパケットが入力されたか否かを判断する（ステップＳ１０１）。例えば、パケット送信部１３０はパケットを受信すると、フローテーブル記憶部１２０を確認する。パケット送信部１３０は、受信したパケットのパケッドヘッダとフローテーブルのルールとを比較し、比較した結果、一致するルールが存在しなかった場合、フローテーブルに未定義のパケットが入力されたと判断する（ステップＳ１０１：ＹＥＳ）。尚、一致するルールが存在した場合、パケット送信部１３０はフローテーブルに定義されたパケットが入力されたと判断する（ステップＳ１０１：ＮＯ）。この場合、パケット送信部１３０はそのルールに関連付けられたアクションを実行する。
【００４１】
フローテーブルに未定義のパケットが入力されたと判断された場合、次いで、バッファ利用率監視部１５０は、バッファ利用率がバッファ溢れに近いか否かを判断する（ステップＳ１０２）。例えば、バッファ利用率監視部１５０はバッファ１１０を確認する。確認した結果、バッファ１１０の利用率が特定の閾値以下の場合、バッファ利用率監視部１５０はバッファ利用率がバッファ溢れに近くないと判断する（ステップＳ１０２：ＮＯ）、この場合、パケット送信部１３０は、入力された未定義のパケットをバッファ１１０に格納する（ステップＳ１０３）。そして、パケット送信部１３０は、処理方法を問い合わせるメッセージをポートに送信する（ステップＳ１０４）。
【００４２】
これにより、ＯｐｅｎＦｌｏｗスイッチ１００からＯｐｅｎＦｌｏｗコントローラ２００にパケットの処理方法を問い合わせるメッセージが送信される。ＯｐｅｎＦｌｏｗコントローラ２００では、図７に示すように、ＯｐｅｎＦｌｏｗスイッチ識別部２１０が処理方法を問い合わせるメッセージを受信する（ステップＳ２０１）。次いで、経路設定部２２０は、処理方法を生成し（ステップＳ２０２）、生成した処理方法を送信する（ステップＳ２０３）。これにより、ＯｐｅｎＦｌｏｗコントローラ２００からＯｐｅｎＦｌｏｗスイッチ１００にパケットの処理方法が送信される。尚、ＯｐｅｎＦｌｏｗコントローラ２００は、通信システムＳ１に含まれるすべてのＯｐｅｎＦｌｏｗスイッチ１００に処理方法を送信する。ＯｐｅｎＦｌｏｗスイッチ１００は、ＯｐｅｎＦｌｏｗコントローラ２００から送信されたパケットの処理方法を受信すると、受信した処理方法に従って、パケットを処理する。
【００４３】
以上の動作について図８及び図９を参照して説明する。図８に示すように、フローテーブルに定義されていないパケットＡがＯｐｅｎＦｌｏｗスイッチ１００−１に入力され、バッファ利用率がバッファ溢れに近くない場合（例えばパケットが格納されていない場合）、ＯｐｅｎＦｌｏｗスイッチ１００−１に入力されたパケットＡはバッファに格納される。その後、ＯｐｅｎＦｌｏｗスイッチ１００−１は、シーケンス番号（例えば「１」、「２」）を含むパケットヘッダをＯｐｅｎＦｌｏｗコントローラ２００に送信し、パケットＡの処理方法を問い合わせる。この結果、図９に示すように、ＯｐｅｎＦｌｏｗコントローラ２００は、パケットＡの処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に送信する。
【００４４】
ここで、図６において、バッファ１１０の利用率が特定の閾値を超えている場合、バッファ利用率監視部１５０はバッファ利用率がバッファ溢れに近いと判断する（ステップＳ１０２：ＹＥＳ）。バッファ利用率がバッファ溢れに近いと判断された場合、次いで、パケット送信部１３０は、自己（パケットが入力されたＯｐｅｎＦｌｏｗスイッチ１００）が最終段のＯｐｅｎＦｌｏｗスイッチ１００であるか否かを判断する（ステップＳ１０５）。当該判断は、自己が受信ホスト４００に接続されているか否かに基づいて行われる。パケット送信部１３０は、自己が受信ホスト４００に接続されているか否か不明である場合には、ＯｐｅｎＦｌｏｗコントローラ２００に問い合わせてもよい。パケット送信部１３０は、自己が最終段のＯｐｅｎＦｌｏｗスイッチ１００でないと判断した場合（ステップＳ１０５：ＮＯ）、入力されたパケットを次のＯｐｅｎＦｌｏｗスイッチ１００に送信する（ステップＳ１０６）。
【００４５】
以上の動作について図９乃至図１３を参照して説明する。図９に示すように、バッファにパケットＡが格納されており、バッファ利用率がバッファ溢れに近くなっている。この状態で、フローテーブルに定義されていないパケットＢがＯｐｅｎＦｌｏｗスイッチ１００−１に入力される。パケットＢの属性はパケットＡの属性と相違する。ＯｐｅｎＦｌｏｗスイッチ１００−１では、バッファ溢れを回避するために、図１０に示すように、パケットＢの処理方法の問い合わせが実行されず、入力されたパケットＢがＯｐｅｎＦｌｏｗスイッチ１００−２に転送される。尚、ＯｐｅｎＦｌｏｗスイッチ１００−１は、パケットＡの処理を実行中である。
【００４６】
ここで、ＯｐｅｎＦｌｏｗスイッチ１００−２においても、図６に示すフローチャートに応じた動作が実行される。すなわち、図１１に示すように、フローテーブルに定義されていないパケットＢがＯｐｅｎＦｌｏｗスイッチ１００−２に入力され、バッファ利用率がバッファ溢れに近くない場合（例えばパケットが格納されていない場合）、ＯｐｅｎＦｌｏｗスイッチ１００−２に入力されたパケットＢはバッファに格納される。その後、ＯｐｅｎＦｌｏｗスイッチ１００−２は、シーケンス番号を含むパケットヘッダをＯｐｅｎＦｌｏｗコントローラ２００に送信し、パケットＢの処理方法を問い合わせる。一方、図１１においてＯｐｅｎＦｌｏｗスイッチ１００−１におけるパケットＡの処理は完了し、パケットＡはＯｐｅｎＦｌｏｗスイッチ１００−２に向けて転送されている。
【００４７】
ＯｐｅｎＦｌｏｗコントローラ２００は、パケットＢの処理方法の問い合わせを受信すると、図１２に示すように、パケットＢの処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に送信する。一方、図１２においてＯｐｅｎＦｌｏｗスイッチ１００−２は、既にパケットＡの処理方法を受信しているため、当該処理方法に基づいてパケットＡを転送する。パケットＢの処理方法を受信したＯｐｅｎＦｌｏｗスイッチ１００−２はパケットＢの処理を実行し、処理が完了すると、図１３に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−２はパケットＢを転送する。
【００４８】
尚、図１３において、ＯｐｅｎＦｌｏｗスイッチ１００−２は受信ホスト４００と接続されている。このため、ＯｐｅｎＦｌｏｗスイッチ１００−２のバッファ利用率がバッファ溢れに近い場合にパケットＢが入力されると、パケット送信部１３０は入力されたパケットを破棄する（ステップＳ１０７）。
【００４９】
さらに、図１４を参照して以上説明した内容を時系列に沿って説明する。
【００５０】
図１４は、第１実施形態における通信システムＳ１の動作の一例を示すシーケンス図である。
図１４に示すように、時刻ｔ０に送信ホスト３００はパケットＡを送信する。ＯｐｅｎＦｌｏｗスイッチ１００−１はパケットＡを受信すると、時刻ｔ１にパケットＡをバッファに格納し、ＯｐｅｎＦｌｏｗコントローラ２００にパケットＡの処理方法を問い合わせる。ＯｐｅｎＦｌｏｗスイッチ１００−１がパケットＡを格納している間、時刻ｔ２に送信ホスト３００はパケットＢを送信する。ＯｐｅｎＦｌｏｗスイッチ１００−１はパケットＢを受信し、バッファ溢れに近いと判断した場合、パケットＢをＯｐｅｎＦｌｏｗスイッチ１００−２に転送する。ＯｐｅｎＦｌｏｗスイッチ１００−２はパケットＢを受信すると、時刻ｔ３にパケットＢをバッファに格納し、ＯｐｅｎＦｌｏｗコントローラ２００にパケットＢの処理方法を問い合わせる。
【００５１】
ＯｐｅｎＦｌｏｗコントローラ２００は、時刻ｔ４にパケットＡの処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に送信する。ＯｐｅｎＦｌｏｗコントローラ２００は、時刻ｔ５にパケットＢの処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２に送信する。パケットＡの処理方法を受信したＯｐｅｎＦｌｏｗスイッチ１００−１は、時刻ｔ６にパケットＡをＯｐｅｎＦｌｏｗスイッチ１００−２に転送する。ＯｐｅｎＦｌｏｗスイッチ１００−２はパケットＡを受信すると、時刻ｔ７にパケットＡを受信ホスト４００に転送する。パケットＢの処理方法を受信したＯｐｅｎＦｌｏｗスイッチ１００−２は、時刻ｔ８にパケットＢを受信ホスト４００に転送する。
【００５２】
以上説明したように、第１実施形態によれば、フローテーブルに未定義のパケットがＯｐｅｎＦｌｏｗスイッチ１００−１に入力され、監視されるバッファの利用率がバッファ溢れに近いと、パケットの処理方法に対する問い合わせが実行されず、入力されたパケットが次のＯｐｅｎＦｌｏｗスイッチ１００−２に転送される。このため、ＯｐｅｎＦｌｏｗスイッチ１００−１では、入力されたパケットによるバッファ溢れを回避することができる。この結果、転送時間の増大や転送効率の劣化といった問題が解消される。特に、バッファ１１０の記憶容量より大きな記憶容量を有する別のバッファに取り替えるといった措置をとらないため、ＯｐｅｎＦｌｏｗスイッチの価格高騰を抑えることができる。また、監視されるバッファの利用率がバッファ溢れから遠ざかると、パケットの処理方法に対する問い合わせが再び実行される。これにより、フローテーブルに未定義のパケットがＯｐｅｎＦｌｏｗスイッチ１００−１に入力された場合、パケットの処理方法に対する問い合わせが再開する。
【００５３】
（第２実施形態）
次に、図１５乃至図１８を参照して本発明の第２実施形態について説明する。
【００５４】
図１５乃至図１８は、第２実施形態における通信システムＳ２の動作の一例を説明するための図である。
通信システムＳ２は、例えば図１５に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２，１００−３，１００−４及びＯｐｅｎＦｌｏｗコントローラ２００を備えている。ＯｐｅｎＦｌｏｗスイッチ１００−３，１００−４の機能及びハードウェア構成は、ＯｐｅｎＦｌｏｗスイッチ１００−１と同様である。
【００５５】
ＯｐｅｎＦｌｏｗスイッチ１００−１は、通信回線によって送信ホスト３００と接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−４は、通信回線によって受信ホスト４００と接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−１は、通信回線によってＯｐｅｎＦｌｏｗスイッチ１００−２，１００−３とも接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−４は、通信回線によってＯｐｅｎＦｌｏｗスイッチ１００−２，１００−３とも接続されている。ＯｐｅｎＦｌｏｗスイッチ１００−２とＯｐｅｎＦｌｏｗスイッチ１００−３は並列に配置されている。ＯｐｅｎＦｌｏｗスイッチ１００−１，・・・，１００−４は、それぞれＯｐｅｎＦｌｏｗコントローラ２００と制御回線によって接続されている。ＯｐｅｎＦｌｏｗコントローラ２００は、ＯｐｅｎＦｌｏｗスイッチ１００−１，・・・，１００−４の動作を制御する。
【００５６】
ここで、図１５に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−１のバッファにパケットＡが格納され、バッファ利用率がバッファ溢れに近い場合、パケットＢがＯｐｅｎＦｌｏｗスイッチ１００−１に入力されると、パケットＢの処理方法の問い合わせが実行されずに、図１６に示すように、パケットＢはＯｐｅｎＦｌｏｗスイッチ１００−２に転送される。言い換えれば、パケットＢはＯｐｅｎＦｌｏｗスイッチ１００−１を通過する。尚、ＯｐｅｎＦｌｏｗスイッチ１００−１は、ＯｐｅｎＦｌｏｗスイッチ１００−２とＯｐｅｎＦｌｏｗスイッチ１００−３のどちらを転送先とするかについて予め設定されている。また、図１６に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−１（パケット送信部１３０）は、パケットＢを転送する際にパケットＢに識別情報を付与する。識別情報は、ＯｐｅｎＦｌｏｗスイッチ１００−１であることを識別する情報である。図１６において、パケットＢには識別情報「Ｓ１」が付与されている。
【００５７】
ＯｐｅｎＦｌｏｗスイッチ１００−２（パケット送信部１３０）は、バッファ利用率がバッファ溢れに近くない場合（例えばバッファにパケットが格納されていない場合）、入力されたパケットＢをバッファに格納する。ＯｐｅｎＦｌｏｗスイッチ１００−２（パケット送信部１３０）は、パケットＢの処理方法を問い合わせる。処理方法の問い合わせの際には、識別情報も併せて送信される。
【００５８】
ＯｐｅｎＦｌｏｗコントローラ２００（ＯｐｅｎＦｌｏｗスイッチ識別部２１０）は、処理方法の問い合わせ及び識別情報を受信する。ＯｐｅｎＦｌｏｗスイッチ識別部２１０は、受信した識別情報に基づいて、パケットＢが通過したＯｐｅｎＦｌｏｗスイッチを識別する。したがって、識別情報「Ｓ１」が識別される。ＯｐｅｎＦｌｏｗコントローラ２００（経路設定部２２０）は、パケットＢの処理方法を生成し、図１７に示すように、生成した処理方法をＯｐｅｎＦｌｏｗスイッチ１００−１，・・・，１００−４に送信する。例えば、経路設定部２２０によってＯｐｅｎＦｌｏｗスイッチ１００−１，１００−３，１００−４を経由してパケットＢを転送する処理方法が生成され送信される。この結果、図１７においてシーケンス番号「２」に続くシーケンス番号「３」、「４」を含むパケットＢがＯｐｅｎＦｌｏｗスイッチ１００−１に入力されると、図１８に示すように、シーケンス番号「３」、「４」を含むパケットＢは、処理方法を受信したＯｐｅｎＦｌｏｗスイッチ１００−１，１００−３，１００−４を経由して順に転送されていく。尚、図１７において、パケットＡは、パケットＡの処理方法を受信したＯｐｅｎＦｌｏｗスイッチ１００−１，１００−２（又は１００−３），１００−４によって転送され、受信ホスト４００に向かっている。
【００５９】
一方、経路設定部２２０は、上述した処理方法とは別の処理方法を生成する。具体的には、通過した識別情報を含むパケットＢの処理方法を生成する。経路設定部２２０は、図１７に示すように、生成した別の処理方法を、送信先である受信ホスト４００にパケットＢが到達するまでの経路上に配置されたＯｐｅｎＦｌｏｗスイッチ１００−２，１００−４に送信する。ＯｐｅｎＦｌｏｗスイッチ１００−２は、別の処理方法によってバッファに格納されたシーケンス番号「１」、「２」を含むパケットＢを処理する。ＯｐｅｎＦｌｏｗスイッチ１００−４も同様に処理する。この結果、図１８に示すように、ＯｐｅｎＦｌｏｗスイッチ１００−２のバッファに格納されたシーケンス番号「１」、「２」を含むパケットＢは、受信ホスト４００に向かって転送される。
【００６０】
受信ホスト４００は、識別情報を含むパケットを受信した場合、その旨を最終段のＯｐｅｎＦｌｏｗスイッチ１００−４に通知する。ＯｐｅｎＦｌｏｗスイッチ１００−４（パケット送信部１３０）は通知を受信すると、フローテーブルに登録された別の処理方法を削除する。すなわち、別の処理方法は、通知を受信するまで、ＯｐｅｎＦｌｏｗスイッチ１００−４に一時的に保存される処理方法である。ＯｐｅｎＦｌｏｗスイッチ１００−４（パケット送信部１３０）は、別の処理方法を削除すると、ＯｐｅｎＦｌｏｗスイッチ１００−２にその旨を通知する。ＯｐｅｎＦｌｏｗスイッチ１００−２は通知を受信すると、ＯｐｅｎＦｌｏｗスイッチ１００−４と同様に別の処理方法を削除する。
【００６１】
このように、第２実施形態によれば、パケットＢが経由すべき経路と異なる経路にパケットＢが転送されてバッファに格納されても、パケットＢの処理方法とは異なる別の処理方法がＯｐｅｎＦｌｏｗコントローラ２００から送信される。パケットＢが到達するまでの経路上に配置されたＯｐｅｎＦｌｏｗスイッチ１００−２，１００−４は、識別情報「Ｓ１」を含む別の処理方法を受信して、識別情報「Ｓ１」を含むパケットＢを処理する。この結果、識別情報「Ｓ１」を含むパケットＢはＯｐｅｎＦｌｏｗスイッチ１００−２で破棄されずに送信先である受信ホスト４００に転送される。
【００６２】
以上、本発明の好ましい実施形態について詳述したが、本発明に係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。例えば、２つの機能を１つの装置で実現してもよいし、１つの機能を２つ以上の装置に分散してもよい。また、上述した発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の1つとして位置付けられる。さらに、上述した実施形態では利用率という用語使用して説明したが、利用量、消費率、消費量、残存容量、残存率などの用語をして説明してもよい。
【００６３】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信するパケット送信部と、パケットを格納するバッファと、を有し、前記パケット送信部は、前記フローテーブルに未定義のパケットが入力されたときに、前記バッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理装置。
（付記２）前記バッファの利用率を監視する監視部を備え、前記パケット送信部は、前記監視部によって監視される前記バッファの利用率が前記閾値を超えている場合、前記未定義のパケットを前記他のパケット処理装置に送信することを特徴とする付記１に記載のパケット処理装置。
（付記３）前記パケット送信部は、前記未定義のパケットを前記他のパケット処理装置に送信する場合、送信する前記未定義のパケットに前記パケット処理装置を識別する識別情報を付与し、前記他のパケット処理装置は、前記識別情報が付与された識別情報付パケットが入力された場合、前記識別情報付パケットの処理方法を問い合わせるメッセージ及び前記識別情報を所定のポートに送信し、前記メッセージ及び前記識別情報に基づいて前記識別情報付パケットが送信先に到達するまでの経路上に配置された前記パケット処理装置に送信された、前記識別情報付パケットの処理方法を受信することを特徴とする付記１又は２に記載のパケット処理装置。
（付記４）パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップを実行するパケット処理方法であって、前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理方法。
（付記５）前記バッファの利用率を監視する監視ステップを備え、前記パケット送信ステップは、前記監視ステップによって監視される前記バッファの利用率が前記閾値を超えている場合、前記未定義のパケットを前記他のパケット処理装置に送信することを特徴とする付記４に記載のパケット処理方法。
（付記６）前記パケット送信ステップは、前記未定義のパケットを前記他のパケット処理装置に送信する場合、送信する前記未定義のパケットに前記パケット処理装置を識別する識別情報を付与し、前記他のパケット処理装置は、前記識別情報が付与された識別情報付パケットが入力された場合、前記識別情報付パケットの処理方法を問い合わせるメッセージ及び前記識別情報を所定のポートに送信し、前記メッセージ及び前記識別情報に基づいて前記識別情報付パケットが送信先に到達するまでの経路上に配置された前記パケット処理装置に送信された、前記識別情報付パケットの処理方法を受信することを特徴とする付記４又は５に記載のパケット処理方法。
（付記７）パケットの処理方法が定義されるフローテーブルに基づいてパケットを送信する送信ステップをコンピュータに実行させるためのパケット処理プログラムであって、前記送信ステップは、前記フローテーブルに未定義のパケットが入力されたときに、パケットを格納するバッファの利用率が閾値を超えている場合、前記未定義のパケットを他のパケット処理装置に送信し、前記バッファの利用率が前記閾値以下の場合、前記未定義のパケットを前記バッファに格納するとともに、前記未定義のパケットの処理方法を問い合わせるメッセージを所定のポートに送信することを特徴とするパケット処理プログラム。
（付記８）前記バッファの利用率を監視する監視ステップを備え、前記パケット送信ステップは、前記監視ステップによって監視される前記バッファの利用率が前記閾値を超えている場合、前記未定義のパケットを前記他のパケット処理装置に送信することを特徴とする付記７に記載のパケット処理プログラム。
（付記９）前記パケット送信ステップは、前記未定義のパケットを前記他のパケット処理装置に送信する場合、送信する前記未定義のパケットに前記パケット処理装置を識別する識別情報を付与し、前記他のパケット処理装置は、前記識別情報が付与された識別情報付パケットが入力された場合、前記識別情報付パケットの処理方法を問い合わせるメッセージ及び前記識別情報を所定のポートに送信し、前記メッセージ及び前記識別情報に基づいて前記識別情報付パケットが送信先に到達するまでの経路上に配置された前記パケット処理装置に送信された、前記識別情報付パケットの処理方法を受信することを特徴とする付記７又は８に記載のパケット処理プログラム。
【符号の説明】
【００６４】
１００，１００−１〜１００−４  ＯｐｅｎＦｌｏｗスイッチ
１１０  バッファ
１２０  フローテーブル記憶部
１３０  パケット送信部
１５０  バッファ利用率監視部
２００  ＯｐｅｎＦｌｏｗコントローラ
２１０  ＯｐｅｎＦｌｏｗスイッチ識別部
２２０  経路設定部
Ｓ１，Ｓ２  通信システム
【図１】
2015080175.tif 000003
【図２】
2015080175.tif 000004
【図３】
2015080175.tif 000005
【図４】
2015080175.tif 000006
【図５】
2015080175.tif 000007
【図６】
2015080175.tif 000008
【図７】
2015080175.tif 000009
【図８】
2015080175.tif 000010
【図９】
2015080175.tif 000011
【図１０】
2015080175.tif 000012
【図１１】
2015080175.tif 000013
【図１２】
2015080175.tif 000014
【図１３】
2015080175.tif 000015
【図１４】
2015080175.tif 000016
【図１５】
2015080175.tif 000017
【図１６】
2015080175.tif 000018
【図１７】
2015080175.tif 000019
【図１８】
2015080175.tif 000020