Einführung
IP verfügt über eine transparente Schnittstelle zu den jeweiligen Medien und über einen ausgeklügelten Adressierungsmechanismus zum Ansprechen anderer Knoten. Damit Datagramme an die entsprechenden Dienste der Anwendungsschicht geschickt und damit zuverlässige Kommunikationen realisiert werden können, müssen die besagten Dienstfunktionen erweitert werden. Auf der Transportschicht werden diese zusätzlichen Funktionen der beiden Transportprotokolle UDP (User Datagram Protocol) und TCP (Transmission Control Protocol) übernommen. IP-Daten sind in IP-Datagramm und diese sind wiederum in Rahmen eingebettet. In der Transportschicht sind nun die zwei von einander autonome Optionen verfügbar, abhängig von den Diensten der Anwendung des Benutzers, ob TCP oder UDP im Datenfeld des IP-Datagramms codiert werden soll. Sobald die Daten von IP an den richtigen Host übertragen wurden, müssen sie in diesem Rechner an die entsprechende Instanz der Anwendungsschicht weitergegeben werden. Zu den Aufgaben der Transportschicht gehört es, Datenströme in einem Multiplex- und einem Aufspaltungsverfahren zwischen verschiedenen Anwendungen der IP-Schicht zu vermitteln und an die richtigen Anwendungen zu leiten. Die Transportschicht sorgt dabei für fehlerfreie und mit einem Flusskontrollmechanismus ausgestattete verbindungsorientierte Datenübertragungen. Dies gilt auch für die einfache Weitergabe von verbindungslosen IP-Diensten. Ports Sowohl TCP als auch UDP verwenden Port-Adressen, um die Daten an den betreffenden Dienst der Anwendungsschicht zu senden. Ein Port ist eine 16-Bit-Adresse, wobei ein Bereich von 0 bis 255 vordefinierten Ports für bekannte Dienste verfügbar sind; sogenannte "well known ports".
.-----------------------------.
Es sind also bestimmte Adressnummern für die verbreitesten Dienste der Anwendungsschicht, wie zum Beispiel FTP, Telnet, SMTP und HTTP, reserviert. Bei der Entwicklung eines Programms, das mit TCP oder UDP arbeitet, muss daher der zu verwendende Port definiert werden. Um sicherzustellen, dass es nicht zu etwaigen Konflikten kommt, sollte eine Portnummer ausserhalb des Bereichs der well known ports genommen werden. Anstelle einer festen Zuordnung kann jedoch auch eine dynamische Adresszuteilung der Port-Nummern eingesetzt werden, wie dies bei NFS als Funktion mit den Namen "Portmapper" genutzt wird. Sockets Sockets ist im Zusammenhang mit TCP/IP ein häufig verwendeter Ausdruck, welcher ein relativ einfaches aber überaus wichtiges Konzept betitelt. Sockets sind Kennzahlen, die aus der IP-Adresse und Port-Nummern zusammensetzen. Da sowohl die IP-Adresse eines Knotenpunkts - vorausgesetzt alle Knoten arbeiten mit registrierten IP-Adressen - als auch der Port immer eindeutig sind, können mit Hilfe der Sockets Dienste der Anwendungsschicht eindeutig identifiziert werden. Da diese Informationen eindeutig sind, werden sie bei der Prüfsummenberechnung von TCP und UDP miteinbezogen. Damit will sichergestellt werden, dass wenn Datagramme zu einem falschen Host geschickt werden, jene direkt von der Transportschicht des Rechners nicht angenommen werden, wenn die Port-Adresse existiert. Die meisten Dienste der Anwendungsschicht müssen in der Lage sein Mehrfachübertragungen zuzulassen. Die einzelnen Kommunikationen müssen daher unterschieden werden können, damit die Daten an den richtigen Rechner zurückgeschickt werden. Dass mehrere Benutzer remote über Telnet auf einem Rechner, und jeweils über den gleichen TCP-Port verbunden sind, ist nichts ungewöhnliches. Eine Möglichkeit der eindeutigen Identifizierung der verschiedenen Verbindungen bestünde darin, anhand der IP-Adresse den Absender des Datagramms zu ermitteln. In diesem Fall ist es jedoch kaum oder nur sehr schwer möglich zwei verschiedene Benutzer, die mit derselben Anwendung von einem Host aus verbunden sind, voneinander zu unterscheiden. Dieses Problem wird dadurch gelöst, dass die vordefinierten reservierten Port-Adressen (well known ports) nur von Diensten der Server-Anwendungsschicht genutzt werden. Beim Client-Programm wird eine eindeutige Port-Adresse, die von keiner anderen Anwendung des Rechners verwendet wird, gewählt. Auf diese Weise können zwei Verbindungen von einem Client zum gleichen Server leicht anhand der Absender-Sockets unterschieden werden, da jene auf jeden Fall eindeutig sind. Die Anwendungsdienste übermitteln die Daten (IP-Adresse und Port-Nummer des Absender) stets an das Socket, von dem die Daten ausgesandt werden. Bei einigen Diensten, die von gleichgestellten Einheiten der identischen Schicht in differenten Systemen (Peer-to-Peer-Dienste) angeboten werden, wird dieselbe Port-Adresse für die Übertragung und den Empfang der Daten während der Kommunikation verwendet. Es handelt sich hierbei jedoch primär im Routenwahl- und Verwaltungsfunktionen, die für eine Unterscheidung der Ports bei der Rückgabe erforderlich sind. TCP Das Transmission Control Protocol, welches im Schichtenmodell direkt über dem Internet Protocol liegt, sorgt für den verlustfreien Datentransfer. So stellt es z. B. durch Prüfsummenbildung und andere Kontrollmechanismen sicher, dass Dateien, die zur schnelleren Übertragung gesplittet wurden, korrekt und vollständig beim Empfänger ankommen. Es bietet also den Komponenten der Anwendungsschicht einen zuverlässigen und verbindungsorientierten Dienst, in dem es eine bidirektionale Verbindung zwischen den Partnern herstellt. Zuverlässig bedeutet dabei, dass gängige Sicherungsverfahren wie Prüfsummenbildung, Quittungen mit Zeitüberwachung, Sliding-Window-Verfahren und Sequenznummernvergabe angewendet werden. Der Verbindungsaufbau erfolgt in Analogie zum herkömmlichen Telefonsystem. Ein Anrufer sendet einen sogenannten Request an einen Server. Dieser sendet ein Replay an den Anrufer zurück, woraufhin der Datenaustausch stattfindet. Dabei wird die Verbindung so lange aufrecht erhalten, bis sie explizit beendet wird. Der hohe Aufwand für dieses Sicherungsverfahren verursacht eine relativ starke Netzbelastung, so dass TCP für Anwendungen wie dem Login auf fremden Rechnern oder dem Dateitransfer, welche eine hohe Übertragungszuverlässigkeit benötigen, benutzt wird. UDP Nicht alle Dienste auf der Transportebene benötigen eine gesicherte Verbindung zwischen zwei Kommunikationspartnern. Wenn nun zum Beispiel ein Netzwerk als sicher genug gilt, so kann das User Datagram Protocol einen einfachen, verbindungslosen Dienst, welcher keine Datenströme unterhält, sondern die Datagramme unabhängig voneinander transportiert und keine Zustellung garantiert, darstellen. Im Header der UDP-Pakete werden die sich im Spiel befindlichen Port-Nummern und eine kleine Prüfsumme integriert. UDP-Verbindungen gelten grundsätzlich als sehr leicht simulier- und/oder imitierbar, was dieser Protokoll-Art einen nicht sonderlich vertrauenswürdigen Ruf eingebracht hat. Der Grund dafür ist leicht ersichtlich: Es gibt keine Sequenznummern, keinen Handshake und keine Bestätigungspakete. UDP-Applikationen sollten die Hosts unbedingt einem Authentifikationsprozess unterziehen, denn sonst ist die Nutzung der Applikationen durch eine gefälschte interne IP-Senderadress möglich. Man könnte durch-aus auch UDP-Verbindungen von den Partnern der Verbindungen unbemerkt übernehmen, was dann UDP-Hijacking genannt wird. Auf öffentlich zugänglichen System sollte UDP in jedem Falle vermieden werden. |