Transmission Control Protocol: Unterschied zwischen den Versionen

Aus Foxwiki
 
(272 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 Netzwerkkomponenten ausgetauscht werden sollen.
'''Transmission Control Protocol''' (TCP)


{| class="wikitable float-right"
== Beschreibung ==
; Transportprotokoll
{| class="wikitable options"
|-
|-
!colspan="2" style="background:#C0C0FF; font-size:larger;"| TCP (Transmission Control Protocol)
! Funktionen !! Beschreibung
|-
|-
! Familie:
| Zuverlässig ||
| Internetprotokollfamilie
|-
|-
! Einsatzgebiet:
| Verbindungsorientiert ||
| Zuverlässiger bidirektionaler<br />Datentransport
|-
|-
| 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
* [[Transmission Control Protocol/Überlastungskontrolle|Überlastungskontrolle]]
* Zuverlässige Datenübertragung
** erkennt verlorene, doppelte und fehlerhafte Segmente
; 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 [https://tools.ietf.org/html/rfc793 ''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)


! Netzwerk-IP-Transportprotokoll:
=== TCP im DoD-Modell ===
| TCP| Hypertext Transfer Protocol ('''HTTP'''), Simple Mail Transfer Protocol ('''SMTP''')
* Rolle von TCP im OSI-Referenzmodell
|-
 
! Standards:
=== Eigenschaften von TCP ===
| RFC 793 (1981)<br />RFC 7323 (2014)
* 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


= Beschreibung =
== Socket-Schnittstelle ==
== Geschichte ==
* De-facto-Standard für TCP/IP Programmierschnittstelle
*Entwickelt von Robert E. Kahn und Vinton G. Cerf als Forschungsarbeit.
* Zugang zu TCP, UDP und (eingeschränkt) IP
*Beginn 1973, erste Standardisierung 1981 als [https://tools.ietf.org/html/rfc793 ''RFC 793''].
* Unterstützung verschiedener Protokolle
*Danach gab es viele Erweiterungen, diese werden bis heute in RFCs spezifiziert.
* 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


== Was ist TCP ==
== Verbindungen und Verbindungsendpunkte ==
*Ist ein zuverlässiges, verbindungsorientiertes, paketvermitteltes (nicht ''paketvermittelnd'') Transportprotokoll.
* Eine TCP-Verbindung wird durch ein Paar von Adressen und Port-Nummern identifiziert (Verbindungsendpunkte):
*TCP ermöglicht die Übertragung eines Datenstroms.
* IP-Adresse und Port-Nummer Host A
*Im Unterschied zum verbindungslosen [[Netzwerke:UDP | User Datagram Protokoll (UDP)]] stellt TCP eine Verbindung zwischen zwei Endpunkten (Sockets) einer Netzverbindung her.
* IP-Adresse und Port-Nummer Host B
**Auf dieser Verbindung können in beide Richtungen Daten übertragen werden.
* Jede Verbindung wird durch ein Paar von Verbindungsendpunkten eindeutig identifiziert
* mehrere Verbindung zwischen den gleichen Hosts sind dadurch gleichzeitig möglich


== Vorteile ==
== Segmente, Datenströme und Sequenznummern ==
*Netzwerküberlastungskontrolle.
* Erhaltung der Reihenfolge
*Zuverlässige Datenübertragung:
* Nummerierung:
**erkennt verlorene Segmente, doppelte Segmente und fehlerhafte Segmente.
* 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 ==
== Allgemeines ==
TCP ist im Prinzip eine Ende-zu-Ende-Verbindung in Vollduplex.
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
*Kann auch als zwei Halbduplexverbindungen betrachtet werden (Informationsfluss in beide Richtungen (allerdings nicht gleichzeitig)).
* 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 zusätzliche Steuerungsinformationen enthalten.  
* Die Daten in Gegenrichtung können dabei zusätzliche Steuerungsinformationen enthalten
*Anwendungen, die TCP häufig nutzen, sind zum Beispiel Webbrowser und Webserver.
* 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 [[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
* Anwendungen, die TCP häufig nutzen, sind zum Beispiel [[Webbrowser]] und [[Webserver]]


=== TCP-Software ===
Jede TCP-Verbindung wird eindeutig durch zwei Endpunkte identifiziert
*Übernimmt Verbindungsverwaltung sowie die Datenübertragung.
* Ein Endpunkt stellt ein [[geordnetes Paar]] dar, bestehend aus [[IP-Adresse]] und [[Port (Protokoll)|Port]]
*Netz-Protokollstack des Betriebssystems.
* Ein solches Paar bildet eine bidirektionale [[Software]]-Schnittstelle und wird auch als [[Socket (Software)|Socket]] bezeichnet
*Anwendungsprogramme nutzen Sockets. 
* Somit wird eine TCP-Verbindung durch vier Werte (einem Quadrupel) identifiziert:


=== Software-Schnitstelle ===
(Lokaler Rechner, Lokaler Port, Entfernter Rechner, Entfernter Port)
*bei Windows in extra einzubindenden Programmbibliotheken („Winsock.dll“ bzw. „wsock32.dll“).
*Linux und andere unixoide Betriebssysteme enthalten einen Socketlayer im Betriebssystemkern (Zugriff über Systemaufrufe).


== Header ==
Dabei kommt es auf das gesamte Quadrupel an
=== Allgemeines ===
* 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
*Das TCP-Segment besteht immer aus zwei Teilen: dem  Header  und der Nutzlast.
* 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
*Die Nutzlast enthält die zu übertragenden Daten.
**Die wiederum Protokollinformationen der Anwendungsschicht, wie HTTP oder FTP, entsprechen können.
*Der Header enthält für die Steuerung der Kommunikation erforderliche Daten.
*Da das Options-Feld in der Regel nicht genutzt wird, hat ein typischer Header eine Größe von 20 Byte.


=== Felder des TCP-Header ===
Verbindung 1: (Lokaler Rechner, Port x, Entfernter Rechner, Port y)
[[Datei:TCP Header.svg|mini|550px| Aufbau des TCP-Headers]]
Verbindung 2: (Lokaler Rechner, Port x, Entfernter Rechner, Port z)


{| class="wikitable"
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'')
! Feld !! Funktion !! Größe
* 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
| Source Port (Quellport)
* Ab jetzt wird diese Verbindung durch das oben beschriebene Quadrupel identifiziert
|
 
*Gibt die Portnummer auf der Senderseite an
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
| 2 Byte
* 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
| Destinations Port (Zielport)
* 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
|
 
*Gibt die Portnummer auf der Empfängerseite an.
Ports sind [[Dualsystem|16-Bit-Zahlen]] (Portnummern) und reichen von 0 bis 65535
| 2 Byte
* Ports von 0 bis 1023 sind reserviert ([[Well Known Ports]] und werden von der [[Internet Assigned Numbers Authority|IANA]] vergeben, z.&nbsp;B.&nbsp;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
| Sequence Number
* So kann jeder Administrator beispielsweise einen FTP-Server (normalerweise Port 21) auch auf einem beliebigen anderen Port laufen lassen
|
 
*Sequenznummer des ersten Daten-Oktett dieses TCP-Segments, dient zur Sortierung  Oder die Initialisierungs-Sequenznummer falls das SYN-Flag gesetzt ist
== Datenintegrität und Zuverlässigkeit ==
| 4 Byte
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
| Acknowledgement Number
* 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
*Gibt die '' Sequenznummer '' an, die der Absender dieses TCP-Segments als Nächstes erwartet  Sie ist nur gültig, falls das ACK-Flag  gesetzt ist.
* Der Sender [[Sendewiederholung|wiederholt]] das Senden von Paketen, falls keine Bestätigung innerhalb einer bestimmten Zeitspanne ([[Timeout (Netzwerktechnik)|Timeout]]) eintrifft
| 4 Byte
* 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
|-----
 
| Data Offset
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
*Gibt die ''Länge des TCP-Headers'' in 32-Bit-Blöcken an (ohne Nutzdaten).
* Der vorab getätigte „Verbindungsaufbau“ stellt also keinerlei Gewähr für eine nachfolgende, dauerhaft gesicherte Übertragung dar
*Hiermit wird die Startadresse der Nutzdaten angezeigt.
| 4 Bit
|-----
| Reserved
|
*Ist für zukünftige Verwendungen reserviert.
*Alle Bits müssen null sein.
| 4 Bit
|-----
| Control-Flags
|
*Zweiwertige Variablen mit den Zuständen ''gesetzt'' und ''nicht gesetzt''.
*Kennzeichnung für die wichtigen Zustände der Kommunikation und Weiterverarbeitung der Daten.
| 8 Bit
|-----
| (Receive) Window
|
*Ist die Anzahl der Bytes die der Sender dieses TCP-Segments bereit ist zu empfangen.
*Beginnend bei dem durch das ''Acknowledgementfeld'' indizierten Daten-Oktett.
| 2 Byte
|-----
| Checksum
|
*Dient zur Erkennung von Übertragungsfehlern.
*Wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet.
*Der Header besteht aus Ziel-IP, Quell-IP, TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
| 2 Byte
|-----
| Urgent Pointer
|
*Nur gültig, wenn das URG-Flag gesetzt ist.
*Die Urgent-Daten beginnen sofort nach dem Header
*Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes ''nach'' den Urgent-Daten an.
| 2 Byte
|-----
| Options
|
*Unterschiedlich groß und enthält Zusatzinformationen.
*Müssen ein Vielfaches von 32 Bit lang sein, ansonsten muss mit Nullbits aufefüllt werden (''Padding'').
*Ermöglicht Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie z.B. die Maximalgröße des Nutzdatenfeldes.
| 0–40 Byte
|}


=== TCP-Flags ===
=== Bestätigungen ===
{| class="wikitable"
Die jeweilige Länge des Puffers, bis zu der keine Lücke im Datenstrom existiert, wird bestätigt (''windowing'')
! Feld !! Funktion !! Größe
* 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&nbsp;Millisekunden, in dieser Zeit können unter Umständen mehrere hundert Pakete gesendet werden
| ECE-Flag (ECN-Echo)
* Der Sender kann den Empfängerpuffer füllen, bevor die erste Bestätigung eintrifft
|
* Alle Pakete im Puffer können gemeinsam bestätigt werden
* Teilt dem Sender mit, dass das Netzwerk überlastet ist und die Senderate reduziert werden muss.
* 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
* Wird für Explicit Congestion Notification (ECN) benötigt
| 1 Bit
|-----
| CRW-Flag (''Congestion Window Reduced'')
|
* Teilt dem Empfänger mit das die Senderate reduziert wurde.
* Wird für Explicit Congestion Notification (ECN) benötigt
| 1 Bit
|-----
| URG-Flag (''Urgent'')
|
*Die Daten nach dem Header werden sofort von der Anwendung bearbeitet.
*Anwendung unterbricht die Datenverarbeitung des aktuellen TCP-Segments und liest alle Bytes nach dem Header bis zu dem Byte, auf das das ''Urgent-Pointer ''-Feld zeigt, aus.
*Kann verwendet werden, um eine Anwendung auf dem Empfänger abzubrechen.
*In der Regel wird dieses Flag nicht ausgewertet.
| 1 Bit
|-----
| ACK-Flag (''Acknowledgment'')
|
* Hat in Verbindung mit der ''Acknowledgment''-Nummer die Aufgabe, den Empfang von TCP-Segmenten bestätigen.
* Die ''Acknowledgment''-Nummer ist nur gültig, wenn das Flag gesetzt ist.
| 1 Bit
|-----
| PSH-Flag (''Push'')
|
* Sowohl der ausgehende, als auch der eingehende Puffer wird übergangen.
* Hilft den Datenstrom von TCP effizienter zu verarbeiten, indem die empfangende Applikation gezielter aufgeweckt werden kann.
* RFC 1122 & RFC 793
| 1 Bit
|-----
| RST-Flag (''Reset'')
|
* Wird verwendet, wenn eine Verbindung abgebrochen werden soll.
* z.B. bei technischen Problemen oder zur Abweisung unerwünschter Verbindungen
* Oder bei nicht geöffneten Ports, es wird kein ICMP-Paket mit „Port Unreachable“ verschickt.
| 1 Bit
|-----
| SYN-Flag (''Synchronize'')
|
* Pakete mit diesem Flag initiieren eine Verbindung.
* Dient der Synchronisation von ''Sequenznummern'' beim Verbindungsaufbau.
* Server antwortet normalerweise mit SYN+ACK oder RST.
| 1 Bit
|-----
| FIN-Flag (''Finish'')
|
* Schlussflag, dient zur Freigabe der Verbindung, zeigt an, dass keine Daten vom Sender kommen.
* FIN- und SYN-Flags haben Sequenznummern, damit diese in der richtigen Reihenfolge abgearbeitet werden.
| 1 Bit
|-----
|}


= Installation =
<noinclude>


= Syntax =
== Anhang ==
== Parameter ==
=== Siehe auch ===
== Optionen ==
{{Special:PrefixIndex/Transmission Control Protocol}}
= Konfiguration =
----
== Dateien ==
* [[Liste der standardisierten Ports]]
* [[Stream Control Transmission Protocol]] (SCTP)


= Anwendungen =
=== Dokumentation ===
= Dokumentation =
==== RFC ====
== Man-Pages ==
{| class="wikitable sortable options"
== Info-Pages ==
|-
= Links =
! RFC !! Titel
== Intern ==
|-
== Weblinks ==
| [https://www.rfc-editor.org/info/rfc793 793] || Transmission Control Protocol
|-
| [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
|}


= Testfragen =
=== Links ===
<div class="toccolours mw-collapsible mw-collapsed">
==== Weblinks ====
''Testfrage 1''
# [http://www.cs.berkeley.edu/~brewer/cs262/cong-avoid.pdf Congestion Avoidance and Control]
<div class="mw-collapsible-content">'''Antwort1'''</div>
# [http://www.warriorsofthe.net/ Warriors of the net] (Film zu TCP)
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


[[Kategorie:Netzwerke]]
[[Kategorie:TCP]]
</noinclude>

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)