Tcp: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 22: Zeile 22:
 
; Control-Flag (6 Bit)
 
; Control-Flag (6 Bit)
 
: Sind zweiwertige Variablen mit den möglichen Zuständen ''gesetzt'' und ''nicht gesetzt'', die zur Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände benötigt werden. Im Folgenden werden die Flags des TCP-Headers und die von ihrem Zustand abhängigen, auszuführenden Aktionen beschrieben.
 
: Sind zweiwertige Variablen mit den möglichen Zuständen ''gesetzt'' und ''nicht gesetzt'', die zur Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände benötigt werden. Im Folgenden werden die Flags des TCP-Headers und die von ihrem Zustand abhängigen, auszuführenden Aktionen beschrieben.
:; URG
+
''URG''
:: Ist das Urgent-Flag ''(urgent = dringend)'' gesetzt, so werden die Daten nach dem Header sofort von der Anwendung bearbeitet. Dabei unterbricht die Anwendung die Verarbeitung der Daten des aktuellen TCP-Segments und liest alle Bytes nach dem Header bis zu dem Byte, auf das das ''Urgent-[[Zeiger (Informatik)|Pointer]]''-Feld zeigt, aus. Dieses Verfahren ist fern verwandt mit einem [[Softwareinterrupt]]. Dieses Flag kann zum Beispiel verwendet werden, um eine Anwendung auf dem Empfänger abzubrechen. Das Verfahren wird nur äußerst selten benutzt, Beispiele sind die bevorzugte Behandlung von CTRL-C (Abbruch) bei einer Terminalverbindung über [[Remote login|rlogin]] oder [[telnet]].
+
Wird das Flag URG auf 1 gesetzt, so bedeutet dies, daß der Urgent Pointer (Dringendzeiger) verwendet wird.
:: In der Regel wird dieses Flag nicht ausgewertet.
+
''ACK''
 +
Das ACK-Bit wird gesetzt, um anzugeben, daß die Bestätigungsnummer im Feld Acknowledgement Number gültig ist. Ist das Bit auf 0 gesetzt, enthält das TCP-Segment keine Bestätigung, das Feld Acknowledgement Number wird ignoriert.
 +
''PSH''
 +
Ist das PSH-Bit gesetzt, so werden die Daten in dem entsprechenden Segment sofort bei Ankunft der adressierten Anwendung bereitgestellt ohne sie zu puffern.
 +
''RST''
 +
Das RST-Bit dient dazu eine Verbindung zurückzusetzen, falls ein Fehler bei Übertragung aufgetreten ist. Dies kann sowohl der Fall sein, wenn ein ungültiges Segment übertragen wurde, ein Host abgestürzt ist oder der Versuch eines Verbindungsaufbaus abgewiesen werden soll.
 +
''SYN''
 +
Das SYN-Flag (Synchronize Sequenze Numbers) wird verwendet, um Verbindungen aufzubauen. Zusammen mit der Acknowledgement Number und dem ACK-Bit wird die Verbindung im Form eines Dreiwege-Handshake aufgebaut (siehe oben).
 +
'''FIN'''
 +
Das FIN-Bit dient zum Beenden einer Verbindung. Ist das Bit gesetzt, gibt dies an, daß der Sender keine weiteren Daten zu Übertragen hat. Das Segment mit gesetztem FIN-Bit muß quittiert werden.
 +
 
  
:; ACK
 
:: Das ''Acknowledgment''-Flag hat in Verbindung mit der ''Acknowledgment''-Nummer die Aufgabe, den Empfang von TCP-Segmenten beim Datentransfer zu bestätigen. Die ''Acknowledgment''-Nummer ist nur gültig, wenn das Flag gesetzt ist.
 
:; PSH
 
:: Beim Versenden von Daten über das TCP werden zwei [[Puffer (Informatik)|Puffer]] verwendet. Senderseitig übermittelt die Applikation die zu sendenden Daten an das TCP und dieses puffert die Daten, um mehrere kleine Übertragungen effizienter in Form einer einzigen großen zu senden. Nachdem die Daten dann an den Empfänger übermittelt wurden, landen sie im empfängerseitigen Puffer. Dieser verfolgt ähnliche Ziele. Wenn vom TCP mehrere einzelne Pakete empfangen wurden, ist es besser, diese zusammengefügt an die Applikation weiterzugeben.
 
