Internet-Protokolle, Teil 1: TCP/IP, der Grundstein fĂĽr Anwendungsprotokolle
Seite 2: TCP/UDP
TCP/UDP: zwei ungleiche Geschwister
Bei der Auswahl eines für die eigene Anwendung geeigneten Protokolls beginnt die Qual der Wahl bereits bei der Entscheidung, ob TCP oder UDP verwendet wird. Das User Datagram Protocol (UDP) wird in RFC 768 beschrieben und erlaubt das Senden von Nachrichten (Datagram) an einen oder mehrere Empfänger. Eine Verbindung zwischen Sender und Empfänger wird dabei nicht aufgebaut. Der Sender hat keine Möglichkeit festzustellen, ob eine Nachricht angekommen ist. Es ist ebenfalls nicht sicher, ob Nachrichten in der gleichen Reihenfolge beim Empfänger ankommen, in der sie gesendet wurden.
Da UDP der eigentlichen Nachricht nur wenige Informationen im Header hinzufügt und die Daten ohne weitere Kontrollmechanismen an den Empfänger geliefert werden, ist die Übertragung sehr schnell. Die richtige Reihenfolge der Nachrichten herzustellen und verloren gegangene Daten erneut anzufragen, ist dabei jedoch Aufgabe der Anwendung.
Mehrere Empfänger lassen sich innerhalb eines Sub-Netzes mit einer Broadcast-Adresse erreichen. Besonders diese Eigenschaft macht UDP für Anwendungen interessant, die Knoten im Netz Ereignisse signalisieren oder automatisch andere Knoten suchen. Bei Letzterem verschickt man eine Nachricht an alle Knoten. Erfolgt nach einer bestimmten Zeit keine Reaktion, wird die Anfrage wiederholt.
Beim Transmission Control Protocol (TCP) steht die gesicherte Übertragung der Daten im Vordergrund. Vor Beginn der Übermittlung muss eine Verbindung hergestellt sein. Zwischen den beiden Endpunkten der Verbindung ist ein Datenstrom in beide Richtungen möglich (vollduplex). TCP sorgt dafür, dass Empfänger die Daten in genau der Reihenfolge erhalten, in der sie der Sender schickt (Pipe).
Die wichtigsten Unterschiede zwischen UDP und TCP sind:
- UDP ist verbindungslos. TCP ist verbindungsorientiert.
- UDP überträgt Nachrichten. TCP überträgt einen Datenstrom.
- UDP stellt weder die Reihenfolge noch die Lieferung von Nachrichten sicher. TCP sorgt fĂĽr eine gesicherte Lieferung der Daten in der richtigen Reihenfolge.
- UDP-Pakete können an mehrere Empfänger gesendet werden (Broadcast). TCP erlaubt ausschließlich eine Kommunikation zwischen zwei verbundenen Knoten.
Das Transmission Control Protocol ermöglicht es Anwendungen, Daten zuverlässig zu übertragen, ohne sich mit den Details der Netzwerkschicht befassen zu müssen. Die Spezifikation und Implementierung von Anwendungsprotokollen, die TCP zur Grundlage nehmen, wird dadurch erheblich vereinfacht. Dennoch müssen sie je nach Anforderung viele Aufgaben erfüllen. Um zu verstehen, welche Funktionen ein Anwendungsprotokoll genau bieten muss, damit es modernen Internetanwendungen eine solide Grundlage bietet, sollen im Folgenden einige grundlegende Funktionen von TCP erläutert werden.
Verbindung gesucht
Jede TCP/IP-Verbindung wird zwischen zwei sogenannten Sockets aufgebaut. Ein Socket ist eine Kombination aus IP-Adresse und TCP-Port. Die IP-Adresse bezeichnet eine Netzwerkschnittstelle. Das kann zum Beispiel eine Netzwerkkarte (NIC), eine WLAN-Verbindung oder das interne localhost-Interface sein. Ein Rechner kann über eine Vielzahl von Schnittstellen zu unterschiedlichen Netzen verfügen. Die Netzwerkschicht ermöglicht den Datenaustausch zwischen unterschiedlichen Netzen. Dieser Vorgang wird Forwarding genannt. Häufig wird in dem Zusammenhang der Begriff Routing verwendet, der jedoch das Ermitteln einer Route durch das gesamte Netz, vom Sender bis zum Empfänger, bezeichnet.
TCP-Ports werden mit einer Nummer bezeichnet und dürfen pro Netzwerkinterface nur einmal vergeben werden. Beispielsweise ist es nicht möglich, zwei Internetserver zu starten, die auf dem gleichen Netzwerkinterface auf Port 80 Verbindungen zulassen.
Damit sich eine TCP-Verbindung zwischen zwei Knoten im Netzwerk herstellen lässt, muss ein Knoten bereit sein, eine Verbindung auf einem bekannten Port (well known port) zu erlauben. Dieser Zustand der Verbindung wird Abhörstatus (Listening) genannt. Erst jetzt kann man von einem anderen Knoten aktiv eine Verbindung aufbauen (initiate). Dabei wird dem Listener unter anderem der frei zugeteilte Port des Initiators mitgeteilt.