Kein Folientitel - pi4

Werbung
5 Transmission Control Protocol (TCP)

RFC 793. J. Postel. Transmission Control Protocol.
1981.

Transport Protokoll

verbindungsorientiert
 Verbindungsaufbau
 Datenübertragung
 Verbindungsabbau

zuverlässig
 Verlust von IP Paketen wird erkannt und durch
Übertragungswiederholung korrigiert
Martin Mauve
Universität Mannheim
1
TCP

Flußkontrolle (engl. Flow Control)
 verhindert, daß der Empfänger von einem Sender schneller
Daten erhält, als er engegennehmen kann

Netzwerk-Überlastkontrolle (engl. Congestion Control)
 verhindert, daß es zu einer Überlastsituation im Netz kommt,
die zum vollständigen Zusammenbruch des Netzes führen
könnte (congestion collapse)
 bei Erkennen einer Überlastsituation (Paketverlust!) wird vom
Sender die Datenrate gedrosselt

transparente Übertragung von byte streams
 Anwendungen, die TCP benutzen, sollen nicht merken, daß
die Daten in Form von Paketen übertragen werden
Martin Mauve
Universität Mannheim
2
Zuverlässigkeit in TCP

TCP unterteilt den byte stream in Einheiten, die
jeweils in einem IP Paket übertragen werden, diese
Einheiten heißen Segmente.

Nachdem TCP ein Segment (per IP) losgeschickt
hat, wird ein Timer für dieses Paket gestartet.

Wenn keine Bestätigung über den erfolgreichen
Empfang dieses Paketes innerhalb der TimerLaufzeit eintrifft, wird die Übertragung wiederholt.

Wenn TCP ein Paket vom Kommunikationspartner
erhält, dann wird eine Bestätigung über den
erfolgreichen Empfang an den Sender geschickt.
Martin Mauve
Universität Mannheim
3
Zuverlässigkeit in TCP

TCP berechnet eine Checksumme über die
versandten Fragmente. Falls diese einen Fehler
signalisiert, wird das Fragment nicht bestätigt.

Wenn Segmente außer der Reihe von IP ausgeliefert
werden, wird TCP die richtige Reihenfolge wieder
herstellen.

Wenn IP-Datagramme im Netz verdoppelt werden,
dann sortiert TCP die Duplikate aus.
Martin Mauve
Universität Mannheim
4
Sliding Window

TCP verwendet einen sliding window-Mechanismus
zur gemeinsamen Fluß- und Überlastkontrolle
Sender:
sliding window
sliding window
acknowledgements
Martin Mauve
Universität Mannheim
5
Sliding Window

Eine maximale Größe für das Schiebefenster wird
durch die Flußkontrolle vorgegeben.

Die Größe des Fensters ändert sich durch die
Überlastkontrolle:
 wenn eine Überlastung vorliegt, wird sie reduziert
 wenn keine Überlastung vorliegt, wird sie erhöht
Martin Mauve
Universität Mannheim
6
TCP Header
0
15
7
31
IP Header (20 Byte)
source port number
destination port number
sequence number
acknowledgement number
hdr size
reserved
flags
window size
TCP checksum
urgent pointer
options
data
Martin Mauve
Universität Mannheim
7
TCP Header

Port-Nummern: wie für UDP

sequence number: identifiziert das erste Byte im
Datenteil des Paketes

acknowledgement number: identifiziert das nächste
Byte, das der Sender dieses Paketes vom
Empfänger dieses Paketes erwartet

Da Daten in beide Richtungen zwischen den
Kommunikationspartnern fließen können, gibt es
eine eigene sequence number für jede Richtung

header length: Größe des TCP headers in 32 bit
Worten
Martin Mauve
Universität Mannheim
8
TCP Header

Flags:
 URG: urgent pointer Feld ist gültig
 ACK: acknowledgement Feld ist gültig
 PSH: der Empfänger sollte die Daten der Anwendung so
schnell wie möglich zur Verfügung stellen
 RST: Reset der Verbindung
 SYN: Synchronisation der initialen Sequenznummern bei
Verbindungsaufbau
 FIN: der Sender hat das Senden seiner Daten beendet

