Transmission Control Protocol: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 229: Zeile 229:


[[Kategorie:Netzwerke]]
[[Kategorie:Netzwerke]]
= TMP =
== TCP-Verbindung ==
*Jede TCP-Verbindung wird eindeutig durch zwei Endpunkte identifiziert.
**Ein Endpunkt stellt ein geordnetes Paar dar (IP-Adresse und Port).
**Ein solches Paar bildet eine bidirektionale Software-Schnittstelle (Socket).
TCP-Verbindungen werden durch vier Werte (einem Quadrupel) eindeutig identifiziert:
(Quell-IP-Adresse, Quell-Port, Ziel-IP-Adresse, Ziel-Port)
=== Beispiel ===
#Ein Serverprozess erzeugt einen Socket auf Port 80 (''bind'').
#*Markiert diesen für eingehende Verbindungen (''listen'').
#*Fordert vom Betriebssystem die nächste anstehende Verbindung an (''accept'').
#*Diese Anforderung blockiert den Serverprozess zunächst, da noch keine Verbindung existiert.
#Die erste Verbindungsanfrage kommt und wird vom Betriebssystem angenommen, die Verbindung kommt zustande.
#Jetzt wird diese Verbindung durch das Quadrupel identifiziert.
##Der Serverprozess wird aufgeweckt und ihm ein Handle für diese Verbindung überreicht.
##Üblich startet der Serverprozess einen Kindprozess, dem er die Behandlung der Verbindung delegiert.
##Der Serverprozess fährt mit einer weiterer ''Accept''-Anforderung an das Betriebssystem fort.
*Dadurch ist es möglich, dass ein Webserver mehrere Verbindungen von verschiedenen Rechnern annehmen kann.
=== Ports ===
*Portnummern sind Dualsystem 16-Bit-Zahlen und reichen von 0 bis 65535.
*Ports von 0 bis 1023 sind reserviert
**Vergeben von '''I'''nternet '''A'''ssigned '''N'''umbers '''A'''uthority (IANA)
**z.B. ist Port 80 für '''H'''yper'''t'''ext '''T'''ransfer '''P'''rotocol (HTTP) reserviert.
*Das Benutzen der vordefinierten Ports ist nicht bindend.
**Jeder Administrator kann bspw. einen FTP-Server (normalerweise Port 21) auch auf einem beliebigen Port laufen lassen.
*Mehrfaches ''listen'' auf demselben Port ist nicht möglich.
== Verbindungsaufbau und -abbau ==
=== Allgemein ===
Ein Server, der seinen Dienst anbietet, erzeugt einen Endpunkt (Socket) mit der Portnummer und seiner IP-Adresse.
*Bezeichnet als "''passive open''" oder "''listen''".
Ein Client, der eine Verbindung aufbauen will, erzeugt einen Endpunkt (Socket) mit seiner IP-Adresse und einer eigenen, noch freien Portnummer.
*Mit der Adresse des Servers und dem Port kann dann eine Verbindung aufgebaut werden.
Während der Datenübertragungsphase sind die Rollen von Client und Server (aus TCP-Sicht) vollkommen symmetrisch.
*Bezeichnet als "''active open''"
Jeder der beiden beteiligten Rechner einen Verbindungsabbau einleiten.
=== Verbindungsaufbau ===
[[Datei:Tcp-handshake.svg|mini|500px| TCP-Handshake]]
#Der Client sendet dem Server ein ''SYN''-Paket mit einer Sequenznummer ''x''.
#*Die Sequenznummern sind für die Sicherstellung einer vollständigen Übertragung in der richtigen Reihenfolge und ohne Duplikate wichtig.
#*Ein Paket, dessen ''SYN-Bit'' im Header gesetzt ist.
#*Die Start-Sequenznummer ist eine beliebige zufällige Zahl, abhängig von der TCP-Implementierung. 
#Der Server empfängt das Paket und antwortet.
#*Port geschlossen, antwortet er mit einem TCP-RST, ein Signal, dass keine Verbindung aufgebaut werden kann.
#*Port geöffnet, bestätigt er den Erhalt des ersten SYN-Pakets und stimmt dem Verbindungsaufbau zu, indem er ein SYN/ACK-Paket zurückschickt.
#**Ein Paket, mit ACK-Flag im TCP-Header, welche die Sequenznummer ''x+1'' des SYN-Pakets im Header enthält.
#**Der Server sendet im Gegenzug seine Start-Sequenznummer ''y'', diese ist unabhängig von der Start-Sequenznummer des Clients. 
#Der Client bestätigt den Erhalt des SYN/ACK-Pakets durch ein eigenes ACK-Pakets mit der Sequenznummer ''x+1''.
#*Wird auch als „Forward Acknowledgement“ bezeichnet.
#*Aus Sicherheitsgründen sendet der Client die Sequenznummer des Servers + 1 im ACK-Segment zurück. 
#Die Verbindung ist damit aufgebaut.
==== Verbindungsaufbau Beispiel ====
{| style="text-align:center"
|-
|width="60px"| 1. || SYN-SENT ||width="60px"| → || <SEQ=100><CTL=SYN> ||width="60px"| → || SYN-RECEIVED
|-
| 2. || SYN/ACK-RECEIVED || ← || <SEQ=300><ACK=101><CTL=SYN,ACK> || ← || SYN/ACK-SENT
|-
| 3. || ACK-SENT || → || <SEQ=101><ACK=301><CTL=ACK> || → || ESTABLISHED
|}
*Nach Aufbau ist die Verbindung für beide Kommunikationspartner gleichberechtigt
*Man kann einer bestehenden Verbindung auf TCP-Ebene nicht ansehen, wer der Server und wer der Client ist.
*Eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr.
=== Verbindungsabbau ===
[[Datei:TCP-Teardown.svg|mini|500px| TCP-Teardown]]
*Der Verbindungsabbau kann ''beidseitig'' oder ''schrittweise einseitig'' erfolgen.
*Der geregelte Verbindungsabbau erfolgt dem Verbindungsaufbau ähnlich.
*#Statt dem SYN-Bits kommt das FIN-Bit zum Einsatz, welches anzeigt, dass keine Daten mehr vom Sender kommen werden.
*#Der Erhalt des Pakets wird mit ACK bestätigt und der Empfänger des FIN-Pakets sendet zuletzt seinerseits ein FIN-Paket.
*#Dieses FIN-Paket wird ihm zuletzt bestätigt.
*Ein verkürztes ist Verfahren möglich, bei dem FIN und ACK genau wie beim Verbindungsaufbau im selben Paket untergebracht werden.
=== Halb geschlossene Verbindungen ===
*Der Verbindungsabbau erfolgt schrittweise einseitig.
*Erlaubt der Gegenseite nach der einseitigen Trennung noch Daten zu übertragen.
=== Halb offene Verbindungen ===
*wenn eine Seite abstürzt, ohne dass die verbleibende Seite dies erfährt.
*Effekt: Betriebssystemressourcen werden nicht freigegeben.
*Ursprung: TCP-Verbindungen von der Protokollseite bestehen, bis sie abgebaut werden.
==== Maximum segment lifetime (MSL)====
*Die maximale Zeit, die ein Segment im Netzwerk verbringen kann, bevor es verworfen wird.
*Nach dem Senden des letzten ACKs wechselt der Client in einen zwei MSL andauernden Wartezustand (''wait state''), in dem alle verspäteten Segmente verworfen werden.
**Dadurch wird sichergestellt, dass keine verspäteten Segmente als Teil einer neuen Verbindung fehlinterpretiert werden können.
**Außerdem wird eine korrekte Verbindungsterminierung sichergestellt.
*Geht ACK ''y+1'' verloren, läuft beim Server der Timer ab, und das LAST_ACK-Segment wird erneut übertragen.
=== Puffer ===
*Beim Datenversand über TCP werden zwei Puffer verwendet.
#Senderseitig übermittelt die Applikation die Sendedaten an TCP und dieses puffert die Daten.
#Effizient werden mehrere kleine Übertragungen in Form einer einzigen großen gesendet.
#Empfängerseitig landen die empfangenen Daten im Puffer, dieser verfolgt ähnliche Ziele.
*Wenn von TCP mehrere einzelne Pakete empfangen wurden, ist es besser, diese zusammengefügt an die Applikation weiterzugeben.
=== Drei-Wege-Handschlag ===
*Typisch werden Antworten auf das erste SYN- bzw. FIN-Paket zu einem einzelnen Paket zusammengefasst (SYN/ACK bzw. FIN/ACK).
**Theoretisch wäre auch das Versenden zweier separater Pakete denkbar.
*In diesem Fall müssen nur noch drei Pakete versendet werden, man spricht vom Drei-Wege-Handschlag.
*Das Zusammenfassen des FIN-Pakets und ACK-Pakets ist problematisch.
**Das Fin-Paket signalisiert „keine weiteren Daten“.
*Allerdings kann der Sender des FIN-Pakets weiterhin Daten empfangen wollen (halb geschlossenen Verbindung).
; Überlegung
#Den Beginn einer HTTP-Anfrage im SYN-Paket mitschicken, weitere Daten nach Verbindungsaufbau.
#Im letzten HTTP-Request-Paket die Verbindung mittels FIN schließen.
*In der Praxis nicht angewendet da:
**Wenn der Browser die Verbindung auf diese Art schließt, würde möglicherweise der Server die Verbindung schließen, anstatt die Anfrage vollständig zu beantworten.
== Datenübertragung ==
[[Datei:Tcp daten.svg|mini| 450px | Segmentierung der Nutzdaten]]
=== TCP-/IP-Segment-Größe ===
*Typischerweise eine Größe von maximal 1500Bytes .
*Muss in die darunter liegende Übertragungsschicht passen, das  Internetprotokoll  (IP).
*IP-Pakete sind zwar bis 65.535Bytes (64KiB) spezifiziert, werden aber meist über Ethernet übertragen.
**Bei Ethernet ist die Größe der (Layer-3-)Nutzdaten auf 64 bis 1500Bytes festgelegt (bei Jumbo Frames höher).
*TCP- und IP-Protokoll definieren jeweils einen Header von 20Bytes Größe.
*Für die (Applikations-)Nutzdaten bleiben in einem TCP/IP-Paket also 1460Bytes übrig.
*Da die meisten Internet-Anschlüsse DSL verwenden, kommt zusätzlich das Point-to-Point Protocol (PPP) zwischen IP und Ethernet zur Anwendung (8Bytes).
Die Nutzdaten reduzieren sich also auf insgesamt 1500− 20− 20− 8 =1452Bytes  Maximum Segment Size (MSS).
*Dies entspricht einer maximalen Nutzdatenrate von 96,8 %.
=== Aufteilen der Anwendungsdaten auf TCP-/IP-Segmente ===
# Empfänger und Sender einigen sich vor dem Datenaustausch über das Options-Feld auf die Größe der Maximum Segment Size (MSS).
# Als Beispiel legt ein Webserver einen 7Kilobyte großen Datenblock im Puffer ab.
#* Um mit einem 1460Byte großen Nutzdatenfeld 7Kilobyte Daten zu versenden:
#*# Teilt die TCP-Software die Daten auf mehrere Pakete auf
#*# Fügt einen TCP-Header hinzu und versendet die TCP-Segmente.
#* Dieser Vorgang wird Segmentierung genannt.
# Der Datenblock im Puffer wird in fünf Segmente aufgeteilt, diese werden nacheinander abgeschickt.
## Jedes Segment erhält durch die TCP-Software einen TCP-Header.
# Segmente kommen nicht zwingend in richtiger Reihenfolge an.
# Um die Segmente wieder zu sortieren, ist jedes Segment nummeriert.
#* Bei der Zuordnung der Segmente im Empfänger wird die Sequenznummer herangezogen.
#Die TCP-Software des Empfängers bestätigt die einwandfrei angekommenen TCP-Segmente.
#*Andernfalls werden die Pakete neu angefordert.
=== Beispiel einer TCP-/IP-Datenübertragung ===
[[Datei:Tcp transfer.png|mini|450px| Beispiel eines Datentransfers]]
#Der Sender schickt sein erstes TCP-Segment mit einer Sequenznummer SEQ=1 und einer Nutzdatenlänge von 1460Bytes an den Empfänger.
#Der Empfänger bestätigt es mit einem TCP-Header, ohne Daten, mit ACK=1461 und fordert das zweite TCP-Segment ab dem Byte Nummer 1461 an.
#Sender schickt es dann mit einem TCP-Segment und SEQ=1461 an den Empfänger.
#Empfäner bestätigt es wieder mit einem ACK=2921.
*Der Empfänger braucht nicht jedes TCP-Segment zu bestätigen, wenn diese zusammenhängend sind.
*Empfängt er die TCP-Segmente 1–5, so braucht er nur das letzte TCP-Segment zu bestätigen.
*Fehlt zum Beispiel das 3. Segment, kann er nur die 1 und die 2 bestätigen, 4 und 5 jedoch noch nicht.
**Da der Sender keine Bestätigung für die 3 bekommt, läuft sein Timer ab, und er verschickt die 3 noch einmal.
**Kommt die 3 beim Empfänger an, so bestätigt er alle fünf TCP-Segmente, wenn beide die TCP-Option Selective ACK (SACK) unterstützen.
*Der Sender startet für jedes TCP-Segment, welches er auf die Reise schickt, einen Retransmission Timer.
=== Retransmission Timer ===
*Zur Feststellung, wann ein Paket im Netzwerk verloren gegangen ist, wird vom Sender ein Timeout verwendet, bis zu dem das ACK der Gegenseite eingetroffen sein muss.
**Timeout zu niedrig, Pakete werden doppelt geschickt.
**Timeout zu hoch, velorene Pakete werden zu spät neu geschickt.
*Aufgrund unterschiedlicher Laufzeiten der IP-Pakete ist nur ein dynamischer Timer sinnvoll.
=== Zusammenhang von Flusssteuerung und Staukontrolle ===
In den folgenden zwei Abschnitten werden die TCP-Konzepte zur Flusssteuerung und Staukontrolle (oder Überlaststeuerung) erläutert.
*Dabei werden das '' Sliding Window '' und das '' Congestion Window '' eingeführt.
*Der Sender wählt als tatsächliche Sendefenstergröße das Minimum aus beiden Fenstern.
*Es werden ARQ-Protokolle (Automatic Repeat reQuest) für eine zuverlässige Datenübertragung eingesetzt.
=== Flusssteuerung ===
[[Datei:Sliding window.svg|mini| Sliding Window]]
Da Daten aus dem Puffer gelesen werden, ändert sich der Füllstand des Puffers ständig.
* Deshalb ist es notwendig, den Datenfluss dem Füllstand entsprechend zu steuern.
** Dies geschieht mit dem '' Sliding Window '' und dessen Größe.
* Der Puffer des Senders wird auf auf 10 Segmente erweitert.
;Im Sliding Window (a) werden gerade die Segmente 1–5 übertragen.
# Obwohl der Puffer voll ist, werden die nächsten Daten (ab Byte 7301) mit ACK=7301 angefordert.
#* Das nächste Segment kann nicht mehr verarbeitet werden.
#* Mit dem Window-Feld (=0) teilt er dem Sender mit, dass keine Daten mehr verschickt werden sollen.
# Die Anwendung liest die Segmente 1–5 aus dem Puffer, es werden 7300Byte frei.
# Er kann die restlichen Segmente 6–10 mit einem TCP-Header (SEQ=1, ACK=7301, Window=7300), beim Sender anfordern.
# Der Sender weiß nun, dass er maximal fünf Segmente schicken kann, und verschiebt das Window um fünf Segmente nach rechts (Sliding Window (b)).
# Die Segmente 6–10 werden nun alle zusammen als ''Burst'' verschickt.
# Beim Ankommen aller TCP-Segmente beim Empfänger, quittiert er sie (SEQ=1 und ACK=14601) und fordert die nächsten Daten an.
=== Überlaststeuerung/Staukontrolle (Congestion Control) ===
*Wird eine Verbindung stark belastet, werden immer mehr Pakete verworfen.
*Durch die Wiederholung steigt wiederum die Belastung, dies sorgt (ohne Maßnahmen) für einen Datenstau.
*Die Verlustrate wird von einem IP-Netzwerk ständig beobachtet.
*Normalerweise wird eine TCP/IP-Verbindung langsam gestartet (Slow-Start) und die Senderate schrittweise erhöht, bis zum Datenverlust.
*Ein Datenverlust verringert die Senderate, ohne Verlust wird sie wiederum erhöht.
==== Algorithmus zur Überlaststeuerung ====
Gehen bei einer bestimmten Fenstergröße Pakete verloren, kann das festgestellt werden, wenn der Sender innerhalb einer bestimmten Zeit (Timeout) kein ACK erhält.
*Man muss davon ausgehen, dass das Paket aufgrund zu hoher Netzlast von einem Router im Netz verworfen wurde (Stau im Netz).
*Um den Stau aufzulösen, müssen alle beteiligten Sender ihre Netzlast reduzieren.
Dazu werden im RFC 2581 vier Algorithmen definiert:
#''slow start''
#''congestion avoidance''
#''fast retransmit''
#''fast recovery'',
*''slow start'' und ''congestion avoidance'' werden zusammen verwendet.
*''fast retransmit'' und ''fast recovery'' werden zusammen verwendet, sind eine Erweiterung von ''slow start'' und ''congestion avoidance''.
==== Slow Start Slow Start und Congestion Avoidance ====
[[Datei:TCPSlowStartundCongestionAvoidance.svg|mini|450px|Grafische Darstellung des Slow-Start-Algorithmus]]
*Der Slow-Start-Algorithmus dient zur Bestimmung des ''congestion window''.
*Da die momentane Auslastung des Netzes nicht bekannt ist, wird mit kleinen Datenmengen begonnen.
#Der Algorithmus startet mit einem kleinen Fenster, von einer Maximum Segment Size (MSS), in dem Datenpakete vom Sender zum Empfänger übertragen werden.
#Der Empfänger sendet ACK an den Sender zurück.
#Für jedes empfangene ACK wird die Größe des ''congestion window'' um eine MSS erhöht.
#*Dies führt innerhalb einer Roundtrip-Zeit zu einer Verdopplung des Congestion Windows.
#Dieses exponentielle Wachstum wird so lange fortgesetzt, bis der ''Slow-Start Threshold'' erreicht wird.
#*Die Phase des exponentiellen Wachstums wird auch ''Slow Start Phase'' genannt.
#Danach wird das Congestion Window nur noch um eine MSS erhöht, wenn alle Pakete aus dem Fenster erfolgreich übertragen wurden.
#*Es wächst pro Roundtrip-Zeit nur noch um eine MSS, also nur noch linear.
#**Diese Phase wird als ''Congestion Avoidance Phase'' bezeichnet.
#*Das Wachstum wird beendet, wenn das vom Empfänger festgelegte Empfangsfenster erreicht worden ist.
Kommt es zu einem Timeout, wird das ''congestion window'' auf 1 zurückgesetzt, der ''slow-start threshold'' wird auf die Hälfte der gesendeten, unquittierten Pakete herabgesetzt (Flight Size).
*Die Phase des exponentiellen Wachstums wird also verkürzt.
*Das Fenster wächst bei häufigen Paketverlusten nur langsam.
==== Fast-Retransmit und Fast-Recovery ====
*Werden eingesetzt, um nach Paketverlust schneller auf die Stau-Situation zu reagieren.
*Empfänger informiert den Sender, wenn Pakete außer der Reihe ankommen und somit dazwischen ein Paketverlust vorliegt.
*Der Empfänger bestätigt das letzte korrekte Paket erneut für jedes weitere ankommende Paket außer der Reihe.
*Man spricht dabei von ''Dup-Acks'' (''duplicate acknowledgments''),
**Mehrere aufeinanderfolgende Nachrichten, welche dasselbe Datensegment ACKen.
*Der Sender bemerkt die duplizierten ACKS, und nach dem dritten Duplikat sendet er sofort, vor Ablauf des Timers, das verlorene Paket erneut.
**Da nicht auf den Timerablauf gewartet werden muss, heißt das Prinzip ''Fast Retransmit''.
*Dup-Acks: auch Hinweise darauf, dass ein Paketverlust stattfand, dennoch die folgenden Pakete angekommen sind.
*Das Sendefenster wird nach dem Fehler nur halbiert (kein Slow-Start). 
Zusätzlich kann das Sendefenster noch um die Anzahl der Dup-Acks erhöht werden,
*Jedes Dup-Ack steht für ein weiteres Paket, welches den Empfänger erreicht hat.
*Dadurch kann nach dem Fehler schneller wieder die volle Sendeleistung erreicht werden.
*Das Prinzip nennt man ''Fast-Recovery''.
[[Datei:Tcp verbindung.png|none|750px|Verwaltung der TCP-Verbindungen als endlicher Automat]]

