Transportschicht

Die Transportschicht stellt Protokolle zum Aufbau von Verbindungen zwischen zwei Anwendungsprogrammen zur Verfügung. Die wichtigsten Protokolle auf dieser Schicht sind das Transmission Control Protocol (TCP) sowie das User Datagram Protocol (UDP). Während TCP den darauf aufsetzenden Applikationen ein verlässliches, verbindungsorientiertes Protokoll zur Verfügung stellt, bietet UDP verbindungslose Dienste für Anwendungsprotokolle an.

Im Rahmen von TCP und UDP werden die einzelnen Dienste der sendenden und empfangenden Hosts über Portnummern adressiert. Die Portnummern (Ports) dienen der Adressierung einer konkreten Instanz eines Programms, welches im Internet Daten austauscht. Eine solche Adressierung ist notwendig, da auf einem Host gleichzeitig mehrere Programme bzw. Instanzen von Programmen laufen können. So kann auf einem Host beispielsweise ein Web-Server und ein E-Mail-Server parallel betrieben werden; zudem ist es ohne weiteres möglich, dass auf einem Rechner ein Web-Browser mehrfach aufgerufen wird, um damit verschiedene Abfragen im WWW durchzuführen. Wenn ein Datenpaket nur die IP-Adresse des Hosts enthalten würde, wäre es dann nicht möglich, die übertragenen Daten den betreffenden Programmen zuzuordnen. Über die Portnummern kann hingegen eine korrekte Zuordnung zu den jeweiligen Programmen erfolgen.

Je nachdem, ob ein Internet-Programm ein Server oder ein Client ist, haben die Ports einen unterschiedlichen Verwendungszweck:

Die Zuweisung der Ports von 0 bis 1023 ist weltweit eindeutig festgelegt. So hat ein Web-Server standardmässig die Portnummer 80. Das zu verwendende Anwendungsprotokoll wird über den Port selektiert.

Eine Portnummer kann nur einmal auf einem bestimmten Rechner vergeben werden, jedoch ist es prinzipiell möglich, dass auf einem Rechner mehrere Server parallel laufen, die das gleiche Protokoll verwenden. In diesem Fall kann nur ein Server die reservierte Dienstnummer verwenden, den anderen sind Ports ausserhalb des reservierten Bereichs zuzuweisen. Diese Portnummern müssen den Clients mitgeteilt werden. Beispielsweise könnten auf einem Host zwei Web-Server betrieben werden, wobei der eine den Standardport 80, der andere den Port 8080 verwendet. Soll nun eine auf diesem Web-Server laufende Webseite aufgerufen werden, dann muss die Portnummer explizit angegeben werden.

Server haben eine konstante Portnummer. Dagegen werden die Portnummern der Clients dynamisch vergeben und zwar automatisch vom Betriebssystem beim Starten des Clients. Startet ein Client eine Anfrage, dann wird diese dem Server im Datenpaket mitgeteilt. Damit weiss der Server, an welchen Client er die Antwort auf die Anfrage zurücksenden muss. Konkret ist dies der Fall, wenn beispielsweise ein Benutzer mehrere Browserfenster gleichzeitig öffnet und verschiedene Webseiten parallel aufruft.

Ein TCP-Segment besteht immer aus zwei Teilen – dem Kopf (Header) und der Nutzlast (Payload). Die Nutzlast enthält die zu übertragenden Daten, die wiederum Protokollinformationen der Anwendungsschicht wie HTTP oder FTP entsprechen können. Der TCP-Header besteht aus mehreren Feldern und umfasst 20 Bytes. Das Feld "Source-Port" enthält die Dienstnummer des sendenden Programms, das Feld "Destination-Port" die Dienstnummer des empfangenden Programms

TCP dient dem Aufbau einer verlässlichen, verbindungsorientierten Protokollschicht. Damit soll sichergestellt werden, dass die Daten korrekt und in der richtigen Reihenfolge über das Netz transportiert werden. TCP-Verbindungen werden mittels Sequenznummern und spezifischen Signalisationen in TCP-Paketen aufgebaut. Dabei werden zwei Datenstationen zuerst synchronisiert und dann mittels eines virtuellen Kanals miteinander verbunden. Da die zu übertragenden Daten nicht immer in ein einzelnes IP-Datenpaket passen, müssen diese in einzelne Teile zerlegt werden. Diese Teile kommen aber nicht immer in der richtigen Reihenfolge beim Empfänger an. Durch die Sequenznummern wird sichergestellt, dass der Empfänger die eingegangenen Pakete richtig zusammensetzen kann. Da der Empfänger für jedes eingegangene Paket eine Quittung an den Sender zurücksenden muss, können mögliche Paketverluste entdeckt werden. In diesem Fall wird das verloren gegangene Paket erneut übertragen.

Ein weiteres gängiges Protokoll in der Transportschicht ist das User Datagram Protocol (UDP). Im Gegensatz zu TCP ist es nicht auf Zuverlässigkeit ausgelegt und daher verbindungslos. Verbindungslos bedeutet, dass nicht erst eine Verbindung aufgebaut wird, sondern dass Daten einfach versendet werden. Es wird nicht garantiert, dass ein einmal gesendetes Paket ankommt oder dass Pakete in der gleichen Reihenfolge ankommen, in der sie gesendet wurden; eine Quittierung ist nicht vorhanden. Die Kommunikationspartner können also nicht feststellen, ob Pakete verloren gingen. Eine Anwendung, die UDP nutzt, muss daher gegenüber verloren gegangenen und unsortierten Paketen unempfindlich sein oder selbser entsprechende Korrekturmassnahmen beinhalten.

Der Vorteil von UDP ist, dass der Datenaustausch schneller stattfinden kann als bei TCP, was besonders beim Austausch von kleinen Datenmengen ins Gewicht fällt. Ein Beispiel hierzu ist eine Anfrage an einen DNS-Server. Hier werden üblicherweise nur zwei Pakete ausgetauscht, ein Paket mit der Anfrage und eines mit der Antwort. Daneben bietet die ungesicherte Übertragung auch den Vorteil von geringen Übertragungsverzögerungsschwankungen: Geht bei einer TCP-Verbindung ein Paket verloren, so muss es erneut angefordert werden. Dies braucht Zeit, die Übertragungsdauer kann daher schwanken, was für Multimediaanwendungen schlecht ist. Etwa bei der Internettelefonie (VoIP) würde es zu plötzlichen Aussetzern kommen. Auch UDP-Segmente bestehen jeweils aus einem Header und Nutzdaten. Die Quell- und Ziel-Port-Felder identifizieren den sendenden und den empfangenden Prozess. Da UDP verbindungslos ist, ist der Quell-Port optional. Er wird dann auf 0 gesetzt.