So funktioniert TCP/IP

So funkioniert TCP/IP

Die Grundlage des Internets ist die Protokollfamilie TCP/IP. Nahezu alle Betriebssysteme beherrschen diese Protokolle, die eine reibungslose Kommunikation über Grenzen hinweg ermöglichen.

 
VON HOLGER REIBOLD

Ohne TCP/IP ist das Internet in seiner heutigen Form undenkbar. Damit die angeschlossenen Rechner überhaupt miteinander kommunizieren können, bedarf es einer gemeinsamen Sprache. TCP/IP wurde ursprünglich für einen Vorläufer des Internet namens ARPANET entwickelt. Die damals definierten Protokolle regeln auch heute noch weitgehend die Kommunikation im Internet. Die Gesamtheit der entwickelten Protokolle bezeichnet man als Internet Protocol Suite. Die beiden wichtigsten Protokolltypen TCP und IP sind zum Synonym für diese Protokollfamilie geworden.

Schichtenmodelle

Grundlage von TCP/IP ist das von der  ISO entworfene Schichtenmodell für die Datenkommunikation. Dieses so genannte  OSI-Modell beschreibt die Grundfunktionen von Netzwerkprotokollen und deren Arbeitsweise. Jede Ebene stellt dabei der darüber liegenden Schicht definierte Funktionen zur Verfügung. Das Modell besteht aus sieben Schichten:

Wie andere Netzwerkprotokolle, ist auch TCP/IP an das OSI-Modell angelehnt. Man spricht auf Grund der schichtenförmigen Abstraktion auch häufig vom TCP/IP Stack (Stapel). Die Internet Protocol Suite ist in vier Schichten unterteilt:

   Anwendungsschicht: Eine Anwendung ist ein Benutzerprozess, der mit anderen Prozessen kommuniziert. Beispiele für Anwendungen sind WWW, FTP, Telnet oder SMTP. Die Schnittstelle zwischen der Anwendungs- und der darunter liegenden Transportschicht wird über Ports und Sockets definiert.

   Transportschicht: Sie ist für die zuverlässige Datenübermittlung zwischen zwei Kommunikationspartnern verantwortlich. TCP und UDP sind Protokolle der Anwendungsschicht.

   Internetworking-Schicht: Sie wird häufig auch als Netzwerkschicht bezeichnet und ist in erster Linie für das Routing zuständig. IP und ICMP sind Protokolle der Netzwerkschicht.

   Netzwerkschnittstellen-Schicht: Sie beschreibt die Schnittstellen zwischen dem Protokoll-Stack und Netzwerkadaptern.

Adressen und Klassen

Internetrechner, auch solche, die nur temporär mit dem Internet verbunden sind, sind mit einer eindeutigen IP-Adresse ausgestattet. Dabei handelt es sich um 32-Bit-lange Adressen, die aus einer Netzidentifikation (Netzwerk-ID) und Benutzeradresse (Host-ID) bestehen. Als Schreibweise für die einzelnen Adressen hat sich eine Vier-Punkt-Notation durchgesetzt. Die einzelnen Bytes der Adresse sind dabei durch Punkte getrennt. Die Größe von Netzwerk-ID und Host-ID ist variabel. Grundsätzlich findet anhand des ersten Byte der Adresse eine Zuordnung zu einer Netzwerkklasse statt. Jeder Netzwerkklasse ist auf diese Weise ein Adressbereich zugewiesen:

 

 externer Link  Class A (1.0.0.0 bis 127.255.255.255): Das erste Bit der Adresse ist auf Null gesetzt. Die ersten acht Bit identifizieren das Netzwerk, die restlichen 24 Bit den Host. Insgesamt sind 127 Class-A-Netze möglich.

 externer Link  Class B (128.0.0.0 bis 191.255.255.255): Bei Class-B-Netzen ist das erste Bit auf Null, das zweite Bit auf eins gesetzt. Die ersten 16 Bit beschreiben das Netzwerk, die anderen 16 Bit sind die Hostadresse.

 externer Link  Class C (192.0.0.0 bis 223.255.255.255) : Diese Netzwerkart erlaubt nur 255 Hosts in einem Netz. Die ersten drei Bit einer Class-C-Adresse bilden dabei die Folge "110". Die ersten 24 Bit identifizieren das Netzwerk, nur acht Bit den Host.

 externer Link  Class D (224.0.0.0 bis 255.255.255.255): Diese Adressen sind für Multicast-Anwendungen reserviert.

 

 
  Klassengesellschaft: Die ersten Bits der IP-Adresse entscheiden über die Netzwerk-Klasse

