HTTP最適化、マルチホーミング、移動性、および、優先度
パラレルなハイパーテキスト転送プロトコル(HTTP)接続とパイプライン化の組み合わせは、未処理のリクエストの数を最小化し、リンクを依然としてフルに利用するように、パラレルな接続の数とパイプライン化されたリクエストの数をリアルタイムに変化させることにより、増加するラウンドトリップタイム(RTT)の影響を克服する。HTTPスタックにおけるリクエストおよび接続の最適な構築およびスケジューリングは、ページロード時間を改善し、オブジェクト優先順位における変更に対するより高い応答性を提供する。HTTPに対するアプリケーションレイヤにおけるマルチホーミングおよび移動性に対処する。組み合わせて、これらは、よりスムーズな移動性を提供する。サーバまたはネットワークのサポートなしに、このように移動性を提供することができる。
【発明の詳細な説明】
【合衆国法典第35部第119条の下での優先権の主張】
【0001】
本特許出願は、“HTTP最適化、マルチホーミング、移動性、および、優先度”と題され、2009年12月18日に出願され、この出願の譲受人に譲渡され、ここでの参照によりここに明確に組み込まれている仮出願番号第61/288,119号に対して優先権を主張する。
【同時係属中の特許出願に対する参照】
【0002】
本特許出願は、これとともに同時に出願され、この出願の譲受人に譲渡され、ここでの参照により明確に組み込まれている、Ramin Rezaiifar氏らによる、代理人ドケット番号第100528U2号を有する、以下の同時係属中の米国特許出願“アプリケーションレイヤにおける、複数のインターフェースの結合/集約”に関連する。
【分野】
【0003】
本開示は、一般的に通信に関し、さらに詳細には、ワイヤレス通信ネットワーク中で、ハイパーテキストパケットデータコンテンツを取り出すための技術に関する。
【背景】
【0004】
ハイパーテキスト転送プロトコル(HTTP)は、ウェブブラウザおよびウェブアプリケーションにより使用されている主要な通信プロトコルである。コンテンツ配信ネットワークの形で、HTTPプロトコルの効率的な動作をサポートするために、インターネット内で大型インフラストラクチャが成長してきた。結果として、増加する数のアプリケーションが、HTTPプロトコルに移行している。この移行に対する他の理由(例えば、ネットワークアドレス変換(NAT)およびファイアウォールトラバーサル)がある一方で、主な動因は、ウェブインフラストラクチャの大規模なスケーラビリティを活用する能力である。
【0005】
今日、ウェブサイトは、極めて複雑であり、HTTPを使用してそれぞれが別々にリクエストされなければならない、数十または数百のオブジェクトを含んでいることが多い。サーバからクライアントにオブジェクトを伝送できるスピードを改善するために、さまざまな最適化がHTTP内で定義されている。ワイヤードネットワーク内でこれらの最適化を適用するときに、かなりの量の作業が行われてきた。しかしながら、高ラウンドトリップタイム(RTT)と非常に可変の帯域幅とを持つ、より挑戦的な移動体環境で、これらの特徴がどのように振る舞い、組み合わせられるのかを理解することは、依然として未解決の問題のままである。特に、移動体ネットワークの特性が、その当時、今日とは大きく異なっていた数年前に、多くのHTTP作業が実行されたことに留意すべきである。
【概要】
【0006】
以下のものは、開示されている態様のうちのいくつかの態様の基本的な理解を提供するために、簡略化した概要を提示する。この概要は、広範囲にわたる概略ではなく、キーエレメントまたは重要なエレメントを識別することや、このような態様の範囲を線引きすることのどちらも意図していない。この目的は、後に提示するさらに詳細な説明に対する前置きとして、説明されている特徴のうちのいくつかの概念を、簡略化した形で提示することである。
【0007】
1つの態様では、パケットデータ通信のための多数のパラレルな接続を確立することと、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信することと、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させることとによる、パケットデータ通信のための方法が提供されている。
【0008】
別の態様では、パケットデータ通信のための少なくとも1つのプロセッサが提供されている。第1のモジュールは、パケットデータ通信のための多数のパラレルな接続を確立する。第2のモジュールは、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。第3のモジュールは、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0009】
追加の態様では、パケットデータ通信のためのコンピュータプログラムプロダクトが提供されている。一時的でないコンピュータ読取可能媒体は、コードの組を記憶する。第1の組のコードは、コンピュータに、パケットデータ通信のための多数のパラレルな接続を確立させる。第2の組のコードは、コンピュータに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信させる。第3の組のコードは、コンピュータに、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0010】
さらなる態様では、パケットデータ通信のための装置が提供されている。装置は、パケットデータ通信のための多数のパラレルな接続を確立する手段を具備する。装置は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する手段を具備する。装置は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる手段を具備する。
【0011】
さらに別の態様では、パケットデータ通信のための装置が提供されている。トランシーバは、パケットデータ通信のための多数のパラレルな接続を確立する。トランシーバは、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。コンピューティングプラットフォームは、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0012】
先の目的および関連する目的を達成するために、1つ以上の態様は、後に完全に説明する特徴、および、特許請求の範囲中で特に指摘する特徴を含んでいる。以下の説明および添付した図面により、ある例示的な態様を詳細に述べ、態様の原理を用いることができるさまざまな方法のうちのいくつかだけを示す。図面とともに考えるときに、他の利点および新規の特徴が、以下の詳細な説明から明らかになるだろう。開示されている態様は、このようなすべての態様とそれらの均等物とを含むことを意図している。
【図面の簡単な説明】
【0013】
同一の参照文字が全体を通して対応したものを識別している図面とともに考慮されたときに、以下で示される詳細な説明から、本開示の特徴、特質、および利点がより明白となろう。
【図1】図1は、HTTP最適化のための通信システムの概略図を示している。
【図2A】図2Aは、HTTP最適化のための方法に対するフローダイヤグラムを示している。
【図2B】図2Bは、HTTP最適化のための方法に対するフローダイヤグラムを示している。
【図3】図3は、ラウンドトリップタイム(RTT)の関数として、ページロード時間のグラフィカルプロットを示している。
【図4】図4は、単一の継続的接続に対するリンク使用パターンのダイヤグラムを示している。
【図5】図5は、第1および第2のアップリンクリクエストならびにダウンリンクレスポンスに対するリンク使用パターンのダイヤグラムを示している。
【図6】図6は、固定帯域幅での異なるRTTに対して達成される最良のページダウンロード時間に対するグラフィカルプロットを示している。
【図7】図7は、HTTP最適化に対する複数のアルゴリズムの例示的な関係に対するダイヤグラムを示している。
【図8】図8は、HTTP最適化を実行する移動端末に対するブロックダイヤグラムを示している。
【図9】図9は、HTTP最適化をサポートするノードに対するブロックダイヤグラムを示している。
【図10】図10は、HTTP最適化に対する電気コンポーネントの論理グルーピングを有する、移動デバイス中に少なくとも部分的に存在するシステムに対するブロックダイヤグラムを示している。
【図11】図11は、HTTP最適化をサポートする電気コンポーネントの論理グルーピングを有する、ネットワーク中に存在するシステムに対するブロックダイヤグラムを示している。
【詳細な説明】
【0014】
増加するラウンドトリップタイム(RTT)の影響を克服するために、パラレルなHTTP接続とパイプライン化を組み合わせることに利益が存在する。一般的に知られているブラウザは、固定数のパラレルな接続と、固定数の未処理のリクエストを用いるが、接触しなければならない異なるサーバの組により、パラレルな接続の数は影響を受ける。
【0015】
本イノベーションの1つの態様は、未処理のリクエストの数が最小になり、リンクが依然としてフルに利用されるように、パラレルな接続の数と、パイプライン化されたリクエストの数とを、リアルタイムに変化させるためのものである。
【0016】
例えば、リクエストされるデータの量に基づいて、リンクが依然として確実にフルに利用されるように、これらの数を変化させることができる。しかしながら、まだ受信されていないデータの量が、帯域幅とRTTの積を超えてはならない。これらの量の双方とも、絶えず変化している。加えて、オブジェクトのヘッダが届くまで、オブジェクトサイズはわからないので、未処理のデータの量は、正確にはわからない。
【0017】
1つの可能性は、これらのすべての変数に対する確率モデルを構築し、リンクがアイドルになる確率全体を、何らかのしきい値を下回るように維持しようと試みることである。例えば、オブジェクトサイズに対する確率モデルは、オブジェクトタイプ(イメージ、HTML、JavaScript(登録商標)、CSS等)を、オブジェクトサイズに関する分布にマッピングするヒストリカルデータを使用してもよい。特に、オブジェクトの以前のキャッシュされたバージョンがある場合には、返されるだろうデータは、オブジェクトは変更されていないので、ゼロ(または、むしろ、HTTPヘッダだけ)であるか、あるいは、古いものと類似するサイズを有する可能性がある新しいバージョンであるかのいずれかである。
【0018】
したがって、最近測定された帯域幅およびラウンドトリップタイムに基づいて、リクエストされたが受信されていないデータが、帯域幅とRTTの積を超える確率まで、より多くのオブジェクトのパイプライン化を継続できる。より多くのデータが届くか、あるいは、帯域幅またはラウンドトリップタイムにおける変更が観測されたときにはいつでも、この計算を繰り返すことができる。それにより、HTTP接続上のパイプライン化されたリクエストのターゲット数は、以下でさらに詳細に説明するように、接続の持続時間の間に変化することがある。
【0019】
図面を参照して、ここでさまざまな態様を説明する。以下の説明では、説明の目的上、1つ以上の態様の完全な理解を提供するために、多数の特定の詳細を述べる。しかしながら、これらの特定の詳細なしにさまざまな態様を実施できることが、明らかであることがある。他の例では、これらの態様の説明を促進するために、よく知られている構造およびデバイスは、ブロックダイヤグラムの形で示されている。
【0020】
図1では、通信システム100において、移動デバイス、アクセス端末、または、ユーザ機器(UE)102が、複数のサーバ112〜114上に記憶されているオブジェクト106、108、110を含むハイパーテキストコンテンツ104に対するパイプライン化リクエスト103を行う。例示的な態様では、移動デバイス102は、オブジェクト106〜110を受信するのに、したがって、ハイパーテキストコンテンツ104をレンダリングするのに必要とされるラウンドトリップタイム(RTT)を悪化させるエアリンク116を通して、アクセスを得る。1つの態様では、ワイヤレスワイドエリアネットワーク(WWAN)120の一部として役割を果たすノード(例えば、マクロセル、フェムトセル、リレー)119と通信する無線トランシーバ118を、移動デバイス102は有しており、このノード119は、コアネットワーク(CN)(例えば、インターネット)124においてホスト管理されているサーバ112〜114へのインターネットプロトコルマルチメディアサブシステム(IMS)122に向かうものである。
【0021】
代替的に、または、加えて、移動デバイス102は、ノード128と通信するトランシーバ126を有しており、ノード128は、CN124を介してサーバ112〜114にアクセスするためのワイヤレスローカルアクセスネットワーク(WLAN)130を担当する。
【0022】
代替的に、または、加えて、移動デバイス102は、ノード134と通信するトランシーバ132を有しており、ノード134は、パーソナルアクセスネットワーク(PAN)136を担当し、CN124を介してサーバ112〜114に到達するために、138において示されているようなWWAN120か、または、140において示されているようなWLAN130のいずれかに結合されている。
【0023】
1つの態様では、トランシーバ118、126、132は、パケットデータ通信のための多数のパラレルな接続を確立する。トランシーバ118、126、132は、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。
【0024】
移動デバイス102のコンピューティングシステム124は、HTTP最適化コンポーネント144を有しており、HTTP最適化コンポーネント144は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0025】
図2(図2Aおよび図2B)では、例示的な方法200または動作のシーケンスが、HTTP最適化、マルチホーミング、移動性、および、優先度に対して示されている。ブロック204は、パケットデータ通信のための多数のパラレルな接続を確立することを示している。特定の態様では、多数のパラレルな接続を確立することは、複数のサーバのうちのそれぞれに対する接続の数を最小化すること(ブロック206)により達成される。リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、多数のパラレルな接続が使用される(ブロック208)。
【0026】
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストが送信される(ブロック210)。
【0027】
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続を介して追加のパイプライン化リクエストを送信するために、パラレルな接続の数を動的に変化させる(ブロック212)。例えば、フルなリンク利用は、グリーディ(greedy)リソース利用を、または、ジャストインタイム(JiT)リソース利用を必要とすることがある。
【0028】
例示的な態様では、帯域幅とラウンドトリップタイムを推定すること(ブロック214)により、この動的な変化が達成される。リクエストされたが受信されていないパケットデータが、推定された帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、パイプライン化リクエストの送信を継続する(ブロック216)。
【0029】
例示的な態様では、特に、HTTP取り出しを促進するネットワークによりサポートされている場合に、1つ以上のさらなる最適化が含まれる。
【0030】
例えば、パケットデータ部分をレンダリングするためのプログレッシブな順序付けが決定され、複数のパイプライン化リクエストの順序は、プログレッシブな順序付けに関連して、優先順位が付けられる(ブロック218)。取り出しの間に変更が生じた場合には(ブロック220)、プログレッシブな順序付けの優先順位が付け直され、プロセスが更新される(ブロック222)。
【0031】
別の例に対して、複数のパイプライン化リクエストは、ヘッダ圧縮によりリクエストされる(ブロック224)。
【0032】
追加の例に対して、ネットワークは、移動デバイスによりどのような追加リソースが要求されることがあるかを識別(予想)できる。このようなケースでは、リクエストしなかった、サーバにより識別されたリソースを受信することがある(ブロック226)。必要でない場合には、サーバ識別リソースをキャンセルすることによるレスポンスによって、無線リソースの不必要な消費を避けることができる(ブロック228)。
【0033】
さらなる例に対して、ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストとして、複数のパイプライン化されたリクエストを送信することができる(ブロック230)。
【0034】
さらに別の例に対して、接続ラウンドロビンにより、マルチホームのホストに対してリンクを集約すること(ブロック232)によって、複数のパイプライン化リクエストを送信することができる。インターフェースが利用可能でなくなったこと、または、利用可能になったことを検出し(ブロック234)、インターフェースを使用しているオープンな接続を識別し(ブロック236)、オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築することにより(ブロック238)、ならびに、識別したオープンな接続と、インターフェースと、未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを、動的に変化させることにより(ブロック240)、このマルチホーミング能力の観点での移動性に対処することができる。
【0035】
例示的な態様において、移動デバイスは、各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持することができ、ネットワークプロキシと、静的に定義されたルートと、オペレーティングシステムおよびウェブブラウザのサポートがない場合には、プロキシ自動設定(PAC)スクリプトとを使用することができる。
【0036】
図3は、グラフィカルプロット300において、nytimes.comに対してパラレルな接続およびパイプライン化が使用可能であるFirefox(登録商標)ウェブブラウザを使用して、より長いRTTがページロード時間(秒単位)に与える影響を示している。テストしたページは、合計で約1.3MBのデータである、おおよそ100個のオブジェクトからなる。テストは、1.5Mビット/秒の固定帯域幅のリンクを通して実行され、より高いRTTリンクをシミュレートするために、異なる量の追加遅延で繰り返された。フルなリンク利用では、ページをダウンロードするのにおよそ7秒かかるはずであり、実際のところ、これは、ワイヤードネットワーク上で観測されることがあるような、非常に低いラウンドトリップタイムにより達成されるものである。しかしながら、明らかに、リンク利用は、RTTが増加するにつれて、RTTに反比例して急激に落ち込む。
【0037】
この実験が明示しているのは、RTTが、ワイヤードネットワーク上で典型的に見られるよりも大きい場合には、最先端のウェブブラウザでさえ、適度の帯域幅のリンクをフルに利用することができないということである。さらに、(7秒から21秒への、ページロード時間における200%の増加が非常に顕著であるのに対し、100msから300msへの200%の増加は、そうでないことがあるという点で、)結果として生じる増加したページロード時間は、十分に、ユーザ経験が影響を受ける範囲内にある。
【0038】
ここで使用されるようなリンク利用は、ネットワークが与えるように準備しているすべてのリソースを利用する、クライアントの能力のことを指す。EV−DOまたはHSPAのシナリオでは、1人のユーザがこの意味でリンクを“十分に利用していない”ときに、使用されていない容量は、他のユーザに与えられるので、全体として無線リソースを十分に利用していないことはない。しかしながら、この意味での乏しいリンク利用は、より長いページロード時間において観測されるような、乏しいユーザ経験を、結果として生じさせる。
【0039】
具体的な例として、10人のユーザが、それぞれ、1MBファイルをリクエストし(必ずしもすべてが同時でなくてもよい)、ネットワークが、8Mビット/秒の共有容量を有している場合に、データをユーザのすべてに配信するのに10秒かかるだろう。平均待ち時間の観点から、データを“シーケンシャルに”供し、各ユーザに対して1秒かけるほうが、各ユーザに対してパラレルに10秒もかけてすべてのユーザに配信するよりも、より望ましい。
【0040】
オブジェクト配信を最適化するために、HTTPにおいて利用可能なさまざまな技術を使用することができる。
【0041】
継続的接続:HTTP1.0規格は、各HTTPリクエストに対して、新しい伝送制御プロトコル(TCP)接続が確立されることを要求した。各TCP接続の確立は、SYN/ACK(同期化/肯定応答)交換と、TCP輻輳制御のスロースタートフェーズに起因するスロー送信の期間とを暗示するので、この要件は、オブジェクト配信時間の観点から高い代償を必要とした。
【0042】
HTTP1.1は、複数のリクエストが同じサーバに発行されるケースをより良くサポートするために、継続的接続を導入した。このケースでは、以前のレスポンスの受信が完了した後に、同じ接続上で新しいHTTPリクエストを送ることにより、TCP接続を再使用する。このアプローチでは、リクエストの送信と、レスポンスの最初のパケットの受信との間の時間(1つのラウンドトリップタイム)の間、ダウンリンクはアイドルである。
【0043】
単一の継続的接続に対するリンク使用パターン400を、図4から理解することができる。図4では、アップリンクリクエスト402とダウンリンクレスポンス404との間のギャップが、リンクが十分に利用されていないことを(ギャップの形で)示しており、RTTがより高い場合に、この十分に利用されていないことが、いっそう悪いという事実を示している。
【0044】
RTTに対処しない、リンク帯域幅の単なる増加は、それ自体では、リンク利用の観点から性能を改善しないことを、本開示の利益により正しく認識すべきである。さらに図4を参照すると、帯域幅の増加は、時間の関数として、各アップリンクブロックおよびダウンリンクブロックをより狭くさせる(すなわち、より少ない時間で同じデータが転送される)だろうが、ギャップのサイズを減少させないだろう。実際、ギャップは、総ダウンロード時間のより大きな部分を表し、したがって、このケースでは、帯域幅の増加は、リンク利用を減少させる。
【0045】
パラレルな接続:現代のブラウザは、同じサーバまたは異なるサーバ(またはその双方)のいずれに対しても、パラレルな複数のTCP接続を開いている。この技術の効果は、2つある:第1に、複数のアクティブに送信しているTCP接続を集約するという輻輳制御の振る舞いは、スロースタートの間の輻輳ウィンドウのより速い開きと、各パケットドロップに対するより減少した輻輳レスポンス以外では、単一のTCP接続と同等のものとして見なされることがある。第2に、(継続的接続に対して先に示したように)1つの接続上の送信が断続的であるケースでは、送信の間のアイドル期間が、他の接続によって使用されてもよく、これによりリンク利用を改善する。
【0046】
パイプライン化:実際、HTTP1.1は、第1のリクエストに対するレスポンスの完了を待つことなく、複数のリクエストを送ることを可能にする。これは、レスポンスの間にリンクがアイドルになることなく、サーバが続けざまにレスポンスを送ることを可能にする。HTTPは、リクエストとレスポンスを整合させるための他のメカニズムを何ら提供しないので、レスポンスは、リクエストを受信したのと同じ順序で送らなければならない。
【0047】
図5では、第1および第2のアップリンクリクエスト502、503と、ダウンリンクレスポンス504とによる、継続的接続のためのリンク使用パターン500に対して、パイプライン化の効果が示されている。
【0048】
現代のウェブブラウザはすべて、先の最初の2つの技術を実質的に利用している。しかしながら、HTTP1.1規格中で定義されているが、パイプライン化のサポートは、かなりの間、サーバおよびプロキシにおいて普遍的でなかったし、特に、透過型プロキシのケースでは、固有の失敗モードの何らかの証拠がある。結果として、例えば、失敗モードを検出して、非パイプライン化動作にグレースフルにフォールバックするように注意したり、この技術が成功しているサーバのホワイトリストを維持する等、パイプライン化の実現において何らかの注意が必要である。Opera(登録商標)ブラウザは、デフォルトによりパイプライン化をイネーブルさせる(そして、明らかに、このような技術を実現する)。Firefoxでは、パイプライン化はサポートされているが、デフォルトによりディセーブルされている。Safari(登録商標)およびChrome(登録商標)は、(現在)パイプライン化をサポートしていない。
【0049】
ブラウザにおいてパイプライン化に対する幅広いサポートがない理由は、図3と、先に参照した問題とから明らかである:継続的でパラレルな接続のみを使用する低RTT接続上では、リンクのブラウザ利用は非常に高い。コンテンツ配信ネットワークは、近年、典型的なウェブRTTを積極的に押し下げ、改善されたブラウジング性能を結果として生じさせ(これは、CDNの主要な価値命題である)、結果として、ワイヤードおよびワイヤレスのローカルアクセスネットワーク(WLAN)ウェブブラウジングの大多数に対して、認識されている問題はほとんどない。
【0050】
パイプライン化がサポートされている場合に、レスポンス間にギャップがないはずなので、リンク利用は、単一の接続では100%であるはずだと、ある人は期待するかもしれない。しかしながら、いくつかのケースでは、パイプライン化された形でのリクエストをサーバが受け入れることがある一方で、以前のリクエストが完了するまでサーバが各リクエストを処理しないことがある。これは、サーバ処理のためにかかる時間に等しい、レスポンス間のギャップにつながる。サーバの負荷が非常に大きい場合に、レスポンスを発生させるために、サーバが、スクリプト実行のような、複雑な機能を実行しなければならない場合に、および/または、サーバが、外部サーバ(例えば、データベース)を参照しなければならない場合に、この時間はかなりのものであるかもしれない。
【0051】
到来側では、パイプライン化されたリクエストを受け入れるが、送出側では、シリアルなリクエストを発行する中間プロキシがある場合に、同じ効果が観測されることがある。パイプライン化されたリクエストをサーバがパラレルに処理する場合でさえ、所定のレスポンスを送る時間が来たときに、この処理の結果が利用可能でないことがある。
【0052】
最初の実験:先のデータは、ワイヤレスワイドエリアネットワーク(WWAN)のような、高RTTリンク上で、ウェブブラウジング性能において改善の余地があると、我々に信じさせる。さらなる証拠は、クライアントと中間プロキシとの間にパイプライン化を適用することと、さらに、順序通りでなく(すなわち、クライアントおよびプロキシによりサポートされている新しいHTTP拡張機能を通して)レスポンスを返す可能性を導入することとによってもたらされる。このアプローチにおいて、リンク利用が改善される。その理由は、クライアントとプロキシとの間の低RTTにより、単一のTCP接続が、WWANリンクをフルに利用することが可能になり、プロキシは、送出側でパラレルなリクエストを発行するように設計されているからである。要求されるリソースの早期の識別もまた、組み込むことができる。
【0053】
ターゲットHTTPサーバにより直接サポートされている(そして、これらのサーバがリクエストをパラレルに処理すると仮定する)場合に、順序通りでないレスポンスに対するHTTP拡張機能が、利益を提供することがあることに留意すべきである。Google(登録商標)SPDYに対して以下で説明する範囲を除いて、実験はこのアプローチを追求していないと信じられている。
【0054】
本イノベーションを推進するために行われた実験は、プロキシの配備が要求されないケース(すなわち、クライアント側のみの技術)に対処する。明確さのために、ネットワーキングを除くすべてのボトルネックが取り除かれている“理想的なブラウザ”に、最初の焦点を当てる。特に、“理想的なブラウザ”は、ページをレンダリングするのに要求されるリクエストの完全な組のアプリオリな知識を有し、受信するとすぐにコンテンツをレンダリングする。
【0055】
それゆえ、ページロード時間に対する唯一の寄与は、HTTPプロトコルを使用して、ネットワークを通してデータを転送するのに要求される時間である。“理想的なブラウザ”は、パイソンスクリプトとして実現され、パイソンスクリプトには、(実際のウェブページのダウンロードのトレースから取られた)オブジェクトのリストが事前に供給され、パイソンスクリプトは、HTTP継続的接続と、パラレルな接続と、パイプライン化とを使用して、オブジェクトをダウンロードするアルゴリズムを実現する。すべてのオブジェクトをダウンロードするのにかかる時間を測定する。
【0056】
パラレルな接続と、パイプライン化と、ネットワーク帯域幅およびRTTとの間の相互作用をより良く理解するために、1〜10個の間のパラレルな接続と、そのそれぞれにおける1〜10個の間の未処理のリクエストとにより、実験を行った。(1個の未処理のリクエストは、標準的な非パイプライン化アプローチに対応し、‘n’個の未処理のリクエストは、最初に‘n’個のリクエストが送られ、その後、レスポンスが完全に受信されるたびに、新しいリクエストが送られることを意味する。)
異なるネットワーク帯域幅およびRTTに対する結果が、表1〜6において示されている。特に、実際のウェブサーバトレースにおける複数の接続およびパイプライン化の異なるコンフィギュレーションの性能が、理想化されている。ウェブリクエストトレースは、Wireshark(登録商標)を使用して、人気のあるウェブサイトから収集される。その後、リクエストトレースファイルを発生させるために、ダンプファイルが処理される。最初の実験に対して、すべてのリクエストが予め知られており、順序通りに実行されると仮定する。オブジェクトは、プライマリサーバからのみ、すなわち、ウェブサイトを構成するオブジェクトの不均衡な配分が問題になっているサーバからのみ、リクエストされる。プライマリサーバ現象は、人気のあるウェブサイトに対しても特徴付けられる。
【0057】
以下の表1は、複数の接続およびパイプライン化の各コンフィギュレーションに対して観測された平均ダウンロード時間を示している。
【表1】
【0058】
以下の表2〜7は、複数の接続およびパイプライン化の各コンフィギュレーションに対して観測された平均ダウンロード時間を示している。
【表2】
【表3】
【表4】
【表5】
【表6】
【0059】
これらの実験では、実験を行っている間に、バックグランドで何かがダウンロードされる。
【表7】
【0060】
要約すると、図6は、1.5Mビット/秒の固定帯域幅での異なるRTTに対して、また、(双方とも1.5Mビット/秒よりも高い帯域幅を持った)3G接続およびバックグランドトラフィックを持つ3G接続を通しての異なるRTTに対して、達成された、最良のページダウンロード時間を提示している。各ケースに対する注釈は、最良の結果が達成された、パラレルな接続の数およびパイプライン化の量を示す。
【0061】
明確さのために、これらの実験は、単一のサーバ上に存在するページオブジェクトのうちの90%に制限されていたが、本イノベーションの態様は、複数のサーバの結果に拡張できることに留意されたい。
【0062】
原則として、ダウンロード時間は、図3におけるのと同じくらいRTTに敏感である必要はまったくないことを、図6からの本開示の利益により正しく認識すべきである。
【0063】
HTTP最適化、マルチホーミング、移動性、および、優先度
本イノベーションは、例えば、部分的にダウンロードされたイメージがもはや目に見えないように、ウェブページがスクロールされたときに、HTTPスタックにおけるリクエストおよび接続の最適な構築ならびにスケジューリングの問題に対処し、ページロード時間を改善させ、オブジェクトの優先度における変更に対してより良い応答性も提供する。
【0064】
本イノベーションは、HTTPに対する、アプリケーションレイヤにおけるマルチホーミングおよび移動性に対するソリューションも考える。マルチホーミングは、特に、インターフェースの利用可能な帯域幅が、同程度の大きさである(これは、WLANがバックホール制限されているために、そうであることが多い)ケースにおいて、ダウンロード時間を改善する、例えば、WWANおよびWLANのインターフェースのような、複数のインターフェースの同時使用を提供する。移動性は、デバイスが動くにつれて、接続の切り替えを提供する。組み合わせて、これらは、よりスムーズな移動性を提供する。サーバまたはネットワークのサポートをそれぞれ要求する、マルチパス伝送制御プロトコル(MPTCP)またはモバイルIPのような、トランスポートレイヤあるいはネットワークレイヤのソリューションとは対照的に、サーバまたはネットワークのサポートなしに、このように移動性を提供することができる。
【0065】
優先度における変更に対する応答性を改善するためと、マルチホーミングおよび移動性のサポートを改善するために、複数の部分的なリクエストの使用とともに、マルチホーミングおよび移動性のサポートに対してここで説明する技術は、新規であると信じられている。各インターフェースに対して別々のドメインネームサービス(DNS)キャッシュを維持する技術もまた、新規であると信じられている。
【0066】
最後に、オペレーティングシステムおよびウェブブラウザのサポートはないが、ネットワークプロキシと、静的に定義されたルートと、プロキシ自動設定(PAC)スクリプトとを使用する、ここで説明した技術のうちのいくつかを実現するための新規の技術も、我々は説明する。
【0067】
一般的な問題を、次のように説明することができる。
【0068】
1組の統一資源ロケータ(URL)の形での1組の要求されるリソースによって、アプリケーション(例えば、ウェブブラウザ)により、HTTPスタックが提供される。これらは、1度に提供されてもよく、または、時間の期間にわたって提供されてもよい。HTTPスタックは、これらのリソースに対するリクエストをいつどのように発行するかという観点からなされるいくつかの決定を有している。特に、次のようなものがある。
【0069】
複数のリソースが同じサーバにおいて利用可能である場合に、これらのリクエストを単一のTCP接続上でパイプライン化してもよい。
【0070】
これが行われる場合には、リクエストの順序が決定される必要がある。
【0071】
パイプライン化に対するサポートは、普遍的でも一貫したものでもないので、未処理のリクエストの数を制限するか、あるいは、パイプライン化に対するサーバサポートをどうにかして検出することが望ましいことがある。
【0072】
サーバは、リクエストの順序付けおよび未処理のリクエストの数に対して異なる基準があるケースでは、順序通りでないレスポンスに対するQC HTTP拡張機能をサポートしてもよい。
【0073】
どの時点においても開かれているべきであるパラレルなTCP接続の数に限度があることがあり、これは、異なるサーバへの接続の確立に対する順序を選ぶ必要性を結果として生じさせる。
【0074】
それゆえ、基本的な問題は、リンク利用が最大化されるこのような方法で、TCP接続とこれらの接続上でのHTTPリクエストの双方をスケジュールすることである。これを問題1と呼ぶ。
【0075】
ここでは、あるサーバにおいて利用可能なリソースの観点から、問題を説明することに留意されたい。これらのサーバは、コンテンツをホスト管理するオリジナルのウェブサーバ(オリジンサーバ)、または、クライアントとオリジナルサーバとの間のパス上の(透過型でない)プロキシサーバであってもよい。プロキシサーバは、(CDNプロキシのケースでは)特定のリソースに特有であってもよく、または、(構成または学習されているローカルプロキシのケースでは)任意のリソースに対して適用可能であってもよい。ここで説明する問題およびアルゴリズムは、リソースを取り出すためにクライアントがアクセスする“サーバ”の種類に関係ない:我々は、何らかのオプション的なサーバ能力が、何らかの種類のサーバ上に存在することがあると仮定する。
【0076】
この問題に対する多数の拡張を、次のように実現することができる。
【0077】
要求されるリソースに関して何らかの種類の優先度順序付けがあることは、一般的である。例えば、ウェブサーバに対して、画像、広告、および、ビデオの前に、かつ、トラッカーまたは他の補助的な機能を呼び出す前に、レイアウト、スタイル、スクリプト、および、テキストのリソースを受信することが一般的に望ましい。これにより、すべてのリソースをダウンロードする前に、ページのレンダリングを開始することが可能になる。そのため、拡張される問題は、問題1に、リソースに関する優先度順序付けという追加の情報と、その順序でのまたはその順序に近いリソース配信という追加の目標とをプラスしたものである。これを問題2と呼ぶ。
【0078】
別の可能性は、すべてのリソースが完全に受信される前に、リソースの優先度順序付けが変更されるかもしれないということである(ダウンロードプロセスの間に、要求されているリストに新しいリソースを追加できる可能性を、問題1が含んでいたことも思い出してほしい)。例えば、ウェブページが完全にダウンロードされる前にユーザがウェブページをスクロールした場合に、これが生じ、そのため、リソースの順序付けは、目に見えるリソースを優先させるように変更する。このケースでは、追加の目標は、この変更または優先度を尊重し、利用可能なリソースが、確実に、変更後の最高の優先度のリソースに依然として専用であることである。これを問題3と呼ぶ。
【0079】
別のケースは、クライアントが、複数のインターフェースに対するアクセスを有し、それゆえ、リソースをホスト管理するサーバへの複数のパスを有するというものである。ここでは、CDNの一般的な動作−既存のシステムではサポートされていないと信じられている何かに起因して、ドメインネームのDNS解決がインターフェースごとに変化すると考えることが重要であるべきである。このケースでは、複数のインターフェースのすべてにおいて利用可能な帯域幅を利用するという追加の目的により、問題が拡張される。これを問題4と呼ぶ。
【0080】
最後に、1組の利用可能なインターフェースが変更する可能性もある。このケースでは、利用可能な帯域幅は、最高の優先度のリソースに専用であるべきであるという原則を維持して、最小のデータ損失により、変更を効率的に取り扱う必要がある。これを問題5と呼ぶ。
【0081】
要約すると、問題1は、1組のURLに対するパイプライン化およびリクエストのスケジューリングの最適な使用に関係する。目的は、帯域幅使用を最適化し、それにより、ページダウンロード時間を減少させることである。
【0082】
問題2は、URLに対する優先度順序付けと、その優先度を尊重するという目標とを追加する。目的は、ウェブページのプログレッシブなレンダリングを可能にし、それにより、知覚されているページのダウンロードスピードを改善することである。
【0083】
問題3は、優先度の変更を可能にする。目的は、高い優先度のオブジェクトに、帯域幅を確実にすばやく再割り当てし、それにより、ユーザの注目の変更(リンクのクリック、タブの変更、スクロール等)に対する応答性を改善することである。
【0084】
問題4は、複数のインターフェースの効率的な使用を考慮に入れ、それにより、マルチホームのホストに対するリンクアグリゲーションを通して、ページダウンロード時間を改善することを目的としている。
【0085】
問題5は、利用可能なインターフェースにおける変更を考慮に入れ、それにより、移動性をサポートすることを目的としている。
【0086】
HTTPプロトコルに基づくこれらの問題に対するソリューションは、ここでは、トランスポートレイヤの代わりに、HTTPアプリケーションレイヤに焦点を当てている。
【0087】
既存のソリューション:既存のウェブブラウザは、問題1と、ある程度は、問題2とを解決しようと試みている。しかしながら、現在の構成は、いくつかの欠陥を有している。第1に、要求されるリソース(URL)は、ページがダウンロードされるにつれて、プログレッシブに識別され、これは、クライアントにより既に知られている将来要求されるリソースについての情報を考慮することなく、接続の開閉について決定がなされることを意味する。
【0088】
第2に、既存のブラウザは、一般的に、パラレルな接続の数において任意の制限を有している。大多数のパラレルな接続が利点を提供することは期待されない。一般的な経験則は、6個のパラレルな接続を上回る収穫逓減があるように思われる。しかしながら、WWANネットワークは、大きなネットワーク側ダウンリンクバッファにより構成されていることが多いことに留意すべきである。これは、リンクがフルに利用されているときに、高いRTTに寄与することがある。それゆえ、パラレルな接続に対するTCP Slow Startは、別の接続が既にリンクを利用している場合には、極めてスローであるかもしれない。
【0089】
第3に、既存のブラウザは、パイプライン化を常に善用しているわけではない。これは、パイプライン化が、HTTPプロキシにおいて一貫してサポートされていないためである。また、プロキシによるパイプライン化の使用は、送られることになる次のオブジェクトが、プロキシにおいてまだ利用可能でないために、TCP接続がアイドルになる“ブロッキング”問題を引き起こすことがある。同じ接続上でリクエストされている別のオブジェクトが、プロキシにおいて利用可能である場合には、その代わりに、“順序通りでないレスポンス”としてそれを送ることが望ましいだろう。
【0090】
Googleにおいて最近発表されたSPDYプロジェクト(http://dev.chromium.org/spdy)は、TCPとHTTPの間に薄い多重化レイヤを挿入することにより、問題1および問題2を解決することを目的としている。これにより、単一のTCP接続を通して、割り当てられた優先度で、複数のHTTPトランザクションをパラレルに行うことが可能になる。作成者は、問題3を将来的な作業として識別している。SPDYプロジェクトは、HTTPヘッダ圧縮も、重要なコンポーネントとして識別している。WWANを特に述べていないが、HTTPリクエストの圧縮は、特に、WWANネットワークに対して価値があることがある。
【0091】
本開示は、標準的なHTTP1.1に基づく問題1〜5にプログレッシブに対処する例示的なアプローチを解析する。加えて、性能をさらに改善することができる、何らかの、最小の、最適なサーバ拡張を説明する。
【0092】
問題1:基本接続およびリクエストのスケジューリング:本セクションの基本的な考えは、リソースの識別と、TCP接続の確立と、実際のリクエストのスケジューリングとを別々に扱うことである。第1に、要求されるリソースは識別されており、したがって、接触が必要なサーバの完全な組は知られているという仮定がなされる。第2に、TCP接続がこれらのサーバに対して確立されるが、一度にすべてである必要はなく、サーバ当たり1つの接続である必要もない。第3に、リクエストは、確立されている接続にマッピングされる。
【0093】
接続を開くことを決定すべき2つの原則がある。
【0094】
第1に、各サーバに対する接続の数を最小化し、その結果、パイプライン化を利用する。これは、新しい接続が確立される(SYN/ACKおよびスロースタート)たびに、高い代償が払われるためである。他のアクティブな接続が、大幅なキューイング遅延と、したがって、大きなRTTとがあることを意味する場合に、これは、特に当てはまる。
【0095】
第2に、パケットが損失したまたは遅れたときに、全体的な輻輳レスポンスを減少させるために、複数のパラレルな接続を利用する。‘n’個のTCP接続がある場合に、単一の損失に対するレスポンスは、組み合わされた輻輳ウィンドウを1/2nだけ減少させるためのものである。
【0096】
これらの2つの目的が明らかに対立していると、このトレードオフを制御するパラメータが導入される:Pmaxを、パラレルなTCP接続の最大数とし、Pminを、パラレルなTCP接続の最小数におけるターゲットとする。目的は、Pminを前提として、サーバ当たり1個の接続を確立することである。
【0097】
n個のURLの組Uが与えられると、U={U0,...,Un-1}であり、m個の一意的なサーバの組S(S={S0,...,Sm-1})をそこから識別でき、ここで、m≦nである。既存のウェブサーバに対する即座に有用な拡張は、ページに対して可能な限り多くの要求されるURLを、可能な限りすばやく識別するためのものであることに留意されたい。現在、このプロセスは、関係し合う必要がないダウンロードおよびレンダリングプロセスと関係し合っている。
【0098】
複数の完全修飾ドメインネーム(FQDN)は、同じIPアドレスにマッピングしてもよいので、サーバSjは、FQDNではなく、IPアドレスによって識別される。(単一のFQDNが複数のアドレスにマッピングする可能性を、以下でさらに説明する。)s(i)を、URL Uiに対して要求されるサーバのインデックスとし(すなわち、Uiは、Ss(i)から取得することができる)、U(j)を、サーバSjから取得することができるURLの組とする。
【0099】
接続を確立し、リクエストを接続に割り振るためのプロセスが提供されている。このプロセスでは、リクエスト機会は、新しいリクエストを発行するための機会である。これがどのように定義されるかは、リクエスト/接続の整合に事前に取り組むことと、接続がアイドルになるのを可能にすることとの間のトレードオフである。その理由は、すべてのリクエストは、新しいリクエストが発行される前に完了するからである。いくつかの例を以下に示す。
【0100】
アルゴリズム1:
【数1】
【0101】
このプロセスの動作は、リクエスト機会がどのように定義されるかに依存する。2つの両極端は、次のように定義される。
【0102】
グリーディリクエスト機会:サーバに対する接続がオープンであるときにはいつでも、これが起こる。
【0103】
レイジー(lazy)リクエスト機会:レスポンスが接続上で完全に受信されたときにはいつでも、これが起こる。
【0104】
グリーディリクエスト機会のケースでは、接続の最大数Pmaxを前提として、すべてのリクエストが即座に発行される。Pminを尊重するために、リクエストは、同じサーバへの複数の接続にわたって分配されることもある。しかしながら、いったん、すべてのリクエストが発行されると、変更を行う機会はない。1つの接続上でのリクエストは、別の接続上でのリクエストよりも、完了するのにより長い時間がかかるので、Pminの接続よりも少ないということが起こるかもしれない。
【0105】
レイジーリクエスト機会のケースでは、プロセス全体を通してPminが尊重される。しかしながら、1つのレスポンスの終了と、次のレスポンスの開始との間の時間の間、各接続はアイドルのままであり、この時間は、1つのラウンドトリップタイムにサーバレスポンス時間をプラスしたものを測定する。これは、パイプライン化をサポートしないHTTP1.1クライアントに対する標準的な振る舞いである。
【0106】
理想的には、リクエスト機会に対する定義は、2つの両極端の間のどこかにあるだろう。例えば、レスポンスを受信するための残り時間が、1つのラウンドトリップタイムにサーバ処理時間をプラスしたものであると推定されたときに、リクエスト機会が、起こることがある。しかしながら、サーバ処理時間が知られておらず、RTTのみが推定されていると、いずれにしても、この時間は、以前のレスポンスに対する総受信時間よりも長いことがある。以下の説明では、“ジャストインタイム”(Jit)リクエスト機会は、リンクがアイドルになるのを避けるのに十分な時間において、しかし、そうでなければ、可能な限り遅く、リクエストが発行される、最適化されたバージョンを意味する。
【0107】
パイプライン化のサーバサポート:プロキシサーバは、パイプライン化に対する一貫したサポートを提供しないと噂されている。(プロキシを含む)HTTP1.1サーバは、パイプライン化リクエストを処理するか、または、無視するかのいずれかである(すなわち、失敗しない)ように要求される。したがって、1つより多いリクエストが発行された場合に、最初のレスポンスを完全に受信した後に、(第2のレスポンスが後に続くか否かによって)サーバは、パイプライン化をサポートするか否かを決定することが可能であるはずである。サーバがパイプライン化をサポートしないケースでは、そのサーバからリクエストされたURLは、最初のものを除いて、そのサーバに対するui組に返されるべきであり、言及したパイプライン化サポートはない。そのサーバへの後続する接続は、最大で1つのリクエストを受信すべきである。
【0108】
順序通りでないレスポンス:標準的なサーバは、リクエストを受信した順序で、パイプライン化されたリクエストに対するレスポンスを返す。サーバが異なる順序でリクエストを返すことを可能にするHTTP拡張機能が、定義されている。特に、プロキシサーバのケースでは、オブジェクトをリクエストしたのとは異なる順序で、サーバにおいてオブジェクトが利用可能になることがあるので、これは価値がある。それゆえ、順序通りのオブジェクト配信は、ヘッドオブラインブロッキング問題を引き起こすかもしれない。しかし、この特徴を利用するためには、複数のリクエストが接続上でパイプライン化される必要がある:より多くのリクエストがキューに入れられている場合に、ヘッドオブラインブロッキングの可能性は減少するが、より多くの取り組みが行われている:結果として、この特徴が存在するときに、この特徴が存在しないときよりも、接続上でより多くのリクエストを発行することが望ましいことがある。
【0109】
順序通りでない拡張は、リクエストに追加された“トランザクションID”ヘッダフィールドからなる。順序通りでないレスポンスは、対応するリクエストのトランザクションID値をエコーとして返す。レスポンスにおけるトランザクションIDフィールドの不在は、サーバが、順序通りでないレスポンスをサポートしないことを示す。
【0110】
HTTPヘッダ圧縮:HTTPは、エンティティボディのgzip圧縮をサポートするが、リクエストのgzip圧縮はサポートしない。Google SPDYプロジェクトは、かなりの利点を提供するとして、HTTPヘッダ圧縮を識別しており、WWANネットワークに対しては、リクエスト圧縮が特に有用であることが期待されてもよい。
【0111】
ヘッダ圧縮は、下位互換性のあるHTTP拡張機能として次のように容易に定義できる。
【0112】
ヘッダ圧縮をサポートしているクライアントは、既存のContent−Encodingヘッダ(例えば、Header−Encoding:gzip)に類似する、最初のリクエスト中の新しいオプション的なヘッダにより、これを示す。
【0113】
ヘッダ圧縮をサポートしているサーバは、新しいヘッダを認識し、圧縮されたヘッダを持つレスポンスを返す。
【0114】
ヘッダ圧縮の始まりは、新しいリクエストまたはレスポンスが期待されるストリーム中に現れる標準的なgzipヘッダにより、示すことができる。
【0115】
接続上でのリクエストまたはレスポンスのシーケンスは、1つの連続的なストリームとして圧縮すべきである。(それぞれの終端の復帰改行を含む)リクエストまたはレスポンスの連結から、圧縮されていないストリームが形成される。各リクエストまたはレスポンスの終わりに、フラッシュポイント(flush point)があるにちがいないので、後続の情報を受信することなく、これをフルにデコードすることができる。
【0116】
圧縮が始まる前に送られた、圧縮されていないリクエストまたはレスポンスは、圧縮のための静的なディクショナリとして使用すべきである。
【0117】
サーバ識別リソース:Google SPDYは、これらの例において、クライアントがリクエストしていない、このリソースが要求されるだろうとサーバが気付いているリソースを、サーバがクライアントに返す可能性を識別する。クライアントがリクエストすることを望むことがあるリソースの提案を、サーバが提供する可能性もある。
【0118】
前者のオプションは、クライアントがリクエストをキャンセルする能力を要求するのに対し、後者は、その能力に対する必要性なく、同じ目的のほとんどを達成する。
【0119】
順序通りでないレスポンスがサポートされている場合に、提案したアプローチのシンプルな構成は、特別なトランザクションIDとリクエストURLを持つ、サーバ識別リソースに対するレスポンスヘッダを、サーバが送ることである。これは、クライアントが、そのキャッシュを調べて、オブジェクトをリクエストするか否かを決定することができるように、キャッシュ関連情報(データ、Eタグ、キャッシュ制御ディレクティブ)を含めることを可能にする。
【0120】
リクエストのキャンセル:先に説明した順序通りでない拡張がサポートされている場合には、トランザクションIDを持つリクエストを参照することにより、リクエストをキャンセルするための新しい方法を、自明に追加することができる。これは、より多くのリクエストをパイプライン中でキューアップすることを可能にする(そして、ヘッドオブラインブロッキングの可能性を減少させる)のに、有用であってもよい一方で、必要な場合に、この取り組みを逆にすることもできる。
【0121】
問題2:リクエストの優先順位付け:問題2は、URLの組、Uが、優先度順序を有する追加の可能性を導入する。一般性を損なうことなく、リストU0,...,Un-1は、最高の優先度が1番目である優先度順序であると仮定する。また、追加されるのは、より高い優先度のオブジェクトが、より低い優先度のオブジェクトの前に配信されるという目的である。
【0122】
この新しい目的は、利用可能な帯域幅使用を最大化するという本来の目的に次ぐものであることに留意されたい:すなわち、帯域幅使用を最大化するためにこれが必要である場合には、優先度順序通りでなくオブジェクトを配信することを許容できる(そうでなければ、厳密な優先度順序でリクエストを発行し、各リクエストの後で、別のリクエストが発行される前にそれが完了するのを待つことにより、要件が満たされるだろう)。
【0123】
優先順位付けをサポートするために、アルゴリズム1を次のように修正する:
アルゴリズム2
1)Uにおける順序付けは、そのサーバ上で利用可能な最高優先度のリソースの順序にサーバを置くことにより、Sにおける順序付けを誘発する。その後、各組uiも、明白な方法で順序付けされる
2)ステップ2(a)、2(b)、および、4(c)(i)において、選ばれたiの値が、このような最小値であること以外は、アルゴリズム1にしたがう。
【0124】
問題3:優先度における変更:Google SPDYプロトコルは、TCPとHTTPとの間に薄い多重化レイヤを提供し、これを使用して、複数のリクエスト/レスポンストランザクションを同じ接続上で多重化することにより、この要件に対処することを目的としている。既存の技術との相違は、次のように理解することができる。
【0125】
パイプライン化は、複数のリクエスト/レスポンストランザクションが、TCP接続を共有することを可能にするが、レスポンスが、シーケンシャルにおよび順序通りに返されることを要求する。
【0126】
順序通りでないレスポンスによるパイプライン化(ワンショットウェブ)は、レスポンスが、異なる順序で返されることを可能にするが、レスポンスは、依然としてシーケンシャルである(各レスポンスは、次が開始する前に完了しなければならない)。
【0127】
パラレルなTCP接続は、レスポンスが、パラレルに送られる(IPレイヤにおいて多重化される)ことを可能にするが、トランザクションは、独立して進む:1つのものの、他のものに対する優先順位付けを調整することはできない。
【0128】
このため、SPDYプロトコルは、レスポンスのシーケンシャルな完了に対する要件なしに、パイプライン化の利益を得ることを目的している。
【0129】
第1に、アルゴリズム2において、レイジーリクエスト機会またはジャストインタイムリクエスト機会が使用される場合に、各ui組内のリクエストされていないリソースの優先度を再順序付けすることが、いかなるときにおいても常に可能であることに留意すべきである。このシンプルなアプローチは、実質的な利益を提供することができる(これをアルゴリズム2aと呼ぶ)。
【0130】
HTTPの部分的なリクエスト(すなわち、Rangeヘッダを持つHTTPリクエスト)の使用に基づいて、より細かい粒度で優先度の変更を取り扱うための、代替的なスキームをここで説明する。
【0131】
第1に、Rを、バイトでの、最大リクエストサイズとする。サイズRまたはより小さいサイズの要求されるリソースの断片に対して、リクエストが発行される。アルゴリズム2では、各URL、uiは、対(URL、Byte Range)により置換される。アプリケーションにより提供されるURLおよびByte Range[0,R−1]により、これらの対が初期化される。
【0132】
その後、アルゴリズム3を形成するために、以下の手順が追加される。
【0133】
URLに対する第1のレスポンスヘッダを受信次第、オブジェクトサイズFを取得する。その後、F>Rである場合に、同じURLとByte Range[R,2R−1],[2R,3R−1],...,[rR,F−1]とを持つ、ui中のr:=ceil(F/R)−1の追加エントリを構築する。uiにおけるエントリの順序は、先のように、URLの優先度順序付けに基づくべきであることに留意されたい。
【0134】
このスキームでは、優先度の変更が起こったときに、リクエストされたが、接続上で受信されていない未処理のデータの量は、最大Rであり、それゆえ、リソースが、より低い優先度のリソースに専用である期間が減少される。
【0135】
ジャストインタイム(JiT)リクエスト機会を効率的にサポートするために、Rは、1つのラウンドトリップタイム中で送信することができるデータの量よりも大きいはずであるものと考えられる。測定されたラウンドトリップタイムおよびデータレートにしたがって、Rが変化すべきであってもよい。
【0136】
問題4:マルチホーミングに対するサポート:マルチホームのホストは、複数の接続されたインターフェースを有し、それゆえ、インターネットへの複数のルートを有するものである。マルチホームのホストのケースにおける目的は、ダウンロードスピードを改善するために、複数のインターフェースを同時に利用することである。
【0137】
第1に、HTTPスタックが、利用可能なインターフェースの知識と、特定のインターフェースを使用するようにTCP接続に命令するための能力とを有していると仮定する。既存のホストオペレーティングシステム(OS)構成ではそうではないので、これを達成するために何らかの作業が要求される。このようなOSの改善に先立って、可能性ある代替実施形態は、別々のインターフェースを通して到達可能なHTTPプロキシサーバを提供するためと、異なるインターフェースを通して各サーバにパケットを向ける、これらのサーバに対する明示的なルートを、クライアントルーティングテーブル内で定義するためのものである。このように、プロキシサーバの選択は、使用されるだろうインターフェースを決定し、そのインターフェースに関係付けられているプロキシに接続を向けることにより、インターフェースに接続を向けることができる。
【0138】
所定のURLに対して使用されることになるプロキシを決定するJavaScript機能を、ユーザが特定することを可能にする、プロキシ自動設定スクリプトの使用により、多くの既存のウェブブラウザ構成において、プロキシサーバの選択を制御することができる。このアプローチにより、インターフェースにわたってリクエストを静的に分配することが可能になり、例えば、ある割合のリクエストは、1つのインターフェースに対するものであり、残りのものは、別のインターフェースに対するものである。
【0139】
リクエストのうちの1/Nをproxy_aに向け、残りのものをproxy_bに向ける適切なスクリプトが、以下に示されている:
【数2】
【0140】
このスクリプトでは、URLの長さがハッシュ関数として使用される。代替的なハッシュ関数を使用することもできる。
【0141】
特定のインターフェースにTCP接続を向けるOSベースの能力が与えられるとすると、ここではアルゴリズム4と呼ばれるシンプルなマルチホーミングアプローチは、アルゴリズム2にしたがうためのものであり、ラウンドロビン方法で、利用可能なインターフェースにわたってTCP接続を分配するためのものである。
【0142】
アルゴリズム5を得るために、アルゴリズム3に対して同じ拡張を行うことができる。アルゴリズム4と比較すると、利点は、大きなオブジェクトを複数のインターフェースにわたって分けてもよいことである。その理由は、オブジェクトに対する部分的なリクエストが、接続にわたって分配されるだろうからである。
【0143】
これらのケースでは、Pminを、少なくともインターフェースの数に設定することが望ましい。
【0144】
マルチホーミングおよびDNS:CDNの通常の動作に起因して、DNS解決の結果は、ホストのインターネットへの接続のポイントに依存して、および、リクエストが最初に送られるDNSサーバに依存して、異なってもよい。我々の知る限り、既存のホストOSは、これに対処していない。
【0145】
HTTPおよびCDNの特定のケースでは、異なる解決の結果の理由は、CDNが、接続のポイントに“近い”適切なプロキシを識別するためである。各インターフェースに対して正しいプロキシを使用することが極めて望ましい。
【0146】
問題5:移動性:問題4に対するソリューション(マルチホーミング)が与えられると、移動性に対するサポートは、転送の間にインターフェースがシャットダウンするケースと、新しいインターフェースが利用可能になるケースとを取り扱うという問題に減少する。
【0147】
移動性をサポートするアルゴリズム6を得るために、アルゴリズム4が次のように拡張される。
【0148】
インターフェースが停止したときに、そのインターフェースを使用しているオープンな接続を識別し、これらの接続上で発行されている未完了のリクエストのリストを構築する。これらのリソースを適切なui組に追加して戻し、プロセスを継続する。
【0149】
インターフェースが立ち上がったときに、次回接続を確立しなければならないときに、このインターフェースを選択に対して利用可能にする。
【0150】
双方のケースにおいて、インターフェースの数に基づいてPminが設定されている場合に、Pminを修正することを考える。
【0151】
アルゴリズム7を得るために、アルゴリズム5に対して、類似する拡張を次のように行うことができる。
【0152】
インターフェースが停止したときに、そのインターフェースを使用しているオープンな接続を識別し、これらの接続上で発行されている未完了のリクエストのリストを構築する。これらのリクエストを適切なui組に追加して戻し、プロセスを継続する。Byte Range[a,b]に対する進行中の何らかのリクエストに対して、受信した最後のバイトcを識別し、Byte Range[c+1,b]に対するリクエストを、適切なui組に追加する。
【0153】
インターフェースが立ち上がったときに、次回接続を確立しなければならないときに、このインターフェースを選択に対して利用可能にする。
【0154】
双方のケースにおいて、インターフェースの数に基づいてPminが設定されている場合に、Pminを修正することを考える。
【0155】
図7、ダイヤグラム700は、前述した7個のアルゴリズムの例示的な関係を示している。本開示の利益により、リソース識別702と、接続確立704と、リクエストスケジューリング706との分離の基本概念が、アルゴリズム1 708において初めから適用され、アルゴリズム1 708は、グリーディまたはJITのリクエスト動作710を用いることができることを正しく認識すべきである。アルゴリズム1 708は、利用可能なオプション的なサーバ能力は何でも(例えば、パイプライン化712、順序通りでないレスポンス714、ヘッダ圧縮716、サーバ識別リソース718、および、HTTPキャンセル能力720)最大限利用することができるが、これらがすべて利用可能でない場合にもなお改善を提供する。
【0156】
アルゴリズム2 722は、グリーディまたはJiTのリクエスト動作726に加えて、シンプルなリクエスト優先順位付け724を追加する。アルゴリズム2 722に基づくアルゴリズム2a 728では、ジャストインタイムリクエスト機会732とともに使用するために、優先順位の付け直し730が提供されている。アルゴリズム2A 728に基づくことができるアルゴリズム4 734は、ラウンドロビンベースで、接続をインターフェースに割り振ることにより、マルチホーミング736を提供する。アルゴリズム4 734に基づくアルゴリズム6 738は、ラウンドロビンベースで、接続をインターフェースに割り振ることにより、このシンプルなモデルによってさえサポートすることができる移動性740を提供する。
【0157】
アルゴリズム3 742は、リクエストの優先順位付けの付け直し746およびJiTリクエスト動作748とともに、部分的なリクエスト744の使用によって、より細かい粒度での優先順位の付け直しを提供する。アルゴリズム5 750においてマルチホーミング752に拡張されるときにも、および、アルゴリズム7 754において移動性756に拡張されるときにも、このアプローチは利益を提供する。
【0158】
図8は、ここで説明する機能性のさまざまな態様を実現するために利用することができる別のシステム800のブロックダイヤグラムである。1つの例では、システム800は、移動端末802を含む。示されているように、移動端末802は、1つ以上のアンテナ808を介して、信号を、1つ以上の基地局804から受信することができ、1つ以上の基地局804に送信することができる。さらに、移動端末802は、アンテナ808から情報を受け取る受信機810を備えることができる。1つの例では、受信機810は、受け取った情報を復調する復調器812に動作可能に関係付けることができる。復調されたシンボルは、その後、プロセッサ814により解析することができる。プロセッサ814はメモリ816に結合することができ、メモリ816は、移動端末802に関連するデータおよび/またはプログラムコードを記憶することができる。さらに、移動端末802は、ここで説明する方法を実行するために、プロセッサ814を用いることができる。移動端末802は、アンテナ808を通して送信機820により送信するための信号を多重化することができる変調器818も備えることができる。
【0159】
移動端末802は、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを基地局804に送信する。メモリ816において、および、プロセッサ814により実行されると、HTTP最適化コンポーネント822は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる。
【0160】
図9は、ここで説明する機能性のさまざまな態様を実現するために利用することができるシステム900のブロックダイヤグラムである。1つの例では、システム900は、基地局またはノードB902を含む。示されているように、ノードB902は、信号を、1つ以上の受信(Rx)アンテナ906を介して、1つ以上のUE904から受信し、1つ以上の送信(Tx)アンテナ908を介して、1つ以上のUE904に送信することができる。さらに、ノードB902は、受信アンテナ906から情報を受け取る受信機910を備えることができる。1つの例では、受信機910は、受け取った情報を復調する復調器912に動作可能に関係付けることができる。復調されたシンボルは、その後、プロセッサ914により解析することができる。プロセッサ914はメモリ916に結合することができ、メモリ916は、コードクラスタ、アクセス端末割り当て、メモリ916に関連するルックアップテーブル、一意的なスクランブルシーケンスに関連する情報、および/または、他の適切なタイプの情報を記憶することができる。1つの例では、ノードB902は、送信アンテナ908を通して送信機920により送信するための信号を多重化することができる変調器918も備えることができる。
【0161】
メモリ916において、および、プロセッサ914により実行されると、HTTP最適化サポートコンポーネント922は、HTTP通信を最適化するために、UE904によってリクエストされることがある能力(例えば、パイプライン化、順序通りでないレスポンス、ヘッダ圧縮、サーバ識別リソース、および、HTTPキャンセル能力)を提供する。
【0162】
図10を参照すると、示されているのは、パケットデータ通信のためのシステム1000である。例えば、システム1000は、ユーザ機器(UE)内に少なくとも部分的に存在することができる。機能ブロックを含むものとして、システム1000が表され、機能ブロックは、コンピューティングプラットフォーム、プロセッサ、ソフトウェア、または、それらの組み合わせ(例えば、ファームウェア)により実現される機能を表す機能ブロックとすることができることを正しく認識すべきである。システム1000は、共に動作することができる電気コンポーネントの論理グルーピング1002を含む。例えば、論理グルーピング1002は、パケットデータ通信のための多数のパラレルな接続を確立する電気コンポーネント1004を含むことができる。さらに、論理グルーピング1002は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化リクエストを送信する電気コンポーネント1006を含むことができる。加えて、論理グルーピング1002は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる電気コンポーネント1008を含むことができる。さらに、システム1000は、電気コンポーネント1004〜1008に関係付けられている機能を実行するための命令を保持するメモリ1020を含むことができる。メモリ1020の外部にあるとして示されているが、電気コンポーネント1004〜1008のうちの1つ以上は、メモリ1020内に存在することができることを理解すべきである。
【0163】
図11において、パケットデータ通信のための装置1102が示されている。装置1102は、パケットデータ通信のための多数のパラレルな接続を確立する手段1104を備える。装置1102は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化リクエストを送信する手段1106を備える。装置1102は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる手段1108を備える。
【0164】
ここで開示した態様に関連して説明した、さまざまな例示的な論理ブロック、モジュール、回路およびアルゴリズムステップを、電子ハードウェア、コンピュータソフトウェア、または、双方を組み合わせたものとして実現してもよいことを、当業者はさらに正しく認識するであろう。ハードウェアおよびソフトウェアのこの交換可能性を明確に示すために、さまざまな例示的なコンポーネント、ブロック、モジュール、回路、およびステップを、一般的にこれらの機能性に関して上述した。このような機能性がハードウェアまたはソフトウェアとして実現されるか否かは、特定の応用、および、システム全体に課せられた設計の制約に依存する。当業者は、それぞれの特定の応用に対して方法を変化させて、説明した機能性を実現してもよいが、このようなインプリメンテーション決定は、本開示の範囲からの逸脱を生じさせるものとして解釈すべきではない。
【0165】
本明細書で使用するような、用語“コンポーネント”、“モジュール”、“システム”、および、これらに類するものは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または、実行中のソフトウェアのいずれかである、コンピュータ関連エンティティのことを指すことを意図している。例えば、コンポーネントは、これらに限定されないが、プロセッサ上で動作しているプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、および/または、コンピュータであってもよい。例として、サーバ上で動作しているアプリケーションとサーバの双方をコンポーネントとすることができる。1つ以上のコンポーネントが、プロセスおよび/または実行のスレッド内に存在することがあり、コンポーネントは、1つのコンピュータ上に局所化されていてもよく、および/または、2つ以上のコンピュータ間に分散されていてもよい。
【0166】
ここでは、例として、事例として、あるいは例示として機能することを意味するように、“例示的な”という単語を使用する。“例示的な”ものとして、ここで説明したいずれの態様または設計は、他の態様または設計と比較して、必ずしも好ましいものとして、または、利益のあるものとして、解釈すべきではない。
【0167】
多数のコンポーネント、モジュール、および、これらに類するものを含んでもよいシステムの観点から、さまざまな態様が提示されるだろう。さまざまなシステムが、追加のコンポーネント、モジュール等を含んでもよいこと、および/または、図面に関連して論じたコンポーネント、モジュール等のすべてを含まなくてもよいことを理解し、正しく認識すべきである。これらのアプローチの組み合わせもまた使用してもよい。ここで開示したさまざまな態様は、タッチスクリーンディスプレイ技術を、ならびに/あるいは、マウスおよびキーボードタイプのインターフェースを、利用するデバイスを含む電気デバイス上で実行することができる。このようなデバイスの例は、コンピュータ(デスクトップおよびモバイル)、スマートフォン、パーソナルデジタルアシスタント(PDA)、ならびに、ワイヤードおよびワイヤレス双方の他の電子デバイスを含む。
【0168】
加えて、ここで開示した態様に関連して説明した、さまざまな例示的な論理ブロック、モジュールおよび回路は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、あるいは、ここで説明した機能を実行するように設計されているこれらの任意の組み合わせで、実現または実行されてもよい。汎用プロセッサは、マイクロプロセッサであってもよいが、代替的に、プロセッサは、何らかの従来のプロセッサ、制御装置、マイクロ制御装置、または、状態機械であってもよい。プロセッサはまた、コンピューティングデバイスの組み合わせとして、例えば、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアを伴った1つ以上のマイクロプロセッサ、あるいは、このようなコンフィギュレーションの他の何らかのものとして実現されてもよい。
【0169】
さらに、開示した態様を実現するようにコンピュータを制御するために、標準のプログラミングおよび/またはエンジニアリング技法を使用して、ソフトウェア、ファームウェア、ハードウェア、または、これらの何らかの組み合わせを生成させることにより、方法、装置、または、製造物として、1つ以上のバージョンを実現してもよい。ここで使用するような用語“製造物”(または、代替的に、“コンピュータプログラムプロダクト”)は、何らかのコンピュータ読取可能デバイス、キャリア、または、媒体から、アクセス可能なコンピュータプログラムを含むことを意図している。例えば、コンピュータ読取可能媒体は、これらに限定されないが、磁気記憶デバイス(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ...)や、光ディスク(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)...)や、スマートカードや、フラッシュメモリデバイス(例えば、カード、スティック)を含むことがある。さらに、電子メールを送受信する際に、あるいは、インターネットまたはローカルエリアネットワーク(LAN)のようなネットワークにアクセスする際に使用するもののような、コンピュータ読取可能な電子データを伝えるために、搬送波を用いることができることを正しく認識すべきである。当然、当業者は、開示した態様の範囲から逸脱することなく、このコンフィギュレーションに対して多くの改良がなされてもよいことを認識するだろう。
【0170】
ここで開示した態様に関連して説明した方法またはアルゴリズムのステップは、直接、ハードウェアで、プロセッサにより実行されるソフトウェアモジュールで、あるいは、2つの組み合わせで、具現化してもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーブバルディスク、CD−ROM、あるいは、技術的に知られている他の何らかの形態の記憶媒体に存在していてもよい。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替実施形態では、記憶媒体は、プロセッサと一体化されてもよい。プロセッサおよび記憶媒体は、ASICに存在してもよい。ASICは、ユーザ端末に存在してもよい。代替実施形態では、プロセッサおよび記憶媒体は、ユーザ端末中のディスクリートコンポーネントとして存在してもよい。
【0171】
開示した態様の先の説明は、当業者が本開示を作り、または、使用できるように提供されている。これらの態様に対するさまざまな改良は、当業者に容易に明らかになるであろう。そして、ここで定義されている一般的な原理は、本開示の精神または範囲を逸脱することなく、他の実施形態に適用されてもよい。したがって、本開示は、ここに示した実施形態に限定されることを意図しているものではないが、ここに開示した原理および新規の特徴と矛盾しない最も広い範囲に一致させるべきである。
【0172】
先に説明した例示的なシステムを考慮して、開示した主題事項にしたがって実現されてもよい方法を、いくつかのフローダイヤグラムを参照して説明してきた。説明を簡略化する目的のために、一連のブロックとして、方法を示し、説明してきたが、いくつかのブロックは、ここで示し、説明したものとは異なる順序で、および/または、他のブロックと同時に、起こることがあるので、請求されている主題事項は、ブロックの順序によって限定されないことを理解し、正しく認識すべきである。さらに、ここで説明した方法を実現するのに、示されているブロックがすべて要求されるわけではない。さらに、ここで開示した方法は、このような方法をコンピュータに伝送および転送するのを促進するために、製造物上に記憶することができることをさらに正しく認識すべきである。ここで使用するような製造物という用語は、何らかのコンピュータ読取可能デバイス、キャリア、または、媒体からアクセス可能なコンピュータプログラムを含むように意図されている。
【0173】
ここでの参照により組み込まれていると言われた、何らかの特許、公報、または、他の開示資料は、組み込まれている資料が、本開示で述べた、既存の定義、ステートメント、または、他の開示資料と対立しない限りのみ、全体または一部として、ここに組み込まれることを正しく認識すべきである。そのようなものとして、および、必要である限り、ここで明示的に述べたような開示は、参照によりここに組み込まれている、対立するあらゆる資料に取って代わる。参照によりここに組み込まれていると言われた、何らかの資料あるいはその一部は、既存の定義、ステートメント、または、ここで述べた他の開示資料と対立するもの以外は、その組み込まれている資料と既存の開示資料との間で何ら対立が生じない限りのみ、組み込まれるだろう。
【合衆国法典第35部第119条の下での優先権の主張】
【0001】
本特許出願は、“HTTP最適化、マルチホーミング、移動性、および、優先度”と題され、2009年12月18日に出願され、この出願の譲受人に譲渡され、ここでの参照によりここに明確に組み込まれている仮出願番号第61/288,119号に対して優先権を主張する。
【同時係属中の特許出願に対する参照】
【0002】
本特許出願は、これとともに同時に出願され、この出願の譲受人に譲渡され、ここでの参照により明確に組み込まれている、Ramin Rezaiifar氏らによる、代理人ドケット番号第100528U2号を有する、以下の同時係属中の米国特許出願“アプリケーションレイヤにおける、複数のインターフェースの結合/集約”に関連する。
【分野】
【0003】
本開示は、一般的に通信に関し、さらに詳細には、ワイヤレス通信ネットワーク中で、ハイパーテキストパケットデータコンテンツを取り出すための技術に関する。
【背景】
【0004】
ハイパーテキスト転送プロトコル(HTTP)は、ウェブブラウザおよびウェブアプリケーションにより使用されている主要な通信プロトコルである。コンテンツ配信ネットワークの形で、HTTPプロトコルの効率的な動作をサポートするために、インターネット内で大型インフラストラクチャが成長してきた。結果として、増加する数のアプリケーションが、HTTPプロトコルに移行している。この移行に対する他の理由(例えば、ネットワークアドレス変換(NAT)およびファイアウォールトラバーサル)がある一方で、主な動因は、ウェブインフラストラクチャの大規模なスケーラビリティを活用する能力である。
【0005】
今日、ウェブサイトは、極めて複雑であり、HTTPを使用してそれぞれが別々にリクエストされなければならない、数十または数百のオブジェクトを含んでいることが多い。サーバからクライアントにオブジェクトを伝送できるスピードを改善するために、さまざまな最適化がHTTP内で定義されている。ワイヤードネットワーク内でこれらの最適化を適用するときに、かなりの量の作業が行われてきた。しかしながら、高ラウンドトリップタイム(RTT)と非常に可変の帯域幅とを持つ、より挑戦的な移動体環境で、これらの特徴がどのように振る舞い、組み合わせられるのかを理解することは、依然として未解決の問題のままである。特に、移動体ネットワークの特性が、その当時、今日とは大きく異なっていた数年前に、多くのHTTP作業が実行されたことに留意すべきである。
【概要】
【0006】
以下のものは、開示されている態様のうちのいくつかの態様の基本的な理解を提供するために、簡略化した概要を提示する。この概要は、広範囲にわたる概略ではなく、キーエレメントまたは重要なエレメントを識別することや、このような態様の範囲を線引きすることのどちらも意図していない。この目的は、後に提示するさらに詳細な説明に対する前置きとして、説明されている特徴のうちのいくつかの概念を、簡略化した形で提示することである。
【0007】
1つの態様では、パケットデータ通信のための多数のパラレルな接続を確立することと、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信することと、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させることとによる、パケットデータ通信のための方法が提供されている。
【0008】
別の態様では、パケットデータ通信のための少なくとも1つのプロセッサが提供されている。第1のモジュールは、パケットデータ通信のための多数のパラレルな接続を確立する。第2のモジュールは、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。第3のモジュールは、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0009】
追加の態様では、パケットデータ通信のためのコンピュータプログラムプロダクトが提供されている。一時的でないコンピュータ読取可能媒体は、コードの組を記憶する。第1の組のコードは、コンピュータに、パケットデータ通信のための多数のパラレルな接続を確立させる。第2の組のコードは、コンピュータに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信させる。第3の組のコードは、コンピュータに、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0010】
さらなる態様では、パケットデータ通信のための装置が提供されている。装置は、パケットデータ通信のための多数のパラレルな接続を確立する手段を具備する。装置は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する手段を具備する。装置は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる手段を具備する。
【0011】
さらに別の態様では、パケットデータ通信のための装置が提供されている。トランシーバは、パケットデータ通信のための多数のパラレルな接続を確立する。トランシーバは、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。コンピューティングプラットフォームは、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0012】
先の目的および関連する目的を達成するために、1つ以上の態様は、後に完全に説明する特徴、および、特許請求の範囲中で特に指摘する特徴を含んでいる。以下の説明および添付した図面により、ある例示的な態様を詳細に述べ、態様の原理を用いることができるさまざまな方法のうちのいくつかだけを示す。図面とともに考えるときに、他の利点および新規の特徴が、以下の詳細な説明から明らかになるだろう。開示されている態様は、このようなすべての態様とそれらの均等物とを含むことを意図している。
【図面の簡単な説明】
【0013】
同一の参照文字が全体を通して対応したものを識別している図面とともに考慮されたときに、以下で示される詳細な説明から、本開示の特徴、特質、および利点がより明白となろう。
【図1】図1は、HTTP最適化のための通信システムの概略図を示している。
【図2A】図2Aは、HTTP最適化のための方法に対するフローダイヤグラムを示している。
【図2B】図2Bは、HTTP最適化のための方法に対するフローダイヤグラムを示している。
【図3】図3は、ラウンドトリップタイム(RTT)の関数として、ページロード時間のグラフィカルプロットを示している。
【図4】図4は、単一の継続的接続に対するリンク使用パターンのダイヤグラムを示している。
【図5】図5は、第1および第2のアップリンクリクエストならびにダウンリンクレスポンスに対するリンク使用パターンのダイヤグラムを示している。
【図6】図6は、固定帯域幅での異なるRTTに対して達成される最良のページダウンロード時間に対するグラフィカルプロットを示している。
【図7】図7は、HTTP最適化に対する複数のアルゴリズムの例示的な関係に対するダイヤグラムを示している。
【図8】図8は、HTTP最適化を実行する移動端末に対するブロックダイヤグラムを示している。
【図9】図9は、HTTP最適化をサポートするノードに対するブロックダイヤグラムを示している。
【図10】図10は、HTTP最適化に対する電気コンポーネントの論理グルーピングを有する、移動デバイス中に少なくとも部分的に存在するシステムに対するブロックダイヤグラムを示している。
【図11】図11は、HTTP最適化をサポートする電気コンポーネントの論理グルーピングを有する、ネットワーク中に存在するシステムに対するブロックダイヤグラムを示している。
【詳細な説明】
【0014】
増加するラウンドトリップタイム(RTT)の影響を克服するために、パラレルなHTTP接続とパイプライン化を組み合わせることに利益が存在する。一般的に知られているブラウザは、固定数のパラレルな接続と、固定数の未処理のリクエストを用いるが、接触しなければならない異なるサーバの組により、パラレルな接続の数は影響を受ける。
【0015】
本イノベーションの1つの態様は、未処理のリクエストの数が最小になり、リンクが依然としてフルに利用されるように、パラレルな接続の数と、パイプライン化されたリクエストの数とを、リアルタイムに変化させるためのものである。
【0016】
例えば、リクエストされるデータの量に基づいて、リンクが依然として確実にフルに利用されるように、これらの数を変化させることができる。しかしながら、まだ受信されていないデータの量が、帯域幅とRTTの積を超えてはならない。これらの量の双方とも、絶えず変化している。加えて、オブジェクトのヘッダが届くまで、オブジェクトサイズはわからないので、未処理のデータの量は、正確にはわからない。
【0017】
1つの可能性は、これらのすべての変数に対する確率モデルを構築し、リンクがアイドルになる確率全体を、何らかのしきい値を下回るように維持しようと試みることである。例えば、オブジェクトサイズに対する確率モデルは、オブジェクトタイプ(イメージ、HTML、JavaScript(登録商標)、CSS等)を、オブジェクトサイズに関する分布にマッピングするヒストリカルデータを使用してもよい。特に、オブジェクトの以前のキャッシュされたバージョンがある場合には、返されるだろうデータは、オブジェクトは変更されていないので、ゼロ(または、むしろ、HTTPヘッダだけ)であるか、あるいは、古いものと類似するサイズを有する可能性がある新しいバージョンであるかのいずれかである。
【0018】
したがって、最近測定された帯域幅およびラウンドトリップタイムに基づいて、リクエストされたが受信されていないデータが、帯域幅とRTTの積を超える確率まで、より多くのオブジェクトのパイプライン化を継続できる。より多くのデータが届くか、あるいは、帯域幅またはラウンドトリップタイムにおける変更が観測されたときにはいつでも、この計算を繰り返すことができる。それにより、HTTP接続上のパイプライン化されたリクエストのターゲット数は、以下でさらに詳細に説明するように、接続の持続時間の間に変化することがある。
【0019】
図面を参照して、ここでさまざまな態様を説明する。以下の説明では、説明の目的上、1つ以上の態様の完全な理解を提供するために、多数の特定の詳細を述べる。しかしながら、これらの特定の詳細なしにさまざまな態様を実施できることが、明らかであることがある。他の例では、これらの態様の説明を促進するために、よく知られている構造およびデバイスは、ブロックダイヤグラムの形で示されている。
【0020】
図1では、通信システム100において、移動デバイス、アクセス端末、または、ユーザ機器(UE)102が、複数のサーバ112〜114上に記憶されているオブジェクト106、108、110を含むハイパーテキストコンテンツ104に対するパイプライン化リクエスト103を行う。例示的な態様では、移動デバイス102は、オブジェクト106〜110を受信するのに、したがって、ハイパーテキストコンテンツ104をレンダリングするのに必要とされるラウンドトリップタイム(RTT)を悪化させるエアリンク116を通して、アクセスを得る。1つの態様では、ワイヤレスワイドエリアネットワーク(WWAN)120の一部として役割を果たすノード(例えば、マクロセル、フェムトセル、リレー)119と通信する無線トランシーバ118を、移動デバイス102は有しており、このノード119は、コアネットワーク(CN)(例えば、インターネット)124においてホスト管理されているサーバ112〜114へのインターネットプロトコルマルチメディアサブシステム(IMS)122に向かうものである。
【0021】
代替的に、または、加えて、移動デバイス102は、ノード128と通信するトランシーバ126を有しており、ノード128は、CN124を介してサーバ112〜114にアクセスするためのワイヤレスローカルアクセスネットワーク(WLAN)130を担当する。
【0022】
代替的に、または、加えて、移動デバイス102は、ノード134と通信するトランシーバ132を有しており、ノード134は、パーソナルアクセスネットワーク(PAN)136を担当し、CN124を介してサーバ112〜114に到達するために、138において示されているようなWWAN120か、または、140において示されているようなWLAN130のいずれかに結合されている。
【0023】
1つの態様では、トランシーバ118、126、132は、パケットデータ通信のための多数のパラレルな接続を確立する。トランシーバ118、126、132は、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する。
【0024】
移動デバイス102のコンピューティングシステム124は、HTTP最適化コンポーネント144を有しており、HTTP最適化コンポーネント144は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる。
【0025】
図2(図2Aおよび図2B)では、例示的な方法200または動作のシーケンスが、HTTP最適化、マルチホーミング、移動性、および、優先度に対して示されている。ブロック204は、パケットデータ通信のための多数のパラレルな接続を確立することを示している。特定の態様では、多数のパラレルな接続を確立することは、複数のサーバのうちのそれぞれに対する接続の数を最小化すること(ブロック206)により達成される。リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、多数のパラレルな接続が使用される(ブロック208)。
【0026】
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストが送信される(ブロック210)。
【0027】
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続を介して追加のパイプライン化リクエストを送信するために、パラレルな接続の数を動的に変化させる(ブロック212)。例えば、フルなリンク利用は、グリーディ(greedy)リソース利用を、または、ジャストインタイム(JiT)リソース利用を必要とすることがある。
【0028】
例示的な態様では、帯域幅とラウンドトリップタイムを推定すること(ブロック214)により、この動的な変化が達成される。リクエストされたが受信されていないパケットデータが、推定された帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、パイプライン化リクエストの送信を継続する(ブロック216)。
【0029】
例示的な態様では、特に、HTTP取り出しを促進するネットワークによりサポートされている場合に、1つ以上のさらなる最適化が含まれる。
【0030】
例えば、パケットデータ部分をレンダリングするためのプログレッシブな順序付けが決定され、複数のパイプライン化リクエストの順序は、プログレッシブな順序付けに関連して、優先順位が付けられる(ブロック218)。取り出しの間に変更が生じた場合には(ブロック220)、プログレッシブな順序付けの優先順位が付け直され、プロセスが更新される(ブロック222)。
【0031】
別の例に対して、複数のパイプライン化リクエストは、ヘッダ圧縮によりリクエストされる(ブロック224)。
【0032】
追加の例に対して、ネットワークは、移動デバイスによりどのような追加リソースが要求されることがあるかを識別(予想)できる。このようなケースでは、リクエストしなかった、サーバにより識別されたリソースを受信することがある(ブロック226)。必要でない場合には、サーバ識別リソースをキャンセルすることによるレスポンスによって、無線リソースの不必要な消費を避けることができる(ブロック228)。
【0033】
さらなる例に対して、ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストとして、複数のパイプライン化されたリクエストを送信することができる(ブロック230)。
【0034】
さらに別の例に対して、接続ラウンドロビンにより、マルチホームのホストに対してリンクを集約すること(ブロック232)によって、複数のパイプライン化リクエストを送信することができる。インターフェースが利用可能でなくなったこと、または、利用可能になったことを検出し(ブロック234)、インターフェースを使用しているオープンな接続を識別し(ブロック236)、オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築することにより(ブロック238)、ならびに、識別したオープンな接続と、インターフェースと、未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを、動的に変化させることにより(ブロック240)、このマルチホーミング能力の観点での移動性に対処することができる。
【0035】
例示的な態様において、移動デバイスは、各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持することができ、ネットワークプロキシと、静的に定義されたルートと、オペレーティングシステムおよびウェブブラウザのサポートがない場合には、プロキシ自動設定(PAC)スクリプトとを使用することができる。
【0036】
図3は、グラフィカルプロット300において、nytimes.comに対してパラレルな接続およびパイプライン化が使用可能であるFirefox(登録商標)ウェブブラウザを使用して、より長いRTTがページロード時間(秒単位)に与える影響を示している。テストしたページは、合計で約1.3MBのデータである、おおよそ100個のオブジェクトからなる。テストは、1.5Mビット/秒の固定帯域幅のリンクを通して実行され、より高いRTTリンクをシミュレートするために、異なる量の追加遅延で繰り返された。フルなリンク利用では、ページをダウンロードするのにおよそ7秒かかるはずであり、実際のところ、これは、ワイヤードネットワーク上で観測されることがあるような、非常に低いラウンドトリップタイムにより達成されるものである。しかしながら、明らかに、リンク利用は、RTTが増加するにつれて、RTTに反比例して急激に落ち込む。
【0037】
この実験が明示しているのは、RTTが、ワイヤードネットワーク上で典型的に見られるよりも大きい場合には、最先端のウェブブラウザでさえ、適度の帯域幅のリンクをフルに利用することができないということである。さらに、(7秒から21秒への、ページロード時間における200%の増加が非常に顕著であるのに対し、100msから300msへの200%の増加は、そうでないことがあるという点で、)結果として生じる増加したページロード時間は、十分に、ユーザ経験が影響を受ける範囲内にある。
【0038】
ここで使用されるようなリンク利用は、ネットワークが与えるように準備しているすべてのリソースを利用する、クライアントの能力のことを指す。EV−DOまたはHSPAのシナリオでは、1人のユーザがこの意味でリンクを“十分に利用していない”ときに、使用されていない容量は、他のユーザに与えられるので、全体として無線リソースを十分に利用していないことはない。しかしながら、この意味での乏しいリンク利用は、より長いページロード時間において観測されるような、乏しいユーザ経験を、結果として生じさせる。
【0039】
具体的な例として、10人のユーザが、それぞれ、1MBファイルをリクエストし(必ずしもすべてが同時でなくてもよい)、ネットワークが、8Mビット/秒の共有容量を有している場合に、データをユーザのすべてに配信するのに10秒かかるだろう。平均待ち時間の観点から、データを“シーケンシャルに”供し、各ユーザに対して1秒かけるほうが、各ユーザに対してパラレルに10秒もかけてすべてのユーザに配信するよりも、より望ましい。
【0040】
オブジェクト配信を最適化するために、HTTPにおいて利用可能なさまざまな技術を使用することができる。
【0041】
継続的接続:HTTP1.0規格は、各HTTPリクエストに対して、新しい伝送制御プロトコル(TCP)接続が確立されることを要求した。各TCP接続の確立は、SYN/ACK(同期化/肯定応答)交換と、TCP輻輳制御のスロースタートフェーズに起因するスロー送信の期間とを暗示するので、この要件は、オブジェクト配信時間の観点から高い代償を必要とした。
【0042】
HTTP1.1は、複数のリクエストが同じサーバに発行されるケースをより良くサポートするために、継続的接続を導入した。このケースでは、以前のレスポンスの受信が完了した後に、同じ接続上で新しいHTTPリクエストを送ることにより、TCP接続を再使用する。このアプローチでは、リクエストの送信と、レスポンスの最初のパケットの受信との間の時間(1つのラウンドトリップタイム)の間、ダウンリンクはアイドルである。
【0043】
単一の継続的接続に対するリンク使用パターン400を、図4から理解することができる。図4では、アップリンクリクエスト402とダウンリンクレスポンス404との間のギャップが、リンクが十分に利用されていないことを(ギャップの形で)示しており、RTTがより高い場合に、この十分に利用されていないことが、いっそう悪いという事実を示している。
【0044】
RTTに対処しない、リンク帯域幅の単なる増加は、それ自体では、リンク利用の観点から性能を改善しないことを、本開示の利益により正しく認識すべきである。さらに図4を参照すると、帯域幅の増加は、時間の関数として、各アップリンクブロックおよびダウンリンクブロックをより狭くさせる(すなわち、より少ない時間で同じデータが転送される)だろうが、ギャップのサイズを減少させないだろう。実際、ギャップは、総ダウンロード時間のより大きな部分を表し、したがって、このケースでは、帯域幅の増加は、リンク利用を減少させる。
【0045】
パラレルな接続:現代のブラウザは、同じサーバまたは異なるサーバ(またはその双方)のいずれに対しても、パラレルな複数のTCP接続を開いている。この技術の効果は、2つある:第1に、複数のアクティブに送信しているTCP接続を集約するという輻輳制御の振る舞いは、スロースタートの間の輻輳ウィンドウのより速い開きと、各パケットドロップに対するより減少した輻輳レスポンス以外では、単一のTCP接続と同等のものとして見なされることがある。第2に、(継続的接続に対して先に示したように)1つの接続上の送信が断続的であるケースでは、送信の間のアイドル期間が、他の接続によって使用されてもよく、これによりリンク利用を改善する。
【0046】
パイプライン化:実際、HTTP1.1は、第1のリクエストに対するレスポンスの完了を待つことなく、複数のリクエストを送ることを可能にする。これは、レスポンスの間にリンクがアイドルになることなく、サーバが続けざまにレスポンスを送ることを可能にする。HTTPは、リクエストとレスポンスを整合させるための他のメカニズムを何ら提供しないので、レスポンスは、リクエストを受信したのと同じ順序で送らなければならない。
【0047】
図5では、第1および第2のアップリンクリクエスト502、503と、ダウンリンクレスポンス504とによる、継続的接続のためのリンク使用パターン500に対して、パイプライン化の効果が示されている。
【0048】
現代のウェブブラウザはすべて、先の最初の2つの技術を実質的に利用している。しかしながら、HTTP1.1規格中で定義されているが、パイプライン化のサポートは、かなりの間、サーバおよびプロキシにおいて普遍的でなかったし、特に、透過型プロキシのケースでは、固有の失敗モードの何らかの証拠がある。結果として、例えば、失敗モードを検出して、非パイプライン化動作にグレースフルにフォールバックするように注意したり、この技術が成功しているサーバのホワイトリストを維持する等、パイプライン化の実現において何らかの注意が必要である。Opera(登録商標)ブラウザは、デフォルトによりパイプライン化をイネーブルさせる(そして、明らかに、このような技術を実現する)。Firefoxでは、パイプライン化はサポートされているが、デフォルトによりディセーブルされている。Safari(登録商標)およびChrome(登録商標)は、(現在)パイプライン化をサポートしていない。
【0049】
ブラウザにおいてパイプライン化に対する幅広いサポートがない理由は、図3と、先に参照した問題とから明らかである:継続的でパラレルな接続のみを使用する低RTT接続上では、リンクのブラウザ利用は非常に高い。コンテンツ配信ネットワークは、近年、典型的なウェブRTTを積極的に押し下げ、改善されたブラウジング性能を結果として生じさせ(これは、CDNの主要な価値命題である)、結果として、ワイヤードおよびワイヤレスのローカルアクセスネットワーク(WLAN)ウェブブラウジングの大多数に対して、認識されている問題はほとんどない。
【0050】
パイプライン化がサポートされている場合に、レスポンス間にギャップがないはずなので、リンク利用は、単一の接続では100%であるはずだと、ある人は期待するかもしれない。しかしながら、いくつかのケースでは、パイプライン化された形でのリクエストをサーバが受け入れることがある一方で、以前のリクエストが完了するまでサーバが各リクエストを処理しないことがある。これは、サーバ処理のためにかかる時間に等しい、レスポンス間のギャップにつながる。サーバの負荷が非常に大きい場合に、レスポンスを発生させるために、サーバが、スクリプト実行のような、複雑な機能を実行しなければならない場合に、および/または、サーバが、外部サーバ(例えば、データベース)を参照しなければならない場合に、この時間はかなりのものであるかもしれない。
【0051】
到来側では、パイプライン化されたリクエストを受け入れるが、送出側では、シリアルなリクエストを発行する中間プロキシがある場合に、同じ効果が観測されることがある。パイプライン化されたリクエストをサーバがパラレルに処理する場合でさえ、所定のレスポンスを送る時間が来たときに、この処理の結果が利用可能でないことがある。
【0052】
最初の実験:先のデータは、ワイヤレスワイドエリアネットワーク(WWAN)のような、高RTTリンク上で、ウェブブラウジング性能において改善の余地があると、我々に信じさせる。さらなる証拠は、クライアントと中間プロキシとの間にパイプライン化を適用することと、さらに、順序通りでなく(すなわち、クライアントおよびプロキシによりサポートされている新しいHTTP拡張機能を通して)レスポンスを返す可能性を導入することとによってもたらされる。このアプローチにおいて、リンク利用が改善される。その理由は、クライアントとプロキシとの間の低RTTにより、単一のTCP接続が、WWANリンクをフルに利用することが可能になり、プロキシは、送出側でパラレルなリクエストを発行するように設計されているからである。要求されるリソースの早期の識別もまた、組み込むことができる。
【0053】
ターゲットHTTPサーバにより直接サポートされている(そして、これらのサーバがリクエストをパラレルに処理すると仮定する)場合に、順序通りでないレスポンスに対するHTTP拡張機能が、利益を提供することがあることに留意すべきである。Google(登録商標)SPDYに対して以下で説明する範囲を除いて、実験はこのアプローチを追求していないと信じられている。
【0054】
本イノベーションを推進するために行われた実験は、プロキシの配備が要求されないケース(すなわち、クライアント側のみの技術)に対処する。明確さのために、ネットワーキングを除くすべてのボトルネックが取り除かれている“理想的なブラウザ”に、最初の焦点を当てる。特に、“理想的なブラウザ”は、ページをレンダリングするのに要求されるリクエストの完全な組のアプリオリな知識を有し、受信するとすぐにコンテンツをレンダリングする。
【0055】
それゆえ、ページロード時間に対する唯一の寄与は、HTTPプロトコルを使用して、ネットワークを通してデータを転送するのに要求される時間である。“理想的なブラウザ”は、パイソンスクリプトとして実現され、パイソンスクリプトには、(実際のウェブページのダウンロードのトレースから取られた)オブジェクトのリストが事前に供給され、パイソンスクリプトは、HTTP継続的接続と、パラレルな接続と、パイプライン化とを使用して、オブジェクトをダウンロードするアルゴリズムを実現する。すべてのオブジェクトをダウンロードするのにかかる時間を測定する。
【0056】
パラレルな接続と、パイプライン化と、ネットワーク帯域幅およびRTTとの間の相互作用をより良く理解するために、1〜10個の間のパラレルな接続と、そのそれぞれにおける1〜10個の間の未処理のリクエストとにより、実験を行った。(1個の未処理のリクエストは、標準的な非パイプライン化アプローチに対応し、‘n’個の未処理のリクエストは、最初に‘n’個のリクエストが送られ、その後、レスポンスが完全に受信されるたびに、新しいリクエストが送られることを意味する。)
異なるネットワーク帯域幅およびRTTに対する結果が、表1〜6において示されている。特に、実際のウェブサーバトレースにおける複数の接続およびパイプライン化の異なるコンフィギュレーションの性能が、理想化されている。ウェブリクエストトレースは、Wireshark(登録商標)を使用して、人気のあるウェブサイトから収集される。その後、リクエストトレースファイルを発生させるために、ダンプファイルが処理される。最初の実験に対して、すべてのリクエストが予め知られており、順序通りに実行されると仮定する。オブジェクトは、プライマリサーバからのみ、すなわち、ウェブサイトを構成するオブジェクトの不均衡な配分が問題になっているサーバからのみ、リクエストされる。プライマリサーバ現象は、人気のあるウェブサイトに対しても特徴付けられる。
【0057】
以下の表1は、複数の接続およびパイプライン化の各コンフィギュレーションに対して観測された平均ダウンロード時間を示している。
【表1】
【0058】
以下の表2〜7は、複数の接続およびパイプライン化の各コンフィギュレーションに対して観測された平均ダウンロード時間を示している。
【表2】
【表3】
【表4】
【表5】
【表6】
【0059】
これらの実験では、実験を行っている間に、バックグランドで何かがダウンロードされる。
【表7】
【0060】
要約すると、図6は、1.5Mビット/秒の固定帯域幅での異なるRTTに対して、また、(双方とも1.5Mビット/秒よりも高い帯域幅を持った)3G接続およびバックグランドトラフィックを持つ3G接続を通しての異なるRTTに対して、達成された、最良のページダウンロード時間を提示している。各ケースに対する注釈は、最良の結果が達成された、パラレルな接続の数およびパイプライン化の量を示す。
【0061】
明確さのために、これらの実験は、単一のサーバ上に存在するページオブジェクトのうちの90%に制限されていたが、本イノベーションの態様は、複数のサーバの結果に拡張できることに留意されたい。
【0062】
原則として、ダウンロード時間は、図3におけるのと同じくらいRTTに敏感である必要はまったくないことを、図6からの本開示の利益により正しく認識すべきである。
【0063】
HTTP最適化、マルチホーミング、移動性、および、優先度
本イノベーションは、例えば、部分的にダウンロードされたイメージがもはや目に見えないように、ウェブページがスクロールされたときに、HTTPスタックにおけるリクエストおよび接続の最適な構築ならびにスケジューリングの問題に対処し、ページロード時間を改善させ、オブジェクトの優先度における変更に対してより良い応答性も提供する。
【0064】
本イノベーションは、HTTPに対する、アプリケーションレイヤにおけるマルチホーミングおよび移動性に対するソリューションも考える。マルチホーミングは、特に、インターフェースの利用可能な帯域幅が、同程度の大きさである(これは、WLANがバックホール制限されているために、そうであることが多い)ケースにおいて、ダウンロード時間を改善する、例えば、WWANおよびWLANのインターフェースのような、複数のインターフェースの同時使用を提供する。移動性は、デバイスが動くにつれて、接続の切り替えを提供する。組み合わせて、これらは、よりスムーズな移動性を提供する。サーバまたはネットワークのサポートをそれぞれ要求する、マルチパス伝送制御プロトコル(MPTCP)またはモバイルIPのような、トランスポートレイヤあるいはネットワークレイヤのソリューションとは対照的に、サーバまたはネットワークのサポートなしに、このように移動性を提供することができる。
【0065】
優先度における変更に対する応答性を改善するためと、マルチホーミングおよび移動性のサポートを改善するために、複数の部分的なリクエストの使用とともに、マルチホーミングおよび移動性のサポートに対してここで説明する技術は、新規であると信じられている。各インターフェースに対して別々のドメインネームサービス(DNS)キャッシュを維持する技術もまた、新規であると信じられている。
【0066】
最後に、オペレーティングシステムおよびウェブブラウザのサポートはないが、ネットワークプロキシと、静的に定義されたルートと、プロキシ自動設定(PAC)スクリプトとを使用する、ここで説明した技術のうちのいくつかを実現するための新規の技術も、我々は説明する。
【0067】
一般的な問題を、次のように説明することができる。
【0068】
1組の統一資源ロケータ(URL)の形での1組の要求されるリソースによって、アプリケーション(例えば、ウェブブラウザ)により、HTTPスタックが提供される。これらは、1度に提供されてもよく、または、時間の期間にわたって提供されてもよい。HTTPスタックは、これらのリソースに対するリクエストをいつどのように発行するかという観点からなされるいくつかの決定を有している。特に、次のようなものがある。
【0069】
複数のリソースが同じサーバにおいて利用可能である場合に、これらのリクエストを単一のTCP接続上でパイプライン化してもよい。
【0070】
これが行われる場合には、リクエストの順序が決定される必要がある。
【0071】
パイプライン化に対するサポートは、普遍的でも一貫したものでもないので、未処理のリクエストの数を制限するか、あるいは、パイプライン化に対するサーバサポートをどうにかして検出することが望ましいことがある。
【0072】
サーバは、リクエストの順序付けおよび未処理のリクエストの数に対して異なる基準があるケースでは、順序通りでないレスポンスに対するQC HTTP拡張機能をサポートしてもよい。
【0073】
どの時点においても開かれているべきであるパラレルなTCP接続の数に限度があることがあり、これは、異なるサーバへの接続の確立に対する順序を選ぶ必要性を結果として生じさせる。
【0074】
それゆえ、基本的な問題は、リンク利用が最大化されるこのような方法で、TCP接続とこれらの接続上でのHTTPリクエストの双方をスケジュールすることである。これを問題1と呼ぶ。
【0075】
ここでは、あるサーバにおいて利用可能なリソースの観点から、問題を説明することに留意されたい。これらのサーバは、コンテンツをホスト管理するオリジナルのウェブサーバ(オリジンサーバ)、または、クライアントとオリジナルサーバとの間のパス上の(透過型でない)プロキシサーバであってもよい。プロキシサーバは、(CDNプロキシのケースでは)特定のリソースに特有であってもよく、または、(構成または学習されているローカルプロキシのケースでは)任意のリソースに対して適用可能であってもよい。ここで説明する問題およびアルゴリズムは、リソースを取り出すためにクライアントがアクセスする“サーバ”の種類に関係ない:我々は、何らかのオプション的なサーバ能力が、何らかの種類のサーバ上に存在することがあると仮定する。
【0076】
この問題に対する多数の拡張を、次のように実現することができる。
【0077】
要求されるリソースに関して何らかの種類の優先度順序付けがあることは、一般的である。例えば、ウェブサーバに対して、画像、広告、および、ビデオの前に、かつ、トラッカーまたは他の補助的な機能を呼び出す前に、レイアウト、スタイル、スクリプト、および、テキストのリソースを受信することが一般的に望ましい。これにより、すべてのリソースをダウンロードする前に、ページのレンダリングを開始することが可能になる。そのため、拡張される問題は、問題1に、リソースに関する優先度順序付けという追加の情報と、その順序でのまたはその順序に近いリソース配信という追加の目標とをプラスしたものである。これを問題2と呼ぶ。
【0078】
別の可能性は、すべてのリソースが完全に受信される前に、リソースの優先度順序付けが変更されるかもしれないということである(ダウンロードプロセスの間に、要求されているリストに新しいリソースを追加できる可能性を、問題1が含んでいたことも思い出してほしい)。例えば、ウェブページが完全にダウンロードされる前にユーザがウェブページをスクロールした場合に、これが生じ、そのため、リソースの順序付けは、目に見えるリソースを優先させるように変更する。このケースでは、追加の目標は、この変更または優先度を尊重し、利用可能なリソースが、確実に、変更後の最高の優先度のリソースに依然として専用であることである。これを問題3と呼ぶ。
【0079】
別のケースは、クライアントが、複数のインターフェースに対するアクセスを有し、それゆえ、リソースをホスト管理するサーバへの複数のパスを有するというものである。ここでは、CDNの一般的な動作−既存のシステムではサポートされていないと信じられている何かに起因して、ドメインネームのDNS解決がインターフェースごとに変化すると考えることが重要であるべきである。このケースでは、複数のインターフェースのすべてにおいて利用可能な帯域幅を利用するという追加の目的により、問題が拡張される。これを問題4と呼ぶ。
【0080】
最後に、1組の利用可能なインターフェースが変更する可能性もある。このケースでは、利用可能な帯域幅は、最高の優先度のリソースに専用であるべきであるという原則を維持して、最小のデータ損失により、変更を効率的に取り扱う必要がある。これを問題5と呼ぶ。
【0081】
要約すると、問題1は、1組のURLに対するパイプライン化およびリクエストのスケジューリングの最適な使用に関係する。目的は、帯域幅使用を最適化し、それにより、ページダウンロード時間を減少させることである。
【0082】
問題2は、URLに対する優先度順序付けと、その優先度を尊重するという目標とを追加する。目的は、ウェブページのプログレッシブなレンダリングを可能にし、それにより、知覚されているページのダウンロードスピードを改善することである。
【0083】
問題3は、優先度の変更を可能にする。目的は、高い優先度のオブジェクトに、帯域幅を確実にすばやく再割り当てし、それにより、ユーザの注目の変更(リンクのクリック、タブの変更、スクロール等)に対する応答性を改善することである。
【0084】
問題4は、複数のインターフェースの効率的な使用を考慮に入れ、それにより、マルチホームのホストに対するリンクアグリゲーションを通して、ページダウンロード時間を改善することを目的としている。
【0085】
問題5は、利用可能なインターフェースにおける変更を考慮に入れ、それにより、移動性をサポートすることを目的としている。
【0086】
HTTPプロトコルに基づくこれらの問題に対するソリューションは、ここでは、トランスポートレイヤの代わりに、HTTPアプリケーションレイヤに焦点を当てている。
【0087】
既存のソリューション:既存のウェブブラウザは、問題1と、ある程度は、問題2とを解決しようと試みている。しかしながら、現在の構成は、いくつかの欠陥を有している。第1に、要求されるリソース(URL)は、ページがダウンロードされるにつれて、プログレッシブに識別され、これは、クライアントにより既に知られている将来要求されるリソースについての情報を考慮することなく、接続の開閉について決定がなされることを意味する。
【0088】
第2に、既存のブラウザは、一般的に、パラレルな接続の数において任意の制限を有している。大多数のパラレルな接続が利点を提供することは期待されない。一般的な経験則は、6個のパラレルな接続を上回る収穫逓減があるように思われる。しかしながら、WWANネットワークは、大きなネットワーク側ダウンリンクバッファにより構成されていることが多いことに留意すべきである。これは、リンクがフルに利用されているときに、高いRTTに寄与することがある。それゆえ、パラレルな接続に対するTCP Slow Startは、別の接続が既にリンクを利用している場合には、極めてスローであるかもしれない。
【0089】
第3に、既存のブラウザは、パイプライン化を常に善用しているわけではない。これは、パイプライン化が、HTTPプロキシにおいて一貫してサポートされていないためである。また、プロキシによるパイプライン化の使用は、送られることになる次のオブジェクトが、プロキシにおいてまだ利用可能でないために、TCP接続がアイドルになる“ブロッキング”問題を引き起こすことがある。同じ接続上でリクエストされている別のオブジェクトが、プロキシにおいて利用可能である場合には、その代わりに、“順序通りでないレスポンス”としてそれを送ることが望ましいだろう。
【0090】
Googleにおいて最近発表されたSPDYプロジェクト(http://dev.chromium.org/spdy)は、TCPとHTTPの間に薄い多重化レイヤを挿入することにより、問題1および問題2を解決することを目的としている。これにより、単一のTCP接続を通して、割り当てられた優先度で、複数のHTTPトランザクションをパラレルに行うことが可能になる。作成者は、問題3を将来的な作業として識別している。SPDYプロジェクトは、HTTPヘッダ圧縮も、重要なコンポーネントとして識別している。WWANを特に述べていないが、HTTPリクエストの圧縮は、特に、WWANネットワークに対して価値があることがある。
【0091】
本開示は、標準的なHTTP1.1に基づく問題1〜5にプログレッシブに対処する例示的なアプローチを解析する。加えて、性能をさらに改善することができる、何らかの、最小の、最適なサーバ拡張を説明する。
【0092】
問題1:基本接続およびリクエストのスケジューリング:本セクションの基本的な考えは、リソースの識別と、TCP接続の確立と、実際のリクエストのスケジューリングとを別々に扱うことである。第1に、要求されるリソースは識別されており、したがって、接触が必要なサーバの完全な組は知られているという仮定がなされる。第2に、TCP接続がこれらのサーバに対して確立されるが、一度にすべてである必要はなく、サーバ当たり1つの接続である必要もない。第3に、リクエストは、確立されている接続にマッピングされる。
【0093】
接続を開くことを決定すべき2つの原則がある。
【0094】
第1に、各サーバに対する接続の数を最小化し、その結果、パイプライン化を利用する。これは、新しい接続が確立される(SYN/ACKおよびスロースタート)たびに、高い代償が払われるためである。他のアクティブな接続が、大幅なキューイング遅延と、したがって、大きなRTTとがあることを意味する場合に、これは、特に当てはまる。
【0095】
第2に、パケットが損失したまたは遅れたときに、全体的な輻輳レスポンスを減少させるために、複数のパラレルな接続を利用する。‘n’個のTCP接続がある場合に、単一の損失に対するレスポンスは、組み合わされた輻輳ウィンドウを1/2nだけ減少させるためのものである。
【0096】
これらの2つの目的が明らかに対立していると、このトレードオフを制御するパラメータが導入される:Pmaxを、パラレルなTCP接続の最大数とし、Pminを、パラレルなTCP接続の最小数におけるターゲットとする。目的は、Pminを前提として、サーバ当たり1個の接続を確立することである。
【0097】
n個のURLの組Uが与えられると、U={U0,...,Un-1}であり、m個の一意的なサーバの組S(S={S0,...,Sm-1})をそこから識別でき、ここで、m≦nである。既存のウェブサーバに対する即座に有用な拡張は、ページに対して可能な限り多くの要求されるURLを、可能な限りすばやく識別するためのものであることに留意されたい。現在、このプロセスは、関係し合う必要がないダウンロードおよびレンダリングプロセスと関係し合っている。
【0098】
複数の完全修飾ドメインネーム(FQDN)は、同じIPアドレスにマッピングしてもよいので、サーバSjは、FQDNではなく、IPアドレスによって識別される。(単一のFQDNが複数のアドレスにマッピングする可能性を、以下でさらに説明する。)s(i)を、URL Uiに対して要求されるサーバのインデックスとし(すなわち、Uiは、Ss(i)から取得することができる)、U(j)を、サーバSjから取得することができるURLの組とする。
【0099】
接続を確立し、リクエストを接続に割り振るためのプロセスが提供されている。このプロセスでは、リクエスト機会は、新しいリクエストを発行するための機会である。これがどのように定義されるかは、リクエスト/接続の整合に事前に取り組むことと、接続がアイドルになるのを可能にすることとの間のトレードオフである。その理由は、すべてのリクエストは、新しいリクエストが発行される前に完了するからである。いくつかの例を以下に示す。
【0100】
アルゴリズム1:
【数1】
【0101】
このプロセスの動作は、リクエスト機会がどのように定義されるかに依存する。2つの両極端は、次のように定義される。
【0102】
グリーディリクエスト機会:サーバに対する接続がオープンであるときにはいつでも、これが起こる。
【0103】
レイジー(lazy)リクエスト機会:レスポンスが接続上で完全に受信されたときにはいつでも、これが起こる。
【0104】
グリーディリクエスト機会のケースでは、接続の最大数Pmaxを前提として、すべてのリクエストが即座に発行される。Pminを尊重するために、リクエストは、同じサーバへの複数の接続にわたって分配されることもある。しかしながら、いったん、すべてのリクエストが発行されると、変更を行う機会はない。1つの接続上でのリクエストは、別の接続上でのリクエストよりも、完了するのにより長い時間がかかるので、Pminの接続よりも少ないということが起こるかもしれない。
【0105】
レイジーリクエスト機会のケースでは、プロセス全体を通してPminが尊重される。しかしながら、1つのレスポンスの終了と、次のレスポンスの開始との間の時間の間、各接続はアイドルのままであり、この時間は、1つのラウンドトリップタイムにサーバレスポンス時間をプラスしたものを測定する。これは、パイプライン化をサポートしないHTTP1.1クライアントに対する標準的な振る舞いである。
【0106】
理想的には、リクエスト機会に対する定義は、2つの両極端の間のどこかにあるだろう。例えば、レスポンスを受信するための残り時間が、1つのラウンドトリップタイムにサーバ処理時間をプラスしたものであると推定されたときに、リクエスト機会が、起こることがある。しかしながら、サーバ処理時間が知られておらず、RTTのみが推定されていると、いずれにしても、この時間は、以前のレスポンスに対する総受信時間よりも長いことがある。以下の説明では、“ジャストインタイム”(Jit)リクエスト機会は、リンクがアイドルになるのを避けるのに十分な時間において、しかし、そうでなければ、可能な限り遅く、リクエストが発行される、最適化されたバージョンを意味する。
【0107】
パイプライン化のサーバサポート:プロキシサーバは、パイプライン化に対する一貫したサポートを提供しないと噂されている。(プロキシを含む)HTTP1.1サーバは、パイプライン化リクエストを処理するか、または、無視するかのいずれかである(すなわち、失敗しない)ように要求される。したがって、1つより多いリクエストが発行された場合に、最初のレスポンスを完全に受信した後に、(第2のレスポンスが後に続くか否かによって)サーバは、パイプライン化をサポートするか否かを決定することが可能であるはずである。サーバがパイプライン化をサポートしないケースでは、そのサーバからリクエストされたURLは、最初のものを除いて、そのサーバに対するui組に返されるべきであり、言及したパイプライン化サポートはない。そのサーバへの後続する接続は、最大で1つのリクエストを受信すべきである。
【0108】
順序通りでないレスポンス:標準的なサーバは、リクエストを受信した順序で、パイプライン化されたリクエストに対するレスポンスを返す。サーバが異なる順序でリクエストを返すことを可能にするHTTP拡張機能が、定義されている。特に、プロキシサーバのケースでは、オブジェクトをリクエストしたのとは異なる順序で、サーバにおいてオブジェクトが利用可能になることがあるので、これは価値がある。それゆえ、順序通りのオブジェクト配信は、ヘッドオブラインブロッキング問題を引き起こすかもしれない。しかし、この特徴を利用するためには、複数のリクエストが接続上でパイプライン化される必要がある:より多くのリクエストがキューに入れられている場合に、ヘッドオブラインブロッキングの可能性は減少するが、より多くの取り組みが行われている:結果として、この特徴が存在するときに、この特徴が存在しないときよりも、接続上でより多くのリクエストを発行することが望ましいことがある。
【0109】
順序通りでない拡張は、リクエストに追加された“トランザクションID”ヘッダフィールドからなる。順序通りでないレスポンスは、対応するリクエストのトランザクションID値をエコーとして返す。レスポンスにおけるトランザクションIDフィールドの不在は、サーバが、順序通りでないレスポンスをサポートしないことを示す。
【0110】
HTTPヘッダ圧縮:HTTPは、エンティティボディのgzip圧縮をサポートするが、リクエストのgzip圧縮はサポートしない。Google SPDYプロジェクトは、かなりの利点を提供するとして、HTTPヘッダ圧縮を識別しており、WWANネットワークに対しては、リクエスト圧縮が特に有用であることが期待されてもよい。
【0111】
ヘッダ圧縮は、下位互換性のあるHTTP拡張機能として次のように容易に定義できる。
【0112】
ヘッダ圧縮をサポートしているクライアントは、既存のContent−Encodingヘッダ(例えば、Header−Encoding:gzip)に類似する、最初のリクエスト中の新しいオプション的なヘッダにより、これを示す。
【0113】
ヘッダ圧縮をサポートしているサーバは、新しいヘッダを認識し、圧縮されたヘッダを持つレスポンスを返す。
【0114】
ヘッダ圧縮の始まりは、新しいリクエストまたはレスポンスが期待されるストリーム中に現れる標準的なgzipヘッダにより、示すことができる。
【0115】
接続上でのリクエストまたはレスポンスのシーケンスは、1つの連続的なストリームとして圧縮すべきである。(それぞれの終端の復帰改行を含む)リクエストまたはレスポンスの連結から、圧縮されていないストリームが形成される。各リクエストまたはレスポンスの終わりに、フラッシュポイント(flush point)があるにちがいないので、後続の情報を受信することなく、これをフルにデコードすることができる。
【0116】
圧縮が始まる前に送られた、圧縮されていないリクエストまたはレスポンスは、圧縮のための静的なディクショナリとして使用すべきである。
【0117】
サーバ識別リソース:Google SPDYは、これらの例において、クライアントがリクエストしていない、このリソースが要求されるだろうとサーバが気付いているリソースを、サーバがクライアントに返す可能性を識別する。クライアントがリクエストすることを望むことがあるリソースの提案を、サーバが提供する可能性もある。
【0118】
前者のオプションは、クライアントがリクエストをキャンセルする能力を要求するのに対し、後者は、その能力に対する必要性なく、同じ目的のほとんどを達成する。
【0119】
順序通りでないレスポンスがサポートされている場合に、提案したアプローチのシンプルな構成は、特別なトランザクションIDとリクエストURLを持つ、サーバ識別リソースに対するレスポンスヘッダを、サーバが送ることである。これは、クライアントが、そのキャッシュを調べて、オブジェクトをリクエストするか否かを決定することができるように、キャッシュ関連情報(データ、Eタグ、キャッシュ制御ディレクティブ)を含めることを可能にする。
【0120】
リクエストのキャンセル:先に説明した順序通りでない拡張がサポートされている場合には、トランザクションIDを持つリクエストを参照することにより、リクエストをキャンセルするための新しい方法を、自明に追加することができる。これは、より多くのリクエストをパイプライン中でキューアップすることを可能にする(そして、ヘッドオブラインブロッキングの可能性を減少させる)のに、有用であってもよい一方で、必要な場合に、この取り組みを逆にすることもできる。
【0121】
問題2:リクエストの優先順位付け:問題2は、URLの組、Uが、優先度順序を有する追加の可能性を導入する。一般性を損なうことなく、リストU0,...,Un-1は、最高の優先度が1番目である優先度順序であると仮定する。また、追加されるのは、より高い優先度のオブジェクトが、より低い優先度のオブジェクトの前に配信されるという目的である。
【0122】
この新しい目的は、利用可能な帯域幅使用を最大化するという本来の目的に次ぐものであることに留意されたい:すなわち、帯域幅使用を最大化するためにこれが必要である場合には、優先度順序通りでなくオブジェクトを配信することを許容できる(そうでなければ、厳密な優先度順序でリクエストを発行し、各リクエストの後で、別のリクエストが発行される前にそれが完了するのを待つことにより、要件が満たされるだろう)。
【0123】
優先順位付けをサポートするために、アルゴリズム1を次のように修正する:
アルゴリズム2
1)Uにおける順序付けは、そのサーバ上で利用可能な最高優先度のリソースの順序にサーバを置くことにより、Sにおける順序付けを誘発する。その後、各組uiも、明白な方法で順序付けされる
2)ステップ2(a)、2(b)、および、4(c)(i)において、選ばれたiの値が、このような最小値であること以外は、アルゴリズム1にしたがう。
【0124】
問題3:優先度における変更:Google SPDYプロトコルは、TCPとHTTPとの間に薄い多重化レイヤを提供し、これを使用して、複数のリクエスト/レスポンストランザクションを同じ接続上で多重化することにより、この要件に対処することを目的としている。既存の技術との相違は、次のように理解することができる。
【0125】
パイプライン化は、複数のリクエスト/レスポンストランザクションが、TCP接続を共有することを可能にするが、レスポンスが、シーケンシャルにおよび順序通りに返されることを要求する。
【0126】
順序通りでないレスポンスによるパイプライン化(ワンショットウェブ)は、レスポンスが、異なる順序で返されることを可能にするが、レスポンスは、依然としてシーケンシャルである(各レスポンスは、次が開始する前に完了しなければならない)。
【0127】
パラレルなTCP接続は、レスポンスが、パラレルに送られる(IPレイヤにおいて多重化される)ことを可能にするが、トランザクションは、独立して進む:1つのものの、他のものに対する優先順位付けを調整することはできない。
【0128】
このため、SPDYプロトコルは、レスポンスのシーケンシャルな完了に対する要件なしに、パイプライン化の利益を得ることを目的している。
【0129】
第1に、アルゴリズム2において、レイジーリクエスト機会またはジャストインタイムリクエスト機会が使用される場合に、各ui組内のリクエストされていないリソースの優先度を再順序付けすることが、いかなるときにおいても常に可能であることに留意すべきである。このシンプルなアプローチは、実質的な利益を提供することができる(これをアルゴリズム2aと呼ぶ)。
【0130】
HTTPの部分的なリクエスト(すなわち、Rangeヘッダを持つHTTPリクエスト)の使用に基づいて、より細かい粒度で優先度の変更を取り扱うための、代替的なスキームをここで説明する。
【0131】
第1に、Rを、バイトでの、最大リクエストサイズとする。サイズRまたはより小さいサイズの要求されるリソースの断片に対して、リクエストが発行される。アルゴリズム2では、各URL、uiは、対(URL、Byte Range)により置換される。アプリケーションにより提供されるURLおよびByte Range[0,R−1]により、これらの対が初期化される。
【0132】
その後、アルゴリズム3を形成するために、以下の手順が追加される。
【0133】
URLに対する第1のレスポンスヘッダを受信次第、オブジェクトサイズFを取得する。その後、F>Rである場合に、同じURLとByte Range[R,2R−1],[2R,3R−1],...,[rR,F−1]とを持つ、ui中のr:=ceil(F/R)−1の追加エントリを構築する。uiにおけるエントリの順序は、先のように、URLの優先度順序付けに基づくべきであることに留意されたい。
【0134】
このスキームでは、優先度の変更が起こったときに、リクエストされたが、接続上で受信されていない未処理のデータの量は、最大Rであり、それゆえ、リソースが、より低い優先度のリソースに専用である期間が減少される。
【0135】
ジャストインタイム(JiT)リクエスト機会を効率的にサポートするために、Rは、1つのラウンドトリップタイム中で送信することができるデータの量よりも大きいはずであるものと考えられる。測定されたラウンドトリップタイムおよびデータレートにしたがって、Rが変化すべきであってもよい。
【0136】
問題4:マルチホーミングに対するサポート:マルチホームのホストは、複数の接続されたインターフェースを有し、それゆえ、インターネットへの複数のルートを有するものである。マルチホームのホストのケースにおける目的は、ダウンロードスピードを改善するために、複数のインターフェースを同時に利用することである。
【0137】
第1に、HTTPスタックが、利用可能なインターフェースの知識と、特定のインターフェースを使用するようにTCP接続に命令するための能力とを有していると仮定する。既存のホストオペレーティングシステム(OS)構成ではそうではないので、これを達成するために何らかの作業が要求される。このようなOSの改善に先立って、可能性ある代替実施形態は、別々のインターフェースを通して到達可能なHTTPプロキシサーバを提供するためと、異なるインターフェースを通して各サーバにパケットを向ける、これらのサーバに対する明示的なルートを、クライアントルーティングテーブル内で定義するためのものである。このように、プロキシサーバの選択は、使用されるだろうインターフェースを決定し、そのインターフェースに関係付けられているプロキシに接続を向けることにより、インターフェースに接続を向けることができる。
【0138】
所定のURLに対して使用されることになるプロキシを決定するJavaScript機能を、ユーザが特定することを可能にする、プロキシ自動設定スクリプトの使用により、多くの既存のウェブブラウザ構成において、プロキシサーバの選択を制御することができる。このアプローチにより、インターフェースにわたってリクエストを静的に分配することが可能になり、例えば、ある割合のリクエストは、1つのインターフェースに対するものであり、残りのものは、別のインターフェースに対するものである。
【0139】
リクエストのうちの1/Nをproxy_aに向け、残りのものをproxy_bに向ける適切なスクリプトが、以下に示されている:
【数2】
【0140】
このスクリプトでは、URLの長さがハッシュ関数として使用される。代替的なハッシュ関数を使用することもできる。
【0141】
特定のインターフェースにTCP接続を向けるOSベースの能力が与えられるとすると、ここではアルゴリズム4と呼ばれるシンプルなマルチホーミングアプローチは、アルゴリズム2にしたがうためのものであり、ラウンドロビン方法で、利用可能なインターフェースにわたってTCP接続を分配するためのものである。
【0142】
アルゴリズム5を得るために、アルゴリズム3に対して同じ拡張を行うことができる。アルゴリズム4と比較すると、利点は、大きなオブジェクトを複数のインターフェースにわたって分けてもよいことである。その理由は、オブジェクトに対する部分的なリクエストが、接続にわたって分配されるだろうからである。
【0143】
これらのケースでは、Pminを、少なくともインターフェースの数に設定することが望ましい。
【0144】
マルチホーミングおよびDNS:CDNの通常の動作に起因して、DNS解決の結果は、ホストのインターネットへの接続のポイントに依存して、および、リクエストが最初に送られるDNSサーバに依存して、異なってもよい。我々の知る限り、既存のホストOSは、これに対処していない。
【0145】
HTTPおよびCDNの特定のケースでは、異なる解決の結果の理由は、CDNが、接続のポイントに“近い”適切なプロキシを識別するためである。各インターフェースに対して正しいプロキシを使用することが極めて望ましい。
【0146】
問題5:移動性:問題4に対するソリューション(マルチホーミング)が与えられると、移動性に対するサポートは、転送の間にインターフェースがシャットダウンするケースと、新しいインターフェースが利用可能になるケースとを取り扱うという問題に減少する。
【0147】
移動性をサポートするアルゴリズム6を得るために、アルゴリズム4が次のように拡張される。
【0148】
インターフェースが停止したときに、そのインターフェースを使用しているオープンな接続を識別し、これらの接続上で発行されている未完了のリクエストのリストを構築する。これらのリソースを適切なui組に追加して戻し、プロセスを継続する。
【0149】
インターフェースが立ち上がったときに、次回接続を確立しなければならないときに、このインターフェースを選択に対して利用可能にする。
【0150】
双方のケースにおいて、インターフェースの数に基づいてPminが設定されている場合に、Pminを修正することを考える。
【0151】
アルゴリズム7を得るために、アルゴリズム5に対して、類似する拡張を次のように行うことができる。
【0152】
インターフェースが停止したときに、そのインターフェースを使用しているオープンな接続を識別し、これらの接続上で発行されている未完了のリクエストのリストを構築する。これらのリクエストを適切なui組に追加して戻し、プロセスを継続する。Byte Range[a,b]に対する進行中の何らかのリクエストに対して、受信した最後のバイトcを識別し、Byte Range[c+1,b]に対するリクエストを、適切なui組に追加する。
【0153】
インターフェースが立ち上がったときに、次回接続を確立しなければならないときに、このインターフェースを選択に対して利用可能にする。
【0154】
双方のケースにおいて、インターフェースの数に基づいてPminが設定されている場合に、Pminを修正することを考える。
【0155】
図7、ダイヤグラム700は、前述した7個のアルゴリズムの例示的な関係を示している。本開示の利益により、リソース識別702と、接続確立704と、リクエストスケジューリング706との分離の基本概念が、アルゴリズム1 708において初めから適用され、アルゴリズム1 708は、グリーディまたはJITのリクエスト動作710を用いることができることを正しく認識すべきである。アルゴリズム1 708は、利用可能なオプション的なサーバ能力は何でも(例えば、パイプライン化712、順序通りでないレスポンス714、ヘッダ圧縮716、サーバ識別リソース718、および、HTTPキャンセル能力720)最大限利用することができるが、これらがすべて利用可能でない場合にもなお改善を提供する。
【0156】
アルゴリズム2 722は、グリーディまたはJiTのリクエスト動作726に加えて、シンプルなリクエスト優先順位付け724を追加する。アルゴリズム2 722に基づくアルゴリズム2a 728では、ジャストインタイムリクエスト機会732とともに使用するために、優先順位の付け直し730が提供されている。アルゴリズム2A 728に基づくことができるアルゴリズム4 734は、ラウンドロビンベースで、接続をインターフェースに割り振ることにより、マルチホーミング736を提供する。アルゴリズム4 734に基づくアルゴリズム6 738は、ラウンドロビンベースで、接続をインターフェースに割り振ることにより、このシンプルなモデルによってさえサポートすることができる移動性740を提供する。
【0157】
アルゴリズム3 742は、リクエストの優先順位付けの付け直し746およびJiTリクエスト動作748とともに、部分的なリクエスト744の使用によって、より細かい粒度での優先順位の付け直しを提供する。アルゴリズム5 750においてマルチホーミング752に拡張されるときにも、および、アルゴリズム7 754において移動性756に拡張されるときにも、このアプローチは利益を提供する。
【0158】
図8は、ここで説明する機能性のさまざまな態様を実現するために利用することができる別のシステム800のブロックダイヤグラムである。1つの例では、システム800は、移動端末802を含む。示されているように、移動端末802は、1つ以上のアンテナ808を介して、信号を、1つ以上の基地局804から受信することができ、1つ以上の基地局804に送信することができる。さらに、移動端末802は、アンテナ808から情報を受け取る受信機810を備えることができる。1つの例では、受信機810は、受け取った情報を復調する復調器812に動作可能に関係付けることができる。復調されたシンボルは、その後、プロセッサ814により解析することができる。プロセッサ814はメモリ816に結合することができ、メモリ816は、移動端末802に関連するデータおよび/またはプログラムコードを記憶することができる。さらに、移動端末802は、ここで説明する方法を実行するために、プロセッサ814を用いることができる。移動端末802は、アンテナ808を通して送信機820により送信するための信号を多重化することができる変調器818も備えることができる。
【0159】
移動端末802は、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを基地局804に送信する。メモリ816において、および、プロセッサ814により実行されると、HTTP最適化コンポーネント822は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる。
【0160】
図9は、ここで説明する機能性のさまざまな態様を実現するために利用することができるシステム900のブロックダイヤグラムである。1つの例では、システム900は、基地局またはノードB902を含む。示されているように、ノードB902は、信号を、1つ以上の受信(Rx)アンテナ906を介して、1つ以上のUE904から受信し、1つ以上の送信(Tx)アンテナ908を介して、1つ以上のUE904に送信することができる。さらに、ノードB902は、受信アンテナ906から情報を受け取る受信機910を備えることができる。1つの例では、受信機910は、受け取った情報を復調する復調器912に動作可能に関係付けることができる。復調されたシンボルは、その後、プロセッサ914により解析することができる。プロセッサ914はメモリ916に結合することができ、メモリ916は、コードクラスタ、アクセス端末割り当て、メモリ916に関連するルックアップテーブル、一意的なスクランブルシーケンスに関連する情報、および/または、他の適切なタイプの情報を記憶することができる。1つの例では、ノードB902は、送信アンテナ908を通して送信機920により送信するための信号を多重化することができる変調器918も備えることができる。
【0161】
メモリ916において、および、プロセッサ914により実行されると、HTTP最適化サポートコンポーネント922は、HTTP通信を最適化するために、UE904によってリクエストされることがある能力(例えば、パイプライン化、順序通りでないレスポンス、ヘッダ圧縮、サーバ識別リソース、および、HTTPキャンセル能力)を提供する。
【0162】
図10を参照すると、示されているのは、パケットデータ通信のためのシステム1000である。例えば、システム1000は、ユーザ機器(UE)内に少なくとも部分的に存在することができる。機能ブロックを含むものとして、システム1000が表され、機能ブロックは、コンピューティングプラットフォーム、プロセッサ、ソフトウェア、または、それらの組み合わせ(例えば、ファームウェア)により実現される機能を表す機能ブロックとすることができることを正しく認識すべきである。システム1000は、共に動作することができる電気コンポーネントの論理グルーピング1002を含む。例えば、論理グルーピング1002は、パケットデータ通信のための多数のパラレルな接続を確立する電気コンポーネント1004を含むことができる。さらに、論理グルーピング1002は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化リクエストを送信する電気コンポーネント1006を含むことができる。加えて、論理グルーピング1002は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる電気コンポーネント1008を含むことができる。さらに、システム1000は、電気コンポーネント1004〜1008に関係付けられている機能を実行するための命令を保持するメモリ1020を含むことができる。メモリ1020の外部にあるとして示されているが、電気コンポーネント1004〜1008のうちの1つ以上は、メモリ1020内に存在することができることを理解すべきである。
【0163】
図11において、パケットデータ通信のための装置1102が示されている。装置1102は、パケットデータ通信のための多数のパラレルな接続を確立する手段1104を備える。装置1102は、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、多数のパラレルな接続を介して、複数のパイプライン化リクエストを送信する手段1106を備える。装置1102は、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、パラレルな接続を介するパイプライン化リクエストの数とを動的に変化させる手段1108を備える。
【0164】
ここで開示した態様に関連して説明した、さまざまな例示的な論理ブロック、モジュール、回路およびアルゴリズムステップを、電子ハードウェア、コンピュータソフトウェア、または、双方を組み合わせたものとして実現してもよいことを、当業者はさらに正しく認識するであろう。ハードウェアおよびソフトウェアのこの交換可能性を明確に示すために、さまざまな例示的なコンポーネント、ブロック、モジュール、回路、およびステップを、一般的にこれらの機能性に関して上述した。このような機能性がハードウェアまたはソフトウェアとして実現されるか否かは、特定の応用、および、システム全体に課せられた設計の制約に依存する。当業者は、それぞれの特定の応用に対して方法を変化させて、説明した機能性を実現してもよいが、このようなインプリメンテーション決定は、本開示の範囲からの逸脱を生じさせるものとして解釈すべきではない。
【0165】
本明細書で使用するような、用語“コンポーネント”、“モジュール”、“システム”、および、これらに類するものは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または、実行中のソフトウェアのいずれかである、コンピュータ関連エンティティのことを指すことを意図している。例えば、コンポーネントは、これらに限定されないが、プロセッサ上で動作しているプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、および/または、コンピュータであってもよい。例として、サーバ上で動作しているアプリケーションとサーバの双方をコンポーネントとすることができる。1つ以上のコンポーネントが、プロセスおよび/または実行のスレッド内に存在することがあり、コンポーネントは、1つのコンピュータ上に局所化されていてもよく、および/または、2つ以上のコンピュータ間に分散されていてもよい。
【0166】
ここでは、例として、事例として、あるいは例示として機能することを意味するように、“例示的な”という単語を使用する。“例示的な”ものとして、ここで説明したいずれの態様または設計は、他の態様または設計と比較して、必ずしも好ましいものとして、または、利益のあるものとして、解釈すべきではない。
【0167】
多数のコンポーネント、モジュール、および、これらに類するものを含んでもよいシステムの観点から、さまざまな態様が提示されるだろう。さまざまなシステムが、追加のコンポーネント、モジュール等を含んでもよいこと、および/または、図面に関連して論じたコンポーネント、モジュール等のすべてを含まなくてもよいことを理解し、正しく認識すべきである。これらのアプローチの組み合わせもまた使用してもよい。ここで開示したさまざまな態様は、タッチスクリーンディスプレイ技術を、ならびに/あるいは、マウスおよびキーボードタイプのインターフェースを、利用するデバイスを含む電気デバイス上で実行することができる。このようなデバイスの例は、コンピュータ(デスクトップおよびモバイル)、スマートフォン、パーソナルデジタルアシスタント(PDA)、ならびに、ワイヤードおよびワイヤレス双方の他の電子デバイスを含む。
【0168】
加えて、ここで開示した態様に関連して説明した、さまざまな例示的な論理ブロック、モジュールおよび回路は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、あるいは、ここで説明した機能を実行するように設計されているこれらの任意の組み合わせで、実現または実行されてもよい。汎用プロセッサは、マイクロプロセッサであってもよいが、代替的に、プロセッサは、何らかの従来のプロセッサ、制御装置、マイクロ制御装置、または、状態機械であってもよい。プロセッサはまた、コンピューティングデバイスの組み合わせとして、例えば、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアを伴った1つ以上のマイクロプロセッサ、あるいは、このようなコンフィギュレーションの他の何らかのものとして実現されてもよい。
【0169】
さらに、開示した態様を実現するようにコンピュータを制御するために、標準のプログラミングおよび/またはエンジニアリング技法を使用して、ソフトウェア、ファームウェア、ハードウェア、または、これらの何らかの組み合わせを生成させることにより、方法、装置、または、製造物として、1つ以上のバージョンを実現してもよい。ここで使用するような用語“製造物”(または、代替的に、“コンピュータプログラムプロダクト”)は、何らかのコンピュータ読取可能デバイス、キャリア、または、媒体から、アクセス可能なコンピュータプログラムを含むことを意図している。例えば、コンピュータ読取可能媒体は、これらに限定されないが、磁気記憶デバイス(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ...)や、光ディスク(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)...)や、スマートカードや、フラッシュメモリデバイス(例えば、カード、スティック)を含むことがある。さらに、電子メールを送受信する際に、あるいは、インターネットまたはローカルエリアネットワーク(LAN)のようなネットワークにアクセスする際に使用するもののような、コンピュータ読取可能な電子データを伝えるために、搬送波を用いることができることを正しく認識すべきである。当然、当業者は、開示した態様の範囲から逸脱することなく、このコンフィギュレーションに対して多くの改良がなされてもよいことを認識するだろう。
【0170】
ここで開示した態様に関連して説明した方法またはアルゴリズムのステップは、直接、ハードウェアで、プロセッサにより実行されるソフトウェアモジュールで、あるいは、2つの組み合わせで、具現化してもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーブバルディスク、CD−ROM、あるいは、技術的に知られている他の何らかの形態の記憶媒体に存在していてもよい。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替実施形態では、記憶媒体は、プロセッサと一体化されてもよい。プロセッサおよび記憶媒体は、ASICに存在してもよい。ASICは、ユーザ端末に存在してもよい。代替実施形態では、プロセッサおよび記憶媒体は、ユーザ端末中のディスクリートコンポーネントとして存在してもよい。
【0171】
開示した態様の先の説明は、当業者が本開示を作り、または、使用できるように提供されている。これらの態様に対するさまざまな改良は、当業者に容易に明らかになるであろう。そして、ここで定義されている一般的な原理は、本開示の精神または範囲を逸脱することなく、他の実施形態に適用されてもよい。したがって、本開示は、ここに示した実施形態に限定されることを意図しているものではないが、ここに開示した原理および新規の特徴と矛盾しない最も広い範囲に一致させるべきである。
【0172】
先に説明した例示的なシステムを考慮して、開示した主題事項にしたがって実現されてもよい方法を、いくつかのフローダイヤグラムを参照して説明してきた。説明を簡略化する目的のために、一連のブロックとして、方法を示し、説明してきたが、いくつかのブロックは、ここで示し、説明したものとは異なる順序で、および/または、他のブロックと同時に、起こることがあるので、請求されている主題事項は、ブロックの順序によって限定されないことを理解し、正しく認識すべきである。さらに、ここで説明した方法を実現するのに、示されているブロックがすべて要求されるわけではない。さらに、ここで開示した方法は、このような方法をコンピュータに伝送および転送するのを促進するために、製造物上に記憶することができることをさらに正しく認識すべきである。ここで使用するような製造物という用語は、何らかのコンピュータ読取可能デバイス、キャリア、または、媒体からアクセス可能なコンピュータプログラムを含むように意図されている。
【0173】
ここでの参照により組み込まれていると言われた、何らかの特許、公報、または、他の開示資料は、組み込まれている資料が、本開示で述べた、既存の定義、ステートメント、または、他の開示資料と対立しない限りのみ、全体または一部として、ここに組み込まれることを正しく認識すべきである。そのようなものとして、および、必要である限り、ここで明示的に述べたような開示は、参照によりここに組み込まれている、対立するあらゆる資料に取って代わる。参照によりここに組み込まれていると言われた、何らかの資料あるいはその一部は、既存の定義、ステートメント、または、ここで述べた他の開示資料と対立するもの以外は、その組み込まれている資料と既存の開示資料との間で何ら対立が生じない限りのみ、組み込まれるだろう。
【特許請求の範囲】
【請求項1】
パケットデータ通信のための方法において、
前記方法は、
パケットデータ通信のための多数のパラレルな接続を確立することと、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信することと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させることとを含む方法。
【請求項2】
前記複数のパイプライン化されたリクエストを送信することは、ワイヤレスワイドエリアネットワークのノードにアクセスすることをさらに含む請求項1記載の方法。
【請求項3】
前記パラレルな接続の数と、前記パイプライン化されたリクエストの数とを動的に変化させることは、
帯域幅とラウンドトリップタイムとを推定することと、
リクエストされたが受信されていないパケットデータが、推定した帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、前記パイプライン化されたリクエストの送信を継続することとをさらに含む請求項1記載の方法。
【請求項4】
前記パケットデータ通信のための多数のパラレルな接続を確立することは、
前記複数のサーバのうちのそれぞれに対する接続の数を最小化することと、
リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、前記多数のパラレルな接続を使用することと、
前記接続の数を最小化するという目的と、前記全体的な輻輳を減少させるために、前記多数のパラレルな接続を使用するという目的との対立を最適化するために、前記パラレルな接続の数と前記パイプライン化されたリクエストの数とを動的に変化させることとをさらに含む請求項1記載の方法。
【請求項5】
前記パケットデータ部分をレンダリングするためのプログレッシブな順序付けを決定することと、
前記プログレッシブな順序付けに関連して、前記複数のパイプライン化されたリクエストの順序に優先順位を付けることとをさらに含む請求項1記載の方法。
【請求項6】
フルなリンク利用を維持することは、グリーディリクエスト機会を利用することをさらに含む請求項1記載の方法。
【請求項7】
フルなリンク利用を維持することは、ジャストインタイムリクエスト機会を利用することをさらに含む請求項1記載の方法。
【請求項8】
前記複数のパイプライン化されたリクエストを送信することは、ヘッダ圧縮をリクエストすることを含む請求項1記載の方法。
【請求項9】
リクエストされなかった、サーバにより識別されたリソースを受信することをさらに含む請求項1記載の方法。
【請求項10】
前記サーバ識別リソースが必要でないことを決定することと、
前記サーバ識別リソースをキャンセルすることとをさらに含む請求項9記載の方法。
【請求項11】
ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストを送信することをさらに含む、前記複数のパイプライン化されたリクエストを送信することをさらに含む請求項1記載の方法。
【請求項12】
前記複数のパイプライン化されたリクエストを送信することは、
インターフェースが利用可能でなくなったことを、または、利用可能になったことを検出することと、
前記インターフェースを使用しているオープンな接続を識別することと、
前記オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築することと、
前記識別したオープンな接続と、前記インターフェースと、前記未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、前記パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを、動的に変化させることとをさらに含む請求項1記載の方法。
【請求項13】
各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持することをさらに含む請求項1記載の方法。
【請求項14】
パケットデータ通信のための少なくとも1つのプロセッサにおいて、
前記少なくとも1つのプロセッサは、
パケットデータ通信のための多数のパラレルな接続を確立する第1のモジュールと、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する第2のモジュールと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる第3のモジュールとを具備する少なくとも1つのプロセッサ。
【請求項15】
パケットデータ通信のためのコンピュータプログラムプロダクトにおいて、
前記コンピュータプログラムプロダクトは、コードの組を記憶する一時的でないコンピュータ読取可能媒体を具備し、
前記コードの組は、
コンピュータに、パケットデータ通信のための多数のパラレルな接続を確立させるための第1の組のコードと、
前記コンピュータに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信させるための第2の組のコードと、
前記コンピュータに、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させるための第3の組のコードとを含むコンピュータプログラムプロダクト。
【請求項16】
パケットデータ通信のための装置において、
前記装置は、
パケットデータ通信のための多数のパラレルな接続を確立する手段と、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する手段と、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる手段とを具備する装置。
【請求項17】
パケットデータ通信のための装置において、
前記装置は、
パケットデータ通信のための多数のパラレルな接続を確立するトランシーバであって、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信するためのトランシーバと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させるコンピューティングプラットフォームとを具備する装置。
【請求項18】
前記トランシーバは、さらに、ワイヤレスワイドエリアネットワークのノードにアクセスすることにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項19】
前記コンピューティングプラットフォームは、さらに、
帯域幅とラウンドトリップタイムとを推定することと、
リクエストされたが受信されていないパケットデータが、推定した帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、前記パイプライン化されたリクエストの送信を継続することとにより、
前記パラレルな接続の数と、前記パイプライン化されたリクエストの数とを動的に変化させるためのものである請求項17記載の装置。
【請求項20】
前記トランシーバを介する前記コンピューティングプラットフォームは、さらに、
前記複数のサーバのうちのそれぞれに対する接続の数を最小化することと、
リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、前記多数のパラレルな接続を使用することと、
前記接続の数を最小化するという目的と、前記全体的な輻輳を減少させるために、前記多数のパラレルな接続を使用するという目的との対立を最適化するために、前記パラレルな接続の数と前記パイプライン化されたリクエストの数とを動的に変化させることとにより、
前記パケットデータ通信のための多数のパラレルな接続を確立するためのものである請求項17記載の装置。
【請求項21】
前記コンピューティングプラットフォームは、さらに、前記パケットデータ部分をレンダリングするためのプログレッシブな順序付けを決定するためと、
前記プログレッシブな順序付けに関連して、前記複数のパイプライン化されたリクエストの順序に優先順位を付けるためのものである請求項17記載の装置。
【請求項22】
前記コンピューティングプラットフォームは、さらに、グリーディリクエスト機会を利用することにより、フルなリンク利用を維持するためのものである請求項17記載の装置。
【請求項23】
前記コンピューティングプラットフォームは、さらに、ジャストインタイムリクエスト機会を利用することにより、フルなリンク利用を維持するためのものである請求項17記載の装置。
【請求項24】
前記トランシーバは、さらに、ヘッダ圧縮をリクエストすることにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項25】
前記トランシーバは、さらに、リクエストされなかった、サーバにより識別されたリソースを受信するためのものである請求項17記載の装置。
【請求項26】
前記コンピューティングプラットフォームは、さらに、
前記サーバ識別リソースが必要でないことを決定するためと、
前記サーバ識別リソースをキャンセルするためのものである請求項25記載の装置。
【請求項27】
前記トランシーバは、さらに、ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストを送信することにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項28】
前記コンピューティングプラットフォームは、さらに、
インターフェースが利用可能でなくなったことを、または、利用可能になったことを検出するためと、
前記インターフェースを使用しているオープンな接続を識別するためと、
前記オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築するためと、
前記識別したオープンな接続と、前記インターフェースと、前記未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、前記パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを、動的に変化させるためのものである請求項17記載の装置。
【請求項29】
前記コンピューティングプラットフォームは、さらに、各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持するためのものである請求項17記載の装置。
【請求項1】
パケットデータ通信のための方法において、
前記方法は、
パケットデータ通信のための多数のパラレルな接続を確立することと、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信することと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させることとを含む方法。
【請求項2】
前記複数のパイプライン化されたリクエストを送信することは、ワイヤレスワイドエリアネットワークのノードにアクセスすることをさらに含む請求項1記載の方法。
【請求項3】
前記パラレルな接続の数と、前記パイプライン化されたリクエストの数とを動的に変化させることは、
帯域幅とラウンドトリップタイムとを推定することと、
リクエストされたが受信されていないパケットデータが、推定した帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、前記パイプライン化されたリクエストの送信を継続することとをさらに含む請求項1記載の方法。
【請求項4】
前記パケットデータ通信のための多数のパラレルな接続を確立することは、
前記複数のサーバのうちのそれぞれに対する接続の数を最小化することと、
リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、前記多数のパラレルな接続を使用することと、
前記接続の数を最小化するという目的と、前記全体的な輻輳を減少させるために、前記多数のパラレルな接続を使用するという目的との対立を最適化するために、前記パラレルな接続の数と前記パイプライン化されたリクエストの数とを動的に変化させることとをさらに含む請求項1記載の方法。
【請求項5】
前記パケットデータ部分をレンダリングするためのプログレッシブな順序付けを決定することと、
前記プログレッシブな順序付けに関連して、前記複数のパイプライン化されたリクエストの順序に優先順位を付けることとをさらに含む請求項1記載の方法。
【請求項6】
フルなリンク利用を維持することは、グリーディリクエスト機会を利用することをさらに含む請求項1記載の方法。
【請求項7】
フルなリンク利用を維持することは、ジャストインタイムリクエスト機会を利用することをさらに含む請求項1記載の方法。
【請求項8】
前記複数のパイプライン化されたリクエストを送信することは、ヘッダ圧縮をリクエストすることを含む請求項1記載の方法。
【請求項9】
リクエストされなかった、サーバにより識別されたリソースを受信することをさらに含む請求項1記載の方法。
【請求項10】
前記サーバ識別リソースが必要でないことを決定することと、
前記サーバ識別リソースをキャンセルすることとをさらに含む請求項9記載の方法。
【請求項11】
ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストを送信することをさらに含む、前記複数のパイプライン化されたリクエストを送信することをさらに含む請求項1記載の方法。
【請求項12】
前記複数のパイプライン化されたリクエストを送信することは、
インターフェースが利用可能でなくなったことを、または、利用可能になったことを検出することと、
前記インターフェースを使用しているオープンな接続を識別することと、
前記オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築することと、
前記識別したオープンな接続と、前記インターフェースと、前記未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、前記パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを、動的に変化させることとをさらに含む請求項1記載の方法。
【請求項13】
各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持することをさらに含む請求項1記載の方法。
【請求項14】
パケットデータ通信のための少なくとも1つのプロセッサにおいて、
前記少なくとも1つのプロセッサは、
パケットデータ通信のための多数のパラレルな接続を確立する第1のモジュールと、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する第2のモジュールと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる第3のモジュールとを具備する少なくとも1つのプロセッサ。
【請求項15】
パケットデータ通信のためのコンピュータプログラムプロダクトにおいて、
前記コンピュータプログラムプロダクトは、コードの組を記憶する一時的でないコンピュータ読取可能媒体を具備し、
前記コードの組は、
コンピュータに、パケットデータ通信のための多数のパラレルな接続を確立させるための第1の組のコードと、
前記コンピュータに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信させるための第2の組のコードと、
前記コンピュータに、フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させるための第3の組のコードとを含むコンピュータプログラムプロダクト。
【請求項16】
パケットデータ通信のための装置において、
前記装置は、
パケットデータ通信のための多数のパラレルな接続を確立する手段と、
複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信する手段と、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させる手段とを具備する装置。
【請求項17】
パケットデータ通信のための装置において、
前記装置は、
パケットデータ通信のための多数のパラレルな接続を確立するトランシーバであって、さらに、複数のサーバ上にそれぞれ記憶されているパケットデータ部分から構成されるハイパーテキストオブジェクトを取り出すために、前記多数のパラレルな接続を介して、複数のパイプライン化されたリクエストを送信するためのトランシーバと、
フルなリンク利用を維持しながら、未処理のリクエストを減少させるために、パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを動的に変化させるコンピューティングプラットフォームとを具備する装置。
【請求項18】
前記トランシーバは、さらに、ワイヤレスワイドエリアネットワークのノードにアクセスすることにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項19】
前記コンピューティングプラットフォームは、さらに、
帯域幅とラウンドトリップタイムとを推定することと、
リクエストされたが受信されていないパケットデータが、推定した帯域幅およびラウンドトリップタイムの積を超える可能性があるまで、前記パイプライン化されたリクエストの送信を継続することとにより、
前記パラレルな接続の数と、前記パイプライン化されたリクエストの数とを動的に変化させるためのものである請求項17記載の装置。
【請求項20】
前記トランシーバを介する前記コンピューティングプラットフォームは、さらに、
前記複数のサーバのうちのそれぞれに対する接続の数を最小化することと、
リクエストされたパケットデータを遅らせるまたは損失させる全体的な輻輳レスポンスを減少させるために、前記多数のパラレルな接続を使用することと、
前記接続の数を最小化するという目的と、前記全体的な輻輳を減少させるために、前記多数のパラレルな接続を使用するという目的との対立を最適化するために、前記パラレルな接続の数と前記パイプライン化されたリクエストの数とを動的に変化させることとにより、
前記パケットデータ通信のための多数のパラレルな接続を確立するためのものである請求項17記載の装置。
【請求項21】
前記コンピューティングプラットフォームは、さらに、前記パケットデータ部分をレンダリングするためのプログレッシブな順序付けを決定するためと、
前記プログレッシブな順序付けに関連して、前記複数のパイプライン化されたリクエストの順序に優先順位を付けるためのものである請求項17記載の装置。
【請求項22】
前記コンピューティングプラットフォームは、さらに、グリーディリクエスト機会を利用することにより、フルなリンク利用を維持するためのものである請求項17記載の装置。
【請求項23】
前記コンピューティングプラットフォームは、さらに、ジャストインタイムリクエスト機会を利用することにより、フルなリンク利用を維持するためのものである請求項17記載の装置。
【請求項24】
前記トランシーバは、さらに、ヘッダ圧縮をリクエストすることにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項25】
前記トランシーバは、さらに、リクエストされなかった、サーバにより識別されたリソースを受信するためのものである請求項17記載の装置。
【請求項26】
前記コンピューティングプラットフォームは、さらに、
前記サーバ識別リソースが必要でないことを決定するためと、
前記サーバ識別リソースをキャンセルするためのものである請求項25記載の装置。
【請求項27】
前記トランシーバは、さらに、ヘッダ範囲機能を使用して、複数の部分的なパイプライン化リクエストを送信することにより、前記複数のパイプライン化されたリクエストを送信するためのものである請求項17記載の装置。
【請求項28】
前記コンピューティングプラットフォームは、さらに、
インターフェースが利用可能でなくなったことを、または、利用可能になったことを検出するためと、
前記インターフェースを使用しているオープンな接続を識別するためと、
前記オープンな接続上で発行されている未完了のパイプライン化リクエストのリストを構築するためと、
前記識別したオープンな接続と、前記インターフェースと、前記未完了のパイプライン化リクエストのリストとに部分的に基づいて、接続ラウンドロビンにより、前記パラレルな接続の数と、前記パラレルな接続を介するパイプライン化されたリクエストの数とを、動的に変化させるためのものである請求項17記載の装置。
【請求項29】
前記コンピューティングプラットフォームは、さらに、各インターフェースに対する別々のドメインネームサーバ(DNS)キャッシュを維持するためのものである請求項17記載の装置。
【図1】
【図2A】
【図2B】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2A】
【図2B】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公表番号】特表2013−515399(P2013−515399A)
【公表日】平成25年5月2日(2013.5.2)
【国際特許分類】
【出願番号】特願2012−544946(P2012−544946)
【出願日】平成22年12月20日(2010.12.20)
【国際出願番号】PCT/US2010/061360
【国際公開番号】WO2011/075738
【国際公開日】平成23年6月23日(2011.6.23)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
【公表日】平成25年5月2日(2013.5.2)
【国際特許分類】
【出願日】平成22年12月20日(2010.12.20)
【国際出願番号】PCT/US2010/061360
【国際公開番号】WO2011/075738
【国際公開日】平成23年6月23日(2011.6.23)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
[ Back to top ]