(57)【要約】【課題】遅延確認応答タイムアウトを頻発させず、データ通信を効率良く行う。【解決手段】データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定する管理手段と、データを前記ＭＳＳ以下にバッファリングするバッファリング手段と、バッファリングされたデータを分割し、２つのセグメントを構築するセグメント構築手段と、構築された各セグメントを通信相手端末へ送信する送信手段と、送信されたセグメントに対する確認応答のための信号を受信する受信手段と、受信した確認応答のための信号から遅延確認応答が行われているか否かを検出する検出手段とを備え、検出手段において遅延確認応答が行われていることが検出された場合に、前記データを分割して２つのセグメントを構築し、遅延確認応答が行われていないことが検出された場合に、前記データを分割しないで１つのセグメントを構築するよう制御する。【選択図】図２
2009159272.tif 000002
【特許請求の範囲】
【請求項１】
データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定する管理手段と、
前記データを、前記管理手段で決定された前記ＭＳＳ以下にバッファリングするバッファリング手段と、
前記バッファリング手段でバッファリングされた前記データを分割し、２つのセグメントを構築するセグメント構築手段と、
前記セグメント構築手段において構築された前記各セグメントを通信相手端末へ送信する送信手段と、
前記送信手段から送信された前記セグメントに対する確認応答のための信号を受信する受信手段と、
前記受信手段において受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出する検出手段とを備え、
前記検出手段において前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つのセグメントを構築し、
前記検出手段において前記遅延確認応答が行われていないことが検出された場合に、前記データを分割しないで１つの前記セグメントを構築するよう前記セグメント構築手段を制御することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置において、
前記セグメント構築手段において分割されるセグメントの分割数を保持するデータベースを備え、
前記セグメント構築手段は、前記データを、前記データベースに保持された前記分割数に対応したセグメント数に分割することを特徴とする通信装置。
【請求項３】
前記通信相手端末の前記遅延確認応答の有無に変化が生じた場合、前記検出手段は、前記データベースに管理された前記分割数を更新させることを特徴とする請求項３に記載の通信装置。
【請求項４】
前記検出手段は、前記通信相手端末により２つの前記セグメントの受信に対して１つの前記確認応答を送信する遅延確認応答が行われていることを検出した場合、前記分割数を２として前記データベースに保持させ、
前記検出手段は、前記通信相手端末が前記遅延確認応答を行わないことを検出した場合、前記分割数を１として前記データベースに保持させることを特徴とする請求項３に記載の通信装置。
【請求項５】
前記送信手段が送信した２つの前記セグメントのうち２つ目の前記セグメントに対応する確認応答のみを前記受信手段が受信した場合、前記検出手段は前記通信相手端末が遅延確認応答を行っていることを検出し、
前記送信手段が送信した２つの前記セグメントのうち１つ目の前記セグメントに対応する確認応答と２つ目の前記セグメントに対応する確認応答とを受信した場合、前記検出手段は前記通信相手端末が遅延確認応答を行っていないことを検出することを特徴とする請求項４に記載の通信装置。
【請求項６】
データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定し、
前記データを、前記ＭＳＳ以下となるようにバッファリングし、
バッファリングされた前記データを分割して、２つのセグメントを構築し、
構築された前記各セグメントを通信相手端末へ送信し、
送信された前記各セグメントに対する確認応答のための信号を受信し、
受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出し、
前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つの前記セグメントを構築し、
遅延確認応答が行われていないことが検出された場合に、前記データを分割せずに１つの前記セグメントを構築することを特徴とする通信制御方法。
【請求項７】
データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定する機能と、
前記データを、決定された前記ＭＳＳ以下となるようにバッファリングする機能と、
バッファリングされた前記データを分割し、２つのセグメントを構築する機能と、
構築された各セグメントを通信相手端末へ送信する機能と、
送信された前記セグメントに対する確認応答のための信号を受信する機能と、
受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出する機能とを備え、
前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つの前記セグメントを構築し、
前記遅延確認応答が行われていないことが検出された場合に、前記データを分割せずに１つの前記セグメントを構築するよう制御することを特徴とする通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して行われるデータ通信に用いられる通信装置、通信制御方法、及び通信制御プログラムに関する。
【背景技術】
【０００２】
近年、ネットワークを介したデータ通信を行う標準プロトコルとして、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）が広く普及している。ＴＣＰは、上位層から転送された一連のデータをセグメントと呼ばれる送信単位ごとに、下位層に転送する役割をもつ。このセグメントのサイズの最大値（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ／以下、ＭＳＳという）は通信の相手方の端末（以下、通信相手端末という）との間でコネクションごとに設定され、通信装置はデータをＭＳＳのサイズのセグメントごとに送信しようとする。
【０００３】
ＴＣＰでは、通信の信頼性を実現するために、データの受信側はデータを送信する側に対して確認応答を返す。この点、現在、確認応答を改良した遅延確認応答が提案されている（非特許文献１参照）。遅延確認応答とは、複数のセグメントを受信後、確認応答をまとめて送信することで、確認応答によるネットワークの輻輳を回避し、効率的なデータの送受信を可能とする方法である。この遅延確認応答は、２つの受信データに対して１つの確認応答を返すように設定されることが多い。
【０００４】
しかし、１ＭＳＳ以下の送信バッファを有する通信装置が、２セグメント毎に１つの遅延確認応答を返す通信相手端末に対してデータを送信する場合、かえって通信効率が悪くなるという問題がある（非特許文献２参照）。すなわち、送信バッファが１ＭＳＳ以下の通信装置は、１ＭＳＳ以下の最初のセグメントを送信した後、確認応答を受信するまで送信バッファをクリアできないので後続のセグメントを送信できない。一方、通信相手端末は、２つのセグメントを受信してはじめて１つの確認応答を返すよう設定されているため、後続のセグメントを受信するまで確認応答を返すことができない。この場合、通信相手端末が遅延確認応答タイムアウトに達した後、最初のセグメントにのみ対応する確認応答をデータの送信側に返すこととなる。したがって、上記の条件の下では、送信側と受信側との間に齟齬が生じ、不必要な遅延確認応答タイムアウトが頻発することとなる。
【０００５】
従来は、超小の送信バッファを有した通信装置が用いられる場面が少なく、このため上記の現象が問題視されていなかった。しかし、現在、送信バッファが超小のネットワーク家電が開発されている。ネットワーク家電とは、マイクロコンピュータを内蔵し、ＴＣＰを用いてネットワークを介したデータ通信を行う家電であるが、このような家電に内蔵される送信バッファは１ＭＳＳ以下という超小の容量になりやすい。したがって、ネットワーク家電のような１ＭＳＳ以下の送信バッファを有する装置が遅延確認応答を行う装置に対して効率良くデータ送信を行うことができるよう、上記の問題を解決する手段が求められている。
【非特許文献１】Ｒ．Ｂｒａｄｅｎ， “ＲＦＣ １１２２、 Ｒｅｑｕｉｒｅｍｅｎｔｓ ｆｏｒ Ｉｎｔｅｒｎｅｔ Ｈｏｓｔｓ ”，［ｏｎｌｉｎｅ］，Ｏｃｔｏｒｂｅｒ１９８９，ｒｅｔｒｉｅｖｅｄ ｆｒｏｍ ｔｈｅＩｎｔｅｒｎｅｔ：＜ＵＲＬ： ｈｔｔｐ：／／ｗｗｗ．ｉｅｔｆ．ｏｒｇ／ｒｆｃ／ｒｆｃ１１２２．ｔｘｔ＞
【非特許文献２】Ａｄａｍ  Ｄｕｎｋｅｌｓ，“Ｆｕｌｌ ＴＣＰ／ＩＰ ｆｏｒ ８―ｂｉｔ ａｒｃｈｉｔｅｃｔｕｒｅｓ”，［ｏｎｌｉｎｅ］ ＜ＵＲＬ：ｈｔｔｐ：／／ｐｏｒｔａｌ．ａｃｍ．ｏｒｇ／ｃｉｔａｔｉｏｎ．ｃｆｍ?ｉｄ＝１０６６１１８＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述の通り、１ＭＳＳの送信バッファを有する通信装置が２つのセグメント毎に１つの遅延確認応答を返す通信相手端末に対してデータを送信する通信方法では、遅延確認応答タイムアウトが頻発するという問題がある。
【０００７】
本発明は、上記の問題点を鑑みたものであり、１ＭＳＳの送信バッファを有する通信装置が２セグメント毎に１つの遅延確認応答を返す通信相手端末に対してデータを送信する方法において、遅延確認応答タイムアウトを頻発させない効率的なデータ通信を行う通信装置、通信制御方法及び通信制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の通信装置は、データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定する管理手段と、前記管理手段で決定された前記ＭＳＳ以下となるように、前記データをバッファリングするバッファリング手段と、前記バッファリング手段でバッファリングされた前記データを分割し、２つのセグメントを構築するセグメント構築手段と、前記セグメント構築手段において構築された前記各セグメントを通信相手端末へ送信する送信手段と、前記送信手段から送信された前記セグメントに対する確認応答のための信号を受信する受信手段と、前記受信手段において受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出する検出手段とを備え、前記検出手段において前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つのセグメントを構築し、前記検出手段において前記遅延確認応答が行われていないことが検出された場合に、前記データを分割しないで１つの前記セグメントを構築するよう前記セグメント構築手段を制御することを特徴とする。
【０００９】
また、本発明の通信制御方法は、データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定し、前記ＭＳＳ以下となるように、前記データをバッファリングし、バッファリングされた前記データを分割して、２つのセグメントを構築し、構築された前記各セグメントを通信相手端末へ送信し、送信された前記各セグメントに対する確認応答のための信号を受信し、受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出し、前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つの前記セグメントを構築し、遅延確認応答が行われていないことが検出された場合に、前記データを分割せずに１つの前記セグメントを構築することを特徴とする。
【００１０】
また、本発明の通信制御プログラムは、データの送受信を行う最大セグメントサイズ（ＭＳＳ）を決定する機能と、決定された前記ＭＳＳ以下となるように、前記データをバッファリングする機能と、バッファリングされた前記データを分割し、２つのセグメントを構築する機能と、構築された各セグメントを通信相手端末へ送信する機能と、送信された前記セグメントに対する確認応答のための信号を受信する機能と、受信された前記確認応答のための信号から遅延確認応答が行われているか否かを検出する機能とを備え、前記遅延確認応答が行われていることが検出された場合に、前記データを分割して２つの前記セグメントを構築し、前記遅延確認応答が行われていないことが検出された場合に、前記データを分割せずに１つの前記セグメントを構築するよう制御することを特徴とする。
【発明の効果】
【００１１】
本発明は、１ＭＳＳ以下の送信バッファを有する通信装置が２セグメント毎に１つの遅延確認応答を返す通信相手端末に対してデータを送信する方法において、遅延確認応答タイムアウトを頻発させない効率的な通信を実現する効果を有する。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照しながら本発明の実施形態について説明する。
【００１３】
なお、以下の実施形態にかかる送信側の送信バッファは１ＭＳＳであることを想定する。
【００１４】
また、以下の実施形態における受信側の遅延確認応答は、２セグメントを受信する毎に１つの確認応答を送信するものとして説明する。
【００１５】
さらに、データとセグメントの定義を行う。データとは、データストリームをいい、複数あるいは単数のセグメントから構成されるものをいう。特に以下の実施形態では、送信データとはバッファに格納されたデータを示すことする。そして、セグメントとは、データの最終的な送信単位のことであり、データを複数に分割したデータを指す場合もあれば、データを分割しない１つのデータを指す場合もある。特に、本実施例でいうセグメントとは、ＴＣＰデータとＴＣＰヘッダから構成されたＴＣＰセグメントのことを示す。
【００１６】
図１は、本発明の実施形態にかかる通信システムを示す図である。通信機能を有するサーバ１は通信の相手端末であるクライアント２に対してデータの送信を行なう。図１では、ネットワーク３を挟んでサーバ１とクライアント２が各々存在しているが、複数のサーバと複数のクライアントが同一ネットワークに接続されていてもよい。
【００１７】
クライアント２は、遅延確認応答を実装する通信装置であれば、従来用いられた機能を有するもので足りる。
【００１８】
通常、クライアント２は、１つのセグメントを受信すると、サーバ１に対して１つの確認応答信号を送り返す。この処理を確認応答という。遅延確認応答は、クライアント２において、複数のセグメントを受信した際に、確認応答信号をまとめて送信する方法をいい、２つのセグメントの受信に対して、１つの確認応答信号を送出するものが多く用いられている。この方法によれば、確認応答によるネットワークの輻輳を回避し、効率的なデータの送受信が可能となる。
【００１９】
具体的に説明する。クライアント２は２つのセグメントのうち、第１のセグメントを受信後直ちに確認応答を返さず、第２のセグメントを受信した時にはじめて第２のセグメントに対応した確認応答信号をサーバ１へ返す。これによって、サーバ１は、クライアント２が第２のセグメントまでを正常に受信したことを知ることができる。
【００２０】
送信したセグメントと遅延確認応答の対応関係は、遅延確認応答のヘッダにセットしたシーケンス番号で判断する。クライアント２は遅延確認応答を送信する際に、受信装置が次に受信を期待するセグメントのシーケンス番号を遅延確認応答のヘッダにセットする。
【００２１】
一方、サーバ１は、次に受信を期待するセグメントのシーケンス番号を内包した遅延確認応答を受信することにより、どのセグメントが受信装置によって受信されたか判定し、次にどのデータを送信すべきかを確認できる。この、次に受信を期待するセグメントのシーケンス番号を確認応答番号という。
【００２２】
クライアント２は、ネットワーク上のトラフィックの影響等により、第２のセグメントが損失等した場合、第２のセグメントを正常に受信できない。このような場合に対応すべく、遅延確認応答を実装したクライアント２は、第１のセグメントを受信後、所定の時間を待機するよう設定されている。そして、待機した時間内に第２のセグメントを受信できなかった場合、第１のセグメントに対応した確認応答をサーバ１に返す。この、所定の時間待機した後の時間切れを遅延確認応答タイムアウトという。
【００２３】
上記のような遅延確認応答を実施することで、クライアント２は、通信の信頼性を実現すると共に、ネットワークの輻輳を回避している。しかし一方で、サーバ１は通信の開始前にクライアント２が遅延確認応答を実施しているか否か知ることができないため、サーバ１の送信のタイミングとクライアント２の遅延確認応答のタイミングとの間に齟齬が生じ、遅延確認応答タイムアウトが頻発してしまう。
【００２４】
〈サーバ１〉
そこで、サーバ１を図１に示す通りに説明する。
【００２５】
サーバ１はデータ送信に先立ち、クライアント２との間のコネクションが開設される際にＭＳＳを決定し、サーバ１は送信バッファにバッファリングした所定のセグメントを、ＭＳＳ毎に送信する。これは、セグメントで送信する際に分割した各ＴＣＰデータに制御情報を格納したヘッダを付加するが、このヘッダによる帯域の消費を最小限にするために、セグメントを可能な限り大きなサイズで区切ろうとするからである。
【００２６】
上述したように近年、冷蔵庫等の家電機器にマイクロコンピュータを内蔵することで、家電によるネットワークを介した制御が可能になっているが、このような家電に用いられるサーバの送信バッファは超小である場合が多い。本実施形態にかかるサーバ１も、右のような家電に組み込まれることを想定して構成されている。したがって、サーバ１の送信バッファは１ＭＳＳという超小のサイズで構成されている。
【００２７】
しかし、送信バッファが１ＭＳＳであるサーバ１がクライアントにデータ送信を行う際、以下のような問題が生じる（非特許文献２参照）。１ＭＳＳの送信バッファを有するサーバ１は１ＭＳＳの第１のセグメントを送信した後、確認応答をクライアント２から受信するまで、送信バッファに格納された第１のセグメントを削除できない。そのため、後続のデータを送信バッファにバッファリングできない。つまり、サーバ１は、１つのセグメントを送った後、クライアントによる確認応答の送信を待つ状態になる。
【００２８】
一方、クライアント２が遅延確認応答を実施している場合、クライアント２は第２のセグメントを受信するまで確認応答を行うことができない。結局、クライアント２は、遅延確認応答タイムアウトに達した後、確認応答を返すこととなる。
【００２９】
このように、サーバの送信バッファが１ＭＳＳであるにも拘らず、１つのセグメントでデータを送信しようとすると、サーバと遅延確認応答を実施するクライアントとが互いに待ち状態に陥り、待ち状態を繰り返すことにより、クライアントが不必要な遅延確認応答タイムアウトを頻発させてしまう。
【００３０】
そこで、本実施形態に係るサーバ１は、１ＭＳＳ以下のサイズのバッファに格納されたデータを２分割して、２つのセグメントでデータ送信を行うものである。サーバ１においてこのような処理を施すことで、クライアント２はセグメントを２つ受信することができるため、遅延確認応答タイムアウトに至る前にサーバ１に確認応答を返すことが可能となる。
【００３１】
〈サーバ１の構成〉
図２を用いて、より詳細にサーバ１の構成を説明する。
【００３２】
コネクション管理部４はコネクションの開設や終了処理をはじめとするコネクションに関する情報の管理を行うとともに、コネクションの設定や状態を保存するためのデータベースを有している。また、コネクション管理部４は、ＭＳＳを決定する機能をも有する。分割数記憶データベース５はコネクション管理部４の情報に基づいて、コネクション毎の最適な分割数を保持するデータベースである。ここで、分割数とは、送信データを分割する数であり、本実施例では１以上の自然数であり、かつ２以下の数とする。つまり、送信データを２分割するか１分割（つまり、分割しない）かのいずれかである。送信バッファ７は、送信時にアプリケーション１４から受け取ったデータを一時保管するためのメモリ領域であり、サーバ１がクライアント２へ送信するデータを格納する。この送信バッファ７の容量は１ＭＳＳである。ここで、アプリケーション１４とは、ＴＣＰを利用するユーザーのプログラムであり、Ｗｅｂサーバやファイル・サーバ、Ｗｅｂブラウザ、メール・クライアントなどをいう。
【００３３】
セグメント構築部１５は、分割数選択部６と分割制御部８と送信データ制御部９から構成される。分割数選択部６は、分割数記憶データベース５からクライアント２に適した分割数を選択する機能を有する。分割制御部８は、１ＭＳＳの送信バッファ７に格納された送信データを、分割数選択部６が選択した分割数に応じて分割する機能を有する。分割数選択部６が選択した数が１の場合には、分割制御部８は送信データを分割しない。分割数選択部６が選択した数が２の場合には、分割制御部８は送信データを２分割する。送信データ制御部９は、分割した送信データにヘッダを付与し、最終的なセグメントの構築処理を行う機能を有する。データ送信部１０は、分割制御部８が構築したセグメントを送信する機能を有する。
【００３４】
ネットワーク３を介してクライアント２から送信された信号は、データ受信部１１によって受信される。データ受信部１１は、確認応答信号を受信し、受信した確認応答信号の内容から、検出部１６において次に送信するデータの分割数を検出する。
【００３５】
検出部１６は、遅延確認応答検出部１２と分割数検出部１３から構成され、遅延確認応答検出部１２にてデータ受信部１１が受信した確認応答信号から遅延確認応答か否かを検出し、分割数検出部１３にて遅延確認応答検出部１２が検出した結果に応じて、分割数を検出し、分割数データベース５に分割数を書き込む、あるいは更新する機能を有する。なお、遅延確認応答検出部１２が遅延確認応答の有無を検出する方法は、確認応答のヘッダにセットされた確認応答番号と、送信データ制御部９によって付加されたヘッダのシーケンス番号とを比較し、対応関係にあるか否かで行う。
【００３６】
次に、図3に従って、セグメント構築部１５の構成を説明する。
【００３７】
１ＭＳＳの送信バッファ７に送信データが格納されているとする（Ｆ１）。ここで、分割数選択部６が分割数記憶データベース５から分割数として２を選択したとする（Ｆ２）。分割数選択部６が選択した分割数２に基づいて、分割制御部８は送信バッファ７内の送信データを２つに分割する（Ｆ３）。分割の割合は任意であるが、ここでは全体の１００に対して５０：５０に分割したとする。なお、分割数が１の場合は送信データを分割しない。ここで、分割制御部８と送信バッファ７の間に、送信データを一時的に保管する小容量のバッファを別途設けてもよい。
【００３８】
その後、送信データ制御部９で、ヘッダを作成し、分割したそれぞれの送信データにヘッダを付与し、セグメントを構築する（Ｆ４）。具体的には、送信データの前半部分に対するデータにヘッダを作成し、ヘッダと送信データの前半部分を連結して第１のセグメントを構築し、後半部分に対する ヘッダを作成し、このヘッダと送信データの前半部分を連結して第２のセグメントを構築する。送信データ制御部９は、データ送信部１０に対して第１のセグメントと第２のセグメントを連結した状態で送信を依頼する。データ送信部１０は、送信する際に、第１のセグメントと第２のセグメントを一括して送信することとなる。なお、送信データ制御部９は、各セグメントを作成する毎にデータ送信部１０にセグメントを送信させてよい。
【００３９】
コネクション管理部４と分割数記憶データベース５の関係を説明する。図４（ａ）コネクション管理部４が管理するコネクション情報のテーブル図である。コネクション管理部４のデータベースでは、存在しているコネクションの設定や状態などを管理している。２つのコネクションが サーバ１上にある場合、図４（ａ）の通り、コネクション管理部４ に２つのコネクションの情報がそれぞれ格納されている。ＴＣＰ の場合、通信相手端末はコネクションに置き換えて考える事ができるため、分割数はコネクションごとに管理されることになる。
【００４０】
分割数記憶データベース５のデータベースの内容は、上記のコネクション管理部４との関係で異なる値になる。図４（ｂ）の通り、通信相手端末ＡでコネクションＮｏ．１に対しては、分割数は２であり、通信相手端末ＢでコネクションＮｏ．２に対しては、分割数は１というように、分割数がコネクション毎に対応することとなる。分割数は変数であり、遅延確認応答検出部１２が検出した遅延確認応答の有無に変化が生じる度に、分割数検出部１３によって更新されるよう設定されている。なお、分割数記憶データベース５には分割数の初期値が既に格納されていてもよい。
【００４１】
〈サーバ１の動作〉
図５のフローチャートを用いてサーバ１の動作を説明する。なお、以下の実施形態において、１ＭＳＳの送信バッファ７に格納される最初の送信データを第１のデータＤ１、次に格納される送信データを第２のデータＤ２、分割数をｎとする。ここで、分割数ｎは１あるいは２であり、初期値を２とする。
【００４２】
まず、通信開始（ステップＳ３０）後、データの送信に先立ち、コネクション管理部４は通信の相手方であるクライアント２とコネクションを開設する（ステップＳ３１）。コネクションが開設されない場合、通信は終了する（ステップＳ４１）。一方、コネクションが開設された場合、開設されたコネクションの情報はコネクション管理部４に格納される。
【００４３】
コネクションが開設された後、分割数選択部６は分割数記憶データベース５から分割数を選択する（ステップＳ３２）。既に述べた通り、ｎの初期値は２であるから、分割数選択部６は分割数ｎ＝２を選択する。したがって、分割制御部８は第１のデータＤ１を２つに分割する（ステップＳ３３）。送信データ制御部９は、分割した各データにヘッダを付与しセグメントを構築する（ステップＳ３４）、データ送信部１０は２つのセグメントを送信する（ステップＳ３５）。
【００４４】
データ受信部１１がクライアント２から確認応答を受信すると（ステップＳ３６）、遅延確認応答検出部１２が受信した確認応答から遅延確認応答が行われているか否かを検出する（ステップＳ３７）。具体的な検出方法は〈確認応答受信の動作〉で後述する。遅延確認応答検出部１２が遅延確認応答の有無を検出すると、送信バッファ７に格納された第１のデータＤ１が削除され、後続のデータである第２のデータＤ２がアプリケーション１４から送信バッファ７へコピーされる（ステップＳ３８）。これは、送信バッファ７が１ＭＳＳである場合、遅延確認応答を受信するまでは前回送信したセグメントを送信バッファ７から削除することができず、後続のデータを送信バッファ７にバッファリングできないことに起因する。
【００４５】
遅延確認応答検出部１２は、データ受信部１１が受信した確認応答からクライアント２が遅延確認応答を実施しているか否かを検出する（ステップＳ３９）。遅延確認応答を検出しなかった場合、分割数検出部１３は分割数ｎ＝１を検出し、分割数記憶データベース５の分割数をｎ＝１へ更新する（ステップＳ４０）。遅延確認応答を検出した場合、分割数検出部１３は分割数ｎ＝２を検出する。分割数ｎ＝２の場合、分割数記憶データベースを２に更新してもよいが、初期値の２が既に分割数記憶データベースに記憶されている場合は２に更新しなくてもよい。
【００４６】
次に、第２のデータＤ２を送信する際、分割数選択部６は、分割数記憶データベース５からクライアントに適切な分割数の値を選択する（ステップＳ３２）。分割数選択部６の選択した分割数が１である場合、セグメント構築部１５は、分割制御部８においてバッファに格納した１ＭＳＳの第２のデータＤ２を分割せずに、送信データ制御部９においてヘッダを付加して、１つのセグメントを構築する。一方、分割数選択部６が選択した分割数が２である場合、分割制御部８はバッファに格納した１ＭＳＳの第２のデータＤ２を２つに分割する（ステップＳ３３）。送信データ制御部９は、分割制御部８が分割した各データにヘッダを付与し、データ送信部１０は各セグメントをクライアント２へ送信する。
【００４７】
〈データ送信の動作〉
図６のフローチャートを用いて、サーバ１のデータ送信の動作をより詳細に説明する。
【００４８】
まず、第１のデータＤ１を送信する場合について説明する。送信開始（ステップＳ１０）の後、分割数選択部６は分割数を選択する（ステップＳ１１）。分割数の初期値は２であることから、分割数記憶データベース５から分割数選択部６に分割数ｎ＝２を選択、分割制御部８に入力する（ステップＳ１２）。分割数ｎ＝２が入力された分割制御部８は、第１のデータＤ１を２分割する（ステップＳ１３）。分割した第１のデータＤ１を受けた送信データ制御部９は、２分割した第１のデータＤ１にそれぞれヘッダを付与し、データ送信部１０に送信させる。
【００４９】
次に、第２のデータＤ２を送信する場合について説明する。分割数選択部６が、分割数記憶データベース５から分割数ｎ＝１を選択（ステップＳ１１）、分割制御部８に入力した場合、分割数ｎ＝１が入力された分割制御部８は第２のデータＤ２を分割しない（ステップＳ１４）。一方、分割数選択部６が、分割数記憶データベース５から分割数ｎ＝２を選択、分割制御部８に入力した場合、分割数ｎ＝２が入力された分割制御部８は第２のデータＤ２を２つに分割する（ステップＳ１３）。送信データ制御部９は、分割しない第２のデータあるいは分割した第２のデータにそれぞれヘッダを付与し、セグメントを構築する（ステップＳ１５）。すべてのセグメントを送信した後、データ送信は終了する（ステップＳ１６）。
【００５０】
〈確認応答受信の動作〉
図７のフローチャートを用いて、サーバ１が確認応答を受信する動作をより詳細に説明する。なお、以下の実施形態では、第１のデータＤ１の分割した各セグメントをＰ１、Ｐ２とし、各セグメントのサイズを５００バイト、シーケンス番号の初期値は１とする。また、サーバ１が最初に受信する確認応答をＡ１、次に受信する確認応答をＡ２とする。確認応答Ａ１と確認応答Ａ２はどのセグメントに対応した確認応答であるかここでは定義しないで説明する。
【００５１】
図７は、サーバ１が第１のデータＤ１をクライアントへ送信した後、クライアント２から確認応答を受信した場合のフローチャートである。まず、データ受信部１１が確認応答の受信を開始し（ステップＳ２０）、受信をした後（ステップＳ２１）、確認応答の情報が遅延確認応答検出部１２に入力される。遅延確認応答検出部１２は、最初に受信した確認応答Ａ１の確認応答番号からクライアント２が遅延確認応答を実施しているか否か検出する（ステップＳ２２）。ここで、確認応答番号とは、確認応答のヘッダにセットされた、次に受信すべきセグメントのシーケンス番号である。したがって、遅延確認応答検出部１２は、確認応答Ａ１の確認応答番号を見ることで、クライアント２がどのセグメントまでを受信し、次にどのセグメントを要求しているかを検出できる。
【００５２】
例えば、最初に受信した確認応答Ａ１の確認応答番号が１００１である場合、クライアント２がシーケンス番号１のセグメントＰ１とシーケンス番号５０１のＰ２を受信し、次のセグメントを要求していることがわかる。すなわち、この場合、遅延確認応答検出部１２はクライアント２が２つのセグメントに対して１つの確認応答を返す遅延確認応答を実施していることが検出できる（ステップＳ２３）。これにより、分割数検出部１３は、以後もクライアント２に対してデータを分割して送信するよう、分割数ｎ＝２を検出し、分割数ｎ＝２を分割数記憶データベース５に出力する（ステップＳ２４）。なお、この時、既に分割数記憶データベース５に分割数の初期値２が記憶されている場合、初期値２から変更がないことになる。したがって、分割数検出部１３は、分割数記憶データベース５を更新せずに初期値２を維持してもよいし、分割数ｎ＝２が検出される度に分割数記憶データベース５を更新してもよい。
【００５３】
一方、最初に受信した確認応答Ａ１の確認応答番号が５０１である場合、クライアント２がシーケンス番号１のセグメントＰ１までを受信したことがわかる。ここで、遅延確認応答検出部１２は次の確認応答Ａ２の受信を待った後、受信したＡ２の確認応答番号が１００１であることを確認する（ステップＳ２５）。すなわち、確認応答Ａ２の確認応答番号が１００１である場合、遅延確認応答検出部１２は、クライアント２が各セグメントを受信する都度確認応答を返しており、遅延確認応答を実施していないことを検出できる（ステップＳ２６）。したがって、分割数検出部１３は分割数ｎ＝１を検出し、以後、クライアント２に対してセグメントを分割して送信しないよう、分割数をｎ＝１として分割数記憶データベース５を更新する（ステップＳ２７）。なお、本実施形態では、次の確認応答Ａ２を受信するまで遅延確認応答検出部が検出処理を待つためのタイマーを設定しておくことも可能である。
【００５４】
遅延確認応答の有無を検出した後、確認応答受信の処理は終了する（ステップＳ２８）。
【００５５】
本発明の実施形態において、送信したセグメントが損失した場合を説明する。例えば、クライアント２がセグメントＰ１のみ受信し、セグメントＰ２を受信し損なった場合を想定する。
【００５６】
この場合、遅延確認応答を実施していないクライアント２は、セグメントＰ２を要求する確認応答番号５０１が内包された確認応答Ａ１をサーバ１に返す。サーバ１は確認応答Ａ１を受信した後、確認応答Ａ２の受信を待つが、セグメントＰ２は損失しているので、セグメントＰ２に対応する確認応答Ａ２はサーバ１に返信されない。したがって、サーバ１の遅延確認応答検出部１２は、遅延確認応答の有無を検出できない。
【００５７】
一方、遅延確認応答を実施しているクライアント２は、遅延確認応答タイムアウトに達した後、セグメントＰ２を要求する確認応答番号５０１が内包された確認応答Ａ１を返すこととなる。この確認応答を受信したサーバ１の遅延確認応答検出部１２は次の確認応答Ａ２の受信を待つことになるが、遅延確認応答を実施しているクライアント２は次の確認応答Ａ２を返すことができない。したがって、この場合も、サーバ１の遅延確認応答検出部１２は遅延確認応答の有無を検出できない。
【００５８】
上記ように、遅延確認応答検出部１２が遅延確認応答を検出できない場合、遅延確認応答検出部１２は送信したセグメントが損失したことを検出する。そして、クライアント２によって送信された確認応答Ａ２を、クライアント２によるセグメントＰ２の再送要求と判断する。
【００５９】
そこで、遅延確認応答検出部１２は、クライアント２が要求するセグメントＰ２を再送する。このようにすることで、本実施例は、再送要求にも対応したデータの送受信が可能となる。
【００６０】
〈本実施例の効果〉
以上の説明を踏まえて、図８と図９に基づき、本発明の実施形態にかかるデータ送信方式の効果を説明する。以下、第１のデータＤ１を分割したセグメントをＰ１、Ｐ２、第２のデータＤ２を分割したセグメントをＱ１、Ｑ２とし、各セグメントのサイズを５００、シーケンス番号の初期値を１とする。また、最初の確認応答をＡ１、次の確認応答をＡ２とする。
【００６１】
まず、図８サーバ１と遅延確認応答を実施するクライアント２とのデータ送信方式を示すシーケンス図である。サーバ１は第１のデータＤ１をＰ１、Ｐ２の、２つのセグメントに分割し、クライアント２へ送信する。クライアント２がシーケンス番号１のＰ１とシーケンス番号５０１のＰ２のセグメントを受信すると、確認応答番号１００１がセットされた確認応答Ａ１がサーバ１に送信される。サーバ１は確認応答番号１００１を内包した確認応答Ａ１を受信した後、送信バッファ７から第１のデータＤ１を削除し、後続のデータである第２のデータＤ２をアプリケーション１４から送信バッファ７に取得したうえで、第２のデータＤ２を２分割してＱ１、Ｑ２の２つのセグメントを送信する。このように本来１つのセグメントで送信するデータを２分割して２つのセグメントとして送信することにより、クライアント２から確認応答を引き出すことができ、従来方式で発生していた遅延確認応答タイムアウトを発生させることなく通信を行うことができる。
【００６２】
次に、図９は本発明の実施の形態にかかるサーバ１と遅延確認応答を実施しないクライアント２とのデータ送信方式を示すシーケンス図である。サーバ１は、第１のデータＤ１を２のセグメントＰ１とＰ２に分割して、遅延確認応答を実施しないクライアント２へ送信する。クライアント２では遅延確認応答が実施されていないため、サーバ１は確認応答番号５０１を内包した確認応答Ａ１を受信する。Ａ１を受信後、確認応答番号１００１を内包した確認応答Ａ２を受信することにより、クライアント２が遅延確認応答を実施していないことを知ることができる。サーバ１は送信バッファ７に格納された第１のデータＤ１を削除し、アプリケーション１４から第２のデータＤ２を取得し送信バッファ７に格納する。サーバ１は、遅延確認応答を実施しないクライアント２に対して、第２のデータＤ２を分割せず、１のセグメントを構築して送信する。このように、サーバ１からクライアント２に対するデータ送信では、送信データを分割せず、１ＭＳＳのセグメントを送信する。
【００６３】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施の形態にかかる通信システムの構成を示す図。
【図２】本発明の実施の形態にかかるサーバの構成を示す図。
【図３】セグメント構築部１５の構成を示す図。
【図４】コネクション管理部と分割数記憶データベースのテーブル図。
【図５】サーバの全体の動作を示したフローチャート。
【図６】サーバの送信動作を示したフローチャート。
【図７】サーバの受信動作を示したフローチャート。
【図８】図２におけるサーバが遅延確認応答を実施する受信装置へデータを送信する方式を示すシーケンス図。
【図９】図２におけるサーバが遅延確認応答を実施しない受信装置へデータを送信する方式を示すシーケンス図。
【符号の説明】
【００６５】
１  サーバ
２  クライアント
３  ネットワーク
４  コネクション管理部
５  分割数記憶データベース
６  分割数選択部
７  送信バッファ
８  分割制御部
９  送信データ制御部
１０  データ送信部
１１  データ受信部
１２  遅延確認応答検出部
１３  分割数検出部
１４  アプリケーション
１５  セグメント構築部
１６  検出部
Ｄ１  第１の送信データ
Ｄ２  第２の送信データ
Ａ１  最初の確認応答
Ａ２  次の確認応答
Ｐ１  Ｄ１の送信データのうち第１のセグメント
Ｐ２  Ｄ１の送信データのうち第２のセグメント
Ｑ１  Ｄ２の送信データのうち第１のセグメント
Ｑ２  Ｄ２の送信データのうち第２のセグメント
ｎ  分割数
【図１】
2009159272.tif 000003
【図２】
2009159272.tif 000004
【図３】
2009159272.tif 000005
【図４】
2009159272.tif 000006
【図５】
2009159272.tif 000007
【図６】
2009159272.tif 000008
【図７】
2009159272.tif 000009
【図８】
2009159272.tif 000010
【図９】
2009159272.tif 000011