:: RFC 1122 und RFC 793 spezifizieren das PSH-Flag so, dass bei gesetztem Flag sowohl der ausgehende, als auch der eingehende Puffer übergangen wird. Da man bei TCP keine Datagramme versendet, sondern einen Datenstrom hat, hilft das PSH-Flag, den Strom effizienter zu verarbeiten, da die empfangende Applikation so gezielter aufgeweckt werden kann und nicht bei jedem eintreffenden Datensegment feststellen muss, dass Teile der Daten noch nicht empfangen wurden, die aber nötig wären, um überhaupt weitermachen zu können.
 
:: Hilfreich ist dies, wenn man zum Beispiel bei einer [[Telnet]]-Sitzung einen Befehl an den Empfänger senden will. Würde dieser Befehl erst im Puffer zwischengespeichert werden, so würde dieser (stark) verzögert abgearbeitet werden.
 
:: Das PSH-Flag kann, abhängig von der TCP-Implementation im Verhalten zu obiger Erklärung abweichen.
 
:; RST
 
:: Das ''Reset''-Flag wird verwendet, wenn eine Verbindung abgebrochen werden soll. Dies geschieht zum Beispiel bei technischen Problemen oder zur Abweisung unerwünschter Verbindungen (wie etwa nicht geöffneten Ports, hier wird – anders als bei UDP – kein ICMP-Paket mit „Port Unreachable“ verschickt).
 
:; SYN
 
:: Pakete mit gesetztem SYN-Flag initiieren eine Verbindung. Der Server antwortet normalerweise entweder mit SYN+ACK, wenn er bereit ist, die Verbindung anzunehmen, andernfalls mit RST. Dient der Synchronisation von ''Sequenznummern'' beim Verbindungsaufbau (daher die Bezeichnung SYN).
 
:; FIN
 
:: Dieses Schlussflag (''finish'') dient zur Freigabe der Verbindung und zeigt an, dass keine Daten mehr vom Sender kommen. Die FIN- und SYN-Flags haben Sequenznummern, damit diese in der richtigen Reihenfolge abgearbeitet werden.
 
 
; [[RWin|(Receive) Window]] (2 Byte)
 
; [[RWin|(Receive) Window]] (2 Byte)
 
: Ist die Anzahl der Daten-[[Oktett (Informatik)|Oktetts]] (''Bytes''), beginnend bei dem durch das ''Acknowledgmentfeld'' indizierten Daten-Oktett, die der Sender dieses TCP-Pakets bereit ist zu empfangen.
 
: Ist die Anzahl der Daten-[[Oktett (Informatik)|Oktetts]] (''Bytes''), beginnend bei dem durch das ''Acknowledgmentfeld'' indizierten Daten-Oktett, die der Sender dieses TCP-Pakets bereit ist zu empfangen.

Version vom 26. Januar 2017, 11:09 Uhr

TCP Header

Tcpheader.png

Aufbau des TCP-Headers

Allgemeines

Das TCP-Segment besteht immer aus zwei Teilen, dem Header und der Nutzlast (Vorlage:Lang). 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 Kommunikation erforderliche Daten sowie die Dateiformat-beschreibende Information. Da das Options-Feld in der Regel nicht genutzt wird, hat ein typischer Header eine Größe von 20 Byte.

Erläuterung