Zusätzlich ist jede IP-Adresse mit einer Subnetzmaske ausgestattet. Dieser 32-Bit-Wert dient der weiteren Unterteilung großer Netze in kleine, einfacher zu verwaltende Blöcke. Vor allem Class-A- und Class-B-Netze sind auf diese Weise aufgeteilt. Die Ermittlung des Netzwerk- und Hostanteil einer IP-Adresse mit Hilfe der Subnetzmaske ist einfach: Alle Bits, die in der Subnetzmaske gesetzt sind, zählen in der IP-Adresse zum Netzwerkteil. In der Vier-Punkt-Schreibweise ist die IP-Adresse 10.21.43.200 mit der Subnetzmaske 255.255.255.0 eine Class-C-Adresse.

Öffentliche und Private Adressen

Für die Verwaltung von IP-Adressen ist in erster Linie die (Internet Assigned Numbers Authority) zuständig. Diese hat wiederum die Vergabe der IP-Adressen weltweit an drei regionale Organisationen abgegeben. Für Nord- und Südamerika ist ARIN, für Europa ist RIPE und für Asien APNIC zuständig. Die Details für die Vergabe von IP-Adressen sind in RFC 2050 definiert. In der Praxis erfolgt die Reservierung von einer oder mehreren IP-Adressen immer über einen Internet Provider.

Nicht alle TCP/IP-Netzwerke sind untereinander über das Internet verbunden. Speziell für isolierte, lokale TCP/IP-basierte Netzwerke sind drei Adressbereiche in den Netzwerkklassen A, B und C reserviert. Für das Internet weisen diese Adressen einen interessanten Status auf: "Known not to exist". Hosts mit diesen Adressen dürfen nicht direkt an das Internet angeschlossen sein. Auf diese Weise stehen die Adressbereiche für beliebig viele lokalen Netze gleichzeitig zur Verfügung. Der Vorteil dieser Adressen: Zur Verwendung ist keine vorhergehende Reservierung bei IANA und Co. notwendig.

Private IP-Adressen, die in RFC 1918 definiert sind:

 externer Link  10.0.0.0 bis 10.255.255.255: Class A

 externer Link  172.16.0.0 bis 172.31.255.255: Class B

 externer Link  192.168.0.0 bis 192.168.255.255: Class C

Das Internet Protocol

Das Internet Protocol (IP) ist die Grundlage der Internet Protocol Suite. Es zerlegt die zu übertragenden Datenmengen in IP-Datagramme, und übermittelt diese zum Empfänger. Datagramme sind die kleinste Einheit, die zwei Kommunikationspartner in TCP/IP-basierten Netzwerken austauschen. Als verbindungsloses Protokoll Gewähr leistet IP nicht, das die Datagramme auch tatsächlich ihr Ziel erreichen. Die einzelnen Pakete behandelt IP unabhängig voneinander. Sendet ein Host nacheinander zwei Datagramme zur gleichen Zieladresse, erfolgt auch das Routing zum Bestimmungsort unabhängig voneinander. Dabei ist es durchaus möglich, dass das zweite Paket vor dem Ersten ankommt. Für die Reihefolge ist der Client zuständig: Dieser fügt die einzelnen Datagramme in der richtigen Reihenfolge wieder zu einem Datenblock zusammen.

[11 kByte]
Festgelegt: Die ersten 24 Bytes eines IP-Pakets enthalten den Header. Danach folgen bis zu 65.535 Bytes mit Daten

IP-Datagramme bestehen aus einem mindestens 20-Byte-großen Header und dem Datenblock, der maximal 65.535 Bytes lang sein darf. Die einzelnen Blöcke des Headers sind 32 Bit groß.

Der IP-Header im Detail

Die wichtigsten Informationen finden sich im Header eines IP-Pakets. Ohne diese Informationen wäre eine Datenübermittlung nicht möglich:

 

 

[11 kByte]
Byte für Byte: Der IP-Header im Detail

 

 

