Die Grundlage des Internets ist die
Protokollfamilie TCP/IP. Nahezu alle Betriebssysteme beherrschen diese
Protokolle, die eine reibungslose Kommunikation über Grenzen hinweg
ermöglichen.
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.
OSI-Schichtenmodell
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überliegenden
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:
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:
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.
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.
Class C (192.0.0.0 bis 223.255.255.255) :
Diese Netzwerkarte 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.
Class D (224.0.0.0 bis 255.255.255.255):
Diese Adressen sind für Multicast-Anwendungen reserviert.
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 IANA (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:
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.
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 verfügt über
14 Parameter:
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.
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
Standardrouter, 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 Routingtabelle, auf Grund dessen
der Router die nächste Station für das Datagramm bestimmt. Jeder
Eintrag in der Routingtabelle ist durch vier Informationen spezifiziert:
- Die IP-Adresse des Standardrouters, der die IP-Datagramme für diese Route entgegennimmt und an seinen Bestimmungsort oder den nächsten Router weiterleitet.
- 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.
Prinzipiell unterscheidet man zwischen zwei Routingverfahren: 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 Routerprotokolle 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.
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 der 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.
Der TCP-Header besitzt zehn Headerfelder:
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.
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.
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.
Das Nebenstellenprinzip: 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:
- 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.