Martin Mauve
window size: Anzahl der Bytes, die der Sender
dieses Paketes noch entgegennehmen kann, bis
sein Puffer voll ist (flow control)
Universität Mannheim
9
TCP Header

checksum: wird über das gesamte Fragment
berechnet, incl. TCP Header und pseudo Header wie
in UDP

urgent pointer: der urgent pointer identifiziert das
letzte Byte im Datenteil, welches mit besonderer
Priorität bearbeitet werden sollte

options: werden wir später besprechen

der Datenteil eines TCP-Paketes ist optional, ein
leeres TCP-Paket kann z.B. als reine Bestätigung
empfangener Daten gesendet werden, wenn keine
Daten in die Rückrichtung gesendet werden sollen
Martin Mauve
Universität Mannheim
10
5.1 TCP-Verbindungsaufbau und -abbau
SYN seq 4711 length 0 win 4096 mss 1024
Aufbau
SYN seq 0815 ack 4712 length 0 win 4096 mss 1024
ack 0816
FIN seq 4712 ack 0816 length 0 win 4096
ack 4713
Abbau
FIN seq 0816 ack 4713 length 0 win 4096
ack 0817
Martin Mauve
Universität Mannheim
11
TCP-Verbindungsaufbau

eine TCP-Verbindung ist definiert durch ein 4-Tupel:
{IP-Adresse 1, Port 1, IP-Adresse 2, Port 2}

„three way handshake“
 SYN Flag zeigt an, daß die Sequence Numbers
SYNchronisiert werden sollen
 SYN „kostet“ ein Byte bezüglich der
Sequenznummernvergabe
 reine acknowledgements „kosten“ keine Bytes

Martin Mauve
derjenige Teilnehmer, der den Verbindungsaufbau
initiiert, führt ein „active open“ (i.d.R. der Client)
durch, der Kommunikationspartner ein „passive
open“ (i.d.R. der Server)
Universität Mannheim
12
Timeout bei Verbindungsaufbau

Was passiert, wenn der Kommunikationspartner nicht
antwortet?
 die Übertragung des Paketes wird wiederholt, TCP betrachtet
dies als gewöhnlichen Paketverlust
 nach einer festen Zeit (timeout) wird der Verbindungsversuch
abgebrochen und die Anwendung informiert
Martin Mauve
Universität Mannheim
13
Maximum Segment Size Option

mit der Maximum Segment Size (MSS) gibt ein
System an, wie groß Segmente sein dürfen, die in
einem TCP Paket übertragen werden:
 Standardwert ist 536 (ergibt 576, wenn minimale IP- und
TCP-Header hinzugerechnet werden)
 ein größerer Wert kann von einem System angegeben
werden, dieser darf die MTU des angeschlossenen LANs
minus minimale IP- und TCP-Header nicht überschreiten
 zu IP-Fragmentierung kommt es, wenn ein Netz durchquert
wird, welches eine kleinere MTU als die MSS (+header) hat,
dann wird path MTU discovery verwendet
Martin Mauve
Universität Mannheim
14
Live Demo TCP-Verbindungsaufbau
# telnet pi4 discard
Trying 134.155.48.96
Connected to pi4.
Escape character is `^]`.
telnet> ^] (=control + ])
telnet> quit
Connection closed.
Martin Mauve
Universität Mannheim
15
TCP-Verbindungsabbau

durch zweimal half-close:
 da die TCP-Verbindung bidirektional ist, können beide
Richtungen getrennt voneinander beendet werden
 wer seine Senderolle beenden möchte, setzt das FIN Flag
 FIN „kostet“ ein Byte und wird daher durch ein
ack(nowledgement) bestätigt
 der andere Teilnehmer kann weiter senden - jedoch sieht
man fast immer das Verhalten, daß der andere Teilnehmer
als Reaktion auch seine Senderolle beendet

Martin Mauve
derjenige Teilnehmer, der zuerst seine Verbindung
beendet, führt ein „active close“ (i.d.R. der Client)
durch, der Kommunikationspartner ein „passive
close“ (i.d.R. der Server)
Universität Mannheim
16
2MSL Wait State

