6.1.1 TCP Initialization (TCP 初期化)
6.1.1 TCP Initialization (TCP 初期化)
TCP 接続確立フェーズ中に、送信元および宛先 TCP は、ECN の使用を希望するかどうかに関する情報を交換します。このネゴシエーションが完了した後、TCP 送信者はパケットの IP ヘッダーに ECT コードポイントを設定して、トランスポートがこのパケットに対して ECN に参加できる能力と意思があることをネットワークに示します。これは、ルーターが輻輳通知の方法としてその方法を使用したい場合、このパケットを CE コードポイントでマークできることをルーターに示します。TCP 接続が特定のパケットに対して ECN 通知を使用しない場合、送信 TCP は ECN コードポイントを not-ECT に設定し、TCP 受信者は受信したパケットの CE コードポイントを無視します。
この議論では、開始ホストをホスト A、応答ホストをホスト B と指定します。ECE および CWR フラグが設定された SYN パケットを「ECN-setup SYN packet (ECN セットアップ SYN パケット)」と呼び、ECE および CWR フラグの少なくとも 1 つが設定されていない SYN パケットを「non-ECN-setup SYN packet (非 ECN セットアップ SYN パケット)」と呼びます。同様に、ECE フラグのみが設定され CWR フラグが設定されていない SYN-ACK パケットを「ECN-setup SYN-ACK packet (ECN セットアップ SYN-ACK パケット)」と呼び、ECE および CWR フラグのその他の構成の SYN-ACK パケットを「non-ECN-setup SYN-ACK packet (非 ECN セットアップ SYN-ACK パケット)」と呼びます。
TCP 接続が ECN を使用できるようになる前に、ホスト A は ECN セットアップ SYN パケットを送信し、ホスト B は ECN セットアップ SYN-ACK パケットを送信します。SYN パケットの場合、ECN セットアップ SYN パケットで ECE および CWR の両方を設定することは、送信 TCP が ECN をサポートしていることの指示として定義されており、輻輳または輻輳への応答の指示としてではありません。より正確には、ECN セットアップ SYN パケットは、SYN パケットを送信する TCP 実装が送信者および受信者として ECN に参加することを示します。具体的には、受信者として、送信 TCP ACK パケットで ECE を設定することにより、IP ヘッダーに CE コードポイントが設定された着信パケットに応答します。送信者として、適切な場合に輻輳ウィンドウを削減し、CWR を設定することにより、ECE が設定された着信パケットに応答します。ECN セットアップ SYN パケットは、TCP 送信者が送信する可能性のあるパケットのいずれかまたはすべてに ECT コードポイントを設定することを約束するものではありません。ただし、TCP 送信者がこの TCP 接続内の後続の送信で ECE および CWR が設定されていない SYN パケットを送信した場合でも、CE コードポイントが設定された着信パケットに適切に応答するという約束は残ります。
ホスト B が ECN セットアップ SYN-ACK パケットを送信する場合、ECE フラグを設定しますが、CWR フラグは設定しません。ECN セットアップ SYN-ACK パケットは、SYN-ACK パケットを送信する TCP が ECN をサポートしていることの指示として定義されています。SYN パケットと同様に、ECN セットアップ SYN-ACK パケットは、TCP ホストが送信されるパケットに ECT コードポイントを設定することを約束するものではありません。
TCP 接続内で ECN セットアップパケットを送信する場合、以下のルールが適用されます。TCP 接続は、TCP 接続の確立と終了の標準ルールによって定義されます。
-
ホストが ECN セットアップ SYN パケットを受信した場合、ECN セットアップ SYN-ACK パケットを送信できます。それ以外の場合、ECN セットアップ SYN-ACK パケットを送信してはなりません。
-
ホストが少なくとも 1 つの ECN セットアップ SYN または ECN セットアップ SYN-ACK パケットを送信し、少なくとも 1 つの ECN セットアップ SYN または ECN セットアップ SYN-ACK パケットを受信し、非 ECN セットアップ SYN または非 ECN セットアップ SYN-ACK パケットを送信していない場合を除き、ホストはパケットに ECT を設定してはなりません。ホストが少なくとも 1 つの非 ECN セットアップ SYN または非 ECN セットアップ SYN-ACK パケットを受信した場合、パケットに ECT を設定すべきではありません。
-
ホストがパケットに ECT コードポイントを設定したことがある場合、そのホストは接続内のすべての後続パケットで CWR TCP ビットを正しく設定/クリアする必要があります。
-
ホストが少なくとも 1 つの ECN セットアップ SYN または ECN セットアップ SYN-ACK パケットを送信し、非 ECN セットアップ SYN または非 ECN セットアップ SYN-ACK パケットを受信していない場合、そのホストが IP ヘッダーに ECT および CE コードポイントが設定された TCP パケットを受信したときは、ECN 対応接続に規定されている方法でこれらのパケットを処理する必要があります。
-
TCP 接続で ECN を使用したくないホストは、送信するすべての非 ECN セットアップ SYN および/または SYN-ACK パケットで ECE および CWR フラグをクリアして、この意思がないことを示すべきです。受信者は、すべての形式の非 ECN セットアップ SYN および SYN-ACK パケットを正しく処理する必要があります。
-
ホストは、SYN または SYN-ACK パケットに ECT を設定してはなりません。
TCP クライアントは、FIN-ACK を受信した後に TIME-WAIT 状態に入り、タイムアウト後に CLOSED 状態に遷移します。多くの TCP 実装は、TIME-WAIT 状態中にウィンドウ内 SYN パケットを受信すると新しい TCP 接続を作成します。TCP ホストが TIME-WAIT または CLOSED 状態に入るとき、その接続に関する ECN ネゴシエーションに関する以前の状態を無視すべきです。