以下、本発明の実施の形態について、図面を参照しながら説明する。尚、各図において同一箇所については同一の符号を付すとともに、重複した説明は省略する。
<第1の実施形態>
第1の実施形態では、サーバ装置とクライアント装置が、それぞれ単一のTCPストリームによる伝送方式と複数のTCPストリームによる伝送方式のいずれか一方または両方に対応するものとする。なお伝送方式はこれらに限る必要はない。また三種類以上であってもよい。
図1は、第1の実施形態にかかるシステムの構成を示すブロック図である。図1のシステムは、クライアント装置1とサーバ装置2とが、ネットワーク3を介して接続されている。クライアント装置1とサーバ装置2とは、単数若しくは複数のTCPストリームを確立し、確立したTCPストリームを用いて通信を行う装置である。
本発明の一観点に係るクライアント装置1は、ネットワーク3を介して接続された第サーバ装置2との間で通信を行う装置であって、単一のストリームを確立するための処理を行うとともに、サーバ装置2と前記単一のストリームを確立した場合に、前記単一のストリームを用いて通信を行う第1の送信部103と、複数のストリームを確立するための処理を行うとともにサーバ装置2と前記複数のストリームを確立した場合に、前記複数のストリームを用いて通信を行う第2の送信部104と、第1の送信部103が、前記単一のストリームを確立するための処理を行うタイミングと、第2の送信部104が、前記複数のストリームを確立するための処理を行うタイミングとが、重複する様に、第1の送信部103に対して、前記単一のストリームを確立するための処理を行うように第1の指示を出すとともに、第2の送信部104に対して、前記複数のストリームを確立するための処理を行うように第2の指示を出す確立指示部101と、第1分配部102と、を備え、第1の送信部103は、前記単一のストリームを確立するための処理を完了した場合に、第1分配部102に、第1メッセージを通知し、第2の送信部104は、前記複数のストリームを確立するための処理を完了した場合に第1分配部102に、第2メッセージを通知し、第1分配部102は、前記送信データを、通信に用いるすべてのストリームの確立を最初に完了した、第1の送信部103又は第2の送信部104のいずれか一方に分配するとともに、第1の送信部103が最初に、前記単一のストリームを確立するための処理を完了した場合に、第1の送信部103に、前記送信データを分配するとともに、第2の送信部104が、前記複数のストリームの確立するための処理を完了後、前記送信データの分配先を、第1の送信部103から第2の送信部104に切り替えることを特徴とする。
以下では、まず、クライアント装置1及びサーバ装置2の構成を図1を用いて説明する。
≪ クライアント装置の構成 ≫
クライアント装置1は、データ供給部100と、確立指示部101と、第1分配部102と、第1の送信部103と、第2の送信部104とを備える。第1の送信部103は、確立部105を備える。第2の送信部104は、確立部106と第2分配部107とを備える。
データ供給部100は、サーバ装置2に伝送すべきデータを供給する。
確立指示部101は、第1の送信部103の確立部105と第2の送信部104の確立部106を用いてサーバ装置2との間で接続の確立を指示する。(確立部105及び確立部106に対するそれぞれの指示を、第1の指示及び第2の指示と称する。)
第1分配部102は、データ供給部100から渡されたデータを第1の送信部103または第2の送信部104に渡し、データの送出を指示する。
第1の送信部103は、第1の伝送方式によるデータ送信を行う。本実施形態では、第1の伝送方式は、単一のTCPストリームを用いる伝送方式である。
第2の送信部104は、第2の伝送方式によるデータ送信を行う。本実施形態では、第2の伝送方式は、複数TCPストリームを用いる伝送方式である。
確立部105は、第1の伝送方式における接続確立を行う。確立部105は、具体的には、サーバ装置2の第1の受信部200との間で単一のTCPストリームの作成を行う。
確立部106は、第2の伝送方式における接続確立を行う。確立部106は、具体的には、まず、サーバ装置2の第2の受信部201との間で制御用のTCPストリームの作成を行う。確立部106は、次に、制御用TCPストリームを用いてデータ用の(複数の)TCPストリームの作成に関する情報を交換し、交換した情報を用いて、データ用TCPストリームの作成を行う。
第2分配部107は、第2の伝送方式におけるデータ分配を行う。第2分配部107は、具体的には、第1分配部102から渡されたデータを分割し、分割順序を表すヘッダを付加した上で、複数のTCPストリームに渡し送信を行う。分割部107の動作の詳細は、図2を用いて後述する。
以上が、クライアント装置1の構成の説明である。
≪ サーバ装置の構成 ≫
次に、サーバ装置2の構成を説明する。
サーバ装置2は、第1の受信部200と、第2の受信部201と、第2収集部205と、データ出力部206とを備える。第1の受信部200は、待受部202を備える。第2の受信部201は待受部203と第1収集部204とを備える。
第1の受信部200は、第1の伝送方式によるデータ受信を行う。
第2の受信部201は、第2の伝送方式によるデータ受信を行う。
待受部202は、第1の伝送方式における接続待受を行う。待受部202は、具体的には、クライアント装置1の第1の送信部103との間でTCPストリームの作成を行う。
待受部203は、第2の伝送方式における接続待受を行う。待受部203は、具体的には、クライアント装置1の第2の送信部104との間で制御用TCPストリームの作成を行い、この制御用TCPストリームを用いてデータ用TCPストリームの作成に関する情報を交換した後で、複数のデータ用TCPストリームの作成を行う。
第1収集部204は、第2の伝送方式におけるデータ収集を行う。具体的には、第1収集部204は、第2の送信部104から受信したデータに付加された分割情報を表すヘッダにもとづいて分割前のデータを再現し、第2収集部205へ渡す。
第2収集部205は、第1の受信部200または第2の受信部201から渡されたデータ収集し、データ出力部206へ渡す。
データ出力部206は第2収集部205から渡されたデータを出力する。
以上が、サーバ装置2の構成の説明である。
≪ 処理の流れ ≫
次に、第1の実施形態に係るシステムにより行われる処理について、図面を適宜参照しながら説明する。
クライアント装置1とサーバ装置2がネットワーク3を介して物理的に接続されている。第1の伝送方式を、単一のTCPストリームを用いる伝送方式であるとし、第2の伝送方式を、複数TCPストリームを用いる伝送方式であるとする。その上で、クライアント装置1とサーバ装置2が両方とも複数TCPストリームを用いる伝送方式に対応する場合はそれを優先的に使用するものとする。
≪ 処理の流れ(接続の確立) ≫
始めに、サーバ装置2は接続の待受処理を行う。待受処理の開始タイミングは、例えばサーバ装置2が起動したタイミングや、ユーザから明示的に指示があったタイミングなど、任意のタイミングであってよい。第1の受信部200の待受部202と、第2の受信部201の待受部203が、それぞれ待受処理を開始する。待受部202は、ソケットを作成し、第1の受信部200の固有のポート番号をソケットに割り当ててポートをオープンにし、クライアント装置1からの接続を待ち受ける。また待受部203も、ソケットを作成し、第2の受信部201の固有のポート番号をソケットに割り当ててポートをオープンにし、クライアント装置1からの接続を待ち受ける。
次に、クライアント装置1の確立指示部101は接続の確立処理を行う。確立処理の開始タイミングは例えばユーザから明示的に指示があったタイミングや、データ供給部100において送信すべきデータが発生したタイミングなど、任意のタイミングであってよい。確立指示部101は、第1の送信部103の確立部105と、第2の送信部104の確立部106に対して、それぞれ接続の確立処理を開始するよう指示する。
なお、本実施形態では確立部105と確立部106に対して同時のタイミングで接続の確立処理を開始するよう指示を出すものとしたが、必ずしもこれに限る必要はない。指示を出すタイミングに時間差を生じさせても良い。
確立部105は、待受部202がオープンにしたポートに対しSYNを送出し、3ウェイハンドシェイクによるTCPの接続確立を行う。SYNとACK(確認応答)を交換し終わると、両者の間でTCPストリームが作成された状態となる。TCPストリームの作成が完了すると、確立部105は接続の確立が成功したことを確立指示部101に通知する。
確立部106は、待受部203がオープンにしたポートに対しSYNを送出し、3ウェイハンドシェイクによるTCPの接続確立を行う。SYNとACKを交換し終わると、両者の間でTCPストリームが作成された状態となる。第2の送信部104ではこのTCPストリームを制御用TCPストリームと呼ぶ。制御用TCPストリームの作成が完了すると、確立部106はこの制御用TCPストリームを用いて、データ用TCPストリームの作成に関する情報を交換する。始めに確立部106は、データ用TCPストリームで使用するポート番号の取得要求を待受部203に送出する。待受部203は、取得要求を受け取ると、その時点でサーバ装置2において任意のポートを選択し、このうち要求された個数のポート番号を選択し、データ用TCPストリームに割り当てる。待受部203は、要求された個数のソケットを作成し、選択したポート番号をそれぞれのソケットに割り当ててポートをオープンにする。そしてオープンにしたポート番号の一覧の情報を確立部106に送出する。次に確立部106は、ポート番号の一覧情報を受け取ると、それらのポートに対し3ウェイハンドシェイクによるTCPの接続確立を行う。SYN/ACKを交換しTCPストリームが作成された状態となると、確立部106は接続の確立が成功したことを確立指示部101に通知する。
なお、本実施形態では待受部203はデータ用TCPストリームを作成する際に任意のポートを選択するものとしたが、必ずしもこれに限る必要はない。待受部203は、サーバ装置2におけるポート番号を管理するためのポート管理部をさらに有し、サーバ装置2において未使用であるポート番号を探索し使用してもよい。これにより、選択したポート番号が既に使用中であるために接続確立が失敗するという可能性を低減することが可能となる。
また、待受部203は、第2の受信部201におけるデータ伝送速度を管理する伝送速度管理部をさらに有しても良い。サーバ装置2において他のアプリケーションが行うデータ伝送の速度を取得し、この値に基づいて、データ用TCPストリームの個数に制限を加えても良い。あるいは任意の方法により各データ用TCPストリームにおいて達成可能な伝送速度に制限を加えてもよい。
≪ 処理の流れ(データの伝送) ≫
第1の送信部103における接続の確立処理と、第2の送信部104における接続の確立処理は、並行的に実行される。このため、確立指示部101は、接続の確立の結果の通知を、先に完了した方から順に受け取ることになる。確立指示部101は、第1の送信部103の接続確立が先に完了した場合と、第2の送信部104の接続確立が先に完了した場合で、それぞれ異なる処理手順を実行する。以下では、それぞれの場合について、確立指示部101の処理手順を述べる。
第1の送信部103の接続が先に完了した場合について、図3を参照しながら述べる。図3は、第1の実施形態に係るシステムの処理の流れの一例を示すシーケンス図である。
確立指示部101は、確立部105から接続の確立が成功したことの通知を受け取ると、第1分配部102に対し、データの分配先を第1の送信部103とするよう指示を出す。次に、確立指示部101は、データ供給部100に対しデータの送出が可能になったことを通知し、以降、データ供給部100からデータの入力が行われる。データ供給部100は第1分配部102にデータを渡す。第1分配部102はデータを第1の送信部103に渡す。ここで、第1分配部102は、第1の送信部103へ渡したデータサイズの累計値を保持するための記憶領域を持っており、第1の送信部103にデータを渡すごとに、当該のデータサイズの値を記憶領域の値に加算する。この値を累積送信済みデータサイズと呼ぶ。第1の送信部103に渡されたデータは、TCP/IPの各ヘッダが付与されて、TCPストリームを通じて第1の受信部200へ送出される。さらにデータは第2収集部205に渡される。第2収集部205は受け取ったデータをデータ出力部206に渡す。ここで、第2収集部205は、第1の受信部200から受け取ったデータサイズの累計値を保持するための記憶領域を持っており、データを受け取るごとに、当該のデータサイズの値を記憶領域の値に加算する。この値を累積受信済みデータサイズと呼ぶ。データ出力部206は、得られたデータを任意の方法で出力する。以降、データ供給部100からデータの入力が行われるごとに、以上の処理によりデータが最終的にデータ出力部206へと伝送される。
次に、この後で第2の送信部104の接続が完了する。確立指示部101は、確立部106から接続の確立が成功したことの通知を受け取ると、第1分配部102に対し、データの分配先を第1の送信部103から第2の送信部104へと切り替えるように指示を出す。以後、第1分配部102は、データ供給部100から送信すべきデータを受け取ると、これを第2の送信部104の第2分配部107へ渡す。第2分配部107に渡されたデータは、分割され、分割順序を表すヘッダが付与されて、さらにTCP/IPの各ヘッダが付与されて、複数のデータ用TCPストリームを通じて並列的に第2の受信部201の第1収集部204へ送出される。データが分割され分割順序を表すヘッダが付与される様子を図2に示す。図では、データが4分割され、それぞれに1から4までの通し番号と分割数からなるヘッダが付加されている。この情報を分割情報と呼ぶ。分割後のデータは任意の方法で複数のデータ用TCPストリームに割り当てられ、それぞれ送信される。受信後のデータは第1収集部204へ渡される。単一のTCPストリームにおいて送信されたデータはその順序性が保証されるが、複数のTCPストリームに分けられた場合、各ストリームの間での順序性は保証されない。そこで、第1収集部204は、分割情報を参照し、順序が元の順序に正しくなるよう並び替えを行った上で、第2収集部205へデータを渡す。分割順序を表すヘッダは除去される。
さらに確立指示部101は、データの分配先を切り替える指示を出すのに合わせて、同じく第1分配部102から、第1の送信部103へ渡した累積送信済みデータサイズ値を読み出す。確立指示部101は、この値を第2の送信部104に通知し、制御用TCPストリームを通じてこの値を第2の受信部201へ通知するよう指示する。第2の受信部201へ通知された値はさらに第2収集部205へ通知される。ここで、第2収集部205は、通知された累積送信済みデータサイズの値と、自身が持つ累積受信済みデータサイズの値が等しくなるまで、第2の受信部201から受け取ったデータをデータ出力部206に渡さず、自身に保持しておく。つまり、第1の伝送方式を用いて伝送されたすべてのデータを受け取るまで、第2の伝送方式を用いて伝送されたデータの受け渡しを待機する。通知された累積送信済みデータサイズの値と、自身が持つ累積受信済みデータサイズの値が等しくなったタイミングで、保持していた第2の受信部201からのデータをすべてデータ出力部206へ受け渡す。このようにすることで、第1の伝送方式と第2の伝送方式との間で生じたデータの到着順序の入れ違いを解消することが可能になる。
以上、第1の送信部103の接続が先に完了した場合について述べた。
次に、第2の送信部104の接続が先に完了した場合について述べる。確立指示部101は、確立部106から接続の確立が成功したことの通知を受け取ると、第1分配部102に対し、データの分配先を第2の送信部104とするよう指示を出す。次に確立指示部101は、データ供給部100に対しデータの送出が可能になったことを通知する。以降、データ供給部100のデータは第1分配部102において第2の送信部104(の第2分配部107)へと分配される。分配されたデータが第2の伝送方式に則って最終的に第2収集部205へ伝送されるまでの処理手順は前出と同様である。第2収集部205は受け取ったデータをデータ出力部206に渡す。
本実施形態では、第1の送信部103による単一TCPストリームを用いた伝送方式が、第2の送信部104による複数TCPストリームを用いた伝送方式よりも優先するものとしている。そこで確立指示部101は、第2の送信部104の接続の完了通知を受け取ったタイミングで、最早第1の伝送方式を使用する必要がなくなったことになる。そこで確立指示部101はこのタイミングで、第1の送信部103に対し、接続の確立の中断を指示する。第1の送信部103はソケット終了やポート等リソースの開放を行う。あるいは通知を受け取ったタイミングでは接続の確立の中断を行うのではなく、第1の送信部103の接続が完了するまで待機し、完了した時点で即座に第1の送信部103の接続を終了するという動作であってもよい。
以上、第2の送信部104の接続が先に完了した場合について述べた。
なお、本実施形態では第1の送信部103と第2の送信部104はそれぞれ独立して動作するものとしたが、必ずしもこれに限らなくともよく、一方の送信部でデータ送信を行っている間に取得した情報を、もう一方の送信部に渡しても良い。例を示す。いま、クライアント装置1において、第1の送信部103の接続確立が完了し、第2の送信部104の接続確立が未完了であり、データ供給部100から入力されたデータが第1の送信部103を通じてサーバ装置2へ送信されている状況であるとする。このとき、第1の送信部103は、第1の受信部200との間のTCPストリームのデータ伝送速度を計測し、自身に保持しておく。さらにこの後で、第2の送信部104の接続確立が完了したとする。確立指示部101は、第2の送信部104から接続確立の成功の通知を受けると、第1の送信部103に対し、累積送信済みデータサイズの値を問い合わせるとともに、データ伝送速度の値を問い合わせる。確立指示部101は両値を第2の送信部104の確立部106に通知する。確立部106は、通知されたデータ伝送速度の値を利用して、データ伝送用TCPストリームの個数を調整することが可能である。例えば、規定の値(第2の送信部104において実現したいデータ伝送速度の値)を通知されたデータ伝送速度で割って得られた値をデータ伝送用TCPストリームの個数とし、既に確立したデータ用TCPストリームのうちこの個数のストリームのみを以後使用するという制御を行っても良い。このように、第1の送信部103において取得したサーバ装置2やネットワーク3の特性に関する情報を第2の送信部104に通知し第2の送信部104はこれを利用することにより、これらの特性に応じて第2の送信部104の動作を適応的に調整することが可能となる。なお、測定・通知する情報はデータ伝送速度に限らなくともよい。例えばデータの伝送遅延やIPパケットのロス確率といったネットワーク3の特性に関する情報や、TCPストリームのウィンドウサイズといった第1の送信部103や第1の受信部200に関する情報などであってよい。
また、第1の送信部103で使用したTCPストリームを第2の送信部104において再利用するという制御を行っても良い。例を示す。上述と同様、いま、クライアント装置1において、第1の送信部103によるデータ伝送を行っている最中に、第2の送信部104における接続確立が完了したとする。確立指示部101は、第2の送信部104より接続確立の成功を受け取ると、第1の送信部103に対し、累積送信済みデータ送信サイズの値を問い合わせるとともに、第1の送信部103が使用するTCPストリームのクライアント装置1における識別子の値を問い合わせる。確立指示部101は両値を第2の送信部104に通知する。第2の送信部104は、通知されたTCPストリームの識別子を記憶し、以後、このストリームをデータ用ストリームと同等に扱う。つまり第1の送信部103のTCPストリームをデータ用ストリームとして再利用する。これにより、TCPストリームの作成に伴う処理負荷を削減することが可能となる。
≪ 一方の伝送方式のみ対応する場合 ≫
次に、クライアント装置1またはサーバ装置2のいずれかが第2の伝送方式に対応していない場合の動作について説明する。
始めに、サーバ装置2が第1の伝送方式のみに対応し、第2の伝送方式に対応していない場合の動作について説明する。クライアント装置1は両方の伝送方式に対応するものと仮定する。
サーバ装置2が第2の伝送方式に対応していない場合、サーバ装置2において第2の受信部201は存在しない。サーバ装置2は接続の待受処理において、第1の受信部200の待受部202のみがポートをオープンにし、クライアント装置1からの接続を待ち受ける状態となる。
クライアント装置1の確立指示部101における接続の確立処理は前述と同様であり、第1の送信部103の確立部105と、第2の送信部104の確立部106のそれぞれにおいて、接続の確立処理が開始される。ここで、第1の伝送方式に対するポートと、第2の伝送方式に対応するポートの両方に対し、SYNが送出されることになる。このうち第1の伝送方式に関しては、第1の受信部200の待受部202がポートをオープンにしているため、3ウェイハンドシェイクによるTCPの接続確立は成功する。一方、第2の伝送方式に関しては、対応するポートがオープンにされていないため、TCPの接続確立は失敗する。確立部106は接続確立に失敗したことを確立指示部101に通知する。このとき、確立指示部101は、第1の送信部103からは接続確立成功の通知を受け、第2の送信部104からは接続確立失敗の通知を受けることになる。本実施形態では、確立指示部101は接続確立成功の通知を受けたタイミングで第1の伝送方式によるデータ送信を開始し、接続確立失敗の通知を受けたタイミングで特別な処理は行わないものとする。
次に、クライアント装置1が第1の伝送方式のみに対応し、第2の伝送方式に対応していない場合の動作について説明する。サーバ装置2は両方の伝送方式に対応するものと仮定する。
クライアント装置1が第2の伝送方式に対応していない場合、クライアント装置1において第2の送信部104は存在しない。クライアント装置1は接続の確立処理において、サーバ装置2の第1の受信部200に対してのみ、TCPの接続確立を試みることになる。この接続確立は成功し、確立指示部101は成功の通知を受け取ると、以降、データ供給部100からのデータ送出が第1の送信部103を通じて行われることになる。
以上、クライアント装置1またはサーバ装置2のいずれかが第2の伝送方式に対応していない場合の動作について説明した。
<第1の実施形態の変形例>
図4は、第1の実施形態の変形例にかかるシステムを示すブロック図である。
第1の実施形態に係るシステムは、クライアント装置1がデータを送信し、サーバ装置22がデータを受信する場合についての説明だった。第1の実施形態の変形例にかかるシステムは、クライアント装置21がデータを受信し、サーバ装置22がデータを送信する場合を説明する。第1の実施形態の変形例にかかるクライアント装置21及びサーバ装置22は、クライアント装置とサーバ装置とが、送受信側の立場が第1の実施形態の立場と変わったこと以外は、第1の実施形態と同様である。
図4において、クライアント装置21は、データ供給部110と、確立指示部111と、第3収集部112と、第1の受信部113と、第2の受信部114とを備える。
また、サーバ装置22は、第1の送信部210と、第2の送信部211と、待受部215と、第4分配部216と、データ供給部217とを有する。
ここで、クライアント装置21の確立指示部111、確立部115、及び確立部116は第1の実施形態と同様の動作を行う。また、サーバ装置22の第1の待受部212、待ち受け部215、及び待ち受け部213は第1の実施形態と同様の動作を行う。
始めに、サーバ装置22は接続の待受処理を行う。これは第1の実施形態と同一の動作である。第1の送信部210の待受部212と、第2の送信部211の待受部213は、それぞれ固有のポート番号をソケットに割り当ててポートをオープンにし、クライアント装置21からの接続を待ち受ける。
次に、クライアント装置21の確立指示部111は接続の確立処理を行う。確立指示部111は、第1の受信部113の確立部115と、第2の受信部114の確立部116に対して、それぞれ接続の確立処理を開始するよう指示する。それぞれの接続の確立処理は並列的に行われる。確立部115は、待受部212との間でTCPの接続確立を試みる。TCPストリームの作成が完了すると、確立部115は接続の確立が成功したことを確立指示部111に通知する。同様に、確立部116は、待受部213との間でTCPの接続確立を試みる。TCPストリーム(制御用TCPストリーム)の作成が完了すると、次に確立部116はこの制御用ストリームを用いて、データ用TCPストリームの作成に関する情報を待受部213と交換する。始めに確立部116は、データ用TCPストリームで使用するポート番号の取得要求を待受部213に送出する。待受部213は、取得要求を受け取ると、その時点でサーバ装置22において未使用であるポートを調べ、このうち任意の個数のポート番号を選択し、データ用TCPストリームに割り当てる。待受部213は、選択した個数のソケットを作成し、選択したポート番号をそれぞれのソケットに割り当ててポートをオープンにする。そしてオープンにしたポート番号の一覧の情報を確立部116に送出する。次に確立部116は、ポート番号の一覧情報を受け取ると、それらのポートに対しTCPの接続確立を行う。データ用TCPストリームが作成された状態となると、確立部116は接続の確立が成功したことを確立指示部111に通知する。
第1の送信部210の待受部212は、確立部115との間でTCPストリームの作成が完了すると、接続の確立が成功したことを待受部215に通知する。同様に、第2の送信部211の待受部213は、確立部116との間でデータ用TCPストリームの作成が完了すると、接続の確立が完了したことを待受部215に通知する。
第1の送信部210における接続の確立処理と、第2の送信部211における接続の確立処理は、並行的に実行される。このため、待受部215は、接続の確立の結果の通知を、先に完了した方から順に受け取ることになる。待受部215は、第1の送信部210の接続確立が先に完了した場合と、第2の送信部211の接続確立が先に完了した場合で、それぞれ異なる処理手順を実行する。以下では、それぞれの場合について、待受部215の処理手順を述べる。
第1の送信部210の接続が先に完了した場合について述べる。待受部215は、待受部212から接続の確立が成功したことの通知を受け取ると、第4分配部216に対し、データの分配先を第1の送信部210とするよう指示を出す。次に待受部215は、データ供給部217に対しデータの送出が可能になったことを通知し、以降、データ供給部217からデータの入力が行われる。データ供給部217は第4分配部216にデータを渡す。第4分配部216はデータを第1の送信部210に渡す。ここで、第4分配部216は、第1の送信210へ渡したデータサイズの累計値を保持するための記憶領域を持っており、第1の送信部210にデータを渡すごとに、当該のデータサイズの値を記憶領域の値に加算する。この値を累積送信済みデータサイズと呼ぶ。第1の送信部210に渡されたデータは、TCP/IPの各ヘッダが付与されて、TCPストリームを通じて第1の受信部113へ送出される。さらにデータは第3収集部112に渡される。第3収集部112は受け取ったデータをデータ出力部110に渡す。ここで、第3収集部112は、第1の受信部113から受け取ったデータサイズの累計値を保持するための記憶領域を持っており、データを受け取るごとに、当該のデータサイズの値を記憶領域の値に加算する。この値を累積受信済みデータサイズと呼ぶ。データ出力部110は、得られたデータを任意の方法で出力する。以降、データ供給部217からデータの入力が行われるごとに、以上の処理によりデータが最終的にデータ出力部110へと伝送される。
次に、この後で第2の送信部211の接続が完了する。待受部215は、213から接続の確立が成功したことの通知を受け取ると、第4分配部216に対し、データの分配先を第1の送信部210から第2の送信部211へと切り替えるように指示を出す。以後、第4分配部216は、データ供給部217から送信すべきデータを受け取ると、これを第2の送信部211の第3分配部214へ渡す。第3分配部214に渡されたデータは、分割され、分割順序を表すヘッダが付与されて、さらにTCP/IPの各ヘッダが付与されて、複数のデータ用TCPストリームを通じて並列的に第2の受信部114の第4収集部117へ送出される。第4収集部117は、分割情報を参照し、順序が元の順序に正しくなるよう並び替えを行った上で、第3収集部112へデータを渡す。
さらに待受部215は、データの分配先を切り替える指示を出すのに合わせて、同じく第4分配部216から、第1の送信部210へ渡した累積送信済みデータサイズ値を読み出す。待受部215は、この値を第2の送信部211に通知し、制御用TCPストリームを通じてこの値を第2の受信部114へ通知するよう指示する。第2の受信部114へ通知された値はさらに第3収集部112へ通知される。ここで、第3収集部112は、通知された累積送信済みデータサイズの値と、自身が持つ累積受信済みデータサイズの値が等しくなるまで、第2の受信部113から受け取ったデータをデータ出力部110に渡さず、自身に保持しておく。つまり、第1の伝送方式を用いて伝送されたすべてのデータを受け取るまで、第2の伝送方式を用いて伝送されたデータの受け渡しを待機する。通知された累積送信済みデータサイズの値と、自身が持つ累積受信済みデータサイズの値が等しくなったタイミングで、保持していた第2の受信部114からのデータをすべてデータ出力部110へ受け渡す。このようにすることで、第1の伝送方式と第2の伝送方式との間で生じたデータの到着順序の入れ違いを解消することが可能になる。
以上、第1の送信部210の接続が先に完了した場合について述べた。
次に、第2の送信部211の接続が先に完了した場合について述べる。待受部215は、待受部213から接続の確立が成功したことの通知を受け取ると、第4分配部216に対し、データの分配先を第2の送信部211とするよう指示を出す。次に待受部215は、データ供給部217に対しデータの送出が可能になったことを通知する。以降、データ供給部217のデータは第4分配部216において第2の送信部211(の第3分配部214)へと分配される。分配されたデータが第2の伝送方式に則って最終的に第3収集部112へ伝送されるまでの処理手順は前出と同様である。第3収集部112は受け取ったデータをデータ出力部110に渡す。
本実施形態では、第1の送信部210による単一TCPストリームを用いた伝送方式が、第2の送信部211による複数TCPストリームを用いた伝送方式よりも優先するものとしている。そこで待受部215は、第2の送信部211の接続の完了通知を受け取ったタイミングで、最早第1の伝送方式を使用する必要がなくなったことになる。そこで待受部215はこのタイミングで、第1の送信部210に対し、接続の確立の中断を指示する。第1の送信部210はソケット終了やポート等のリソース開放を行う。あるいは通知を受け取ったタイミングでは接続の確立の中断を行わずに、第1の送信部210の接続が完了するまで待機し、完了した時点で即座に第1の送信部210の接続を終了するという動作であってもよい。
以上、第2の送信部211の接続が先に完了した場合について述べた。
以上のように第1の実施形態によれば、第1の伝送方式と第2の伝送方式の仕様の優先度の違いに応じて、優先度の低い伝送方式(第1の伝送方式)が先に接続確立完了したときにはそちらを用いてデータ伝送を開始し、優先度の高い伝送方式(第2の伝送方式)が後から接続確立完了したときにはそちらに切り替えて以降のデータ伝送を行い、一方、優先度の高い伝送方式が先に接続確立完了したときにはそちらを使用し続ける。これにより、クライアント装置およびサーバ装置が複数の種類の伝送方式に対応する場合に、早く接続完了が完了した方でデータ伝送を開始できるようになるため、データ伝送までの所要時間を短縮することが可能になる。また、それぞれの対応状況に応じて優先度の高い伝送方式を使用できるようになる。
さらに、本実施形態によれば、伝送方式への対応状況をネゴシエーションする機構を持たないサーバ装置またはクライアント装置が既に広く普及している場合であっても、ネゴシエーションの機構を後から追加する必要がない。
また、第1の実施形態にかかるクライアント1装置及びサーバ装置2は、第1の伝送方式は単数のストリームを用いて通信を行う伝送方式であり、第2の伝送方式は複数のストリームを用いて通信を行う伝送方式である例を説明したが、第1の伝送方式と第2の伝送方式はこの例に限られない。第1の伝送方式と第2の伝送方式は異なる伝送方式であればよい。例えば、DCCP(Datagram Congestion Control Protocol)やSCTP(Stream Control Transmission Ptorocol)といったプロトコルによる伝送方式の他、ATMやフレームリレーによる伝送方式であっても良い。またTLS(Transport Layer Security)のように、接続確立に認証等の手続きを含む伝送方式であっても良い。この場合、第2の送信部104及び第2の受信部201は、単一のストリームを確立し、単一のストリームを用いて通信を行うものであっても良い。この場合、第2の送信部104は第2分配部107を有していなくて良く、第2の受信部201は第1収集部204を有していなくても良い。また第1の伝送方式または第2の伝送方式は、UDP(User Datagram Protocol)といったコネクションレス型のプロトコルによる伝送方式であっても良い。コネクションレス型の伝送方式を含む場合、例えば第1の伝送方式はUDPを用いて通信を行う伝送方式であり、第2の伝送方式はTCPを用いて通信を行う伝送方式とする。UDPは接続確立の手続きを持たない伝送プロトコルであるため、この場合、第1の送信部103は確立部105を有していなくても良い。第1の受信部200は待受部202を有していなくても良い。その場合、確立指示部101は接続の確立処理を行う際に、第1の送信部103に対して接続の確立処理を開始するよう指示するステップを省略し、その時点で接続の確立処理が完了したものとして動作する。つまり、確立指示部101は、第1分配部102に対し、データの分配先を第1の送信部103とするよう指示を出し、さらに、データ供給部100に対しデータの送出が可能になったことを通知する。
また、クライアント装置1は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、データ供給部100、確立指示部101、第1分配部102、第1の送信部、第2の送信部104は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、クライアント装置1は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
また、サーバ装置2は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、第1の受信部200、第2の受信部201、第2収集部205、データ出力部206は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、サーバ装置2は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
また、クライアント装置21及びサーバ装置22も同様に、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。
<第2の実施形態>
図5は、本発明の第2の実施形態のシステムを示すブロック図である。
以下では、第2の実施形態のシステムは、サーバ装置の画面の情報をパケット化してリアルタイムで配信する「画面転送システム」であるとして説明する。しかしながら、第2の実施形態のシステムは、画面転送システムに限らず、任意の種類のデータ伝送を行うシステムにも適用できる。
図5に示すように、第2の実施形態に係るシステムは、サーバ装置32とクライアント装置31とが、ネットワーク3を介して接続されている。
第2の実施形態にかかるサーバ装置32は、複数の送信部3203A〜Zと、第1のデータを分割することにより複数の第1分割データを生成するとともに、前記複数の第1分割データを、複数の送信部3203A〜Zに分配する第5分配部3202と、複数の送信部3203A〜Zが、任意の期間の中で、第1のデータを前記クライアント装置31に送信するために要した送信処理時間の割合である送信処理時間率を算出する送信処理時間算出部3205と、送信処理時間率に基づき、第5分配部3202が、第2のデータを分割して生成する複数の第2の分割データを、何個の送信部に分配するかを決定するストリーム数決定部3206とを備え、第5分配部3202は、複数の第2の分割データを、決定部3206が決定した数の送信部に分配することを特徴とする。
以下では、まず、ストリーム数決定部3206が、第5分配部3202に何個の送信部に分配させるかについて決定する際、送信処理時間率に基づき決定理由について説明する。
一般的に、複数のTCPストリームでデータ伝送を行う場合、適切なストリームの数(図5では、送信部の数)を決定することが好ましいと言える。TCPストリームの数を増やせば、データの送信レートは向上する。しかしながら、送信レートがネットワーク帯域を超えた場合、それ以上、TCPストリームの数を増やしても、送信レートに変化はない。一方で、TCPストリームの数を増やせば増やすほど、装置の処理負荷が上がる。したがって、送信レートを確保しつつ、不要な処理負荷をかけないためにも、TCPストリームの数を適切な値に設定することが必要である。
従来、TCPストリームの数の決定方法として、例えば、TCPストリームの数を一つずつ増やしていき、当該TCPストリームの数毎に送信レートを測定し、送信レートの測定値に応じて、TCPストリームの数を決定する方法があった。例えば、TCPストリームの数をN本からN+1本に増加させた場合に、送信レートの測定値が変化しなかった場合、若しくは減少した場合に、TCPストリームの数がN本に決定する方法が考えられる。TCPストリームの数をN+1本とした場合に、N+1本で実現可能な送信レートがネットワーク帯域を超えたと判断し、これ以上増やしても、処理負荷だけ上がり、送信レートは上がらないと考えられる為である。
しかしながら、この方法では、TCPストリームの数を適切な値に設定できない場合がある。
送信レートは、送信するデータの量にも影響を受ける。したがって、送信するデータ量が小さい場合は、TCPストリームの数を多くしても、送信レートが小さくなる。つまり、送信するデータ量が小さい場合は、測定される送信レートは、TCPストリームの実現可能な送信レートより小さくなる場合がある。
このように、TCPストリームの数を決定するために用いる送信レートの測定値が、TCPストリームの実現可能な送信レートより大きく下回っている場合もあり得る。このような場合、前述の決定方法では、TCPストリームの数を適切な値に設定できない場合がある。
例えば、TCPストリームの数を、N本からN+1本に増加させた場合に、送信レートの測定値が変化しなかった、もしくは減少した場合に、その原因が、送信レートがネットワーク帯域を超えたことではなくて、送信するデータ量が小さいことである場合もある。このような場合、本来、N+1本以上のTCPストリームが適切な値であるにもかかわらず、N本に決定してしまう場合がある。
したがって、送信レートの測定値のみで、TCPストリームの数を決定すると、TCPストリームの数を適切に決定できない場合がある。
TCPストリームの数を決定する際に、判断基準に用いる送信レートの測定値は、そのTCPストリームの数において、実現可能な送信レートが実現できる程度のデータ量を送信する際の測定値に比較であることが好ましい。
本発明の一側面は、サーバ装置とクライアント装置間で送信するデータ量が変化する場合であっても、サーバ装置とクライアント装置間で用いるTCPストリームの数として、送信レートを確保しつつ、不要な処理負荷をもたらさない適切なTCPストリームの数に決定できるようにすることを目的とする。
そのために、本実施形態では、ストリーム数を決定(何個の送信部に分配するかを決定)する際、送信処理時間率に基づき決定している。
≪ サーバ装置の構成 ≫
次に、図5を用いて、本実施形態に係るサーバ装置32の構成を説明する。
サーバ装置32は、データ供給部3201と、第5分配部3202と、複数の送信部3203A〜3203Zと、送信レート測定部3204と、送信処理時間率算出部3205と、ストリーム数決定部3206とを備える。
データ供給部3201は、クライアント装置31に伝送すべきデータを入力する。本実施形態の画面転送システムにおいては、入力されるデータは、サーバ装置32における画面更新である。画面更新についての詳細は、図6及び図7を用いて後述する。
第5分配部3202は、データ供給部3201から渡されたデータを分割し、分割されたデータを送信部3203A〜103Zに分配する。分割後のデータに対し、クライアント装置31において結合を行うために必要となる分割情報を付与する。データの分割方法及び分割情報については、図8を用いて後述する。
送信部3203A〜Zは、分割されたデータの送信処理を行う。入力されたデータをネットワーク上において伝送可能な形式に変換し、クライアント装置31の対応する受信部201に対し送信する。伝送プロトコルにはTCP/IPを使用する。本実施形態では各送信部103はTCPのストリーム(データを送る論理的なパイプ)である。
送信レート測定部3204は、データの送信レートの測定を行う。ここで、送信レートとは、単位時間あたりに、送信されたデータ量である。送信レートの単位は、ビット毎秒で表される。
送信処理時間率算出部3205は、データ送信の送信処理時間率を測定する。送信処理時間率とは、規定の時間間隔においてデータの送信処理に費やされた時間が占める割合である。
≪ クライアント装置の構成 ≫
クライアント装置31は、受信部3101A〜Zと、結合部3102と、表示部3103とを備える。
受信部3101A〜Zは、ネットワーク3を介してサーバ装置32からデータを受信する。
結合部3102は、受信部201から渡されたデータに付与された分割情報を利用してデータの結合を行う。
表示部3103は、結合されたデータを表示する。
≪ 処理の流れ ≫
次に、本実施形態に係る画面転送システムにより行われる処理について、図面を適宜参照しながら説明する。サーバ装置32とクライアント装置31がネットワーク3を介して物理的に接続されている。
≪ 処理の流れ(画面更新の生成) ≫
画面転送の実行が開始されると、サーバ装置32のデータ供給部3201は、オペレーティングシステムやアプリケーションの実行状態に応じて画面更新の生成処理を行う。画面更新とは、画面の描画状態を変化させるための情報である。図6に画面更新の例を示す。画面更新は、更新する領域の位置を表す領域情報と、対応する領域の画像情報からなる。領域情報は、画面領域における画像情報の表示位置を示す数値である。図7は、領域情報を説明するための図である。
例えば図7に示すように、画面領域の左上角を(0,0)、右下角を(Width,Height)としたときの、表示位置の左上座標(Left,Top)と右下座標(Right,Bottom)からなる矩形情報で示される。画像情報は、領域情報に対応する領域の更新後のビットマップデータ(矩形の各画素におけるRGB3色の値など)である。データ供給部3201は画面更新を送信すべきデータとして第5分配部3202に出力する。
第5分配部3202の処理を図9を参照しながら説明する。図9は、図5のサーバ装置32の第5分配部3202の処理を示すフローチャートである。第5分配部3202は、データ供給部3201から、送信すべきデータを受け取ると、複数の送信部3203A〜Zに分配する。始めに、データ供給部3201から受け取ったデータを規定のサイズ(例:8キロバイトなど)ごとに分割する(ステップS1001)。次に、分割後の各データに対して、クライアント装置31において結合を行うために必要となる分割情報を付与する。分割情報の例を図8に示す。例では、送信すべきデータが4分割された後で、それぞれに分割情報が付与されている。分割情報は、「分割後のデータの通し番号」/「分割後のデータの総数」という2つの数値からなる。
次に第5分配部3202は分割後のデータを送信部3203A〜Zに分配する。第5分配部3202は、分割後のデータについて、それぞれどの送信部103を用いて送信処理を行うか、分配先を決定する。第5分配部3202は利用するTCPストリーム数の値をパラメータとして保持し、この値に等しい個数の送信部103に分配を行う。TCPストリーム数の初期値は任意(たとえば1)であり、以後、ストリーム数決定部3206によりこのTCPストリーム数の値は変更される。分配先の決定の仕方は任意である。例えば、送信部3203Aから順番に割り当てるやり方であってよい。各送信部103に対応するTCPストリームの状態の値(輻輳ウィンドウのサイズなど)を調べて、値の大きな送信部103から優先的に割り当てるやり方であってよい。
次に第5分配部3202は、データを送信部103に渡す前に、現在時刻(サーバ装置32が起動してからの経過時間など)を送信処理開始時刻としていったん自身に記録してから(ステップS1002)、前述の割り当てにしたがって、分割後のデータを各送信部103に渡す。各送信部103は、受け取ったデータをネットワーク上において伝送可能な形式に変換し、クライアント装置31の対応する受信部201に対し送信する(ステップS1003)。送信部103は、送信処理が完了すると、それぞれ第5分配部3202に通知する。次に第5分配部3202は、送信すべきデータがすべて送信完了したことを確認すると、ふたたび現在時刻を調べ、送信処理終了時刻として自身に記録する(ステップS1004)。送信処理開始時刻との差から送信処理に要した送信処理時間を算出し、これを送信処理時間率算出部3205に通知する。送信処理時間率算出部3205は、送信処理時間の累積値を格納するための記憶領域を有しており、通知された値を格納値に加算する。以降、後述のストリーム数決定部3206から送信処理時間率の取得依頼を受け取るまで、通知を受けるごとに格納値を更新していく。さらに第5分配部3202は、送信完了したデータサイズを送信レート測定部3204に通知する(ステップS1006)。送信レート測定部3204は、データサイズの累積値を格納するための記憶領域を有しており、通知された値を格納値に加算する。以降、ストリーム数決定部3206から送信レートの取得依頼を受け取るまで、通知を受けるごとに格納値を更新していく。
なお、送信部103が送信完了を通知するタイミングは、実装に応じて様々なやり方が考えられるが、本実施形態はそのいずれかに限定するものではない。例えば、送信部103が受信部201宛てにネットワーク3へデータを送出し終わったタイミングをもって送信完了を通知してもよい。例えば、受信部201から当該のデータに対する確認応答(ACK)を受け取ったタイミングをもって送信完了を通知してもよい。例えば、送信部103の送信バッファ(ネットワーク3への送出待ちあるいは送出後データのACK待ちのデータを一時的に保持しておくためのバッファ)へのコピーが完了したタイミングをもって送信完了を通知してもよい。
また、本実施形態では、第5分配部3202がデータ供給部3201から送信すべきデータを受け取ってから、すべてのデータが送信完了するまでの所要時間を送信処理時間としていたが、必ずしもこれに限らなくともよい。例えば送信処理時間を次のようにしてもよい。第5分配部3202は、送信待ちのデータを一時的に保持しておくためのバッファを持ち、データ供給部3201から送信すべきデータが渡されたとき、バッファが空であれば、送信すべきデータをバッファにコピーする。バッファが空でない場合は、空になるまで待機してからコピーを行う。バッファへのコピーが完了したタイミングをもって送信処理終了時刻とし、ここから送信処理時間を算出する。
以上のように各送信部3203A〜Zに渡されたデータは、ネットワーク3を通じて、それぞれ対応する受信部3101A〜Zに到達する。到達したデータは結合部3102に渡される。
結合部3102は、データを受け取ると、付与された分割情報を利用してデータの結合を行う。分割情報に記された分割後のデータの総数すべてのデータを受け取れた時点で、それらを結合し、元のデータ(サーバ装置32のデータ供給部3201で生成された画面更新)を再構成する。元のデータは表示部3103に渡される。表示部3103はフレームバッファ(画面領域に対応する記録領域)を有しており、画面更新に含まれる領域情報に対応する情報を、画面情報で上書き更新する。フレームバッファの最新の状態はユーザに視覚的に提示される。
以上、サーバ装置32において画面更新が生成されてから、それがクライアント装置31に伝わり、表示されるまでの処理の流れを説明した。
≪ 処理の流れ(ストリーム数の決定) ≫
次に、ストリーム数決定部3206の処理の流れを説明する。ストリーム数決定部3206は、任意のタイミング(例えば5秒おきなど)で、以下に述べる手順で次のストリーム数を決定する。決定した値を第5分配部3202に通知し、第1分配部102が伝送時に使用するTCPストリーム(送信部103)の個数を変更する。
始めにストリーム数決定部3206は、送信レート測定部3204に送信レートの取得依頼を出す。送信レート測定部3204にはデータサイズの累積値が記憶されており、送信レート測定部3204は取得依頼を受け取ると、前回取得時からの経過時間を算出し、これでデータサイズの累積値を除することで送信レートを算出する。送信レート測定部3204は算出値をストリーム数決定部3206に出力した後で、累積値をゼロにリセットする。
次にストリーム数決定部3206は、送信処理時間率算出部3205に送信処理時間率の取得依頼を出す。送信処理時間率算出部3205には送信処理時間の累積値が記憶されており、送信処理時間率算出部3205は取得依頼を受け取ると、送信処理時間率を算出する。送信処理時間率とは、ある時間間隔においてデータの送信処理に費やされた時間が占める割合のことである。まず前回取得時からの経過時間を算出し、これで送信処理時間の累積値を除することで送信処理時間率を算出する。送信処理時間率算出部3205は算出値をストリーム数決定部3206に出力した後で、累積値をゼロにリセットする。
またストリーム数決定部3206は、現在使用しているTCPストリーム数の値を第5分配部3202から取得する。
以上のようにして、ストリーム数決定部3206は、TCPストリーム数、送信レート、送信処理時間率の各値を得る。以降、TCPストリーム数をN、そのときの送信レートをS、送信処理時間率をRと記載する。ストリーム数決定部3206は、N,S,Rの値をもとに、次に使用するTCPストリーム数Nnextの値を決定する。
≪ 決定処理の第一の例 ≫
ストリーム数の決定処理の第一の例を図10を用いて説明する。始めにストリーム数決定部3206は、送信処理時間率Rが既定の閾値Rt(例えば0.9など)を上回るか否かを判断する(ステップS1101)。前述の通り、送信処理時間率Rは、サーバ装置32の処理時間においてデータの送信処理に費やされた時間が占める割合を示す指標である。したがって、Rの値が大きい場合、サーバ装置32の処理時間の多くが送信処理に費やされているとみなすことができる。このことは、つまり、送信部103(TCPストリーム)が十分なレートでのデータ送信が行えておらず、TCPストリーム数を増加させて並列の度合いを高くすることにより送信レートが向上する可能性があることを意味している。一方、Rの値が小さい場合、サーバ装置32の処理時間のうち送信処理に費やされている時間は比較的小さいとみなすことができる。このことは、つまり、送信部103により達成可能なデータの送信レートよりも、データ供給部3201から供給されるデータのレート(データ入力レート)の方が小さいことを意味する。このとき、TCPストリーム数の値をこれ以上増加させたところで送信レートの向上は期待できない。したがって、本決定処理では、送信処理時間率Rが閾値Rtを下回る場合は、次に用いるTCPストリーム数Nnextの値を現在のTCPストリーム数Nから変化させたところで送信レートの向上は見込めないため、現状と同じ値を使用するという方針をとる。
RがRtを下回る場合、NnextはNと同じ値を用いると決定し(ステップS1107)、決定処理は終了する。上回る場合、N,Sの値を次のように記憶する(ステップS1102)。ストリーム数決定部3206は図11に示すテーブルを、記憶部32061内に保持する。図11は、図5のサーバ装置32のストリーム数決定部3206の記憶部32061が保持するテーブルの一例を示す図である。尚、記憶部32061は、ストリーム数決定部3206内にあるとして説明するが、ストリーム数決定部3206の外にあっても良い。
このテーブルは、NとSの値の組がNの昇順で記憶されている。さらにその序数が記憶されている。序数i、TCPストリーム数N、送信レートSの1つの組をエントリと呼ぶ。ストリーム数決定部3206は、始めに、取得したNの値に等しいエントリがテーブルに存在するかを調べ、存在していれば、当該のエントリのSの値を取得したSの値で上書き更新する。存在していなければ、取得したNとSの値からなる新しいエントリを作成しテーブルに追加する。追加後のテーブルをNに関してソートし、序数を付け直す。
以上のように更新したテーブルを用いて、ストリーム数決定部3206はNnextを以下の方針に従って決定する。通常、TCPストリーム数を増やしていけば送信レートは向上する。しかし、送信レートがネットワークの帯域の上限に達した場合は、それ以上増やしても送信レートは向上しない。そこで、テーブルの送信レートSの値がNに関し単調増加の傾向を示すなら、次に用いるTCPストリーム数Nnextはテーブルに記憶されたストリーム数よりもさらに大きな値を選択する。もし単調増加の傾向を示さず、ある程度以上のNでSの増加が頭打ちに至るなら、それ以上Nの値を大きくとったところで効果はない。この場合は、頭打ちにいたるちょうどのNの値をNnextとして選択する。
具体的には以下の手順を行う。始めに、序数iとして1を選択し(ステップS1103)、次のループ処理を行う。テーブルのエントリの個数(序数iの最大値)をimaxとし、iがimaxに等しければループを抜ける(ステップS1104)。序数iのエントリの送信レート(S[i]と呼ぶ)と序数i+1のエントリの送信レート(S[i+1]と呼ぶ)の差と、規定の閾値Stとの大小を比較する(ステップS1105)。閾値Stは任意であってよく、例えば、そのときの序数iのエントリのTCPストリーム数N[i]と、序数i+1のエントリのTCPストリーム数N[i+1]を用いて、St=(N[i+1]−N[i])×4Mbpsとする。差がStを超えていれば、iの値を1インクリメントし(ステップS1106)ループの処理を継続する。Stを超えていなければ、そのときの序数i+1のエントリのTCPストリーム数(N[i+1]と呼ぶ)のところで送信レートが頭打ちに至ると判断できるので、これ以上のTCPストリーム数を増やしても効果はないと予期できる。そこで次のTCPストリーム数Nnextは、序数iのエントリのTCPストリーム数(N[i]と呼ぶ)とN[i+1]との中間の値とする(ステップS1109)。一方、すべてのiについてS[i+1]とS[i]の差が閾値Stを超えていたならば、送信レートはNに対し単調増加しているとみなすことができるため、Nnextは、テーブルで最大のTCPストリーム数N[imax]よりもさらに1増やした値とする(ステップS1108)。
動作例を示す。いま、送信処理時間率Rの値が閾値Rtを超えており、テーブルのエントリの更新が完了した状態であるとする。そのときのテーブルが図11に示した状態であるとする。さらに、送信レートの差の閾値Stは(N[i+1]−N[i])×4Mbpsと仮定する。始めに、S[1]とS[2]の差とStとの大小が比較される。N[1]=1、N[2]=2、S[1]=5Mbps、S[2]=10Mbpsであるため、S[2]−S[1]=10−5=5Mbps、St=(2−1)×4=4Mbpsとなり、ステップS1105のS[i+1]−S[i]>St?の判定はYESとなる。次に、S[2]とS[3]の差とStとの大小が比較される。N[2]=2、N[3]=4、S[2]=10Mbps、S[3]=19Mbpsであるため、S[3]−S[2]=19−10=9Mbps、St=(4−2)×4=8Mbpsとなり、ステップS1105の判定は再びYESとなる。次に、S[3]とS[4]の差とStとの大小が比較される。N[3]=4、N[4]=6、S[3]=19Mbps、S[4]=20Mbpsであるため、S[4]−S[3]=20−19=1Mbps、St=(6−4)×4=8Mbpsとなり、ステップS1105の判定はNOとなる。処理はステップS1109に進み、このときのiの値は3であることから、Nnextの値は、(N[3]+N[4])/2=(4+6)/2=5と決定される。
このように、送信処理時間率Rの値に加えて送信レートSの値を利用して次のTCPストリーム数Nの値を利用することで、Nの値をある値以上増加させても送信レート向上の効果がないといった状況においてもそれを適切に判断し、不要なTCPストリーム数の増加を回避する。
なお、本第1の例では、送信レートSの値がNに関し単調増加の傾向を示すか否かに応じてNnextの決定方法を切り替えていたが、より細かな切り替えを行っても良い。例えばステップS1105の結果がNOだった場合、序数iの値が1だった場合は、Nnextの値をN[1]よりさらに小さな値にするという選択を行っても良い。
また、テーブルにおいて、記憶後、規定時間以上が経過したエントリを削除する処理を追加してもよい。これにより、導入先ごとに異なるネットワーク3の環境や、時々刻々と変動するネットワーク3の状況に適応しながら適切なTCPストリーム数を選択し続けることが可能になる。
以上、決定処理の第一の例を説明した。
≪ 決定処理の第二の例 ≫
次に、決定処理の第二の例を図12を用いて説明する。図12は、ストリーム数の決定処理の第2の例のフローチャートを示す図である。
ストリーム数決定部3206の記憶部32061は、取得したN,S,Rの値を保持するためのテーブルを持つ。テーブルの例を図13に示す。図13は、図5のサーバ装置32のストリーム数決定部3206の記憶部32061が保持するテーブルの第2の例を示す図である。尚、記憶部32061は、ストリーム数決定部3206内にあるとして説明するが、ストリーム数決定部3206の外にあっても良い。
第一の例と異なり、第二の例では、N,Sに加えてRの値を記憶する(ステップS1201)。ストリーム数決定部3206は、始めに、取得したNの値に等しいエントリがテーブルに存在するかを調べ、存在していれば、当該のエントリのSとRの値を取得したSとRの値で上書き更新する。テーブルには、N,S,Rに加えて、SをRで割った値をあわせて記憶される。存在していなければ、取得したN,S,Rの値からなる新しいエントリを作成しテーブルに追加する。追加後のテーブルをNに関してソートし、序数を付け直す。
送信処理時間率Rは、サーバ装置32の処理時間においてデータの送信処理に費やされた時間が占める割合である。このときの送信レートがSで与えられることから、S/Rの値は送信部103で達成可能な伝送レートの上限の近似値とみなすことができる。そこで、S/Rの値がNに関し単調増加するか否かに応じて、次に用いるTCPストリーム数Nnextの値を決定する。
以降の決定処理は、第一の例のステップS1103以降を、S→S/Rと読み替えた手続きと同一である。序数iとして1から順に(ステップS1202〜S1205)、序数iのエントリのS[i]/R[i]と序数i+1のエントリのS[i+1]/R[i+1]との差と、規定の閾値(S/R)tとの大小を比較する。差が閾値(S/R)tを下回れば、そのときのiを用いて、Nnextの値を(N[i]+N[i+1])/2と定める。imax未満の全てのiについて差が(S/R)tを上回っていれば、S/RはNに関し単調増加していると見なし、Nnextの値をN[imax]より1大きな値とする。動作例は省略する。
≪ 決定処理の第三の例 ≫
決定処理の第三の例を図14を用いて説明する。図14は、ストリーム数の決定処理の第3の例のフローチャートを示す図である。
ストリーム数決定部3206は、送信処理時間率Rが既定の閾値Rt(例えば0.9など)を上回るか否かを判断する(ステップS1301)。Rの値が閾値よりも小さい場合(ステップS1302)、決定処理の第一の例と同様の判断より、Nnextの値として、現状と同じNの値を使用する。一方、閾値を上回る場合(ステップS1303)、サーバ装置32の処理時間の多くが送信処理に費やされていることから、TCPストリーム数を増加させることにより送信レートに改善の可能性が見込める。よって、Nnextの値として、現状より大きなN+1を使用する。動作例は省略する。
以上のように本実施の形態によれば、伝送すべきデータの入力されるレートが時間によって変動する場合であっても、送信レートを確保しつつ、不要な処理負荷をもたらさない適切なTCPストリーム数を決定することが可能になる。
また、サーバ装置32は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、データ供給部3201と、第5分配部3202と、複数の送信部3203A〜3203Zと、送信レート測定部3204と、送信処理時間率算出部3205と、ストリーム数決定部3206とは、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、サーバ装置32は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。