(57)【要約】【課題】輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。【解決手段】スイッチ装置２０は、受信バッファ２０９と、スイッチング処理部２１１と、判定部２０４と、生成部２０５と、送信部２０６とを有する。受信バッファ２０９は、通信装置１１からのデータパケットを受信する。スイッチング処理部２１１は、受信バッファ２０９が受信したデータパケットを、宛先に応じて送信ポート２１３毎に設けられた出力キュー２１２のいずれかに格納する。判定部２０４は、出力キュー２１２内のデータのデータ量が所定の閾値以上か否かを判定する。生成部２０５は、判定部２０４がいずれかの出力キュー２１２内のデータ量を所定の閾値以上と判定した場合、輻輳の発生を通知する通知パケットを生成する。送信部２０６は、生成部２０５が生成した通知パケットを、他のスイッチ装置３０へ送信する。【選択図】図２
2015186142.tif 000002
【特許請求の範囲】
【請求項１】
送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置において、
前記送信装置が送信したデータパケットを受信する受信部と、
前記受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する格納部と、
いずれかの前記出力キュー内のデータのデータ量が第１の閾値以上か否かを判定する判定部と、
前記判定部がいずれかの前記出力キュー内のデータ量を前記第１の閾値以上と判定した場合、輻輳の発生を通知する通知パケットを生成する生成部と、
前記生成部が生成した前記通知パケットを、他のスイッチ装置へ送信する送信部と
を有することを特徴とするスイッチ装置。
【請求項２】
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が第２の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する保持部と、
前記判定部がいずれかの前記出力キュー内のデータ量を前記第１の閾値以上と判定した場合、前記フローテーブルを参照して、データ量が前記第１の閾値以上と判定された出力キューに格納されるデータパケットの中で、伝送されるデータ量が前記第２の閾値未満であることを示すフラグが対応付けられたフローに含まれるデータパケットを特定し、前記格納部に、特定したデータパケットの格納先を、データ量が前記第１の閾値以上と判定された前記出力キュー以外の出力キューに変更させる変更部と
を有することを特徴とする請求項１に記載のスイッチ装置。
【請求項３】
前記送信部は、
前記生成部が生成した前記通知パケットを、全ての前記他のスイッチ装置へ送信することを特徴とする請求項２に記載のスイッチ装置。
【請求項４】
前記送信部は、
前記生成部が生成した前記通知パケットを、前記他のスイッチ装置の中で、データ量が前記第１の閾値以上と判定された前記出力キューに格納されたデータパケットを送信した他のスイッチ装置へ送信することを特徴とする請求項２に記載のスイッチ装置。
【請求項５】
前記フロー毎に、前記送信装置から前記受信装置へ送信される一連のデータパケットのデータ量の累積値を算出する算出部と、
前記算出部が算出したデータ量の累積値が前記第２の閾値以上となった場合、前記フローテーブルにおいて、前記累積値に対応するフローに、伝送されるデータのデータ量が前記第２の閾値以上であることを示すフラグを設定する設定部と
を有することを特徴とする請求項２から４のいずれか一項に記載のスイッチ装置。
【請求項６】
送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置において、
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する保持部と、
前記送信装置が送信したデータパケットを受信する受信部と、
前記受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する格納部と、
前記受信部が、他のスイッチ装置から輻輳の発生を通知する通知パケットを受信したか否かを判定する判定部と、
前記判定部が、前記受信部が前記通知パケットを受信したと判定した場合、前記フローテーブルを参照して、前記他のスイッチ装置へ送信されるデータパケットの中で、伝送されるデータ量が前記所定の閾値未満であることを示すフラグが対応付けられたフローに含まれるデータパケットを特定し、前記格納部に、特定したデータパケットの格納先を、前記他のスイッチ装置へ送信されるデータパケットが格納される出力キューとは異なる出力キューに変更させる変更部と
を有することを特徴とするスイッチ装置。
【請求項７】
前記フロー毎に、前記送信装置から前記受信装置へ送信される一連のデータパケットのデータ量の累積値を算出する算出部と、
前記算出部が算出したデータ量の累積値が前記所定の閾値以上となった場合、前記フローテーブルにおいて、前記累積値に対応するフローに、伝送されるデータのデータ量が前記所定の閾値以上であることを示すフラグを設定する設定部と
を有することを特徴とする請求項６に記載のスイッチ装置。
【請求項８】
送信装置と、受信装置と、前記送信装置からのデータパケットを前記受信装置へ転送する第１のスイッチ装置と、前記送信装置からのデータパケットを前記受信装置へ転送する第２のスイッチ装置とを有する情報処理システムにおいて、
前記第１のスイッチ装置は、
前記送信装置が送信したデータパケットを受信する第１の受信部と、
前記第１の受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた第１の出力キューのいずれかに格納する第１の格納部と、
いずれかの前記第１の出力キュー内のデータのデータ量が第１の閾値以上か否かを判定する第１の判定部と、
前記第１の判定部がいずれかの前記第１の出力キュー内のデータ量を前記第１の閾値以上と判定した場合、輻輳の発生を通知する通知パケットを生成する生成部と、
前記生成部が生成した前記通知パケットを、前記第２のスイッチ装置へ送信する送信部と
を有し、
前記第２のスイッチ装置は、
前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が第２の閾値以上か否かを示すフラグが対応付けられたフローテーブルを保持する保持部と、
前記送信装置が送信したデータパケットを受信する第２の受信部と、
前記第２の受信部が受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた第２の出力キューのいずれかに格納する第２の格納部と、
前記第２の受信部が、前記第１のスイッチ装置から前記通知パケットを受信したか否かを判定する第２の判定部と、
前記第２の判定部が、前記第２の受信部が前記通知パケットを受信したと判定した場合、前記フローテーブルを参照して、前記第１のスイッチ装置へ送信されるデータパケットの中で、伝送されるデータ量が前記第２の閾値未満であることを示すフラグが対応付けられたフローに含まれるデータパケットを特定し、前記第２の格納部に、特定したデータパケットの格納先を、前記第１のスイッチ装置へ送信されるデータパケットが格納される第２の出力キューとは異なる第２の出力キューに変更させる変更部と
を有することを特徴とする情報処理システム。
【請求項９】
送信装置が送信したデータパケットを受信して受信装置へ送信するスイッチ装置の制御方法において、
コンピュータが、
前記送信装置からのデータパケットを受信し、
受信したデータパケットを、前記データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納し、
いずれかの前記出力キュー内のデータのデータ量が所定の閾値以上か否かを判定し、
いずれかの前記出力キュー内のデータ量が前記所定の閾値以上と判定した場合、輻輳の発生を通知する通知パケットを生成し、
生成した前記通知パケットを、他のスイッチ装置へ送信する
処理を実行することを特徴とするスイッチ装置の制御方法。
【請求項１０】
送信装置からのデータパケットを受信して受信装置へ送信するスイッチ装置の制御方法において、
コンピュータが、
他のスイッチ装置から輻輳の発生を通知する通知パケットを受信したか否かを判定し、
前記通知パケットを受信したと判定した場合、前記送信装置から前記受信装置へ送信される一連のデータパケットを含むフロー毎に、前記フローにおいて伝送されるデータのデータ量が所定の閾値以上か否かを示すフラグが対応付けられたフローテーブルを参照して、前記他のスイッチ装置へ送信されるデータパケットの中で、伝送されるデータ量が前記所定の閾値未満であることを示すフラグが対応付けられたフローに含まれるデータパケットを特定し、
特定したデータパケットの格納先を、前記他のスイッチ装置へ送信されるデータパケットが格納される出力キューとは異なる出力キューに変更する
処理を実行することを特徴とするスイッチ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチ装置、情報処理システムおよびスイッチ装置の制御方法に関する。
【背景技術】
【０００２】
通信ネットワーク内を流れるデータパケットを中継するスイッチ装置では、データパケットが集中することにより輻輳が発生する場合がある。スイッチ装置に輻輳が発生した場合、データパケットの送信元の通信装置が、現在の輻輳ウィンドウのサイズを所定のサイズに縮小することで、輻輳を解消させる技術が知られている。また、インターネットトラフィックのフローのデータパケット数分布は、少数のデータパケットからなる多数のMiceフローと、多数のデータパケットからなる少数のElephantフローとが混在することが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１９１９３１号公報
【特許文献２】特開２００９−１７７６５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、輻輳が発生した場合に輻輳ウィンドウのサイズを縮小させると、データパケットの伝送レートが低下する。伝送レートが低下した場合、データ量の多いElephantフローは、データ量の少ないMiceフローよりも、送信対象のデータの送信開始から送信完了までにより多くの時間を要する。そのため、Miceフローに含まれるデータパケットと、Elephantフローに含まれるデータパケットとを、輻輳ウィンドウのサイズを縮小させることで一律に制御すると、Elephantフローにより伝送されるデータのスループットへの影響が大きくなる。また、輻輳ウィンドウのサイズを縮小させると、データ量の少ないMiceフローであっても、伝送レートが低下し、スループットが低下する。そのため、データパケットを効率的に処理できない場合があった。
【０００５】
本願に開示の技術は、輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。
【課題を解決するための手段】
【０００６】
１つの側面では、送信装置からのデータパケットを受信して受信装置へ送信するスイッチ装置は、受信部と、格納部と、判定部と、生成部と、送信部とを有する。受信部は、送信装置からのデータパケットを受信する。格納部は、受信部が受信したデータパケットを、データパケットの宛先に応じて送信ポート毎に設けられた出力キューのいずれかに格納する。判定部は、いずれかの出力キュー内のデータのデータ量が所定の閾値以上か否かを判定する。生成部は、判定部がいずれかの出力キュー内のデータ量を所定の閾値以上と判定した場合、輻輳の発生を通知する通知パケットを生成する。送信部は、生成部が生成した通知パケットを、他のスイッチ装置へ送信する。
【発明の効果】
【０００７】
１実施形態によれば、輻輳が発生した場合におけるデータパケットの処理効率の低下を抑制する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１における情報処理システムの一例を示す図である。
【図２】図２は、実施例１における上位のスイッチ装置の一例を示すブロック図である。
【図３】図３は、フローテーブルの一例を示す図である。
【図４】図４は、通知パケットの一例を示す図である。
【図５】図５は、実施例１における下位のスイッチ装置の一例を示すブロック図である。
【図６】図６は、フローテーブルの一例を示す図である。
【図７】図７は、実施例１におけるコントローラの一例を示すブロック図である。
【図８】図８は、輻輳テーブルの一例を示す図である。
【図９】図９は、実施例１における上位のスイッチ装置の動作の一例を示すフローチャートである。
【図１０】図１０は、実施例１における上位のスイッチ装置の動作の一例を示すフローチャートである。
【図１１】図１１は、実施例１における下位のスイッチ装置の動作の一例を示すフローチャートである。
【図１２】図１２は、実施例１におけるコントローラの動作の一例を示すフローチャートである。
【図１３】図１３は、実施例１におけるデータパケットの流れの一例を示す図である。
【図１４】図１４は、実施例２における情報処理システムの一例を示す図である。
【図１５】図１５は、実施例２におけるスイッチ装置の一例を示すブロック図である。
【図１６】図１６は、ＥＣＮフラグのビット位置を説明するための図である。
【図１７】図１７は、ＥＣＥフラグのビット位置を説明するための図である。
【図１８】図１８は、実施例２における通信装置の一例を示すブロック図である。
【図１９】図１９は、実施例２におけるデータパケットの流れの一例を示す図である。
【図２０】図２０は、実施例３における通信装置の一例を示すブロック図である。
【図２１】図２１は、実施例３における上位のスイッチ装置の一例を示すブロック図である。
【図２２】図２２は、実施例３における下位のスイッチ装置の一例を示すブロック図である。
【図２３】図２３は、実施例３における通信装置の動作の一例を示すフローチャートである。
【図２４】図２４は、実施例４におけるコントローラの一例を示すブロック図である。
【図２５】図２５は、実施例４におけるコントローラの動作の一例を示すフローチャートである。
【図２６】図２６は、スイッチ装置の機能を実現するコンピュータの一例を示す説明図である。
【発明を実施するための形態】
【０００９】
以下に、本願の開示するスイッチ装置、情報処理システムおよびスイッチ装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１０】
図１は、実施例１における情報処理システム１の一例を示す図である。情報処理システム１は、複数のスイッチ装置２０−１〜３、複数のスイッチ装置３０−１〜３、複数の通信装置１１−１〜６、およびコントローラ４０を有する。情報処理システム１は、例えばデータセンタに設けられる。複数の通信装置１１−１〜６のそれぞれは、例えばサーバである。なお、以下では、複数のスイッチ装置２０−１〜３のそれぞれを区別することなく総称する場合にスイッチ装置２０と記載する。また、複数のスイッチ装置３０−１〜３のそれぞれを区別することなく総称する場合にスイッチ装置３０と記載する。また、複数の通信装置１１−１〜６のそれぞれを区別することなく総称する場合に通信装置１１と記載する。
【００１１】
情報処理システム１は、例えば複数のSpineスイッチ等である上位スイッチ群２１と、例えば複数のLeafスイッチ等である下位スイッチ群３１とを有する。上位スイッチ群２１には、例えば複数のスイッチ装置２０が含まれ、下位スイッチ群３１には、例えば複数のスイッチ装置３０が含まれる。それぞれのスイッチ装置３０は、スイッチ装置２０−１〜３の中の２つ以上のスイッチ装置２０に接続される。また、それぞれのスイッチ装置３０は、通信装置１１に接続される。複数のスイッチ装置２０および複数のスイッチ装置３０は、例えばファットツリーのトポロジーを構成する。
【００１２】
スイッチ装置２０およびスイッチ装置３０のそれぞれは、例えば、受信したデータパケットの送信元のＭＡＣアドレスを、データパケットを受信した外部ポートに対応付けてＦＤＢ（Forwarding  DataBase）に保持するアドレス学習機能を有する。そして、スイッチ装置２０およびスイッチ装置３０のそれぞれは、データパケットを受信した場合、ＦＤＢを参照し、受信したデータパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートからデータパケットを送信する。
【００１３】
コントローラ４０は、スイッチ装置２０およびスイッチ装置３０のそれぞれと接続され、スイッチ装置２０およびスイッチ装置３０をそれぞれ制御する。本実施例において、コントローラ４０は、例えばＳＤＮ（Software-Defined  Network）コントローラであり、スイッチ装置２０およびスイッチ装置３０のそれぞれは、例えばＳＤＮ対応スイッチである。
【００１４】
コントローラ４０は、送信元の通信装置１１から宛先の通信装置１１へ送られる一連のデータパケットを含むフロー毎に、フローを特定する情報等を記述したフローテーブルを、スイッチ装置２０およびスイッチ装置３０のそれぞれへ送信する。スイッチ装置２０およびスイッチ装置３０のそれぞれは、コントローラ４０が送信したフローテーブルを保持し、保持したフローテーブルに基づいて、受信したデータパケットを含むフローを識別する。
【００１５】
［スイッチ装置２０のブロック図］
図２は、実施例１における上位のスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、算出部２００、設定部２０１、保持部２０２、変更部２０３、判定部２０４、生成部２０５、送信部２０６、および通信部２０７を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、および複数の送信ポート２１３−１〜ｎを有する。
【００１６】
なお、以下では、複数の受信ポート２０８−１〜ｎのそれぞれを区別することなく総称する場合に受信ポート２０８と記載し、複数の受信バッファ２０９−１〜ｎのそれぞれを区別することなく総称する場合に受信バッファ２０９と記載する。また、複数の出力キュー２１２−１〜ｎのそれぞれを区別することなく総称する場合に出力キュー２１２と記載し、複数の送信ポート２１３−１〜ｎのそれぞれを区別することなく総称する場合に送信ポート２１３と記載する。
【００１７】
保持部２０２は、例えば図３に示すフローテーブル２０２０を保持する。図３は、フローテーブル２０２０の一例を示す図である。フローテーブル２０２０には、例えば図３に示すように、それぞれのフローを識別するFlow＿ID２０２１に対応付けて、マッチフィールド２０２２、Flow＿Count２０２３、およびE-flag２０２４が格納される。
【００１８】
マッチフィールド２０２２には、フローに含まれるデータパケットの宛先ＭＡＣアドレス（Dst＿MAC）や送信元ＭＡＣアドレス（Src＿MAC）など、フローに含まれる一連のデータパケットを特定する情報が格納される。Flow＿Count２０２３には、フローに含まれるデータパケットのデータ量の累積値を示す情報が格納される。
【００１９】
E-flag２０２４には、フローに含まれるデータパケットのデータ量の累積値が、例えば１ＭＢｙｔｅ等である所定の閾値以上の場合、「１」が格納され、フローに含まれるデータパケットのデータ量の累積値が所定の閾値未満の場合、「０」が格納される。以下、本明細書では、伝送されるデータ量の累積値が、例えば１ＭＢｙｔｅ等である所定の閾値以上のフローをElephantフローと呼び、伝送されるデータ量の累積値が所定の閾値未満のフローをMiceフローと呼ぶ。
【００２０】
それぞれの受信バッファ２０９は、受信ポート２０８毎に設けられており、対応する受信ポート２０８を介してデータパケットを受信する。それぞれの受信バッファ２０９は、受信部の一例である。それぞれの出力キュー２１２は、送信ポート２１３毎に設けられており、スイッチング処理部２１１から受け取ったデータパケットを、受け取った順に、対応する送信ポート２１３を介して送信する。１つの受信ポート２０８と、１つの送信ポート２１３とは、１つの外部ポートに接続される。
【００２１】
スイッチング処理部２１１は、受信バッファ２０９がデータパケットを受信した場合、データパケットの送信元のＭＡＣアドレスと、受信バッファ２０９に対応する外部ポートの情報とを対応付けてＦＤＢ２１０に登録する。そして、データパケットの宛先のＭＡＣアドレスがＦＤＢ２１０内に登録されていれば、スイッチング処理部２１１は、宛先のＭＡＣアドレスに対応付けられた外部ポートに対応する出力キュー２１２にデータパケットを格納する。なお、データパケットの宛先のＭＡＣアドレスがＦＤＢ２１０内に登録されていなければ、スイッチング処理部２１１は、データパケットを受信した外部ポートに接続された送信ポート２１３に対応する出力キュー２１２以外の全ての出力キュー２１２にデータパケットを格納する。スイッチング処理部２１１は、格納部の一例である。
【００２２】
算出部２００は、それぞれの受信バッファ２０９がデータパケットを受信した場合、フローテーブル２０２０内のマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部２００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル２０２０内で特定する。
【００２３】
そして、算出部２００は、特定したFlow＿Countの値に、受信バッファ２０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部２０１は、フローテーブル２０２０内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【００２４】
判定部２０４は、それぞれの出力キュー２１２内のデータ量を監視し、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する。所定の閾値とは、送信ポート２１３の伝送速度が例えば１０Ｇｂｐｓの場合、例えば６５パケットである。いずれかの出力キュー２１２内のデータ量が所定の閾値以上と判定した場合、即ち、いずれかの出力キュー２１２において輻輳が発生した場合、判定部２０４は、データ量が所定の閾値以上となった出力キュー２１２の情報を生成部２０５および通信部２０７へ送る。また、判定部２０４は、データ量が所定の閾値以上となった出力キュー２１２の情報を、輻輳の発生を示す情報と共に変更部２０３へ送る。
【００２５】
また、判定部２０４は、通信部２０７からIndexおよび出力キューの情報を含む輻輳確認要求を受信した場合、輻輳確認要求に含まれた情報で特定される出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する。データ量が所定の閾値以上と判定した場合、判定部２０４は、データ量が所定の閾値以上と判定した出力キュー２１２の情報を、輻輳の発生中を示す情報とIndexとを含む輻輳確認応答を通信部２０７へ送る。一方、出力キュー２１２内のデータ量が所定の閾値未満と判定した場合、判定部２０４は、輻輳の解消を示す情報とIndexとを含む輻輳確認応答を通信部２０７へ送る。
【００２６】
生成部２０５は、データ量が所定の閾値以上となった出力キュー２１２の情報を判定部２０４から受け取った場合、輻輳の発生を通知する通知パケットを生成する。そして、生成部２０５は、生成した通知パケットを、データ量が所定の閾値以上となった出力キュー２１２の情報と共に、送信部２０６へ送る。図４は、通知パケットの一例を示す図である。生成部２０５は、例えばIEEE802.1Qに規定されるＰＤＵ（Protocol  Data  Unit）を用いて通知パケットを生成する。通知パケットのDestination  Addressには、予約されたＭＡＣアドレスである01-80-C2-00-00-XXが格納される。通知パケットのPayloadには、輻輳が発生した旨を示す情報が格納される。
【００２７】
送信部２０６は、データ量が所定の閾値以上となった出力キュー２１２の情報と共に、通知パケットを生成部２０５から受け取った場合、該出力キュー２１２が格納したそれぞれのデータパケットの送信元のＭＡＣアドレスを特定する。そして、送信部２０６は、ＦＤＢ２１０を参照して、特定したＭＡＣアドレスに対応付けられた外部ポートを特定する。そして、送信部２０６は、生成部２０５から受け取った通知パケットを、特定した外部ポートに対応する出力キュー２１２に格納する。これにより、通知パケットは、送信部２０６が特定した外部ポートから送信される。また、送信部２０６は、特定した外部ポートの情報を通信部２０７へ送る。
【００２８】
通信部２０７は、データ量が所定の閾値以上となった出力キュー２１２の情報を判定部２０４から受信する。そして、通信部２０７は、送信部２０６から外部ポートの情報を受け取った場合、データ量が所定の閾値以上となった出力キュー２１２の情報と、外部ポートの情報とを含む輻輳発生通知を生成する。そして、通信部２０７は、生成した輻輳発生通知を、スイッチ装置２０の識別情報と共にコントローラ４０へ送信する。また、コントローラ４０から輻輳確認要求を受信した場合、通信部２０７は、輻輳確認要求を判定部２０４へ送る。そして、輻輳確認応答を判定部２０４から受け取った場合、通信部２０７は、受け取った輻輳確認応答をコントローラ４０へ送信する。
【００２９】
変更部２０３は、判定部２０４から出力キュー２１２の情報を受け取った場合、出力キュー２１２に対応する外部ポートを、輻輳ポートとして保持する。変更部２０３は、既に輻輳ポートを保持する場合、判定部２０４から受け取った出力キュー２１２に対応する外部ポートを輻輳ポートに追加する。
【００３０】
そして、変更部２０３は、受信バッファ２０９がデータパケットを受信する都度、ＦＤＢ２１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する。そして、変更部２０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する。
【００３１】
特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合、変更部２０３は、フローテーブル２０２０およびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、変更部２０３は、特定したFlow＿IDに対応付けられたE-flagが「０」であるか否か、即ち、特定したFlow＿IDに対応するフローがMiceフローであるか否かを判定する。E-flagが「０」である場合、変更部２０３は、他のスイッチ装置２０または３０に接続された外部ポートの中で、輻輳ポート以外の外部ポートを１つ選択する。
【００３２】
変更部２０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、例えば、送信帯域の空きが最も多い外部ポートを１つ選択する。また、他の例として、変更部２０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、最後にデータパケットが送信されてからの経過時間が最も長い外部ポートや、使用頻度が最も低い外部ポートを選択してもよい。あるいは、変更部２０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、ラウンドロビンにより順番に外部ポートを選択したり、乱数を用いてランダムに外部ポートを選択してもよい。
【００３３】
次に、変更部２０３は、ＦＤＢ２１０内において、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートの情報を、選択した外部ポートの情報に書き換えることにより、スイッチング処理部２１１に、データパケットの格納先を変更させる。スイッチング処理部２１１は、書き換えられた外部ポートに対応する出力キュー２１２にデータパケットを格納する。
【００３４】
また、輻輳の解消を示す情報と共に、出力キュー２１２の情報を判定部２０４から受け取った場合、変更部２０３は、受け取った出力キュー２１２に対応する外部ポートを特定する。そして、変更部２０３は、特定した外部ポートを、輻輳ポートから除外すると共に、ＦＤＢ２１０内において、書き換えた外部ポートの情報を元に戻す。これにより、スイッチング処理部２１１は、Miceフローに含まれるデータパケットを、輻輳が解消した出力キュー２１２に格納することができる。
【００３５】
なお、スイッチング処理部２１１は、いずれかの出力キュー２１２に輻輳が発生している間、データパケットの宛先に対応する外部ポートとして、書き換えられた外部ポートを特定した場合、データパケットがElephantフローに含まれるデータパケットであるか否かを判定してもよい。そして、Elephantフローに含まれるデータパケットであれば、スイッチング処理部２１１は、特定した外部ポートを、書き換えられる前の外部ポートに変更し、変更した外部ポートに対応する出力キュー２１２に、データパケットを格納するようにしてもよい。これにより、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとが、同じ宛先へ送信された場合でも、Elephantフローに含まれるデータパケットの送信経路を維持しつつ、Miceフローに含まれるデータパケットの送信経路を変更することができる。
【００３６】
なお、他の例として、いずれかの出力キュー２１２に輻輳が発生している場合、変更部２０３は、ＦＤＢ２１０内のデータの変更を行わず、スイッチング処理部２１１は、ＦＤＢ２１０を参照して、データパケットの宛先に対応する外部ポートを特定してもよい。そして、スイッチング処理部２１１は、データパケットがMiceフローに含まれるデータパケットである場合に、特定した外部ポートとは異なる外部ポートに対応する出力キュー２１２に、データパケットを格納するようにしてもよい。
【００３７】
［スイッチ装置３０のブロック図］
図５は、実施例１における下位のスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、算出部３００、設定部３０１、保持部３０２、変更部３０３、判定部３０４、および通信部３０７を有する。また、スイッチ装置３０は、複数の受信ポート３０８−１〜ｎ、複数の受信バッファ３０９−１〜ｎ、ＦＤＢ３１０、スイッチング処理部３１１、複数の出力キュー３１２−１〜ｎ、および複数の送信ポート３１３−１〜ｎを有する。
【００３８】
なお、以下では、複数の受信ポート３０８−１〜ｎのそれぞれを区別することなく総称する場合に受信ポート３０８と記載し、複数の受信バッファ３０９−１〜ｎのそれぞれを区別することなく総称する場合に受信バッファ３０９と記載する。また、複数の出力キュー３１２−１〜ｎのそれぞれを区別することなく総称する場合に出力キュー３１２と記載し、複数の送信ポート３１３−１〜ｎのそれぞれを区別することなく総称する場合に送信ポート３１３と記載する。
【００３９】
保持部３０２は、例えば図６に示すフローテーブル３０２０を保持する。図６は、フローテーブル３０２０の一例を示す図である。フローテーブル３０２０には、例えば図６に示すように、それぞれのフローを識別するFlow＿ID３０２１に対応付けて、マッチフィールド３０２２、Flow＿Count３０２３、およびE-flag３０２４が格納される。
【００４０】
マッチフィールド３０２２には、フローに含まれるデータパケットの宛先ＭＡＣアドレス（Dst＿MAC）や送信元ＭＡＣアドレス（Src＿MAC）など、フローに含まれる一連のデータパケットを特定する情報が格納される。Flow＿Count３０２３には、フローに含まれるデータパケットのデータ量の累積値を示す情報が格納される。E-flag３０２４には、フローに含まれるデータパケットのデータ量の累積値が、例えば１ＭＢｙｔｅ等である所定の閾値以上の場合、「１」が格納され、フローに含まれるデータパケットのデータ量の累積値が所定の閾値未満の場合、「０」が格納される。
【００４１】
それぞれの受信バッファ３０９は、受信ポート３０８毎に設けられており、対応する受信ポート３０８を介してデータパケットを受信する。それぞれの受信バッファ３０９は、受信部の一例である。それぞれの出力キュー３１２は、送信ポート３１３毎に設けられており、スイッチング処理部３１１から受け取ったデータパケットを、受け取った順に、対応する出力キュー３１２を介して送信する。１つの受信ポート３０８と、１つの送信ポート３１３とは、１つの外部ポートに接続される。
【００４２】
スイッチング処理部３１１は、受信バッファ３０９がデータパケットを受信した場合、データパケットの送信元のＭＡＣアドレスと、受信バッファ３０９に対応する外部ポートの情報とを対応付けてＦＤＢ３１０に登録する。そして、データパケットの宛先アドレスがＦＤＢ３１０内に登録されていれば、スイッチング処理部３１１は、宛先アドレスに対応付けられた外部ポートに対応する出力キュー３１２にデータパケットを格納する。スイッチング処理部３１１は、格納部の一例である。
【００４３】
算出部３００は、それぞれの受信バッファ３０９がデータパケットを受信した場合、保持部３０２内のマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部３００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル３０２０内で特定する。
【００４４】
そして、算出部３００は、特定したFlow＿Countの値に、受信バッファ３０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部３０１は、フローテーブル３０２０内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【００４５】
判定部３０４は、それぞれの受信バッファ３０９が受信したデータパケットを監視し、受信バッファ３０９が受信したデータパケットが通知パケットであるか否かを判定する。受信バッファ３０９が受信したデータパケットが通知パケットである場合、判定部３０４は、通知パケットを受信した受信バッファ３０９に対応する外部ポートを特定する。そして、判定部３０４は、特定した外部ポートの情報を変更部３０３へ送る。
【００４６】
通信部３０７は、コントローラ４０から外部ポートの情報を含む輻輳解消通知を受信した場合、受信した輻輳解消通知に含まれる外部ポートの情報を変更部３０３へ送る。
【００４７】
変更部３０３は、判定部３０４から外部ポートの情報を受け取った場合、受け取った外部ポートの情報を輻輳ポートとして保持する。変更部３０３は、既に輻輳ポートを保持する場合、判定部３０４から受け取った外部ポートを輻輳ポートに追加する。そして、変更部３０３は、受信バッファ３０９がデータパケットを受信する都度、ＦＤＢ３１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する。そして、変更部３０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する。
【００４８】
特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合、変更部３０３は、フローテーブル３０２０を参照し、データパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、変更部３０３は、特定したFlow＿IDに対応付けられたE-flagが「０」であるか否か、即ち、特定したFlow＿IDに対応するフローがMiceフローであるか否かを判定する。E-flagが「０」である場合、変更部３０３は、他のスイッチ装置２０または３０に接続された外部ポートの中で、輻輳ポート以外の外部ポートを１つ選択する。
【００４９】
変更部３０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、例えば、送信帯域の空きが最も多い外部ポートを１つ選択する。また、他の例として、変更部３０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、最後にデータパケットが送信されてからの経過時間が最も長い外部ポートや、使用頻度が最も低い外部ポート等を選択してもよい。あるいは、変更部３０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、ラウンドロビンにより順番に外部ポートを選択したり、乱数を用いてランダムに外部ポートを選択してもよい。
【００５０】
そして、変更部３０３は、ＦＤＢ３１０内において、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートの情報を、選択した外部ポートの情報に書き換えることにより、スイッチング処理部３１１に、データパケットの格納先を変更させる。スイッチング処理部３１１は、書き換えられた外部ポートに対応する出力キュー３１２にデータパケットを格納する。スイッチング処理部３１１が、書き換えられた外部ポートに対応する出力キュー３１２にデータパケットを格納した場合、変更部３０３は、ＦＤＢ３１０内において、書き換えた外部ポートの情報を元に戻す。
【００５１】
また、変更部３０３は、通信部３０７から外部ポートの情報を受け取った場合、受け取った外部ポートの情報を、輻輳ポートから除外する。これにより、スイッチング処理部３１１は、Miceフローに含まれるデータパケットを、通知パケットの送信元のスイッチ装置２０へ送信することができるようになる。
【００５２】
［コントローラ４０のブロック図］
図７は、実施例１におけるコントローラ４０の一例を示すブロック図である。コントローラ４０は、登録部４１、確認部４２、通知部４３、および保持部４４を有する。
【００５３】
保持部４４は、例えば図８に示すような輻輳テーブル４４０を保持する。図８は、輻輳テーブル４４０の一例を示す図である。輻輳テーブル４４０には、Index４４１に対応付けて、輻輳の発生時刻４４２、輻輳が発生したスイッチ装置２０の識別情報であるSW＿ID４４３、輻輳が発生した出力キュー４４４、および通知パケットを送信した外部ポート４４５が格納される。
【００５４】
登録部４１は、スイッチ装置２０から輻輳発生通知を受信した場合、受信した輻輳発生通知に含まれるスイッチ装置２０の識別情報、出力キュー、および外部ポートが輻輳テーブル４４０に登録されたか否かを判定する。受信した輻輳発生通知に含まれるスイッチ装置２０の識別情報、出力キュー、および外部ポートが輻輳テーブル４４０に登録されていない場合、登録部４１は、受信した輻輳発生通知に対して、Indexを新たに割り当てる。
【００５５】
そして、登録部４１は、輻輳発生通知を受信した時刻を輻輳の発生時刻として、新たに割り当てたIndex４４１に対応付けて輻輳テーブル４４０に登録する。そして、登録部４１は、新たに割り当てたIndex４４１にさらに対応付けて、SW＿ID、出力キュー、および外部ポートを、輻輳テーブル４４０に登録する。なお、受信した輻輳発生通知に含まれるスイッチ装置２０の識別情報、出力キュー、および外部ポートが輻輳テーブル４４０に既に登録されていた場合、登録部４１は、受信した輻輳発生通知に含まれた情報を輻輳テーブル４４０に登録しない。
【００５６】
確認部４２は、輻輳テーブル４４０内のIndex毎に、例えば５分等である所定時間を計測する。そして、確認部４２は、所定時間が経過したIndexと、Indexに対応付けられた出力キューの情報とを含む輻輳確認要求を生成する。そして、確認部４２は、生成した輻輳確認要求を、所定時間が経過したIndexに対応付けられたSW＿IDに対応するスイッチ装置２０へ送信する。
【００５７】
そして、スイッチ装置２０から輻輳確認応答を受信した場合、受信した輻輳確認応答に輻輳の発生中を示す情報が含まれていれば、確認部４２は、受信した輻輳確認応答に含まれるIndexについて、例えば５分等である所定時間の計測を再開する。一方、スイッチ装置２０から受信した輻輳確認応答に、輻輳の解消を示す情報が含まれる場合、確認部４２は、受信した輻輳確認応答に含まれたIndexを通知部４３へ送る。
【００５８】
通知部４３は、確認部４２からIndexを受け取った場合、保持部４４内の輻輳テーブル４４０を参照して、受け取ったIndexに対応付けられたSW＿IDおよび外部ポートの情報を抽出する。そして、通知部４３は、抽出した外部ポートに接続されたスイッチ装置３０のアドレスおよび外部ポートの情報を特定する。
【００５９】
コントローラ４０は、それぞれのスイッチ装置２０およびスイッチ装置３０の識別情報やアドレス情報、それぞれのスイッチ装置２０、スイッチ装置３０、および通信装置１１等の接続関係を示す情報処理システム１のトポロジーの情報等を保持する。通知部４３は、例えばこれらの情報を参照して、抽出した外部ポートに接続されたスイッチ装置３０のアドレスおよび外部ポートの情報を特定する。
【００６０】
そして、通知部４３は、特定した外部ポートの情報を含む輻輳解消通知を、特定したアドレスのスイッチ装置３０へ送信する。そして、通知部４３は、確認部４２から受け取ったIndexに対応付けられた、発生時刻、SW＿ID、出力キュー、および外部ポートの情報を、Indexと共に輻輳テーブル４４０から削除する。
【００６１】
［スイッチ装置２０の動作］
図９は、実施例１における上位のスイッチ装置２０の動作の一例を示すフローチャートである。スイッチ装置２０は、データパケットを受信した場合、本フローチャートに示す動作を開始する。
【００６２】
まず、算出部２００は、保持部２０２内のマッチフィールドを参照し、受信バッファ２０９が受信したデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する（Ｓ１００）。スイッチング処理部２１１は、ＦＤＢ２１０を参照して、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートに対応する出力キュー２１２にデータパケットを格納する（Ｓ１０１）。
【００６３】
次に、算出部２００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル２０２０内で特定する。そして、算出部２００は、特定したFlow＿Countの値に、受信バッファ２０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する（Ｓ１０２）。そして、設定部２０１は、加算後のFlow＿Countの値が、所定の閾値以上か否かを判定する（Ｓ１０３）。
【００６４】
Flow＿Countの値が所定の閾値未満である場合（Ｓ１０３：Ｎｏ）、判定部２０４は、ステップＳ１０５に示す処理を実行する。一方、Flow＿Countの値が所定の閾値以上である場合（Ｓ１０３：Ｙｅｓ）、設定部２０１は、Flow＿Countに対応付けられたE-flagの値に「１」を設定する（Ｓ１０４）。
【００６５】
次に、判定部２０４は、それぞれの出力キュー２１２内のデータ量を参照して、いずれかの出力キュー２１２内のデータ量が所定の閾値以上か否かを判定する（Ｓ１０５）。いずれの出力キュー２１２内のデータ量も所定の閾値未満である場合（Ｓ１０５：Ｎｏ）、スイッチ装置２０は、本フローチャートに示した動作を終了する。
【００６６】
一方、いずれかの出力キュー２１２内のデータ量が所定の閾値以上である場合（Ｓ１０５：Ｙｅｓ）、判定部２０４は、データ量が所定の閾値以上となった出力キュー２１２の情報を生成部２０５および通信部２０７へ送る。また、判定部２０４は、データ量が所定の閾値以上となった出力キュー２１２の情報を、輻輳の発生を示す情報と共に変更部２０３へ送る。
【００６７】
次に、生成部２０５は、輻輳の発生を通知する通知パケットを生成し（Ｓ１０６）、生成した通知パケットを、データ量が所定の閾値以上となった出力キュー２１２の情報と共に、送信部２０６へ送る。
【００６８】
次に、送信部２０６は、データ量が所定の閾値以上となった出力キュー２１２に格納されたデータパケットのヘッダを参照し、それぞれのデータパケットの送信元のＭＡＣアドレスを特定する。そして、送信部２０６は、ＦＤＢ２１０を参照して、特定したＭＡＣアドレスに対応付けられた外部ポートを特定する（Ｓ１０７）。そして、送信部２０６は、生成部２０５から受け取った通知パケットを、特定した外部ポートに対応する出力キュー２１２に格納する（Ｓ１０８）。これにより、通知パケットは、出力キュー２１２に対応する外部ポートから送信される。そして、送信部２０６は、特定した外部ポートの情報を通信部２０７へ送る。
【００６９】
次に、通信部２０７は、判定部２０４から受け取った出力キュー２１２の情報と、送信部２０６から受け取った外部ポートの情報とを含む輻輳発生通知を生成する。そして、通信部２０７は、生成した輻輳発生通知を、スイッチ装置２０の識別情報と共にコントローラ４０へ送信し（Ｓ１０９）、スイッチ装置２０は本フローチャートに示した動作を終了する。
【００７０】
図１０は、実施例１における上位のスイッチ装置２０の動作の一例を示すフローチャートである。
【００７１】
まず、変更部２０３は、輻輳の発生を示す情報と共に、出力キューの情報を判定部２０４から受け取ったか否かを判定する（Ｓ１２０）。輻輳の発生を示す情報と共に、出力キューの情報を判定部２０４から受け取った場合（Ｓ１２０：Ｙｅｓ）、変更部２０３は、受け取った出力キュー２１２に対応する外部ポートを特定する（Ｓ１２１）。そして、変更部２０３は、特定した外部ポートを輻輳ポートとして保持し（Ｓ１２２）、再びステップＳ１２０に示した処理を実行する。
【００７２】
輻輳の発生を示す情報と共に、出力キューの情報を判定部２０４から受け取っていない場合（Ｓ１２０：Ｎｏ）、変更部２０３は、輻輳の解消を示す情報と共に、出力キューの情報を判定部２０４から受け取ったか否かを判定する（Ｓ１２３）。輻輳の解消を示す情報と共に、出力キューの情報を判定部２０４から受け取った場合（Ｓ１２３：Ｙｅｓ）、変更部２０３は、受け取った出力キュー２１２に対応する外部ポートを特定する（Ｓ１２４）。そして、変更部２０３は、特定した外部ポートを輻輳ポートから除外し（Ｓ１２５）、再びステップＳ１２０に示した処理を実行する。
【００７３】
輻輳の解消を示す情報と共に、出力キューの情報を判定部２０４から受け取っていない場合（Ｓ１２３：Ｎｏ）、変更部２０３は、受信バッファ２０９がデータパケットを受信したか否かを判定する（Ｓ１２６）。いずれの受信バッファ２０９もデータパケットを受信していない場合（Ｓ１２６：Ｎｏ）、変更部２０３は、再びステップＳ１２０に示した処理を実行する。
【００７４】
一方、受信バッファ２０９がデータパケットを受信した場合（Ｓ１２６：Ｙｅｓ）、変更部２０３は、ＦＤＢ２１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを出力する外部ポートを特定する（Ｓ１２７）。そして、変更部２０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する（Ｓ１２８）。
【００７５】
特定した外部ポートが、保持した輻輳ポートのいずれとも異なる場合（Ｓ１２８：Ｎｏ）、スイッチング処理部２１１は、ＦＤＢ２１０に基づいて、出力キュー２１２を特定する。そして、スイッチング処理部２１１は、特定した出力キュー２１２にデータパケットを格納し（Ｓ１３４）、変更部２０３は、再びステップＳ１２０に示した処理を実行する。
【００７６】
一方、特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合（Ｓ１２８：Ｙｅｓ）、変更部２０３は、フローテーブル２０２０を参照し、データパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、変更部２０３は、特定したFlow＿IDに対応付けられたE-flagが「０」であるか否か、即ち、Miceフローに含まれるデータパケットであるか否かを判定する（Ｓ１２９）。Miceフローに含まれるデータパケットではない場合（Ｓ１２９：Ｎｏ）、スイッチング処理部２１１は、ステップＳ１３４に示した処理を実行する。
【００７７】
一方、Miceフローに含まれるデータパケットである場合（Ｓ１２９：Ｙｅｓ）、変更部２０３は、他のスイッチ装置２０または３０に接続された、輻輳ポート以外の外部ポートの中で、データパケットを出力する外部ポートを１つ選択する（Ｓ１３０）。そして、変更部２０３は、ＦＤＢ２１０内において、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートの情報を、選択した外部ポートの情報に書き換える（Ｓ１３１）。
【００７８】
次に、スイッチング処理部２１１は、書き換えられた外部ポートに接続された送信ポート２１３に対応する出力キュー２１２にデータパケットを格納する（Ｓ１３２）。そして、変更部２０３は、ＦＤＢ２１０内において、書き換えた外部ポートの情報を元に戻し（Ｓ１３３）、再びステップＳ１２０に示した処理を実行する。
【００７９】
［スイッチ装置３０の動作］
図１１は、実施例１における下位のスイッチ装置３０の動作の一例を示すフローチャートである。
【００８０】
まず、判定部３０４は、受信バッファ３０９が通知パケットを受信したか否かを判定する（Ｓ２００）。受信バッファ３０９が通知パケットを受信した場合（Ｓ２００：Ｙｅｓ）、判定部３０４は、通知パケットを受信した受信バッファ３０９に対応する受信ポート３０８が接続された外部ポートを特定する。そして、判定部３０４は、特定した外部ポートの情報を変更部３０３へ送る。変更部３０３は、判定部３０４から受け取った外部ポートの情報を輻輳ポートの情報として保持し（Ｓ２０１）、判定部３０４は、再びステップＳ２００に示した処理を実行する。
【００８１】
受信バッファ３０９が通知パケットを受信していない場合（Ｓ２００：Ｎｏ）、通信部３０７は、コントローラ４０から輻輳解消通知を受信したか否かを判定する（Ｓ２０３）。輻輳解消通知を受信した場合（Ｓ２０３：Ｙｅｓ）、通信部３０７は、受信した輻輳解消通知に含まれる外部ポートの情報を変更部３０３へ送る。変更部３０３は、通信部３０７から受け取った外部ポートの情報を輻輳ポートの情報から除外し（Ｓ２０４）、判定部３０４は、再びステップＳ２００に示した処理を実行する。
【００８２】
輻輳解消通知を受信していない場合（Ｓ２０３：Ｎｏ）、算出部３００は、受信バッファ３０９がデータパケットを受信したか否かを判定する（Ｓ２０５）。受信バッファ３０９がデータパケットを受信していない場合（Ｓ２０５：Ｎｏ）、判定部３０４は、再びステップＳ２００に示した処理を実行する。
【００８３】
受信バッファ３０９がデータパケットを受信した場合（Ｓ２０５：Ｙｅｓ）、算出部３００は、保持部３０２内のマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する（Ｓ２０６）。そして、算出部３００は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル３０２０内で特定する。
【００８４】
次に、算出部３００は、特定したFlow＿Countの値に、受信バッファ３０９が受信したデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する（Ｓ２０７）。そして、設定部３０１は、加算後のFlow＿Countの値が、所定の閾値以上か否かを判定する（Ｓ２０８）。
【００８５】
Flow＿Countの値が所定の閾値未満である場合（Ｓ２０８：Ｎｏ）、変更部３０３は、ステップＳ２１０に示す処理を実行する。一方、Flow＿Countの値が所定の閾値以上である場合（Ｓ２０８：Ｙｅｓ）、設定部３０１は、Flow＿Countに対応付けられたE-flagの値に「１」を設定する（Ｓ２０９）。
【００８６】
次に、変更部３０３は、ＦＤＢ３１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する（Ｓ２１０）。そして、変更部３０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する（Ｓ２１１）。
【００８７】
特定した外部ポートが、保持した輻輳ポートのいずれとも異なる場合（Ｓ２１１：Ｎｏ）、スイッチング処理部３１１は、ＦＤＢ３１０に基づいて、出力キュー３１２を特定する。そして、スイッチング処理部３１１は、特定した出力キュー３１２にデータパケットを格納し（Ｓ２１７）、判定部３０４は、再びステップＳ２００に示した処理を実行する。
【００８８】
一方、特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合（Ｓ２１１：Ｙｅｓ）、変更部３０３は、フローテーブル３０２０を参照し、データパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、変更部３０３は、特定したFlow＿IDに対応付けられたE-flagが「０」であるか否か、即ち、データパケットがMiceフローに含まれるか否かを判定する（Ｓ２１２）。データパケットがMiceフローに含まれない場合（Ｓ２１２：Ｎｏ）、スイッチング処理部３１１は、ステップＳ２１７に示した処理を実行する。
【００８９】
一方、データパケットがMiceフローに含まれる場合（Ｓ２１２：Ｙｅｓ）、変更部３０３は、他のスイッチ装置２０に接続された、輻輳ポート以外の外部ポートの中で、データパケットを出力する外部ポートを１つ選択する（Ｓ２１３）。そして、変更部３０３は、ＦＤＢ３１０内において、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートの情報を、選択した外部ポートの情報に書き換える（Ｓ２１４）。
【００９０】
次に、スイッチング処理部３１１は、書き換えられた外部ポートに接続された送信ポート３１３に対応する出力キュー３１２にデータパケットを格納する（Ｓ２１５）。そして、変更部３０３は、ＦＤＢ３１０内において、書き換えた外部ポートの情報を元に戻し（Ｓ２１６）、判定部３０４は、再びステップＳ２００に示した処理を実行する。
【００９１】
［コントローラ４０の動作］
図１２は、実施例１におけるコントローラ４０の動作の一例を示すフローチャートである。
【００９２】
まず、登録部４１は、スイッチ装置２０から輻輳発生通知を受信したか否かを判定する（Ｓ３００）。輻輳発生通知を受信した場合（Ｓ３００：Ｙｅｓ）、登録部４１は、受信した輻輳発生通知に含まれるスイッチ装置２０の識別情報、出力キュー、および外部ポートを、Indexに対応付けて、輻輳発生通知を受信した時刻と共に輻輳テーブル４４０に登録する。そして、確認部４２は、輻輳テーブル４４０内のIndex毎に、例えば５分等である所定時間の計測を開始し（Ｓ３０２）、登録部４１は、再びステップＳ３００に示した処理を実行する。
【００９３】
輻輳発生通知を受信していない場合（Ｓ３００：Ｎｏ）、確認部４２は、Index毎に所定時間が経過したか否かを判定する（Ｓ３０３）。所定時間が経過したIndexがない場合（Ｓ３０３：Ｎｏ）、登録部４１は、再びステップＳ３００に示した処理を実行する。
【００９４】
所定時間が経過したIndexがある場合（Ｓ３０３：Ｙｅｓ）、確認部４２は、所定時間が経過したIndexと、Indexに対応付けられた出力キューの情報とを含む輻輳確認要求を生成する。そして、確認部４２は、生成した輻輳確認要求を、所定時間が経過したIndexに対応付けられたSW＿IDに対応するスイッチ装置２０へ送信する（Ｓ３０４）。
【００９５】
次に、確認部４２は、スイッチ装置２０から輻輳確認応答を受信し、受信した輻輳確認応答に輻輳の解消を示す情報が含まれたか否かを判定することにより、輻輳が解消したか否かを判定する（Ｓ３０５）。輻輳が解消していない場合（Ｓ３０５：Ｎｏ）、確認部４２は、所定時間が経過したIndexについて、再び所定時間の計測を開始する（Ｓ３０２）。
【００９６】
一方、輻輳が解消した場合（Ｓ３０５：Ｙｅｓ）、確認部４２は、受信した輻輳確認応答に含まれるIndexを通知部４３へ送る。通知部４３は、保持部４４内の輻輳テーブル４４０を参照して、確認部４２から受け取ったIndexに対応付けられたSW＿IDおよび外部ポートの情報を抽出する。そして、通知部４３は、抽出した外部ポートに接続されたスイッチ装置３０のアドレスおよび外部ポートの情報を特定する。
【００９７】
次に、通知部４３は、特定した外部ポートの情報を含む輻輳解消通知を生成する（Ｓ３０６）。そして、通知部４３は、生成した輻輳解消通知を、特定したアドレスのスイッチ装置３０へ送信する（Ｓ３０７）。そして、通知部４３は、確認部４２から受け取ったIndexに対応付けられた、発生時刻、SW＿ID、出力キュー、および外部ポートの情報を、Indexと共に輻輳テーブル４４０から削除し（Ｓ３０８）、登録部４１は、再びステップＳ３００に示した処理を実行する。
【００９８】
［データパケットの流れ］
図１３は、実施例１におけるデータパケットの流れの一例を示す図である。図１３では、図１に示した情報処理システム１において、データパケットが、通信装置１１−１から通信装置１１−４へ送信される場合のデータパケットの流れが例示されている。図１３において、実線の矢印はElephantフローに含まれるデータパケットの流れを示しており、破線の矢印はMiceフローに含まれるデータパケットの流れを示している。
【００９９】
まず、通信装置１１−１は、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを、スイッチ装置３０−１へ送信する（Ｓ４００）。スイッチ装置３０−１では、受信バッファ３０９がそれぞれのデータパケットを受信し、算出部３００がフロー毎にFlow＿Countを累積し、Flow＿Countが所定の閾値を超えれば、設定部３０１がE-flagに１を設定する。また、スイッチ装置３０−１では、スイッチング処理部３１１が、ＦＤＢ３１０を参照して、受信バッファ３０９が受信したそれぞれのデータパケットを、宛先に応じた外部ポートに対応する出力キュー３１２に格納する。出力キュー３１２に格納されたデータパケットは、対応する外部ポートに接続されたスイッチ装置２０−２へ送信される（Ｓ４０１）。
【０１００】
スイッチ装置２０−２でも同様に、受信バッファ２０９がそれぞれのデータパケットを受信し、算出部２００がフロー毎にFlow＿Countを累積し、Flow＿Countが所定の閾値を超えれば、設定部２０１がE-flagに１を設定する。また、スイッチ装置２０−２では、スイッチング処理部２１１が、ＦＤＢ２１０を参照して、受信バッファ２０９が受信したそれぞれのデータパケットを、宛先に応じた外部ポートに対応する出力キュー２１２に格納する。出力キュー２１２に格納されたデータパケットは、対応する外部ポートに接続されたスイッチ装置３０−２へ送信される（Ｓ４０２）。
【０１０１】
スイッチ装置３０−２でも、スイッチ装置２０−２から送信されたそれぞれのデータパケットについて、Ｓ４０１と同様の処理が行われ、それぞれのデータパケットが通信装置１１−４へ送信される（Ｓ４０３）。なお、通信装置１１−４からは、データパケットを受信した場合、ＡＣＫ（ACKnowledgement）を返すが、図１３では省略されている。
【０１０２】
同様に、通信装置１１−１からそれぞれのデータパケットがスイッチ装置３０−１へ送信され（Ｓ４０４）、スイッチ装置３０−１がそれぞれのデータパケットをスイッチ装置２０−２へ転送する（Ｓ４０５）。ここで、スイッチ装置２０−２において、スイッチ装置３０−２に接続された外部ポートに対応する出力キュー２１２において輻輳が発生した場合（Ｓ４０６）、スイッチ装置２０−２は、通知パケットをスイッチ装置３０−１へ送信する。スイッチ装置３０−１は、通知パケットを受信した外部ポートを輻輳ポートとして保持する。
【０１０３】
そして、通信装置１１−１からそれぞれのデータパケットがスイッチ装置３０−１へ送信された場合（Ｓ４０９）、スイッチ装置３０−１は、Miceフローに含まれるデータパケットについては、輻輳ポート以外の外部ポートに対応する出力キュー２１２に格納する。これにより、Miceフローに含まれるデータパケットは、スイッチ装置２０−２とは異なる、例えばスイッチ装置２０−３に接続された外部ポートからスイッチ装置２０−３へ送信される（Ｓ４１１）。
【０１０４】
そして、Miceフローに含まれるデータパケットは、スイッチ装置２０−３からスイッチ装置３０−２を介して通信装置１１−４へ送信される（Ｓ４１３、Ｓ４１４）。これにより、スイッチ装置２０−２において、スイッチ装置３０−２に接続された外部ポートに対応する出力キュー２１２に格納されるデータ量を抑制することができるため、スイッチ装置２０−２において発生した輻輳を迅速に解消することができる。
【０１０５】
また、スイッチ装置３０−１は、Elephantフローに含まれるデータパケットについては、経路の変更は行わず、スイッチ装置２０−２に接続された外部ポートに対応する出力キュー２１２に格納する。これにより、Elephantフローに含まれるデータパケットは、スイッチ装置２０−２に接続されたスイッチ装置３０−１の外部ポートからスイッチ装置２０−２へ送信される（Ｓ４１０）。そして、データパケットは、スイッチ装置２０−２からスイッチ装置３０−２を介して通信装置１１−４へ送信される（Ｓ４１２、Ｓ４１４）。
【０１０６】
ここで、Elephantフローのデータパケットについては、送信経路が変更されないため、経路の変更に伴う遅延等が発生せず、Elephantフローのスループットが維持される。また、Miceフローのデータパケットの経路が変更されるため、スイッチ装置２０−２において、スイッチ装置３０−２に接続された外部ポートに対応する出力キュー２１２に格納されるデータ量は、Miceフローのデータパケットの分、少なくなる。そのため、Elephantフローのデータパケットの経路を変更しなくても、スイッチ装置２０−２において発生した輻輳を迅速に解消することができる。なお、Miceフローは、１つ１つのデータパケットのデータ量が少ないものの、発生数はElephantフローに含まれるデータパケットよりも多い。そのため、Miceフローに含まれるデータパケットを、輻輳が発生した出力キュー２１２に流入しないように制御することで、出力キュー２１２内のデータ量の大幅な削減が期待できる。
【０１０７】
また、輻輳が発生した場合、各スイッチ装置２０が、ＳＤＮコントローラに輻輳の発生を通知し、輻輳が発生しない経路の設定情報をＳＤＮコントローラから取得することも可能である。しかし、その場合、輻輳の発生から、輻輳が発生しない経路の情報が各スイッチ装置２０に設定されるまでには数秒程度かかる。それぞれのデータパケットのデータ量が例えば１ＭＢｙｔｅ未満にように少ないMiceフローの場合、１Ｇｂｐｓの伝送速度の回線では、数秒間に数百個のデータパケットが失われる。例えば、１Ｇｂｐｓの伝送速度の回線において、輻輳が５秒間発生した場合、それぞれのデータパケットのサイズを５００ｋｂｙｔｅと仮定すると、輻輳が解消するまでの間に２５０個のデータパケットが失われることになる。データパケットが失われると、再送が行われ、スループットが低下する。
【０１０８】
本実施例におけるスイッチ装置２０は、ＳＤＮコントローラに問い合わせることなく、輻輳の発生を通知する通知パケットをスイッチ装置３０に送信し、スイッチ装置３０がMiceフローに含まれるデータパケットの経路を変更する。これにより、Miceフローに含まれるデータパケットが輻輳により失われる数を低減することができる。また、Miceフローに含まれるデータパケットのスループットの低下を低く抑えることができる。なお、各スイッチ装置３０において、ＳＤＮコントローラに問い合わせることなく、通知パケットの送信やMiceフローの経路変更が実施されるため、ＳＤＮに対応していないスイッチ装置２０や３０に対しても本実施例の技術を適用することができる。
【０１０９】
［効果］
上述したように、スイッチ装置２０は、いずれかの出力キュー２１２内のデータ量が所定の閾値以上なった場合、輻輳の発生を通知する通知パケットをスイッチ装置３０に通知する。そして、スイッチ装置３０は、スイッチ装置２０へ送信するデータパケットの中で、Miceフローに含まれるデータパケットを、輻輳が発生したスイッチ装置２０とは異なるスイッチ装置２０へ送信する。これにより、ElephantフローおよびMiceフローのそれぞれのスループットの低下を抑制することができる。
【０１１０】
また、本実施例におけるスイッチ装置２０は、出力キュー２１２のデータ量が所定の閾値以上なった場合、スイッチ装置３０から受信したデータパケットのうち、データ量が所定の閾値以上なった出力キュー２１２に格納するデータパケットを特定する。そして、スイッチ装置２０は、特定したデータパケットの中で、Miceフローに含まれるデータパケットを特定し、特定したデータパケットの格納先を、データ量が所定の閾値以上なった出力キュー２１２とは異なる出力キュー２１２に変更する。これにより、通知パケットを受信していないスイッチ装置３０から送信されたMiceフローに含まれるパケットについても、データ量が所定の閾値以上なった出力キュー２１２以外の出力キュー２１２に格納するように制御することができる。そのため、輻輳をより迅速に解消することができる。
【０１１１】
また、本実施例におけるスイッチ装置２０は、データ量が所定の閾値以上なった出力キュー２１２に格納されたデータパケットの中で、Miceフローに含まれるデータパケットを特定する。そして、スイッチ装置２０は、特定したデータパケットを送信したスイッチ装置３０へ、輻輳の発生を通知する通知パケットを送信する。これにより、通知パケットの送信によるトラフィックの増加を低く抑えることができる。
【０１１２】
また、本実施例では、それぞれのスイッチ装置２０およびスイッチ装置３０が、フロー毎に、受信したデータパケットのデータ量を累積して、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別する。これにより、発生するフローに応じて、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを迅速に区別することができる。
【０１１３】
なお、上記した実施形態において、送信部２０６は、データ量が所定の閾値以上なった出力キュー２１２に格納されたデータパケットを送信したスイッチ装置３０へ通知パケットを送信するが、本明細書に開示の技術はこれに限られない。他の例として、送信部２０６は、下位のスイッチ装置３０が接続された全ての外部ポートから、通知パケットを送信するようにしてもよい。
【実施例２】
【０１１４】
図１４は、実施例２における情報処理システム１の一例を示す図である。本実施例における情報処理システム１は、例えば図１４に示すように、複数のスイッチ装置５０−１〜６、複数の通信装置１１−１〜６、およびコントローラ４０を有する。なお、以下では、複数のスイッチ装置５０−１〜６のそれぞれを区別することなく総称する場合にスイッチ装置５０と記載する。本実施例における情報処理システム１は、複数のスイッチ装置２０および複数のスイッチ装置３０に代えて、複数のスイッチ装置５０を有する点が実施例１とは異なる。
【０１１５】
［スイッチ装置５０のブロック図］
図１５は、実施例２におけるスイッチ装置５０の一例を示すブロック図である。本実施例におけるスイッチ装置５０は、算出部５００、設定部５０１、保持部５０２、変更部５０３、判定部５０４、およびＥＣＮ書込部５０５を有する。また、スイッチ装置５０は、複数の受信ポート５０８−１〜ｎ、複数の受信バッファ５０９−１〜ｎ、ＦＤＢ５１０、スイッチング処理部５１１、複数の出力キュー５１２−１〜ｎ、および複数の送信ポート５１３−１〜ｎを有する。
【０１１６】
なお、以下では、複数の受信ポート５０８−１〜ｎのそれぞれを区別することなく総称する場合に受信ポート５０８と記載し、複数の受信バッファ５０９−１〜ｎのそれぞれを区別することなく総称する場合に受信バッファ５０９と記載する。また、複数の出力キュー５１２−１〜ｎのそれぞれを区別することなく総称する場合に出力キュー５１２と記載し、複数の送信ポート５１３−１〜ｎのそれぞれを区別することなく総称する場合に送信ポート５１３と記載する。
【０１１７】
算出部５００、設定部５０１、保持部５０２、受信ポート５０８、および受信バッファ５０９の機能は、図５で説明した算出部３００、設定部３０１、保持部３０２、受信ポート３０８、および受信バッファ５０９の機能と同様であるため、詳細な説明を省略する。また、ＦＤＢ５１０、スイッチング処理部５１１、出力キュー５１２、および送信ポート５１３の機能は、図５で説明したＦＤＢ３１０、スイッチング処理部３１１、出力キュー３１２、および送信ポート３１３の機能と同様であるため、詳細な説明を省略する。
【０１１８】
ＥＣＮ書込部５０５は、それぞれの出力キュー５１２内のデータ量を監視する。そして、データ量が所定の閾値以上となった場合、ＥＣＮ書込部５０５は、出力キュー５１２内のデータパケットのＩＰヘッダ内にあるＥＣＮ（Explicit  Congestion  Notification）フラグに「１１」を書き込む。所定の閾値とは、送信ポート５１３の伝送速度が例えば１０Ｇｂｐｓの場合、例えば６５パケットである。
【０１１９】
図１６は、ＥＣＮフラグのビット位置を説明する図である。ＥＣＮフラグは、ＩＰパケット６０のヘッダのＤＳ（Differentiated  Services）フィールドの上位２ビットに割り当てられる。ＥＣＮフラグにおいて、「００」は輻輳検出が不可能であることを示し、「１０」または「０１」は輻輳検出が可能な状態であり、かつ、非輻輳状態を示し、「１１」は輻輳検出が可能な状態であり、かつ、輻輳状態を示す。
【０１２０】
判定部５０４は、それぞれの受信バッファ５０９が受信したデータパケットを監視し、受信バッファ５０９が受信したデータパケットのＴＣＰヘッダ内のＥＣＥ（ECN-Echo）フラグが「１」であるか否かを判定する。図１７は、ＥＣＥフラグのビット位置を説明する図である。ＥＣＥフラグは、ＴＣＰパケット６１のヘッダ内のビット（例えば６ビットのReservedの最上位ビット）に割り当てられる。ＥＣＥフラグは、「０」が非輻輳状態を示し、「１」が輻輳状態を示す。また、Reservedの最上位から２番目のビットには、ＣＷＲ（Congestion  Window  Reduced）フラグが割り当てられる。ＣＷＲフラグは、「０」が輻輳ウィンドウの非縮小状態を示し、「１」が輻輳ウィンドウの縮小状態を示す。
【０１２１】
受信バッファ５０９が受信したデータパケットのＥＣＥフラグが「１」である場合、判定部５０４は、ＥＣＥフラグが「１」のデータパケットを受信した受信バッファ５０９に対応する外部ポートを特定する。そして、判定部５０４は、特定した外部ポートの情報を変更部５０３へ送る。ＥＣＥフラグが「１」のデータパケットは、輻輳の発生を通知する通知パケットの一例である。
【０１２２】
変更部５０３は、判定部５０４から外部ポートの情報を受け取った場合、受け取った外部ポートの情報を輻輳ポートとして保持する。変更部５０３は、既に輻輳ポートを保持する場合、判定部５０４から受け取った外部ポートを輻輳ポートに追加する。そして、変更部５０３は、受信バッファ５０９がデータパケットを受信する都度、ＦＤＢ５１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する。そして、変更部５０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する。
【０１２３】
特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合、変更部５０３は、保持部５０２内のフローテーブルを参照し、データパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、変更部５０３は、特定したFlow＿IDに対応付けられたE-flagが「０」であるか否か、即ち、特定したFlow＿IDに対応するフローがMiceフローであるか否かを判定する。E-flagが「０」である場合、変更部５０３は、他のスイッチ装置２０または３０に接続された外部ポートの中で、輻輳ポート以外の外部ポートを１つ選択する。
【０１２４】
そして、変更部５０３は、ＦＤＢ５１０内において、データパケットの宛先のＭＡＣアドレスに対応付けられた外部ポートの情報を、選択した外部ポートの情報に書き換えることにより、スイッチング処理部５１１に、データパケットの格納先を変更させる。スイッチング処理部５１１は、書き換えられた外部ポートに接続された送信ポート５１３に対応する出力キュー５１２にデータパケットを格納する。スイッチング処理部５１１が、書き換えられた外部ポートに接続された送信ポート５１３に対応する出力キュー５１２にデータパケットを格納した場合、変更部５０３は、ＦＤＢ５１０内において、書き換えた外部ポートの情報を元に戻す。
【０１２５】
［通信装置１１のブロック図］
図１８は、実施例２における通信装置１１の一例を示すブロック図である。通信装置１１は、アプリケーション処理部１１０、複数のTCP  Socket  Buffer１１１−１〜ｍ、およびＮＩＣ（Network  Interface  Card）１１２を有する。複数のTCP  Socket  Buffer１１１−１〜ｍのそれぞれは、例えばソケット毎に設けられる。アプリケーション処理部１１０は、送信したデータパケットの応答として、ＥＣＥフラグが「１」のＡＣＫパケットを受信した場合、TCP  Socket  Buffer１１１において、輻輳ウィンドウサイズである現在のＴＣＰウィンドウサイズを例えば半分に縮小する。そして、アプリケーション処理部１１０は、ＴＣＰウィンドウサイズを縮小したTCP  Socket  Buffer１１１内のデータパケットのＣＷＲフラグに「１」を書き込む。
【０１２６】
［データパケットの流れ］
図１９は、実施例２におけるデータパケットの流れの一例を示す図である。図１９では、図１４に示した情報処理システム１において、データパケットが、通信装置１１−１から通信装置１１−４へ送信される場合のデータパケットの流れが例示されている。図１９において、実線の矢印はElephantフローに含まれるデータパケットの流れを示しており、破線の矢印はMiceフローに含まれるデータパケットの流れを示している。
【０１２７】
まず、通信装置１１−１は、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを、ＥＣＮフラグに「１０」を設定してスイッチ装置５０−４へ送信する（Ｓ５００）。スイッチ装置５０−４では輻輳は発生していないため、スイッチ装置５０−４は、ＥＣＮフラグを書き換えることなく、それぞれのデータパケットを宛先に応じてスイッチ装置５０−２へ送信する（Ｓ５０１）。スイッチ装置５０−２でも輻輳は発生していないため、スイッチ装置５０−２は、ＥＣＮフラグを書き換えることなく、それぞれのデータパケットを宛先に応じてスイッチ装置５０−５へ送信する（Ｓ５０２）。スイッチ装置５０−５でも輻輳は発生していないため、スイッチ装置５０−５は、ＥＣＮフラグを書き換えることなく、それぞれのデータパケットを宛先に応じて通信装置１１−４へ送信する（Ｓ５０３）。
【０１２８】
なお、スイッチ装置５０−２〜４および５では、それぞれ、受信バッファ５０９がそれぞれのデータパケットを受信し、算出部５００がフロー毎にFlow＿Countを累積し、Flow＿Countが所定の閾値を超えれば、設定部５０１がE-flagに１を設定する。また、スイッチング処理部５１１が、ＦＤＢ５１０を参照して、受信バッファ５０９が受信したそれぞれのデータパケットを、宛先に応じた外部ポートに対応する出力キュー５１２に格納する。出力キュー５１２に格納されたデータパケットは、対応する外部ポートに接続されたスイッチ装置５０へ送信される。
【０１２９】
通信装置１１−４は、受信したデータパケットのＥＣＮフラグが「１０」であるため、ＥＣＥフラグに「０」を設定したＡＣＫパケットをスイッチ装置５０−５へ送信する（Ｓ５０４）。通信装置１１−４から送信されたＡＣＫパケットは、スイッチ装置５０−５、スイッチ装置５０−２、およびスイッチ装置５０−４を介して、通信装置１１−１へ送信される（Ｓ５０５〜Ｓ５０７）。
【０１３０】
そして、通信装置１１−１からさらにそれぞれのデータパケットが送信される（Ｓ５０８）。そして、スイッチ装置５０−２において輻輳が発生した場合（Ｓ５１０）、スイッチ装置５０−２のＥＣＮ書込部５０５は、データ量が所定値以上となった出力キュー内のそれぞれのデータパケットのＥＣＮフラグを「１１」に書き換える。これにより、スイッチ装置５０−２からは、ＥＣＮフラグが「１１」のデータパケットがスイッチ装置５０−５へ送信される（Ｓ５１１）。スイッチ装置５０−５では輻輳は発生していないため、スイッチ装置５０−５は、ＥＣＮフラグを書き換えることなく、それぞれのデータパケットを宛先に応じて通信装置１１−４へ送信する（Ｓ５１２）。
【０１３１】
通信装置１１−４は、受信したデータパケットのＥＣＮフラグが「１１」であるため、ＥＣＥフラグに「１」を設定したＡＣＫパケットをスイッチ装置５０−５へ送信する（Ｓ５１３）。通信装置１１−４から送信されたＡＣＫパケットは、スイッチ装置５０−５、スイッチ装置５０−２、およびスイッチ装置５０−４を介して、通信装置１１−１へ送信される（Ｓ５１４〜Ｓ５１６）。
【０１３２】
このとき、スイッチ装置５０−２〜４および５のそれぞれにおいて、判定部５０４は、ＥＣＥフラグが「１」のデータパケットを受信した受信バッファ５０９に対応する外部ポートを特定し、特定した外部ポートの情報を変更部５０３へ送る。変更部５０３は、判定部５０４から外部ポートの情報を受け取った場合、受け取った外部ポートの情報を輻輳ポートとして保持する。例えばスイッチ装置５０−４の変更部５０３は、スイッチ装置５０−２に接続した外部ポートを輻輳ポートとして保持する。
【０１３３】
通信装置１１−１は、ＥＣＥフラグに「１」が設定されたＡＣＫパケットを受信したため、ＡＣＫパケットに対応するデータパケットが格納されるTCP  Socket  Buffer１１１の現在のＴＣＰウィンドウサイズを、例えば半分に縮小する（Ｓ５１７）。そして、ＣＷＲフラグが「１」のそれぞれのデータパケットをスイッチ装置５０−４へ送信する（Ｓ５１８）。
【０１３４】
スイッチ装置５０−４では、スイッチ装置５０−２に接続された外部ポートが輻輳ポートとして保持されるため、スイッチ装置５０−４は、Miceフローに含まれるデータパケットについては、輻輳ポート以外の外部ポートに対応する出力キュー５１２に格納する。これにより、Miceフローに含まれるデータパケットは、スイッチ装置５０−２とは異なる、例えばスイッチ装置５０−３に接続された外部ポートからスイッチ装置５０−３へ送信される（Ｓ５２０）。
【０１３５】
そして、Miceフローに含まれるデータパケットは、スイッチ装置５０−３からスイッチ装置５０−５を介して通信装置１１−４へ送信される（Ｓ５２２、Ｓ５２３）。これにより、スイッチ装置５０−２において、スイッチ装置５０−５に接続された外部ポートに対応する出力キュー５１２に格納されるデータ量を抑制することができるため、スイッチ装置５０−２において発生した輻輳を迅速に解消することができる。
【０１３６】
また、スイッチ装置５０−４は、Elephantフローに含まれるデータパケットについては、経路の変更は行わず、スイッチ装置５０−２に接続された外部ポートに対応する出力キュー５１２に格納する。これにより、Elephantフローに含まれるデータパケットは、スイッチ装置５０−２に接続された外部ポートからスイッチ装置５０−２へ送信される（Ｓ５１９）。そして、Elephantフローに含まれるデータパケットは、スイッチ装置５０−２からスイッチ装置５０−５を介して通信装置１１−４へ送信される（Ｓ５２１、Ｓ５２３）。
【０１３７】
［効果］
上述したように、本実施例のスイッチ装置５０は、ＥＣＥフラグに「１」が設定されたデータパケットを受信した場合、Miceフローに含まれるデータパケットを、ＥＣＥフラグに「１」が設定されたデータパケットを受信した外部ポートとは異なる外部ポートから送信する。これにより、Elephantフローのスループットの低下を抑制することができる。また、Miceフローを効率的に処理することができる。
【実施例３】
【０１３８】
実施例１および実施例２では、それぞれのスイッチ装置が、フロー毎に、受信したデータパケットのデータ量を累積して、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別する。これに対し、本実施例では、送信元の通信装置１１が、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別して送信する点が、実施例１および実施例２とは異なる。
【０１３９】
［通信装置１１のブロック図］
図２０は、実施例３における通信装置１１の一例を示すブロック図である。本実施例における通信装置１１は、アプリケーション処理部１１０、複数のTCP  Socket  Buffer１１１−１〜ｍ、ＮＩＣ１１２、算出部１１３、設定部１１４、保持部１１５、および書込部１１６を有する。なお、以下に説明する点を除き、図２０において、図１８と同じ符号を付した構成は、図１８における構成と同一または同様の機能を有するため説明を省略する。
【０１４０】
保持部１１５は、例えば図３で説明したフローテーブル２０２０と同様のフローテーブルを保持する。算出部１１３は、それぞれのTCP  Socket  Buffer１１１にデータパケットが格納された場合、保持部１１５内のフローテーブルのマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部１１３は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【０１４１】
そして、算出部１１３は、特定したFlow＿Countの値に、TCP  Socket  Buffer１１１に格納されたデータパケットのデータ量を加算することにより、Flow＿Countの値を更新する。設定部１１４は、フローテーブル内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、対応するE-flagの値に「１」を設定する。
【０１４２】
書込部１１６は、TCP  Socket  Buffer１１１にデータパケットが格納された場合、保持部１１５内のフローテーブルのマッチフィールドおよびデータパケットのヘッダ情報に基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、書込部１１６は、特定したFlow＿IDに対応付けられたE-flagの値を抽出する。
【０１４３】
抽出したE-flagの値が「０」である場合、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのヘッダ内のＤＳＣＰ（Differentiated  Services  Code  Point）フィールドに、特定の値を書き込む。特定の値とは、Miceフローのデータパケットであることを示す値であり、例えば「000000」である。ＤＳＣＰフィールドは、図１６に示したＤＳフィールドの下位６ビットに割り当てられる。一方、抽出したE-flagの値が「１」である場合、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのヘッダ内のＤＳＣＰフィールドに、特定の値を書き込む。特定の値とは、Elephantフローのデータパケットであることを示す値であり、例えば「000011」である。
【０１４４】
なお、本実施例において、設定部１１４は、フロー毎のデータ量の累積値が所定の閾値以上か否かに基づいて、それぞれのフローがMiceフローまたはElephantフローのいずれであるかを判定するが、判定方法はこれに限られない。例えば、設定部１１４は、それぞれのフローについて、例えば１秒等である所定時間毎に、それぞれのTCP  Socket  Buffer１１１のデータ量を計測する。そして、設定部１１４は、所定時間毎のデータ量が、例えば１００ｋＢｙｔｅ等である所定の閾値以上となった場合、Elephantフローと判定するようにしてもよい。
【０１４５】
［スイッチ装置２０のブロック図］
図２１は、実施例３における上位のスイッチ装置２０の一例を示すブロック図である。スイッチ装置２０は、変更部２０３、判定部２０４、生成部２０５、送信部２０６、および通信部２０７を有する。また、スイッチ装置２０は、複数の受信ポート２０８−１〜ｎ、複数の受信バッファ２０９−１〜ｎ、ＦＤＢ２１０、スイッチング処理部２１１、複数の出力キュー２１２−１〜ｎ、および複数の送信ポート２１３−１〜ｎを有する。なお、以下に説明する点を除き、図２１において、図２と同じ符号を付した構成は、図２における構成と同一または同様の機能を有するため説明を省略する。
【０１４６】
変更部２０３は、受信バッファ２０９がデータパケットを受信する都度、ＦＤＢ２１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する。そして、変更部２０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する。
【０１４７】
特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合、変更部２０３は、データパケットのヘッダ内のＤＳＣＰの値に基づいて、データパケットが含まれるフローがMiceフローであるか否かを判定する。変更部２０３は、データパケットのヘッダ内のＤＳＣＰの値が例えば「000000」である場合、Miceフローのデータパケットであると判定し、例えば「000011」である場合、Elephantフローのデータパケットであると判定する。データパケットが含まれるフローがMiceフローである場合、変更部２０３は、他のスイッチ装置２０または３０に接続された外部ポートの中で、輻輳ポート以外の外部ポートを１つ選択する。
【０１４８】
［スイッチ装置３０のブロック図］
図２２は、実施例３における下位のスイッチ装置３０の一例を示すブロック図である。スイッチ装置３０は、変更部３０３、判定部３０４、および通信部３０７を有する。また、スイッチ装置３０は、複数の受信ポート３０８−１〜ｎ、複数の受信バッファ３０９−１〜ｎ、ＦＤＢ３１０、スイッチング処理部３１１、複数の出力キュー３１２−１〜ｎ、および複数の送信ポート３１３−１〜ｎを有する。なお、以下に説明する点を除き、図２２において、図５と同じ符号を付した構成は、図５における構成と同一または同様の機能を有するため説明を省略する。
【０１４９】
変更部３０３は、受信バッファ３０９がデータパケットを受信する都度、ＦＤＢ３１０を参照し、データパケットの宛先のＭＡＣアドレスに基づいて、データパケットを送出する外部ポートを特定する。そして、変更部３０３は、特定した外部ポートが、保持した輻輳ポートのいずれかと同一か否かを判定する。
【０１５０】
特定した外部ポートが、保持した輻輳ポートのいずれかと同一である場合、変更部３０３は、データパケットのヘッダ内のＤＳＣＰの値に基づいて、データパケットが含まれるフローがMiceフローであるか否かを判定する。変更部３０３は、データパケットのヘッダ内のＤＳＣＰの値が例えば「000000」である場合、Miceフローのデータパケットであると判定し、例えば「000011」である場合、Elephantフローのデータパケットであると判定する。データパケットが含まれるフローがMiceフローである場合、変更部３０３は、他のスイッチ装置２０または３０に接続された外部ポートの中で、輻輳ポート以外の外部ポートを１つ選択する。
【０１５１】
［通信装置１１の動作］
図２３は、実施例３における通信装置１１の動作の一例を示すフローチャートである。例えば、セッションが開始する都度、通信装置１１は、本フローチャートに示す動作を開始する。
【０１５２】
まず、アプリケーション処理部１１０は、TCP  Socket  Buffer１１１を０に初期化する（Ｓ６００）。そして、アプリケーション処理部１１０は、ＤＳＣＰの値を「000000」に初期化する（Ｓ６０１）。そして、アプリケーション処理部１１０は、保持部１１５内のフローテーブル内に、Flow＿ID、マッチフィールド、Flow＿Count、およびE-flagを含むレコードを作成する（Ｓ６０２）。マッチフィールドには、例えばTCP  Socket  Buffer１１１を特定する情報が格納される。Flow＿CountおよびE-flagには、初期値として例えば０が格納される。
【０１５３】
次に、アプリケーション処理部１１０は、読み込めるデータが存在するか否かを判定する（Ｓ６０３）。読み込めるデータが存在しない場合（Ｓ６０３：Ｎｏ）、アプリケーション処理部１１０は、セッションが終了したか否かを判定する（Ｓ６１１）。セッションが終了していない場合（Ｓ６１１：Ｎｏ）、アプリケーション処理部１１０は、再びステップＳ６０３に示した処理を実行する。一方、セッションが終了した場合（Ｓ６１１：Ｙｅｓ）、通信装置１１は、本フローチャートに示した処理を終了する。
【０１５４】
読み込めるデータが存在する場合（Ｓ６０３：Ｙｅｓ）、アプリケーション処理部１１０は、データを読み込んでデータパケットを作成する（Ｓ６０４）。そして、アプリケーション処理部１１０は、作成したデータパケットを、ステップＳ６００で初期化されたTCP  Socket  Buffer１１１に格納する（Ｓ６０５）。
【０１５５】
次に、算出部１１３および書込部１１６は、ステップＳ６０２で作成されたレコードを参照して、E-flagが「１」か否かを判定する（Ｓ６０６）。E-flagが「１」である場合（Ｓ６０６：Ｙｅｓ）、書込部１１６は、TCP  Socket  Buffer１１１に格納されたデータパケットのＤＳＣＰの値を、例えば「000011」等である特定の値に書き換え（Ｓ６１０）、アプリケーション処理部１１０は、再びステップＳ６０３に示した処理を実行する。
【０１５６】
一方、E-flagが「０」である場合（Ｓ６０６：Ｎｏ）、算出部１１３は、TCP  Socket  Buffer１１１に格納されたデータパケットのデータサイズを、ステップＳ６０２で作成されたレコード内のFlow＿Countに加算する（Ｓ６０７）。そして、設定部１１４は、Flow＿Countが所定の閾値以上か否かを判定する（Ｓ６０８）。
【０１５７】
Flow＿Countが所定の閾値以上である場合（Ｓ６０８：Ｙｅｓ）、設定部１１４は、ステップＳ６０２で作成されたレコード内のE-flagに１を設定し（Ｓ６０９）、書込部１１６は、ステップＳ６１０に示した処理を実行する。一方、Flow＿Countが所定の閾値未満である場合（Ｓ６０８：Ｎｏ）、アプリケーション処理部１１０は、再びステップＳ６０３に示した処理を実行する。
【０１５８】
［効果］
上述したように、本実施例では、通信装置１１が、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別し、それぞれのデータパケットに識別情報を書き込む。これにより、スイッチ装置２０および３０の処理負荷を軽減することができる。
【実施例４】
【０１５９】
実施例１および実施例２では、それぞれのスイッチ装置が、フロー毎に、受信したデータパケットのデータ量を累積して、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別する。これに対し、本実施例では、コントローラ４０が、Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別してスイッチ装置２０およびスイッチ装置３０のそれぞれに通知する点が、実施例１および実施例２とは異なる。Elephantフローに含まれるデータパケットと、Miceフローに含まれるデータパケットとを区別する処理を、コントローラ４０が実行することにより、スイッチ装置の処理負荷を軽減することができる。
【０１６０】
［コントローラ４０のブロック図］
図２４は、実施例４におけるコントローラ４０の一例を示すブロック図である。コントローラ４０は、登録部４１、確認部４２、通知部４３、保持部４４、算出部４５、および設定部４６を有する。なお、以下に説明する点を除き、図２４において図７と同じ符号を付した構成は、図７における構成と同一または同様の機能を有するため説明を省略する。
【０１６１】
保持部４４は、例えば図３で説明したフローテーブル２０２０と同様のフローテーブルを保持する。算出部４５は、情報処理システム１全体のデータパケットの流れを管理するＡＭＳ（Application  Management  Software）から、情報処理システム１を流れたデータパケットのデータ量等を含むフローに関する情報を受信する。そして、算出部４５は、保持部４４内のフローテーブルのマッチフィールドと、受信したフローに関する情報とに基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部４５は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【０１６２】
そして、算出部４５は、特定したFlow＿Countの値に、データパケットのデータ量を加算することにより、Flow＿Countの値を更新する。また、設定部４６は、フローテーブル内のFlow＿Countの値を監視し、Flow＿Countの値が所定の閾値以上となった場合、E-flagの値に「１」を設定する。
【０１６３】
通知部４３は、フローテーブル内のそれぞれのフローのE-flagの値を監視する。そして、E-flagの値が「０」から「１」に変化した場合、通知部４３は、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０およびスイッチ装置３０を特定する。コントローラ４０は、情報処理システム１のトポロジーの情報を保持しており、通知部４３は、例えば、情報処理システム１のトポロジーの情報を参照して、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０およびスイッチ装置３０を特定する。そして、通知部４３は、特定したスイッチ装置２０およびスイッチ装置３０に、E-flagの値が「０」から「１」に変化したフローに関する情報を送信する。
【０１６４】
図２５は、実施例４におけるコントローラの動作の一例を示すフローチャートである。
【０１６５】
算出部４５は、ＡＭＳから、情報処理システム１を流れたデータパケットを含むフローに関する情報を受信したか否かを判定する（Ｓ７００）。ＡＭＳからフローに関する情報を受信した場合（Ｓ７００：Ｙｅｓ）、算出部４５は、保持部４４内のフローテーブルのマッチフィールドと、受信したフローに関する情報とに基づいて、データパケットが含まれるフローのFlow＿IDを特定する。そして、算出部４５は、特定したFlow＿IDに対応付けられたFlow＿Countの値をフローテーブル内で特定する。
【０１６６】
次に、算出部４５は、特定したFlow＿Countの値に、データパケットのデータ量を加算することにより、Flow＿Countの値を更新する（Ｓ７０１）。そして、設定部４６は、Flow＿Countの値が、所定の閾値以上か否かを判定する（Ｓ７０２）。Flow＿Countの値が、所定の閾値未満である場合（Ｓ７０２：Ｎｏ）、算出部４５は、再びステップＳ７００に示した処理を実行する。
【０１６７】
一方、Flow＿Countの値が所定の閾値以上である場合（Ｓ７０２：Ｙｅｓ）、通知部４３は、E-flagの値が「０」から「１」に変化したフローが通過するスイッチ装置２０およびスイッチ装置３０を特定する（Ｓ７０３）。そして、通知部４３は、特定したスイッチ装置２０およびスイッチ装置３０に、E-flagの値が「０」から「１」に変化したフローを特定する情報を送信し（Ｓ７０４）、算出部４５は、再びステップＳ７００に示した処理を実行する。
【０１６８】
［変形例］
なお、本願に開示の技術は、上記した実施例に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【０１６９】
例えば、上記した実施例では、輻輳が発生した場合、データ量の少ないMiceフローに含まれるデータパケットの経路を変更したが、本願に開示の技術はこれに限られない。例えば、フロー毎にスループットの維持に対する優先度を割り当て、スイッチ装置２０およびスイッチ装置３０は、輻輳が発生した場合、優先度が相対的に低いフローの経路を変更し、優先度が相対的に高いフローの経路を維持するようにしてもよい。それぞれのフローの優先度は、例えば情報処理システム１の管理者等が予め設定する。
【０１７０】
これにより、データ量の少ないMiceフローであっても、スループットの維持に対する優先度が他のフローに比べて高い場合は、輻輳が発生した場合でも、伝送経路が維持される。また、データ量の多い複数のElephantフローによって輻輳が発生した場合であっても、スループットの維持に対する優先度が相対的に低いElephantフローの経路が変更されることにより、より迅速な輻輳の解消が期待できる。
【０１７１】
また、上記した実施例１、実施例３、および実施例４では、スイッチ装置２０およびスイッチ装置３０が異なる装置として説明されたが、他の例として、スイッチ装置２０およびスイッチ装置３０の機能が１つのスイッチ装置によって実現されてもよい。
【０１７２】
なお、上記した各実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図２６は、スイッチ装置の機能を実現するコンピュータの一例を示す図である。
【０１７３】
図２６において、スイッチ装置の機能を実現するコンピュータ７０は、通信インターフェイス７１、操作インターフェイス７２、表示インターフェイス７３、ＲＯＭ７４、ＣＰＵ７５、ＲＡＭ７６、およびＨＤＤ７７を有する。
【０１７４】
ＨＤＤ７７には、例えば図２６に示すように、スイッチ処理プログラム７７０が予め記憶される。ＣＰＵ７５は、スイッチ処理プログラム７７０をＨＤＤ７７から読み出してＲＡＭ７６に展開する。このスイッチ処理プログラム７７０については、図１、図９、図１５、図２１、または図２２に示した各々の構成要素と同様、適宜統合又は分離してもよい。また、ＨＤＤ７７に格納される各データは、常に全てのデータがＨＤＤ７７内に格納される必要はなく、処理に必要なデータのみがＨＤＤ７７に格納されればよい。
【０１７５】
ＣＰＵ７５は、スイッチ処理プログラム７７０を、スイッチ処理プロセス７６０として機能させる。このスイッチ処理プロセス７６０は、ＨＤＤ７７から読み出した各種データを適宜ＲＡＭ７６上に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。
【０１７６】
上記した実施例１または４におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、算出部２００、設定部２０１、保持部２０２、変更部２０３、判定部２０４、生成部２０５、送信部２０６、通信部２０７、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、および出力キュー２１２と同様の機能を発揮する。
【０１７７】
また、上記した実施例１または４におけるスイッチ装置３０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、算出部３００、設定部３０１、保持部３０２、変更部３０３、判定部３０４、通信部３０７、受信バッファ３０９、ＦＤＢ３１０、スイッチング処理部３１１、および出力キュー３１２と同様の機能を発揮する。
【０１７８】
また、上記した実施例２におけるスイッチ装置５０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、算出部５００、設定部５０１、保持部５０２、変更部５０３、判定部５０４、ＥＣＮ書込部５０５、受信バッファ５０９、ＦＤＢ５１０、スイッチング処理部５１１、および出力キュー５１２と同様の機能を発揮する。
【０１７９】
また、上記した実施例３におけるスイッチ装置２０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、変更部２０３、判定部２０４、生成部２０５、送信部２０６、通信部２０７、受信バッファ２０９、ＦＤＢ２１０、スイッチング処理部２１１、および出力キュー２１２と同様の機能を発揮する。
【０１８０】
また、上記した実施例３におけるスイッチ装置３０では、ＣＰＵ７５が、スイッチ処理プログラム７７０を読み込んで実行することにより、変更部３０３、判定部３０４、通信部３０７、受信バッファ３０９、ＦＤＢ３１０、スイッチング処理部３１１、および出力キュー３１２と同様の機能を発揮する。
【０１８１】
なお、上記した実施例１におけるスイッチ処理プロセス７６０は、図２に示したスイッチ装置２０において実行される処理、例えば図９および図１０に示した処理を実行する。また、上記した実施例１におけるスイッチ処理プロセス７６０は、図５に示したスイッチ装置３０において実行される処理、例えば図１１に示した処理を実行する。ＣＰＵ７５が仮想的に実現する各処理部は、全ての処理部が、ＣＰＵ７５によって常に実現される必要はなく、処理に必要な処理部のみが仮想的に実現されればよい。
【０１８２】
なお、上記のスイッチ処理プログラム７７０については、必ずしも最初からＨＤＤ７７やＲＯＭ７４内に記憶させておく必要はない。例えば、コンピュータ７０に挿入されるフレキシブルディスク、いわゆるＦＤ、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの可搬型記録媒体に各プログラムが記憶される。そして、コンピュータ７０がこれらの可搬型記録媒体から各プログラムを取得して実行するようにしてもよい。また、各プログラムを記憶させた他のコンピュータまたはサーバ装置などから、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介して、コンピュータ７０が各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０１８３】
２０  スイッチ装置
２０４  判定部
２０５  生成部
２０６  送信部
２０９  受信バッファ
２１１  スイッチング処理部
２１２  出力キュー
２１３  送信ポート
３０  スイッチ装置
【図１】
2015186142.tif 000003
【図２】
2015186142.tif 000004
【図３】
2015186142.tif 000005
【図４】
2015186142.tif 000006
【図５】
2015186142.tif 000007
【図６】
2015186142.tif 000008
【図７】
2015186142.tif 000009
【図８】
2015186142.tif 000010
【図９】
2015186142.tif 000011
【図１０】
2015186142.tif 000012
【図１１】
2015186142.tif 000013
【図１２】
2015186142.tif 000014
【図１３】
2015186142.tif 000015
【図１４】
2015186142.tif 000016
【図１５】
2015186142.tif 000017
【図１６】
2015186142.tif 000018
【図１７】
2015186142.tif 000019
【図１８】
2015186142.tif 000020
【図１９】
2015186142.tif 000021
【図２０】
2015186142.tif 000022
【図２１】
2015186142.tif 000023
【図２２】
2015186142.tif 000024
【図２３】
2015186142.tif 000025
【図２４】
2015186142.tif 000026
【図２５】
2015186142.tif 000027
【図２６】
2015186142.tif 000028