Der IP-Header verfügt über 14 Parameter:

   VERS legt die IP-Versionsnummer fest. Momentan ist Version 4 aktuell, wird aber mittelfristig von Version 6 (IPnG, Internet Protocol next Generation) abgelöst.

   HLEN ist die Länge des Header in 32-Bit-Werten.

   Service Type definiert die Dienstqualität, die IP-Datagramme benötigen. Dabei werden Prioritäten vergeben, beispielsweise normal oder kritisch.

   Total Length bestimmt die Gesamtlänge des Datagramms. Die Differenz zwischen Gesamtlänge und HLEN bestimmt die Länge des Datenteils.

   ID ist ein fortlaufender Wert, den der Empfänger zum Zusammenfügen der Datagramme verwendet.

   FLG zeigt an, ob dem Datagramm weitere Datagramme folgen.

   Fragment Offset beinhaltet Informationen über die Position eines Datagramms zu anderen Datagrammen. Mit Hilfe des Fragment Offset kann der Empfänger die Datagramme in der richtigen Reihenfolge zusammensetzen.

   TTL oder auch Time-to-Live definiert die Lebensdauer eines Datagramms. Dieser Wert wird beim Passieren eines Routers um eins verringert. Sobald der Wert auf Null sinkt, wird das Datagramm verworfen. Dies soll verhindern, das fehlgeleitete Datagramme praktisch endlos von Router zu Router wandern.

   Protocol zeigt das darüberliegende Protokoll an, für das die Datenpakete bestimmt sind. In der Praxis steht beispielsweise der Wert 6 für TCP oder 17 für UDP.

   Header Checksum ist eine Prüfsumme, um die Integrität der Header-Daten sicherzustellen. Die Summe wird aus den TTL-, FLAG und Fragment-Offset-Werten gebildet. Jeder Router aktualisiert diesen Wert, da sich die TTL ändert.

   Source IP Address ist die IP-Adresse des Senders.

   Destination IP Address ist die IP-Adresse des Zielrechners.

   IP Options ist ein variables Header-Feld, das optionale Informationen wie beispielsweise Sicherheitsrestriktionen enthält.

   Padding füllt das Optionsfeld bis zum nächsten 32-Bit-Wert auf.

Routing: So kommen die Daten ans Ziel

Der Sender eines IP-Datagramms kennt lediglich die Zieladresse, nicht aber den Weg dorthin. Jede Station auf dem Weg des Datagramms zum Empfänger muss eine Entscheidung über die Wahl des weiteren Weges fällen. Man bezeichnet diesen Vorgang auch als Routing. Die Wahl einer bestimmten Route ist von verschiedenen Kritierien abhängig. Der Sender übergibt diese Aufgaben einem Standard-Router, der für die Zustellung von Datagrammen in andere Netze zuständig ist. Zwischen zwei Hosts liegen in der Regel mehrere Router. Jeder Router verfügt über eine Routing-Tabelle, auf Grund derer der Router die nächste Station für das Datagramm bestimmt. Jeder Eintrag in der Routing-Tabelle ist durch vier Informationen spezifiziert:

 

 externer Link  Die Zieladresse: Dabei kann es sich um eine IP-Adresse oder ein Subnetz handeln. Der Router vergleicht die Zieladresse des Datagramms mit diesem Eintrag, um festzustellen, ob die Route für das Datagramm passend ist.

 externer Link  Die IP-Adresse des Standard-Routers, der die IP-Datagramme für diese Route entgegennimmt und an seinen Bestimmungsort oder den nächsten Router weiterleitet.

 externer Link  Die Flags bestimmen, ob es sich bei der Zieladresse um eine einzelne IP-Adresse oder ein ganzes Netzwerk handelt. Angabe der Netzwerkschnittstelle, an die das Datagramm gesendet wird, beispielsweise ein Netzwerkadapter.

Routing am Beispiel

Eine Routing-Tabelle könnte beispielsweise wie folgt aussehen. Dieses Gerät verfügt über zwei Schnittstellen, das standardmäßige Loopback-Device und eine Ethernet-Karte:

 
Destination Gateway Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 U 0 0 1 eth0
127.0.0.1 0.0.0.0 UH 0 0 0 lo
0.0.0.0 192.168.1.1 UG 1 0 0 eth0
192.168.2.0 192.168.1.2 UGD 1 0 0 eth0

Beim Routing-Vorgang werden drei Aktionen ausgeführt. Zunächst sucht der Router nach einem Eintrag in seiner Routing-Tabelle, der die IP-Adresse (Netzwerk ID und Host ID) des Ziels beinhaltet. Falls ein solcher Eintrag vorhanden ist, wird das Datagramm an den entsprechenden Router zur direkten Übermittlung übergeben. Ist ein solcher Eintrag nicht vorhanden, sucht der Router lediglich nach der Netzwerk-ID der Zieladresse. Gelingt auch das nicht, wird der Standard-Router ("default") gesucht und das Paket an diesen übergeben. Schlägt auch dieser Schritt fehl, ist das Datagramm nicht zustellbar.

