L'implementazione secondo queste considerazioni dell'algoritmo di calcolo della finestra è estremamente semplice, e comporta poche modifiche al codice.
Ancora più importante, non viene modificato il protocollo, ma solo la sua implementazione.
Questo è l'algoritmo che viene eseguito (lato mittente) ad ogni ricezione di un ack:
if ( cwnd < ssthresh ) # in fase di slow start # apertura esponenziale cwnd+=1; else # in fase di prevenzione della congestione # apertura lineare cwnd+=(1/cwnd);
L'algoritmo eseguito (lato mittente) ad ogni timeout è ancora più semplice:
ssthresh=ssthresh/2; cwnd=1;La prima istruzione implementa la riduzione esponenziale della finestra, mentre la seconda fa ripartire lo slow-start.
Il calcolo del timeout di ritrasmissione è un po' più complesso da giustificare. Risente di ottimizzazioni che oggi hanno poco significato:
# Calcola la media ammortizzata misura -= ( media >> 3 ); media += misura; if (misura < 0) misura = -misura; # Calcola la deviazione misura -= (deviazione >> 2); deviazione += misura; # Calcola il timeout timeout = (media >> 3) + deviazione;
next: Conclusione.
previous: Allargamento dinamico della finestra.
up: La congestione nelle reti di comuicazione