(57)【要約】【課題】TCP/IPがブロードキャスト・ネットワークまたは無線ネットワーク上で使用される場合に生じる、費用がかかってしまったりデータ・トラフィックが余りにも多く作成されてしまうなどの問題を克服すること。【解決手段】最も広いシステムまたは移動ネットワークのヘッドエンドのルータは、通過するすべてのTCP/IPパケットをキャッシュする。このルータは、クライアントで受信されていないデータ・パケットを何れも、ルータのキャッシュから周期的に再送信する。同じインターフェースを維持しながら、著しい量のバック・トラフィックを生成してしまうことなくTCP/IPを容易に実施することが、本システムによって可能となる。
2005520374.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ・パケットをサーバから受信することと、
TCP/IPパケットであるデータ・パケットをキャッシュすることと、
当該複数のデータ・パケットをクライアントに伝送すること、
当該TCP/IPパケットの受信確認応答を当該サーバに伝送することと、
を含む、データ・パケットのルーティング方法。
【請求項２】
前記方法が、
前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送すること、
をさらに含む、請求項1に記載の方法。
【請求項３】
データまたは確認応答が前記クライアントから受信されない場合、さらなるデータ・パケットが前記ルータに確実に送信されるように確認応答を送信すること、
を含む、請求項1または請求項2に記載の方法。
【請求項４】
前記クライアントからの否定的な確認応答パケットを何れも受け入れることと、
前記データ・パケットを前記データ・パケット・キャッシュから再送信することと、
を含む、前記請求項の何れかに記載の方法。
【請求項５】
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、および／または、
(ii) 行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯の場合、
に行方不明のデータ・パケットを送信すること、
を有する請求項4に記載の方法。
【請求項６】
デジタル・コンピュータの内部メモリ内に直接ロード可能なコンピュータ・プログラム製品であって、
当該製品がコンピュータ上で走るときに、請求項1〜5の何れか1つ以上のステップを行うためのソフトウエア・コード部、
を有する、コンピュータ・プログラム製品。
【請求項７】
当該製品がコンピュータ上で走るときに、請求項1〜5の何れか1つ以上のステップを行うためのコンピュータ・プログラム。
【請求項８】
請求項6に記載のコンピュータ・プログラム製品、または請求項7に記載のコンピュータ・プログラムの電子的配信、の電子的配信
【請求項９】
TCP/IPパケットであるデータ・パケットをキャッシュし、かつ当該TCP/IPパケットの受信確認応答を伝送するように構成された、データ・パケットを受信しかつ伝送するためのルータと、
当該データ・パケットを受信するためのクライアントと、
を有する、データ・パケットをルーティングするためのシステム。
【請求項１０】
前記ルータが、
前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送する手段、
を有する、請求項9に記載のシステム。
【請求項１１】
前記ルータが、
前記クライアントからデータまたは確認応答が受信されない場合、サーバに確認応答を送信し、このことにより、さらなるデータ・パケットが前記ルータに確実に送信されるようにする手段、
を有する、請求項9または請求項10に記載のシステム。
【請求項１２】
前記ルータが、
前記クライアントからの否定的な確認応答パケットを何れも受け入れる受信手段と、
前記データ・パケットを前記データ・パケット・キャッシュから再送信する伝送手段と、
を有する、請求項9〜請求項11の何れかに記載のシステム。
【請求項１３】
前記伝送手段が
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作する、請求項12に記載のシステム。
【請求項１４】
複数のデータ・パケットを受信するための受信手段と、
TCP/IPパケットであるデータ・パケットをキャッシュするための格納手段と、
当該データ・パケットを伝送し、かつ当該TCP/IPパケットの受信確認応答を伝送するための伝送手段と、
を有する、データ・パケットを伝送するための装置。
【請求項１５】
前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送する手段を有する、請求項14に記載の装置。
【請求項１６】
データ・パケットまたは確認応答がクライアントから受信されない場合、確認応答をサーバに送信し、このことにより、さらなるデータ・パケットが前記ルータに確実に送信されるようにする手段、
を有する、請求項14または請求項15に記載の装置。
【請求項１７】
前記クライアントからの否定的な確認応答パケットを何れも受け入れる手段と、
前記データ・パケットを前記データ・パケット・キャッシュから再送信する伝送手段と、
を有する、請求項14または請求項15に記載の装置。
【請求項１８】
前記伝送手段が、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作する、請求項17に記載の装置。
【請求項１９】
データ・パケットを受信するための手段と、
TCP/IPパケットを識別するための処理手段と、
行方不明のTCP/IPパケットのリストを格納するための格納手段と、
当該行方不明のTCP/IPパケットのリストを周期的に伝送するための伝送手段と、
を有する、データ・パケットを受信するための装置。
【請求項２０】
前記処理手段が、ソフトウエア内で達成され、かつ前記装置の前記オペレーティング・システムと通信する、請求項19に記載の装置。
【請求項２１】
前記伝送手段が、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、および／または、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作する、請求項19または20に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ・パケットのルーティング方法およびデータ・パケットのルーティングのためのシステムに関し、かつデータ・パケットを伝送するための装置と、データ・パケットを受信するための装置とに関する。
【背景技術】
【０００２】
多くのインターネット・アプリケーションは、通信するためにTCP/IPプロトコルを使用する。TCP/IPは、ケーブルに基づいた、相互接続されたネットワークのために設計されている。技術の進歩により、今やこのようなインターネット・アプリケーションは、他のデバイス（例えば、デジタル・テレビおよび携帯電話）に取り込まれている。これらのデバイスは、他の手段（例えば、ブロードキャスト・テレビジョン・ネットワーク、または無線通信リンク）によってインターネットに接続される。
【０００３】
TCP/IPには、ブロードキャスト・ネットワークまたは無線ネットワーク上で使用される場合、問題がある。例えば、TCP/IPは、受信されたデータ・パケットの確認応答がネットワークを介して一定間隔でシグナリングされることを必要とする。このことには、幾つかの欠点がある。なぜならば、携帯電話からこの方法でデータを伝送すると費用がかかってしまう可能性があり、および／または、多数のデバイスからのデータ・トラフィックが余りにも多く生じてしまう可能性があるからである。
【発明の開示】
【課題を解決するための手段】
【０００４】
本発明の目的は、これらの欠点を克服することである。
【０００５】
本発明の第一態様によると、
複数のデータ・パケットをサーバから受信することと、
TCP/IPパケットである、これらのデータ・パケットをキャッシュすることと、
当該複数のデータ・パケットをクライアントに伝送することと、
当該TCP/IPパケットの受信確認応答を当該サーバに伝送することと、
を含む、データ・パケットをルーティング方法が提供される。
【０００６】
前記方法は、前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送すること、をさらに含むと有利である。
【０００７】
前記方法は、
データまたは確認応答が前記クライアントから受信されない場合、さらなるデータ・パケットが前記ルータに確実に送信されるように確認応答を送信すること、
を含むことが好ましい。
【０００８】
前記方法は、
前記クライアントからの否定的な確認応答パケットを何れも受け入れることと、
前記データ・パケットを前記データ・パケット・キャッシュから再送信することと、
を含んでもよい。
【０００９】
さらに、前記方法は、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、および／または、
(ii) 行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に行方不明のデータ・パケットを送信することを含んでもよい。
【００１０】
本発明は、
デジタル・コンピュータの内部メモリ内に直接ロード可能なコンピュータ・プログラム製品であって、
当該製品がコンピュータ上で走るときに、本発明による方法のステップを行うためのソフトウエア・コード部、
を有する、コンピュータ・プログラム製品も提供する。
【００１１】
本発明は、本発明による方法のステップを行うためのコンピュータ・プログラムも提供する。
【００１２】
本発明は、本発明によるコンピュータ・プログラム製品またはコンピュータ・プログラムの電子的配信、も提供する。
【００１３】
本発明の第二態様によると、
TCP/IPパケットであるデータ・パケットをキャッシュし、かつ当該TCP/IPパケットの受信確認応答を伝送するように構成された、データ・パケットを受信しかつ伝送するためのルータと、
当該データ・パケットを受信するためのクライアントと、
を有する、データ・パケットをルーティングするためのシステムが提供される。
【００１４】
前記ルータは、前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送する手段、を有していると有利である。
【００１５】
前記ルータは、前記クライアントからデータまたは確認応答が受信されない場合、サーバに確認応答を送信し、このことにより、さらなるデータ・パケットが前記ルータに確実に送信されるようにする手段、を有していることが好ましい。
【００１６】
前記ルータは、
前記クライアントからの否定的な確認応答パケットを何れも受け入れる受信手段と、
前記データ・パケットを前記データ・パケット・キャッシュから再送信する伝送手段と、
を含んでもよい。
【００１７】
さらに、前記伝送手段は、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作してもよい。
【００１８】
本発明の第三態様によると、
複数のデータ・パケットを受信するための受信手段と、
TCP/IPパケットであるデータ・パケットをキャッシュするための格納手段と、
当該データ・パケットを伝送し、かつ当該TCP/IPパケットの受信確認応答を伝送するための送信手段と、
を有する、データ・パケットを伝送するための装置が提供される。
【００１９】
前記装置は、前記クライアントからの要求後直ちに、キャッシュされている何れかのTCP/IPパケットを再伝送する手段、を有することが有利である。
【００２０】
前記装置は、
データ・パケットまたは確認応答がクライアントから受信されない場合、確認応答をサーバに送信し、このことにより、さらなるデータ・パケットが前記ルータに確実に送信されるようにする手段、
を有することが好ましい。
【００２１】
前記装置は、
前記クライアントからの否定的な確認応答パケットを何れも受け入れる手段と、
前記データ・パケットを前記データ・パケット・キャッシュから再送信する伝送手段と、
を含んでもよい。さらに、前記装置は、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作する伝送手段を含んでもよい。
【００２２】
本発明の第四態様によると、
データ・パケットを受信するための受信手段と、
TCP/IPパケットを識別するための処理手段と、
行方不明のTCP/IPパケットのリストを格納するための格納手段と、
当該行方不明のTCP/IPパケットのリストを周期的に伝送するための伝送手段と、
を有する、データ・パケットを受信するための装置が提供される。
【００２３】
前記処理手段は、ソフトウエア内で達成され、かつ前記装置の前記オペレーティング・システムと通信すると有利である。
【００２４】
前記伝送手段は、
(i) 接続が閉じられており、かつ未処理のデータ・パケットがある場合、および／または、
(ii) 前記行方不明のパケットのリストが満杯である場合、および／または、
(iii) 前記データ・パケット・キャッシュがほぼ満杯である場合、
に動作することが好ましい。
【００２５】
大量のバック・トラフィックが生成されてしまうことなく、TCP/IPをブロードキャスト・ネットワークと無線ネットワーク内で容易に実施することが、本発明によって可能となる。アプリケーションの観点からは、同じインターフェースを維持することが可能となる。さらに、ユーザのオペレーティング・システムを変更する必要がないので、オペレーティング・システムのネットワーク・ライブラリを用いて、現在のコードとの互換性を確保することができる。
【００２６】
トラフィックが主に一方向性のものである場合、半二重ネットワークの利用性が実質的に改良されかつ向上されることが、本発明により確実となる。
【００２７】
さらに、典型的なチャネル上では、クライアント・デバイスから返されてしまうパケット数が低減される。したがって、このことにより、ネットワーク帯域幅と無線帯域幅での輻輳が低減され、かつ特にユニット単位で課金される場合、経費が低減される。
【発明を実施するための最良の形態】
【００２８】
次に、本発明の実施例を、添付の図面を参照しながら、単に例として記述する。
【００２９】
本発明は、2つの部分から成る。第一に、ブロードキャスト・ルータのヘッドエンドにルータがある。このルータによりパケットはこのシステムを通過して、ネットワークがインターネットの他の部分に接続される。システムの第二部分は、クライアント・デバイス内の低レベルのソフトウエアである。このソフトウエアは、ハードウエア・ドライバと、オペレーティング・システムのネットワーク・レベルとの間に位置している。
【００３０】
このルータは、標準的なルータとは作用が異なる。このルータは、それが通過させるすべてのTCP/IPパケットをキャッシュする。クライアントからデータまたは確認応答が来ていない場合、ルータは確認応答 (ACK) をインターネット・サーバSに送信して、インターネット・サーバSがデータ送信を確実に継続するようにさせる。このデータは、クライアントに向けて前方に送信される。次にルータは、クライアントからの否定的な確認応答 (NACK) のパケットを何れも受け入れて、パケット・キャッシュからデータを再送信する。接続が特定の期間閉じられていて、かつNACKパケットがクライアントから来ていない状態に一度なると、その特定の接続のためにキャッシュされたすべてのパケットは、キャッシュから除去される。
【００３１】
クライアント内に存在するTCP/IPユニットは、接続のためのTCP/IPパケットを取り除くように作用する。次にTCP/IPユニットは、オペレーティング・システムにより自動生成されたTCP/IPシーケンス番号とACKデータとを用いて、行方不明のパケットのリストを保つ。この行方不明のパケットのリストは、接続が閉じられていてかつ未処理のパケット（これは、タイムアウト後、再送信される）がある場合、行方不明のパケットのリストが満杯である場合、またはパケットの格納装置がほぼ満杯である場合、の何れかの場合、ルータに送信される。
【００３２】
図1の場合、ルータ10は、そのネットワーク・インターフェース14により、インターネット12を介してサーバSに接続されている。ルータ10は、クライアント16（これは携帯電話でもよい）の要求後直ちに、サーバSからマテリアルをダウンロードする。このマテリアルは、データ・パケットを有している。このデータ・パケットは、TCP/IPパケットとUDPパケットとの混合体でよい。これらのUDPパケットは、接続に基づいていないので、高機能なハンドリングを受けることなく、ストリームされて通り過ぎるだけである。
【００３３】
しかしながら、TCPは接続に基づいたネットワークである。ルータ10内のハンドラ18は、どのパケットがどの接続に属しているのを、TCPヘッダ内のIPアドレスとソケット値により追跡する。ハンドラ18は、クライアント16から受信されたACKシグナルとNACKシグナルもハンドリングしなければならない。
【００３４】
データ・パケットをルーティングさせる方法の原理には、複数のデータ・パケットをサーバSから受信することと、TCP/IPパケットであるデータ・パケットを格納手段20内にキャッシュすることと、これらのデータ・パケットをクライアント16に伝送することと、これらのTCP/IPパケットの受信確認応答をサーバSに伝送することと、が含まれる。
【００３５】
ルータ10は、アンテナ22を介して、データ・パケットをクライアント16に伝送する。クライアント16は、そのアンテナ24を介してデータ・パケットを受信する。これらのパケットは、ハードウエア・ドライバ26を通ってTCP/IPユニット28に伝搬する。パケットは、生のIPパケットとして転送されるか、またはイーサネット（登録商標）・パケットへカプセル化できるか、の何れかである。ユニット28は、両タイプのパケットをハンドリングすることができる。このユニットは、オペレーティング・システムにデータ・パケットを渡し、かつオペレーティング・システムにより生成されたACKデータを格納する。このACKデータは、TCPプロトコルにしたがって自動的に生成される。ユニット28は、このACKデータを使用して、行方不明のパケットのリストを保つ。クライアント16は、この行方不明のパケットのリストをルータ10に周期的に伝送し、ルータ10は、そのキャッシュ20から、要求されたTCP/IPパケットを再伝送する。
【００３６】
データ・パケットをルーティングするシステムは、データ・パケットを受信しかつ伝送するためのルータ10と、当該データ・パケットを受信するためのクライアント16とを有する。ルータ10は、TCP/IPパケットであるデータ・パケットをキャッシュし、かつ当該TCP/IPパケットの受信確認応答をパケットのソースに伝送し返すように構成されている。
【００３７】
パケットをルータ10でキャッシュし、かつルータ10からACKデータを送信することにより、システムは、TCP/IPデータ・パケットの通常のハンドリング動作を効果的に模倣する。サーバSは、その通常の態様で機能する。ルータ10とクライアント16の間で何らかのデータが失われてしまったり、または壊れてしまった場合、クライアント16はTCP/IPユニット28の動作を通してこのことを認識する。
【００３８】
ユニット28は、行方不明のパケットのリストを構築し、かつこのリストをルータ10に周期的に送信する。ルータ10は、これらの行方不明のパケットを、そのキャッシュ20から再送信する。このユニットは独立しており、かつクライアント・デバイス16の通常のオペレーティング・システムに対する付加的なものなので、このオペレーティング・システムおよびこれより上位のどのブラウザも、やはりTCP/IPプロトコル・データが正に通常にハンドリングされているかのように機能する。
【００３９】
データ・パケットを受信するための装置は、データ・パケットを受信するための受信手段（ドライバ26）と、TCP/IPパケットを識別するための処理手段（ユニット28）とを有する。さらに、ユニット28には、行方不明のTCP/IPパケットのリストを格納するための格納手段が、一体的に設けられる。ドライバ26は、行方不明のTCP/IPパケットのリストを周期的に伝送するための伝送手段としても作用する。
【００４０】
図4は、ドライバ26とクライアントのオペレーティング・システムとの間に位置するTCP/IPユニット28をさらに詳細に示す。
【００４１】
ルータ
ルータ10は、クライアント16とインターネット12の間に位置している。ルータ16は、TCP接続以外のすべての接続上では、パケットの転送しか行わない。TCP接続上では、ルータ10はクライアントから来るパケット内のヘッダから情報を抽出し、かつ次いでこれらの情報を転送する。クライアント上の特定の接続を対象とするすべてのパケットはキャッシュされ、かつ次いでクライアントに転送される。
【００４２】
インターネット・サーバSに関する限り、ルータ10を通過する、インターネット・サーバSとクライアント16との間の接続は、何れもTCP規格に対応している。
【００４３】
ルータ10により受信される何れのTCPパケットも、クライアント16に関連付けられ、かつこのTCPパケットは、このクライアント上で（TCPヘッダ内のポート番号を通して）ある特定の接続に関連付けられる。
【００４４】
ルータ10は、クライアントから出て行くパケットを分析することによって、最大ウィンドウ・サイズを読み取る。ルータ10が、このウィンドウ・サイズに等しい、その接続上のある程度の量のデータを受信すると、ルータ10は、これまでに受信済みのすべての連続データの受信確認応答を行う、データ長がゼロのTCPパケットを作成する。同様に、インターネット・サーバSまたはクライアント16から、短い期間（この期間はルータ上で行われる設定だが、500 ms未満でなければならない）データが受信されていない場合、データが受信されていないことを確認応答する、データ長がゼロのTCPパケットが作成される。これらの確認応答パケットは、インターネット・サーバSに送信される。
【００４５】
クライアント16から来るパケットであって、シンクロナイズ (SYN) フラグ・セットを有しているものを、ルータは何れも見分けなければならない。これらのことによって、ルータ10は、新たなTCPリンクに必要とされるデータ要素と格納装置を初期化する。インターネット12から来るパケットであって、SYNフラグ・セットを有しているものは、何れもクライアントに転送される。特定の期間内にクライアント16からの応答内にパケットが見つからない場合には、（SYNフラグを含む）パケットが再送信されるように、タイムアウトがこの時点で設定 (set) される。この再送信は、設定されている最大回数まで行われる（これは、このパケットがルータとクライアントの間で失われている場合に行われる）。
【００４６】
パケットがインターネット12上でドロップされてしまった場合、ルータ10は、TCPクライアントとして作用し、かつ行方不明となっているデータの最初のバイトに等しいACKシーケンス番号を有するパケットを、繰り返し送信する。次に、インターネット・サーバSはこのデータを再送信する。サーバは、インターネット・サーバSに送信された何れのパケット内にもある最後のACK値を格納する。
【００４７】
クライアント16からのパケットは、ルータ10により分析される。Sに対してインターネット上で送信されたACK値よりも少ないACK値を有する何れのパケットもパッチされ、この結果、このACK値は送信された最後のACK値に等しくなる。
【００４８】
ルータ10が、ACK値を有するパケットをクライアント16から受信した場合、クライアント16は、受信済みであることが既知のデータまで、パケット・キャッシュをパージすることができる。
【００４９】
クライアント
図2と図3は、ドライバ内部のプログラムのフローを単純化した例を示している。図2は、（低レベルのハードウエア・ドライバを介して）パケットがネットワークから受信される場合のフローを示している。図3は、パケットがOSから受信され（てネットワークに送信され）る場合のフローを示している。
【００５０】
ネットワークからパケットを受信する
パケットがネットワークから受信されると、ポート番号を抽出しかつ用いて、その接続のための格納エリアが探し出される。パケットのSYNフラグは設定されているが、現在はこのポート番号に対して接続が設定 (set-up) されていない場合、パケットは、OSに転送されるだけである。
【００５１】
次に、既に受信済みの古いパケットが、（TCP規格に基づいて）単純なフィルタにより除去される。
【００５２】
次の決定では、OSから出て行くパケットから得られた情報、つまりOSからの最後のACK値とウィンドウ・サイズが用いられる。この決定により、現在の接続ウィンドウのOSビューの範囲内で適合するであろうパケットが転送される。
【００５３】
パケットは転送時に点検されて、FINフラグが設定されているか否かが確認される。FINフラグが設定されている場合、かつノンゼロのパケットのリストが空ではない場合、NACKパケットはルータに送信される。さらに、転送されたパケットのシーケンス番号と長さが格納装置内に記録される。次にこの格納装置は消去されて、転送されたパケットが何れも除去されると、現在のシーケンス番号から最大ウィンドウ・サイズを引いたものよりも少なくなる。
【００５４】
パケットがOSに転送されない場合、パケットは、一時的な格納装置内に配置され、クライアント上の受信バッファのサイズを拡張する。このデータ格納装置が、追加された各パケット上の特定の占有レベルに到達した場合、またはこの占有レベルを超えた場合、この接続のためのリトライ・カウンタがインクリメントされる。このリトライ・カウンタが限界値に達すると、NACKパケットがルータに伝送される。行方不明のパケットがない場合、NACKパケットが送信される。この作用により、ルータは、データを低レートで転送するようにスロットルする。
【００５５】
OSからパケットを受信する
パケットは、特定の接続に関連付けられる。SYNオプションが設定された場合、この新たな接続のために新たな接続が初期化される。このSYNパケットから、ネットワーク上のセグメント・サイズの最大化などのオプションが得られる。
【００５６】
次のテストは、この接続のためのOSから受信された前のパケット内にあるACKの値を用いる。この値が等しく、かつこの値よりも多くのデータがネットワークから転送済みの場合、このことはデータが行方不明となっていることを示す。
【００５７】
データが行方不明になっていない場合、パケットは転送されるが、このパケット長がゼロではないか、または何らかのフラグが設定されている場合に限られる。
【００５８】
パケットは転送時に検査され、一時的なパケット格納装置上の何れかのデータが、（OSから受信されたパケット内でアドバタイズされている）現在利用可能なウィンドウ・サイズまで転送可能か否かが決定される。
【００５９】
データが行方不明となっている場合、この行方不明のデータは計算され、かつ行方不明のパケットのリストに（この行方不明のデータがまだ存在しない場合）追加される。（TCPの場合と同様に、行方不明のデータの長さしか既知でないために）いくつのパケットが失われているかを厳密に決定することが、時折不可能となるであろう。しかしながら、この長さを正確に近似化することは、行方不明のデータの長さを得て、かつこの長さをパケットに適合させて、これらのパケットの最大サイズをリンクの最大セグメント・サイズにすることにより、可能となる。
【００６０】
行方不明のパケットが、行方不明のパケットのリストに加えられる際に、このリストが特定の占有率よりも大きい場合、リトライ・カウンタがインクリメントされる。このリトライ・カウンタが、1に等しいか、または設定されているリトライ・タイムアウト値の倍数に等しい場合、NACKパケットがルータに送信される。
【００６１】
NACKパケット
NACKパケットは、クライアントで行方不明となっているデータをリスト化したものである。したがって、NACKパケットは、この行方不明のデータを表す幾つかのシーケンス番号と長さの値をリスト化したものである。必要なパケット内のこのデータの送信は、ルータが行う。
【００６２】
NACKパケットは、ルータのデータ送信の速さが、クライアント上のアプリケーションがこのデータを消費する速さを上回っているという、ルータに対する警告としても作用できる。このことは、OSから来るパケットの最後のACKシーケンス番号を、NACKパケット内に配置することにより達成される。ルータはこの情報を用いて、さらなるパケットをどれ位の速さで送信すべきかを計算する。
【００６３】
図4は、ドライバ内のパケットとデータ・フローを示す。ネットワークとOSからのパケットはフィルタリングされて、TCPでないパケットは単純に転送される。TCPパケットは、分析される。データは、パケットが属する接続に対応するエリア内に格納される。
【００６４】
パケット・フロー図
図5と図7は、このシステムのための例示的なパケット・フローを示す。図の下方に向けて時間が流れており、かつ各矢印線はパケットを表す。
【００６５】
図5：ウェブ・ページを要求する（失われたパケットを1つ含んだ）単純な例
図5は、4段階に分割されている。第1段階は、接続開始段階の間におけるパケット・フローを示す。SYNフラグが設定されているパケットが転送されていることが分かる。ルータは、第二SYNフラグの後、このフラグは長さがゼロの確認応答なので、パケット (A1) をサーバへ送信する。
【００６６】
第2段階は、クライアントから出て行く、長さがノンゼロのパケットを示している。これは、ウェブの例の場合、クライアントが必要としている情報を詳述した「GET」コマンドである。
【００６７】
第3段階は、インターネット・サーバSによってストリームされている大量のデータ（例えばウェブ・ページまたは画像）を示す。これらのパケットは、ルータ10によって転送され、かつキャッシュされる。（クライアント16により報告されたウィンドウ・サイズまでの）特定数のパケット後、ルータは、長さがゼロのACKパケット (A2) を作成し、ルータはこれをインターネット・サーバに伝送する。
【００６８】
パケット12は、ルータ10とクライアント16との間のネットワーク上で失われてしまう点に留意されたい。しかしながら、ルータは、データ受信とこのデータの転送とを続行させる。
【００６９】
第4段階は、接続が閉じられていることを示している。インターネット・サーバSがデータ送信を完了させている場合、インターネット・サーバSはFINフラグ・セットと共にパケットを送信する。ルータ10は、やはりFINフラグ・セットと共に確認応答パケットをサーバSに返し、このことにより、サーバの管轄内の接続が閉じられる。FINパケットは、クライアント16にも転送される。クライアントは、このFINパケットを受信後直ちに、どのデータが行方不明となっているかを分析する。データが行方不明の場合、NACKパケット (B1) は、ルータに送信される。次にルータ10は、（ルータがキャッシュ済みの）要求されたデータを、新たなパケット (B2) に入れて再送信する。この例の場合、この新たなパケット (B2) は、行方不明のパケットP13と同じデータを有している。クライアントは、この行方不明のデータを受信後、FINフラグ・セットと共に確認応答パケットを伝送する。ルータは、この情報を認識すると、（今は閉じられている）この接続のために保たれているすべての情報を消去する。
【００７０】
図6：二方向トラフィックの例
トラフィックが二方向の場合、ACKパケットの前後方向への伝送を効率的に実施することが、TCP規格によって可能となる。したがって、このシステムの場合、従来のTCP方法で作動することがシステムに含まれている。
【００７１】
図中、パケットは両方向に伝搬している。ルータ10により作成されたパケットであって、データを受信したことを確認応答するものは、パケットA1以外にはない。
【００７２】
パケット（例えば、パケット10）が失われた場合、データ長がゼロではないパケット内のACK値を用いるTCP規格のメカニズムを用いて、再送信されたパケットが入手可能となることに留意されたい。
【００７３】
図7：データのスロットリング
データが単純にルータを通してクライアント16に転送される場合、データ送信の速さが、クライアントがこのデータに対処できる速さを上回ってしまう公算が高い。したがって、システムは、ルータ10がクライアントにパケットを送信するレートを遅くするようにルータ10に通知する必要がある。
【００７４】
このことは、一時的なデータ格納装置が一定の限度を一度上回ったら、OSから受信された現在のACK値をルータに送信することにより達成される。
【００７５】
図7は、この例を示している。
【００７６】
第1段階と第2段階は、（図5と同様の）標準的な接続開始と、データ要求を示している。
【００７７】
第3段階は、サーバにより送信されかつクライアントに転送される、多数のデータを示している。このデータが到達する速さが、クライアントがこのデータを消費する速さを上回っている場合、一時的なデータ格納装置が特定の占有率に到達済みとなっている時点に達する。この時点（線図内のパケット16の後）で、クライアントはNACKシグナルを送信する。この例の場合、行方不明のパケットはない。しかしながら、ルータがこのレートでパケットを転送し続けることになっている場合、パケットは行方不明となってしまうであろう。
【００７８】
このNACKシグナルは、OS内にある、OSからの最新のACK値を有している。このことにより、ルータは、クライアントがデータを消費する近似レートを計算することが可能となる。クライアントが遅れている場合、ルータは特定期間の間、いかなるパケットもクライアントに送信せず（第4段階）、第4段階の終わりで、ルータは再びパケット送信を開始するであろう（第5段階）。しかしながら、この場合、各パケット間の時間間隔はより長くなる。留意すべき点は、サーバSからの入力が、前と同じレートで継続することである（このレートは、インターネット・サーバ、およびサーバとルータとの間のネットワークに影響される）。
【００７９】
多数の接続NACKパケット
この説明の場合、NACKパケットは、接続ごとに送信されている。一変種の場合、NACKパケットが送信される際、このパケットは、この時に開かれているすべての接続に対する行方不明のデータを表している。
【００８０】
このことは、（クライアントに多数の接続が開かれている場合に）クライアントから戻ってきてしまうパケット数をさらに低減させるように作用する。
【００８１】
インターネット・プロキシ・キャッシュとルータとの結合
サーバ上のインターネット・ウェブ・ページ、画像などをキャッシュする能力を提供するシステムが、現在存在している。このようなシステムは、ネットワーク上の多数のクライアントが、キャッシュされているウェブ・ページをインターネット・キャッシュから読み取ることによって、インターネット・サーバ上の負荷を低減させるように、これらのインターネット・ウェブ・ページを格納する。
【００８２】
これらのシステムは、ルータがプロキシ・キャッシュにもなるように、本発明に組み込むことができる。インターネット・サーバから受信されたデータは、接続の最後に廃棄されるのではなく、キャッシュに格納される。他のクライアントが同じデータを必要とする場合、インターネット・サーバ (S) とルータ／キャッシュとの間で接続は行われず、同じプロトコルを用いてキャッシュからデータがストリームされる。
【図面の簡単な説明】
【００８３】
【図１】ルータとクライアントの概略図である。
【図２】ドライバ内部のプログラムのフロー線図である。
【図３】ドライバ内部のプログラムのフロー線図である。
【図４】TCP/IPユニットを示す。
【図５】システム内のパケット・フローを示す。
【図６】システム内のパケット・フローを示す。
【図７】システム内のパケット・フローを示す。
【符号の説明】
【００８４】
10…ルータ
12…インターネット
14…ネットワーク・インターフェース
16…クライアント
18…ハンドラ
20…格納手段
22…アンテナ
24…アンテナ
26…ハードウエア・ドライバ
28…TCP/IPユニット
【図１】
2005520374.tif 000003
【図２】
2005520374.tif 000004
【図３】
2005520374.tif 000005
【図４】
2005520374.tif 000006
【図５】
2005520374.tif 000007
【図６】
2005520374.tif 000008
【図７】
2005520374.tif 000009
【国際調査報告】
2005520374.tif 000010
2005520374.tif 000011
2005520374.tif 000012
2005520374.tif 000013