1. Introduction (Einführung)
Das Transmission Control Protocol (TCP) ist für die Verwendung als hochzuverlässiges Host-to-Host-Protokoll (host-to-host protocol) zwischen Hosts in paketvermittelten Computerkommunikationsnetzwerken und in zusammengeschalteten Systemen solcher Netzwerke vorgesehen.
Dieses Dokument beschreibt die vom Transmission Control Protocol auszuführenden Funktionen, das Programm, das es implementiert, und seine Schnittstelle zu Programmen oder Benutzern, die seine Dienste benötigen.
1.1. Motivation
Computerkommunikationssysteme spielen eine zunehmend wichtige Rolle in militärischen, staatlichen und zivilen Umgebungen. Dieses Dokument konzentriert sich hauptsächlich auf militärische Computerkommunikationsanforderungen, insbesondere Robustheit (robustness) bei unzuverlässiger Kommunikation und Verfügbarkeit (availability) bei Überlastung, aber viele dieser Probleme finden sich auch im zivilen und staatlichen Sektor.
Da strategische und taktische Computerkommunikationsnetzwerke entwickelt und eingesetzt werden, ist es unerlässlich, Mittel zur Vernetzung bereitzustellen und standardisierte Interprozess-Kommunikationsprotokolle (interprocess communication protocols) bereitzustellen, die eine breite Palette von Anwendungen unterstützen können. In Erwartung des Bedarfs an solchen Standards hat der stellvertretende Unterstaatssekretär für Verteidigungsforschung und -technik erklärt, dass das hierin beschriebene Transmission Control Protocol (TCP) die Grundlage für die DoD-weite Standardisierung von Interprozess-Kommunikationsprotokollen bilden wird.
Hauptmerkmale von TCP
TCP ist ein verbindungsorientiertes, zuverlässiges End-to-End-Protokoll (connection-oriented, end-to-end reliable protocol), das für die Anpassung an eine geschichtete Hierarchie von Protokollen (layered hierarchy of protocols) entwickelt wurde, die Multi-Netzwerk-Anwendungen unterstützen. Das TCP bietet zuverlässige Interprozess-Kommunikation zwischen Prozesspaaren in Host-Computern, die an unterschiedliche, aber miteinander verbundene Computerkommunikationsnetzwerke angeschlossen sind.
TCP macht sehr wenige Annahmen über die Zuverlässigkeit der Kommunikationsprotokolle unterhalb der TCP-Schicht. TCP geht davon aus, dass es einen einfachen, potenziell unzuverlässigen Datagrammdienst (datagram service) von den Protokollen niedrigerer Ebenen erhalten kann. Im Prinzip sollte TCP über ein breites Spektrum von Kommunikationssystemen funktionieren können, die von fest verdrahteten Verbindungen bis zu paketvermittelten oder leitungsvermittelten Netzwerken reichen.
Theoretische Grundlage
TCP basiert auf Konzepten, die erstmals von Cerf und Kahn in [1] beschrieben wurden. Das TCP fügt sich in eine geschichtete Protokollarchitektur direkt über einem grundlegenden Internetprotokoll (Internet Protocol, [2]) ein, das TCP eine Möglichkeit bietet, Segmente (segments) variabler Länge zu senden und zu empfangen, die in Internet-Datagramm-„Umschlägen" (internet datagram) eingeschlossen sind. Das Internet-Datagramm bietet ein Mittel zur Adressierung von Quell- und Ziel-TCPs in verschiedenen Netzwerken. Das Internetprotokoll kümmert sich auch um jegliche Fragmentierung (fragmentation) oder Reassemblierung (reassembly) der TCP-Segmente, die erforderlich sind, um Transport und Zustellung durch mehrere Netzwerke und verbindende Gateways zu erreichen. Das Internetprotokoll trägt auch Informationen über Priorität (precedence), Sicherheitsklassifizierung (security classification) und Kompartimentierung (compartmentation) der TCP-Segmente, sodass diese Informationen über mehrere Netzwerke hinweg End-to-End kommuniziert werden können.
Protokollschichtung (Protocol Layering)
+---------------------+
| higher-level | ← Anwendungsschicht-Protokolle (HTTP, FTP, SMTP, usw.)
+---------------------+
| TCP | ← Transportschicht (dieses Protokoll)
+---------------------+
| Internet Protocol | ← Netzwerkschicht (RFC 791)
+---------------------+
|communication network| ← Verbindungs-/Physikalische Schicht
+---------------------+
Der Großteil dieses Dokuments ist im Kontext von TCP-Implementierungen geschrieben, die zusammen mit Protokollen höherer Ebene im Host-Computer existieren. Einige Computersysteme werden über Frontend-Computer (front-end computers) mit Netzwerken verbunden, die die TCP- und Internetprotokollschichten sowie netzwerkspezifische Software beherbergen. Die TCP-Spezifikation beschreibt eine Schnittstelle zu den Protokollen höherer Ebene, die selbst im Frontend-Fall implementierbar erscheint, solange ein geeignetes Host-to-Frontend-Protokoll implementiert ist.
1.2. Scope (Umfang)
Das TCP ist dafür vorgesehen, einen zuverlässigen Prozess-zu-Prozess-Kommunikationsdienst (reliable process-to-process communication service) in einer Mehrfachnetzwerk-Umgebung (multinetwork environment) bereitzustellen. Das TCP ist als Host-to-Host-Protokoll vorgesehen, das in mehreren Netzwerken häufig verwendet wird.
1.3. About This Document (Über dieses Dokument)
Dieses Dokument stellt eine Spezifikation des erforderlichen Verhaltens jeder TCP-Implementierung dar, sowohl in ihren Interaktionen mit Protokollen höherer Ebene als auch in ihren Interaktionen mit anderen TCPs. Der Rest dieses Abschnitts bietet einen sehr kurzen Überblick über die Protokollschnittstellen und den Betrieb.
Dokumentstruktur
- Abschnitt 2: Fasst die philosophische Grundlage (philosophical basis) des TCP-Designs zusammen
- Abschnitt 3: Bietet eine detaillierte Beschreibung von:
- Den erforderlichen Aktionen von TCP, wenn verschiedene Ereignisse auftreten (Ankunft neuer Segmente, Benutzeraufrufe, Fehler usw.)
- Den Details der TCP-Segmentformate
1.4. Interfaces (Schnittstellen)
Das TCP interagiert auf einer Seite mit Benutzern oder Anwendungsprozessen (application processes) und auf der anderen Seite mit einem Protokoll niedrigerer Ebene wie dem Internetprotokoll.
TCP/Benutzer-Schnittstelle (TCP/User Interface)
Die Schnittstelle zwischen einem Anwendungsprozess und dem TCP wird in angemessenen Details dargestellt. Diese Schnittstelle besteht aus einer Reihe von Aufrufen, die den Aufrufen sehr ähnlich sind, die ein Betriebssystem einem Anwendungsprozess zur Manipulation von Dateien zur Verfügung stellt.
Hauptschnittstellenaufrufe:
- OPEN: Eine Verbindung öffnen
- CLOSE: Eine Verbindung schließen
- SEND: Daten über eine eingerichtete Verbindung senden
- RECEIVE: Daten über eine eingerichtete Verbindung empfangen
Das TCP kann auch asynchron (asynchronously communicate) mit Anwendungsprogrammen kommunizieren. Obwohl TCP-Implementierern beträchtliche Freiheit gewährt wird, Schnittstellen zu entwerfen, die für eine bestimmte Betriebssystemumgebung geeignet sind, ist eine Mindestfunktionalität (minimum functionality) an der TCP/Benutzer-Schnittstelle für jede gültige Implementierung erforderlich.
TCP/Protokoll niedrigerer Ebene-Schnittstelle (TCP/Lower Level Protocol Interface)
Die Schnittstelle zwischen TCP und dem Protokoll niedrigerer Ebene ist im Wesentlichen nicht spezifiziert (essentially unspecified), außer dass angenommen wird, dass ein Mechanismus existiert, durch den die beiden Ebenen asynchron Informationen aneinander weitergeben können. Typischerweise wird erwartet, dass das Protokoll niedrigerer Ebene diese Schnittstelle spezifiziert.
TCP ist für die Arbeit in einer sehr allgemeinen Umgebung vernetzter Netzwerke konzipiert. Das in diesem Dokument durchgehend angenommene Protokoll niedrigerer Ebene ist das Internetprotokoll (Internet Protocol, [2]).
1.5. Operation (Betrieb)
Wie oben erwähnt, ist der Hauptzweck des TCP, einen zuverlässigen, sicherbaren logischen Schaltkreis- oder Verbindungsdienst (reliable, securable logical circuit or connection service) zwischen Prozesspaaren bereitzustellen. Um diesen Dienst über ein weniger zuverlässiges Internet-Kommunikationssystem bereitzustellen, sind Einrichtungen in den folgenden Bereichen erforderlich:
Überblick über Kernfunktionen
1. Basic Data Transfer (Grundlegender Datentransfer)
Das TCP ist in der Lage, einen kontinuierlichen Strom von Oktetten in jede Richtung zwischen seinen Benutzern zu übertragen, indem es eine bestimmte Anzahl von Oktetten (octets) in Segmente (segments) zur Übertragung durch das Internetsystem verpackt. Im Allgemeinen entscheiden die TCPs selbst, wann sie Daten blockieren und weiterleiten.
Push-Funktion (Push Function): Manchmal müssen Benutzer sicherstellen, dass alle Daten, die sie an das TCP übermittelt haben, übertragen wurden. Zu diesem Zweck ist eine Push-Funktion definiert. Um sicherzustellen, dass an ein TCP übermittelte Daten tatsächlich übertragen werden, gibt der sendende Benutzer an, dass sie zum empfangenden Benutzer durchgeschoben (pushed) werden sollten. Ein Push veranlasst die TCPs, Daten bis zu diesem Punkt sofort weiterzuleiten und an den Empfänger zu liefern. Der genaue Push-Punkt ist möglicherweise für den empfangenden Benutzer nicht sichtbar, und die Push-Funktion liefert keine Datensatzgrenzmarkierung (record boundary marker).
2. Reliability (Zuverlässigkeit)
Das TCP muss (must) sich von Daten erholen, die vom Internet-Kommunikationssystem beschädigt, verloren, dupliziert oder in falscher Reihenfolge zugestellt wurden. Dies wird erreicht, indem jedem übertragenen Oktett eine Sequenznummer (sequence number) zugewiesen wird und eine positive Bestätigung (positive acknowledgment, ACK) vom empfangenden TCP erforderlich ist. Wenn die ACK nicht innerhalb eines Timeout-Intervalls empfangen wird, werden die Daten erneut übertragen. Beim Empfänger werden die Sequenznummern verwendet, um Segmente, die möglicherweise in falscher Reihenfolge empfangen werden, korrekt zu sortieren und Duplikate zu eliminieren. Beschädigungen werden behandelt, indem jedem übertragenen Segment eine Prüfsumme (checksum) hinzugefügt wird, diese beim Empfänger überprüft und beschädigte Segmente verworfen werden.
Zuverlässigkeitsmechanismen:
- Timeout und Neuübertragung: Wenn ACK nicht innerhalb des Timeout-Intervalls empfangen wird, werden die Daten erneut übertragen
- Sequenzierung: Beim Empfänger werden Sequenznummern verwendet, um Segmente, die in falscher Reihenfolge empfangen werden, korrekt zu sortieren
- Duplikat-Eliminierung: Doppelte Segmente eliminieren
- Prüfsumme: Beschädigungen behandeln, indem jedem übertragenen Segment eine Prüfsumme hinzugefügt, diese beim Empfänger überprüft und beschädigte Segmente verworfen werden
Solange die TCPs weiterhin ordnungsgemäß funktionieren und das Internetsystem nicht vollständig partitioniert (completely partitioned) wird, werden keine Übertragungsfehler die korrekte Zustellung von Daten beeinträchtigen. TCP erholt sich von Fehlern des Internet-Kommunikationssystems.
3. Flow Control (Flusskontrolle)
TCP bietet dem Empfänger ein Mittel, die vom Sender gesendete Datenmenge zu steuern. Dies wird erreicht, indem mit jedem ACK ein „Fenster" (window) zurückgegeben wird, das einen Bereich akzeptabler Sequenznummern über das zuletzt erfolgreich empfangene Segment hinaus angibt. Das Fenster gibt eine zulässige Anzahl von Oktetten an, die der Sender übertragen darf (may), bevor er weitere Erlaubnis erhält.
Gleitfenster (Sliding Window): Das Fenster gibt die Anzahl der zulässigen Oktette an, die der Sender übertragen darf, bevor er weitere Erlaubnis erhält.
4. Multiplexing (Multiplexen)
Um es vielen Prozessen innerhalb eines einzelnen Hosts zu ermöglichen, TCP-Kommunikationseinrichtungen gleichzeitig zu verwenden, stellt das TCP eine Reihe von Adressen oder Ports (ports) innerhalb jedes Hosts bereit. Verkettet mit den Netzwerk- und Host-Adressen aus der Internet-Kommunikationsschicht bildet dies einen Socket. Ein Paar von Sockets identifiziert eindeutig jede Verbindung. Das heißt, ein Socket kann (may) gleichzeitig in mehreren Verbindungen verwendet werden.
Port-Bindung (Port Binding):
- Die Bindung von Ports an Prozesse wird von jedem Host unabhängig gehandhabt
- Häufig verwendete Prozesse (z. B. ein „Logger" oder Timesharing-Dienst) werden an feste Sockets angehängt, die der Öffentlichkeit bekannt gemacht werden
- Auf diese Dienste kann über bekannte Adressen zugegriffen werden
- Das Einrichten und Erlernen der Portadressen anderer Prozesse kann (may) dynamischere Mechanismen beinhalten
5. Connections (Verbindungen)
Die oben beschriebenen Zuverlässigkeits- und Flusskontrollmechanismen erfordern, dass TCPs bestimmte Statusinformationen (status information) für jeden Datenstrom initialisieren und pflegen. Die Kombination dieser Informationen, einschließlich Sockets, Sequenznummern und Fenstergrößen, wird als Verbindung (connection) bezeichnet. Jede Verbindung wird eindeutig durch ein Paar von Sockets spezifiziert, die ihre beiden Seiten identifizieren.
Verbindungslebenszyklus:
- Aufbau: Wenn zwei Prozesse kommunizieren möchten, müssen (must) ihre TCPs zunächst eine Verbindung aufbauen (die Statusinformationen auf jeder Seite initialisieren)
- Nutzung: Datenübertragungsphase
- Beendigung: Wenn die Kommunikation abgeschlossen ist, wird die Verbindung beendet (terminated) oder geschlossen (closed), um die Ressourcen für andere Verwendungen freizugeben
Dreiwege-Handshake (Three-Way Handshake): Da Verbindungen zwischen unzuverlässigen Hosts und über das unzuverlässige Internet-Kommunikationssystem aufgebaut werden müssen (must), wird ein Handshake-Mechanismus mit taktbasierten Sequenznummern (handshake mechanism with clock-based sequence numbers) verwendet, um eine fehlerhafte Initialisierung von Verbindungen zu vermeiden.
6. Precedence and Security (Priorität und Sicherheit)
Die Benutzer von TCP können (may) die Sicherheit und Priorität ihrer Kommunikation angeben. Es werden Standardwerte bereitgestellt, die verwendet werden, wenn diese Funktionen nicht benötigt werden.
Implementierungsüberlegungen (Implementation Considerations)
Mindestanforderungen an die Funktionalität
Jede gültige TCP-Implementierung muss (must) Folgendes bereitstellen:
- Verbindungsverwaltung (Aufbau, Wartung, Beendigung)
- Zuverlässige Datenübertragung (Bestätigung, Neuübertragung, Sequenzierung)
- Flusskontrolle (Gleitfenster)
- Multiplexing (Port-Verwaltung)
- Fehlererkennung (Prüfsumme)
Flexibilität
Während diese Spezifikation das TCP-Verhalten definiert, haben Implementierer beträchtliche Freiheit in Bezug auf:
- Das Design interner Datenstrukturen
- Den Integrationsansatz mit Betriebssystemen
- Leistungsoptimierungsstrategien
- Spezifische Formen von Benutzerschnittstellen
Beziehung zu anderen Protokollen (Relation to Other Protocols)
Anwendungsschicht: HTTP, FTP, SMTP, Telnet, usw.
↓
Transportschicht: TCP (dieses Protokoll) | UDP (RFC 768)
↓
Netzwerkschicht: IP (RFC 791)
↓
Verbindungsschicht: Ethernet, Wi-Fi, usw.
TCP befindet sich in der Transportschicht des Protokollstapels, bietet der Anwendungsschicht zuverlässige End-to-End-Kommunikationsdienste und verlässt sich auf das IP-Protokoll in der Netzwerkschicht für Routing und Adressierung.
Weiter: 2. Philosophy (Philosophie) - Eingehende Untersuchung der TCP-Entwurfsphilosophie und theoretischen Grundlage