Zum Hauptinhalt springen

2. Philosophy (Philosophie)

Dieses Kapitel fasst die philosophische Grundlage (philosophical basis) des TCP-Designs zusammen und erläutert die Position von TCP in der Internet-Umgebung, Designprinzipien und Kernkonzepte.


2.1. Elements of the Internetwork System (Elemente des Internetwork-Systems)

Die Internetwork-Umgebung besteht aus Hosts, die mit Netzwerken verbunden sind, die wiederum über Gateways miteinander verbunden sind. Es wird hier angenommen, dass die Netzwerke entweder lokale Netzwerke (z. B. das ETHERNET) oder große Netzwerke (z. B. das ARPANET) sein können, aber in jedem Fall auf Paketvermittlungstechnologie basieren. Die aktiven Agenten, die Nachrichten erzeugen und konsumieren, sind Prozesse. Verschiedene Ebenen von Protokollen in den Netzwerken, den Gateways und den Hosts unterstützen ein Interprozess-Kommunikationssystem, das bidirektionalen Datenfluss über logische Verbindungen zwischen Prozess-Ports bereitstellt.

Kernkonzepte

  • Prozesse (Processes): Aktive Agenten, die Nachrichten erzeugen und konsumieren
  • Interprozess-Kommunikationssystem: Verschiedene Ebenen von Protokollen in Netzwerken, Gateways und Hosts unterstützen bidirektionalen Datenfluss über logische Verbindungen zwischen Prozess-Ports

Der Begriff Paket (packet) wird hier generisch verwendet, um die Daten einer Transaktion zwischen einem Host und seinem Netzwerk zu bezeichnen. Das Format der Datenblöcke, die innerhalb eines Netzwerks ausgetauscht werden, wird uns im Allgemeinen nicht interessieren.

Terminologiedefinitionen

BegriffDefinition
HostComputer, die mit einem Netzwerk verbunden sind und aus Sicht des Kommunikationsnetzwerks die Quellen und Ziele von Paketen sind
Prozess (Process)Aktive Elemente in Host-Computern (gemäß der ziemlich üblichen Definition eines Prozesses als ein laufendes Programm)
PortLogische Endpunkte, über die ein Prozess kommuniziert; ein Prozess kann mehrere Ports haben

Wichtiger Punkt: Alle Kommunikation wird als Interprozess-Kommunikation (inter-process communication) betrachtet. Selbst Terminals und Dateien oder andere E/A-Geräte werden als miteinander kommunizierend durch die Verwendung von Prozessen betrachtet.

Da ein Prozess möglicherweise mehrere Kommunikationsströme zwischen sich selbst und einem anderen Prozess (oder Prozessen) unterscheiden muss, stellen wir uns vor, dass jeder Prozess eine Anzahl von Ports haben kann, über die er mit den Ports anderer Prozesse kommuniziert.


2.2. Model of Operation (Betriebsmodell)

Datenübertragungsfluss

Sendender Prozess
↓ [Ruft TCP auf, übergibt Datenpuffer]
Sendendes TCP
↓ [Verpackt Daten in Segmente]
Internet-Modul
↓ [Kapselt in Internet-Datagramme]
Lokales Netzwerk
↓ [Bettet in lokale Netzwerkpakete ein]
... (über Paketvermittler, Gateways) ...

Ziel-Lokalnetzwerk
↓ [Entpackt]
Ziel-Internet-Modul
↓ [Extrahiert TCP-Segmente]
Empfangendes TCP
↓ [Platziert Daten in Benutzerpuffern]
Empfangender Prozess

Detaillierte Beschreibung

Sendeseite:

  • Prozesse übertragen Daten, indem sie TCP aufrufen und Puffer mit Daten als Argumente übergeben
  • Das TCP verpackt die Daten aus diesen Puffern in Segmente
  • Das TCP ruft das Internet-Modul auf, um jedes Segment an das Ziel-TCP zu übertragen

Empfangsseite:

  • Das empfangende TCP platziert die Daten aus einem Segment in den Puffer des empfangenden Benutzers
  • Das empfangende TCP benachrichtigt den empfangenden Benutzer

Steuerinformationen:

  • Die TCPs enthalten Steuerinformationen in den Segmenten, die sie verwenden, um zuverlässige geordnete Datenübertragung zu gewährleisten

Internet-Kommunikationsmodell

