(57)【要約】      （修正有）【課題】ネットワークシステムでの通信効率の低下を防止する。【解決手段】制御装置２０は、複数の転送装置１０ａ、１０ｂ、１０ｃを制御し、生成部、送信部、転送処理部を備える。生成部は、転送レートが所定の閾値以上である転送装置のポートを介して転送される対象パケットの出力先を、制御装置に変更することを要求する制御パケットを生成する。送信部は、制御パケットを、対象パケットを処理する転送装置に送信する。対象パケットを受信すると、転送処理部は、対象パケットを所定期間保持してから対象パケットの転送元に転送し、対象パケットを転送元から対象パケットの宛先に向けて転送させる。【選択図】図１
2017201756.tif 000002
【特許請求の範囲】
【請求項１】
複数の転送装置を制御する制御装置であって、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成する生成部と、
前記制御パケットを、前記対象パケットを処理する転送装置に送信する送信部と、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる転送処理部
を備えることを特徴とする制御装置。
【請求項２】
前記複数の転送装置の各々から、当該転送装置が備える各ポートでの転送状況を取得する取得部をさらに備え、
前記生成部は、前記所定の閾値以上の転送レートで転送処理を行っていることが検出された転送装置のポートでの転送レートが前記所定の閾値を下回ると、前記制御パケットの送信先に、前記制御パケットの受信前に行っていた処理を行うことを要求する他の制御パケットを送信することにより、前記制御装置で前記対象パケットの転送を遅延させる処理を終了する
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローが複数ある場合、所定時間中に転送されるデータ量が相対的に少ないフロー中のパケットを、前記対象パケットに選択するフロー選択部
を備えることを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記フロー選択部は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローのうち、当該フロー中のパケットを転送処理の対象とする転送装置の数が相対的に大きいフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする請求項３に記載の制御装置。
【請求項５】
前記対象パケットを処理する転送装置が複数ある場合、前記制御装置との間の通信量が相対的に少ない転送装置を、前記制御パケットの送信先として選択する装置選択部をさらに備える
ことを特徴とする請求項２〜４のいずれか１項に記載の制御装置。
【請求項６】
複数の転送装置を制御する制御装置であって、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、パケットを所定期間保持してから転送元に送信する保持装置に変更するとともに、前記保持装置から受信したパケットを前記対象パケットの宛先に向けて転送することを要求する制御パケットを生成する生成部と、
前記制御パケットを、前記対象パケットを処理する転送装置に送信する送信部
を備えることを特徴とする制御装置。
【請求項７】
複数の転送装置を制御する制御装置が、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成し、
前記制御パケットを、前記対象パケットを処理する転送装置に送信し、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる
処理を行うことを特徴とするレート制御方法。
【請求項８】
複数の転送装置と、
前記複数の転送装置を制御する制御装置
を含み、
前記制御装置は、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成し、
前記制御パケットを、前記対象パケットを処理する転送装置に送信し、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる
ことを特徴とするネットワークシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、レート制御方法、および、ネットワークシステムに関する。
【背景技術】
【０００２】
近年、柔軟なパケット転送制御が可能な技術として、ＯｐｅｎＦｌｏｗが注目されている（例えば、非特許文献１）。ＯｐｅｎＦｌｏｗでは、ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ（ＯＦＣ）から、ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ（ＯＦＳ）に対して、制御対象のフローを識別するＭａｔｃｈ条件と、Ｉｎｓｔｒｕｃｔｉｏｎの組合せが通知される。Ｉｎｓｔｒｕｃｔｉｏｎは、対応付けられているＭａｔｃｈ条件に合致するフローのパケットに対してＯＦＳが実行する処理を表わしている。例えば、Ｉｎｓｔｒｕｃｔｉｏｎとして、Ｍａｔｃｈ条件に合致するパケットの転送、廃棄、ヘッダ内のフィールド書き換え等が指定されうる。Ｍａｔｃｈ条件とＩｎｓｔｒｕｃｔｉｏｎの組み合わせは、ＯＦＳにおいて、フローテーブルとして記憶されている。Ｍａｔｃｈ条件とＩｎｓｔｒｕｃｔｉｏｎの組み合わせは、ネットワークの運用管理者やユーザが自由に設計することができる。また、設定された組み合わせは、ＯｐｅｎＦｌｏｗプロトコルを使ってＯＦＣからＯＦＳへ通知され、ＯＦＣからの通知に応じて、ＯＦＳで更新される。このため、ネットワークの運用管理者やユーザは、ＯＦＳでの処理内容の決定に使用されるフローテーブルを動的かつプログラマブルに設定することができる。
【０００３】
ＯｐｅｎＦｌｏｗを用いたシステムでも、他のシステムと同様に、コネクション型プロトコルやコネクションレスのプロトコルが通信に使用されることがある。コネクションを用いた通信では、ネットワークの混み具合などにより利用可能な送信レートが変動することから、輻輳制御を行う。例えば、Transmission Control Protocol（ＴＣＰ）では、輻輳ウィンドウを用いて、パケットの送信量を調整するためにスロースタートと呼ばれる処理を行う。スロースタートでは送信側の装置は、宛先の装置との通信を開始すると、パケットロスを検出するまで、確認応答パケットを受信するたびに輻輳ウィンドウの値を増加させることにより、送信レートを増加させる。パケットロスが発生すると、送信側の通信装置は送信レートを下げ、その後の調整の際の送信レートの変化量も小さくする。
【０００４】
関連する技術として、輻輳しているリンクを経由するトラフィックグループの重みと現在のトラフィックレートを用いて、抑制レートを決定し、得られた抑制レートをスイッチに送信する中央コントローラが提案されている（例えば、特許文献１）。また、予め、受信パケットを処理した結果の統計値に基づいた制御条件を記憶しており、計測した統計値と制御条件とに基づいてパケット転送レートを制御可能な通信装置も提案されている（例えば、特許文献２）。さらに、通信装置を起点とするパスへの流入トラヒック量を所定の周期で収集し、次の周期以降の流入トラヒック量を予測し、予測トラヒック量の値に応じて、レートリミットを増減させる制御装置も提案されている（例えば、特許文献３）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１５−５１９８２３号公報
【特許文献２】特開２０１４−２７６９６号公報
【特許文献３】特開２０１４−１４７０１４号公報
【非特許文献】
【０００６】
【非特許文献１】“OpenFlow Switch Specification Version 1.5.1”、[online]、Mar. 26, 2015，OPEN NETWORKING FOUNDATION、［平成２８年４月７日検索］、インターネット、<https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.1.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００７】
輻輳制御が行われる通信において、パケットの廃棄が発生すると、送信レートが急激に低下することにより、転送速度が急激に低下してしまう。また、送信レートが低下した後は、送信レートの調整の際の送信レートの変化量もパケットの廃棄の発生前より小さくなるため、実際に適用可能な送信レートよりも低い送信レートが適用される期間が長くなり、通信効率が悪くなってしまう。このような状況は、送信レートが制御される任意の通信で発生しうる。
【０００８】
本発明は、ネットワークシステムでの通信効率の低下を防止することを目的とする。
【課題を解決するための手段】
【０００９】
ある１つの態様にかかる制御装置は、複数の転送装置を制御し、生成部、送信部、転送処理部を備える。生成部は、転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成する。送信部は、前記制御パケットを、前記対象パケットを処理する転送装置に送信する。前記対象パケットを受信すると、転送処理部は、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる。
【発明の効果】
【００１０】
ネットワークシステムでの通信効率の低下が防止される。
【図面の簡単な説明】
【００１１】
【図１】実施形態にかかる通信方法の例を説明する図である。
【図２】制御装置の構成の例を説明する図である。
【図３】制御装置のハードウェア構成の例を説明する図である。
【図４】システムのトポロジ情報の例を説明する図である。
【図５】転送装置情報の例を説明する図である。
【図６】転送装置から通知されるフロー情報の例を説明する図である。
【図７】制御装置が保持する情報の例を説明する図である。
【図８】通信方法の例を説明する図である。
【図９】フローテーブルの更新処理の例を説明する図である。
【図１０】通信方法の例を説明する図である。
【図１１】レート制御の開始と終了の判定処理を説明するフローチャートである。
【図１２】レート制御のための設定処理の例を説明するフローチャートである。
【図１３】レート制御の詳細の例を説明するフローチャートである。
【図１４】スループットの時間変化の例を説明する図である。
【図１５】第２の実施形態で使用されるフローテーブルの例を説明する図である。
【図１６】通信方法の例を説明する図である。
【図１７】フローテーブルの更新例を説明する図である。
【図１８】制御対象情報の例を説明する図である。
【図１９】第２の実施形態での設定処理の例を説明するフローチャートである。
【図２０】第３の実施形態で行われる通信処理の例を説明する図である。
【図２１】第３の実施形態で使用されるフローテーブルの例を説明する図である。
【図２２】第４の実施形態で行われる通信処理の例を説明する図である。
【図２３】第４の実施形態で使用されるフローテーブルの例を説明する図である。
【図２４】第４の実施形態で行われる処理の例を説明するフローチャートである。
【図２５】フローテーブルの更新例を説明する図である。
【図２６】第５の実施形態で行われる通信処理の例を説明する図である。
【図２７】転送装置情報の例を説明する図である。
【図２８】第６の実施形態で行われる通信処理の例を説明する図である。
【図２９】制御装置が保持する情報の例を説明する図である。
【図３０】第６の実施形態で行われる処理の例を説明するフローチャートである。
【図３１】第７の実施形態で行われる通信処理の例を説明する図である。
【図３２】フローテーブルの例を説明する図である。
【図３３】第７の実施形態で行われる処理の例を説明するフローチャートである。
【図３４】フローテーブルの更新処理の例を説明する図である。
【図３５】制御装置が行う処理の例を説明するフローチャートである。
【図３６】第８の実施形態が適用されるシステムの例を説明する図である。
【図３７】第８の実施形態で行われる通信処理の例を説明する図である。
【図３８】フローテーブルの例を説明する図である。
【図３９】制御対象情報の例を説明する図である。
【図４０】第８の実施形態での設定処理の例を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
図１は、実施形態にかかる通信方法の例を説明する図である。以下の説明では、制御装置２０は転送装置１０での処理を制御し、転送装置１０は、ホスト間で送受信されるパケットを制御装置２０から通知された処理ルールに従って処理するものとする。制御装置２０は、例えば、ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ（ＯＦＣ）として実現される。転送装置１０は、例えば、ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ（ＯＦＳ）として実現される。図１に示すシステムには、ホストＨ１〜Ｈ４、転送装置１０（１０ａ〜１０ｃ）、制御装置２０が含まれている。図１において、実線で示すリンクはデータプレーンのパケットの送受信に使用され、破線で示すリンクは制御プレーンのパケットの送受信に使用されるものとする。
【００１３】
転送装置１０ａは、転送装置１０ｂおよび転送装置１０ｃに接続されている。転送装置１０ｂには、ホストＨ１とホストＨ２が接続されている。転送装置１０ｃには、ホストＨ３とホストＨ４が接続されている。図１において、ホストＨ４とホストＨ１の間での通信と、ホストＨ３とホストＨ２の間での通信が発生しているとする。ホストＨ４からホストＨ１に送信されるＴＣＰパケットのフローをＦｌｏｗ１とする。一方、Ｆｌｏｗ１中のパケットに対する確認応答パケット（Ａｃｋパケット）のフローをＡｃ１とする。さらに、ホストＨ３からホストＨ２に送信されるパケットのフローをＦｌｏｗ２とする。各フローの経路は制御装置２０によって決定されている。図１の例では、Ｆｌｏｗ１中のパケットは、ホストＨ４から転送装置１０ｃ、転送装置１０ａ、転送装置１０ｂの順に転送され、転送装置１０ｂからホストＨ１に転送される。一方、Ａｃ１で示すフロー中のパケットは、ホストＨ１から転送装置１０ｂ、転送装置１０ａ、転送装置１０ｃの順に転送され、転送装置１０ｃからホストＨ４に転送される。Ｆｌｏｗ２に含まれるパケットは、ホストＨ３から転送装置１０ｃ、転送装置１０ａ、転送装置１０ｂの順に転送されて、ホストＨ２に転送される。
【００１４】
制御装置２０は、各転送装置１０からその転送装置１０が備えるポートの通信状況や、各ポートで転送するフローの情報を報告する制御パケットを、定期的に取得している。図１で、転送装置１０ｃのポートＰｏＡでの負荷が所定の閾値を超えたとする。以下、あるポートの処理負荷が閾値を超えている状態を、そのポートが輻輳していると記載することがある。
【００１５】
制御装置２０は、輻輳の発生を検出すると、輻輳が発生したポートを介して転送されるフロー中のパケットの少なくとも一部を、レート制御のための制御対象のパケット（対象パケット）とする。制御装置２０は、対象パケットを制御装置２０に転送することを、対象パケットを処理している転送装置１０の少なくとも１つに要求する。図１の例では、制御装置２０は、転送装置１０ｃ中のポートＰｏＡを介して転送されているＦｌｏｗ１、Ｆｌｏｗ２、Ａｃ１の各フローのうち、Ａｃ１に含まれているパケットが対象パケットになっている。また、制御装置２０は、転送装置１０ｂがＡｃ１中のパケット（対象パケット）を処理していることから、転送装置１０ｂに対して、対象パケットを制御装置２０に転送することを、転送装置１０ｂで適用する処理ルールとして通知する（矢印Ａ１）。
【００１６】
転送装置１０ｂは、制御装置２０から新たな処理ルールを受信すると、処理ルールを用いてフローテーブルを更新する。その後、Ａｃ１のフロー中のパケットを受信すると、転送装置１０ｂは、更新後のフローテーブルに従って、受信パケットを制御装置２０に転送する（矢印Ａ２）。このとき、転送装置１０ｂは、例えば、ＯｐｅｎＦｌｏｗのＰａｃｋｅｔ−Ｉｎメッセージを用いて、Ａｃ１中のパケットを制御装置２０に転送する。
【００１７】
制御装置２０は、対象パケットを受信すると、受信した対象パケットを所定の期間保持してから、対象パケットの転送元に転送し、転送元から、対象パケットを宛先に向けて転送させる。例えば、制御装置２０は、Ａｃ１中のパケットを所定期間にわたって保持した後で、Ａｃ１中のパケットの転送元となった転送装置１０ｂに出力する。このとき、制御装置２０は、出力するパケットが宛先に転送されるように、転送装置１０ｂでの出力ポートを指定した情報と共に、パケットを転送装置１０ｂに出力する（矢印Ａ３）。例えば、制御装置２０は、ＯｐｅｎＦｌｏｗのＰａｃｋｅｔ−Ｏｕｔメッセージなどを用いることができる。すなわち、Ｐａｃｋｅｔ−Ｉｎメッセージによって制御装置２０に転送されたＡｃ１中のパケットと、転送装置１０ｂのポートのうちで転送装置１０ａに接続されたポートを出力先に指定した情報を含むＰａｃｋｅｔ−Ｏｕｔメッセージが矢印Ａ３で使用され得る。
【００１８】
転送装置１０ｂは、制御装置２０から出力ポートの情報と共に対象パケットを受信すると、対象パケットを出力ポートに出力する。このため、対象パケットは、図１中のＡｃ１の矢印で示すように、転送装置１０ｂから転送装置１０ａ、転送装置１０ｃを介して、ホストＨ４に到達する。従って、対象パケットは、制御装置２０で保持されている時間の分と、転送装置１０ｂと制御装置２０での間の往復の時間分だけ、宛先に到達する時刻が遅くなる。
【００１９】
ＴＣＰプロトコルを用いてデータを送信する通信装置は、データの宛先の装置が保持するバッファでのオーバフローの発生を防ぐために、確認応答の受信に伴って、後続のデータを送信する。図１の例では、ホストＨ４は、ホストＨ１のバッファ量を超えない量のデータパケットを送信し、ホストＨ１からの確認応答パケットを受信すると、ホストＨ１にさらにデータパケットを送信する。図１の矢印Ａ１〜Ａ３の処理により、確認応答パケットが遅延すると、ホストＨ４は、ホストＨ１での処理に遅延が発生していると判定して、データパケットの送信レートを下げるため、Ｆｌｏｗ１の転送レートが低下する。従って、転送装置１０ｃのポートＰｏＡでの輻輳状態が解消される。
【００２０】
なお、図１の例では、Ａｃ１中のパケットが対象パケットとして遅延処理の対象となる場合を例として説明したが、データパケットが遅延処理の対象となっても良い。この場合も、データパケットが制御装置２０に転送されることにより、データパケットのフローが送信元から宛先まで到達する際にかかる時間が長くなる。データパケットの遅延により、送信元がＡｃｋパケットを取得するまでにかかる時間も延びるので、転送レートが低下し、結果として、輻輳が解消される。
【００２１】
＜装置構成＞
図２は、制御装置２０の構成の例を説明する図である。制御装置２０は、送受信部２１、制御部３０、記憶部５０を備える。送受信部２１は、送信部２２と受信部２３を備える。制御部３０は、監視部３１とメッセージ処理部４０を備え、オプションとして、フロー選択部３２、装置選択部３３、制御方法選択部３４を備えても良い。記憶部５０は、転送装置情報５１、フローテーブル５２、制御閾値５３、制御対象情報５４、トポロジ情報５５を保持し、さらに、バッファ５６として動作する。
【００２２】
転送装置情報５１は、制御装置２０が制御する転送装置１０の情報である。フローテーブル５２は、制御装置２０が各転送装置１０に通知した処理ルールを、その処理ルールの適用対象となるフローと対応付けた情報である。なお、各転送装置１０は、制御装置２０から通知された処理ルールと処理ルールを適用するフローの情報の組み合わせを、個々の転送装置１０のフローテーブルとして記憶し、フローテーブルに従って処理を行っている。そのため、フローテーブル５２は、各転送装置１０でのパケットに対する処理の設定の情報をまとめた情報であるといえる。さらに、フローテーブル５２には、制御装置２０が転送装置１０から収集した情報も合わせて格納されても良い。
【００２３】
制御閾値５３は、制御装置２０による制御の開始や終了を決定するために使用される閾値である。ここで、制御閾値５３は、システム中の転送装置１０のいずれかのポートの使用率が制御閾値５３に達してからレート制御を開始してもパケット廃棄が発生しないように設定される。すなわち、レート制御を開始してもしばらくの間は転送レートが減少しない可能性があるため、制御閾値５３は、レート制御が開始した後で転送レートが減少し始めるまでの間でもパケット廃棄が発生するときの使用率よりも使用率が低くなるように設定される。制御対象情報５４は、制御装置２０による転送レートの制御の対象となっている対象フローの情報である。トポロジ情報５５は、制御装置２０の制御対象の転送装置１０や制御対象の転送装置１０に接続しているホストの接続やアドレスに関する情報である。転送装置情報５１、フローテーブル５２、制御対象情報５４、トポロジ情報５５などの例は後述する。バッファ５６は、適宜、データやパケットの保持などに使用される。
【００２４】
送信部２２は、転送装置１０などの他の装置にパケットを送信する。受信部２３は、転送装置１０などの他の装置からパケットを受信する。監視部３１は、各転送装置１０に備えられたポートでの転送レートから求められた各ポートの使用率と、制御閾値５３を比較することによって、転送レートの制御の開始や終了を決定する。
【００２５】
フロー選択部３２は、転送レート制御の対象となるフローを選択する。装置選択部３３は、転送レートの制御のために、対象パケットを制御装置２０に転送する転送装置１０を選択する。制御方法選択部３４は、転送レートを制御するための制御方法を選択する。これらの処理の詳細については、後述する。
【００２６】
統計情報取得部４１は、転送装置１０から取得した制御パケットから、制御パケットの送信元の転送装置１０が備えるポートの情報やフローの統計情報を取得する。生成部４２は、処理ルールを転送装置１０に通知するためのメッセージを生成する。処理ルールの通知には、例えば、ＦｌｏｗＭｏｄメッセージなどが使用され得る。転送処理部４３は、所定時間、バッファ５６で保持された後の対象パケットを、対象パケットの転送元に転送するための制御パケットを生成する。ここで、制御パケットには、宛先の転送装置１０においての、対象パケットの出力ポートの指定も含まれる。例えば、転送処理部４３は、Ｐａｃｋｅｔ−ｏｕｔメッセージを用いて、対象パケットと対象パケットの出力ポートの指定情報を、対象パケットの転送元に通知できる。
【００２７】
図３は、制御装置のハードウェア構成の例を説明する図である。制御装置２０は、プロセッサ１０１、メモリ１０２、バス１０５、ネットワークインタフェース１０９を備える。制御装置２０は、さらに、入力装置１０３、出力装置１０４、記憶装置１０６、可搬記憶装置駆動装置１０７の１つ以上を有していても良い。プロセッサ１０１は、Central Processing Unit（ＣＰＵ）を含む任意の処理回路であり、メモリ１０２や記憶装置１０６に記憶されたプログラムを実行することができる。メモリ１０２は、プロセッサ１０１のワーキングメモリやバッファとして使用され得る。メモリ１０２として、ＲＡＭ（Random Access Memory）のような半導体メモリが使用され得る。バス１０５は、プロセッサ１０１、メモリ１０２、ネットワークインタフェース１０９を、相互にデータの送受信が可能になるように接続する。ネットワークインタフェース１０９は、ネットワークとの情報の入出力を行う。ネットワークインタフェース１０９として、ＮＩＣ（Network Interface Card）、無線ＬＡＮ（Local Area Network）カード等が使用される。
【００２８】
入力装置１０３は、キーボードなど、情報の入力に使用される任意の装置であり、出力装置１０４は、ディスプレイなど、データの出力に使用される任意の装置である。可搬記憶装置駆動装置１０７は、メモリ１０２や記憶装置１０６のデータを可搬記憶装置１０８に出力することができ、また、可搬記憶装置１０８からプログラムやデータ等を読み出すことができる。ここで、可搬記憶装置１０８は、持ち運びが可能な任意の記憶媒体である。例えば、可搬記憶媒体１０８には、ＳＤカード、ｍｉｎｉＳＤカード、ｍｉｃｒｏＳＤカード、ＵＳＢ（Universal Serial Bus）フラッシュメモリ、ＣＤ（Compact Disc）、ＤＶＤ(Digital Versatile Disc)、Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ、フラッシュメモリカードなどが含まれる。一方、記憶装置１０６として、ＥＰＲＯＭ（Erasable Programmable ROM）、又はハードディスクドライブ（Hard Disc Drive）等の不揮発性のメモリが使用され得る。
【００２９】
制御装置２０において、制御部３０はプロセッサ１０１によって実現され、記憶部５０は、メモリ１０２と記憶装置１０６によって実現される。さらに、ネットワークインタフェース１０９とプロセッサ１０１が送受信部２１として動作する。
【００３０】
なお、転送装置１０も、図３に示すハードウェア構成を有する。転送装置１０では、他の転送装置１０や制御装置２０との通信にネットワークインタフェース１０９が使用される。また、転送装置１０は、制御装置２０から通知された情報をメモリ１０２や記憶装置１０６に格納する。転送装置１０が備えるプロセッサ１０１は、メモリ１０２や記憶装置１０６に格納された情報を用いて処理を行う。
【００３１】
＜第１の実施形態＞
図４は、システムのトポロジ情報５５の例を説明する図である。図４では、分かりやすくするために、トポロジ情報５５を転送装置１０や制御装置２０との接続を示す図として示しているが、制御装置２０がトポロジ情報５５を保持する形式は任意である。図４において、転送装置１０のポートを黒い丸で示し、ポート番号を黒い丸中に示す。制御装置２０は、システム中の各転送装置１０をデータパスＩＤによって識別する。図４では、転送装置１０ａのデータパスＩＤは１、転送装置１０ｂのデータパスＩＤは２、転送装置１０ｃのデータパスＩＤは３である。
【００３２】
転送装置１０ｃでは、ポート１はホストＨ３に接続され、ポート２はホストＨ４に接続されている。また、転送装置１０ｃのポート３は転送装置１０ａのポート２に接続され、転送装置１０ｃのポート４は制御装置２０に接続されている。転送装置１０ａのポート１は転送装置１０ｂのポート３に接続され、転送装置１０ａのポート４は制御装置２０に接続されている。転送装置１０ｂでは、ポート１はホストＨ１に接続され、ポート２がホストＨ２に接続されている。さらに、転送装置１０ｂのポート４は制御装置２０に接続されている。図４では、制御パケットの送受信に使用されるリンクを破線、データパケットやＡｃｋパケットなどの送受信に使用されるリンクを実線で示している。
【００３３】
トポロジ情報５５には、各装置に割り当てられているアドレスの情報も含まれる。図４の例では、ホストＨ１に割り当てられたＩＰ（Internet Protocol）アドレスは１０．０．０．１である。また、ホストＨ２には１０．０．０．２、ホストＨ３には１０．０．０．３、ホストＨ４には１０．０．０．４が割り当てられている。各転送装置１０が備えるポートのうち、制御装置２０との通信に使用されるポートには、ＩＰアドレスが設定される。例えば、転送装置１０ａのポート４には２０．０．０．１というＩＰアドレスが割り当てられている。同様に、転送装置１０ｂのポート４には２０．０．０．２、転送装置１０ｃのポート４には２０．０．０．３が割り当てられている。
【００３４】
制御装置２０の統計情報取得部４１は、制御装置２０と接続されていることがトポロジ情報５５に記録されている転送装置１０に、定期的にその転送装置１０が備える各ポートの稼動情報や、各ポートを介して送受信されるフローの情報を問合わせる。このとき、統計情報取得部４１は、問い合わせ先の転送装置１０の各々に宛てて、統計情報の要求メッセージを生成し、生成したメッセージを送信部２２経由で送信する。例えば、統計情報の要求メッセージとしては、例えば、ＯＦＰＭＰ＿ＰＯＲＴ＿ＳＴＡＴＳリクエスト、ＯＦＰＭＰ＿ＦＬＯＷ＿ＳＴＡＴＳリクエスト、ＯＦＰＭＰ＿ＡＧＧＲＥＧＡＴＥ＿ＳＴＡＴＳリクエストなどのメッセージが使用され得る。
【００３５】
統計情報の要求メッセージを受信した転送装置１０は、制御装置２０に対して、統計情報を含む応答メッセージを送信する。応答メッセージとして、ＯＦＰＭＰ＿ＰＯＲＴ＿ＳＴＡＴＳリプライ、ＯＦＰＭＰ＿ＦＬＯＷ＿ＳＴＡＴＳリプライ、ＯＦＰＭＰ＿ＡＧＧＲＥＧＡＴＥ＿ＳＴＡＴＳリプライなどのメッセージが使用され得る。制御装置２０中の統計情報取得部４１は、受信部２３を介して、応答メッセージを取得すると、得られた情報を用いて、転送装置情報５１を更新する。
【００３６】
図５は、転送装置情報５１の例を説明する図である。転送装置情報５１には、データパスＩＤ、アドレス、ＴＣＰポート番号、ポート速度情報、ポートの送信バイト数が含まれる。アドレスの欄には、データパスＩＤで識別される転送装置１０から制御装置２０が受信した制御パケットの送信元ＩＰアドレスが格納される。ＴＣＰポート番号は、データパスＩＤで識別される転送装置１０から制御装置２０が受信した制御パケットの送信元ポート番号である。ポート速度情報は、データパスＩＤで識別される転送装置１０が備えているポートの各々について、ポート番号とそのポートでの転送速度の最大値の組み合わせを記録している。各ポートの速度は、各転送装置１０が制御装置２０に接続する際のハンドシェイクで通知される情報に含まれている。例えば、ＯｐｅｎＦｌｏｗが用いられる場合、制御装置２０は、転送装置１０から送信されたＯＦＰＴ＿ＦＥＡＴＵＲＥＳリプライに含まれるポート記述（ｐｏｒｔ  ｄｅｓｃｒｉｐｔｉｏｎ）情報から各ポートの速度の情報を取得できる。制御装置２０との通信に使用されているポートについては、ポート速度情報の欄に、接続先が制御装置２０であることを示す情報（ＣＯＮＴＲＯＬＬＥＲ）が記録されている。ポートの送信バイト数は、そのエントリに対応するポートで送信したバイト数の積算値である。
【００３７】
図６は、転送装置１０から通知されるフロー情報の例を説明する図である。各転送装置１０からは、データパスＩＤに対応付けて、フローごとの送信バイト数の積算値とそのフローの送受信に使用されているプロトコルの種類が通知される。また、各フローは、処理ルールの決定に使用される条件（Ｍａｔｃｈ条件）を用いて特定される。
【００３８】
テーブルＴ１は、転送装置１０ａが制御装置２０に通知するフロー情報の例である。テーブルＴ１の例では、宛先ＩＰアドレス＝１０．０．０．１（ホストＨ１）のパケットが１つのフローとして分類されている。転送装置１０ａは、宛先ＩＰアドレス＝１０．０．０．１のフローはＴＣＰで送信され、送信バイト数の積算値が８００Ｍバイトであると通知している。また、転送装置１０ａは、宛先ＩＰアドレス＝１０．０．０．２（ホストＨ２）のフローはＴＣＰで送信され、送信バイト数の積算値が２００Ｍバイトであることも通知している。さらに、宛先ＩＰアドレス＝１０．０．０．３（ホストＨ３）のフローでの送信バイト数の積算値が１Ｍバイトであり、宛先ＩＰアドレス＝１０．０．０．４（ホストＨ４）のフローでの送信バイト数の積算値が４Ｍバイトである。また、宛先ＩＰアドレス＝１０．０．０．３宛てのフローと、宛先ＩＰアドレス＝１０．０．０．４宛てのフローのいずれも、ＴＣＰで送受信されている。
【００３９】
他の転送装置１０も、転送装置１０ａと同様にフロー情報を制御装置２０に通知する。図６の例では、転送装置１０ｂはテーブルＴ２の情報を制御装置２０に送信し、転送装置１０ｃはテーブルＴ３の情報を制御装置２０に送信する。なお、図６の例では、転送装置１０ａ〜１０ｃが通知するフロー情報が同じ情報であるが、フローの転送経路によっては、制御装置２０に通知するフロー情報が転送装置１０間で異なっても良い。
【００４０】
図７は、中継装置２０が保持する情報の例を説明する図である。以下の説明では、フローテーブル５２などが更新される様子を説明するために、符号にハイフンと数字の組み合わせを含めることがある。フローテーブル５２−１は、制御装置２０が各転送装置１０に通知済みの処理ルールと、その処理ルールを適用するフローの特定に使用されるＭａｔｃｈ条件の組み合わせを、通知先の転送装置１０に対応付けて格納している。さらに、各転送装置１０から通知されたフロー情報のうち、エントリ中のＭａｔｃｈ条件で特定されるフローの情報も、フローテーブル５２中で対応付けている。
【００４１】
例えば、転送装置１０ａに適用される処理ルールでは、Ｍａｔｃｈ条件が宛先アドレス＝１０．０．０．１のフローは、ポート１から出力される。また、転送装置１０ａからは図６のテーブルＴ１に記載されている情報が通知されるので、宛先アドレス＝１０．０．０．１のフローの送信バイト数は８００Ｍバイト、プロトコル種別はＴＣＰという情報もフローテーブル５２−１に含められている。さらに、転送装置１０ａでは、宛先アドレス＝１０．０．０．２のフローは、ポート１から出力され、宛先アドレス＝１０．０．０．３か宛先アドレス＝１０．０．０．４のフローは、ポート２から出力される。これらのフローに対しても、図６のテーブルＴ１で通知された情報が対応付けられる。
【００４２】
同様に、転送装置１０ｂでは、宛先アドレス＝１０．０．０．１のフローはポート１、宛先アドレス＝１０．０．０．２のフローはポート２から出力される。一方、宛先アドレス＝１０．０．０．３か宛先アドレス＝１０．０．０．４のフローは、転送装置１０ｂでは、ポート３から出力される。転送装置１０ｃでは、宛先アドレス＝１０．０．０．１か宛先アドレス＝１０．０．０．２のフローはポート３から出力されるが、宛先アドレス＝１０．０．０．３のフローはポート１から出力される。さらに、転送装置１０ｃでは、宛先アドレス＝１０．０．０．４のフローは、ポート２から出力される。さらに、フローテーブル５２−１には、転送装置１０ｂを介して送受信されるフローについては図６のテーブルＴ２の情報が対応付けられ、転送装置１０ｃを介して送受信されるフローについては図６のテーブルＴ３の情報が対応付けられる。
【００４３】
フローテーブル５２に加えて、制御装置２０は、制御閾値５３を保持する。統計情報取得部４１は、ポートの稼動情報を用いて、ポートでの送信レートを求める。監視部３１は、送信レートが、そのポートでの転送速度の最大値に占める割合が制御閾値５３を超えると、負荷が高くなっているポートがあると判定して、制御装置２０は制御を開始する。
【００４４】
図８は、第１の実施形態にかかる通信方法の例を説明する図である。統計情報取得部４１は、各転送装置１０から得られた情報と、トポロジ情報５５、フローテーブル５２を用いて、通信中の各フローの転送経路やポートの稼動状態などを分析する。
【００４５】
図８は、ネットワークのトポロジが図４の通りで、各転送装置１０から制御装置２０に通知された情報が図５、図６の通りであり、さらに、制御装置２０がフローテーブル５２−１を保持している場合について得られるフローの転送経路である。フローＦ１は宛先アドレス＝１０．０．０．１のフローの転送経路である。同様に、フローＦ２は宛先アドレス＝１０．０．０．２のフロー、フローＦ３は宛先アドレス＝１０．０．０．３のフロー、フローＦ４は宛先アドレス＝１０．０．０．４のフローの転送経路である。
【００４６】
統計情報取得部４１は、さらに、各転送装置１０の各ポートについて、前回の収集の際にそのポートで得られた送信バイト数と、最新の制御パケットで得られた送信バイト数を用いて、そのポートでの転送速度を計算する。例えば、統計情報取得部４１が各転送装置１０から制御パケットを１０秒周期で受信しているとする。さらに、１０秒前には全てのポートの送信バイト数が０だったとする。最新の制御パケットにより、転送装置情報５１が図５に示すように更新されたとすると、統計情報取得部４１は、各ポートの送信バイト数をビット数に換算し、制御パケットの取得間隔で除算することにより転送レート（ｂｐｓ）を求める。例えば、転送装置１０ｃ（データパスＩＤ＝３）のポート３は、送信バイト数が１０００Ｍｂｙｔｅであるので、転送レートは、１０００Ｍ×８÷１０＝８００Ｍｂｐｓとなる。統計情報取得部４１は、得られた転送レートを監視部３１に出力する。
【００４７】
監視部３１は、統計情報取得部４１から通知された転送レートについて、そのポートで得られる転送レートの最大値に対する割合を計算する。例えば、転送装置１０ｃのポート３の転送レートの最大値は１Ｇｂｐｓである。一方、監視部３１は、統計情報取得部４１から、転送装置１０ｃのポート３の転送レートが８００Ｍｂｐｓであるという計算結果を取得している。そこで、監視部３１は、転送装置１０ｃのポート３の使用率は８００Ｍｂｐｓ／１Ｇｂｐｓ×１００＝８０％となる。監視部３１は、得られた使用率と制御閾値５３（図７）を比較することにより、転送装置１０ｃのポート３の負荷が制御閾値５３に達したと判定する。そこで、監視部３１は、転送装置１０ｃのポート３を介して転送されるフローの転送速度を下げるための制御を行うことを決定する。
【００４８】
生成部４２は、転送装置１０ｃのポート３を介して転送されるフローの少なくとも１つの転送先を制御装置２０に変更するための制御メッセージを生成したとする。図８の例では、生成部４２は、転送装置１０ｃに対して、フローＦ１を制御装置２０に転送させることを要求する処理ルールを生成すると共に、フローテーブル５２−１をフローテーブル５２−２（図９）に更新したとする。さらに、生成部４２は、更新前のフローテーブル５２−１の情報を、レート制御の終了後に使用するための情報として記憶する。
【００４９】
図９は、フローテーブル５２の更新処理の例を説明する図である。図９に示すフローテーブル５２−２では、転送装置１０ｃでの宛先アドレス＝１０．０．０．１のフロー（フローＦ１）に対するＩｎｓｔｒｕｃｔｉｏｎは、ＣＯＮＴＲＯＬＬＥＲに設定されている。ここで、Ｉｎｓｔｒｕｃｔｉｏｎ＝ＣＯＮＴＲＯＬＬＥＲは、制御装置２０への転送処理を表わすものとする。なお、図９の例では、転送装置１０ｃでのフローＦ１以外のフローに対する処理は、フローテーブル５２−１（図７）と同じである。
【００５０】
生成部４２は、変更した処理ルールを転送装置１０ｃに通知するための制御メッセージを生成する。例えば、生成部４２は、転送装置１０ｃ宛に、宛先アドレス＝１０．０．０．１のフローを制御装置２０に転送することを要求するＦｌｏｗＭｏｄメッセージを生成したとする。生成部４２は、送信部２２を介して、生成したＦｌｏｗＭｏｄメッセージを転送装置１０ｃに送信する。
【００５１】
生成部４２は、転送レートの制御を行うために通知した新たな処理ルールの内容と、通知先の転送装置１０の情報を、制御対象情報５４として記憶部５０に格納する。図９中に、転送装置１０ｃにおいてフローＦ１の転送先を制御装置２０に変更する場合に生成される制御対象情報５４の例を示す。
【００５２】
図１０は、通信方法の例を説明する図である。矢印Ａ１１において、制御装置２０は、転送レートの制御のために変更する処理ルールを含むＦｌｏｗＭｏｄメッセージを、転送装置１０ｃに送信する。すると、転送装置１０ｃは、フローＦ１に適用する処理を制御装置２０から通知された処理ルールに変更する。このとき、転送装置１０ｃは、適宜、記憶しているフローテーブルを更新する。
【００５３】
その後、ホストＨ４がホストＨ１宛てのパケットを送信したとする（矢印Ａ１２）。転送装置１０ｃは、ホストＨ１宛てのパケットをポート４から出力することにより、制御装置２０に転送する（矢印Ａ１３）。ここで、転送装置１０ｃは、ホストＨ１宛てのパケットを含めたＰａｃｋｅｔ−Ｉｎメッセージを生成すると共に、生成したＰａｃｋｅｔ−Ｉｎメッセージを制御装置２０に送信しているとする。
【００５４】
制御装置２０の受信部２３は、転送装置１０ｃからＰａｃｋｅｔ−Ｉｎメッセージを受信すると、受信したＰａｃｋｅｔ−Ｉｎメッセージを統計情報取得部４１に出力する。統計情報取得部４１は、Ｐａｃｋｅｔ−Ｉｎメッセージをバッファ５６に格納する。バッファ５６は、統計情報取得部４１から入力されたＰａｃｋｅｔ−Ｉｎメッセージを、所定期間にわたって格納した後、転送処理部４３に出力する。転送処理部４３は、Ｐａｃｋｅｔ−Ｉｎメッセージに含まれているパケットの転送処理を行う。このとき、転送処理部４３は、Ｐａｃｋｅｔ−Ｉｎメッセージの送信元を、Ｐａｃｋｅｔ−Ｉｎメッセージ中のパケットの転送先に決定する。さらに、Ｐａｃｋｅｔ−Ｉｎメッセージの送信元に対して、転送するパケットを、そのパケットの宛先に向けて転送することを要求する。このときに、転送処理部４３は、パケットの転送先に、転送対象のパケットの出力ポートを通知することにより、宛先に向けた転送処理を要求しても良い。この場合、転送処理部４３は、転送の対象となっているパケットのアドレス情報とトポロジ情報５５（図４）を用いて、パケットの転送先での出力ポートを決定する。図１０の例では、Ｐａｃｋｅｔ−Ｉｎメッセージの送信元が転送装置１０ｃであるので、転送処理部４３は、転送装置１０ｃでの出力ポートを決定する。Ｐａｃｋｅｔ−Ｉｎメッセージ中のパケットの宛先アドレスは１０．０．０．１（ホストＨ１）である。このため、転送装置１０ｃでの出力ポートは、ポート３に決定される。
【００５５】
転送処理部４３は、バッファ５６から入力されたメッセージ中のパケットと、そのパケットの転送装置１０ｃでの出力ポートの情報を含む制御パケットを、転送装置１０ｃ宛に生成する。例えば、転送処理部４３は、ホストＨ１宛てのパケットと、ホストＨ１宛てのパケットの出力ポートがポート３であることを示す情報を含むＰａｃｋｅｔ−Ｏｕｔメッセージを生成する。転送処理部４３は、生成したＰａｃｋｅｔ−Ｏｕｔメッセージを、送信部２２を介して、転送装置１０ｃに送信する（矢印Ａ１４）。
【００５６】
転送装置１０ｃは、Ｐａｃｋｅｔ−Ｏｕｔメッセージを受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージ中に含まれているホストＨ１宛てのパケットを、Ｐａｃｋｅｔ−Ｏｕｔメッセージに従ってポート３から出力する。このため、ホストＨ１宛てのパケットは、ホストＨ１に向けて転送される（矢印Ａ１５）。
【００５７】
このように、制御装置２０による制御が行われると、フローＦ１のパケットが宛先に到達するまでにかかる時間は、制御が行われない場合より長くなる。宛先に到達するまでにかかる時間の増加分は、転送装置１０ｃと制御装置２０の間をパケットが往復する時間と、パケットが制御装置２０で保持されている時間の合計時間である。このため、フローＦ１中のパケットの転送速度が遅くなり、フローＦ１のパケットの送信元であるホストＨ４に、ホストＨ１からの確認応答パケットが届くまでにかかる時間が延びる。確認応答パケットの受信に際して、ホストＨ４はさらにフローＦ１のパケットの送信を行うため、制御装置２０で遅延処理が行われることによって、ホストＨ４からのフローＦ１の送信レートが低下する。従って、転送装置１０ｃのポート３でのパケットの転送レートが下がる。
【００５８】
制御装置２０中の統計情報取得部４１は、制御装置２０によるパケットの遅延処理が行われている間も、定期的に、各転送装置１０から通信状況を取得しており、適宜、転送装置情報５１やフローテーブル５２などの情報を更新している。また、最新の情報に合わせて各転送装置１０が備えるポートの各々について、転送レートを計算する。監視部３１は、得られた転送レートと制御閾値５３との比較処理を定期的に行う。転送装置１０ｃのポート３の使用率が制御閾値５３を下回ると、監視部３１は、レート制御処理を終了することを決定する。
【００５９】
レート制御の終了の際に、生成部４２は、制御対象情報５４を用いて、レート制御が行われる前の状態にフローテーブル５２を戻す。例えば、フローテーブル５２−２（図９）の例では、生成部４２は、制御対象情報５４を参照することにより、転送装置１０ｃでのフローＦ１の転送処理が変更されたことを認識する。さらに、生成部４２は、フローテーブル５２の更新の際に、レート制御の開始前のフローテーブル５２−１（図７）の情報を終了後に使用するための情報として記憶している。このため、生成部４２は、記憶している情報を用いて、フローテーブル５２−２をフローテーブル５２−１の状態に更新する。レート制御の開始前に使用されていたフローテーブル５２−１に従うと、転送装置１０ｃにおいて、フローＦ１のパケットの出力先を、ポート３に変更することになる。さらに、生成部４２は、制御対象情報５４からフローＦ１の処理ルールの変更に関する情報を削除する。
【００６０】
生成部４２は、転送装置１０ｃに対して、レート制御の開始前に行われていた処理を行うことを要求する制御パケットを送信する。このとき、生成部４２は、ＦｌｏｗＭｏｄメッセージを制御パケットとして使用できる。
【００６１】
転送装置１０ｃにおいて制御パケットが処理されると、転送装置１０ｃにおいて、フローテーブルが、レート制御の開始前の状態に更新される。従って、フローＦ１のパケットは、制御装置２０を経由せずにポート３から出力されることになり、転送装置１０ｃから制御装置２０へのフローＦ１のパケットの転送が終了する。
【００６２】
このように、レート制御によって、使用率が制御閾値５３を超えた状態が解消されると、生成部４２は、制御装置２０でフローＦ１のパケットの転送を遅延させる処理を終了できる。従って、このため、レート制御の終了が決定されると、図８を参照しながら説明した経路での転送処理が再開される。
【００６３】
なお、生成部４２は、レート制御の開始前のフローテーブル５２−１（図７）の情報を記憶する代わりに、トポロジ情報５５を用いて、制御対象情報５４に記録されているフローについての転送ルールを決定しても良い。生成部４２は、トポロジ情報５５を用いて決定された新たな処理を適用することにより、ネットワークシステム中での転送処理は、レート制御の開始前の状態に戻す。
【００６４】
図１１は、レート制御の開始と終了の判定処理を説明するフローチャートである。統計情報取得部４１は、転送装置情報５１を用いて、各ポートの使用率を計算する（ステップＳ１）。監視部３１は、レート制御を実施していない状態であって、かつ、使用率が制御閾値５３に達したポートがあるかを判定する（ステップＳ２）。レート制御を実施していない状態であって、かつ、使用率が制御閾値５３に達したポートを検出すると、監視部３１は、検出したポートについて、レート制御を開始する（ステップＳ２でＹｅｓ、ステップＳ３）。
【００６５】
一方、レート制御を実施していない状態であって、かつ、使用率が制御閾値５３に達したポートが無いとする（ステップＳ２でＮｏ）。この場合、監視部３１は、レート制御を実施中であって、かつ、使用率が制御閾値５３を下回ったポートがあるかを判定する（ステップＳ４）。レート制御を実施中であって、かつ、使用率が制御閾値５３を下回ったポートを検出すると、監視部３１は、検出したポートについてのレート制御を終了することを決定する（ステップＳ４でＹｅｓ、ステップＳ５）。レート制御を実施中であって、かつ、使用率が制御閾値５３を下回ったポートを検出しない場合、監視部３１は、処理を終了する（ステップＳ４でＮｏ）。
【００６６】
図１２は、レート制御のための設定処理の例を説明するフローチャートである。なお、図１２は処理の一例である。例えば、ステップＳ１２とＳ１３の順序が互いに変更されるなどの変更が実装に応じて行われ得る。生成部４２は、使用率が制御閾値５３に達したポートを通過するフローを抽出する（ステップＳ１１）。生成部４２は、抽出したフローについて、そのフローが制御装置２０に転送されるようにフローテーブル５２を更新し、更新後の内容を転送装置１０に通知する（ステップＳ１２）。なお、ステップＳ１２での通知処理は、パケットの処理に使用される処理ルールとして転送装置１０側で保持するフローテーブルが、制御装置２０中のフローテーブル５２の更新によって変更される転送装置１０に対して行われる。さらに、生成部４２は、制御装置２０に転送されてきたパケットをバッファ５６に保持する時間（パケット保持時間）を設定する（ステップＳ１３）。
【００６７】
図１３は、レート制御の詳細の例を説明するフローチャートである。制御装置２０の受信部２３は、転送装置１０からのメッセージを受信する（ステップＳ２１）。統計情報取得部４１は、メッセージが、パケット転送メッセージであるかを判定する（ステップＳ２２）。ここで、パケット転送メッセージは、転送装置１０から制御装置２０にパケットを転送するために使用される任意のメッセージである。例えば、パケット転送メッセージとして、Ｐａｃｋｅｔ−Ｉｎメッセージが使用され得る。
【００６８】
受信したメッセージがパケット転送メッセージである場合、統計情報取得部４１は、パケット転送メッセージをバッファ５６に格納する（ステップＳ２２でＹｅｓ）。バッファ５６は、パケット転送メッセージを予め決められた所定時間にわたって保持し、その後、転送処理部４３に出力する（ステップＳ２３）。転送処理部４３は、パケット転送メッセージに含まれているパケットを、パケット転送メッセージの送信元に転送する（ステップＳ２４）。このとき、転送処理部４３は、転送先の転送装置１０において、転送対象のパケットを宛先に向けて出力することを要求するための情報も、転送対象のパケットと共に転送する。例えば、転送対象のパケットと、そのパケットの転送先での出力ポートの情報を含むＰａｃｋｅｔ−Ｏｕｔメッセージを、転送処理部４３が生成することができる。転送処理部４３で生成されたＰａｃｋｅｔ−Ｏｕｔメッセージは送信部２２を介して送信される。
【００６９】
一方、受信したメッセージがパケット転送メッセージではない場合、統計情報取得部４１は、受信したメッセージが統計情報の取得応答メッセージであるかを判定する（ステップＳ２２でＮｏ、ステップＳ２５）。受信したメッセージが統計情報の取得応答メッセージである場合、統計情報取得部４１は、得られた統計情報を記憶部５０に格納する（ステップＳ２５でＹｅｓ、ステップＳ２６）。なお、統計情報取得部４１は、取得応答メッセージによって通知された情報を用いて、適宜、転送装置情報５１やフローテーブル５２を更新できる。受信したメッセージが統計情報の取得応答メッセージでもない場合、受信メッセージの種類に応じて処理が行われる（ステップＳ２５でＮｏ、ステップＳ２７）。
【００７０】
図１４は、スループットの時間変化の例を説明する図である。図１４では、第１の実施形態にかかる方法が適用されるシステムと、第１の実施形態にかかる方法が適用されていないシステムの両方でのスループットの変化例を比較する。ケースＣ１とケースＣ２は、第１の実施形態にかかる方法が適用されていないシステムでのスループットの時間変化である。ケースＣ２ではパケットのドロップ処理に対応している。ケースＣ３は、第１の実施形態にかかる方法が適用されているシステムでのスループットの時間変化の例である。また、いずれのケースにおいても、ポートでのスループットの最大値はＳｒ２であるとする。
【００７１】
ケースＣ１では、Ｆｌｏｗ１とＦｌｏｗ２の送受信に使用されているポートのスループットは、各フローの転送レートの増加とともに増加する。ケースＣ１では、Ｆｌｏｗ１とＦｌｏｗ２のスループットの合計をＦｓｕｍ１として図示している。Ｆｓｕｍ１がスループットの上限Ｓｒ２を超えると、スイッチでのバッファオーバフローが発生し、パケットが廃棄される。このとき、いずれのフローのパケットも廃棄される。従って、Ｆｓｕｍ１がスループットの上限Ｓｒ２を超えると、いずれのフローでもスループットが急激に低下してしまうので、通信可能なデータ量に対してスループットが極端に小さくなり、通信効率が急激に悪化する。
【００７２】
ケースＣ２では、Ｆｌｏｗ１とＦｌｏｗ２のうち、Ｆｌｏｗ１に対しては、所定のスループットＳｒ１を超えるとパケットを廃棄する処理が行われるとする。このためＦｌｏｗ１については、スループットがＳｒ１を超えるとパケットが廃棄されるので急激にスループットが低下する。一方、Ｆｌｏｗ２に対してはドロップ処理が行われないとする。すると、ケースＣ２では、ケースＣ１よりは、スループットの変動を小さくしやすい。しかしながら、ケースＣ２においても、Ｆｌｏｗ１とＦｌｏｗ２の合計がポートでのスループットの上限Ｓｒ２を超えるとＦｌｏｗ２のパケットも廃棄されてしまうので、ケースＣ１と同様に全てのフローにおいて急激にスループットが低下してしまい、通信効率が悪くなる。
【００７３】
ケースＣ３では、制御装置２０がレート制御を開始する制御閾値５３をＴｈとして図示している。また、ケースＣ３でのＦｌｏｗ１とＦｌｏｗ２のスループットの合計をＦｓｕｍ２で表している。制御装置２０中の監視部３１は、時刻Ｔ１において、Ｆｓｕｍ２が制御閾値Ｔｈに達するとレート制御を開始する。レート制御により、一部のパケットが制御装置２０経由で転送され、さらに、制御装置２０で所定期間にわたってパケットが保持されるので、レート制御の対象となっているフローのパケットのスループットは低下する。ケースＣ３の例では、Ｆｌｏｗ１がレート制御の対象となっているので、時刻Ｔ１でのレート制御の開始からしばらく時間が経過すると、スループットが低下し始める。その後、時刻Ｔ２において、Ｆｓｕｍ２が制御閾値Ｔｈを下回ると、制御装置２０はレート制御を終了する。レート制御の終了後、Ｆｌｏｗ１のスループットは再び増加し始め、時刻Ｔ３には再度、Ｆｓｕｍ２が制御閾値Ｔｈに達する。すると、時刻Ｔ３から、制御装置２０がレート制御を開始する。時刻Ｔ４においてＦｓｕｍ２が制御閾値Ｔｈを下回ると、レート制御が終了される。
【００７４】
このように、ケースＣ３では、スループットの合計値が制御閾値５３を超えている期間中は、制御装置２０においてパケットを遅延させる処理が行われることになる。パケットの遅延により、スループットが緩やかに低下するので、第１の実施形態を用いたケースＣ３では、ケースＣ１やケースＣ２のように極端なスループットの低下は見られない。換言すると、パケットの廃棄が行われないように制御装置２０でスループットを制御することにより、急激なスループットの低下が防止されている。急激なスループットの低下が防止されることにより、通信可能なデータ量に対してスループットが極端に小さくならない。従って、ケースＣ３では、ケースＣ１やケースＣ２に比べて、スループットの合計値が比較的高い状態が長い時間継続する。従って、第１の実施形態にかかる方法を用いたシステムでは、通信効率の低下が防止される。
【００７５】
なお、第１の実施形態では、レート制御の対象となるフローの選択方法は任意である。従って、生成部４２は、ポートの使用率が所定値を超えたポートを経由する任意のフローを１つ以上の任意の数だけ、レート制御の対象として設定できる。
【００７６】
＜第２の実施形態＞
第２の実施形態では、制御装置２０での遅延処理の対象とするフローをＡｃｋパケットの割合が多いフローに限定する場合について説明する。以下の説明でも、ネットワークのトポロジが図４の通りである場合を例とする。第２の実施形態にかかる制御装置２０は、フロー選択部３２と装置選択部３３を備えており、フロー選択部３２において、処理対象のフローが選択され、装置選択部３３によって転送処理を行う転送装置１０が決定されるものとする。
【００７７】
図１５は、第２の実施形態で使用されるフローテーブル５２の例を説明する図である。第２の実施形態では、Ｍａｔｃｈ条件として、宛先ＩＰアドレスと送信元ＩＰアドレスの組み合わせが使用される。さらに、フローテーブル５２は、Ｍａｔｃｈ条件ごとに、Ｉｎｓｔｒｕｃｔｉｏｎ、Ｍａｔｃｈ条件で特定されたフローでの送信バイト数、プロトコル種別が含まれる。なお、送信バイト数とプロトコル種別は、統計情報取得部４１が第１の実施形態と同様の処理により、システム中の転送装置１０（１０ａ〜１０ｃ）から取得した値である。
【００７８】
第２の実施形態では、テーブルを見やすくするために、フローの送信バイト数として最新の制御パケットで得られた送信バイト数から、前回の収集の際に同じポートで得られた送信バイト数を差し引いて得られる差分を、収集周期での送信バイト数として記載する。すなわち、収集周期での送信バイト数は、前回の統計情報の通知から今回の統計情報の通知までの間に、転送装置１０で送信されたデータ量をフローごとに求めた値である。従って、第２の実施形態では、フローテーブル５２を用いることにより、送信元と宛先の組み合わせに加え、そのフローで送受信されているデータ量も特定できる。このため、第２の実施形態では、フローテーブル５２を参照することによって、ある２台のホストの組み合わせについて、データの送受信に主に使用されるフローと、Ａｃｋパケットの割合の多いフローが特定できる。すなわち、ある２台のホスト間での通信のうち、収集周期での送信バイトの多いフローはデータの送受信が多いフローである。一方、送信元と宛先の組み合わせがデータの送受信の多いフローと入れ替わっていて、かつ、収集周期での送信バイトが比較的少ないフローはＡｃｋの送受信が多いフローである。
【００７９】
例えば、転送装置１０ａで送受信されているフローのうちの１段目のエントリは、宛先ＩＰアドレス＝１０．０．０．１で送信元ＩＰアドレス＝１０．０．０．４のフローであり、収集周期での送信バイトが８００Ｍｂｙｔｅである。従って、このエントリのフローはデータの送受信に使用されているといえる。一方、転送装置１０ａで送受信されているフローのうちの４段目のエントリは、宛先ＩＰアドレス＝１０．０．０．４で送信元ＩＰアドレス＝１０．０．０．１であり、収集周期での送信バイトは４Ｍｂｙｔｅである。従って、転送装置１０ａに関連付けられた４段目のエントリのフローは、転送装置１０ａに関連付けられた１段目のエントリのフローで送受信されたデータのＡｃｋの送受信に使用されていると判定できる。他のエントリについても同様にデータとＡｃｋのいずれが多いかを判定できる。なお、図１５は一例であり、フローの送信バイト数などの数値は、実装に応じて任意に変更され得る。
【００８０】
図１６のケースＣ１１は、図１５のフローテーブル５２が得られている状態での各フローの転送経路である。以下、転送装置１０ｃのポート３において、ポートの使用率が制御閾値５３に達したときに行われる処理の例を説明する。
【００８１】
まず、監視部３１は、ポートの使用率が制御閾値５３に達したことを、フロー選択部３２と生成部４２に通知する。ポートの使用率の計算等の処理は、第１の実施形態と同様である。
【００８２】
フロー選択部３２は、フロー制御によって、転送レートを低下させるフローの候補を選択する。このとき、フロー選択部３２は、フローテーブル５２（図１５）を参照することにより、使用率が制御閾値５３に達しているポートからの出力がＩｎｓｔｒｕｃｔｉｏｎとして設定されているフローを検索する。図１５の例では、転送装置１０ｃの欄の１番目と２番目のエントリが転送レートを低下させるフローの候補として抽出される。フロー選択部３２は、送信バイト量や収集周期を用いて、転送レートを低下させるフローの候補の各々について、転送レートを計算し、転送レートが高いほうのフローを、転送レートを低下させるフローに選択する。図１５の例では、宛先ＩＰアドレス＝１０．０．０．１かつ送信元ＩＰアドレス＝１０．０．０．４のフロー（図１６のＦ１）が、転送レートを低下させるフローとして選択されたとする。
【００８３】
フロー選択部３２は、選択したフローＦ１の転送レートを低下させるために、転送経路を変更するフローを選択する。転送レートを低下させるフローとして選択されたフローＦ１は、ＴＣＰによる通信フローである。このため、データパケットとＡｃｋパケットのいずれを遅延させても、データパケットの転送レートを引き下げることができる。Ａｃｋパケットはデータパケットよりもデータの容量が少ない上、Ｄｅｌａｙ  Ａｃｋが適用される場合は、データパケットの数よりもＡｃｋパケットの数の方が少なくなる。そこで、フロー選択部３２は、選択したフローＦ１で送受信されるデータパケットのＡｃｋパケットが送受信されるフローを、転送経路を変更するフローに決定する。フロー選択部３２は、宛先ＩＰアドレス＝１０．０．０．４かつ送信元ＩＰアドレス＝１０．０．０．１のフロー（図１６のＦ４）がフローＦ１で送信されたデータパケットのＡｃｋを含むと判定し、転送経路を変更するフローに決定する。以下、転送経路を変更するフローのことを「制御対象となるフロー」と記載することがある。フロー選択部３２は、転送経路を変更するフローを装置選択部３３に通知する。
【００８４】
装置選択部３３は、転送経路の変更を行う転送装置１０を決定する。まず、装置選択部３３は、フロー選択部３２から通知されたフローＦ４のＭａｔｃｈ条件をキーとしてフローテーブル５２を参照することにより、フローＦ４の転送経路を特定する。図１５、図１６の例では、フローＦ４の転送経路は、ホストＨ１、転送装置１０ｂ（ポート３から出力）、転送装置１０ａ（ポート２から出力）、転送装置１０ｃ（ポート２から出力）、ホストＨ４となる。そこで、装置選択部３３は、転送経路のうちで最も送信元に近い転送装置１０ｂにおいて、フローＦ４のパケットを制御装置２０に転送させることを決定する。装置選択部３３は、選択結果と制御対象のフローを生成部４２に通知する。
【００８５】
以下、ケースＣ１２を参照しながら、レート制御の例を説明する。生成部４２は、装置選択部３３からの通知に従って、転送装置１０ｂに対してフローＦ４のパケットを制御装置２０に転送させるために、ＦｌｏｗＭｏｄメッセージを生成する。ＦｌｏｗＭｏｄメッセージには、宛先ＩＰアドレス＝１０．０．０．４（ホストＨ４）かつ送信元ＩＰアドレス＝１０．０．０．１（ホストＨ１）のフローを、制御装置２０に転送することが記載されている。生成部４２は、生成したＦｌｏｗＭｏｄメッセージを、送信部２２を介して、転送装置１０ｂに送信する（矢印Ａ２１）。さらに、生成部４２は、転送装置１０ｂへの通知に合わせてフローテーブル５２と制御対象情報５４も更新する。
【００８６】
一方、制御装置２０からＦｌｏｗＭｏｄメッセージを受信した転送装置１０ｂは、フローＦ４に適用する処理を制御装置２０から通知されたＦｌｏｗＭｏｄメッセージ中の処理ルールに変更する。
【００８７】
転送装置１０ｂにおいてフローテーブルが更新された後で、ホストＨ１がホストＨ４宛てにパケットを送信したとする（矢印Ａ２２）。転送装置１０ｂは、ホストＨ１からホストＨ４宛てのパケットを受信すると、更新後のフローテーブルに従って、受信パケットを制御装置２０に転送する（矢印Ａ２３）。このとき、転送装置１０ｂは、ホストＨ４宛てのパケットを含めたＰａｃｋｅｔ−Ｉｎメッセージを生成すると共に、生成したＰａｃｋｅｔ−Ｉｎメッセージを制御装置２０に送信する。制御装置２０で行われる処理は、図１０の矢印Ａ１３、Ａ１４を参照しながら説明した処理と同様である。すなわち、制御装置２０は、Ｐａｃｋｅｔ−Ｉｎメッセージで転送されたパケットを所定期間にわたって保持した後、そのパケットを含むＰａｃｋｅｔ−Ｏｕｔメッセージを転送装置１０ｂに出力する（矢印Ａ２４）。なお、Ｐａｃｋｅｔ−Ｏｕｔメッセージには、Ｐａｃｋｅｔ−Ｏｕｔメッセージ中に含まれているパケットの転送装置１０ｂでの出力ポートの情報が含まれている。
【００８８】
転送装置１０ｂは、Ｐａｃｋｅｔ−Ｏｕｔメッセージを受信すると、Ｐａｃｋｅｔ−Ｏｕｔメッセージ中に含まれているホストＨ４宛てのパケットを、Ｐａｃｋｅｔ−Ｏｕｔメッセージに従って出力する。このため、ホストＨ４宛てのパケットは、ホストＨ４に向けて転送される（矢印Ａ２５）。
【００８９】
このように、制御装置２０による制御が行われることにより、フローＦ４のパケットがホストＨ４に到達するまでの時間は、制御装置２０による制御が行われない場合より長くなる。フローＦ４には、フローＦ１で送信されているデータパケットのＡｃｋパケットが含まれているため、フローＦ４に対する制御により、フローＦ１中のパケットの転送レートも低下する。従って、転送装置１０ｃのポート３でのパケットの転送レートが下がる。
【００９０】
図１７は、フローテーブル５２の更新例を説明する図である。図１７は、図１６の矢印Ａ２１の処理と並行して、生成部４２が行った更新処理によって得られるフローテーブル５２の例である。図１６の矢印Ａ２１の処理では、転送装置１０ｂにおいて、宛先ＩＰアドレス＝１０．０．０．４かつ送信元ＩＰアドレス＝１０．０．０．１のフローＦ４を、制御装置２０に転送させるので、フローテーブル５２は図１５から図１７に示すように更新される。
【００９１】
図１８は、制御対象情報５４の例を説明する図である。図１８は、図１６の矢印Ａ２１の処理の際に、更新された制御対象情報５４の例である。第２の実施形態では、使用率が制御閾値５３を超えた転送装置１０と、レート制御のための設定が行われる転送装置１０が同じであっても異なっても良い。図１８の例では、制御対象情報５４には、レート制御のための設定を行う転送装置１０（設定先）の他に、高負荷になっていることが検出された転送装置１０とポートの組み合わせ（検出ポート）も記録されている。第２の実施形態では、さらに、転送レートを低下させるフローと、制御対象となるフローも異なっても良いので、図１８の制御対象情報５４には、転送レートを低下させるフローの情報と、制御対象となるフローの情報が含まれている。なお、制御対象となるフローの情報は、設定内容として、処理ルールとともに記録される。
【００９２】
なお、図１８は制御対象情報５４の一例であり、実装に応じて制御対象情報５４中の情報要素は変更され得る。例えば、制御対象情報５４には、制御装置２０で制御対象となるパケットを格納することや格納処理の時間が、制御方法として記録されているが、制御対象情報５４は、制御方法の情報を含んでいなくても良い。
【００９３】
図１８に示す制御対象情報５４が保持されている場合、監視部３１は、定期的に、転送装置１０ｃのポート３の使用率をモニタする。監視部３１は、転送装置１０ｃのポート３の使用率が制御閾値５３を下回ったと判定すると、レート制御処理を終了することを決定する。レート制御処理の終了の際の処理は、第１の実施形態と同様である。
【００９４】
図１９は、第２の実施形態での設定処理の例を説明するフローチャートである。フロー選択部３２は、使用率が制御閾値５３に達したポートを通過するフローから送信レートの高いフローのＡｃｋを含むフローを、制御対象のフローとして選択する（ステップＳ３１）。装置選択部３３は、選択したフローを処理する転送装置１０の中から、制御対象のフローのパケットを制御装置２０に転送させる転送装置１０を選択する（ステップＳ３２）。生成部４２は、ＦｌｏｗＭｏｄメッセージを送信することにより、選択された転送装置１０のフローテーブルを更新する（ステップＳ３３）。さらに、生成部４２は、制御装置２０に転送されてきたパケットをバッファ５６に保持する時間（パケット保持時間）を設定する（ステップＳ３４）。
【００９５】
第２の実施形態を用いると、第１の実施形態と同様の効果が得られる上に、データパケットを制御装置２０が保持しないので、制御装置２０での処理負担が第１の実施形態に比べて軽減されやすい。
【００９６】
＜第３の実施形態＞
第３の実施形態では、逆方向のトラフィックを考慮して制御対象のフローを決定する場合の処理の例を説明する。第３の実施形態においても、制御装置２０は、フロー選択部３２と装置選択部３３を備えているものとする。
【００９７】
図２０は、第３の実施形態で行われる通信処理の例を説明する図である。図２０において、各フローの太さは、そのフローの転送レートに比例しているとする。例えば、Ｆｌｏｗ１はホストＨ４からホストＨ１の方向に向かうパケットのフローであり、送信レートが４００Ｍｂｐｓであるとする。Ｆｌｏｗ２はホストＨ３からホストＨ２に送信されるパケットのフローであり、送信レートが４００Ｍｂｐｓであるとする。Ｆｌｏｗ４は、ホストＨ１からホストＨ４に送信されるパケットのフローであり、Ｆｌｏｗ１の逆方向のフローである。Ｆｌｏｗ４の送信レートも４００Ｍｂｐｓであるとする。Ｆｌｏｗ３は、ホストＨ２からホストＨ３に送信されるパケットのフローであり、Ｆｌｏｗ２の逆方向のフローである。Ｆｌｏｗ３の送信レートは２Ｍｂｐｓであるとする。図２０のようなフローが発生するケースとして、ホストＨ１とホストＨ４は互いに多くのデータの送受信を行っていて、ホストＨ３がホストＨ２へデータを送信している場合が考えられる。すなわち、ホストＨ２からホストＨ３には、ＴＣＰのＡｃｋなど少量のデータが送信されている。
【００９８】
この状態で、転送装置１０ｃのポート３の使用率が制御閾値５３に達したとする。すると、フロー選択部３２は、フロー制御によって、転送レートを低下させるフローの候補として、転送装置１０ｃのポート３から出力されているフローを選択する。図２０の例では、Ｆｌｏｗ１とＦｌｏｗ２が候補となるが、Ｆｌｏｗ１とＦｌｏｗ２のいずれでも送信レートが４００Ｍｂｐｓであるので、いずれのフローの転送レートを低下させても同程度の効果が見込まれる。そこで、フロー選択部３２は、転送レートを低下させるフローの候補の各々について、逆方向のフローの送信レートを比較する。すると、Ｆｌｏｗ１の逆方向のＦｌｏｗ４の送信レートが４００Ｍｂｐｓであるのに対し、Ｆｌｏｗ２の逆方向のＦｌｏｗ３の送信レートは２Ｍｂｐｓである。フロー選択部３２は、制御装置２０での保持処理の負担を小さくするために、逆方向のフローの送信レートが低い方のＦｌｏｗ２を、転送レートを低下させるフローに決定する。さらに、フロー選択部３２は、転送レートを低下させるＦｌｏｗ２の逆向きのフロー（Ｆｌｏｗ３）を制御対象のフローに選択する。フロー選択部３２は、制御対象のフローがＦｌｏｗ３であることを、装置選択部３３に通知する。
【００９９】
装置選択部３３は、Ｆｌｏｗ３を処理している転送装置１０の中から、Ｆｌｏｗ３のパケットを制御装置２０に転送させる転送装置１０を決定する。図２０の例では、装置選択部３３は、Ｆｌｏｗ３のパケットを制御装置２０に転送させる転送装置１０として、転送装置１０ｂを選択したとする。すると、生成部４２は、転送装置１０ｂ宛のＦｌｏｗＭｏｄメッセージを転送装置１０ｂに送信することにより、転送装置１０ｂでのＦｌｏｗ３のパケットの転送先を制御装置２０に変更させる。その後、生成部４２は、フローテーブル５２中の転送装置１０ｂに関する情報と、転送装置１０ｂ中のフローを整合させるために、フローテーブル５２を更新する。
【０１００】
図２１は、生成部４２の処理により得られるフローテーブル５２の例である。図２１の例では、各転送装置１０についてのエントリのうち、１番目がＦｌｏｗ１の情報、２番目がＦｌｏｗ２の情報、３番目がＦｌｏｗ３の情報、４番目がＦｌｏｗ４の情報である。４００Ｍｂｐｓの送信レートが得られる場合、制御情報の収集周期が１０秒であれば、１回の収集周期の間にそのフローで送信されるパケットの量は、５００Ｍｂｙｔｅである（５００Ｍｂｙｔｅ×８÷１０＝４００Ｍｂｐｓ）。このため、Ｆｌｏｗ１、Ｆｌｏｗ３、Ｆｌｏｗ４のいずれでも、制御情報を取得する周期での送信バイト数は５００Ｍｂｙｔｅになっている。一方、Ｆｌｏｗ３での送信レートは、２Ｍｂｐｓである。このため、１回の周期の間にそのフローで送信されるパケットの量は、２．５Ｍｂｙｔｅ（２．５Ｍｂｙｔｅ×８÷１０＝２Ｍｂｐｓ）である。
【０１０１】
図２１に示すフローテーブル５２では、転送装置１０ｂでのＦｌｏｗ３のパケットに対する処理が、制御装置２０への転送に設定されている。なお、Ｉｎｓｔｒｕｃｔｉｏｎ＝ＣＯＮＴＲＯＬＬＥＲは、Ｍａｔｃｈ条件に合致したパケットを制御装置２０へ転送することを意味するものとする。
【０１０２】
転送装置１０ｂでのフローテーブルの更新後に行われる処理は、第２の実施形態を参照しながら説明した処理と同様である。
【０１０３】
第３の実施形態で説明したように、レートを低下させるフローの逆向きのフローが制御装置２０に転送される場合、制御装置２０に転送されるフローの送信レートが低いほど、制御装置２０の処理負担が低くなりやすい。このため、第３の実施形態においては、フロー選択部３２が、実際に制御対象となるフローの転送レートを用いて、レートを低下させるフローを選択することにより、制御装置２０への負荷を抑えることができる。
【０１０４】
＜第４の実施形態＞
第４の実施形態では、なるべく多数のスイッチを経由するフローを遅延させることにより、複数のポートでの処理負荷を軽減させる場合の例を説明する。
【０１０５】
図２２は、第４の実施形態で行われる通信処理の例を説明する図である。図２２では、ポート番号をアルファベットのＰｏという文字列に続けて示している。なお、各転送装置１０間や制御装置２０と転送装置１０の間の接続は、図４に示すとおりである。
【０１０６】
Ｆｌｏｗ１はホストＨ４からホストＨ１の方向に向かうパケットのフローであり、送信レートが４００Ｍｂｐｓであるとする。Ｆｌｏｗ１１はホストＨ２からホストＨ１に送信されるパケットのフローであり、送信レートが１６０Ｍｂｐｓであるとする。Ｆｌｏｗ１２は、ホストＨ４からホストＨ３に送信されるパケットのフローであり、送信レートは４００Ｍｂｐｓであるとする。
【０１０７】
Ｆｌｏｗ１、Ｆｌｏｗ１１、Ｆｌｏｗ１２のいずれもＴＣＰプロトコルを用いて通信が行われているとする。従って、Ｆｌｏｗ１、Ｆｌｏｗ１１、Ｆｌｏｗ１２の各々について、逆方向のフローによる通信も行われているが、図２２では、図を見やすくするために、逆向きのフローを省略している。
【０１０８】
このような通信が行われている場合、複数のフローを処理するポートでの負荷が高くなりやすい。例えば、転送装置１０ｃのポート２（Ｐｏ２）では、Ｆｌｏｗ１とＦｌｏｗ１２が通過するので、転送レートは、４００Ｍｂｐｓ＋４００Ｍｂｐｓ＝８００Ｍｂｐｓとなっている。一方、転送装置１０ｂのポート１（Ｐｏ１）では、Ｆｌｏｗ１とＦｌｏｗ１１が通過するので、転送レートは、４００Ｍｂｐｓ＋１６０Ｍｂｐｓ＝５６０Ｍｂｐｓとなっている。
【０１０９】
監視部３１は、各ポートでの転送レートがそのポートで得られる転送レートの上限値に占める割合（使用率）と制御閾値５３を用いて、レート制御を行うかを判定する。図２２の例では、転送装置１０ｃのポート２において、使用率が制御閾値５３に達していると判定されたとする。また、監視部３１は、転送装置１０ｂのポート１については、中程度の負荷になっているが、使用率は制御閾値５３には達していないと判定したとする。
【０１１０】
図２３は、図２２に示す通信が行われているときのフローテーブル５２の例を説明する図である。図２３では、転送装置１０ａについてのエントリのうち、１番目がＦｌｏｗ１の情報で、２番目がＦｌｏｗ１の逆向きのフローの情報である。転送装置１０ｂについてのエントリのうち、１番目がＦｌｏｗ１の情報、２番目がＦｌｏｗ１１の情報、３番目がＦｌｏｗ１１の逆向きのフローの情報、４番目がＦｌｏｗ１の逆向きのフローの情報である。転送装置１０ｃについてのエントリのうち、１番目がＦｌｏｗ１の情報、２番目がＦｌｏｗ１２の情報、３番目がＦｌｏｗ１２の逆向きのフローの情報、４番目がＦｌｏｗ１の逆向きのフローの情報である。
【０１１１】
図２４は、第４の実施形態で行われる処理の例を説明するフローチャートである。以下、図２４を参照しながら、図２２、図２３に示す通信処理が行われている場合のレート制御の例を説明する。
【０１１２】
監視部３１は、高負荷になっているポートを検出する（ステップＳ４１）。例えば、図２２を参照しながら説明したように、転送装置１０ｃのポート２において使用率が制御閾値５３を超えたため、転送装置１０ｃのポート２が高負荷のポートとして検出されたとする。すると、フロー選択部３２が、フローテーブル５２（図２３）を参照することにより、高負荷ポートを経由するフローを抽出する（ステップＳ４２）。図２３の例では、転送装置１０ｃのポート２から出力されるフローとして、Ｆｌｏｗ１２の逆向きのフローと、Ｆｌｏｗ１の逆向きのフローが特定される。さらに、転送装置１０ｃのポート２から出力されるフローの逆向きのフローも転送装置１０ｃのポート２を経由すると考えられることから、フロー選択部３２は、Ｆｌｏｗ１とＦｌｏｗ１２も、転送装置１０ｃのポート２を経由すると判定する。すなわち、フロー選択部３２は、Ｆｌｏｗ１、Ｆｌｏｗ１２、Ｆｌｏｗ１の逆向きのフロー、Ｆｌｏｗ１２の逆向きのフローの４つのフローを抽出する。
【０１１３】
次に、フロー選択部３２は、抽出されたフローが１つ以上であるかを判定する（ステップＳ４３）。抽出されたフローが１つの場合、抽出されたフローの送信レートを下げる制御が行われる（ステップＳ４３でＮｏ、ステップＳ４６）。なお、１つのフローとそのフローとは逆向きのフローのみが検出された場合も、ステップＳ４６の処理が行われても良い。
【０１１４】
ステップＳ４３において抽出されたフローが複数ある場合、フロー選択部３２は、抽出されたフローのうちで、転送装置１０の経由数が最大のものを特定する（ステップＳ４３でＹｅｓ、ステップＳ４４）。ここで、転送装置１０の経由数が大きいフローでの転送レートを引き下げることにより、一度に複数のポートの負荷を下げられる可能性がある。このため、フロー選択部３２は、転送装置１０の経由数が最も大きいフローを、送信レートを下げる対象とする。
【０１１５】
転送装置１０の経由数は、フローテーブル５２のＭａｔｃｈ条件をキーとして求めることができる。例えば、Ｆｌｏｗ１は、ホストＨ４（１０．０．０．４）からホストＨ１（１０．０．０．１）に送信されるパケットであり、転送装置１０ａ〜１０ｃを経由するので、転送装置１０の経由数は３である。Ｆｌｏｗ１の逆向きのフローはホストＨ１からホストＨ４に送信され、転送装置１０ａ〜１０ｃを経由するので、転送装置１０の経由数は３である。Ｆｌｏｗ１２は、ホストＨ４からホストＨ３（１０．０．０．３）に送信されるパケットのフローであり、転送装置１０ｃのみを経由するので、転送装置１０の経由数は１である。Ｆｌｏｗ１２の逆向きのフローは、ホストＨ３からホストＨ４に送信されるパケットのフローであり、転送装置１０ｃのみを経由するので、転送装置１０の経由数は１である。そこで、フロー選択部３２は、ホストＨ４からホストＨ１に送信されるパケットのフロー（Ｆｌｏｗ１）と、Ｆｌｏｗ１の逆方向のフローにおいて、転送装置１０の経由数が最大になると判定する。
【０１１６】
フロー選択部３２は、Ｆｌｏｗ１でのデータの転送量が、Ｆｌｏｗ１の逆方向のフローでのデータの転送量よりも大きいため、Ｆｌｏｗ１のフローの送信レートを引き下げることを決定する。さらに、フロー選択部３２は、制御装置２０でのパケットの保持の負担を軽減するため、フローの送信レートの引き下げの際に制御対象とするフローは、Ｆｌｏｗ１の逆方向のフローとする。フロー選択部３２は、制御対象とするフロー（Ｆｌｏｗ１の逆方向のフロー）を装置選択部３３に通知する。その後、装置選択部３３や生成部４２により、Ｆｌｏｗ１の逆方向のフローの転送経路を変更することにより、Ｆｌｏｗ１の送信レートを下げる制御が行われる（ステップＳ４５）。
【０１１７】
図２５は、フローテーブルの更新例を説明する図である。図２４のステップＳ４５において、装置選択部３３に対して、Ｆｌｏｗ１の逆向きのフローが制御対象のフローとして通知される。装置選択部３３がＦｌｏｗ１の逆向きのフローが経由する転送装置１０の中から、転送経路を変更させる装置として転送装置１０ｂを選択すると、フローテーブル５２は、図２３の状態から図２５に示すように更新される。その後の処理は第２の実施形態を参照しながら説明した処理と同様である。
【０１１８】
図２２において、Ｆｌｏｗ１の送信レートが引き下げられると、転送装置１０ｃのポート２の使用率と、転送装置１０ｂのポート１の使用率の両方を一度に低下させることができる。このように、第４の実施形態では、転送装置１０の経由数の多いフローを優先的にレート制御の対象とすることにより、効率的に複数のポートにかかる負荷を調整できる。
【０１１９】
＜第５の実施形態＞
第５の実施形態では、制御メッセージの負荷を考慮した上で、制御メッセージの処理数が少ない転送装置１０にレート制御のための処理を行わせる場合の例を説明する。
【０１２０】
図２６は、第５の実施形態で行われる通信処理の例を説明する図である。Ｆｌｏｗ１はホストＨ４からホストＨ１の方向に向かうパケットのフローであり、Ｆｌｏｗ２はホストＨ３からホストＨ２に送信されるパケットのフローである。さらに、ＡＣ１は、ホストＨ１からホストＨ４の方向に向かうパケットのフローである。図２６に示す通信が行われているとき、制御装置２０が各転送装置１０から統計情報を取得したとする。
【０１２１】
図２７は、図２６に示す通信が行われているときに得られた統計情報を用いて更新された転送装置情報５１の例を説明する図である。なお、図２７の例では、送信バイト数は収集周期での送信バイト数である。さらに、転送装置情報５１には、データパスＩＤ、アドレス、ＴＣＰポート番号、ポート速度情報が含まれる。
【０１２２】
図２７に示す転送装置情報５１が得られたときに、転送装置１０ｃのポート３において使用率が制御閾値５３を超えたとする。すると、第１〜第４の実施形態のいずれかと同様の処理によって、制御対象のフローが決定される。
【０１２３】
装置選択部３３は、制御対象のフローが通知されると、転送装置情報５１（図２７）を参照することにより、制御装置２０と転送装置１０ａ〜１０ｃの各々との間の通信量を比較する。転送装置１０ａ〜１０ｃのいずれも、ポート４が制御装置２０に接続されているので、装置選択部３３は、各転送装置１０でのポート４の収集周期での送信バイト数を比較する。すると、転送装置１０ａと制御装置２０の間の通信量が最も少ない。そこで、装置選択部３３は、転送装置１０ａを、制御対象のフローを制御装置２０に転送させる装置に決定する。
【０１２４】
図２６の矢印Ａ３１とＡ３２は、装置選択部３３での決定後に行われる処理を示している。生成部４２は、装置選択部３３の決定に従って、転送装置１０ａに宛てて、制御対象のフローのパケットの転送先を制御装置２０に変更することを要求する（矢印Ａ３１）。転送装置１０ａは、制御装置２０からの要求に応じてフローテーブルを変更する。フローテーブルの変更後に制御対象のフローのパケットを受信すると、転送装置１０ａは、受信したパケットを制御装置２０に転送する（矢印Ａ３２）。制御装置２０は、制御対象のパケットを所定期間にわたって保持し、その後、パケットの出力ポートの情報と共に転送装置１０ａに出力する。このため、パケットは、制御装置２０への転送や制御装置２０での保持などによって遅延した状態で、宛先に向けて転送される。
【０１２５】
第５の実施形態によると、制御装置２０と転送装置１０との間の回線の状況も考慮して、転送経路を変更する転送装置１０が決定される。このため、転送装置１０が制御対象のフローを制御装置２０に送信することにより、制御装置２０と転送装置１０の間の回線に輻輳が発生する可能性が低くなる。
【０１２６】
＜第６の実施形態＞
第６の実施形態では、複数の制御装置２０があるシステムにおいて、相対的に負荷の少ない制御装置２０でレート制御を行う場合について説明する。
【０１２７】
図２８は、第６の実施形態で行われる通信処理の例を説明する図である。第６の実施形態では、システム中に制御装置２０ａと制御装置２０ｂの２台の制御装置２０が含まれている。制御装置２０ａは転送装置１０ｂと転送装置１０ｃに接続されており、制御装置２０ｂは転送装置１０ａに接続されているとする。すなわち、転送装置１０ｂと転送装置１０ｃは、制御装置２０ａによって制御されており、転送装置１０ａは制御装置２０ｂによって制御されている。さらに、制御装置２０ａと制御装置２０ｂは、互いに接続されており、システム中の転送装置１０の情報を共有している。ホストＨ１〜Ｈ４と転送装置１０ａ〜１０ｃの間の接続関係は、第１〜第５の実施形態と同様である。すなわち、転送装置１０ｂにホストＨ１とホストＨ２が接続され、転送装置１０ｃにホストＨ３とホストＨ４が接続されている。さらに、転送装置１０ａは、転送装置１０ｂと転送装置１０ｃの両方に接続されている。
【０１２８】
図２８に示すシステムにおいて、ホストＨ４からホストＨ１の方向に向かうパケットのフロー（Ｆｌｏｗ１）と、ホストＨ３からホストＨ２に送信されるパケットのフロー（Ｆｌｏｗ２）による通信が行われているとする。さらに、ホストＨ１からホストＨ４の方向に向かうパケットのフロー（Ａｃ１）による通信も行われているとする。図２８に示す通信が行われているとき、制御装置２０ａが転送装置１０ｂと転送装置１０ｃから統計情報を取得したとする。また、制御装置２０ｂが転送装置１０ａから統計情報を取得したとする。制御装置２０ａは、制御装置２０ａが取得した統計情報を、制御装置２０ｂとの間の接続を介して制御装置２０ｂに通知するとともに、制御装置２０ｂが取得した統計情報を取得する。
【０１２９】
図２９は、制御装置２０が保持する情報の例を説明する図である。転送装置情報５１は、制御装置２０が自装置の管理対象の転送装置１０から取得した情報と、システム内の他の制御装置２０から取得した統計情報を含んでいる。第６の実施形態で使用される転送装置情報５１には、各転送装置１０のデータパスＩＤに対応付けて、その転送装置１０を管理している制御装置２０の情報が記録されている。第６の実施形態で使用される転送装置情報５１にはさらに、データパスＩＤ、アドレス、ＴＣＰポート番号、ポート速度情報、収集周期で送信された送信バイト数も含まれている。
【０１３０】
テーブルＴ１１は、各制御装置２０のＣＰＵ使用率を示すテーブルである。制御装置２０ａと制御装置２０ｂは、統計情報の他に、制御装置２０自身のＣＰＵ使用率も互いに通知し合っている。テーブルＴ１１の例では、制御装置２０ａのＣＰＵ使用率は８０％であり、制御装置２０ｂのＣＰＵ使用率は２０％である。
【０１３１】
図３０は、第６の実施形態で行われる処理の例を説明するフローチャートである。以下、図２８において転送装置１０ｃのポート３の使用率が閾値を超えた場合を例として、第６の実施形態で行われる処理の例を説明する。以下の記載では、いずれの制御装置２０での処理であるかを分かりやすくするために、符号の後にその制御装置２０の符号の末尾のアルファベットを示す。例えば、監視部３１ａは制御装置２０ａ中の監視部３１であり、監視部３１ｂは制御装置２０ｂ中の監視部３１である。
【０１３２】
制御装置２０ａの統計情報取得部４１ａは、制御装置２０ａの制御対象の転送装置１０から得られた統計情報を用いて、各ポートの使用率を計算する。監視部３１ａは、統計情報取得部４１ａでの計算結果を制御閾値５３と比較する。監視部３１ａは、使用率が制御閾値５３を超えているポートを、高負荷ポートとして検出する（ステップＳ５１）。フロー選択部３２ａは、高負荷ポートを通過するフローを特定する（ステップＳ５２）。さらに、フロー選択部３２ａは、転送レートを低下させるフローを選択するとともに、制御対象のフローを決定する。フロー選択部３２ａでの制御対象のフローの決定処理は第１〜第５の実施形態のいずれかと同様である。ここでは、Ｆｌｏｗ１が転送レートを低下させるフローに選択され、Ａｃ１が制御対象のフローとして決定されたとする。
【０１３３】
生成部４２ａは、制御装置２０ａのＣＰＵ使用率が閾値Ｔｈ２を超えているかを判定する（ステップＳ５３）。ここで閾値Ｔｈ２が７０％であるとする。この場合、制御装置２０ａでのＣＰＵ使用率は８０％であるので、制御装置２０ａでのＣＰＵ使用率は閾値Ｔｈ２を超えている。このように、制御装置２０ａのＣＰＵ使用率が閾値を超えている場合、生成部４２ａは、制御対象のフローが他の制御装置２０で制御されている転送装置１０を通過するかを判定する（ステップＳ５３でＹｅｓ、ステップＳ５４）。制御対象のフローが他の制御装置２０で制御されている転送装置１０を通過する場合、他の制御装置２０に対して、制御対象のフローを通知し、レート制御を要求する（ステップＳ５４でＹｅｓ、ステップＳ５５）。図２８の例では、制御対象のフローであるＡｃ１は、転送装置１０ａを通過している。また、図２９中の転送装置情報５１より、生成部４２ａは、転送装置１０ａが制御装置２０ｂによって制御されていると認識する。すると、生成部４２ａは、制御装置２０ｂに対して、Ａｃ１を制御対象のフローとして通知するとともに、レート制御を要求する。すると、制御装置２０ｂは、制御装置２０ａからの要求に従って、レート制御を行う（ステップＳ５６）。
【０１３４】
一方、制御装置２０ａのＣＰＵ使用率が閾値Ｔｈ２を超えていない場合、生成部４２ａは、制御装置２０ａでレート処理を行うことを決定する（ステップＳ５３でＮｏ）。また、制御対象のフローが他の制御装置２０で制御されている転送装置１０を通過しない場合も、生成部４２ａは、制御装置２０ａでレート処理を行うことを決定する（ステップＳ５４でＮｏ）。ステップＳ５３かＳ５４でＮｏと判定された場合、制御装置２０ａによってレート制御が行われる（ステップＳ５７）。この場合の制御装置２０ａでの処理は、第１〜第５の実施形態と同様である。
【０１３５】
このように、第６の実施形態を用いると、複数の制御装置２０が含まれているシステムでは、処理負荷の低い制御装置２０によってレート制御が行われる。このため、複数の制御装置２０の間で負荷分散が可能となる。
【０１３６】
＜第７の実施形態＞
第７の実施形態では、コネクションレスなプロトコルが用いられているフローの送信レートをレート制御により調整する場合の処理の例を説明する。なお、以下の説明では、コネクションレスなプロトコルと合わせて用いられるアプリケーション等により、受信側のホストから送信側のホストに受信品質を通知することなどにより、送信側のホストで送信レートが調整されるものとする。例えば、ＲＴＰ(Real-time Transport Protocol)、ＲＴＣＰ(Real-time Transport Control Protocol)、ＲＴＳＰ(Real-time Transport Streaming Protocol)などのプロトコルとＵＤＰの組み合わせが用いられている場合も、第７の実施形態が適用できる。以下の説明では、コネクションレスなプロトコルの例としてＵＤＰ（User Datagram Protocol）が用いられる場合を例として説明するが、コネクションレスなプロトコルはＵＤＰに限られない。
【０１３７】
図３１は、第７の実施形態で行われる通信処理の例を説明する図である。Ｆｌｏｗ１はホストＨ４からホストＨ１の方向に向かうＴＣＰパケットのフローである。Ｆｌｏｗ２はホストＨ３からホストＨ２に送信されるパケットのフローであり、Ｆｌｏｗ２ではＵＤＰが使用されている。さらに、Ａｃｋ１は、Ｆｌｏｗ１のＡｃｋパケットを含むフローであり、ホストＨ１からホストＨ４に送信される。図３１に示す通信が行われているとき、制御装置２０が各転送装置１０から統計情報を取得したとする。
【０１３８】
図３２は、フローテーブル５２（５２−１１）の例を説明する図である。図３２は、図３１で収集された統計情報から生成されている。フローテーブル５２−１１の例では、Ｆｌｏｗ１の情報は、Ｍａｔｃｈ条件が宛先アドレス＝１０．０．０．１のフローの情報として登録されている。Ｆｌｏｗ２の情報は、Ｍａｔｃｈ条件が宛先アドレス＝１０．０．０．２のフローの情報として登録され、Ａｃｋ１の情報は、Ｍａｔｃｈ条件が宛先アドレス＝１０．０．０．４のフローの情報として登録されている。図３２のフローテーブル５２には、Ｍａｔｃｈ条件として宛先ＩＰアドレスが指定されているが、第７の実施形態においても、第２〜第６の実施形態と同様に、Ｍａｔｃｈ条件として、送信元ＩＰアドレスと宛先ＩＰアドレスの組み合わせが使用されてもよい。Ｉｎｓｔｒｕｃｔｉｏｎは、そのエントリ中のＭａｔｃｈ条件のフローに対して、そのエントリに対応付けられた転送装置１０で適用される処理ルールである。
【０１３９】
図３３は、第７の実施形態で行われる処理の例を説明するフローチャートである。第７の実施形態にかかる制御装置２０は、制御方法選択部３４を備えているものとする。なお、図３３は、ＴＣＰかＵＤＰがプロトコルとして使用される場合の例である。なお、図３３は一例である。例えば、ステップＳ６２の処理は、ステップＳ６３の判定の後に行われるなど、処理の順序が実装に応じて変更され得る。
【０１４０】
フロー選択部３２は、使用率が制御閾値５３に達したポートを通過するフローから、制御対象のフローを選択する（ステップＳ６１）。装置選択部３３は、制御対象のフローが通過する転送装置１０から、制御対象のフローを制御装置２０に転送させる転送装置１０を選択する（ステップＳ６２）。制御方法選択部３４は、制御対象のフローのプロトコルがＴＣＰであるかを判定する（ステップＳ６３）。制御対象のフローのプロトコルがＴＣＰではない場合、制御対象のフローのプロトコルはＵＤＰである（ステップＳ６３でＮｏ）。
【０１４１】
ＵＤＰはコネクションレスのパケットであるため、ＵＤＰと組み合わせて用いられるプロトコルやアプリケーションの実装に応じて、制御方法選択部３４は、送信レートを低下させるための処理ルールを決定する。例えば、ＲＴＣＰによって受信側のホストから送信側のホストに受信品質をレポートし、送信側で送信レートの調整を行うシステムであるとする。受信側のホストから送信側のホストに通知される受信品質には、遅延、ジッタ（遅延変動）、廃棄状況などがあげられる。この場合、送信側のホストで動作するアプリケーションは、受信側のホスト通知された受信品質を用いて、送信レートを調整する。ここで、送信側での送信レートの調整方法は、アプリケーションの実装に依存する。従って、ネットワークシステムにおいて、受信側での遅延が大きくなった場合に送信レートを下げるアプリケーションや、パケット廃棄が大きくなった場合に送信レートを下げるアプリケーションなどが使用されることが考えられる。
【０１４２】
制御方法選択部３４は、予め、送信側のホストのアプリケーションの種類に応じてＵＤＰを用いたフローが制御対象に選択された場合の処理を記憶している。例えば、受信側での遅延のずれが大きくなった場合に送信レートを下げるアプリケーションが使用されているシステムでは、制御方法選択部３４は、制御対象のフローのパケットを保持する時間をパケットごとに変動させることを処理として記憶している。一方、パケット廃棄が大きくなった場合に送信レートを下げるアプリケーションが使用されているシステムの場合、制御方法選択部３４は、制御対象のフローのパケットの一部を廃棄することを、制御内容として記憶してもよい。なお、これらの処理は、ＵＤＰを用いたフローに対して行われるため、パケットの廃棄が起こったとしても、ＴＣＰが用いられている場合のように急激な送信レートの低下は発生しない。制御方法選択部３４は、制御対象のフローがＴＣＰではないと判定すると、予め記憶している情報を用いて、送信レートを低下させるための処理ルールを、制御対象のフローに対する処理として設定する（ステップＳ６４）。
【０１４３】
一方、制御対象のフローがＴＣＰであると判定すると、制御方法選択部３４は、制御方法として、パケットの遅延を選択し、生成部４２に通知する。このため、第１〜第６の実施形態で説明した処理と同様に、パケットの保持時間が設定される（ステップＳ６３でＹｅｓ、ステップＳ６５）。ステップＳ６４かＳ６５の処理の後、生成部４２は、制御対象として選択された転送装置１０のフローテーブルを更新する（ステップＳ６６）。
【０１４４】
図３４は、フローテーブル５２の更新処理の例を説明する図である。フローテーブル５２−１２は、図３１のＦｌｏｗ２が制御対象のフローに選択された場合に得られるフローテーブル５２の例である。制御対象のフローとしてＦｌｏｗ２が選択され、制御対象のフローを制御装置２０に転送する転送装置１０として転送装置１０ｃが選択されたとする。この場合、生成部４２は、Ｆｌｏｗ２が転送装置１０ｃから制御装置２０に転送されるように、フローテーブル５２−１１（図３２）をフローテーブル５２−１２に変更する。
【０１４５】
一方、制御方法選択部３４は、Ｆｌｏｗ２に対して行う処理として決定した内容を、制御対象情報５４に記録する。ここでは、Ｆｌｏｗ２について転送装置１０ｃでの処理が変更されるので、設定先は転送装置１０ｃ、設定内容は、宛先ＩＰアドレス＝１０．０．０．２のフローを制御装置２０へ転送すること（Ｉｎｓｔｒｕｃｔｉｏｎ＝ＣＯＮＴＲＯＬＬＥＲ）となる。また、制御方法選択部３４は、制御装置２０において、転送装置１０ｃから転送されたＦｌｏｗ２のパケットのうちの１％を廃棄することを決定しているとする。すると、図３４に示すように、制御方法として、パケットの廃棄を行うことと、廃棄率を１％とすることが記録される。なお、図３４の例では、制御対象情報５４には、高負荷となっている装置の情報や送信レートを下げるフローの情報も含まれている。図３４の例では、転送装置１０ｃのポート３での使用率が制御閾値５３を超えたことからレート制御が開始され、送信レートを低下させるフローが、宛先ＩＰアドレス＝１０．０．０．２のフローである。
【０１４６】
図３５は、制御装置２０が行う処理の例を説明するフローチャートである。制御装置２０の受信部２３は、転送装置１０からのメッセージを受信する（ステップＳ７１）。統計情報取得部４１は、メッセージが、パケット転送メッセージであるかを判定する（ステップＳ７２）。受信したメッセージがパケット転送メッセージである場合、統計情報取得部４１は、制御対象情報５４を参照することにより、制御方法選択部３４で選択された方法を特定する（ステップＳ７２でＹｅｓ）。
【０１４７】
統計情報取得部４１は、パケット転送メッセージ中のパケットを、制御方法選択部３４で選択された方法によって処理する。例えば、パケットの廃棄が設定されている場合、制御対象情報５４に記録されている廃棄率の分だけ、パケット転送メッセージで転送されたパケットを廃棄し、残りのパケットを転送処理部４３に出力する。なお、このとき、統計情報取得部４１は、残りのパケットの転送先として、パケット転送メッセージの送信元の情報も、転送処理部４３に通知する。一方、制御方法選択部３４において、ジッタが変動するようにパケットを保持することが選択されている場合、統計情報取得部４１は、ランダムに求めた保持時間と共に、パケット転送メッセージをバッファ５６に出力する。バッファ５６は、統計情報取得部４１から入力されたパケット転送メッセージを、統計情報取得部４１から指定された期間にわたって保持し、その後、転送処理部４３に出力する。なお、制御方法選択部３４で選択された方法が保持処理であって、保持時間がパケット間で変動しない場合は、第１〜第６の実施形態と同様に、パケット転送メッセージが所定の時間だけ、バッファ５６で保持され、その後、転送処理部４３に出力される。
【０１４８】
ステップＳ７４〜Ｓ７７の処理は、図１３のステップＳ２４〜Ｓ２７を参照しながら説明した処理と同様である。なお、パケットの一部が廃棄される場合、ステップＳ７４の処理は、廃棄されていないパケットに対して行われる。
【０１４９】
このように、第７の実施形態を用いると、コネクションレスなフローについて、送信レートを小さくさせることができる。このため、例えば、図３１、図３２などに示すように、コネクション型のプロトコルのフローよりもコネクションレスなプロトコルのフローの送信レートが高い場合、第７の実施形態を用いて、効率的にポートの負荷を軽減できる。
【０１５０】
＜第８の実施形態＞
第８の実施形態では、遅延装置１２０を使用して制御装置２０の負荷をさらに軽減する場合の処理の例を説明する。
【０１５１】
図３６は、第８の実施形態が適用されるシステムの例を説明する図である。第８の実施形態が用いられるシステムでは、転送装置１０ａに遅延装置１２０が接続されている。遅延装置１２０は、受信パケットを所定の時間保持してから転送する機能を有する専用のパケット処理装置でも良い。また、遅延装置１２０は、汎用サーバにインストールされたＯＳが具備しているソフトウェアによるパケットエミュレータ機能を用いて実現されても良い。パケットエミュレータ機能として、例えばＬｉｎｕｘ（登録商標）のｎｅｔｅｍなどが用いられ得る。さらに、遅延装置１２０は、汎用サーバ上のハイパーバイザによって動作する仮想マシンによって実現されても良い。遅延装置１２０として動作する仮想マシンは、ＮＦＶ(Network Function Virtualization)により汎用サーバ上に動的に配備や有効化が行われた仮想マシンであっても良い。
【０１５２】
転送装置１０ａは、遅延装置１２０の他に、転送装置１０ｂ、転送装置１０ｃ、制御装置２０にも接続されている。遅延装置１２０は、転送装置１０ａの他に制御装置２０に接続されている。転送装置１０ｂは、ホストＨ１、ホストＨ２、転送装置１０ａ、制御装置２０に接続されている。転送装置１０ｃは、ホストＨ３、ホストＨ４、転送装置１０ａ、制御装置２０に接続されている。図３６において、転送装置１０のポートを黒い丸で示し、ポート番号を黒い丸の中に示す。遅延装置１２０に割り当てられたＭＡＣアドレスは、ｍａｃ＿１であるとする。転送装置１０ａ〜１０ｃに割り当てられているデータパスＩＤと、ホストＨ１〜Ｈ４に割り当てられているＩＰアドレスは、図４と同様である。図３６においても、制御パケットの送受信に使用されるリンクを破線、データパケットやＡｃｋパケットなどの送受信に使用されるリンクを実線で示している。
【０１５３】
第８の実施形態において、転送装置１０のいずれかのポートでの使用率が制御閾値５３に達すると、制御装置２０は、遅延装置１２０に接続されている転送装置１０ａを通過するフローから、制御対象のフローを選択する。制御装置２０中の生成部４２は、転送装置１０ａに、制御対象のフローのパケットを遅延装置１２０に転送することを要求する。さらに、生成部４２は、転送装置１０ａが遅延装置１２０から受信したパケットを、そのパケットの宛先に向けて出力させるための処理ルールも、転送装置１０ａに設定する。
【０１５４】
例えば、図３６のシステムにおいて、Ｆｌｏｗ１、Ｆｌｏｗ２、Ａｃ１、Ａｃ２の４つのフローによる通信が行われているとする。Ｆｌｏｗ１は、ホストＨ４から送信され、転送装置１０ｃ、転送装置１０ａ、転送装置１０ｂを介してホストＨ１に至るフローであるとする。Ａｃ１は、Ｆｌｏｗ１で送受信されるパケットのＡｃｋパケットのフローであるとする。Ｆｌｏｗ２は、ホストＨ３から送信され、転送装置１０ｃ、転送装置１０ａ、転送装置１０ｂを介してホストＨ２に至るフローであるとする。Ａｃ２は、Ｆｌｏｗ２で送受信されるパケットのＡｃｋパケットのフローであるとする。この状態で、転送装置１０ｃのポート３において、使用率が制御閾値５３を超えたとする。
【０１５５】
図３７は、第８の実施形態で行われる通信処理の例を説明する図である。以下、図３７を参照しながらレート制御の例を説明する。制御装置２０中の監視部３１は、使用率が制御閾値５３を越えたことをフロー選択部３２と装置選択部３３に通知する。装置選択部３３は、トポロジ情報５５などを用いて、遅延装置１２０に接続されている転送装置１０を特定し、特定した転送装置１０をフロー選択部３２に通知する。フロー選択部３２は、使用率が制御閾値５３を超えているポートを介して通信されているフローの速度の調整に使用可能なフローのうち、遅延装置１２０に接続されている転送装置１０を通過するフローを、制御対象のフローとして選択する。ここでは、Ａｃ１が制御対象のフローに選択されたとする。フロー選択部３２は、制御対象のフローの情報と、遅延装置１２０に接続されている転送装置１０（転送装置１０ａ）の情報を生成部４２に通知する。
【０１５６】
生成部４２は、転送装置１０ａにおいて、Ａｃ１のフロー中のパケットを遅延装置１２０に出力することと、遅延装置１２０から受信したホストＨ４宛てのパケットをポート２から出力することを設定するためのＦｌｏｗＭｏｄメッセージを生成する。なお、転送装置１０ａのポート２には、転送装置１０ｃが接続されているので、Ａｃ１のパケットを転送装置１０ａがポート２から出力すると、パケットを宛先に向けて転送することになる。また、以下の説明では、遅延装置１２０から受信したホストＨ４宛てのパケットを特定する際に、転送装置１０ａへのパケットの入力ポートがポート１（Ｐｏ１）であり、かつ、宛先ＩＰアドレス＝１０．０．０．４というＭａｔｃｈ条件を使用するとする。生成部４２は、生成したＦｌｏｗＭｏｄメッセージを、送信部２２を介して、転送装置１０ａに送信する（矢印Ａ４１）。生成部４２は、ＦｌｏｗＭｏｄメッセージで転送装置１０ａに通知する情報を用いて、フローテーブル５２中の転送装置１０ａ中の情報を更新する。
【０１５７】
図３８は、生成部４２によって更新されたフローテーブル５２の例を説明する図である。図３８では、転送装置１０ａで使用されるＭａｔｃｈ条件において、入力ポートがポート１、送信元ＩＰアドレス＝１０．０．０．１、かつ、宛先ＩＰアドレス＝１０．０．０．４のフローを、遅延装置１２０に接続されているポート３から出力することが記録されている。さらに、入力ポートがポート３、送信元ＩＰアドレス＝１０．０．０．１、かつ、宛先ＩＰアドレス＝１０．０．０．４のフローをポート２から出力することが記録されている。
【０１５８】
矢印Ａ４１で送信されたＦｌｏｗＭｏｄメッセージを受信した転送装置１０ａは、ＦｌｏｗＭｏｄメッセージに従って、パケットの処理を変更する。従って、転送装置１０ａのフローテーブルは、図３８に示すフローテーブル５２中で、転送装置１０ａに対応付けられた情報と同様になる。このため、変更処理後には、図３７に示すように、フローＡｃ１のパケットは、ホストＨ１から送信された後、転送装置１０ｂを介して転送装置１０ａに到達し、転送装置１０ａから遅延装置１２０に転送される。さらに、Ａｃ１のパケットは、遅延装置１２０で所定期間にわたって保持された後、転送装置１０ａに転送される。遅延装置１２０からフローＡｃ１のパケットを受信した転送装置１０ａは、フローＡｃ１のパケットをポート２から出力する。このため、フローＡｃ１のパケットは、転送装置１０ａから転送装置１０ｃに転送され、ホストＨ４に到達する。すなわち、フローＡｃ１のパケットは、図３７中のＡｃ１で示す矢印と同様のルートで転送される。
【０１５９】
このため、フローＡｃ１中のパケットは、レート制御前よりも、遅延装置１２０で保持される時間と、転送装置１０ａと遅延装置１２０を往復する時間分だけ、ホストＨ４に到達するまでにかかる時間が長くなる。このため、Ｆｌｏｗ１の送信元のホストＨ４は、Ｆｌｏｗ１の送信レートを低くし、その結果、転送装置１０ｃのポート３の使用率が低下する。
【０１６０】
図３９は、制御対象情報５４の例を説明する図である。図３６、図３７を参照しながら説明した処理が行われる場合、生成部４２により、制御対象情報５４が更新される。生成部４２は、Ａｃ１に対して行う処理として決定した内容を、制御対象情報５４に記録する。ここでは、Ａｃ１について転送装置１０ａでの処理が変更されるので、設定先は転送装置１０ａ、設定内容は、送信元ＩＰアドレス＝１０．０．０．１かつ宛先ＩＰアドレス＝１０．０．０．４のフローをポート３から出力することとなる。また、遅延装置１２０による各パケットの保持時間が１０ｍ秒の場合、図３９に示すように、制御方法が記録される。さらに、図３９の例では、制御対象情報５４には、高負荷となっている装置の情報や送信レートを下げるフローの情報も含まれている。図３９の例では、転送装置１０ｃのポート３での使用率が制御閾値５３を超えたことからレート制御が開始され、送信レートを低下させるフローが、宛先ＩＰアドレス＝１０．０．０．１かつ送信元ＩＰアドレス＝１０．０．０．４のフローである。
【０１６１】
図４０は、第８の実施形態での設定処理の例を説明するフローチャートである。フロー選択部３２は、使用率が制御閾値５３に達したポートを通過するフローから制御対象のフローを選択する（ステップＳ８１）。装置選択部３３は、選択したフローを処理する転送装置１０の中から、制御対象のフローのパケットを遅延装置１２０に転送させる転送装置１０を選択する（ステップＳ８２）。生成部４２は、ＦｌｏｗＭｏｄメッセージを送信することにより、選択された転送装置１０に、制御対象のフローを遅延装置１２０へ転送するための設定を行う（ステップＳ８３）。さらに、生成部４２は、制御装置２０に転送されてきたパケットを遅延装置１２０が保持する時間（パケット保持時間）を設定する（ステップＳ８４）。
【０１６２】
このように、第８の実施形態を用いると、遅延させるパケットの保持は、制御装置２０の代わりに遅延装置１２０において行われる。制御装置２０に処理負荷がかかることを避けつつ、レート制御を行うことができる。
【０１６３】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１６４】
例えば、制御プレーンネットワークは、汎用的なＬ２スイッチなどで接続されていても良い。制御装置２０は、フローテーブル５２を、記憶装置１０６に保持された静的な情報を読み込んで静的に設定しても良いし、フローテーブル５２の決定のためのプログラムによって動的に設定しても良い。
【０１６５】
以上の説明では、フローテーブル５２中に端末装置２０が転送装置１０から収集したポートやフローの情報が含まれていたが、これらの情報は、フローの情報とは異なるテーブルに格納されていても良い。
【０１６６】
第８の実施形態においても、第２の実施形態や第３の実施形態と同様に、データ量の少ないフローが制御対象に選択され得る。さらに、第８の実施形態においても、第４の実施形態と同様に、通過する転送装置１０の数が多いフローが優先的に制御対象に選択されても良い。
【０１６７】
いずれの実施形態においても、制御装置２０がパケットを保持する時間は実装に応じて設定される。制御装置２０での保持時間は、全てのパケットについて均等であっても良く、また、パケットごとに変更されても良い。また、送信レートが大きいフロー中のパケットほど、保持時間が長くなるように設定されても良い。さらに、レート制御を開始してからの経過時間が長くなるにつれて、保持時間を長くするなど、保持時間が経時変化するように、保持時間が設定されても良い。
【０１６８】
上述の第１〜第８の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の転送装置を制御する制御装置であって、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成する生成部と、
前記制御パケットを、前記対象パケットを処理する転送装置に送信する送信部と、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる転送処理部
を備えることを特徴とする制御装置。
（付記２）
前記複数の転送装置の各々から、当該転送装置が備える各ポートでの転送状況を取得する取得部をさらに備え、
前記生成部は、前記所定の閾値以上の転送レートで転送処理を行っていることが検出された転送装置のポートでの転送レートが前記所定の閾値を下回ると、前記制御パケットの送信先に、前記制御パケットの受信前に行っていた処理を行うことを要求する他の制御パケットを送信することにより、前記制御装置で前記対象パケットの転送を遅延させる処理を終了する
ことを特徴とする付記１に記載の制御装置。
（付記３）
前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローが複数ある場合、所定時間中に転送されるデータ量が相対的に少ないフロー中のパケットを、前記対象パケットに選択するフロー選択部
を備えることを特徴とする付記１または２に記載の制御装置。
（付記４）
前記フロー選択部は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローのうち、当該フロー中のパケットを転送処理の対象とする転送装置の数が相対的に大きいフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする付記３に記載の制御装置。
（付記５）
前記対象パケットを処理する転送装置が複数ある場合、前記制御装置との間の通信量が相対的に少ない転送装置を、前記制御パケットの送信先として選択する装置選択部をさらに備える
ことを特徴とする付記２〜４のいずれか１項に記載の制御装置。
（付記６）
複数の転送装置を制御する制御装置であって、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、パケットを所定期間保持してから転送元に送信する保持装置に変更するとともに、前記保持装置から受信したパケットを前記対象パケットの宛先に向けて転送することを要求する制御パケットを生成する生成部と、
前記制御パケットを、前記対象パケットを処理する転送装置に送信する送信部
を備えることを特徴とする制御装置。
（付記７）
複数の転送装置を制御する制御装置が、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成し、
前記制御パケットを、前記対象パケットを処理する転送装置に送信し、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる
処理を行うことを特徴とするレート制御方法。
（付記８）
前記複数の転送装置の各々から、当該転送装置が備える各ポートでの転送状況を取得し、
前記所定の閾値以上の転送レートで転送処理を行っていることが検出された転送装置のポートでの転送レートが前記所定の閾値を下回ると、前記制御パケットの送信先に、前記制御パケットの受信前に行っていた処理を行うことを要求する他の制御パケットを送信することにより、前記制御装置で前記対象パケットの転送を遅延させる処理を終了する
処理を前記制御装置が行うことを特徴とする付記７に記載のレート制御方法。
（付記９）
前記制御装置は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローが複数ある場合、所定時間中に転送されるデータ量が相対的に少ないフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする付記７または８に記載のレート制御方法。
（付記１０）
前記制御装置は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローのうち、当該フロー中のパケットを転送処理の対象とする転送装置の数が相対的に大きいフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする付記９に記載のレート制御方法。
（付記１１）
前記制御装置は、前記対象パケットを処理する転送装置が複数ある場合、前記制御装置との間の通信量が相対的に少ない転送装置を、前記制御パケットの送信先として選択する
ことを特徴とする付記８〜１０のいずれか１項に記載のレート制御方法。
（付記１２）
複数の転送装置と、
前記複数の転送装置を制御する制御装置
を含み、
前記制御装置は、
転送レートが所定の閾値以上である前記転送装置のポートを介して転送される対象パケットの出力先を、前記制御装置に変更することを要求する制御パケットを生成し、
前記制御パケットを、前記対象パケットを処理する転送装置に送信し、
前記対象パケットを受信すると、前記対象パケットを所定期間保持してから、前記対象パケットの転送元に転送し、前記対象パケットを前記転送元から前記対象パケットの宛先に向けて転送させる
ことを特徴とするネットワークシステム。
（付記１３）
前記制御装置は、
前記複数の転送装置の各々から、当該転送装置が備える各ポートでの転送状況を取得し、
前記所定の閾値以上の転送レートで転送処理を行っていることが検出された転送装置のポートでの転送レートが前記所定の閾値を下回ると、前記制御パケットの送信先に、前記制御パケットの受信前に行っていた処理を行うことを要求する他の制御パケットを送信することにより、前記制御装置で前記対象パケットの転送を遅延させる処理を終了する
ことを特徴とする付記１２に記載のネットワークシステム。
（付記１４）
前記制御装置は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローが複数ある場合、所定時間中に転送されるデータ量が相対的に少ないフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする付記１２または１３に記載のネットワークシステム。
（付記１５）
前記制御装置は、前記転送レートが所定の閾値以上である前記転送装置のポートを介して転送されるフローのうち、当該フロー中のパケットを転送処理の対象とする転送装置の数が相対的に大きいフロー中のパケットを、前記対象パケットに選択する
ことを特徴とする付記１４に記載のネットワークシステム。
【符号の説明】
【０１６９】
１０  転送装置
２０  制御装置
２１  送受信部
２２  送信部
２３  受信部
３０  制御部
３１  監視部
３２  フロー選択部
３３  装置選択部
３４  制御方法選択部
４０  メッセージ処理部
４１  統計情報取得部
４２  生成部
４３  転送処理部
５０  記憶部
５１  転送装置情報
５２  フローテーブル
５３  制御閾値
５４  制御対象情報
５５  トポロジ情報
５６  バッファ
１０１  プロセッサ
１０２  メモリ
１０３  入力装置
１０４  出力装置
１０５  バス
１０６  記憶装置
１０７  可搬記憶媒体駆動装置
１０８  可搬記憶媒体
１０９  ネットワークインタフェース
１２０  遅延装置
【図１】
2017201756.tif 000003
【図２】
2017201756.tif 000004
【図３】
2017201756.tif 000005
【図４】
2017201756.tif 000006
【図５】
2017201756.tif 000007
【図６】
2017201756.tif 000008
【図７】
2017201756.tif 000009
【図８】
2017201756.tif 000010
【図９】
2017201756.tif 000011
【図１０】
2017201756.tif 000012
【図１１】
2017201756.tif 000013
【図１２】
2017201756.tif 000014
【図１３】
2017201756.tif 000015
【図１４】
2017201756.tif 000016
【図１５】
2017201756.tif 000017
【図１６】
2017201756.tif 000018
【図１７】
2017201756.tif 000019
【図１８】
2017201756.tif 000020
【図１９】
2017201756.tif 000021
【図２０】
2017201756.tif 000022
【図２１】
2017201756.tif 000023
【図２２】
2017201756.tif 000024
【図２３】
2017201756.tif 000025
【図２４】
2017201756.tif 000026
【図２５】
2017201756.tif 000027
【図２６】
2017201756.tif 000028
【図２７】
2017201756.tif 000029
【図２８】
2017201756.tif 000030
【図２９】
2017201756.tif 000031
【図３０】
2017201756.tif 000032
【図３１】
2017201756.tif 000033
【図３２】
2017201756.tif 000034
【図３３】
2017201756.tif 000035
【図３４】
2017201756.tif 000036
【図３５】
2017201756.tif 000037
【図３６】
2017201756.tif 000038
【図３７】
2017201756.tif 000039
【図３８】
2017201756.tif 000040
【図３９】
2017201756.tif 000041
【図４０】
2017201756.tif 000042