Tcp

Aus xinux.net
Zur Navigation springen Zur Suche springen

Wichtige Kenndaten sind die Ports

  • TCP muss die empfangenen Daten an die korrekte Applikation weiter leiten.
  • Zur Adressierung der Anwendungen werden deshalb sogenannte Portnummern verwendet.
  • Portnummern sind 16 Bit groß
  • Auch UDP verwendet Portnummern zur Adressierung.
  • Die Transportprotokolle TCP und UDP haben jeweils eigene Adreßräume.
  • Der Gültigkeitsbereich einer Portnummer ist auf einen Host beschränkt.
  • IP-Adresse und Portnummer spezifiziert einen Kommunikationsendpunkt, einen sogenannten Socket.
  • Die Socketnummern von Quelle und Ziel identifizieren die Verbindung (socket1, socket2).
  • Eine Verbindung ist durch die Angabe dieses Paares eindeutig identifiziert.
  • Well-known Ports gehen von 0 bis 1023. Nur root/Adminstrator darf diese "öffnen".
  • Registrierte Ports von 1024 bis 49151.
  • Dynamische oder auch private Ports 49152 bis 65535.


TCP Header

32 Bit
Source Port Destination Port
Sequence Number
Acknowledge Number
Offset Reserved Flags Window
Checksum Urgent Pointer
Options Paddings
Data


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.
Window
Das Feld Fenstergröße enthält die Anzahl Bytes, die der Empfänger ab dem bereits bestätigten Byte empfangen kann. Mit der Angabe der Fenstergröße erfolgt in TCP die Flußsteuerung. Das TCP-Protokoll arbeitet nach dem Prinzip eines Schiebefensters mit variabler Größe (Sliding Window). Jede Seite einer Verbindung darf die Anzahl Bytes senden, die im Feld für die Fenstergröße angegeben ist, ohne auf eine Quittung von der Empfängerseite zu warten. Währen des Sendens können gleichzeitug Quittungen für die von der anderen Seite empfangenen Daten eintreffen (diese Quittungen können wiederum neue Fenstergrößen einstellen).
Eine Fenstergröße von 0 besagt, daß die Bytes bis einschließlich der Acknowledgement Number minus Eins empfangen wurden, der Empfänger momentan aber keine weiteren Daten empfangen kann. Die Erlaubnis zum weiteren Senden von Daten erfolgt durch das versenden eines Segments mit gleicher Bestätigungsnummer und einer Fenstergröße ungleich Null.
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).
Urgent Pointer (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.

Eine Vollständige TCP-Verbindung

Tcp1.png

Im Gegensatz zum UDP Protokoll, bei dem nur ein Paket gesendet wird, gibt es beim TCP Protokoll mehrere Pakete, um die Verbindung herzustellen.

Abbildung mit Wireshark

Wireshark.png