Druckversion

Protokolle

Wozu Protokolle? Eine nicht ganz ernst zu nehmende Ausarbeitung. Weiter

Kommunikationsprobleme sind allgegenwärtig. Sei es der juristische Kauderwelsch der aktuellen Fassung der Steuererklärung, der selbst gestandenen Juristen den Schweiß auf die Stirn treibt. Seien es die Nuancen des englischen Humors, die es dem Außenstehenden schier unmöglich machen, Ernst von Ironie zu unterscheiden. Oder die Sprachbarriere allgemein, die die Verständigung zwischen den Nationalitäten ungemein erschwert...

Mensch weiß sich oft zu helfen. Er engagiert einen Steuerberater, schmunzelt verständnisvoll bei einer Backgammon-Runde in feiner englischer Gesellschaft oder gestikuliert, wenn der magere Wortschatz eine Beschreibung seines Herzenswunsches nicht zulässt.

Bei der Kommunikation zwischen Computern ist das ungleich problematischer. Hier gibt es (noch) keine intelligenten Programme, die fehlende oder zweifelhafte Informationen in Eigenregie recherchieren. Hier gibt es keine einheitliche Sprache und es gibt für jede Anforderung dutzende Client-Programme, die diese formulieren und ebenso dutzende Server, die sie erfüllen. Und jeder Client sollte mit jedem Server zusammen arbeiten und jeder Server muss jedem Client antworten können.

Die Lösung für derartige Probleme ist die Schaffung allgemein gültiger Regeln, so genannter Protokolle.

OSI Referenzmodell - Spielzeug der Theoretiker Zurück Anfang Weiter

Der Nebentitel Spielzeug der Theoretiker soll verdeutlichen, dass dieses Modell praktisch kaum konsequente Anwendung findet. Dazu sind manche Definitionen zu »schwammig«, um verbindliche Strukturen zu schaffen. Und dennoch verhalf es, das Verständnis für die Prinzipien des Datenaustauschs zu schärfen.

Beginnen wir mit einem Beispiel und betrachten die Kommunikation zwischen einem NIS-Server und einem Client. Um die Bedeutung der Schichten des 7-Schichten-OSI-Modells zu veranschaulichen, nehmen wir an, dass der Server auf einem 64-Bit-Rechner und der Client auf einem 32-Bit-Rechner läuft, d.h. die Daten liegen auf den beteiligten Rechnern in unterschiedlichen Formaten vor.

Schichten des OSI-Modells

Abbildung 1: Schichten des OSI-Modells

Ablauf der Kommunikation: Der NIS-Client sendet eine Anfrage. Da er das vom Server verstandene Datenformat nicht kennen kann, bringt er diese in ein allgemeines Format (im Zusammenhang mit RPC kommt meist External Data Representation XDR zum Einsatz). Der Remote Procedure Call organisiert den »entfernten Prozeduraufruf«, indem er die Daten zusammen mit Informationen zum erwünschten Dienst verpackt. Auf Transportebene werden u.a. die Daten in Blöcke bestimmter Größe zerlegt, die Vermittlung übernimmt die Adressierung des Zielrechners auf IP-Ebene. Die Sicherungsschicht ist schon recht Hardware spezifisch und kümmert sich um die fehlerfreie Übertragung auf dem eigentlichen Medium. Schließlich erfolgt die Übertragung über ein physisches Medium, dessen Charakteristika durch das Protokoll der Übertragungsschicht spezifiziert ist. Auf Serverseite wird das Paket der Schicht 2 übergeben. Stellt diese die Fehlerfreiheit fest, erreicht es die Vermittlungsschicht. Auf Transportebene werden die vom Sender erzeugten Pakete zu der kompletten Nachricht zusammen gefügt. Der RPC-Server-Prozess wertet die Anforderungen aus. Sind sie erfüllbar, werden die Daten ins benötigte Format übertragen und der NIS-Server konsultiert. Dieser generiert eine Antwort und das Spiel wiederholt sich mit verteilten Rollen...

Widmen wir uns den einzelnen Schichten und ihren Aufgaben.

Übertragungsschicht

Diese Schicht korrespondiert mit der zugrunde liegenden Hardware. Protokolle dieser Schicht legen die Eigenschaften der Schnittstellen fest wie Anschlusseigenschaften, zulässige Übertragungsraten, Signalpegel und elektrische Kodierung der einzelnen Bits (z.B. Modulationsverfahren bei Modems)...

