JP2009534937A - ネットワーク・デバイスによる多数の輻輳制御アルゴリズムの実行を可能にすること - Google Patents

ネットワーク・デバイスによる多数の輻輳制御アルゴリズムの実行を可能にすること Download PDF

Info

Publication number
JP2009534937A
JP2009534937A JP2009506636A JP2009506636A JP2009534937A JP 2009534937 A JP2009534937 A JP 2009534937A JP 2009506636 A JP2009506636 A JP 2009506636A JP 2009506636 A JP2009506636 A JP 2009506636A JP 2009534937 A JP2009534937 A JP 2009534937A
Authority
JP
Japan
Prior art keywords
connection
congestion control
network
congestion
control module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009506636A
Other languages
English (en)
Other versions
JP2009534937A5 (ja
JP5174807B2 (ja
Inventor
スリドハルン,ムラーリ
カニヤー,サンジャイ・エヌ
サンダース,ヘンリー・エル
グバデゲシン,アボラデ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009534937A publication Critical patent/JP2009534937A/ja
Publication of JP2009534937A5 publication Critical patent/JP2009534937A5/ja
Application granted granted Critical
Publication of JP5174807B2 publication Critical patent/JP5174807B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/11Identifying congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/19Flow control; Congestion control at layers above the network layer
    • H04L47/193Flow control; Congestion control at layers above the network layer at the transport layer, e.g. TCP related
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2475Traffic characterised by specific attributes, e.g. priority or QoS for supporting traffic characterised by the type of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/163In-band adaptation of TCP data exchange; In-band control procedures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/02Capturing of monitoring data
    • H04L43/022Capturing of monitoring data by sampling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays
    • H04L43/0864Round trip delays

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Environmental & Geological Engineering (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

【課題】ネットワーク通信スタックと相互作用を行うことができる、異なる輻輳制御モジュールを作成するシステム、方法、およびソフトウェアを提供する。
【解決手段】ネットワーク通信スタック(例えば、TCP/IPスタック)に差し込むことができる、異なる輻輳制御モジュール(CCM)を作成する。トランスポート制御イベント、輻輳制御アルゴリズム、およびその他の情報を定めるソフトウェア・アブストラクションを、例えば、オペレーティング・システムのアプリケーション・プログラミング・インターフェースによって露出することができ、これらのアブストラクションを用いてCCMを定めることができる。ネットワーク通信スタックは、多数の利用可能なCCMのうち1つを選択して、所与の接続に対する輻輳を制御するように構成することができる。
【選択図】図1

Description

送信制御プロトコル(TCP)は、2つのネットワーク・デバイスがネットワークを通じて接続を確立し、この接続を通じてデータのストリームをパケットの形態で交換することを可能にする。TCPは、データの配信を保証し、更に、パケットを送ったのと同じ順序で配信することを保証する。
TCPは、パケットを発信元から送信している(即ち、送っている)レートを積極的に絞ることによって、ネットワーク輻輳を拡散し易くする輻輳制御アルゴリズムを採用している。高帯域幅−遅延ネットワーク上では、これらの積極的な対策の結果、パケット損失の率が小さい場合でも、TCPのネットワーク帯域幅の利用が著しく過小となってしまう。例えば、オペレーティング・システムのWindows(登録商標)ファミリの一部では、TCPの一形態を採用し、広く普及しているNewReno輻輳制御アルゴリズムを実装するが、これは高帯域幅−遅延環境における動作性能(performance)は低劣である。
ネットワーク研究共同体が、高速ネットワークにおける動作性能を改善する試みの中で、TCPの輻輳制御アルゴリズムに対していくつかの強化および修正を提案している。考慮すべき要因がいくつかあり、「1つで全てが治まる」解決策はない。アルゴリズムが積極的になる程、他のTCPフローに対しては増々不公正となる。更に、全世界で受け入れられる標準がないので、所与のオペレーティング・システムにどの輻輳制御アルゴリズムを実装するかという判断は非常に難しい。
この摘要は、本発明の態様についての例示的コンテキストを、簡略化した形態で規定する。これは、特許請求する主題の範囲を決定するために用いることは意図していない。発明の態様については、詳細な説明において以下で更に詳しく説明する。
ここに開示するのは、ネットワーク通信スタック(例えば、TCP/IPスタック)と相互作用(例えば、「差し込む」)を行うことができる、異なる輻輳制御モジュール(CCM)を作成するシステム、方法、およびソフトウェア(例えば、フレームワーク)である。トランスポート制御イベント、輻輳制御アルゴリズム(CCA)、およびその他の情報を定めるソフトウェア・アブストラクション(software abstraction)を、例えば、オペレーティング・システムのアプリケーション・プログラミング・インターフェースによって露出することができる。これらのアブストラクションは、多数のCCMを発生する(例えば、インスタンス化する)元となり得るCCMのタイプを定めるために用いることができる。
ネットワーク通信スタックは、所与の接続について輻輳を制御するために、多数の利用可能なCCMから1つを選択するように構成することができる。この選択は、種々の要因の任意のものに基づくことができ、限定ではなく、ネットワーク環境、接続経路特性、接続リンク特性、アプリケーションのソケット・パラメータの値、その他の要因、および前述のあらゆる適した組み合わせを含む。つまり、CCMは、多数のCCMを同時に動作させることができるように、接続毎に選択し実装することができる。
ネットワーク通信スタックは、所与の接続に対するトランスポート制御イベントを、それに対応するCCMに報告することができ、CCMは、それに応じて、接続に対する1つ以上の状態変数の値を更新することができる。CCMは、1つ以上の状態変数の更新値を、ネットワーク通信スタックに供給することができ、スタックはそれに応じてその接続制御を修正することができる。
実施形態によっては、接続毎に状態情報を維持することによって消費するメモリ量を削減するために、接続に対して送信および/または受信する全て未満のパケットから情報をサンプリングすることもできる。接続毎のサンプリング・レートは、種々の要因の任意のものに基づいて決定することができ、要因には、限定ではなく、接続上における送信レート、および接続の往復時間(RTT)を含む。輻輳制御に用いるために、メモリ・プールを指定することができ、メモリ・プールの一部を各接続に、そのサンプリング・レートに基づいて、割り当てることができる。
接続のサンプリング・レートに応じて、各接続上で送出および/または受信したパケットから情報をサンプリングすることができ、サンプリングした情報は、それぞれの接続に割り当てたメモリの一部に格納することができる。例えば、ある情報片(例えば、データ・バイト)を送信した時刻をサンプリングすることができ、そのデータ片に対する承認を受信した時刻をサンプリングすることができ、この情報を用いて、接続に対してRTTを判定することができる。サンプリング・レートおよび各接続に割り当てたメモリ量は、接続の送信レートおよび/またはRTTが変化するに連れて、調節することができる。
実施形態によっては、ネットワーク・インターフェース・モジュール、例えば、ネットワーク・インターフェース・カード(NIC)が、接続上で受信したパケットに対してタイムスタンプを発生することができる。ネットワークから受信したパケット毎に、タイムスタンプを発生し、ネットワーク通信スタックに受け渡して、当該接続上で輻輳を制御する際に用いることができる。例えば、ネットワーク・インターフェース・モジュールは、タイムスタンプおよび接続と関連付けるタイムスタンプ情報を、データ構造(例えば、Windows(登録商標)Vista(商標)オペレーティング・システムのNET_BUFFER および/またはNET_BUFFER_LISTデータ構造)に格納することができる。このタイムスタンプ情報は、ネットワーク通信スタックが、接続に対するRTTおよび/またはその他のトランスポート制御情報を判定するために用いることができる。ネットワーク通信スタックは、RTTおよび/またはその他の情報を、接続に対する輻輳を制御するCCMに報告することができる。CCMは、接続状態変数を更新し、1つ以上の接続状態変数の更新値を、ネットワーク通信スタックに供給することができる。次いで、スタックは、それに応じて、その接続制御を修正することができる。
本発明の一実施形態では、ネットワーク接続上で輻輳を制御する輻輳制御モジュールを作成するシステムを提供する。本システムは、輻輳制御モジュールを発生することができる輻輳制御モジュール・タイプを定める際に用いるための1つ以上のイベント・アブストラクションを露出するアプリケーション・プログラミング・インターフェースを備えており、各イベント・アブストラクションがトランスポート制御イベントを定める。
本発明の別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間における1つ以上のネットワーク接続上で輻輳を制御するシステムを提供する。本システムは、1つ以上の接続においてネットワーク通信を制御するように動作するネットワーク通信スタックと、1つ以上の輻輳制御モジュールであって、各々、1つ以上のネットワーク接続のそれぞれにおいて輻輳を制御する輻輳制御アルゴリズムを定め、それぞれの接続に対して1つ以上の接続状態変数を維持する、輻輳制御モジュールとを含む。ネットワーク通信スタックは、1つ以上の接続の各々に対して、当該接続上で輻輳を制御する輻輳制御モジュールに、当該接続上で発生する1つ以上のトランスポート制御イベントを通知するように動作する。
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、コンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、前述の命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間におけるネットワーク接続上で輻輳を制御する方法を実行するように制御する。この方法は、第1接続に第1タイプの輻輳制御を選択する行為と、第1タイプの第1輻輳制御モジュールを発生する行為と、第1輻輳制御モジュールを用いて、第1接続上でネットワーク輻輳を制御する行為とを含む。
本発明の別の実施形態では、ネットワーク接続上で輻輳を制御する。ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定する。接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御する。
本発明の更に別の実施形態では、ネットワーク接続上で輻輳を制御するシステムを提供する。このシステムは、ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定し、接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御するように動作するネットワーク通信スタックを含む。
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、コンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク接続上で輻輳を制御する方法を実行するように制御する。この方法は、ネットワーク接続上にあるネットワーク・デバイスから送信したパケットから情報をサンプリングするレートを、ネットワーク接続の送信レートおよび接続に対する往復時間に少なくとも部分的に基づいて決定する行為と、接続上で送信したパケットからの情報を、決定したサンプリング・レートでサンプリングする行為と、このサンプリングした情報に少なくとも部分的に基づいて、ネットワーク接続上の輻輳を制御する行為とを含む。
本発明の別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する。ネットワーク・デバイスは、ネットワーク通信スタックと、別個のネットワーク・インターフェース・モジュールとを含む。ネットワーク・インターフェース・モジュールにおいて、通信ネットワークからのパケットをネットワーク接続上で受信する。ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生し、このタイムスタンプは、パケットを受信した時刻に対応する。タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納し、ネットワーク通信スタックにパケットを送る。
本発明の更に別の実施形態では、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御するシステムを提供する。ネットワーク・デバイスは、ネットワーク通信スタックを含む。このシステムは、通信ネットワークからのパケットをネットワーク接続上で受信し、ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生し、このタイムスタンプは、パケットを受信した時刻に対応し、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納し、ネットワーク通信スタックにパケットを送るように動作するネットワーク・インターフェース・モジュールを含む。
本発明の別の実施形態では、コンピュータ・プログラム製品を提供する。このコンピュータ・プログラム製品は、のコンピュータ読み取り可能媒体と、コンピュータ読み取り可能媒体上に格納されており、命令を定めるコンピュータ読み取り可能信号とを備えており、命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する方法を実行するように制御する。ネットワーク・でバイアスは、ネットワーク通信スタックおよび別個のネットワーク・インターフェース・モジュールを含む。この方法は、通信ネットワークからのパケットをネットワーク接続上で受信する行為と、ネットワーク・インターフェース・モジュール上においてタイムスタンプを発生する行為と、このタイムスタンプは、パケットを受信した時刻に対応し、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納する行為と、ネットワーク通信スタックにパケットを送る行為とを含む。
本発明のその他の利点、新規な特徴、および目的、ならびにその態様および実施形態は、以下の発明の詳細な説明を添付図面と合わせて検討することにより、その態様および実施形態も含めて、明白となろう。図面は、模式的であり、同じ拡縮率で描画することは意図していない。図においては、種々の図にのいて示される同一の構成要素またはほぼ同一の構成要素を、1つの番号で表すこととする。明確化のために、全ての構成要素に、全ての図面で符号を付けることは控えており、更に、当業者に発明を理解させるために図示が必要でない場合には、本発明の各実施形態または態様の全ての構成要素を示さないこととする。
明示的な輻輳の通知がない場合、一部のトランスポート・レイヤ・プロトコル(例えば、TCP)は、初期の輻輳、パケット損失、および「ボトルネック」ルータにおけるキューの積み重ね(build up)を検出するために、ある種のイベントを拠り所とする。輻輳制御における現在の研究は、大まかに、パケット損失を輻輳の指示として拠り所とする損出主体(loss-based)、または事前に対処することにより輻輳を回避するためにボトルネック・ルータにおけるバッファ占有度を監視する遅延主体に分類することができる。遅延主体方式は、接続のRTT増大を監視することによって、キューの積み重ねを推論する。
ここに記載する発明の実施形態は、遅延主体および/または損失主体の輻輳制御を実施するために用いることができる。例えば、以下で更に詳しく説明するが、1つ以上のイベント・アブストラクション、輻輳制御アルゴリズム(CCA)アブストラクション、および輻輳制御と関連のあるその他の情報を定めるアブストラクションを、インターフェースを通じて露出する(expose)ことができる。これらのアブストラクションは、遅延主体および/または損失主体方式を用いて1つ以上のそれぞれの接続上で輻輳を制御するために、1つ以上の輻輳制御モジュール(CCM)を定めるために用いることができる。
前述した本発明の実施形態およびその他の実施形態の機能や利点は、以下に記載する例から一層深く理解できよう。以下の例は、本発明の一層の理解を促進し、その便益を例示することを意図しているが、本発明の範囲全体を例示するのではない。
ここで用いる場合、記載する説明であれ特許請求の範囲であれ、「備えている」、「含む」、「搬送する」、「有する」、「収容する」、「伴う」等の用語は、状況に応じて変更可能である、即ち、含むが限定されないと意味するように解釈することとする。「から成る」および「本質的にから成る」という移行性の句のみが、米国特許商標庁のManual of Patent Examining Procedure(特許審査手順教範)(第8版、改訂2、2004年5月)、2111.03章に明記されているように、特許請求の範囲に関して、それぞれ、排他的(closed)または半排他的(semi-closed)移行性句となるものとする。

図1は、本発明の一部の実施形態にしたがって、ネットワーク・デバイス102と通信ネットワーク128との間における1つ以上のネットワーク接続上で輻輳を制御するシステム100の一例を示すブロック図である。システム100は、ネットワーク・デバイスと通信ネットワークとの間における1つ以上のネットワーク接続上で輻輳を制御するシステムの例示的な実施形態に過ぎず、本発明の範囲を限定することを意図するのではない。このようなシステムの多数の別の実施形態のいずれでも、例えば、システム100の変形もが可能であり、本発明の範囲に該当することを意図している。
ここで用いる場合、「ネットワーク」とは、コンポーネント間で通信を交換することができる送信媒体の1つ以上のセグメントによって相互接続されている2つ以上のコンポーネントの一群のことである。各セグメントは、複数の形式の送信媒体のいずれでもよく、金属および/または光ファイバで作った1つ以上の電気または光ワイヤまたはケーブル、空気(例えば、搬送波上におけるワイヤレス通信を用いる)、またはこれらの送信媒体の任意の組み合わせを含む。ここで用いる場合、「複数」は2つ以上を意味する。尚、ネットワークは、1本のワイヤ、バス、ワイヤレス接続、またはその他の形式のセグメントによって接続されている2つのコンポーネントのように単純であってもよいことは認められよう。更に、本願の図面に図示されているネットワークは、図面における要素に接続されているが、接続される要素自体がネットワークの一部と見なされることも認められよう。
ここで用いる場合、「ネットワーク・デバイス」とは、ネットワーク上において通信するように動作するデバイスであり、限定ではなく、ワークステーション、パーソナル・コンピュータ、端末、ラップトップ・コンピュータ、エンド・ステーション、ユーザ・デバイス、サーバ、ゲートウェイ、レジスタ、スイッチ、ルータ、ハブ、ブリッジ、ディレクトリ、送信機、受信機、送受信機、ワイヤレス・アクセス・ポイント(AP)、リピータ、およびこれらの任意の組み合わせをも含む。ここで用いる場合、「ユーザ・デバイス」とは、ユーザが通信を送出/受信することができ、更に通信ネットワーク上における通信に対して終点としての役割を果たすことができるネットワーク・デバイスのことである。ユーザ・デバイスは、限定ではなく、ワークステーション、パーソナル・コンピュータ(例えば、PC)、ラップトップ・コンピュータ、ノートブック・コンピュータ、電話機(例えば、陸線または移動体)、ページャ、Blackberry(商標)ブランドのデバイス、PCSデバイス、パーソナル・ディジタル・アシスタント(PDA)、双方向無線機(例えば、ウオーキー・トーキー)、その他の種類のユーザ・デバイス、および以上の適した組み合わせであれば任意のものを含む。
ネットワークは、種々の形式のネットワークのいずれでもよく、または任意のものを含むこともでき、限定ではなく、ローカル・エリア・ネットワーク(LAN)、都市エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、ワイヤレス・ネットワーク、公衆陸上移動体ネットワーク(PLMN)、汎ヨーロッパ・ディジタル移動通信システム(GSM)ネットワーク、総合パケット無線サービス(GPRS)ネットワーク、全世界移動体電気通信ネットワーク(UMTS)ネットワーク、符号分割多元接続(CDMA)ネットワーク、光ネットワーク、データ・ネットワーク、企業内ネットワーク、ワイヤレス・パーソナル・エリア・ネットワーク(PAN)、ホーム・ネットワーク、電気通信ネットワーク、公衆電話交換網(PSTN)、ブロードバンド・ネットワーク、その他の形式のネットワーク、または前述のあらゆる適した組み合わせを含む。
ネットワーク・デバイス102は、1つ以上のアプリケーション108、オペレーティング・システム104、ネットワーク・インターフェース・モジュール122、1つ以上の輻輳制御モジュール(CCM)116、その他のコンポーネント、または前述のあらゆる適した組み合わせのうち、任意のものを含むことができる。
ネットワーク・インターフェース・モジュール122は、例えば、ネットワーク・インターフェース・カード(NIC)のような、種々の形式のネットワーク・コンポーネントの任意のものでもよい。モジュール122は、ネットワーク128、例えば、1つ以上のネットワーク接続からパケット126を受信し、このパケットに対して動作を実行するように構成することができる。例えば、ネットワーク・インターフェース・モジュール122は、種々の周知の動作の任意のものを実行することができる。更に、モジュール122は、パケットを受信したときに、そのタイムスタンプを発生するように構成することもできる。例えば、タイムスタンプ発生器124は、各パケットを受信した時刻にできるだけ近い時刻にタイムスタンプを発生するとよい。タイムスタンプ118をパケットと関連付ける情報(即ち、タイムスタンプ情報)は、データ構造(例えば、Windows(登録商標)Vista(商標)オペレーティング・システムのNET_BUFFERまたはNET_BUFFER_LISTデータ構造)に格納するとよい。このデータ構造(またはその中に格納するタイムスタンプ情報)は、ネットワーク通信スタック110に受け渡すまたはこれにアクセス可能とすることができる。以下で更に詳しく説明するが、タイムスタンプ情報は、ネットワーク接続上でネットワーク輻輳を判定するために用いることができる。
オペレーティング・システム104は、1つ以上の送信制御データ構造106、ネットワーク通信スタック110、その他のコンポーネント、および前述のあらゆる適した組み合わせのうち、任意のものを含むことができる。ネットワーク通信スタック110は、例えば、TCP/IPスタックのように、種々の形式のネットワーク通信スタックの任意のものでよい。ネットワーク通信スタック110は、パケット120を受信し、パケット120を受信した(そしてパケットを送信する)接続を制御するように構成することができる。図1には示されておらず、本出願では全く論じないが、ネットワーク通信スタック110は、例えば、ネットワーク・インターフェース・モジュール122を通じて、パケットをネットワーク128に送信するように構成してもよいことは認められよう。
スタック110は、1つ以上の送信制御データ構造106を利用して、ネットワーク・デバイス102とネットワーク128との間における接続を制御することができる。例えば、接続毎に、別個の送信制御データ構造106を用いて、当該接続に関する情報(例えば、状態情報)を格納および更新することができ、スタック110はその情報を用いて、接続上における通信を制御することができる。送信制御データ構造106は、例えば、送信制御ブロック(TCB)のような、種々の形式のデータ構造の任意のものでよく、または任意のものを含むことができる。トランスポート制御データ構造106は、オペレーティング・システム104内に常駐するように示されているが、本発明はそのように限定されるのではない。このような構造は、ネットワーク・インターフェース・モジュール122を含む、ネットワーク・デバイス102の種々の場所の任意のものに常駐することもできる。
スタック110は、1つ以上のトランスポート制御イベントを検出および/または判定し、それに応じて1つ以上の送信制御データ構造106を更新し、および/またはこれら1つ以上のトランスポート制御イベント112を1つ以上のCCM116に報告するように構成することができる。これらのイベントは、以下のうちの任意のものを含むことができる。接続における再送信時間切れ、復路時間の変化、新しいデータ承認、二重承認の受信、新しいデータ・パケットの送出、その他のトランスポート制御イベント、または前述のあらゆる適した組み合わせ。
典型的なトランスポート・レイヤ(レイヤ4)プロトコル(例えば、TCP)では、ネットワーク・デバイス(例えば、受信側)が接続上でデータを受信すると、そのデータを送ったネットワーク・デバイスに応答する(例えば、送出元に承認(即ち、ACK)によって)。再送信時間切れが送出元(例えば、ネットワーク・デバイス102)において接続に対して発生するのは、当該接続上で送出元が以前に送ったデータに対する承認メッセージが、既定の時間量以内の内に受信側から受信されなかったときである。再送信時間切れが発生した結果、時間切れとなったデータを再送信することができる。
往復時間(RTT)は、発送元がデータを別のエンティティに送ったときと、発送元が、データを受信した別のエンティティから承認を受信したときとの間に経過する時間量である。RTT情報は、タイマを再送信時間切れに合わせて設定するために用いることができる。例えば、接続上におけるネットワーク輻輳の増大または減少の結果、所与の接続に対するRTTが変化するときに、RTT変更が発生する。
ネットワークを通じて送出元と受信側との間でデータを送信する場合、データを複数の断片、即ち、バイト集合体に分割することが多く、これらのバイト集合体をパケット単位で送る。データの断片は、これらを最初に配列した順序で送信するが、データの断片(およびこれらを収容するパケット)は、受信において異なる順序で到達する可能性がある。
例えば、TCPのような典型的なトランスポート・レイヤ・プロトコルは、断片の順序を追跡し、受信側においてどの断片が受信されたかを追跡し、断片をしかるべき順序に組み立て直す。受信側は、パケットの送出元に承認を送り、受信したデータの断片がどれであるかを示し、これらの断片が未だ受信されていないことを示す場合もある。例えば、データを断片1から90に分割する場合を考える。このデータの受信側が1つのパケットにおいて断片1から20を受信し、別のパケットにおいて31から60を受信し、第3パケットにおいて61から90を受信した場合、これらのパケットの1つを受信する毎に、承認を発送元に送ることができる。承認は、どの断片を受信したかを示し、どのデータの断片を未だ受信していないかも示す場合もある。例えば、受信側は、断片1から20を含む第1パケットを受信し、断片1から20を受信したことを示す承認を送ることができる。次いで、断片31から60を含むパケットを受信し、1から20および31から60を受信したが、断片21から30を受信していないことを示す承認を送ることができる。断片61から90を含む別のパケットを受信し、1から20および31から90を受信したが、21から30を受信していないという承認を送ることができる。つまり、発送元は、受信側が断片21から30を未だ受信していないことを示す多数の承認を、受信側から受信することになる。
トランスポート・レイヤ・プロトコルによれば、新しいデータ承認は、特定のデータの断片に対して発送元が受信する第1の承認即ち最初の承認であり、データの断片が受信側によって受信されたことを示す。
重複承認とは、データの特定の断片が受信側によって受信されていないことを示す第1承認以外のあらゆる承認のことである。重複承認の受信は、受信側が受信したデータにおける孔(例えば、断片21から30)を示す可能性がある。
ネットワーク通信スタック110は、ネットワーク・インターフェース・モジュール122から受信したパケット120内にある関連情報を検査することによって、これら1つ以上のトランスポート制御イベントおよびその他のイベントを検出するように構成することができる。即ち、パケット120のコンテンツを1つ以上のアプリケーション108に受け渡す前にパケット120を処理することに加えて、スタック110は、これらのパケット内にある情報を検査して、そのトランスポートを制御することができ、これらのパケットを送信する接続上での輻輳を制御することを含む。実施形態の中には、スタック110はそれが受信するパケットの全てからの情報をサンプルしなくてもよい場合もある。このサンプリングは、接続毎にそれぞれのCCM116によって維持するために必要な状態情報の量を削減するために実行することができる。接続毎のサンプリング・レートは、送信レートおよび接続のRTTに基づいて決定することができる。このようなサンプリングは、図4から図7に関して以下で更に詳しく説明するように実行するとよい。
ここで用いる場合、「輻輳制御モジュール」即ち「CCM」は、1つ以上の接続上で輻輳を制御するためのCCAを定めるソフトウェア・アブストラクションのことである。各CCM116は、ネットワーク・デバイス102とネットワーク128上のエンティティとの間の1つだけの接続に対応することができ、各CCMは特定のタイプのCCAを実施することができる。ネットワーク通信スタック110は、CCM116に、CCMが輻輳を制御している接続に対するトランスポート制御イベントを報告することができる。CCM116は、接続に対する接続状態変数を維持することができ、トランスポート制御イベントに応答して、これらの状態変数を更新することができる。CCMは状態変数の更新値をネットワーク通信スタック110に供給することができ、スタックはそれに応じてその接続の制御を修正することができる。所与の接続の寿命の間、CCM116には接続を制御するためにメモリの一部を割り当てることができ、このメモリの一部は、スタック110および送信制御データ構造106には不透明のままにしておくことができる。このメモリの一部は、CCMが所有し、接続上の輻輳を制御するために用いられる接続状態変数を追跡し更新するために用いることができる。
ネットワーク通信スタック110は、所与の接続に対する輻輳を制御するために、多数の利用可能なCCM116から1つを選択するように構成することができる。この選択は、限定ではく、ネットワーク環境、接続経路特性、接続リンク特性、アプリケーション108のソケット・パラメータの値、その他の要因、および前述のあらゆる適した組み合わせを含む種々の要因の任意のものに基づくことができる。即ち、CCM116は、スタック110によって接続毎に選択し実装することができ、多数のCCM116が同時に動作することができる。これらのCCMの各々は、異なるタイプでもよく、あるいはこれらのCCMの2つ以上が同じタイプでもよい(例えば、同じタイプのCCAを実行する)。
本発明の実施形態によっては、Windows(登録商標)のある種のバージョン(例えば、Windows(登録商標)Vista(商標)をオペレーティング・システムとして採用する場合、ネットワーク・プログラミング・インターフェース(NPI)が設けられることがある。NPIは、ネットワーク・デバイス(例えば、デバイス102)とネットワーク(例えば、128)との間においてネットワーク・インターフェースを展開し構成する際に補助することができる。NPIは、1つ以上のCCM116のネットワーク通信スタック110との連携を可能にするデータ構造(例えば、ネットワーク・モジュール・レジストラ(NMR))を設けることができる。例えば、スタック110(例えば、Windows(登録商標)Vista(商標)におけるtcp.sysドライバ)は、CCMクライアントとして登録することができ、1つ以上のCCM116はCCM「プロバイダ」として登録することができる。NMRの使用を含む、Windows(登録商標)Vista(商標)のNPIについては、http://msdn.microsoft.com/libraryにおけるMicrosoft Developers Network (MSDN)ライブラリの中で、以下のディレクトリにおいて更に詳しく説明されている。デバイスおよびドライバ技術/ネットワーク/ウィンドウズ(登録商標)・コードネーム・ロングホーン・ネットワーキング(Device and Driver Technologies/Network/Windows Codename Longhorn Networking)。
本発明の実施形態によっては、CCMタイプ・アブストラクションを用いてCCMを発生する(例えば、インスタンス化する)ことができる。CCMタイプ・アブストラクションは、1つ以上の既定のソフトウェア・アブストラクション(例えば、オブジェクト・タイプ)を用いて定めることができ、ソフトウェア・アブストラクションは、図2に関して以下で説明するように、例えば、CCM APIによって提供することができる。
図2は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御するためのCCMタイプを定めるシステム200の一例を示すブロック図である。システム200は、CCMタイプを定めるシステム200の例示的な実施形態に過ぎず、本発明の範囲を限定することは意図していない。このようなシステムの多数の別の実施形態の任意のもの、例えば、システム200の変形も可能であり、本発明の範囲に該当することを意図している。
以下の説明から更に明白となろうが、本発明の実施形態によっては、システム200のみで、および/またはシステム100との組み合わせで、以下のプロパティの1つ以上を設けることができる。種々のタイプのCCAの任意のものを実装する容易な方法、TCPコードを見る必要なく誰でも(例えば、プログラマまたは開発者)CCAを書く能力、接続毎に、例えば、ネットワーク環境、経路、および/またはリンク特性に基づいて、ソケット・オプション等を通じて複数の利用可能なCCMからCCMを選択する能力、どの位の量のデータを接続上に送るか制御する能力、およびどのタイプのデータを接続に送るか制御する能力。
システム200は、ソフトウェア開発環境202、CCMアプリケーション・プログラミング・インターフェース(API)204、その他のコンポーネント、または前述のあらゆる適した組み合わせの任意のものを含むことができる。ここで用いる場合「アプリケーション・プログラミング・インターフェース」即ち「API」とは、機能および/またはデータ・タイプを定めて、このような機能および/またはデータ・タイプをアプリケーション・プログラムと共にコンピュータ上で実行するように構成することができるようにするコンピュータ読み取り可能命令の1つ以上の別の集合に対するアクセスを与える1つ以上のコンピュータ読み取り可能命令の集合のことである。APIは、アプリケーション・プログラムと個々のコンピュータ環境またはプラットフォーム(例えば、この中で論ずるものの任意のもの)との間における「グルー」(glue)と見なすことができ、1つ以上の特定のコンピュータ・プラットフォーム上または1つ以上の特定のコンピュータ環境において走るようにアプリケーションをプログラムすることを、プログラマに可能にすることができる。
CCMタイプは、少なくとも部分的に、CCM API204を用いて、ソフトウェア開発環境202において展開することができ、CCM API204は、ネットワーク・デバイス(例えば、102)のオペレーティング・システム(例えば、104)によって供給することができる。本発明の実施形態によっては、CCM API204は、例えば、Windows(登録商標)Vista(商標)のようなオペレーティング・システムのNPIの一部であってもよく、または一部として含まれていてもよい。
CCM API204は、1つ以上のCCAアブストラクション205、1つ以上のトランスポート制御イベント・アブストラクション206、その他のコンポーネント、または前述のあらゆる適した組み合わせの任意のものを含むことができる。各トランスポート制御イベント・アブストラクション206は、例えば、前述のトランスポート制御イベントの任意のものというような、特定のトランスポート制御イベントを定めることができる。更に、CCM API204は、1つ以上のCCAアブストラクション205も設けることができる。各CCAアブストラクションは、例えば、デフォルトCCA、NewReno、CTCP、HSTCP、BIC、Fast、その他のタイプのCCA、または前述のあらゆる適した組み合わせというような、特定のタイプのCCAを定めることができる。
つまり、CCM APIは、1つ以上のCCAアブストラクション205、1つ以上のトランスポート制御イベント・アブストラクション206、および1つ以上のCCMを発生することができる1つ以上のCCMタイプ・アブストラクション208を定めるためにソフトウェア開発環境202によって用いることができる情報を定めるその他のアブストラクションを露出することができる。例えば、Windows(登録商標)Vista(商標)を採用する実施形態によっては、1つ以上のCCMタイプは、NMRに登録することによって、1つ以上のアブストラクション205および206と結合することができる。このような実施形態では、ネットワーク通信スタック110(例えば、tcpip.sys)はCCMクライアントとして登録することができ、多数のCCMタイプ・アブストラクション208はNMRを用いてスタック110に登録することができる。
本発明の実施形態によっては、CCM API204およびソフトウェア開発環境202は、システム200が提供するCCMフレームワークの一部であってもよく、CCMタイプを展開する際に補助するために用いることができる。ここで用いる場合、「フレームワーク」とは、アプリケーションを構築する際に補助となる1つ以上の既定のソフトウェア・コンポーネント(例えば、アブストラクションおよび/または具体的なクラスのオブジェクト指向プログラミング言語)を含む再利用可能な設計構造のことである。つまり、「CCMフレームワーク」は、CCMタイプ・アブストラクションを構築する際に補助となる、1つ以上の既定のソフトウェア・コンポーネント(例えば、CCAアブストラクション205、トランスポート制御イベント・アブストラクション206、その他のアブストラクション、および前述のあらゆる適した組み合わせ)を含む再利用可能な設計構造である。
本発明の実施形態によっては、トランスポート制御イベント・アブストラクション206およびトランスポート制御イベントと関連のある情報を定めるアブストラクションは、Cプログラミング言語を用いて定められる。このようなアブストラクションは、限定ではなく、以下の任意のものを含むことができる。
尚、他のイベントおよび関係する情報を定めるその他のアブストラクションもCCM API204によって供給することができ、時と共にAPIから除去することまたはAPIに加入することができることは認められよう。
更に、本発明の実施形態によっては、CCM API204によって露出される1つ以上のCCAアブストラクションは、Cプログラミング言語を用いて定められる場合もある。このようなアブストラクションは、限定ではなく、以下の任意のものを含むことができる。
尚、他のCCAおよび関係する情報を定めるその他のアブストラクションも、CCM API204によって供給することができ、時と共にAPIから除去することまたはAPIに加入することができることは認められよう。Windows(登録商標)Vista(商標)を採用する実施形態では、CCMタイプ・アブストラクション208は、前述のCCAの1つを実装するために登録することができる。例えば、CCMタイプ・アブストラクションは、少なくとも部分的に、Cプログラミング言語で定めた以下のアブストラクションを用いて、定めることができる。
実施形態によっては、Cプログラミング言語を採用する場合、CCMタイプ・アブストラクションは、CCMの初期化および浄化(cleanup)のための関数を定める以下のアブストラクションのうち1つを用いることができる。
システム100および/または200ならびにそのコンポーネントは、ソフトウェア(例えば、C、C#、C++、Java(登録商標)、またはその組み合わせ)、ハードウェア(例えば、1つ以上の特定用途集積回路)、ファームウェア(例えば、電子的にプログラムしたメモリ)、またはそのあらゆる組み合わせを含む、種々の技術の任意のものを用いて実装することができる。システム100および/または200のコンポーネントの1つ以上は、1つのデバイス(例えば、コンピュータ)上に常駐することができ、あるいは1つ以上のコンポーネントが別個の離散デバイス上に常駐することもできる。更に、各コンポーネントを多数のデバイスに跨って分散することもでき、デバイスの1つ以上を相互接続することもできる。
更に、システム100または200の1つ以上のコンポーネントを含む1つ以上のデバイスの各々において、コンポーネントの各々は当該システムの1箇所以上の場所に常駐することもできる。例えば、これらのシステムのコンポーネントの異なる部分が、デバイス上においてメモリ(例えば、RAM、ROM、ディスク等)の異なるエリアに常駐することもできる。このような1つ以上のデバイスの各々は、コンポーネントの中でもとりわけ、1つ以上のプロセッサ、メモリ・システム、ディスク記憶システム、1つ以上のネットワーク・インターフェース、および1つ以上のバスまたは種々のコンポーネントを相互接続するその他の内部通信リンクのような、複数の既知のコンポーネントを含むことができる。システム100および/または200、ならびにそのコンポーネントは、図8および図9に関して以下で説明するようなコンピュータ・システムを用いて実装することができる。
図3は、本発明の一部の実施形態にしたがってネットワーク接続上で輻輳を制御する方法300の一例を示すフローチャートである。方法300は、ネットワーク接続上で輻輳を制御する方法の例示的実施形態に過ぎず、本発明の範囲を限定することは意図していない。多数のその他の実施態様、例えば、方法300の変形も可能であり、本発明の範囲に該当することを意図している。
行為302において、システム100に関して先に説明したように、輻輳制御のタイプを、例えば、ネットワーク通信スタック(例えば、スタック110)によって選択することができる。
行為304において、選択したタイプのCCMを発生することができ(例えば、CCMタイプ・アブストラクション208から)、行為306において、発生したCCMを用いて、接続上のネットワーク輻輳を制御することができる。行為304および306の各々は、システム100および200に関して先に説明したように実行することができる。
接続の存続中、行為308において、システム100に関して先に説明したように、発生した輻輳制御モジュールに、例えば、スタック110によって1つ以上のトランスポート・イベントを通知することができる。
行為310において、1つ以上の接続状態変数の値を、1つ以上のトランスポート・イベントに基づいて(例えば、発生したCCMによって)更新することができ、行為312において、ネットワーク通信スタックに、例えば、システム100に関して先に説明したように、1つ以上の接続状態変数の更新値を通知することができる。
接続の制御は、例えば、システム100に関して先に説明したように、1つ以上の接続状態変数の更新値に基づいて、行為314において(例えば、スタック110によって)更新することができる。
方法300は、追加の行為を含むこともできる。更に、方法300の一部として実行する行為の順序は、図3に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および/または1つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為308〜314のいずれでも、他の接続に対する行為のいずれの実行とも同時に、1つ以上のイベントまたは変数について実行することができる。
ネットワーク通信スタック110は、例えば、遅延主体CCAを実施する一部として、トランスポート制御イベントを記録する際に大量のメモリを消費する場合がある。即ち、接続毎に膨大な量の状態情報を維持する場合があり得る。
本発明の実施形態によっては、1つ以上の接続において送信および/または受信するパケット全て未満からの情報をサンプリングすることによって、接続毎に状態情報によって消費されるメモリ量を削減する。全てのパケット未満からの情報をサンプルしつつ、例えば、接続に対するRTTの変化を検出することによって、適時に輻輳を検出することができる程の高いサンプリング・レートをなおも維持することができる。サンプリング・レートが低すぎると、輻輳の判定が遅すぎて、ボトルネック・バッファのオーバーフローを防止するために接続における情報の送信を修正できなくなる虞れがある。
本発明の実施形態によっては、接続のサンプリング・レートは、当該接続の帯域幅−遅延の積(BDP)、即ち、接続の接続速度と接続のRTTの積(即ち、速度×RTT)に基づく。つまり、接続速度を1秒当たりのメガバイト単位(Mbps)で表し、RTTを秒単位で表すと、BDPはビットまたはバイト単位で表すことができる。接続に対する輻輳枠(congestion window)は、接続のBDPに基づいて決定することができる。ここで用いる場合、「輻輳枠」とは、いずれの所与の時点においても所与の接続に対して「伝送する」ことが許容される最大データ量のことである。例えば、輻輳枠は、接続に対して1)送信し終えた、および2)承認が未だ受信されていない、パケットの最大数を定めることができる。ネットワーク通信スタック(例えば、110)は、伝送パケットの1つに対して承認が受信されるまで接続に対する最大許容パケット数以下(即ち、輻輳枠以下)が伝送するように、接続上におけるデータの送信を制御するために輻輳制御枠の値を利用するように構成することができる。
以下の表1は、RTTが100msである接続について、1)接続に対する状態情報を維持するために消費するメモリ量、および2)適時に接続上での輻輳を識別する能力の容認できる均衡を得るために、発明者が実験によって決定したサンプリング・レートを示す。サンプリング・レートとは、ラウンド毎に、情報をサンプリングする接続において、送信されるパケット数である。「ラウンド」とは次のように定める。データを丁度送信し始めた接続について考える。データの第1断片(即ち、「セグメント」)に対する承認(即ち、「ACK」)の受信に応答して、送信されたがACKが未だ受信されていないデータの最後のセグメントのシーケンス番号(以下で説明する。または別の識別子)を記録することができる(例えば、「RoundEnd」と呼ばれる変数に)。この最後のセグメントに対するACKを受信したときに、ラウンドは終了する。
表1の第1列は、接続の速度を示す。第2列は、RTT=100ms、および第1列に定めた接続速度の場合に、接続に対して定めた輻輳窓(パケット単位)を示す。第3列は、実験的に決定した、ラウンド当たりのサンプリングしたパケット単位とした、容認可能なサンプリング・レートを定める。例えば、第3行は、接続速度が1Gpbs、RTTが100msの場合に、輻輳枠を8,333パケットとしたときに、ラウンド当たり128パケットのサンプリング・レートが容認可能であると判断したことを示す。尚、本発明は、表に示す値に限定されるのではなく、他の値も使用可能であり本発明の範囲に該当することを意図していることは認められよう。
図4は、本発明の一部の実施形態による、接続速度およびRTTのある種の組み合わせに対して、接続のサンプリング・レートの一例を示す表400である。尚、本発明は、図5に示す値に限定されるのではなく、他の値も使用可能であり本発明の範囲に該当することを意図していることは認められよう。
列404におけるサンプリング・レートは、前述の表1の第3列に示したサンプリング・レートに対応する。列406〜412は、所与の接続速度に対して、指定したサンプリング・レートがRTTの関数であることを示す。所与の接続速度(即ち、所与の行)に対して、表400において位置が右側にある程、高いRTTに対応し、これに対応して高いサンプリング・レートが指定され、サンプリング・レートは、接続速度およびRTTには関係なく、毎秒256パケットで頭打ちとなる。
本発明の実施形態によっては、輻輳を制御するための情報をサンプリングする目的で、メモリ・プール(pool)をネットワーク・デバイス上における多数の(例えば、全ての)接続間で共有するか、または多プロセッサの実施形態では、所与のプロセッサに対する多数の(例えば、全ての)接続によって共有する。このプールは、固定サイズであってもよく、メモリ・プールからのスロットを、必要に応じて、接続に割り当てたり、割り当てを解除することができる(例えば、ネットワーク通信スタック、例えば、110によって)。即ち、ある接続に割り当てられるメモリ・プールからのメモリ量(即ち、スロット数)は、当該接続上で現在送信および/または受信しているデータに基づくことができる。ここで用いる場合、「交換」という用語は、送信および/または受信を意味する。つまり、各接続に割り当てられるメモリ量は、単に計算した接続のBDPだけに基づくのではなく、接続上で実際に交換されるデータ量に基づくのである。
例えば、バースト状接続は、その輻輳枠を大きな値(即ち、接続に対するBDPに等しい値)に増大することができ、その結果、プールから割り当てられるメモリを増加させることができる。しかしながら、接続は、そのデータ交換レートを維持していなければ、即ち、その輻輳枠が定める量の伝送データを維持しなければ、増大した量のメモリを継続して割り当てられることはない。
この必要に応じて輻輳制御の目的で接続間でメモリ・プールを共有する技法は、実際に接続上で交換されるデータに関係なくメモリを接続に予め割り当てる(例えば、純粋にBDPに基づいて)よりも、効率的なメモリの使用となる。
本発明の実施形態によっては、以下のデータ構造を用いてサンプルを定めることもできる。
そして、次のデータ構造は、接続上で輻輳を制御する目的で、パケットからサンプリングした情報を記録し追跡するために用いることができる。
以上のデータ構造定義は、図5に示すデータ構造を構成するために用いることができる。図5は、本発明の一部の実施形態にしたがって、接続上で受信したパケットからサンプリングした情報を格納するデータ構造500の例を示すブロック図である。図5は、接続上で受信したパケットからサンプリングした情報を格納するデータ構造の例示的な実施形態に過ぎず、本発明の範囲を限定することは意図していない。他のデータ構造、例えば、構造500の変形も用いることができ、本発明の範囲に該当することを意図している。
データ構造500は、円形バッファとすることができ、メモリ・スロット502および512を含む多数のメモリ・スロットを含むことができる。各メモリ・スロットは、例えば、それぞれスロット504〜508および514〜518のような複数(例えば、32)のスロットを含む。インデックス520(「SndNext」)は、接続に割り当てられたメモリにおいて、サンプリングされた情報が格納される次の位置を示す。インデックス510(「RcvNext」)は、サンプリングした情報を含む次のエントリを示し、このサンプリングした情報に対応するACKを待っている(例えば、ACKが未だ受信されていない最も早いエントリ)。例えば、エントリ506は、情報片を含むパケットが接続上で送信されたときに、その情報片に対して発生されたタイムスタンプを既に含むことができる。この情報片に対して、ACKは未だ受信されていないが、次に受信されることが予期されている。この情報片に対応するACKが受信されると、パケットのタイムスタンプをエントリ506に加入することができる。このエントリに現在含まれる2つのタイムスタンプ間の差は、情報片に対するRTTを決定するために用いることができる。このRTTは、輻輳制御イベントであるRTTの変化を判定するために用いることができ、接続のCCMに報告することができ、以下に説明するように、メモリ割り当てに変化が生ずる可能性がある。
インデックス510および520は、所与の時点における接続に対する、伝送データの量を判定するために用いることができる。例えば、所与の時点における接続に対する、伝送データの量は、RttSampleTable[SndNext].Seq - RttSampleTable[RcvNext].Seqとして決定することができる。
接続に割り当てられる実際のサンプル数を監視するために、接続毎に2つの変数、ActualSamplesおよびAssignedSamplesを用いることができる。ActualSamplesは、実際に接続に割り当てられる正確なブロック数を追跡することができる。AssignedSamplesは、接続が潜在的に用いることができる量であり、接続に対する輻輳ウィンドウに基づくことができる。しかしながら、接続が実際に輻輳枠に値するデータを送ろうとしなければ、メモリは実際には割り当てられない(そして、ActualSamplesによって反映されない)。AssignedSamplesは、常に、>=ActualSamplesとなる。
接続が作成されたときに、32サンプルのブロックを1つ、この接続に割り当てることができ(例えば、デフォルトで)、AssignedSamplesをActualSamplesに等しくセットすることができる。即ち、双方共1に等しくセットすればよい(即ち、1データ・ブロック)。
データが接続に送られるに連れて、インデックス510および520は、伝送データ量、例えば、RttSampleTable[SndNext].Seq-RttSampleTable[RcvNext].Seqを追跡することができる。データ構造500内においてサンプルを格納する次のエントリは、割り当てたサンプルに基づいて決定することができ、例えば、(SndNext+1)% AssignedSamples * CTCP_DWND_RTT_SAMPLES_NUMとなる。この計算値がActualSamples * CTCP_DWND_RTT_SAMPLES_NUMよりも大きい場合、メモリ・プールから新しいブロック(例えば、別の32サンプル・エントリ)を割り当てることができ、ActualSamplesの値を1だけ増大させることができる。新しいブロックの割り当てをし損ねた場合、AssignedSamplesをActualSamplesに等しくセットし、インデックス520の値(「SndNext」)を再計算することができる。
データ構造500が満たされた場合(即ち、実際に接続に割り当てられたメモリ量が割り当てメモリ量と一致した場合)、サンプルを記録することができない。
サンプルは、所与の接続に対するサンプリング・レートが許す限り(そして、プール内においてメモリ空間が未だ利用可能であれば)、記録することができる。例えば、表1および図4によれば、接続に対する接続速度(即ち、帯域幅)が1Gbpsであり、RTTが現在100msにセットされている場合、ラウンド当たり、即ち、輻輳枠あたり128サンプル(例えば、4ブロックのメモリ空間に相当する)サンプリングすることができる。
各ラウンドの終点において、1つ以上のイベントを実行することができる。先に注記したように、ラウンドが終了するのは、ラウンドの最後のセグメントに対するACKが受信されたときである。例えば、ラウンドが終了するとき、輻輳枠を再計算することができ、サンプリング・レートを(再計算した輻輳ウィンドウ)%AssignedSamples * CTCP_DWND_RTT_SAMPLES_NUMとして再構成することができる。
更に、ラウンドが終了するとき、接続に割り当てられたが解放してメモリ・プールに戻すことができる未使用エントリがあるか否か、データ構造500から判断することができる。この判断は、インデックス510および520がデータ構造500の中のどこに位置するかに基づくとよい。例えば、特定のブロック(例えば、502または512)に対して、510および520双方がブロックの中にない場合、ブロックを解放することができる(そして、通信状態変数を調節し直すことができる)。510および520が同じブロックの中にある場合、データ構造500の中に、このようなブロックに続くブロックがあれば、その全てを解放することができる。データ構造500が円形バッファである実施形態では、データ構造500におけるインデックス520(「SndNext」)の位置を突き止め、インデックス510(「RcvNext」)が指し示すエントリを有するブロックまで、後続のブロック全てを削除するという別の技法もある。
前述のメモリ割り当て/割り当て解除技法を用いる際、接続が常にその輻輳枠に相応のデータ量を送信している場合、メモリ・プールの割り当てメモリ(例えば、データ構造500のブロック)を解放しない。それ以外の場合、未使用のメモリ空間は、メモリ・プールに戻し、他の接続が用いることができる。
図6は、本発明の実施形態の一部にしたがって、例えば、前述のRTTサンプリングの論述に基づいて、ネットワーク接続上で輻輳を制御する方法600の一例を示すフロー・チャートである。尚、方法600は、ネットワーク接続上で輻輳を制御する方法の例示的実施形態に過ぎず、本発明の範囲を限定することは意図していない。このような方法の多数のその他の実施態様、例えば、方法600の変形も可能であり、本発明の範囲に該当することを意図している。
行為602において、接続上において受信したパケットからの情報をサンプリングするレートを、接続の送信レート、および接続の往復時間に少なくとも部分的に基づいて、例えば、前述のように、決定する。
行為604において、決定したサンプリング・レートに基づいて、メモリ・プールの一部(例えば、データ構造500の1つ以上のブロック)を、接続に割り当てることができる。
行為606において、接続上で受信したパケットからの情報を、決定したサンプリング・レートでサンプリングし、行為608において、サンプリングした情報を、例えば、構造500のエントリにおけるメモリの割り当て部分に格納することができる。更に、行為607において、接続上において受信した着信パケットから情報をサンプリングすることができる。これらのパケットは行為606においてサンプリングしたパケットに対応し、この情報を割り当てメモリに格納することができる。例えば、前述のように、情報片(即ち、セグメント)のタイムスタンプを、データ構造500のエントリに格納することができる。後に、この情報片に対するACKを含むパケットを受信したときに、このパケットのタイムスタンプを同じエントリに格納するとよい。
行為610において、ネットワーク接続上における輻輳を、少なくとも部分的に、サンプリングした情報に基づいて制御することができる。例えば、前述のように、情報片のRTTを、情報片に対してサンプリングした2つのタイムスタンプに基づいて判定し、このRTTを用いて輻輳を制御することができる。例えば、ラウンドの終点において、接続のRTTが変化したことを判定することができ、これを対応するCCMに報告することができ、CCMは、前述のように、それに応じて接続上における輻輳のその制御を修正することができる。
行為610から行為602を指し示す矢印によって示すように、接続上における輻輳の制御、および接続に割り当てられたメモリ・プールのメモリ量は、サンプリングした情報に基づいて調節することができる。
方法600は、追加の行為を含むこともできる。更に、方法600の一部として実行する行為の順序は、図5に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および/または1つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為602〜510のいずれでも、他の接続に対して現在実行している行為602〜510のいずれとでも同時に、1つの接続について実行することができる。
オペレーティング・システムの中には、当該オペレーティング・システム上においてアプリケーションが用いることができる連続カウント(running count)を設けるAPIを備えている場合もある。例えば、Microsoft Corporationから入手可能なオペレーティング・システムの一部は、KeQueryPerformanceCounterと呼ばれるAPIを備えており、このAPIは、オペレーティング・システム上で入手可能な最も粒度が細かい連続カウントを設ける。しかしながら、このAPIをコールすることは非常に重荷であり、これを頻繁にコールし過ぎると、オペレーティング・システムが常駐するネットワーク・デバイスの性能が低下する可能性がある。
したがって、本発明の実施形態によっては、着信パケット(例えば、126)のタイムスタンプ(例えば、タイムスタンプ118)は、オペレーティング・システム(例えば、104)および、パケットを受信したネットワーク・デバイス(例えば、102)のネットワーク通信スタック(例えば、110)とは別個のネットワーク・インターフェース・モジュール上で(例えば、モジュール122のタイムスタンプ発生器124によって)発生する。タイムスタンプは、接続のRTTを判定するために用いることができ、接続上で輻輳を制御するために用いることができる。これについては、以下で更に詳しく説明する。
タイムスタンプは、ネットワーク・インターフェース・モジュール上において、パケットを受信した時刻にできるだけ近く取り込むとよく、以下で更に詳しく説明するように、ネットワーク通信スタック110に利用可能としたデータ構造の中に含めるとよい。つまり、ネットワーク・インターフェース・モジュールにおいて受信したパケット毎に、タイムスタンプを記録することができる。これは、オペレーティング・システムが発生するタイムスタンプよりも正確に、パケットを受信した時刻を反映する。つまり、ネットワーク・インターフェース・モジュールにおいてパケットを受信したときと、それをネットワーク通信スタックに送ったときとの間に遅延があっても、タイムスタンプは、それでもなお、パケットが実際にネットワーク・デバイス上で受信されたときを正確に示す。更に、オペレーティング・システムのリソースは、タイムスタンプを発生する負担から解放され、ネットワーク・デバイス上で輻輳を制御する解決策を一層経済的に提供することができる。
図7は、本発明の一部の実施形態にしたがって、ネットワーク・デバイスと通信ネットワークとの間にあるネットワーク接続上で輻輳を制御する方法700を示すフローチャートである。ネットワーク・デバイスは、ネットワーク通信スタックと別個のネットワーク・インターフェース・コンポーネントとを備えている。
行為702において、例えば、前述のネットワーク・インターフェース・モジュール122において、ネットワークから接続上でパケット(例えば、126)を受信することができる。
パケットを受信した時刻に対応するタイムスタンプ(例えば、118)を、行為704において、例えば、モジュール122のタイムスタンプ発生器124によって発生することができる。
行為706において、タイムスタンプをパケットと関連付ける情報を、ネットワーク通信スタックによるアクセスが可能なデータ構造に格納することができる。例えば、Windows(登録商標)Vista(商標)オペレーティング・システムを採用する本発明の実施形態では、行為706は、タイムスタンプをパケットと関連付ける情報を、NET_BUFFERおよび/またはNET_BUFFER LISTデータ構造に格納することを含むとよい。
行為708において、例えば、システム100に関して先に説明したように、パケットをネットワーク通信スタック(例えば、110)に送ることができる。
行為710において、ネットワーク・デバイスから別のネットワーク・エンティティに送られたデータのRTTを、タイムスタンプおよびパケットを関連付ける情報に少なくとも部分的に基づいて、判定することができる。例えば、データ片をネットワーク・デバイスから別のネットワーク・エンティティに送信したときに、タイムスタンプを発生することができる。接続のRTTは、このデータ片を送信したときを示すタイムスタンプと、データ片をネットワーク・エンティティが受信したことを示す承認のために行為704において発生したタイムスタンプとの間の差を判定することによって、判定することができる。
行為712において、判定した往復時間に少なくとも部分的に基づいて、ネットワーク輻輳を判定することができる。例えば、行為710において判定したRTTが接続に対するRTTの変化を示す場合、例えば、システム100に関して先に説明したように、この変化を、接続上で輻輳を制御するCCMに報告するとよい。次いで、CCMは接続に対する接続状態変数を更新し、更新した変数をネットワーク通信*−スタック(例えば、110)に報告することができ、次いで、例えば、先に説明したように、接続の制御を変更することができる。
方法700は、追加の行為を含むこともできる。更に、方法400の一部として実行する行為の順序は、図4に示す順序に限定されるのではない。何故なら、これらの行為は、他の順序で実行することもでき、および/または1つ以上の行為を少なくとも部分的に並列に実行することもできるからである。例えば、行為708は、行為706の前でも、またはこれと同時にでも実行することができる。
方法300、600、および700やその行為、ならびにこの方法およびこれらの行為の様々な実施形態および変形、更には前述のその他の方法および技法は、個別でもまたは組み合わせでも、1つ以上のコンピュータ読み取り可能媒体上に接触可能に具体化したコンピュータ読み取り可能信号によって定めることができる。コンピュータ読み取り可能媒体は、例えば、不揮発性記録媒体、集積回路メモリ・エレメント、またはその組み合わせである。コンピュータ読み取り可能媒体は、コンピュータによってアクセスすることができる入手可能な媒体であれば任意のものが可能である。限定ではない一例として、コンピュータ読み取り可能媒体は、コンピュータ記憶媒体および通信媒体から成ると考えられる。コンピュータ記憶媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータというような情報の格納のために、あらゆる方法または技術で実施される、揮発性および不揮発性の双方、リムーバブル、および非リムーバブル媒体を含む。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュ・メモリまたはその他のメモリ技術、CD−ROM、ディジタル・バーサタイル・ディスク(DVD)またはその他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたはその他の磁気記憶デバイス、所望の情報を格納するために用いることができしかもコンピュータがアクセス可能なその他の任意の媒体、その他の種類の揮発性および不揮発性メモリ、ならびに前述の媒体の任意の適した組み合わせをも含むが、これらに限定されるのではない。
通信媒体は、通例、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータを、搬送波またはその他の移送機構のような変調データ信号において具体化し、あらゆる情報配信媒体を含む。「変調データ信号」という用語は、その特性集合の1つ以上が、情報を信号内にエンコードするよう様式で、変化している信号を意味する。限定ではなく、一例として、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体、ならびに音響、RF、赤外線、およびその他のワイヤレス媒体というようなワイヤレス媒体、ならびに前述の媒体の任意の適した組み合わせを含む。
1つ以上のコンピュータ読み取り可能媒体上に具体化するコンピュータ読み取り可能信号は、命令を、例えば、1つ以上のプログラムの一部として定めることができ、これらをコンピュータによって実行する結果、このコンピュータに、ここに記載した機能の1つ以上(方法300、600、および700またはその任意の行為も含む)および/または種々の実施形態、変形、およびその組み合わせを実行するように命令する。このような命令は、複数のプログラミング言語の任意のもので書いてもよく、例えば、Java(登録商標)、J#、Visual Basic、C、C#、C++、Fortran、Pascal、Eiffel、Basic、COBOL等、またはその種々の組み合わせの任意のものがある。このような命令を具体化したコンピュータ読み取り可能媒体は、ここに記載したシステム100、200、800、および900のコンポーネントの1つ以上に位置することができ、このようなコンポーネントの1つ以上に跨って分散することもでき、更にそれらの間で移行してもよい。
コンピュータ読み取り可能媒体は、その上に格納されている命令を任意のコンピュータ・システム・リソースにロードして、ここで論じた本発明の態様を実施することができるように、可搬型とするとよい。加えて、前述のコンピュータ読み取り可能媒体上に格納されている命令は、ホスト・コンピュータ上で走るアプリケーション・プログラムの一部として具体化した命令に限定されるのではないことは認められよう。逆に、命令は、先に論じた本発明の態様を実施するようにプロセッサをプログラムするために採用することができるのであれば、いずれの種類のコンピュータ・コード(例えば、ソフトウェアまたはマイクロコード)としてでも具体化することができる。
尚、コンピュータ・システム、例えば、図1、図2、図8および図9に関して説明した、ここに記載する機能を実行するコンピュータ・システムの多数のコンポーネントのうち、任意の単一のコンポーネントまたはその集合体も、包括的に、このような機能を制御する1つ以上のコントローラとして見なすことができることは認められよう。1つ以上のコントローラは、先に引用した機能または前述の機能の任意の適した組み合わせでも実行するマイクロコードまたはソフトウェアを用いてプログラミングしたプロセッサを用いて、専用ハードウェアおよび/またはファームウェアのように、多数の方法で実施することができる。
本発明による種々の実施形態は、1つ以上のコンピュータ・システム上において実施することができる。これらのコンピュータ・システムは、汎用コンピュータとすることができ、例えば、Intel PENTIUM(登録商標)型プロセッサ、Motorola PowerPC、Sun UltraSPARC、Hewlett-Packard PA-RISCプロセッサ、Advanced Micro Devices (AMD)から入手可能な種々のプロセッサの任意のもの、またはその他の任意の形式のプロセッサに基づくコンピュータがある。尚、本発明の種々の実施形態を実施するためには、1つ以上の任意の形式のコンピュータ・システムでも用いることができることは認められよう。
本発明の一実施形態による汎用コンピュータ・システムは、前述の機能の1つ以上を実行するように構成されている。尚、このシステムは、他の機能も実行することができ、本発明は、いずれの特定の機能または機能集合を有することにも限定されないことは認められよう。
例えば、本発明の種々の態様は、図8に示すような、汎用コンピュータ・システム800において実行する特殊ソフトウェアとして実装することができる。コンピュータ・システム800は、ディスク・ドライブ、メモリ、またはデータを格納するその他のデバイスのような、1つ以上のメモリ・デバイス804に接続されているプロセッサ803を含むことができる。メモリ804は、通例、コンピュータ・システム800の動作中にプログラムおよびデータを格納するために用いられる。コンピュータ・システム800のコンポーネントは、相互接続メカニズム805によって結合することができ、相互接続メカニズム805は、1つ以上のバス(例えば、同じ機械の内部に一体化されたコンポーネント間)、および/またはネットワーク(例えば、別個の離散機械に位置するコンポーネント間)を含むことができる。相互接続メカニズム805によって、システム800のシステム・コンポーネント間において通信(例えば、データ、命令)を交換することが可能となる。また、コンピュータ・システム800は、1つ以上の入力デバイス802、例えば、キーボード、マウス、トラックボール、マイクロフォン、タッチ・スクリーン、および1つ以上の出力デバイス801、例えば、印刷装置、表示画面、スピーカも含む。加えて、コンピュータ・システム800は、1つ以上のインターフェース(図示せず)も内蔵することができる。インターフェースは、コンピュータ・システム800を通信ネットワーク(相互接続メカニズム805に加えて、またはその代わりとして)に接続する。
記憶システム806を、図9に更に詳細に示すが、通例コンピュータ読み取り可能および書き込み可能不揮発性記録媒体901を含む。媒体901においては、プロセッサが実行すべきプログラム、あるいは媒体901に格納されておりプログラムが処理すべき情報を定める信号が格納されている。この媒体は、例えば、ディスクまたはフラッシュ・メモリとすることができる。通例、動作中には、プロセッサがデータを不揮発性記録媒体901から、媒体901よりも速くプロセッサが情報にアクセスすることを可能にする別のメモリ902に読み出させる。このメモリ902は、通例、ダイナミック・ランダム・アクセス・メモリ(DRAM)またはスタティック・メモリ(SRAM)のような揮発性ランダム・アクセス・メモリである。これは、図示のように、記憶システム806の中に配置すること、または図示しない記憶システム804に配置することもできる。プロセッサ803は、一般に、集積回路メモリ804、902内にあるデータを操作し、処理が完了した後に、このデータを媒体901にコピーする。媒体901と集積回路メモリ・エレメント804、902間におけるデータの移動を管理するための種々のメカニズムが知られており、本発明はそれらに限定されることはない。本発明は、特定のメモリ・システム804や記憶システム806にも限定されることはない。
コンピュータ・システムは、特別にプログラムされた特殊目的ハードウェア、例えば、特定用途集積回路(ASIC)を含むことができる。本発明の態様は、ソフトウェア、ハードウェア、またはファームウェア、あるいはその任意の組み合わせでも実施することができる。更に、このような方法、行為、システム、システム・エレメント、およびそのコンポーネントは、先に説明したコンピュータ・システムの一部として、または独立したコンポーネントとして実施することができる。
コンピュータ・システム800は、一例として、本発明の態様を実用化することができる一種のコンピュータ・システムとして示したが、本発明の態様は、図8に示すコンピュータ・システム上で実施することに限定されるのではないことは認められよう。本発明の種々の態様は、図8に示すのとは異なるアーキテクチャまたはコンポーネントを有する1つ以上のコンピュータ上でも実用化することができる。
コンピュータ・システム800は、高級コンピュータ・プログラミング言語を用いてプログラム可能な汎用コンピュータ・システムとすることができる。また、コンピュータ・システム800は、特別にプログラムされた特殊目的ハードウェアを用いて実施することもできる。コンピュータ・システム800では、プロセッサ803は、通例、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(登録商標)とすることができる。種々のその他のオペレーティング・システムのいずれでも用いることができる。
プロセッサおよびオペレーティング・システムは、一体となってコンピュータ・プラットフォームを定め、これに合わせて、高級プログラミング言語でアプリケーション・プログラムが書かれる。尚、本発明は、特定のコンピュータ・システム・プラットフォーム、プロセッサ、オペレーティング・システム、またはネットワークにも限定されないことは言うまでもない。また、本発明は、特定のプログラム言語やコンピュータ・システムには限定されず、他のしかるべきプログラミング言語および他のしかるべきコンピュータ・システムも使用可能であることは、当業者には明白なはずである。
コンピュータ・システムの1つ以上の部分は、通信ネットワークに結合されている1つ以上のコンピュータ・システム(図示せず)に跨って分散させることができる。これらのコンピュータ・システムも、汎用コンピュータ・システムであってよい。例えば、本発明の種々の態様は、1つ以上のクライアント・コンピュータにサービスを提供し、分散型システムの一部として全体のタスクを実行するように構成されている1つ以上のコンピュータ・システム(例えば、サーバ)間で分散させることができる。例えば、本発明の種々の態様は、本発明の種々の実施形態にしたがって種々の機能を実行する1つ以上のサーバ・システム間で分散したコンポーネントを含むクライアント−サーバ・システム上で実行することができる。これらのコンポーネントは、通信プロトコル(例えば、TCP/IP)を用いて、通信ネットワーク(例えば、インターネット)上で通信する、実行可能、中間(例えば、IL)、またはインタープリタ型(例えば、Java(登録商標))コードとすることができる。
尚、本発明は、いずれの特定のシステムまたはシステム群において実行することにも限定されず、本発明は、いずれの特定の分散型アーキテクチャ、ネットワーク、または通信プロトコルにも限定されないことは認められよう。
本発明の種々の実施形態は、SmallTalk、Java(登録商標)、J#(J-Sharp)、C++、Ada、またはC#(C-Sharp)のような、いずれのオブジェクト指向プログラミング言語を用いてもプログラムすることができる。他のオブジェクト指向プログラミング言語を用いることもできる。代わりに、機能的、スクリプティング、および/または論理的プログラミング言語を用いてもよい。本発明の種々の態様は、非プログラミング環境(例えば、HTML、XML、またはブラウザ・プログラムのウィンドウ内において見ると、グラフィカル・ユーザ・インターフェース(GUI)の態様を表現する、または他の機能を実行するその他のフォーマットで作成した文書)において実施することもできる。本発明の種々の態様は、プログラムされたエレメントまたはプログラムされていないエレメント、あるいはそのいずれの組み合わせとしてでも実施することができる。更に、本発明の種々の実施形態は、Microsoft Corporationから入手可能なMicrosoft(登録商標)NET技術を用いて実施することもできる。
以上、本発明の例示的な実施形態の一部について説明したが、以上のことは単なる例示に過ぎず、限定ではなく、一例として呈示したに過ぎないことは、当業者には明白なはずである。多数の修正やその他の例示的な実施形態も、当技術分野における通常の技術範囲に含まれ、本発明の範囲に該当するものと見なすこととする。即ち、ここに呈示した例の多くは、方法行為またはシステム・エレメントの具体的な組み合わせを伴うが、これらの行為およびこれらのエレメントは、別の方法で組み合わせて同じ目的を達成することもできることは言うまでもない。一実施形態のみに関連して論じた行為、エレメント、および特徴は、他の実施形態における同様の役割から除外されることは意図していない。更に、以下の特許請求の範囲において明記する1つ以上のミーンズ−プラス−ファンクション(means-plus-function)の限定について、手段は、明記した機能を実行するためにここに開示した手段に限定されることは意図しておらず、明記した機能を実行するための同等の手段であれば、現在既知のまたは今後開発されるいずれの手段でもその範囲に包含することを意図している。
「第1」、「第2」、「第3」等のような順序に関する用語を特許請求の範囲において請求項の要素を修正するために用いる場合、これらの用語自体は、一方の請求項の要素の他方に対する優先順、上下関係、または順序、あるいは方法の行為を実行する時間的順序のいずれも暗示せず、単にある名称を有する一方の請求項の要素を同じ名称を有する(序数用語を別にすれば)別の要素から区別し、これらの請求項の要素を区別するための標識として用いるに過ぎない。
図1は、本発明の一部の実施形態にしたがって、ネットワーク・デバイスと通信ネットワークとの間における1つ以上のネットワーク接続上で輻輳を制御するシステムの一例を示すブロック図である。 図2は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御するCCMタイプを定めるシステムの一例を示すブロック図である。 図3は、本発明の一部の実施形態にしたがって、ネットワーク接続上で輻輳を制御する方法の一例を示すフローチャートである。 図4は、本発明の一部の実施形態による、接続速度およびRTTの一定の組み合わせについて、接続に合ったサンプリング・レートの一例を示す表である。 図5は、本発明の一部の実施形態にしたがって、接続上で受信するパケットからサンプリングした情報を格納するデータ構造の一例を示すブロック図である。 図6は、本発明の一部の実施形態にしたがって、ネットワーク接続上において輻輳を制御する方法の一例を示すフロー・チャートである。 図7は、本発明の一部の実施形態にしたがって、ネットワーク接続上において輻輳を制御する方法の一例を示す。 図8は、本発明の一部の実施形態を実施することができるコンピュータ・システムの一例を示すブロック図である。 図9は、本発明の一部の実施形態を実施するコンピュータ・システムの一部として用いることができる記憶システムの一例を示すブロック図である。

Claims (20)

  1. ネットワーク接続上で輻輳を制御する輻輳制御モジュールを作成するシステムであって、
    輻輳制御モジュールを発生することができる輻輳制御モジュール・タイプを定める際に用いるための1つ以上のイベント・アブストラクションを露出するアプリケーション・プログラミング・インターフェースを備えており、各イベント・アブストラクションがトランスポート制御イベントを定める、システム。
  2. 請求項1記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、前記イベント・アブストラクションによって定められるイベントを処理する情報を各々定める1つ以上の情報アブストラクションを露出する、システム。
  3. 請求項1記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、ネットワーク接続上で輻輳を制御する輻輳制御アルゴリズムを各々定める1つ以上の輻輳制御アルゴリズム・アブストラクションを露出する、システム。
  4. 請求項1記載のシステムにおいて、前記アプリケーション・プログラミング・インターフェースは、ネットワーク・デバイスのオペレーティング・システムによって提供される、システム。
  5. 請求項1記載のシステムにおいて、各イベント・アブストラクションは、接続上における再送信時間切れ、復路時間の変化、新たなデータ承認、重複承認の受信、および新たなデータ・パケットの送出、のイベントのうち2つ以上を定める、システム。
  6. ネットワーク・デバイスと通信ネットワークとの間における1つ以上のネットワーク接続上で輻輳を制御するシステムであって、
    前記1つ以上の接続においてネットワーク通信を制御するように動作するネットワーク通信スタックと、
    1つ以上の輻輳制御モジュールであって、各々、前記1つ以上のネットワーク接続のそれぞれにおいて輻輳を制御する輻輳制御アルゴリズムを定め、それぞれの接続に対して1つ以上の接続状態変数を維持する、輻輳制御モジュールと、
    を備えており、
    前記ネットワーク通信スタックは、前記1つ以上の接続の各々に対して、当該接続上で輻輳を制御する前記輻輳制御モジュールに、当該接続上で発生する1つ以上のトランスポート制御イベントを通知するように動作する、システム。
  7. 請求項6記載のシステムにおいて、各輻輳制御モジュールは、当該輻輳制御モジュールが輻輳を制御する接続上で発生したトランスポート制御イベントを通知されたことに応答して、1つ以上の接続状態変数を更新するように動作する、システム。
  8. 請求項7記載のシステムにおいて、各輻輳制御モジュールは、前記ネットワーク通信スタックに、前記輻輳制御モジュールが輻輳を制御する接続に対して前記更新した1つ以上の接続状態変数を通知するように動作する、システム。
  9. 請求項8記載のシステムにおいて、前記ネットワーク通信スタックは、前記1つ以上の輻輳制御モジュールから受信した、前記更新した1つ以上の接続状態変数に基づいて、前記1つ以上の接続上のネットワーク通信を制御するように動作する、システム。
  10. 請求項6記載のシステムであって、更に、
    複数の輻輳制御モジュール・アブストラクションであって、各々、輻輳制御モジュール・タイプを定める、輻輳制御モジュール・アブストラクションを備えており、
    前記ネットワーク通信スタックは、前記1つ以上の接続のうち第1の接続に対して、前記複数の輻輳制御モジュール・アブストラクションのうち第1の輻輳制御モジュール・アブストラクションを選択し、前記第1輻輳制御モジュール・アブストラクションから、前記1つ以上の輻輳制御モジュールのうち第1輻輳制御モジュールを作成するように動作する、システム。
  11. 請求項10記載のシステムにおいて、前記ネットワーク通信スタックは、前記1つ以上の接続のうち第2の接続に対して、前記複数の輻輳制御モジュール・アブストラクションのうち前記第1の輻輳制御モジュール・アブストラクションを選択し、前記第1輻輳制御モジュール・アブストラクションから、前記1つ以上の輻輳制御モジュールのうち第2の輻輳制御モジュールを作成するように動作する、システム。
  12. 請求項6記載のシステムにおいて、前記ネットワーク通信スタックは、TCP/IPスタックである、システム。
  13. コンピュータ・プログラム製品であって、
    少なくとも1つのコンピュータ読み取り可能媒体と、
    前記少なくとも1つのコンピュータ読み取り可能媒体に格納されており、命令を定めるコンピュータ読み取り可能信号と、
    を備えており、前記命令は、コンピュータによって実行すると、その結果当該コンピュータが、ネットワーク・デバイスと通信ネットワークとの間におけるネットワーク接続上で輻輳を制御する方法を実行するように制御し、該方法は、
    (A)第1接続に対し第1タイプの輻輳制御を選択する行為と、
    (B)前記第1タイプの第1輻輳制御モジュールを発生する行為と、
    (C)前記第1輻輳制御モジュールを用いて、前記第1接続上でネットワーク輻輳を制御する行為と、
    を備えている、コンピュータ・プログラム製品。
  14. 請求項13記載のコンピュータ・プログラム製品において、前記ネットワーク・デバイスは、複数の輻輳制御モジュール・アブストラクションへのアクセスを有し、各輻輳制御モジュール・アブストラクションは、あるタイプの輻輳制御モジュールを定め、
    前記行為(A)は、前記複数の輻輳制御モジュール・アブストラクションから第1輻輳制御モジュール・アブストラクションを選択することを含み、該第1輻輳制御モジュール・アブストラクションは、前記第1タイプの輻輳制御モジュールを定め、
    前記行為(B)は、前記第1輻輳制御モジュール・アブストラクションを用いて、前記第1輻輳制御モジュールを発生することを含む、コンピュータ・プログラム製品。
  15. 請求項13記載のコンピュータ・プログラム製品において、前記方法は、更に、
    (D)第2接続に対し前記第1タイプの輻輳制御を選択する行為と、
    (E)前記第1タイプの第2輻輳制御モジュールを発生する行為と、
    (F)前記第2輻輳制御モジュールを用いて、前記第2接続上でネットワーク輻輳を制御する行為と、
    を備えている、コンピュータ・プログラム製品。
  16. 請求項13記載のコンピュータ・プログラム製品において、前記方法は、更に、
    (D)第2接続に対し第2タイプの輻輳制御を選択する行為と、
    (E)前記第2タイプの第2輻輳制御モジュールを発生する行為と、
    (F)前記第2輻輳制御モジュールを用いて、前記第2接続上でネットワーク輻輳を制御する行為と、
    を備えており、前記第2タイプは前記第1タイプとは異なる、コンピュータ・プログラム製品。
  17. 請求項13記載のコンピュータ・プログラム製品において、前記行為(A)〜(C)は、TCP/IPスタックによって実行する、コンピュータ・プログラム製品。
  18. 請求項13記載のコンピュータ・プログラム製品であって、更に、
    (D)前記第1輻輳制御モジュールに、前記接続上で発生する1つ以上のトランスポート制御イベントを通知する行為を備えている、コンピュータ・プログラム製品。
  19. 請求項18記載のコンピュータ・プログラム製品において、前記方法は、更に、
    (E)前記第1輻輳制御モジュールが、前記通知に応答して、1つ以上の接続状態変数を更新する行為を備えている、コンピュータ・プログラム製品。
  20. 請求項19記載のコンピュータ・プログラム製品において、前記行為(A)〜(C)は、ネットワーク通信スタックによって実行し、
    前記行為(C)は、前記更新した1つ以上の接続状態変数に基づいて、前記第1接続上でネットワーク通信を制御することを含み、
    前記方法は、更に、前記第1輻輳制御モジュールが、前記ネットワーク通信スタックに、前記更新した1つ以上の接続状態変数を通知する行為を備えている、コンピュータ・プログラム製品。
JP2009506636A 2006-04-21 2007-04-23 ネットワーク・デバイスによる多数の輻輳制御アルゴリズムの実行を可能にすること Active JP5174807B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US79377406P 2006-04-21 2006-04-21
US60/793,774 2006-04-21
US11/507,403 US7782759B2 (en) 2006-04-21 2006-08-21 Enabling network devices to run multiple congestion control algorithms
US11/507,403 2006-08-21
PCT/US2007/009831 WO2007124154A1 (en) 2006-04-21 2007-04-23 Enabling network devices to run multiple congestion control algorithms

Publications (3)

Publication Number Publication Date
JP2009534937A true JP2009534937A (ja) 2009-09-24
JP2009534937A5 JP2009534937A5 (ja) 2010-06-17
JP5174807B2 JP5174807B2 (ja) 2013-04-03

Family

ID=38619398

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009506636A Active JP5174807B2 (ja) 2006-04-21 2007-04-23 ネットワーク・デバイスによる多数の輻輳制御アルゴリズムの実行を可能にすること

Country Status (9)

Country Link
US (1) US7782759B2 (ja)
EP (1) EP2011280B1 (ja)
JP (1) JP5174807B2 (ja)
KR (1) KR101344153B1 (ja)
BR (1) BRPI0710571A2 (ja)
CA (1) CA2649375C (ja)
MX (1) MX2008013325A (ja)
RU (1) RU2438162C2 (ja)
WO (1) WO2007124154A1 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8000242B2 (en) * 2006-07-06 2011-08-16 Alcatel Lucent Reducing packet loss for a packet data service during congestion in a transport network
US8102852B2 (en) * 2006-12-14 2012-01-24 Oracle America, Inc. Method and system for time-stamping data packets from a network
US20080263389A1 (en) * 2007-04-20 2008-10-23 At&T Knowledge Ventures, L.P. System for monitoring enum performance
KR101268621B1 (ko) * 2009-12-21 2013-05-29 한국전자통신연구원 동적 플로우 샘플링 장치 및 방법
US8340126B2 (en) 2010-06-07 2012-12-25 Lockheed Martin Corporation Method and apparatus for congestion control
US20120163178A1 (en) * 2010-12-23 2012-06-28 Telefonaktiebolaget L M Ericsson (Publ) Multiple-Algorithm Congestion Management
JP5976277B2 (ja) * 2011-02-23 2016-08-23 富士通株式会社 伝送制御方法
US20130265874A1 (en) * 2011-09-30 2013-10-10 Jing Zhu Link-aware application source-rate control technique
US8711690B2 (en) * 2012-10-03 2014-04-29 LiveQoS Inc. System and method for a TCP mapper
JP6089940B2 (ja) * 2013-05-08 2017-03-08 富士通株式会社 障害判定プログラム、装置、システム、及び方法
WO2016003332A1 (en) 2014-07-01 2016-01-07 Telefonaktiebolaget L M Ericsson (Publ) Methods and nodes for congestion control
CN105847168B (zh) * 2015-01-12 2020-01-31 华为技术有限公司 一种数据传输的方法、网络服务器、用户终端及系统
CN106302230B (zh) * 2015-06-11 2019-11-26 华为技术有限公司 一种数据传输方法及装置
US10419968B2 (en) 2016-03-30 2019-09-17 International Business Machines Corporation Dynamic selection of TCP congestion control for improved performances
US10848602B2 (en) * 2016-07-08 2020-11-24 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for implementing congestion control negotiation
US10135720B2 (en) 2016-08-03 2018-11-20 Anchorfree Inc. System and method for virtual multipath data transport
US11218413B2 (en) * 2019-11-14 2022-01-04 Mellanox Technologies, Ltd. Congestion control management method derived from packets at a network adapter
US11296988B2 (en) * 2019-11-14 2022-04-05 Mellanox Technologies, Ltd. Programmable congestion control communication scheme
CN114726790B (zh) * 2021-01-06 2024-04-16 北京中科海网科技有限公司 一种基于传输内容大小的拥塞控制选择方法及系统
CN113556780B (zh) * 2021-07-28 2023-07-25 新华三技术有限公司 一种拥塞控制方法及装置
US11616730B1 (en) * 2021-10-01 2023-03-28 Compira Labs Ltd. System and method for adapting transmission rate computation by a content transmitter
US20240015581A1 (en) * 2022-07-08 2024-01-11 Qualcomm Incorporated Congestion control algorithms

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08288951A (ja) * 1995-04-13 1996-11-01 Hitachi Ltd Atmスイッチおよびatm−lanにおける輻輳制御方式
JPH09186723A (ja) * 1995-12-29 1997-07-15 Hitachi Ltd ネットワーク通信処理方式
JPH10336202A (ja) * 1997-06-03 1998-12-18 Fuji Xerox Co Ltd データ転送装置および方法
JP2003256321A (ja) * 2002-02-28 2003-09-12 Nec Corp プロキシサーバ及びプロキシ制御プログラム
JP2004243003A (ja) * 2003-02-17 2004-09-02 Kyocera Corp 携帯端末及び無線通信システム
JP2005005836A (ja) * 2003-06-10 2005-01-06 Fujitsu Ltd ネットワーク及びサーバの負荷低減ルータ
JP2006019816A (ja) * 2004-06-30 2006-01-19 Nippon Telegr & Teleph Corp <Ntt> フローレベル通信品質管理装置と方法およびプログラム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5936940A (en) 1996-08-22 1999-08-10 International Business Machines Corporation Adaptive rate-based congestion control in packet networks
US6192406B1 (en) 1997-06-13 2001-02-20 At&T Corp. Startup management system and method for networks
WO2000019680A2 (en) * 1998-09-17 2000-04-06 Tod Mcnamara System and method for network flow optimization using traffic classes
US6466984B1 (en) * 1999-07-02 2002-10-15 Cisco Technology, Inc. Method and apparatus for policy-based management of quality of service treatments of network data traffic flows by integrating policies with application programs
EP1240753A1 (en) * 1999-12-13 2002-09-18 Nokia Corporation Congestion control method for a packet-switched network
US6757248B1 (en) * 2000-06-14 2004-06-29 Nokia Internet Communications Inc. Performance enhancement of transmission control protocol (TCP) for wireless network applications
US7130268B2 (en) * 2000-10-17 2006-10-31 Saverio Mascolo End-to-end bandwidth estimation for congestion control in packet switching networks
US7099954B2 (en) 2002-06-27 2006-08-29 Microsoft Corporation Congestion control mechanism for streaming media
US7420991B2 (en) * 2003-07-15 2008-09-02 Qlogic, Corporation TCP time stamp processing in hardware based TCP offload
US7656799B2 (en) * 2003-07-29 2010-02-02 Citrix Systems, Inc. Flow control system architecture
US7385923B2 (en) * 2003-08-14 2008-06-10 International Business Machines Corporation Method, system and article for improved TCP performance during packet reordering
US20050114540A1 (en) * 2003-11-12 2005-05-26 International Business Machines Corporation Method and system of generically specifying congestion control and a voidance behavior
US7512066B2 (en) * 2004-03-30 2009-03-31 Hewlett-Packard Development Company, L.P. Congestion control system
US7577097B2 (en) * 2005-03-22 2009-08-18 Microsoft Corporation Compound transmission control protocol
US7719967B2 (en) * 2005-09-28 2010-05-18 Netapp, Inc. Cumulative TCP congestion control

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08288951A (ja) * 1995-04-13 1996-11-01 Hitachi Ltd Atmスイッチおよびatm−lanにおける輻輳制御方式
JPH09186723A (ja) * 1995-12-29 1997-07-15 Hitachi Ltd ネットワーク通信処理方式
JPH10336202A (ja) * 1997-06-03 1998-12-18 Fuji Xerox Co Ltd データ転送装置および方法
JP2003256321A (ja) * 2002-02-28 2003-09-12 Nec Corp プロキシサーバ及びプロキシ制御プログラム
JP2004243003A (ja) * 2003-02-17 2004-09-02 Kyocera Corp 携帯端末及び無線通信システム
JP2005005836A (ja) * 2003-06-10 2005-01-06 Fujitsu Ltd ネットワーク及びサーバの負荷低減ルータ
JP2006019816A (ja) * 2004-06-30 2006-01-19 Nippon Telegr & Teleph Corp <Ntt> フローレベル通信品質管理装置と方法およびプログラム

Also Published As

Publication number Publication date
WO2007124154A1 (en) 2007-11-01
JP5174807B2 (ja) 2013-04-03
EP2011280B1 (en) 2015-05-20
CA2649375C (en) 2015-06-23
KR20080111479A (ko) 2008-12-23
CA2649375A1 (en) 2007-11-01
MX2008013325A (es) 2008-12-10
KR101344153B1 (ko) 2013-12-20
US7782759B2 (en) 2010-08-24
EP2011280A4 (en) 2009-07-22
BRPI0710571A2 (pt) 2011-08-16
EP2011280A1 (en) 2009-01-07
US20070248013A1 (en) 2007-10-25
RU2438162C2 (ru) 2011-12-27
RU2008141701A (ru) 2010-04-27

Similar Documents

Publication Publication Date Title
JP5174807B2 (ja) ネットワーク・デバイスによる多数の輻輳制御アルゴリズムの実行を可能にすること
Gu et al. UDT: UDP-based data transfer for high-speed wide area networks
US8102852B2 (en) Method and system for time-stamping data packets from a network
US9985908B2 (en) Adaptive bandwidth control with defined priorities for different networks
US7174449B2 (en) Network interface sharing methods and apparatuses that support kernel mode data traffic and user mode data traffic
US7761609B1 (en) Socket level packet scheduling for connectionless protocols
US20090316581A1 (en) Methods, Systems and Computer Program Products for Dynamic Selection and Switching of TCP Congestion Control Algorithms Over a TCP Connection
US8761202B2 (en) Architecture for dynamically adaptive transport protocols
US7493398B2 (en) Shared socket connections for efficient data transmission
Gu et al. Supporting configurable congestion control in data transport services
EP2347552A2 (en) Automatic invocation of dtn bundle protocol
US9985913B2 (en) Apparatus and method for client-side flow control in a remote access environment
CN100363922C (zh) 用于独立于带宽延迟产品的tcp/ip卸载的系统和方法
US9219670B2 (en) Link-aware throughput acceleration profiles
JP4646002B2 (ja) 接続管理の方法、システム、およびプログラム製品
Minghao et al. Performance analysis and optimization of user space versus kernel space network application
Tornai et al. Developing a High-Speed Connectionless File Transfer System with WASM Based Client.
Niamanesh et al. DRAPS: A Framework for Dynamic Reconfigurable Protocol Stacks.
Narayan The design and implementation of a congestion control plane
CN117896445A (zh) 多网络协议切换传输方法、装置、电子设备及存储介质
Gupta et al. Implementation study of AODV for Microsoft Windows CE platform
de Alwis GT: A Groupware Toolkit for C
Jahre Fighting fire with fire: Eliminating standing queues with large UDP packet floods
Kishore et al. Exploring Configurable Congestion Control Feature of UDT Protocol
ALRSHAH Performance Evaluation of Parallel TCP Variants and Its Impact on Throughput and Fairness in Heterogeneous Networks Based on Test-Bed

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100421

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100421

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110728

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110802

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111101

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111109

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111201

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121109

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121228

R150 Certificate of patent or registration of utility model

Ref document number: 5174807

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250