[TCP-Segment] → [Internet-Datagramm] → [Lokales Netzwerkpaket] → ...Gateway-Weiterleitung... → [Ziel]

Internet-Modul:

  • Jedem TCP zugeordnet
  • Stellt eine Schnittstelle zum lokalen Netzwerk bereit
  • Verpackt TCP-Segmente in Internet-Datagrammen
  • Routet diese Datagramme zu einem Ziel-Internet-Modul oder einem zwischengeschalteten Gateway

Lokale Netzwerkübertragung:

  • Um das Datagramm über das lokale Netzwerk zu übertragen, wird es in ein lokales Netzwerkpaket eingebettet
  • Die Paketvermittler können (may) weitere Verpackungen, Fragmentierungen oder andere Operationen durchführen, um die Zustellung des lokalen Pakets zum Ziel-Internet-Modul zu erreichen

Gateway-Operation

An einem Gateway zwischen Netzwerken:

  1. Entpacken: Das Internet-Datagramm wird aus seinem lokalen Paket „entpackt"
  2. Untersuchung: Bestimmt, über welches Netzwerk das Internet-Datagramm als nächstes reisen soll
  3. Neuverpackung: Das Internet-Datagramm wird in ein lokales Paket „verpackt", das für das nächste Netzwerk geeignet ist
  4. Routing: Zum nächsten Gateway oder zum endgültigen Ziel geroutet

Fragmentierungsmechanismus:

  • Ein Gateway darf (is permitted to) ein Internet-Datagramm in kleinere Internet-Datagramm-Fragmente aufteilen, wenn dies für die Übertragung durch das nächste Netzwerk erforderlich ist
  • Dazu erzeugt das Gateway einen Satz von Internet-Datagrammen, von denen jedes ein Fragment trägt
  • Fragmente können (may) an nachfolgenden Gateways weiter in kleinere Fragmente zerlegt werden
  • Das Internet-Datagramm-Fragmentformat ist so konzipiert, dass das Ziel-Internet-Modul Fragmente zu Internet-Datagrammen wieder zusammensetzen kann

Endziel:

  • Ein Ziel-Internet-Modul entpackt das Segment aus dem Datagramm (nachdem das Datagramm bei Bedarf wieder zusammengesetzt wurde)
  • Übergibt es an das Ziel-TCP

Diensttyp

Dieses einfache Betriebsmodell verschweigt viele Details. Ein wichtiges Merkmal ist der Diensttyp (type of service). Dies liefert Informationen an das Gateway (oder Internet-Modul), um es bei der Auswahl der Dienstparameter zu leiten, die beim Durchqueren des nächsten Netzwerks verwendet werden sollen.

In den Diensttyp-Informationen enthalten:

  • Priorität des Datagramms (precedence): Prioritätsstufe für die Verarbeitung
  • Sicherheitsinformationen (security information): Um Hosts und Gateways, die in mehrstufigen sicheren Umgebungen arbeiten, zu ermöglichen, Datagramme aus Sicherheitsgründen ordnungsgemäß zu trennen

2.3. The Host Environment (Die Host-Umgebung)

Es wird angenommen, dass TCP ein Modul in einem Betriebssystem ist. Die Benutzer greifen auf TCP ähnlich zu, wie sie auf das Dateisystem zugreifen würden. Das TCP kann (may) andere Betriebssystemfunktionen aufrufen, beispielsweise um Datenstrukturen zu verwalten.

Netzwerkschnittstelle:

  • Es wird angenommen, dass die tatsächliche Schnittstelle zum Netzwerk von einem Gerätetreibermodul gesteuert wird
  • Das TCP ruft den Netzwerkgerätetreiber nicht direkt auf
  • Vielmehr ruft es das Internet-Datagramm-Protokollmodul auf, das wiederum den Gerätetreiber aufrufen kann (may)

Frontend-Implementierung:

  • Die Mechanismen von TCP schließen eine Implementierung von TCP in einem Frontend-Prozessor nicht aus
  • In einer solchen Implementierung muss (must) jedoch ein Host-zu-Frontend-Protokoll die Funktionalität bereitstellen, um die in diesem Dokument beschriebene Art von TCP/Benutzer-Schnittstelle zu unterstützen

2.4. Interfaces (Schnittstellen)

TCP/Benutzer-Schnittstelle