Prinzipiell unterscheidet man zwischen zwei Routing-Verfahren: statisches und dynamisches Routing. Bei statischem Routing ist den Datagrammen ein festgelegter Weg vorgeben. Dynamisches Routing verwendet einen wesentlich flexibleren Mechanismus, bei dem sich Router untereinander über den Weg einigen. Die Kommunikation zwischen den Routern erfolgt über spezielle Router-Protokolle wie RIP (Router Information Protocol) oder IGRP (Interior Gateway Routing Protocol).

Kontrollmechanismus für IP: ICMP

Treten Fehler bei der Übertragung auf, kommt das Internet Control Message Protocol (ICMP) zum Einsatz. ICMP kennt dabei Fehler- und Statusmeldungen. Ist Beispielsweise ein Host nicht erreichbar, sendet ein Host oder Router die ICMP-Meldung "destination unreachable" zum Absender. Die Interpretation der Nachricht ist vom Absender der Fehlermeldung abhängig: Wurde die Nachricht von einem Router generiert, ist der Zielhost nicht erreichbar. Die gleiche Nachricht vom Zielrechner bedeutet, das ein angegebener Port nicht ansprechbar ist.

Neben der Fehlerübermittlung dient ICMP zur Kontrolle: So verwendet der Ping-Befehl ICMP-Pakete, um die Laufzeit einer Nachricht zwischen zwei Hosts zu ermitteln.

Die Übermittlung von ICMP-Nachrichten erfolgt innerhalb von IP-Datagrammen. Sie bestehen aus drei Headerfeldern und dem Datenblock. Das Headerfeld type gibt den Nachrichtentyp an. Man unterscheidet dabei zwischen Fehler- und Statusmeldungen. Im Feld code sind die Fehlercodes für das jeweilige Datagramm enthalten. Die Interpretation ist dabei vom Nachrichtentyp abhängig. Das Headerfeld checksum enthält eine Prüfsumme.

TCP: Transmission Control Protocol

Protokollen TCP und UDP. Das TCP ermöglicht den Auf- und Abbau von Verbindungen zwischen zwei Hosts. Zusätzlich bietet TCP Fehlererkennung und Datenfluss-Steuerung über die gesamte Verbindung. TCP ersetzt dabei das IP-Protokoll nicht, sondern verwendet dessen Fähigkeiten zum Versand: Alle TCP-Segmente werden in IP-Datagramme gekapselt und zum Ziel gesendet.

Die wichtigste Eigenschaft von TCP ist, dass es die Zuverlässigkeit der Datenübermittlung zwischen den Endpunkten Gewähr leisten kann. Dabei übermittelt der Sender per TCP die Datensegmente solange, bis die Gegenseite den Erhalt quittiert. Auch TCP spaltet die Quelldaten vor dem Versand auf: TCP-Segmente sind dabei maximal 64 KByte groß. Der Aufbau der Segmente ist analog zu den IP-Datagrammen: Auf den TCP-Header mit Steuerinformationen folgt ein Datenblock. Für die Fehlerkontrolle erzeugt TCP eine Prüfsumme, anhand derer der Empfänger überprüfen kann, ob die Daten fehlerfrei übertragen wurden. Zudem kann TCP mehrere Verbindungen zwischen zwei Hosts verwalten, in dem es den Segmenten einer Verbindung eine Portnummer zuweist. Die Portnummer dient zusätzlich zur Identifikation der zuständigen Anwendung in der Anwendungsschicht. Mehr Informationen zu den Ports finden Sie im Abschnitt "Das Nebenstellenprinzip: Ports für TCP und UDP".

TCP-Header im Detail

Genau wie der IP-Header umfasst der Kopf eines TCP-Pakets 24 Bytes.

Der TCP-Header besitzt zehn Headerfelder:

   Source Port definiert den Quellport der Daten.

   Destination Port bestimmt den Zielport der Daten.

   Die Sequence Number gibt die Position der Daten des Segments innerhalb des ausgetauschten Datenstroms in Senderichtung an.

   Die Acknowledgement Number ist die Bestätigungsnummer für Empfangsquittungen des Empfängers an den Sender.

   Der Data Offset definiert die Länge des TCP-Headers.

   Das Reset-Feld ist ein reservierter Bereich.

   Die Flags URG, ACK, PSH, RST, SYN und FIN bestimmen verschiedene TCP-Aktionen, beispielsweise setzt RST (reset) eine Verbindung zurück.

   Window dient der Fluss-Steuerung und legt die Anzahl der Bytes fest, die der Empfänger nach einem bestätigten Byte empfangen kann.

   Checksum ist eine Prüfsumme, die vom Sender übermittelt und vom Empfänger bestätigt werden muss.

   Der Urgent Pointer zeigt auf wichtige Daten, die Priorität haben. Im Feld Options stehen optionale Headerinformationen wie beispielsweise die maximale Segmentgröße.

   Padding ist wie bei den IP-Datagrammen ein "Füllfeld", um das Optionsfeld auf 32-Bit-Länge aufzufüllen.

