6.1.2 The TCP Sender (TCP 送信者)
6.1.2 The TCP Sender (TCP 送信者)
ECN を使用する TCP 接続の場合、新しいパケットは IP ヘッダーに ECT コードポイントを設定して送信されます。送信者が TCP 接続で送信するすべてのパケットに単一の ECT コードポイントのみが必要な場合、ECT(0) を使用すべきです。送信者が ECN-Echo (ECE) ACK パケット (つまり、TCP ヘッダーに ECN-Echo フラグが設定された ACK パケット) を受信した場合、送信者は、送信者から受信者へのパス上のネットワークで輻輳に遭遇したことを認識します。輻輳表示は、ECN 非対応 TCP での輻輳損失に対するのと同じように処理されるべきです。つまり、TCP 送信元は輻輳ウィンドウ "cwnd" を半分に減らし、スロースタートしきい値 "ssthresh" を減らします。送信 TCP は、ECN-Echo ACK パケットを受信したことに応答して輻輳ウィンドウを増やすべきではありません。
TCP は、各データウィンドウ (またはより緩く言えば、各往復時間) に対して複数回輻輳表示に応答すべきではありません。つまり、TCP 送信者の輻輳ウィンドウは、単一のデータウィンドウからの一連の損失および/または CE パケットに応答して 1 回だけ減少させるべきです。さらに、前回の往復時間内にスロースタートしきい値 ssthresh がすでに減少している場合、TCP 送信元はそれを減少させるべきではありません。ただし、再送されたパケットが破棄された場合、送信元 TCP はこれを輻輳の新しいインスタンスとして解釈します。
送信元 TCP が CE パケットに応答して輻輳ウィンドウを減少させた後、到着し続ける着信確認応答により、減少した輻輳ウィンドウに従って送信パケットを「クロック出力」できます。輻輳ウィンドウが 1 MSS (最大セグメントサイズ、maximum segment size) のみを含み、送信 TCP が ECN-Echo ACK パケットを受信した場合、送信 TCP は原則として輻輳ウィンドウを半分に減らすべきです。ただし、輻輳ウィンドウの値の下限は 1 MSS です。送信 TCP が 1 MSS の輻輳ウィンドウで送信を続ける場合、これは各往復時間に 1 つのパケットの送信をもたらします。輻輳ウィンドウが 1 のときに ECN-Echo パケットを受信した場合でも、TCP 送信者の送信率をさらに減少させる必要があります。私たちは、この状況で率をさらに低下させる手段として再送タイマーを使用します。したがって、輻輳ウィンドウが 1 のときに ECN-Echo パケットを受信した場合、送信 TCP は再送タイマーをリセットする必要があります。その後、送信 TCP は、再送タイマーが期限切れになったときにのみ新しいパケットを送信できます。
ECN 対応 TCP 送信者が何らかの理由で輻輳ウィンドウを減少させた場合 (再送タイムアウト、高速再送、または ECN 通知への応答による)、TCP 送信者は、ウィンドウ削減後に送信する最初の新しいパケットの TCP ヘッダーに CWR フラグを設定します。そのパケットがネットワークで破棄された場合、送信 TCP は輻輳ウィンドウを再度減少させ、失われたパケットを再送する必要があります。
私たちは、「輻輳ウィンドウ削減 (Congestion Window Reduced)」情報が TCP 受信者に確実に配信されることを保証します。これは、CWR フラグを運ぶ新しいパケットが破棄された場合、TCP 送信者は輻輳ウィンドウを再度減少させ、CWR フラグが設定された別の新しいパケットを送信する必要があるためです。したがって、TCP ヘッダーの CWR ビットは、再送されたパケットに設定すべきではありません。
TCP データ送信者が輻輳ウィンドウを減少させた後に CWR ビットを設定する準備ができている場合、送信する最初の新しいパケットでのみ CWR ビットを設定すべきです。
[Floyd94] は、ECN に対する TCP の応答についてより詳細に議論しています。[Floyd98] は、ns シミュレーターでの検証テストについて議論しており、さまざまな ECN シナリオを示しています。これらのシナリオには、ECN に続く別の ECN、高速再送または再送タイムアウト、再送タイムアウトまたは高速再送に続く ECN、および輻輳ウィンドウが 1 パケットの後に ECN が続く場合が含まれます。
TCP は、着信 ACK、複数の重複確認応答、または再送タイムアウトに応答してパケットを送信するための既存のアルゴリズムに従います [RFC2581]。TCP が ECN-Echo ビットが設定されていない ACK パケットを受信した場合、輻輳ウィンドウを増加させる通常の手順にも従います [RFC2581]。