Verbreitete Vertreter dieser Protokolle sind RS-232 (serielle Schnittstelle) und X.21.

Sicherungsschicht

Protokolle dieser Schicht gewährleisten die Unversehrtheit der übertragenen Daten. Dazu verpacken sie die Daten in für das Medium zulässige Einheiten, steuern den Fluss der Übertragung und fügen Prüfsummen an die eigentlichen Datenpakete an, anhand derer der Empfänger den Zustand der Daten überprüfen kann. Im Fehlerfall kümmern sich die Protokolle dieser Schicht automatisch um eine Wiederholung der Übertragung.

Hier offenbart sich eine Schwäche des OSI-Modells, das die Grenzen der Schichten nicht allzu konsequent gezogen hat. So unterteilen die Realisierungen lokaler Netzwerke diese Schicht nochmals in Media Access Control (MAC) und Logical Link Control (LLC). So organisiert z.B. Ethernet den Zugang zum Übertragungsmedium mittels einer MAC-Schicht (oft CSMA/CD - Carrier Sense Multiple Access with Collision Detect), während LLC eine Schnittstelle zu übergordneten Diensten darstellt.

Weitere wichtige Protokolle der Sicherungsschicht sind High-Level Data Link Control HDLC, das darauf basierende Point-to-Point-Protocol PPP, und das Serial Line Protocol SLIP.

Vermittlungsschicht

Auch als Netzwerkschicht bezeichnet, ist diese Schicht für den Aufbau eines virtuellen Kommunikationskanals verantwortlich. Dazu zählen das Auffinden eines Weges zum Zielrechner, die Vermittlung der Nachrichten und Pakete (eine »lange« Nachricht wird ggf. in einzelne Pakete unterteilt).

Verfolgt man den Weg eines Paketes vom eigenen Rechner hin zu einem Rechner »am anderen Ende der Welt«, so stellt man fest, dass die Route durch zahlreiche Teilnetze führt, denen mitunter vollkommen unterschiedliche Technologien (Lichtwellenleiter, Funk, Ethernet, Modem...) zugrunde liegen. Für jeden Übergang in ein neues Teilnetz wird ein Protokollwechsel in den »unteren« Schichten notwendig. An welchen Rechner eines solchen Teilnetzes das Paket als nächstes zu »routen« ist, bleibt Angelegenheit der Vermittlungsschicht.

Den bekanntesten Vertretern dieser Schicht, IP, ICMP und ARP, wenden wir uns nachfolgend zu. Weitere Protokolle sind X.25, Exterior Gateway Protcol EGP, Border Gateway Proctocol BGP, Open Shortest Path First OSPF und Routing Information Protocol RIP.

Transportschicht

Diese Schicht stellt den »anwendungsorientierten« Schichten einen logischen Übertragungskanal zur Verfügung, so dass diese ihre Daten sequentiell an die Schnittstelle senden. Protokolle der Transportschicht steuern die Blocklängen, die Geschwindigkeit, mit der Pakete an die unteren Schichten weiter gegeben werden und realisieren (oft) eine Fehlersicherung.

Damit sich Sender und Empfänger auch verstehen, muss auf beiden Seiten dasselbe Transportprotokoll zum Einsatz gelangen, d.h. beide Kommunikationspartner müssen »dieselbe Sprache sprechen«.

Bekannte Protokolle sind TCP und UDP.

Sitzungsschicht

Protokolle der Sitzungsschicht realisieren die logische Adressierung, d.h. sie sind u.a. zuständig, einen Zielrechner zu finden, der die geforderte Anforderung erfüllen kann. Weitere Funktionen sind Nutzeridentifikationen, die erneute Verbindungsaufnahme nach einem Abbruch, Wechsel der Kommunikationsrichtung usw...

Zu den Protokollen zählen der Remote Procedure Call und LU6.2.

Darstellungsschicht

Ein Protokoll der Darstellungssicht organisiert die Umwandlung von Daten und Texten in ein bestimmtes Format. Auch die Terminalemulationen ordnen sich in diese Schicht ein.

XDR und ASN.1 zählen zu dieser Gruppe.

Anwendungsschicht

