Transmission Control Protocol: Unterschied zwischen den Versionen

Aus Foxwiki
 
(27 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''TCP''' ('''Transmission Control Protocol''') ist ein Netzwerkprotokoll, das definiert, auf welche Art und Weise Daten zwischen Netzwerk/Hardwaren ausgetauscht werden sollen.
'''Transmission Control Protocol''' (TCP)


== Beschreibung ==
== Beschreibung ==
; Ist ein zuverlässiges, verbindungsorientiertes, paketvermitteltes (nicht ''paketvermittelnd'') Transportprotokoll.
; Transportprotokoll
* TCP ermöglicht die Übertragung eines Datenstroms.
{| class="wikitable options"
* Im Unterschied zum verbindungslosen [[Netzwerke:UDP | User Datagram Protokoll (UDP)]] stellt TCP eine Verbindung zwischen zwei Endpunkten (Sockets) einer Netzverbindung her.
|-
* Auf dieser Verbindung können in beide Richtungen Daten übertragen werden.
! Funktionen !! Beschreibung
|-
| Zuverlässig ||
|-
| Verbindungsorientiert ||
|-
| Datenströme || Übertragung von Datenströmen
|}
 
; TCP stell eine Verbindung zwischen zwei Endpunkten (Sockets) einer Netzverbindung her
* Auf dieser Verbindung können in beide Richtungen Daten übertragen werden
* Unterschied zu UDP (verbindungslos [[Netzwerke:UDP | User Datagram Protokoll (UDP)]])


; Vorteile
; Vorteile
* Netzwerküberlastungskontrolle.
* [[Transmission Control Protocol/Überlastungskontrolle|Überlastungskontrolle]]
* Zuverlässige Datenübertragung:
* Zuverlässige Datenübertragung
** erkennt verlorene, doppelte und fehlerhafte Segmente.
** erkennt verlorene, doppelte und fehlerhafte Segmente


; Allgemeines
; Allgemeines
* TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex.
* TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex
* Kann auch als zwei Halbduplexverbindungen betrachtet werden (Informationsfluss in beide Richtungen (allerdings nicht gleichzeitig)).
* Kann auch als zwei Halbduplexverbindungen betrachtet werden (Informationsfluss in beide Richtungen (allerdings nicht gleichzeitig))
* Die Daten in Gegenrichtung können zusätzliche Steuerungsinformationen enthalten.
* Die Daten in Gegenrichtung können zusätzliche Steuerungsinformationen enthalten
* Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver.
* Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver


''' TCP-Software '''
; TCP-Software
* Übernimmt Verbindungsverwaltung sowie die Datenübertragung.
* Übernimmt Verbindungsverwaltung sowie die Datenübertragung
* Netz-Protokollstack des Betriebssystems.
* Netz-Protokollstack des Betriebssystems
* Anwendungsprogramme nutzen Sockets.
* Anwendungsprogramme nutzen Sockets


''' Entwicklung '''
==== Entwicklung ====
* Entwickelt von Robert E. Kahn und Vinton G. Cerf als Forschungsarbeit.
* Entwickelt von Robert E. Kahn und Vinton G. Cerf als Forschungsarbeit
* Beginn 1973, erste Standardisierung 1981 als [https://tools.ietf.org/html/rfc793 ''RFC 793''].
* Beginn 1973, erste Standardisierung 1981 als [https://tools.ietf.org/html/rfc793 ''RFC 793'']
* Danach gab es viele Erweiterungen, diese werden bis heute in RFCs spezifiziert.
* Danach gab es viele Erweiterungen, diese werden bis heute in RFCs spezifiziert


* Das Transmission Control Protocol arbeitet auf dem OSI-04
== Das Transmission Control Protocol arbeitet auf dem OSI-04 ==
* TCP verwendet 16-Bit Portnummern zur Adressierung
* TCP verwendet 16-Bit Portnummern zur Adressierung
* Zusätzlich zur Adressierung übernimmt es weitere Aufgaben
* Zusätzlich zur Adressierung übernimmt es weitere Aufgaben
Zeile 40: Zeile 51:
* bei Erkennen einer Überlastsituation (Paketverlust!) wird vom Sender die Datenrate gedrosselt
* bei Erkennen einer Überlastsituation (Paketverlust!) wird vom Sender die Datenrate gedrosselt
* transparente Übertragung von byte streams
* transparente Übertragung von byte streams
* Anwendungen, die TCP benutzen, sollen nicht merken, dass die Daten in Form von Paketen übertragen werden.
* Anwendungen, die TCP benutzen, sollen nicht merken, dass die Daten in Form von Paketen übertragen werden
* Mutliplexing
* Mutliplexing
* Mehrfachnutzung einer Verbindung
* Mehrfachnutzung einer Verbindung
Zeile 50: Zeile 61:
* Die richtige Reihenfolge der Daten ist garantiert
* Die richtige Reihenfolge der Daten ist garantiert
* Bietet der Anwendungsschicht einen zuverlässigen Transportdienst
* Bietet der Anwendungsschicht einen zuverlässigen Transportdienst
* RFC 793. J. Postel. Transmission Control Protocol. 1981.
* RFC 793. J. Postel. Transmission Control Protocol. 1981
* setzt direkt auf dem Internet Protokoll (IP) auf
* setzt direkt auf dem Internet Protokoll (IP) auf
* IP Protokoll Nr.: 06
* IP Protokoll Nr.: 06
Zeile 74: Zeile 85:
* Segmente haben eine variable Länge
* Segmente haben eine variable Länge
* Die maximale Segmentgrösse wird bei der Verbindungserstellung festgelegt
* Die maximale Segmentgrösse wird bei der Verbindungserstellung festgelegt
* Jedes Segment hat eine Folgenummer, die seine Position im Datenstrom in Bytes spezifiziert.
* Jedes Segment hat eine Folgenummer, die seine Position im Datenstrom in Bytes spezifiziert
* Abgesendete Segmente müssen innerhalb einer bestimmten Zeit bestätigt werden (adaptiv geschätzte Round Trip Time).
* Abgesendete Segmente müssen innerhalb einer bestimmten Zeit bestätigt werden (adaptiv geschätzte Round Trip Time)
* Bestätigungen werden verzögert gesendet (ca. 200 ms)
* Bestätigungen werden verzögert gesendet (ca. 200 ms)
* Wenn keine Bestätigung über den erfolgreichen Empfang dieses Paketes innerhalb der Timer-Laufzeit eintrifft, wird die Übertragung wiederholt.
* Wenn keine Bestätigung über den erfolgreichen Empfang dieses Paketes innerhalb der Timer-Laufzeit eintrifft, wird die Übertragung wiederholt
* Jedes Segment hat eine Ende-zu-Ende-Prüfsumme
* Jedes Segment hat eine Ende-zu-Ende-Prüfsumme
* Fehlerhaft empfangene Segmente werden ignoriert.
* Fehlerhaft empfangene Segmente werden ignoriert
* Empfänger ordnet empfangene Segmente entsprechend ihrer Folgenummer
* Empfänger ordnet empfangene Segmente entsprechend ihrer Folgenummer
* Duplikate werden ignoriert.
* Duplikate werden ignoriert


== Socket-Schnittstelle ==
== Socket-Schnittstelle ==
Zeile 102: Zeile 113:
* IP-Adresse und Port-Nummer Host B
* IP-Adresse und Port-Nummer Host B
* Jede Verbindung wird durch ein Paar von Verbindungsendpunkten eindeutig identifiziert
* Jede Verbindung wird durch ein Paar von Verbindungsendpunkten eindeutig identifiziert
* mehrere Verbindung zwischen den gleichen Hosts sind dadurch gleichzeitig möglich.
* mehrere Verbindung zwischen den gleichen Hosts sind dadurch gleichzeitig möglich


== Segmente, Datenströme und Sequenznummern ==
== Segmente, Datenströme und Sequenznummern ==
Zeile 109: Zeile 120:
* Zufallszahl auf beiden Seiten (32 Bit)
* Zufallszahl auf beiden Seiten (32 Bit)
* Seq.nr. := Initiale Seq.nr. + Byte-Position im Datenstrom
* Seq.nr. := Initiale Seq.nr. + Byte-Position im Datenstrom
* TCP betrachtet einen Datenstrom als Sequenz von Bytes, die für die Übertragung in TCP-Segmente eingeteilt werden.
* TCP betrachtet einen Datenstrom als Sequenz von Bytes, die für die Übertragung in TCP-Segmente eingeteilt werden
* Jedes Segment wird dann in der Regel auf ein IP-Paket abgebildet.
* Jedes Segment wird dann in der Regel auf ein IP-Paket abgebildet
* Größe eines Segmentes bei lokaler Übertragung gemäß physikalischem Netz (MTU)
* Größe eines Segmentes bei lokaler Übertragung gemäß physikalischem Netz (MTU)
* Ist diese nicht angegeben oder kann sie nicht ermittelt werden, dann wird ein Standartwert von 536 Bytes verwandt
* Ist diese nicht angegeben oder kann sie nicht ermittelt werden, dann wird ein Standartwert von 536 Bytes verwandt


== Allgemeines ==
== Allgemeines ==
TCP ist im Prinzip eine [[Ende-zu-Ende-Verbindung]] in [[Vollduplex]], welche die Übertragung der Informationen in beide Richtungen zulässt, analog zu einem Telefongespräch.
TCP ist im Prinzip eine [[Ende-zu-Ende-Verbindung]] in [[Vollduplex]], welche die Übertragung der Informationen in beide Richtungen zulässt, analog zu einem Telefongespräch
* Diese Verbindung kann auch als zwei [[Duplex (Nachrichtentechnik)|Halbduplexverbindungen]], bei denen Informationen in beide Richtungen (allerdings nicht gleichzeitig) fließen können, betrachtet werden.
* Diese Verbindung kann auch als zwei [[Duplex (Nachrichtentechnik)|Halbduplexverbindungen]], bei denen Informationen in beide Richtungen (allerdings nicht gleichzeitig) fließen können, betrachtet werden
* Die Daten in Gegenrichtung können dabei zusätzliche Steuerungsinformationen enthalten.
* Die Daten in Gegenrichtung können dabei zusätzliche Steuerungsinformationen enthalten
* Die Verwaltung dieser Verbindung sowie die Datenübertragung werden von der TCP-Software übernommen.
* Die Verwaltung dieser Verbindung sowie die Datenübertragung werden von der TCP-Software übernommen
* Die TCP-Software ist üblicherweise im Netz-Protokollstack des Betriebssystems angesiedelt.
* Die TCP-Software ist üblicherweise im Netz-Protokollstack des Betriebssystems angesiedelt
* Anwendungsprogramme benutzen eine Schnittstelle dazu, meist [[Socket (Software)|Sockets]], die sich (je nach Betriebssystem unterschiedlich) beispielsweise bei [[Microsoft Windows]] in extra einzubindenden [[Programmbibliothek]]en („[[Winsock]].dll“ bzw. „wsock32.dll“) befinden. [[Linux]] und viele andere [[Unixoides System|unixoide Betriebssysteme]] enthalten einen Socketlayer im Betriebssystemkern.
* Anwendungsprogramme benutzen eine Schnittstelle dazu, meist [[Socket (Software)|Sockets]], die sich (je nach Betriebssystem unterschiedlich) beispielsweise bei [[Microsoft Windows]] in extra einzubindenden [[Programmbibliothek]]en („[[Winsock]].dll“ bzw. „wsock32.dll“) befinden. [[Linux]] und viele andere [[Unixoides System|unixoide Betriebssysteme]] enthalten einen Socketlayer im Betriebssystemkern
* Auf den Socketlayer wird über Systemaufrufe zugegriffen.
* Auf den Socketlayer wird über Systemaufrufe zugegriffen
* Anwendungen, die TCP häufig nutzen, sind zum Beispiel [[Webbrowser]] und [[Webserver]].
* Anwendungen, die TCP häufig nutzen, sind zum Beispiel [[Webbrowser]] und [[Webserver]]


Jede TCP-Verbindung wird eindeutig durch zwei Endpunkte identifiziert.
Jede TCP-Verbindung wird eindeutig durch zwei Endpunkte identifiziert
* Ein Endpunkt stellt ein [[geordnetes Paar]] dar, bestehend aus [[IP-Adresse]] und [[Port (Protokoll)|Port]].
* Ein Endpunkt stellt ein [[geordnetes Paar]] dar, bestehend aus [[IP-Adresse]] und [[Port (Protokoll)|Port]]
* Ein solches Paar bildet eine bidirektionale [[Software]]-Schnittstelle und wird auch als [[Socket (Software)|Socket]] bezeichnet.
* Ein solches Paar bildet eine bidirektionale [[Software]]-Schnittstelle und wird auch als [[Socket (Software)|Socket]] bezeichnet
* Somit wird eine TCP-Verbindung durch vier Werte (einem Quadrupel) identifiziert:
* Somit wird eine TCP-Verbindung durch vier Werte (einem Quadrupel) identifiziert:


  (Lokaler Rechner, Lokaler Port, Entfernter Rechner, Entfernter Port)
  (Lokaler Rechner, Lokaler Port, Entfernter Rechner, Entfernter Port)


Dabei kommt es auf das gesamte Quadrupel an.
Dabei kommt es auf das gesamte Quadrupel an
* Beispielsweise können zwei verschiedene Prozesse auf demselben Rechner denselben lokalen Port benutzen und dabei sogar mit demselben Rechner auf der gegenüberliegenden Seite kommunizieren, sofern die beteiligten Prozesse auf der anderen Seite unterschiedliche Ports benutzen.
* Beispielsweise können zwei verschiedene Prozesse auf demselben Rechner denselben lokalen Port benutzen und dabei sogar mit demselben Rechner auf der gegenüberliegenden Seite kommunizieren, sofern die beteiligten Prozesse auf der anderen Seite unterschiedliche Ports benutzen
* In einem solchen Fall würde es sich um zwei verschiedene Verbindungen handeln, deren Quadrupel sich nur in einem von vier Werten unterscheidet: dem Port auf der gegenüberliegenden Seite.
* In einem solchen Fall würde es sich um zwei verschiedene Verbindungen handeln, deren Quadrupel sich nur in einem von vier Werten unterscheidet: dem Port auf der gegenüberliegenden Seite


  Verbindung 1: (Lokaler Rechner, Port x, Entfernter Rechner, Port y)
  Verbindung 1: (Lokaler Rechner, Port x, Entfernter Rechner, Port y)
  Verbindung 2: (Lokaler Rechner, Port x, Entfernter Rechner, Port z)
  Verbindung 2: (Lokaler Rechner, Port x, Entfernter Rechner, Port z)


Ein Serverprozess erzeugt beispielsweise einen Socket (''socket bind'') auf Port 80, markiert diesen für eingehende Verbindungen (''listen'') und fordert vom Betriebssystem die nächste anstehende Verbindung an (''accept'').
Ein Serverprozess erzeugt beispielsweise einen Socket (''socket bind'') auf Port 80, markiert diesen für eingehende Verbindungen (''listen'') und fordert vom Betriebssystem die nächste anstehende Verbindung an (''accept'')
* Diese Anforderung blockiert den Serverprozess zunächst, da noch keine Verbindung existiert.
* Diese Anforderung blockiert den Serverprozess zunächst, da noch keine Verbindung existiert
* Kommt dann die erste Verbindungsanfrage durch einen Client an, wird sie vom Betriebssystem angenommen, so dass die Verbindung zustande kommt.
* Kommt dann die erste Verbindungsanfrage durch einen Client an, wird sie vom Betriebssystem angenommen, so dass die Verbindung zustande kommt
* Ab jetzt wird diese Verbindung durch das oben beschriebene Quadrupel identifiziert.
* Ab jetzt wird diese Verbindung durch das oben beschriebene Quadrupel identifiziert
 
Schließlich wird der Serverprozess aufgeweckt und ihm ein Handle für diese Verbindung überreicht. Üblicherweise startet der Serverprozess anschließend einen Kindprozess, zu dem er die Behandlung der Verbindung delegiert.
* Er selbst setzt dann seine Arbeit mit einer weiteren ''Accept''-Anforderung an das Betriebssystem fort.
Dadurch ist es möglich, dass ein Webserver mehrere Verbindungen von verschiedenen Rechnern annehmen kann.
* Mehrfaches ''listen'' auf demselben Port ist nicht möglich. Üblicherweise bestimmt das Programm auf der [[Client]]seite den Port nicht selbst, sondern lässt ihn sich vom Betriebssystem zuweisen.
 
Ports sind [[Dualsystem|16-Bit-Zahlen]] (Portnummern) und reichen von 0 bis 65535.
* Ports von 0 bis 1023 sind reserviert ([[Well Known Ports]] und werden von der [[Internet Assigned Numbers Authority|IANA]] vergeben, z. B. ist Port 80 für das im [[World Wide Web|WWW]] verwendete [[Hypertext Transfer Protocol|HTTP]] reserviert.
* Das Benutzen der vordefinierten Ports ist nicht bindend.
* So kann jeder Administrator beispielsweise einen FTP-Server (normalerweise Port 21) auch auf einem beliebigen anderen Port laufen lassen.
 
== Header ==
[[Transmission Control Protocol/Header]]
 
== Ports ==
[[Port]]


== Verbindungsverwaltung ==
Schließlich wird der Serverprozess aufgeweckt und ihm ein Handle für diese Verbindung überreicht. Üblicherweise startet der Serverprozess anschließend einen Kindprozess, zu dem er die Behandlung der Verbindung delegiert
[[Transmission Control Protocol/Verbindungsverwaltung]]
* Er selbst setzt dann seine Arbeit mit einer weiteren ''Accept''-Anforderung an das Betriebssystem fort
Dadurch ist es möglich, dass ein Webserver mehrere Verbindungen von verschiedenen Rechnern annehmen kann
* Mehrfaches ''listen'' auf demselben Port ist nicht möglich. Üblicherweise bestimmt das Programm auf der [[Client]]seite den Port nicht selbst, sondern lässt ihn sich vom Betriebssystem zuweisen


== TCP-Prüfsumme und TCP-Pseudo-Header ==
Ports sind [[Dualsystem|16-Bit-Zahlen]] (Portnummern) und reichen von 0 bis 65535
siehe [[Transmission Control Protocol/Prüfsumme]]
* Ports von 0 bis 1023 sind reserviert ([[Well Known Ports]] und werden von der [[Internet Assigned Numbers Authority|IANA]] vergeben, z. B. ist Port 80 für das im [[World Wide Web|WWW]] verwendete [[Hypertext Transfer Protocol|HTTP]] reserviert
* Das Benutzen der vordefinierten Ports ist nicht bindend
* So kann jeder Administrator beispielsweise einen FTP-Server (normalerweise Port 21) auch auf einem beliebigen anderen Port laufen lassen


== Datenintegrität und Zuverlässigkeit ==
== Datenintegrität und Zuverlässigkeit ==
Im Gegensatz zum verbindungslosen [[User Datagram Protocol|UDP]] [[Implementation|implementiert]] TCP einen bidirektionalen, byte-orientierten, zuverlässigen Datenstrom zwischen zwei Endpunkten.
Im Gegensatz zum verbindungslosen [[User Datagram Protocol|UDP]] [[Implementation|implementiert]] TCP einen bidirektionalen, byte-orientierten, zuverlässigen Datenstrom zwischen zwei Endpunkten
* Das darunterliegende Protokoll ([[Internet Protocol|IP]]) ist paketorientiert, wobei [[Datenpaket]]e verlorengehen können, in verkehrter Reihenfolge ankommen dürfen und sogar doppelt empfangen werden können.
* Das darunterliegende Protokoll ([[Internet Protocol|IP]]) ist paketorientiert, wobei [[Datenpaket]]e verlorengehen können, in verkehrter Reihenfolge ankommen dürfen und sogar doppelt empfangen werden können
* TCP wurde entwickelt, um mit der Unsicherheit der darunterliegenden Schichten umzugehen.
* TCP wurde entwickelt, um mit der Unsicherheit der darunterliegenden Schichten umzugehen
* Es prüft daher die Integrität der Daten mittels der [[Prüfsumme]] im Paketkopf und stellt die Reihenfolge durch [[Sequenznummer]]n sicher.
* Es prüft daher die Integrität der Daten mittels der [[Prüfsumme]] im Paketkopf und stellt die Reihenfolge durch [[Sequenznummer]]n sicher
* Der Sender [[Sendewiederholung|wiederholt]] das Senden von Paketen, falls keine Bestätigung innerhalb einer bestimmten Zeitspanne ([[Timeout (Netzwerktechnik)|Timeout]]) eintrifft.
* Der Sender [[Sendewiederholung|wiederholt]] das Senden von Paketen, falls keine Bestätigung innerhalb einer bestimmten Zeitspanne ([[Timeout (Netzwerktechnik)|Timeout]]) eintrifft
* Die Daten der Pakete werden beim Empfänger in einem [[Puffer (Informatik)|Puffer]] in der richtigen Reihenfolge zu einem Datenstrom zusammengefügt und doppelte Pakete verworfen.
* Die Daten der Pakete werden beim Empfänger in einem [[Puffer (Informatik)|Puffer]] in der richtigen Reihenfolge zu einem Datenstrom zusammengefügt und doppelte Pakete verworfen


Der [[Datentransfer]] kann selbstverständlich jederzeit nach dem „Aufbau einer Verbindung“ gestört, verzögert oder ganz unterbrochen werden.
Der [[Datentransfer]] kann selbstverständlich jederzeit nach dem „Aufbau einer Verbindung“ gestört, verzögert oder ganz unterbrochen werden
* Das Übertragungssystem läuft dann in einen Timeout.
* Das Übertragungssystem läuft dann in einen Timeout
* Der vorab getätigte „Verbindungsaufbau“ stellt also keinerlei Gewähr für eine nachfolgende, dauerhaft gesicherte Übertragung dar.
* Der vorab getätigte „Verbindungsaufbau“ stellt also keinerlei Gewähr für eine nachfolgende, dauerhaft gesicherte Übertragung dar


=== Bestätigungen ===
=== Bestätigungen ===
Die jeweilige Länge des Puffers, bis zu der keine Lücke im Datenstrom existiert, wird bestätigt (''windowing'').
Die jeweilige Länge des Puffers, bis zu der keine Lücke im Datenstrom existiert, wird bestätigt (''windowing'')
* Dadurch ist das Ausnutzen der Netz-Bandbreite auch bei großen Strecken möglich.
* Dadurch ist das Ausnutzen der Netz-Bandbreite auch bei großen Strecken möglich
* Bei einer Übersee- oder Satellitenverbindung dauert das Eintreffen des ersten ACK-Signals aus technischen Gründen bisweilen mehrere 100 Millisekunden, in dieser Zeit können unter Umständen mehrere hundert Pakete gesendet werden.
* Bei einer Übersee- oder Satellitenverbindung dauert das Eintreffen des ersten ACK-Signals aus technischen Gründen bisweilen mehrere 100 Millisekunden, in dieser Zeit können unter Umständen mehrere hundert Pakete gesendet werden
* Der Sender kann den Empfängerpuffer füllen, bevor die erste Bestätigung eintrifft.
* Der Sender kann den Empfängerpuffer füllen, bevor die erste Bestätigung eintrifft
* Alle Pakete im Puffer können gemeinsam bestätigt werden.
* Alle Pakete im Puffer können gemeinsam bestätigt werden
* Bestätigungen können zusätzlich zu den Daten in den [[#Aufbau des TCP-Headers|TCP-Header]] des entgegengesetzten Datenstroms eingefügt werden (''piggybacking''), falls der Empfänger ebenfalls Daten für den Sender bereithält.
* Bestätigungen können zusätzlich zu den Daten in den [[#Aufbau des TCP-Headers|TCP-Header]] des entgegengesetzten Datenstroms eingefügt werden (''piggybacking''), falls der Empfänger ebenfalls Daten für den Sender bereithält


<noinclude>
<noinclude>
Zeile 194: Zeile 193:
* [[Stream Control Transmission Protocol]] (SCTP)
* [[Stream Control Transmission Protocol]] (SCTP)


==== Dokumentation ====
=== Dokumentation ===
===== RFC =====
==== RFC ====
* RFC 793 (Transmission Control Protocol)
{| class="wikitable sortable options"
* RFC 1071 (Berechnen der Prüfsumme für IP, UDP und TCP)
* RFC 1122 (Fehlerbehebungen bei TCP)
* RFC 1323 (Erweiterungen bei TCP)
* RFC 2018 (TCP SACK – Selective Acknowledgment Options)
* RFC 3168 (Explicit Congestion Notification)
* RFC 5482 (TCP User Timeout Option)
* RFC 5681 (TCP Congestion Control – TCP-Überlastkontrolle)
* RFC 7414 (Übersicht zu TCP RFCs)
* RFC 793 (1981)
* RFC 7323 (2014)
 
 
{| class="wikitable sortable options big"
|-
|-
! RFC !! Titel
! RFC !! Titel
Zeile 215: Zeile 201:
| [https://www.rfc-editor.org/info/rfc793 793] || Transmission Control Protocol
| [https://www.rfc-editor.org/info/rfc793 793] || Transmission Control Protocol
|-
|-
| [https://www.rfc-editor.org/info/rfc0000 0000] || Beschreibung
| [https://www.rfc-editor.org/info/rfc1071 107] || Berechnen der Prüfsumme für IP, UDP und TCP
|-
| [https://www.rfc-editor.org/info/rfc1122 1122] || Fehlerbehebungen bei TCP
|-
| [https://www.rfc-editor.org/info/rfc1323 1323] || Erweiterungen bei TCP
|-
| [https://www.rfc-editor.org/info/rfc2018 2018] || TCP SACK – Selective Acknowledgment Options
|-
| [https://www.rfc-editor.org/info/rfc3168 3168] || Explicit Congestion Notification
|-
| [https://www.rfc-editor.org/info/rfc5482 54829] || TCP User Timeout Option
|-
| [https://www.rfc-editor.org/info/rfc5681 5681] || TCP Congestion Control – TCP-Überlastkontrolle
|-
| [https://www.rfc-editor.org/info/rfc7414 7414] || Übersicht zu TCP RFCs
|-
| [https://www.rfc-editor.org/info/rfc7323 7323] || 2014
|}
|}


===== Man-Pages =====
=== Links ===
===== Info-Pages =====
==== Weblinks ====
==== Links ====
===== Projekt =====
===== Weblinks =====
# [http://www.cs.berkeley.edu/~brewer/cs262/cong-avoid.pdf Congestion Avoidance and Control]
# [http://www.cs.berkeley.edu/~brewer/cs262/cong-avoid.pdf Congestion Avoidance and Control]
# [http://www.warriorsofthe.net/ Warriors of the net] (Film zu TCP)
# [http://www.warriorsofthe.net/ Warriors of the net] (Film zu TCP)

Aktuelle Version vom 28. Januar 2024, 14:54 Uhr

Transmission Control Protocol (TCP)

Beschreibung

Transportprotokoll
Funktionen Beschreibung
Zuverlässig
Verbindungsorientiert
Datenströme Übertragung von Datenströmen
TCP stell eine Verbindung zwischen zwei Endpunkten (Sockets) einer Netzverbindung her
Vorteile
Allgemeines
  • TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex
  • Kann auch als zwei Halbduplexverbindungen betrachtet werden (Informationsfluss in beide Richtungen (allerdings nicht gleichzeitig))
  • Die Daten in Gegenrichtung können zusätzliche Steuerungsinformationen enthalten
  • Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver
TCP-Software
  • Übernimmt Verbindungsverwaltung sowie die Datenübertragung
  • Netz-Protokollstack des Betriebssystems
  • Anwendungsprogramme nutzen Sockets

Entwicklung

  • Entwickelt von Robert E. Kahn und Vinton G. Cerf als Forschungsarbeit
  • Beginn 1973, erste Standardisierung 1981 als RFC 793
  • Danach gab es viele Erweiterungen, diese werden bis heute in RFCs spezifiziert

Das Transmission Control Protocol arbeitet auf dem OSI-04

  • TCP verwendet 16-Bit Portnummern zur Adressierung
  • Zusätzlich zur Adressierung übernimmt es weitere Aufgaben
  • Verbindungsmanagement (Three-Way-Handshake)
  • Verbindungsaufbau/-abbau
  • Fehlerkontrolle (-korrektur)
  • Flußkontrolle (Flow Control)
  • verhindert, dass der Empfänger von einem Sender schneller Daten erhält, als er entgegennehmen kann
  • Netzwerk-Überlastkontrolle (Congestion Control)
  • verhindert, dass es zu einer Überlastsituation im Netz kommt, die zum vollständigen Zusammenbruch des Netzes führen könnte (congestion collapse)
  • bei Erkennen einer Überlastsituation (Paketverlust!) wird vom Sender die Datenrate gedrosselt
  • transparente Übertragung von byte streams
  • Anwendungen, die TCP benutzen, sollen nicht merken, dass die Daten in Form von Paketen übertragen werden
  • Mutliplexing
  • Mehrfachnutzung einer Verbindung
  • Verbindungsorientiertes Protokoll
  • Beinhaltet verschiedene Algorithmen zur Fehlererkennung und -behandlung
  • Sequenznummern
  • Quittungsnummern
  • Anzeigen (Flags)
  • Die richtige Reihenfolge der Daten ist garantiert
  • Bietet der Anwendungsschicht einen zuverlässigen Transportdienst
  • RFC 793. J. Postel. Transmission Control Protocol. 1981
  • setzt direkt auf dem Internet Protokoll (IP) auf
  • IP Protokoll Nr.: 06
  • Theoretisch ist es möglich TCP mit einem beliebigen Protokoll der Schicht 3 zu kombinieren
  • Praktisch wird TCP allerdings immer in IP gekapselt
  • garantiert eine fehlergesicherte, zuverlässige Transportverbindung zwischen zwei Rechnersystemen (Ende zu Ende Kontrolle)

TCP im DoD-Modell

  • Rolle von TCP im OSI-Referenzmodell

Eigenschaften von TCP

  • Vollduplex-Verbindung
  • stellt eine “byte pipe” zur Verfügung - unstrukturierter Datenstrom
  • Folgenummern sind Bytenummern
  • Sliding Window-Protokoll
  • Variable Grösse des Sendefensters bestimmt durch das Maximum von:
  • Angabe des Empfängers (receiver window size)
  • Congestion window size, abhängig von einer lokalen Schätzung der Netzbelastung -> “Slow Start” Algorithmus

Basismechanismen

  • Unterteilt den byte stream in Einheiten
  • die jeweils in einem IP Paket übertragen werden, diese Einheiten heißen Segmente
  • Segmente haben eine variable Länge
  • Die maximale Segmentgrösse wird bei der Verbindungserstellung festgelegt
  • Jedes Segment hat eine Folgenummer, die seine Position im Datenstrom in Bytes spezifiziert
  • Abgesendete Segmente müssen innerhalb einer bestimmten Zeit bestätigt werden (adaptiv geschätzte Round Trip Time)
  • Bestätigungen werden verzögert gesendet (ca. 200 ms)
  • Wenn keine Bestätigung über den erfolgreichen Empfang dieses Paketes innerhalb der Timer-Laufzeit eintrifft, wird die Übertragung wiederholt
  • Jedes Segment hat eine Ende-zu-Ende-Prüfsumme
  • Fehlerhaft empfangene Segmente werden ignoriert
  • Empfänger ordnet empfangene Segmente entsprechend ihrer Folgenummer
  • Duplikate werden ignoriert

Socket-Schnittstelle

  • De-facto-Standard für TCP/IP Programmierschnittstelle
  • Zugang zu TCP, UDP und (eingeschränkt) IP
  • Unterstützung verschiedener Protokolle
  • Protocol familiy
  • Address familiy
  • Abstraktion für Kommunikationsendpunkte
  • sockets

… mit verschiedenen Kommunikationseigenschaften

  • socket types (stream socket, datagram socket)
  • Benennung/Adressierung von Kommunikations-endpunkten
  • name binding
  • Können benutzt werden wie Dateideskriptoren

Verbindungen und Verbindungsendpunkte

  • Eine TCP-Verbindung wird durch ein Paar von Adressen und Port-Nummern identifiziert (Verbindungsendpunkte):
  • IP-Adresse und Port-Nummer Host A
  • IP-Adresse und Port-Nummer Host B
  • Jede Verbindung wird durch ein Paar von Verbindungsendpunkten eindeutig identifiziert
  • mehrere Verbindung zwischen den gleichen Hosts sind dadurch gleichzeitig möglich

Segmente, Datenströme und Sequenznummern

  • Erhaltung der Reihenfolge
  • Nummerierung:
  • Zufallszahl auf beiden Seiten (32 Bit)
  • Seq.nr. := Initiale Seq.nr. + Byte-Position im Datenstrom
  • TCP betrachtet einen Datenstrom als Sequenz von Bytes, die für die Übertragung in TCP-Segmente eingeteilt werden
  • Jedes Segment wird dann in der Regel auf ein IP-Paket abgebildet
  • Größe eines Segmentes bei lokaler Übertragung gemäß physikalischem Netz (MTU)
  • Ist diese nicht angegeben oder kann sie nicht ermittelt werden, dann wird ein Standartwert von 536 Bytes verwandt

Allgemeines

TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex, welche die Übertragung der Informationen in beide Richtungen zulässt, analog zu einem Telefongespräch

  • Diese Verbindung kann auch als zwei Halbduplexverbindungen, bei denen Informationen in beide Richtungen (allerdings nicht gleichzeitig) fließen können, betrachtet werden
  • Die Daten in Gegenrichtung können dabei zusätzliche Steuerungsinformationen enthalten
  • Die Verwaltung dieser Verbindung sowie die Datenübertragung werden von der TCP-Software übernommen
  • Die TCP-Software ist üblicherweise im Netz-Protokollstack des Betriebssystems angesiedelt
  • Anwendungsprogramme benutzen eine Schnittstelle dazu, meist Sockets, die sich (je nach Betriebssystem unterschiedlich) beispielsweise bei Microsoft Windows in extra einzubindenden Programmbibliotheken („Winsock.dll“ bzw. „wsock32.dll“) befinden. Linux und viele andere unixoide Betriebssysteme enthalten einen Socketlayer im Betriebssystemkern
  • Auf den Socketlayer wird über Systemaufrufe zugegriffen
  • Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver

Jede TCP-Verbindung wird eindeutig durch zwei Endpunkte identifiziert

  • Ein Endpunkt stellt ein geordnetes Paar dar, bestehend aus IP-Adresse und Port
  • Ein solches Paar bildet eine bidirektionale Software-Schnittstelle und wird auch als Socket bezeichnet
  • Somit wird eine TCP-Verbindung durch vier Werte (einem Quadrupel) identifiziert:
(Lokaler Rechner, Lokaler Port, Entfernter Rechner, Entfernter Port)

Dabei kommt es auf das gesamte Quadrupel an

  • Beispielsweise können zwei verschiedene Prozesse auf demselben Rechner denselben lokalen Port benutzen und dabei sogar mit demselben Rechner auf der gegenüberliegenden Seite kommunizieren, sofern die beteiligten Prozesse auf der anderen Seite unterschiedliche Ports benutzen
  • In einem solchen Fall würde es sich um zwei verschiedene Verbindungen handeln, deren Quadrupel sich nur in einem von vier Werten unterscheidet: dem Port auf der gegenüberliegenden Seite
Verbindung 1: (Lokaler Rechner, Port x, Entfernter Rechner, Port y)
Verbindung 2: (Lokaler Rechner, Port x, Entfernter Rechner, Port z)

Ein Serverprozess erzeugt beispielsweise einen Socket (socket bind) auf Port 80, markiert diesen für eingehende Verbindungen (listen) und fordert vom Betriebssystem die nächste anstehende Verbindung an (accept)

  • Diese Anforderung blockiert den Serverprozess zunächst, da noch keine Verbindung existiert
  • Kommt dann die erste Verbindungsanfrage durch einen Client an, wird sie vom Betriebssystem angenommen, so dass die Verbindung zustande kommt
  • Ab jetzt wird diese Verbindung durch das oben beschriebene Quadrupel identifiziert

Schließlich wird der Serverprozess aufgeweckt und ihm ein Handle für diese Verbindung überreicht. Üblicherweise startet der Serverprozess anschließend einen Kindprozess, zu dem er die Behandlung der Verbindung delegiert

  • Er selbst setzt dann seine Arbeit mit einer weiteren Accept-Anforderung an das Betriebssystem fort

Dadurch ist es möglich, dass ein Webserver mehrere Verbindungen von verschiedenen Rechnern annehmen kann

  • Mehrfaches listen auf demselben Port ist nicht möglich. Üblicherweise bestimmt das Programm auf der Clientseite den Port nicht selbst, sondern lässt ihn sich vom Betriebssystem zuweisen

Ports sind 16-Bit-Zahlen (Portnummern) und reichen von 0 bis 65535

  • Ports von 0 bis 1023 sind reserviert (Well Known Ports und werden von der IANA vergeben, z. B. ist Port 80 für das im WWW verwendete HTTP reserviert
  • Das Benutzen der vordefinierten Ports ist nicht bindend
  • So kann jeder Administrator beispielsweise einen FTP-Server (normalerweise Port 21) auch auf einem beliebigen anderen Port laufen lassen

Datenintegrität und Zuverlässigkeit

Im Gegensatz zum verbindungslosen UDP implementiert TCP einen bidirektionalen, byte-orientierten, zuverlässigen Datenstrom zwischen zwei Endpunkten

  • Das darunterliegende Protokoll (IP) ist paketorientiert, wobei Datenpakete verlorengehen können, in verkehrter Reihenfolge ankommen dürfen und sogar doppelt empfangen werden können
  • TCP wurde entwickelt, um mit der Unsicherheit der darunterliegenden Schichten umzugehen
  • Es prüft daher die Integrität der Daten mittels der Prüfsumme im Paketkopf und stellt die Reihenfolge durch Sequenznummern sicher
  • Der Sender wiederholt das Senden von Paketen, falls keine Bestätigung innerhalb einer bestimmten Zeitspanne (Timeout) eintrifft
  • Die Daten der Pakete werden beim Empfänger in einem Puffer in der richtigen Reihenfolge zu einem Datenstrom zusammengefügt und doppelte Pakete verworfen

Der Datentransfer kann selbstverständlich jederzeit nach dem „Aufbau einer Verbindung“ gestört, verzögert oder ganz unterbrochen werden

  • Das Übertragungssystem läuft dann in einen Timeout
  • Der vorab getätigte „Verbindungsaufbau“ stellt also keinerlei Gewähr für eine nachfolgende, dauerhaft gesicherte Übertragung dar

Bestätigungen

Die jeweilige Länge des Puffers, bis zu der keine Lücke im Datenstrom existiert, wird bestätigt (windowing)

  • Dadurch ist das Ausnutzen der Netz-Bandbreite auch bei großen Strecken möglich
  • Bei einer Übersee- oder Satellitenverbindung dauert das Eintreffen des ersten ACK-Signals aus technischen Gründen bisweilen mehrere 100 Millisekunden, in dieser Zeit können unter Umständen mehrere hundert Pakete gesendet werden
  • Der Sender kann den Empfängerpuffer füllen, bevor die erste Bestätigung eintrifft
  • Alle Pakete im Puffer können gemeinsam bestätigt werden
  • Bestätigungen können zusätzlich zu den Daten in den TCP-Header des entgegengesetzten Datenstroms eingefügt werden (piggybacking), falls der Empfänger ebenfalls Daten für den Sender bereithält


Anhang

Siehe auch


Dokumentation

RFC

RFC Titel
793 Transmission Control Protocol
107 Berechnen der Prüfsumme für IP, UDP und TCP
1122 Fehlerbehebungen bei TCP
1323 Erweiterungen bei TCP
2018 TCP SACK – Selective Acknowledgment Options
3168 Explicit Congestion Notification
54829 TCP User Timeout Option
5681 TCP Congestion Control – TCP-Überlastkontrolle
7414 Übersicht zu TCP RFCs
7323 2014

Links

Weblinks

  1. Congestion Avoidance and Control
  2. Warriors of the net (Film zu TCP)