Kapitel Fehlerkontrolle - Universität Ulm

Kapitel Fehlerkontrolle - Universität Ulm Kapitel Fehlerkontrolle - Universität Ulm

vs.informatik.uni.ulm.de
von vs.informatik.uni.ulm.de Mehr von diesem Publisher
08.10.2013 Aufrufe

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

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!