Letztlich bilden die Protokolle der Anwendungsschicht die Schnittstelle zu den Anwendungsprogrammen.

Mit FTP und HTTP seien nur zwei Vertreter erwähnt.

Der TCP/IP-Protokollstack - Die Praxis Zurück Anfang Weiter

TCP/IP vs. OSI-Modell

Abbildung 2: TCP/IP vs. OSI-Modell

Die TCP/IP-Architektur hatte sich bereits durchgesetzt, als die International Standardisation Organisation (ISO) ihr Modell eines Internet-Protokollstacks Open System Interconnection (OSI) veröffentlichte. Letztlich basierte das OSI-Modell auf den Erfahrungen von TCP/IP, aber es konnte sich bis heute in der Praxis nicht durchsetzen.

Der Grund für den Erfolg des TCP/IP-Ansatzes ist nicht allein in der BSD-Implementierung zu suchen. Es hat sich auch gezeigt, dass die gewählte Struktur den Zusammenhängen zwischen den Komponenten der Hardwareebene wie auch der Anwendungsebene besser gerecht wird. So liefern Hersteller der Übertragungstechnik die Software der Ebenen 1 und 2 mit dieser aus, während der Anwendungsentwickler seine Applikation mit Eigenschaften der »oberen« OSI-Schichten ausstattet.

Nicht zuletzt verfügt jedes Betriebssystem, das den Zugang zum Internet ermöglicht, über eine Implementierung des TCP/IP-Protokollstacks.

Im weiteren Verlauf geben wir zu den beschriebenen Protokollen deren Einordnung in das OSI-Referenz-Modell an.

Sicherungsschicht: Das Point to Point Protocol Zurück Anfang Weiter

Point to Point Protocol

Abbildung 3: Point to Point Protocol

Das Point-to-Point-Protokoll ist eine Erweiterung von HDLC und ermöglicht permanente Punkt-zu-Punkt-Verbindungen. Häufigster Einsatzbereich sind Wählverbindungen (Modem).

Das enthaltene Protokollfeld ermöglicht die Unterstützung beliebiger Vermittlungsprotokolle; die Prüfsumme erlaubt die Verifizierung des Dateninhalts.

Als optionale Eigenschaften können Implementierungen Folgendes enthalten:

  • Einwahl nach Bedarf, Verbindungsabbau nach Zeit- oder Gebührenüberschreitung
  • Parallele Verwendung mehrerer Leitungen
  • Einfache Filtermechanismen
  • Komprimierung der Daten und/oder des Headers

Das PPP handelt mit der Gegenseite eine Maximale Empfangspaketgröße aus, das ist der Grund für den verzögerten Verbindungsaufbau über analoge Telefonleitungen.

Sicherungsschicht: Das Serial LIne Protocol Zurück Anfang Weiter

Serial Line Protocol

Abbildung 4: Serial Line Protocol

Das Serial Line Protokoll ist das zweite Protokoll der Sicherungsschicht, das bei Modemverbindungen zum Einsatz gelangt. Wie der Name bereits besagt, dient es der Verbindung zweier Rechner über eine serielle Leitung. Als Protokoll der Schicht 3 kommt allerdings einzig IP in Frage; auch beinhaltet das Protokoll keinerlei Sicherungsmaßnahmen.

Mögliche Einsatzgebiete sind sichere Leitungen, bspw. ein Nullmodemkabel.

Auf SLIP baut das CSLIP (Compressed SLIP) auf, das den Header von TCP-Paketen nach einem Verfahren von Van Jacobsen komprimiert.

Vermittlungsschicht: Das Address Resolution Protocol Zurück Anfang Weiter

Address Resolution Protokoll

Abbildung 5: Address Resolution Protocol

Während im Internet Pakete anhand ihrer IP-Adresse vermittelt werden, erfolgt in lokalen Netzen die Adressierung mittels Hardwareadressen. So besitzt jede Ethernetnetzwerkkarte eine (weltweit) eindeutige 48 Bit lange Adresse.

Um nun ein IP-Paket vermitteln zu können, muss ein Rechner die Hardwareadresse des Rechners kennen, an den das Paket als nächstes zu senden ist (Bis ein Paket seinen Bestimmungsort erreicht, durchläuft es mitunter zahlreiche Rechner. In jedem dieser Zwischenknoten muss entschieden werden, wohin das Datenpaket im nächsten Schritt zu senden ist. Auf dieses als Routing bezeichnete Verfahren werden wir später eingehen).

