Kapitel Fehlerkontrolle - Universität Ulm
Kapitel Fehlerkontrolle - Universität Ulm Kapitel Fehlerkontrolle - Universität Ulm
Distributed Systems Department oQS QoS Group © University of Ulm, Distributed Systems, Dr. A. Kassler Rechnernetze I Fehlerkontrolle Dr. Andreas Kassler Universität Ulm University of Ulm Slide 1
- Seite 2 und 3: Distributed Systems Department oQS
- Seite 4 und 5: Distributed Systems Department oQS
- Seite 6 und 7: Distributed Systems Department oQS
- Seite 8 und 9: Distributed Systems Department oQS
- Seite 10 und 11: Distributed Systems Department oQS
- Seite 12 und 13: Distributed Systems Department oQS
- Seite 14 und 15: Distributed Systems Department oQS
- Seite 16 und 17: Distributed Systems Department oQS
- Seite 18 und 19: Distributed Systems Department oQS
- Seite 20 und 21: Distributed Systems Department oQS
- Seite 22 und 23: Distributed Systems Department oQS
- Seite 24 und 25: Distributed Systems Department oQS
- Seite 26 und 27: Distributed Systems Department oQS
- Seite 28 und 29: Distributed Systems Department oQS
- Seite 30 und 31: Distributed Systems Department oQS
- Seite 32 und 33: Distributed Systems Department oQS
- Seite 34 und 35: Distributed Systems Department oQS
- Seite 36 und 37: Distributed Systems Department oQS
- Seite 38 und 39: Distributed Systems Department oQS
- Seite 40 und 41: Distributed Systems Department oQS
- Seite 42 und 43: Distributed Systems Department oQS
- Seite 44 und 45: Distributed Systems Department oQS
- Seite 46 und 47: Distributed Systems Department Wart
- Seite 48 und 49: Distributed Systems Department oQS
- Seite 50 und 51: Distributed Systems Department oQS
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Rechnernetze I<br />
<strong>Fehlerkontrolle</strong><br />
Dr. Andreas Kassler<br />
<strong>Universität</strong> <strong>Ulm</strong><br />
University of <strong>Ulm</strong><br />
Slide 1
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 2
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Paketverlust<br />
Nicht korrigierbare Bitfehler<br />
Besonders bei drahtloser Übertragung<br />
Temporäre Überlast in Router/Switch<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Typen von Paketfehlern<br />
University of <strong>Ulm</strong><br />
Besonders bei Burstartigem Verkehr Je höher der Burst, desto höher der Verlust bei<br />
gleicher Auslastung<br />
Paketverlustrate hängt ab von Burstiness, Last und Puffergröße<br />
Je höher die Auslastung, desto höher die Verlustrate<br />
Paketverluste in Routern sind typischerweise burstartig<br />
Bei konstantem Verkehr: Je mehr Puffer im Router, desto geringer die Verlustrate<br />
Korrelation zwischen Paketverlust und End-zu-End Verzögerung<br />
Verlust von Fragmenten<br />
Fragmentierte Pakete können zu erhöhten Fehlern führen<br />
Switch überträgt Pakete (Zellen) konstanter Größe<br />
Z.B. ATM: Cell Loss Rate<br />
Je größer die Paketgrösse desto höher der Verlust (bei gleicher Cell Loss Rate)<br />
Slide 3
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Paketeinfügung<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Fehlertypen<br />
Paket wurde empfangen, welches an einen anderen adressiert ist<br />
Grund: Bitfehler im Nachrichtenkopf<br />
Re-ordering<br />
Re ordering<br />
Pakete wurden in falscher Reihenfolge erhalten<br />
Grund:<br />
Neuübertragung durch Empfänger<br />
Routenwechsel im Netz<br />
Duplikate<br />
University of <strong>Ulm</strong><br />
Empfang eines gleichen Paketes zum wiederholten Male<br />
Typischerweise bei Neuübertragung, wenn Sender irrtümlich einen Paketverlust<br />
angenommen hat oder Bestätigung verloren/zu lange unterwegs. Denn dann wird<br />
Sender das Paket nochmal übertragen später<br />
Slide 4
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Bitfehler<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Fehlererkennung und Behebung<br />
Fehlererkennende Codes Erkennung<br />
Z.B. Cyclic Redundancy Check<br />
Fehlerkorrigierende Codes Behebung<br />
Z.B. Vorwärtsfehlerkorrektur<br />
University of <strong>Ulm</strong><br />
Mechanismen zur Erkennung und Behebung von Paketfehlern<br />
Sequenznummern Erkennung<br />
Zeitüberwachung (“Time-Out”) Erkennung<br />
Quittungen (“Acknowledgement”) Erkennung/Behebung<br />
Sendewiederholungen (“Retransmission”) Behebung<br />
• Nicht behebbare Bitfehler führen zu Paketverlusten<br />
• Bitfehler Erkennung ist Hop-by-Hop, Paketfehler typischerweise E-2-E<br />
• Einfügen von Redundanz bei Sender zur Fehlererkennung<br />
und Behebung<br />
Slide 5
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Schicht n<br />
Schicht n-1<br />
Verlustfreie Zustellung von Information<br />
Sender Empfänger<br />
Daten Daten<br />
Verlustfreier Kanal<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Rdt_Send()<br />
Protokoll zu<br />
verlustfreien<br />
Zustellung<br />
(Sender)<br />
University of <strong>Ulm</strong><br />
Daten Daten<br />
Deliver_Data()<br />
Verlustbehafteter Kanal<br />
Protokoll zu<br />
verlustfreien<br />
Zustellung<br />
(Empfänger)<br />
Udt_Send() Paket<br />
Udt_Rcv()<br />
Zur Verfügung gestellter Dienst Implementierung des Dienstes<br />
Charakteristika des verlustbehafteten Kanals bestimmen Komplexität des<br />
Protokolls Rdt (Reliable Data Transfer)<br />
Slide 6<br />
Paket
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Rdt_Send() wird von oben (z.B.<br />
Anwendung) aufgerufen mit Daten, die<br />
zum Empfänger gehen sollen<br />
Rdt_Send()<br />
Protokoll zu<br />
verlustfreien<br />
Zustellung<br />
(Sender)<br />
Erläuterungen<br />
University of <strong>Ulm</strong><br />
Deliver_Data() wird von Rdt aufgerufen,<br />
sobald Daten erfolgreich empfangen<br />
wurden<br />
Daten Deliver_Data() Daten<br />
Verlustbehafteter Kanal<br />
Protokoll zu<br />
verlustfreien<br />
Zustellung<br />
(Empfänger)<br />
Udt_Send() Udt_Rcv()<br />
Paket Paket<br />
Udt_Send() wird von Rdt aufgerufen, um<br />
ein Paket über einen verlustbehafteten<br />
© University of Kanal <strong>Ulm</strong>, Distributed zu übertragen<br />
Systems, Dr. A. Kassler<br />
Udt_Rcv() wird aufgerufen, sobald ein<br />
Paket auf der Seite des Empfängers<br />
ankommt.<br />
Slide 7
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Verwendung von Zustandsautomaten<br />
Protokollbeschreibung<br />
Verwendung von Zustandsautomaten (Finite State Machine, FSM)<br />
Getrennt für Sender und Empfänger<br />
FSM besteht aus<br />
Menge von Zuständen<br />
Menge von Aktionen<br />
Menge von Ereignissen<br />
Zustandsübergängen<br />
Zustand: Wenn sich FSM in<br />
diesem Zustand befindet,<br />
ist der nächste Zustand<br />
eindeutig durch das<br />
nächste Ereignis definiert<br />
Zustand<br />
1<br />
Ereignis, führt zu Zustandsübergang<br />
Aktionen bei Zustandsübergang<br />
Ereignis<br />
Aktion<br />
University of <strong>Ulm</strong><br />
Zustand<br />
2<br />
Slide 8
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Rdt_v_1.0 Rdt_v_1.0<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
University of <strong>Ulm</strong><br />
Verlustfreie Übertragung über Verlustfreien Kanal<br />
Kanal perfekt<br />
Keine Bitfehler<br />
Kein Paketverlust<br />
Sender FSM<br />
Sender gibt Daten an Kanal<br />
Empfänger FSM<br />
Empfänger liest Daten aus Kanal<br />
Warte bis<br />
Aufruf von<br />
oben<br />
Rdt_Send(data)<br />
Create_packet(packet,data)<br />
Udt_Send(packet)<br />
Rdt_v_1.0 Rdt_v_1.0<br />
Sender<br />
Warte bis<br />
Aufruf von<br />
unten<br />
Udt_Rcv(packet)<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
Rdt_v_1.0 Rdt_v_1.0<br />
Empfänger<br />
Slide 9
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 10
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Problemfälle<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Sequenznummern<br />
Kommen Pakete in der richtigen Reihenfolge an?<br />
Fehlen Pakete?<br />
Sind Pakete doppelt zugestellt (Duplikate)?<br />
Lösung<br />
Durchnummerierung der Pakete (nur nicht neu zu übertragende)<br />
Einfügen der Paketnummer in die zu übertragende Dateneinheit<br />
Sequenznummer<br />
Anwendung<br />
Re-Ordering und Duplikate Einfach zu erkennen<br />
Paketverlust wird von Empfänger erkannt durch Lücke im Sequenzraum<br />
Bsp.: Empfangen 0,1,2,5,6,7 Verlust: 3,4<br />
Paketeinfügung:<br />
Ist empfangene Sequenznummer “ziemlich” verschieden von erwarteter<br />
In Datalink-Layer und in Transport-Layer verwendbar<br />
University of <strong>Ulm</strong><br />
Slide 11
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 12
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Problemfälle<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Quittungen<br />
Wie kann Sender wissen, ob ein Paket erfolgreich zugestellt wurde?<br />
Menschliches Analogon?<br />
Lösung<br />
University of <strong>Ulm</strong><br />
Empfänger benachrichtigt Sender über den korrekten Empfang eines Paketes<br />
Verwendung von speziellen Kontrollnachrichten<br />
Quittung (“ACKNOWLEDGEMENT”)<br />
Positiv: bei korrektem Erhalt der Daten<br />
Negativ: bei Nichterhalt/nicht korrektem Erhalt.<br />
NACK (“negative Acknowledgement”)<br />
Selektiv: bezieht sich auf ein spezielles Paket,<br />
z.B. negative selektive Quittung bei vermutetem Paketverlust<br />
SACK (“selective Acknowledgement”)<br />
Kumulativ: bezieht sich auf eine Menge von Paketen, z.B. definiert durch obere<br />
Sequenznummer (z.B. positive kumulative Quittung für alle Pakete bis zu<br />
einer definierten Sequenznummer)<br />
Oft zusammen mit Ablauf von Zeitgebern verwendet<br />
Slide 13
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Idee mit NACK<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Quittungen<br />
Empfänger erkennt Lücke im Sequenzraum<br />
Schickt NACK zu Sender mit Liste von Sequenznummern<br />
Sender Überträgt dann die entsprechenden Pakete neu.<br />
Kann dies gutgehen?<br />
Paketverlust durch Überlast NACK erzeugt zusätzlich Netz-Verkehr<br />
Was passiert wenn NACK verloren?<br />
Empfänger muß NACK neu-übertragen<br />
Empfänger braucht auch Zeitsteuerung<br />
University of <strong>Ulm</strong><br />
Slide 14
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Quittungen<br />
Huckepack (“Piggy Back”) Transport<br />
University of <strong>Ulm</strong><br />
ACK/NACK (E S) wird in den Kopf eines normalen Paketes in Gegenrichtung<br />
gepackt<br />
Funktioniert nur, wenn beide senden und empfangen<br />
Aufwand gering, nur zusätzliche bits aber keine neue Nachricht<br />
Sender Empfänger<br />
Data<br />
Data+ACK<br />
Data+ACK<br />
Slide 15
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 16
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Problemfälle<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Zeitüberwachung<br />
Wie kann Empfänger wissen, wann ein Paket wahrscheinlich verloren ist?<br />
Lösung<br />
University of <strong>Ulm</strong><br />
Je länger das Paket nicht ankommt, desto wahrscheinlicher ist ein Verlust<br />
Empfänger:<br />
startet Timer bei korrektem Paketempfang<br />
läuft Timer ab, vermutet Empfänger dass nächstes erwartetes Paket verloren wurde <br />
Aufforderung zur erneuten Übertragung an Sender schicken?<br />
Sender:<br />
Startet Timer pro Paket bei Übertragung<br />
Wenn keine Quittung ankommt bei Ablauf des Timers Neuübertragung?<br />
Probleme<br />
Dauer des Zeitintervalls<br />
Zu langer Timer geringe Performance<br />
Zu kurzer Timer Paket kommt vielleicht trotzdem später an<br />
Slide 17
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Probleme<br />
Zeitintervall Basis:<br />
Priori Time<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Zeitüberwachung<br />
Genaue Kenntnis des Systems und Paketzustellzeiten erfoderlich<br />
nur für spezielle Systeme<br />
RTT (Round Trip Time): Zeit zwischen Versenden und Erhalt einer Bestätigung<br />
Messung in der Vergangenheit<br />
Stimmt nicht genau mit Realität überein (Verarbeitungszeit, Pufferzeit,…)<br />
Verwende nicht letzte Messung sondern Mittelwertbildung<br />
Timeout als Funktion der gemessenen RTT<br />
Timeout bei TCP<br />
University of <strong>Ulm</strong><br />
Messe RTT periodisch: RTT(k) in Periode k<br />
Schätze und gewichte RTT Glättungsfilter S(k) = a * S(k-1) + (1-a) RTT(k)<br />
Timeout = b * S(k)<br />
a=0.9, b=2 empfohlen bei TCP<br />
a=1 Timeout hängt nur von initialem S(k) ab<br />
a=0 Timeout hängt nur von letztem RTT ab<br />
Slide 18
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
RTT(s)<br />
1,2<br />
1<br />
0,8<br />
0,6<br />
0,4<br />
0,2<br />
0<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Schätzung der RTT<br />
University of <strong>Ulm</strong><br />
Gemessene RTT a=0.1 Initial =1<br />
a=0.9 Initial =1 a=0.1 Initial=0.1<br />
a=0.9 Initial=0.1<br />
1 2 3 4 5 6 7 8 9<br />
Messzeit<br />
Slide 19
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Timeout bei TCP (van Jacobson)<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Paketfehler - Zeitüberwachung<br />
Problem: original TCP Timeout kritisch bei stark variablem RTT<br />
Führt zu erhöhten Neuübertragungen, wenn Netz schon überlastet<br />
Beziehe Varianz der RTT in Berechnung mit ein<br />
Fehlerterm E(k) und dessen Schätzung M(k):<br />
E(k) = abs(S(k)-RTT(k))<br />
M(k) = (1-a) * E(k) + a * M(k-1)<br />
Timeout = S(k) + b * m(k)<br />
Verschiedene Werte von b ergeben also verschiedene Konfidenzintervalle.<br />
Probleme mit Timeout<br />
University of <strong>Ulm</strong><br />
Bleibt schwierig, initiale Werte für b, a und S(k) zu wählen<br />
Schwierig RTT zu messen bei Burstfehlern<br />
Hohe Variabilität der RTT bei Paketverlusten<br />
Wenn ACK mehrere Pakete bestätigt: Auf welches Paket soll RTT bezogen werden?<br />
Bei Timeout denkt Sender an Paketverlust. Der Grund kann aber auch ein verzögertes<br />
oder verlorenes Acknowledgement sein Timeout allein genügt nicht zur Erkennung<br />
des Systemzustandes<br />
Slide 20
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
University of <strong>Ulm</strong><br />
Fehlertypen<br />
• Bei Timeout: Paket verloren?<br />
Grundmechanismen<br />
Neuübertragung<br />
Sequenznummern • Strategien ohne Timeout:<br />
Zeitüberwachung<br />
•Go-Back-N,<br />
Quittungen<br />
• Selective Retransmission<br />
Neuübertragung<br />
Kommt später!<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
Slide 21
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 22
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Automatic Repeat Request - ARQ<br />
ARQ ist eine Protokollfamilie<br />
Grundprinzip<br />
University of <strong>Ulm</strong><br />
Sender erhält ACK für erfolgreich empfangene Pakete vom Empfänger<br />
Sender führt Sendewiederholungen aus<br />
Fragestellungen:<br />
Wann schickt der Empfänger ACKs?<br />
Wann führt der Sender Sendewiederholungen durch?<br />
Viele verschiedene Varianten denkbar<br />
Stop And Wait<br />
Go-Back-N<br />
Selective Repeat, Selctive Reject<br />
…<br />
Slide 23
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 24
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Protokolleffizienz von ARQ Protokollen<br />
Effizienz eines Protokolls<br />
Bruchteil der Zeit in dem neue Pakete<br />
gesendet werden unter der Annahme,<br />
daß Sender immer genügend zu<br />
versenden hat<br />
Rest für Signallaufzeit,<br />
Bestätigungsnachrichten und<br />
Verarbeitung<br />
TRANS_P<br />
Übertragungszeit eines Paketes =Anzahl<br />
bits pro Paket / Übertragungsrate in bits<br />
pro Sekunde<br />
PROP<br />
Signallaufzeit eines Paketes oder eines<br />
ACKs<br />
TRANS_A<br />
Übertragungszeit eines ACKs<br />
PROC<br />
Verarbeitungszeit einer Nachricht/ACK<br />
Typischerweise < 1 ms,<br />
vernachlässigbar<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
TRANS_P<br />
S=minimale<br />
Zeit zwischen<br />
Zwei Paketübertragungen<br />
PROC<br />
Sender<br />
Paket<br />
ACK<br />
University of <strong>Ulm</strong><br />
Empfänger<br />
PROP<br />
PROC<br />
TRANS_A<br />
PROP<br />
Slide 25
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
TRANS_P_1<br />
S=minimale<br />
Zeit zwischen<br />
Zwei Paketübertragungen<br />
PROP_1<br />
PROC<br />
Sender<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Protokolleffizienz bei Zwischenknoten<br />
Paket<br />
TRANS_P_2<br />
PROP_2<br />
PWA<br />
ACK<br />
Netzwerkknoten<br />
PROP_1<br />
PWP<br />
Paket<br />
ACK<br />
TRANS_A_1<br />
Emfänger<br />
PROP_2<br />
PROC<br />
TRANS_A_2<br />
University of <strong>Ulm</strong><br />
Netzwerkknoten<br />
Zusätzliche Verzögerung<br />
Prüfsummenauswertung<br />
Puffern und Weiterleiten (PWP)<br />
Store And Forward Delay =<br />
(PWP+TRANS_P)<br />
Kann minimiert werden bei<br />
“cut-through routing” <br />
Ethernet Switch<br />
Unterschiedliche Datenraten<br />
der Links<br />
Unterschiedliche Medien und<br />
Entfernungen<br />
Store And Forward Delay für<br />
ACK (PWA+TRANS_A) kann<br />
geringer sein als für Paket<br />
Im Gegensatz zu PROC kann<br />
PWP, PWA nicht ignoriert<br />
werden!!!<br />
Typpischerweise viele<br />
Netzwerkknoten zwischen<br />
Sender und Empfänger<br />
Slide 26
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 27
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Eigenschaften<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Primitives RDT Protokoll v 2.0<br />
Verwendet Fehlererkennung Nur Bitfehlererkennung, keine<br />
Paketverlusterkennung<br />
Feedback vom Empfänger ACK bei korrektem Empfang, sonst NACK<br />
Sender überträgt defekte Pakete neu<br />
Rdt_Send(data)<br />
Compute_checksum<br />
make_packet(sndpacket, data, checksum)<br />
Udt_Send(sndpacket)<br />
Warte bis<br />
Aufruf von<br />
oben<br />
udt_rcv(rcvpkt)&&<br />
isACK(rcvpkt)<br />
Warte auf<br />
ACK/NACK<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Sender<br />
udt_rcv(rcvpkt)&&<br />
isNACK(rcvpkt)<br />
Udt_Send(sndpacket)<br />
Udt_Rcv(packet)&&<br />
Corrupt(packet)<br />
Udt_send(NACK)<br />
Warte bis<br />
Aufruf von<br />
unten<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Empfänger<br />
University of <strong>Ulm</strong><br />
Udt_Rcv(packet)&&<br />
!Corrupt(packet)<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
Udt_send(ACK)<br />
Slide 28
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Warte bis<br />
Aufruf von<br />
oben<br />
Rdt_Send(data)<br />
Compute_checksum<br />
make_packet(sndpacket, data, checksum)<br />
Udt_Send(sndpacket)<br />
udt_rcv(rcvpkt)&&<br />
isACK(rcvpkt)<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
RDT v. 2.0 in Aktion<br />
udt_rcv(rcvpkt)&&<br />
Warte auf isNACK(rcvpkt)<br />
ACK/NACK<br />
Udt_Send(sndpacket)<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Sender<br />
Fehlerfreier Fall<br />
Udt_Rcv(packet)&&<br />
Corrupt(packet)<br />
Udt_send(NACK)<br />
Warte bis<br />
Aufruf von<br />
unten<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Empfänger<br />
University of <strong>Ulm</strong><br />
Udt_Rcv(packet)&&<br />
!Corrupt(packet)<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
Udt_send(ACK)<br />
Slide 29
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Fehlerhafter Fall<br />
Compute_checksum<br />
make_packet(sndpacket, data, checksum)<br />
Udt_Send(sndpacket)<br />
Warte bis<br />
Aufruf von<br />
oben<br />
Warte auf<br />
ACK/NACK<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
RDT v. 2.0 in Aktion<br />
Was passiert wenn ACK/NACK verloren/fehlerhaft?<br />
Sender weiss nicht was beim Empfänger geschieht!<br />
Bei simpler Neuübertragung erhält Empfänger<br />
Duplikate<br />
Rdt_Send(data)<br />
udt_rcv(rcvpkt)&&<br />
isACK(rcvpkt)<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Sender<br />
udt_rcv(rcvpkt)&&<br />
isNACK(rcvpkt)<br />
Udt_Send(sndpacket)<br />
Udt_Rcv(packet)&&<br />
Corrupt(packet)<br />
Udt_send(NACK)<br />
Warte bis<br />
Aufruf von<br />
unten<br />
Rdt_v_2.0 Rdt_v_2.0<br />
Empfänger<br />
University of <strong>Ulm</strong><br />
Stop & Wait Prinzip<br />
Sender schickt 1<br />
Paket und wartet auf<br />
Antwort von<br />
Empfänger<br />
Udt_Rcv(packet)&&<br />
!Corrupt(packet)<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
Udt_send(ACK)<br />
Slide 30
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Sender<br />
Reagiert auf defekte<br />
ACK/NACK<br />
Verdopplung der Zustände<br />
zur Speicherung der Seq#<br />
udt_rcv(rcvpkt)&&<br />
(!corrupt(rcvpkt)&&<br />
isACK(rcvpkt))<br />
udt_rcv(rcvpkt)&&<br />
(corrupt(rcvpkt)||<br />
isNACK(rcvpkt))<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
RDT v. 2.1 in Aktion<br />
Rdt_Send(data)<br />
Compute_checksum<br />
make_packet(sndpacket, 0, data, checksum)<br />
Udt_Send(sndpacket)<br />
Warte bis<br />
Aufruf0 von<br />
oben<br />
Warte auf<br />
ACK/NACK<br />
Udt_Send(sndpacket) Rdt_Send(data)<br />
Warte auf<br />
ACK/NACK<br />
Warte bis<br />
Aufruf0 von<br />
oben<br />
Compute_checksum<br />
make_packet(sndpacket, 1, data, checksum)<br />
Udt_Send(sndpacket)<br />
udt_rcv(rcvpkt)&&<br />
(corrupt(rcvpkt)||<br />
isNACK(rcvpkt))<br />
Udt_Send(sndpacket)<br />
University of <strong>Ulm</strong><br />
udt_rcv(rcvpkt)&&<br />
(!corrupt(rcvpkt)&&<br />
isACK(rcvpkt))<br />
Slide 31
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Empfänger<br />
Reagiert auf defekte ACK/NACK<br />
Prüft auf Duplikate<br />
Weiss nicht, ob letztes ACK/NACK<br />
erfolgreich bei Sender ankam<br />
Udt_Rcv(packet)&&<br />
Corrupt(packet)<br />
ComputeChecksum<br />
makePacket(sndPacket,NACK,chksum)<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
RDT v. 2.1 in Aktion<br />
Warte bis<br />
Aufruf0 von<br />
unten<br />
Udt_Rcv(packet)&&<br />
(!Corrupt(packet)) && hasSeq(packet,1)<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
ComputeChecksum<br />
makePacket(sndPacket,ACK,chksum)<br />
Udt_send(sndPacket)<br />
Udt_send(sndPacket) Zustand sagt, ob<br />
0 oder 1 erwartet<br />
Udt_Rcv(packet)&&<br />
(!Corrupt(packet)) && hasSeq(packet,1)<br />
ComputeChecksum<br />
makePacket(sndPacket,NACK,chksum)<br />
Udt_send(sndPacket)<br />
Warte bis<br />
Aufruf1 von<br />
unten<br />
University of <strong>Ulm</strong><br />
Udt_Rcv(packet)&&<br />
Corrupt(packet)<br />
ComputeChecksum<br />
makePacket(sndPacket,NACK,chksum)<br />
Udt_send(sndPacket)<br />
Udt_Rcv(packet)&&<br />
(!Corrupt(packet)) && hasSeq(packet,0)<br />
Udt_Rcv(packet)&&<br />
(!Corrupt(packet)) && hasSeq(packet,0) ComputeChecksum<br />
Extract(packet,data)<br />
Deliver_Data(data)<br />
ComputeChecksum<br />
makePacket(sndPacket,ACK,chksum)<br />
Udt_send(sndPacket)<br />
makePacket(sndPacket,NACK,chksum)<br />
Udt_send(sndPacket)<br />
Slide 32
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Kopie von P0<br />
Übertragung von nicht nummerierten ACKs: ACKs<br />
T4<br />
T5<br />
T7<br />
Sender Empfänger<br />
T1<br />
P1<br />
ACK<br />
P0<br />
ACK<br />
Verlust von ACK<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
P0<br />
T2<br />
T3<br />
T6<br />
University of <strong>Ulm</strong><br />
Probleme (wenn wenn nur ACKs<br />
verwendet werden) werden<br />
Empfänger weiss nicht bei T6,<br />
ob empfangenes Paket P0 oder<br />
P1 ist, wenn KEINE<br />
Sequenznummern verwendet<br />
werden.<br />
Sender weiss nicht, ob ACK bei<br />
T7 sich auf P0 oder P1 bezieht,<br />
wenn ACKs nicht<br />
durchnummeriert werden<br />
Werden nur ACKs verwendet<br />
müssen Pakete und ACKs<br />
durchnummeriert werden, um<br />
zwischen Kopien und neuen<br />
Paketen zu unterscheiden!<br />
Slide 33
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
RDT v. 2.2 keine NACK, nur ACKs<br />
Sender FSM<br />
Funktionalität wie rdt v.2.1<br />
Warte bis<br />
Aufruf0 von<br />
oben<br />
Verwendet nur ACKs<br />
Empfänger schickt ACK für letztes<br />
korrekt empfangenes Paket<br />
Dazu verwendet er explizit die<br />
Sequenznummer<br />
Dupliziertes ACK beim Empfänger<br />
Wie bei Erhalt eines NACK<br />
Neuübertragung des aktuellen Paketes<br />
Rdt_Send(data)<br />
Compute_checksum<br />
make_packet(sndpacket, 0, data, checksum)<br />
Udt_Send(sndpacket)<br />
Warte auf<br />
ACK0<br />
Warte bis<br />
Aufruf1 von<br />
oben<br />
udt_rcv(rcvpkt)&&<br />
(corrupt(rcvpkt)||<br />
isACK(rcvpkt,1))<br />
Udt_Send(sndpacket)<br />
University of <strong>Ulm</strong><br />
udt_rcv(rcvpkt)&&<br />
(!corrupt(rcvpkt)&&<br />
isACK(rcvpkt,0))<br />
Slide 34
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Rdt 3.0<br />
Kanal kann Pakete verlieren<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Kanal mit Paketverlusten<br />
University of <strong>Ulm</strong><br />
Prüfsumme, Sequenznummer, ACKs, Neuübertragungen sind ok<br />
aber NICHT GENUG!<br />
Bei Paketverlust:<br />
Sender wartet eine bestimmte Zeit Timer Dann Neuübertragung<br />
Probleme?<br />
Ansatz:<br />
Stop And Wait ARQ nächste Folien<br />
Slide 35
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Prinzip<br />
Einfaches ARQ<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Stop And Wait<br />
University of <strong>Ulm</strong><br />
Sender wartet auf ACK bevor er nächste Dateneinheit sendet<br />
Sender verwendet zusätzlich einen Timer. Läuft dieser ab und wurde kein<br />
ACK empfangen erfolgt Sendewiederholung<br />
Probleme:<br />
Bei verlorenem ACK, wenn Timer zu früh abläuft oder Original Paket zu lange<br />
verzögert Duplikate durch Neuübertragung<br />
verwende Sequenznummern zur Erkennung von Duplikaten<br />
Wie viele verschiedene Sequenznummern braucht man?<br />
Wie viele Bits benötigt man für die Sequenznummer?<br />
Empfänger verwirft Duplikate<br />
Empfänger kann NICHT wissen, ob ACK bei Sender ankam!<br />
Nachteil:<br />
Sender hat immer nur ein Paket als nicht bestätigt ausstehen<br />
geringe Performance<br />
Slide 36
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Sender Empfänger<br />
Data0<br />
ACK0<br />
Grundprinzip<br />
Sender Empfänger<br />
Data0<br />
ACK0 ACK<br />
Data0<br />
ACK0<br />
Verlust von ACK<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Stop And Wait Szenarien<br />
Duplikat<br />
Raum<br />
Zeit<br />
Duplikat<br />
University of <strong>Ulm</strong><br />
Sender Empfänger<br />
Data0<br />
Data0<br />
ACK0<br />
Verlust von Data<br />
Sender Empfänger<br />
Data0<br />
Data0<br />
ACK0<br />
ACK0<br />
Timeout zu klein<br />
Duplikat<br />
Slide 37
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Stop And Wait: Sequenznummern<br />
Ein Problem des Stop And Wait ARQ<br />
Empfänger erhält Duplikate bei verlorenem ACK<br />
Lösung:<br />
verwende zusätzlich Sequenznummern von 1 Bit (warum?)<br />
Sender Empfänger<br />
Data (0)<br />
ACK (0)<br />
Data (1)<br />
ACK (1)<br />
Data (0)<br />
ACK (0)<br />
University of <strong>Ulm</strong><br />
Wiederholung bei zerstörter<br />
Nachricht<br />
Ist Sequenznummer in der<br />
Bestätigung erforderlich?<br />
Slide 38
Effizienz:<br />
Durchschnittlich<br />
er Anteil der<br />
Zeit, den ein<br />
Protokoll zur<br />
Übertragung<br />
neuer Pakete<br />
benötigt. Rest<br />
der Zeit wird<br />
verwendet für<br />
Retransmission<br />
s, warten auf<br />
ACK oder<br />
NACK.<br />
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Auslastung der Leitung<br />
Es gilt (keine Fehler):<br />
TRANS_P<br />
U =<br />
TRANS_P + 2 * PROP<br />
Beispiel<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Protokolleffizienz von Stop And Wait<br />
Paket der Länge 1500 Byte<br />
Datenrate = 10 Mbps (155 Mbps)<br />
Ausbreitungsgeschwindigkeit = 2 * 10 8 m/s<br />
Leitungslänge = 10 km (36000 km)<br />
U = 0.923 (0.00021)<br />
Was passiert im Fehlerfall?<br />
University of <strong>Ulm</strong><br />
Übertragungszeit S einer Dateneinheit = TRANS_P + Timeout + TRANS_P + 2 * PROP<br />
Annahme: Timeout = 2 * PROP S = 2 (TRANS_P + 2 * PROP) (erfordert full-duplex Leitung))<br />
Annahme: Dateneinheit im Mittel N x mal wiederholt<br />
Annahme: ACKs unverfälscht, Wahrscheinlickeit für Übertragungsfehler = P<br />
1 - p<br />
U = 1 + 2 a<br />
mit a = PROP / TRANS_P<br />
U = 1/(1+2a)<br />
Sei TRANS_P=1 PROP=a. Sender<br />
sendet bei t=t0. Erstes bit erscheint bei<br />
t0+a beim Emfänger, Sender überträgt<br />
noch immer (a
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 40
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Erhöhung des Durchsatzes: Pipelines<br />
Stop-And-Wait<br />
ACK<br />
Daten<br />
Mehrere Pakete in einer Pipeline<br />
Paket-Pipeline<br />
Daten<br />
ACK<br />
University of <strong>Ulm</strong><br />
Sender verschickt n>1 Pakete, ohne auf ACK zu warten<br />
Sequenznummer muß mehr als 1-bit haben! Können später wieder verwendet werden.<br />
Puffer bei Sender und/oder Empfänger notwendig<br />
Zwei generische Arten von Protokollen, die Pipeline verwenden<br />
Go-Back-N<br />
Selective Repeat / Reject<br />
Slide 41
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Sender Empfänger<br />
P0<br />
P1<br />
P2<br />
P3<br />
P4<br />
P5<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Prinzip der Pipelines<br />
ACK0<br />
ACK1<br />
Prinzip der Kontinuierlichen ARQ<br />
University of <strong>Ulm</strong><br />
Sende so viele Pakete wie möglich<br />
Passe Fehlerfenster an<br />
Pakete und ACK haben Sequenznummern<br />
Fehlerbehandlung:<br />
Go-Back-N<br />
Empfänger akzeptiert nur fehlerfreie und<br />
in Richtiger Reihenfolge empfangene<br />
Pakete Sender überträgt fehlerhaftes<br />
Paket und alle danach gesendeten neu<br />
Selective Repeat<br />
Empfänger akzeptiert nur fehlerfreie<br />
empfangene Pakete Sender überträgt<br />
fehlerhaftes Paket neu, Fehlererkennung<br />
durch Timeout<br />
Selective Reject<br />
Sende nur diejenigen Pakete neu, bei<br />
denen ein ACK fehlt (Bitmap im Header)<br />
oder für die ein NACK empfangen<br />
Slide 42
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Nochmals Paketfehler - Sequenznummern<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
University of <strong>Ulm</strong><br />
Sequenznummernraum<br />
Teilmenge der natürlichen Zahlen, die mögliche Sequenznummern enthält<br />
Wenn Sequenznummer n Bit hat Sequenznummernraum enthält 2 n<br />
eindeutige Sequenznummern<br />
Ziel: Möglichst viele Pakete auf der Leitung zur Maximierung des<br />
Durchsatzes! Minimiere n, um Overhead klein zu halten.<br />
Beispiel:<br />
R: max. Übertragungsrate des Senders , z.B. < 100 Pakete/s<br />
A: max. Zeit bevor Empfänger eine Quittung sendet nach Datenerhalt, z.B. 100 s<br />
T: max. Zeit innerhalb der Sendewiederholung durchgeführt wird; z.B. 200 s<br />
MPL: Maximum Packet Lifetime im Netz, z.B. 300 s<br />
Sender erhält ACK nach max. 900 s, nachdem er ein Paket gesendet hat<br />
Während dieser Zeit hat er 900*100= 90000 Pakete gesendet<br />
Sequenznummer n Bit > log(90000), also mindestens 17 bit<br />
Es gilt: 2 n >= (2 MPL + T + A) * R<br />
Wie beschränkt man MPL? In Praxis indirekt mittels TTL<br />
Slide 43
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Nochmals Paketfehler - Wiederholungen<br />
Bei Verlust von Paketen<br />
Sender erkennt dies aufgrund Timeout oder NACK<br />
Welche Pakete sollen neu übertragen werden?<br />
Konzept des Fehlerkontrollfensters Sliding Window<br />
Zusammenhängender Teil des Sequenznummernraumes<br />
Menge von versendeten Paketen, für die kein ACK erfolgte<br />
Fensteröffnung schrumpft mit jedem versendeten Paket.<br />
Fensteröffnung wächst mit jedem erhaltenen ACK.<br />
Bsp:<br />
1 2 3 4 5 6 7 8 9 (original)<br />
1 2 3 4 5 6 7 8 9 (ACK für 3 erhalten)<br />
1 2 3 4 5 6 7 8 9 (schicke 7)<br />
Man möchte Fenstergröße w < max_window beschränken<br />
Sender ist irgendwann blockiert, bis ACK ankommt<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
University of <strong>Ulm</strong><br />
Slide 44
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Prinzip: Prinzip:<br />
Neuübertragung des<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Go-Back Go Back-N N ARQ<br />
University of <strong>Ulm</strong><br />
des kompletten Fehlerfensters<br />
Nämlich alle schon versendeten Pakete nach Erhalt eines<br />
NACK (Fenstergröße) oder bei Timeout<br />
Timer für jedes ausstehende Paket<br />
ACK rückt Fehlerkontrollfenster weiter<br />
Vorteile<br />
Gut bei Burstartigem Paketverlust<br />
Einfacher Empfänger, akzeptiert nur geordenete Pakete, kein Puffer<br />
notwendig<br />
Bei jedem Paketempfang, schickt ACK für letztes in richtiger Reihenfolge<br />
empfangenes Paket Duplizierte ACKs möglich<br />
Nachteile<br />
Nachrichten und/oder ACKs können verloren gehen, unerkennbar sein<br />
oder zu spät kommen<br />
Verschwendung von Bandbreite<br />
Zusätzliche Übertragungskapazität im Engpass notwendig Kollaps<br />
Slide 45
Distributed Systems Department<br />
Warte auf<br />
(kumulatives)<br />
oQS<br />
ACK<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
2 Varianten<br />
University of <strong>Ulm</strong><br />
Ohne sliding window Mit sliding window<br />
Sender Empfänger<br />
P0<br />
P1<br />
P2<br />
P3<br />
P0<br />
ACK<br />
ACK schaltet<br />
Fehlerfenster<br />
weiter<br />
Sender Empfänger<br />
P0<br />
P1<br />
P2<br />
P3<br />
P4<br />
P5<br />
ACK0<br />
ACK1<br />
ACK2<br />
ACK3<br />
Slide 46
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Go-Back Go Back-N N ARQ Verfahren<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Go-Back Go Back-N N ARQ<br />
University of <strong>Ulm</strong><br />
Motivation:<br />
Performance von Stop And Wait schlecht! Besonders bei Satellitenverbindungen<br />
Durchsatzerhöhung erforderlich Warte nicht mehr auf Quittung für gesendetes<br />
Paket bevor nächstes gesendet wird<br />
Funktion<br />
Sender: Sende Menge von Dateneinheiten > 1 bevor ACK kommen muß<br />
Sender: Begrenze Dateneinheiten, die unbestätigt sind durch ein “Sliding Window” der<br />
Größe w: Wiederverwendung der Sequenznummer<br />
Varianten:<br />
a. Empfänger: quittiere korrekt erhaltene Dateneinheiten durch Versenden eines ACK<br />
(Stop&Wait)<br />
Kumulative positive Quittungen<br />
Bei Timeout sendet Sender alle noch nicht quittierten aber gesendeten Daten<br />
Go-Back-N, N = Nummer des Paketes auf welches sich kumulatives ACK bezieht<br />
b. Empfänger: Versende NACKs für nicht korrekt empfangene Dateneinheiten<br />
Bei Empfang eines NACKs sendet Sender alle gesendeten Dateneinheiten ab dieser<br />
Sequenznummer NACK soll Neuübertragung möglich machen, bevor Timeout abläuft<br />
Go-Back-N, N = Sequenznumer der negativen Quittung<br />
Probleme: Wer puffert und wieviele Dateneinheiten werden gepuffert?<br />
Slide 47
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Beispiel: Beispiel:<br />
Go-Back Go Back-N, N, mit Sliding Window w=4<br />
Sequenznummernraum<br />
Wenn Fenstergröße w:<br />
Sender hat Puffer<br />
von maximal w<br />
Paketen<br />
Paket Nummer:<br />
modulo (w+1): 0, 1,<br />
2, …, w, 0,1,2, …,w, ..<br />
Warum??? Übung!<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
S=0<br />
S=1<br />
S=2<br />
S=3<br />
S=4<br />
S=0<br />
University of <strong>Ulm</strong><br />
Slide 48
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Protokolleffizienz von Go-Back Go Back-N<br />
Beobachtung<br />
Maximale Effizienz nur bei optimalem Kanal.<br />
Bei Paketverlusten:<br />
p: Wahrscheinlichkeit eines Paketverlustes<br />
w: Fehlerkontrollfenstergröße<br />
Annahme: Timeout = w*TRANSP<br />
Es gilt (ohne Berücksichtigung von Sliding Window):<br />
1 1-p<br />
U = =<br />
p 1-p + p*w<br />
1 + w*<br />
(1-p)<br />
Beispiel:<br />
University of <strong>Ulm</strong><br />
p= 0.001, w = 50 U(Go-Back-N, p, w)=0.952<br />
p= 0.01, w = 50 U(Go-Back-N, p, w)=0.664<br />
Bei konstanter End-zu-End Verzögerung PROP erhöht sich w mit der Datenrate des<br />
Links, da mehr Pakete übertragen werden und somit potentiell nicht bestätigt werden.<br />
U nimmt ab mit Link-Geschwindigkeit<br />
Bei vernünftigem w nimmt U stark ab bei p > 0.0001<br />
Slide 49
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
University of <strong>Ulm</strong><br />
Protokolleffizienz: Protokolleffizienz:<br />
Go-Back Go Back-N-ARQ ARQ mit Sliding Window<br />
Betrachte jetzt Sliding Window und Go-Back Go Back-N-ARQ ARQ<br />
Fenstergröße w, übertrage w Pakete und warte auf ACK. Erstes ACK kommt bei<br />
Sender an nach 2PROP+TRANSP normiert zu 1+2a, sagt wie viele Pakete auf<br />
der Leitung<br />
Gilt w >= 2a+1 Sender kann immer senden<br />
Gilt w < 2a + 1 Sender muss warten, bis Fehlerkontrollfenster wieder Senden<br />
erlaubt<br />
Im verlustfreien Fall (nur Sliding Window):<br />
U(Sliding Window, 0, w)= 1 , wenn w >= 2a+1<br />
w<br />
U(Sliding Window, 0, w)= , wenn w < 2a+1<br />
2 a + 1<br />
Im Fehlerfall (also mit ARQ):<br />
Fehler: Paket verloren, ACK verloren, Neuübertragenes Paket verloren,…<br />
Fehler führt zu mehreren Übertragungswiederholungen<br />
f(i) = Anzahl übertragener Dateneinheiten,<br />
falls eine Dateneinheit i-mal übertragen<br />
werden muss<br />
U(Go - Back - N - ARQ, p,<br />
N<br />
x<br />
=<br />
∑<br />
i≥1<br />
⎧ 1−<br />
p<br />
⎪<br />
,<br />
1+<br />
2ap<br />
w) = ⎨<br />
w(<br />
1−<br />
p)<br />
⎪<br />
⎪⎩<br />
( 2a<br />
+ 1)(<br />
1−<br />
p + wp)<br />
W Zeiteinheiten<br />
aus einer Periode<br />
von (2a+1)<br />
Zeiteinheiten<br />
f ( i)<br />
p<br />
i−1<br />
( 1−<br />
p)<br />
W ≥ 2a<br />
+ 1<br />
W < 2a<br />
+ 1<br />
Slide 50
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 51
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selektive Repeat ARQ - 1<br />
University of <strong>Ulm</strong><br />
Begrenze die Anzahl der Neuübertragungen verlorener Pakete<br />
Motivation:<br />
Go-Back-N besserer Durchsatz als Stop And Wait, aber unnötiges<br />
Verkehrsaufkommen<br />
Guter Durchsatz und Reduktion des Datenaufkommens notwendig<br />
Erlaube mehr als ein Paket für das kein ACK erhalten wurde<br />
Finde heraus, welche Pakete verloren wurden<br />
Prinzip<br />
Empfänger schickt für jedes fehlerfrei empfangene Paket ein ACK<br />
Puffer notwendig zum Speichern von erlaubten Out-of-order Paketen<br />
Sender überträgt nur diejenigen Pakete neu, für die kein ACK erhalten wurde<br />
Puffer notwendig zum Speichern von Paketen ohne erhaltenes ACK<br />
Sender hat Timer für jedes nicht-bestätigte Paket<br />
Fehlerkontrollfenser der Größe w limitiert Anzahl der Sequenznummern<br />
nicht-bestätigter Pakete<br />
intelligentes Neuübertragen und Weiterschieben des Fehlerkontrollfensters<br />
Benötigt Full-Duplex Verbindung<br />
Slide 52
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Repeat ARQ - 2<br />
Selective Repeat ARQ Verfahren<br />
Funktion Sender<br />
University of <strong>Ulm</strong><br />
Sender: Sende Menge von Dateneinheiten > 1 bevor ACK kommen muß<br />
Sender: Begrenze Dateneinheiten, die unbestätigt sind durch ein “Sliding<br />
Window”<br />
Bis hierher wie Go-Back-N<br />
Bei Timeout (Timer T n pro Paket): Neuübertragung von Paket n<br />
Bei ACK(n) innerhalb Fehlerkontrollfenster: markiere Paket als empfangen.<br />
Wenn n kleinste nichtbestätigte Sequenznummer Schiebe Fenster zu<br />
nächster unbestätigter Sequenznummer<br />
Empfänger:<br />
Sendet ACK für jedes innerhalb des Fehlerkontrollfensters empfangenen<br />
Paketes<br />
Pakete, die nicht in korrekter Reihenfolge sind aber innerhalb des Fensters<br />
werden gepuffert<br />
Fehlerkontrollfenster wird bei Paketempfang immer auf das nächste korrekt<br />
zu erwartende Paket geschoben.<br />
Slide 53
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Details<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Repeat ARQ - 3<br />
University of <strong>Ulm</strong><br />
Pakete werden fortlaufend nummeriert<br />
Schema: 0, 1, 2, …, 2W-1, 0, 1, 2,,…<br />
Modulo 2W. Warum der Unterschied zu Go Back N? Übung!<br />
(n+W)-tes Paket kann nicht übertragen werden, solange bis ACK für Paket n<br />
kommt.<br />
Bei Timeout, schicke Paket neu, wenn kein ACK erhalten wurde.<br />
ACK hat gleiche Sequenznummer wie Paket<br />
Effizienz:<br />
Wenn keine Fehler auftreten: Sliding Window: U=min{ w*(TRANSP/S), 1},<br />
mit S= TRANSP + 2 PROP<br />
Bei Fehlern (Formel informell):<br />
Wenn w>= 2a+1 sehr gross, U = 1-p //Leitung immer voll<br />
Wenn wenig Fehler auftreten und timeout= W*TRANSP<br />
U(p) = (2+p(w-1)) / (2 + p(3w-1))<br />
Slide 54
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Repeat Sender/Empfänger<br />
University of <strong>Ulm</strong><br />
Slide 55
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Repeat in Aktion<br />
University of <strong>Ulm</strong><br />
Slide 56
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Beispiel:<br />
Sequenznummern: 0, 1, 2, 3<br />
window size w=3<br />
Empfänger kann keinen<br />
Unterschied feststellen<br />
zwischen beiden Szenarien!<br />
Empfängt fälschlicherweise<br />
Duplikat von Paket 0 in (a)<br />
Wichtig: Beachte die Beziehung<br />
zwischen Sequenznummern<br />
und Fenstergröße!<br />
Übung: Welche Beziehung<br />
besteht?<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Repeat in Aktion<br />
University of <strong>Ulm</strong><br />
Slide 57
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Gliederung<br />
Fehlertypen<br />
Grundmechanismen<br />
Sequenznummern<br />
Zeitüberwachung<br />
Quittungen<br />
Neuübertragung<br />
Protokolle zur <strong>Fehlerkontrolle</strong><br />
Protokolleffizienz<br />
Stop And Wait<br />
Go Back N<br />
Selective Repeat<br />
Selective Reject<br />
University of <strong>Ulm</strong><br />
Slide 58
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Reject ARQ - 1<br />
Neuübertragung nur von verlorenen Paketen<br />
University of <strong>Ulm</strong><br />
Motivation:<br />
Go-Back-N besserer Durchsatz als Stop And Wait, aber unnötiges<br />
Verkehrsaufkommen<br />
Guter Durchsatz und Reduktion des Datenaufkommens notwendig<br />
Sender: finde heraus, welche Pakete verloren wurden<br />
Bei Timeout muss Sender nur Pakete übertragen, die nicht markiert sind<br />
Variante 1:<br />
Jedes ACK enthält eine Bitmap des Fehlerkontrollfensters, mit markierten korrekt<br />
empfangenen Paketen<br />
Beispiel:<br />
w = 6, ACK für Paket 8 enthält bitmap = 001100<br />
Sender habe Paket 5 bis Paket 10 gesendet<br />
Timeout bei Sender: Sender überträgt 5, 6, 9, 10<br />
Variante 2:<br />
Empfänger schickt NACKs bei Fehlererkennung. NACK bezieht sich auf ein<br />
einzelnes Paket<br />
Nur nicht korrekt empfangene Dateneinheiten werden neu übertragen<br />
Slide 59
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
Effizienz von Selective Reject<br />
Fehlerfrei: Wie bei Go-Back-N:<br />
gilt w < 2a+1: U = 1<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Selective Reject ARQ - 2<br />
University of <strong>Ulm</strong><br />
Ansonsten schöpft Sender sein Fenster bei t0 + w aus und muss warten, bis<br />
t0+2a+1. U = w/(2a + 1)<br />
Fehlerbehaftet: Annahmen wie bei Stop And Wait:<br />
N x = 1/ (1-p)<br />
U(SelectiveReject,<br />
⎧ 1−<br />
p,<br />
⎪<br />
p, w) = ⎨w(<br />
1−<br />
p)<br />
⎪⎩ ( 2a<br />
+ 1)<br />
W<br />
W<br />
≥ 2a<br />
+ 1<br />
< 2a<br />
+ 1<br />
Slide 60
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Nochmals: Nochmals Wiederholungen<br />
University of <strong>Ulm</strong><br />
Schnelle Neuübertragung von verlorenen Paketen durch Sender<br />
Van Jacobson:<br />
Annahme: Jetzt Selective Retransmission, kumulative ACKs, keine Timer notw.<br />
Dann: Jedes ACK trägt Sequenznummer des letzten in der richtigen Reihenfolge<br />
empfangenen Paketes<br />
Wenn Sender wiederholt kumulative ACKs mit gleicher Sequenznummer erhält<br />
Paketverlust (oder falsche Reihenfolge) ist wahrscheinlich<br />
Beispiel:<br />
Empfänger bekommt 1, 2, 3, 4, 5, 7, 8, 9<br />
Empfänger schickt ACK(5) bei Empfang von 7, 8, 9<br />
Wenn Sender ACK(5) aufgrund von Paket 7 erhält Sender schätzt dass 6 verloren,<br />
oder dass 6 nach 7 ankommt<br />
Wenn Sender ACK(5) aufgrund von Paket 8 erhält Sender schätzt dass 6 verloren,<br />
oder dass 6 nach 8 ankommt,….<br />
Bei mehrfachem kumulativem ACK(n) überträgt Sender Paket n+1, ohne auf<br />
Timer zu warten<br />
Problem, falls mehrere Pakete im Fehlerkontrollfenster verloren sind<br />
Wie sieht Beziehung aus zwischen Sequenznummernraum und W??<br />
Slide 61
Distributed Systems Department<br />
oQS<br />
QoS Group<br />
ARQ Methode Sender<br />
Puffer<br />
© University of <strong>Ulm</strong>, Distributed Systems, Dr. A. Kassler<br />
Vergleich von ARQ Protokollen<br />
Empfänger<br />
Puffer<br />
Stop-and-Wait 1 PDU 1 PDU ACK<br />
Go-Back-N W PDUs 1 PDU ACK<br />
Selective<br />
Repeat<br />
Selective<br />
Reject<br />
W PDUs WPDUs ACK<br />
W PDUs W PDUs<br />
University of <strong>Ulm</strong><br />
Kontrollnachrichten<br />
ACK+bitmap oder<br />
ACK+NACK (SREJ)<br />
Slide 62