User Datagramm Protocol

UDP ist wie TCP ein Protokoll der Transportschicht, unterscheidet sich aber grundlegend von TCP. UDP ist ein unsicheres Protokoll, das die korrekte Übermittlung der Daten zum Zielhost nicht sicherstellt. Der zentrale Vorteil: Da keine Steuerung und Fehlerkontrolle erfolgt, ist der Protokolloverhead entsprechend gering. Auch die Übertragungsgeschwindigkeit steigt gegenüber TCP durch die insgesamt kleinere Datenmenge. Der Einsatz von UDP ist überall dort sinnvoll, wo nicht Gewähr leistet sein muss, dass die Daten ihr Ziel erreichen. Ein Beispiel ist hierfür das Domain Name System. (a Verweis auf Artikel). Die Anwendung selbst muss in diesem Fall die Fehlerkontrolle übernehmen und Daten neu anfordern. Wie auch TCP verfügt UDP über Portnummern, um die Daten einer Anwendung zuzuordnen.

Bild 4: Der UDP-Header im Detail.

Der UDP-Header ist 8 Byte lang und weist nur vier Headerfelder auf: Source Port Number und Destination Port Number sind identisch zum TCP-Header und definieren den Quell- und Zielport der Daten. Das Headerfeld Length definiert die Gesamtlänge des UDP-Paket in Bytes. Checksum enthält schließlich einen Prüfsummenwert, der aus den übrigen Headerinformationen und den UDP-Daten erzeugt wird.

Nebenstellen: Ports für TCP und UDP

Anwendungen, die per TCP mit einem Serverprozess kommunizieren wollen, müssen diesen exakt ansprechen. Dies geschieht über die so genannten Ports. Die Transportschichtprotokolle TCP und UDP sehen für die Adressierung der Anwendungen auf der Anwendungsebene Portnummern vor. Ein Host kann auf diese Weise mehrere Datenströme gleichzeitig zu einem anderen Rechner senden. Auf der Empfängerseite findet dann anhand der Portnummern eine Zuordnung der Daten zu verschiedenen Programmen statt. Ein Beispiel ist die Kommunikation zwischen Webbrowser und Webserver: Für HTTP ist der TCP-Port 80 reserviert. Der Browser sendet eine Anfrage auf Port 80 zu einem Host. Dort leitet TCP die Daten an die für Port 80 zuständige Anwendung - meist der Webserver - weiter. Gleichzeitig kann auf dem selben Host auch ein FTP-Server auf Port 21 Daten versenden, ohne dass sich die Anwendungen gegenseitig beeinflussen.

Portnummern bestehen aus 16-Bit-breiten Werten. Theoretisch kann ein Host somit bis zu 65.535 verschiedene TCP/UDP-Verbindungen aufbauen.

Man unterscheidet drei Porttypen:

   Well-Known: Bei diesem Typ handelt es sich um Portnummern, die fest einer Anwendung zugeordnet sind. Sie umfassen den Bereich 1 bis 1023. Zur Ausführung einer Serveranwendung in diesem Bereich sind zumeist Administratorrechte erforderlich. Darunter fallen beispielsweise HTTP mit Port 80 oder FTP mit Port 20 und 21.

   Registered: Einen Port aus dem Bereich Registered (1024 bis 49151) kann jeder Entwickler beantragen.

   Dynamic/Private: Aus diesem Bereich können Entwickler von Serverprozessen schöpfen und eine geeignete Nummer für bestimmte Dienste auswählen. Dieser Bereich unterliegt keiner Kontrolle.

Portnummern sind nicht auf eines der beiden Transportprotokolle beschränkt. Vielmehr können TCP und UDP gleiche Ports belegen. Die Portnummer 53 in TCP ist nicht identisch mit der Portnummer 53 in UDP. IP-Adresse samt Portnummer spezifiziert einen Kommunikationsendpunkt, den so genannten Socket. Die  Liste der aktuell vergebenen Portnummern wird von der  IANA verwaltet. (mhe)