Für die Adressermittlung bieten sich mehrere Vorgehensweisen an:

  • Umsetzung von IP- in Hardwareadressen mittels statischer Tabellen
  • Verwendung eines Algorithmus zur Berechnung der Hardwareadresse aus der IP-Adresse
  • Verwendung dynamischer Tabellen, die regelmäßig aktualisiert werden

In der großen, weiten Welt des Internets ist nichts statisch. Rechner kommen hinzu oder gehen vom Netz, Rechner erhalten eine neue IP-Adresse oder eine andere Netzwerkkarte... die Zuordnung mittels statischer Methoden zu versuchen, würde jeden Administrator zum Ausdauerathleten ausbilden.

Ein Algorithmus, der 48 Bit auf derer 32 abbildet, kann niemals ein eindeutiges Ergebnis liefern, zumal eine Gruppierung von Rechnern eines bestimmten Bereiches zu einem Subnetz unmöglich realisierbar wäre.

Bleibt der dynamische Aufbau von Tabellen. Ein Rechner, der ein IP-Paket senden möchte, schaut nun erst einmal in seiner ARP-Tabelle nach, ob ein zugehöriger Eintrag existiert. Wenn ja, verwendet er die gespeicherte Hardwareadresse bereits. Wenn nein, kommt das Address Resolution Protocol zum Zuge. Der Rechner sendet nun einen Broadcast (eine Nachricht, die gleichzeitig an mehrere Rechner eines zumeist lokalen Netzwerkes geht) aus, mit der Bitte, dass der Rechner, zu dem die IP-Adresse gehört, seine Hardwareadresse übermitteln möge. Genau jener Rechner sendet darauf hin eine Antwort. Erst jetzt kann der Rechner das IP-Paket zu seinem nächsten Bestimmungsort schicken. Die soeben ermittelte Hardwareadresse bekommt ihren Platz in der ARP-Tabelle (»Caching«), um im sehr wahrscheinlichen Falle einer folgenden Übermittlung sofort den Adressat parat zu haben.

Diese ARP-Tabelle ist allerdings in ihrer Kapazität beschränkt, somit werden ältere Einträge zyklisch entfernt (meist nach 10 Minuten des Nichtgebrauchs). Das Verfahren hat den Vorteil, dass die Tabelle auch auf Veränderungen im Netz reagiert, weil bspw. die IP-Adresse einem anderen Rechner zugewiesen wurde...

Vermittlungsschicht: Das Internet Protocol Zurück Anfang Weiter

Die heute gebräuchlichen Adressen des Internet-Protokolls sind 32 Bit lang, die häufigste Notation erfolgt byteweise als Dezimalzahl, bspw. »127.211.7.9«. Der Mathematiker errechnet rasch, dass mit 32 Bit 232 = 4.294.967.292 Rechner adressierbar wären. Der Praktiker interveniert, dass sich nicht alle Adressen nutzen lassen, da etliche Adressen und Adressbereiche für bestimmte Funktionen reserviert sind. Auch existieren genügend Lücken im Adressraum, da IP's im Block an lokale Netzwerke vergeben werden, diese aber nur selten ihr Kontingent voll ausschöpfen.

