6.1.3 The TCP Receiver (Il ricevitore TCP)
6.1.3 The TCP Receiver (Il ricevitore TCP)
Quando TCP riceve un pacchetto CE nel sistema finale di destinazione, il ricevitore di dati TCP imposta il flag ECN-Echo nell'intestazione TCP del successivo pacchetto ACK. Se viene implementato qualsiasi ritegno degli ACK (withholding), come nelle attuali implementazioni TCP "delayed ACK", dove il ricevitore TCP può inviare un ACK per due pacchetti in arrivo, allora il flag ECN-Echo nel pacchetto ACK sarà impostato a '1' se il codepoint CE era impostato in uno qualsiasi dei pacchetti confermati. Cioè, se uno qualsiasi dei pacchetti ricevuti è un pacchetto CE, allora l'ACK restituito ha il flag ECN-Echo impostato.
Per fornire robustezza contro la possibilità che i pacchetti ACK che trasportano il flag ECN-Echo vengano scartati, il ricevitore TCP imposta il flag ECN-Echo in una serie di pacchetti ACK che invia successivamente. Il ricevitore TCP utilizza il flag CWR ricevuto dal mittente TCP per determinare quando smettere di impostare il flag ECN-Echo.
Dopo che un ricevitore TCP ha inviato un pacchetto ACK con il bit ECN-Echo impostato, quel ricevitore TCP continua a impostare il flag ECN-Echo in tutti i pacchetti ACK che invia (che confermano pacchetti CE o non-CE) fino a quando riceve un pacchetto CWR (un pacchetto con il flag CWR impostato). Dopo aver ricevuto il pacchetto CWR, gli acknowledgement ai pacchetti non-CE successivi non impostano il flag ECN-Echo. Se il ricevitore di dati riceve un altro pacchetto CE, il ricevitore invia nuovamente un pacchetto ACK con il flag ECN-Echo impostato. Sebbene la ricezione di un pacchetto CWR non garantisca che il mittente di dati abbia ricevuto il messaggio ECN-Echo, indica che il mittente di dati ha ridotto la sua finestra di congestione in un momento dopo aver inviato il pacchetto che aveva il codepoint CE impostato.
Abbiamo specificato che un mittente TCP non è tenuto a ridurre la sua finestra di congestione più di una volta per finestra di dati. È necessaria una certa attenzione se il mittente TCP deve evitare di ridurre la finestra di congestione inutilmente quando la finestra di dati include sia pacchetti persi che pacchetti CE (contrassegnati). Questo è illustrato in [Floyd98].