特許第6412529号(P6412529)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソニー・コンピュータエンタテインメントの特許一覧

特許6412529送信制御装置、送信制御方法及び送信制御プログラム
<>
  • 特許6412529-送信制御装置、送信制御方法及び送信制御プログラム 図000002
  • 特許6412529-送信制御装置、送信制御方法及び送信制御プログラム 図000003
  • 特許6412529-送信制御装置、送信制御方法及び送信制御プログラム 図000004
  • 特許6412529-送信制御装置、送信制御方法及び送信制御プログラム 図000005
  • 特許6412529-送信制御装置、送信制御方法及び送信制御プログラム 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6412529
(24)【登録日】2018年10月5日
(45)【発行日】2018年10月24日
(54)【発明の名称】送信制御装置、送信制御方法及び送信制御プログラム
(51)【国際特許分類】
   H04L 29/08 20060101AFI20181015BHJP
   G06F 13/00 20060101ALI20181015BHJP
【FI】
   H04L13/00 307A
   G06F13/00 353C
【請求項の数】8
【全頁数】13
(21)【出願番号】特願2016-146120(P2016-146120)
(22)【出願日】2016年7月26日
(65)【公開番号】特開2018-19161(P2018-19161A)
(43)【公開日】2018年2月1日
【審査請求日】2017年11月16日
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】110000154
【氏名又は名称】特許業務法人はるか国際特許事務所
(72)【発明者】
【氏名】島 幸司
(72)【発明者】
【氏名】幾島 誠
【審査官】 衣鳩 文彦
(56)【参考文献】
【文献】 特開2006−203537(JP,A)
【文献】 特開2011−130000(JP,A)
【文献】 特開2009−164947(JP,A)
【文献】 特開2013−102454(JP,A)
【文献】 特開2014−183533(JP,A)
【文献】 米国特許第08595477(US,B1)
【文献】 米国特許第08117322(US,B1)
【文献】 米国特許出願公開第2014/0325064(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 29/08
G06F 13/00
(57)【特許請求の範囲】
【請求項1】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる遅延部と、
SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する送信部と、
を含むことを特徴とする送信制御装置。
【請求項2】
スリーウェイハンドシェイクにおけるSYNパケットの送信からSYN+ACKパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部と、
アプリケーションプログラムにおける前記接続関数の呼び出しの実行から前記送信関数の呼び出しの実行までの時間である送信タイムラグを特定する送信タイムラグ特定部と、をさらに含み、
前記遅延部は、前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項1に記載の送信制御装置。
【請求項3】
前記遅延部は、複数の通信装置のそれぞれについて、当該通信装置との通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該通信装置に接続するための前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項2に記載の送信制御装置。
【請求項4】
前記遅延部は、複数のソケットのそれぞれについて、当該ソケットとの通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該ソケットに接続するための前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御する、
ことを特徴とする請求項2に記載の送信制御装置。
【請求項5】
スリーウェイハンドシェイクにおけるSYNパケットの送信からSYN+ACKパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部、をさらに含み、
前記遅延部は、前記接続関数の呼び出しの実行タイミングから前記ラウンドトリップタイムが経過するまで前記SYNパケットの送信を遅延させる、
ことを特徴とする請求項1に記載の送信制御装置。
【請求項6】
SYNパケットの送信が遅延されている期間に前記送信関数の呼び出しが実行されなかった回数が所定数を超えた際には、前記送信部は、TFOが有効であることを示すTCPオプションを含まないSYNパケットを送信する、
ことを特徴とする請求項1から5のいずれか一項に記載の送信制御装置。
【請求項7】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるステップと、
SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信するステップと、
を含むことを特徴とする送信制御方法。
【請求項8】
アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる手順、
SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する手順、
をコンピュータに実行させることを特徴とする送信制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、送信制御装置、送信制御方法及び送信制御プログラムに関する。
【背景技術】
【0002】
TCP(Transmission Control Protocol)におけるソケット間の接続(TCPコネクション)を確立するための手順として、スリーウェイハンドシェイクと呼ばれる手順が知られている。
【0003】
スリーウェイハンドシェイクでは、例えばサーバとの通信を要求するクライアントがSYNパケットをサーバに送信する。サーバはSYNパケットを受信すると、SYN+ACKパケットをクライアントに送信する。クライアントはSYN+ACKパケットを受信すると、ACKパケット、及び、HTTPリクエストなどといった送信対象のデータをサーバに送信する。このようにして、送信対象のデータがクライアントからサーバに送信されることとなる。ここで、クライアントがSYNパケットをサーバに送信してから当該クライアントがサーバからSYN+ACKパケットを受信するまでの時間を、スリーウェイハンドシェイクにおけるラウンドトリップタイム(RTT)と呼ぶこととする。
【0004】
またスリーウェイハンドシェイクに関連するTCPにおける通信の高速化の技術の一例として、RFC(Request for Comments)7413に、TFO(TCP Fast Open)と呼ばれる技術が記載されている。
【0005】
TFOでは、スリーウェイハンドシェイクでクライアントからサーバに送信されるSYNパケットに、TFOが有効であることを示すTCPオプションが含まれる。ここで当該サーバがTFOに対応可能である場合は、当該サーバは、当該SYNパケットを受信すると、クッキーと呼ばれるデータが付与されたSYN+ACKパケットをクライアントに送信する。クライアントはSYN+ACKパケットを受信すると、ACKパケット及び送信対象のデータをサーバに送信する。
【0006】
その後、同一のソケット間の通信が再度開始される際には、クライアントは、サーバから受信済であるクッキー、及び、送信対象のデータを含むSYNパケットをサーバに送信する。このようにすることでTFOでは、クライアントがサーバからクッキーを受信すると、スリーウェイハンドシェイクにおけるSYN+ACKパケットの受信を待つことなく当該クライアントは当該サーバに送信対象のデータを送信できることとなる。その結果、スリーウェイハンドシェイクにおける1のRTTに相当する通信時間が節約されるため、通信速度が向上する。
【発明の概要】
【発明が解決しようとする課題】
【0007】
TFOの仕様に沿った通信が実装されていないアプリケーションプログラムにおいてTFOの仕様に沿った通信を可能にするための一手法として、例えばTFOの仕様に沿うようアプリケーションプログラムを改修することが考えられる。例えばRFC7413には、TFOの仕様に沿った通信を実装するための一手法が示されている。
【0008】
しかしTFOの仕様に沿うようアプリケーションプログラムを改修するとなると、改修すべき箇所をすべて特定した上で、特定されたすべての箇所を改修する必要があるため手間がかかってしまう。
【0009】
本発明は上記実情に鑑みてなされたものであって、その目的の一つは、アプリケーションプログラムを改修することなくTFOの仕様に沿った通信を可能とする通信制御装置、通信制御方法及び通信制御プログラムを提供することにある。
【課題を解決するための手段】
【0010】
上記課題を解決するために、本発明に係る送信制御装置は、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる遅延部と、SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する送信部と、を含む。
【0011】
本発明の一態様では、スリーウェイハンドシェイクにおけるSYNパケットの送信からSYN+ACKパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部と、アプリケーションプログラムにおける前記接続関数の呼び出しの実行から前記送信関数の呼び出しの実行までの時間である送信タイムラグを特定する送信タイムラグ特定部と、をさらに含み、前記遅延部は、前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御する。
【0012】
この態様では、前記遅延部は、複数の通信装置のそれぞれについて、当該通信装置との通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該通信装置に接続するための前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御してもよい。
【0013】
あるいは、前記遅延部は、複数のソケットのそれぞれについて、当該ソケットとの通信における前記ラウンドトリップタイムと前記送信タイムラグとの比較結果に応じて、当該ソケットに接続するための前記接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御してもよい。
【0014】
また、本発明の一態様では、スリーウェイハンドシェイクにおけるSYNパケットの送信からSYN+ACKパケットの受信までの時間であるラウンドトリップタイムを特定するラウンドトリップタイム特定部、をさらに含み、前記遅延部は、前記接続関数の呼び出しの実行タイミングから前記ラウンドトリップタイムが経過するまで前記SYNパケットの送信を遅延させる。
【0015】
また、本発明の一態様では、SYNパケットの送信が遅延されている期間に前記送信関数の呼び出しが実行されなかった回数が所定数を超えた際には、前記送信部は、TFOが有効であることを示すTCPオプションを含まないSYNパケットを送信する。
【0016】
また、本発明に係る送信制御方法は、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるステップと、SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信するステップと、を含む。
【0017】
また、本発明に係る送信制御プログラムは、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる手順、SYNパケットの送信が遅延されている期間に前記アプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する手順、をコンピュータに実行させる。
【図面の簡単な説明】
【0018】
図1】本発明の一実施形態に係る通信システムの全体構成の一例を示す図である。
図2A】クライアントからサーバへのデータ送信の一例を説明する説明図である。
図2B】クライアントからサーバへのデータ送信の別の一例を説明する説明図である。
図3】本発明の一実施形態に係るクライアントで実装される機能の一例を示す機能ブロック図である。
図4】本発明の一実施形態に係るクライアントにおいて行われる処理の流れの一例を示すフロー図である。
【発明を実施するための形態】
【0019】
以下、本発明の一実施形態について、図面を参照しながら説明する。
【0020】
図1は、本発明の一実施形態に係る通信システム10の全体構成の一例を示す図である。図1に示すように、本実施形態に係る通信システム10には、クライアント12と、サーバ14とが含まれる。クライアント12とサーバ14とは、例えばインターネットなどのコンピュータネットワーク16を介して互いに通信可能となっている。
【0021】
本実施形態に係るサーバ14は、例えばウェブサーバであり、クライアント12から要求されたデータをクライアント12に送信する。
【0022】
本実施形態に係るクライアント12は、例えばゲームコンソール、スマートフォン、携帯電話、パーソナルコンピュータ等のコンピュータである。
【0023】
図1に示すように、本実施形態に係るクライアント12には、例えば、プロセッサ12a、記憶部12b、通信部12c、出力部12d、入力部12eが含まれる。プロセッサ12aは、例えばクライアント12にインストールされるプログラムに従って動作するCPU等のプログラム制御デバイスである。記憶部12bは、例えばROMやRAM等の記憶素子やハードディスクドライブなどである。記憶部12bには、プロセッサ12aによって実行されるプログラムなどが記憶される。通信部12cは、例えばイーサネット(登録商標)モジュールや無線LANモジュールなどの通信インタフェースである。出力部12dは、例えばプロセッサ12aから入力される指示に従って情報を表示出力するディスプレイ等の表示部や音声出力するスピーカ等の音声出力部である。入力部12eは、例えばユーザが行った操作の内容をプロセッサ12aに出力するゲームコントローラ、タッチパッド、マウス、キーボード、マイク等である。
【0024】
また本実施形態に係るクライアント12では、例えばクライアント12が備えるハードウェアタイマ、又は、クライアント12にインストールされたソフトウェアタイマにより、あるタイミングから別のタイミングまでの時間が計測できるようになっている。
【0025】
また本実施形態に係るクライアント12には、アプリケーションプログラム、及び、当該アプリケーションプログラムのプラットフォームソフトウェアとして動作するオペレーティングシステムがインストールされている。
【0026】
本実施形態では例えば、クライアント12にインストールされているアプリケーションソフトウェアにおいて、サーバ14に記憶されているコンテンツを要求する機能が実装されている。サーバ14へのコンテンツの要求に先立って、スリーウェイハンドシェイクによりクライアント12のソケットとサーバ14のソケットとの間の通信が確立される。
【0027】
この場合、一般的なアプリケーションソフトウェアにおいては、connect()関数などといった、サーバ14に接続するための接続関数が呼び出された後で、send()関数やwrite()関数などといった、サーバ14へのデータ送信のための送信関数が呼び出される。サーバ14に送信されるHTTPリクエストのデータなどは、例えば送信関数のパラメータとして設定される。なおこれらの関数は例えば標準ソケットAPIの関数であり、また、システムコールであってもライブラリ関数であっても構わない。
【0028】
ここで本実施形態に係るクライアント12からサーバ14へのデータ送信につき、図2A及び図2Bを参照しながら説明する。
【0029】
図2Aは、クライアント12からサーバ14へのデータ送信の一例を説明する説明図である。
【0030】
図2Aに示すように本実施形態に係るクライアント12は、アプリケーションプログラムにて接続関数の呼び出しが実行されると、サーバ14との間でのスリーウェイハンドシェイクを開始する。すなわち、アプリケーションプログラムにて接続関数の呼び出しが実行されると、クライアント12はサーバ14にSYNパケットを送信する。このとき本実施形態では、TFO(TCP Fast Open)が有効であることを示すTCPオプション(以下、TFO有効オプションと呼ぶ。)が含まれるSYNパケットが送信される。
【0031】
そしてサーバ14は、SYNパケットを正常に受信すると、SYN+ACKパケットをクライアント12に送信する。ここでサーバ14がTFOに対応したものである場合は、サーバ14は、RFC(Request for Comments)7413で定義されたクッキーを含むSYN+ACKパケットをクライアント12に送信する。
【0032】
ここで図2Aの例では、クライアント12がSYN+ACKパケットを受信するまでに、アプリケーションプログラムにて送信関数の呼び出しが実行されていることとする。またクライアント12の送信ソケットバッファに送信対象のデータが記憶されていることとする。
【0033】
そしてクライアント12は、SYN+ACKパケットを正常に受信すると、ACKパケットをサーバ14に送信し、以後、サーバ14への送信対象のデータを構成する1又は複数のパケットをサーバ14に送信する。上述のように図2Aの例では、クライアント12がSYN+ACKパケットを受信するまでに、アプリケーションプログラムにて送信関数の呼び出しが実行されている。そのためクライアント12は、ACKパケットをサーバ14に送信したタイミングにおけるサーバ14への送信対象のデータの送信は可能である。
【0034】
ここでサーバ14から送信されたSYN+ACKパケットにクッキーが含まれている場合は、クライアント12は当該クッキーを記憶する。
【0035】
サーバ14は、例えばHTTPリクエストなどの要求である送信対象のデータをクライアント12から受け付けると、要求に応じたデータをクライアント12に送信する。
【0036】
図2Bは、クライアント12からサーバ14へのデータ送信の別の一例を説明する説明図である。図2Bに例示するデータ送信は、例えば図2Aに例示するデータ送信が行われた後にクライアント12とサーバ14との間で別のTCPコネクションが確立される際に行われる。また図2Bに例示するデータ送信は、例えばクライアント12とサーバ14との間で確立されたTCPコネクションが切断された後に再度TCPコネクションが確立される際に行われる。
【0037】
図2Bに示すように、サーバ14から受信したクッキーが記憶されたクライアント12は、アプリケーションプログラムにて接続関数の呼び出しが実行されても、SYNパケットのサーバ14への送信を行わない。
【0038】
そしてその後、アプリケーションプログラムにて送信関数の呼び出しが実行されると、記憶されているクッキー、及び、送信対象のデータの少なくとも一部を構成するパケットを含むSYNパケットをサーバに送信する。
【0039】
その後、図2Aと同様に、サーバ14は、SYNパケットを正常に受信すると、SYN+ACKパケットをクライアント12に送信する。そしてクライアント12は、SYN+ACKパケットを正常に受信すると、ACKパケットをサーバ14に送信する。
【0040】
以上のようにすることで本実施形態では、アプリケーションプログラムを改修することなく、TFOの仕様に沿った通信が可能となる。また本実施形態では、接続関数の呼び出しが実行されてからスリーウェイハンドシェイクにおける1のRTTが経過する前に送信対象のデータがサーバ14に送信されるため、通信速度が向上する。
【0041】
以下、本実施形態に係るクライアント12の機能及びクライアント12において行われる処理についてさらに説明する。
【0042】
図3は、本実施形態に係るクライアント12で実装される機能の一例を示す機能ブロック図である。なお、本実施形態に係るクライアント12で、図3に示す機能のすべてが実装される必要はなく、また、図3に示す機能以外の機能が実装されていても構わない。
【0043】
図3に示すように、本実施形態に係るクライアント12は、機能的には例えば、クッキー記憶部20、送信タイムラグデータ記憶部22、ラウンドトリップタイムデータ記憶部24、アプリケーションプログラム実行部26、遅延部28、送信部30、受信部32、送信タイムラグ特定部34、ラウンドトリップタイム特定部36、を含んでいる。クッキー記憶部20、送信タイムラグデータ記憶部22、ラウンドトリップタイムデータ記憶部24は、記憶部12bを主として実装される。アプリケーションプログラム実行部26、遅延部28、送信タイムラグ特定部34、ラウンドトリップタイム特定部36は、プロセッサ12aを主として実装される。送信部30、受信部32は、通信部12cを主として実装される。クライアント12は、本実施形態において、サーバ14へのデータの送信を制御する送信制御装置としての役割を担うこととなる。
【0044】
以上の機能は、コンピュータであるクライアント12にインストールされた、以上の機能に対応する指令を含むプログラムをプロセッサ12aで実行することにより実装されてもよい。このプログラムは、例えば、光ディスク、磁気ディスク、磁気テープ、光磁気ディスク、フラッシュメモリ等のコンピュータ読み取り可能な情報記憶媒体を介して、あるいは、インターネットなどを介してクライアント12に供給されてもよい。またこのプログラムは、クライアント12で実行されるアプリケーションプログラムのプラットフォームであるオペレーティングシステムのプログラムとしてクライアント12に供給されてもよい。
【0045】
クッキー記憶部20は、本実施形態では例えば、サーバ14から送信される、RFC7413で定義されたクッキーを記憶する。
【0046】
送信タイムラグデータ記憶部22は、本実施形態では例えば、送信タイムラグを示す送信タイムラグデータを記憶する。ここで送信タイムラグとは、アプリケーションプログラムにおける接続関数の呼び出しの実行のタイミングから送信関数の最初の呼び出しの実行のタイミングまでの時間を指すこととする。クライアント12のスペックがよいほど、あるいは、クライアント12におけるリソースの使用量が少ないほど、一般的に送信タイムラグは短くなる。例えばクライアント12で実行されている他のアプリケーションプログラムの数が少ないほど、一般的に送信タイムラグは短くなる。本実施形態では送信タイムラグデータの値をTsendと表現することとし、その初期値は例えば0であることとする。
【0047】
ラウンドトリップタイムデータ記憶部24は、本実施形態では例えば、ラウンドトリップタイムを示すラウンドトリップタイムデータを記憶する。ここでラウンドトリップタイムとは、スリーウェイハンドシェイクにおけるSYNパケットの送信からSYN+ACKパケットの受信までの時間を指すこととする。ラウンドトリップタイムは、クライアント12とサーバ14との1往復の通信に要する時間に相当する。クライアント12とサーバ14との間の通信環境が良好であるほどラウンドトリップタイムは短くなる。本実施形態ではラウンドトリップタイムデータの値をTrttと表現することとし、その初期値は例えば0であることとする。
【0048】
アプリケーションプログラム実行部26は、本実施形態では例えば、クライアント12にインストールされたアプリケーションプログラムを実行する。アプリケーションプログラム実行部26は例えば、クライアント12で実行されるアプリケーションプログラムのプラットフォームとして機能する。
【0049】
遅延部28は、本実施形態では例えば、アプリケーションプログラムが接続関数の呼び出しを実行した際に、当該接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる。上述のように例えばサーバ14から受信したクッキーがクライアント12に記憶されている場合には、本実施形態に係る遅延部28は、アプリケーションプログラムにて接続関数の呼び出しが実行されても、SYNパケットのサーバ14への送信を遅延させる。
【0050】
送信部30は、本実施形態では例えば、送信対象のデータを構成するパケットを含む各種のパケットをサーバ14に送信する。
【0051】
受信部32は、本実施形態では例えば、HTTPリクエストに対する返信のデータを構成するパケットなどのパケットをサーバ14から受信する。
【0052】
送信タイムラグ特定部34は、本実施形態では例えば、上述の送信タイムラグを特定する。送信タイムラグ特定部34は、例えば、上述の送信タイムラグを計測して、送信タイムラグデータ記憶部22に記憶されている送信タイムラグデータの値Tsendを、計測された時間を示す値に更新する。
【0053】
ラウンドトリップタイム特定部36は、本実施形態では例えば、上述のラウンドトリップタイムを特定する。ラウンドトリップタイム特定部36は、例えば、上述のラウンドトリップタイムを計測して、ラウンドトリップタイムデータ記憶部24に記憶されているラウンドトリップタイムデータの値Trttを、計測された時間を示す値に更新する。
【0054】
以下、本実施形態に係るクライアント12において行われる、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたSYNパケットの送信の処理の流れの一例を、図4に例示するフロー図を参照しながら説明する。
【0055】
まず、遅延部28が、ラウンドトリップタイムデータ記憶部24に記憶されているラウンドトリップタイムデータの値Trttと、送信タイムラグデータ記憶部22に記憶されている送信タイムラグデータの値Tsendと、を比較する(S101)。
【0056】
ここで値Trttが値Tsendよりも大きい場合は、遅延部28は、現在から値Trttが示す時間だけ後のタイミングを、遅延期限として設定する(S102)。この場合においては、遅延部28は、送信部30によるパケットの送信を遅延させることとなる。このように本処理例では、遅延部28は、ラウンドトリップタイムが送信タイムラグよりも長い場合に、接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる。また本処理例では最大で、接続関数の呼び出しの実行タイミングからラウンドトリップタイムが経過するまでSYNパケットの送信は遅延されることとなる。
【0057】
そして、遅延部28は、アプリケーションプログラムにおける送信関数の呼び出しの実行の監視(S103)、及び、遅延期限の到来の監視を行う(S104)。
【0058】
ここで送信関数の呼び出しが実行されると、遅延部28は遅延期限をキャンセルする(S105)。
【0059】
そして、送信部30は、送信対象のデータの少なくとも一部、及び、クッキー記憶部20に記憶されているクッキーを含むSYNパケットをサーバに送信する(S106)。このように本処理例では、送信部30は、SYNパケットの送信が遅延されている期間にアプリケーションプログラムが送信関数の呼び出しを実行した際に、当該送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する。そして本処理例に示す処理は終了される。
【0060】
一方、S101に示す処理で値Trttが値Tsend以下であることが確認された場合、及び、S104に示す処理で遅延期限が到来したことが確認された場合は、送信部30が、TFO有効オプションを含むSYNパケットをサーバ14に送信する(S107)。そして本処理例に示す処理は終了される。
【0061】
図4に示す処理例では、遅延部28は、S101に示すように、ラウンドトリップタイムと送信タイムラグとの比較結果に応じて、接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かを制御する。
【0062】
ラウンドトリップタイムが送信タイムラグよりも長い場合は、送信関数の呼び出しがSYN+ACKパケットの受信までに実行される可能性が高い。この場合、図4の処理例では、遅延部28が、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させる。そして送信部30が、アプリケーションプログラムにおける送信関数の呼び出しの実行に応じて、送信対象のデータを含むSYNパケットを送信する(図2B参照)。そのためこの場合は、スリーウェイハンドシェイクの後にデータ送信が行われる場合(図2A参照)よりも、早いタイミングで送信対象のデータが送信されることとなる。
【0063】
一方、ラウンドトリップタイムが送信タイムラグよりも長くない場合は、送信関数の呼び出しがSYN+ACKパケットの受信までに実行されない可能性が高い。この場合、送信関数の呼び出しが実行されない状態で遅延期限が到来する可能性が高いので、図4の処理例では、遅延部28は、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じたSYNパケットの送信の遅延を制限する。そして送信部30は、接続関数の呼び出しに応じて直ちにSYNパケットを送信する。そのためこの場合は、接続関数の呼び出しの実行に応じたSYNパケットの送信が遅延される場合よりも早いタイミングで送信対象のデータが送信されることとなる。
【0064】
そして本実施形態では、S107に示す処理の後に、受信部32がクッキーを含むSYN+ACKパケットをサーバ14から受信すると、送信部30がACKパケットを送信する(図2A参照)。そして送信部30は、以後、サーバ14への送信対象のデータを構成する1又は複数のパケットをサーバ14に送信する。また受信部32は、受信したクッキーをクッキー記憶部20に記憶させる。
【0065】
また本実施形態では、S106に示す処理の後に、受信部32がSYN+ACKパケットをサーバ14から受信すると、送信部30がACKパケットをサーバ14に送信する(図2B参照)。
【0066】
そして本実施形態では図4に示す処理と独立して、送信タイムラグ特定部34が、アプリケーションプログラムにおける接続関数の呼び出しの実行のタイミング、及び、送信関数の最初の呼び出しの実行のタイミングを監視する。そして送信関数の最初の呼び出しが実行されると、送信タイムラグ特定部34は、送信タイムラグを計測して、送信タイムラグデータ記憶部22に記憶されている送信タイムラグデータの値Tsendの値を、計測結果に応じた値に更新する。
【0067】
また本実施形態では図4に示す処理と独立して、ラウンドトリップタイム特定部36が、SYNパケットの送信タイミング、及び、SYN+ACKパケットの受信タイミングを監視する。ここでSYN+ACKパケットが受信されると、ラウンドトリップタイム特定部36は、ラウンドトリップタイムを計測する。そしてラウンドトリップタイム特定部36は、ラウンドトリップタイムデータ記憶部24に記憶されているラウンドトリップタイムデータの値Trttの値を、計測結果に応じた値に更新する。
【0068】
なお、本発明は上述の実施形態に限定されるものではない。
【0069】
例えば通信システム10に複数のサーバ14が含まれることが想定される。この場合に、クッキー記憶部20は、サーバ14のIPアドレスなどといったサーバ14の識別情報に関連付けて、当該サーバ14から受信したクッキーを記憶してもよい。あるいはクッキー記憶部20が、サーバ14のIPアドレスとポート番号との組合せ、すなわち、クッキーの送信元のソケットの識別情報に関連付けて、当該サーバ14から受信したクッキーを記憶してもよい。あるいはクッキー記憶部20が、サーバ14のIPアドレスとポート番号、及び、クライアント12で接続関数や送信関数を実行するアプリケーションプログラムの識別子の組合せに関連付けて、当該サーバ14から受信したクッキーを記憶してもよい。
【0070】
また同様に、ラウンドトリップタイムデータや送信タイムラグデータが、通信相手となるサーバ14毎、あるいは、クライアント12のソケットと接続されるサーバ14のソケット毎に管理されてもよい。そしてサーバ14毎あるいはソケット毎に接続関数の呼び出しの実行に応じたSYNパケットの送信を遅延させるか否かが制御されてもよい。
【0071】
また例えば、ラウンドトリップタイムデータ記憶部24が、サーバ14の識別情報に関連付けて、当該サーバ14との通信において計測されたラウンドトリップタイムを示すラウンドトリップタイムデータを記憶してもよい。またラウンドトリップタイムデータ記憶部24が、クライアント12のソケットと接続されるサーバ14のソケットの識別情報に関連付けて、当該ソケットとの通信において計測されたラウンドトリップタイムを示すラウンドトリップタイムデータを記憶してもよい。
【0072】
また例えば、送信タイムラグデータ記憶部22が、サーバ14の識別情報に関連付けて、当該サーバ14との通信の際に計測された送信タイムラグを示す送信タイムラグデータを記憶してもよい。あるいは送信タイムラグデータ記憶部22が、クライアント12のソケットと接続されるサーバ14のソケットの識別情報に関連付けて、当該ソケットとの通信の際に計測された送信タイムラグを示す送信タイムラグデータを記憶してもよい。
【0073】
そして遅延部28は例えば、複数のサーバ14のそれぞれについて、当該サーバ14との接続を確立するためのスリーウェイハンドシェイクにおけるSYNパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部28は例えば、当該サーバ14との通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてSYNパケットの送信を遅延させるか否かを制御してもよい。
【0074】
また遅延部28は例えば、複数のソケットのそれぞれについて、当該ソケットとの接続を確立するためのスリーウェイハンドシェイクにおけるSYNパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部28は例えば、当該ソケットとの通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてSYNパケットの送信を遅延させるか否かを制御してもよい。
【0075】
また遅延部28は例えば、サーバ14と通信する複数のアプリケーションプログラムのそれぞれについて、サーバ14との接続を確立するためのスリーウェイハンドシェイクにおけるSYNパケットの送信を遅延させるか否かを制御してもよい。ここで遅延部28は例えば、当該アプリケーションでの通信におけるラウンドトリップタイムと送信タイムラグとの比較結果に応じてSYNパケットの送信を遅延させるか否かを制御してもよい。
【0076】
また例えば、S105に示す処理で遅延期限が到来した回数が所定数に達した場合は、以後、送信部30が、TFO有効オプションを含まないSYNパケットをサーバ14に送信してもよい。また、アプリケーションプログラムにおける接続関数の呼び出しの実行に応じて、送信部30が、図4に示す処理を実行することなく、TFO有効オプションを含まないSYNパケットをサーバ14に送信してもよい。
【0077】
なお本発明の適用範囲はHTTP通信に限定されず、HTTP以外のアプリケーションプロトコルでの通信に本発明を適用してもよい。
【符号の説明】
【0078】
10 通信システム、12 クライアント、12a プロセッサ、12b 記憶部、12c 通信部、12d 出力部、12e 入力部、14 サーバ、16 コンピュータネットワーク、20 クッキー記憶部、22 送信タイムラグデータ記憶部、24 ラウンドトリップタイムデータ記憶部、26 アプリケーションプログラム実行部、28 遅延部、30 送信部、32 受信部、34 送信タイムラグ特定部、36 ラウンドトリップタイム特定部。
図1
図2A
図2B
図3
図4