Die TCP/Benutzer-Schnittstelle stellt Aufrufe bereit, die der Benutzer an TCP richtet, um:

  • Eine Verbindung zu OPEN (öffnen) oder zu CLOSE (schließen)
  • Daten zu SEND (senden) oder zu RECEIVE (empfangen)
  • STATUS über eine Verbindung zu erhalten

Diese Aufrufe sind wie andere Aufrufe von Benutzerprogrammen im Betriebssystem, beispielsweise die Aufrufe zum Öffnen, Lesen und Schließen einer Datei.

TCP/Internet-Schnittstelle

Die TCP/Internet-Schnittstelle stellt Aufrufe zum Senden und Empfangen von Datagrammen bereit, die an TCP-Module in Hosts irgendwo im Internet-System adressiert sind. Diese Aufrufe haben Parameter zum Übergeben von:

  • Adresse
  • Diensttyp
  • Priorität
  • Sicherheit
  • Anderen Steuerinformationen

2.5. Relation to Other Protocols (Beziehung zu anderen Protokollen)

Das folgende Diagramm veranschaulicht die Stellung von TCP in der Protokollhierarchie:

+------+ +-----+ +-----+       +-----+
|Telnet| | FTP | |Voice| ... | | Anwendungsebene
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | RTP | ... | | Host-Ebene
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP | Gateway-Ebene
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Netzwerkebene
+---------------------------+

Protokollbeziehungen

Wichtige Punkte:

  • Es wird erwartet, dass TCP in der Lage sein wird, Protokolle höherer Ebene effizient zu unterstützen
  • Es sollte einfach sein, Protokolle höherer Ebene wie ARPANET Telnet oder AUTODIN II THP mit TCP zu verbinden

2.6. Reliable Communication (Zuverlässige Kommunikation)

Ein Datenstrom, der über eine TCP-Verbindung gesendet wird, wird am Ziel zuverlässig und in der richtigen Reihenfolge zugestellt.

Zuverlässigkeitsmechanismen

Sequenznummern und Bestätigungen:

  • Die Übertragung wird durch die Verwendung von Sequenznummern und Bestätigungen zuverlässig gemacht
  • Konzeptionell wird jedem Daten-Oktett eine Sequenznummer zugewiesen
  • Die Sequenznummer des ersten Daten-Oktetts in einem Segment wird mit diesem Segment übertragen und wird als Segment-Sequenznummer (segment sequence number) bezeichnet
  • Segmente tragen auch eine Bestätigungsnummer (acknowledgment number), die die Sequenznummer des nächsten erwarteten Daten-Oktetts der Übertragungen in umgekehrter Richtung ist

Neuübertragung:

  • Wenn das TCP ein Segment mit Daten überträgt, legt es eine Kopie in eine Neuübertragungswarteschlange und startet einen Timer
  • Wenn die Bestätigung für diese Daten empfangen wird, wird das Segment aus der Warteschlange gelöscht
  • Wenn die Bestätigung nicht empfangen wird, bevor der Timer abläuft, wird das Segment erneut übertragen

Wichtiger Hinweis:

  • Eine Bestätigung durch TCP garantiert nicht, dass die Daten an den Endbenutzer geliefert wurden
  • Es bedeutet nur, dass das empfangende TCP die Verantwortung dafür übernommen hat

Flusskontrolle

Um den Datenfluss zwischen TCPs zu steuern, wird ein Flusskontrollmechanismus eingesetzt:

  • Das empfangende TCP meldet dem sendenden TCP ein „Fenster" (window)
  • Dieses Fenster gibt die Anzahl der Oktette an, beginnend mit der Bestätigungsnummer, die das empfangende TCP derzeit zu empfangen bereit ist

2.7. Connection Establishment and Clearing (Verbindungsaufbau und -abbau)

Socket-Adressierung

Port-Identifikator:

  • Um die separaten Datenströme zu identifizieren, die ein TCP verarbeiten kann (may), stellt das TCP einen Port-Identifikator (port identifier) bereit
  • Da Port-Identifikatoren von jedem TCP unabhängig ausgewählt werden, sind sie möglicherweise nicht eindeutig

Socket-Erstellung:

  • Um eindeutige Adressen innerhalb jedes TCP bereitzustellen, verketten wir eine Internetadresse, die das TCP identifiziert, mit einem Port-Identifikator, um einen Socket zu erstellen
  • Ein Socket wird in allen miteinander verbundenen Netzwerken eindeutig sein