derjenige Teilnehmer, der einen active close
durchführt, muss nach Senden des acks für das FIN
des Kommunikationspartners die Verbindung für
eine gewisse Zeit offen halten
 Grund: das ack könnte verloren gehen und müsste dann
erneut übertragen werden
 die „gewisse Zeit“ beträgt 2 maximal segment lifetimes
(daher 2MSL wait state)
 implementiert wird eine MSL als 30 - 120 Sekunden
 während 2MSL Wait State kann daher die Port-Nummer
noch nicht wieder für andere TCP-Verbindungen verwendet
werden
Martin Mauve
Universität Mannheim
17
Live Demo TCP-Verbindungsabbau
# telnet pi4 discard
Trying 134.155.48.96
Connected to pi4.
Escape character is `^]`.
telnet> ^] (=control + ])
telnet> quit
Connection closed.
Martin Mauve
Universität Mannheim
18
TCP Reset

ein Segment, bei dem das RST (reset) bit im TCP
header gesetzt ist, terminiert die Verbindung in Form
eines „abortive release“ (im Gegensatz zum „orderly
release“ mit FIN):
 alle Daten, die beim Sender gepuffert waren, werden
verworfen und das reset Segment wird sofort gesendet, die
Verbindung ist damit aus Sicht des RST Senders sofort
terminiert
 es können beim Reset Daten verloren gehen (das passiert
beim Verbindungsabbau mit FIN nicht)
 der Emfänger eines RST Segmentes meldet dies der
Anwendung und terminiert sofort
Martin Mauve
Universität Mannheim
19
TCP Reset

es gibt prinzipiell zwei unterschiedliche Situationen,
wann ein RST gesendet wird:
 wenn ein Port nicht belegt ist (connection refused)
 wenn eine bestehende Verbindung abgebrochen wird
(connection reset by peer)

i.d.R. kann man als socket Option angeben, ob ein
normales TCP close erwünscht ist (mit FIN) oder ob
ein Abbruch erwünscht ist

bei Java geschieht dies mit: setSoLinger(int x), dies
gibt an, daß der Socket nach x Sekunden mit einem
Reset geschlossen werden soll
Martin Mauve
Universität Mannheim
20
TCP PUSH Flag (PSH)

die ursprüngliche Aufgabe des PSH Flags war es,
dass der Sender eines Segmentes den Empfänger
auffordert, dieses (und alle vorangegangenen) sofort
bei der jeweiligen Anwendung auszuliefern, ohne
dass es lange gepuffert wird

dies sollte z.B. für interaktive Anwendungen
verwendet werden

wird inzwischen jedoch standardmäßig (fast) immer
gesetzt, da keine Rechenzeit beim Auslesen der
Puffer gespart werden muss
Martin Mauve
Universität Mannheim
21
TCP - Application Programming Interface

Client/Server mit Sockets:
 der Server wartet auf einem wohldefinierten Port auf
Verbindungswünsche von Clients
 ein Client verbindet sich mit dem Server
 nachdem die Verbindung hergestellt ist, kann der Server für
diese Verbindung einen Thread/Prozess anlegen, so dass
er auf weiterhin eingehende Verbindungswünsche reagieren
kann
 wenn er dies nicht tut, werden die Verbindungswünsche
sequentiell bearbeitet (selten)
 Client und Server kommunizieren über byte streams
Martin Mauve
Universität Mannheim
22
TCP - API Beispiel: Command Client/Server

einfaches Java-Beispiel für einen sequentiell
arbeitenden Server

Beobachten mittles tcpdump/ethereal!
Martin Mauve
Universität Mannheim
23
5.2 TCP Interactive Data Flow
Buchstabe
ack für Buchstabe
Darstellung des Buchstabens
ack für Darstellung des Buchstaben
rlogin client
Martin Mauve
rlogin server
Universität Mannheim
24
Delayed Acknowledgements

um zu verhindern, daß überflüssige TCP-Segmente
gesendet werden, die nur ein ack beinhalten, wird
das Senden von acks i.d.R. verzögert:
Buchstabe
ack für Buchstabe und Darstellung des Buchstabens
delayed ack
delayed ack
ack für Darstellung des Buchstaben
rlogin client
Martin Mauve
rlogin server
Universität Mannheim
25
Delayed Acknowledgements

