TCP/UDP
Während
IP für das Routing der Pakete zuständig ist, ist
TCP (Transport
Control Protocol) das Transportprotokoll - es sorgt für eine sichere
Zustellung der Pakete. TCP ist ein verbindungsorientiertes Protokoll, da
Sender und Empfänger eine Sitzung einrichten, während der Daten getauscht
werden.
TCP sorgt dafür, dass keine Pakete verlorengehen. Sendet ein
Host ein
TCP-Paket, wartet er auf eine Bestätigung des Empfängers. Erhält er eine,
sendet er das nächste Paket. Bleibt sie jedoch aus, sendet der Host das
Paket nach Ablauf einer festgelegten Zeitspanne erneut. Ist das Paket
endgültig unzustellbar, erhält der Sender eine ICMP-Meldung.
TCP-Handshake
Möchte ein
Client mit einem einem
Server Daten austauschen, sendet er
zuerst ein TCP-Paket, in dessen Header unter anderem das sogenannte SYN-Bit
gesetzt ist. Dieses
Bit ist eine Aufforderung an den Server, eine
Verbindung herzustellen. Ausserdem übermittelt der Client die sogenannte
Fenstergrösse. Dieser Wert legt die Anzahl
Byte für Nutzdaten fest, die
ein Paket enthalten kann, damit es auf dem Client noch verarbeitet werden
kann.
Im zweiten Schritt antwortet der Server, in dem er sein ACK-Bit im Header
setzt und übermittelt seine Fenstergröße. Im letzten Schritt akzeptiert der
Client mit dem ACK-Bit. Damit ist eine Siztung zwischen beiden eingerichtet.
Das Beenden der Sitzung erfolgt ähnlich mit Hilfe des FIN-Bits.
Mit einem Sniffer wie zum Beispiel
Iris
kann man den Handshake sehr beobachten:
1. Wenn zum Beispiel ein
Browser die
Homepage von www.nickles.de abholt,
werden eine Reihe von TCP-Paketen ausgetauscht. Zuerst sendet der Client
ein Paket ohne Daten aber mit SYN-Bit. Die Hex-Darstellung zeigt eine
rote 2 für das SYN-Bit. Direkt danach ist die angebotene Fenstergröße 8192
Byte (0x2000) zu sehen.
Der Client 217.x.x.x sendet ein TCP-Paket mit gesetztem
SYN-Bit.
Das zweite Paket sendet der Nickles-Server an den Browser zurück. Auch er
setzt das SYN-Bit aber zusätzlich das ACK-Bit. Ausserdem bietet er ein viel
größeres Fenster von 65 535 Byte an. Auch das zweite Paket enthält noch
keine Daten.
Der Server sendet das ACK und bietet seine Fenstergröße an.
Der Browser antwortet mit einem ACK und erhöht sein Fenster auf 8760 – mehr
kann er nicht.
Der Client sendet ein ACK zur Bestätigung und passt
seine Fenstergröße an.
Mit diesen drei Paketen sind alle Schritte für den TCP-Handshake ausgeführt.
Die Sitzung ist eingerichtet und der Datentransfer kann beginnen.
Es kann losgehen: Der Server sendet das erste Datenpaket
an den Browser.
An diesen Bildern kann man auch sehr schön die Port-Verwendung sehen. Der
Client sendet brav über Port 80 wie sich das für den Anruf eines Web-Servers
gehört, denn der horcht schließlich dort – jedenfalls der Nickles-Server (
es kann nämlich auch über andere Ports gehen). Der Server seinerseits denkt
nicht daran Port 80 zu nehmen - er sucht sich einen jenseits 1023 aus –
in diesem Fall 2319. Bei der Portwahl ist er kaum eingeschränkt, es kann
jeder freie Port zwischen 1024 und 65 535 sein.
Informationen über den exakten Aufbau des TCP-Headers finden sich in
RFC 793.
Dort ist TCP definiert.