(57)【特許請求の範囲】
【請求項１】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第１のキューに格納する手順と、
前記第１のキューに格納されたデータを送信する手順と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納する手順と、
前記輻輳が検出された後に第３のキューを生成して、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを前記第３のキューに格納する手順と、
前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するデータ送信と、前記第３のキューに格納されるデータを読み出して前記第１のキューからのデータ送信で使用される帯域幅および前記第２のキューからのデータ送信で使用される帯域幅よりも小さい帯域幅を用いて送信するデータ送信とを並行して実行する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【請求項２】
前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第１のキューに格納する手順と、
前記第２のキューおよび前記第３のキューに格納されるデータが全て送信されてから、前記第１のキューに格納されるデータを読み出して送信する手順と、をさらにコンピュータに実行させることを特徴とする請求項１に記載の輻輳制御プログラム。
【請求項３】
複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する手順をさらにコンピュータに実行させ、
前記第２のキューに格納する手順は、
複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先以外のデータを前記第２のキューに格納し、
前記第３のキューに格納する手順は、
前記複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先のデータを前記第３のキューに格納することを特徴とする請求項１または２に記載の輻輳制御プログラム。
【請求項４】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第１のキューに格納する手順と、
前記第１のキューに格納されたデータを送信する手順と、
前記中継装置によって第１の輻輳と第２の輻輳が検出された場合に、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先以外のデータと第２の輻輳が検出された宛先以外のデータとを第２のキューに格納する手順と、
前記第１の輻輳と第２の輻輳が検出された後に第３のキューおよび第４のキューを生成して、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先のデータを前記第３のキューに格納する手順と、
前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第２の輻輳が検出された宛先のデータを前記第４のキューに格納する手順と、
前記第１のキューに格納されるデータが送信されてから、前記第２のキューに格納されるデータを読み出して送信するデータ送信と、前記第３のキューに格納されるデータを読み出して前記第１のキューからのデータ送信で使用される帯域幅および前記第２のキューからのデータ送信で使用される帯域幅よりも小さい帯域幅を用いて送信するデータ送信と、前記第４のキューに格納されるデータを読み出して前記小さい帯域幅を用いて送信するデータ送信と、を並行して実行する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【請求項５】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第１のキューに格納する第１格納部と、
前記第１格納部によって前記第１のキューに格納されたデータを送信する第１送信部と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納する第２格納部と、
前記輻輳が検出された後に第３のキューを生成して、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを前記第３のキューに格納する第３格納部と、
前記第１格納部によって前記第１のキューに格納されたデータが全て送信されてから、前記第２格納部によって前記第２のキューに格納されたデータを読み出して送信するデータ送信と、前記第３格納部によって前記第３のキューに格納されたデータを読み出して前記第１のキューからのデータ送信で使用される帯域幅および前記第２のキューからのデータ送信で使用される帯域幅よりも小さい帯域幅を用いて送信するデータ送信とを並行して実行する第２送信部と、
を有することを特徴とする情報処理装置。
【請求項６】
データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに実行させる輻輳制御方法であって、
受信したデータを第１のキューに格納し、
前記第１のキューに格納されたデータを送信し、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納し、
前記輻輳が検出された後に第３のキューを生成して、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを前記第３のキューに格納し、
前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するデータ送信と、前記第３のキューに格納されるデータを読み出して前記第１のキューからのデータ送信で使用される帯域幅および前記第２のキューからのデータ送信で使用される帯域幅よりも小さい帯域幅を用いて送信するデータ送信とを並行して実行する、
ことを特徴とする輻輳制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの輻輳制御に関する。
【背景技術】
【０００２】
従来、サーバやレイヤ２スイッチ（Layer  2  Switch）などで形成されるネットワークで、通信要求の過多等により通信が成立しにくくなる状態である輻輳が発生した場合、サーバでは、輻輳の悪化を防止する。例えば、サーバは、輻輳の悪化を防止する手法として、パケットやフレームなどのデータをキュー（Queue）から送信する際の帯域幅を変更するレート調整を実行する。
【０００３】
図１８と図１９に示した例を用いてサーバが実行するレート調整について具体的に説明する。図１８は、１つのキューでデータを送信するサーバ例を示す図であり、図１９は、宛先アドレスごとにキューを設けてデータを送信するサーバの例を示す図である。
【０００４】
図１８に示すサーバ１は、宛先アドレスＡ、Ｂ、Ｃのそれぞれのデータを１つのキューに格納し、格納した順番でレイヤ２スイッチ２に送信する。図１９に示すサーバ１は、宛先アドレスＡ用のキュー、宛先アドレスＢ用のキュー、宛先アドレスＣ用のキューをそれぞれ設け、それぞれのキューにおいて格納した順番でデータをレイヤ２スイッチ２に送信する。図１８および図１９に示すレイヤ２スイッチ２は、サーバ１から受信した宛先アドレスＡまたはＣのデータを送信ポート１から送信し、宛先アドレスＢのデータを送信ポート２から送信する。
【０００５】
この図１８と図１９に示したネットワークにおいて、レイヤ２スイッチ２の送信ポート１で輻輳が発生し、サーバが輻輳を検出したとする。図１８の場合、サーバ１は、輻輳が解除されるまで、１つのキューで形成される出力ポートのレート調整を実行して輻輳の悪化を防止する。また、図１９の場合、サーバ１は、輻輳が悪化する原因となる宛先アドレスＡおよびＣのデータを出力するキューについてレート調整を実行し、輻輳に影響を及ぼさない宛先アドレスＢのデータについてはレート調整を実行しない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−１７７５７５号公報
【特許文献２】特開昭６３−１０２５２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術では、効率的なデータ送信を実行できないという課題があった。
【０００８】
例えば、図１８の手法では、輻輳に影響を与えない宛先アドレスＢのデータについてもレート調整が実行されるので、宛先アドレスＢのデータの送信遅延等が発生する。したがって、図１８の手法では、不要な送信遅延が発生する場合があり、効率的なデータ送信とは言い難い。
【０００９】
図１９の手法では、輻輳に影響を与えない宛先アドレスＢのデータについてはレート調整が実行されないので、宛先アドレスＢのデータの送信遅延等を回避できる。ところが、サーバ１は、データの宛先ごとにキューを設定する必要があり、キュー用に多くのメモリ容量を要する。例えば、４８個のポートを有するレイヤ２スイッチ５台各々が２３５台のサーバに接続されており、１つのキューを４０００バイトとした場合、サーバは、２３４×４０００＝９３６０００バイトのメモリ容量を必要とする。したがって、図１９の手法では、メモリ容量が大きくなり、効率的なデータ送信とは言い難い。
【００１０】
１つの側面では、効率的なデータ送信を実行できる輻輳制御プログラム、情報処理装置および輻輳制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
サーバは、送信対象であるデータを第１のキューに格納する。サーバは、第１のキューに格納されるデータを読み出して送信する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを第２のキューに格納する。サーバは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを第３のキューに格納する。サーバは、第１のキューに格納されるデータが全て送信されてから、第２のキューに格納されるデータを読み出して送信する。サーバは、第１のキューに格納されるデータが全て送信されてから、第３のキューに格納されるデータを読み出し、帯域を制御して送信する。
【発明の効果】
【００１２】
効率的なデータ送信を実行できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るシステムの全体構成を示す図である。
【図２】図２は、実施例１に係るシステムにおいて輻輳が発生した場合のサーバのキュー制御例を示す図である。
【図３】図３は、Ｌ２スイッチの構成を示すブロック図である。
【図４】図４は、Ｌ２スイッチが送信する輻輳制御パケットの例を示す図である。
【図５】図５は、サーバの構成を示すブロック図である。
【図６】図６は、キュー領域が有する送信キューの例を示す図である。
【図７】図７は、送信キュー構成テーブルに記憶される情報の例を示す図である。
【図８】図８は、輻輳検出前の送信キュー管理テーブルに記憶される情報の例を示す図である。
【図９】図９は、輻輳検出後の送信キュー管理テーブルに記憶される情報の例を示す図である。
【図１０】図１０は、実施例１に係るサーバにおける輻輳検出処理の流れを示すフローチャートである。
【図１１】図１１は、実施例１に係る輻輳時のデータ格納処理の流れを示すフローチャートである。
【図１２】図１２は、実施例１に係る輻輳時のデータ送信処理の流れを示すフローチャートである。
【図１３】図１３は、実施例２に係るシステムにおいて輻輳が解除される前の状態例を示す図である。
【図１４】図１４は、実施例２に係るシステムにおいて輻輳が解除された場合の制御例を示す図である。
【図１５】図１５は、実施例３に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例１を示す図である。
【図１６】図１６は、実施例３に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例２を示す図である。
【図１７】図１７は、輻輳制御プログラムを実行するコンピュータシステムの例を示す図である。
【図１８】図１８は、１つのキューでデータを送信するサーバ例を示す図である。
【図１９】図１９は、宛先アドレスごとにキューを設けてデータを送信するサーバの例を示す図である。
【図２０】図２０は、受信ＦＩＦＯメモリと退避用ＦＩＦＯメモリとを設けてパケットを送信するパケット交換機の例を示す図である。
【図２１】図２１は、受信ＦＩＦＯメモリと退避用ＦＩＦＯメモリとを設けてパケットを送信するパケット交換機において、輻輳が解除された場合の制御例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、開示する輻輳制御プログラム、情報処理装置および輻輳制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で、適宜組み合わせることが可能である。
【００１５】
まず、上述した輻輳の悪化を防止する手法とは別に、輻輳の悪化を防止できるものの、輻輳解除後にデータの順番を担保できない例について説明する。図２０は、受信ＦＩＦＯメモリと退避用ＦＩＦＯメモリとを設けてパケットを送信するパケット交換機の例を示す図である。
【００１６】
図２０に示すパケット交換機５は、受信したパケットを受信ＦＩＦＯメモリに格納する。そして、パケット交換機５は、輻輳が検出されるまでは、受信ＦＩＦＯメモリからパケットを読み出して出力待ちＦＩＦＯメモリに格納した後、出力待ちＦＩＦＯメモリからＦＩＦＯ制御でパケットを読み出して送信する。一方、輻輳が検出された場合、パケット交換機５は、輻輳に影響を及ぼすパケットについては、受信ＦＩＦＯメモリからパケットを読み出して、退避用ＦＩＦＯメモリに格納して退避させる。このようにで、パケット交換機５は、輻輳に影響を及ぼすパケットの送信を抑止でき、輻輳の悪化を防止できる。
【００１７】
ところが、このパケット交換機５では、輻輳解除後にデータの順番を担保できない。図２１は、受信ＦＩＦＯメモリと退避用ＦＩＦＯメモリとを設けてパケットを送信するパケット交換機において、輻輳が解除された場合の制御例を示す図である。図２１に示すパケット交換機５は、退避用ＦＩＦＯメモリにパケットＡ３、Ａ４が格納されている状態で輻輳が解除され、新たなパケットＡ５が送信対象となった例を示している。なお、パケットＡ３、Ａ４、Ａ５は、若番の順に送信すべきものとする。
【００１８】
このような場合、パケット交換機５は、輻輳が解除されたので、退避用ＦＩＦＯメモリに格納されるパケットＡ３、Ａ４を順番に読み出して、出力待ちＦＩＦＯメモリに格納する。一方、パケット交換機５は、輻輳解除後に新たに送信対象となったパケットＡ５を受信ＦＩＦＯメモリに格納した後、出力待ちＦＩＦＯメモリに格納する。
【００１９】
このとき、退避用ＦＩＦＯメモリからＡ３やＡ４を読み出すタイミングと、受信ＦＩＦＯメモリからＡ５を読み出すタイミングとによって、パケットの順番が入れ替わる可能性がある。例えば、Ａ３を読み出した後かつＡ４を読み出す前に、Ａ５を読み出した場合には、出力待ちＦＩＦＯメモリには、Ａ３、Ａ５、Ａ４の順番で格納される。また、例えば、Ａ３を読み出す前に、Ａ５を読み出した場合には、出力待ちＦＩＦＯメモリには、Ａ５、Ａ３、Ａ４の順番で格納される。つまり、いずれの場合でも、出力待ちＦＩＦＯメモリに格納された順番で送信されるので、正しい順番で送信されず、パケットの不整合が発生する。
【００２０】
このように、受信ＦＩＦＯメモリと退避用ＦＩＦＯメモリとを設けてパケットを送信する技術は、輻輳の悪化を防止できるものの、輻輳解除後にデータの順番を担保できないので、有効な手法とは言えない。以下の各実施例では、輻輳の悪化を防止でき、輻輳解除後にデータの順番を担保することもできる輻輳制御プログラム、情報処理装置および輻輳制御方法について説明する。
【実施例１】
【００２１】
図１と図２を用いて、実施例１に係るシステムの全体構成を説明する。ここでは、輻輳が検出されるまでの制御と輻輳が検出された後の制御例を説明する。図１は、実施例１に係るシステムの全体構成を示す図であり、図２は、実施例１に係るシステムにおいて輻輳が発生した場合のサーバのキュー制御例を示す図である。図１に示すように、実施例１に係るシステムは、レイヤ２スイッチ（以降、Ｌ２スイッチと呼ぶ）１０と、Ｌ２スイッチ２０と、サーバ３０とが接続されている。
【００２２】
Ｌ２スイッチ１０は、サーバ３０とＬ２スイッチ２０間におけるデータの中継、サーバ３０と他の装置間におけるデータの中継、Ｌ２スイッチ２０と他の装置間におけるデータの中継等を制御するスイッチングハブなどである。例えば、Ｌ２スイッチ１０は、サーバ３０から宛先アドレスＡ又は宛先アドレスＣのデータを受信した場合、受信した宛先アドレスＡ又は宛先アドレスＣのデータを送信ポート１から宛先に送信する。また、Ｌ２スイッチ１０は、サーバ３０から宛先アドレスＢのデータを受信した場合、受信した宛先アドレスＢのデータを送信ポート２から宛先に送信する。
【００２３】
Ｌ２スイッチ２０は、サーバ３０と他の装置間におけるデータの中継、Ｌ２スイッチ１０と他の装置間におけるデータの中継等を制御するスイッチングハブなどである。例えば、Ｌ２スイッチ２０は、Ｌ２スイッチ１０から宛先アドレスＡのデータを受信した場合、受信した宛先アドレスＡのデータを送信ポート１から宛先に送信する。また、Ｌ２スイッチ２０は、Ｌ２スイッチ１０から宛先アドレスＣのデータを受信した場合、受信した宛先アドレスＣのデータを送信ポート２から宛先に送信する。
【００２４】
なお、ここでは、Ｌ２スイッチを用いた例を示したが、これに限定されるものではない。例えば、ルータやレイヤ３スイッチなどを用いることもできる。また、図１に示すシステムでやり取りされるデータとは、フロー、パケット、フレーム、リクエスト、各種要求、各種応答などであり、一般的な情報処理システムでやり取りされる情報であれば、どのような情報であってもよい。
【００２５】
サーバ３０は、クライアント端末にＷｅｂサービスやデータベースなどを提供するサーバであってもよく、Ｗｅｂサービスやデータベースなどのサービスを利用するコンピュータであってもよい。
【００２６】
このサーバ３０は、送信対象であるデータを第１のキューであるスタティックキュー（以降、Ｓキューと呼ぶ）１に格納する。そして、サーバ３０は、Ｓキュー１に格納されるデータを読み出して送信する。例えば、サーバ３０は、図１に示すように、入力又は生成されたデータＡ１、データＣ１、データＢ１、データＡ２の順にＳキュー１に格納し、格納した順番で送信する。なお、各実施例で示すデータＡなどは、宛先Ａのデータであることを示し、Ａ１、Ａ２は送信する順番を示す。つまり、データＡ１とデータＡ２の関係としては、両方とも宛先Ａのデータであり、データＡ２よりもデータＡ１を先に送信すべきであることを示す。
【００２７】
そして、サーバ３０は、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを第２のキューであるＳキュー２に格納する。また、サーバ３０は、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを第３のキューであるダイナミックキュー（以降、Ｄキューと呼ぶ）に格納する。
【００２８】
例えば、図１に示すＬ２スイッチ２０の送信ポート１において、宛先アドレスＡへの送信経路で輻輳が検出されたとする。この場合、サーバ３０は、図２の（１）に示すように、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先Ａ以外のデータＢ２、Ｃ２をＳキュー２に格納する。また、サーバ３０は、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先のデータＡ３をＤキューに格納する。
【００２９】
そして、サーバ３０は、Ｓキュー１に格納されるデータが送信されてから、Ｓキュー２に格納されるデータを読み出して送信する。また、サーバ３０は、Ｓキュー１に格納されるデータが送信されてから、Ｄキューに格納されるデータを読み出し、帯域を制御して送信する。
【００３０】
上述した例の場合、サーバ３０は、Ｓキュー２およびＤキューにデータが格納されているものの、輻輳前にＳキュー１にデータが格納されているので、Ｓキュー１のデータをＳキュー２およびＤキューより先に送信する。つまり、サーバ３０は、図２の（２）に示すように、Ｓキュー１の最後に格納されているデータＡ２の送信が完了するまで、Ｓキュー２に格納されているデータおよびＤキューに格納されているデータの送信を実行しない。この間、サーバ３０は、新たに送信対象となったデータＡ４についてはＤキューに格納し、データＢ３についてはＳキュー２に格納する。
【００３１】
そして、サーバ３０は、図２の（３）に示すように、Ｓキュー１に格納されていた最後のデータＡ２が送信されると、Ｓキュー２に格納されているデータＢ２、Ｃ２、Ｂ３の順に読み出して送信する。同様に、サーバ３０は、図２の（３）に示すように、Ｓキュー１の最後に格納されるデータＡ２が送信されると、Ｄキューに格納されているデータＡ３、Ａ４の順に読み出し、帯域を制御して送信する。
【００３２】
その後、サーバ３０は、輻輳が解除されるまで、輻輳が検出された宛先以外のデータＣ３などについてはＳキュー２に格納し、輻輳が検出された宛先のデータＡ５などについてはＤキューに格納する。つまり、サーバ３０は、輻輳が解除されるまで、輻輳検出前まで使用していたＳキュー１にはデータを格納しない。
【００３３】
このように、実施例１によれば、サーバ３０は、輻輳が検出されるまでは１つのキューで送信制御を実施する。輻輳が検出された場合には、サーバ３０は、輻輳が検出された宛先以外のデータを別のキューに格納して送信制御し、輻輳が検出された宛先のデータを帯域制御用のキューに格納して送信制御する。つまり、サーバ３０は、輻輳検出前と輻輳検出後でデータを格納するキューを切り替えるとともに、輻輳に影響を与えるデータについてのみレート調整を実行する。また、サーバ３０は、データ送信先が複数ある場合でも、少なくとも３つのキューを用いることで、上述した処理を実行できる。
【００３４】
この結果、実施例１に係るサーバ３０は、輻輳発生時には、輻輳に影響を与えるデータと輻輳に影響を与えないデータを別々のキューに格納するので輻輳に影響を与えない宛先のデータの送信遅延を防止することができる。また、サーバ３０は、宛先ごとにキューを設ける必要もないので、キュー数を削減することができる。また、サーバ３０は、輻輳前に格納されたデータの送信が完了してから、輻輳に影響を与えない宛先のデータおよび輻輳に影響を与える宛先のデータの送信を開始するので、送信順序の逆転を防止できる。したがって、実施例１に係るサーバ３０は、効率的なデータ送信を実行できる。
【００３５】
［各装置の構成］
次に、図１に示した各装置の構成について説明する。ここでは、Ｌ２スイッチの構成、サーバの構成を説明する。なお、図１に示したＬ２スイッチ１０とＬ２スイッチ２０は同様の構成を有するので、ここではＬ２スイッチ１０について説明する。
【００３６】
（Ｌ２スイッチの構成）
図３は、Ｌ２スイッチの構成を示すブロック図である。図３に示すように、Ｌ２スイッチ１０は、通信インタフェース１１と、ＭＡＣ（Media  Access  Control）テーブル１２と、キュー領域１３と、スイッチング実行部１４と、輻輳検出部１５とを有する。なお、ＭＡＣテーブル１２やキュー領域１３は、メモリなどに設けられる記憶部である。
【００３７】
通信インタフェース１１は、ＭＡＣアドレス等が割り当てられたポート１〜ポートｎ（ｎ：自然数）を有し、他の装置との間の通信を制御する。例えば、通信インタフェース１１は、各ポートからデータを受信してスイッチング実行部１４や輻輳検出部１５に出力する。また、通信インタフェース１１は、スイッチング実行部１４や輻輳検出部１５から出力されたデータを、スイッチング実行部１４や輻輳検出部１５に指定されたポートから宛先に送信する。
【００３８】
ＭＡＣテーブル１２は、データの送信先に関する経路情報を記憶する。例えば、ＭＡＣテーブル１２は、データのヘッダ等に格納されるＭＡＣアドレスやＩＰ（Internet  Protocol）アドレスなどのアドレス情報に対応付けて、送信先となる装置やネットワーク機器の情報、送信先となるポートなどを記憶する。なお、ＭＡＣテーブル１２は、予め固定された情報を記憶するスタティックルーティングで制御されてもよく、他装置からの情報に基づいて更新するダイナミックに制御されてもよい。
【００３９】
キュー領域１３は、通信インタフェース１１の各ポートごとに、ＦＩＦＯ（First-In  First-Out）で制御される受信キューと送信キューとを有する。例えば、キュー領域１３は、通信インタフェース１１のポート１で受信され、スイッチング実行部１４によっていずれかの受信キューに格納されたデータを当該受信キューの最後に格納する。
【００４０】
スイッチング実行部１４は、データのスイッチング制御を実行して、データを宛先に送信する。例えば、スイッチング実行部１４は、ポート１の受信キューからデータを読み出した場合、ＭＡＣテーブル１２を参照して、当該データのヘッダ等に含まれるアドレス情報から宛先を特定する。さらに、スイッチング実行部１４は、ＭＡＣテーブル１２を参照して、特定した宛先へ接続されるポートを特定する。そして、スイッチング実行部１４は、特定したポートの送信キューに当該データを格納する。また、スイッチング実行部１４は、各ポートの送信キューの先頭に格納されるデータを読み出し、読み出したデータを各ポートから宛先に送信する。
【００４１】
輻輳検出部１５は、ＩＥＥＥ８０２．１Ｑａｕで規定される輻輳制御方式を用いて輻輳を検出し、輻輳を検出したことを示す輻輳制御パケットをＬ２スイッチ１０に接続される各装置に、輻輳が解除されるまで定期的に送信する。輻輳検出部１５は、各送信キューの滞留状況等を監視することで、輻輳を検出する。そして、輻輳検出部１５は、輻輳制御パケットを生成して各ポートから送信する。なお、輻輳検出部１５は、輻輳が解除された場合には、輻輳制御パケットの送信を停止する。
【００４２】
図４は、Ｌ２スイッチが送信する輻輳制御パケットの例を示す図である。図４に示すように、輻輳制御パケットは、「ＤＡ、ＳＡ、ＶＬＡＮ（Virtual  Local  Area  Network）」を有する。さらに、輻輳制御パケットは、輻輳制御メッセージである「バージョン、制御レート、輻輳ポイント識別子、Encapsulated  ＤＡ、Encapsulated  MSDU（Mac  Service  Data  Unit）  length、Encapsulated  MSDU」を有する。「ＤＡ」は、輻輳制御パケットの宛先アドレスを示し、例えば、サンプリングされたパケットの送信先となるアドレスであり、サンプリングされたパケットがサーバ３０から送信されたものである場合には、サーバ３０のＭＡＣアドレスが格納される。
【００４３】
「ＳＡ」は、輻輳制御パケットの送信元アドレスを示し、例えばＬ２スイッチ１０のＭＡＣアドレスが格納される。「ＶＬＡＮ」は、ネットワーク構成がＶＬＡＮで構成されている場合に、サンプリングされたパケットに含まれるＶＬＡＮの識別子等が格納される。「バージョン」は、サンプリングされたパケットのバージョンが格納される。「制御レート」は、輻輳時に使用する帯域情報が格納される。この「制御レート」は、管理者等によって予め取り決められていてもよく、輻輳検出部１５がネットワークの使用率やキューの帯域状況から特定するようにしてもよい。
【００４４】
「輻輳ポイント識別子」は、輻輳の検出ポイントを示し、例えば、ポートのＭＡＣアドレスなどが使用される。「Encapsulated  ＤＡ」は、輻輳が発生している宛先のアドレス情報を示し、サンプリングされたパケットの宛先となるアドレスが格納される。例えば、「Encapsulated  ＤＡ」は、サンプリングされたパケットがアドレスＡに送信されたものである場合には、アドレスＡが格納される。「Encapsulated  MSDU  length」は、ＭＡＣ層が上位層から受け取るフレームボディの長さであり、例えばサンプリングされたパケットの長さである。「Encapsulated  MSDU」は、ＭＡＣ層が上位層から受け取るフレームボディであり、例えば、サンプリングされたパケットの宛先、送信元、ＶＬＡＮ情報、ＰＤＵ（Protocol  Data  Unit）等で形成される情報である。
【００４５】
（サーバの構成）
図５は、サーバの構成を示すブロック図である。図５に示すように、サーバ３０は、通信ポート３１と、データ記憶領域３２と、キュー領域３３と、送信キュー構成テーブル３４と、送信キュー管理テーブル３５と、制御部３６とを有する。なお、データ記憶領域３２、キュー領域３３、送信キュー構成テーブル３４、送信キュー管理テーブル３５は、メモリなどに設けられる記憶部である。
【００４６】
通信ポート３１は、ＭＡＣアドレスが割り当てられ、他の装置との間の通信を制御するインタフェースである。例えば、通信ポート３１は、制御部３６の第１送信部３６ｄ、第２送信部３６ｅ、第３送信部３６ｆから出力されたデータを宛先に送信する。また、通信ポート３１は、Ｌ２スイッチ１０から受信した輻輳制御パケットを受信制御部３６ａや輻輳検出部３６ｂに出力する。
【００４７】
データ記憶領域３２は、制御部３６による各種処理に必要なデータおよびプログラムを格納するとともに、外部から受信したデータや送信対象となるデータなどを記憶する。例えば、データ記憶領域３２は、制御部３６等によって生成された送信対象のデータを記憶する。また、データ記憶領域３２は、受信制御部３６ａによって格納された、通信ポート３１によって受信されたデータを記憶する。
【００４８】
キュー領域３３は、通信ポート３１から送信されるデータを格納する送信キューと、通信ポート３１によって受信されたデータを格納する受信キューとを有する。例えば、送信キューは、輻輳が検出される前までに送信対象となるデータを記憶するＳキュー１を有する。さらに、送信キューは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータを記憶するＳキュー２を有する。また、送信キューは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータを記憶するＤキューを有する。また、受信キューは、通信ポート３１によって受信されたデータを格納する。
【００４９】
ここで、説明上、送信キューを明示的に示した一例を用いて具体的に説明する。図６は、キュー領域が有する送信キューの例を示す図である。図６に示すように、キュー領域は、「キュー番号、１、２、・・・、１０、・・・、ｎ（ｎ：自然数）」に区分けして形成される。「キュー番号」は、管理者等によって設定された、送信キューを一意に識別する識別子である。「１〜ｎ」は、格納された順番であり、若番から順に読み出されて送信される。
【００５０】
図６の場合、「Ｓキュー１」は、データＣ１、データＣ２、・・・、データＣ１０までの１０個のデータで待ち行列を形成し、データＣ１から順に読み出されて送信される。「Ｓキュー２」は、データＢ１、データＢ２の２個のデータで待ち行例が形成されており、データＢ１から順に読み出されて送信される。「Ｄキュー」は、データＡ１のみで待ち行列が形成されており、データＡ１から順に読み出されて送信される。
【００５１】
なお、キュー領域３３では、制御部３６の各送信部等によって、各送信キューからデータ送信又は各キューにデータが格納されるたびに更新される。例えば、Ｓキュー１の先頭に格納されているデータＣ１が読み出されて送信された場合、第１送信部３６ｄは、キュー領域３３の「キュー番号＝Ｓキュー１」の「２」に格納される「データＣ２」を「１」に移動させる。つまり、第１送信部３６ｄは、Ｓキュー１の先頭のデータが送信された場合には、送信されたデータ以降に格納されているデータを随時前の格納位置に移動させる。また、キュー領域３３が図６に示した状態にあり、Ｄキューに新たなデータＡ２が格納された場合に、第３送信部３６ｆは、キュー領域３３の「キュー番号＝Ｄキュー」の「２」にデータＡ２を格納する。
【００５２】
また、キュー領域３３は、Ｄキューを常に有している必要はなく、Ｄキューが生成できる領域を確保しておくことで、後述する格納部３６ｃが動的に生成することもできる。なお、キュー領域３３が有する各キューは、ＦＩＦＯなどの手法で制御される。
【００５３】
送信キュー構成テーブル３４は、キュー領域３３が有する各送信キューの構成情報を記憶する。図７は、送信キュー構成テーブルに記憶される情報の例を示す図である。図７に示すように、送信キュー構成テーブル３４は、「キュー番号、最大キュー長、キュー長、帯域情報」を記憶する。「キュー番号」は、管理者等によって設定された、送信キューを一意に識別する識別子であり、「最大キュー長」は、管理者等によって設定された、送信キューに蓄積可能な最大のデータ容量を示す。「キュー長」は、送信キューに蓄積されているデータ容量を示し、各送信キューに格納される状態によって動的に更新される。「帯域情報」は、送信キューに割り振られた帯域幅を示し、輻輳検出部３６ｂなどによって動的に更新される。
【００５４】
図７の場合、「Ｓキュー１」には、帯域幅５０Ｍｂｐｓが割り与えられ、最大１２８Ｋバイト格納可能であり、現在３０Ｋバイト格納されていることを示す。また、「Ｓキュー２」には、帯域幅５０Ｍｂｐｓが割り与えられ、最大１２８Ｋバイト格納可能であり、現在データが格納されていないことを示す。「Ｄキュー」には、帯域幅２０Ｍｂｐｓが割り与えられ、最大６４Ｋバイト格納可能であり、現在１０Ｋバイト格納されていることを示す。
【００５５】
なお、図７に示した情報はあくまで例示であり、他の情報を記憶していてもよい。また、最大キュー長の単位等もあくまで例示であり、これに限定されるものではない。また、キュー構成テーブル３４が記憶する情報は、キュー領域３３が有するキューの状態によって適宜更新される。例えば、キュー領域３３がＤキューを２つ有する場合には、送信キュー構成テーブル３４にも２つのＤキューの構成情報が記憶される。
【００５６】
送信キュー管理テーブル３５は、キュー領域３３が有する各送信キューごとに、格納対象や輻輳状況等を記憶する。図８は、輻輳検出前の送信キュー管理テーブルに記憶される情報の例を示す図であり、図９は、輻輳検出後の送信キュー管理テーブルに記憶される情報の例を示す図である。
【００５７】
図８や図９に示すように、送信キュー管理テーブル３５は、「キュー番号、輻輳ポイント識別子、宛先」を対応付けて記憶する。「キュー番号」は、送信キューを一意に識別する識別子であり、「輻輳ポイント識別子」は、輻輳が検出された、Ｌ２スイッチ１０のポートのＭＡＣアドレスである。「宛先」は、送信キューに格納すべき宛先を示す。
【００５８】
図８の状態は、「Ｓキュー１」に全ての宛先のデータを格納し、「Ｓキュー２」にはデータを格納しない状態である。図９の状態は、「Ｓキュー１」にはデータを格納せず、「Ｓキュー２」には宛先アドレスＡ以外のデータを格納し、「Ｄキュー」にはＬ２スイッチ１０におけるＭＡＣアドレス１のポートから出力される宛先アドレスＡのデータを格納する状態である。なお、送信キュー管理テーブル３５は、制御部３６の各格納部などによって動的に更新される。
【００５９】
制御部３６は、例えばＣＰＵ（Central  Processing  Unit）などの電子回路であり、ＯＳ（Operating  System）などの制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有する。制御部３６は、受信制御部３６ａと輻輳検出部３６ｂと格納部３６ｃと第１送信部３６ｄと第２送信部３６ｅと第３送信部３６ｆとを有し、これらによって各種処理を実行する。
【００６０】
受信制御部３６ａは、通信ポート３１によって受信されたデータをデータ記憶領域３２に格納したり、通信ポート３１によって受信されたデータを輻輳検出部３６ｂに出力したりする。また、受信制御部３６ａは、通信ポート３１によって受信されたデータが輻輳制御パケットである場合には、受信した輻輳制御パケットをデータ記憶領域３２に格納するとともに、輻輳検出部３６ｂに出力する。
【００６１】
輻輳検出部３６ｂは、Ｌ２スイッチ１０等から受信した輻輳制御パケットに基づいて輻輳を検出する。例えば、輻輳検出部３６ｂは、受信制御部３６ａから輻輳制御パケットを受信した場合、輻輳を検出する。そして、輻輳検出部３６ｂは、輻輳制御パケットに含まれる「制御レート、輻輳ポイント識別子、Encapsulated  DA」を取得し、取得した各情報を格納部３６ｃ等に出力する。
【００６２】
また、輻輳検出部３６ｂは、取得した「Encapsulated  DA」を「宛先」とするＤキューのレコードを送信キュー管理テーブル３５に生成して、生成したレコードの「輻輳ポイント識別子」に、輻輳制御パケットから取得した「輻輳ポイント識別子」を格納する。さらに、輻輳検出部３６ｂは、輻輳検出後に、輻輳先宛以外のデータを格納するＳキューを切り替える。つまり、輻輳検出部３６ｂは、図８に示した輻輳検出前の状態から、図９に示した輻輳検出後の状態を生成する。さらに、輻輳検出部３６ｂは、送信キュー構成テーブル３４にＤキューのレコードを生成し、生成したレコードの「帯域情報」に、輻輳制御パケットから取得した「制御レート」を格納する。このとき、輻輳検出部３６ｂは、生成したＤキューのレコードの「最大キュー長」には管理者等から予め設定された情報を格納する。
【００６３】
格納部３６ｃは、輻輳未検出時または輻輳検出時それぞれの状況に応じて、送信対象であるデータを各キューに格納する。例えば、格納部３６ｃは、輻輳検出部３６ｂによって輻輳が検出されるまで、データ記憶領域３２に記憶される送信対象データを読み出してＳキュー１に格納する。一例としては、格納部３６ｃが、送信キュー管理テーブル３５を参照すると、送信キュー管理テーブル３５の状態が図８に示した状態であったとする。つまり、送信キュー管理テーブル３５にＤキューのレコードがなく、Ｓキュー１の「宛先」が「ａｎｙ」であったとする。この場合、格納部３６ｃは、データ記憶領域３２に記憶される送信対象データを順次読み出す。そして、格納部３６ｃは、読み出した送信対象データをキュー領域３３のＳキュー１に格納するとともに、読み出した送信対象データの長さ分、送信キュー構成テーブル３４のＳキュー１の「キュー長」を更新する。
【００６４】
また、格納部３６ｃは、輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先以外のデータをＳキュー２に格納する。例えば、格納部３６ｃは、輻輳検出部３６ｂによって宛先Ａの送信経路で輻輳が検出された場合、データ記憶領域３２に記憶される送信対象データのうち、宛先Ａ以外のデータを読み出してＳキュー２に格納する。
【００６５】
一例として、格納部３６ｃが、送信キュー管理テーブル３５を参照すると、送信キュー管理テーブル３５の状態が図９に示した状態であったとする。つまり、送信キュー管理テーブル３５に「宛先」が「Ａ」であるＤキューのレコードがあり、Ｓキュー２の「宛先」が「ａｎｙ」であったとする。この場合、格納部３６ｃは、データ記憶領域３２に記憶される送信対象データのうち、宛先アドレスがＡ以外のデータを順次読み出して、キュー領域３３のＳキュー２に格納する。そして、格納部３６ｃは、読み出した送信対象データの長さ分、送信キュー構成テーブル３４のＳキュー２の「キュー長」を更新する。
【００６６】
また、格納部３６ｃは、輻輳が検出された場合に、Ｄキューを生成し、輻輳検出後に送信対象となったデータのうち、輻輳が検出された宛先のデータをＤキューに格納する。例えば、格納部３６ｃは、輻輳検出部３６ｂによって宛先Ａの送信経路で輻輳が検出された場合、Ｄキューをキュー領域３３に生成し、データ記憶領域３２に記憶される送信対象データのうち、宛先Ａのデータを読み出してＤキューに格納する。
【００６７】
一例として、格納部３６ｃが、送信キュー管理テーブル３５を参照すると、送信キュー管理テーブル３５の状態が図９に示した状態であったとする。つまり、送信キュー管理テーブル３５に「宛先」が「Ａ」であるＤキューのレコードがあり、Ｓキュー２の「宛先」が「ａｎｙ」であったとする。この場合、格納部３６ｃは、データ記憶領域３２に記憶される送信対象データのうち、宛先アドレスがＡのデータを順次読み出して、キュー領域３３のＤキューに格納する。そして、格納部３６ｃは、読み出した送信対象データの長さ分、送信キュー構成テーブル３４のＤキューの「キュー長」を更新する。
【００６８】
第１送信部３６ｄは、Ｓキュー１に格納されるデータを読み出して送信する。例えば、第１送信部３６ｄは、図６に示したキュー領域３３の送信キューのうち、Ｓキュー１の先頭に格納されるデータを読み出す。続いて、第１送信部３６ｄは、送信キュー構成テーブル３４を参照し、Ｓキュー１に対応付けられた「帯域情報＝５０」を取得する。そして、第１送信部３６ｄは、Ｓキュー１から読み出したデータを帯域幅（５０Ｍｂｐｓ）で宛先に送信する。
【００６９】
その後、第１送信部３６ｄは、データを読み出して送信するたびに、後続のデータを１つ若番に移動させる。つまり、第１送信部３６ｄは、Ｓキュー１の先頭、言い換えると、図６ではＳキュー１の「１」に格納されるデータを読み出して送信する。そして、第１送信部３６ｄは、Ｓキュー１に格納されるデータを全て送信した場合に、送信完了通知を第２送信部３６ｅと第３送信部３６ｆに出力する。
【００７０】
第２送信部３６ｅは、Ｓキュー１に格納されるデータがすべて送信されてから、Ｓキュー２に格納されるデータを読み出して送信する。例えば、第２送信部３６ｅは、図６に示したキュー領域３３のＳキュー１に記憶されるデータが全て送信されたことを第１送信部３６ｄから受信する。すると、第２送信部３６ｅは、Ｓキュー２の先頭に格納されるデータを読み出す。続いて、第２送信部３６ｅは、送信キュー構成テーブル３４を参照し、Ｓキュー２に対応付けられた「帯域情報＝５０」を取得する。そして、第２送信部３６ｅは、Ｓキュー２から読み出したデータを帯域幅（５０Ｍｂｐｓ）で宛先に送信する。
【００７１】
その後、第２送信部３６ｅは、データを読み出して送信するたびに、後続のデータを１つ若番に移動させる。つまり、第２送信部３６ｅは、Ｓキュー２の先頭、言い換えると、図６ではＳキュー２の「１」に格納されるデータを読み出して送信する。
【００７２】
第３送信部３６ｆは、Ｓキュー１に格納されるデータがすべて送信されてから、Ｄキューに格納されるデータを読み出し、帯域を制御して送信する。例えば、第３送信部３６ｆは、図６に示したキュー領域３３のＳキュー１に記憶されるデータが全て送信されたことを第１送信部３６ｄから受信する。すると、第３送信部３６ｆは、Ｄキューに格納される先頭のデータを読み出す。続いて、第３送信部３６ｆは、送信キュー構成テーブル３４を参照し、Ｄキューに対応付けられた「帯域情報＝２０」を取得する。そして、第３送信部３６ｆは、Ｓキュー１や２と異なり、帯域幅（２０Ｍｂｐｓ）に制限して、Ｄキューから読み出したデータを宛先に送信する。
【００７３】
その後、第３送信部３６ｆは、データを読み出して送信するたびに、後続のデータを１つ若番に移動させる。つまり、第３送信部３６ｆは、Ｄキューの先頭、言い換えると、図６ではＤキューの「１」に格納されるデータを読み出し、帯域を制御して送信する。
【００７４】
［処理の流れ］
次に、図１０〜図１１を用いて、実施例１に係るサーバが実行する各種処理の流れを説明する。ここでは、輻輳検出処理の流れ、輻輳時のデータ格納処理の流れ、輻輳時のデータ送信処理の流れを順に説明する。
【００７５】
（輻輳検出処理の流れ）
図１０は、実施例１に係るサーバにおける輻輳検出処理の流れを示すフローチャートである。図１０に示すように、サーバ３０の輻輳検出部３６ｂは、受信制御部３６ａによって受信されるデータに基づいて輻輳状態を監視する（ステップＳ１０１）。
【００７６】
そして、輻輳検出部３６ｂは、受信制御部３６ａによって輻輳制御パケットが受信された場合（ステップＳ１０２肯定）、輻輳を検出する（ステップＳ１０３）。その後、輻輳検出部３６ｂは、輻輳先宛以外のデータをＳキュー１ではなくＳキュー２に格納するようにＳキューの切り替えを実行し（ステップＳ１０４）、格納部３６ｃは、キュー領域３３にＤキューを生成する（ステップＳ１０５）。このとき、輻輳検出部３６ｂは、送信キューの各テーブルを更新する。その後、ステップＳ１０１以降を繰り返す。
【００７７】
（輻輳時のデータ格納処理の流れ）
図１１は、実施例１に係る輻輳時のデータ格納処理の流れを示すフローチャートである。図１１に示すように、サーバ３０がデータ記憶領域３２から送信対象となるデータを読み出した場合（ステップＳ２０１肯定）、サーバ３０は、当該データのヘッダ等から宛先が輻輳先であるか否かを判定する（ステップＳ２０２）。
【００７８】
そして、読み出されたデータの宛先が輻輳先であると判定された場合（ステップＳ２０２肯定）、格納部３６ｃが当該データをＤキューに格納する（ステップＳ２０３）。一方、読み出されたデータの宛先が輻輳先でないと判定された場合（ステップＳ２０２否定）、格納部３６ｃが当該データを切り替えられたＳキュー２に格納する（ステップＳ２０４）。その後、ステップＳ２０１以降が繰り返し実行される。
【００７９】
（輻輳時のデータ送信処理の流れ）
図１２は、実施例１に係る輻輳時のデータ送信処理の流れを示すフローチャートである。図１２に示すように、切り替え前のＳキュー１にデータが格納されている場合（ステップＳ３０１肯定）、第１送信部３６ｄは、Ｓキュー１に格納されるデータを読み出して、Ｓキュー１に対応付けられた帯域幅で送信する（ステップＳ３０２）。その後、ステップＳ３０１以降を繰り返す。
【００８０】
一方、切り替え前のＳキュー１にデータが格納されていない場合（ステップＳ３０１否定）、第２送信部３６ｅは、Ｓキュー２にデータが格納されているか否かを判定する（ステップＳ３０３）。つまり、第２送信部３６ｅは、Ｓキュー１に格納されていたデータが全て送信された場合、Ｓキュー２にデータが格納されているか否かを判定する。
【００８１】
そして、第２送信部３６ｅは、Ｓキュー２にデータが格納されていると判定した場合（ステップＳ３０３肯定）、Ｓキュー２の先頭に格納されているデータを読み出して、Ｓキュー２に対応付けられた帯域幅で宛先に送信する（ステップＳ３０４）。その後、ステップＳ３０３に戻って処理を繰り返す。一方、第２送信部３６ｅは、Ｓキュー２にデータが格納されていないと判定した場合（ステップＳ３０３否定）、処理を終了する。
【００８２】
同様に、切り替え前のＳキュー１にデータが格納されていない場合（ステップＳ３０１否定）、第３送信部３６ｆは、Ｄキューにデータが格納されているか否かを判定する（ステップＳ３０５）。つまり、第３送信部３６ｆは、Ｓキュー１に格納されていたデータが全て送信された場合、Ｄキューにデータが格納されているか否かを判定する。
【００８３】
そして、第３送信部３６ｆは、Ｄキューにデータが格納されていると判定した場合（ステップＳ３０５肯定）、Ｄキューの先頭に格納されているデータを読み出して、Ｄキューに対応付けられた帯域幅で宛先に送信する（ステップＳ３０６）。その後、ステップＳ３０５に戻って処理を繰り返す。一方、第３送信部３６ｆは、Ｄキューにデータが格納されていないと判定した場合（ステップＳ３０５否定）、処理を終了する。
【００８４】
なお、第２送信部３６ｅがＳキュー２からデータを取り出すタイミングと、第３送信部３６ｆがＤキューからデータを取り出すタイミングとは、例えば、ラウンドロビン（round  robin）方式で決定する。一例を挙げると、ある時間内では、Ｓキュー２から１０回取り出す間にＤキューから５回取り出すラウンドロビン方式で、帯域制御する。
【００８５】
［実施例１による効果］
実施例１によれば、輻輳に影響を与えない宛先のデータの送信遅延を防止することができる。また、キュー数を削減することができる。また、送信順序の逆転を防止できる。したがって、効率的なデータ送信を実行できる。また、非輻輳時以外では、Ｓキュー１とＳキュー２の２つのキューを有していればよいので、キューに要するメモリ容量をさらに削減できる。
【００８６】
また、実施例１によれば、データの宛先とキューとを対応付けたりするプロビジョニングによる多大なキュー設定を実行する必要がない。また、輻輳発生しているポイントの数だけのキュー設定で良い。これらの結果、キュー用として確保するメモリや多数キューのスケジューリング機能の削減に対して、多くの効果が見込める。また、キュー数の削減により、データを該当キューに分類する処理負荷も軽減される。
【実施例２】
【００８７】
実施例１では、輻輳検出時の処理について説明したが、実施例２では、輻輳解除時の処理について説明する。図１３は、実施例２に係るシステムにおいて輻輳が解除される前の状態例を示す図であり、図１４は、実施例２に係るシステムにおいて輻輳が解除された場合の制御例を示す図である。なお、実施例２に係るシステムの構成は、実施例１と同様の構成とする。
【００８８】
（輻輳検出時）
図１３に示すように、サーバ３０の輻輳検出部３６ｂは、Ｌ２スイッチ２０から「輻輳ポイント識別子＝１、Encapsulated  DA＝Ａ」とする輻輳制御パケットを定期的に受信した場合、輻輳を検出する。すると、輻輳検出部３６ｂは、送信キュー管理テーブル３５に「輻輳ポイント識別子＝１、宛先＝Ａ」とするＤキューのレコードを生成し、送信キュー構成テーブル３４も更新する。また、輻輳検出部３６ｂは、Ｓキューの切り替えを実行すし、キュー領域３３にＤキューを生成する。
【００８９】
そして、格納部３６ｃは、Ｓキュー１へのデータの格納を停止する。また、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先Ａ以外のデータＢ２、Ｃ２をＳキュー２に格納する。また、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先ＡのデータＡ３をＤキューに格納する。
【００９０】
続いて、図１３の場合、第２送信部３６ｅは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｓキュー２の先頭に格納されているデータＢ２を読み出して送信する。同様に、第３送信部３６ｆは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｄキューの先頭に格納されているデータＡ３を読み出して送信する。
【００９１】
（輻輳解除時）
次に、図１４を用いて、図１３の輻輳制御時から輻輳が解除された場合について説明する。図１４に示すように、輻輳検出部３６ｂは、Ｌ２スイッチ２０から「輻輳ポイント識別子＝１、Encapsulated  DA＝Ａ」とする輻輳制御パケットを所定期間受信しなくなった場合、輻輳が解除されたと検出する。例えば、輻輳検出部３６ｂは、輻輳が検出された場合には輻輳制御パケットを定期的に受信するが、最新の輻輳制御パケットを受信してから１５ｍｓの間受信しなかった場合には、輻輳が解除されたと判定する。
【００９２】
続いて、輻輳解除を検出した輻輳検出部３６ｂは、送信キュー管理テーブル３５に「輻輳ポイント識別子＝１、宛先＝Ａ」とするＤキューのレコードを削除する。また、輻輳検出部３６ｂは、送信キュー管理テーブル３５におけるＳキュー２の「宛先」を「−」に変更するとともに、Ｓキュー１の「宛先」を「ａｎｙ」にすることで、Ｓキューの切り戻しを実行する。
【００９３】
つまり、輻輳が解除されるまで、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ８、Ｃ６、Ａ４のうち、輻輳が検出された宛先Ａ以外のデータＢ８、Ｃ６をＳキュー２に格納する。そして、第２送信部３６ｅは、Ｓキュー２からデータを順番に読み出して宛先に送信する。同様に、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ８、Ｃ６、Ａ４のうち、輻輳が検出された宛先ＡのデータＡ４をＤキューに格納する。そして、第３送信部３６ｆは、Ｄキューからデータを順番に読み出して宛先に送信する。
【００９４】
その後、輻輳が解除されると、格納部３６ｃは、Ｓキュー２またはＤキューへのデータの格納を停止する。そして、格納部３６ｃは、輻輳解除後に送信対象となったデータＢ９、Ａ５、Ｃ７を順番にＳキュー１に格納する。その後、第１送信部３６ｄは、Ｓキュー２およびＤキューが空になった後、Ｓキュー１からデータを読み出して、データ送信を開始する。つまり、図１４の場合では、第１送信部３６ｄは、Ｓキュー２のデータＣ６とＤキューのデータＡ４が送信された後、Ｓキュー１の先頭に格納されるデータＢ９から順番に読み出して送信する。また、格納部３６ｃは、第３送信部３６ｆによってＤキューのデータが全て送信されると、Ｄキューをキュー領域３３から削除する。
【００９５】
このように、実施例２によれば、輻輳検出前のように、輻輳解除時にキューを切り替えても、データの送信順序の逆転を防止できる。また、輻輳解除後はＤキューを削除するので、キュー用として確保するメモリ容量を削減できる。
【実施例３】
【００９６】
実施例１では、１箇所で輻輳が検出された場合の処理について説明したが、実施例３では、複数箇所で輻輳が検出された場合の処理について説明する。図１５は、実施例３に係るシステムにおいて複数箇所で輻輳が検出された場合の制御例１を示す図であり、図１６は、実施例３に係るシステムにおいて複数個所で輻輳が検出された場合の制御例２を示す図である。なお、実施例３に係るシステムの構成は、実施例１と同様の構成とする。
【００９７】
（複数箇所での輻輳検出時（例１））
図１５に示すように、サーバ３０の輻輳検出部３６ｂは、Ｌ２スイッチ１０から「制御レート＝２０Ｍｂｐｓ、輻輳ポイント識別子＝１、Encapsulated  DA＝Ｃ」とする輻輳制御パケットを定期的に受信する。続いて、輻輳検出部３６ｂは、Ｌ２スイッチ２０から「制御レート＝１０Ｍｂｐｓ、輻輳ポイント識別子＝２、Encapsulated  DA＝Ｃ」とする輻輳制御パケットを定期的に受信する。
【００９８】
すると、輻輳検出部３６ｂは、Ｌ２スイッチ１０から受信した輻輳制御パケットの制御レートが「２０」であり、Ｌ２スイッチ２０から受信した輻輳制御パケットの制御レートが「１０」であることより、今回検出した輻輳の方がより悪い状態であると判定する。つまり、輻輳検出部３６ｂは、輻輳ポイント識別子は異なるが、輻輳を検出したアドレスが同じであるため、より帯域幅が小さい方を輻輳制御対象として特定する。
【００９９】
その後、実施例１や２と同様、輻輳検出部３６ｂは、送信キュー管理テーブル３５に「輻輳ポイント識別子＝２、宛先＝Ｃ」とするＤキューのレコードを生成し、送信キュー構成テーブル３４も更新する。さらに、輻輳検出部３６ｂは、送信キュー管理テーブル３５におけるＳキュー１の「宛先」を「−」に変更するとともに、Ｓキュー２の「宛先」を「ａｎｙ」にすることで、Ｓキューの切り替えを実行する。
【０１００】
そして、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先Ｃ以外のデータＡ３、Ｂ２をＳキュー２に格納する。また、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先ＣのデータＣ２をＤキューに格納する。
【０１０１】
続いて、図１５の場合、第２送信部３６ｅは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｓキュー２の先頭に格納されているデータＡ３を読み出して送信する。同様に、第３送信部３６ｆは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｄキューの先頭に格納されているデータＣ２を読み出して送信する。
【０１０２】
（複数箇所の輻輳検出時（例２））
図１６に示すように、サーバ３０の輻輳検出部３６ｂは、Ｌ２スイッチ１０から「制御レート＝２０Ｍｂｐｓ、輻輳ポイント識別子＝１、Encapsulated  DA＝Ａ」とする輻輳制御パケットを定期的に受信する。続いて、輻輳検出部３６ｂは、Ｌ２スイッチ２０から「制御レート＝１０Ｍｂｐｓ、輻輳ポイント識別子＝２、Encapsulated  DA＝Ｃ」とする輻輳制御パケットを定期的に受信する。
【０１０３】
すると、輻輳検出部３６ｂは、送信キュー管理テーブル３５に「輻輳ポイント識別子＝１、宛先＝Ａ」とするＤキュー１のレコードを生成する。同様に、輻輳検出部３６ｂは、送信キュー構成テーブル３４にＤキュー１のレコードを生成する。さらに、輻輳検出部３６ｂは、送信キュー管理テーブル３５に「輻輳ポイント識別子＝２、宛先＝Ｃ」とするＤキュー２のレコードを生成する。同様に、輻輳検出部３６ｂは、送信キュー構成テーブル３４にＤキュー２のレコードを生成する。
【０１０４】
続いて、輻輳検出部３６ｂは、送信キュー管理テーブル３５におけるＳキュー１の「宛先」を「−」に変更するとともに、Ｓキュー２の「宛先」を「ａｎｙ」にすることで、Ｓキューの切り替えを実行する。
【０１０５】
そして、輻輳が検出されると、格納部３６ｃは、Ｓキュー１へのデータの格納を停止する。また、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先ＡとＣ以外のデータＢ２をＳキュー２に格納する。また、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先ＡのデータＡ３をＤキュー１に格納する。同様に、格納部３６ｃは、輻輳検出後に送信対象となったデータＢ２、Ｃ２、Ａ３のうち、輻輳が検出された宛先ＣのデータＣ２をＤキュー２に格納する。
【０１０６】
続いて、第２送信部３６ｅは、Ｓキュー１に格納されるデータの送信が完了してから、Ｓキュー２からデータを順番に読み出して宛先に送信する。同様に、第３送信部３６ｆは、Ｓキュー１に格納されるデータの送信が完了してから、Ｄキュー１からデータを順番に読み出して、帯域を制御して宛先に送信する。同様に、第３送信部３６ｆは、Ｓキュー１に格納されるデータの送信が完了してから、Ｄキュー２からデータを順番に読み出して、帯域を制御して宛先に送信する。
【０１０７】
つまり、図１６の場合、第２送信部３６ｅは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｓキュー２の先頭に格納されているデータＢ２を読み出して送信する。同様に、第３送信部３６ｆは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｄキュー１の先頭に格納されているデータＡ３を読み出して送信する。同様に、第３送信部３６ｆは、Ｓキュー１の最後に格納されているデータＡ２が送信されてから、Ｄキュー２の先頭に格納されているデータＣ２を読み出して送信する。
【０１０８】
（実施例３による効果）
このように、実施例３によれば、より輻輳を悪化させるおそれのある宛先へのデータ送信の帯域を制御できるので、輻輳の早期解除に貢献できる。また、実施例３によれば、複数の輻輳が検出された場合でも、輻輳それぞれに影響を与えるデータを別々のキューで制御できるので、それぞれの輻輳に与える影響を小さくすることができ、それぞれの輻輳の早期解除に貢献できる。また、複数の輻輳が検出された場合でも、それぞれの輻輳に影響を与えるデータを別々のキューで送信制御できるので、送信順序の逆転も防止できる。
【実施例４】
【０１０９】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【０１１０】
（輻輳検出手法）
上述した各実施例では、ＩＥＥＥ８０２．１Ｑａｕで規定される輻輳制御方式を用いて輻輳を検出する例について説明したが、これに限定されるものではない。例えば、ネットワーク使用状況の監視、ＳＮＭＰ（Simple  Network  Management  Protocol）を用いたトラップ、監視ソフトウェア等を用いて検出することもできる。
【０１１１】
（Ｄキューへの制御）
上述した各実施例では、１つのＤキューへ格納される宛先が１つである場合について例示したが、これに限定されるものではない。例えば、Ｌ２スイッチの同じポートで宛先が異なる輻輳が連続して発生した場合、つまり、輻輳ポイント識別子が同じであり、宛先が異なる輻輳が連続して発生した場合、同じＤキューに宛先を２つ格納することもできる。
【０１１２】
（Ｌ２スイッチへの適用）
上述した実施例では、サーバ３０が輻輳制御する例について説明したが、これに限定されるものではない。例えば、Ｌ２スイッチ等の通信装置に対しても同様に適用することができる。Ｌ２スイッチに適用した場合、各ポートごとに上述した処理を実行する。
【０１１３】
（システム）
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、例えば図４、図６〜図９等に示した各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。なお、開示するサーバが送信対象とするデータは、他の装置から受信したデータであってもよく、ＯＳが実行するアプリケーションによって生成されたデータであってもよい。
【０１１４】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、例えば格納部３６ｃを第１格納部、第２格納部、第３格納部に分割するなど各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１１５】
（プログラム）
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
【０１１６】
図１７は、輻輳制御プログラムを実行するコンピュータシステムの例を示す図である。図１７に示すように、コンピュータシステム１００は、バス１００ａにＣＰＵ１０５、ＲＯＭ（Read  Only  Memory）１０４、ＲＡＭ（Random  Access  Memory）１０１が接続される。また、コンピュータシステム１００は、バス１００ａにＮＩＣ（Network  Interface  Card）１０２、ＨＤＤ（Hard  Disk  Drive）１０３が接続されている。
【０１１７】
また、ＨＤＤ１０３には、図５に示した送信キュー構成テーブル３４に対応する送信キュー構成テーブル１０３ａが設けられる。同様に、ＨＤＤ１０３には、送信キュー管理テーブル３５に対応する送信キュー管理テーブル１０３ｂが設けられる。
【０１１８】
ＲＯＭ１０４は、輻輳制御プログラム１０４ａを保持する。記録媒体の例としてＲＯＭ１０４を例に挙げたが、ＨＤＤ、ＲＡＭ、ＣＤ−ＲＯＭ等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記憶媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
【０１１９】
ＣＰＵ１０５は、輻輳制御プログラム１０４ａを読み出して実行することで、図５等で説明した各機能を実行する輻輳制御プロセス１０５ａを動作させる。すなわち、輻輳制御プロセス１０５ａは、受信制御部３６ａ、輻輳検出部３６ｂ、格納部３６ｃ、第１送信部３６ｄ、第２送信部３６ｅ、第３送信部３６ｆと同様の機能を実行する。このようにコンピュータシステム１００は、ＲＯＭ１０４からプログラムを読み出して実行して、輻輳制御プロセス１０５ａが実行される情報処理装置として動作する。
【０１２０】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２１】
（付記１）データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第１のキューに格納する手順と、
前記第１のキューに格納されたデータを送信する手順と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納する手順と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第３のキューに格納する手順と、
前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するとともに、前記第３のキューに格納されるデータを読み出して帯域を制御して送信する手順と、
を実行させることを特徴とする輻輳制御プログラム。
【０１２２】
（付記２）前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第１のキューに格納する手順と、
前記第２のキューおよび前記第３のキューに格納されるデータが全て送信されてから、前記第１のキューに格納されるデータを読み出して送信する手順と、をさらにコンピュータに実行させることを特徴とする付記１に記載の輻輳制御プログラム。
【０１２３】
（付記３）前記第３のキューに格納する手順は、前記輻輳が検出された場合に、前記第３のキューを動的に生成し、生成した第３のキューに、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを格納することを特徴とする付記１または２に記載の輻輳制御プログラム。
【０１２４】
（付記４）前記第３のキューに格納する手順は、前記輻輳が解除された場合、前記生成した第３のキューを削除する処理をさらにコンピュータに実行させることを特徴とする付記３に記載の輻輳制御プログラム。
【０１２５】
（付記５）複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する手順をさらにコンピュータに実行させ、
前記第２のキューに格納する手順は、
複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先以外のデータを第２のキューに格納し、
前記第３のキューに格納する手順は、
前記複数の輻輳検出後に送信対象となったデータのうち、前記特定した輻輳が検出された宛先のデータを第３のキューに格納することを特徴とする付記１〜４のいずれか一つに記載の輻輳制御プログラム。
【０１２６】
（付記６）データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに、
受信したデータを第１のキューに格納する手順と、
前記第１のキューに格納されたデータを送信する手順と、
前記中継装置によって第１の輻輳と第２の輻輳が検出された場合に、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先以外のデータと第２の輻輳が検出された宛先以外のデータとを第２のキューに格納する手順と、
前記第１の輻輳と第２の輻輳が検出された場合に、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先のデータを前記第３のキューに格納する手順と、
前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第２の輻輳が検出された宛先のデータを第４のキューに格納する手順と、
前記第１のキューに格納されるデータが送信されてから、前記第２のキューに格納されるデータを読み出して送信するとともに、前記第３のキューと前記第４のキューに格納されるデータそれぞれを読み出し、それぞれ帯域を制御して送信する手順と、
をコンピュータに実行させることを特徴とする輻輳制御プログラム。
【０１２７】
（付記７）データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第１のキューに格納する第１格納部と、
前記第１格納部によって前記第１のキューに格納されたデータを送信する第１送信部と、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納する第２格納部と、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第３のキューに格納する第３格納部と、
前記第１格納部によって前記第１のキューに格納されたデータが全て送信されてから、前記第２格納部によって第２のキューに格納されたデータを読み出して送信するとともに、前記第３格納部によって第３のキューに格納されたデータを読み出して帯域を制御して送信する第２送信部と、
を有することを特徴とする情報処理装置。
【０１２８】
（付記８）前記第１格納部は、前記輻輳が解除された場合に、輻輳解除後に送信対象となったデータを前記第１のキューに格納し、
前記第１送信部は、前記第２のキューおよび前記第３のキューに格納されるデータが送信されてから、前記第１のキューに格納されるデータを読み出して送信することを特徴とする付記７に記載の情報処理装置。
【０１２９】
（付記９）前記第３格納部は、前記輻輳が検出された場合に、前記第３のキューを動的に生成し、生成した第３のキューに、前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを格納することを特徴とする付記７または８に記載の情報処理装置。
【０１３０】
（付記１０）前記第３格納部は、前記輻輳が解除された場合、前記生成した第３のキューを削除することを特徴とする付記９に記載の情報処理装置。
【０１３１】
（付記１１）複数の輻輳が検出された場合に、各輻輳に対して帯域制御する帯域幅に基づいて、帯域制御の対象とする輻輳を特定する特定部をさらに有し、
前記第２格納部は、複数の輻輳検出後に送信対象となったデータのうち、前記特定部によって特定された輻輳が検出された宛先以外のデータを第２のキューに格納し、
前記第３格納部は、複数の輻輳検出後に送信対象となったデータのうち、前記特定部によって特定された輻輳が検出された宛先のデータを第３のキューに格納し、
前記第２送信部は、前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するとともに、前記第３のキューに格納されるデータを読み出して帯域を制御して送信することを特徴とする付記７〜１０のいずれか一つに記載の情報処理装置。
【０１３２】
（付記１２）データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行する情報処理装置であって、
受信したデータを第１のキューに格納する第１格納部と、
前記第１格納部によって前記第１のキューに格納されたデータを送信する第１送信部と、
前記中継装置によって第１の輻輳と第２の輻輳が検出された場合に、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先以外のデータと第２の輻輳が検出された宛先以外のデータとを第２のキューに格納する第２格納部と、
前記第１の輻輳と第２の輻輳が検出された場合に、前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第１の輻輳が検出された宛先のデータを第３のキューに格納する第３格納部と、
前記第１の輻輳と第２の輻輳検出後に送信対象となったデータのうち、前記第２の輻輳が検出された宛先のデータを第４のキューに格納する第４格納部と、
前記第１格納部によって前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するとともに、前記第３のキューと前記第４のキューに格納されるデータそれぞれを読み出し、それぞれ帯域を制御して送信する第２送信部と、
を有することを特徴とする情報処理装置。
【０１３３】
（付記１３）データを受信して宛先に中継する中継装置を介して、前記データの送受信を実行するコンピュータに実行させる輻輳制御方法であって、
受信したデータを第１のキューに格納し、
前記第１のキューに格納されたデータを送信し、
前記中継装置によって輻輳が検出された場合に、輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先以外のデータを第２のキューに格納し、
前記輻輳検出後に送信対象となったデータのうち、前記輻輳が検出された宛先のデータを第３のキューに格納し、
前記第１のキューに格納されるデータが全て送信されてから、前記第２のキューに格納されるデータを読み出して送信するとともに、前記第３のキューに格納されるデータを読み出して帯域を制御して送信する、
ことを特徴とする輻輳制御方法。
【符号の説明】
【０１３４】
１０、２０  Ｌ２スイッチ
１１  通信インタフェース
１２  ＭＡＣテーブル
１３  キュー領域
１４  スイッチング実行部
１５  輻輳検出部
３０  サーバ
３１  通信ポート
３２  データ記憶領域
３３  キュー領域
３４  送信キュー構成テーブル
３５  送信キュー管理テーブル
３６  制御部
３６ａ  受信制御部
３６ｂ  輻輳検出部
３６ｃ  格納部
３６ｄ  第１送信部
３６ｅ  第２送信部
３６ｆ  第３送信部
【図１】
0005673057.tif 000002
【図２】
0005673057.tif 000003
【図３】
0005673057.tif 000004
【図４】
0005673057.tif 000005
【図５】
0005673057.tif 000006
【図６】
0005673057.tif 000007
【図７】
0005673057.tif 000008
【図８】
0005673057.tif 000009
【図９】
0005673057.tif 000010
【図１０】
0005673057.tif 000011
【図１１】
0005673057.tif 000012
【図１２】
0005673057.tif 000013
【図１３】
0005673057.tif 000014
【図１４】
0005673057.tif 000015
【図１５】
0005673057.tif 000016
【図１６】
0005673057.tif 000017
【図１７】
0005673057.tif 000018
【図１８】
0005673057.tif 000019
【図１９】
0005673057.tif 000020
【図２０】
0005673057.tif 000021
【図２１】
0005673057.tif 000022