Fazit ist, dass schon heute die Zahl der verfügbaren Adressen den Bedarf bei weitem nicht mehr decken kann und eine Aufweitung der Adressen erforderlich ist. Aus diesem Grund steht der designierte Nachfolger des korrekt als IPv4 bezeichneten Protokolls seit Jahren (erste Spezifikation 1995) in den Startlöchern. Anliegen dieses IPv6 ist nun die Definition eines Protokolls der Vermittlungsschicht, das mit 128 Bit Adressen arbeitet. Die damit erzielte Größe erscheint übertrieben (jedem Quadratmillimeter auf dem Globus ließen sich hiermit ca. 667 Billiarden IP's zuweisen), jedoch ist man auf weite Sicht auf der sicheren Seite.

Mit dem Adressformat nach IPv4 befasst sich der Abschnitt Netzwerkstrukturen, IP-Adressen.

Eigenschaften des IPv4

Bei der immensen Bedeutung, welche gerade dieses Protokoll für die Paketvermittlung im Internet erlangt hat, lohnt sich ein tieferer Einblick in dessen Fähigkeiten.

Zunächst gilt zu vermerken, dass es sich um ein verbindungsloses Protokoll handelt, d.h. es arbeitet, ohne dass eine Verbindung zum Partner zuvor aufgebaut wurde (analog zum Unterschied zwischen einem Telegramm und einem Telefonat). Die maximale Paketgröße beträgt 65535 Bytes. Ein Paket durchläuft auf seinem Weg zum Empfänger meist verschiedenste Subnetze, die ihrerseits nur eine kleinere Paketgröße unterstützen. Das IP beinhaltet deswegen einen Mechanismus zur Fragmentierung von Paketen, d.h. dass ein für ein zu durchlaufendes Subnetz zu großes Datenpaket zerlegt wird und nun mehrere IP-Pakete ihren Weg zum Empfänger suchen. Der Zusammenbau der Paketteile erfolgt erst beim endgültigen Empfänger, da die Teilpakete durchaus auf unterschiedlichen Routen ihr Ziel finden.

Eine Prüfsumme stellt die Unversehrtheit des IP-Kopfes sicher, nicht jedoch die der enthaltenen Daten. Deren Überwachung obliegt dem Protokoll der nächsthöheren Schicht; ein Code im IP-Kopf (Protokoll-Feld) verweist auf den Typ des Protokolls (bspw. steht eine 6 bei TCP und eine 17 bei UDP).

Die letzte erwähnte Eigenschaft, die die Lebensdauer eines IP-Pakets begrenzt, garantiert, dass ein nicht vermittelbares Paket nicht endlos im Netz kursiert, sondern nach Ablauf seiner Lebenszeit verworfen wird. Früher wurde hier tatsächlich mit einer Zeiteinheit gearbeitet, jedoch wich diese bald der maximalen Anzahl Stationen (»Hops«), die ein Paket maximal durchlaufen darf. Jeder Rechner, der das Paket weiterleitet, verringert diesen Wert um 1. Erreicht er in einem Rechner den Wert 0 und handelt es sich nicht um den Zielrechner, so sendet dieser Rechner ein ICMP-Protokoll an den Absender und verwirft das eigentliche Paket.

Wichtige Felder des IPv4

Internet Protocol Version 4 (IPv4)

Abbildung 6: Internet Protocol Version 4 (IPv4)

Die Bedeutung mancher Felder ergibt sich schon aus deren Namen, diejenige, deren Bedeutung nicht sofort ersichtlich ist, sollen nun erläutert werden:

Versionsnummer

Version des Protokolls, also 4 bei IPv4 und 6 bei IPv6

Länge

Größe des IP-Kopfes in Worten (32 Bit = 1 Wort); hierdurch ist die Angabe von Optionen variabel

Servicetyp

In der Linux-Implementierung wird dieses Feld nicht berücksichtigt. Es dient dazu, ein Paket mit unterschiedlicher Priorität oder erhöhter Zuverlässigkeit... zu vermitteln

Paketlänge

Länge inklusive der IP-Kopfes in Worten

Identifikation

Vom Absender vergebene eindeutige Nummer, anhand derer einzelne Fragmente im Zielrechner in der richtigen Reihenfolge zusammen gesetzt werden können

Flags

Das erste Bit wird nicht benutzt, das zweite Bit gibt an, dass ein Paket nicht fragmentiert werden darf. Ist ein solches Paket zu groß für ein Teilnetzwerk, muss es verworfen werden. Das dritte Bit gibt an, ob dem Paket noch weitere Teile folgen

Fragmentabstand

Relative Lage des Paketes, wenn dieses Teil eines zuvor größeren Paketes war (Fragmentierung)

Lebenszeit und Protokoll

Siehe unter Eigenschaften des IPv4

Optionen

In erster Linie werden diese Optionen von Netzwerkadminstrationswerkzeugen genutzt. Sie können bspw. verwendet werden, um jeden durchlaufenden Rechner anzuweisen, seine IP-Adresse und/oder einen Zeitstempel zu hinterlegen. Ebenso kann eine Route, die ein Paket zurücklegen soll, festgeschrieben werden.

IPv6 - Das neue Format

Internet Protocol Version 6 (IPv6)

Abbildung 7: Internet Protocol Version 6 (IPv6)

Versionsnummer

Version des Protokolls (6 bei ipv6); die Lage des Feldes entspricht exakt dem des IPv4-Protokolls, sodass Rechner sofort den Typ des Protokolls erkennen können.

Klasse

Kann vom Absender gesetzt werden, um dem Paket eine bestimmte Priorität einzuräumen, sodass es »bevorzugt« (bei höherer Priorität) vermittelt wird. Vorgesehen sind derzeit:

0   Unspezifizierte Daten 1   News und Ähnliches
2 Mail 3 Reserve
4 Datentransfer (FTP,...) 5 Reserve
6 Interaktive Anwendungen   7 Netzwerkkonfiguration (SNTP)

Qualitiy of Service

Kennzeichnet die Daten, um sie beim Empfänger einer speziellen Behandlung zuzuführen. Wichtigstes Beispiel sind Echtzeitanwendungen, wo die Daten unmittelbar nach dem Empfang zur Anwendung weiterzureichen sind (bei mehreren eingetroffenen Pakten also unabhängig von der Reihenfolge des Empfangs).

Paketlänge

Im Unterschied zum IPv4 steht hier die Paketlänge ausschließlich des Protokollkopfes (da die Länge des Kopfes bei IPv6 konstant ist). Enthält das Feld eine "0", steht die Paketlänge in einem speziellen »Erweiterungs«-Protokollkopf (siehe »Nächster Kopf«), sodass Längen > 64kByte übertragen werden können

Nächster Kopf

Kennzeichnet den Typ des eingebetteten Protokolls, der unmittelbar auf den IP-Kopf folgt. Derzeit existieren 8 verschiedene Erweiterungs-Header, die bspw. für die Verschlüsselung der Daten oder eine Authentifizierung zuständig sind. Jeder dieser Header beinhaltet selbst ein »Nächster Kopf«-Feld, sodass für ein Paket auch mehrere Erweiterungen zulässig sind. Der »letzte« der Erweiterungsheader eines Pakets trägt im »Nächster Kopf«-Feld den Typ des Protokolls der Transportebene (bspw. Tcp).

Lebenszeit

Anzahl Stationen (Hops), die das Paket maximal durchlaufen kann

Senderadresse

IP des Absenders (128 Bit)

Empfängeradresse

IP des Empfängers (128 Bit)

Eine Prüfsumme wie bei IPv4 ist nicht mehr vorgesehen, da die Neuberechnung auf jeder Zwischenstation recht teuer ist (geändertes »Lebenszeit«-Feld) und unter- bzw. übergeordnete Protokolle i.d.R. ohnehin eine Fehlerbehandlung beinhalten. Auch entfällt eine Fragmentierung. Ist ein Datenpaket zu groß für eine Übertragungsstrecke, wird es verworfen und der Absender per ICMP darüber in Kenntnis gesetzt. Der Absender sollte daraufhin das Paket in kleineren Einheiten erneut versenden.

Vermittlungsschicht: Das ICMP-Protokoll Zurück Anfang Weiter
Internet Control Message Protocol

Abbildung 8: Internet Control Message Protocol

Wenn Fehler bei der Vermittlung eines Pakets auftreten, wird i.d.R. eine ICMP-Nachricht an den Absender geschickt. Aber auch zu Diagnosezwecken dient dieses Protokoll, dessen Typ-Feld seine eigentliche Aufgabe offenbart:

Typ = 0

Antwort auf eine Echo-Anfrage

Typ = 3

Zielrechner nicht erreichbar (i.d.R. existiert keine Route)

Typ = 4

Paket gelöscht (es wurde von einem Rechner verworfen, weil dessen Kapazität erschöpft war)

Typ = 5

Wechsel der Route, wird von einem Vermittlungrechner gemeldet, wenn er feststellt, dass das Paket eine kürzere Route wählen könnte

Typ = 8

Echo-Anfrage

Typ = 11

Lebenszeit abgelaufen

Typ = 12

Probleme im IP-Kopf

Typ = 13

Zeitstempel-Anforderung

Typ = 14

Zeitstempel-Antwort

Der Kode unterteilt den Pakettyp ggf. in weitere Unterfunktionen. Die Prüfsumme wird über das gesamte Paket gebildet. Das Feld Optionale Daten kann vom jeweiligen Kode abhängige Informationen enthalten.

Schließlich wird im Falle einer aus einem verworfenen IP-Paket resultierenden ICMP-Nachricht der Anfang des IP-Paketes als Daten übermittelt bzw. Testdaten, wenn es sich um ein Diagnosepaket handelte.

Transportschicht: Das Transmission Control Protocol Zurück Anfang Weiter

Transfer Control Protocol

Abbildung 9: Transfer Control Protocol

Aus Sicht einer Anwendung eröffnet das Transmission Control Protocol einen bidirektionalen, virtuellen Datenkanal zwischen den beiden Kommunikationsendpunkten. Die Daten werden scheinbar in einem Fluss übertragen. Intern gehen diese natürlich blockweise übers Netz, wobei die Blockgröße dynamisch anhand von Parametern wie der Netzauslastung, der Fenstergröße oder der Empfangs- bzw. Sendepuffer angepasst wird. Im Unterschied zum nachfolgend erwähnten User Datagram Protocol kümmert sich TCP selbst um die sichere Übertragung. Es verwendet hierzu Sequenznummern, Prüfsummen, Quittungen und Wiederholung des Transfers bei einer Zeitüberschreitung. Andere wesentliche Eigenschaften sind das Sliding-Window-Verfahren und die Kennzeichnung von Vorrangdaten.

Die Felder des Protokollkopfes bedeuten:

Senderport, Empfängerport

Analog zum Telefonat spielt der Sender einen aktiven und der Empfänger einen passiven Teil. Der Sender adressiert den Partner über IP-Adresse des Zielrechners und eine 16-Bit lange Portnummer. Beide zusammen bezeichnet man unter Unix als Socket. Um den Empfänger adressieren zu können, muss der Sender dessen Portnummer kennen. Der Sender wiederum kann (meist) eine beliebige freie Portnummer wählen, da er seine eigene Nummer dem Kommunikationspartner mitteilt. Für die Standarddienste stehen die Portnummern in der Datei /etc/services. Des Weiteren ist anzumerken, dass UDP einen eigenen Adressraum verwendet und gleiche Portnummern sich somit nicht überschneiden.

Sequenznummer

Dieser 32-Bit Wert kennzeichnet eindeutig die Stellung eines Pakets innerhalb des Datenstroms in Senderichtung. Die initiale Sequenznummer wird zu Beginn des Verbindungsaufbaus von jedem Kommunikationspartner festgelegt, wobei gilt, dass sie für die maximal mögliche Lebensdauer des Pakets (TimetoLive des Internet Protokolls) bez. der verbundenen Rechner eindeutig ist.

Die Sequenznummer eines folgenden Pakets berechnet sich aus der initialen Sequenznummer und der Anzahl bisher gesendeter Bytes. Somit ist es möglich, bei Verlust oder Beschädigung eines Pakets gezielt dieses wiederholt zu senden.

Quittungsnummer

Die Quittungsnummer sendet der Empfänger eines Pakets als Bestätigung für den Empfang. Sie gibt an, wie viele Bytes bislang beim Partner unversehrt eingetroffen sind. Sollten Sequenznummer oder Quittungsnummer im Laufe einer Sitzung einmal überlaufen, so wird bei 0 fort gefahren.

Offset

Das Feld enthält die Länge des TCP-Kopfes in 32-Bit Worten. Anhand dieser wird der Beginn der enthaltenen Daten ermittelt.

Reserve

Wird nicht verwendet.

Steuerbits

Die 6 Steuerbits bedeuten:

URG

Die Daten im Feld »Vorrangdaten« sind gültig

ACK

Die Quittungsnummer ist gültig

PSH

Die Daten sollten sofort der Anwendung übergeben werden

RES

Rücksetzen der Verbindung

SYN

Wunsch nach Aufbau einer Verbindung

FIN

Beenden der Verbindung. Ein Partner, der dieses Bit setzt, muss seinerseits die Verbindung offenhalten, bis auch das Gegenüber das FIN-Bit sendet. Er selbst darf aber keine weiteren Daten senden (Ausnahme sind die Quittungen auf eintreffende Pakete).

Fenstergröße

Momentane Kapazität des Empfangspuffers auf Absenderseite. Sein Gegenüber darf maximal so viele Daten (auch aufgeteilt auf mehrere Pakete) senden, wie durch die Fenstergröße angegeben ist. TCP arbeitet nun so, dass es versucht, die Fenstergröße automatisch an die Kapazität des Übertragungsmediums anzupassen. Dazu wird das Fenster allmählich vergrößert, bis Pakete aufgrund des zu hohen Datenaufkommens verworfen werden müssen. Treten nun vermehrt solche Übertragungsfehler auf, wird das Fenster wieder verkleinert, um es anschließend erneut mit einer Erhöhung zu versuchen. Dieses Sliding-Window-Prinzip lässt sich sehr gut beim Download von Dateien beobachten, wobei die Datentransferrate ständig schwankt.

Prüfsumme

Prüfsumme über das gesamte Paket.

Zeiger auf Vorrangdaten

Der Zeiger gibt einen Offset innerhalb der Daten im Paket an. Die dem Zeiger folgenden Daten werden somit als besonders wichtig deklariert. Eine Anwendung wird beim Eintreffen solcher Daten unterrichtet. Sie sollte nun ihre bisherige Arbeit unterbrechen und die dringliche Nachricht bearbeiten. Gebrauch von diesem Mechanismus macht wohl nur Telnet.

Optionen

Beim Verbindungsaufbau wird meist "MaximumSegmentSize" gesendet, um dem Partner mitzuteilen, dass größere Pakete empfangen werden können. Die weiteren Optionen sind "EndOfOptionList" und "NoOperation".

Das Zusammenspiel von Sequenz- und Quittungsnummer wird in den meisten Fällen die Unversehrtheit der übertragenen Daten garantieren. Jedoch verlangt eine ausstehende Quittung das Warten auf diese. Ist nun der Partner ausgefallen, würde ein Sender bis in alle Ewigkeit auf die Bestätigung des Empfangs seines Pakets lauern. Um einen solchen "Hänger" zu verhindern, werden beim Versand eines Pakets gleich mehrere Zeitgeber gestartet.

Der wichtigste Ticker stoppt die seit dem Senden vergangene Zeit. Läuft er ab, ohne dass eine Quittung eintraf, muss das Paket erneut auf die Reise geschickt werden. Diese Zeitspanne wird allerdings dynamisch berechnet (aus dem Mittelwert der bisherigen Paketlaufzeiten), sodass sie sich an veränderte Situationen (hohe Netzlast, alternative Route) allmählich anpasst.

Ein weiterer Wecker wird verwendet, um die Bereitschaft des Empfängers zu überprüfen. Dieser Zeitgeber garantiert, dass ein Datentransfer nicht blockiert, weil dessen Fenstergröße auf 0 steht, das Paket zum Öffnen des Empfangsfensters aber verloren ging.

Der letzte hier vorgestellte Timer hält einen Port noch eine gewisse Zeit geschlossen, nachdem die Verbindung schon abgebaut wurde. Die Zeitspanne entspricht in etwa der maximalen Lebensdauer (TimeToLive) eines Datenpakets und ist nützlich, um die nächste auf dem selben Port eröffnete Verbindung nicht durch alte irrgeleitete Pakete durcheinander zu bringen.

Transportschicht: Das User Datagram Protocol Zurück Anfang

User Datagram Protocol

Abbildung 10:User Datagram Protocol

Neben TCP spielt das User Datagram Protocol eine bedeutende Rolle als Transportprotokoll. Es arbeitet verbindungslos und garantiert keinen Erfolg der Übertragung. Es beinhaltet einzig eine Prüfsumme über die Daten, um beim Empfänger deren Unversehrtheit kontrollieren zu können. Dienste, die UDP verwenden, implementieren häufig eigene Routinen zur Fehlersicherung.

Der schlanke Protokollkopf und der Verzicht auf jegliche Sicherungsmechanismen oder eine Flusssteuerung prädistinieren das Protokoll für zeitkitische Übertragungen auf sicheren Medien (wo ein Datenverlust ziemlich unwahrscheinlich ist). Auch verwenden die meisten RPC-basierten Dienste UDP, da eine solche Abfrage eher einen Telegrammcharakter trägt. (einmalige, kurze Nachrichten).

 Korrekturen, Hinweise?
Startseite Nächste Seite Nächstes Kapitel Vorherige Seite Kapitelanfang