(57)【特許請求の範囲】
【請求項１】
通信先とパケットにより通信を行い、前記パケットの受信に対する確認応答を行う通信装置であって、
第１のパケットと、前記第１のパケットの受信の直前に受信していた第２のパケットとの間の受信間隔が第１の時間を越える場合、前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうち、前記第１のパケットから一定量のパケットに対する確認応答は保留せず、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を第２の時間保留する制御部と、
前記制御部での制御により得られるタイミングで確認応答を前記通信先に送信する送信部
を備えることを特徴とする通信装置。
【請求項２】
前記制御部は、前記第１のパケットから前記一定量を超えて受信された第３のパケットに対する第１の確認応答を生成する際に、
前記第１の確認応答とは異なる第２の確認応答が保留されていない場合、前記第１の確認応答を前記第２の時間保留し、
前記第２の確認応答が保留されている場合、前記第１の確認応答を保留しない
ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記制御部は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間と同じ長さの期間が経過する毎に、前記第２の時間を短くすることを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記制御部は、前記第２の時間が閾値よりも短くなると、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を保留する処理を停止することを特徴とする請求項３に記載の通信装置。
【請求項５】
パケットを用いた通信を行うとともに前記パケットの受信に対する確認応答を行う通信装置と、前記通信装置の通信先の間の通信を中継する中継装置であって、
第１の確認応答と、前記第１の確認応答の受信の直前に受信した第２の確認応答との間の受信間隔が第１の時間を越える場合、前記第１の確認応答以降に前記第１の時間を越えない受信間隔で届く確認応答のうち、前記第１の確認応答で受信が通知されるデータから一定量のデータに対する確認応答は保留せず、前記第１の確認応答で受信が通知されるデータから前記一定量を超えた分のデータに対する確認応答を第２の時間保留する制御部と、
受信した確認応答を、前記制御部での制御により得られるタイミングで、前記通信先に送信する送信部
を備えることを特徴とする中継装置。
【請求項６】
前記制御部は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間と同じ長さの期間が経過する毎に、前記第２の時間を短くすることを特徴とする請求項５に記載の中継装置。
【請求項７】
前記制御部は、前記第２の時間が閾値よりも短くなると、前記第１の確認応答で受信が通知されるデータから前記一定量を超えた分のデータに対する確認応答を保留する処理を停止する
ことを特徴とする請求項６に記載の中継装置。
【請求項８】
パケットを用いた通信を行うとともに前記パケットの受信に対する確認応答を行う通信装置と、前記通信装置の通信先を含むネットワークにおいて、
第１のパケットと、前記第１のパケットの受信の直前に受信していた第２のパケットとの間の受信間隔が第１の時間を越える場合、前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうち、前記第１のパケットから一定量のパケットに対する確認応答は保留せずに前記通信先に送信し、
前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうちで、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を第２の時間保留してから前記通信先に送信する
処理を前記通信装置に行わせることを特徴とする通信制御方法。
【請求項９】
前記通信装置は、前記第１のパケットから前記一定量を超えて受信された第３のパケットに対する第１の確認応答を生成する際に、
前記第１の確認応答とは異なる第２の確認応答が保留されていない場合、前記第１の確認応答を前記第２の時間保留し、
前記第２の確認応答が保留されている場合、前記第１の確認応答を保留しない
ことを特徴とする請求項８に記載の通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の装置を含むネットワーク中での通信の制御方法に関する。
【背景技術】
【０００２】
ネットワーク中をパケットが転送される場合、ネットワーク層以下のレイヤの処理ではパケットの転送処理は行われても、パケットの宛先への到達性は保証されない。そこで、パケットを宛先に確実に送信するために、トランスポート層でコネクション型プロトコルが使用されることがある。コネクションを用いた通信では、ネットワークの混み具合などにより利用可能な送信レートが変動することから、輻輳制御を行う。例えば、Transmission Control Protocol（ＴＣＰ）では、輻輳ウィンドウ（congestion window、ｃｗｎｄ）を用いて、パケットの送信量を調整するためにスロースタートと呼ばれる処理を行う。スロースタートでは送信側の装置は、宛先の装置との通信を開始すると、パケットロスを検出するまで、確認応答パケットを受信するたびに輻輳ウィンドウの値を増加させることにより、送信レートを増加させる。このとき、送信側の装置は、確認応答パケットにより送信の成功が通知されたパケットの数と、輻輳ウィンドウの値の増加分の合計に応じた数のパケットを、確認応答パケットを受信したことをトリガとして、受信側の装置に送信する。すなわち、送信側の装置は、受信側の装置から確認応答パケットを受信するタイミングでパケットを送信し、その後はさらに確認応答パケットを受信するまで待機することになるので、パケットの送信に偏りが発生する。パケットが一時的にまとめて送信されると、パケットが集中的に送信されている期間中の送信レートは、送信側の通信装置と受信側の通信装置との間の経路の往復遅延時間（Round Trip Time、ＲＴＴ）で平均化したときの送信レートよりも高くなる。このため、ＲＴＴ単位で平均化した送信レートでは経路中の装置やリンクで処理可能であっても、パケットが集中的に送信されている期間中での処理が追いつかずに、パケットロスが発生する恐れがある。スロースタートの処理が行われている間にパケットロスが発生すると、送信側の通信装置は送信レートを下げ、その後の調整の際の送信レートの変化量も小さくする。このため、スロースタートの処理が開始してから比較的に早い時点でパケットロスが発生した通信では、送信レートが上がりにくくなってしまう。
【０００３】
そこで、スロースタートの際に通信速度が急激に上昇することに起因して発生するパケットの廃棄を防止するために、輻輳ウィンドウの増加を抑えるための上限値を設定することが提案されている（例えば、非特許文献１）。また、送信側の装置がパケットを一定の間隔で送信することで、パケットが短期間に集中的に受信側の通信装置に到達することを防ぐ方法も提案されている（例えば、非特許文献２）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】S. Floyd“RFC 3742：Limited slow start”,[online]、2004年3月、［平成26年3月18日検索］、〈URL：http://tools.ietf.org/html/rfc3742〉
【非特許文献２】A. Aggarwal et al., “Understanding the performance of TCP pacing," IEEE INFOCOM, pp.1157-1165, March 2000
【発明の概要】
【発明が解決しようとする課題】
【０００５】
背景技術で述べたように、送信側の装置でパケットの送信間隔の偏りを解消するための試みは検討されているが、パケットの送信間隔の偏りを解消できない装置もネットワーク中には多く存在する。送信側の装置で送信間隔の偏りを解消できない場合について、パケットの送信間隔の偏りに起因したパケットロスを回避するための方法については、いまだに提案されていない。なお、背景技術ではプロトコルとしてＴＣＰが用いられる場合を例として説明したが、確認応答の送受信と確認応答を受信しないで送信可能なパケット数の調整を行うことによって送信レートを調整するプロトコルでは同様の問題が発生し得る。
【０００６】
本発明は、パケットの送信間隔の偏りによるパケットロスを低減することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、通信装置は、通信先とパケットにより通信を行い、パケットの受信に対する確認応答を行う。通信装置は、制御部と送信部を備える。制御部は、第１のパケットと、前記第１のパケットの受信の直前に受信していた第２のパケットとの間の受信間隔が第１の時間を越える場合、第１のパケット以降に第１の時間を越えない受信間隔で届くパケットについての処理を行う。制御部は、第１のパケット以降に第１の時間を越えない受信間隔で届くパケットのうち、第１のパケットから一定量のパケットに対する確認応答は保留しない。制御部は、第１のパケット以降に第１の時間を越えない受信間隔で届くパケットのうち、第１のパケットから一定量を超えた分のパケットに対する確認応答を第２の時間保留する。送信部は、制御部での制御により得られるタイミングで確認応答を通信先に送信する。
【発明の効果】
【０００８】
パケットの送信間隔の偏りによるパケットロスが低減される。
【図面の簡単な説明】
【０００９】
【図１】実施形態にかかる通信方法の例を説明する図である。
【図２】実施形態にかかる通信によるパケットの送受信のタイミングの例を説明する図である。
【図３】通信装置の構成の例を説明する図である。
【図４】通信装置のハードウェア構成の例を説明する図である。
【図５】ネットワークの例を示す図である。
【図６】通信経路の例を説明する図である。
【図７】タイムスタンプの例を示す図である。
【図８Ａ】コネクション管理テーブルの例を示す図である。
【図８Ｂ】コネクション管理テーブルの例を示す図である。
【図９】パケットの送受信とボトルネックリンクに接続された装置中のバッファの使用量の関係の例を説明する図である。
【図１０】送信側の通信装置での送信レートの変動の例を説明する図である。
【図１１】送信レートの変動の例を説明する図である。
【図１２】ボトルネックリンクに接続された装置中のバッファの使用量の例を説明する図である。
【図１３】受信側の通信装置が確認応答を送信するときの処理の例を説明するフローチャートである。
【図１４】受信側の通信装置が遅延期間の経過後に確認応答パケットの送信を再開するときの処理の例を説明するフローチャートである。
【図１５】第２の実施形態に係る中継装置の構成の例を説明する図である。
【図１６】第２の実施形態にかかる通信処理の例を説明する図である。
【図１７】第２の実施形態にかかる通信によるパケットの送受信のタイミングの例を説明する図である。
【図１８】第２の実施形態に係る中継装置のハードウェア構成の例を示す図である。
【図１９】第３の実施形態でのパケットの送受信とボトルネックリンクに接続された装置中のバッファの使用量の関係の例を説明する図である。
【図２０】受信側の通信装置が確認応答を送信するときの処理の例を説明するフローチャートである。
【図２１】受信側の通信装置がタイマを用いて確認応答を送信するときの処理の例を説明するフローチャートである。
【図２２】受信側の通信装置の処理の例を説明する状態遷移図である。
【図２３】シミュレーション結果の例を示す図である。
【図２４】タイムスタンプの変形例を示す図である。
【発明を実施するための形態】
【００１０】
図１は、実施形態にかかる通信方法の例を説明する図である。図１を参照しながら、通信装置１０ａから通信装置１０ｂにパケットＰ０〜Ｐ４が送信された場合の処理の例を説明する。ここで、通信装置１０ｂがパケットＰ０の受信からパケットＰ１を受信するまでの時間間隔はｔｗ１であるとする。また、図１の例では、通信装置１０ｂでのパケットの受信間隔は、パケットＰ１の受信からパケットＰ２の受信までがｔｗ２、パケットＰ２の受信からパケットＰ３の受信までがｔｗ３、パケットＰ３の受信からパケットＰ４の受信までがｔｗ４である。
【００１１】
通信装置１０ｂは、パケットを受信するとそのパケットの直前に受信したパケットとの間の受信間隔を第１の時間（Ｔ１）と比較した結果を用いて、パケットを連続的に受信しているかを判定する。受信間隔がＴ１以下の場合、通信装置１０ｂは、連続的にパケットを受信したと判定する。図１の例では、ｔｗ１はＴ１を超えているが、ｔｗ２〜ｔｗ４はＴ１以下である。このため、通信装置１０ｂは、パケットＰ０とパケットＰ１は連続的に受信していないが、パケットＰ１の次にパケットＰ２を受信すると、パケットＰ１とパケットＰ２を連続的に受信したと判定する。
【００１２】
通信装置１０ｂは、連続的に複数のパケットを受信した場合、一定量のパケットについては確認応答パケットの送信を遅らせないが、一定量を超えると、確認応答パケットの送信を遅延させる。図１は、一定量が２パケットに設定されている場合の例である。通信装置１０ｂは、パケットＰ１とパケットＰ２を連続的に受信しても、連続的に受信したパケットの数が一定量を超えていないので、確認応答パケットの送信のタイミングを遅らせない。このため、図１に示すように、パケットＰ１に対する確認応答パケット（Ｐ１ａｃｋ）と、パケットＰ２に対する確認応答パケット（Ｐ２ａｃｋ）の送信タイミングは遅延しない。
【００１３】
次に、通信装置１０ｂは、パケットＰ３を受信すると、パケットＰ２とパケットＰ３の受信間隔を用いて、パケットＰ１〜Ｐ３の３つのパケットを連続的に受信したと判定する。すると、通信装置１０ｂは、連続的に受信したパケット数が、予め設定された一定量を超えたと判定し、パケットＰ３に対する確認応答パケット（Ｐ３ａｃｋ）を第２の時間（Ｔ２）保留することにより、Ｐ３ａｃｋの送信タイミングを第２の時間だけ遅延させる。同様に、パケットＰ４を受信した場合もｔｗ４がＴ１より短いので、通信装置１０ｂは、パケットＰ１〜Ｐ４の４つのパケットを連続的に受信したと判定する。すると、パケットＰ３に対する確認応答パケットと同様に、通信装置１０ｂは、パケットＰ４に対する確認応答パケット（Ｐ４ａｃｋ）の送信タイミングを遅らせる。
【００１４】
図２は、実施形態にかかる通信によるパケットの送受信のタイミングの例を示す。図２は、図１よりも長い期間で行われる処理を表わすため、第１の時間以内に送信されているパケット群をまとめて示している。また、図２は、通信装置１０ａと通信装置１０ｂの間で、輻輳ウィンドウを用いた通信が行われる場合の例を示す。ここで、輻輳ウィンドウ（congestion window、ｃｗｎｄ）は、通信装置１０ｂ中の受信バッファと通信装置１０ａの送信バッファの容量を用いて、確認応答を受けずに送受信できると判定されるパケット数よりも小さい。また、通信装置１０ａと通信装置１０ｂの間で通信経路を確立すると、通信装置１０ａと通信装置１０ｂの各々は、通信先との間でパケットの往復にかかる期間（ＲＴＴ）を計測してもよい。通信装置１０ｂがＲＴＴを計測などにより取得可能な場合、確認応答パケットを遅延させる時間は、ＲＴＴより短い値に設定される。
【００１５】
通信装置１０ａにおいて、通信装置１０ｂとの間の通信に使用する輻輳ウィンドウの値が４になったときに、通信装置１０ａがパケットＰ１〜Ｐ４を通信装置１０ｂに送信したとする（ステップＳ１）。このとき、通信装置１０ａは、図１と同様に、パケットをパケットＰ１、Ｐ２、Ｐ３、Ｐ４の順に、閾値Ｔｈ１以下の時間間隔で連続的に、通信装置１０ｂに送信しているものとする。なお、閾値Ｔｈ１は、第１の時間（図１のＴ１）に相当する。以下、ネットワーク内を短い間隔で並んで流れるパケット群を「パケットトレイン」と称する。閾値Ｔｈ１はパケットトレインを検出するためのパケット間隔の閾値である。通信装置１０ｂに送信されるパケットＰ１〜Ｐ４は、パケットトレインに相当する。図２の例では、パケットＰ１〜Ｐ４のいずれも、通信装置１０ｂに届いたとする。
【００１６】
通信装置１０ｂは、パケットＰ１〜Ｐ４のいずれについても、受信の成功を通信装置１０ａに通知するための確認応答を生成する。このとき、通信装置１０ｂは、パケットＰ１〜Ｐ４をパケットトレインとして受信し、その後ＲＴＴ期間パケットを受信していないので、通信装置１０ａはパケットの送信間隔に偏りがある送信を行っている。通信装置１０ｂは、図１の処理を行うことにより、パケットトレインの先頭から一定量のパケットについての確認応答は遅延させないが、一定量以降のパケットについての確認応答を遅延させる。例えば、一定量が２である場合、通信装置１０ｂは、パケットＰ１についての確認応答パケット（Ｐ１ａｃｋ）とパケットＰ２についての確認応答パケット（Ｐ２ａｃｋ）を遅延させずに通信装置１０ａに送信する（ステップＳ２）。このため、Ｐ１ａｃｋとＰ２ａｃｋは、パケットＰ１〜Ｐ４のパケットトレインの受信から通信装置１０ｂにおいてパケット処理に要した時間ｔＲＤｌｙ１だけの時間が経過したときに、通信装置１０ａに向けて送信される。
【００１７】
通信装置１０ｂは、パケットＰ３、Ｐ４の確認応答パケット（Ｐ３ａｃｋとＰ４ａｃｋ）の送信タイミングを、第２の時間だけ遅らせて、通信装置１０ａに送信する（ステップＳ３）。図２の例では、第２の時間は、通信装置１０ａとの通信についてのＲＴＴよりも短い持間である。このため、パケットＰ１〜Ｐ４のパケットトレインの受信からｔＲＤｌｙ２だけの時間が経過したときに、通信装置１０ａに向けて送信される。
【００１８】
一方、通信装置１０ａは、Ｐ１ａｃｋとＰ２ａｃｋを受信すると、パケットＰ１とＰ２の送信に成功したと判定し、輻輳ウィンドウを広げる。図２は、確認応答パケットを受信するたびに輻輳ウィンドウの値を１つ大きくする場合を示している。通信装置１０ａは、２つの確認応答パケットを受信したので、輻輳ウィンドウを４から６に拡大する。すると、送信の成功の確認が取れていないパケットはパケットＰ３とＰ４の２パケットであるため、通信装置１０ａは、通信装置１０ｂに対して新たに４パケットを送信することを決定する。そこで、通信装置１０ａは、パケットＰ５〜Ｐ８を含むパケットトレインを通信装置１０ｂに送信する（ステップＳ４）。
【００１９】
パケットＰ５〜Ｐ８を通信装置１０ｂに送信した後で、通信装置１０ａが通信装置１０ｂからＰ３ａｃｋとＰ４ａｃｋを受信したとする。すると、ステップＳ４と同様の処理により、通信装置１０ａは、輻輳ウィンドウをさらに２つ拡大する。従って、輻輳ウィンドウは８となる。この時点で送信が成功したかが不明なパケットはパケットＰ５〜Ｐ８の４パケットである。そこで、通信装置１０ａは、輻輳ウィンドウの値から不明なパケットの数を差し引いて得られる４パケットを、通信装置１０ｂに新たに送信可能なパケットとする。通信装置１０ａは、パケットＰ９〜Ｐ１２を含むパケットトレインを通信装置１０ｂに送信する（ステップＳ５）。
【００２０】
通信装置１０ｂは、図２に示すように、パケットＰ１〜Ｐ４についての確認応答パケットの送信後に、パケットＰ５〜Ｐ１２の８個のパケットを、２つのパケットトレインに分かれた状態で受信している。さらに、通信装置１０ｂは、パケットＰ５を受信した時刻からＲＴＴが経過する前にパケットＰ５〜Ｐ８を含むパケットトレインと、パケットＰ９〜Ｐ１２を含むパケットトレインの両方を受信している。すなわち、通信装置１０ｂが一部のパケットの確認応答パケットを遅延させることにより、通信装置１０ａでのパケットの送信間隔の偏りが改善されている。パケットの送信間隔の偏りが改善されると、パケットが集中的に送信されている場合に比べて、ＲＴＴの期間中での送信レートの一時的な上昇が抑えられる。このため、一時的に送信レートが上昇することに起因して、通信装置１０ａと通信装置１０ｂとの間の経路中のボトルネックリンクでパケットロスが発生する可能性は、パケットが集中的に送信される場合に比べて低くなる。従って、スロースタート処理中に、送信レートが比較的高くなる程度に輻輳ウィンドウの値が大きくなるまで、パケットロスの発生を防止することができる。
【００２１】
＜第１の実施形態＞
図３は、通信装置１０の構成の例を示す。通信装置１０は、送受信部１１、制御部２０、受信データバッファ２２、アプリケーション処理部４０、Ａｃｋ保留キュー３１、コネクション管理テーブル３２、送信データバッファ４１、送信待バッファ４３、送信キュー４４を備える。送受信部１１は、受信部１２と送信部１３を有する。制御部２０は、受信データ組立部２１、確認応答パケット（Ａｃｋ）情報解析部２３、ＲＴＴ計測部２４、Ａｃｋ生成部２５、輻輳制御部２６、再送制御部２８、遅延制御部３０、送信パケット構築部４２を有する。以下、通信装置１０がＴＣＰを用いて通信先と通信する場合を具体例として説明する。
【００２２】
受信部１２は、他の装置から送信されてきたパケットを受信し、受信データ組立部２１とＡｃｋ情報解析部２３に出力する。送信部１３は、送信キュー４４から読み出したパケットや確認応答パケットを送信する。
【００２３】
受信データ組立部２１は、複数の受信パケットからセグメントを抽出して、送信されたデータを再現し、得られたデータを受信データバッファ２２に出力する。受信データバッファ２２は、データをアプリケーション処理部４０に出力する。
【００２４】
Ａｃｋ情報解析部２３は、通信装置１０自身がデータを他の装置に送信しているときに、送信先から受信した確認応答パケット中のシーケンス番号を用いて、パケットの送信に成功したかを判定する。Ａｃｋ情報解析部２３は、送信に成功したパケットを送信待バッファ４３から削除する。一方、送信に失敗したパケットについては、再送制御部２８に再送を要求する。再送制御部２８は、再送の対象となるパケットを送信待バッファ４３から読み出して送信キュー４４に出力することにより再送処理を行う。輻輳制御部２６は、通信中のコネクションについての輻輳ウィンドウの値を、確認応答パケットの受信数に応じて調整する。
【００２５】
ＲＴＴ計測部２４は、通信装置１０が送信したパケットの送信時刻と、送信したパケットに対する確認応答パケット中のタイムスタンプの値を用いて、通信先との間のＲＴＴを計測する。一方、通信装置１０が通信先からデータパケットを受信している場合は、データパケット中のタイムスタンプと、パケットの受信時刻を用いて、ＲＴＴを計算する。Ａｃｋ生成部２５は、通信装置１０が通信先から受信したデータパケットについての受信結果を示す確認応答パケットを生成する。
【００２６】
遅延制御部３０は、Ａｃｋ生成部２５で生成された確認応答パケットの送信のタイミングを、ＲＴＴを用いて決定する。遅延制御部３０は、パケットトレインの先頭から閾値Ｔｈ２までのパケットについては確認応答パケットを遅延させない。一方、パケットトレインの先頭からカウントした受信順序が閾値Ｔｈ２以上のパケットについては、確認応答パケットの送信のタイミングを、ＲＴＴ未満の範囲で遅延させる。遅延制御部３０は、遅延させる対象の確認応答パケットをＡｃｋ保留キュー３１に保持するが、送信対象の確認応答パケットを送信キュー４４に出力する。コネクション管理テーブル３２は、各コネクションに関する送信元アドレス、宛先アドレス、ＲＴＴなどの情報を保持する。
【００２７】
送信データバッファ４１は、アプリケーション処理部４０で生成された送信データを保持する。送信パケット構築部４２は、送信データバッファ４１中のデータを含むパケットを生成し、送信キュー４４に出力する。
【００２８】
図４は、通信装置１０のハードウェア構成の例を説明する図である。通信装置１０は、プロセッサ１０１、メモリ１０２、バスコントローラ１０３、ストレージ装置１０４、Ｉ／Ｏ（Input/Output）バス、ネットワーク接続装置１０８、タイマ１０９を備える。さらに、通信装置１０は、ストレージＩ／Ｏ１０５（１０５ａ、１０５ｂ）、ディスプレイＩ／Ｏ１０６、Ｉ／Ｏ１０７を備える。プロセッサ１０１は、Central Processing Unit（ＣＰＵ）を含む任意のプロセッサとすることができる。プロセッサ１０１は、受信データ組立部２１、Ａｃｋ情報解析部２３、ＲＴＴ計測部２４、Ａｃｋ生成部２５、輻輳制御部２６、再送制御部２８、遅延制御部３０、アプリケーション処理部４０、送信パケット構築部４２として動作する。プロセッサ１０１は、適宜、ストレージ装置１０４に格納されたプログラムを読み込み、メモリ１０２をワーキングメモリとして用いて処理を行う。メモリ１０２は、Random Access Memory（ＲＡＭ）とRead Only Memory（ＲＯＭ）を含む。メモリ１０２は、受信データバッファ２２、Ａｃｋ保留キュー３１、送信データバッファ４１、送信待バッファ４３、送信キュー４４として動作する。さらに、メモリ１０２は、プロセッサ１０１の処理に用いられるデータや、プロセッサ１０１の処理により得られたデータなどを保持する。ネットワーク接続装置１０８は、送受信部１１として動作する。タイマ１０９は、ＲＴＴ計測部２４、遅延制御部３０などの一部として動作する。
【００２９】
バスコントローラ１０３は、プロセッサ１０１とメモリ１０２を、データの入出力が可能なように接続する。また、ストレージＩ／Ｏ１０５、ディスプレイＩ／Ｏ１０６、Ｉ／Ｏ１０７は、通信装置１０と通信装置１０に接続されたディスプレイ１１３や入力装置１１０、光学ディスクドライブ１１１を、データの入出力が可能なように接続する。光学ディスクドライブ１１１は、適宜、可搬記憶媒体１１２からのデータの読み込みや可搬記憶媒体１１２へのデータの書き込みに使用されうる。プロセッサ１０１は、可搬記憶媒体１１２に記録されたプログラムを実行しても良い。
【００３０】
図５は、ネットワークの例を示す。図５に示すネットワークの例では、インターネットを介して、通信装置１０ａと通信装置１０ｂが通信している、通信装置１０ｂは、無線アクセスネットワーク中に位置しており、無線アクセスネットワーク中のルータやインターネット中のルータを介して通信装置１０ａと通信する。なお、通信装置１０ｂのように無線アクセスネットワークに位置していない装置でも、実施形態にかかる通信方法が適用可能である。例えば、通信装置１０ｃと通信装置１０ｄは、インターネットを介して通信しており、通信装置１０ｃがサーバ、通信装置１０ｄがクライアントとして動作している。この場合、通信装置１０ｃと通信装置１０ｄのいずれにも、実施形態にかかる通信方法が適用されうる。また、通信装置１０ｅと通信装置１０ｆのように、インターネットを介して通信するサーバにも、実施形態にかかる通信方法が適用されうる。なお、図５では、通信装置同士がルータを介して通信を行う場合を例として図示したが、例えばスイッチなどルータ以外の装置を介して通信が行われても良い。
【００３１】
図６は、通信経路の例を説明する図である。図６は、通信装置１０ａが中継装置５０ａと中継装置５０ｂを介して通信装置１０ｂと通信する場合についての通信経路の例を示している。中継装置５０ａ、５０ｂは、ルータやスイッチなどの任意の中継装置である。通信装置１０ａと中継装置５０ａの間はリンクＬ１で接続されている。同様に、中継装置５０ａと中継装置５０ｂの間はリンクＬ２、中継装置５０ｂと通信装置１０ｂの間はリンクＬ３で接続されている。以下の説明では、リンクＬ２において通信装置１０ａと通信装置１０ｂ間の通信に使用できる通信レートは、リンクＬ１、Ｌ３に比べて低い場合を例とする。すると、矢印Ａ１に示すように、通信装置１０ａがリンクＬ１で使用可能な送信レートで通信装置１０ｂ宛てのパケットを送信した場合、中継装置５０ａはバッファ中に受信パケットを保持する。中継装置５０ａは、矢印Ａ２に示すように、リンクＬ２で使用可能な送信レートを用いて、パケットを中継装置５０ｂに転送する。換言すると、中継装置５０ａは、通信装置１０ａから受信したパケットのうちで、中継装置５０ｂへの転送待ちのパケットをバッファ中に保持している。中継装置５０ｂは、中継装置５０ａからリンクＬ２で許容されている送信レートで通信装置１０ｂ宛てのパケットを受信し、矢印Ａ３に示すように、リンクＬ３を介して、通信装置１０ｂのパケットを転送する。このとき中継装置５０ｂは、中継装置５０ａからパケットを受信したときの受信レートで通信装置１０ｂ宛てのパケットを転送する。従って、中継装置５０ｂは、バッファ中にパケットを蓄積しないでも、通信装置１０ａと通信装置１０ｂの間の転送処理を行うことができる。通信装置１０ｂは、リンクＬ２で許容された転送レートで通信装置１０ａからのパケットを受信する。通信装置１０ｂは、受信したパケットに対する確認応答パケットを、通信装置１０ａに向けて送信する。確認応答パケットは、矢印Ａ４、Ａ５、Ａ６に示すように、パケットとは逆の経路で通信装置１０ａに転送される。
【００３２】
以下、図６に示す経路で通信している通信装置１０ｂが第１の実施形態にかかる通信装置である場合を例として、通信装置１０ａと通信装置１０ｂの間のコネクションの確立の段階から、通信装置１０ｂで行われる処理の詳細を説明する。以下の説明では、いずれの通信装置での処理であるかを分り易くするため、符号の後に通信装置１０の符号の末尾に付されたアルファベットを付すことがある。例えば、遅延制御部３０ｂは、通信装置１０ｂが備える遅延制御部３０である。また、以下の説明では、リンクＬ２で使用可能な転送レートは、リンクＬ１の半分である場合を例として説明する。
【００３３】
まず、通信装置１０ｂは通信装置１０ａとの間で通信経路を確立する。通信装置１０ｂと通信装置１０ａとの間でスリーウェイハンドシェークを行うための制御パケットが送受信されるが、制御パケット中にはタイムスタンプが含まれている。なお、タイムスタンプはＴＣＰヘッダ中のオプションフィールドに含まれている。
【００３４】
図７は、タイムスタンプの例を示す。タイムスタンプは、ｋｉｎｄフィールド、タイムスタンプ長フィールド、タイムスタンプ値（ＴＳ  Ｖａｌｕｅ）フィールド、タイムスタンプエコー応答フィールドを含む。ｋｉｎｄフィールドは、タイムスタンプの種類を表わす値であり、図７の例では８に設定される。タイムスタンプ長フィールドは、タイムスタンプに使用されるバイト数であり、図７の例では１０バイトである。なお、図７は、ｋｉｎｄフィールドとタイムスタンプ長フィールドがそれぞれ１バイトであり、タイムスタンプ値フィールドとタイムスタンプエコー応答フィールドが４バイトの場合を示している。タイムスタンプ値フィールドは、パケットの送信時刻を示す値を格納する。タイムスタンプエコー応答フィールドには、確認応答パケットの送信時刻を示す値が格納される。
【００３５】
通信装置１０ｂは、通信装置１０ｂが送信した制御パケットに対する確認応答としてＴＣＰヘッダ中のＡｃｋビットが１に設定された制御パケットを受信したとする。ＲＴＴ計測部２４ｂは、受信部１２ｂやＡｃｋ情報解析部２３を介して制御パケットを取得し、制御パケット中のタイムスタンプ値フィールドとタイムスタンプエコー応答フィールドの値を用いて、通信装置１０ｂと通信装置１０ａの間のＲＴＴを求める。ＲＴＴ計測部２４ｂは、得られたＲＴＴの値をコネクション管理テーブル３２ｂに格納する。
【００３６】
図８Ａと図８Ｂは、コネクション管理テーブル３２の例を示す図である。コネクション管理テーブル３２はコネクション管理情報、パケットトレイン制御情報、Ａｃｋ保留キュー情報を含む。図８Ａにはコネクション管理情報の詳細を示し、図８Ｂにパケットトレイン制御情報とＡｃｋ保留キュー情報の詳細を示す。
【００３７】
コネクション管理情報には、送信元のＩＰ（Internet Protocol）アドレス、送信元ＴＣＰポート、宛先ＩＰアドレス、宛先ＴＣＰポート、状態、開始時刻、エージングタイマが含まれる。ここで、状態は、各コネクションの状態を表わす値であり、開始時刻は各コネクションについて通信が開始された時刻を示す値である。エージングタイマは、各コネクションについて、そのコネクションのエントリが無効な情報として消去されるまでの残り時間を示す。なお、新たにパケットの送受信が行われるたびにエージングタイマの値はリセットされる。
【００３８】
パケットトレイン制御情報は、ＲＴＴの観測結果、ＲＴＴ経過数、Ａｃｋ送信時刻、閾値Ｔｈ１、閾値Ｔｈ２、遅延期間を含む。ここで、ＲＴＴ経過数は、そのコネクションでの確認応答パケットの遅延処理の対象となるパケットを受信したときを基準として、ＲＴＴが何回経過したかを示す。Ａｃｋ送信時刻は、そのコネクションについて、最後に確認応答パケットを送信した時刻である。図８Ａおよび図８Ｂの例では、Ａｃｋ送信時刻は、１ｍ秒単位でカウントアップするタイマのカウント値として送信時刻が表わされている場合の例を示す。
【００３９】
閾値Ｔｈ２は、通信装置１０が連続して受信したパケットのうちで確認応答を遅延させないパケットの数を示す。パケットトレインの単位で見ると、閾値Ｔｈ２は、パケットトレイン中で確認応答パケットの遅延処理の対象とするパケットの先頭からの位置を示している。閾値Ｔｈ２未満の長さのパケットトレインでは確認応答パケットを遅延させないので、閾値Ｔｈ２は、確認応答パケットの遅延を行うかを判定する閾値であるともいえる。閾値Ｔｈ２をパケットトレイン長閾値と呼ぶこともある。例えば、Ｎｏ．５のコネクションでは、閾値Ｔｈ２は１０であるため、パケットトレインの先頭から１０番目以降のパケットについては確認応答パケットの遅延処理が行われる。遅延期間は、そのコネクションについて、遅延処理の対象となる確認応答パケットを遅延させる期間（第２の時間、Ｔ２）を示す。例えば、Ｎｏ．９のコネクションでは、遅延期間は３０ｍ秒であるので、遅延対象に選択された確認応答パケットは、遅延が無いときの送信時刻よりも３０ｍ秒遅れた時刻に送信される。
【００４０】
閾値Ｔｈ１は、パケットを連続して受信しているかの判定に使用される閾値（第１の時間、Ｔ１）である。すなわち、閾値Ｔｈ１は、パケットトレイン中のパケットの受信間隔の最大値であり、パケットトレインの先頭のパケットを検出するために使用される。そこで、閾値Ｔｈ１をパケットトレイン判定閾値と記載することもある。そのコネクションについて、最後にパケットを受信してから次のパケットを受信するまでの経過時間が閾値Ｔｈ１以上の場合、次のパケットは、パケットトレインの先頭であると判定される。なお、パケットトレイン長閾値（Ｔｈ２）とパケットトレイン判定閾値（Ｔｈ１）は、コネクションを確立する際に、遅延制御部３０ｂが設定する。なお、遅延制御部３０ｂは、予め、通信先に応じてユーザにより設定された閾値を保持しており、送信元のＩＰアドレスに応じて閾値を設定する。
【００４１】
Ａｃｋ保留キュー情報は、Ａｃｋ保留数、Ａｃｋ保留キュー先頭アドレス、Ａｃｋ保留キュー末尾アドレスを含む。Ａｃｋ保留数は、Ａｃｋ保留キュー３１に保持されている確認応答パケットの数である。Ａｃｋ保留キュー先頭アドレスは、Ａｃｋ保留キュー３１のうちで、そのコネクションについて使用されている領域の先頭についてのメモリ１０２中でのアドレスである。Ａｃｋ保留キュー末尾アドレスは、Ａｃｋ保留キュー３１のうちで、そのコネクションについて使用されている領域の末尾についてのメモリ１０２中でのアドレスである。
【００４２】
以下の説明では、図８Ａおよび図８Ｂに示すコネクション管理テーブル３２中のＮｏ．９のコネクションについて、経路の確立と、ＲＴＴの計測が行われたとする。ＲＴＴ計測部２４ｂでのＲＴＴの計測結果は６０ｍｓであるとする。遅延制御部３０ｂは、新たに確立されたコネクションについてＲＴＴがコネクション管理テーブル３２ｂに記録されると、そのコネクションについての遅延期間を決定する。遅延制御部３０ｂは、ＲＴＴの半分の値を最初の遅延期間に設定する。この例では、Ｎｏ．９のコネクションではＲＴＴが６０ｍ秒であるため、遅延制御部３０ｂは、遅延期間を３０ｍ秒に設定する。
【００４３】
次に、通信装置１０ａと通信装置１０ｂの間の通信が確立されたことにより、通信装置１０ａから通信装置１０ｂへのデータパケットの送信が開始された場合を例として、中継装置５０ａでのバッファの使用量の変化と通信処理の例について述べる。
【００４４】
通信装置１０ａのアプリケーション処理部４０ａは、通信装置１０ｂに送信するデータを送信データバッファ４１ａに出力する。送信パケット構築部４２ａは、送信データバッファ４１ａから取得したデータに、ＩＰヘッダやＴＣＰヘッダなどを付すことにより、送信パケットを生成する。生成されたパケットは、送信キュー４４ａに格納され、送信部１３ａから送信される。ここでは、通信装置１０ａでの輻輳ウィンドウが４に設定されており、パケットＰ１〜Ｐ４の４つのパケットが通信装置１０ｂに向けて送信されたとする。
【００４５】
図９は、パケットの送受信とボトルネックリンクに接続された装置中のバッファの使用量の関係の例を説明する図である。なお、図９は、説明を分かりやすくするために、Ｎｏ．９のコネクションを用いて送信されるパケットに関する情報を示している。図９の一番上の欄（ＲＴＴ＃１送信側）は、通信が開始されたときの１回目のＲＴＴ周期での通信装置１０ａからのパケットの送信タイミングを示す。通信装置１０ａがパケットＰ１〜Ｐ４の４つのパケットを含むパケットトレインを送信した場合、通信装置１０ａにおいて、パケットトレインの先頭を基準としたパケットの送信タイミングは、図９のＲＴＴ＃１送信側の通りであるとする。なお、図９中のＴＲＴＴは、通信装置１０ａと通信装置１０ｂの間のＲＴＴの長さである。
【００４６】
パケットＰ１〜Ｐ４は、図６に示す経路を介して、通信装置１０ｂに転送されたとする。パケットＰ１〜Ｐ４は、ボトルネックリンクであるリンクＬ２を介して通信装置１０ｂに到達するため、通信装置１０ｂは、パケットＰ１〜Ｐ４をリンクＬ２での転送レートで受信する。通信装置１０ｂがパケットＰ１〜Ｐ４を受信するタイミングは、図９の２番目の欄（ＲＴＴ＃１受信側）の通りであるとする。なお、パケットＰ１〜Ｐ４の受信間隔を、通信装置１０ａでのパケットＰ１〜Ｐ４の送信間隔と比較し易くするために、図９のＲＴＴ＃１受信側は、パケットＰ１の受信を基準として、パケットの受信のタイミングを示している。
【００４７】
通信装置１０ｂの受信データ組立部２１ｂは、受信部１２ｂを介してパケットＰ１〜Ｐ４を受信すると、各パケット中のセグメントを抽出し、データを復元して、受信データバッファ２２ｂに出力する。アプリケーション処理部４０ｂは、適宜、受信データを受信データバッファ２２ｂから読み出す。さらに、受信データ組立部２１ｂは、各データパケットの受信結果をＡｃｋ生成部２５ｂに通知する。なお、受信データ組立部２１ｂは、データの出力や受信結果の通知の際に、コネクションを特定する情報も合わせて出力しているものとする。ここでは、パケットＰ１〜Ｐ４のいずれについても受信が成功したことがＡｃｋ生成部２５ｂに通知されたとする。Ａｃｋ生成部２５ｂは、パケットＰ１〜Ｐ４のいずれについても受信成功を示す確認応答パケットを生成し、遅延制御部３０ｂに出力する。
【００４８】
遅延制御部３０ｂはパケットの受信間隔をコネクション別にモニタしており、最新のパケットの受信時刻からその前に受信したパケットの受信時刻までの期間が、パケットトレイン判定閾値（Ｔｈ１）以上であるかを判定する。ここでは、制御パケットの受信からパケットＰ１の受信までの期間が２ｍ秒を超えている場合を例とする。すると、遅延制御部３０ｂは、新たなパケットトレインについての確認応答パケットが生成されていると判定する。
【００４９】
次に、遅延制御部３０ｂは、パケットトレイン中に含まれているパケットの数がパケットトレイン長閾値（Ｔｈ２）以上であるかを判定する。遅延制御部３０ｂは、パケットトレイン中に含まれているパケットの数が閾値Ｔｈ２以上の場合、閾値Ｔｈ２以降のパケットについての確認応答パケットを遅延させることを決定する。この例では、閾値Ｔｈ２は３である（図８ＢのＮｏ．９）。換言すると、遅延制御部３０ｂは、連続して受信したパケットに対する確認応答パケットのうち２つ目の確認応答パケットまでは遅延させず、３番目以降の確認応答パケットを遅延させる。
【００５０】
図９のＲＴＴ＃１受信側に、通信装置１０ｂが通信装置１０ａに向けて確認応答パケットを送信するタイミングも示す。図９中のＡｃｋ１、Ａｃｋ２は、それぞれ、パケットＰ１、Ｐ２の受信に成功したことを通知する確認応答パケットである。遅延制御部３０ｂは、パケットトレインの先頭から２番目までのパケットに対する確認応答パケットを遅延させないので、Ａｃｋ１とＡｃｋ２をＡｃｋ保留キュー３１ｂに保持せずに、送信キュー４４ｂに出力する。送信キュー４４ｂに保持されているパケットは送信部１３ｂにより順次送信されるので、図９に示すように、パケットＰ１、Ｐ２の受信に成功したときに、Ａｃｋ１とＡｃｋ２が通信装置１０ａに向けて送信される。
【００５１】
一方、遅延制御部３０ｂは、パケットＰ３の確認応答パケット（Ａｃｋ３）について、送信のタイミングを遅延期間だけ遅らせるためにＡｃｋ保留キュー３１ｂに保持する。また、パケットＰ４の確認応答パケット（Ａｃｋ４）も、送信のタイミングがＡｃｋ３の送信後になるように、Ａｃｋ保留キュー３１ｂに保持される。なお、遅延期間は、コネクション管理テーブル３２（図８Ａおよび図８Ｂ）の遅延期間の欄に記録されている期間とする。ここで、遅延期間は、パケットトレインを分断するために、パケットトレイン判定閾値（Ｔｈ１）よりも長い値になるように設定される。図８Ａおよび図８Ｂの例では、Ｎｏ．９のコネクションについての確認応答パケットの遅延期間は３０ｍ秒である。そこで、遅延制御部３０ｂは、Ａｃｋ３をＡｃｋ保留キュー３１ｂに３０ｍ秒保持した後で、送信キュー４４ｂに出力する。また、Ａｃｋ４もＡｃｋ３の後に送信キュー４４ｂに出力される。従って、図９に示すように、Ａｃｋ３とＡｃｋ４の送信のタイミングは、ＲＴＴの半分の期間だけ遅延する。換言すると、Ａｃｋ２の送信からＡｃｋ３およびＡｃｋ４の送信までに遅延期間分の空き時間が設けられる。
【００５２】
通信装置１０ｂがパケットＰ１を受信してから、Ｎｏ．９のコネクションでのＲＴＴ分の時間が経過すると、遅延制御部３０ｂは、コネクション管理テーブル３２ｂにおいて、Ｎｏ．９のコネクションでのＲＴＴ経過数を１つインクリメントする。さらに、遅延制御部３０ｂは、遅延期間を半分の１５ｍ秒に設定する。つまり、遅延制御部３０ｂは、遅延期間を、ＲＴＴ／２＾（ｎ＋１）として計算している。ここで、ｎは、ＲＴＴ経過数の値である。
【００５３】
通信装置１０ａでのパケットＰ１の送信からＮｏ．９のコネクションでのＲＴＴ分の時間が経過すると、図９の３番目の欄（ＲＴＴ＃２送信側）に示すように、通信装置１０ａはＡｃｋ１を通信装置１０ｂから受信する。通信装置１０ａのＡｃｋ情報解析部２３ａは、受信部１２ａを介してＡｃｋ１を受信すると、送信待バッファ４３ａからパケットＰ１を削除する。さらに、輻輳制御部２６ａは、輻輳ウィンドウを４から５に増大させる。送信パケット構築部４２ａは、確認応答パケットを受信した１パケット分と、輻輳ウィンドウの増大によって送信可能になった１パケット分を合わせた２パケット（Ｐ５、Ｐ６）を新たに通信装置１０ｂ宛てのパケットとして生成し、送信キュー４４ａに出力する。パケットＰ５とＰ６は、図９に示すように、通信装置１０ｂに向けて送信される。
【００５４】
図９のＢＮに、通信装置１０ａと通信装置１０ｂの通信経路中のボトルネックとなるリンクの送信側に接続された中継装置５０ａでのバッファの使用量の変化を示す。中継装置５０ａは、パケットＰ５を受信すると、パケットＰ５の転送処理を行うが、リンクＬ２への１パケットの転送処理は、リンクＬ１で通信装置１０ａが１パケットを送信するときの処理の２倍の時間がかかる。このため、中継装置５０ａは、パケットＰ５の送信中にパケットＰ６を受信することになり、パケットＰ６をバッファに保持する。
【００５５】
一方、通信装置１０ａでは、Ａｃｋ２の受信処理と、Ａｃｋ２の受信に伴う新たなパケットＰ７、Ｐ８の送信処理が行われる。パケットＰ７、Ｐ８の送信の際に行われる処理は、パケットＰ５、Ｐ６の送信時と同様である。
【００５６】
パケットＰ７が中継装置５０ａに到達した時点では、中継装置５０ａはパケットＰ５の転送が終了してパケットＰ６の転送処理を行っているところである。このため、パケットＰ７は、中継装置５０ａ中のバッファで保持される。次にパケットＰ８が中継装置５０ａに到達した時点でも、中継装置５０ａはパケットＰ６の送信処理中であるので、パケットＰ８も、中継装置５０ａ中のバッファで保持される。
【００５７】
通信装置１０ａはＡｃｋ３を受信するまでは新たなパケットを送信しないが、パケットＰ３とＰ４の確認応答パケット（Ａｃｋ３、Ａｃｋ４）の送信のタイミングが通信装置１０ｂで遅延している。このため、図９のＢＮに示すように、中継装置５０ａでのパケットＰ７とＰ８の転送処理が終了するまでは、新たなパケットが通信装置１０ａから送信されない。換言すると、Ａｃｋ３、Ａｃｋ４の遅延により、中継装置５０ａのバッファの空き容量が回復する。
【００５８】
通信装置１０ｂにパケットＰ５〜Ｐ８が到達したときの処理の例を、図９の４番目の欄（ＲＴＴ＃２受信側）に示す。通信装置１０ｂにパケットＰ５〜Ｐ８が到達すると、通信装置１０ｂではパケットＰ１〜Ｐ４の受信の際と同様の処理が行われる。すなわち、パケットＰ５とＰ６についての確認応答パケットであるＡｃｋ５とＡｃｋ６は遅延しないが、パケットＰ７とＰ８についての確認応答パケットであるＡｃｋ７とＡｃｋ８の送信は、遅延期間分だけ遅延する。
【００５９】
ここで、パケットＰ１の受信からＲＴＴの長さの期間が経過した時点で、遅延期間は３０ｍ秒から１５ｍ秒に変更されている。このため、Ａｃｋ７は、Ａｃｋ保留キュー３１ｂに１５ｍ秒保持された後で送信キュー４４ｂに出力される。Ａｃｋ８は、Ａｃｋ８の送信時刻がＡｃｋ７の送信時刻の後になるように、送信キュー４４ｂに出力される。従って、Ａｃｋ６の送信からＡｃｋ７の送信までの間に、１５ｍ秒の空き時間が設けられる。
【００６０】
その後、Ａｃｋ３とＡｃｋ４が通信装置１０ａに届くと、通信装置１０ａは、Ａｃｋ３、Ａｃｋ４の受信処理を行う。さらに、通信装置１０ａは、Ａｃｋ３とＡｃｋ４の受信に伴って輻輳ウィンドウを８まで拡大すると共に、新たなパケットＰ９〜Ｐ１２の送信処理を行う。Ａｃｋ３、４の処理やパケットＰ９〜Ｐ１２の送信の際に行われる処理は、Ａｃｋ１の処理とパケットＰ５、Ｐ６の送信の際の処理と同様である。
【００６１】
中継装置５０ａは、図９のＢＮに示すように、パケットＰ９を受信すると、パケットＰ９の転送処理を行う。さらに、中継装置５０ａは、パケットＰ９の送信中にパケットＰ１０を受信するので、パケットＰ１０をバッファに保持する。中継装置５０aがパケットＰ１０の転送処理を行っている間にパケットＰ１１とＰ１２が中継装置５０ａに到達するので、中継装置５０ａは、パケットＰ１１とＰ１２もバッファに格納し、バッファに滞留しているパケットを順次処理する。
【００６２】
図９のＲＴＴ＃２受信側に示すように、通信装置１０ｂは、パケットＰ８の受信後にパケットを受信しない期間があり、その後、パケットＰ９〜Ｐ１２を受信する。従って、通信装置１０ｂにパケットＰ９〜Ｐ１２が到達すると、通信装置１０ｂではパケットＰ５〜Ｐ８の受信の際と同様の処理が行われる。すなわち、パケットＰ９とＰ１０についての確認応答パケットであるＡｃｋ９とＡｃｋ１０は遅延しないが、パケットＰ１１とＰ１２についての確認応答パケットであるＡｃｋ１１とＡｃｋ１２の送信は、遅延期間分だけ遅延する。換言すると、パケットＰ９〜Ｐ１２は、新たなパケットトレインとして処理されているといえる。その後、パケットＰ５の受信からＲＴＴが経過すると、遅延制御部３０ｂは、ＲＴＴ／２＾（ｎ＋１）という計算式に基づいて、次に確認応答パケットの送信を遅延させる期間をさらに半減させる。
【００６３】
図９を用いて説明したような処理により通信装置１０ａと通信装置１０ｂの間でデータパケットや確認応答パケットが送受信されるため、通信処理の継続と共に、通信装置１０ａでのパケットの送信間隔の偏りが緩和される。このため、ＲＴＴ単位で通信装置１０ａでのパケットの送信レートも平均化される。また、ＲＴＴ単位での送信レートが平均化されてくると、遅延期間として設定する値が小さくなり、遅延処理による効果が小さくなることが予測される。このため、遅延制御部３０ｂは、遅延期間の計算値が所定の閾値よりも小さくなると、確認応答パケットの送信の遅延処理を中止しても良い。この場合、通信装置１０の負担を小さくしつつ、送信レートの偏りも緩和できる。
【００６４】
図１０は、送信側の通信装置での送信レートの変動の例を説明する図である。図１０の細い実線は、通信装置１０ａが通信装置１０ｂからの確認応答パケットを受信するときの受信レートである。以下、確認応答パケットを受信するときの受信レートを「Ａｃｋレート」と記載することがある。また、確認応答パケットが連続的に送信されることによりパケットトレイン状になったものを「Ａｃｋトレイン」と記載することもある。図１０の破線は、通信装置１０ａが通信装置１０ｂに送信するパケットの送信レートである。なお、グラフ中の一点鎖線（Ｕ）は、送信レートをＲＴＴごとに平滑化したときの値の変動を示す。さらに、図１０中のＸは通信装置１０ａが接続されているリンクＬ１で許容される送信レートの最大値である。一方、Ｙは、ボトルネックとなっているリンクＬ２で許容される転送レートである。図１０には、送信レートやＡｃｋレートの変動のタイミングと共に、中継装置５０ａでのバッファの使用量の変動の例も太線（Ｗ）で示す。また、Ｚは中継装置５０ａのバッファの容量である。
【００６５】
図１０の１番目のＲＴＴでは、パケットトレインの長さが閾値Ｔｈ２に達していないことから確認応答パケットの遅延処理が行われなかったとする。すると、２回目のＲＴＴに示すように、通信装置１０ａは、１つのＡｃｋトレインとして確認応答パケットを受信する。通信装置１０ｂがボトルネックリンクの転送レートで通信装置１０ａからのパケットを受信することから、Ａｃｋレートは、ボトルネックリンクで許容される転送レートとなる。通信装置１０ａは、図９を参照しながら説明した処理により、Ａｃｋトレインの受信中にパケットトレインを送信する。通信装置１０ａからの送信処理が継続している間は、中継装置５０ａでの転送パケットの蓄積が続くので、中継装置５０ａでのバッファの使用量は、Ｗに示すように、パケットトレインの送信期間中は上昇する。その後、通信装置１０ａからのパケットトレインの送信が中断されると、中継装置５０ａからの転送処理に伴って、中継装置５０ａ中のバッファの使用量は減少する。
【００６６】
２番目のＲＴＴ中に送信されたパケットトレインは、通信装置１０ｂにおいて、Ａｃｋの遅延処理の対象になったとする。すると、２番目のＲＴＴ中に送信されたパケットに対する確認応答パケットは、２つのＡｃｋトレインに分かれて通信装置１０ａに到達する。通信装置１０ａでは、Ａｃｋトレインの受信中に新たなパケットトレインを送信するため、３番目のＲＴＴでは、通信装置１０ａは、送信パケットを２つのパケットトレインに分割して通信装置１０ｂに送信することになる。このため、中継装置５０ａにもパケットが２つのパケットトレインに分割して届くことになり、中継装置５０ａに１つのパケットトレインで同数のパケットが到達する場合に比べて、中継装置５０ａのバッファの使用量の上昇が抑えられる。
【００６７】
その後も同様に、通信装置１０ｂで確認応答パケットが複数のＡｃｋトレインに分割されるので、パケットの送信間隔が均一化されると共に、ＲＴＴ単位で平滑化したときのパケットの送信レートもＵに示すように上昇していく。
【００６８】
通信装置１０ｂの遅延制御部３０ｂは、遅延期間の計算値が閾値Ｔｈ３以下になると、Ａｃｋトレインの分断を行ってもＡｃｋトレイン同士の送信間隔が短すぎてボトルネックに接続された装置でのバッファの使用量を下げる効果が薄いと判定する。そこで、遅延期間の計算値が閾値Ｔｈ３以下になると、遅延制御部３０ｂは、確認応答パケットの遅延処理を終了する。例えば、図１０の４番目のＲＴＴで受信したパケットトレインにおいては、通信装置１０ｂはＡｃｋトレインの分割処理を行っていない。このため、５番目のＲＴＴではＡｃｋトレインが分割されず、通信装置１０ａはＡｃｋトレインの受信中に、パケットトレインの送信を続ける。すると、中継装置５０ａでのバッファの使用量がＺを越えることにより、パケットロスが発生する。
【００６９】
図１１は、スロースタートでの送信レートの変動の例を示す。図１１を参照しながら、パケットロスが発生するタイミングと、送信レートの最適化にかかる時間の関係の例を説明する。図１１のＤは、ボトルネックリンクの転送レートを示す。スロースタート中にパケットロスが発生すると、送信側の通信装置１０ａは、ＲＴＴ単位で平均した送信レートがパケットロスの発生時の半分になるように送信レートを調整したうえで、通信装置１０ｂとの通信を再開する。このため、図１１のＥに示すように、スロースタートの処理が始まってから比較的早い段階でパケットロスが発生すると、送信側の装置ではパケットロスが発生したときの送信レートの半分の送信レートを用いてパケットの送信処理を行う。その後、通信装置１０ａは、徐々に送信レートを大きくしていくが、スロースタート処理中よりも緩やかに送信レートを上昇させていくので、送信レートがボトルネックリンクでの転送レートに到達するまでには長い時間がかかる。
【００７０】
一方、図１１のＦに示すように、スロースタートの処理が始まってから送信レートがボトルネックリンクで許容される転送レートを超えるまでパケットロスが発生しない場合でも、パケットロスが発生すると送信レートが半分になる。パケットロスの発生によりスロースタートは終了するが、スロースタートの終了までに送信レートが十分に高くなっているため、送信レートがボトルネックリンクでの転送レートに到達するまでの所要時間はＥに示すケースよりも短くてすむ。すなわち、スロースタート処理中にパケットロスが発生するタイミングを遅らせるほど、転送レートの最適化にかかる時間を短縮化できる。
【００７１】
図１２は、ボトルネックリンクに接続された装置中のバッファの使用量の例を説明する図である。図１２のＡは、第１の実施形態にかかる通信方法を用いてＡｃｋトレインが分断される場合について、ボトルネックとなっている中継装置５０ａのバッファの使用量の時間変化を示している。一方、図１２のＢは、実施形態にかかる方法を用いてＡｃｋトレインが分断されておらず、かつ、Ａと同じ送信レートが用いられた場合について、中継装置５０ａのバッファの使用量の時間変化を示している。図１２のＣは、中継装置５０ａのバッファの容量である。従って、バッファに蓄積しようとするパケットの量がＣに示す破線を超えるとパケットロスが発生する。Ｂに示すようにＡｃｋトレインの分割が行われていない場合は、送信側の通信装置１０ａからのパケットトレインも分割されないため、通信が開始してから３回目のＲＴＴにおいてパケットロスが発生してしまう。一方、Ａのケースでは、Ａｃｋトレインの分断により、中継装置５０ａのバッファに蓄積したパケットの処理が終わってから次のパケットトレインが到着するので、中継装置５０ａのバッファが有効活用される。このため、通信が開始してから３回目のＲＴＴが経過してもパケットロスが発生しない。従って、第１の実施形態にかかる方法を用いることにより、通信装置１０ａと通信装置１０ｂの間での通信においてのパケットロスが発生しにくくなる。パケットロスの低減により、通信装置１０ａと通信装置１０ｂの間での転送レートの最適化が短時間で行われる。
【００７２】
図１３は、受信側の通信装置が確認応答を送信するときの処理の例を説明するフローチャートである。なお、フローチャートでは、図中の文字数を削減するために、確認応答パケットのことを「Ａｃｋ」と記載することがある。
【００７３】
ＲＴＴ計測部２４は、ＲＴＴを計測する（ステップＳ１１）。受信データ組立部２１は、受信したパケット中のデータを処理する（ステップＳ１２）。Ａｃｋ生成部２５は、確認応答パケットを生成する（ステップＳ１３）。遅延制御部３０は確認応答パケットの送信を保留しているかを判定する（ステップＳ１４）。確認応答パケットの送信を保留している場合、確認応答パケットをＡｃｋ保留キュー３１に出力し、送信待ちの確認応答パケットの数をインクリメントする（ステップＳ１４でＹｅｓ、ステップＳ１５、Ｓ１６）。
【００７４】
確認応答パケットの送信を保留していない場合、前回のパケットの受信からの経過時間（Ｔｉｎｔｖ）がパケットトレイン判定閾値（Ｔｈ１）以上であるかを判定する（ステップＳ１４でＮｏ、ステップＳ１７）。ここで、ステップＳ１７の処理は、パケットトレインの先頭のパケットを受信したかを判定する処理である。前回のパケットの受信からの経過時間がパケットトレイン判定閾値以上の場合、遅延制御部３０は、これから送信するＡｃｋトレイン中に含まれている確認応答パケットの数（Ｎａｓｅｎｔ）を１に設定する（ステップＳ１７でＹｅｓ、ステップＳ２０）。遅延制御部３０は、コネクション管理テーブル３２中に記録しているＡｃｋ送信時刻の値を変更し、確認応答パケットを、送信部１３を介してデータパケットの送信元に送信する（ステップＳ２１、Ｓ２２）。
【００７５】
前回のパケットの受信からの経過時間がパケットトレイン判定閾値未満の場合、遅延制御部３０は、現在送信中のＡｃｋトレインで送信した確認応答パケットの数が閾値Ｔｈ２以上であるかを判定する（ステップＳ１７でＮｏ、ステップＳ１８）。現在送信中のＡｃｋトレインで送信した確認応答パケットの数が閾値Ｔｈ２未満の場合、遅延制御部３０は、送信中のＡｃｋトレインに含まれる確認応答パケットの数（Ｎａｓｅｎｔ）を１つインクリメントする（ステップＳ１８でＮｏ、ステップＳ１９）。さらに、遅延制御部３０は、Ａｃｋ送信時刻の値を変更した上で、確認応答パケットを送信する（ステップＳ２１、Ｓ２２）。現在送信中のＡｃｋトレインで送信した確認応答パケットの数が閾値Ｔｈ２以上の場合、遅延制御部３０は、処理対象の確認応答パケットをＡｃｋ保留キュー３１に格納した上で、以後の確認応答パケットの送信を保留する（ステップＳ１８でＹｅｓ、ステップＳ２３）。遅延制御部３０は、遅延期間（Ｔａｐｅｎｄ）の経過後に確認応答パケットの送信を再開するために、タイマを起動する（ステップＳ２４）。
【００７６】
図１４は、受信側の通信装置が遅延期間の経過後に確認応答パケットの送信を再開するときの処理の例を説明するフローチャートである。遅延期間が経過すると、遅延制御部３０は、送信待ちの確認応答パケットの数が閾値Ｔｈ２以下であるかを判定する（ステップＳ３１）。送信待ちの確認応答パケットの数が閾値Ｔｈ２を越えている場合、遅延制御部３０は、Ａｃｋ保留キュー３１中の送信待ちの確認応答パケットのうち、閾値Ｔｈ２と同数のパケットについて、送信処理を行う（ステップＳ３１でＹｅｓ、ステップＳ３２）。遅延制御部３０は、遅延期間（Ｔａｐｅｎｄ）の経過後に確認応答パケットの送信を再開するために、タイマを起動する（ステップＳ３３）。送信待ちの確認応答パケットの数が閾値Ｔｈ２以下である場合、遅延制御部３０は、送信待ちの確認応答パケットの全てについて、送信処理を行う（ステップＳ３１でＮｏ、ステップＳ３４）。
【００７７】
このように、第１の実施形態によると、Ａｃｋトレインを分割することにより、スロースタート処理中のパケットロスの発生を極力遅らせることができ、その結果、パケットロスが発生するまでに送信レートを引き上げることができる。この結果、第１の実施形態を用いると、送信レートの最適化にかかる時間を短縮化できる。
【００７８】
＜第２の実施形態＞
第１の実施形態では、Ａｃｋトレインの分割を受信側の通信装置１０が行う場合について説明したが、Ａｃｋトレインの分割をネットワーク中の中継装置５０が行うこともできる。第２の実施形態では、中継装置５０がＡｃｋトレインを分割する場合について説明する。
【００７９】
図１５は、第２の実施形態に係る中継装置５０の構成の例を説明する図である。中継装置５０は、送受信部（５１、５４）、コネクション識別処理部（６１、６２）、滞留時間調整キュー（６３、６４）、パケットスケジュール部（６５、６６）、制御部７０を備える。制御部７０は、遅延制御部７１、ＲＴＴ計測部７２、コネクション管理部７３、コネクション管理テーブル７４を有する。さらに、送受信部５１は、送信部５２と受信部５３を有し、送受信部５４は受信部５５と送信部５６を有する。
【００８０】
ＲＴＴ計測部７２は、コネクションの両端の通信装置の間でのＲＴＴを計測する。ＲＴＴ計測部７２は、コネクションが確立される際のスリーウェイハンドシェークで送受信される制御パケット中のタイムスタンプを用いてＲＴＴを計算する。ＲＴＴ計測部７２は、コネクションの宛先側の通信装置と中継装置５０との間をパケットが往復する際にかかる時間を、宛先側の通信装置にパケットを転送してから、そのパケットに対する確認応答パケットを取得するまでの期間とする。一方、送信側の通信装置と中継装置５０の間をパケットが往復するためにかかる時間についても、ＲＴＴ計測部７２は、同様に計測する。ＲＴＴ計測部７２は、送信側の通信装置と中継装置５０の間でのパケットの往復にかかる時間、宛先の通信装置と中継装置５０の間でのパケットの往復にかかる時間、および、中継装置５０での処理遅延の合計を、そのコネクションについてのＲＴＴとする。
【００８１】
遅延制御部７１は、遅延制御部３０と同様の処理を行う。コネクション管理部７３は、各コネクションについての情報を管理しており、コネクション管理テーブル７４の更新処理を行う。コネクション管理テーブル７４に含まれる情報要素は、図８Ａと図８Ｂを参照しながら説明したコネクション管理テーブル３２と同様である。
【００８２】
図１５は、中継装置５０がネットワーク１とネットワーク２の間の通信を中継している場合の例を示している。送受信部５１はネットワーク１と中継装置５０の通信に使用され、送受信部５４はネットワーク２と中継装置５０の間の通信に使用される。
【００８３】
図１６は、第２の実施形態にかかる通信処理の例を説明する図である。図１６では、送信側の通信装置５ａがネットワーク１にあり、パケットの宛先となる通信装置５ｂがネットワーク２に含まれている場合の通信の例を示す。なお、以下の説明では、通信装置５ａと通信装置５ｂは、第１の実施形態にかかる通信に対応していないものとする。以下、通信装置５ａがパケットＰ０〜Ｐ４を通信装置５ｂに送信したため、通信装置５ｂから通信装置５ａに向けて確認応答パケット（Ｐ０ａｃｋ〜Ｐ４ａｃｋ）が送信される場合の中継装置５０の処理の例を説明する。ここで、中継装置５０が確認応答パケットＰ０ａｃｋの受信からＰ１ａｃｋを受信するまでの時間間隔はｔｗ１であるとする。また、中継装置５０でのパケットの受信間隔は、Ｐ１ａｃｋの受信からＰ２ａｃｋの受信までがｔｗ２、Ｐ２ａｃｋの受信からＰ３ａｃｋの受信までがｔｗ３、Ｐ３ａｃｋの受信からＰ４ａｃｋの受信までがｔｗ４であるものとする。
【００８４】
中継装置５０の遅延制御部７１は、確認応答パケットを受信すると、直前に受信した確認応答パケットとの間の受信間隔を第１の時間（Ｔ１）と比較した結果を用いて、確認応答パケットを連続的に受信しているかを判定する。受信間隔がＴ１以下の場合、遅延制御部７１は、連続的に確認応答パケットを受信したと判定する。図１の例では、ｔｗ１はＴ１を超えているが、ｔｗ２〜ｔｗ４はＴ１以下である。このため、遅延制御部７１は、Ｐ０ａｃｋとＰ１ａｃｋは連続的に受信していないと判定するが、Ｐ１ａｃｋの次にＰ２ａｃｋを受信したときには、Ｐ１ａｃｋとＰ２ａｃｋを連続的に受信したと判定する。
【００８５】
遅延制御部７１は、連続的に複数の確認応答パケットを受信した場合、一定量のデータに対する確認応答パケットの転送処理は遅らせないが、一定量を超えた分のデータに対する確認応答パケットの転送を遅延させる。図１６は、一定量が２パケットで送信されるデータ量に設定されている場合の例である。遅延制御部７１は、確認応答パケットＰ１ａｃｋとＰ２ａｃｋを連続的に受信しても、連続的に受信されたデータ量が一定量を超えていないので、確認応答パケットの転送のタイミングを遅らせない。
【００８６】
次に、中継装置５０が確認応答パケットＰ３ａｃｋを受信すると、遅延制御部７１は、Ｐ２ａｃｋとＰ３ａｃｋの受信間隔を用いて、確認応答パケットＰ１ａｃｋ〜Ｐ３ａｃｋを連続的に受信したと判定する。すると、遅延制御部７１は、連続的に受信した確認応答で受信が通知されたデータ量が、予め設定された一定量を超えたと判定し、Ｐ３ａｃｋの転送を第２の時間（Ｔ２）保留することにより、Ｐ３ａｃｋの送信タイミングを第２の時間だけ遅延させる。同様に、中継装置５０が確認応答パケットＰ４ａｃｋを受信した場合も、遅延制御部７１は、ｔｗ４がＴ１より短いので、確認応答パケットＰ１ａｃｋ〜Ｐ４ａｃｋを連続的に受信したと判定する。すると、遅延制御部７１は、Ｐ３ａｃｋと同様に、Ｐ４ａｃｋの転送のタイミングも遅らせる。中継装置５０が確認応答パケットの転送処理を遅らせる時間の長さ（Ｔａｐｅｎｄ）の決定方法は、第１の実施形態と同様である。
【００８７】
図１７は、第２の実施形態にかかる通信によるパケットの送受信のタイミングを説明する図である。図１７では、図１６で説明したＡｃｋパケットが送信される原因となったパケットの送信処理から、図１６で述べたＡｃｋパケットの中継の後に行われるパケットの送信までの処理を示している。
【００８８】
通信装置５ａが通信装置５ｂ宛にパケットＰ１〜Ｐ４を送信すると、中継装置５０は、パケットＰ１〜Ｐ４を、受信部５３を介して受信する（ステップＳ４１）。受信部５３は、パケットＰ１〜Ｐ４をコネクション識別処理部６１に出力する。コネクション識別処理部６１は、データパケットをコネクション別に分類する。コネクション識別処理部６１は、許容されている遅延に合わせて、パケットＰ１〜Ｐ４を滞留時間調整キュー６３中のいずれかのキューに出力する。なお、滞留時間調整キュー６３中の複数のキューでは、処理遅延が各々異なっている場合を例とする。パケットスケジュール部６５は、滞留時間調整キュー６３からパケットを読み出して送信部５６に出力する。
【００８９】
送信部５６の送信処理により、パケットＰ１〜Ｐ４が通信装置５ｂに向けて送信されたとする（ステップＳ４２）。通信装置５ｂは、パケットＰ１〜Ｐ４の受信に成功すると、パケットＰ１〜Ｐ４についての確認応答パケット（Ｐ１ａｃｋ〜Ｐ４ａｃｋ）を通信装置１０ｂに向けて送信する（ステップＳ４３）。
【００９０】
中継装置５０は、受信部５５を介して、通信装置５ａ宛ての確認応答パケットＰ１ａｃｋ〜Ｐ４ａｃｋを受信する。コネクション識別処理部６２と遅延制御部７１は、受信部５５を介して、確認応答パケットＰ１ａｃｋ〜Ｐ４ａｃｋを取得する。ここで、滞留時間調整キュー６４も滞留時間調整キュー６３と同様に複数のキューを有しており、キューのうちの１つは、Ａｃｋ保留キュー３１と同様に、確認応答パケットの保持に使用される。コネクション識別処理部６２は、確認応答パケットＰ１ａｃｋ〜Ｐ４ａｃｋを、滞留時間調整キュー６４中で確認応答パケットの保持に使用されているキューに出力する。
【００９１】
遅延制御部７１は、コネクション管理テーブル７４を参照し、コネクション別にＲＴＴごとのＡｃｋトレイン中のパケット数をカウントしている。Ａｃｋトレイン中のパケット数をカウント方法は、図１３を参照しながら説明した遅延制御部３０の処理と同様である。遅延制御部７１は、Ａｃｋトレイン中のパケット数が閾値Ｔｈ２以上になると、そのコネクションについての確認応答パケットの送信を保留する。その後、遅延期間が経過すると、確認応答パケットの送信を再開し、１つのＡｃｋトレイン中のパケット数が閾値Ｔｈ２以下になるように、Ａｃｋトレインを分割する。遅延制御部７１は、確認応答パケットの送信のタイミングを、コネクション別にパケットスケジュール部６６に通知する。図１７は、閾値Ｔｈ２が３である場合の例を示している。この場合、遅延制御部７１は、確認応答パケットＰ１ａｃｋとＰ２ａｃｋについては遅延させないので、Ｐ１ａｃｋとＰ２ａｃｋの送信をパケットスケジュール部６６に要求する。一方、遅延制御部７１は、Ｐ３ａｃｋについては、送信のタイミングを遅延期間だけ遅らせる。さらに、遅延制御部７１は、Ｐ４ａｃｋについても、Ｐ３ａｃｋの後に出力されるように送信のタイミングを遅延させる。
【００９２】
パケットスケジュール部６６は、遅延制御部７１からの通知に従って、確認応答パケットを送信部５２に出力するので、Ｐ１ａｃｋとＰ２ａｃｋは通信装置５ａに向けて送信される（ステップＳ４４）。
【００９３】
通信装置５ａは、Ｐ１ａｃｋとＰ２ａｃｋを受信すると、輻輳ウィンドウを拡大し、パケットＰ４の後続パケットＰ５〜Ｐ８を通信装置５ｂに向けて送信する。この処理は、第１の実施形態などで説明した送信側の通信装置１０ａの処理と同様である。パケットＰ５〜Ｐ８を受信したときの中継装置５０での処理は、パケットＰ１〜Ｐ４を受信したときと同様であるので、通信装置５ｂはパケットＰ５〜Ｐ８を受信する（ステップＳ４５）。
【００９４】
一方、中継装置５０の遅延制御部７１は、連続して受信した確認応答パケットＰ１ａｃｋ〜Ｐ４ａｃｋのうちで最初に受信したパケットＰ１ａｃｋの受信時刻から、ＲＴＴが経過するまでの間に、保留中の確認応答パケットを通信装置５ａに送信しようとする。そこで、遅延制御部７１は、確認応答パケットＰ１ａｃｋの送信から遅延期間（ｔＤｌｙ）が経過すると、保留中の確認応答パケットＰ３ａｃｋとＰ４ａｃｋの送信タイミングを、パケットスケジュール部６６に通知する。パケットスケジュール部６６と送信部５２の処理により、確認応答パケットＰ３ａｃｋとＰ４ａｃｋが通信装置５ａに送信される（ステップＳ４６）。なお、ｔＤｌｙはＲＴＴより短い時間である。
【００９５】
通信装置５ａは、Ｐ３ａｃｋとＰ４ａｃｋを受信すると、輻輳ウィンドウを拡大し、後続パケットＰ９〜Ｐ１２を通信装置５ｂに向けて送信する。中継装置５０は、パケットＰ９〜Ｐ１２についても、他のパケットと同様に転送処理を行うので、通信装置５ｂはパケットＰ９〜Ｐ１２を受信する（ステップＳ４７）。
【００９６】
図１７に示すように、中継装置５０がＰ３ａｃｋとＰ４ａｃｋの送信を遅延させるため、通信装置５ａはパケットＰ１〜Ｐ４を含むパケットトレインに対する確認応答を、２つのＡｃｋトレインで受信することになる。また、２つのＡｃｋトレインはＲＴＴの範囲内で通信装置５ａに送信されている。このため、通信装置５ａは、パケットＰ５〜Ｐ１２を、ＲＴＴの範囲内に含まれる２つのパケットトレインとして、通信装置５ｂに送信する。従って、第２の実施形態においても、第１の実施形態と同様に、通信装置５ａからのパケットの送信がＲＴＴの範囲内で平滑化される。
【００９７】
なお、送信側の装置がネットワーク２にあり、パケットの宛先となる通信装置がネットワーク１に含まれている場合にも、同様に処理される。ただし、この場合、宛先の通信装置に送信されるデータパケットは、受信部５５、コネクション識別処理部６２、滞留時間調整キュー６４、パケットスケジュール部６６、送信部５２を介して中継される。一方、確認応答パケットは、受信部５３、コネクション識別処理部６１、滞留時間調整キュー６３、パケットスケジュール部６５、送信部５６を介して、ネットワーク２に転送される。この場合、遅延制御部７１は、確認応答パケットの送信タイミングを、パケットスケジュール部６５に通知する。パケットスケジュール部６５は、遅延制御部７１からの通知に応じて、確認応答パケットを送信部５６に出力する。
【００９８】
図１６と図１７を参照した説明では、理解しやすくするために、確認応答パケットが欠落していない場合を例としたが、実際の通信では、確認応答パケットの一部が欠落する場合もある。この場合も、遅延制御部７１は、直前に受信した確認応答から第１の時間の経過後に受信した確認応答で受信の成功が通知されたデータを基準として、所定量までのデータの受信を通知する確認応答パケットは遅延させない。一方、基準としたデータから所定量のデータ以降に送信されているデータに対する確認応答に対しては、遅延制御部７１は、遅延させる対象とする。
【００９９】
例えば、パケットＰ１〜Ｐ４に対する確認応答のうち、パケットＰ１に対する確認応答パケット（Ｐ１ａｃｋ）が通信装置５ｂから中継装置５０に到達しなかったとする。また、中継装置５０は、通信装置５ａから閾値Ｔｈ２未満のパケットを用いて通信装置５ｂに送信されるデータに関する確認応答は遅延させないように設定されているとする。この場合、中継装置５０は、通信装置５ｂから受信したＰ２ａｃｋは遅延させずに通信装置５ａに送信する。このとき、中継装置５０は、Ｐ２ａｃｋを用いて、パケットＰ１とＰ２の２パケット分のデータが５ｂに受信されていることを認識する。次に、中継装置５０がＰ３ａｃｋを受信すると、遅延制御部７１は、Ｐ３ａｃｋとＰ４ａｃｋの転送を遅延期間だけ遅延させる。この結果、パケットトレインが分断される。
【０１００】
図１８は、第２の実施形態に係る中継装置５０のハードウェア構成の例を示す。中継装置５０は、プロセッサ１２０、ＲＡＭ１２１、ＲＯＭ１２２、保守インタフェース（Ｉ／Ｆ）１２３、タイマ１２４、ネットワーク接続装置１２５、ネットワーク接続装置１２６、内部バス１２７を備える。プロセッサ１２０は、コネクション識別処理部６１、コネクション識別処理部６２、パケットスケジュール部６５、パケットスケジュール部６６、遅延制御部７１、ＲＴＴ計測部７２、コネクション管理部７３を実現する。ＲＡＭ１２１は、滞留時間調整キュー６３、滞留時間調整キュー６４として動作し、コネクション管理テーブル７４を保持する。ＲＯＭ１２２は、中継装置５０で実行されるプログラムや中継装置５０の動作に使用されるデータ等を格納する。タイマ１２４は、遅延制御部７１、ＲＴＴ計測部７２、パケットスケジュール部６５、パケットスケジュール部６６などの処理に使用される。ネットワーク接続装置１２５は送受信部５１として動作し、ネットワーク接続装置１２６は送受信部５４として動作する。また、プロセッサ１２０、ＲＡＭ１２１、ＲＯＭ１２２、保守インタフェース１２３、タイマ１２４、ネットワーク接続装置１２５、ネットワーク接続装置１２６は、内部バス１２７により、相互にデータの入出力が可能になるように接続されている。保守インタフェース１２３はオプションであり、中継装置５０に含まれなくても良い。保守インタフェース１２３を保持する中継装置５０では、保守インタフェース１２３を介して保守端末１３０と接続され、保守端末１３０による保守処理が行われる。また、保守端末１３０から、適宜、中継装置５０で使用されるプログラムのアップデートや、中継装置５０での処理に用いられる閾値等の変更が行われても良い。
【０１０１】
第２の実施形態でも、第１の実施形態と同様にＡｃｋトレインを分割することにより、スロースタート処理中のパケットロスが起こりにくくなり、送信レートの最適化にかかる時間が短縮される。第２の実施形態では、中継装置５０がＡｃｋトレインを分割することができるため、宛先側の通信装置にＡｃｋトレインを分割する機能が無くても、パケットロスの発生を遅らせることができる。また、中継装置５０は、中継中の全てのコネクションに対してＡｃｋトレインの分割を行うことができる。従って、第２の実施形態にかかる中継装置５０が用いられているシステムでは、宛先側の通信装置として動作する個々の通信装置が第１の実施形態に対応していなくても、複数の通信装置１０に対して、パケットロスの発生を遅らせる処理を行うことができる。
【０１０２】
＜第３の実施形態＞
第３の実施形態では、受信側の通信装置１０において、ＴＣＰのＤｅｌａｙｅｄ  Ａｃｋを応用することにより、Ａｃｋトレインを分割する場合について説明する。この場合、遅延期間が経過するまで待機させる確認応答パケットの数が少なくてすむので、通信装置１０が備えるＡｃｋ保留キュー３１の大きさが小さくても良い。
【０１０３】
図１９は、第３の実施形態でのパケットの送受信とボトルネックリンクに接続された装置中のバッファの使用量の関係の例を説明する図である。図１９についても、図６に示した経路で通信装置１０ａから通信装置１０ｂにデータパケットが送信される場合を例として説明する。
【０１０４】
図１９の一番上の欄（ＲＴＴ＃１送信側）は、通信が開始されたときの１回目のＲＴＴ周期での通信装置１０ａからのパケットの送信タイミングを示す。通信装置１０ａがパケットＰ１〜Ｐ４の４つのパケットを含むパケットトレインを送信するときに行う処理は、第１の実施形態と同様である。また、通信装置１０ｂがパケットＰ１〜Ｐ４を受信するタイミングも図９を参照しながら説明したとおりである。図１９の２番目の欄（ＲＴＴ＃１受信側）に、通信装置１０ｂがパケットＰ１〜Ｐ４を受信するタイミングを示す。なお、図１９についても、図９と同様に、図１９のＲＴＴ＃１受信側は、パケットＰ１の受信を基準として、パケットの受信のタイミングを示している。通信装置１０ｂの受信データ組立部２１ｂ、Ａｃｋ情報解析部２３ｂ、ＲＴＴ計測部２４ｂなどで行われる処理は第１の実施形態と同様である。例えば、パケットＰ１の受信に成功すると、Ａｃｋ生成部２５ｂは、パケットＰ１の受信成功を示す確認応答パケット（Ａｃｋ１）を生成し、遅延制御部３０ｂに出力する。
【０１０５】
。遅延制御部３０ｂは、新たに受信したパケットの受信時刻と、受信パケットの直前に受信したパケットの受信時刻の間の時間がＴｈ１より長い場合、新たに受信したパケットについての確認応答パケットの送信を遅延させない。このため、図１９のＲＴＴ＃１受信側に示すように、パケットトレインの最初のパケットについての確認応答パケット（Ａｃｋ１）は、保留されずに通信装置１０ａに向けて送信される。
【０１０６】
次に、通信装置１０ｂがパケットトレイン中の２番目のパケットＰ２の受信に成功したとする。Ａｃｋ生成部２５ｂから２番目のパケットの確認応答パケット（Ａｃｋ２）が入力されると、遅延制御部３０ｂは、Ａｃｋ２をＡｃｋ保留キュー３１ｂに格納する。遅延制御部３０ｂは、Ａｃｋ生成部２５ｂに、Ａｃｋ２の送信を遅延させていることを通知する。
【０１０７】
通信装置１０ｂがパケットトレイン中の３番目のパケットＰ３の受信に成功したとする。Ａｃｋ生成部２５ｂは、Ａｃｋ保留キュー３１に保持されている確認応答パケットがあるため、パケットＰ３についての確認応答パケットを生成せずに、パケットＰ３の受信に成功したことを遅延制御部３０ｂに通知する。遅延制御部３０ｂは、Ａｃｋ生成部２５ｂからの通知に応じて、Ａｃｋ保留キュー３１ｂ中のＡｃｋ２に含まれている受信済みのパケットのシーケンス番号を変更する。変更後の確認応答パケット（Ａｃｋ２３）は、パケットＰ２とパケットＰ３の受信成功を通信装置１０ａに通知するために使用される。遅延制御部３０ｂは、Ａｃｋ２３を送信キュー４４ｂに出力することにより、Ａｃｋ２３が通信装置１０ａに送信されるように設定する。遅延制御部３０ｂは、確認応答パケットを送信したことをＡｃｋ生成部２５ｂに通知する。
【０１０８】
次に、通信装置１０ｂがパケットＰ４の受信に成功したとする。Ａｃｋ生成部２５ｂは、Ａｃｋ保留キュー３１ｂに確認応答パケットが滞留していないので、パケットＰ４の確認応答パケット（Ａｃｋ４）を生成し、遅延制御部３０ｂに出力する。遅延制御部３０ｂは、次のパケットについての受信結果が通知されるか、遅延期間の経過のいずれかが発生するまで、Ａｃｋ４をＡｃｋ保留キュー３１ｂに保持する。なお、遅延期間は、ＲＴＴより短い値であり、コネクションごとに、コネクション管理テーブル３２（図８Ａ、図８Ｂ）に保持されている。例えば、遅延期間が３０ｍ秒である場合、遅延制御部３０ｂは、Ａｃｋ４をＡｃｋ保留キュー３１ｂに３０ｍ秒保持した後で、送信キュー４４ｂに出力する。換言すると、Ａｃｋ２３の送信からＡｃｋ４の送信までに遅延期間分の空き時間が設けられる。
【０１０９】
通信装置１０ｂがパケットＰ１を受信してからＲＴＴ分の時間が経過すると、遅延制御部３０ｂは、コネクション管理テーブル３２ｂ中の、ＲＴＴ経過数を１つインクリメントし、遅延期間を短くする。例えば、遅延制御部３０ｂは、遅延期間を、ＲＴＴ／２＾（ｎ＋１）として計算できる。ここで、ｎは、ＲＴＴ経過数の値である。
【０１１０】
通信装置１０ａでのパケットＰ１の送信からＲＴＴ分の時間が経過すると、図１９の３番目の欄（ＲＴＴ＃２送信側）に示すように、通信装置１０ａはＡｃｋ１を通信装置１０ｂから受信する。パケットＰ１の送信に成功したときに通信装置１０ａにおいて行われるパケットの送信処理は第１の実施形態と同様である。このため、通信装置１０ａから通信装置１０ｂに、パケットＰ５、Ｐ６が送信される。
【０１１１】
図１９のＢＮに、経路中のボトルネックとなるリンクの送信側に接続された中継装置５０ａでのバッファの使用量の変化を示す。中継装置５０ａは、パケットＰ５を受信すると、パケットＰ５の転送処理を行う。ここで、リンクＬ２への１パケットの転送処理は、リンクＬ１での通信装置１０ａでの１パケットの送信処理の２倍の時間がかかるため、中継装置５０ａは、パケットＰ５の送信中にパケットＰ６を受信し、パケットＰ６をバッファに保持する。パケットＰ５の転送後、中継装置５０ａは、パケットＰ６を転送する。
【０１１２】
その後、通信装置１０ａでは、Ａｃｋ２３の受信処理が行われる。Ａｃｋ２３によって、２つのパケットの送信成功が通知されるので、２パケットの送信が可能になると共に、輻輳ウィンドウも２つ大きくなったとする。すると、通信装置１０ａは、新たに４パケット（パケットＰ７〜Ｐ１０）を通信装置１０ｂに送信する。
【０１１３】
パケットＰ７が中継装置５０ａに到達した時点では、中継装置５０ａにはパケットが滞留していないので、中継装置５０ａは、パケットＰ７の転送処理を行う。パケットＰ７の転送処理が終わってパケットＰ８の転送処理を開始すると、パケットＰ９、Ｐ１０が中継装置５０ａに到達するので、パケットＰ９、Ｐ１０は中継装置５０ａバッファに格納される。その後、中継装置５０ａは、順次、パケットＰ９、Ｐ１０の転送処理も行う。
【０１１４】
通信装置１０ａはＡｃｋ４を受信するまでは新たなパケットを送信しないが、Ａｃｋ４の送信のタイミングは、通信装置１０ｂが遅延させている。このため、図１９のＢＮに示すように、中継装置５０ａでのパケットＰ１０の転送処理が終了するまでは、新たなパケットが通信装置１０ａから送信されない。このため、Ａｃｋ４の遅延により、中継装置５０ａのバッファの空き容量が回復する。
【０１１５】
通信装置１０ｂにパケットＰ５〜Ｐ１０が到達したときの処理の例を、図１９の４番目の欄（ＲＴＴ＃２受信側）に示す。通信装置１０ｂにパケットＰ５〜Ｐ１０が到達すると、通信装置１０ｂではパケットＰ１〜Ｐ４の受信の際と同様の処理が行われる。すなわち、パケットＰ５の確認応答パケットであるＡｃｋ５の送信のタイミングは変更されない。パケットＰ６についての確認応答パケットは、パケットＰ７の受信までＡｃｋ保留キュー３１ｂに保持され、パケットＰ６とＰ７の受信結果の通知に使用するＡｃｋ６７に変換された後で、通信装置１０ａに送信される。パケットＰ８についての確認応答パケットも、パケットＰ９の受信までＡｃｋ保留キュー３１ｂに保持され、パケットＰ８とＰ９の受信結果の通知に使用するＡｃｋ８９に変換された後で、通信装置１０ａに送信される。遅延制御部３０ｂは、パケットＰ１０についての受信結果を通知するＡｃｋ１０を、次のパケットについての受信結果が通知されるか、遅延期間の経過のいずれかが発生するまで、Ａｃｋ保留キュー３１ｂに保持する。なお、遅延期間は、１回目のＲＴＴの後で１５ｍ秒に短縮されている。遅延制御部３０ｂは、Ａｃｋ１０を１５ｍ秒の間、Ａｃｋ保留キュー３１ｂに保持した後で、通信装置１０ａに向けて送信する。従って、Ａｃｋ８９の送信からＡｃｋ１０の送信までの間に、１５ｍ秒の空き時間が設けられる。
【０１１６】
その後、Ａｃｋ４が通信装置１０ａに届くと、通信装置１０ａは、Ａｃｋ４の受信処理と輻輳ウィンドウの拡大を行う。その結果、新たなパケットＰ１１とＰ１２が通信装置１０ａに送信される。
【０１１７】
中継装置５０ａは、図１９のＢＮに示すように、パケットＰ１１の受信までに空き容量を回復しているので、パケットＰ１１の転送処理を行う。パケットＰ１１の転送中にパケットＰ１２を受信すると、中継装置５０ａは、パケットＰ１２をバッファに保持し、パケットＰ１１の転送処理の後にパケットＰ１２を転送する。
【０１１８】
図１９のＲＴＴ＃２受信側に示すように、通信装置１０ｂは、パケットＰ１１とＰ１２を受信すると、パケットＰ１１に対する確認応答パケットＡｃｋ１１を通信装置１０に送信する。さらに、遅延制御部３０ｂは、パケットＰ１２に対する確認応答パケットＰ１２については、次のパケットについての受信結果が通知されるか、遅延期間の経過のいずれかが発生するまで、Ａｃｋ保留キュー３１ｂに保持する。図１９の例では、Ａｃｋ１０と同様に、遅延期間の経過後に、Ａｃｋ１２が通信装置１０ａに送信されている。
【０１１９】
図１９のグラフＧ１は、第３の実施形態においての中継装置５０ａ中のバッファの使用量の例を、Ａｃｋトレインが分割されない場合と比較した結果を示す。グラフＧ１中のＧは、第３の実施形態にかかる通信方法を用いてＡｃｋトレインが分断される場合について、ボトルネックとなっている中継装置５０ａのバッファの使用量の時間変化を示している。一方、グラフＧ１のＢは、実施形態にかかる方法を用いてＡｃｋトレインが分断されておらず、かつ、Ｇと同じ送信レートが用いられた場合について、中継装置５０ａのバッファの使用量の時間変化を示している。グラフＧ１中のＣは、中継装置５０ａのバッファの容量であり、バッファに蓄積しようとするパケットの量がＣに示す破線を超えるとパケットロスが発生する。
【０１２０】
Ｂに示すようにＡｃｋトレインの分割が行われていない場合は、送信側の通信装置１０ａからのパケットトレインも分割されないため、通信が開始してから３回目のＲＴＴにおいてパケットロスが発生してしまう。一方、Ｇのケースでは、Ａｃｋトレインの分断により、中継装置５０ａのバッファに蓄積したパケットの処理が終わってから次のパケットトレインが到着するので、第１の実施形態と同様に、中継装置５０ａのバッファが有効活用される。このため、通信が開始してから３回目のＲＴＴが経過してもパケットロスが発生しない。
【０１２１】
従って、第３の実施形態にかかる方法を用いることにより、通信装置１０ａと通信装置１０ｂの間での通信においてのパケットロスが発生しにくくなる。パケットロスの低減により、通信装置１０ａと通信装置１０ｂの間での転送レートの最適化が短時間で行われる。
【０１２２】
なお、第３の実施形態においても、遅延制御部３０は、Ａｃｋトレインの分割が進むたびに遅延期間を短くする。遅延期間の値が所定の閾値未満になると、遅延制御部３０は、Ａｃｋトレインの分割を終了し、通常のＤｅｌａｙｅｄ  Ａｃｋの処理（通常モード）に戻る。
【０１２３】
図２０は、受信側の通信装置が確認応答を送信するときの処理の例を説明するフローチャートである。ＲＴＴ計測部２４は、ＲＴＴを計測する（ステップＳ５１）。受信データ組立部２１は、受信したパケット中のデータを処理する（ステップＳ５２）。遅延制御部３０は、確認応答パケットの遅延処理を抑止しているかを判定する（ステップＳ５３）。確認応答パケットの遅延処理を抑止している場合、確認応答パケットは、生成と共にデータパケットの送信元に送信される設定になっている（ステップＳ５３でＹｅｓ）。そこで、遅延制御部３０は、確認応答パケットを送信した上で、確認応答パケットの遅延処理を抑止の設定を「解除」に変更する（ステップＳ５５、Ｓ５６）。
【０１２４】
一方、確認応答パケットの遅延処理を抑止していない場合、遅延制御部３０は、確認応答パケットの送信を保留中であるかを判定する（ステップＳ５３でＮｏ、ステップＳ５４）。確認応答パケットの送信を保留している場合、遅延制御部３０は、確認応答パケットを更新して送信する（ステップＳ５４でＹｅｓ、ステップＳ５５）。その後ステップＳ５６の処理が行われる。
【０１２５】
確認応答パケットの送信を保留していない場合、遅延制御部３０は、前回の確認応答パケットを送信してからの経過時間（Ｔｉｎｔｖ）が、閾値Ｔｈ１（パケットトレイン判定閾値）より長いかを判定する（ステップＳ５４でＮｏ、ステップＳ５７）。ここで、ステップＳ５７の処理は、パケットトレインの先頭のパケットを受信したかを判定する処理である。経過時間が閾値Ｔｈ１より長い場合、遅延制御部３０は、確認応答パケットの遅延処理の抑止の設定を「抑止」に変更する（ステップＳ５７でＹｅｓ、ステップＳ５８）。この処理により、遅延制御部３０は、パケットトレインの先頭のパケットについては、強制的に確認応答パケットを送信できるように設定している。さらに、遅延制御部３０は、遅延処理に使用するためのタイマの値Ｔａｔｏを初期値に設定する（ステップＳ５９）。なお、タイマの値Ｔａｔｏの初期値は、Ａｃｋトレインを分割する処理を行っている間は、ＲＴＴの１／２に設定される。その後、ステップＳ５５とＳ５６の処理が行われる。
【０１２６】
前回のパケットの受信からの経過時間が閾値Ｔｈ１以下の場合、遅延制御部３０は、入力された確認応答パケットをＡｃｋ保留キュー３１に保留し、タイマを起動する（ステップＳ５７でＮｏ、ステップＳ６０、Ｓ６１）。
【０１２７】
図２１は、受信側の通信装置がタイマを用いて確認応答を送信するときの処理の例を説明するフローチャートである。タイマが満了すると、遅延制御部３０は、Ａｃｋ保留キュー３１中の確認応答パケットの送信処理を行う（ステップＳ７１）。遅延制御部３０は、現在の動作モードが通常モード（Ｄｅｌａｙｅｄ  Ａｃｋ）と、Ａｃｋトレインの分割のいずれであるかを判定する（ステップＳ７２）。動作モードがＡｃｋトレインの分割である場合、遅延制御部３０は、タイマの設定値を半分にし、変更後のタイマの設定値が閾値（Ｔａｔｏｍｉｎ）未満であるかを判定する（ステップＳ７３、Ｓ７４）。変更後のタイマの設定値が閾値（Ｔａｔｏｍｉｎ）以上の場合、遅延制御部３０は処理を終了する（ステップＳ７４でＮｏ）。変更後のタイマの設定値が閾値（Ｔａｔｏｍｉｎ）未満の場合、遅延制御部３０は、動作モードを通常モードに変更する（ステップＳ７４でＹｅｓ、ステップＳ７５）。一方、動作モードが通常モードの場合、遅延制御部３０は処理を終了する（ステップＳ６２で通常モード）。
【０１２８】
図２２は、受信側の通信装置の処理の例を説明する状態遷移図である。コネクションの確立後、ＲＴＴの値（ｓｒｔｔ）がＲＴＴ判定閾値（Ｔｒｔｔｔｈｒｓｈ）以上であれば、Ａｃｋの分割モードでの処理が行われる。一方、ＲＴＴの値（ｓｒｔｔ）がＲＴＴ判定閾値（Ｔｒｔｔｔｈｒｓｈ）未満であれば、通常モードの処理が行われる。なお、通常モードでは、Ｄｅｌａｙｅｄ  Ａｃｋの処理が行われるが、パケットトレイン中の最初のパケットに対する確認応答を強制的に送信する処理が行われない。
【０１２９】
ＳＴ１０１は、通常モードによる処理が行われている場合に、確認応答パケットの送信を遅延させないパケットに選択されたパケットの処理中の状態を示す。ＳＴ１０２は、分割モードではないＤｅｌａｙｅｄ  Ａｃｋによる処理が行われている場合に、確認応答パケットの送信を遅延させるパケットに選択されたパケットの処理中の状態を示す。ＳＴ１１１は、Ａｃｋトレインの分割モードで、確認応答パケットの送信を遅延させないパケットに選択されたパケットの処理中の状態を示す。ＳＴ１０２は、Ａｃｋトレインの分割モードで、確認応答パケットの送信を遅延させるパケットに選択されたパケットの処理中の状態を示す。
【０１３０】
ＳＴ１１１からＳＴ１１２への遷移の処理は、所定の数の確認応答パケットが遅延されずに送信された場合に行われ、図２０のステップＳ５６の処理に相当する。ＳＴ１１２からＳＴ１１１への遷移の処理は、前回の確認応答パケットを送信してからの経過時間（Ｔｉｎｔｖ）が、閾値Ｔｈ１より長い場合に行われ、図２０のステップＳ５７でＹｅｓとなった場合に相当する。
【０１３１】
ＳＴ１１２からＳＴ１０２への遷移は、タイマの設定値（Ｔａｔｏ）が所定の閾値より小さくなった場合に行われ、図２１のステップＳ７４でＹｅｓ、および、ステップＳ７５の処理に相当する。なお、ＳＴ１０２の状態にあっても、ＲＴＴの長さがＲＴＴ判定閾値（Ｔｒｔｔｔｈｒｓｈ）以上であり、かつ、前回のパケットの受信からＲＴＴの半分以上に亘ってパケットを受信していない場合（Ｔｉｎｔｖ≧１／２ｓｔｔ）、ＳＴ１１２に遷移する。すなわち、ＲＴＴの長さがＲＴＴ判定閾値（Ｔｒｔｔｔｈｒｓｈ）以上であり、かつ、前回のパケットの受信からＲＴＴの半分以上に亘ってパケットを受信していない場合は、Ａｃｋトレインの分割が再開される。
【０１３２】
なお、通常モードでは、所定の数の確認応答パケットが遅延されずに送信された場合、ＳＴ１０１からＳＴ１０２へ遷移することにより、確認応答パケットの送信タイミングの遅延処理が行われる。一方、送信元の装置において、パケットの確認応答の受信タイムアウトが発生すると、ＳＴ１０２からＳＴ１０１へ遷移することにより、確認応答パケットの送信タイミングの遅延処理が終了する。
【０１３３】
図２３は、シミュレーション結果の例を示す図である。図２３のグラフＧ２は、Ａｃｋトレインを分割せずにスロースタートを行った場合についての送信レート（ＴＲ１）、Ａｃｋレート（ＡＲ１）、輻輳ウィンドウ値（ｃｗｎｄ）の変動（ＣＷ１）の様子を示す。なお、グラフＧ２は、各パケットトレインに１６パケット以上のパケットについての確認応答パケットを送信するまでＤｅｌａｙｅｄ  Ａｃｋの状態（図２２のＳＴ１０２）に遷移しない設定でのシミュレーション結果である。なお、送信レート（ＴＲ１）とＡｃｋレート（ＡＲ１）はグラフＧ２の左側の縦軸を用いてプロットされており、輻輳ウィンドウ値（ＣＷ１）はグラフＧ２の右側の縦軸を用いてプロットされている。
【０１３４】
一方、図２３のグラフＧ３は、第３の実施形態を用いてＡｃｋトレインを分割する設定でスロースタートを行った場合についての、送信レート（ＴＲ２）、Ａｃｋレート（ＡＲ２）、輻輳ウィンドウ値の変動（ＣＷ２）の様子を示す。いずれのグラフも、スロースタートの処理を開始してから最初にパケットロスが観測されるまでの値をプロットしている。また、いずれのグラフでも、送信レートとＡｃｋレートについては、ＲＴＴ単位で平滑化した値をプロットしている。なお、送信レート（ＴＲ２）とＡｃｋレート（ＡＲ２）はグラフＧ３の左側の縦軸を用いてプロットされており、輻輳ウィンドウ値（ＣＷ２）はグラフＧ３の右側の縦軸を用いてプロットされている。
【０１３５】
グラフＧ３では、グラフＧ２に比べて、送信レート、Ａｃｋレート、輻輳ウィンドウのいずれの値についても、増加するスピードが早くなっている。さらに、パケットロスが検出されるときの輻輳ウィンドウの値は、Ａｃｋトレインを分割していないとき（Ｇ２）に２０８４であるのに対し、Ａｃｋトレインを分割したとき（Ｇ３）では４９６８になっている。
【０１３６】
このように、Ａｃｋトレインを分割することにより、スロースタート処理中のパケットロスの発生を極力遅らせることができ、その結果、パケットロスが発生するまでに送信レートを引き上げることができる。この結果、第１の実施形態を用いると、送信レートの最適化にかかる時間を短縮化できる。
【０１３７】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【０１３８】
図２４は、タイムスタンプの変形例を示す図である。図２４に示すように、ワード境界を考慮してコーディングが行われる場合は、ビット数を合わせるために、タイムスタンプの先頭にＮＯＰを付すことができる。
【０１３９】
上記の説明では、スリーウェイハンドシェーク中にタイムスタンプを用いてＲＴＴを計算する場合を例として説明したが、ＲＴＴ計測部２４は、データパケット中にタイムスタンプが含まれている場合は、データパケット中のタイムスタンプを用いてＲＴＴを計測しても良い。
【０１４０】
タイムスタンプを使わずにＲＴＴを計算しても良い。この場合は、送信したパケットに対する確認応答が届くまでの時間によってＲＴＴを計算する。受信側の通信装置１０ｂの場合、受信側の通信装置１０ｂが送信側の通信装置１０ａとの間でスリーウェイハンドシェークにおいて通信の許可を示すパケットを通信装置１０ａに送信してから、そのパケットに対する確認応答パケットを受信するまでの時間をＲＴＴとすることができる。
【０１４１】
以上の説明では、遅延期間の初期値をＲＴＴの半分とし、Ａｃｋトレインの分割開始からＲＴＴが経過するごとに遅延期間を半分にする場合を例として説明したが、遅延期間の変更方法は、実装に応じて変更されうる。遅延期間は、ＲＴＴの範囲内で送信側の装置からのパケットの送信のタイミングを平滑化するために使用できるような任意の関数を用いて計算できる。
【０１４２】
上述の第１〜第３の実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
通信先とパケットにより通信を行い、前記パケットの受信に対する確認応答を行う通信装置であって、
第１のパケットと、前記第１のパケットの受信の直前に受信していた第２のパケットとの間の受信間隔が第１の時間を越える場合、前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうち、前記第１のパケットから一定量のパケットに対する確認応答は保留せず、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を第２の時間保留する制御部と、
前記制御部での制御により得られるタイミングで確認応答を前記通信先に送信する送信部
を備えることを特徴とする通信装置。
（付記２）
前記制御部は、前記第１のパケットから前記一定量を超えて受信された第３のパケットに対する第１の確認応答を生成する際に、
前記第１の確認応答とは異なる第２の確認応答が保留されていない場合、前記第１の確認応答を前記第２の時間保留し、
前記第２の確認応答が保留されている場合、前記第１の確認応答を保留しない
ことを特徴とする付記１記載の通信装置。
（付記３）
前記制御部は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間と同じ長さの期間が経過する毎に、前記第２の時間を短くすることを特徴とする付記１または２に記載の通信装置。
（付記４）
前記制御部は、前記第２の時間が閾値よりも短くなると、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を保留する処理を停止することを特徴とする付記３に記載の通信装置。
（付記５）
前記第２の時間は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間よりも短い時間である
ことを特徴とする付記１〜４のいずれか１項に記載の通信装置。
（付記６）
パケットを用いた通信を行うとともに前記パケットの受信に対する確認応答を行う通信装置と、前記通信装置の通信先の間の通信を中継する中継装置であって、
第１の確認応答と、前記第１の確認応答の受信の直前に受信した第２の確認応答との間の受信間隔が第１の時間を越える場合、前記第１の確認応答以降に前記第１の時間を越えない受信間隔で届く確認応答のうち、前記第１の確認応答で受信が通知されるデータから一定量のデータに対する確認応答は保留せず、前記第１の確認応答で受信が通知されるデータから前記一定量を超えた分のデータに対する確認応答を第２の時間保留する制御部と、
受信した確認応答を、前記制御部での制御により得られるタイミングで、前記通信先に送信する送信部
を備えることを特徴とする中継装置。
（付記７）
前記制御部は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間と同じ長さの期間が経過する毎に、前記第２の時間を短くすることを特徴とする付記６に記載の中継装置。
（付記８）
前記制御部は、前記第２の時間が閾値よりも短くなると、前記第１の確認応答で受信が通知されるデータから前記一定量を超えた分のデータに対する確認応答を保留する処理を停止する
ことを特徴とする付記７に記載の中継装置。
（付記９）
前記第２の時間は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間よりも短い時間である
ことを特徴とする付記６〜８のいずれか１項に記載の通信装置。
（付記１０）
パケットを用いた通信を行うとともに前記パケットの受信に対する確認応答を行う通信装置と、前記通信装置の通信先を含むネットワークにおいて、
第１のパケットと、前記第１のパケットの受信の直前に受信していた第２のパケットとの間の受信間隔が第１の時間を越える場合、前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうち、前記第１のパケットから一定量のパケットに対する確認応答は保留せずに前記通信先に送信し、
前記第１のパケット以降に前記第１の時間を越えない受信間隔で届くパケットのうちで、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を第２の時間保留してから前記通信先に送信する
処理を前記通信装置に行わせることを特徴とする通信制御方法。
（付記１１）
前記通信装置は、前記第１のパケットから前記一定量を超えて受信された第３のパケットに対する第１の確認応答を生成する際に、
前記第１の確認応答とは異なる第２の確認応答が保留されていない場合、前記第１の確認応答を前記第２の時間保留し、
前記第２の確認応答が保留されている場合、前記第１の確認応答を保留しない
ことを特徴とする付記１０に記載の通信制御方法。
（付記１２）
前記通信装置は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間と同じ長さの期間が経過する毎に、前記第２の時間を短くする
ことを特徴とする付記１０または１１に記載の通信制御方法。
（付記１３）
前記通信装置は、前記第２の時間が閾値よりも短くなると、前記第１のパケットから前記一定量を超えた分のパケットに対する確認応答を保留する処理を停止する
ことを特徴とする付記１２に記載の通信制御方法。
（付記１４）
前記第２の時間は、前記通信先でのパケットの送信から当該パケットに対する確認応答を前記通信先が受信するまでにかかる時間よりも短い時間である
ことを特徴とする付記１０〜１３のいずれか１項に記載の通信制御方法。
【符号の説明】
【０１４３】
５、１０  通信装置
１１、５１、５４  送受信部
１２、５３、５５  受信部
１３、５２、５６  送信部
２０、７０  制御部
２１  受信データ組立部
２２  受信データバッファ
２３  Ａｃｋ情報解析部
２４、７２  ＲＴＴ計測部
２５  Ａｃｋ生成部
２６  輻輳制御部
２８  再送制御部
３０、７１  遅延制御部
３１  Ａｃｋ保留キュー
３２、７４  コネクション管理テーブル
４０  アプリケーション処理部
４１  送信データバッファ
４２  送信パケット構築部
４３  送信待バッファ
４４  送信キュー
６１、６２  コネクション識別処理部
６３、６４  滞留時間調整キュー
６５、６６  パケットスケジュール部
７３  コネクション管理部
１０１、１２０  プロセッサ
１０２  メモリ
１０３  バスコントローラ
１０４  ストレージ装置
１０５  ストレージＩ／Ｏ
１０６  ディスプレイＩ／Ｏ
１０７  Ｉ／Ｏ
１０８、１２５、１２６  ネットワーク接続装置
１０９、１２４  タイマ
１１０  入力装置
１１１  光学ディスクドライブ
１１２  可搬記憶媒体
１２１  ＲＡＭ
１２２  ＲＯＭ
１２３  保守インタフェース
【図１】
0006409558.tif 000002
【図２】
0006409558.tif 000003
【図３】
0006409558.tif 000004
【図４】
0006409558.tif 000005
【図５】
0006409558.tif 000006
【図６】
0006409558.tif 000007
【図７】
0006409558.tif 000008
【図８Ａ】
0006409558.tif 000009
【図８Ｂ】
0006409558.tif 000010
【図９】
0006409558.tif 000011
【図１０】
0006409558.tif 000012
【図１１】
0006409558.tif 000013
【図１２】
0006409558.tif 000014
【図１３】
0006409558.tif 000015
【図１４】
0006409558.tif 000016
【図１５】
0006409558.tif 000017
【図１６】
0006409558.tif 000018
【図１７】
0006409558.tif 000019
【図１８】
0006409558.tif 000020
【図１９】
0006409558.tif 000021
【図２０】
0006409558.tif 000022
【図２１】
0006409558.tif 000023
【図２２】
0006409558.tif 000024
【図２３】
0006409558.tif 000025
【図２４】
0006409558.tif 000026