(57)【特許請求の範囲】
【請求項１】
送信側の情報処理装置から受信したパケットを含むフローを、受信側の情報処理装置へ送信するスイッチ装置と、前記スイッチ装置が受信したフローに含まれるパケットを識別する識別装置とを有する情報処理システムにおいて、
前記スイッチ装置は、
接続の開始を示す開始パケットをスヌープすると共に、前記識別装置から前記フローを識別するフロー情報を含むスヌープ指示を受信した場合、前記スヌープ指示に含まれたフロー情報に関連するフローに含まれるパケット、および、前記スヌープ指示に含まれたフロー情報に関連するフローに含まれるパケットに対する応答パケットをスヌープするスヌープ部と、
前記スヌープ部がスヌープしたパケットおよび前記応答パケットを前記識別装置へ送信する第１の送信部と、
前記識別装置から、パケットが伝送される経路を識別する経路情報を含む測定指示を受信した場合、前記測定指示に含まれた経路情報で識別される経路におけるラウンドトリップタイムを測定し、測定したラウンドトリップタイムを示す情報を前記識別装置へ送信する測定部と
を有し、
前記識別装置は、
それぞれのフローについて、前記フローに関するフロー情報と共に、前記フローに含まれるパケットが伝送される経路における前記経路情報を格納するテーブルを記憶する記憶部と、
前記スヌープ部がスヌープした前記開始パケットを受信した場合、前記開始パケットを含むフローのフロー情報を前記テーブルに登録する登録部と、
前記テーブルにフロー情報が登録されたそれぞれのフローについて、第１の時間が経過する度に、前記フローのフロー情報を含む前記スヌープ指示を前記スイッチ装置へ送信する第２の送信部と、
前記スヌープ指示に応じて前記スヌープ部がスヌープした前記応答パケットに含まれたウインドウサイズと、前記スヌープ指示に含まれたフロー情報に対応するフローに含まれるパケットが伝送される経路について前記測定部が測定したラウンドトリップタイムとに基づいて、前記スヌープ指示に含まれたフロー情報に対応するフローのスループットを算出し、算出されたスループットが所定の閾値以上である場合に、前記スヌープ指示に含まれたフロー情報で識別されるフローがElephantフローであると判定する判定部と、
前記経路情報毎に、前記経路情報を含む前記測定指示を前記スイッチ装置へ送信する第３の送信部と
を有することを特徴とする情報処理システム。
【請求項２】
前記スヌープ部は、
接続の中断を示す中断パケットおよび接続の終了を示す終了パケットをさらにスヌープし、
前記登録部は、
前記スヌープ部がスヌープした前記中断パケットを受信した場合、前記中断パケットを含むフローのフロー情報を前記テーブルから削除すると共に、前記スヌープ部がスヌープした前記終了パケットを受信した場合、前記終了パケットを含むフローのフロー情報を前記テーブルから削除することを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記登録部は、
前記テーブルに登録されたそれぞれのフロー情報の中で、前記テーブルに登録されてからの経過時間が、前記第１の時間よりも長い第２の時間を超えたフロー情報を、前記テーブルから削除することを特徴とする請求項１または２に記載の情報処理システム。
【請求項４】
前記判定部は、
前記Elephantフローと判定したフローのフロー情報を含む書込み指示を前記スイッチ装置へ送信し、
前記スイッチ装置は、
前記判定部から受信した前記書込み指示に含まれたフロー情報に対応するフローに含まれるパケットを受信した場合、受信したパケットのヘッダ内に、前記Elephantフローに含まれるパケットであることを示す情報を書き込む書込み部
を有することを特徴とする請求項１から３のいずれか一項に記載の情報処理システム。
【請求項５】
送信側の情報処理装置から受信したパケットを含むフローを、受信側の情報処理装置へ送信するスイッチ装置と、前記スイッチ装置が受信したフローに含まれるパケットを識別する識別装置とを有する情報処理システムの制御方法において、
前記スイッチ装置は、
接続の開始を示す開始パケットをスヌープし、
前記識別装置から前記フローを識別するフロー情報を含むスヌープ指示を受信した場合、前記スヌープ指示に含まれたフロー情報に関連するフローに含まれるパケット、および、前記スヌープ指示に含まれたフロー情報に関連するフローに含まれるパケットに対する応答パケットをスヌープし、
スヌープしたパケットおよび前記応答パケットを前記識別装置へ送信すし、
前記識別装置から、パケットが伝送される経路を識別する経路情報を含む測定指示を受信した場合、前記測定指示に含まれた経路情報で識別される経路におけるラウンドトリップタイムを測定し、
測定したラウンドトリップタイムを示す情報を前記識別装置へ送信する
処理を実行し、
前記識別装置は、
前記スイッチ装置から前記開始パケットを受信した場合、前記開始パケットを含むフローのフロー情報をテーブルに登録し、
前記テーブルにフロー情報が登録されたそれぞれのフローについて、所定時間が経過する度に、前記フローのフロー情報を含む前記スヌープ指示を前記スイッチ装置へ送信し、
前記スヌープ指示に応じて前記スイッチ装置がスヌープした前記応答パケットに含まれたウインドウサイズと、前記スヌープ指示に含まれたフロー情報に対応するフローに含まれるパケットが伝送される経路について前記スイッチ装置が測定したラウンドトリップタイムとに基づいて、前記スヌープ指示に含まれたフロー情報に対応するフローのスループットを算出し、
算出されたスループットが所定の閾値以上である場合に、前記スヌープ指示に含まれたフロー情報で識別されるフローがElephantフローであると判定し、
前記経路情報毎に、前記経路情報を含む前記測定指示を前記スイッチ装置へ送信する
処理を実行することを特徴とする情報処理システムの制御方法。
【請求項６】
送信側の情報処理装置から受信したパケットを含むフローを、受信側の情報処理装置へ送信するスイッチ装置において、
それぞれのフローについて、前記フローに関するフロー情報と共に、前記フローに含まれるパケットが伝送される経路を示す経路情報を格納するテーブルを記憶する記憶部と、
接続の開始を示す開始パケットをスヌープすると共に、前記テーブルにフロー情報が登録されたそれぞれのフローについて、第１の時間が経過する度に、前記フローに含まれるパケット、および、前記フローに含まれるパケットに対する応答パケットをスヌープするスヌープ部と、
前記スヌープ部がスヌープした前記開始パケットを含むフローの前記フロー情報および前記経路情報を前記テーブルに登録する登録部と、
前記テーブルに格納された経路情報毎にラウンドトリップタイムを測定する測定部と、
前記スヌープ部がスヌープした前記応答パケットに含まれたウインドウサイズと、前記測定部が測定したラウンドトリップタイムとに基づいて、フローのスループットを算出し、算出されたスループットが所定の閾値以上である場合に、当該フローがElephantフローであると判定する判定部と
を有することを特徴とするスイッチ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理システムの制御方法およびスイッチ装置に関する。
【背景技術】
【０００２】
データセンタ等のネットワーク内を流れるフローには、MiceフローとElephantフローとが混在することが知られている。Elephantフローは、Miceフローよりも発生頻度が少ないが、Miceフローよりも伝送するデータ量が多い。そのため、Elephantフローによりネットワーク内で遅延や輻輳が発生する場合がある。そのため、ネットワーク内において、Elephantフローの伝送経路の監視および制御が行われる。
【０００３】
また、ネットワーク内のノードにおいて、ネットワーク内を流れるパケットを所定のサンプリングレートでサンプリングし、サンプリングしたパケットに対して確率分布モデルを仮定し、巨大フローのパケットか否かを判定する技術が知られている。また、ネットワーク内のノードにおいて、ネットワーク内を流れるパケットを所定個数毎にサンプリングし、サンプリングしたパケットにＳＹＮフラグが立っていれば、サンプリングしたパケットを含むフローを監視対象とする技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２６７８９２号公報
【特許文献２】特開２０１１−４３３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ネットワーク内を流れるパケットを、所定のサンプリングレートで、または、所定個数毎にサンプリングする場合、サンプリングのタイミングによっては、Elephantフローに含まれるパケットがサンプリングされない虞がある。そのため、Elephantフローに含まれるパケットの情報を得ることができず、Elephantフローの伝送経路の把握が困難となる場合がある。また、ネットワーク内を流れる全てのパケットをキャプチャし、全てのパケットの情報を用いて、Elephantフローを検出することも考えられる。しかし、ネットワーク内の伝送速度が高速になると、全てのパケットをキャプチャして解析することが困難となる。
【０００６】
本願に開示の技術は、Elephantフロー等の所定のフローを効率的に検出する。
【課題を解決するための手段】
【０００７】
１つの側面では、情報処理システムは、送信側の情報処理装置から受信したパケットを含むフローを、受信側の情報処理装置へ送信するスイッチ装置と、スイッチ装置が受信したフローに含まれるパケットを識別する識別装置とを有する。スイッチ装置は、スヌープ部と、第１の送信部とを有する。スヌープ部は、接続の開始を示す開始パケットをスヌープすると共に、識別装置からフローを識別するフロー情報を含むスヌープ指示を受信した場合、スヌープ指示に含まれたフロー情報に関連するフローに含まれるパケットをスヌープする。第１の送信部は、スヌープ部がスヌープしたパケットを識別装置へ送信する。識別装置は、記憶部と、登録部と、第２の送信部と、判定部とを有する。記憶部は、それぞれのフローについて、フローに関するフロー情報を格納するテーブルを記憶する。登録部は、スヌープ部がスヌープした開始パケットを受信した場合、開始パケットを含むフローのフロー情報をテーブルに登録する。第２の送信部は、テーブルにフロー情報が登録されたそれぞれのフローについて、第１の時間が経過する度に、フローのフロー情報を含むスヌープ指示をスイッチ装置へ送信する。判定部は、スヌープ指示に応じてスヌープ部がスヌープしたパケットをスイッチ装置から受信した場合、スヌープ部がスヌープしたパケットが有する情報から算出した値に基づいて、スヌープ指示に含まれたフロー情報で識別されるフローが所定のフローであるか否かを判定する。
【発明の効果】
【０００８】
１実施形態によれば、Elephantフロー等の所定のフローを効率的に検出することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、情報処理システムの一例を示す図である。
【図２】図２は、実施例１におけるスイッチ装置の一例を示すブロック図である。
【図３】図３は、フローテーブルの一例を示す図である。
【図４】図４は、ＰＤＵの一例を示す図である。
【図５】図５は、パケットのヘッダを説明するための図である。
【図６】図６は、実施例１における識別装置の一例を示すブロック図である。
【図７】図７は、実施例１におけるモニタテーブルの一例を示す図である。
【図８】図８は、実施例１におけるElephantフローの判定方法の一例を説明する図である。
【図９】図９は、実施例１におけるElephantフローの判定方法の一例を説明する図である。
【図１０】図１０は、Elephantフローの判定における状態遷移の一例を説明する図である。
【図１１】図１１は、実施例１におけるスイッチ装置の動作の一例を示すフローチャートである。
【図１２】図１２は、実施例１における識別装置の動作の一例を示すフローチャートである。
【図１３】図１３は、実施例１における識別装置の動作の一例を示すフローチャートである。
【図１４】図１４は、実施例２におけるスイッチ装置の一例を示すブロック図である。
【図１５】図１５は、実施例３における識別装置の一例を示すブロック図である。
【図１６】図１６は、経路情報テーブルの一例を示す図である。
【図１７】図１７は、経路情報の一例を説明する図である。
【図１８】図１８は、実施例３におけるモニタテーブルの一例を示す図である。
【図１９】図１９は、ＲＴＴテーブルの一例を示す図である。
【図２０】図２０は、実施例３におけるスイッチ装置の一例を示すブロック図である。
【図２１】図２１は、実施例３におけるElephantフローの判定方法の一例を説明する図である。
【図２２】図２２は、実施例３におけるElephantフローの判定方法の一例を説明する図である。
【図２３】図２３は、実施例３におけるスイッチ装置の動作の一例を示すフローチャートである。
【図２４】図２４は、実施例３における識別装置の動作の一例を示すフローチャートである。
【図２５】図２５は、スイッチ装置の機能を実現するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する情報処理システム、情報処理システムの制御方法およびスイッチ装置の実施例を、図面に基づいて詳細に説明する。なお、以下の実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１１】
［情報処理システム１０］
図１は、情報処理システム１０の一例を示す図である。情報処理システム１０は、識別装置２０、複数のスイッチ装置３０−１〜３０−８、および複数の情報処理装置１４−１〜１４−８を有する。情報処理システム１０は、例えばデータセンタに設けられる。複数の情報処理装置１４−１〜１４−８のそれぞれは、例えばサーバである。なお、以下では、複数のスイッチ装置３０−１〜３０−８のそれぞれを区別することなく総称する場合にスイッチ装置３０と記載する。また、複数の情報処理装置１４−１〜１４−８のそれぞれを区別することなく総称する場合に情報処理装置１４と記載する。
【００１２】
情報処理システム１０は、複数のスイッチ装置３０−１〜３０−４を含む上位スイッチ群１１と、複数のスイッチ装置３０−５〜３０−８を含む下位スイッチ群１２を有する。複数のスイッチ装置３０−１〜３０−４は、例えばSpineスイッチである。また、複数のスイッチ装置３０−５〜３０−８は、例えばLeafスイッチである。下位スイッチ群１２に含まれるスイッチ装置３０−５〜３０−８のそれぞれは、上位スイッチ群１１に含まれる複数のスイッチ装置３０−１〜３０−４の中の２つ以上のスイッチ装置３０に接続される。また、下位スイッチ群１２に含まれるスイッチ装置３０−５〜３０−８のそれぞれは、情報処理装置１４に接続される。複数のスイッチ装置３０は、例えばファットツリーのトポロジーを構成する。
【００１３】
それぞれのスイッチ装置３０は、例えば図１の実線で示されたデータネットワークによって互いに接続される。また、それぞれのスイッチ装置３０は、例えば図１の破線で示された管理ネットワークによって、識別装置２０に接続される。本実施例における識別装置２０は、スイッチ装置３０から通知される情報に基づいて、スイッチ装置３０を介して情報処理装置１４間で伝送されるフローの中で、Elephantフローを識別する。フローとは、ネットワーク上を流れる共通の属性をもった一連のパケット群を指す。本実施例では、送信元ＩＰ（Internet  Protocol）アドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が共通のパケット群をフローと呼ぶ。
【００１４】
そして、識別装置２０は、Elephantフローを特定するフロー情報を、例えば情報処理装置１４に接続された下位スイッチ群１２に含まれるスイッチ装置３０へ送信する。Elephantフローとは、伝送されるデータの総量が例えば１ＭＢｙｔｅ等の所定量以上のフローである。
【００１５】
下位スイッチ群１２に含まれるスイッチ装置３０は、識別装置２０から受信したフロー情報で特定されるElephantフローに含まれるパケットを情報処理装置１４から受信した場合、受信したパケットのヘッダに、Elephantフローであることを示す識別情報を書き込む。そして、スイッチ装置３０は、Elephantフローであることを示す識別情報をヘッダに書き込んだパケットを、上位スイッチ群１１に含まれるスイッチ装置３０等の他のスイッチ装置３０へ送信する。
【００１６】
各スイッチ装置３０は、受信したパケットのヘッダを参照することにより、受信したパケットがElephantフローに含まれるパケットであることを認識することができる。これにより、各スイッチ装置３０は、情報処理システム１０内で輻輳が発生した場合等の所定の場面で、Elephantフローに含まれるパケットの経路を変更する等の制御を行うことにより、輻輳状態の早期解消や、Elephantフローの保護等を行うことができる。
【００１７】
［スイッチ装置３０］
図２は、実施例１におけるスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、制御部３１、記憶部３２、スイッチングモジュール３３、複数の受信ポート３４−１〜３４−ｎ、複数の送信キュー３５−１〜３５−ｎ、複数の送信ポート３６−１〜３６−ｎ、および管理ポート３７を有する。複数の受信ポート３４−１〜３４−ｎのそれぞれは、データネットワークを介して、情報処理装置１４または他のスイッチ装置３０に接続される。複数の送信ポート３６−１〜３６−ｎのそれぞれは、データネットワークを介して、情報処理装置１４または他のスイッチ装置３０に接続される。管理ポート３７は、管理ネットワークを介して識別装置２０に接続される。
【００１８】
なお、以下では、複数の受信ポート３４−１〜３４−ｎのそれぞれを区別することなく総称する場合に受信ポート３４と記載する。また、複数の送信キュー３５−１〜３５−ｎのそれぞれを区別することなく総称する場合に送信キュー３５と記載する。また、複数の送信ポート３６−１〜３６−ｎのそれぞれを区別することなく総称する場合に送信ポート３６と記載する。
【００１９】
記憶部３２は、フローテーブル３２０を記憶する。図３は、フローテーブル３２０の一例を示す図である。フローテーブル３２０には、例えば図３に示すように、フローＩＤ３２００、フロー情報３２０１、および転送時刻３２０２が対応付けて格納される。
【００２０】
フローＩＤ３２００は、それぞれのフローを識別する情報である。フロー情報３２０１は、フローに含まれるパケットが共通に有するヘッダの情報である。本実施例において、フロー情報３２０１には、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が含まれる。本実施例において、フローテーブル３２０には、識別装置２０によってElephantフローと判定されたフローについて、フローＩＤ３２００、フロー情報３２０１、および転送時刻３２０２が格納される。
【００２１】
転送時刻３２０２は、フローＩＤ３２００に対応するElephantフローに含まれるパケットが、ヘッダにElephantフローであることを示す識別情報が書き込まれて転送された時刻を示す。
【００２２】
図２に戻って説明を続ける。制御部３１は、ＰＤＵ送受信部３１０、ＰＤＵ生成部３１１、スヌープ制御部３１２、登録部３１３、および削除部３１４を有する。ＰＤＵ送受信部３１０は、管理ポート３７を介して識別装置２０からＰＤＵ（Protocol  Data  Unit）を受信した場合、受信したＰＤＵに含まれたペイロードをスヌープ制御部３１２および登録部３１３へ送る。また、ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する。
【００２３】
図４は、ＰＤＵの一例を示す図である。本実施例において、識別装置２０とスイッチ装置３０との間、または、スイッチ装置３０間で、フラグやデータ等の送受信を行う場合、例えば図４に示すＰＤＵが用いられる。本実施例では、例えばIEEE802.1Qに規定されているＰＤＵが用いられる。ＰＤＵの宛先ＭＡＣ（Media  Access  Control）アドレスには、予約されたＭＡＣアドレスである01-80-C2-00-00-XXが格納される。ＰＤＵのペイロードには、フラグと、フラグで識別される処理に用いられるデータとが含まれる。ペイロードに含まれるフラグは、例えば８ビットで表される。また、ペイロードに含まれるデータには、フロー情報、シーケンス番号、およびフローＩＤ等が含まれる。
【００２４】
本実施例において、フロー情報には、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が含まれる。ＩＰｖ６におけるＩＰアドレスは１６Ｂｙｔｅである。そのため、ＩＰｖ６のフロー情報を含む場合、フラグ、フロー情報、およびシーケンス番号を含むペイロードのサイズは４２Ｂｙｔｅとなる。
【００２５】
スヌープ制御部３１２は、スイッチングモジュール３３から開始パケットのヘッダを受信した場合、受信したヘッダから、開始パケットを含むフローのフロー情報と、シーケンス番号とを抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報およびシーケンス番号を、開始パケットの受信を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。
【００２６】
また、スヌープ制御部３１２は、スイッチングモジュール３３から中断パケットのヘッダを受信した場合、受信したヘッダから、中断パケットを含むフローのフロー情報を抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報を、フローの終了を示すフラグと共に、ＰＤＵ生成部３１１および削除部３１４へ送信する。また、スヌープ制御部３１２は、スイッチングモジュール３３から終了パケットのヘッダを受信した場合、受信したヘッダから、終了パケットを含むフローのフロー情報を抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報を、フローの終了を示すフラグと共に、ＰＤＵ生成部３１１および削除部３１４へ送信する。
【００２７】
本実施例において、伝送されるパケットのヘッダには、例えば図５に示す情報が格納される。図５は、パケット１００のヘッダを説明するための図である。パケット１００のヘッダには、ＩＰヘッダおよびＴＣＰ（Transmission  Control  Protocol）ヘッダが含まれる。ＩＰヘッダには、例えば図５に示すように、ＤＳ（Differentiated  Services）フィールド１０１、プロトコル番号１０２、送信元ＩＰアドレス１０３、および宛先ＩＰアドレス１０４が含まれる。ＴＣＰヘッダには、例えば図５に示すように、送信元ポート番号１０５、宛先ポート番号１０６、シーケンス番号１０７、ウインドウサイズ１０８、およびコントロールフラグ１０９が含まれる。
【００２８】
ＤＳフィールド１０１の下位６ビットには、ＤＳＣＰ（Differentiated  Services  Code  Point）フィールドが割り当てられる。コントロールフラグ１０９には、開始パケットである場合に１が格納されるＳＹＮビット、中断パケットである場合に１が格納されるＲＳＴビットが含まれる。また、コントロールフラグ１０９には、終了パケットである場合に１が格納されるＦＩＮビット、応答パケットである場合に１が格納されるＡＣＫビットが含まれる。
【００２９】
スヌープ制御部３１２は、ＰＤＵ送受信部３１０からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグがスヌープ指示である場合、スヌープ制御部３１２は、ペイロードから抽出したデータに含まれたフロー情報をスイッチングモジュール３３へ送信する。
【００３０】
フロー情報に対応するフローに含まれたパケットがスヌープされた場合、スヌープ制御部３１２は、スヌープされたパケットのヘッダをスイッチングモジュール３３から受信する。スヌープ制御部３１２は、受信したヘッダからシーケンス番号を抽出し、抽出したシーケンス番号と、ＰＤＵのペイロードから抽出したフロー情報とを、スヌープ成功を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。一方、フロー情報に対応するフローに含まれたパケットがスヌープされなかった場合、スヌープ制御部３１２は、スヌープ失敗を示す情報をスイッチングモジュール３３から受信する。スヌープ制御部３１２は、ペイロードから抽出したフロー情報を、スヌープ失敗を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。
【００３１】
登録部３１３は、ＰＤＵ送受信部３１０からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。フラグが登録指示である場合、登録部３１３は、ペイロードから抽出したデータに含まれたフローＩＤに対応付けて、ペイロードから抽出したデータに含まれたフロー情報をフローテーブル３２０に登録する。そして、登録部３１３は、ペイロードから抽出したデータに含まれたフローＩＤに対応付けて、現在時刻を更新時刻の欄に登録する。
【００３２】
削除部３１４は、記憶部３２の空き容量が所定値未満となったか否かを監視する。所定値とは、例えば記憶部３２の容量の２０％である。記憶部３２の空き容量が所定値未満となった場合、削除部３１４は、フローテーブル３２０を参照し、フローＩＤに対応付けられたそれぞれのフロー情報の中で、所定のフロー情報をフローテーブル３２０から削除する。所定のフロー情報とは、例えば、更新時刻からの経過時間が所定時間以上である更新時刻に対応付けられたフロー情報である。また、削除部３１４は、記憶部３２の空き容量が所定値未満であっても、経過時間が５分以上等の所定時間以上である更新時刻に対応付けられたフロー情報をフローテーブル３２０から削除してもよい。
【００３３】
また、削除部３１４は、スヌープ制御部３１２から、フローの終了を示すフラグと共に、フロー情報を受信した場合、フローテーブル３２０を参照し、スヌープ制御部３１２から受信したフロー情報がフローテーブル３２０内に存在するか否かを判定する。スヌープ制御部３１２から受信したフロー情報がフローテーブル３２０内に存在する場合、削除部３１４は、スヌープ制御部３１２から受信したフロー情報を含むエントリをフローテーブル３２０から削除する。
【００３４】
ＰＤＵ生成部３１１は、スヌープ制御部３１２から、開始パケットの受信を示すフラグと共に、フロー情報およびシーケンス番号を受信した場合、開始パケットの受信を示すフラグと、フロー情報およびシーケンス番号とを含むペイロードを生成する。また、ＰＤＵ生成部３１１は、スヌープ制御部３１２から、フローの終了を示すフラグと共に、フロー情報を受信した場合、フローの終了を示すフラグとフロー情報とを含むペイロードを生成する。
【００３５】
また、ＰＤＵ生成部３１１は、スヌープ制御部３１２から、スヌープ成功を示すフラグと共に、フロー情報およびシーケンス番号を受信した場合、スヌープ成功を示すフラグと、フロー情報およびシーケンス番号とを含むペイロードを生成する。また、ＰＤＵ生成部３１１は、スヌープ制御部３１２から、スヌープ失敗を示すフラグと共に、フロー情報を受信した場合、スヌープ失敗を示すフラグと、フロー情報とを含むペイロードを生成する。
【００３６】
そして、ＰＤＵ生成部３１１は、生成したペイロードを含み、識別装置２０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、ＰＤＵ生成部３１１は、生成したＰＤＵをＰＤＵ送受信部３１０へ送信する。
【００３７】
スイッチングモジュール３３は、パケット受信部３３０、スヌープ部３３２、ポート特定部３３３、ＦＤＢ（Forwarding  Data  Base）３３４、判定部３３５、およびマーキング部３３６を有する。パケット受信部３３０は、受信ポート３４を介してパケットを受信した場合、受信したパケットを、スヌープ部３３２およびポート特定部３３３へ送信する。
【００３８】
スヌープ部３３２は、パケット受信部３３０が受信したパケットの中で、所定のパケットをスヌープする。そして、スヌープ部３３２は、スヌープしたパケットのヘッダをスヌープ制御部３１２へ送信する。所定のパケットとは、例えば開始パケット、中断パケット、および終了パケットである。開始パケットとは、例えばＴＣＰヘッダ内のＳＹＮビットに１が格納されたパケットである。中断パケットとは、例えばＴＣＰヘッダ内のＲＳＴビットに１が格納されたパケットである。終了パケットとは、例えばＴＣＰヘッダ内のＦＩＮビットに１が格納されたパケットである。
【００３９】
また、スヌープ部３３２は、スヌープ制御部３１２からフロー情報を受信した場合、パケット受信部３３０が受信したパケットの中で、スヌープ制御部３１２から受信したフロー情報をヘッダに含むパケットのスヌープを所定時間試行する。本実施例において所定時間とは、例えば５０ミリ秒である。スヌープ制御部３１２から受信したフロー情報をヘッダに含むパケットを所定時間以内にスヌープした場合、スヌープ部３３２は、スヌープしたパケットのヘッダをスヌープ制御部３１２へ送信する。一方、スヌープ制御部３１２から受信したフロー情報をヘッダに含むパケットを所定時間以内にスヌープしなかった場合、スヌープ部３３２は、スヌープ失敗を示す情報をスヌープ制御部３１２へ送信する。
【００４０】
ＦＤＢ３３４には、ＭＡＣアドレスに対応付けて、送信ポート３６のポート番号が格納されている。ポート特定部３３３は、パケット受信部３３０からパケットを受信した場合、パケット受信部３３０から受信したパケットのヘッダ内の宛先ＭＡＣアドレスに対応付けられているポート番号を、ＦＤＢ３３４を参照して特定する。そして、ポート特定部３３３は、特定したポート番号を、パケット受信部３３０から受信したパケットと共に、判定部３３５へ送信する。
【００４１】
判定部３３５は、ポート特定部３３３からパケットを受信した場合、フローテーブル３２０を参照し、受信したパケットのヘッダ内のフロー情報が、フローテーブル３２０内に登録されているか否かを判定する。ポート特定部３３３から受信したパケットのヘッダ内のフロー情報がフローテーブル３２０内に登録されている場合、ポート特定部３３３から受信したパケットは、Elephantフローである。
【００４２】
ポート特定部３３３から受信したパケットのヘッダ内のフロー情報がフローテーブル３２０に登録されている場合、判定部３３５は、ポート特定部３３３から受信したパケットを、ポート特定部３３３から受信したポート番号と共に、マーキング部３３６へ送信する。一方、ヘッダ内のフロー情報がフローテーブル３２０内に登録されていない場合、判定部３３５は、ポート特定部３３３から受信したパケットを、ポート特定部３３３から受信したポート番号に対応する送信ポート３６に接続された送信キュー３５に格納する。
【００４３】
マーキング部３３６は、判定部３３５からパケットを受信した場合、受信したパケットのヘッダ内に、Elephantフローに含まれるパケットであることを示す識別情報を書き込む。そして、マーキング部３３６は、ヘッダ内に識別情報を書き込んだパケットを、判定部３３５から受信したポート番号に対応する送信ポート３６に接続された送信キュー３５に格納する。そして、マーキング部３３６は、判定部３３５から受信したパケットのヘッダ内のフロー情報に対応付けられてフローテーブル３２０に格納された転送時刻を、現在の時刻で更新する。
【００４４】
本実施例において、マーキング部３３６は、ＩＰヘッダ内のＤＳフィールドの下位６ビットに割り当てられたＤＳＣＰフィールドに、Elephantフローに含まれるパケットであることを示す識別情報を書き込む。なお、他の例として、マーキング部３３６は、ＶＬＡＮタグ内のＣｏＳ（Class  of  Service）フィールドに、Elephantフローに含まれるパケットであることを示す識別情報を書き込んでもよい。
【００４５】
本実施例において、送信キュー３５は、それぞれの送信ポート３６に対して、例えば１つずつ設けられる。なお、複数の送信キュー３５の数は、複数の送信ポート３６の数と異なってもかまわない。送信キュー３５は、判定部３３５またはマーキング部３３６によって格納されたパケットを、送信キュー３５に接続された送信ポート３６から送信する。
【００４６】
［識別装置２０］
図６は、実施例１における識別装置２０の一例を示すブロック図である。識別装置２０は、制御部２１、記憶部２２、および管理ポート２３を有する。管理ポート２３は、管理ネットワークを介して各スイッチ装置３０に接続される。
【００４７】
記憶部２２は、モニタテーブル２２０を記憶する。図７は、モニタテーブル２２０の一例を示す図である。モニタテーブル２２０には、例えば図７に示すように、それぞれのスイッチ装置３０を識別するスイッチＩＤ２２００毎に、個別テーブル２２０１が格納される。それぞれの個別テーブル２２０１には、フローＩＤ２２０２、フロー情報２２０３、シーケンス番号２２０４、登録時刻２２０５、および失敗回数２２０６が対応付けて格納される。
【００４８】
フローＩＤ２２０２は、それぞれのフローを識別する情報である。フロー情報２２０３は、フローに含まれるパケットが共通に有するヘッダの情報である。本実施例において、フロー情報２２０３には、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号、宛先ポート番号、およびプロトコル番号が含まれる。
【００４９】
シーケンス番号２２０４は、フローの開始時に送信された開始パケットのヘッダに含まれたシーケンス番号である。開始パケットとは、ＴＣＰヘッダ内のＳＹＮビットに１がセットされたパケットである。登録時刻２２０５は、フローＩＤ２２０２に対応付けて、フロー情報２２０３、およびシーケンス番号２２０４が個別テーブル２２０１に登録された時刻である。失敗回数２２０６は、スヌープに失敗した回数である。
【００５０】
図６に戻って説明を続ける。制御部２１は、モニタタイマ２１０、テーブル管理部２１１、スヌープタイマ２１２、スヌープ指示部２１３、判定部２１４、ＰＤＵ生成部２１５、およびＰＤＵ送受信部２１６を有する。ＰＤＵ送受信部２１６は、管理ポート２３を介してスイッチ装置３０からＰＤＵを受信した場合、受信したＰＤＵに含まれたペイロードをテーブル管理部２１１および判定部２１４へ送る。また、ＰＤＵ送受信部２１６は、ＰＤＵ生成部２１５が生成したＰＤＵを、管理ポート２３を介してスイッチ装置３０へ送信する。
【００５１】
テーブル管理部２１１は、ＰＤＵ送受信部２１６からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグが開始パケットの受信を示す場合、テーブル管理部２１１は、ペイロードから抽出したデータに含まれたフロー情報で特定されるフローに対してフローＩＤを割り当てる。そして、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、テーブル管理部２１１は、特定した個別テーブルに、フローＩＤに対応付けて、ペイロードから抽出したデータに含まれたフロー情報およびシーケンス番号を登録する。そして、テーブル管理部２１１は、特定した個別テーブルに、フローＩＤに対応付けて、登録時刻として現在時刻を登録し、失敗回数として０を登録する。
【００５２】
また、ペイロードから抽出したフラグがスヌープ失敗を示す場合、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、テーブル管理部２１１は、特定した個別テーブル内で、ペイロードから抽出したデータに含まれたフロー情報を特定する。そして、テーブル管理部２１１は、特定したフロー情報に対応付けられている失敗回数に１を加算する。
【００５３】
また、ペイロードから抽出したフラグがフローの終了を示す場合、テーブル管理部２１１は、ペイロードから抽出したデータに含まれたフロー情報が、モニタテーブル２２０内に存在するか否かを判定する。モニタテーブル２２０内に存在する場合、テーブル管理部２１１は、ペイロードから抽出したフロー情報と、フロー情報に対応付けられたフローＩＤ、シーケンス番号、登録時刻、および失敗回数を、モニタテーブル２２０から削除する。これにより、モニタテーブル２２０内のデータ量の増大を抑制することができる。
【００５４】
また、テーブル管理部２１１は、モニタタイマ２１０からフローＩＤを受信した場合、フローＩＤに対応付けられているフロー情報、シーケンス番号、登録時刻、および失敗回数を、モニタテーブル２２０内の個別テーブルから削除する。これにより、モニタテーブル２２０内のデータ量の増大を抑制することができる。また、テーブル管理部２１１は、記憶部２２の空き容量が所定値未満となったか否かを監視する。所定値とは、例えば記憶部２２の容量の２０％である。記憶部２２の空き容量が所定値未満となった場合、テーブル管理部２１１は、モニタテーブル２２０に登録されたフロー情報の中で、所定のフロー情報をモニタテーブル２２０から削除する。所定のフロー情報とは、例えば、対応付けられた登録時刻が最も古いフロー情報、あるいは、対応付けられた失敗回数が最も多いフロー情報等である。
【００５５】
モニタタイマ２１０は、モニタテーブル２２０内に、フロー情報が登録された場合、登録されたフロー情報に対応するフローについてモニタ期間の計測を開始する。そして、モニタ期間が経過した場合、モニタタイマ２１０は、モニタ期間が経過したフローのフローＩＤをテーブル管理部２１１へ送信する。モニタ期間とは、フローがElephantフローであるか否かを判定する期間である。本実施例において、モニタ期間は、例えば１秒である。
【００５６】
スヌープタイマ２１２は、モニタテーブル２２０内の個別テーブルに、フローＩＤ、フロー情報、シーケンス番号、登録時刻、および失敗回数が登録された場合、登録されたフロー情報に対応するフローについてスヌープ期間の計測を開始する。そして、スヌープタイマ２１２は、スヌープ期間が経過した場合、スヌープ期間が経過したフローのフローＩＤをスヌープ指示部２１３へ送信する。そして、スヌープタイマ２１２は、再びスヌープ期間の計測を開始する。スヌープタイマ２１２は、それぞれのフローについて、モニタテーブル２２０内の個別テーブルにフローＩＤ等が登録されている間、スヌープ期間を繰り返し計測し、スヌープ期間が経過する度にフローＩＤをスヌープ指示部２１３へ送信する。スヌープ期間とは、フローが電送したデータ量が所定値に達したか否かを定期的に判定する期間である。本実施例において、スヌープ期間は、例えば１００ミリ秒である。
【００５７】
スヌープ指示部２１３は、スヌープタイマ２１２からフローＩＤを受信した場合、受信したフローＩＤに対応付けられたフロー情報を、スイッチ装置３０毎に、モニタテーブル２２０内の個別テーブルから抽出する。そして、スヌープ指示部２１３は、抽出したフロー情報を、スヌープ指示を示すフラグと共に、ＰＤＵ生成部２１５へ送信する。
【００５８】
判定部２１４は、ＰＤＵ送受信部２１６からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグがスヌープ成功を示す場合、ペイロードから抽出したデータからシーケンス番号を抽出する。そして、判定部２１４は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、判定部２１４は、特定した個別テーブル内で、ペイロードから抽出したデータに含まれたフロー情報に対応付けられたフローＩＤおよびシーケンス番号を抽出する。
【００５９】
そして、判定部２１４は、ＰＤＵのペイロードから抽出したシーケンス番号から、モニタテーブル２２０から抽出したシーケンス番号を引くことにより、シーケンス番号の増加量ΔＳを算出する。そして、判定部２１４は、算出した増加量ΔＳが所定の閾値以上であるか否かを判定する。本実施例において、閾値は、例えば１ＭＢｙｔｅに相当する値である1048576である。
【００６０】
増加量ΔＳが所定の閾値以上である場合、判定部２１４は、ＰＤＵのペイロードから抽出したフロー情報で特定されるフローが、Elephantフローであると判定する。このように、フローの開始後、所定間隔でスヌープしたパケットから取得したシーケンス番号の増加量に基づいて、Elephantフローか否かを判定するため、判定部２１４は、Elephantフローを精度良く判別することができる。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、登録指示を示すフラグと共にＰＤＵ生成部２１５へ送信する。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、フローＩＤに対応付けられたシーケンス番号、登録時刻、および失敗回数と共に、モニタテーブル２２０から削除する。
【００６１】
ＰＤＵ生成部２１５は、スヌープ指示部２１３から、スヌープ指示を示すフラグと共に、フロー情報を受信した場合、スヌープ指示を示すフラグとフロー情報とを含むペイロードを生成する。また、ＰＤＵ生成部２１５は、判定部２１４から、登録指示を示すフラグと共に、フローＩＤおよびフロー情報を受信した場合、登録指示を示すフラグと、フローＩＤおよびフロー情報とを含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、スイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、ＰＤＵ生成部２１５は、生成したＰＤＵをＰＤＵ送受信部２１６へ送信する。
【００６２】
図８および図９は、実施例１におけるElephantフローの判定方法の一例を説明する図である。図８は、フローがElephantフローと判定される場合の例を示し、図９は、フローがElephantフローと判定されない場合の例を示す。図８に示す例では、まず、スイッチ装置３０内のスヌープ部３３２が開始パケットをスヌープし、フローの開始が検出される。そして、ＰＤＵ送受信部３１０が、開始パケットの受信を示すフラグ等を含むＰＤＵを識別装置２０へ送信する。識別装置２０内のテーブル管理部２１１は、時刻ｔ0において、開始パケットを含むフローのフロー情報と、開始パケットのヘッダに含まれたシーケンス番号とをフローテーブル３２０に登録する。これにより、フローテーブル３２０にフロー情報が登録されたフローは、Elephantフローか否かが監視される監視対象となる。モニタタイマ２１０は、フローテーブル３２０に登録されたフローについて、時刻ｔ0からモニタ期間Ｔmの計測を開始する。また、テーブル管理部２１１は、フローテーブル３２０に登録されたフローについて、時刻ｔ0からスヌープ期間ＴSの計測を開始する。
【００６３】
そして、スヌープ期間ＴSが経過した時刻ｔ1において、スヌープ指示部２１３は、スヌープ指示を示すフラグ等をスイッチ装置３０へ送信する。スイッチ装置３０のスヌープ部３３２は、スヌープ指示を示すフラグと共に受信したフロー情報に対応するフローに含まれるパケットのスヌープを所定時間試行する。所定時間以内にパケットがスヌープされた場合、スイッチ装置３０のＰＤＵ送受信部３１０は、スヌープ成功を示すフラグと、スヌープされたパケットのヘッダに含まれたシーケンス番号とを含むＰＤＵを識別装置２０へ送信する。識別装置２０の判定部２１４は、フローテーブル３２０から開始パケットのヘッダに含まれたシーケンス番号と、スヌープ成功を示すフラグ等と共に受信したシーケンス番号とに基づいてシーケンス番号の増加量ΔＳを算出する。
【００６４】
図８に示した例において、時刻ｔ1の時点では、スヌープ指示に応じてスヌープされたパケットから算出されたシーケンス番号の増加量ΔＳは、閾値未満である。そのため、フローの情報は、フローテーブル３２０から削除されず、フローは、引き続き監視対象となる。一方、フローによって伝送されたデータ量が増加すると、例えばモニタ期間Ｔmの経過前の時刻ｔ3の時点で、スヌープ指示に応じてスヌープされたパケットから算出されたシーケンス番号の増加量ΔＳが閾値以上となる。増加量ΔＳが閾値以上となった場合、識別装置２０の判定部２１４は、スヌープされたパケットを含むフローをElephantフローと判定する。そして、判定部２１４は、Elephantフローのフロー情報等を識別装置２０へ送信する。そして、判定部２１４は、フローテーブル３２０からElephantフローのフロー情報等を削除する。これにより、シーケンス番号の増加量ΔＳが閾値以上と判定されたフローは、監視対象から外される。
【００６５】
スイッチ装置３０の登録部３１３は、識別装置２０から受信したElephantフローのフロー情報等をフローテーブル３２０に登録する。そして、マーキング部３３６は、フローテーブル３２０に登録されたフロー情報をヘッダに含むパケットを受信した場合、パケットのヘッダ内にElephantフローに含まれるパケットであることを示す識別情報を書き込む。
【００６６】
一方、図９に示した例では、時刻ｔ3の時点においても、スヌープ指示に応じてスヌープされたパケットから算出されたシーケンス番号の増加量ΔＳは、閾値未満である。そのため、フローのフロー情報は、フローテーブル３２０から削除されず、フローは、引き続き監視対象となる。しかし、図９に示した例では、時刻ｔaの時点において、スイッチ装置３０内のスヌープ部３３２が中断パケットまたは終了パケットをスヌープし、フローの終了が検出される。ＰＤＵ送受信部３１０は、フローの終了を示すフラグ等を含むＰＤＵを識別装置２０へ送信する。識別装置２０内のテーブル管理部２１１は、中断パケットまたは終了パケットを含むフローのフロー情報を、フローテーブル３２０から削除する。これにより、Elephantフローと判定される前に中断パケットまたは終了パケットが送信されたフローは、監視対象から外される。
【００６７】
図１０は、Elephantフローの判定における状態遷移の一例を説明する図である。未判定のフローは、パケット受信部３３０によって開始パケットが受信されることにより、監視対象のフローとなる。監視対象のフローは、スヌープ期間毎にフローに含まれるパケットがスヌープされる。そして、スヌープの失敗、または、スヌープされたパケットから算出されたシーケンス番号の増加量ΔＳが閾値未満である間、監視対象のフローは、監視対象の状態が継続する。
【００６８】
そして、スヌープされたパケットから算出されたシーケンス番号の増加量ΔＳが閾値以上となった場合に、監視対象のフローは、Elephantフローと判定され、監視対象から外される。一方、中断パケットまたは終了パケットが受信された場合、または、モニタ期間が経過した場合、監視対象のフローは、監視対象から外される。Elephantフローと判定されることなく監視対象から外されたフローは、例えばMiceフローと判定される。
【００６９】
［スイッチ装置３０の動作］
図１１は、実施例１におけるスイッチ装置３０の動作の一例を示すフローチャートである。まず、パケット受信部３３０は、受信ポート３４を介してパケットを受信したか否かを判定する（Ｓ１００）。パケットを受信した場合（Ｓ１００：Ｙｅｓ）、パケット受信部３３０は、受信したパケットを、スヌープ部３３２およびポート特定部３３３へ送信する。スヌープ部３３２は、パケット受信部３３０が受信したパケットの中で、開始パケットがスヌープされたか否かを判定する（Ｓ１０１）。開始パケットがスヌープされた場合（Ｓ１０１：Ｙｅｓ）、スヌープ部３３２は、スヌープしたパケットのヘッダをスヌープ制御部３１２へ送信する。
【００７０】
スヌープ制御部３１２は、スヌープ部３３２から受信したヘッダから、開始パケットを含むフローのフロー情報と、シーケンス番号とを抽出し、開始パケットの受信を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、スヌープ制御部３１２から受信した、開始パケットの受信を示すフラグと、フロー情報およびシーケンス番号とを含むペイロードを生成する。そして、ＰＤＵ生成部３１１は、生成したペイロードを含み、識別装置２０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する（Ｓ１０２）。そして、ポート特定部３３３は、ステップＳ１０５に示す処理を実行する。
【００７１】
開始パケットがスヌープされていない場合（Ｓ１０１：Ｎｏ）、スヌープ部３３２は、パケット受信部３３０が受信したパケットの中で、中断パケットまたは終了パケットがスヌープされたか否かを判定する（Ｓ１０３）。中断パケットおよび終了パケットのいずれもスヌープされなかった場合（Ｓ１０３：Ｎｏ）、ポート特定部３３３は、ステップＳ１０５に示す処理を実行する。
【００７２】
中断パケットまたは終了パケットがスヌープされた場合（Ｓ１０３：Ｙｅｓ）、スヌープ部３３２は、スヌープしたパケットのヘッダをスヌープ制御部３１２へ送信する。スヌープ制御部３１２は、スヌープ部３３２から受信したヘッダから、中断パケットまたは終了パケットを含むフローのフロー情報を抽出し、フローの終了を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、スヌープ制御部３１２から受信した、フローの終了を示すフラグと、フロー情報とを含むペイロードを生成する。そして、ＰＤＵ生成部３１１は、生成したペイロードを含み、識別装置２０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する（Ｓ１０４）。
【００７３】
次に、ポート特定部３３３は、パケット受信部３３０から受信したパケットのヘッダ内の宛先ＭＡＣアドレスに対応付けられている送信ポート３６のポート番号を、ＦＤＢ３３４を参照して特定する（Ｓ１０５）。そして、ポート特定部３３３は、特定したポート番号を、パケット受信部３３０から受信したパケットと共に、判定部３３５へ送信する。
【００７４】
判定部３３５は、フローテーブル３２０を参照し、ポート特定部３３３から受信したパケットのヘッダ内のフロー情報が、Elephantフローのフロー情報としてフローテーブル３２０に登録されているか否かを判定する（Ｓ１０６）。ポート特定部３３３から受信したパケットのヘッダ内のフロー情報がフローテーブル３２０に登録されていない場合（Ｓ１０６：Ｎｏ）、判定部３３５は、ポート特定部３３３から受信したポート番号に対応する送信ポート３６に接続された送信キュー３５を特定する。そして、判定部３３５は、ポート特定部３３３から受信したパケットを、特定した送信キュー３５に格納する。そして、送信キュー３５は、格納されたパケットを、送信ポート３６から送信する（Ｓ１０９）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【００７５】
一方、ポート特定部３３３から受信したパケットのヘッダ内のフロー情報がフローテーブル３２０内に登録されている場合（Ｓ１０６：Ｙｅｓ）、判定部３３５は、ポート特定部３３３から受信したパケットを、ポート番号と共に、マーキング部３３６へ送信する。マーキング部３３６は、判定部３３５から受信したパケットのヘッダ内の例えばＤＳＣＰフィールドに、Elephantフローに含まれるパケットであることを示す識別情報を書き込む（Ｓ１０７）。そして、マーキング部３３６は、ヘッダ内に識別情報を書き込んだパケットを、判定部３３５から受信したポート番号に対応する送信ポート３６に接続された送信キュー３５に格納する。そして、マーキング部３３６は、判定部３３５から受信したパケットのヘッダ内のフロー情報に対応付けられてフローテーブル３２０に格納された転送時刻を、現在の時刻で更新する（Ｓ１０８）。そして、送信キュー３５は、ステップＳ１０９に示した処理を実行する。
【００７６】
パケットを受信していない場合（Ｓ１００：Ｎｏ）、スヌープ制御部３１２は、ＰＤＵ送受信部３１０を介して、識別装置２０からスヌープ指示のフラグを含むＰＤＵを受信したか否かを判定する（Ｓ１１０）。スヌープ指示のフラグを含むＰＤＵを受信した場合（Ｓ１１０：Ｙｅｓ）、スヌープ制御部３１２は、ＰＤＵのペイロードから抽出したフロー情報をスヌープ部３３２へ送信する。
【００７７】
次に、パケット受信部３３０は、受信ポート３４を介してパケットを受信したか否かを判定する（Ｓ１１１）。パケットを受信した場合（Ｓ１１１：Ｙｅｓ）、パケット受信部３３０は、受信したパケットを、スヌープ部３３２およびポート特定部３３３へ送信する。スヌープ部３３２は、パケット受信部３３０が受信したパケットが、スヌープ制御部３１２から受信したフロー情報をヘッダに含む、スヌープ対象のパケットか否かを判定する（Ｓ１１２）。
【００７８】
スヌープ対象のパケットではない場合（Ｓ１１２：Ｎｏ）、スイッチ装置３０は、ステップＳ１０１からＳ１０９に示した処理を実行する。そして、スヌープ部３３２は、スヌープ制御部３１２からフロー情報を受信してから、例えば５０ミリ秒等の所定時間が経過したか否かを判定する（Ｓ１１３）。所定時間が経過していない場合（Ｓ１１３：Ｎｏ）、パケット受信部３３０は、再びステップＳ１１１に示した処理を実行する。
【００７９】
一方、所定時間が経過した場合（Ｓ１１３：Ｙｅｓ）、スヌープ部３３２は、スヌープ失敗を示す情報をスヌープ制御部３１２へ送信する。スヌープ制御部３１２は、スヌープ失敗を示すフラグと共に、スヌープ指示に含まれたフロー情報をＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、スヌープ制御部３１２から受信した、スヌープ失敗を示すフラグとフロー情報とを含むペイロードを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する（Ｓ１１４）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【００８０】
パケット受信部３３０が受信したパケットがスヌープ対象のパケットである場合（Ｓ１１２：Ｙｅｓ）、スヌープ部３３２は、スヌープしたパケットのヘッダをスヌープ制御部３１２へ送信する。スヌープ制御部３１２は、スヌープ部３３２から受信したヘッダからシーケンス番号を抽出する。そして、スヌープ制御部３１２は、抽出したシーケンス番号を、スヌープ指示を示すフラグを含むＰＤＵのペイロードから抽出したフロー情報およびスヌープ成功を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、スヌープ制御部３１２から受信した、スヌープ成功を示すフラグとフロー情報とシーケンス番号とを含むペイロードを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する（Ｓ１１５）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【００８１】
スヌープ指示のフラグを含むＰＤＵを受信していない場合（Ｓ１１０：Ｎｏ）、登録部３１３は、登録指示のフラグを含むＰＤＵを受信したか否かを判定する（Ｓ１１６）。登録指示のフラグを含むＰＤＵを受信していない場合（Ｓ１１６：Ｎｏ）、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【００８２】
一方、登録指示のフラグを含むＰＤＵを受信した場合（Ｓ１１６：Ｙｅｓ）、登録部３１３は、ＰＤＵのペイロードからフローＩＤおよびフロー情報を抽出する。そして、登録部３１３は、抽出したフローＩＤに対応付けて、抽出したフロー情報をフローテーブル３２０に登録する。そして、登録部３１３は、ＰＤＵのペイロードから抽出したフローＩＤに対応付けて、現在時刻をフローテーブル３２０内の更新時刻の欄に登録する（Ｓ１１７）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【００８３】
［識別装置２０の動作］
図１２および図１３は、実施例１における識別装置２０の動作の一例を示すフローチャートである。まず、テーブル管理部２１１は、スイッチ装置３０から、開始パケットの受信を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２００）。開始パケットの受信を示すフラグを含むＰＤＵを受信した場合（Ｓ２００：Ｙｅｓ）、テーブル管理部２１１は、ＰＤＵのペイロードから抽出したフロー情報で特定されるフローに対してフローＩＤを割り当てる。そして、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。
【００８４】
そして、テーブル管理部２１１は、特定した個別テーブルに、フローＩＤに対応付けて、ペイロードから抽出したデータに含まれたフロー情報およびシーケンス番号を登録する。そして、テーブル管理部２１１は、特定した個別テーブルに、フローＩＤに対応付けて、登録時刻として現在時刻を登録し、失敗回数として０を登録する（Ｓ２０１）。モニタタイマ２１０は、モニタテーブル２２０内に登録されたフローＩＤに対応するフローについて、モニタ期間の計測を開始する。また、スヌープタイマ２１２は、モニタテーブル２２０内に登録されたフローＩＤに対応するフローについて、スヌープ期間の計測を開始する。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００８５】
開始パケットの受信を示すフラグを含むＰＤＵを受信していない場合（Ｓ２００：Ｎｏ）、スヌープタイマ２１２は、スヌープ期間が経過したか否かを判定する（Ｓ２０２）。スヌープ期間が経過した場合（Ｓ２０２：Ｙｅｓ）、スヌープタイマ２１２は、スヌープ期間が経過したフローのフローＩＤを、スヌープ指示部２１３へ送信する。スヌープ指示部２１３は、スヌープタイマ２１２から受信したフローＩＤに対応付けられたフロー情報を、モニタテーブル２２０内の個別テーブルから抽出する。そして、スヌープ指示部２１３は、抽出したフロー情報を、スヌープ指示を示すフラグと共に、ＰＤＵ生成部２１５へ送信する。ＰＤＵ生成部２１５は、スヌープ指示部２１３から受信したスヌープ指示を示すフラグとフロー情報とを含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、スイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。ＰＤＵ送受信部２１６は、ＰＤＵ生成部２１５が生成したＰＤＵを、管理ポート２３を介してスイッチ装置３０へ送信する（Ｓ２０３）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００８６】
スヌープ期間が経過していない場合（Ｓ２０２：Ｎｏ）、判定部２１４は、スイッチ装置３０から、スヌープ成功を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２０４）。スヌープ成功を示すフラグを含むＰＤＵを受信した場合（Ｓ２０４：Ｙｅｓ）、判定部２１４は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、判定部２１４は、特定した個別テーブル内で、ＰＤＵのペイロードから抽出したフロー情報に対応付けられたフローＩＤおよびシーケンス番号を抽出する。
【００８７】
次に、判定部２１４は、ＰＤＵのペイロードから抽出したシーケンス番号から、モニタテーブル２２０から抽出したシーケンス番号を引くことにより、シーケンス番号の増加量ΔＳを算出する（Ｓ２０５）。そして、判定部２１４は、算出した増加量ΔＳが所定の閾値以上であるか否かを判定する（Ｓ２０６）。増加量ΔＳが所定の閾値未満である場合（Ｓ２０６：Ｎｏ）、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００８８】
一方、増加量ΔＳが所定の閾値以上である場合（Ｓ２０６：Ｙｅｓ）、判定部２１４は、ペイロードから抽出したフロー情報で特定されるフローが、Elephantフローであると判定する。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、登録指示を示すフラグと共にＰＤＵ生成部２１５へ送信する。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、フローＩＤに対応付けられたシーケンス番号、登録時刻、および失敗回数と共に、モニタテーブル２２０から削除する（Ｓ２０７）。
【００８９】
次に、ＰＤＵ生成部２１５は、判定部２１４から受信した、登録指示を示すフラグと、フローＩＤおよびフロー情報とを含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、スイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。ＰＤＵ送受信部２１６は、ＰＤＵ生成部２１５が生成したＰＤＵを、管理ポート２３を介してスイッチ装置３０へ送信する（Ｓ２０８）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００９０】
スヌープ成功を示すフラグを含むＰＤＵを受信していない場合（Ｓ２０４：Ｎｏ）、テーブル管理部２１１は、スヌープ失敗を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２０９）。スヌープ失敗を示すフラグを含むＰＤＵを受信した場合（Ｓ２０９：Ｙｅｓ）、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、テーブル管理部２１１は、特定した個別テーブル内で、ペイロードから抽出したデータに含まれたフロー情報を特定する。そして、テーブル管理部２１１は、特定したフロー情報に対応付けられている失敗回数に１を加算する（Ｓ２１０）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００９１】
スヌープ失敗を示すフラグを含むＰＤＵを受信していない場合（Ｓ２０９：Ｎｏ）、テーブル管理部２１１は、フローの終了を示すフラグを含むＰＤＵを受信したか否かを判定する（図１３のＳ２１１）。フローの終了を示すフラグを含むＰＤＵを受信した場合（Ｓ２１１：Ｙｅｓ）、テーブル管理部２１１は、ＰＤＵのペイロードから抽出したフロー情報が、モニタテーブル２２０に登録されているか否かを判定する（Ｓ２１２）。ＰＤＵのペイロードから抽出したフロー情報がモニタテーブル２２０に登録されていない場合（Ｓ２１２：Ｎｏ）、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００９２】
一方、ＰＤＵのペイロードから抽出したフロー情報がモニタテーブル２２０に登録されている場合（Ｓ２１２：Ｙｅｓ）、テーブル管理部２１１は、ＰＤＵのペイロードから抽出したフロー情報と同一のフロー情報、フロー情報に対応付けられたフローＩＤ、シーケンス番号、登録時刻、および失敗回数を、モニタテーブル２２０から削除する（Ｓ２１３）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００９３】
フローの終了を示すフラグを含むＰＤＵを受信していない場合（Ｓ２１１：Ｎｏ）、テーブル管理部２１１は、記憶部２２の空き容量が所定値未満か否かを判定する（Ｓ２１４）。記憶部２２の空き容量が所定値以上である場合（Ｓ２１４：Ｎｏ）、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。一方、記憶部２２の空き容量が所定値未満である場合（Ｓ２１４：Ｙｅｓ）、テーブル管理部２１１は、モニタテーブル２２０に登録されたフロー情報の中で、所定のフロー情報をモニタテーブル２２０から削除する（Ｓ２１５）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【００９４】
［効果］
上述したように、本実施例の情報処理システム１０によれば、Elephantフロー等の所定のフローを効率的に検出することができる。また、本実施例の情報処理システム１０によれば、フローの開始時に送信される開始パケットをスヌープして、監視対象のフローを特定する。これにより、フローの検出漏れを抑制することができる。また、本実施例の情報処理システム１０によれば、開始パケットが送信された後に送信されたフローのデータ量を、定期的にスヌープしたパケットのシーケンス番号の増加量を用いて算出する。これにより、全てのパケットをキャプチャしてフローのデータ量を測定する場合に比べて、効率的にフローのデータ量を測定することができる。
【実施例２】
【００９５】
実施例１における情報処理システム１０では、識別装置２０とスイッチ装置３０とが別個の装置として設けられたが、本実施例では、識別装置２０の機能が、各スイッチ装置３０に設けられる点が実施例１とは異なる。
【００９６】
［スイッチ装置３０］
図１４は、実施例２におけるスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、制御部３１、記憶部３２、スイッチングモジュール３３、複数の受信ポート３４−１〜３４−ｎ、複数の送信キュー３５−１〜３５−ｎ、および複数の送信ポート３６−１〜３６−ｎを有する。本実施例における制御部３１は、スヌープ制御部３１２、登録部３１３、削除部３１４、モニタタイマ３８０、テーブル管理部３８１、スヌープタイマ３８２、および判定部３８３を有する。本実施例における記憶部３２は、フローテーブル３２０およびモニタテーブル３２１を記憶する。なお、以下に説明する点を除き、図１４において、図２と同じ符号を付したブロックは、図２におけるブロックと同一または同様であるため説明を省略する。
【００９７】
モニタテーブル３２１には、図７において説明したモニタテーブル２２０の中で、モニタテーブル３２１が設けられたスイッチ装置３０に対応する個別テーブル２２０１と同じ内容の情報が格納される。
【００９８】
スヌープ制御部３１２は、スヌープ部３３２から開始パケットのヘッダを受信した場合、受信したヘッダから、開始パケットを含むフローのフロー情報と、シーケンス番号とを抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報およびシーケンス番号を、開始パケットの受信を示すフラグと共に、テーブル管理部３８１へ送信する。
【００９９】
また、スヌープ制御部３１２は、スヌープ部３３２から中断パケットまたは終了パケットのヘッダを受信した場合、受信したヘッダから、中断パケットまたは終了パケットを含むフローのフロー情報を抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報を、フローの終了を示すフラグと共に、テーブル管理部３８１および削除部３１４へ送信する。
【０１００】
また、スヌープ制御部３１２は、スヌープタイマ３８２からフローＩＤを受信した場合、受信したフローＩＤに対応付けられたフロー情報をモニタテーブル３２１から抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報を、スヌープ部３３２へ送信する。そして、スヌープ部３３２へ送信したフロー情報をヘッダに含むパケットがスヌープ部３３２によってスヌープされた場合、スヌープ制御部３１２は、スヌープされたパケットのヘッダをスヌープ部３３２から受信する。スヌープ制御部３１２は、受信したヘッダからシーケンス番号を抽出する。そして、スヌープ制御部３１２は、抽出したシーケンス番号を、スヌープ部３３２へ送信したフロー情報と、スヌープ成功を示すフラグと共に、判定部３８３へ送信する。
【０１０１】
一方、スヌープ部３３２へ送信したフロー情報をヘッダに含むパケットがスヌープ部３３２によってスヌープされなかった場合、スヌープ制御部３１２は、スヌープ失敗を示す情報をスヌープ部３３２から受信する。スヌープ制御部３１２は、スヌープ部３３２へ送信したフロー情報を、スヌープ失敗を示すフラグと共に、テーブル管理部３８１へ送信する。
【０１０２】
テーブル管理部３８１は、スヌープ制御部３１２から、開始パケットの受信を示すフラグと共に、フロー情報およびシーケンス番号を受信した場合、受信したフロー情報で特定されるフローに対してフローＩＤを割り当てる。そして、テーブル管理部３８１は、フローＩＤに対応付けて、スヌープ制御部３１２から受信したフロー情報およびシーケンス番号をモニタテーブル３２１に登録する。また、テーブル管理部３８１は、フローＩＤに対応付けて、モニタテーブル３２１に、登録時刻として現在時刻を登録し、失敗回数として０を登録する。また、スヌープ制御部３１２から、スヌープ失敗を示すフラグと共に、フロー情報を受信した場合、テーブル管理部３８１は、スヌープ制御部３１２から受信したフロー情報に対応付けられている失敗回数に１を加算する。
【０１０３】
また、スヌープ制御部３１２から、フローの終了を示すフラグと共に、フロー情報を受信した場合、テーブル管理部３８１は、スヌープ制御部３１２から受信したフロー情報がモニタテーブル３２１内に存在するか否かを判定する。スヌープ制御部３１２から受信したフロー情報がモニタテーブル３２１内に存在する場合、テーブル管理部３８１は、スヌープ制御部３１２から受信したフロー情報と同一のフロー情報、フロー情報に対応付けられたフローＩＤ、シーケンス番号、登録時刻、および失敗回数を、モニタテーブル３２１から削除する。また、テーブル管理部３８１は、モニタタイマ３８０からフローＩＤを受信した場合、フローＩＤに対応付けられているフロー情報、シーケンス番号、登録時刻、および失敗回数を、モニタテーブル３２１から削除する。
【０１０４】
モニタタイマ３８０は、モニタテーブル３２１内に、フロー情報が登録された場合、登録されたフロー情報に対応するフローについてモニタ期間の計測を開始する。そして、モニタ期間が経過した場合、モニタタイマ３８０は、モニタ期間が経過したフローのフローＩＤをテーブル管理部３８１へ送信する。
【０１０５】
スヌープタイマ３８２は、モニタテーブル３２１内に、フロー情報が登録された場合、登録されたフロー情報に対応するフローについてスヌープ期間の計測を開始する。そして、スヌープタイマ３８２は、スヌープ期間が経過した場合、スヌープ期間が経過したフローのフローＩＤをスヌープ制御部３１２へ送信する。そして、スヌープタイマ３８２は、再びスヌープ期間の計測を開始する。
【０１０６】
判定部３８３は、スヌープ制御部３１２から、スヌープ成功を示すフラグと共に、フロー情報およびシーケンス番号を受信した場合、受信したフロー情報に対応付けられたフローＩＤおよびシーケンス番号をモニタテーブル３２１から抽出する。そして、判定部３８３は、スヌープ制御部３１２から受信したシーケンス番号から、モニタテーブル３２１から抽出したシーケンス番号を引くことにより、シーケンス番号の増加量ΔＳを算出する。そして、判定部３８３は、算出した増加量ΔＳが所定の閾値以上であるか否かを判定する。
【０１０７】
増加量ΔＳが所定の閾値以上である場合、判定部３８３は、スヌープ制御部３１２から受信したフロー情報で特定されるフローが、Elephantフローであると判定する。そして、判定部３８３は、Elephantフローであると判定したフローのフローＩＤを登録部３１３へ送信する。
【０１０８】
登録部３１３は、判定部３８３から受信したフローＩＤに対応するフロー情報をモニタテーブル３２１から抽出し、抽出したフロー情報を、判定部３８３から受信したフローＩＤに対応付けてフローテーブル３２０に登録する。そして、登録部３１３は、判定部３８３から受信したフローＩＤ、および、フローＩＤに対応付けられたフロー情報、シーケンス番号、登録時刻、および失敗回数をモニタテーブル３２１から削除する。
【０１０９】
削除部３１４は、記憶部３２の空き容量が所定値未満となった場合、モニタテーブル３２１に登録されたフロー情報の中で、所定のフロー情報をモニタテーブル３２１から削除する。所定のフロー情報とは、例えば、モニタテーブル３２１に登録されたフロー情報の中で、対応付けられた登録時刻が最も古いフロー情報、あるいは、対応付けられた失敗回数が最も多いフロー情報等である。
【０１１０】
［効果］
上述したように、本実施例のスイッチ装置３０においても、Elephantフロー等の所定のフローを効率的に検出することができる。また、本実施例におけるスイッチ装置３０によれば、Elephantフローの検出に伴うＰＤＵの送受信が発生しないため、情報処理システム１０内の通信トラフィックの増加を抑制することができる。
【実施例３】
【０１１１】
実施例１では、定期的にスヌープしたパケットのヘッダに含まれたシーケンス番号から、フローによって伝送されたデータ量を測定し、伝送されたデータ量が所定のデータ量以上であるフローをElephantフローと判定した。これに対し、本実施例の識別装置２０は、フローのスループットを算出し、スループットが所定値以上のフローをElephantフローと判定する点が実施例１とは異なる。
【０１１２】
［制御装置２０］
図１５は、実施例３における識別装置２０の一例を示すブロック図である。本実施例における制御部２１は、モニタタイマ２１０、テーブル管理部２１１、スヌープタイマ２１２、スヌープ指示部２１３、判定部２１４、ＰＤＵ生成部２１５、ＰＤＵ送受信部２１６、測定指示部２１７、および測定結果登録部２１８を有する。本実施例における記憶部２２は、モニタテーブル２２０、経路情報テーブル２２１、およびＲＴＴ（Round-Trip  Time）テーブル２２２を記憶する。なお、以下に説明する点を除き、図１５において、図６と同じ符号を付したブロックは、図６におけるブロックと同一または同様であるため説明を省略する。
【０１１３】
図１６は、経路情報テーブル２２１の一例を示す図である。経路情報テーブル２２１には、インデックス２２１０に対応付けて、経路情報２２１１、送信元スイッチ情報２２１２、および宛先スイッチ情報２２１３が格納される。インデックス２２１０は、パケットが伝送される情報処理システム１０内のそれぞれの経路を識別する情報である。経路情報２２１１は、パケットが伝送される経路の情報である。送信元スイッチ情報２２１２は、経路情報２２１１で示される経路の一端に位置するスイッチ装置３０のＩＰアドレスである。宛先スイッチ情報２２１３は、経路情報２２１１で示される経路の他端に位置するスイッチ装置３０のＩＰアドレスである。送信元スイッチ情報２２１２および宛先スイッチ情報２２１３は、例えば、情報処理装置１４に接続された下位スイッチ群１２に含まれるスイッチ装置３０のＩＰアドレスである。
【０１１４】
ここで、経路情報２２１１は、例えば、経路に含まれるスイッチ装置３０のスイッチＩＤと、スイッチ装置３０の送信ポートとの組み合わせで表現される。例えば、スイッチ装置３０ａ〜３０ｅが、図１７に示すように接続されている場合を考える。図１７に示した例において、スイッチ装置３０ａのスイッチＩＤは「Ａ」であり、スイッチ装置３０ｂのスイッチＩＤは「Ｂ」であり、スイッチ装置３０ｃのスイッチＩＤが「Ｃ」である。また、図１７に示した例において、スイッチ装置３０ｄのスイッチＩＤは「Ｄ」であり、スイッチ装置３０ｅのスイッチＩＤは「Ｅ」である。各スイッチ装置３０に記載されている数字は、送信ポートの番号である。
【０１１５】
図１７に示した例において、スイッチ装置３０ａから実線の経路を通ってスイッチ装置３０ｃに至る経路の経路情報は、スイッチ装置３０ａ、スイッチ装置３０ｄ、およびスイッチ装置３０ｃのスイッチＩＤを用いて、例えば「Ａ−１−Ｄ−３−Ｃ」と表される。経路情報を参照すると、スイッチＩＤが「Ａ」のスイッチ装置３０ａが、「１」番の送信ポートからパケットを送信し、スイッチＩＤが「Ｄ」のスイッチ装置３０ｄによって中継されることが分かる。また、経路情報を参照すると、スイッチＩＤが「Ｄ」のスイッチ装置３０ｄが、受信したパケットを「３」番の送信ポートから送信し、送信されたパケットをスイッチＩＤが「Ｃ」のスイッチ装置３０ｃが受信することが分かる。そして、経路情報を参照すると、スイッチＩＤが「Ｃ」のスイッチ装置３０ｃが経路の終端であることが分かる。
【０１１６】
図１８は、実施例３におけるモニタテーブル２２０の一例を示す図である。本実施例におけるモニタテーブル２２０内の個別テーブル２２０１には、フローＩＤ２２０２、フロー情報２２０３、インデックス２２０７、登録時刻２２０５、および失敗回数２２０６が対応付けて格納される。インデックス２２０７は、パケットが伝送される経路を識別する情報である。
【０１１７】
図１９は、ＲＴＴテーブル２２２の一例を示す図である。ＲＴＴテーブル２２２には、それぞれの経路を識別するインデックス２２２０に対応付けて、インデックス２２２０に対応する経路において測定されたラウンドトリップタイムの測定値であるＲＴＴ２２２１が格納される。
【０１１８】
図１５に戻って説明を続ける。テーブル管理部２１１は、ＰＤＵ送受信部２１６からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグが開始パケットの受信を示す場合、テーブル管理部２１１は、ペイロードから抽出したデータに含まれたフロー情報で特定されるフローに対してフローＩＤを割り当てる。そして、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。
【０１１９】
そして、テーブル管理部２１１は、フローＩＤに対応付けて、ペイロードから抽出したデータに含まれたフロー情報、および、フロー情報で特定されるフローが伝送される経路のインデックスを、特定した個別テーブルに登録する。そして、テーブル管理部２１１は、特定した個別テーブルに、フローＩＤに対応付けて、登録時刻として現在時刻を登録し、失敗回数として０を登録する。
【０１２０】
測定指示部２１７は、例えば６０秒毎等の所定のタイミング毎に、以下の処理を行う。測定指示部２１７は、経路情報テーブル２２１内のインデックスを１つずつ選択し、選択したインデックスに対応付けられた経路情報、送信元スイッチ情報、および宛先スイッチ情報を、経路情報テーブル２２１から抽出する。そして、測定指示部２１７は、インデックス、経路情報、送信元スイッチ情報、および宛先スイッチ情報を、測定指示を示すフラグと共に、ＰＤＵ生成部２１５へ送信する。ＰＤＵ生成部２１５は、測定指示部２１７から受信した、測定指示を示すフラグ、インデックス、経路情報、および宛先スイッチ情報を含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、送信元スイッチ情報に対応するスイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、ＰＤＵ生成部２１５は、生成したＰＤＵをＰＤＵ送受信部２１６へ送信する。
【０１２１】
測定結果登録部２１８は、ＰＤＵ送受信部２１６からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグが測定応答を示す場合、測定結果登録部２１８は、ペイロードから抽出したインデックスに対応付けて、ペイロードから抽出したＲＴＴをＲＴＴテーブル２２２に登録する。
【０１２２】
判定部２１４は、ＰＤＵ送受信部２１６からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したデータには、フロー情報およびウインドウサイズ（ＲＷＩＮ）が含まれる。ペイロードから抽出したフラグがスヌープ成功を示す場合、判定部２１４は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、判定部２１４は、ペイロードから抽出したデータに含まれたフロー情報に対応付けられたフローＩＤおよびインデックスを、特定した個別テーブルから抽出する。そして、判定部２１４は、抽出したインデックスに対応付けられたＲＴＴをＲＴＴテーブル２２２から抽出する。
【０１２３】
そして、判定部２１４は、ペイロードから抽出したデータに含まれたウインドウサイズを、ＲＴＴテーブル２２２から抽出したＲＴＴで割ることにより、スループットを算出する。そして、判定部２１４は、算出したスループットが所定の閾値以上であるか否かを判定する。本実施例において、閾値は、Link  capacityが例えば１０Ｇｂｐｓ（bits  per  second）である場合、例えばその１０％である１Ｇｂｐｓである。
【０１２４】
スループットが所定の閾値以上である場合、判定部２１４は、ペイロードから抽出したデータに含まれたフロー情報で特定されるフローが、Elephantフローであると判定する。ここで、受信側の情報処理装置１４のウインドウサイズは、通信開始から徐々に増加する。また、Elephantフローのように、伝送されるデータ量が多いフローでは、フローの伝送時間が長い。そのため、Elephantフローのように、伝送されるデータ量が多いフローでは、Miceフローのように、伝送されるデータ量が少ないフローよりも、ウインドウサイズが大きくなる。そのため、ウインドウサイズをＲＴＴで割ったスループットについても、Elephantフローの方が、Miceフローよりも大きくなる。従って、判定部２１４は、フローのスループットを測定することにより、Elephantフローを精度よく判定することができる。判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、登録指示を示すフラグと共にＰＤＵ生成部２１５へ送信する。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、フローＩＤに対応付けられたインデックス、登録時刻、および失敗回数と共に、個別テーブルから削除する。
【０１２５】
［スイッチ装置３０］
図２０は、実施例３におけるスイッチ装置３０の一例を示すブロック図である。本実施例における制御部３１は、ＰＤＵ送受信部３１０、ＰＤＵ生成部３１１、スヌープ制御部３１２、登録部３１３、削除部３１４、測定部３９０、および転送部３９１を有する。なお、以下に説明する点を除き、図２０において、図２と同じ符号を付したブロックは、図２におけるブロックと同一または同様であるため説明を省略する。
【０１２６】
ＰＤＵ送受信部３１０は、管理ポート３７を介して識別装置２０からＰＤＵを受信した場合、受信したＰＤＵに含まれたペイロードをスヌープ制御部３１２、登録部３１３、および測定部３９０へ送る。
【０１２７】
スヌープ制御部３１２は、ＰＤＵ送受信部３１０からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグがスヌープ指示である場合、スヌープ制御部３１２は、ペイロードから抽出したデータからフロー情報を抽出する。そして、スヌープ制御部３１２は、抽出したフロー情報において、送信元ＩＰアドレスと、宛先ＩＰアドレスとを入れ替え、入れ替えたフロー情報をスヌープ部３３２へ送信する。これにより、スヌープ制御部３１２は、フロー情報で特定されるフローに含まれるパケットに対する応答パケットをスヌープ部３３２にスヌープさせることができる。
【０１２８】
スヌープ指示に応じたパケットがスヌープされた場合、スヌープ制御部３１２は、スヌープされたパケットのヘッダをスヌープ部３３２から受信する。スヌープ制御部３１２は、受信したヘッダからウインドウサイズを抽出し、抽出したウインドウサイズを、ＰＤＵのペイロードから抽出したフロー情報と、スヌープ成功を示すフラグと共に、ＰＤＵ生成部３１１へ送信する。
【０１２９】
測定部３９０は、ＰＤＵ送受信部３１０からＰＤＵのペイロードを受信した場合、ペイロードからフラグおよびデータを抽出する。ペイロードから抽出したフラグが測定指示である場合、測定部３９０は、ペイロードから抽出したデータから、インデックス、経路情報、および宛先スイッチ情報を抽出する。そして、測定部３９０は、転送指示を示すフラグ、インデックス、経路情報、および宛先スイッチ情報を含むペイロードを生成する。そして、測定部３９０は、生成したペイロードを含み、宛先スイッチ情報に対応するスイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、測定部３９０は、生成したＰＤＵを、経路情報に記載された自装置の送信ポートに接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する。
【０１３０】
そして、測定部３９０は、転送部３９１から転送応答を示すフラグを含むＰＤＵを受信した場合、転送指示を示すフラグを含むＰＤＵを送信してから、転送応答を示すフラグを含むＰＤＵを受信するまでの時間を、ＲＴＴとして算出する。また、測定部３９０は、転送応答を示すフラグを含むＰＤＵのペイロードからインデックスを抽出する。そして、測定部３９０は、算出したＲＴＴを、測定応答を示すフラグおよびインデックスと共に、ＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、測定部３９０から受信した、測定応答を示すフラグと、インデックスと、ＲＴＴとを含むペイロードを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する。
【０１３１】
転送部３９１は、パケット受信部３３０から転送指示を示すフラグを含むＰＤＵを送信した場合、ＰＤＵのペイロードからフラグおよびデータを抽出する。そして、転送部３９１は、ペイロードから抽出したデータから経路情報を抽出する。そして、転送部３９１は、抽出した経路情報を参照し、自装置のスイッチＩＤが経路の途中または末端のスイッチ装置３０のスイッチＩＤとして経路情報に含まれているか否かを判定する。自装置のスイッチＩＤが経路の途中のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合、転送部３９１は、経路情報を参照して、自装置のスイッチＩＤに対応付けられたポート番号を特定する。そして、転送部３９１は、パケット受信部３３０から受信したＰＤＵを、特定したポート番号に対応する送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する。
【０１３２】
一方、自装置のスイッチＩＤが経路の末端のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合、転送部３９１は、転送応答を示すフラグを生成する。そして、転送部３９１は、ＰＤＵから抽出したインデックス、経路情報、および宛先スイッチ情報を、転送応答を示すフラグと共に含むペイロードを生成する。そして、転送部３９１は、生成したペイロードを含み、転送指示を示すフラグを含むＰＤＵの送信元ＭＡＣアドレスを宛先ＭＡＣアドレスに設定したＰＤＵを生成する。そして、転送部３９１は、生成したＰＤＵを、転送指示を示すフラグを含むＰＤＵを受信した受信ポート３４に対応する送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する。
【０１３３】
また、転送部３９１は、パケット受信部３３０から転送応答を示すフラグを含むＰＤＵを送信した場合、ＰＤＵのペイロードからフラグおよびデータを抽出する。そして、転送部３９１は、ペイロードから抽出したデータから経路情報を抽出する。そして、転送部３９１は、抽出した経路情報を参照し、自装置のスイッチＩＤが経路の途中または送信元のスイッチ装置３０のスイッチＩＤとして経路情報に含まれているか否かを判定する。自装置のスイッチＩＤが経路の送信元のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合、転送部３９１は、パケット受信部３３０から受信したＰＤＵを測定部３９０へ送信する。
【０１３４】
一方、自装置のスイッチＩＤが経路の途中のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合、転送部３９１は、ＦＢＤ３３４を参照して、ＰＤＵの宛先ＭＡＣアドレスに対応付けられたポート番号を特定する。そして、転送部３９１は、パケット受信部３３０から受信したＰＤＵを、特定したポート番号の送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する。
【０１３５】
パケット受信部３３０は、他のスイッチ装置３０から、転送指示または転送応答のフラグを含むＰＤＵを受信した場合、受信したＰＤＵを転送部３９１へ送信する。
【０１３６】
図２１および図２２は、実施例３におけるElephantフローの判定方法の一例を説明する図である。図２１は、フローがElephantフローと判定される場合の例を示し、図２２は、フローがElephantフローと判定されない場合の例を示す。図２１に示した例では、まず、スイッチ装置３０内のスヌープ部３３２が開始パケットをスヌープし、フローの開始が検出される。そして、ＰＤＵ送受信部３１０が、開始パケットの受信を示すフラグ等を含むＰＤＵを識別装置２０へ送信する。識別装置２０内のテーブル管理部２１１は、時刻ｔ0において、開始パケットを含むフローのフロー情報と、フローの経路を識別するインデックスとをフローテーブル３２０に登録する。これにより、フローテーブル３２０にフロー情報が登録されたフローは、Elephantフローか否かが監視される監視対象となる。モニタタイマ２１０は、フローテーブル３２０に登録されたフローについて、時刻ｔ0からモニタ期間Ｔmの計測を開始する。また、テーブル管理部２１１は、フローテーブル３２０に登録されたフローについて、時刻ｔ0からスヌープ期間ＴSの計測を開始する。
【０１３７】
そして、スヌープ期間ＴSが経過した時刻ｔ1において、スヌープ指示部２１３は、スヌープ指示を示すフラグ等をスイッチ装置３０へ送信する。スイッチ装置３０のスヌープ部３３２は、スヌープ指示を示すフラグと共に受信したフロー情報に対応するフローに含まれるパケットのスヌープを所定時間試行する。パケットがスヌープされた場合、スイッチ装置３０のＰＤＵ送受信部３１０は、スヌープ成功を示すフラグと、スヌープされたパケットのヘッダに含まれたウインドウサイズとを含むＰＤＵを識別装置２０へ送信する。識別装置２０の判定部２１４は、スヌープ成功を示すフラグ等と共に受信したフロー情報に対応付けられたインデックスをフローテーブル３２０から抽出し、抽出したインデックスに対応付けられたＲＴＴをＲＴＴテーブル２２２から抽出する。そして、判定部２１４は、スヌープ成功を示すフラグ等と共に受信したウインドウサイズを、ＲＴＴテーブル２２２から抽出したＲＴＴで割ることにより、フローのスループットを算出する。
【０１３８】
図２１に示した例において、時刻ｔ1の時点では、スヌープ指示に応じてスヌープされたパケットから算出されたフローのスループットは、閾値未満である。そのため、フローの情報は、フローテーブル３２０から削除されず、フローは、引き続き監視対象となる。一方、フローのスループットが増加すると、例えばモニタ期間Ｔmの経過前の時刻ｔ2の時点で、スヌープ指示に応じてスヌープされたパケットから算出されたフローのスループットが閾値以上となる。フローのスループットが閾値以上となった場合、識別装置２０の判定部２１４は、スヌープされたパケットを含むフローをElephantフローと判定する。そして、判定部２１４は、Elephantフローのフロー情報等を識別装置２０へ送信する。そして、判定部２１４は、フローテーブル３２０からElephantフローのフロー情報等を削除する。これにより、スループットが閾値以上と判定されたフローは、監視対象から外される。
【０１３９】
スイッチ装置３０の登録部３１３は、識別装置２０から受信したElephantフローのフロー情報等をフローテーブル３２０に登録する。そして、マーキング部３３６は、フローテーブル３２０に登録されたフロー情報をヘッダに含むパケットを受信した場合、パケットのヘッダ内にElephantフローに含まれるパケットであることを示す識別情報を書き込む。
【０１４０】
一方、図２２に示した例では、時刻ｔ2の時点においても、スヌープ指示に応じてスヌープされたパケットから算出されたフローのスループットは、閾値未満である。そのため、フローの情報は、フローテーブル３２０から削除されず、フローは、引き続き監視対象となる。しかし、図２２に示した例では、時刻ｔbの時点において、スイッチ装置３０内のスヌープ部３３２が中断パケットまたは終了パケットをスヌープし、フローの終了が検出される。ＰＤＵ送受信部３１０は、フローの終了を示すフラグ等を含むＰＤＵを識別装置２０へ送信する。識別装置２０内のテーブル管理部２１１は、中断パケットまたは終了パケットを含むフローのフロー情報を、フローテーブル３２０から削除する。これにより、Elephantフローと判定される前に中断パケットまたは終了パケットが送信されたフローは、監視対象から外される。
【０１４１】
［スイッチ装置３０の動作］
図２３は、実施例３におけるスイッチ装置３０の動作の一例を示すフローチャートである。なお、本実施例におけるスイッチ装置３０の動作は、以下に説明する点を除き、一部の処理は、図１１に示した処理と同様である。以下では、図１１において説明した実施例１におけるスイッチ装置３０の処理については、本実施例でも同様であるため説明を省略する。
【０１４２】
スイッチ装置３０は、図１１のステップＳ１００からＳ１１７に示した処理を実行する。そして、登録部３１３が、登録指示のフラグを含むＰＤＵを受信していないと判定した場合（図１１のＳ１１６：Ｎｏ）、測定部３９０は、ＰＤＵ送受信部３１０を介して、識別装置２０から測定指示を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ１２０）。測定指示を示すフラグを含むＰＤＵを受信した場合（Ｓ１２０：Ｙｅｓ）、測定部３９０は、ＰＤＵのペイロードから抽出したデータから、インデックス、経路情報、および宛先スイッチ情報を抽出する。
【０１４３】
次に、測定部３９０は、転送指示を示すフラグ、インデックス、経路情報、および宛先スイッチ情報を含むペイロードを生成する。そして、測定部３９０は、生成したペイロードを含み、宛先スイッチ情報に対応するスイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、測定部３９０は、生成したＰＤＵを、経路情報に記載された自装置の送信ポートに接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する（Ｓ１２１）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１４４】
一方、測定部３９０が測定指示を示すフラグを含むＰＤＵを受信していない場合（Ｓ１２０：Ｎｏ）、転送部３９１は、パケット受信部３３０から転送指示を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ１２２）。転送指示を示すフラグを含むＰＤＵを受信した場合（Ｓ１２２：Ｙｅｓ）、転送部３９１は、ＰＤＵのペイロードから経路情報を抽出する。そして、転送部３９１は、抽出した経路情報を参照し、自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれているか否かを判定する（Ｓ１２３）。
【０１４５】
自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合（Ｓ１２３：Ｙｅｓ）、転送部３９１は、転送応答を示すフラグを生成する。そして、転送部３９１は、転送指示のフラグを含むＰＤＵから抽出したインデックス、経路情報、および宛先スイッチ情報を、転送応答を示すフラグと共に含むペイロードを生成する。そして、転送部３９１は、生成したペイロードを含み、転送指示のフラグを含むＰＤＵの送信元ＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、転送部３９１は、生成したＰＤＵを、転送指示を示すフラグを含むＰＤＵを受信した受信ポート３４に対応する送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する（Ｓ１２４）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１４６】
一方、自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれていない場合（Ｓ１２３：Ｎｏ）、転送部３９１は、経路情報を参照して、自装置のスイッチＩＤに対応付けられたポート番号を特定する。そして、転送部３９１は、パケット受信部３３０から受信したＰＤＵを、特定したポート番号に対応する送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する（Ｓ１２５）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１４７】
転送指示を示すフラグを含むＰＤＵを受信していない場合（Ｓ１２２：Ｎｏ）、転送部３９１は、パケット受信部３３０から転送応答を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ１２６）。転送部３９１が転送応答を示すフラグを含むＰＤＵを受信していない場合（Ｓ１２６：Ｎｏ）、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１４８】
一方、転送応答を示すフラグを含むＰＤＵを受信した場合（Ｓ１２６：Ｙｅｓ）、転送部３９１は、ＰＤＵのペイロードから経路情報を抽出する。そして、転送部３９１は、抽出した経路情報を参照し、自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれているか否かを判定する（Ｓ１２７）。自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれている場合（Ｓ１２７：Ｙｅｓ）、転送部３９１は、パケット受信部３３０から受信したＰＤＵを測定部３９０へ送信する。
【０１４９】
測定部３９０は、転送指示を示すフラグを含むＰＤＵを送信してから、転送応答を示すフラグを含むＰＤＵを受信するまでの時間を、ＲＴＴとして算出する（Ｓ１２８）。そして、測定部３９０は、算出したＲＴＴを、測定応答を示すフラグおよびインデックスと共に、ＰＤＵ生成部３１１へ送信する。ＰＤＵ生成部３１１は、測定部３９０から受信した、測定応答を示すフラグと、インデックスと、ＲＴＴとを含むペイロードを生成する。ＰＤＵ送受信部３１０は、ＰＤＵ生成部３１１が生成したＰＤＵを、管理ポート３７を介して識別装置２０へ送信する（Ｓ１２９）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１５０】
一方、自装置のスイッチＩＤが宛先のスイッチ装置３０のスイッチＩＤとして経路情報に含まれていない場合（Ｓ１２７：Ｎｏ）、転送部３９１は、ＦＢＤ３３４を参照して、ＰＤＵの宛先ＭＡＣアドレスに対応付けられたポート番号を特定する。そして、転送部３９１は、パケット受信部３３０から受信したＰＤＵを、特定したポート番号の送信ポート３６に接続された送信キュー３５に格納する。送信キュー３５は、格納されたＰＤＵを送信ポート３６から送信する（Ｓ１３０）。そして、パケット受信部３３０は、再びステップＳ１００に示した処理を実行する。
【０１５１】
［識別装置２０の動作］
図２４は、実施例３における識別装置２０の動作の一例を示すフローチャートである。なお、本実施例における識別装置２０の動作は、以下に説明する点を除き、一部の処理は、図１２または図１３に示した処理と同様である。以下では、図１２または図１３において説明した実施例１における識別装置２０の処理については、本実施例でも同様であるため説明を省略する。
【０１５２】
識別装置２０は、図１２のステップＳ２００からＳ２０３に示した処理を実行する。そして、判定部２１４は、スイッチ装置３０から、スヌープ成功を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２０４）。スヌープ成功を示すフラグを含むＰＤＵを受信した場合（Ｓ２０４：Ｙｅｓ）、判定部２１４は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、判定部２１４は、ペイロードから抽出したデータに含まれたフロー情報に対応付けられたフローＩＤおよびインデックスを、特定した個別テーブルから抽出する。そして、判定部２１４は、抽出したインデックスに対応付けられたＲＴＴをＲＴＴテーブル２２２から抽出する。
【０１５３】
次に、判定部２１４は、ペイロードから抽出したデータに含まれたウインドウサイズを、ＲＴＴテーブル２２２から抽出したＲＴＴで割ることにより、スループットを算出する（Ｓ２２０）。そして、判定部２１４は、算出したスループットが所定の閾値以上であるか否かを判定する（Ｓ２２１）。スループットが所定の閾値未満である場合（Ｓ２２１：Ｎｏ）、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【０１５４】
一方、スループットが所定の閾値以上である場合（Ｓ２２１：Ｙｅｓ）、判定部２１４は、ペイロードから抽出したデータに含まれたフロー情報で特定されるフローが、Elephantフローであると判定する。そして、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、登録指示を示すフラグと共にＰＤＵ生成部２１５へ送信する。ＰＤＵ生成部２１５は、判定部２１４から受信した登録指示を示すフラグとフローＩＤとフロー情報とを含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、スイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。ＰＤＵ送受信部２１６は、ＰＤＵ生成部２１５が生成したＰＤＵを、管理ポート２３を介してスイッチ装置３０へ送信する（Ｓ２０７）。
【０１５５】
次に、判定部２１４は、Elephantフローであると判定したフローのフローＩＤおよびフロー情報を、フローＩＤに対応付けられたインデックス、登録時刻、および失敗回数と共に、モニタテーブル２２０から削除する（Ｓ２０８）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【０１５６】
判定部２１４がスヌープ成功を示すフラグを含むＰＤＵを受信していない場合（Ｓ２０４：Ｎｏ）、テーブル管理部２１１は、スヌープ失敗を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２０９）。スヌープ失敗を示すフラグを含むＰＤＵを受信した場合（Ｓ２０９：Ｙｅｓ）、テーブル管理部２１１は、モニタテーブル２２０を参照して、ＰＤＵの送信元のスイッチ装置３０に対応する個別テーブルを特定する。そして、テーブル管理部２１１は、特定した個別テーブル内で、ペイロードから抽出したデータに含まれたフロー情報を特定する。そして、テーブル管理部２１１は、特定したフロー情報に対応付けられている失敗回数に１を加算する（Ｓ２１０）。そして、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【０１５７】
判定部２１４がスヌープ失敗を示すフラグを含むＰＤＵを受信していない場合（Ｓ２０９：Ｎｏ）、測定指示部２１７は、ＲＴＴの測定タイミングか否かを判定する（Ｓ２２２）。ＲＴＴの測定タイミングではない場合（Ｓ２２２：Ｎｏ）、識別装置２０は、図１３に示したステップＳ２１１からＳ２１５の処理を実行する。
【０１５８】
一方、ＲＴＴの測定タイミングである場合（Ｓ２２２：Ｙｅｓ）、測定指示部２１７は、経路情報テーブル２２１の中で、未選択のインデックスを１つ選択する（Ｓ２２３）。そして、測定指示部２１７は、選択したインデックスに対応付けられた経路情報、送信元スイッチ情報、および宛先スイッチ情報を、経路情報テーブル２２１から抽出する。そして、測定指示部２１７は、インデックス、経路情報、送信元スイッチ情報、および宛先スイッチ情報を、測定指示を示すフラグと共に、ＰＤＵ生成部２１５へ送信する。ＰＤＵ生成部２１５は、測定指示部２１７から受信した、測定指示を示すフラグ、インデックス、経路情報、および宛先スイッチ情報を含むペイロードを生成する。そして、ＰＤＵ生成部２１５は、生成したペイロードを含み、送信元スイッチ情報に対応するスイッチ装置３０のＭＡＣアドレスを宛先ＭＡＣアドレスとするＰＤＵを生成する。そして、ＰＤＵ生成部２１５は、生成したＰＤＵをＰＤＵ送受信部２１６へ送信する（Ｓ２２４）。
【０１５９】
次に、測定結果登録部２１８は、測定応答を示すフラグを含むＰＤＵを受信したか否かを判定する（Ｓ２２５）。測定応答を示すフラグを含むＰＤＵを受信した場合（Ｓ２２５：Ｙｅｓ）、測定結果登録部２１８は、ＰＤＵのペイロードからインデックスおよびＲＴＴを抽出する。そして、測定結果登録部２１８は、抽出したインデックスに対応付けて、抽出したＲＴＴをＲＴＴテーブル２２２に登録する（Ｓ２２６）。そして、測定指示部２１７は、経路情報テーブル２２１の中で、全てのインデックスを選択したか否かを判定する（Ｓ２２７）。未選択のインデックスがある場合（Ｓ２２７：Ｎｏ）、測定指示部２１７は、再びステップＳ２２３に示した処理を実行する。一方、測定指示部２１７が全てのインデックスを選択した場合（Ｓ２２７：Ｙｅｓ）、テーブル管理部２１１は、再びステップＳ２００に示した処理を実行する。
【０１６０】
［効果］
上述したように、本実施例の情報処理システム１０によれば、Elephantフロー等の所定のフローを効率的に検出することができる。
【０１６１】
［ハードウェア］
なお、これまで説明した図に示された各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１６２】
さらに、スイッチ装置３０で行われる各種処理機能は、ＣＰＵ（Central  Processing  Unit）（又はＭＰＵ（Micro  Processing  Unit）、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部又は任意の一部を実行してもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行するプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【０１６３】
ところで、上記した各実施例で説明した各種の処理は、予め用意されたプログラムをスイッチ装置３０が実行することで実現できる。そこで、以下では、上記した各実施例と同様の機能を有するプログラムを実行するスイッチ装置３０の一例を説明する。図２５は、スイッチ装置３０の機能を実現するコンピュータ５０の一例を示す図である。
【０１６４】
図２５に示すように、スイッチ装置３０の機能を実現するコンピュータ５０は、通信インターフェイス５１、ＣＰＵ５２、ＲＡＭ（Random  Access  Memory）５３、およびＲＯＭ（Read  Only  Memory）５４を有する。通信インターフェイス５１、ＣＰＵ５２、ＲＡＭ５３、およびＲＯＭ５４は、バス５５を介して互いに接続されている。
【０１６５】
ＲＯＭ５４には、制御プログラムが予め記憶される。ＣＰＵ５２は、制御プログラムをＲＯＭ５４から読み出してＲＡＭ５３に展開する。制御プログラムについては、図２、図１４、または図２０に示した各々の構成要素と同様、適宜統合または分離してもよい。
【０１６６】
ＣＰＵ５２は、ＲＯＭ５４から制御プログラムを読み出し、ＲＡＭ５３に展開する。そして、ＣＰＵ５２は、上記した実施例１において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、ＰＤＵ送受信部３１０、ＰＤＵ生成部３１１、スヌープ制御部３１２、登録部３１３、および削除部３１４と同様の機能を発揮する。また、ＣＰＵ５２は、上記した実施例１において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、パケット受信部３３０、スヌープ部３３２、ポート特定部３３３、判定部３３５、およびマーキング部３３６と同様の機能を発揮する。
【０１６７】
また、ＣＰＵ５２は、上記した実施例２において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、スヌープ制御部３１２、登録部３１３、削除部３１４モニタタイマ３８０、テーブル管理部３８１、スヌープタイマ３８２、および判定部３８３と同様の機能を発揮する。また、ＣＰＵ５２は、上記した実施例２において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、パケット受信部３３０、スヌープ部３３２、ポート特定部３３３、判定部３３５、およびマーキング部３３６と同様の機能を発揮する。
【０１６８】
また、ＣＰＵ５２は、上記した実施例３において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、ＰＤＵ送受信部３１０、ＰＤＵ生成部３１１、スヌープ制御部３１２、登録部３１３、削除部３１４、測定部３９０、および転送部３９１と同様の機能を発揮する。また、ＣＰＵ５２は、上記した実施例３において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば、パケット受信部３３０、スヌープ部３３２、ポート特定部３３３、判定部３３５、およびマーキング部３３６と同様の機能を発揮する。
【０１６９】
また、ＣＰＵ５２は、上記した実施例１または実施例２において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば図１１に示した処理を実行する。また、ＣＰＵ５２は、上記した実施例３において、ＲＡＭ５３上に展開した制御プログラムを実行することにより、例えば図２３に示した処理を実行する。
【０１７０】
なお、ＣＰＵ５２によって仮想的に実現される各処理部は、全ての処理部がＣＰＵ５２によって常に実現されていなくてもよく、処理に用いられる処理部のみが仮想的に実現されればよい。また、スイッチ制御プログラムは、必ずしも最初から全てをＲＯＭ５４内に記憶させておかなくてもよい。例えば、スイッチ装置３０に挿入されるＩＣカードなどの可搬型記録媒体に各プログラムが記憶され、スイッチ装置３０が可搬型記録媒体から各プログラムを取得して実行するようにしてもよい。また、各プログラムを記憶させた他のコンピュータまたはサーバ装置などから、無線通信回線、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介して、スイッチ装置３０が各プログラムを取得して実行するようにしてもよい。
【０１７１】
［その他］
上記した実施例３において、識別装置２０の判定部２１４は、フローに含まれたパケットのヘッダから抽出したウインドウサイズの情報と、フローの経路について測定されたＲＴＴとに基づいてスループットを算出した。しかし、開示の技術はこれに限られない。例えば、判定部２１４は、フローに含まれたパケットのスヌープ間隔と、スヌープされたパケットのヘッダから抽出したシーケンス番号とに基づいて、スループットを算出してもよい。具体的には、スヌープ間隔をΔＴ、前回スヌープされたパケットから抽出されたシーケンス番号から、前回のスヌープからでΔＴ後にスヌープされたパケットから抽出されたシーケンス番号までのシーケンス番号の増加量をΔＳとした場合、判定部２１４は、例えば、ΔＳをΔＴで割った値を、スループットとして算出してもよい。スヌープ間隔とシーケンス番号とを用いることにより、ＲＴＴを測定することなく、スループットの測定が可能となる。
【０１７２】
また、上記した各実施例では、モニタ期間内に、スヌープ期間が何回か経過し、スヌープ期間が経過する度に、識別装置２０は、スイッチ装置３０に、スヌープ指示を示すフラグを含むＰＤＵを送信する。しかし、開示の技術はこれに限られない。例えば、スヌープ期間が経過した場合、識別装置２０は、スヌープ指示を示すフラグを含むＰＤＵをスイッチ装置３０へ１回送信し、スヌープ指示に応じてスヌープされたパケットから算出されたシーケンス番号の増加量や、スループットが、所定の閾値未満である場合、再びスヌープ期間を計測することなく、Elephantフローではないと判定して、フローを監視対象から外してもよい。これにより、スヌープ指示の送信に伴う情報処理システム１０内の通信トラフィックの増加を抑制することができる。
【０１７３】
また、上記した各実施例では、モニタ期間内に、スヌープ期間が経過した場合、再び同一のモニタ期間の計測を開始するが、開示の技術はこれに限られない。実施例１におけるスヌープタイマ２１２および実施例２におけるスヌープタイマ３８２は、例えば、スヌープ指示に応じてスヌープされたパケットから算出されたシーケンス番号の増加量ΔＳと、増加量の閾値Ｓthとの差分に応じて、次のスヌープ期間を変更してもよい。例えば、スヌープ期間の初期値をＴsとした場合、スヌープタイマ２１２およびスヌープタイマ３８２は、下記の算出式に基づいて、次のスヌープ期間Ｔs’を算出する。
Ｔs’＝Ｔs×（Ｓth−ΔＳ）／Ｓth
【０１７４】
また、実施例３におけるスヌープタイマ２１２は、スヌープ指示に応じてスヌープされたパケットから算出されたスループットＴｈと、スループットの閾値Ｔｈthとの差分に応じて、次のスヌープ期間を変更してもよい。例えば、スヌープ期間の初期値をＴsとした場合、スヌープタイマ２１２は、下記の算出式に基づいて、次のスヌープ期間Ｔs’を算出する。
Ｔs’＝Ｔs×（Ｔｈth−Ｔｈ）／Ｔｈth
【０１７５】
また、上記した各実施例では、識別装置２０がElephantフローと判定したフローのフロー情報を各スイッチ装置３０へ送信し、各スイッチ装置３０が、Elephantフローに含まれるパケットのヘッダに識別情報を書き込んだ時刻を転送時刻として記録する。そして、各スイッチ装置３０が、記憶部３２の空き容量が所定値未満となった場合、識別情報を書き込んだ時刻からの経過時間が最も長いElephantフローのフロー情報をフローテーブル３２０から削除する。しかし、開示の技術はこれに限られない。
【０１７６】
例えば、識別装置２０が各スイッチ装置３０の記憶部３２の空き容量を管理し、記憶部３２の空き容量が所定値未満となったスイッチ装置３０に対して、Elephantフローに含まれるパケットを所定期間スヌープさせる。そして、所定期間以内に、Elephantフローに含まれるパケットがスヌープされなかった場合、識別装置２０は、記憶部３２の空き容量が所定値未満となったスイッチ装置３０に対して、所定期間以内にパケットがスヌープされなかったElephantフローのフロー情報をフローテーブル３２０から削除させるように指示してもよい。
【０１７７】
また、上記した各実施例における情報処理システム１０は、物理ネットワーク上に、トンネリングにより論理的な複数のネットワークを構築するオーバレイネットワークに対しても適用することができる。上記した各実施例における情報処理システム１０をオーバレイネットワークに適用する場合、スイッチ装置３０の機能は、例えば、論理ネットワークを終端するＶＴＥＰ（VXLAN  Tunnel  End  Point）等の終端装置に設けられる。スイッチ装置３０の機能を有する終端装置は、情報処理装置１４から受信したパケットをカプセル化する場合、Elephantフローに含まれるパケットであれば、外部ヘッダのＤＳＣＰフィールド等に、Elephantフローに含まれるパケットであることを示す識別情報を書き込む。
【０１７８】
また、上記した実施例１および実施例３において、各スイッチ装置３０のスヌープ制御部３１２は、スヌープ部３３２がスヌープした開始パケット等の所定のパケットのヘッダからフロー情報やシーケンス番号等を取り出す。そして、ＰＤＵ送受信部３１０が、スヌープ制御部３１２によって取り出された情報をペイロードに含むＰＤＵを生成して識別装置２０へ送信する。しかし、開示の技術はこれに限られない。例えば、各スイッチ装置３０は、スヌープ部３３２がスヌープした所定のパケットまたはそのヘッダを、ＰＤＵに加工することなく識別装置２０へ送信してもよい。
【０１７９】
また、上記した実施例１において、識別装置２０のテーブル管理部２１１は、開始パケットの情報を含むＰＤＵをスイッチ装置３０から受信した場合に、ＰＤＵのペイロードに含まれているシーケンス番号をモニタテーブル２２０に登録する。そして、判定部２１４は、スヌープ期間毎に、スイッチ装置３０によってスヌープされたパケットのヘッダに含まれているシーケンス番号から、モニタテーブル２２０に登録されているシーケンス番号を引くことにより、シーケンス番号の増加量ΔＳを算出する。そして、判定部２１４は、算出した増加量ΔＳが所定の閾値以上である場合に、対応するフローがElephantフローであると判定する。しかし、開示の技術はこれに限られない。
【０１８０】
例えば、テーブル管理部２１１は、開始パケットの情報を含むＰＤＵをスイッチ装置３０から受信した場合に、ＰＤＵのペイロードに含まれているシーケンス番号に、所定の閾値に相当するシーケンス番号の増加分を加算する。そして、テーブル管理部２１１は、加算結果を、シーケンス番号の閾値としてモニタテーブル２２０に登録する。そして、判定部２１４は、スヌープ期間毎に、スイッチ装置３０によってスヌープされたパケットのヘッダに含まれているシーケンス番号が、モニタテーブル２２０に登録されているシーケンス番号の閾値以上であるか否かを判定する。そして、スヌープされたパケットのヘッダに含まれているシーケンス番号が、モニタテーブル２２０に登録されているシーケンス番号の閾値以上である場合に、判定部２１４は、対応するフローがElephantフローであると判定するようにしてもよい。これにより、判定部２１４は、スヌープ期間毎にElephantフローであるか否かを判定する際に、スヌープされたパケットのヘッダに含まれているシーケンス番号と、モニタテーブル２２０に登録されているシーケンス番号とを比較する処理を行えばよいので、処理を簡略化することができる。
【０１８１】
以上、実施の形態を説明したが、本発明の技術的範囲は上記実施例に記載された範囲には限定されない。上記実施例に多様な変更または改良を加えることが可能であることが当業者には明らかである。また、そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得る。
【符号の説明】
【０１８２】
１０  情報処理システム
１１  上位スイッチ群
１２  下位スイッチ群
１４  情報処理装置
２０  識別装置
３０  スイッチ装置
【図１】
0006417865.tif 000002
【図２】
0006417865.tif 000003
【図３】
0006417865.tif 000004
【図４】
0006417865.tif 000005
【図５】
0006417865.tif 000006
【図６】
0006417865.tif 000007
【図７】
0006417865.tif 000008
【図８】
0006417865.tif 000009
【図９】
0006417865.tif 000010
【図１０】
0006417865.tif 000011
【図１１】
0006417865.tif 000012
【図１２】
0006417865.tif 000013
【図１３】
0006417865.tif 000014
【図１４】
0006417865.tif 000015
【図１５】
0006417865.tif 000016
【図１６】
0006417865.tif 000017
【図１７】
0006417865.tif 000018
【図１８】
0006417865.tif 000019
【図１９】
0006417865.tif 000020
【図２０】
0006417865.tif 000021
【図２１】
0006417865.tif 000022
【図２２】
0006417865.tif 000023
【図２３】
0006417865.tif 000024
【図２４】
0006417865.tif 000025
【図２５】
0006417865.tif 000026