(57)【要約】【課題】  受信装置へ宛てて再送信したセグメントの欠落を再送タイムアウトの発生を待つことなく検出してそのセグメントを再送信するとともに、そのセグメントを無駄に再送信することを回避する技術を提供すること。【解決手段】  送信済みのデータブロックの再送信を要求する旨の確認応答を所定の回数受信した場合にそのデータブロックを高速再送信するとともに所定のアルゴリズムにしたがって後続セグメントを送信する送信装置に、上記確認応答を更に受信しその受信回数が上記高速再送信を行うまでに送信したセグメントの数に基づいて算出される閾値を超えた場合には、２度目に高速再送信を行わせる。【選択図】        図３
2005167352.tif 000002
【特許請求の範囲】
【請求項１】
通信網を介して輻輳ウィンドウサイズ分のデータブロックを連続して受信装置へ送信する送信手段であって、データブロック毎に固有の番号を書き込んで送信する送信手段と、
前記受信装置から送信されてくる確認応答であって、前記受信装置が次に受信するべきデータブロックの番号が書き込まれている確認応答を受信する受信手段と、
既に受信済みの前記確認応答と同一の番号を有する重複確認応答が前記受信手段により受信された場合に、その受信回数を集計する集計手段と、
前記集計手段により集計された前記受信回数が所定の数に達した場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第１の再送信手段と、
前記第１の再送信手段によりデータブロックを再送信した後に、前記確認応答が前記受信手段により受信された場合に、前記送信済みのデータブロックに後続して送信するべき後続データブロックを送信するように前記送信手段を制御する制御手段と、
前記集計手段により集計された前記受信回数が、前記第１の再送信手段によりデータブロックの再送信が行われるまでに前記送信手段によって送信されたデータブロックの数に基づいて算出される閾値を超えた場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第２の再送信手段と
を有する送信装置。
【請求項２】
記憶手段と、
前記第２の再送信手段によりデータブロックが再送信されたことを契機として、前記輻輳ウィンドウサイズを前記記憶手段へ書き込んだ後に、該輻輳ウィンドウサイズを予め定められた値まで減少させる減少手段と
を有し、
前記制御手段は、前記第２の再送信手段によりデータブロックが再送信された後に前記重複確認応答が前記受信手段により受信された場合に、前記輻輳ウィンドウサイズを前記記憶手段の記憶内容に基づいて定まる値を初期値として所定のアルゴリズムにしたがって増加させて、前記後続データブロックを送信するように前記送信手段を制御する
ことを特徴とする請求項１に記載の送信装置。
【請求項３】
前記第２の再送信手段によりデータブロックが再送信されたことを契機として計時を開始する計時手段と、
前記計時手段により計時された時間が所定の時間に達するまでに、前記第２の再送信手段により再送信されたデータブロックの番号よりも大きい番号を有する確認応答が前記受信手段により受信されなかった場合に、該データブロックを再送信する第３の再送信手段とを有する
ことを特徴とする請求項１または２に記載の送信装置。
【請求項４】
前記受信手段は、受信した確認応答が前記通信網内で複製或いは分割されたデータブロックを受信したことを契機として前記受信装置により送信された確認応答であるか否かを該確認応答の内容に基づいて判定し、前記通信網内で複製或いは分割されたデータブロックを受信したことを契機として前記受信装置により送信された確認応答であると判定した確認応答を破棄する
ことを特徴とする請求項１〜３の何れか１に記載の送信装置。
【請求項５】
コンピュータ装置に、
通信網を介して輻輳ウィンドウサイズ分のデータブロックを連続して受信装置へ送信する送信機能であって、データブロック毎に固有の番号を書き込んで送信する送信機能と、
前記受信装置から送信されてくる確認応答であって、前記受信装置が次に受信するべきデータブロックの番号が書き込まれている確認応答を受信する受信機能と、
既に受信済みの確認応答と同一の番号を有する重複確認応答が前記受信機能により受信された場合に、その受信回数を集計する集計機能と、
前記集計機能により集計された前記受信回数が所定の数に達した場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第１の再送信機能と、
前記第１の再送信機能によりデータブロックを再送信した後に、前記確認応答が前記受信機能により受信された場合に、前記送信済みのデータブロックに後続して送信するべき後続データブロックを送信するように前記送信機能を制御する制御機能と、
前記集計機能により集計された前記受信回数が、前記第１の再送信機能によりデータブロックの再送信が行われるまでに前記送信機能によって送信されたデータブロックの数に基づいて算出される閾値を超えた場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第２の再送信機能と
を実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
欠落したデータを効率良く再送信する技術に関する。
【背景技術】
【０００２】
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）にしたがってデータ通信を行う送信装置や受信装置が普及している。この種の送信装置は、受信装置へ送信するべきデータを所定のデータサイズを有する部分データに分割し、各部分データ毎に固有のヘッダを付与したデータブロック（以下、「セグメント」）として送信する。なお、上記ヘッダには、各セグメントに内包されている部分データを一意に特定するシーケンス番号が書き込まれており、そのシーケンス番号が小さいものから順に送信される。一方、受信装置は、上記セグメントを受信すると、その旨を送信装置へ通知するための通信メッセージ（以下、「確認応答」）を送信装置へ返信する。この確認応答には、受信したセグメントの次に受信装置が受信するべきセグメントのシーケンス番号が書き込まれている。このため、ＴＣＰにしたがって行われる通信では、送信したセグメントが受信装置に正しく受信されたことを送信装置に確認させることが可能になっている。
【０００３】
しかしながら、送信装置から送信されたセグメントが常に受信装置へ到達するとは限らない。例えば、送信装置と受信装置との通信を仲介する通信網が輻輳状態であれば、送信装置から送信されたセグメントが受信装置へ到達しないこと（以下、「セグメントの欠落」）が起こり得る。このようなセグメントの欠落が発生した場合には、そのセグメントに対する確認応答が送信されてくることはない。よって、そのセグメントに対する確認応答が送信されてくることを待ち続けることは無駄である。そこで、ＴＣＰにしたがって行われる通信では、セグメントを送信してから所定の時間（以下、「再送タイムアウト時間」）が経過するまでに、そのセグメントに対応する確認応答が送信されてこない場合には、そのセグメントは欠落したものと見なして送信装置に再送信させるようにしている。なお、送信済みのセグメントに対応する確認応答とは、そのセグメントのシーケンス番号よりも大きいシーケンス番号が書き込まれた確認応答のことである。以下では、上記再送タイムアウト時間が経過するまでに対応する確認応答が送信されてこないことを「再送タイムアウト」と呼び、このようにしてセグメントを再送信することを「再送タイムアウトによる再送信」と呼ぶ。
【０００４】
上述したように、ＴＣＰにしたがって行われる通信では、セグメントが受信装置に正しく受信されたことを確認させてから次のセグメントを送信装置に送信させることによって、通信の信頼性を高めることができる。しかしながら、その一方で、データの送信効率が低下してしまうといった問題点がある。そこで、ＴＣＰにしたがってセグメントを送信する送信装置は、データの送信効率を向上させるために、受信装置から送信されてくる確認応答の到達を待たずに、連続して複数のセグメントを送信し、送信済みのセグメントに対応する確認応答を受信する度に、連続して送信するセグメントの数を順次増加させるようにすることもできる。以下では、このようにしてセグメントを送信することを「ウィンドウ制御」と呼び、連続して送信するセグメントの数を「輻輳ウィンドウサイズ」と呼ぶ。このようなウィンドウ制御を行ってセグメントを送信している状況下で、上記再送タイムアウトが発生した場合には、送信装置は、対応する確認応答を受信しなかったセグメントの再送信を行うことに加えて、上記輻輳ウィンドウサイズをその最小値（例えば、１つのセグメントを示す値）まで引き下げる。そして、この送信装置は、送信済みのセグメントに対応する確認応答を受信する度に輻輳ウィンドウサイズを所定のアルゴリズム（例えば、スロースタートアルゴリズムおよび輻輳回避アルゴリズム）にしたがって増加させる。これは、送信装置と受信装置との通信を仲介する通信網の輻輳に起因して上記再送タイムアウトが発生していた場合に、そのような状態の通信網へ大量のセグメントを流入させて輻輳を悪化させることを回避するためである。なお、スロースタートアルゴリズムとは、輻輳ウィンドウサイズを指数関数的に増加させるアルゴリズムであり、輻輳回避アルゴリズムとは、輻輳ウィンドウサイズを線形的に増加させるアルゴリズムである。以下では、スロースタートアルゴリズムにしたがって輻輳ウィンドウサイズを増加させる過程を「スロースタート過程」と称し、輻輳回避アルゴリズムにしたがって輻輳ウィンドウサイズを増加させる過程を「輻輳回避過程」と称する。一般に、ＴＣＰにしたがってセグメントを送信する送信装置は、輻輳ウィンドウサイズが所定の閾値に達するまでは上記スロースタート過程を行い、その閾値に達し後は輻輳回避過程を行うようになっている。
【０００５】
ところで、ＴＣＰにしたがってセグメントを送信する送信装置は、上述した再送タイムアウトによるセグメントの再送信の他に、既に受信済みの確認応答と同一の確認応答（以下、重複確認応答）を所定回数（例えば、３回）受信した場合に、そのセグメントを再送信するようになっている。このような態様でのセグメントの再送信は、再送タイムアウトの発生を待つことなくセグメントの再送信が行われるので、「高速再送信」と呼ばれている。この高速再送信を行った場合も、送信装置は、上記輻輳ウィンドウサイズを所定の値（例えば、高速再送信を行う時点の輻輳ウィンドウサイズの半分の値）まで引き下げ、送信済みのセグメントに対応する確認応答を受信する度に上記輻輳回避アルゴリズムにしたがって輻輳ウィンドウサイズを増加させる。これは、前述した再送タイムアウトによる再送信の場合と同様に通信網の輻輳を悪化させないようにするためである。なお、このような態様で輻輳ウィンドウサイズを増加させることは、上述したスロースタート過程を経ずに輻輳回避過程が行われるため、「高速回復」と呼ばれている。
【０００６】
このように、ＴＣＰにしたがってセグメントを送信する送信装置は、以上に説明した２つの契機でセグメントの再送信を行う。しかしながら、これら２つの契機は互いに無関係に発生し得るため、例えば、高速再送信を行った後に、その高速再送信に係るセグメントに対応する確認応答が所定の再送タイムアウト時間内に受信されず、更に再送タイムアウトが発生してしまうといったことが起こり得る。このような事態が生じてしまうと、輻輳ウィンドウサイズは、まず、高速再送が行われる時点で所定の値まで引き下げられ、次いで、再送タイムアウトによる再送信が行われる時点で、その最小値まで引き下げられることになる。つまり、データの送信効率が極度に悪化してしまう。このような問題点を解決するための技術としては、特許文献１に開示された技術が挙げられる。
【０００７】
特許文献１には、再送タイムアウトが発生した場合に、その再送タイムアウトが有効であるか否かを送信装置に判定させ、無効であると判定された場合には上記輻輳ウィンドウサイズの抑制を行わせないようにする技術が開示されている。具体的には、ＴＣＰにしたがって通信する送信装置と受信装置とを有する通信システムにおいて、同一のセグメントが重複して送信されてきた場合に、受信装置にその旨を送信装置へ通知させ、このような通知が送信されてきた場合には、送信装置は輻輳ウィンドウサイズを所定の値まで引き上げるようになっている。上述したようにＴＣＰにしたがってセグメントを送信する送信装置は、再送タイムアウトが発生した場合に輻輳ウィンドウサイズをその最小値まで引き下げるとともに、その再送タイムアウトに係るセグメントを再送信する。つまり、再送タイムアウトが発生した場合には、元々送信されたセグメントと再送信されたセグメントとの２つのセグメントが受信装置へ送信されることになる。そして、これら２つのセグメントの両者が受信装置へ到達したならば、上記再送タイムアウトは本来発生させる必要のなかったものである。特許文献１に開示された技術によれば、本来不要であった無効な再送タイムアウトにより輻輳ウィンドウサイズが過度に引き下げられることが回避されることになる。
【特許文献１】特開２００１−３５２３３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、再送タイムアウトにより再送信されたセグメントや高速再送信により再送信されたセグメントが常に受信装置へ到達するとは限らない。これら再送信に係るセグメントについても欠落してしまうことが起こり得るからである。再送信に係るセグメントの欠落が発生すると、受信装置が重複してセグメントを受信することがないため、その再送信が無効であったか否かを判定することができなくなってしまう。つまり、特許文献１に開示された技術を用いたとしても、再送信に係るセグメントの欠落が発生した場合には対処することができなくなってしまう。
【０００９】
そこで、再送信に係るセグメントが欠落したと推測される場合には、そのセグメントを再送信することが考えられる。しかしながら、再送タイムアウトによりこのような推測を行う態様では、再送タイムアウト時間が経過するまでそのセグメントの再送信は行われないことになり、データの送信効率が低下する虞がある。また、所定の数（例えば、３）の重複確認応答を受信したことを契機として機械的にセグメントの再送信を行う態様では、無駄な再送信が発生してしまう虞がある。
【００１０】
本発明は上記課題に鑑みてなされたものであり、受信装置へ宛てて再送信したセグメントの欠落を再送タイムアウトの発生を待つことなく検出してそのセグメントを再送信するとともに、そのセグメントを無駄に再送信することを回避する技術を提供することを目的としている。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明は、通信網を介して輻輳ウィンドウサイズ分のデータブロックを連続して受信装置へ送信する送信手段であって、データブロック毎に固有の番号を書き込んで送信する送信手段と、前記受信装置から送信されてくる確認応答であって、前記受信装置が次に受信するべきデータブロックの番号が書き込まれている確認応答を受信する受信手段と、既に受信済みの前記確認応答と同一の番号を有する重複確認応答が前記受信手段により受信された場合に、その受信回数を集計する集計手段と、前記集計手段により集計された前記受信回数が所定の数に達した場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第１の再送信手段と、前記第１の再送信手段によりデータブロックを再送信した後に、前記確認応答が前記受信手段により受信された場合に、前記送信済みのデータブロックに後続して送信するべき後続データブロックを送信するように前記送信手段を制御する制御手段と、前記集計手段により集計された前記受信回数が、前記第１の再送信手段によりデータブロックの再送信が行われるまでに前記送信手段によって送信されたデータブロックの数に基づいて算出される閾値を超えた場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第２の再送信手段とを有する送信装置を提供する。
また、上記課題を解決するために、本発明は、コンピュータ装置に、通信網を介して輻輳ウィンドウサイズ分のデータブロックを連続して受信装置へ送信する送信機能であって、データブロック毎に固有の番号を書き込んで送信する送信機能と、前記受信装置から送信されてくる確認応答であって、前記受信装置が次に受信するべきデータブロックの番号が書き込まれている確認応答を受信する受信機能と、既に受信済みの確認応答と同一の番号を有する重複確認応答が前記受信機能により受信された場合に、その受信回数を集計する集計機能と、前記集計機能により集計された前記受信回数が所定の数に達した場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第１の再送信機能と、前記第１の再送信機能によりデータブロックを再送信した後に、前記確認応答が前記受信機能により受信された場合に、前記送信済みのデータブロックに後続して送信するべき後続データブロックを送信するように前記送信機能を制御する制御機能と、前記集計機能により集計された前記受信回数が、前記第１の再送信機能によりデータブロックの再送信が行われるまでに前記送信機能によって送信されたデータブロックの数に基づいて算出される数を超えた場合に、前記重複確認応答の番号で特定されるデータブロックを再送信する第２の再送信機能とを実現させるプログラムを提供する。
このような送信装置およびプログラムによれば、重複確認応答を所定の数だけ受信したことによってデータブロックの再送信が行われた後に、更に、その重複確認応答を受信し、その受信回数が送信済みのデータブロックの数に基づいて算出される閾値を超えた場合には、再度そのデータブロックが再送信される。
【発明の効果】
【００１２】
本発明によれば、受信装置へ宛てて再送信したセグメントの欠落を再送タイムアウトの発生を待つことなく検出してそのセグメントを再送信するとともに、そのセグメントを無駄に再送信することを回避することが可能になるといった効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照しつつ本発明を実施するための最良の形態について説明する。
（Ａ：構成）
（Ａ−１：通信システムの構成）
図１は、本発明の実施形態に係る送信装置を有する通信システムの全体構成の一例を示す図である。図１に示されているように、この通信システムは、通信網１０に接続された送信装置２０と受信装置３０とを有している。この通信網１０は、例えば、インターネットであり、ルータやゲートウェイなどの中継装置を含んでいる。この通信網１０は、所定の通信プロトコル（本実施形態では、ＴＣＰ）にしたがって行われる通信を仲介することができる。なお、本実施形態では、通信網１０がインターネットである場合について説明するが、係る通信網はＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であっても良く、また、移動パケット通信網や無線ＬＡＮのような無線通信網であっても良い。要は、送信装置２０と受信装置３０との間で所定の通信プロトコルにしたがって行われる通信を仲介する通信網であれば、いずれであっても良い。また、本実施形態では、通信網１０を介して送信装置２０と受信装置３０とが行う通信がＴＣＰに準拠している場合について説明するが、係る通信が準拠するべき通信プロトコルはＴＣＰに限定されるものではないことは言うまでもない。要は、送信したデータブロックがその宛先へ到達したことを、シーケンス番号を用いて確認するとともに、データブロックを送信してから所定の再送タイムアウト時間が経過するまでに上記確認ができなかった場合に、そのデータブロックを再送信するような通信プロトコルであれば良い。
【００１４】
送信装置２０と受信装置３０とは、いずれも、通信網１０に接続されたパーソナルコンピュータ（以下、「ＰＣ」）であり、通信網１０を介してＴＣＰにしたがった通信を行うことができる。なお、本実施形態では、送信装置２０と受信装置３０とが、ＴＣＰにしたがって通信するＰＣである場合について説明するが、ＴＣＰにしたがって通信するＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｃｅ）や携帯電話機であっても良いことは勿論である。要は、所定の通信プロトコルにしたがって通信する機能を有するコンピュータ装置であれば、何れであっても良い。
【００１５】
図１に示す通信システムが、ＴＣＰにしたがって通信する従来の通信システムと異なっている点は、送信装置２０が高速再送信によりセグメントの再送信を行うとともに、送信済みのセグメントに後続して送信するべきセグメント（以下、「後続セグメント」）を所定のアルゴリズムにしてがって送信している状況下で、その高速再送信に係るセグメントが欠落したと判定される場合に、再度そのセグメントを送信装置２０に再送信させるようにした点である。具体的には、送信装置２０は、上記状況下で、更に重複確認応答を受信した場合に、その受信回数と上記高速再送信を行う以前に送信したセグメントの数とに基づいて、その高速再送信に係るセグメントが欠落したか否かを判定し、欠落したと判定した場合に再度そのセグメントを再送信する。以下では、従来の通信システムとの相違点である送信装置２０を中心に説明する。
【００１６】
（Ａ−２：送信装置２０の構成）
まず、図２を参照しつつ送信装置２０の構成を説明する。図２に示されているように、送信装置２０は、制御部１００と、通信インターフェイス（以下、「ＩＦ」と表記する）部１１０と、記憶部１２０と、これら各構成要素間のデータ授受を仲介するバス１３０とを有している。
【００１７】
制御部１００は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、記憶部１２０に格納されているソフトウェアを読み出し実行することにより、送信装置２０の各部を制御するためのものである。通信ＩＦ部１１０は、通信網１０に接続されており、通信網１０を介して送くられてくるセグメントを受信し制御部１００へ引渡すとともに、制御部１００から引渡されたセグメントを通信網１０へ送り出すためのものである。
【００１８】
記憶部１２０は、図２に示されているように、揮発性記憶部１２０ａと不揮発性記憶部１２０ｂとを有している。揮発性記憶部１２０ａは、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）であり、ソフトウェアにしたがって作動している制御部１００によってワークエリアとして利用される。一方、不揮発性記憶部１２０ｂは、例えば、ハードディスクであり、受信装置３０へ送信するべきデータや前述した輻輳ウィンドウサイズの初期値が格納されている。なお、本実施形態では、受信装置３０へ送信するべきデータが不揮発性記憶部１２０ｂに格納されている場合について説明したが、図示せぬ操作部（キーボードやマウスなど）をユーザが操作することにより係るデータを入力するとしても良いことは勿論である。
【００１９】
上記不揮発性記憶部１２０ｂには、上記各種データの他に、オペレーティングシステム（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ：以下、「ＯＳ」）を制御部１００に実現させるためのＯＳソフトウェアや、上記データをＴＣＰにしたがって受信装置３０へ送信するためのデータ送信ソフトウェアが格納されている。以下、これらソフトウェアを実行することによって制御部１００に付与される機能について説明する。
【００２０】
送信装置２０の電源（図示省略）が投入されると、制御部１００は、まず、ＯＳソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する。ＯＳソフトウェアにしたがって作動している制御部１００には、送信装置２０の各部を制御する機能、他のソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する機能が付与される。そして、ＯＳソフトウェアの実行を完了し、ＯＳを実現している状態の制御部１００は、受信装置３０から上記データの送信を要求されると、上記データ送信ソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する。このデータ送信ソフトウェアにしたがって作動している制御部１００には、ＴＣＰにしたがってセグメントを送信する一般的な送信装置と同一な機能の他に、本発明に係る送信装置に特有な機能が付与される。
【００２１】
ＴＣＰにしたがってセグメントを送信する一般的な送信装置と同一な機能とは、以下に述べる４つの機能である。第１に、受信装置３０へ送信するべきデータを所定のデータサイズを有する部分データに分割してセグメントを生成し、シーケンス番号が小さいものから順に上記輻輳ウィンドウサイズ分のセグメントを連続して送信するセグメント送信機能である。第２に、受信装置３０から送信されてくる確認応答を受信する受信機能である。前述したように、この確認応答には、受信装置３０が次に受信するべきセグメントのシーケンス番号が書き込まれている。第３に、既に受信済みの確認応答と同一の番号を有する重複確認応答が上記受信機能により受信された場合に、その受信回数を集計する集計機能である。第４に、上記集計機能により集計された前記受信回数が所定の数（例えば、３）に達した場合に、その重複確認応答の番号で特定されるセグメントを再送信する高速再送信機能である。第５に、上記高速再送信機能によりセグメントの再送信を行った後に、更に上記重複確認応答を受信した場合に、後続セグメントを１つづつ送信するように上記送信機能を制御する制御機能である。
【００２２】
一方、本発明に係る送信装置に特有な機能とは、上記集計機能により集計された受信回数が、上記高速再送信機能によりセグメントの再送信を行うまでに上記送信機能によって送信したセグメントの数に基づいて算出される閾値を超えた場合に、その重複確認応答のシーケンス番号で特定されるセグメントを再送信する第２の高速再送信機能である。なお、上記閾値としては、上記重複確認応答のシーケンス番号よりも大きいシーケンス番号を有し、上記高速再送信機能によりセグメントの再送信が行われるまでに送信されたセグメントの数を用いることが挙げられる。その理由は、このような閾値で表される数を超えて重複確認応答が送信されてくることは、上記後続セグメントが受信装置３０へ到達しているにも拘わらず、高速再送信に係るセグメントが受信装置３０へ到達していないこと（すなわち、高速再送信に係るセグメントの欠落）を意味しているからである。なお、上記閾値として、上記重複確認応答のシーケンス番号よりも大きいシーケンス番号を有し、上記高速再送信機能によりセグメントの再送信が行われるまでに送信されたセグメントの数に任意の数（例えば、１や２）を加算して得られる値を用いても良いことは勿論である。
【００２３】
以上に説明したように、送信装置２０のハードウェア構成は一般的なコンピュータ装置のハードウェア構成と同一であり、記憶部１２０に格納されている各種ソフトウェアを制御部１００に実行させることにより、ＴＣＰにしたがってセグメントを送信する従来の送信装置と同一の機能および本発明に係る送信装置に特有な機能とが付与される。なお、本実施形態では、上記各種機能をソフトウェアモジュールを用いて実現する場合について説明したが、これらソフトウェアモジュールと同一の機能を担っているハードウェアモジュールを用いて送信装置２０を構成しても良いことは勿論である。
【００２４】
（Ｂ：動作）
次いで、本実施形態に係る送信装置２０が行う動作のうち、その特徴を顕著に示す動作について図面を参照しつつ説明する。以下では、送信装置２０の不揮発性記憶部１２０ｂには、１００００バイトのデータサイズを有するデータが格納されているものとする。送信装置２０の制御部１００は、受信装置３０からの要求に基づいてこのデータを５００バイトずつに分割してセグメントを生成し送信するものとする。このようにして送信される各セグメントのヘッダには、そのセグメントに内包されている部分データの先頭位置に対応したシーケンス番号が書き込まれている。例えば、上記１００００バイトのデータのうちの５００バイト目から９９９バイト目までに対応する部分データを内包しているセグメントのヘッダには、シーケンス番号“５００”が書き込まれている。また、以下に説明する動作例では、前述した輻輳ウィンドウサイズの初期値として“３”が不揮発性記憶部１２０ｂに格納されているものとする。
【００２５】
本動作例の開始時点では、輻輳ウィンドウサイズの値は“３”であるから、送信装置２０の制御部１００は、まず、シーケンス番号が“０”、“５００”および“１０００”の３つのセグメントを送信する。このようにして送信されたセグメントは、通信網１０を介して受信装置３０へ到達する。本動作例では、これら３つのセグメントは間隔をおかずに略同時に受信装置３０へ到達したものとする。このように、略同時に３つのセグメントが送信されてきたため、受信装置３０は、これら３つのセグメントに対して１つの確認応答を送信するものとする。この確認応答には、次に受信するべきセグメントのシーケンス番号（すなわち、“１５００”）が書き込まれている。
【００２６】
図４は、受信装置３０から送信されてきた確認応答（ＡＣＫ１）を受信した場合に、送信装置２０の制御部１００が行う動作の流れを示すフローチャートである。図４に示されているように、制御部１００は、まず、通信ＩＦ部１１０を介して上記確認応答を受信すると、その確認応答が重複確認応答であるか否かを判定する（ステップＳＡ１）。具体的には、制御部１００は、受信した確認応答に書き込まれているシーケンス番号が既に受信済みの確認応答に書き込まれていたシーケンス番号と同一である場合に、重複確認応答であると判定する。このステップＳＡ１の判定結果が“Ｎｏ”である場合には、制御部１００は、従来の送信装置と同一の動作を行う（ステップＳＡ２）。逆に、ステップＳＡ１の判定結果が“Ｙｅｓ”である場合には、制御部１００は、後述するステップＳＡ３以降の処理を行う。
【００２７】
本動作例では、受信装置３０から送信された１つ目の確認応答（ＡＣＫ１）を受信した場合、このＡＣＫ１は受信装置３０から初めて送信されてきた確認応答であるから、ステップＳＡ１の判定結果は“Ｎｏ”になる。このため、ステップＳＡ２が実行される。具体的には、制御部１００は、従来の送信装置と同様に、スロースタートなどの所定のアルゴリズムにしたがって輻輳ウィンドウサイズを拡大し後続セグメントを送信する。本動作例では、図３に示されているように、輻輳ウィンドウサイズを６に拡大し、シーケンス番号が“１５００”〜“４０００”までの６個のセグメントを送信するものとする。以下では、このようにして送信された６個のセグメントのうち、シーケンス番号“１５００”を有するセグメントが欠落した場合について説明する（図３参照）。
【００２８】
上述したように、送信装置２０から送信された６個のセグメントのうち、シーケンス番号“１５００”を有するセグメントが欠落してしまったので、受信装置３０は、残りの５個のセグメントを受信する度に、受信したセグメントに先立って受信するべきセグメントを表すシーケンス番号（すなわち、“１５００”）を書き込んだ確認応答（図３：ＡＣＫ２〜ＡＣＫ６）を送信する。そして、送信装置２０の制御部１００は、これら５個の確認応答の各々を受信する度に、上記ステップＳＡ１の判定を行う。これら５個の確認応答に書き込まれているシーケンス番号は、既に受信済みの確認応答（ＡＣＫ１）に書き込まれていたシーケンス番号と同一であるから、ステップＳＡ１の判定結果は“Ｙｅｓ”になり、制御部１００はステップＳＡ３以降の処理を実行する。
【００２９】
ステップＳＡ１の判定結果が“Ｙｅｓ”である場合に行われるステップＳＡ３では、制御部１００は、受信した重複確認応答の受信回数を集計する。本動作例では、上記ＡＣＫ２〜ＡＣＫ６までの５個の確認応答が受信される度に、上記受信回数は、１、２、３…５と加算されてゆく。ステップＳＡ３に後続して実行されるステップＳＡ４は、ステップＳＡ３にて集計された受信回数が、前述した閾値を超えたか否かを判定するステップである。このステップＳＡ４の判定結果が“Ｎｏ”である場合には、制御部１００は、ステップＳＡ２の処理（すなわち、従来の送信装置と同一の処理）を実行し、逆に、その判定結果が“Ｙｅｓ”である場合には、上記重複確認応答に係るセグメントについて２度目の高速再送信を行い（ステップＳＡ５）、ステップＳＡ１以降の処理を繰り返し実行する。
【００３０】
本動作例では、１回目の高速再送信が行われるまでに、シーケンス番号が“１５００”であるセグメントに後続して送信されたセグメントの数は“５”である。このため、上記閾値には“５”が設定されることになる。なお、係る閾値を設定するタイミングとしては、１つ目の重複確認応答を受信した時点が挙げられる。その理由は、受信した確認応答が重複確認応答である場合には、新たなセグメントの送信を行わないことが一般的であり、１つ目の重複確認応答を受信した時点で係る閾値の設定を行っておけば充分だからである。このように上記閾値として“５”が設定されるため、受信装置３０から送信されたＡＣＫ２〜ＡＣＫ５の５個の重複確認応答については、ステップＳＡ４の判定結果は“Ｎｏ”になり、従来と同一の処理が行われる。具体的には、図３に示されているように、３つ目の重複確認応答（すなわち、ＡＣＫ４）が受信された時点で、その重複確認応答により再送信を要求されたセグメント（すなわち、シーケンス番号が“５００”であるセグメント）の再送信が行われる。そして、制御部１００は、４つ目および５つ目の重複確認応答（すなわち、ＡＣＫ５およびＡＣＫ６）を受信した場合には、高速回復を行って後続セグメント（シーケンス番号が４５００および５０００であるセグメント）を送信する。以下では、図３に示されているように、上記高速再送信に係るセグメントが更に欠落した場合について説明する。
【００３１】
図３に示されているように、高速再送信に係るセグメントが更に欠落してしまったので、受信装置３０は、シーケンス番号が“４５００”および“５０００”であるセグメントを受信した場合も、シーケンス番号“１５００”を書き込んだ確認応答を送信する。つまり、図３に示されているように、更に２個の重複確認応答が送信されてくることになる。そして、６番目に送信されてきた重複確認応答（すなわち、ＡＣＫ７）を受信した場合には、上述したステップＳＡ４の判定結果は“Ｙｅｓ”になり、シーケンス番号“１５００”を有するセグメントの２度目の高速再送信が行われることになる。
【００３２】
ここで、注目すべき点は、本動作例において受信装置３０から送信されてくる６個目の重複確認応答は、シーケンス番号が“４５００”であるセグメントを受信したことを契機として受信装置３０から送信された点である。図３に示されているように、このセグメントは１回目の高速再送信の後に送信されたセグメントである。ＴＣＰにしたがって行われる通信においては、送信装置から送信された順に受信装置へセグメントが到達することが一般的であるから、上記１回目の高速再送信に係るセグメントは欠落したものと推測される。つまり、本実施形態によれば、受信装置３０から送信されてきた重複確認応答の数と高速再送信を行うまでに送信したセグメントの数とに基づいて、高速再送信に係るセグメントの欠落が検出され、再度、高速再送信が行われることになる。
【００３３】
以上に説明したように、本実施形態によれば、高速再送信に係るセグメントが欠落した場合にその再送タイムアウトを待つことなく効率的に再送信することが可能になるといった効果を奏する。加えて、予め定められた数（例えば、３個）の重複確認応答を受信した場合に機械的に高速再送信を行う場合に比較して、送信済みのセグメントの数に基づいて上記２度目の高速再送信を行うようにしたため、無駄に高速再送信を行うことが回避されるといった効果を奏する。
【００３４】
（Ｃ：変形例）
以上、本発明を実施するための最良の形態について説明した。しかしながら、以下に述べるような変形を加えても良いことは勿論である。
【００３５】
（Ｃ−１：変形例１）
上述した実施形態では、１回目の高速再送信を行った後に高速回復を行って後続セグメントを送信する場合について説明したが、ＬｉｍｉｔｅｄＴｒａｎｓｍｉｔにより輻輳ウィンドウサイズを更新せずに後続セグメントを送信するとしても良いことは勿論である。また、１回目の高速再送信の後に高速回復を行う場合には、上記２度目の高速再送信を行った後も、高速回復を行うとしても勿論良い。そして、２度目の高速再送信に付随して高速回復を行う場合には、輻輳ウィンドウサイズを上記２度目の高速再送信を行う直前の値まで増加させてから高速回復を行わせるとしても良い。
【００３６】
具体的には、上記２度目の高速再送信を行う時点の輻輳ウィンドウサイズを保持ウィンドウサイズとして送信装置に記憶させ、その再送信に係るセグメントのシーケンス番号を有する確認応答が送信されてきた場合に、その保持ウィンドウサイズを初期値として高速回復を行わせるようにすれば良い。このようにすると、図５に示されているように、高速回復中に２度目の高速再送信が行われた場合であっても、あたかもその２度目に高速再送信により輻輳ウィンドウサイズが引き下げれなかったかの如く高速回復を継続することが可能になるといった効果を奏する。
【００３７】
なお、本変形例では、輻輳ウィンドウサイズを上記２回目の高速再送信の直前の値まで増加させる場合について説明したが、その２倍の値まで増加させるとしても良く、その半分の値まで増加させるとしても勿論良い。要は、上記２回目の高速再送信を行う直前の輻輳ウィンドウサイズに基づいて定まる値であれば何れであっても良い。
【００３８】
（Ｃ−２：変形例２）
ＴＣＰにしたがって行われる通信においては、セグメントの欠落が発生した場合以外にも上述した重複確認応答が受信装置から送信されてくることが起こり得る。その一例としては、通信網内でセグメントの複製或いは分割が行われ、同一のシーケンス番号を有する複数のセグメントが受信装置へ到達した場合が挙げられる。このように、セグメントの欠落以外に起因して送信されてくる重複確認応答まで含めて、送信済みのセグメントが欠落したか否かを判定したり、再送信に係るセグメントが欠落したか否かを判定してしまうと、本来再送信する必要のないセグメントまで再送信してしまう虞がある。そこで、通信網内で複製或いは分割が行われたことに起因して送信されてきた確認応答を送信装置に無視させるようにしても良い。このようなことは、以下のようにして実現される。すなわち、受信したセグメントが通信網内で複製或いは分割されたセグメントであるか否かをそのセグメントの内容（例えば、ＩＰオプションフィールドに書き込まれているデータ）に基づいて受信装置に判定させ、その判定結果を表す付加データを付与した確認応答を送信させるようにする。そして、受信した確認応答に係る付加データが含まれている場合には、その確認応答を送信装置に破棄させる。これにより、上記セグメントの複製或いは分割が行われたことに起因する弊害を回避することが可能になるといった効果を奏する。
【００３９】
（Ｃ−３：変形例３）
上述した実施形態では、高速再送信に係るセグメントが欠落したと判定される場合に、２度目の高速再送信を行わせる場合について説明したが、この２度目の高速再送信に係るセグメントについて再送タイムアウトが発生した場合には、再度そのセグメントを再送信しても良いことは勿論である。このようなことは、上記第２の再送信機能によりセグメントの再送信を行ったことを契機として計時を介する計時機能と、この計時機能により計時された時間が所定の再送タイムアウト時間に達するまでにそのセグメントに対応する確認応答が上記受信機能により受信されなかった場合に、再度そのセグメントを再送信する第３の再送信機能を設けておくことで実現される。このようにすると、上記第２の再送信機能により再送信したセグメントが更に欠落した場合にも、そのセグメントを確実に再送信することが可能になるといった効果を奏する。
【００４０】
（Ｃ−４：変形例４）
上述した実施形態では、高速再送信を行うまでにその高速再送信に係るセグメントに後続して送信したセグメントの数に基づいて算出される閾値を超える重複確認応答を受信した場合に、２度目に高速再送信を送信装置に行わせる場合について説明した。しかしながら、周知のＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）オプションや、以下に述べるタイムスタンプを用いて、高速再送信を行った後に送信した後続セグメントが受信装置に受信されているにもかかわらず、その高速再送信に係るセグメントが受信装置に受信されていないことを検出し、上記２度目の高速再送信を行わせるとしても勿論良い。
【００４１】
例えば、タイムスタンプを用いる態様では、セグメントを送信する際に、その送信時刻を表すタイムスタンプを書き込んだセグメントを送信装置に送信させ、受信したセグメントに書き込まれているタイムスタンプをそのまま書き込んだ確認応答を受信装置に送信させる。そして、セグメントの再送信を行う場合にはその再送信時刻を送信装置に記憶させ、その再送信時刻よりも後の時刻を表すタイムスタンプを有する確認応答を受信した場合には、そのセグメントを送信装置に再送信させるようにする。
【００４２】
このように、周知のＳＡＣＫオプション、タイムスタンプおよび送信済みセグメントの数の何れを用いて同一の効果を奏するが、最も好ましい態様は、上記閾値を用いる態様である。その理由は、ＳＡＣＫオプションやタイムスタンプを用いる場合には、受信装置がＳＡＣＫオプションやタイムスタンプを確認応答に付加する機能を有している必要があるが、上記閾値を用いる態様では、受信装置に特別な機能を設けておく必要がないからである。
【００４３】
（Ｃ−５：変形例５）
上述した実施形態では、受信装置へ送信するべきデータを所定のデータサイズを有する部分データに分割してセグメントを生成しそのセグメントを送信する場合について説明した。しかしながら、送信装置から受信装置へ送信されるデータ単位はセグメントに限定されるものではなく、パケットであっても良いし、フレームであっても勿論良い。要は、受信装置へ送信するべきデータを分割された部分データとその部分データを一意に表すシーケンス番号とを含んだデータブロックであれば、いずれであっても良い。
【００４４】
（Ｃ−６：変形例６）
上述した実施形態では、本発明に係る送信装置の機能を実現させるためのデータ送信ソフトウェアを不揮発性記憶部１２０ｂに予め格納させておく場合について説明した。しかしながら、例えば、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などのコンピュータ装置読み取り可能な記録媒体に、上記データ送信ソフトウェアを記録させておき、このような記録媒体を用いて一般的なコンピュータ装置に上記データ送信ソフトウェアをインストールするとしても良いことは勿論である。このようにすると、既存の通信システムに含まれている送信装置に、本発明に係る送信装置と同一の機能を付与することが可能になるといった効果を奏する。
【図面の簡単な説明】
【００４５】
【図１】本発明の実施形態に係る送信装置２０を有する通信システムの構成例を示す図である。
【図２】同送信装置２０のハードウェア構成の一例を示す図である。
【図３】同送信装置２０と受信装置３０との間の通信シーケンスの一例を示す図である。
【図４】同送信装置２０の制御部１００が実行するデータ送信動作の流れを示すフローチャートである。
【図５】変形例１に係る送信装置における輻輳ウィンドウサイズの変化を説明するための図である。
【符号の説明】
【００４６】
１０…通信網、２０…送信装置、３０…受信装置、１００…制御部、１１０…通信ＩＦ部、１２０…記憶部、１２０ａ…揮発性記憶部、１２０ｂ…不揮発性記憶部、１３０…バス。
【図１】
2005167352.tif 000003
【図２】
2005167352.tif 000004
【図３】
2005167352.tif 000005
【図４】
2005167352.tif 000006
【図５】
2005167352.tif 000007