8. Esempi (Examples)
Questa sezione illustra il comportamento degli algoritmi PRR e [RFC6675] mostrando come differiscono nella loro risposta a due scenari di esempio: una connessione che subisce la perdita di un singolo pacchetto o una raffica di 15 pacchetti consecutivi persi.
Configurazione dello scenario di test
Tutti i casi utilizzano:
- Trasferimento dati in blocco (nessuna pausa dell'applicazione)
- Controllo della congestione Reno [RFC5681]
- Stato iniziale: cwnd = FlightSize = inflight = 20 segmenti
- ssthresh: Sarà impostato a 10 all'inizio del ripristino
- Fast Retransmit: Utilizza il fast retransmit standard [RFC5681]
- Limited Transmit [RFC3042]: Invia 2 nuovi segmenti + 1 ritrasmissione in risposta ai primi tre ACK duplicati
Spiegazione del diagramma
I seguenti diagrammi mostrano la risposta per ACK per il primo round trip dopo la perdita del segmento 0. La riga superiore ("ack#") indica il numero di segmento che ha attivato l'ACK, con X che indica i segmenti persi.
Le righe "cwnd" e "inflight" mostrano i valori di cwnd e inflight di questi algoritmi dopo l'elaborazione di ciascun ACK di ritorno ma prima di ulteriori (ri)trasmissioni. La riga "sent" indica quanti "N" nuovi dati o "R" ritrasmissioni verranno inviati.
Esempio 1: Perdita di un singolo segmento
RFC 6675
a X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
c 20 20 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
i 19 19 18 18 17 16 15 14 13 12 11 10 9 9 9 9 9 9 9 9 9 9
s N N R N N N N N N N N N N
PRR
a X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
c 20 20 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 10
i 19 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 9 9
s N N R N N N N N N N N N N
a: ack#; c: cwnd; i: inflight; s: sent
Analisi
In questo primo esempio:
Sequenza ACK:
- Gli ACK dal #1 al #19 trasportano SACK del volo di dati originale
- Gli ACK #20 e #21 trasportano SACK per i due segmenti attivati da limited transmit
- L'ACK #22 trasporta un ACK cumulativo completo che copre tutti i dati (incluso limited transmit)
- L'ACK #22 completa la fase di fast recovery, completando così la fase PRR
Confronto dei comportamenti:
- Entrambi gli algoritmi inviano la stessa quantità totale di dati
- Entrambi terminano il fast recovery con cwnd corrispondente a ssthresh con un valore di 20
- RFC 6675 sperimenta un "silenzio di mezza finestra"
- PRR distribuisce le riduzioni volontarie della finestra sull'intero RTT
Esempio 2: Perdita a raffica di 15 segmenti
Successivamente, consideriamo lo scenario di esempio con le stesse condizioni iniziali, tranne che i primi 15 pacchetti (0-14) vengono persi. Durante il resto del RTT con perdite, solo 5 ACK vengono restituiti al mittente. Ciascun algoritmo viene esaminato in sequenza di seguito.
RFC 6675
a X X X X X X X X X X X X X X X 15 16 17 18 19
c 20 20 10 10 10
i 19 19 4 9 9
s N N 6R R R
PRR
a X X X X X X X X X X X X X X X 15 16 17 18 19
c 20 20 5 5 5
i 19 19 4 4 4
s N N R R R
a: ack#; c: cwnd; i: inflight; s: sent
Analisi
In questo caso particolare:
Comportamento RFC 6675:
- Una volta attivato il fast retransmit (sull'ACK del segmento 17), il mittente ritrasmette immediatamente dati sufficienti affinché inflight aumenti per corrispondere a cwnd
- Le misurazioni iniziali (discusse nella sezione 6 di [RFC6675]) mostrano che [RFC6675] supera significativamente la versione [RFC6937] di PRR (che utilizzava solo PRR-CRB) e altri algoritmi simili testati in modo conservativo
- Dimostra che le situazioni in cui le perdite effettive superano la riduzione di cwnd determinata dall'algoritmo di controllo della congestione sono molto comuni
Comportamento PRR:
- Durante il primo RTT del fast recovery, PRR segue la conservazione dei pacchetti utilizzando PRR-CRB
- Poiché le perdite totali mantengono inflight sotto ssthresh, i dati inviati fanno sì che i dati totali trasmessi prr_out seguano i dati totali riportati dagli ACK di ritorno come consegnati al ricevitore
- Le trasmissioni sono controllate dal limite di invio, impostato su prr_delivered - prr_out
Processo di ripristino:
- Sebbene non mostrato nel diagramma, una volta che le ritrasmissioni rapide inviate a partire dall'ACK #17 vengono consegnate e causano ACK che aumentano SND.UNA, PRR entra in PRR-SSRB
- Aumenta la finestra di esattamente 1 segmento per ACK durante il ripristino fino a quando inflight raggiunge ssthresh durante il ripristino
- Per perdite gravi quando cwnd è grande, PRR-SSRB recupera esponenzialmente più velocemente di PRR-CRB
- Sebbene possa sembrare imprudente aumentare la finestra durante il ripristino, è importante ricordare che questo è in realtà più conservativo di ciò che [RFC6675] consente, che invia la stessa quantità di dati aggiuntivi come singola raffica in risposta all'ACK che ha attivato il fast retransmit
Casi di perdita lieve: Per eventi di perdita meno gravi in cui le perdite totali sono inferiori alla differenza tra FlightSize e ssthresh, PRR-CRB e PRR-SSRB non vengono invocati perché PRR rimane in modalità di riduzione proporzionale della velocità.