(57)【要約】【課題】ネットワーク通信スタックと相互作用を行うことができる、異なる輻輳制御モジュールを作成するシステム、方法、およびソフトウェアを提供する。【解決手段】ネットワーク通信スタック（例えば、ＴＣＰ／ＩＰスタック）に差し込むことができる、異なる輻輳制御モジュール（ＣＣＭ）を作成する。トランスポート制御イベント、輻輳制御アルゴリズム、およびその他の情報を定めるソフトウェア・アブストラクションを、例えば、オペレーティング・システムのアプリケーション・プログラミング・インターフェースによって露出することができ、これらのアブストラクションを用いてＣＣＭを定めることができる。ネットワーク通信スタックは、多数の利用可能なＣＣＭのうち１つを選択して、所与の接続に対する輻輳を制御するように構成することができる。【選択図】図１
2009534937.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク接続上で輻輳を制御する輻輳制御モジュールを作成するシステムであって、
輻輳制御モジュールを発生することができる輻輳制御モジュール・タイプを定める際に用いるための１つ以上のイベント・アブストラクションを露出するアプリケーション・プログラミング・インターフェースを備えており、各イベント・アブストラクションがトランスポート制御イベントを定める、システム。
【請求項２】
請求項１記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、前記イベント・アブストラクションによって定められるイベントを処理する情報を各々定める１つ以上の情報アブストラクションを露出する、システム。
【請求項３】
請求項１記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、ネットワーク接続上で輻輳を制御する輻輳制御アルゴリズムを各々定める１つ以上の輻輳制御アルゴリズム・アブストラクションを露出する、システム。
【請求項４】
請求項１記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、ネットワーク・デバイスのオペレーティング・システムによって提供される、システム。
【請求項５】
請求項１記載のシステムにおいて、各イベント・アブストラクションは、接続上における再送信時間切れ、復路時間の変化、新たなデータ承認、重複承認の受信、および新たなデータ・パケットの送出、のイベントのうち２つ以上を定める、システム。
【請求項６】
ネットワーク・デバイスと通信ネットワークとの間における１つ以上のネットワーク接続上で輻輳を制御するシステムであって、
前記１つ以上の接続においてネットワーク通信を制御するように動作するネットワーク通信スタックと、
１つ以上の輻輳制御モジュールであって、各々、前記１つ以上のネットワーク接続のそれぞれにおいて輻輳を制御する輻輳制御アルゴリズムを定め、それぞれの接続に対して１つ以上の接続状態変数を維持する、輻輳制御モジュールと、
を備えており、
前記ネットワーク通信スタックは、前記１つ以上の接続の各々に対して、当該接続上で輻輳を制御する前記輻輳制御モジュールに、当該接続上で発生する１つ以上のトランスポート制御イベントを通知するように動作する、システム。
【請求項７】
請求項６記載のシステムにおいて、各輻輳制御モジュールは、当該輻輳制御モジュールが輻輳を制御する接続上で発生したトランスポート制御イベントを通知されたことに応答して、１つ以上の接続状態変数を更新するように動作する、システム。
【請求項８】
請求項７記載のシステムにおいて、各輻輳制御モジュールは、前記ネットワーク通信スタックに、前記輻輳制御モジュールが輻輳を制御する接続に対して前記更新した１つ以上の接続状態変数を通知するように動作する、システム。
【請求項９】
請求項８記載のシステムにおいて、前記ネットワーク通信スタックは、前記１つ以上の輻輳制御モジュールから受信した、前記更新した１つ以上の接続状態変数に基づいて、前記１つ以上の接続上のネットワーク通信を制御するように動作する、システム。
【請求項１０】
請求項６記載のシステムであって、更に、
複数の輻輳制御モジュール・アブストラクションであって、各々、輻輳制御モジュール・タイプを定める、輻輳制御モジュール・アブストラクションを備えており、
前記ネットワーク通信スタックは、前記１つ以上の接続のうち第１の接続に対して、前記複数の輻輳制御モジュール・アブストラクションのうち第１の輻輳制御モジュール・アブストラクションを選択し、前記第１輻輳制御モジュール・アブストラクションから、前記１つ以上の輻輳制御モジュールのうち第１輻輳制御モジュールを作成するように動作する、システム。
【請求項１１】
請求項１０記載のシステムにおいて、前記ネットワーク通信スタックは、前記１つ以上の接続のうち第２の接続に対して、前記複数の輻輳制御モジュール・アブストラクションのうち前記第１の輻輳制御モジュール・アブストラクションを選択し、前記第１輻輳制御モジュール・アブストラクションから、前記１つ以上の輻輳制御モジュールのうち第２の輻輳制御モジュールを作成するように動作する、システム。
【請求項１２】
請求項６記載のシステムにおいて、前記ネットワーク通信スタックは、ＴＣＰ／ＩＰスタックである、システム。
【請求項１３】
コンピュータ・プログラム製品であって、
少なくとも１つのコンピュータ読み取り可能媒体と、
前記少なくとも１つのコンピュータ読み取り可能媒体に格納されており、命令を定めるコンピュータ読み取り可能信号と、
を備えており、前記命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間におけるネットワーク接続上で輻輳を制御する方法を実行するように制御し、該方法は、
（Ａ）第１接続に対し第１タイプの輻輳制御を選択する行為と、
（Ｂ）前記第１タイプの第１輻輳制御モジュールを発生する行為と、
（Ｃ）前記第１輻輳制御モジュールを用いて、前記第１接続上でネットワーク輻輳を制御する行為と、
を備えている、コンピュータ・プログラム製品。
【請求項１４】
請求項１３記載のコンピュータ・プログラム製品において、前記ネットワーク・デバイスは、複数の輻輳制御モジュール・アブストラクションへのアクセスを有し、各輻輳制御モジュール・アブストラクションは、あるタイプの輻輳制御モジュールを定め、
前記行為（Ａ）は、前記複数の輻輳制御モジュール・アブストラクションから第１輻輳制御モジュール・アブストラクションを選択することを含み、該第１輻輳制御モジュール・アブストラクションは、前記第１タイプの輻輳制御モジュールを定め、
前記行為（Ｂ）は、前記第１輻輳制御モジュール・アブストラクションを用いて、前記第１輻輳制御モジュールを発生することを含む、コンピュータ・プログラム製品。
【請求項１５】
請求項１３記載のコンピュータ・プログラム製品において、前記方法は、更に、
（Ｄ）第２接続に対し前記第１タイプの輻輳制御を選択する行為と、
（Ｅ）前記第１タイプの第２輻輳制御モジュールを発生する行為と、
（Ｆ）前記第２輻輳制御モジュールを用いて、前記第２接続上でネットワーク輻輳を制御する行為と、
を備えている、コンピュータ・プログラム製品。
【請求項１６】
請求項１３記載のコンピュータ・プログラム製品において、前記方法は、更に、
（Ｄ）第２接続に対し第２タイプの輻輳制御を選択する行為と、
（Ｅ）前記第２タイプの第２輻輳制御モジュールを発生する行為と、
（Ｆ）前記第２輻輳制御モジュールを用いて、前記第２接続上でネットワーク輻輳を制御する行為と、
を備えており、前記第２タイプは前記第１タイプとは異なる、コンピュータ・プログラム製品。
【請求項１７】
請求項１３記載のコンピュータ・プログラム製品において、前記行為（Ａ）〜（Ｃ）は、ＴＣＰ／ＩＰスタックによって実行する、コンピュータ・プログラム製品。
【請求項１８】
請求項１３記載のコンピュータ・プログラム製品であって、更に、
（Ｄ）前記第１輻輳制御モジュールに、前記接続上で発生する１つ以上のトランスポート制御イベントを通知する行為を備えている、コンピュータ・プログラム製品。
【請求項１９】
請求項１８記載のコンピュータ・プログラム製品において、前記方法は、更に、
（Ｅ）前記第１輻輳制御モジュールが、前記通知に応答して、１つ以上の接続状態変数を更新する行為を備えている、コンピュータ・プログラム製品。
【請求項２０】
請求項１９記載のコンピュータ・プログラム製品において、前記行為（Ａ）〜（Ｃ）は、ネットワーク通信スタックによって実行し、
前記行為（Ｃ）は、前記更新した１つ以上の接続状態変数に基づいて、前記第１接続上でネットワーク通信を制御することを含み、
前記方法は、更に、前記第１輻輳制御モジュールが、前記ネットワーク通信スタックに、前記更新した１つ以上の接続状態変数を通知する行為を備えている、コンピュータ・プログラム製品。
【発明の詳細な説明】
【背景技術】
【０００１】
送信制御プロトコル（ＴＣＰ）は、２つのネットワーク・デバイスがネットワークを通じて接続を確立し、この接続を通じてデータのストリームをパケットの形態で交換することを可能にする。ＴＣＰは、データの配信を保証し、更に、パケットを送ったのと同じ順序で配信することを保証する。
【０００２】
ＴＣＰは、パケットを発信元から送信している（即ち、送っている）レートを積極的に絞ることによって、ネットワーク輻輳を拡散し易くする輻輳制御アルゴリズムを採用している。高帯域幅−遅延ネットワーク上では、これらの積極的な対策の結果、パケット損失の率が小さい場合でも、ＴＣＰのネットワーク帯域幅の利用が著しく過小となってしまう。例えば、オペレーティング・システムのWindows（登録商標）ファミリの一部では、ＴＣＰの一形態を採用し、広く普及しているNewReno輻輳制御アルゴリズムを実装するが、これは高帯域幅−遅延環境における動作性能(performance)は低劣である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ネットワーク研究共同体が、高速ネットワークにおける動作性能を改善する試みの中で、ＴＣＰの輻輳制御アルゴリズムに対していくつかの強化および修正を提案している。考慮すべき要因がいくつかあり、「１つで全てが治まる」解決策はない。アルゴリズムが積極的になる程、他のＴＣＰフローに対しては増々不公正となる。更に、全世界で受け入れられる標準がないので、所与のオペレーティング・システムにどの輻輳制御アルゴリズムを実装するかという判断は非常に難しい。
【課題を解決するための手段】
【０００４】
この摘要は、本発明の態様についての例示的コンテキストを、簡略化した形態で規定する。これは、特許請求する主題の範囲を決定するために用いることは意図していない。発明の態様については、詳細な説明において以下で更に詳しく説明する。
【０００５】
ここに開示するのは、ネットワーク通信スタック（例えば、ＴＣＰ／ＩＰスタック）と相互作用（例えば、「差し込む」）を行うことができる、異なる輻輳制御モジュール（ＣＣＭ）を作成するシステム、方法、およびソフトウェア（例えば、フレームワーク）である。トランスポート制御イベント、輻輳制御アルゴリズム（ＣＣＡ）、およびその他の情報を定めるソフトウェア・アブストラクション(software abstraction)を、例えば、オペレーティング・システムのアプリケーション・プログラミング・インターフェースによって露出することができる。これらのアブストラクションは、多数のＣＣＭを発生する（例えば、インスタンス化する）元となり得るＣＣＭのタイプを定めるために用いることができる。
【０００６】
ネットワーク通信スタックは、所与の接続について輻輳を制御するために、多数の利用可能なＣＣＭから１つを選択するように構成することができる。この選択は、種々の要因の任意のものに基づくことができ、限定ではなく、ネットワーク環境、接続経路特性、接続リンク特性、アプリケーションのソケット・パラメータの値、その他の要因、および前述のあらゆる適した組み合わせを含む。つまり、ＣＣＭは、多数のＣＣＭを同時に動作させることができるように、接続毎に選択し実装することができる。
【０００７】
ネットワーク通信スタックは、所与の接続に対するトランスポート制御イベントを、それに対応するＣＣＭに報告することができ、ＣＣＭは、それに応じて、接続に対する１つ以上の状態変数の値を更新することができる。ＣＣＭは、１つ以上の状態変数の更新値を、ネットワーク通信スタックに供給することができ、スタックはそれに応じてその接続制御を修正することができる。
【０００８】
実施形態によっては、接続毎に状態情報を維持することによって消費するメモリ量を削減するために、接続に対して送信および／または受信する全て未満のパケットから情報をサンプリングすることもできる。接続毎のサンプリング・レートは、種々の要因の任意のものに基づいて決定することができ、要因には、限定ではなく、接続上における送信レート、および接続の往復時間（ＲＴＴ）を含む。輻輳制御に用いるために、メモリ・プールを指定することができ、メモリ・プールの一部を各接続に、そのサンプリング・レートに基づいて、割り当てることができる。
【０００９】
接続のサンプリング・レートに応じて、各接続上で送出および／または受信したパケットから情報をサンプリングすることができ、サンプリングした情報は、それぞれの接続に割り当てたメモリの一部に格納することができる。例えば、ある情報片（例えば、データ・バイト）を送信した時刻をサンプリングすることができ、そのデータ片に対する承認を受信した時刻をサンプリングすることができ、この情報を用いて、接続に対してＲＴＴを判定することができる。サンプリング・レートおよび各接続に割り当てたメモリ量は、接続の送信レートおよび／またはＲＴＴが変化するに連れて、調節することができる。
【００１０】
実施形態によっては、ネットワーク・インターフェース・モジュール、例えば、ネットワーク・インターフェース・カード（ＮＩＣ）が、接続上で受信したパケットに対してタイムスタンプを発生することができる。ネットワークから受信したパケット毎に、タイムスタンプを発生し、ネットワーク通信スタックに受け渡して、当該接続上で輻輳を制御する際に用いることができる。例えば、ネットワーク・インターフェース・モジュールは、タイムスタンプおよび接続と関連付けるタイムスタンプ情報を、データ構造（例えば、Windows（登録商標）Vista（商標）オペレーティング・システムのNET_BUFFER および／またはNET_BUFFER_LISTデータ構造）に格納することができる。このタイムスタンプ情報は、ネットワーク通信スタックが、接続に対するＲＴＴおよび／またはその他のトランスポート制御情報を判定するために用いることができる。ネットワーク通信スタックは、ＲＴＴおよび／またはその他の情報を、接続に対する輻輳を制御するＣＣＭに報告することができる。ＣＣＭは、接続状態変数を更新し、１つ以上の接続状態変数の更新値を、ネットワーク通信スタックに供給することができる。次いで、スタックは、それに応じて、その接続制御を修正することができる。
【００１１】
本発明の一実施形態では、ネットワーク接続上で輻輳を制御する輻輳制御モジュールを作成するシステムを提供する。本システムは、輻輳制御モジュールを発生することができる輻輳制御モジュール・タイプを定める際に用いるための１つ以上のイベント・アブストラクションを露出するアプリケーション・プログラミング・インターフェースを備えており、各イベント・アブストラクションがトランスポート制御イベントを定める。
【００１２】
本発明の別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間における１つ以上のネットワーク接続上で輻輳を制御するシステムを提供する。本システムは、１つ以上の接続においてネットワーク通信を制御するように動作するネットワーク通信スタックと、１つ以上の輻輳制御モジュールであって、各々、１つ以上のネットワーク接続のそれぞれにおいて輻輳を制御する輻輳制御アルゴリズムを定め、それぞれの接続に対して１つ以上の接続状態変数を維持する、輻輳制御モジュールとを含む。ネットワーク通信スタックは、１つ以上の接続の各々に対して、当該接続上で輻輳を制御する輻輳制御モジュールに、当該接続上で発生する１つ以上のトランスポート制御イベントを通知するように動作する。
【００１３】
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、コンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、前述の命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間におけるネットワーク接続上で輻輳を制御する方法を実行するように制御する。この方法は、第１接続に第１タイプの輻輳制御を選択する行為と、第１タイプの第１輻輳制御モジュールを発生する行為と、第１輻輳制御モジュールを用いて、第１接続上でネットワーク輻輳を制御する行為とを含む。
【００１４】
本発明の別の実施形態では、ネットワーク接続上で輻輳を制御する。ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定する。接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御する。
【００１５】
本発明の更に別の実施形態では、ネットワーク接続上で輻輳を制御するシステムを提供する。このシステムは、ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定し、接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御するように動作するネットワーク通信スタックを含む。
【００１６】
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、コンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク接続上で輻輳を制御する方法を実行するように制御する。この方法は、ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定する行為と、接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングする行為と、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御する行為とを含む。
【００１７】
本発明の別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する。ネットワーク・デバイスは、ネットワーク通信スタックと、別個のネットワーク・インターフェース・モジュールとを含む。ネットワーク・インターフェース・モジュールにおいて、通信ネットワークからのパケットをネットワーク接続上で受信する。ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生し、このタイムスタンプは、パケットを受信した時刻に対応する。タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納し、ネットワーク通信スタックにパケットを送る。
【００１８】
本発明の更に別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御するシステムを提供する。ネットワーク・デバイスは、ネットワーク通信スタックを含む。このシステムは、通信ネットワークからのパケットをネットワーク接続上で受信し、ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生し、このタイムスタンプは、パケットを受信した時刻に対応し、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納し、ネットワーク通信スタックにパケットを送るように動作するネットワーク・インターフェース・モジュールを含む。
【００１９】
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、のコンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する方法を実行するように制御する。ネットワーク・でバイアスは、ネットワーク通信スタックおよび別個のネットワーク・インターフェース・モジュールを含む。この方法は、通信ネットワークからのパケットをネットワーク接続上で受信する行為と、ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生する行為と、このタイムスタンプは、パケットを受信した時刻に対応し、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納する行為と、ネットワーク通信スタックにパケットを送る行為とを含む。
【００２０】
本発明のその他の利点、新規な特徴、および目的、ならびにその態様および実施形態は、以下の発明の詳細な説明を添付図面と合わせて検討することにより、その態様および実施形態も含めて、明白となろう。図面は、模式的であり、同じ拡縮率で描画することは意図していない。図においては、種々の図にのいて示される同一の構成要素またはほぼ同一の構成要素を、１つの番号で表すこととする。明確化のために、全ての構成要素に、全ての図面で符号を付けることは控えており、更に、当業者に発明を理解させるために図示が必要でない場合には、本発明の各実施形態または態様の全ての構成要素を示さないこととする。
【発明を実施するための最良の形態】
【００２１】
明示的な輻輳の通知がない場合、一部のトランスポート・レイヤ・プロトコル（例えば、ＴＣＰ）は、初期の輻輳、パケット損失、および「ボトルネック」ルータにおけるキューの積み重ね(build up)を検出するために、ある種のイベントを拠り所とする。輻輳制御における現在の研究は、大まかに、パケット損失を輻輳の指示として拠り所とする損出主体(loss-based)、または事前に対処することにより輻輳を回避するためにボトルネック・ルータにおけるバッファ占有度を監視する遅延主体に分類することができる。遅延主体方式は、接続のＲＴＴ増大を監視することによって、キューの積み重ねを推論する。
【００２２】
ここに記載する発明の実施形態は、遅延主体および／または損失主体の輻輳制御を実施するために用いることができる。例えば、以下で更に詳しく説明するが、１つ以上のイベント・アブストラクション、輻輳制御アルゴリズム（ＣＣＡ）アブストラクション、および輻輳制御と関連のあるその他の情報を定めるアブストラクションを、インターフェースを通じて露出する(expose)ことができる。これらのアブストラクションは、遅延主体および／または損失主体方式を用いて１つ以上のそれぞれの接続上で輻輳を制御するために、１つ以上の輻輳制御モジュール（ＣＣＭ）を定めるために用いることができる。
【００２３】
前述した本発明の実施形態およびその他の実施形態の機能や利点は、以下に記載する例から一層深く理解できよう。以下の例は、本発明の一層の理解を促進し、その便益を例示することを意図しているが、本発明の範囲全体を例示するのではない。
【００２４】
ここで用いる場合、記載する説明であれ特許請求の範囲であれ、「備えている」、「含む」、「搬送する」、「有する」、「収容する」、「伴う」等の用語は、状況に応じて変更可能である、即ち、含むが限定されないと意味するように解釈することとする。「から成る」および「本質的にから成る」という移行性の句のみが、米国特許商標庁のManual of Patent Examining Procedure（特許審査手順教範）（第８版、改訂２、２００４年５月）、２１１１．０３章に明記されているように、特許請求の範囲に関して、それぞれ、排他的(closed)または半排他的(semi-closed)移行性句となるものとする。
例
図１は、本発明の一部の実施形態にしたがって、ネットワーク・デバイス１０２と通信ネットワーク１２８との間における１つ以上のネットワーク接続上で輻輳を制御するシステム１００の一例を示すブロック図である。システム１００は、ネットワーク・デバイスと通信ネットワークとの間における１つ以上のネットワーク接続上で輻輳を制御するシステムの例示的な実施形態に過ぎず、本発明の範囲を限定することを意図するのではない。このようなシステムの多数の別の実施形態のいずれでも、例えば、システム１００の変形もが可能であり、本発明の範囲に該当することを意図している。
【００２５】
ここで用いる場合、「ネットワーク」とは、コンポーネント間で通信を交換することができる送信媒体の１つ以上のセグメントによって相互接続されている２つ以上のコンポーネントの一群のことである。各セグメントは、複数の形式の送信媒体のいずれでもよく、金属および／または光ファイバで作った１つ以上の電気または光ワイヤまたはケーブル、空気（例えば、搬送波上におけるワイヤレス通信を用いる）、またはこれらの送信媒体の任意の組み合わせを含む。ここで用いる場合、「複数」は２つ以上を意味する。尚、ネットワークは、１本のワイヤ、バス、ワイヤレス接続、またはその他の形式のセグメントによって接続されている２つのコンポーネントのように単純であってもよいことは認められよう。更に、本願の図面に図示されているネットワークは、図面における要素に接続されているが、接続される要素自体がネットワークの一部と見なされることも認められよう。
【００２６】
ここで用いる場合、「ネットワーク・デバイス」とは、ネットワーク上において通信するように動作するデバイスであり、限定ではなく、ワークステーション、パーソナル・コンピュータ、端末、ラップトップ・コンピュータ、エンド・ステーション、ユーザ・デバイス、サーバ、ゲートウェイ、レジスタ、スイッチ、ルータ、ハブ、ブリッジ、ディレクトリ、送信機、受信機、送受信機、ワイヤレス・アクセス・ポイント（ＡＰ）、リピータ、およびこれらの任意の組み合わせをも含む。ここで用いる場合、「ユーザ・デバイス」とは、ユーザが通信を送出／受信することができ、更に通信ネットワーク上における通信に対して終点としての役割を果たすことができるネットワーク・デバイスのことである。ユーザ・デバイスは、限定ではなく、ワークステーション、パーソナル・コンピュータ（例えば、ＰＣ）、ラップトップ・コンピュータ、ノートブック・コンピュータ、電話機（例えば、陸線または移動体）、ページャ、Blackberry（商標）ブランドのデバイス、ＰＣＳデバイス、パーソナル・ディジタル・アシスタント（ＰＤＡ）、双方向無線機（例えば、ウオーキー・トーキー）、その他の種類のユーザ・デバイス、および以上の適した組み合わせであれば任意のものを含む。
【００２７】
ネットワークは、種々の形式のネットワークのいずれでもよく、または任意のものを含むこともでき、限定ではなく、ローカル・エリア・ネットワーク（ＬＡＮ）、都市エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、ワイヤレス・ネットワーク、公衆陸上移動体ネットワーク（ＰＬＭＮ）、汎ヨーロッパ・ディジタル移動通信システム（ＧＳＭ）ネットワーク、総合パケット無線サービス（ＧＰＲＳ）ネットワーク、全世界移動体電気通信ネットワーク（ＵＭＴＳ）ネットワーク、符号分割多元接続（ＣＤＭＡ）ネットワーク、光ネットワーク、データ・ネットワーク、企業内ネットワーク、ワイヤレス・パーソナル・エリア・ネットワーク（ＰＡＮ）、ホーム・ネットワーク、電気通信ネットワーク、公衆電話交換網（ＰＳＴＮ）、ブロードバンド・ネットワーク、その他の形式のネットワーク、または前述のあらゆる適した組み合わせを含む。
【００２８】
ネットワーク・デバイス１０２は、１つ以上のアプリケーション１０８、オペレーティング・システム１０４、ネットワーク・インターフェース・モジュール１２２、１つ以上の輻輳制御モジュール（ＣＣＭ）１１６、その他のコンポーネント、または前述のあらゆる適した組み合わせのうち、任意のものを含むことができる。
【００２９】
ネットワーク・インターフェース・モジュール１２２は、例えば、ネットワーク・インターフェース・カード（ＮＩＣ）のような、種々の形式のネットワーク・コンポーネントの任意のものでもよい。モジュール１２２は、ネットワーク１２８、例えば、１つ以上のネットワーク接続からパケット１２６を受信し、このパケットに対して動作を実行するように構成することができる。例えば、ネットワーク・インターフェース・モジュール１２２は、種々の周知の動作の任意のものを実行することができる。更に、モジュール１２２は、パケットを受信したときに、そのタイムスタンプを発生するように構成することもできる。例えば、タイムスタンプ発生器１２４は、各パケットを受信した時刻にできるだけ近い時刻にタイムスタンプを発生するとよい。タイムスタンプ１１８をパケットと関連付ける情報（即ち、タイムスタンプ情報）は、データ構造（例えば、Windows（登録商標）Vista（商標）オペレーティング・システムのNET_BUFFERまたはNET_BUFFER_LISTデータ構造）に格納するとよい。このデータ構造（またはその中に格納するタイムスタンプ情報）は、ネットワーク通信スタック１１０に受け渡すまたはこれにアクセス可能とすることができる。以下で更に詳しく説明するが、タイムスタンプ情報は、ネットワーク接続上でネットワーク輻輳を判定するために用いることができる。
【００３０】
オペレーティング・システム１０４は、１つ以上の送信制御データ構造１０６、ネットワーク通信スタック１１０、その他のコンポーネント、および前述のあらゆる適した組み合わせのうち、任意のものを含むことができる。ネットワーク通信スタック１１０は、例えば、ＴＣＰ／ＩＰスタックのように、種々の形式のネットワーク通信スタックの任意のものでよい。ネットワーク通信スタック１１０は、パケット１２０を受信し、パケット１２０を受信した（そしてパケットを送信する）接続を制御するように構成することができる。図１には示されておらず、本出願では全く論じないが、ネットワーク通信スタック１１０は、例えば、ネットワーク・インターフェース・モジュール１２２を通じて、パケットをネットワーク１２８に送信するように構成してもよいことは認められよう。
【００３１】
スタック１１０は、１つ以上の送信制御データ構造１０６を利用して、ネットワーク・デバイス１０２とネットワーク１２８との間における接続を制御することができる。例えば、接続毎に、別個の送信制御データ構造１０６を用いて、当該接続に関する情報（例えば、状態情報）を格納および更新することができ、スタック１１０はその情報を用いて、接続上における通信を制御することができる。送信制御データ構造１０６は、例えば、送信制御ブロック（ＴＣＢ）のような、種々の形式のデータ構造の任意のものでよく、または任意のものを含むことができる。トランスポート制御データ構造１０６は、オペレーティング・システム１０４内に常駐するように示されているが、本発明はそのように限定されるのではない。このような構造は、ネットワーク・インターフェース・モジュール１２２を含む、ネットワーク・デバイス１０２の種々の場所の任意のものに常駐することもできる。
【００３２】
スタック１１０は、１つ以上のトランスポート制御イベントを検出および／または判定し、それに応じて１つ以上の送信制御データ構造１０６を更新し、および／またはこれら１つ以上のトランスポート制御イベント１１２を１つ以上のＣＣＭ１１６に報告するように構成することができる。これらのイベントは、以下のうちの任意のものを含むことができる。接続における再送信時間切れ、復路時間の変化、新しいデータ承認、二重承認の受信、新しいデータ・パケットの送出、その他のトランスポート制御イベント、または前述のあらゆる適した組み合わせ。
【００３３】
典型的なトランスポート・レイヤ（レイヤ４）プロトコル（例えば、ＴＣＰ）では、ネットワーク・デバイス（例えば、受信側）が接続上でデータを受信すると、そのデータを送ったネットワーク・デバイスに応答する（例えば、送出元に承認（即ち、ＡＣＫ）によって）。再送信時間切れが送出元（例えば、ネットワーク・デバイス１０２）において接続に対して発生するのは、当該接続上で送出元が以前に送ったデータに対する承認メッセージが、既定の時間量以内の内に受信側から受信されなかったときである。再送信時間切れが発生した結果、時間切れとなったデータを再送信することができる。
【００３４】
往復時間（ＲＴＴ）は、発送元がデータを別のエンティティに送ったときと、発送元が、データを受信した別のエンティティから承認を受信したときとの間に経過する時間量である。ＲＴＴ情報は、タイマを再送信時間切れに合わせて設定するために用いることができる。例えば、接続上におけるネットワーク輻輳の増大または減少の結果、所与の接続に対するＲＴＴが変化するときに、ＲＴＴ変更が発生する。
【００３５】
ネットワークを通じて送出元と受信側との間でデータを送信する場合、データを複数の断片、即ち、バイト集合体に分割することが多く、これらのバイト集合体をパケット単位で送る。データの断片は、これらを最初に配列した順序で送信するが、データの断片（およびこれらを収容するパケット）は、受信において異なる順序で到達する可能性がある。
【００３６】
例えば、ＴＣＰのような典型的なトランスポート・レイヤ・プロトコルは、断片の順序を追跡し、受信側においてどの断片が受信されたかを追跡し、断片をしかるべき順序に組み立て直す。受信側は、パケットの送出元に承認を送り、受信したデータの断片がどれであるかを示し、これらの断片が未だ受信されていないことを示す場合もある。例えば、データを断片１から９０に分割する場合を考える。このデータの受信側が１つのパケットにおいて断片１から２０を受信し、別のパケットにおいて３１から６０を受信し、第３パケットにおいて６１から９０を受信した場合、これらのパケットの１つを受信する毎に、承認を発送元に送ることができる。承認は、どの断片を受信したかを示し、どのデータの断片を未だ受信していないかも示す場合もある。例えば、受信側は、断片１から２０を含む第１パケットを受信し、断片１から２０を受信したことを示す承認を送ることができる。次いで、断片３１から６０を含むパケットを受信し、１から２０および３１から６０を受信したが、断片２１から３０を受信していないことを示す承認を送ることができる。断片６１から９０を含む別のパケットを受信し、１から２０および３１から９０を受信したが、２１から３０を受信していないという承認を送ることができる。つまり、発送元は、受信側が断片２１から３０を未だ受信していないことを示す多数の承認を、受信側から受信することになる。
【００３７】
トランスポート・レイヤ・プロトコルによれば、新しいデータ承認は、特定のデータの断片に対して発送元が受信する第１の承認即ち最初の承認であり、データの断片が受信側によって受信されたことを示す。
【００３８】
重複承認とは、データの特定の断片が受信側によって受信されていないことを示す第１承認以外のあらゆる承認のことである。重複承認の受信は、受信側が受信したデータにおける孔（例えば、断片２１から３０）を示す可能性がある。
【００３９】
ネットワーク通信スタック１１０は、ネットワーク・インターフェース・モジュール１２２から受信したパケット１２０内にある関連情報を検査することによって、これら１つ以上のトランスポート制御イベントおよびその他のイベントを検出するように構成することができる。即ち、パケット１２０のコンテンツを１つ以上のアプリケーション１０８に受け渡す前にパケット１２０を処理することに加えて、スタック１１０は、これらのパケット内にある情報を検査して、そのトランスポートを制御することができ、これらのパケットを送信する接続上での輻輳を制御することを含む。実施形態の中には、スタック１１０はそれが受信するパケットの全てからの情報をサンプルしなくてもよい場合もある。このサンプリングは、接続毎にそれぞれのＣＣＭ１１６によって維持するために必要な状態情報の量を削減するために実行することができる。接続毎のサンプリング・レートは、送信レートおよび接続のＲＴＴに基づいて決定することができる。このようなサンプリングは、図４から図７に関して以下で更に詳しく説明するように実行するとよい。
【００４０】
ここで用いる場合、「輻輳制御モジュール」即ち「ＣＣＭ」は、１つ以上の接続上で輻輳を制御するためのＣＣＡを定めるソフトウェア・アブストラクションのことである。各ＣＣＭ１１６は、ネットワーク・デバイス１０２とネットワーク１２８上のエンティティとの間の１つだけの接続に対応することができ、各ＣＣＭは特定のタイプのＣＣＡを実施することができる。ネットワーク通信スタック１１０は、ＣＣＭ１１６に、ＣＣＭが輻輳を制御している接続に対するトランスポート制御イベントを報告することができる。ＣＣＭ１１６は、接続に対する接続状態変数を維持することができ、トランスポート制御イベントに応答して、これらの状態変数を更新することができる。ＣＣＭは状態変数の更新値をネットワーク通信スタック１１０に供給することができ、スタックはそれに応じてその接続の制御を修正することができる。所与の接続の寿命の間、ＣＣＭ１１６には接続を制御するためにメモリの一部を割り当てることができ、このメモリの一部は、スタック１１０および送信制御データ構造１０６には不透明のままにしておくことができる。このメモリの一部は、ＣＣＭが所有し、接続上の輻輳を制御するために用いられる接続状態変数を追跡し更新するために用いることができる。
【００４１】
ネットワーク通信スタック１１０は、所与の接続に対する輻輳を制御するために、多数の利用可能なＣＣＭ１１６から１つを選択するように構成することができる。この選択は、限定ではく、ネットワーク環境、接続経路特性、接続リンク特性、アプリケーション１０８のソケット・パラメータの値、その他の要因、および前述のあらゆる適した組み合わせを含む種々の要因の任意のものに基づくことができる。即ち、ＣＣＭ１１６は、スタック１１０によって接続毎に選択し実装することができ、多数のＣＣＭ１１６が同時に動作することができる。これらのＣＣＭの各々は、異なるタイプでもよく、あるいはこれらのＣＣＭの２つ以上が同じタイプでもよい（例えば、同じタイプのＣＣＡを実行する）。
【００４２】
本発明の実施形態によっては、Windows（登録商標）のある種のバージョン（例えば、Windows（登録商標）Vista（商標）をオペレーティング・システムとして採用する場合、ネットワーク・プログラミング・インターフェース（ＮＰＩ）が設けられることがある。ＮＰＩは、ネットワーク・デバイス（例えば、デバイス１０２）とネットワーク（例えば、１２８）との間においてネットワーク・インターフェースを展開し構成する際に補助することができる。ＮＰＩは、１つ以上のＣＣＭ１１６のネットワーク通信スタック１１０との連携を可能にするデータ構造（例えば、ネットワーク・モジュール・レジストラ（ＮＭＲ））を設けることができる。例えば、スタック１１０（例えば、Windows（登録商標）Vista（商標）におけるtcp.sysドライバ）は、ＣＣＭクライアントとして登録することができ、１つ以上のＣＣＭ１１６はＣＣＭ「プロバイダ」として登録することができる。ＮＭＲの使用を含む、Windows（登録商標）Vista（商標）のＮＰＩについては、http://msdn.microsoft.com/libraryにおけるMicrosoft Developers Network (ＭＳＤＮ)ライブラリの中で、以下のディレクトリにおいて更に詳しく説明されている。デバイスおよびドライバ技術／ネットワーク／ウィンドウズ（登録商標）・コードネーム・ロングホーン・ネットワーキング(Device and Driver Technologies/Network/Windows Codename Longhorn Networking)。
【００４３】
本発明の実施形態によっては、ＣＣＭタイプ・アブストラクションを用いてＣＣＭを発生する（例えば、インスタンス化する）ことができる。ＣＣＭタイプ・アブストラクションは、１つ以上の既定のソフトウェア・アブストラクション（例えば、オブジェクト・タイプ）を用いて定めることができ、ソフトウェア・アブストラクションは、図２に関して以下で説明するように、例えば、ＣＣＭ  ＡＰＩによって提供することができる。
【００４４】
図２は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御するためのＣＣＭタイプを定めるシステム２００の一例を示すブロック図である。システム２００は、ＣＣＭタイプを定めるシステム２００の例示的な実施形態に過ぎず、本発明の範囲を限定することは意図していない。このようなシステムの多数の別の実施形態の任意のもの、例えば、システム２００の変形も可能であり、本発明の範囲に該当することを意図している。
【００４５】
以下の説明から更に明白となろうが、本発明の実施形態によっては、システム２００のみで、および／またはシステム１００との組み合わせで、以下のプロパティの１つ以上を設けることができる。種々のタイプのＣＣＡの任意のものを実装する容易な方法、ＴＣＰコードを見る必要なく誰でも（例えば、プログラマまたは開発者）ＣＣＡを書く能力、接続毎に、例えば、ネットワーク環境、経路、および／またはリンク特性に基づいて、ソケット・オプション等を通じて複数の利用可能なＣＣＭからＣＣＭを選択する能力、どの位の量のデータを接続上に送るか制御する能力、およびどのタイプのデータを接続に送るか制御する能力。
【００４６】
システム２００は、ソフトウェア開発環境２０２、ＣＣＭアプリケーション・プログラミング・インターフェース（ＡＰＩ）２０４、その他のコンポーネント、または前述のあらゆる適した組み合わせの任意のものを含むことができる。ここで用いる場合「アプリケーション・プログラミング・インターフェース」即ち「ＡＰＩ」とは、機能および／またはデータ・タイプを定めて、このような機能および／またはデータ・タイプをアプリケーション・プログラムと共にコンピュータ上で実行するように構成することができるようにするコンピュータ読み取り可能命令の１つ以上の別の集合に対するアクセスを与える１つ以上のコンピュータ読み取り可能命令の集合のことである。ＡＰＩは、アプリケーション・プログラムと個々のコンピュータ環境またはプラットフォーム（例えば、この中で論ずるものの任意のもの）との間における「グルー」(glue)と見なすことができ、１つ以上の特定のコンピュータ・プラットフォーム上または１つ以上の特定のコンピュータ環境において走るようにアプリケーションをプログラムすることを、プログラマに可能にすることができる。
【００４７】
ＣＣＭタイプは、少なくとも部分的に、ＣＣＭ  ＡＰＩ２０４を用いて、ソフトウェア開発環境２０２において展開することができ、ＣＣＭ  ＡＰＩ２０４は、ネットワーク・デバイス（例えば、１０２）のオペレーティング・システム（例えば、１０４）によって供給することができる。本発明の実施形態によっては、ＣＣＭ  ＡＰＩ２０４は、例えば、Windows（登録商標）Vista（商標）のようなオペレーティング・システムのＮＰＩの一部であってもよく、または一部として含まれていてもよい。
【００４８】
ＣＣＭ  ＡＰＩ２０４は、１つ以上のＣＣＡアブストラクション２０５、１つ以上のトランスポート制御イベント・アブストラクション２０６、その他のコンポーネント、または前述のあらゆる適した組み合わせの任意のものを含むことができる。各トランスポート制御イベント・アブストラクション２０６は、例えば、前述のトランスポート制御イベントの任意のものというような、特定のトランスポート制御イベントを定めることができる。更に、ＣＣＭ  ＡＰＩ２０４は、１つ以上のＣＣＡアブストラクション２０５も設けることができる。各ＣＣＡアブストラクションは、例えば、デフォルトＣＣＡ、NewReno、ＣＴＣＰ、ＨＳＴＣＰ、ＢＩＣ、Ｆａｓｔ、その他のタイプのＣＣＡ、または前述のあらゆる適した組み合わせというような、特定のタイプのＣＣＡを定めることができる。
【００４９】
つまり、ＣＣＭ  ＡＰＩは、１つ以上のＣＣＡアブストラクション２０５、１つ以上のトランスポート制御イベント・アブストラクション２０６、および１つ以上のＣＣＭを発生することができる１つ以上のＣＣＭタイプ・アブストラクション２０８を定めるためにソフトウェア開発環境２０２によって用いることができる情報を定めるその他のアブストラクションを露出することができる。例えば、Windows（登録商標）Vista（商標）を採用する実施形態によっては、１つ以上のＣＣＭタイプは、ＮＭＲに登録することによって、１つ以上のアブストラクション２０５および２０６と結合することができる。このような実施形態では、ネットワーク通信スタック１１０（例えば、tcpip.sys）はＣＣＭクライアントとして登録することができ、多数のＣＣＭタイプ・アブストラクション２０８はＮＭＲを用いてスタック１１０に登録することができる。
【００５０】
本発明の実施形態によっては、ＣＣＭ  ＡＰＩ２０４およびソフトウェア開発環境２０２は、システム２００が提供するＣＣＭフレームワークの一部であってもよく、ＣＣＭタイプを展開する際に補助するために用いることができる。ここで用いる場合、「フレームワーク」とは、アプリケーションを構築する際に補助となる１つ以上の既定のソフトウェア・コンポーネント（例えば、アブストラクションおよび／または具体的なクラスのオブジェクト指向プログラミング言語）を含む再利用可能な設計構造のことである。つまり、「ＣＣＭフレームワーク」は、ＣＣＭタイプ・アブストラクションを構築する際に補助となる、１つ以上の既定のソフトウェア・コンポーネント（例えば、ＣＣＡアブストラクション２０５、トランスポート制御イベント・アブストラクション２０６、その他のアブストラクション、および前述のあらゆる適した組み合わせ）を含む再利用可能な設計構造である。
【００５１】
本発明の実施形態によっては、トランスポート制御イベント・アブストラクション２０６およびトランスポート制御イベントと関連のある情報を定めるアブストラクションは、Ｃプログラミング言語を用いて定められる。このようなアブストラクションは、限定ではなく、以下の任意のものを含むことができる。
【００５２】
【表１−１】
2009534937.tif 000003
【００５３】
【表１−２】
2009534937.tif 000004
【００５４】
尚、他のイベントおよび関係する情報を定めるその他のアブストラクションもＣＣＭ  ＡＰＩ２０４によって供給することができ、時と共にＡＰＩから除去することまたはＡＰＩに加入することができることは認められよう。
【００５５】
更に、本発明の実施形態によっては、ＣＣＭ  ＡＰＩ２０４によって露出される１つ以上のＣＣＡアブストラクションは、Ｃプログラミング言語を用いて定められる場合もある。このようなアブストラクションは、限定ではなく、以下の任意のものを含むことができる。
【００５６】
【表２】
2009534937.tif 000005
【００５７】
尚、他のＣＣＡおよび関係する情報を定めるその他のアブストラクションも、ＣＣＭ  ＡＰＩ２０４によって供給することができ、時と共にＡＰＩから除去することまたはＡＰＩに加入することができることは認められよう。Windows（登録商標）Vista（商標）を採用する実施形態では、ＣＣＭタイプ・アブストラクション２０８は、前述のＣＣＡの１つを実装するために登録することができる。例えば、ＣＣＭタイプ・アブストラクションは、少なくとも部分的に、Ｃプログラミング言語で定めた以下のアブストラクションを用いて、定めることができる。
【００５８】
【表３】
2009534937.tif 000006
【００５９】
実施形態によっては、Ｃプログラミング言語を採用する場合、ＣＣＭタイプ・アブストラクションは、ＣＣＭの初期化および浄化(cleanup)のための関数を定める以下のアブストラクションのうち１つを用いることができる。
【００６０】
【表４】
2009534937.tif 000007
【００６１】
システム１００および／または２００ならびにそのコンポーネントは、ソフトウェア（例えば、Ｃ、Ｃ＃、Ｃ＋＋、Ｊａｖａ（登録商標）、またはその組み合わせ）、ハードウェア（例えば、１つ以上の特定用途集積回路）、ファームウェア（例えば、電子的にプログラムしたメモリ）、またはそのあらゆる組み合わせを含む、種々の技術の任意のものを用いて実装することができる。システム１００および／または２００のコンポーネントの１つ以上は、１つのデバイス（例えば、コンピュータ）上に常駐することができ、あるいは１つ以上のコンポーネントが別個の離散デバイス上に常駐することもできる。更に、各コンポーネントを多数のデバイスに跨って分散することもでき、デバイスの１つ以上を相互接続することもできる。
【００６２】
更に、システム１００または２００の１つ以上のコンポーネントを含む１つ以上のデバイスの各々において、コンポーネントの各々は当該システムの１箇所以上の場所に常駐することもできる。例えば、これらのシステムのコンポーネントの異なる部分が、デバイス上においてメモリ（例えば、ＲＡＭ、ＲＯＭ、ディスク等）の異なるエリアに常駐することもできる。このような１つ以上のデバイスの各々は、コンポーネントの中でもとりわけ、１つ以上のプロセッサ、メモリ・システム、ディスク記憶システム、１つ以上のネットワーク・インターフェース、および１つ以上のバスまたは種々のコンポーネントを相互接続するその他の内部通信リンクのような、複数の既知のコンポーネントを含むことができる。システム１００および／または２００、ならびにそのコンポーネントは、図８および図９に関して以下で説明するようなコンピュータ・システムを用いて実装することができる。
【００６３】
図３は、本発明の一部の実施形態にしたがってネットワーク接続上で輻輳を制御する方法３００の一例を示すフローチャートである。方法３００は、ネットワーク接続上で輻輳を制御する方法の例示的実施形態に過ぎず、本発明の範囲を限定することは意図していない。多数のその他の実施態様、例えば、方法３００の変形も可能であり、本発明の範囲に該当することを意図している。
【００６４】
行為３０２において、システム１００に関して先に説明したように、輻輳制御のタイプを、例えば、ネットワーク通信スタック（例えば、スタック１１０）によって選択することができる。
【００６５】
行為３０４において、選択したタイプのＣＣＭを発生することができ（例えば、ＣＣＭタイプ・アブストラクション２０８から）、行為３０６において、発生したＣＣＭを用いて、接続上のネットワーク輻輳を制御することができる。行為３０４および３０６の各々は、システム１００および２００に関して先に説明したように実行することができる。
【００６６】
接続の存続中、行為３０８において、システム１００に関して先に説明したように、発生した輻輳制御モジュールに、例えば、スタック１１０によって１つ以上のトランスポート・イベントを通知することができる。
【００６７】
行為３１０において、１つ以上の接続状態変数の値を、１つ以上のトランスポート・イベントに基づいて（例えば、発生したＣＣＭによって）更新することができ、行為３１２において、ネットワーク通信スタックに、例えば、システム１００に関して先に説明したように、１つ以上の接続状態変数の更新値を通知することができる。
【００６８】
接続の制御は、例えば、システム１００に関して先に説明したように、１つ以上の接続状態変数の更新値に基づいて、行為３１４において（例えば、スタック１１０によって）更新することができる。
【００６９】
方法３００は、追加の行為を含むこともできる。更に、方法３００の一部として実行する行為の順序は、図３に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および／または１つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為３０８〜３１４のいずれでも、他の接続に対する行為のいずれの実行とも同時に、１つ以上のイベントまたは変数について実行することができる。
【００７０】
ネットワーク通信スタック１１０は、例えば、遅延主体ＣＣＡを実施する一部として、トランスポート制御イベントを記録する際に大量のメモリを消費する場合がある。即ち、接続毎に膨大な量の状態情報を維持する場合があり得る。
【００７１】
本発明の実施形態によっては、１つ以上の接続において送信および／または受信するパケット全て未満からの情報をサンプリングすることによって、接続毎に状態情報によって消費されるメモリ量を削減する。全てのパケット未満からの情報をサンプルしつつ、例えば、接続に対するＲＴＴの変化を検出することによって、適時に輻輳を検出することができる程の高いサンプリング・レートをなおも維持することができる。サンプリング・レートが低すぎると、輻輳の判定が遅すぎて、ボトルネック・バッファのオーバーフローを防止するために接続における情報の送信を修正できなくなる虞れがある。
【００７２】
本発明の実施形態によっては、接続のサンプリング・レートは、当該接続の帯域幅−遅延の積（ＢＤＰ）、即ち、接続の接続速度と接続のＲＴＴの積（即ち、速度×ＲＴＴ）に基づく。つまり、接続速度を１秒当たりのメガバイト単位（Ｍｂｐｓ）で表し、ＲＴＴを秒単位で表すと、ＢＤＰはビットまたはバイト単位で表すことができる。接続に対する輻輳枠(congestion window)は、接続のＢＤＰに基づいて決定することができる。ここで用いる場合、「輻輳枠」とは、いずれの所与の時点においても所与の接続に対して「伝送する」ことが許容される最大データ量のことである。例えば、輻輳枠は、接続に対して１）送信し終えた、および２）承認が未だ受信されていない、パケットの最大数を定めることができる。ネットワーク通信スタック（例えば、１１０）は、伝送パケットの１つに対して承認が受信されるまで接続に対する最大許容パケット数以下（即ち、輻輳枠以下）が伝送するように、接続上におけるデータの送信を制御するために輻輳制御枠の値を利用するように構成することができる。
【００７３】
以下の表１は、ＲＴＴが１００ｍｓである接続について、１）接続に対する状態情報を維持するために消費するメモリ量、および２）適時に接続上での輻輳を識別する能力の容認できる均衡を得るために、発明者が実験によって決定したサンプリング・レートを示す。サンプリング・レートとは、ラウンド毎に、情報をサンプリングする接続において、送信されるパケット数である。「ラウンド」とは次のように定める。データを丁度送信し始めた接続について考える。データの第１断片（即ち、「セグメント」）に対する承認（即ち、「ＡＣＫ」）の受信に応答して、送信されたがＡＣＫが未だ受信されていないデータの最後のセグメントのシーケンス番号（以下で説明する。または別の識別子）を記録することができる（例えば、「RoundEnd」と呼ばれる変数に）。この最後のセグメントに対するＡＣＫを受信したときに、ラウンドは終了する。
【００７４】
表１の第１列は、接続の速度を示す。第２列は、ＲＴＴ＝１００ｍｓ、および第１列に定めた接続速度の場合に、接続に対して定めた輻輳窓（パケット単位）を示す。第３列は、実験的に決定した、ラウンド当たりのサンプリングしたパケット単位とした、容認可能なサンプリング・レートを定める。例えば、第３行は、接続速度が１Ｇｐｂｓ、ＲＴＴが１００ｍｓの場合に、輻輳枠を８，３３３パケットとしたときに、ラウンド当たり１２８パケットのサンプリング・レートが容認可能であると判断したことを示す。尚、本発明は、表に示す値に限定されるのではなく、他の値も使用可能であり本発明の範囲に該当することを意図していることは認められよう。
【００７５】
【表５】
2009534937.tif 000008
【００７６】
図４は、本発明の一部の実施形態による、接続速度およびＲＴＴのある種の組み合わせに対して、接続のサンプリング・レートの一例を示す表４００である。尚、本発明は、図５に示す値に限定されるのではなく、他の値も使用可能であり本発明の範囲に該当することを意図していることは認められよう。
【００７７】
列４０４におけるサンプリング・レートは、前述の表１の第３列に示したサンプリング・レートに対応する。列４０６〜４１２は、所与の接続速度に対して、指定したサンプリング・レートがＲＴＴの関数であることを示す。所与の接続速度（即ち、所与の行）に対して、表４００において位置が右側にある程、高いＲＴＴに対応し、これに対応して高いサンプリング・レートが指定され、サンプリング・レートは、接続速度およびＲＴＴには関係なく、毎秒２５６パケットで頭打ちとなる。
【００７８】
本発明の実施形態によっては、輻輳を制御するための情報をサンプリングする目的で、メモリ・プール(pool)をネットワーク・デバイス上における多数の（例えば、全ての）接続間で共有するか、または多プロセッサの実施形態では、所与のプロセッサに対する多数の（例えば、全ての）接続によって共有する。このプールは、固定サイズであってもよく、メモリ・プールからのスロットを、必要に応じて、接続に割り当てたり、割り当てを解除することができる（例えば、ネットワーク通信スタック、例えば、１１０によって）。即ち、ある接続に割り当てられるメモリ・プールからのメモリ量（即ち、スロット数）は、当該接続上で現在送信および／または受信しているデータに基づくことができる。ここで用いる場合、「交換」という用語は、送信および／または受信を意味する。つまり、各接続に割り当てられるメモリ量は、単に計算した接続のＢＤＰだけに基づくのではなく、接続上で実際に交換されるデータ量に基づくのである。
【００７９】
例えば、バースト状接続は、その輻輳枠を大きな値（即ち、接続に対するＢＤＰに等しい値）に増大することができ、その結果、プールから割り当てられるメモリを増加させることができる。しかしながら、接続は、そのデータ交換レートを維持していなければ、即ち、その輻輳枠が定める量の伝送データを維持しなければ、増大した量のメモリを継続して割り当てられることはない。
【００８０】
この必要に応じて輻輳制御の目的で接続間でメモリ・プールを共有する技法は、実際に接続上で交換されるデータに関係なくメモリを接続に予め割り当てる（例えば、純粋にＢＤＰに基づいて）よりも、効率的なメモリの使用となる。
【００８１】
本発明の実施形態によっては、以下のデータ構造を用いてサンプルを定めることもできる。
【００８２】
【表６】
2009534937.tif 000009
【００８３】
そして、次のデータ構造は、接続上で輻輳を制御する目的で、パケットからサンプリングした情報を記録し追跡するために用いることができる。
【００８４】
【表７】
2009534937.tif 000010
【００８５】
以上のデータ構造定義は、図５に示すデータ構造を構成するために用いることができる。図５は、本発明の一部の実施形態にしたがって、接続上で受信したパケットからサンプリングした情報を格納するデータ構造５００の例を示すブロック図である。図５は、接続上で受信したパケットからサンプリングした情報を格納するデータ構造の例示的な実施形態に過ぎず、本発明の範囲を限定することは意図していない。他のデータ構造、例えば、構造５００の変形も用いることができ、本発明の範囲に該当することを意図している。
【００８６】
データ構造５００は、円形バッファとすることができ、メモリ・スロット５０２および５１２を含む多数のメモリ・スロットを含むことができる。各メモリ・スロットは、例えば、それぞれスロット５０４〜５０８および５１４〜５１８のような複数（例えば、３２）のスロットを含む。インデックス５２０（「SndNext」）は、接続に割り当てられたメモリにおいて、サンプリングされた情報が格納される次の位置を示す。インデックス５１０（「RcvNext」）は、サンプリングした情報を含む次のエントリを示し、このサンプリングした情報に対応するＡＣＫを待っている（例えば、ＡＣＫが未だ受信されていない最も早いエントリ）。例えば、エントリ５０６は、情報片を含むパケットが接続上で送信されたときに、その情報片に対して発生されたタイムスタンプを既に含むことができる。この情報片に対して、ＡＣＫは未だ受信されていないが、次に受信されることが予期されている。この情報片に対応するＡＣＫが受信されると、パケットのタイムスタンプをエントリ５０６に加入することができる。このエントリに現在含まれる２つのタイムスタンプ間の差は、情報片に対するＲＴＴを決定するために用いることができる。このＲＴＴは、輻輳制御イベントであるＲＴＴの変化を判定するために用いることができ、接続のＣＣＭに報告することができ、以下に説明するように、メモリ割り当てに変化が生ずる可能性がある。
【００８７】
インデックス５１０および５２０は、所与の時点における接続に対する、伝送データの量を判定するために用いることができる。例えば、所与の時点における接続に対する、伝送データの量は、RttSampleTable[SndNext].Seq - RttSampleTable[RcvNext].Seqとして決定することができる。
【００８８】
接続に割り当てられる実際のサンプル数を監視するために、接続毎に２つの変数、ActualSamplesおよびAssignedSamplesを用いることができる。ActualSamplesは、実際に接続に割り当てられる正確なブロック数を追跡することができる。AssignedSamplesは、接続が潜在的に用いることができる量であり、接続に対する輻輳ウィンドウに基づくことができる。しかしながら、接続が実際に輻輳枠に値するデータを送ろうとしなければ、メモリは実際には割り当てられない（そして、ActualSamplesによって反映されない）。AssignedSamplesは、常に、>=ActualSamplesとなる。
【００８９】
接続が作成されたときに、３２サンプルのブロックを１つ、この接続に割り当てることができ（例えば、デフォルトで）、AssignedSamplesをActualSamplesに等しくセットすることができる。即ち、双方共１に等しくセットすればよい（即ち、１データ・ブロック）。
【００９０】
データが接続に送られるに連れて、インデックス５１０および５２０は、伝送データ量、例えば、RttSampleTable[SndNext].Seq-RttSampleTable[RcvNext].Seqを追跡することができる。データ構造５００内においてサンプルを格納する次のエントリは、割り当てたサンプルに基づいて決定することができ、例えば、(SndNext+1)% AssignedSamples * CTCP_DWND_RTT_SAMPLES_NUMとなる。この計算値がActualSamples * CTCP_DWND_RTT_SAMPLES_NUMよりも大きい場合、メモリ・プールから新しいブロック（例えば、別の３２サンプル・エントリ）を割り当てることができ、ActualSamplesの値を１だけ増大させることができる。新しいブロックの割り当てをし損ねた場合、AssignedSamplesをActualSamplesに等しくセットし、インデックス５２０の値（「SndNext」）を再計算することができる。
【００９１】
データ構造５００が満たされた場合（即ち、実際に接続に割り当てられたメモリ量が割り当てメモリ量と一致した場合）、サンプルを記録することができない。
【００９２】
サンプルは、所与の接続に対するサンプリング・レートが許す限り（そして、プール内においてメモリ空間が未だ利用可能であれば）、記録することができる。例えば、表１および図４によれば、接続に対する接続速度（即ち、帯域幅）が１Ｇｂｐｓであり、ＲＴＴが現在１００ｍｓにセットされている場合、ラウンド当たり、即ち、輻輳枠あたり１２８サンプル（例えば、４ブロックのメモリ空間に相当する）サンプリングすることができる。
【００９３】
各ラウンドの終点において、１つ以上のイベントを実行することができる。先に注記したように、ラウンドが終了するのは、ラウンドの最後のセグメントに対するＡＣＫが受信されたときである。例えば、ラウンドが終了するとき、輻輳枠を再計算することができ、サンプリング・レートを（再計算した輻輳ウィンドウ）%AssignedSamples * CTCP_DWND_RTT_SAMPLES_NUMとして再構成することができる。
【００９４】
更に、ラウンドが終了するとき、接続に割り当てられたが解放してメモリ・プールに戻すことができる未使用エントリがあるか否か、データ構造５００から判断することができる。この判断は、インデックス５１０および５２０がデータ構造５００の中のどこに位置するかに基づくとよい。例えば、特定のブロック（例えば、５０２または５１２）に対して、５１０および５２０双方がブロックの中にない場合、ブロックを解放することができる（そして、通信状態変数を調節し直すことができる）。５１０および５２０が同じブロックの中にある場合、データ構造５００の中に、このようなブロックに続くブロックがあれば、その全てを解放することができる。データ構造５００が円形バッファである実施形態では、データ構造５００におけるインデックス５２０（「SndNext」）の位置を突き止め、インデックス５１０（「RcvNext」）が指し示すエントリを有するブロックまで、後続のブロック全てを削除するという別の技法もある。
【００９５】
前述のメモリ割り当て／割り当て解除技法を用いる際、接続が常にその輻輳枠に相応のデータ量を送信している場合、メモリ・プールの割り当てメモリ（例えば、データ構造５００のブロック）を解放しない。それ以外の場合、未使用のメモリ空間は、メモリ・プールに戻し、他の接続が用いることができる。
【００９６】
図６は、本発明の実施形態の一部にしたがって、例えば、前述のＲＴＴサンプリングの論述に基づいて、ネットワーク接続上で輻輳を制御する方法６００の一例を示すフロー・チャートである。尚、方法６００は、ネットワーク接続上で輻輳を制御する方法の例示的実施形態に過ぎず、本発明の範囲を限定することは意図していない。このような方法の多数のその他の実施態様、例えば、方法６００の変形も可能であり、本発明の範囲に該当することを意図している。
【００９７】
行為６０２において、接続上において受信したパケットからの情報をサンプリングするレートを、接続の送信レート、および接続の往復時間に少なくとも部分的に基づいて、例えば、前述のように、決定する。
【００９８】
行為６０４において、決定したサンプリング・レートに基づいて、メモリ・プールの一部（例えば、データ構造５００の１つ以上のブロック）を、接続に割り当てることができる。
【００９９】
行為６０６において、接続上で受信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、行為６０８において、サンプリングした情報を、例えば、構造５００のエントリにおけるメモリの割り当て部分に格納することができる。更に、行為６０７において、接続上において受信した着信パケットから情報をサンプリングすることができる。これらのパケットは行為６０６においてサンプリングしたパケットに対応し、この情報を割り当てメモリに格納することができる。例えば、前述のように、情報片（即ち、セグメント）のタイムスタンプを、データ構造５００のエントリに格納することができる。後に、この情報片に対するＡＣＫを含むパケットを受信したときに、このパケットのタイムスタンプを同じエントリに格納するとよい。
【０１００】
行為６１０において、ネットワーク接続上における輻輳を、少なくとも部分的に、サンプリングした情報に基づいて制御することができる。例えば、前述のように、情報片のＲＴＴを、情報片に対してサンプリングした２つのタイムスタンプに基づいて判定し、このＲＴＴを用いて輻輳を制御することができる。例えば、ラウンドの終点において、接続のＲＴＴが変化したことを判定することができ、これを対応するＣＣＭに報告することができ、ＣＣＭは、前述のように、それに応じて接続上における輻輳のその制御を修正することができる。
【０１０１】
行為６１０から行為６０２を指し示す矢印によって示すように、接続上における輻輳の制御、および接続に割り当てられたメモリ・プールのメモリ量は、サンプリングした情報に基づいて調節することができる。
【０１０２】
方法６００は、追加の行為を含むこともできる。更に、方法６００の一部として実行する行為の順序は、図５に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および／または１つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為６０２〜５１０のいずれでも、他の接続に対して現在実行している行為６０２〜５１０のいずれとでも同時に、１つの接続について実行することができる。
【０１０３】
オペレーティング・システムの中には、当該オペレーティング・システム上においてアプリケーションが用いることができる連続カウント(running count)を設けるＡＰＩを備えている場合もある。例えば、Microsoft Corporationから入手可能なオペレーティング・システムの一部は、KeQueryPerformanceCounterと呼ばれるＡＰＩを備えており、このＡＰＩは、オペレーティング・システム上で入手可能な最も粒度が細かい連続カウントを設ける。しかしながら、このＡＰＩをコールすることは非常に重荷であり、これを頻繁にコールし過ぎると、オペレーティング・システムが常駐するネットワーク・デバイスの性能が低下する可能性がある。
【０１０４】
したがって、本発明の実施形態によっては、着信パケット（例えば、１２６）のタイムスタンプ（例えば、タイムスタンプ１１８）は、オペレーティング・システム（例えば、１０４）および、パケットを受信したネットワーク・デバイス（例えば、１０２）のネットワーク通信スタック（例えば、１１０）とは別個のネットワーク・インターフェース・モジュール上で（例えば、モジュール１２２のタイムスタンプ発生器１２４によって）発生する。タイムスタンプは、接続のＲＴＴを判定するために用いることができ、接続上で輻輳を制御するために用いることができる。これについては、以下で更に詳しく説明する。
【０１０５】
タイムスタンプは、ネットワーク・インターフェース・モジュール上において、パケットを受信した時刻にできるだけ近く取り込むとよく、以下で更に詳しく説明するように、ネットワーク通信スタック１１０に利用可能としたデータ構造の中に含めるとよい。つまり、ネットワーク・インターフェース・モジュールにおいて受信したパケット毎に、タイムスタンプを記録することができる。これは、オペレーティング・システムが発生するタイムスタンプよりも正確に、パケットを受信した時刻を反映する。つまり、ネットワーク・インターフェース・モジュールにおいてパケットを受信したときと、それをネットワーク通信スタックに送ったときとの間に遅延があっても、タイムスタンプは、それでもなお、パケットが実際にネットワーク・デバイス上で受信されたときを正確に示す。更に、オペレーティング・システムのリソースは、タイムスタンプを発生する負担から解放され、ネットワーク・デバイス上で輻輳を制御する解決策を一層経済的に提供することができる。
【０１０６】
図７は、本発明の一部の実施形態にしたがって、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する方法７００を示すフローチャートである。ネットワーク・デバイスは、ネットワーク通信スタックと別個のネットワーク・インターフェース・コンポーネントとを備えている。
【０１０７】
行為７０２において、例えば、前述のネットワーク・インターフェース・モジュール１２２において、ネットワークから接続上でパケット（例えば、１２６）を受信することができる。
【０１０８】
パケットを受信した時刻に対応するタイムスタンプ（例えば、１１８）を、行為７０４において、例えば、モジュール１２２のタイムスタンプ発生器１２４によって発生することができる。
【０１０９】
行為７０６において、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納することができる。例えば、Windows（登録商標）Vista（商標）オペレーティング・システムを採用する本発明の実施形態では、行為７０６は、タイムスタンプをパケットと関連付ける情報を、NET_BUFFERおよび／またはNET_BUFFER LISTデータ構造に格納することを含むとよい。
【０１１０】
行為７０８において、例えば、システム１００に関して先に説明したように、パケットをネットワーク通信スタック（例えば、１１０）に送ることができる。
【０１１１】
行為７１０において、ネットワーク・デバイスから別のネットワーク・エンティティに送られたデータのＲＴＴを、タイムスタンプおよびパケットを関連付ける情報に少なくとも部分的に基づいて、判定することができる。例えば、データ片をネットワーク・デバイスから別のネットワーク・エンティティに送信したときに、タイムスタンプを発生することができる。接続のＲＴＴは、このデータ片を送信したときを示すタイムスタンプと、データ片をネットワーク・エンティティが受信したことを示す承認のために行為７０４において発生したタイムスタンプとの間の差を判定することによって、判定することができる。
【０１１２】
行為７１２において、判定した往復時間に少なくとも部分的に基づいて、ネットワーク輻輳を判定することができる。例えば、行為７１０において判定したＲＴＴが接続に対するＲＴＴの変化を示す場合、例えば、システム１００に関して先に説明したように、この変化を、接続上で輻輳を制御するＣＣＭに報告するとよい。次いで、ＣＣＭは接続に対する接続状態変数を更新し、更新した変数をネットワーク通信＊−スタック（例えば、１１０）に報告することができ、次いで、例えば、先に説明したように、接続の制御を変更することができる。
【０１１３】
方法７００は、追加の行為を含むこともできる。更に、方法４００の一部として実行する行為の順序は、図４に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および／または１つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為７０８は、行為７０６の前でも、またはこれと同時にでも実行することができる。
【０１１４】
方法３００、６００、および７００やその行為、ならびにこの方法およびこれらの行為の様々な実施形態および変形、更には前述のその他の方法および技法は、個別でもまたは組み合わせでも、１つ以上のコンピュータ読み取り可能媒体上に接触可能に具体化したコンピュータ読み取り可能信号によって定めることができる。コンピュータ読み取り可能媒体は、例えば、不揮発性記録媒体、集積回路メモリ・エレメント、またはその組み合わせである。コンピュータ読み取り可能媒体は、コンピュータによってアクセスすることができる入手可能な媒体であれば任意のものが可能である。限定ではない一例として、コンピュータ読み取り可能媒体は、コンピュータ記憶媒体および通信媒体から成ると考えられる。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータというような情報の格納のために、あらゆる方法または技術で実施される、揮発性および不揮発性の双方、リムーバブル、および非リムーバブル媒体を含む。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリまたはその他のメモリ技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）またはその他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたはその他の磁気記憶デバイス、所望の情報を格納するために用いることができしかもコンピュータがアクセス可能なその他の任意の媒体、その他の種類の揮発性および不揮発性メモリ、ならびに前述の媒体の任意の適した組み合わせをも含むが、これらに限定されるのではない。
【０１１５】
通信媒体は、通例、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータを、搬送波またはその他の移送機構のような変調データ信号において具体化し、あらゆる情報配信媒体を含む。「変調データ信号」という用語は、その特性集合の１つ以上が、情報を信号内にエンコードするよう様式で、変化している信号を意味する。限定ではなく、一例として、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体、ならびに音響、ＲＦ、赤外線、およびその他のワイヤレス媒体というようなワイヤレス媒体、ならびに前述の媒体の任意の適した組み合わせを含む。
【０１１６】
１つ以上のコンピュータ読み取り可能媒体上に具体化するコンピュータ読み取り可能信号は、命令を、例えば、１つ以上のプログラムの一部として定めることができ、これらをコンピュータによって実行する結果、このコンピュータに、ここに記載した機能の１つ以上（方法３００、６００、および７００またはその任意の行為も含む）および／または種々の実施形態、変形、およびその組み合わせを実行するように命令する。このような命令は、複数のプログラミング言語の任意のもので書いてもよく、例えば、Ｊａｖａ（登録商標）、Ｊ＃、Ｖｉｓｕａｌ  Ｂａｓｉｃ、Ｃ、Ｃ＃、Ｃ＋＋、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ｅｉｆｆｅｌ、Ｂａｓｉｃ、ＣＯＢＯＬ等、またはその種々の組み合わせの任意のものがある。このような命令を具体化したコンピュータ読み取り可能媒体は、ここに記載したシステム１００、２００、８００、および９００のコンポーネントの１つ以上に位置することができ、このようなコンポーネントの１つ以上に跨って分散することもでき、更にそれらの間で移行してもよい。
【０１１７】
コンピュータ読み取り可能媒体は、その上に格納されている命令を任意のコンピュータ・システム・リソースにロードして、ここで論じた本発明の態様を実施することができるように、可搬型とするとよい。加えて、前述のコンピュータ読み取り可能媒体上に格納されている命令は、ホスト・コンピュータ上で走るアプリケーション・プログラムの一部として具体化した命令に限定されるのではないことは認められよう。逆に、命令は、先に論じた本発明の態様を実施するようにプロセッサをプログラムするために採用することができるのであれば、いずれの種類のコンピュータ・コード（例えば、ソフトウェアまたはマイクロコード）としてでも具体化することができる。
【０１１８】
尚、コンピュータ・システム、例えば、図１、図２、図８および図９に関して説明した、ここに記載する機能を実行するコンピュータ・システムの多数のコンポーネントのうち、任意の単一のコンポーネントまたはその集合体も、包括的に、このような機能を制御する１つ以上のコントローラとして見なすことができることは認められよう。１つ以上のコントローラは、先に引用した機能または前述の機能の任意の適した組み合わせでも実行するマイクロコードまたはソフトウェアを用いてプログラミングしたプロセッサを用いて、専用ハードウェアおよび／またはファームウェアのように、多数の方法で実施することができる。
【０１１９】
本発明による種々の実施形態は、１つ以上のコンピュータ・システム上において実施することができる。これらのコンピュータ・システムは、汎用コンピュータとすることができ、例えば、Intel PENTIUM（登録商標）型プロセッサ、Motorola PowerPC、Sun UltraSPARC、Hewlett-Packard PA-RISCプロセッサ、Advanced Micro Devices (AMD)から入手可能な種々のプロセッサの任意のもの、またはその他の任意の形式のプロセッサに基づくコンピュータがある。尚、本発明の種々の実施形態を実施するためには、１つ以上の任意の形式のコンピュータ・システムでも用いることができることは認められよう。
【０１２０】
本発明の一実施形態による汎用コンピュータ・システムは、前述の機能の１つ以上を実行するように構成されている。尚、このシステムは、他の機能も実行することができ、本発明は、いずれの特定の機能または機能集合を有することにも限定されないことは認められよう。
【０１２１】
例えば、本発明の種々の態様は、図８に示すような、汎用コンピュータ・システム８００において実行する特殊ソフトウェアとして実装することができる。コンピュータ・システム８００は、ディスク・ドライブ、メモリ、またはデータを格納するその他のデバイスのような、１つ以上のメモリ・デバイス８０４に接続されているプロセッサ８０３を含むことができる。メモリ８０４は、通例、コンピュータ・システム８００の動作中にプログラムおよびデータを格納するために用いられる。コンピュータ・システム８００のコンポーネントは、相互接続メカニズム８０５によって結合することができ、相互接続メカニズム８０５は、１つ以上のバス（例えば、同じ機械の内部に一体化されたコンポーネント間）、および／またはネットワーク（例えば、別個の離散機械に位置するコンポーネント間）を含むことができる。相互接続メカニズム８０５によって、システム８００のシステム・コンポーネント間において通信（例えば、データ、命令）を交換することが可能となる。また、コンピュータ・システム８００は、１つ以上の入力デバイス８０２、例えば、キーボード、マウス、トラックボール、マイクロフォン、タッチ・スクリーン、および１つ以上の出力デバイス８０１、例えば、印刷装置、表示画面、スピーカも含む。加えて、コンピュータ・システム８００は、１つ以上のインターフェース（図示せず）も内蔵することができる。インターフェースは、コンピュータ・システム８００を通信ネットワーク（相互接続メカニズム８０５に加えて、またはその代わりとして）に接続する。
【０１２２】
記憶システム８０６を、図９に更に詳細に示すが、通例コンピュータ読み取り可能および書き込み可能不揮発性記録媒体９０１を含む。媒体９０１においては、プロセッサが実行すべきプログラム、あるいは媒体９０１に格納されておりプログラムが処理すべき情報を定める信号が格納されている。この媒体は、例えば、ディスクまたはフラッシュ・メモリとすることができる。通例、動作中には、プロセッサがデータを不揮発性記録媒体９０１から、媒体９０１よりも速くプロセッサが情報にアクセスすることを可能にする別のメモリ９０２に読み出させる。このメモリ９０２は、通例、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）またはスタティック・メモリ（ＳＲＡＭ）のような揮発性ランダム・アクセス・メモリである。これは、図示のように、記憶システム８０６の中に配置すること、または図示しない記憶システム８０４に配置することもできる。プロセッサ８０３は、一般に、集積回路メモリ８０４、９０２内にあるデータを操作し、処理が完了した後に、このデータを媒体９０１にコピーする。媒体９０１と集積回路メモリ・エレメント８０４、９０２間におけるデータの移動を管理するための種々のメカニズムが知られており、本発明はそれらに限定されることはない。本発明は、特定のメモリ・システム８０４や記憶システム８０６にも限定されることはない。
【０１２３】
コンピュータ・システムは、特別にプログラムされた特殊目的ハードウェア、例えば、特定用途集積回路（ＡＳＩＣ）を含むことができる。本発明の態様は、ソフトウェア、ハードウェア、またはファームウェア、あるいはその任意の組み合わせでも実施することができる。更に、このような方法、行為、システム、システム・エレメント、およびそのコンポーネントは、先に説明したコンピュータ・システムの一部として、または独立したコンポーネントとして実施することができる。
【０１２４】
コンピュータ・システム８００は、一例として、本発明の態様を実用化することができる一種のコンピュータ・システムとして示したが、本発明の態様は、図８に示すコンピュータ・システム上で実施することに限定されるのではないことは認められよう。本発明の種々の態様は、図８に示すのとは異なるアーキテクチャまたはコンポーネントを有する１つ以上のコンピュータ上でも実用化することができる。
【０１２５】
コンピュータ・システム８００は、高級コンピュータ・プログラミング言語を用いてプログラム可能な汎用コンピュータ・システムとすることができる。また、コンピュータ・システム８００は、特別にプログラムされた特殊目的ハードウェアを用いて実施することもできる。コンピュータ・システム８００では、プロセッサ８０３は、通例、Intel Corporationから市販されている周知のPentium（登録商標）級プロセッサのような、市販のプロセッサである。多くのその他のプロセッサも利用可能である。このようなプロセッサは、通常、オペレーティング・システムを実行する。オペレーティング・システムは、例えば、Microsoft Corporationから入手可能なWindows（登録商標）95、Windows（登録商標）98、Windows NT（登録商標）、Windows（登録商標）2000（Windows（登録商標）ME）またはWindows（登録商標）XPオペレーティング・システム、Apple Computerから入手可能なMAC OS System X、Sun Microsystemsから入手可能なSolaris Operating System、種々の供給源から入手可能なLinux、あるいは種々の供給源から入手可能なUNIX（登録商標）とすることができる。種々のその他のオペレーティング・システムのいずれでも用いることができる。
【０１２６】
プロセッサおよびオペレーティング・システムは、一体となってコンピュータ・プラットフォームを定め、これに合わせて、高級プログラミング言語でアプリケーション・プログラムが書かれる。尚、本発明は、特定のコンピュータ・システム・プラットフォーム、プロセッサ、オペレーティング・システム、またはネットワークにも限定されないことは言うまでもない。また、本発明は、特定のプログラム言語やコンピュータ・システムには限定されず、他のしかるべきプログラミング言語および他のしかるべきコンピュータ・システムも使用可能であることは、当業者には明白なはずである。
【０１２７】
コンピュータ・システムの１つ以上の部分は、通信ネットワークに結合されている１つ以上のコンピュータ・システム（図示せず）に跨って分散させることができる。これらのコンピュータ・システムも、汎用コンピュータ・システムであってよい。例えば、本発明の種々の態様は、１つ以上のクライアント・コンピュータにサービスを提供し、分散型システムの一部として全体のタスクを実行するように構成されている１つ以上のコンピュータ・システム（例えば、サーバ）間で分散させることができる。例えば、本発明の種々の態様は、本発明の種々の実施形態にしたがって種々の機能を実行する１つ以上のサーバ・システム間で分散したコンポーネントを含むクライアント−サーバ・システム上で実行することができる。これらのコンポーネントは、通信プロトコル（例えば、ＴＣＰ／ＩＰ）を用いて、通信ネットワーク（例えば、インターネット）上で通信する、実行可能、中間（例えば、ＩＬ）、またはインタープリタ型（例えば、Ｊａｖａ（登録商標））コードとすることができる。
【０１２８】
尚、本発明は、いずれの特定のシステムまたはシステム群において実行することにも限定されず、本発明は、いずれの特定の分散型アーキテクチャ、ネットワーク、または通信プロトコルにも限定されないことは認められよう。
【０１２９】
本発明の種々の実施形態は、SmallTalk、Ｊａｖａ（登録商標）、Ｊ＃（J-Sharp)、Ｃ＋＋、Ａｄａ、またはＣ＃（C-Sharp)のような、いずれのオブジェクト指向プログラミング言語を用いてもプログラムすることができる。他のオブジェクト指向プログラミング言語を用いることもできる。代わりに、機能的、スクリプティング、および／または論理的プログラミング言語を用いてもよい。本発明の種々の態様は、非プログラミング環境（例えば、ＨＴＭＬ、ＸＭＬ、またはブラウザ・プログラムのウィンドウ内において見ると、グラフィカル・ユーザ・インターフェース（ＧＵＩ）の態様を表現する、または他の機能を実行するその他のフォーマットで作成した文書）において実施することもできる。本発明の種々の態様は、プログラムされたエレメントまたはプログラムされていないエレメント、あるいはそのいずれの組み合わせとしてでも実施することができる。更に、本発明の種々の実施形態は、Microsoft Corporationから入手可能なMicrosoft（登録商標）NET技術を用いて実施することもできる。
【０１３０】
以上、本発明の例示的な実施形態の一部について説明したが、以上のことは単なる例示に過ぎず、限定ではなく、一例として呈示したに過ぎないことは、当業者には明白なはずである。多数の修正やその他の例示的な実施形態も、当技術分野における通常の技術範囲に含まれ、本発明の範囲に該当するものと見なすこととする。即ち、ここに呈示した例の多くは、方法行為またはシステム・エレメントの具体的な組み合わせを伴うが、これらの行為およびこれらのエレメントは、別の方法で組み合わせて同じ目的を達成することもできることは言うまでもない。一実施形態のみに関連して論じた行為、エレメント、および特徴は、他の実施形態における同様の役割から除外されることは意図していない。更に、以下の特許請求の範囲において明記する１つ以上のミーンズ−プラス−ファンクション(means-plus-function)の限定について、手段は、明記した機能を実行するためにここに開示した手段に限定されることは意図しておらず、明記した機能を実行するための同等の手段であれば、現在既知のまたは今後開発されるいずれの手段でもその範囲に包含することを意図している。
【０１３１】
「第１」、「第２」、「第３」等のような順序に関する用語を特許請求の範囲において請求項の要素を修正するために用いる場合、これらの用語自体は、一方の請求項の要素の他方に対する優先順、上下関係、または順序、あるいは方法の行為を実行する時間的順序のいずれも暗示せず、単にある名称を有する一方の請求項の要素を同じ名称を有する（序数用語を別にすれば）別の要素から区別し、これらの請求項の要素を区別するための標識として用いるに過ぎない。
【図面の簡単な説明】
【０１３２】
【図１】図１は、本発明の一部の実施形態にしたがって、ネットワーク・デバイスと通信ネットワークとの間における１つ以上のネットワーク接続上で輻輳を制御するシステムの一例を示すブロック図である。
【図２】図２は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御するＣＣＭタイプを定めるシステムの一例を示すブロック図である。
【図３】図３は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御する方法の一例を示すフローチャートである。
【図４】図４は、本発明の一部の実施形態による、接続速度およびＲＴＴの一定の組み合わせについて、接続に合ったサンプリング・レートの一例を示す表である。
【図５】図５は、本発明の一部の実施形態にしたがって、接続上で受信するパケットからサンプリングした情報を格納するデータ構造の一例を示すブロック図である。
【図６】図６は、本発明の一部の実施形態にしたがって、ネットワーク接続上において輻輳を制御する方法の一例を示すフロー・チャートである。
【図７】図７は、本発明の一部の実施形態にしたがって、ネットワーク接続上において輻輳を制御する方法の一例を示す。
【図８】図８は、本発明の一部の実施形態を実施することができるコンピュータ・システムの一例を示すブロック図である。
【図９】図９は、本発明の一部の実施形態を実施するコンピュータ・システムの一部として用いることができる記憶システムの一例を示すブロック図である。
【図１】
2009534937.tif 000011
【図２】
2009534937.tif 000012
【図３】
2009534937.tif 000013
【図４】
2009534937.tif 000014
【図６】
2009534937.tif 000015
【図７】
2009534937.tif 000016
【図８】
2009534937.tif 000017
【図９】
2009534937.tif 000018
【図５】
2009534937.tif 000019
【国際調査報告】
2009534937.tif 000020
2009534937.tif 000021