ein ack wird bei delayed acknowledgements i.d.R.
um maximal 200 ms verzögert

während dieser Zeit können Daten, die gesendet
werden, das ack „Huckepack“ (engl. piggyback)
mitnehmen, dies spart die Übertragung eines reinen
ack Segmentes

werden innerhalb dieser Zeit keine Daten gesendet,
so wird ein reines ack Segment übertragen

der 200ms Timer wird nicht für jedes Paket
aufgezogen, sondern läuft global, d.h. alle 200ms
werden alle acks verschickt, die noch offen sind
Martin Mauve
Universität Mannheim
26
TCP Delayed Acks - Demon

Martin Mauve
wir verwenden rlogin und tcpdump, um zu sehen,
wie TCP delayed acks verwendet
Universität Mannheim
27
Nagle Algorithm

wenn Segmente übertragen werden, die sehr klein
sind, dann fällt viel Overhead in Form von Headern
an

z.B. bei rlogin 40 Byte Header für 1 Daten Byte!

insbesondere in WANs (wide area networks) kann
dies problematisch sein

zur Vermeidung dieses Problems wird der Nagle
Algorithmus verwendet
Martin Mauve
Universität Mannheim
28
Nagle Algorithm

RFC 896

ein Sender darf nur ein ausstehendes Segment
haben, welches kleiner als die MSS ist

Idee: solange acks schnell zurückkommen behindert
dies den Sender nicht, wenn acks langsam zurückkommen, dann ist es wichtig, dass möglichst wenige
„tinygrams“ gesendet werden

Problem: manchmal möchte man dieses Verhalten
nicht (z.B. bei X Window sollen Maus-Bewegungen
ohne Verzögerung übertragen werden)

Lösung: man kann den Nagle Algorithmus
abschalten, z.B. in Java: setTcpNoDelay(boolean)
Martin Mauve
Universität Mannheim
29
5.3 TCP Bulk Data Flow

was passiert, wenn man große Datenmengen per
TCP überträgt?

wir schauen uns eine Dateiübertragung mittels ftp
an (ethereal)

Frage: wann wird ein ack gesendet?
 bisher: delayed ack nach 200ms
 das würde zu viele unbestätigten Paketen verursachen,
wenn die Datenrate hoch ist (bulk data flow)
 daher wird i.d.R. jedes 2te Segment sofort bestätigt, auch
wenn der 200ms delayed ack timer noch nicht abgelaufen
ist
Martin Mauve
Universität Mannheim
30
Schneller Sender und langsamer Empfänger
sequ 1, length 1024, ack 1, win 4096
sequ 1025, length 1024, ack 1, win 4096
ack 2049, win 2048
sequ 2049, length 1024, ack 1, win 4096
sequ 3073, length 1024, ack 1, win 4096
ack 4097, win 0
ack 4097, win 4096
ftp server
Martin Mauve
ftp client
Universität Mannheim
31
Schneller Sender und langsamer Empfänger

der Sender überträgt die Daten schneller, als sie der
Empfänger aus dem Puffer lesen kann

der Puffer des Empfängers läuft voll, er signalisiert
dies mit der Fenstergröße (dies ist eine Erweiterung
zum sliding window-Mechanismus, welche es
erlaubt, Pakete zu bestätigen, ohne dem Sender das
Recht zu geben, weitere Pakete zu senden)

erst wenn der Puffer vom Empfänger wieder freien
Platz enthält, wird dieser freie Platz in einem weitern
ack dem Sender mitgeteilt

das so genutzte Fenster ist das Empfänger Fenster
(eines pro Kommunikationspartner)
Martin Mauve
Universität Mannheim
32
Congestion

Problem: wenn alle Sender im Netz immer so viele
Pakete losschicken, wie bei den Empfängern in den
Puffer passen, dann kann es zur Überlast
(congestion) im Netz kommen, da nicht auf die
momentane Situation im Netz Rücksicht genommen
wird
Sender A
Sender B
Martin Mauve
Empfänger C
wenn alle Verbindungen die gleiche
Bandbreite haben und sowohl A als
auch B mit der Bandbreite der Verbindung
senden, dann kommt es hier zur Netzwerküberlastung (congestion)!
Universität Mannheim
Empfänger D
33
Congestion Window

