(57)【要約】【課題】  広帯域、高遅延無線ネットワークにおけるTCP通信の問題を解決し、高速なTCP通信を可能にするTCP輻輳制御方式を提供することである。【解決手段】  TCPのスロースタートアルゴリズムと輻輳回避アルゴリズムに基づく輻輳ウインドウサイズへ通信中に測定した帯域から得た測定ウインドウサイズを足し、輻輳ウインドウサイズの増加を加速させる方法と、重複ACKにより判明するデータロス後の輻輳ウインドウサイズとスロースタート閾値を測定ウインドウサイズを基に設定する方法と、ACKのロスや遅延により発生するタイムアウト後の不要な送信レートの低下とデータの誤再送を防ぐために、プローブパケットを利用してACKのロス、遅延を検出し、データのタイムアウト後の輻輳ウインドウサイズとスロースタート閾値をタイムアウト発生前に設定することで、送信レートの低下を防ぐ方法により解決を行う。【選択図】図１
2006173961.tif 000002
【特許請求の範囲】
【請求項１】
通信中に通信ネットワークの帯域を測定し、測定した値から得られる、ネットワーク帯域を最大限利用できるウインドウサイズ（以下、測定ウインドウサイズと呼ぶ）を用いて輻輳ウインドウサイズの増加率を大きくする方式と、測定ウインドウサイズを利用して重複ACKにより判明するデータロス後のTCPの輻輳ウインドウサイズおよびスロースタート閾値を設定する方式と、再送タイムアウト後にデータセグメントの確認応答であるACKセグメントのロスおよび遅延を検出することによりデータの誤再送を防ぐと共に輻輳ウインドウサイズを減少させないことで、送信レートの低下を防ぐ方式からなる、広帯域かつ高遅延な無線ネットワークにおけるTCP通信を高速化することを特徴とするTCP輻輳制御方式。
【請求項２】
請求項１において、TCPの輻輳ウインドウサイズの増加アルゴリズムである、スロースタートアルゴリズムと輻輳回避アルゴリズムに基づく輻輳ウインドウサイズの値に、通信中の測定帯域から得られた測定ウインドウサイズを足すことで、広帯域かつ高遅延ネットワークにおいて、通信開始時からの輻輳ウインドウの増加を加速させることを特徴とするTCP輻輳制御方式。
【請求項３】
請求項１において、ネットワーク帯域の測定を行うもので、帯域をACKの到着間隔とACKが通知するデータ受信量を利用して測定し、計測した帯域と過去の帯域およびネットワーク状況に合わせて動的に変化させる平滑化係数を利用して現在の帯域値を導出するため、様々なネットワーク環境に対応可能なことを特徴とするTCP輻輳制御方式。
【請求項４】
請求項１において、再送タイムアウト後の輻輳ウインドウサイズとスロースタート閾値の設定を行うもので、再送タイムアウトの発生後、プローブパケットを送信し、その応答ACKからタイムアウトの原因がデータのロスかそれともACKのロスまたは遅延によるものかを判定し、再送タイムアウトの原因がデータのロスであれば、ネットワークが重い輻輳状態であると判断し、該当データの再送および輻輳ウインドウサイズを初期値に設定し、またスロースタート閾値を測定ウインドウサイズに設定した後に送信を再開し、再送タイムアウトの原因がACKロスまたは遅延であるならば、該当データの送信は行わず輻輳ウインドウサイズおよびスロースタート閾値を再送タイムアウト前の値に設定することで、ACKのロスまたは遅延により再送タイムアウトが発生した時の通信を高速化することを特徴とするTCP輻輳制御方式。
【請求項５】
請求項４において、再送タイムアウトの原因調査に利用するプローブパケットとして、データ送信側がタイムアウト発生までに送信したデータの内、最大のシーケンス番号を持つデータを利用し、データ送信側主導でデータ受信側にそれまでに受信したデータの最大シーケンス番号を通知させることを特徴とするTCP輻輳制御方式。
【請求項６】
請求項４において、データのロスとACKのロスまたは遅延を判定する際、プローブパケットのシーケンス番号（以下、Psegと呼ぶ）と、プローブパケットに対するACKにより通知されるデータ受信側がそれまでに受信した最新のデータのシーケンス番号（以下、Packと呼ぶ）を利用し、PsegがPackよりも大きい値（Pseg>Pack）であれば、データのロスが発生していると判断し、PsegがPack以下の値（Pseg<=Pack）であれば、ACKのロスまたは遅延が発生していると判断することを特徴とするTCP輻輳制御方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広帯域かつ高遅延な無線ネットワークにおけるTCP通信を高速化する技術に関するものである。
【背景技術】
【０００２】
現在、多くのOSに標準で実装されている従来のTCPの輻輳制御方式では、輻輳ウインドウサイズの増加を2つのアルゴリズム（スロースタートアルゴリズムと輻輳回避アルゴリズム）に基づいて行う。
【０００３】
スロースタートアルゴリズムは、通信開始時から実行されるアルゴリズムで、輻輳ウインドウサイズがスロースタート閾値と呼ばれる値よりも小さい時に実行される。スロースタートアルゴリズムでは、輻輳ウインドウサイズの初期値を1セグメントサイズ分とし、送信したセグメントに対するACKが１つ戻る毎に1セグメントサイズ分だけ輻輳ウインドウサイズを増加させる。一方、輻輳回避アルゴリズムは、輻輳ウインドウサイズがスロースタート閾値以上の時、実行されるアルゴリズムである。輻輳回避アルゴリズムでは、輻輳ウインドウサイズ分のセグメントに対するACKが戻る毎に１セグメントサイズ分だけ輻輳ウインドウサイズを増加させる。従って、輻輳ウインドウサイズがスロースタート閾値になるまでは、スロースタートアルゴリズムにより指数的に輻輳ウインドウサイズを増加させ、その後は輻輳回避アルゴリズムにより線形的に輻輳ウインドウサイズを増加させる。
【０００４】
しかしながら、従来の輻輳ウインドウサイズ増加アルゴリズムには、次のような問題がある。伝搬遅延時間の小さいネットワークでは、データを送信してからACKが戻ってくるまでにかかる時間（ラウンドトリップ時間）が小さいため、迅速に輻輳ウインドウサイズが大きくなる。しかしながら、伝搬遅延時間が大きくなると、ラウンドトリップ時間も大きくなるため、輻輳ウインドウサイズの増加速度が非常に遅くなる。特に衛星回線のような非常に伝搬遅延時間が大きな回線がネットワーク内に存在すると、この増加速度の低下は顕著となる。さらに、利用可能な帯域が非常に大きい（数百Mbpsから数Gbps）場合、最大性能が得られる輻輳ウインドウサイズに増加するまでに非常に時間がかかることになる。
【０００５】
この解決策として、Dummyセグメントと呼ばれる特殊なセグメントを利用してネットワークの帯域を測定し、送信開始後すぐに測定帯域を用いて輻輳ウインドウサイズを増加させる改良方式が提案されている。（例えば、非特許文献１参照。）この改良方式で提案されているDummyセグメントは送信データセグメントの複製で、優先度が低く再送は行われない。従って、ルータで輻輳が発生した場合、Dummyセグメントは優先的にルータで破棄される。しかしながら改良方式は、送信側だけではなく受信側と中間に存在するすべてのルータでDummyセグメントを扱う制御を導入する必要がある。従って、インターネットに存在するルータ数は膨大であることを考慮すると、改良方式を実現することは非常に困難であるという問題がある。
【０００６】
【非特許文献１】I．F．Akyildiz，G．Morabito，S．Palazzo：“TCP-Peach：A New Congestion Control Scheme for Satellite IP Newtorks，” IEEE/ACM Transactions of Networking，9，3，pp.307-321，June 2001．
【０００７】
次に、従来のTCPの輻輳制御方式ではデータロスが発生すると、輻輳が発生していると判断する。ただし、この場合データロスは、３つ以上の重複ACKの受信により判明する。するとTCPはネットワークの帯域を圧迫して更なる輻輳を発生させないために、輻輳ウインドウサイズをデータロスが発生した時の値の半分の値に設定する。しかしながら、データのロスは輻輳だけが原因ではなく、伝送路で発生するビット誤りによっても起こる。特に、無線ネットワークでは、途中経路における降雨や障害物などにより、有線ネットワークに比べて頻繁にビット誤りが発生する。ビット誤りによるデータロスが発生した場合、輻輳が発生している訳ではないため、ネットワークの帯域を圧迫しないよう輻輳ウインドウサイズを半減する必要はない。従って、従来のTCPを無線ネットワークに適用すると、ビット誤りによるデータロスが有線ネットワークと比較して頻繁に発生するため、性能が大きく劣化する問題がある。
【０００８】
このビット誤りによるデータロス発生時における性能劣化を防ぐために、ネットワークの帯域を測定し、帯域の測定値を基にデータロス後の輻輳ウインドウサイズを決定する改良方式が提案されている。（例えば、非特許文献２参照。）しかしながら、改良方式で提案されているネットワーク帯域の測定方式は、ある特定のネットワークでしか利用できず、様々なネットワークが混在するネットワークで利用すると帯域の追随性能が低下し、測定帯域の精度が下がる問題がある。
【０００９】
【非特許文献２】佐藤徳彦，國司光宣，寺岡文男：“TCP-J：無線ネットワークに適したトランスポートプロトコル，”情報処理学会論文誌，43，12，pp.38483858，Dec．2002．
【００１０】
また、従来のTCPの輻輳制御方式では、再送タイマーと呼ばれるタイマーを保持している。TCPは通信途中にラウンドトリップ時間を測定し、この測定時間を基に再送タイマーの値を設定している。再送タイマーは、データを送信するときにセットされ、再送タイマーが切れる（以下、再送タイムアウトと呼ぶ）とデータを再送するという動作を行う。再送タイムアウトが発生すると、TCPはネットワークに重い輻輳が発生していると判断し、輻輳ウインドウサイズを1セグメントサイズ分に設定し、スロースタートアルゴリズムでデータの送信を再開する。
【００１１】
従来のTCP輻輳制御方式では再送タイムアウトの原因がすべて輻輳によるデータロスであると想定している。しかしながら、ACKがバースト的にロスするか、またはACKの到着が一時的にそれまでよりも大きく遅れる場合においても再送タイムアウトは発生する。ただし、この場合、データロスは発生しておらず、輻輳も発生していない。ACKのバースト的なロスは無線ネットワークにおけるビット誤りによって良く起こる。また、ACKの遅延によるタイムアウトは、衛星ネットワークのように高速で伝搬遅延時間が非常に安定しているネットワークで起こりやすいことが知られている。従来のTCP輻輳制御方式では、このようなACKのロスまたは遅延について考慮されていない。また、従来のTCP輻輳制御方式は、送信側主導で再送タイムアウトの原因を探る機能を持っていない。しかも、受信側からACKのロスまたは遅延が発生していることを送信側に通知する機能もない。従って、高速で遅延が安定している無線ネットワークにおいてよく発生するACKのロスまたは遅延が発生した場合、再送タイムアウトの原因は輻輳ではないにも関わらず、ACKのロスまたは遅延を検出する方法がないため、従来のTCP輻輳制御方式のようにスロースタートアルゴリズムを実行し転送レートを下げる。さらに、この場合ACKのロスまたは遅延が発生しただけで、データは受信されているにも関わらず、データが失われたと誤った判断を行い、データを誤再送することになる。その結果、著しい性能の低下が起こり問題となる。
【００１２】
この解決策として、再送タイムアウトが発生しデータを再送した後に、再送データのラウンドトリップ時間と再送タイムアウトが発生するまでのラウンドトリップ時間の大小関係を見ることでACKの遅延を検出する改良方式が提案されている。（例えば、非特許文献３参照。）しかしながら、この改良方式はACKの遅延を考慮しているだけで、ACKがロスした場合に対応できないという問題がある。また、改良方式はACKの遅延を検出すると、再送タイムアウト後の輻輳ウインドウサイズを1セグメントサイズ分に設定するため、ACKの遅延を検出できてもスループットの低下を避けることができないという問題もある。
【００１３】
【非特許文献３】長谷川剛，村田正幸，宮原秀夫：“誤再送を考慮したTCPのふくそう制御方式/エラー回復方式の改善，”電子情報通信学会  論文誌  通信B，J82-B，11，pp.2074-2084．Nov．1999．
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は、衛星回線を用いた衛星インターネットのように広帯域、高遅延な無線ネットワークにおいてTCPを利用した際に問題となる、大きな伝搬遅延による輻輳ウインドウ増加率の減少、ビット誤りによるデータロス時に輻輳ウインドウを不必要に低下させる問題、ACKのロスや遅延により発生する再送タイムアウト後にデータの誤再送と不必要な送信レートを低下させる問題すべてを解決し、TCP通信の高速化を実現するTCP輻輳制御方式を提供することを主たる課題とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するために、本発明では、まず、通信中にACKの到着間隔とACKが通知する受信データ量を基に利用可能帯域を測定し、この測定帯域を利用して帯域を最大限に利用できるウインドウサイズ（測定ウインドウサイズ）を導出し、導出した測定ウインドウサイズを、従来TCPのスロースタートアルゴリズムと輻輳回避アルゴリズムに基づく輻輳ウインドウサイズに足すことで、送信開始時から最大性能が得られる大きな輻輳ウインドウサイズでの通信が可能となることを特徴とするTCP輻輳制御方式を提案する。
【００１６】
また、本発明では、３つ以上の重複ACKの受信により判明するデータロス発生後の輻輳ウインドウサイズおよびスロースタート閾値の設定を、重複ACK受信時に測定した利用可能帯域から得られた測定ウインドウサイズを利用して設定することを特徴とするTCP輻輳制御方式を提案する。
【００１７】
また、本発明では、通信中に行うネットワーク帯域の測定の際に、帯域を平滑化する係数をネットワークに合わせて動的に変化させることで、様々なネットワークに対応可能な追随性に優れた帯域測定方式を持つことを特徴とするTCP輻輳制御方式を提案する。
【００１８】
また、本発明では、再送タイムアウトが発生した後、再送タイムアウトの原因がデータのロスであるのか、それとも、ACKのロスまたは遅延によるものかを判断するために、送信側がそれまでに送信した最大のシーケンス番号を持つデータをプローブパケットとして送信し、受信側からそれまでに連続で受信したデータの最大シーケンス番号をACKで通知させる。プローブパケットに対するACKの受信後、プローブパケットのシーケンス番号とプローブパケットに対するACKが通知するシーケンス番号を用いて、データのロス、ACKロスまたは遅延が発生しているかを判断させることを特徴とするTCP輻輳制御方式を提案する。
【００１９】
さらに、本発明では、上記TCP通信方式において、再送タイムアウトの原因がデータのロスであることが分かれば、従来のTCPの動作と同じく、データ再送後に輻輳ウインドウサイズを１データセグメントサイズ分に設定し、スロースタート閾値を測定ウインドウサイズに設定した後、スロースタートアルゴリズムで送信を再開し、ACKのロスまたは遅延が再送タイムアウトの原因であることが分かれば、輻輳ウインドウサイズとスロースタート閾値を再送タイムアウトが発生する前の値に設定し、続きの新しいデータの送信を行うことを特徴とするTCP輻輳制御方式を提案する。
【発明の効果】
【００２０】
本発明によれば、広帯域かつ大きな伝搬遅延時間を持つ無線ネットワークであっても、ネットワークの利用可能帯域を迅速にかつ最大限利用でき、高速なTCP通信が可能となる。また、輻輳ではなく無線ネットワークで頻繁に発生するビット誤りによるデータロス時に不要にデータ送信レートを下げることなく高速なTCP通信が可能となる。さらに、広帯域であるために遅延が安定しているネットワークで発生するACKの遅延や、無線ネットワークで発生し易いビット誤りによるACKのロスが原因で起こる不必要なデータの再送と送信レートの低下を防ぐことができ、データのロスだけではなく、ACKのロスまたは遅延が発生した場合にも、高速なTCP通信が可能となる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して本発明の実施形態を説明する。図１は、本発明に係るTCP輻輳制御方式の全体構成図である。本発明に係るTCP輻輳制御方式は、現在一般的に実装されているTCPの輻輳制御機構１０の上に、４つの機構（１１、１２、１３、１４）を付け加えた構成となる。ただし、現在、広く一般的に利用されているTCPのバージョンはTCP Renoである。図１において、１０は従来のTCPのバージョンであるTCP Renoの輻輳制御機構を示す。１１はネットワークの帯域を測定するネットワーク帯域測定機構を示す。１２は輻輳ウインドウサイズの増加速度を加速させるLWC（Lift Window Control）機構、１３は重複ACKの受信により判明するデータロス発生後の輻輳ウインドウサイズとスロースタート閾値の設定を行うCWS（Congestion Window Setting）機構をそれぞれ示す。１２のLWC機構と１３のCWS機構は、11の機構から得られたネットワークの利用可能帯域を利用して動作する。また、１４は再送タイムアウトの発生後、タイムアウトの原因がデータのロス、ACKロスまたは遅延によるものであるのかを検出し、再送タイムアウト後の輻輳ウインドウサイズとスロースタート閾値の設定を行うAEN（Acknowledgement Error Notification）機構を示す。
【００２２】
本発明方式における、図１のTCP（Original）の輻輳制御機構１０は、現在、一般的に実装されているTCPのバージョンであるTCP Renoの輻輳制御機構を示す。また、本発明方式は受信側が複数のデータのロスを通知可能な選択確認応答（Selective ACKnowledgement、SACK）を用いる場合を想定している。ここで、SACKを利用しない通常のACKは、１つのデータのロスのみ通知可能である。従って、本発明では、TCP(Original)の輻輳制御機構１０はスロースタートアルゴリズム、輻輳回避アルゴリズム、早期再送アルゴリズム、早期回復アルゴリズムの４つのアルゴリズムを含む。
【００２３】
ネットワーク帯域測定機構１１では、受信側から送信されるACKを利用してネットワークの利用可能帯域を測定する。まず、送信側ホストがACKを受信した時刻をt（k）、１つ前のACK受信時刻をt（k-1）、送信データ量をd（k）とする。これらの情報を利用して、帯域のサンプル値BWsample（k）をACKを受信する毎に図２の式を利用して計算する。次に、計算した帯域サンプル値と過去の帯域値を利用し図３の式で平滑化することで、利用可能帯域BWkを導出する。図３において、ある時刻t(k)における利用可能帯域BWkは、過去の利用可能帯域BWk-1および時刻t(k)で取得した帯域のサンプル値BWsample(k)と前回測定の帯域サンプル値BWsample(k-1)の平均値から得られる。ただし、図３において、aは平滑化係数（０<a<１）を示し、通信を行うネットワーク毎に最適な値を設定する必要がある。また、平滑化係数aはネットワークの変動に敏感に反応させるときは、平滑化係数の値を小さくする（０に近づける）。逆にネットワークの激しい変動に対してあまり敏感に反応させたくないときは、平滑化係数を大きくする（１に近づける）。
【００２４】
また、図３における平滑化係数aは、衛星回線のみを使った衛星ネットワークのような特定のネットワークのみを利用して通信する場合、それぞれのネットワークに適した固定値を利用する。インターネットのように、多種多様なネットワークを経由する場合は、ネットワークの状況に合わせて動的に平滑化係数aを設定すると、追随性が向上し、より精度の良い利用可能帯域が導出できる。また、利用可能帯域は平滑化係数が極限値（最大値１、最小値０）に近いと平滑化係数の変化に敏感となる。そこで、動的に平滑化係数aを設定する方法として、極限値に近づくにつれ増減が緩やかになり、それ以外の部分においては線形的に増減する曲線を描く数式の利用が考えられる。ただし、多種多様なネットワークを経由するインターネット上でTCP通信を行う際に、平滑化係数として固定値を利用しても、十分精度の良い帯域値を得ることは可能である。
【００２５】
LWC機構１２では、上記、ネットワーク帯域測定機構１１により得られた利用可能帯域を用いて輻輳ウインドウサイズを増加させる。LWC機構は、まず、図４の式により、帯域を最大限利用できる測定ウインドウサイズcwnd_abeを導出する。図４において、BWは図３の式により得られる利用可能帯域（ただし、BWk=BWとしている。）、MSSは最大セグメントサイズ、RTTminはラウンドトリップ時間RTTの最小値を示す。ここで送信側は、送信開始時から、あるデータの送信時間とそのデータに対するACKの受信時間から得られるRTTを記録しておき、常に最小となる値をRTTminとして保持している。次に、TCP（Original）の輻輳制御機構（図１の１０）のスロースタートアルゴリズムと輻輳回避アルゴリズムにより得られる輻輳ウインドウサイズcwnd_renoに、測定ウインドウサイズcwnd_abeを足すことで、輻輳ウインドウサイズcwndを図５で示される式で導出する。
【００２６】
LWC機構１２において利用する、TCP（Original）の輻輳制御機構（図１の１０）のスロースタートアルゴリズムと輻輳回避アルゴリズムでは、図６に示される式により輻輳ウインドウサイズcwnd_renoが設定される。図６において、スロースタートアルゴリズムは、データ送信開始時およびデータロスによる再送タイムアウトが発生したときに実行され、１つのACKを受信する毎に1セグメントサイズ分だけ輻輳ウインドウサイズcwnd_renoを増加させる。輻輳回避アルゴリズムは、輻輳ウインドウサイズcwnd_renoがスロースタート閾値ssthreshよりも大きくなると実行され、輻輳ウインドウサイズcwnd_reno分のACKを受信するごとに1セグメントサイズ分、輻輳ウインドウサイズcwnd_renoを増加させる。
【００２７】
CWS機構１３では、ネットワーク帯域測定機構１１で導出された利用可能帯域から計算する測定ウインドウサイズcwnd_abeを利用して、３つ以上の重複ACKの受信により判明するデータロス発生後の輻輳ウインドウサイズcwndとスロースタート閾値ssthreshを設定する。図７はCWS機構における輻輳ウインドウサイズとスロースタート閾値の設定の式を示す。図７より、cwndがssthreshよりも小さい場合、ssthreshを測定ウインドウサイズcwnd_abeに設定し、cwndはそれまでの値を保持する。もしcwndがssthresh以上であれば、ssthreshを測定ウインドウサイズcwnd_abeに設定し、cwndはssthresh（つまり測定ウインドウサイズ）に設定する。また、データロスが発生し、上記の方法でcwndを設定した後、TCP(Original)の輻輳制御機構（図１の１０）で保持されている輻輳ウインドウサイズcwnd_renoは、TCP  Renoの通常の動作に従い、半分の値に設定される。
【００２８】
AEN機構１４では、再送タイムアウトが発生すると、タイムアウトの原因がデータロスかまたは、ACKのロス/遅延によるもののどちらであるかを調査する。その結果、AEN機構は再送タイムアウトの原因が分かると、データロスの場合とACKロスまたは遅延の場合でそれぞれ別の動作を行う。
【００２９】
まず、AENの動作概要を説明する。図８の（a）はデータロスにより再送タイムアウトが発生した場合、（b）はACKのロスまたは遅延により再送タイムアウトが発生した場合のAENの動作例をそれぞれ示す。図８において、RTOは再送タイムアウト時間、RTTはラウンドトリップ時間を示す。まず、時刻t0に送信したデータがロスまたは、送信したデータに対するACKがロス/遅延し、時刻t1に再送タイムアウトが発生すると、再送タイムアウトの原因を調査するために、プローブパケットを送信する。ここで、このプローブパケット（以下、AEN-Proveと呼ぶ）として、送信側がそれまでに送信しているデータの内、最大のシーケンス番号を持つデータを利用する。つまり、最新のシーケンス番号を持つ送信済みデータを再送することになる。なお、プローブパケットは、確実に送信するために複数個出すことも可能である。AEN-Proveを受け取った受信側は、それまでに連続して受信したデータの最大のシーケンス番号を示すACK（以下、AEN-ACKと呼ぶ）を送信側に返す。時刻t2でAEN−ACKを受信した送信側は、AEN-Proveのシーケンス番号PsegとAEN-ACKが通知するそれまでに連続して受信したデータの最大シーケンス番号Packを利用して、図９に示すように再送タイムアウトの原因がデータロスであるのか、そえともACKのロスまたは遅延であるのかを判断する。図９において、PsegはAEN-Probeのシーケンス番号、PackはAEN-ACKが通知するシーケンス番号を示す。図９より、PsegがPackよりも大きければ（Pseg>Pack）、データのロスが発生していると判断し、PsegがPack以下であれば（Pseg<=Pack）、ACKのロスまたは遅延が発生していると判断する。
【００３０】
シーケンス番号を用いて判定を行った結果、再送タイムアウトの原因がデータロスである場合、AEN-ACKの通知するシーケンス番号が示すロスしたデータを再送し（図８（a）の時刻t3）、輻輳ウインドウサイズcwndを１セグメントサイズ分にし、スロースタートアルゴリズムで送信を再開する。ただし、スロースタート閾値はネットワーク帯域測定機構から得られる帯域から導出する測定ウインドウサイズに設定する。一方、再送タイムアウトの原因がACKのロスまたは遅延である場合、輻輳ウインドウサイズとスロースタート閾値はそのままの値で、新しい続きのデータ送信を開始する（図８（b）の時刻t3）。
【００３１】
また、上記の判定において、TCP（Original）の輻輳制御機構（図１の１０）では、再送タイムアウトの原因がデータロスであった場合、輻輳ウインドウサイズcwnd_renoは1セグメントサイズ分に設定する。再送タイムアウトの原因がACKのロスまたは遅延である場合は、cwnd_renoの値は変化させない。
【００３２】
次に、AENの詳細な動作について図１０の状態遷移図を用いて説明する。図１０では、ある状態から別の状態に遷移するときの条件とその時に行う動作を（１）から（１４）までの番号で示している。図１０の（１）から（１４）までの項目において、上段はある状態から別の状態に遷移するための条件、下段はある状態から別の状態に遷移する際に行う動作をそれぞれ示す。また、図１０において、PsegはAEN-Probeのシーケンス番号、PackはAEN-ACKが通知するシーケンス番号、NackはAEN-ACKではない通常のACKのシーケンス番号を示す。
【００３３】
ここで、AENで利用するプローブ用のデータ（AEN-Probe）およびプローブに応答するACK（AEN-ACK）は、通常のデータおよびACKとは異なることを示すために、TCPヘッダの予約フィールド（６ビット）の内1ビットを利用することを考える。つまり、TCPヘッダの予約フィールドの１ビットに１が立っていれば、このパケットはAENで利用されるパケット（AEN_ProbeまたはAEN_ACK）であることを示す。なお、通常のTCP通信では、TCPヘッダの予約フィールドの値はすべて０となっている。
【００３４】
図１０において、再送タイムアウトが発生していない時の通信状態をNORMAL_STATE２０、AEN-Probeを送信した後の状態をAEN-ACK_WAIT２１、AEN-ACK_WAIT２１の状態で重複ACKを受信した後の状態をDUP-ACK_RCVD２２とそれぞれ呼ぶ。ただし、図１０において、図を分かり易く書く都合上NORMAL_STATE２０を２ヶ所に書いているが、同じものを示す。まず、NORMAL_STATE２０の状態からAEN-ACK_WAIT２１の状態に遷移する場合を示す。NORMAL_STATE２０の状態で再送タイムアウトが発生するとAEN-Probeを送信しAEN-ACK_WAIT２１状態に遷移する（１）。次に、AEN-ACK_WAIT２１の状態から遷移しない場合を示す。AEN-ACK_WAIT２１の状態で、Pseg>Nackとなる通常のACKを受信した場合、何もせず（ACKは無視する）状態は遷移しない（２）。次に、AEN-ACK_WAIT２１の状態から、NORMAL_STATE２０の状態に戻る場合を示す。AEN-ACK_WAIT２１の状態で、Pseg<=PackとなるAEN-ACKを受信した場合、ACKのロスまたは遅延が発生したと判断し、続きの新しいデータの送信を開始しNORMAL_STATE２０に遷移する（３）。AEN-ACK_WAIT２１の状態で、Pseg>PackとなるAEN-ACKを受信した場合、データがロスしたと判断し、AEN-ACKが示すロスしたデータを再送すると同時にスロースタートアルゴリズムを開始し、NORMAL_STATE２０に遷移する（４）。AEN-ACK_WAIT２１の状態で、AEN-Probeが再送タイムアウトを起こした場合、到達未確認データを再送すると同時にスロースタートアルゴリズムを開始し、NORMAL_STATE２０に遷移する（５）。AEN-ACK_WAIT２１の状態で、Pseg<=Nackとなる通常のACKを受信した場合、タイムアウトを起こしたデータはすでに受信されていると判断し、新しい続きのデータの送信をただちに開始し、NORMAL_STATE２０に遷移する（６）。次に、AEN-ACK_WAIT２１の状態から、DUP-ACK_RCVD２２の状態に遷移する場合を示す。AEN-ACK_WAIT２１の状態で、再送タイムアウトを起こしたデータ以外のデータに対する重複ACKを受信した場合、何もせず（ACKは無視する）DUP-ACK_RCVD２２に遷移する（７）。次に、DUP-ACK_RCVD２２の状態から遷移しない場合を示す。DUP-ACK_RCVD２２の状態で、Pseg>Nackとなる通常のACKを受信した場合、何もせず（ACKは無視する）状態も遷移しない（８）。DUP-ACK_RCVD２２の状態で、再送タイムアウトを起こしたデータ以外のデータに対する３つに達しない重複ACKを受信した場合、何もせず（ACKは無視する）状態も遷移しない（９）。DUP-ACK_RCVD２２の状態で、再送タイムアウトを起こしたデータ以外のデータに対する３つに達する重複ACKを受信した場合、ただちに重複ACKが示すロスしたデータを再送し状態は遷移しない（１０）。最後に、DUP-ACK_RCVD２２の状態からNORMAL_STATE２０の状態に遷移する場合を示す。DUP-ACK_RCVD２２の状態で、Pseg<=PackとなるAEN-ACKを受信した場合、ACKのロスまたは遅延が発生したと判断し、続きの新しいデータの送信を開始しNORMAL_STATE２０に遷移する（１１）。DUP-ACK_RCVD２２の状態で、Pseg>PackとなるAEN-ACKを受信した場合、データがロスしたと判断し、AEN-ACKが示すロスしたデータを再送すると同時にスロースタートアルゴリズムを開始し、NORMAL_STATE２０に遷移する（１２）。DUP-ACK_RCVD２２の状態で、AEN-Probeが再送タイムアウトを起こした場合、到達未確認データを再送すると同時にスロースタートアルゴリズムを開始し、NORMAL_STATE２０に遷移する（１３）。DUP-ACK_RCVD２２の状態で、Pseg<=Nackとなる、通常のACKを受信した場合、タ��ムアウトを起こしたデータはすでに受信されていると判断し、新しい続きのデータの送信を開始し、NORMAL_STATE２０に遷移する（１４）。
【００３５】
次に、図１０において、（１）から（１４）までの状態遷移を行う際の、輻輳ウインドウサイズとスロースタート閾値の設定について説明する。まず、（４）（５）（１２）（１３）の場合は、輻輳ウインドウサイズを1つ分のデータセグメントサイズ、スロースタート閾値を帯域値から得られた測定ウインドウサイズに設定する。その他の場合については、輻輳ウインドウサイズとスロースタート閾値は変化させず状態遷移前の値を保持させる。
【００３６】
また、上記AENの輻輳ウインドウサイズとスロースタート閾値の設定において、ACKロスまたは遅延が判明した時は、再送タイムアウトが発生する前の値を保持させている。しかしながら、プローブパケットを送信している間にネットワークの状態が急変（帯域が減少/増加）している可能性ある。このような場合においては、ACKロスまたは遅延が発生後の輻輳ウインドウサイズとスロースタート閾値を、ネットワークの帯域から得られた測定ウインドウサイズを利用して設定させることで、対応可能となる。
【００３７】
AEN機構において、AEN-ProbeとAEN_ACKはTCPヘッダの予約フィールド（６ビット）を使って通常のデータおよびACKと区別しているが、本発明方式は予約フィールドを利用しない場合においても動作することが可能である。この時、図１０において、（１）（３）（４）（５）のみ利用すればよい。この場合、受信側はAENを扱うための実装の変更を行う必要がなく、送信側のみの変更で済む。
【００３８】
上記までに説明した各機構の送信開始から送信終了までの動作について図１１を利用して説明する。まず始めに、通信を開始するため、送信側と受信側の間にコネクションを設定する（S１０１）。コネクション設定が完了すると（C１０１）、データ送信を開始する（S１０２）。データ送信が開始されると、ACKを受信する毎にネットワーク帯域測定機構モジュール３０によりネットワークの利用可能帯域を測定し、LWC機構モジュール３１とCWS機構モジュール３２の測定ウインドウサイズ計算処理（S１０３、S１０６）に測定帯域を通知する。データ送信処理（S１０２）を行う際に利用する輻輳ウインドウサイズの設定は、３つ以上の重複ACKにより判明するデータロスおよび再送タイムアウトが発生したとき以外は常にLWC機構モジュール３１によって行われる。LWC機構モジュール３１では、測定ウインドウサイズ計算処理（S１０３）から得られた測定ウインドウサイズとTCP（Original）の輻輳ウインドウサイズ設定処理（S１０４）から得られるTCP Renoに基づく輻輳ウインドウサイズを足して、送信ウインドウサイズを設定する（S１０５）。送信側はこの処理（S１０５）で得られた輻輳ウインドウサイズを用いて送信処理を行う。もし、３つの重複ACKを受信しデータロスを検出すると（C１０２）、CWS機構モジュール３２において、測定ウインドウサイズ計算処理（S１０６）から得られる測定ウインドウサイズを利用して、スロースタート閾値と輻輳ウインドウサイズの設定を行う（S１０７）。CWS機構の処理が完了すると（C１０３）、データ再送処理を行い続きのデータ送信を再開する（S１０２）。また、データ送信中に、再送タイムアウトが発生すると（C１０４）、AEN機構モジュール３３において、まず再送タイムアウトの原因がデータロスかまたはACKロス/遅延なのかを判定する（S１０８）。再送タイムアウトの原因の判明後、スロースタート閾値と輻輳ウインドウサイズの設定を行う（S１０９）。AEN機構の処理が完了すると（C１０５）、データロスが再送タイムアウトの原因であれば、ロスしたデータの再送後、データ送信を再開する（S１０２）。ACKロス/遅延が再送タイムアウトの原因であれば、ただちに新しい続きのデータ送信を再開する（S１０２）。すべてのデータ送信が完了すると（C１０６）、コネクションを切断し（S１１０）、通信を終了する。
【００３９】
以上、本発明方式によれば、広帯域かつ高遅延な無線ネットワークにおけるTCP通信を高速化することが可能である。さらに、同様なネットワーク特性を持つ、広帯域かつ高遅延な有線ネットワーク（ギガビットネットワーク等）においても、本発明方式は利用可能である。
【図面の簡単な説明】
【００４０】
【図１】本発明のTCP輻輳制御方式の構成図
【図２】サンプル帯域の計算式
【図３】利用可能帯域の計算式
【図４】測定ウインドウサイズの計算式
【図５】LWCによる輻輳ウインドウサイズの計算式
【図６】スロースタートアルゴリズムと輻輳制御アルゴリズムに基づく輻輳ウインドウサイズの設定
【図７】CWSによる輻輳ウインドウサイズの設定
【図８】AENによる再送タイムアウト原因の検出とその後の動作例
【図９】AENにおける再送タイムアウト原因の判定内容
【図１０】AEN動作の状態遷移図
【図１１】本発明のTCP輻輳制御方式の動作
【符号の説明】
【００４１】
１０：  TCP（Original）の輻輳制御機構
１１：  ネットワーク帯域測定機構
１２：  LWC（Lift Window Control）機構
１３：  CWS（Congestion Window Setting）機構
１４：  AEN（Acknowledgement Error Notification）機構
２０：  AENが動作していない通常の通信状態
２１：  AEN-Probe送出後、AEN-ACKを待っている状態
２２：  AEN-Probe送出後、AEN-ACKを待っている状態で重複ACKを受信した後の状態
３０：  ネットワーク帯域測定機構モジュール
３１：  LWC機構モジュール
３２：  CWS機構モジュール
３３：  AEN機構モジュール
【図１】
2006173961.tif 000003
【図２】
2006173961.tif 000004
【図３】
2006173961.tif 000005
【図４】
2006173961.tif 000006
【図５】
2006173961.tif 000007
【図６】
2006173961.tif 000008
【図７】
2006173961.tif 000009
【図８】
2006173961.tif 000010
【図９】
2006173961.tif 000011
【図１０】
2006173961.tif 000012
【図１１】
2006173961.tif 000013