(57)【要約】本発明は、クライアント上の加速プログラムを動的に展開し、実行して、リモートアクセスされたアプリケーションの性能およびデリバリを向上させるためのシステムおよび方法を対象にする。本発明の加速プログラムは、クライアントの動作で、トランスペアレントかつシームレスな方法で、クライアント上に自動的にインストールされて、実行される。一部の実施形態において、サーバまたはリモートアプリケーションへのクライアントのアクセスが加速され得ると、機器デバイスによって判断されると、加速プログラムがクライアントに動的に提供される。一部の実施形態において、加速プログラムは、１）マルチプロトコル圧縮、２）転送制御プロトコルプーリング、３）転送制御プロトコル多重化、４）転送制御プロトコルバッファリング、および５）キャッシングのうちの一つ以上をクライアント上で実行する。
2008527507.tif 000002
【特許請求の範囲】
【請求項１】
加速プログラムをクライアントに動的に提供して、自動的にインストールし、実行するための方法であって、該加速プログラムは、リモートアクセスされたアプリケーションへの該クライアントによるアクセスを加速し、該方法は、
（ａ）サーバとの通信セッションを確立したいという、クライアントによる要求を機器によって受信するステップと、
（ｂ）該サーバ経由で提供されるアプリケーションへのクライアントのアクセスの加速を該クライアント上で実行するために、ネットワークドライバを備える加速プログラムを該クライアントに、該機器によって送信するステップと、
（ｃ）該加速プログラムを受信すると、該クライアントによって、該クライアントのストレージに、該ネットワークドライバの静かなインストールを自動的に実行するステップと、
（ｄ）該ネットワークドライバがインストールされると、該クライアントによって、該クライアントの該ネットワークスタックに割り当てられたメモリ内の該ネットワークドライバを自動的に実行する、ステップと
を包含する、方法。
【請求項２】
前記サーバと前記通信セッションが確立すると、前記加速プログラムを前記クライアントに、前記機器によって送信するステップを包含する、請求項１に記載の方法。
【請求項３】
前記加速プログラムによって、前記サーバと前記通信セッションを確立するステップを包含する、請求項１に記載の方法。
【請求項４】
前記クライアントの再起動、または該クライアントのユーザによる相互作用のうちの一つをすることなく、前記加速プログラムを該クライアント上にインストールするステップを包含する、請求項１に記載の方法。
【請求項５】
ステップ（ｂ）、ステップ（ｃ）、またはステップ（ｄ）のうちの一つは、前記クライアント上で、該クライアントのユーザ、該クライアントのアプリケーション、または前記サーバのうちの一つにはトランスペアレントに実行される、請求項１に記載の方法。
【請求項６】
前記ネットワークドライバは、前記ネットワークスタックのトランスポート層に、インタフェースされたフィルタデバイスドライバを備える、請求項１に記載の方法。
【請求項７】
前記加速プログラムは、該サーバ上のアプリケーションに、クライアント側で加速されたアクセスを、前記ネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに提供する、請求項１に記載の方法。
【請求項８】
前記機器によって、前記加速プログラムを備える第一のプログラムを前記クライアントに送信するステップを包含する、請求項１に記載の方法。
【請求項９】
前記第一のプログラムを受信すると、前記クライアントによって、該第一のプログラムを自動的に実行し、前記加速プログラムをインストールして、実行するステップを包含する、請求項８に記載の方法。
【請求項１０】
前記第一のプログラムは、ブラウザに提供され、該ブラウザ上で実行される実行可能な命令を備える、請求項８に記載の方法。
【請求項１１】
（ｅ）前記サーバ上のアプリケーションにアクセスしたいという、前記クライアントからの要求を前記機器によって、受信するステップと、
（ｆ）該機器によって、前記加速プログラムに通信する該クライアントにメッセージを送信し、該クライアントと該サーバとの間の通信上で、少なくとも一つの加速技術を実行するステップと
を包含する、請求項１に記載の方法。
【請求項１２】
（ｇ）前記アプリケーションは、加速されることが可能であるかどうかを、前記機器によって、判断するステップと、
（ｈ）該アプリケーションが、加速されることが可能である場合、該機器によって、前記メッセージを前記クライアントに送信するステップと
を包含する、請求項１１に記載の方法。
【請求項１３】
前記加速プログラムによって、
圧縮と、
解凍と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記クライアント上で実行するステップを包含する、請求項１に記載の方法。
【請求項１４】
前記加速プログラムによって、前記クライアントと前記サーバとの間の通信の暗号化または復号化のうちの一つを実行するステップを包含する、請求項１に記載の方法。
【請求項１５】
前記ネットワークドライバによって、前記機器または前記サーバのうちの一つに仮想プライベートネットワーク接続を確立するステップを包含する、請求項１に記載の方法。
【請求項１６】
前記機器は、キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジのうちの一つを備える、請求項１に記載の方法。
【請求項１７】
加速プログラムをクライアントに動的に提供して、リモートアクセスされたアプリケーションへの該クライアントによるアクセスを加速するための方法であって、該方法は、
（ａ）サーバを経由してアプリケーションにアクセスしたいという、クライアントからの要求を、機器によって受信するステップと、
（ｂ）該アプリケーションは、加速されることが可能であると、該機器によって判断するステップと、
（ｃ）該クライアント上で、自動的にインストールして、実行するための加速プログラムを該機器によって、該クライアントに送信するステップと
を包含する、方法。
【請求項１８】
前記加速プログラムを受信すると、前記クライアントによって、該加速プログラムを自動的に実行して、インストールするステップを包含する、請求項１７に記載の方法。
【請求項１９】
前記クライアントによって、該クライアント上のアプリケーション、該クライアント上のユーザ、または前記サーバのうちの一つにはトランスペアレントに、前記加速プログラムを受信すること、インストールすること、または実行することのうちの一つのことを包含する、請求項１７に記載の方法。
【請求項２０】
前記機器によって、前記アプリケーションが、加速されることができないと判断して、前記要求を前記サーバに転送するステップを包含する、請求項１７に記載の方法。
【請求項２１】
前記機器によって、前記アプリケーションが、
圧縮と、
解凍と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つで加速されることが可能であると判断することを包含する、請求項１７に記載の方法。
【請求項２２】
前記機器によって、前記アプリケーションを加速することが可能であると判断された前記加速技術を提供するように構成された前記加速プログラムを、該機器によって送信することを包含する、請求項１９に記載の方法。
【請求項２３】
前記加速プログラムによって、前記加速技術のうちの一つを実行することを包含する、請求項１９に記載の方法。
【請求項２４】
前記加速プログラムによって、前記機器または前記サーバのうちの一つに仮想プライベートネットワークを提供することを包含する、請求項１７に記載の方法。
【請求項２５】
前記機器は、キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジのうちの一つを備える、請求項１７に記載の方法。
【請求項２６】
加速プログラムをクライアントに動的に提供して、リモートアクセスされたアプリケーションへの該クライアントによるアクセスを加速するための機器であって、該機器は、
クライアントからの要求を受信し、サーバを経由してアプリケーションにアクセスするための手段と、
該アプリケーションが、加速されることを可能であると判断するための手段と、
該クライアントに加速プログラムを送信するための手段であって、該加速プログラムは、該クライアント上で自動的にインストールされ、実行されるように構成される、手段と
を備える、機器。
【請求項２７】
前記機器によって、前記アプリケーションは、加速されることができないことを判断し、前記サーバに前記要求を転送するための手段を備える、請求項２６に記載の機器。
【請求項２８】
前記アプリケーションは、
圧縮と、
解凍と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つによって、加速されることが可能であると、前記機器によって、判断するための手段を備える、請求項２６に記載の機器。
【請求項２９】
前記アプリケーションを加速することが可能であると、前記機器によって判断された前記加速技術を提供するように構成された前記加速プログラムを、該機器によって、送信するための手段を備える、請求項２６に記載の機器。
【請求項３０】
前記加速プログラムを用いて、仮想プライベートネットワークを確立するための手段を備える、請求項２６に記載の機器。
【請求項３１】
キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジのうちの一つを備える、請求項２６に記載の機器。
【請求項３２】
サーバへの１つ以上のトランスポート層接続をクライアント上にプールすることによって、クライアントによるサーバへのアクセスを加速する方法であって、該方法は、
（ａ）第一のアプリケーションによる、サーバと第一のトランスポート層接続を確立したいという第一の要求を、クライアント上の加速プログラムによって傍受するステップと、
（ｂ）該加速プログラムと該サーバとの間のトランスポート層接続を、該加速プログラムによって確立するステップと、
（ｃ）第二のアプリケーションによる、該サーバと第二のトランスポート層接続を確立したいという第二の要求を、該加速プログラムによって傍受するステップと、
（ｅ）該確立されたトランスポート層接続を該加速プログラムによって使用し、該第二のアプリケーションのための該要求されたトランスポート層接続を提供するステップと
を包含する、方法。
【請求項３３】
前記サーバとの接続またはセッションのうちの一つを確立したいという前記クライアントからの要求を受けて、前記加速プログラムを、機器によって、該クライアントに送信するステップを包含する、請求項３２に記載の方法。
【請求項３４】
前記加速プログラムを受信すると、前記クライアントによって、該加速プログラムを自動的にインストールして、実行するステップを包含する、請求項３２に記載の方法。
【請求項３５】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層に、インタフェースされたフィルタデバイスドライバを備える、請求項３２に記載の方法。
【請求項３６】
前記加速プログラムによって、前記確立されたトランスポート層接続を経由して、前記クライアント上の複数のアプリケーションからの要求を多重化するステップを包含する、請求項３２に記載の方法。
【請求項３７】
前記加速プログラムによって、
圧縮と、
解凍と、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記クライアント上で実行するステップを包含する、請求項３２に記載の方法。
【請求項３８】
前記加速プログラムによって、前記クライアントと前記サーバとの間の通信の暗号化または復号化のうちの一つを実行するステップを包含する、請求項３２に記載の方法。
【請求項３９】
前記加速プログラムによって、リセットコマンドまたは終了コマンドを受信すると、前記第一のトランスポート層接続を閉じるステップを包含する、請求項３２に記載の方法。
【請求項４０】
前記加速プログラムによって、前記サーバと、前記第一のアプリケーションまたは前記第二のアプリケーションとの間のアイドル活動の期間の間、前記トランスポート層接続を開いたまま維持するステップを包含する、請求項３２に記載の方法。
【請求項４１】
前記加速プログラムによって、前記トランスポート層接続を開いたままに保つ命令を、前記クライアントから前記サーバへの通信に挿入するステップを包含する、請求項４０に記載の方法。
【請求項４２】
前記サーバに送信され、該サーバから確認応答されたバイト数を各アプリケーションに対して比較することによって、前記トランスポート層接続が、前記第一のアプリケーションまたは前記第二のアプリケーションのうちの一つによって現在使用されていることを、前記加速プログラムによって判断するステップを包含する、請求項３２に記載の方法。
【請求項４３】
前記トランスポート層接続が、前記第一のアプリケーションによって現在使用中であることを、前記加速プログラムによって判断するステップと、前記第二のアプリケーションによって使用するために、前記加速プログラムと前記サーバとの間の第二のトランスポート層接続を開くステップとを、ステップ（ｅ）は包含する、請求項３２に記載の方法。
【請求項４４】
前記加速プログラムと、前記サーバと通信している機器との間に、前記トランスポート層接続を確立するステップを、ステップ（ｂ）は包含する、請求項３２に記載の方法。
【請求項４５】
前記加速プログラムによって使用するための一つ以上のトランスポート層接続のプールを、前記機器によって確立するステップを包含する、請求項４４に記載の方法。
【請求項４６】
前記クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項３２に記載の方法。
【請求項４７】
前記第一のアプリケーション、前記第二のアプリケーション、または前記サーバのうちの一つにはトランスペアレントに、前記クライアントによって前記加速プログラムを実行するステップを包含する、請求項３２に記載の方法。
【請求項４８】
サーバへの１つ以上のトランスポート層接続をクライアント上にプールすることによって、クライアントによる１つ以上のサーバへのアクセスを加速化するためのシステムであって、
第一のアプリケーションによる、サーバとの第一のトランスポート層接続を確立したいという第一の要求を、該クライアントの加速プログラムによって傍受するための手段と、
該加速プログラムと該サーバとの間のトランスポート層接続を、該加速プログラムによって確立するための手段と、
第二のアプリケーションによる、該サーバとの第二のトランスポート層接続を確立したいという第二の要求を、該加速プログラムによって傍受するための手段と、
該確立されたトランスポート層接続を該加速プログラムによって使用して、該第二のアプリケーションのための該要求されたトランスポート層接続を提供するための手段と
を備える、システム。
【請求項４９】
前記クライアントによって、前記加速プログラムを、自動的にインストールし、実行するための手段を備える、請求項４８に記載のシステム。
【請求項５０】
前記サーバとの接続またはセッションのうち一つを確立したいという前記クライアントからの要求を受けて、前記加速プログラムを該クライアントに送信する機器を備える、請求項４８に記載のシステム。
【請求項５１】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層にインタフェースされたフィルタデバイスドライバを備える、請求項４８に記載のシステム。
【請求項５２】
前記加速プログラムによって、前記第二のトランスポート層接続を経由して、前記クライアント上の複数のアプリケーションからの要求を多重化するための手段を備える、請求項４８に記載のシステム。
【請求項５３】
前記加速プログラムは、
圧縮と、
解凍と、
伝送制御プロトコル（ＴＣＰ）接続多重化と、
ＴＣＰバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記クライアント上で実行する、請求項４８に記載のシステム。
【請求項５４】
前記加速プログラムは、前記クライアントと前記サーバとの間の通信の暗号化または復号化のうちの一つを実行する、請求項４８に記載のシステム。
【請求項５５】
前記加速プログラムによって、リセットコマンドまたは終了コマンドの受信を受けて、前記トランスポート層接続を閉じるための手段を備える、請求項４８に記載のシステム。
【請求項５６】
前記加速プログラムは、前記サーバと、前記第一のアプリケーションまたは前記第二のアプリケーションのうちの一つとの間のアイドル活動の期間の間、前記トランスポート層接続を開いたまま維持する、請求項４８に記載のシステム。
【請求項５７】
前記加速プログラムは、前記接続を開いたままに保つ命令を、前記クライアントから前記サーバへの通信に挿入する、請求項５６に記載のシステム。
【請求項５８】
前記サーバに送信され、該サーバから確認応答されたバイト数を各アプリケーションに対して比較することによって、前記トランスポート層接続が、前記第一のアプリケーションまたは前記第二のアプリケーションのうちの一つによって現在使用されていることを、前記加速プログラムは判断する、請求項４８に記載のシステム。
【請求項５９】
前記加速プログラムは、前記トランスポート層接続が、前記第一のアプリケーションによって現在使用中であることを判断し、前記第二のアプリケーションによって使用するために、前記加速プログラムと前記サーバとの間の第二のトランスポート層接続を開く、請求項４８に記載のシステム。
【請求項６０】
前記加速プログラムと、前記サーバと通信している機器との間に、前記第二のトランスポート層接続を確立するための手段を備える、請求項４８に記載のシステム。
【請求項６１】
前記機器は、前記加速プログラムによって使用するための一つ以上のトランスポート層接続のプールを備える、請求項４８に記載のシステム。
【請求項６２】
前記加速プログラムは、前記クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、該クライアント上で実行する、請求項４８に記載のシステム。
【請求項６３】
前記加速プログラムは、前記第一のアプリケーション、前記第二のアプリケーション、または前記サーバのうちの一つにはトランスペアレントに、前記クライアント上で実行する、請求項４８に記載のシステム。
【請求項６４】
共有されたトランスポート層接続経由の複数のアプリケーション要求を多重化することにより、サーバ上の一つ以上のアプリケーションへのクライアントによるクライアントアクセスを加速するための方法であって、該方法は、
（ａ）サーバへのアクセスという、クライアントの第一のアプリケーションによる第一の要求を、該クライアント上の加速プログラムによって傍受するステップと、
（ｂ）該第一の要求を、該加速プログラムと該サーバとの間に確立されたトランスポート層接続を経由して、該加速プログラムによって送信するステップと、
（ｃ）該サーバへのアクセスという、該クライアントの第二のアプリケーションによる第二の要求を、該加速プログラムによって傍受するステップと、
（ｄ）該第二の要求を、該第一のアプリケーションによって使用された該確立されたトランスポート層接続を経由して、該加速プログラムによって送信するステップと
を包含する、方法。
【請求項６５】
前記第一のアプリケーションの前記要求への応答を前記サーバから受信すると、前記第二の要求を前記加速プログラムによって送信するステップを包含する、請求項６４に記載の方法。
【請求項６６】
前記第一のアプリケーションが前記トランスポート層接続を現在使用していないと判断すると、前記第二の要求を前記加速プログラムによって送信するステップを包含する、請求項６４に記載の方法。
【請求項６７】
前記第一のアプリケーションによって前記サーバへ送信されたバイト数と、該サーバによって確認応答されたバイト数とを比較することによって、該第一のアプリケーションが前記トランスポート層接続を現在使用していないことを、前記加速プログラムで判断するステップを包含する、請求項６６に記載の方法。
【請求項６８】
前記クライアントと前記サーバとの間のメッセージの中のメッセージ識別子の長さをチェックすることによって、前記第一のアプリケーションがトランスポート層接続を現在使用していないことを、前記加速プログラムによって判断するステップを包含する、請求項６６に記載の方法。
【請求項６９】
前記トランスポート層接続を経由する前記クライアント上の複数のアプリケーションからの要求を、前記加速プログラムによって多重化するステップを包含する、請求項６４に記載の方法。
【請求項７０】
前記クライアントの複数のアプリケーションによって使用するための、前記サーバへの複数のトランスポート層接続を、前記加速プログラムによってプールするステップを包含する、請求項６４に記載の方法。
【請求項７１】
前記サーバとの接続を確立したいという前記クライアントからの要求を受けて、前記加速プログラムを、機器によって、該クライアントに送信するステップを包含する、請求項６４に記載の方法。
【請求項７２】
前記加速プログラムを受信すると、前記クライアントによって、該加速プログラムを自動的にインストールして、実行するステップを包含する、請求項６４に記載の方法。
【請求項７３】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層に、インタフェースされたフィルタデバイスドライバを備える、請求項６４に記載の方法。
【請求項７４】
前記加速プログラムによって、
圧縮と、
解凍と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを実行するステップを包含する、請求項６４に記載の方法。
【請求項７５】
前記加速プログラムによって、前記クライアントと前記サーバとの間の通信の暗号化または復号化のうちの一つを実行するステップを包含する、請求項６４に記載の方法。
【請求項７６】
前記加速プログラムによって、前記第一のアプリケーションおよび前記第二のアプリケーションに対するリセットコマンドまたは終了コマンドのうちの一つを受信すると、前記トランスポート層接続を閉じるステップを包含する、請求項６４に記載の方法。
【請求項７７】
前記加速プログラムと、前記サーバと通信している機器との間に、前記トランスポート層接続を確立するステップを、ステップ（ｂ）は包含する、請求項６４に記載の方法。
【請求項７８】
前記加速プログラムによって使用するための一つ以上のトランスポート層接続のプールを、前記機器によって確立するステップを包含する、請求項７７に記載の方法。
【請求項７９】
前記機器によって、一つ以上のトランスポート層接続のプールを経由して、前記加速プログラムと前記サーバとの間の複数の通信を多重化するステップを包含する、請求項７７に記載の方法。
【請求項８０】
前記クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項６４に記載の方法。
【請求項８１】
前記第一のアプリケーション、前記第二のアプリケーション、または前記サーバのうちの一つにはトランスペアレントに、前記クライアントによって前記加速プログラムを実行するステップを包含する、請求項６４に記載の方法。
【請求項８２】
共有されたトランスポート層接続を経由する複数のアプリケーション要求を多重化することによって、サーバ上の一つ以上のアプリケーションへのクライアントによるクライアントアクセスを加速するためのシステムであって、該システムは、
クライアントの第一のアプリケーションによる、サーバへアクセスしたいという第一の要求を、該クライアント上の加速プログラムによって傍受するための手段と、
該第一の要求を、該加速プログラムと該サーバとの間に確立されたトランスポート層接続経由で、該加速プログラムによって送信するための手段と、
クライアントの第二のアプリケーションによる、該サーバへアクセスしたいという第二の要求を、加速プログラムによって傍受するための手段と、
該第二の要求を、該第一のアプリケーションによって使用された該確立されたトランスポート層接続経由で、該加速プログラムによって送信するための手段と
を備える、システム。
【請求項８３】
前記第一のアプリケーションの前記要求の応答を前記サーバから受信すると、前記第二の要求を前記加速プログラムによって送信するための手段を備える、請求項８２に記載のシステム。
【請求項８４】
前記加速プログラムによって、前記第一のアプリケーションは、前記トランスポート層接続を現在使用していないと判断すると、前記第二の要求を送信するための手段を備える、請求項８２に記載のシステム。
【請求項８５】
前記第一のアプリケーションによって前記サーバへ送信されたバイト数と、該サーバによって確認応答されたバイト数とを比較することによって、該第一のアプリケーションが前記トランスポート層接続を現在使用していないことを、前記加速プログラムによって判断するための手段を備える、請求項８２に記載のシステム。
【請求項８６】
前記クライアントと前記サーバとの間のメッセージの中のメッセージ識別子の長さをチェックすることによって、前記第一のアプリケーションが前記トランスポート層接続を現在使用していないことを、前記加速プログラムによって判断するための手段を備える、請求項８５に記載のシステム。
【請求項８７】
前記トランスポート層接続経由の、前記クライアント上の複数のアプリケーションからの要求を前記加速プログラムによって多重化するための手段を備える、請求項８２に記載のシステム。
【請求項８８】
複数のアプリケーションによって使用するための、前記サーバへの複数のトランスポート層接続を、前記加速プログラムによって、プールするための手段を備える、請求項８２に記載のシステム。
【請求項８９】
前記サーバとの接続またはセッションのうち一つを確立したいという前記クライアントからの要求を受けて、前記加速プログラムを該クライアントに送信する機器を備える、請求項８２に記載のシステム。
【請求項９０】
前記加速プログラムを受信すると、前記クライアントが自動的に前記加速プログラムをインストールして、実行することを含む、請求項８９に記載のシステム。
【請求項９１】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層にインタフェースされたフィルタデバイスドライバを備える、請求項８２に記載のシステム。
【請求項９２】
前記加速プログラムは、
圧縮と、
解凍と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記クライアント上で実行する、請求項８２に記載のシステム。
【請求項９３】
前記加速プログラムは、前記クライアントと前記サーバとの間の通信の暗号化または復号化のうちの一つを実行する、請求項８２に記載のシステム。
【請求項９４】
前記加速プログラムによって、前記第一のアプリケーションおよび前記第二のアプリケーションのうちの一つに対するリセットコマンドまたは終了コマンドのうちの一つを受信すると、前記トランスポート層接続を閉じるための手段を供える、請求項８２に記載のシステム。
【請求項９５】
前記加速プログラムと、前記サーバと通信している機器との間に、前記トランスポート層接続を確立するための手段を備える、請求項８２に記載のシステム。
【請求項９６】
前記機器は、前記加速プログラムによって使用するための一つ以上のトランスポート層接続のプールを備える、請求項８２に記載のシステム。
【請求項９７】
前記機器は、前記一つ以上のトランスポート層接続のプール経由で、前記加速プログラムと前記サーバとの間の複数の通信を多重化する、請求項８２に記載のシステム。
【請求項９８】
前記クライアントは、該クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項８２に記載のシステム。
【請求項９９】
前記クライアントは、前記第一のアプリケーション、前記第二のアプリケーション、または前記サーバのうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項８２に記載のシステム。
【請求項１００】
サーバから受信した応答の消費速度と、該サーバへ送信した要求の産出速度との差異をクライアント上で管理するための方法であって、該方法は、
（ａ）該クライアント上の加速プログラムによって、サーバにアクセスしたいというアプリケーションによる要求を傍受するステップであって、該加速プログラムは、トランスポート層接続経由で、該アプリケーションの代わりに該サーバと通信する、ステップと、
（ｂ）受信したサーバ応答の消費速度と、該クライアントによって送信された要求の産出速度との差異が、所定の閾値を下回ることを該加速プログラムによって判断するステップと、
（ｃ）該加速プログラムによって、該要求を該クライアントのメモリエレメントに格納するステップと
を包含する、方法。
【請求項１０１】
前記消費速度は、前記産出速度未満である、請求項１００に記載の方法。
【請求項１０２】
前記クライアントによる前記消費速度または前記産出速度のうちの一つの変化に基づいて、前記格納された要求を送信することを、前記加速プログラムによって決定するステップを包含する、請求項１００に記載の方法。
【請求項１０３】
前記サーバへの接続を確立したいという前記クライアントからの要求を受けて、機器によって、前記加速プログラムを該クライアントに送信するステップを包含する、請求項１００に記載の方法。
【請求項１０４】
前記加速プログラムを受信すると、前記クライアントによって、該加速プログラムを自動的にインストールし、実行するステップを包含する、請求項１０３に記載の方法。
【請求項１０５】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層にインタフェースされたフィルタデバイスドライバを備える、請求項１００に記載の方法。
【請求項１０６】
前記加速プログラムによって、メモリエレメントに格納された前記要求を圧縮するステップを包含する、請求項１００に記載の方法。
【請求項１０７】
前記クライアント上の前記アプリケーションによって前記サーバへアクセスするための一つ以上のトランスポート層接続のプールを、前記加速プログラムによって提供するステップを包含する、請求項１００に記載の方法。
【請求項１０８】
前記トランスポート層接続経由の、前記クライアント上の複数のアプリケーションからの要求を、前記加速プログラムによって多重化するステップを包含する、請求項１００に記載の方法。
【請求項１０９】
前記クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項１００に記載の方法。
【請求項１１０】
前記アプリケーションまたは前記サーバのうちの一つにはトランスペアレントに、前記クライアントによって前記加速プログラムを実行するステップを包含する、請求項１００に記載の方法。
【請求項１１１】
サーバから受信した応答の消費速度と、該サーバへ送信した要求の産出速度との差異をクライアント上で管理するためのシステムであって、該システムは、
該クライアント上の加速プログラムによって、サーバにアクセスしたいというアプリケーションによる要求を傍受するための手段であって、該加速プログラムは、トランスポート層接続経由で、該アプリケーションの代わりに該サーバと通信する、手段と、
受信したサーバ応答の消費速度と、該クライアントによって送信された要求の産出速度との差異が、所定の閾値を下回ることを該加速プログラムによって判断するための手段と、
該加速プログラムによって、該要求を該クライアントのメモリエレメントに格納するための手段と
を備える、システム。
【請求項１１２】
前記消費速度は、前記産出速度未満である、請求項１１１に記載のシステム。
【請求項１１３】
前記クライアントによる前記消費速度または前記産出速度のうちの一つの変化に基づいて、格納された要求を送信することを、前記加速プログラムによって決定するための手段を備える、請求項１１１に記載のシステム。
【請求項１１４】
前記サーバへの接続を確立したいという前記クライアントからの要求を受けて、機器によって、前記加速プログラムを該クライアントに送信するための手段を備える、請求項１１１に記載のシステム。
【請求項１１５】
前記加速プログラムを受信すると、前記クライアントが、該加速プログラムを自動的にインストールし、実行することを含む、請求項１１４に記載のシステム。
【請求項１１６】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層にインタフェースされたフィルタデバイスドライバを備える、請求項１１１に記載のシステム。
【請求項１１７】
前記加速プログラムによって、メモリエレメントに格納された前記要求を圧縮するための手段を備える、請求項１１１に記載のシステム。
【請求項１１８】
前記クライアント上の前記アプリケーションによって前記サーバへアクセスするための一つ以上のトランスポート層接続のプールを、前記加速プログラムによって提供するための手段を備える、請求項１１１に記載のシステム。
【請求項１１９】
前記トランスポート層接続経由の、前記クライアント上の複数のアプリケーションからの要求を、前記加速プログラムによって多重化するための手段を備える、請求項１１１に記載のシステム。
【請求項１２０】
前記クライアントのネットワークスタックのネットワーク層、セッション層、または前記アプリケーション層のうちの一つにはトランスペアレントに、該クライアントは、前記加速プログラムを実行する、請求項１１１に記載のシステム。
【請求項１２１】
前記アプリケーションまたは前記サーバのうちの一つにはトランスペアレントに、前記クライアントは、前記加速プログラムを実行する、請求項１１１に記載のシステム。
【請求項１２２】
クライアントとサーバとの間のトランスポート層接続経由で通信されるネットワークパケットに対して、該クライアント上の加速プログラムによって、複数の加速技術を実行するための方法であって、該ネットワークパケットは、該加速プログラムによって該トランスポート層で傍受され、該方法は、
（ａ）クライアント上の加速プログラムによって、該加速プログラムと該サーバとの間にトランスポート層接続を確立するステップと、
（ｂ）該加速プログラムによって、該トランスポート層で、該クライアントと該サーバ間との間で通信されるネットワークパケットを傍受するステップと、
（ｃ）該トランスポート層で傍受された該ネットワークパケット上で、該加速プログラムによって、複数の加速技術を実行するステップと
を包含する、方法。
【請求項１２３】
前記トランスポート層接続へのインタフェースによって提供されるカーネルレベルのデータ構造経由の前記ネットワークパケットに、前記加速プログラムによってアクセスするステップを包含する、請求項１２２に記載の方法。
【請求項１２４】
前記加速プログラムによって、前記ネットワークパケットから前記サーバへ通信するステップを包含する、請求項１２２に記載の方法。
【請求項１２５】
前記ステップ（ｄ）は、前記加速プログラムによって、
圧縮と、
解凍と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記クライアント上で実行するステップを包含する、請求項１２２に記載の方法。
【請求項１２６】
前記加速プログラムによって、前記ネットワークパケットの一部分の暗号化または復号化のうちの一つを行うステップを包含する、請求項１２２に記載の方法。
【請求項１２７】
前記加速プログラムによって、前記サーバへの仮想プライベートネットワーク接続を提供するステップを包含する、請求項１２２に記載の方法。
【請求項１２８】
前記クライアントのオペレーティングシステムのユーザモードまたはカーネルモードのうちの一つにおいて、前記加速プログラムによって、前記複数の加速技術を実行するステップを包含する、請求項１２２に記載の方法。
【請求項１２９】
前記加速プログラムの実行可能な命令の一部分において、前記加速プログラムによって、互いに連続する前記複数の加速技術を実行するステップを包含する、請求項１２２に記載の方法。
【請求項１３０】
前記加速プログラムの実行可能な命令の一つのインタフェースポイントで、前記加速プログラムによって、互いに連続する前記複数の加速技術を実行するステップを包含する、請求項１２２に記載の方法。
【請求項１３１】
前記加速プログラムの実行可能な命令の実行のインスタンスの間に、前記加速プログラムによって、互いに連続する前記複数の加速技術を実行するステップを包含する、請求項１２２に記載の方法。
【請求項１３２】
前記カーネルレベルのデータ構造を経由して、前記ネットワークパケットの一つ以上のアプリケーションレベルのプロトコルペイロードへのアクセスを提供するステップを包含する、請求項１２２に記載の方法。
【請求項１３３】
前記クライアントのネットワークスタックのネットワーク層またはセッション層のうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項１２２に記載の方法。
【請求項１３４】
前記クライアントのユーザ、該クライアント上のアプリケーションまたは前記サーバのうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項１２２に記載の方法。
【請求項１３５】
クライアントとサーバとの間のトランスポート層接続経由で通信されるネットワークパケットに対して、クライアント上の加速プログラムによって、複数の加速技術を実行するためのシステムであって、該ネットワークパケットは、該加速プログラムによって該トランスポート層で傍受され、該システムは、
クライアント上の加速プログラムによって、該加速プログラムと該サーバとの間にトランスポート層接続を確立するための手段と、
該加速プログラムによって、該トランスポート層で、該クライアントと該サーバとの間で通信されるネットワークパケットを傍受するための手段と、
該トランスポート層で傍受された該ネットワークパケット上で、該加速プログラムによって、複数の加速技術を実行するための手段と
を備える、システム。
【請求項１３６】
前記加速プログラムは、前記トランスポート層接続へのインタフェースをプログラミングするアプリケーションを呼び出すことによって、カーネルレベルのデータ構造を取得する、請求項１３５に記載のシステム。
【請求項１３７】
前記加速プログラムは、前記ネットワークパケットから前記サーバへ通信する、請求項１３５に記載のシステム。
【請求項１３８】
前記複数の加速技術は、
圧縮と、
解凍と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
のうちの少なくとも一つを備える、請求項１３５に記載のシステム。
【請求項１３９】
前記加速プログラムは、前記ネットワークパケットの一部分の暗号化または復号化のうちの一つを行う、請求項１３５に記載のシステム。
【請求項１４０】
前記加速プログラムは、前記サーバへの仮想プライベートネットワーク接続を提供する、請求項１３５に記載のシステム。
【請求項１４１】
前記加速プログラムは、前記クライアントのオペレーティングシステムのユーザモードまたはカーネルモードのうちの一つで実行する、請求項１３５に記載のシステム。
【請求項１４２】
前記加速プログラムは、互いに連続する前記複数の加速技術のそれぞれを実行する実行可能な命令を備える、請求項１３５に記載のシステム。
【請求項１４３】
前記加速プログラムは、前記複数の加速技術が互いに連続して実行される一つのインタフェースポイントを備える、請求項１３５に記載のシステム。
【請求項１４４】
前記加速プログラムは、前記複数の加速技術が互いに連続して実行される実行のインスタンスを有する実行可能な命令を備える、請求項１３５に記載のシステム。
【請求項１４５】
前記加速プログラムは、前記カーネルレベルのデータ構造を経由して、前記トランスポート層で、前記ネットワークパケットの一つ以上のアプリケーションレベルのプロトコルペイロードへのアクセスを取得する、請求項１３５に記載のシステム。
【請求項１４６】
前記クライアントは、該クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項１３５に記載のシステム。
【請求項１４７】
前記クライアントは、該クライアントのユーザ、該クライアント上のアプリケーションまたは前記サーバのうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項１３５に記載のシステム。
【請求項１４８】
クライアントによって、仲介物がサーバとの通信に使用不可能であると判断すると、該クライアントの該サーバへの通信を、該クライアント上で、該仲介物をバイパスするように、リダイレクトする方法であって、該方法は、
（ａ）クライアント上の加速プログラムによって、該クライアントとサーバとの間のトランスポート層接続を仲介物経由で確立するステップと、
（ｂ）該加速プログラムによって、該仲介物が、該クライアントによる該サーバへの該トランスポート層接続経由で通信することに、使用可能でないと判断するステップと、
（ｃ）該加速プログラムによって、該クライアントから該サーバへの通信を傍受するステップと、
（ｄ）該加速プログラムによって、該仲介物をバイパスするために、該加速プログラムと該サーバとの間に第二のトランスポート層接続を確立するステップと
を包含する、方法。
【請求項１４９】
ステップ（ｄ）は、前記加速プログラムによって、前記サーバとの前記第二のトランスポート層接続を直接確立するステップを包含する、請求項１４８に記載の方法。
【請求項１５０】
ステップ（ｄ）は、前記加速プログラムによって、第二の仲介物経由で、前記サーバとの前記第二のトランスポート層接続を確立するステップを包含する、請求項１４８に記載の方法。
【請求項１５１】
前記加速プログラムによって、前記第二のトランスポート層接続経由で、前記サーバへの通信を送信するステップを包含する、請求項１４８に記載の方法。
【請求項１５２】
前記加速プログラムを前記仲介物から受信すると、前記クライアントによって、該加速プログラムを自動的にインストールして、実行するステップを包含する、請求項１４８に記載の方法。
【請求項１５３】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層に、インタフェースされたフィルタデバイスドライバを備える、請求項１４８に記載の方法。
【請求項１５４】
前記加速プログラムによって、
圧縮と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを、前記通信上で実行するステップを包含する、請求項１４８に記載の方法。
【請求項１５５】
前記加速プログラムによって、前記クライアントと前記サーバとの間の通信を暗号化するステップを包含する、請求項１４８に記載の方法。
【請求項１５６】
前記クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、該クライアントによって前記加速プログラムを実行するステップを包含する、請求項１４８に記載の方法。
【請求項１５７】
前記クライアントのアプリケーション、該クライアントのユーザ、または前記サーバのうちの一つにはトランスペアレントに、前記クライアントによって前記加速プログラムを実行するステップを包含する、請求項１４８に記載の方法。
【請求項１５８】
前記仲介物は、キャッシュ、ゲートウェイ、ファイアウォール、サーバ、プロキシ、ルータ、スイッチ、またはブリッジのうちの一つを備える、請求項１４８に記載の方法。
【請求項１５９】
クライアントによって、仲介物がサーバとの通信に使用不可能であると判断すると、該クライアントの該サーバへの通信は、該クライアント上で、該仲介物をバイパスするように、リダイレクトするシステムであって、該システムは、
クライアント上の加速プログラムによって、クライアントとサーバとの間のトランスポート層接続を、仲介物を経由して確立するための手段と、
該加速プログラムによって、該仲介物が、該クライアントによる該サーバへの該トランスポート層を経由する通信には使用不可能であると判断するための手段と、
該加速プログラムによって、該クライアントから該サーバへの通信を傍受するための手段と、
該加速プログラムによって、該仲介物をバイパスするために、該加速プログラムと該サーバとの間に第二のトランスポート層接続を確立するための手段と
を備える、システム。
【請求項１６０】
前記加速プログラムは、直接前記サーバとの間に、前記第二のトランスポート層接続を確立する、請求項１５９に記載のシステム。
【請求項１６１】
前記加速プログラムは、第二の仲介物経由で、前記サーバと、前記第二のトランスポート層接続を確立する、請求項１５９に記載のシステム。
【請求項１６２】
前記加速プログラムは、前記第二のトランスポート層接続を経由する前記サーバへの通信を送信する、請求項１５９に記載のシステム。
【請求項１６３】
前記加速プログラムを前記仲介物から受信すると、前記クライアントによって、該加速プログラムを自動的にインストールして、実行するための手段を備える、請求項１５９に記載のシステム。
【請求項１６４】
前記加速プログラムは、前記クライアントのネットワークスタックのトランスポート層に、インタフェースされたフィルタデバイスドライバを備える、請求項１５９に記載のシステム。
【請求項１６５】
前記加速プログラムは、前記通信のために、
圧縮と、
伝送制御プロトコル接続プーリングと、
伝送制御プロトコル接続多重化と、
伝送制御プロトコルバッファリングと、
キャッシングと
の加速技術のうちの一つを実行する、請求項１５９に記載のシステム。
【請求項１６６】
前記加速プログラムは、前記クライアントと前記サーバとの間の通信の暗号化する、請求項１５９に記載のシステム。
【請求項１６７】
前記クライアントは、該クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項１５９に記載のシステム。
【請求項１６８】
前記クライアントは、該クライアント上のアプリケーション、該クライアントのユーザ、または前記サーバのうちの一つにはトランスペアレントに、前記加速プログラムを実行する、請求項１５９に記載のシステム。
【請求項１６９】
前記仲介物は、キャッシュ、ゲートウェイ、ファイアウォール、サーバ、プロキシ、ルータ、スイッチ、またはブリッジのうちの一つを備える、請求項１５９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本出願は、米国仮特許出願第６０／６４０，４６４号（発明の名称「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＤＹＮＡＭＩＣ  ＡＣＣＥＬＥＲＡＴＩＯＮ  ＯＦ  ＲＥＭＯＴＥＬＹ−ＡＣＣＥＳＳＥＤ  ＡＰＰＬＩＣＡＴＩＯＮ」、２００４年１２月３０日出願）および米国特許出願公開第１１／０３９，９４６号（発明の名称「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＥＳＴＡＢＬＩＳＨＩＮＧ  Ａ  ＶＩＲＴＵＡＬ  ＰＲＩＶＡＴＥ  ＮＥＴＷＯＲＫ」、２００５年１月２４日出願）の優先権を主張するものであり、両出願は、本明細書に参考として援用される。
【０００２】
（発明の分野）
本発明は、広くデータ通信ネットワークに関するものである。より詳しく言えば、本発明は、クライアント側の加速プログラムを自動的に展開、インストール、実行するためのシステムおよび方法に関するものである。
【背景技術】
【０００３】
企業は、企業ネットワークの境界外にいる従業員、パートナー、サービス会社に、アプリケーションへのアクセスを提供することがますます求められるようになっている。しかし、混雑する広域ネットワーク（ＷＡＮ）リンク、高負荷のサーバ、低帯域幅のリモート接続等は、リモートアクセスアプリケーションへのアクセスを妨げ、その動作を遅らせることになる。これらの要因は、従業員の生産性および企業のアプリケーションソフトおよびインフラにおける投資利益に大いに影響し、それらを低減させる。さらに、これらの要因によって、ユーザは、リモートアクセスアプリケーションの使用に不満を感じ、疎んじるようになる可能性もある。これらのアプリケーションから十分な投資収益を得るためには、企業は全てのユーザが、場所に関係なく、アプリケーションを迅速且つ有効に利用できるようにする必要がある。
【０００４】
リモートアクセスアプリケーションの性能を高めるための一つの方法は、アプリケーションの性能を加速するための一定の機能を果たす機器を企業ネットワークの中にインストールすることである。この機器は、通常、公共ネットワーク上のＷＡＮと専用データネットワーク上の企業サーバとの間のゲートウェイとしてインストールされ、その両者間を通過するデータを処理する。専用の加速機能を持つ機器は、しばしば「アクセラレータ」と呼ばれる。アクセラレータは企業ネットワーク内に展開されるため、企業ネットワーク自体の待ち時間を短縮し、企業サーバの負荷を低減するのにより有効である。しかしながら、それは企業ネットワークの外で生じる問題、例えば、混雑したＷＡＮリンクおよび低帯域幅のリモート接続等に起因する遅延に対処するにはそれほど有効ではない。
【０００５】
もう一つの方法として、いくつかの会社がＷＡＮのクライアント側、クライアント側ＬＡＮのためのアプリケーション加速ソリューションを提供している。これらのソリューションは、通常二つの主要カテゴリーに分類される。すなわち、（１）クライアントとＷＡＮとの間のゲートウェイとしてインストールでき、アプリケーション加速機能を果たすネットワーク機器、および（２）クライアント側ＬＡＮに属するアプリケーション加速サーバ、である。しかしながら、加速サーバまたは機器のクライアント側ＬＡＮへの設置、維持管理には、時間、費用、資源が費やされる。多くの場合、企業ネットワークには多くの異なるリモートサイト、例えば数多くの支店等からのアクセスがあり得る。全てのリモートクライアントのためのクライアント側加速を展開するには、企業は、機器ベースまたはサーバベースのアクセラレータを、各リモートサイトで設置し、維持管理しなければならなくなる。また、あるリモートサイトからのアプリケーションへアクセスするニーズが散発的な場合、そのようなアクセラレータをそのサイトのクライアント側ＬＡＮに設置、維持管理する時間、費用、資源が、利益を上回ってしまう可能性がある。
【０００６】
さらに、クライアント側ＬＡＮの機器またはサーバベースのアクセラレータというソリューションは、限定的なものになり得る。クライアント側ＬＡＮの加速が、サーバベースまたは機器ベースのアクセラレータが存在する場所に限定されてしまうからである。ユーザが異なる遠隔地の複数のコンピュータ機器にアクセスでき、またモバイルコンピュータ機器の遍在や無線ネットワークアクセスの利用率の高まりも相まって、ユーザは広範なリモートアクセスポイントからネットワークにアクセスすることがある。例えば、ユーザがアクセスポイント間でローミングする過程で、ユーザはオフィスのデスクトップコンピュータ、スマートフォンまたは個人用携帯情報端末、ラップトップコンピュータ、ホームオフィスコンピュータ、あるいは顧客やクライアントのオフィス等の遠隔地のオフィスにあるコンピュータ等から、企業ネットワークにアクセスすることができることがある。そのため、ユーザは、いずれかの遠隔地で、そして、ユーザが利用できる複数のコンピュータのうちのいずかで、企業ネットワークを介してリモートアプリケーションへアクセスすることを望むかもしれない。各々のリモートアクセスポイントおよび／またはユーザが利用できる複数のコンピュータ機器は、クライアント側ＬＡＮと企業ネットワークの接続が異なるかもしれない。企業には、クライアント側ＬＡＮソリューションをあらゆる可能なリモートアクセスポイントまたはあらゆる可能なコンピュータ機器に展開したり、リモートアクセスポイントやユーザのコンピュータ機器の数が増えるにつれて継続的にそのようなソリューションを設置、維持したりする時間、費用、資源がないかもしれない。また、ユーザは、企業がアクセスできない、または企業の管理下にない公共ネットワーク、専用ネットワーク、あるいはクライアント側ＬＡＮから企業ネットワークにアクセスするかもしれない。そのため、企業はこれら全てのアクセスポイントにクライアント側ＬＡＮアクセラレータを展開することはできないかもしれない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
そこで望まれるのは、リモートアクセスアプリケーションの性能を向上させるクライアント側加速能力を提供するシステムおよび方法である。この望ましいシステムおよび方法は、クライアントとＷＡＮとの間での加速ソフトを起動させるネットワーク機器またはサーバの設置およびメンテナンスを必要としないものである。また、リモートアクセスアプリケーションの性能をさらに向上させるには、アクセラレータ機能がＷＡＮのクライアント側と企業ネットワーク側の両方で実行され得ることが、望ましいであろう。
【課題を解決するための手段】
【０００８】
（本発明の概要）
本発明は、クライアント上に加速機能を動的に展開、実行して、リモートアクセスアプリケーションの性能および配信を向上させるためのシステムおよび方法を対象とするものである。クライアント側の加速機能は、クライアントとサーバ間の通信における、次の加速技術のうちの一つ以上を使用する加速プログラムによって提供される。すなわち、例えば、リモートアクセスアプリケーションに対して、１）マルチプロトコル圧縮、２）転送制御プロトコルプーリング、３）転送制御プロトコル多重化、４）転送制御プロトコルバッファリング、５）キャッシング、である。一形態では、本発明の加速プログラムは、クライアントの動作に対してトランスペアレントかつシームレスな方法で、クライアント上に自動的にインストール、実行される。サーバとの通信セッションや接続を確立したいというクライアントの要求を、機器が傍受して、加速プログラムをクライアントに送信する。クライアントがアクセスしているアプリケーションが加速できるかどうかを機器が判断して、アプリケーションが加速可能な場合に、加速プログラムの提供のみを行う場合がある。加速プログラムを受け取ると、クライアントは加速プログラムの静かなインストールを自動的に行い、インストールが完了すると加速プログラムを実行する。
【０００９】
一形態では、本発明は、加速プログラムをクライアントに動的に提供して、自動的にインストールおよび実行するための方法に関するものである。加速プログラムは、リモートアクセスアプリケーションへのクライアントによるアクセスを加速化する。この方法には、サーバとの通信セッションを確立するというクライアントの要求を機器によって受信することと、サーバを介して提供される、クライアントがアクセスするアプリケーションの加速化をクライアント上で行うためのネットワークドライバからなる加速プログラムを、その機器によって、クライアントに送信することのステップが含まれる。加速プログラムを受信すると、クライアントは、ネットワークドライバをクライアントの記憶装置に静かなインストールを自動的に実行する。ネットワークドライバがインストールされると、クライアントは、クライアントのネットワークスタックに割り当てられた、メモリ内のネットワークドライバを自動的に実行する。
【００１０】
本発明の一実施形態では、方法には、サーバとの通信セッションの確立時に、機器によって、クライアントに加速プログラムを送信することが含まれる。もう一つの実施形態では、この方法には、加速プログラムによるサーバとの通信セッションの確立が含まれる。いくつかの実施形態では、加速プログラムがクライアントの再起動またはクライアントのユーザによる相互作用処理なしに、クライアント上にインストールされる。他の実施形態では、加速プログラムのインストールおよび実行が、クライアントのユーザ、アプリケーション、またはサーバにトランスペアレントに、クライアント上で行われる。いくつかの実施形態では、本発明のネットワークドライバは、ネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバで構成される。一実施形態では、加速プログラムは、ネットワークスタックのネットワーク層、セッション層またはアプリケーション層にトランスペアレントに、サーバ上のアプリケーションへの、クライアント側で加速されたアクセスを提供する。
【００１１】
他の実施形態では、本発明の方法には、機器による第一のプログラムのクライアントへの送信が含まれる。第一のプログラムには加速プログラムが含まれる。第一のプログラムを受信すると、クライアントは自動的に第一プログラムを実行して、加速プログラムをインストールし、実行する。いくつかの実施形態では、第一のプログラムには、ブラウザに提供され、ブラウザ上で実行される、実行可能命令が含まれる。
【００１２】
本発明のいくつかの実施形態では、方法には、サーバ上のアプリケーションにアクセスするというクライアントからの要求を機器によって受信し、その機器により、クライアントに対して、加速プログラムに通信して、クライアントとサーバ間の通信時に少なくとも一つの加速技術を実施するよう、メッセージを送信することが含まれる。さらに、一実施形態では、アプリケーションが加速できるかどうかを機器が判断して、アプリケーションが加速可能な場合に、クライアントにメッセージを送信する。
【００１３】
いくつかの実施形態では、加速プログラムは、クライアント上で次の加速技術のうちの一つを実行する。すなわち、１）圧縮、２）解凍、３）伝送制御プロトコル接続プーリング、４）伝送制御プロトコル接続多重化、５）伝送制御プロトコル接続バッファリング、６）キャッシングである。他の実施形態では、加速プログラムは、クライアントとサーバ間の通信の暗号化または復号化を行う。一実施形態では、ネットワークドライバは、機器またはサーバとの仮想プライベートネットワーク接続を確立する。機器には、キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジが含まれる。
【００１４】
他の形態では、本発明は、リモートアクセスアプリケーションへのクライアントによるアクセスを加速するために、クライアントに加速プログラムを動的に提供する方法に関するものである。この方法には、機器により、サーバを介してアプリケーションにアクセスするというクライアントからの要求を受信し、この機器により、このアプリケーションが加速可能であることを判断することが含まれる。この方法はさらに、クライアント上で自動的にインストールし実行するための加速プログラムを、この機器によってクライアントに送信することが含まれる。一実施形態では、本発明の方法には、クライアントによる、機器から受信した加速プログラムの自動的インストールおよび実行が含まれる。いくつかの実施形態では、クライアントは、加速プログラムを、クライアント上のアプリケーション、ユーザまたはサーバにはトランスペアレントに、受信、インストール、および／または実行する。
【００１５】
他の実施形態では、機器はアプリケーションが加速可能でないことを判断し、要求をサーバに転送する。いくつかの実施形態では、機器はアプリケーションが次の加速技術のうちの一つによって加速可能であることを判断する。すなわち、１）圧縮、２）解凍、３）伝送制御プロトコル接続プーリング、４）伝送制御プロトコル接続多重化、５）伝送制御プロトコル接続バッファリング、６）キャッシングである。機器は、アプリケーションを加速することができると機器が判断する加速技術を提供するように設定された加速プログラムを送信する。加速プログラムはこれらの加速技術のうちの一つを処理または実行する。いくつかの実施形態では、加速プログラムは、仮想プライベートネットワークを機器またはサーバに提供する。機器には、キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジが含まれる。
【００１６】
いくつかの形態では、本発明は、リモートアクセスアプリケーションへのクライアントによるアクセスを加速するために、クライアントに加速プログラムを動的に提供するための機器に関するものである。この機器には、サーバを介してアプリケーションにアクセスするというクライアントからの要求を受信し、このアプリケーションが加速可能であることを判断し、加速プログラムを、クライアントに送信するための手段が含まれる。加速プログラムは、クライアント上で自動的にインストールし、実行するように設定されている。
【００１７】
いくつかの実施形態では、機器には、アプリケーションが加速可能でないことを機器によって判定し、要求をサーバに転送するための手段も含まれている。他の実施形態では、機器には、アプリケーションが次の加速技術のうちの一つによって加速可能であることを機器によって判断するための手段が含まれている。すなわち、１）圧縮、２）解凍、３）伝送制御プロトコル接続プーリング、４）伝送制御プロトコル接続多重化、５）伝送制御プロトコル接続バッファリング、６）キャッシングである。一実施形態では、機器は、アプリケーションを加速することができると機器が判断する加速技術を提供するように設定された加速プログラムを、機器によって送信するための手段を備えている。機器はまた、加速プログラムとの仮想プライベートネットワークを確立し得る。機器には、キャッシュ、ゲートウェイ、サーバ、ファイアウォール、プロキシ、ルータ、スイッチ、またはブリッジが含まれる。
【００１８】
他の形態では、クライアント側の加速機能は、トランスポート層接続プーリング技術を使って通信性能とリモートアクセスアプリケーションの配信を改善する、加速プログラムによって提供される。加速プログラムは、クライアントからサーバへのトランスポート層接続を確立し、その接続はクライアント上の複数のアプリケーションによって使用されることができ、あるいは、そうでなければ、クライアントのアプリケーションの間で共有される。加速プログラムは、トランスポート層接続要求の数、およびクライアント上で作動する一つまたは複数のアプリケーションのためにサーバとの間に確立されるトランスポート層接続の数を減らすために、トランスポート層接続をオープンに保つ。
【００１９】
一形態では、本発明は、クライアント上にサーバへのトランスポート層接続を一つ以上プールすることによって、クライアントによるサーバへのアクセスを加速する方法に関するものである。この方法には、第一のアプリケーションによる、サーバとの第一のトランスポート層接続を確立するという第一の要求を、クライアント上の加速プログラムにより傍受し、加速プログラムとサーバ間のトランスポート層接続を、加速プログラムにより確立することが含まれる。この方法には、また、第二のアプリケーションによる、サーバとの第二のトランスポート層接続を確立するという第二の要求を、加速プログラムにより傍受し、確立されたトランスポート層接続を加速プログラムにより利用して、要求された第二のアプリケーションのためのトランスポート層接続を提供することが含まれる。
【００２０】
一実施形態では、本発明の方法には、サーバとの接続またはセッションのうちの一つを確立するというクライアントからの要求を受けて、機器によって加速プログラムをクライアントに送信することが含まれる。加速プログラムを受信すると、クライアントは自動的に加速プログラムをインストールし、実行し得る。いくつかの実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続されたフィルタデバイスドライバが含まれる。他の実施形態では、方法には、確立されたトランスポート層接続を介しての、クライアント上の複数のアプリケーションからの要求を、加速プログラムにより多重化することも含まれる。
【００２１】
いくつかの実施形態では、方法には、加速プログラムにより、クライアント上で次の加速技術のうちの一つを実行することが含まれる。すなわち、１）マルチプロトコル圧縮、２）転送制御プロトコル多重化、３）転送制御プロトコルバッファリング、４）キャッシング、である。他の実施形態では、加速プログラムは、クライアントとサーバ間の通信の暗号化または復号化を行う。一実施形態では、方法には、リセットまたは終了のコマンドの受信時に、第一のトランスポート層接続を加速プログラムにより閉じることが含まれる。他の実施形態では、サーバと第一のアプリケーションまたは第二のアプリケーションとの間の活動が待機状態の期間、トランスポート層接続を加速プログラムによりオープンに保つことが含まれる。その他の実施形態では、加速プログラムが、クライアントからサーバへの通信の中に、トランスポート層接続をオープンに保つようにという命令を挿入する。
【００２２】
本発明の一実施形態では、方法には、サーバに送信され、サーバが確認応答するバイト数を各アプリケーションについて比較することによって、トランスポート層接続が現在、第一のアプリケーションまたは第二のアプリケーションによって使用中であることを、加速プログラムにより判定することが含まれる。いくつかの実施形態では、加速プログラムは、トランスポート層接続が現在、第一のアプリケーションによって使用中であると判定し、第二のアプリケーションが使用するための、加速プログラムとサーバ間の第二のトランスポート層接続をオープンする。一実施形態では、トランスポート層接続は、加速プログラムとサーバと通信している機器との間に確立される。いくつかの実施形態では、機器は、加速プログラムが使用するための一つ以上のトランスポート層接続のプールを確立する。
【００２３】
他の実施形態では、方法には、クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層にトランスペアレントに、加速プログラムをクライアントにより実行することが含まれる。その他の実施形態では、方法には、第一のアプリケーション、第二のアプリケーション、またはサーバのうちの一つにトランスペアレントに、加速プログラムをクライアントにより実行することが含まれる。
【００２４】
他の形態では、本発明は、クライアント上にサーバへのトランスポート層接続を一つ以上プールすることによって、クライアントによる一つ以上のサーバへのアクセスを加速化するためのシステムに関するものである。システムには、第一のアプリケーションによる、サーバとの第一のトランスポート層接続を確立するという第一の要求を、クライアント上の加速プログラムにより傍受し、加速プログラムとサーバ間のトランスポート層接続を、加速プログラムにより確立するための手段が含まれる。そのシステムにはさらに、第二のアプリケーションによる、サーバとの第二のトランスポート層接続を確立するという第二の要求を、加速プログラムにより傍受し、確立されたトランスポート層接続を加速プログラムにより利用して、要求された第二のアプリケーションのためのトランスポート層接続を提供するための手段が含まれる。
【００２５】
一実施形態では、本発明のシステムには、加速プログラムをクライアントにより自動的にインストールし、実行するための手段が含まれる。他の実施形態では、システムには、サーバとの接続またはセッションのうち一つを確立するというクライアントからの要求を受けて、加速プログラムをクライアントに送信する機器が含まれる。加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれ得る。いくつかの実施形態では、システムには、第二のトランスポート層接続を介する、クライアント上の複数のアプリケーションからの要求を、加速プログラムにより多重化するための手段が含まれる。
【００２６】
いくつかの実施形態では、システムには、クライアント上で次の加速技術のうちの一つを実行する、加速プログラムが含まれる。すなわち、１）マルチプロトコル圧縮、２）転送制御プロトコル多重化、３）転送制御プロトコルバッファリング、４）キャッシング、である。他の実施形態では、加速プログラムは、クライアントとサーバ間の通信の暗号化または復号化を行う。一実施形態では、システムには、リセットまたは終了のコマンドの受信時に、第一のトランスポート層接続を加速プログラムにより閉じるための手段が含まれる。他の実施形態では、加速プログラムは、サーバと第一のアプリケーションまたは第二のアプリケーションとの間の活動が待機状態の期間、トランスポート層接続をオープンに保つ。システムのその他の実施形態では、加速プログラムが、クライアントからサーバへの通信に、トランスポート層接続をオープンに保つようにという命令を挿入する。
【００２７】
システムの一実施形態では、加速プログラムには、サーバに送信され、サーバが確認応答するバイト数を各アプリケーションについて比較することによって、トランスポート層接続が現在、第一のアプリケーションまたは第二のアプリケーションのうちの一つによって使用中であることを、判定するための手段が含まれる。他の実施形態では、加速プログラムには、トランスポート層接続が現在、第一のアプリケーションによって使用中であると判定する手段を含み、第二のアプリケーションが使用するための、加速プログラムとサーバ間の第二のトランスポート層接続をオープンにする。いくつかの実施形態では、加速プログラムが、加速プログラムとサーバと通信している機器との間に第二のトランスポート層接続を確立する。一実施形態では、機器は、加速プログラムが使用するための一つ以上のトランスポート層接続のプールを提供する。
【００２８】
システムの他の実施形態では、クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層にトランスペアレントに、加速プログラムを実行する。その他の実施形態では、システムには、第一のアプリケーション、第二のアプリケーション、またはサーバのうちの一つにトランスペアレントに、クライアントが加速プログラムを実行することが含まれる。
【００２９】
他の形態では、クライアント側の加速機能は、トランスポート層接続多重化技術を実行して通信性能とリモートアクセスアプリケーションの配信を改善する、加速プログラムによって提供される。加速プログラムは、クライアントからサーバへのトランスポート層接続を確立し、その接続はクライアント上の複数のアプリケーションが使用することができ、あるいは、そうでなければ、クライアントのアプリケーションの間で共有される。加速プログラムは、加速プログラムによって維持される同一のトランスポート層接続を介しての、一つ以上のアプリケーションからの要求を多重化する。そのため、加速プログラムは、トランスポート層接続を使って、一つのアプリケーションのアイドルタイムを利用し、同じトランスポート層接続を介しての第二のアプリケーションの要求に供することができる。
【００３０】
一形態では、本発明は、共有されたトランスポート層接続を介しての複数のアプリケーション要求を多重化することにより、サーバ上の一つ以上のアプリケーションへのクライアントによるクライアントアクセスを加速するための方法に関するものである。この方法には、サーバへのアクセスという、クライアントの第一のアプリケーションによる第一の要求を、クライアント上の加速プログラムによって傍受し、その第一の要求を、加速プログラムとサーバとの間に確立されたトランスポート層接続を介して、加速プログラムによって送信することが含まれる。その方法には、また、そのサーバへのアクセスという、クライアントの第二のアプリケーションによる第二の要求を、加速プログラムによって傍受し、その第二の要求を、第一のアプリケーションが使用して確立されたトランスポート層接続を介して、加速プログラムによって送信することが含まれる。
【００３１】
一実施形態では、本発明の方法には、第一のアプリケーションの要求への応答をサーバから受信した時に、第二の要求を加速プログラムにより送信することが含まれる。いくつかの実施形態では、この方法には、第一のアプリケーションが現在トランスポート層接続を使用していないと判断した時に、第二の要求を加速プログラムにより送信することが含まれる。他の実施形態では、方法には、第一のアプリケーションがサーバへ送信したバイト数とサーバが確認応答したバイト数を比較することによって、第一のアプリケーションが現在トランスポート層接続を使用していないことを、加速プログラムで判断することが含まれる。その他の実施形態では、この方法には、クライアントとサーバとの間のメッセージの中のメッセージ識別子の長さをチェックすることによって、第一のアプリケーションが現在トランスポート層接続を使用していないことを、加速プログラムで判断することが含まれる。
【００３２】
本発明の一実施形態では、この方法にはさらに、トランスポート層接続を介しての、クライアント上の複数のアプリケーションからの要求を、加速プログラムにより多重化することが含まれる。他の実施形態では、この方法には、クライアントの複数のアプリケーションが使用するための、サーバへの複数のトランスポート層接続を、加速プログラムによってプールすることが含まれる。いくつかの実施形態では、この方法には、サーバとの接続を確立するというクライアントからの要求を受けて、機器により加速プログラムをクライアントに送信することが含まれる。加速プログラムを受信すると、クライアントは自動的に加速プログラムをインストールし、実行し得る。いくつかの実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれる。
【００３３】
いくつかの実施形態では、方法には、加速プログラムによって、次の加速技術のうちの一つを実行することが含まれる。すなわち、１）圧縮、２）解凍、３）転送制御プロトコルバッファリング、４）キャッシングである。他の実施形態では、加速プログラムは、クライアントとサーバ間の通信の暗号化または復号化を行う。一実施形態では、方法には、第一のアプリケーションおよび第二のアプリケーションのリセットまたは終了のコマンドの受信時に、トランスポート層接続を加速プログラムにより閉じることが含まれる。さらに一実施形態では、方法には、加速プログラムとサーバと通信している機器との間にトランスポート層接続を確立することが含まれる。一実施形態では、機器は、加速プログラムが使用するための一つ以上のトランスポート層接続のプールを確立する。他の実施形態では、機器が一つ以上のトランスポート層接続のプールを介して、加速プログラムとサーバ間の複数の通信を多重化する。
【００３４】
本発明の一実施形態では、方法には、クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにトランスペアレントに、加速プログラムをクライアントが実行することが含まれる。他の実施形態では、方法には、第一のアプリケーション、第二のアプリケーション、またはサーバにトランスペアレントに、加速プログラムをクライアントが実行することが含まれる。
【００３５】
他の形態では、本発明は、共有されたトランスポート層接続を介しての複数のアプリケーション要求を多重化することにより、サーバ上の一つ以上のアプリケーションへのクライアントによるクライアントアクセスを加速するためのシステムに関するものである。このシステムには、サーバへのアクセスという、クライアントの第一のアプリケーションによる第一の要求を、クライアント上の加速プログラムによって傍受し、その第一の要求を、加速プログラムとサーバとの間に確立されたトランスポート層接続を介して、加速プログラムによって送信するための手段が含まれる。このシステムには、また、そのサーバへのアクセスという、クライアントの第二のアプリケーションによる第二の要求を、加速プログラムによって傍受し、その第二の要求を、第一のアプリケーションが使用して確立されたトランスポート層接続を介して、加速プログラムによって送信するための手段が含まれる。
【００３６】
一実施形態では、本発明のシステムには、第一のアプリケーションの要求への応答をサーバから受信した時に、第二の要求を加速プログラムにより送信するための手段が含まれる。他の実施形態では、このシステムには、第一のアプリケーションが現在トランスポート層接続を使用していないとの判断時に、第二の要求を加速プログラムにより送信するための手段が含まれる。いくつかの実施形態では、システムには、第一のアプリケーションがサーバへ送信したバイト数とサーバが確認したバイト数を比較することによって、第一のアプリケーションが現在トランスポート層接続を使用していないことを、加速プログラムで判断するための手段が含まれる。さらに別の実施形態では、このシステムには、クライアントとサーバとの間のメッセージの中のメッセージ識別子の長さをチェックすることによって、第一のアプリケーションが現在トランスポート層接続を使用していないことを、加速プログラムが判断する
手段が含まれる。
【００３７】
いくつかの実施形態では、このシステムには、トランスポート層接続を介しての、クライアント上の複数のアプリケーションからの要求を多重化する加速プログラムが含まれる。その他の実施形態では、このシステムには、複数のアプリケーションが使用するための、サーバへの複数のトランスポート層接続をプールする加速プログラムが含まれる。一実施形態では、このシステムには、サーバとの接続またはセッションのうちの一つを確立するというクライアントからの要求を受けて、加速プログラムをクライアントに送信する機器が含まれる。さらに一実施形態では、加速プログラムを受信すると、クライアントは自動的に加速プログラムをインストールし、実行する。いくつかの実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれる。
【００３８】
このシステムのいくつかの実施形態では、加速プログラムは、次の加速技術のうちの一つを実行する。すなわち、１）圧縮、２）解凍、３）転送制御プロトコルバッファリング、４）キャッシング、である。他の実施形態では、加速プログラムは、クライアントとサーバ間の通信の暗号化または復号化する。一実施形態では、システムには、第一のアプリケーションおよび第二のアプリケーションのリセットまたは終了のコマンドを受信した時に、トランスポート層接続を加速プログラムにより閉じるための手段が含まれる。さらに一実施形態では、方法には、加速プログラムとサーバと通信している機器の間にトランスポート層接続を確立することが含まれる。一実施形態では、機器は、加速プログラムが使用するための一つ以上のトランスポート層接続のプールを確立する。他の実施形態では、機器が一つ以上のトランスポート層接続のプールを介して、加速プログラムとサーバ間の複数の通信を多重化する。
【００３９】
本発明の一実施形態では、方法には、クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層のうちの一つにトランスペアレントに、加速プログラムをクライアントにより実行することが含まれる。他の実施形態では、方法には、第一のアプリケーション、第二のアプリケーション、またはサーバにトランスペアレントに、加速プログラムをクライアントにより実行することが含まれる。いくつかの実施形態では、このシステムには、加速プログラムとサーバと通信している機器との間にトランスポート層接続を確立するための手段が含まれる。機器は、加速プログラムが使用するための一つ以上のトランスポート層接続のプールを提供する。この機器はまた、一つ以上のトランスポート層接続のプールを介して、加速プログラムとサーバ間の複数の通信を多重化する。
【００４０】
さらに別の形態では、クライアント側の加速機能は、トランスポート層接続バッファリング技術を使って通信性能およびリモートアクセスアプリケーションの配信を改善する、加速プログラムによって提供される。加速プログラムは、クライアントからサーバへのトランスポート層接続を確立し、クライアントがサーバから受信する応答の消費速度とクライアントからサーバへ送信する要求の産出速度との差異の判断に基づき、クライアントの要求をバッファリングする。それによって、クライアントの応答消費速度が、要求の提出速度より遅れている場合、加速プログラムは、クライアントの送信を減速することができる。
【００４１】
一形態では、本発明は、サーバから受信した応答の消費速度とサーバへ送信した要求の産出速度との差異をクライアント上で管理するための方法に関するものである。方法には、サーバにアクセスするというアプリケーションによる要求を、加速プログラムがトランスポート層接続を介して、アプリケーションの代わりにサーバと通信して、クライアント上の加速プログラムにより傍受することが含まれる。また、この方法には、受信したサーバ応答の消費速度とクライアントが送信した要求の産出速度との差異が、所定の閾値を下回ることを加速プログラムにより判定し、加速プログラムにより要求をクライアントのメモリエレメントに保存することが含まれる。一実施形態では、消費速度は産出速度未満である。
【００４２】
本発明のいくつかの実施形態では、方法には、クライアントによる消費速度または産出速度の変化に基づいて、保存された要求の送信を、加速プログラムにより判断することが含まれる。その他の実施形態では、方法には、サーバとの接続を確立するというクライアントからの要求を受けて、機器により加速プログラムをクライアントに送信することが含まれる。一実施形態では、方法には、加速プログラムの受信時に、加速プログラムをクライアントにより自動的にインストールし、実行することが含まれる。加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれ得る。他の実施形態では、加速プログラムは、メモリエレメントに保存された要求を圧縮する。
【００４３】
一実施形態では、本発明の方法には、クライアント上のアプリケーションがサーバへアクセスするための一つ以上のトランスポート層接続のプールを、加速プログラムにより提供することが含まれる。他の実施形態では、方法には、また、トランスポート層接続を介しての、クライアント上の複数のアプリケーションからの要求を、加速プログラムにより多重化することも含まれる。
【００４４】
他の形態では、本発明は、サーバから受信した応答の消費速度とサーバへ送信した要求の産出速度との差異をクライアント上で管理するためのシステムに関するものである。システムには、サーバにアクセスするというアプリケーションによる要求を、加速プログラムがトランスポート層接続を介して、アプリケーションの代わりにサーバと通信して、クライアント上の加速プログラムにより傍受するための手段が含まれる。また、このシステムには、受信したサーバ応答の消費速度とクライアントが送信した要求の産出速度との差異が、所定の閾値を下回ることを加速プログラムにより判定し、加速プログラムにより要求をクライアントのメモリエレメントに保存するための手段が含まれる。いくつかの実施形態では、消費速度は産出速度未満である。
【００４５】
一実施形態では、本発明のシステムには、クライアントによる消費速度または産出速度の変化に基づいて、保存された要求の送信を、加速プログラムにより判断するための手段が含まれる。他の実施形態では、システムには、サーバとの接続を確立するというクライアントからの要求を受けて、加速プログラムをクライアントに送信するためのアプリケーションが含まれる。いくつかの実施形態では、クライアントは加速プログラムを受信すると自動的にインストールし、実行する。一実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれる。さらなる一実施形態では、システムには、メモリエレメントに保存された要求を、加速プログラムにより圧縮するための手段が含まれる。
【００４６】
いくつかの実施形態では、本発明の加速プログラムは、クライアント上のアプリケーションがサーバへアクセスするための一つ以上のトランスポート層接続のプールを提供する。その他の実施形態では、加速プログラムは、トランスポート層接続を介しての、クライアント上の複数のアプリケーションからの要求を多重化する。システムの一実施形態では、クライアントは、クライアントのネットワークスタックのネットワーク層、セッション層、またはアプリケーション層にトランスペアレントに、加速プログラムを実行する。他の実施形態では、クライアントは、アプリケーションまたはサーバにトランスペアレントに、加速プログラムを実行する。
【００４７】
他の形態では、クライアント側の加速機能は、次の加速技術の複数のものを総合的かつ効果的に使用する加速プログラムによって提供される。すなわち、１）マルチプロトコル圧縮、２）転送制御プロトコルプーリング、３）転送制御プロトコル多重化、４）転送制御プロトコルバッファリング、５）キャッシング、である。加速プログラムは、クライアントとサーバ間のトランスポート層接続を確立し、トランスポート層でネットワークパケットを傍受する。加速プログラムは、カーネルレベルのデータ構造を使って、トランスポート層で傍受したネットワークパケットにアクセスし、続いて、加速プログラムの、一つのインタフェース箇所または実行箇所で、傍受したネットワークパケットに一つ以上の加速技術を使用する。
【００４８】
一形態では、本発明は、クライアントとサーバ間のトランスポート層接続を介して通信されるネットワークパケットに対して、クライアント上の加速プログラムにより、複数の加速技術を実行するための方法に関するものである。ネットワークパケットは、加速プログラムによってトランスポート層で傍受される。この方法には、クライアント側の加速プログラムにより、加速プログラムとサーバ間のトランスポート層接続を確立すること、そして、加速プログラムにより、トランスポート層において、クライアントとサーバ間で通信されるネットワークパケットを傍受することが含まれる。この方法には、また、トランスポート層で傍受されたネットワークパケットに対して、加速プログラムによって複数の加速技術を使用することも含まれる。
【００４９】
一実施形態では、方法には、加速プログラムにより、トランスポート層接続へのインタフェースによって提供されるカーネルレベルのデータ構造を介してネットワークパケットにアクセスすることが含まれる。方法には、また、加速プログラムによる、ネットワークパケットのサーバへの通信も含まれる。加速プログラムはクライアント上で、傍受したトランスポート層ネットワークパケットに対して、次の技術の一つを使用する。すなわち、１）圧縮、２）解凍、３）伝送制御プロトコル接続プーリング、４）伝送制御プロトコル接続多重化、５）伝送制御プロトコル接続バッファリング、６）キャッシング、である。他の実施形態では、方法には、加速プログラムによる、ネットワークパケットの一部の暗号化または復号化が含まれる。いくつかの実施形態では、本発明の方法には、加速プログラムによる、サーバへの仮想プライベートネットワーク接続の提供が含まれる。他の実施形態では、方法には、クライアントのオペレーティングシステムのユーザモードまたはカーネルモードでの、加速プログラムによる、複数の加速技術の実行が含まれる。
【００５０】
本発明のいくつかの実施形態では、方法には、加速プログラムの実行可能命令の一部において、加速プログラムによって、複数の加速技術を次々と使用することが含まれる。その他の実施形態では、方法には、加速プログラムの実行可能命令における一つのインタフェースポイントで、加速プログラムによって、複数の加速技術を次々と使用することが含まれる。他の実施形態では、本発明の方法には、加速プログラムの実行可能命令の実行のインスタンスの間に、加速プログラムによって、複数の加速技術を次々と使用することが含まれる。いくつかの実施形態では、カーネルレベルのデータ構造は、ネットワークパケットの一つ以上のアプリケーションレベルのプロトコルペイロードへのアクセスを提供する。
【００５１】
他の形態では、本発明は、クライアントとサーバ間のトランスポート層接続を介して通信されるネットワークパケットに対して、クライアント上の加速プログラムにより、複数の加速技術を実行するためのシステムに関するものである。ネットワークパケットは、加速プログラムによってトランスポート層で傍受される。このシステムには、クライアント側の加速プログラムにより、加速プログラムとサーバ間のトランスポート層接続を確立し、そして、加速プログラムにより、トランスポート層にて、クライアントとサーバ間で通信されるネットワークパケットを傍受するための手段が含まれる。このシステムには、また、トランスポート層で傍受されたネットワークパケットに対して、加速プログラムによって複数の加速技術を使用するための手段も含まれる。
【００５２】
本発明のシステムの一実施形態では、加速プログラムは、トランスポート層接続へのインタフェースをプログラミングするアプリケーションを呼び出すことにより、カーネルレベルのデータ構造を取得する。一実施形態では、加速プログラムは、ネットワークパケットのサーバへの通信を行う。いくつかの実施形態では、複数の加速技術は、次のうちの少なくとも一つで構成される。すなわち、１）圧縮、２）解凍、３）伝送制御プロトコル接続プーリング、４）伝送制御プロトコル接続多重化、５）伝送制御プロトコル接続バッファリング、６）キャッシング、である。他の実施形態では、加速プログラムは、ネットワークパケットの一部を暗号化または復号化する。いくつかの実施形態では、加速プログラムは、サーバへの仮想プライベートネットワーク接続を提供する。他の実施形態では、加速プログラムは、クライアントのオペレーティングシステムのユーザモードまたはカーネルモードで実行する。
【００５３】
いくつかの実施形態では、本発明の加速プログラムには、複数の加速技術の各々を次々と使用する実行可能命令が含まれる。その他の実施形態では、加速プログラムは、複数の加速技術が次々と使用される一つのインタフェース箇所で構成される。その他の実施形態では、加速プログラムは、複数の加速技術が次々と使用される実行のインスタンスを有する実行可能命令で構成される。一実施形態では、加速プログラムは、カーネルレベルのデータ構造を介してのトランスポート層で、ネットワークパケットの一つ以上のアプリケーションレベルのプロトコルペイロードへのアクセスを取得する。
【００５４】
他の形態では、本発明は、クライアントとサーバとのクライアント通信について、そのような通信には利用不可能と判断される仲介物を回避するよう、動的にリダイレクトするためのシステムおよび方法を対象とするものである。クライアント上の加速プログラムは、クライアントとサーバ間のトランスポート層接続を確立し、クライアントからサーバへの通信を傍受する。トランスポート層接続は、ゲートウェイ、プロキシ、機器等の仲介物を通して確立され得る。クライアント側の加速プログラムが、その仲介物はクライアントによるサーバへの通信には利用できないと判断する場合、加速プログラムはその仲介物を回避するために、自動的にサーバへの第二のトランスポート層接続を確立する。次に、加速プログラムは、傍受されたクライアントの通信を第二のトランスポート層接続を介してサーバへ送信する。加速プログラムは、クライアントのユーザまたはアプリケーションにはトランスペアレントに、傍受されたクライアントの通信をサーバへ自動的にリダイレクトする。
【００５５】
一形態では、本発明は、ある仲介物がクライアントによるサーバへの通信に使用できないと判断すると、その仲介物を回避するために、クライアント上でクライアントのサーバへの通信をリダイレクトするための方法に関するものである。方法には、クライアント上の加速プログラムにより、ある仲介物を介してクライアントとサーバ間のトランスポート層接続を確立することと、加速プログラムにより、その仲介物がクライアントによるトランスポート層接続を介してのサーバへの通信には使用できないことを判断することが含まれる。方法には、また、加速プログラムにより、クライアントからサーバへの通信を傍受することと、加速プログラムにより、加速プログラムとサーバとの間の第二トランスポート層接続を確立して仲介物を回避することが含まれる。一実施形態では、第二トランスポート層接続は、直接サーバとの間に確立される。他の実施形態では、第二トランスポート層接続は、第二仲介物を介してサーバとの間に確立される。仲介物および第二仲介物には、キャッシュ、ゲートウェイ、ファイアウォール、サーバ、プロキシ、ルータ、スイッチ、ブリッジが含まれる。
【００５６】
一実施形態では、本発明の方法には、加速プログラムにより、第二トランスポート層接続を介してサーバへの通信を送信することが含まれる。いくつかの実施形態では、方法には、加速プログラムを仲介物から受信すると、クライアントにより、その加速プログラムを自動的にインストールおよび実行することが含まれる。一実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれる。他の実施形態では、方法には、加速プログラムにより、次の加速技術のうちの一つを通信に使用することが含まれる。すなわち、１）圧縮、２）伝送制御プロトコル接続プーリング、３）伝送制御プロトコル接続多重化、４）伝送制御プロトコル接続バッファリング、５）キャッシング、である。その他の実施形態では、方法には、加速プログラムによる、クライアントとサーバ間の通信の暗号化が含まれる。
【００５７】
他の形態では、本発明は、ある仲介物がクライアントによるサーバへの通信に使用できないと判断すると、その仲介物を回避するために、クライアント上でクライアントのサーバへの通信をリダイレクトするためのシステムに関するものである。システムには、クライアント上の加速プログラムにより、仲介物を介してクライアントとサーバ間のトランスポート層接続を確立し、加速プログラムにより、その仲介物がクライアントによるトランスポート層接続を介してのサーバへの通信には使用できないことを判断するための手段が含まれる。システムには、また、加速プログラムにより、クライアントからサーバへの通信を傍受し、加速プログラムにより、加速プログラムとサーバとの第二トランスポート層接続を確立して仲介物を回避するための手段が含まれる。一実施形態では、システムは、第二トランスポート層接続を直接サーバとの間に確立する。他の実施形態では、システムは、第二トランスポート層接続を第二仲介物を介してサーバとの間に確立する。仲介物および第二仲介物には、キャッシュ、ゲートウェイ、ファイアウォール、サーバ、プロキシ、ルータ、スイッチ、ブリッジが含まれ得る。
【００５８】
本発明のシステムの一実施形態では、加速プログラムは、第二トランスポート層接続を介してサーバへ通信を送信する。他の実施形態では、システムには、加速プログラムを仲介物から受信すると、クライアントにより、その加速プログラムを自動的にインストールおよび実行するための手段が含まれる。いくつかの実施形態では、加速プログラムには、クライアントのネットワークスタックのトランスポート層にインタフェース接続したフィルタデバイスドライバが含まれる。他の実施形態では、システムには、加速プログラムが次の加速技術のうちの一つを通信に使用することが含まれる。すなわち、１）圧縮、２）伝送制御プロトコル接続プーリング、３）伝送制御プロトコル接続多重化、４）伝送制御プロトコル接続バッファリング、５）キャッシング、である。本発明の加速プログラムは、クライアントとサーバ間の通信の暗号化も行う。
【００５９】
本発明の様々な実施形態の詳細は、添付図面および以下の明細書に記述される。
【発明を実施するための最良の形態】
【００６０】
本発明の特徴および利点は、以下に記述される詳細な説明をこれらの図面と併せて読めば、より明らかになるであろう。詳細説明の中では、全体を通して類似した参照文字が対応する要素を示している。図面では、類似した参照番号が、一般に、同一の、機能的に類似した、および／または構造的に類似した要素を表している。
【００６１】
（本発明の詳細な説明）
本発明の具体例は、リモートアクセスアプリケーション等で、クライアントとサーバ間の通信性能を向上させるために、ネットワーク環境におけるクライアント側加速技術を展開、実行することを対象としている。ある具体例では、本発明のクライアント側加速プログラムを、クライアントの動作に対してトランスペアレントかつシームレスな方法で、クライアント上に自動的にインストールし、実行することを対象としている。他の具体例では、本発明は、サーバまたはリモートアプリケーションへのクライアントのアクセスが加速できると機器デバイスが判断すると、そのデバイスがクライアント側加速プログラムをクライアントに動的に提供することを対象としている。他の具体例では、本発明は、クライアント上で次の加速技術のうちの一つ以上を使用する加速プログラムを対象としている。すなわち、１）マルチプロトコル圧縮、２）転送制御プロトコルプーリング、３）転送制御プロトコル多重化、４）転送制御プロトコルバッファリング、５）キャッシング、である。ある具体例では、本発明は、これらの加速技術をトランスポート層で、カーネルレベルのデータ構造を使って、総合的かつ効果的方法で使用する。さらに他の具体例では、クライアント側加速プログラムは、プロキシのリダイレクト技術を使用して、任意の仲介デバイスを自動的に回避し、クライアントによるサーバまたはリモートアクセスアプリケーションへのアクセスを継続的に提供する。
【００６２】
本発明のクライアント側加速プログラムおよび機能は、いかなる種類および形態のネットワーク上でも通信し、本明細書に記載される本発明の動作を行うことが可能な、コンピュータ、ネットワークデバイス、または機器等いかなる種類および形態のコンピュータ機器でも展開および実行することができる。図１Ａおよび図１Ｂは、本発明の一実施形態を実施するのに役立つコンピュータ機器１００のブロック図を表している。図１Ａおよび図１Ｂに示されるように、各コンピュータ機器１００には、メインプロセッサ１０２、メインメモリ１２２が含まれる。図１Ａに示されるように、標準的なコンピュータ機器１００には、視覚的表示装置１２４、キーボード１２６および／またはマウス等のポインティングデバイス１２７が含まれている。各コンピュータ機器１００には、一つ以上の入力／出力装置１３０ａ〜１３０ｂ（一般に参照数字１３０を使って記載される）、およびメインプロセッサ１０２と通信しているキャッシュメモリ１４０のような、追加的、随意的要素も含まれていることがある。
【００６３】
メインプロセッサ１０２は、メインメモリ１２２からフェッチされる命令に応答し、処理する任意の論理回路である。多くの実施形態では、メインプロセッサはマイクロプロセッサユニットによって提供される。例えば、カリフォルニア州マウンテンビューのインテル社製のもの、イリノイ州ショウンバーグのモトローラ社製のもの、カリフォルニア州サンタクララのトランスメタ社製のもの、ＲＳ／６０００プロセッサ、ニューヨーク州ホワイトプレーンズのＩＢＭ社製のもの、または、カリフォルニア州サニーベールのアドバンストマイクロデバイシーズ社製のもの等である。コンピュータ１００は、上記のいずれかのプロセッサ、または本明細書に記載の動作が可能な、その他のプロセッサに基づいている。
【００６４】
メインメモリ１２２は、データを格納することができ、どの格納場所にもマイクロプロセッサ１０２が直接アクセス可能な、一つ以上のメモリーチップで、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バーストＳＲＡＭまたはシンクバーストＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ファーストページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、エクステンデッドデータアウトプットＲＡＭ（ＥＤＯ  ＲＡＭ）、エクステンデッドデータアウトプットＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バーストエクステンデッドデータアウトプットＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、シンクリンクＤＲＡＭ（ＳＬＤＲＡＭ）、ダイレクトラムバスＤＲＡＭ（ＤＲＤＲＡＭ）、フェロエレクトリックＲＡＭ（ＦＲＡＭ）等である。メインメモリ１２２は、上記のいずれかのメモリーチップ、または本明細書に記載の動作が可能な、その他の利用可能なメモリーチップに基づいている。図１Ａに示される実施形態では、プロセッサ１０２は、システムバス１５０を通してメインメモリ２０４と通信する（以下により詳しく説明）。図１Ａは、プロセッサが、メモリーポート１０３を介してメインメモリ１２２と直接通信する、コンピュータ機器１００の一実施形態を表している。例えば、図１Ｂでは、メインメモリ１２２はＤＲＤＲＡＭであり得る。
【００６５】
図１Ｂは、メインプロセッサ１０２が、時にバックサイドバスと呼ばれるセカンダリーバスを通してキャッシュメモリ１４０と直接通信する、一実施形態を表している。他の実施形態では、メインプロセッサ１０２は、システムバス１５０を使って、キャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、通常、メインメモリ１２２より応答時間が速く、通常、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。
【００６６】
図１Ａに示される実施形態では、プロセッサ１０２は、ローカルシステムバス１５０を介して、様々なＩ／Ｏ（入力／出力）装置１３０と通信する。メインプロセッサ１０２をいずれかのＩ／Ｏ装置１３０と接続するために、様々なバスが使われ、それには、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、マイクロチャンネルアーキテクチャ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−エクスプレスバス、またはニューバス等が含まれる。Ｉ／Ｏ装置がビデオディスプレイ１２４である実施形態については、プロセッサ１０２は、アドバンストグラフィックスポート（ＡＧＰ）を使って、ディスプレイ１２４と通信する。図１Ｂは、メインプロセッサ１０２が、ハイパートランスポート、ラピッドＩ／Ｏ、またはインフィニバンドを介してＩ／Ｏ装置１３０ｂと直接通信する、コンピュータ１００の一実施形態を表している。図１Ｂはまた、ローカルバスと直接通信が混在する一実施形態も表している。すなわち、プロセッサ１０２はＩ／Ｏ装置１３０ｂと直接通信しながら、ローカルインターコネクトバスを使ってＩ／Ｏ装置１３０ａと通信する。
【００６７】
コンピュータ機器１００は、任意の適切なインストール装置１１６をサポートし得る。それは、例えば、３．５インチ、５．２５インチのディスク、またはＺＩＰディスクを受け入れるフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、様々なフォーマットのテープドライブ、ＵＳＢ装置、ハードドライブ、その他、本発明に関連する加速ソフトウェア１２０、またはその一部のようなソフトウェアやプログラムのインストールに適した装置である。
【００６８】
コンピュータ機器１００は、さらに、オペレーティングシステムその他の関連ソフトを記憶し、本発明の加速プログラム１２０に関連するプログラム等のアプリケーションソフトウェアプログラムを記憶するための記憶装置１２８、例えば、一つ以上のハードディスクドライブまたはＲＡＩＤ（ｒｅｄｕｎｄａｎｔ  ａｒｒａｙｓ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋ）で構成される。オプションとして、インストール装置１１６のいずれかを、記憶装置１２８として使うこともできる。また、オペレーティングシステムおよびソフトウェアプログラムは、起動用媒体、例えば、ＫＮＯＰＰＩＸ（登録商標）、ＧＮＵ／ＬｉｎｕｘディストリビューションとしてＫｎｏｐｐｉｘ．ｎｅｔから入手できるＧＮＵ／ＬｉｎｕｘのためのブータブルＣＤ等のブータブルＣＤから実行することができる。
【００６９】
さらに、コンピュータ機器１００には、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、またはインターネットとのインタフェースのためのネットワークインタフェース１１８が含まれ、その接続は、標準の電話回線、ＬＡＮまたはＷＡＮリンク（例えば、８０２．１１、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（例えば、ＩＳＤＮ、フレームリレー、ＡＴＭ）、無線接続、または以上のいずれかまたは全ての組み合わせを含む様々な接続を通じて行われるが、必ずしもこれらに限定されない。ネットワークインタフェース１１８は、内蔵ネットワークアダプター、ネットワークインタフェースカード、ＰＣＭＣＩＡネットワークカード、カードバスネットワークアダプター、無線ネットワークアダプター、ＵＳＢネットワークアダプター、モデム、または、コンピュータ機器１００と、通信および本明細書に記載の動作の実行が可能なネットワークとをインタフェースするのに適した、その他の装置で構成される。
【００７０】
コンピュータ機器１００には、多様なＩ／Ｏ装置１３０ａ〜１３０ｎが存在する。入力装置には、キーボード、マウス、トラックパッド、トラックボール、マイクロフォン、ドローイングタブレットが含まれる。出力装置には、ビデオディスプレイ、スピーカー、インクジェットプリンタ、レーザープリンタ、昇華型プリンタが含まれる。Ｉ／Ｏ装置は、図１Ａに示されるように、Ｉ／Ｏコントローラ１２３によって制御され得る。Ｉ／Ｏコントローラは、一つ以上のＩ／Ｏ装置、例えばキーボード１２６およびポインティングデバイス１２７（例えばマウスまたは光学ペン）を制御し得る。さらに、Ｉ／Ｏ装置は、ストレージ１２８および／またはインストール媒体１１６もコンピュータ機器１００に提供することがある。さらに別の実施形態では、コンピュータ機器１００は、カリフォルニア州ロスアラミトスのツインテクインダストリー社製のＵＳＢフラッシュドライブラインの装置のような携帯用ＵＳＢ記憶装置を受け入れるためのＵＳＢ接続を提供する。
【００７１】
いくつかの実施形態では、コンピュータ機器１００は、複数のディスプレイ装置１２４ａ〜１２４ｎで構成され、またはそれらに接続され、それらは同じまたは異なる種類および／または形状である。そのため、Ｉ／Ｏ装置１３０ａ〜１３０ｎのいずれか、および／またはＩ／Ｏコントローラ１２３は、コンピュータ機器１００による複数のディスプレイ装置１２４ａ〜１２４ｎの接続および使用をサポートし、可能にし、あるいは提供する種類および／または形状の適切なハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせで構成される。例えば、コンピュータ機器１００には、ディスプレイ装置１２４ａ〜１２４ｎとインタフェース、通信、接続、もしくは使用するための種類および／または形状のビデオアダプタ、ビデオカード、ドライバ、および／またはライブラリが含まれる。一実施形態では、ビデオアダプタは、複数のディスプレイ装置１２４ａ〜１２４ｎとインタフェースする複数のコネクタで構成される。その他の実施形態では、コンピュータ機器１００には、複数のビデオアダプタが含まれ、各ビデオアダプタは、一つ以上のディスプレイ装置１２４ａ〜１２４ｎに接続される。いくつかの実施形態では、コンピュータ機器１００のオペレーティングシステムの一部は、複数のディスプレイ１２４ａ〜１２４ｎを使うために設定され得る。その他の実施形態では、一つ以上のディスプレイ装置１２４ａ〜１２４ｎは、コンピュータ機器１００に、例えばネットワークを介して接続されるコンピュータ機器１００ａおよび１００ｂ等、一つ以上の他のコンピュータ機器によって提供され得る。これらの実施形態には、他のコンピュータのディスプレイ装置を、コンピュータ機器１００の第二のディスプレイ装置１２４ａとして使うように設計、構成された種類のソフトウェアが含まれる。当業者なら、コンピュータ機器１００が複数のディスプレイ装置１２４ａ〜１２４ｎを持つように設定される、様々な方法および実施形態を認識し、理解するだろう。
【００７２】
さらに進んだ実施形態では、Ｉ／Ｏ装置１３０は、システムバス１５０と外部の通信バス、例えば、ＵＳＢバス、アップルデスクトップバス、ＲＳ−２３２シリアルコネクション、ＳＣＳＩバス、ファイヤーワイヤーバス、ファイヤーワイヤー８００バス、イーサネット（登録商標）バス、アップルトークバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、シリアルプラスバス、ＳＣＩ／ＬＡＭＰバス、ファイバーチャンネルバス、シリアルアタッチド小型コンピュータ用周辺機器インタフェース（ＳＣＳＩ）バス等の間のブリッジ１７０である。
【００７３】
図１Ａおよび図１Ｂに表されるようなコンピュータ機器１００は、通常、オペレーティングシステムの制御のもとで動作し、オペレーティングシステムは、タスクのスケジューリングおよびシステム資源へのアクセスを制御する。コンピュータ機器１００は、例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）のオペレーティングシステムのいずれかのバージョン、ＵＮＩＸ（登録商標）およびＬｉｎｕｘオペレーティングシステムの様々なリリース、マッキントッシュコンピュータ用のＭａｃＯＳ（登録商標）のいずれかのバージョン、組み込みオペレーティングシステム、リアルタイムオペレーティングシステム、オープンソースオペレーティングシステム、専用オペレーティングシステム、モバイルコンピュータ機器用のオペレーティングシステム、または、コンピュータ機器での作動が可能で、本明細書に記載の動作の実行が可能な、その他のオペレーティングシステム等、どんなオペレーティングシステムでも実行することができる。標準的なオペレーティングシステムに含まれるのは、ＷＩＮＤＯＷＳ（登録商標）３．ｘ、ＷＩＮＤＯＷＳ（登録商標）９５、ＷＩＮＤＯＷＳ（登録商標）９８、ＷＩＮＤＯＷＳ（登録商標）２０００、ＷＩＮＤＯＷＳ（登録商標）ＮＴ  ３．５１、ＷＩＮＤＯＷＳ（登録商標）ＮＴ  ４．０、ＷＩＮＤＯＷＳ（登録商標）ＣＥ、そしてＷＩＮＤＯＷＳ（登録商標）ＸＰ（これらは全て、ワシントン州レドモンドのマイクロソフト社製）、ＭａｃＯＳ（カリフォルニア州クパチーノのアップルコンピュータ社製）、ＯＳ／２（ニューヨーク州アーモンクのＩＢＭ社製）、そしてＬｉｎｕｘ（ユタ州ソルトレークシティのカルデラ社によって配布される無料のオペレーティングシステム）、または任意の種類および／または形式のＵｎｉｘ（登録商標）のオペレーティングシステムである。
【００７４】
他の実施形態では、コンピュータ機器１００は、その機器にふさわしい、異なるプロセッサ、オペレーティングシステム、入力装置を持ち得る。例えば、ある実施形態では、コンピュータ機器１００は、パーム社製のＴｒｅｏ１８０、２７０、３００、６００または６５０スマートフォンである。この実施形態では、Ｔｒｅｏスマートフォンは、パームＯＳオペレーティングシステムの制御の下で動作し、ペン型入力装置および５方向ナビゲーター装置を含む。さらに、コンピュータ機器１００は、通信が可能で、本明細書に記載の動作を実行するに足る十分なプロセッサ能力と記憶容量を持つ、ワークステーション、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、サーバ、ハンドヘルドコンピュータ、携帯電話、その他のコンピュータ、または、他の形体のコンピュータ機器または通信機器である。
【００７５】
１つの局面において、本発明は、１つ以上の加速技術を実行するクライアント側の加速プログラムに関し、該技術は、サーバによって提供されるアプリケーションへのアクセスなどの、クライアントのサーバとの通信および／またはサーバへのアクセスを加速、向上、またはさもなくば改善する。ここで図２Ａを参照して、本発明の加速プログラム１２０を有するクライアント２０５が示される。簡単に概観すると、クライアント２０５は、コンピューティングデバイス１００上で作動し、コンピューティングデバイス１００は、カーネルモード２０２とユーザモード２０２とを用いるオペレーティングシステムと、１つ以上の層２１０ａ〜２１０ｂを有するネットワークスタック２１０とを有する。クライアント２０５は、１つ以上のアプリケーション２２０ａ〜２２０ｎをインストールおよび／または実行したということがあり得る。一部の実施形態において、１つ以上のアプリケーション２２０ａ〜２２０ｎは、ネットワークスタック２１０を介してネットワークと通信し得る。アプリケーション２２０Ｎのうちの１つはまた、たとえば第１のプログラム２２２を含み得、そのプログラムは、加速プログラム１２０をインストールおよび／または実行するために一部の実施形態において使用され得る。
【００７６】
クライアント２０５のネットワークスタック２１０は、ネットワークへの接続性およびネットワークとの通信を提供するための、任意のタイプおよび形態のソフトウェア、またはハードウェア、またはそれらの任意の組み合わせを含み得る。一実施形態において、ネットワークスタック２１０は、ネットワークプロトコルスーツのためのソフトウェアインプリメンテーションを含む。ネットワークスタック２１０は、当業者が認識して理解するような、開放型システム間相互接続（Ｏｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）（ＯＳＩ）通信モデルの任意のネットワーク層などの、１つ以上のネットワーク層を含み得る。そのように、ネットワークスタック２１０は、ＯＳＩモデルの以下の層のうちのいずれかに対して、任意のタイプおよび形態のプロトコルを含み得る：１）物理的リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）プレゼンテーション層、および７）アプリケーション層。一実施形態において、ネットワークスタック３１０は、インターネットプロトコル（ＩＰ）のネットワーク層プロトコルにわたる転送制御プロトコル（ＴＣＰ）を含み得、これは一般的にＴＣＰ／ＩＰと呼ばれている。一部の実施形態において、ＴＣＰ／ＩＰプロトコルは、イーサネット（登録商標）プロトコルにわたって運ばれ（ｃａｒｒｉｅｄ  ｏｖｅｒ）得、イーサネット（登録商標）プロトコルは、ＩＥＥＥ８０２．３によってカバーされるプロトコルなどの、ＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）のファミリーのうちのいずれかを含み得る。一部の実施形態において、ネットワークスタック２１０は、ＩＥＥＥ８０２．１１および／またはモバイルインターネットプロトコルなどの、任意のタイプおよび形態のワイヤレスプロトコルを含む。
【００７７】
ＴＣＰ／ＩＰベースのネットワークを鑑みると、以下を含む任意のＴＣＰ／ＩＰベースのプロトコルが使用され得る：メッセージングアプリケーションプログラミングインタフェース（Ｍｅｓｓａｇｉｎｇ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）（ＭＡＰＩ）（ｅメール）、ファイル転送プロトコル（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＨＴＴＰ）、コモンインターネットファイルシステム（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）（ＣＩＦＳ）プロトコル（ファイル転送）、インデペンデントコンピューティングアークテクチャ（Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）（ＲＤＰ）、ワイヤレスアプリケーションプロトコル（Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）（ＷＡＰ）、モバイルＩＰ（Ｍｏｂｉｌｅ  ＩＰ）プロトコル、およびボイスオーバＩＰ（Ｖｏｉｃｅ  Ｏｖｅｒ  ＩＰ）（ＶｏＩＰ）プロトコル。別の実施形態において、ネットワークスタック２１０は、変更転送制御プロトコルなどの任意のタイプおよび形態の転送制御プロトコルを含み、それはたとえば、トランザクションＴＣＰ（Ｔｒａｎｓａｃｔｉｏｎ  ＴＣＰ）（Ｔ／ＴＣＰ）、選択肯定応答（ｓｅｌｅｃｔｉｏｎ  ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）を用いるＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大きなウィンドウを用いるＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコルなどの輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコルである。他の実施形態において、ＩＰにわたるＵＤＰなどの任意のタイプおよび形態のユーザデータグラムプロトコル（ＵＤＰ）が、ネットワークスタック２１０によって使用され得る（音声通信またはリアルタイムデータ通信など）。
【００７８】
さらに、ネットワークスタック３１０は、ＴＣＰドライバまたはネットワーク層ドライバなどの、１つ以上の層をサポートする１つ以上のネットワークドライバを含み得る。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、またはコンピューティングデバイス１００の任意のネットワークインタフェースカードまたは他のネットワークアクセスコンポーネントの一部として、含まれ得る。一部の実施形態において、ネットワークスタック２１０のネットワークドライバのうちのいずれかは、本明細書中に記載される本発明の技術のいずれかをサポートして、ネットワークスタック２１０のカスタム部分または変更部分を提供するように、カスタマイズ、変更、または適合され得る。他の実施形態において、加速プログラム１２０は、ネットワークスタック２１０とともに作動または作用するように設計および構築され、ネットワークスタック２１０は、クライアント２０５のオペレーティングシステムによってインストールまたはさもなくば、提供される。
【００７９】
ネットワークスタック２１０は、クライアント２０５のネットワーク通信に関連する任意の情報およびデータを、受信、取得、提供、さもなくば、アクセスするための、任意のタイプおよび形態のインタフェースを含む。一実施形態において、ネットワークスタック２１０に対するインタフェースは、アプリケーションプログラミングインタフェース（ＡＰＩ）を含む。インタフェースはまた、任意の関数呼出し、フッキングまたはフィルタリングのメカニズム、イベントまたはコールバックのメカニズム、または任意のタイプのインタフェース技術を含み得る。インタフェースを介したネットワークスタック２１０は、ネットワークスタック２１０の機能性または動作に関連する、オブジェクトなどの、任意のタイプおよび形態のデータ構造を、受信または提供し得る。たとえば、データ構造は、ネットワークパケットに関連する情報およびデータ、または１つ以上のネットワークパケットを含み得る。一部の実施形態において、データ構造は、トランスポート層のネットワークパケットなどの、ネットワークスタック２１０のプロトコル層において処理されたネットワークパケットの部分を含む。一部の実施形態において、データ構造２２５はカーネルレベルデータ構造を含むが、他の実施形態において、データ構造２２５はユーザモードのデータ構造を含む。カーネルレベルデータ構造は、カーネルモード２０２において動作するネットワークスタック２１０の部分に取得されたかまたは関連するデータ構造、またはカーネルモード２０２において実行するネットワークドライバまたは他のソフトウェア、またはオペレーティングシステムのカーネルモードにおいて実行または動作するサービス、プロセス、タスク、スレッドまたは他の実行可能な命令によって取得されたかまたは受信された任意のデータ構造を含み得る。
【００８０】
さらに、ネットワークスタック２１０の一部の部分は、カーネルモード２０２（たとえばデータリンクまたはネットワーク層）において実行または動作し得るが、他の部分は、ネットワークスタック２１０のアプリケーション層などの、ユーザモード２０３において実行または動作する。たとえば、ネットワークスタックの第１の部分２１０ａは、アプリケーション２２０ａ〜２２０ｎに対してネットワークスタック２１０へのユーザモードアクセスを提供し得るが、ネットワークスタック２１０の第２の部分２１０ａは、ネットワークへのアクセスを提供する。一部の実施形態において、ネットワークスタックの第１の部分２１０ａは、層５〜７のうちのいずれかなどの、ネットワークスタック２１０の１つ以上の上位層を含み得る。他の実施形態において、ネットワークスタック２１０の第２の部分２１０ｂは、層１〜４のうちのいずれかなどの、１つ以上の下位層を含む。ネットワークスタック２１０の第１の部分２１０ａおよび第２の部分２１０ｂの各々は、ユーザモード２０３、カーネルモード２０２、またはそれらの組み合わせにおける任意の１つ以上のネットワーク層において、またはネットワーク層の任意の部分、またはネットワーク層のインタフェースポイント、またはユーザモード２０３およびカーネルモード２０２へのインタフェースポイントの任意の部分において、ネットワークスタック２１０の任意の部分を含み得る。
【００８１】
本発明の加速プログラム１２０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを含み得る。一部の実施形態において、加速プログラム１２０は、本明細書中に記載される本発明の機能性および動作を実行または提供するように構築および設計された、任意のタイプおよび形態の実行可能な命令を含む。一部の実施形態において、加速プログラム１２０は、任意のタイプおよび形態のアプリケーション、プログラム、サービス、プロセス、タスク、またはスレッドを含む。一実施形態において、加速プログラム１２０は、ネットワークスタック２１０とともにインタフェースおよび作用するように構築および設計されたネットワークドライバなどの、ドライバを含む。加速プログラム１２０の実行可能な命令の論理、機能、および／または動作は、本発明の以下の加速技術のうちの１つ以上を実行し得る：１）マルチプロトコル圧縮２３８、２）転送制御プロトコルプーリング２２４、３）転送制御プロトコル多重化２２６、４）転送制御プロトコルバッファリング２２８、および５）キャッシュマネジャー２３２を介したキャッシング。これらは以下にさらに詳細に説明される。さらに、加速プログラム１２０は、クライアント２０５によって受信および／または送信された任意の通信の暗号化２３４および／または復号化を実行し得る。一部の実施形態において、加速プログラム１２０はまた、クライアント２０５と、サーバなどの別のコンピューティングデバイス１００との間のトンネリングを実行する。他の実施形態において、加速プログラム１２０は、仮想プライベートネットワークをサーバに提供する。
【００８２】
一部の実施形態において、加速プログラム１２０は、トランスポート層などの、ネットワークスタック２１０の１つ以上の層において動作する。一実施形態において、加速プログラム１２０は、フィルタドライバ、フッキングメカニズム、または、トランスポートドライバインターフェースドライバ（ＴＤＩ）を介するなどの、ネットワークスタックのトランスポート層に対してインタフェースする、任意の形態およびタイプの適切なネットワークドライバインタフェースを含む。一部の実施形態において、加速プログラム１２０は、トランスポート層などの第１のプロトコル層、およびトランスポート層よりも上位の任意の層（たとえばアプリケーションプロトコル層）などの別のプロトコル層に対して、インタフェースする。一実施形態において、加速プログラム１２０は、ネットワークドライバインタフェース仕様（Ｎｅｔｗｏｒｋ  Ｄｒｉｖｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）（ＮＤＩＳ）に準拠するドライバ、またはＮＤＩＳドライバを含み得る。別の実施形態において、加速プログラム１２０は、ミニフィルタ（ｍｉｎ−ｆｉｌｔｅｒ）またはミニポートフィルタを含み得る。一実施形態において、加速プログラム１２０、またはその部分は、カーネルモード２０２において動作する。別の実施形態において、加速プログラム１２０、またはその部分は、ユーザモード２０３において動作する。一部の実施形態において、加速プログラム１２０の部分はカーネルモード２０２において動作するが、加速プログラム１２０の別の部分はユーザモード２０３において動作する。他の実施形態において、加速プログラム１２０は、ユーザモード２０３において動作するが、カーネルレベルデータ構造２２５を取得するためなどに、ドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの部分に対してインタフェースする。さらなる実施形態において、加速プログラム１２０は、アプリケーション２２０ａ〜２２０ｎなどの、ユーザモードのアプリケーションまたはプログラムである。
【００８３】
加速プログラム１２０は、ネットワークスタック２１０のどの他のプロトコル層に対してもトランスペアレントな態様で、プロトコル層において動作し得、またはプロトコル層とインタフェースし得る。たとえば、一実施形態において、加速プログラム１２０は、ネットワーク層などの、トランスポート層よりも下位の任意のプロトコル層、およびセッション、プレゼンテーション、またはアプリケーション層プロトコルなどの、トランスポート層よりも上位の任意のプロトコル層に対してトランスペアレントなように、ネットワークスタック２１０のトランスポート層とともに動作するかまたはトランスポート層とインタフェースする。このことは、ネットワークスタック２１０の他のプロトコル層が、望まれるように、および本発明の加速プログラム１２０を使用するための変更なしに、動作することを可能にする。そのように、加速プログラム１２０は、ＴＣＰ／ＩＰにわたる任意のアプリケーション層プロトコルなどの、トランスポート層によって運ばれる任意のプロトコルを介して提供される任意の通信を加速するように、トランスポート層とインタフェースし得る。
【００８４】
さらに、加速プログラム１２０は、任意のアプリケーション２２０ａ〜２２０ｎ、クライアント２０５のユーザ、およびクライアント２０５と通信するサーバなどの任意の他のコンピューティングデバイスに対してトランスペアレントな態様で、ネットワークスタック２１０において動作し得るかまたはネットワークスタック２１０とインタフェースし得る。加速プログラム１２０は、アプリケーション２２０ａ〜２２０ｎを変更することなしに、加速プログラム１２０がアプリケーション２２０ａ〜２２０ｎの任意の通信を加速し得るような態様で、クライアント２０５上でインストールおよび／または実行され得る。一部の実施形態において、クライアント２０５のユーザ、またはクライアント２０５と通信するコンピューティングデバイスは、加速プログラム１２０の存在、実行、または動作に気がつかない。そのように、一部の実施形態において、加速プログラム１２０は、アプリケーション２２０ａ〜２２０ｎ、クライアント２０５のユーザ、サーバなどの別のコンピューティングデバイス、または加速プログラム１２０によってインタフェースされるプロトコル層の上位および／または下位のプロトコル層のいずれかに対してトランスペアレントなように、インストール、実行、および／または動作される。
【００８５】
一部の実施形態において、加速プログラム１２０は、統合された態様または方法で、加速技術２２４、２２６、２２８、２３２のうちの１つ以上を実行する。一実施形態において、加速プログラム１２８は、ネットワークスタック２１０のトランスペアレントなプロトコル層において通信を傍受、フッキング、フィルタリング、または受信する任意のタイプおよび形態のメカニズムを含む。トランスポート層においてクライアント２０５のネットワークパケットを傍受し、カーネルレベルデータ構造２２５などのデータ構造を介してトランスポート層においてネットワークスタック２１０に対してインタフェースすることによって、加速プログラム１２０は、転送制御プロトコル（ＴＣＰ）バッファリング、ＴＣＰ／ＩＰプーリング、およびＴＣＰ多重化などの、ネットワークパケット上で、トランスポート層に関連した加速技術を実行し得る。さらに、加速プログラム１２０は、トランスポート層プロトコルのネットワークパケットのペイロードとして運ばれる、プロトコルまたはマルチプルプロトコルのいずれかの上で、圧縮２２５を実行し得る。
【００８６】
一実施形態において、加速プログラム１２０は、１つ以上のネットワークパケット（たとえばクライアント２０５からの要求またはサーバからの応答を含むネットワークパケット）の任意の部分に対するアクセスを提供するカーネルレベルデータ構造２２５を使用する。一実施形態において、カーネルレベルデータ構造は、所望の加速技術を実行するように、加速プログラム１２０によって使用され得る。一実施形態において、加速プログラム１２０はカーネルレベルデータ構造２２５を使用するときにカーネルモード２０２で実行するが、別の実施形態において、加速プログラム１２０はカーネルレベルデータ構造２２５を使用するときにユーザモード２０３で実行する。一部の実施形態において、カーネルレベルデータ構造は、第２のカーネルレベルデータ構造、または任意の所望のユーザレベルデータ構造に対してコピーされ得るかまたは渡され得る。加速プログラム１２０は、一般的に図２Ａにおいて、ユーザモード２０３で動作する第１の部分と、カーネルモード２０２で動作する第２の部分とを有するように示されるが、一部の実施形態において、加速プログラム１２０の任意の部分は、ユーザモード２０３またはカーネルモード２０２において実行し得る。一部の実施形態において、加速プログラム１２０はユーザモード２０３のみにおいて動作し得るが、他の実施形態において、加速プログラム１２０はカーネルモード２０２のみにおいて動作し得る。
【００８７】
さらに、ネットワークスタック２１０のトランスポート層において傍受するか、またはカーネルレベルデータ構造２２５を介してネットワークパケットへのアクセスを取得することによって、加速プログラム１２０は、単一のインタフェースポイントにおいて、または実行の単一のポイントにおいて、または加速プログラム１２０の任意の実行可能な命令を実行するときに、本発明の複数の加速技術を実行または適用し得る。たとえば、一実施形態において、加速プログラム１２０の機能または命令のセットにおいて、加速技術を実行するように構築されて設計された実行可能な命令のセットを呼び出すことなどによって、複数の加速技術が実行され得る。一部の実施形態において、加速プログラム１２０は、１つのインタフェースポイント、実行の場所、または命令呼び出しのセットにおいて、任意のプログラム、サービス、プロセス、タスク、スレッド、または実行可能な命令に対する１つ以上のアプリケーションプログラミングインタフェース（ＡＰＩ）は、以下を提供するように設計されて構築されている。すなわち、１）マルチプロトコル圧縮２３８、２）転送制御プロトコルプーリング２２４、３）転送制御プロトコル多重化２２６、４）転送制御プロトコルバッファリング２２８、および５）キャッシュマネジャー２３２を介したキャッシング、および一部の実施形態において暗号化２３４である。
【００８８】
加速プログラム１２０の実行可能な命令における１つの場所またはロケーションにおいて、またはトランスポート層などのネットワークスタック２１０の１つのプロトコル層において、複数の加速技術を実行することによって、これらの加速技術の統合が、より効率的かつ効果的に実行される。１つの局面において、プロセス間のコンテキストスイッチの数が低減され得、ならびに、使用されるデータ構造、または必要とされるかさもかければ使用されるメモリにおけるデータ構造のコピーの数を低減する。さらに、加速技術のいずれかの同期化およびいずれかの間の通信は、加速プログラム１２０の実行可能な命令のセットにおいて、密接に結合された態様などで、より効率的に実行され得る。そのように、実行すべき技術である加速技術、および技術間で共有されて渡されるべきデータおよび情報の順序に関する、任意の論理、ルール、機能性、または動作は、より効率的に実行され得る。加速プログラム１２０は、トランスポート層においてＴＣＰパケットを傍受し得、カーネルレベルデータ構造２２５を介してＴＣＰパケットのペイロードを取得し得、次に所望の加速技術を所望の順序で実行し得る。たとえば、ネットワークパケットは、最初に圧縮され得、次にキャッシングされ得る。別の実施例において、圧縮されてキャッシングされたデータは、バッファリング、プーリング、および／または多重化されたＴＣＰ接続を介して、サーバに通信され得る。
【００８９】
一部の実施形態において、図２Ａをさらに参照して、第１のプログラム２２２は、自動的に、静かに、トランスペアレントに、または別なふうに、加速プログラム１２０をインストールおよび／または実行するために使用され得る。一実施形態において、第１のプログラム２２２は、ＡｃｔｉｖＸ制御またはＪａｖａ（登録商標）制御、またはアプリケーション２２０ａ〜２２０ｎによってロードされて実行されるスクリプトなどの、プラグインコンポーネントを含む。たとえば、第１のプログラムは、アプリケーション２２０のメモリスペースまたはコンテクストにおけるように、ウェブブラウザアプリケーション２２０によってロードされて実行されるＡｃｔｉｖＸ制御を含む。別の実施形態において、第１のプログラム２２２は、ブラウザなどの、アプリケーション２２０ａ〜２２０ｎによってロードされて実行される実行可能な命令のセットを含む。一実施形態において、第１のプログラム２２２は、加速プログラム１２０をインストールするように設計されて構築されたプログラムを含む。一部の実施形態において、第１のプログラム２２２は、別のコンピューティングデバイスから、ネットワークを介して、加速プログラム１２０を取得、ダウンロード、または受信する。別の実施形態において、第１のプログラム２２２は、クライアント２０５のオペレーティングシステム上でネットワークドライバなどのプログラムをインストールするための、インストーラプログラムまたはプラグアンドプレイマネジャーである。
【００９０】
他の実施形態において、第１のプログラム２２２は、加速技術のいずれかなどの、本明細書中に記載される加速プログラム１２０の機能性、動作、および論理のいずれかを容易にするかまたは実行するために、加速プログラム１２０の機能性、動作、および論理の部分を含み得る。一部の実施形態において、第１のプログラム２２２は、トランスポート層接続などの接続、またはセキュアソケット層（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）（ＳＳＬ）通信セッションなどの、サーバ上の機器との通信セッションを確立するために使用される。一実施形態において、第１のプログラム２２２は、仮想プライベートネットワーク接続および通信セッションの確立を確立するかまたは容易にするために使用される。
【００９１】
図２Ａに示されるような、加速プログラム１２０のキャッシュマネジャー２３２またはクライアント２０５は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組み合わせを含み得ることによって、サーバ２０６ａ〜２０６ｎによってサーブされるオブジェクトまたは動的に生成されたオブジェクトなどの、任意のタイプおよび形態のコンテンツの、キャッシュアクセス、制御、および管理を提供する。キャッシュマネジャー２３２によって処理されて格納されたデータ、オブジェクト、またはコンテンツは、マーク付け言語などの任意のフォーマットのデータを含み得るか、または任意のプロトコルを介して通信され得る。一部の実施形態において、キャッシュマネジャー２３２は、他の場所で格納されたもともとのデータ、または以前に計算、生成、または送信されたデータを複製する。ここで、もともとのデータは、キャッシュメモリエレメントを読み出すのに対して、フェッチ、計算、またはさもなくば、取得するためにより長いアクセス時間を必要とし得る。ひとたびデータがキャッシュメモリエレメントに格納されると、将来の使用は、もともとのデータを再びフェッチしたり再計算したりするのではなく、キャッシングされたコピーにアクセスすることによってなされ得、それによってアクセス時間を低減する。一部の実施形態において、キャッシュメモリエレメントは、クライアント２０５のメモリにおいてデータオブジェクトを含み得る。他の実施形態において、キャッシュメモリエレメントは、クライアント２０５によって別に使用されるメモリよりも速いアクセス時間を有するメモリを含み得る。他の実施形態において、キャッシュメモリエレメントは、ハードディスクの部分などの、クライアント２０５の任意のタイプおよび形態のストレージエレメントを含み得る。さらに別の実施例において、キャッシュマネジャー２３２は、データ、オブジェクト、および他のコンテンツをキャッシングするための、メモリ、ストレージ、または処理ユニットの、任意の部分および組み合わせを使用し得る。
【００９２】
さらに、本発明のキャッシュマネジャー２３２は、本明細書中に記載される本発明の技術の任意の実施形態を実行するために、任意の論理、機能、ルール、または動作を含む。たとえば、キャッシュマネジャー２３２は、無効期間の満了に基づいて、またはクライアント２０５ａ〜２０５ｎまたはサーバ２０６ａ〜２０６ｎから無効コマンドを受信したときに、オブジェクトを無効にする、論理または機能性を含む。一部の実施形態において、キャッシュマネジャー２３２は、カーネルスペース２０２において（他の実施形態ではユーザスペース２０３において）実行するプログラム、サービス、プロセス、またはタスクとして動作し得る。一実施形態において、キャッシュマネジャー２３２の第１の部分はユーザスペース２０３において実行するが、第２の部分はカーネルスペース２０２において実行する。一部の実施形態において、キャッシュマネジャー２３２は、書替え可能ゲートアレイ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）（ＦＰＧＡ）、プログラム可能論理デバイス（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）（ＰＬＤ）、または専用集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）（ＡＳＩＣ）などの、任意のタイプの汎用プロセッサ（ＧＰＰ）または任意の他のタイプの集積回路を含み得る。
【００９３】
加速プログラム１２０の暗号化エンジン２３４またはクライアント２０５は、ＳＳＬまたはＴＬＳなどの任意のセキュリティ関連のプロトコル、またはそれに関連する任意の機能の処理を取り扱うための、任意の論理、ビジネスルール、機能、または動作を含む。たとえば、暗号化エンジン２３４は、クライアント２０５によって通信されるネットワークパケットまたはその任意の部分を暗号化および復号化する。暗号化エンジン２３４はまた、クライアント２０５ａ〜２０５ｎのために、ＳＳＬまたはＴＬＳ接続を設定または確立し得る。そのように、暗号化エンジン２３４は、ＳＳＬ処理のオフローディング（ｏｆｆｌｏａｄｉｎｇ）および加速を提供する。一実施形態において、暗号化エンジン２３４は、トンネリングプロトコルを使用することによって、クライアント２０５ａ〜２０５ｎとサーバなどの別のコンピューティングデバイスとの間に、仮想プライベートネットワークを提供する。
【００９４】
図２Ａをさらに参照して、加速プログラム１２０のマルチプロトコル圧縮エンジン２３８またはクライアント２０５は、クライアント２０５のネットワークスタック２１０によって使用されるプロトコルのいずれかなどの、ネットワークパケットの１つ以上のプロトコルを圧縮するための任意の論理、ビジネスルール、機能、または動作を含む。たとえば、マルチプロトコル圧縮２３８は、圧縮および解凍ユーティリティーを含み得、該ユーティリティーは、ＧＺｉｐ圧縮および解凍、ディファレンシャル（ｄｉｆｆｅｒｅｎｔｉａｌ）圧縮およびアンコンプレッション（ＵｎＣｏｍｐｒｅｓｓｉｏｎ）、またはネットワークを介して送信されるべきデータを圧縮および解凍するための、任意の他の専用の（ｐｒｏｐｒｉｅｔａｒｙ）または公的に利用可能なユーティリティーを含む。一実施形態において、マルチプロトコル圧縮エンジン２３８は、クライアント２０５とサーバなどの別のコンピューティングデバイスとの間で双方向的に、任意のＴＣＰ／ＩＰベースのプロトコルを圧縮する。ＴＣＰ／ＩＰベースプロトコルは、メッセージングアプリケーションプログラミングインタフェース（Ｍｅｓｓａｇｉｎｇ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）（ＭＡＰＩ）（ｅメール）、ファイル転送プロトコル（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＨＴＴＰ）、コモンインターネットファイルシステム（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）（ＣＩＦＳ）プロトコル（ファイル転送）、インデペンデントコンピューティングアークテクチャ（Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）（ＲＤＰ）、ワイヤレスアプリケーションプロトコル（Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）（ＷＡＰ）、モバイルＩＰ（Ｍｏｂｉｌｅ  ＩＰ）プロトコル、およびボイスオーバＩＰ（Ｖｏｉｃｅ  Ｏｖｅｒ  ＩＰ）（ＶｏＩＰ）プロトコルを含む。他の実施形態において、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマーク付け言語（Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、一部の実施形態において、拡張可能なマーク付け言語（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）（ＸＭＬ）などの任意のマーク付け言語の圧縮を提供する。そのように、本発明のマルチプロトコル圧縮エンジン２３８は、デスクトップクライアント（Ｏｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌなどの企業アプリケーションによって起動させられる任意のクライアントのような、およびＰｏｃｋｅｔ  ＰＣなどのモバイルクライアントでさえのような、たとえばＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント）を介してアプリケーションにアクセスするユーザにとってのパフォーマンスを加速する。
【００９５】
本発明の加速プログラム１２０はまた、以下にさらに詳細に説明されるように、バッファリング、プーリング、および多重化の、トランスポートプロトコル層加速技術を実行する。そのように、加速プログラム１２０は、本明細書中に記載されるこれらの技術のいずれかを実行する論理、ルール、機能、および動作を有する、任意のタイプおよび形態の実行可能な命令を含む。加速プログラム１２０は、ネットワークスタック２１０のトランスポート層において、ネットワークスタック２１０を介してアプリケーション２２０ａ〜２２０ｎによってなされる任意のトランスポート層アプリケーションプログラミングインタフェース（ＡＰＩ）呼び出しを、傍受、制御、および管理する。加速プログラム１２０は、ネットワークスタック２１０のトランスポートプロトコル層から予測されるような応答をクライアント２０５が受信するように、トランスペアレントな態様でクライアント２０５の任意の要求に対して応答する。たとえば、一実施形態において、加速プログラム１２０は、クライアント２０５のネットワークスタック２１０において要求を傍受することによって、サーバなどの別のコンピューティングデバイスとのトランスポート層接続を確立し、該要求に応答するために、加速プログラム１２０によって確立された１つ以上のトランスポート層接続のプールを使用し得る。別の実施形態において、加速プログラム１２０は、第２のアプリケーション２２０ｂによって使用される確立されたトランスポート層接続を介して、第１のアプリケーション２２０ａからの要求を多重化する。
【００９６】
一部の実施形態において、加速プログラム１２０は、ネットワーク上に送信する前にクライアント２０５においてクライアント２０５の通信をバッファリングまたは保持するメカニズムを含む。たとえば、サーバからなどのネットワークから受信される通信の、クライアント２０５による消費の比率は、ネットワーク上でクライアント２０５によって送信される通信の生産の比率よりも小さくあり得る。そのように、クライアント２０５がサーバ２０６ａ〜２０６ｎに要求を送り得る比率は、クライアント２０５がそのような要求からの応答を消費および処理し得る比率よりも大きい。加速プログラム１２０は、通信を傍受し得、クライアント２０５の消費および／または生産の比率が、ユーザ、クライアント２０５、または他のコンピューティングデバイスによって構成される閾値などの所定の閾値よりも低いかどうかを決定し得る。決定された比率が所望の閾値よりも低い場合には、加速プログラム１２０は、クライアント２０５のパフォーマンスが、所定のまたは所望の閾値以上の比率まで消費および／または生産の比率を増加させるまで、傍受された通信をクライアントのメモリエレメントに格納する。その時点において、加速プログラム１２０は、ネットワーク上にクライアントの通信を通信する。そのように、本発明は、クライアント２０５による通信の消費および／または生産のパフォーマンスに基づいて、クライアント２０５の通信をスロットルするクライアント側のメカニズムを提供する。
【００９７】
図２Ａに示されるアプリケーション２２０ａ〜２２０ｎは、ウェブブラウザ、ウェブベースのクライアント、クライアントサーバアプリケーション、シンクライアントコンピューティングクライアント、ＡｃｔｉｖｅＸ制御、またはＪａｖａ（登録商標）アプレットなどの任意のタイプおよび／または形態などの、任意のタイプおよび／または形態のアプリケーション、またはクライアント２０５上で実行するかまたはネットワーク２０４を介して通信する能力のある任意の他のタイプおよび／または形態の実行可能な命令であり得る。アプリケーション２２０ａ〜２２０ｎは、任意のタイプのプロトコルを使用し得、たとえばＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントであり得る。一部の実施形態において、アプリケーション２２０ａ〜２２０ｎは、リモートディスプレイまたはプレゼンテーションレベルプロトコルを使用する。一実施形態において、アプリケーション２２０ａ〜２２０ｎは、フロリダ州Ｆｏｒｔ  ＬａｕｄｅｒｄａｌｅのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発されるＩＣＡクライアントである。他の実施形態において、アプリケーション２２０ａ〜２２０ｎは、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されるＲｅｍｏｔｅ  Ｄｅｓｋｔｏｐ（ＲＤＰ）を含む。他の実施形態において、アプリケーション２２０ａ〜２２０ｎは、ソフトＩＰ電話などのＶｏＩＰ通信に関連する任意のタイプのソフトウェアを含む。さらなる実施形態において、アプリケーション２２０ａ〜２２０ｎは、ビデオおよび／またはオーディオをストリーミングするアプリケーションなどの、リアルタイムデータ通信に関連する任意のアプリケーションを含む。
【００９８】
ここで図２Ｂを参照して、本発明の加速プログラム１２０を実行するネットワーク環境２００が示される。簡潔な概観において、環境２００は、ネットワーク２０４を介して１つ以上のサーバ２０６ａ〜２０６ｎと通信するクライアント２０５ａ〜２０ｎを含む。サーバ２０６ａ〜２０６ｎは、クライアント２０５ａ〜２０５ｎによって使用されるための１つ以上のアプリケーション２２０ｓａ〜２２０ｎを提供または実行し得る。サーバ２０６ａ〜２０６ｎはまた、インストレーションおよび実行のためにクライアント２０５ａ〜２０５ｎに提供する加速プログラム１２０ａ〜１２０ｎを含み得る。たとえば、一実施形態において、サーバ２０６ａ〜２０６ｎは、サーバ２０６ａ〜２０６ｎとの接続または通信セッションを確立する要求の際などの、サーバにアクセスするクライアント２０５ｓａ〜２０５ｎからの要求の受信に応答して、加速プログラム１２０ａ〜１２０ｎをクライアント２０５ａ〜２０５ｎに送信する。
【００９９】
ネットワーク２０４は、任意のタイプおよび形態のネットワークであり得る。ネットワーク２０４は、企業のイントラネット、都市圏ネットワーク（ＭＡＮ）などのローカルエリアネットワーク（ＬＡＮ）、またはインターネットまたはワールドワイドウェブ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）などの広域ネットワーク（ＷＡＮ）であり得る。ネットワーク２０４のトポロジは、バスネットワーク、星状ネットワーク、または環状ネットワークのトポロジであり得る。ネットワーク２０４およびネットワークトポロジは、本明細書中に記載される本発明の動作をサポートする能力のある、任意のそのようなネットワークまたはネットワークトポロジであり得る。クライアント２０５ａ〜２０５ｎおよびサーバ２０６ａ〜２０６ｎは、標準的な電話回線、ＬＡＮまたはＷＡＮリンク（たとえば、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５、ＳＮＡ、ＤＥＣＮＥＴ）、ブロードバンド接続（ＩＳＤＮ、フレームリレー、ＡＴＭ、ギガビットＥｔｈｅｒｎｅｔ（登録商標）、ＳＯＮＥＴ経由のＥｔｈｅｒｎｅｔ（登録商標））、およびワイヤレス接続、またはこれらの任意の組み合わせを含む、種々の接続を通して、１つ以上のネットワーク２０４に接続し得る。接続は、種々の通信プロトコル（たとえば、ＴＣＰ／ＩＰ、ＩＰＸ、ＳＰＸ、ＮｅｔＢＩＯＳ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＡＲＣＮＥＴ、光ファイバ分散データインタフェース（Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ）（ＦＤＤＩ）、ＲＳ２３２、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１１ａ、ＩＥＥＥ８０２．１１ｂ、ＩＥＥＥ８０２．１１ｇ、および直接非同期接続（ｄｉｒｅｃｔ  ａｓｙｎｃｈｒｏｎｏｕｓ  ｃｏｎｎｅｃｔｉｏｎ））を使用して確立され得る。
【０１００】
一部の実施形態において、サーバ２０６ａ〜２０６ｎは、アプリケーション２２０ａ〜２２０ｎを実行し得、アプリケーション２２０ａ〜２２０ｎは、たとえば、ワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるＭｉｃｒｏｓｏｆｔ  Ｅｘｃｈａｎｇｅ、ウェブまたはインターネットサーバ、またはデスクトップシェアリングサーバ、またはコラボレーションサーバなどの、電子メールサービスを提供するアプリケーションサーバであり得る。一部の実施形態において、アプリケーション２２０ａ〜２２０ｎのいずれも、フロリダ州のＦｔ．ＬａｕｄｅｒｄａｌｅのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって提供されるＧｏＴｏＭｅｅｔｉｎｇ．ｃｏｍ、カリフォルニア州Ｓａｎｔａ  ＣｌａｒａのＷｅｂＥｘ，Ｉｎｃ．によって提供されるＷｅｂＥｘ．ｃｏｍ、またはワシントン州ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって提供されるＬｉｖｅＭｅｅｔｉｎｇ．ｃｏｍなどの、任意のタイプのホストされるサービスを含み得る。
【０１０１】
別の実施形態において、クライアント２０５ａ〜２０５ｎのいずれも、ネットワーク２０４を介して、単一のエンティティとして管理される１つ以上のサーバの論理グループであるサーバファーム２０６ａ〜２０６ｎまたはサーバネットワークと通信し得る。サーバファーム２０６ａ〜２０６ｎは、シンクライアントコンピューティングまたはリモートディスプレイプレゼンテーションアプリケーションを提供するアプリケーション３３ｆなどの、１つ以上のアプリケーション２２０ａ〜２２０ｎを実行し得る。一実施形態において、サーバ２０６ａまたはサーバファーム２０６ａ〜２０６ｎは、アプリケーション２２０ａ〜２２０ｎとして、ＭｅｔａＦｒａｍｅまたはＣｉｔｒｉｘ  Ｐｒｅｓｅｎｔａｔｉｏｎ  Ｓｅｒｖｅｒ（登録商標）などの、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によるＣｉｔｒｉｘ  Ａｃｃｅｓｓ  Ｓｕｉｔｅ（登録商標）の任意の部分、および／またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）  Ｔｅｒｍｉｎａｌ  Ｓｅｒｖｉｃｅｓのいずれかを実行する。一部の実施形態において、サーバ２０６ａ〜２０６ｎのうちのいずれか１つは、クライアント２０５ａ〜２０５ｎを任意のサーバ２０６ａ〜２０５ｎに接続するための、ゲートウェイ、ファイアウォール、ルータ、スイッチ、またはブリッジを含む。一実施形態において、サーバ２０６ａ〜２０６ｎは、プロキシを含む。別の実施形態において、サーバ２０６ａ〜２０６ｎは、ロードバランサを含む。一部の実施形態において、クライアント２０５ａ〜２０５ｎは、機器を介してサーバ２０６ａ〜２０６ｎと通信し得る。
【０１０２】
図２Ｃは、ネットワーク環境２０１の別の実施形態を示し、ここでは、クライアント２０５ａ〜２０５ｎとサーバ２２０ａ〜２２０ｎとの間の接続および通信のために、機器２５０が使用される。簡潔な概観において、機器２５０は、ネットワーク２０４上のクライアント２０５ａ〜２０５ｎとネットワーク２０４’上のサーバ２０６ａ〜２０６ｎとの間の通信を提供するための、コンピューティングデバイスまたはネットワーキングデバイスを含む。一部の実施形態において、クライアント２０５ａ〜２０５ｎおよびサーバ２０６ａ〜２０６ｎは、同一のネットワーク２０４上または異なるネットワーク上にあり得る。他の実施形態において、クライアント２０５ａ〜２０５ｎは、インターネットなどの公衆ネットワーク上にあり得、サーバ２０６ａ〜２０６ｎは、法人ネットワークまたは企業ネットワークなどのプライベートネットワーク上にあり得る。
【０１０３】
機器２５０は、任意のタイプのコンピューティングデバイスまたはネットワーキングデバイスを含む。一部の実施形態において、機器２５０は、ゲートウェイ、プロキシ、ＳＳＬ  ＶＰＮデバイス、ブリッジ、ルータ、またはスイッチを含む。一実施形態において、機器２５０は、ネットワーク２０４上のクライアント２０５ａ〜２０５ｎから、ネットワーク２０４’上のサーバ２０６ａ〜２０６ｎに、仮想私設接続を提供する。一部の実施形態において、機器２５０は、ネットワーク２０４上のクライアント２０５ａ〜２０５ｎとの第１のトランスポート層接続、およびネットワーク２０４’上のサーバ２０６ａ〜２０６ｎとの第２のトランスポート層接続を確立し得る。一部の実施形態において、機器２５０は、通信の加速、およびクライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間のアプリケーション２２０ａ〜２２０ｎなどの、リモートアクセスされるアプリケーションを提供する。クライアント側の加速プログラム１２０と同様に、機器２５０に関する実行可能な命令の論理、機能、および／または動作は、本発明の以下の加速技術のうちの１つ以上を実行し得る：１）マルチプロトコル圧縮、２）転送制御プロトコルプーリング、３）転送制御多重化、４）転送制御プロトコルバッファリング、５）キャッシュマネジャーを介したキャッシング。さらに、機器２５０は、クライアント２０５によって受信および／または送信された任意の通信の暗号化および／または復号化を実行し得る。一部の実施形態において、機器２５０はまた、クライアント２０５ａ〜２０５ｎのためのように、サーバ２０６ａ〜２０６ｎの間のトンネリングを実行する。
【０１０４】
図２Ｄは、機器２５０の例示的アーキテクチャを図示する。簡単な概略において、機器２５０は、ハードウェア層２０６とソフトウェア層とを含み、ソフトウェア層はユーザスペース２０３とカーネルスペース２０２とに分割される。ハードウェア層２０６は、ハードウェアエレメントを提供し、ハードウェアエレメントの上で、カーネルスペース２０２およびユーザスペース２０３の中のプログラムおよびソフトウェアが実行される。ハードウェア層２０６はまた、構造およびエレメントを提供し、それらは、カーネルスペース２０２およびユーザスペース２０３の中のプログラムおよびサービスが、機器２５０に関して内部的および外部的の両方でデータを通信することを可能にする。ソフトウェア層は、プログラム、サービス、プロセス、タスク、スレッド、および他の実行可能な命令を含むことによって、機器２５０の論理、機能、および動作を提供する。
【０１０５】
機器２５０は、アプリケーション加速決定メカニズム２７５と、クライアント側の加速プログラム１２０とを含む。アプリケーション加速決定メカニズム２７５は、ソフトウェア、ハードウェア、またはハードウェアおよびソフトウェアの任意の組み合わせを含む。一部の実施形態において、アプリケーション加速決定メカニズム２７５は、クライアント２０５ａ〜２０５ｎおよび／またはサーバ２０６ａ〜２０６ｎの上で実行するアプリケーション２２０ａ〜２２０ｎが加速され得るかどうか、またはクライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間のアクセスまたは通信が加速され得るかどうかを決定するための、論理、機能、ルール、または動作を有する、プログラム、サービス、プロセス、タスク、またはスレッドなどの、任意のタイプおよび形態の実行可能な命令を含む。一実施形態において、データベースは、アプリケーション加速決定メカニズム２７５によって使用されることによって、アプリケーション２２０ａ〜２２０ｎが加速され得るかどうかを決定する。たとえば、データベースは、アプリケーション２２０ａ〜２２０ｎを、アプリケーション２２０ａ〜２２０ｎを加速することが可能な１つ以上の加速技術に関連づけ得、クライアント２０５ａ〜２０５ｎおよび／またはサーバ２０６ａ〜２０６ｎの、ユーザ、タイプ、形態、場所、処理能力、および他の特性にさらに基づき得る。一部の実施形態において、アプリケーション加速決定メカニズム２７５は、アプリケーション２２０ａ〜２２０ｎが、名前、タイプ、またはカテゴリーによって、加速技術によって加速され得るかどうかを識別する情報を含むメモリ内の、ルックアップテーブル、ファイル、データ構造、またはオブジェクトを使用する。別の実施形態において、機器２５０および／または加速決定メカニズム２７５は、アプリケーション２２０ａ〜２２０ｎ、またはサーバ２０６ａ〜２０６ｎへのアクセスが加速され得るかどうかを識別し、指定し、構成するユーザ入力を受信するための、ユーザインタフェース、グラフィカル、コマンドライン、または他のものなどの、構成メカニズムを含む。
【０１０６】
一部の実施形態において、アプリケーション加速決定メカニズム２７５は、サーバ２０６ａ〜２０６ｎから、アプリケーション２２０ａ〜２２０ｎが加速され得るかどうかを識別する情報を要求し、さらなる実施形態において、どの加速技術によって、およびどのタイプおよび形態のクライアント２０５ａ〜２０５ｎについて、アプリケーション２２０ａ〜２２０ｎが加速され得るかどうかを識別する情報を要求する。さらに別の実施形態において、アプリケーション加速決定メカニズム２７５は、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間のアプリケーション２２０ａ〜２２０ｎの性能に関する履歴情報のデータベースを含むことによって、１つ以上のクライアント側の加速技術を用いておよび用いずに、本発明の任意のクライアント側の加速技術を使用して、どこでアプリケーション２２０ａ〜２２０ｎが加速されるか、または加速されることが可能かについての、比較的かつ発見的な情報のデータベースを提供する。たとえば、機器２５０は、クライアント２０５ａ〜２０５ｎから、アプリケーション２２０ａ〜２２０ｎの性能に関するネットワーク関連性能情報を獲得し得る。そのように、アプリケーション２２０ａ〜２２０ｎが加速されることが可能であるかどうかの決定は、ネットワーク２０４の動作特性および性能特性を変化することに、適合され得、基づき得、影響され得る。
【０１０７】
一局面において、アプリケーション２２０ａ〜２２０ｎは、加速されることが可能でないことがあり得るか、または加速されることが可能であり得るものの、加速は効果的ではないか、さもなくば、最小限であり得る。一実施形態において、アプリケーション２２０ａ〜２２０ｎのタイプおよび形態は、加速技術とともに使用するのに適切な態様においては、プロトコルを使用しないことがあり得るか、または通信しないことがあり得る。別の実施形態において、アプリケーション２２０ａ〜２２０ｎが通信するプロトコルまたは態様は、加速技術の実行を可能にし得るが、クライアント２０５ａ〜２０５ｎ、アプリケーション２５０またはサーバ２０６ａ〜２０６ｎの動作特性または性能特性のいずれかに基づいて、加速技術は効果的ではないことがあり得るか、さもなくば、最小限の加速を提供し得る。そのように、アプリケーション加速決定メカニズム２７５は、アプリケーション２２０ａ〜２２０ｎが加速されることが可能であるかどうか、または加速が性能改善の所望の所定の閾値を満たし得るかどうかに基づいて、アプリケーション２２０ａ〜２２０ｎが加速されることが望ましくないと決定し得る。
【０１０８】
別の局面において、アプリケーション２５０は、機器のハードウェア層２０６によって提供されるストレージまたはメモリなどの、機器２５０のストレージまたはメモリエレメントの中に、クライアント側の加速プログラム１２０を格納する。一実施形態において、機器２５０は、アプリケーション加速決定メカニズム２７５を介して、クライアント２０５ａ〜２０５ｎによって使用されるべきかまたは使用されているアプリケーション２２０ａ〜２２０ｎが、クライアント２０５ａ〜２０５ｎ上で実行する加速プログラム１２０によって加速され得ることを動的に決定し、機器２５０のストレージまたはメモリから、クライアント２０５ａ〜２０５ｎへ、加速プログラム１２０を送信するかさもなくば、通信する。別の実施形態において、機器２５０は、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間の通信が、クライアント２０５上で実行する加速プログラム１２０によって加速され得ることを決定し、加速プログラム１２０をクライアント２０５に通信する。一部の実施形態において、機器２５０は、サーバ２０６ａ〜２０６ｎなどの別のコンピューティングデバイス１００から、加速プログラム１２０を、受信、ダウンロード、または取得する。
【０１０９】
図２Ｄに示されるように、ハードウェア層２０６は、ソフトウェアプログラムおよびサービスを実行する処理ユニット２６２と、ソフトウェアおよびデータを格納するメモリ２６４と、ネットワークを介してデータを送信および受信するネットワークポート２６６と、ネットワークを介して送信および受信されるデータのセキュアソケット層（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ）処理に関連する機能を実行する暗号化プロセッサ２６０とを含む。一部の実施形態において、中央処理ユニット２６２は、単一のプロセッサにおいて暗号化プロセッサ２６０の機能を実行し得る。さらに、ハードウェア層２０６は、処理ユニット２６２および暗号化プロセッサ２６０の各々について、複数のプロセッサを含み得る。機器２５０のハードウェア層２０６は、概して暗号化プロセッサ２６０とともに図示されるが、プロセッサ２６０は、セキュアソケット層（ＳＳＬ）またはトランスポート層セキュリティ（ＴＬＳ）プロトコルなどの、任意の暗号化プロトコルに関連する機能を実行するプロセッサであり得る。一部の実施形態において、プロセッサ２６０は汎用プロセッサ（ＧＰＰ）であり得、さらなる実施形態においては、任意のセキュリティ関連プロトコルの処理を実行するための実行可能な命令を有し得る。
【０１１０】
機器２５０のハードウェア層２０６は、図２Ｄにおいて一定のエレメントとともに図示されるが、機器２５０のハードウェア部分またはコンポーネントは、図１Ａおよび図１Ｂに関連して図示され論議されたコンピューティングデバイス１００などのコンピューティングデバイスの、任意のタイプおよび形態のエレメント、ハードウェア、またはソフトウェアを含み得る。一部の実施形態において、機器２５０は、キャッシュ、サーバ、ルータ、スイッチ、ブリッジ、または他のタイプおよび形態のコンピューティングデバイスまたはネットワークデバイスを含み得、それらに関連する任意のハードウェアおよび／またはソフトウェアエレメントを有し得る。
【０１１１】
機器２５０のオペレーティングシステムは、利用可能なシステムメモリを、カーネルスペース２０２およびユーザスペース２０４の中に、割当て、管理し、さもなくば、分離する。例示的なソフトウェアアーキテクチャ２００において、オペレーティングシステムは、任意のタイプおよび／または形態のＵＮＩＸ（登録商標）オペレーティングシステムであり得るが、本発明はそのように限定されない。そのように、機器２５０は、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのバージョンのいずれか、Ｕｎｉｘ（登録商標）およびＬｉｎｕｘオペレーティングシステムの異なるリリース、ＭａｃｉｎｔｏｓｈコンピュータのＭａｃＯＳ（登録商標）の任意のバージョン、任意の埋込型オペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の専用の（ｐｒｏｐｒｉｅｔａｒｙ）オペレーティングシステム、または機器２５０上で実行し本明細書中に記載される動作を実行することが可能な任意の他のオペレーティングシステムなどの、任意のオペレーティングシステムを実行し得る。
【０１１２】
カーネルスペース２０２は、任意のデバイスドライバ、カーネル拡張、または他のカーネル関連のソフトウェアを含む、カーネル２３０を実行するためにとっておかれる。当業者にとって公知であるように、カーネル２３０は、オペレーティングシステムのコアであり、アプリケーション１０４のリソースおよびハードウェア関連エレメントの、アクセス、制御、および管理を提供する。本発明の実施形態に従って、カーネルスペース２０２はまた、キャッシュマネジャー２３２と関連して作用する多数のネットワークサービスまたはプロセスを含み、キャッシュマネジャー２３２は統合されたキャッシュと呼ばれることもあり、その利点は本明細書中にさらに詳細に説明される。さらに、カーネル２３０の実施形態は、インストールされるか、構成されるか、さもなくば、機器２５０によって使用される、オペレーティングシステムの実施形態に依存する。
【０１１３】
一実施形態において、機器２５０は、クライアント１０２ａ〜１０２ｎおよび／またはサーバ２０６ａ〜２０６ｎと通信するための、ＴＣＰ／ＩＰベースのスタックなどの、１つのネットワークスタック２６７を含む。一実施形態において、ネットワークスタック２６７は、第１のネットワーク（ネットワーク２０４など）および第２のネットワーク２０４’と通信するために使用される。一部の実施形態において、機器２５０は、クライアント２０５ａ〜２０５ｎのＴＣＰ接続などの、第１のトランスポート層接続を終了し、クライアント２０５ａ〜２０５ｎによる使用のためにサーバ２０６ａ〜２０６ｎへの第２のトランスポート層接続を確立する（たとえば第２のトランスポート層接続は、機器２５０およびサーバ２０６ａ〜２０６ｎにおいて終了される）。第１および第２のトランスポート層接続は、単一のネットワークスタック２６７を介して確立され得る。他の実施形態において、機器２５０は、複数のネットワークスタック（たとえば２６７および２６７’）を含み得、第１のトランスポート層接続は、１つのネットワークスタック２６７において確立または終了され得、第２のトランスポート層接続は、第２のネットワークスタック２６７’において確立または終了され得る。たとえば、１つのネットワークスタックは、第１のネットワーク上でネットワークパケットを受信および送信するためのものであり得、別のネットワークスタックは、第２のネットワーク上でネットワークパケットを受信および送信するためのものであり得る。一実施形態において、ネットワークスタック２６７は、機器２５０による送信のための１つ以上のネットワークパケットをキューに入れるためのバッファ２４３を含む。
【０１１４】
図２Ｄに示されるように、カーネルスペース２０２は、キャッシュマネジャー２３２と、高速層２〜７が統合されたパケットエンジン２４０と、暗号化エンジン２３４と、ポリシーエンジン２３６と、マルチプロトコル圧縮論理２３８とを含む。これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８を、ユーザスペース２０３ではなく、カーネルスペース２０２またはカーネルモードで実行することは、これらのコンポーネントの各々の性能を単独および組み合わせで改善する。カーネル動作は、これらのコンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８が、機器２５０のオペレーティングシステムのコアアドレススペースにおいて実行することを意味する。たとえば、暗号化エンジン２３４をカーネルモードで実行することは、暗号化動作および復号化動作をカーネルに移動させることによって、暗号化性能を改善し、それによって、カーネルモードにおけるメモリスペースまたはカーネルスレッドと、ユーザモードにおけるメモリスペースまたはスレッドとの間の、遷移の数を低減する。たとえば、カーネルモードにおいて取得されたデータは、カーネルレベルのデータ構造からユーザレベルのデータ構造へのように、ユーザモードにおいて実行するプロセスまたはスレッドに渡されるかまたはコピーされる必要がないことがあり得る。別の局面において、カーネルモードとユーザモードとの間のコンテキストスイッチの数も低減される。さらに、コンポーネントまたはプロセス２３２、２４０、２３５、２３６、および２３８のいずれかの間の同期化および通信は、カーネルスペース２０２においてより効率的に実行され得る。
【０１１５】
一部の実施形態において、コンポーネント２３２、２４０、２３４、２３６、および２３８の任意の部分は、カーネルスペース２０２において実行または動作し得るが、これらのコンポーネント２３２、２４０、２３４、２３６、および２３８の他の部分は、ユーザスペース２０３で実行または動作し得る。一実施形態において、本発明は、１つ以上のネットワークパケット（たとえば、クライアント２０５ａ〜２０５ｎからのリクエスト、またはサーバ２０６ａ〜２０６ｎからの応答を含む、ネットワークパケット）の任意の部分にアクセスを提供する、カーネルレベルのデータ構造を使用する。一部の実施形態において、カーネルレベルのデータ構造は、トランスポート層ドライバインタフェース、またはネットワークスタック２６７へのフィルタを介して、パケットエンジン２４０によって取得され得る。カーネルレベルのデータ構造は、任意のインタフェースおよび／またはカーネルスペース２０２を介してアクセス可能なデータを含み得、カーネルスペース２０２は、ネットワークスタック２６７、ネットワークトラフィック、またはネットワークスタック２６７によって受信または送信されたパケットに関連する。他の実施形態において、カーネルレベルのデータ構造は、コンポーネントまたはプロセス２３２、２４０、２３４、２３６、および２３８のいずれかによって使用され得ることによって、コンポーネントまたはプロセスの所望の動作を実行する。一実施形態において、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルのデータ構造を使用するときにカーネルモード２０２で実行するが、別の実施形態において、コンポーネント２３２、２４０、２３４、２３６、および２３８は、カーネルレベルのデータ構造を使用するときにユーザモードで実行する。一部の実施形態において、カーネルレベルのデータ構造は、第２のカーネルレベルのデータ構造、または任意の所望のユーザレベルのデータ構造に、コピーまたは渡され得る。
【０１１６】
クライアント側の加速プログラム１２０のように、機器はまた、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間の任意の通信のためのキャッシングを実行し得る。一部の実施形態において、キャッシュメモリ２３２のエレメントは、機器２５０のメモリ２６４におけるデータオブジェクトを含み得る。他の実施形態において、キャッシュメモリのエレメントは、メモリ２６４よりも速いアクセス時間を有するメモリを含み得る。別の実施形態において、キャッシュメモリのエレメントは、ハードディスクの一部分などの、機器２５０の任意のタイプおよび形態のストレージエレメントを含み得る。一部の実施形態において、処理ユニット２６２は、本発明のキャッシュマネジャー２３２によって使用されるためのキャッシュメモリを提供し得る。さらなる実施形態において、キャッシュマネジャー２３２は、データ、オブジェクト、および他のコンテンツをキャッシングするために、機器２５０のメモリ、ストレージ、または処理ユニットの、任意の部分および組み合わせを使用し得る。
【０１１７】
さらに、本発明のキャッシュマネジャー２３２は、本明細書中に記載される本発明の技術の任意の実施形態を実行するための、任意の論理、機能、ルール、または動作を含む。たとえば、キャッシュマネジャー２３２は、無効化期間の満了に基づいて、またはクライアント２０５ａ〜２０５ｎまたはサーバ２０６ａ〜２０６ｎからの無効化コマンドの受信の際に、オブジェクトを無効化する、論理または機能性を含む。一部の実施形態において、キャッシュマネジャー２３２は、カーネルスペース２０２において実行する、および他の実施形態においてはユーザスペース２０３において実行する、プログラム、サービス、プロセス、またはタスクとして動作し得る。一実施形態において、キャッシュマネジャー２３２の第１の部分は、ユーザスペース２０３において実行するが、第２の部分は、カーネルスペース２０２において実行する。一部の実施形態において、キャッシュマネジャー２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、または、書替え可能ゲートアレイ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）（ＦＰＧＡ）、プログラム可能論理デバイス（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）（ＰＬＤ）、または専用集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）（ＡＳＩＣ）などの、任意の他のタイプの集積回路を含み得る。
【０１１８】
図２Ｄに示されるようなポリシーエンジン２３６は、たとえば、インテリジェント統計エンジン（ｉｎｔｅｌｌｉｇｅｎｔ  ｓｔａｔｉｓｔｉｃａｌ  ｅｎｇｉｎｅ）または他のプログラマブルアプリケーションを含み得る。一実施形態において、ポリシーエンジン２３６は、ユーザがキャッシングポリシーを識別、指定、定義、または構成することを可能にする、構成メカニズムを提供する。ポリシーエンジン２３６はまた、一部の実施形態において、ルックアップテーブルまたはハッシュテーブルなどのデータ構造をサポートするためのメモリへのアクセスを有することによって、ユーザ選択のキャッシングポリシー決定を可能にする。他の実施形態において、ポリシーエンジン２３６は、機器２５０によって実行される、アクセス、セキュリティの制御および管理、ネットワークトラフィック、ネットワークアクセス、圧縮、または任意の他の機能または動作に加えて、機器２５０によってキャッシングされる、オブジェクト、データ、またはコンテンツの、アクセス、制御、および管理を決定および提供するための、任意の論理、ルール、機能、または動作を含み得る。一部の実施形態において、加速プログラム１２０は、機器２５０のポリシーエンジン２３６から、ポリシー情報を、受信、ダウンロード、または取得する。他の実施形態において、加速プログラム１２０は、機器２５０のポリシーエンジン２３６とは無関係に、またはポリシーエンジン２３６と関連して、ポリシーエンジン２３６を実行および操作する。
【０１１９】
クライアント側の加速プログラム１２０と同様の態様で、図２Ｄをさらに参照すると、機器は暗号化エンジン２３４を含み、暗号化エンジン２３４は、任意のセキュリティプロトコル（ＳＳＬまたはＴＬＳ、またはそれらに関連する任意の機能など）の処理を扱うための、任意の論理、ビジネスルール、機能、または動作を含む。たとえば、暗号化エンジン２３４は、機器２５０を介して通信されるネットワークパケットまたはその任意の部分を、暗号化および復号化する。暗号化エンジン２３４はまた、クライアント２０５ａ〜２０５ｎ、サーバ２０６ａ〜２０６ｎ、または機器２５０のために、ＳＳＬまたはＴＬＳ接続を設定または確立し得る。そのように、暗号化エンジン２３４は、ＳＳＬ処理のオフローディング（ｏｆｆｌｏａｄｉｎｇ）および加速を提供する。一実施形態において、暗号化エンジン２３４は、トンネリングプロトコルを使用することによって、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間に仮想プライベートネットワークを提供する。一部の実施形態において、暗号化エンジン２３４は、暗号化プロセッサ２６０と通信する。他の実施形態において、暗号化エンジン２３４は、暗号化プロセッサ２６０上で実行する実行可能な命令を含む。
【０１２０】
また、クライアント側の加速プログラム１２０のように、機器２５０は、マルチプロトコル圧縮エンジン２３８’を含み得、マルチプロトコル圧縮エンジン２３８’は、ネットワークパケットの１つ以上のプロトコル（機器２５０のネットワークスタック２６７によって使用されるプロトコルのいずれかなど）を圧縮するための、任意の論理、ビジネスルール、機能、または動作を含む。一実施形態において、マルチプロトコル圧縮エンジン２３８は、任意のＴＣＰ／ＩＰベースのプロトコルを、クライアント１０２ａ〜１０２ｎとサーバ２０６ａ〜２０６ｎとの間で双方向に圧縮し、任意のＴＣＰ／ＩＰベースのプロトコルは、メッセージングアプリケーションプログラミングインタフェース（Ｍｅｓｓａｇｉｎｇ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）（ＭＡＰＩ）（電子メール）、ファイル転送プロトコル（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）（ＨＴＴＰ）、コモンインターネットファイルシステム（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）（ＣＩＦＳ）プロトコル（ファイル転送）、インデペンデントコンピューティングアークテクチャ（Ｉｎｄｅｐｅｎｄｅｎｔ  Ｃｏｍｐｕｔｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ）（ＲＤＰ）、ワイヤレスアプリケーションプロトコル（Ｗｉｒｅｌｅｓｓ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）（ＷＡＰ）、モバイルＩＰ（Ｍｏｂｉｌｅ  ＩＰ）プロトコル、およびボイスオーバＩＰ（Ｖｏｉｃｅ  Ｏｖｅｒ  ＩＰ）（ＶｏＩＰ）プロトコルを含む。他の実施形態において、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマーク付け言語（Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、一部の実施形態において、拡張可能なマーク付け言語（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）（ＸＭＬ）などの、任意のマーク付け言語の圧縮を提供する。一実施形態において、マルチプロトコル圧縮エンジン２３８は、機器２５０通信に対する機器２５０のために設計された任意のプロトコルなどの、任意の高性能プロトコルの圧縮を提供する。別の実施形態において、マルチプロトコル圧縮エンジン２３８は、変更された転送制御プロトコル（トランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択肯定応答を用いたＴＣＰ（ＴＣＰ−ＳＡＣＫ）、大きなウィンドウを用いたＴＣＰ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコルなどの輻輳予測プロトコル、およびＴＣＰスプーフィングプロトコルなど）を使用して、任意のペイロードまたは任意の通信を圧縮する。
【０１２１】
そのように、本発明のマルチプロトコル圧縮エンジン２３８は、デスクトップクライアント（たとえばＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント）（Ｏｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌ、およびＰｏｃｋｅｔ  ＰＣなどのモバイルクライアントさえもなどのポピュラーな企業アプリケーションによって起動される、任意のクライアントなど）を介してアプリケーションにアクセスするユーザにとっての性能を加速する。一部の実施形態において、マルチプロトコル圧縮エンジン２３８は、カーネルモード２０２において実行することと、ネットワークスタック２６７にアクセスするパケット処理エンジン２４０に統合することとによって、アプリケーション層プロトコルなどのＴＣＰ／ＩＰプロトコルによって運ばれるプロトコルのいずれかを圧縮することが可能である。
【０１２２】
図２Ｄに示される、高速層２〜７が統合されたパケットエンジン２４０は、一般的にパケット処理エンジンまたはパケットエンジンとも呼ばれ、ネットワークポート２６６を介して機器２５０によって受信および送信されたパケットのカーネルレベルの処理を管理することを担う。高速層２〜７が統合されたパケットエンジン２４０は、処理の間に１つ以上のネットワークパケットをキューに入れるため（ネットワークパケットの受信またはネットワークパケットの送信のためなど）のバッファを含み得る。さらに、高速層２〜７が統合されたパケットエンジン２４０は、１つ以上のネットワークスタック２６７と通信することによって、ネットワークポート２６６を介してネットワークパケットを送信および受信する。高速層２〜７が統合されたパケットエンジン２４０は、暗号化エンジン２３４、キャッシュマネジャー２３２、ポリシーエンジン２３６、およびマルチプロトコル圧縮エンジン２３８とともに作用する。特に、暗号化エンジン２３４は、パケットのＳＳＬ処理を実行するように構成され、ポリシーエンジン２３６は、要求レベルコンテンツスイッチングおよび要求レベルキャッシュリダイレクションなどの、トラフィック管理に関連する機能を実行するように構成され、マルチプロトコル圧縮エンジン２３８は、データの圧縮および解凍に関連する機能を実行するように構成されている。
【０１２３】
高速層２〜７が統合されたパケットエンジン２４０は、パケット処理タイマー２４２を含む。一実施形態において、パケット処理タイマー２４２は、入ってくる（すなわち受信された）または出て行く（すなわち送信された）ネットワークパケットの処理をトリガするための１つ以上の時間インターバルを提供する。一部の実施形態において、高速層２〜７が統合されたパケットエンジン２４０は、タイマー２４２に応答してネットワークパケットを処理する。パケット処理タイマー２４２は、任意のタイプおよび形態の信号をパケットエンジン２４０に提供することによって、時間に関連するイベント、インターバル、またはできごとを、通知、トリガ、または通信する。多くの実施形態において、パケット処理タイマー２４２は、ミリ秒のオーダーで動作する。たとえば、一部の実施形態において、パケット処理タイマー２４２は、時間インターバルを提供するか、さもなくば、ネットワークパケットを、１０ミリ秒のインターバルで、他の実施形態においては５ミリ秒のインターバルで、さらなる実施形態においては１および／または２ミリ秒のインターバルで、高速層２〜７が統合されたパケットエンジン２４０によって処理させる。高速層２〜７が統合されたパケットエンジン２４０は、動作の間に、暗号化エンジン２３４、キャッシュマネジャー２３２、ポリシーエンジン２３６、およびマルチプロトコル圧縮エンジン２３８と、インタフェースされ得るか、統合され得るか、または通信し得る。そのように、暗号化エンジン２３４、キャッシュマネジャー２３２、ポリシーエンジン２３６、およびマルチプロトコル圧縮エンジン２３８の、論理、機能、または動作のいずれかは、パケット処理タイマー２４２および／またはパケットエンジン２４０に応答して実行され得る。したがって、暗号化エンジン２３４、キャッシュマネジャー２３２、ポリシーエンジン２３６、およびマルチプロトコル圧縮エンジン２３８の、論理、機能、または動作のいずれかは、パケット処理タイマー２４２を介して提供される時間インターバルの細分性（ｇｒａｎｕｌａｒｉｔｙ）において（たとえば１０ミリ秒以下の時間インターバルにおいて）実行され得る。たとえば、一実施形態において、キャッシュマネジャー２３２は、高速層２〜７が統合されたパケットエンジン２４０および／またはパケット処理タイマー２４２に応答して、任意のキャッシングされたオブジェクトの無効化を実行し得る。別の実施形態において、キャッシングされたオブジェクトの満了または無効化時間は、パケット処理タイマー２４２の時間インターバルと同じオーダーの細分性（１０ミリ秒ごとなど）に設定され得る。
【０１２４】
他の実施形態において、パケットエンジン２４０またはその部分は、加速プログラム１２０の部分などの、クライアント２０５ａ〜２０５ｎ上で動作され得る。そのように、加速プログラム１２０は、上述のようにパケット処理タイマー２４２に従ってクライアント２０５ａ〜２０５ｎ上で動作し得る。一局面において、加速プログラム１２０は、実行の一時点において、かつパケット処理タイマー２４２によって提供される細分な時間インターバルに応答して、統合された加速技術を実行し得る。
【０１２５】
カーネルスペース２０２とは対照的に、ユーザスペース２０３は、ユーザモードアプリケーションまたはユーザモードで別なふうに実行するプログラムによって使用されるオペレーティングシステムの、メモリエリアまたは部分である。ユーザモードアプリケーションは、カーネルスペース２０２に直接的にアクセスしないことがあり得、カーネルサービスにアクセスするためにサービスコールを使用する。図２Ｄに示されるように、機器２５０のユーザスペース２０３は、グラフィカルユーザインタフェース（ＧＵＩ）２１０と、コマンドラインインタフェース（ＣＬＩ）２１２と、シェルサービス２１４と、健康監視プログラム２１６と、デーモンサービス２１８とを含む。ＧＵＩ２１０およびＣＬＩ２１２は、システム管理者または他のユーザが機器２５０の動作と相互作用して動作を制御し得る手段を提供し（機器２５０のオペレーティングシステムを介してなど）、ユーザスペース２０３またはカーネルスペース２０２のいずれかである。ＧＵＩ２１０は、任意のタイプおよび形態のグラフィカルユーザインタフェースであり得、テキスト、グラフィカルを介して、さもなくば、ブラウザなどの任意のタイプのプログラムまたはアプリケーションによって、提示され得る。ＣＬＩ２１２は、オペレーティングシステムによって提供されるコマンドラインなどの、任意のタイプおよび形態のコマンドラインまたはテキストベースインタフェースであり得る。たとえば、ＣＬＩ２１２はシェルを含み得、シェルはユーザがオペレーティングシステムと相互作用することを可能にするツールである。一部の実施形態において、ＣＬＩ２１２は、ｂａｃｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプのシェルを介して提供され得る。シェルサービス２１４は、プログラム、サービス、タスク、プロセス、または実行可能な命令を含むことによって、ＧＵＩ２１０および／またはＣＬＩ２１２を介したユーザによる機器２５０またはオペレーティングシステムとの相互作用をサポートする。
【０１２６】
なおも図２Ｄを参照すると、健康監視プログラム２１６は、ネットワークシステムが適切に機能しており、かつユーザが要求されたコンテンツをネットワークを介して受信していることを、監視、チェック、報告、および保証するために使用される。健康監視プログラム２１６は、１つ以上のプログラム、サービス、タスク、プロセス、または実行可能な命令を含むことによって、機器２５０の任意の活動を監視するための、論理、ルール、機能、または動作を提供する。一部の実施形態において、健康監視プログラム２１６は、機器２５０を介して渡された任意のネットワークトラフィックを傍受およびインスペクトする。他の実施形態において、健康監視プログラム２１６は、任意の手段および／またはメカニズムによって、以下のうちの１つ以上と相互作用する：暗号化エンジン２３４、キャッシュマネジャー２３２、ポリシーエンジン２３６、マルチプロトコル圧縮エンジン２３８、パケットエンジン２４０、デーモンサービス２１８、およびシェルサービス２１４。そのように、健康監視プログラム２１６は、任意のアプリケーションプログラミングインタフェース（ＡＰＩ）を呼び出し得ることによって、機器２５０の任意の部分の状態（ｓｔａｔｅ）、ステータス、または健康を決定する。たとえば、健康監視プログラム２１６は、プログラム、プロセス、サービス、またはタスクが、アクティブであり、現在実行中であるかどうかをチェックするために、定期的にステータス照会をピング（ｐｉｎｇ）または送信し得る。別の例において、健康監視プログラム２１６は、任意のプログラム、プロセス、サービス、またはタスクによって提供される、ステータス、エラー、または履歴ログをチェックし得ることによって、機器２５０の任意の部分の任意の状態（ｃｏｎｄｉｔｉｏｎ）、ステータス、またはエラーを決定する。
【０１２７】
同様な態様で、および他の実施形態において、健康監視プログラム２１６は、機器２５０と通信しているかまたは機器２５０が加速プログラム１２０を送信した、任意のクライアント２０５ａ〜２０５ｎ上の、任意のクライアント側の加速プログラム１２０の、ステータス、エラー、または履歴をチェックおよび決定し得る。一部の実施形態において、健康監視プログラム２１６またはその部分は、クライアント２０５ａ〜２０５ｎ上で実行する。
【０１２８】
デーモンサービス２１８は、連続的にまたはバックグラウンドで実行し、機器２５０によって受信された定期的なサービス要求を処理する、プログラムである。一部の実施形態において、デーモンサービスは、要求を他のプログラムまたはプロセス（別のデーモンサービス２１８）に適宜転送し得る。デーモンサービス２１８は、連続的なまたは定期的なシステム全体にわたる機能（ネットワーク制御など）を実行するか、または任意の所望のタスクを実行するように、無人で実行し得る。一部の実施形態において、１つ以上のデーモンサービス２１８がユーザスペース２０３において実行するが、他の実施形態においては、１つ以上のデーモンサービス２１８がカーネルスペース２０２において実行する。
【０１２９】
ここで図３Ａを参照すると、機器２５０によって加速プログラム１２０を動的に提供し、クライアント２０５によって加速プログラム１２０を自動的にインストールして実行するための、本発明の方法３００の実施形態が示される。簡単な概略において、ステップ３１０において、機器２５０は、クライアント２０５からの要求を傍受することによって、サーバとの通信セッションを確立する。ステップ３１５において、機器２５０は、クライアント２０５が自動的にインストールして実行するために、加速プログラム１２０をクライアント２０５に送信する。ステップ３２０において、加速プログラム１２０を受信すると、クライアント２０５は、加速プログラム１２０の静かなインストールを自動的に実行（ｅｘｅｃｕｔｅ）または実行（ｐｅｒｆｏｒｍ）する。ステップ３２５において、加速プログラム１２０のインストールが完了すると、クライアント２０５は、ネットワークスタック２１０における加速プログラム１２０を自動的に実行することによって、クライアント２０５とサーバ２０６との間の通信を傍受する。ステップ３３０において、加速プログラム１２０は、複数の加速技術のうちのいずれかを実行し、通信を暗号化および／または復号化し得る。
【０１３０】
さらなる詳細において、ステップ３１０において、加速プログラム１２０は、任意の適切な手段およびメカニズムによって、クライアント２０５からの要求を傍受するかさもなくば、受信し得ることによって、サーバ２０６との通信セッションを確立する。一実施形態において、機器２５０のパケットエンジン２４０は、クライアント２０５からの通信を傍受する。他の実施形態において、機器２５０は、たとえば加速プログラム１２０を用いてクライアント２０５との第１のトランスポート層接続を確立し、クライアント２０５のためにサーバ２０５との第２のトランスポート層接続を確立する。そのように、機器２５０は、サーバ２０６に送信されるクライアントの通信のいずれかを、受信、傍受、さもなくば、取得し得る。一部の実施形態において、機器２５０は、クライアント２０５のための要求を傍受することによって、サーバ２０６とのトランスポート層接続を確立する。他の実施形態において、機器２５０は、要求を傍受することによって、トランスポート層よりも上位の任意のプロトコル層（ＨＴＴＰのアプリケーション層プロトコルなど）を介して通信セッションを確立する。本発明の方法のこの実施形態は、クライアント２０５のネットワークスタック２１０の任意のプロトコル層において通信セッションを確立する要求とともに実施され得る。
【０１３１】
ステップ３１５において、機器２５０は、加速プログラム１２０をクライアント２０５に送信する。機器２５０は、クライアント２０５によって要求された通信セッションを確立する前、間、または後の任意の時点において、加速プログラム１２０を送信し得る。一実施形態において、機器２５０は、クライアント要求を傍受することに応答して、加速プログラム１２０をクライアント２０５に送信する。別の実施形態において、機器２５０は、要求をサーバ２０６に転送し、加速プログラム１２０をクライアント２０５に送信する。一部の実施形態において、機器２５０は、サーバ２０６との通信セッションを確立し、通信セッションを確立すると、機器２５０は加速プログラム１２０を送信する。さらに別の実施形態において、機器２５０は、クライアント２０５，またはクライアント２０５のユーザの認証および／または認可を実行し、認証されたユーザまたはクライアント２０５がそのように認可された場合には、機器２５０は、加速プログラム１２０をクライアント２０５に送信する。一実施形態において、機器２５０は、認証および／または認可のために、クライアントの要求をサーバ２０６に転送し、サーバ２０６がクライアントの要求を認証および／または認可した場合には、機器２５０は加速プログラム１２０をクライアント２０５に送信する。
【０１３２】
一実施形態において、機器２５０は、機器２５０のストレージまたはメモリから加速プログラム１２０を送信する。他の実施形態において、機器２５０は、サーバ２０６から加速プログラム１２０を要求し、受信した加速プログラム１２０をクライアント２０５に転送する。別の実施形態において、サーバ２０６は、加速プログラム１２０をクライアント２０５に送信する。一実施形態において、機器２５０は、ユニフォームリソースロケータ（ＵＲＬ）をクライアント２０５に送信することにより、クライアント２０５は、加速プログラムを取得、ダウンロード、または受信する。一部の実施形態において、ＵＲＬは、機器２５０のストレージまたはメモリにおける加速プログラム１２０の位置を識別し、一方において、他の実施形態において、ＵＲＬは、サーバ２０６上、例えば加速プログラム１２０をダウンロードのために提供するようなウェブサーバ上の加速プログラム１２０を識別する。一実施形態において、加速プログラム１２０は、クライアント２０５に格納され、機器２５０は、キー、例えば暗号化またはライセンスキーをクライアント２０５に送信することによって、クライアント２０５は、クライアント２０５に格納された加速プログラム１２０をインストールおよび利用する。一部の実施形態において、機器２５０は、クライアント２０５にあらゆるファイル、コンフィギュレーション、データまたは他の情報を送信することによって、クライアント２０５に加速プログラム１２０をインストールおよび実行するように用いられる。
【０１３３】
一実施形態において、加速プログラム１２０は、クライアント２０５によって自動的にインストールおよび実行されるように、設計および構成される。加速プログラム１２０は、任意のファイル、エントリ、コンフィギュレーション、データまたは命令を含み得ることによって、オペレーティングシステムのタイプおよび形態に従って、加速プログラム１２０は、クライアント２０５のオペレーティングシステムによって登録または認識される。一実施形態において、別のコンピューティングデバイス、例えばサーバまたは機器は、クライアント２０５に加速プログラムを送信し、クライアント２０５は、自動的に加速プログラム１２０をインストールおよび実行する。一実施形態において、加速プログラム１２０は、プラグアンドプレイ（ＰｎＰ）デバイスとなるように設計および構成されることにより、ランしているコンピューティングデバイス１００に加えられる。一部の実施形態において、加速プログラム１２０は、自己インストール型の実行可能プログラム、例えばインストーラプログラムおよび加速プログラム１２０を含む実行可能プログラムである。他の実施形態において、加速プログラム１２０は、複数のファイルを含み得、それらは、例えばインストレーションパッケージまたはインストレーションダウンロードなどの、クライアント２０５のオペレーティングシステムに加速プログラム１２０を登録およびインストールするために必要なファイルである。例えば、加速プログラム１２０は、．ｉｎｆファイルおよび．ｓｙｓファイルを含み得る。．ｉｎｆファイルは、オペレーティングシステムのＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）ファミリーにおけるＷｉｎｄｏｗｓ（登録商標）セットアップに、デバイスを設定するために要求される情報、例えばデバイスに対する有効なロジカルコンフィギュレーションおよびデバイスと関連したドライバファイルの名前などを提供する。一部の実施形態において、．ｉｎｆファイルは、開始が実行可能なオペレーションシステムを述べるか、または通知するオートラン．ｉｎｆファイル、および該実行可能なオペレーションシステムに関連した任意のコンフィギュレーション情報を含み得る。一実施形態において、．ｓｙｓファイルは、加速プログラム１２０またはその一部を含むドラバファイルである。
【０１３４】
ステップ３２０において、クライアント２０５は、加速プログラム１２０を自動的にインストールする。加速プログラム１２０は、クライアント２０５のオペレーションシステムに従って、任意の適切な方法においてインストールされ得る。一実施形態において、クライアント２０５は、クライアント２０５を受け取ると、該プログラムをインストールする。一部の実施形態において、クライアント２０５は、加速プログラム１２０の静かなインストールを自動的に行うか、または実行する。一部の実施形態において、静かなインストールは、クライアント２０５のユーザまたは機器にトランスペアレントに行われる。他の実施形態において、加速プログラム１２０の静かなインストールは、クライアント２０５のリブートまたは再スタートを要求しない。別の実施形態において、静かなインストールは、インストレーションを開始および／または完了するためにユーザによる相互作用を要求しない。他の実施形態において、加速プログラム１２０の静かなインストールは、クライアント２０５がランしており、ネットワークスタック２１０のネットワーク層、セッション層および／またはアプリケーション層にトランスペアレントにランしている間に発生する。一部の実施形態において、加速プログラム１２０は、自己インストール型の実行可能プログラムであり、クライアント２０５によって実行される。他の実施形態において、クライアント２０５は、プラグアンドプレイマネジャーを用いることにより、加速プログラム１２０をインストールする。一実施形態において、クライアント２０５は、インストレーションマネジャーを含み、該マネジャーは、加速プログラム１２０を受信およびインストールする。別の実施形態において、機器２５０によって送信される加速プログラム１２０は、加速プログラム１２０をインストールするインストレーションプログラムをも含み得る。
【０１３５】
別の実施形態において、加速プログラム１２０は、静かなインストールを介して自動的にインストールされる。一実施形態において、静かなインストールは、ユーザによって付き添われることがないインストレーションを含む。別の実施形態において、静かなインストールは、インストレーションを開始および／または完了するためにユーザによる相互作用を要求しないまたは有することがないインストレーションを含む。一部の実施形態において、インストレーションは、インストレーションプロセスが、インストレーションの状態または進行に関する情報を表示しないという点において、静かである。一実施形態において、インストレーションは、ユーザにとってトランスペアレントであるという点において、静かである。他の実施形態において、インストレーションが静かであるのは、加速プログラム１２０のインストレーションが、クライアント２０５のリブートまたは再スタートを要求しないからである。別の実施形態において、インストレーションは、インストレーションが、クライアント２０５の作動の間に、クライアントの作動に対する中断または破裂なしに、シームレスに発生するという点において、静かである。そういう点において、加速プログラム１２０は、リブートを要求しないこと、およびインストレーションに関連したユーザに何も情報を表示しないことによって、ユーザまたはクライアント２０５のアプリケーションにトランスペアレントな方法によってインストールされ得る。
【０１３６】
クライアント２０５のリブートまたは再スタートを防止または回避するために、一部の実施形態において、オペレーティングシステムがランしている間に、クライアント２０５のオペレーティングシステムなどのクライアント２０５は、プラグアンドプレイマネジャーを有することによって、加速プログラム１２０の一実施形態においてネットワークドライバのようなドライバをプラグアンドプレイデバイスに対してインストールおよび構成する。一実施形態において、プラグアンドプレイマネジャーは、加速プログラム１２０のインストレーションパッケージの構成に基づいてクライアント２０５をリブートまたは再スタートするように命令されてはいない。別の実施形態において、．ｉｎｆファイルは、コンピュータをリブートまたは再スタートさせる命令を含まない。一実施形態において、共用で、使用中の動的リンクライブラリ（ＤＬＬ）と取り替える代わりに、加速プログラム１２０は、並行（ｓｉｄｅ−ｂｙ−ｓｉｄｅ）の構成要素としてインプリメントされ得る。他の特定の実施形態において、加速プログラム１２０のネットワークドライバに対して、加速プログラム１２０は、ＩＮｅｔＣｆｇＰｎｐＲｅｃｏｎｆｉｇＣａｌｌｂａｃｋネットワークドライバＡＰＩを用い、その結果として、ユーザは、オペレーションシステムをリブートすることを要求されることなく、ドライバにおいてコンフィギュレーションの変化が発生する。さらに、加速プログラム１２０は、ＩＮｅｔＣｆｇＣｏｍｐｏｎｅｔＣｏｎｔｒｏｌのＡｐｐｌｙＰｎｇＣｈａｎｇｅｓ方法のインプリメンテーション内のＳｅｎｄＰｎｐＲｅｃｏｎｆｉｇＡＰＩを呼ぶ通知目標を有し得、該目標を所有するネットワーク構成要素のドライバにコンフィギュレーション情報を送信する。ＳｅｎｄＰｎｇＲｅｃｏｎｆｉｇＡＰＩは、通知目標にドラバにデータを送信するメカニズムを提供し、一部の実施形態において、コンフィギュレーションの変化が発生する前にユーザにオペレーションシステムをリブートさせることを防ぐために用いられる。
【０１３７】
ステップ３２５において、加速プログラム１２０のインストレーションが、自動的、静か、トランスペアレント、またはそれ以外の様式で完了すると、加速プログラム１２０は、クライアント２０５上で自動的に実行される。一部の実施形態において、加速プログラム１２０をインストールするインストレーションプログラムは、加速プログラム１２０を開始または実行する。一部の実施形態において、加速プログラム１２０に対するインストーラプログラムは、システム呼出しを行うことにより、クライアント２０５のメモリにおいて加速プログラム１２０をロードまたは実行する。一実施形態において、加速プログラム１２０のインストレーションは、加速プログラム１２０を開始するための命令、コマンドまたはディレクティブを含む。一実施形態において、加速プログラム１２０は、自動ランコンフィギュレーション、例えばオートラン．ｉｎｆファイルを含み、クライアント２０５に自動的に加速プログラム１２０をランするように通知する。他の実施形態において、プラグアンドプレイマネジャーまたはクライアント２０５のオペレーティングシステムは、インストールすると自動的に加速プログラム１２０を実行する。一実施形態において、加速プログラム１２０は、クライアント２０５によって開始されるサービス、プロセス、スレッドまたはタスクを含む。一部の実施形態において、加速プログラム１２０は、自動的に開始されるように構成されるオペレーティングシステムのサービスである。一実施形態において、加速プログラム１２０は、クライアントに関するオペレーティングシステムのネットワークスタックのメモリにおいてロードされるネットワークドライバを含む。
【０１３８】
別の実施形態において、加速プログラム１２０は、クライアント２０５のメモリにおいてロードされるネットワークドライバを含む。一部の実施形態において、加速プログラム１２０は、ネットワークスタック２１０に割り当てられたメモリにロードされる。一部の場合において、加速プログラム１２０は、加速プログラム１２０がトランスポート層などのネットワークスタックのプロトコル層にアクセスすることを可能にするメモリ領域または空間においてロードまたは実行される。他の場合において、加速プログラムは、加速プログラム１２０がカーネルレベルデータ構造２２５にアクセスすることを可能にするメモリにおいてロードまたは実行される。別の実施形態において、加速プログラム１２０は、機器２２０ａ〜２２０ｎのメモリにおいてロードされる。別の実施形態において、加速プログラム１２０は、それ自体のメモリ空間またはコンテクストにおいて、独自に実行する。
一実施形態において、加速プログラム１２０は、機器２２０ａ〜２２０ｎのメモリ空間またはコンテクストにおいてランする。一部の実施形態において、加速プログラム１２０は、ユーザモードメモリまたはユーザモード２０３に割り当てられたメモリにロードされ、その一方で、他の実施形態において、加速プログラム１２０は、カーネルモードメモリまたはカーネルモード２０２に割り当てられたメモリにロードされる。
一部の実施形態において、加速プログラム１２０は、メモリにロードされ、および／またはクライアントのユーザ、クライアント２０５のアプリケーション、機器２５０またはサーバ２０６対してトランスペアレントにクライアント２０５上で実行される。別の実施形態において、加速プログラム１２０は、ネットワークスタック２１０のトランスポート層とインタフェースするために実行し、セッション層またはアプリケーション層のようなトランスポート層の上の任意のプロトコル層、およびネットワーク層のようなトランスポート層の下のあらゆるプロトコル層にトランスペアレントに実行する。一実施形態において、加速プログラム１２０は、クライアント２０５のあらゆるトランスポート層接続またはトランスポート層自体にトランスペアレントに実行する。
【０１３９】
ステップ３３０において、ロードされた、開始された、またはその他に実行中の加速プログラム１２０は、加速プログラム１２０のうちの任意の複数の加速技術を行い、それらの任意の技術は、１）マルチプロトコル圧縮２３８、２）転送制御プロトコルプーリング２２４、３）転送制御プロトコル多重化２２６、４）転送制御プロトコルバッファリング２２８、および５）キャッシュマネジャー２３２を介したキャッシングによって提供される。加速プログラム１２０はまた、クライアント２０５およびサーバ２０６の間の通信のあらゆる暗号化および／または復号化を行い得る。一実施形態において、加速プログラム１２０は、マルチプロトコル圧縮を行う。別の実施形態において、加速プログラム１２０は、転送制御プロトコルプーリングを行い、さらなる実施形態において、加速プログラム１２０は、プールドトランスポート層接続を介して多重化を行う。一実施形態において、加速プログラム１２０は、転送制御プロトコルバッファリングを行う。一部の実施系形態において、加速プログラム１２０は、キャッシングを行う。他の実施形態において、加速プログラム１２０は、キャッシングおよび圧縮を行う。一実施形態において、加速プログラム１２０は、トランスポート層のプーリングおよび多重化を伴ってキャッシングを行う。別の実施形態において、加速プログラム１２０は、トランスポート層のプーリングおよび多重化を伴ってマルチプロトコル圧縮を行う。別の実施形態において、加速プログラム１２０は、ＴＣＰバッファリングを伴ってキャッシングおよび／または圧縮を行い、さらなる実施形態において、ＴＣＰプーリングおよび多重化を伴って行われる。
【０１４０】
そのような点において、本発明のクライアント側の加速プログラム１２０は、機器２０５によって動的に提供され、静かな方法において、またはユーザまたはクライアントのアプリケーションに対してトランスペアレントに、クライアント２０５上において自動的にインストールおよび実行されることによって、クライアント２０５とサーバ２０６との間の通信に１つ以上のクライアント側の加速技術を行う。加速プログラム１２０は、これらの加速技術をネットワークスタックのあらゆるプロトコル層にトランスペアレントに、およびクライアントのユーザ、クライアントのアプリケーション、機器またはサーバにトランスペアレントに行い得る。
【０１４１】
別の局面において、本発明は、機器２５０に関連しており、該機器２５０は、クライアント２０５によってアクセスされるように要求されたアプリケーションが加速されるかどうかを決定し、アプリケーションが加速され得る場合には加速プログラム１２０をクライアント２０５に提供する。図３Ｂをここで参照すると、本発明の方法の別の実施形態が図示される。本発明は、接続または通信セッションを確立する要求およびサーバ上のアプリケーションにアクセスする要求がなされるときに、実施され得る。方法３５０の概略的な全体像において、機器２５０は、ステップ３５５においてサーバ２０６上のアプリケーション２２０ａ〜２２０ｎへのアクセスを要求するクライアント２０５から要求を傍受する。ステップ２６０において、機器２５０は、アプリケーション２２０が加速される能力を有するかどうかを決定する。ステップ３６５において、アプリケーション２２０が加速され得ない場合には、アプリケーションは、ステップ２６７において要求をサーバに転送する。ステップ３６５において、アプリケーション２２０が加速され得る場合には、機器２５０は、加速プログラム１２０がクライアント２０５にインストールされるか、以前においてクライアント２０５に送信されたかを決定する。加速プログラム１２０が、未だクライアント２０５に提供されていない場合には、方法３５０は、上述された方法３００のステップ３１５において継続することによって、加速プログラムを送信、インストールおよび実行する。加速プログラム１２０がインストールされていて、クライアント２０５上で実行している場合には、ステップ３７５において機器２５０は、クライアント２０５上の加速プログラム１２０にメッセージを送信し、アプリケーション２２０を加速する。方法３５０のステップ３３０において、加速プログラム１２０は、アプリケーション２２０に対する通信において複数の加速技術を行い、そのような通信を暗号化および／または復号化し得る。
【０１４２】
さらなる詳細において、機器２５０は、ステップ３５５において、あらゆる適切な手段およびメカニズムによって、サーバ２０６によって提供されるアプリケーションにアクセスするために、クライアント２０５からの要求を傍受し得る。一実施形態において、機器２５０のパケットエンジン２４０は、クライアント２０５からの通信を傍受する。他の実施形態において、機器２５０は、クライアント２０５を伴う第１のトランスポート層接続を、例えば加速プログラム１２０と確立し、第２のトランスポート層接続をクライアント２０５に代わってサーバ２０５と確立する。そのような点において、機器２５０は、サーバ２０６に送信されたあらゆるクライアントの通信を受信、傍受またはそうでなければ取得し得る。一部の実施形態において、機器２５０は、クライアント２０５に対する要求を傍受することによって、サーバ２０６と確立されたトランスポート層接続を介して、アプリケーション２２０にアクセスする。他の実施形態において、機器２０５は、要求を傍受することによって、ＨＴＴＰのアプリケーション層プロトコルのようなトランスポート層接続の上のプロトコル層を介して通信セッションを確立する。一実施形態において、機器２０５は、クライアント２０５からの要求を傍受することによって、ＩＣＡまたはＲＤＰなどのリモートディスプレイプロトコルを介して、サーバ２０６からアプリケーション２２０を表示および提供する。
【０１４３】
ステップ３６０において、機器２５０は、クライアント２０５によって要求されたアプリケーション２２０が加速され得るかどうかを決定する。一部の実施形態において、機器２５０は、アプリケーションを名前、タイプまたはカテゴリーによって識別する傍受されたクライアント要求からのアプリケーション識別子を識別、抜粋またはそうでなければ処理する。一実施形態において、アプリケーション加速決定メカニズム２７５は、機器２５０によって用いられることによって、アプリケーション２２０は加速され得るかどうか、そのような場合があるかを決定する。一部の実施形態において、アプリケーション加速決定メカニズム２７５は、データベース、ルックアップテーブル、またはデータ構造またはデータ目標などのメモリまたはストレージにおけるデータの構造化されたソースにおいて、クエリまたはルックアップを行うことによって、アプリケーション２２０が加速され得るかどうかを決定する。別の実施形態において、機器２５０は、要求のような通信をサーバ２０６に送信することによって、アプリケーション２２０は加速され得るかどうかを決定する。
【０１４４】
他の実施形態において、機器２５０は、パフォーマンスログまたはパフォーマンス履歴を有することによって、アプリケーション２２０が以前に加速されたかどうか、および該加速はアプリケーション２２０の、パフォーマンスおよび作動を向上させたかどうかを決定する。そのような点において、そのような加速がアプリケーション２２０のパフォーマンスまたは作動に対する向上の所定の閾値を満たす場合には、機器２５０は、アプリケーション２２０が加速され得ると決定し得る。さらに別の実施形態において、機器２５０は、ネットワーク２０４、クライアント２０５またはサーバ２０６の現在の作動およびパフォーマンスに基づいて、帰納的な規則を提供する。一実施形態において、クライアント２０５が、特定のパフォーマンスおよび作動上の特徴または性能、例えば特定のスピードプロセッサまたは最低量のメモリを有する場合には、アプリケーション２２０は、加速される能力があると決定され得る。一部の実施形態において、アプリケーション２２０は、構成されたポリシーまたは規則、例えば機器２５０のポリシーマネジャーにあるようなものに基づいて、加速される能力を有すると決定され得る。例えば、アプリケーション２２０および／またはサーバ２０６の特定のタイプにアクセスするクライアント２０５の特定のタイプを用いるリモートユーザの間で通信されるアプリケーション２２０は、加速され得る。他の実施形態において、アプリケーション２２０は、ユーザまたはクライアント２０５の認証および認可に基づいて、加速の能力を有すると決定され得る。さらに別の実施形態において、アプリケーション２２０は、加速されることを望むことはないと決定され得る。例えば、アプリケーション２２０は、まれにしか用いられないタイプである。
【０１４５】
ステップ３６５において、アプリケーション２２０が、加速される能力を有することがない、またはクライアント２０５上のアプリケーション２２０に加速技術を摘要することは望まれていないと決定された場合には、機器２５０は、ステップ３６８において傍受したクライアント要求をサーバ２０６に転送し、加速プログラム１２０をクライアント２０５には送信または提供しない。一実施形態において、機器２５０は、機器２２０の機器ベースの加速を行うか、提供し得る。他の実施形態において、機器２５０は、機器２５０上のアプリケーション２２０の加速を行わない。さらに別の実施形態において、機器２５０が、アプリケーション２２０は加速する能力を有さないか、またはそうでなければ望まれないとけっていする場合には、機器２５０は、アプリケーション２２０に対して一部の加速技術を行い、他の技術を行い得ない。
【０１４６】
ステップ３６５において、アプリケーション２２０が、加速される能力を有するか、またはそうでなければクライアント２０５上のアプリケーションに加速技術を適用することが望まれる場合には、機器２５０は、加速プログラム１２０がクライアント２０５に提供されたかどうかを決定する。一実施形態において、機器２５０は、加速プログラム１２０がクライアント２０５上にインストールされたかどうか、またはクライアント２０５上で実行しているかを決定する。一部の実施形態において、機器２５０は、クライアント２０５上の加速プログラム１２０に通信を送信することによって、加速プログラム１２０がクライアント２０５上でランしているかどうかを決定する。他の実施形態において、機器２５０は、ログファイルまたはログ履歴を確認することによって、加速プログラム１２０がクライアント２０５に送信されたかどうかを決定する。別の実施形態において、機器２５０は、機器２５０またはクライアント２０５の健康監視プログラム２１６を確認することによって、加速プログラム１２０がクライアント２０５上で実行しているかどうかを決定する。
【０１４７】
機器２５０が、加速プログラム１２０は、クライアント２０５上に送信、インストールおよび／または実行されていないと決定する場合には、機器２５０は、図３Ａに関連して記述された方法３００のステップに従って、加速プログラム１２０を提供する。例えば、機器２５０は、クライアント２０５に加速プログラム１２０を送信し、クライアント２０５は、受信すると、自動的にインストールおよび実行する。一実施形態において、方法３００の実施形態の適切なステップを行うと、機器２５０は、ステップ２７５において加速プログラムにメッセージを通信し得ることによって、１つ以上の加速技術をアプリケーション２２０に適用する。他の実施形態において、加速プログラム１２０が既にインストールされ、実行されている場合には、ステップ３７５において、機器２５０は、加速プログラム１２０にメッセージを通信することによって、アプリケーション２２０に１つ以上の加速技術を適用する。
【０１４８】
一部の実施形態において、加速プログラム１２０は、識別されたアプリケーション１２０に対する加速プログラム１２０によって利用可能な任意の加速技術を行う。他の実施形態において、機器２５０は、アプリケーション２２０に対してどの加速技術を行うかを加速プログラム１２０に示す。一実施形態において、加速プログラム１２０は、各セッションを基礎として、アプリケーション１２０に対して所望の加速技術を適用し得る。すなわち、機器２５０から加速プログラム１２０へのメッセージは、加速プログラム１２０に、この場合またはアプリケーション２２０のセッションに対する加速技術を行うことのみを通知する。他の実施形態において、加速プログラム１２０が、識別されたアプリケーション２２０に対する加速技術を適用するために、機器２５０からメッセージを受信すると、加速プログラム１２０は、任意の場合またはアプリケーション２２０のセッションに対して、またはクライアント２０５がリブートまたは再スタートされるまで、または機器２０５がリブートまたは再スタートされるまで加速技術を適用する。
【０１４９】
一実施形態において、ステップ３７５における機器２５０のメッセージは、アプリケーションに特定のものではない。例えば、メッセージは、加速プログラム１２０に、クライアント２０５のあらゆるアプリケーションに対する１つ以上の加速技術を実行するように通知する。一部の実施形態において、クライアント２０５に送信されたメッセージは、アプリケーション２２０に対する、または全てのアプリケーション２２０ａ〜２２０ｎに対するいずれか１つまたはそれ以上の加速技術を用いることを停止するようにアプリケーションプログラム１２０に通知する。別の実施形態において、機器２５０は、加速プログラム１２０にメッセージを通信することによって、特定のアプリケーション２２０を無視する。さらに別の実施形態において、機器２５０は、加速プログラム１２０にメッセージを通信することによって、加速プログラム１２０に加速技術に対する更新または新たな加速技術のアプリケーションなどのコンフィギュレーションデータまたはコンフィギュレーション情報を提供する。
【０１５０】
ステップ３３０において、加速プログラム１２０は、アプリケーション２２０に対する加速プログラム１２０のあらゆる複数の加速技術、例えば１）マルチプロトコル圧縮２３８、２）転送制御プロトコルプーリング２２４、３）転送制御プロトコル多重化２２６、４）転送制御プロトコルバッファリング２２８、および５）キャッシュマネジャー２３２を介したキャッシングによって提供されたあらゆる技術を行う。加速プログラム１２０は、クライアント２０５とサーバ２０６との間のアプリケーション２２０の通信のあらゆる暗号化および／復号化をも行い得る。一実施形態において、加速プログラム１２０は、アプリケーション関連のデータのマルチプロトコル圧縮を行う。別の実施形態において、加速プログラム１２０は、転送制御プロトコルプーリングを行い、さらなる実施形態において、加速プログラム１２０は、プールされたトランスポート層接続を介して多重化を行う。一実施形態において、加速プログラム１２０は、転送制御プロトコルバッファリングを行う。一部の実施形態において、加速プログラム１２０は、キャッシングを行う。他の実施形態において、加速プログラム１２０は、キャッシングおよび圧縮を行う。一実施形態において、加速プログラム１２０は、トランスポート層プーリングを伴うキャッシングを行い、さらなる実施形態において、多重化をも伴ってキャッシングを行う。別の実施形態において、加速プログラム１２０は、ＴＣＰバッファリングを伴ってマルチプロトコル圧縮を行い、さらなる実施形態において、トランスポート層プーリングを伴って行い、まだその上にさらなる実施形態において、多重化を伴って行う。別の実施形態において、加速プログラム１２０は、圧縮を伴ってキャッシングを行い、さらなる実施形態において、ＴＣＰプーリングを伴って行い、まだその上にさらなる実施形態において、多重化を伴って行う。
【０１５１】
そのような点において、本発明の機器２５０は、アプリケーションを加速させるかどうか、またはアプリケーションは加速され得るかどうかを動的に決定し、本発明のクライアント側の加速プログラム１２０に通信することによって、クライアント２０５上でアプリケーション２２０に対するあらゆる１つまたはそれ以上の加速技術を行う。さらに、一部の実施形態において、複数の加速プログラム１２０は、機器によってクライアント２０５に動的に届けられ得、クライアント２０５によって自動的にインストールおよび実行される。例えば、加速プログラムは、サーバ２０５に対する各接続またはアプリケーション２２０を伴う各通信セッションに対して、本発明の技術および方法に従って、提供され得る。そのような点において、クライアント２０５は、複数の加速プログラム１２０を自動的にインストールおよび実行し得ることによって、各サーバ２０６ａ〜２０６ｎまたは各アプリケーション２２０ａ〜２２０ｎに対して加速を操作し、行う。
【０１５２】
一局面において、本発明は、効果的かつ集積化された方法において、加速プログラムによって複数の加速技術が行われることに関連する。加速プログラム１２０は、転送制御プロトコル接続のトランスポート層においてネットワークパケットを傍受し、カーネルレベルデータ構造を用いることによって、ネットワークパケットのペイロードデータのような情報およびデータを取得し、加速プログラム１２０における単一のインタフェース地点または実行の位置において、複数の加速技術を適用する。図３Ｄをここで参照すると、集積化された方法において複数の加速技術を行うことに対する方法３８０の実施形態が、図示される。概略的な全体像において、加速プログラム１２０は、ステップ２８０において、トランスポート層接続を介してクライアント２０５とサーバ２０６との間の通信のネットワークパケットを、トランスポート層において傍受する。ステップ３９０において、加速プログラム１２０は、カーネルレベルデータ構造、例えば、クライアント２０５のネットワークスタック２１０へのＡＰＩを介して提供されるデータ構造を介して、ネットワークパケットに、トランスポート層においてアクセスする。ステップ３９５において、加速プログラム１２０は、インタフェース地点または加速プログラム１２０における実行の地点において、カーネルレベルデータ構造を用いて、集積化された方法において複数の加速技術を行う。
【０１５３】
さらなる詳細において、加速プログラム１２０は、ステップ３８５においてあらゆる適切な手段およびメカニズムによって、トランスポート層接続を介するクライアント２０５とサーバ２０６との間の通信のネットワークパケットを傍受する。一実施形態において、加速プログラム１２０は、クライアントによる要求またはその応答のネットワークパケット、またはそれに関連したネットワークパケットを傍受することによって、クライアント２０５とサーバ２０６との間にトランスポート層接続を確立する。別の実施形態において、加速プログラム１２０は、要求またはその応答のネットワークパケットまたはそれに関連したネットワークパケットを傍受することによって、クライアント２０５とサーバ２０６との間のトランスポート層接続を介するアプリケーション２２０にアクセスするか、または用いる。一実施形態において、加速プログラム１２０は、トランスポートドライバインターフェースを介してトランスポートプロトコルそうにおいてネットワークパケットを傍受するか、そうでなければネットワークドライバは、ネットワークスタック２１０のトランスポートプロトコル層においてインタフェースされる。別の実施形態において、加速プログラム１２０は、ネットワークドラバインターフェース規格（ＮＤＩＳ）またはミニポートドライバまたはミニフィルタドライバを介して、トランスポートプロトコル層、またはネットワークスタック２１０のあらゆる他のプロトコル層においてネットワークパケットを傍受する。一部の実施形態において、加速プログラム１２０は、フッキングまたはフィルタリングメカニズムを介してトランスポート層においてネットワークパケットを傍受する。
【０１５４】
ステップ３９０において、加速プログラム１２０は、カーネルレベルデータ構造２２５を介して、トランスポート層において傍受されたネットワークパケットの情報およびデータにアクセス、またはそうでなければ取得する。カーネルレベルデータ構造２２５を用いて、加速プログラム１２０は、トランスポート層においてネットワークパケットによって運ばれたか、または転送されたペイロードまたは１つ以上のプロトコル上の情報およびデータを取得し得る。一部の実施形態において、カーネルレベルデータ構造を用いてトランスポート層における、および／またはその上におけるネットワークスタックの層においてネットワークパケットを表すことは、トランスポート層において、およびトランスポート層ネットワークパケットによって運ばれたプロトコル層に対して、加速プログラム１２０に複数の加速技術を行わせるか、または作動させる。一実施形態において、単一のカーネルレベルデータ構造２２５を用いることは、ネットワークスタック２１０の様々なプロトコル層において複数のデータ構造を用いることからコンテクストをスイッチングすることの他に、コピーイングおよびメモリ割当てを防止または回避する。一実施形態において、加速プログラム１２０は、カーネルレベルデータ構造２２５を第２のデータ構造にコピーし、該第２のデータ構造は、別のカーネルレベルデータ構造またはユーザレベルのデータ構造を包含し得る。
【０１５５】
ステップ３９５において、加速プログラム１２０は、単一のインタフェース地点、またはプログラム２１０におけるロケーション、または一連の実行可能な命令において、またはプログラム２１０の実行の一地点において、複数の加速技術を行うか、実行するか、または作動させる。加速プログラム１２０は、加速プログラム１２０のあらゆる複数の加速技術、例えば、１）マルチプロトコル圧縮２３８、２）転送制御プロトコルプーリング２２４、３）転送制御プロトコル多重化２２６、４）転送制御プロトコルバッファリング２２８、および５）キャッシュマネジャー２３２を介したキャッシングによって提供されたあらゆる技術を行う。加速プログラム１２０は、加速プログラム１２０の加速技術の実行における同一地点において、クライアント２０５とサーバ２０６との間のアプリケーション２２０の通信のあらゆる暗号化および／または復号化をも行い得る。
【０１５６】
一実施形態において、加速プログラム１２０は、一連の実行可能な命令、例えば関数呼出しまたは一地域、または一ロケーションとして、あらゆる複数で所望の、互いが続いて起こる加速技術を行う。例えば、加速プログラム１２０は、カーネルレベルデータ構造を介して傍受されたネットワークパケットを取得し、次いで互いが続いて起こる加速技術のロジック、関数、規則または作動を表す命令を実行する。そのような点において、ネットワークパケットの情報およびデータは、カーネルレベルデータ構造２２５を介して抜粋または取得され得、加速技術を表す加速プログラム１２０のあらゆる命令に対するインプット、パラメータ、アーギュメントおよびコンディションとして用いられる。ネットワークパケットは、より高いレベルのプロトコルデータおよび情報を運ぶが、一部の実施形態における加速プログラム１２０は、実行の間において一地点において一度、ネットワークパケットおよびより高いレベルのプロトコルデータおよび情報を処理する。さらに、加速プログラム１２０は、集積化された方法において、あらゆる所望の順序にて複数の加速技術のそれぞれ、例えばキャッシュマネジャー２３２に格納された圧縮データ、またはキャッシュから抽出された圧縮／非圧縮データを行い得る。
【０１５７】
一実施形態において、加速プログラム１２０は、互いが続いて起こるマルチプロトコル圧縮およびキャッシングを行う。別の実施形態において、加速プログラム１２０は、プールされたトランスポート層接続を介して、転送制御プロトコルプーリングおよび多重化に関連した他のオペレーションを互いに続いて起こるように行う。一実施形態において、加速プログラム１２０は、圧縮またはキャッシング、あるいはＴＣＰプーリングおよび／または多重化に続いて起こるように、転送制御プロトコルバッファリングを行う。一部の実施形態において、加速プログラム１２０は、キャッシングを行う。一実施形態において、加速プログラム１２０は、トランスポート層のプーリングおよび多重化に続くようにキャッシングを行う。別の実施形態において、加速プログラム１２０は、トランスポート層のプーリングおよび多重化に続くようにマルチプロトコル圧縮を行う。別の実施形態において、加速プログラム１２０は、ＴＣＰバッファリングに続いて起こるようにキャッシングおよび／または圧縮を行い、さらなる実施形態において、ＴＣＰのプーリングおよび多重化に続いて起こるように行われる。
【０１５８】
加速プログラムは、加速技術を続いて行うように、一般的に記述されたが、続いて起こる実行には、加速に関連はせず、各加速技術の間に集積および実行される他のロジック、関数およびオペレーションを含み得る。加速プログラムはさらに、加速技術に対して実行可能な命令などの集積化から作動上およびパフォーマンスの効率を取得し、他のオペレーションまたは関数は、加速プログラムにおける単一のインタフェース地点または実行の地点において実行される。さらに、トランスポートプロトコル層の上のプロトコル層、または運ばれたプロトコル層に対する加速技術は、トランスポート層にて一度および／または一ロケーションにおいて処理される。そのような点において、これらのより高いれレベルのプロトコルに対する加速技術は、これらのより高いレベルのネットワークスタック２１０において、またはネットワークスタック２１０の後の地点において、ネットワークパケットトラバースおよびゲットとして再び適用される必要がない。
【０１５９】
他の局面において、本発明は、第１のプログラム２２２および加速プログラム１２０（または、この実施形態において第２のプログラムとして呼ばれる）を用いて実施される。一実施形態において、第２のプログラム１２０と共に第１のプログラム２２２は、例えば、機器２５０を介して、サーバ２０６との仮想プライベートネットワーク接続を促進および確立するように用いられ得、本発明のクライアント側の加速技術が適用され得る。別の実施形態において、第１のプログラム２２２は、第２のプログラム、つまりは加速プログラム１２０をインストールおよび実行するために用いられる。ここで図４Ａを参照すると、本発明のこの局面を実施する方法４００の実施形態が、図示される。概略的な全体像において、ステップ４０２において、クライアント２０５は、機器２０５との通信セッションにログインし、該セッションを確立する。ステップ４０４において、機器２５０は、第１のプログラム２２２をクライアント２０５に送信する。ステップ４０６において、クライアント２０５は、第１のプログラム２２２をインストールおよび実行し、該第１のプログラムは、続いて加速プログラム１２０、すなわち第２のプログラムをインストールおよび実行する。ステップ４０７において、クライアント２０５は、確立され暗号化されたデータ通信セッションを介して、プライベートネットワーク２０４上のアクセスリソースと通信する。ステップ４１０において、クライアント２０５は、機器２５０からログアウトし、機器２５０との通信セッションを終了する。
【０１６０】
方法４００のステップ４０２において、クライアント２０５は、ログインの手順を行い、ネットワーク２０４を介して機器２５０との暗号化されたデータ通信セッションを確立する。一実施形態において、暗号化されたデータ通信セッションは、クライアント２０５からプライベートデータ通信ネットワーク２０４’において機器２５０の背後に存在するサーバ２０６ａ〜２０６ｎのいずれかに、トンネルからブリッジへのトラフィックとして用いられる。実施形態において、クライアント２０５は、ウェブブラウザ、例えばＭｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）またはＮｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ（登録商標）を用いることによって、Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＳＳＬ）または他の暗号化方法、例えばＩＰＳｅｃ、およびＴｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ（ＴＬＳ）を用いている機器２５０とのデータ通信セッションにログインし、該セッションを確立する。別の実施形態において、Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ  ｏｖｅｒ  Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ（ＨＴＴＰＳ）のようなプロトコルが、暗号化されたデータ通信セッションを初期化するために用いられ得る。
【０１６１】
ステップ４０４において、暗号化されたデータ通信セッションのログインおよび確立に応答して、機器２５０は、ネットワーク２０４を介してクライアント２０５に第１のプログラムを送信する。第１のプログラムは、暗号化されたデータ通信セッションを介する通信に対してトンネルのエンドポイントとして機能するように設計、構築またはそうでなければ構成される。一実施形態において、第１のプログラムは、クライアント２０４のブラウザによって自動的にインストールおよび実行されるプラグインアプリケーションを含む。例えば、第１のプログラムは、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）  Ｗｅｂブラウザによって実行されるプラグインとして提供されるＡｃｔｉｖｅＸ制御を含み得る。別の実施形態において、第１のプログラムは、Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ（登録商標）  Ｗｅｂブラウザまたはネットワーク環境において動作する別の制御またはプログラミングの構成要素によって実行される、プラグインとして提供されるＪａｖａ（登録商標）アプレットを含み得る。
【０１６２】
ステップ４０６において、クライアント２０５は、第１のプログラム２２２をインストールおよび実行し、ここでは、第１のプログラムを実行することは、第２のプログラムをクライアント２０５上にインストールすることを含む。一実施形態において、第１のプログラム２２２は、方法３００および図３Ａと関連して記述されたあらゆる技術を用いるなどして、自動的にインストールおよび実行され得る。一部の実施形態において、第１のプログラム２２２は、機器２５０から第２のプログラム、つまりは加速プログラム１２０を取得、ダウンロード、または受信する。別の実施形態において、第１のプログラム２２２は、第２のプログラム、例えば加速プログラム１２０に対するインストーラまたはインストールマネジャーを含むことによって、静かなインストールまたはクライアント２０５のユーザ、クライアント２０５のアプリケーション２２０、機器２５０またはサーバ２０６にトランスペアレントなインストールを用いることによって、第２のプログラムを自動的にインストールおよび実行する。
【０１６３】
一実施形態において、第２のプログラムは、ネットワーク２０４上のリソースに行き先を定められたクライアント２０５上でランしているアプリケーション２２０から通信を傍受し、暗号化されたデータ通信セッションを介して機器２５０に送信するために、第１プログラム２２２に傍受された通信を提供するように、部分的に構成される。第２のプログラムはまた、イントラネットネットワーク名レゾルーションを提供し、オプションでネットワークトラフィックを分割するように構成され得る。トラフィックを分割することによって、本発明の実施形態は、どのトラフィックが第１のプログラム２２２のＳＳＬトンネルまたは暗号化トンネルにチャネルされるか、および、どのトラフィックが、クライアント２０５の通常、ルーチンまたは一般的な作動の下に、ネットワークスタック２１０のトランスポート層によって処理するために継続が許可されるか、または継続を可能にするか、を決定することができる。実施形態において、第２のプログラムは、動的なインターセプタ（例えば、フィルタデバイスドライバ）を含み、該インターセプタは、クライアント２０５のオペレーティングシステムに「フック」として挿入される。例えば、第２のプログラムは、フィルタデバイスドライバを含み得、該ドライバは、クライアントオペレーティングシステムのトランスポート層スタック、例えばＭｉｃｒｏｓｏｆｔ  Ｗｉｄｏｗｓ（登録商標）オペレーティングシステムのトランスポート層スタックに装着される。
【０１６４】
ステップ４０８において、第１および第２のプログラムがインストールされると、クライアント２０５上をランしているアプリケーションは、確立され暗号化されたデータ通信セッションを介して、プライベートデータ通信ネットワーク２０４上のアクセスリソース、例えばアプリケーションおよびデータと通信し得る。この通信が発生する方法は、図４Ｂに関連して以下に詳細に記述される。一実施形態において、上述された第１および第２のプログラムの機能は、本発明の加速プログラム１２０などのクライアント２０５によって自動的にインストールまたは実行される単一の制御またはプログラミングの構成要素によって行われることに留意されたい。仮想プライベートネットワーク接続および通信を提供することに加えて、第１のプログラム２２２および／または第２のプログラム、例えば加速プログラム１２０は、仮想プライベートネットワーク接続、例えば機器２５０への暗号化されたトンネルまたはブリッジを介してクライアントの通信上において、本明細書に記述される任意の加速技術を行い得る。
【０１６５】
ステップ４１０において、クライアント２０５は、ネットワーク２０４から切断するためにログアウト手順を行い、該ネットワークは、機器２５０との暗号化されたデータ通信セッションを終了する。一実施形態において、ログアウトの時点において、第１のプログラム２２２は、クライアント２０５のオペレーティングシステムになされた変更を自動的にクリーンアップすることによって、オペレーティングシステムを第１のプログラム２２２および／または第２のプログラムのインストールの前の状態に戻す。一実施形態において、第１のプログラム２２２および／または第２のプログラムはまた、アンインストーラまたはアンインストール命令を含み、クライアント２０５の継続される作動に割り込まない方法にて、クライアント２０５のオペレーティングシステムから、またはクライアント２０５上のさらなる作動から、第１および第２のプログラムを除去する。その上にさらなる実施形態において、第１のプログラム２２２および／または加速プログラム１２０は、本発明を用いて提供されたあらゆる通信接続またはセッションの間にクライアント２０５のアプリケーションによって用いられたあらゆるファイル、例えば一時的なファイルまたはクッキーを除去する。
【０１６６】
図４Ｂは、本発明の別の方法４５０の実施形態を図示し、ここでは、クライアント２０５は、プライベートデータ通信ネットワーク２０４上のアクセスリソースと通信する。例えば、方法４５０は、方法４００のステップ４０８が実行され得る方法を表す。概略的な全体図において、クライアント２０５は、ステップ４５２において、第１のプログラムおよび／または第２のプログラムを介して、新たな接続を作るか、またはドメイン名、例えばＴＣＰ／ＩＰドメイン名レゾルーションを決める。ステップ４５４において、第２のプログラムが実行される。ステップ４５６において、第２のプログラムは、クライアント２０５からプライベートネットワーク２０４’に行き先を定められた通信を傍受し、該通信を第１のプログラム２２２に別ルートで送信または送信する。ステップ４５８において、第１のプログラム２２２は、接続を終了またはプロキシし、ペイロードを分離し、かつ確立され暗号化された通信セッションを介するデリバリに対するペイロードを簡約する。ステップ４６０において、第１のプログラム２２２は、パブリックネットワーク２０４上で傍受した通信を、予め確立された暗号通信セッションを介してプライベートネットワーク２０４における機器２５０に送信する。ステップ４６２において、機器２５０は、第１のプログラムから受信した通信を復号し、復号された通信を適切な行先のリソース、例えばサーバ２０６ａ〜２０６ｍに転送する。ステップ４６４において、行先のリソースは、復号化された通信をプロセスし、ステップ４６４において、行先のリソースは、応答のある通信がある場合には、機器２５０に送信する。ステップ４６８において、機器２５０は、応答のある通信を暗号化し、パブリックネットワーク２０５上の暗号化された通信を、予め確立され暗号化された通信セッションを介してクライアント２０５の第１のプログラム２２２に送信する。ステップ４７０において、第１のプログラム２２２は、応答のある通信を復号化し、第２のプログラムを介して、適切なクライアントアプリケーションに復号化された通信を転送する。
【０１６７】
ステップ４５２において、クライアント２０５のアプリケーション２２０は、クライアント２０５のネットワークスタック２１０のトランスポートプロトコル層を介して、新たな接続を作るか、またはドメイン名を決める。一実施形態において、アプリケーション２２０は、クライアント２０５とサーバ２０６との間に、またはクライアント２０５と機器２５０との間にトランスポート層接続を確立するように要求し得る。別の実施形態において、アプリケーション２２０またはクライアント２０５は、サーバ２０６によって提供されるアプリケーション２２０へのアクセスを要求し得る。例えば、サーバ２０６は、サーバベースのコンピューティングまたはシンクライアントコンピューティングを提供し得、これは、サーバ２０６上で実行するアプリケーション２２０のアウトプットを表すＩＣＡまたはＲＤＰのリモートディスプレイプロトコルを送信することによって行われる。別の実施形態において、クライアント２０５は、ファイル、ディレクトリまたは電子メールサービスなどのサーバ２０６のリソースへのアクセスを要求し得る。一部の実施形態において、クライアント２０５は、パブリックネットワーク２０４上およびプライベートネットワーク２０４’上のサーバ２０６上にあり得る。他の実施形態において、クライアント２０５およびサーバ２０６は、異なるプライベートネットワーク上にあり得る。
【０１６８】
ステップ４５４において、第２のプログラムは、１つ以上の機能を自動的に、またはあらゆるトランスポート層の機能が開始される前に実行される。一部の実施形態において、第２のプログラムは、本発明の加速プログラム１２０であるか、そうでなければ加速プログラム１２０を含む。一実施形態において、第２のプログラムは、ステップ４５２のクライアント要求を傍受または受信する。一部の実施形態において、クライアント２０５のアプリケーション２２０は、ネットワークスタック２１０にＡＰＩ呼出しを行い、該ＡＰＩ呼出しは、第２のプログラムによって傍受される。あらゆるＡＰＩ呼出しがネットワークスタック２１０のトランスポート層によって処理される前に、第２のプログラムは、ネットワークスタック２１０にフックされるか、そうでなければインタフェースされることによって、トランスポート層接続を介する送信に対して送信または処理される通信に先立って、ロジック、規則、関数または作動を実行する。
【０１６９】
ステップ４５６において、第２のプログラムは、クライアント２０５からの通信を、ネットワーク２０４’上のリソースに行き先を定められた、クライアント２０５上のあらゆるアプリケーション２２０ａ〜２２０ｎなどによって傍受し、第１のプログラム２２２に別ルートで送信し、該第１のプログラムは、一実施形態においてネットワーク環境において動作するＡｃｔｉｖｅＸ制御プラグイン、Ｊａｖａ（登録商標）アプレット、または他の制御またはプログラミングの構成要素を含む。第２のプログラムは、ネットワークパケットまたは複数のネットワークパケットから行先情報にアクセスし得るか、読み取り得るか、または取得し得、該ネットワークパケットまたは複数のネットワークパケットは、傍受された通信を提供することによって、該通信は、ネットワーク２０４’、例えば機器２５０の背後にあるプライベートネットワークに行き先が定められていることを決定する。例えば、第２のプログラムは、ネットワークパケットからの行先ＩＰアドレスおよび／またはポートを抜粋または解釈し得る。傍受された通信が、ネットワーク２０４’に対して行き先が定められると、第２のプログラムは、任意のインタープロセス通信インタフェースまたはＡＰＩ呼出しなどの任意の適切なインタフェース手段およびメカニズムを介して、第１のプログラム２２２に傍受された通信を通信する。一実施形態において、傍受された通信は、第１のプログラム２２２にそのままの状態で送信されるか、他の実施形態において、該傍受された通信は、第１のプログラム２２２への送信に先立って、第２のプログラムによって予め処理される。例えば、第２のプログラムは、傍受された通信からペイロードを除去し得、該ペイロードを第１のプログラム２２２に転送し得る。
【０１７０】
ステップ４５８において、各傍受された通信は、第１のプログラム２２２によって終了またはプロキシされ、第１のプログラム２２２は、傍受された通信を準備し、確立され暗号化されたデータ通信セッションを介して送信する。一実施形態において、第１のプログラム２２２は、ペイロードを分離させ、確立され暗号化された通信セッションを介するデリバリに対するペイロードを簡約する。別の実施形態において、第１のプログラム２２２は、第２のプログラムから受信された傍受された通信を簡約する。一部の実施形態において、ペイロードは、ＴＣＰペイロードであり、クライアント２０５とサーバ２０６との間、例えば機器２５０を介する新たなＴＣＰ接続で簡約される。
【０１７１】
ステップ４６０において、第１のプログラム２２２は、ネットワーク２０４上の傍受された通信を、予め確定され暗号化されたデータ通信セッションを介して、ネットワーク２０４’における機器２５０に送信する。一部の実施形態において、第１のプログラム２２２は、傍受された通信を暗号化し、暗号化され傍受された通信を機器２５０に送信する。一実施形態において、暗号化は、ＳＳＬプロトコルに従って実行される。別の実施形態において、暗号化は、ＴＬＳベースである。あらゆるタイプおおよび形状の暗号化および／または復号化は、第１のプログラム２２２または加速プログラム１２０によって用いられ得る。
【０１７２】
ステップ４６２において、機器２５０は、プロキシとして機能し、第１のプログラム２２２によって送信された接続を終了する。機器２５０は、第１のプログラム２２２から受信された通信を復号化し、該復号化された通信を、機器２５０がネットワーク２０４上の行先リソースを用いて確立させた第２の接続を介して、適切な行先リソース上に通信する。一実施形態において、復号化は、ＳＳＬプロトコルまたは他に適用が可能な暗号化または復号化のプロトコルに従って実行される。一部の実施形態において、機器２５０は、行先リソースに転送された通信上で、１つ以上の加速技術を行い、該行先リソースは、１つ以上の１）マルチプロトコル圧縮２３８’、２）転送制御プロトコルプーリング２２４’、３）転送制御プロトコル多重化２２６’、４）転送制御プロトコルバッファリング２２８’、および５）キャッシュマネジャー２３２’を介したキャッシングである。
【０１７３】
ステップ４６４において、行先リソースは、復号化された通信を処理する。一実施形態において、復号化された通信は、接続または通信セッションを確立するための要求である。別の実施形態において、復号化された通信は、クライアント２０５に代わってアプリケーション２２０を開始またはアクセスするための要求である。他の実施形態において、復号化された通信は、ウェブページに対する要求、例えばＨＴＴＰ要求であり、ウェブサーバ２０６からウェブページを受信する。
【０１７４】
ステップ４６６において、復号化された通信が要求を含み、該要求に対する応答が存在する場合には、行先リソースは、機器２５０に応答のある通信を送信する。一部の実施形態において、要求は、クライアント２０５によって要求された接続または通信セッションの確立の承認を含む。他の実施形態において、応答は、エラーメッセージを含む。一実施形態において、応答は、認証要求またはチャレンジ応答メカニズムを含む。一部の実施形態において、応答は、クライアント２０５によって用いられるべき加速プログラム１２０を含む。別の実施形態において、応答は、ＨＴＭＬ、例えばクライアント２０５によって表示されるウェブページを含む。別の実施形態において、応答は、目標、例えば動的に生成される目標を含む。
【０１７５】
ステップ４６８において、機器２５０は、ネットワーク２０４上の応答のある通信を、予め確立された暗号化されたデータ通信セッションを介して、クライアント２０５上の第１のプログラム２２０に送信する。一部の実施形態において、暗号化は、ＳＳＬプロトコルまたは他に適切な暗号化および復号化のプロトコルに従って実行される。さらに、機器２５０は、クライアント２０５、例えばマルチプロトコル圧縮２３８’、キャッシング２３２’またはＴＣＰバッファリング２２８’と通信する、本発明の任意の加速技術を行い得る。
【０１７６】
ステップ４７０において、第１のプログラム２２２は、応答のある通信を復号化し、第２のプログラムを介して、適切なアプリケーション２２２に該通信を転送する。第１のプログラム２２２は、あらゆる適切なインタフェース手段およびメカニズムを用い得、あらゆるタイプおよび形状のインタープロセス通信メカニズムまたはＡＰＩ呼出しなどを介して、第２のプログラムと通信し得る。第２のプログラムは、クライアント２０５のネットワークスタック２１０を介して、応答のある通信をアプリケーション２２０に提供する。そのような点において、アプリケーション２２０は、アプリケーション２２０への変化または変更は何もなく、応答のある通信をトランスペアレントに受信する。
【０１７７】
本発明の別の実施形態に従うと、ステップ４５８で、クライアント２０５は、ネットワーク２０４を介して通信を送信する前に、傍受された通信の追加的な処理を実行する。本発明の実施形態は、このようなデータを暗号化する前に、クライアントで、プロキシ終了接続として機能するＶＰＮソリューションを提供するので、追加的な処理は、より効率的に実行され得る。このような処理は、クライアントアプリケーションが、どのようなＩＰアドレスを選択したとしても、またランタイムにこれらのアドレスをどのようなアドレスに動的に変更したとしても、クライアントアプリケーションが使用できるようにするために、傍受された通信のドメイン名サービス（ＤＮＳ）ネームレゾリューション（ｎａｍｅ  ｒｅｓｏｌｕｔｉｏｎ）を含み得る。このような追加的な処理は、本発明の実施形態が、効率的に、他の技術（例えば、分配されたゲートウェイまたはサーバの間で、さらなる利用可能性の向上と、さらなる効率の向上を実行するための全体的なサービス負荷均衡）と効率的に統合されることを可能にする。追加的な接続処理は、また、傍受された通信に関する詳細なログおよび統計を保持することも可能にする。
【０１７８】
本発明の別の実施形態において、機器２５０は、ステップ４６２で示されるように、ネットワーク２０４上の目的地に通信を転送するよりも、むしろ、クライアント２０５上の第一のプログラムから受信された通信を終了し、そのプログラムに含まれる１つ以上の要求をさらに処理する。このさらなる処理は、バックエンドの暗号化を含み得、通信が、ネットワーク２０４上の適切な目的地に配送される前に、機器２５０によって再び暗号化され、それによって、エンドツーエンドのネットワークセキュリティを提供する。その後、この目的地は、トラフィックを解読し、適切に応答する。さらに、このような処理は、目的地サーバによって追加的なワークを要求されるよりも、むしろ、機器２５０がキャッシュから離れて（ｏｕｔ  ｏｆ）応答をサービスすることを可能にし得、局所的なネットワーク負荷均衡、全体的なサービス負荷均衡、および／または通信上の圧縮を実行して、ネットワーク２０４の効率および応答性を向上し得る。
【０１７９】
上述の方法に従うと、暗号化されたデータ通信セッションに基づくＶＰＮは、クライアント２０５とネットワーク２０４との間に確立される。例えば、一実施形態において、安全なＶＰＮは、ＨＴＴＰＳを経由して確立される。その後、クライアント２０５からネットワーク２０４への全ての通信は、この暗号化されたデータ通信セッションを介して、第一のプログラム経由で、機器２５０にルーティングされ、また、その逆方向にルーティングされる。暗号化されたデータ通信セッションは、ＨＴＴＰＳを用いて確立され得るが、この暗号化されたデータ通信セッションを介してパスされる通信は、ＨＴＴＰＳパケットデータであることも、あるいはＨＴＴＰパケットデータであることすらも必要でないことには、留意すべきである。例えば、通信は、また、送信制御プロトコル／ユーザデータグラムプロトコル（ＴＣＰ／ＵＤＰ）またはインターネット制御メッセージプロトコル（ＩＣＭＰ）パケットデータを備え得る。しかしながら、これらの例は、限定することを意図されない。さらに、図４Ｂを参照して記載された方法は、クライアント２０５上のアプリケーションとネットワーク２０４上のリソースとの間の要求−応答タイプの通信を説明するが、本発明に従う暗号化された通信は、要求−応答をベースとする必要はない。むしろ、通信は、任意のタイプのものであり得る。したがって、接続または通信セッション（例えば、ＵＤＰセッション）を確立し得る任意のクライアントアプリケーションは、本発明の実施形態に従って暗号化された通信を送受信し得る。
【０１８０】
別の局面において、本発明は、サーバ２０６と接続または通信するための任意の仲介デバイスをクライアントから動的にバイパスする加速プログラム１２０に関連する。例えば、クライアント２０５は、本発明の機器２５０のような１つ以上の仲介物（ｉｎｔｅｒｍｅｄｉａｒｙ）を経由して、サーバと接続し得る。何らかの理由で、例えば、機器２５０が、メンテナンスのためにダウンし得るか、あるいは再起動または再開の処理中であり得るなど、サーバ２０６と通信するための仲介物が、もはや、クライアント２０５による使用に利用できなくなり得る。本発明の加速プログラム１２０は、その仲介物が利用できないと判断すると、サーバ２０６との異なる接続または通信セッション経路を自動的に確立する。これは、クライアント２０５のユーザまたはアプリケーションには、その接続および／または通信セッションが変更されなかったかのように、さもなくば、妨害されたかのように、トランスペアレントに起こり得る。
【０１８１】
ここで、図５を参照すると、仲介物を自動的にバイパスする本発明の方法５００の実施形態が示される。簡単に総括すると、ステップ５０５で、加速プログラム１２０が、機器２５０のような仲介物を経由して、クライアント２０５とサーバ２０６との間に、トランスポート層接続を確立する。ステップ５１０で、確立されたトランスポート層接続を経由するサーバ２０６へのクライアント２０５による通信に、仲介物は使用可能でないと、加速プログラム１２０は、判断する。ステップ５１５で、加速プログラム１２０は、クライアント２０５からサーバ２０６への通信を、クライアント２０５上で傍受する。ステップ５２０で、加速プログラム１２０は、第二のトランスポート層接続を、クライアント２０５とサーバ２０６との間に確立し、その結果として、クライアントによるサーバ２０６への通信に使用可能でないと判断された仲介物をバイパスする。ステップ５２５で、加速プログラム１２０は、第二のトランスポート層接続を経由するサーバ２０６へのクライアント２０５による傍受された通信を送信する。
【０１８２】
さらなる詳細において、ステップ５０５で、加速プログラム１２０は、クライアント２０５とサーバ２０６との間で、仲介物を経由するトランスポート層接続を確立する。一つの実施形態において、仲介物は、機器２０５を備える。別の実施形態において、仲介物は、キャッシュ、サーバ、ゲートウェイ、ファイアウォール、ブリッジ、ルータ、スイッチ、ハブ、プロキシ、あるいは仲介物のこれらのタイプおよび形式のうちの任意の機能性および動作として機能するか、これらの機能性および動作を提供する任意のソフトウェアアプリケーションまたはプログラムのうちのいずれか一つを備える。一つの実施形態において、仲介物は、サーバ２０６上で動作し得る。一部の実施形態において、トランスポート層接続は、同じタイプおよび形式あるいは異なるタイプおよび形式の複数の仲介物を経由して確立される。別の実施形態において、トランスポート層接続は、本明細書に記載された本発明の動作に従って、クライアント２０５または機器２５０のいずれかで確立されるトランスポート層接続のプールの接続からなる。
【０１８３】
ステップ５１０で、確立されたトランスポート層接続を経由するサーバ２０６へのクライアント２０５による通信に、仲介物が利用可能でないと、あるいはさもなくば、使用可能でないと、加速プログラム１２０は、判断する。加速プログラム１２０は、任意の適切な手段および／またはメカニズムによって、仲介物のステータスまたは利用可能性を判断し得る。一つの実施形態において、加速プログラム１２０は、仲介物への送信と関連するエラーメッセージまたは失敗返答（ｆａｉｌｕｒｅ  ｒｅｐｌｙ）を受信することによって、仲介物が利用可能でないと判断する。例えば、加速プログラム１２０は、確立されたトランスポート層接続を経由するクライアント２０５からの通信を送信するときに、失敗したトランスポート層通信応答を受信し得る。別の実施形態において、加速プログラム１２０は、仲介物のステータスおよび利用可能性をモニタするために、所定の頻度で、ピング（ｐｉｎｇ）コマンドを仲介物に送信し得る。加速プログラム１２０が仲介物から返答を受信しない場合、あるいは、一部の実施形態において、遅延された返答または所望の待ち時間（ｌａｔｅｎｃｙ）よりも長い待ち時間を有する返答を受信する場合、加速プログラム１２０は、その仲介物がクライアント２０５によって利用可能または使用可能でないと判断し得る。別の実施形態において、その仲介物がクライアント２０５によって、利用可能でない、さもなくば、使用可能でないことを同定する情報を提供するメッセージを、サーバ２０６、機器２５０、または仲介物は、クライアント２０５または加速プログラム１２０に送信し得る。一部の実施形態において、確立されたトランスポート層接続は、妨害（ｄｉｓｒｕｐｔ）または中断（ｉｎｔｅｒｒｕｐｔ）され、あるいは他の実施形態において、閉じられる。
【０１８４】
ステップ５１５で、加速プログラム１２０は、確立されたトランスポート層接続を介して、仲介物を経由して進むように運命づけられたクライアント２０５からサーバ２０６への通信を傍受する。加速プログラム１２０は、ネットワークスタック２１０の任意の点および任意のプロトコル層で、通信を傍受し得る。一つの実施形態において、加速プログラム１２０は、確立されたトランスポート層接続上に送信する前に、トランスポートプロトコル層で、通信を傍受する。例えば、一部の実施形態において、加速プログラム１２０は、トランスポートドライバインターフェースを有するネットワークドライバを、さもなくば、トランスポートプロトコル層にインタフェースするネットワークドライバを備える。他の実施形態において、本発明は、第一のプログラム２２２と、図４Ａ〜４Ｂと関連して議論されたような第二のプログラムとして加速プログラム１２０を用いて、実施される。ここで、第一のプログラム２２２または加速プログラム１２０のいずれかが、通信を傍受する。
【０１８５】
ステップ５２０で、加速プログラム１２０は、クライアント２０５のために、サーバ２０５への第二のトランスポート層接続を確立する。これは、ステップ５１０で、クライアントによって、利用可能でない、あるいは使用可能でないと判断された仲介物を、クライアント２０５がバイパスするためである。一つの実施形態において、加速プログラム１２０は、第二のトランスポート層接続を、直接サーバ２０６に確立する。例えば、クライアント２０５およびサーバが、同じネットワーク２０５上にあるとき、あるいはクライアント２０５とサーバ２０６との間でルーティング可能な異なるネットワーク上にあるときである。別の実施形態において、加速プログラム１２０は、第二の機器２５０’のような第二の仲介物と、第二のトランスポート層接続を確立する。一部の実施形態において、加速プログラム１２０は、機器２５０に、サーバ２５０との別のトランスポート層接続を確立するように要求する。一つの実施形態において、機器２５０は、サーバ２０６へのトランスポート層接続のプールの中から（ｏｆ）第二のトランスポート層接続を使用する。別の実施形態において、加速プログラム１２０は、サーバ２０６に、第二のトランスポート層接続を確立するように要求する。一部の実施形態において、加速プログラム１２０は、本明細書に記載された本発明の動作に従って、加速プログラム１２０によって、サーバ２０６と確立されたトランスポート層接続のプールからの第二のトランスポート層接続を使用する。
【０１８６】
一つの実施形態において、ステップ５２０で、加速プログラム１２０は、クライアント２０５のユーザまたはアプリケーション２２０にはトランスペアレントに、あるいは一部の実施形態においては、トランスポート層の上または下の任意のプロトコル層にトランスペアレントに、第二のトランスポート層接続を確立する。一部の局面において、ステップ５１０で、仲介物がクライアント２０５によって利用可能でない、あるいは使用されるべきではないと判断されると、第二のトランスポート層接続は、自動的に確立される。他の実施形態において、傍受された通信をサーバ２０６へ送信すること（例えば、通信を送信する最初の試み）に失敗すると、クライアント２０５のために、第二のトランスポート層接続が、自動的に確立される。一部の実施形態において、通信の送信を１回以上再試行するのに失敗すると、あるいは所定の回数の再試行を果たすと、第二のトランスポート層接続が、自動的に確立される。別の実施形態において、仲介物がネットワークパケットの送信速度または受信速度を遅延していると判断すると、あるいは仲介物が待ち時間を生じさせていると判断すると、さもなくば、望ましからぬ方法でトランスポート層接続の使用に影響を及ぼしていると判断すると、第二のトランスポート層接続が、確立される。一つの実施形態において、加速プログラム１２０は、負荷平衡を実行し、仲介物からクライアント２０５および／または第二の仲介物への任意の処理または動作の負荷を除く（ｏｆｆｌｏａｄ）ために、その仲介物をバイパスする第二のトランスポート層接続を確立する。
【０１８７】
ステップ５２５で、加速プログラム１２０は、クライアント２０５の傍受された通信を、第二のトランスポート層接続を経由して、サーバ２０６に送信する。一つの実施形態において、加速プログラム１２０は、傍受された通信を直接、サーバ１０６に送信する。別の実施形態において、加速プログラム１２０は、第二の機器２５０のような第二の仲介物を経由して、傍受された通信を送信する。第二のトランスポート層接続を使用することによって、加速プログラム１２０は、仲介物をバイパスし、クライアント２０５のアプリケーション２２０は、サーバ２０６との動作を続ける。一つの実施形態において、クライアント２０５のアプリケーション２２０は、そのアプリケーション２２０が、以前または最初に確立したトランスポート層接続を使用し続けているかのように、サーバ２２０との動作および通信を続ける。このように、加速プログラム１２０は、仲介物が加速プログラム１２０によってバイパスされない場合、起こり得る任意の通信の中断、分裂、待ち時間、遅延、あるいは動作問題または性能問題を防止、回避、または迂回する。別の局面において、本発明のこの技術は、たとえ、仲介するデバイスからのアクセスに問題またはアクセスの中断があったとしても、サーバ２０６またはリモートアクセスされたアプリケーションへの連続的なアクセスをクライアント２０５に、自動的に提供する。
【０１８８】
さらに、上述された本発明のリダイレクトおよびバイパスの技術は、クライアント２０５上で負荷均衡およびトラフィック管理を実行して、アプリケーション２２０ａ〜２２０ｎを提供する１つ以上のサーバ２０６ａ〜２０６ｎに、あるいはクライアント２０５への他のコンテンツおよび機能性にアクセスするために、使用され得る。例えば、一つの実施形態において、クライアントによって、サーバにアクセスするために使用される仲介物または機器は、トランスポート層接続を増やすと、過負荷になり得、応答速度、性能、または他の動作を低下させ得る。加速プログラム１２０は、仲介物または機器の性能が低下していると判断すると、加速プログラム１２０は、クライアントを別の仲介物または機器にリダイレクトし得るか、あるいはサーバをリダイレクトして、クライアントのサーバへのエンドツーエンドの接続性における任意の性能のボトルネックをバイパスし得る。
【０１８９】
別の局面において、本発明は、クライアントのネットワークスタックのトランスポートプロトコル層に関連する、あるいはその層で実行されるクライアント側の加速技術に関する。加速プログラム１２０は、１）伝送制御プロトコル（ＴＣＰ）バッファリング２２８、２）ＴＣＰ接続プーリング２２４、および３）ＴＣＰ多重化２２６のうちの任意の１つ以上を実行する実行可能な命令を備え得る。一部の実施形態において、加速プログラム１２０は、クライアントのネットワークスタックのトランスポートプロトコル層で傍受された通信をトランスペアレントに処理し、加速プログラム１２０は、クライアントのＴＣＰ接続と、クライアント２０５のアプリケーション２２０ａ〜２２０ｎによる接続を介する使用および送信とを制御し得、管理し得る。図６は、本発明のＴＣＰバッファリング技術を実施する方法６００の実施形態を示し、その一方で、図７Ａ〜７Ｂは、本発明のＴＣＰ接続プーリング技術の実施形態を示し、そして、図８、図９、および図１０は、ＴＣＰ多重化技術を示す。
【０１９０】
図６に示される方法６００の実施形態を簡単に総括すると、ステップ６０５で、加速プログラム１２０は、クライアント２０５からサーバ２０６への通信（例えば、クライアント２０５によるサーバ２０６へアクセスしたいという要求）を傍受する。ステップ６１０で、加速プログラム１２０は、受信したサーバ応答の消費速度と、クライアントによって送信された要求の産出速度との差異が、所定の閾値を下回るかどうかを判断する。ステップ６１５で、産出速度と消費速度との差異が、所定の閾値を下回らない場合、ステップ６１７で、加速プログラム１２０は、サーバ２６０に通信を転送する。ステップ６１５で、両速度の差異が、所定の閾値を下回る場合、ステップ６２０で、加速プログラム１２０は、クライアント２０５のメモリの中に、その通信を格納する。ステップ６２５で、加速プログラム１２０は、両速度の差異が、所定の閾値を上回るように変化したかどうかを判断し、上回った場合は、格納された通信をサーバ２０６に転送する。上回らない場合、ステップ６２５で、速度の差異が所定の閾値を上回る時点まで、加速プログラム１２０は、クライアント２０５のメモリの中に通信を維持する。例えば、クライアント２０５が生成された応答を消費し得るより高速で、クライアント２０５が、サーバ２０６に要求を送信する場合、本発明の加速プログラム１２０は、速度の差異が変化する将来の時点まで、さらなる送信を保持する。
【０１９１】
さらなる詳細には、ステップ６０５で、加速プログラムは、クライアント２０５からサーバ２０６への通信を傍受する。加速プログラム１２０は、ネットワークスタック２１０の任意の点および任意のプロトコル層で、通信を傍受し得る。一つの実施形態において、加速プログラム１２０は、確立されたトランスポート層接続上への送信前に、トランスポートプロトコル層で、通信を傍受する。例えば、一部の実施形態において、加速プログラム１２０は、トランスポートドライバインターフェースを有するネットワークドライバを、さもなくば、トランスポートプロトコル層にインタフェースするネットワークドライバを備える。他の実施形態において、本発明は、第一のプログラム２２２と、図４Ａ〜４Ｂと関連して議論されたような第二のプログラムとして加速プログラム１２０とを用いて、実施される。ここで、第一のプログラム２２２または加速プログラム１２０のいずれかが、通信を傍受する。一つの実施形態において、通信は、サーバ２０６のリソース（例えば、アプリケーション２２０）を使用したい、さもなくば、アクセスしたいという、クライアント２０５による要求を備える。
【０１９２】
ステップ６１０で、クライアント２０５の消費速度と産出速度との差異が、所定の閾値を下回るかどうかを、加速プログラム１２０は判断する。一つの実施形態において、加速プログラム１２０は、クライアント２０５によってサーバ２０６に送信された要求の数をカウントし、トラックし、別の実施形態において、加速プログラム１２０は、クライアント２０５によってサーバ２０６から受信された応答の数をカウントし、トラックする。一部の実施形態において、クライアント２０５は、アプリケーション２２０ごとに、送信された応答と、受信された要求とをトラックする。応答および要求は、ネットワークスタック２１０の任意のプロトコル層で、トラックされ得る。一つの実施形態において、クライアント２０５またはアプリケーション２２０によって送信された要求の数は、送信ポイントから、クライアント２０５とサーバ２０６との間のトランスポート層またはトランスポート層接続まで、カウントされ、トラックされる。同様に、別の実施形態において、クライアント２０５またはアプリケーション２２０によってサーバ２０６から受信された応答の数は、受信ポイントから、クライアント２０５とサーバ２０６との間のトランスポート層またはトランスポート層接続まで、および／またはネットワークスタック２１０のトランスポート層の上で、アプリケーション層のようなプロトコル層に応答が提供されるポイントで、カウントされ、トラックされる。
【０１９３】
一部の実施形態において、加速プログラム１２０は、クライアント２０５とサーバ２０６との間に、加速プログラム１２０によって確立されたトランスポート層接続の送受信ＴＣＰバッファに関する情報およびデータにアクセスし、検査し、あるいは、さもなくば、入手する。例えば、加速プログラム１２０は、任意のＴＣＰ／ＩＰバッファのデフォルトおよび最大サイズと、そのバッファの現在使用中の部分とを決定して、クライアント２０５からサーバ２０６へのネットワークパケットの送信速度と受信速度との間の差異を決定し得る。他の実施形態において、加速プログラム１２０は、任意のタイプおよび形式の輻輳アルゴリズムを使用して、クライアント２０５からサーバ２０６へのネットワークパケットの消費と産出との差異によって生じた輻輳があるかどうかを判断する。別の実施形態において、加速プログラム１２０は、トランスポート層接続によって（例えば、ネットワークドライバまたはＴＣＰサービスプロバイダによって）使用される輻輳アルゴリズムからの情報またはデータとインタフェースするか、あるいはこれらの情報またはデータを入手する。例えば、一つの実施形態において、加速プログラム１２０は、接続によって使用される輻輳ウィンドウに関する情報およびデータを判断する。
【０１９４】
所定の閾値は、加速プログラム１２０の任意の適切な手段およびメカニズムによって、構成、特定、規定、または同定され得る。一つの実施形態において、閾値は、クライアント２０５および／またはアプリケーション２２０の産出速度と消費速度との間において、百分率で、相対的に、絶対的に、あるいはその他で、特定され得る。消費速度および／または産出速度は、任意の期間にわたって、任意の細かさ（ｇｒａｎｕｌａｒｉｔｙ）で、消費された受信の数と産出された送信の数とのそれぞれによって、同定され得る。一部の実施形態において、閾値は、クライアント２０５および／またはアプリケーション２２０の産出速度と消費速度との間の量の差異として特定され得、一部の実施形態において、ある期間にわたる量の差異として、特定され得る。例えば、閾値は、クライアント２０５が消費するよりも、１００個多い要求をクライアント２０５が産出する期間として、特定され得る。別の例において、閾値は、期間ごとに、クライアント２０５がサーバ２０６に産出する要求が、その同じ期間の間に、クライアント２０５によって消費される要求よりも１０個多いときの時点として、特定され得る。
【０１９５】
ステップ６１５で、クライアント２０５および／またはアプリケーション２２０の産出速度と消費速度との差異が、所定の閾値を下回らない場合、ステップ６１７で、加速プログラム１２０は、サーバ２６０に通信を転送する。一部の実施形態において、加速プログラムは、通信するために、本発明の加速技術の任意のものを実行する。例えば、通信は、プーリングされ、多重化されたトランスポート層接続を経由して、サーバに転送され得、追加的に、圧縮され得る。他の実施形態において、クライアント２０５は、クライアント２０５にサーバ２０６への接続を提供する機器２５０に通信を転送し得る。
【０１９６】
ステップ６１５で、クライアント２０５および／またはアプリケーション２２０の産出速度と消費速度との差異が、所定の閾値を下回る場合、ステップ６２０で、加速プログラム１２０は、クライアント２０５のメモリの中に、その通信を格納する。一部の実施形態において、メモリは、クライアント２０５のカーネルモード２０２のメモリであり得、その一方で、他の実施形態において、メモリは、クライアント２０５のユーザモード２０３であり得る。一つの実施形態において、加速プログラム１２０は、キャッシュマネージャ２３２を経由して、キャッシュの中に通信を格納し得る。他の実施形態において、加速プログラム１２０は、加速プログラム１２０によってアクセス可能なオブジェクト、データ構造、または他のデータエレメントを使用して、傍受された通信をバッファ、保持、さもなくば、格納し得る。一つの実施形態において、傍受された通信は、メモリの中に、圧縮される方法で、格納され得る。別の実施形態において、加速プログラム１２０は、傍受された通信を、第一のプログラム２２２に送信して、時間的に後の時点で、送信するために、メモリの中に、格納または保持する。
【０１９７】
ステップ６２５で、加速プログラム１２０は、サーバ２０６に格納された通信をいつ送信するかを決定する。一つの実施形態において、加速プログラム１２０は、ステップ６１０および６１５を実行して、クライアント２０５の産出速度と消費速度との差異が閾値を上回ると判断すると、加速プログラム１２０は、ステップ６１７でサーバ２０６に格納された通信を転送する。一部の実施形態において、加速プログラム１２０は、定期的な頻度または所定の頻度で、あるいはポーリング（ｐｏｌｌｉｎｇ）またはイベントのベースで、産出速度と消費速度との差異を比較して、その差異が、所定の閾値を超えるときに、加速プログラム１２０は、通信をサーバ２０６に転送する。他の実施形態において、加速プログラム１２０は、タイマーを設定または構成し、その傍受された通信がどのくらいの間にわたって、格納されているかを決定する。タイマーの設定時間が切れると、加速プログラム１２０は、サーバ２０６に格納された通信を送信する。別の実施形態において、加速プログラム１２０は、傍受された通信が格納されてから、クライアント２０５によって消費されたサーバ応答の数をチェックする。消費された応答の数が、所定の数よりも大きい場合、加速プログラム１２０は、傍受された通信をメモリバッファまたはストレージからリリースし、サーバ２０６への送信のために通信をサブミット（ｓｕｂｍｉｔ）する。
【０１９８】
ステップ６２５で、加速プログラム１２０が、産出速度または消費速度が適切な方法で変化しなかったと判断する場合、加速プログラム１２０は、適切な時点が来るまで、傍受された通信を保持または維持する。一つの実施形態において、ステップ６１７で、たとえ、産出速度および／または消費速度が変化しなくても、加速プログラム１２０は、通信をサーバに転送する。例えば、産出速度および／または消費速度を所定の期間待った後に、これらの速度が変化しないとき、加速プログラム１２０は、サーバ２０６に通信を転送する。
【０１９９】
本発明のＴＣＰバッファリング技術は、一般的に、傍受された通信または要求と関連して、議論され、本発明の方法６００の実施形態は、連続的に、ほぼ同時に、あるいは同時に、クライアント２０５からサーバ２０５への複数の傍受された通信に対して、実施され得る。追加的に、別の実施形態において、本発明の方法６００は、クライアントから複数のサーバ２０６ａ〜２０６ｎへの通信に対して、クライアント上で実施され得る。例えば、方法６００の第一のインスタンスは、クライアント２０５と第一のサーバ２０６ａとの間で実施され得、方法６００の第二のインスタンスは、クライアント２０５と第二のサーバ２０６ｂとの間で実施され得る。さらに、一部の実施形態において、方法６００は、第一のアプリケーション２００ａに対して、また第二のアプリケーションに対しても、各アプリケーションの産出速度と消費速度とをそれぞれ用いて、実施され得る。別の実施形態において、方法６００は、第一のアプリケーション２００ａに対しては実施され得るが、第二のアプリケーション２００ｎに対しては実施され得ない。
【０２００】
本発明の別の局面に従うと、クライアント側の加速プログラム１２０は、クライアントの接続を繰り返し開閉することによって生じるサーバ２０６ａ〜２０６ｎおよび／または機器２５０の処理負荷を低減させる。この処理負荷は、クライアントが、各サーバとの１つ以上の接続を開き、クライアント２０５のアプリケーションによって、サーバ２０６に、繰り返してデータアクセスすることを可能にするこれらの接続を維持することによるものである。この技術は、「接続プーリング（ｐｏｏｌｉｎｇ）」と本明細書では、一般的に称される。方法７００を簡単に総括すると、ステップ７０２で、加速プログラム１２０は、サーバにアクセスしたいというアプリケーションの要求を傍受し、ステップ７０４で、その要求と関連するサーバのアイデンティティを決定する。ステップ７０６で、加速プログラム１２０は、その加速プログラム１２０が、アプリケーション２２０によって自由に使用できるサーバ２０６への確立されたトランスポート層接続を有するかどうかを判断する。アプリケーション２２０によって自由に使用できるサーバ２０６へのトランスポート層接続がない場合、ステップ７０８で、加速プログラム２２０は、クライアント２０５によって使用するために、サーバ２０６へのトランスポート層接続を確立する。ステップ７０６で、アプリケーション２２０によって使用するために、利用可能なトランスポート層接続がある場合、ステップ７１０で、加速プログラム１２０は、その利用可能なトランスポート層接続を経由する送信または通信に対するアプリケーションの要求を翻訳する。
【０２０１】
さらに総括すると、ステップ７１２で、加速プログラム１２０は、サーバ２０６からの要求に対する応答を受信し、ステップ７１４で、その応答をアプリケーション２２０に対する応答に翻訳する。ステップ７１６で、加速プログラム１２０は、クライアント２０５のアプリケーション２２０ａ〜２２０ｎの任意のものによって使用するために、トランスポート層接続を開いたまま、維持または保持し得る。サーバ２０６ａ〜２０６ｎとのトランスポート層接続をクライアント２０５上で開いたまま維持することと、必要に応じて、アプリケーションとの接続を開閉することとによって、加速プログラム１２０は、インターネットのようなネットワーク２０４を介して、クライアント２０５にサービスすることと関連するＴＣＰ接続の負荷問題から、サーバを解放する。ステップ７１８で、加速プログラム１２０は、トランスポート層接続が、クライアント２０５の１つ以上のアプリケーション２２０によって、サーバ２０６にアクセスするために、もはや使用されないと判断する場合、加速プログラム１２０は、ある時点で、その接続を閉じる。
【０２０２】
さらなる詳細において、ステップ７０２で、加速プログラム１２０は、サーバ２０６にアクセスしたいというクライアント２０５の任意のアプリケーション２２０ａ〜２２０ｎによる要求を傍受する。一部の実施形態において、トランスポート層接続を確立して、要求をその接続を経由して送信する前に、その要求は、トランスポートプロトコル層で傍受される。他の実施形態において、要求は、トランスポート層またはトランスポート層接続の上の任意のプロトコル層で傍受される。一つの実施形態において、アプリケーション２２０の要求は、サーバ２０６とのトランスポート層接続を開きたい、あるいは確立したいという要求である。一部の実施形態において、要求に応答して、加速プログラム１２０は、クライアント２０５のアプリケーション２２０ａ〜２２０ｎによって使用するためのトランスポート層接続のプールの第一のトランスポート層接続を確立する。別の実施形態において、アプリケーションの要求は、クライアント２０５の確立されたトランスポート層接続を経由して、サーバにアクセスしたいという要求である。
【０２０３】
ステップ７０４で、加速プログラム１２０は、任意の適切な手段およびメカニズムによって、その要求からサーバ２０６のアイデンティティを決定する。一部の実施形態において、サーバ２０６のドメイン名またはインターネットプロトコルアドレスは、要求のコンテンツによって、同定されるか、さもなくば、参照される。例えば、その要求のテキストストリングは、サーバ２０６のドメイン名を同定し得る。一つの実施形態において、サーバ２０６のアイデンティティは、ＴＣＰパケットのヘッダ情報（例えば、目的地のインターネットプロトコルアドレスおよびポート番号）によって、決定される。別の実施形態において、サーバ２０６は、アプリケーション２２０と関連し、加速プログラム１２０は、データベースまたは他の構造化された情報ストレージとの関連をルックアップまたはクエリする。
【０２０４】
ステップ７０６で、加速プログラム１２０は、アプリケーション２２０によって使用するのに利用可能であるか、さもなくば、自由に使用できるトランスポート層接続があるかどうかを判断する。一つの実施形態において、加速プログラム１２０は、サーバ２０６とのトランスポート層接続を依然として確立し得ず、そのような場合、アプリケーション２２０が使用するのに利用可能なトランスポート層接続はない。別の実施形態において、加速プログラム１２０は、サーバ２０６と以前に確立されたトランスポート層接続を有し得るが、別のアプリケーションが、その接続を現在アクティブに使用していると判断する。以下でさらに詳細に議論されるように、確立された加速プログラム１２０は、トランスポート層接続が、別のアプリケーション２２０によって使用するのに利用可能であるかどうか、あるいは、アプリケーション２２０のために、サーバ２０６から受信されているメッセージ（例えば、要求に対する応答）の長さに基づいて、アプリケーション２２０ｓ〜２２０ｎによって共有され得るかどうかを、および／または、サーバ２０６とアプリケーション２２０との間の通信が、現在アイドルであるかどうかを判断する。
【０２０５】
ステップ７０８で、加速プログラム１２０は、トランスポート層接続がアプリケーション２２０によって使用するのに利用可能でないと判断し、加速プログラム１２０は、サーバ２０６と、トランスポート層接続を確立する。一部の実施形態において、ステップ７０８で確立されたトランスポート層接続は、サーバ２０６との第一のトランスポート層接続であり、他の実施形態において、そのトランスポート層接続は、サーバ２０６への複数のトランスポート層接続のうちの第二のトランスポート層接続である。さらに、別の実施形態において、加速プログラム１２０は、既に確立されたトランスポート層接続が、利用可能になるか、あるいはサーバ２０６へのアプリケーションの要求を自由に通信できるようになるのを待つ。例えば、加速プログラム１２０は、第一のアプリケーション２２０ａが、確立された接続を経由するサーバ２０６とのトランザクションを間もなく完了し得ると判断し得る。
【０２０６】
ステップ７１０で、加速プログラム１２０は、トランスポート層接続を経由して、サーバ１０６へ送信されるべきアプリケーションの要求を翻訳する。一部の実施形態において、加速プログラム１２０は、接続を共有しているクライアント２０５の全てのアプリケーション２２０ａ〜２２０ｎに対するトランスポート層接続通信に対して、１つのポート番号を使用する。一部の場合、加速プログラム１２０は、アプリケーションベースによって、アプリケーション上で、要求と、その要求に対する継続中の応答とをトラックする。そのようにして、加速プログラム１２０は、どのアプリケーション２２０が、任意の所与の時点に、サーバ２０６に、トランスポート層接続を経由して、ネットワークパケットを送受信しているかを認識する。一つの実施形態において、一度に一つのアプリケーション２２０のみが、トランスポート層接続上で、送受信され、したがって、加速プログラム２２０は、どのアプリケーション２２０が接続を使用しているのかを理解する。一部の実施形態において、加速プログラム１２０は、アプリケーション２２０の処理ｉｄを要求と関連付ける。他の実施形態において、加速プログラム１２０は、ポート番号を提供し、そのポート番号をアプリケーション２２０と関連付け、ＴＣＰネットワークパケットの中で、そのポート番号をアプリケーションに割り当てられたポート番号に送信されるように修正する。別の実施形態において、ポート番号がアプリケーション２２０によって提供されて、加速プログラム１２０が変更するか、さもなくば、ポート番号をＴＣＰネットワークパケットに従って提供する。
【０２０７】
ステップ７１２で、加速プログラム１２０は、サーバ２０６からのアプリケーションの要求に対する応答を受信する。一つの実施形態において、サーバ２０６は、その要求に応答しない。別の実施形態において、サーバ２０６は、エラーメッセージまたは失敗メッセージで、応答する。一部の実施形態において、サーバ２０６は、複数の応答で、応答する。他の実施形態において、サーバ２０６は、複数のネットワークパケットまたは複数のＴＣＰセグメントを備える応答で、応答する。別の実施形態において、サーバ２０６は、アプリケーション２２０と関連するソースポート番号またはアプリケーション２２０に割り当てられたソースポート番号を識別する１つ以上のネットワークパケットで応答する。一つの実施形態において、サーバ２０６は、トランスポート層接続のポート番号を識別し、クライアント２０５の複数のアプリケーションに対して使用される１つ以上のネットワークパケットで応答する。
【０２０８】
ステップ７１４で、加速プログラム１２０は、サーバ２０６からの応答を、アプリケーション２２０に応答するような方法で、翻訳するか、さもなくば、処理する。一つの実施形態において、加速プログラム１２０は、受信した１つまたは複数のネットワークパケットのソースポート番号を、アプリケーション２２０のポート番号に置換する。別の実施形態において、加速プログラム１２０は、トラッキングメカニズムを経由して、トランスポート層接続を現在使用しているアプリケーション２２０を判断し、ネットワークスタック２１０を経由して、アプリケーション２２０に応答をパスする。一つの実施形態において、応答は、接続のトランスポート層の上のネットワークスタックのプロトコル層を経由して処理するために、変更されず、パスされない。一部の実施形態において、加速プログラム１２０は、アプリケーション２２０への応答を処理して、転送する前に、受信されるべき応答の複数の部分（例えば、ＴＣＰセグメント）を待つ。一つの実施形態において、加速プログラム１２０は、アプリケーション２２０への応答とインタフェースし、その応答を提供する第一のプログラム２２２への応答をパスする。
【０２０９】
ステップ７１６で、加速プログラム１２０は、クライアント２０５からサーバ２０６への１つ以上のトランスポート層接続のプールを開いたまま、トランスポート層接続を維持または保持し得る。一つの実施形態において、加速プログラム１２０またはネットワークスタック２１０のトランスポート層ドライバは、キープアライブ（ｋｅｅｐ−ａｌｉｖｅ）メカニズムを含む。このメカニズムは、接続がないとすれば、アイドルであるとき（例えば、送信するデータがないとき）、接続の他端を定期的にプロービングする。キープアライブメカニズムは、接続がアイドルであり得るが、接続がまだアクティブであることを確認する応答を受信するために、このメッセージを送信し得る。キープアライブメッセージと、その対応する応答とは、任意のタイプおよび形式のフォーマット、コマンド、指令、または通信を含み得る。このように、一部の実施形態において、加速プログラム１２０は、トランスポート層ドライバを経由して、トランスポート層接続へのキープアライブメッセージを送信するか、あるいは送信させる。一部の実施形態において、加速プログラム１２０は、キープアライブメッセージに対して、頻度を設定し、他の実施形態において、接続を用いるアプリケーション２２０ａ〜２２０ｎの挙動または活動に基づいて、キープアライブメッセージの頻度を変化させる。
【０２１０】
一部の実施形態において、加速プログラム１２０は、トランスポート層接続を介して受信した任意のＲＳＴおよび／またはＦＩＮコマンド（すなわち、ＴＣＰ接続をリセットおよび／または終了するためのＴＣＰ／ＩＰコマンド）を傍受し得る。一つの実施形態において、加速プログラム１２０は、傍受されたＲＳＴおよび／またはＦＩＮコマンドを無視するか、そのコマンドに対してアクションをとらないか、あるいは、さもなくば、そのコマンドを落とすか、削除するか、またはフラッシュする。別の実施形態において、加速プログラム１２０は、ＲＳＴおよび／またはＦＩＮコマンドを傍受して、受信するが、接続の他端にメッセージを送信して、その接続を開いたまま保持または維持する。他の実施形態において、加速プログラム１２０は、ＲＳＴおよび／またはＦＩＮコマンドを処理するために、確立したトランスポート層接続を閉じるのに応答して、新たなトランスポート層接続を確立する。
【０２１１】
他の実施形態において、加速プログラム１２０は、傍受されたクライアント２０５の通信の中に、命令、コマンド、または指令を挿入し、サーバ２０６が接続を開いたまま保持するように、あるいは保持しないとすれば、クライアント２０５が接続を閉じるようにというコマンドを送信しない限り、接続を閉じないように、保持する。例えば、一つの実施形態において、加速プログラム１２０は、ＨＴＴＰプロトコルのＧＥＴ要求の通信（例えば、プロトコルバージョン１．０）を傍受し、キープアライブヘッダ（例えば、「接続：キープアライブ」）をサーバ２０６への通信の中に挿入する。別の実施形態において、ＧＥＴ要求または他のＨＴＴＰコマンドは、キープアライブヘッダを含み得る。これらの実施形態において、加速プログラム１２０は、通信を傍受し得、キープアライブヘッダに対するチェックを行い得、次いで、サーバ２０６に通信を転送し得る。一部の実施形態において、キープアライブメカニズムが内在するＨＴＴＰのバージョン１．１またはそれ以上のバージョンが、使用され、これによって、クライアント２０５が接続を閉じたいと要求するまで、サーバ２０６は接続を開いたまま保持するようにする。別の実施形態において、加速プログラム１２０は、クライアント２０５が再起動または再開されるまで、ネットワーク２０４が利用不可能になるまで、あるいはクライアント２０５がネットワーク２０４から接続を外されるまで、もしくはサーバが再起動または再開されるまで、トランスポート層接続をサーバ２０６に開いたまま、保持する。
【０２１２】
ステップ７１８で、加速プログラム１２０は、任意の所望の時点で、クライアント２０５とサーバ２０６との間のトランスポート層接続の任意の１つ以上を閉じ得る。一部の実施形態において、加速プログラム１２０は、トランスポート層接続を使用するクライアント２０５上の１つ以上のアプリケーション２２０ａ〜２２０ｎの終了を受けて、その接続を閉じる。他の実施形態において、加速プログラム１２０は、トランスポート層接続を使用する任意のアプリケーション２２０ａ〜２２０ｎに対するタイムアウト期間の満了を受けて、その接続を閉じる。例えば、加速プログラム１２０は、所定の期間を経過すると、タイマーが期間満了するように構成、設定、あるいは提供し得、接続がその期間の間、アイドルであるか、あるいはアイドルのままに留まる場合、加速プログラム１２０は、その接続を閉じる。一部の実施形態において、サーバ２０６は、再起動または再開し得るか、あるいは接続が分裂または中断され得て、加速プログラム１２０は、接続を閉じる。一部の実施形態において、加速プログラム１２０は、サーバ２０６に要求を送信して、サーバ２０６から応答のデータを全て受信するのが完了すると、ＲＳＴおよび／またはＦＩＮコマンドを送信し、あるいは送信させるようにする。他の実施形態において、トランスポート層接続またはトランスポート層接続のプールは、クライアント２０５の再開または再起動すると、ネットワーク２０４への接続が切断されると、あるいはネットワーク２０４が利用不可能なると、もしくはサーバ２０６が再開または再起動すると、閉じられる。
【０２１３】
一部の実施形態において、サーバ２０６への第一のトランスポート層接続は、サーバへの第二のトランスポート層接続が閉じられている間、開いたまま保持される。なぜなら、加速プログラム１２０は、クライアント２０５の１つ以上のアプリケーション２２０ａ〜２２０ｎによって、サーバ２０６への接続を共有するために、第一のトランスポート層接続のみが必要とされると判断するからである。他の実施形態において、加速プログラム１２０は、任意のサーバ２０６ａ〜２２０ｎへの１つのトランスポート層接続のプールを維持し、クライアント２０５上のアプリケーション２２０ａ〜２２０ｎの要求、通信、またはトランスポート層接続の使用の増加に基づいて、所与のサーバ２０６への第二の接続または複数の接続を確立する。
【０２１４】
方法７００の一実施形態は、クライアント２０５からサーバ２０６への１つ以上のトランスポート層接続のプールと関連して、一般的に議論されたが、加速プログラム１２０は、クライアントと、複数のサーバ２０６ａ〜２０６ｎのそれぞれとの間に、トランスポート層接続のプールを連続的に、ほぼ同時に、あるいは同時に、確立し得る。このように、第一のアプリケーション２２０ａおよび第二のアプリケーション２２０ｂは、サーバ２０６ａへの１つ以上のトランスポート層接続の第一のプールを使用中であり得、第三のアプリケーション２２０ｃおよび第四のアプリケーション２２０ｄは、サーバ２０６ｂへの１つ以上のトランスポート層接続の第二のプールを使用中であり得る。さらに、方法７００の実施形態のステップのそれぞれは、異なるインスタンスにおいて、異なる頻度で、実行され得る。一部の実施形態において、加速プログラム１２０の複数のインスタンスは、各サーバ２０６ａ〜２０６ｎへの１つ以上のトランスポート層接続の各プールを操作（ｈａｎｄｌｅ）するために、使用され得る。
【０２１５】
図７Ｂは、一つの例示的な実施形態に従う本発明のトランスポート層接続プーリング技術を示すメッセージステップの線図である。簡単に総括すると、図７Ｂは、クライアント２０５の２つのアプリケーション２２０ａおよび２２０ｂによって使用するために、一つの実施形態において、サーバ２０６へのトランスポート層接続を、あるいは、別の実施形態において、機器２０５へのトランスポート層接続を提供する加速プログラム１２０の流れ図を示す。クライアント２０４上の加速プログラム１２０は、ステップ７５２によって示されるように、アプリケーション２２０によって提供されるネットワークアドレス１を用いて、クライアント２０５とサーバ２０６または機器２０５との間に、第一のトランスポート層接続を開く。ステップ７５２は、双方向ステップとして示される。なぜなら、ＴＣＰ／ＩＰプロトコルは、マルチステージのハンドシェーク（ｈａｎｄｓｈａｋｅ）を用いて、接続を開くからである。
【０２１６】
トランスポート層接続が一度確立されると、ステップ７５４で示されるように、加速プログラム１２０は、／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌの経路名を特定するアプリケーション２２０ａからＧＥＴ要求を傍受する。自由なトランスポート層接続は、加速プログラム１２０とサーバ２０６または機器２０５との間に開いてないので、加速プログラム１２０は、トランスポート層接続を開く。一つの実施形態において、ステップ７５６で示されるように、加速プログラム１２０は、サーバ２６０を特定するネットワークアドレス２の第二のネットワークアドレスに、アプリケーション２２０ａの要求をマッピングする。例えば、加速プログラム１２０は、ネットワークアドレス翻訳を実行して、届け先ＩＰアドレスおよび／または届け先ポートを、アプリケーション２２０ａによって要求されたサーバ２０６ａ、あるいはその要求を操作し得るか、その要求に応答し得る別のサーバ２０６ｂに修正する。別の実施形態において、加速プログラム１２０は、アプリケーション２２０ｓによって受信または生成された際に、サーバ２０６、または機器２５０に要求を送信する。
【０２１７】
ステップ７５８で示されるように、加速プログラム１２０は、また、サーバ２０６または機器２５０に、ＧＥＴ要求をパスする。一つの実施形態において、機器２５０は、サーバ２０６に要求を転送し、さらなる実施形態において、機器２５０は、機器２５０とサーバ２０６との間で、プールされたトランスポート層接続、またはプールされ、多重化されたトランスポート層接続を経由して、要求を転送する。一部の実施形態において、ステップ７６０に示されるように、サーバ２０６は、要求されたウェブページで応答する。ステップ７６２に示されるように、加速プログラム１２０は、ウェブページをアプリケーション２２０ａに転送する。一つの実施形態において、ステップ７６４に示されるように、加速プログラム１２０とサーバ２０６または機器２５０との間のトランスポート層接続は、閉じられる。他の実施形態において、加速プログラム１２０は、閉じた（ｃｌｏｓｅ）要求を傍受し、その要求を無視して、トランスポート層接続を開いたままにしておく。ＴＣＰ／ＩＰプロトコルに従うと、ネットワーク接続を閉じることは、マルチステージ処理を含み得る。それゆえ、ステップ７６４のフローラインは、双方向として示される。他の実施形態において、また本発明のプーリングの局面の技術に従うと、第一のアプリケーション２２０のために確立され、第一のアプリケーション２２０によって使用されるトランスポート層接続は、同じアプリケーション２２０ａまたは第二のアプリケーション２２０ｂのような異なるアプリケーションから、さらなるデータステップに適合するように、開かれたままに保持されるか、さもなくば、開かれたままに維持される。
【０２１８】
ステップ７６６で、加速プログラム１２０は、第二のアプリケーション２２０ａからサーバ２０６または機器２５０への要求を傍受する。自由なトランスポート層接続（例えば、ステップ７５６で、第一のアプリケーション２２０ａのために確立されたトランスポート層接続）が開いているか、および／または第二のアプリケーション２２０ｂによって使用可能である場合、加速プログラム１２０は、この以前に確立されたトランスポート層接続を使用する。このように、ステップ７６６で、第二のトランスポート層接続は、開かれる必要はない。さもなくば、加速プログラム１２０は、サーバ２０６または機器２５０への第二のトランスポート層接続を確立する。ステップ７６８で、加速プログラムは、第二のアプリケーション２２０ｂからの要求（例えば、ウェブページ／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌを要求するもの）を傍受し、ステップ７７０で、その要求をサーバ２０６または機器２５０に送信する。自由な接続は、加速プログラム１２０とサーバ１２０との間に、既に開かれているので、加速プログラム１２０が、さらなる接続を開くための処理負荷で、サーバ１２０に負担を掛ける必要はない。ステップ７７２で、加速プログラム１２０は、サーバ２０６からの応答を、例えば、トランスポート層接続から機器２５０経由で、傍受または受信し、第二のアプリケーションサーバ２２０ｂにその応答を転送する。ステップ７７６で、加速プログラム１２０は、第二のアプリケーション２２０ｂからの閉じる要求を傍受し、一部の実施形態において、接続を閉じ、一方、他の実施形態において、その要求を無視し、接続を保持し、第一のアプリケーション２２０ａ、第二のアプリケーション２２０ｂ、あるいはクライアント２０５のさらに別のアプリケーション２２０ｃ〜２２０ｎからのさらなるデータ要求に適応する。
【０２１９】
ステップ７７６で、サーバ２０６またはアプリケーション２５０との加速プログラム１２０を閉じる結果となる幾つかのシナリオがある。例えば、クライアント２０５または加速プログラム１２０は、クライアント２０５がアプリケーション２２０ａおよび２２０ｂに対して要求したデータを全て検索すると、あるいはアプリケーション２２０ａおよび２２０ｂを終了するか、シャットダウンするか、あるいは出ると、ＦＩＮ（終了）コマンドを開始し得る。一部の実施形態において、クライアント２０５または加速プログラム１２０は、また、同様の条件下で、ＲＳＴ（リセット）コマンドを開始し得る。加速プログラム１２０とサーバ２０６または機器２５０との間の接続を閉じることに加え、ＲＳＴコマンドは、結果として、幾つかのハウスキーピング動作が実行され、サーバ側の接続を良好な状態で保つ。特に、ＴＣＰプロトコルは、サーバがセグメントを受け入れるように、ＲＳＴコマンドが、正しいＳＥＱ（シーケンス）番号を有することを保証する。しかしながら、ＲＳＴコマンドは、正しいＡＣＫ（確認応答）番号を有することを保証されない。このシナリオに対処するために、加速プログラム１２０は、サーバ２０６または機器２５０によって送信されるデータのバイトをトラックし続け、それらのバイトは、クライアント２０５によって確認応答される。クライアント２０５が、サーバ２０６によるデータをまだ全て確認応答していない場合、加速プログラム１２０は、確認応答されていないバイトを計算し、ＡＣＫをサーバ２０５に送信する。
【０２２０】
さらに、図７Ｂに示されていないが、サーバ２０６または機器２５０はまた、それ自身とクライアント２０５との間の接続を閉じ得る。サーバ２０６または機器２５０は、クライアント２０５にＦＩＮコマンドを送信する。一部の実施形態において、それに応答して、加速プログラム１２０は、接続を閉じ、さらなる実施形態は、サーバ２０６または機器２５０と、別の接続を新たに確立する。
【０２２１】
さらに、図７Ａの方法７００の実施形態および図７Ｂの例示的な流れ図は、複数のアプリケーションによって使用するための１つ以上のトランスポート層接続をプーリングするものとして、全体的に議論されるが、本発明のプーリング技術は、複数のトランスポート層接続を要求するか、あるいは開始して、これらの接続を経由することを要求する単一のアプリケーション２２０に適用され得る。例えば、ＨＴＴＰプロトコルの実施形態において、トランスポート層接続は、アプリケーションからの各ＨＴＴＰ要求に対して、確立され得る。本発明の技術を用いると、１つ以上のトランスポート層接続のプールは、各要求に対して、トランスポート層接続を開閉することなく、アプリケーション２２０によって使用され得る。
【０２２２】
別の局面において、本発明は、同じトランスポート層接続または共有されたトランスポート層接続（例えば、図８Ａ〜８Ｂと関連して記載されるプーリング技術を介して確立されたトランスポート層接続）を経由して、アプリケーション要求を多重化するための技術に関する。一部の実施形態において、本発明は、アプリケーションの要求に対し、サーバ２０６から応答のコンテンツが完全に受信されたかどうかをチェックして、確立されたトランスポート層接続の利用可能性を判断し、複数のアプリケーションからの要求をその接続を経由して多重化する。以下にさらに詳細に議論されるように、応答のデータの全てが受信されたかどうかをチェックするために、本発明は、一つの実施形態において、応答のコンテンツ長さのパラメータを使用し、別の実施形態において、応答のチャンク形式（ｃｈｕｎｋｅｄ）転送エンコーディングヘッダを使用する。一つの局面において、本発明は、応答からの全てのデータが、プーリングされた接続が、アプリケーションによって現在自由に使用できるかどうかを判断するために、応答からの全てのデータが受信されたかどうかをチェックし、および／または図７Ａに示された方法７００のステップ７０６および７０８でのように、サーバへの接続のプールに別のトランスポート層接続を確立すべきかどうかをチェックする。別の実施形態において、応答に対するコンテンツ長さをチェックする技術が、同じトランスポート層接続を経由して、複数のアプリケーションからの要求を多重化する技術として使用される。
【０２２３】
ここで、図８Ａを参照すると、クライアント２０５からサーバ２０６への単一のトランスポート層接続を経由する要求を多重化するための方法８００の実施形態が示される。簡単に総括すると、ステップ８０５で、加速プログラム１２０は、クライアント２０５とサーバ２０６との間のトランスポート層接続を確立する。ステップ８１０で、加速プログラム１２０は、サーバ２０６への第一のアプリケーション２２０ａの第一の要求を傍受する。ステップ８１５で、加速プログラム１２０は、トランスポート層接続が別のアプリケーションによって現在使用されているかどうか、あるいは使用されていなければ、アイドルであるかどうかを判断する。ステップ８１７で、トランスポート層接続は、アプリケーション２２０ａによって使用するために利用可能である場合、ステップ８２０で、加速プログラム１２０は、要求をサーバに送信する。さもなくば、ステップ８１７で、トランスポート層接続がアプリケーション２２０ａによって使用するために利用可能でない場合、ステップ８１９で、加速プログラム１２０は、ある期間待って、ステップ８１５に戻るか、あるいはアプリケーション２２０によって使用するための第二のトランスポート層接続を確立するかのいずれかである。ステップ８２５で、加速プログラム１２０は、サーバからアプリケーションの要求に対する応答を受信する。ステップ８３０で、加速プログラム１２０は、第二のアプリケーション２２０ｂによる第二の要求を傍受し、ステップ８１５に進み、トランスポート層接続が、第二のアプリケーション２２０ｂによって使用するのに利用可能であるかどうかを判断する。一部の実施形態において、ステップ８２５で、第一の要求の応答を受信する前に、あるいは応答のデータを全て受信する前に、ステップ８３０で、加速プログラム１２０は、第二のアプリケーション２２０ｂの要求を傍受する。本明細書でさらに議論されるように、一部の実施形態において、加速プログラム１２０は、コンテンツ長さチェッキング技術を用いて、トランスポート層接続がアイドルであるとき、あるいはアプリケーションが要求への応答に対するデータを全て受信したときを決定する。
【０２２４】
さらなる詳細において、ステップ８０５で、加速プログラム１２０は、クライアント２０５とサーバ２０６との間にトランスポート層接続を、あるいはこれらを経由するトランスポート層接続を確立する。一部の実施形態において、加速プログラム１２０は、機器２５０または仲介物とのトランスポート層接続を確立する。一つの実施形態において、加速プログラム１２０は、サーバ２０６へのトランスポート層接続のプールとして、トランスポート層接続を確立する。このように、一部の実施形態において、トランスポート層接続は、サーバ２０６への第二または第三のトランスポート層接続を備え得る。他の実施形態において、加速プログラム１２０は、本明細書で既に議論されたように、第一のプログラム２２２を経由するトランスポート層接続を確立し得る。一部の実施形態において、加速プログラム１２０は、クライアント２０５の第一のアプリケーション２２０ａによる要求に応答して、トランスポート層接続を確立する。
【０２２５】
ステップ８１０で、加速プログラム１２０は、第一のアプリケーション２２０ａによる第一の要求を傍受して、サーバ２０６にアクセスする。一部の実施形態において、要求は、トランスポート層接続を確立する前に、あるいはトランスポート層接続経由で要求を送信する前に、トランスポートプロトコル層で傍受される。他の実施形態において、要求は、トランスポート層より上、あるいはトランスポート層接続より上の任意のプロトコル層で傍受される。一部の実施形態において、要求は、第一のプログラム２２２によって傍受される。一つの実施形態において、アプリケーション２２０ａの要求は、サーバ２０６とのトランスポート層接続を開きたいという要求、または確立したいという要求である。別の実施形態において、アプリケーションの要求は、確立されたトランスポート層接続を経由して、あるいは機器２５０を経由して、サーバにアクセスしたいという要求である。
【０２２６】
ステップ８１５で、加速プログラム１２０は、アイドルであるか、あるいは第一のアプリケーション２２０ａによって使用するのに利用可能であるか、もしくは第一のアプリケーション２２０ａの第一の要求を通信するためのものであるかを判断する。一部の実施形態において、加速プログラム１２０は、１つ以上のトランスポート層接続のプールから、そのプールの中のどのトランスポート層接続がアイドルであるか、あるいは第一のアプリケーション２２０ａによって自由に使用できるかを判断する。一つの実施形態において、加速プログラム１２０は、要求に応答して、あるいは要求の直前に、加速プログラム１２０がトランスポート層接続を確立したことから、トランスポート層接続がアイドルであることを判断する。一部の実施形態において、加速プログラム１２０は、いずれのアプリケーション２２０からいずれの要求も今まで受信し得ず、この要求を加速プログラム１２０によって傍受され、処理されるべき最初の要求として認識する。別の実施形態において、加速プログラム１２０は、トランスポート層接続上に送信された任意の要求に対する継続中（ｏｕｔｓｔａｎｄｉｎｇ）の応答の数をトラックし、継続中の応答がない場合、加速プログラム１２０は、そのトランスポート層接続が第一のアプリケーション２２０ａによって使用するのに利用可能であると認識する。また別の実施形態において、加速プログラム１２０は、トランスポート層接続が現在アイドルであると認識する。例えば、加速プログラム１２０は、キープアライブ要求を開始し、サーバを接続が開いたままに保持し得る。一部の実施形態において、トランスポート層接続は、最後のトランザクションが完了したが、サーバ２０６および／またはクライアント２０５は、まだＲＳＴコマンドおよび／またはＦＩＮコマンドを送信していないとき、アイドルである。
【０２２７】
一部の実施形態において、加速プログラム１２０は、応答のコンテンツ長さをチェックして、第一のアプリケーション２０２ａの第一の要求に対するサーバ２０６からの応答が、完了しているかどうか、完了していない場合、加速プログラム１２０は、応答に対するデータを全て受信したかどうかを判断し得る。上述のように、一部の実施形態におけるこれらの技術は、本発明のプーリング技術のために、別の接続を確立することを判断するためにも使用される。本発明のこの技術に関して、図９および図１０は、応答のデータの全てが受信されたかどうかを判断するために、一つの実施形態において、応答のコンテンツ長さパラメータをチェックすることを説明するために使用され、あるいは別の実施形態において、応答のヘッダのチャンク形式転送ヘッダをチェックすることを説明するために使用される。図９は、ＴＣＰセグメント９００と称されるＴＣＰパケットのＴＣＰ部分を示す。ＴＣＰセグメント９００は、ＴＣＰヘッダ９０２、およびボディ９０４を含む。一実施形態において、ボディ９０４は、データおよび情報を備え、その中でも、とりわけ、ＨＴＴＰヘッダおよびメッセージを備え、ここで、ＴＣＰパケットは、ＨＴＴＰのアプリケーション層プロトコルを運搬する。一部の実施形態において、コンテンツ長さパラメータ９０６は、ＨＴＴＰヘッダによって、またはその中に位置し、見出され、あるいは参照される。一つの実施形態において、本発明の加速プログラム１２０は、コンテンツ長さパラメータ９０６を使用し、応答に対するデータの全てが受信されるかどうかを判断する。
【０２２８】
図１０は、ＴＣＰパケットのＴＣＰセグメントの別の実施形態を示す。トランスポート層接続を経由してＨＴＴＰプロトコルを使用する一部の実施形態において、チャンク形式転送エンコーディングヘッダは、存在し得、チャンク形式転送エンコーディングが、ＴＣＰセグメントまたはパケットに適用されてきたことを示す。このように、この実施形態において、メッセージの長さは、チャンク形式エンコーディングによって規定される。チャンク形式エンコーディングは、メッセージのボディを修正する。これは、メッセージを一連のチャンクとして転送するためであり、各チャンクは、チャンクサイズフィールド内に自身の長さインディケータを有する。ＴＣＰセグメント１６００は、ＴＣＰヘッダ（図示せず）およびボディを含む。ボディは、情報の中でも、とりわけ、ＨＴＴＰヘッダ１６０２Ａ〜１６０２Ｃ、およびメッセージを備える。ＨＴＴＰヘッダ１６０２Ａ〜１６０２Ｃは、７つのチャンクサイズフィールド１６０６Ａ〜１６０１Ｃ、および６つのチャンクメッセージデータ１６０４Ａ〜１６０４Ｆを備える。
【０２２９】
図１０に示されるように、チャンクサイズフィールド１６０６Ａ〜１６０６Ｇは、一緒にリンクされるか、あるいは、さもなくば、参照されるか、または関連付けられる。チャンクサイズフィールド１６０６Ａは、チャンクメッセージデータ１６０４Ａの中にメッセージの長さを表示し、チャンクサイズフィールド１６０６Ｃは、チャンクメッセージデータ１６０４Ｃの中にメッセージの長さを表示し、以下同様である。最後のチャンクサイズフィールド１６０６Ｇは、チャンクがこれ以上ないこと、あるいは後続のメッセージがこれ以上ないことを表示する長さ値０を備える。別の実施形態において、本発明の加速プログラム１２０は、チャンクサイズフィールドを介して、クライアント２０５が応答に対する全てのデータを受信したかどうかを判断する。
【０２３０】
図９および図１０は、一般的に、応答に対する全てのデータを受信したかどうかをチェックするための技術を説明するが、これらの技術は、クライアント２０５に非同期のメッセージまたは通信を送信するサーバ２０６または機器２５０に適用可能である。さらに、これらの技術は、ＨＴＴＰプロトコルに対して、図９および図１０と関連して、一般的に説明されているが、これらの技術は、クライアント２０５によって、送信または受信されるべきデータの長さの表示に提供された任意のプロトコル層で、任意のプロトコルに対して使用され得る。このように、一部の実施形態において、加速プログラム１２０は、ネットワークパケット（任意のプロトコル層にあるものを含む）の任意の部分をアクセス、抽出、検査、解析、あるいはさもなくば、処理し、要求、応答、あるいはクライアントとサーバまたは機器との間の通信と関連する全てのデータが、受信されたかどうかを判断する。さらに別の実施形態において、加速プログラム１２０は、クライアント２０５とサーバ２０６との間で送信され、受信され、確認応答されたバイトの数をトラックして、任意のバイトが、アプリケーション２２０のために、クライアント２０５とサーバ２０６との間で継続中であるかどうかを判断する。
【０２３１】
上述のようなコンテンツ長さ技術を用いることによって、本発明の加速プログラム１２０は、クライアント２０５の任意の他のアプリケーション２２０ａ〜２２０ｎによって、以前に使用されたか、あるいは使用の処理中であるサーバ２０６への同じトランスポート層接続を再使用し得る。
【０２３２】
ステップ８１７で、加速プログラム１２０は、トランスポート層接続が第一の要求を送信するのに利用可能であるかどうか、そして、利用可能である場合、ステップ８２０で、サーバ２０６への要求を送信する。利用可能でない場合、ステップ８１９で、加速プログラム１２０は、アプリケーションの継続中の要求に対する全てのデータが受信されるまで、待ち得る。例えば、加速プログラム１２０は、タイマーを、例えば、短期間に設定し得、ステップ８１５に進む。一部の実施形態において、加速プログラム１２０は、クライアント２０５のネットワークスタック２１０のパケット処理タイマーに応答する全てのデータが受信されたかどうかをチェックする。別の実施形態において、ステップ８１９で、加速プログラム１２０は、別のトランスポート層接続を確立し、第一のアプリケーション２２０ａの第一の要求を送信する。
【０２３３】
ステップ８２０で、加速プログラム１２０は、どのアプリケーション２２０が、接続上で、継続中の要求または応答を現在有しているか、あるいは接続を現在使用しているかをトラックし得る。例えば、一度にただ一つのアプリケーション２２０のみが、接続上で、要求を送信し得、応答を受信し得る。このようにして、加速プログラム１２０は、どのアプリケーション２２０が接続を使用しているかを理解する。一部の実施形態において、加速プログラム１２０は、接続を共有するクライアント２０５の全てのアプリケーション２２０ａ〜２２０ｎに対して、トランスポート層接続通信用に１つのポート番号を使用する。一部の場合において、加速プログラム１２０は、アプリケーションベースによって、アプリケーション上の要求と、その要求に対する継続中の応答とをトラックする。一部の実施形態において、加速プログラム１２０は、アプリケーション２２０の処理ｉｄを要求と関連付ける。さらに別の実施形態において、加速プログラム１２０は、第一のアプリケーション２２０ａの要求を、同じ１つまたは複数のネットワークパケット、同じ１つまたは複数のＴＣＰセグメントの中の第二のアプリケーション２２０ｂの要求とともに送信する。別の実施形態において、加速プログラム１２０は、同じトランスポート層接続を経由して、１つ以上のセグメントウィンドウの一連のＴＣＰセグメントの一部として、アプリケーション２２０ａ〜２２０ｎの複数の要求を送信する。
【０２３４】
他の実施形態において、加速プログラム１２０は、ポート番号付けメカニズムおよび／またはスキームを使用して、受信されたどの応答またはメッセージが、どのアプリケーション２２０ａ〜２２０ｎに対するものであるかをトラックして、認識する。他の実施形態において、加速プログラム１２０は、ポート番号を提供し、この番号をアプリケーション２２０と関連付け、そのアプリケーションの割り当てられたポート番号に送信されるべきＴＣＰネットワークパケット内のポート番号に修正する。別の実施形態において、ポート番号は、アプリケーション２２０によって提供され、加速プログラム１２０は、そのポート番号を変更し、あるいは、変更しない場合は、ＴＣＰネットワークパケットに従って、ポート番号を提供する。このようにして、一部の実施形態において、加速プログラム１２０は、アプリケーション２２０ａ〜２２０ｎが同時にトランスポート層接続を使用し得るように、クライアント２０５の複数のアプリケーション２２０ａ〜２２０ｎから要求をインターウェーブ（ｉｎｔｅｒｗｅａｖｅ）し得る。
【０２３５】
ステップ８２５において、加速プログラム１２０は、第一のアプリケーション２２０ａの第一の要求に対する応答をサーバ２０６から、例えば、機器２０５を経由して、受信し、その応答を第一のアプリケーション２２０ａに提供する。一部の実施形態において、加速プログラム１２０は、第一のアプリケーション２２０ａに応答を、ネットワークスタック２１０を経由して提供する。例えば、接続のトランスポート層の上のプロトコル層によって応答の処理を可能にするように、あるいは開始するようにする。別の実施形態において、第一のプログラム２２２は、第一のアプリケーション２２０ａに対する応答を提供する。他の実施形態において、加速プログラム１２０は、第一のアプリケーション２２０ａに対する応答を、ＡＰＩのようなプロセス間通信メカニズムまたはインタフェースを経由して、提供し得る。一部の実施形態において、加速プログラム１２０は、図１０に示されるようなマルチチャンクメッセージ内の第一のチャンクのような応答の一部分を受信するのみである。
【０２３６】
ステップ８３０で、加速プログラム１２０は、サーバ２０６にアクセスするための第二のアプリケーション２２０ｂの要求を傍受する。一部の実施形態において、ステップ８２５で、加速プログラム１２０は、第二のアプリケーション２２０ｂの要求を傍受する。他の実施形態において、ステップ８２５で、加速プログラム１２０は、応答を受信する間に、第二のアプリケーション２２０ｂの要求を傍受する。別の実施形態において、加速プログラム１２０は、クライアント２０５または加速プログラム１２０が第一のアプリケーション２２０ａの第一の要求の応答に対する全てのデータを受信する前に、第二のアプリケーション２２０ｂの要求を傍受する。第二のアプリケーション２２０ｂの要求を傍受すると、加速プログラム１２０は、本発明の実施形態のステップ８１５に進み、トランスポート層接続を経由して、第二の要求を多重化するべきかどうか、あるいは別のトランスポート層接続（例えば、接続のプール内の別の接続）を確立するべきかどうかを判断する。他の実施形態において、加速プログラム１２０は、第一のアプリケーション２２０ａが継続中の応答を有する間に、あるいは第一の要求の応答から全てのデータを受信していない間に、第二のアプリケーション２２０ｂの要求を、第一のアプリケーション２２０ａと同じ接続を経由して送信する。別の実施形態において、加速プログラム１２０は、第一のアプリケーション２２０ａが応答を受信した後で、任意の生成されたＲＳＴコマンドおよび／またはＦＩＮコマンドが、第一のアプリケーション２２０ａと接続を生成される前に、第二のアプリケーション２２０ｂの要求を送信する。
【０２３７】
加速プログラム１２０は、加速技術のクライアント側でのインプリメンテーションおよび実行と関連して、一般的に議論されてきたが、加速プログラム１２０は、機器２５０とともに、インタフェースし、機能し、この機器もまた、機器側の加速技術として、インプリメントして、実行する。一つの実施形態において、クライアント側の加速プログラム１２０および機器２５０は、互いに一緒になって機能して、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間の通信上で、本発明の複数の加速技術を実行し得る。一部の実施形態において、クライアント側の加速プログラム１２０および機器２５０は、双方ともＴＣＰプーリングおよび多重化を提供し、例えば、クライアント２０５ａ〜２０５ｎとサーバ２０６ａ〜２０６ｎとの間で、カスケーディングまたはエンドツーエンドプーリング、および多重化のメカニズムを提供する。例えば、加速プログラム１２０は、機器２５０への第一のプールされたトランスポート層接続を提供し得、次いで、この機器２５０は、第二のプールされたトランスポート層接続をサーバ２０６ａ〜２０６ｎに提供する。他の例において、加速プログラム１２０は、クライアント２０５ａ〜２０５ｎ上の第一のプールされたトランスポート層接続を経由して、アプリケーション要求を多重化し得る。次いで、このクライアント２０５ａ〜２０５ｎは、サーバ２０６ａ〜２０６ｎに、第二のプールされたトランスポート層接続を経由して、機器２５０によって多重化される。一部の実施形態において、機器２０５が、サーバ２０６ａ〜２０６ｎからクライアント２０５ａ〜２０５ｎに応答を送信するためのスロットリング（ｔｈｒｏｔｔｌｌｉｎｇ）メカニズムを提供する間に、加速プログラム１２０は、クライアント２０５ａ〜２０５ｎからの要求を送信するためのスロットリングメカニズムを提供する。別の実施形態において、機器２５０が、オブジェクト（例えば、動的に生成されたオブジェクト）のキャッシングを、（１つの）クライアント２０５ａ〜２０５ｎと、同時に他の（複数の）クライアント２０５ａ〜２０５ｎとに対して提供する間に、加速プログラム１２０は、クライアント２０５のために、クライアント側のキャッシングを実行する。
【０２３８】
一部の実施形態において、クライアント２０５および／または機器上で加速技術を実行することに追加して、あるいは関連して、加速プログラム１２０および機器は、クライアント２０５とネットワーク２０４アクセスとの間で、機器２５０を経由して、仮想プライベートネットワーク接続および通信を提供し得る。別の実施形態において、加速プログラム１２０は、アプリケーション２２０から通信されたデータを圧縮し得、機器２５０は、その圧縮されたデータを受信すると、それを解凍し得る。逆に、機器２５０は、私設データ通信ネットワーク２０４’上で、サーバ２０６上のアプリケーション２２０から通信されたデータを圧縮し得、加速プログラム１２０は、その圧縮されたデータを受信すると、それを解凍し得る。また、加速プログラム１２０および機器２５０は、暗号化されたデータ通信またはトンネリングセッションの終点として機能し得、ここで、加速プログラム１２０は、アプリケーション２２０から通信されたデータを暗号化し、機器２５０は、暗号化されたデータを受信すると、それを解読する。同様に、機器２５０は、仮想プライベートネットワーク上のアプリケーション２２０から通信されたデータを暗号化し、加速プログラム１２０は、そのデータを受信すると、それを解読し得る。
【０２３９】
本明細書に記載されたクライアント側の加速を展開および実行する技術の構造、機能、および動作の観点から、本発明は、クライアント上で効率的にトランスペアレントな方法で、効率的に展開され、また実行されるクライアント上の複数の加速技術を提供する。一部の実施形態において、本発明は、クライアントと公衆データ通信ネットワークとの間で、機器ベースまたはサーバベースの加速器の設置を回避する。さらに、加速プログラムは、クライアント２０５に動的に提供され、ネットワーク上のクライアント２０５上で、自動的にインストールされ、実行されるので、加速は、任意のクライアントマシン上で達成され得る。また、加速プログラムが格納され、機器２５０またはサーバから動的にダウンロードされるので、加速プログラム１２０に対するアップグレードおよび／またはメンテナンスは、一度に行われ得、クライアントがネットワークにアクセスすると、そのクライアントに動的に、自動的に展開され得る。さらに、本発明は、機器側の加速器とともに機能し、クライアントから機器またはサーバへのエンドツーエンドの加速を実行する。
【０２４０】
本発明の様々な実施形態が、以上に記載されてきたが、これらは例としてのみ提示されてきたものであること、および限定するものでないことは、理解されるべきである。したがって、添付の請求項で規定されるような本発明の精神および範囲から逸脱することなく、当業者によって、形式および詳細に様々な変更がなされ得ることは、理解されるべきである。したがって、本発明の幅および範囲は、上述の例示的な実施形態のいずれによっても制限されるべきでなく、以下の請求項およびその均等物に従ってのみ規定されるべきである。
【図面の簡単な説明】
【０２４１】
本発明の、前述およびその他の目的、形態、特徴、利点は、次の明細書を添付図面と併せて参照することによって、より明らかになり、よりよく理解できるであろう。
【図１Ａ】図１Ａは、本発明の一具体例を実施するためのコンピュータ機器の実施形態のブロック図である。
【図１Ｂ】図１Ｂは、本発明の一具体例を実施するためのコンピュータ機器の実施形態のブロック図である。
【図２Ａ】図２Ａは、本発明のクライアント側加速プログラムの一実施形態のブロック図である。
【図２Ｂ】図２Ｂは、クライアント側加速プログラムをサーバで動作するためのネットワーク環境の一実施形態のブロック図である。
【図２Ｃ】図２Ｃは、クライアント側加速プログラムをサーバと通信している機器と連動して動作するためのネットワーク環境の他の実施形態のブロック図である。
【図２Ｄ】図２Ｄは、本発明の機器の一実施形態のブロック図である。
【図３Ａ】図３Ａは、本発明のクライアント側加速プログラムを動的に提供し、自動的にインストールし、実行するための、本発明の一方法の一実施形態のステップ図である。
【図３Ｂ】図３Ｂは、アプリケーションが加速可能であることを判断するための、本発明の一方法の一実施形態のステップ図である。
【図３Ｃ】図３Ｃは、トランスポート層で傍受し、カーネルレベルのデータ構造を使うために、加速プログラムにより複数の加速技術を使用するという本発明の一方法の他の実施形態のステップ図である。
【図４Ａ】図４Ａは、クライアント上で、第一のプログラムを介して、加速プログラムを自動的にインストールし、実行する、本発明の一方法の他の実施形態のステップ図である。
【図４Ｂ】図４Ｂは、第一のプログラムと加速プログラムが、仮想プライベートネットワーク接続を提供し、一つ以上の加速技術を使用する、本発明の一方法の一実施形態のステップ図である。
【図５】図５は、サーバへの通信の送信に使用不可能と判断される仲介物を回避するために、クライアントのサーバとの通信をリダイレクトするための、本発明の一方法の一実施形態のステップ図である。
【図６】図６は、クライアント側加速技術である転送制御プロトコルバッファリングを使用するための、本発明の一方法の一実施形態のステップ図である。
【図７Ａ】図７Ａは、クライアント側加速技術である転送制御プロトコル接続プーリングを使用するための、本発明の一方法の一実施形態のステップ図である。
【図７Ｂ】図７Ｂは、本発明の一実施形態によって提供される、一つ以上のトランスポート層接続プールを介して複数のアプリケーションによって行われる、ＨＴＴＰトランザクションの一連の例の概略図である。
【図８】図８は、クライアント側加速技術である転送制御プロトコル多重化を使用するための、本発明の一方法の一実施形態のステップ図である。
【図９】図９は、トランスポート層パケットのコンテンツ長さ識別子の一実施形態の線図である。
【図１０】図１０は、複数のチャンクを介して送信されるメッセージのコンテンツ長さ識別子の他の実施形態の線図である。
【図１Ａ】
2008527507.tif 000003
【図１Ｂ】
2008527507.tif 000004
【図２Ａ】
2008527507.tif 000005
【図２Ｂ】
2008527507.tif 000006
【図２Ｃ】
2008527507.tif 000007
【図２Ｄ】
2008527507.tif 000008
【図３Ａ】
2008527507.tif 000009
【図３Ｂ】
2008527507.tif 000010
【図３Ｃ】
2008527507.tif 000011
【図４Ａ】
2008527507.tif 000012
【図４Ｂ】
2008527507.tif 000013
【図５】
2008527507.tif 000014
【図６】
2008527507.tif 000015
【図７Ａ】
2008527507.tif 000016
【図７Ｂ】
2008527507.tif 000017
【図８】
2008527507.tif 000018
【図９】
2008527507.tif 000019
【図１０】
2008527507.tif 000020
【国際調査報告】
2008527507.tif 000021
2008527507.tif 000022
2008527507.tif 000023
2008527507.tif 000024
2008527507.tif 000025
2008527507.tif 000026