Die Transportprotokolle:
Transmission Control Protocol (TCP) User
Datagram Protocol (UDP)
Die Socket-Schnittstelle
1
Rolle der Transportschicht im OSIReferenzmodell
Anforderungen des Anwendungsprozesses
Schichten
5..7
Schicht 4
TCP-Segmente
Transport-Protokoll
TransportDienst
NetzwerkDienst
Schichten
1..3
2
Einführung in TCP
• TCP implementiert ein verbindungsorientiertes,
zuverlässiges Transport- Protokoll, aufbauend auf dem
IP-Dienst.
Dienstschnittstellen
E-mail
File
Transfer
Transmission Control
Protocol (TCP)
World
Wide
Web
Verteilte
Spiele
GebäudeSteuerung
User Datagram Protocol
(UDP)
Internet Protocol (IP)
Physikalische Subnetze (Hardware, Firmware)
3
Funktionen eines Transportdienstes
• Verbindungsaufbau (falls verbindungsorientiert)
• Datentransfer
– normale Daten / Daten mit Priorität,
Unterbrechungssignale
– strom- oder paketorientiert
– Fehlerbehandlung, Flusssteuerung
• Verbindungsabbruch
– durch den Benutzer
– durch den Diensterbringer, d.h. die Transportschicht
• Adressierung des "Benutzers" der
Transportschicht, d.h. des
Anwendungsprozesses
• Managementfunktionen
• Programmierschnittstelle (API)
4
Adressierung von Anwendungsprozessen:
Beispiel TCP/IP - Portnummern
AP1
37
AP2
AP3
Port56
1245
Nummern
Internet
4
Physikalisches
Netz
UDP
Proto=17
3
IP
Router
Rechner
5
Verbindungserstellung (socket-Schnittstelle)
6
Zuweisung von Portnummern
• Passive Seite: Server bindet sich an einen
bestimmten Port (bind())
• Aktive Seite: Client sendet Anfrage oder erstellt
eine Verbindung zum Port des Servers
(connect()).
• Portnummern können Anwendungsdiensten
statisch zugeordnet sein: Eintrag in einer
Datenbank, die den durch Server erbrachten
Diensten bestimmte Ports zuordnet
(/etc/services)
• Dynamische Zuordnung via Verzeichnisdienst,
Nameserver (lokal oder verteilt) möglich.
7
Koordination der global zugeordneten Ports
• Internet Assigned Numbers Authority (IANA):
Zuständig für Vergabe von Konstanten in TCP/
IP- Protokollen (port numbers, protocol numbers,
...)
• Bereich 0.. 1023: Für globale "well known" ports,
kontrolliert von der IANA
• Bereich 1024 .. 65535: Frei für dynamische
Allozierung durch Prozesse oder für statische
Allozierung mit lokaler Bedeutung
– Registrierung durch IANA ist optional
• Aktuelle globale / statische Zuordnungen:
ftp://ftp.isi.edu/in-notes/iana/assignments
8
Well-known port numbers:
/etc/services (Auszug)
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, “Assigned Numbers”
echo
echo
discard
discard
ftp-data
ftp
telnet
smtp
time
time
nameserver
whois
domain
domain
7/tcp
7/udp
9/tcp
9/udp
20/tcp
21/tcp
23/tcp
25/tcp
37/tcp
37/udp
42/tcp
43/tcp
53/tcp
53/udp
sink null
sink null
mail
timserver
timserver
name
nicname
nameserver
nameserver
# IEN 116
# name-domain server
9
Typischer Ablauf bei dynamisch zugeteilten
Ports
1. Server-Prozess signalisiert Bereitschaft, eine
Kommunikationsbeziehung entgegenzunehmen;
erhält mit bind() seinen Port zugeteilt.
2. Server-Prozess trägt sich mit seinem Namen und
dem Port in das Verzeichnis ein.
3. Client sucht im Verzeichnis nach dem Namen
des Server-Prozesses und erhält dessen Port.
4. Client erstellt eine Verbindung (TCP) oder sendet
ein Anfrage-Paket (UDP) zum Server-Prozess
(connect()).
5. Server nimmt Verbindung an (TCP) oder sendet
ein Antwortpaket (UDP).
10
Eigenschaften des
Transmission Control Protocol (TCP)
• verbindungsorientiert
• Vollduplex-Verbindung
• stellt eine “byte pipe” zur Verfügung unstrukturierter Datenstrom
• Sliding Window-Protokoll
• Folgenummern sind Bytenummern
• Maximale Fenstergrösse 216 Bytes
• Variable Grösse des Sendefensters bestimmt
durch das Maximum von:
– Angabe des Empfängers (receiver window size)
– Congestion window size, abhängig von einer lokalen
Schätzung der Netzbelastung -> “Slow Start”
Algorithmus
11
Basismechanismen von TCP
• Segmente variable Länger; maximale
Segmentgrösse bei der Verbindungserstellung
festgelegt.
• Jedes Segment hat eine Folgenummer, die seine
Position im Datenstrom in Bytes spezifiziert.
• Abgesendete Segmente müssen innerhalb einer
bestimmten Zeit bestätigt werden (adaptiv geschätzte
Round Trip Time).
• Bestätigungen werden verzögert gesendet (ca. 200
ms)
• Jedes Segment hat eine Ende-zu-Ende-Prüfsumme;
fehlerhaft empfangene Segmente werden ignoriert.
• Der Empfänger ordnet empfangene Segmente
entsprechend ihrer Folgenummer; Duplikate werden
ignoriert.
12
TCP-Segmentformat
0
4
10
16
Port des Senders
24
31
Port des Empfängers
Sequenznummer im Bytestrom des Senders
Bestätigungsnummer (ACK in Gegenrichtung)
HLEN Reserviert Code Bits
Grösse des Emfängerfensters
Prüfnummer (auch über Daten)
Optionen (falls vorhanden)
Dringlichkeitszeiger
"Padding"
Daten
…
• Code Bits: URG, ACK, PSH, RST, SYN, FIN
• Dringlichkeitszeiger: zeigt auf das Ende der
dringenden Daten im TCP-Datenfeld.
13
Verbindungsaufbau
• Aktives Öffnen einer Verbindung (SYN)
• Passive Seite nimmt eine Verbindung auf einer
bestimmten Port-Nummer entgegen
• Die initialen Sequenznummern werden auf jeder
Seite zufällig gewählt und bestätigt.
• 3-fach-Handshake (nötig wegen des unzuverlässigen
Dienstes von IP):
Sende
SYN seq=x
Empf. SYN
Sende SYN
seq=y, ACK x+1
Empf. SYN + ACK
Sende ACK y+1
Empf. ACK
14
Verbindungsaufbau, zwei Fehlerszenarien
altes Duplikat
altes Duplikat
altes Duplikat
wird
verworfen
15
Segmente, Datenströme und Sequenznummern
• TCP betrachtet einen Datenstrom als Sequenz von Bytes,
die für die Übertragung in TCP-Segmente eingeteilt werden.
Jedes Segment wird dann in der Regel auf ein IP-Paket
abgebildet. (Grösse eines Segmentes bei lokaler
Übertragung gemäss physikalischem Netz, sonst 536 Bytes)
• TCP verwendet ein "sliding window" Protokoll, um möglichst
effizient Daten zu übertragen, und Flusskontrolle zu
ermöglichen. Bei einer Vollduplex-Verbindung müssen
insgesamt 4 Fenster verwaltet werden.
1
2
3
4
5
6
7
8
9
10
11
16
Variable Fenstergrössen
• Die Fenstergrösse im TCP "sliding window" Protokoll kann
variiert, d.h. an den "Füllstand" des Netzes bzw. des
Empfängers angepasst, werden.
• Flusssteuerung
– Jedes Bestätigungspaket enthält einen "window advertisement"
Wert, in dem der Empfänger angibt, für wieviele weitere Pakete er
noch freie Kapazität hat (das Fenster kann also grösser oder kleiner
werden).
• Verkehrssteuerung
– Jacobsen's "slow start" Algorithmus variiert die Grösse des
Sendefensters, um die Senderate an die Netzbelastung
anzupassen (s. Folie 18).
17
Abbau einer TCP-Verbindung
• Aktive Seite (links) schliesst Verbindung mit FIN-Flag
• Neue Daten werden nicht mehr übertragen, von rechts
ankommende Daten werden jedoch noch bestätigt.
• 4-fach-Handshake; jede Seite wird separat beendet
(TCP half close)
Sende
FIN seq=x
Empf. FIN
Sende ACK x+1
Empf. ACK
Applikation informieren
Sende FIN, ACK x+1
Empf. FIN + ACK
Sende ACK y+1
Empf. ACK
18
anything / reset
Client
begin
closed
passive open
syn / syn + ack
Der endliche Automat
von TCP
close
active open / syn
listen
send / syn
reset
syn
receiv.
syn / syn + ack
syn + ack / ack
ack
established
close / fin
close / fin
fin
wait 1
fin / ack
fin-ack / ack
ack /
fin
wait 2
fin / ack
fin / ack
syn close /
sent
timeout /
reset
close
wait
close / fin
closing
ack /
last
ack
ack /
timeout after 2
segment lifetimes
timed
wait
aus: D. Comer: Internetworking with TCP/IP, Volume 1, Prentice Hall, 1995, p. 220
19
anything / reset
Server
begin
closed
passive open
syn / syn + ack
Der endliche Automat
von TCP
close
active open / syn
listen
send / syn
reset
syn
receiv.
syn / syn + ack
syn + ack / ack
ack
established
close / fin
close / fin
fin
wait 1
fin / ack
fin-ack / ack
ack /
fin
wait 2
fin / ack
fin / ack
syn close /
sent
timeout /
reset
close
wait
close / fin
closing
ack /
last
ack
ack /
timeout after 2
segment lifetimes
timed
wait
aus: D. Comer: Internetworking with TCP/IP, Volume 1, Prentice Hall, 1995, p. 220
20
Slow Start Algorithmus
Linear ansteigende
Fenstergrössse
congestion window size
(in Segmenten)
timeout
20
15
ssthresh
10
5
0
0
Exponentiell
ansteigende
Fenstergrösse
5
10
15
20
Anzahl round trip times
21
User Datagram Protocol (UDP)
0
31
15 16
UDP Port # des Absenders UDP Port # des Empfängers
Länge des Datengramms
UDP-Prüfsumme
Nutzdaten (gerade Anzahl von
Oktetten)
Prüfsummenberechnung schliesst Pseudo-Header
mit ein (gilt für UDP und TCP).
22
Die Socket-Schnittstelle
• De-facto-Standard für TCP/IP
Programmierschnittstelle
• Zugang zu TCP, UDP und (eingeschränkt) IP
• Unterstützung verschiedener Protokolle
– Protocol familiy
– Address familiy
• Abstraktion für Kommunikationsendpunkte
– sockets
• … mit verschiedenen
Kommunikationseigenschaften
– socket types (stream socket, datagram socket)
• Benennung/Adressierung von
Kommunikationsendpunkten
– name binding
23
Socket-Datenstrukturen für die Adressierung
allgemein:
family
für TCP/IP:
AF-INET
Für UNIXFilesystem: AF-UNIX
Adresse (variabel lang)
Port
IP-Adresse
UNIX-Pfadname
24
Verbindungslose Kommunikation über Sockets
Server
Client
socket()
socket()
bind()
bind()
recvfrom()
sendto()
(blockiert)
(verarbeitet Anfrage)
sendto()
recvfrom()
(blockiert)
25
Verbindungserstellung
26
Verbindungen und
Verbindungsendpunkte
Eine TCP-Verbindung wird durch ein Paar von Adressen
und Port-Nummern identifiziert (Verbindungsendpunkte):
• IP-Adresse und Port-Nummer Host A
• IP-Adresse und Port-Nummer Host B
Jede Verbindung wird durch ein Paar von
Verbindungsendpunkten eindeutig identifiziert -> mehrere
Verbindung zwischen den gleichen Hosts sind dadurch
gleichzeitig möglich.
27
Identifikation von Verbindungen
Host A
(Client-Maschine)
Host B
(Server-Maschine)
Daemon
(tcp, *, 23)
Client 1
(tcp, A, 1055, B, 23)
(tcp, A, 1055)
Client 2
(tcp, A, 1056)
Server 1
(tcp, B, 23) fork
(tcp, A, 1056, B, 23)
Server 2
(tcp, B, 23)
28
Weiterführende Literatur
• Postel, Jon, "Transmission Control Protocol - DARPA
Internet Program Protocol Specification", RFC 793,
Network Information Center, SRI International, Menlo
Park, Calif., September 1981
• W. Richard Stevens, "UNIX Network Programming",
Prentice Hall, Engelwood Cliffs, NJ, 1990, ISBN 0-13949876-1
• "man 4 tcp"
29

Transportprotokolle