Zum Hauptinhalt springen

8. Beispiele (Examples)

Dieser Abschnitt veranschaulicht das Verhalten der PRR- und [RFC6675]-Algorithmen, indem gezeigt wird, wie sie sich in ihrer Reaktion auf zwei Beispielszenarien unterscheiden: eine Verbindung, die den Verlust eines einzelnen Pakets erfährt, oder einen Burst von 15 aufeinanderfolgenden verlorenen Paketen.

Test-Szenario-Setup​

Alle Fälle verwenden:

  • Bulk-Datenübertragung (keine Anwendungspausen)
  • Reno-Staukontrolle [RFC5681]
  • Ausgangszustand: cwnd = FlightSize = inflight = 20 Segmente
  • ssthresh: Wird zu Beginn der Wiederherstellung auf 10 gesetzt
  • Fast Retransmit: Verwendet standardmäßiges Fast Retransmit [RFC5681]
  • Limited Transmit [RFC3042]: Sendet 2 neue Segmente + 1 Neuübertragung als Reaktion auf die ersten drei doppelten ACKs

Diagrammerklärung​

Die folgenden Diagramme zeigen die Reaktion pro ACK für die erste Rundreise nach dem Verlust von Segment 0. Die oberste Zeile („ack#") zeigt die Segmentnummer an, die das ACK ausgelöst hat, wobei X verlorene Segmente anzeigt.

Die Zeilen „cwnd" und „inflight" zeigen die Werte von cwnd und inflight dieser Algorithmen nach der Verarbeitung jedes zurückkehrenden ACK, aber vor weiteren (Neu-)Übertragungen. Die Zeile „sent" gibt an, wie viele „N" neue Daten oder „R" Neuübertragungen gesendet werden.

Beispiel 1: Einzelner Segmentverlust​

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

Analyse​

In diesem ersten Beispiel:

ACK-Sequenz:

  • ACKs #1 bis #19 tragen SACKs des ursprünglichen Datenflugs
  • ACKs #20 und #21 tragen SACKs für die beiden durch Limited Transmit ausgelösten Segmente
  • ACK #22 trägt ein vollständiges kumulatives ACK, das alle Daten (einschließlich Limited Transmit) abdeckt
  • ACK #22 schließt die Fast-Recovery-Phase ab und damit die PRR-Phase

Verhaltensvergleich:

  • Beide Algorithmen senden die gleiche Gesamtmenge an Daten
  • Beide beenden Fast Recovery mit cwnd, das ssthresh bei einem Wert von 20 entspricht
  • RFC 6675 erfährt ein „Halbes-Fenster-Schweigen"
  • PRR verteilt freiwillige Fensterreduktionen über den gesamten RTT

Beispiel 2: Burst-Verlust von 15 Segmenten​

Als Nächstes betrachten wir das Beispielszenario mit denselben Ausgangsbedingungen, außer dass die ersten 15 Pakete (0-14) verloren gehen. Während des Rests des verlustbehafteten RTT werden nur 5 ACKs an den Sender zurückgegeben. Jeder Algorithmus wird im Folgenden der Reihe nach untersucht.

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

Analyse​

In diesem speziellen Fall:

RFC 6675-Verhalten:

  • Sobald Fast Retransmit ausgelöst wird (beim ACK von Segment 17), überträgt der Sender sofort genügend Daten, damit inflight auf cwnd ansteigt
  • Frühe Messungen (diskutiert in Abschnitt 6 von [RFC6675]) zeigen, dass [RFC6675] die [RFC6937]-Version von PRR (die nur PRR-CRB verwendete) und andere ähnlich konservative getestete Algorithmen erheblich übertrifft
  • Es zeigt, dass Situationen, in denen die tatsächlichen Verluste die vom Staukontrollalgorithmus bestimmte cwnd-Reduktion überschreiten, sehr häufig sind

PRR-Verhalten:

  • Während des ersten RTT der Fast Recovery folgt PRR der Paketerhaltung mit PRR-CRB
  • Da die Gesamtverluste inflight unter ssthresh halten, sorgen die gesendeten Daten dafür, dass die insgesamt übertragenen Daten prr_out den Gesamtdaten folgen, die von zurückkehrenden ACKs als an den Empfänger geliefert gemeldet werden
  • Übertragungen werden durch das Sendelimit gesteuert, das auf prr_delivered - prr_out gesetzt ist

Wiederherstellungsprozess:

  • Obwohl nicht im Diagramm gezeigt, tritt PRR in PRR-SSRB ein, sobald die ab ACK #17 gesendeten schnellen Neuübertragungen geliefert werden und ACKs verursachen, die SND.UNA erhöhen
  • Erhöht das Fenster während der Wiederherstellung um genau 1 Segment pro ACK, bis inflight während der Wiederherstellung ssthresh erreicht
  • Bei schweren Verlusten, wenn cwnd groß ist, erholt sich PRR-SSRB exponentiell schneller als PRR-CRB
  • Obwohl es unklug erscheinen mag, das Fenster während der Wiederherstellung zu erhöhen, ist es wichtig zu bedenken, dass dies tatsächlich konservativer ist als das, was [RFC6675] erlaubt, das die gleiche Menge zusätzlicher Daten als einzelnen Burst als Reaktion auf das ACK sendet, das Fast Retransmit ausgelöst hat

Leichte Verlustfälle: Bei weniger schwerwiegenden Verlustereignissen, bei denen die Gesamtverluste geringer sind als die Differenz zwischen FlightSize und ssthresh, werden PRR-CRB und PRR-SSRB nicht aufgerufen, da PRR im Modus der proportionalen Ratenreduktion bleibt.