Implementazione.

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;

Conclusione.

Allargamento dinamico della finestra.

up: La congestione nelle reti di comuicazione

index