um auf Congestion zu reagieren, wird beim Sender
ein zusätzliches Congestion Window (cwnd)
mitgeführt

cwnd wird wie das vom Empfänger mitgeteilte
Empfänger Fenster in Byte geführt

ein Sender darf nur das MINIMUM aus (cwnd,
Empfänger Fenster) an Daten senden
Martin Mauve
Universität Mannheim
34
Slow Start

das cwnd wird zu Beginn einer Verbindung mit einer
MSS (wie vom Kommunikationspartner angekündigt)
initialisiert

solange kein Verlust auftritt, wird das cwnd jeweils
um eine MSS erhöht, wenn ein Segment bestätigt
wurde:
 d.h. wenn das erste Segment bestätigt wurde, dürfen zwei
volle Segmente gesendet werden, sofern dies weniger als
die von Empfänger angegebene (flow control) Fenstergröße
ist: das cwnd wird auf 2 erhöht und es stehen keine
unbestätigten Segmente mehr aus
Martin Mauve
Universität Mannheim
35
Slow Start

mittels slow start soll schnell der Wert bestimmt
werden, den man senden kann, ohne Paketverlust
hervorzurufen

dieser Wert ist erreicht, wenn das cwnd so groß ist,
dass die Verbindung zum Empfänger mit Paketen
gefüllt bleibt:
Sender
Empfänger
optimales cwnd = bandbreite * round-trip Verzögerung
Martin Mauve
Universität Mannheim
36
Slow Start

slow start terminiert, wenn die ersten Paketverluste
auftreten, dann kommt es zu congestion avoidance
(wird erklärt, wenn wir Verlusterkennung und
Übertragungswiederholung besprechen)

ideal wäre es, wenn man einfach den durch slow
start bestimmten Wert für die ganze Lebenszeit der
Verbindung verwenden könnte

dies ist leider nicht möglich, da sich die verfügbare
Bandbreite während einer Verbindung ändern kann
(dies kann sehr häufig in kurzen Abständen
passieren)
Martin Mauve
Universität Mannheim
37
5.4 Zuverlässigkeit in TCP

generell wird Zuverlässigkeit in TCP durch
acknowledgements gewährleistet

wenn der Sender kein acknowledgement für ein
Segment erhält, wird dieses nach Ablauf eines
Timers erneut übertragen

wenn nötig, wird dies wiederholt, bis eine
Bestätigung vorliegt

damit dies funktioniert, benötigt man Wissen über
die Netzwerkverzögerung zwischen Sender und
Empfänger (round trip delay)
Martin Mauve
Universität Mannheim
38
Round Trip Delay-Messung




beim Sender wird beim Eintreffen eines acks das round trip
delay für das erste Segmente bestimmt, welches durch das ack
bestätigt wurde
d.h. wenn 2 Segmente durch ein ack bestätigt werden, wird nur
das round trip delay für das erste Segment bestimmt
da sich das round trip delay mit der Zeit ändern kann, muss
diese Änderung erfaßt werden
erste Idee (exponentielle Glättung):




Martin Mauve
RTT  a*RTT + (1-a)*M
RTT= round trip time estimator, a=0.9, M=aktuelle Messung
nach RTO=2*RTT wird die Übertragung eines Paketes wiederholt
2*RTT um bei spontane Variationen des round trip delays nicht
sofort überflüssige Übertragungen zu erzeugen
Universität Mannheim
39
Round Trip Delay-Messung

die erste Idee hat nur bedingt funktioniert, da sie nicht
resistent genug gegen plötzliche Schwankungen des
round trip delays war

Idee: die Varianz muss in die Berechnung einbezogen
werden:





Martin Mauve
Err = M -A
A  A+g*Err
D  D + h*(|Err| -D)
RTO = A+4*D
mit A=geglättetes durchschnittliches round trip delay,
D=geglättete Standardabweichung, Err=Abweichung des
aktuellen Testwertes M, g=Anpassungsfaktor für A (0.125),
h=Anpassungsfaktor für D (0.25)
Universität Mannheim
40
Karn‘s Algorithmus

