(57)【要約】【課題】情報量を増加させることなく、データパケットの不必要な再送を防ぐと共に、通信効率を無駄に下げることなく、データパケットの送信速度を適切に制御する技術を提供する。【解決手段】サーバ装置１０は、データパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットを受信しなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する。データパケットを再送した後に受信された確認応答パケットの種別と該確認応答パケットに内包された情報とに基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する。【選択図】      図１
2004297742.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信手段と、前記送信手段により送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信手段と、
前記送信手段によりデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信手段により受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送手段と、
前記再送手段によりデータパケットが再送された後に、前記受信手段により受信された確認応答パケットの種別と該確認応答パケットに内包された情報とに基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御手段と
を備えることを特徴とする通信装置。
【請求項２】
前記制御手段は、前記再送手段によりデータパケットが再送された後、同一のシーケンス番号が内包された確認応答パケットを前記受信手段により連続して受信した回数が予め定められた回数に達した場合には、欠落しているデータパケットを前記再送手段に再送させ、前記送信手段により送信されたデータパケットに内包されるシーケンス番号のうち最大のシーケンス番号に後続するシーケンス番号を内包した確認応答パケットが前記受信手段により受信されると、前記送信手段に送信させるデータパケットの送信速度を、前記待機時間が経過する直前の送信速度から定められる送信速度に戻す
を備える請求項１記載の通信装置。
【請求項３】
前記制御手段は、前記再送手段によりデータパケットが再送された後、同一のシーケンス番号が内包された確認応答パケットを前記受信手段により連続して受信した回数が予め定められた回数に達し、かつ該確認応答パケットに、前記相手先の装置に到着したデータパケットのシーケンス番号を示す選択的確認応答情報が内包されている場合、欠落しているデータパケットを該選択的確認応答情報により特定して前記再送手段に再送させ、前記送信手段により送信されたデータパケットに内包されるシーケンス番号のうち最大のシーケンス番号に後続するシーケンス番号を内包した確認応答パケットが前記受信手段により受信されると、前記送信手段に送信させるデータパケットの送信速度を、前記待機時間が経過する直前の送信速度から定められる送信速度に戻す
を備える請求項１記載の通信装置。
【請求項４】
前記制御手段は、前記再送手段によりデータパケットが再送された後、前記受信手段により受信された確認応答パケットに内包されたシーケンス番号が、前記再送手段により再送されたデータパケットに内包されたシーケンス番号から予め定められた分だけ後ろのシーケンス番号と一致する場合、前記送信手段に送信させるデータパケットの送信速度を、前記待機時間が経過する直前の送信速度から定められる送信速度に戻す
ことを特徴とする請求項１に記載の通信装置。
【請求項５】
前記制御手段は、前記再送手段によりデータパケットが再送された後、前記受信手段により受信された確認応答パケットに内包されたシーケンス番号が、前記再送手段により再送されたデータパケットに内包されたシーケンス番号から予め定められた分だけ後ろのシーケンス番号より大きく且つ前記送信手段により最後に送信されたデータパケットのシーケンス番号に後続するシーケンス番号より小さい場合、欠落しているデータパケットを前記再送手段に再送させ、前記送信手段により送信されたデータパケットに内包されるシーケンス番号のうち最大のシーケンス番号に後続するシーケンス番号を内包した確認応答パケットが前記受信手段により受信されると、前記送信手段に送信させるデータパケットの送信速度を、前記待機時間が経過する直前の送信速度から定められる送信速度よりも小さくする
ことを特徴とする請求項１に記載の通信装置。
【請求項６】
前記制御手段は、前記再送手段によりデータパケットが再送された後、前記受信手段により受信された確認応答パケットに内包されたシーケンス番号が、前記送信手段により最後に送信されたデータパケットのシーケンス番号に後続するシーケンス番号と一致する場合、前記送信手段に送信させるデータパケットの送信速度を、前記待機時間が経過する直前の送信速度から定められる送信速度よりも小さくする
ことを特徴とする請求項１に記載の通信装置。
【請求項７】
複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信過程と、前記送信過程にて送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信過程と、
前記送信過程にてデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信過程にて受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送過程と、
前記再送過程にてデータパケットが再送された後に、前記受信過程にて受信された確認応答パケットの種別および該確認応答パケットに内包された情報に基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御過程と
を有することを特徴とする通信制御方法。
【請求項８】
コンピュータを、
複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信手段、
前記送信手段により送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信手段、
前記送信手段によりデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信手段により受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送手段、
前記再送手段によりデータパケットが再送された後に、前記受信手段により受信された確認応答パケットの種別および該確認応答パケットに内包された情報に基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御手段
として機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パケット通信網を介して送受信されるパケットの再送制御のための技術に関する。
【０００２】
【従来の技術】
移動通信網の一種として、パケット通信サービスを提供する移動パケット通信網がある。この移動パケット通信網を用いることにより、当該移動パケット通信網を介して、サーバ装置はクライアント装置へデータパケットを届けることができ、また、クライアント装置は当該データパケットに対する確認応答データパケットをサーバ装置へ届けることができる。
ところで、移動パケット通信網とクライアント装置との間の通信区間には無線区間が含まれている。無線区間における通信は電波を用いて行われるから、電波環境が悪化したりすると、移動パケット通信網を介した通信は停止状態となることがある。このような状況下では、サーバ装置がデータパケットを送信しても、このパケットは所定の時間内にクライアント装置へ届かない場合がある。しかし、電波環境が改善したりして移動パケット通信網を介した通信が再開されると、移動パケット通信網内に一時的に保存されていたデータパケットがクライアント装置に届く。
一方、サーバ装置では、送信したデータパケットに対する確認応答パケットを所定の時間内に受信しなかった場合には、パケットロスが発生したと判断され、当該データパケットが再送される。
このような場合、クライアント装置には、移動パケット通信網内に滞留していたデータパケット（以下、オリジナルデータパケットという）と、再送されたデータパケット（以下、再送データパケットという）との両方が届くことになる。クライアント装置はデータパケットを受信したときに当該データパケットに対する確認応答パケットを返送するから、サーバ装置はオリジナルデータパケットに対する確認応答パケットと再送データパケットに対する確認応答パケットを受信することになる。両確認応答パケットは受信タイミングを除いて完全に同一であることから、サーバ装置は、一つ目の確認応答パケットを受信した時点では、当該確認応答パケットがオリジナルデータパケットに対するものなのか又は再送データパケットに対するものなのかを判別することができない。つまり、オリジナルデータパケットがクライアント装置に届いているか否かをサーバ装置は判別することができない。このため、サーバ装置では、再送データパケットに後続するデータパケットが再送される。しかし、実際には、クライアント装置には、上述したようにオリジナルデータパケットは届いているという問題が生じる。
【０００３】
このような問題を解決する技術が非特許文献１、非特許文献２及び非特許文献３に記載されている。非特許文献１には、タイムスタンプオプション（ＲＦＣ  １３２３）を利用することにより、確認応答パケットがオリジナルデータパケットに対するものか又は再送データパケットに対するものかの判別を正確に行うことを可能とさせる技術が記載されている。
【０００４】
非特許文献２には、有線パケット通信網を介するパケット通信において、統計情報を用いて、確認応答パケットがオリジナルデータパケットに対するものか又は再送データパケットに対するものかを推定する技術が記載されている。さらに、この文献では、サーバ装置とクライアント装置との間の通信コネクションが確立されているときにデータパケットを送信してから確認応答パケットが届くまでの時間を実測して得られるラウンドトリップタイムのうち最小のラウンドトリップタイムの１／２を閾値として上記の推定を行うことが提案されている。つまり、再送データパケットを送信してから一つ目の確認応答パケットを受信するまでの経過時間が閾値以上の場合（閾値を超過した場合）には再送データパケットに対する確認応答パケットとみなし、閾値未満の場合（閾値以下の場合）にはオリジナルデータパケットに対する確認応答パケットとみなす。なお、最小のラウンドトリップタイムの１／２を閾値とすることは、以下に列記する事情に基づいて提案されている。
［事情１］統計をとったところ、再送データパケットを送信してから最小のラウンドトリップタイムの１／２が経過するまでの期間、３／４が経過するまでの期間、及び１／１が経過するまでの期間内にオリジナルデータパケットに対する確認応答パケットを受信する確率に大差はないことが分かった。
［事情２］統計をとったところ、再送データパケットを送信してから最小のラウンドトリップタイムの１／２が経過した辺りから再送データパケットに対する確認応答パケットを受信する確率が急激に増加することが分かった。
【０００５】
また、非特許文献３には、タイムアウトの検出によって再送データパケットを送信した後に受信した確認応答パケットに対処する技術が記載されている。この技術における対処方法は、この確認応答パケットを受信すると、再送データパケットを送信する直前に送信したオリジナルデータパケットに後続するデータパケットを２つ送信するというものである。
【０００６】
【非特許文献１】
Ｅｉｆｅｌアルゴリズム（ｄｒａｆｔ−ｉｅｔｆ−ｔｓｖｗｇ−ｔｃｐ−ｅｉｆｅｌ−ａｌｇ−０４．ｔｘｔ）
【非特許文献２】
Ｍａｒｋ  Ａｌｌｍａｎ，Ｖｅｒｎ  Ｐａｘｓｏｎ，”Ｏｎ  Ｅｓｔｉｍａｔｉｎｇ  Ｅｎｄ−Ｔｏ−Ｅｎｄ  Ｎｅｔｗｏｒｋ  Ｐａｔｈ  Ｐｒｏｐｅｒｔｉｅｓ，”ＡＣＭ  ＳＩＧＣＯＭＭ’９９，ｖｏｌ．２９，ｎｏ．４，ｐｐ  ２６３−２７４，Ｏｃｔ．１９９９（２．８節）
【非特許文献３】
Ｆ−ＲＴＯアルゴリズム（ｄｒａｆｔ−ｓａｒｏｌａｈｔｉ−ｔｓｖｗｇ−ｔｃｐ−ｆｒｔｏ−０３．ｔｘｔ）
【０００７】
【発明が解決しようとする課題】
しかしながら、非特許文献１の技術においては、通信環境が良好であっても、サーバ装置においてはオリジナルデータパケットに対してタイムスタンプ情報が付加され、クライアント装置においては確認応答データパケットに対してタイムスタンプ情報が付加される。つまり、どちらのデータパケットについてもその情報量が増加する。情報量が増加すれば、移動パケット通信網において送受信されるデータパケットの総量も増加するため、輻輳などの通信トラブルが発生する頻度も多くなる恐れがある。また、この技術を、通信量に応じて通信料金が変化する従量制課金を前提としている移動パケット通信網を介したパケット通信に適用した場合、上述の問題の発生頻度が十分に高くなければ、通信料の上昇を招いてしまう。もちろん、通信料の上昇は、クライアント装置の使用者やサーバ装置の使用者の望むところではない。
また、当該技術を応用して、データパケットに対して情報を付加するのではなく、通信時に使用されるＴＣＰヘッダ内の予約ビットに情報を設定する方法も考えられる。
【０００８】
また、非特許文献２の技術を、移動通信網を介する移動通信環境のように無線区間でのデータパケットの遅延が非常に大きい通信環境に用いても、最適な判別結果を得ることはできない。
【０００９】
非特許文献３の技術においては、サーバ装置は、再送データパケットを送信した後に受信した確認応答パケットだけでは、送信すべきデータパケットがいずれであるかを判別することができない。そして、この確認応答パケットの受信後に送信したデータパケットに対する確認応答パケットを受信した場合に、判別可能となる。しかし、この場合、当該確認応答パケットが期待される確認応答パケットでなければ、輻輳制御におけるスロースタートと呼ばれるアルゴリズムに従って、データパケットの送信速度、即ち、単位時間当たりのデータパケットの送信量を制御する。なお、期待される確認応答パケットとは、２つ目のデータパケットに後続するデータパケットの送信をサーバ装置に要求するものである。
しかし、タイムアウトが検出された原因が移動パケット通信網を介した通信の一時的な停止にある場合には、送信されたデータパケットはクライアント装置に届かないわけではなく、遅れて届くだけである。このような場合にも、上述のスロースタートに従ってデータパケットの送信速度を下げてしまうことは、通信効率を無駄に下げてしまうことになる。
【００１０】
そこで、本発明は、以上説明した事情に鑑みてなされたものであり、情報量を増加させることなく、データパケットの不必要な再送を防ぐと共に、通信効率を無駄に下げることなく、データパケットの送信速度を適切に制御する技術を提供する。
【００１１】
【課題を解決するための手段】
本発明は、複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信手段と、前記送信手段により送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信手段と、前記送信手段によりデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信手段により受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送手段と、前記再送手段によりデータパケットが再送された後に、前記受信手段により受信された確認応答パケットの種別と該確認応答パケットに内包された情報とに基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御手段とを備えることを特徴とする通信装置を提供する。
【００１２】
また、本発明は、複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信過程と、前記送信過程にて送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信過程と、前記送信過程にてデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信過程にて受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送過程と、前記再送過程にてデータパケットが再送された後に、前記受信過程にて受信された確認応答パケットの種別および該確認応答パケットに内包された情報に基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御過程とを有することを特徴とする通信制御方法を提供する。
【００１３】
また、本発明は、コンピュータを、複数のデータパケットを各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信する送信手段、前記送信手段により送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットを受信する受信手段、前記送信手段によりデータパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが前記受信手段により受信されなかった場合、該データパケットを送信する際の送信速度を予め定められた送信速度に変更するとともに、該データパケットを再送する再送手段、前記再送手段によりデータパケットが再送された後に、前記受信手段により受信された確認応答パケットの種別および該確認応答パケットに内包された情報に基づいて、送信すべきデータパケットを決定し該データパケットを送信する際の送信速度を制御する制御手段として機能させるためのプログラムを提供する。
【００１４】
本発明によれば、複数のデータパケットが各データパケットに内包されたシーケンス番号の順にパケット通信網を介して相手先の装置へ送信され、送信されたデータパケットのうち前記相手先の装置が次に送信を要求しているデータパケットのシーケンス番号を内包した確認応答パケットが受信され、データパケットが送信された時点から予め定められた待機時間が経過するまでに、該データパケットのシーケンス番号よりも後の順番を示すシーケンス番号を内包した確認応答パケットが受信されなかった場合、該データパケットを送信する際の送信速度が予め定められた送信速度に変更されるとともに、該データパケットが再送される。そして、データパケットが再送された後に受信された確認応答パケットの種別と該確認応答パケットに内包された情報とに基づいて、送信すべきデータパケットが決定され該データパケットが送信される際の送信速度が制御される。
【００１５】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を詳細に説明する。なお、実施の形態を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
［第１実施形態］
（構成）
＜通信システム１の構成＞
図１は、この発明の第一実施形態に係る通信システム１の構成を例示するブロック図である。
通信端末４０は、クライアント装置５０と接続され、クライアント装置５０とパケット通信を行う。移動パケット通信網３０は、当該移動パケット通信網３０に収容される通信端末４０に対して、パケット通信サービスを提供する。サーバ装置１０は、インターネット２０、移動パケット通信網３０、通信端末４０を介してクライアント装置５０とパケット通信を行う。なお、本実施形態においては、サーバ装置１０とクライアント装置５０とは、インターネットＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に従ってパケット通信を行うものとする。
【００１６】
＜ＴＣＰに従ったパケット通信について＞
ＴＣＰに従ったパケット通信で取り扱われるデータパケットには、図２に示されるようなデータ構造のヘッダが内包されている。なお、以降、本明細書では、データパケットの送信元をサーバ装置１０、データパケットの送信先をクライアント装置５０として説明を行う。サーバ装置１０から送信されるデータパケットに内包されるヘッダのシーケンス番号には、当該データパケットがデータのどの位置にあたるのかを相対的に示す値が格納される。サーバ装置１０は、複数のデータパケットを各データパケットに内包されたシーケンス番号の順にクライアント装置５０へ送信する。また、クライアント装置５０から送信される確認応答パケットに内包されるヘッダの確認応答番号には、クライアント装置５０が次に受信すべきデータパケットのシーケンス番号の値が格納される。
ＴＣＰに従って行われるパケット通信では、その信頼性を確保するために、サーバ装置１０から送信されたデータパケットがクライアント装置５０へ到達しなかった場合に、そのデータパケットを再送信させるようにしている。なお、以下では、サーバ装置１０から送信されたデータパケットがクライアント装置５０へ到達しないことを「データパケットの欠落」と称する。
【００１７】
サーバ装置１０は、以下に述べる２種類の判断基準でデータパケットの欠落を検出し、欠落したデータパケットを再送信している。第１の判定基準は、データパケットを送信してから所定の時間（以下、「再送タイムアウト時間」という）内に、そのデータパケットを受信したことを示す確認応答パケットがクライアント装置５０から送信されてきたか否かである。この再送タイムアウト時間内に確認応答が送信されてこなかった場合には、サーバ装置１０はデータパケットの欠落が発生したものとみなして、そのデータパケットを再送信する。以下では、第１の判定基準によるデータパケットの再送信を「タイムアウトによる再送信」という。第２の判定基準は、クライアント装置５０から重複確認応答パケットが所定の回数（例えば、３回）送信されてきたか否かである。重複確認応答パケットとは、受信したデータパケットのシーケンス番号と、その１つ前に受信したデータパケットのシーケンス番号とが連続していなかった場合に、受信すべきデータパケットのシーケンス番号をサーバ装置１０へ通知するためにクライアント装置５０が送信する確認応答パケットである。サーバ装置１０は、この重複確認応答パケットを所定の回数受信した場合には、再送タイムアウト時間の経過前であっても、データパケットの欠落が発生したものとみなして、即座に、その重複確認応答パケットで示されるデータパケットを再送信する。このように、第２の判定基準によるデータパケットの再送信は、再送タイムアウト時間の経過を待たずに行われるため、「高速再送信」と呼ばれている。
【００１８】
また、ＴＣＰに従って行われる通信では、データパケットの欠落が発生した場合に、欠落したデータパケットの再送信を行うことに加え、その原因を特定してそれに応じて制御をしている。一般に、上述したデータパケットの欠落は、ネットワークが輻輳状態であることや、クライアント装置５０の処理能力を超えた数のデータパケットが送信されたことによって引き起こされる。サーバ装置１０は、前者に対処するために輻輳制御と呼ばれる動作を行うとともに、後者に対処するためにフロー制御と呼ばれる動作を行う。以下、サーバ装置１０が行う輻輳制御およびフロー制御について説明する。
【００１９】
サーバ装置１０は、ｓｎｄ＿ｍａｘ、ｓｎｄ＿ｎｘｔ、ｓｎｄ＿ｕｎａ、ｓｎｄ＿ｗｎｄ、ｓｎｄ＿ｃｗｎｄ、ｓｓｔｒｅｓｈの６種類のパラメータ変数を記憶しており、これら６種類のパラメータ変数に基づいて算出される個数のデータパケットをクライアント装置５０へ送信することにより、上述した輻輳制御およびフロー制御を実現している。図３は、これら６種類のパラメータ変数の関係を説明するための図である。ｓｎｄ＿ｍａｘには、送信済みのデータパケットに内包されているシーケンス番号のうちで最大のシーケンス番号（図３では、シーケンス番号‘３０００’）が格納されている。ｓｎｄ＿ｎｘｔには、サーバ装置１０が次に送信するデータパケットのシーケンス番号（図３では、シーケンス番号‘３５００’）が格納されている。ｓｎｄ＿ｕｎａには、サーバ装置１０が送信したデータパケットのうち、対応する確認応答パケットを受信していないデータパケットに内包されているシーケンス番号のうちで最小のシーケンス番号（図３では、シーケンス番号‘２０００”）が格納されている。ｓｎｄ＿ｃｗｎｄには、サーバ装置１０が先に送信したデータパケットに対して確認応答パケットを受信することなく、送信可能なデータパケットの個数を示す値がバイト単位で格納されている。ただし、実際にサーバ装置１０が１往復時間内に送信可能なデータパケットは、ｓｎｄ＿ｕｎａからｓｎｄ＿ｕｎａ＋ｍｉｎ（ｓｎｄ＿ｗｎｄ，ｓｎｄ＿ｃｗｎｄ）で示される範囲にあるデータパケットである。ここで、ｓｎｄ＿ｗｎｄには、クライアント装置５０から通知された広告ウィンドウサイズが格納されている。この広告ウィンドウサイズとは、クライアント装置５０の受信バッファの空き容量を示す値である。また、１往復時間とは、サーバ装置１０がデータパケットを送信してから、そのデータパケットに対する確認応答パケットを受信するまでに要する時間である。以下では、サーバ装置１０が１往復時間内に送信可能なデータパケットの数を「送信ウィンドウサイズ」という。このように、送信ウィンドウサイズはｓｎｄ＿ｗｎｄを超えることはない。このため、クライアント装置５０のバッファの空き容量を超える数のデータパケットが１往復時間内に送信されることはない。サーバ装置１０は、クライアント装置５０から通知された広告ウィンドウサイズをパラメータ変数ｓｎｄ＿ｗｎｄへ格納することにより、フロー制御を実現する。
【００２０】
また、サーバ装置１０は、上述したｓｎｄ＿ｃｗｎｄの値を適切に更新することによって輻輳制御を実現する。このｓｎｄ＿ｃｗｎｄには、初期値として最大データパケットサイズが格納されている。なお、最大データパケットサイズ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ：以下、「ＭＳＳ」という）とは、１つのデータパケットの大きさの最大値を示す値であり、デフォルトでは５１２バイト（すなわち、１ＭＳＳ＝５１２バイト）である。サーバ装置１０は規定の輻輳制御アルゴリズムに従ってｓｎｄ＿ｃｗｎｄに格納されている値を更新する。具体的には、サーバ装置１０は、ｓｎｄ＿ｃｗｎｄの値が所定の閾値（例えば、６５５３５バイト）に達するまで、送信したデータパケットに対する確認応答パケットを受信する度に、例えば、その値を‘１ＭＳＳ’、‘２ＭＳＳ’、‘３ＭＳＳ’、‘４ＭＳＳ’と線形的に増加させる。なお、‘４ＭＳＳ’は‘１ＭＳＳ’の４倍の値を示している。そして、サーバ装置１０は、ｓｎｄ＿ｃｗｎｄの値が所定の閾値に達すると、以降、データパケットの欠落を検出するまで、その値を線形的に増加させる。この所定の閾値が格納されるパラメータ変数が上述のｓｓｔｒｅｓｈである。また、ｓｎｄ＿ｃｗｎｄの値がｓｓｔｒｅｓｈの値に達するまでの制御を、スロースタート制御といい、ｓｎｄ＿ｃｗｎｄの値がｓｓｔｒｅｓｈの値に達した以降の制御を輻輳回避制御という。
【００２１】
そして、サーバ装置１０は、重複確認応答パケットによって又はタイムアウトの検出によってデータパケットの欠落を検出した場合には、スロースタート制御のアルゴリズムに従って、ｓｓｔｒｅｓｈの値を、タイムアウトを検出した時点で送信ウィンドウサイズｓｎｄ＿ｃｗｎｄに格納されていた値の２分の１の値で更新するとともに、ｓｎｄ＿ｃｗｎｄに‘１ＭＳＳ’を格納する。その後の動作は、データパケットの欠落を検出したのは重複確認応答パケットによってであるか又はタイムアウトの検出によってであるかによって異なる。
タイムアウトの検出によってデータパケットの欠落を検出した場合には、サーバ装置１０は、ｓｎｄ＿ｎｘｔをｓｎｄ＿ｕｎａに書き換えて、ｓｎｄ＿ｎｘｔで示されるデータパケットから再送信を開始するとともに、再送信したデータパケットに対して確認応答を受信する毎にｓｎｄ＿ｃｗｎｄに格納されている値を、上述したスロースタート制御のアルゴリズムに従って増加させる。
【００２２】
重複確認応答パケットによってデータパケットの欠落を検出した場合には、サーバ装置１０は、前述した高速再送信を行い、欠落したデータパケットの再送信を行う。更に、サーバ装置１０が高速回復アルゴリズムに従う場合、まず、データパケットの欠落を検出した時点でのｓｎｄ＿ｃｗｎｄの値の２分の１に更新した後、クライアント装置５０から確認応答パケットを１つ受信する度に、ｓｎｄ＿ｃｗｎｄの値を１つずつ増加させていく。そして、このｓｎｄ＿ｃｗｎｄの値を用いて、以前に送信済みのデータパケットのうち、最大のシーケンス番号を有するデータパケットに後続するデータパケットの送信を開始する。
【００２３】
以上に説明したデータパケットを再送する機能、輻輳制御およびフロー制御を行う機能は、ＴＣＰにしたがってデータパケットを送信するサーバ装置１０に従来から備わる機能である。サーバ装置１０に備わる本実施形態に係る機能については後述する。
クライアント装置５０は、ＴＣＰに従ってパケット通信を行う機能を備えたコンピュータ装置である。
【００２４】
＜サーバ装置１０の構成＞
次に、サーバ装置１０の構成について説明する。サーバ装置１０の構成は一般的なコンピュータと同様であるから、本発明に係る構成のみについて図４を参照しながら説明する。
ＣＰＵ１００は、記憶部１０５に記憶されるプログラムを実行することにより、サーバ装置１０の装置各部の制御を行う。また、ＣＰＵ１００は、タイマ１００ａを備える。タイマ１００ａは、ＣＰＵ１００によりセットされた一定時間が経過すると、トリガ信号を出力する。本実施形態においては、タイマ１００ａでは、上述の再送タイムアウト時間が計測される。
記憶部１０５は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｓｅｓｓ  Ｍｅｍｏｒｙ）１０２と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０３と、ＨＤ（Ｈａｒｄ  Ｄｉｓｋ）１０４から構成される。
【００２５】
ＲＯＭ１０３には、ＣＰＵ１００によって実行されることによりサーバ装置１０にデータパケット送信制御機能を実現させるための送信制御プログラムが記憶されている。本実施形態に係るデータパケット送信制御機能とは、以下の機能のことである。
サーバ装置１０は、上述のタイムアウトを検出しデータパケットを再送した後、当該データパケットのシーケンス番号を示す確認応答番号が内包された確認応答パケットを受信した場合、当該確認応答パケットは再送したデータパケット（再送データパケット）に対するものではなく、再送データパケットの再送前に送信したオリジナルデータパケットに対する確認応答パケットであると判別する。なぜなら、再送データパケットに対する確認応答パケットであれば、当該確認応答パケットに内包される確認応答番号には、当該再送データパケットのシーケンス番号よりも大きな値が格納されているからである。
この判別の結果、サーバ装置１０は、クライアント装置１０ではサーバ装置１０から送信されたオリジナルデータパケットのうちいくつかは受信され、いくつかは受信されていないことを判別する。更に、当該確認応答パケットに係る重複確認応答パケットを受信すると、上述の高速再送信を行い、欠落したデータパケットを再送する。その後、欠落したデータパケットが全て受信されたことを示す確認応答パケットを受信すると、送信済のデータパケットのうち最大のシーケンス番号を有するデータパケットに後続するデータパケットの送信を再開することを決定する。ここで後続のデータパケットを送信する際に用いるｓｎｄ＿ｃｗｎｄの値として、タイムアウトを検出する直前に格納されていた値を用いる。これによって、後続のデータパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度に設定する。
【００２６】
（動作）
次に本実施形態の動作について説明する。
図５は、サーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の一例を示すシーケンスチャートである。また、図６は、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作を示すフローチャートである。
【００２７】
まず、図５において、サーバ装置１０から、シーケンス番号‘５００’、‘１０００’、‘１５００’，‘２０００’を有する各データパケット（オリジナルデータパケットＳ１〜Ｓ４）のがクライアント装置５０へ送信される。
しかし、例えば通信端末４０と移動パケット通信網３０との間の無線通信環境が悪化し、オリジナルデータパケットＳ１が欠落したとする。そして、オリジナルデータパケットＳ２〜Ｓ４の送信が一時的に中断されたとする。その後、無線通信環境が良好となり、通信が再開されると、オリジナルデータパケットＳ２〜Ｓ４はクライアント装置５０に送信されるが、クライアント装置５０では、これらのオリジナルデータパケットＳ２〜Ｓ４は順次遅延して受信されることになる。
【００２８】
この場合、まず、オリジナルデータパケットＳ２を受信したクライアント装置５０では、オリジナルデータパケットＳ２に対する確認応答パケットＲ２がサーバ装置１０へ送信される。なお、この確認応答パケットＲ２に内包される確認応答番号には、シーケンス番号‘５００’が格納される。これは、クライアント装置５０がオリジナルデータパケットＳ１の送信を要求していることを示している。
そして、オリジナルデータパケットＳ２に続いてオリジナルデータパケットＳ３〜Ｓ４を順次受信したクライアント装置５０では、各オリジナルデータパケットＳ３〜Ｓ４に対する確認応答パケットＲ３〜Ｒ４が順次サーバ装置１０へ送信される。これらの確認応答パケットＲ３〜Ｒ４の有する各確認応答番号にも同様に、オリジナルデータパケットＳ１のシーケンス番号‘５００’が格納される。以上の結果、サーバ装置１０ではこれらの確認応答パケットＲ２〜Ｒ４が順次遅延して受信されることになる。
【００２９】
次に、以上説明したところまでのサーバ装置１０の動作について図６を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、オリジナルデータパケットＳ２〜Ｓ４の送信を行う。このとき、ＣＰＵ１００は、図７に示されるように、上述の各パラメータ変数を管理している。ここでは、ｓｅｎｄ＿ｕｎａには‘５００’、ｓｎｄ＿ｍａｘには‘２０００’、ｓｎｄ＿ｎｘｔには‘２５００’、ｓｎｄ＿ｃｗｎｄには‘４ＭＳＳ’ｓｎｄ＿ｗｎｄには‘１００ＭＳＳ’、ｓｓｔｒｅｓｈには‘６５５３５バイト’、がそれぞれ格納されている。なお、以降では、本実施形態に係るパラメータ変数であるｓｎｄ＿ｃｗｎｄ、ｓｓｔｒｅｓｈのみについて説明し、その他のパラメータ変数の説明を省略する。
その後、ＣＰＵ１００は、オリジナルデータパケットＳ１に対してクライアント装置５０から送信される確認応答パケットの受信を待機する。このため、ＣＰＵ１００は、タイマ１００ａに再送タイムアウト時間をセットし、タイマ１００ａに再送タイムアウト時間の計測をさせる。
そして、上述のオリジナルデータパケットＳ１のパケットロス及びオリジナルデータパケットＳ３〜Ｓ４の受信遅延があったため、クライアント装置５０から送信された確認応答パケットＲ２を受信する前に、再送タイムアウト時間が経過したとする。即ち、ＣＰＵ１００は、タイムアウトを検出したとする（ステップＣ１０）。このとき、ＣＰＵ１００は、オリジナルデータパケットＳ１〜Ｓ４が全て欠落したと判定する。そして、ＣＰＵ１００はタイマ１００ａの値をリセットするとともに、上述の輻輳制御アルゴリズムに従って、ｓｓｔｒｅｓｈの値及びｓｎｄ ｃｗｎｄの値を変更する。具体的には、ｓｓｔｒｅｓｈの値を、ｓｎｄ＿ｃｗｎｄの値‘４ＭＳＳ’の２分の１の値‘２ＭＳＳ’に書き換え、ｓｎｄ＿ｃｗｎｄの値を‘４ＭＳＳ’から‘１ＭＳＳ’に書き換える。ここで、ＣＰＵ１００は、書き換える前のｓｎｄ＿ｃｗｎｄの値‘４ＭＳＳ’を一時的にＲＡＭ１０２に記憶させる。
次いで、シーケンス番号‘５００’を有するデータパケットをクライアント装置５０へ再送する（ステップＣ１１）。
その後、ＣＰＵ１００は、上述の確認応答パケットＲ２を受信すると（ステップＣ１２）、以下のことを判別する。確認応答番号‘５００’を有する確認応答パケットは、シーケンス番号‘５００’を有するデータパケットを送信する以前に受信されているため、この確認応答パケットＲ２は重複確認応答パケットであると判別する。そして、この重複確認応答パケットＲ２が再送データパケットを送信する前に送信したオリジナルデータパケットに対する確認応答パケットであると判別する。そして、オリジナルデータパケットＳ１〜Ｓ４が全て欠落したわけではないことを判別する。更に、確認応答パケットＲ３〜Ｒ４を連続して受信すると、ＣＰＵ１００は、上述の高速再送信を行うこととなる。そこで、まず、ＣＰＵ１００は、シーケンス番号‘５００’を有するデータパケットをクライアント装置５０へ再送する（ステップＣ１３）。
【００３０】
図５においては、サーバ装置１０では、再送データパケットＳ′１が送信された後、確認応答パケットＲ２〜Ｒ４が受信され、再送データパケットＳ″１が送信される。一方、クライアント装置５０では、再送データパケットＳ′１が受信されると、次に受信すべきデータパケットのシーケンス番号‘２５００’を示す確認応答番号が内包される確認応答パケットＲ′１が送信される。
【００３１】
ここで、図６に戻って、ＣＰＵ１００は、確認応答パケットＲ′１を受信すると（ステップＣ１４）、シーケンス番号‘５００’，‘１０００’、‘１５００’、‘２０００’を有する各データパケットが全てクライアント装置５０に受信されたことを判別する。そして、本実施形態においては、ＣＰＵ１００は、ｓｎｄ＿ｃｗｎｄの値を、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値に書き換える（ステップＣ１５）。具体的には、ｓｎｄ＿ｃｗｎｄの値を‘１ＭＳＳ’から‘４ＭＳＳ’に書き換える。その後、新たにｓｎｄ＿ｃｗｎｄの値を算出するとともに、ｓｓｔｒｅｓｈの値を更新する。具体的には、ｓｎｄ＿ｃｗｎｄの値‘４ＭＳＳ’を２分の１の値‘２ＭＳＳ’に書き換える。更に、この値を、ｓｓｔｒｅｓｈを格納する。即ち、ｓｓｔｒｅｓｈの値を‘２ＭＳＳ’に書き換える。このとき次に送信すべきデータパケットの数は２つとなる。そして、ＣＰＵ１００は、シーケンス番号‘２５００’，‘３０００’を有する２つの各データパケットをクライアント装置５０へ送信する。
図５においては、サーバ装置１０からオリジナルデータパケットＳ５〜Ｓ６がクライアント装置５０へ送信される。
以上のようにして、サーバ装置１０からクライアント装置５０へデータパケットが送信される。
【００３２】
本実施形態においては、クライアント装置５０に受信されていないデータパケットのみ再送されるようにしているため、データパケットの不必要な送信を防ぐことが可能となる。
また、従来の技術においては、タイムアウト検出後に重複確認応答パケットが受信された場合データパケットの再送が完了した後に、ｓｎｄ＿ｃｗｎｄの値が、タイムアウトを検出する直前に格納されていた値に書き換えらることはない。これによって、送信速度が過度に抑制されてしまう。しかし、本実施形態によれば、ｓｎｄ＿ｃｗｎｄの値を書き換えることにより、このような事態を回避することができる。
【００３３】
［第２実施形態］
次に、ＳＡＣＫ情報を用いたパケット通信が行われる場合について説明する。以下、上記第一実施形態と共通する部分については、その説明を省略したり、同一の符号を使用して説明したりする。
なお、ＳＡＣＫ情報とは、データパケットの欠落が発生した後にクライアント装置５０が受信したデータパケットをサーバ装置１０へ通知するための情報である。この情報は、図２に示されるデータパケットに内包されるヘッダのオプション部分に格納される。具体的には、例えば、‘ＳＡＣＫ＝１５００＿２９９９’という情報が格納されていれば、データパケットのうち、データにおける相対的な位置が‘１５００〜２９９９’であるデータパケットが受信されたことを意味する。
【００３４】
本実施形態においては、サーバ装置１０は、タイムアウトを検出しデータパケットを再送した後、当該データパケットの有するシーケンス番号を示す確認応答番号が内包され且つＳＡＣＫ情報が内包された重複確認応答パケットを受信した場合、上述の第１実施形態と同様に、上述の高速再送信を行い、欠落したデータパケットを再送する。その後、欠落したデータパケットが全て受信されたことを示す確認応答パケットを受信すると、次に送信すべきデータパケットを送信する際に用いるｓｎｄ＿ｃｗｎｄの値として、タイムアウトを検出する直前に格納されていた値を用いる。これによって、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度に設定する。
サーバ装置１０のＲＯＭ１０３には、以上説明した機能をサーバ装置１０に実現させるための送信制御プログラムが記憶されている。
【００３５】
図８は、本実施形態において、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の動作を示すシーケンスチャートである。図９は、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作の流れを示すフローチャートである。なお、上述の第１実施形態と共通するステップについては同一の符号を使用し、その詳細な説明を省略する。
【００３６】
図７において、サーバ装置１０から、シーケンス番号‘５００’、‘１０００’、‘１５００’，‘２０００’、‘２５００’、‘３０００’を有する各データパケット（オリジナルデータパケットＳ１１〜Ｓ１６）がクライアント装置５０へ送信される。そして、オリジナルデータパケットＳ１１、Ｓ１２が欠落し、オリジナルデータパケットＳ１３〜Ｓ１６が順次遅延してクライアント装置５０に受信されるとする。
【００３７】
この場合、まず、オリジナルデータパケットＳ１３を受信したクライアント装置５０では、オリジナルデータパケットＳ１３に対する確認応答パケットＲ１３がサーバ装置１０へ送信される。なお、この確認応答パケットＲ１３の有する確認応答番号には、オリジナルデータパケットＳ１１のシーケンス番号と同じ値‘５００’が格納される。更に、確認応答パケットＲ１３には、オリジナルデータパケットＳ１３が受信されたことを示すＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿１９９９’が内包される。そして、オリジナルデータパケットＳ１３に続いてオリジナルデータパケットＳ１４〜Ｓ１６を順次受信したクライアント装置５０では、各オリジナルデータパケットＳ１４〜Ｓ１６に対する確認応答パケットＲ１４〜Ｒ１６が順次サーバ装置１０へ送信される。これらの確認応答パケットＲ１４〜Ｒ１６の有する各確認応答番号にも同様に、オリジナルデータパケットＳ１１のシーケンス番号と同じ値‘５００’が格納される。また、確認応答パケットＲ１４にはＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿２４９９’、確認応答パケットＲ１５にはＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿２９９９’、確認応答パケットＲ１６にはＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿３４９９’、がそれぞれ内包される。
以上の結果、これらの確認応答パケットＲ１３〜Ｒ１６は、サーバ装置１０では順次遅延して受信されるとする。
【００３８】
次に、サーバ装置１０の動作について図９を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、オリジナルデータパケットＳ１１〜Ｓ１６の送信を行う。このとき、ｓｎｄ＿ｃｗｎｄには‘６ＭＳＳ’、ｓｓｔｒｅｓｈには‘６５５３５バイト’、がそれぞれ格納されている。
そして、上述のオリジナルデータパケットＳ１〜Ｓ２のパケットロス及びオリジナルデータパケットＳ１４〜Ｓ１６の受信遅延があったため、クライアント装置５０から送信された確認応答パケットＲ１３を受信する前に、再送タイムアウト時間が経過したとする。即ち、ＣＰＵ１００は、タイムアウトを検出したとする（ステップＣ２０）。この場合には、上述の第１実施形態と同様に、シーケンス番号‘５００’を有するデータパケット（再送データパケットＳ′１１）を再送する（ステップＣ２１）。更にその後、ＣＰＵ１００は、上述の確認応答パケットＲ１３を受信すると、ここで、この確認応答パケットＲ１３が再送データパケットＳ′１１を送信する前に送信したオリジナルデータパケットに対する確認応答パケットであると判別する。そして、シーケンス番号‘５００’を有するデータパケットに対する重複確認応答パケット（確認応答パケットＲ１３〜Ｒ１５）を受信したとする（ステップＣ２２）。本実施形態では、この確認応答パケットにはＳＡＣＫ情報が内包されているため、サーバ装置１０のＣＰＵ１００は、この情報に基づいて、再送すべきデータパケットがいずれであるのかを判別する（ステップＣ２４）。このＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿１９９９’によって、シーケンス番号‘５００’、‘１０００’を有するオリジナルデータパケットＳ１１〜Ｓ１２を再送すべきであると判別される。そして、上述の高速再送信を行い、まず、シーケンス番号‘５００’を有するデータパケット（図８における再送データパケットＳ″１１）をクライアント装置５０へ再送する。その後、クライアント装置５０から送信された確認応答パケットＲ１６を受信すると、ＣＰＵ１００は、次に、再送すべきデータパケットのシーケンス番号‘１０００’を有するデータパケット（図８における再送データパケットＳ′１２）をクライアント装置５０へ再送する（ステップＣ２４）。
【００３９】
一方、クライアント装置５０では、再送データパケットＳ′１２が受信されると、欠落したデータパケットが全て受信されたこととなるため、確認応答番号‘３５００’を有する確認応答パケット（図８における確認応答パケットＲ′１６）が送信される。この確認応答番号の値は、受信されたデータパケットのうち最大のシーケンス番号‘３０００’を有するデータパケットＳ１６に後続する１番目のデータパケットの有するシーケンス番号‘３５００’を示している。なお、欠落したデータパケットが全て受信されたため、確認応答パケットＲ′１６にはＳＡＣＫ情報は内包されない。
【００４０】
サーバ装置１０のＣＰＵ１００は、確認応答パケットＲ′１６を受信すると（ステップＣ２５）、上述の第１実施形態と同様に、ｓｎｄ＿ｃｗｎｄの値をタイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶された値に書き換える（ステップＣ２６）。その後、新たにｓｎｄ＿ｃｗｎｄの値を算出するとともに、ｓｓｔｒｅｓｈの値を更新する。具体的には、ｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’を２分の１の値‘３ＭＳＳ’に書き換える。更に、この値を、ｓｓｔｒｅｓｈを格納する。即ち、ｓｓｔｒｅｓｈの値を‘３ＭＳＳ’に書き換える。このとき次に送信すべきデータパケットの数は３つとなる。そして、ＣＰＵ１００は、そして、シーケンス番号‘３５００’，‘４０００’、‘４５００’を有する３つの各データパケット（図８におけるＳ１７〜Ｓ１９）をクライアント装置５０へ送信する。
【００４１】
［第３実施形態］
次に、ＳＡＣＫ情報を用いたパケット通信を行う場合の他の例について説明する。
本実施形態において、上述の第２実施形態と異なる点は、上述した重複確認応答パケットによる高速再送信を行わない点である。具体的には、サーバ装置１０は、タイムアウトを検出しデータパケットを再送した後、当該データパケットの有するシーケンス番号を示す確認応答番号が内包され且つＳＡＣＫ情報が内包された確認応答パケットを１つ受信した段階で、上述の第１実施形態と同様に、当該確認応答パケットが再送データパケットの再送前に送信されたオリジナルデータパケットに対するであると判別する。即ち、サーバ装置１０は、クライアント装置１０ではサーバ装置１０から送信されたオリジナルデータパケットのうちいくつかは受信され、いくつかは受信されていないことを判別する。そして、タイムアウト検出後に再送したデータパケットのシーケンス番号と、受信された確認応答パケットに内包されるＳＡＣＫ情報とを用いて、次に送信すべきデータパケットを決定する。そして、欠落したデータパケットを全て再送した後にデータパケットを送信する際、このとき用いるｓｎｄ＿ｃｗｎｄの値として、タイムアウトを検出する直前に格納されていた値を用いる。これによって、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度に設定する。
【００４２】
図１０は、本実施形態において、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の動作を示すシーケンスチャートである。また、図１１は、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作を示すフローチャートである。
【００４３】
まず、図１０において、サーバ装置１０から、シーケンス番号‘５００’、‘１０００’、‘１５００’，‘２０００’、‘２５００’、‘３０００’を有する各データパケット（オリジナルデータパケットＳ２１〜Ｓ２６）がクライアント装置５０へ送信される。ここで、無線通信環境の悪化により、オリジナルデータパケットＳ２１、Ｓ２２が欠落し、オリジナルデータパケットＳ２３〜Ｓ２６がクライアント装置５０に遅延して受信されるとする。
【００４４】
この場合も、上述の第２実施形態と同様に、ＳＡＣＫ情報が内包される確認応答パケットＲ２３〜Ｒ２６がクライアント装置５０から送信される。
しかし、これらの確認応答パケットＲ２３〜Ｒ２６は、クライアント装置５０におけるオリジナルデータパケットＳ２３〜Ｓ２６の受信遅延により、サーバ装置１０にて順次遅延して受信されることになる。
すると、図１１に示されるように、サーバ装置１０のＣＰＵ１００は、確認応答パケットの受信に対するタイムアウトを検出し（ステップＣ３０）、シーケンス番号‘５００’を有するデータパケット（図１０における再送データパケットＳ′２１）を再送する（ステップＣ３１）。なお、このときのｓｓｔｒｅｓｈの値とｓｎｄ＿ｃｗｎｄの値とは、上述の第２実施形態と同様、それぞれ‘３ＭＳＳ’、‘１ＭＳＳ’である。そして、タイムアウト検出前のｓｓｔｒｅｓｈの値‘６５５３５バイト’とｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’とは一時的にＲＡＭ１０２に記憶される。
【００４５】
続いて、確認応答番号‘５００’を有する確認応答パケットＲ２３を受信すると（ステップＣ３２）、ＣＰＵ１００は以下のような動作を行う。
まず、ＣＰＵ１００は、確認応答パケットＲ２３に内包されるＳＡＣＫ情報を解析する（ステップＣ３３）。このＳＡＣＫ情報には、‘ＳＡＣＫ＝１５００＿１９９９’が示されているから、ＣＰＵ１００は、この確認応答パケットＲ２３はオリジナルデータパケットＳ２３に対するものであり、オリジナルデータパケットＳ２３が受信されたことを判別する。更に、‘１５００’以下のシーケンス番号を有するオリジナルデータパケットＳ２１〜Ｓ２２が受信されておらず、これらのデータパケットが欠落したことを判別する。しかし、オリジナルデータパケットＳ２１については、既に再送している（再送データパケットＳ′２１）ため、次に、オリジナルデータパケットＳ２２を再送することを決定する。しかし、送信済のオリジナルデータパケットＳ２１〜Ｓ２６の全てについて受信されたことはまだ確認できていないため、次に、送信すべきデータパケットを送信する。具体的には、ＣＰＵ１００は、シーケンス番号‘１０００’を有するデータパケット（図１０における再送データパケットＳ′２２）を再送する。
【００４６】
続いて、確認応答番号‘５００’とＳＡＣＫ情報‘ＳＡＣＫ＝１５００＿２４９９’とが内包される確認応答パケットＲ２４を受信した場合も、確認応答パケットＲ２３を受信した場合と同様に、当該確認応答パケットＲ２４を受信する直前に送信したデータパケットに後続するデータパケットを１つ送信する。このようにして、送信済のオリジナルデータパケットＳ２１〜Ｓ２６のうち最大のシーケンス番号‘３０００’を有するデータパケットに後続するデータパケットに内包されるべきシーケンス番号‘３５００’を示す確認応答番号が内包される確認応答パケットを受信するまで、他の確認応答パケットを１つ受信する度、当該確認応答パケットを受信する直前に送信したデータパケットを１つ送信する。
そして、ＣＰＵ１００は、確認応答番号‘３５００’が内包される確認応答パケット（図１０における確認応答パケットＲ′２６）を受信すると、ここで、ｓｓｔｒｅｓｈの値とｓｎｄ＿ｃｗｎｄの値とをそれぞれ、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶された値に書き換える。更に、新たにｓｎｄ＿ｃｗｎｄの値を算出するとともに、ｓｓｔｒｅｓｈの値を更新する。ここでは、例えば、ｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’を２分の１の値‘３ＭＳＳ’に書き換える。更に、この値を、ｓｓｔｒｅｓｈを格納する。即ち、ｓｓｔｒｅｓｈの値を‘３ＭＳＳ’に書き換える。
以上のようにして、ＣＰＵ１００は、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度に設定する。
【００４７】
［第４実施形態］
次に、遅延確認応答アルゴリズムに従ってパケット通信が行われる場合について説明する。
なお遅延確認応答アルゴリズムに従ったパケット通信では、データパケットを受信したクライアント装置５０は、確認応答パケットの送信を遅延させる。本実施形態においては、クライアント装置５０は、データパケットを２つ受信するまで確認応答パケットを送信しない。そして、データパケットを２つ受信すると、これらのデータパケットに対する確認応答パケットを１つにまとめて送信する。即ち、２つ目のデータパケットに後続するデータパケットの有するシーケンス番号の値を確認応答番号に格納し、これを内包する確認応答パケットを送信する。以上のようにして、クライアント装置５０は、データパケットを２つ受信する毎に、確認応答パケットを送信する。但し、データパケットを１つしか受信していないが所定の時間が経過してしまった場合には、クライアント装置５０は、受信された１つのデータパケットに対する確認応答パケットを送信する。
サーバ装置１０は、このような遅延確認応答パケットを受信すると、このパケットに示される確認応答番号の値から以下のことを判別する。当該値と同じ値をシーケンス番号に有するデータパケットの１つ前及び２つ前の順番のデータパケットがクライアント装置５０に受信されたことを判別する。
【００４８】
本実施形態におけるサーバ装置１０の送信制御機能は、以下の通りである。サーバ装置１０は、タイムアウトを検出してデータパケットを再送した後、確認応答パケットを受信すると、まず、この確認応答パケットに内包される確認応答番号の値（Ａ）が、再送されたデータパケットに後続する２番目のデータパケットに内包されるシーケンス番号の値（Ｂ）と同じであるか又はそれよりも大きいかを判別する。更に、（Ａ）が（Ｂ）よりも大きい場合、更に（Ａ）が送信済のデータパケットのうち最大のシーケンス番号を有するデータパケットに後続する１番目のデータパケットの有するシーケンス番号の値（Ｃ）と同じであるか否かを判定する。そして、（Ａ）と（Ｂ）とが同じである場合には、データパケットの欠落はなく、通信が一時的に停止したなどの比較的軽微な通信トラブルによってタイムアウトが検出されたと見なす。そして、ｓｎｄ＿ｗｎｄの値を、タイムアウトを検出する直前に格納されていた値に書き換える。これによって、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度に設定する。
しかし、（Ａ）が（Ｂ）より大きく且つ（Ｃ）以下である場合には、データパケットや確認応答パケットの欠落、データパケットの到着順の逆転などの比較的重大な通信トラブルが発生したと見なす。そして、欠落したデータパケットを再送し、その後、送信済のデータパケットのうち最大のシーケンス番号を有するデータパケットに後続する１番目のデータパケットの有するシーケンス番号を示す確認応答パケットを受信すると、このシーケンス番号を示すデータパケットを送信する。そして、このとき用いるｓｎｄ＿ｗｎｄの値として、タイムアウトを検出する直前に格納されていた値よりも小さい値を用いる。ここでは、２分の１の値を用いる。これによって、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度よりもに小さい速度にする。
また、（Ａ）が（Ｂ）より大きく且つ（Ｃ）と同じである場合には、データパケットや確認応答パケットの欠落、データパケットの到着順の逆転などの比較的重大な通信トラブルが発生したと見なす。そして、このシーケンス番号を示すデータパケットを送信する。そして、このとき用いるｓｎｄ＿ｗｎｄの値として、タイムアウトを検出する直前に格納されていた値よりも小さい値を用いる。ここでは、２分の１の値を用いる。これによって、データパケットの送信速度を、タイムアウトを検出する直前の送信速度から定められる送信速度よりも小さい速度にする。
以上のようにして、サーバ装置１０は、データパケットの送信速度を制御する。
【００４９】
（動作例１）
図１２は、本実施形態において、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。また、図１３は、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作を示すフローチャートである。
まず、図１２において、サーバ装置１０から、シーケンス番号‘５００’、‘１０００’、‘１５００’，‘２０００’、‘２５００’、‘３０００’を有する各データパケット（オリジナルデータパケットＳ４１〜Ｓ４６）がクライアント装置５０へ送信される。ここで、無線通信環境の悪化により、オリジナルデータパケットＳ４１〜Ｓ４２がクライアント装置５０に遅延して受信されたとする。その後、オリジナルデータパケットＳ４３〜Ｓ４６は正常にクライアント装置５０に受信されたとする。
クライアント装置５０では、まず、オリジナルデータパケットＳ４１〜Ｓ４２が受信されると、これらのデータパケットに対する確認応答パケットＲ４２が送信される。この確認応答パケットＲ４２に内包される確認応答番号には、オリジナルデータパケットＳ４２に後続するデータパケットの有するシーケンス番号‘１５００’が格納されている。以上の結果、この確認応答パケットＲ４２は、サーバ装置１０にて遅延して受信されるとする。しかし、この確認応答パケットＲ４２がサーバ装置１０に受信される前に、サーバ装置１０にてタイムアウトが検出されたとする。
【００５０】
次に、以上説明したところまでのサーバ装置１０の動作について、図１３を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、オリジナルデータパケットＳ４１〜Ｓ４６の送信を行う。このとき、ＣＰＵ１００が管理しているパラメータ変数のうち、ｓｎｄ＿ｃｗｎｄには‘６ＭＳＳ’、ｓｓｔｒｅｓｈには‘６５５３５バイト’がそれぞれ格納されている。
そして、ステップＣ４１において、ＣＰＵ１００は、確認応答パケットＲ４２を受信する前に、タイムアウトを検出したとする。このとき、ＣＰＵ１００は、オリジナルデータパケットＳ１が欠落したと判定する。そして、ＣＰＵ１００はタイマ１００ａの値をリセットするとともに、上述の輻輳制御アルゴリズムに従って、ｓｓｔｒｅｓｈの値及びｓｎｄ＿ｃｗｎｄの値を変更する。即ち、ｓｓｔｒｅｓｈの値を、ｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’の２分の１の値‘３ＭＳＳ’に書き換え、ｓｎｄ＿ｃｗｎｄの値を‘６ＭＳＳ’から‘１ＭＳＳ’に書き換える。ここで、ＣＰＵ１００は、書き換える前のｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’及びｓｓｔｒｅｓｈの値‘６５５３５バイト’を一時的にＲＡＭ１０２に記憶させる。
次いで、シーケンス番号５００を有するデータパケット（図１１における再送データパケットＳ′４１）をクライアント装置５０へ再送する（ステップＣ４２）。
【００５１】
その後、ＣＰＵ１００は、上述の確認応答パケットＲ４２を受信すると（ステップＣ４３）、この確認応答パケットＲ３２に内包される確認応答番号の値と、再送データパケットＳ′４１（再送されたオリジナルデータパケットＳ４１）に内包されるシーケンス番号の値とを用いて以下の判定を行う（ステップＣ４４）。
確認応答パケットＲ４２に内包される確認応答番号の値（Ａ）が、再送されたオリジナルデータパケットＳ４１に後続する２番目のデータパケットに内包されるシーケンス番号の値（Ｂ）と同じであるか又は（Ｂ）よりも大きいかを判定する。ここでは、（Ａ）は‘１５００’であり、（Ｂ）は‘１５００’であり、（Ｃ）は‘３５００’である。即ち、（Ａ）と（Ｂ）とが同じである。
この場合、この確認応答パケットＲ４２は、オリジナルデータパケットＳ４１とこれに後続するオリジナルデータパケットＳ４２とに対応する遅延確認応答パケットであることを判別する。即ち、オリジナルデータパケットＳ４１〜Ｓ４２はクライアント装置５０に受信されており、データパケットの欠落はなかったと判別する。そして、データパケットの送信速度を下げる必要がないと判定する。このため、ステップＣ４５において、ＣＰＵ１００は、ｓｎｄ＿ｃｗｎｄの値を、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値に書き換える。具体的には、ｓｎｄ＿ｃｗｎｄの値を‘１ＭＳＳ’から‘６ＭＳＳ’に書き換える。更に、ＣＰＵ１００は、ｓｓｔｒｅｓｈの値を、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値に書き換える。具体的には、ｓｓｔｒｅｓｈの値を‘３ＭＳＳ’から‘６５５３５バイト’に書き換える。更に、輻輳制御アルゴリズムに従って、ｓｎｄ＿ｃｗｎｄの値を‘６ＭＳＳ’を線形的に増加させ‘７ＭＳＳ’に書き換える。これにより、本実施形態におけるデータパケットの送信速度を、タイムアウト検出直前の送信速度から定められる送信速度に設定する。なお、このとき、送信済の７つのデータパケットのうち３つのデータパケットに対する確認応答パケット（確認応答パケットＲ４２）が受信されたことになる。即ち、残りの４つのデータパケットに対する確認応答パケットはまだ受信されておらず、従って、次に送信可能なデータパケットの個数は３つになる。
そして、ＣＰＵ１００は、送信済のデータパケットＳ３７に後続する３つのデータパケットをクライアント装置５０へ送信する。具体的には、シーケンス番号‘３５００’，‘４０００’、‘４５００’を有する各データパケットを送信する。図１１においては、サーバ装置１０からオリジナルデータデータパケットＳ４７〜Ｓ４８がクライアント装置５０へ送信される。
【００５２】
なお、従来であれば、ｓｎｄ＿ｃｗｎｄの値及びｓｓｔｒｅｓｈの値は、タイムアウトを検出する直前に格納されていた値に書き換えられない。このため、ｓｎｄ＿ｃｗｎｄの値は、‘１ＭＳＳ’のままであり、ｓｓｔｒｅｓｈの値は‘３ＭＳＳ’のままである。このため、データパケットの欠落がなかったことが判別されても、次に送信されるデータパケットの数は、１つに制限されてしまう。これでは、送信速度が過度に抑制されてしまう。しかし、本実施形態によれば、ｓｎｄ＿ｃｗｎｄの値及びｓｓｔｒｅｓｈの値を書き換えることにより、このような事態を回避することができる。
【００５３】
（動作例２）
次に、本実施形態において、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の他の例を示すシーケンスチャートである。図１４は、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。また、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作を示すフローチャートは、図１３に示される。なお、上述の動作例１及び各実施形態と共通する部分については、その説明を省略する。
【００５４】
まず、図１４において、サーバ装置１０から、シーケンス番号‘５００’、‘１０００’、‘１５００’，‘２０００’、‘２５００’、‘３０００’を有する各データパケット（オリジナルデータパケットＳ５１〜Ｓ５６）がクライアント装置５０へ送信される。しかし、無線通信環境の悪化により、オリジナルデータパケットＳ５１及びＳ５５が欠落したとする。つまり、オリジナルデータパケットＳ５２〜Ｓ５４，Ｓ５６のみクライアント装置５０に送信されるとする。
【００５５】
この場合、クライアント装置５０では、まず、オリジナルデータパケットＳ５２が受信されるが、オリジナルデータパケットＳ５１の欠落があったため、２つ目のデータパケットが受信される前に、所定の時間が経過したとする。すると、クライアント装置５０では、オリジナルデータパケットＳ５２のみに対する確認応答パケットＲ５２が送信される。この確認応答パケットＲ５２に内包される確認応答番号には、オリジナルデータパケットＳ５２に後続するデータパケットの有するシーケンス番号‘１５００’が格納されている。
その後、クライアント装置５０では、オリジナルデータパケットＳ５３〜Ｓ５４が受信されると、確認応答番号‘２５００’を有する確認応答パケットＲ５４が送信される。その後、オリジナルデータパケットＳ５５が欠落したため、所定の時間内にはオリジナルデータパケットＳ５６のみ受信される。このとき、クライアント装置５０では、オリジナルデータパケットＳ５５が受信されないため、このデータパケットの送信を要求する旨を示す確認応答パケットが送信される。つまり、このオリジナルデータパケットＳ５５のシーケンス番号‘２５００’を示す確認応答番号が内包される確認応答パケットＲ５６が送信される。
しかし、これらの確認応答パケットＲ５２、Ｒ５４、Ｒ５６は、無線通信環境の悪化により、欠落したとする。
【００５６】
以上の状況におけるサーバ装置１０の動作について図１３を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、ステップＣ４１において、確認応答パケットの受信に対するタイムアウトを検出したとする。そして、ｓｎｄ＿ｃｗｎｄの値を‘１ＭＳＳ’に書き換え、シーケンス番号‘５００’を有するデータパケット（再送データパケットＳ′５１）を再送する（ステップＣ４２）。なお、ここでも、ＣＰＵ１００は、書き換える前のｓｎｄ＿ｃｗｎｄの値‘６ＭＳＳ’及びｓｓｔｒｅｓｈの値‘６５５３５バイト’を一時的にＲＡＭ１０２に記憶させる。
【００５７】
一方、図１４に戻って、クライアント装置５０では、再送データパケットＳ′５１が受信されると、これに対する確認応答パケットとして、まだ受信されていないシーケンス番号‘２５００’を有するデータパケットの送信を要求する確認応答パケットが送信される。つまり、確認応答番号‘２５００’を有する確認応答番号Ｒ′５６が送信される。
この確認応答パケットＲ′５６がサーバ装置１０で受信されると、サーバ装置１０では図１３におけるステップＣ４４の判定が行われる。
【００５８】
ステップＣ４４では、サーバ装置１０のＣＰＵ１００は、確認応答パケットＲ′５６に内包される確認応答番号の値‘２５００’（Ａ）が、再送されたオリジナルデータパケットＳ５１（再送データパケットＳ′５１）に後続する２つ目のデータパケットに内包されるシーケンス番号の値‘１５００’（Ｂ）よりも大きいことを判別する。このように判別すると、次に、ステップＣ４６の判定を行う。ステップＣ４６では、（Ａ）が、オリジナルデータパケットＳ４１〜Ｓ４６のうち最大のシーケンス番号‘３０００’を有するデータパケットに後続する１番目のデータパケットの有するシーケンス番号の値‘３５００’（Ｃ）と同じであるか否かを判別する。ここでは、（Ａ）は、（Ｃ）と同じではないことが判別される。
そして、比較的重大な通信トラブルがあったと見なし、送信速度を下げる必要があると判定する。そして、ＣＰＵ１００は、送信済のオリジナルデータパケットＳ５１〜Ｓ５６のうち最大のシーケンス番号‘３０００’を有するオリジナルデータパケットＳ５６に後続するデータパケットを送信する際に、ｓｎｄ＿ｃｗｎｄの値を、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値より小さい値に書き換えることを決定する（ステップＣ４７）。
【００５９】
そして、この確認応答パケットＲ′５６によって示される確認応答番号‘２５００’がシーケンス番号に格納されるデータパケット（図１４における再送データパケットＳ′５５）を再送する（ステップＣ４８）。
【００６０】
一方、図１４に戻って、クライアント装置５０では、再送データパケットＳ′５５が受信されると、これに対する確認応答パケットとして、次に受信すべきデータパケットのシーケンス番号‘３５００’を有するデータパケットの送信を要求する確認応答パケットが送信される。つまり、確認応答番号‘３５００’を有する確認応答番号Ｒ′５５が送信される。
【００６１】
この確認応答パケットＲ′５５がサーバ装置１０で受信されると、サーバ装置１０では以下の動作が行われる。
図１３において、サーバ装置１０のＣＰＵ１００は、確認応答番号Ｒ′５５によって示される確認応答番号‘３５００’が、送信済のオリジナルデータパケットＳ５１〜Ｓ５６のうち最大のシーケンス番号‘３０００’を有するオリジナルデータパケットＳ５６に後続するデータパケットであることを判別する。即ち、ＣＰＵ１００が次に送信すべきデータパケットは、シーケンス番号‘３５００’を有するデータパケットであることを判別する。そして、ここで、ｓｎｄ＿ｃｗｎｄの値を、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値よりも小さい値に書き換える。ここでは、２分の１の値に書き換える。具体的には、ｓｎｄ＿ｃｗｎｄの値を‘１ＭＳＳ’から、‘６ＭＳＳ’の２分の１の値‘３ＭＳＳ’に書き換える。また、ＣＰＵ１００は、ｓｓｔｒｅｓｈの値を、‘３ＭＳＳ’から、‘６５５３５バイト’の２分の１の値‘３２７６７バイト’に書き換える。
そして、ＣＰＵ１００は、送信済のオリジナルデータパケットＳ５１〜Ｓ５６のうち最大のシーケンス番号‘３０００’を有するオリジナルデータパケットＳ５６に後続する３つのデータパケットをクライアント装置５０へ送信する。具体的には、シーケンス番号‘３５００’，‘４０００’、‘４５００’を有する３つの各データパケットを送信する。図１４においては、サーバ装置１０からオリジナルデータパケットＳ５７〜Ｓ５９がクライアント装置５０へ送信される。
【００６２】
以上のようにして、比較的重大な通信トラブルが発生したと見なされた場合には、ｓｎｄ＿ｃｗｎｄの値及びｓｓｔｒｅｓｈの値がそれぞれ、タイムアウトを検出する直前に格納されていた値より小さい値に書き換えられることで、送信速度が適切に制限される。
【００６３】
（動作例３）
次に、本実施形態において、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合パケット通信が行われる場合の他の例を示すシーケンスチャートである。図１４は、サーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。また、サーバ装置１０の本実施形態に係るパケット送信動作及び受信動作を示すフローチャートは、図１２に示される。なお、上述の動作例１及び各実施形態と共通する部分については、その説明を省略する。
【００６４】
本例が動作例２と異なる点は、以下の点である。サーバ装置１０で、タイムアウトが検出され、シーケンス番号‘５００’を有するデータパケットＳ′６１が送信された後、クライアント装置５０から受信される確認応答パケットＲ′６６に内包される確認応答番号の値が異なる。本例においては、確認応答パケットＲ′６６に内包される確認応答番号の値は、‘３５００’である。これは、送信済のオリジナルデータパケットＳ６１〜Ｓ６６のうち最大のシーケンス番号‘３０００’を有するデータパケットＳ６６に後続する１番目のデータパケットの有するシーケンス番号‘３５００’と同じである。従って、ステップＣ４４及びＣ４６における判別の結果、この場合にも、上述の（動作例２）と同様に、比較的重大な通信トラブルが発生している恐れがあるため、送信速度を下げる必要があることが判別される。
【００６５】
しかし、本例においては、サーバ装置１０のＣＰＵ１００は、データパケットを再送せず、データパケットＳ６６に後続するシーケンス番号‘３５００’を有するデータパケットを送信することを決定する。そして、ここで、ｓｎｄ＿ｃｗｎｄの値及びｓｓｔｒｅｓｈの値をそれぞれ、タイムアウトを検出する直前に格納されていた値、即ち、ＲＡＭ１０２に記憶させた値より小さい値に書き換える。ここでは、２分の１の値に書き換える。具体的には、ｓｎｄ＿ｃｗｎｄの値を‘１ＭＳＳ’から、‘６ＭＳＳ’の２分の１の値‘３ＭＳＳ’に書き換える。また、ＣＰＵ１００は、ｓｓｔｒｅｓｈの値を、‘３ＭＳＳ’から、‘６５５３５バイト’の２分の１の値‘３２７６７バイト’に書き換える。そして、シーケンス番号‘３５００’，‘４０００’、‘４５００’を有する３つの各データパケット（図１５におけるオリジナルデータパケットＳ６７〜Ｓ６９）を送信する。
【００６６】
以上説明した各実施形態においては、データパケット及び確認応答パケットに、例えばタイムスタンプオプション情報などを付加してパケットの情報量を増加させる必要がない。また、サーバ装置１０及びクライアント装置５０に対する大幅な設計変更を必要としない。このため、クライアント装置５０として、既存のパーソナルコンピュータや、インターネットに接続可能な携帯電話機などの情報処理装置を使用することが可能であり、ユーザの利便性を高めることができる。
【００６７】
［変形例］
以上、本発明の実施形態について説明したが、本発明はその主要な特徴から逸脱することなく他の様々な形態で実施することが可能である。なお、変形例としては、例えば、以下のようなものが考えられる。
【００６８】
上述の各実施形態においては、ＴＣＰに従ってパケット通信を行うようにしたが、本発明は、ＴＣＰ以外のパケット通信プロトコルにも適用可能である。
【００６９】
なお、上述の実施形態においては、クライアント装置５０は通信端末４０を介してサーバ装置１０とパケット通信を行った。しかし、クライアント装置５０が無線通信機能を備え、通信端末４０を介することなく、移動パケット通信網４０、インターネット２０を介してサーバ装置１０とパケット通信を行う構成であっても良い。
【００７０】
上述の各実施形態において、サーバ装置１０は、高速再送信を行った後、高速回復アルゴリズムに従って、タイムアウト検出前に送信済みのデータパケットのうち、最大のシーケンス番号を有するデータパケットに後続するデータパケットの送信を開始するようにしても良い。このような構成においても、タイムアウト検出前に送信済みのデータパケットのうち、最大のシーケンス番号を有するデータパケットに後続するデータパケットのシーケンス番号が内包される確認応答パケットを受信したときに、ｓｎｄ＿ｃｗｎｄの値、ｓｓｔｒｅｓｈの値をタイムアウト検出直前の値に戻せば良い。
【００７１】
【発明の効果】
本発明によれば、サーバ装置及びクライアント装置に対する大幅な設計変更を必要とせず、データパケットの不必要な再送を防ぐと共に、通信効率を無駄に下げることなく、データパケットの送信速度を適切に制御する。
【図面の簡単な説明】
【図１】本発明の第１実施形態に係る通信システム１の構成を示すブロック図である。
【図２】同実施形態に係るデータパケットに付加されるヘッダのデータ構成を示す図である。
【図３】ＴＣＰにおける送信ウィンドウを説明するための図である。
【図４】本発明の第１実施形態に係るサーバ装置１０の構成を示すブロック図である。
【図５】同実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。
【図６】同実施形態に係るサーバ装置１０のパケット送信及び受信動作を示すフローチャートである。
【図７】同実施形態に係る送信ウィンドウを説明するための図である。
【図８】本発明の第２実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。
【図９】同実施形態に係るサーバ装置１０のパケット送信及び受信動作を示すフローチャートである。
【図１０】本発明の第３実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。
【図１１】同実施形態に係るサーバ装置１０のパケット送信及び受信動作を示すフローチャートである。
【図１２】本発明の第４実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の一例を示すシーケンスチャートである。
【図１３】同実施形態に係るサーバ装置１０のパケット送信及び受信動作を示すフローチャートである。
【図１４】同実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の他の例を示すシーケンスチャートである。
【図１５】同実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信が行われる場合の他の例を示すシーケンスチャートである。
【符号の説明】
１・・・通信システム、１０・・・サーバ装置、１００・・・ＣＰＵ、１００ａ・・・タイマ、１００ｂ・・・タイマ、１０１・・・通信部、１０２・・・ＲＡＭ、１０３・・・ＲＯＭ、１０４・・・ＨＤ、１０５・・・記憶部、１１１・・・バス、２０・・・インターネット、３０・・・移動パケット通信網、４０・・・通信端末、５０・・・クライアント装置。
【図１】
2004297742.tif 000003
【図２】
2004297742.tif 000004
【図３】
2004297742.tif 000005
【図４】
2004297742.tif 000006
【図５】
2004297742.tif 000007
【図６】
2004297742.tif 000008
【図７】
2004297742.tif 000009
【図８】
2004297742.tif 000010
【図９】
2004297742.tif 000011
【図１０】
2004297742.tif 000012
【図１１】
2004297742.tif 000013
【図１２】
2004297742.tif 000014
【図１３】
2004297742.tif 000015
【図１４】
2004297742.tif 000016
【図１５】
2004297742.tif 000017