JP2008536339A - 事実上輻輳のないギャランティードサービス対応ネットワーク:外部インターネットNextGenTCP(方形波形)TCPフレンドリSANの即座の準備のできた実施 - Google Patents
事実上輻輳のないギャランティードサービス対応ネットワーク:外部インターネットNextGenTCP(方形波形)TCPフレンドリSANの即座の準備のできた実施 Download PDFInfo
- Publication number
- JP2008536339A JP2008536339A JP2007542358A JP2007542358A JP2008536339A JP 2008536339 A JP2008536339 A JP 2008536339A JP 2007542358 A JP2007542358 A JP 2007542358A JP 2007542358 A JP2007542358 A JP 2007542358A JP 2008536339 A JP2008536339 A JP 2008536339A
- Authority
- JP
- Japan
- Prior art keywords
- tcp
- packet
- ack
- congestion
- rtt
- 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.)
- Withdrawn
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
既存のQoS/MPLS技法の使用を必要とせず、ネットワーク内のスイッチ/ルータソフトウェアのいずれかがエンドツーエンド性能結果を達成するために変更されるか寄与することを必要とせず、ネットワーク内の各すべてのノード間リンクでの制限されない帯域幅の提供を必要としない、事実上輻輳のないギャランティードサービス対応ネットワークの外部インターネット上での即座の準備ができた実装のための、TCP/IPプロトコル及び他の可能なプロトコルと関連するネットワークのスイッチ/ルータ構成とに対する単純な変更のさまざまな技法を提示する。
Description
[注:本発明は、同一発明人による以前に出願された関連の公開されたPCT出願第WO2005053265号全体を参照し、以前に出願された特許出願、2005年3月8日のGB0504782.4、2005年5月9日のGB0509444.6、2005年6月15日のGB0512221.3、及び2005年10月12日のGB0520706.3の説明全体を参照し(及び/又は本願にまだ含まれていない場合にその段落を組み込み)その優先権を主張するものである。]
現在、サービス品質を保証するためにインターネット上のマルチメディア/音声/ファックス/リアルタイムIPアプリケーションを容易にするRSVP/QoS/TAGスイッチングなどの実施態様は、実施態様の複雑さから損害を受ける。さらに、ToS(データパケット内のtype of serviceフィールド)、TAGベースド、ソースIPアドレス、MPLSの使用など、複数のベンダの実施態様があり、トラバースされるQoS対応ルータのそれぞれで、データパケットは、そのデータパケットを転送できるようになる前に、上記のベンダの実施したフィールドのすべてについてスイッチ/ルータによって検査される必要がある(この故に、バッファリング/キューイングされる必要がある)。
したがって、最大伝送レートでQoSデータパケットを搬送するテラビットリンクでは、想像するに、ルータは、各到着するデータパケットを検査し(且つ、バッファリング/キューイングし)、且つ、上記のさまざまなフィールドのすべてを検査するのにCPU処理時間を費やす必要がある(例えば、それに対して検査されるQoS優先順位ソースIPアドレステーブル自体だけでも、数万個になる場合がある)。したがって、ルータ製造業者の指定したスループット容量(通常のデータパケットの転送に関して)は、重いQoSデータパケット負荷の下で達成されない場合があり、一部のQoSパケットは、総データパケット負荷がリンク帯域幅又はルータ製造業者の指定したデータパケット通常スループット容量を超えていない場合であっても、大きい遅延をこうむるか、捨てられる。また、相互運用標準規格の欠如は、いくつかのIPテクノロジの、これらのQoS付加価値サービスをサポートする約束された能力が、まだ完全には実現されないことを意味する。
本明細書では、既存の技術的現状のQoS実施態様よりよいサービスの保証を確保するために、データパケットによってトラバースされるスイッチ/ルータがRSVP/タグスイッチング/QoS機能を必要とすることなく、インターネット/プロプラエタリインターネットセグメント/WAN/LAN上でのよりよい又は類似するエンドツーエンド受信品質を有するマルチメディア/音声/ファックス/リアルタイムなどのアプリケーションに関するサービス品質を保証する方法を説明する。さらに、データパケットは、既存QoSベンダの実施態様フィールドのすべてを検査するためのバッファリング/キューイングを必ずしも必要とせず、したがって、上述した起こり得る捨てられるか又は遅延するシナリオを回避し、スイッチ/ルータ製造業者の指定した全スループット容量を容易にすると同時に、リンク帯域幅の全送信レートにおいてさえ、これらのギャランティードサービス(guaranteed service)データパケットを転送する。
既存のTCP/IPの同時乗法レート減少及びRTOタイムアウト時のパケット再送信機構よりよい輻輳回復/回避/予防のため及び/又は事実上輻輳のないギャランティードサービスTCP/IP機能を可能にするため及び/又は既存の同時乗法レートがタイムアウト及びRTOタイムアウトとして知られるパケット再送信タイムアウトを減らすようにするためにさらに変更される既存TCP/IPスタックの変更は、異なるレート減少タイムアウト値及びパケット再送信タイムアウト値を有する別々のプロセスに分離される
TCP/IPスタックは、下記のように変更される。
TCP/IPスタックは、下記のように変更される。
.同時RTOレート減少及びRTOタイムアウトイベント時のパケット再送信が、RTO TimedOutを有する特定のソース−デスティネーションTCPフローに関するパケット/データユニット転送及びパケット再送信の完全な「ポーズ」の形をとるが、特定のTCPフローの1つ又は定義された個数のパケット/データユニット(RTOパケット/データユニットとすることができる)を「ポーズ/拡張ポーズ」期間中の完全なポーズインターバルごとに前方に転送できるようにし、
.送信された対応するパケット/データユニットの肯定応答が、「ポーズ」がもたらされる前にデスティネーション受信TCP/IPスタックから戻って受信されていない場合のソース/デスティネーションノード対に関する同時RTOレート減少及びパケット再送信インターバルは、下記になるようにセットされる。
.送信された対応するパケット/データユニットの肯定応答が、「ポーズ」がもたらされる前にデスティネーション受信TCP/IPスタックから戻って受信されていない場合のソース/デスティネーションノード対に関する同時RTOレート減少及びパケット再送信インターバルは、下記になるようにセットされる。
.(A)ネットワーク内のソースノード/デスティネーションノード対の間の非輻輳RTT*必ず1より大きい被乗数、又はソースノード/デスティネーションノード対の間の非輻輳RTTと、......によって導入される遅延に対処するのに十分なインターバルとの和、
又は
(B)最大の非輻輳RTTを有するネットワーク内の最も離れたソースノード/デスティネーションノード対の間の非輻輳RTT*必ず1より大きい被乗数、又は最大の非輻輳RTTを有するネットワーク内の最も離れたソースノード/デスティネーションノード対の間の非輻輳RTTと、さまざまなコンポーネントによって導入される可変遅延に対処するのに十分なインターバルとの和、
又は
(C)ある考案されたアルゴリズムに従って、ヒストリカルRTT値から動的に導出される、例えば、*必ず1より大きい被乗数、又はさまざまなコンポーネントによって導入される可変遅延によって導入される遅延に対処するのに十分なインターバルとの和など
又は
(D)任意のユーザ供給の値、例えば、オーディオ−ビジュアル知覚許容範囲について200ms、又は例えばhttpウェブページダウンロード知覚許容範囲について4秒...など。世界中の最も離れたソースノード/デスティネーションノード対の間のタイムクリティカルなオーディオ−ビジュアルフローについて、非輻輳RTTが、約250msになる場合があり、この場合に、そのような長距離タイムクリティカルフローのRTOセッティングは、上記の通常のオーディオ−ビジュアル許容範囲期間になり、衛星を介する今日の大陸間携帯電話呼品質と同様に許容される必要があるはずであることに留意されたい。
又は
(B)最大の非輻輳RTTを有するネットワーク内の最も離れたソースノード/デスティネーションノード対の間の非輻輳RTT*必ず1より大きい被乗数、又は最大の非輻輳RTTを有するネットワーク内の最も離れたソースノード/デスティネーションノード対の間の非輻輳RTTと、さまざまなコンポーネントによって導入される可変遅延に対処するのに十分なインターバルとの和、
又は
(C)ある考案されたアルゴリズムに従って、ヒストリカルRTT値から動的に導出される、例えば、*必ず1より大きい被乗数、又はさまざまなコンポーネントによって導入される可変遅延によって導入される遅延に対処するのに十分なインターバルとの和など
又は
(D)任意のユーザ供給の値、例えば、オーディオ−ビジュアル知覚許容範囲について200ms、又は例えばhttpウェブページダウンロード知覚許容範囲について4秒...など。世界中の最も離れたソースノード/デスティネーションノード対の間のタイムクリティカルなオーディオ−ビジュアルフローについて、非輻輳RTTが、約250msになる場合があり、この場合に、そのような長距離タイムクリティカルフローのRTOセッティングは、上記の通常のオーディオ−ビジュアル許容範囲期間になり、衛星を介する今日の大陸間携帯電話呼品質と同様に許容される必要があるはずであることに留意されたい。
例えば200msのリアルタイムオーディオ−ビジュアルの知覚許容範囲限界内にキャッピングされた上記の(A)、(B)、(C)、又は(D)のRTOインターバル値を用いる場合に、事実上輻輳のないギャランティードサービスのネットワーク性能が達成される。
.「ポーズ」だけであるが、既存の結合された同時RTOレート減少及びパケット再送信の代わりの又はその代理の、1つ又は定義された個数のパケット/データユニットが完全なポーズインターバル全体の間又は各連続する完全なポーズインターバルの間に転送されることを可能にする、上で説明したTCP/IP変更は、インターネット/インターネットのサブセット/WAN/LAN上で、RTO機構上での既存TCP/IP同時乗法レート減少より高速且つよりよい輻輳の回復/回避/予防を機能強化でき、事実上輻輳のないギャランティードサービス機能を使用可能にさえすることに留意されたい。また、既存TCP/IPスタックの結合された同時RTOレート減少及びパケット再送信を、異なるレート減少タイムアウト値及びパケット再送信タイムアウト値を有する別々のプロセスに分離できることに留意されたい。
.また、前の段落のTCP/IP変更を、初期の少数のユーザによって増分式に実施できるが、必ずしも、変更された「ポーズ」TCP採用者に関するかなり悪い性能影響を有しない場合があり、さらに、変更された「ポーズ」TCP/IPを使用して送信されるパケット/データユニットが、ルートに沿ったスイッチ/ルータによってごく希に捨てられ、パケット/データユニットを捨てさせないように微調整され/捨てさせなくすることすらできることに留意されたい。この変更が大多数によって又はあまねく採用されるようになる時に、既存インターネットは、事実上輻輳のないギャランティードサービス機能を達成し、及び/又は輻輳バッファオーバーフローに起因するスイッチ/ルータによるルートに沿ったパケットドロップがない。
例として、ネットワーク/インターネットサブセット/プロプラエタリインターネット/WAN/LAN内のすべてのスイッチ/ルータのそれぞれが、最小s秒と同等の(すなわち、s秒*すべての先行する着信リンクの物理帯域幅の合計)バッファサイズを有する/又はそのようにされ、起点センダソースTCP/IPスタックのRTOタイムアウト又はデカップルドレート減少タイムアウトインターバルに、同一のs秒又はそれ未満がセットされる(これは、オーディオ−ビジュアル許容範囲又はhttp許容範囲期間以内とすることができる)場合に、ソースの変更されたTCP/IPから送信されるすべてのパケット/データユニットは、介在するスイッチ/ルータでの輻輳バッファオーバーフローによって捨てられなくなり、すべてが、ワーストケースにおいて、s秒*トラバースされるノード数と同等の時間期間又は秒単位のすべての介在するノードのバッファサイズ同等物の合計のうちの大きい方(好ましくは、これは、必要な定義された許容範囲期間以内であり、あるいは、そうなるようにすることができる)以内に到着する。したがって、バッファサイズのすべてが、少なくとも、起点センダ/ソースの変更されたTCP/IPスタックの同等のRTOタイムアウト又はデカップルドレート減少タイムアウトインターバルセッティング以上であることが、介在するノードのスイッチ/ルータに対するよい実践になる。起点センダソースTCP/IPスタックは、介在するノードの累積バッファ遅延の合計が起点センダソースTCP/IPスタックのRTOタイムアウトインターバル又はデカップルドレート減少(本明細書では「ポーズ」の形)タイムアウトインターバル以上になる時に、RTOタイムアウト又はデカップルドレート減少タイムアウトを有し、このRTOタイムアウト又はデカップルドレート減少タイムアウトインターバル値は、必要な定義された知覚許容範囲インターバル以内にセットされ/そうなるようにすることができる。
これは、任意のポーズ期間/インターバル中に送信される単一の又は定義された個数のパケット/データユニットが、それに対応する肯定応答がその後にRTOタイムアウト又はデカップルドレート減少タイムアウトの後に遅れて到着する場合であっても、任意のRTO「ポーズ」イベント又はデカップルドレート減少「ポーズ」からさらに除外されるか、それを引き起こすことを許容されない場合に、特にそうである。その場合に、最悪の輻輳の場合に、起点センダソースTCP/IPスタックは、「ポーズ」とそれぞれが等しい持続時間の通常パケット送信フェーズとの間で交番する→すなわち、起点センダソースTCP/IPスタックは、最悪の場合でもその送信レートを「半分にする」だけであるはずであり、「ポーズ」中には、ほとんど何も送信しないが、ポーズが止まった時に再開されたならば、スライディングウィンドウ機構の下で許容される最高速度で送信する。
さらに、すべてのTCP/IPスタック又は大多数に関して、すべてがそのように変更され、RTOタイムアウトインターバル又はデカップルドレート減少タイムアウトインターバルに共通の値、例えば必要な定義された知覚許容範囲期間内のtミリ秒(t=ネットワーク内の最も離れたソースノード/デスティネーションノード対の非輻輳RTT*m被乗数)をセットされたインターネット/インターネットサブセット/WAN/LAN上で、そのインターネット/インターネットサブセット/WAN/LAN内で送信されるすべてのパケットは、s*ノード数又は(t−非輻輳RTT)+tのうちの短い方のみのルートに沿った総累積バッファ遅延を経験しながらデスティネーションに到着しなければならない。
これは、既存TCP/IPスタックのRFC実施態様と好都合に対照をなし、この既存TCP/IPスタックのRFC実施態様は、パケットが捨てられないことを保証することができず、さらに、おそらく、送信されたすべてのパケットがある有用な定義された許容範囲期間以内に到着することを保証できない。「ポーズ」中に、介在する経路の輻輳は、この「ポーズ」によってクリアされて助けられ、この「ポーズ」中に送信される単一の又は少数の定義された個数のパケットは、この変更されたTCP/IPスタックがそれ相応に反応するために、介在する経路を有用にプローブして、輻輳が継続しているか止まったかを確かめる。
Next Generation TCP:さらなる改善及び変更
外部インターネットノード(内部ネットワークノードにも適用可能とすることができる)
ギャランティードサービスインターネットサブセット/WAN/LANに適用される同一のデカップルド「ポーズ」/送信レート減少タイムアウト及び実際のパケット再送信タイムアウトの機構(ACKタイムアウト及びパケット再送信タイムアウト)を、同様に、外部内部クラウド/外部WAN/外部LANに適用することができる。この場合に、非輻輳RTTest(すなわち、これまでに受信された対応する戻るACKに関する最新の最も小さい最小時間期間の変数)が、ギャランティードサービスインターネットサブセット/WAN/LAN内の既知の非輻輳RTT値の代わりに使用される。
外部インターネットノード(内部ネットワークノードにも適用可能とすることができる)
ギャランティードサービスインターネットサブセット/WAN/LANに適用される同一のデカップルド「ポーズ」/送信レート減少タイムアウト及び実際のパケット再送信タイムアウトの機構(ACKタイムアウト及びパケット再送信タイムアウト)を、同様に、外部内部クラウド/外部WAN/外部LANに適用することができる。この場合に、非輻輳RTTest(すなわち、これまでに受信された対応する戻るACKに関する最新の最も小さい最小時間期間の変数)が、ギャランティードサービスインターネットサブセット/WAN/LAN内の既知の非輻輳RTT値の代わりに使用される。
.受信されたACK(送信された通常のデータパケット、ICMPプローブ、又はUDPプローブに関するACKとすることができる)から、ACKの受信の最新の最小時間期間(対応するパケット送信時刻からの)の変数が、更新され、この非輻輳RTTestは、ソースとデスティネーションとの間の非輻輳RTT値の最も最近の推定値として働く(ソースインターネットノードと外部インターネットノードとの間の非輻輳RTTが実際にわかっている場合には、さらによい)。知識を、地球上の最も離れた非輻輳RTTが例えば400msであるという事実について作ることができ、したがって、最大非輻輳RTTestが例えば400msであるという事実を利用することができる(しかし、両端が例えば小さい56Kモデム帯域幅であり、且つ、例えば1500バイトなどの大きいパケットが転送される場合に、1500バイトパケットがモデムから完全に出るかモデムに完全に入るのに約250msを要するという点で、注意を払わなければならず、したがって、非輻輳RTTest値をそれ相応に調整するために、パケットが実際にモデムを完全に出ることを完了した時刻をも入手することが好ましいはずである)。
.任意のパケットのRTT(そのACKから導出される)*a>非輻輳RTTest(aは、必ず1より大きい被乗数である)である場合に、「ポーズ」がトリガされ(しかし、その「ポーズ」インターバル又は拡張された「ポーズ」インターバル(1つ又は複数)中に、通る1つ又は複数のデータパケットを許容するか、通るプローブパケットだけを許容し)、又は、レートが、あるパーセンテージ、例えば既存レートの95%まで減少し(これは、例えば、トラフィックシェーピング技法又は輻輳ウィンドウサイズの減分...などを介して実施することができ)、及び/又は、最も最近の/後続の受信されるACKのRTT*aが>非輻輳RTTestであり続ける限り又は考案されるアルゴリズムに基づいて導出される定義された時間期間について、後続ACK時に変更されたTCPのウィンドウサイズ/輻輳ウィンドウサイズを単に増分しないこと、又は上記のいずれかの組合せ、
直接にTCPスタック上でのレート減分実施態様は、自明であるが、モニタソフトウェア/IP転送モジュール/プロキシTCP...などでは、既存レートシェーピング/レートスロットリング技法を介して実施することができ、あるいは、特定のTCPフローの最も最近の有効ウィンドウサイズ値を単純にミラーリングする(且つ/又はこの機構の動作を延期する)モニタソフトウェア/IP転送モジュール/プロキシTCP内のTCPフローごとのもう1つのウィンドウサイズ/輻輳ウィンドウサイズ機構として実施すること、しかし、特定のフローの最も最近に受信されたACKのRTT*aが>非輻輳RTTestであり続ける時に/である限り、最も最近の有効ウィンドウサイズ値をミラーリングしない/ミラーリングを停止すること(すなわち、この機構の動作を開始する):そうではなく、この時間中に、最も最近に受信されたACKのRTT*aが>非輻輳RTTestであり続ける時に/である限り、この特定のフローに関するモニタソフトウェアのウィンドウサイズ/輻輳ウィンドウサイズ値は、そのフローの最も最近にミラーリングされた導出された/計算された現在の有効ウィンドウサイズすなわち、ウィンドウサイズ/アドバタイズされたウィンドウサイズ/輻輳ウィンドウサイズ値のうちのより小さいもののm%、例えば95%まで減らされるはずである(注:上記の動作を、任意選択で、t秒、例えば1秒だけ又はある考案されるアルゴリズムに基づいて遅延させることができる)。
直接にTCPスタック上でのレート減分実施態様は、自明であるが、モニタソフトウェア/IP転送モジュール/プロキシTCP...などでは、既存レートシェーピング/レートスロットリング技法を介して実施することができ、あるいは、特定のTCPフローの最も最近の有効ウィンドウサイズ値を単純にミラーリングする(且つ/又はこの機構の動作を延期する)モニタソフトウェア/IP転送モジュール/プロキシTCP内のTCPフローごとのもう1つのウィンドウサイズ/輻輳ウィンドウサイズ機構として実施すること、しかし、特定のフローの最も最近に受信されたACKのRTT*aが>非輻輳RTTestであり続ける時に/である限り、最も最近の有効ウィンドウサイズ値をミラーリングしない/ミラーリングを停止すること(すなわち、この機構の動作を開始する):そうではなく、この時間中に、最も最近に受信されたACKのRTT*aが>非輻輳RTTestであり続ける時に/である限り、この特定のフローに関するモニタソフトウェアのウィンドウサイズ/輻輳ウィンドウサイズ値は、そのフローの最も最近にミラーリングされた導出された/計算された現在の有効ウィンドウサイズすなわち、ウィンドウサイズ/アドバタイズされたウィンドウサイズ/輻輳ウィンドウサイズ値のうちのより小さいもののm%、例えば95%まで減らされるはずである(注:上記の動作を、任意選択で、t秒、例えば1秒だけ又はある考案されるアルゴリズムに基づいて遅延させることができる)。
[注:モニタソフトウェアを実施する時に、センダTCP輻輳ウィンドウサイズは、Windows TCPスタックソースコードがないWindowsプラットフォームでは直接に入手可能ではなく、したがって、ネットワークから導出される必要があり、この故に、センダTCPソースの現在の有効ウィンドウサイズを導出することができる(有効ウィンドウサイズ=min(ウィンドウサイズ,輻輳ウィンドウサイズ,レシーバがアドバタイズしたウィンドウサイズ)。現在のセンダTCPソースの現在の有効ウィンドウサイズ値/輻輳ウィンドウサイズ値の導出/近似において、さまざまな既存の技術的現状の方法論がある。しかし、例として、我々は、接続をオーバーフローさせない時に、センダTCPソースの輻輳ウィンドウサイズが、現在の送信レート*非輻輳RTTestであると仮定することができる(すなわち、その送信時刻及びその戻るACK時刻を監視するRTTあたり1つの「区別される」パケットを選択することによって計算される現在の送信レート、現在の送信レート=(送信時刻と戻るACK時刻との間に移動中のバイト数)/(戻るACK時刻−送信時刻)、我々は、センダTCPソースの現在の輻輳ウィンドウサイズが、移動中のバイト数と等しいと仮定することができる。
もう1つの例は、類似して、同様に、RTTインターバル内にモニタソフトウェアによって転送された総バイト数を監視することによって導出されるセンダTCPソースの現在の有効ウィンドウサイズ/現在の輻輳ウィンドウサイズを導出することができる]。
モニタソフトウェアでは、パーセンテージレート減分は、任意選択で、上記ように現在の有効ウィンドウサイズの導出/推定に依存する必要がない場合があり、その代わりに、モニタソフトウェアは、その代わりに「ポーズ」をもたらすことができる(及び/又は、1つ又は複数のパケットがこのポーズインターバル中に転送されることを可能にする):
.周期的な間隔を置かれたポーズされるインターバルが例えば1秒以内に合計p*I(Iは、秒単位の周期的な間隔を置かれたポーズされるインターバルである)になる場合に、効果的に輻輳ウィンドウ=(1−(p*I))/現在のスループットの1秒(現在の有効ウィンドウサイズ*現在のRTT)。
.周期的な間隔を置かれたポーズされるインターバルが例えば1秒以内に合計p*I(Iは、秒単位の周期的な間隔を置かれたポーズされるインターバルである)になる場合に、効果的に輻輳ウィンドウ=(1−(p*I))/現在のスループットの1秒(現在の有効ウィンドウサイズ*現在のRTT)。
.この故に、5%レート減分をもたらすためには、(P*I)を、0.05と等しくしなければならない。
この「ポーズ」インターバルは、周期的に均等に間隔を置かれて離れている必要すらない場合があり、且つ/又は各「ポーズ」インターバルは、同一のポーズ持続時間を有する必要すらない場合がある。
例:「1つ又は複数のポーズ」中に合計5%未満の送信時間がある場合に、ソース−デスティネーションの帯域幅遅延積は、今や、既存値の0.95まで減らされるはずである。これは、今や、上記のオーバーラップしないRTTインターバルごとの総有効ウィンドウサイズ分のデータバイトまでを送信するのに、例えば1秒以内に5%少ない個数のオーバーラップしないRTTインターバルがあるはずだからである。「ポーズ」インターバル持続時間は、好ましくは、少なくとも非輻輳RTTestの最小値と同等にセットされなければならないが、必要な場合にはより小さくすることができる。例、20msおきに1つのサンプリングされたパケットを送信するVoIP送信において(非輻輳RTTestよりはるかにより小さいと仮定する)、例えば1秒の中の50msの単一の「ポーズ」インターバル持続時間(すなわち、5%有効ウィンドウサイズ減分と同等のレート減分をもたらす)を、例えば1秒の中の5つの均等な間隔を置かれた周期的「ポーズ」にすることができ、ここでの「ポーズ」のそれぞれは、持続時間10msを有し(タイムクリティカルVoIPパケット転送での長い遅延を導入しないように)、あるいは、例えば1秒の中の10個の均等な間隔を置かれた周期的「ポーズ」にすることができ、この「ポーズ」のそれぞれは、持続時間5msを有し....などである。
さらに、センダTCPソースコードは、同様に、完全に「ポーズ」法を利用し、輻輳ウィンドウサイズセッティングの必要を完全に置換して、現在の有効ウィンドウサイズセッティングを実施することができる。この変更されたTCPでは、任意の時の現在の有効ウィンドウサイズは、[min(ウィンドウサイズ,レシーバがアドバタイズしたウィンドウサイズ)*((1−(p*I))/1秒)]になるはずである。
(継続される受信されたACKのRTT*aのストリームが>非輻輳RTTestであり続ける時に繰り返して減分しないように:しかし、さらに、例えば最も最近の最新のレート減分以降に送信されたパケットに対応する、最も最近に受信されたACKのストリームRTT*b(bは必ず>a)が>非輻輳RTTestである場合に、モニタソフトウェアのウィンドウサイズ値/輻輳ウィンドウサイズ値を、今や、さらに、現在既にL%/m%まで減らされているモニタソフトウェアのウィンドウサイズ値/輻輳ウィンドウサイズ値の例えば90/95%(L%又はm%)まで任意選択で繰り返して減らすことができる{bは、aより深刻なレベルの輻輳又はパケットドロップさえも表す。aとbとの一方又は両方は、パケットドロップイベントを意味する可能性が非常に高くなるものとすることができる。モニタソフトウェアは、任意選択として、上記の動作をt秒、例えば1秒だけ遅延させることができ、その結果、すべての既存の未変更のTCPが、レート減分において同期するようになる}。
且つ/又は、ある条件が成り立つ時、例えば、フローの最も最近の/後続の受信されたACKのRTT*aが>非輻輳であり続ける限り、ある考案されるアルゴリズムに基づくある期間の間にウィンドウサイズ/輻輳ウィンドウサイズを増分しない。
モニタソフトウェアを使用する時に、TCPは、もちろん、それ自体のスロースタート/輻輳回避/カップルドRTO...などを行い続ける。モニタソフトウェアは、例えば送信されたセグメントのACKが例えば1秒などの非常に長い期間の後にまだ受信されていない時...など、又はフローの送信レートの突然の半分化から...など、TCP RTOイベントを予測し/検出することができる。モニタソフトウェアは、さらに、そのミラーリングされたウィンドウサイズ値/輻輳ウィンドウサイズ値を例えば既存値の90%(n%)に減分することを選択することができ、且つ/又は、ある考案されたアルゴリズムに基づいて導出されるある時間期間の間に、例えば最も最近の/後続の受信されたACKのRTT*aが>非輻輳RTTestであり続ける限り、特定のフローのそれ自体の有効ウィンドウサイズ/輻輳ウィンドウサイズを増分しないことを選択することができる。
モニタソフトウェアは、さらに、それ自体のパケット再送信タイムアウトを実施することもでき、これは、モニタソフトウェアが、送信されたパケットの動的ウィンドウ分のコピーを必ず保持すること及びTCPに類似する再送信ソフトウェアモジュールを必要とし、この故に、モニタソフトウェアは、TCP RTO表示を待つ必要なしに上記の段落の諸機能をはるかによりすばやく実行することができる。この故に、モニタソフトウェアは、任意選択として、例えばTCPへのACKをスプーフィングすることによって、遅いACKがTCPでRTOを引き起こすのを防ぐことができ、TCPへの生成された/スプーフィングされたACKを介してTCPを制御し/ペーシングするとができ、例えば、0のアドバタイズされたレシーバウィンドウサイズを有するスプーフィングされたACKをセットして、時間の期間の間だけTCPを「ポーズ」させ、あるいはスプーフィングされたACKにある所望の値をセットしてTCPの有効ウィンドウサイズを減分し、Acknowledgement Numberフィールド値=最新の送信されたSeqNo値を有するDUP ACKをセットして、実際のパケット再送信を必要に引き起こすことなくTCPに有効ウィンドウサイズを半分にさせる...などである。モニタソフトウェアは、任意選択として、t秒、例えば1秒だけ上記の動作を遅延させることができ、その結果、すべての既存の未変更のTCPが、さまざまなレート減分において同期するようになる。
さまざまな異なるアルゴリズム/異なるアルゴリズムの組合せを、図示の/上記で概要を示したものの代わりに考案することができる。さまざまな既存の技術的現状の方法又はコンポーネント方法を、さらに、本明細書で説明される方法又はコンポーネント方法のどれにでも、改善として組み込むことができる。
変更されたTCP(又は変更されたRTP over UDP/変更されたUDP...などでさえ)フローは、この場合に、レートを半分にする必要がない。というのは、これらが、輻輳してパケットドロップを引き起こす時(バッファリングイベント中)に、レートを増分する必要がなく、且つ、例えば送信レートの10%/5%減分が、新しいフローの非枯渇を保証するからである(すべての他の既存の未変更のTCPフローは、50%減分を保証するはずであるが、必ず、レートを増分しようと努力して、もう一度パケットドロップを引き起こすはずである)。新しいフローは、その公平なシェアを経時的に築き上げるはずである。これは、既存の確立されたフローの短い待ち時間...などをもほどよく保存し(VoIP/マルチメディアに適する)、既存の伝統的なPSTN呼アドミッションスケジュールを反映する。
この場合に、変更されたTCP/変更されたRTP over UDP/変更されたUDPは、リンクの帯域幅の、その確立されたシェア又はその確立されたシェアのほとんどを保持するが、さらなる追加の輻輳/パケットドロップを引き起こさない。
閾値までのTCP指数関数的増加、閾値の後の輻輳回避中の線形増加、スライディングウィンドウ/輻輳ウィンドウ機構...などは、ボトルネックリンクの輻輳の始まりが徐々であることを保証し、この故に、変更されたTCP及び既存の未変更のTCPは、それ相応に反応して、輻輳を除去することができる。ここでの変更されたTCP/変更されたRTP over UDP/変更されたUDPは、例えばパケットドロップに近い輻輳レベルの時に、十分な余分のトラフィックのすばやい突然のバーストを使用することすらして、特定の輻輳したリンク(1つ又は複数)をトラバースするすべての又は選択的な既存フローが、送信レートを下げるためにパケットドロップ通知を得ることを保証することができる。既存の未変更TCPは、そのレートを半分にし、前の輻輳を引き起こす送信レートを構築し直すのに長い時間を要するはずであるが、変更されたTCPは、リンク(1つ又は複数)に沿った帯域幅のすべての確立されたシェアのほとんどを保持するはずである。
これは、公衆インターネット上でのこの単純な分離されたTCP変更の増分的採用を最も有用に促進する。変更されたセンダTCPソースは、より高いスループットを達成し、ドロップを引き起こすボトルネックリンクの輻輳(又はパケットドロップを引き起こす単なる物理送信エラー)の際にボトルネックリンクの帯域幅のその確立されたシェアを保持すると同時に、フローの間の公平さを保ち(単一のパケットドロップの際に、確立された帯域幅の半分を失う既存TCPと比較されたい)、それ自体では、パケットドロップを一切引き起こさない。この変更されたセンダソースTCPは、高帯域幅長待ち時間ネットワークで、単一のパケットドロップだけによって引き起こされる既存のTCPレート回復問題を克服する。
センダTCPソースのトラフィックが、外部インターネットノード/WAN/LANから発する場合に、外部から発するトラフィックがタイムスタンプされる(レシーバTCPが経路伝送時間又はソースからデスティネーションまでの一方向伝送遅延を導出することを可能にする)と仮定すると、上記の変更されたセンダソースTCP法は、レシーバベースドの方法として働くように適合させることができる。
.起点ソースのタイムスタンプは、レシーバに正確に同期される必要がない。レシーバは、この場合にソースシステムクロックのタイムスタンプドリフトを無視することができる。OTTest(ソースからデスティネーションへの受信されたパケットの一方向伝送待ち時間の最も最新の更新推定値であり、パケットが受信された時の現在のレシーバシステム時間−受信されたパケットのセンダタイムスタンプと同等のこれまでに導出された最小の値である)が、レシーバで導出される。後続の受信されたパケットで観察されるOTTのすべての増分は、経路に沿った輻輳の無知な始まり(insipient onset)(すなわち、その経路に沿った少なくとも1つの転送するリンクが、現在、完全に100%利用されており、パケットがその経路に沿ってバッファリングされ始める)を示し、今や、センダTCPソースが、今や変更されたレート減分又は「ポーズ」機構をトリガしなければならないことを意味するはずである。レシーバは、下記によって、これをセンダTCPソースにシグナリングすることができる。
.適当な「ポーズ」又は適当な「周期的」ポーズの後に同一のオリジナルのアドバタイズされるウィンドウサイズに戻る前に、適当な期間の戻るACK内で、アドバタイズされるウィンドウサイズに0をセットする。
.センダTCPソースの現在の導出/推定された有効ウィンドウサイズ(有効ウィンドウサイズ=min(ウィンドウサイズ,輻輳ウィンドウサイズ,レシーバウィンドウサイズ)の適当に減分された値、例えばセンダTCPソースの現在の導出/推定された有効ウィンドウサイズの95%をアドバタイズされるウィンドウサイズにセットすること。この場合に、センダTCPソースは、変更されたレシーバTCPが同一のアドバタイズされる減分された現在の導出/推定された有効ウィンドウサイズを用いてACKし続ける限り、各RTT内で受信されるACKについて有効ウィンドウサイズを継続的には増分しないはずである。しかし、現在の戻るACKのアドバタイズされるレシーバウィンドウサイズが、後に変更される場合に、その増分は、パケットドロップを引き起こさない。というのは、センダTCPソースが、その経路に沿った輻輳の次の無知な始まりの際に、最終的にその有効ウィンドウサイズを減分することを、変更されたレシーバTCPが保証するからである。他の可能な技法に、レシーバTCPがAckをDUPすることが含まれる(センダTCPソース乗法輻輳ウィンドウ減少の半分化をトリガするための連続する3つのDUP ACK)。
.初期TCP接続確立フェーズ中に、変更されたレシーバTCPは、タイムスタンプオプションを有するためにセンダTCPソースとネゴシエートするはずである。このレシーバベースドの変更されたTCP/変更されたモニタソフトウェアは、センダTCPを変更することを必要としない。
センダTCPとレシーバTCPとの両方が、タイムスタンプオプションと一緒に変更される時に、両方の方向でのよりよく正確なOTT/OTT変動の知識がイネーブルされるはずである(変更されたTCP/変更されたモニタソフトウェアの両方が、お互いへの方向でOTTの知識を渡すことができ、したがって、変更されたTCP/変更されたモニタソフトウェアは、今や、RTTではなくOTTを使用してよりよい制御を提供することができ、例えば、送信されたセグメントのOTTが輻輳を示さないが戻るACKのOTTが輻輳を示す場合に、以前のRTTベースの方法で使用されるRTTがタイムアウトしている場合であっても、レート減分/「ポーズ」を行う必要はない。センダでのみ実施される時の、タイムスタンプオプションと一緒に使用される、RTTベースの変更されたTCPは、センダが、戻るACKのOTTest及び/又はOTT変動を同様に所有することを可能にして、よりよい制御を同様に提供するはずである。
変更されたTCP技法が大陸間海低ケーブル/衛星リンク/WANリンクの両端で実施される場合に、事実上物理リンクの物理帯域幅の2倍化に似て、TCPの伝送媒体の帯域幅利用度及びスループットが増えるはずであることに留意されたい。
当業者は、さまざまな修正及び変更を行うことができるが、本原理の範囲に含まれる。
UDPの優先順位付け
インターネット/インターネットサブセット/WAN/LAN内の各ノードでUDPにTCPより高い優先順位を与えること → などは、それでも、ノードの入力キューの以前の既存のTCPバッファリングされたパケット=>UDPパケットのバッファリングされた遅延又はUDPパケットドロップにさえ起因して、UDPトラフィックが転送するリンクの帯域幅の100%を超えて利用していない時であってもUDPドロップをもたらすことに留意されたい。
インターネット/インターネットサブセット/WAN/LAN内の各ノードでUDPにTCPより高い優先順位を与えること → などは、それでも、ノードの入力キューの以前の既存のTCPバッファリングされたパケット=>UDPパケットのバッファリングされた遅延又はUDPパケットドロップにさえ起因して、UDPトラフィックが転送するリンクの帯域幅の100%を超えて利用していない時であってもUDPドロップをもたらすことに留意されたい。
1.すべてのUDPパケットをノードの入力キューバッファの前面に置き(且つ/又はTCPパケットが既に出力キューにエンキューされている時であってもTCPパケットを超えて優先順位を与えられるUDP入力キューからUDPパケットを出力キューの前面に優先して置き)、すべてのTCPパケットをキューの終りに向かってプッシュする(この故に、すべてのTCPパケットが、入力キュー及び/又は出力キューでのすべてのUDPパケットドロップの前に捨てられる)ために、ルータ/スイッチのソフトウェアをアップグレード/変更する必要がある。
2.別々のUDP入力キュー(非常に小さいものとすることができる)及びTCP入力キューの作成を可能にするためにルータ/スイッチのソフトウェアをアップグレードし、UDPキューは、TCPパケットの前に出力キューにスケジュールされる。且つ/又は、UDP高優先順位出力キュー及び低優先順位TCP出力キューを実施する。
UDPトラフィック単独が、リンクの物理帯域幅を超える場合があり、UDPを送信するソースに送信レートすなわち分解能品質(resolution quality)を下げさせる可能性があり、且つ/又はルータ/スイッチノードにすべてのUDPフローに対してこの分解能低下プロセスを実行させる可能性がある(例えば、フローの交番するパケットだけの送信及び他の交番するUDPパケットの破棄、又は、2つ(又は複数)の例えばVoIP UDPパケットのデータを同一サイズだがより低い分解能品質の1つのパケットへの組合せ)。
ノードは、さまざまなUDP/TCP...などのフローに関する転送するリンクの帯域幅の最小比率を保証することによって、TCP非完了枯渇を保証することができる。
帯域幅推定
さらなる変更は、下記を含む(且つ、前に説明した非輻輳RTT/RTTest/RTTbase/OTTest/OTTbase/レシーバOTTest方法と一緒にあいまって使用することができ、したがって、出力結果をもたらすのにある時間を必要とする場合がある下の技法が上記の方法を補足するのに十分な時間を与えることができる)。
さらなる変更は、下記を含む(且つ、前に説明した非輻輳RTT/RTTest/RTTbase/OTTest/OTTbase/レシーバOTTest方法と一緒にあいまって使用することができ、したがって、出力結果をもたらすのにある時間を必要とする場合がある下の技法が上記の方法を補足するのに十分な時間を与えることができる)。
1.例えば、キューが形成されず/パケットがバッファリングされない(すなわち、トラバースされるすべてのノードがバッファ遅延を全く導入しないようにバッファ遅延をプリエンプトする)ようにするために、「ポーズ」/レート減少のために転送するリンク利用度が100%に達するなど、ある条件に出会う時に、そのため/レート減少(ある考案される最適化されたアルゴリズムに従う)のために考案されるアルゴリズムから導出される適当なインターバルの間だけ「ポーズ」するために、各トラバースされるノードの転送するリンクの帯域幅、利用度、スループット、キュー長、出会う遅延...などを確かめるために、pipechar、pipechar、traceroute、pathchar、pchar、pathload、bprobe、cprobe、netest、chirp...などの方法及び類似する技法を使用すること。
例えば、特定のリンクでの利用度(UDP、ICMP、及びTCPのすべてを含むものとすることができる)が、例えば95%に達する時には、受信されるACKのウィンドウサイズをそれ以上増分せず、且つ、その後にパケットが捨てられる場合/時に限って、例えば10%だけ減分し(新しいフローが特定のリンクで帯域幅について完全に「枯渇」しないようにするために)、且つ/又は、おそらく、その後に、各ACKのウィンドウサイズを増分しないことができる。パケットが物理送信エラーに起因して(すなわち、バッファ過充填輻輳に起因するのではなく)捨てられる場合、経路に沿った特定のリンクでのリンク利用度が例えば95%(又は指定されたパーセンテージ)利用度未満の場合に、我々は、ウィンドウサイズ減分を停止する必要がない[高帯域幅長RTT TCPレート回復問題を解決する]。これは、公衆インターネット上でのこの単純な分離されたTCP変更の増分的採用を最も有用に促進する。新しいフロー(UDP、ICMP、TCP)及び/又は既存の未変更のTCP/RTP over UDP/UDPは、今や、必ず、常に増大するために少なくとも5%の非枯渇保証帯域幅を有しなければならない。というのは、変更されたTCP/RTP over UDP/UDPが、例えば、リンク利用度が例えば95%を超える時に、すべてが送信レートを増分しないことができるからである。また、その後、リンクがパケットを捨てる場合/時に、変更されたTCP/RTP over UDP/UDPは、ウィンドウサイズ/送信レートを例えば10%だけ減分する(あるいは、例えばx/(x+y)=0.1になるように、期間yについて送信側ソースに隣接する伝送媒体によって許可される無制限のレートで送信する前に、周期的にインターバルxだけポーズする、すなわち、例えば10%のスライディングウィンドウ又は輻輳ウィンドウのサイズ減分/レート減分と同等)。スライディングウィンドウ/輻輳ウィンドウサイズ減分/レート減分ではなくインターバルxの間のポーズは、ノードでの輻輳したバッファの最高速の可能な早期クリアを与え、且つ、経路に沿ったノードでのバッファ遅延をまさに最小値に保つことを助ける。
ここでのバッファサイズ要件は、全く、考慮のために非常に関連する要因ではない。おそらく、常時、使用可能な物理帯域幅以内に/その100%を超えないようにすべてのトラフィックを保つことができる(非常に突然のバースト性(burstiness)を受けて、バッファリングされる必要がある場合がある)。
VoIP/マルチメディア(例えば、RTP over UDP/UDPを利用する)又は同一の経路/経路の同一部分をトラバースする総計としてのVoIP/マルチメディアについて、リンクが例えば95%又は100%により近い値すら超え始める時に、ソースVoIP/マルチメディアは、今や、例えばあるパーセンテージ、例えば分解能品質の半分で送信することができ、且つ、他のトラフィックの増加がリンク利用度を例えば95%/100%まで戻すのを待って、現在の突然のバーストを全面的な分解能品質送信及び/又はそれに加えて余分の分解能、例えば200%以上(余分の冗長消去コーディング(redundant erasure coding)...などを用いて)に戻して、即座の突然のバーストを引き起こし、他のTCPフロー(変更された又は未変更の)のレート減少(通常は既存のRFC TCP実施態様で1秒以内)をトリガする捨てられたパケットをバッファリングすることができ、且つ、他のフロー、例えばTCPが今やレート減分する時に、100%オリジナル送信品質に即座に戻る(又は、おそらくはリンクの帯域幅/VoIP/マルチメディアによって利用される帯域幅の比率/ノードでのバッファサイズ...などに依存して、200%分解能品質送信に留まりながらできる限り多くの帯域幅をつかみ続けることさえ)できる → VoIP/マルチメディアの最小の可能なバッファ遅延を保証する。
おそらく、VoIP/マルチメディアは、より高い分解能送信品質で開始することさえできる(例えば、冗長消去コーディング...などを用いて、通常の必要な分解能の200%)。
これは、すべてのフローについて、トラバースされるノードで、できる限り少ないバッファ遅延期間を保証するので、すべてのフローに役立つ。許可された要求がフローパケットを捨てる(例えば、センダにレート減分を知らせるために各TCPフローから1パケット)ことを許可するため、及び/又は例えば95%/100%リンク利用度の検出時にこれを行うために、ルータソフトウェアを、さらにアップグレードすることができる。
上記の方法は、既存の例えばRIP/BGPルータテーブル更新パケット...及び/又は類似する技法と共に使用して、すべてのノードでの最小の又は無のバッファ遅延を保証することができ、アップグレードされたルータソフトウェアは、リンクプリファレンスルーティングテーブル更新を行って、特定の転送するリンクの例えば95%/100%を超過してプリエンプトし...且つ/又はこれを隣接するルータだけではなくネットワーク全体に伝搬させる(しかし、より頻繁なリアルタイム速度更新を可能にするために機能強化される必要があるはずである)。
もう1つの次世代ネットワーク設計は、ルータが、特定の転送するリンクの例えば95%/100%利用度(100%利用度はパケットバッファリングの差し迫った始まりを示すはずである)及び/又はリンクの生帯域幅/キューイングポリシ/バッファサイズ...などの他の構成詳細について隣接するルータにシグナリングすること(隣接ルータがこのルータ/又はこの転送するリンクだけへの既存の送信レートを増やさないようにするために)、及び/又は、更新された情報又は期間yの制限されない送信レート(実際にはルータの間のリンク帯域幅によってのみ制限される)を継続する前のいくつかの対応する「ポーズ」インターバルxにさえ依存する、考案されるアルゴリズムに基づくあるパーセンテージだけの、通知されるルータリンクをトラバースするフローに対するフローごとのレート減分/レートシェーピングとすることができる。「レート減分」/「ポーズ」中のバッファリングを必要とするすべてのTCPフローのパケットは、どの一時にもウィンドウサイズのほとんどであるのみになるはずであり、RTP/UDPフローは、同様にバッファリングされ得る → 今や、おそらくソース輻輳回避TCPレート制限機構を一切なしで済ませることができると考えられる!。ルータは、センダTCPソースに戻るACKのadvertised Window sizeフィールドに、ある持続時間について又は周期的にある持続時間について0をセットする(「ポーズ」又は周期的「ポーズ」を引き起こす)ように変更するか、あるいは、advertised Windowフィールド値を、センダTCPソースの導出された/推定された現在の有効ウィンドウサイズのある減分されたパーセンテージに変更/セットする(したがって、ソーストラフィックのレート制限をもたらす)ことさえできる。インターネット/インターネットサブセット/WAN/LAN上のスイッチ/ルータは、すべてのフローのソース−デスティネーションアドレス及び/又はポートのテーブルを、その最新のSeq Numberフィールド及び/又はACK numberフィールド(及び/又はリンクに沿ったフローごとの転送レート、現在の導出された/推定されたリンクに沿ったフローごとの有効ウィンドウサイズ...など)と一緒に維持して、ルータが「純ACK」及び/又は「ピギーバックACK」及び/又は「複製されたパケット」...などを介してアドバタイズされたウィンドウサイズ更新を生成できるようにすることだけが必要である(例えば、「ポーズ」の前の既存のレシーバウィンドウサイズ値に戻る前に、ある期間の間に0の連続的なアドバタイズされたレシーバウィンドウサイズを介して「ポーズ」するように、又は導出された/推定された現在のソースTCP有効ウィンドウサイズに基づいて減分された値のアドバタイズされたレシーバウィンドウサイズを介してレートを減らすように、ソースTCPに通知する)。隣接するルータは、次のルータの通知されるルータのリンクに沿った宛てられたパケットを減らし/トラフィックシェーピングし、あるパケットIPアドレスを知っている隣接物は、ルーティングテーブルエントリ、RIP/BGP更新、MIB交換...などからの通知される次のルータのリンクに沿ってルーティングされる予定である。例えば、通知するルータに先行する隣接するルータでの既に周期的にポーズされているフロー(周期的「ポーズ」を介してレート制御される)は、今や、さらに、影響されるフローの「ポーズ」インターバル長を増やし、且つ/又はその期間内の「ポーズ」の個数を増やすはずである。周期的ポーズは、例えば、考案されるアルゴリズムから導出されるある定義された期間、例えば通知するルータが今、あるパーセンテージ未満、例えば95%未満に戻って下落したリンク利用度を示す隣接するルータを更新する時に、頻度/個々のポーズインターバルを止めるか減らすことができる。
RED/ECN機構を、この機能性を提供するために変更することができる、すなわち、バッファリングされたパケットを監視し、且つ、パケットを選択的に捨て/センダに通知するのではなく、RED/ECNは、例えば利用度があるパーセンテージ、例えば95%に達する時...など、リンク利用度に関するポリシに基づくことができる。
上記のボトルネックリンク利用度推定技法、使用可能ボトルネック帯域幅推定技法、ボトルネックスループット推定技法、ボトルネックリンク帯域幅容量推定技法を、さらに、非輻輳RTT/RTTest/RTTbase/レシーバOTTest法に基づく前に説明したレート減分/「ポーズ」法に組み込むことができる。ここで、非輻輳RTT/RTTest/RTTbase/レシーバOTTest法に基づく前に説明したレート減分/「ポーズ」法をさらに機能強化するために、ボトルネックリンク利用度推定技法、使用可能ボトルネック帯域幅推定技法、ボトルネックスループット推定技法、ボトルネックリンク帯域幅容量推定技法を十分によい正確さのために導出し/推定するための豊富な時間があるはずである。経路のトポロジ/構成を補足し/提供するさまざまなさらなる技法に、SNMP/RMON/IPMON/RIP/BGP...などを含めることができる。
2.周期的プローブは、Windows Updateプローブ(レシーバがまだ0ウィンドウサイズをアドバタイズしていない場合であってもレシーバウィンドウサイズを照会するため)又は類似するプローブパケット...の形とすることができ、あるいは、周期的プローブとしての実際のデータパケット(送信に使用可能な場合に)...など、又は未使用ポート番号を有するデスティネーションへのUDP(デスティネーションポート到着不能というリターンメッセージを得るため)、及び/又はこれに加えてすべてのノードからのタイムスタンプオプションを使用することができる。あるいは、同様に、未使用ポート番号を有するデスティネーションへのTCP(このTCPパケットは未使用ポート番号へのTCP SYNCとすることができる)。
さまざまな注記
[注:ポーズしたインターバルが、例えば1秒以内に合計p*Iになる場合に、効果的に、輻輳ウィンドウ=(p*I)/現在のスループットの1秒(現在の有効ウィンドウサイズ*現在のRTT)]
輻輳の検出時に、タイムクリティカルアプリケーションは、バーストを送信してパケットドロップを引き起こすことができ、あるいは、タイムスタンプから輻輳を検出するレシーバが、おそらくは便利に大きいプローブの形で、バーストを引き起こすか、バーストを引き起こすためにサーバに通知することができる。
[注:ポーズしたインターバルが、例えば1秒以内に合計p*Iになる場合に、効果的に、輻輳ウィンドウ=(p*I)/現在のスループットの1秒(現在の有効ウィンドウサイズ*現在のRTT)]
輻輳の検出時に、タイムクリティカルアプリケーションは、バーストを送信してパケットドロップを引き起こすことができ、あるいは、タイムスタンプから輻輳を検出するレシーバが、おそらくは便利に大きいプローブの形で、バーストを引き起こすか、バーストを引き起こすためにサーバに通知することができる。
外部インターネットノードに対するRTTest技法に加えて、例えばレシーバプロセッサ遅延、生帯域幅、使用可能帯域幅、バッファサイズ、バッファ輻輳レベル、リンク利用度と共に、帯域幅推定技法の使用を改善することができる。
レシーバベースドOTTestは、GPS同期化を展開する必要はなく、非輻輳OTTest、非輻輳OTTbase、又は既知の非輻輳OTT及びOTTモニタ変形だけを必要とする!!!。
センダベースド及び/又はレシーバベースドの生の帯域幅及びスループット推定 → リンク利用度
センダが遅延変動を処理するレシーバをブロックアウトできるように、タイムスタンプ(センダ及びエコー送信側(echoer))を使用する。
センダが遅延変動を処理するレシーバをブロックアウトできるように、タイムスタンプ(センダ及びエコー送信側(echoer))を使用する。
変更されたTCP/変更されたモニタソフトウェアは、ポーズされた時に、任意選択として、今バッファリングされる必要があるホストソースTCPからのACKフラグをセットされたすべての新たに到着したデータセグメント(すなわち、ピギーバックACKセグメント又は純ACK、何もACKしない通常のデータセグメントは無視する)に対応する、データペイロードを搬送しない純ACKを即座に生成し、送信する(「ポーズ」にもかかわらず)ことができる。このポーズインターバル/拡張ポーズインターバル中に生成されるすべての純ACK(1つ又は複数)は、即座に送信されるが、そのSeq Numberフィールド値に、まさに最初にバッファリングされるデータセグメント(これは、ACKフラグをセットされた又はセットされていない通常のデータセグメント又は純ACKセグメントとすることができる)とまさに同一のシーケンス番号引く1をセットさせることができる。新たに到着したセグメントが、純ACKである場合には、単にそれらを同様にバッファリングし、且つ、この新たに到着した現在はバッファリングされている純ACKに対応する純ACKを生成し/送信する!。この新たに到着した純ACKを、この時に、他のバッファリングされたデータセグメントの前に転送することは、受信するTCPに、今、最後に送信された肯定応答番号と同一でなければならない次に期待されるシーケンス番号より大きいシーケンス番号を有するパケットを受信させる場合がある。生成された純ACKが送信されたならば、対応する現在はバッファリングされている純ACKを、任意選択として、今、バッファから除去し、且つ、破棄することができる。というのは、複製純ACKを送信しても意味がないからである。純ACKは、その代わりに、生成されることができ、且つ、このポーズインターバル期間/拡張ポーズインターバル期間内のすべてのバッファリングされたパケットの中で最大の肯定応答番号を有するバッファリングされたセグメントに対応することができる。
変更されたTCP/変更されたモニタソフトウェアは、任意選択として、URGENT/PSHフラグ....などを有するセグメントを、「ポーズ」/拡張「ポーズ」中であっても即座に転送することを可能にすることができる。
実際のレート=セグメントの送信時刻以降に送信されたバイト数/ACKタイムアウトを導出することもできる。Seq No、ACKタイムアウト、このセグメント内のバイト数を含むエントリのイベントリストを保持する。あるいは、実際のレート=セグメントの送信時刻以降に送信されたバイト数/(この特定のACKタイムアウトしたセグメントの送信時刻−リスト上の最後の肯定応答されていないセグメントの送信時刻、リストに送信時刻を有する最後のセグメントがない場合には=このACKタイムアウトしたセグメント+ACKタイムアウト期間をセットする。あるいは、ACKタイムアウト期間内の、直前に送信されたセグメントに基づく実際のレートを使用する(おそらく、実際のレート=受信されたAck、すなわちこれらの肯定応答されたセグメントのすべてに対応する総バイト数を導出することもできる)RTT又はACKタイムアウト期間内)をセットする。
レシーバベースは、輻輳ロスと物理送信エラーとの間で区別し、レート、OTT又はOTTbase、輻輳の始まりを各方向で別々にはるかにより正確に検出することができる。さらによりよく、センダは、レシーバが最初にパケットを受信した時及び/又はレシーバが、センダに送り返すパケット(及び/又はACK)(例えば、IPMP)を最後に変更した時のタイムスタンプを伴うACKを戻って受信する。
スループット=ウィンドウ*MSS/RTTバイト/秒をも導出できることに留意されたい。
マルチキャスト用の変更されたTCPテクノロジ実施態様は、ルータのマルチキャストモジュールでの実施/階層的調整を必要とする。
モニタソフトウェアは、センダ及び/又はレシーバが、例えば一意のポート番号確立を介して、お互いの存在を識別したならば、よりよく調整することができる → モニタソフトウェアは、その後、適当なモード/モード動作の組合せに切り替えることができる。
外部ノードを介して送信/受信する場合には、「ポーズ」したくない場合があるが、インターネット上の増分採用が大多数になる時など、この好ましい「ポーズ」包含をイネーブルするための場合には好ましい(おそらくユーザ選択可能オプション)!。
当初に経路(ボトルネックに対応する)の使用可能帯域幅及び/又は生帯域幅容量についてプローブし、その後、例えば使用可能帯域幅の95%又は例えば容量の95%が即座に利用されるようにTCPウィンドウサイズを開始することができる。
RTTが<ACKタイムアウトであり続ける場合に、ウィンドウサイズをはるかによりすばやく、例えば*1/cwnd...などで増分することができる。
ACKタイムアウト(及び又は実際のパケット再送信タイムアウト値)値を、ヒストリカルRTTからの既存RTO推定アルゴリズムに似て、戻るリアルタイムRTTから、この目的のために考案されるアルゴリズムに基づいて動的に導出できることに留意されたい。
RFCでは、DUP ACKを遅延させてはならず、ここで、我々は、すべてのバッファリングされたACKパケット又は単にその最高のACK Noについて、生成された純ACKを即座に既に送信することによって準拠した。
RTTの誤った推定を与え得る経路の再ルーティングの問題を避けるために、我々は、ホップバイホップRTT推定及び帯域幅プロービングを採用することができる。実用的実施態様のためにアクティブネットワーキングテクノロジを使用することによって、セクションごとのダイアログが、ルータを含む隣接ノードの間で実行される。
注:RFCでは、TCPレシーバは、受信するアプリケーションが新しいデータを消費する際に、提供されるウィンドウを更新するためのもの以外には、すべての着信セグメントについて複数のACKを生成してはならない。
DIFF(RTT,非輻輳RTT/RTTest)に応じて、ウィンドウサイズを減らし/「ポーズ」期間を増やすことができる。パーセンテージレート減分/「ポーズ」インターバル長は、経路に沿って経験されるバッファ遅延のサイズ、例えばOTT−OTTest(又はOTT−既知の非輻輳OTT)、又はRTT−RTTest(又はRTT−既知の非輻輳RTT)に応じて調整することができる。
変更されたレシーバTCPが、「ポーズ」している間のセンダのバッファリングされたACKパケットに関する変更されたセンダTCPが生成した純ACK(又はすべてのACKさえ)を受信する時に、変更されたレシーバは、任意選択で/特に、最後のACK番号−1をセットされたSeq番号を有する1バイトを生成する、すなわち、変更されたセンダTCPが、確かに受信されたことを知っている、戻るACKを生成することができる(この場合に、各すべてのバッファリングされたパケットが最大Seq番号のACKのみではなく、個別に生成された純ACKであることを保証する必要がある場合がある)。センダTCPは、この1バイトデータの生成された純ACKがレシーバによって返されないかどうかを「パケット複製ACK」で推論することができる(複製されたパケットがレシーバ側のアプリケーションに渡されない場合であっても) → その後、それ相応に反応する(例えば、逆経路の輻輳/輻輳ロス/送信エラー又は転送の輻輳/輻輳ロス/送信エラーである可能性があり、後者の場合に、生成された1バイトデータ純ACKをもう一度送信したいと望んでもよい...など)。
両端のモニタソフトウェア、又はセンダのみ、又はレシーバのみ:レシーバの最新のSeq No(複製されたパケット)又は最新のSeq No及び1バイトデータ又は最新のリモートのACK番号−1さえ使用するAcking the ACK(RTOすなわち失われたACKの主原因を除去するため。失われたデータセグメントは、通常、DUP ACKされる → 高速再送信)。
レシーバベースド:ACKが戻って受信されて確認されない場合にACKを再送信する。最初のセグメント送信時刻から例えば1秒前にもう一度到着するためにDUP ACK(高速再送信)を送信して、TCPにCWND=1のスロースタートに再入させるRTOを防ぐ。先行するRTTインターバル中に、推定されたセンダの最大の実際の送信ウィンドウサイズ(実際のレートに対応する。この実際の送信するウィンドウサイズが全フライトパケットと同等であると仮定することができる)の%として、レシーバウィンドウサイズを動的に調整することができる。
TCPの将来のRFCは、1つの余分のAcking ACKフィールド(Acking the ACKs制御フィードバックループ)を有しなければならず、これは、制御ループを完成させ(すなわち、既存TCPは、RTOが転送するリンク上のデータセグメントロス又は戻るリンク上の対応するACKロスのどちらに起因するかに関して盲目である)、両方のTCPの、イベント状態の知識を改善する。あるいは、モニタソフトウェアが、Seq Noを有するACK(複製されたセグメント)...などを介してこのACKing the ACKsを実行することができる。
両端にモニタソフトウェアがある状態で、レシーバは、一方向送信時間を両方向で互いに渡すために調整することができる。レシーバベースドのモニタソフトウェアは、SYNC接続確立で要求されたタイムスタンプオプションから、外部インターネットノードのOWD(一方向遅延)を導出することができる。センダベースドのモニタソフトウェアは、タイムスタンプオプションを介するレシーバからセンダへのOWDの間に、IPMP、NTP...を介してリモートレシーバへのOWDを推定することができる。両端が協力するモニタソフトウェアを有する場合に、両方向のOWDを推定することができ → ACKs ACKingループと一緒に、これは、送信方向でのパケットドロップ又は戻る方向でのACKロス又は物理送信エラーに起因するパケットロスの区別を可能にする。
Owdは、導出するためのタイムスタンプ、又はipmp/icmpプローブ/ntp....などを必要とする。両端にモニタソフトウェアがある状態で、タイムスタンプセグメントだけが、受信された時及びAcking the Segment Seq Noを返す時に(この2つのタイムスタンプ値のすべてが、イベントリストに保持されるセグメントseq no送信時間の送信側モニタ記録、及びSeq NoのACKの到着時間と組み合わされて、すべてのOWD、端処理遅延などを提供する。
既知OWDの両方の方向、例えば海底ケーブル、WANリンク、及び/又は既知のタイムスタンプドリフト/正確さ及び/又は輻輳/非輻輳動作環境境界の下での既知のスイッチ/ルータ/エンドホスト処理待ち時間は、性能を改善するはずである。
両方向OWDを与える準備のできた送信、受信、戻りのタイムスタンプを有するパケットだけに関するICMPは、wan/lan/小さいインターネットサブセットで、両方の方向でtcp/udpと同一の経路をトラバースする。tcp/udpに関するRFCは、これらのタイムスタンプをイネーブルしなければならない。周期的icmpプローブは、パッシブtcp rtt測定を補足することができる。IPMPは、類似するタイムスタンプ機能を提供し、且つ、送信されたTCPセグメントと同一の経路をトラバースし、且つ、フロー(1つ又は複数)TCP IPアドレスと同一のIPアドレスを用いるが異なるポートアドレスを用いて送信されるプローブパケットとして利用され得る。両端が変更されたTCP/変更されたモニタソフトウェアを実施する場合に、周期的プローブパケットは、フロー(1つ又は複数)TCP IPアドレスと同一のIPアドレスを有するが異なるポートアドレスを有する、この2つの端の変更されたTCP/変更されたモニタソフトウェアの間で確立される別々の独立のTCP接続又はUDP接続又はIPMP接続の形をとることができ、両方の端の変更されたTCP/モニタソフトウェアは、今や、Seq番号を有するセグメントが最初に到着する時刻及び/又は同一Seq番号を有するセグメントがACKされ、返される時刻のタイムスタンプを含めることができ、両端によるOWD測定を可能にする。
外部インターネットを介して働くためのTCP変更の実施
ソースセンダ又はレシーバのいずれか一方(又は両方)が外部インターネットに存在する場合に、このソースセンダとレシーバとの間のデータパケット通信は、例えば、外部インターネットサイトからのhttpウェブページダウンロード/ftpなど、我々の制御を超える輻輳パケットドロップを受ける可能性がある。本明細書の方法(1つ又は複数)は、ソースセンダ又はレシーバのいずれか一方(又は両方)が外部インターネットに存在する場合にも適用可能になるように我々の変更/発明を拡張するが、本説明に含まれるさまざまな前に説明した方法と同様に、両方がインターネットサブセット/WAN/LAN/プロプラエタリインターネット内に存在する場合にも適用できることに留意されたい。
ソースセンダ又はレシーバのいずれか一方(又は両方)が外部インターネットに存在する場合に、このソースセンダとレシーバとの間のデータパケット通信は、例えば、外部インターネットサイトからのhttpウェブページダウンロード/ftpなど、我々の制御を超える輻輳パケットドロップを受ける可能性がある。本明細書の方法(1つ又は複数)は、ソースセンダ又はレシーバのいずれか一方(又は両方)が外部インターネットに存在する場合にも適用可能になるように我々の変更/発明を拡張するが、本説明に含まれるさまざまな前に説明した方法と同様に、両方がインターネットサブセット/WAN/LAN/プロプラエタリインターネット内に存在する場合にも適用できることに留意されたい。
輻輳パケットドロップの上記の影響は、RTOパケット再送信タイムアウト及びソースセンダTCPでCWNDに1セグメントサイズがセットされた「スロースタート」への付随する復帰をトリガするはずであり、RTT/TCP輻輳ウィンドウサイズCWNDあたりのソースセンダTCP送信レートが例えば1K*セグメントサイズまで戻って上昇するためには、初期「スロースタート」からのCWNDの約10の指数関数的増加を要するはずである(2^10=1K)、すなわち、ソースセンダは、レシーバから10個の連続する成功の中断されないACK(輻輳ドロップなし)を受信する必要があり、これは、200msのRTTでは、1K*セグメントサイズのCWNDまで戻って上昇するのに10*300ms=3秒を要するはずである。CWNDがSSThresh値に達したならば、CWNDは、今や、「スロースタート」中のACKごとの指数関数的増分ではなく、RTTごとに線形に増分するのみであるはずである。RFC 2001 http://www.faqs.org/rfcs/rfc2001.htmlを参照されたい。
エンド−エンド転送性能における最大の劣化を引き起こすのは、輻輳パケットドロップの際の、RTOパケット再送信タイムアウト及びCWNDに1セグメントがセットされた「スロースタート」への付随する再入の始まりである。したがって、リモートソースセンダTCPで...を用いる高速再送信をトリガするためにそれらのDUP ACKを生成するためによりすばやく反応するようにソースセンダTCPを変更することが、有利であるはずである。
現在ほとんどのTCPで一般的に実施されているDUP ACK高速再送信/回復アルゴリズムを用いて、センダソースTCPは、今や、次の2つのシナリオの下でのみ、「スロースタート」への付随する再入を伴うRTOパケット再送信タイムアウトを行うのみであるはずである。
(A)センダソースTCPは、データパケット(1つ又は複数)をレシーバに送信し(1つの単一のパケット又はパケットの連続するブロック)これらのパケットは、すべて、失われて/捨てられて絶対に到着せず、この故に、レシーバTCPは、これらの未到着の次の期待されるSeq番号のパケット(1つ又は複数)のDUP ACKを生成するために、これらのパケットが実際に送信されたか否かを知るすべがない。パケットのこれらの送信された連続するブロックのうちのより後のパケットのいずれかが実際に到着した場合には、これらのパケットのうちのより以前のパケットのいくつかが捨てられた場合であっても、レシーバTCPは、それでも、その代わりにCWNDを半分にするだけである高速再送信/回復をトリガするためにセンダソースTCPへのDUP ACKを生成できる立場にあるはずであり、したがって、センダソースTCPに1セグメントのCWNDを有する「スロースタート」に再入させるセンダソースTCPのRTOパケット再送信タイムアウトイベントが回避されることに留意されたい。既存RFCは、どの状況の下でも1秒というデフォルトRTOタイムアウト最低最小フロアを規定し、したがって、高速再送信/回復をトリガするDUP ACKは、これらの再送信されるパケットの後続の肯定応答が例えば最小1秒のRTOタイムアウト以内にセンダソースTCPに戻って到着する場合に、保留中の通常のRTOパケット再送信タイムアウトイベントを防ぐはずであることに留意されたい。
(B)レシーバによって生成された、センダソースTCPに戻る肯定応答は、失われ/捨てられ、したがって絶対にセンダソースTCPに戻って到着せず、したがって、センダソースTCPは、今や、RTOタイムアウトし、1セグメントサイズのCWNDを有する「スロースタート」に再入する。
上記のシナリオ(A)は、センダソースTCPを変更し、その結果、例えば、直後に次に送信されるデータパケットの肯定応答が、例えば戻って受信された直前に送信されたデータパケットの肯定応答から300ms(又は、ユーザ入力値、又は、RTTest(min)及び/又はOTTest(min)...などに基づくものとすることができるアルゴリズム的に導出される値、300msは、ここでは、200msという遅延肯定応答最大期間より大きいものとして選択された例であった)又は例えば300ms+この直後に送信されるデータパケットの送信時刻以降に経過した最新のRTTest(すなわち、我々は、今、この直後に送信されるパケットが失われ/捨てられたか、レシーバからセンダソースTCPに戻るその肯定応答が失われ/捨てられたと全く安全に仮定することができる)のうちの遅い方の後に戻って受信されない場合に、(以下ではアルゴリズムAと呼称する)(すべての送信されたデータセグメント/データパケットが、すべて、既に返され、肯定応答し返されている場合、すなわち、最新の送信された「最大の」有効なSeqNo=最新の受信された「最大の」有効なACKNoの場合を除く)、すなわち、センダTCPは、今は、経過タイムインターバルイベントによって普通に影響されずに継続しなければならない)センダソースTCPは、今、即座に「連続ポーズ」状態に入らなければならないが、肯定応答パケット/通常のデータパケットが次にレシーバTCPから戻って受信される(したがって、ラウンドトリップ経路が、今は完全に輻輳してはいない、すなわち、どちらの方向でも各すべてのパケットを捨ててはいない)まで、例えば、この「連続ポーズ」状態中に経過する各例えば150ms(又は、ユーザ入力値、又はRTTest(min)及び/又はOTTest(min)...などに基づくものとすることができるアルゴリズム的に導出された値)の間の1つだけの通常のデータパケット及び/又は複数の純ACKパケット送信を許容しなければならず、肯定応答パケット/通常のデータパケットが次にレシーバTCPから戻って受信された時には、「連続ポーズ」は即座に停止し、「連続ポーズ」をトリガした最初に経過した300msの前と同一の送信レート/CWNDサイズに戻るようにすることによって、防ぐことができる。
アルゴリズムAの諸部分を、そのさまざまな異なる組合せで異なって適合させることができる。
1.最初に経過した300msの時に「連続ポーズ」に入るのではなく、センダソースTCPは、そのCWNDをx%に減らすのみである(例えば、95%、90%、50%...、これは、ユーザ入力とするか、ある考案されるアルゴリズムに基づくものとすることができる)。
及び/又は
2.最初に経過した300msの時に「連続ポーズ」に入るのではなく、センダソースTCPは、CWNDサイズを変更せずに、「ポーズ−インターバル」の間だけ「ポーズ」し、このポーズ−インターバルは、ユーザ入力とするか、ある考案されるアルゴリズムから導出されるものとすることができる(例えば、100msのポーズ−インターバルは、上記のステップ1でCWNDを90%に減らすことと同等になるはずである)。
2.最初に経過した300msの時に「連続ポーズ」に入るのではなく、センダソースTCPは、CWNDサイズを変更せずに、「ポーズ−インターバル」の間だけ「ポーズ」し、このポーズ−インターバルは、ユーザ入力とするか、ある考案されるアルゴリズムから導出されるものとすることができる(例えば、100msのポーズ−インターバルは、上記のステップ1でCWNDを90%に減らすことと同等になるはずである)。
及び/又は
1.上記のステップ1及び2に加えて、最初の300msが経過した時に「連続ポーズ」に入るのではなく、即座に「初期ポーズ−インターバル」のみの間に「ポーズ」するのみであり、この初期ポーズ−インターバルは、ユーザ入力とするかあるアルゴリズムから導出することができ、例えば、センダソースTCPからレシーバTCPまでパケットによってトラバースされるルータ/スイッチノードに沿って築き上げられた累積的なバッファリングされたパケット遅延のすべてが、この例えば500msの量によってクリアされることを保証し、その後に送信されるパケットによって経験されるバッファ待ち時間を減らすために500msとすることができる。
1.上記のステップ1及び2に加えて、最初の300msが経過した時に「連続ポーズ」に入るのではなく、即座に「初期ポーズ−インターバル」のみの間に「ポーズ」するのみであり、この初期ポーズ−インターバルは、ユーザ入力とするかあるアルゴリズムから導出することができ、例えば、センダソースTCPからレシーバTCPまでパケットによってトラバースされるルータ/スイッチノードに沿って築き上げられた累積的なバッファリングされたパケット遅延のすべてが、この例えば500msの量によってクリアされることを保証し、その後に送信されるパケットによって経験されるバッファ待ち時間を減らすために500msとすることができる。
及び/又は
4.アルゴリズムA又は上記のステップ1、2、及び3に加えて、パケット送信レートが、アルゴリズムAのように「連続ポーズ」中又は「ポーズ−インターバル」中又は「初期ポーズ−インターバル」中の例えば150msの経過した期間ごとに1つの通常のデータパケット及び/又は複数の純ACKパケットに制限される場合に、センダソースTCPは、今や、その代わりに、「連続ポーズ」中又は「ポーズ−インターバル」中又は「初期ポーズ−インターバル」中の新しいCWNDサイズによって許容されるレートで送信し、あるいは、パケットを全く送信しない。
4.アルゴリズムA又は上記のステップ1、2、及び3に加えて、パケット送信レートが、アルゴリズムAのように「連続ポーズ」中又は「ポーズ−インターバル」中又は「初期ポーズ−インターバル」中の例えば150msの経過した期間ごとに1つの通常のデータパケット及び/又は複数の純ACKパケットに制限される場合に、センダソースTCPは、今や、その代わりに、「連続ポーズ」中又は「ポーズ−インターバル」中又は「初期ポーズ−インターバル」中の新しいCWNDサイズによって許容されるレートで送信し、あるいは、パケットを全く送信しない。
及び/又は
5.アルゴリズムA又は上記のステップ1、2、3、又は4に加えて、肯定応答パケットが、レシーバTCPから戻って次に受信される(したがって、ラウンドトリップ経路が、今は完全に輻輳してはいない、すなわち、どちらの方向でも各すべてのパケットを捨ててはいない)(この時には、「連続ポーズ」又は「ポーズ−インターバル」又は「初期ポーズ−インターバル」が即座に止まり、「連続ポーズ」をトリガした最初に経過した例えば300msの前と同一の送信レート/CWNDサイズに戻る)までの場合に、この場合に、センダソースTCPは、新しいCWNDサイズによる制限に従って適用可能な送信レートを再開する。
5.アルゴリズムA又は上記のステップ1、2、3、又は4に加えて、肯定応答パケットが、レシーバTCPから戻って次に受信される(したがって、ラウンドトリップ経路が、今は完全に輻輳してはいない、すなわち、どちらの方向でも各すべてのパケットを捨ててはいない)(この時には、「連続ポーズ」又は「ポーズ−インターバル」又は「初期ポーズ−インターバル」が即座に止まり、「連続ポーズ」をトリガした最初に経過した例えば300msの前と同一の送信レート/CWNDサイズに戻る)までの場合に、この場合に、センダソースTCPは、新しいCWNDサイズによる制限に従って適用可能な送信レートを再開する。
上記の有用な組合せの単に1つの例は、例えば500msの間「初期ポーズ」して、この例えば500ms中にパケットを全く送信しないこと又はこの例えば500ms中に1つの通常のデータパケット及び/又は複数の純ACKパケットを例えば150msごとに許容することのいずれかによってバッファ遅延をクリアし、これに続いて、「ポーズ−インターバル」中にパケットを全く送信しないこと又はこの例えば100msの「ポーズ−インターバル」中に例えば50msおきに1つの通常のデータパケット及び/又は複数の純ACKパケットを許容することのいずれかによって例えば500msが経過した時に「ポーズ−インターバル」に従うことと、その後、肯定応答パケットが次にレシーバTCPから戻って受信された時に、即座に「ポーズ−インターバル」を止め、最初に経過した例えば300msイベントの前と同一の送信レート/CWNDサイズ又は新しいCWNDサイズによって制限される新しい送信レートに戻ることとであるはずである。最初の例えば500msの導出の適切な選択は、VoIP/マルチメディアなどの他のタイムクリティカルパケットが深刻なバッファ遅延を経験しないようにするのを助けるはずであることに留意されたい。タイムスタンプオプションは、OTTest情報をセンダソースTCP判断で利用することを可能にすることができ、SACKオプションは、使用される場合に、DUP ACKイベントの発生を減らすはずである。
センダソースTCPを、上記のようにさらに変更して、パケットロスが輻輳ドロップ又は物理送信エラー...などのどれに起因するのであれ、すべての状況の下で「スロースタート」に再入する要件をなしですますことができる、すなわち、TCPを、今や、RTO「スロースタート」再入、高速再送信レート半分化...などではなく、RTOパケット再送信タイムアウト又はDUP ACK高速再送信の前の送信レート/CWNDの例えば90%まで(又は、CWNDを変更せずに100msの同等「ポーズ−インターバル」)に送信レート/CWNDを維持することができる。これは、本説明で記述した方法/サブコンポーネント方法のどれにでも適用可能であるはずである。ここで、さらに変更されたTCPは、例えば1秒という既存RFCの最小RTOデフォルト最低フロアの累積的なバッファリングされた遅延をクリアするための「初期ポーズ−インターバル」を含めることなど、それ相応に輻輳ドロップ反応にはるかによりすばやく反応することができる。
上記のアルゴリズムA自体及び/又はそのさまざまな変更された組合せを、さらに変更し/適合させることができるが、それらは、それでもそこで開示される原理に含まれるはずである。多数の中の1つの例として、変更が、TCPスタック自体の中で直接にではなく、変更されたモニタソフトウェア/変更されたプロキシTCP/変更されたIPフォワーダ...などの中で実施される場合に、変更されたモニタソフトウェア/変更されたプロキシTCP/変更されたIPフォワーダ...などは、現在のウィンドウ分の送信されるデータセグメント/データパケットのコピーを保持し、例えば送信された特定のデータセグメント/データパケットがACKされて返されていないことを変更されたモニタソフトウェア/変更されたプロキシTCP/変更されたIPフォワーダ...などが認めた時に実際の3DUP ACK高速再送信及び実際のRTOパケット再送信(今は単に高速再送信及びRTO再送信をいずれにせよ全く実行しないはずのTCPではなく)を実行し、TCPはすぐにRTOタイムアウトを実行して、その特定の「スーンレート(soon late)」データセグメント/データパケットの特定の肯定応答を「スプーフィングし」、ここで実際のデータセグメント/データパケット再送信を実行し、且つ、高速再送信DUP ACKの受信時に、これらをTCPに転送せず、その代わりに、ここで高速再送信を実行する(したがって、この変更された端のTCPは、そのCWND/送信レートを全く変更せず、このCWND/送信レートは、最大TCPウィンドウサイズ送信レートに留まることができるが、ここでの「ポーズ」期間は、センダの実際の有効送信レートを、すなわち、各秒内の制限されないTCP送信に使用可能なタイムスライスを制限することによって、調整するはずである)。
非常にしばしば、変更されたTCPは、ユーザローカルホストPCだけでインストールされ、httpウェブサーバ/ftpサーバ/マルチメディアストリーミングサーバなどのリモートセンダソースTCPは、上記の変更されたTCPをまだ実施していない。この故に、変更されたローカルホストPCのTCPは、ここでは、レシーバベースドの変更されたTCPとして働く、すなわち、リモートセンダソースTCPにリモートに影響する必要があるはずである。ローカルホストTCPがリモートセンダソースTCP輻輳制御/回避に影響できるいくつかの形は、リモートセンダソースTCPにレシーバウィンドウサイズ更新を送信すること、リモートセンダソースTCPでのRTOパケット再送信タイムアウトを防ぐ高速再送信/回復のためにリモートセンダソースTCPにDUP ACKを送信すること...などを介する。
ここで、モニタソフトウェア内で実施される非常に単純化されたレシーバベースドの変更されたTCPの概要を説明する(これを、さらに変更し/適合させることができ、モニタソフトウェアではなく直接にTCP自体の中で実施することもできる)。
1.リモートセンダからTCPパケットを受信する時には、必ず、フローごとのTCPのテーブル内に既に存在する場合にはソースアドレス及びポートをチェックし、そうでない場合には、さまざまなパラメータを用いて新しいフローごとのTCP TCBを作成する(すべてのインターセプトされたパケットについて以前のSEQ NO/送信時刻テーブルエントリを維持する必要はない)。
.最新のパケット受信ローカルシステム時刻(リモートセンダ、純ACK、又は通常のデータパケットから受け取られる)、最新のレシーバパケットのアドバタイズされたウィンドウサイズ(ローカルMSTCPによってリモートセンダに送信される)、最新のレシーバパケットのACK番号すなわちリモートセンダから期待される次の期待されるSeq番号(ローカルMSTCPによってリモートセンダに送信され、フローごとの着信パケット及び発信パケットの検査を必要とし、我々は、今や、通常の120秒インアクティビティを待たずに、FIN/FIN ACKの際にフローごとのTCPテーブルエントリを即座に除去できなければならない)...など。
(任意選択)Sync/Sync ACK完了時に、即座に、リモートセンダのCWNDに例えば8Kをセットする。これは、好ましくは、例えばACKNo=リモートセンダの初期SeqNo+1を有する例えば15個の即座のDUP ACKを介して行われ、Divisional ACKは、一部のTCPが、その代わりにACKされたバイト数だけCWNDを増分するのみなので、良好に動作しない場合があり、最適のACK挙動は、すべてのTCPで同一でない可能性がある。
注:代替案では、我々は、リモートセンダから受信される最初のデータパケットを待ち、その後、リモートセンダからの受信されたばかりのSeqNoと同一にセットされたACKNoを有する(1バイトだけの不必要な再送信出費で)例えば15個のDUP ACKを生成し、あるいはDivisional ACKを使用する。
TCPは、接続をセットアップするのに3ウェイハンドシェーキングプロシージャを使用する。接続は、開始側が、SYNフラグをセットされ、シーケンス番号フィールド内の提案される初期シーケンス番号(seq=X)を有するセグメントを送信することによってセットアップされる。次に、リモートは、SYNフラグとACKフラグの両方をセットされ、シーケンス番号フィールドに逆方向のそれ自体の割り当てられた値(seq=Y)をセットされ、X+1の肯定応答フィールド(ack=X+1)を有するセグメントを返す。これを受信した時に、開始側は、Yを記憶し、ACKフラグだけをセットされ、Y+1の肯定応答フィールドを有するセグメントを返す。
2.次のパケットを受信せずに300msが満了する場合には、
→ 我々は、ソフトウェア内で、ACK番号に未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから300ms以内に次の期待されるSeq Noが到着しないことを検出し、それと同時に3つのDUP ACK以内に1800バイトのウィンドウ更新を伝え(センダの「ポーズ」+1パケットと同等)、例えば100msが純ACK又は通常のデータパケットを全く受信せずに経過する場合に、毎回1800バイトだけ増分される1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けることだけを必要とするが、ACK又は通常のデータパケットが実際に次に受信される場合には、リモートからACK又は通常のデータパケットが次にもう一度受信されるまで、100msおきに繰り返して、前のウィンドウサイズを復元して(ACKNoフィールドにローカルMSTCPからリモートに送信された「;記録された」最新の「最大の」CKNoをセットする)通常の(3つのDUP ACKではない)同一の単一のウィンドウ更新を送信し、その後、上記の例えば300msの満了検出ループを、上記のステップ2のまさに始めに繰り返す。
→ 我々は、ソフトウェア内で、ACK番号に未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから300ms以内に次の期待されるSeq Noが到着しないことを検出し、それと同時に3つのDUP ACK以内に1800バイトのウィンドウ更新を伝え(センダの「ポーズ」+1パケットと同等)、例えば100msが純ACK又は通常のデータパケットを全く受信せずに経過する場合に、毎回1800バイトだけ増分される1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けることだけを必要とするが、ACK又は通常のデータパケットが実際に次に受信される場合には、リモートからACK又は通常のデータパケットが次にもう一度受信されるまで、100msおきに繰り返して、前のウィンドウサイズを復元して(ACKNoフィールドにローカルMSTCPからリモートに送信された「;記録された」最新の「最大の」CKNoをセットする)通常の(3つのDUP ACKではない)同一の単一のウィンドウ更新を送信し、その後、上記の例えば300msの満了検出ループを、上記のステップ2のまさに始めに繰り返す。
ここでは、我々が、単一のウィンドウ更新パケットの代わりに3つのDUP ACKを送信することもできるが、2つのさらなる100msが経過した後に、単一のウィンドウ更新ACKパケットが、合計3つのDUP ACKウィンドウ更新パケットになるはずであり、もちろん、ここでの代替案を、任意のウィンドウ更新パケット、例えばDUP SeqNoウィンドウ更新パケット...などとすることができることに留意されたい。
(これは、保留中のリモートMSTCP RTOタイムアウトのスロースタート再入を引き起こすシナリオAが、回避され、保留中のRTOがDUP ACK高速再送信/回復イベントによって置換されることを保証する。送信されたパケットが実際には全くない場合には、我々が不必要にACK番号=次の期待されるSeq番号を有する3つのDUP ACKを送信したことは、実際には問題でない。
シナリオBは、次のACK又はデータパケットがリモートから受信される(すなわち、ボトルネックが、現在、すべてのリモート送信されたパケットを捨ててはいない)まで、100msおきに同一の3つのDUP ACKを送信し続けることによって管理され、次のACK又はデータパケットがリモートから受信された時には、我々は、いずれかの次のパケットが受信されるまで、100msおきに単一のウィンドウサイズ復元パケットを送信し続ける(すなわち、ワーストケースですべてのウィンドウ復元パケットが捨てられる場合であっても、300ms後に、このプロセスが繰り返され、やはりウィンドウ「ポーズ」とその後のウィンドウ復元の試みが保証される)。
注:我々は、アドバタイズされるレシーバウィンドウサイズを連続して増分する。というのは、リモートが、以前の使用可能なレシーバがアドバタイズしたウィンドウサイズを使い果たしている可能性があるが、送信されたパケット(1つ又は複数)が捨てられ、一度もレシーバに達していないからである。リモートが一度もスロースタートすなわち通常RTOに起因するCWND=1に再入していないことを確かめることによって、我々は、非常に大きいウェブページダウンロード時間削減を達成した。高速再送信は、スロースタートを引き起こさず、3つのDUP ACKは、リモートの既存CWNDを半分にするだけであることに留意されたい。
上記のアルゴリズムを、次のように、他端のTCPを「ポーズ」させるためにレシーバウィンドウサイズ更新を送信することを必要とせずに、さらに単純化することができる。
1.リモートセンダからTCPパケットを受信する時には、必ず、フローごとのTCPのテーブル内に既にある場合にはソースアドレス及びポートをチェックし、そうでない場合には、さまざまなパラメータを用いて新しいフローごとのTCP TCBを作成する(すべてのインターセプトされたパケットについて以前のSEQ NO/送信時刻テーブルエントリを維持する必要はない)。
.最新のパケット受信ローカルシステム時刻(リモートセンダ、純ACK、又は通常のデータパケットから受け取られる)、最新のレシーバパケットのACK番号すなわちリモートセンダから期待される次の期待されるSeq番号(ローカルMSTCPによってリモートセンダに送信され、フローごとの着信パケット及び発信パケットの検査を必要とし、我々は、今や、通常の120秒インアクティビティを待たずに、FIN/FIN ACKの際にフローごとのTCPテーブルエントリを即座に除去できなければならない)...など。
(任意選択)Sync/Sync ACK完了時に、即座に、リモートセンダのCWNDに例えば8Kをセットする。これは、好ましくは、ACKNo=リモートセンダの初期シーケンス番号+1を有する例えば15個の即座のDUP ACKを介して行われ、一部のTCPが、その代わりにACKされたバイト数だけCWNDを増分するのみなので、Divisional ACKは、良好に動作しない場合があり、最適のACK挙動は、すべてのTCPで同一でない場合がある。
注:代替案では、我々は、リモートセンダから受信される最初のデータパケットを待ち、その後、リモートセンダからの受信されたばかりのシーケンス番号と同一にセットされたACKNoを有する(1バイトだけの不必要な再送信出費で)例えば15個のDUP ACKを生成し、あるいはDivisional ACKを使用する。
TCPは、接続をセットアップするのに3ウェイハンドシェーキングプロシージャを使用する。接続は、開始側が、SYNフラグをセットされ、シーケンス番号フィールド内の提案される初期シーケンス番号(seq=X)を有するセグメントを送信することによってセットアップされる。次に、リモートは、SYNフラグとACKフラグの両方をセットされ、シーケンス番号フィールドに逆方向のそれ自体の割り当てられた値(seq=Y)をセットされ、X+1の肯定応答フィールド(ack=X+1)を有するセグメントを返す。これを受信した時に、開始側は、Yを記憶し、ACKフラグだけをセットされ、Y+1の肯定応答フィールドを有するセグメントを返す。
2.次のパケットを受信せずに300msが満了する場合には、
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeqをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから例えば300ms以内に次の期待されるSeq Noが到着しないことを検出することだけを必要とする。
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeqをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから例えば300ms以内に次の期待されるSeq Noが到着しないことを検出することだけを必要とする。
例えば100msが純ACK又は通常のデータパケットを全く受信せずに経過する場合に、同一の3つのDUP ACKを送信し続けるが、ACK又は通常のデータパケットが実際に次に受信される場合には、上記の例えば300msの満了検出ループを、上記のステップ2のまさに始めに繰り返す。
(これは、保留中のリモートMSTCP RTOタイムアウトのスロースタート再入を引き起こすシナリオAが、回避され、保留中のRTOがDUP ACK高速再送信/回復イベントによって置換されることを保証する。送信されたパケットが実際には全くない場合には、我々が不必要にACK番号=次の期待されるSeq番号を有する3つのDUP ACKを送信したことは、実際には問題でない。
シナリオBは、次のACK又はデータパケットがリモートから受信される(すなわち、ボトルネックが、現在、すべてのリモート送信されたパケットを捨ててはいない)まで、100msおきに同一の3つのDUP ACKを送信し続けることによって管理される:次のACK又はデータパケットがリモートから受信された時には、我々は、いずれかの次のパケットが受信されるまで、100msおきに単一のウィンドウサイズ復元パケットを送信し続ける(すなわち、ワーストケースですべてのウィンドウ復元パケットが捨てられる場合であっても、300ms後に、このプロセスが繰り返され、やはりウィンドウ「ポーズ」とその後のウィンドウ復元の試みが保証される)。
上記の非常に単純化されたアルゴリズムは、本明細書のさまざまな他の類似するアルゴリズムから導出される:
1.レシーバベースドの目的は、この変更を実施していないリモートセンダソースTCPにできる限り「ミラーイメージ」センダベースドのように振る舞わせることである(しかし、例えばレシーバベースドは、センダソースTCPが、未到着の次の期待されるSeqNoデータセグメントを既に送信したかどうかを知るすべがない...など、ワークアラウンドを必要とするいくつかの些細な相違がある)。センダベースドは、通常のデータパケットのACKが遅れている時に「ポーズ」するが、MSTCPタイムアウト再送信(Seq No=<記録された最後に送信されたSeq Noによって検出される時に、ポーズ−インターバルあたり1つの通常のデータパケットがプローブとして転送されることを可能にし、その後、CWNDをRTOの前の以前のレベルまで戻すためにインターバルACKTimeoutに関してMSTCPへのACKを「スプーフィングする」。我々は、今、後で機能強化するために、まず単純化されたベアボーンバージョンアップを得る。
1.レシーバベースドの目的は、この変更を実施していないリモートセンダソースTCPにできる限り「ミラーイメージ」センダベースドのように振る舞わせることである(しかし、例えばレシーバベースドは、センダソースTCPが、未到着の次の期待されるSeqNoデータセグメントを既に送信したかどうかを知るすべがない...など、ワークアラウンドを必要とするいくつかの些細な相違がある)。センダベースドは、通常のデータパケットのACKが遅れている時に「ポーズ」するが、MSTCPタイムアウト再送信(Seq No=<記録された最後に送信されたSeq Noによって検出される時に、ポーズ−インターバルあたり1つの通常のデータパケットがプローブとして転送されることを可能にし、その後、CWNDをRTOの前の以前のレベルまで戻すためにインターバルACKTimeoutに関してMSTCPへのACKを「スプーフィングする」。我々は、今、後で機能強化するために、まず単純化されたベアボーンバージョンアップを得る。
2.Seq No/送信時刻主イベントリスト及び再送信イベントリストを使用する通常データパケットプローブ法は、十分に単純である。インターセプトされたSYNC/SYNC ACKパケット及び/又はPCレジストリセッティングを変更することによって、SYNC/SYNC ACK中にネゴシエートされるTimestampオプションを保証する必要がある。
3.到着するOTTest>現在の記録されたOTTest(min)+300msの時には、これは、輻輳バッファ遅延をシグナリングする(OTTest(min)は、リモートセンダから我々への非輻輳OTTの我々の最新の最良の推定値である) → 1つの通常の1500バイトイーサネットパケットが受信されることを可能にするために1800バイトのウィンドウ更新を送信し、且つ、複数の小さい純ACKをも送信する。
4.到着するOTTest>現在の記録されたOTTest(min)+300msで通常のデータパケット又は純ACKを受信せずにOTTest(min)が経過する場合に、1800バイトだけ増分された1800バイトの同一のウィンドウ更新を送信し続ける(したがって、経過したOTTest(min)ごとに、リモートは、単一の新しい通常のデータパケットをプローブとして転送することができる)。どの時点でも、到着するオンタイムOTTest=<現在の記録されたOTTest(min)+300msの場合には、前のレシーバウィンドウサイズを復元するウィンドウ更新を即座に送信する、すなわち、リモートは、今や、以前の通常の送信レートを再開する。
(注:これは、レートをスロットリングすることによってパケットドロップを防ぐことを試み、したがって、リモートは、もう一度スロースタートする必要が絶対にないが、外部インターネットであることは、実際には良好に動作しない!。この故に、上記の段落4は、下の段落4によって置換されなければならず、下の段落4は、現在、パケットロスイベントの際にできる限り早くリモート送信レートを復元することに単純に集中する、すなわち、我々は、再送信されたパケットを検出した際にセンダベースドの「スプーフィング」に似てリモート送信レートを即座に復元できる場合に、パケットドロップがリモートでのスロースタートを引き起こすかどうかをもはや気にしない)。
4.リモートセンダパケット「保留中」再送信は、到着するSeq No>次の期待されるSeq No且つ欠けているギャップSeq No(1つ又は複数)が受信されずに300msが経過した時に、必ず検出される(すなわち、今や、ギャップパケットが失われたと安全に仮定することができ、リモートセンダは、現在、スロースタートがRFCの1秒最小シーリングの満了で保留中の状態で再送信し終えるはずである) → しかし、我々のMSTCPは、リモートにもう一度スロースタートに入らずに高速再送信させる3つの順序はずれのSeq Noパケットの受信時に、3つのDUP ACKをそれ自体で既に生成するはずである(リモートセンダが、単に、送信するたまたま2つの順序はずれのSeq Noだけを有し、それ以外は有しない場合に、これが、ものごとを混乱させてはならない。というのは、リモートがこの時に多くを送信しようとしていないので、我々は、単純に、リモートがスロースタートすることを許容することができるからである) → 我々は、ACK Noに未到着の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、次の期待されるSeq Noが以前に受信されたパケットから300ms以内に到着しないことを検出することだけを必要とする。
(SACKは、DUP ACKの発生を減らすのに有用である可能性があり、Divisional ACK、DUP ACK、Optimistic ACKは、センダベースドの「ACKスプーフィング」に似てリモート送信レートを復元するのに有用である可能性があることに留意されたい。http://www−2.cs.cmu.edu/〜kgao/course/network.pdf、http://www−2.cs.cmu.edu/〜kgao/course/network.pdf、及びGoogle Search用語「Ack spoofing」を参照されたい)。
ここで、レシーバベースドの方法の(サンプルのみの)アルゴリズムを添付する。
1.サブネットユーザ入力、指定されたサブネットへ−からのTCPフローを監視するのみ
2.外部ソース/デスティネーションを伴うTCPフローは、異なって監視される
2.1 外部ソース(すなわち、カスタマイズされたTCPは、レシーバベースドフローコントローラとして働く)。
2.外部ソース/デスティネーションを伴うTCPフローは、異なって監視される
2.1 外部ソース(すなわち、カスタマイズされたTCPは、レシーバベースドフローコントローラとして働く)。
.接続確立中にこれらのフローのTimestampオプションを選択する(Syncパケットを変更することができるか? あるいは、上記の段落1、2のすべてのフローもタイムスタンプを用いてひとまとめにするためにPCレジストリをセットする必要がある可能性があるか? Window server 2003は、リモートTCPによって開始される場合にタイムスタンプオプションを可能にするだけである!?)。
.リモートセンダTSValについてこのTCPの着信パケットをチェックし、これを、受信されたまさに最初のパケットのOTTest(max)として及びOTTest(min)としても記録する(現在のレシーバシステム時刻−TSVal)。OTTestは、one way trip time estimate(一方向トリップ時間推定値)すなわち、これまでに観察された最大及び最小のOTTを表す。OTTest(max)及びOTTest(min)は、受信されるすべての後続パケットから更新される。
.着信パケットのOTTest−OTTest(min)>例えば100ms(ユーザ入力パラメータ)である場合には、リモートセンダは、「ポーズ」しなければならず、カスタマイズされたTCPは、レシーバの最後に送信されたシーケンス番号又は最後に受信されたACK No−1をSeq Noにセットされた(したがって、レシーバがボールでリモートセンダにデータセグメントを送信しない場合には、レシーバの最後に送信したSeq Noがない)、例えば50バイトの1バイトガーベジ(又はデータなし)セグメントウィンドウサイズアドバタイズメントパケット(リモートセンダTCPが応答する/純粋ACKを可能にするために、必ずしも0ではない)を生成する。
レシーバは、同一の生成されたウィンドウアドバタイズメントパケット(ただし、Seq No又は最後に受信されたACK No−1が変更されている場合がある)を、これらの「複製されたパケットウィンドウ更新」パケットのうちの1つに対して受信された応答確認があり、したがって、これらのウィンドウ更新パケットのうちの少なくとも1つがセンダで受信済みであり、その応答確認が今到着する(いずれかの方向で失われる可能性がある)ことが示されるまで、送信し続け、そのOTTest−OTTest(min)は<例えば100msでなければならない(我々は、輻輳がなくなるまで「ポーズ」を停止しない)。
「ポーズ」は、OTTest(min)+100ms以内に到着する任意の他のパケット、例えば通常のデータパケットの際にも停止させることができる。その際には、レシーバが、同一であるがウィンドウサイズフィールドにその「ポーズ」の直前の値をセットされたウィンドウ更新パケットを送信する(この値は、例えば50バイトアドバタイズメントをもたらす前に記録される。
2.2 リモートデスティネーション(すなわち、カスタマイズされたTCPは、センダベースドとして働く)
.タイムスタンプオプションは、必要ではないが、RTT<タイムアウト(逆経路輻輳によって引き起こされる可能性がある)の原因をよりよく判定するために、戻る一方向遅延を知るのに有用である。
.タイムスタンプオプションは、必要ではないが、RTT<タイムアウト(逆経路輻輳によって引き起こされる可能性がある)の原因をよりよく判定するために、戻る一方向遅延を知るのに有用である。
.Seq No<最後に送信されたSeq Noを有するMSTCPが発するパケット(1つ又は複数)が送信される(パケットドロップ再送信)時に、MSTCPは、もう一度スロースタートに入るはずである:カスタマイズされたTCPは、今や、例えば100msの期間の間、MSTCPが発するすべてのパケットについて、MSTCPに戻る「ACK」をスプーフィングするはずである。これは、輻輳ウィンドウを、例えばTCPウィンドウサイズに戻すはずである。すべての後続の転送されるバッファリングされるパケットドロップは、受信されるレシーバの3つのDUP ACKを介して高速再送信することができる(その際に、カスタマイズされたTCPは、やはり戻してACKをスプーフィングすることができる)。
我々のアルゴリズム:
1.TCPパケットを受信する時には、必ず、フローごとのTCPのテーブル内に既にある場合にはソースアドレス及びポートをチェックし、そうでない場合には、さまざまなパラメータを用いて新しいフローごとのTCP TCBを作成する(すべてのインターセプトされたパケットについて以前のSeq No/送信時刻テーブルエントリを維持する必要はない)。
1.TCPパケットを受信する時には、必ず、フローごとのTCPのテーブル内に既にある場合にはソースアドレス及びポートをチェックし、そうでない場合には、さまざまなパラメータを用いて新しいフローごとのTCP TCBを作成する(すべてのインターセプトされたパケットについて以前のSeq No/送信時刻テーブルエントリを維持する必要はない)。
.最新のパケット受信ローカルシステム時刻(純ACK、又は通常のデータパケット)、最新のレシーバパケットのアドバタイズされたウィンドウサイズ、最新のレシーバパケットのACK番号すなわち次の期待されるSeq番号(フローごとの着信パケット及び発信パケットの検査を必要とし、我々は、今や、120秒を待たずに、FIN/FIN ACKの際にフローごとのTCPテーブルエントリを即座に除去できなければならない)。
2.次のパケットを受信せずに300msが満了する場合には、
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから300ms以内に次の期待されるSeq Noが到着しないことを検出し、これと同時に3つのDUP ACK以内に1800バイトのウィンドウ更新を伝える(センダの「ポーズ」+1パケットと同等)ことだけを必要とする:ここで、我々は、3つのDUP ACKがやはりリモートによって戻ってACKされることを期待し、例えば100msが戻りACKを受信せずに経過する場合にそのたびに1800バイトだけ増分された1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けなければならないが、戻りACK又は通常のデータパケットが次に受信される場合には(OTT時間に関わりなく)、前のウィンドウサイズを復元する3つのDUP ACKウィンドウ更新を送信する。
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから300ms以内に次の期待されるSeq Noが到着しないことを検出し、これと同時に3つのDUP ACK以内に1800バイトのウィンドウ更新を伝える(センダの「ポーズ」+1パケットと同等)ことだけを必要とする:ここで、我々は、3つのDUP ACKがやはりリモートによって戻ってACKされることを期待し、例えば100msが戻りACKを受信せずに経過する場合にそのたびに1800バイトだけ増分された1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けなければならないが、戻りACK又は通常のデータパケットが次に受信される場合には(OTT時間に関わりなく)、前のウィンドウサイズを復元する3つのDUP ACKウィンドウ更新を送信する。
(これは、保留中のリモートMSTCP RTOタイムアウトのスロースタート再入を引き起こすシナリオAが、回避され、保留中のRTOがDUP ACK高速再送信/回復イベントによって置換されることを保証する。送信されたパケットが実際には全くない場合には、我々が不必要にACK番号=次の期待されるSeq番号を有する3つのDUP ACKを送信したことは、実際には問題でない。
シナリオBは、「ACKing the ACK」が受信されるまで、又は次の通常のデータパケットが受信される(すなわち、ボトルネックが、現在はすべてのリモート送信されたパケットを捨ててはいない)まで同一の3つのDUP ACKを100msおきに送信し続けることによって管理される:「ACKing the ACK」又は次の通常のデータパケットがリモートから受信された時には、我々は、「ACKing the ACK」が受信されるまで、100msおきに、アドバタイズされたウィンドウサイズを復元する3つのDUP ACKを送信し続ける。
次の期待されるSeq Noのセグメントについて3つのDUP ACKを送信することの代替案として、我々は、3つのDUP ACKのACK Noフィールドに、その代わりに次の期待されるSeq No−1をセットすることができ(再送信される1つの余分のバイトだけという犠牲で)、この場合に、我々は、回転する次の期待されるSeq No −100、−99、−98....−1を使用してSeq Noフィールドをセットする必要が明確にある。
しかし、http://www.cs.rutgers.edu/〜muthu/wtcp.pdfを参照されたく、このサイトでは、TCPが、この場合に、「現在の輻輳ウィンドウ内の最低の肯定応答されていないパケット又は最初の未送信のパケットから始めて」再送信することが提案されている。
これが仕様により近くなることを期待されたく、ソフトウェアは、それでも、受信されるパケット及び送信されるパケットのいずれをも変更せずに「パッシブパススルー」のままになる。リモートMSTCPは、今や、決してRTO再入スロースタートしなくなる。
単一PCシェアウェアについて、我々は、プローブ及びタイムスタンプ機能を全く必要としない(段落2):ウィンドウ更新は、純ACK又は通常のデータパケットを受信するまで(受信時刻は問題でない)、100msおきに単純に繰り返すことができる(段落4の3*OTTest(min)の代わりに)。ここで、我々のフローがパケットを捨てる時に、我々は、パケットが捨てられるのと同一のボトルネックをトラバースする他のフローのMSTCPが、我々自身のMSTCPと同一の時刻前後にRTOレートすることを知る → 我々は、リモートセンダのCWNDを安全に復元することができる。
1.目的は、リモートに、できる限り「ミラーイメージ」センダベースドのように振る舞わせることである:センダベースドは、通常のデータパケットのACKが遅れている時に「ポーズ」するが、MSTCPがタイムアウト再送信する(Seq No=<記録された最後の送信されたSeq Noによって検出される時に、ポーズ−インターバルあたり1つの通常のデータパケットがプローブとして転送されることを可能にし、その後、CWNDをRTOの前の以前のレベルまで戻すために、ACKTimeoutインターバルの間にMSTCPへのACKを「スプーフィング」する。我々は、今、後に機能強化するために(例えば、SACKギャップパケット機能が有用である可能性がある)、まず、単純化されたミラーリングされるベアボーンレシーバベースドバージョンアップを得なければならない。
2.Seq No/送信時刻主イベントリスト及び再送信イベントリストを使用する、通常データパケットプローブ法は、十分に単純である。インターセプトされたSYNC/SYNC ACKパケット及び/又はPCレジストリセッティングを変更することによって、SYNC/SYNC ACK中にネゴシエートされるTimestampオプションを保証する必要がある。
[単純化されたアルゴリズムではもはや不要である
3.到着するOTTest>現在の記録されたOTTest(min)+300msの時には、これは、輻輳バッファ遅延をシグナリングする(OTTest(min)は、リモートセンダから我々への非輻輳OTTの我々の最新の最良の推定値である) → 1つの通常の1500バイトイーサネットパケットが受信されることを可能にするために1800バイトのウィンドウ更新を送信し、且つ、複数の小さい純ACKをも送信する。]。
3.到着するOTTest>現在の記録されたOTTest(min)+300msの時には、これは、輻輳バッファ遅延をシグナリングする(OTTest(min)は、リモートセンダから我々への非輻輳OTTの我々の最新の最良の推定値である) → 1つの通常の1500バイトイーサネットパケットが受信されることを可能にするために1800バイトのウィンドウ更新を送信し、且つ、複数の小さい純ACKをも送信する。]。
[単純化されたアルゴリズムではもはや不要である
4.到着するOTTest>現在の記録されたOTTest(min)+300msで通常のデータパケット又は純ACKを受信せずにOTTest(min)が経過する場合に、1800バイトだけ増分された1800バイトの同一のウィンドウ更新を送信し続ける(したがって、経過したOTTest(min)ごとに、リモートは、単一の新しい通常のデータパケットをプローブとして転送することができる)。どの時点でも、到着するオンタイムOTTest=<現在の記録されたOTTest(min)+300msの場合には、以前のレシーバウィンドウサイズを復元するウィンドウ更新を即座に送信する、すなわち、リモートは、今や、前の通常の送信レートを再開する。]。
4.到着するOTTest>現在の記録されたOTTest(min)+300msで通常のデータパケット又は純ACKを受信せずにOTTest(min)が経過する場合に、1800バイトだけ増分された1800バイトの同一のウィンドウ更新を送信し続ける(したがって、経過したOTTest(min)ごとに、リモートは、単一の新しい通常のデータパケットをプローブとして転送することができる)。どの時点でも、到着するオンタイムOTTest=<現在の記録されたOTTest(min)+300msの場合には、以前のレシーバウィンドウサイズを復元するウィンドウ更新を即座に送信する、すなわち、リモートは、今や、前の通常の送信レートを再開する。]。
(注:これは、レートをスロットリングすることによってパケットドロップを防ぐことを試み、したがって、リモートは、もう一度スロースタートする必要が絶対にないが、外部インターネットであることは、実際には良好に動作しない!。パケットドロップの直前にOTTestを知ることは非常にむずかしく、この故に、上記の段落4は、下の段落4によって置換されなければならず、下の段落4は、現在、パケットロスイベントの際にできる限り早くリモート送信レートを復元することに単純に集中する、すなわち、我々は、再送信されたパケットを検出した際にセンダベースドの「スプーフィング」に似てリモート送信レートを即座に復元できる場合に、パケットドロップがリモートでのスロースタートを引き起こすかどうかをもはや気にしない)。
4.リモートセンダパケット「保留中」再送信は、到着するSeq No>次の期待されるSeq No且つ欠けているギャップSeq No(1つ又は複数)が受信されずに300msが経過した時に、ソフトウェアによって必ず検出される(すなわち、今や、ギャップパケットが失われたと安全に仮定することができ、リモートセンダは、現在、スロースタートがRFCの1秒最小シーリングの満了で保留中の状態で再送信し終えるはずである) → しかし、我々のMSTCPは、リモートにもう一度スロースタートに入って/入らずに高速再送信させる3つの順序はずれのSeq Noパケットの受信時に、3つのDUP ACKをそれ自体で既に生成するはずである(リモートセンダが、単に、送信するたまたま2つの順序はずれのSeq Noだけを有し、それ以外は有しない場合に、これが、ものごとを混乱させてはならない。というのは、リモートがこの時に多くを送信しようとしていないので、我々は、単純に、リモートがスロースタートすることを許容することができるからである) → 我々は、ACK Noに未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、次の期待されるSeq Noが前に最後に受信されたパケットから300ms以内に到着しないことをソフトウェア内で検出すると同時に、3つのDUP ACK内で1800バイトのウィンドウ更新を伝える(センダの「ポーズ」+1パケットと同等)ことだけを必要とする:ここで、我々は、3つのDUP ACKがやはりリモートによって戻ってACKされることを期待し、例えば3*OTTest(min)が戻りACKを受信せずに経過する場合にそのたびに1800バイトだけ増分された1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けなければならないが、戻りACK又は通常のデータパケットが次に受信される場合には(OTT時間に関わりなく)、前のウィンドウサイズを復元する3つのDUP ACKウィンドウ更新を送信する。
(ここで、我々は、レシーバウィンドウサイズを更新するために、早期にパケットドロップを検出するだけであり、これは、センダベースの「ポーズ」+1パケットと同等である)。
5.リモートに高速再送信させる実際のDUP ACKは、すべてがMSTCP自体によって処理される。ソフトウェアは、インターセプトされたMSTCPの2つの追加のDUP ACK(より以前に通常に肯定応答されたものを含める場合には全部で3つ)を検出して、その後、Divisional ACK/DUP ACK/Optimistic ACK技法を介してリモートCWNDを即座に復元することだけを必要とする。http://arstechnica.com/reviews/2q00/networking/networking−3.html及びhttp://www.usenix.org/events/usits99/summaries/を参照されたい。
(ここで、我々は、MSTCPが2つの追加のDUP ACKを送信する際に、センダベースド「スプーフ」ACKに似たことを行っている)
注: シナリオBは、「ACKing the ACK」が受信されるまで、又は次の通常のデータパケットが受信される(すなわち、ボトルネックが、現在はすべてのリモート送信されたパケットを捨ててはいない)まで同一の3つのDUP ACKを100msおきに送信し続けることによって世話される:「ACKing the ACK」又は次の通常のデータパケットがリモートから受信された時には、我々は、「ACKing the ACK」が受信されるまで、100msおきに、アドバタイズされたウィンドウサイズを復元する3つのDUP ACKを送信し続ける。
注: シナリオBは、「ACKing the ACK」が受信されるまで、又は次の通常のデータパケットが受信される(すなわち、ボトルネックが、現在はすべてのリモート送信されたパケットを捨ててはいない)まで同一の3つのDUP ACKを100msおきに送信し続けることによって世話される:「ACKing the ACK」又は次の通常のデータパケットがリモートから受信された時には、我々は、「ACKing the ACK」が受信されるまで、100msおきに、アドバタイズされたウィンドウサイズを復元する3つのDUP ACKを送信し続ける。
次の場合に、
MSTCPは、必ず、すべての順序はずれのACK(すなわち、まだ送信されていないセグメントを肯定応答するACK)を肯定応答し、さもなければ、ACK Noフィールドのすべてに同一の期待されるSeq番号がセットされている場合に3つのDUP ACKのSeq Noフィールドを含める必要があるはずである(注:DUP Seq Numberパケットは、RFCでは必ずACKされる!?)。
MSTCPは、必ず、すべての順序はずれのACK(すなわち、まだ送信されていないセグメントを肯定応答するACK)を肯定応答し、さもなければ、ACK Noフィールドのすべてに同一の期待されるSeq番号がセットされている場合に3つのDUP ACKのSeq Noフィールドを含める必要があるはずである(注:DUP Seq Numberパケットは、RFCでは必ずACKされる!?)。
我々は、ACK Noフィールドのすべてに同一の次の期待されるSeq番号がセットされたDUP ACK内の100個の以前のSeq Numberフィールド(すなわち、「記録された」次の期待されるACK−100)を回転式に使用するという前に述べた方法を使用してもよく、その結果、DUP ACKは、今や、それぞれ、異なるSeq Noフィールドに、記録された次の期待されるSeq No−100のいずれかをセットされる(2つのDUP ACKが同一のSeq番号を有することはない)。
注:まだ未送信のセグメントの3つのDUP ACKが、必ずしも、リモートMSTCPによるCWND半分化をトリガせず、SSTHRESHに現在のCWNDの半分をセットしない(パケットは、送信済みであるが捨てられている(この場合には、確かにCWNDを半分にして高速再送信を行う)か、まだ送信されていない(この場合には、不必要にCWNDを半分にして高速再送信を行っても行わなくてもよい)かのいずれかである可能性がある)とも仮定され、さもなければ、わずかに不必要な性能減損がある。
輻輳表示としてパケット到着間(Inter−packet−arrival)遅延を使用する方法
この本体の説明で以前に説明した方法、サブコンポーネント方法のどれにおいても、輻輳表示又はパケットドロップ表示を、その代わりに、変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などによって、パケット到着間の間の遅延、例えば、具体的には、直接に連続するパケットの間の「経過タインインターバル」が、リモート送信ソースTCP又はリモートレシーバTCPから受信された最後のパケット(純ACK又は通常のデータパケット...などのいずれか)以降に、あるユーザ入力インターバル(又は、RTTest、OTTest、RTTest(min)、OTTest(min)...などに基づくものとすることができるあるアルゴリズムから導出される)を超える時を観察することによって、検出し/推論することができる。ここで、各端が同時に送信でき、受信できる対称の間のTCP接続に留意されたく、一端が送信したデータセグメント/データパケット及びそれらに対応する他端からの戻り応答ACK(以下ではサブフローAと称する)を、他端が独立に送信したデータセグメント/データパケット及びそれらの独立の対応する他端からの戻り応答ACK(以下ではサブフローBと称する)と混合することができる:したがって、変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、上記のパケット到着間の遅延を観察する時に、サブフローA及び/又はサブフローBのパケット到着間を完全に独立に「見分け」、別々に観察しなければならない → その結果、一端のすなわちサブフローAの送信データセグメント/データパケットが他端への前方の経路に沿って捨てられ、これによってそれに対応する戻り応答ACKが他端から戻り経路に沿って返されない時に、独立に、戻り経路に沿って到着する他端のすなわちサブフローBの送信データセグメント/データパケットは(存在する場合に)、この端に、今や、独立のサブフローAの「経過時間インターバル」がまだ満了していないと誤って仮定させなくなる。一端の変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、センダとして働く時に、「経過時間インターバル」満了についてパケット到着間遅延についてそれ自体のサブフローAの対応する戻り応答ACKだけを観察し、他端の独立のサブフローの送信セグメント/パケットを無視するはずである。一端の変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、レシーバとして働く時に、「経過時間インターバル」満了についてパケット到着間遅延について他端自体のサブフローBの着信セグメント/パケットを観察するだけであり、この端自体の独立のサブフローAの(存在する場合に)対応する到着する返される応答ACKストリームを無視する。このタスクは、十分に単純でなければならない:一端は、センダベースドとして働く時には、「経過時間インターバル」満了について「インターパケットインターバル」遅延についてそれ自体の送信パケットの対応する着信戻り応答ACKを監視することだけを必要とするが、レシーバベースドとして働く時には、他端の送信データセグメント/データパケットを監視することだけを必要とするはずである:さらに、その「インターパケットインターバル」遅延が今や「経過時間インターバル」満了した他端からの、この端の独立サブフローの送信パケットの対応する戻り応答ACKの「経過時間インターバル」満了の前に、他端の独立のサブフローの送信パケットが到着し続ける場合には、これは、それ相応に反応するために、他端からこの端への一方向経路が「UP」であることと、この端から他端への一方向経路が「DOWN」であることとの追加の確かな表示/確かな推論を提供するはずである。これは、例えば、RTTest又はOTTest又はRTTest(min)又はOTTest(min)...などよりはるかに小さい「経過時間インターバル」を指定でき、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベントを検出でき/推論できることによるはるかにより高速のレートの応答時間を可能にするという利益を有する(非輻輳RTT、OTTなどでさえ、インターネット上で数百ミリ秒になる可能性があり、確認できず、あるいは、その最大限界が、前もって確認できないが、パケットの最後の受信からの上記の経過時間インターバルは、数百ミリ秒ではなく例えば50msもの小さい値になるように選択することができる)。
この本体の説明で以前に説明した方法、サブコンポーネント方法のどれにおいても、輻輳表示又はパケットドロップ表示を、その代わりに、変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などによって、パケット到着間の間の遅延、例えば、具体的には、直接に連続するパケットの間の「経過タインインターバル」が、リモート送信ソースTCP又はリモートレシーバTCPから受信された最後のパケット(純ACK又は通常のデータパケット...などのいずれか)以降に、あるユーザ入力インターバル(又は、RTTest、OTTest、RTTest(min)、OTTest(min)...などに基づくものとすることができるあるアルゴリズムから導出される)を超える時を観察することによって、検出し/推論することができる。ここで、各端が同時に送信でき、受信できる対称の間のTCP接続に留意されたく、一端が送信したデータセグメント/データパケット及びそれらに対応する他端からの戻り応答ACK(以下ではサブフローAと称する)を、他端が独立に送信したデータセグメント/データパケット及びそれらの独立の対応する他端からの戻り応答ACK(以下ではサブフローBと称する)と混合することができる:したがって、変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、上記のパケット到着間の遅延を観察する時に、サブフローA及び/又はサブフローBのパケット到着間を完全に独立に「見分け」、別々に観察しなければならない → その結果、一端のすなわちサブフローAの送信データセグメント/データパケットが他端への前方の経路に沿って捨てられ、これによってそれに対応する戻り応答ACKが他端から戻り経路に沿って返されない時に、独立に、戻り経路に沿って到着する他端のすなわちサブフローBの送信データセグメント/データパケットは(存在する場合に)、この端に、今や、独立のサブフローAの「経過時間インターバル」がまだ満了していないと誤って仮定させなくなる。一端の変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、センダとして働く時に、「経過時間インターバル」満了についてパケット到着間遅延についてそれ自体のサブフローAの対応する戻り応答ACKだけを観察し、他端の独立のサブフローの送信セグメント/パケットを無視するはずである。一端の変更されたTCP/変更されたモニタソフトウェア/変更されたプロキシ/変更されたポートフォワーダ...などは、レシーバとして働く時に、「経過時間インターバル」満了についてパケット到着間遅延について他端自体のサブフローBの着信セグメント/パケットを観察するだけであり、この端自体の独立のサブフローAの(存在する場合に)対応する到着する返される応答ACKストリームを無視する。このタスクは、十分に単純でなければならない:一端は、センダベースドとして働く時には、「経過時間インターバル」満了について「インターパケットインターバル」遅延についてそれ自体の送信パケットの対応する着信戻り応答ACKを監視することだけを必要とするが、レシーバベースドとして働く時には、他端の送信データセグメント/データパケットを監視することだけを必要とするはずである:さらに、その「インターパケットインターバル」遅延が今や「経過時間インターバル」満了した他端からの、この端の独立サブフローの送信パケットの対応する戻り応答ACKの「経過時間インターバル」満了の前に、他端の独立のサブフローの送信パケットが到着し続ける場合には、これは、それ相応に反応するために、他端からこの端への一方向経路が「UP」であることと、この端から他端への一方向経路が「DOWN」であることとの追加の確かな表示/確かな推論を提供するはずである。これは、例えば、RTTest又はOTTest又はRTTest(min)又はOTTest(min)...などよりはるかに小さい「経過時間インターバル」を指定でき、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベントを検出でき/推論できることによるはるかにより高速のレートの応答時間を可能にするという利益を有する(非輻輳RTT、OTTなどでさえ、インターネット上で数百ミリ秒になる可能性があり、確認できず、あるいは、その最大限界が、前もって確認できないが、パケットの最後の受信からの上記の経過時間インターバルは、数百ミリ秒ではなく例えば50msもの小さい値になるように選択することができる)。
例えばftp/httpウェブサイトダウンロード中に、通常のデータパケットは、RTOパケット再送信がCWNDを1又はセグメントサイズにリセットされたスロースタートに再入することによって中断されない時に、継続的に送信される。この場合のパケットによってトラバースされる経路の最低帯域幅リンクが、送信するソースTCPのファーストマイルの最低帯域幅リンク、例えば500Kbs DSLであると仮定すると、単一のパケットが送信するソースからDSL伝送媒体に完全に出るための送信時間遅延は、この場合には重要な要因ではないはずであり、小さく、例えば、大きい1500バイトイーサネットサイズを有するパケットについて24msである(1500*8/500000=24ms)。一方、ラストマイルの56Kbsモデムダイヤルアップについて、通常の500バイトパケットの送信遅延時間は、約71msになるはずである(500*8/56000=71ms)。今日のインターネットでは、パケットによってトラバースされる経路に沿った最低の可能な帯域幅のリンクは、ワーストケースシナリオで56Kbsになるはずである。デフォルトパケットサイズは、通常は接続確立中にTCPによってネゴシエートされるとおり、通常は約500バイトである。「パケット到着間」法(及び/又は「同期化」パケット法、後のセクションを参照されたい)は、この経路に沿った56kbs最低帯域幅リンクの仮定及びネゴシエートされた最大パケットサイズに基づく「経過時間インターバル」値セッティング及び「同期化」インターバル値セッティングから開始し、その後、通常のデータパケットの間(又は実際に送信されたデータパケットに関するACKの間)の受信されたパケット到着間インターバルの実際に観察された最新の最小値を監視し続けて、「経過時間インターバル」値セッティング及び「同期化」インターバル値セッティングを動的に調整することができ、例えば、最新の最小「パケット到着間」インターバルが、現在は20msに過ぎない場合に、「経過時間インターバル」値に現在は例えば80msをセットすることができ、「同期化」インターバル値に現在は例えば40msをセットすることができ...などであり、あるいは、考案されるアルゴリズムに基づいて導出することができる。データパケットが送信するソースTCPから継続的に送信され、レシーバTCPで受信される時のパケット間間隔は、トラバースされたリンクがさまざまな遅延及び/又はバッファ遅延を導入した場合であっても、それぞれ24ms又は71ms前後を中心とする上と同一のパケット到着間間隔と、ノードがストアアンドフォワードスイッチング(ストアアンドフォワードと比較して、各ノードで出会う単一パケット送信時間遅延を表すはずのカットスルースイッチングではなく)を使用する場合にトラバースされる経路に沿った各ノードで出会う単一パケット送信時間遅延に起因するインターバルの総量との合計を示さなければならない。というのは、これが、バッファ遅延がもちろん続く次のパケットに前のパケットからの余分の例えば200msを非常に突然に即座に追加せず(すなわち、追加のバッファ遅延は各連続する続くパケットに連続的に徐々に追加されるはずである)パケットがルートに沿って捨てられず/失われない(そうである場合には、これは、この続くパケットに直前の送信されたパケットからの「無限の」遅延を追加し、この続くパケットは捨てられ/失われる可能性がある)と仮定すると、データパケットに均一に影響し、これらのデータパケットは、それぞれ上記の24ms又は71ms付近を中心として離隔されてレシーバに到着するからである(我々は、この輻輳イベント及び/又はパケットロスイベント及び/又は物理送信エラーイベントを、パケット間遅延が現在突然にある値、例えば100msを超えることすなわち、最後のパケットが受信されてから100msであることすなわち、100msが直接に続くパケットすなわち正しい次の期待されるシーケンス番号を有するパケットを受信せずに経過したことを観察することによって検出し/推論することができる:しかし、他の後の続くパケットをこの100ms以内に受信でき、且つ、この特定の直接に続くパケットが受信されない場合であっても、我々は、望まれる場合に、同様に、これを「ギャップ」輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベントとみなし、同様の又はわずかに異なる形で処理することができる)。
ノードがストアアンドフォワードスイッチング(ストアアンドフォワードと比較して、各ノードで出会う単一パケット送信時間遅延を表すはずのカットスルースイッチングではなく)を使用する場合にトラバースされる経路に沿った各ノードで出会う単一パケット送信時間遅延に起因するインターバルの総量は、トラバースされる経路に沿ったノードが高帯域幅容量リンクである場合(カットスルースイッチングではなくストアアンドフォワードスイッチングが使用される場合であっても)の2〜3ミリ秒から、トラバースされるリンクが低帯域幅容量である場合の数十又は2〜3百ミリ秒まで変化し得る。例えば、500Kbsファーストマイル、10Mbsの次のリンク、100Mbsの次のリンク、10Mbsの次のリンク、及び500Kbs DSLの最後のレシーバラストマイルリンクに関して、ここではトラバースされるノードのそれぞれでの輻輳バッファ遅延が全くないと仮定されるカットスルースイッチングと比較してすべてがストアアンドフォワードスイッチングを実施するノードを有する転送するリンクの各連続するステージで単一の1500バイトサイズパケットが出会う総送信完了時間遅延は、約24ms+1.2ms+0.12ms+1.2ms+24ms=50.52msになるはずである、すなわち、最終的にデスティネーションで受信される時に、パケット到着間インターバルは、直接に連続するパケットの間で50.52ms付近を中心とするはずである。一方、56Kbsファーストマイルモデムリンク、10Mbsの次のリンク、100Mbsの次のリンク、10Mbsの次のリンク、及び最後に56Kbsレシーバラストマイルモデムリンクに関して、ここではトラバースされるノードのそれぞれで輻輳バッファ遅延が全くないと仮定されるカットスルースイッチングと比較してすべてがストアアンドフォワードスイッチングを実施するノードを有する転送するリンクの各連続するステージで単一の500バイトサイズパケットが出会う総送信完了時間遅延は、約71ms+0.4ms+0.04ms+0.4ms+71ms=142.84msになるはずである、すなわち、最終的にデスティネーションで受信される時に、パケット到着間インターバルは、直接に連続するパケットの間で50.52ms付近を中心とするはずである。パケットがソースからデスティネーションに最終的に到着する時間を増やし、はるかに後に送信されたパケット(すなわち、参照される、より以前に送信されたパケットに直接に続く次のパケットではなく、例えば数秒又は数十秒をまたぐ)がデスティネーションレシーバに実際に到着するのに、はるかにより以前の参照される送信されたパケットより例えば300ms長い時間を要するようにさせる場合がある任意の輻輳バッファ遅延は、トラバースされるノードで出会う累積輻輳バッファ遅延によって引き起こしたが、しかし、任意の2つの直接に連続する次の送信パケットと直前の送信パケットとの間で、直前の送信パケットと比較して直接に続く次のパケットが出会う「余分の」増加した累積輻輳バッファ遅延は、例えば3msに過ぎない、すなわち、離れた数秒にまたがる2つの離れた送信パケットの間の、上記の例えば300msより数桁非常にはるかに小さい可能性があるので(ここでは輻輳レベルが高まりつつあると仮定するが、同一の論法が、輻輳レベルが下がりつつある場合に同様にあてはまる)。この「余分」の追加の輻輳バッファ遅延は、直接に続く次のパケットとその直前の送信パケットとの間と同様に小さいはずであり、直接に続く次のパケットとその直前の対応物との任意の後続の対の間で徐々に増加するだけであるはずである。直接に続く次のパケットとその直前の対応物との任意の後続の対の間の、この可能な余分の少ない量の輻輳バッファ遅延は、輻輳レベルが安定し/直接に隣接するその後に送信される対の他の後続対の間で均等に平滑化される場合には小さく、均等に中和されるけれども、しかし、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベントを検出し/推論するために、センダソースTCPから次の/直接に次のパケットを受信していない時に経過時間期間値を選択し/導出する時に考慮しなければならない/考慮することができる。しかし、非常に希な場合に、輻輳レベルは、例えば着信リンクが100Mbs且つ発信リンクがわずか10Mbs...などである時などに、短い期間、例えば100ms以内に例えば200msのバッファ遅延を突然に築き上げることができ(不可能ではない)、その場合に、我々は、ここで、便利に、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベントに加えて、この非常に希な非常に突然の輻輳バッファ遅延イベントを検出し/推論するために、経過時間インターバルを考慮するシナリオを含めることができる。直接に続く次のパケットとその直前の対応物との任意の後の後続のさらなる送信される対の間と同様に、この突然の非常に希な輻輳レベル増加は、今はもう、突然の輻輳増加が安定し/直接に隣接する後に送信される対の他の後続のさらなる送信される対の間で均等に平滑化される時に、「経過時間インターバル」に均等に中和されて満了させることをしなくなるはずであることに留意されたい。
TCP接続が全二重である、すなわち、接続の両端のそれぞれが、同時にセンダソースTCP及びレシーバTCPとして送信し、且つ受信していることができることに留意されたい。例えばftpファイルダウンロード/httpウェブページダウンロード...など、接続の1つの端だけが、通常のデータパケットの送信のほとんどすべて又はすべてを行っている場合であっても、受信端TCPは、必ず、受信された通常のデータパケットに応答して、通常のデータパケットの送信のほとんどすべて又はすべてを行っている端のTCPに向けて肯定応答を送り返しているはずである。この故に、上記の前述の段落で概要を示した「経過時間インターバル」法は、「経過時間インターバル」が、ダウンロードを受信している他端のTCPから純ACKパケット及び/又はピギーバックACKパケットを受信せずに満了する際に、通常のデータパケットの送信のほとんどすべて又はすべてを行っている端のTCPが、今や、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベント及び/又は「非常に希な」「非常に突然の」輻輳レベル増加イベントの検出を推論でき、それ相応に反応できるという点で、通常のデータパケットの送信のほとんどすべて又はすべてを行っている端のTCPに同様に適用される。しかし、この場合に、レシーバ端TCPが、Delayed Acknowledgement(1つおきのパケット又は200ms満了のどちらが先であれ、それが発生した時に生成されるACK)を実施し、このDelayed ACKオプションが、特定のフローごとのTCP接続についてアクティブ化される時に、選択されるかアルゴリズム的に導出される「経過時間インターバル」値のセッティングにおいて、Delayed ACK機構によって導入される可能な追加の200ms遅延を含めるために考慮を払わなければならず、例えば、Delayed ACKの場合に、「経過時間インターバル」は、200msを加算されなければならず、あるいは、任意選択として、「経過時間インターバル」に200msを加算するのではなく、その代わりに、この出会ったワーストケースの200ms遅延イベントを、「経過時間インターバル」満了時に推論可能な/検出されるさまざまなイベントの間に含める。このイベントは、希であり、例えばレシーバ端TCPへのパケットのセンダソースTCP送信によどみがある時などに発生するはずであり、したがって、ワーストケースDelayed ACKシナリオに起因してスループット性能に大きくは影響しないはずである。
次のパケットを受信せずに「経過時間インターバル」が満了する時の上記のイベントの検出/推論の際に(ここで、我々は、情報を一切必要とせず、任意選択でRTT、OTT...などの使用を全く必要とせず、ヒストリカルRTT値に基づくRTO計算を必要とせず(その代わりに、実際のパケット再送信タイムアウトを、例えばあるユーザ入力値又は例えばヒストリカルパケット到着間インターバル値...などに基づくアルゴリズムから導出される値に基づいて、トリガすることができる)、任意選択として、そのような要件を、今は要件に対する冗長な余りなので、変更されたTCPから除去することができることに留意されたい)、変更されたTCP/変更されたソフトウェアモニタ/変更されたプロキシ/変更されたIPフォワーダ/変更されたファイヤウォール...などは、本説明における先の方法/サブコンポーネント方法で記述した、CWND減少/レート減少と同時の既存の結合された実際のパケット再送信、及び/又は実際のパケット再送信だけが付随しない変更された分離されたCWND減少/レート減少、及び/又は付随するCWND減少/レート減少を伴う又は伴わないさまざまな変更された「ポーズ」法...などに進むことができる。上記のプロセスが、「パケット間インターバル」遅延の「経過時間インターバル」が満了した時にトリガされたならば、その後に、送信するソースTCPからの同一サブフローから次に到着する到着するパケットの際に、そのトリガされたプロセスを、即座に又は任意選択としてある定義されたインターバルの後にのいずれかに終了することができ、CWNDサイズ/レートリミットを、「経過時間インターバル」が満了する前の以前の値に任意選択で復元することができ、且つ/又は、任意選択で、進行中の「ポーズ」を「アンポーズ」すること...などができる。このパケットの到着は、今や、センダソースTCPからレシーバTCPへの経路が、現在、すべてのパケットを捨てる完全な輻輳ではないことを示す:任意選択として、我々は、さらに、通常のデータが、正しい次の期待されるシーケンス番号を有するまさに次の期待されるパケットでなければならない場合に、及び/又は純ACKパケットが、そのSequence Numberフィールド=センダソースTCPからレシーバTCPに受信された最後に受信された有効なシーケンス番号(又は、レシーバTCPからセンダソースTCPに送信された最新の最大の有効な肯定応答番号−1)を有しなければならない場合に、この到着するパケットを要求することができる。
同様に、変更されたTCP/変更されたソフトウェアモニタ/変更されたプロキシ/変更されたIPフォワーダ/変更されたファイヤウォール...などは、任意選択として及び/又はさらに、この本体の説明の以前の方法/サブコンポーネント方法で説明した、CWND減少/レート減少と同時の既存の結合された実際のパケット再送信、及び/又は実際のパケット再送信の付随だけが伴わない変更された分離されたCWND減少/レート減少、及び/又は付随するCWND減少/レート減少を伴う又は伴わないさまざまな変更された「ポーズ」法...などを他端のTCPに実行させることに進むことができる。あるいは、変更されたTCP/変更されたソフトウェアモニタ/変更されたプロキシ/変更されたIPフォワーダ/変更されたファイヤウォール...などは、任意選択として及び/又はさらに、その後、本説明における先の方法/サブコンポーネント方法で記述した、CWND減少/レート減少と同時の既存の結合された実際のパケット再送信、及び/又は実際のパケット再送信の付随だけが伴わない変更された分離されたCWND減少/レート減少、及び/又は付随するCWND減少/レート減少を伴う又は伴わないさまざまな変更された「ポーズ」法...などを他端のTCPに実行させる(ローカルTCPにそれを全く行わせずに!。そのような機能は、例えば、通常のデータパケット送信のほとんどすべて又はすべてを行う他端のTCPが、既存の未変更の標準TCPである時に有用であるはずである)ことに進むことだけができる。上記のプロセスが、「経過時間インターバル」が満了した時にトリガされたならば、他端のTCPからの同一のサブフローから到着する到着するパケットの際に、上記のトリガされたプロセスを、即座に又は任意選択としてある定義されたインターバルの後にのいずれかに終了することができ、CWNDサイズ/レートリミットを、「経過時間インターバル」が満了する前の以前の値に任意選択で復元することができ、且つ/又は、任意選択で、進行中の「ポーズ」を「アンポーズ」すること...などができる。他端のTCPが、既存の未変更のTCPであるか、まだそのような機構を可能にするために特に変更されてはいない場合に、他端のTCPに、リモートTCP/リモートアプリケーション/リモートプロセスのために、あるプロトコルコマンドを介して直接に、その他端のTCPの内部CWNDサイズ/送信レートを変更させることは、たやすく実現できない。しかし、他端のTCPが、既存の未変更のTCPであるか、まだそのような機構を可能にするために特に変更されてはいない場合であっても、他端のTCPに、この本体の説明のさまざまな以前の方法/サブコンポーネント方法で概要を示したように、「ポーズ」させ、且つ/又は「アンポーズ」させ、且つ/又は「ポーズ」するが定義された最大個数のバイト/パケットの送信を可能にさせる...ことなどはたやすく実現でき、例えば、他端のTCPでさまざまな「ポーズ」を引き起こすための「0」バイト及び/又は「1600バイト」...などのレシーバウィンドウサイズ更新パケットの送信、他端のTCPを「アンポーズ」させ/その通常動作を復元するための「トリガされた」イベントの前の以前のサイズのレシーバウィンドウサイズ更新パケットの送信...などがたやすく可能である(外部インターネットを介して働くためのTCP変更の実施に関する以前のセクションをも参照されたい)。
独立に及び/又は任意選択として、前述のさまざまな方法、例えば「経過時間インターバル」法に加えて、既存の又は先に説明したTCP/モニタソフトウェア/TCPプロキシ/IPフォワーダ/ファイヤウォール...などを、変更し/さらに変更して、TCP接続の両方の変更された端のそれぞれが、他方の変更された端への「同期化」データパケットを自動的に生成する(又は、単にTCP接続の一方の変更された端が、他方の未変更の又は変更された端への「同期化」データパケットを自動的に生成する)ことを保証することができ、例えば、同一サブフローの単一パケットが他端のTCPに向けて送信されずに「同期化」インターバルが満了する時に必ず、「同期化する」パケットを生成し、他端のTCPに送信することによって、必要な場合に少なくともすべての「同期化する」インターバル期間に他端の変更されたTCPに向けて送信される1つのパケットが必ずあることが保証される(例えば、「経過時間インターバル」選択された値の半分、又は、単一のパケットが伝送媒体に完全に出るためのパケットのトラバースした経路の最低帯域幅リンクの送信時間遅延*被乗数のうちの大きい方:ここでの「経過時間インターバル」値が、必ず上記の「同期化」値より大きくなければならないことに留意されたい)。したがって、両端が、変更され、それぞれが、他方の変更された端に「同期化」パケットを送信する場合に、両方の変更された端のTCPの各端は、サブフローの「経過時間インターバル」が満了し、且つ、同一サブフローからのどのタイプのパケットも(サブフローの生成された「同期化」パケットタイプを含む)他端のTCPから受信されていない時に、他端からローカル端TCPへの一方向経路が、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベント及び/又は非常に希な非常に突然の輻輳レベル増加イベント(しかし、ここでは希な200ms Delayed ACKイベントを含まない:さらに、両端のうちの一方だけが、変更され、他方の未変更の端のTCPに例えば他方の未変更の端のTCPから戻る戻り応答ACKを誘発する通常ウィンドウの外のDUP Sequence Numberパケットの形で「同期化パケット」を送信する場合に、ローカルの変更された端のTCPは、ローカルの変更された端のTCPと他方の未変更の端のTCPとの間の転送する経路又は戻る経路のいずれかが(どちらであるかは確かには知らない)、輻輳イベント及び/又はパケットドロップイベント及び/又は物理送信エラーイベント及び/又は非常に希な非常に突然の輻輳レベル増加イベント(しかし、ここでは希な200ms Delayed ACKイベントを含まない)に出会っていることを即座に知り/推論し/検出することだけができるはずである)に出会っていることを即座に知り/推論し/検出するはずである。一端から他端へ及び/又は他端からこの端への一方向経路がこの時に確かに「UP」又は確かに「DOWN」であることのこの追加の確かな検出/確かな推論は、それ相応によりよく反応するのに有用であるはずである。これは、戻り一方向経路がたまたま「DOWN」である場合に、進む一方向経路が「UP」又は「DOWN」であるかどうかを知るすべが全くないことに留意すれば、実用的に有用に利用されてもされなくてもよい。また、失われた/捨てられたが、例えば他のより後の順序はずれの物理的に到着するパケットが「経過時間インターバル」内に到着することに起因して、パケット到着間(物理的に到着するパケットの)遅延「経過時間期間」を満了させなかった、すべての欠けている「ギャップ」パケットは、通常は、通常の3つのDUP ACK高速再送信機構を介して世話されるはずであり:代替案で、パケット到着間遅延「経過時間インターバル」機構が、その代わりに、隣接した順序通りの先行送信パケット(パケットのシーケンス番号による順序付けによるなど...)の到着時刻から「経過時間インターバル」以内に受信されない場合に、すべての欠けている「ギャップ」パケットが「経過タイムアウト」満了をトリガしなければならないと主張することができる...などであることに留意されたい。
サブフローのパケット到着間遅延「経過時間インターバル」が満了し、同一サブフローからのすべてのタイプのパケット(しかし、そのサブフローの生成された「同期化」パケットタイプ又は適用可能な場合にそのサブフローの対応する戻り応答ACKを除く)が発生していない時に、ローカル端の変更されたTCPは、この本体の説明の以前の方法/サブコンポーネント方法で説明した、CDNW減少/レート減少と同時の既存の結合された実際のパケット再送信、及び/又は実際のパケット再送信が付随しない変更された分離されたCWND減少/レート減少だけ、及び/又は付随するCWND減少/レート減少を伴う又は伴わないさまざまな変更された「ポーズ」法...などを、即座にトリガし、ローカル端の変更されたTCPにこれらを行わせる(及び/又は任意選択として他端のTCPにこれらを「リモートに」行わせる)か、あるいは、同一サブフローからのすべてのタイプの最後の/最新のパケット(しかし、そのサブフローの生成された「同期化」パケットタイプ又は適用可能な場合にそのサブフローの対応する戻り応答ACKを除く)が他端の変更されたTCPから受信され(及び、同一サブフローからのすべてのタイプの後続の新しい介在する到着するパケット(しかし、そのサブフローの生成された「同期化」パケットタイプ又は適用可能な場合にそのサブフローの対応する戻り応答ACKを除く)が他端の変更されたTCPからこの例えば250ms時間中に受信されることなく)...など且つ/又は同一サブフローのパケットの現在の有効ウィンドウ分全体が送信済みであり、まだパケットのどれもが肯定応答し返されていない時以降のさらなるある期間、例えば250ms(ユーザ入力値又はRTTest、OTTest、RTTest(min)、OTTest(max)...などの要因を含むアルゴリズムに基づくある導出された値)が過ぎた後に限ってそれを行うか、のいずれかを行うことができる。
両端が、「パケット到着間」法及び「同期化」パケット法を実施する場合に、他方の変更された端のTCPに送信される「同期化」パケットは、例えば、他の受信する変更された端のTCPが戻る応答ACKを生成することを誘発することを必要とせずに、例えばソースIPアドレスポート番号及び/又はデスティネーションIPアドレスポート番号を含む、データフィールド部分又は挿入される「パディング」フィールド部分内の特殊な固定長一意識別...など、「同期化」パケットとしてそのようなパケットを一意に識別する適切な識別と一緒に、特定のフローごとのTCP接続と同一のソースIPアドレスポート番号と、同一のデスティネーションIPアドレス及びポート番号とを有する生成されたパケットの形とすることができる。端の一方だけが変更され、他端が未変更である場合に(しかし、両端が変更される場合であっても適用可能である)、変更された端によって他方の未変更の端に向けて送信される時の「同期化」パケットは、例えば、受信する未変更の端からの戻り応答ACKを誘発しないウィンドウ内でない複製されたSequence Numberフィールドと一緒に、特定のフローごとのTCP接続と同一のソースIPアドレスポート番号と、同一のデスティネーションIPアドレス及びポート番号とを有する生成されたパケットなど、受信する未変更の端からの戻り応答ACKを誘発するパケットの形である必要がある(例えば、受信するTCPが必ず「何もしない」戻りACKを生成するウィンドウ内でない順序はずれSeq Noパケットの送信など。インターネットニュースグループトピック「Acking out of Order packet」http://groups−beta.google.com/group/comp.protocols.tcp−ip 1 Phil Karn1988年3月2日、2 CERF1988年3月2日.....、及びGoogle Search用語「ACKing the ACK」を参照されたい。単一のDUP ACKの送信が高速再送信を引き起こさないことにも留意されたい。あるいは、その代わりに、例えば順序はずれACKの送信など。Google Search用語「out of order ACK」、「eliciting an ACK」、「DUP Sequence Number ACK」、「ACK for unsent data」、「unexpected ACK」....などを参照されたい)。他方の未変更の端からの誘発された返される応答ACKは、単純に、そのACKフィールド値を、変更された端から他方の未変更の端によって受信される次の期待されるSeq番号になるようにセットされるはずであり、この戻り応答ACKの受信時に、変更された端は、この、次の期待されるシーケンス番号のデータセグメントがまだ送信されていないので、この返された応答ACKを単に破棄し、無視するはずである。この、次に期待されるシーケンス番号のデータセグメントが、返される応答ACKが受信される前のまさにその瞬間に実際に送信された、非常に希な「滅多にない」シナリオでは、変更された端は、今や、すべてがまさに同一のACK番号を有する3つの戻り応答DUP ACKを受信した時及びその後に「不必要に」高速再送信するだけであり、これは、やはり、非常に非常に可能性が低い。というのは、最初の返される応答ACK及び/又は後続の続く送信されたデータセグメントを受信する前のまさにその瞬間に実際に送信されるデータセグメントは、今や、他方の未変更の端の次の期待されるシーケンス番号を増分し、次の戻り応答ACKが今や異なるより大きい増分されたACK Numberフィールド値を担持するようにするはずであるからである。
上記の直前の段落は、主に、両端のTCPが他端のTCPへの「同期化する」パケットの送信を実施する場合のシナリオを説明した。これは、各端のTCPが、他端のTCPから同一サブフローのいかなるパケット(同一サブフローに関する生成された「同期化」パケットを含む)も受信せずに「経過時間インターバル」が満了する時に、必ず、他端のTCPからローカル端のTCPへの一方向経路が輻輳し及び/又はパケットドロップ及び/又は物理送信エラー及び/又は非常に希な非常に突然の輻輳レベル増加である(しかし、この場合には「同期化する」パケット機構が実施されているので、200ms Delayed ACK機構は現在は原因ではない)ことを確かに確かめ/確かに推論できることを可能にする。より完全な組合せシナリオは、下記を含む(両端の変更されTCPが、さらに、「同期化する」パケット法を含むと仮定する)。
1.「経過時間インターバル」が、他端の変更されたTCPから同一サブフローのいかなるパケット(そのサブフローの生成された「同期化」パケットタイプの両方を含む)をも受信せずにローカル端の変更されたTCPで満了する時 → 他端の変更されたTCPからローカル端の変更されたTCPへの一方向経路が「DOWN」であると確かに知る/確かに推論する → ローカル端の変更されたTCPは、今、即座にそれ相応に反応し、且つ/又は他端の変更されたTCPにそれ相応に反応させなければならない。
2.他端の変更されたTCPからローカル端の変更されたTCPへの一方向経路が「UP」である、すなわち、連続するパケット(及び/又は「同期化する」パケット)が、「経過時間インターバル」を満了させずに他端の変更されたTCPから受信される時、且つ、期待される肯定応答(ローカル端の変更されたTCPによって送信されたデータパケットに関する)が、ある判断基準(分離されたレート減分タイムアウト、結合されたRTOパケット再送信タイムアウト、「ポーズ」を引き起こす分離されたACKtimeout...など)以内に他端の変更されたTCPから戻って受信されない場合に、ローカル端の変更されたTCPは、今や、ローカル端の変更されたTCPから他端の変更されたTCPへの一方向経路が「DOWN」であることの確かな知識/確かな推論と共に、即座にそれ相応に反応し、且つ/又は他端の変更されたTCPにそれ相応に反応させなければならない。
TCP接続の一端だけが「同期」パケット法を実施する場合に、この状況で、その端の、「同期」パケット法を実施する変更されたTCPに、伝統的に他端の未変更のTCPからの肯定応答応答を誘発する「パケット」の形で他端の未変更のTCPに「同期」パケットを送出させることによって、前述を適合させることができる(例えば、受信するTCPが必ず「何もしない」戻りACKを生成するウィンドウ内でない順序はずれSeq Noパケットの送信など。インターネットニュースグループトピック「Acking out of Order packet」http://groups−beta.google.com/group/comp.protocols.tcp−ip 1 Phil Karn1988年3月2日、2 CERF1988年3月2日.....、及びGoogle Search用語「ACKing the ACK」を参照されたい。単一のDUP ACKの送信が高速再送信を引き起こさないことにも留意されたい。あるいは、その代わりに、例えば順序はずれACKの送信など。Google Search用語「out of order ACK」、「eliciting an ACK」、「DUP Sequence Number ACK」、「ACK for unsent data」、「unexpected ACK」....などを参照されたい)。
「同期化」パケット法は、「経過時間インターバル」値より短いインターバル(例えば「経過時間インターバル」値の半分...など)でローカル端の変更されたTCPから他端のTCP(変更されていようといまいと)に送信される「パケット」が少なくともあることを保証しなければならない。両端が「同期化」パケット法を実施する場合に、両方の変更されたTCPプロトコルは、例えばTCP接続フェーズ中又はその直後...などの、互いの存在の検出、「同期化」インターバルパラメータの合意...などを好ましく可能にすることができる。しかし、この場合に、「経過時間インターバル」満了以内に他端の未変更のTCPからパケットを全く受信しない時に、ローカル端の変更されたTCPは、一方向経路のいずれか(しかし、ローカル端の変更されたTCPから他端の未変更のTCPへ又は他端の未変更のTCPからローカル端の変更されたTCPへのどちらが「DOWN」であるかは確かでない(両端が変更され、「同期化」パケット技法を実施する時と比較されたい)を確かに推論することだけができる。
先の本説明で示したさまざまな方法/サブコンポーネント方法を、例えばACKTimeout時の分離されたレート減分ではなく、「経過時間インターバル」法及び/又は「同期化」パケット法の使用に適合させることができる(すなわち、それ相応に反応するために例えば非輻輳RTT*被乗数以内に受信されない送信されたSeq Noセグメントの肯定応答の監視ではなく、受信されるすべての次のパケットの「経過時間インターバル」がその代わりに監視される)。これは、おそらくはるかにより長い非輻輳RTT*被乗数よりはるかに高速の反応時間(「経過時間インターバル」)を可能にする。
タイムスタンプオプションが選択される場合に、これは、一方向経路遅延の両方の待ち時間(すなわち、RTTest及びRTTest(min)...などだけではなくOTTest及びOTTest(min)...などが導出される)が、それ相応によりよく反応することを可能にするはずである。SACKオプションは、既に順序はずれで受信されているパケットの、より少ない不必要な再送信を可能にするはずである。「同期化」パケット及び/又はより以前の周期的プローブパケット法を、必要な場合に、デスティネーションIPアドレス及びポートと、未変更であるがソースポートに今は異なる未使用のポート番号が割り当てられたソースIPアドレスとを有するTCPごとのフロー(1つ又は複数)の間で確立される新しいTCP接続の形で独立に送信することができる。
注:フローごとのTCPのそれぞれの中の「パケット到着間」(及び/又は任意選択で)「同期」パケット法を、例えば初期Sync/Sync ACKの後でのみ、及び/又は少数nの連続するパケットが他端のTCP(変更されていようといまいと)から受信された後でのみ、及び/又は各他の直前の以前のパケットから「経過時間インターバル」以内にすべてが到着する、少数mの連続するパケットが他端のTCPから受信された後でのみなど、ある判断基準/イベントが満足される時に、フローごとのTCP内で安定するために動作するようにすることができる。「同期化」インターバルが満了し、「同期化」パケットの送信が必要である時に、ローカル端の変更されたTCPは、純「同期化」パケットの代わりに、まだ肯定応答されていない、以前に送信された通常のデータパケット(1つ又は複数)を他端のTCPにその代わりに再送/再送信することができる(これは、他端のTCPから返される肯定応答応答をも誘発するはずである)。
本明細書の1つ又は複数の方法が、ソースセンダ又はレシーバのいずれか1つ(あるいは両方)が外部インターネットに存在する場合にも適用可能になるように我々の変更/発明を拡張するが、この説明本体のさまざまな以前に説明した方法と同様に、両方がインターネットサブセット/WAN/LAN/プロプラエタリインターネット内に存在する場合にも適用できることに留意されたい。
ユーザインターフェースを、本説明のさまざまな先に記述した変更されたTCP/変更されたモニタソフトウェア/変更されたTCPフォワーダ/変更されたIPフォワーダ/変更されたファイヤウォール内に設けて、さまざまなTCPチューニング/レジストリパラメータ(例えば、初期ssthresh、初期RTT、MTU、MSS、Delay ACKオプション、SACKオプション、Timestampオプション...など)のユーザ入力、プロプラエタリLAN/WANサブネットIPアドレス(これらのサブネット内にソースとデスティネーションとの両方を有するパケットトラフィックを、外部インターネットへ/からと比較して「内部トラフィック」として確かめることができるようにするために)とこれらのサブネットアドレスのそれぞれ及びすべての間のACKTimeout及び/又は「経過時間インターバル」及び/又は「ポーズ−インターバル」及び/又は「同期化」インターバルとのユーザ入力(よりよい性能のために、例えばサブネット全体の中で最も離れたノードの対の間の最大非輻輳RTT*被乗数と等しいものなどの例えば最大ACKtimeout値だけを使用するのではなく)、共通TCPポート(そのような共通ポートへ/からのパケットトラフィックを異なって処理できるように)及び/又は追加の使用されるTCPポート及び/又はそのような特殊処理から除外されるソースポート又はデスティネーションポートのいずれか(例えば、一部のマルチメディアストリームは、UDPではなく指定されたポート番号を有するTCPを使用する)のユーザ入力...などを可能にすることができる。
ここに、この本説明で記述する方法/サブコンポーネント方法及び/又はパケット到着間法及び/又は「同期化」パケット法の組合せのさまざまな多数の可能性の中の、いくつかのシナリオでの概略のみでのいくつかの例の事例がある(TCP接続の一端だけが変更されている場合に、両端が変更されるならば、これは、明らかに、両端が互いの変更の存在を検出した後のタスクをはるかにより簡単にする)。
1.外部インターネットへのセンダソースとして働く、ローカル端の変更されたTCP。TCPスタックは直接に変更される。
「トリガ」イベント(例えば300msの「経過時間インターバル」、3つのDUP ACK、RTOの実際のパケット再送信タイムアウト...など)の際に、他の可能性の中でも、これは、TCP自体が、定義されたポーズ−インターバルの間に「ポーズ」するだけ(又は、全くポーズすらせず)且つ/又はプローブとして働くためにポーズ中に少数のパケット送信を可能にすることと、その後、CWND/レートリミットを変更せずに再開する(又はポーズなしで継続する)か、例えば5%、10%、50%...などのx%だけCWND/レートリミットを減らすかのいずれかを行うことと必要とするだけであるはずである。
ここでは、「ポーズすること」が、例えば300msの「パケット到着間」満了時に実施される場合に、センダベースド変更は、例えば300msの「パケット到着間」満了が、ローカル端センダが他端に送信すべきデータパケットを有しておらず、したがって不必要に「ポーズする」必要がなく、且つ/又は不必要にそれ相応に反応する必要がないという事実だけに起因したかどうかを知るという利益を有することに留意されたい(ローカル端がレシーバとして働く場合に、そのローカル端は、例えば300msの「パケット到着間」満了が、「トリガ」イベントに起因するのか、単に他端のセンダが一時的に送信すべきさらなるデータパケットを有しないからのどちらであるかを知るすべがないことと比較されたい)。
パケット到着間法は、それ相応に反応するためのトリガイベントとして「非輻輳RTT*被乗数」法の代わりに使用することができ、さらに、「同期化」パケット法(ここでは、ローカル端の変更された送信するソースTCPから生成されるだけであるが、例えば他端の未変更のTCPからの戻るACKなどの応答を誘発する)及び/又はタイムスタンプオプションが組み込まれた場合に、どの方向のリンクが確かに「DOWN」又は確かに「UP」であるかの確かな検出/確かな推論を可能にするはずである。
2.外部インターネットへのセンダソースとして働くローカル端の変更されたTCP。TCPスタックを直接に変更することはできない。
本明細書の変更されたソフトウェアモニタ/変更されたTCPプロキシ/変更されたファイヤウォール...などは、TCPスタック自体の代わりにこのタスクを実行する必要があるはずである。「トリガ」イベント(例えば、300msの「経過時間インターバル」、3つのDUP ACK、RTOの実際のパケット再送信タイムアウト...など)の際に、他の可能性の中でも、これは、本明細書の変更されたソフトウェアモニタ/変更されたTCPプロキシ/変更されたファイヤウォール...などが、定義されたポーズ−インターバルの間に、インターセプトされたTCPパケット転送を「ポーズ」するだけであり、且つ/又はプローブとして働くためにポーズ中に少数のパケット送信を可能にし、その後、再開する時に、例えばすべての到着するインターセプトされる発信TCPパケットに対して固定された個数のACKを「スプーフィング」し(例えば、「スロースタート」に再入する時に1セグメントサイズにリセットされた可能性があるTCPのCWND/レートリミットをすばやく復元するために)、且つ/又は例えば変更されたソフトウェアモニタ/変更されたTCPプロキシ/変更されたファイヤウォール...など(今や送信されたパケットのどれを再送信することも要求すらされないはずのTCP自体ではなく)の中で、すべての高速再送信3DUP ACKS/RTOタイムアウトの実際のパケット再送信を、そのようなDUP純ACKをTCPに転送しないこと及び/又はTCPに転送する前にチェックサムを再計算しながらピギーバックされたDUP ACKパケット内のACKビットを除去することによってすべての高速再送信DUP ACKパケットを抑止しながら送信されるデータのウィンドウ分の実際のコピーを保持することによって処理することすら行い、且つ/又はTCPがRTOタイムアウト...など)を有する直前にTCPへのACKを「スプーフィング」し...などを必要とするのみであるはずである。ここでは、「ポーズすること」が、例えば300msの「パケット到着間」満了時に実施される場合に、センダベースド変更は、例えば300msの「パケット到着間」満了が、ローカル端センダが他端に送信すべきデータパケットを有しておらず、したがって不必要に「ポーズする」必要がなく、且つ/又は不必要にそれ相応に反応する必要がないという事実だけに起因したかどうかを知るという利益を有することに留意されたい(ローカル端がレシーバとして働く場合に、そのローカル端は、例えば300msの「パケット到着間」満了が、「トリガ」イベントに起因するのか、単に他端のセンダが一時的に送信すべきさらなるデータパケットを有しないからのどちらであるかを知るすべがないことと比較されたい)。
パケット到着間法は、それ相応に反応するためのトリガイベントとして「非輻輳RTT*被乗数」法の代わりに使用することができ、さらに、「同期化」パケット法(ここでは、ローカル端の変更されたソフトウェアから生成されるだけであるが、例えば他端の未変更のTCPからの戻るACKなどの応答を誘発する)及び/又はタイムスタンプオプションが組み込まれた場合に、どの方向のリンクが確かに「DOWN」又は確かに「UP」であるかの確かな検出/確かな推論を可能にするはずである。
3.外部インターネットセンダソースからのレシーバとして働くローカル端の変更されたTCP。TCPスタックは直接に変更される。
パケット到着間法は、それ相応に反応するためのトリガイベントとして「非輻輳RTT*被乗数」法の代わりに使用することができ、さらに、「同期化」パケット法(ここでは、ローカル端の変更されたレシーバTCPから生成されるだけであるが、例えば他端の未変更のTCPからの戻るACKなどの応答を誘発する)及び/又はタイムスタンプオプションが組み込まれた場合に、どの方向のリンクが確かに「DOWN」又は確かに「UP」であるかの確かな検出/確かな推論を可能にするはずである。さらに、Divisional ACK/DUP ACK/Optimistic ACKなどの技法を使用して、必要な時に必ず、他端の未変更の送信するソースTCPのCWND/送信レートを増分することができ、ウィンドウサイズ更新パケット技法を使用して、他端の未変更の送信するソースTCPに「ポーズ」させることができ...などである。
4.外部インターネットセンダソースからのレシーバとして働くローカル端の変更されたTCP。TCPスタックを直接に変更することはできない。
本明細書の変更されたソフトウェアモニタ/変更されたTCPプロキシ/変更されたファイヤウォール...などは、TCPスタック自体の代わりにこのタスクを実行する必要があるはずである。「トリガ」イベント(例えば、特定のサブフローの300msの「経過時間インターバル」など)の際に、他の可能性の中でも、これは、本明細書の変更されたソフトウェアモニタ/変更されたTCPプロキシ/変更されたファイヤウォール...などが、定義されたポーズ−インターバルの間に、他端のセンダTCPにその特定のサブフローのパケット転送をリモートから「ポーズ」させるだけであり、且つ/又はプローブとして働くためにポーズ中に少数のパケット送信を可能にし、その後、再開する時に、例えば、固定された個数のDUP ACKを他端のセンダTCPにすばやく送信させる(例えば、「スロースタート」に再入する時に1セグメントサイズにリセットされた可能性がある他端のTCPのCWND/レートリミットをすばやく復元するために)だけである。パケット到着間法は、それ相応に反応するためのトリガイベントとして「非輻輳RTT*被乗数」法の代わりに使用することができ、さらに、「同期化」パケット法(ここでは、ローカル端の変更されたレシーバTCPから生成されるだけであるが、例えば他端の未変更のTCPからの戻るACKなどの応答を誘発する)及び/又はタイムスタンプオプションが組み込まれた場合に、どの方向のリンクが確かに「DOWN」又は確かに「UP」であるかの確かな検出/確かな推論を可能にするはずである。Divisional ACK/DUP ACK/Optimistic ACKなどのさらなる技法を使用して、必要な時に必ず、他端の未変更の送信するソースTCPのCWND/送信レートを増分することができ、ウィンドウサイズ更新パケット技法を使用して、他端の未変更の送信するソースTCPに「ポーズ」させることができ...などである。
TCP接続は、対称である、すなわち、ローカル端は、同時にデータの送信と受信との両方を行っていることができる(実際のデータを全く送信していない場合であっても、必ず、他端に向かって生成される戻るACKがある)ので、ローカル端の変更されたTCP/変更されたモニタソフトウェア/変更されたTCPプロキシ/変更されたファイヤウォール...などは、もちろん、同時にセンダベースドとレシーバベースドとの両方として働くことができる。さらに、両端のすべてが変更される場合に、各端は、やはり、同時にセンダベースドとレシーバベースドとの両方として働き、一緒に働くことができる:しかし、好ましくは及び/又はその代わりに、両端が互いの変更の存在を検出したならば、これらの端は、それぞれがセンダベースドのみとしてのみ働くことのみによって働くか、それぞれレシーバベースドとしてのみ働くか、一端だけがレシーバベースドとセンダベースドとの両方として働き、他端の変更された動作がディスエーブルされることに合意することができる。互いの変更された存在を検出する多数の可能な形の1例が、例えば、「パディングフィールド」又は固定長データ部分内の特殊な一意の固定長識別パターンを有するパケットを他端に送信することである。
本説明で開示されるさまざまな方法及び/又はサブコンポーネント方法の組合せから導出可能な方法例
(さまざまな一方向トリップ時間OTT、OTTest及び推定された非輻輳OTTest(min)...などの測定及び/又は推定を可能にすることは、TCP接続確立SYNC/SYNC ACKフェーズ中にタイムスタンプオプションをネゴシエートすることを必要とするはずである。特定の送信されたセグメント/パケットに関する送信するソースからレシーバへの一方向トリップ時間OTTは、センダによって、戻る対応するACKのさまざまなタイムスタンプフィールド値から導出することができる。明らかに、OTT値、OTTest値、OTTest(min)値は、送信するソース又はレシーバのいずれかから使用可能にされる時に、よりよくより効率的な伝送制御を可能にするはずである。というのは、RTT、RTTest、RTTest(min)が、前進経路及び戻り経路の非対称性によって導入される不確定性要素を固有に含むからである)。
(さまざまな一方向トリップ時間OTT、OTTest及び推定された非輻輳OTTest(min)...などの測定及び/又は推定を可能にすることは、TCP接続確立SYNC/SYNC ACKフェーズ中にタイムスタンプオプションをネゴシエートすることを必要とするはずである。特定の送信されたセグメント/パケットに関する送信するソースからレシーバへの一方向トリップ時間OTTは、センダによって、戻る対応するACKのさまざまなタイムスタンプフィールド値から導出することができる。明らかに、OTT値、OTTest値、OTTest(min)値は、送信するソース又はレシーバのいずれかから使用可能にされる時に、よりよくより効率的な伝送制御を可能にするはずである。というのは、RTT、RTTest、RTTest(min)が、前進経路及び戻り経路の非対称性によって導入される不確定性要素を固有に含むからである)。
(A)LAN/WAN/プロプラエタリインターネットなどのプロプラエタリネットワークでの、パケットがバッファリングされ始めること及び/又はパケットロスの始まりを検出するための最新の非輻輳RTTest(min)及び/又は最新の非輻輳OTTest(min)...などのセンダベースド監視。
プロプラエタリネットワークでは、ギャランティードサービス機能をイネーブルするのに必要なものは、そのプロプラエタリネットワーク内の各すべてのPC/サーバ...など(又は単に実質的な個数の高トラフィックソース)に、先に記述した変更TCPアップグレード又はモニタソフトウェアのいずれかをインストールさせること(又は、それらのPC/サーバ...などに存在するアプリケーションソフトウェアが、そのアプリケーション内で直接に、例えばRTSPストリーミングアプリケーション内で直接に、これらの変更を実施すること)...などである。
各すべてのサブネット間の非輻輳RTT値又は非輻輳OTT値がプロプラエタリネットワーク内で前もって既知である(非輻輳RTT値又は非輻輳OTT値が、異なるサイズのデータパケットについて、特に媒体リンクがISDNなどの低帯域幅リンクである場合に変化する可能性があり、ほとんどのTCPパケットサイズが、TCP接続確立フェーズ中に事前ネゴシエートされ、一般にネゴシエートされる最大セグメントサイズMSS値が約800バイト、1500バイト...などであることに留意されたい)場合に、本明細書の変更されたTCPアップグレード又はモニタソフトウェア...などのそれぞれは、例えば特定のソース−デスティネーションフローの非輻輳RTT又は非輻輳OTT時間期間+指定された時間期間Bが、特定の送信されたパケット(1つ又は複数)の対応するACKを戻って受信せずに経過した時に、個々のTCPごとのフローの送信レートを単純にスロットルバックすることができる(「ポーズ」期間を介して又はCWNDウィンドウサイズパーセンテージ減分を介して...など)。ここでの時間期間Bは、トラバースされる経路に沿ったさまざまなノードでバッファリングされる間に累積的に導入され、パケットによって経験される総パケットバッファ遅延に対応する:この値に例えば20msの短い期間をセットすることは、他のリアルタイムクリティカルVoIP/ビデオ会議UDPパケットの享受する非常によいギャランティードサービスレベルを保証するはずである。というのは、この場合のUDPパケットが、トラバースされるさまざまなノードに沿った20msより非常にはるかに多い累積総バッファ遅延に出会う可能性が低いからである。この場合にB=0をセットすることは、TCPフローが、パケットバッファリング遅延のすべての始まりを即座に回避することを必ず試みることを保証し、ネットワークを、バッファ遅延なし、又はたまたま発生する時にたまたまのインターバル中の非常に些細なバッファ遅延だけに保つ。TCPレートスロットル減分パーセンテージは、さまざまな固定された値をセットすることができ、あるいは、さまざまな動的な値になるようにアルゴリズム的に導出することができ、例えば、(B ms+例えばT ms)/1000msであり、B=50ms且つT=50msの場合に、ここでのレート減分パーセンテージは、10%である、すなわち、TCP送信レートは、今や、既存送信レートの90%にスロットルバックされる → したがって、ボトルネックリンクをトラバースするフローが今さらにその後全くその送信レートを増分も減分もしないと仮定すると、そのボトルネックリンクのスループットレベルが、その後、今、そのボトルネックリンクの帯域幅容量の定常90%付近で維持されることが、今わかる。TCPレートスロットル減分パーセンテージのアルゴリズムによって導出される値の他の可能な非網羅的な例は、単に、例えば、B ms/TCPごとのフローの非輻輳RTT値とすることができ、B=50ms及び非輻輳RTT=400msでは、ここでのレート減分パーセンテージは、12.5%になるはずである。時間期間T msは、以前に加算されたものであり/ここで加算することもでき、その結果、より大きいレート減分パーセンテージを用いると、そのボトルネックリンクをトラバースするフロー(TCPに関して通常そうであるように、その送信レートを増分する)は、今、100%リンクスループットレベル以上にもう一度達するのにより長い時間を要して、その後、バッファリングを必要とするはずであり、このバッファリングは、その後、他のリアルタイムクリティカルギャランティードサービスUDPパケットにわずかに影響するはずである。
変更されたTCPアップグレード又はモニタソフトウェア...などは、要求された時に必ず、さまざまな指定された「トリガイベント(1つ又は複数)」(例えば、B msの累積総バッファリングされた遅延に出会った...など)の後に必要な所望のボトルネックリンクのスループットを達成するために(例えば、付随するパケットバッファリング遅延を伴う現在の100%超の利用度レベルではなく、100%、99%、95%、85%...などのボトルネックリンク帯域幅利用度をその後に引き起こすために)、CWNDパーセンテージ減分を介して及び/又はそのような形での「ポーズ」を介して...など、TCDPごとのフロー(1つ又は複数)レートスロットルをもたらすことができる。さまざまなアルゴリズムとポリシとプロシージャとを、さらに考案して、すべての種類の「トリガイベント」をさまざまな異なる形で処理することができる。
ここで、変更されたTCPアップグレード又はモニタソフトウェア...などが、プロプラエタリネットワーク内のさまざまなサブネットの間の、サブネット間の非輻輳RTT及びサブネット間の非輻輳OTTの以前の知識を必ずしも必要としないことに留意されたい。そうではなく、ここでは、変更されたTCPアップグレード又はモニタソフトウェア...などは、個々のTCPごとのフローの現在の最新の観察された最小のRTT値又は現在の最新の観察された最小のOTT値を記憶し、これを個々のTCPごとのフローの非輻輳RTT又は非輻輳OTTと動的に同等として扱うことができる。これらのRTTest(min)又はOTTest(min)の常識的な上限及び下限:例えば、これらの最大上側シーリング限度に、プロプラエタリネットワーク内の既知の最も離れた位置の対のRTTmax値をセットすることができる...などである。
(A1)LAN/WAN/プロプラエタリインターネットなどのプロプラエタリネットワークでの、パケットがバッファリングされ始めること及び/又はパケットロスの始まりを検出するための最新の非輻輳RTTest(min)及び/又は最新の非輻輳OTTest(min)...などのレシーバベースド監視
(これは、リモートACK Division/複数のDUP ACK/Optimistic ACKと、「ポーズ(1つ又は複数)」を引き起こすためのさまざまなサイズのウィンドウサイズ更新と、複製パケット法を介する「何もしない」ACK応答の誘発、RTO再送信をプリエンプトするための高速再送信をトリガするための3つのDUP ACKと、...などを使用する、前のレシーバベースドの方法/サブコンポーネント方法と、このセクション及びこの説明本体のさまざまな部分で説明されるさまざまな方法/サブコンポーネント方法とから十分に明白である)。
(これは、リモートACK Division/複数のDUP ACK/Optimistic ACKと、「ポーズ(1つ又は複数)」を引き起こすためのさまざまなサイズのウィンドウサイズ更新と、複製パケット法を介する「何もしない」ACK応答の誘発、RTO再送信をプリエンプトするための高速再送信をトリガするための3つのDUP ACKと、...などを使用する、前のレシーバベースドの方法/サブコンポーネント方法と、このセクション及びこの説明本体のさまざまな部分で説明されるさまざまな方法/サブコンポーネント方法とから十分に明白である)。
(B)LAN/WAN/プロプラエタリインターネットなどのプロプラエタリネットワーク及び/又は外部ネットワークでの、パケットがバッファリングされ始めること及び/又はパケットロスの始まりを検出するための最新の非輻輳RTTest(min)及び/又は最新の非輻輳OTTest(min)...などのセンダベースド監視
外部インターネットは、プロプラエタリネットワーク内のように、制御内ではない他の既存の未変更のTCPフローを受ける。上記の(A)の例(1つ又は複数)は、これを考慮に入れるためにさらに変更される必要があるはずである。
外部インターネットは、プロプラエタリネットワーク内のように、制御内ではない他の既存の未変更のTCPフローを受ける。上記の(A)の例(1つ又は複数)は、これを考慮に入れるためにさらに変更される必要があるはずである。
CWNDパーセンテージ減分及び/又は「ポーズ(1つ又は複数)」...などを介するレートスロットル減分を引き起こすための「トリガイベント」は、ここで、例えば100%/99%/95%/85%...などへのフォールバックの後の指定された又は動的にアルゴリズム的に導出されるs秒の間に増分しないなど、さらに変更される必要があり、もう一度ボトルネックリンクのスループット利用度がその後に100%以上に戻って達し、上記のs秒以内のパケットバッファリング遅延の始まりを引き起こす場合に、「トリガイベント(1つ又は複数)」(パケットドロップ/バッファリング遅延閾値超過...などとすることができる)まで、送信レートがもう一度増分/増加し始めることを可能にし、そうでない場合に、s秒が経過した後に、送信レート増分/増加を可能にし始める。さまざまなアルゴリズムとポリシとプロシージャとを、さらに考案して、すべての種類の「トリガイベント」をさまざまな異なる形で処理することができる。
ここで、非輻輳RTT及び/又は非輻輳OTTが、新たに確立されるTCPごとのフローについて前もってたやすくはわからない外部インターネット上では、この故に、現在の最新の観察されたRTTest(min)又はOTTest(min)が、その代わりに、非輻輳RTT及び/又はOTT値と同等の動的推定値を提供するはずである。
既存の標準TCPは、競合するTCPフローの公平なシェア及びフレンドリネスを強調するが、単に単一のパケットドロップRTOタイムアウトの後又は特に高帯域幅及び長RTT待ち時間を有する長距離ファットパイプ上での3DUP ACK高速再送信の後に、以前に確立された送信レート/スループットを再達成するのに必要な非常に長い期間(主に、スロースタートの指数関数的CWND増大中にSsthresh CWNDサイズを達成した後の輻輳回避モードでの既存TCPの保守的な線形CWND増分に起因する)で明示されているように、最大スループットのための使用可能帯域幅の十分な利用度において非効率的である。変更されたTCPの新しい改善された判断基準は、今は、非効率的で遅い非常にフレンドリな公平な共有だけではなく、最大TCPスループットのための使用可能帯域幅及び/又は使用可能バッファの高い利用度を含まなければならない。さまざまな「トリガイベント」の際に「ポーズ」し且つ/又はCWNDを減らすための本明細書の変更されたTCPの超高速反応時間(動的に導出されるRTO値の1秒という既存RFCのデフォルト最小下側シーリング値ではなく)は、パケットドロップパーセンテージを最小にするはずであり、前に説明した「連続ポーズ」は、さらに、送信レート減分サイズを非常に柔軟にすなわち例えばRTTあたり64Kバイトから例えば300msあたり40バイトのみに減らすはずである)。
本明細書の変更されたTCPは、多数のさまざまな異なる形で、CWND増分サイズ(及び/又は、例えばより小さい値にされる、同等の「ポーズ」インターバル、「連続ポーズ」インターバルセッティング)においてよりアグレッシブにすることができる。CWNDを、例えば、既存RFCの受信されたACKあたり及び/又はRTTあたり1MSSではなく受信されたACKあたり及び/又はRTTあたり指定された整数倍数又は動的に導出される整数倍数のMSSだけ増分することができ、Ssthresh値を、指定された値に初期化することができ、及び/又はTCP接続フェーズ中にネゴシエートされる最大ウィンドウサイズと同一になるようになど、非常に大きい値に永久的に固定することができ...などである。「トリガイベント」(パケットドロップ(1つ又は複数)結合され/分離されたRTOタイムアウト、3DUP ACK高速再送信、ACKが外部の厳しくセットされた指定されたインターバルの外で返される際の分離されたレート減分...など)の際にレート減分をもたらす間に、変更されたTCPは、ボトルネックリンク(1つ又は複数)利用度が例えば100%/99%/95%/85%...などの高いスループットで又はさまざまな100%を超える輻輳的バッファリング遅延レベルなどでさえ維持されることを保証するはずであるようにレートを減分しようとすることができる(経路をトラバースするすべてのTCPが、すべて変更されたTCPであると仮定して)。
さまざまな多数の可能性の中の1例として、本明細書の変更されたTCP(センダ又はレシーバのいずれかあるいは両方での)は、非輻輳ソース−レシーバ−ソースRTT値又は非輻輳ソース−レシーバOTT値、あるいは上記の動的最良推定RTTest(min)/OTTest(min)同等物の以前の知識を有するはずである:トラバースされるすべてのリンクのそれぞれが、そのめいめいの100%使用可能帯域幅を超えない(すなわち、パケットバッファリングが、トラバースされるノードのどれにおいても発生しない)時に、例えば戻るACKから導出されるRTT値又はOTT値又はRTTest(min)値又はOTTest(min)値は、今や、現実の実際の非輻輳RTT値又は非輻輳OTT値と同一になる(以下でV msと称する、ノード処理遅延/ソース又はレシーバホスト処理遅延...などによって導入される非常に小さいランダム変動を伴う:この値V ms変動は、通常、指定された又は動的に導出されるB ms...などの他の以前に説明したシステムパラメータより小さい桁(magnitude order)になるはずである。V msが非常に希な機会に期待されない場合に短く非常に大きくなる例えばWindow OSはリアルタイムOSではない...これは、その代わりに出会うノードバッファリング遅延によって生じる/導入される/引き起こされるのと同一の形で「例外的に」扱うことができる)。例えば戻るACKから導出されるRTT値又はOTT値又はRTTest(min)値又はOTTest(min)値が、トラバースされる経路(1つ又は複数)に沿って出会うバッファリング遅延がないことを示し続ける限り、変更されたTCPは、既存RFCのように送信レートの増分/増大を保守的に許容し続けるか、よりアグレッシブな増分/増大を続けるかのいずれかを行うことができる。戻るACKから示される/導出されるバッファリング遅延のあるレベル(1つ又は複数)を超える時、すなわち[(戻るRTT又はOTT)−(RTTest(min)又はOTTest(min))]というミリ秒単位の値は、今、トラバースされる経路(1つ又は複数)に沿ったさまざまなノードで出会う累積総バッファリング遅延(1つ又は複数)を示す(以下ではC msと称する)。例えば、Cの値の20ms/50ms/100ms...などを超える時に、変更されたTCPは、今、例えば、送信レートを減らすことができ、その結果、ボトルネック(1つ又は複数)のリンク利用度は、その後、それらのボトルネックリンク(1つ又は複数)をトラバースするすべてのTCPが、すべて変更されたTCPであると仮定して、例えば100%/99%/95%/85%...などに維持されるはずである(今、TCPごとのフローの実際の非輻輳RTT又は非輻輳OTTの最新の推定同等値とCの値とを知っているので、必要なCWND減分パーセンテージ及び/又は「ポーズ」インターバル又は適当な必要な「ポーズ」のシーケンスを、今、確かめて、必要な所望の最終結果を達成することができる)。変更されたTCPは、今、例えば前に説明したように期間s秒(指定される又は動的にアルゴリズム導出される)の間にTCPフローのさらなるレート増分/増大のすべてを停止して、その後、例えば前に説明したように又はさらに考案されるさまざまな異なる形でそれ相応に応答することができる。この特定の例は、既存RFCのフレンドリ公平共有に加えて高い利用度スループットを達成するという効果を有し、また、トラバースされる経路(1つ又は複数)の累積バッファリング遅延をC値に相関する低いレベルに維持されるように保つのを助ける:他の強い支配的な未変更のTCPフローがない場合に(その場合に、本明細書の変更されたTCPフローは、s秒以内にレート増分/増大を可能にし始めるはずである/始めることができる)、すべての他の未変更のTCPフローと一緒に、最終的にパケットドロップイベントを引き起こす:その際に、未変更のTCPフローは、「スロースタート」に再入し、前に達成された送信レートを再達成するのに非常に長い時間を要するはずであるが、変更されたTCPフローは、前に達成された送信レート/スループットの任意に高い比率を保持することができる(長RTT長距離ファットパイプに特に関連する既存の応答性問題を解決する)。例えばその後の95%ボトルネックリンク(1つ又は複数)利用度を達成するための変更されたTCPレート減分を用いて、新しいTCPフロー(1つ又は複数)(及び/又は他の新しいUDPフロー(1つ又は複数)...など)は、必ず、ルートに沿ったパケットバッファリング遅延(1つ又は複数)を導入せずにフローレート増分/増大を開始するために使用可能ボトルネックリンク(1つ又は複数)帯域幅の5%までを即座に利用できるはずであり、さらに、ボトルネックリンク(1つ又は複数)は、パケットを捨てずに使用可能帯域幅のXミリ秒同等物の新しい追加の突然の瞬間的トラフィックサージに即座に対処できるはずであり(ほとんどのインターネットノードは、一般に、300ms〜500msの間と同等のバッファサイズを有する):これは、既存フローの確立されたスループットを保存するという一般的な知恵と一貫すると同時に、漸進的な制御された新しい追加のフローの増大を可能にする。
代替案では、変更されたTCPは、既存RFCの線形増大と同様に保守的に又はよりアグレッシブに(C msの累積総バッファリング遅延が検出された時にスロットルバックする...などではなく)レート増分/増大を必ず可能にし、「パケットドロップ」イベントの際にそれ相応にスロットルバックするだけとすることができる:これは、TCPフローのスループットの最大化の利益のためのみであり、他のリアルタイムクリティカルUDPフローには良くないはずであるが、トラバースされるノードは、使用可能な物理帯域幅の保証された最小パーセンテージをUDPパケット優先順位転送に単純に予約することによって、リアルタイムクリティカルUDPパケットの非常によいギャランティードサービス性能を簡単に保証すること...などができる。
ウェブサイトサーバ/サーバファームは、上で説明された変更されたTCP実施態様を有利に実施することができる。通常のウェブサイトは、しばしば、スピーディなダウンロードのために約30Kバイト〜60Kバイトになるように最適化される(パケット(1つ又は複数)ドロップによって継続的に中断されずに約5Kバイト/秒でダウンロードするアナログ56Kモデム...などについて、これは、それでも、約6秒〜12秒を要する)。SYNC/SYNC ACK/ACK TCP接続確立フェーズの直後に、送信するソースサーバの変更されたTCPは、現在の最新の観察された最小ソース−レシーバ−ソースRTTest(min)又はソース−レシーバOTTest(min)値の形(それが実際の非輻輳RTT又は非輻輳OTT値を表すか否かに関わりなく)で、TCPごとのフロー(1つ又は複数)の非輻輳RTT又は非輻輳OTTの初期のまさに最初の推定値を有するはずである。送信するソースサーバの変更されたTCPは、任意選択として、今、W個のセグメントというCWNDウィンドウサイズから即座に開始してまさに最初のデータセグメント/パケットの送信を即座に開始することができ、例えば、約1600バイトのネゴシエートされた最大セグメントサイズMSS及びW=20を用いると、60Kバイトのコンテンツのすべてをクライアントウェブブラウザによって受信するのに、2*RTTだけを要するはずである(送信でパケット(1つ又は複数)が捨てられず、壊されず、経路に沿った最小のリンクの帯域幅がエンドユーザのラストマイル500Kビット/秒ブロードバンドであると仮定して)。W=64を用いると、クライアントウェブブラウザが60Kバイトのウェブサイトコンテンツを完全にダウンロードするのに、1RTT又は1OTTだけを要する可能性がある(通常のインターネットRTTは、経路(1つ又は複数)に沿ったバッファリングによって導入される遅延(1つ又は複数)を含めて、一般に約数十ミリ秒から数百ミリ秒である)。経路に沿った最小のリンクの帯域幅が、エンドユーザのラストマイル56Kビット/秒アナログモデムダイヤルアップである場合に、上記の時間期間は、ラストマイルリンクを介する伝送が最大約5Kバイト毎秒に過ぎない可能性があるので、少なくとも6秒又は12秒であったはずである(30Kバイト分又は60Kバイト分のセグメント/パケットが、ダイヤルアップを介して前方にエンドユーザのウェブブラウザに送信される前に、まず、エンドユーザのラストマイルISPで、AOLウェブプロキシサーバでバッファリングされると仮定して)。まさにワーストケースで、最初の20個又は64個のMSS CWNDウィンドウ分のセグメント/パケットが、即座にバッファオーバーフローを引き起こし、この故に、それらのセグメント/パケットが、ボトルネックリンク(1つ又は複数)で捨てられる場合であっても、本明細書の変更されたTCPは、(既存のRFCのレートの代わりに帯域幅利用度の延長期間を半減又は保証する)例えばあるレベルの後続ボトルネックリンク(1つ又は複数)利用度/スループットを保証するためのレート減分、及び/又はより制御されたアグレッシブな後続のレート増分/増大、及び/又はより制御されたバッファ遅延レベル輻輳回避(例えば、「パケット(1つ又は複数)ドロップを待つ」という現在の既存RFCの唯一の方式ではなく、レート増分/増大を可能にする前にs秒待つ...など)...など、前述の上で説明した/短く示した形でそれ相応に非常にすばやく反応することができる(1秒最小値という既存RFCの最小最低フロアデフォルト反応時間よりはるかに高速に)。
変更されたTCPすなわちウェブサーバ用の変更されたTCPが、モニタソフトウェア/プロキシTCP...などの形で(例えば、変更のためのホストTCPスタックソースコードへの直接アクセスなしで)実施される必要がある場合に、これは、本質的に、単に、本説明のさまざまな先の方法/サブコンポーネント方法で説明したように、送信するソースサーバに常駐するモニタソフトウェア/TCPプロキシが、制御されてよりアグレッシブにCWNDウィンドウサイズ/送信レートを増分するために、常駐する送信するソースサーバのTCPスタックに対して、要求された時に必ず「ACKをスプーフィングし」、且つ/又は一時的に送信を止めるか送信レートを減分するために、常駐する送信するソースサーバのTCPスタックに対して、要求された時に必ず0又は小さいレシーバウィンドウサイズ更新パケットをスプーフィングし、及び/又はモニタソフトウェアが、インターセプトされたTCPの発したパケットの前方への転送で、「ポーズ」/「連続ポーズ」を介して同等の送信レート減分をもたらし(及び/又は各ポーズインターバル中に1つ又は少数のパケット転送を可能にし)、且つ/又は常駐するホストのTCPスタックによって送信されたフルウィンドウ分のすべての実際のデータセグメント/パケットを保存して、その後、すべての結合された又は分離されたRTO再送信/3DUP ACK高速再送信を実行し、常駐ホストTCPスタックをすべてのそのような責任から解放し、且つ/又は常駐ホストTCPスタックによって送信された複数のフルウィンドウ分のすべての実際のデータセグメント/パケットを保存し、したがって、モニタソフトウェアが制御されたよりアグレッシブなレート増分/増大をもたらすために常駐ホストTCPスタックに対して「ACKをスプーフィング」する時及び/又はそれを行うためにACK Division/複数DUP ACK/Optimistic ACK技術を利用する時に、複数ウィンドウ分のセグメント/パケットを単一RTT以内に常駐ホストTCPスタックによって生成できるようにし、且つ/又はネットワークからの着信して戻るACKパケットを検査し、及び/又は前方に常駐ホストTCPスタックに転送するか破棄する前に、さまざまなフィールド(ACK Number、Seq Number、Timestamp値、さまざまなフラグ、アドバタイズされたウィンドウサイズ...など)を変更するかどうかを含めてそれ相応に反応するためにそのRTT/OTTを検査し、且つ/又は........などを必要とするはずであることに留意されたい。
ここでは、モニタソフトウェア/TCPプロキシ...などが、送信レートを「ポーズ」/連続「ポーズ」だけを介して制御されるままにしながら、且つ/又は「プローブ」として働くために1つの単一の又は少ない固定された個数のパケットを各ポーズインターバル中に転送することを可能にしながら、技法、方法、及びサブコンポーネント方法の上で述べた組合せを用いて、常駐ホストの有効送信ウィンドウ及び/又はCWNDを、ある必要なサイズに又は常時最大のネゴシエートされたウィンドウサイズにさえ永久的に固定して保つことさえできることに留意されたい。
(SYNC/SYNC ACK/ACK TCP接続確立フェーズの直後に、送信するソースサーバの変更されたTCPは、その代わりに、今や、既存RFCのスロースタートの1MSSセグメントサイズのCWNDウィンドウを用いて即座に開始してまさに最初のデータセグメント/パケットの送信を即座に開始することができるが、これは、エンドユーザの通常の一般的な毎日の経験でそうであるようにコンテンツ転送を完了するのに今は多数のRTT、数十秒から数分前後を要する可能性がある)。
(B1)LAN/WAN/プロプラエタリインターネットなどのプロプラエタリネットワーク及び/又は外部ネットワークでの、パケットがバッファリングされ始めること及び/又はパケットロスの始まりを検出するための最新の非輻輳RTTest(min)及び/又は最新の非輻輳OTTest(min)...などのレシーバベースド監視
(これは、リモートACK Division/複数DUP ACK/Optimistic ACK及び/又は「ポーズ(1つ又は複数)」を引き起こすためのさまざまなサイズのウィンドウサイズ更新及び/又は複製パケット法を介する「何もしない」ACK応答の誘発及び/又はRTO再送信をプリエンプトするための高速再送信をトリガするための3つのDUP ACK及び...などを使用する、以前のレシーバベースドの方法/サブコンポーネント方法と、このセクション及びこの説明本体のさまざまな部分で説明されるさまざまな方法/サブコンポーネント方法から十分に明白である。外部インターネットを介して働くためのTCP変更の実施に関する前のセクションを参照されたい)。
(これは、リモートACK Division/複数DUP ACK/Optimistic ACK及び/又は「ポーズ(1つ又は複数)」を引き起こすためのさまざまなサイズのウィンドウサイズ更新及び/又は複製パケット法を介する「何もしない」ACK応答の誘発及び/又はRTO再送信をプリエンプトするための高速再送信をトリガするための3つのDUP ACK及び...などを使用する、以前のレシーバベースドの方法/サブコンポーネント方法と、このセクション及びこの説明本体のさまざまな部分で説明されるさまざまな方法/サブコンポーネント方法から十分に明白である。外部インターネットを介して働くためのTCP変更の実施に関する前のセクションを参照されたい)。
1例として、TCP接続確立フェーズ中にネゴシエートされるTimestampオプションを用いて、レシーバの変更されたTCP又はモニタソフトウェアは、今や、到着するパケットの実際の非輻輳一方向トリップ時間と同等のソース−レシーバ経路の推定値すなわち現在の最新の観察されたOTTest(min)を導出することができる。任意の到着するパケットが出会う累積総バッファリング遅延は、存在する場合に、到着するパケットのOTTからOTTest(min)を減算することによって導出することができる(ノードのパケット処理/転送時間動揺によって導入されるすべての通常は非常に小さいランダム変動を無視して)。Selective Acknowledgementオプションを利用すること及びDelayed Acknowledgementオプションをディスエーブルすることが好ましい(例えば、ホストPCのTCP/IPレジストリエントリセッティングによって、しかし、これらは、全く、厳密な要件ではない)。変更されたTCP又はモニタソフトウェアは、今、正しい位置にあり、今、輻輳していないソース−レシーバ経路の実際の非輻輳OTT及びバッファリング遅延レベルと同等の推定値を用意していて、フレンドリな公平共有を保ちながら最大の帯域幅利用度/スループット判断基準を達成するために望まれる通りにそれ相応に反応するはずである(リモートから、送信するソースTCPに、「ポーズ」させ、且つ/又はポーズインターバルごとに1つの単一のパケット転送を許容しながら「連続ポーズ」させ、且つ/又は「アンポーズ」させ、且つ/又はDivisional ACK/複数DUP ACK/Optimistic ACKを介してCWNDサイズを増分させ、且つ/又は早期3DUP ACK高速再送信を介してRTOタイムアウトをプリエンプトさせ、且つ/又は......など)。
直前の例は、Timestampsオプションの使用を全く必要としなくなるようにさらに単純化することができ(すなわち、到着するOTT値、OTTest(min)値、及び導出された累積総出会うバッファリング遅延値を導出することも利用することも全く必要としない:レシーバの変更されたTCP又はモニタソフトウェアは、その代わりに、最新の最後の受信された直前のパケットの到着時刻以降に次のパケットが到着するのを指定されたWミリ秒(例えば250ms)インターバルだけ非常に単純に待つことができ、これがWミリ秒以内に到着しない場合には、フレンドリで公平な共有を保ちながら指定された最大帯域幅利用度/スループット判断基準を達成するために(しかし、直前の例よりアグレッシブに)望みに応じて、その後に、これを「トリガイベント」として扱って(次のパケットがバッファオーバーフロード輻輳ドロップされた可能性が最も高い)、続いて即座に(リモートから、送信するソースTCPに「ポーズ」させ、且つ/又はポーズインターバルごとに1つの単一のパケット転送を許容して「連続ポーズ」させ、且つ/又は「アンポーズ」させ、且つ/又はDivisional ACK/複数DUP ACK/Optimistic ACKを介してCWNDサイズを増分させ、且つ/又は早期3DUP ACK高速再送信を介してRTOタイムアウトをプリエンプトさせ、且つ/又は......など)。ここでは、パケットが、3つの異なるノードA/B/Cのそれぞれで例えば300msの3つのバッファリング遅延に出会い、その後、経路に沿って別のノードD(例えば400msと同等のバッファ容量を有する)でバッファオーバーフロード輻輳ドロップされる場合に、且つ、送信するソースTCPでの例えば250msの「ポーズ」は、今、ノードDでのバッファ輻輳レベルをわずか150msに減らすだけではなく、同様に、ノードA/B/Cのそれぞれでのバッファ輻輳レベルをそれぞれわずか50msに減らしもするはずである。450msの指定された又はアルゴリズム的に導出される「ポーズ」インターバル値は、確かに、ノードA/B/C/Dのそれぞれで完全にすべてのバッファリングを完全にクリアするはずであるのに対して(すなわち、すべてが、今、パケットが全くバッファリングされない状態で全然輻輳していない)。しかし、直前の例は、OTTとOTTest(min)と導出された累積的な出会うバッファリング輻輳遅延の知識を用意していて、上記の値の知識に依存してより微細なレベルの制御を伴ってそれ相応に反応することができ、これが、主にバッファオーバーフロードパケットドロップイベントの後に反応することだけができるさらに単純化された例を提示することと比較されたい(トラバースされるすべてのノードのすべてのバッファ(それぞれ400msと同等のバッファ容量を仮定する)が、一貫して安定してますます、オーバーフロー済みに近いがまだオーバーフロー済みでなく変化する時であっても、直前に受信されたパケットに直接に続くパケットは、それでも、その直前のパケットから例えば50ms/100ms/200ms/250ms...など以内に到着することに留意されたい)。
最後に受信されたパケット(任意の長さの)以降に到着する、長さL=1からネゴシエートされた最大セグメントサイズMSSまでの続く次のパケットの現在の最新の最小の観察された経過インターバルE(L)を記憶することが好ましく、これは、長さLの単一のパケットが経路に沿った最低帯域幅リンク伝送媒体(例えば、通常のエンドユーザラストマイル56Kbsダイヤルアップ又は500Kbsブロードバンド、本説明の192〜195ページをも参照されたい)に完全に出るための送信時間遅延の知識/同等の推定値を我々に与える。送信時間遅延E(L)は、パケットの長さLに線形に比例すると期待される。我々は、今、変更されたTCP又はモニタソフトウェアが、例えば(Wミリ秒+最大のネゴシエートされたセグメントサイズMSSの長さのパケットのE(L))がパケット到着なしで経過する時にそれ相応に反応するために、又は例えば最大のネゴシエートされたセグメントサイズMSSの長さのパケットのE(L)が既にWの値の導出/指定で考慮に入れられていると仮定する場合に例えばWミリ秒だけの際にそれ相応に反応するためにイベントを「トリガする」だけになるように、Wミリ秒を指定することができる。
多数の中のもう1つのさらに単純化された例として、ここで、例えばはるかにより高速のウェブページダウンロード、ftpダウンロード...など、外部インターネット上のよりよい性能を与える、パケット到着間インターバル技法(これは、さらに変更する/適合させることができ、モニタソフトウェアではなく、直接にTCP自体のなかで実施することもできる)を利用してモニタソフトウェア内で実施される非常に単純化されたレシーバベースドの変更されたTCPの概要を説明する。
1.リモートセンダからTCPパケットを受信する時には、必ず、フローごとのTCPのテーブル内に既にある場合にはソースアドレス及びポートをチェックし、そうでない場合には、さまざまなパラメータを用いて新しいフローごとのTCP TCBを作成する(すべてのインターセプトされたパケットについて以前のSeq No/送信時刻テーブルエントリを維持する必要はない)。
.最新のパケット受信ローカルシステム時刻(リモートセンダから受信される。純ACK、又は通常のデータパケット)、最新のレシーバパケットのアドバタイズされたウィンドウサイズ(ローカルMSTCPによってリモートセンダに送信される)、最新のレシーバパケットのACK番号すなわちリモートセンダから期待される次の期待されるSeq番号(ローカルMSTCPによってリモートセンダに送信され、フローごとの着信パケット及び発信パケットの検査を必要とし、我々は、今や、通常の120秒インアクティビティを待たずに、FIN/FIN ACKの際にフローごとのTCPテーブルエントリを即座に除去できなければならない)...など。
(任意選択)Sync/Sync ACK完了時に、即座に、リモートセンダのCWNDに例えばユーザ指定の又は動的にアルゴリズム導出された64Kバイトをセットし、例えば、エンドユーザラストマイルリンクの帯域幅容量に依存してより小さい又はより大きいスケーリングされたサイズをセットすることもできる。例えば64K(これは、ウインドウスケーリングオプションが選択されない限り、ネゴシエートされる通常のデフォルト最大ウィンドウサイズであり、これは、リモート外部インターネットウェブサイトのコンテンツを、経験される通常の数十秒と比較して、単一のRTTだけのうちにダウンロードすることを可能にすることができる)がセットされる。これは、好ましくは、例えばACKNo=リモートセンダの初期SeqNo+1を有する例えば15個の即座のDUP ACKを介して行われ、一部のTCPが、その代わりにACKされたバイト数だけCWNDを増分するのみなので、Divisional ACKは、良好に動作しない場合があり、最適のACK挙動は、すべてのTCPで同一でない場合がある。
注:代替案では、我々は、リモートセンダから受信される最初のデータパケットを待ち、その後、リモートセンダからの受信されたばかりのSeqNoと同一にセットされたACKNoを有する(1バイトだけの不必要な再送信出費で)例えば15個のDUP ACKを生成し、あるいはDivisional ACKを使用する。
TCPは、接続をセットアップするのに3ウェイハンドシェーキングプロシージャを使用する。接続は、開始側が、SYNフラグをセットされ、シーケンス番号フィールド内の提案される初期シーケンス番号(seq=X)を有するセグメントを送信することによってセットアップされる。次に、リモートは、SYNフラグとACKフラグの両方をセットされ、シーケンス番号フィールドに逆方向のそれ自体の割り当てられた値(seq=Y)をセットされ、X+1の肯定応答フィールド(ack=X+1)を有するセグメントを返す。これを受信した時に、開始側は、Yを記憶し、ACKフラグだけをセットされ、Y+1の肯定応答フィールドを有するセグメントを返す。
2.次のパケットを受信せずに例えば300ms(ユーザ指定の又は動的にアルゴリズム導出される)が満了する場合には、
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから例えば300ms以内に次の期待されるSeq Noが到着しないことを検出し、それと同時に、3つのDUP ACK以内に例えば1800バイトのウィンドウ更新を伝え(センダの「ポーズ」+1パケットと同等):例えば100msが純ACK又は通常のデータパケットを全く受信せずに経過する場合に、毎回1800バイトだけ増分される1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けることだけを必要とするが、ACK又は通常のデータパケットが実際に次に受信される場合には、リモートからACK又は通常のデータパケットが次にもう一度受信されるまで、100msおきに繰り返して、前のウィンドウサイズを復元する通常の(3つのDUP ACKではない)同一の単一のウィンドウ更新(ACKNoフィールドにローカルMSTCPからリモートに送信された「; 記録された」最新の「最大の」ACKNo又は−1をセットする)を送信し、その後、上記の例えば300msの満了検出ループを、上記のステップ2のまさに始めに繰り返す(任意選択として、我々は、まずこの点で、もう一度ループする前に、ここでDivisional ACK/固定された個数のDUP ACK/Optimistic ACK技法を利用して、送信するソースのCWNDサイズに例えばネゴシエートされた最大ウィンドウサイズ64Kバイト/32Kバイトをセットし、又は例えば送信するソースのCWNDサイズを16 DUP ACKによって増分する...ことなどができる)。
→ 我々は、ソフトウェア内で、ACK Noに未到着の次の期待されるSeq Noをセットされた3つのDUP ACKを生成するために、前の最後に受信されたパケットから例えば300ms以内に次の期待されるSeq Noが到着しないことを検出し、それと同時に、3つのDUP ACK以内に例えば1800バイトのウィンドウ更新を伝え(センダの「ポーズ」+1パケットと同等):例えば100msが純ACK又は通常のデータパケットを全く受信せずに経過する場合に、毎回1800バイトだけ増分される1800バイトの同一の3つのDUP ACKウィンドウ更新を送信し続けることだけを必要とするが、ACK又は通常のデータパケットが実際に次に受信される場合には、リモートからACK又は通常のデータパケットが次にもう一度受信されるまで、100msおきに繰り返して、前のウィンドウサイズを復元する通常の(3つのDUP ACKではない)同一の単一のウィンドウ更新(ACKNoフィールドにローカルMSTCPからリモートに送信された「; 記録された」最新の「最大の」ACKNo又は−1をセットする)を送信し、その後、上記の例えば300msの満了検出ループを、上記のステップ2のまさに始めに繰り返す(任意選択として、我々は、まずこの点で、もう一度ループする前に、ここでDivisional ACK/固定された個数のDUP ACK/Optimistic ACK技法を利用して、送信するソースのCWNDサイズに例えばネゴシエートされた最大ウィンドウサイズ64Kバイト/32Kバイトをセットし、又は例えば送信するソースのCWNDサイズを16 DUP ACKによって増分する...ことなどができる)。
ここでは、我々が、単一のウィンドウ更新パケットの代わりに3つのDUP ACKを送信することもできるが、2つのさらなる100msが経過した後に、単一のウィンドウ更新ACKパケットが、合計3つのDUP ACKウィンドウ更新パケットになるはずであり、もちろん、ここでの代替案を、任意のウィンドウ更新パケット、例えばDUP SeqNoウィンドウ更新パケット...などとすることができることに留意されたい。
利用できるいくつかのサブコンポーネント技法に関するさまざまな注:
.TCP接続確立SYNC/SYNC ACKの後の最初の受信されたパケットから開始し、現在の観察されたRTT−現在の最新の記録されたRTTest(min)又は現在の観察されたOTT現在の最新の記録されたOTTest(min)が、妥当な累積総バッファリング遅延(例えば、ソースパケット生成における一時的に長くされた停止/ギャップによって引き起こされる)より大きい場合には、そのような発生を無視し、「トリガイベント」を引き起こさない。
.TCP接続確立SYNC/SYNC ACKの後の最初の受信されたパケットから開始し、現在の観察されたRTT−現在の最新の記録されたRTTest(min)又は現在の観察されたOTT現在の最新の記録されたOTTest(min)が、妥当な累積総バッファリング遅延(例えば、ソースパケット生成における一時的に長くされた停止/ギャップによって引き起こされる)より大きい場合には、そのような発生を無視し、「トリガイベント」を引き起こさない。
.CWNDサイズパーセンテージ縮小、例えば[(現在の観察されたRTT−現在の最新の記録されたRTTest(min)又は現在の観察されたOTT−現在の最新の記録されたOTTest(min))+T ms]/現在の観察されたRTT又はOTTを介する送信レート減分、しかし、ここで、T=0msを用い、後続のボトルネックリンクのスループットが使用可能帯域幅の100%になることを引き起こすことを暗示する留意し、及び/又は[(現在の観察されたRTT−現在の最新の記録されたRTTest(min)又は現在の観察されたOTT−現在の最新の記録されたOTTest(min))+T ms]をセットされたポーズインターバル
.対応する適当な方法/アルゴリズムを作動させるための、内部プロプラエタリネットワークのサブネットアドレスと外部インターネットとの間の区別
.パケット到着間技法を、「同期化パケット」技法と同様に、使用のために適合させることができる。
.対応する適当な方法/アルゴリズムを作動させるための、内部プロプラエタリネットワークのサブネットアドレスと外部インターネットとの間の区別
.パケット到着間技法を、「同期化パケット」技法と同様に、使用のために適合させることができる。
.例えばpathchar/pipechar/pathchirp...などの帯域幅/リンクプロービング技法を、連合して展開して、トラバースされる経路/ノード/リンクの知識のより微細なレベルを導出して、それ相応によりよく反応することができる。
.最大ウィンドウサイズネゴシエーションを可能にするためのユーザ入力外部インターネット接続速度、例えばダイヤルアップから5Kバイト、しかし、ISPは、64Kバイト/秒さえバッファリングし、例えば5Kバイト毎秒でユーザの56Kbsダイヤルアップに転送することができ、これは、例えばトラバースされる経路が長々しい、例えば数秒のRTT又はOTTを導入した時に非常に便利になるはずである。
.「ポーズ」する/CWNDを減らす非常に早い反応時間は、パケットドロップパーセンテージを最小にし、「連続ポーズ」は、さらに、送信レート減分サイズを非常に柔軟に、すなわち、例えばRTTあたり64Kバイトから例えば300msあたりわずか40バイトに減らす。
.TCPは、高RTTフローに生得的に不公平であり、我々は、例えばパケット到着間インターバル技法を利用して、これを除去する。
.送信するソースTCPの送信レート/スループットを減らすための、複数のACKの抑制すなわち送信するソースへの前方への転送でのわずかな遅延
.100%に近いボトルネックリンク(1つ又は複数)の帯域幅容量利用度/スループットを常時維持することができることによって、バッファオーバーフロード輻輳パケットドロップ及び/又は物理送信エラーパケットドロップの後であっても、変更されたTCPは、リンク(1つ又は複数)の帯域幅容量を非常に不十分に利用する既存RFCのTCP(既存RFCのTCPのAIMD加法増加乗法減少「鋸歯」利用度/スループットグラフから非常に明白であるとおり)と比較して、よいスループット/ボトルネック帯域幅利用度を約2倍にすることを可能にする。
.100%に近いボトルネックリンク(1つ又は複数)の帯域幅容量利用度/スループットを常時維持することができることによって、バッファオーバーフロード輻輳パケットドロップ及び/又は物理送信エラーパケットドロップの後であっても、変更されたTCPは、リンク(1つ又は複数)の帯域幅容量を非常に不十分に利用する既存RFCのTCP(既存RFCのTCPのAIMD加法増加乗法減少「鋸歯」利用度/スループットグラフから非常に明白であるとおり)と比較して、よいスループット/ボトルネック帯域幅利用度を約2倍にすることを可能にする。
さらなる注及びさらなる方法
パケット到着間インターバル(例えば300ms)技法は、任意選択として、有効ウィンドウ全体分より少ないパケットが受信/送信される時に限ってアクティブにすることができる:そうでない場合には、300msは、例えばOTT又はRTT>例えば300ms(戻るACKがセンダに戻って到着するために)の時に新しいパケット(1つ又は複数)を受信せずに経過する可能性がある:例えば現在の有効ウィンドウサイズより大きい、より小さい、又はこれと等しいかどうかを調べるために、最新の受信されたSeqNo−最新の送信されたACK番号をチェックしてもよい。
パケット到着間インターバル(例えば300ms)技法は、任意選択として、有効ウィンドウ全体分より少ないパケットが受信/送信される時に限ってアクティブにすることができる:そうでない場合には、300msは、例えばOTT又はRTT>例えば300ms(戻るACKがセンダに戻って到着するために)の時に新しいパケット(1つ又は複数)を受信せずに経過する可能性がある:例えば現在の有効ウィンドウサイズより大きい、より小さい、又はこれと等しいかどうかを調べるために、最新の受信されたSeqNo−最新の送信されたACK番号をチェックしてもよい。
リモートサーバがタイムアウトせず、CWND及び/又はSSthreshに1MSS又は2MSSをセットしないように、任意選択として、SYNC/SYNC ACK/ACKの後(又は1つ若しくは2つのまさに最初の受信された通常のデータパケットの後...)に例えば500msおきに3+DupNum個のDUP ACKを送信し続けてもよい。センダTCPは、例えば送信された最初の通常のデータパケットの戻るACK−送信されたSYNC ACKの戻るACK RTT>C ms、例えば100ms(トラバースされる経路の輻輳レベルの非常に突然の増加に起因する)である場合に、データパケット転送の最初の64Kバイト中にアルゴリズムを利用してもしなくてもよい。
洗練された仕様:
まず、レジストリエントリをセットし、はるかに好ましくSACKをイネーブルし、Delay Acknowledgementをディスエーブルする。
まず、レジストリエントリをセットし、はるかに好ましくSACKをイネーブルし、Delay Acknowledgementをディスエーブルする。
コマンドライン入力パラメータ:
− WaitTimeStamp(ms) − 「ネットワーク輻輳ドロップ」を推論するための、経過したパケット到着間インターバル
− PauseTimeStamp(ms) − 「輻輳」時のリモートサーバポーズインターバル
− DupNum − リモートサーバは、3DUP ACK高速再送信フェーズ中に、受信される追加のDUP ACKごとにCWNDサイズをさらに増分し、我々は、この技法を使用して、大きい数DupNum個のDUP ACKを送信して、CWNDをランプアップする。
− WaitTimeStamp(ms) − 「ネットワーク輻輳ドロップ」を推論するための、経過したパケット到着間インターバル
− PauseTimeStamp(ms) − 「輻輳」時のリモートサーバポーズインターバル
− DupNum − リモートサーバは、3DUP ACK高速再送信フェーズ中に、受信される追加のDUP ACKごとにCWNDサイズをさらに増分し、我々は、この技法を使用して、大きい数DupNum個のDUP ACKを送信して、CWNDをランプアップする。
− Offset − 0又は1、記録された最新の更新されたdwACKNumber(すなわち、レシーバMSTCPによってリモートサーバに送信されたACKNoの最新の最大値)をセットされた場合にはDUP ACK内のACKNoフィールドが働くかどうかは非常に確かではなく、あるいは、1バイトを減算した後に限って働く。
1.発信TCPパケット(我々のMSTCPからリモートホストへのパケット)を処理するプロシージャ
必要な場合にはこのパケットのTCP接続の新しいエントリを作成する。私は、次のいくつかの変数を記録しなければならない。
必要な場合にはこのパケットのTCP接続の新しいエントリを作成する。私は、次のいくつかの変数を記録しなければならない。
− dwACKNumber(ACKフラグがシグナリングされる場合) − TCPヘッダのACKフィールド
− dwSEQNumber − TCPヘッダのSeq Numberフィールド
− dwTCPState − このTCB変数は、あなたが好む任意の形で、TCP接続状態を制御するためにあなた自身が使用するためのものである。
− dwSEQNumber − TCPヘッダのSeq Numberフィールド
− dwTCPState − このTCB変数は、あなたが好む任意の形で、TCP接続状態を制御するためにあなた自身が使用するためのものである。
シーケンスSYN/ACK内の第3ACKパケット内のdwMaxRcvWindowSizeを記録するためにSYNC/SYNC ACK/ACKを監視する:フローごとのTCPは、リモートサーバに送信する我々のレシーバMSTCPからのSYNCを検出した時にのみ作成されなければならない(それ以外の場合に作成してはならない)。
TCP接続SYNC/SYNC ACK/ACKでACK応答パケットを送信した直後に、最初のデータパケットを受信する前であっても(これがリモートサーバのCWNDを増分するように働くと仮定して)、ACK番号=dwACKNumber−Offset(dwAckNumber − はTCP接続SYNC/SYNC ACK/ACKシーケンスの3番目のACK応答パケットのACK番号である)とdwMaxRcvWindowSizeフィールド値とdwSEQNumberフィールド値とを有する3+DupNum個のDUP ACKを生成する。まさに最初のデータパケットが到着するまで、WaitTimeStampインターバルおきに3+DupNum個のDUP ACKを送信し続ける(***注:ステップ3は、プログラムフロー内でまさに最初のデータパケットが到着した後に限ってアクティブ化され、ステップ2は、実際に、常時即座にアクティブである)。
2.リモートセンダTCPからのFIN又はRST及びローカルMSTCPからのRSTに関する着信パケットを監視する → 次に、TCPフローを即座に終了し、そうでない場合には、進行中のプロセス/ループアクティビティにかかわりなく、16秒の総インアクティビティ(すなわち、あらゆるタイプの着信/発信パケットなし)の後に終了する。
3.TCPフローをチェックするプロシージャ(3+DupNum個のDUP ACKの送信及び/又はウィンドウ更新パケットループの途中であっても、ACKNo及びSeqNoは、必ず、ローカルレシーバのMSTCPからの、瞬間的な最新の送信された「最大の」ACKNo、「最大」なのでMSTCP再送信のより小さいACKNoは無視される、及び最新の送信された「最大の」SeqNoを反映しなければならないことに留意されたい)。
接続が確立され、任意のTCPフローについてリモートホストから我々のMSTCPへの次のパケットを受信せずにWaitTimeStampミリ秒が満了する場合には、3つのDUP ACK+DupNum個のDUP ACKを次々にすばやく連続して送信して、ACK番号=最新の更新されたdwACKNumber(上で記録された)引くOffsetフィールド値及びdwSEQNumberフィールド値を伴う、0バイトのウィンドウサイズをアドバタイズする。
ACK又は通常のデータパケットが次にもう一度リモートホストから受信されるまで、上記の3+DupNum個のDUP ACKを100msおきに送信し続ける。
あるいは、PauseTimeStampミリ秒が、今、次のパケットを受信せずに経過し、そのどちらが先に発生しても(注:3+DupNum個のDUP ACKのすべての保留中だが未送信の部分は、今、次のパケット又は経過したPauseTimeStampの時に即座に停止しなければならない)、その後、次の通常のデータパケット(純ACKではなく)がリモートホストからもう一度到着するまで、サイズ=dwMaxRcvWindowSizeの単一の純ウィンドウサイズ更新(AckNoフィールドにdwACKNumber−OFFSETをセットされ、DUP ACKではなく...など、且つdwSEQNumberフィールド値を有する)を50msインターバルおきに繰り返して送信し続け、次の通常のデータパケットが到着した時には、この後に、我々は、上記のステップ3の先頭でもう一度ループする(すなわち、リモートサーバを「ポーズ」するためにリモートホストからパケットを受信せずにWaitTimeStampをもう一度待つ......など)。
ブロードバンドネットワーク(国際バックボーントランスポートを介するものであっても)は、非常に非常に低ロスレートであり、非常に非常に低輻輳である。
http(ポート80シグネチャ)フローは、例えば64Kバイトのコンテンツ全体を例えば1RTTで送信することを許可されなければならない。SYNC/SYNC ACK/ACKフェーズが再送信(RFCは1秒をデフォルトとする...)に出会う場合であっても、これは、最初の64KバイトCWNDの使用を奨励するだけであるはずである。というのは、ボトルネックリンクに沿ったフローが、今や、レートを半分にされる可能性が高く...おそらく間隔をおかれてもよく(R msごとに1パケットを送信するレートペーシング、その結果、64Kバイトは、1秒にわたって均等に間隔をおかれて送信されるようになる....)、したがって、戻るACK到着間経過インターバル、例えば100又は300msなどから(送信されたSeqNoと期待され且つ経過したインターバルの後に到着しない対応する戻るACKと...が、遅延肯定応答を使用してはならないが、利用される場合に遅延肯定応答について調整することができる場合...)RFCデフォルト1秒ではなくRTT+(例えば100ms又は300ms)以内に「検出された」トリガイベント(通常はパケットドロップ...)について即座に「ポーズ」する → 捨てられる可能性が高い場合に不必要にパケットを送信しない!。64Kバイト初期CWNDは、よい選択であるはずである...ラストマイル56Kとブロードバンド媒体物理回線レートとの両方にうまく対処する。
さらに、記録された戻るACK到着間インターバルの最小値...などから、ラストマイル媒体物理回線レート(56K、ブロードバンド...など)を、曖昧でなく有用に導出することができる。
レシーバは、ローカルMSTCPが自力で通常に自発的にACKNoフィールド=<リモートTCPからの最新の記録された最大の受信されたSeqNoを有するパケットを送信する(すなわち、例えば、受信されたSeqNo内の「ギャップ」...など)のを検出する時に必ず、又は、リモートTCPからタイムアウト再送信を受信して(例えば、戻るACKs又は送信された3+DupNum個のDUP ACKが失われた...など)、リモートCWNDをもう一度ランプアップする(リモートCWNDは、今や、タイムアウト後に1MSS又は2MSSへ下に戻って下落する...)時に、3+DupNum個のDUP ACK(ACKNoフィールドに最新の最大の記録された送信された発信ACKNoをセットされて)を送信してもよい。
既存TCP輻輳制御に対する新しい形は、次になるはずである。
1.例えばTCP接続ネゴシエーション中にWindow Scalingオプション(例えば64K+ウィンドウスケール)を使用して、スケーリングファクタ0−14を介して「任意の」大きい値、例えば2^30(1ギガバイト)...に初期化されたセンダTCPWindowSize及びレシーバTCPWindowSize(スケールファクタ0=スケーリングオプションをセットする必要がない、RFC 1323を参照されたい)。
2.レシーバTCP(又はレシーバモニタソフトウェア...など)は、SYNC/SYNC ACKの際に4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイト...などのウィンドウサイズを用いてACKし、4Kバイト/16Kバイト/64Kバイト/又は任意の指定された個数のW1若しくはW1 Kバイトの分数を受信した時に、アドバタイズされるレシーバウィンドウサイズをW2 Kバイト、例えばN2*(4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイトなど)に増やし、ここで、N2は、データ通信が完了するまで、分数、例えば1.5/2.0/3.5/5.0などであり、又は、W3、W4.....Wn....などについて....などのアルゴリズム的に導出された部分である(合計2^30すなわち1Gバイト未満)。
レシーバベースドモニタソフトウェア...などが、インターセプトされたレシーバMSTCP発信パケットを変更し、アドバタイズされるレシーバウィンドウサイズ...を変更し(変更されたパケットをリモートセンダTCPに転送する前に)、したがって、継続的に増分されるアドバタイズされるレシーバウィンドウサイズだけに基づく新しいTCP輻輳制御方法を達成できることに留意されたい。
及び/又は
センダTCP(又はセンダモニタソフトウェア...など)は、SYNC時に、例えば4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイト...などのウィンドウサイズを用いてSYNC ACKし、4Kバイト/16Kバイト/64Kバイト/又は任意の指定された個数のW1若しくはW1 Kバイトの分数を肯定応答する戻るACKを受信した時に、センダウィンドウサイズをW2 Kバイト、例えばN2*(4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイトなど)に増やし、ここで、N2は、データ通信が完了するまで、分数、例えば1.5/2.0/3.5/5.0などであり、又は、W3、W4.....Wn....などについて....などのアルゴリズム的に導出された部分である(合計2^30すなわち1Gバイト未満、超える場合にはおそらく例えばSeqNoラップアラウンドの際のようにウィンドウサイズをラップアラウンドし、あるいは新しいTCP接続を継続する...など)。
センダTCP(又はセンダモニタソフトウェア...など)は、SYNC時に、例えば4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイト...などのウィンドウサイズを用いてSYNC ACKし、4Kバイト/16Kバイト/64Kバイト/又は任意の指定された個数のW1若しくはW1 Kバイトの分数を肯定応答する戻るACKを受信した時に、センダウィンドウサイズをW2 Kバイト、例えばN2*(4Kバイト/16Kバイト/64Kバイト/又はW1 Kバイトなど)に増やし、ここで、N2は、データ通信が完了するまで、分数、例えば1.5/2.0/3.5/5.0などであり、又は、W3、W4.....Wn....などについて....などのアルゴリズム的に導出された部分である(合計2^30すなわち1Gバイト未満、超える場合にはおそらく例えばSeqNoラップアラウンドの際のようにウィンドウサイズをラップアラウンドし、あるいは新しいTCP接続を継続する...など)。
センダベースドモニタソフトウェア...などが、リモートレシーバからのインターセプトされた着信パケットを変更し、アドバタイズされるレシーバウィンドウサイズ...を変更し(変更されたパケットをセンダTCPに転送する前に)、したがって、継続的に増分されるアドバタイズされるレシーバウィンドウサイズだけに基づく新しいTCP輻輳制御方法を達成できることに留意されたい。
TCPが、対称であることができ、一端が、センダとレシーバとの両方であることができる、すなわち、上記の方法が、方向性で実施される必要があることにも留意されたい。
この方法は、任意により微細でより柔軟なよりさまざまなパケット送信の制御/ペーシングを可能にすると同時に、(必要な場合に)スロースタート/輻輳制御線形増加/3DUP ACK高速再送信/タイムアウト...などのすべての他の既存のTCPエラー制御/輻輳制御機構を保存する(又は、類似する対応する機構を提供した)。
例えば、CWNDをランプアップするための3+DupNum個のDUP ACKの送信の以前の方法(又はDivisional ACK技法若しくはOptimistic SACK技法...など)(例えば、初期高速再送信でのSSthresh値への付随する損害、Optimistic ACKを使用する場合のエンドツーエンドTCPセマンティクス...などを伴う)ではなく、同一の目的及びより多くを、よりよく達成することができる(例えば、付随する不利益なしの、例えば3+DupNum個のDUP ACKによるアドバタイズされるウィンドウサイズ値の増分...など)。
センダのCWNDは、所望の初期値4Kバイト/16Kバイト/64Kバイト/又はW Kバイト...などになるように初期化されなければならず、あるいは、レシーバは、例えば3+DupNum個のDUP ACK又はさまざまな時の一連のそのようなDUP ACK又はOptimistic ACK...などを送信して、CWNDを当初にランプアップすることができる(既存RFC 2414/3390は、既に、4Kバイト初期CWND値を許容し、その場合に、CWNDをランプアップする必要はない)。現在のインターネット上の既存サーバは、既に、SSthreshに任意の大きい値(例えば=TCPウィンドウサイズ値)をセットし、これは、CWND値のすばやい指数関数的ランプアップを可能にするはずであるが、大きいSSthreshセッティングがない場合に、レシーバは、多数例えば3+DupNum個のDUP ACKを送信して、CWNDの線形ランプアップを引き起こすことができる(例えば、1000個のDUP ACK=40Kバイト=320Kビット、これは、ブロードバンドを用いて十分に1秒未満ですべてを送信して、1KバイトのSMSSを仮定すれば1MバイトまでCWNDをランプアップし、あるいは16というスケーリングされたウィンドウファクタの場合に16MバイトまでCWNDをランプアップすることができる)。例えば16のスケーリングされたウィンドウファクタを用いると、最小ウィンドウサイズ増分分解能は、16バイトになるすなわち、例えば5/8/15...バイトなどによる増分は不可能になるはずである。連続的に増分されるアドバタイズされたレシーバウィンドウサイズ法を用いると、レシーバは、センダが均等に間隔を置かれた/パケット間で均等に遅延されたパケットを送出する必要なしに、パケット注入のセンダのレートを「レート制限する」ことができる。この方法を十分に利用するのに、ウィンドウスケールファクタなしで十分である可能性がある(例えば、スケーリングオプションなしの例えば64KバイトのTCPウィンドウサイズ)ことに留意されたい。というのは、許容可能な送信ウィンドウが、受信されるすべての戻るACKに伴って「大きくなる」すなわち、レシーバが、ネットワーク状態のトリガイベントの知識(及び/又は例えば受信された最新の有効SeqNo/送信された最新の有効ACKNoの知識...など)を利用して、アドバタイズされたレシーバウィンドウサイズを継続的に増分し/減分し/調整して、輻輳したネットワークが「トリガイベント」を介して検出され、rwndを例えば48/56/64Kバイト...などに拡大する時に、rwndを、したがって例えば4/16/32/40Kバイト...などのrwnd値のmin(cwnd,rwnd,swnd)であるセンダの有効ウィンドウサイズを、したがって、ネットワークが輻輳していない/十分に利用されていないことが検出される時にセンダの有効ウィンドウサイズを継続的に調整することができるからである。この方法を、それ自体で又は例えば「ポーズ」法などの任意の他の方法と組み合わせて利用できることに留意されたい。注:同期化パケット法は、継続的に調整されるrwnd値を搬送することができる。
リモートサーバでの変更(初期CWND、SSthresh値セッティングに対する)を一切伴わずにレシーバ側のみでこの方法を実施するために、レシーバは、この方法をアクティブ化し、したがってCWNDが十分に大きくなる前に、ある秒数又はある個数のRTT又はある個数のパケットが経過し/受信されるのを待つために(介在するセンダのRTOタイムアウト及び/又はレシーバ高速再送信要求なしで:これらが発生する場合には、レシーバは、センダの保留中のRTOタイムアウトの前であってもすぐにこの方法をアクティブ化し...など、センダのRTOタイムアウトを避けること)を選択することができる、この故に、すべての高速再送信要求が十分に高いSStresh(=既にフライト中のすべてのパケットの後、3DUP ACKs高速再送信要求の前のCWND/2)を維持するはずである。要求された場合に、又はコンテンツ全体が通常は<64Kバイトであるhttpウェブサイトアクセスで有利に)、レシーバは、SYNC/SYNC ACK/ACKの直後に又は受信された1つ若しくは2つの通常のデータパケットの直後に、Optimistic ACK(ACKNo=受信された最新の有効なSeqNo+例えば4/16/32/64Kバイト...などを有する、これは、SSthreshに影響しない)によってCWNDを即座にランプアップすることができ、それと同時に、同一リモートIP番号と同一ポート番号と同一ソースIP番号とを有するが異なる指定されたポート番号を有する並列TCP接続を確立することができ、ここで、SYNC/SYNC ACK/ACKの直後又は受信された1つ又は2つの通常のデータパケットの直後に任意選択でセンダのCWNDを3+DupNum個のDUP ACKを用いてランプアップし、その結果、センダのCWNDは、今=例えば4/16/32/64Kバイト...などになる(又は、オリジナルTCPの初期データパケットがすべて成功して受信されてはいない時に限ってランプアップする):オリジナル接続が例えば4/16/32/64Kバイトのすべてを成功して受信した場合に、第2TCP接続を、今や、RSTリセットを介して即座に終了することができ、そうでない場合に(又は、オリジナルTCPと同時に)すべての欠けている初期4/16/32/64Kバイト分のパケット/セグメントを、第2TCP接続から入手することができる(例えば、変更されたソフトウェアによってオリジナルTCPレシーバソケットに転送する...変更されたソフトウェアは、必要な場合に、例えば最初の4/16/32/64Kバイト受信中のオリジナルTCP接続の認証パケットが存在する場合にその認証パケットなど、両方向でのすべてのパケットフローを記録することもでき、且つ、スクリプトは、最初の4/16/32/64Kバイト受信中の第2平行TCP接続に正確に同一のシーケンスを注入する)。CWNDが、例えばここで最大値64Kバイトに初期化された場合であっても、レシーバは、それでも、当初に2/4/8Kバイトのrwndを送信し、イベントに従ってrwndを増分し/調整する(例えば、ウィンドウ更新パケット又は通常のデータパケット)ことによって、例えば2/4/8バイト...などで開始して、センダの注入レートをペーシングすることができる。
注:例えば受信される最初の通常のデータパケット(又はより多くの...、又はセンダTCPからのSYNC ACKの受信の直後にさえ)を待って、その後にセンダのCWNDを例えばACKNoフィールドに通常の最大の最新の有効なSeqNo−1ではなく受信された最大の最新の有効なSeqNoをセットされた3+DupNum個のDUP ACKによってランプアップし(すなわち、TCPセッション全体を通じて最大の受信された1バイトをACKするのを抑制する、又は任意選択で)、且つ、その後、連続的に増分するアドバタイズされるレシーバウィンドウサイズ法を(両端での十分に大きいウィンドウスケーリングと一緒に)利用することによって、我々は、今、両端のTCP送信レートをトータルコントロール及び保存されたTCPセマンティクスの下に成功して置いている(且つ、「ポーズ」法を用いて、両端のTCPは、今、「ポーズ」輻輳制御だけを受けるフルワイヤスピードで送信することができる、すなわち、CWND、両端のTCPのウィンドウサイズ、SSthresh...などは、TCPフローが安定したならば、ある時点でさらなる役目を演じる必要がない...しかし、適当なより小さい値から開始し、例えばフル許容可能物理ワイヤスピードレート又は現在のrwndサイズによって許容される伝送速度まで増加する、連続的増分rwndを使用することが好ましい(フローは、今、「安定化」されるように増加した...)。
明らかに、センダの最大送信レートは、min(swnd,cwnd,rwnd)−肯定応答されていない送信されたセグメントに依存し(又は、ここでのswndが、同一の当初にネゴシエートされたウィンドウサイズスループットで固定されている場合に、肯定応答されていない送信されたセグメントは、swndを減らし、肯定応答されたセグメントは、swndを増やす)、且つ、RWND連続増分/減分/調整法は、これをrwnd更新で考慮する。
また、リモートサーバTCP送信レートを、今、rwndだけを調整することによってペーシングすることができる(リモートサーバのcwnd、ssthresh、swndは、今、必ず、任意に大きい又は非常に大きい値に維持することができる)ので、レシーバベースドソフトウェアは、rwndウィンドウ更新の値の動的選択を介してリモートセンダの送信レートを動的にペーシングすることができ、したがって、リモートサーバTCP宛のすべてのインターセプトされたレシーバMSTCP生成パケット内のすべてのrwndフィールド値を、センダの送信レートをペーシングするのに必要なrwnd値に変更することができる(これは、パケットチェックサム再計算変更を必要とするはずである)。
レシーバベースドソフトウェア/TCP(センダベースドソフトウェア/TCP変更として実施することもできる)は、タイムスタンプフィールドから到着するOTT値を有利に監視することができ、OTT値が、小さい許容される変動(例えば、センダのOS/スタックCPU処理時間での小さい変動に起因する)の中で最新のOTTest(min)と同一(又は、以前に既知の実際の非輻輳OTTと同一)のままになる間に、レシーバベースドソフトウェア/TCPは、達成された最新の最大のrwndを書き留める → これは、その間に経路をトラバースするパケットが多くとも上と同一の小さい許容される変動(及び/又は+許容される累積バッファ遅延、例えば0ms/50ms/100ms...などの追加のB ms)のバッファ遅延又は累積バッファ遅延に全く出会わない、これまでに達成された最大のrwnd値を与える → その後、パケットが輻輳ドロップされる時に必ず、レシーバベースドソフトウェアは、有利に/任意選択でrwnd更新値(インターセプトされたパケット内の変更されるrwndフィールド値)に、前述で定義されるこの最新の最大の記録されたrwnd値をセットすることができる → すなわち、輻輳ドロップイベント及び/又は高速再送信イベント...などの際に、レシーバは、センダの送信レートの維持されたペースに継続し、その結果、レートを、輻輳していないトラバースされた経路条件の下のフローによって達成されたヒストリカル最高レートで維持することができるようになり、したがって、非常に理想的な高いリンク帯域幅利用度が維持されるようになる。さらに、レシーバソフトウェア/TCPは、到着するOTT値が最新の(又は実際の非輻輳OTT)OTTest(min)を超えないすなわち、経路に沿ったバッファ遅延がない限り、継続的にrwndを増分することができ(スロースタート指数関数rwnd増大及び/又は輻輳回避線形増大のどちらをエミュレートするにせよ)(及び/又は任意選択で、到着するOTTがOttest(min)を超える場合に下向きに減分する、さらに、しかし、到着するOTT値が、例えば指定された10ms/50ms/100ms...などだけ最新の(又は既知の実際の非輻輳OTT)OTTest(min)を超える(例えば、パケットがバッファリングされ始める時であってもそのレートを増分する他の未変更既存TCPフロー又はUDPトラフィックに起因する)時に、レシーバベースドソフトウェア/TCPは、今や、rwndをもう一度増分することを許可することを選択することができる...。
経路に沿ったすべてのTCPフロー(その帯域幅の最小の保証された部分をTCPフローに、及びある部分をUDPに...などに便利に割り当てることもできる)が、直前の段落で述べた変更されたTCPである場合に、そのようなTCPが、必ずバッファリングが要求されることを全く引き起こさないことに留意されたい → ほとんど完全に輻輳していない/バッファリングされない経路が常時維持される。先在する変更されたTCPがトラバースされるリンクの全帯域幅のフル利用度を既に一緒に達成した時に、新たに確立される変更されたTCPの増大を可能にする公平な共有を保証するために、新たに確立されるTCPは、例えばOTTest(min)又はRTTest(min)又はそれらの既知の実際の値の100msの余分の遅延を超えないところまでその送信レート又はrwnd又はcwndを増大させることを許可されることができ、すべての変更されたTCPは、例えば>100msの余分の遅延を経験する時に、すべてが、ある比率、例えば10%/15%/25%...などだけその送信レート又はrwnd又はcwndを減らすはずである(これは、先在する確立されたフローに味方するが、新しい確立されたTCPがその送信レート増大を達成し始めることをも可能にする)。ここで、トラバースされるすべてのノードが例えば100ms同等分より多いバッファを有する限り、輻輳ドロップがないはずであることに留意されたい。もう1つの方式は、パケットがバッファリングされ始めることの始まり(最新のOTT又はRTTのOTTest(min)又はRTTest(min)の余分の遅延によって示される)まで、連続的な送信レート又はrwnd又はcwnd...などの増大を許容することであり、パケットがバッファリングされ始めることの始まりの時には、その送信レート又はrwnd又はcwndは、後ろ向きに1ステップだけ減分される(したがって、100%利用度レベルの前後での振動する前向きの増分及び後ろ向きの減分)。
上記のさまざまな方式を、センダベースドTCPとして同様に簡単に実施できることにも留意されたい。
単純に例えば輻輳ドロップイベント(その時には、変更されたTCPは、全体的な輻輳していない条件の下での最大の達成された送信レート若しくはrwnd若しくはcwndサイズ又はそのパーセンテージ、あるいは単純に輻輳ドロップが発生する時の現在の送信レート若しくはrwnd若しくはcwndサイズのパーセンテージ...などに戻る)まで送信レート又はrwnd又はcwndの増大を可能にすることは、現在のRFC標準TCPフローとのよい共存を可能にする。「ポーズ」法が組み込まれる場合に、「ポーズ」インターバルは、検出された輻輳ドロップの直前の最新のOTT値又はRTT値及びOTTest(min)又はRTTest(min)あるいは既知の輻輳していない実際のOTT値又はRTT値から導出することもできる:例えば、輻輳ドロップイベントの直前の最新のOTTが700msであり、OTTest(min)が200msである場合には、今や、すべてのノードのバッファリングされたパケットを完全にクリアするために、「必要な」ポーズインターバルに例えば500ms(700ms−200ms)を、又は必要に応じてより多く、例えば600ms又はより少なく、例えば400msさえセットすることができる。
複数の可能性の中の、例のレシーバベースド実施態様(センダベースドは、類似するがより単純になるはずであることに留意されたい)は、単に、レシーバが、ウィンドウスケールオプションを要求することであり、例えば、256Mバイトの最大値へのスケーリング(最大の可能なスケーリングは、1ギガバイトすなわち、2^14*64Kバイト又は通常のスケーリングされない16ビットウィンドウサイズを左に14回シフトするが、ここで、最大値256Mバイトは、12のウィンドウスケールファクタすなわち、2^12*64Kバイト又は通常のスケーリングされない16ビットウィンドウサイズを左シフトする:Google Search用語「window scale size」、http://rdweb.cns.vt.edu/public/notes/win2k−tcpip.htm、http://support.microsoft.com/default.aspx?scid=kb;en−us;199947、http://www.netperf.org/netperf/training/netperf−talk/0207.html、http://www.ncsa.uiuc.edu/People/vwelch/net_perf/tcp_windo ws.html、http://www.monkey.org/openbsd/archive/bugs/0007/msg00022.html、http://www.freesoft.org/CIE/RFC/1072/4.htm、http://www.freesoft.org/CIE/RFC/1323/5.htm、http://www.networksorcery.com/enp/protocol/tcp/option003.htm、http://www.ehsco.com/reading/19990628ncwl.html、Google Group Search用語「window scale size」、http://rdweb.cns.vt.edu/public/notes/win2k−tcpip.htmを参照されたい)は、4Kバイトレシーバウィンドウサイズ(4Kバイトは、たまたま、実験的RFCの初期CWND値に対応する)の最小の可能な分解能を与える。
1.リモートサーバは、スケーリングされたセンダウィンドウサイズを対応して選択することができるが、単純に、レシーバがスケーリングするが、それ自体のセンダのウィンドウサイズをスケーリングしないことを選択することを許容することもできる:これは、さほど重要ではない(そのようなネゴシエートされたウィンドウサイズ(1つ又は複数)が、ラストマイル及び/又はファーストマイルの物理帯域幅、例えば56K/500Kbs...などについて大きすぎる場合であっても)。
注:センダが、レシーバに類似するウィンドウスケーリングファクタを行う場合に、これは、例えば単純にレシーバPCのTCPWindowSizeレジストリ値に例えば1をセットし、例えば2^14の例えばスケールファクタ(最小ウィンドウサイズ分解能は、今は約4Kバイトである)をセットすることによって、必要なすべての新しいソフトウェア又は変更されたTCPなしで、この方法の非常に単純で準備のできた使用を可能にすることができ、したがって、センダの有効送信ウィンドウは、レシーバが今はそのrwndに多くとも4Kバイトを常時セットするだけであるはずなので、常時、約4Kバイトまでに制限される(2のTCPWindowSizeレジストリ値及び14のスケーリングされたファクタというレシーバPCのレジストリセッティング又はアプリケーションソケットバッファのセッティングを用いると、これは、約16Kバイト*2すなわち32Kバイトの分解能を与える)。
2.レシーバは、必要な場合に、すべてのインターセプトされた発信パケットを変更し、それらのレシーバウィンドウサイズフィールドのそれぞれが、常時、適切な上側シーリング値、例えば56Kレシーバラストマイルのダイヤルアップについて16Kバイト、又は例えば500kbsレシーバのラストマイルDSLについて96Kバイト...などを超えないことを保証する。
[ここでの単純な非常にエレガントな配置は、今、TCPセッションの全体を通じた超高速指数関数的センダのCWND増大を保証し終えているはずであり、例えば、常時、64KのCWNDに達するために例えば約64RTT時間を必要とするのではなく、多くとも6RTT時間だけを必要とする(センダの初期SSThreshに、非常に大きく、スケーリングされたレシーバウィンドウサイズと同一の値がセットされることに留意されたい)、しかし、センダの最大有効送信レートは、常時、受信された変更されたレシーバのウィンドウサイズ上側シーリングの値までに制限されるはずである → センダの送信レートは、常時、必ず、レシーバのウィンドウサイズ上側シーリングによって許容されるものを超えず、センダの「スラインディングウィンドウ」サイズ及び戻るACKを介する「セルフクロッキング」特性によってさらに支配される(戻るACKのレートが、通常はファーストマイル又はラストマイルの媒体リンクにある、最小ボトルネックリンクの使用可能帯域幅を反映することに留意されたい)。経路に沿ったバッファ遅延の始まりは、センダのBDPスループットを低速化するはずであるが、制限された輻輳パケットドロップは、レシーバに3DUP ACK高速再送信を要求させ、このセンダの今は半分にされているCWND及びSSthresh値が、最も確かに、常時レシーバのウィンドウサイズ上側シーリング値より非常にはるかに大きいままになり続けるはずであるが、持続される輻輳パケットドロップは、センダにRTO再送信をタイムアウトさせ、このセンダのCWNDは、今、例えば4MSSでもう一度スロースタートするが、やはりすばやく指数関数的に増大するはずである → すべてのそのようなTCPフローのセンダのCWNDが、今、それらのセンダのレシーバのウィンドウサイズの上側シーリングまでに制限されるが、ほぼ常時その近くに維持されることがわかる...。
3.任意選択で、レシーバは、発信パケットのレシーバウィンドウサイズフィールドをゆっくり増加することによって、センダのネットワークへのパケットの注入レートをペーシングすることができ、例えば、TCP確立直後に、レシーバは、4Kバイトから開始し、次に8Kバイト、次に12Kバイト...次に64Kバイトで、例えば1秒の間に例えば62.5msおきに、等間隔で均等なタイミングの一連の例えば16個の純ウィンドウ更新パケットを送信することができ(即座に64Kバイト上側シーリングウィンドウサイズをアドバタイズするのではなく、このアドバタイズは、パケットバーストを引き起こすはずである)、したがって、センダからの突然の大きいパケットバーストがないことを保証する(戻るACKは、この一連のウィンドウサイズ更新中に存在する場合に、可能なパケット注入レートを増やすはずであるが、しかし、レシーバは、任意選択として、これを考慮に入れてウィンドウ更新サイズ値を減らすことができることに留意されたい)。レシーバは、任意選択として、進行中のパケットのレシーバウィンドウサイズフィールド値を、適当な場合にいつでも変更することができる。同様に、そのようなウィンドウサイズ更新/変更は、おそらくは最新の発信する送信された戻るACKの値...などを考慮に入れて、いつでも増分/減分/調整の任意の所望の形で実行することができる。これは、TCP接続確立の直後に最高速の最適の形でhttpウェブサイトコンテンツをフェッチするのに有用になり得る(すなわち、その後、例えばレシーバの可能なラストマイル物理最大回線レートで送信するためのセンダのペーシング:センダに1RTTで例えば64Kバイトコンテンツのすべてを即座にバーストさせることが、非生産的である場合があることに留意されたい...)。
4.さらに、任意選択として、これを、「ポーズ」法及び/又は「パケット到着間」法及び/又は前の段落で説明したさまざまな方法...などと一緒に実施することができる。例えば、ここでの非輻輳RTT/OTTが例えば50msである場合に、「ポーズ」法は、ここで、2つの端の間の非輻輳RTT/OTT(又は最新の推定された非輻輳RTT/OTT)値と例えば200msのバッファ遅延との和であるタイムアウト期間と、例えば150msのタイムアウトの際の「ポーズ−インターバル」とを指定することができる→ここでのボトルネックリンクの帯域幅を、常時コンスタントに100%利用することができる。というのは、ここでの「ポーズ」法が、1バッファ内で占有される累積的なトラバースされる経路のバッファの占有をいつでも小さい範囲に保つように努力する、すなわち、ボトルネックリンクを常に100%利用できるからである。
この故に、本明細書のセンダのCWND機構は、いくつかのステージで輻輳制御目的の達成における要件に対して冗長であることに留意されたい(RTOタイムアウトイベントを避ける、輻輳トリガイベントの際にCWNDサイズをすばやく増分するためのパケット到着間法プラス3+DupNum個のDUP ACK...などの他のコンポーネント方法が組み込まれない場合を除く)。この場合には、この故に、CWNDが、非常に大きい値を達成するためのまさに初期ステージの指数関数的及び/又は線形の増大中のネットワーク使用可能帯域幅プロービングの部分役割だけを演じ続け(接続の最大送信レートが、いつでも、例えば、レシーバが例えば64Kのrwnd値をアドバタイズするのではなくスケーリングされシフトされたフォーマットでアドバタイズする例えば比較的非常に小さいrwnd値までに制限されはするが)、レシーバTCPは、今や、最大のスケーリングされたファクタ14が利用される場合に、12位置だけ左シフトされた4すなわち64Kと同一のrwnd値を示す、4だけをアドバタイズする:両端が、今は非常に大きい最大のスケーリングされたウィンドウサイズを許容する/ネゴシエートしたが、レシーバTCPは、その通常の物理的な現在の最新の使用可能最大レシーバウィンドウサイズをアドバタイズすることだけができ、例えば、その物理的な最大の可能な受信ウィンドウバッファリソースが16Kである場合に、14の最大のスケーリングされたファクタが利用されると仮定して、レシーバTCPによって生成されるすべてのパケット内のアドバタイズされる受信ウィンドウサイズフィールドは、常時1の最大の可能な値を示すだけになるはずであることに留意されたい)その後、3DUP ACK高速再送信/回復の際のCWND値及び/又はSSthrsh値を半分にする場合であっても、半分にされたCWND値及び/又はSSthrsh値は、rwndと比較して非常に大きいままである:ネットワークが非輻輳したままになる場合に、センダは、スライディングウィンドウ内の使用可能セグメント/バイト(戻るACKのセルフクロッキング特性に依存する)及び/又はrwnd若しくはcwndサイズによってのみ制限される最大レートで幸福に送信し続けることができ、3DUP ACK高速再送信要求の際に、センダの最大送信レートは、今や、スライディングウィンドウ内の使用可能セグメント/バイトによってのみ制限され(スライディングウィンドウ内のこの使用可能セグメント/バイトは、今、まだ肯定応答されていない送信されたフライトパケットの比率/個数によって適当に減らされるが、ここで、CWNDとSSThreshとの両方が半分にされても、半分にされたCWND及びSStreshが、それでもRWND又はSWNDよりはるかに大きいので、このCWND及びSStreshは、全く影響を有しない)、したがって、事実上、送信レートは、今、適当に比例して減らされ、RTOタイムアウトの際に(通常、1秒というRFCの最小下側シーリング時間期間の後)、センダ送信レートすなわち1又は複数SMSSのリスタートCWNDによって支配される値は、今、最小値まで減らされるが、実際に、RTOタイムアウトの前と同一の送信レートをほぼ必ず保持することができ、というのは、ここでのセンダが、通常、RTOタイムアウトの前に有効ウィンドウ分のセグメント/バイトの非常に大きい部分又は全体全部を送信し終えているからであり、したがって、多数のRTOタイムアウトの連続する即座の送信は、続くまだ肯定応答されていない送信されたセグメント/パケットの連なりによって引き起こされる連続ですばやく続き、有効スライディングウィンドウ内の送信された肯定応答されていないすべてのセグメント内のそのような「輻輳ドロップ」パケットの比率のサイズ/個数は(すべてが輻輳ドロップされた場合であっても)、例えば1秒RTOタイムアウトイベントの後にセンダの送信レートを減らさないが、センダは、RTOタイムアウトの前の例えば1秒の期間中にすべての送信を停止しているはずである → すべての介在するノードのバッファリングされたパケットは、この/これらの特定の変更されたTCPごとのフローのバッファリングされたパケットの例えば1秒と同等の量(又は他のフローのバッファリングされたパケットの同等の量)をクリアされ、また、例えば1秒と同等の量は200ms〜500msというノードの通常のバッファ同等容量をはるかに超えるので、ほとんどの他の未変更の既存TCPフローのバッファリングされたパケットの例えば1秒と同等の量(又は他のフローのバッファリングされたパケットの同等の量)をクリアされる可能性が非常に高く、いくつかの他のTCPフローは、変更されていようといまいと、後に、RFCの最小値1秒より長くタイムアウトすることができ(そのRTTが普通でなく非常に長い場合に)、すべてのトラバースされたノードのバッファリングされたパケットの全体的なクリアを保証するのを助ける(すべてのフローが、いくつかがわずかに後の時になる可能性はあるが、RTOタイムアウトするはずなので)[注:これは、1秒の大きい「ポーズ」インターバルと同義である]。
この方法は、その最も単純な形で、ユーザがローカルPC TCPレジストリパラメータをセットして、例えば12のスケールファクタなど、大きいウィンドウスケールファクタを利用することだけを必要とするが、16ビットの通常のTCPWindowSize値は、例えば1バイトから64Kバイトなど、必要なだけ小さく又は大きくセットすることができる:12のユーザPCスケールファクタすなわち256Mバイトの最大の可能なスケーリングされたウィンドウサイズ値及びわずか1のユーザPC TCPWindowSize値と、例えば12のリモートサーバのネゴシエートされたスケールファクタ及び例えば64KバイトのリモートサーバTCPWindowSizeとを用いると、リモートサーバ最大送信レートは、いつでも、RTTあたり4Kバイト(1*2^12)のユーザPCのスケーリングされたウィンドウサイズを超えない(中間ソフトウェアがある場合に、その中間ソフトウェアが、ユーザPCからの発信パケットをインターセプトせず、4Kバイトより大きくなるようにそのrwndフィールド値を変更しないと仮定して)。リモートサーバのSsthresh値が、通常は、TCP接続確立中にネゴシエートされたrwnd値と同一になるように初期化されることに留意されたい。センダでこの方法を実施するために、リモートサーバは、リモートサーバのTCPスタックがそのSStresh値を任意に非常に大きくなるように、例えば「無限大に」固定し、TCP接続ネゴシエーションに関してウィンドウスケールオプションを利用する(且つ/又は、そのCWND値をその最大の達成された増大スループットに固定するすなわち、CWNDは、例えば1SMSSの初期RFC値から継続的に増分することができるが、絶対に減分できない)ことだけを必要とする。
変更されたTCPを利用することは、スループットを増やし、例えば専用回線/DSL上のデータストレージサイトバックアップアプリケーション...など、大きいファイルのftp転送完了時間を減らすことが注目されてきた。これは、既存TCPを用いると、センダが、必ず、常時その送信レートを増やす、すなわち、CWNDが、輻輳に起因してパケットが捨てられるまで単調に増加するからであり、輻輳に起因してパケットが捨てられる時には、センダTCPは、その送信レートをアグレッシブに減らす、すなわち、CWNDを例えば1SMSSにリセットし、RTOタイムアウトの直前(又は、3DUP ACK高速再送信要求の直前、この時には、センダの送信レートすなわちCWNDが半分にされる)の達成された送信レート又は達成されたCWNDサイズまで戻る非常に長く遅いクライムアップを開始する。TCPフローが、3DUP ACK高速再送信機構をイネーブルしていないと仮定すると、ここでのフローの送信レート又はスループット又はCWNDグラフは、繰り返される最大値までの既知の「鋸歯」パターン低速線形クライミング及びその後の「0」付近に戻る突然の下落を示す、すなわち、リンクの物理使用可能帯域幅の半分までが浪費され使用されていないことが、即座に明白であるが、変更されたTCPフローは、ほぼ一定の100%のリンクの物理使用可能帯域幅利用度の送信レート又はスループット又はCWNDグラフすなわち、未変更のTCPフローのスループットの2倍までを示す/転送完了時間を半分にするはずである。3DUP ACK高速再送信機構がイネーブルされた状態で、TCPフローのグラフは、前の送信レートレベルの半分及び「0」付近への突然の下落の混成を示すはずであり、したがって、変更されたTCPフローは、未変更のTCPフローと比較して、33%〜100%だけより多いスループットの間のどこかを示すはずである→リンクの「見かけの」物理帯域幅を瞬間的に2倍にすることまでをおそらくはイネーブルした、ここで、リンクは、専用回線/大陸間海底光ケーブル/衛星/無線...などとすることができる。
要点を繰り返すと、上記の直前の段落の「大きいセンダのスケーリングされたウィンドウサイズ」法は(いずれかの端での接続が実際にそのような大スケールウィンドウサイズの実際の必要を有しない場合であっても)、ソフトウェア又は既存の標準TCPに対する変更を全く必要とさえせずに、PCユーザによって即座に利用されることができる:ユーザは、彼らのPCのTCPシステムパラメータを手動でセットし、大きいスケーリングされたセンダウィンドウサイズ(例えば、TCPWindowSize及び/又はmaxglobalTCPWindowSize、Window 2000では、TCPWindowSizeを64Kバイトより大きくセットすると、ウィンドウスケールファクタが自動的にイネーブルされるはずである)、TCP1323opt 1又は3(1は、ウィンドウスケールファクタをイネーブルするがTimeStampオプションなしであり、3は、TimeStampオプションを伴う)、1と2^14との間のWindow Scale Factor値をイネーブルすることができる。レシーバTCPは、センダTCPがウィンドウスケールオプションをネゴシエートすることを可能にしなければならないが、レシーバTCP自体の受信最大ウィンドウサイズは、IPパケットによってトラバースされる経路の「ボトルネックリンクの帯域幅容量」を完全に利用できるようになるだけのために、好ましくは比較的小さく保たれなければならない(ここでのボトルネックリンクは、通常、センダのファーストマイル媒体、例えばDSL又はレシーバのファーストマイル、例えば専用回線のいずれかである):例えば、この2つの端の間の非輻輳RTTが例えば100msであり、全体を通して、この例えば100ms値で完全に一定のままであり、ボトルネックリンクの帯域幅容量が2mbsであると仮定すると、ここでのレシーバ最大ウィンドウサイズは、比較的小さく、例えばわずか25.6Kバイトまでに保たれ/セットされなければならない(これは、センダTCPのCWNDが例えば25.6Kバイトのレシーバの最大ウィンドウサイズをすばやく達成する/はるかに超えるために増大し、その後、この非常に大きいスケーリングされた最大ウィンドウサイズ値によって許容される非常に大きい値で完全に維持される場合であっても(これは、高速再送信を引き起こすパケットロス/破壊イベントが、今や、センダTCPの半分にされたCWNDサイズ及び半分にされたSstresh値にほとんどいつでも例えば25.6Kバイトのレシーバの最大ウィンドウサイズの下まで急降下させないことを保証する)センダTCPの「有効ウィンドウサイズ」がいつでも25.6Kバイトを超えず、したがっていつでも2mbsより高いレートで送信しないことを保証する。センダCWNDサイズが例えば1SMSSにリセットされたRTOタイムアウト再送信を引き起こすパケットロスイベントの後には、非常により希に、センダTCPのCWNDが、わずか5*例えば100ms RTTすなわちわずか500msで例えば25.6Kバイトのレシーバの最大ウィンドウサイズを非常にすばやく再達成し、これを超えることができる)。ここでの送信レートグラフ/瞬間スループットレートグラフ(Ethereal’s IO−Graphsトラフィックディスプレイ分析ファシリティhttp://ethereal.comを使用して見ることができる)は、ほぼ一定の100%により近いリンク帯域幅利用度を示すはずである、すなわち、ここでのグラフは、100%リンク利用度レベルからはるかにより遠い鋸歯の谷に平坦部を有する「鋸歯」形をほとんど一定不変に示す既存の標準TCPと比較して、100%リンク利用度レベルにより近い最上部の平らな平坦部を有する「方形波信号形」に似るはずである。
しかし、現実の公衆インターネットでは、2つの端の間のRTTは、エンドツーエンド接続のRTTがキャリアのIPトランジットサービスレベル契約保証されたRTT/帯域幅によって保証されない限り、経時的に桁だけ(例えば数十ミリ秒から200msに)変化する可能性があり、したがって、例えばレシーバ最大ウィンドウサイズ...などを介するボトルネックリンクの帯域幅容量へのセンダの送信レートのその「スロットリング」は、公衆インターネット上のそのようなRTTが長くなる時に、そのような時間中に桁のスループット及び/又は「グッドプット」の劣化をこうむるはずである:そのような長くなる公衆インターネットのRTTのシナリオに対処できるようになるために、ここでのレシーバの最大ウィンドウサイズにはるかに大きい値をセットすることがはるかによく、例えば、レシーバの最大ウィンドウサイズに、今、例えば8*以前の例えば25.6Kバイトがセットされる場合に、エンドツーエンドスループット及び/又は「グッドプット」は、RTTがこの2つの端の間の非輻輳RTTの8倍を超えて長くはならないと仮定して、いつでも100%ボトルネックリンクの帯域幅容量の近くに維持することができる。
センダTCPのCWNDが、安定し、増加していない時(例えば、CWNDが、最大センダウィンドウサイズ値に達し終えている時)に、センダTCPが送信できる量(TCPスライディングウィンドウ)を支配するのは、ACKセルフクロッキング機能である、すなわち、到着する戻るACKのレートに従ってであり、この戻るACKの最大レートは、やはり、トラバースされた経路のボトルネックリンクの帯域幅容量すなわち、センダからどれほど高速にボトルネックリンクに沿ってデータを転送できるかに制限され、これが、バイト毎秒単位でのボトルネックの帯域幅とほぼ等しい(非データIPパケットヘッダに必要な例えば40バイトのオーバーヘッドを無視する場合に)ことに留意されたい。センダTCPのCWNDが、「スロースタート」フェーズで指数関数的に増分し続ける時に、CWNDは、実際に、各連続するRTT中に、戻るACKの個数に従って増分する(必ずしも各連続するRTT中に指数関数的に2倍にするのではなく)、すなわち、TCPの現在のCWNDが、8Kバイトであり、8Kバイトのデータセグメント(最大センダサイズ及び最大ウィンドウサイズによって許容され、十分な返されるACKを伴う十分な「有効ウィンドウ」...を仮定して)を送出し、次のRTTで6つだけが返され、2つが捨てられる場合に、CWNDは、「スロースタート」であると仮定して、今や、14Kバイトに増分するだけ(16Kバイトに2倍にされるのではなく)になるはずである。輻輳は、現在の増分されたCWNDサイズ(したがって、受信された戻るACKの個数の増加によって引き起こされるのではなく現在増やされている有効ウィンドウ)は、送信レートにボトルネックリンクの帯域幅容量によって転送できるものを超えさせるはずの値未満のままである限り、生じない。しかし、送信レートが、今、ボトルネックリンクの帯域幅容量の送信レートより大きい場合に、いくつかの送信されたパケットは、今、ボトルネックリンクでバッファリングされ始める(インターネットノードは、通常、約200〜400msと同等のバッファ容量を有する)。センダの送信レートが、ボトルネックリンクの帯域幅容量の送信レートと正確に一致する段階で、CWNDが次のRTTでサイズにおいて今や「2倍にされた」時に、ここでのRTTが100ms前後に留まると仮定すると、この、次のRTTで、この余分の帯域幅容量を超える100msと同等分のパケットは、ボトルネックリンクノードでバッファリングされることを必要とする。連続するRTTでの戻るACKのレートが、今、最大ボトルネックリンクの帯域幅容量又はその前後に留まる(すなわち、ボトルネックリンクは、100%リンクの帯域幅利用度でデータを転送し続ける)と仮定すると、センダのCWNDは、ボトルネックノードが今やバッファを使い果たし、したがってパケットを捨てさせる、例えば4番目の連続するRTTまで、各続く連続するRTTでボトルネックリンクの帯域幅容量と等しい量だけ連続して増分され、各連続するRTTは、増分されたCWND(又は増分された有効ウィンドウ)によって導入される余分のバッファリングされるパケットトラフィックの連続する例えば100ms同等量に起因して、直前のRTTよりわずかに長い。次に、センダは、レシーバTCPから3つのDUP ACKを受信した時に、捨てられたパケットを高速再送信する可能性が高く、その場合に、現在は半分にされているCWND及びSSthresh値さえもが、それでも、ほぼ一定不変に、相対的に小さいレシーバ最大ウィンドウサイズ値よりはるかに大きいままになる→したがって、センダTCPは、その後、これらのパケットドロップイベントによって減らされない同一の以前のレートで送信し続けるはずであり、ACKがボトルネックリンクの帯域幅容量と等しいレートで戻るので、センダの送信レートは、今や、ボトルネックリンクの帯域幅容量(これが、レシーバの最大ウィンドウサイズ以下であると仮定して)と等しい正確な最大レートであり続けるはずである。センダが、まだレシーバの3DUP ACK高速再送信要求によって世話されていない場合に、最小1秒の既存RFCデフォルト最小時間期間の後に限って、捨てられたパケットのRTOタイムアウト再送信も行うことができるが、これらが、非常にはるかに希であり:その場合に、センダのCWNDは、それでも、比較的小さいレシーバの最大ウィンドウサイズ値を再達成し/超えるために、わずか2〜3RTTで非常にすばやく指数関数的に増加するはずである(「任意の」大きいSsthresh値によって助けられて)ことに留意されたい。ここでのセンダのCWNDは、周期的な高速再送信がCWND及びSstresh値を半分にするにもかかわらず、非常に大きい値まで「指数関数的に」増加する(「維持される」任意の大きいSsthresh値に向かう傾向がある)はずである。センダのTCPのCWNDが、レシーバの最大ウィンドウサイズを達成し/超えたならば、そのCWNDは、その後、主に、戻るACKのセルフクロッキングレートの受信されたシェアになり、その総レートは、多くとも、どの時点でもボトルネックリンクの帯域幅容量と等しく、これは、今後、センダTCP送信レートを規定する。応答ACKを生成する際の他端のTCP応答変動は、戻るACKのレートをボトルネックリンクの帯域幅容量のレート未満まで減らす可能性があり、トラバースされる経路に沿った介在するノードでのバッファ遅延(RTTを長くする)...などは、ボトルネックリンクをトラバースするすべてのTCPフローに対する総合的な戻るACKのレートを、ボトルネックリンクの帯域幅容量の100%より少なく/未満まで減らす可能性がある(この故に、そのような変動について補償するのに十分に、TCPセッション全体で同一の非輻輳RTTを仮定してボトルネックリンクの帯域幅容量の100%を完全に利用するために、レシーバの最大ウィンドウサイズをまさに必要な最小サイズより大きくなるようにセットすることは、そのような変動にかかわりない、常時100%ボトルネックリンクの帯域幅利用度を可能にするはずである)。
ここで、センダの最大ウィンドウサイズ値及びCWND値をいつでも任意に大きくすることができ(「任意の」大きいSsthresh値によってそのように維持されて助けられる)を用い、比較的小さいレシーバ最大ウィンドウサイズ値を用いて、上記の本明細書の「要求されないが意図的な」大きいスケーリングされたセンダウィンドウサイズ及び比較的小さい「レシーバ最大ウィンドウ法」を利用するエンドツーエンドTCP接続が、ボトルネックリンクの帯域幅容量と等しい安定化された送信レートに向かう傾向がある、すなわち、ここでの送信レート又はスループットグラフが、100%に近いリンク利用度レベル「方形波形」を示すはずであることがわかる。
FTPなどの従来のファイル転送テクノロジは、すべてのパケットロスに応答してデータレートを劇的に下げ、長期的スループットを高速リンクの容量で維持することができない。例えば、メトロポリタンエリアネットワーク内のOC−3リンク(155Mbps)を介する単一のFTPファイル転送は、0.1%のパケットロスパーセンテージ及び10msの待ち時間を仮定すると、22Mbpsで安定する。
我々は、ここで、センダのローカルインターセプトソフトウェアが、ローカルMSTCPプリエンプトタイムアウト送信レート低下に対して3+DupNum個のDUP ACK(ACKNo=レシーバTCPからの最新の受信されたACK番号及び/又はSeqNo=レシーバTCPからの最新の受信されたSeqNoフィールドを伴う)を生成するために、レシーバTCPからセンダTCPで受信された最新の到着するACKのACKパケット−リターン間インターバル>例えば300ms(必ずしも輻輳ドロップではなく、物理エラーによっても引き起こされ得る:我々はここで両方をキャッチする)をチェックするだけの単純なコードを追加することができる。送信されたパケットでの0.1%の物理エラー破壊(輻輳ではなく)であっても、80%だけスループットを厳密に制限するはずであることが周知であり、http://www.asperasoft.com/technology−faspvftp.html#continentalを参照されたい。
概要:
1.着信/発信パケットインターセプトコア及びTCPフローごとのTCBを組み込むことだけを必要とする。
1.着信/発信パケットインターセプトコア及びTCPフローごとのTCBを組み込むことだけを必要とする。
2.ローカルMSTCPからリモートに送信された最新の「最大の」SeqNoフィールド「lastsentSeqNo」を記録する。
3.リモートから受信された最新の「最大の」着信パケットのACKNoフィールド「lastrcvACKNo」(及びそのパケットのSeqNo、すなわち「lastrcvSeqNo」)及び受信された時刻「lastpktrcvtime」と、この完全なパケットのコピー「lastrcvpkt」とを記録する。
4.IF 現在時刻−lastpktrcvtime>例えば300ms AND lastsentSeqNo+1>lastrcvACKNo
THEN 3つの「lastrcvpkt」を送信する(より簡単であり、生成されたパケットのチェックサムを計算する必要がない:複製SeqNo/複製データ...などは、lastrcvpkt内に存在する場合に、3DUP ACK高速再送信を引き起こしている間にローカルMSTCPによって無視されるだけである)。
THEN 3つの「lastrcvpkt」を送信する(より簡単であり、生成されたパケットのチェックサムを計算する必要がない:複製SeqNo/複製データ...などは、lastrcvpkt内に存在する場合に、3DUP ACK高速再送信を引き起こしている間にローカルMSTCPによって無視されるだけである)。
5.ソフトウェア初期化の時に、TCPレジストリ(及び/又は任意選択で個々のアプリケーション自体のソケットごとのバッファサイズ)を編集し、すべての新しいTCPが大きいウィンドウスケールファクタ14及びTCPWindowサイズ64K(すなわち、最大1ギガバイト)を要求するようにし、好ましくはSACKをイネーブルし、好ましくはDelay−ACKなし
[参考文献:Google Search用語「set socket buffer override large scale window size」(又は類似する関連用語)、www.psc.edu/networking/perf_tune.html、publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixbman/prftungd/2365a83.htm、www.dslnuts.com/2kxp.shtml、http://www.ces.net/doc/2003/research/qos.html、forum.java.sun.com/thread.jspa?threadID=596030&messageID=3165552、netlab.caltech.edu/FAST/meetings/2002july/relatedWork.ppt、www.ncne.org/research/tcp/debugging/firstpackets.html)。
[参考文献:Google Search用語「set socket buffer override large scale window size」(又は類似する関連用語)、www.psc.edu/networking/perf_tune.html、publib.boulder.ibm.com/infocenter/pseries/topic/com.ibm.aix.doc/aixbman/prftungd/2365a83.htm、www.dslnuts.com/2kxp.shtml、http://www.ces.net/doc/2003/research/qos.html、forum.java.sun.com/thread.jspa?threadID=596030&messageID=3165552、netlab.caltech.edu/FAST/meetings/2002july/relatedWork.ppt、www.ncne.org/research/tcp/debugging/firstpackets.html)。
以上、これは、データストレージアプリケーションの要求を完全に満たす。
注:両端が大きいウィンドウスケールファクタ及び大きいウィンドウサイズをネゴシエートした状態で、フローごとのTCPは、10RTT、例えば2.5秒以内に、CWND値を例えば1024*1500バイトのMSSすなわち1.5Mバイトまで非常にすばやく増加する。ソフトウェア生成(例えば、RTOタイムアウトをプリエンプトする)又はリモートからのいずれであれ、どの高速再送信要求の際にも、CWNDの半分化及びSSThreshにCWND/2をセットすることは、「有効ウィンドウ」を減らす効果を一切有することがなく、SYNC/SYNC ACK/ACKの後のどの時にも、「有効ウィンドウ」は、必ず次のいずれかになる。
1.常時レシーバのアドバタイズされた受信ウィンドウサイズまでに制限される:レシーバは、通常、例えば16Kバイトを有し、したがって、すべての後続パケットで、レシーバは、「1」の受信ウィンドウサイズ(14位置スケールシフトされる=16Kバイト)をアドバタイズする → ローカルセンダの送信レートは、いつでも、必ず、この「16K」のレシーバのアドバタイズしたウィンドウサイズに対するレートになり、ACK固有のセルフクロッキング特性によって非常に効果的に「レートペーシングされる」(我々が過去2〜3日で非常に意識するようになったとおり)。注:CWND及びセンダウィンドウサイズは、任意に大きくすることができ、輻輳制御においてさらなる役割を全く演じない(CWNDがレシーバの最大ウィンドウサイズよりはるかに大きいサイズを達成すると!!! その後に、最大の可能な送信レートを使用可能ボトルネックリンクの帯域幅に調整するそのACKセルフクロッキング特徴、しかしもちろん、レシーバは、アドバタイズされるレシーバウィンドウサイズを動的に調整し続けて、センダの送信レートに対する制御をさらに働かせることができ、あるいは、センダ端に常駐するインターセプトソフトウェアが、任意選択として、着信パケットのレシーバウィンドウサイズを動的に変更して、送信するMSTCPの送信レート/「有効ウィンドウ」に対する類似する制御を働かせることができる)。
又は
2.我々は、シエートされる両方のセンダの最大ウィンドウサイズに任意に大きいスケーリングされたウィンドウサイズ値(又は単に大きいスケーリングされない64K、スケーリングされた256K...などの値)を意図的に過剰にセットし、レシーバの最大ウィンドウサイズはネゴシエーション中に例えば実際に要求される/必要になるものより4倍大きくなるように(最大デフォルト16Kという通常要求される/必要になるサイズではなく、例えば64K、256K...など)わずかに過剰にセットされ、その結果、センダのCWND及びSSthresh(通常はネゴシエートされるレシーバ最大ウィンドウサイズ値と同一にセットされる)は、ほぼ常に、頻繁な高速再送信半分化にかかわらず、非常にはるかにより大きい値(レシーバの比較的小さい実際のシステムリソースによって制約されたアドバタイズされたレシーバウィンドウサイズよりはるかに大きい値)を維持し、非常に効率的な100%に近いボトルネックリンクの「利用度方形波形」を保証する:これを保証するのは、多くともボトルネックリンク回線レートでのみ戻って到着する戻るACKセルフクロッキングの最大の可能なレートである。というのは、CWNDとセンダウィンドウサイズとの両方が今はほぼ一定不変に必ずいつでもトラバースされるボトルネックリンクの帯域幅容量の100%を利用するために十分に高速なレートでセンダTCPが送信できることを保証するために必要な特定のセンダウィンドウサイズ値より多数の桁だけ大きいからであり(これは、周知の帯域幅遅延積すなわち周知のRTT*ウィンドウサイズの等式に関係付けられる)、さらに、CWNDがレシーバのネゴシエートされたウィンドウサイズ値(上記の例えば64K、256K...などの)より大きいサイズをすばやく達成した後に、本明細書のセンダTCPは、その後、連続するRTT中のウィンドウサイズ増大を介してレシーバのネゴシエートされた最大ウィンドウサイズ(上記の例えば64K、256K...などの)を超えて実際の「有効ウィンドウ」を増分することはせず、したがって、その後、戻るACKストリームを受信した時にさらなるパケットをクロックアウトし/送出するだけであるはずである(戻るACKの最大レートは、ここでは、必ず、ボトルネックリンクの帯域幅容量以内になるように制約される)。
2.我々は、シエートされる両方のセンダの最大ウィンドウサイズに任意に大きいスケーリングされたウィンドウサイズ値(又は単に大きいスケーリングされない64K、スケーリングされた256K...などの値)を意図的に過剰にセットし、レシーバの最大ウィンドウサイズはネゴシエーション中に例えば実際に要求される/必要になるものより4倍大きくなるように(最大デフォルト16Kという通常要求される/必要になるサイズではなく、例えば64K、256K...など)わずかに過剰にセットされ、その結果、センダのCWND及びSSthresh(通常はネゴシエートされるレシーバ最大ウィンドウサイズ値と同一にセットされる)は、ほぼ常に、頻繁な高速再送信半分化にかかわらず、非常にはるかにより大きい値(レシーバの比較的小さい実際のシステムリソースによって制約されたアドバタイズされたレシーバウィンドウサイズよりはるかに大きい値)を維持し、非常に効率的な100%に近いボトルネックリンクの「利用度方形波形」を保証する:これを保証するのは、多くともボトルネックリンク回線レートでのみ戻って到着する戻るACKセルフクロッキングの最大の可能なレートである。というのは、CWNDとセンダウィンドウサイズとの両方が今はほぼ一定不変に必ずいつでもトラバースされるボトルネックリンクの帯域幅容量の100%を利用するために十分に高速なレートでセンダTCPが送信できることを保証するために必要な特定のセンダウィンドウサイズ値より多数の桁だけ大きいからであり(これは、周知の帯域幅遅延積すなわち周知のRTT*ウィンドウサイズの等式に関係付けられる)、さらに、CWNDがレシーバのネゴシエートされたウィンドウサイズ値(上記の例えば64K、256K...などの)より大きいサイズをすばやく達成した後に、本明細書のセンダTCPは、その後、連続するRTT中のウィンドウサイズ増大を介してレシーバのネゴシエートされた最大ウィンドウサイズ(上記の例えば64K、256K...などの)を超えて実際の「有効ウィンドウ」を増分することはせず、したがって、その後、戻るACKストリームを受信した時にさらなるパケットをクロックアウトし/送出するだけであるはずである(戻るACKの最大レートは、ここでは、必ず、ボトルネックリンクの帯域幅容量以内になるように制約される)。
注:上記のケース1と2との両方で、インターセプトソフトウェア(又はTCPソースコード)は、リモートレシーバからの着信パケット内のレシーバウィンドウサイズフィールド値を、任意の必要なより小さい最大値(例えば最新の記録された最小戻るACK間インターバル及び非輻輳RTT/OTT値又は推定値...などから動的に導出される、あるいは、ユーザがトラバースされるボトルネックリンクの帯域幅容量の以前の知識から特定の値を指定することができるのいずれか)になるように必ず変更することができ、したがって、センダTCPの有効ウィンドウサイズがトラバースされるボトルネックリンクの帯域幅容量と一致するのに必要なサイズレベルを絶対に超えないことを保証することができる → 今は、動的なレシーバのアドバタイズされるウィンドウサイズフィールド値を制限するのにレシーバのシステムリソース制約に頼る必要がなく、センダとレシーバとの両方の最大ウィンドウサイズ値を、同一の任意に非常に非常に大きいスケーリングされたウィンドウサイズ値になるように両方とも一緒にネゴシエートすることができる。
注:我々は、センダのCWNDがftpのTCPデータ転送チャネル確立時に最初から十分に大きい値又は非常に大きい値まで確かに増やされることをさらに保証してもよく/必要があり、さもなければ、このまさに初期ステージでの即座のパケットドロップは、センダのSSThreshに現在の初期の非常に小さいCWND値の半分をセットさせる場合がある:これは、例えば、ある個数例えば10個のまさに最初の初期に送信されるデータパケットを保管するインターセプトソフトウェアによって達成することができ、例えば10個の受信されなかったパケットのいずれかのリモートレシーバへの実際の再送信を実行する(すなわち、リモートレシーバTCPで受信されない欠けているパケットを検出するための、この時間の間の着信する戻るACKNoのチェック、及びローカルMSTCPがSstresh値を現在の初期の非常に小さいCWND値の半分にこの時にリセットするのを防ぐためのローカルMSTCPに戻るそのような到着するパケットの破棄/変更/又は転送しないこと)。
注:センダのTCPソースコードが直接変更のために使用可能である場合には、これは、はるかに単純になる:例えば、ここでは、Ssthresh値が、今、任意の非常に大きい値に「永久的に」固定され、且つ/又は送信するTCPの最大センダウィンドウサイズが、今、任意の非常に大きい値に「永久的」に固定され...などになるようにするためにソースコードを変更することだけが必要である(この目的を達成する多数の形がありえる...)。また、すべての方法/技法を、レシーバベースド制御(センダベースド制御ではなく)として働くように対応して変更することができる。
注:さらに、次の非常に基本的な形で、ソフトウェアを全く必要とせずに、上記の「方形波形」技法を手動で即座に利用することができなければならない。
1.大きいウィンドウスケール、大きいウィンドウ、SACK、Delay ACKなしについて、それ相応に2つのPCのレジストリを手動でセットする
2.この2つのPCの間の大きいFTP
3.ここでのFTPの送信レート/スループットグラフは、「一定の100%に近いボトルネックリンクの利用度レベル方形波形」を示さなければならない。
2.この2つのPCの間の大きいFTP
3.ここでのFTPの送信レート/スループットグラフは、「一定の100%に近いボトルネックリンクの利用度レベル方形波形」を示さなければならない。
我々は、さらに、観察された最新の最小の「記録された」戻るACK間インターバルで通常のデータパケットを送出する最小パケット間遅延を追加し(例えばバイト毎秒(ボトルネックリンクの容量に対応しなければならない)に関して、この値を、さらに、例えば、例えば300msおきに導出され/更新されるなどの直前の指定された前の時間インターバルからのみ導出し/更新することができる)、必要な場合にパケットをバッファリングしてもよい → 実際の輻輳ではなく不必要な過渡的輻輳パケットドロップに寄与する場合があるルータでの「バーストバッファリング」がない。
このインターセプトソフトウェアが、CWNDの連続するRTT指数関数的増分から輻輳ドロップを引き起こすことが可能である(指数関数的に増分されたCWNDが、レシーバのアドバタイズされたウィンドウサイズ以下に留まり、例えば、以前に既にボトルネックリンクの帯域幅の100%を利用しながらACKセルフクロッキングにかかわりなく送信レートを2倍にすることを可能にするが、一部のユーザは、実際の物理受信バッファサイズシステムリソースを実際に大きくなるようにセットすることさえできる)。
既存の「ポーズ」技法すなわち、「タイムアウト」の外部のすべての戻るACKに関する最新の最小の「記録された」戻るACK間インターバル(ボトルネックリンクの容量に対応する)に関する「ポーズ」すなわち、指定されたインターバルが前の戻るACK以降の新しい次の着信する戻るACKを受信せずに満了する(例えば、1.8*最新の最小の記録された戻るACK間インターバル)場合に、例えば同一の最新の最初の記録された戻るACK間インターバルすなわち最小戻るACK間インターバルと等しい期間の間、前方にリモートレシーバTCPに次の保留中のインターセプトされたパケットを単純に転送しないことを組み込まなければならない → ここで、センダTCPは、最初の送信のACKが1.8*最新の最小の記録された戻るACK間インターバル、例えば90msの外で戻ることによってトリガされる「ポーズ」の前に、多くとも2つのパケット(それぞれは、送信の間の例えば50msのレートペーシングされた最小の最小戻るACK間インターバルである)を送信することだけができる → ソフトウェアは、それ自体では輻輳ドロップを引き起こさない+外部インターネット上で増分展開可能+TCPフレンドリ+他のTCPがパケットドロップを引き起こす時であっても達成された非輻輳レベル送信レートスループットを保つ(変動なし)。リモートレシーバTCPへの転送を待っているインターセプトされたパケット及び/又はバッファに受信された時刻などのそのようなバッファリングされたパケットに関するさまざまな情報...などを保管するバッファを実施し、且つ、次に、例えば特定のバッファリングされたパケットのバッファキュー内での待ち時間が例えば1秒の標準RFCのデフォルト最小RTO時間期間に達する場合にローカルMSTCPへの3DUP ACK高速再送信要求を生成し(ローカルMSTCPでのRTOタイムアウトをプリエンプトするために)、さらに、キュー内のこの特定のバッファリングされたパケットを任意の最新の新しい「高速再送信された」パケットに置換することを、さらに必要とする可能性がある/行ってもよい。
注:既存の標準RFCのスライディングウィンドウ/AIMD機構...などのいずれをも必ずしも必要としない、及び/又は既存の標準RFCのスライディングウィンドウ/AIMD機構...などと共にインターセプトソフトウェア(及び/又は直接TCPソースコード変更)として並列に働く、代替TCP輻輳制御機構は、「送信レートポーズ」技法と一緒に上記の直前の段落の到着するACK間インターバル「送信レートペーシングされた」技法を組み込まなければならず(例えば次の戻るACKが前に到着したACK以来の指定された時間期間の外で到着する際に、リモートレシーバへのパケット転送をポーズし/スキップするために)、例えば最新の連続するパケットの間の戻るACK間インターバルの最新の値及び/又は特定のパケットの実際のRTT値又はOTT値(トラバースされる経路に沿った輻輳バッファリングの始まり、又はそれが全く存在しないことを非常によく示さなければならない)に従って調整して、MSTCPパケット生成レート(より高速の増分レート/より低速の減分レートでの転送のために使用可能にされる)の増分/減分のいずれかを行わなければならず、あるいは、既存の標準RFC TCPのまさにそれ自体の既存AIMD機能を並列に利用しなければならない(ならびに/あるいはリモートレシーバに転送されるのを待っているパケットのバッファリング、及び/又は古いキューイングされたパケットのRTOタイムアウトをプリエンプトするためのローカルMSTCPへの3 DUP ACK高速再送信要求生成、及び/又は戻るACK間インターバル「送信/ポーズレートペーシング」技法をもたらすための、バッファ内でキューイングされた旧バージョンパケットを置換する最新の新しい再送信パケット及び/又はイベントリストの受信時刻/送信時刻情報及び/又はパケットごとのRTT/OTT監視...などと一緒に)。周期的な指定された時間期間に、上記のスキーマは、トラバースされる経路のボトルネックリンクの帯域幅容量の最新の最良の推定値が、後に到着する最新の記録された最小の戻るACK間インターバル値から継続的に更新されることを保証するために、2つ又は少数のパケットが、隣接したファーストマイルリンクの帯域幅によって許容できる可能な非常にすばやい連続で即座に次々に前方にリモートレシーバに転送するのに使用可能であることを保証することができる(例えば、2つ又は少数のパケットが、それらを一緒に前方に転送する前に使用可能になるまで待つ...など、実際のボトルネックリンクの帯域幅容量を、あるサイズのパケット毎秒ではなくバイト毎秒というより微細なレベルでさらに導出できることと、送信レートペーシング技法及び/又は送信レートポーズ技法を、前方に送信される保留中のパケットサイズの実際のサイズを知って、バイト毎秒というこの導出される共通のより微細な粒度を利用するように適合させることができることに留意されたい)。ここでのスキーマは、既存RFCのスライディングウィンドウ輻輳回避機構と異なる、ペーシングされた送信レートを増分/減分するそれ自体の考案されたアルゴリズムを利用することができる。ここでの送信レートは、同一の一定の100%に近いボトルネックリンクの利用度レベル「方形波形」を示さなければならず、常に、送信レートは、100%に近いボトルネックリンクの利用度レベルの前後の非常に狭い帯域内で発振する。
注:ここでのローカルインターセプトソフトウェアは、インターセプトソフトウェアの転送バッファパケットキュー内のパケットの個数がある個数又は総サイズを超える時などに、ローカルMSTCPが新しいパケットを生成し/送出するのを一時的に「止める」(又はローカルMSTCPのパケット送信レートを下げる)ために、ウィンドウサイズ更新パケットを生成するか、ローカルMSTCPへのリモートレシーバTCPからの着信パケット内のレシーバウィンドウサイズフィールド値を必要に応じて例えば「0」又は非常に小さい値に変更することができる。これは、ローカルMSTCPでの最終的なRTOタイムアウトを引き起こす場合がある過度の非常に大きいパケットキューの増加を防ぐ。
大きいFTP転送改善の定量化:単純化された。
大きいFTP転送改善の定量化:単純化された。
最小50%スループット改善(例えば、1MBSから1.5MBSへ、他の要因からのさらなるかなり大きい改善があるはずである)を達成するために、一定の周期的パケットロス(及び高速再送信)は、センダ送信レートが最大回線レートに達するまさにその瞬間に発生する。
(1)一定の周期的な1000個おきに1個のパケットロスレート及び200msのRTTを仮定すると、最大ウィンドウサイズは、すべてを送信し、1秒に1000個のパケットにレートをスロットリングするために、200パケット(300kバイト)である必要がある。
SSthresh値は、一般に、連続的な高速再送信半分化に起因して、1/2*最大ウィンドウサイズ(100パケット又は300kバイト)前後でさまよい、CWNDは、最大帯域幅送信レートを再達成するために100パケット(150kバイト)だけ増分する必要がある → 100RTTが必要(20秒)。
最小リンクの帯域幅は、1000個のパケットを20秒で送信するために600kb/sである必要がある(1000*1500*8/20)。
(2)一定の周期的な100個おきに1個のパケットロスレート及び200msのRTTを仮定すると、最大ウィンドウサイズは、すべてを送信し、1秒に1000個のパケットにレートをスロットリングするために、20パケット(30kバイト)である必要がある。
SSthresh値は、一般に、連続的な高速再送信半分化に起因して、1/2*最大ウィンドウサイズ(10パケット又は15kバイト)前後でさまよい、CWNDは、最大帯域幅送信レートを再達成するために10パケット(15kバイト)だけ増分する必要がある → 10RTTが必要(2秒)。
最小リンクの帯域幅は、100個のパケットを2秒で送信するために600kb/sである必要がある(100*1500*8/2)。
そのような「方形波形」TCPは、TCPフレンドリであるはずであり、ボトルネックリンクをトラバースするTCPフローが、すべてそのような「方形波形」フロー又はそのような「方形波形」フローと既存の標準RFC TCPフローとの混合物からなる場合には、すべてのそのようなフロー/すべてのそのようなフローの混合物への戻るACKの総合レート/総数は、それでも、トラバースされる経路のボトルネックリンクの帯域幅容量に対応するものを超えないものまでに制限されるはずである→そのような「方形波形」TCPフローは、外部インターネット上で増分的に展開され、他の既存の標準RFCのTCPフロー及び/又はフローの混合物の「鋸歯」効果及び/又は公衆インターネット輻輳パケットドロップ及び/又はBERパケット破壊(ビットエラーレート)によって引き起こされるパケットドロップにもかかわらずその達成された送信レートを維持し/保持することができると同時に、すべてのそのような「方形波形」TCPフロー及び/又は他の既存の標準RFCのTCPフローに対してTCPフレンドリなままであることができる(注:新しいTCPフローは、どの場合でも、ほとんど必ず、ネットワークノードバッファの容量を利用してその送信レート増大を開始することができる)。
変更されたTCPを用いると、リンクのトラフィックがバッファリングされ始める場合に、それに対応するエコーされるRTTは、今や、ある指定された被乗数*特定のソース−デスティネーションの非輻輳RTT値(特定のパケットサイズに関する、通常はシステムMTUサイズ又はMSSサイズによって決定される)を超えるはずであり、ソフトウェアは、今や、指定された「ポーズ」インターバルの間にTCPごとのフローの送信を停止することができる → これは、すべてのトラバースされるノードのバッファが、この「ポーズ」インターバル中にこのTCPごとのフローのバッファリングされたパケット(又は同等物)のすべてを即座にクリアされることを保証する → したがって、輻輳パケットドロップは決してない! しかし、常に、RTOタイムアウト及び1MSSへのCWNDリセットを引き起こす物理送信エラーの可能性がある(これは、非常に希であり、改善されたスループット性能に大きくは影響しない)が、我々は、センダRTOタイムアウトイベントをプリエンプトする/センダの送信レート半分化又は「0」へのリセットをプリエンプトするために、我々の「レシーバベースド」パケット到着間技法及び3DUP ACK高速再送信法を、前の段落の「大きいスケーリングされたウィンドウサイズ」法と一緒に組み込むこともできる。
この故に、ここでのTCPごとのフローは、一定不変に物理使用可能帯域幅の半分を浪費する「鋸歯」送信レート/スループットグラフを引き起こすために送信レートを下げる(1MSSへのCWNDリセット)ためにRTOタイムアウトはしないはずであり、輻輳パケットドロップを避けるための送信レートの同等の必要な減少は、今や、「ポーズ」インターバルを介してもたらされるのみである → この送信レート/スループットグラフは、今や、ほとんどいつも100%に近い利用度である物理帯域幅を示さなければならない。
変更されたTCPを利用せずに上記の「鋸歯」現象をプリエンプトする代替の方法は、センダTCPの最大送信ウィンドウサイズすなわちTCPWindowSizeシステムパラメータ値(及び/又はさまざまな他の関連するパラメータ値)をセットし、その結果、センダTCPの最大の可能な帯域幅遅延積(最大ウィンドウサイズ/RTT)値が、絶対にリンクの物理帯域幅を超えず、したがって、このTCPフローがその時にこのリンクを利用する唯一のフローであると仮定して、輻輳パケットドロップが存在し得ないようにすることである。適当な最大TCPWindowSize値を選択する時に、最大の許容されるサイズ(MTU値又はMSS値によって決定される)のパケットが、トラバースされる経路に沿った最低帯域幅リンクに完全に出るのに要する有限の時間期間は、その特定のソース−デスティネーションの非輻輳ping RTT(非常に小さい無視できるパケットサイズの)値に加算される必要があるはずであり、これは、帯域幅遅延積式で使用される最小RTT値を我々に与える(実生活では、実際のRTT値は、さまざまなコンポーネント、例えばCPU ACK生成処理...などによって導入される変動を考慮に入れると、より大きくなるはずである):さらに、戻るACKが、おそらくは通常のデータパケットにピギーバックされて搬送される場合(例えば、レシーバがデータを対称に送信してもいる場合)に、戻る最大サイズのデータパケットの、戻りのトラバースされる経路に沿った最低帯域幅リンクに完全に出るための有限の時間は、やはり、帯域幅遅延積式で使用される最小RTT値を我々に与えるために上記に加算される必要があるはずである。データパケットストリームが連続的であると仮定し、最大の許容されるサイズのデータパケットが、トラバースされる経路/戻り経路に沿った最低帯域幅リンクに出るのに要する有限の時間が、無視できる(すなわち、最低帯域幅リンクは、それでも、大きい帯域幅容量を有し、例えば、1500バイトのデータパケットが240kbsの次の前方リンクに出るのに50msを要するが、1500バイトのデータパケットが56kbsの次の前方リンクに出るのに約250msを要する:例えば50msというソース−デスティネーションの非常に小さいバイトサイズのpingパケットRTTについて、そのような出る時間は、最大ウィンドウサイズTCPWindowSize計算で使用すべき最小RTT値の計算を構成する値を支配する)と仮定すると、Selective Acknowledgementオプションは、ここでの性能を高めるはずであり、Delay Acknowledgementオプションは、イネーブルされた場合であっても、実際の効果を一切有しない。
外部インターネット上での増分的に即座に展開可能なTCP変更
現在、標準RFC TCPデータ転送スループットは、高い輻輳ドロップレート及び/又は高いBERレート(物理送信ビットエラーレート)を有する経路/ネットワーク上で、特に高いRTT値及び非常に大きい帯域幅経路を有する長距離ファットパイプネットワーク(LFN)で、良好に動作しない。標準RFC TCPの常に変動する固有のAIMD(加法増加乗法減少)鋸歯送信波形は、物理リンク/ボトルネックリンクの帯域幅容量の0%と100%をはるかに超える値との間で激しく変動し、これもパケットドロップ自体に寄与し得る。
現在、標準RFC TCPデータ転送スループットは、高い輻輳ドロップレート及び/又は高いBERレート(物理送信ビットエラーレート)を有する経路/ネットワーク上で、特に高いRTT値及び非常に大きい帯域幅経路を有する長距離ファットパイプネットワーク(LFN)で、良好に動作しない。標準RFC TCPの常に変動する固有のAIMD(加法増加乗法減少)鋸歯送信波形は、物理リンク/ボトルネックリンクの帯域幅容量の0%と100%をはるかに超える値との間で激しく変動し、これもパケットドロップ自体に寄与し得る。
現在、TCPは、3DUP ACK高速再送信要求又はRTO再送信タイムアウトを介して通知されるパケットロスイベントの際に、その輻輳ウィンドウCWNDサイズを半分にし、したがって、その送信レートを半分にする。現在、TCPは、BER効果など、パケットドロップイベントの輻輳関連でない原因を見分けることもできず、すべてのパケットロスイベントを経路/ネットワークの輻輳によって引き起こされたものとして扱う。
わずか1%の総ロスレートを有する経路が、達成可能なTCPフローのスループットを半分にすることは、一般的な明確に文書化された現象である。http://internettrafficreport.comからわかるように、アジアでの通常のロスレートは、5%〜40%であり、北米では2%〜10%である。
ここで、高いロスレートの経路/ネットワーク上の上で説明した欠点のすべてを完全に除去でき、外部インターネット上で増分的に即座に展開可能であり、TCPフローフレンドリとすることもできる、次の全般的な原理(又はそのステップ若しくはサブコンポーネントステップ/プロセス若しくはサブコンポーネントプロセスのさまざまな組合せ)に基づく、既存の標準RFCのTCP SACKに対する改善変更の概要を示す。
(1)3つのDUP ACKによって通知されるパケットドロップイベントの際に、本明細書の変更されたTCPは、失われる/捨てられると通知された総セグメント/パケットに対応するバイト数だけ輻輳ウィンドウCWNDサイズを減らすことだけを必要とするはずである(着信DUP ACKパケット(1つ又は複数)(半分にされたCWNDサイズを増やす/膨張させる高速再送信及び/又は後続の複数のDUP ACKをトリガする)ACK Numberフィールドは、最初の失われたパケットのシーケンス番号を示すが、Selective Acknowledgementフィールドは、順序はずれで成功して受信された連続するシーケンス番号のブロックを示す;すなわち、ACKNoと最小のSeqNo SACKされたブロックとの間の「欠けているギャップ(1つ又は複数)シーケンス」及びSACKされたブロック自体の間の欠けているギャップ(1つ又は複数)SeqNoは、欠けている捨てられたギャップ(1つ又は複数)パケット(1つ又は複数)のシーケンス番号を、したがって、捨てられると示されるバイトの総数を我々に与える)。ところが、DUP ACK内の最大のSACKNoは、成功して受信された最大のSeqNoを示し、これは、変更されたTCPのCWNDサイズをそれ相応に増分するのに任意選択で利用することができ(変更されたTCPの最大の受信されたACKNoに、今、高速再送信及び/又は後続の複数のDUP ACKをトリガする第3DUP ACK内の最大の受信されたSACKNoがセットされているかのように、しかし、CWNDのサイズ/「有効ウィンドウ」サイズの増分に関する目的/効果だけのためであって、確かに、変更されたTCPのスライディングウィンドウの左エッジを進める目的/効果のためでは全くない:すなわち、TCPのACKNoフィールドのエンドツーエンドセマンティクスは、それ以外の点では既存の標準TCPで指定されたままに完全に保たれなければならない)、したがって、着信ACKNoフィールドが既存の標準TCPの有効ウィンドウサイズ増分に対して有する効果に関して同一の形で、しかし、決してスライディングウィンドウの左エッジの前進(これは、「欠けているギャップ(1つ又は複数)SeqNo」に、もはや、もう一度高速再送信される/RTOタイムアウト再送信されることのできる現在のウィンドウサイズ分のデータ内で保持されなくするはずである:ここで、受信されたACKNoの後続の増分は、CWND/有効ウィンドウサイズを増分するのに利用される上記の最大のSACKNoより小さい場合に、変更されたTCPのCWND/有効ウィンドウサイズをもう一度増やす効果を有してはならないが、変更されたTCPのスライディングウィンドウ左エッジを前進させる効果を有することに留意されたい)の効果に関してではなく、ACKされた時ではなくSACKされた時に、変更されたTCPによってネットワークにより多くのセグメント/パケットを送信/注入することを可能にする。
及び/又は
(2)第3のDUP ACKによって通知されるパケットドロップイベントの際に、本明細書の変更されたTCPフローは、ネットワーク内の未解決の送信済みのフライトバイトの総数(すなわち、現在の第3DUP ACKのACKNoと同一のSeqNoを有するデータを搬送するパケットが送信された時と、同一のSeqNoを有するこの現在の第3DUP ACKの到着の時との間にネットワークに送信された、データを搬送するパケットであれデータを搬送しない制御パケットであれ、カプセル化/ヘッダを含む、すべての送信されたパケットの総バイト数)が、現在、次で計算されるものと同一の個数に調整され/その個数まで減らされることを保証することだけを必要とするはずである:高速再送信をトリガするこの特定の第3DUP ACKのRTT中にネットワークに送信された送信済みフライトバイトの総数、すなわち、高速再送信をトリガする第3の戻るDUP ACKのACKNoと同一のSeqNoを有するパケットの送信の時とこの特定の第3DUP ACKの受信の時との間にネットワークに送信されたバイトの総数を、minRTTをこの特定の第3DUP ACKのRTTで割ったものによって割った値である。
(2)第3のDUP ACKによって通知されるパケットドロップイベントの際に、本明細書の変更されたTCPフローは、ネットワーク内の未解決の送信済みのフライトバイトの総数(すなわち、現在の第3DUP ACKのACKNoと同一のSeqNoを有するデータを搬送するパケットが送信された時と、同一のSeqNoを有するこの現在の第3DUP ACKの到着の時との間にネットワークに送信された、データを搬送するパケットであれデータを搬送しない制御パケットであれ、カプセル化/ヘッダを含む、すべての送信されたパケットの総バイト数)が、現在、次で計算されるものと同一の個数に調整され/その個数まで減らされることを保証することだけを必要とするはずである:高速再送信をトリガするこの特定の第3DUP ACKのRTT中にネットワークに送信された送信済みフライトバイトの総数、すなわち、高速再送信をトリガする第3の戻るDUP ACKのACKNoと同一のSeqNoを有するパケットの送信の時とこの特定の第3DUP ACKの受信の時との間にネットワークに送信されたバイトの総数を、minRTTをこの特定の第3DUP ACKのRTTで割ったものによって割った値である。
minRTTは、TCPフローのエンドポイントの間の実際に全く輻輳していないRTTの最新の推定値であり、したがって、輻輳ドロップノードをトラバースするすべてのフローが、すべて、調和して働くそのような変更されたTCPフローである場合に、ここでのこの特定のノードは、その後、輻輳しない又は輻輳に近くならなければならない:ここでのminRTTは、単に、変更されたTCPフローのこれまでに観察されたもののうちで最小の記録されたRTTの値であり、このフローの実際の物理的非輻輳RTTの最新の最良の推定値として働くはずである(明らかに、フローの実際の物理的非輻輳RTTが既知であるか前もって供給される場合には、それを代わりに使用しなければならず、あるいは使用することができる)。
高速再送信をトリガするこの特定の第3DUP ACKのRTT中にネットワークに送信された送信済みフライトバイトの総数、すなわち、高速再送信をトリガする第3の戻るDUP ACKと同一のSeqNoを有するパケットの送信の時と、この特定の第3DUP ACKの受信の時との間に送信された送信済みフライトバイトの総数は、送信されたパケットのSeqNoと、TimeSentと、カプセル化/ヘッダを含むこのパケットのtotal_number_of_bytesとという3つ組フィールドからなる時間によって順序付けられたイベントエントリリスト(すなわち、ネットワークへの送信の順序に純粋に基づく)を維持することによって導出することができる。したがって、特定の肯定応答番号を有する第3DUP ACKのRTT値は、この現在の第3DUP ACKの現在の到着時刻−現在の第3の戻るDUP ACKと同一のSeqNoを有するデータを搬送するパケットのTimeSentとして導出することができる。総送信済みフライトバイト数は、戻る第3DUP ACKと同一のSeqNoを有するイベントリストのエントリとイベントリストのまさに最後のエントリとの間のすべてのエントリのすべてのtotal_number_of_bytesフィールドの合計として導出することができる。
このイベントリストのサイズは、第3DUP ACKのACKNo未満のSeqNoを有するすべてのエントリを除去することによって、小さく保つことができる。
送信済み総フライトバイト数の計算の代わりの単純化された代替案は、現在の戻る第3DUP ACKのACKNoと同一のSeqNoを有するデータパケットの送信/受信の時の、送信された最大のSeqNo−受信された最大のACKNoとしてこれらを近似することである:これは、フライトデータセグメントバイトすなわち、カプセル化/ヘッダ/データを搬送しない制御パケットを含まないフライト中の純データセグメントの総数を与える。
第3DUP ACKによって通知されるパケットドロップイベントの際にネットワーク内の未解決の送信済みフライトバイトの総数を調整し/減らすために既存の標準RFCのTCPソースコードに対する変更を実施するさまざまな可能な形の中に、次のものがある。
.高速再送信をトリガするこの特定の第3DUP ACKのRTT中にネットワークに送信された送信済みフライトバイトの総数すなわち高速再送信をトリガする第3の戻るDUP ACKのACKNoと同一のSeqNoを有するパケットの送信の時とこの特定の第3DUP ACKの受信の時との間にネットワークに送信されたバイトの総数を[この特定の第3DUP ACKのRTTでminRTTを割った値]で割った値を最も近いバイトに丸めたものと同一の数になるように輻輳ウィンドウすなわちCWNDサイズを減らすことを介して現在の「有効ウィンドウ」サイズを即座に減らす。これは、任意の新しい到着する戻るACK(1つ又は複数)がネットワークに新しいパケットを「クロック」アウトできるようになる前に、輻輳ウィンドウCWNDサイズが、その以前のサイズを再達成するために適当な個数の後続の戻るACKによって増分されることを必要とするので、適当な個数の後続の戻るACKが、もはや、ネットワークに新しいパケットを「クロック」アウトするという効果を有しなくなることをもたらすはずである:ここで新しいパケット(1つ又は複数)を「クロック」アウトできるようになる前に必要な戻るACKの個数は、CWNDがそれだけ減らされたバイト数と同一個数のバイトを肯定応答するのに必要な戻るACKの個数になるはずであり、あるいは、通常はそれに対応する。
.代替案では、上記の減少プロシージャの代わりに、ここでのCWNDが、到着する第3DUP ACKのRTT/minRTT*この到着する第3DUP ACKによって肯定応答される送信されたセグメントバイトの個数を最も近いバイトに丸めるか分数を繰り越したものという比率で増分されるだけになる(通常の標準RFCのTCPの、到着する新しいACKによって肯定応答される送信されたセグメントバイトの個数による増分ではなく):これは、減少が達成されるまで、すべての後続の複数の同一の又は増分されたACKNoのDUP ACK又は新しいACKについて継続され、減少が達成された時には、この減少プロセスは停止する。一部のより古いTCP実施態様は、到着する新しいACKによって肯定応答される送信されたセグメントバイトの個数による増分ではなく、各到着する新しいACKについて1SMSSだけCWNDを増分する場合があり、この場合に、この減少プロセスは、その代わりに、すべての他のRTT/minRTT個の受信された到着するACKについて1回だけの1SMSSだけのCWNDの増分のみによってもたらすこともできる(DUP ACKであれ新しいACKであれ、しかし、最も近い整数に丸められ、例えば、RTT/minRTT=2.5の場合には、すべての5つの到着する新しいACKについて、2つだけCWNDを増分することができる)。これは、フライトバイト減少プロセスを平滑化するという効果を有し、したがって、このフライトバイト減少プロセス全体を通じた、新しいパケットの適当に減らされた連続的な送信及び受信が、それでもある。
RTOタイムアウト再送信によって引き起こされる輻輳ドロップ(1つ又は複数)通知イベントは、次の形で扱うことができる。
.上で説明した、第3Dup ACK又は後続のまさに同一のACKNoの複数のDUP ACKと同一の形で扱う、すなわち、フライトバイトの減少プロセスに、バッファリングされたレジデンシパケット(residency packet)を除去させるが、CWNDサイズのリセット/減少は行わせない。
又は
.既存の標準RFC仕様と正確に同一の形で扱う、すなわち、CWNDを1SMSSにリセットし、スロースタート指数関数的増分に再入する:しかし、ここで、本明細書の変更されたTCPではSsthresh値が一度も半分にされていないはずなので、スロースタートが、初期Ssthresh値(どの連続する高速再送信イベントによっても減らされていない)までもう一度すばやく増加することに留意されたい。
.既存の標準RFC仕様と正確に同一の形で扱う、すなわち、CWNDを1SMSSにリセットし、スロースタート指数関数的増分に再入する:しかし、ここで、本明細書の変更されたTCPではSsthresh値が一度も半分にされていないはずなので、スロースタートが、初期Ssthresh値(どの連続する高速再送信イベントによっても減らされていない)までもう一度すばやく増加することに留意されたい。
さらに、例えば未変更の同一のACKNoを有する後続の複数のDUP ACK、新しい増分されたACKNoを有する第3DUP ACK(又は、例えば高速再送信をトリガする第3DUP ACKなしのTCP再送信によって検出される、RTOタイムアウト再送信さえ)などの後続の輻輳ドロップ通知イベントは、新しい計算がより大きい減少を必要としない(すなわち、より小さい総フライトバイトをもたらすことを必要としない)場合には、既存の「フライトバイト減少」プロセス/プロシージャを完了することを可能にしなければならず、そうでない場合には、この新しいプロセス/プロシージャは、任意選択として引き継ぐことができる(また、その代わりに、特定の「マークされた」SeqNoが返されること及びその後にこのRTT中に輻輳ドロップ通知イベント(1つ又は複数)があったかどうかをチェックすることに基づいて、そのようなプロセス/プロシージャがRTTごとに1回だけ開始することを可能にすることができる)。
本明細書の変更されたTCPは、輻輳ドロップ(1つ又は複数)イベント通知を引き起こす特定の戻りACK(又はRTOタイムアウト再送信の直前の戻りACK)のRTTを導出することができるので、変更されたソフトウェアは、さらに、上と同一のイベントが実際に「誤った」輻輳ドロップ(1つ又は複数)通知であったかどうかを見分け、そうである場合に異なって反応することができる:すなわち、特定の輻輳ドロップ(1つ又は複数)イベント通知に関連するRTTが、エンドポイントの最新の推定された非輻輳RTTと同一である(又は既知/前もって供給される)か、ミリ秒単位の単一ノードの最小バッファ容量同等物の境界内のある指定された変動量だけ異なるのではない場合に、この特定の輻輳ドロップ(1つ又は複数)通知を、そうではなく物理送信エラー/破壊/BER(ビットエラーレート)から生じるものとして正しく扱うことができ、変更されたソフトウェアは、フライトバイト減少プロセスを引き起こす/これに入ることを全く必要とせずに、通知された捨てられたセグメント/パケットを単純に再送信することができる。
ここでは、既存の標準RFCのTCPと異なって、本明細書の変更されたTCPが、新しい第3DUP ACK/新しい第3DUP ACKに続く同一ACKNoの複数のDUP ACK及び/又はRTOタイムアウト再送信によって引き起こされる輻輳ドロップ(1つ又は複数)通知イベントの際にCWNDサイズを減らす/半分にする/リセットすることを必ずしも自動的に必要とはしない:本明細書の変更されたTCPは、未解決のフライトバイトの個数を適当に導出された値まで減らすために、輻輳ドロップ(1つ又は複数)通知イベント(1つ又は複数)の際に、必ずCWNDサイズを適当に減らすことだけを必要とすることに留意されたい。
すべてのボトルネックリンクが、いつでも、ボトルネックノードでのバッファレジデンシ占有レベル及び/又は輻輳ドロップ(1つ又は複数)発生に関わりなく、送信されたパケットを、そのボトルネックの物理回線レートでレシーバTCPに向かって継続的に転送するはずである→したがって、すべてのセンダTCPで受信される戻るACKに関連するRTT期間(1つ又は複数)中に肯定応答されるすべてのバイトの合計は、ボトルネック帯域幅が十分に利用される場合に、いつでも、ほぼ一定不変にボトルネックリンクの物理帯域幅と等しくなるはずであることに留意されたい。また、TCPの輻輳回避アルゴリズムは、輻輳ドロップ(1つ又は複数)通知イベント(1つ又は複数)時にCWNDサイズ半分化によって引き起こされる既存の標準RFC TCPの著しい低い利用度ではなく、帯域幅利用度をできる限りボトルネック(1つ又は複数)のリンク帯域幅の100%近くに保つように努力しなければならないことに留意されたい。さまざまな異なるフライトバイト減少レベル/減少量/減少比/アルゴリズムを、考案することができ、例えば輻輳ドロップ(1つ又は複数)通知イベント(1つ又は複数)及び/又はそのようなヒストリカルイベントの時の最大の受信されたACKNo及び/又は最大の送信されたSeqNo及び/又はCWNDサイズ及び/又は有効ウィンドウサイズ及び/又はRTT及び/又はminRTT...など(例えば、変更されたTCPフローのすべてのバッファレジデンシパケット/「余分な」バッファリングされたフライトバイトを完全にクリアするのではなく、バッファレジデンシ占有のある許容されるレベルを考慮に入れることなど)のさまざまな他のパラメータに基づくものとすることもできる。
及び/又は
(3)インターネット上のTCP接続の物理ボトルネックリンクは、通常、レシーバTCPのラストマイル伝送媒体又はセンダTCPのファーストマイル伝送媒体のいずれかである:これらは、通常は、56Kbs/128Kbs PSTNダイヤルアップ又は通常の256Kbs/512Kbs/1Mbs/2Mbs ADSLリンクである。これらの状況で、センダTCPの送信レートがどれほど速いかに関わりなく(既存の標準RFCのTCPは、各後続RTTでますます増加するより大きいバイトを注入することによって経路の帯域幅を不可避的に継続的にプロービングし、スロースタート中にCWNDを指数関数的に2倍にするか、輻輳回避中にCWNDを線形に増分するかのいずれかを行う)、ボトルネックリンクは、すべてのフローのトラフィックを、その帯域幅によって制限される最大回線レートで転送することだけができる → 現在のボトルネックリンクの回線レートを超えて送信レートを増やすこと(現在のボトルネックリンクは、ネットワークのトラフィックに応じて時々変化する場合がある)は、ボトルネックリンクの物理回線レートを超えるTCPフロー(1つ又は複数)のより高いスループットをもたらさない。したがって、ここでのTCPを、ボトルネックリンクの最大の可能な物理回線レートより高いレートで送信しないように有利に変更することができる。ボトルネックリンクの最大の可能な物理回線レートより高いレートで送信することは、各RTT中に送信されるパケット/バイトの「余分な」ボトルネック物理回線レートを超える量を、TCPフローの2つの端点に沿ったどこかで不可避的にバッファリングさせるか捨てさせるだけである。
(3)インターネット上のTCP接続の物理ボトルネックリンクは、通常、レシーバTCPのラストマイル伝送媒体又はセンダTCPのファーストマイル伝送媒体のいずれかである:これらは、通常は、56Kbs/128Kbs PSTNダイヤルアップ又は通常の256Kbs/512Kbs/1Mbs/2Mbs ADSLリンクである。これらの状況で、センダTCPの送信レートがどれほど速いかに関わりなく(既存の標準RFCのTCPは、各後続RTTでますます増加するより大きいバイトを注入することによって経路の帯域幅を不可避的に継続的にプロービングし、スロースタート中にCWNDを指数関数的に2倍にするか、輻輳回避中にCWNDを線形に増分するかのいずれかを行う)、ボトルネックリンクは、すべてのフローのトラフィックを、その帯域幅によって制限される最大回線レートで転送することだけができる → 現在のボトルネックリンクの回線レートを超えて送信レートを増やすこと(現在のボトルネックリンクは、ネットワークのトラフィックに応じて時々変化する場合がある)は、ボトルネックリンクの物理回線レートを超えるTCPフロー(1つ又は複数)のより高いスループットをもたらさない。したがって、ここでのTCPを、ボトルネックリンクの最大の可能な物理回線レートより高いレートで送信しないように有利に変更することができる。ボトルネックリンクの最大の可能な物理回線レートより高いレートで送信することは、各RTT中に送信されるパケット/バイトの「余分な」ボトルネック物理回線レートを超える量を、TCPフローの2つの端点に沿ったどこかで不可避的にバッファリングさせるか捨てさせるだけである。
ここに、経路のボトルネックリンクの物理帯域幅を判定する、複数の可能なものの中の例のプロシージャがある:
.連続するRTT値を、たやすく導出することができる。というのは、既存の標準RFC TCPが、既に、各連続するRTT期間について特定のSeqNoを有する「マークされた」TCPパケットに基づいて、連続するRTT値の計算/導出を実行しているからである。
.連続するRTT値を、たやすく導出することができる。というのは、既存の標準RFC TCPが、既に、各連続するRTT期間について特定のSeqNoを有する「マークされた」TCPパケットに基づいて、連続するRTT値の計算/導出を実行しているからである。
.各連続するRTTのスループットレートは、この特定の「マークされた」SeqNoパケットのRTT中にネットワークに送信された送信済みフライトバイトの総数すなわち、この特定の「マークされた」SeqNoを有するパケットの送信の時とその戻るACK(又はSACKed)の時との間に送信された送信済みフライトバイトの総数をまず記録し又は導出することによって導出することができ、この総数は、送信されたパケットのSeqNoと、TimeSentと、カプセル化/ヘッダを含むこのパケットのtotal_number_of_bytesとという3つ組フィールドからなる時間によって順序付けられたイベントエントリリスト(すなわち、ネットワークへの送信の順序に純粋に基づく)を維持することによって導出することができる。したがって、特定のSeqNoを有する特定の「マークされた」パケットのRTT値は、この現在の戻るACK(又はSACKed)の現在の到着時刻−特定の「マークされた」SeqNoを有するデータを搬送するパケットのTimeSentとして導出することができる。総送信済みフライトバイト数は、戻る第3DUP ACKと同一のSeqNoを有するイベントリストのエントリとイベントリストのまさに最後のエントリとの間のすべてのエントリのすべてのtotal_number_of_bytesフィールドの合計として導出することができる。このイベントリストのサイズは、第3DUP ACKのACKNo未満のSeqNoを有するすべてのエントリを除去することによって、小さく保つことができる。送信済み総フライトバイト数の計算の代わりの単純化された代替案は、第3DUP ACKの到着の時の、送信された最大のSeqNo+この最大のSeqNoのパケットのデータバイトの個数−受信された最大のACKNoとしてこれらを近似することである:これは、フライトデータセグメントバイトすなわち、カプセル化/ヘッダ/データを搬送しない制御パケットを含まないフライト中の純データセグメントの総数を与える。
その代わりに、特定の「マークされた」SeqNoを有するパケットの送信の時とその戻るACK(又はSACKed)の時との間に送信された送信済みフライトバイトの総数の近似及び/又は単純化として、各連続するRTTのスループットレート計算/導出を、特定の「マークされた」パケットのSeqNo+特定の「マークされた」パケットのバイト単位のデータペイロードサイズ−特定の「マークされた」SEQNoパケットが送信された時の受信された最大のACKNoに基づくものとすることができる。
ここでのRTTのスループットレートは、この故に、RTT期間中にネットワークに送信された送信済みフライトバイトの上で導出された総数/このRTT値(秒単位)として計算することができる。
.すべてのRTTで達成された最大のスループットレート値のレコードが、保持され、継続的に更新され、以下ではmaxTと称する。以下でRTT_maxTと称する、最大のスループットレートmaxTが達成された期間に関連するRTT値も、以下でIn_Flights_BYTES_maxTと称する、最大のスループットレートmaxTが達成された期間に関連する送信済みフライトバイトの総数と一緒に記録される。
.任意のRTT期間内のスループットレート<=maxTすなわち、このRTT期間内のスループットレートが>maxTにならない時に必ず、且つ、IF [このRTT期間中のフライトバイトの総数/In_Flights_Bytes_maxT]>[この期間中のミリ秒単位のRTT値/ミリ秒単位のRTT_maxT] THEN ボトルネックリンクの物理帯域幅容量又は回線レートが、今や、導出され/入手される。ここでの原理は、このRTT期間内のフライトバイト数が、例えばmaxT期間に関連するフライトバイト数の2倍であり、この期間のRTT値が、例えばRTT_maxTと同一(又はその2倍未満)のままである場合に、このRTTのスループットレートがmaxTを超えない理由は、maxTが既にボトルネックリンクの物理帯域幅容量/回線レートと既に同一であるからであり、したがって、このRTT期間中のさらに多くのフライトバイト及びこのRTT値が不釣り合いに増加はしなかったにもかかわらず、ボトルネックの回線レートで制限されているこのRTT内のスループットレートが、maxTを超えて増加しないからである。このテスト式に、数学的分散許容値、例えばIF [このRTT期間中のフライトバイトの総数/In_Flights_Bytes_maxT]>[この期間中のミリ秒単位のRTT値/ミリ秒単位のRTT_maxT]*分散許容値(例えば、1.05/1.10...など)を含めることができる。
.真のボトルネックリンクの物理帯域幅容量/回線レートが導出され/入手されたならば(=maxT)、変更されたTCPは、もはや、不必要な輻輳パケットドロップ及び/又はバーストパケットドロップを引き起こそうと一定不変に努力する既存RFC標準TCPのRTTごとのスロースタート指数関数的CWND増分/輻輳回避線形CWND増分のようにアグレッシブに経路の帯域幅について継続的にプローブすることはできない。ここで、変更されたTCPは、その後、すべての後続の次のRTT期間内のCWNDサイズ(任意選択として及び/又は有効ウィンドウサイズ)のすべての後続の増分を、[maxT(今はボトルネック回線レートと等しい)が達成される時のmaxTに関連するCWNDサイズ(任意選択として及び/又は有効ウィンドウサイズ)*(ミリ秒単位の最後の以前のすなわち最新のRTT値/ミリ秒単位のRTT_maxT)の5%を超えないように制限することができる。非常に可能性は低いが、いずれかの後続RTTでのスループットレートが、maxTより大きくなる場合には、maxTが更新され、ボトルネック回線レート判定プロセスが、もう一度繰り返される。したがって、変更されたTCPは、ボトルネックリンクをその回線レートでビジーに保つのに必ず必要なものを超えて、不必要にアグレッシブにCWNDサイズ及び/又は有効ウィンドウサイズを増分して輻輳ドロップ及び/又はバーストパケットドロップを引き起こすことはしない。
代替案では、変更されたTCPは、任意選択として、そのパケット生成/ネットワークへのパケット送信をレートペーシングすることができる、すなわち、変更されたTCPは、maxTボトルネック回線レートで:例えば、maxTがボトルネックの真の回線レートを達成した/これと等しくなった後には最小Inter−Bytes_forwarding_Interval=(1/(maxT /8))をセットし、そうでない場合には、任意選択として、最小Inter−Bytes_forwarding_Interval=(1/(maxT /8))*2をセットする(この時のCWND増大が、多くとも前のRTT期間のCWNDを指数関数的に2倍にするはずなので)ことによって、パケットを生成する/パケットを送信するのみである。
.さらに、任意選択として、変更されたTCPは、「余分な」フライトバイトのクリア及び/又は輻輳ドロップ(1つ又は複数)通知イベント(1つ又は複数)の際の説明された捨てられたパケットに関する適当なレート減少の対象となる、戻るACK(又はSACKed)レートによって許容される/「クロック」アウトされるパケット生成/パケット送信レートではなく、パケット生成/パケット送信レートが常に対応するmaxTレートであることを保証することができる(maxTが、ボトルネックの真の回線レートと等しいレートを既に達成していようと、単に最新の最大のmaxTであろうと):すなわち、変更されたTCPは、任意選択として、フライトバイトをクリアする/減らすために適当なレート減少をもたらすこと及び/又は捨てられたパケットの個数に対応してレートを減らすこと(例えば、輻輳ドロップ通知イベント(第3DUP ACK及び/又は後続の複数の同一ACKNoのDUPACK及び/又はRTOタイムアウト再送信とすることができる)の際に、同等ビット毎秒単位でのパケット生成/送信レートを、例えばmaxT*minRTT/この期間のRTT値又はmaxT−このRTT中に捨てられたバイト数*8まで減らす)を要求されない限り、最新のACK(又はSACKed)戻るレートによって制限されない制限されない最新のmaxTレートでパケットを生成する/送信するようにされる。
既存TCPソースコードを直接には変更しない実施態様:
TCPソースコードを直接に変更せずに、直前の段落で説明された発明を、独立のTCPパケットインターセプトソフトウェア/エージェントとして実施することができ、ここで、このソフトウェアは、1スライディングウィンドウ分の転送されるすべての送信されたデータセグメントのコピーを保持し、すべての高速再送信及び/又はRTOタイムアウト再送信、及び/又はローカルTCPから/に向かうインターセプトされたパケットの前方への転送のレートペーシング(maxT値に従う)すなわち輻輳ドロップ通知イベント時の転送レート調整プロセスを実行する。
TCPソースコードを直接に変更せずに、直前の段落で説明された発明を、独立のTCPパケットインターセプトソフトウェア/エージェントとして実施することができ、ここで、このソフトウェアは、1スライディングウィンドウ分の転送されるすべての送信されたデータセグメントのコピーを保持し、すべての高速再送信及び/又はRTOタイムアウト再送信、及び/又はローカルTCPから/に向かうインターセプトされたパケットの前方への転送のレートペーシング(maxT値に従う)すなわち輻輳ドロップ通知イベント時の転送レート調整プロセスを実行する。
ここに、純粋に、改善でき//変更できる必要なステップの概要を提供するための、そのような実施態様の概要がある。さらに、すべての洗練された詳細なアルゴリズム的/コーディングステップは、純粋に、例示的概要のためのみであり、且つ、改善する/変更することができる:
.インターセプトソフトウェアは、TCPから来る/MSTCP宛の各すべてのパケットをインターセプトする。
.インターセプトソフトウェアは、TCPから来る/MSTCP宛の各すべてのパケットをインターセプトする。
.ソフトウェアは、すべてのデータペイロードを搬送するパケットのコピーを、上昇するSeqNoに従って明確に順序付けられたリストエントリ内で維持する。
.第3DUP ACK通知の際に、ソフトウェアは、第3DUP ACK及び同一ACKNoの後続の複数DUP ACKと同一のSeqNoを有するリスト上のデータペイロードパケットコピーエントリからの高速再送信を実行する。ソフトウェアは、DupNumと同一のACKNo値のDUP ACK(1つ又は複数)の累積個数を記憶し、さらに、Selective Acknowledgementフィールド内の「ギャップ(1つ又は複数)」によって示されるすべての捨てられたパケットを高速再送信する。ソフトウェアは、各すべてのDUP ACK(1つ又は複数)のACKNoを、このパケット(1つ又は複数)のACKNo値をACKNo−DupNum*例えば1500まで減分することによって変更し、したがって、TCPは、絶対に、同一のACKNoを有するDUP ACKを全く受信しない → TCPは、高速再送信に起因してCWNDサイズを絶対に減らさない/半分にしない(これは、現在はソフトウェアによって世話される)。ソフトウェアは、どのCWNDサイズ値も減らさない(このパラメータは、ソフトウェアによってアクセス可能ですらない)。
.ソフトウェアは、前に説明した全般的な原理で概要を示した原理/プロセス/プロシージャ又はその組合せ/サブコンポーネントを組み込む。
さらに、
.ソフトウェアは、MSTCPの代わりにRTOタイムアウト再送信を完全に実行することすらできる(ヒストリカルな戻るACKのRTT値からのRTO計算を組み込むことによって):したがって、ソフトウェアは、転送のためにTCPからパケット(1つ又は複数)を受信した時に、即座にすべての単一のパケットの「ACKをスプーフィング」することができる → TCPは、今は、RTOタイムアウト再送信を行うことすらしない。ソフトウェアは、さらに、TCPパケット生成レート/TCPパケット送信レートを制御する技法として、TCPからパケット(1つ又は複数)を受信する時にACKのスプーフィングを「遅延させる」ことができる。
.ソフトウェアは、MSTCPの代わりにRTOタイムアウト再送信を完全に実行することすらできる(ヒストリカルな戻るACKのRTT値からのRTO計算を組み込むことによって):したがって、ソフトウェアは、転送のためにTCPからパケット(1つ又は複数)を受信した時に、即座にすべての単一のパケットの「ACKをスプーフィング」することができる → TCPは、今は、RTOタイムアウト再送信を行うことすらしない。ソフトウェアは、さらに、TCPパケット生成レート/TCPパケット送信レートを制御する技法として、TCPからパケット(1つ又は複数)を受信する時にACKのスプーフィングを「遅延させる」ことができる。
.TCPのCWNDサイズ/有効ウィンドウサイズを変更するのではなく(ソフトウェアからアクセス可能ですらない)これは必要な本質的な要求される特徴ではないが、ソフトウェアは、その代わりに、ソフトウェア自体の中で「ミラーCWND機構/ミラー有効ウィンドウ機構」をシミュレートするか、あるいは、その代わりに、例えばlargestRcvACKNo、largestSentSeqNoなどの他のパラメータ値を制御する/調整するためのレートペーシング、その減算差が必要なサイズになることを保証すること...などを介するフライトバイトの減少などの他の同等の形で同等の効果を与えるかのいずれかを行うことができる。
.ソフトウェアは、既存の標準RFCで定義された、各すべてのインターセプトされたパケットに対するチェックサム検証、SeqNoラップアラウンド検出及び比較、タイムスタンプラップアラウンド検出及び比較...などのさまざまな標準TCP技法をも実施することができる。
ここに、純粋に例示のみのための、さらに訂正し/改善し/変更し且つ/又は完全に異なって設計することができる、ソフトウェア設計に関するいくつかの単純な概要がある。
1.純粋なインターセプト転送:
2.+チェックサム+ラップアラウンド:
3.+同一のDUP ACKNoについて1回だけの、同一のDUPACKされたパケットコピーだけの高速再送信:
4.+同一のDUP ACKNoについて1回だけの、すべてのパケットコピーの高速再送信:
5.+同一ACKNoのDUP ACKについて1回だけの、最大のSACKされた「ギャップ(1つ又は複数)」までのすべてのパケットコピーのみの高速再送信:
6.+各DUPACKでの、最大のSACKされた「ギャップ(1つ又は複数)」までで>LARGESTRTXSEQNoのすべてのパケットコピーだけの高速再送信:(ソフトウェアが各後続の同一ACKNoのDUP ACK及び/又は新しい増分されたACKNoのDUP ACKについて不必要に複数回繰り返して高速送信することを望まず、後続の同一ACKNoのDUP ACKの受信時に既に高速再送信されたパケットをもう一度不必要に再送信しないようにするために、最大の高速再送信されたパケットのSeqNoすなわちLargestRtxSeqNoを記録する/更新することができる。
2.+チェックサム+ラップアラウンド:
3.+同一のDUP ACKNoについて1回だけの、同一のDUPACKされたパケットコピーだけの高速再送信:
4.+同一のDUP ACKNoについて1回だけの、すべてのパケットコピーの高速再送信:
5.+同一ACKNoのDUP ACKについて1回だけの、最大のSACKされた「ギャップ(1つ又は複数)」までのすべてのパケットコピーのみの高速再送信:
6.+各DUPACKでの、最大のSACKされた「ギャップ(1つ又は複数)」までで>LARGESTRTXSEQNoのすべてのパケットコピーだけの高速再送信:(ソフトウェアが各後続の同一ACKNoのDUP ACK及び/又は新しい増分されたACKNoのDUP ACKについて不必要に複数回繰り返して高速送信することを望まず、後続の同一ACKNoのDUP ACKの受信時に既に高速再送信されたパケットをもう一度不必要に再送信しないようにするために、最大の高速再送信されたパケットのSeqNoすなわちLargestRtxSeqNoを記録する/更新することができる。
後に、
7.+パケット転送間インターバル(事前に既知のボトルネック回線レートのユーザ入力によって決定される):
8.+(7)と同様に、ユーザ入力ではなく最新の推定されたボトルネック回線レートの使用
9.+パケット転送間インターバル値の制御/調整を介して動作するTCPフレンドリアルゴリズム
初期基本レートペースモジュールの単純な概要:
追加されなければならない第1ステージレートペースモジュール仕様(この仕様は、ネットワークへのパケット送信の平滑化だけを実行し、他には何も実行しない):
1.ユーザに、ボトルネックリンクのkbs単位の帯域幅を入力させる、例えばSAN.exe B(例えば512kbs):これは、通常はセンダ/ユーザのファーストマイルアップロード帯域幅であるが、時にはレシーバのラストマイルとすることができる(ユーザがレシーバのラストマイルの帯域幅を知らない場合には、単にユーザのファーストマイルを入力する:DSL加入者のアップロード帯域幅は、通常はダウンロード帯域幅よりはるかに少ない)[より後のソフトウェアは、ユーザ入力を全く必要とせずに、最新の推定されたBの値を提供することができる]。
7.+パケット転送間インターバル(事前に既知のボトルネック回線レートのユーザ入力によって決定される):
8.+(7)と同様に、ユーザ入力ではなく最新の推定されたボトルネック回線レートの使用
9.+パケット転送間インターバル値の制御/調整を介して動作するTCPフレンドリアルゴリズム
初期基本レートペースモジュールの単純な概要:
追加されなければならない第1ステージレートペースモジュール仕様(この仕様は、ネットワークへのパケット送信の平滑化だけを実行し、他には何も実行しない):
1.ユーザに、ボトルネックリンクのkbs単位の帯域幅を入力させる、例えばSAN.exe B(例えば512kbs):これは、通常はセンダ/ユーザのファーストマイルアップロード帯域幅であるが、時にはレシーバのラストマイルとすることができる(ユーザがレシーバのラストマイルの帯域幅を知らない場合には、単にユーザのファーストマイルを入力する:DSL加入者のアップロード帯域幅は、通常はダウンロード帯域幅よりはるかに少ない)[より後のソフトウェアは、ユーザ入力を全く必要とせずに、最新の推定されたBの値を提供することができる]。
2.最小バイトインターバル間転送を保証する単純なレートペースモジュールを組み込む、例えば、サイズS1(例えば1000バイト全長、カプセル化+ヘッダ+ペイロード)のパケットを転送する場合に、S2(例えば、今回は750バイト)の次パケットサイズを転送する前に1000バイト/(B/8)が経過すること...などを確実にし...総パケットサイズSは、TCPヘッダから確かめることができる。
3.新しいMSTCPパケット/高速再送信/RTO再送信...などのどれであれ、転送されるべきすべてのパケットは、まず、これから転送されるパケットバッファにアペンドされる:このバッファは、明確に順序付けされることを最もよく必要とするが、「ギャップレス」でないことを必要とし、MSTCP又はソフトウェア高速再送信のいずれかからの到着するパケットは、SeqNo昇順でアペンド/挿入される(すなわち、高速再送信/MSTCP RTO再送信パケットが、より大きいSeqNoを有する他のデータパケットの前にまず転送されるようにするために)。同一SeqNoの純ACK/データパケットは、互いに関する相対的な到着の順序で挿入される必要があるはずである。
(注:ここでのMSTCPは、すべてのRTO再送信を行い続ける)。
[より後の仕様機能強化:
.ラウンドトリップ単一のマークされたパケットのSeqNo...及びラウンドトリップ完了に続く後続の次の転送されるパケットのSeqNo...などに基づく、各RTTの総送信済みバイトの簡単なカウントのために、このこれから転送されるリスト内のパケットエントリにTotal Packet Length in Bytes(バイト単位の総パケット長)フィールドを追加することが有用である。このリストは、ペーシングを実施する必要があり、ここでこの第1ステージで明確に順序付けられなければならない「ギャップレス」でない必要があるPacket Copyリストとは異なる。
.ラウンドトリップ単一のマークされたパケットのSeqNo...及びラウンドトリップ完了に続く後続の次の転送されるパケットのSeqNo...などに基づく、各RTTの総送信済みバイトの簡単なカウントのために、このこれから転送されるリスト内のパケットエントリにTotal Packet Length in Bytes(バイト単位の総パケット長)フィールドを追加することが有用である。このリストは、ペーシングを実施する必要があり、ここでこの第1ステージで明確に順序付けられなければならない「ギャップレス」でない必要があるPacket Copyリストとは異なる。
.これから転送されるバッファ>例えば10Kバイトである時には、必ず、MSTCPに「0」ウィンドウ更新を送信し、すべての着信パケットのウィンドウサイズを「0」再計算チェックサムに変更する。
.パケットのSeqNo(SYNC/SYNC ACK/ACKの後の最初のパケットから開始して)を「マーク」し/時刻を送信し/this_RTT_total_bytes_forwarded=この「マーク」パケットの長さをセットし、即座にnext_RTT_total_bytes_forwardedのカウントを開始する(この「マーク」パケットを含まない)。戻るパケットのACKNo>「マーク」SeqNoである場合には、このRTT値(現在のシステム時刻−送信時刻)を記録し、this_RTT_total_bytes_forwardedを記録する。その後、まさに最新の転送されたパケットのSeqNoとして次の「マーク」SeqNoを選択し(前の「マーク」SeqNoが戻る前に転送される純ACKではなくデータパケットがある場合、そうでない場合には、次のデータパケットが転送されるのを待つ)......など.....など。
(RTT値及びthis_RTT_total_bytes_forwardedの最新の更新されたインスタンスのレコードオンリーを保つことだけが必要)
.ソフトウェアは、DUPACKパケットが純ACKであるすなわちデータを搬送していない場合又はSACKフラグをセットされたデータを搬送するパケットである場合に限って、DupNumカウントを増分しなければならない(リモートクライアントもデータを送信する場合に、我々は、ドロップがない場合であっても多数の同一SeqNoのパケットを得始める可能性がある)。また、もう1つの変数DupNumData(同一SeqNoを有するデータペイロードパケットの個数)を増分し、同一SeqNoを有するすべての着信パケットを−(DupNum+DupNumData)に変更する:DupNumDataは、DupNumに似た形で更新され、DupNum処理は、今や、純DUPACKパケットとデータペイロードを伴うパケットとの間で区別する必要がある。
.ソフトウェアは、DUPACKパケットが純ACKであるすなわちデータを搬送していない場合又はSACKフラグをセットされたデータを搬送するパケットである場合に限って、DupNumカウントを増分しなければならない(リモートクライアントもデータを送信する場合に、我々は、ドロップがない場合であっても多数の同一SeqNoのパケットを得始める可能性がある)。また、もう1つの変数DupNumData(同一SeqNoを有するデータペイロードパケットの個数)を増分し、同一SeqNoを有するすべての着信パケットを−(DupNum+DupNumData)に変更する:DupNumDataは、DupNumに似た形で更新され、DupNum処理は、今や、純DUPACKパケットとデータペイロードを伴うパケットとの間で区別する必要がある。
本明細書で説明するすべての方法及び原理のさまざまなコンポーネント特徴は、さらに、示される方法のいずれかに組み込まれて一緒に働くようにすることができ、さまざまなトポロジネットワークタイプ及び/又はさまざまなトラフィック/グラフ分析の方法及び原理は、さらに、リンクの帯域幅の経済を使用可能にすることができる。本説明のどこに現れようとも、使用される数字が、可能な値の特定の実例だけを示すことを意図され、例えば、RTT*1.5では、数字1.5を、目的及び特定のネットワークに適当な別の値セッティング(しかし、必ず1.0より大きい)、例えば0.1秒/0.25秒...などの知覚期間によって置換することができることにも留意されたい。さらに、示される特定の例及び数字のすべては、基礎になるアイデア、概念、及びその相互作用も伝えることを意図されているが、使用される実際の数字及び例に限定されない。
上記で説明した実施形態は、単に、本発明の原理を示す。当業者は、その本発明の原理を実施し、それに含まれるさまざまな修正及び変更を作ることができる。
2005年10月11日ファイリング
増分展開可能な外部インターネットNextGen TCPの単純な実施態様のいくつかの例
背景材料
.第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTTは、最後の測定されたラウンドトリップ時間RTTに関する既存のLinux TCBで維持される変数からたやすく入手可能である。
増分展開可能な外部インターネットNextGen TCPの単純な実施態様のいくつかの例
背景材料
.第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTTは、最後の測定されたラウンドトリップ時間RTTに関する既存のLinux TCBで維持される変数からたやすく入手可能である。
.最小の記録されたmin(RTT)は、既存のWestwood/FastTCP/Vegas TCBで維持される変数からたやすく入手可能であるのみであるが、min(RTT)=[min(RTT),最後の測定されたラウンドトリップ時間RTTの]の最小値を継続的に更新する2〜3行のコードを記述することは、十分に簡単であるに違いない。また、レシーバベースドTCP変更/レシーバベースドTCPレート制御があれば、OTT及びmin(OTT)を、センダベースドのRTT及びmin(RTT)の代わりに利用することができ、これは、センダのTimestampオプションから利益を得ることができ、あるいは、レシーバベースドTCPは、OTT及びmin(OTT)を確かめる必要に依存するのではなく、パケット到着間技法を利用することができる。
参考文献:
http://www.cs.umd.edu/〜shankar/417−Notes/5−note−transportCongControl.htm:Linux TCBによって維持されるRTT変数
http://www.scit.wlv.ac.uk/rfc/rfc29xx/RFC2988.html:RTO計算
Google Search用語「tcp rtt variables」
http://www.psc.edu/networking/perf_tune.html:Linux TCP RTTパラメータのチューニング
Google Search:「tcp minimum recorded rtt」又は「linux tcp minimum recorded rtt variable」。注:TCP Westwoodは最小RTTを測定する。
http://www.cs.umd.edu/〜shankar/417−Notes/5−note−transportCongControl.htm:Linux TCBによって維持されるRTT変数
http://www.scit.wlv.ac.uk/rfc/rfc29xx/RFC2988.html:RTO計算
Google Search用語「tcp rtt variables」
http://www.psc.edu/networking/perf_tune.html:Linux TCP RTTパラメータのチューニング
Google Search:「tcp minimum recorded rtt」又は「linux tcp minimum recorded rtt variable」。注:TCP Westwoodは最小RTTを測定する。
Google Search用語「CWND size tracking」、「CWND size estimation」、「Receiver based CWND size tracking estimation」、「RTT tracking」、「RTT estimation」、「Receiver based RTT tracking estimation」、「OTT tracking」、「OTT estimation」、「Receiver based OTT tracking estimation」、「total in−flights−packets tracking」、「total in−flights−packets estimation」、「Receiver based total in−flight−packets tracking estimation」...など。
初期の単純な実施態様のアイデア
変更されたlinuxを使用するテスティングを検証するためには:
最も単純で十分なもので、1行を変更し、ループ遅延コード(Linux TCP実行を「ポーズ」させるため)を挿入することだけが必要である。
変更されたlinuxを使用するテスティングを検証するためには:
最も単純で十分なもので、1行を変更し、ループ遅延コード(Linux TCP実行を「ポーズ」させるため)を挿入することだけが必要である。
1.Linux高速再送信モジュールコードでは、3つのDUP ACKの際に、CWNDを半分にしない、すなわち、CWNDは、現在は変更されない(CWND=CWND/2ではなく)。
2.それと同時に、同一のコードセクション位置で、単純に2〜3行のコードを挿入して、0.3秒だけLinux TCPプログラムの実行を「ポーズ」させる(「ポーズ」をシミュレートする)。[後でのみ:まさに最初のDUP ACKされたパケットを制約されずに再送信し、次に、この同一の位置で300msカウントダウングローバル変数「Pause」をセットするのみにし、その後、Linux TCPがその「最終パケット送信」コードセクションで、何であれすべての種類の送信を可能にするためにこの「Pause」変数=0であることをチェックする(Linuxがこの「Pause」によって停止されたパケットを保持するために「最終送信」キューを実施すると仮定して)ことを可能にして、
パケットを捨て、パケットを送信する前に待ち時間遅延を導入する2〜3行のコードを記述し、単に、ユーザ入力の一定の周期的ドロップインターバルと、連続するドロップの回数(例えば、0.125及び1すなわち、8つの生成されたパケットおきに1回だけ1つのパケットを捨てる[12.5%パケットロスレートと同等]又は0.125及び3すなわち、8つの生成されたパケットおきに1回だけ3つの連続するパケットを捨てる[37.5%パケットロスレートと同等])と、RTT待ち時間(例えば、200ms)とを可能にする
ことがはるかに好ましい。
パケットを捨て、パケットを送信する前に待ち時間遅延を導入する2〜3行のコードを記述し、単に、ユーザ入力の一定の周期的ドロップインターバルと、連続するドロップの回数(例えば、0.125及び1すなわち、8つの生成されたパケットおきに1回だけ1つのパケットを捨てる[12.5%パケットロスレートと同等]又は0.125及び3すなわち、8つの生成されたパケットおきに1回だけ3つの連続するパケットを捨てる[37.5%パケットロスレートと同等])と、RTT待ち時間(例えば、200ms)とを可能にする
ことがはるかに好ましい。
コードは、単にドロップインターバル及び連続ドロップ回数に基づいて前方に転送しないことと、スケジューリングされたすべての生き残っているパケットがその受信されたローカルsystimeより例えば200ms後に転送されることとを必要とする → これらの前方に転送されるようにスケジューリングされた生き残っているパケットは、ネットワークへの前方への転送のためにキュー内に保持される必要がある(それ自体の個々のスケジューリングされた前方転送ローカルsystimeと共に)。
10mbs LAN及び500kbsに調整された無線ルータリンク上で(イーサネットを「半二重」モードにセットすることを忘れないように)、さまざまなシミュレートされたロスレート及び待ち時間と一緒にすばやく検証することができる。その最も単純で十分なものでは、1行を変更し、ループ遅延コード(Linux TCP実行を「ポーズ」させるため)を挿入することだけが必要である。
1.Linux高速再送信モジュールコードでは、3つのDUP ACKの際に、CWNDを半分にしない、すなわち、CWNDは、現在は変更されない(CWND=CWND/2ではなく)。
2.それと同時に、同一のコードセクション位置で、単純に2〜3行のコードを挿入して、0.3秒だけLinux TCPプログラムの実行を「ポーズ」させる(「ポーズ」をシミュレートする)。
高ロスレート長待ち時間外部インターネット/LFNを介する大きいファイル転送SAN FTPは、現在、100%に近い使用可能帯域幅利用度を示さなければならない!。例えばShunra社のソフトウェアを間にはさんで、例えば10%ドロップレート及び/又は300ms待ち時間をシミュレートするすなわち長距離高ロスレートをシミュレートすることができ、あるいは、単純に、パケットを捨て、パケットを送信する前に待ち時間遅延を導入するコードを記述することができる。NS2などのシミュレーションを使用してこれを簡単に検証することもできる。
今は、センダTCPのCWNDの現在のサイズは、このサイズが達成されたならば、センダTCPが戻るACKレートに正確に対応して新しいパケットを注入するだけなので、いかなる形でも輻輳ドロップを引き起こさないことが非常に明瞭である:これがCWNDサイズの加速瞬間増加であることに留意されたい(戻るACKレートより多数のパケットをネットワークに瞬間的に注入すること、例えば、戻るACKレートのそれを2倍にする指数関数的増分、これはパケットドロップの主原因である:CWNDが現在の既存のサイズを既に達成したならば、どれほど大きくても、それは、戻るACKレートより多数の新しいパケットがネットワークに注入されることを引き起こさず、これは、CWNDの瞬間的サイズ増分の時に限って発生し得る)。
2〜3行のLinuxソースコードを変更することは、実に単純であり、Windowsでは、まず、MSTCPからすべての高速再送信機能を引き継ぐインターセプトソフトウェアモジュールを準備する必要だけがある。Windowsで実施するためには、MSTCPが失われたパケットの高速再送信要求について全く通知されない/知らないようにするために、各着信/発信パケットをインターセプトし、着信DUP ACKのAcknowledgement Numberフィールドを変更する必要がある(MSTCPではなく、我々のインターセプトソフトウェアが、今や、すべての高速再送信機能を行う):このインターセプトソフトウェアモジュールは、さらに、MSTCPからすべてのRTOタイムアウト再送信機能を引き継ぐことができる(例えば、まさにMSTCP自体のRTOタイムアウトトラッキングアルゴリズムをミラーリングするか、新しい変更された所望のアルゴリズムを考案することができる)。インターセプトソフトウェアモジュールが、今や、既存MSTCPのDUP ACK高速再送信機能及びRTOタイムアウト再送信機能のすべてを引き継いだ状態で、インターセプトソフトウェアは、今や、インターセプトされたパケットに関するMSTCPに戻るSPOOF ACKの即座のスプーフィング/一時的停止及び/又はMSTCPパケット生成を停止するためにSPOOF ACK内のレシーバウィンドウサイズフィールドに「0」をセットすることを介して、MSTCPの新規パケット生成/送信レートに対する完全なトータルコントロールを有することができる。
例えばLinux/FreeBSD/Windowsソースコードでは、次の非常に基本的な形で働くことを即座に示されるこのNextGenFTPを有するために2〜3行を修正する/挿入することができなければならない。
1.Linuxの3DUP ACK高速再送信モジュールでは、CWNDをCWND/2に変更するコードラインを除去することだけが必要である(すなわち、CWNDは、今や、変更されなくなる)。すべての他のコードラインは、全く修正される必要がない:例えば、SSthreshには、今や、CWNDがセットされる(すなわち、TCPは、今や、指数関数的2倍化ではなく、すべてのRTTについて1セグメントだけ加法的に増加するのみである)。これ自体は、今や、高ドロップレートを有するLFN/外部インターネットで100%に近いリンク利用度を示さなければならない! (すなわち、ここでの非常に未完成の形で働くことを示される)。
テストを助けるために、%パケットドロップを導入し且つ/又は経路待ち時間をシミュレートすることのできるShunraなどのソフトウェアを使用し、このソフトウェアを、NextGenFTPとネットワークの送信する側との間に置くか、類似する単純なユーティリティをコーディングしてもよい。
2.[任意選択であるが確かに後に必要になる]NextGenFTPは、実際に、3つのDUP ACKなどのパケットドロップイベントの際に適当なインターバルの間だけ「ポーズ」して、バッファリングされているそれ自体の「余分な」送信されたフライトパケットのすべてをクリアしなければならない(が、すべての既存の通常のTCP/FTPは、そのCWNDを劇的に半分にし、深刻な不必要な明確に文書化されたスループット問題を引き起こす)。例えばLinuxでは、実際の現実の非輻輳RTT又は非輻輳OTTが前もって既知でない場合に、フローの最小の観察されたRTTのレコードmin(RTT)又はmin(OTT)を保持し、3DUP ACKの際に、例えば0.3秒(同等秒数単位での最も一般的なルータバッファサイズである)又はあるアルゴリズム的に導出された期間(...後に)の間だけネットワークへのすべてのパケット注入を「停止」させる、あるコードを挿入することだけが必要である[ポーズの代わりに、CWNDに適当な対応するアルゴリズム的に決定された値(1つ又は複数)をセットすることもできることに留意されたい!。考案される所望のアルゴリズムに応じて、{最新のRTT値(又は適当な場合にOTT)−記録されたmin(RTT)値(又は適当な場合にmin(OTT))}/min(RTT)倍だけCWNDサイズを減らすこと、あるいは、[{最新のRTT値(又は適当な場合にOTT)−記録されたmin(RTT)値(又は適当な場合にmin(OTT))}/最新のRTT値]倍だけCWNDサイズを減らすことすなわちCWNDには今やCWND*[1−[{最新のRTT値(又は適当な場合にOTT)−記録されたmin(RTT)値(又は適当な場合にmin(OTT))}/最新のRTT値]]がセットされる、あるいは、CWNDサイズにCWND*min(RTT)(又は適当な場合にmin(OTT))/最新のRTT値(又は適当な場合にOTT)をセットすること、....などである]。min(RTT)が、記録された経路の非輻輳RTTの最新の推定値であることに留意されたい。
3.[任意選択であるが確かに後に必要になる]フローの経路に沿ったボトルネックリンクの使用可能帯域幅は、簡単に判定することができ(非常に明確に文書化されているが、我々自身の開発された技法と比較して不完全である)、したがって、使用可能帯域幅のこの上限がわかった/判定されたならば、NextGenTCPは、その後、もはや、CWND増分を引き起こしてはならない(指数関数的2倍化であれ線形増分であれ) → NextGenTCPは、この達成された上限レートで送信したならば、もはや不必要にCWND増分を引き起こさず、不必要にパケットドロップを引きこさない!。
初期の単純な実施態様のアイデア(洗練1):
変更されたlinuxを使用するテスティングを検証するためには:
最も単純で十分なもので、1行を変更し、ループ遅延コード(Linux TCP実行を「ポーズ」させるため)を挿入することだけが必要である。
変更されたlinuxを使用するテスティングを検証するためには:
最も単純で十分なもので、1行を変更し、ループ遅延コード(Linux TCP実行を「ポーズ」させるため)を挿入することだけが必要である。
1.Linux高速再送信モジュールコードでは、3つのDUP ACKの際に、CWNDを半分にしない、すなわち、CWNDは、現在は変更されない(CWND=CWND/2ではなく)。
2.それと同時に、同一のコードセクション位置で、単純に2〜3行のコードを挿入して、0.3秒だけLinux TCPプログラムの実行を「ポーズ」させる(「ポーズ」をシミュレートする)。[後に:まさに最初のパケットを再送信し、次に、この同一の位置で300msカウントダウングローバル変数「Pause」をセットするのみにし、その後、Linux TCPがその「最終パケット送信」コードセクションで、何であれすべての種類の送信を可能にするためにこの「Pause」変数=0であることをチェックする(Linuxがこの「Pause」によって停止されたパケットを保持するために「最終送信」キューを実施すると仮定して)ことを可能にすることがはるかに好ましい。
[後でのみ:まさに最初のパケットを再送信し、次に、この同一の位置で300msカウントダウングローバル変数「Pause」をセットするのみにし、その後、Linux TCPがその「最終パケット送信」コードセクションで、何であれすべての種類の送信を可能にするためにこの「Pause」変数=0であることをチェックする(Linuxがこの「Pause」によって停止されたパケットを保持するために「最終送信」キューを実施すると仮定して)ことを可能することがはるかに好ましい。
はるかに後でのみ:これは、便利に、次によって達成する/実装することができる(提案としてのみ)。
1.Linux高速再送信モジュールコードでは、3つのDUP ACKの際に、CWNDを半分にしない、すなわち、CWNDは、現在は変更されない(CWND=CWND/2ではなく)。
2.それと同時に、同一のコードセクション位置で、単純にこの同一の位置(正確に、CWNDが今やCWND/2ではなく変更されなくなるように変更される場所)で300msカウントダウングローバル変数「Pause」をセットし、その後、Linux TCPがその「最終パケット送信」コードセクションで、パケットのSeqNo=<最大の送信された肯定応答されていないSeqNo(このSeqNoは、既存TCPパラメータから簡単に入手することができる、すなわち、パケットが再送信される古いSeqNoのパケットである場合に限って、「Pause」変数>0に関わりなくパケットを前方に転送することを許容するのみ)である場合を除いて、すべての種類の送信を可能にするためにこの「Pause」変数=0であることをチェックする。
すなわち、Linux TCPは、必ず、すべての高速再送信パケット及び/又はRTOタイムアウト再送信パケットを、CWND又は有効ウィンドウサイズ制約に一切関わりなく、即座に制約されずに前方に転送することを可能にする(再送信パケットは、いかなる形でも既存のフライトパケットを全く増分しない!。しかし、SeqNo>最大の送信された肯定応答されていないSeqNoを有する新しいパケットの前方への転送が、既存の総フライトパケット数を増加させる可能性があることに留意されたい)。
もう1つの実施形態は、単純に、輻輳ドロップイベント(1つ又は複数)の際に「pause」変数(固定された例えば300msのインターバル又は最新のRTT−min(RTT)インターバル...などの導出されたもののいずれか)をカウントダウンするために、絶対にCWNDを全く減分せず、「pause」変数>0の場合にCWND増分を一切可能にしないことであるはずである → この実施態様が、バッファリングされている余分のフライトパケットを減らすのを助けないという点でアグレッシブ[また、CWNDを、ステップ1とステップ2との両方と一緒に、「0」又はlargest.UNA.SeqNo−SEnt.UNA.SeqNoをセットするのではなく、単純に必ず変更されない/減分されないものとすることができる]。
「pause」変数>0である間にこの非増分部分を下の以前の実施態様に導入することもでき、したがって、戻るACKがスライディングウィンドウの左エッジを進めることは、戻るACK−クロッキングレートに対応する同一のレートで新しいパケット(1つ又は複数)(すなわち、SeqNo>largest.Sent.SeqNoを有するパケット(1つ又は複数))が注入されることを引き起こすだけであって、戻るACKのレート−クロッキングレートを超える「加速的」CWND増分/余分の加速的な指数関数的又は線形の新しいパケット(1つ又は複数)注入を引き起こさない。カウントダウン「pause」グローバル変数>0の時に、Linux TCPは、着信ACKが今やスライディングウィンドウ左エッジを進める場合であってもCWNDを一切増分してはならない...すなわち、Linux TCPは、戻るACK−クロッキングレートと同一のレートでネットワークに新しいパケットを注入することができるが、戻るACKのレート−クロッキングレートを超えて「指数関数的に2倍にする」又は「線形に増やす」ことを行ってはならない(すべてのCWND増分コード行を、まずカウントダウン「pause」>0であるかどうかをチェックし、そうである場合に増分をバイパスするように変更することによって簡単に実施される)。
また、代替案では、Linux変更は、単に単純に次を要求することができる。
1.輻輳ドロップイベント(1つ又は複数)の際にCWND値を全く変更せず/減分せず、また、輻輳ドロップイベントによってトリガされる、続く「ポーズインターバル」、例えば300ms(あるいは、最新RTT−min(RTT)...又はmax[最新RTT−min(RTT)、例えば300ms]...などのアルゴリズム的に導出されたインターバル)中にCWNDを全く増分しない → 輻輳ドロップイベント(1つ又は複数)の際に、変更されたLinux TCPは、「トリガされたポーズインターバル」中の戻るACKクロッキングレートを超えて新しい「加速的」パケット(1つ又は複数)をネットワークに(すなわち、SeqNo>largest.Sent.SeqNoを有する)注入しない[すなわち、CWNDは、CWND<センダ/レシーバ最大ウィンドウサイズの場合であっても、スライディングウィンドウの左エッジを進めた戻るACKによって増分はされない]。
及び/又は任意選択として、
2.必ず、再送信パケット(すなわち、SeqNo=<largest.Sent.SeqNoを有するパケット)を、スライディングウィンドウ機構によって一切制約されずに前方に転送することを可能にする。
2.必ず、再送信パケット(すなわち、SeqNo=<largest.Sent.SeqNoを有するパケット)を、スライディングウィンドウ機構によって一切制約されずに前方に転送することを可能にする。
ステップ1.....に対してより洗練されて.....例えばCWNDに(Largest.SENT.SeqNo−SENT.UNA.SeqNo)をセットする300msの「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを復元する... → この形で、Linux高速再送信モジュールは、各後に到着する複数の同一SeqNoのDUP ACKがCWNDをLargest.SENT.SeqNo−SENT.UNA.SeqNo+1に増分するので、着信する同一SeqNoの複数の後続DUP ACKのSACKフィールドによって示される欠けているギャップパケットを「ストロークアウト」することができる[CWNDに「0」をセットする場合に、欠けているギャップパケットの前方に転送する再送信を防ぐことができるが] → ステップ1の変更自体単独は、ステップ2を必要とせずにかなりうまく働かなければならないが、ステップ1及びステップ2の変更を一緒に用いると、CWNDに「0」がセットされている場合であってもあまり問題にならない。
CWNDにLargest.SENT.SeqNo−SENT.UNA.SeqNoをセットすることは、「加速的な」新しい追加のパケットがネットワークに注入されるのを防ぐことにおいて、「0」をセットすることと同一の効果を有するが、再送信パケット(SeqNo=<Largest.SENT.SeqNoを有する)を制約されずに前方に転送することを可能にする。
既存RFCのTCPソースコード変更及び単純化されたテストの概要:
テストベッドは、次の通りでなければならない(未変更のLinux TCPサーバと比較して)。
テストベッドは、次の通りでなければならない(未変更のLinux TCPサーバと比較して)。
変更されたLinux TCPサーバ[+例えば2/5/20%のシミュレートされたパケットドロップ+例えば100/250/500msのRTT待ち時間]−>ルータ−>既存Linux TCPクライアント
ルータとクライアントとの間のリンクは、500kbpsとすることができ、ルータは、10個又は25個のパケットバッファを有することができる。例えば32/64/256Kバイトのセンダ及びレシーバのウィンドウサイズ。
ルータとクライアントとの間のリンクは、500kbpsとすることができ、ルータは、10個又は25個のパケットバッファを有することができる。例えば32/64/256Kバイトのセンダ及びレシーバのウィンドウサイズ。
Linux TCP変更仕様の提案:
(簡単な実世界Linux変更実施態様のための、例えば300msインターバル中にCWND=0をセットすることによって「送信ポーズ」を達成する単純な技法)
1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを0にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするためにCWNDを乗法的に減らし(CWND=CWND/2)、CWNDに(Largest.SENT.SeqNo−SENT.UNA.SeqNo)をセットする300ms「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを復元する場合には、必ず、半分にされた又はLargest.SENT.SeqNo−SENT.UNA.SeqNoのCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない==>これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である。
(簡単な実世界Linux変更実施態様のための、例えば300msインターバル中にCWND=0をセットすることによって「送信ポーズ」を達成する単純な技法)
1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを0にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするためにCWNDを乗法的に減らし(CWND=CWND/2)、CWNDに(Largest.SENT.SeqNo−SENT.UNA.SeqNo)をセットする300ms「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを復元する場合には、必ず、半分にされた又はLargest.SENT.SeqNo−SENT.UNA.SeqNoのCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない==>これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である。
[ここでのステップ2は、任意選択であるが好むことができ、ステップ1だけを伴うテストの後で追加することができる]
2.CWND/有効ウィンドウスライディングウィンドウスロット可用性に関わりなく、SeqNo=<最大の既存の送信されたSeqNoを有するすべての再送信パケットを制約されずにイネーブルする。
2.CWND/有効ウィンドウスライディングウィンドウスロット可用性に関わりなく、SeqNo=<最大の既存の送信されたSeqNoを有するすべての再送信パケットを制約されずにイネーブルする。
パケットを前方に即座に転送することを可能にするかどうかをLinux TCPがチェックする(すなわち、Largest.SENT.SeqNo−SENT.UNA.SeqNo<有効ウィンドウサイズであるかどうかに依存する)スライディングウィンドウコードセクションで、我々は、パケットのSEqNo=<Largest.SENT.SeqNoである(すなわち、再送信パケット、これは、何にも関わりなく前方への転送を妨げられてはならない)場合に、このチェックを「バイパスする」コードを非常に単純に挿入することができる → この形で、Linux TCP再送信モジュールは、必ず、第3DUP ACK/後続の複数のDUP ACKによって示されるすべての「欠けているギャップパケット」を即座に「ストロークアウト」することができる。[SeqNoラップアラウンド保護を組み込むことを忘れないように]。
Windowsプラットフォームインターセプト高速再送信モジュールに関する有用な注
このモジュールは(MSTCPからすべての高速再送信機能を引き継ぎ、MSTCPが絶対にどのDUP ACKイベントについても全く知ることがなくなるように着信DUP ACKの着信ACKNoを変更する)、着信する同一SeqNoのDUP ACKのSACKフィールドによって示されるすべての「欠けているギャップパケット」を再送信しなければならず、この同一SeqNoの複数のDUP ACK中に再送信されるすべてのSeqNoのリストを保持し、後続の同一SeqNoのDUP ACKが今やこの「再送信済みリスト」上記の再送信されたSeqNoパケット(1つ又は複数)の受信を示す場合(この場合に、このモジュールは、SeqNo<新たに到着する同一SeqNoのDUP ACKによって示される受信された最大の再送信されたSeqNoを有する「より以前に再送信された欠けているギャップパケット」(すなわち、既に再送信済みリストにある)をもう一度再送信することだけを行わなければならない)を除いて、後続の同一の一連のSeqNoのDUP ACK中に既に再送信されたものを不必要に再送信はしない。
このモジュールは(MSTCPからすべての高速再送信機能を引き継ぎ、MSTCPが絶対にどのDUP ACKイベントについても全く知ることがなくなるように着信DUP ACKの着信ACKNoを変更する)、着信する同一SeqNoのDUP ACKのSACKフィールドによって示されるすべての「欠けているギャップパケット」を再送信しなければならず、この同一SeqNoの複数のDUP ACK中に再送信されるすべてのSeqNoのリストを保持し、後続の同一SeqNoのDUP ACKが今やこの「再送信済みリスト」上記の再送信されたSeqNoパケット(1つ又は複数)の受信を示す場合(この場合に、このモジュールは、SeqNo<新たに到着する同一SeqNoのDUP ACKによって示される受信された最大の再送信されたSeqNoを有する「より以前に再送信された欠けているギャップパケット」(すなわち、既に再送信済みリストにある)をもう一度再送信することだけを行わなければならない)を除いて、後続の同一の一連のSeqNoのDUP ACK中に既に再送信されたものを不必要に再送信はしない。
もちろん、後続の新しい増分されたSeqNoの第3DUP ACK(SeqNoは、今は異なり、増分されている)の際に、このモジュールは、着信する同一SeqNoのDUP ACKのSACKフィールドによって示されるすべての「欠けているギャップパケット」をもう一度新たに再送信することができる。
明らかに、上で説明されたバージョン/アルゴリズムに対する後続バージョン(1つ又は複数)では、次を行うことが好ましい:
「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを「ポーズ」がカウントダウンした後の現在のLargest.SENT.SeqNo−SENT.UNA.SeqNo(「ポーズ」が最初にアクティブ化された時と全く異なる値である場合がある)に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくLargest.SENT.SeqNo−SENT.UNA.SeqNo値(「ポーズ」がトリガされた時の)をSSThreshにセットすることもしなければならない==>これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である」。
「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを「ポーズ」がカウントダウンした後の現在のLargest.SENT.SeqNo−SENT.UNA.SeqNo(「ポーズ」が最初にアクティブ化された時と全く異なる値である場合がある)に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくLargest.SENT.SeqNo−SENT.UNA.SeqNo値(「ポーズ」がトリガされた時の)をSSThreshにセットすることもしなければならない==>これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である」。
注:この形で、「ポーズ」がカウントダウンした後に、変更されたLinux TCPは、リンクをもう一度即座にもう一度輻輳ドロップするための、「トリガされたポーズ」インターバル中に累積された戻るACK−クロッキングを利用する突然の「バースト」送信を引き起こさない:しかし、「ポーズ」がカウントダウンした後に、後続の戻るACK−クロッキングレートで送信するのみである(すなわち、「ポーズ」インターバル中に累積された戻るACK−クロッキングトークンのいずれをも含まない。
さらにおそらくより好ましくは:「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDにLargest.SENT.SeqNo−SENT.UNA.SeqNoをセットする[注:1ではなくこのCWND値をセットすることは、スライディングウィンドウスロット可用性によって全く制約されずに即座にすべての再送信パケットすなわちSeqNo=<Largest.SENT.SeqNoを有するパケットを前方に転送することを可能にするが、「ポーズ」がカウントダウンした後に、現在のLargest.SENT.SeqNo−SENT.UNA.SeqNoが、それでも、必ず、「ポーズ」カウントダウンの前にCWNDにその代わりに「1」がセットされる場合と同一であることに留意されたい](第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDを「ポーズ」がカウントダウンした後の現在のLargest.SENT.SeqNo−SENT.UNA.SeqNo(「ポーズ」が最初にアクティブ化された時と全く異なる値である場合がある)に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくLargest.SENT.SeqNo−SENT.UNA.SeqNo値(「ポーズ」がトリガされた時の)をSSThreshにセットすることもしなければならない → これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である」。
既存RFCのTCPソースコード変更及び単純化されたテストの概要(洗練1):
この初期の最も単純なステップ1 TCPソースコード変更は、単独で、当初に100%に近い使用可能リンクの帯域幅利用度を確認するために行わなければならない。
この初期の最も単純なステップ1 TCPソースコード変更は、単独で、当初に100%に近い使用可能リンクの帯域幅利用度を確認するために行わなければならない。
特定のセッティングテストベッドは、次の通りでなければならない(例えば未変更のLinux/FreeBSD/Windows TCPサーバと比較して):
変更されたLinux TCPサーバ−>(IPCHAINを使用して実施することができる)シミュレートされた10パケット中1個のドロップ200ms RTT待ち時間(より大きいことが好ましい)−>ルータ−>既存Linux TCPクライアント
ルータとクライアントとの間のリンクは、1mpsとすることができ(より大きいことが好ましい)、ルータは、1mns*例えば0.3*選択されたポーズ値/8=40Kバイト(すなわち、40個の1Kバイトパケット)バッファサイズを有することができる。64Kバイト(より大きいことが好ましい)のセンダ及びレシーバのウィンドウサイズ。
変更されたLinux TCPサーバ−>(IPCHAINを使用して実施することができる)シミュレートされた10パケット中1個のドロップ200ms RTT待ち時間(より大きいことが好ましい)−>ルータ−>既存Linux TCPクライアント
ルータとクライアントとの間のリンクは、1mpsとすることができ(より大きいことが好ましい)、ルータは、1mns*例えば0.3*選択されたポーズ値/8=40Kバイト(すなわち、40個の1Kバイトパケット)バッファサイズを有することができる。64Kバイト(より大きいことが好ましい)のセンダ及びレシーバのウィンドウサイズ。
最初の最も単純な1ステップLinux TCP変更仕様の提案:
(簡単な実世界Linux変更実施態様のための、例えば300msインターバル中にCWND=0をセットすることによって「送信ポーズ」を達成する単純な技法)
1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする300ms「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDをオリジナル値に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない → これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である。
(簡単な実世界Linux変更実施態様のための、例えば300msインターバル中にCWND=0をセットすることによって「送信ポーズ」を達成する単純な技法)
1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする300ms「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDをオリジナル値に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない → これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である。
注:これは、第3DUP ACKが高速再送信機構をトリガする時及びRTOタイムアウトの時のまさに最初の再送信パケットを除いて(これらは、スライディングウィンドウスロット可用性に関わりなく、必ずLinux TCPによって前方に転送される!)、第3DUP ACK及びRTOタイムアウトの時に例えば300msだけ前方に転送するすべての送信/再送信を止める(バッファをクリアするために)。また、この300ms「ポーズ」によって止められ/停止されるすべての後続の複数の高速再送信パケットは、300msがカウントダウンしたならば即座に前方に転送される(CWNDが最大送信/受信ウィンドウサイズに達していない場合に限って、我々はどのCWNDも減分しないので、CWNDは、既に最大送信/受信ウィンドウサイズを超えている可能性が高く、したがって、この300ms「ポーズ」によって止められ/停止される後続の複数の高速再送信パケットは、300msがカウントダウンした時に、戻るACK−クロッキングレートと同一のレートでのみ前方に転送されるのみである可能性が高い(しかし、幸運にもこの300msポーズ期間中に累積されたすべての戻るACKを含む)==>この変更のうちで最も単純なものは、既に、Google/Yahoo/Amazon/Real Player...などに関する「驚異的な」商業的成功となっているであろう。
既存RFCのTCPソースコード変更及び単純化されたテストの概要(洗練2):
「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDをオリジナルの値に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない → これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である」。
「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにCWNDを変更されないままにするために乗法的にCWNDを減らし(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)、CWNDに1をセットする(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値「ポーズ」カウントダウンをセットし、カウントダウンされた後にCWNDをオリジナルの値に復元する場合には、必ず、半分にされた又は「1」のCWND値ではなくオリジナルのCWND値をSSThreshにセットすることもしなければならない → これは、0.3秒「ポーズ」する簡単な実施態様と正確に同等である」。
注:この形で、パケットドロップイベントが、ドロップを引き起こす期待される通常の完全なバッファ枯渇(通常のバッファサイズは300msである)ではなく、物理送信エラー/BERによってトリガされる場合に、変更されたLinux TCPは、前方への転送のいずれをも、全く、不必要に「ポーズ」させず、停止させない:パケットドロップがBERによって引き起こされ、リンクが輻輳していない場合には、「ポーズ」カウントダウンは、今や、永久に連続する300msの永久「ポーズ」をループするのではなく、正しく0msをセットされる。パケットドロップイベントをシミュレートする、より以前のIPCHAIN法は、輻輳又は満杯バッファ枯渇イベントに全く対応しないことに留意されたい。
しかし、下の、より以前の変更仕様は、それでも働くが、テストベッドは、今や、その代わりに下記でなければならない。
例えば1mbsリンクを介するルータ1への5つの複数の大きいFTP及び/又は輻輳的トラフィックジェネレータ(又は例えば1.5秒おきの周期的な短い300ms UDP輻輳バースト生成とすることさえできる)を有する未変更のLinux TCPサーバ
↓ (1mbsリンク)
変更されたLinux TCPサーバ−>(1mbsリンク)ルータ1(1mbsリンク)−>既存Linux TCPクライアント
ルータとクライアントとの間のリンクは、1mpsとすることができ(より大きいことが好ましい)、ルータは、1mns*例えば0.3*選択されたポーズ値/8=40Kバイト(すなわち、40個の1Kバイトパケット)バッファサイズを有することができる。64Kバイト(より大きいことが好ましい)のセンダ及びレシーバのウィンドウサイズ。注:この形で、すべてのパケットドロップ(1つ又は複数)イベントは、必ずフルバッファ枯渇シナリオに厳密に対応し、300msの「ポーズ」は、今や、よく道理にかなう(又は、例えば非常に小さいバッファ容量が展開される、=<300msの場合に、トリガするパケットのRTT−min(RTT)の「ポーズ」インターバル)。
↓ (1mbsリンク)
変更されたLinux TCPサーバ−>(1mbsリンク)ルータ1(1mbsリンク)−>既存Linux TCPクライアント
ルータとクライアントとの間のリンクは、1mpsとすることができ(より大きいことが好ましい)、ルータは、1mns*例えば0.3*選択されたポーズ値/8=40Kバイト(すなわち、40個の1Kバイトパケット)バッファサイズを有することができる。64Kバイト(より大きいことが好ましい)のセンダ及びレシーバのウィンドウサイズ。注:この形で、すべてのパケットドロップ(1つ又は複数)イベントは、必ずフルバッファ枯渇シナリオに厳密に対応し、300msの「ポーズ」は、今や、よく道理にかなう(又は、例えば非常に小さいバッファ容量が展開される、=<300msの場合に、トリガするパケットのRTT−min(RTT)の「ポーズ」インターバル)。
最後に、IPCHAINを用いる、より以前のテストベッドセットアップは、どの「ポーズ」も必要とせずにどのCWNDサイズも減分としないことと連動する==>100%リンク利用度を示すが、アグレッシブ非TCPフレンドリである。
「1.既存Linux TCPが、輻輳ドロップイベント(CWNDを半分にする3つのDUP ACK及びCWNDを1にリセットするRTOタイムアウト)の際にその代わりにどのCWNDも変更されないままにするために乗法的にCWNDを減らす(CWND=CWND/2又はRTOタイムアウトの際にはCWND=1)場合には、必ず、半分にされた又は「1」のCWND値ではなく未変更のCWND値をSSThreshにセットすることもしなければならない==>これ自体は、ドロップレート及びRTT待ち時間に関わりなく、100%に近いリンク利用度を保証する」。
レシーバベースド増分展開可能TCPフレンドリ外部インターネットTCP
変更
レシーバTCPソースコードは、直接に変更することができ(あるいは、同様に、インターセプトモニタを、同一のことを実行する/同一のことにとりかかるように適合させる)、すべての既存RFCのTCPを扱いさえする。
変更
レシーバTCPソースコードは、直接に変更することができ(あるいは、同様に、インターセプトモニタを、同一のことを実行する/同一のことにとりかかるように適合させる)、すべての既存RFCのTCPを扱いさえする。
概要(さまざまな前に説明した技法t及びサブコンポーネント技法をも参照されたい)[注:CWNDサイズが一度達成されたので、どれほど大きくても、それ自体では輻輳ドロップを引き起こさないことは明らかである:輻輳パケット(1つ又は複数)ドロップの主原因であるのは、CWNDサイズの「加速的瞬間的増加」、例えば指数関数的増大又は線形増大である(戻るACK−クロッキングレート...)。
1. レシーバTCPは、3つのDUP ACKを送信する際に、アルゴリズム的に決定された導出された個数/シリーズの複数の同一SEQNoのDUP ACKを即座に完遂し(そのような複数の同一SEQNoのDUP ACKの送信のレートも、センダTCPのCWNDサイズを、したがって送信レートを望み通りに制御するためにアルゴリズム的に制御することができる)、したがって、センダCWNDサイズは、例えば高速再送信3DUP ACKの時に半分にされないように...あるいは、経路輻輳レベル(輻輳していない/ある値の/ある値を超えるバッファ遅延の始まり、輻輳パケットドロップ...など)のレシーバによる検出に従う規定されたCWNDサイズ時限増分で、制御することができる。大きいウィンドウサイズ、パケットドロップを早期に検出するためのパケット到着間、レシーバウィンドウサイズの調整(例えば、センダの有効ウィンドウサイズ送信レートを完全にポーズさせるための「0」、したがって、レシーバウィンドウサイズは、今や、CWNDではなくセンダの有効ウィンドウ送信レートを制御する)...など、さまざまな以前の技法と組み合わせることができる。レシーバは、センダのCWNDサイズトラッキング法を利用して、複数DUP ACK生成レートを判定するのを助けることもでき、センダが正確にどのDUP ACKがセンダTCPで受信されたかについてレシーバに通知するように、生成されたあるACKに1バイトデータを含めることもできる。
又は
1.レシーバTCPは、ある以前に受信されたSeqNoに関するACKの送信を抑制し、したがって、センダTCPは、今や、複数の同一SeqnoのACKの生成のレシーバのレート(望み通りにアルゴリズム的に導出される)で送信するのみになるようにされることができ(すなわち、センダのCWNDサイズ時限増分)、したがって、レシーバは、センダのレートを制御することができる → 効果的に、センダTCPは、今や、ほとんど必ず高速再送信モードである。十分に大きいレシーバ及びセンダのウィンドウサイズがネゴシエートされれば、1つの同一のSeqNoの複数のDUP ACKが、その1つの同一のSeqNoシリーズのDUP ACKに留まりながらギガバイトを最後まで転送させることができ、あるいは、SeqNoは、センダのウィンドウエッジを「シフトする」ために、有効ウィンドウサイズ枯渇の前の任意の時に成功して受信されたより大きい(又は最大の)SeqNoに増分されてもよい(センダのCWNDサイズを常に十分に大きく保つ技法(1つ又は複数)と組み合わせることができる)。
1.レシーバTCPは、ある以前に受信されたSeqNoに関するACKの送信を抑制し、したがって、センダTCPは、今や、複数の同一SeqnoのACKの生成のレシーバのレート(望み通りにアルゴリズム的に導出される)で送信するのみになるようにされることができ(すなわち、センダのCWNDサイズ時限増分)、したがって、レシーバは、センダのレートを制御することができる → 効果的に、センダTCPは、今や、ほとんど必ず高速再送信モードである。十分に大きいレシーバ及びセンダのウィンドウサイズがネゴシエートされれば、1つの同一のSeqNoの複数のDUP ACKが、その1つの同一のSeqNoシリーズのDUP ACKに留まりながらギガバイトを最後まで転送させることができ、あるいは、SeqNoは、センダのウィンドウエッジを「シフトする」ために、有効ウィンドウサイズ枯渇の前の任意の時に成功して受信されたより大きい(又は最大の)SeqNoに増分されてもよい(センダのCWNDサイズを常に十分に大きく保つ技法(1つ又は複数)と組み合わせることができる)。
及び/又は
1.レシーバTCPは、絶対に3つのDUP ACKを生成せず、センダRTOタイムアウトを再送信させるだけである(好ましくは、より長いRTOタイムアウト期間がトリガされる前に止められた肯定応答されていない再送信によって止められないセンダの連続的再送信を保証するために、十分に大きいウィンドウスケールドサイズがネゴシエートされる)が、センダのCWNDは、RTOタイムアウトの際に「0」又は「1」にリセットされ、レシーバは、RTOタイムアウト再送信を検出した後の複数の続けられる同一のDUP ACKを介するセンダのCWNDのすばやい指数関数的増分復元を保証するためにこれを必要とする。
注:
.ルータは、バッファにより小さい大きさ...50msなどを便利にセットすることができ(そのような小さいバッファセッティングの改善された効力に関する公表されたgoogle検索リサーチレポートを参照されたい)、また、RED機構は、例えば、バッファリングされたパケット(1つ又は複数)レジデンシを有する任意のフロー(1つ又は複数)の例えばまさに最初のバッファリングされたパケットを例えば捨てるように適合させることができる → そのようなインターネットサブセット上でリアルタイム送信/TCPトラフィック入力レートを達成するのを助ける。また、TCPは、単純にレートスロットリングして/「ポーズ」して、すべてのバッファリングの始まりを即座にクリアする/すべてのバッファリングの始まりのクリアをイネーブルするために適当にCWNDサイズを減らすことができる。
1.レシーバTCPは、絶対に3つのDUP ACKを生成せず、センダRTOタイムアウトを再送信させるだけである(好ましくは、より長いRTOタイムアウト期間がトリガされる前に止められた肯定応答されていない再送信によって止められないセンダの連続的再送信を保証するために、十分に大きいウィンドウスケールドサイズがネゴシエートされる)が、センダのCWNDは、RTOタイムアウトの際に「0」又は「1」にリセットされ、レシーバは、RTOタイムアウト再送信を検出した後の複数の続けられる同一のDUP ACKを介するセンダのCWNDのすばやい指数関数的増分復元を保証するためにこれを必要とする。
注:
.ルータは、バッファにより小さい大きさ...50msなどを便利にセットすることができ(そのような小さいバッファセッティングの改善された効力に関する公表されたgoogle検索リサーチレポートを参照されたい)、また、RED機構は、例えば、バッファリングされたパケット(1つ又は複数)レジデンシを有する任意のフロー(1つ又は複数)の例えばまさに最初のバッファリングされたパケットを例えば捨てるように適合させることができる → そのようなインターネットサブセット上でリアルタイム送信/TCPトラフィック入力レートを達成するのを助ける。また、TCPは、単純にレートスロットリングして/「ポーズ」して、すべてのバッファリングの始まりを即座にクリアする/すべてのバッファリングの始まりのクリアをイネーブルするために適当にCWNDサイズを減らすことができる。
.上記のレシーバTCPは、好ましくは、SACKフィールドを使用して、複数のDUP ACKのシリーズの「クランプされた」同一のSeqNoを超える受信されたSEqNoのブロックを伝えることができ、さらに、SACKフィールドは、時折の後続の欠けている「ギャップ」パケットを伝えるのに利用することもできる(RFCは、3つのブロックをSACKすることを許容し、SACKされたSEqNoは、既存RFCのTCPによって不必要に再送信はされない)。
.ここでのレシーバTCPは、「SACKフィールドのブロック」技法、一連の同一SeqNoのDUP ACKの「時限」「クランプされた」SeqNoを生成する技法(したがって、有効ウィンドウサイズを制御するためにセンダのスライディングウィンドウSnd.UNA値を制御し、センダのCWNDサイズを制御するために生成される同一SeqNoの複数のDUP ACKの個数も制御する)、レシーバウィンドウサイズをセットする技法、センダのCWNDサイズをトラッキングする技法...などを利用することができ、レシーバが、輻輳/バッファ枯渇パケットドロップの経路の始まり(OTT時間がこれまでに記録されたmin(OTT)を超えるかどうか...で区別可能である、輻輳していない間のBERパケットドロップ(1つ又は複数)から区別可能)のレシーバによる監視に従って、センダのレート/有効ウィンドウサイズ/CWNDサイズを制御し又は「ポーズ」することをイネーブルする。
さまざまな注
.多数のさまざまなおそらくは単純でさえある形で所望の変更を実施する、可能な説明されたサブコンポーネント法の多数の異なる形及びさまざまな異なる組合せがある。例えば、ネットワーク内のすべてのTCPがすべて同様に変更される場合に、ネットワーク/インターネットサブセット(1つ又は複数)全体を通じたPSTN様伝送品質を保証するために、例えば最新RTT(又は適当な場合にOTT)−記録されたmin(RTT)(又は適当な場合にmin(OTT))のインターバルだけ、各すべてのTCPセンダが単に「ポーズする」(又はレシーバベースドTCPがセンダTCPに「ポーズさせる」)ことは、非常に簡単である。上記の「ポーズ」の代わりに、変更されたTCPは、例えば、バッファリングを引き起こすか必要とする可能性があるすべての余分なフライトパケット(リンク(1つ又は複数)の使用可能物理帯域幅容量より多くが、バッファリングの始まりを引き起こさずに対処することができる)を完全にクリアできるようにする(又は単にあるレベルだけバッファリングを減らす)ためにフライトパケットの総数が即座にできる限り速く減らされることを保証するためすなわち、すべての後続のまだ未解決のフライトパケットが今は経路に沿ったバッファリングを必要としない(又は単にあるレベルだけバッファリングを減らす)ことを保証するために、例えば考案される所望のアルゴリズムに応じて、そのCWNDサイズを例えばCWND*(最新のRTT−min(RTT))/最新のRTT又は例えばCWND*(最新のRTT−min(RTT))/min(RTT)...などにそれぞれ、代わりに減らすことができる。
.多数のさまざまなおそらくは単純でさえある形で所望の変更を実施する、可能な説明されたサブコンポーネント法の多数の異なる形及びさまざまな異なる組合せがある。例えば、ネットワーク内のすべてのTCPがすべて同様に変更される場合に、ネットワーク/インターネットサブセット(1つ又は複数)全体を通じたPSTN様伝送品質を保証するために、例えば最新RTT(又は適当な場合にOTT)−記録されたmin(RTT)(又は適当な場合にmin(OTT))のインターバルだけ、各すべてのTCPセンダが単に「ポーズする」(又はレシーバベースドTCPがセンダTCPに「ポーズさせる」)ことは、非常に簡単である。上記の「ポーズ」の代わりに、変更されたTCPは、例えば、バッファリングを引き起こすか必要とする可能性があるすべての余分なフライトパケット(リンク(1つ又は複数)の使用可能物理帯域幅容量より多くが、バッファリングの始まりを引き起こさずに対処することができる)を完全にクリアできるようにする(又は単にあるレベルだけバッファリングを減らす)ためにフライトパケットの総数が即座にできる限り速く減らされることを保証するためすなわち、すべての後続のまだ未解決のフライトパケットが今は経路に沿ったバッファリングを必要としない(又は単にあるレベルだけバッファリングを減らす)ことを保証するために、例えば考案される所望のアルゴリズムに応じて、そのCWNDサイズを例えばCWND*(最新のRTT−min(RTT))/最新のRTT又は例えばCWND*(最新のRTT−min(RTT))/min(RTT)...などにそれぞれ、代わりに減らすことができる。
.ネットワーク内のすべてのレシーバTCPが、すべてそのように上で説明したように変更される場合に、レシーバTCPは、考案される所望のアルゴリズム...例えばRTT(又はOTT)が現在の最新の記録されたmin(RTT)(又は現在の最新の記録されたmin(OTT))未満のままである限りの複数DUP ACKレートすべてのRTT(又はOTT)の乗法増加及び/又は線形増加...などに従って、複数DUP ACKの同一SeqNoシリーズ生成レート/スペーシング/一時的停止...などの全体的な完全な制御を介してセンダTCP送信レートの完全な制御を有することができる。さらに、RTT(又はOTT)が、現在の最新の記録されたmin(RTT)(又は現在の最新の記録されたmin(OTT)より大きくなるすなわち輻輳の始まりが検出されたならば、レシーバベースドの変更されたTCP(又はインターセプトソフトウェア/転送するプロキシ...など)は、アルゴリズム的に考案された期間だけ「ポーズ」することができ、この期間中に、レシーバベースドの変更されたTCPは、着信する新しいSeqNoのパケット(1つ又は複数)と一致するのに必要なものと一致する(すなわち、着信する新しいSeqNoのパケット(1つ又は複数)の1つごとに1つのDUP ACKを生成する)ためを除いて、追加の余分なDUP ACKの生成を「フリーズ」することができ、これは、余分なセンダの総フライトパケットの減少/クリア/経路に沿ったバッファリングの防止を可能にするはずである。
.レシーバベースドTCPは、後に受信されるセンダのACKNo及びSeqNo...などを使用して、RTT/OTT/総フライトパケット...などをレシーバが検出する/計算するのを助けるために、「選択されたマークされた」DUP ACK(1つ又は複数)に含められる例えば1バイトのガーベジデータを含むことができる。
2005年11月21日ファイリング
さまざまな洗練及び注
増分展開可能TCPフレンドリ外部インターネット100%リンク利用度データストレージ転送NextGenTCP:
一番上の最も多いレベルで、CWNDは、今、どれであっても絶対に決して全く減らされない。
さまざまな洗練及び注
増分展開可能TCPフレンドリ外部インターネット100%リンク利用度データストレージ転送NextGenTCP:
一番上の最も多いレベルで、CWNDは、今、どれであっても絶対に決して全く減らされない。
Windowsデスクトップ「フォルダストリング検索」ファシリティを使用して、すべてのサブフォルダ/ファイル内のCWND変数の各すべての出現を突き止めることは簡単である......RTOタイムドアウトの際に完全であるために...その輻輳が誘導した場合であっても、我々はCWNDを全く減らさない/リセットしない.....
既存RFCの仕様を変更する、我々のRTOタイムドアウトアルゴリズム擬似コードは、次のようになるはずである(「実際の輻輳ドロップ」表示について)。
既存RFCの仕様を変更する、我々のRTOタイムドアウトアルゴリズム擬似コードは、次のようになるはずである(「実際の輻輳ドロップ」表示について)。
Timeout: /* 乗法減少 */
.recordedCWND=CWND(しかし、別のRTOタイムアウトが進行中の「ポーズ」中に発生する場合には、recordedCWND=recordedCWND ! /* CWNDサイズが減らされることを誤って引きこしたくはない */)。
.recordedCWND=CWND(しかし、別のRTOタイムアウトが進行中の「ポーズ」中に発生する場合には、recordedCWND=recordedCWND ! /* CWNDサイズが減らされることを誤って引きこしたくはない */)。
.ssthresh=cwnd(しかし、別のRTOタイムアウトが進行中の「ポーズ」中に発生する場合には、SStresh=recordedCWND ! /* SSTreshサイズが減らされることを誤って引きこしたくはない */)。
.「ポーズ」インターバルを計算し、CWND=「1*MSS」をセットし、「ポーズ」がカウントダウンした後にCWND=recordedCWNDに復元する;
既存RFCの仕様を変更する、我々のRTOタイムドアウトアルゴリズム擬似コードは、次のようになるはずである(「非輻輳ドロップ」表示について)。
既存RFCの仕様を変更する、我々のRTOタイムドアウトアルゴリズム擬似コードは、次のようになるはずである(「非輻輳ドロップ」表示について)。
Timeout: /* 乗法減少 */
ssthresh=sstresh;
CWND=CWND;
/* 両方が変更されない ! */
RFCのTCPがこれらの単純な経験則に従って変更したことを保証することだけが必要である:
1.「実際の輻輳」表示の際に「ポーズ」を一時的にもたらす(その後にCWNDをrecordedCWNDに復元する)ためを除いて、絶対に決してどのCWND値も減らさない。実際の輻輳表示(第3DUP ACKの時又はRTO Timeout−min(RTT)>例えば200msの時の最新RTT)の際に、SSTreshには、後続CWND増分が加法的線形になるように、先在するCWNDがセットされる必要があることに留意されたい。
ssthresh=sstresh;
CWND=CWND;
/* 両方が変更されない ! */
RFCのTCPがこれらの単純な経験則に従って変更したことを保証することだけが必要である:
1.「実際の輻輳」表示の際に「ポーズ」を一時的にもたらす(その後にCWNDをrecordedCWNDに復元する)ためを除いて、絶対に決してどのCWND値も減らさない。実際の輻輳表示(第3DUP ACKの時又はRTO Timeout−min(RTT)>例えば200msの時の最新RTT)の際に、SSTreshには、後続CWND増分が加法的線形になるように、先在するCWNDがセットされる必要があることに留意されたい。
2.非輻輳表示(第3DUP ACKの時又はRTO Timeout−min(RTT)<例えば200msの時の最新RTT)の場合に、高速再送信モジュールとRTOタイムドアウトモジュールとの両方について、「ポーズ」せず、既存RFCがCWND値又はSStresh値を変更することを全く許可しない。
進行中の現在のポーズ(「実際の輻輳」表示によってトリガされたものであることだけができる)は、存在する場合に、カウンテッドダウンに進行することを許可されなければならない(高速再送信モジュールとRTOタイムアウトモジュールとの両方について)。
3.既に、進行中の現在の「ポーズ」がある場合には、後続の介在する「実際の輻輳」表示は、今や、現在の「ポーズ」を完全に終了し、新しい「ポーズ」を開始する(単に新しい「ポーズ」カウントダウン値をセットする/上書きするという問題):高速再送信モジュールとRTOタイムアウトモジュールとの両方について、recordedCWNDは今や=recordedCWND(=CWNDではなく)及び今やSStresh=recordedCWND(CWNDではなく)であることを管理する。
非常に単純な基本的な働く第1バージョン完全仕様:ごく少数行の非常に単純なFREEBSD/LINUX TCPソースコード変更
[当初に、非常に大きい初期化されたmin(RTT)値=例えば30000msをセットすることを必要とし、その後、継続的にmin(RTT)=min(最新の到着するACKのRTT,min(RTT))をセットする]。
1.1 IF 第3DUP ACK THEN
IF 3DUP ACK高速再送信の時の最新の戻るACKのRTT−現在の記録されたmin(RTT)=<例えば200ms(すなわち、我々は、今、このパケットドロップがおそらくは「輻輳イベント」によって引き起こされ得ず、したがって不必要にSStreshにCWND値をセットしてはならないことを知る) THEN CWND/SSTresh値を変更しない(すなわち、既存の高速再送信RFCで現在行われているようにCWND=CWND/2又はSSthrshにCWND/2をセットすることすらしない)。
[当初に、非常に大きい初期化されたmin(RTT)値=例えば30000msをセットすることを必要とし、その後、継続的にmin(RTT)=min(最新の到着するACKのRTT,min(RTT))をセットする]。
1.1 IF 第3DUP ACK THEN
IF 3DUP ACK高速再送信の時の最新の戻るACKのRTT−現在の記録されたmin(RTT)=<例えば200ms(すなわち、我々は、今、このパケットドロップがおそらくは「輻輳イベント」によって引き起こされ得ず、したがって不必要にSStreshにCWND値をセットしてはならないことを知る) THEN CWND/SSTresh値を変更しない(すなわち、既存の高速再送信RFCで現在行われているようにCWND=CWND/2又はSSthrshにCWND/2をセットすることすらしない)。
ELSE SSThreshを、この記録された既存のCWNDサイズと同一になるようにセットしなければならず(既存の高速再送信RFCのCWND/2ではなく) AND 代わりに、既存CWNDサイズのレコードを保持し、CWND=「1*MSS」をセットし、「ポーズ」カウントダウングローバル変数=(第3DUP ACK高速再送信をトリガする又はRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値をセットする。
注:CWND値=1*MSSをセットすることは、TCPが送信を再開する前に、経路に沿ったバッファリングされたパケットをクリアすることを可能にするために、まさに最初の高速再送信パケット再送信パケット(1つ又は複数)を除く、パケットのすべての前方への転送の所望の一時的ポーズ/停止を引き起こす]。
ENDIF
ENDIF
1.2 「ポーズ」時間変数がカウントダウンした後に、CWNDを、記録された前のCWND値に復元する(すなわち、センダは、今や、「ポーズ」が終わった後の通常の送信を再開することができる)。
ENDIF
1.2 「ポーズ」時間変数がカウントダウンした後に、CWNDを、記録された前のCWND値に復元する(すなわち、センダは、今や、「ポーズ」が終わった後の通常の送信を再開することができる)。
2.1 IF RTOタイムアウト THEN
IF RTOタイムドアウトの時の最新の戻るACKのRTT−現在の記録されたmin(RTT)=<例えば200ms(すなわち、我々は、今、このパケットドロップがおそらくは「輻輳イベント」によって引き起こされ得ず、したがって不必要にCWND値を1*MSSにリセットしてはならないことを知る) THEN CWND値を1*MSSにリセットせず、CWND値を全く変更しない(すなわち、現在、既存RTOタイムアウトRFCで行われているようにCWNDをリセットすることさえ全く行わない)。
IF RTOタイムドアウトの時の最新の戻るACKのRTT−現在の記録されたmin(RTT)=<例えば200ms(すなわち、我々は、今、このパケットドロップがおそらくは「輻輳イベント」によって引き起こされ得ず、したがって不必要にCWND値を1*MSSにリセットしてはならないことを知る) THEN CWND値を1*MSSにリセットせず、CWND値を全く変更しない(すなわち、現在、既存RTOタイムアウトRFCで行われているようにCWNDをリセットすることさえ全く行わない)。
ELSE その代わりに、既存CWNDサイズのレコードを保持し、CWND=「1*MSS」をセットし、「ポーズ」カウントダウングローバル変数=(RTOタイムドアウトの時のパケットの最新のRTT−min(RTT),300ms)の最小値をセットしなければならない。
注:CWND値=1*MSSをセットすることは、TCPが送信を再開する前に、経路に沿ったバッファリングされたパケットをクリアすることを可能にするために、RTOタイムドアウト再送信パケット(1つ又は複数)を除く、パケットのすべての前方への転送の所望の一時的ポーズ/停止を引き起こす]。
2.2 「ポーズ」時間変数がカウントダウンした後に、CWNDを、記録された前のCWND値に復元する(すなわち、センダは、今や、「ポーズ」が終わった後の通常の送信を再開することができる)。
以上、これで終了である!。
背景材料
.第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTTは、最後の測定されたラウンドトリップ時間RTTに関する既存のLinux TCBで維持される変数からたやすく入手可能である。最小の記録されたmin(RTT)は、既存のWestwoord/FastTCP/Vegas TCBで維持される変数からたやすく入手可能であるのみであるが、min(RTT)=[min(RTT),最後の測定されたラウンドトリップ時間RTTの]の最小値を継続的に更新する2〜3行のコードを記述することは、十分に簡単であるに違いない 参考文献:http://www.cs.umd.edu/〜shankar/417−Notes/5−note−transportCongControl.htm:Linux TCBによって維持されるRTT変数<http://www.scit.wlv.ac.uk/rfc/rfc29xx/RFC2988.html>:RTO計算Google Search用語「tcp rtt variables」 <http://www.psc.edu/networking/perf_tune.html>:Linux TCP RTTパラメータのチューニング Google Search:「linux TCP minimum recorded RTT」又は「linux tcp minimum recorded rtt variable」注:TCP Westwoodは最小RTTを測定する。
注:
1.上記の「輻輳通知トリガイベント」は、代替案では、最新のRTT−min(RTT)>=指定されたインターバル、例えば5ms/50/300ms ms...などの時と定義することができる(パケットドロップ表示イベントではなく、純非輻輳RTT又はその推定min(RTT)上及びこれを超える経路に沿って経験されたバッファリングによって導入される遅延に対応する。
.第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTTは、最後の測定されたラウンドトリップ時間RTTに関する既存のLinux TCBで維持される変数からたやすく入手可能である。最小の記録されたmin(RTT)は、既存のWestwoord/FastTCP/Vegas TCBで維持される変数からたやすく入手可能であるのみであるが、min(RTT)=[min(RTT),最後の測定されたラウンドトリップ時間RTTの]の最小値を継続的に更新する2〜3行のコードを記述することは、十分に簡単であるに違いない 参考文献:http://www.cs.umd.edu/〜shankar/417−Notes/5−note−transportCongControl.htm:Linux TCBによって維持されるRTT変数<http://www.scit.wlv.ac.uk/rfc/rfc29xx/RFC2988.html>:RTO計算Google Search用語「tcp rtt variables」 <http://www.psc.edu/networking/perf_tune.html>:Linux TCP RTTパラメータのチューニング Google Search:「linux TCP minimum recorded RTT」又は「linux tcp minimum recorded rtt variable」注:TCP Westwoodは最小RTTを測定する。
注:
1.上記の「輻輳通知トリガイベント」は、代替案では、最新のRTT−min(RTT)>=指定されたインターバル、例えば5ms/50/300ms ms...などの時と定義することができる(パケットドロップ表示イベントではなく、純非輻輳RTT又はその推定min(RTT)上及びこれを超える経路に沿って経験されたバッファリングによって導入される遅延に対応する。
2.実際の輻輳ドロップ(1つ又は複数)表示によってトリガされた「ポーズ」がカウントダウンし終えたならば、上記のアルゴリズム/方式を適合させ、その結果、CWNDに、今、この瞬間的な「ポーズ」カウンテッドダウンタイムでの総未解決フライトパケット数と等しい(すなわち、最新の最大の転送されたSeqNo−最新の最大の戻るACKNoと等しい)値がセットされるようにする → これは、パケットの突然の大きいバーストがソースTCPによって生成されるのを防ぐはずである。というのは、「ポーズ」期間中に、スライディングウィンドウのエッジを非常に実質的に進めた可能性がある受信された多数の戻るACKがある可能性があるからである。
また、多数の可能なものの中の代替の例として、CWNDには、当初に、「ポーズ」カウントダウンをトリガする第3DUP ACK高速再送信要求の際に、未変更のCWND(「1*MSS」ではなく)又はまさにこの瞬間の総未解決フライトパケット数と等しい値のいずれかをセットすることができ、さらに、「ポーズ」がカウントダウンし終えた時にこの瞬間的総未解決フライトパケット数[任意選択で、この瞬間的「ポーズ」カウンテッドダウンタイムで「ポーズ」がカウントダウンする前に受信された総数追加同一SeqNo複数DUP ACK(高速再送信をトリガする最初の3つのDUP ACKを超える)を引く(すなわち、まさにこの瞬間の最新の最大の転送されたSeqNo−最新の最大の戻るACKNoと等しい)]と等しい値に復元することができる → 変更されたTCPは、今、「ポーズ」インターバル中に受信された各追加の複数の同一SeqNoのDUP ACKに対応する新しいパケットをネットワークにストロークアウトすることができ、CWNDが、今、「ポーズ」がカウントダウンし終えた時に、今の瞬間的総未解決フライトパケット数引く「ポーズ」中に受信された総数追加同一SeqNo複数DUP ACKと等しい値に復元された場合に、経路に沿った介在するバッファリングをクリアするために、「ポーズ」がカウントダウンした後に、任意選択として遅れ馳せに送信レートを「スローダウン」することができる。
もう1つの可能な例は、CWNDに、当初に、「ポーズ」カウントダウンをトリガする第3DUP ACK高速再送信要求の際に「1*MSS」をセットし、その後、「ポーズ」がカウントダウンし終えた時に、この瞬間的総未解決フライトパケット数引く総数追加同一SeqNo複数DUP ACKと等しい値に復元することである→この形で、「ポーズ」がカウントダウンした時に、変更されたTCPは、新しいパケットを「バースト」アウトするのではなく、後続の新しい戻るACKレートに対応する新しいパケットのネットワークへのストロークアウトを開始するだけである。
3.上記のアルゴリズム/方式の、上記の「ポーズ」カウントダウングローバル変数=(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms)の最小値は、その代わりに=(第3DUP ACK高速再送信をトリガするかRTOタイムアウトをトリガするパケットの最新のRTT−min(RTT),300ms,max(RTT))の最小値をセットすることができ、ここで、max(RTT)は、これまでに観察された最大のRTTである。このmax(RTT)の包含は、ノードのバッファ容量が極端に小さい(例えば、LAN内又はWAN内でさえ)非常に希なありそうにない状況であっても、「ポーズ」期間が、例えば指定された300ms値など、不必要に大きくなりすぎるようにセットされないことを保証するためである。また、上記の例の300msではなく、この値を、その代わりに、異なる経路ごとに動的にアルゴリズム的に導出することができる。
4.準備のできたギャランティードサービス対応ネットワーク(又は単に輻輳ドロップのないネットワーク及び/又は単にはるかにより少ないバッファリング遅延を有するネットワーク)の簡単な広く行き渡った実施を可能にする単純な方法は、ネットワーク内の1ノードのすべての(又はほとんどすべての)ルータ及びスイッチを変更して/ソフトウェアアップグレードして、トラバースするTCPフローのソースへの3つのDUP ACKの全体を即座に生成して、そのソースに、トラバースするTCPフローのパケットをノードがバッファリングし始める(すなわち、転送するリンクは、今、100%利用されており、総計としてのトラバースするTCPフローのソースのパケットが、バッファリングされ始める)時にその送信レートを減らすように示すことであるはずである。3DUP ACK生成は、その代わりに、例えば転送するリンクが指定された利用度レベル、例えば95%/98%...など又は指定されたある他のトリガ条件に達する時に、トリガすることができる。3つの擬似DUP ACKに対応するパケットが、デスティネーションで実際に正しく受信されるかどうかすら問題ではない。というのは、デスティネーションからソースへの後続ACKが、これを矯正するからである。
生成された3つのDUP ACKパケットのフィールドは、最小の必要なソースアドレス、デスティネーションアドレス、及びSeqNoを含む(これは、今現在バッファリングされているパケット(1つ又は複数)を検査し、3つの擬似DUP ACKのACKフィールドが検査されたバッファリングされたパケットのACKNoから入手される/又は導出されることを世話することによってたやすく得ることができる)。ところが、擬似の3つのDUP ACKのACKZNoフィールドは、特定の一方向ソース/デスティネーションTCPフロー(1つ又は複数)のデスティネーションTCPによって生成された最新の最大のACKNoの、例えばスイッチ/ルータの維持されるテーブルから入手する/又は導出することができ、あるいはその代わりに、スイッチ/ルータは、まず、デスティネーションからソースへのパケットがそのノードに到着するのを待って、次に、戻るパケットのACKフィールドを検査することから3つの擬似DUP ACKのACKNoフィールドを入手する/又は導出することができる。
上記の方式に似て、既存のRED及びECN...などは、同様に、上で概要を示したように変更されたアルゴリズムを有し、リアルタイムギャランティードサービス対応ネットワーク(又は輻輳ドロップなし及び/又ははるかにより少ないバッファ遅延のネットワーク)を使用可能にすることができる。
5.windowsでのもう1つの変形実施態様:
まず、モジュールが、MSTCPからすべての高速再送信/RTOタイムアウトを引き継ぐすなわち、MSTCPが絶対に決してDUP ACKもRTOタイムアウトも一切見ないことを必要とする:モジュールは、単純に、MSTCPからの肯定応答されたすべてのインターセプトされた新しいパケットをスプーフィングする(後にのみ:且つ、必要な場合に、MSTCPに「0」ウィンドウサイズ更新を送信するか、着信ネットワークパケットのウィンドウサイズフィールドを「0」に変更して、MSTCPパケット生成をポーズさせる/スローダウンさせる:輻輳通知、例えば3DUP ACK又はRTOタイムアウトの際に)。モジュールは、すべての転送されるパケットのSeqNo/パケットコピー/systimeのリスト(SeqNoで明確に順序付けられる)を構築し、このリストから高速再送信/RTO再送信を行う。SeqNo<現在の最大の受信されたACKを有するこのリスト上のすべてのアイテムが、除去され、SACKされたすべてのSeqNoも除去される。
まず、モジュールが、MSTCPからすべての高速再送信/RTOタイムアウトを引き継ぐすなわち、MSTCPが絶対に決してDUP ACKもRTOタイムアウトも一切見ないことを必要とする:モジュールは、単純に、MSTCPからの肯定応答されたすべてのインターセプトされた新しいパケットをスプーフィングする(後にのみ:且つ、必要な場合に、MSTCPに「0」ウィンドウサイズ更新を送信するか、着信ネットワークパケットのウィンドウサイズフィールドを「0」に変更して、MSTCPパケット生成をポーズさせる/スローダウンさせる:輻輳通知、例えば3DUP ACK又はRTOタイムアウトの際に)。モジュールは、すべての転送されるパケットのSeqNo/パケットコピー/systimeのリスト(SeqNoで明確に順序付けられる)を構築し、このリストから高速再送信/RTO再送信を行う。SeqNo<現在の最大の受信されたACKを有するこのリスト上のすべてのアイテムが、除去され、SACKされたすべてのSeqNoも除去される。
このモジュールに「SeqNoラップアラウンド」保護及び「タイムラップアラウンド」保護を組み込む必要があることもお忘れなく。
すべてのインターセプトされたMSTCP発信パケットの肯定応答をスプーフィングすることによって、我々のwindowsソフトウェアは、今、MSTCPへの着信ネットワークパケットのどれをも全く変更することを必要としない...MSTCPは、単純にすべての受信された3つのDUP ACKが既にスライディングウィンドウの外にある(既に肯定応答されている!)のでこれらを無視し、タイムアウトしたパケットを送信せず(既に肯定応答されている!)、さらに、我々は、今や、レシーバウィンドウサイズフィールド変更...などを介してMSTCPパケット生成レートをいつでも簡単に制御することができる。ソフトウェアは、任意の時に、フライトパケットの最大値がエミュレートされた/追跡されたMSTCPのCWNDサイズと等しくなることを可能にすることによって、MSTCP自体のWindows増分/輻輳制御/AIMD機構をエミュレートすることができる:概要の輪郭の例(多数の可能なものの中の)として、これは、例えば、各戻るACKについて、エミュレートされた/追跡された擬似ミラーCWNDサイズが、3DUP ACK高速再送信がまだない時に各RTT内で2倍にされるが、3DUP ACK高速再送信が発生したならば、エミュレートされた/追跡された擬似ミラーCWNDサイズが、今やRTTごとに1*MSSだけ増分されるのみであると仮定することによって達成することができる。ソフトウェアは、瞬間総未解決フライトパケット数の最大値が、エミュレートされた/追跡された擬似CWNDサイズを超えないことを可能にし、擬似CWNDサイズを超える時にMSTCP送信を「ポーズ」させるために「0」のレシーバウィンドウサイズ更新/着信パケットのレシーバウィンドウサイズを「0」に変更することを介してMSTCPパケット生成をスロットリングするだけであるはずである。
このWindowソフトウェアは、その後、最新の最大の前方に転送されたMSTCPパケットのSeqNo及び最新の最大のネットワークの着信パケットのACKNo(その差は、MSTCPのCWND値に全く非常によく対応する未解決の総フライトパケット数を与える)を追跡することによって、常にMSTCP CWNDサイズを記憶するか推定することができる。ここでのWindowソフトウェアは、フライトパケットの総数>=上で述べたCWND推定値(又は、代替的に、上記のCWND推定値及びRWND及び/又はSWNDから導出される有効ウィンドウサイズ)になったならば、MSTCPへの「ACKの自動スプーフィング」を確実に停止するようにすることだけが必要である。
Claims (14)
- TCP及び/又はTCP様プロトコル及び/又は他のプロトコルを改善する方法であって、輻輳パケットドロップなどの輻輳イベントが検出される時及び/又は戻るACKのラウンドトリップ時間RTT/一方向トリップ時間OTTが例えばフロー経路の非輻輳RTT/OTT又はその最新の使用可能な最良の推定値min(RTT)/min(OTT)の既知の値などのある閾値に近くなるかこれを超える時に、センダのデータ送信の完全な又は部分的な「ポーズ」/「一時停止」を介してネットワーク輻輳を回避し且つ/又は防止し且つ/又はそれから回復する方法。
- TCP及び/又はTCP様プロトコル及び/又は他のプロトコルを改善する方法であって、(a)から(c)、すなわち:
(a)TCPのスライディングウィンドウ機構の「有効ウィンドウ」及び/又は輻輳ウィンドウCWNDが、輻輳を回避し且つ/又は防止し且つ/又はそれから回復するためにサイズが減らされる必要がないことの新しい実現/技法をよく利用し、
(b)輻輳パケットドロップなどの輻輳イベントが検出される時及び/又は戻るACKのラウンドトリップ時間RTT/一方向トリップ時間OTTが、例えばフロー経路の非輻輳RTT/OTT又はその最新の使用可能な最良の推定値min(RTT)/min(OTT)の既知の値などのある閾値に近くなるかこれを超える時に、センダのデータ送信の完全な又は部分的な「ポーズ」/「一時停止」を介して、その代わりに輻輳が回避され且つ/又は防止され且つ/又はそれから回復され、
(c)上記の(b)ではなく、又はその代わりに、又はそれと組み合わせて、TCPのスライディングウィンドウ機構の「有効ウィンドウ」及び/又は輻輳ウィンドウCWND値が、輻輳が検出される時の最新の返されたラウンドトリップ時間RTT/一方向トリップ時間OTT値、及び/又は特定のフロー経路の既知の非輻輳ラウンドトリップ時間RTT/一方向トリップ時間OTT値若しくはその最新の使用可能な最良の推定値min(RTT)/min(OTT)、及び/又は特定のフロー経路の最新の観察された最長のラウンドトリップ時間max(RTT)/一方向トリップ時間max(OTT)に少なくとも部分的に依存してアルゴリズム的に導出される値まで減らされる
の任意の組合せ/サブセットを含む方法。 - 事実上輻輳のないギャランティードサービス対応データ通信ネットワーク/インターネット/インターネットサブセット/プロプラエタリインターネットセグメント/WAN/LAN(以下ではネットワークと称する)の方法であって、特徴(a)から(f)、すなわち:
(a)ネットワーク内のソースから送信されネットワーク内のデスティネーションに到着するすべてのパケット/データユニットが、ネットワーク輻輳に起因して単一のパケットが捨てられることなしにすべてが到着する点と、
(b)ギャランティードサービス機能性を必要とするすべてのパケット/データユニットにのみ適用される点と、
(c)前記パケット/データユニットのトラフィックが、前方に転送される前にインターセプトされ、処理される点と、
(d)前記送信する1つ又は複数のソースのトラフィックが、インターセプトされ処理され、前方に転送され、且つ/又は前記パケット/データユニットのトラフィックが、起点の送信する1つ又は複数のソースでインターセプトされ処理され、前方に送信されるのみである点と、
(e)送信するソース及び/又は受信するデスティネーションでの既存のTCP/IPスタックが、既存のQoS/MPLS技法の使用を必要とせず、前記ネットワーク内のスイッチ/ルータソフトウェアのいずれかがエンドツーエンド性能結果を達成するために変更され又は寄与することを必要とせず、前記ネットワーク内の各すべてのノード間リンクでの制限されない帯域幅の提供を必要とせずに、前記ネットワーク内の任意のソース/デスティネーションノード対の間で同一のエンドツーエンド性能結果を達成するために変更される点と、
(f)前記ネットワーク内のトラフィックがほとんどTCPトラフィックからなり、UDP/ICMP...などの他のトラフィックタイプが、いつでも前記ネットワーク内の1つ又は複数のノード間リンクのいずれかの使用可能帯域幅全体を超えず、他のトラフィックタイプを生成するアプリケーションが、いつでも前記ネットワーク内の1つ又は複数のノード間リンクのいずれかの使用可能帯域幅全体を超えない場合に、UDP/ICMP..などの他のトラフィックタイプが、任意の時に前記ネットワーク内の1つ又は複数のノード間リンクのいずれかの使用可能帯域幅全体を超えるならば、前記ネットワーク内のそのように影響される1つ又は複数のノード間リンクをトラバースするソース/デスティネーションノード対トラフィックだけが、必ずしも、この時間中に事実上輻輳のないギャランティードサービス対応ではなくなり、且つ/又は前記ネットワーク内のソースから送信され前記ネットワーク内のデスティネーションに到着するすべてのパケット/データユニットが、必ずしも、すべてが到着しない、すなわち、1つ又は複数のパケットが、ネットワーク輻輳に起因して捨てられる点と
の任意の組合せ/サブセットを伴う方法。 - 前記方法において、前記プロトコルの改善/変更が、センダTCPでもたらされる請求項1から3のいずれか1項に記載の方法。
- 前記方法において、前記プロトコルの改善/変更が、レシーバ側TCPでもたらされる請求項1から3のいずれか1項に記載の方法。
- 前記方法において、前記プロトコルの改善/変更が、前記ネットワークのスイッチ/ルータノードでもたらされる請求項1から3のいずれか1項に記載の方法。
- 前記プロトコルの改善/変更が請求項4から6のいずれか1項で指定される位置の任意の組合せでもたらされる方法。
- 前記プロトコルの改善/変更が請求項4から6のいずれか1項で指定される位置の任意の組合せでもたらされる方法であって、前記方法において、既存の「ランダム早期検出」RED及び/又は「明示的輻輳通知」ECNが請求項1から7のいずれか1項で開示される効果を与えるために変更/適合される方法。
- 前記ネットワーク内の前記スイッチ/ルータが請求項1から8のいずれか1項で開示される効果を与えるために、例えばバッファサイズ調整など、その構成又はセットアップ又は動作において調整される請求項1から8のいずれか1項に記載の方法。
- 前記方法において、
.既存プロトコルRFCは、センダのCWND値が、検出された輻輳の際にセンダのデータ送信の「ポーズ」/「停止」を一時的にもたらす(例えば、「ポーズ」/「停止」中に一時的にセンダのCWND=1*MSSをセットし、「ポーズ」/「停止」が完了した後に、センダのCWND値を例えば「ポーズ」/停止の前の既存のCWND値又はあるアルゴリズム的に導出された値に回複することによって)ためを除いて、今はどれもが絶対に減らされず/減分されないように変更され、前記「ポーズ」/「停止」のインターバルは、例えば任意の300msをセットされるか、Minimum(第3DUP ACK高速再送信をトリガする戻るACKパケットの最新のRTT若しくはRTOタイムアウトした時の戻るACKパケットの最新のRTT,300ms)など、アルゴリズム的に導出されるか、Minimum(第3DUP ACK高速再送信をトリガする戻るACKパケットの最新のRTT若しくはRTOタイムアウトした時の戻るACKパケットの最新のRTT,300ms,max(RTT))など、アルゴリズム的に導出されることができ、
且つ/又は
.既存のプロトコルRFCは、SSThreshが、その代わりに今は、「ポーズ」/「停止」をトリガする輻輳検出の前の既存CWND値をセットされるように変更され、すなわち、後続CWND増分は、CWND値を超えて線形加法的であるのみである
請求項1から9のいずれか1項に記載の方法。 - 前記方法において、前記輻輳検出が、非輻輳ドロップ、例えば物理送信エラー、すなわちBERに起因する、すなわち、輻輳パケットドロップに起因しない場合に、「ポーズ」/「停止」カウントダウンインターバルは、その代わりに「0」をセットされ、すなわち、データ送信の実際の「ポーズ」/「停止」は開始されず、また、進行中のすべての先在する現在の「ポーズ」/「停止」は、カウンテッドダウンに通常に進行することを許可されることに留意されたく、輻輳検出は、例えば第3DUP ACKが高速再送信をトリガする時の最新の返されたACKのRTT又はRTOタイムアウトした時の最新の返されたACKのRTT−min(RTT)<例えば200msである場合に、輻輳以外の理由に帰することができる請求項10に記載の方法。
- 前記方法において、進行中の現在の「ポーズ」/「停止」が既にある場合に、後続の「実際の」輻輳イベント表示は、今や、前記現在の「ポーズ」/「停止」のインターバルを拡張し、単に、前記現在の「ポーズ」/「停止」のカウントダウンに、例えばMinimum(第3DUP ACK高速再送信をトリガする戻るACKパケットの最新のRTT若しくはRTOタイムアウトした時の戻るACKパケットの最新のRTT,300ms,max(RTT))などの新しい値をセットし/これに上書きする請求項10から11に記載の方法。
- 前記方法において、
ノードが前記トラバースするTCPフローのパケットのバッファリングを開始する(すなわち、転送するリンクが、今や、100%利用され、総計としてのトラバースするTCPフローの「ソースの」パケットが、バッファリングされ始める)時に送信レートを減らすように前記ソースに示すために前記トラバースするフローのソースへの3つのDUP ACKの全体を即座に生成するために変更され/ソフトウェアアップグレードされなければならない前記ネットワーク内のノードのルータ及びスイッチのいずれか1つ又はすべて又はほとんどすべて:前記3つのDUP ACKの生成は、代替案では、その代わりに、例えば前記転送するリンクが、指定された利用度レベル、例えば95%/98%...など又は指定されたある他のトリガ条件に達する時にトリガすることができる
請求項1から12のいずれか1項に記載の方法。 - 前記方法において、
既存のRED及びECNは請求項1から13のいずれか1項に含まれる原理及び方式で概要を示されたようにそのアルゴリズムを同様に変更され、リアルタイムギャランティードサービス対応ネットワーク(又は、輻輳ドロップのない、及び/若しくははるかにより少ないバッファ遅延のネットワーク)を可能にする
請求項1,2,7,及び9から13のいずれか1項に記載の方法。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0426176A GB0426176D0 (en) | 2004-11-29 | 2004-11-29 | Immediate ready implementation of virtually congestion free guaranteed service capable network |
GB0501954A GB0501954D0 (en) | 2005-01-31 | 2005-01-31 | Immediate ready implementation of virtually congestion free guaranteed service capable network: inter-packets-intervals |
GB0504782A GB0504782D0 (en) | 2005-03-08 | 2005-03-08 | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet NextGenTCP |
GB0509444A GB0509444D0 (en) | 2005-03-08 | 2005-05-09 | Immediate ready implementation of virtually congestion free guaranteed service capable network:external internet nextgentcp (square wave form) |
GB0512221A GB0512221D0 (en) | 2005-03-08 | 2005-06-15 | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet nextgen TCP (square wave form) TCP friendly |
GB0520706A GB0520706D0 (en) | 2005-03-08 | 2005-10-12 | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet nextgenTCP (square wave form) TCP friendly |
PCT/IB2005/003580 WO2006056880A2 (en) | 2004-11-29 | 2005-11-29 | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet nextgentcp (square wave form) tcp friendly san |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008536339A true JP2008536339A (ja) | 2008-09-04 |
Family
ID=39787888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007542358A Withdrawn JP2008536339A (ja) | 2004-11-29 | 2005-11-29 | 事実上輻輳のないギャランティードサービス対応ネットワーク:外部インターネットNextGenTCP(方形波形)TCPフレンドリSANの即座の準備のできた実施 |
Country Status (5)
Country | Link |
---|---|
JP (1) | JP2008536339A (ja) |
BR (1) | BRPI0518691A2 (ja) |
EA (1) | EA200701168A1 (ja) |
IL (1) | IL183431A0 (ja) |
MX (1) | MX2007006395A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10075382B2 (en) | 2014-12-19 | 2018-09-11 | Fujitsu Limited | Communication device, relay device, and communication method for a plurality of packets |
-
2005
- 2005-11-29 MX MX2007006395A patent/MX2007006395A/es not_active Application Discontinuation
- 2005-11-29 BR BRPI0518691-9A patent/BRPI0518691A2/pt not_active IP Right Cessation
- 2005-11-29 JP JP2007542358A patent/JP2008536339A/ja not_active Withdrawn
- 2005-11-29 EA EA200701168A patent/EA200701168A1/ru unknown
-
2007
- 2007-05-27 IL IL183431A patent/IL183431A0/en unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10075382B2 (en) | 2014-12-19 | 2018-09-11 | Fujitsu Limited | Communication device, relay device, and communication method for a plurality of packets |
Also Published As
Publication number | Publication date |
---|---|
IL183431A0 (en) | 2007-09-20 |
MX2007006395A (es) | 2007-10-17 |
BRPI0518691A2 (pt) | 2008-12-02 |
EA200701168A1 (ru) | 2007-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20080037420A1 (en) | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet nextgentcp (square waveform) TCP friendly san | |
Ludwig et al. | The Eifel algorithm: making TCP robust against spurious retransmissions | |
US20100020689A1 (en) | Immediate ready implementation of virtually congestion free guaranteed service capable network : nextgentcp/ftp/udp intermediate buffer cyclical sack re-use | |
Allman et al. | Ongoing TCP research related to satellites | |
US8462624B2 (en) | Congestion management over lossy network connections | |
KR20070093077A (ko) | 거의 혼잡이 없는 보장된 서비스를 할 수 있는 네트워크의즉각적인 용이한 구현:외부 인터넷 차세대 tcp(정방형파형) tcp 유사 san | |
JP4283589B2 (ja) | 通信装置、通信制御方法及びプログラム | |
US20090316579A1 (en) | Immediate Ready Implementation of Virtually Congestion Free Guaranteed Service Capable Network: External Internet Nextgentcp Nextgenftp Nextgenudps | |
Natarajan et al. | Non-renegable selective acknowledgments (NR-SACKs) for SCTP | |
AU2020326739A1 (en) | Systems and methods for managing data packet communications | |
Wang et al. | Use of TCP decoupling in improving TCP performance over wireless networks | |
Henderson | TCP performance over satellite channels | |
Zhang et al. | Optimizing TCP start-up performance | |
Mishra et al. | Comparative Analysis of Transport Layer Congestion Control Algorithms | |
JP2008536339A (ja) | 事実上輻輳のないギャランティードサービス対応ネットワーク:外部インターネットNextGenTCP(方形波形)TCPフレンドリSANの即座の準備のできた実施 | |
KR101231793B1 (ko) | Tcp 세션 최적화 방법 및 네트워크 노드 | |
Kadhum et al. | Fast Congestion Notification mechanism for ECN-capable routers | |
Raisinghani et al. | Mild Aggression: A new approach for improving TCP performance in asymmetric networks | |
Venkataraman et al. | A priority-layered approach to transport for high bandwidth-delay product networks | |
Hurtig et al. | Improved loss detection for signaling traffic in SCTP | |
Buntinas | Congestion control schemes for tcp/ip networks | |
KR101396785B1 (ko) | 네트워크 장치에서 tcp 기능을 수행하는 방법 | |
Hung et al. | Simple slow-start and a fair congestion avoidance for TCP communications | |
Premalatha et al. | Mitigating congestion in wireless networks by using TCP variants | |
Asplund et al. | Partially Reliable Multimedia Transport |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20091027 |