(57)【要約】【課題】受信側装置の受信可能な性能に合わせた送信レートで送信することを可能とすることによって、スループットの向上を図った通信装置を提供することを目的とする。【解決手段】本発明の通信装置は、データを送信する相手通信装置の性能を推定し、相手通信装置の性能に合わせた送信レートでデータを送信する通信装置であって、相手通信装置の確認応答パケットの到着時間、確認応答パケットに含まれる受信可能データ量より相手通信装置の性能を推定する性能推定部を備えることを特徴とする。【選択図】図６
2008053888.tif 000002
【特許請求の範囲】
【請求項１】
データの送信に対して相手端末が確認応答パケットを返送する通信プロトコルを用いる通信を行う通信装置であって、確認応答パケットに含まれる情報を用いて送信レートを制御する通信装置であって、
確認応答パケットに含まれる受信可能なデータ容量を基に相手端末の性能を推定する性能推定部を具備し、
前記性能推定部によって推定した相手端末の性能に合わせた送信レートで相手端末にデータを送信する送信レート制御部を具備する
ことを特徴とする通信装置。
【請求項２】
前記性能推定部は、
相手端末が通信装置から受信したデータの処理が完了し受信可能なデータ容量が確保できたことを通知する第二確認応答パケットが通信装置に到着する時間および第二の確認応答パケットに含まれる受信可能なデータ容量と、第二の確認応答パケットの直前に受信した相手端末からの第一の確認応答パケットの受信可能な容量と到着時間の差分を基に相手端末の受信性能を推定する
ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記性能推定部は、
前記第一の確認応答パケットのデータ容量が０の場合には、第二の確認応答パケットの受信可能なデータ容量と、第一の確認応答パケットおよび第二の確認応答パケットの到着時間の差分から相手端末の性能を推定する
ことを特徴とする請求項２記載の通信装置。
【請求項４】
前記性能推定部は、
相手端末からの確認応答パケットが順次到着する到着時間の間隔と受信可能なデータ容量の変動から相手端末の受信性能を推定する
ことを特徴とする請求項１記載の通信装置。
【請求項５】
前記送信レート制御部は、
確認応答パケットが送信した回数の２回に１回である場合は、前記性能推定部が推定した相手端末の性能にしたがって所定時間の間隔をあけて２パケット連続送信を繰り返すレート制御を行なう
ことを特徴とする請求項１記載の通信装置。
【請求項６】
前記送信レート制御部は、
性能推定部が性能推定し送信レートが決定した場合に確認応答パケットが到着せず、相手端末が通知する確認応答の受信可能なデータ容量を越える場合であっても決定した送信レートに従ってデータを順次送信する
ことを特徴とする請求項１記載の通信装置。
【請求項７】
データ管理部をさらに具備し、
前記データ管理部は、確認応答パケットが再送を要求するパケットであった場合に、再送要求に該当するデータを再送し、さらに該当したデータに受信可能データ量を追加したデータから順次送信を行なう
ことを特徴とする請求項６記載の通信装置。
【請求項８】
前記データ管理部は、確認応答パケットが再送を要求するパケットであった場合に、前記送信レート制御部に送信レートを落とすように通知する
ことを特徴とする請求項６記載の通信装置。
【請求項９】
前記データ管理部は、確認応答パケットの到着時刻遅延や再送を要求するパケットから連続でのパケットロスを検出した場合、ロスしたパケットから順次送信する
ことを特徴とする請求項６記載の通信装置。
【請求項１０】
ネットワークを介してデータを相手端末と送受信する通信装置であって、相手端末は通信装置に対して、受信したデータを確認するための確認応答パケットを返送し、相手端末からの確認応答パケットに含まれる受信可能なデータ容量および次に要求するデータの情報に応じて、相手端末にデータを順次送信する通信方法であって、
確認応答パケットに含まれる受信可能なデータ容量を基に相手端末の性能を推定する性能推定ステップと、
前記性能推定ステップによって推定した相手端末の性能に合わせた送信レートで相手端末にデータを送信する送信レート制御ステップと、
を含むことを特徴とする通信方法。
【請求項１１】
ネットワークを介してデータを相手端末と送受信する通信装置であって、相手端末は通信装置に対して、受信したデータを確認するための確認応答パケットを返送し、相手端末からの確認応答パケットに含まれる受信可能なデータ容量および次に要求するデータの情報に応じて、相手端末にデータを順次送信する通信プログラムであって、
確認応答パケットに含まれる受信可能なデータ容量を基に相手端末の性能を推定する性能推定ステップと、
前記性能推定ステップによって推定した相手端末の性能に合わせた送信レートで相手端末にデータを送信する送信レート制御ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１２】
ネットワークを介してデータを相手端末と送受信する通信装置であって、相手端末は通信装置に対して、受信したデータを確認するための確認応答パケットを返送し、相手端末からの確認応答パケットに含まれる受信可能なデータ容量および次に要求するデータの情報に応じて、相手端末にデータを順次送信する集積回路であって、
確認応答パケットに含まれる受信可能なデータ容量を基に相手端末の性能を推定する性能推定手段と、
前記性能推定手段によって推定した相手端末の性能に合わせた送信レートで相手端末にデータを送信する送信レート制御手段と、
を具備することを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して、ＴＣＰ／ＩＰプロトコルを用いて通信を行なう通信装置に関する。
【背景技術】
【０００２】
通信プロトコルとしてＴＣＰ／ＩＰプロトコルが広く用いられている。ＴＣＰ／ＩＰプロトコルを用いた通信では、多くの場合、通信装置において階層的に処理が行なわれる。非特許文献１では、通信処理における階層モデル（ＯＳＩ参照モデル）として、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、アプリケーション層の７階層が定義されている。ＴＣＰ／ＩＰがよく用いられているＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などでは、物理層、および、データリンク層として、Ｅｔｈｅｒｎｅｔ（登録商標）が多く用いられている。データリンク層をＭＡＣ層と呼ぶこともある。ＴＣＰ／ＩＰでは、ネットワーク層としてＩＰ、トランスポート層としてＴＣＰを用いる。また、多くの場合、セッション層は、ソケットＡＰＩ呼ばれるＡＰＩとして定義できる。
【０００３】
ＭＡＣ層において用いられる電文形式をＭＡＣフレームと呼ぶ。また、ＩＰにおいて用いられる電文形式をＩＰパケットと呼ぶ。さらに、ＴＣＰにおいて用いられる電文形式をＴＣＰパケットと呼ぶ。送信時において、ＴＣＰパケットは一つのＩＰパケットに格納される。ＩＰパケットは、必要に応じて一つ、あるいは複数のＭＡＣフレームに分割されて格納される。受信時において、一つ、あるいは複数のＭＡＣフレームからＩＰパケットが抽出され、ＩＰパケットからＴＣＰパケットが抽出される。なお、ここでは、各層において、他のプロトコル、例えば、トランスポート層においてＵＤＰを使用する通信が混在した場合などは省略する。
【０００４】
ＴＣＰは、通信装置間において、ＴＣＰパケットが何らかの影響で正常に送達できなかった場合でも、再送機能により、確実なデータの転送を実現するプロトコルである。また、ＴＣＰは、通信装置間のネットワークにおいて、無駄なトラヒックの増大を抑制するためのウィンドウ制御と呼ばれるフロー制御機能を持つ。
【０００５】
＜ＴＣＰの動作概要＞
図１は、ネットワーク３を介して接続された２つの通信装置１、通信装置２の間において、一方の通信装置１から他方の通信装置２へデータを転送する例を示した図である。以降の説明では、通信装置１はデータを送信する装置であり、通信装置２は、通信装置１が送信したデータを受信する装置とする。
【０００６】
通信装置１から通信装置２へデータを転送する場合、データに転送のための情報を付加したパケットと呼ばれるものを使用する。この１つのパケットに格納できるデータには最大量（最大セグメントサイズ。以降、ＭＳＳ）があり、ＭＳＳは、ＴＣＰ通信の最初の通信路（コネクション）確立時に決定され、より具体的には、通信装置１と通信装置２がお互いに自身のＭＳＳをＴＣＰパケットに乗せて通知し、通信装置１が小さい方のＭＳＳに決定する。ＴＣＰコネクション確立後、通信装置１から通信装置２へ実際にデータを転送できる状態となるが、転送するデータがＭＳＳを超える場合などにおいては、複数のパケットに分割して格納し、通信装置１から通信装置２に送られる。このパケットには、格納したデータを識別するための情報であるシーケンスナンバー（以下、Ｓｅｑ）、ＴＣＰのデータ長（以下、ＬＥＮ）、および、次に受信すべきデータのシーケンス番号を示す確認応答番号（以下、Ｎｕｍ）などが含まれる。
【０００７】
通信装置２はパケットを受信した場合、所定のタイミングにより、パケットを受信したことを示すＡＣＫ（ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ：確認応答パケット。以下、単にＡＣＫ）を通信装置２が全て受け取ったか否かを通信装置１が確認することを可能としている。通信装置１が送信したパケットが、何らかの影響で通信装置２が正常に受信できず（以下、パケットが消失したと表現する）、その結果、通信装置１が送信したパケットに対する通信装置２からのＡＣＫを所定の条件で受信しなかった場合、通信装置１は、該当するパケットを再送する。これにより、確実に全てのデータを転送することを可能としている。ＡＣＫは、受信したパケットを識別できる情報を含んでいる。この情報は、受信したパケットのＳｅｑを元に算出される。通信装置２は、主として送信側装置からパケットを受け取った時に、それまで順序どおり受信したパケットの次のパケット、すなわち、受信を期待するパケットを識別できる情報を含んだＡＣＫを送信側装置へ送信する。あるパケットが消失した（あるいはなんらかの原因で通信装置２への到達が遅れた）後、この消失したパケットが再送などにより通信装置２に受信される前に、通信装置２が新たな別のパケットを受信した場合、通信装置２は、先に送信したＡｃｋと同じパケットを識別できる情報を含んだＡｃｋを送信することとなる。このＡｃｋをＤｕｐＡｃｋ（Ｄｕｐｌｉｃａｔｅ  Ａｃｋｎｏｌｅｄｇｅｍｅｎｔ：即時確認応答。以下、単にＤｕｐＡｃｋ）と呼ぶ。通信装置１は、通信装置２から送られるＤｕｐＡｃｋを連続で３つ受け取ることにより、ＤｕｐＡｃｋに含まれる情報に該当するパケットを再送する。
【０００８】
また、ＡＣＫを全てのパケットを受信する度に送信するのは、効率的でないため、遅延確認応答（Ｄｅｌａｙｅｄ  ＡＣＫ）を呼ばれる方法が用いられることが一般的である（例えば、非特許文献１に記載）。多くの場合、遅延確認応答は、２つのＴＣＰパケットを受信したらＡＣＫを送信し、あるいは、１つのＴＣＰパケットを受信してから所定の時間経過しても次のＴＣＰパケットを受信しなかった場合に送信する。
【０００９】
さらにＴＣＰのウィンドウ制御について説明を行なう。ＴＣＰでは、ウィンドウ（ＴＣＰ  Ｗｉｎｄｏｗ）という概念を取り入れることにより、通信装置１から送信されるＴＣＰパケットのデータ量を制御し、通信装置２によって受信できないために無駄となるパケットがネットワークに流れ、ネットワークの通信許容量が低下することを防ぐことを可能としている。具体的には、通信装置２（データを受信する装置）は、ＡＣＫの１つのパラメータとして、ＡＣＫを送信する時点にて、受信可能なデータ量を受信可能なＴＣＰ  Ｗｉｎｄｏｗサイズ（以下Ｗｉｎ）として通信装置１（データを送信する装置）に通知する。このＡＣＫを受けた通信装置１は、新たなＡＣＫを受けるまでに追加して送信可能なデータ量を、受け取ったＡＣＫに含まれるＷｉｎが上限であると認識し、それ以上のデータ送信を新たなＡＣＫ受信まで行なわない。なお、非特許文献２では、「ＡＣＫは、正しく受け取ったセグメントとさらに受入れ可能なシーケンス番号の範囲を示す。」と記載されている。
【００１０】
ＴＣＰのウィンドウ制御の概要について、図２の通信シーケンスを用いて説明する。
【００１１】
ここでは、説明を簡略化するために１パケット内に格納されるデータ長（以下、ＬＥＮ）を１ＫＢにし、ＳｅｑやＷｉｎの単位や値も、これに合わせている。ただし、データを受信する通信装置２からのＡＣＫに含まれるＳｅｑは、常に１であるため省略する。これらの実際の値は、通信装置や通信装置間の伝送路の特性に依存し、ＴＣＰの接続時において決定されるが、この説明は省略する。また、図２は通信装置１と通信装置２とのＴＣＰ接続時のコネクション確立後、通信装置１および通信装置２の通信処理の途中であり、通信装置２が通知するＡＣＫのＷｉｎ（Ｗｉｎ＝４）が少ないのは説明をわかりやすくするための例としての設定である。通常のＰＣ（ＣＰＵ  ２．５ＧＨｚ搭載）などは、Ｗｉｎ＝６４ＫＢなどに設定されていることが多い。図２の例において、通信装置１のＷｉｎ状態を図の左側に示す（Ｗｉｎｄｏｗの状態：Ｗ１１、Ｗ１２、Ｗ１３）。Ｗｉｎｄｏｗの状態Ｗ１１、Ｗ１２、Ｗ１３内の数値は、Ｓｅｑを示しており、通信装置２に送達確認を行なっていないため、通信装置１で該当するＳｅｑの送信データの領域を、未到達であった場合の再送に備えて、通信装置１のメモリ内に確保していることを示している。例えば、Ｗ１２は、通信装置１がＰ２２のＡＣＫを受信した場合のＷｉｎｄｏｗ状態であり、Ｐ２２のＡＣＫに含まれるパラメータ（Ｎｕｍ＝３、Ｗｉｎ＝４）より、Ｎｕｍ＝３よりＳｅｑが２までは送達確認ができたため、Ｓｅｑが２までの送信データ用のデータを保持する必要がなくなったため領域を開放し、Ｓｅｑが３から始まるデータを、Ｗｉｎ＝４より４ＫＢ分Ｓｅｑが３から６までの送信データ用に領域を確保していることを示している。
【００１２】
（１）Ｗｉｎの通知
図２の例において、通信装置２は、Ｐ２１に示すＡＣＫより、次に受信すべきデータのシーケンス番号を示す確認応答番号（Ｎｕｍ）と、Ｗｉｎを通信装置１に通知する。この例ではＮｕｍを１、Ｗｉｎを４としている。
【００１３】
（２）Ｗｉｎの設定とデータ送信
Ｐ２１を受信した通信装置１は、Ｐ２１によって通知されたＮｕｍとＷｉｎにより、送信データの領域をウィンドウとして設定する（Ｗ１１）。具体的には、Ｎｕｍで示されるデータからＷｉｎで示される量の分だけ進んだ箇所までを、ウィンドウとして設定する。図２の例においては、Ｓｅｑが１から４までに設定することとなる。通信装置１は、ウィンドウの範囲でデータを順に送信する。Ｐ２１を受信した段階においては、通信装置１は、他のＡＣＫを受け取るまでに、Ｓｅｑが１から４までのデータを送信することができる。従って、Ｓｅｑが１、２、３、４のパケットを送信する（それぞれ、Ｐ１１、Ｐ１２、Ｐ１３、Ｐ１４）。
【００１４】
（３）データ受信とＷｉｎの更新、通知
図２の例において、通信装置２は、Ｐ１１、Ｐ１２を受信した時点で、これらのパケットに含まれる受信したデータ２ＫＢをプロトコル処理が終了してアプリケーション層であるアプリケーションに渡す（Ｑ２１）場合を想定する。この例において通信装置２は、Ｑ２１の処理完了時点で、さらに受信可能なデータ領域を２ＫＢ確保することができる。この時点において、通信装置２が送信するＡＣＫに設定されるＮｕｍは３、Ｗｉｎは４となる（Ｐ２２）。また、通信装置２において、Ｐ１３、Ｐ１４の受信したパケットも同様に、プロトコル処理を実施し、アプリケーションにデータを渡し（Ｑ２２）、Ｎｕｍは５、受信可能なデータ量であるＷｉｎは４のＡＣＫを送信側装置に送信する（Ｐ２３）。
【００１５】
なお、Ｑ２１において、プロトコル処理が終了しても直ちにアプリケーションにデータを渡さない（アプリケーションへの受信動作が処理されない）場合は、受信したデータ領域を保持しつづけるため、次のデータを受信するデータ領域を確保することができず、Ｗｉｎは４よりも少ない値を通知する場合もある。
【００１６】
（４）Ｗｉｎの更新
Ｐ２２を受信した通信装置１は、受信したＮｕｍが３とＷｉｎが４により、自身のウィンドウをＳｅｑが３から６までに更新する（Ｗ１２）。この後、Ｓｅｑが４までは送信済みであるため、Ｓｅｑ５から６まで順にデータを送信することが可能になる。また同様に、Ｐ２３のＡＣＫ受信で、自身のウィンドウサイズをＳｅｑが５から８までに設定し（Ｗ１３）、Ｓｅｑが５から６までの送信が完了していれば、Ｓｅｑが７から８までのデータを順次送信する。
【００１７】
以上のように制御することで、ＴＣＰパケットのデータ量の制御を実現するウィンドウ制御を可能としている。
【００１８】
＜受信側装置が低速ＣＰＵの場合のＷｉｎの制限＞
通信装置２が低リソースの場合、パケットを受信するのに十分なメモリが搭載できない場合や、通信装置２に搭載できるメモリが大きい場合でも連続受信（バースト受信）するパケットを随時処理できるだけのＣＰＵの能力がないために確保できるメモリ量を制限する必要があったりすることなどにより、Ｗｉｎの値は比較的小さく設定されることが多い。
【００１９】
図１９は、通信装置２（受信側）の構成の一例を示すブロック図である。この図１６に示すように、通信装置２は、ＣＰＵ１０１、通信部１００および記憶部１０２を備え、システムバス１０３に通信部１００、ＣＰＵ１０１および記憶部１０２が接続されている。
【００２０】
通信部１００は、ネットワーク３から受信したパケット１０を一時的に保持するＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）メモリ１５１を有する。通信装置２は、ネットワーク３から例えばＥｔｈｅｒｎｅｔ（登録商標）などの有線ケーブル５を通して受信したパケット１０を一時的に通信部１００のＦＩＦＯメモリ１５１に蓄積する。蓄積されたパケット１０は、ＣＰＵ１０１によって、通信部１００のＦＩＦＯメモリ１５１から記憶部１０２にシステムバス１０３を通して移動される。リソースの乏しい通信装置２において逐次処理できずにパケット消失するという現象は、移動処理よりも蓄積処理の方が速く行なわれるために発生する。即ち、通信装置２のＣＰＵ１０１が低速である場合、ＣＰＵ１０１がデータを通信部１００のＦＩＦＯメモリ１５１から記憶部１０２に移動する処理よりも、ネットワーク３から受信したパケット１０が通信部１００のＦＩＦＯメモリ１５１に蓄積される処理のほうが速い。その結果、通信部１００のＦＩＦＯメモリ１５１からデータが溢れてしまうために、パケット消失が発生する（以後、この現象をＭＡＣの受信オーバーランともいう）。
【００２１】
なお、上記通信部１００のＦＩＦＯメモリ１５１から記憶部１０２へのデータの移動において、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラを通信装置２に備え、ＣＰＵではなく、ＤＭＡコントローラによりデータが移動される場合もある。この場合においても、バスおよびＤＭＡコントローラの処理能力が低ければ、同様にＦＩＦＯメモリ９６０におけるＭＡＣの受信オーバーランは発生しうる。
【００２２】
そのため、パケット消失によって再送が発生しないように、通信装置２におけるＴＣＰのＡＣＫのＷｉｎを最大でもＦＩＦＯメモリの容量と同等もしくはより小さい値とする方法がある。
【００２３】
また、通信装置２が通信装置１にパケットを送信して通信装置１から通信装置２にパケットの応答が返ってくる時間（ＲＴＴ：ラウンドトリップタイム）が長い場合、低リソースの通信装置では、Ｗｉｎの値を小さく設定する必要があるため、ＲＴＴ内に送信できるデータ量がＷｉｎ（４ＫＢ程度）の値となってしまう。それらの要因により低リソースの通信装置にＴＣＰでのデータ送信に時間がかかってしまい、スループットが低下してしまうという問題がある。
【００２４】
これら上記問題を解決するために、通信装置（送信側）において、低リソース通信装置（受信側）の受信能力を推定し、通信装置（受信側）にあわせたレートで送信を行なう必要がある。
【００２５】
＜先行技術（先行文献）の説明＞
通信装置（送信側）において、通信装置（受信側）の受信能力を推定する方法として、特許文献１「通信システム、通信装置および通信方法」に開示されている方法が挙げられる。特許文献１では通信装置（送信側）は、送信したデータと送信データに対するＡＣＫの到着時刻からスループットを推定して、推定したスループットでレート制御を随時行なう。図４は、特許文献１の通信装置１（送信側）と通信装置２（受信側）のシーケンスを示す図である。通信装置１は、送信したデータに対する通信装置２からのＡＣＫ（Ｐ２２）の到着時間（Ｔｒ１）と、Ｐ２２の後に受信するＡＣＫ（Ｐ２３）の到着時間（Ｔｒ２）のＡＣＫの到着時間の差（Ｔｒ２−Ｔｒ１）と返答のあったＡＣＫ（Ｐ２２）の受信確認データ量から求められる送信データ量（図４の例では、Ｐ２２のＮｕｍ＝３であるためＳｅｑ＝１、２の受信確認でデータ２個分）を基に、以下のような推定式で推定スループットを算出する。
【００２６】
推定スループット  ＝  データ２個分／（Ｔｒ２−Ｔｒ１）
また、随時ＲＴＴを計測し、ＲＴＴの値を通信装置１で保持しておき、送信ウィンドウサイズを最小ＲＴＴ×推定スループットとする。通信中にネットワークの負荷が増大してＲＴＴが延びた場合でも、最小ＲＴＴで計算したウィンドウサイズで送信するため、スループットの低下を抑制することができる。
【非特許文献１】「マスタリングＴＣＰ／ＩＰ  入門偏  第３版」、竹下隆史、村山公保、荒井透、苅田幸雄［平成１４年２月２５日］
【非特許文献２】標準仕様書「ＲＦＣ７９３」、ＩＥＴＦ、［平成１７年５月１８日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｉｅｔｆ．ｏｒｇ／ｒｆｃ／ｒｆｃ７９３．ｔｘｔ＞
【特許文献１】特開平１１−２２５１６６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２７】
特許文献１の構成では、受信確認データ量（Ｎｕｍ）を基に推定スループットを算出しているが、通信装置２（受信側）が高速なＣＰＵを保持していたために受信処理において、受信したデータを即座に処理し、受信可能なデータ容量（Ｗｉｎ）の減少することは考慮する必要はなかった。しかしながら、通信装置２が低リソースである場合には、通信装置２はデータの受信確認を優先して行ない、次のデータであるＮｕｍを通知することはできるが、受信したデータをすぐにアプリケーションに渡す処理まで完了までに至っていないため、受信可能なデータ領域を示すＷｉｎは減少させて通知する必要がある。
【００２８】
以下に、具体的シーケンスを用いてこの課題をより詳細に説明する。
【００２９】
図３に、通信装置２の性能が低い（例えば、ネットワークが１００Ｍ−Ｅｔｈｅｒで通信装置１が通常のＰＣ（例えばＣＰＵの性能が２．５ＧＨｚ）に対し、ＣＰＵの性能が１３３ＭＨｚ）場合の通信シーケンスの例を示す。図３と同様に、説明を簡略化するために１パケット内に格納されるデータ長（ＬＥＮ）を１ＫＢにし、ＳｅｑやＷｉｎの単位や値も、これに合わせている。また、図３では通信装置２のＷｉｎを４ＫＢとしている。通信装置１と通信装置２とのＴＣＰ接続時のコネクション設立し、通信装置２がＡＣＫ（Ｐ２１）を送信するまでの通信シーケンスを省略する。
【００３０】
なお、通信装置２が低リソースの場合、パケットを受信するのに十分なメモリが搭載できない場合や、通信装置２に搭載できるメモリが大きい場合でも連続受信（バースト受信）するパケットを随時処理できるだけのＣＰＵの能力がないために確保できるメモリ量を制限する必要があったりすることなどにより、Ｗｉｎの値は比較的小さく設定されることが多く、図３の例では４ＫＢとしている（図２の例は、図３の例と比較しやすいように、敢えて４ＫＢに統一して説明した。）。
【００３１】
通信装置１において、通信装置２からのＡＣＫ（Ｐ２１）を受信したときのＷｉｎｄｏｗ状態はＷ１１になり、Ｓｅｑ＝１のデータからＷｉｎ＝４（４ＫＢ）であることより、Ｓｅｑが１〜４のパケット（Ｐ１１〜Ｐ１４）を通信装置２に送信する。
【００３２】
通信装置２は、Ｐ１１〜Ｐ１４の連続で到着するパケットを随時処理するＣＰＵの能力がないため、連続で到着したパケットに対して、アプリケーションに渡す受信処理まで行なわず、先にＡＣＫのみを通信装置１に送信する。そのため、通信装置２が通信装置１に送信するＡＣＫ（Ｐ２２、Ｐ２３）は、アプリケーションに渡す処理を行なっていないため、Ｗｉｎの値は減少したままになってしまう。ＡＣＫ送信後、受信したデータ４ＫＢ分をアプリケーションに渡す受信処理を行なう（Ｑ２１）。通信装置２は、受信処理が完了し、受信可能なデータ領域が確保できた場合に、それを通知するためのＡＣＫ（ＷｉｎＵｐｄａｔｅ）を、通信装置１に送信する（Ｐ２４）。
【００３３】
通信装置１は、Ｐ２４のＡＣＫを受信した場合のＷｉｎｄｏｗの状態はＷ１４となり、Ｗ１１の場合と同じである。次に送信装置１が送信するＰ１５〜Ｐ１８のデータに対する送信装置１および送信装置２の動作は、Ｐ１１〜Ｐ１４と同様である。
【００３４】
通信装置２の性能が低い場合、通信装置１は通信装置２からのＡＣＫに受け取ったときに次のパケットを送信するＷｉｎがないため、ＡＣＫを受信した直後に次のデータを送信することができないため、通信装置１は通信装置２のＷｉｎが回復するＡｃｋ（ＷｉｎＵｐｄａｔｅ）を待ってから、次のデータを送信する必要がある。
【００３５】
つまり、通信装置２が低リソースである場合は、特許文献１の構成で算出した推定スループットでは通信装置２の受信可能なデータ領域を確保するための処理性能は考慮されておらず、算出したスループットでの送信レートでは、通信装置２の受信可能なデータ領域が不足し、パケットロスを引き起こし、パケットロスによる再送が多発し、スループットが低下してしまう可能性があるという課題を有していた。
【００３６】
本発明は、上記の課題に鑑みなされたものであり、受信側装置の受信可能な性能に合わせた送信レートで送信することを可能とすることによって、スループットの向上を図った通信装置を提供することを目的とする。
【課題を解決するための手段】
【００３７】
前記従来の課題を解決するために、本発明の通信装置は、データを送信する相手通信装置の性能を推定し、相手通信装置の性能に合わせた送信レートでデータを送信する通信装置であって、相手通信装置の確認応答パケットの到着時間、確認応答パケットに含まれる受信可能データ量より相手通信装置の性能を推定する性能推定部を備えることを特徴とする。
【００３８】
例えば、汎用のＴＣＰを用いてデータを送信する通信装置と相手通信装置と２つの通信装置間の通信において、性能推定部は、通信装置が送信した４ＫＢのデータ（１ＫＢ×４パケット）に対する相手通信装置からの始めに到着するＡＣＫの到着時間（ｔ１）と、通信可能なデータ容量がないことを示すＡＣＫ（Ｗｉｎ＝０のＡＣＫ）の後に受信側装置で４ＫＢのデータ受信処理が完了して通信可能なデータ容量を確保できたことを示すＡＣＫ（ＷｉｎＵｐｄａｔｅ）が到着するまでの時間（ｔ２）とを測定する。ＷｉｎＵｐｄａｔｅにより処理が完了したデータ量（４ＫＢ）と、測定したｔ１-ｔ２間に４ＫＢのデータが受信側装置で処理されたことと推測する。また、送信レート制御部は前記性能推定部が測定した受信側装置の性能より、４ＫＢのデータをｔ１−ｔ２間に間隔をあけて２パケット単位（１ＫＢ×２）で送信する。
【００３９】
第一の発明は、ネットワークを介してデータを相手端末と送受信する通信装置であって、相手端末は通信装置に対して、受信したデータを確認するための確認応答パケットを返送し、相手端末からの確認応答パケットに含まれる受信可能なデータ容量および次に要求するデータの情報に応じて、相手端末にデータを順次送信する通信装置であって、確認応答パケットに含まれる受信可能なデータ容量を基に相手端末の性能を推定する性能推定部を具備し、前記性能推定部によって推定した相手端末の性能に合わせた送信レートで相手端末にデータを送信する送信レート制御部を具備することを特徴とする。
【００４０】
第一の発明によれば、相手通信装置のリソースが十分でない場合であっても、相手通信装置の性能が推定することができる。その結果、相手通信装置の性能にあったレート制御を行なうことができる。
【００４１】
第二の発明は、前記性能推定部は、相手通信装置が通信装置から受信したデータの処理が完了し受信可能なデータ容量が確保できたことを通知する第二の確認応答パケットが通信装置に到着する時間および前記第二の確認応答パケットに含まれる受信可能なデータ容量と、第二の確認応答パケットの直前に受信した相手端末からの第一の確認応答パケットの受信可能な容量と到着時間の差分を基に相手端末の受信性能を推定することを特徴とする。
【００４２】
第二の発明によれば、相手通信装置がデータを受信して受信可能なバッファ容量を確保するまでの処理性能を推定できる。その結果、相手端末が低リソースであってもパケットロスを発生させないスループットを算出でき、パケットロスによるスループット低下を抑えることができる。
【００４３】
第三の発明は、前記性能推定部は前記第一の確認応答パケットのデータ容量が０の場合には、前記第二の確認応答パケットの受信可能なデータ容量と、第一の確認応答パケットおよび第二の確認応答パケットが通信装置に到着する時間の差分から相手通信装置の性能を推定することを特徴とする。
【００４４】
第三の発明によれば、相手通信装置が前記第二の確認応答パケットの受信可能なデータ容量分を確保するまでのより正確な処理性能を推定できる。その結果、受信可能なデータ量が不足であるために送信するＷＩＮ＝０のＡＣＫ後に、受信処理完了後に受信可能なデータ容量が確保できたことを通知するＷｉｎＵｐｄａｔｅを送るような事象がなくなり、ネットワークのトラフィックを軽減することができる。
【００４５】
第四の発明は、前記性能推定部は相手通信装置からの確認応答パケットが順次到着する到着時間の間隔と受信可能なデータ容量の変動から相手端末の受信性能を推定することを特徴とする。
【００４６】
第四の発明によれば、相手通信装置が受信確認応答パケットを作成する処理の処理性能を推定できる。その結果、相手端末が低リソースであってもパケットロスを発生させないスループットを算出でき、パケットロスによるスループット低下を抑えることができる。
【００４７】
第五の発明は、前記送信レート制御部は、送信したデータに対する相手通信側装置からのＡＣＫの数に応じて１度に送るパケット数を決定する。例えば、送信したデータに２つに対するＡＣＫの数が１であった場合、送信レート制御は間隔をあけて２パケット連続送信を繰り返すことを特徴とする。
【００４８】
第五の発明によれば、相手通信装置はＡＣＫ処理１回を行なうデータをまとめて受信処理できるため、受信側装置で受信処理を効率よくすることができる。その結果、受信可能なデータ量が常に確保することができるため、バースト受信が原因で発生するパケットロスをなくすことにより、再送制御によるスループットの低下を抑えることができる。
【００４９】
第六の発明は、前記送信レート制御部は、相手通信側装置による次のデータ（Ｎｕｍ）の送信指示を含んだＡＣＫの到着を待たずに、決定した送信レートで順次データを送信する。
【００５０】
第六の発明によれば、通信装置と相手通信装置間の往復遅延時間（ＲＴＴ：ラウンドトリップタイム）が長い場合において、ＲＴＴが長い場合に発生する送信側装置のＡＣＫの到着待ち時間と受信側装置のデータ到着待ち時間をなくすことができる。その結果、相手通信装置を最大限に活かしたスループットで通信することができる。
【００５１】
第七の発明は、データ管理部をさらに具備し、前記データ管理部は、確認応答パケットが再送を要求するパケット（ＤｕｐＡｃｋ）であった場合に、再送要求に該当するデータを再送し、さらに該当したデータに受信可能データ量を追加したデータから順次送信を行なうことを特徴とする。
【００５２】
第七の発明によれば、相手通信装置からのＤｕｐＡｃｋを３つの到着を待たずに再送することができる。その結果、パケットロス時の再送によるスループット低下を抑えることができる。
【００５３】
第八の発明は、前記データ管理部は、確認応答パケットが再送を要求するパケットであった場合に、前記送信レート制御部に送信レートを落とすように通知することを特徴とする。
【００５４】
第八の発明によれば、パケットロスを低減することができる。その結果、パケットロス発生率を抑え再送によるスループット低下を抑えることができる。
【００５５】
第九の発明は、前記データ管理部は、確認応答パケットの到着時刻遅延や再送を要求するパケットから連続でのパケットロスを検出した場合、ロスしたパケットから順次送信することを特徴とする。
【００５６】
第九の発明によれば、連続パケットロスによる再送の多発を防止することができる。その結果、再送の発生を最小限に抑え、再送によるスループット低下を抑えることができる。
【００５７】
なお、第十、第十一および第十二の発明は、このような通信装置として実現することができるだけでなく、その方法やプログラム、そのプログラムを格納する記憶媒体、集積回路としても実現することができる。
【発明の効果】
【００５８】
本発明の通信装置は、相手通信装置からのＡＣＫより取得した受信可能なデータ容量や到着時間より、他の通信装置の性能を推定して、他の通信装置の性能に合わせたレート制御を行なうことにより、相手通信装置が低リソースであっても、他の通信装置の性能にあったロスしない効率のよいスループットでのデータ送信ができるという作用効果を奏する。
【発明を実施するための最良の形態】
【００５９】
以下本発明の実施の形態について、図面を参照しながら説明する。なお、本発明は、実施の形態における説明においては、ＴＣＰを用いた通信を例に説明を行うが、ＴＣＰ同様のパラメータを用いた通信を行う同種のプロトコルにおいても適用可能である。
【００６０】
（実施の形態）
＜＜ネットワーク構成および構成図＞＞
図５は、本発明の一実施形態に係るネットワーク構成例および通信装置の構成例を示す。図５において、通信装置２が、ネットワーク３を経由し、通信装置１と通信する。通信装置１および通信装置２はネットワーク３と有線または無線で接続する通信機能を持つ装置であり、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）インタフェースを備えた装置（例えばＰＣや、ネットワーク通信が可能な家電装置など）である。ネットワーク３は有線または無線を含むネットワークであり、インターネットなどの公衆ネットワークなどが例として挙げられる。
【００６１】
実施の形態では、通信装置１と相手端末にあたる通信装置２の間でＴＣＰのコネクションを確立し、通信装置１から通信装置２にデータを送信することを想定する。例えば、ＦＴＰ（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）サーバである送信装置１（例えばＰＣ）からＦＴＰクライアントとして動作するアプリケーションが動作する通信装置２がファイルをダウンロードする場合や、ＰＯＰ（Ｐｏｓｔ  Ｏｆｆｉｃｅ  Ｐｒｏｔｏｃｏｌ）サーバである通信装置１から、電子メールを扱うアプリケーションが動作する通信装置２で電子メールを受信する場合などを想定する。
【００６２】
通信装置１は、ＣＰＵ１０１、記憶部１０２、システムバス１０３、および通信部１００を備える。
【００６３】
通信部１００は、システムバス１０３上に接続されたハードウェアである。ＣＰＵ１０１によって渡されたデータをネットワーク３に送信する機能とネットワーク３から受信したデータを受信し、ＣＰＵ１０１に渡す機能を有する。
【００６４】
また、通信部１００は、ネットワーク３から受信したデータを一時的に保持する受信用ＦＩＦＯメモリ１５１と、ＣＰＵ１０１から渡されたデータを一時的に保持する送信用ＦＩＦＯメモリ１５２をもつ。
【００６５】
ＣＰＵ１０１は、通信部１００の受信用ＦＩＦＯメモリ１５１に格納されたデータを記憶部１０２に移動する（読み出し）機能と、記憶部１０２に格納されているデータを通信部１００の送信用ＦＩＦＯメモリ１５２に移動する（書き込み）機能をもつ。また、記憶部１０２に格納さているデータに対してデータの解析や送信用データの作成処理など、ＴＣＰを含むプロトコル処理も行なう。また、通信アプリケーション、必要に応じてその他のプログラムを、記憶部１０２を使用しながら実行する機能を持つ。
【００６６】
なお、記憶部１０２は、通信部１００の送信用ＦＩＦＯメモリ１５２または通信部１００の受信用ＦＩＦＯメモリ１５１から記憶部１０２のデータの転送において、別途ＤＭＡコントローラを具備し、ＣＰＵではなく、ＤＭＡコントローラによりデータの移動を行なう場合もある。さらに、各プロトコル処理は、ＣＰＵ１０１により実施されるのではなく、別途ハードウェアでそれぞれ実施されてもよい。
【００６７】
＜＜通信装置１の機能構成＞＞
図７に示した機能構成図は、図５に示したＣＰＵ１０１上で動作するソフトウェアとして実現可能である。なお、図７の機能構成図は、本発明に係るＴＣＰデータの送信処理を中心として記載しているが、通信装置１は、ＴＣＰデータの受信処理を行なう機能部を具備していてもよい。また、通信装置２は、受信側装置として、本発明が適用されていない従来の通信装置であってもよいし、本発明が適用された送信処理の機能部を持つ通信装置であってもよい。また、本発明に直接関係のないＴＣＰ通信を実現するためのその他の構成についても説明を省略する。
【００６８】
なお、図７においては、データの流れをいくつかの種類の線を用いてあらわしている。実線はパケットまたはデータの流れを示すデータフロー、点線は制御信号（通知またはパラメータ）の流れを示す制御フローである。
【００６９】
図７において、通信装置１は、受信または送信するパケットを処理するパケット処理部の詳細な構成として、送信部１１０１、受信部１１０２、ＡＣＫ処理部１１０３、データ管理部１１０４、性能推定部１１０５、レート制御部１１０６を有する。
【００７０】
送信部１１０１は、データ管理部１１０４に渡されたデータを送信するために必要なプロトコル処理（ＴＣＰヘッダ、ＩＰヘッダ、ＭＡＣフレームなどをヘッダ付与、チェックサム計算など）を行ない、構築したパケットを図５のＣＰＵ１０１を介して記憶部１０２から通信部１００の送信用ＦＩＦＯメモリ１５１に渡す。
【００７１】
受信部１１０２は、図５のＣＰＵ１０１を介して受信用ＦＩＦＯメモリ１５１から記憶部１０２に渡されたパケットを各種プロトコル処理ヘッダ解析・除去を行なう。ヘッダ解析処理を行なった結果、送信したデータに対するＴＣＰパケットに関しては、ＡＣＫ処理部１１０３にＴＣＰパケットをわたす。
【００７２】
ＡＣＫ処理部１１０３は、受信部から渡されたＴＣＰパケットを解析し、受信可能な容量（Ｗｉｎ）および次に要求するデータ（Ｎｕｍ）を性能推定部１１０５およびデータ管理部１１０４に渡す。
【００７３】
データ管理部１１０４は、送信するデータが配置されるメモリ領域管理し、送信するデータを送信部１１０１に渡す。データを送信部１１０１渡すタイミングは、レート制御部１１０６に送信通知をされたとき（レート制御ステップ）またはレート制御部１１０６が動作していない場合（性能推定ステップ）にＡＣＫ処理部１１０３から、ＮｕｍおよびＷｉｎを受け取ったときである。データ管理方法に関しては、後述する。また、連続パケットの消失を検知し、レート制御部１１０６にレートを落とすように通知する。
【００７４】
性能推定部１１０５は、ＡＣＫ処理部から渡されたＷｉｎとＮｕｍおよびＡＣＫ処理部からそれらを受け取った時間を測定する。また、測定した時間とＷｉｎの変動、Ｎｕｍを基に通信装置２の性能を推定し、送信量および送信間隔時間（Δｔ）をレート制御部１１０６に渡す。性能推定部１１０５における性能推定処理は後述する。
【００７５】
レート制御部１１０６は、性能推定部１１０５より送信量および送信間隔時間を渡され、送信間隔で送信量を送信するようにデータ管理部１１０４に通知を行なうレート制御機能を持つ。また、データ管理部１１０４にレートを落とすように通知された場合に、送信間隔を長くしたりする。レート制御部１１０６のレート制御処理に関しては後述する。
【００７６】
＜＜通信装置１（送信側）と通信装置２（受信側）のシーケンス＞＞
図６は、本実施の形態に係わる通信装置間のシーケンス例を示す図である。通信装置１を送信側装置、通信装置２を受信側装置として動作させたときを例として図７を用いて説明する。
【００７７】
通信装置２の性能が低い（例えばＣＰＵの性能が１３３ＭＨｚ）場合に、受信側装置にあわせた送信レート制御を行なった場合のシーケンス例を示す。説明を簡略化するために１パケット内に格納されるデータ長（ＬＥＮ）を１ＫＢにし、ＳｅｑやＷｉｎの単位や値も、これに合わせている。また、図６は、通信装置１と通信装置２とのＴＣＰ接続時のコネクション設立後、受信側装置の受信可能なデータ容量が最大の値（Ｗｉｎ＝４）のＡＣＫを送信側装置に送った場面であり、それにいたるまでの通信のシーケンスは本発明に直接関係のないＴＣＰ通信を実現するための方法であるため省略する。
【００７８】
図７において、通信装置１の動作は、性能推定ステップとレート制御ステップと２つのステップからなる。性能推定ステップでは、通信装置２の性能を推定する。また、レート制御ステップでは、性能推定ステップで推定した通信装置２の性能に合わせたレート制御でデータ送信を行なう。
【００７９】
性能推定ステップは、図６において、通信装置１がＷｉｎ＝４のＡＣＫ（Ｐ２１）を受信した場面から、ＷｉｎＵｐｄａｔｅ（Ｐ２４）の受信処理を行なうまでにあたる。通信装置１は、通信装置２の受信能力を以下の２つの処理時間から推定する。
【００８０】
ＡＣＫの処理時間（ＡＴ）
通信装置２が受信したデータに対するＡＣＫ作成するのに要する時間とＡＣＫのＳｅｑ量（Ｐ２２とＰ２３の到着間隔と含まれるＳｅｑから推定）
受信可能なデータ領域を確保できるのに要する時間（ＤＴ）
通信装置２が、受信可能なデータ量が確保できたことを示すＡＣＫ（ＷｉｎＵｐｄａｔｅ）とその直前に到着したＡＣＫの到着間隔とＷｉｎの増加量より推定）
以下に、通信装置１における性能推定ステップのＰ２１〜Ｐ２４のＡＣＫ受信し通信装置２の性能推定を行なうまでの処理を説明する。
【００８１】
通信装置１は、Ｐ２１のＡＣＫのパラメータ（Ｗｉｎ＝４、Ｎｕｍ＝１）より、Ｓｅｑ＝１〜Ｓｅｑ＝４（Ｐ１１〜Ｐ１４）のデータを通信装置２に送信する。さらに、性能推定するために、Ｎｕｍ＝１の値を保持する。また、Ｗｉｎ＝４を通信装置２の受信可能な最大データ量（ＭＡＸ＿ＤＡＴＡ）として保持する。
【００８２】
次に、通信装置２は通信装置１から送られたデータ（Ｐ１１〜Ｐ１４）を受信し、Ｐ２２および、Ｐ２３のＡＣＫを返す。Ｐ１１、Ｐ１２のデータを受信した通信装置１は、受信したデータに対するＡＣＫを作成し、受信したデータをアプリケーションに渡す処理を行なわずにＰ１３およびＰ１４のデータの受信処理を行なう。そのため、Ｐ１１およびＰ１２のデータを保持するためにメモリを２ＫＢ使用しているためＷｉｎをＷｉｎ＝２とし、Ｐ１１、Ｐ１２のデータ（Ｓｅｑ＝１、Ｓｅｑ＝２）の受信を確認しているため、Ｎｕｍ＝３としてＡＣＫ（Ｐ２２）を通信装置１に送信する。また、Ｐ１３およびＰ１４の受信もその後に行なわれ、データをアプリケーションに渡す前にＡＣＫを返すため、２ＫＢのデータを保持しているためＷｉｎ＝０となり、Ｐ１３、Ｐ１４のデータ（Ｓｅｑ＝３、Ｓｅｑ＝４）を確認しているため、Ｓｅｑ＝５としてＡＣＫ（Ｐ２３）を通信装置１に送信する。通信装置２は、ＡＣＫ（Ｐ２３）を送信後、Ｐ１１〜Ｐ１４のデータをアプリケーションに渡し、４ＫＢ分の受信可能なデータ領域を確保する。よって、Ｎｕｍ＝５、Ｗｉｎ＝４のＡＣＫ（Ｐ２４）を通信装置１に送信する。
【００８３】
通信装置１は、Ｐ２２のＡＣＫの受信処理において、ＡＣＫのパラメータ（Ｗｉｎ＝２、Ｎｕｍ＝３）に対して、Ｓｅｑ＝１〜Ｓｅｑ＝４までは送信済みであるためにデータを送信しない。また、Ｗｉｎ＝２より、通信装置２の受信可能なデータ量がＭＡＸ＿ＤＡＴＡより減少していることより、通信装置２で受信可能なデータ領域が減少していることがわかる。また、Ｎｕｍ＝３であることよりＳｅｑ＝１およびＳｅｑ＝２のデータの送達確認ができている。よって、Ｐ２１のＡＣＫ受信で保持していたＮｕｍ＝１より、通信装置２が送信データ４つに対して２個のＡＣＫを返す（Ｄｅｌａｙｅｄ  Ａｃｋである）ことがわかる。これにより、レート制御におけるデータ量（ＳＥＮＤ＿ＳＩＺＥ）を２（１ＫＢ×２）に決定する。また、ＡＣＫの到着時間（ｔ１）を計測する。さらに、Ｗｉｎ＝２の値を最小のＷｉｎ（ＭＩＮ＿ＷＩＮ）として値を保持する。
【００８４】
通信装置１は、Ｐ２３のＡＣＫ受信処理において、Ｐ２３のＡＣＫのパラメータ（Ｗｉｎ＝０、Ｎｕｍ＝５）より、Ｎｕｍ＝５であるが、Ｗｉｎ＝０であるため通信装置２にデータの空き容量がないため、次のデータを送信しない。また、ＡＣＫの到着時間（ｔ２）を計測する。Ｐ２２の到着時刻（ｔ１）とＰ２３の到着時刻（ｔ２）の差分は、通信装置２がＰ１３、Ｐ１４の２ＫＢ（ＳＥＮＤ＿ＳＩＺＥ）のデータを受信し、ＡＣＫを作成する処理時間（ＡＴ）にあたる。これと先ほど計測したＰ２２の到着時間（ｔ１）より、通信装置２の２パケットの処理時間（ＡＴ）を
ＡＴ＝ｔ２−ｔ１
より推定できる。さらに、Ｗｉｎ＝０の値を最小のＷｉｎ（ＭＩＮ＿ＷＩＮ）として値を保持する。
【００８５】
次に、通信装置１はＰ２４のＡＣＫ（ＷｉｎＵｐｄａｔｅ）を受信し、ＡＣＫのパラメータ（Ｗｉｎ＝４、Ｎｕｍ＝５）Ｐ２３のＡＣＫ受信時よりもＷｉｎが増加していることにより、通信装置２の性能推定を行なう。通信装置１で、Ｐ２４のＡＣＫ到着時の時刻（ｔ３）を測定し、Ｐ２３のＡＣＫが到着した時間（ｔ２）との差分が、通信装置２が４ＫＢ（ＭＡＸ＿ＤＡＴＡ）分のデータを処理した処理時間（ＤＴ）を
ＤＴ＝ｔ３−ｔ２
より推定できる。
【００８６】
また、通信装置２において、ＭＡＸ＿ＤＡＴＡ（４ＫＢ）のデータを処理して受信可能なデータ領域を確保するのに要する時間は、通信装置２がデータを処理する時間（ＤＴ）とＡＣＫを作成する時間（ＡＴ）を足したものとなる。よって、通信装置２の性能として単位時間あたりの処理できるデータ量（ｔｈ）は、
ｔｈ＝ＭＡＸ＿ＤＡＴＡ／（ＤＴ＋（ＡＴ×ＤＡＴＡ＿ＳＩＺＥ／ＭＡＸ＿ＤＡＴＡ））
となる。ＡＴに（ＳＥＮＤ＿ＳＩＺＥ／ＭＡＸ＿ＤＡＴＡ）としているのは、２ＫＢ（ＳＥＮＤ＿ＳＩＺＥ）を４ＫＢ（ＭＡＸ＿ＤＡＴＡ）に換算するためである。ｔｈより２ＫＢ送信するのに要する時間（Δｔ）を求める。レート制御で用いる送信間隔Δｔは
Δｔ＝ＳＥＮＤ＿ＤＡＴＡ／ｔｈ
となる。
【００８７】
なお、本実施例では、通信装置２が２つのデータに対して１つのＡＣＫ（Ｄｅｌａｙｅｄ  Ａｃｋ）を返しているが、１つのデータに対して１つのＡＣＫを返す通信装置も想定される。そういった場合は、ＡＣＫのパラメータであるＮｕｍより１つのデータに対して１つのＡＣＫを返す装置と判断し、送信量（ＳＥＮＤ＿ＳＩＺＥ）を１ＫＢとしてもよい。
【００８８】
通信装置１において、Ｐ２４を受信し通信装置２の性能を推定するまでの性能推定ステップを示した。通信装置２の性能を推定した後は、推定した性能でレート制御を行なうレート制御ステップに移行する。
【００８９】
レート制御ステップは、図６において、通信装置１においてＰ１５以降の処理に相当する。
【００９０】
通信装置１では、性能推定ステップで推定した通信装置の性能から送信間隔（Δｔ）とデータ量（ＳＥＮＤ＿ＳＩＺＥ）より、送信レートが決定される。Ｐ１５、Ｐ１６を送信した後、Δｔの間隔をあけて次の２ＫＢのデータ（Ｐ１７、Ｐ１８）を送信する。
【００９１】
また、通信装置１は、通信装置２からの確認応答であるＡＣＫ（Ｎｕｍ＝９）を待たずにＰ１７、Ｐ１８送信後Δｔ後にＰ１９、Ｐ２０のデータ（Ｓｅｑ＝９、Ｓｅｑ＝１０）を送信する。
【００９２】
＜＜通信シーケンスにおける通信装置１の各機能部の動作概要＞＞
以下、通信装置１の各機能部の動作概要を、図７のシーケンス例を参照しながら、説明する。
【００９３】
通信装置１と通信装置２のシーケンス（図６参照）の中で、性能推定ステップとレート制御ステップがある。性能推定ステップでレート制御ステップと動作する機能部がそれぞれ異なる。
【００９４】
性能推定ステップでは、通信装置１においてレート制御部１１０６は動作せず、送信部１１０１、受信部１１０２、ＡＣＫ処理部１１０３、性能推定部１１０５、データ管理部１１０４で処理が行なう。受信部１１０２は、通信装置２から送信されたＡＣＫを受信し、ヘッダ解析・除去を行なう。ヘッダ解析など各種プロトコル処理を行なった結果、ＴＣＰのＡＣＫであるために、受信したデータをＡＣＫ処理部１１０３に渡す。ＡＣＫ処理部１１０３は、ＡＣＫのＷｉｎおよびＮｕｍを性能推定部１１０５とデータ管理部１１０４に渡す。性能推定部１１０５は、ＡＣＫ処理部より受け取ったＷｉｎとＮｕｍを受け取り、性能推定の処理を行なう。性能推定部１１０５における性能推定方法は後で説明する。また、データ管理部１１０４は、ＡＣＫ処理部１１０３から受け取ったＷｉｎとＮｕｍより、管理しているデータのうち送信するデータを管理しているメモリ上から選択し、送信部１１０１に渡す。データ管理部１１０４におけるデータ管理方法は後で説明する。送信部１１０１は、データ管理部１１０４に渡されたデータに対してＴＣＰヘッダの、ＩＰヘッダ、ＭＡＣヘッダを加えるプロトコル処理をしてデータを送信する。
【００９５】
レート制御ステップでは、性能推定部１１０５が送信量（ＳＥＮＤ＿ＤＡＴＡ）および送信間隔（Δｔ）をレート制御部１１０６に渡すことにより開始される。レート制御部１１０６は、性能推定部１１０５から受け取ったＳＥＮＤ＿ＤＡＴＡおよびΔｔを受け取り、Δｔ間隔でデータ量（ＳＥＮＤ＿ＤＡＴＡ）をデータ管理部１１０４に通知する。データ管理部１１０４は、レート制御部１１０６に、通知された場合にＳＥＮＤ＿ＤＡＴＡのデータを送信部１１０１に渡す。レート制御ステップでは、通信装置２からのＡＣＫ受信時は、受信部１１０２のパケット処理、ＡＣＫ処理部１１０３によるＷｉｎおよびＮｕｍのＡＣＫ処理部１１０３およびデータ管理部１１０４への通知は性能推定ステップと同様に行なわれる。ただし、データ管理部１１０４による送信部へのデータの受け渡しは、レート制御部１１０６からのＳＥＮＤ＿ＤＡＴＡの通知のタイミングで行われ、ＡＣＫ処理部１１０３からＮｕｍおよびＷｉｎを受け取ったタイミングでの送信部１１０１へのデータの受け渡しはなく、ＮｕｍおよびＷｉｎはデータ管理の情報として使用される。
【００９６】
また、レート制御ステップが開始した場合でも、ＡＣＫ受信時に性能推定部１１０５はＡＣＫ処理部１１０３よりＮｕｍ、Ｗｉｎを受け取り、性能推定処理を行ない、ＳＥＮＤ＿ＤＡＴＡおよびΔｔの更新を行ない、通信装置２の性能に合わせたレート制御を行なうために、通信装置２を随時監視しながら行なう。
【００９７】
＜＜通信装置１の性能推定処理＞＞
通信装置１の性能推定部１１０５における性能推定処理について説明する。性能推定処理は、図７において、性能推定部１１０５が、ＡＣＫ処理部１１０３からのＡＣＫのパラメータであるＮｕｍおよびＷｉｎとＡＣＫ到着時刻から、送信レート制御で用いる送信間隔（Δｔ）と送信量（ＳＥＮＤ＿ＳＩＺＥ）を求め、レート制御部１１０６に渡す処理である。
【００９８】
性能推定処理は、以下の３つの機能を含むことができる。
【００９９】
・最大送信サイズ推定機能
通信装置１が、送信レート制御ステップ（図６参照）で、間隔をかけずに連続で送信する最大送信サイズ（ＳＥＮＤ＿ＳＩＺＥ）を推定する
・ＡＣＫ処理性能推定機能
データの受信と、受信したデータに対するＡＣＫを作成し送信する処理時間（ＡＴ）の推定
・受信データ処理性能推定機能
受信したデータを処理し、処理したデータの領域を開放することにより、次に受信可能なデータ領域を確保するまでの時間（ＤＴ）の推定
本発明における性能推定処理は、これら３つの機能をそれぞれ取捨選択することによって実現することが可能である。以下では、まず、これら３つの機能をすべて具備した場合について全体の処理の流れを、図８を用いて説明し、次にそれぞれ３つの処理の詳細な説明を図９の通信装置１と通信装置２のシーケンス例に従って行なう。最大送信サイズ推定機能を具備しない構成においては、受信可能であるデータサイズ（ＳＥＮＤ＿ＳＩＺＥ）を所定値（例えばＭＳＳ）などにするとよい。また、ＡＣＫ処理性能推定機能を具備しない構成において、ＡＣＫを作成し送信する処理時間（ＡＴ）を０、受信データ処理性能推定機能を具備しない構成においては、次に受信可能なデータ領域を確保するまでの時間（ＤＴ）を０などにするとよい。以下の説明においては、性能推定処理は上記３つの機能をすべて具備した場合を例として記述するが、これらのうち１つのみ、あるいはいずれか２つの機能のみを具備した場合の説明は、単にそれぞれに相当するステップが含まれるか否か以外は同様であり、説明を省略する。
【０１００】
図８は、性能推定処理のフローチャートの例を示す図である。性能推定処理は、最大受信可能容量ステップ（Ｓ１）と、到着時刻測定ステップ（Ｓ２）と、性能推定値算出ステップ（Ｓ３）からなる。
【０１０１】
最大受信可能容量ステップ（Ｓ１）では、ＡＣＫ処理部１１０３（図７参照）から性能推定部１１０５に渡されるＷｉｎとＮｕｍから通信装置２の最大受信可能なデータ量保持する。
【０１０２】
到着時刻測定ステップ（Ｓ２）では、ＡＣＫが到着する時刻を計測し、レート制御ステップ（図６参照）において「最大送信サイズ推定機能」により推定して求めた送信量（ＳＥＮＤ＿ＳＩＺＥ）と、「ＡＣＫ処理性能推定機能」によりＡＣＫを作成し送信する処理時間（ＡＴ）の推定を行なう。さらに、通信装置２の性能推定を行なうのに必要な値を保持する。
【０１０３】
性能推定値算出ステップ（Ｓ３）では、「受信データ処理性能推定機能」を用いて次に受信可能なデータ領域を確保するまでの時間（ＤＴ）の推定を行ない、（ＡＴ）および（ＤＴ）を用いて通信装置２の性能（ｔｈ）の推定と、データを送信する送信間隔（Δｔ）を算出する。さらに、「到着時刻推定ステップ（Ｓ２）で保持している送信データ量（ＳＥＮＤ＿ＳＩＺＥ）と送信間隔（Δｔ）をレート制御部１１０６（図７参照）に渡し、性能推定処理は終了する。
【０１０４】
なお、性能推定処理が終了し、性能推定ステップ終了後にレート制御ステップが開始された場合においても、通信装置２の性能を常に監視するために性能推定処理を行なってもよい。そのために、性能推定値算出ステップ（Ｓ３）の後、最大受信可能容量ステップ（Ｓ１）に遷移することによって、性能推定処理を継続させることもできる。
【０１０５】
次に、最大受信可能容量ステップ（Ｓ１）、到着時刻測定ステップ（Ｓ２）および性能推定値算出ステップ（Ｓ３）の処理のフローチャートの詳細な例を図９、図１０および図１１に示す。
【０１０６】
最大受信可能容量ステップでは、通信装置２の最大受信可能容量を保持し、送信レート制御で用いる最大送信サイズを求めるための情報を保持する。最大受信可能容量ステップ（Ｓ１）の処理を、図９を用いて以下に説明する。
【０１０７】
図９において、Ｓ１１でＷｉｎおよびＮｕｍを待つ。そして、ＷｉｎおよびＮｕｍを取得した（つまり、ＡＣＫが到着した）場合に、Ｓ１２に遷移する。Ｓ１２では、Ｓ３の性能推定算出ステップで通信装置２の性能を推定するための通信装置２の最大受信可能な容量（ＭＡＸ＿ＤＡＴＡ）保持するため、ＭＡＸ＿ＤＡＴＡが到着したＡＣＫのＷｉｎであるかの判定を行なう。ＭＡＸ＿ＤＡＴＡの値がＷｉｎ同じまたは小さい場合に、到着時刻推定ステップ（Ｓ２）へ遷移する。ＭＡＸ＿ＤＡＴＡの値がない場合（最初のＡＣＫを受信した場合や性能推定処理が一度完了して値がクリアされた場合）またはＭＡＸ＿ＤＡＴＡの値よりもＷｉｎの値が大きい場合、Ｓ１３においてＭＡＸ＿ＤＡＴＡにＷｉｎを代入し保持する。また、Ｓ１３において、最大送信サイズを決定するために必要な情報として、到着したＮｕｍを保持する。次に、Ｓ１１に遷移し、次のＡＣＫを待つためにＷｉｎおよびＮｕｍ待ちとなる。
【０１０８】
到着時刻推定ステップ（Ｓ２）は、ＡＣＫが到着した時刻（ｔ）の測定を行い、最大送信サイズ（ＳＥＮＤ＿ＳＩＺＥ）と、通信装置２のＡＣＫ処理時間（ＡＴ）を推定する。到着時刻測定ステップ（Ｓ２）は、最大受信可能容量ステップ（Ｓ１）より、ＭＡＸ＿ＤＡＴＡの値がＷｉｎ同じまたは小さい場合に開始される。到着時刻測定ステップ（Ｓ２）の処理の詳細を、図１０を用いて以下に説明する。ただし、取捨選択可能な機能のうち、「最大送信サイズ推定機能」、「ＡＣＫ処理性能推定機能」を含むが、これらの機能の詳細に関しては後述する。
【０１０９】
図１０において、Ｓ２１で到着した時刻（ｔ）を測定し、Ｓ２２に遷移する。Ｓ２２では、最小Ｗｉｎｄｏｗサイズ（ＭＩＮ＿ＷＩＮ）の判断を行なう。ＭＩＮ＿ＷＩＮよりもＷｉｎが大きい場合（ＡＣＫがＷｉｎＵｐｄａｔｅである場合）は、性能推定値算出ステップ（Ｓ３）に遷移する。また、ＭＩＮ＿ＷＩＮに値がない場合やＭＩＮ＿ＷＩＮよりもＷｉｎが小さい場合はＳ２３に遷移する。Ｓ２３では、ＭＩＮ＿ＷＩＮにＷｉｎを代入して保持し、Ｓ２４に遷移する。Ｓ２４では、最大送信サイズ推定機能より、最大送信サイズ推定処理が行なわれ、Ｓ２５に遷移する。最大送信サイズ推定機能を具備しない構成ではＳ２４はスキップする。Ｓ２６では、ＡＣＫ処理性能推定機能より、ＡＣＫ処理性能であるＡＣＫを処理する時間（ＡＴ）を推定するためのしょりが行われ、Ｓ２６に遷移する。ＡＣＫ処理性能推定機能を具備しない構成ではＳ２５はスキップされる。Ｓ２６では、ＷｉｎＵｐｄａｔｅではないＡＣＫの到着した最後のＡＣＫの到着時刻を保持するため、ｔ２にｔを代入し保持する。そして、最大受信可能容量ステップに図９のＳ１１に遷移し、次のＡＣＫ待ちとなる。
【０１１０】
性能推定値算出ステップ（Ｓ３）は、ＷｉｎＵｐｄａｔｅのＡＣＫを受信した場合に開始される。性能推定値算出ステップ（Ｓ３）の処理を、図１１を用いて以下に説明する。ただし、取捨選択可能な機能のうち、「受信データ処理性能推定機能」を含むが、この機能に関する詳細は後述する。
【０１１１】
図１１において、Ｓ３１で受信データ処理性能推定機能より、通信装置２が処理したデータの領域を開放することにより、次に受信可能なデータ領域を確保するまでの時間（ＤＴ）を推定しＳ３２に遷移する。受信データ処理性能推定機能を具備しない構成である場合は、Ｓ３１はスキップされる。Ｓ３２では、相手通信装置の性能（ｔｈ）を推定する。性能推定処理機能で求めたＡＣＫを作成し送信する処理時間（ＡＴ）とＳ３１のステップで求めた受信可能なデータ領域を確保するまでの時間（ＤＴ）を用いてスループット（ｔｈ）を計算する。単位時間のデータ量として計算するため、
ｔｈ＝ＭＡＸ＿ＤＡＴＡ／（ＤＴ＋（ＡＴ×ＳＥＮＤ＿ＳＩＺＥ／ＭＡＸ＿ＤＡＴＡ））
となる。ＡＴに（ＳＥＮＤ＿ＳＩＺＥ／ＭＡＸ＿ＤＡＴＡ）としているのは、ＳＥＮＤ＿ＳＩＺＥをＭＡＸ＿ＤＡＴＡに換算するためである。最大送信サイズ推定機能を具備しない構成においては、受信可能であるデータサイズ（ＳＥＮＤ＿ＳＩＺＥ）を所定値（例えばＭＳＳ）などにするとよい。また、ＡＣＫ処理性能推定機能を具備しない構成において、ＡＣＫを作成し送信する処理時間（ＡＴ）を０、受信データ処理性能推定機能を具備しない構成においては、次に受信可能なデータ領域を確保するまでの時間（ＤＴ）を０などにするとよい。Ｓ３２でｔｈを推定後、Ｓ３３に遷移する。Ｓ３３は、レート制御ステップ（図６参照）の送信間隔（Δｔ）を推定する。送信レートは、ＳＥＮＤ＿ＳＩＺＥのデータをΔｔ間隔開けて送信するため、算出するΔｔは、
Δｔ＝ＳＥＮＤ＿ＳＩＺＥ／ｔｈ
となる。Δｔ推定後、Ｓ３４に遷移する。Ｓ３４では、性能推定処理でもとめたΔｔおよびＳＥＮＤ＿ＳＩＺＥを、図７の性能推定部１１０５からレート制御部１１０６に渡し、Ｓ３５に遷移する。Ｓ３５では、性能推定処理で保持していた変数をクリアし、性能推定値算出ステップ（Ｓ３）は終了する。
【０１１２】
次に、取捨選択可能な機能である「最大送信サイズ推定機能」、「ＡＣＫ処理性能推定機能」および「受信データ処理性能推定機能」の詳細な説明を図１２、図１３および図１４のフローチャートの例を用いて説明する。
【０１１３】
＜最大送信サイズ推定機能＞
最大送信サイズ推定機能は、送信レート制御ステップ（図６参照）で、間隔をかけずに通信装置１が連続で送信する最大送信サイズ（ＳＥＮＤ＿ＳＩＺＥ）を推定する。通信装置２からのＡＣＫのＮｕｍを確認することにより、通信装置１の複数回のパケット送信に対して、通信装置２が何回に１回にＡＣＫを送信しているかを調査する。最大送信サイズ推定機能の処理を、図１２を用いて以下に説明する。
【０１１４】
図１２において、Ｓ２４１はＳＥＮＤ＿ＳＩＺＥの判断を行なう。ＳＥＮＤ＿ＳＩＺＥにすでに値がある場合は、図１０のＳ２５へ遷移する。ＳＥＮＤ＿ＳＩＺＥの値がない場合は、Ｓ２４２に遷移し、ＳＥＮＤ＿ＳＩＺＥを推定する。Ｓ２４２で、最大受信可能容量ステップ（Ｓ１）で保持しているＮｕｍ１とＮｕｍを減算することによりＳＥＮＤ＿ＳＩＺＥを推定する。
【０１１５】
ＳＥＮＤ＿ＳＩＺＥ＝Ｎｕｍ−Ｎｕｍ１
これにより、最大送信サイズ推定機能の処理は終了し、図１０のＳ２５へ遷移する。
【０１１６】
＜ＡＣＫ処理性能推定機能＞
ＡＣＫ処理性能推定機能は、通信装置２のデータの受信と、受信したデータに対するＡＣＫを作成し送信する処理時間（ＡＴ）を推定する。通信装置１が連続で送信したデータに対して、どれだけの間隔でＡＣＫを返答しているかによって、通信装置２のＡＣＫ処理性能を推定する。ＡＣＫ処理性能推定機能の処理を、図１３を用いて以下に説明する。
【０１１７】
図１３において、Ｓ２５１でＡＴに値があるかないかの判断を行なう。ＡＴ値がある場合は、すでにＡＣＫ処理性能を推定済であるため、ＡＣＫ処理推定機能の処理は終了し、図１０のＳ２６に遷移する。Ｓ２５１でＡＴに値がない場合、Ｓ２５２においてＡＣＫの到着時間（ｔ１）に値があるかの判定を行なう。ｔ１に値がない場合は、Ｓ２５３に遷移し、ＡＣＫの到着時間（ｔ１）に今回のＡＣＫ到着時間（ｔ）を代入し、保持する。ここで、ＡＣＫ処理性能推定機能の処理は終了し、図１０のＳ２６に遷移する。また、Ｓ２５２のＡＣＫの到着時間（ｔ１）に値がある場合は、Ｓ２５４に遷移する。Ｓ２５４で、今回のＡＣＫの到着時間（ｔ）と前回のＡＣＫの到着時間（ｔ１）の差分より、受信したデータに対するＡＣＫを作成し送信する処理時間（ＡＴ）を推定する。
【０１１８】
ＡＴ＝ｔ−ｔ１
これにより、ＡＣＫ処理性能推定機能の処理は終了し、図１０のＳ２６に遷移する。
【０１１９】
＜受信データ処理性能推定機能＞
受信データ処理性能推定機能は、通信装置２が通信装置１から受信したデータを処理し、処理したデータの領域を開放することにより、次に受信可能なデータ領域を確保するまでの時間（ＤＴ）を推定する。通信装置２からの、ＷｉｎＵｐｄａｔｅのＡＣＫとＷｉｎＵｐｄａｔｅの前に到着したＡＣＫの到着時間より受信データ処理性能を推定する。受信データ処理性能推定機能の処理の詳細を、図１４のフローチャートの例を用いて説明する。
【０１２０】
図１４において、ＡＣＫの到着時刻（ｔ）をｔ３に代入し保持する。そして、前回のＡＣＫ受信時に図８の到着時刻測定ステップ（Ｓ２）で測定し保持してある到着時刻（ｔ２）との差分より推定する。
【０１２１】
ＤＴ＝ｔ３−ｔ２
これにより、受信データ処理性能推定機能の処理は終了し、図１１のＳ３２に遷移する。
【０１２２】
［最大送信サイズ推定機能の効果］
最大送信サイズ推定機能を具備することによって、相手端末がＡＣＫ処理を行なうのに一番効率のよい送信サイズで送信することが可能である。本実施の形態では、通信装置２が送信データを２つ受信するのに対し、１回のＡＣＫを返す（Ｄｅｌａｙｅｄ  ＡＣＫ）を用いるため、２つ分のデータサイズがＳＥＮＤ＿ＳＩＺＥとなり、これにより通信装置２のＡＣＫ処理の効率を向上させることが可能となる。
【０１２３】
[ＡＣＫ処理性能推定機能の効果]
ＡＣＫ処理性能推定機能を具備することによって、相手端末の受信したデータに対するＡＣＫを作成するまでの処理性能を推定できることができ、相手端末の性能をより正確に推定できる。
【０１２４】
［受信データ処理性能推定機能の効果］
受信データ処理性能推定機能を具備することによって、処理したデータの領域を開放することにより、次に受信可能なデータ領域を確保するまでの性能が推定することができ、相手端末の性能をより正確に推定できる。
【０１２５】
以上、性能推定処理を行なうことで、相手通信装置の性能を推定することが可能となる。本発明の性能推定処理のうち、ＡＣＫ処理性能推定機能および受信データ処理性能推定機能を取捨選択して使用することも可能である。相手通信装置のリソースが十分ある場合に関しては、相手通信装置のデータを処理する性能やＡＣＫを処理する性能を考慮する必要がないため、どちらかまたは両方の機能を制限して使ってもよい。相手通信装置のリソースが十分でない場合は、両方の機能を有効にし、相手通信装置の正確な性能を推定し相手通信装置性能を最大限に活かした送信レートで送信することができる。
【０１２６】
＜＜通信装置１のレート制御処理（レート制御機能）＞＞
以下、通信装置１のレート制御処理（レート制御機能）を説明する。
【０１２７】
レート制御処理は、通信装置１と通信装置２のシーケンス例（図６参照）のレート制御ステップにおける送信レート制御を行う。レート制御処理は、性能推定ステップで推定された通信装置２の性能を基に、データ量、送信間隔を制御することにより通信装置１から送信されるデータのレート制御行なうレート制御機能を持つ。
【０１２８】
＜レート制御機能＞
レート制御機能は、図７において、性能推定部１１０５より送信データ量（ＳＥＮＤ＿ＳＩＺＥ）と送信間隔（Δｔ）をレート制御部１１０６に渡されることにより処理が開始し、レート制御を行なう。また、データ管理部１１０４においてパケットロスを検知した場合に、データ管理部１１０４からレート制御部１１０６にレートを下げるように通知されることによって、送信レートを変更する処理を行なう。
【０１２９】
次に、レート制御処理を図１５のフローチャートを用いて説明する。性能推定部１１０５（図７参照）より、送信データ量（ＳＥＮＤ＿ＳＩＺＥ）および送信間隔（Δｔ）の通知を受けることにより（Ｓ５２）、ＳＥＮＤ＿ＳＩＺＥを設定する（Ｓ５３）。また、タイマにΔｔを設定し（Ｓ５４）、タイマが起動する（Ｓ６０）。タイマ起動後は、通知待ちに戻り（Ｓ５１）、次の通知を待つ状態になる。タイマは起床間隔（Δｔ）間隔で動作し（Ｓ６１）、起床したタイミングで、送信データ（ＳＥＮＤ＿ＳＩＺＥ）をデータ管理部１１０４（図７参照）にデータ量（ＳＥＮＤ＿ＳＩＺＥ）を通知する（Ｓ６２）。また、データ管理部（図７参照）により通知があった場合は（Ｓ５２）、タイマに設定してあるΔｔを増加させて再設定し（Ｓ５４）、タイマは起床間隔（Δｔ）を再設定し再起動する（Ｓ５４）。タイマ再起動後は、通知待ちに戻る（Ｓ５１）。タイマは再設定した起床間隔（Δｔ）間隔で動作し（Ｓ６１）、起床したタイミングで、送信データ（ＳＥＮＤ＿ＳＩＺＥ）をデータ管理部１１０４（図７参照）にデータ量（ＳＥＮＤ＿ＳＩＺＥ）を通知する（Ｓ６２）。
【０１３０】
［レート制御機能の効果］
レート制御機能を具備することにより、相手通信装置が受信可能な間隔で送信することができる。そのため、相手通信装置の性能を最大限に活かしたレートでの送信を行なうことが可能である。
【０１３１】
以上、レート制御処理を行なうことで、相手通信装置が受信可能なタイミングで送信することができる。これにより、相手通信装置の性能を最大限に活かした性能での通信が可能になる。
【０１３２】
＜＜通信装置１のデータ管理方法＞＞
本発明の通信装置１のデータ管理部１１０４におけるデータ管理方法は、図６に示す通信シーケンスで性能推定ステップにおいては、従来のＴＣＰのＷｉｎｄｏｗ制御のデータ管理方法と同じである。しかし、性能推定ステップが終了し、レート制御ステップに移行した場合、通信装置２からのＡＣＫの受信を待たないレート制御を行なうため、従来のＴＣＰのＷｉｎｄｏｗ制御のデータ管理方法とは異なる。性能推定ステップではデータ管理部１１０４（図７参照）は、ＡＣＫ受信時にＡＣＫ処理部からＡＣＫのパラメータであるＮｕｍ、Ｗｉｎを受け取ってから、送信するタイミング決定している。それとは異なり、レート制御ステップでは、レート制御部に任意のタイミング（Δｔ）間隔で送信を指示されるタイミングでデータを送信するためである。
【０１３３】
データ管理方法に関して、レート制御ステップにおいてパケット消失が発生しない場合の通常時の例と、レート制御ステップにおいてパケット消失が発生した場合の例を以下に説明する。
【０１３４】
＜＜データ管理方法（パケットが消失しない場合）＞＞
通信装置１と通信装置２のシーケンス例を示す図（図６）に従って、データ管理方法について図９を参照しながら説明する。図１６では、通信装置１のＷｉｎｄｏｗ状態で番号は、Ｓｅｑを示しており、通信装置２に送達確認を行なっていないため、通信装置１で該当するＳｅｑの送信データの領域を、未到達であった場合の再送に備えて、通信装置１のメモリ内に確保していることを示している。また、点線で囲んである部分は拡張したＷｉｎｄｏｗである。
【０１３５】
Ｐ２１（図６参照）を受信した場合の通信装置１のＷｉｎｄｏｗ状態をＷ２１に示す。Ｐ２１のＡＣＫのパラメータはＷｉｎ＝４、Ｎｕｍ＝１であるため通信装置１はＳｅｑ＝１〜Ｓｅｑ＝４の送信するデータのメモリ領域を獲得し、データを保持する。
【０１３６】
次に、Ｐ２２（図６参照）を受信した場合の通信装置１のＷｉｎｄｏｗ状態をＷ２２に示す。Ｐ２２のＡＣＫのパラメータはＷｉｎ＝２、Ｎｕｍ＝３であるため、Ｎｕｍ＝３よりも前のＳｅｑ（Ｓｅｑ＝１、Ｓｅｑ＝２）は送達確認を行なったため、Ｓｅｑ＝１、Ｓｅｑ＝２のメモリ領域の開放処理を行なう。
【０１３７】
同様に、Ｐ２３（図６参照）を受信した場合の通信装置１のＷｉｎｄｏｗ状態をＷ２３に示す。Ｐ２２のＡＣＫのパラメータはＷｉｎ＝０、Ｎｕｍ＝５であるため、Ｎｕｍ＝５よりも前のＳｅｑ（Ｓｅｑ＝３、Ｓｅｑ＝４）は送達確認を行なったため、Ｐ２２と同様にメモリ領域の開放を行なう。
【０１３８】
次に、Ｐ２４（図６参照）を受信した場合の通信装置１のＷｉｎｄｏｗ状態をＷ２４に示す。Ｐ２２のＡＣＫのパラメータはＷｉｎ＝４、Ｎｕｍ＝５であるため、Ｓｅｑ＝５〜Ｓｅｑ＝８のメモリ領域４ＫＢを獲得する。
【０１３９】
ここまでは、従来のＴＣＰと同様のＷｉｎｄｏｗ制御におけるメモリ管理方法と同じである。以下、レート制御ステップにおけるデータ管理方法を示す。
【０１４０】
Ｐ１５、Ｐ１６、Ｐ１７、Ｐ１８（図６参照）送信時の、Ｗｉｎｄｏｗ状態はＷ２４と同様である。
【０１４１】
Ｐ１９、Ｐ２０送信は、通信装置２からのデータ受信確認のＡＣＫを待たずに行なう。次におくるデータのメモリ領域を確保していないため、Ｗ１９の点線で示すようにメモリ領域を新たに送信する２ＫＢ分のメモリを獲得し、獲得したメモリ領域に関してもデータ管理を行なう。
【０１４２】
また、Ｐ２５の受信時はＡＣＫ処理部（図６参照）よりＮｕｍ＝７、Ｗｉｎ＝２を受け取り、Ｓｅｑ＝６、Ｓｅｑ＝７のメモリ領域を開放し、Ｗ２５の状態になる。このように、データ受信確認のＡＣＫを待たずにデータ送信を行なう場合は、通信装置２から通知されたＡＣＫのＷｉｎを超える場合であっても、新たにメモリを獲得しデータ管理を行なう。また、通信装置２からのデータ受信確認を受けた場合に、送達確認をしたＳｅｑのデータに対してメモリの開放を行なう。
【０１４３】
＜＜データ管理方法（パケット消失が発生した場合）＞＞
次に、図６に示すシーケンス例のレート制御ステップにおいて、パケットが消失した場合の、通信装置１のデータ管理部１１０４におけるデータ管理方法について通信装置１と通信装置２のシーケンス（図１７）を用いて説明する。説明を簡略化するために１パケット内に格納されるデータ長（ＬＥＮ）を１ＫＢにし、ＳｅｑやＷｉｎの単位や値も、これに合わせている。また、図１７において、通信装置１での性能推定ステップに関しては、前述と同様であるため、ここでは省略し、レート制御ステップが始まったところを示す。送信レートの送信間隔（Δｔ）、送信量（ＳＥＮＤ＿ＳＩＺＥ）、通信装置２の最大受信可能なメモリ量（ＭＡＸ＿ＤＡＴＡ）は先ほどの説明と全く同じ値を用いる。図の左側は、通信装置１における通信装置１のＷｉｎｄｏｗ状態を示している。先ほど説明した図６の例と同様に、Ｗｉｎｄｏｗ状態で番号は、Ｓｅｑを示しており、通信装置２に送達確認を行なっていないため、通信装置１で該当するＳｅｑの送信データの領域を、未到達であった場合の再送に備えて、通信装置１のメモリ内に確保していることを示している。また、点線で囲んである部分は拡張したＷｉｎｄｏｗである。
【０１４４】
図１７において、通信装置１がレート制御を開始し、２ＫＢずつΔｔ間隔を空けて送信していることを示している。ネットワークが負荷状態であったため、通信装置１から送信されるＰ１１のデータが通信装置２に到達せず、パケットが消失している。その場合についてのデータ管理方法を説明する。
【０１４５】
パケット消失が発生した場合、データ管理方法は、以下の３つの機能が含まれる。
【０１４６】
・即時再送機能
ＤｕｐＡｃｋを受信した場合に、即時に再送を行なう
・ロスデータ推定機能
ロスしたデータを推定し、再送要求が来る前に先に再送する
・レート低下機能
ロス発生時にレート制御部にレートをおとすようにレート制御部に通知する
本発明においてパケット消失が発生した場合のみ、これら３つの機能が有効になる。それぞれ機能は取捨選択することによって実現することが可能である。以下の説明においては、性能推定処理は上記３つの機能をすべて具備した場合を例として記述するが、これらのうち１つのみ、あるいはいずれか２つの機能のみを具備した場合の説明も同様であり、ここでは説明を省略する。パケット消失が発生したシーケンス例を用いて各機能部に関する詳細を以下に説明する。
【０１４７】
＜即時再送機能＞
通信装置１のデータ管理部１１０４における即時再送機能に関して、図１７の通信装置１および通信装置２のシーケンス例を用いて説明する。
【０１４８】
図１７において、通信装置１において、送信したＰ１１が消失したことを検知するのは、Ｐ１５およびＰ１６を送信後、通信装置２からの、ＤｕｐＡｃｋ（Ｐ２１）を受信した時である。通信装置１は、ＤｕｐＡｃｋの情報にふくまれるＮｕｍがＮｕｍ＝１であるため、Ｓｅｑ＝１のデータを即時に再送する（Ｐ１７）。その後、Δｔ×２倍の間隔をあけて、Ｓｅｑ＝５のデータから随時送信を始める。従来のＴＣＰでは、ＤｕｐＡｃｋを３つ受信してから、ＤｕｐＡｃｋのＮｕｍに該当するＳｅｑのデータを再送するが、通信装置１は、再送によるスループット低下を最小限に抑えるために、ＤｕｐＡｃｋを１つ受信してから該当するＮｕｍのＳｅｑ＝５のデータ（Ｐ１７）をすぐに再送を行なう。
【０１４９】
以上、ＤｕｐＡｃｋを受信した場合に、該当するパケットを即時に再送する即時再送機能である。
【０１５０】
なお、即時再送機能を無効にする場合は、従来のＴＣＰ同様に、ＤｕｐＡｃｋを３つ受信してから、該当するデータの再送を行なうようにするとよい。
【０１５１】
＜ロスデータ推定機能＞
通信装置１のデータ管理部１１０４におけるロスデータ推定機能に関して、図１７の通信装置１および通信装置２のシーケンス例を用いて説明する。
【０１５２】
通信装置１は、再送パケット（Ｐ１７）の次に、Ｐ１５、Ｐ１６ですでに送信しているにもかかわらず、Ｓｅｑ＝５から順次送信を再開する。これは、通信装置２の最大のＷｉｎが４であるため、Ｓｅｑ＝１〜Ｓｅｑ＝４までしか保持できないと推測できる。そのため、Ｓｅｑ＝１のパケットを消失した場合、通信装置２は４ＫＢの受信可能なデータ量のうちＳｅｑ＝２〜４までを保持し、さらに消失したＳｅｑ＝１を受信するために１つのデータ領域を確保しているため、Ｓｅｑ＝５以降のパケットは受信できないと予想できる。つまり、通信装置１で拡張したＳｅｑ＝５以降のデータを通信装置２では受信できない。よって、再送パケット（Ｐ１７）を送信後、Ｓｅｑ＝５から随時送信を開始する必要がある。
【０１５３】
＜レート低下機能＞
さらに、再送パケットを送信した後、次のパケットを送信するのにΔｔ×２の間隔をあけるのは、通信装置２が送信量（ＳＥＮＤ＿ＳＩＺＥ＝２ＫＢ）を処理する（受信可能なメモリ領域を確保する）のにかかる処理時間がΔｔであるため、Ｓｅｑ＝１のデータを受信した後にＳｅｑ＝１〜Ｓｅｑ＝４までの４ＫＢのデータを処理すると推定し、Δｔを２倍にしている。
【０１５４】
次に、図６に示すシーケンス例のレート制御ステップにおいて、連続でパケットが消失した場合の通信装置１と通信装置２のシーケンス例を図１８に示す。連続でパケット消失が発生した場合の通信装置１データ管理方法を図１８の通信装置１と通信装置２のシーケンス例を用いて以下に説明する。
【０１５５】
図１８において、通信装置１がレート制御を開始し、２ＫＢずつΔｔ間隔を空けて送信していることを示している。ネットワークが負荷状態であったため、通信装置１から送信されるＰ１１、Ｐ１２のデータが通信装置２に到達せず、連続でパケットが消失している。その場合についてのデータ管理方法を説明する。図１８は、図１７と同様に説明を簡略化するために１パケット内に格納されるデータ長（ＬＥＮ）を１ＫＢにし、ＳｅｑやＷｉｎの単位や値も、これに合わせている。また、図１８において、通信装置１での性能推定ステップに関しては、ここでは省略し、レート制御ステップが始まったところを示し、送信レートの送信間隔（Δｔ）、送信量（ＳＥＮＤ＿ＳＩＺＥ）、通信装置２の最大受信可能なメモリ量（ＭＡＸ＿ＷＩＮ）は先ほどの説明と全く同じ値を用いる。図の左側は、通信装置１における通信装置１のＷｉｎｄｏｗ状態を、Ｗｉｎｄｏｗ状態で番号はＳｅｑを示しており、通信装置２に送達確認を行なっていないため、通信装置１で該当するＳｅｑの送信データの領域を、未到達であった場合の再送に備えて、通信装置１のメモリ内に確保していることを示している。また、点線で囲んである部分は拡張したＷｉｎｄｏｗである。
【０１５６】
通信装置１において、送信したＰ１１が消失したことを検知するのは、Ｐ１５およびＰ１６を送信後、通信装置２からの、ＤｕｐＡｃｋ（Ｐ２１）を受信した時である。さらに、Ｐ１２を消失することを検知するのは、通信装置２からのＤｕｐＡｃｋ（Ｐ２５）を受信した後である。通信装置１は、ＤｕｐＡｃｋの情報にふくまれるＮｕｍがＮｕｍ＝１であるため、即時再送機能によりＳｅｑ＝１のデータを即時に再送する（Ｐ１７）。その後、Δｔ×２倍の間隔をあけて、ロスデータ推定機能よりＳｅｑ＝５のデータから随時送信を始める。また、Ｐ２５受信時に、Ｎｕｍ＝２のＤｕｐＡｃｋでるため連続でパケットを消失したことを通信装置１は検知する。この場合、Ｓｅｑ＝３もパケットロスが発生していると予想できるため、通信装置１は、再送要求のあったＳｅｑ＝２（Ｐ１０１）から順次送信を開始する。
【０１５７】
なお、通信装置１において、データ管理部（図７参照）は、パケット消失を検知した場合にレート制御部１１０６にレート低下を通知し、レート制御部１１０６は通知を受けた場合に送信間隔（Δｔ）を長くする（レート低下機能）などして、レートを落としてもよい。
【０１５８】
［即時再送機能の効果］
即時再送機能を具備することによって、通信装置１においてＤｕｐＡｃｋの所定数の到着を待たずに再送を行ない、再送を早期に解決することができる。これによって、再送によるスループットの低下をおさえることができる。
【０１５９】
[ロスデータ推定機能の効果]
ロスデータ推定機能を具備することによって、通信装置２が受信できていないデータを先読みし、通信装置２から再送要求を受け取る前に再送を行なうことができる。これによって、輻輳制御を削減し、再送によるスループットの低下を抑えることができる。
【０１６０】
［レート低下機能の効果］
レート低下機能を具備することによって、パケット消失が発生することにより、レートを低下させることができる。これにより、ロス発生率を防止し、パケット消失の再発を抑えることができる。
【０１６１】
以上、レート制御処理を行うことで、相手通信装置が受信可能な最大のレートで送信することができる。これにより、相手通信装置の性能を最大限に活かした性能での通信が可能になる。
【０１６２】
［効果］
以上の処理を行なうことで、相手通信装置のリソースが十分でない場合であっても、相手通信装置の性能を最大限に活かしたスループットで通信を可能にする効果と、ＲＴＴが長い場合でもスループットを低下させない効果と、パケット消失時に再送が発生することによるスループットの低下を最小限に抑える効果とがある。実施の形態で示した例が、本発明の効果すべてを発揮することができる一例である。一方、効果は制限されるが、本発明を使用する用途によっては、機能を制限したり構成要素を縮小することによる実施も可能である。
【産業上の利用可能性】
【０１６３】
本発明は、ＴＣＰに基づく送信処理を行なうあらゆる通信装置に適用可能である。
【図面の簡単な説明】
【０１６４】
【図１】ネットワーク構成例を示す図
【図２】Ｗｉｎｄｏｗ制御を表す通信装置１と通信装置２のシーケンス例を示す図
【図３】通信装置２（受信側）の性能が低い場合の通信装置１と通信装置２のシーケンス例を示す図
【図４】特許文献１のシーケンス例を示す図
【図５】本発明の実施の形態におけるネットワーク構成例と通信装置１のハードウェア構成例を示す図
【図６】本発明の実施の形態におけるシーケンス例を示す図
【図７】本発明の実施の形態おける通信装置１の機能構成図
【図８】本発明の実施の形態における通信装置１の性能推定処理のフローチャート
【図９】本発明の実施の形態における通信装置１の性能推定処理のフローチャート（１）
【図１０】本発明の実施の形態における通信装置１の性能推定処理のフローチャート（２）
【図１１】本発明の実施の形態における通信装置１の性能推定処理のフローチャート（３）
【図１２】本発明の実施の形態における通信装置１の最大送信サイズ推定機能のフローチャート
【図１３】本発明の実施の形態における通信装置１のＡＣＫ処理性能推定機能のフローチャート
【図１４】本発明の実施の形態における通信装置１の受信データ処理性能推定機能のフローチャート
【図１５】本発明の実施の形態における通信装置１のレート制御処理のフローチャート
【図１６】本発明の実施の形態における通信装置１のＷｉｎｄｏｗ状態を示す図
【図１７】本発明の実施の形態におけるパケットロス時の通信装置１と通信装置２のシーケンス図
【図１８】本発明の実施の形態における連続パケットロス時の通信装置１と通信装置２のシーケンス図
【図１９】通信装置２（受信側）のハードウェア構成例を示す図
【符号の説明】
【０１６５】
１    通信装置１（送信側）
２    通信装置２（受信側）
３    ネットワーク
１０    パケット
１００    通信部
１０１    ＣＰＵ
１０２    記憶部
１０３    システムバス
１５１    受信用ＦＩＦＯメモリ
１５２    送信用ＦＩＦＯメモリ
１１０１    送信部
１１０２    受信部
１１０３    ＡＣＫ処理部
１１０４    データ管理部
１１０５    性能推定部
１１０６    レート制御部
【図１】
2008053888.tif 000003
【図２】
2008053888.tif 000004
【図３】
2008053888.tif 000005
【図４】
2008053888.tif 000006
【図５】
2008053888.tif 000007
【図６】
2008053888.tif 000008
【図７】
2008053888.tif 000009
【図８】
2008053888.tif 000010
【図９】
2008053888.tif 000011
【図１０】
2008053888.tif 000012
【図１１】
2008053888.tif 000013
【図１２】
2008053888.tif 000014
【図１３】
2008053888.tif 000015
【図１４】
2008053888.tif 000016
【図１５】
2008053888.tif 000017
【図１６】
2008053888.tif 000018
【図１７】
2008053888.tif 000019
【図１８】
2008053888.tif 000020
【図１９】
2008053888.tif 000021