Version vom 28. März 2022, 12:45 Uhr

TCP (Transmission Control Protocol) ist ein Netzwerkprotokoll, das definiert, auf welche Art und Weise Daten zwischen Netzwerkkomponenten ausgetauscht werden sollen.

TCP (Transmission Control Protocol)
Familie: Internetprotokollfamilie
Einsatzgebiet: Zuverlässiger bidirektionaler
Datentransport
Netzwerk-IP-Transportprotokoll: Hypertext Transfer Protocol (HTTP), Simple Mail Transfer Protocol (SMTP)
Standards: RFC 793 (1981)
RFC 7323 (2014)

Beschreibung

Geschichte

  • 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.

Was ist TCP

  • Ist ein zuverlässiges, verbindungsorientiertes, paketvermitteltes (nicht paketvermittelnd) Transportprotokoll.
  • TCP ermöglicht die Übertragung eines Datenstroms.
  • Im Unterschied zum verbindungslosen 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.

Vorteile

  • Netzwerküberlastungskontrolle.
  • Zuverlässige Datenübertragung:
    • erkennt verlorene Segmente, doppelte Segmente 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.

Software-Schnitstelle

  • 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

Allgemeines

  • Das TCP-Segment besteht immer aus zwei Teilen: dem Header und der Nutzlast.
  • 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

Aufbau des TCP-Headers
Feld Funktion Größe
Source Port (Quellport)
  • Gibt die Portnummer auf der Senderseite an
2 Byte
Destinations Port (Zielport)
  • Gibt die Portnummer auf der Empfängerseite an.
2 Byte
Sequence Number
  • Sequenznummer des ersten Daten-Oktett dieses TCP-Segments, dient zur Sortierung Oder die Initialisierungs-Sequenznummer falls das SYN-Flag gesetzt ist
4 Byte
Acknowledgement Number
  • 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.
4 Byte
Data Offset
  • Gibt die Länge des TCP-Headers in 32-Bit-Blöcken an (ohne Nutzdaten).
  • 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

Feld Funktion Größe
ECE-Flag (ECN-Echo)
  • Teilt dem Sender mit, dass das Netzwerk überlastet ist und die Senderate reduziert werden muss.
  • 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

Syntax

Parameter

Optionen

Konfiguration

Dateien

Anwendungen

Dokumentation

Man-Pages

Info-Pages

Links

Intern

Weblinks

Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5