Problem: wenn eine Segmentübertragung wiederholt
wurde (z.B. wegen eines Timeouts) und dann
bestätigt wird, weis man nicht, ob:
 die Bestätigung für die erste Übertragung gemeint war und
im Netz zu lange verzögert wurde, oder
 die Bestätigung tatsächlich für die wiederholte Übertragung
des Segmentes gilt

Martin Mauve
nach Karn dürfen daher acks von Segmenten, die
wiederholt übertragen wurden, nicht bei der
Berechnung des round trip delays berücksichtigt
werden
Universität Mannheim
41
Fast Retransmit

Problem: was tun, wenn ein einzelnes Segment
verloren gegangen ist, und die nachfolgenden
Segmente vom Empfänger korrekt empfangen
werden?

der Empfänger schickt duplicate acks, d.h. er
bestätigt das letzte Paket vor der „Lücke“ erneut,
wenn er Segmente erhält, die nicht in der richtigen
Reihenfolge ankommen
Martin Mauve
Universität Mannheim
42
Fast Retransmit

erhält der Sender ein duplicate ack, so kann:
 entweder die Reihenfolge der Pakete im Netz verändert
worden sein,
 oder ein Paketverlust vorliegen

wenn wenige duplicate acks in Folge ankommen, ist
der erste Fall wahrscheinlich und der Sender
ignoriert dies; treten mehr als 2 duplicate acks auf,
wird vom Sender ein Paketverlust angenommen und
das betroffene Segment erneut übertragen

wenn ein kontinuierlicher Datenstrom vom Sender
gesendet wird, dann werden einzelne Paketverlust
so deutlich schneller erkannt und repariert, daher der
Name: fast retransmit
Martin Mauve
Universität Mannheim
43
Fast Retransmit-Beispiel
sequ 1, geht verloren
ack 1
sequ 1025
ack 1
sequ 2049
ack 1
sequ 3073
ack 1
triple duplicate ack:
retransmit sequ 1
ack 4097
sequ 4097
ftp server
Martin Mauve
ftp client
Universität Mannheim
44
Slowstart & Congestion Avoidance



cwnd wird mit der MSS des Empfängers initialisiert
slow start threshold (ssthresh) wird mit 65353 initialisiert
solange ssthresh>cwnd und keine Verluste auftreten:
 slow start: erhöhe cwnd um MSS für jedes empfangene ACK
(dies ist exponentiell!)

wenn keine Verluste und ssthresh<=cwnd:
 congestion avoidance: erhöhe cwnd um 1/cwnd (hier cwnd
gemessen in Vielfachen von MSS), wenn eine ACK empfangen
wird (dies ist linear)
Martin Mauve
Universität Mannheim
45
Slowstart & Congestion Avoidance

wenn triple duplicate ack:
 setzte ssthresh und cwnd auf die Hälfte von min(cwnd,
Empfänger Fenster), runde auf ganze Vielfache von MSS ab
 danach congestion avoidance

wenn timeout:
 setzt ssthresh auf die Hälfte von min(cwnd, Empfänger Fenster),
runde auf ganze Vielfache von MSS ab
 setzte cwnd auf MSS (slow start)


für Übertragung immer: min(cwnd, Empfänger Fenster),
dabei wird cwnd auf ganze Vielfache von MSS
abgerundet
dieses Vorgehen bezeichnet man als additive increase
multiplicative decrease (AIMD): die Senderate wird
additiv während congestion avoidance erhöht und
multiplikativ bei Paketverlust verringert (halbiert!)
Martin Mauve
Universität Mannheim
46
Slowstart & Congestion Avoidance ohne Verluste
Martin Mauve
Universität Mannheim
47
Slowstart & Congestion Avoidance mit Verlusten
Martin Mauve
Universität Mannheim
48
TCP-Zusammenfassung

TCP bietet eine gesicherte, verbindungsorientierte
Übertragung von Byte-Stömen

Verbindungsaufbau / -abbau

Zuverlässigkeit durch acks / timeout / fast retransmit

flow control durch Empfänger-Fenster

congestion control durch cwnd (AIMD)
Martin Mauve
Universität Mannheim
49
Herunterladen