Passa al contenuto principale

6.1.1 TCP Initialization (Inizializzazione TCP)

6.1.1 TCP Initialization (Inizializzazione TCP)

Durante la fase di setup della connessione TCP, i TCP di origine e destinazione si scambiano informazioni su se sono disposti a utilizzare ECN. Dopo il completamento di questa negoziazione, il mittente TCP imposta il codepoint ECT nell'intestazione IP dei pacchetti per indicare alla rete che il trasporto è capace e disposto a partecipare a ECN per questo pacchetto. Ciò indica ai router che possono contrassegnare questo pacchetto con il codepoint CE se vogliono utilizzare quel metodo come notifica di congestione. Se la connessione TCP non desidera utilizzare la notifica ECN per un particolare pacchetto, allora il TCP mittente imposta il codepoint ECN a not-ECT e il TCP ricevitore ignora il codepoint CE nei pacchetti ricevuti.

In questa discussione, designeremo l'host di origine come host A e l'host di risposta come host B. Ci riferiremo a un pacchetto SYN con i flag ECE e CWR impostati come "ECN-setup SYN packet" (pacchetto SYN di setup ECN), e a un pacchetto SYN con almeno uno dei flag ECE e CWR non impostato come "non-ECN-setup SYN packet" (pacchetto SYN non di setup ECN). Analogamente, ci riferiremo a un pacchetto SYN-ACK con solo il flag ECE impostato e il flag CWR non impostato come "ECN-setup SYN-ACK packet" (pacchetto SYN-ACK di setup ECN), e a un pacchetto SYN-ACK con qualsiasi altra configurazione dei flag ECE e CWR come "non-ECN-setup SYN-ACK packet" (pacchetto SYN-ACK non di setup ECN).

Prima che una connessione TCP possa utilizzare ECN, l'host A invia un pacchetto SYN di setup ECN e l'host B invia un pacchetto SYN-ACK di setup ECN. Per i pacchetti SYN, l'impostazione di entrambi ECE e CWR in un pacchetto SYN di setup ECN è definita come indicazione che il TCP che trasmette il pacchetto SYN supporta ECN, e non come indicazione di congestione o di risposta alla congestione. Più precisamente, un pacchetto SYN di setup ECN indica che l'implementazione TCP che trasmette il pacchetto SYN parteciperà a ECN sia come mittente che come ricevitore. In particolare, come ricevitore, risponderà ai pacchetti in arrivo con il codepoint CE impostato nell'intestazione IP impostando ECE negli ACK TCP in uscita. Come mittente, risponderà ai pacchetti in arrivo con ECE impostato riducendo la finestra di congestione e impostando CWR quando appropriato. Un pacchetto SYN di setup ECN non si impegna che il mittente TCP imposterà il codepoint ECT in qualsiasi o in tutti i pacchetti che potrebbe trasmettere. Tuttavia, l'impegno a rispondere in modo appropriato ai pacchetti in arrivo con il codepoint CE impostato rimane, anche se il mittente TCP invia un pacchetto SYN con ECE e CWR non impostati nelle trasmissioni successive all'interno di questa connessione TCP.

Quando l'host B trasmette un pacchetto SYN-ACK di setup ECN, imposta il flag ECE ma non imposta il flag CWR. Un pacchetto SYN-ACK di setup ECN è definito come indicazione che il TCP che trasmette il pacchetto SYN-ACK supporta ECN. Come per il pacchetto SYN, un pacchetto SYN-ACK di setup ECN non si impegna che l'host TCP imposterà il codepoint ECT nei pacchetti trasmessi.

Le seguenti regole si applicano all'invio di pacchetti di setup ECN all'interno di una connessione TCP, dove una connessione TCP è definita dalle regole standard per il setup e la terminazione della connessione TCP.

  • Se un host riceve un pacchetto SYN di setup ECN, può inviare un pacchetto SYN-ACK di setup ECN. Altrimenti, NON DEVE inviare un pacchetto SYN-ACK di setup ECN.

  • Un host NON DEVE impostare ECT su un pacchetto a meno che non abbia inviato almeno un pacchetto SYN o SYN-ACK di setup ECN e abbia ricevuto almeno un pacchetto SYN o SYN-ACK di setup ECN, e non abbia inviato alcun pacchetto SYN o SYN-ACK non di setup ECN. Se un host ha ricevuto almeno un pacchetto SYN o SYN-ACK non di setup ECN, allora quell'host NON DOVREBBE impostare ECT su un pacchetto.

  • Se un host ha mai impostato il codepoint ECT su un pacchetto, quell'host DEVE impostare/cancellare correttamente il bit CWR TCP su tutti i pacchetti successivi nella connessione.

  • Se un host ha inviato almeno un pacchetto SYN o SYN-ACK di setup ECN e non ha ricevuto alcun pacchetto SYN o SYN-ACK non di setup ECN, allora se quell'host riceve un pacchetto TCP con i codepoint ECT e CE impostati nell'intestazione IP, allora quell'host DEVE elaborare tali pacchetti come specificato per una connessione con capacità ECN.

  • Un host che non è disposto a utilizzare ECN su una connessione TCP DOVREBBE cancellare i flag ECE e CWR in tutti i pacchetti SYN e/o SYN-ACK non di setup ECN che invia per indicare tale indisponibilità. Un ricevitore DEVE gestire correttamente tutte le forme di pacchetti SYN e SYN-ACK non di setup ECN.

  • Un host NON DEVE impostare ECT su un pacchetto SYN o SYN-ACK.

Un client TCP entra nello stato TIME-WAIT dopo aver ricevuto un FIN-ACK e transita allo stato CLOSED dopo il timeout. Molte implementazioni TCP creano una nuova connessione TCP quando ricevono un pacchetto SYN in finestra durante lo stato TIME-WAIT. Quando un host TCP entra nello stato TIME-WAIT o CLOSED, dovrebbe dimenticare qualsiasi stato precedente riguardante la negoziazione ECN per quella connessione.