6.1.2 The TCP Sender (Il mittente TCP)
6.1.2 The TCP Sender (Il mittente TCP)
Per una connessione TCP che utilizza ECN, i nuovi pacchetti vengono trasmessi con il codepoint ECT impostato nell'intestazione IP. Quando al mittente è richiesto solo un codepoint ECT per tutti i pacchetti inviati su una connessione TCP, dovrebbe essere utilizzato ECT(0). Se il mittente riceve un pacchetto ACK ECN-Echo (ECE) (ovvero, un pacchetto ACK con il flag ECN-Echo impostato nell'intestazione TCP), allora il mittente sa che nella rete è stata incontrata congestione sul percorso dal mittente al ricevitore. L'indicazione di congestione dovrebbe essere trattata proprio come un'indicazione di perdita per congestione in TCP senza supporto ECN. Cioè, il TCP di origine dimezza la finestra di congestione "cwnd" e riduce la soglia di slow start "ssthresh". Il TCP mittente NON DOVREBBE aumentare la finestra di congestione in risposta alla ricezione di un pacchetto ACK ECN-Echo.
TCP NON DOVREBBE reagire a indicazioni di congestione più di una volta per ogni finestra di dati (o più liberamente, per ogni round-trip time). Cioè, la finestra di congestione del mittente TCP dovrebbe essere ridotta solo una volta in risposta a una serie di perdite e/o pacchetti CE da una singola finestra di dati. Inoltre, il TCP di origine NON DOVREBBE ridurre la soglia di slow start ssthresh se è già stata ridotta nel round-trip time precedente. Tuttavia, se uno qualsiasi dei pacchetti ritrasmessi viene scartato, il TCP di origine interpreta questo come una nuova istanza di congestione.
Dopo che il TCP di origine ha ridotto la sua finestra di congestione in risposta a un pacchetto CE, i riconoscimenti in arrivo che continuano ad arrivare possono "far uscire" pacchetti in uscita come consentito dalla finestra di congestione ridotta. Se la finestra di congestione contiene solo un MSS (maximum segment size, dimensione massima del segmento), e il TCP mittente riceve un pacchetto ACK ECN-Echo, allora il TCP mittente dovrebbe comunque in linea di principio dimezzare la finestra di congestione. Tuttavia, il valore inferiore della finestra di congestione è un MSS. Se il TCP mittente continuasse a inviare usando una finestra di congestione di 1 MSS, ciò risulterebbe nella trasmissione di un pacchetto per round-trip time. È necessario ridurre ulteriormente la velocità di invio del mittente TCP anche quando si ricevono pacchetti ECN-Echo con una finestra di congestione di 1. Utilizziamo il timer di ritrasmissione come mezzo per ridurre ulteriormente la velocità in questa situazione. Pertanto, quando si riceve un pacchetto ECN-Echo con una finestra di congestione di 1, il TCP mittente DEVE resettare il timer di ritrasmissione. Il TCP mittente può quindi inviare un nuovo pacchetto solo quando il timer di ritrasmissione scade.
Quando un mittente TCP con capacità ECN riduce la sua finestra di congestione per qualsiasi motivo (a causa di un timeout di ritrasmissione, una ritrasmissione veloce o una notifica ECN), il mittente TCP imposta il flag CWR nell'intestazione TCP del primo nuovo pacchetto inviato dopo che la finestra è stata ridotta. Se quel pacchetto viene scartato nella rete, allora il TCP mittente dovrà ridurre nuovamente la finestra di congestione e ritrasmettere il pacchetto perso.
Assicuriamo che le informazioni "Congestion Window Reduced" (finestra di congestione ridotta) vengano consegnate in modo affidabile al ricevitore TCP. Questo perché se il nuovo pacchetto che trasporta il flag CWR viene scartato, allora il mittente TCP dovrà ridurre nuovamente la sua finestra di congestione e inviare un altro nuovo pacchetto con il flag CWR impostato. Pertanto, il bit CWR nell'intestazione TCP NON DOVREBBE essere impostato sui pacchetti ritrasmessi.
Quando un mittente di dati TCP è pronto a impostare il bit CWR dopo aver ridotto la finestra di congestione, DOVREBBE impostare il bit CWR solo sul primo nuovo pacchetto che trasmette.
[Floyd94] discute la risposta di TCP a ECN in modo più dettagliato. [Floyd98] discute i test di validazione nel simulatore ns, che illustrano vari scenari ECN. Questi scenari includono i seguenti: ECN seguito da un altro ECN, ritrasmissione veloce o timeout di ritrasmissione; timeout di ritrasmissione o ritrasmissione veloce seguiti da ECN; e una finestra di congestione di un pacchetto seguito da ECN.
TCP segue gli algoritmi esistenti per inviare pacchetti in risposta a ACK in arrivo, ACK duplicati multipli o timeout di ritrasmissione [RFC2581]. Quando TCP riceve un pacchetto ACK che non ha il bit ECN-Echo impostato, segue anche le procedure normali per aumentare la finestra di congestione [RFC2581].