Verbindungsspezifikation:

  • Eine Verbindung wird vollständig durch das Paar von Sockets an den Enden spezifiziert
  • Ein lokaler Socket kann (may) an vielen Verbindungen zu verschiedenen fremden Sockets teilnehmen
  • Eine Verbindung kann (can) verwendet werden, um Daten in beide Richtungen zu übertragen, das heißt, sie ist „vollduplex" (full duplex)

Port- und Prozesszuordnung

Port-Besitz:

  • TCPs können (are free to) Ports Prozessen beliebig zuordnen
  • Mehrere grundlegende Konzepte sind jedoch in jeder Implementierung erforderlich:
    • Es müssen (must) bekannte Sockets existieren, die das TCP nur durch bestimmte Mittel den „geeigneten" Prozessen zuordnet
    • Wir stellen uns vor, dass Prozesse Ports „besitzen" können (may)
    • Prozesse können Verbindungen nur auf den Ports initiieren, die sie besitzen

Verbindungsspezifikation im OPEN-Aufruf:

  • Eine Verbindung wird im OPEN-Aufruf durch die lokalen Port- und fremden Socket-Argumente spezifiziert
  • Als Rückgabe liefert das TCP einen (kurzen) lokalen Verbindungsnamen, durch den der Benutzer in nachfolgenden Aufrufen auf die Verbindung verweist

Übertragungskontrollblock (TCB)

Um Verbindungsinformationen zu speichern, stellen wir uns vor, dass eine Datenstruktur namens Übertragungskontrollblock (Transmission Control Block, TCB) existiert:

  • Eine Implementierungsstrategie würde den lokalen Verbindungsnamen zu einem Zeiger auf den TCB für diese Verbindung machen
  • Der OPEN-Aufruf gibt auch an, ob der Verbindungsaufbau aktiv verfolgt oder passiv abgewartet werden soll (should)

Passives OPEN:

  • Eine passive OPEN-Anforderung bedeutet, dass der Prozess eingehende Verbindungsanforderungen akzeptieren möchte, anstatt zu versuchen, eine Verbindung zu initiieren
  • Oft akzeptiert der Prozess, der ein passives OPEN anfordert, eine Verbindungsanforderung von jedem Anrufer
  • In diesem Fall wird ein fremder Socket aus lauter Nullen verwendet, um einen nicht spezifizierten Socket zu bezeichnen
  • Nicht spezifizierte fremde Sockets sind nur bei passiven OPENs zulässig

2.8. Data Communication (Datenkommunikation)

Sobald eine Verbindung hergestellt ist, können Daten bidirektional zwischen den Prozessen fließen. Das TCP stellt sicher, dass dieser Datenfluss:

  • Zuverlässig (Reliable) ist: Daten kommen korrekt an
  • Geordnet (Ordered) ist: Daten kommen in der richtigen Reihenfolge an
  • Flusskontrolliert (Flow controlled) ist: Die Empfangsseite wird nicht überwältigt

2.9. Precedence and Security (Priorität und Sicherheit)

Das TCP bietet Mechanismen zur Handhabung von:

  • Priorität (Precedence): Prioritätsstufen für Verkehr
  • Sicherheitsklassifizierungen (Security classifications): Um in mehrstufigen sicheren Umgebungen zu operieren
  • Kompartimentierung (Compartmentation): Trennung verschiedener Sicherheitsdomänen

Diese Funktionen werden von der Internet-Protokollschicht geerbt und werden über die TCP-Verbindung End-to-End aufrechterhalten.


2.10. Robustness Principle (Robustheitsprinzip)

Ein leitendes Prinzip für die TCP-Implementierung ist das Robustheitsprinzip (Robustness Principle), das oft wie folgt formuliert wird:

„Sei konservativ in dem, was du sendest, sei liberal in dem, was du akzeptierst" ("Be conservative in what you send, be liberal in what you accept")

Das bedeutet:

  • TCP-Implementierungen sollten (should) beim Senden von Daten sorgfältig an Spezifikationen festhalten
  • Sollten aber beim Empfangen von Daten tolerant und flexibel sein und versuchen, auch leicht fehlerhafte Eingaben zu interpretieren, wenn möglich

Dieses Prinzip hilft, Interoperabilität zwischen verschiedenen Implementierungen zu gewährleisten und fördert die allgemeine Stabilität des Internets.


Weiter: 3. Functional Specification (Funktionale Spezifikation) - Detaillierte Spezifikation der TCP-Operationen und Segmentformate