(57)【要約】【課題】アプリケーションプログラムを改修することなくＴＦＯの仕様に沿った通信を可能とする通信制御装置、通信制御方法及び通信制御プログラムを提供する。【解決手段】遅延部２８は、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる。送信部３０は、ＳＹＮパケットの送信が遅延されている期間にアプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する。【選択図】図３
2018019161.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる遅延部と、
ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する送信部と、
を含むことを特徴とする送信制御装置。
【請求項２】
スリーウェイハンドシェイクにおけるＳＹＮパケットの送信からＳＹＮ＋ＡＣＫパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部と、
アプリケーションプログラムにおける前記接続関数の呼び出しの実行から前記送信関数の呼び出しの実行までの時間である送信タイムラグを特定する送信タイムラグ特定部と、をさらに含み、
前記遅延部は、前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項１に記載の送信制御装置。
【請求項３】
前記遅延部は、複数の通信装置のそれぞれについて、当該通信装置との通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該通信装置に接続するための前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項２に記載の送信制御装置。
【請求項４】
前記遅延部は、複数のソケットのそれぞれについて、当該ソケットとの通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該ソケットに接続するための前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項２に記載の送信制御装置。
【請求項５】
スリーウェイハンドシェイクにおけるＳＹＮパケットの送信からＳＹＮ＋ＡＣＫパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部、をさらに含み、
前記遅延部は、前記接続関数の呼び出しの実行タイミングから前記ラウンドトリップタイムが経過するまで前記ＳＹＮパケットの送信を遅延させる、
ことを特徴とする請求項１に記載の送信制御装置。
【請求項６】
ＳＹＮパケットの送信が遅延されている期間に前記送信関数の呼び出しが実行されなかった回数が所定数を超えた際には、前記送信部は、ＴＦＯが有効であることを示すＴＣＰオプションを含まないＳＹＮパケットを送信する、
ことを特徴とする請求項１から５のいずれか一項に記載の送信制御装置。
【請求項７】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるステップと、
ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信するステップと、
を含むことを特徴とする送信制御方法。
【請求項８】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる手順、
ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する手順、
をコンピュータに実行させることを特徴とする送信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信制御装置、送信制御方法及び送信制御プログラムに関する。
【背景技術】
【０００２】
ＴＣＰ（Transmission Control Protocol）におけるソケット間の接続（ＴＣＰコネクション）を確立するための手順として、スリーウェイハンドシェイクと呼ばれる手順が知られている。
【０００３】
スリーウェイハンドシェイクでは、例えばサーバとの通信を要求するクライアントがＳＹＮパケットをサーバに送信する。サーバはＳＹＮパケットを受信すると、ＳＹＮ＋ＡＣＫパケットをクライアントに送信する。クライアントはＳＹＮ＋ＡＣＫパケットを受信すると、ＡＣＫパケット、及び、ＨＴＴＰリクエストなどといった送信対象のデータをサーバに送信する。このようにして、送信対象のデータがクライアントからサーバに送信されることとなる。ここで、クライアントがＳＹＮパケットをサーバに送信してから当該クライアントがサーバからＳＹＮ＋ＡＣＫパケットを受信するまでの時間を、スリーウェイハンドシェイクにおけるラウンドトリップタイム（ＲＴＴ）と呼ぶこととする。
【０００４】
またスリーウェイハンドシェイクに関連するＴＣＰにおける通信の高速化の技術の一例として、ＲＦＣ（Request for Comments）７４１３に、ＴＦＯ（TCP Fast Open）と呼ばれる技術が記載されている。
【０００５】
ＴＦＯでは、スリーウェイハンドシェイクでクライアントからサーバに送信されるＳＹＮパケットに、ＴＦＯが有効であることを示すＴＣＰオプションが含まれる。ここで当該サーバがＴＦＯに対応可能である場合は、当該サーバは、当該ＳＹＮパケットを受信すると、クッキーと呼ばれるデータが付与されたＳＹＮ＋ＡＣＫパケットをクライアントに送信する。クライアントはＳＹＮ＋ＡＣＫパケットを受信すると、ＡＣＫパケット及び送信対象のデータをサーバに送信する。
【０００６】
その後、同一のソケット間の通信が再度開始される際には、クライアントは、サーバから受信済であるクッキー、及び、送信対象のデータを含むＳＹＮパケットをサーバに送信する。このようにすることでＴＦＯでは、クライアントがサーバからクッキーを受信すると、スリーウェイハンドシェイクにおけるＳＹＮ＋ＡＣＫパケットの受信を待つことなく当該クライアントは当該サーバに送信対象のデータを送信できることとなる。その結果、スリーウェイハンドシェイクにおける１のＲＴＴに相当する通信時間が節約されるため、通信速度が向上する。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＴＦＯの仕様に沿った通信が実装されていないアプリケーションプログラムにおいてＴＦＯの仕様に沿った通信を可能にするための一手法として、例えばＴＦＯの仕様に沿うようアプリケーションプログラムを改修することが考えられる。例えばＲＦＣ７４１３には、ＴＦＯの仕様に沿った通信を実装するための一手法が示されている。
【０００８】
しかしＴＦＯの仕様に沿うようアプリケーションプログラムを改修するとなると、改修すべき箇所をすべて特定した上で、特定されたすべての箇所を改修する必要があるため手間がかかってしまう。
【０００９】
本発明は上記実情に鑑みてなされたものであって、その目的の一つは、アプリケーションプログラムを改修することなくＴＦＯの仕様に沿った通信を可能とする通信制御装置、通信制御方法及び通信制御プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明に係る送信制御装置は、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる遅延部と、ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する送信部と、を含む。
【００１１】
本発明の一態様では、スリーウェイハンドシェイクにおけるＳＹＮパケットの送信からＳＹＮ＋ＡＣＫパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部と、アプリケーションプログラムにおける前記接続関数の呼び出しの実行から前記送信関数の呼び出しの実行までの時間である送信タイムラグを特定する送信タイムラグ特定部と、をさらに含み、前記遅延部は、前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御する。
【００１２】
この態様では、前記遅延部は、複数の通信装置のそれぞれについて、当該通信装置との通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該通信装置に接続するための前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御してもよい。
【００１３】
あるいは、前記遅延部は、複数のソケットのそれぞれについて、当該ソケットとの通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該ソケットに接続するための前記接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御してもよい。
【００１４】
また、本発明の一態様では、スリーウェイハンドシェイクにおけるＳＹＮパケットの送信からＳＹＮ＋ＡＣＫパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部、をさらに含み、前記遅延部は、前記接続関数の呼び出しの実行タイミングから前記ラウンドトリップタイムが経過するまで前記ＳＹＮパケットの送信を遅延させる。
【００１５】
また、本発明の一態様では、ＳＹＮパケットの送信が遅延されている期間に前記送信関数の呼び出しが実行されなかった回数が所定数を超えた際には、前記送信部は、ＴＦＯが有効であることを示すＴＣＰオプションを含まないＳＹＮパケットを送信する。
【００１６】
また、本発明に係る送信制御方法は、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるステップと、ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信するステップと、を含む。
【００１７】
また、本発明に係る送信制御プログラムは、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる手順、ＳＹＮパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する手順、をコンピュータに実行させる。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施形態に係る通信システムの全体構成の一例を示す図である。
【図２Ａ】クライアントからサーバへのデータ送信の一例を説明する説明図である。
【図２Ｂ】クライアントからサーバへのデータ送信の別の一例を説明する説明図である。
【図３】本発明の一実施形態に係るクライアントで実装される機能の一例を示す機能ブロック図である。
【図４】本発明の一実施形態に係るクライアントにおいて行われる処理の流れの一例を示すフロー図である。
【発明を実施するための形態】
【００１９】
以下、本発明の一実施形態について、図面を参照しながら説明する。
【００２０】
図１は、本発明の一実施形態に係る通信システム１０の全体構成の一例を示す図である。図１に示すように、本実施形態に係る通信システム１０には、クライアント１２と、サーバ１４とが含まれる。クライアント１２とサーバ１４とは、例えばインターネットなどのコンピュータネットワーク１６を介して互いに通信可能となっている。
【００２１】
本実施形態に係るサーバ１４は、例えばウェブサーバであり、クライアント１２から要求されたデータをクライアント１２に送信する。
【００２２】
本実施形態に係るクライアント１２は、例えばゲームコンソール、スマートフォン、携帯電話、パーソナルコンピュータ等のコンピュータである。
【００２３】
図１に示すように、本実施形態に係るクライアント１２には、例えば、プロセッサ１２ａ、記憶部１２ｂ、通信部１２ｃ、出力部１２ｄ、入力部１２ｅが含まれる。プロセッサ１２ａは、例えばクライアント１２にインストールされるプログラムに従って動作するＣＰＵ等のプログラム制御デバイスである。記憶部１２ｂは、例えばＲＯＭやＲＡＭ等の記憶素子やハードディスクドライブなどである。記憶部１２ｂには、プロセッサ１２ａによって実行されるプログラムなどが記憶される。通信部１２ｃは、例えばイーサネット（登録商標）モジュールや無線ＬＡＮモジュールなどの通信インタフェースである。出力部１２ｄは、例えばプロセッサ１２ａから入力される指示に従って情報を表示出力するディスプレイ等の表示部や音声出力するスピーカ等の音声出力部である。入力部１２ｅは、例えばユーザが行った操作の内容をプロセッサ１２ａに出力するゲームコントローラ、タッチパッド、マウス、キーボード、マイク等である。
【００２４】
また本実施形態に係るクライアント１２では、例えばクライアント１２が備えるハードウェアタイマ、又は、クライアント１２にインストールされたソフトウェアタイマにより、あるタイミングから別のタイミングまでの時間が計測できるようになっている。
【００２５】
また本実施形態に係るクライアント１２には、アプリケーションプログラム、及び、当該アプリケーションプログラムのプラットフォームソフトウェアとして動作するオペレーティングシステムがインストールされている。
【００２６】
本実施形態では例えば、クライアント１２にインストールされているアプリケーションソフトウェアにおいて、サーバ１４に記憶されているコンテンツを要求する機能が実装されている。サーバ１４へのコンテンツの要求に先立って、スリーウェイハンドシェイクによりクライアント１２のソケットとサーバ１４のソケットとの間の通信が確立される。
【００２７】
この場合、一般的なアプリケーションソフトウェアにおいては、connect()関数などといった、サーバ１４に接続するための接続関数が呼び出された後で、send()関数やwrite()関数などといった、サーバ１４へのデータ送信のための送信関数が呼び出される。サーバ１４に送信されるＨＴＴＰリクエストのデータなどは、例えば送信関数のパラメータとして設定される。なおこれらの関数は例えば標準ソケットＡＰＩの関数であり、また、システムコールであってもライブラリ関数であっても構わない。
【００２８】
ここで本実施形態に係るクライアント１２からサーバ１４へのデータ送信につき、図２Ａ及び図２Ｂを参照しながら説明する。
【００２９】
図２Ａは、クライアント１２からサーバ１４へのデータ送信の一例を説明する説明図である。
【００３０】
図２Ａに示すように本実施形態に係るクライアント１２は、アプリケーションプログラムにて接続関数の呼び出しが実行されると、サーバ１４との間でのスリーウェイハンドシェイクを開始する。すなわち、アプリケーションプログラムにて接続関数の呼び出しが実行されると、クライアント１２はサーバ１４にＳＹＮパケットを送信する。このとき本実施形態では、ＴＦＯ（TCP Fast Open）が有効であることを示すＴＣＰオプション（以下、ＴＦＯ有効オプションと呼ぶ。）が含まれるＳＹＮパケットが送信される。
【００３１】
そしてサーバ１４は、ＳＹＮパケットを正常に受信すると、ＳＹＮ＋ＡＣＫパケットをクライアント１２に送信する。ここでサーバ１４がＴＦＯに対応したものである場合は、サーバ１４は、ＲＦＣ（Request for Comments）７４１３で定義されたクッキーを含むＳＹＮ＋ＡＣＫパケットをクライアント１２に送信する。
【００３２】
ここで図２Ａの例では、クライアント１２がＳＹＮ＋ＡＣＫパケットを受信するまでに、アプリケーションプログラムにて送信関数の呼び出しが実行されていることとする。またクライアント１２の送信ソケットバッファに送信対象のデータが記憶されていることとする。
【００３３】
そしてクライアント１２は、ＳＹＮ＋ＡＣＫパケットを正常に受信すると、ＡＣＫパケットをサーバ１４に送信し、以後、サーバ１４への送信対象のデータを構成する１又は複数のパケットをサーバ１４に送信する。上述のように図２Ａの例では、クライアント１２がＳＹＮ＋ＡＣＫパケットを受信するまでに、アプリケーションプログラムにて送信関数の呼び出しが実行されている。そのためクライアント１２は、ＡＣＫパケットをサーバ１４に送信したタイミングにおけるサーバ１４への送信対象のデータの送信は可能である。
【００３４】
ここでサーバ１４から送信されたＳＹＮ＋ＡＣＫパケットにクッキーが含まれている場合は、クライアント１２は当該クッキーを記憶する。
【００３５】
サーバ１４は、例えばＨＴＴＰリクエストなどの要求である送信対象のデータをクライアント１２から受け付けると、要求に応じたデータをクライアント１２に送信する。
【００３６】
図２Ｂは、クライアント１２からサーバ１４へのデータ送信の別の一例を説明する説明図である。図２Ｂに例示するデータ送信は、例えば図２Ａに例示するデータ送信が行われた後にクライアント１２とサーバ１４との間で別のＴＣＰコネクションが確立される際に行われる。また図２Ｂに例示するデータ送信は、例えばクライアント１２とサーバ１４との間で確立されたＴＣＰコネクションが切断された後に再度ＴＣＰコネクションが確立される際に行われる。
【００３７】
図２Ｂに示すように、サーバ１４から受信したクッキーが記憶されたクライアント１２は、アプリケーションプログラムにて接続関数の呼び出しが実行されても、ＳＹＮパケットのサーバ１４への送信を行わない。
【００３８】
そしてその後、アプリケーションプログラムにて送信関数の呼び出しが実行されると、記憶されているクッキー、及び、送信対象のデータの少なくとも一部を構成するパケットを含むＳＹＮパケットをサーバに送信する。
【００３９】
その後、図２Ａと同様に、サーバ１４は、ＳＹＮパケットを正常に受信すると、ＳＹＮ＋ＡＣＫパケットをクライアント１２に送信する。そしてクライアント１２は、ＳＹＮ＋ＡＣＫパケットを正常に受信すると、ＡＣＫパケットをサーバ１４に送信する。
【００４０】
以上のようにすることで本実施形態では、アプリケーションプログラムを改修することなく、ＴＦＯの仕様に沿った通信が可能となる。また本実施形態では、接続関数の呼び出しが実行されてからスリーウェイハンドシェイクにおける１のＲＴＴが経過する前に送信対象のデータがサーバ１４に送信されるため、通信速度が向上する。
【００４１】
以下、本実施形態に係るクライアント１２の機能及びクライアント１２において行われる処理についてさらに説明する。
【００４２】
図３は、本実施形態に係るクライアント１２で実装される機能の一例を示す機能ブロック図である。なお、本実施形態に係るクライアント１２で、図３に示す機能のすべてが実装される必要はなく、また、図３に示す機能以外の機能が実装されていても構わない。
【００４３】
図３に示すように、本実施形態に係るクライアント１２は、機能的には例えば、クッキー記憶部２０、送信タイムラグデータ記憶部２２、ラウンドトリップタイムデータ記憶部２４、アプリケーションプログラム実行部２６、遅延部２８、送信部３０、受信部３２、送信タイムラグ特定部３４、ラウンドトリップタイム特定部３６、を含んでいる。クッキー記憶部２０、送信タイムラグデータ記憶部２２、ラウンドトリップタイムデータ記憶部２４は、記憶部１２ｂを主として実装される。アプリケーションプログラム実行部２６、遅延部２８、送信タイムラグ特定部３４、ラウンドトリップタイム特定部３６は、プロセッサ１２ａを主として実装される。送信部３０、受信部３２は、通信部１２ｃを主として実装される。クライアント１２は、本実施形態において、サーバ１４へのデータの送信を制御する送信制御装置としての役割を担うこととなる。
【００４４】
以上の機能は、コンピュータであるクライアント１２にインストールされた、以上の機能に対応する指令を含むプログラムをプロセッサ１２ａで実行することにより実装されてもよい。このプログラムは、例えば、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ読み取り可能な情報記憶媒体を介して、あるいは、インターネットなどを介してクライアント１２に供給されてもよい。またこのプログラムは、クライアント１２で実行されるアプリケーションプログラムのプラットフォームであるオペレーティングシステムのプログラムとしてクライアント１２に供給されてもよい。
【００４５】
クッキー記憶部２０は、本実施形態では例えば、サーバ１４から送信される、ＲＦＣ７４１３で定義されたクッキーを記憶する。
【００４６】
送信タイムラグデータ記憶部２２は、本実施形態では例えば、送信タイムラグを示す送信タイムラグデータを記憶する。ここで送信タイムラグとは、アプリケーションプログラムにおける接続関数の呼び出しの実行のタイミングから送信関数の最初の呼び出しの実行のタイミングまでの時間を指すこととする。クライアント１２のスペックがよいほど、あるいは、クライアント１２におけるリソースの使用量が少ないほど、一般的に送信タイムラグは短くなる。例えばクライアント１２で実行されている他のアプリケーションプログラムの数が少ないほど、一般的に送信タイムラグは短くなる。本実施形態では送信タイムラグデータの値をＴｓｅｎｄと表現することとし、その初期値は例えば０であることとする。
【００４７】
ラウンドトリップタイムデータ記憶部２４は、本実施形態では例えば、ラウンドトリップタイムを示すラウンドトリップタイムデータを記憶する。ここでラウンドトリップタイムとは、スリーウェイハンドシェイクにおけるＳＹＮパケットの送信からＳＹＮ＋ＡＣＫパケットの受信までの時間を指すこととする。ラウンドトリップタイムは、クライアント１２とサーバ１４との１往復の通信に要する時間に相当する。クライアント１２とサーバ１４との間の通信環境が良好であるほどラウンドトリップタイムは短くなる。本実施形態ではラウンドトリップタイムデータの値をＴｒｔｔと表現することとし、その初期値は例えば０であることとする。
【００４８】
アプリケーションプログラム実行部２６は、本実施形態では例えば、クライアント１２にインストールされたアプリケーションプログラムを実行する。アプリケーションプログラム実行部２６は例えば、クライアント１２で実行されるアプリケーションプログラムのプラットフォームとして機能する。
【００４９】
遅延部２８は、本実施形態では例えば、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる。上述のように例えばサーバ１４から受信したクッキーがクライアント１２に記憶されている場合には、本実施形態に係る遅延部２８は、アプリケーションプログラムにて接続関数の呼び出しが実行されても、ＳＹＮパケットのサーバ１４への送信を遅延させる。
【００５０】
送信部３０は、本実施形態では例えば、送信対象のデータを構成するパケットを含む各種のパケットをサーバ１４に送信する。
【００５１】
受信部３２は、本実施形態では例えば、ＨＴＴＰリクエストに対する返信のデータを構成するパケットなどのパケットをサーバ１４から受信する。
【００５２】
送信タイムラグ特定部３４は、本実施形態では例えば、上述の送信タイムラグを特定する。送信タイムラグ特定部３４は、例えば、上述の送信タイムラグを計測して、送信タイムラグデータ記憶部２２に記憶されている送信タイムラグデータの値Ｔｓｅｎｄを、計測された時間を示す値に更新する。
【００５３】
ラウンドトリップタイム特定部３６は、本実施形態では例えば、上述のラウンドトリップタイムを特定する。ラウンドトリップタイム特定部３６は、例えば、上述のラウンドトリップタイムを計測して、ラウンドトリップタイムデータ記憶部２４に記憶されているラウンドトリップタイムデータの値Ｔｒｔｔを、計測された時間を示す値に更新する。
【００５４】
以下、本実施形態に係るクライアント１２において行われる、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたＳＹＮパケットの送信の処理の流れの一例を、図４に例示するフロー図を参照しながら説明する。
【００５５】
まず、遅延部２８が、ラウンドトリップタイムデータ記憶部２４に記憶されているラウンドトリップタイムデータの値Ｔｒｔｔと、送信タイムラグデータ記憶部２２に記憶されている送信タイムラグデータの値Ｔｓｅｎｄと、を比較する（Ｓ１０１）。
【００５６】
ここで値Ｔｒｔｔが値Ｔｓｅｎｄよりも大きい場合は、遅延部２８は、現在から値Ｔｒｔｔが示す時間だけ後のタイミングを、遅延期限として設定する（Ｓ１０２）。この場合においては、遅延部２８は、送信部３０によるパケットの送信を遅延させることとなる。このように本処理例では、遅延部２８は、ラウンドトリップタイムが送信タイムラグよりも長い場合に、接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる。また本処理例では最大で、接続関数の呼び出しの実行タイミングからラウンドトリップタイムが経過するまでＳＹＮパケットの送信は遅延されることとなる。
【００５７】
そして、遅延部２８は、アプリケーションプログラムにおける送信関数の呼び出しの実行の監視（Ｓ１０３）、及び、遅延期限の到来の監視を行う（Ｓ１０４）。
【００５８】
ここで送信関数の呼び出しが実行されると、遅延部２８は遅延期限をキャンセルする（Ｓ１０５）。
【００５９】
そして、送信部３０は、送信対象のデータの少なくとも一部、及び、クッキー記憶部２０に記憶されているクッキーを含むＳＹＮパケットをサーバに送信する（Ｓ１０６）。このように本処理例では、送信部３０は、ＳＹＮパケットの送信が遅延されている期間にアプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する。そして本処理例に示す処理は終了される。
【００６０】
一方、Ｓ１０１に示す処理で値Ｔｒｔｔが値Ｔｓｅｎｄ以下であることが確認された場合、及び、Ｓ１０４に示す処理で遅延期限が到来したことが確認された場合は、送信部３０が、ＴＦＯ有効オプションを含むＳＹＮパケットをサーバ１４に送信する（Ｓ１０７）。そして本処理例に示す処理は終了される。
【００６１】
図４に示す処理例では、遅延部２８は、Ｓ１０１に示すように、ラウンドトリップタイムと送信タイムラグとの比較結果に応じて、接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かを制御する。
【００６２】
ラウンドトリップタイムが送信タイムラグよりも長い場合は、送信関数の呼び出しがＳＹＮ＋ＡＣＫパケットの受信までに実行される可能性が高い。この場合、図４の処理例では、遅延部２８が、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させる。そして送信部３０が、アプリケーションプログラムにおける送信関数の呼び出しの実行に応じて、送信対象のデータを含むＳＹＮパケットを送信する（図２Ｂ参照）。そのためこの場合は、スリーウェイハンドシェイクの後にデータ送信が行われる場合（図２Ａ参照）よりも、早いタイミングで送信対象のデータが送信されることとなる。
【００６３】
一方、ラウンドトリップタイムが送信タイムラグよりも長くない場合は、送信関数の呼び出しがＳＹＮ＋ＡＣＫパケットの受信までに実行されない可能性が高い。この場合、送信関数の呼び出しが実行されない状態で遅延期限が到来する可能性が高いので、図４の処理例では、遅延部２８は、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたＳＹＮパケットの送信の遅延を制限する。そして送信部３０は、接続関数の呼び出しに応じて直ちにＳＹＮパケットを送信する。そのためこの場合は、接続関数の呼び出しの実行に応じたＳＹＮパケットの送信が遅延される場合よりも早いタイミングで送信対象のデータが送信されることとなる。
【００６４】
そして本実施形態では、Ｓ１０７に示す処理の後に、受信部３２がクッキーを含むＳＹＮ＋ＡＣＫパケットをサーバ１４から受信すると、送信部３０がＡＣＫパケットを送信する（図２Ａ参照）。そして送信部３０は、以後、サーバ１４への送信対象のデータを構成する１又は複数のパケットをサーバ１４に送信する。また受信部３２は、受信したクッキーをクッキー記憶部２０に記憶させる。
【００６５】
また本実施形態では、Ｓ１０６に示す処理の後に、受信部３２がＳＹＮ＋ＡＣＫパケットをサーバ１４から受信すると、送信部３０がＡＣＫパケットをサーバ１４に送信する（図２Ｂ参照）。
【００６６】
そして本実施形態では図４に示す処理と独立して、送信タイムラグ特定部３４が、アプリケーションプログラムにおける接続関数の呼び出しの実行のタイミング、及び、送信関数の最初の呼び出しの実行のタイミングを監視する。そして送信関数の最初の呼び出しが実行されると、送信タイムラグ特定部３４は、送信タイムラグを計測して、送信タイムラグデータ記憶部２２に記憶されている送信タイムラグデータの値Ｔｓｅｎｄの値を、計測結果に応じた値に更新する。
【００６７】
また本実施形態では図４に示す処理と独立して、ラウンドトリップタイム特定部３６が、ＳＹＮパケットの送信タイミング、及び、ＳＹＮ＋ＡＣＫパケットの受信タイミングを監視する。ここでＳＹＮ＋ＡＣＫパケットが受信されると、ラウンドトリップタイム特定部３６は、ラウンドトリップタイムを計測する。そしてラウンドトリップタイム特定部３６は、ラウンドトリップタイムデータ記憶部２４に記憶されているラウンドトリップタイムデータの値Ｔｒｔｔの値を、計測結果に応じた値に更新する。
【００６８】
なお、本発明は上述の実施形態に限定されるものではない。
【００６９】
例えば通信システム１０に複数のサーバ１４が含まれることが想定される。この場合に、クッキー記憶部２０は、サーバ１４のＩＰアドレスなどといったサーバ１４の識別情報に関連付けて、当該サーバ１４から受信したクッキーを記憶してもよい。あるいはクッキー記憶部２０が、サーバ１４のＩＰアドレスとポート番号との組合せ、すなわち、クッキーの送信元のソケットの識別情報に関連付けて、当該サーバ１４から受信したクッキーを記憶してもよい。あるいはクッキー記憶部２０が、サーバ１４のＩＰアドレスとポート番号、及び、クライアント１２で接続関数や送信関数を実行するアプリケーションプログラムの識別子の組合せに関連付けて、当該サーバ１４から受信したクッキーを記憶してもよい。
【００７０】
また同様に、ラウンドトリップタイムデータや送信タイムラグデータが、通信相手となるサーバ１４毎、あるいは、クライアント１２のソケットと接続されるサーバ１４のソケット毎に管理されてもよい。そしてサーバ１４毎あるいはソケット毎に接続関数の呼び出しの実行に応じたＳＹＮパケットの送信を遅延させるか否かが制御されてもよい。
【００７１】
また例えば、ラウンドトリップタイムデータ記憶部２４が、サーバ１４の識別情報に関連付けて、当該サーバ１４との通信において計測されたラウンドトリップタイムを示すラウンドトリップタイムデータを記憶してもよい。またラウンドトリップタイムデータ記憶部２４が、クライアント１２のソケットと接続されるサーバ１４のソケットの識別情報に関連付けて、当該ソケットとの通信において計測されたラウンドトリップタイムを示すラウンドトリップタイムデータを記憶してもよい。
【００７２】
また例えば、送信タイムラグデータ記憶部２２が、サーバ１４の識別情報に関連付けて、当該サーバ１４との通信の際に計測された送信タイムラグを示す送信タイムラグデータを記憶してもよい。あるいは送信タイムラグデータ記憶部２２が、クライアント１２のソケットと接続されるサーバ１４のソケットの識別情報に関連付けて、当該ソケットとの通信の際に計測された送信タイムラグを示す送信タイムラグデータを記憶してもよい。
【００７３】
そして遅延部２８は例えば、複数のサーバ１４のそれぞれについて、当該サーバ１４との接続を確立するためのスリーウェイハンドシェイクにおけるＳＹＮパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部２８は例えば、当該サーバ１４との通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてＳＹＮパケットの送信を遅延させるか否かを制御してもよい。
【００７４】
また遅延部２８は例えば、複数のソケットのそれぞれについて、当該ソケットとの接続を確立するためのスリーウェイハンドシェイクにおけるＳＹＮパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部２８は例えば、当該ソケットとの通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてＳＹＮパケットの送信を遅延させるか否かを制御してもよい。
【００７５】
また遅延部２８は例えば、サーバ１４と通信する複数のアプリケーションプログラムのそれぞれについて、サーバ１４との接続を確立するためのスリーウェイハンドシェイクにおけるＳＹＮパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部２８は例えば、当該アプリケーションでの通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてＳＹＮパケットの送信を遅延させるか否かを制御してもよい。
【００７６】
また例えば、Ｓ１０５に示す処理で遅延期限が到来した回数が所定数に達した場合は、以後、送信部３０が、ＴＦＯ有効オプションを含まないＳＹＮパケットをサーバ１４に送信してもよい。また、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じて、送信部３０が、図４に示す処理を実行することなく、ＴＦＯ有効オプションを含まないＳＹＮパケットをサーバ１４に送信してもよい。
【００７７】
なお本発明の適用範囲はＨＴＴＰ通信に限定されず、ＨＴＴＰ以外のアプリケーションプロトコルでの通信に本発明を適用してもよい。
【符号の説明】
【００７８】
１０  通信システム、１２  クライアント、１２ａ  プロセッサ、１２ｂ  記憶部、１２ｃ  通信部、１２ｄ  出力部、１２ｅ  入力部、１４  サーバ、１６  コンピュータネットワーク、２０  クッキー記憶部、２２  送信タイムラグデータ記憶部、２４  ラウンドトリップタイムデータ記憶部、２６  アプリケーションプログラム実行部、２８  遅延部、３０  送信部、３２  受信部、３４  送信タイムラグ特定部、３６  ラウンドトリップタイム特定部。
【図１】
2018019161.tif 000003
【図２Ａ】
2018019161.tif 000004
【図２Ｂ】
2018019161.tif 000005
【図３】
2018019161.tif 000006
【図４】
2018019161.tif 000007