(57)【要約】【課題】  データセグメントの情報量を増加させることなく、且つ送信装置及び受信装置に対する大幅な設計変更を必要とせず、送信装置に受信される確認応答データセグメントがオリジナルデータセグメントに対するのものであるか又は再送データセグメントに対するものであるのかを適切に判別することができる技術を提供する。【解決手段】  データセグメントを再送した後受信した確認応答について、当該確認応答に含まれる確認応答番号と、再送されたデータセグメントに対する確認応答に含まれると予測される確認応答番号とを比較し、前者が後者よりも大きい場合、当該確認応答がオリジナルデータセグメントに対するものであると判別する。【選択図】      図１
2004222271.tif 000002
【特許請求の範囲】
【請求項１】
送信装置から受信装置に連続的に送信されるべき各データブロックにシーケンス情報を割り当てる割り当て過程と、
複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する送信過程と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送過程と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する受信過程と、
前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する判断過程とを有し、
前記送信過程は、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記送信過程において送信された複数のデータブロックに後続するデータブロックを送信する
ことを特徴とする通信網における伝送制御方法。
【請求項２】
前記送信過程において送信される前記複数のデータブロックの数は、確認応答信号を受信することなく送信できるデータブロックの数であるウィンドウサイズに従って定められ、
前記再送過程において、予測時間内に確認応答が受信されていないデータブロックの再送を行う場合には、前記ウィンドウサイズを最小値に変更し、変更後のウィンドウサイズにより定められる数のデータブロックを再送し、
前記送信過程は、前記判断過程において前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合には、前記再送過程において前記ウィンドウサイズが最小値に変更される前のウィンドウサイズと等しいかまたはより大きくなるように前記ウィンドウサイズを増加させ、増加後のウィンドウサイズにより定められる数の前記後続するデータブロックを送信する
ことを特徴とする請求項１に記載の伝送制御方法。
【請求項３】
受信装置に対して連続的に送信されるべき各データブロックにシーケンス情報を割り当てる割り当て手段と、
複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する送信手段と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送手段と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する受信手段と、
前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する判断手段とを有し、
前記送信手段は、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記受信装置に対して送信された複数のデータブロックに後続するデータブロックを送信する
ことを特徴とする通信装置。
【請求項４】
前記再送されたデータブロックの直後に後続するデータブロックのシーケンス情報を記憶する記憶手段を更に有し、
前記判断手段は、前記記憶手段に記憶された前記シーケンス情報および前記確認応答信号に含まれる前記シーケンス情報を比較することにより前記判断を行う
ことを特徴とする請求項３に記載の通信装置。
【請求項５】
前記判断手段は、前記確認応答信号に含まれる前記シーケンス情報により特定されるデータブロックが、前記記憶手段に記憶されている前記シーケンス情報によって特定されるデータブロックに後続するデータブロックの１である場合に、前記確認応答信号が前記送信手段により送信された前記複数のデータブロックの１に対する確認応答であると判断する
ことを特徴とする請求項４に記載の通信装置。
【請求項６】
前記送信手段により送信される前記複数のデータブロックの数は、確認応答信号を受信することなく送信できるデータブロックの数であるウィンドウサイズに従って定められ、
前記再送手段は、予測時間内に確認応答が受信されていないデータブロックの再送を行う場合には、前記ウィンドウサイズを最小値に変更し、変更後のウィンドウサイズにより定められる数のデータブロックを再送し、
前記送信手段は、前記判断手段により前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合には、前記再送手段において前記ウィンドウサイズが最小値に変更される前のウィンドウサイズと等しいかまたはより大きくなるように前記ウィンドウサイズを増加させ、増加されたウィンドウサイズにより定められる数の前記後続するデータブロックを送信する
ことを特徴とする請求項３乃至５のいずれかに記載の通信装置。
【請求項７】
送信装置から受信装置に連続的に送信されるべき各データブロックにシーケンス情報を割り当てる割り当て手段と、
複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する送信手段と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送手段と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する受信手段と、
前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する判断手段とを有し、
前記送信手段は、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記受信装置に対して送信された複数のデータブロックに後続するデータブロックを送信する
ことを特徴とする通信システム。
【請求項８】
受信装置に連続的に送信されるべき各データブロックにシーケンス情報を割り当てる処理と、
複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する処理と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送過程と、
前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する処理と、
前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する処理と
前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記受信装置に対して送信された複数のデータブロックに後続するデータブロックを送信する処理と
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信網を介して行われるデータ通信における再送制御のための技術に関する。
【背景技術】
【０００２】
近年、ＴＣＰ（Transmission  Control  Protocol）に従ってデータの送受信を行う装置が一般的に普及している。ＴＣＰは、ＯＳＩ参照モデルにおけるトランスポート層の通信プロトコルの代表的なものとして周知である。このＴＣＰでは、上位層から渡されたデータストリームをセグメントに分割し、通信相手である受信装置に送信する。ＴＣＰは、分割されたデータのセグメントを順番どおり確実に受信装置まで送り届けるための機能を提供している。具体的には、ＴＣＰでは、各データセグメントにデータの順番を示す番号（以下、シーケンス番号という）を付与する。送信装置は、データセグメントを送信する際にはこのシーケンス番号をヘッダにセットして送信する。また、送信装置は各データセグメントを送信するとき、これと同時にタイマをセットする。そして、このタイマがタイムアウト値に到達するまでに確認応答を受信しなかった場合には、送信装置はデータセグメントが受信装置まで到達することなく喪失したと一応の判断を行い、当該喪失したとみなされたデータセグメントを同受信装置に対して再送するようになっている。ここで、タイムアウト値は、データセグメントを送信してから、当該データセグメントに対する確認応答を受け取ると期待する時間（データセグメントの予測往復時間）に基づいて定められる。
【０００３】
送信装置において、受信した確認応答がどのデータセグメントに対する確認応答であるかは、確認応答のヘッダに含まれる確認応答番号を参照して判断される。以下、この判断について説明する。まず、受信装置がデータセグメントを受信し、これに対する確認応答を送信する際には、受信装置が次に受信を期待するシーケンス番号（以下、確認応答番号という）を確認応答のヘッダにセットする。例えば、５００から始まり、１０００、１５００・・・と続くシーケンス番号が用いられる場合に、シーケンス番号５００を持つデータセグメントを受信したときに送信装置に送信する確認応答番号は１０００となる。送信装置は、このような確認応答番号を有する確認応答を受信することにより、送信装置が送信したデータセグメントが無事受信装置によって受信されたと判定し、後続のデータセグメントを送信する。
【０００４】
尚、このように送信装置が確認応答番号１０００を有する確認応答を受信する場合とは、送信装置がシーケンス番号１０００を有するデータセグメントを未送信であるか、送信済みであってもそのデータセグメントが受信装置に届いていない場合である。この確認応答番号は、受信装置が、シーケンス番号１０００を有するデータセグメントを受信するまでは常に１０００となる。例えば、シーケンス番号１０００を有するデータセグメントが喪失されたなどの理由により、その後続セグメントであるシーケンス番号１５００を有するデータセグメントの方が先に受信装置に到着している場合であっても、受信装置がシーケンス番号１０００を有するデータセグメントを受信するまでは、受信装置から送信される確認応答の確認応答番号には１０００がセットされる。つまり、確認応答番号には、受信装置が未だ受信していないデータセグメントの最も若いセグメントのシーケンス番号が常にセットされる。
【０００５】
以上説明したデータセグメントの伝送において、各データセグメントを確実に送信するためには、ひとつのデータセグメントを送信した後に、それに対する確認応答を受信してから次のデータセグメントを送信する方式を採用するのが好ましい。しかし、この方式は確実ではあるがデータの伝送効率が悪くなってしまう。伝送効率を高めるため、ＴＣＰでは、ウィンドウによって定められる数のデータセグメントを一度に送信する方式を採用している。ウィンドウとは、確認応答を受信する前に受信装置に対して送信することが許されているデータのバイト数、つまりデータセグメントの数である。このウィンドウのサイズは、受信装置におけるバッファの空き容量を超えない範囲で送信装置によって定められる。送信装置が送信済みのデータセグメントに対して確認応答を受信すると、ウィンドウはその時に確認応答を受信したデータセグメントの数だけスライドし、ウィンドウがスライドした数だけ後続のデータセグメントが送信される。これが、「スライディングウィンドウ方式」である。このスライディングウィンドウ方式では、ウィンドウのサイズを制御することによりデータの流量を制御することができる。
【０００６】
ところで、このスライディングウィンドウ方式に従って複数のデータセグメントが受信装置に対して送信された後、送信装置と受信装置間の通信路が輻輳状態になるなどして、通信が停止状態となることがある。特に、通信路が無線区間を含むような場合には、電波環境が悪化する可能性が高い。このような状況下で送信装置がデータセグメントを送信しても、当該データセグメントは受信装置へ届かず中途で喪失してしまうか、通信網の通信状態が復元されるまで通信網のどこかのノードに一時的に保存されることになる。その後、無線環境が改善したりして通信が再開されると、網内に一時的に保存されていたデータセグメントが遅延した後に受信装置に届く場合がある。
【０００７】
ここで、通信路の状態が悪化している時間が長い場合には次のような事態が発生する。まず、送信装置では、データセグメント送信後、タイムアウト発生前に確認応答が受信されない場合には、送信済みであり且つ確認応答を未受信であるデータセグメントの先頭セグメントが再送される。その結果、受信装置には、網内に滞留していたデータセグメント（以下、オリジナルデータセグメントという）と、再送されたデータセグメント（以下、再送データセグメントという）との両方が届くことになる。そして、受信装置は、オリジナルデータセグメントを受信したときに、これに対する確認応答を送信し、再送データセグメントを受信したときに、これに対する確認応答を送信する。
【０００８】
このオリジナルデータセグメントに対する確認応答と再送データセグメントに対する確認応答は、通常の場合、同一の確認応答番号を有する。このため、送信装置がひとつめの確認応答を受信した時点では、当該確認応答がオリジナルデータセグメントに対するものなのか又は再送データセグメントに対するものなのかを判別することができない。このような場合、送信装置は、再送データセグメント送信後最初に確認応答を受信すると、当該確認応答は再送データセグメントに対する確認応答であるとみなし、オリジナルデータセグメントは受信装置に届かなかったものと判断する。以下、２つの事例を挙げ、このような判断が行われる理由について詳述する。
【０００９】
図１０は、従来のサーバ装置１０'（送信装置）とクライアント装置５０（受信装置）との間でパケット通信を行う場合の一例を示すシーケンスチャートである。尚、同図において、サーバ装置１０'における各矢印の始点の右側に示される４桁の番号は、サーバ装置１０'からパケット通信により送信されるデータセグメントのシーケンス番号である。また、クライアント装置５０における各矢印の始点の左側に示される４桁の番号は、クライアント装置５０から送信される確認応答に含まれる確認応答番号である。ここでは、初期ウィンドウサイズは「３」であると仮定する。つまり、送信装置は、確認応答の受信を待たずに３つのデータセグメントを送信可能である。
【００１０】
図１０において、サーバ装置１０'からクライアント装置５０へシーケンス番号０、１０００、２０００を有するそれぞれのオリジナルデータセグメントＳ１、Ｓ２、Ｓ３が送信される。この際、サーバ装置１０'ではタイマがセットされる。
【００１１】
図示の例では、網内の通信環境の悪化により、当該オリジナルデータセグメントＳ１、Ｓ２、Ｓ３は、クライアント装置５０により遅延して順次受信される。クライアント装置５０は、オリジナルデータセグメントＳ１を受信すると確認応答番号１０００を有する確認応答Ｒ１が送信される。同様に、クライアント装置５０は、オリジナルデータセグメントＳ２を受信すると確認応答番号２０００を有する確認応答Ｒ２を送信し、オリジナルデータセグメントＳ３を受信すると確認応答番号３０００を有する確認応答Ｒ３を送信する。
【００１２】
図１０に示す例において、サーバ装置１０'では、タイマによって測定される経過時間がタイムアウト値に到達しても確認応答が受信されない。このため、サーバ装置１０'では、タイムアウトとなった時点で、オリジナルデータセグメントＳ１はクライアント装置５０に受信されなかったと判定されて、シーケンス番号０を有するデータセグメント（再送データセグメントＳ′１）が再送される。この時、タイムアウトが発生した時点でウインドウサイズが最小値に縮小されるため、再送データセグメントＳ′１のみが送信されている。
その後、サーバ装置１０'では、確認応答Ｒ１が受信されるが、上述の事情で当該確認応答Ｒ１がオリジナルデータセグメントＳ１に対応するものなのか又は再送データセグメントＳ′１に対応するものなのかを判定することができない。その結果、再送データセグメントＳ′１に対応するものであるとみなされて、シーケンス番号１０００を有するデータセグメント（再送データセグメントＳ′２）が送信される。また、確認応答Ｒ１を受信することにより、ウィンドウサイズが１データセグメント分増加するため、後続のシーケンス番号２０００を有するデータセグメント（再送データセグメントＳ′３）も送信される。
【００１３】
次いで、サーバ装置１０'では、クライアント装置５０から送信された確認応答番号２０００を有する確認応答Ｒ２が受信され後続のデータセグメント（オリジナルデータセグメントＳ４以降のデータセグメント）が順次送信される。
【００１４】
この例では、オリジナルデータセグメントＳ２とＳ３が実際は受信装置に無事受信されているにもかかわらず、再送されている（再送データセグメントＳ'２およびＳ'３）。すなわち、データセグメントＳ２とＳ３はいずれも２回ずつ受信装置に受信されているので、結果的に無駄なデータセグメントの再送が行われてしまったと云える。また、図１０からも明らかなように、再送データセグメントＳ'２およびＳ'３に対する確認応答Ｒ'２およびＲ'３が送られるので、合計で４つのデータセグメントの送信が結果的には無駄であった。
【００１５】
図１１は、無駄なセグメントの再送が起こりうる別の事例について説明する図である。ＴＣＰでは、受信装置が過度の確認応答を送信しないように、確認応答の送信を所定の時間内であれば遅らせ、次のデータ送信に相乗りできることが規定されている（遅延確認応答、RFC 2581）。しかし、その所定の時間内であっても、受信装置は２個のフルサイズのデータセグメントを連続受信した場合には次のデータ送信を待つことなく即座に確認応答を送信するべきとなっている。つまり、２個のデータセグメントが例えば２００ミリ秒などの短い時間差で連続して受信された場合は、２個のデータセグメントの受信を通知する確認応答を１個の確認応答で代用することになっており、具体的には、受信装置は、２番目に受信したデータセグメントの確認応答を送信することにより、２個のデータセグメントの受信を送信装置に通知する。図１１に示す事例はこの取り決めが適用された場合を想定している。
【００１６】
図１１において、図１０の場合と同様にオリジナルデータセグメントＳ１、Ｓ２、Ｓ３がサーバ装置１０'から送信され、通信路の障害が理由で遅延した後、クライアント装置５０に順次受信される。次いで、上記取り決めによりクライアント装置５０は確認応答Ｒ２を送信する。一方、サーバ装置１０'では、タイムアウト発生により再送データセグメントＳ'１を送信する。この時、タイムアウト発生により、ウィンドウサイズが１データセグメント分に縮小されるので、再送データセグメントＳ'１のみが送信されている。
次に、サーバ装置１０'は、クライアント装置５０から送信された確認応答Ｒ２を受信する。サーバ装置１０'は、確認応答Ｒ２に含まれる確認応答番号２０００を参照し、同シーケンス番号を有するセグメント、即ち、オリジナルデータセグメントＳ３を再送する。また、この時、確認応答Ｒ２を受信することによりウィンドウサイズが１データセグメント分増加するので、後続のオリジナルデータセグメントＳ４（シーケンス番号３０００）も送信される。
【００１７】
次いで、サーバ装置１０'では、クライアント装置５０から送信された確認応答番号３０００を有する確認応答Ｒ３が受信される。この確認応答Ｒ３の受信により、サーバ装置１０'では、後続のシーケンス番号４０００を有するオリジナルデータセグメントＳ５以降のデータセグメントが順次送信される。
【００１８】
この事例においては、オリジナルデータセグメントＳ３がクライアント装置５０に既に受信されているにもかかわらず再送され、図１１に示すようにそれに対する確認応答Ｒ′３も送信される。つまり、再送データセグメントＳ′３及び確認応答Ｒ′３が無駄に送られることが分かる。
【００１９】
データセグメント再送後最初の確認応答がオリジナルデータセグメントに対するものなのか又は再送データセグメントに対するものなのかを判別することができない場合に、仮にオリジナルデータセグメントに対するものであると判断すると、このような無駄な再送は行われない。
しかし、このような判断をすると、実際は再送データセグメントに対する確認応答であるのにオリジナルデータセグメントに対する確認応答であるとみなしてしまう場合が生じる。この場合、データセグメントの並びの後方にウィンドウがスライドされ、後続のオリジナルデータセグメントが送信される。このようなことが繰り返し発生すると、サーバ装置１０'から送信され、クライアント装置５０に到着していないデータセグメントの数が累増するおそれがある。
このような事態に陥るリスクを避けるため、確認応答がオリジナルデータセグメントに対するものなのか又は再送データセグメントに対するものなのかを判別することができない場合に、オリジナルデータセグメントに対するものであると判断することにしているのである。
しかし、このような判断手法を採った場合、データセグメントの無駄な再送が行われるのを回避することができない。
【００２０】
このような問題を解決する技術が非特許文献１及び非特許文献２に記載されている。非特許文献１には、タイムスタンプオプション(RFC 1323)を利用することにより、確認応答がオリジナルデータセグメントに対するものか又は再送データセグメントに対するものかについての判別を正確に行うことを可能とさせる技術が記載されている。
【００２１】
また、非特許文献２には、有線パケット通信網を介するパケット通信において、統計情報を用いて、確認応答がオリジナルデータセグメントに対するものか又は再送データセグメントに対するものかを推定する技術が記載されている。
この文献では、送信装置と受信装置との間の通信コネクションが確立されているときにデータセグメントを送信してから確認応答が届くまでの時間を実測して得られるラウンドトリップタイムのうち最小のラウンドトリップタイムの１／２を閾値として上記の推定を行うことが提案されている。つまり、再送データセグメントを送信してからひとつめの確認応答を受信するまでの経過時間が閾値以上の場合（又は閾値を超過した場合）には再送データセグメントに対する確認応答とみなし、閾値未満の場合（又は閾値以下の場合）にはオリジナルデータセグメントに対する確認応答とみなす。
【００２２】
最小のラウンドトリップタイムの１／２を閾値とすることは、以下に列記する事情に基づいて提案されている。
［事情１］  統計をとったところ、再送データセグメントを送信してから最小のラウンドトリップタイムの１／２が経過するまでの期間、３／４が経過するまでの期間、及び１／１が経過するまでの期間内にオリジナルデータセグメントに対する確認応答を受信する確率に大差はないことが分かった。
［事情２］  統計をとったところ、再送データセグメントを送信してから最小のラウンドトリップタイムの１／２が経過した辺りから再送データセグメントに対する確認応答を受信する確率が急激に増加することが分かった。
【００２３】
【非特許文献１】アール・ルドウィグ、外１名 (R. Ludwig, et. al)，“ＴＣＰにおけるアイフル検知アルゴリズム”（"The Eifel Detection Algorithm for TCP" <draft-ietf-tsvwg-tcp-eifel-alg-04.txt>），[online]，２００２年７月２４日，インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｗａｔｅｒｓｐｒｉｎｇｓ．ｏｒｇ／ｐｕｂ／ｉｄ／ｄｒａｆｔ−ｉｅｔｆ−ｔｓｖｗｇ−ｔｃｐ−ｅｉｆｅｌ−ａｌｇ−０４．ｔｘｔ＞
【非特許文献２】マーク・アルマン、外１名 (Mark Allman, et. al)，“エンドトゥエンドのネットワークパス特性の推測について」("On Estimating End-To-End Network Path Properties")，ACM SIGCOMM '99，１９９９年１０月，第２９巻,第４号, ｐ．２６３−２７４，（２．８節）
【発明の開示】
【発明が解決しようとする課題】
【００２４】
しかしながら、非特許文献１の技術においては、通信環境が良好であっても、送信装置においてはオリジナルデータセグメントに対してタイムスタンプ情報が付加され、受信装置においては確認応答に対してタイムスタンプ情報が付加される。つまり、どちらのデータセグメントについてもその情報量が増加する。したがって、この技術を、通信量に応じて通信料金が変化する従量制課金を前提としている移動パケット通信網を介したパケット通信に適用した場合、通信料の上昇を招いてしまう。データの再送が必要となるケースが少ない良好な通信環境においては、これは不要な通信量の上昇である。また、言うまでもなく、通信料の上昇は受信装置の使用者や送信装置の使用者の望むところではない。
【００２５】
代わりに、当該技術を応用して、データセグメントに対して情報を付加するのではなく、通信時に使用されるＴＣＰヘッダ内の予約ビットに情報を設定する方法も考えられる。しかし、このような方法を用いる場合、既存の通信システムでは対応できず、従って、送信装置及び受信装置に対して、当該方法を用いるための大幅な設計変更が必要となってしまう。
【００２６】
また、非特許文献２の技術を、移動通信網を介する移動通信環境のように無線区間でのデータセグメントの遅延が非常に大きい通信環境に用いても、最適な判別結果を得ることはできない。
【００２７】
本発明は、以上説明した事情に鑑みてなされたものであり、送信装置に受信される確認応答データセグメントがオリジナルデータセグメントに対するのものであるか又は再送データセグメントに対するものであるのかを適切に判別することができる技術を提供することを目的としている。この技術によれば、データセグメントの情報量を増加させることなく、且つ受信装置の設計変更を必要とせず、また送信装置に対しては軽微な設計変更を行えば済む。
【課題を解決するための手段】
【００２８】
上記課題を解決するため、本発明は、送信装置から受信装置に連続的に送信されるべき各データブロックにシーケンス情報を割り当てる割り当て過程と、複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する送信過程と、前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送過程と、前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する受信過程と、前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する判断過程とを有し、前記送信過程は、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記受信装置に対して送信された複数のデータブロックに後続するデータブロックを送信することを特徴とする通信網における伝送制御方法を提供する。前記データブロックの一例としては、ＴＣＰにおけるデータセグメントがある。また、好ましくは、前記受信装置は、移動通信網を介してパケット通信を行う移動通信端末である。
【００２９】
好ましい態様において、前記再送されたデータブロックの直後に後続するデータブロックのシーケンス情報を記憶手段に記憶する過程を更に有し、前記判断過程において、前記記憶手段に記憶された前記シーケンス情報および前記確認応答信号に含まれる前記シーケンス情報を比較することにより前記判断を行うようにしてもよい。この場合、前記確認応答信号に含まれる前記シーケンス情報により特定されるデータブロックが、前記記憶手段に記憶されている前記シーケンス情報によって特定されるデータブロックに後続するデータブロックの１である場合に、前記確認応答信号が前記送信済みである複数のデータブロックの１に対する確認応答であると判断する。
【００３０】
上記伝送制御方法の別の好ましい態様において、前記伝送制御方法は、前記送信過程において送信される前記複数のデータブロックの数は、確認応答信号を受信することなく送信できるデータブロックの数であるウィンドウサイズに従って定められ、前記再送過程において、予測時間内に確認応答が受信されていないデータブロックの再送を行う場合には、前記ウィンドウサイズを最小値に変更し、変更後のウィンドウサイズにより定められる数のデータブロックを再送し、前記送信過程は、前記判断過程において前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合には、前記再送過程において前記ウィンドウサイズが最小値に変更される前のウィンドウサイズと等しいかまたはより大きくなるように前記ウィンドウサイズを増加させ、増加後のウィンドウサイズにより定められる数の前記後続するデータブロックを送信する。
【００３１】
また、本発明は、受信装置に対して連続的に送信されるべき各データブロックにシーケンス情報を割り当てる割り当て手段と、複数のデータブロックに前記シーケンス情報を付加し、前記受信装置に対して順次送信する送信手段と、前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置から確認応答信号を受信していないデータブロックを再送する再送手段と、前記受信装置に対して送信された複数のデータブロックのうち、前記受信装置が未だ受信していない先頭のデータブロックのシーケンス情報を含む確認応答信号を、前記受信装置から受信する受信手段と、前記再送が行われたデータブロックのシーケンス情報および前記確認応答信号に含まれる前記シーケンス情報に基づいて、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であるか否かを判断する判断手段とを有する通信装置を提供する。前記送信手段は、前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合に、前記受信装置に対して送信された複数のデータブロックに後続するデータブロックを送信することを特徴としている。
【００３２】
好ましい態様において、前記再送されたデータブロックの直後に後続するデータブロックのシーケンス情報を記憶する記憶手段を有し、前記判断手段は、前記記憶手段に記憶された前記シーケンス情報および前記確認応答信号に含まれる前記シーケンス情報を比較することにより前記判断を行う。この場合、前記判断手段は、前記確認応答信号に含まれる前記シーケンス情報により特定されるデータブロックが、前記記憶手段に記憶されている前記シーケンス情報によって特定されるデータブロックに後続するデータブロックの１である場合に、前記確認応答信号が前記送信済みである複数のデータブロックの１に対する確認応答であると判断する。
【００３３】
別の好ましい態様において、前記通信装置は、前記送信手段により送信される前記複数のデータブロックの数は、確認応答信号を受信することなく送信できるデータブロックの数であるウィンドウサイズに従って定められ、前記再送手段は、予測時間内に確認応答が受信されていないデータブロックの再送を行う場合には、前記ウィンドウサイズを最小値に変更し、変更後のウィンドウサイズにより定められる数のデータブロックを再送し、前記送信手段は、前記判断手段により前記確認応答信号が前記送信された複数のデータブロックの１に対する確認応答であると判断された場合には、前記再送手段において前記ウィンドウサイズが最小値に変更される前のウィンドウサイズと等しいかまたはより大きくなるように前記ウィンドウサイズを増加させ、増加されたウィンドウサイズにより定められる数の前記後続するデータブロックを送信するようにしてもよい。
【００３４】
さらに、本発明は、上記通信装置が有する手段を、少なくとも２の装置に具備させることにより上記様々な態様における伝送制御方法を実現可能な通信システムを提供する。
加えて、上述した様々な態様における伝送制御方法をコンピュータに実行させるためのプログラムを提供する。このプログラムは、当該プログラムが記憶された磁気テープ、磁気ディスク、フロッピー（登録商標）ディスク、光記録媒体、光磁気記録媒体、ＤＶＤ（Digital Video Disk）、ＲＡＭ等、その他記録媒体に記録され得る。
【発明の効果】
【００３５】
本発明によれば、送信装置に受信される確認応答がオリジナルデータセグメントに対するのものであるか又は再送データセグメントに対するものであるのかを適切に判別することができ、この結果、データセグメントの不必要な送信を防ぐことが可能となる。この技術によれば、データセグメントの情報量を増加させることなく、且つ受信装置に対する設計変更を一切必要とせず、また送信装置に対しては軽微な設計変更で済む。
【発明を実施するための最良の形態】
【００３６】
以下、図面を参照して本発明の実施の形態を詳細に説明する。なお、実施の形態を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
【００３７】
[第１実施形態]
（１．構成）
＜通信システム１の構成＞
図１は、この発明の第１実施形態に係る通信システム１の構成を例示する図である。
通信端末４０は、クライアント装置５０と接続され、クライアント装置５０と通信を行う。移動パケット通信網３０は、当該移動パケット通信網３０に収容される通信端末４０に対して、パケット通信サービスを提供する。サーバ装置１０は、インターネット２０、移動パケット通信網３０、通信端末４０を介してクライアント装置５０とパケット通信を行う。なお、本実施形態においては、ＴＣＰ（Transmission Control Protocol）に従って、パケット通信を行うことによりデータセグメントを送信するものとする。
【００３８】
＜サーバ装置１０の構成＞
次に、サーバ装置１０の構成について説明する。サーバ装置１０の構成は一般的なコンピュータと同様であるから、本発明に係る構成のみについて図２を参照しながら説明する。
ＣＰＵ１００は、記憶部１０５に記憶されるプログラムを実行することにより、サーバ装置１０の装置各部の制御を行う。また、ＣＰＵ１００は、タイマ１００ａを備える。タイマ１００ａは、ＣＰＵ１００によりセットされた一定時間が経過すると、トリガ信号を出力する。
【００３９】
記憶部１０５は、ＲＡＭ(Random Access Memory)１０２と、ＲＯＭ（Read Only Memory)１０３と、ＨＤ(Hard Disk)１０４とから構成される。
ＲＯＭ１０３には、ＣＰＵ１００にデータセグメントの送信制御処理を行わせるためのプログラムが記憶されている。このデータセグメント送信制御処理において、ＣＰＵ１００は、クライアント装置５０へデータを送信する場合、当該データをセグメント単位に分割し、分割したデータセグメントの各々にヘッダを付加し、これらを順次クライアント装置５０へ送信する。
なお、本実施形態においては、ＣＰＵ１００は、データセグメントをクライアント装置５０へ送信する場合、ＨＤ１０４に記憶したパラメータ変数（第２実施形態に詳述する）に基づいて上述したスライディングウィンドウ方式による制御を行うものとする。
【００４０】
データセグメントに付加されるヘッダのデータ構造は、図３に示されるような構造になっている。ＣＰＵ１００は、同図におけるシーケンス番号に当該データセグメントがデータのどの位置にあたるのかを相対的に示す情報をセットし、その他必要な情報を各データエリアにセットして、これを当該データセグメントに付加する。
【００４１】
ＣＰＵ１００は、クライアント装置５０へデータセグメントを送信した後、当該データセグメントがクライアント装置５０に受信されたことを示す確認応答の受信を待機する。なお、確認応答のヘッダのデータ構造も、図３に示されるような構造になっている。同図における確認応答番号には、クライアント装置５０が次に受信を期待するデータセグメントのシーケンス番号がクライアント装置５０によりセットされる。
【００４２】
ＣＰＵ１００は、このような確認応答の受信を待機するため、タイマ１００ａに一定時間（以下、タイムアウト値という）をセットし、タイマ１００ａにその後の経過時間を計測させる。この計測の間、確認応答を受信する前に、タイマ１００ａからタイムアウト値が経過したことを示すトリガ信号が出力されると、ＣＰＵ１００は、当該データセグメントがクライアント装置５０に受信されなかったと判定する。そして、タイマ１００ａの値をリセットするとともに、当該データセグメントを再送する。このデータセグメント再送後に確認応答を受信すると、当該確認応答がオリジナルデータセグメントに対するものであるのか又は再送データセグメントに対するものであるのかの判定処理を以下のように行う。
【００４３】
この判定処理において、ＣＰＵ１００は、再送したデータセグメントに対する確認応答が有すると予測される確認応答番号（以下、予測確認応答番号という）の値と、受信した確認応答の確認応答番号（以下、比較対象確認応答番号という）の値とを比較する。ここで、再送データセグメントに対する予測確認応答番号の値とは、当該再送データセグメントに後続するデータセグメントのシーケンス番号の値と同じである。本実施形態では、データセグメントを再送した際に、その後続データセグメントのシーケンス番号の値を予測確認応答番号としてＲＡＭ１０２に記憶しておき、確認応答を受信することにより判定処理を実行する際には記憶しておいた予測確認応答番号を読み出して比較のために用いるようになっている。尚、後述の第２実施形態において説明するが、サーバ装置１０は複数種類のパラメータ変数を記憶し、輻輳制御に用いている。この変数のうち、次に送信するデータセグメントのシーケンス番号を記憶する変数snd_nxtの値は、再送されたデータセグメントに後続する値となっているはずである。従って、予測確認応答番号をＲＡＭ１０２に記憶しておくのではなく、snd_nxtの値を用いて上記判定を行ってもよい。
【００４４】
そして、比較対象確認応答番号が予測確認応答番号よりも大きい場合には、当該確認応答がオリジナルデータセグメントに対応するものであると判定する。即ち、オリジナルデータセグメントはクライアント装置５０に受信されたと判定し、続いて、後続のオリジナルデータセグメントを送信する。
また、比較対象確認応答番号の値が予測確認応答番号の値と同じである場合には、当該確認応答がオリジナルデータセグメントに対応するものであるか又は再送データセグメントに対応するものであるか判定できない。そのため、ＣＰＵ１００は、当該確認応答は再送データセグメントに対応するものだと推定する。即ち、オリジナルデータセグメントはクライアント装置５０に受信されなかったと判定し、続いて、当該再送データセグメントに後続する再送データセグメントが有るか否かを判定する。この判定結果が肯定的で有れば、後続の再送データセグメントを送信し、この判定結果が否定的で有れば、後続のオリジナルデータセグメントを送信する。
以上のようにして、ＣＰＵ１００は判定処理を行う。
【００４５】
＜クライアント装置５０の構成＞
クライアント装置５０は、一般的なコンピュータと同様であるから、本実施形態に係る機能についてのみ説明する。
クライアント装置５０は、サーバ装置１０からデータセグメントを受信すると、当該データセグメントを受信したことを示す確認応答をサーバ装置１０へ送信する。具体的には、確認応答に含まれる確認応答番号に、当該データセグメントに後続するデータ位置を示すシーケンス番号をセットして、これをサーバ装置１０へ送信する。
しかし、クライアント装置５０がサーバ装置１０とパケット通信を行っている際、例えば通信端末４０と移動パケット通信網３０との間の無線通信環境が悪化したとする。この場合、クライアント装置５０はサーバ装置１０から送信されたデータセグメントを遅延して順次受信することになる。このとき、例えば、２個のデータセグメントを受信する間隔が所定の時間よりも短い場合には、２つめのデータセグメントに対する確認応答により、２個のデータセグメントを受信したことをサーバ装置１０に通知する。具体的には、確認応答の確認応答番号に、２つ目に受信したデータセグメントに後続するデータのシーケンス番号をセットし、これをサーバ装置１０へ送信する。
【００４６】
（２．動作）
次に本実施形態の動作について説明する。
図４は、サーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の一例を示すシーケンスチャートである。また、図５は、サーバ装置１０の本実施形態に係るデータセグメントの送信動作及び受信動作を示すフローチャートである。なお、本実施形態の動作においては、スライディングウィンドウ方式を用いて、データセグメントを送信するものとする。本実施形態において、通信開始時点でのウィンドウサイズを「３」とし、クライアント装置５０が受信可能なデータセグメントの容量は送信装置が設定するウィンドウのサイズに対して十分に大きいと仮定する。また、説明の簡易のため、ウィンドウサイズは「３」のまま固定とし、輻輳制御によるウィンドウの増加は行わない。また、再送タイムアウトが発生した場合には、再送タイムアウトの発生を検出する直前のウィンドウサイズをＲＡＭ１０２に記憶する。
【００４７】
まず、図４において、サーバ装置１０から、シーケンス番号０、１０００、２０００をそれぞれ有するデータセグメント（オリジナルデータセグメントＳ１、Ｓ２、Ｓ３）がクライアント装置５０へ送信される。
しかし、図示の例では、通信端末４０と移動パケット通信網３０との間の無線通信環境が悪化し、当該オリジナルデータセグメントＳ１、Ｓ２、Ｓ３の送信が一時的に中断されてしまう。その後、無線通信環境が良好となり、通信が再開されると、オリジナルデータセグメントＳ１、Ｓ２、Ｓ３はクライアント装置５０に送信される。
【００４８】
一方、クライアント装置５０では、オリジナルデータセグメントＳ１、Ｓ２、Ｓ３が順次遅延して受信される。ここでは、オリジナルデータセグメントＳ１及びＳ２の受信間隔が所定の時間より短かったとし、確認応答番号２０００を有する確認応答Ｒ２が、オリジナルデータセグメントＳ１に対応する確認応答とオリジナルデータセグメントＳ２に対応する確認応答としてサーバ装置１０へ送信される。
【００４９】
次に、以上説明したところまでのサーバ装置１０の動作について、図５を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、ステップＳ３００において、オリジナルデータセグメントＳ１、Ｓ２、Ｓ３の送信を行う。次いで、オリジナルデータセグメントＳ１に対してクライアント装置５０から送信される確認応答の受信を待機する。このため、ＣＰＵ１００は、タイマ１００ａにタイムアウト値をセットし、タイマ１００ａにその後の経過時間の計測をさせる（ステップＳ３０１）。
【００５０】
そして、ＣＰＵ１００は、何らかの確認応答を受信したか否かを判断し（ステップＳ３０２）、この判断結果が「ＮＯ」である場合にはタイマ１００ａのタイムアウトが発生したか否かを判断する（ステップＳ３０３）。そして、ステップＳ３０３の判断結果が「ＮＯ」である場合には、ステップＳ３０２に戻る。以後、ＣＰＵ１００は、タイマ１００ａにタイムアウトが発生するまでの間、確認応答が受信されない限り、ステップＳ３０２およびＳ３０３の判断を繰り返す。
【００５１】
ここで、データセグメントＳ１〜Ｓ３のクライアント装置５０への到達が遅れ、クライアント装置５０から送信された確認応答Ｒ２を受信する前に、タイムアウト値が経過したとする。
この場合、確認応答を受信することなく、タイマ１００ａによって測定される経過時間がタイムアウト値に達し、トリガ信号が出力される（ステップＳ３０２；ＮＯ、ステップＳ３０３；ＹＥＳ）。この場合、ＣＰＵ１００は、タイマ１００ａの値をリセットするとともに、処理をステップＳ３０４へ進める。
【００５２】
ステップＳ３０４において、ＣＰＵ１００は、オリジナルデータセグメントＳ１がクライアント装置５０に受信されなかったと判定し、シーケンス番号０を有するデータセグメント（図４における再送データセグメントＳ′１）をクライアント装置５０へ再送するとともに、タイマ１００ａにタイムアウト値をセットし、タイマ１００ａに経過時間の計測をさせる。この時、タイムアウト発生により、ウィンドウサイズは最小値に縮小されるので、１データセグメントのみが再送される。
【００５３】
そして、ＣＰＵ１００は、何らかの確認応答を受信したか否かを判断し（ステップＳ３０５）、この判断結果が「ＮＯ」である場合にはタイマ１００ａのタイムアウトが発生したか否かを判断する（ステップＳ３０６）。そして、ステップＳ３０６の判断結果が「ＮＯ」である場合には、ステップＳ３０５に戻る。以後、ＣＰＵ１００は、タイマ１００ａにタイムアウトが発生するまでの間、確認応答が受信されない限り、ステップＳ３０５およびＳ３０６の判断を繰り返す。
その後、タイムアウト値が経過する前に、即ちタイマ１００ａからトリガ信号が出力される前に、上述の確認応答Ｒ２を受信したとする。この場合、ステップＳ３０５に進んだとき、その判断結果が「ＹＥＳ」となって、処理はステップＳ３０７に移行する。
【００５４】
ステップＳ３０７において、ＣＰＵ１００は、タイマ１００ａの値をリセットする。そして、確認応答Ｒ２の有する確認応答番号（比較対象確認応答番号）の値（２０００）と、ＲＡＭ１０２に記憶しておいた、ステップＳ３０４で再送した再送データセグメントに対する確認応答の予測確認応答番号の値（１０００）とを比較する。この例では、比較対象確認応答番号の値が予測確認応答番号の値よりも大きい。このため、ＣＰＵ１００は、当該確認応答Ｒ２はオリジナルデータセグメントＳ１及びＳ２に対応するものであると判定する。即ち、オリジナルデータセグメントＳ１、Ｓ２はクライアント装置５０に受信され、パケットロスは発生していなかったと判定する。この結果、ウィンドウサイズが、ＲＡＭ１０２の記憶情報に基づいてタイムアウト発生前の「３」に復元するとともに、ウィンドウがオリジナルデータセグメントＳ１、Ｓ２の分だけスライドし、送信済みのデータセグメントＳ３に後続する２個のデータセグメントの送信が可能になる。
【００５５】
そこで、ステップＳ３０９において、サーバ装置１０のＣＰＵ１００は、オリジナルデータセグメントＳ３に後続するオリジナルデータセグメントＳ４およびＳ５を送信する。
図４においては、ステップＳ３０９に対応する処理として、サーバ装置１０からクライアント装置５０へオリジナルデータセグメントＳ４およびＳ５が送信される。そして、処理は、ステップＳ３０１に戻り、タイマ１００ａによる経過時間の測定が開始される。
【００５６】
その後、ＣＰＵ１００は、タイマ１００ａにタイムアウトが発生するまでの間、確認応答が受信されない限り、上述したステップＳ３０２およびＳ３０３の判断を繰り返す。
一方、サーバ装置１０で上述の処理が行われている間、クライアント装置５０にオリジナルデータセグメントＳ３が受信され、当該オリジナルデータセグメントＳ３に対応する、確認応答番号３０００を有する確認応答Ｒ３が、サーバ装置１０へ送信される。
【００５７】
この確認応答番号３０００を有する確認応答Ｒ３がサーバ装置１０に到達すると、図５において、サーバ装置１０のＣＰＵ１００によるステップＳ３０２の判断結果は「ＹＥＳ」となる。この結果、ウィンドウがさらに１つ分スライドされ、送信済みデータセグメントの最後尾であるオリジナルデータセグメントＳ５に後続するデータセグメントが１個送信可能となる。そこで、ステップＳ３００において、後続のシーケンス番号５０００を有するオリジナルデータセグメントＳ６を送信する。
図４においては、ステップＳ３０２に対応する処理として、サーバ装置１０からオリジナルデータセグメントＳ６がクライアント装置５０へ送信される。
以上のようにして、サーバ装置１０からクライアント装置５０へデータセグメントが送信される。
【００５８】
[第２実施形態]
次に、サーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の他の例について説明する。以下、上記第１実施形態と共通する部分については、その説明を省略したり、同一の符号を使用して説明したりする。
（１．構成）
＜サーバ装置１０の構成＞
サーバ装置１０の本実施形態に係る構成のみについて説明する。
サーバ装置１０のＲＯＭ１０３には、ＣＰＵ１００にデータセグメント送信制御処理を行わせるためのプログラムが記憶されている。本実施形態に係る送信制御処理とは、以下の処理のことであるが、上述の第１実施形態の送信制御処理と共通する部分についての説明は省略する。
【００５９】
本実施形態においては、ＣＰＵ１００は、データセグメントをクライアント装置５０へ送信する場合、第１実施形態におけるスライディングウィンドウ方式による制御の他に、輻輳制御を行うことによりデータセグメントの通信速度を制御する。簡単にいうと、ＣＰＵ１００は、通信の状態に応じて、確認応答の受信を待たずに一度に送信することができるデータセグメント数、つまりウィンドウサイズを増減させる。このウィンドウサイズの変更は、送信済みデータセグメントに対する確認応答を受信する度に行われる。なお、通信状態に応じて、輻輳ウィンドウをどのように設定するかという情報も予めＲＯＭ１０３に記憶されている。
【００６０】
ここで、輻輳制御について詳述する。本実施形態によるサーバ装置１０は、少なくともsnd_max、snd_nxt、snd_una、snd_wndおよびsnd_cwndの５種類のパラメータ変数をＨＤ１０４に記憶しており、これら５種類のパラメータ変数に基づいて算出される数のデータセグメントをクライアント装置５０へ送信することにより、輻輳制御を行っている。図６は、これら５種類のパラメータ変数の関係を説明するための図である。snd_maxには、次に送信するべきオリジナルデータセグメントのシーケンス番号のうちで最大のシーケンス番号（図６では、シーケンス番号５０００）が格納されている。snd_nxtには、サーバ装置１０が次に送信するデータセグメントのシーケンス番号（図６では、シーケンス番号５０００）が格納されている。snd_unaには、送信済みデータセグメントのうち、確認応答を受信していないデータセグメントが有するシーケンス番号のうちで最小のシーケンス番号（図６では、シーケンス番号２０００）が格納されている。
【００６１】
snd_cwndには、サーバ装置１０が先に送信したデータセグメントに対して確認応答を受信することなく送信可能なセグメントの数を示す値が格納されている。１個のセグメントは、最大セグメントサイズ（Maximum Segment Size：以下、「ＭＳＳ」という）の単位で表され、デフォルトでは１ＭＳＳ＝１，４６０バイトと定められている。snd_cwndには、例えば、初期値として３ＭＳＳが格納されており、サーバ装置１０のＣＰＵ１００はデータセグメントの送信が正常に行われている限り、スロースタートと呼ばれるアルゴリズムに従って、snd_cwndの値を増加させていく。具体的には、送信したデータセグメントに対する確認応答を受信する度に、snd_cwndが所定の閾値（例えば、６５５３５バイト）に達するまで、その値を指数関数的に増加させていく。尚、snd_cwndは、サーバ装置１０が設定する値であり、輻輳ウィンドウサイズと呼ばれる。
【００６２】
一方、snd_wndには、クライアント装置５０から通知された広告ウィンドウサイズが格納されている。この広告ウィンドウサイズとは、クライアント装置５０の受信バッファの空き容量を示す値であり、バイト単位で表される。
サーバ装置１０は、広告ウィンドウサイズ（snd_wnd）と輻輳ウィンドウサイズ（snd_cwnd）の値のより小さい方を送信ウィンドウサイズとして定め、これにより輻輳制御を実現する。このように、送信ウィンドウサイズは広告ウィンドウサイズを超えることがないため、クライアント装置５０のバッファの空き容量を超える数のデータセグメントがクライアント装置５０に対して送信されることはない。本実施形態では、広告ウィンドウサイズが、輻輳ウィンドウサイズに対して十分大きい値であると仮定し、説明の便宜上、送信ウィンドウサイズを「輻輳ウィンドウサイズ」と称する。
【００６３】
本実施形態において、サーバ装置１０のＣＰＵ１００は、再送タイムアウトの発生を検出すると、まず、snd_cwndの値を１ＭＳＳに設定するとともに、再送タイムアウトの発生を検出する直前のsnd_cwndの値をＲＡＭ１０２に格納する。また、ＣＰＵ１００は、snd_nxtをsnd_unaの値で書き換えて、snd_nxtで示されるデータセグメントから再送信を開始するとともに、再送信したデータセグメントに対して確認応答を受信する毎にsnd_cwndに格納されている値を上述したスロースタートにしたがって１ＭＳＳずつ増加させる。
【００６４】
本実施形態では、データセグメントの再送後確認応答を受信した場合には、第１実施形態で説明した判定処理（図５のステップＳ３０７、第２実施形態では図８のステップＳ３０７）を行う。その結果、受信した確認応答がオリジナルデータセグメントに対するものであると判定された場合には、輻輳ウィンドウサイズを、再送データセグメントを送信する前に設定されていた輻輳ウィンドウサイズに復元する。つまり、輻輳ウィンドウサイズの値を、再送タイムアウト検出時にＲＡＭ１０２に記憶しておいたsnd_cwndの値で更新する。また、この際、ＣＰＵ１００は、snd_nxtをsnd_maxのシーケンス番号で書き換えて、snd_nxtで示されるデータセグメントから送信を開始する。
本実施形態においては、ＣＰＵ１００は、以上のような輻輳制御を行うことにより、タイムアウト発生前のデータの流量を即座に回復できる。
【００６５】
（２．動作）
図７は、サーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の他の例を示すシーケンスチャートである。図８は、サーバ装置１０の本実施形態に係るセグメント送信動作及び受信動作を示すフローチャートである。また、図９（ａ）から図９（ｃ）は、輻輳ウィンドウサイズの遷移例を説明するための概念図である。なお、上述の第１実施形態と共通するステップについては同一の符号を使用し、その詳細な説明を省略する。
【００６６】
まず、図７において、サーバ装置１０から、シーケンス番号０、１０００、２０００、３０００，４０００を有するそれぞれのデータセグメント（オリジナルデータセグメントＳ１１、Ｓ１２、Ｓ１３、Ｓ１４、Ｓ１５）がクライアント装置５０へ送信される。この時点での輻輳ウィンドウサイズsnd_cwndは、５ＭＳＳである。ここで、図９（ａ）に示すように、確認応答未受信のデータセグメントの最小シーケンス番号０（Ｓ１１）がsnd_unaの値として記憶される。また、次に送信されるオリジナルデータセグメントのシーケンス番号５０００がsnd_maxに記憶され、次に送信されるべきデータセグメント（Ｓ１６）のシーケンス番号５０００がsnd_nxtに記憶される。
【００６７】
図示の例では、例えば通信端末４０と移動パケット通信網３０との間の無線通信環境が悪化し、当該オリジナルデータセグメントＳ１１〜Ｓ１５が一時的にネットワーク内に滞留したとする。その後、無線通信環境が良好となり、通信が再開されると、オリジナルデータセグメントＳ１１〜Ｓ１５はクライアント装置５０に順次到着する。即ち、オリジナルデータセグメントＳ１１〜Ｓ１５は、各々の送信時から大きく遅延してクライアント装置５０に到着することとなる。
クライアント装置５０では、まず、オリジナルデータセグメントＳ１１が受信されると、当該オリジナルデータセグメントＳ１１に対応する、確認応答番号１０００を有する確認応答Ｒ１１が送信される。
【００６８】
一方、サーバ装置１０では、上述のデータセグメントＳ１１〜Ｓ１５の受信遅延があったため、クライアント装置５０から送信された確認応答Ｒ１１を受信する前に、タイムアウト値が経過したとする。即ち、ステップＳ３０１の後タイムアウト値が経過してタイマ１００ａからトリガ信号が出力されても、ＣＰＵ１００は、確認応答を受信することができなかったとする（ステップＳ３０２；ＮＯ、ステップＳ３０３；ＹＥＳ）。ここで、図９（ａ）に示すように、サーバ装置１０は、輻輳ウィンドウサイズを１ＭＳＳに書き換えるとともに、snd_nxtの値をsnd_unaの値で置き換える。
【００６９】
次に、ステップＳ'３０４において、ＣＰＵ１００は、オリジナルデータセグメントＳ１１がクライアント装置５０に受信されなかったと判定し、snd_nxtが示すシーケンス番号０を有するデータセグメント（図７における再送データセグメントＳ′１１）をクライアント装置５０へ再送するとともに、タイマ１００ａにタイムアウト値をセットし、タイマ１００ａにタイムアウト値の計測をさせる。
その後、タイムアウト値が経過する前に即ちタイマ１００ａからトリガ信号が出力される前に、上述の確認応答Ｒ１１を受信すると、処理はステップＳ３０７に移行する。
【００７０】
次に、以上説明したところまでのサーバ装置１０の動作について、図８を参照しながら説明する。
サーバ装置１０のＣＰＵ１００は、ステップＳ３００において、輻輳ウィンドウサイズを５ＭＳＳとして、５つのオリジナルデータセグメントＳ１１〜Ｓ１５を送信する。次いで、Ｓ３０１〜Ｓ３０３の処理を行い、続いて、ステップＳ′３０４に進んだとする。ステップＳ′３０４では、ＣＰＵ１００は、輻輳ウィンドウサイズを１ＭＳＳとして、輻輳制御を行い、シーケンス番号０を有するデータセグメント（再送データセグメントＳ′１１）を再送する。次いで、サーバ装置１０は確認応答Ｒ１１を受信するので（ステップＳ３０５；ＹＥＳ）、続いて、ステップＳ３０７の処理を行う。
【００７１】
このステップＳ３０７において、ＣＰＵ１００は、確認応答Ｒ１１の有する確認応答番号（比較対象確認応答番号）の値（１０００）と、ステップＳ３０４で再送した再送データセグメントに対する確認応答の予測確認応答番号の値（１０００）とを比較する。この場合、snd_nxtの値を参照することにより予測確認応答番号の値を取得してもよいし、第１実施形態で示したように、ＲＡＭ１０２の記憶情報を参照するようにしてもよい。ここでは、比較対象確認応答番号の値が予測確認応答番号の値と一致するため、当該確認応答Ｒ１１がオリジナルデータセグメントＳ１１に対応するものであるか又は再送データセグメントＳ′１１に対応するものであるか判定できない。そのため、ＣＰＵ１００は、確認応答Ｒ１１は再送データセグメントＳ′１１に対応するものだと推定する。即ち、セグメントが喪失し、オリジナルデータセグメントＳ１１はクライアント装置５０に受信されなかったと判定し、ステップＳ３０８へ進む。
【００７２】
ステップＳ３０８では、再送データセグメントＳ′１１に後続する再送データセグメントが有るか否かの判定を行う。この時のsnd_nxtの値は、送信済みデータセグメントＳ１２のシーケンス番号１０００なので（図９（ａ）参照）、再送データセグメントは有ると判定して、次いでステップＳ′３０４に進む。ステップＳ′３０４においては、確認応答Ｒ１１を受信したことからウィンドウサイズを２ＭＳＳとして輻輳制御を行い、後続のシーケンス番号１０００、２０００を有するそれぞれのデータセグメントを２つ（Ｓ′１２、Ｓ′１３）再送するとともに、タイマ１００ａをセットする。
【００７３】
図７においては、サーバ装置１０から再送データセグメントＳ′１２、Ｓ′１３が送信される。
一方、クライアント装置５０では、オリジナルデータセグメントＳ１２、Ｓ１３、Ｓ１４に対応する、確認応答番号２０００，３０００，４０００を有するそれぞれの確認応答Ｒ１２、Ｒ１３、Ｒ１４が送信されるが、無線通信環境の悪化により、確認応答Ｒ１２、Ｒ１３が喪失されたとする。この結果、確認応答Ｒ１４のみがサーバ装置１０へ送信される。
【００７４】
図８に戻って、タイマ１００ａによって計測される経過時間がタイムアウト値を経過することなく、サーバ装置１０が確認応答Ｒ１４を受信する（ステップＳ３０５；ＹＥＳ）と、ステップＳ３０７へ進む。
ステップＳ３０７においては、ＣＰＵ１００は、確認応答Ｒ１４の有する確認応答番号（比較対象確認応答番号）の値（４０００）と、再送データセグメントＳ′１３に対する確認応答の予測確認応答番号の値（３０００）とを比較する。ここでは、比較対象確認応答番号が予測確認応答番号の値より大きくなるため、ＣＰＵ１００は、セグメントの喪失は発生せずオリジナルデータセグメントＳ１１〜Ｓ１４はクライアント装置５０に受信されたと判定し、ステップＳ′３０９へ進む。
【００７５】
ステップＳ′３０９では、ＣＰＵ１００は、ＲＡＭ１０２の記憶情報を参照して、輻輳ウィンドウサイズを、再送タイムアウト発生直前の輻輳ウィンドウサイズに復元する。即ち、ステップＳ′３０９では、輻輳ウィンドウサイズを、ＲＡＭ１０２に記憶しておいた輻輳ウィンドウサイズ５ＭＳＳにまず復元し、確認応答Ｒ１４を受信したことにより更に１ＭＳＳ増分して、輻輳ウィンドウサイズを６ＭＳＳとする。この際、図９（ｂ）に示すように、snd_nxtの値をsnd_maxの値で書き換える。また、オリジナルデータセグメントＳ１５に対する確認応答は未受信なので、snd_unaの値はオリジナルデータセグメントＳ１５のシーケンス番号である４０００となる。輻輳ウィンドウはsnd_unaの値から６ＭＳＳ分であるので、輻輳ウィンドウ内であり且つ未送信である５つのオリジナルデータセグメントＳ１６〜Ｓ２０を続けて送信する。
【００７６】
図８においては、シーケンス番号５０００、６０００，７０００，８０００、９０００を有するそれぞれのオリジナルデータセグメントＳ１６、Ｓ１７、Ｓ１８、Ｓ１９、Ｓ２０がサーバ装置１０からクライアント装置５０へ送信される。
これらオリジナルデータセグメントの送信を行っている間、ＣＰＵ１００は、確認応答Ｒ１５を受信する。これにより、ＣＰＵ１００は、オリジナルデータセグメントＳ１５がクライアント装置５０により受信されたと判定し、snd_unaの値をオリジナルデータセグメントＳ１６に対応するシーケンス番号５０００とする。更に、輻輳ウィンドウサイズが１ＭＳＳ増分され、７ＭＳＳとなる（図９（ｃ）参照）。この結果、後続するオリジナルデータセグメントＳ２１、Ｓ２２の送信が可能となり、これらのデータセグメントがサーバ装置１０からクライアント装置５０へ送信される。
【００７７】
以上のような構成により、データセグメントの不必要な再送を防ぐと共に、データセグメントの通信速度の不必要な減速を防ぐことができる。また、通信速度を再送タイムアウト発生前の速度から求められる値に復元するため、不必要な再送により生じた通信速度の低下を、すばやく補正することができる。
【００７８】
［変形例］
以上、本発明の実施形態について説明したが、本発明はその主要な特徴から逸脱することなく他の様々な形態で実施することが可能である。なお、変形例としては、例えば、以下のようなものが考えられる。
【００７９】
上述の実施形態においては、ＴＣＰに従ってパケット通信を行うようにしたが、本発明は、データセグメントまたはデータブロックの再送制御を行うプロトコルであれば、ＴＣＰ以外の通信プロトコルにも適用可能である。また、他のプロトコルを用いる場合、ＴＣＰが採用しているスライディングウィンドウ方式と類似のウィンドウを用いて、データセグメントを送信しても良い。
【００８０】
また、サーバ装置１０で行った確認応答に対するデータセグメントの上述の判定は、他のサーバ装置で行っても良い。このような構成において、サーバ装置１０は、再送データセグメント送信後に確認応答を受信すると、この他のサーバ装置に当該確認応答がオリジナルデータセグメントに対するものか又は再送データセグメントに対するものかを問い合わせる。他のサーバ装置は、上述のサーバ装置１０が行った判定処理を行い、この判定結果をサーバ装置１０へ送信する。サーバ装置１０は、送信された判定結果に基づいて、確認応答に対するデータセグメントを判定することができる。
【００８１】
なお、上述の実施形態においては、クライアント装置５０は通信端末４０を介してサーバ装置１０とパケット通信を行った。しかし、クライアント装置５０が無線通信機能を備え、通信端末４０を介することなく、移動パケット通信網３０、インターネット２０を介してサーバ装置１０とパケット通信を行う構成であっても良い。
【図面の簡単な説明】
【００８２】
【図１】本発明の第１実施形態に係る通信システム１の構成を示すブロック図である。
【図２】同実施形態に係るサーバ装置１０の構成を示すブロック図である。
【図３】同実施形態に係るデータセグメントに付加されるヘッダのデータ構成を示す図である。
【図４】同実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の一例を示すシーケンスチャートである。
【図５】同実施形態に係るサーバ装置１０のデータセグメントの送信及び受信動作を示すフローチャートである。
【図６】本発明の第２実施形態に係る送信ウィンドウを説明するための図である。
【図７】同２実施形態に係るサーバ装置１０とクライアント装置５０との間でパケット通信を行う場合の一例を示すシーケンスチャートである。
【図８】同実施形態に係るサーバ装置１０のデータセグメントの送信及び受信動作を示すフローチャートである。
【図９（ａ）】同実施形態に係る輻輳ウィンドウの遷移を説明するための図である。
【図９（ｂ）】同実施形態に係る輻輳ウィンドウの遷移を説明するための図である。
【図９（ｃ）】同実施形態に係る輻輳ウィンドウの遷移を説明するための図である。
【図１０】従来のサーバ装置１０'とクライアント装置５０との間でパケット通信を行う場合の一例を示すシーケンスチャートである。
【図１１】従来のサーバ装置１０'とクライアント装置５０との間でパケット通信を行う場合の別の一例を示すシーケンスチャートである。
【符号の説明】
【００８３】
１・・・通信システム、１０・・・サーバ装置、１００・・・ＣＰＵ、１００ａ・・・タイマ、１０１・・・通信部、１０２・・・ＲＡＭ、１０３・・・ＲＯＭ、１０４・・・ＨＤ、１０５・・・記憶部、１１１・・・バス、２０・・・インターネット、３０・・・移動パケット通信網、４０・・・通信端末、５０・・・クライアント装置。
【図１】
2004222271.tif 000003
【図２】
2004222271.tif 000004
【図３】
2004222271.tif 000005
【図４】
2004222271.tif 000006
【図５】
2004222271.tif 000007
【図６】
2004222271.tif 000008
【図７】
2004222271.tif 000009
【図８】
2004222271.tif 000010
【図９（ａ）】
2004222271.tif 000011
【図９（ｂ）】
2004222271.tif 000012
【図９（ｃ）】
2004222271.tif 000013
【図１０】
2004222271.tif 000014
【図１１】
2004222271.tif 000015