Source Port (Quellport) (2 Byte)
Gibt die Portnummer auf der Senderseite an.
Destination Port (Zielport) (2 Byte)
Gibt die Portnummer auf der Empfängerseite an.
Sequence Number (4 Byte)
Sequenznummer des ersten Daten-Oktett dieses TCP-Pakets oder die Initialisierungs-Sequenznummer falls das SYN-Flag gesetzt ist. Nach der Datenübertragung dient sie zur Sortierung der TCP-Segmente, da diese in unterschiedlicher Reihenfolge beim Empfänger ankommen können.
Acknowledgement Number (Quittierungsnummer) (4 Byte)
Sie gibt die Sequenznummer an, die der Empfänger dieses TCP-Segmentes als Nächstes erwartet. Sie ist nur gültig, falls das ACK-Flag gesetzt ist.
Data Offset (4 Bit)
Das Feld Offset (oder auch Header Length) gibt die Länge des TCP- Headers in 32-Bit Worten an. Dies entspricht dem Anfang der Daten im TCP-Segment. Das Feld ist notwendig, da der Header durch das Optionsfeld eine variable Länge hat.
Reserved (6 Bit)
Das Reserved-Feld wird nicht verwendet und muss null sein. RFC 3168 definiert einen Mechanismus zur expliziten Benachrichtigung über Stausituationen im Netz, für den zwei weitere Flags (CWR und ECE) eingeführt werden. Das Reserved-Feld wird entsprechend verkürzt.
Control-Flag (6 Bit)
Sind zweiwertige Variablen mit den möglichen Zuständen gesetzt und nicht gesetzt, die zur Kennzeichnung bestimmter für die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustände benötigt werden. Im Folgenden werden die Flags des TCP-Headers und die von ihrem Zustand abhängigen, auszuführenden Aktionen beschrieben.

URG Wird das Flag URG auf 1 gesetzt, so bedeutet dies, daß der Urgent Pointer (Dringendzeiger) verwendet wird. ACK Das ACK-Bit wird gesetzt, um anzugeben, daß die Bestätigungsnummer im Feld Acknowledgement Number gültig ist. Ist das Bit auf 0 gesetzt, enthält das TCP-Segment keine Bestätigung, das Feld Acknowledgement Number wird ignoriert. PSH Ist das PSH-Bit gesetzt, so werden die Daten in dem entsprechenden Segment sofort bei Ankunft der adressierten Anwendung bereitgestellt ohne sie zu puffern. RST Das RST-Bit dient dazu eine Verbindung zurückzusetzen, falls ein Fehler bei Übertragung aufgetreten ist. Dies kann sowohl der Fall sein, wenn ein ungültiges Segment übertragen wurde, ein Host abgestürzt ist oder der Versuch eines Verbindungsaufbaus abgewiesen werden soll. SYN Das SYN-Flag (Synchronize Sequenze Numbers) wird verwendet, um Verbindungen aufzubauen. Zusammen mit der Acknowledgement Number und dem ACK-Bit wird die Verbindung im Form eines Dreiwege-Handshake aufgebaut (siehe oben). FIN Das FIN-Bit dient zum Beenden einer Verbindung. Ist das Bit gesetzt, gibt dies an, daß der Sender keine weiteren Daten zu Übertragen hat. Das Segment mit gesetztem FIN-Bit muß quittiert werden.


(Receive) Window (2 Byte)
Ist die Anzahl der Daten-Oktetts (Bytes), beginnend bei dem durch das Acknowledgmentfeld indizierten Daten-Oktett, die der Sender dieses TCP-Pakets bereit ist zu empfangen.
Checksum (2 Byte)
Die Prüfsumme dient zur Erkennung von Übertragungsfehlern und wird über den TCP-Header, die Daten und einen Pseudo-Header berechnet. Dieser Header besteht aus der Ziel-IP, der Quell-IP, der TCP-Protokollkennung (0x0006) und der Länge des TCP-Headers inkl. Nutzdaten (in Bytes).
Vorlage:Lang (2 Byte)
Zusammen mit der Sequenz-Nummer gibt dieser Wert die Position des ersten Bytes nach den Urgent-Daten im Datenstrom an. Die Urgent-Daten beginnen sofort nach dem Header. Der Wert ist nur gültig, wenn das URG-Flag gesetzt ist.
Options (0–40 Byte)
Das Options-Feld ist unterschiedlich groß und enthält Zusatzinformationen. Die Optionen müssen ein Vielfaches von 32 Bit lang sein. Sind sie das nicht, muss mit Nullbits aufgefüllt werden (Vorlage:Lang). Dieses Feld ermöglicht, Verbindungsdaten auszuhandeln, die nicht im TCP-Header enthalten sind, wie zum Beispiel die Maximalgröße des Nutzdatenfeldes.