3. RTTM -- Round-Trip Time Measurement (RTTM -- Rundlaufzeitmessung)
3. RTTM: Round-Trip Time Measurement (RTTM: Rundlaufzeitmessung)
3.1 Introduction (Einführung)
Accurate and current RTT estimates are necessary to adapt to changing traffic conditions and to avoid an instability known as "congestion collapse" [Nagle84] in a busy network. However, accurate measurement of RTT may be difficult both in theory and in implementation.
Genaue und aktuelle RTT-Schätzungen sind erforderlich, um sich an sich ändernde Verkehrsbedingungen anzupassen und eine Instabilität zu vermeiden, die als "Staukollaps (congestion collapse)" [Nagle84] in einem ausgelasteten Netzwerk bekannt ist. Die genaue Messung der RTT kann jedoch sowohl in der Theorie als auch in der Implementierung schwierig sein.
Many TCP implementations base their RTT measurements upon a sample of only one packet per window. While this yields an adequate approximation to the RTT for small windows, it results in an unacceptably poor RTT estimate for an LFN. If we look at RTT estimation as a signal processing problem (which it is), a data signal at some frequency, the packet rate, is being sampled at a lower frequency, the window rate. This lower sampling frequency violates Nyquist's criteria and may therefore introduce "aliasing" artifacts into the estimated RTT [Hamming77].
Viele TCP-Implementierungen basieren ihre RTT-Messungen auf einer Stichprobe von nur einem Paket pro Fenster. Während dies eine angemessene Annäherung an die RTT für kleine Fenster ergibt, führt es zu einer inakzeptabel schlechten RTT-Schätzung für ein LFN. Wenn wir die RTT-Schätzung als ein Signalverarbeitungsproblem betrachten (was sie ist), wird ein Datensignal mit einer bestimmten Frequenz, der Paketrate, mit einer niedrigeren Frequenz, der Fensterrate, abgetastet. Diese niedrigere Abtastfrequenz verletzt das Nyquist-Kriterium und kann daher "Aliasing"-Artefakte in die geschätzte RTT einführen [Hamming77].
A good RTT estimator with a conservative retransmission timeout calculation can tolerate aliasing when the sampling frequency is "close" to the data frequency. For example, with a window of 8 packets, the sample rate is 1/8 the data frequency -- less than an order of magnitude different. However, when the window is tens or hundreds of packets, the RTT estimator may be seriously in error, resulting in spurious retransmissions.
Ein guter RTT-Schätzer mit einer konservativen Neuübertragungstimeout-Berechnung kann Aliasing tolerieren, wenn die Abtastfrequenz "nahe" an der Datenfrequenz liegt. Zum Beispiel beträgt bei einem Fenster von 8 Paketen die Abtastrate 1/8 der Datenfrequenz -- weniger als eine Größenordnung Unterschied. Wenn das Fenster jedoch aus Dutzenden oder Hunderten von Paketen besteht, kann der RTT-Schätzer ernsthaft fehlerhaft sein, was zu Scheinübertragungen führt.
If there are dropped packets, the problem becomes worse. Zhang [Zhang86], Jain [Jain86] and Karn [Karn87] have shown that it is not possible to accumulate reliable RTT estimates if retransmitted segments are included in the estimate. Since a full window of data will have been transmitted prior to a retransmission, all of the segments in that window will have to be ACKed before the next RTT sample can be taken. This means at least an additional window's worth of time between RTT measurements and, as the error rate approaches one per window of data (e.g., 10**-6 errors per bit for the Wideband satellite network), it becomes effectively impossible to obtain a valid RTT measurement.
Wenn Pakete verloren gehen, verschlimmert sich das Problem. Zhang [Zhang86], Jain [Jain86] und Karn [Karn87] haben gezeigt, dass es nicht möglich ist, zuverlässige RTT-Schätzungen zu sammeln, wenn erneut übertragene Segmente in die Schätzung einbezogen werden. Da ein vollständiges Datenfenster vor einer Neuübertragung übertragen worden sein wird, müssen alle Segmente in diesem Fenster bestätigt werden, bevor die nächste RTT-Stichprobe genommen werden kann. Dies bedeutet mindestens eine zusätzliche Fensterzeit zwischen RTT-Messungen, und wenn sich die Fehlerrate einem Fehler pro Datenfenster nähert (z.B. 10**-6 Fehler pro Bit für das Breitband-Satellitennetzwerk), wird es praktisch unmöglich, eine gültige RTT-Messung zu erhalten.
A solution to these problems, which actually simplifies the sender substantially, is as follows: using TCP options, the sender places a timestamp in each data segment, and the receiver reflects these timestamps back in ACK segments. Then a single subtract gives the sender an accurate RTT measurement for every ACK segment (which will correspond to every other data segment, with a sensible receiver). We call this the RTTM (Round-Trip Time Measurement) mechanism.
Eine Lösung für diese Probleme, die den Sender tatsächlich erheblich vereinfacht, ist wie folgt: Durch Verwendung von TCP-Optionen platziert der Sender einen Zeitstempel in jedem Datensegment, und der Empfänger reflektiert diese Zeitstempel in ACK-Segmenten zurück. Dann gibt eine einzige Subtraktion dem Sender eine genaue RTT-Messung für jedes ACK-Segment (was bei einem vernünftigen Empfänger jedem zweiten Datensegment entspricht). Wir nennen dies den RTTM-Mechanismus (Round-Trip Time Measurement, Rundlaufzeitmessung).
It is vitally important to use the RTTM mechanism with big windows; otherwise, the door is opened to some dangerous instabilities due to aliasing. Furthermore, the option is probably useful for all TCP's, since it simplifies the sender.
Es ist äußerst wichtig, den RTTM-Mechanismus mit großen Fenstern zu verwenden; andernfalls öffnet sich die Tür zu einigen gefährlichen Instabilitäten aufgrund von Aliasing. Darüber hinaus ist die Option wahrscheinlich für alle TCPs nützlich, da sie den Sender vereinfacht.
3.2 TCP Timestamps Option (TCP Timestamps-Option)
TCP is a symmetric protocol, allowing data to be sent at any time in either direction, and therefore timestamp echoing may occur in either direction. For simplicity and symmetry, we specify that timestamps always be sent and echoed in both directions. For efficiency, we combine the timestamp and timestamp reply fields into a single TCP Timestamps Option.
TCP ist ein symmetrisches Protokoll, das das Senden von Daten zu jeder Zeit in beide Richtungen ermöglicht, und daher kann das Zeitstempel-Echo in beide Richtungen erfolgen. Zur Vereinfachung und Symmetrie geben wir an, dass Zeitstempel immer in beide Richtungen gesendet und zurückgesendet werden. Zur Effizienz kombinieren wir die Zeitstempel- und Zeitstempel-Antwortfelder zu einer einzigen TCP Timestamps-Option.
TCP Timestamps Option (TSopt):
Kind: 8
Length: 10 bytes
+-------+-------+---------------------+---------------------+
|Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)|
+-------+-------+---------------------+---------------------+
1 1 4 4
The Timestamps option carries two four-byte timestamp fields. The Timestamp Value field (TSval) contains the current value of the timestamp clock of the TCP sending the option.
Die Timestamps-Option trägt zwei Vier-Byte-Zeitstempelfelder. Das Timestamp Value-Feld (TSval) enthält den aktuellen Wert der Zeitstempeluhr des TCP, das die Option sendet.
The Timestamp Echo Reply field (TSecr) is only valid if the ACK bit is set in the TCP header; if it is valid, it echos a timestamp value that was sent by the remote TCP in the TSval field of a Timestamps option. When TSecr is not valid, its value must be zero. The TSecr value will generally be from the most recent Timestamp option that was received; however, there are exceptions that are explained below.
Das Timestamp Echo Reply-Feld (TSecr) ist nur gültig, wenn das ACK-Bit im TCP-Header gesetzt ist; wenn es gültig ist, gibt es einen Zeitstempelwert zurück, der vom entfernten TCP im TSval-Feld einer Timestamps-Option gesendet wurde. Wenn TSecr nicht gültig ist, muss sein Wert Null sein. Der TSecr-Wert stammt im Allgemeinen von der zuletzt empfangenen Timestamp-Option; es gibt jedoch Ausnahmen, die unten erklärt werden.
A TCP may send the Timestamps option (TSopt) in an initial <SYN> segment (i.e., segment containing a SYN bit and no ACK bit), and may send a TSopt in other segments only if it received a TSopt in the initial <SYN> segment for the connection.
Ein TCP kann die Timestamps-Option (TSopt) in einem initialen <SYN>-Segment senden (d.h. einem Segment, das ein SYN-Bit und kein ACK-Bit enthält), und darf eine TSopt in anderen Segmenten nur senden, wenn es eine TSopt im initialen <SYN>-Segment für die Verbindung erhalten hat.
3.3 The RTTM Mechanism (Der RTTM-Mechanismus)
The timestamp value to be sent in TSval is to be obtained from a (virtual) clock that we call the "timestamp clock". Its values must be at least approximately proportional to real time, in order to measure actual RTT.
Der in TSval zu sendende Zeitstempelwert ist von einer (virtuellen) Uhr zu beziehen, die wir "Zeitstempeluhr (timestamp clock)" nennen. Ihre Werte müssen zumindest annähernd proportional zur realen Zeit sein, um die tatsächliche RTT zu messen.
The following example illustrates a one-way data flow with segments arriving in sequence without loss. Here A, B, C... represent data blocks occupying successive blocks of sequence numbers, and ACK(A),... represent the corresponding cumulative acknowledgments. The two timestamp fields of the Timestamps option are shown symbolically as <TSval= x,TSecr=y>. Each TSecr field contains the value most recently received in a TSval field.
Das folgende Beispiel veranschaulicht einen unidirektionalen Datenfluss mit Segmenten, die in der Reihenfolge ohne Verlust ankommen. Hier repräsentieren A, B, C... Datenblöcke, die aufeinanderfolgende Blöcke von Sequenznummern belegen, und ACK(A),... repräsentieren die entsprechenden kumulativen Bestätigungen. Die beiden Zeitstempelfelder der Timestamps-Option werden symbolisch als <TSval= x,TSecr=y> dargestellt. Jedes TSecr-Feld enthält den zuletzt in einem TSval-Feld empfangenen Wert.
TCP A TCP B
<A,TSval=1,TSecr=120> ------>
<---- <ACK(A),TSval=127,TSecr=1>
<B,TSval=5,TSecr=127> ------>
<---- <ACK(B),TSval=131,TSecr=5>
. . . . . . . . . . . . . . . . . . . . . .
<C,TSval=65,TSecr=131> ------>
<---- <ACK(C),TSval=191,TSecr=65>
(etc)
The dotted line marks a pause (60 time units long) in which A had nothing to send. Note that this pause inflates the RTT which B could infer from receiving TSecr=131 in data segment C. Thus, in one-way data flows, RTTM in the reverse direction measures a value that is inflated by gaps in sending data. However, the following rule prevents a resulting inflation of the measured RTT:
Die gepunktete Linie markiert eine Pause (60 Zeiteinheiten lang), in der A nichts zu senden hatte. Beachten Sie, dass diese Pause die RTT aufbläht, die B aus dem Empfang von TSecr=131 im Datensegment C ableiten könnte. Daher misst RTTM in unidirektionalen Datenflüssen in der Rückwärtsrichtung einen Wert, der durch Lücken beim Senden von Daten aufgebläht wird. Die folgende Regel verhindert jedoch eine resultierende Aufblähung der gemessenen RTT:
A TSecr value received in a segment is used to update the averaged RTT measurement only if the segment acknowledges some new data, i.e., only if it advances the left edge of the send window.
Ein in einem Segment empfangener TSecr-Wert wird nur dann zur Aktualisierung der gemittelten RTT-Messung verwendet, wenn das Segment einige neue Daten bestätigt, d.h. nur wenn es die linke Kante des Sendefensters vorwärts bewegt.
Since TCP B is not sending data, the data segment C does not acknowledge any new data when it arrives at B. Thus, the inflated RTTM measurement is not used to update B's RTTM measurement.
Da TCP B keine Daten sendet, bestätigt das Datensegment C keine neuen Daten, wenn es bei B ankommt. Daher wird die aufgeblähte RTTM-Messung nicht zur Aktualisierung der RTTM-Messung von B verwendet.
3.4 Which Timestamp to Echo (Welcher Zeitstempel zurückgesendet werden soll)
If more than one Timestamps option is received before a reply segment is sent, the TCP must choose only one of the TSvals to echo, ignoring the others. To minimize the state kept in the receiver (i.e., the number of unprocessed TSvals), the receiver should be required to retain at most one timestamp in the connection control block.
Wenn mehr als eine Timestamps-Option empfangen wird, bevor ein Antwortsegment gesendet wird, muss das TCP nur einen der TSvals zum Zurücksenden auswählen und die anderen ignorieren. Um den im Empfänger gehaltenen Zustand zu minimieren (d.h. die Anzahl der unverarbeiteten TSvals), sollte der Empfänger verpflichtet sein, höchstens einen Zeitstempel im Verbindungssteuerblock zu behalten.
There are three situations to consider:
Es gibt drei zu berücksichtigende Situationen:
(A) Delayed ACKs. (Verzögerte ACKs)
Many TCP's acknowledge only every Kth segment out of a group of segments arriving within a short time interval; this policy is known generally as "delayed ACKs". The data-sender TCP must measure the effective RTT, including the additional time due to delayed ACKs, or else it will retransmit unnecessarily. Thus, when delayed ACKs are in use, the receiver should reply with the TSval field from the earliest unacknowledged segment.
Viele TCPs bestätigen nur jedes K-te Segment aus einer Gruppe von Segmenten, die innerhalb eines kurzen Zeitintervalls ankommen; diese Richtlinie ist allgemein als "verzögerte ACKs (delayed ACKs)" bekannt. Das datensendende TCP muss die effektive RTT messen, einschließlich der zusätzlichen Zeit aufgrund verzögerter ACKs, oder es wird unnötig neu übertragen. Daher sollte der Empfänger, wenn verzögerte ACKs verwendet werden, mit dem TSval-Feld aus dem frühesten unbestätigten Segment antworten.
(B) A hole in the sequence space (segment(s) have been lost). (Ein Loch im Sequenzraum (Segment(e) wurden verloren))
The sender will continue sending until the window is filled, and the receiver may be generating ACKs as these out-of-order segments arrive (e.g., to aid "fast retransmit").
Der Sender wird weiter senden, bis das Fenster gefüllt ist, und der Empfänger kann ACKs generieren, wenn diese nicht in der Reihenfolge befindlichen Segmente ankommen (z.B. um die "schnelle Neuübertragung (fast retransmit)" zu unterstützen).
The lost segment is probably a sign of congestion, and in that situation the sender should be conservative about retransmission. Furthermore, it is better to overestimate than underestimate the RTT. An ACK for an out-of-order segment should therefore contain the timestamp from the most recent segment that advanced the window.
Das verlorene Segment ist wahrscheinlich ein Zeichen von Überlastung, und in dieser Situation sollte der Sender bei der Neuübertragung konservativ sein. Darüber hinaus ist es besser, die RTT zu überschätzen als zu unterschätzen. Ein ACK für ein nicht in der Reihenfolge befindliches Segment sollte daher den Zeitstempel aus dem jüngsten Segment enthalten, das das Fenster vorwärts bewegt hat.
The same situation occurs if segments are re-ordered by the network.
Die gleiche Situation tritt auf, wenn Segmente vom Netzwerk neu geordnet werden.
(C) A filled hole in the sequence space. (Ein gefülltes Loch im Sequenzraum)
The segment that fills the hole represents the most recent measurement of the network characteristics. On the other hand, an RTT computed from an earlier segment would probably include the sender's retransmit time-out, badly biasing the sender's average RTT estimate. Thus, the timestamp from the latest segment (which filled the hole) must be echoed.
Das Segment, das das Loch füllt, repräsentiert die neueste Messung der Netzwerkcharakteristiken. Andererseits würde eine aus einem früheren Segment berechnete RTT wahrscheinlich den Neuübertragungstimeout des Senders einschließen, was die durchschnittliche RTT-Schätzung des Senders stark verzerrt. Daher muss der Zeitstempel aus dem neuesten Segment (das das Loch gefüllt hat) zurückgesendet werden.
An algorithm that covers all three cases is described in the following rules for Timestamps option processing on a synchronized connection:
Ein Algorithmus, der alle drei Fälle abdeckt, wird in den folgenden Regeln für die Verarbeitung der Timestamps-Option bei einer synchronisierten Verbindung beschrieben:
(1) The connection state is augmented with two 32-bit slots: TS.Recent holds a timestamp to be echoed in TSecr whenever a segment is sent, and Last.ACK.sent holds the ACK field from the last segment sent. Last.ACK.sent will equal RCV.NXT except when ACKs have been delayed.
Der Verbindungszustand wird um zwei 32-Bit-Slots erweitert: TS.Recent enthält einen Zeitstempel, der in TSecr zurückgesendet werden soll, wann immer ein Segment gesendet wird, und Last.ACK.sent enthält das ACK-Feld aus dem zuletzt gesendeten Segment. Last.ACK.sent entspricht RCV.NXT, außer wenn ACKs verzögert wurden.
(2) If Last.ACK.sent falls within the range of sequence numbers of an incoming segment:
Wenn Last.ACK.sent in den Bereich der Sequenznummern eines eingehenden Segments fällt:
SEG.SEQ <= Last.ACK.sent < SEG.SEQ + SEG.LEN
then the TSval from the segment is copied to TS.Recent; otherwise, the TSval is ignored.
dann wird der TSval aus dem Segment nach TS.Recent kopiert; andernfalls wird der TSval ignoriert.
(3) When a TSopt is sent, its TSecr field is set to the current TS.Recent value.
Wenn eine TSopt gesendet wird, wird ihr TSecr-Feld auf den aktuellen TS.Recent-Wert gesetzt.
The following examples illustrate these rules. Here A, B, C... represent data segments occupying successive blocks of sequence numbers, and ACK(A),... represent the corresponding acknowledgment segments. Note that ACK(A) has the same sequence number as B. We show only one direction of timestamp echoing, for clarity.
Die folgenden Beispiele veranschaulichen diese Regeln. Hier repräsentieren A, B, C... Datensegmente, die aufeinanderfolgende Blöcke von Sequenznummern belegen, und ACK(A),... repräsentieren die entsprechenden Bestätigungssegmente. Beachten Sie, dass ACK(A) dieselbe Sequenznummer wie B hat. Zur Klarheit zeigen wir nur eine Richtung des Zeitstempel-Echos.
o Packets arrive in sequence, and some of the ACKs are delayed.
Pakete kommen in der Reihenfolge an, und einige der ACKs werden verzögert.
By Case (A), the timestamp from the oldest unacknowledged segment is echoed.
Nach Fall (A) wird der Zeitstempel aus dem ältesten unbestätigten Segment zurückgesendet.
TS.Recent
<A, TSval=1> ------------------->
1
<B, TSval=2> ------------------->
1
<C, TSval=3> ------------------->
1
<---- <ACK(C), TSecr=1>
(etc)
o Packets arrive out of order, and every packet is acknowledged.
Pakete kommen nicht in der Reihenfolge an, und jedes Paket wird bestätigt.
By Case (B), the timestamp from the last segment that advanced the left window edge is echoed, until the missing segment arrives; it is echoed according to Case (C). The same sequence would occur if segments B and D were lost and retransmitted.
Nach Fall (B) wird der Zeitstempel aus dem letzten Segment, das die linke Fensterkante vorwärts bewegt hat, zurückgesendet, bis das fehlende Segment ankommt; es wird gemäß Fall (C) zurückgesendet. Die gleiche Sequenz würde auftreten, wenn Segmente B und D verloren gingen und neu übertragen würden.
TS.Recent
<A, TSval=1> ------------------->
1
<---- <ACK(A), TSecr=1>
1
<C, TSval=3> ------------------->
1
<---- <ACK(A), TSecr=1>
1
<B, TSval=2> ------------------->
2
<---- <ACK(C), TSecr=2>
2
<E, TSval=5> ------------------->
2
<---- <ACK(C), TSecr=2>
2
<D, TSval=4> ------------------->
4
<---- <ACK(E), TSecr=4>
(etc)