(57)【特許請求の範囲】
【請求項１】
通信装置間でコネクションを確立して送受信されるパケットを中継可能なパケット中継装置であって、
到着したパケットの中から選択された転送を保留するパケットを格納するバッファと、
前記バッファに格納されたパケットよりも後に前記パケット中継装置に到着し先に送信されたパケットであって、前記バッファに格納されたパケットと同一コネクションに属するパケットの送信状況を監視し、前記送信状況に応じたタイミングで、前記バッファに格納されたパケットを送信させる輻輳制御部と、
を有することを特徴とするパケット中継装置。
【請求項２】
前記輻輳制御部は、前記送信状況として、前記同一コネクションのパケットの数に基づいて、前記タイミングを判断することを特徴とする請求項１記載のパケット中継装置。
【請求項３】
前記輻輳制御部は、前記送信状況として、前記同一コネクションのパケットの数に加え、前記同一コネクションのパケットを前回検出してからの経過時間に基づいて、前記タイミングを判断することを特徴とする請求項２記載のパケット中継装置。
【請求項４】
前記輻輳制御部は、前記同一コネクションのパケットの数と前記経過時間とから、前記バッファに格納されたパケットの宛先の通信装置が送信元の通信装置に対して送信する応答パケットの数を推定し、推定した前記応答パケットの数に基づいて、前記タイミングを判断することを特徴とする請求項３記載のパケット中継装置。
【請求項５】
前記輻輳制御部は、更に、前記バッファにパケットが格納されてからの経過時間に基づいて、前記タイミングを判断することを特徴とする請求項１乃至４の何れか一項に記載のパケット中継装置。
【請求項６】
前記輻輳制御部は、前記バッファに格納されたパケットの再送パケットを検出すると、前記送信状況から前記タイミングを判断するために用いるパラメータを補正することを特徴とする請求項１乃至５の何れか一項に記載のパケット中継装置。
【請求項７】
補正する前記パラメータには、前記同一コネクションのパケットの数についての閾値、および、前記同一コネクションのパケットを前回検出してからの経過時間についての閾値の少なくとも一方が含まれることを特徴とする請求項６記載のパケット中継装置。
【請求項８】
前記輻輳制御部は、更に、前記バッファにパケットが格納されてからの経過時間から前記タイミングを判断するために用いるパラメータを補正することを特徴とする請求項６又は７記載のパケット中継装置。
【請求項９】
送信待ちのパケットを一時的に格納する他のバッファを更に有し、
前記輻輳制御部は、前記他のバッファに滞留しているパケットの量に基づいて、前記バッファにパケットを格納する対象とするコネクションの最大数を決定することを特徴とする請求項１乃至８の何れか一項に記載のパケット中継装置。
【請求項１０】
通信装置間でコネクションを確立して送受信されるパケットを中継可能なパケット中継装置の輻輳制御方法であって、
到着したパケットの中から転送を保留するパケットを選択してバッファに格納し、
前記バッファに格納されたパケットよりも後に前記パケット中継装置に到着し先に送信されたパケットであって、前記バッファに格納されたパケットと同一コネクションに属するパケットの送信状況を監視し、
前記送信状況に応じたタイミングで、前記バッファに格納されたパケットを送信する、
ことを特徴とする輻輳制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパケット中継装置および輻輳制御方法に関する。
【背景技術】
【０００２】
現在、ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）などの通信プロトコルを用いたパケット通信が広く利用されている。パケット通信を行うネットワークでは、パケットを中継する通信装置（パケット中継装置）において輻輳が発生する場合がある。
【０００３】
輻輳を解消する方法としては、パケット中継装置で一部のパケットを廃棄する方法がある。例えば、テイルドロップと呼ばれる方法では、送信バッファが満杯になると、送信バッファに空きができるまで、以降に到着するパケットを全て廃棄する。また、ＲＥＤ（Random Early Detection）と呼ばれる方法では、送信バッファが満杯になる前であっても、滞留するパケットの量が閾値を超えると、以降に到着するパケットを確率的に廃棄する。
【０００４】
このように、パケット中継装置がパケットを廃棄すると、パケットの送信元の通信装置は、宛先の通信装置から、期待したＡＣＫ（ACKnowledgement）を受信できないことになる。送信元の通信装置は、パケットを送信すると所定の条件を満たすまで（例えば、送信してから所定時間経過するまで）待ち、期待したＡＣＫを受信しないと、パケットが廃棄されたと判断してパケットを再送する。この方法により、送信元の通信装置の送信レートを低下させ、パケット中継装置へのパケットの流入量を抑制することができる。
【０００５】
なお、一部のパケットを廃棄する技術に関し、送信バッファに蓄積する前にフレームに時刻情報を付加し、時刻情報に基づいてフレームの滞留時間を検出し、滞留時間が所定の滞留許容時間を越えたフレームを廃棄する方法がある（例えば、特許文献１参照）。
【０００６】
これに対し、パケットを廃棄しなくてもよい輻輳制御方法が考えられている。例えば、輻輳を検出すると、待ち行列形式で保留しているフレームの中で最も先に受信したフレームを一定時間送信せず、後続のフレームを先に送信する方法がある（例えば、特許文献２参照）。このように、パケット中継装置がパケットの送信を保留すると、パケットの送信元の通信装置では、期待したＡＣＫを受信するタイミングが遅延する。従って、この方法によっても、パケット中継装置へのパケットの流入量を抑制することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−５１９３号公報
【特許文献２】特開平７−６６８３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ここで、ネットワークの通信効率という観点では、パケットの再送が発生しないように輻輳制御を行うことが好ましい。しかし、上記特許文献２に記載の方法では、パケットの送信を一定時間だけ保留するものであるため、パケットの再送を十分に抑制できないという問題がある。その理由は以下の通りである。
【０００９】
すなわち、パケットの再送が発生するタイミングは、送信元の通信装置がパケットを送信してからの経過時間で決まるとは限らない。例えば、ＴＣＰの高速再送メカニズムという再送制御では、宛先の通信装置は、シーケンス番号通りでないパケットを受信すると、送信元の通信装置に重複ＡＣＫと呼ばれるＡＣＫを送信する。送信元の通信装置は、所定数の重複ＡＣＫを受信すると、パケットが廃棄されたと判断しパケットを再送する。つまり、パケットの送信から所定時間経過する前に、再送が発生する可能性がある。
【００１０】
本発明はこのような点に鑑みてなされたものであり、パケットの再送を抑制することができるパケット中継装置および輻輳制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、通信装置間でコネクションを確立して送受信されるパケットを中継可能なパケット中継装置が提供される。このパケット中継装置は、バッファと輻輳制御部を有する。バッファは、到着したパケットの中から選択された転送を保留するパケットを格納する。輻輳制御部は、バッファにパケットが格納された後にパケット中継装置を通過するパケットを監視し、バッファに格納されたパケットと同一コネクションのパケットの通過状況に応じたタイミングで、バッファに格納されたパケットを送信させる。
【００１２】
また、上記課題を解決するために、通信装置間でコネクションを確立して送受信されるパケットを中継可能なパケット中継装置の輻輳制御方法が提供される。この輻輳制御方法は、到着したパケットの中から転送を保留するパケットを選択してバッファに格納する。バッファにパケットが格納された後にパケット中継装置を通過するパケットを監視する。バッファに格納されたパケットと同一コネクションのパケットの通過状況に応じたタイミングで、バッファに格納されたパケットを送信する。
【発明の効果】
【００１３】
上記パケット中継装置および輻輳制御方法によれば、輻輳制御においてパケットの再送が発生することを抑制できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のパケット中継装置を示す図である。
【図２】第２の実施の形態の通信システムを示す図である。
【図３】第２の実施の形態のパケットスイッチを示すブロック図である。
【図４】第２の実施の形態のパケットの構造例を示す図である。
【図５】第２の実施の形態のコネクションテーブルの構造例を示す図である。
【図６】第２の実施の形態の輻輳制御を示すフローチャートである。
【図７】第２の実施の形態の輻輳制御を示すフローチャート（続き）である。
【図８】遅延パケットの解放タイミング例を示す第１のシーケンス図である。
【図９】遅延パケットの解放タイミング例を示す第２のシーケンス図である。
【図１０】遅延パケットの解放タイミング例を示す第３のシーケンス図である。
【図１１】第３の実施の形態のパケットスイッチを示すブロック図である。
【図１２】第３の実施の形態のコネクションテーブルの構造例を示す図である。
【図１３】第３の実施の形態の学習テーブルの構造例を示す図である。
【図１４】第３の実施の形態の輻輳制御を示すフローチャートである。
【図１５】第３の実施の形態の輻輳制御を示すフローチャート（続き１）である。
【図１６】第３の実施の形態の輻輳制御を示すフローチャート（続き２）である。
【図１７】解放タイミングの補正例を示す第１のシーケンス図である。
【図１８】解放タイミングの補正例を示す第２のシーケンス図である。
【図１９】解放タイミングの補正例を示す第３のシーケンス図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して詳細に説明する。
［第１の実施の形態］
図１は、第１の実施の形態のパケット中継装置を示す図である。第１の実施の形態に係るパケット中継装置１は、通信装置間でコネクションを確立して送受信されるパケットを中継可能な通信装置である。パケット中継装置１は、ネットワークを介して通信装置２ａ，２ｂと接続されており、通信装置２ａと通信装置２ｂの間のコネクションの経路上に位置している。パケット中継装置１は、バッファ１ａと輻輳制御部１ｂを有する。
【００１６】
バッファ１ａは、パケット中継装置１に到着したパケットの中から選択された、転送を保留するパケットを格納するメモリである。バッファ１ａには、１またはそれ以上のコネクションについてのパケットを格納できる。複数のコネクションについてのパケットを保持する場合、バッファ１ａは、各コネクションを区別できるようにする。その場合、バッファ１ａでは、物理的に分離した複数のメモリを利用してもよいし、１つの物理メモリの記憶領域を論理的に複数の領域に分割して利用してもよい。
【００１７】
輻輳制御部１ｂは、バッファ１ａに転送を保留するパケットが格納されると、パケット中継装置１を通過する後続のパケットを監視する。そして、輻輳制御部１ｂは、バッファ１ａに格納されたパケットと同一コネクションのパケットの通過状況に応じたタイミングで、バッファ１ａに格納されたパケットを解放して送信させる。同一コネクションのパケットであるか否かは、例えば、パケットのヘッダに含まれる、送信元アドレス、宛先アドレス、送信元ポート番号および宛先ポート番号に基づいて判断する。
【００１８】
例えば、輻輳制御部１ｂは、同一コネクションの後続のパケットをカウントし、通過した後続のパケットが所定数に達したタイミングで、バッファ１ａに格納されたパケットを送信させることが考えられる。その際、同一コネクションのパケットを前回検出してからの経過時間を監視し、その経過時間に基づいてカウント結果を補正してもよい。
【００１９】
また、通過パケット数と経過時間とから、通信装置２ｂから通信装置２ａに送信される応答パケット（例えば、重複ＡＣＫ）の数を推定し、推定した応答パケット数に基づいてタイミングを判断してもよい。また、バッファ１ａにパケットが格納されてからの経過時間を監視し、その経過時間も考慮してタイミングを判断してもよい。
【００２０】
また、輻輳制御部１ｂは、バッファ１ａに格納されたパケットの再送パケットを検出してもよい。再送パケットであるか否かは、例えば、パケットのヘッダに含まれるシーケンス番号に基づいて判断する。再送パケットは、バッファ１ａに格納されたパケットが送信される前に検出されることもあるし、送信後に検出されることもあり得る。
【００２１】
再送パケットが検出されると、輻輳制御部１ｂは、それ以降の再送発生を抑制するために、バッファ１ａに格納されたパケットの送信タイミングを判断するためのパラメータを補正することが考えられる。例えば、同一コネクションの後続のパケット数についての閾値、同一コネクションのパケットを前回検出してからの経過時間についての閾値、バッファ１ａにパケットが格納されてからの経過時間についての閾値などを補正する。
【００２２】
また、輻輳制御部１ｂは、パケット中継装置１で輻輳発生が検出されると、バッファ１ａにパケットを格納して上記輻輳制御を行い、輻輳解消が検出されると、バッファ１ａに格納されたパケットを解放して上記輻輳制御を停止するようにしてもよい。輻輳発生後には、複数のコネクションそれぞれについて、上記輻輳制御を行ってもよい。その場合、送信待ちのパケットを一時的に格納するバッファ（図示せず）におけるパケットの滞留状況に応じて、上記輻輳制御の対象とするコネクションの最大数を設定してもよい。
【００２３】
このようなパケット中継装置１によれば、到着したパケットの中から、転送を保留するパケットが選択されて、バッファ１ａに格納される。輻輳制御部１ｂにより、バッファ１ａにパケットが格納された後にパケット中継装置１を通過するパケットが監視され、バッファ１ａに格納されたパケットと同一コネクションのパケットの通過状況に応じたタイミングで、バッファ１ａに格納されたパケットが送信されるよう制御される。
【００２４】
この輻輳制御により、通信装置２ａ，２ｂ間のパケット通信の送信レートを低下させ、パケット中継装置１の輻輳を緩和することができる。また、パケットの再送が発生することを抑制し、ネットワークの通信効率が低下することを抑制できる。すなわち、パケット中継装置１の輻輳制御では、転送を保留したパケットと同一コネクションの後続パケットの通過状況が考慮される。このため、ＴＣＰの高速再送メカニズムなどの様々な再送制御方法に柔軟に対応して、再送発生の可能性をできる限り低下させることが可能となる。
【００２５】
また、パケット中継装置１では、保留したパケットの送信タイミングを判断するためのパラメータを、自動的に補正することも可能である。すなわち、再送発生のタイミングの予測が外れてしまった場合に、それ以降の再送発生の可能性をより低下させる制御が可能となる。また、パケット中継装置１では、輻輳の程度に応じて、輻輳制御の対象とするコネクション数を調整することも可能である。すなわち、輻輳の程度に応じて、送信レートを低下させる程度を調整することが可能となる。
【００２６】
なお、上記輻輳制御は、コネクションを確立してパケット通信を行う種々の通信プロトコルに適用可能であり、ＴＣＰ／ＩＰに限定されない。また、上記輻輳制御において「パケット」とは、通信装置２ａ，２ｂ間で送受信される一定のデータ単位であればよく、フレームなど他の名称で呼ばれるものも含み得る。また、パケット中継装置１は、パケットを中継可能であればよく、ルータやスイッチなどの名称で呼ばれるものを含み得る。
【００２７】
以下に説明する第２および第３の実施の形態では、上記の輻輳制御をＴＣＰ／ＩＰに適用した場合について、更に詳細に説明する。
［第２の実施の形態］
図２は、第２の実施の形態の通信システムを示す図である。第２の実施の形態に係る通信システムは、ネットワーク１１，１２、端末装置２１〜２４およびパケットスイッチ１００を含む。
【００２８】
ネットワーク１１，１２は、ＴＣＰ／ＩＰに基づくパケット通信が可能なデータ通信網である。ネットワーク１１，１２内には、ルータやブリッジなどの通信装置（図示せず）が含まれてもよい。また、ネットワーク１１，１２内に、無線区間が含まれてもよい。
【００２９】
端末装置２１〜２４は、ＴＣＰ／ＩＰに基づくパケット通信が可能な通信端末装置であり、ＴＣＰコネクションを終端する。端末装置２１，２２は、ネットワーク１１に有線または無線で接続され、ネットワーク１１を介して他の端末装置とパケット通信が可能である。端末装置２３，２４は、ネットワーク１２に有線または無線で接続され、ネットワーク１２を介して他の端末装置とパケット通信が可能である。
【００３０】
パケットスイッチ１００は、ネットワーク１１とネットワーク１２との間で、パケットを中継する通信装置である。例えば、端末装置２１が端末装置２３宛てに送信したパケットを、ネットワーク１１側から受信しネットワーク１２側に転送する。また、端末装置２３が端末装置２１宛てに送信したパケットを、ネットワーク１２側から受信しネットワーク１１側に転送する。なお、パケットスイッチ１００は、受信したパケットについてＩＰ層またはデータリンク層までの処理を行い、ＴＣＰコネクションを終端しない。
【００３１】
以下では、端末装置２１と端末装置２３との間にＴＣＰコネクションを確立し、端末装置２１が端末装置２３宛てにデータを送信する場合を想定して、パケットスイッチ１００の輻輳制御を説明する。
【００３２】
図３は、第２の実施の形態のパケットスイッチを示すブロック図である。パケットスイッチ１００は、受信部１１０、コネクション管理部１２０、記憶部１３０、パケットカウンタ１４１、Ｄ−ＡＣＫタイマ１４２、再送タイマ１４３、遅延バッファ１５０、バッファ１６０、輻輳検出部１７０および送信部１８０を有する。
【００３３】
受信部１１０は、ネットワーク１１に接続されているポートに到着したパケットを取得する。そして、受信されたパケットの識別処理などを行い、パケットをコネクション管理部１２０に出力する。なお、受信部１１０とコネクション管理部１２０との間では、パケットの宛先に基づいて、出力先ポートの判定（スイッチング）が行われ得る。本実施の形態では、スイッチングの詳細については説明を省略する。
【００３４】
コネクション管理部１２０は、輻輳が発生していない状態では、受信部１１０から取得したパケットを、バッファ１６０に順次出力する。一方、輻輳が発生している状態では、ＴＣＰコネクションを監視し、受信部１１０から取得したパケットを、そのコネクションに応じて遅延バッファ１５０またはバッファ１６０に出力する。また、遅延バッファ１５０に格納されたパケットの出力タイミングを判断し、パケットを遅延バッファ１５０からバッファ１６０に出力させる。
【００３５】
なお、コネクションは、例えば、パケットのＩＰヘッダとＴＣＰヘッダに基づいて判断することができる。すなわち、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号および宛先ポート番号が同一であるパケットを、同一コネクションのパケットであると判断できる。ただし、送信元ポート番号および宛先ポート番号の一方または両方を無視して、コネクションの同一を判断する方法も考えられる。また、コネクション管理部１２０は、輻輳制御のため、記憶部１３０、パケットカウンタ１４１、Ｄ−ＡＣＫタイマ１４２および再送タイマ１４３を利用する。輻輳制御の詳細は後述する。
【００３６】
記憶部１３０は、コネクション管理部１２０による輻輳制御に用いられる情報を格納するメモリ（例えば、不揮発性メモリ）である。記憶部１３０には、コネクションテーブル１３１が格納される。コネクションテーブル１３１には、輻輳制御の対象とするコネクションについての情報（コネクション情報）が登録される。コネクション情報は、コネクション管理部１２０によって、追加および削除が行われる。なお、第２の実施の形態では、コネクション情報をテーブル形式で保存しているが、他のデータ形式で保存してもよい。
【００３７】
パケットカウンタ１４１は、コネクション管理部１２０からの指示に応じて、コネクション毎にコネクション管理部１２０を通過するパケットの数をカウントする。パケットカウンタ１４１は、コネクションの宛先の端末装置が重複ＡＣＫを送信するタイミングを予測するために用いられる。すなわち、遅延ＡＣＫ（Delayed ACK）アルゴリズムでは、所定数（例えば、２個）のパケットを受信するとＡＣＫを送信する。パケットカウンタ１４１は、この場合に生じる重複ＡＣＫを予測するために用いられる。
【００３８】
Ｄ−ＡＣＫタイマ１４２は、コネクション管理部１２０からの指示に応じて、コネクション毎に経過時間を測定する。Ｄ−ＡＣＫタイマ１４２は、パケットの宛先の端末装置が重複ＡＣＫを送信するタイミングを予測するために用いられる。遅延ＡＣＫアルゴリズムでは、受信パケット数が所定数に達する前であっても、前回のパケットの受信から所定時間経過すると（遅延ＡＣＫタイムアウトが生じると）ＡＣＫを送信する。Ｄ−ＡＣＫタイマ１４２は、この場合に生じる重複ＡＣＫを予測するために用いられる。
【００３９】
再送タイマ１４３は、コネクション管理部１２０からの指示に応じて、コネクション毎に経過時間を測定する。再送タイマ１４３は、コネクションの送信元の端末装置で生じる再送タイムアウトを予測するために用いられる。すなわち、再送アルゴリズムでは、パケットを送信してから所定時間内にそのパケットについてのＡＣＫを受信しないと、パケットを再送する。再送タイマ１４３は、この自発的な再送を予測するために用いられる。
【００４０】
なお、パケットカウンタ１４１は、コネクション管理部１２０からの指示に応じて、一部または全部のコネクションについてのカウンタをリセットする。また、Ｄ−ＡＣＫタイマ１４２および再送タイマ１４３は、コネクション管理部１２０からの指示に応じて、一部または全部のコネクションについてのタイマをリセットする。
【００４１】
遅延バッファ１５０は、転送を保留するパケットを格納するキュー形式のバッファメモリである。遅延バッファ１５０は、複数のコネクションに対応する複数のキューを含む。例えば、輻輳制御の対象のコネクション毎に１つのパケットが遅延バッファ１５０に格納される。コネクション管理部１２０によって、遅延バッファ１５０の何れかのキューにパケットが格納される。また、コネクション管理部１２０からの指示によって、遅延バッファ１５０の何れかのキューに格納されているパケットが、バッファ１６０に出力される。
【００４２】
バッファ１６０は、送信待ちのパケットを一時的に格納するキュー形式のバッファメモリである。バッファ１６０は、コネクション管理部１２０または遅延バッファ１５０から取得したパケットを、キューの末尾に追加する。また、キューの先頭にあるパケットを、送信部１８０に順次出力する。なお、バッファ１６０は、ＱｏＳ（Quality of Service）制御のために、優先度の異なる複数のキューを含んでいてもよい。
【００４３】
輻輳検出部１７０は、バッファ１６０に滞留するパケットの量を監視する。輻輳検出部１７０は、滞留パケット量（キュー長）が所定の閾値を超えると、輻輳が発生したと判断し、輻輳発生をコネクション管理部１２０に通知する。また、滞留パケット量が所定の閾値未満になると、輻輳が解消したと判断し、輻輳解消をコネクション管理部１２０に通知する。なお、輻輳発生を検出するための閾値と輻輳解消を検出するための閾値とは、異なってもよい。例えば、輻輳解消の閾値を、輻輳発生の閾値より小さく設定してもよい。
【００４４】
また、輻輳検出部１７０は、輻輳発生を検出するための閾値を多段階に設定し、輻輳の程度をコネクション管理部１２０に通知してもよい。その場合、コネクション管理部１２０は、輻輳制御の対象とするコネクションの最大数を、輻輳の程度に比例させることができる。例えば、閾値を３段階（レベル１＜レベル２＜レベル３）に設定し、レベル１の場合は１０コネクション、レベル２の場合は２０コネクション、レベル３の場合は３０コネクションを、輻輳制御の対象の上限とすることが考えられる。
【００４５】
送信部１８０は、バッファ１６０からパケットを順次取り出し、ネットワーク１２に接続されているポートに出力する。
なお、コネクション管理部１２０、パケットカウンタ１４１、Ｄ−ＡＣＫタイマ１４２および再送タイマ１４３は、第１の実施の形態の輻輳制御部１ｂの一例と見なすことができる。また、遅延バッファ１５０は、第１の実施の形態のバッファ１ａの一例と見なすことができる。
【００４６】
また、上記説明ではネットワーク１１からネットワーク１２に向かう方向の通信について説明したが、ネットワーク１２からネットワーク１１に向かう方向の通信についても、図３に示したものと同様の構成によって実現できる。
【００４７】
図４は、第２の実施の形態のパケットの構造例を示す図である。第２の実施の形態のパケット通信に用いるパケットは、ＩＰヘッダとＴＣＰヘッダとを含む。ＩＰヘッダは、３２ビットの送信元ＩＰアドレスと３２ビットの宛先ＩＰアドレスとを含む。ＴＣＰヘッダは、１６ビットの送信元ポート番号、１６ビットの宛先ポート番号、３２ビットのシーケンス番号、および、３２ビットのＡＣＫ番号を含む。
【００４８】
ここで、シーケンス番号は、送信元の端末装置における送信順序に従って一連のパケットに昇順に付与される番号である。再送パケットには、オリジナルのパケットと同じシーケンス番号が付与される。ＡＣＫ番号は、何れのパケットまで正常に受信できたかを示す番号であり、正常に連番で受信しているパケットの最後のシーケンス番号に１を加えた値が設定される。
【００４９】
図５は、第２の実施の形態のコネクションテーブルの構造例を示す図である。コネクションテーブル１３１は、前述の通り、記憶部１３０に格納されている。コネクションテーブル１３１は、バッファ番号、送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス、宛先ポート番号および重複ＡＣＫの項目を含む。横方向に並べられた情報同士が互いに関連付けられている。
【００５０】
バッファ番号は、遅延バッファ１５０内のキューを識別するための番号である。送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレスおよび宛先ポート番号は、コネクションを識別するための情報であり、パケットのＩＰヘッダおよびＴＣＰヘッダに含まれている情報に対応する。重複ＡＣＫは、宛先の端末装置から送信元の端末装置に返信された重複ＡＣＫの数の推定値であり、初期値は０である。重複ＡＣＫの数は、コネクション管理部１２０によって予測され、コネクションテーブル１３１に書き込まれる。
【００５１】
例えば、バッファ番号＝１、ＩＰアドレス＝１１．２２．３３．ＸＸ（端末装置２１のＩＰアドレス）、送信元ポート番号＝２９２０、宛先ＩＰアドレス＝５５．６６．７７．ＸＸ（端末装置２３のＩＰアドレス）、宛先ポート番号＝８０、重複ＡＣＫ＝１というコネクション情報が、コネクションテーブル１３１に登録される。これは、端末装置２１から端末装置２３宛てに送信されたパケットが遅延バッファ１５０の１番目のキューに格納されており、そのパケットが転送されないために、端末装置２３から端末装置２１に重複ＡＣＫが１回送信されたと推定されることを意味する。
【００５２】
図６は、第２の実施の形態の輻輳制御を示すフローチャートである。この処理は、輻輳発生が検出された後、パケットスイッチ１００において繰り返し実行される。以下、この輻輳制御の詳細をステップ番号に沿って説明する。
【００５３】
（ステップＳ１１１）コネクション管理部１２０は、パケットが到着したか（受信部１１０からパケットを取得したか）判断する。パケットが到着した場合、処理をステップＳ１１２に進める。到着していない場合、処理を後述のステップＳ１２３に進める。
【００５４】
（ステップＳ１１２）コネクション管理部１２０は、到着したパケットのコネクション情報（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号および宛先ポート番号）を確認する。そして、到着したパケットのコネクションが未監視であるか、すなわち、確認したコネクション情報がコネクションテーブル１３１に未登録であるか判断する。未監視のコネクションである場合、処理をステップＳ１１３に進める。監視中のコネクションである場合、パケットをバッファ１６０に出力し、処理をステップＳ１１６に進める。
【００５５】
（ステップＳ１１３）コネクション管理部１２０は、コネクションテーブル１３１を参照し、監視中のコネクション数が上限未満であるか判断する。上限未満である場合、処理をステップＳ１１４に進める。上限に達している場合、パケットをバッファ１６０に出力し、処理を終了する。なお、監視するコネクションの最大数としては、前述の通り、バッファ１６０に滞留するパケットの量に応じた値を用いてもよいし固定値を用いてもよい。
【００５６】
（ステップＳ１１４）コネクション管理部１２０は、到着したパケットを、バッファ１６０に格納せずに、遅延バッファ１５０の空いているキューに格納する。また、コネクションテーブル１３１に、ステップＳ１１２で確認したコネクション情報を登録する。
【００５７】
（ステップＳ１１５）再送タイマ１４３は、ステップＳ１１２で特定されたコネクションに対応するタイマを起動する。そして、処理を終了する。なお、再送タイマ１４３のタイムアウト時間は、再送アルゴリズムにおける再送タイムアウト時間を考慮して予め決められている。
【００５８】
（ステップＳ１１６）パケットカウンタ１４１は、ステップＳ１１２で特定されたコネクションに対応するカウンタをインクリメント（１だけ加算）する。なお、カウンタの初期値は０である。
【００５９】
（ステップＳ１１７）コネクション管理部１２０は、ステップＳ１１６でインクリメントされた結果、カウンタが２に達したか判断する。カウンタが２に達した場合、処理をステップＳ１１８に進める。カウンタが２に達していない場合（すなわち、カウンタが１の場合）、処理をステップＳ１２２に進める。
【００６０】
（ステップＳ１１８）コネクション管理部１２０は、コネクションテーブル１３１に登録されている、ステップＳ１１２で特定したコネクションに対応する重複ＡＣＫの数を、インクリメントする。パケットカウンタ１４１は、そのコネクションに対応するカウンタをクリア（０に初期化）する。Ｄ−ＡＣＫタイマ１４２は、そのコネクションに対応するタイマをクリア（停止し初期化）する。
【００６１】
（ステップＳ１１９）コネクション管理部１２０は、ステップＳ１１８で重複ＡＣＫの数をインクリメントした結果、重複ＡＣＫの数が閾値（例えば、２個）に達したか判断する。閾値に達した場合、処理をステップＳ１２０に進める。閾値未満である場合、処理を終了する。
【００６２】
（ステップＳ１２０）コネクション管理部１２０は、遅延バッファ１５０に格納されている、ステップＳ１１２で特定したコネクションのパケットを、遅延バッファ１５０からバッファ１６０に出力させる。
【００６３】
（ステップＳ１２１）コネクション管理部１２０は、ステップＳ１２０で解放したパケットに関するコネクション情報をコネクションテーブル１３１から削除する。再送タイマ１４３は、そのコネクションに対応するタイマをクリアする。そして、処理を終了する。
【００６４】
（ステップＳ１２２）Ｄ−ＡＣＫタイマ１４２は、ステップＳ１１２で特定されたコネクションに対応するタイマを起動する。そして、処理を終了する。なお、Ｄ−ＡＣＫタイマ１４２のタイムアウト時間は、遅延ＡＣＫアルゴリズムにおける遅延ＡＣＫタイムアウト時間（例えば、２００ｍｓ）に対応している。
【００６５】
図７は、第２の実施の形態の輻輳制御を示すフローチャート（続き）である。
（ステップＳ１２３）コネクション管理部１２０は、Ｄ−ＡＣＫタイマ１４２からタイムアウトの通知を受けたか、すなわち、Ｄ−ＡＣＫタイマ１４２で何れかのタイマがタイムアウトしたか判断する。タイムアウトが生じた場合、処理をステップＳ１１８に進め、タイムアウトが生じたコネクションについてステップＳ１１８〜Ｓ１２１の処理を行う。タイムアウトが生じていない場合、処理をステップＳ１２４に進める。
【００６６】
（ステップＳ１２４）コネクション管理部１２０は、再送タイマ１４３からタイムアウトの通知を受けたか、すなわち、再送タイマ１４３で何れかのタイマがタイムアウトしたか判断する。タイムアウトが生じた場合、処理をステップＳ１２５に進める。タイムアウトが生じていない場合、処理をステップＳ１２７に進める。
【００６７】
（ステップＳ１２５）コネクション管理部１２０は、遅延バッファ１５０に格納されている、タイムアウトが生じたコネクションのパケットを、遅延バッファ１５０からバッファ１６０に出力させる。
【００６８】
（ステップＳ１２６）コネクション管理部１２０は、ステップＳ１２５で解放したパケットに関するコネクション情報をコネクションテーブル１３１から削除する。パケットカウンタ１４１は、そのコネクションに対応するカウンタをクリアする。Ｄ−ＡＣＫタイマ１４２および再送タイマ１４３は、そのコネクションに対応するタイマをクリアする。そして、処理を終了する。
【００６９】
（ステップＳ１２７）コネクション管理部１２０は、輻輳が解消したか（輻輳検出部１７０から輻輳解消の通知を受けたか）判断する。輻輳が解消した場合、処理をステップＳ１２８に進める。輻輳が解消していない場合、処理を終了する。
【００７０】
（ステップＳ１２８）コネクション管理部１２０は、遅延バッファ１５０に格納されている全てのパケットを、バッファ１６０に出力させる。
（ステップＳ１２９）コネクション管理部１２０は、コネクションテーブル１３１から全てのコネクション情報を削除する。パケットカウンタ１４１は、全てのカウンタをクリアし、Ｄ−ＡＣＫタイマ１４２および再送タイマ１４３は、全てのタイマをクリアする。
【００７１】
このようにして、パケットスイッチ１００は、輻輳が発生すると、１またはそれ以上のコネクションそれぞれについて、パケットを遅延バッファ１５０に格納して転送を保留する。そして、保留したパケットと同一コネクションの後続のパケットを先に通過させる。ただし、保留したパケットの再送が発生しないようなタイミングでパケットを解放する。
【００７２】
すなわち、パケットの送信元の端末装置は、パケットを送信してから再送タイムアウト時間内に正常なＡＣＫを受信しないと、パケットを再送する。このため、パケットスイッチ１００は、再送タイムアウト時間を考慮してパケットを解放する。また、送信元の端末装置は、宛先の端末装置から所定数（例えば、３個）の重複ＡＣＫを受信すると、パケットを再送する。このため、パケットスイッチ１００は、後続のパケットの通過数およびパケットの到着間隔に基づいて重複ＡＣＫの数を推定して、パケットを解放する。
【００７３】
なお、図６，７のフローチャートに示した処理順序は一例であり、他の処理順序によっても同様の輻輳制御を実現し得る。例えば、ステップＳ１１４とＳ１１５、ステップＳ１２０とＳ１２１、ステップＳ１２５とＳ１２６、ステップＳ１２８とＳ１２９は、それぞれ逆順に実行してもよい。また、ステップＳ１１１，Ｓ１２３，Ｓ１２４，Ｓ１２７の条件判断は、任意の順序で実行してもよいし、並列に実行することもできる。
【００７４】
以下、パケットスイッチ１００で輻輳が発生しており、端末装置２１が端末装置２３との間でコネクションを設定してデータを送信する場合のパケットの流れの具体例を示す。
図８は、遅延パケットの解放タイミング例を示す第１のシーケンス図である。図８の例では、端末装置２１が端末装置２３にパケット＃１〜＃９を送信している。
【００７５】
パケット＃１が、パケットスイッチ１００経由で端末装置２３に正常に到着する。パケット＃１の受信を受けて、パケット＃１まで正常に受信したことを示すＡＣＫパケット（ＡＣＫ＃１）が、端末装置２３から端末装置２１に送信される。
【００７６】
一方、パケット＃２が、パケットスイッチ１００によって転送が保留される。そして、後続のパケット＃３，＃４が、パケット＃２を追い抜いて端末装置２３に到着する。ここでは、パケット＃３とパケット＃４の間隔が、端末装置２３の遅延ＡＣＫタイムアウト時間（２００ｍｓ）より短いとする。パケット＃２が欠落しており、且つ、パケット＃３，＃４の２つが受信されたため、パケット＃１まで正常に受信したことを示す重複ＡＣＫパケット（ＡＣＫ＃１）が、端末装置２３から端末装置２１に送信される。
【００７７】
このとき、パケットスイッチ１００では、パケット＃３の通過が検出され、その後、パケット＃３から遅延ＡＣＫタイムアウト時間内にパケット＃４の通過が検出される。そこで、重複ＡＣＫの数が１であると推定される。
【００７８】
更に、後続のパケット＃５，＃６が、パケット＃２を追い抜いて端末装置２３に到着する。ここでは、パケット＃５とパケット＃６の間隔が、端末装置２３の遅延ＡＣＫタイムアウト時間より短いとする。パケット＃２が欠落しており、且つ、パケット＃５，＃６の２つが受信されたため、重複ＡＣＫパケット（ＡＣＫ＃１）が、端末装置２３から端末装置２１に送信される。
【００７９】
このとき、パケットスイッチ１００では、パケット＃５の通過が検出され、その後、パケット＃５から遅延ＡＣＫタイムアウト時間内にパケット＃６の通過が検出される。そこで、重複ＡＣＫの数が２であると推定される。端末装置２１が重複ＡＣＫを３個受信するとパケット＃２を再送してしまうことから、パケット＃６が通過した後、パケット＃２が解放される。
【００８０】
その後、パケット＃７が、端末装置２３に正常に到着する。この時点で、パケット＃１〜＃７を正常に受信したことになるため、パケット＃７まで正常に受信したことを示すＡＣＫパケット（ＡＣＫ＃７）が、端末装置２３から端末装置２１に送信される。
【００８１】
このように、パケットスイッチ１００は、端末装置２３から端末装置２１に２個目の重複ＡＣＫが送信される契機となるパケット＃６の通過を検出すると、同一コネクションの次のパケット＃７が通過する前にパケット＃２を解放する。これにより、端末装置２３から端末装置２１に３個目の重複ＡＣＫが送信されることを回避でき、パケット＃２の再送を抑制できる。また、端末装置２１は、パケット＃２に対応するＡＣＫを遅れて受信するため、送信レートを低下させることになる。
【００８２】
図９は、遅延パケットの解放タイミング例を示す第２のシーケンス図である。図９の例では、端末装置２１が端末装置２３にパケット＃１〜＃７を送信している。パケット＃１，＃２の送信については、図８の例と同様である。
【００８３】
パケット＃３が、パケット＃２を追い抜いて端末装置２３に到着する。ただし、パケット＃３と次のパケット＃４の間隔が、端末装置２３の遅延ＡＣＫタイムアウト時間（２００ｍｓ）より長いとする。パケット＃２が欠落し、パケット＃３が受信され、且つ、遅延ＡＣＫタイムアウトが発生したため、パケット＃４を待たずに、重複ＡＣＫパケット（ＡＣＫ＃１）が端末装置２３から端末装置２１に送信される。
【００８４】
このとき、パケットスイッチ１００では、パケット＃３の通過が検出され、その後、Ｄ−ＡＣＫタイマ１４２がタイムアウトする。そこで、パケット＃４が通過する前に、重複ＡＣＫの数が１であると推定される。
【００８５】
次に、パケット＃４が、パケット＃２を追い抜いて端末装置２３に到着する。ただし、パケット＃４と次のパケット＃５の間隔が、端末装置２３の遅延ＡＣＫタイムアウト時間より長いとする。パケット＃２が欠落し、パケット＃４が受信され、且つ、遅延ＡＣＫタイムアウトが発生したため、パケット＃５を待たずに、重複ＡＣＫパケット（ＡＣＫ＃１）が端末装置２３から端末装置２１に送信される。
【００８６】
このとき、パケットスイッチ１００では、パケット＃４の通過が検出され、その後、Ｄ−ＡＣＫタイマ１４２がタイムアウトする。そこで、パケット＃５が通過する前に、重複ＡＣＫの数が２であると推定される。端末装置２１が重複ＡＣＫを３個受信するとパケット＃２を再送してしまうことから、パケット＃４が通過しＤ−ＡＣＫタイマ１４２がタイムアウトした後、パケット＃２が解放される。
【００８７】
その後、パケット＃５が、端末装置２３に正常に到着する。この時点で、パケット＃１〜＃５を正常に受信したことになるため、パケット＃５まで正常に受信したことを示すＡＣＫパケット（ＡＣＫ＃５）が、端末装置２３から端末装置２１に送信される。
【００８８】
このように、パケットスイッチ１００は、パケット＃４の通過後、端末装置２３から端末装置２１に２個目の重複ＡＣＫが送信される契機となる遅延ＡＣＫタイムアウトを検出すると、同一コネクションの次のパケット＃５が通過する前にパケット＃２を解放する。これにより、端末装置２３から端末装置２１に３個目の重複ＡＣＫが送信されることを回避でき、パケット＃２の再送を抑制できる。また、端末装置２１は、パケット＃２に対応するＡＣＫを遅れて受信するため、送信レートを低下させることになる。
【００８９】
図１０は、遅延パケットの解放タイミング例を示す第３のシーケンス図である。図１０の例では、端末装置２１が端末装置２３にパケット＃１〜＃３を送信している。パケット＃１，＃２の送信については、図８，９の例と同様である。
【００９０】
ここでは、端末装置２１は、パケット＃２を送信した後、パケット＃２に対するＡＣＫを受信するまで次のパケット＃３を送信しないとする。この場合、パケットスイッチ１００では、重複ＡＣＫの推定数が０のまま、再送タイマ１４３がタイムアウトし、パケット＃２が解放される。これにより、端末装置２１で再送タイムアウトが発生することを回避でき、パケット＃２の再送を抑制できる。また、端末装置２１は、パケット＃２に対応するＡＣＫを遅れて受信するため、送信レートを低下させることになる。
【００９１】
このような第２の実施の形態に係る通信システムによれば、パケットスイッチ１００で輻輳が発生すると、パケットスイッチ１００を経由するコネクションの送信レートを低下させ、輻輳を緩和することができる。また、パケットの再送が発生することを抑制し、ネットワークの通信効率が低下することを抑制できる。すなわち、パケットスイッチ１００は、再送が発生しない範囲で、できる限りパケットの転送を遅延させるように制御することが可能となる。また、ＴＣＰの高速再送メカニズムなど複雑な再送アルゴリムにも対応できる。
【００９２】
また、パケットスイッチ１００は、輻輳の程度に応じて輻輳制御の対象とするコネクションの数を調整することもできる。輻輳の程度が大きいほど、多くのコネクションを輻輳制御の対象とすることで、迅速に輻輳状態を解消することが可能となる。
【００９３】
［第３の実施の形態］
次に、第３の実施の形態について説明する。第２の実施の形態と異なる事項を中心に説明し、第２の実施の形態と同様の事項についは適宜説明を省略する。第３の実施の形態に係る通信システムは、保留パケットの解放タイミングを判断するために用いるパラメータ（重複ＡＣＫの数の閾値、Ｄ−ＡＣＫタイマのタイムアウト時間および再送タイマのタイムアウト時間）を、動的に変更することができる。
【００９４】
第３の実施の形態に係る通信システムは、図２に示した第２の実施の形態に係る通信システムと同様の構成によって実現できる。ただし、第３の実施の形態では、パケットスイッチ１００に代えて、以下に説明するパケットスイッチ２００を使用する。
【００９５】
図１１は、第３の実施の形態のパケットスイッチを示すブロック図である。パケットスイッチ２００は、受信部２１０、コネクション管理部２２０、記憶部２３０、パケットカウンタ２４１、Ｄ−ＡＣＫタイマ２４２、再送タイマ２４３、忘却タイマ２４４、遅延バッファ２５０、バッファ２６０、輻輳検出部２７０および送信部２８０を有する。
【００９６】
このうち、受信部２１０、パケットカウンタ２４１、Ｄ−ＡＣＫタイマ２４２、再送タイマ２４３、遅延バッファ２５０、バッファ２６０、輻輳検出部２７０および送信部２８０の動作は、第２の実施の形態の同名の要素と同様である。
【００９７】
コネクション管理部２２０は、輻輳が発生している状態では、第２の実施の形態のコネクション管理部１２０と同様に、ＴＣＰコネクションを監視し、取得したパケットの保留および保留したパケットの解放を制御する。更に、コネクション管理部２２０は、保留したパケットの再送パケットが通過したか監視し、再送パケットが検出されると、保留したパケットの解放タイミングを判断するためのパラメータを補正する。
【００９８】
なお、再送パケットは、保留したパケットを解放した後に検出される場合がある。そこで、コネクション管理部２２０は、解放したパケットについてのコネクション情報を、コネクションテーブル２３１から即時に削除せず、パケットの解放から一定時間経過した後に削除する。
【００９９】
記憶部２３０は、コネクション管理部２２０による輻輳制御に用いられる情報を格納するメモリである。記憶部２３０には、コネクションテーブル２３１および学習テーブル２３２が格納される。コネクションテーブル２３１には、輻輳制御の対象とするコネクションについての情報が登録される。学習テーブル２３２には、輻輳制御の対象とするコネクション毎に、補正後のパラメータが登録される。
【０１００】
忘却タイマ２４４は、コネクション管理部２２０からの指示に応じて、コネクション毎に経過時間を測定する。忘却タイマ２４４は、遅延バッファ２５０に格納されたパケットの解放後、解放されたパケットについてのコネクション情報をコネクションテーブル２３１から削除するタイミングを判断するために用いられる。なお、忘却タイマ２４４は、コネクション管理部２２０からの指示に応じて、一部または全部のコネクションについてのタイマをリセットする。
【０１０１】
図１２は、第３の実施の形態のコネクションテーブルの構造例を示す図である。コネクションテーブル２３１は、前述の通り、記憶部２３０に格納されている。コネクションテーブル２３１は、バッファ番号、送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス、宛先ポート番号、重複ＡＣＫおよびシーケンス番号の項目を含む。横方向に並べられた情報同士が互いに関連付けられている。
【０１０２】
バッファ番号、送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス、宛先ポート番号および重複ＡＣＫの意味は、図５に示した第２の実施の形態のコネクションテーブル１３１と同様である。シーケンス番号の項目には、遅延バッファ２５０に格納されたパケットのＴＣＰヘッダに記載されているシーケンス番号が設定される。コネクション管理部２２０でシーケンス番号が同一のパケットが取得された場合、そのパケットは遅延バッファ２５０に格納されたパケットの再送パケットであると判断することができる。
【０１０３】
図１３は、第３の実施の形態の学習テーブルの構造例を示す図である。学習テーブル２３２は、前述の通り、記憶部２３０に格納されている。学習テーブル２３２は、送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス、宛先ポート番号、重複ＡＣＫ、Ｄ−ＡＣＫタイマおよび再送タイマの項目を含む。横方向に並べられた情報同士が互いに関連付けられている。
【０１０４】
送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレスおよび宛先ポート番号の意味は、コネクションテーブル２３１と同様である。重複ＡＣＫの項目には、重複ＡＣＫの数から保留パケットを解放するか否かを判断するための閾値が設定される。Ｄ−ＡＣＫタイマの項目には、Ｄ−ＡＣＫタイマ２４２のタイムアウト時間が設定される。再送タイマの項目には、再送タイマ２４３のタイムアウト時間が設定される。このように、コネクション毎に、重複ＡＣＫの閾値およびタイムアウト時間を補正することができる。
【０１０５】
なお、図１３の例では、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号および宛先ポート番号の全てが同一であるコネクションについて、対応する補正後のパラメータ（重複ＡＣＫ、Ｄ−ＡＣＫタイマおよび再送タイマ）を適用している。一方で、送信元ポート番号および宛先ポート番号の一方または両方を考慮せずに、補正後のパラメータを適用する方法も考えられる。これは、ポート単位ではなく端末装置単位で、重複ＡＣＫの閾値などの設定がなされる場合などに有効である。
【０１０６】
図１４は、第３の実施の形態の輻輳制御を示すフローチャートである。この処理は、輻輳発生が検出された後、パケットスイッチ２００において繰り返し実行される。以下、この輻輳制御の詳細をステップ番号に沿って説明する。
【０１０７】
（ステップＳ２１１）コネクション管理部２２０は、パケットが到着したか判断する。パケットが到着した場合、処理をステップＳ２１２に進める。到着していない場合、処理を後述のステップＳ２３１に進める。
【０１０８】
（ステップＳ２１２）コネクション管理部２２０は、到着したパケットのコネクション情報（送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号および宛先ポート番号）とシーケンス番号を確認する。そして、到着したパケットが再送パケットであるか、すなわち、確認したコネクション情報およびシーケンス番号がコネクションテーブル２３１に登録されているか判断する。再送パケットである場合、処理をステップＳ２１３に進める。再送パケットでない場合、処理を後述のステップＳ２２０に進める。
【０１０９】
（ステップＳ２１３）コネクション管理部２２０は、ステップＳ２１２で特定したコネクションについて、重複ＡＣＫの数が０、且つ、パケットカウンタ２４１が０であるか判断する。この条件を満たす場合、処理をステップＳ２１４に進める。条件を満たさない場合、処理をステップＳ２１５に進める。
【０１１０】
（ステップＳ２１４）コネクション管理部２２０は、ステップＳ２１２で特定したコネクションについて、再送タイマ２４３のタイムアウト時間を所定量だけ減少させる。そして、補正後のタイムアウト時間を学習テーブル２３２に書き込む。その後、処理をステップＳ２２０に進める。
【０１１１】
（ステップＳ２１５）コネクション管理部２２０は、到着した再送パケットのオリジナルのパケットについて、パケットカウンタ２４１が重複ＡＣＫの閾値×２個の後続のパケットをカウントした後に解放する処理を行ったか判断する。その処理を行った場合、処理をステップＳ２１６に進める。行っていない場合、処理をステップＳ２１９に進める。
【０１１２】
（ステップＳ２１６）コネクション管理部２２０は、ステップＳ２１２で特定したコネクションについて、重複ＡＣＫの閾値をデクリメント（１つだけ減算）する。そして、補正後の重複ＡＣＫの閾値を学習テーブル２３２に書き込む。
【０１１３】
（ステップＳ２１７）コネクション管理部２２０は、ステップＳ２１６で補正した後の重複ＡＣＫの閾値が０であるか判断する。閾値が０である場合、処理をステップＳ２１８に進める。閾値が０でない場合、処理をステップＳ２２０に進める。
【０１１４】
（ステップＳ２１８）コネクション管理部２２０は、ステップＳ２１２で特定したコネクションを、輻輳制御の対象から外す。また、以降も、そのコネクションを輻輳制御の対象に選択しないようにする。その後、処理をステップＳ２２０に進める。
【０１１５】
（ステップＳ２１９）コネクション管理部２２０は、ステップＳ２１２で特定したコネクションについて、Ｄ−ＡＣＫタイマ２４２のタイムアウト時間を、所定量だけ減少させる。そして、補正後のタイムアウト時間を学習テーブル２３２に書き込む。その後、処理をステップＳ２２０に進める。
【０１１６】
図１５は、第３の実施の形態の輻輳制御を示すフローチャート（続き１）である。
（ステップＳ２２０）コネクション管理部２２０は、到着したパケットのコネクションが未監視であるか判断する。未監視のコネクションである場合、処理をステップＳ２２１に進める。監視中のコネクションである場合、パケットをバッファ２６０に出力し、処理をステップＳ２２４に進める。
【０１１７】
（ステップＳ２２１）コネクション管理部２２０は、監視中のコネクション数が上限未満であるか判断する。上限未満である場合、処理をステップＳ２２２に進める。上限に達している場合、パケットをバッファ２６０に出力し、処理を終了する。
【０１１８】
（ステップＳ２２２）コネクション管理部２２０は、到着したパケットを、バッファ２６０に出力せずに、遅延バッファ２５０の空いているキューに格納する。また、コネクションテーブル２３１に、ステップＳ２１２で確認したコネクション情報およびシーケンス番号を登録する。
【０１１９】
（ステップＳ２２３）再送タイマ２４３は、ステップＳ２１２で特定されたコネクションに対応するタイマを起動する。タイムアウト時間は、学習テーブル２３２に登録されているコネクションの場合には、補正された値を使用し、登録されていないコネクションの場合には、既定値を使用する。そして、処理を終了する。
【０１２０】
（ステップＳ２２４）パケットカウンタ２４１は、ステップＳ２１２で特定されたコネクションに対応するカウンタをインクリメントする。
（ステップＳ２２５）コネクション管理部２２０は、ステップＳ２２４でインクリメントされた結果、カウンタが２に達したか判断する。カウンタが２に達した場合、処理をステップＳ２２６に進める。２に達していない場合、処理をステップＳ２３０に進める。
【０１２１】
（ステップＳ２２６）コネクション管理部２２０は、コネクションテーブル２３１に登録された、ステップＳ２１２で特定したコネクションに対応する重複ＡＣＫの数をインクリメントする。パケットカウンタ２４１は、そのコネクションに対応するカウンタをクリアする。Ｄ−ＡＣＫタイマ２４２は、そのコネクションに対応するタイマをクリアする。
【０１２２】
（ステップＳ２２７）コネクション管理部２２０は、ステップＳ２２６で重複ＡＣＫの数をインクリメントした結果、重複ＡＣＫの数が閾値に達したか判断する。閾値は、学習テーブル２３２に登録されているコネクションの場合は、補正された値を使用し、登録されていないコネクションの場合は、既定値を使用する。閾値に達した場合、処理をステップＳ２２８に進める。閾値未満である場合、処理を終了する。
【０１２３】
（ステップＳ２２８）コネクション管理部２２０は、遅延バッファ２５０に格納されている、ステップＳ２１２で特定したコネクションのパケットを、遅延バッファ２５０からバッファ２６０に出力させる。
【０１２４】
（ステップＳ２２９）再送タイマ２４３は、ステップＳ２１２で特定されたコネクションに対応するタイマをクリアする。忘却タイマ２４４は、ステップＳ２１２で特定されたコネクションに対応するタイマを起動する。忘却タイマ２４４のタイムアウト時間は、オリジナルのパケットが送信されてから再送パケットが送信されるまでの最大遅延時間を考慮して予め決められている。
【０１２５】
（ステップＳ２３０）Ｄ−ＡＣＫタイマ２４２は、ステップＳ２１２で特定されたコネクションに対応するタイマを起動する。タイムアウト時間は、学習テーブル２３２に登録されているコネクションの場合は、補正された値を使用し、登録されていないコネクションの場合は、既定値を使用する。そして、処理を終了する。
【０１２６】
図１６は、第３の実施の形態の輻輳制御を示すフローチャート（続き２）である。
（ステップＳ２３１）コネクション管理部２２０は、Ｄ−ＡＣＫタイマ２４２で、何れかのコネクションのタイマがタイムアウトしたか判断する。タイムアウトが生じた場合、処理をステップＳ２２６に進め、タイムアウトが生じたコネクションについてステップＳ２２６〜Ｓ２２９の処理を行う。タイムアウトが生じていない場合、処理をステップＳ２３２に進める。
【０１２７】
（ステップＳ２３２）コネクション管理部２２０は、再送タイマ２４３で、何れかのコネクションのタイマがタイムアウトしたか判断する。タイムアウトが生じた場合、処理をステップＳ２３３に進める。タイムアウトが生じていない場合、処理をステップＳ２３５に進める。
【０１２８】
（ステップＳ２３３）コネクション管理部２２０は、遅延バッファ２５０に格納されている、タイムアウトが生じたコネクションのパケットを、遅延バッファ２５０からバッファ２６０に出力させる。
【０１２９】
（ステップＳ２３４）パケットカウンタ２４１は、ステップＳ２３２でタイムアウトが生じたコネクションに対応するカウンタをクリアする。Ｄ−ＡＣＫタイマ２４２および再送タイマ２４３は、そのコネクションに対応するタイマをクリアする。忘却タイマ２４４は、そのコネクションに対応するタイマを起動する。そして、処理を終了する。
【０１３０】
（ステップＳ２３５）コネクション管理部２２０は、忘却タイマ２４４で、何れかのコネクションのタイマがタイムアウトしたか判断する。タイムアウトが生じた場合、処理をステップＳ２３６に進める。タイムアウトが生じていない場合、処理をステップＳ２３７に進める。
【０１３１】
（ステップＳ２３６）コネクション管理部２２０は、ステップＳ２３５でタイムアウトが生じたコネクションのコネクション情報をコネクションテーブル２３１から削除する。そして、処理を終了する。
【０１３２】
（ステップＳ２３７）コネクション管理部２２０は、輻輳が解消したか判断する。輻輳が解消した場合、処理をステップＳ２３８に進める。輻輳が解消していない場合、処理を終了する。
【０１３３】
（ステップＳ２３８）コネクション管理部２２０は、遅延バッファ２５０に格納されている全てのパケットを、バッファ２６０に出力させる。
（ステップＳ２３９）コネクション管理部２２０は、コネクションテーブル２３１から全てのコネクション情報を削除する。パケットカウンタ２４１は、全てのカウンタをクリアする。Ｄ−ＡＣＫタイマ２４２、再送タイマ２４３および忘却タイマ２４４は、全てのタイマをクリアする。
【０１３４】
このようにして、パケットスイッチ２００は、輻輳が発生すると、１またはそれ以上のコネクションそれぞれについて、パケットを遅延バッファ２５０に格納して転送を保留する。そして、保留したパケットの再送が発生しないタイミングを予測し、パケットを解放する。また、パケットスイッチ２００は、保留したパケットが再送された場合、タイミングの予測に用いるパラメータを補正する。
【０１３５】
具体的には、保留したパケットの後続のパケットが１つも通過していない状態で再送が発生した場合は、送信元の端末装置の再送タイムアウト時間が既定値と異なる可能性がある。そこで、再送タイマ２４３のタイムアウト時間を補正する。重複ＡＣＫの閾値×２個のパケットが通過して保留パケットを解放した状況で再送が発生した場合、送信元の端末装置の重複ＡＣＫ数の設定が既定値と異なる可能性がある。そこで、重複ＡＣＫの閾値を補正する。それ以外の場合、宛先の端末装置の遅延ＡＣＫタイムアウト時間が既定値と異なる可能性がある。そこで、Ｄ−ＡＣＫタイマ２４２のタイムアウト時間を補正する。
【０１３６】
なお、ステップＳ２１３〜Ｓ２１９のパラメータの補正方法は一例であり、他の補正方法も考えられる。また、図１４〜１６のフローチャートに示した処理順序は一例であり、他の処理順序によっても同様の輻輳制御を実現し得る。例えば、ステップＳ２１３〜Ｓ２１９のパラメータの補正処理を、到着パケットの処理後に行ってもよいし、到着パケットの処理と並列に行ってもよい。
【０１３７】
上記の輻輳制御では、学習テーブル２３２に補正後のパラメータを登録しておけば、その後は、送信元ＩＰアドレス、宛先ＩＰアドレス、送信元ポート番号および宛先ポート番号が同一であるコネクションに対して、そのパラメータを適用できる。ただし、端末装置２１〜２４の設定が変更される可能性を考慮し、学習テーブル２３２に登録されたパラメータに有効期限を設定してもよい。すなわち、学習テーブル２３２にパラメータを登録（または更新）してから一定期間だけ、そのパラメータが有効になるようにしてもよい。
【０１３８】
以下、パケットスイッチ２００で再送パケットが検出されパラメータが補正されることになる場合のパケットの流れの具体例を示す。
図１７は、解放タイミングの補正例を示す第１のシーケンス図である。図１７のパケット＃１〜＃８の流れは、図８に示したパケット＃１〜＃８の流れと基本的に同じである。ただし、図１７の例では、パケットスイッチ２００は、端末装置２１が重複ＡＣＫを３個受信するとパケット＃２を再送すると予測しているのに対し、端末装置２１は、重複ＡＣＫを２個受信した段階でパケット＃２を再送している。すなわち、端末装置２１における重複ＡＣＫの閾値の設定が、パケットスイッチ２００の予測と異なるために、パケット＃２が再送されている。
【０１３９】
パケットスイッチ２００は、コネクションテーブル２３１に残っているコネクション情報とシーケンス番号を参照して、再送されたパケット＃２を検出する。この時点までに、パケットスイッチ２００は、重複ＡＣＫの閾値×２個（＝４個）の後続のパケットをカウントした後、保留していたパケット＃２を解放している。従って、パケットスイッチ２００は、端末装置２１における重複ＡＣＫの閾値の設定が予測と異なると判断し、パラメータを補正する。これにより、以降はパケットの再送が発生する可能性を低減できる。
【０１４０】
図１８は、解放タイミングの補正例を示す第２のシーケンス図である。図１８のパケット＃１〜＃５の流れは、図９に示したパケット＃１〜＃５の流れと基本的に同じである。ただし、図１８の例では、パケットスイッチ２００は、端末装置２３の遅延ＡＣＫタイムアウト時間が２００ｍｓであると予測しているのに対し、端末装置２３の遅延ＡＣＫタイムアウト時間は１５０ｍｓである。
【０１４１】
すなわち、端末装置２３における遅延ＡＣＫタイムアウト時間の設定が、パケットスイッチ２００の予測と異なるために、２個の重複ＡＣＫが送信されたと推定したタイミングで、実際には３個の重複ＡＣＫが送信されている。このため、パケットスイッチ２００の予測に反して、パケット＃２が再送されている。
【０１４２】
パケットスイッチ２００は、コネクションテーブル２３１に残っているコネクション情報とシーケンス番号を参照して、再送されたパケット＃２を検出する。この時点までに、パケットスイッチ２００は、Ｄ−ＡＣＫタイマ２４２のタイムアウトに起因して、保留していたパケット＃２を解放している。従って、パケットスイッチ２００は、端末装置２３における遅延ＡＣＫタイムアウト時間の設定が予測と異なると判断し、パラメータを補正する。これにより、以降はパケットの再送が発生する可能性を低減できる。
【０１４３】
図１９は、解放タイミングの補正例を示す第３のシーケンス図である。図１９のパケット＃１，＃２の流れは、図１０のパケット＃１，＃２の流れと基本的に同じである。ただし、図１９の例では、端末装置２１で、パケットスイッチ２００の予測よりも早いタイミングで再送タイムアウトが発生し、パケット＃２が再送されている。
【０１４４】
パケットスイッチ２００は、コネクションテーブル２３１に残っているコネクション情報とシーケンス番号を参照して、再送されたパケット＃２を検出する。この時点までに、パケットスイッチ２００は、同一コネクションの後続のパケットを１つも検出せずに、保留していたパケット＃２を解放している。従って、パケットスイッチ２００は、端末装置２１における再送タイムアウト時間の設定が予測と異なると判断し、パラメータを補正する。これにより、以降はパケットの再送が発生する可能性を低減できる。
【０１４５】
このような第３の実施の形態に係る通信システムによれば、第２の実施の形態に係る通信システムと同様の効果が得られる。更に、パケットスイッチ２００では、保留したパケットの送信タイミングを判断するためのパラメータを、自動的に補正することができる。すなわち、再送発生のタイミングの予測が外れて再送が発生した場合に、それ以降の再送発生の可能性をより低下させる制御が可能となる。これにより、端末装置２１〜２４の設定が変更されてパケット通信が行われる場合にも柔軟に対応して、ネットワークの通信効率の低下を抑制できる。
【符号の説明】
【０１４６】
１  パケット中継装置
１ａ  バッファ
１ｂ  輻輳制御部
２ａ，２ｂ  通信装置
【図１】
0005402581.tif 000002
【図２】
0005402581.tif 000003
【図３】
0005402581.tif 000004
【図４】
0005402581.tif 000005
【図５】
0005402581.tif 000006
【図６】
0005402581.tif 000007
【図７】
0005402581.tif 000008
【図８】
0005402581.tif 000009
【図９】
0005402581.tif 000010
【図１０】
0005402581.tif 000011
【図１１】
0005402581.tif 000012
【図１２】
0005402581.tif 000013
【図１３】
0005402581.tif 000014
【図１４】
0005402581.tif 000015
【図１５】
0005402581.tif 000016
【図１６】
0005402581.tif 000017
【図１７】
0005402581.tif 000018
【図１８】
0005402581.tif 000019
【図１９】
0005402581.tif 000020